.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 可见如下类别:
俺翻译的:
Set
(套装菜单用类别)
在编辑界面的“套装”选项中,会把多个物品组合后一次性装配。
常见分类:
set_maidwear
(女仆服)set_mywear
(一般服装)set_underwear
(内衣)set_body
(体型,仅COM中使用)
注意事项
“category” 大小写识别严格,需要和官方一致,否则有可能无法正常工作。
“category” 标明的是物品显示在哪个菜单分类;但和真正的“物品槽位”是两个概念。
catno
通常为
0
del
=-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 版本脚本并未广泛使用该功能,但可自行添加、扩展脚本功能。
脚本示例:
@if exp="IsItemParam(0,'特殊衣裳_ボンテージ')" @talk 这……真是重口味啊! @hitret @else @talk 这件衣服怎么样? @hitret @endif @return
当
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) 列表:
accAnl, accAshi, accHana, accHat, accHead, accHeso, accVag, accSenaka, accKubi, accKubiwa, accKami_1_, accKami_2_, accKami_3_, accNipL, accNipR, accMiMiL, accMiMiR, accKamiSubL, accKamiSubR, accTatoo, accShippo, accHa, accUde, accXXX, headset, megane, glove, HandItemR, HandItemL, kousoku_upper, kousoku_lower, body, head, chikubi, moza, mizugi, wear, onepiece, shoes, skirt, stkg, bra, panz, kousoku, hairAho, hairF, hairR, hairS, hairT, underhair
部分 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官方):
Head(头) / Neck(颈) / Clavicle(锁骨) / Spine(脊椎) / Spine1 / Spine1a / Mune(胸) / UpperArm(上臂) / Uppertwist(上臂扭转) / Pelvis(骨盆) / Toe(脚趾) / Bip01(全身) / Thigh(大腿) / Foot(脚) / Calf(小腿) / momotwist_L(左大腿扭转) / momotwist_R(右大腿扭转) / Mune_L / Mune_L_sub / Mune_R / Mune_R_sub / Kata_L / Kata_L_nub / Kata_R / Kata_R_nub
一些骨骼有 “_SCL” 后缀,用来控制缩放。消去这些会有不同表现。
パーツnode消去
可以在衣装之间互相消去。例如消去“容易与之冲突的另一件物品”的部分节点。
写法与消去 body 上的节点相似,只是目标改为对应槽位的 model。
テクスチャ合成
(纹理合成)
在指定的
model
纹理上合成另一张纹理,多用于 “痣(hokuro)”、“纹身(acctatoo)” 等。仅对 肌(skin) 和 头发(hair) 有效,若在编辑界面发现别的分类能用,多半在场景切换后会报错。
合成方式通常是
Alpha
或Multiply
。Alpha
:透明通道正常叠加,适合白色效果、液体等。Multiply
:乘算,白色部分保持原状,适合与底色融合的情况。
若多种合成方式共存,则最后添加的会把所有贴图的合成模式都改掉,所以若要多重纹身共存,最好都使用
Alpha
。
脸部材质号(GP01 之后会更多分层):
0: 右眼 (eye) 1: 左眼 (eye) 2: 高光 (eye_hi) 3: 眉 (mayu) 4: (预留) 5: 肌 (skin) + 叠加层(如hokuro, lip, facegloss, nose等) 6: 口内 7: 右眼高光 8: 白眼 9: 眼睑线(Fb专用) 10: 上睫毛(Fb专用) 11: 下睫毛(Fb专用)
身体材质合成示例:
category = acctatoo(纹身) slot = body matno = 0 layer = 1 / 2 / 3 合成方式 = Alpha
例如:
テクスチャ合成 body 0 _MainTex 1 some_tatoo.tex Alpha
layer (1,2,3)可以区分前后背等多个纹身。官方去除纹身的
_i_acctatoo_del.menu
仅处理这几个 layer,若你用了更高层,需要自行添加删除语句。
夜伽用官方纹理合成也同理,包括“精液、汗、烛泪、鞭痕”等,都是往头 head
或身体 body
指定材质合成。
テクスチャ変更
(Texture 直接替换)
直接替换纹理,不经过
.mate
文件。主要用于:无限色 (フリーカラー)
统一头发颜色/肌色
常见 key:
_MainTex
,_ShadowTex
,_HiTex
, 也可能有(_ToonRamp)
,(_ShadowRateToon)
等。可以在这里指定一个 “颜色类型”,如
HAIR
,SKIN
等,从而跟随角色发色或肤色进行变化。若只是普通换装,而没有配合无限色系统,则写法类似:
tex ├(body) ├(材质编号0) ├_ToonRamp └toonSkin.tex
リソース参照
(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” 里事先声明这些挂点。一般格式:
アタッチポイントの設定 ├挂点名称 ├x ├y ├z ├rx ├ry └rz
官方示例(body):
アタッチポイントの設定 ├アナル ├ヴァギナ ├クリトリス ├へそ ├乳首右 └乳首左
(同理 head、hairF 等也会有“额头、耳垂、鼻子”等挂点名)
shader 変更
(着色器切换)
COM3D2
及之后提供的功能,CM3D2
本体无法识别此写法。可以在
.menu
中直接指定新着色器,而无需让.model
或.mate
保持一致。不可指定
unlit
类着色器。需放在
additem
或材质替换之后才能生效,顺序很重要。示例:
shader ├wear ├2 └CM3D2_Toony_Lighted_Cutout_AtC
即修改 slot=
wear
、材质编号=2
的着色器为CM3D2_Toony_Lighted_Cutout_AtC
。
color 変更
(颜色修改)
多见于头发、肌肤的预设色
.menu
文件(_i_haircolor_*.menu
/skin
)。格式示例:
color ├hairF ├0 ├_Color ├255 ├255 ├255 └255
这里可指定 RGBA(0~255),或针对
_ShadowColor
,_RimColor
,_OutlineColor
等做调整。
tex 変更
与上节类似,但只写于
.menu
,可指明指定槽位、材质编号、toon纹理、是否为无尽色等。官方的预设肌(非自由着色) 就只写一个
toonSkin.tex
。
System 扩展
prop
: 用于修改model
的 shape key,比如男性 NPC 体型调节。mancolor
: 男性轮廓色修改。
anime
(动画)
用于指定 .anm 文件
anime
accSenaka
learn_class3.anm
loop
第一行是部位 第二行是 .anm 文件名,.anm 可以省略 第三行可以填 loop,填了之后就自带循环动画
常见问题
LO 高多边形身体与“body001_moza_I_.menu” 报错
某些第三方身体 MOD 的
.menu
调用了非官方的马赛克文件,会导致冲突。可改写为官方的
body001_moza_i_.menu
即可。如果存档已经错误记录,则可用第三方工具(例如“プリセットエディター”或“セーブデータクリーナー”) 打开存档,找到马赛克的项替换回官方即可。
以上为 .menu
文件相关的常见编写要点与说明。
最后更新于