- 楼主
- #1
- 已编辑
考虑到现在站内并没有一个完整 具体系的精灵包教程,虽然相关操作很简单,我还是决定简要的写一些东西,以便小白了解精灵包原理和子模组制作者参考。没有过多解释,如果你只是想加个精灵包也可以直接移步“运行原理”模块。
因为我同样是刚刚起步的modder,如有问题还请多多指出!这里是我用来作为示例的文件。https://disk.monika.love/s/Kd3sP
闲话少说,我们开始!
一:**精灵包其名**:
是因为他使用了叫做一个JavaScript object notation数据格式,也就是你看到的.json文件,“script”就能翻译成“精灵”。
二:**精灵包组成部分概论**:
一个完整的精灵包应该包含四个部分。
1._本体文件(monika/x)_:位于“game/mod_assets/monika”文件夹内,根据你在j文件中的group,其子级文件夹会有名称差异。比如,在a文件夹(acs)里的"acs-case-0.png"这个文件,它就是游戏内选中会实际显示的图片,如图。(而衣服(clothes)的本体文件就在c文件夹中)当你在游戏内对应分组选择相应的文件时,这个图片就会在特定的位点显示出来。
2._缩略图(thumbs)_:这个文件是你在游戏内选择列表看到的图片。位于“mas/game/mod_assets/thumbs”文件夹内。比如,示例中thumbs文件夹中的“acs-case.png”文件
3._json文件_:这是精灵包的核心部分,位于“mas/game/mod_assets/monika/j”文件夹内,包含了文件路径和文件分组等等,一个精灵包如果有bug也往往是j文件引起的(什),在这里不做详细描述。如有需求请移步“相关部分细述”。
4._.gift文件_:可以将其理解为一个触发器,位于“characters”文件夹中。只有在你把正确名称的“xxx.gift”放到characters文件夹中,莫才能收到你的精灵包礼物。此处所谓正确名称,与j文件中“giftname”一行键值对一致。
这里我引述站内wiki,讲的很详细:
三:**运行原理**:当你把相关文件(j,a(c),thumbs,xxx.gift)都放入正确的文件夹后,.json文件会被游戏Python所带的json模块当做一个对象(object)读取(不会有人不知道mas是Python做的吧!),这就是为什么j文件要用大括号将所有数据都括住。相当于把代码“run”了进去。
把xxx.gift打入以后,会“触发”j文件进程,把thumbs文件夹内的缩略图放在游戏内列表显示,相关选项选中以后在游戏内显示,还有莫接收到礼物的对话等等,如果你的莫表示收到,且游戏内可以正常在相应分组选中显示,就说明你的精灵包打入成功了!
**tip**:一些位点是游戏本体所没有的,需要通过添加选择器(selector)才能正常使用(比如呆毛(ahoge)),位点的解释我放在“**相关部分细述**”中。
这里我分享一个国外大佬MayJay制作的选择器,很好用。如果你不知道MayJay是谁,可以去随便找个精灵包整合,有大量带有“mj”修饰的精灵包文件,那就是他的名称缩写(也就是说 他制作了相当大量的精灵包)。https://disk.monika.love/s/pMJS9
四:**相关部分细述**:这个模块当然是提供给想要进一步了解 参考的mod-preparer!
●json文件:最先讲的肯定是json文件了。这里提供最简单的桌面摆件和相对最复杂的衣服两个例子。为节省时间,我使用DeepSeek进行主体讲解,我的补充说明会用**粗体**标出。
这里我直接使用我刚做的“case”进行讲解。
示例文件:https://disk.monika.love/s/W63uD
selector:https://disk.monika.love/s/pMJS9
1. __author
"__author": "口香糖"
- 解释:这是一个字符串,表示该 JSON 文件的作者。
- 用途:用于标识资源的创建者或维护者。
2. version
"version": 3
- 解释:这是一个数字,表示该 JSON 文件的版本号。
其实写2 3都无所谓。 - 用途:用于标识文件的版本,便于更新和维护。
3. type
"type": 0
- 解释:这是一个数字,表示资源的类型标识。
- 用途:用于区分不同类型的资源,比如acs(0)和clothes(2)。
4. name
"name": "case"
- 解释:这是一个字符串,表示资源的唯一名称。
- 用途:用于在代码或资源管理中引用该资源。
5. img_sit
"img_sit": "case"
- 解释:这是一个字符串,表示资源对应的图像文件名称。
- 用途:用于加载或显示该资源的图像。
这里是一个重点,比如示例中的“acs-case-0”acs是因为type2,case就是名称,0是因为下面的posemap中为0。
---
6. pose_map
"pose_map": {
"default": "0",
"l_default": "0"
}
- 解释:这是一个对象,定义了资源在不同姿势下的行为或属性。
default
:字符串,表示默认姿势的标识。l_default
:字符串,表示左侧默认姿势的标识。
- 用途:用于控制资源在不同姿势下的显示或行为。
7. rec_layer
"rec_layer": 2
- 解释:这是一个数字,表示资源的渲染层级。就是图层啦
- 用途:用于控制资源在游戏中的显示顺序(层级越高,显示越靠前)。
8. priority
"priority": 7
- 解释:这是一个数字,表示资源的优先级。
- 用途:用于控制资源在游戏中的交互顺序或显示优先级。
9. acs_type
"acs_type": "table_acs"
- 解释:这是一个字符串,表示资源的类型。
- 用途:用于标识资源的类别(如桌面道具)。
10. stay_on_start
"stay_on_start": true
- 解释:这是一个布尔值(这个有话题包可以让莫教给你),表示资源是否在游戏开始时保持显示。ture就完事了。
- 用途:用于控制资源的初始状态。
11. keep_on_desk
"keep_on_desk": true
- 解释:这是一个布尔值,表示资源是否保持在桌面上。true就完事了。
- 用途:用于控制资源在桌面上的显示状态。
12. select_info
"select_info": {
"display_name": "case",
"thumb": "case",
"group": "table_acs",
"select_dlg": [
"又在做精灵包了?"
]
}
- 解释:这是一个对象,定义了资源的选择信息。
display_name
:字符串,表示资源的显示名称。thumb
:字符串,表示缩略图文件名称。group
:字符串,表示资源所属的分组(如桌面道具)。select_dlg
:数组,包含选择资源时的对话内容。方括号是json文件中并列数组(值)的,你可以在这里写上很多不同对话,在游戏内选中该文件时会随机抓取,这里我只写了一句。
- 用途:用于在游戏界面中显示资源的相关信息。
13. dlg_desc
"dlg_desc": "case"
- 解释:这是一个字符串,表示资源的对话描述。
- 用途:用于在对话中引用该资源。
得写,不写会error
14. dlg_plural
"dlg_plural": false
- 解释:这是一个布尔值,表示对话是否为复数形式。
- 用途:用于控制对话的语法形式。
15. giftname
"giftname": "case"
- 解释:这是一个字符串,表示资源的礼物名称。
- 用途:用于标识资源作为礼物时的名称。
下面我再给出一个clothes的示例,用mj大佬的其中一套作例,也在刚才的分享链接里有。
1. __author
"__author": "MayJay // finale"
2. version
"version": 3
``
---
### **3. `type`**
```json
"type": 2
- 解释:look,clothes类型的就是2。
4. name
"name": "mj_darkpurple_finalehoodie"
5. img_sit
"img_sit": "mj_darkpurple_finalehoodie"
6. pose_map
"pose_map": {
"mpm_type": 0,
"p1": true,
"p2": true,
"p3": true,
"p4": true,
"p5": true,
"p6": true,
"p7": true
}
- 解释:这是一个对象,定义了资源在不同姿势下的行为或属性。
mpm_type
:数字,表示姿势映射的类型。0就完事了(雾)p1
到p7
:布尔值,表示是否支持特定的姿势。这个精灵包一共七个png。
- 用途:用于控制资源在不同姿势下的显示或行为。在最下面有对应的调用示例。
7. stay_on_start
"stay_on_start": true
- 解释:这是一个布尔值,表示资源是否在游戏开始时保持显示。
- 用途:用于控制资源的初始状态。
和刚才一样,true就完事了。
8. select_info
"select_info": {
"display_name": "Finale Hoodie (Dark Purple)",
"thumb": "mj_darkpurple_finalehoodie",
"group": "clothes",
"select_dlg": [
"Are we going somewhere special, [player]?",
"Nice and warm~",
"Nice and warm, but your arms would be even warmer~"
]
}
- 解释:这是一个对象,定义了资源的选择信息。
display_name
:字符串,表示资源的显示名称。thumb
:字符串,表示缩略图文件名称。group
:字符串,表示资源所属的分组。这里的分组就是clothesselect_dlg
:数组,包含选择资源时的对话内容。
- 用途:用于在游戏界面中显示资源的相关信息。
9. giftname
"giftname": "mj_darkpurple_finalehoodie"
10. pose_arms
"pose_arms": {
"crossed": {
"tag": "crossed",
"layers": "5^10"
},
"left-down": {
"tag": "down",
"layers": "0"
},
"left-rest": {
"tag": "rest",
"layers": "10"
},
"right-down": {
"tag": "down",
"layers": "0"
},
"right-point": {
"tag": "point",
"layers": "0"
},
"right-restpoint": {
"tag": "restpoint",
"layers": "10"
},
"steepling": {
"tag": "steepling",
"layers": "10"
},
"def|left-def": {
"tag": "def",
"layers": "10"
},
"def|right-def": {
"tag": "def",
"layers": "5^10"
}
}
- 解释:这是一个对象,定义了资源在不同手臂姿势下的属性。
- 每个键(如
crossed
、left-down
)表示一种手臂姿势。 tag
:字符串,表示姿势的标签。layers
:字符串,表示渲染层级
- 每个键(如
- 用途:用于控制资源在不同手臂姿势下的显示或行为。
这里我需要进行进一步阐述:这里的pose_arms, 决定了在c文件夹中png的前缀是“arms”,而在缩进后的其他键,比如第一条“crossed”layer是“5 ^ 10”,就会调用arms-crossed-10和arms-crossed-5这两个文件,其他的大同小异。
所谓**位点**,其实就是一个types,一个位点在同一时刻只能显示一张(组)图片,比如桌子的左前和右前就是两个位点,有时候还会有项圈和项链是两个位点的情况。
●thumbs文件:要使用180x180px的png,这就是游戏中列表显示图的样子,名称相关前已述。
●本体文件:使用1280x850px的png,放入对应文件夹,名称相关前已述。
这两个在制作时都要把背景图层的颜色做成透明,不然就会像那个case一样,白的一坨
(其实thumbs无所谓了),用绘图软件做就行。
总结:就是简单的说一说精灵包的问题,如果你要进行相关操作,还是要养成勤备份存档的习惯以防出错。
如果是零基础要上手,完全可以去扒一份现成的j文件看一看,注意大小写和中英文符号问题。
因个人能力有限,本篇教程内容不尽完整,也有可能含有纰漏,欢迎大家补充 指正。
**爱莫!**