.menu文件的组成
部分内容参考自 https://seesaawiki.jp/com3d2mod_wiki/d/menu
编辑此种文件请使用本人编写的全功能 MOD 制作工具
支持所有 mod 文件格式(.menu、.mate、.pmat、.col、.phy、.psk、.tex、.anm、.model)
.menu 文件结构
具体不重要,如果你真的想知道文件结构,请查看本人编写的序列化库
https://github.com/MeidoPromotionAssociation/MeidoSerialization
在 menu 编辑器里就是这样的:
实际上
实际上在当前版本(COM3D2 2.40.0 + MaidLoader)中数据段之前的
路径字符串
名称字符串
分类字符串
说明字符串
全都不重要,根本不会显示在游戏中,而且也不会起作用
我们只需要关系数据段(属性)的内容就好,也就是各个编辑器的大框中的内容
数据段(属性)内容
menu 的数据段会根据 “类别(category)” 不同而写法不同,制作物品 MOD 时,最好参考同一类别已有的物品进行编写。
编写注意
行首若是
;、/或//则该行为注释,不会被执行。icons 字段若被删除,则该物品在衣装列表中不可见(官方的 “掀起裙子” menu 等就有使用这种方法)。
编写顺序:从上到下执行。所以如果需要执行节点消去、着色器替换等操作,要注意它们在文档内的顺序。
メニューフォルダ
(菜单文件夹)
理论上是内部路径名称,如今不重要,保持 DRESS 即可。
category
(类别)
用于将物品分类显示在编辑画面的对应菜单中。
似乎全小写也能识别,但代码里面是有大写的
这里的 “category” 和 “additem/delitem” 中指定的 槽位(slot) 并不相同,需要注意。
COM3D2 -> 2.40.0 -> Assembly-CSharp.dll -> Tbody.cs 可见如下类别:
俺翻译的:
折叠
Body
身体
Head
头
Eye
眼镜
All
全部
Wear
上衣
Skirt
裙子
Onepiece
连衣裙
Mizugi
泳装
Panz
内裤
Bra
胸罩
Stkg
袜子
Shoes
鞋子
Headset
头饰
Glove
手套
hairF
前发
hairR
后发
hairS
侧发
hairT
假发
hairAho
呆毛
accHead
头配饰
accHana
鼻配饰
accHa
牙配饰
accKami_1_
配饰头发_1_
accKami_2_
配饰头发_2_
accKami_3_
配饰头发_3_
accMiMiR
右耳配饰
accMiMiL
左耳配饰
accKami
头发配饰
accKamiSubR
配饰发带右
accKamiSubL
配饰发带左
accKamiSub
配饰发带
accNipR
右乳头
accNipL
左乳头配饰
HandItemR
右手物品
HandItemL
左手物品
accKubi
配饰项链
accKubiwa
配饰项圈
accHeso
肚脐配饰
accUde
手腕配饰
accAshi
脚配饰
accSenaka
背部配饰
accShippo
配饰尾巴
accAnl
屁眼配饰
accVag
小穴配饰
kubiwa
项圈
megane
眼镜
accXXX
阴蒂配饰
chikubi
乳头
chinko
鸡鸡
accHat
配饰帽子
kousoku_upper
拘束具_上
kousoku_lower
拘束具_下
underhair
底发
seieki
精液
seieki_naka
精液_中
seieki_hara
精液_腹
seieki_face
精液_顔
seieki_mune
精液_胸
seieki_hip
精液_臀
seieki_ude
精液_手
seieki_ashi
精液_脚
moza
马赛克
Set
(套装菜单用类别)
在编辑界面的“套装”选项中,会把多个物品组合后一次性装配。
常见分类:
set_maidwear(女仆服)set_mywear(一般服装)set_underwear(内衣)set_body(体型,仅COM中使用)
注意事项
“category” 大小写识别严格,需要和官方一致,否则有可能无法正常工作。
“category” 标明的是物品显示在哪个菜单分类;但和真正的“物品槽位”是两个概念。
catno
通常为
0del=-1其他值可以实现一些特殊效果,比如不显示所持数等。
priority
(优先级)
图标显示的优先级。数值越小越靠前,越大越靠后,支持小数点。
官方的“消去menu”常用
0,不建议手动使用。部分类别中会引起异常。同一数值时,会按
name字段顺序排列。
name
(名称)
物品名称。
setumei
(描述)
物品说明。
哪怕是
_zurashi,_mekure之类不会显示在编辑列表的 menu,也最好写点什么以减少报错几率。若想留空,也需要保证在文本中加空行或 Tab 占位,避免程序出错。
icons
(图标)
指定图标图片。若删除
icons字段,该物品不会在衣装列表出现。一些工具插件仅识别
icons(不识别icon),因此使用icons更稳妥。图标大小没有硬性规定,官方一般是
80x80。
アイテムパラメータ
(ItemParam)
格式:
アイテムパラメータ [Tab] category名 [Tab] 自定义名称 [Tab] 数值脚本
script里可以通过IsItemParam(0, 'xxx')来做条件分支。例如:特定衣装时台词不同等。COM 版本脚本并未广泛使用该功能,但可自行添加、扩展脚本功能。
脚本示例:
当
menu里写有アイテムパラメータ category 特殊衣裳_ボンテージ 1时,就能触发上面的对话分支。
onclickmenu
点击该物品图标时需要执行的操作,一般指向
xxx_del.menu这类“消去用menu”。指定多个menu可实现一次点击同时执行多件装备/消去操作。
用于:
选中某件衣服时,先把容易干涉的装备
del掉。强制切换其它部位的衣装(合套功能)。
unsetitem
多见于 del 类菜单,用来取消物品。
additem
指定要“装配”的物品。
相同槽位(Slot) 下只能显示最后生效的物品,之前的会被覆盖或消去。
在 COM 及其后续版本中,有些情况下可以叠加,比如多处纹身 (acctatoo) 同时存在,但存档/场景切换后可能只保留一个,需要手动调整。
若只做
maskitem/shader更改等,不一定必须写additem;但是node消去不会生效,需要additem去真正加载并挂接它。“category”和“槽位”不同,注意别混淆。
例如
accmimi类型的物品真正的槽位可能是accMiMiL/accMiMiR。撰写
additem时要特别留心大小写正确,否则游戏会报错。
常见槽位(slot) 列表:
部分 category 含有多个槽位:
acckami
accKami_1_, accKami_2_, accKami_3_
acckamisub
accKamiSubL, accKamiSubR
accmimi
accMiMiL, accMiMiR
accnip
accNipL, accNipR
HandItemR/L仅在内部处理,不对应编辑界面分类。
アタッチ
(Attach)
在
additem条目中,可以指定将物品吸附到某个部位(骨骼或挂点)上,实现“捆绑/吸附”效果。但要注意,部分动作(舞蹈、不同场景等) 可能没有对应的 IK 骨骼,导致位置错乱或丢失,需要重载游戏或场景。
若是手持道具,官方多用 IK 骨骼
_IK_handL / _IK_handR,但部分动作中左手 IK 骨骼会缺失,可改为直接附着在hand_L / hand_R骨骼上。具体可在
.menu文件里先delitem清空无关槽位,再additem加载对应物品并指定 “アタッチ” 的位置。
maskitem
仅在外观上隐藏指定槽位物品,而不真正删除。
若该物品被摘除(
del),那么先前被 mask 的物品就会重新显示。常用于实现“衣服覆盖下隐藏内衣”等效果。
delitem
移除指定物品,与
additem相反。常见于上衣和连衣裙不可叠穿等情况,需要互斥时用
delitem清除。如果只想暂时隐藏,可用
maskitem而不是delitem。
マテリアル変更
(材质替换)
用另一个
.mate文件覆盖原model的材质设置。model内部每个材质都有编号(从0开始),若model内的材质数量与.mate数量不匹配,或者着色器不一致,会出错。执行顺序:
先加载
model中默认材质再执行本
.menu中的 “マテリアル変更”
如果想彻底无视
model里写的着色器,可以在.menu里进行 “shader” 强制指定(见后述)。
消去ノード
(节点消去)
用于隐藏身体(boby001.model) 的某些顶点组,以避免服装穿模。
按照
.menu中从上到下顺序执行,写在前面的会先被执行。若要做改造衣装(露出更多身体),只需去掉相关消去节点即可。
部分类别(如
acckami,acckamisub,accmimi,accnip) 不支持节点消去。
常见可消去骨骼节点(body001.model官方):
一些骨骼有 “_SCL” 后缀,用来控制缩放。消去这些会有不同表现。
パーツnode消去
可以在衣装之间互相消去。例如消去“容易与之冲突的另一件物品”的部分节点。
写法与消去 body 上的节点相似,只是目标改为对应槽位的 model。
テクスチャ合成
(纹理合成)
在指定的
model纹理上合成另一张纹理,多用于 “痣(hokuro)”、“纹身(acctatoo)” 等。仅对 肌(skin) 和 头发(hair) 有效,若在编辑界面发现别的分类能用,多半在场景切换后会报错。
合成方式通常是
Alpha或Multiply。Alpha:透明通道正常叠加,适合白色效果、液体等。Multiply:乘算,白色部分保持原状,适合与底色融合的情况。
若多种合成方式共存,则最后添加的会把所有贴图的合成模式都改掉,所以若要多重纹身共存,最好都使用
Alpha。
脸部材质号(GP01 之后会更多分层):
身体材质合成示例:
例如:
テクスチャ合成 body 0 _MainTex 1 some_tatoo.tex Alphalayer (1,2,3)可以区分前后背等多个纹身。官方去除纹身的
_i_acctatoo_del.menu仅处理这几个 layer,若你用了更高层,需要自行添加删除语句。
夜伽用官方纹理合成也同理,包括“精液、汗、烛泪、鞭痕”等,都是往头 head 或身体 body 指定材质合成。
テクスチャ変更
(Texture 直接替换)
直接替换纹理,不经过
.mate文件。主要用于:无限色 (フリーカラー)
统一头发颜色/肌色
常见 key:
_MainTex,_ShadowTex,_HiTex, 也可能有(_ToonRamp),(_ShadowRateToon)等。可以在这里指定一个 “颜色类型”,如
HAIR,SKIN等,从而跟随角色发色或肤色进行变化。若只是普通换装,而没有配合无限色系统,则写法类似:
リソース参照
(Resource 引用)
用于“翻起裙子(_mekure)”、“拉下裤子(_zurashi)”等小细节。当脚本检测到某动作时,会强制替换 model。
官方可用类别:
_mekure:仅适用于skirt、onepiece_zurashi:仅适用于panz、mizugi如果你想让这件衣装一直处于拉下/翻起状态,可以不使用
_mekure或_zurashi命名规则。官方规则会自动将它们从编辑菜单中隐藏。非官方扩展:通过自定义
.ks(脚本) 增加@ItemChange,然后编写对应menu并在其中设定リソース参照即可实现新的“撩/翻”动作,但需自行写好“还原”逻辑和差分 model。
アタッチポイントの設定
(自定义挂点)
在
.menu文件中可定义新的挂点(attach point),指定位置(x,y,z)和旋转(rx,ry,rz)。再在
additem中调用这些挂点,就能将物品附着到自定义坐标。需要与被附着的
model协同,例如要在 “head/hairF/body” 里事先声明这些挂点。一般格式:
官方示例(body):
(同理 head、hairF 等也会有“额头、耳垂、鼻子”等挂点名)
shader 変更
(着色器切换)
COM3D2及之后提供的功能,CM3D2本体无法识别此写法。可以在
.menu中直接指定新着色器,而无需让.model或.mate保持一致。不可指定
unlit类着色器。需放在
additem或材质替换之后才能生效,顺序很重要。示例:
即修改 slot=
wear、材质编号=2的着色器为CM3D2_Toony_Lighted_Cutout_AtC。
color 変更
(颜色修改)
多见于头发、肌肤的预设色
.menu文件(_i_haircolor_*.menu/skin)。格式示例:
这里可指定 RGBA(0~255),或针对
_ShadowColor,_RimColor,_OutlineColor等做调整。
tex 変更
与上节类似,但只写于
.menu,可指明指定槽位、材质编号、toon纹理、是否为无尽色等。官方的预设肌(非自由着色) 就只写一个
toonSkin.tex。
System 扩展
prop: 用于修改model的 shape key,比如男性 NPC 体型调节。mancolor: 男性轮廓色修改。
anime
(动画)
用于指定 .anm 文件
第一行是部位 第二行是 .anm 文件名,.anm 可以省略 第三行可以填 loop,填了之后就自带循环动画
常见问题
LO 高多边形身体与“body001_moza_I_.menu” 报错
某些第三方身体 MOD 的
.menu调用了非官方的马赛克文件,会导致冲突。可改写为官方的
body001_moza_i_.menu即可。如果存档已经错误记录,则可用第三方工具(例如“プリセットエディター”或“セーブデータクリーナー”) 打开存档,找到马赛克的项替换回官方即可。
以上为 .menu 文件相关的常见编写要点与说明。
最后更新于