程基岩(engineering-lead) 4f650aeb39 W3:相机 rig + band 组装器 + 事件系统 + 殿王战(灰盒);ADR-5 落定
P0 文档
- 架构文档:殿王战 HP 系数 50× → 15×(Balance Bible [B§5] 口径),全文档无残留
- 新增 ADR-5:2D 骨骼动画(Spine)取代 ADR-1 的单位/殿王 billboard 条目
  * 背景/决策/后果/三项被否决方案(多帧 billboard、Skeleton2D、DragonBones)
  * Godot 4.7 接入方式标注"需立项时复核",不臆造 API;挂探针 P12
  * 资产规格约束:部件分离 PNG / 图集 / 锚点命名 / 动画命名 / AI 绑骨质检门槛
  * 数据行纪律影响:sprite_row → 动画资源路径行,坚持"新资产 = 加行"
  * 美术工时对照(pipeline 报告 115-185h)
  * 3D 特效落地约定:走 flipbook 序列帧,理由是 3D 粒子直塞 2D 会绕过单趟
    后处理(ADR-2 红线)导致风格撕裂;挂探针 P13
- ADR-1 标注"单位/殿王条目被 ADR-5 取代",降级为回退规格(§5.1 保留)
- 架构 §8 清单 / §11 探针表 / 【确定】【探针】标注段同步;CLAUDE.md ADR 节同步

P1 横版核心
- camera.csv(10 行,一行一殿)+ camera.schema.json + core/data/camera_def.gd
  * 独立成表的四条理由写入 schema description,不污染 halls.csv
  * 全局标量(弹簧刚度/阻尼/平滑 tau/偷看上限/战前预告分钟)进 balance_tuning.csv
- presentation/stage:camera_rig.gd(进度锚定 + 偷看回弹 + 殿王战推近)
  + hall_band_world.gd + band_world_root.gd(四层视差)+ stage_world.gd
- stage_root 接入横版舞台,取代 W2 十殿色带(hall_band.gd 保留作回退)

P2 玩法系统
- game/event_director.gd:events.csv 四事件 → 触发/持续/效果/二选一/失败哗变
  * 效果全走 EconomyState 既有 API(瞬时区 set_event_mult / set_event_click_mult /
    set_mutiny),不直接改字段;四个出口统一 _clear_runtime 防"漏清永久 ×N"
- game/boss_battle.gd:30s 状态机(INTRO/ACTIVE/RESOLVED)
  * HP = 15 × 进入时产出/s × 殿系数(1.0→2.2),连击 +2%/层封顶 +60%
  * 胜 = 阴德爆发 HP×0.2(进本轮累计口径);败 = 60s 冷却(购路引可消)
  * 不用随机数 → sim 门 #11 可直接复用
- EconomyState 接事件瞬时区与哗变惩罚;GameState 接线 + 快照扩展
- presentation:event_panel.gd(事件卡/二选一)+ boss_arena.gd
  (预告/HP/连击/倒计时/结算/再战);stage_root 布局接入
- debug 构建 dev 热键 F1-F6/F9,走 GameState 既有命令口,不改数值

P3 质量
- 新增 3 个用例:test_camera_data / test_event_director / test_boss_battle
  (进 test_runner.CASE_FILES,共 7 个用例文件)
- 用户验证手册:docs/engineering/2026-10-19-w3-verification-manual.md(文档区)

修掉的两个潜伏缺陷(从根因修,非打补丁)
- gen_balance_sheets.py:halls.is_prestige_gate 落成字符串 "false",
  Godot 的 bool("false") == true → 十殿会被全部判为 prestige gate。
  改为真布尔,并把自检查从 == "true" 收紧为 is True(再犯即断言失败)
- boss_battles.schema.json:hp_factor 漏 type,GDScript SheetImporter 会产出
  字符串 "15"(Python 生成器产出的是数字),两条路径不一致。补 type: number

上报(未擅自改动,等裁定)
- H9/H10 殿王战数学上不可胜:纯军列耗时 = 15 × 殿系数(与产出/s 无关),
  殿系数 >2.0 → 31.5s/33.0s > 30s 限时;而缺口 ∝ 产出/s,点击伤害是常数
  (上限 25.6,不随产出/s 增长)→ 玩家越强越打不过,难度曲线是反的。
  已在 test_boss_battle._test_winnability_doc 把当前事实钉成断言哨兵,
  一旦有人改 hall_factor/active_sec/hp_factor 立刻变红强制重评。修数权属文策渊。

本机验证(无 Godot,靠移植仿真,非代替引擎实跑)
- 把 CameraDef/BossBattle/EventDirector 逐行移植成 JS 喂真实 build JSON,
  134 条断言全绿;9 张表 schema 校验通过且 build 逐字节一致(含新增 camera)
- 静态检查:跨文件方法/字段引用审计、静态调用合法性、src/core 禁 extends Node、
  缩进/括号配平/空函数体 —— 全部 0 问题
- 待本机验证:全部 GDScript 从未被引擎执行过;SubViewport 舞台与 Camera2D
  在 gl_compatibility 下的行为未实测(探针 P12 范畴)
2026-10-20 01:39:14 +08:00

WRATH OF THE DEAD / 怨返(项目代号 F)

含冤而死,那就招一支阴兵,杀回人间。 Wrongfully dead? Raise a ghost army and fight your way back to the living world.

单人挂机(idle)· Godot 4.7.2 + GDScript · Zad Archery 式横版 · 水墨绘卷视觉 架构基线:docs/architecture/2026-10-19-F-architecture.md(v1.0,2026-10-19) 工程宪法摘要:CLAUDE.md(必读)

1. 环境要求

项 要求 备注
引擎 Godot 4.7.2(.NET 不需要,纯 GDScript) 钉 4.7.x 补丁线;跨 minor 不追
导出模板 4.7.2 stable 模板(W5 CI 打包前安装) Editor → Manage Export Templates
Steam GodotSteam v4.23.1(W5 接入,W1 不依赖) addon 二进制暂未入库
GPU 核显可跑(性能底线 30fps) 用户 GPU 实测定预算(探针 P7)

2. 快速开始

# 1) 编辑器打开本目录(project.godot)→ 等待首次资源导入
# 2) 数据门验证(headless)
godot --headless --path . --import
godot --headless --path . -s res://src/tools/import_main.gd            # import_all(期望 RESULT: PASS)
godot --headless --path . -s res://src/tools/import_main.gd -- --validate-only
# 3) 跑探针:编辑器打开 tests/probe_p1_screen_texture/probe_p1.tscn → F6
#    (main scene 自 W2 起由 game/ 编排层提供,F5 直接运行)
git status    # import_all 后 data/build 应无 diff(提交物已校准)

3. 仓库地图(架构 §2.1)

project.godot / export_presets.cfg / icon.svg / CLAUDE.md
data/sheets/*.csv     内容唯一源(策划维护;一行=一资产/一参数)
data/schema/*.json    每张表一份 JSON Schema(CI 数据门)
data/build/*.json     SheetImporter 产物(提交;sim 与游戏共用)
src/core/             纯逻辑:numbers / economy / save / sim(W3 起)
src/game/             编排层:GameState / DataRegistry / 各 Director
src/platform/         SteamService(W5)
src/presentation/     表现层:stage / hud / panels / modals / post
src/tools/            @tool:sheet_importer.gd + import_main.gd(CI 入口)
assets/               sprites / luts / shaders / themes / fonts
tests/                probe_*(W1)/ unit(W3 起)/ sim_reports(W4 起)
pipeline/             3ds Max 侧契约(README.md;Max 脚本用户主场)
.github/workflows/    CI 数据门(W3+ 激活单测/sim/导出)

4. 数据管线("年更=加行"的地基,架构 §3)

data/sheets/*.csv ──SheetImporter(src/tools/,@tool/CI headless)──► data/build/*.json
                          │ schema 校验(违规=中止+行号/列名/原因)
                          ▼(W3)
                    *.tres Resource ──► DataRegistry ──► 游戏 + sim(同一份,零漂移)
  • 三条铁律:① 单向流动(游戏永不写 data/);② sim 与游戏读同一份 build;③ 数值改动只改 CSV 不动代码;
  • CSV 规范:稳定字符串 ID(不重编号);_cn/_en 后缀;数值列禁千分位;引用列填目标 ID;
  • build JSON 由导入器的确定性序列化器生成(字节稳定)——改 CSV 后必须重跑 import 并提交 build,否则 CI 漂移门红;
  • W1 已知:display_en 为工程侧临时译名(待文策渊按 GDD §8.4 glossary 确认);unlock_hall/unlock_gate 引用的 halls/upgrades 表 W2 落盘后激活跨表引用校验。

5. CI(架构 §7.2)

.github/workflows/ci.yml:push/PR → checkout → setup Godot 4.7.2 → headless import → import_all → schema validate → build 漂移门(git diff)。 单元测试(W3,GUT)、sim 14 门(W4)、Windows 导出(W5)为注释占位,标注了激活条件。 待本机验证:4.7.2 的 --headless --import CLI 行为(备选 -e --quit-after 200)——首跑后按实际更新本 README。

6. W1 探针(用户侧实测,30min/项)

探针 手册(工作区 docs/engineering/) 回填
P1 后处理纹理语义 2026-10-19-f-w1-probe-p1-manual.md docs/engineering/probes/P1-result.md
P3 noise 平铺 2026-10-19-f-w1-probe-p3-manual.md docs/engineering/probes/P3-result.md

P6(字体许可)/P7(GPU)为用户侧任务,结论同样回填 probes/。

7. 纪律速览(详见 CLAUDE.md / 架构 §9)

  • look-dev 冻结(W2 生死门):冻结前不加新资产类型;Max 侧不回炉;调色只在 Godot 侧;
  • 水墨四色面积纪律:墨 ~65 / 骨白 ~25 / 朱砂 ≤8% / 靛 ≤7%;
  • 终局 ≤1e14;三乘区加法优先禁乘性深度叠加;
  • network 作用域不适用(单人无网络代码);AI 不进包体(ADR-4)。

8. W1 状态与待办

  • 项目骨架 + git 首提交(本 README 同步日期)
  • 数据管线段 1(generators.csv 12 行 + schema v0 + SheetImporter v0.1 + build 提交)
  • 探针 P1/P3 代码 + 实测手册 + 结论模板
  • 用户:跑 P1/P3 实测并回填结论;P6/P7 用户侧任务
  • 用户:look-dev 游魂初版(Max 侧)→ 导入验证 sprite_row 路径
  • W2 计划:管线贯通 demo(CSV→12 槽 UI)、sim 骨架、军列带纸面原型
S
Description
No description provided
Readme
421 KiB
0 Stars 2 Watchers 0 Forks
Languages
GDScript 83.6%
Python 14.6%
Batchfile 1.5%
GDShader 0.3%