docs: 整理文档目录并对齐代码现状
- 将开发过程/归档文档迁至 docs_dev/(development_plan、certification_checklist、 已废弃的 Cocos 架构草案 archived_cocos_architecture_draft),并修正全部跨引用 - 新增根 README.md(项目介绍,暂定名 Spellforge)与 docs_dev/README.md 索引 - 新增 docs_dev/doc_code_audit_2026-07-20.md:文档 vs 代码交叉审计报告(经 6 路对抗性复核,零证伪),含「代码更优 / 文档更优 / 中性」判定汇总 - 在 docs/ 各设计·技术·机制文档就地加「实现现状 (2026-07-20)」callout: 追认代码更优实现(纯 JSON 数据驱动、SpatialGrid-only 碰撞、MultiMesh 单档、 存档选最新槽等),订正陈旧/矛盾内容(.tres→JSON、Boss HP/阈值/波次、EventID、 StatusManager.apply 签名等),标记未实现功能(C# 热路径、Mana、元进展、 Boss 阶段/抗性、Tutorial、轨迹/连锁/催化等)与 latent bug(CoreFeatureTag 位运算、 pierce 空操作、MAX_OPS 不读 cpu_limit) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -2,60 +2,30 @@
|
||||
|
||||
> 策划和程序共同维护的内容文件。所有数值修改无需改架构代码,只改指定位置。
|
||||
|
||||
> ⭐ **策划/美术优先用可视化工具**:[07 游戏设计器](07_game_designer.md) 提供编辑器内一站式面板(法术/敌人/波次/Core/平衡),表单填数值即可,**无需写代码**。本文的代码方式适合需要复杂自定义逻辑的程序员,或了解底层数据结构。
|
||||
> **⚠️ 实现现状 (2026-07-20 审计)**:本文多个「改硬编码」的步骤已**过期作废**——项目内容早已全面 JSON 数据驱动,法术/波次/敌人/共鸣/Core 均从 `data/*.json` 加载,相关硬编码工厂函数与常量表已从代码中删除。**当前唯一权威的内容创作工作流是 [07 游戏设计器](07_game_designer.md)**(编辑器内插件面板,全部经 `data/*.json` + 编辑器,零代码)。本文中标注 ❌**OBSOLETE** 的小节仅保留作历史参考,请勿据其修改代码。详见审计报告 ../../docs_dev/doc_code_audit_2026-07-20.md。
|
||||
|
||||
> ⭐ **策划/美术优先用可视化工具**:[07 游戏设计器](07_game_designer.md) 提供编辑器内一站式面板(法术/敌人/波次/Core/平衡),表单填数值即可,**无需写代码**。本文的代码方式已大部分作废(见上方现状说明)。
|
||||
|
||||
---
|
||||
|
||||
## A. 添加/修改法术
|
||||
|
||||
> 💡 **策划优先用可视化工具**:[06 法术编辑器](06_spell_editor.md) 提供编辑器内表单,无需写代码即可新增/编辑法术(保存到 `data/spells.json`)。下面的代码方式适合需要复杂逻辑的程序员。
|
||||
> **⚠️ 实现现状 (2026-07-20 审计)**:法术定义唯一来源是 `res://data/spells.json`,由 `SpellRegistry` 启动时加载。`wand_preset.gd` **已不再定义任何法术**(文件头注:「法术已迁至 SpellRegistry」),下文 `make_frost_bolt` / `make_spell_by_id` / `get_all_spell_ids` 等工厂函数**在代码中已不存在**,请勿添加。详见审计报告 ../../docs_dev/doc_code_audit_2026-07-20.md。
|
||||
|
||||
> 💡 **策划优先用可视化工具**:在 [07 游戏设计器](07_game_designer.md) 的「法术」页签(或独立的 [06 法术编辑器](06_spell_editor.md))用表单新增/编辑法术,保存到 `data/spells.json`,**无需写代码**。
|
||||
|
||||
### 法术定义位置
|
||||
|
||||
- **数据驱动(推荐)**:`res://data/spells.json`(由法术编辑器维护,启动时由 `SpellRegistry` 加载,优先级最高)
|
||||
- **硬编码(程序)**:`scripts/autoloads/wand_preset.gd`(向后兼容回退)
|
||||
- **唯一来源**:`res://data/spells.json`(由游戏设计器/法术编辑器维护,启动时由 `SpellRegistry` 加载)。
|
||||
- 手工编辑时,每条法术是一个对象,键与旧工厂函数字段对应:`id` / `type` / `display_name`(tr() 键)/ `description` / `element_tags`(如 `["tag:ice"]`)/ `meta`(`base_damage` / `speed` / `lifetime` / `radius` / `damage_type` / `apply_status_id` / `shop_cost` 等)。推荐用编辑器面板生成,避免手写 JSON 出错。
|
||||
|
||||
### 步骤:添加一个新 ACTION 法术
|
||||
### 步骤:添加一个新 ACTION 法术(当前正确流程)
|
||||
|
||||
**1. 在 `wand_preset.gd` 添加工厂函数**
|
||||
1. 打开游戏设计器「法术」页签,新增一条法术,填写上述字段(`data/spells.json` 会自动写入)。
|
||||
2. 在 `translations/*.po` 四个文件中添加对应翻译键(见本地化指南)。
|
||||
3. 无需改动任何 `.gd` 代码;`SpellRegistry` 启动即加载,商店会自动抽取新法术。
|
||||
|
||||
```gdscript
|
||||
func make_frost_bolt() -> SpellNode:
|
||||
var n := SpellNode.new()
|
||||
n.id = "action_frost_bolt" # 全局唯一 ID
|
||||
n.type = SpellNode.SpellType.ACTION
|
||||
n.display_name = "SPELL_FROST_BOLT_NAME" # tr() 键(见本地化指南)
|
||||
n.description = "SPELL_FROST_BOLT_DESC"
|
||||
n.element_tags = ["tag:ice"] # 共鸣系统用的元素标签
|
||||
n.meta = {
|
||||
"base_damage": 5.0, # 基础伤害
|
||||
"speed": 380.0, # 弹速 (px/s)
|
||||
"lifetime": 4.0, # 存活时间 (s)
|
||||
"radius": 7.0, # 弹体半径 (px)
|
||||
"damage_type": 0, # 0=通用 (DamageType.NORMAL)
|
||||
"apply_status_id": StatusID.FREEZE, # 命中施加状态(可选)
|
||||
"shop_cost": 22, # 商店价格
|
||||
}
|
||||
return n
|
||||
```
|
||||
|
||||
**2. 注册到 `make_spell_by_id` 和 `get_all_spell_ids`**
|
||||
|
||||
```gdscript
|
||||
func make_spell_by_id(spell_id: String) -> SpellNode:
|
||||
match spell_id:
|
||||
# ... 已有法术 ...
|
||||
"action_frost_bolt": return make_frost_bolt() # 新增
|
||||
_: push_warning(...)
|
||||
|
||||
func get_all_spell_ids() -> Array:
|
||||
return [
|
||||
# ... 已有 ...
|
||||
"action_frost_bolt", # 新增到列表末尾(商店会自动抽取)
|
||||
]
|
||||
```
|
||||
|
||||
**3. 在 `translations/*.po` 四个文件中添加翻译键**(见本地化指南)
|
||||
> ❌ **OBSOLETE(历史参考,代码已删除)**:早期版本需在 `wand_preset.gd` 添加 `make_frost_bolt()` 工厂函数并注册到 `make_spell_by_id` / `get_all_spell_ids`。这些函数已随 SpellRegistry 迁移删除,请勿参照。
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user