考虑到现在站内并没有一个完整 具体系的精灵包教程,虽然相关操作很简单,我还是决定简要的写一些东西,以便小白了解精灵包原理和子模组制作者参考。没有过多解释,如果你只是想加个精灵包也可以直接移步“运行原理”模块。
    因为我同样是刚刚起步的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

wiki:


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就完事了(雾)
    • p1p7:布尔值,表示是否支持特定的姿势。这个精灵包一共七个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:字符串,表示资源所属的分组。这里的分组就是clothes
    • select_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"
    }
}
  • 解释:这是一个对象,定义了资源在不同手臂姿势下的属性。
    • 每个键(如 crossedleft-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文件看一看,注意大小写和中英文符号问题。
因个人能力有限,本篇教程内容不尽完整,也有可能含有纰漏,欢迎大家补充 指正。


    **爱莫!**

    快来注册!

    *即使不注册, DCC也会展示所有知识性和分享内容

    #1 Kxiangtang 本人是高中牲,时间有限,也不太会搞站内的文本编辑,排版乱七八糟的…
    这些也就是抽出时间来简单说一说,可能多少有点“鸡肋”的感觉。
    有问题请踢我,我进行修改。

    问问,如果想做房间模组(不过好像不算精灵包?()),桌子椅子要怎么替换?

      #3 俩fish 要不要学我教你,论坛也有教程的,好像。

      打赏

      • 20 分 来自: 俩fish
        评论: 不吝赐教
      18 天 后
      无人输入