fix(slice): 战斗数值结构修复批——乘区接线四件套+削弱续时(2026-09-18 盘问会话用户拍板,直接执行)——①主角侧乘区接线:主角攻击 Σ三分量后 ×(100+hero_offense)/100×(100+enemy_defense)/100 两池串乘(pool_damage 首参 0→_clamped_pool),sapped 乏力死效果随接线变活(原 hero_offense 池无消费方);②attack_up 普通分量直乘旁路退役(base_val=表值攻击裸值,增伤覆盖面=普通+穿刺+魔法合计——挪不是加防算两遍);③失衡换装 AC 轴:off_guard unit percent→ac·magnitude +25→−2(provisional),settlement effect_pool_map 删 off_guard 键——hero_defense 池清空结构保留,走 _defender_ac 既有读法零代码;④硬化符号纠正:fortify +100→−50(负值入敌方防御池=主角攻击折半;旧正值实际×2翻倍与"硬化=减伤"语义相反,用户确认系符号 bug);⑤削弱叠层改续时:weaken stack→refresh·duration 1→2(同名重复授予只刷新剩余结算数、层数恒 1——结构性消饱和,×2 叠满池触底 ×0 免伤轮根治;refresh 实现 empower/fortify 同款零代码);⑥数值终值全不在本批(provisional 归状态层重设计批);同步面:冒烟 296→300 项 0 失败(fortify 断言改形+旧「削弱×2 池触底」采样通道退役〔触发路径随续时结构性消失〕+新增 _smoke_pool_wiring 四断言〔同种子恒同掷点法:充电基线 103→增伤 154/乏力 77/硬化 51 精确关系〕+_weaken_refresh_probe 两断言〔层数 1/剩余次数重置 2/单层池读数=行值〕+免伤墙护栏注释同步)+ui/click/layout/tune 四探针 PASS;GDD 战斗结算 v0.14(直乘句×2+池乘区公式行+现状注记销项)/增益状态 v0.9(三行语义+例子表削弱叠两层→暴走叠两层+联动纪律句失效改写)/地图战斗资源 v0.11(极性矩阵失衡行失同步修正)/06-待办(削弱档位条目补续时定案注记)+07-体验验证清单新文档(Boss 战节奏/削弱承伤/增伤全段/乏力感知/失衡归因五观测项+验收重测批义务)+02 清单索引行;registry status_effect 三行+value_status+effect_pool_map 批注+修订记录+顺手收口 fields 量纲枚举漏登 ac(2026-09-16 换装批遗留);active.md 快照节/台账 69;残留措辞(承伤加深/直乘)grep 清零;并行会话 design/ 三未跟踪文件未碰
This commit is contained in:
1 parent
b7d1b56ae4
commit
b51af088e1
12 files changed
+209
-82
No files matched your search
@@ -13,6 +13,7 @@
|
|||||||
| `04-美术音频方向.md` | 参考图、参考游戏、风格关键词 |
|
| `04-美术音频方向.md` | 参考图、参考游戏、风格关键词 |
|
||||||
| `05-不做清单.md` | 明确写:这些我不要 |
|
| `05-不做清单.md` | 明确写:这些我不要 |
|
||||||
| `06-待办清单.md` | 全项目待办事项的唯一登记处;各系统文档的「待办」节只留指路存根 |
|
| `06-待办清单.md` | 全项目待办事项的唯一登记处;各系统文档的「待办」节只留指路存根 |
|
||||||
|
| `07-体验验证清单.md` | 需要真人试玩观测的验证项登记处(与 06 分工:06 是"要拍板的事",本篇是"要玩过才知道的事");每条注明结论回流路径 |
|
||||||
|
|
||||||
## systems/ 四个循环
|
## systems/ 四个循环
|
||||||
|
|
||||||
|
|||||||
@@ -294,11 +294,11 @@
|
|||||||
|
|
||||||
#### 削弱档位的最终数值
|
#### 削弱档位的最终数值
|
||||||
|
|
||||||
**现状**:削弱取值域 [60,85] 与投值 −65 来自旧体系裁决;"标中旗必须比随便挖一格更值"的当量终值由[战斗结算](systems/战斗循环/战斗结算.md)与[地图战斗资源](systems/战斗循环/地图战斗资源.md)共裁,尚未闭合
|
**现状**:削弱取值域 [60,85] 与投值 −65 来自旧体系裁决;"标中旗必须比随便挖一格更值"的当量终值由[战斗结算](systems/战斗循环/战斗结算.md)与[地图战斗资源](systems/战斗循环/地图战斗资源.md)共裁,尚未闭合。**语义侧已定案(2026-09-18 盘问会话,结构修复批落地)**:削弱叠层改续时——同名重复授予只刷新剩余结算数、层数恒 1(结构性消饱和,×2 叠满池触底 ×0 的免伤轮从根杜绝);现行表值为临时值(provisional),duration 终值与当量锚复算归状态层重设计批
|
||||||
|
|
||||||
**归属**:战斗结算与地图战斗资源共裁
|
**归属**:战斗结算与地图战斗资源共裁(数值终值归状态层重设计批)
|
||||||
|
|
||||||
**状态**:待办
|
**状态**:待办(语义已定案,数值未闭合)
|
||||||
|
|
||||||
#### 单体寻址的接口扩展位
|
#### 单体寻址的接口扩展位
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,59 @@
|
|||||||
|
# 07-体验验证清单
|
||||||
|
|
||||||
|
本文登记**需要真人体验/观测才能下结论**的验证项,与 [06-待办清单](06-待办清单.md) 分工:06 登记"要拍板的事",本文登记"要玩过才知道的事"。每条注明**结论回流**路径——体验感受不满不等于当场改数:数值终值归其登记的归属批,体验反馈是该批的输入。
|
||||||
|
|
||||||
|
当前批次来源:**战斗数值结构修复批**(2026-09-18,乘区接线四件套 + 削弱续时——战斗结算 v0.14 / 增益状态 v0.9 / 地图战斗资源 v0.11)。五项行为变化全部已过机器断言(冒烟 300 全绿),本文只列**机器测不了、要人玩**的部分。
|
||||||
|
|
||||||
|
## 行为变化速览(体验前先读)
|
||||||
|
|
||||||
|
| 改动 | 旧行为 | 新行为 | 直接体感 |
|
||||||
|
|---|---|---|---|
|
||||||
|
| 硬化(敌方技) | 主角打硬化目标**翻倍**(符号 bug) | 主角攻击**折半** | Boss 战显著变长变难(预期内) |
|
||||||
|
| 削弱(标中旗) | 叠层 ×2 可把敌方输出压到归零(免伤轮) | 持续 2 次结算、重复标中只续时不叠层,输出恒 ≥35% | 每轮必有承伤,插旗从"阶段性安全"变"持续减伤" |
|
||||||
|
| 增伤(安全格) | 只加成普攻段,充能段不吃 | 加成全部三段(普攻+穿刺+魔法) | 边挖边拿增伤时伤害明显变高 |
|
||||||
|
| 乏力(踩雷负向) | 无感(乘区没接线,死效果) | 输出合计 −25%(含充能段) | 踩雷后攻击真的变弱了 |
|
||||||
|
| 失衡(标错旗) | 承伤加深 +25% | 护甲等级 −2(更易被命中) | 惩罚变隐性——挨打概率上升而非每刀固定加深 |
|
||||||
|
|
||||||
|
## 试玩观测项(按优先级)
|
||||||
|
|
||||||
|
### ① Boss 战节奏(最高优先)
|
||||||
|
|
||||||
|
- **观测什么**:第二关 Boss(蛛化卓尔精灵)战的轮数、承伤、"打不打得动"的体感。硬化此前只挂 Boss 池,旧读数全部泡在翻倍行为里。
|
||||||
|
- **预期**:明显比以前难——硬化期主角输出减半是纠正后的正确语义,不是 bug。
|
||||||
|
- **红灯信号**:硬化覆盖期间完全打不动、战斗拖过约 10 轮、或恢复点耗尽仍过不去。
|
||||||
|
- **结论回流**:体感数据 → 验收读数重测批(必须含 Boss 战单独出列);若确认过难,杠杆归状态层重设计批(硬化 −50 是临时值)+ 难度曲线调参批复核,**不在试玩现场改数**。
|
||||||
|
|
||||||
|
### ② 削弱续时后的承伤压力
|
||||||
|
|
||||||
|
- **观测什么**:普通场每轮承伤是否压得住;插旗的意愿变化(削弱不再能堆出免伤轮)。
|
||||||
|
- **预期**:承伤比以前高——旧"连标两层 → 敌方打不出伤害"的节奏消失了,这是消饱和的代价,属预期。
|
||||||
|
- **红灯信号**:普通场(非 Boss)连续掉血无法规划、恢复点不够用。
|
||||||
|
- **结论回流**:承伤带读数 → 验收读数重测批;削弱时长终值(现行 2 次结算)归状态层重设计批。
|
||||||
|
|
||||||
|
### ③ 增伤全段覆盖的数值手感
|
||||||
|
|
||||||
|
- **观测什么**:持有增伤时边挖边打,伤害是否"明显变高但不爆炸"(充能段现在也吃增伤)。
|
||||||
|
- **预期**:挖得越顺伤害滚得越快(正反馈增强)。
|
||||||
|
- **红灯信号**:普通敌一拍秒杀常态化、增益格子变成"无脑必抢"没有决策。
|
||||||
|
- **结论回流**:增伤幅度是临时值 → 状态层重设计批。
|
||||||
|
|
||||||
|
### ④ 乏力的可感知性
|
||||||
|
|
||||||
|
- **观测什么**:踩雷吃乏力后,接下来一轮的输出下降是否感觉得到。
|
||||||
|
- **预期**:可感知但不致命(−25% 输出,含充能段)。
|
||||||
|
- **红灯信号**:完全无感(等于白踩)或过痛(一轮输出报废后必然崩线)。
|
||||||
|
- **结论回流**:乏力幅度临时值 → 状态层重设计批;此前"乏力死效果"的格面资源调研结论([格面资源核查](../research/proposal-reward-cell-differentiation-2026-09-17.md) 关联项)随接线失效,该调研中的相关读数作废。
|
||||||
|
|
||||||
|
### ⑤ 失衡换轴的归因可读性(P2 关注)
|
||||||
|
|
||||||
|
- **观测什么**:标错旗吃失衡后,玩家能否读懂"为什么这几刀特别疼"(护甲等级 −2 → 更容易被打出全额/高档伤害)。
|
||||||
|
- **预期**:惩罚变隐性是换轴的已知代价——承伤加深是"每刀固定变疼",AC 降低是"挨打概率与档位变差",后者更难直觉归因。
|
||||||
|
- **红灯信号**:试玩者完全无法把"挨打变疼"与标错旗关联起来。
|
||||||
|
- **结论回流**:归因呈现问题 → 战斗表现 / HUD 框架批(状态栏图标与明细行文案),失衡 N 值归状态层重设计批。
|
||||||
|
|
||||||
|
## 验收读数重测批义务(给下一批的输入,非手工项)
|
||||||
|
|
||||||
|
- **Boss 战必须单独出列**(硬化行为变化——旧 Boss 承伤 84.8% 等读数全部作废)。
|
||||||
|
- 普通场承伤带、通关率基线全量重测(削弱续时 + 乘区接线双变量)。
|
||||||
|
- 旧读数作废清单:池触底免伤轮相关读数、硬化翻倍期全部战斗读数、乏力死效果期格面调研读数。
|
||||||
|
- 工具就位:`analyze_playtest.py`(反事实分析,吃新日志)、`level_monte_carlo`(MC 基线重跑)、JSONL 日志含池值与快照。
|
||||||
@@ -108,10 +108,10 @@
|
|||||||
| 类型 | 正向(奖励) | 负向(惩罚) |
|
| 类型 | 正向(奖励) | 负向(惩罚) |
|
||||||
|---|---|---|
|
|---|---|---|
|
||||||
| attack 增伤 | attack_up(hero_offense 池)——幅度/上限/权重见 `reward.tres` | enrage(enemy_output 池)——幅度/上限见 `status_effects.tres` enrage 行 |
|
| attack 增伤 | attack_up(hero_offense 池)——幅度/上限/权重见 `reward.tres` | enrage(enemy_output 池)——幅度/上限见 `status_effects.tres` enrage 行 |
|
||||||
| defense 护甲 | ac_up 护甲强化(AC 掷点阈值轴——2026-09-16 换装,不入池)——幅度/上限/权重见 `reward.tres` | off_guard(hero_defense 池,承伤加深)——幅度/上限见 `status_effects.tres` off_guard 行 |
|
| defense 护甲 | ac_up 护甲强化(AC 掷点阈值轴——2026-09-16 换装,不入池)——幅度/上限/权重见 `reward.tres` | off_guard 失衡(AC 掷点阈值轴负向——2026-09-18 换装,不入池、退出 hero_defense 池)——幅度/上限见 `status_effects.tres` off_guard 行 |
|
||||||
| heal 回血 | heal_minor(满血零兑付照旧)——威力/权重见 `reward.tres` | heal_backlash 直伤:战斗结算直接扣血,不经增益状态——威力见 `reward.tres` |
|
| heal 回血 | heal_minor(满血零兑付照旧)——威力/权重见 `reward.tres` | heal_backlash 直伤:战斗结算直接扣血,不经增益状态——威力见 `reward.tres` |
|
||||||
| blast 群伤 | spark_aoe 全体存活敌各吃一笔——威力/权重见 `reward.tres` | ambush_double 敌方伏击 +N 层(进伏击池,N=stacks)——见 `reward.tres` |
|
| blast 群伤 | spark_aoe 全体存活敌各吃一笔——威力/权重见 `reward.tres` | ambush_double 敌方伏击 +N 层(进伏击池,N=stacks)——见 `reward.tres` |
|
||||||
| weaken 削弱 | weaken(enemy_output 池)——幅度见 `status_effects.tres` weaken 行 | sapped(hero_offense 池)——幅度见 `status_effects.tres` sapped 行 |
|
| weaken 削弱 | weaken(enemy_output 池;同名重复授予只刷新剩余次数——2026-09-18 续时定案)——幅度见 `status_effects.tres` weaken 行 | sapped(hero_offense 池)——幅度见 `status_effects.tres` sapped 行 |
|
||||||
| pierce 穿刺 | pierce_strike 穿刺弹:单目标克制直伤(attack_type=pierce 查克制矩阵,必中全额不掷点;目标 = 固定顺位最前存活敌)——威力/权重见 `reward.tres` | pierce_snare 穿刺陷阱:主角直伤,不经增益状态——威力见 `reward.tres` |
|
| pierce 穿刺 | pierce_strike 穿刺弹:单目标克制直伤(attack_type=pierce 查克制矩阵,必中全额不掷点;目标 = 固定顺位最前存活敌)——威力/权重见 `reward.tres` | pierce_snare 穿刺陷阱:主角直伤,不经增益状态——威力见 `reward.tres` |
|
||||||
| magic 魔法 | magic_bolt 魔法矢:单目标克制直伤(attack_type=magic,同上)——威力/权重见 `reward.tres` | magic_recoil 魔法反噬:主角直伤,不经增益状态——威力见 `reward.tres` |
|
| magic 魔法 | magic_bolt 魔法矢:单目标克制直伤(attack_type=magic,同上)——威力/权重见 `reward.tres` | magic_recoil 魔法反噬:主角直伤,不经增益状态——威力见 `reward.tres` |
|
||||||
|
|
||||||
@@ -236,3 +236,4 @@
|
|||||||
| v0.8 | 2026-09-17 | **候选集合节补强(与代码对齐)**:在「格面资源」节后新增「候选集合:安全格与雷格的资源池」——明确安全格与雷格候选集 = cell 池正向 5 行全集(attack_up · ac_up · spark_aoe · heal_minor · weaken),权重分布相同,类型频次合计 67(v0.7 压缩批后)。清图槽 clear_blast 独立于格面资源、板级作用域。代码事实源:`core/reward_economy.gd#roll_board`(`_rollable_rows` 不分格型)+ `core/minesweeper_rules.gd#_do_dig`(cell_revealed 通道 `resource=true` 对两种格一致)。同步修正 v0.6 历史条目"类型频次合计 79 不变"——v0.7 后改 67 |
|
| v0.8 | 2026-09-17 | **候选集合节补强(与代码对齐)**:在「格面资源」节后新增「候选集合:安全格与雷格的资源池」——明确安全格与雷格候选集 = cell 池正向 5 行全集(attack_up · ac_up · spark_aoe · heal_minor · weaken),权重分布相同,类型频次合计 67(v0.7 压缩批后)。清图槽 clear_blast 独立于格面资源、板级作用域。代码事实源:`core/reward_economy.gd#roll_board`(`_rollable_rows` 不分格型)+ `core/minesweeper_rules.gd#_do_dig`(cell_revealed 通道 `resource=true` 对两种格一致)。同步修正 v0.6 历史条目"类型频次合计 79 不变"——v0.7 后改 67 |
|
||||||
| v0.10 | 2026-09-18 | **伤害道具批(用户指令,2026-09-18)**:① 五型→七型——增补 pierce(穿刺)/ magic(魔法)两型,各正负一行:正向 = 单目标克制直伤道具(pierce_strike 穿刺弹 / magic_bolt 魔法矢,attack_type 字段载攻击类型轴,查战斗结算克制矩阵、必中全额不掷点、目标 = 固定顺位最前存活敌);负向 = 主角直伤(pierce_snare 穿刺陷阱 / magic_recoil 魔法反噬,复用反噬通道不经增益状态);② 权重再平衡(用户指令"保爆裂粉尘不变、等比下调其余"):spark_aoe 16 不动,attack_up 20→14 · ac_up 16→11 · heal_minor 3→2 · weaken 12→8(等比基准 ×35/51≈0.686,整取微差登记已知偏差),新行各 8——类型频次合计仍 67;③ 结构冻结"五型封闭"按 owner 修订流程改"七型封闭";切片同批落地(reward.tres 四新行 + schema 七型枚举 + attack_type 校验 + 结算兑付分支 + 棋盘徽标 穿/魔 + smoke 295 全绿;断言"主角先手攻击行存在"放宽为"存在或授予段终局"——单弱敌可被挖掘期兑付单独击杀,战斗段整段跳过为合法结局) |
|
| v0.10 | 2026-09-18 | **伤害道具批(用户指令,2026-09-18)**:① 五型→七型——增补 pierce(穿刺)/ magic(魔法)两型,各正负一行:正向 = 单目标克制直伤道具(pierce_strike 穿刺弹 / magic_bolt 魔法矢,attack_type 字段载攻击类型轴,查战斗结算克制矩阵、必中全额不掷点、目标 = 固定顺位最前存活敌);负向 = 主角直伤(pierce_snare 穿刺陷阱 / magic_recoil 魔法反噬,复用反噬通道不经增益状态);② 权重再平衡(用户指令"保爆裂粉尘不变、等比下调其余"):spark_aoe 16 不动,attack_up 20→14 · ac_up 16→11 · heal_minor 3→2 · weaken 12→8(等比基准 ×35/51≈0.686,整取微差登记已知偏差),新行各 8——类型频次合计仍 67;③ 结构冻结"五型封闭"按 owner 修订流程改"七型封闭";切片同批落地(reward.tres 四新行 + schema 七型枚举 + attack_type 校验 + 结算兑付分支 + 棋盘徽标 穿/魔 + smoke 295 全绿;断言"主角先手攻击行存在"放宽为"存在或授予段终局"——单弱敌可被挖掘期兑付单独击杀,战斗段整段跳过为合法结局) |
|
||||||
| v0.9 | 2026-09-17 | **数值纪律收口批:正文与调参表 knob 现行值改指路存根(事实源 `data/tables/*.tres` 与 registry),3 处失同步值修正**——候选集合节"合计 = 67"字面量改指路 reward.tres cell 池正向行 weight 之和(现行值读表);候选集合表"类型频次合计"列两处 67 改"见 reward.tres";代码事实源清单五型 weight 明细(attack_up 20 · ac_up 16 · spark_aoe 16 · heal_minor 3 · weaken 12)改"5 行正向行 weight 现行值读 reward.tres" |
|
| v0.9 | 2026-09-17 | **数值纪律收口批:正文与调参表 knob 现行值改指路存根(事实源 `data/tables/*.tres` 与 registry),3 处失同步值修正**——候选集合节"合计 = 67"字面量改指路 reward.tres cell 池正向行 weight 之和(现行值读表);候选集合表"类型频次合计"列两处 67 改"见 reward.tres";代码事实源清单五型 weight 明细(attack_up 20 · ac_up 16 · spark_aoe 16 · heal_minor 3 · weaken 12)改"5 行正向行 weight 现行值读 reward.tres" |
|
||||||
|
| v0.11 | 2026-09-18 | **战斗数值结构修复批·极性矩阵同步(2026-09-18 盘问会话用户拍板,与战斗结算 v0.14 / 增益状态 v0.9 / registry / 切片代码同批)**:① defense 型负向 off_guard 行失同步修正——原残留"hero_defense 池,承伤加深"改"AC 掷点阈值轴负向、不入池"(off_guard 换装 AC 轴随结构修复批落地,effect_pool_map 删键);② weaken 型正向行补续时定案注记(同名重复授予只刷新剩余次数——2026-09-18,叠层措辞随批退役) |
|
||||||
@@ -85,7 +85,7 @@
|
|||||||
| 合并策略 | 重复授予时发生什么 | 说明 |
|
| 合并策略 | 重复授予时发生什么 | 说明 |
|
||||||
|---|---|---|
|
|---|---|---|
|
||||||
| 叠加 | 层数加一;剩余结算次数不动——只有首次授予定钟 | 现行内容行多数用叠加(逐行合并策略读 `status_effects.tres`) |
|
| 叠加 | 层数加一;剩余结算次数不动——只有首次授予定钟 | 现行内容行多数用叠加(逐行合并策略读 `status_effects.tres`) |
|
||||||
| 刷新 | 剩余结算次数重置为该实例首次授予时的初始值,层数不变 | 刷新类内容行已就位(增益技行 empower / fortify 等——逐行读 `status_effects.tres`) |
|
| 刷新 | 剩余结算次数重置为该实例首次授予时的初始值,层数不变 | 刷新类内容行已就位(增益技行 empower / fortify、削弱行 weaken——2026-09-18 续时定案;逐行读 `status_effects.tres`) |
|
||||||
| 并存 | 新建一份独立实例,两份各算各的 | 同上 |
|
| 并存 | 新建一份独立实例,两份各算各的 | 同上 |
|
||||||
|
|
||||||
并存分支没有满层上限,但容器规模天然有界:实例数的上界就是受理过的授予数——多受理一份就多一份实例,多少份在授予那一刻就完全确定,不会无限膨胀。
|
并存分支没有满层上限,但容器规模天然有界:实例数的上界就是受理过的授予数——多受理一份就多一份实例,多少份在授予那一刻就完全确定,不会无限膨胀。
|
||||||
@@ -98,7 +98,7 @@
|
|||||||
|
|
||||||
### 剩余次数怎么倒数:按结算次数衰减
|
### 剩余次数怎么倒数:按结算次数衰减
|
||||||
|
|
||||||
每个状态实例自带一个倒数计数——剩余结算次数(本文说的"衰减"就是它逐次递减、归零消失)。它不承诺"活几轮",而是数"经历过几次轮末结算":每轮结算先让状态起作用,随后计数减一,减到零状态即被移除。持续 1 的状态就是"一次性":在授予它的那轮结算里生效一次,轮末消失。MVP 六行内容全部是一次性;将来跨轮持续的增益,寿命由表行初始值表达,给几就活几次结算。
|
每个状态实例自带一个倒数计数——剩余结算次数(本文说的"衰减"就是它逐次递减、归零消失)。它不承诺"活几轮",而是数"经历过几次轮末结算":每轮结算先让状态起作用,随后计数减一,减到零状态即被移除。持续 1 的状态就是"一次性":在授予它的那轮结算里生效一次,轮末消失。MVP 时期六行内容均为一次性(削弱后改续时——见版本历史);跨轮持续的状态,寿命由表行初始值表达,给几就活几次结算。
|
||||||
|
|
||||||
```
|
```
|
||||||
一轮结算:查询生效清单 → 逐行兑付(层数 × 行值)→ 轮末衰减(全部实例剩余次数 −1)→ 归零实例移除
|
一轮结算:查询生效清单 → 逐行兑付(层数 × 行值)→ 轮末衰减(全部实例剩余次数 −1)→ 归零实例移除
|
||||||
@@ -128,7 +128,7 @@
|
|||||||
|
|
||||||
| 例子 | 容器输出 | 消费侧读法 |
|
| 例子 | 容器输出 | 消费侧读法 |
|
||||||
|---|---|---|
|
|---|---|---|
|
||||||
| 削弱叠两层 | −(2 × weaken 行幅度)(读表;越出单行取值域,原样输出) | 压在地板 −100% 上:敌方输出乘区归零(落地伤害由战斗结算全局下限保底 ≥1) |
|
| 暴走叠两层 | +(2 × enrage 行幅度)(读表;越出单行取值域,原样输出) | 压在天花板 +100% 上:敌方输出乘区封顶 ×2(削弱已改续时——"叠两层压地板 −100% 归零"的读法随 2026-09-18 结构修复批退役,见版本历史) |
|
||||||
| 主角护甲强化叠两层 | 每层 +1 AC(读 ac_up 行)× 2 层 | 不经任何池:掷点判定阈值 = 主角基准(读 hero 表)+ 层数 |
|
| 主角护甲强化叠两层 | 每层 +1 AC(读 ac_up 行)× 2 层 | 不经任何池:掷点判定阈值 = 主角基准(读 hero 表)+ 层数 |
|
||||||
|
|
||||||
容器还有一条快照纪律:实例的幅度、初始次数、量纲在授予那一刻从表行拷贝。战斗中配置表即使被重载,已授予实例不受任何影响,只影响后续授予。
|
容器还有一条快照纪律:实例的幅度、初始次数、量纲在授予那一刻从表行拷贝。战斗中配置表即使被重载,已授予实例不受任何影响,只影响后续授予。
|
||||||
@@ -153,16 +153,16 @@
|
|||||||
| attack_up 增伤 | 主角攻击提升 | 主角 | 见 `data/tables/status_effects.tres` attack_up 行 | 时限/上限读表 / 叠加 | 安全格 |
|
| attack_up 增伤 | 主角攻击提升 | 主角 | 见 `data/tables/status_effects.tres` attack_up 行 | 时限/上限读表 / 叠加 | 安全格 |
|
||||||
| ac_up 护甲强化 | 主角护甲等级提升(掷点折扣判定阈值——AC 轴,不入池) | 主角 | 见 `status_effects.tres` ac_up 行(2026-09-16 换装,原 defense_up 行已退役,见版本历史) | 时限/上限读表 / 叠加 | 安全格 |
|
| ac_up 护甲强化 | 主角护甲等级提升(掷点折扣判定阈值——AC 轴,不入池) | 主角 | 见 `status_effects.tres` ac_up 行(2026-09-16 换装,原 defense_up 行已退役,见版本历史) | 时限/上限读表 / 叠加 | 安全格 |
|
||||||
| ambush 伏击 | 敌方攻击附带额外伤害 | 敌方 | 见 `status_effects.tres` ambush 行 | 时限/上限读表 / 叠加 | 踩雷 / 标空旗反噬 |
|
| ambush 伏击 | 敌方攻击附带额外伤害 | 敌方 | 见 `status_effects.tres` ambush 行 | 时限/上限读表 / 叠加 | 踩雷 / 标空旗反噬 |
|
||||||
| weaken 削弱 | 敌方攻击被削弱 | 敌方 | 见 `status_effects.tres` weaken 行(取值域 [60,85],取负生效) | 时限/上限读表 / 叠加 | 标中旗 |
|
| weaken 削弱 | 敌方攻击被削弱(同名重复标中只刷新剩余次数、层数恒 1) | 敌方 | 见 `status_effects.tres` weaken 行(取值域 [60,85],取负生效) | 时限读表 / 刷新(2026-09-18 续时定案) | 标中旗 |
|
||||||
| enrage 暴走 | 敌方攻击提升 | 敌方 | 见 `status_effects.tres` enrage 行 | 时限/上限读表 / 叠加 | 标空旗反噬 |
|
| enrage 暴走 | 敌方攻击提升 | 敌方 | 见 `status_effects.tres` enrage 行 | 时限/上限读表 / 叠加 | 标空旗反噬 |
|
||||||
| off_guard 失衡 | 主角承伤加深(百分比进承伤修正池) | 主角 | 见 `status_effects.tres` off_guard 行 | 时限/上限读表 / 叠加 | 标空旗反噬 |
|
| off_guard 失衡 | 主角护甲等级降低(AC 轴——掷点判定阈值下调、更易被命中;2026-09-18 换装,原百分比承伤池已退) | 主角 | 见 `status_effects.tres` off_guard 行 | 时限/上限读表 / 叠加 | 标空旗反噬 |
|
||||||
| sapped 乏力 | 主角输出降低(weaken 型负向,hero_offense 池) | 主角 | 见 `status_effects.tres` sapped 行 | 时限/上限读表 / 叠加 | 雷格负向(2026-09-15 格面资源批) |
|
| sapped 乏力 | 主角输出降低(weaken 型负向,hero_offense 池) | 主角 | 见 `status_effects.tres` sapped 行 | 时限/上限读表 / 叠加 | 雷格负向(2026-09-15 格面资源批) |
|
||||||
| empower 蓄力 | 敌方输出倍率增益(enemy_output 池——蓄力技载体;幅度读表) | 敌方 | 见 `status_effects.tres` empower 行 | duration 读表 = 1 个有效增益拍 / 刷新 | 敌方技能施放(2026-09-16 敌人技能池批) |
|
| empower 蓄力 | 敌方输出倍率增益(enemy_output 池——蓄力技载体;幅度读表) | 敌方 | 见 `status_effects.tres` empower 行 | duration 读表 = 1 个有效增益拍 / 刷新 | 敌方技能施放(2026-09-16 敌人技能池批) |
|
||||||
| fortify 硬化 | 敌方防御提升(**敌方防御池 enemy_defense**——硬化技载体,主角攻击折半) | 敌方 | 见 `status_effects.tres` fortify 行 | duration 读表 = 1 个有效增益拍 / 刷新 | 敌方技能施放(2026-09-16 敌人技能池批) |
|
| fortify 硬化 | 敌方防御提升(**敌方防御池 enemy_defense**——硬化技载体;负值入池 = 主角攻击折半,2026-09-18 符号纠正——旧正值实际翻倍) | 敌方 | 见 `status_effects.tres` fortify 行 | duration 读表 = 1 个有效增益拍 / 刷新 | 敌方技能施放(2026-09-16 敌人技能池批) |
|
||||||
|
|
||||||
empower 与 fortify 是敌方技能池增益技在容器侧的数据落点(技能行 buff_ref 引用,施放时长由技能行覆盖——技能冷却与增益持续是两个计时器):两行 duration 表值(读表)的口径是"先兑付后衰减含施放当轮"——施放发生在第 N 结算战斗段,存活到第 N+1 结算战斗段才兑付"下一拍",即"持续 1 个有效结算"(proposal 语义的容器落地)。敌方防御池(enemy_defense)是第四个乘区池:敌方作为防守方的百分比修正池,消费面 = [战斗结算](战斗结算.md)主角攻击的池乘区——四池对称(敌打主角 = hero_defense × enemy_output,主角打敌 = hero_offense × enemy_defense),容器语义零延伸:仍是同构实例、side-wide 加算、不封顶不保底。
|
empower 与 fortify 是敌方技能池增益技在容器侧的数据落点(技能行 buff_ref 引用,施放时长由技能行覆盖——技能冷却与增益持续是两个计时器):两行 duration 表值(读表)的口径是"先兑付后衰减含施放当轮"——施放发生在第 N 结算战斗段,存活到第 N+1 结算战斗段才兑付"下一拍",即"持续 1 个有效结算"(proposal 语义的容器落地)。敌方防御池(enemy_defense)是第四个乘区池:敌方作为防守方的百分比修正池,消费面 = [战斗结算](战斗结算.md)主角攻击的池乘区——四池对称(敌打主角 = hero_defense × enemy_output,主角打敌 = hero_offense × enemy_defense),容器语义零延伸:仍是同构实例、side-wide 加算、不封顶不保底。
|
||||||
|
|
||||||
削弱行是当量锚在容器侧的数据落点:标中旗的收益折算成统一价值后,必须严格高于最低档主角增益——"标中旗必须比随便挖一格更值",否则没人愿意插旗。这条锚的契约归[行动经济](../排雷循环/行动经济.md),对照验收归[战斗结算](战斗结算.md);伏击行的固定值量纲定义与惩罚上限锚归[敌人系统](敌人系统.md)。暴走与失衡两行是[战斗结算](战斗结算.md)标错反噬机制(标空旗的三选一确定性惩罚)在容器侧的数据落点:三池内容与载体裁决归它,本表只承载行值。
|
削弱行是当量锚在容器侧的数据落点:标中旗的收益折算成统一价值后,必须严格高于最低档主角增益——"标中旗必须比随便挖一格更值",否则没人愿意插旗。这条锚的契约归[行动经济](../排雷循环/行动经济.md),对照验收归[战斗结算](战斗结算.md);伏击行的固定值量纲定义与惩罚上限锚归[敌人系统](敌人系统.md)。暴走与失衡两行是[战斗结算](战斗结算.md)标错反噬机制(标空旗的三选一确定性惩罚)在容器侧的数据落点:三行内容与载体裁决归它,本表只承载行值(失衡已换装 AC 轴不入池——2026-09-18 结构修复批)。
|
||||||
|
|
||||||
## 依赖与输出
|
## 依赖与输出
|
||||||
|
|
||||||
@@ -196,7 +196,7 @@ empower 与 fortify 是敌方技能池增益技在容器侧的数据落点(技
|
|||||||
|
|
||||||
| 优先级 | 内容 | 后置原因 |
|
| 优先级 | 内容 | 后置原因 |
|
||||||
|---|---|---|
|
|---|---|---|
|
||||||
| P1 | 刷新、并存两类合并策略的后续内容行 | 语义已定义、容器已承载;刷新类已有首批内容(empower/fortify,2026-09-16 敌人技能池批),并存仍空,首个并存内容行上线时随批补验收 |
|
| P1 | 刷新、并存两类合并策略的后续内容行 | 语义已定义、容器已承载;刷新类已有内容(empower/fortify 2026-09-16 敌人技能池批、weaken 2026-09-18 续时定案),并存仍空,首个并存内容行上线时随批补验收 |
|
||||||
| P1 | 清图奖励含增益的授予路径 | 来源类别已预留;内容与档位归[地图战斗资源](地图战斗资源.md)定稿 |
|
| P1 | 清图奖励含增益的授予路径 | 来源类别已预留;内容与档位归[地图战斗资源](地图战斗资源.md)定稿 |
|
||||||
| P1 | 单体寻址扩展位 | 现行对敌效果一律全体共享;首个"只作用于其中一个敌人"的效果上线时给实例加目标字段 |
|
| P1 | 单体寻址扩展位 | 现行对敌效果一律全体共享;首个"只作用于其中一个敌人"的效果上线时给实例加目标字段 |
|
||||||
| P2 | 驱散 / 延时 / 转移接口 | 状态一旦生效,玩家没有任何手段摘掉、延后或挪给别人——省掉一整类界面复杂度是明确的设计决定;要加属于新增接口的修订,不是调参 |
|
| P2 | 驱散 / 延时 / 转移接口 | 状态一旦生效,玩家没有任何手段摘掉、延后或挪给别人——省掉一整类界面复杂度是明确的设计决定;要加属于新增接口的修订,不是调参 |
|
||||||
@@ -215,16 +215,16 @@ empower 与 fortify 是敌方技能池增益技在容器侧的数据落点(技
|
|||||||
| ambush 幅度 | 固定值 ≥ 1 | flat 行 magnitude | 伏击;量纲定义见[敌人系统](敌人系统.md) |
|
| ambush 幅度 | 固定值 ≥ 1 | flat 行 magnitude | 伏击;量纲定义见[敌人系统](敌人系统.md) |
|
||||||
| weaken 幅度 | 百分比取值域 [60,85],取负生效 | percent 行 magnitude | 削弱;须过"标中旗锚"对照 |
|
| weaken 幅度 | 百分比取值域 [60,85],取负生效 | percent 行 magnitude | 削弱;须过"标中旗锚"对照 |
|
||||||
| enrage 幅度 | 百分比 [−100,100] 且非 0 | percent 行 magnitude | 暴走;标错反噬三池之一,进敌方输出修正池 |
|
| enrage 幅度 | 百分比 [−100,100] 且非 0 | percent 行 magnitude | 暴走;标错反噬三池之一,进敌方输出修正池 |
|
||||||
| off_guard 幅度 | 百分比 [−100,100] 且非 0 | percent 行 magnitude | 失衡;标错反噬三池之一,进主角承伤修正池 |
|
| off_guard 幅度 | 护甲等级 [−20,20] 且非 0 | ac 行 magnitude | 失衡;标空旗反噬载体,掷点判定阈值逐层下调(2026-09-18 换装 AC 轴,不入池、退出 hero_defense 池) |
|
||||||
| sapped 幅度 | 百分比 [−100,100] 且非 0 | percent 行 magnitude | 乏力;雷格负向 weaken 型,进主角输出修正池(2026-09-15 格面资源批补登记) |
|
| sapped 幅度 | 百分比 [−100,100] 且非 0 | percent 行 magnitude | 乏力;雷格负向 weaken 型,进主角输出修正池(2026-09-15 格面资源批补登记) |
|
||||||
| empower 幅度 | 百分比 [−100,100] 且非 0 | percent 行 magnitude | 蓄力;敌方技能池增益技载体,进敌方输出修正池 |
|
| empower 幅度 | 百分比 [−100,100] 且非 0 | percent 行 magnitude | 蓄力;敌方技能池增益技载体,进敌方输出修正池 |
|
||||||
| fortify 幅度 | 百分比 [−100,100] 且非 0 | percent 行 magnitude | 硬化;敌方技能池增益技载体,进**敌方防御池 enemy_defense** |
|
| fortify 幅度 | 百分比 [−100,100] 且非 0 | percent 行 magnitude | 硬化;敌方技能池增益技载体,进**敌方防御池 enemy_defense**(负值 = 减伤方向——2026-09-18 符号纠正) |
|
||||||
| 初始剩余次数 | 整数 [1,99] | duration_settlements | 七行一次性语义;empower/fortify duration 读表,语义 = 1 个有效增益拍(先兑付后衰减含施放当轮);拉长 = 恢复跨轮延续、规划变简单 |
|
| 初始剩余次数 | 整数 [1,99] | duration_settlements | 六行一次性语义;weaken 与 empower/fortify duration 读表(weaken 续时 = 2026-09-18 定案;empower/fortify = 1 个有效增益拍——先兑付后衰减含施放当轮);拉长 = 恢复跨轮延续、规划变简单 |
|
||||||
| 叠层上限 | 整数 [1,16] | max_stack | 仅叠加策略消费;empower/fortify 用刷新 ×1(冷却闸下不可能自叠加) |
|
| 叠层上限 | 整数 [1,16] | max_stack | 仅叠加策略消费;刷新行层数恒 1——weaken 表值上限在续时语义下不消费(2026-09-18),empower/fortify ×1(冷却闸下不可能自叠加) |
|
||||||
|
|
||||||
非调参的冻结项:三类合并策略语义、两种量纲语义、来源类别枚举、"先兑付后衰减"时序、拒绝原子性、零随机——改动走本文修订流程,不走调参。
|
非调参的冻结项:三类合并策略语义、两种量纲语义、来源类别枚举、"先兑付后衰减"时序、拒绝原子性、零随机——改动走本文修订流程,不走调参。
|
||||||
|
|
||||||
联动纪律:增伤与削弱是当量锚的两端;护甲强化与[难度曲线与Boss](../冒险循环/难度曲线与Boss.md)的承伤预期联动(掷点折扣轴——AC 行值变更须复算生存链区间);削弱的单轮层数上限受[行动经济](../排雷循环/行动经济.md)的每轮行动点约束。这些联动值禁止独立调参,修订须重跑锚对照并同步 registry。
|
联动纪律:增伤与削弱是当量锚的两端;护甲强化与[难度曲线与Boss](../冒险循环/难度曲线与Boss.md)的承伤预期联动(掷点折扣轴——AC 行值变更须复算生存链区间);削弱改续时后"单轮层数上限受[行动经济](../排雷循环/行动经济.md)行动点约束"的联动随之失效(2026-09-18 续时定案——同名重复标中只刷新剩余次数、层数恒 1)。这些联动值禁止独立调参,修订须重跑锚对照并同步 registry。
|
||||||
|
|
||||||
## 验收标准
|
## 验收标准
|
||||||
|
|
||||||
@@ -255,3 +255,4 @@ empower 与 fortify 是敌方技能池增益技在容器侧的数据落点(技
|
|||||||
| v0.5 | 2026-09-16 | **敌人技能池批(与敌人系统 / 战斗结算 / 难度曲线与Boss / registry / 切片同批)**:状态表六行 → 九行——新增 empower(蓄力:敌方 +100% 入 enemy_output 池)与 fortify(硬化:敌方 +100% 入**敌方防御池 enemy_defense** 新池——硬化技载体,主角攻击乘区消费面归战斗结算)两行敌方技能施放增益,来源类别 = 敌方技能施放(技能行 buff_ref 引用、施放时长由技能行 buff_duration 覆盖——技能冷却与增益持续两个计时器);两行 duration 2 = 1 个有效增益拍的容器口径成文;**顺手清偿 v0.4 挂起的 sapped 文档同步**(2026-09-15 格面资源批入表未登记的文档漂移——状态行表与调参表补行);P1"刷新类首批内容行"核销(empower/fortify 即首批) |
|
| v0.5 | 2026-09-16 | **敌人技能池批(与敌人系统 / 战斗结算 / 难度曲线与Boss / registry / 切片同批)**:状态表六行 → 九行——新增 empower(蓄力:敌方 +100% 入 enemy_output 池)与 fortify(硬化:敌方 +100% 入**敌方防御池 enemy_defense** 新池——硬化技载体,主角攻击乘区消费面归战斗结算)两行敌方技能施放增益,来源类别 = 敌方技能施放(技能行 buff_ref 引用、施放时长由技能行 buff_duration 覆盖——技能冷却与增益持续两个计时器);两行 duration 2 = 1 个有效增益拍的容器口径成文;**顺手清偿 v0.4 挂起的 sapped 文档同步**(2026-09-15 格面资源批入表未登记的文档漂移——状态行表与调参表补行);P1"刷新类首批内容行"核销(empower/fortify 即首批) |
|
||||||
| v0.7 | 2026-09-17 | **数值压缩批·文档同步(与 doc-conventions.md §5 数值纪律·强制收口条款同批)**:ambush 幅度 +3 flat → +1 flat(量纲未变、压缩倍数三阶下发,参见 `data/tables/status_effects.tres` 注释)。**双写失同步收口**:① 状态行表与调参表数值列改指路存根(指向 `data/tables/status_effects.tres` 与 `registry/entities.yaml` status_effect mvp_content);② 调参表删除「现行值」列(敌人系统 v0.6 先例),仅保留 schema 模板与取值域;③ 与 `地图战斗资源.md` v0.7 / `registry/entities.yaml` 同批落地——五步收口一并兑现 |
|
| v0.7 | 2026-09-17 | **数值压缩批·文档同步(与 doc-conventions.md §5 数值纪律·强制收口条款同批)**:ambush 幅度 +3 flat → +1 flat(量纲未变、压缩倍数三阶下发,参见 `data/tables/status_effects.tres` 注释)。**双写失同步收口**:① 状态行表与调参表数值列改指路存根(指向 `data/tables/status_effects.tres` 与 `registry/entities.yaml` status_effect mvp_content);② 调参表删除「现行值」列(敌人系统 v0.6 先例),仅保留 schema 模板与取值域;③ 与 `地图战斗资源.md` v0.7 / `registry/entities.yaml` 同批落地——五步收口一并兑现 |
|
||||||
| v0.8 | 2026-09-17 | **数值纪律收口批:正文与调参表 knob 现行值改指路存根(事实源 `data/tables/*.tres` 与 registry),8 处失同步值修正**——幅度例"两层 +50% 合计 +100"改"2 × 单行幅度(读表)";削弱例"−130 个百分点"改"−(2 × weaken 行幅度)(读表)";护甲例"AC10 → AC12(期望减免 21.25% → 28.75%)"改"基准 AC(读 hero 表)+ 层数"、派生读数删除;状态行表"时限/合并"列 1 次/×2/×16/×1 字面量改读表措辞;defense_up 退役条目删"−30%"数值;"两行 duration = 2"改"duration 表值(读表)";empower"×2"幅度与调参表"AC10 → 11 → 12"、"2 次 = 1 个有效增益拍"同步指路化 |
|
| v0.8 | 2026-09-17 | **数值纪律收口批:正文与调参表 knob 现行值改指路存根(事实源 `data/tables/*.tres` 与 registry),8 处失同步值修正**——幅度例"两层 +50% 合计 +100"改"2 × 单行幅度(读表)";削弱例"−130 个百分点"改"−(2 × weaken 行幅度)(读表)";护甲例"AC10 → AC12(期望减免 21.25% → 28.75%)"改"基准 AC(读 hero 表)+ 层数"、派生读数删除;状态行表"时限/合并"列 1 次/×2/×16/×1 字面量改读表措辞;defense_up 退役条目删"−30%"数值;"两行 duration = 2"改"duration 表值(读表)";empower"×2"幅度与调参表"AC10 → 11 → 12"、"2 次 = 1 个有效增益拍"同步指路化 |
|
||||||
|
| v0.9 | 2026-09-18 | **战斗数值结构修复批(2026-09-18 盘问会话用户拍板,与战斗结算 / registry / 切片代码同批)**:三行语义改写(数值全部 provisional 归状态层重设计批)——① off_guard(失衡)换装 AC 轴:unit percent→ac、退出 hero_defense 池(effect_pool_map 删键,池清空结构保留),状态行表与调参表同步,"标错反噬三池"措辞改"三行";② fortify(硬化)符号纠正:旧正值入池实际 ×2 翻倍与"硬化=减伤"语义相反,改负值后主角攻击折半(正负号语义成文:负值 = 减伤方向);③ weaken(削弱)叠层改续时:stack→refresh、duration 表值 2——同名重复授予只刷新剩余次数、层数恒 1,×2 叠满池触底 ×0 的免伤轮结构性根治;消费侧例子表"削弱叠两层压地板"改"暴走叠两层封顶 ×2"(削弱叠层读法退役);"叠层不续命"对削弱不再适用,行动经济联动句随之失效;调参表一次性/叠层上限两行措辞同步 |
|
||||||
@@ -169,11 +169,11 @@ percent 类(每结算、每层): E = |层数 × 行值| ÷ 100 ×
|
|||||||
|
|
||||||
| 攻击类型 \ 护甲类型 | 轻甲 | 魔法护甲 | 重甲 | 语义 |
|
| 攻击类型 \ 护甲类型 | 轻甲 | 魔法护甲 | 重甲 | 语义 |
|
||||||
|---|---|---|---|---|
|
|---|---|---|---|---|
|
||||||
| 普通 | 中性档 | 中性档 | 中性档 | 基线分量缺省类型:只吃增益修正(基础分量类型可配——换为穿刺/魔法后即按对应行结算,掷点口径不变) |
|
| 普通 | 中性档 | 中性档 | 中性档 | 基线分量缺省类型:不吃克制倍率(基础分量类型可配——换为穿刺/魔法后即按对应行结算,掷点口径不变;增益修正走三分量合计乘区,不按分量区分) |
|
||||||
| 穿刺 | 中性档 | 克制档 | 被克档 | 穿透附魔护甲,破不开重甲 |
|
| 穿刺 | 中性档 | 克制档 | 被克档 | 穿透附魔护甲,破不开重甲 |
|
||||||
| 魔法 | 中性档 | 被克档 | 克制档 | 绕得过重甲,被魔法护甲吸收 |
|
| 魔法 | 中性档 | 被克档 | 克制档 | 绕得过重甲,被魔法护甲吸收 |
|
||||||
|
|
||||||
倍率只三档:克制 / 中性 / 被克(三档倍率读 `settlement.tres` 甲效矩阵)。攻击类型是分量的固有属性(每个分量恒属普通 / 穿刺 / 魔法 之一),护甲类型是防守单位的固有属性,两者都不随层数、来源与轮次漂移;基础分量的类型归属是主角表的可配置值(营地永久强化的换型落点),充能分量类型仍归充能定义。矩阵键集 3×3 满格、结构冻结,数值 provisional。主角增益只修正普通分量,两个充能分量不吃百分比修正。
|
倍率只三档:克制 / 中性 / 被克(三档倍率读 `settlement.tres` 甲效矩阵)。攻击类型是分量的固有属性(每个分量恒属普通 / 穿刺 / 魔法 之一),护甲类型是防守单位的固有属性,两者都不随层数、来源与轮次漂移;基础分量的类型归属是主角表的可配置值(营地永久强化的换型落点),充能分量类型仍归充能定义。矩阵键集 3×3 满格、结构冻结,数值 provisional。主角增益与乏力经 hero_offense 池修正三分量合计——两个充能分量同吃百分比修正(2026-09-18 结构修复批:普通分量直乘旁路退役,见池乘区公式行)。
|
||||||
|
|
||||||
普通分量由攻击力基线直接供给;穿刺与魔法分量由**充能**供给——充能是挖掘期攒下、按攻击类型分桶的附加伤害储备,本结算战斗段一次性消费、轮末清零,跨轮零存量。
|
普通分量由攻击力基线直接供给;穿刺与魔法分量由**充能**供给——充能是挖掘期攒下、按攻击类型分桶的附加伤害储备,本结算战斗段一次性消费、轮末清零,跨轮零存量。
|
||||||
|
|
||||||
@@ -194,8 +194,8 @@ EV 参考数不入正文(派生读数,需要时按判定式与现行表值
|
|||||||
|
|
||||||
```
|
```
|
||||||
敌方一次技能攻击 = max(damage_floor, floor( 掷点档位技能基础分量 + 伏击附加 ) × 主角防御乘数 × 敌方输出乘数 );伏击为后置加法,不进乘区、不掷不折
|
敌方一次技能攻击 = max(damage_floor, floor( 掷点档位技能基础分量 + 伏击附加 ) × 主角防御乘数 × 敌方输出乘数 );伏击为后置加法,不进乘区、不掷不折
|
||||||
主角一次攻击 = max(damage_floor, floor( Σ三分量 × (100 + 敌方防御乘数池合成值) ÷ 100 ) )——敌方防御池(硬化载体)乘在三分量合计之后
|
主角一次攻击 = max(damage_floor, floor( Σ三分量 × (100 + 主角输出乘数池合成值) ÷ 100 × (100 + 敌方防御乘数池合成值) ÷ 100 ) )——hero_offense(增伤/乏力载体)与 enemy_defense(硬化载体)两池串乘在三分量合计之后
|
||||||
乘数 = 1 + 池合成值 ÷ 100;池内加算、每池独立封顶 ±100 百分点 → 乘数域 [0, 2];四池对称:敌打主角 = hero_defense × enemy_output,主角打敌 = hero_offense × enemy_defense(切片现状注记:hero_offense 现行走普通分量增益直乘、未并入合计乘区——正式化随 ADR 批收口,见待办清单)
|
乘数 = 1 + 池合成值 ÷ 100;池内加算、每池独立封顶 ±100 百分点 → 乘数域 [0, 2];四池对称:敌打主角 = hero_defense × enemy_output,主角打敌 = hero_offense × enemy_defense(2026-09-18 结构修复批:hero_offense 乘区接线落地——attack_up 普通分量直乘旁路退役,旧"切片现状"注记销项)
|
||||||
护甲等级掷点:掷单骰(骰面读表),掷点 ≥ 护甲等级 + 攻击加成 → 全额;低掷按缺口查减伤档位表(边界与档值读表,无零档)
|
护甲等级掷点:掷单骰(骰面读表),掷点 ≥ 护甲等级 + 攻击加成 → 全额;低掷按缺口查减伤档位表(边界与档值读表,无零档)
|
||||||
暴击:天然最大面(读表)→ 该次基础攻击分量 ×暴击倍率(读表)且恒全额(双方同规;掷点层概念,与技能重击严格区分)
|
暴击:天然最大面(读表)→ 该次基础攻击分量 ×暴击倍率(读表)且恒全额(双方同规;掷点层概念,与技能重击严格区分)
|
||||||
伤害下限:任何攻击落地伤害 ≥ damage_floor(读表,全局 max(damage_floor, ·)——折扣与池归零都不产生 v=0 伤害行)
|
伤害下限:任何攻击落地伤害 ≥ damage_floor(读表,全局 max(damage_floor, ·)——折扣与池归零都不产生 v=0 伤害行)
|
||||||
@@ -347,3 +347,4 @@ EV 参考数不入正文(派生读数,需要时按判定式与现行表值
|
|||||||
| v0.11 | 2026-09-16 | **敌人技能池批(用户拍板,设计权威 docs/proposal-skill-pool.md v1.0——与敌人系统 / 增益状态 / 难度曲线与Boss / 战斗表现 / HUD框架 / registry / 切片代码同批)**:① 随机口径两处 → 三处——技能摇号 `behavior_roll` 封闭流(回合内、开轮时点、步骤流之外,每敌按生成序派生独立子流、单敌轨迹可独立复放)入册,可回放契约扩写为"三处皆封闭流,同种子同输入逐位复现";② 战斗段成文开轮摇号与敌方技能兑现(每轮恰摇一次、轮内刷新不重摇、摇定后兑现前死亡作废)、增益技 = 施放行 + 状态授予(0 伤害不掷不折不兑伏击);③ 三乘法链成文(技能倍率乘在最前:基线 × 倍率 → AC 掷点 → 甲效 → 既有链不动);④ AC 判定对象措辞四处改述("敌方攻击拍与重击拍基线" → "敌方技能基础伤害分量",含正文/公式行/边界表/验收标准);⑤ 敌方防御池入乘区(`enemy_defense` 新池——硬化载体):主角攻击 Σ三分量后 ×(100+enemy_defense)/100,四池对称成文(hero_offense 现行走普通分量直乘的切片现状登记待办);⑥ 行型改型:蓄力行 `charge` → 施放行 `cast`(10 类封闭不变);⑦ 呈现快照敌人数组字段定稿(当前拍/行动环进度 → 摇定动作三字段 + 敌方增益 effects);验收标准新增开轮摇号条目、战斗段次序与可回放条目改写;切片同批:`_roll_round_actions` 开轮编排、技能摇号器独立服务类、单位容器实例池/冷却/执行上报、settlement.tres effect_pool_map 增 empower/fortify、施放行格式化、摇定动画位 |
|
| v0.11 | 2026-09-16 | **敌人技能池批(用户拍板,设计权威 docs/proposal-skill-pool.md v1.0——与敌人系统 / 增益状态 / 难度曲线与Boss / 战斗表现 / HUD框架 / registry / 切片代码同批)**:① 随机口径两处 → 三处——技能摇号 `behavior_roll` 封闭流(回合内、开轮时点、步骤流之外,每敌按生成序派生独立子流、单敌轨迹可独立复放)入册,可回放契约扩写为"三处皆封闭流,同种子同输入逐位复现";② 战斗段成文开轮摇号与敌方技能兑现(每轮恰摇一次、轮内刷新不重摇、摇定后兑现前死亡作废)、增益技 = 施放行 + 状态授予(0 伤害不掷不折不兑伏击);③ 三乘法链成文(技能倍率乘在最前:基线 × 倍率 → AC 掷点 → 甲效 → 既有链不动);④ AC 判定对象措辞四处改述("敌方攻击拍与重击拍基线" → "敌方技能基础伤害分量",含正文/公式行/边界表/验收标准);⑤ 敌方防御池入乘区(`enemy_defense` 新池——硬化载体):主角攻击 Σ三分量后 ×(100+enemy_defense)/100,四池对称成文(hero_offense 现行走普通分量直乘的切片现状登记待办);⑥ 行型改型:蓄力行 `charge` → 施放行 `cast`(10 类封闭不变);⑦ 呈现快照敌人数组字段定稿(当前拍/行动环进度 → 摇定动作三字段 + 敌方增益 effects);验收标准新增开轮摇号条目、战斗段次序与可回放条目改写;切片同批:`_roll_round_actions` 开轮编排、技能摇号器独立服务类、单位容器实例池/冷却/执行上报、settlement.tres effect_pool_map 增 empower/fortify、施放行格式化、摇定动画位 |
|
||||||
| v0.13 | 2026-09-18 | **营地扩展前置批·主角双轴可配置(用户指令,与敌人系统 / registry / 切片代码同批)**:① hero 表新增 armor_type({light, ward, heavy},缺省 light)——主角护甲类型轴可配置可修改,消费面 = 甲效矩阵(现行敌方攻击恒 normal 档 = 数值中性的结构位,轴生效待敌方技能攻击类型批);② hero 表新增 attack_type({normal, pierce, magic},缺省 normal)——**基础攻击量与攻击类型抽象分离**:基础分量类型不再硬编码普通、改读主角表值,营地永久强化"换成魔法/穿刺攻击"= 改字段,atk 量轴与掷点口径零改动;③ 同桶充能照加语义成文(基础分量与充能同型时,充能分量保持不掷不折);正文三分量表述、甲效矩阵"普通"行注记、分量固有属性措辞三处同步 |
|
| v0.13 | 2026-09-18 | **营地扩展前置批·主角双轴可配置(用户指令,与敌人系统 / registry / 切片代码同批)**:① hero 表新增 armor_type({light, ward, heavy},缺省 light)——主角护甲类型轴可配置可修改,消费面 = 甲效矩阵(现行敌方攻击恒 normal 档 = 数值中性的结构位,轴生效待敌方技能攻击类型批);② hero 表新增 attack_type({normal, pierce, magic},缺省 normal)——**基础攻击量与攻击类型抽象分离**:基础分量类型不再硬编码普通、改读主角表值,营地永久强化"换成魔法/穿刺攻击"= 改字段,atk 量轴与掷点口径零改动;③ 同桶充能照加语义成文(基础分量与充能同型时,充能分量保持不掷不折);正文三分量表述、甲效矩阵"普通"行注记、分量固有属性措辞三处同步 |
|
||||||
| v0.12 | 2026-09-17 | **数值纪律收口批:正文与调参表 knob 现行值改指路存根(事实源 `data/tables/*.tres` 与 registry),20 余处失同步值修正**——收益对照表参考敞口 12 / 完美乘数 200 改指路 settlement.tres(equivalence_ref_damage / p_perfect);伏击加层"+2 层"改"+stacks 层(读 reward.tres ambush_double 行)";充能供给表与 charge_grants 行"每格 1 / 上限 8 / 每雷 2"改 per_unit/cap 读表;三乘法链与甲效矩阵 1.5/1.0/0.5、150/100/50 改三档读表;掷点判定 1d20 / nat20 ×2 / 缺口档 ×0.75/×0.5/×0.25 / 边界 [3,7] / 档位 [75,50,25] / damage_floor=1 / AC 10·0 / ac_up +1×2 层全部改指路 settlement.tres·status_effects.tres·hero/enemy 表;EV 参考数(AC10 21.25% 等)与"旧 defense_up 满层 −60%"删除(派生读数 / 退役值,版本历史可查);调参表与验收标准同步 |
|
| v0.12 | 2026-09-17 | **数值纪律收口批:正文与调参表 knob 现行值改指路存根(事实源 `data/tables/*.tres` 与 registry),20 余处失同步值修正**——收益对照表参考敞口 12 / 完美乘数 200 改指路 settlement.tres(equivalence_ref_damage / p_perfect);伏击加层"+2 层"改"+stacks 层(读 reward.tres ambush_double 行)";充能供给表与 charge_grants 行"每格 1 / 上限 8 / 每雷 2"改 per_unit/cap 读表;三乘法链与甲效矩阵 1.5/1.0/0.5、150/100/50 改三档读表;掷点判定 1d20 / nat20 ×2 / 缺口档 ×0.75/×0.5/×0.25 / 边界 [3,7] / 档位 [75,50,25] / damage_floor=1 / AC 10·0 / ac_up +1×2 层全部改指路 settlement.tres·status_effects.tres·hero/enemy 表;EV 参考数(AC10 21.25% 等)与"旧 defense_up 满层 −60%"删除(派生读数 / 退役值,版本历史可查);调参表与验收标准同步 |
|
||||||
|
| v0.14 | 2026-09-18 | **战斗数值结构修复批(2026-09-18 盘问会话用户拍板,与增益状态 / registry / 切片代码同批)**:① 主角侧乘区接线——hero_offense 池入主角攻击乘区:Σ三分量后 ×(100+hero_offense)/100 ×(100+enemy_defense)/100 两池串乘,增伤/乏力覆盖面 = 普通+穿刺+魔法 合计;attack_up 普通分量直乘旁路退役(正文甲效矩阵"普通"行注记、池乘区公式行、v0.11 切片现状注记三处同步销项);② off_guard(失衡)换装 AC 轴——unit percent→ac(幅度 provisional 归状态层重设计批),effect_pool_map 删 off_guard 键,hero_defense 池清空、结构保留,消费走既有掷点判定读法零改动;③ fortify(硬化)符号纠正——旧 +100 入敌方防御池实际 ×2 翻倍与"硬化=减伤"语义相反,改负值(读表)后主角攻击折半;④ weaken(削弱)叠层改续时——同名重复授予只刷新剩余结算数、层数恒 1,×2 叠满池触底 ×0 的免伤轮结构性根治(消饱和);duration 终值、off_guard 幅度、当量锚复算全部归状态层重设计批。切片同批:battle_orchestrator 池接线与直乘删除、status_effects.tres 三行、settlement.tres 删键、冒烟护栏(削弱续时 / 乘区接线 ×1.5·×0.75 / 硬化折半方向三组新断言,旧"削弱×2 池触底"采样通道随批退役) |
|
||||||
@@ -119,7 +119,7 @@ entities:
|
|||||||
display_name: String
|
display_name: String
|
||||||
target_side: enum {hero, enemy}
|
target_side: enum {hero, enemy}
|
||||||
magnitude: int——percent ∈ [-100,100] ∧ ≠0 | flat ≥ 1(跨字段校验)
|
magnitude: int——percent ∈ [-100,100] ∧ ≠0 | flat ≥ 1(跨字段校验)
|
||||||
unit: enum {percent, flat}
|
unit: enum {percent, flat, ac}(**2026-09-18 结构修复批补登 ac 量纲枚举——2026-09-16 护甲等级掷点批换装时的 fields 漏登,随本批顺手收口**;ac_up 2026-09-16、off_guard 2026-09-18 两行在用)
|
||||||
duration_settlements: int [1,99]
|
duration_settlements: int [1,99]
|
||||||
stack_policy: enum {stack, refresh, independent}
|
stack_policy: enum {stack, refresh, independent}
|
||||||
max_stack: int [1,16](仅 stack 消费——refresh/independent 行内容约定恒 1,非校验项)
|
max_stack: int [1,16](仅 stack 消费——refresh/independent 行内容约定恒 1,非校验项)
|
||||||
@@ -127,13 +127,13 @@ entities:
|
|||||||
attack_up: { display_name: 增伤, target_side: hero, unit: percent, duration_settlements: 1, max_stack: 2, stack_policy: stack, source_class: safe_cell, magnitude_ref: data/tables/status_effects.tres } # 2026-09-17 数值压缩批·文档同步:magnitude 从现行值列改指路存根(数值事实源 = data/tables/status_effects.tres);schema 字段保留以承载元数据
|
attack_up: { display_name: 增伤, target_side: hero, unit: percent, duration_settlements: 1, max_stack: 2, stack_policy: stack, source_class: safe_cell, magnitude_ref: data/tables/status_effects.tres } # 2026-09-17 数值压缩批·文档同步:magnitude 从现行值列改指路存根(数值事实源 = data/tables/status_effects.tres);schema 字段保留以承载元数据
|
||||||
ac_up: { display_name: 护甲强化, target_side: hero, unit: ac, duration_settlements: 1, max_stack: 2, stack_policy: stack, source_class: safe_cell, magnitude_ref: data/tables/status_effects.tres } # 2026-09-16 护甲等级掷点批换装(原 defense_up 减伤 −30 percent ×2 层整行退役、无双轨——unit=ac 新量纲〔护甲等级阈值轴 [−20,20] 且非 0〕,不入 effect_pool_map 任何池,消费面 = 战斗结算掷点判定);2026-09-17 数值压缩批:magnitude 改指路存根
|
ac_up: { display_name: 护甲强化, target_side: hero, unit: ac, duration_settlements: 1, max_stack: 2, stack_policy: stack, source_class: safe_cell, magnitude_ref: data/tables/status_effects.tres } # 2026-09-16 护甲等级掷点批换装(原 defense_up 减伤 −30 percent ×2 层整行退役、无双轨——unit=ac 新量纲〔护甲等级阈值轴 [−20,20] 且非 0〕,不入 effect_pool_map 任何池,消费面 = 战斗结算掷点判定);2026-09-17 数值压缩批:magnitude 改指路存根
|
||||||
ambush: { display_name: 伏击(敌方增益), target_side: enemy, unit: flat, duration_settlements: 1, max_stack: 16, stack_policy: stack, source_class: mine_hit, magnitude_ref: data/tables/status_effects.tres } # 2026-09-17 数值压缩批:magnitude +3 → +1 flat(量纲未变,参见 status_effects.tres ambush_unit_definition)
|
ambush: { display_name: 伏击(敌方增益), target_side: enemy, unit: flat, duration_settlements: 1, max_stack: 16, stack_policy: stack, source_class: mine_hit, magnitude_ref: data/tables/status_effects.tres } # 2026-09-17 数值压缩批:magnitude +3 → +1 flat(量纲未变,参见 status_effects.tres ambush_unit_definition)
|
||||||
weaken: { display_name: 削弱(标中旗 debuff), target_side: enemy, unit: percent, duration_settlements: 1, max_stack: 16, stack_policy: stack, source_class: flag_hit, magnitude_ref: data/tables/status_effects.tres } # 2026-09-17 数值压缩批:magnitude 改指路存根
|
weaken: { display_name: 削弱(标中旗 debuff), target_side: enemy, unit: percent, duration_settlements: 2, max_stack: 16, stack_policy: refresh, source_class: flag_hit, magnitude_ref: data/tables/status_effects.tres } # 2026-09-17 数值压缩批:magnitude 改指路存根;**2026-09-18 结构修复批:叠层改续时——stack→refresh · duration 1→2**〔同名重复授予只刷新剩余结算数、层数恒 1——结构性消饱和,×2 叠满池触底 ×0 免伤轮根治;表值上限 16 在续时语义下不消费;duration 终值 provisional 归 状态层重设计批〕
|
||||||
enrage: { display_name: 暴走(敌方增伤), target_side: enemy, unit: percent, duration_settlements: 1, max_stack: 16, stack_policy: stack, source_class: flag_miss, magnitude_ref: data/tables/status_effects.tres } # 2026-09-12 标错反噬批上线——三池之一(进 enemy_output 池);2026-09-17 数值压缩批:magnitude 改指路存根
|
enrage: { display_name: 暴走(敌方增伤), target_side: enemy, unit: percent, duration_settlements: 1, max_stack: 16, stack_policy: stack, source_class: flag_miss, magnitude_ref: data/tables/status_effects.tres } # 2026-09-12 标错反噬批上线——三池之一(进 enemy_output 池);2026-09-17 数值压缩批:magnitude 改指路存根
|
||||||
off_guard: { display_name: 失衡(我方承伤加深), target_side: hero, unit: percent, duration_settlements: 1, max_stack: 16, stack_policy: stack, source_class: flag_miss, magnitude_ref: data/tables/status_effects.tres } # 2026-09-12 标错反噬批上线——三池之一(进 hero_defense 池);2026-09-15 格面资源批起 = defense 型负向;2026-09-17 数值压缩批:magnitude 改指路存根
|
off_guard: { display_name: 失衡(我方护甲等级降低), target_side: hero, unit: ac, duration_settlements: 1, max_stack: 16, stack_policy: stack, source_class: flag_miss, magnitude_ref: data/tables/status_effects.tres } # 2026-09-12 标错反噬批上线——三池之一(原进 hero_defense 池);2026-09-15 格面资源批起 = defense 型负向;2026-09-17 数值压缩批:magnitude 改指路存根;**2026-09-18 结构修复批:换装 AC 轴——unit percent→ac · magnitude +25→−2**〔掷点判定阈值逐层下调、不入池,effect_pool_map 删 off_guard 键同批;幅度 provisional 归 状态层重设计批〕
|
||||||
sapped: { display_name: 乏力(我方输出降低), target_side: hero, unit: percent, duration_settlements: 1, max_stack: 16, stack_policy: stack, source_class: flag_miss, magnitude_ref: data/tables/status_effects.tres } # 2026-09-15 格面资源批新增——weaken 型负向,进 hero_offense 池;2026-09-17 数值压缩批:magnitude 改指路存根
|
sapped: { display_name: 乏力(我方输出降低), target_side: hero, unit: percent, duration_settlements: 1, max_stack: 16, stack_policy: stack, source_class: flag_miss, magnitude_ref: data/tables/status_effects.tres } # 2026-09-15 格面资源批新增——weaken 型负向,进 hero_offense 池;2026-09-17 数值压缩批:magnitude 改指路存根
|
||||||
empower: { display_name: 蓄力(敌方输出 ×2), target_side: enemy, unit: percent, duration_settlements: 2, max_stack: 1, stack_policy: refresh, source_class: enemy_action, magnitude_ref: data/tables/status_effects.tres } # 2026-09-16 敌人技能池批新增——蓄力技载体,进 enemy_output 池;duration 2 = 1 个有效增益拍;2026-09-17 数值压缩批:magnitude 改指路存根
|
empower: { display_name: 蓄力(敌方输出 ×2), target_side: enemy, unit: percent, duration_settlements: 2, max_stack: 1, stack_policy: refresh, source_class: enemy_action, magnitude_ref: data/tables/status_effects.tres } # 2026-09-16 敌人技能池批新增——蓄力技载体,进 enemy_output 池;duration 2 = 1 个有效增益拍;2026-09-17 数值压缩批:magnitude 改指路存根
|
||||||
fortify: { display_name: 硬化(敌方防御 +100), target_side: enemy, unit: percent, duration_settlements: 2, max_stack: 1, stack_policy: refresh, source_class: enemy_action, magnitude_ref: data/tables/status_effects.tres } # 2026-09-16 敌人技能池批新增——硬化技载体(Boss 池独占),进 enemy_defense 新池;2026-09-17 数值压缩批:magnitude 改指路存根
|
fortify: { display_name: 硬化(敌方防御 −50), target_side: enemy, unit: percent, duration_settlements: 2, max_stack: 1, stack_policy: refresh, source_class: enemy_action, magnitude_ref: data/tables/status_effects.tres } # 2026-09-16 敌人技能池批新增——硬化技载体(Boss 池独占),进 enemy_defense 新池;2026-09-17 数值压缩批:magnitude 改指路存根;**2026-09-18 结构修复批:符号纠正 +100→−50**〔负值入池 = 主角攻击 ×0.5 折半;旧 +100 实际 ×2 翻倍与"硬化=减伤"语义相反,用户确认系符号 bug〕
|
||||||
value_status: 九行值全部 provisional;**2026-09-17 数值压缩批·文档同步——mvp_content 数值列改指路存根(magnitude_ref 指向 data/tables/status_effects.tres)**,schema 字段(unit / duration_settlements / max_stack / stack_policy / source_class)保留以承载元数据;行值历史轨迹:六行→七行(格面资源批 sapped 收编为 weaken 型负向;2026-09-16 护甲等级掷点批:defense_up 行退役换装 ac_up〔行数不变、一行换装〕);七行→九行(2026-09-16 敌人技能池批:empower + fortify 收编);**2026-09-17 数值压缩批:ambush magnitude +3 → +1 flat(量纲未变——见 ambush_unit_definition)**。验收锚:weaken→行动经济 F1 条款 2(地图战斗资源/战斗结算)· ambush 量纲→敌人系统(条款 3,量纲已定稿见 ambush_unit_definition)· 对照表→战斗结算(条款 1)· weaken 已按 战斗结算 F0 裁决修订 −25→−65(2026-09-10,值域 [60,85]、终值共裁 战斗结算 OQ2——见 anchor_warning 回执)
|
value_status: 九行值全部 provisional;**2026-09-17 数值压缩批·文档同步——mvp_content 数值列改指路存根(magnitude_ref 指向 data/tables/status_effects.tres)**,schema 字段(unit / duration_settlements / max_stack / stack_policy / source_class)保留以承载元数据;行值历史轨迹:六行→七行(格面资源批 sapped 收编为 weaken 型负向;2026-09-16 护甲等级掷点批:defense_up 行退役换装 ac_up〔行数不变、一行换装〕);七行→九行(2026-09-16 敌人技能池批:empower + fortify 收编);**2026-09-17 数值压缩批:ambush magnitude +3 → +1 flat(量纲未变——见 ambush_unit_definition)**;**2026-09-18 结构修复批:三行结构值改写(数值仍 provisional 归 状态层重设计批)**——off_guard unit percent→ac · fortify magnitude +100→−50 · weaken stack→refresh × duration 1→2(语义与批注见各行)。验收锚:weaken→行动经济 F1 条款 2(地图战斗资源/战斗结算)· ambush 量纲→敌人系统(条款 3,量纲已定稿见 ambush_unit_definition)· 对照表→战斗结算(条款 1)· weaken 已按 战斗结算 F0 裁决修订 −25→−65(2026-09-10,值域 [60,85]、终值共裁 战斗结算 OQ2——见 anchor_warning 回执)
|
||||||
ambush_unit_definition: **量纲已定稿(2026-09-09 敌人系统 GDD Rule 6/F2——registry OQ2 关闭条件兑现)**:每层伏击 = 每次攻击类行为(attack/heavy)附加 magnitude 主角 HP 伤害(后置加法、不进倍乘);charge 拍零兑付(空拍蒸发);**2026-09-17 数值压缩批——magnitude +3 → +1,量纲未变**;值仍 provisional(锚验收归 地图战斗资源/战斗结算——行动经济 F1 条款 3;敌人系统 供给 cap 表值与单结算自然边界口径见 clause3_supply 条目)
|
ambush_unit_definition: **量纲已定稿(2026-09-09 敌人系统 GDD Rule 6/F2——registry OQ2 关闭条件兑现)**:每层伏击 = 每次攻击类行为(attack/heavy)附加 magnitude 主角 HP 伤害(后置加法、不进倍乘);charge 拍零兑付(空拍蒸发);**2026-09-17 数值压缩批——magnitude +3 → +1,量纲未变**;值仍 provisional(锚验收归 地图战斗资源/战斗结算——行动经济 F1 条款 3;敌人系统 供给 cap 表值与单结算自然边界口径见 clause3_supply 条目)
|
||||||
anchor_warning: weaken 行 vs 行动经济 F1 条款 2 锚两独立线性代理同向预检不过(百分点·结算暴露 25 vs 100;原型战斗量级 ≈1 vs ≈4 当量)——战斗结算 对照验收优先裁决,登记 战斗结算 强制检查点输入。**修复空间不对称(2026-09-09 增补)**:每结算瞬时当量归一 m_w≥51 可行(F2 越域界随移 AP 界 −408%/表界 −816%);每 AP 总暴露归一 m_w>100 被 percent ∈ [-100,100] 域禁止(该分支不可行)——OQ1 前置步骤:战斗结算 先钉死归一口径,口径落定前禁止数值修订;落总暴露则现实解 = 地图战斗资源 重定最低档参照。**参照对象迁移注记(2026-09-09 地图战斗资源 评审;2026-09-11 回迁)**:最低档安全格 buff 当量的参照对象曾迁 defense_up 当量(attack_up 时为死行——地图战斗资源 F4 迁移)——**2026-09-11 用户裁决"基础攻击恒存在"(HeroTable.atk 域 [1,999]、0 加载拒绝、MVP=6)后 attack_up 复活,参照对象回迁 attack_up 当量**(消费面 = 主角战斗段先手攻击——战斗结算 GDD 同批;defense_up 迁移退役为历史记录,attack_up 入池时 tier_min_buff 重算);本条与 clause3_supply.direction_precheck 的 25 vs 100 预检算术系 attack_up 口径历史登记——defense_up |−50|×dur2 与 attack_up 数值巧合全等(100pp),今日结论不变;**迁移后预检未按新参照重跑**的义务已于 2026-09-14 战斗结算 重算批兑现(F0/F1 按 attack_up 当量重跑 + F1 锚对照实物改 attack_up 行——本迁移注记关闭)。**F0 裁决回执(2026-09-10 战斗结算 GDD——红警关闭)**:归一口径 = **每结算瞬时当量**(总暴露分支被 percent schema 域禁止 + 与"单结算自然边界"已锁事实冲突,排除);m_w 修订 −25 → **值域 [60,85]/默认 −65**(mvp_content.weaken 已同批改写——锚两腿 @D_ref=12:7.8 > 6.0 严格大于 ✓ / 7.8 ≥ E_dig 4.5 ✓〔E_dig 读数 2026-09-14 战斗结算 重算批按 难度曲线与Boss v3 曲线重推——原 7.2 随口径退役〕);地板 = 乘数零点 −100pp、交叉层数 = ⌈100/m_w⌉ = 2(原"7 层触地板"预读按 −400% 合成带估读,更正);defense_up 参照保持(总暴露分支的"重定参照"现实解未采纳);终值 = 地图战斗资源/战斗结算 共裁(战斗结算 OQ2);增益状态 GDD 正文不改以本条为准(收编先例)
|
anchor_warning: weaken 行 vs 行动经济 F1 条款 2 锚两独立线性代理同向预检不过(百分点·结算暴露 25 vs 100;原型战斗量级 ≈1 vs ≈4 当量)——战斗结算 对照验收优先裁决,登记 战斗结算 强制检查点输入。**修复空间不对称(2026-09-09 增补)**:每结算瞬时当量归一 m_w≥51 可行(F2 越域界随移 AP 界 −408%/表界 −816%);每 AP 总暴露归一 m_w>100 被 percent ∈ [-100,100] 域禁止(该分支不可行)——OQ1 前置步骤:战斗结算 先钉死归一口径,口径落定前禁止数值修订;落总暴露则现实解 = 地图战斗资源 重定最低档参照。**参照对象迁移注记(2026-09-09 地图战斗资源 评审;2026-09-11 回迁)**:最低档安全格 buff 当量的参照对象曾迁 defense_up 当量(attack_up 时为死行——地图战斗资源 F4 迁移)——**2026-09-11 用户裁决"基础攻击恒存在"(HeroTable.atk 域 [1,999]、0 加载拒绝、MVP=6)后 attack_up 复活,参照对象回迁 attack_up 当量**(消费面 = 主角战斗段先手攻击——战斗结算 GDD 同批;defense_up 迁移退役为历史记录,attack_up 入池时 tier_min_buff 重算);本条与 clause3_supply.direction_precheck 的 25 vs 100 预检算术系 attack_up 口径历史登记——defense_up |−50|×dur2 与 attack_up 数值巧合全等(100pp),今日结论不变;**迁移后预检未按新参照重跑**的义务已于 2026-09-14 战斗结算 重算批兑现(F0/F1 按 attack_up 当量重跑 + F1 锚对照实物改 attack_up 行——本迁移注记关闭)。**F0 裁决回执(2026-09-10 战斗结算 GDD——红警关闭)**:归一口径 = **每结算瞬时当量**(总暴露分支被 percent schema 域禁止 + 与"单结算自然边界"已锁事实冲突,排除);m_w 修订 −25 → **值域 [60,85]/默认 −65**(mvp_content.weaken 已同批改写——锚两腿 @D_ref=12:7.8 > 6.0 严格大于 ✓ / 7.8 ≥ E_dig 4.5 ✓〔E_dig 读数 2026-09-14 战斗结算 重算批按 难度曲线与Boss v3 曲线重推——原 7.2 随口径退役〕);地板 = 乘数零点 −100pp、交叉层数 = ⌈100/m_w⌉ = 2(原"7 层触地板"预读按 −400% 合成带估读,更正);defense_up 参照保持(总暴露分支的"重定参照"现实解未采纳);终值 = 地图战斗资源/战斗结算 共裁(战斗结算 OQ2);增益状态 GDD 正文不改以本条为准(收编先例)
|
||||||
rule4_exemption: 定义表非进度成长表,键 = effect_id(数据配置 Rule 4 豁免,schema 注释承载)
|
rule4_exemption: 定义表非进度成长表,键 = effect_id(数据配置 Rule 4 豁免,schema 注释承载)
|
||||||
@@ -344,7 +344,7 @@ entities:
|
|||||||
p_perfect: int {100,200} percent(knob,默认 200 provisional——完美排雷清图奖励**第二份兑付触发**;2026-09-10 战斗结算 评审批修订:真实双份交付载体〔Core Rule 13#2〕——100 = 仅高光、200 = 双份交付,非整数倍数乘数无运行时载体、域外加载致命;上界受护栏 B 约束〔双读数:D_ref 口径 24 / DPS 严格读数 ≈8,裁决归 难度曲线与Boss〕)
|
p_perfect: int {100,200} percent(knob,默认 200 provisional——完美排雷清图奖励**第二份兑付触发**;2026-09-10 战斗结算 评审批修订:真实双份交付载体〔Core Rule 13#2〕——100 = 仅高光、200 = 双份交付,非整数倍数乘数无运行时载体、域外加载致命;上界受护栏 B 约束〔双读数:D_ref 口径 24 / DPS 严格读数 ≈8,裁决归 难度曲线与Boss〕)
|
||||||
segment_order: StringList(结构冻结——段序骨架 [grant, buff_debuff, combat, decay, verdict];加载期恒等拍板序校验违例致命,防实现乱序静默漂移;2026-09-15 格面资源批五段——item_window/item 两段随可选类删除下线,旧七段序见底部修订记录)
|
segment_order: StringList(结构冻结——段序骨架 [grant, buff_debuff, combat, decay, verdict];加载期恒等拍板序校验违例致命,防实现乱序静默漂移;2026-09-15 格面资源批五段——item_window/item 两段随可选类删除下线,旧七段序见底部修订记录)
|
||||||
source_label_map: Dictionary source_class→文案键(结构冻结——P2 归因呈现映射;键集 = 增益状态 source_class ∪ {判定扩展, enemy_action, flag_miss}——2026-09-10 战斗结算 评审批修订;2026-09-15 格面资源批删"道具"扩展键;新增键 = 接口漂移)
|
source_label_map: Dictionary source_class→文案键(结构冻结——P2 归因呈现映射;键集 = 增益状态 source_class ∪ {判定扩展, enemy_action, flag_miss}——2026-09-10 战斗结算 评审批修订;2026-09-15 格面资源批删"道具"扩展键;新增键 = 接口漂移)
|
||||||
effect_pool_map: Dictionary effect_id→pool {hero_offense|hero_defense|enemy_output|enemy_defense|flat_attach}(结构冻结——F2 效果语义映射,增益状态 Rule 7 载体;键 ⊆ StatusEffectTable 活行集、悬空加载期致命;新 effect_id 上线须随批登记——2026-09-15 格面资源批随 sapped 行收编登记:sapped → hero_offense;**2026-09-16 护甲等级掷点批:删 defense_up → hero_defense 键**〔减伤百分比行退役,hero_defense 池现仅 off_guard 正向行〕;ac_up 为 AC 阈值轴效果、不入任何池;**2026-09-16 敌人技能池批:增 empower → enemy_output · fortify → enemy_defense**〔敌方防御池新词汇——硬化载体,消费面 = 主角攻击 Σ三分量后 ×(100+clamp(enemy_defense))/100,四池对称:敌打主角 = hero_defense × enemy_output、主角打敌 = hero_offense × enemy_defense;切片现状注记:hero_offense 现行走普通分量 attack_up 直乘、未并入合计乘区,正式化归 ADR 批〕)
|
effect_pool_map: Dictionary effect_id→pool {hero_offense|hero_defense|enemy_output|enemy_defense|flat_attach}(结构冻结——F2 效果语义映射,增益状态 Rule 7 载体;键 ⊆ StatusEffectTable 活行集、悬空加载期致命;新 effect_id 上线须随批登记——2026-09-15 格面资源批随 sapped 行收编登记:sapped → hero_offense;**2026-09-16 护甲等级掷点批:删 defense_up → hero_defense 键**〔减伤百分比行退役,hero_defense 池现仅 off_guard 正向行〕;ac_up 为 AC 阈值轴效果、不入任何池;**2026-09-16 敌人技能池批:增 empower → enemy_output · fortify → enemy_defense**〔敌方防御池新词汇——硬化载体,消费面 = 主角攻击 Σ三分量后 ×(100+clamp(enemy_defense))/100,四池对称:敌打主角 = hero_defense × enemy_output、主角打敌 = hero_offense × enemy_defense;切片现状注记:hero_offense 现行走普通分量 attack_up 直乘、未并入合计乘区,正式化归 ADR 批〕;**2026-09-18 结构修复批:删 off_guard → hero_defense 键**〔off_guard 换装 AC 轴不入池——hero_defense 池清空、池结构保留;hero_offense 乘区接线同步落地:主角攻击 Σ三分量后 ×(100+clamp(hero_offense))/100 ×(100+clamp(enemy_defense))/100 两池串乘,attack_up 普通分量直乘旁路退役——上方"切片现状注记"销项〕)
|
||||||
pool_clamp_lo: int pp(结构冻结 −100——percent 池地板域下界,乘数域随之 [0,2];2026-09-10 统一八字段口径)
|
pool_clamp_lo: int pp(结构冻结 −100——percent 池地板域下界,乘数域随之 [0,2];2026-09-10 统一八字段口径)
|
||||||
pool_clamp_hi: int pp(结构冻结 +100——percent 池地板域上界;原"七字段 pool_clamp_lo_hi"措辞作废,数据配置 GDD 行按收编先例以本条为准)
|
pool_clamp_hi: int pp(结构冻结 +100——percent 池地板域上界;原"七字段 pool_clamp_lo_hi"措辞作废,数据配置 GDD 行按收编先例以本条为准)
|
||||||
round_direction: enum {floor}(结构冻结——单一取整规则)
|
round_direction: enum {floor}(结构冻结——单一取整规则)
|
||||||
@@ -751,3 +751,14 @@ entities:
|
|||||||
# ④ 06 清单收口:元进度六条(换算率启用形态/三方向清单定价/钥石重复获取/天赋树去留/注入口径/界面交互
|
# ④ 06 清单收口:元进度六条(换算率启用形态/三方向清单定价/钥石重复获取/天赋树去留/注入口径/界面交互
|
||||||
# 全部已裁决或部分收口)+ 数据配置「元进度表键结构未定」已解决 + 难度曲线「基线通关率越带」现状校正;
|
# 全部已裁决或部分收口)+ 数据配置「元进度表键结构未定」已解决 + 难度曲线「基线通关率越带」现状校正;
|
||||||
# 剩余面 = 三柜台铺量与定价数字、Boss 两档产出数值、换算率三行折算数值(归元进度设计批配读数)。
|
# 剩余面 = 三柜台铺量与定价数字、Boss 两档产出数值、换算率三行折算数值(归元进度设计批配读数)。
|
||||||
|
# 2026-09-18 战斗数值结构修复批(2026-09-18 战斗数值盘问会话用户拍板;与 战斗结算 v0.14 / 增益状态 v0.9 /
|
||||||
|
# 地图战斗资源 v0.11 / 06-待办清单 / 切片代码同批;数值全部临时值 provisional 归 状态层重设计批):
|
||||||
|
# ① status_effect 三行——off_guard 换装 AC 轴(unit percent→ac · magnitude +25→−2 · display_name
|
||||||
|
# 改"我方护甲等级降低");fortify 符号纠正(+100→−50——负值入 enemy_defense 池 = 主角攻击折半,
|
||||||
|
# 旧正值实际 ×2 翻倍系符号 bug);weaken 叠层改续时(stack→refresh · duration 1→2——同名重复授予
|
||||||
|
# 只刷新剩余结算数、层数恒 1,结构性消饱和);
|
||||||
|
# ② settlement_table.effect_pool_map 删 off_guard → hero_defense 键(hero_defense 池清空、结构保留);
|
||||||
|
# ③ 顺手收口 fields 漏登(2026-09-16 换装批遗留):unit 枚举补 ac 量纲;
|
||||||
|
# ④ 切片代码同批:battle_orchestrator.gd 主角攻击段 hero_offense 池接线(pool_damage 首参 0 →
|
||||||
|
# _clamped_pool("hero_offense"))+ attack_up 普通分量直乘旁路退役(增伤/乏力覆盖面 = 三份分量合计);
|
||||||
|
# 冒烟护栏三组新断言(削弱续时 / 乘区接线 ×1.5·×0.75 / 硬化折半方向),旧"削弱×2 池触底"采样通道退役。
|
||||||
@@ -12,13 +12,13 @@
|
|||||||
|
|
||||||
## 当前状态快照(收口批先更新本节,再追加台账;≤10 行)
|
## 当前状态快照(收口批先更新本节,再追加台账;≤10 行)
|
||||||
|
|
||||||
- **更新于**:2026-09-18(场景讨论收口批——措辞收口+数值对齐+场景一/三拍板落地提交 0da19a5)
|
- **更新于**:2026-09-18(战斗数值结构修复批——乘区接线四件套+削弱续时,场景四盘问裁决全部落地,未提交)
|
||||||
- **在飞**:场景四战斗数值 grill(**另一会话进行中**——sapped 死效果/单弱敌跳过战斗/免伤轮三选/敌方 AC 行值;完美档加难未见结论);表现层升级批未启动(前置 = 美术清单 P0 样张 + 用户看图拍板敌人卡形态)
|
- **在飞**:表现层升级批未启动(前置 = 美术清单 P0 样张 + 用户看图拍板敌人卡形态);两份美术清单合并待拍板
|
||||||
- **已完成**:本会话 0da19a5(①registry 指路化收口 ②刷新临时名全链退役 ③五区残留清零 ④schema 默认值+字号+RAP 表值驱动 ⑤意图徽标三档占位 ⑥R1 解析口径 ceil/封顶/Fatal ⑦tune 探针表值驱动修复 ⑧06 四条目+美术资源依赖清单);并行会话四笔在先(a2fc39f 伤害道具+护甲重配+营地前置 / cdc226e 数值纪律收口 / 3fb6bd2 审计修复 / c5c52b5 元进度定稿)
|
- **已完成**:本会话战斗数值结构修复批(①hero_offense 乘区接线 ②attack_up 直乘旁路退役 ③off_guard 换装 AC 轴+删 hero_defense 池键 ④fortify +100→−50 符号纠正 ⑤weaken 改续时 refresh·dur 2 ⑥全同步面 GDD×4+registry+冒烟;冒烟 296→300 全绿+四探针 PASS;sapped 随接线变活、免伤轮结构性根治);此前 0da19a5/b7d1b56 两笔
|
||||||
- **已解锁可做**:验收读数重测批(AC 判读口径已定稿、tune 探针已修复);两份美术清单(art-assets-checklist / asset-checklist)重复待合并拍板
|
- **已解锁可做**:验收读数重测批(本批数值行为再变——AC 判读基线又一次归零,须重测);敌方技能攻击类型轴(克制双向化,中等批)
|
||||||
- **阻塞等待**:曲线调参批(门 = 验收读数);sapped 等数值修复小批(门 = 场景四裁决回流,避免撞文件)
|
- **阻塞等待**:曲线调参批(门 = 验收读数重测);状态层重设计批(本批全部临时值的终值归属:duration/off_guard N 值/当量锚复算)
|
||||||
- **锚点提交**:0da19a5 本会话收口 · a2fc39f 伤害道具+护甲重配 · cdc226e 数值纪律收口 · c5c52b5 元进度定稿 · 8ca3da6 技能池
|
- **锚点提交**:b7d1b56 收口杂项 · 0da19a5 场景一三落地 · a2fc39f 伤害道具+护甲重配 · c5c52b5 元进度定稿 · 8ca3da6 技能池(本批 9 文件未提交留工作区)
|
||||||
- **下一步顺序**:场景四裁决回流 → 数值修复小批 → 验收读数重测 → 曲线调参批 → 魔法道具内容批 → 表现层升级批(详见 production/roadmap.md)
|
- **下一步顺序**:验收读数重测 → 状态层重设计批 → 曲线调参批 → 魔法道具内容批 → 表现层升级批(详见 production/roadmap.md)
|
||||||
|
|
||||||
## 项目当前位置
|
## 项目当前位置
|
||||||
|
|
||||||
@@ -180,3 +180,4 @@
|
|||||||
67. **场景一/三拍板落地批(2026-09-18,本会话——场景分组讨论产物,提交 0da19a5)**:**场景一(战斗画面)**四拍板——①意图标识改动画三档承载(常态=普攻预示/攻击技=发光举武器/重击硬化=蓄力或防御姿态,2026-09-18 用户拍板;占位符号已落地:普攻「—」/⚔/✦/蓄力,技能名退出徽标堵剧透);②敌人卡形态 = 样张裁决不预拍(卡片式 vs 站桩式两版候选);③格边长弃两档定值改分辨率档位计算(窗口不可调、格子量增则格边长变;档位定案 1280×800+1920×1080);④表现层升级走贴图渲染(视图层替换非重构)。美术资源依赖清单成文(design/art/art-assets-checklist.md——P0 样张/P1 角色/P2 图标/P3 演出四档+依赖链+art-bible 风格条款引用;**注意并行会话另建 asset-checklist.md 内容重叠,合并待拍板**)。**场景三(数据装载与查表)**三拍板——①解析口径 ceil 向上取整保证偏难(原 floor 就近退役);②同日追加:超出最大行封顶取最大值(不致命);③域越界(关卡序号<1/深度<0)Fatal 级诊断+进程退出码 1(数据配置 v0.4+registry enemy_table 同步+config_fatal_probe 探针+冒烟 ceil/clamp 断言)。**变异对初始展开影响**挂起归地形变异首批定稿批(board_data.gd 死分支处置在案)。**措辞收口+数值对齐**:registry 指路化全收口(主角/技能七行/敌五敌种/充能/敞口/棋盘参考行/EV 读数)、中点锚改 floor 向下取整口径、刷新临时名全链退役(refresh_cap_per_round/request_refresh/can_refresh)、五区残留清零、schema 默认值 6/6、明细字号 14px、RAP−8 字面量 6 处表值驱动(set_refresh_cost 注入)、tune 探针表值驱动修复、smoke 标签「L1·地精/L2·兄弟精」。**验证**:冒烟 296 全绿 + ui/click/layout/tune 四探针 PASS + fatal 探针退出码 1。**第 20 处残留补修**:smoke 回放标签退役键名(ambusher/grub)——审计维度应含测试/日志文案的教训在案。**并行协调**:场景四在另一会话裁决(本会话不碰战斗数值文件);并行会话四笔先期提交已核对零覆盖(其选择性收编我方已完成 hunks,行动经济改名 hunks 留与本批)。
|
67. **场景一/三拍板落地批(2026-09-18,本会话——场景分组讨论产物,提交 0da19a5)**:**场景一(战斗画面)**四拍板——①意图标识改动画三档承载(常态=普攻预示/攻击技=发光举武器/重击硬化=蓄力或防御姿态,2026-09-18 用户拍板;占位符号已落地:普攻「—」/⚔/✦/蓄力,技能名退出徽标堵剧透);②敌人卡形态 = 样张裁决不预拍(卡片式 vs 站桩式两版候选);③格边长弃两档定值改分辨率档位计算(窗口不可调、格子量增则格边长变;档位定案 1280×800+1920×1080);④表现层升级走贴图渲染(视图层替换非重构)。美术资源依赖清单成文(design/art/art-assets-checklist.md——P0 样张/P1 角色/P2 图标/P3 演出四档+依赖链+art-bible 风格条款引用;**注意并行会话另建 asset-checklist.md 内容重叠,合并待拍板**)。**场景三(数据装载与查表)**三拍板——①解析口径 ceil 向上取整保证偏难(原 floor 就近退役);②同日追加:超出最大行封顶取最大值(不致命);③域越界(关卡序号<1/深度<0)Fatal 级诊断+进程退出码 1(数据配置 v0.4+registry enemy_table 同步+config_fatal_probe 探针+冒烟 ceil/clamp 断言)。**变异对初始展开影响**挂起归地形变异首批定稿批(board_data.gd 死分支处置在案)。**措辞收口+数值对齐**:registry 指路化全收口(主角/技能七行/敌五敌种/充能/敞口/棋盘参考行/EV 读数)、中点锚改 floor 向下取整口径、刷新临时名全链退役(refresh_cap_per_round/request_refresh/can_refresh)、五区残留清零、schema 默认值 6/6、明细字号 14px、RAP−8 字面量 6 处表值驱动(set_refresh_cost 注入)、tune 探针表值驱动修复、smoke 标签「L1·地精/L2·兄弟精」。**验证**:冒烟 296 全绿 + ui/click/layout/tune 四探针 PASS + fatal 探针退出码 1。**第 20 处残留补修**:smoke 回放标签退役键名(ambusher/grub)——审计维度应含测试/日志文案的教训在案。**并行协调**:场景四在另一会话裁决(本会话不碰战斗数值文件);并行会话四笔先期提交已核对零覆盖(其选择性收编我方已完成 hunks,行动经济改名 hunks 留与本批)。
|
||||||
|
|
||||||
68. **收口杂项批(2026-09-18,本会话)**:① **Stop 守卫强判据升级**:active.md 登记判据由 mtime 改**内容哈希比对**(session-snapshot.sh 存内容哈希、stop-active-md-guard.sh 比内容——touch/意外 mtime 变化不再蒙混过关;三态实测:无改动 exit 0 / 改动+未登记 exit 2 / 改动+已登记 exit 0);② registry `scope_event_binding` 行内 armor_roll 条目重复追加一次,已去重(armor_roll= 恰一处);③ CLAUDE.md「文档写作规范标题不对称」待拍板项核实**已解决**(现行规范导航独立标题+表格,无需再做——memory 过期已清)。**遗留登记**:两份美术清单合并、场景四结论回流回填,均见快照节。
|
68. **收口杂项批(2026-09-18,本会话)**:① **Stop 守卫强判据升级**:active.md 登记判据由 mtime 改**内容哈希比对**(session-snapshot.sh 存内容哈希、stop-active-md-guard.sh 比内容——touch/意外 mtime 变化不再蒙混过关;三态实测:无改动 exit 0 / 改动+未登记 exit 2 / 改动+已登记 exit 0);② registry `scope_event_binding` 行内 armor_roll 条目重复追加一次,已去重(armor_roll= 恰一处);③ CLAUDE.md「文档写作规范标题不对称」待拍板项核实**已解决**(现行规范导航独立标题+表格,无需再做——memory 过期已清)。**遗留登记**:两份美术清单合并、场景四结论回流回填,均见快照节。
|
||||||
|
69. **战斗数值结构修复批(2026-09-18,本会话——场景四盘问会话四裁决+削弱续时的执行批,全部经用户拍板直接执行,未提交)**:**六项改动**——①主角侧乘区接线:battle_orchestrator 主角攻击段 pool_damage 首参 0 → _clamped_pool("hero_offense")(增伤/乏力合计修正乘到主角攻击);②attack_up 直乘旁路退役:删普通分量 ×(100+up)/100 直乘(base_val 直接用表值攻击),增伤改经 effect_pool_map 走乘区,覆盖面 = 三份分量合计(普通+穿刺+魔法)——sapped 乏力死效果随接线变活(原 hero_offense 池无乘区消费方);③失衡改挂 AC 轴:off_guard unit percent→ac、magnitude +25→−2(provisional),settlement effect_pool_map 删 off_guard 键(hero_defense 池清空、结构保留),走 _defender_ac 既有读法零代码;④硬化符号纠正:fortify +100→−50(负值入 enemy_defense 池 = 主角攻击折半;旧 +100 实际 ×2 翻倍系符号 bug);⑤削弱改续时:weaken stack→refresh、duration 1→2(同名重复授予只刷新剩余结算数、层数恒 1——结构性消饱和,×2 叠满池触底 ×0 免伤轮根治,refresh 实现 empower/fortify 同款零代码);⑥数值终值全部不在本批(provisional 归 状态层重设计批)。**同步面**:冒烟——fortify 断言改形、旧「削弱×2 池触底→damage_floor」采样通道退役(其触发路径随续时结构性消失)、免伤墙护栏注释同步、新增 _smoke_pool_wiring 节四断言(同种子恒同掷点法:充电基线 103 → 增伤 ×1.5=154 / 乏力 ×0.75=77 / 硬化 ×0.5=51 精确关系)+ _weaken_refresh_probe 两断言(授予→衰减→再授予:层数 1、剩余次数重置 2、单层池读数=行值);GDD——战斗结算 v0.14(普通分量直乘句×2+池乘区公式行+现状注记销项)、增益状态 v0.9(三行语义+例子表「削弱叠两层」改「暴走叠两层」+联动纪律句失效改写+调参表一次性六行/刷新行措辞)、06-待办清单(削弱档位条目补续时定案注记;hero_offense「正式化条目」实为战斗结算正文注记承载、06 无独立条目,销项落在正文注记本身)、地图战斗资源 v0.11 极性矩阵 off_guard 行失同步修正(原残留「hero_defense 池,承伤加深」);registry——status_effect 三行+value_status+effect_pool_map 批注+修订记录,顺手收口 fields 漏登(unit 枚举补 ac——2026-09-16 换装批遗留)。**验证**:冒烟 296→300 项 0 失败;ui/click/layout/tune 四探针 PASS(click 问题=0);残留措辞 grep 清零(承伤加深/直乘,版本历史豁免)。**开工纪律**:git status 归属核对干净(仅 3 个 design/ 未跟踪文件非本批,不碰)。**遗留**:Boss 战读数此前全泡在 fortify 翻倍行为里——验收读数重测批必须含 Boss 战;「叠层不续命的读感」06 条目对 weaken 失效但条目本身仍在(stack 行仍有该语义,随状态层重设计批复核)。
|
||||||
@@ -441,8 +441,9 @@ func _roll_round_actions() -> void:
|
|||||||
func _combat_segment(ri: int) -> void:
|
func _combat_segment(ri: int) -> void:
|
||||||
var L := _status_effects.pool_layers("ambush") # 授予段后的当轮值;池共享不消耗
|
var L := _status_effects.pool_layers("ambush") # 授予段后的当轮值;池共享不消耗
|
||||||
# ⓪ 主角先手攻击(基础攻击恒存在——2026-09-11 用户裁决;先于敌方行动;授予段负向直伤致死 → 致电短路不先手)。
|
# ⓪ 主角先手攻击(基础攻击恒存在——2026-09-11 用户裁决;先于敌方行动;授予段负向直伤致死 → 致电短路不先手)。
|
||||||
# 三段伤害构成(2026-09-12 用户拍板;2026-09-15 命名统一批 + 攻击类型/奖励抽象分离批):基础分量(atk×(1+attack_up),吃掷点,
|
# 三段伤害构成(2026-09-12 用户拍板;2026-09-15 命名统一批 + 攻击类型/奖励抽象分离批):基础分量(atk,吃掷点,
|
||||||
# 类型 = 主角 attack_type 表值——2026-09-18 营地扩展前置批:量与类型抽象分离,原硬编码 normal 退役)
|
# 类型 = 主角 attack_type 表值——2026-09-18 营地扩展前置批:量与类型抽象分离,原硬编码 normal 退役;
|
||||||
|
# attack_up 增益不再直乘本分量——2026-09-18 结构修复批改经 hero_offense 池乘三段合计,见池乘区注记)
|
||||||
# + 穿刺/魔法(由充能供给——充能按攻击类型分桶,谁能充/充哪个桶归奖励定义 charge_grants)。攻击类型只管查甲效矩阵哪一行,与来源无关。
|
# + 穿刺/魔法(由充能供给——充能按攻击类型分桶,谁能充/充哪个桶归奖励定义 charge_grants)。攻击类型只管查甲效矩阵哪一行,与来源无关。
|
||||||
# 护甲等级掷点批(2026-09-16):普通分量吃掷点判定(含暴击);穿刺/魔法充能分量与棋盘来源伤害不掷不折;
|
# 护甲等级掷点批(2026-09-16):普通分量吃掷点判定(含暴击);穿刺/魔法充能分量与棋盘来源伤害不掷不折;
|
||||||
# 任何攻击落地伤害 ≥ damage_floor(全局 max(1,·))——"被减伤归零 v=0"零值伤害行分支随批退役。
|
# 任何攻击落地伤害 ≥ damage_floor(全局 max(1,·))——"被减伤归零 v=0"零值伤害行分支随批退役。
|
||||||
@@ -451,13 +452,12 @@ func _combat_segment(ri: int) -> void:
|
|||||||
if hero_alive and hero_target != null:
|
if hero_alive and hero_target != null:
|
||||||
var armor: String = String(hero_target.get("armor_type", "light"))
|
var armor: String = String(hero_target.get("armor_type", "light"))
|
||||||
var base_atk_type: String = String(_enemy_system.hero_unit().get("attack_type", "normal")) # 基础分量类型 = 主角表值(营地扩展前置批 2026-09-18)
|
var base_atk_type: String = String(_enemy_system.hero_unit().get("attack_type", "normal")) # 基础分量类型 = 主角表值(营地扩展前置批 2026-09-18)
|
||||||
var up := clampi(_pool_effective("attack_up"), int(db.settlement.pool_clamp_lo), int(db.settlement.pool_clamp_hi))
|
|
||||||
var points := _charge_points() # {攻击类型: 充能点数}——奖励定义投递的结果(本段不认识"开格/标雷")
|
var points := _charge_points() # {攻击类型: 充能点数}——奖励定义投递的结果(本段不认识"开格/标雷")
|
||||||
var roll_read: Dictionary = _armor_roll() # 基础分量掷点(每吃掷点分量逐次掷——掷点只吃基础分量口径不变)
|
var roll_read: Dictionary = _armor_roll() # 基础分量掷点(每吃掷点分量逐次掷——掷点只吃基础分量口径不变)
|
||||||
var threshold: int = _defender_ac(hero_target) + int(db.settlement.attack_bonus)
|
var threshold: int = _defender_ac(hero_target) + int(db.settlement.attack_bonus)
|
||||||
var crit: bool = bool(roll_read.crit)
|
var crit: bool = bool(roll_read.crit)
|
||||||
var discount: int = _roll_discount(int(roll_read.roll), threshold)
|
var discount: int = _roll_discount(int(roll_read.roll), threshold)
|
||||||
var base_val: float = float(_hero_atk) * (100.0 + float(up)) / 100.0
|
var base_val: float = float(_hero_atk) # 基础分量 = 表值攻击裸值(增益直乘旁路已退役——乘区统一走池)
|
||||||
var comp: Dictionary = {}
|
var comp: Dictionary = {}
|
||||||
var d_hero := 0
|
var d_hero := 0
|
||||||
for atk_type in SettlementTable.ATTACK_TYPE_KEYS:
|
for atk_type in SettlementTable.ATTACK_TYPE_KEYS:
|
||||||
@@ -476,10 +476,11 @@ func _combat_segment(ri: int) -> void:
|
|||||||
payload["tier"] = discount
|
payload["tier"] = discount
|
||||||
if crit:
|
if crit:
|
||||||
payload["crit"] = true
|
payload["crit"] = true
|
||||||
# 增益池乘区·敌方防御池(敌人技能池批——硬化技载体):Σ三分量后 ×(100+clamp(enemy_defense))/100。
|
# 增益池乘区·主角侧 + 敌方防御池(2026-09-18 结构修复批——hero_offense 乘区接线落地,
|
||||||
# 四池对称:敌打主角 = hero_defense×enemy_output(_resolve_damage);主角打敌 = hero_offense×enemy_defense
|
# attack_up 普通分量直乘旁路退役:增伤/乏力改乘 Σ三分量合计,覆盖面 = 普通+穿刺+魔法;
|
||||||
# (hero_offense 现行走普通分量 attack_up 直乘的切片现状——登记遗留,本批不动)。
|
# 与既有 enemy_defense 池乘区同段串乘)。四池对称:敌打主角 = hero_defense×enemy_output
|
||||||
d_hero = DamageMath.pool_damage(d_hero, 0, _clamped_pool("enemy_defense"))
|
# (_resolve_damage);主角打敌 = hero_offense×enemy_defense。
|
||||||
|
d_hero = DamageMath.pool_damage(d_hero, _clamped_pool("hero_offense"), _clamped_pool("enemy_defense"))
|
||||||
var d_landed: int = maxi(int(db.settlement.damage_floor), d_hero)
|
var d_landed: int = maxi(int(db.settlement.damage_floor), d_hero)
|
||||||
_enemy_system.apply_damage(hero_target, d_landed)
|
_enemy_system.apply_damage(hero_target, d_landed)
|
||||||
payload["killed"] = not hero_target.alive # 击杀标记在扣血后取(原语义不变)
|
payload["killed"] = not hero_target.alive # 击杀标记在扣血后取(原语义不变)
|
||||||
|
|||||||
@@ -21,7 +21,6 @@ effect_pool_map = {
|
|||||||
"weaken": "enemy_output",
|
"weaken": "enemy_output",
|
||||||
"ambush": "flat_attach",
|
"ambush": "flat_attach",
|
||||||
"enrage": "enemy_output",
|
"enrage": "enemy_output",
|
||||||
"off_guard": "hero_defense",
|
|
||||||
"sapped": "hero_offense",
|
"sapped": "hero_offense",
|
||||||
"empower": "enemy_output",
|
"empower": "enemy_output",
|
||||||
"fortify": "enemy_defense"
|
"fortify": "enemy_defense"
|
||||||
@@ -102,3 +101,11 @@ armor_roll_stream = "armor_roll"
|
|||||||
; 穿刺 cap 8→3(per_unit 1 不变,EV ≈ ÷2.7);魔法 2/雷→1/雷(per_unit ÷3 进 1,EV ≈ ÷2)。
|
; 穿刺 cap 8→3(per_unit 1 不变,EV ≈ ÷2.7);魔法 2/雷→1/雷(per_unit ÷3 进 1,EV ≈ ÷2)。
|
||||||
; 充能期望压缩比 ≈1/2~1/3 之间,粒度限制下的近似,登记为已知偏差。
|
; 充能期望压缩比 ≈1/2~1/3 之间,粒度限制下的近似,登记为已知偏差。
|
||||||
; roll_faces/折扣档/暴击/damage_floor/克制矩阵/pool_clamp 全部不动(相对轴)。clamp 域 [-100,+100] 共用。
|
; roll_faces/折扣档/暴击/damage_floor/克制矩阵/pool_clamp 全部不动(相对轴)。clamp 域 [-100,+100] 共用。
|
||||||
|
;
|
||||||
|
; 战斗数值结构修复批(2026-09-18 盘问会话用户拍板):
|
||||||
|
; effect_pool_map 删 off_guard 键——off_guard(失衡)换装 AC 轴(unit percent→ac、+25→−2,provisional
|
||||||
|
; 归 状态层重设计批;消费走 _defender_ac 既有 ac 型读法零代码),退离 hero_defense 池(池清空、结构保留;
|
||||||
|
; 上方 2026-09-15 attack/defense/weaken 三型负向字典行的极性路由注记不变——defense 型兑付行仍是 off_guard,
|
||||||
|
; 变的只是池归属)。hero_offense 乘区接线同步落地(battle_orchestrator 主角攻击段):Σ三分量后
|
||||||
|
; ×(100+clamp(hero_offense))/100×(100+clamp(enemy_defense))/100——attack_up 普通分量直乘旁路退役,
|
||||||
|
; 增伤/乏力覆盖面 = 普通+穿刺+魔法 合计;上方"hero_offense 现行走直乘——登记遗留"注记随之销项。
|
||||||
@@ -37,8 +37,8 @@ rows = [{
|
|||||||
"target_side": "enemy",
|
"target_side": "enemy",
|
||||||
"magnitude": -65,
|
"magnitude": -65,
|
||||||
"unit": "percent",
|
"unit": "percent",
|
||||||
"duration_settlements": 1,
|
"duration_settlements": 2,
|
||||||
"stack_policy": "stack",
|
"stack_policy": "refresh",
|
||||||
"max_stack": 16
|
"max_stack": 16
|
||||||
}, {
|
}, {
|
||||||
"effect_id": "enrage",
|
"effect_id": "enrage",
|
||||||
@@ -53,8 +53,8 @@ rows = [{
|
|||||||
"effect_id": "off_guard",
|
"effect_id": "off_guard",
|
||||||
"display_name": "失衡",
|
"display_name": "失衡",
|
||||||
"target_side": "hero",
|
"target_side": "hero",
|
||||||
"magnitude": 25,
|
"magnitude": -2,
|
||||||
"unit": "percent",
|
"unit": "ac",
|
||||||
"duration_settlements": 1,
|
"duration_settlements": 1,
|
||||||
"stack_policy": "stack",
|
"stack_policy": "stack",
|
||||||
"max_stack": 16
|
"max_stack": 16
|
||||||
@@ -80,7 +80,7 @@ rows = [{
|
|||||||
"effect_id": "fortify",
|
"effect_id": "fortify",
|
||||||
"display_name": "硬化",
|
"display_name": "硬化",
|
||||||
"target_side": "enemy",
|
"target_side": "enemy",
|
||||||
"magnitude": 100,
|
"magnitude": -50,
|
||||||
"unit": "percent",
|
"unit": "percent",
|
||||||
"duration_settlements": 2,
|
"duration_settlements": 2,
|
||||||
"stack_policy": "refresh",
|
"stack_policy": "refresh",
|
||||||
@@ -111,3 +111,12 @@ rows = [{
|
|||||||
; 数值压缩批(2026-09-17 用户拍板暂定):ambush magnitude 3→1(伏击附加 = 层数×幅度,3 整除 ÷3)。
|
; 数值压缩批(2026-09-17 用户拍板暂定):ambush magnitude 3→1(伏击附加 = 层数×幅度,3 整除 ÷3)。
|
||||||
; percent 全族(attack_up 50 / weaken −65 / enrage 25 / off_guard 25 / sapped −25 / empower·fortify 100)
|
; percent 全族(attack_up 50 / weaken −65 / enrage 25 / off_guard 25 / sapped −25 / empower·fortify 100)
|
||||||
; 与 duration/max_stack 全部不动(相对轴与结构轴不压缩)。
|
; 与 duration/max_stack 全部不动(相对轴与结构轴不压缩)。
|
||||||
|
;
|
||||||
|
; 战斗数值结构修复批(2026-09-18 盘问会话用户拍板——本批三行全部临时值,provisional 归 状态层重设计批):
|
||||||
|
; off_guard(失衡)换装 AC 轴:unit percent→ac、magnitude +25→−2(失衡 = 主角 AC −2,更易被命中;
|
||||||
|
; 消费走 _defender_ac 既有 ac 型读法零代码;settlement effect_pool_map 同批删 off_guard 键——
|
||||||
|
; hero_defense 池清空、池结构保留);fortify(硬化)符号纠正:+100→−50(乘区 = enemy_defense 池 −50
|
||||||
|
; → 主角攻击 ×0.5 折半——旧 +100 实际 ×2 翻倍,与"硬化=减伤"语义相反,用户确认系符号 bug);
|
||||||
|
; weaken(削弱)叠层改续时:stack_policy stack→refresh、duration_settlements 1→2(同名重复授予
|
||||||
|
; 只刷新剩余结算数、层数恒 1——结构性消饱和,×2 叠满池触底 ×0 免伤轮从根杜绝;refresh 实现与
|
||||||
|
; empower/fortify 同款零代码)。duration 终值、off_guard N 值、当量锚复算全部归 状态层重设计批。
|
||||||
@@ -64,6 +64,7 @@ func _run_core_smoke(db, rng) -> void:
|
|||||||
_rng = rng
|
_rng = rng
|
||||||
_smoke_ac_swap_guard()
|
_smoke_ac_swap_guard()
|
||||||
_smoke_armor_roll()
|
_smoke_armor_roll()
|
||||||
|
_smoke_pool_wiring()
|
||||||
_smoke_board_generator()
|
_smoke_board_generator()
|
||||||
_smoke_variation_framework()
|
_smoke_variation_framework()
|
||||||
_smoke_full_battle(1, 0, "L1 · 地精")
|
_smoke_full_battle(1, 0, "L1 · 地精")
|
||||||
@@ -204,8 +205,8 @@ func _smoke_level() -> void:
|
|||||||
# ---- 护甲等级掷点批·换装护栏(2026-09-16 用户拍板:百分比减伤行整体退役换装 AC,无双轨)----
|
# ---- 护甲等级掷点批·换装护栏(2026-09-16 用户拍板:百分比减伤行整体退役换装 AC,无双轨)----
|
||||||
# ① 换装在位:defense_up 状态行/池映射/奖励行三处全无残留,ac_up 三处就位(unit=ac ×2 层);
|
# ① 换装在位:defense_up 状态行/池映射/奖励行三处全无残留,ac_up 三处就位(unit=ac ×2 层);
|
||||||
# ② 免伤墙归零护栏泛化保留(BUG-0003 事故类永久免疫):hero_defense 池任何 percent 行
|
# ② 免伤墙归零护栏泛化保留(BUG-0003 事故类永久免疫):hero_defense 池任何 percent 行
|
||||||
# magnitude × max_stack > pool_clamp_lo——单效果叠满不可触池底(现行池内仅 off_guard 正向行,
|
# magnitude × max_stack > pool_clamp_lo——单效果叠满不可触池底(off_guard 已于 2026-09-18
|
||||||
# 墙结构面已随 AC 换装消失,本断言防未来负向行回归时静默造墙);
|
# 结构修复批退离 hero_defense 池换装 AC 轴,池内现无 percent 行——本断言防未来负向行回归时静默造墙);
|
||||||
# ③ 单位表 armor_class 字段:主角 10(暂定)/ 敌方行 0(暂定——正式值归怪物设定批);
|
# ③ 单位表 armor_class 字段:主角 10(暂定)/ 敌方行 0(暂定——正式值归怪物设定批);
|
||||||
# ④ 掷点参数域:档位边界升序/档位值降序无零档/骰面与暴击参数在域(加载校验双保险)。
|
# ④ 掷点参数域:档位边界升序/档位值降序无零档/骰面与暴击参数在域(加载校验双保险)。
|
||||||
|
|
||||||
@@ -293,15 +294,13 @@ func _smoke_armor_roll() -> void:
|
|||||||
"nat20 → 行留档 roll=20 + crit 标记(主角先手普通分量)")
|
"nat20 → 行留档 roll=20 + crit 标记(主角先手普通分量)")
|
||||||
check(int(crit_rows.get("normal", -1)) == 2 * int(_db.hero.atk) and int(crit_rows.get("value", -1)) == 2 * int(_db.hero.atk),
|
check(int(crit_rows.get("normal", -1)) == 2 * int(_db.hero.atk) and int(crit_rows.get("value", -1)) == 2 * int(_db.hero.atk),
|
||||||
"nat20 → 普通分量 ×2(%d = 2×%d,暴击倍率只乘该分量,穿刺/魔法不吃)" % [int(crit_rows.get("normal", -1)), int(_db.hero.atk)])
|
"nat20 → 普通分量 ×2(%d = 2×%d,暴击倍率只乘该分量,穿刺/魔法不吃)" % [int(crit_rows.get("normal", -1)), int(_db.hero.atk)])
|
||||||
# ③ 伤害下限(行为面):削弱 ×2 = 池触底 ×0 → 落地伤害 = damage_floor(零值行已退役)
|
# ③ 削弱续时(行为面):授予→衰减一轮→再授予 → 层数保持 1、剩余结算数重置(2026-09-18 结构
|
||||||
var floor_rows := _weaken_zero_round_rows()
|
# 修复批叠层改续时——削弱 ×2 叠满池触底 ×0 的免伤轮结构性根治,旧 ×2 叠层采样通道随批退役)
|
||||||
check(not floor_rows.is_empty() and int(floor_rows[0].get("value", -1)) == int(_db.settlement.damage_floor),
|
var weaken_probe := _weaken_refresh_probe()
|
||||||
"池触底 ×0 → 落地伤害 = %d(全局 max(1,·)——×%d 拍采样)" % [int(_db.settlement.damage_floor), floor_rows.size()])
|
check(int(weaken_probe.get("layers", -1)) == 1 and int(weaken_probe.get("remaining", -1)) == 2,
|
||||||
var no_zero_label := true
|
"削弱重复授予 → 层数保持 1、剩余结算数重置 2(续时语义——结构性消饱和)")
|
||||||
for r in floor_rows:
|
check(int(weaken_probe.get("pool", -999)) == int(_db.status_effect_row("weaken").magnitude),
|
||||||
if String(r.get("display_name", "")).contains("归零") or int(r.get("value", 0)) <= 0:
|
"削弱单层池读数 = 行值(enemy_output 池单层贡献——×2 叠满触底 ×0 不可达,免伤轮根治)")
|
||||||
no_zero_label = false
|
|
||||||
check(no_zero_label, "零值伤害行语义退役:无\"被减伤归零\"行、无 v=0 伤害行(被压制/保底下限可见)")
|
|
||||||
# ④ AC12 折扣档分布(行为面):ac_up ×2 逐轮授给(时效 1)→ Boss 行攻击拍逐拍判定
|
# ④ AC12 折扣档分布(行为面):ac_up ×2 逐轮授给(时效 1)→ Boss 行攻击拍逐拍判定
|
||||||
var tiers := _ac12_tier_samples()
|
var tiers := _ac12_tier_samples()
|
||||||
var tier_distinct := {}
|
var tier_distinct := {}
|
||||||
@@ -349,29 +348,23 @@ func _first_hero_attack_rows(seed_val: int) -> Dictionary:
|
|||||||
return {}
|
return {}
|
||||||
|
|
||||||
|
|
||||||
# 削弱 ×2(池 enemy_output 触底 ×0)下的敌方攻击伤害行采样(D2 熊地精)。
|
# 削弱续时探测(2026-09-18 结构修复批——旧 _weaken_zero_round_rows ×2 叠层采样随批退役):
|
||||||
# 敌人技能池批:开轮摇号下首拍可能是施放行(零伤害)——逐轮重授削弱并停手,直到采到伤害行为止。
|
# 授予 → 衰减一轮 → 再授予,读 weaken 实例投影 {layers, remaining, pool}。
|
||||||
func _weaken_zero_round_rows() -> Array:
|
# 直授通道(来源格真实坐标惯例——沿前例);depth 2 板(D2 熊地精)仅作宿主,行为与敌种无关。
|
||||||
|
func _weaken_refresh_probe() -> Dictionary:
|
||||||
var rng = load("res://core/rng_service.gd").new()
|
var rng = load("res://core/rng_service.gd").new()
|
||||||
rng.set_master_seed(20260916)
|
rng.set_master_seed(20260916)
|
||||||
var settlement = load("res://core/battle_orchestrator.gd").new(_db, rng)
|
var settlement = load("res://core/battle_orchestrator.gd").new(_db, rng)
|
||||||
var rows: Array = []
|
|
||||||
settlement.step_row.connect(func(row): rows.append(row))
|
|
||||||
if not settlement.begin_battle({"level_index": 1, "node_depth": 2, "hero_hp": int(_db.hero.max_hp)}):
|
if not settlement.begin_battle({"level_index": 1, "node_depth": 2, "hero_hp": int(_db.hero.max_hp)}):
|
||||||
return rows
|
return {}
|
||||||
# 测试通道:直授削弱 ×2(来源格取真实坐标——行来源断言要求;时效 1 当轮结算内有效)
|
var src: Dictionary = {"source_class": "mine_hit", "origin_cell": Vector2i(0, 0), "round_index": settlement.round_index}
|
||||||
var out: Array = []
|
settlement._status_effects.apply_effect("weaken", src)
|
||||||
var guard := 8
|
settlement._status_effects.decay_round() # remaining 2 → 1(先兑付后衰减——只借衰减器,不结算)
|
||||||
while out.is_empty() and guard > 0 and settlement.battle_result == "":
|
settlement._status_effects.apply_effect("weaken", src) # 续时:remaining ← 2,层数不动
|
||||||
guard -= 1
|
for eff in settlement._status_effects.query_active("enemy"):
|
||||||
rows.clear()
|
if String(eff.effect_id) == "weaken":
|
||||||
for i in range(2):
|
return {"layers": int(eff.layers), "remaining": int(eff.remaining_settlements), "pool": int(settlement._clamped_pool("enemy_output"))}
|
||||||
settlement._status_effects.apply_effect("weaken", {"source_class": "mine_hit", "origin_cell": Vector2i(0, 0), "round_index": settlement.round_index})
|
return {}
|
||||||
settlement.minesweeper.settle_batch([{"action": "stop"}])
|
|
||||||
for row in rows:
|
|
||||||
if String(row.get("type", "")) == "damage" and String(row.get("source_class", "")) == "enemy_action":
|
|
||||||
out.append(row)
|
|
||||||
return out
|
|
||||||
|
|
||||||
|
|
||||||
# AC12 折扣档采样:每停手轮前直授 ac_up ×2(时效 1 逐轮衰减)——敌拍逐拍判定留档。
|
# AC12 折扣档采样:每停手轮前直授 ac_up ×2(时效 1 逐轮衰减)——敌拍逐拍判定留档。
|
||||||
@@ -403,6 +396,48 @@ func _ac12_tier_samples() -> Array:
|
|||||||
return []
|
return []
|
||||||
|
|
||||||
|
|
||||||
|
# ---- 主角乘区接线 + 硬化折半方向(2026-09-18 结构修复批护栏)----
|
||||||
|
# 同种子停手轮恒同掷点(效果只改乘区、不动掷点流)→ 落地伤害精确关系:
|
||||||
|
# 增伤 = 基线 ×1.5、乏力 = ×0.75(hero_offense 池乘 Σ三分量合计——普通+穿刺同乘,直乘旁路退役);
|
||||||
|
# 硬化 = 基线 ×0.5 且 < 基线(enemy_defense 池负值折半——+100 翻倍符号 bug 随批纠正)。
|
||||||
|
func _smoke_pool_wiring() -> void:
|
||||||
|
print("--- 主角乘区接线 + 硬化折半方向 ---")
|
||||||
|
var base_row := _hero_attack_row_with({"pierce_charge": 4}, 100, 20260918)
|
||||||
|
var up_row := _hero_attack_row_with({"pierce_charge": 4, "effects": ["attack_up"]}, 100, 20260918)
|
||||||
|
var sapped_row := _hero_attack_row_with({"pierce_charge": 4, "effects": ["sapped"]}, 100, 20260918)
|
||||||
|
var fortify_row := _hero_attack_row_with({"pierce_charge": 4, "effects": ["fortify"]}, 100, 20260918)
|
||||||
|
var base_v := int(base_row.get("value", -1))
|
||||||
|
check(int(base_row.get("pierce", -1)) == 3 and base_v > 0, "充电注入基线在位(穿刺分量 = cap 3、基线 %d——合计含充电分量前提)" % base_v)
|
||||||
|
check(int(up_row.get("value", -1)) == int(floor(base_v * 1.5)),
|
||||||
|
"增伤经乘区加成合计(%d → %d = ×1.5——attack_up 直乘旁路退役,覆盖面=普通+穿刺+魔法)" % [base_v, int(up_row.get("value", -1))])
|
||||||
|
check(int(sapped_row.get("value", -1)) == int(floor(base_v * 0.75)),
|
||||||
|
"乏力经乘区削减合计(%d → %d = ×0.75——充电分量同削)" % [base_v, int(sapped_row.get("value", -1))])
|
||||||
|
check(int(fortify_row.get("value", -1)) == int(floor(base_v * 0.5)) and int(fortify_row.get("value", -1)) < base_v,
|
||||||
|
"硬化折半方向(%d → %d = ×0.5 且 < 基线——敌方防御池负值减伤,翻倍 bug 退役)" % [base_v, int(fortify_row.get("value", -1))])
|
||||||
|
|
||||||
|
|
||||||
|
# 构造停手轮首行主角攻击行:opts = {pierce_charge: int, effects: Array};hero_atk 覆盖 100 拉开量级
|
||||||
|
# (floor 关系可精确断言);效果直授沿 _weaken_refresh_probe 前例;充电计数直注 _charge_counts
|
||||||
|
# (重置只在轮末出口分发/战斗终——停手轮前注入可存活到战斗段)。
|
||||||
|
func _hero_attack_row_with(opts: Dictionary, hero_atk_val: int, seed_val: int) -> Dictionary:
|
||||||
|
var rng = load("res://core/rng_service.gd").new()
|
||||||
|
rng.set_master_seed(seed_val)
|
||||||
|
var settlement = load("res://core/battle_orchestrator.gd").new(_db, rng)
|
||||||
|
var rows: Array = []
|
||||||
|
settlement.step_row.connect(func(row): rows.append(row))
|
||||||
|
if not settlement.begin_battle({"level_index": 1, "node_depth": 0, "hero_hp": int(_db.hero.max_hp), "hero_atk": hero_atk_val}):
|
||||||
|
return {}
|
||||||
|
for eff in opts.get("effects", []):
|
||||||
|
settlement._status_effects.apply_effect(String(eff), {"source_class": "mine_hit", "origin_cell": Vector2i(0, 0), "round_index": settlement.round_index})
|
||||||
|
if opts.has("pierce_charge"):
|
||||||
|
settlement._charge_counts["safe_cell"] = int(opts.pierce_charge)
|
||||||
|
settlement.minesweeper.settle_batch([{"action": "stop"}])
|
||||||
|
for row in rows:
|
||||||
|
if String(row.get("type", "")) == "damage" and String(row.get("source_class", "")) == "hero_attack":
|
||||||
|
return row
|
||||||
|
return {}
|
||||||
|
|
||||||
|
|
||||||
func _smoke_board_generator() -> void:
|
func _smoke_board_generator() -> void:
|
||||||
print("--- 棋盘生成 ---")
|
print("--- 棋盘生成 ---")
|
||||||
var board_generator = load("res://core/board_generator.gd").new()
|
var board_generator = load("res://core/board_generator.gd").new()
|
||||||
@@ -1288,7 +1323,7 @@ func _smoke_negative_dictionary() -> void:
|
|||||||
if by_type.size() == 5:
|
if by_type.size() == 5:
|
||||||
break
|
break
|
||||||
check(by_type.size() == 5, "扫描 6 板内出现五型齐备板(%s)" % str(by_type.keys()))
|
check(by_type.size() == 5, "扫描 6 板内出现五型齐备板(%s)" % str(by_type.keys()))
|
||||||
# attack/defense/weaken:percent 负向行走 apply_effect
|
# attack/defense/weaken:负向字典行走 apply_effect(off_guard 2026-09-18 换装 ac 轴——兑付形态不变)
|
||||||
var percent_map := {"attack": "enrage", "defense": "off_guard", "weaken": "sapped"}
|
var percent_map := {"attack": "enrage", "defense": "off_guard", "weaken": "sapped"}
|
||||||
for ctype in percent_map.keys():
|
for ctype in percent_map.keys():
|
||||||
if not by_type.has(ctype):
|
if not by_type.has(ctype):
|
||||||
@@ -1611,8 +1646,8 @@ func _smoke_skill_pool_data() -> void:
|
|||||||
var fortify: Dictionary = _db.status_effect_row("fortify")
|
var fortify: Dictionary = _db.status_effect_row("fortify")
|
||||||
check(not empower.is_empty() and String(empower.target_side) == "enemy" and int(empower.magnitude) == 100,
|
check(not empower.is_empty() and String(empower.target_side) == "enemy" and int(empower.magnitude) == 100,
|
||||||
"蓄力状态行 empower(enemy +100 percent——敌方输出 ×2 走既有 enemy_output 池)")
|
"蓄力状态行 empower(enemy +100 percent——敌方输出 ×2 走既有 enemy_output 池)")
|
||||||
check(not fortify.is_empty() and String(fortify.target_side) == "enemy" and int(fortify.magnitude) == 100,
|
check(not fortify.is_empty() and String(fortify.target_side) == "enemy" and int(fortify.magnitude) == -50,
|
||||||
"硬化状态行 fortify(enemy +100 percent——敌方防御池新词汇载体)")
|
"硬化状态行 fortify(enemy −50 percent——敌方防御池负值 = 主角攻击折半;+100 符号 bug 2026-09-18 纠正,provisional 归 状态层重设计批)")
|
||||||
check(String(_db.settlement.effect_pool_map.get("empower", "")) == "enemy_output" \
|
check(String(_db.settlement.effect_pool_map.get("empower", "")) == "enemy_output" \
|
||||||
and String(_db.settlement.effect_pool_map.get("fortify", "")) == "enemy_defense",
|
and String(_db.settlement.effect_pool_map.get("fortify", "")) == "enemy_defense",
|
||||||
"effect_pool_map 收编 empower/fortify(敌方防御池 enemy_defense 入表)")
|
"effect_pool_map 收编 empower/fortify(敌方防御池 enemy_defense 入表)")
|
||||||
|
|||||||
Reference in new issue
Block a user