魔女图鉴 #
魔女图鉴包含四大分类:
- Clues (证物) - 可在审判中出示的证据
- Profiles (人物档案) - 角色的详细介绍
- Rules (规定) - 魔女游戏的规则条款
- Notes (记录) - 剧情记录或日志
所有分类的数据都在 info.json 中配置,并通过脚本指令在剧情中动态更新。
版本化结构 #
所有魔女图鉴字段都使用 Id-Items 结构,支持版本管理:
[
{
"Id": "条目ID",
"Items": [
{
"Version": 1,
"字段1": "内容"
},
{
"Version": 2,
"字段1": "更新后的内容"
}
]
}
]
通过 @update 指令可以在剧情推进时更新到指定 Version,实现内容随剧情变化。
Clues (证物) #
自定义证物,可在审判中出示。
info.json 配置 #
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| Id | String | ✅ | 证物ID,推荐格式: [ModId]_[章节]-[编号] |
| Items | Array | ✅ | 版本列表 |
| Items[].Version | Number | ✅ | 版本号 (1, 2, 3…) |
| Items[].Name | 本地化对象 | ✅ | 证物名称 |
| Items[].Description | 本地化对象 | ✅ | 证物描述,支持 <br> 换行 |
证物图片路径: [MOD文件夹]/WitchBook/Clues/[Id].png
配置示例:
"Clues": [
{
"Id": "MaxMixAlex_ManosabaModEnhance_1-1",
"Items": [
{
"Version": 1,
"Name": {
"zh-Hans": "希罗的日记",
"ja": "ヒロの日記"
},
"Description": {
"zh-Hans": "在牢房中发现的薄笔记本。<br><br>封面没有任何装饰,内页记录着在监牢里度过的日子。",
"ja": "牢房で見つかった薄いノート。"
}
},
{
"Version": 2,
"Name": {
"zh-Hans": "希罗的日记"
},
"Description": {
"zh-Hans": "在牢房中发现的薄笔记本。<br><br>内页反复出现了艾玛的名字。<br><br>在审判中被当庭公开。"
}
}
]
}
]
脚本中使用 #
完整的搜证流程 (带UI动画):
; 显示证物弹窗
@spawn "Clue" Params:MaxMixAlex_ManosabaModEnhance_1-1
; 显示更新提示
@toast "魔女图鉴 更新…"
; 更新到版本1
@update "MaxMixAlex_ManosabaModEnhance_1-1" Category:"Clue" Version:1
@Wait "i1.2"
; 关闭弹窗
@despawn "Clue"
@Wait "0.6"
在审判中出示证据:
@evidence correct:"MaxMixAlex_ManosabaModEnhance_1-1" Clue
Profiles (人物档案) #
角色的详细介绍,需要配合 Characters 使用。
info.json 配置 #
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| Id | String | ✅ | 角色ID (对应 Characters 中的 Id) |
| Items | Array | ✅ | 版本列表 |
| Items[].Version | Number | ✅ | 版本号 |
| Items[].Description | 本地化对象 | ✅ | 角色档案介绍 |
人物档案图片路径: [MOD文件夹]/WitchBook/Profiles/[Id].png (推荐尺寸 400x600)
人物档案的 Id 必须与 Characters 中的 Id 对应,系统会自动关联角色信息
配置示例:
"Profiles": [
{
"Id": "EmaNew",
"Items": [
{
"Version": 1,
"Description": {
"zh-Hans": "14岁,初中时期的樱羽艾玛。<br><br>希罗的好友。"
}
},
{
"Version": 2,
"Description": {
"zh-Hans": "14岁,初中时期的樱羽艾玛。<br><br>在审判中作为关键证人被传唤。"
}
}
]
}
]
脚本中使用 #
; 初次出场时解锁档案
@update "EmaNew" Category:"Profile" Version:1
; 剧情发展后更新档案
@update "EmaNew" Category:"Profile" Version:2
; 在审判中出示人物档案
@evidence correct:"EmaNew" Profile
文件结构 #
[MOD根目录]/
├─ Characters/
│ └─ EmaNew/
│ ├─ 1.png ← 立绘
│ └─ 2.png
├─ WitchBook/
│ └─ Profiles/
│ └─ EmaNew.png ← 档案图片 (与角色ID同名)
└─ info.json
Rules (规定) #
游戏规则说明,魔女游戏的核心条款。
info.json 配置 #
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| Id | String | ✅ | 规定ID |
| Items | Array | ✅ | 版本列表 |
| Items[].Version | Number | ✅ | 版本号 |
| Items[].Numbering | String | ✅ | 章节编号(如 I, II, III),支持任意文本 |
| Items[].Subtitle | 本地化对象 | ✅ | 规定名称 |
| Items[].Description | 本地化对象 | ✅ | 规定详细说明 |
配置示例:
"Rules": [
{
"Id": "MaxMixAlex_ManosabaModEnhance_1",
"Items": [
{
"Version": 1,
"Numbering": "I",
"Subtitle": {
"zh-Hans": "游玩规则"
},
"Description": {
"zh-Hans": "点左键浏览下一条对话,右键隐藏对话框。<br>滚轮可以快速浏览历史对话。"
}
}
]
},
{
"Id": "MaxMixAlex_ManosabaModEnhance_3",
"Items": [
{
"Version": 1,
"Numbering": "R",
"Subtitle": {
"zh-Hans": "碎碎念"
},
"Description": {
"zh-Hans": "Numbering 字段可以使用任意文本,不局限于罗马数字。"
}
}
]
}
]
脚本中使用 #
@update "MaxMixAlex_ManosabaModEnhance_1" Category:"Rule" Version:1
Notes (记录) #
剧情记录或日志,用于记载重要事件。
info.json 配置 #
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| Id | String | ✅ | 记录ID |
| Items | Array | ✅ | 版本列表 |
| Items[].Version | Number | ✅ | 版本号 |
| Items[].Title | 本地化对象 | ✅ | 记录标题 |
| Items[].Description | 本地化对象 | ✅ | 记录内容 |
配置示例:
"Notes": [
{
"Id": "MaxMixAlex_ManosabaModEnhance_1",
"Items": [
{
"Version": 1,
"Title": {
"zh-Hans": "魔女图鉴"
},
"Description": {
"zh-Hans": "新增魔女图鉴中证物、人物、规定、记录四个分类下数据的自定义……"
}
}
]
}
]
脚本中使用 #
@update "MaxMixAlex_ManosabaModEnhance_1" Category:"Note" Version:1
命名规范 #
为避免与原版游戏数据的 Id 发生冲突,所有 Id 字段都推荐以 Mod 文件夹名称作为前缀。
推荐格式:
- 证物:
[ModId]_[章节]-[编号],如MyMod_1-1,MyMod_2-3 - 规定/记录:
[ModId]_[编号],如MyMod_1,MyMod_2 - 人物档案: 与 Characters 中的 Id 保持一致
加载器不会对 Id 格式进行强制校验。
覆写原版内容 #
如果使用了与原版相同的 Id (如 1-1),加载器将自动以 MOD 数据替换对应的原版魔女图鉴条目。
覆写规则:
- 该 Id 下所有版本的数据都将被 MOD 数据替代
- 对于人物档案,覆写原版角色时无需在 Characters 中重新定义该角色,原版角色名和颜色样式会被自动使用
- 系统一次只加载一个 MOD 的魔女图鉴数据,不同 MOD 之间不会发生 Id 冲突
本地化字段格式 #
所有文本字段都使用本地化对象格式:
{
"zh-Hans": "简体中文文本",
"ja": "日本語テキスト"
}
目前支持的语言:
zh-Hans- 简体中文ja- 日文
即使只需要支持一种语言,也必须使用对象格式而不是直接字符串
完整工作流示例 #
以下是一个从配置到使用的完整示例:
1. info.json 配置 #
{
"Characters": [
{
"Id": "EmaNew",
"Name": { "zh-Hans": "艾玛" },
"FamilyName": { "zh-Hans": "樱羽" },
"Color": "#ffd1d9",
"Age": "14",
"Height": "153",
"Weight": "36"
}
],
"Clues": [
{
"Id": "MyMod_1-1",
"Items": [
{
"Version": 1,
"Name": { "zh-Hans": "神秘信件" },
"Description": { "zh-Hans": "一封来历不明的信件。" }
}
]
}
],
"Profiles": [
{
"Id": "EmaNew",
"Items": [
{
"Version": 1,
"Description": { "zh-Hans": "14岁,初中时期的樱羽艾玛。" }
}
]
}
]
}
2. 文件结构 #
[MOD根目录]/
├─ Characters/
│ └─ EmaNew/
│ └─ 1.png
├─ WitchBook/
│ ├─ Clues/
│ │ └─ MyMod_1-1.png
│ └─ Profiles/
│ └─ EmaNew.png
├─ Scripts/
│ └─ ...
└─ info.json
3. 脚本中使用 #
; 搜证 - 发现证物
@spawn "Clue" Params:MyMod_1-1
@toast "魔女图鉴 更新…"
@update "MyMod_1-1" Category:"Clue" Version:1
@Wait "i1.2"
@despawn "Clue"
@Wait "0.6"
; 解锁人物档案
@update "EmaNew" Category:"Profile" Version:1
; 审判中出示证据
@evidence correct:"MyMod_1-1" Clue