.menu文件的组成

部分内容参考自 https://seesaawiki.jp/com3d2mod_wiki/d/menu

编辑此种文件请使用本人编写的全功能 MOD 制作工具

具体不重要,如果你真的想知道文件结构,请查看本人编写的序列化库

https://github.com/MeidoPromotionAssociation/MeidoSerialization

在 menu 编辑器里就是这样的:

图片
图片
图片
图片

实际上

实际上在当前版本(COM3D2 2.40.0 + MaidLoader)中数据段之前的

  • 路径字符串

  • 名称字符串

  • 分类字符串

  • 说明字符串

全都不重要,根本不会显示在游戏中,而且也不会起作用

我们只需要关系数据段(属性)的内容就好,也就是各个编辑器的大框中的内容

数据段(属性)内容

menu 的数据段会根据 “类别(category)” 不同而写法不同,制作物品 MOD 时,最好参考同一类别已有的物品进行编写。


编写注意

  1. 行首若是 ;/// 则该行为注释,不会被执行。

  2. icons 字段若被删除,则该物品在衣装列表中不可见(官方的 “掀起裙子” menu 等就有使用这种方法)。

  3. 编写顺序:从上到下执行。所以如果需要执行节点消去、着色器替换等操作,要注意它们在文档内的顺序。


メニューフォルダ

(菜单文件夹)

理论上是内部路径名称,如今不重要,保持 DRESS 即可。

category

(类别)

  • 用于将物品分类显示在编辑画面的对应菜单中。

  • 似乎全小写也能识别,但代码里面是有大写的

  • 这里的 “category” 和 “additem/delitem” 中指定的 槽位(slot) 并不相同,需要注意。

COM3D2 -> 2.40.0 -> Assembly-CSharp.dll -> Tbody.cs 可见如下类别:

折叠
  public enum SlotID
  {
    body,
    head,
    eye,
    hairF,
    hairR,
    hairS,
    hairT,
    wear,
    skirt,
    onepiece,
    mizugi,
    panz,
    bra,
    stkg,
    shoes,
    headset,
    glove,
    accHead,
    hairAho,
    accHana,
    accHa,
    accKami_1_,
    accMiMiR,
    accKamiSubR,
    accNipR,
    HandItemR,
    accKubi,
    accKubiwa,
    accHeso,
    accUde,
    accAshi,
    accSenaka,
    accShippo,
    accAnl,
    accVag,
    kubiwa,
    megane,
    accXXX,
    chinko,
    chikubi,
    accHat,
    kousoku_upper,
    kousoku_lower,
    seieki_naka,
    seieki_hara,
    seieki_face,
    seieki_mune,
    seieki_hip,
    seieki_ude,
    seieki_ashi,
    accNipL,
    accMiMiL,
    accKamiSubL,
    accKami_2_,
    accKami_3_,
    HandItemL,
    underhair,
    moza,
    end,
  }

俺翻译的:

折叠
原名
翻译

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

  • 通常为 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可实现一次点击同时执行多件装备/消去操作。

  • 用于:

    1. 选中某件衣服时,先把容易干涉的装备 del 掉。

    2. 强制切换其它部位的衣装(合套功能)。


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 含有多个槽位

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 数量不匹配,或者着色器不一致,会出错。

  • 执行顺序:

    1. 先加载 model 中默认材质

    2. 再执行本 .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) 有效,若在编辑界面发现别的分类能用,多半在场景切换后会报错。

  • 合成方式通常是 AlphaMultiply

    • 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 文件。主要用于:

    1. 无限色 (フリーカラー)

    2. 统一头发颜色/肌色

  • 常见 key:_MainTex, _ShadowTex, _HiTex, 也可能有 (_ToonRamp), (_ShadowRateToon) 等。

  • 可以在这里指定一个 “颜色类型”,如 HAIR, SKIN 等,从而跟随角色发色或肤色进行变化。

  • 若只是普通换装,而没有配合无限色系统,则写法类似:

tex ├(body) ├(材质编号0) ├_ToonRamp └toonSkin.tex

リソース参照

(Resource 引用)

  • 用于“翻起裙子(_mekure)”、“拉下裤子(_zurashi)”等小细节。当脚本检测到某动作时,会强制替换 model。

  • 官方可用类别:

  • _mekure:仅适用于 skirtonepiece

  • _zurashi:仅适用于 panzmizugi

  • 如果你想让这件衣装一直处于拉下/翻起状态,可以不使用 _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,填了之后就自带循环动画

常见问题

  1. LO 高多边形身体与“body001_moza_I_.menu” 报错

  • 某些第三方身体 MOD 的 .menu 调用了非官方的马赛克文件,会导致冲突。

  • 可改写为官方的 body001_moza_i_.menu 即可。

  • 如果存档已经错误记录,则可用第三方工具(例如“プリセットエディター”或“セーブデータクリーナー”) 打开存档,找到马赛克的项替换回官方即可。


以上为 .menu 文件相关的常见编写要点与说明。

最后更新于