写卡(敌方状态个体化批): 需求卡片成文——容器按个体多桶换代(hero/e生成序键,单点约定)+3写点(combat_segment增益技归施放者/reward_grant全体循环逐体发/damage_controller被命中者)+消费面随动(clamped_pool带owner_key/defender_ac/nest_count/结算快照)+死亡即清(unit_died→purge_owner)+呈现投影各读各的; V1-V8八断言挂四既有测试宿主,零新增文件; 断言换代申报两件(armor_roll V1-V3个体键重写语义保留/settlement_segments衰减相位逐桶等价换代); godot-master终审通过(架构四查全过,P3一处S9类型标注句折入T0-1); grilling零待裁点; README两能力行入表+覆盖域表增益状态行随动; 待办条目→已写卡; pipeline_gate PASS(卡片口径4张)
This commit is contained in:
1 parent
639a399f5b
commit
87385b41ec
3 files changed
+143
-2
No files matched your search
@@ -172,6 +172,8 @@ tests/
|
||||
| 系统间契约词表与受理口径:五配方互异/掷点标签成员性/增益布尔受理 | 战斗结算×数据配置×增益状态 | `DamageController.open_ticket()`/`StatusContainer.apply_effect()` | `system_contracts_test.gd:_test_damage_controller_vocabularies`;`system_contracts_test.gd:_test_rng_tag_closure`;`system_contracts_test.gd:_test_status_boolean_acceptance` |
|
||||
| 同名状态合并策略(叠加/累加/并存)与剩余次数语义 | 战斗循环×增益状态 | `StatusContainer.apply_effect()`(编排宿主 begin_battle 链) | `roll_multiplier_test.gd:_smoke_armor_roll` |
|
||||
| 状态效果结算链(逐值衰减/到期移除/战斗结束全清/满层拒绝/独立并存/首授快照) | 增益状态 | `StatusContainer.apply_effect()`/`decay_round()`/`notify_battle_end()` | `system_contracts_test.gd:_test_status_decay_and_clear`;`system_contracts_test.gd:_test_status_stack_full_reject`;`system_contracts_test.gd:_test_status_independent_branch`;`system_contracts_test.gd:_test_status_snapshot_first_grant` |
|
||||
| 状态实例按个体归属:个体隔离/全体授予逐体发/死亡即清/同体合并照旧 | 增益状态 | `StatusContainer.apply_effect()`(个体键)/`purge_owner()` | `system_contracts_test.gd:_test_status_individual_isolation`;`system_contracts_test.gd:_test_status_grant_all_per_unit`;`system_contracts_test.gd:_test_status_death_clears`;`system_contracts_test.gd:_test_status_merge_per_unit` |
|
||||
| 敌方增益自体落点与乘区池按个体 | 敌人系统×战斗结算×增益状态 | 技能兑付编排链/`DamageController.clamped_pool()` | `round_flow_skill_pool_test.gd:_test_enemy_buff_targets_self`;`damage_controller_test.gd:_test_pool_consumption_per_unit`;`damage_controller_test.gd:_test_defender_ac_per_unit`;`battle_narrator_test.gd:_test_snapshot_effects_per_unit` |
|
||||
| 敌人技能池跨表链接校验 | 数据配置×敌人系统 | `ConfigDbCrossValidator.validate_skill_pool_links()` | `config_db_cross_validator_test.gd:_test_all_links_valid`;`config_db_cross_validator_test.gd:_test_dangling_skill_id`;`config_db_cross_validator_test.gd:_test_cast_side_mismatch` |
|
||||
|
||||
**覆盖域表**(`design/gdd/systems/` 逐篇对照——状态三档:已覆盖/部分覆盖/未覆盖;部分与未覆盖行的缺口指待办清单条目,覆盖面提升时同批改本表):
|
||||
@@ -184,7 +186,7 @@ tests/
|
||||
| 冒险循环 | 奇物.md | 专长(奇物)授予与凭证保底;奖励三选一候选/刷新付费/呈现 | 已覆盖 | — |
|
||||
| 冒险循环 | 难度曲线与Boss.md | Boss 半血解锁技门控;行集寻址、行序保序与难度乘数 clamp;难度修饰套乘:空表零行为/套乘生效/越域 clamp;Boss 出场门控(每区域恰一 Boss 终点/Boss 节点开战必选 Boss 行集) | 部分覆盖 | 机制面剩余缺口由「断言补齐批」承接;数值落带断言归 M4 数值批;见待办清单「能力清单覆盖缺口补齐」条 |
|
||||
| 战斗循环 | 地图战斗资源.md | 清图奖励双份与零路径;GP 钱包/escrow/商店收口/共享池;封印与极性路由/不可逆 | 已覆盖 | — |
|
||||
| 战斗循环 | 增益状态.md | 系统间契约词表与受理口径:五配方互异/掷点标签成员性/增益布尔受理;同名状态合并策略(叠加/累加/并存)与剩余次数语义;状态效果结算链(逐值衰减/到期移除/战斗结束全清/满层拒绝/独立并存/首授快照);封印与极性路由/不可逆 | 部分覆盖 | 结算链剩余缺口由「断言补齐批」承接;见待办清单「能力清单覆盖缺口补齐」条 |
|
||||
| 战斗循环 | 增益状态.md | 系统间契约词表与受理口径:五配方互异/掷点标签成员性/增益布尔受理;同名状态合并策略(叠加/累加/并存)与剩余次数语义;状态效果结算链(逐值衰减/到期移除/战斗结束全清/满层拒绝/独立并存/首授快照);状态实例按个体归属:个体隔离/全体授予逐体发/死亡即清/同体合并照旧;敌方增益自体落点与乘区池按个体;封印与极性路由/不可逆 | 部分覆盖 | 结算链剩余缺口由「断言补齐批」承接;见待办清单「能力清单覆盖缺口补齐」条 |
|
||||
| 战斗循环 | 战斗结算.md | 伤害公式与掷点乘区;伤害单据编排与回放;轮内流与结算五段全序 | 已覆盖 | — |
|
||||
| 战斗循环 | 战斗表现.md | 站桩敌人呈现与结算演出落点;站桩呈现定值与素材绑定;站桩显示档与素材分辨率绑定 | 已覆盖 | 死亡灰化与减动效演出档以探针+人工目检为终态(2026-11-02 用户裁除名,不再补自动断言) |
|
||||
| 战斗循环 | 敌人系统.md | 技能池数据面与回放独立;Boss 半血解锁技门控;敌人技能池跨表链接校验 | 已覆盖 | — |
|
||||
|
||||
@@ -0,0 +1,138 @@
|
||||
# 需求卡片:敌方状态个体化批(2026-11-02)
|
||||
|
||||
> 一句话:把增益/减益状态实例从「阵营共享一条」改为「每只敌人各自持有」——全体授予=逐只各发一条实例,敌方增益技只强化施放者自己,个体死亡即清名下实例。
|
||||
> 来源:待办清单条目「敌方状态个体化——状态实例归属到敌人个体」(2026-11-02 登记,来源=会话提及)。
|
||||
> 审裁决:godot-master 终审通过(2026-11-02——架构四查全过,P3 一处 S9 类型标注句折入 T0-1);grilling 零待裁点(断言换代申报照卡执行、估时归迭代行)。
|
||||
|
||||
## 设计事实源
|
||||
|
||||
| 文档 | 依据 | 版本 |
|
||||
|---|---|---|
|
||||
| `design/gdd/systems/战斗循环/增益状态.md` | 硬规矩「实例按个体归属」+〈目标规则与个体归属〉节(词表四词/合并认个体/死亡即清/呈现各读各的) | v1.5(2026-11-02) |
|
||||
| `design/gdd/systems/战斗循环/敌人系统.md` | 增益技落点=施放者自己;警觉授予随动 | v1.5(2026-11-02) |
|
||||
| `design/gdd/systems/战斗循环/战斗结算.md` | 警觉按个体;AC 合流=该敌自己名下的 ac 型状态 | v1.6(2026-11-02) |
|
||||
|
||||
与待办清单条目凭据一致。
|
||||
|
||||
## 目标与完成定义
|
||||
|
||||
状态容器从「按阵营两桶」换为「按个体多桶」(主角一桶+每只敌各一桶),授予/合并/衰减/清除/兑付/呈现全链随动;敌方增益技从「全体受益」纠正为「施放者自己」。完成定义=全部断言当轮跑批执行并通过+代码域闸全绿+合回后本地 CI 全量域闸全绿+主角侧行为零变化(回归全绿)。
|
||||
|
||||
## 现状事实(代码级考证 2026-11-02,全仓审计)
|
||||
|
||||
- **容器本体**:`StatusContainer` 全战斗单例(battle_orchestrator.gd:217),实例按 `target_side` 两桶;`apply_effect` :28-49、`query_active(side)` :98-118、`decay_round` :121-134(全池统一 −1)、`notify_battle_end` :137-143。
|
||||
- **授予写点 3 处**:敌方技能增益(combat_segment.gd:84-90,落点由状态行 target_side 路由到敌方侧——现行全体共享的根);奖励格(reward_grant.gd:226-239,含 enemy_alert);直伤附带(damage_controller.gd:451 fx_apply_status)。
|
||||
- **读点**:乘区池合计 `clamped_pool` damage_controller.gd:629-637(两 side 实例混算);defender_ac 敌分支 :601-606(side 级 ac 型加到每一只敌);nest_count battle_orchestrator.gd:117-121 与 damage_controller.gd:93-98;池兑付 _pool_effective :521-527;结算快照 buffs :525-535;呈现投影 :670-692(**同一数组引用塞进每张敌卡**,standee_body.gd:80 自认「各立绘同值」)。
|
||||
- **死亡**:unit_died → damage_controller._on_unit_died :192-198(未结单据作废);状态实例不随死亡清,活到衰减或战斗终局。
|
||||
- **已正确的个体面(不动)**:技能冷却/半血闩/保底计数(unit_container.gd:99-153、:259-272);hp/armor/intent;死亡清脸呈现;顺位取靶(:358-362)。
|
||||
- **主角侧**:单单位,全链语义不受影响。
|
||||
- **中途入场**:不存在该路径(敌人开战一次性实例化,unit_container._spawn_rowset :81-118),「后援继承」问题消解。
|
||||
|
||||
## 设计契约红线
|
||||
|
||||
- 🔴 **GDD v1.5 语义逐条照搬**:实例按个体归属/全体授予=逐只各发一条/敌方增益技归施放者自己/个体死亡即清/呈现各读各的/合并只在同体内——任何偏离=L3 停卡。
|
||||
- 🔴 **status_effects.tres 行值零触碰**:合并策略、词表、时长、幅度全照旧——本批只改归属结构,不改任何状态定义。
|
||||
- 🔴 **断言换代申报制**:下方「测试削弱申报」清单之外,禁删禁改任何既有断言;实现轮撞红的侧级共享读数断言须挂对照表行换代,静默放宽=独立审计判红。
|
||||
- 🔴 **主角侧行为零变化**:attack_up/ac_up 全套既有断言回归绿;无类型键改动泄漏到主角调用面以外的公开接口。
|
||||
- 🔴 RNG 单点/Core 零 UI 依赖/fail-fast 照旧;全程零随机(禁随机摇目标)。
|
||||
- 🔴 **实现照单落名**:README 代表用例名=测试函数名唯一依据;断言尾缀〔个体化批 Vn〕全仓可 grep。
|
||||
|
||||
## 测试削弱申报(唯一允许的换代清单)
|
||||
|
||||
| 既有断言 | 换代方式 | 依据 |
|
||||
|---|---|---|
|
||||
| `roll_multiplier_test.gd:_smoke_armor_roll` V1/V2/V3(迭代 48 卡①削弱累加三断言) | 重写为个体键读数——累加/续时/覆盖时长的语义断言原样保留,只把「敌方侧查询」换成「目标个体查询」 | GDD v1.5 合并匹配认个体 |
|
||||
| `round_flow_skill_pool_test.gd:_smoke_settlement_segments` 衰减相位断言(:413-421、:449) | 全池衰减改逐桶衰减(每个存活个体恰 −1、归 0 移除),断言语义等价换代 | GDD v1.5 实例按个体归属 |
|
||||
|
||||
## 范围边界
|
||||
|
||||
**做**:容器个体化+3 写点+全部读点随动+呈现投影换代+上表申报断言换代+新断言 V1-V8。
|
||||
|
||||
**不做**:种类级目标词(不预先建面);伤害侧新目标规则(现行三词够用);主角侧任何语义变化;status_effects.tres 行值;多语言/音频(P1);mid-battle 增援(路径不存在)。
|
||||
|
||||
## 关联文档同步面
|
||||
|
||||
| 文档 | 关联点 | 同步义务 |
|
||||
|---|---|---|
|
||||
| `design/gdd/systems/战斗循环/增益状态.md` v1.5 | 〈目标规则与个体归属〉节「实装随该批」规矩行 | 实装合入后该行已过时——反哺点清单登记,用户裁决后文档批删除(实现批禁写 design/) |
|
||||
| `game/tests/README.md` | 能力行增改 | 写卡段当场落(本批卡内已列),实现照单落名 |
|
||||
|
||||
## 任务卡 T0..T3
|
||||
|
||||
**T0 容器个体化+授予路径换代(≈1 工作日)**
|
||||
|
||||
- [ ] T0-1 `status_container.gd`:实例桶键从 side 换个体——个体键约定单点定义(常量:主角=`"hero"`,敌人=`"e<生成序>"`,生成序=开战逐只编号沿用顺位轴);新桶键结构按 S9 全类型标注(godot-master 终审折入);`apply_effect(effect_id, owner_key, duration_override)`、`query_active(owner_key)`、`decay_round()`(逐桶各 −1)、`purge_owner(owner_key)` 新增(死亡清)、`notify_battle_end` 照旧全清
|
||||
- [ ] T0-2 授予写点 3 处换代:combat_segment.gd 增益技落点=施放者自己;reward_grant.gd 全体规则=循环存活敌逐只发(封印削弱/踩雷/警觉);damage_controller.fx_apply_status=被命中者个体
|
||||
- [ ] T0-3 死亡清接线:unit_died → purge_owner(死亡个体名下实例全清)
|
||||
- [ ] T0-4 断言落地 `system_contracts_test.gd`:`_test_status_individual_isolation`〔V1〕(两敌各授同名实例,层数/时长互不干扰);`_test_status_grant_all_per_unit`〔V2〕(全体授予=每只各一条、各自衰减);`_test_status_death_clears`〔V3〕(死体实例清零、他体不受影响);`_test_status_merge_per_unit`〔V4〕(同体合并照旧:累加/叠加/满层拒)
|
||||
- [ ] T0-5 换代申报落地:armor_roll V1-V3 重写(个体键读数,语义保留);`round_flow_skill_pool_test.gd` 新增 `_test_enemy_buff_targets_self`〔V5〕(蓄力只强化施放者,他敌 output 池读数不变)
|
||||
- [ ] T0-6 单元套全绿——里程碑步出口跑一次全套闸;波内修复只做出红最小单元的最窄确认
|
||||
|
||||
**T1 消费面随动(≈0.5 工作日)**
|
||||
|
||||
- [ ] T1-1 `damage_controller.gd`:`clamped_pool` 带 owner_key(主角打敌=该敌防御池;敌打主角=施放敌自己的输出池);defender_ac 敌分支只读被打者名下 ac 型实例;nest_count 两处(battle_orchestrator.gd:117-121、damage_controller.gd:93-98)按个体;_pool_effective 与结算快照 buffs 逐个体
|
||||
- [ ] T1-2 断言落地 `damage_controller_test.gd`:`_test_pool_consumption_per_unit`〔V6〕(B 敌的削弱不进 A 敌的账);`_test_defender_ac_per_unit`〔V7〕(alert 各算各的)
|
||||
- [ ] T1-3 单元套全绿(同 T0-6 措辞)
|
||||
|
||||
**T2 呈现投影+主角侧回归(≈0.5 工作日)**
|
||||
|
||||
- [ ] T2-1 battle_orchestrator.gd:670-692:enemies[].effects 每卡读自己桶(删同引用共享);结算明细归因照旧
|
||||
- [ ] T2-2 断言落地 `battle_narrator_test.gd`:`_test_snapshot_effects_per_unit`〔V8〕(A 有削弱 B 无 → 两卡投影各现各的)
|
||||
- [ ] T2-3 主角侧回归:attack_up/ac_up 全套既有断言绿;冒烟 15 项 0 失败
|
||||
- [ ] T2-4 单元套全绿(同 T0-6 措辞)
|
||||
|
||||
**T3 产出物落位卡(≈0.25 工作日)**
|
||||
|
||||
- [ ] T3-1 合并前写齐 `reports/iterN-实现报告-<日期>.md`(各卡状态+实机目检总清单〔本批玩家可见面=敌方增益图标各现各的、蓄力不再全体受益——两项入目检清单,登记不阻塞〕+实现决定记录)
|
||||
- [ ] T3-2 合并前写齐 `reports/iterN-反哺点-<日期>.md`(增益状态.md「实装随该批」行删除义务,逐条落点与依据;实现批禁写 design/ 与根规则文件)
|
||||
|
||||
## 验证闸(改动—验收对照表)
|
||||
|
||||
| 需求点 | 改动(文件:行/行为) | 验收测试(名称+落点+尾缀) | 层级 | 真实入口 | 判据绑定面 | 能力行 |
|
||||
|---|---|---|---|---|---|---|
|
||||
| 实例按个体归属 | status_container.gd 键换代 | `_test_status_individual_isolation`〔V1〕 | 单元 | StatusContainer.apply_effect()/query_active() | 各体投影读数互不影响 | 新增:状态实例按个体归属:个体隔离/全体授予逐体发/死亡即清/同体合并照旧 |
|
||||
| 全体授予逐体发 | reward_grant.gd 循环授予 | `_test_status_grant_all_per_unit`〔V2〕 | 单元 | 同上 | 逐体实例数与各自衰减 | 新增:状态实例按个体归属:个体隔离/全体授予逐体发/死亡即清/同体合并照旧 |
|
||||
| 个体死亡即清 | unit_died→purge_owner | `_test_status_death_clears`〔V3〕 | 单元 | 同上+purge_owner() | 死体桶清零、他体不变 | 新增:状态实例按个体归属:个体隔离/全体授予逐体发/死亡即清/同体合并照旧 |
|
||||
| 同体合并照旧 | 合并匹配认个体 | `_test_status_merge_per_unit`〔V4〕 | 单元 | StatusContainer.apply_effect() | 同体累加/叠加/满层拒读数 | 新增:状态实例按个体归属:个体隔离/全体授予逐体发/死亡即清/同体合并照旧 |
|
||||
| 增益技归施放者自己 | combat_segment.gd 落点换代 | `_test_enemy_buff_targets_self`〔V5〕 | 单元 | 战斗结算编排链(技能施放) | 施放者与被他敌的池读数差 | 新增:敌方增益自体落点与乘区池按个体 |
|
||||
| 乘区池按个体 | clamped_pool 带 owner_key | `_test_pool_consumption_per_unit`〔V6〕 | 单元 | DamageController 兑付 | 被击者专属池合计 | 新增:敌方增益自体落点与乘区池按个体 |
|
||||
| AC 合流按个体 | defender_ac 敌分支 | `_test_defender_ac_per_unit`〔V7〕 | 单元 | DamageController 兑付 | 被击者自身 ac 型合计 | 新增:敌方增益自体落点与乘区池按个体 |
|
||||
| 呈现各读各的 | 投影换代 battle_orchestrator.gd | `_test_snapshot_effects_per_unit`〔V8〕 | 单元 | 呈现状态快照函数 | 两卡 effects 投影差 | 新增:状态实例按个体归属:个体隔离/全体授予逐体发/死亡即清/同体合并照旧 |
|
||||
| 申报换代两件 | armor_roll/settlement_segments 重写 | 原函数名保留(语义等价换代,尾缀随原批) | 单元 | 原真实入口 | 原判据个体化 | 既有:同名状态合并策略(叠加/累加/并存)与剩余次数语义 |
|
||||
|
||||
## 独立验收审计
|
||||
|
||||
执行体=迭代 loop 内启动的未参与实现子代理(2026-11-02 用户裁,test-conventions §8.7 默认通道);报告落 `reports/iterN-验收审计-<日期>.md`,逐行写「通过/缺漏/例外及依据」。审计四件事:逐行核对对照表(测试存在、当轮执行、尾缀可 grep、真实入口未绕改动点);抽查判据绑定面;检查测试削弱(对照本卡「测试削弱申报」两件清单);核对内部字段直查受控例外(本卡零直查行)。未过不得合并。
|
||||
|
||||
## 异常分级
|
||||
|
||||
- **L1 自救**:断言消息、局部夹具命名、循环授予的实现次序(入列顺序稳定可读照 GDD)。
|
||||
- **L2 记录继续**:撞红的其余侧级共享读数断言——按申报制挂对照表行换代,记实现决定记录。
|
||||
- **L3 停机呈报**:呈现快照无个体键承载(投影改不动=上游缺陷);purge 与断点续玩时序冲突;GDD 语义与现役观测面失配;机检键与本卡契约互斥——一律停卡退回写卡段。
|
||||
|
||||
## 代拍板白名单
|
||||
|
||||
- 测试内局部命名、常量、断言消息文本。
|
||||
- 循环授予的实现编排(按调用方给定次序入列,保证稳定可读)。
|
||||
- 个体键字符串格式的内部拼写(约定语义不变)。
|
||||
|
||||
## 待裁点
|
||||
|
||||
零待裁点,开工门=U0。
|
||||
|
||||
## 落位与可复用性预检
|
||||
|
||||
**零新增文件**:全部改造/扩展现有件——status_container.gd(本体)、combat_segment.gd/reward_grant.gd/damage_controller.gd(写点)、unit_container.gd(死亡信号既有)、battle_orchestrator.gd(读点/投影);测试扩展 system_contracts_test.gd/round_flow_skill_pool_test.gd/damage_controller_test.gd/battle_narrator_test.gd 四个既有宿主。
|
||||
|
||||
**唯一面**:个体键约定单点定义于 StatusContainer 头部(禁散落第二处拼写);purge 单点(死亡清唯一通道);无 helper 外散。
|
||||
|
||||
**分层与交互**:全链在 core 层,零 UI 依赖(headless 可跑通);呈现只经呈现状态快照函数读取,不直捅容器;RNG 零新增(本批零摇号)。
|
||||
|
||||
## 实现规范预算
|
||||
|
||||
- status_container.gd:公开方法 +1(purge_owner)、成员 +1(桶键结构)——公开方法 ≤20、成员 ≤15 内。
|
||||
- 存量触面 S13 预期:battle 域触碰文件(combat_segment/damage_controller/battle_orchestrator/reward_grant)键较登记值只降不升(clamped_pool 加参不增分支路径,投影换代删共享引用行);T0 读数步骤核对。
|
||||
|
||||
## 拆分边界纪律
|
||||
|
||||
本卡为行为重构(归属结构换代),非拆件批:禁为迎合机检保留或新增无效成员/别名;机检键与本卡契约互斥=停卡呈报,不自造第三条路。
|
||||
@@ -169,10 +169,11 @@
|
||||
- `design/gdd/systems/战斗循环/敌人系统.md` v1.5(2026-11-02,增益技落点=施放者自己+警觉授予随动)
|
||||
- `design/gdd/systems/战斗循环/战斗结算.md` v1.6(2026-11-02,警觉与 AC 合流句个体化随动)
|
||||
- `design/gdd/ux/battle.md`(2026-11-02,敌方增益呈现行个体化随动)
|
||||
- reports/需求卡片-敌方状态个体化批-2026-11-02.md(2026-11-02,本条需求卡片——已写卡凭据)
|
||||
|
||||
**改动面**:游戏代码
|
||||
|
||||
**状态**:文档设计已闭合+待写卡
|
||||
**状态**:文档设计已闭合+已写卡
|
||||
|
||||
#### 冒险前资源配比预设(构筑提案)(2026-09-18 登记,来源=会话提及)
|
||||
|
||||
|
||||
Reference in new issue
Block a user