> For the complete documentation index, see [llms.txt](https://90135.gitbook.io/com3d2_simple_mod_guide_chinese/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://90135.gitbook.io/com3d2_simple_mod_guide_chinese/fu-lu/.menu-wen-jian-de-zu-cheng.md).

# .menu文件的组成

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

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

* 支持所有 mod 文件格式（.menu、.mate、.pmat、.col、.phy、.psk、.tex、.anm、.model）
* <https://github.com/90135/COM3D2_MOD_EDITOR>

## .menu 文件结构

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

<https://github.com/MeidoPromotionAssociation/MeidoSerialization>

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

![图片](https://github.com/user-attachments/assets/e7b9854d-a662-4dc1-82cf-6a796c081283)

![图片](https://github.com/user-attachments/assets/fc89861f-debb-47e4-bb63-54e443bf35e6)

![图片](https://github.com/user-attachments/assets/16f6e6ea-dfe7-48f5-91da-d4a02dd7ebab)

![图片](https://github.com/user-attachments/assets/c0b9ae9a-43ae-4bbb-a2b7-fe2aef3aefce)

### 实际上

实际上在当前版本（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 可见如下类别：

<details>

<summary>折叠</summary>

```
  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,
  }
```

</details>

俺翻译的：

<details>

<summary>折叠</summary>

| 原名             | 翻译        |
| -------------- | --------- |
| 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           | 马赛克       |

</details>

**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)** 有效，若在编辑界面发现别的分类能用，多半在场景切换后会报错。
* 合成方式通常是 `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` 文件。主要用于：
  1. 无限色 (フリーカラー)
  2. 统一头发颜色/肌色
* 常见 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，填了之后就自带循环动画

### 常见问题

1. **LO 高多边形身体与“body001\_moza\_I\_.menu” 报错**

* 某些第三方身体 MOD 的 `.menu` 调用了非官方的马赛克文件，会导致冲突。
* 可改写为官方的 `body001_moza_i_.menu` 即可。
* 如果存档已经错误记录，则可用第三方工具(例如“プリセットエディター”或“セーブデータクリーナー”) 打开存档，找到马赛克的项替换回官方即可。

***

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