Files
spellforge/docs/handbook/07_game_designer.md

169 lines
7.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 07 游戏设计器(一站式可视化配置工具)
> **核心理念**:策划 / 美术 / 开发**无需写一行代码**,在编辑器的「🎮 游戏设计器」面板里调数值、改玩法、加内容。所有改动保存为 `res://data/*.json`,游戏运行时自动加载。
---
## 1. 打开工具
1. 启用插件(默认已启用):`项目 → 项目设置 → 插件 → 勾选 "Game Designer"`
2. 编辑器**底部面板**点击 **「🎮 游戏设计器」** 标签(与"输出""调试器"并列)
3. 出现 7 个分页:**✨法术 / 👾敌人 / 🌊波次 / 🪄Core / 🔮共鸣 / 🔥状态 / ⚖平衡**
> 🏛 **纯数据驱动架构**:游戏所有内容数据**只存在于 `res://data/*.json`**,代码不含任何硬编码内容副本或回退。这意味着——改 JSON 就是改游戏,数据是唯一权威源。若某个 data 文件缺失,游戏会在输出面板 `push_error` 明确报错(而非静默用旧值)。
> 首次启用或改插件后,可能需**重启 Godot 编辑器**让面板出现。
---
## 2. 通用工作流
```
在面板里改数值/加内容 → 点「💾 保存」 → 按 F5 运行游戏 → 改动生效
```
> ⚠️ **所有改动需重启游戏(F5)生效**——数据在游戏启动时由各 Manager 一次性加载。
---
## 3. 七个分页详解
> 所有分页均为**字段化表单**(输入框/下拉/复选框/行编辑器),选项显示为「中文 English」双语,**无需手写 JSON**。
### ✨ 法术(spells.json
新增/编辑/删除法术,最丰富的玩法配置。**字段化表单**,详见 [06 法术编辑器](06_spell_editor.md)。
- 列表 → 选中编辑;➕新增 / ⧉复制 / 🗑删除
- 固定字段:ID / 类型(动作/修饰/触发/逻辑) / 显示名 / 描述
- **元素标签**:火/冰/雷/水/毒 复选框(可多选)+ 自定义标签框(非元素 tag)
- **通用 meta**:蓝耗 mana_cost / 商店价 shop_cost / 解锁价 unlock_cost
- **动态字段**:随类型(及 ACTION 动作种类 弹道/毒池/召唤、LOGIC logic_op)自动切换;伤害类型/施加状态等为下拉;schema 之外的键落入「其它(JSON)」框保留不丢
- 💧 **蓝耗**`meta.mana_cost` 决定施放消耗的魔力(0=免蓝);权威数值见 `numerical_design §2`
### 👾 敌人(enemies.json
6 种敌人原型的数值表格,**直接拖动数字框**调整:
| 列 | 含义 |
|:---|:---|
| 速度 | 移动速度(px/s|
| 护甲 | 每次命中减免的固定伤害 |
| 尺寸 | 渲染直径(px),Boss 设大更醒目 |
| 颜色 | 点色块选颜色(敌人渲染色)|
原型:杂兵 / 快速 / 护甲 / 精英 / 首领(MiniBoss) / 终焉(Boss)
### 🌊 波次(waves.json
**关卡难度曲线编辑器**——逐波配置:
| 列 | 含义 |
|:---|:---|
| 怪数 | 本波杂兵数量 |
| 血量 | 杂兵基础血量 |
| 类型 | 杂兵原型(杂兵/快速/护甲…)下拉 |
| 精英 | 带寻路的精英数(W15+)|
| 金币 / XP | 波次结算奖励 |
| Boss | 无 None / 首领 MiniBoss / 终焉 Boss |
- 「➕末尾加一波」扩展关卡长度
- 改完点「💾保存 waves.json」
### 🪄 Corecores.json
法杖类型配置(影响法术排列玩法):
| 字段 | 含义 |
|:---|:---|
| 槽位数 | 可装法术数 |
| 拓扑 | 线性 LINEAR / 矩阵 MATRIX / 电路 CIRCUIT |
| CPU 上限 | 单次施法最大执行步数 |
| 施法间隔 | 自动施法冷却(s) |
| 蓝上限(Mana Max) | 法杖蓝池上限(基础 100) |
| 回蓝/秒(Mana Regen) | 每秒回复的魔力(基础 5) |
| 特性 | 无 None / 记忆 PERSISTENT_MEMORY / 双流 / 末位施法 / 洗牌 / 无限法术 |
| 矩阵行·列 | MATRIX 专用网格尺寸 |
| 电路边 | CIRCUIT 专用,`from → to` 行编辑器(可 ➕加/🗑删边)|
### 🔮 共鸣(resonance.json
元素组合自动合成配方(隐藏玩法):
- **元素 A + 元素 B**(元素下拉,相邻放置)→ 合成**产物法术**
- 匹配方式:相邻 adjacent / 卡组内任意 anywhere_in_deck
- 消耗输入:合成后是否移除原两张法术
- 例:`tag:water` + `tag:lightning``action_plasma_storm`
### 🔥 状态(status_effects.json
DoT/控制/叠层效果:
| 字段 | 含义 |
|:---|:---|
| 状态 ID | 整数(1=燃烧 2=冻结 3=中毒…),与法术 meta 的 `apply_status_id` 对应 |
| 持续时间 / 跳字间隔 | DoT 周期 |
| 叠层模式 | 刷新 REFRESH / 叠层 INTENSITY / 独立 INDEPENDENT |
| 最大层数 | 0=无限 |
| 每跳伤害 | DoT 每次伤害 |
| VFX ID | 触发的特效 |
### ⚖ 平衡(balance.json
全局数值微调:
- **难度乘子表格**:4 行(敌人血量×/玩家受伤×/波次怪数×/Boss血量×) × 3 档(初学者/标准/挑战)
- **Boss 基础血量**MiniBoss(W8) / Final Boss(W20)
- **碎片奖励阈值**:波次 → 碎片 行编辑器(可 ➕加/🗑删行),元进度奖励表
调一格数字即可改变整体难度曲线。
---
## 4. 数据流原理
```
🎮 游戏设计器面板 ──保存──▶ res://data/*.json ──游戏 F5 启动加载──▶ 各 Manager
(编辑器内) (纯文本,可 git 版本管理)
spells.json → SpellRegistry
enemies.json → EnemyManager
waves.json → WaveManager
cores.json → WandPreset
balance.json → SettingsManager + WaveManager
```
- JSON 是**唯一权威数据源**——代码不含硬编码内容副本(纯数据驱动)
- 文件缺失/格式错误 → `push_error` 明确报错(不静默,便于发现问题)
- 数据是纯文本,**多人协作改数值不会冲突代码**,可走 git review
### 数据文件清单
| 文件 | 内容 | 加载方 |
|:---|:---|:---|
| `spells.json` | 全部法术定义 | SpellRegistry |
| `enemies.json` | 6 敌人原型数值 | EnemyManager |
| `waves.json` | 20 波关卡曲线 | WaveManager |
| `cores.json` | 法杖 Core 定义 | WandPreset |
| `resonance.json` | 共鸣配方 | SpellEvaluator |
| `status_effects.json` | 状态效果定义 | StatusRegistry |
| `balance.json` | 难度乘子 + Boss 血量 | SettingsManager |
---
## 5. 实操示例
### 例 1:让游戏更简单(策划)
平衡分页 → 「敌人血量×」初学者列改 `0.5` → 保存 → F5。初学者难度敌人血量减半。
### 例 2W10 提前出 Boss(策划)
波次分页 → 第 10 行 Boss 列选 `MiniBoss(4)` → 保存 → F5。
### 例 3:新增一个"冰锥"法术(策划)
法术分页 → ➕新增 → ID 填 `action_ice_spike`,类型选「动作 ACTION」→ 动态字段里改 base_damage 为 8、施加状态选「冻结 Freeze」→ ✓应用 → 💾保存 → F5。新法术自动进商店。
### 例 4:精英敌人改成紫色更大(美术)
敌人分页 → 精英行 → 尺寸改 `30`,颜色点开选紫色 → 保存 → F5。
---
## 6. 扩展工具(给开发)
新增编辑器分页只需 3 步(参考 `addons/game_designer/`):
1. 写一个 `@tool extends VBoxContainer` 的标签脚本(读写对应 `data/xxx.json`,复用 `designer_ui.gd``spin/line/opt/btn` 辅助)
2.`designer_panel.gd``_init()``_add_tab(...)` 注册
3. 对应 Manager 加 `_load_json_xxx()`,在 `_ready()` 调用
> **开发规范见 [`CLAUDE.md`](../../CLAUDE.md) 「编辑器插件 / 游戏设计器开发规范」**:字段化(禁止手写 JSON,可变长整数元组用 `tuple_list_editor.gd`)、输入框 `SIZE_EXPAND_FILL` 撑满、标签「中文 English」双语、显示与存储解耦、改动后 `validate_script` + 回读往返验证。
> **Godot 编辑器扩展 = Unity 平替**`EditorPlugin`(面板/工具栏/底部面板) ↔ EditorWindow`@tool` ↔ ExecuteInEditMode`EditorInspectorPlugin` ↔ CustomEditor;自定义 `Resource` ↔ ScriptableObject。