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 范畴)
273 lines
6.2 KiB
JSON
273 lines
6.2 KiB
JSON
{
|
||
"sheet": "balance_tuning",
|
||
"schema_version": 0,
|
||
"columns": [
|
||
"id",
|
||
"kind",
|
||
"num",
|
||
"text",
|
||
"desc_cn"
|
||
],
|
||
"rows": [
|
||
{
|
||
"id": "tune_click_base",
|
||
"kind": "number",
|
||
"num": 1,
|
||
"text": "",
|
||
"desc_cn": "[B§2.2] 点击基础值 = 1(与 gen1 成本 15 配对 → 15 次点击首购)"
|
||
},
|
||
{
|
||
"id": "tune_click_zone_cap",
|
||
"kind": "number",
|
||
"num": 16,
|
||
"text": "",
|
||
"desc_cn": "[B§1/§2.2] 点击区软上限 ×16(4 级 ×2 满)"
|
||
},
|
||
{
|
||
"id": "tune_gen_zone_cap",
|
||
"kind": "number",
|
||
"num": 8,
|
||
"text": "",
|
||
"desc_cn": "[B§1] 班底乘区软上限 ×8(6 级效率满 = ×7,留 1 级余量)"
|
||
},
|
||
{
|
||
"id": "tune_global_zone_cap",
|
||
"kind": "number",
|
||
"num": 64,
|
||
"text": "",
|
||
"desc_cn": "[B§1] 全局乘区软上限 ×64"
|
||
},
|
||
{
|
||
"id": "tune_offline_band1_h",
|
||
"kind": "number",
|
||
"num": 2,
|
||
"text": "",
|
||
"desc_cn": "[B§8] 离线 0-2h 速率 100%"
|
||
},
|
||
{
|
||
"id": "tune_offline_band1_rate",
|
||
"kind": "number",
|
||
"num": 1,
|
||
"text": "",
|
||
"desc_cn": "[B§8] 离线 0-2h 速率"
|
||
},
|
||
{
|
||
"id": "tune_offline_band2_h",
|
||
"kind": "number",
|
||
"num": 8,
|
||
"text": "",
|
||
"desc_cn": "[B§8] 离线 2-8h 速率 70%"
|
||
},
|
||
{
|
||
"id": "tune_offline_band2_rate",
|
||
"kind": "number",
|
||
"num": 0.7,
|
||
"text": "",
|
||
"desc_cn": "[B§8] 离线 2-8h 速率"
|
||
},
|
||
{
|
||
"id": "tune_offline_band3_h",
|
||
"kind": "number",
|
||
"num": 24,
|
||
"text": "",
|
||
"desc_cn": "[B§8] 离线 8-24h 速率 40%"
|
||
},
|
||
{
|
||
"id": "tune_offline_band3_rate",
|
||
"kind": "number",
|
||
"num": 0.4,
|
||
"text": "",
|
||
"desc_cn": "[B§8] 离线 8-24h 速率"
|
||
},
|
||
{
|
||
"id": "tune_offline_band4_rate",
|
||
"kind": "number",
|
||
"num": 0.1,
|
||
"text": "",
|
||
"desc_cn": "[B§8] 离线 >24h 速率 10%"
|
||
},
|
||
{
|
||
"id": "tune_offline_cap_h",
|
||
"kind": "number",
|
||
"num": 72,
|
||
"text": "",
|
||
"desc_cn": "[B§8] 离线硬上限 72h 封顶"
|
||
},
|
||
{
|
||
"id": "tune_wrath_layers",
|
||
"kind": "number",
|
||
"num": 22,
|
||
"text": "",
|
||
"desc_cn": "[B§3.2] 冤煞层总数 22"
|
||
},
|
||
{
|
||
"id": "tune_wrath_cost_base",
|
||
"kind": "number",
|
||
"num": 8,
|
||
"text": "",
|
||
"desc_cn": "[B§3.2] 第 n 层成本 = round(8 × n^1.8)"
|
||
},
|
||
{
|
||
"id": "tune_wrath_cost_exp",
|
||
"kind": "number",
|
||
"num": 1.8,
|
||
"text": "",
|
||
"desc_cn": "[B§3.2] 冤煞层成本指数"
|
||
},
|
||
{
|
||
"id": "tune_wrath_bonus",
|
||
"kind": "number",
|
||
"num": 0.25,
|
||
"text": "",
|
||
"desc_cn": "[B§3.2] 每层全局 +25%(加法,进全局乘区)"
|
||
},
|
||
{
|
||
"id": "tune_wrath_penalty",
|
||
"kind": "number",
|
||
"num": 0.03,
|
||
"text": "",
|
||
"desc_cn": "[B§3.2] 每层宿慧获取削减 +3%"
|
||
},
|
||
{
|
||
"id": "tune_wrath_penalty_cap",
|
||
"kind": "number",
|
||
"num": 0.3,
|
||
"text": "",
|
||
"desc_cn": "[B§3.2] 宿慧削减封顶 30%"
|
||
},
|
||
{
|
||
"id": "tune_suihui_div",
|
||
"kind": "number",
|
||
"num": 1000000,
|
||
"text": "",
|
||
"desc_cn": "[B§4.1] 宿慧 = floor(√(本轮累计阴德/1e6) × 5)"
|
||
},
|
||
{
|
||
"id": "tune_suihui_mult",
|
||
"kind": "number",
|
||
"num": 5,
|
||
"text": "",
|
||
"desc_cn": "[B§4.1] 宿慧公式乘数"
|
||
},
|
||
{
|
||
"id": "tune_suihui_global_pct",
|
||
"kind": "number",
|
||
"num": 0.03,
|
||
"text": "",
|
||
"desc_cn": "[B§1/§4.2] 每级宿慧全局产出 +3%(加法,进全局乘区)"
|
||
},
|
||
{
|
||
"id": "tune_enthrone_bonus",
|
||
"kind": "number",
|
||
"num": 0.25,
|
||
"text": "",
|
||
"desc_cn": "[B§4.4] 阴司敕封自动全局恩典 +25%(与 m08 商品字面重叠,见 provenance P-4)"
|
||
},
|
||
{
|
||
"id": "tune_skip_interval",
|
||
"kind": "number",
|
||
"num": 5,
|
||
"text": "",
|
||
"desc_cn": "[B§4.2] 每 5 级宿慧 → 前 3 档班底各 +25 级(m04 可加快为 4)"
|
||
},
|
||
{
|
||
"id": "tune_skip_gens",
|
||
"kind": "number",
|
||
"num": 3,
|
||
"text": "",
|
||
"desc_cn": "[B§4.2] 跳过机制覆盖前 3 档班底"
|
||
},
|
||
{
|
||
"id": "tune_skip_levels",
|
||
"kind": "number",
|
||
"num": 25,
|
||
"text": "",
|
||
"desc_cn": "[B§4.2] 跳过机制每档 +25 级"
|
||
},
|
||
{
|
||
"id": "tune_enthrone_rebirths",
|
||
"kind": "number",
|
||
"num": 2,
|
||
"text": "",
|
||
"desc_cn": "[B§4.4] 阴司敕封触发:转世 ≥2(约第 2-3 轮,累计 8-12h 为其 pacing 后果)"
|
||
},
|
||
{
|
||
"id": "tune_restart_curve",
|
||
"kind": "text",
|
||
"num": 0,
|
||
"text": "1:0.6:0.4:0.3",
|
||
"desc_cn": "[B§4.3] 重开曲线目标(第 5 轮触底 ≥0.25×);模拟器门 #13 断言"
|
||
},
|
||
{
|
||
"id": "tune_event_timeout_default",
|
||
"kind": "text",
|
||
"num": 0,
|
||
"text": "opt_a",
|
||
"desc_cn": "[B§7] 冤魂申诉超时默认 = 超度(opt_a)"
|
||
},
|
||
{
|
||
"id": "tune_souls_div",
|
||
"kind": "number",
|
||
"num": 10000,
|
||
"text": "",
|
||
"desc_cn": "[B§6] 超度亡魂 = floor(本轮累计阴德 ÷ 10,000)(叙事计数器,不设闸门;P-14)"
|
||
},
|
||
{
|
||
"id": "tune_enthrone_suihui_req",
|
||
"kind": "number",
|
||
"num": 60,
|
||
"text": "",
|
||
"desc_cn": "[G§3.4] 阴司敕封解锁条件:宿慧 ≥60([B§4.4] 仅给 8-12h 体感,采信 GDD 数值)"
|
||
},
|
||
{
|
||
"id": "tune_cam_peek_max_px",
|
||
"kind": "number",
|
||
"num": 320,
|
||
"text": "",
|
||
"desc_cn": "[W3 相机] 偷看(peek)偏移的世界像素上限;超出即夹到此值(架构 §4.3 偷看回弹)"
|
||
},
|
||
{
|
||
"id": "tune_cam_peek_spring",
|
||
"kind": "number",
|
||
"num": 42,
|
||
"text": "",
|
||
"desc_cn": "[W3 相机] 偷看回弹弹簧刚度 k(越大回弹越快)"
|
||
},
|
||
{
|
||
"id": "tune_cam_peek_damp",
|
||
"kind": "number",
|
||
"num": 11,
|
||
"text": "",
|
||
"desc_cn": "[W3 相机] 偷看回弹阻尼 c;近临界阻尼约 2*sqrt(k)≈13,取略欠阻尼以保留手感"
|
||
},
|
||
{
|
||
"id": "tune_cam_follow_tau",
|
||
"kind": "number",
|
||
"num": 0.35,
|
||
"text": "",
|
||
"desc_cn": "[W3 相机] 进度锚定跟随的指数平滑时间常数(秒)"
|
||
},
|
||
{
|
||
"id": "tune_cam_zoom_tau",
|
||
"kind": "number",
|
||
"num": 0.3,
|
||
"text": "",
|
||
"desc_cn": "[W3 相机] 缩放与殿王战推近的指数平滑时间常数(秒)"
|
||
},
|
||
{
|
||
"id": "tune_boss_preview_min",
|
||
"kind": "number",
|
||
"num": 15,
|
||
"text": "",
|
||
"desc_cn": "[B§6] 殿王战战前预告提前分钟数(与 H9-H10 prestige 预告同口径)"
|
||
},
|
||
{
|
||
"id": "tune_event_first_min",
|
||
"kind": "number",
|
||
"num": 3,
|
||
"text": "",
|
||
"desc_cn": "[B§7] 事件系统解锁后首个事件的延迟分钟数(给玩家缓冲,避免刚解锁就来)"
|
||
}
|
||
]
|
||
}
|