feat(slice): 技能池新效应词汇批——妨害技+必中附加分量(L2 Boss 卓尔实装;多段命中退役;2026-09-19 用户逐项拍板,设计权威 docs/proposal-status-vocabulary.md v1.0 新建)——①三词收敛两词:妨害技=第四技能类型 debuff(0 伤害施放行,字段复用 buff_ref/buff_duration,落点由状态行 target_side 路由——容器零改动;池纪律+每池妨害≤1;施放类 side 守卫 buff→enemy/debuff→hero);固定值伤害改形必中附加分量 rider_mult(域 (0,1],分量值 max(floor, floor(atk×rider)) 随基线缩放——固定值不通用/跨关稀释析出此改形;价位锚 0.75=AC 折扣档最轻档"不掉档的稳定伤害",可掷分量期望 AC10≈0.80/AC12≈0.76 对表,×0.5 永久第三档案经用户质询否决);多段命中退役(无防御磨损体系无对照机制,P1 字段位保留);②实装面=仅 L2 Boss 蛛化卓尔精灵(用户拍板,其余敌种不动):毒爆+必中毒分量(atk3→毒2,atk 区间 2-4→1-3 随开战掷定缩放);新行蛛网束缚 web_snare(debuff→off_guard 失衡〔首发轴用户拍板〕,duration 2=1 有效拍,CD4,池 6/2/2→6/2/2/2 全 provisional);③结算面:三乘法链尾部+rider 后置加法(max(floor,主分量链)+rider,payload rider 键+行文本「+附加N(必中)」);意图徽标三档扩四档(+妨害系 ☠ 紫);④加载校验扩两族(pool_composition 妨害>1 / cast_side 施放类 side 守卫——validate_skill_pool_links 增 status_table 显式入参修装载序 Nil 崩);⑤验证:冒烟 306→317 项 0 失败(新探针 _smoke_debuff_rider 四断言:毒爆行逐拍精确复算/rider 键封闭/蛛网束缚落主角端到端/种子可达+校验拒绝组六断言)+四探针 PASS;顺手修并行 board_type 批漏网(smoke variant_pool Array→String 字面量,原断言被 SCRIPT ERROR 静默吞);800 局模拟试玩(两关×20 种子×双画像 4200-4219):L2 基线通关 90%→80%、剩余死因 100% 集中 Boss(设计方向生效)、台阶倒挂收窄 65vs90→65vs80,L1 65%/85% 与批前一致零行为变更回归;analyze_playtest.py 反事实重算+rider 识别(敌方招式成分,无奖励世界只剥伏击保留 rider);⑥文档:敌人系统 v0.10(枚举四类/词汇表 rider 行/池纪律/意图三族/P1 表核销)+战斗结算 v0.17(三乘法链尾 rider/公式行/必中家族/验收两条)+增益状态 v0.10(off_guard 第二来源=敌方技能施放)+registry skill 条目改写+off_guard 行+修订块+07 头注与速览行(重测变量+1)+README 批节+06 条目解决移除;数值全 provisional 归 难度曲线与Boss;本提交一并入库并行会话已获用户批准的完整批次:06 残留清理批(75→55 条,台账 81)+旗行为基线前置采集批(冒烟 11 断言,台账 83)+两处悬空指认连带(关卡节点地图/acceptance-ap6-ac)——e66d156 先例

This commit is contained in:
DKChan committed 2026-09-19 05:54:54 +08:00
1 parent e66d1561bc
commit d236d9f8e1
20 files changed
+449 -250

No files matched your search

+11 -205
View File
@@ -7,30 +7,8 @@
### 棋盘生成
#### 插旗不可逆提案(禁拔旗 + 挖旗格兑付改判)
**现状**:2026-09-18 用户提案,登记在案、未评估未拍板。现行口径旗可逆([排雷玩法](systems/排雷循环/排雷玩法.md)):挖已插旗的格被拒(须先按价拔旗、再按价挖);标旗后当轮又撤旗的经战斗结算抵消过滤不进兑付(零兑付、行动点不返还)——插错旗合计 3 点行动点即全额反悔,且仍拿到挖开安全格的正常格面奖励。提案把旗改为**一次性承诺**:① 插旗后不可再拔旗(拔旗动作退役);② 已插旗的格允许直接按价挖开,但兑付改判。四种枚举情况:
- 插旗落在雷格、无后续操作:标中照常,结算获得插旗奖励(现行不变);
- 插旗落在雷格、后续花行动点挖开:只受挖雷一层惩罚(惊动巢穴照常兑付),标中奖励不发;
- 插旗落在安全格、无后续操作:标空惩罚照常(现行不变);
- 插旗落在安全格、后续花行动点挖开:既无标空惩罚、也无该格资源奖励——插错旗的反悔从「3 点行动点全额反悔且保留奖励」变为「2 点行动点换零惩罚零奖励」,代价结构由「多花一遍拔旗钱」改为「放弃该格收益」。
**开放问题(评估前须过)**:① 挖开已插旗的格与连锁展开的交互——是否照常触发 0 格连锁;旗保留「遇旗即止」的链阻断器用途,但不可回收后临时阻断从可逆(插旗加拔旗两笔)变一次性(只插一笔),链阻断玩法的成本结构变化是否接受;② 「插过旗的格兑付降级」在战斗结算的统一表达口径——雷格侧标中不发与安全格侧资源奖励不发,是否归并为同一规则(旗格挖开、奖励资格作废);③ 行动经济「标中旗锚」契约量级是否随插旗风险面变大(不可反悔)而重校;④ 连带面清单——排雷玩法动作表与拒绝原因清单(「须先拔旗」原因退役)、行动经济价目表 flag_pull_ap_cost 行与「资格认雷格实例:拔掉重插」约束措辞、HUD 框架旗交互与教学口径。
**归属**:[排雷玩法](systems/排雷循环/排雷玩法.md)修订批(主责),[行动经济](systems/排雷循环/行动经济.md)与[战斗结算](systems/战斗循环/战斗结算.md)共裁
**状态**:待办(2026-09-18 用户提案登记,未评估)
### 行动经济
#### 拔旗定价复核
**现状**:拔旗 1 点是否为正确定价,旧体系留了实测义务(原型补丁验证),至今未执行。关联条目:见排雷玩法「插旗不可逆提案(禁拔旗 + 挖旗格兑付改判)」(2026-09-18 用户提案——提案落地则拔旗动作整体退役,本条实测义务随之失义收编;提案被否则本条维持)
**归属**:行动经济(原型补丁验证)
**状态**:待办
#### 刷新经济性监控(基线后定阈值)
**现状**:纯日志侧监控(不影响玩家体验):弃图率 / 每轮刷新率入试玩日志即可,预警阈值须有基线读数才能定——随验收读数重测批一起出基线,阈值数字届时与调参联动复核
@@ -96,29 +74,13 @@
**状态**:待办
#### 维度覆盖检查破缺
**现状**:信息、反制两维度现行无有效承载道具,加载后的覆盖检查在现行六件内容上无法通过。需拍板:检查对失义维度临时豁免,还是加速重定补齐
**归属**:魔法道具内容重定批(含数据校验面)
**状态**:已解决(2026-09-17)——用户拍板切片期道具内容整批后置、空清单为合法态:覆盖检查改为仅对非空清单执行([魔法道具](systems/排雷循环/魔法道具.md) v0.3),切片无道具表、检查天然不触发;六件内容与检查回归随魔法道具内容批(排垂直切片收尾后)
#### 失义道具的掉落投放
**现状**:获取与可用性本就解耦(可先捡后用);显影尘与地穴全图卷效果待重定期间是否继续进掉落池投放,未定
**归属**:地图战斗资源的奖励池修订批
**状态**:已解决(2026-09-17)——用户拍板切片期道具内容整批后置:切片期道具掉落面不存在(六件均不入掉落池,掉落频率归战斗奖励侧);失义两件的投放去留随魔法道具内容批重开时一并裁决(排垂直切片收尾后)
#### 探宝罗盘效果重定——两方案评估(2026-09-19 立项)
**现状**:探宝罗盘现行效果 = 预读 3×3 窗口内未开格的奖励身份;未开格微光方案拍板(2026-09-18,见[待办清单](../../06-待办清单.md)「未开格类型徽章呈现时机」)后,其信息价值被常显色光覆盖,效果需重定。用户 2026-09-19 立两方案评估:**方案一(色光永久化路线)**——周围 8 格类型色光作为基础常显能力人人永久享有,预读即常态,罗盘原效果彻底失义、需另找定位或退役;**方案二(可选天赋路线)**——探宝罗盘这类预测型秘宝改造成可选天赋/增强件(黑帝斯塔罗牌式:拿不拿、如何组合构成构筑面),预读从"道具一次性效果"变"天赋增强效果"。两方案不互斥(色光为基础、天赋在其上叠加更强预读),评估时一并考量。
**归属**:魔法道具内容重定批(排垂直切片收尾后)
**状态**:待办(2026-09-19 用户立项,两方案在案)
**状态**:待办(2026-09-19 用户立项,两方案在案;同日拍板:评估排期改至 **Alpha 阶段**,垂直切片期不讨论)
## 战斗循环
@@ -142,22 +104,6 @@
#### 护甲等级掷点形式与数值域
**现状**:掷点形式(d20 / 百面骰 / 区间均匀)未定;护甲等级数值域与减伤档位表(档数、折扣百分比)未定,折扣乘算与取整的精确时点(逐分量 / 合成后)未钉——定稿前敌人表/主角表的 armor_class 行值与结算表掷点参数均无值可填。关联条目:见本节「护甲等级掷点的随机流归属」、敌人系统「护甲等级(armor_class)行值未定」
**归属**:战斗结算提案,[难度曲线与Boss](systems/冒险循环/难度曲线与Boss.md)数值共裁
**状态**:已裁决(2026-09-16,数字即规范)——掷 1d20;掷点 ≥ 防守方护甲等级 + 攻击加成(结构位 attack_bonus,切片恒 0)→ 全额,低掷按缺口三档折扣(1-3 → ×0.75 · 4-7 → ×0.5 · 8+ → ×0.25,无零档);nat20 暴击该基础攻击分量 ×2 且恒全额(双方同规);任何攻击落地伤害 ≥1(全局 max(1,·),零值伤害行语义退役);armor_class 域 [0,999],主角 10 / 敌方首关 0(暂定)。判定式全 [#战斗结算 v0.10](systems/战斗循环/战斗结算.md) 与 registry settlement_table 条目,切片已落地(smoke 233 项全绿 + level_monte_carlo 复跑验收)
#### 护甲等级掷点的随机流归属
**现状**:rng_service 流封闭清单(board_gen / reward_roll / encounter)不含结算内掷点消费:新增封闭流须改代码并过 P1 支柱评审;复用 encounter 流则改变其"战斗实例化期恰一 scope"的绑定语义——两案未裁。关联条目:见本节「护甲等级掷点形式与数值域」、敌人系统「护甲等级(armor_class)行值未定」
**归属**:[数据配置](systems/表现与支撑/数据配置.md)与战斗结算共裁,随定稿批执行
**状态**:已裁决(2026-09-16)——新开 armor_roll 封闭流(互异奇盐 0xC2B2AE3D27D4EB2F),scope_event_binding = 每次掷点恰一 scope(逐次掷逐次取号、可逐位回放);黄金向量 m=42 scope0 = 4806095330042243845;rng_service 条目与切片已同步落地
### 敌人系统
#### 单拍行为环的体验验证(改型:技能池节奏体验验证)
@@ -168,14 +114,6 @@
**状态**:待办(2026-09-16 改型)
#### 行为环废除与蓄力拍退役
**现状**:确定性出招剧本(行为环:拍枚举/环指针/同种锁步/heavy_multiplier)已整体废除,改技能池开轮摇号出招;旧"蓄力→猛击"固定配对(哥布林弹珠拷贝)随批退役,蓄力改型为纯攻击增益技、Boss 池改独占增益技"硬化"——本条即原"删行为环取消蓄力拍"登记的收编关闭(2026-09-16 用户拍板,设计权威 docs/proposal-skill-pool.md v1.0)
**归属**:敌人系统(主 owner,v0.5)
**状态**:已解决(2026-09-16)——落批见敌人系统 v0.5 / 战斗结算 v0.11 / registry 同批登记
#### 伏击量纲与上限的联动复核
**现状**:附加值 3 为 provisional(量纲已定稿);上限与量纲、攻击基线存在联动,联调前须重跑方向性预检并同步 registry。**2026-09-17 数值压缩批注记**:magnitude +3 → +1(量纲未变,参见 `data/tables/status_effects.tres` ambush 行);压缩批后 magnitude=1 状态下,方向性预检须按新值重跑(cap=4 下右臂 m_amb × min(AP,cap) 量级同步压缩——量级当量重核随数值压缩批同步推进)
@@ -195,21 +133,13 @@
#### 同深度第二敌种与精英 / Boss 编码位
**现状**:现键结构(关卡序号 × 节点深度 × 敌种)无编码位;混编遭遇下伏击上限取哪行值未定义——现行结构恒单行值。关联条目:见关卡节点地图「精英与 Boss 编码位」(同一键结构缺口的不同面:彼处为改键裁决,此处为伏击上限取值语义)
**现状**:现键结构(关卡序号 × 节点深度 × 敌种)无编码位;混编遭遇下伏击上限取哪行值未定义——现行结构恒单行值。
**归属**:随[关卡节点地图](systems/冒险循环/关卡节点地图.md)定稿改键一并裁决
**状态**:部分收口(2026-09-17)——同层多遭遇问题已由关卡节点地图 v1.0 的**节点编号升级**消解(`node_depth` 语义 = 关卡内唯一节点编号,同层不同节点各查各行,键结构零改动);**不设精英 / Boss 编码位**(Boss = 最大编号节点,精英 P2 内容承载)。剩余面继续待办并改归属:同场多敌种(同一编号行集多行)的行集校验放开 + 混编遭遇伏击上限取值口径——归属**敌人表行集多行批(战斗侧,排技能池实施批落地后)**
#### 护甲等级(armor_class)行值未定
**现状**:字段已随 2026-09-15 护甲等级批登记(敌人表与主角表各一列);掷点形式、数值域与减伤档位未定,定稿前行值无值可填——裁决与联动登记见[战斗结算](systems/战斗循环/战斗结算.md)「待办」。关联条目:见战斗结算「护甲等级掷点形式与数值域」「护甲等级掷点的随机流归属」
**归属**:随掷点形式定稿批,投值归[难度曲线与Boss](systems/冒险循环/难度曲线与Boss.md)
**状态**:已裁决(2026-09-16)——域 [0,999];主角 10(暂定)、敌方首关六行 0(暂定)已入表。正式行值拆出为新待办:「敌方护甲等级(armor_class)正式行值」(下方)
#### 敌方护甲等级(armor_class)正式行值
**现状**:armor_class 字段与掷点判定已定稿落地(2026-09-16 护甲等级掷点批);现行全场 0(敌方攻击恒全额——掷点轴敌方侧未开工,AC 0 与 1 等效无效区)。**方向三裁决(2026-09-18 盘问会话,全已拍板)**:① 排期 = 验收读数重测之后、与曲线调参同批(AC 0 基线读数当参照系,投值效果可隔离对比);② 投值方向偏松保爽感——杂鱼 0~5 轻压平砍、精英/Boss 8~12 留掷点戏剧性(数字为方向带宽非正式值;AC 轴只咬主角普通分量约三成输出,充能与棋盘来源全绕过,收紧会把平砍推向装饰化);③ 关卡即台阶、不设跨关过渡,L2 关内深度梯度作投值原则(前松后紧、Boss 最高)。投值后须复算生存链区间(含暴击档与折扣档带宽)并同步 registry。关联条目:难度曲线与Boss「基线通关率越带,加难杠杆扫描未执行」(AC 行值投值与加难扫描合并调);关卡节点地图「首遇位教学敌可被棋盘火力一轮击杀」(首遇位低 AC 拉长轮数,互相成全)
@@ -242,18 +172,9 @@
**状态**:待办
#### 技能池新效应词汇批
**现状**:妨害技(对主角施减益)、固定值伤害分量、多段命中(每段一掷)——三类新效应词汇,技能行 P1 字段位已预留;启用随对应内容批
**归属**:[敌人系统](systems/战斗循环/敌人系统.md) 与[战斗结算](systems/战斗循环/战斗结算.md)共裁(P1)
**状态**:待办
#### 第二关技能池与投放
**现状**:第二关生效前提 = 深度轴行值填齐(关联条目:冒险循环「第二关深度轴行值未填充」);池内容(新技能/新敌种池)随投放批定,投放节奏归难度曲线
**现状**:第二关生效前提 = 深度轴行值填齐(该前提已于 2026-09-17 分支节点图批满足——L2 图版行集落地);池内容(新技能/新敌种池)随投放批定,投放节奏归难度曲线
**归属**:[难度曲线与Boss](systems/冒险循环/难度曲线与Boss.md)(P1)
@@ -311,16 +232,6 @@
### 地图战斗资源
#### 功能道具的正式渠道
**现状**:用户已定方向(更强力、更长周期的功能性道具经其他渠道加入),渠道设计未定;节点奖励([关卡节点地图](systems/冒险循环/关卡节点地图.md)域)是候选之一
**归属**:[关卡节点地图](systems/冒险循环/关卡节点地图.md)定稿批
**状态**:已解决(2026-09-17)——渠道拍板 = **节点奖励**([关卡节点地图](systems/冒险循环/关卡节点地图.md) v1.0):奖励节点兑付 = 获得一件功能道具并进入持有域;道具内容、持有域归属与使用窗口语义归[魔法道具](systems/排雷循环/魔法道具.md)内容重定批(排垂直切片收尾后);切片期道具内容整批后置,奖励节点零兑付直通为合法空态(本系统结构位衔接维持)
#### heal 负向直伤的量级锚
**现状**:现行值 power=1(2026-09-17 数值压缩批从 −4 压缩到 −1,原 −4 为 provisional 直觉值未过行动经济当量对账);量级锚登记因压缩批提早落地,对账义务随难度曲线与Boss 调参批执行(与挖掘风险不等式 / 清图支配性两破线一并重跑)
@@ -371,34 +282,10 @@
**状态**:待办
#### 样张验收标准未成文
**现状**:美术测试已登记的锁定物共四项(角色剪影 / 动画方案 / 战斗空间 / 敌人层绘制优先级插入位置),尚无一份成文的验收标准可对照执行(可参照 art-bible 格子样张的成文验收做法),正式组织测试前须补
**归属**:战斗表现(正式组织测试前补)
**状态**:已解决(2026-09-16)——验收标准成文于[战斗表现](systems/战斗循环/战斗表现.md)「一屏样张的验收标准」
## 冒险循环
### 关卡节点地图
#### 精英与 Boss 编码位
**现状**:敌人表按(关卡序号 × 节点深度 × 敌种)存放,现行键结构没有"精英 / Boss"的编码位;同深度要出第二个敌种,会被每坐标恰一敌种的加载校验拦下。关卡节点地图定稿时须与键结构改键一并裁决,走数据配置的接口漂移通道;棋盘生成侧的第三轴登记约定(Boss 走最大深度行、精英与 Boss 命名空间预留)同批重审。关联条目:见敌人系统「同深度第二敌种与精英 / Boss 编码位」(同一键结构缺口的不同面:此处为改键裁决,彼处为伏击上限取值语义)
**归属**:关卡节点地图定稿批(与键结构改键一并裁决)
**状态**:已解决(2026-09-17)——[关卡节点地图](systems/冒险循环/关卡节点地图.md) v1.0 定稿:`node_depth` 字段语义升级为关卡内唯一**节点编号**(表键与字段名零改动;单链特例下编号 = 旧战斗深度,切片零漂移),同层多遭遇由不同编号各查各行天然消解;**不设精英 / Boss 编码位**——Boss = 最大编号节点(图唯一终点),精英 P2 以内容方式承载(某编号节点配强敌行集);棋盘生成第三轴登记约定的 OQ6 强制重审同步兑现(键维持二元、Boss = 最大编号行、elite_/boss_ 命名空间预留维持)。同场多敌种(同一编号行集多行)与混编伏击上限取值拆归战斗侧——见敌人系统「同深度第二敌种与精英 / Boss 编码位」状态更新
#### 多敌数量的消费面
**现状**:敌人表的数量区间在开战时掷定(教学位节点同样掷骰)——这组既有登记的消费面复验归关卡节点地图定稿时核对
**归属**:关卡节点地图定稿批
**状态**:已解决(2026-09-17)——复验通过,零冲突收口:关卡层零消费数量(不预掷、不传递、不可见),数量区间掷定与消费全在战斗结算开战实例化期(encounter 封闭流);教学位不豁免口径(难度曲线与Boss v0.2 拍板)维持,并转登于[关卡节点地图](systems/冒险循环/关卡节点地图.md) v1.0 验收标准
#### 首遇位教学敌可被棋盘火力一轮击杀
**现状**:伤害道具批后棋盘火力(穿刺弹/魔法矢/爆裂粉尘,三型权重合计约一半格面)在轮末授予段即兑付、早于战斗段——最脆遭遇行(L1 地精一伙 4 血/只、L2 猎群 5 血/只、L2 首节点单熊地精 10 血)全在一轮火力射程内,实测 L2 首节点单熊地精第 1 轮被单独打死、主角全程未出手。**已拍板(2026-09-18 盘问会话)**:接受为合法结局——棋盘即武器库是核心幻想的自然延伸,Boss 战无秒杀退化风险(蛛化卓尔 58 血 vs 单轮火力约 10,已核数);压道具威力方案明确否决(会推翻伤害道具批刚定稿的读数基线)。遗留动作 = 教学价值修复:新敌种首遇位(L2 节点 0 熊地精 / 节点 4 巨蜘蛛)被一轮砸死则技能池教学价值归零,调法候选 = 首遇位抬血量或改双敌;与敌人系统「敌方护甲等级(armor_class)正式行值」的关内深度梯度红利互相成全(首遇位低 AC 拉长战斗轮数)
@@ -420,7 +307,7 @@
#### 两关序列未生效
**现状**:第二关深度轴行值填充批落地前,两关序列未生效,冒险以单关运行(合法态;扩展批已排 P1)。关联条目:见难度曲线与Boss「第二关深度轴行值未填充」(行值填充即本条生效前提)。注记(2026-09-17 分支节点图批):切片首页已加"关卡 2 试玩"直入口(测试模式 `start_level(2)`,与序列推进无关)——行值/图版前提已满足后,正式序列推进(关卡 1 通关接续关卡 2)仍未实现,本条保持登记。
**现状**:第二关深度轴行值填充批落地前,两关序列未生效,冒险以单关运行(合法态;扩展批已排 P1)。生效前提(第二关行值/图版填充)已于 2026-09-17 分支节点图批满足。注记(2026-09-17 分支节点图批):切片首页已加"关卡 2 试玩"直入口(测试模式 `start_level(2)`,与序列推进无关)——行值/图版前提已满足后,正式序列推进(关卡 1 通关接续关卡 2)仍未实现,本条保持登记。
**归属**:难度曲线与Boss(随第二关内容批);Alpha 验收条件登记
@@ -446,7 +333,7 @@
**归属**:[关卡节点地图](systems/冒险循环/关卡节点地图.md)修订批(商店房节点与图版结构,主责);GP 格面枚举归[地图战斗资源](systems/战斗循环/地图战斗资源.md);战斗掉落兑付归[战斗结算](systems/战斗循环/战斗结算.md)与[冒险结构](systems/冒险循环/冒险结构.md)共裁;成长节奏与验收带联动归[难度曲线与Boss](systems/冒险循环/难度曲线与Boss.md);GP 与钥石分工知会[元进度](systems/冒险循环/元进度.md)。
**状态**:待办(2026-09-18 用户提案登记,未评估)
**状态**:待办(2026-09-18 用户提案登记,未评估;2026-09-19 用户拍板:讨论与立项评估排期改至 **Alpha 阶段**,垂直切片期不讨论——与雷安差异化、冒险前配比两提案的合并立项评估同窗口)
### 难度曲线与Boss
@@ -474,47 +361,15 @@
**状态**:待办
#### 第二关深度轴行值未填充
**现状**:第二关仅有 D0 锚行,D1–D4 敌人行与棋盘行待填;这是两关序列生效的前提,填齐前冒险按单关运行(合法态)。关联条目:见冒险结构「两关序列未生效」
**归属**:难度曲线与Boss,随第二关内容批
**状态**:已解决(2026-09-17 分支节点图批)——L2 幽暗地域图版行集落地:节点编号升级为图版地址(D0–D8 九节点,战斗/Boss 七坐标在敌人表与棋盘表各有精确行,跨表校验强制);行值全部 provisional,投值归 难度曲线与Boss(行值表已回填,见该文档 v0.7)。措辞口径:原"D1–D4 深度轴"升级为图版编号(图形态下节点编号 = 关内唯一定位地址)。
#### 第二关的新内容投放缺口
**现状**:曲线规则要求每关至少投放一项新内容;三敌种已全部在第一关登场,原表述中第二关的"解锁新元素"绑定已从设计中移除的机制(见[不做清单](05-不做清单.md))——第二关投放什么待定,现行口径填不上。关联条目:见冒险结构「第二关"解锁新元素"的解锁语义」
**归属**:难度曲线与Boss提案,用户裁决
**状态**:已解决(2026-09-17 分支节点图批)——第二关投放 = 新敌种巨蜘蛛 giant_spider 与 Boss 蛛化卓尔精灵 drider(关间台阶"新敌种"半边)+ 既有敌种 bugbear 池新技能突刺("既有池新技能"另一半);新技能行撕咬(巨蜘蛛池)与毒爆(蛛化卓尔精灵专属池独占技)。关间台阶纪律两半均兑现。
#### 区间平移换算率数值未定
**现状**:"生命上限 +10 ≈ 多撑约 1 轮、攻击翻倍 ≈ 击杀区间约减半"是量级估算(provisional);作为元进度接入口,数值待实测标定。关联条目:见元进度「换算率接口的启用形态」(彼处为接口启用形态,此处为数值标定)
**现状**:"生命上限 +10 ≈ 多撑约 1 轮、攻击翻倍 ≈ 击杀区间约减半"是量级估算(provisional);作为元进度接入口,数值待实测标定。
**归属**:随[元进度](systems/冒险循环/元进度.md)定稿
**状态**:待办(2026-09-18 注记:接口启用形态已裁决——区间平移换算率启用、换算率表首版三行定稿,本条剩余面 = 首版三行的折算数值随模拟读数标定,护甲行强条目须按解锁后参数重测)
#### 换算率接口的启用形态
**现状**:难度曲线只预留了「解锁影响以换算率接入」的结构位;换算什么、怎么换,待难度曲线文档定稿口径明确后随设计批裁决。关联条目:见难度曲线与Boss「区间平移换算率数值未定」(彼处为数值标定,此处为接口启用形态)
**归属**:元进度设计批(待难度曲线文档定稿口径明确后随批裁决)
**状态**:已裁决(2026-09-18 元进度定稿批,用户拍板)——**区间平移换算率启用**:永久强化影响折算为通关率带平移量,判读口径不变;换算率表(registry 键 `meta_progression_conversion_table`)首版三行 = 生命上限 / 基础攻击 / 护甲等级,后续商品上架逐条补行;护甲行为**强条目**(验收读数须按解锁后参数重测);数值行读 `data/tables/`,标定随设计批。口径成文于[元进度](systems/冒险循环/元进度.md) v1.0
#### 代币与钥石的资源关系
**现状**:冒险结构的关卡大奖励已挂「代币记账 +10/关」,而钥石是拍板定名的元进度资源——两者是同一资源还是两种?若两种,记账与钥石如何分工?元进度定稿前必须裁决,这是元进度最重的设计缺口——元进度原登记。同事项另见冒险结构原登记「代币与钥石的关系」:钥石 = 关底 Boss 掉落的跨局资源(见[游戏概念](00-游戏概念.md));冒险结构的代币记账是关卡通关发的另一种记账,两者是否同一资源、如何汇入元进度。元进度「待设计问题清单」第 1 条「资源模型」(对应待办首条)同事项并入,补其注记:这是其余一切设计的前提
**归属**:元进度定稿主责,与冒险结构共裁
**状态**:已裁决(2026-09-17,用户拍板)——统一为**钥石**:冒险结构关卡大奖励的「代币记账 +10/关」即钥石入账(同一资源;渠道 = 关卡大奖励入账〔+10/关,provisional〕与关底 Boss 掉落),「代币」概念退役、措辞随批全仓清偿(冒险结构/元进度/数据配置/registry/architecture);钥石产出细则(Boss 重复击杀产出规则、两渠道量级配比)与解锁清单/定价仍归元进度定稿批——关联条目「钥石的重复获取」继续待办。
#### 三方向各自的解锁清单与定价
**现状**:三方向各自的解锁清单与定价:多少钥石换什么,属性、遭遇、道具池各自怎么铺。来源:元进度 待设计问题清单第 2 条
@@ -523,22 +378,6 @@
**状态**:部分收口(2026-09-18 元进度定稿批,用户拍板)——落地形态定稿:**营地三柜台**(属性锻造:生命上限 / 基础攻击 / 护甲等级,钥石直购可重复升级;道具工坊:六件辅助道具,首版全走关卡通关次数达标渠道、钥石直购价随定价批后补、最终双渠道并存;奖励格图鉴:结构位现定、格子内容排 Alpha 随地图战斗资源差异化批);定价曲线原则 = **几何递增**(起步价与公比数字待设计批配读数)。清单明细铺量与定价数字继续待办(本条剩余面)
#### 钥石的重复获取
**现状**:钥石由每层关底 Boss 看守,但同一 Boss 跨冒险被反复击杀时的产出规则没有来源。来源:元进度 待设计问题清单第 3 条
**归属**:元进度设计批
**状态**:已裁决(2026-09-18 元进度定稿批,用户拍板)——**首杀全量、重复杀固定小额**:不设递减曲线,存档只记首杀标记位;设计意图 = 深层关产出优势是长线驱动(配合定价几何递增),刷老关有小额意义但不构成无上限产出泵。两档数值与两渠道量级配比随设计批配读数投值(数值待办面并入「三方向各自的解锁清单与定价」剩余面);口径成文于[元进度](systems/冒险循环/元进度.md) v1.0
#### 天赋树方向的去留与形态
**现状**:归档索引登记过该词,是否保留、以什么形态保留,未定。来源:元进度 待设计问题清单第 4 条
**归属**:元进度设计批
**状态**:已裁决(2026-09-18 元进度定稿批,用户拍板)——**「天赋树」退役**:本作不存在树形结构;系统定名**永久强化**(元进度保留为系统族名),内容承载 = 营地三柜台条目(线性清单,无分叉无前置);「营地」为界面壳非机制实体。术语登记见 registry terminology「永久强化」;口径成文于[元进度](systems/冒险循环/元进度.md) v1.0
#### 解锁注入的实现口径
**现状**:冒险结构预留的「冒险开始参数面」如何承载各方向解锁,随设计批与对方联合修订。来源:元进度 待设计问题清单第 5 条
@@ -568,23 +407,6 @@
**状态**:待办
#### 呈现只读面契约登记缺口
**现状**:终局快照、战斗存活查询、奖励身份查询等呈现面函数已随切片实现,现行[战斗结算](systems/战斗循环/战斗结算.md)文档未登记对应对外契约
**归属**:[战斗结算](systems/战斗循环/战斗结算.md)修订批补登记
**状态**:已解决(2026-09-16)——五件呈现面(快照 / 谓词 / 身份查询 / 结算快照信号 / 战斗结束信号)登记于[战斗结算](systems/战斗循环/战斗结算.md)「呈现只读面」节
#### 意图徽标占位期符号小修
**现状**:切片意图徽标直接显示技能名(剧透强度);2026-09-18 用户拍板终稿方向 = 动画三档承载意图预告(常态=普攻预示 / 攻击技=发光举武器 / 重击硬化=蓄力或防御姿态,见 [美术资源依赖清单](../../art/art-assets-checklist.md) §2.3),终稿动画须样张后开工——占位期是否先把文字换成 ⚔/✦/蓄力三个符号堵住剧透,待拍板
**归属**:表现层升级批(占位期小修已先行落地)
**状态**:已解决(2026-09-18 占位符号落地:普通攻击「—」/ 伤害技 ⚔ / 增益技 ✦ / 重击类「蓄力」三档占位,技能名退出徽标;终稿三档动画仍归表现层升级批,见 [美术资源依赖清单](../../art/art-assets-checklist.md) §2.3)
#### 分辨率档位与棋盘格边长口径
**现状**:2026-09-18 用户拍板:格边长不取固定两档,按分辨率档位计算——最终呈现固定几个分辨率、窗口不可调;棋盘格子量增加则界面框架不变、格边长相应变小。[HUD框架](systems/表现与支撑/HUD框架.md)现行「两档定值 36/45px」冻结条款待按此修订;分辨率档位已定案(2026-09-18 用户拍板:**1280×800 + 1920×1080 两档**,后续调整走修订)
@@ -610,14 +432,6 @@
**归属**:冒险结构定稿批(随批建账)
**状态**:待办(仅剩冒险表半边)
#### 元进度表键结构未定
**现状**:占位表只登记了归属,键结构待元进度定稿
**归属**:[元进度](systems/冒险循环/元进度.md)
**状态**:已解决(2026-09-18 元进度定稿批)——键结构已登记:registry 新增 `meta_progression_conversion_table`(换算率表,首版三行目录 + 折算语义 + 强条目纪律,数值行读 `data/tables/`);定价表随元进度设计批建账;存档域四件(钥石余额 / 永久强化等级表 / 通关次数表 / Boss 首杀标记)随[存档序列化](systems/表现与支撑/存档序列化.md)「存档契约条目的登记方式」联合裁决落域
### 存档序列化
#### 存档契约条目的登记方式
@@ -629,14 +443,6 @@
**状态**:待办
#### 临时音效的覆盖清单
**现状**:垂直切片期临时音效覆盖哪些挂点、怎么验收,归档登记只有里程碑没有清单——动工前须补一份覆盖口径
**归属**:音频(动工前补覆盖口径)
**状态**:已解决(2026-09-16)——覆盖口径成文于[音频](systems/表现与支撑/音频.md)「临时音效的覆盖清单」
### 教学引导
#### 教学形态未定
@@ -645,7 +451,7 @@
**归属**:教学引导定稿批
**状态**:待办
**状态**:待办(2026-09-19 用户拍板:教学引导定稿批整体排期改至 **Alpha 阶段**,垂直切片期不讨论)
#### 因果教学顺序
@@ -653,7 +459,7 @@
**归属**:教学引导定稿批
**状态**:待办
**状态**:待办(2026-09-19 用户拍板:教学引导定稿批整体排期改至 **Alpha 阶段**,垂直切片期不讨论)
#### 图例面板的条目全集与分组方式
@@ -661,7 +467,7 @@
**归属**:教学引导定稿批
**状态**:待办
**状态**:待办(2026-09-19 用户拍板:教学引导定稿批整体排期改至 **Alpha 阶段**,垂直切片期不讨论)
#### 教学文案定稿权与本地化流程的分工
@@ -669,7 +475,7 @@
**归属**:教学引导与[设置与本地化](systems/表现与支撑/设置与本地化.md)共裁
**状态**:待办
**状态**:待办(2026-09-19 用户拍板:教学引导定稿批整体排期改至 **Alpha 阶段**,垂直切片期不讨论)
#### "再教一次"入口与图例面板兼任手册
@@ -677,7 +483,7 @@
**归属**:教学引导定稿批(待教学形态定稿后评估)
**状态**:待办
**状态**:待办(2026-09-19 用户拍板:教学引导定稿批整体排期改至 **Alpha 阶段**,垂直切片期不讨论)
### 设置与本地化
+12 -1
View File
@@ -2,7 +2,7 @@
本文登记**需要真人体验/观测才能下结论**的验证项,与 [06-待办清单](06-待办清单.md) 分工:06 登记"要拍板的事",本文登记"要玩过才知道的事"。每条注明**结论回流**路径——体验感受不满不等于当场改数:数值终值归其登记的归属批,体验反馈是该批的输入。
当前批次来源:**战斗数值四连批**(2026-09-18 ~ 09-19,版本锚 = 战斗结算 v0.16 / 增益状态 v0.9 / 地图战斗资源 v0.11)——① 战斗数值结构修复批(乘区接线四件套 + 削弱续时,v0.14)→ ② 甲效矩阵用户调参批(五格改值,v0.15,同日被③换装收编)→ ③ 甲效矩阵加法核换装批(百分比档 → 三档整数点数,v0.16,数值语言条款见 [01-核心循环](01-核心循环.md))→ ④ 充能退役批(主角攻击三分量模型退役 = 单分量输出,v0.16 追行,2026-09-19)。七项观测项语义全部仍有效(③ 的充能表述已随退役批注记);**观测预期仅作方向参考**——① Boss 战节奏的旧预期基于三分量输出与旧克制量纲,幅度以验收读数重测批为准。各批行为变化均过机器断言(冒烟读数见各批台账),本文只列**机器测不了、要人玩**的部分。
当前批次来源:**战斗数值四连批**(2026-09-18 ~ 09-19,版本锚 = 战斗结算 v0.16 / 增益状态 v0.9 / 地图战斗资源 v0.11)——① 战斗数值结构修复批(乘区接线四件套 + 削弱续时,v0.14)→ ② 甲效矩阵用户调参批(五格改值,v0.15,同日被③换装收编)→ ③ 甲效矩阵加法核换装批(百分比档 → 三档整数点数,v0.16,数值语言条款见 [01-核心循环](01-核心循环.md))→ ④ 充能退役批(主角攻击三分量模型退役 = 单分量输出,v0.16 追行,2026-09-19)。七项观测项语义全部仍有效(③ 的充能表述已随退役批注记);**观测预期仅作方向参考**——① Boss 战节奏的旧预期基于三分量输出与旧克制量纲,幅度以验收读数重测批为准。各批行为变化均过机器断言(冒烟读数见各批台账),本文只列**机器测不了、要人玩**的部分。2026-09-19 增补第 ⑧ 项(旗行为基线监控——不属四连批,独立采集轨道)。**同日新效应词汇批**(妨害技 + 必中附加分量,版本锚 = 战斗结算 v0.17 / 敌人系统 v0.10 / 增益状态 v0.10,设计权威 docs/proposal-status-vocabulary.md v1.0)——L2 Boss 蛛化卓尔精灵行为变更(毒爆 +必中毒分量、新妨害技蛛网束缚),验收读数重测批变量清单 +1。
## 行为变化速览(体验前先读)
@@ -13,6 +13,7 @@
| 增伤(安全格) | 只加成普攻段,充能段不吃 | 加成全部输出(乘区接线批;2026-09-19 充能退役后 = 单分量全吃) | 边挖边拿增伤时伤害明显变高 |
| 乏力(踩雷负向) | 无感(乘区没接线,死效果) | 输出合计 −25% | 踩雷后攻击真的变弱了 |
| 失衡(标错旗) | 承伤加深 +25% | 护甲等级 −2(更易被命中) | 惩罚变隐性——挨打概率上升而非每刀固定加深 |
| 卓尔 Boss 新招(新效应词汇批 09-19) | 毒爆 = 纯倍率伤害;Boss 无妨害手段 | 毒爆追加**必中毒分量** 1–3 点(不吃护甲骰不出暴击);新妨害技**蛛网束缚**:施放 → 主角护甲等级 −2 持续 1 个有效结算 | Boss 战更难更花——堆护甲被毒绕开、被网住后每刀都更容易吃全额 |
## 试玩观测项(按优先级)
@@ -59,6 +60,16 @@
弃图率 / 每轮刷新率随试玩日志采集;预警阈值须有基线读数才能定(2026-09-18 拍板:现在定是拍脑袋)——随验收读数重测批出基线,数字与调参联动复核。挖掘期当场刷新无结算发生,两读数均不影响对账。
### ⑧ 旗行为基线监控(插旗提案评估前置采集,2026-09-19 拍板)
纯日志侧采集、零玩法改动(与 ⑥⑦ 同形状)。**一个观测面服务两个待答问题**:① 现行拔旗 1 行动点定价是否合理(旧实测义务「拔旗定价复核」,2026-09-19 从 06 清单销项并入本项);② 「插旗不可逆提案(禁拔旗 + 挖旗格兑付改判——四情况与四开放问题,登记原文见 2026-09-18 台账 72 与 git 历史 06 清单条目,排期 Alpha)」的评估前置——四情况触发频率(尤其情况②④「插旗后又花行动点挖开」)由此数据定:若极低频,兑付改判的复杂度不值得、提案可被数据否掉;若高频,情况④语义就是承重墙。
- **观测什么**(读数全部可由现役 JSONL 日志推导,零新增埋点——动作行含 flag_place/flag_pull/被拒 dig、结算步流含 flag_hit/flag_miss 判定行〔带格坐标〕、ux_reject 行含结构化拒绝原因):① 误旗率 = flag_miss 判定行 ÷ flag_place 动作行(判定时点口径细节随首批读数钉死);② 挖旗格尝试率与被拒后路径分布(拔了挖开 / 拔了重标 / 放弃不纠错);③ 同轮插了又撤率(同一对结算行之间的插撤对);④ 拔旗次数每局。
- **语义锚(2026-09-19 实测锁定,smoke_all `_smoke_flag_misfire_dig_after_pull` 断言在案)**:误旗判定的负向惩罚与该格奖励**相互独立**——跨轮拔旗后挖开仍获正常正向奖励(惩罚并行、不吞奖励:判定走消费型授予、挖开走查询型身份快照,两通道互不吞并);同轮插撤被拔不判、零惩罚且奖励不受影响。观测②「拔了挖开」路径的收益语义以此为准。
- **预期**:无基线,首跑即基线——随真人试玩批次 2 起采(模拟画像不拔旗,此面只有真人数据有效)。
- **红灯信号**:误旗后放弃纠错占比异常高(1 点拔旗税劝退诚实纠错)或同轮插撤高频(误触摩擦过大)——两红灯仅作 Alpha 评估输入,**不在试玩现场改机制**。
- **结论回流**:读数 → Alpha 阶段插旗不可逆提案评估(四情况是否立项、拔旗定价终判);切片期玩法结构冻结维持(验收读数重测批前不动旗机制)。
## 验收读数重测批义务(给下一批的输入,非手工项)
- **Boss 战必须单独出列**(硬化行为变化——旧 Boss 承伤 84.8% 等读数全部作废)。
@@ -102,7 +102,7 @@
第二关的"新内容 = 既有池新技能"([技能池提案](../../../../docs/proposal-skill-pool.md)已定)投放时,改的是战斗侧行里引用的技能池内容——节点图结构原样不动,本文无需为投放留任何新结构位。
**节点奖励 = 功能道具的正式渠道**(2026-09-17 拍板,收编[06-待办清单](../../06-待办清单.md)「功能道具的正式渠道」):奖励节点兑付 = 获得一件功能道具并进入持有域。道具内容、持有域归属与使用窗口语义归[魔法道具](../排雷循环/魔法道具.md)内容重定批——切片期道具内容整批后置,奖励节点**零兑付直通是合法空态**,不是缺陷。
**节点奖励 = 功能道具的正式渠道**(2026-09-17 拍板,原 06 清单条目已解决移除):奖励节点兑付 = 获得一件功能道具并进入持有域。道具内容、持有域归属与使用窗口语义归[魔法道具](../排雷循环/魔法道具.md)内容重定批——切片期道具内容整批后置,奖励节点**零兑付直通是合法空态**,不是缺陷。
### 关卡收束点:先清库、后宣布
@@ -155,14 +155,14 @@
| ambush 伏击 | 敌方攻击附带额外伤害 | 敌方 | 见 `status_effects.tres` ambush 行 | 时限/上限读表 / 叠加 | 踩雷 / 标空旗反噬 |
| weaken 削弱 | 敌方攻击被削弱(同名重复标中只刷新剩余次数、层数恒 1) | 敌方 | 见 `status_effects.tres` weaken 行(取值域 [60,85],取负生效) | 时限读表 / 刷新(2026-09-18 续时定案) | 标中旗 |
| enrage 暴走 | 敌方攻击提升 | 敌方 | 见 `status_effects.tres` enrage 行 | 时限/上限读表 / 叠加 | 标空旗反噬 |
| off_guard 失衡 | 主角护甲等级降低(AC 轴——掷点判定阈值下调、更易被命中;2026-09-18 换装,原百分比承伤池已退) | 主角 | 见 `status_effects.tres` off_guard 行 | 时限/上限读表 / 叠加 | 标空旗反噬 |
| off_guard 失衡 | 主角护甲等级降低(AC 轴——掷点判定阈值下调、更易被命中;2026-09-18 换装,原百分比承伤池已退) | 主角 | 见 `status_effects.tres` off_guard 行 | 时限/上限读表 / 叠加 | 标空旗反噬 / 敌方妨害技(2026-09-19 新效应词汇批——蛛网束缚载体,duration 由技能行覆盖) |
| sapped 乏力 | 主角输出降低(weaken 型负向,hero_offense 池) | 主角 | 见 `status_effects.tres` sapped 行 | 时限/上限读表 / 叠加 | 雷格负向(2026-09-15 格面资源批) |
| empower 蓄力 | 敌方输出倍率增益(enemy_output 池——蓄力技载体;幅度读表) | 敌方 | 见 `status_effects.tres` empower 行 | 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 加算、不封顶不保底。
削弱行是当量锚在容器侧的数据落点:标中旗的收益折算成统一价值后,必须严格高于最低档主角增益——"标中旗必须比随便挖一格更值",否则没人愿意插旗。这条锚的契约归[行动经济](../排雷循环/行动经济.md),对照验收归[战斗结算](战斗结算.md);伏击行的固定值量纲定义与惩罚上限锚归[敌人系统](敌人系统.md)。暴走与失衡两行是[战斗结算](战斗结算.md)标错反噬机制(标空旗的三选一确定性惩罚)在容器侧的数据落点:三行内容与载体裁决归它,本表只承载行值(失衡已换装 AC 轴不入池——2026-09-18 结构修复批)。
削弱行是当量锚在容器侧的数据落点:标中旗的收益折算成统一价值后,必须严格高于最低档主角增益——"标中旗必须比随便挖一格更值",否则没人愿意插旗。这条锚的契约归[行动经济](../排雷循环/行动经济.md),对照验收归[战斗结算](战斗结算.md);伏击行的固定值量纲定义与惩罚上限锚归[敌人系统](敌人系统.md)。暴走与失衡两行是[战斗结算](战斗结算.md)标错反噬机制(标空旗的三选一确定性惩罚)在容器侧的数据落点:三行内容与载体裁决归它,本表只承载行值(失衡已换装 AC 轴不入池——2026-09-18 结构修复批)。**失衡另有第二来源**:敌方妨害技(2026-09-19 新效应词汇批——蛛化卓尔精灵"蛛网束缚",敌方技能施放来源、duration 由技能行 buff_duration 覆盖)——容器零新语义,同构实例照常受理;乏力 sapped 留作妨害第二词汇(暂无载体)。
## 依赖与输出
@@ -256,3 +256,4 @@ 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.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"(削弱叠层读法退役);"叠层不续命"对削弱不再适用,行动经济联动句随之失效;调参表一次性/叠层上限两行措辞同步 |
| v0.10 | 2026-09-19 | **技能池新效应词汇批(用户拍板——设计权威 docs/proposal-status-vocabulary.md v1.0,与 敌人系统 / 战斗结算 / registry / 切片代码同批)**:off_guard(失衡)新增第二来源类别 = 敌方技能施放(妨害技"蛛网束缚"的容器落点——首实装于 L2 Boss 蛛化卓尔精灵池;duration 由技能行 buff_duration=2 覆盖 = 1 个有效结算,empower/fortify 同款口径);容器语义零改动——同构实例、side 路由照常,妨害技零新状态行(乏力 sapped 留作妨害第二词汇,暂无载体) |
@@ -162,7 +162,7 @@ percent 类(每结算、每层): E = |层数 × 行值| ÷ 100 ×
② AC 判断值:掷点(骰面读表)vs 防守方护甲等级 → 档位折扣;天然最大面 → 暴击 ×暴击倍率(读表)(量程上下限)
③ 命中伤害 H = (A × a) + 克制修正点数 (克制修正点数读 settlement.tres 甲效矩阵——加法点数非百分比;敌打主角不查矩阵恒中性——矩阵消费面 = 主角侧)
── 以下既有链不动 ──
增益池乘区(含敌方防御池)→ 伏击附加(后置加法、必中全额、不吃 AC)→ 向下取整 → 伤害下限 max(1,·)
增益池乘区(含敌方防御池)→ 伏击附加(后置加法、必中全额、不吃 AC)→ 向下取整 → 伤害下限 max(1,·) → 必中附加分量 rider(2026-09-19 新效应词汇批——伤害技 rider_mult 字段:max(伤害下限, floor(攻击基线 × rider_mult)),独立必中加项、不进乘区、不出暴击;无字段 = 无此步)
```
主角先手攻击由三个分量逐项取整后相加:基础分量(攻击力经增益修正,可被池封顶压到零;**类型 = 主角 `attack_type` 表值**——2026-09-18 营地扩展前置批:基础攻击量与攻击类型抽象分离,基础分量不再恒属普通,缺省 normal 向后兼容)、穿刺分量、魔法分量。**攻击类型是伤害的属性轴**——它只决定这个分量查甲效表的哪一行,定义里不含任何棋盘来源。分量各自查表后取整相加;甲效表把攻击类型与敌方护甲类型交叉成一张 3×3 **克制修正矩阵(加法点数)**——2026-09-18 加法核换装:每个分量在掷点/暴击折算取整后 **+ 克制修正点数**(原百分比乘区退役):
@@ -177,21 +177,21 @@ percent 类(每结算、每层): E = |层数 × 行值| ÷ 100 ×
主角攻击 = 单一基础分量(2026-09-19 充能退役批):量 = 攻击力基线(表值),类型 = 主角表 `attack_type`(营地永久强化换型 = 改字段;未来冒险前参数面承接"按关配型"的策略位)。原"普通 + 穿刺/魔法充能三分量"模型整体退役——挖掘期与战斗期之间不再有弹药供给线,克制应对从局内攒桶改为冒险前配型 + 棋盘火力(穿刺弹/魔法矢等直伤奖励道具,消费面不变)。
**护甲等级掷点:必中、非归零,只吃基础攻击分量**(2026-09-16 定稿落地,判定式与全部数值已拍板;判定对象措辞随敌人技能池批改述)。防守方由此多了一条数值轴——护甲等级(数据键 `armor_class`):攻击永远命中,没有 miss、没有零收益白回合;只有吃掷点的分量在掷点低于防守方护甲等级时按减伤档位打折,档位再重也不归零。判定式:攻击结算时掷单骰(骰面读表),掷点 ≥ 防守方护甲等级 + 攻击加成 → 全额;掷点 < 护甲等级按缺口(护甲等级 − 掷点)查减伤档位表打折——边界与档值读 `settlement.tres` 减伤档位表,三档皆非零档。暴击:天然最大面(读表)使该次基础攻击分量 ×暴击倍率(读表),双方同规,且天然最大面恒全额(暴击与折扣互斥;天然最大面〔nat20〕暴击是掷点层概念,与技能重击〔池技能〕严格区分——两层不得混述)。伤害下限:任何攻击落地伤害至少 damage_floor(读表,全局 max(damage_floor, ·))——"被减伤归零 v=0"零值伤害行语义随批退役,重档折扣的攻击行在行文本记"被压制"。掷点范围:只有基础攻击分量吃掷点——主角先手攻击的普通分量,敌方技能的基础伤害分量(= 攻击基线 × 技能伤害倍率,普通攻击倍率 1 为特例);无伤害分量的技能(增益类)不掷不折;棋盘来源一律无视护甲等级——伏击附加、爆裂、清障炸药、奖励即时伤害全部必中全额不掷,这是本机制的边界切口,与"奖励/惩罚必中"同构。护甲等级(数值轴,掷点打折)与护甲类型(属性轴,克制修正)严格分离:护甲类型不做护甲等级映射,克制修正点数读表、消费面不变,两概念在文档、表字段与代码键中不得混用。数值载体:主角与敌方护甲等级行值读 hero / enemy 表的 armor_class 列(正式行值归怪物设定批,登记[待办清单](../../06-待办清单.md)),ac_up(护甲强化)在其上加算(幅度/层数读 `status_effects.tres`)。攻击加成(`attack_bonus`)为结构位预留字段,切片恒 0,未来归元进度 / 武器附魔投值。掷点时机在结算战斗段内、每次基础攻击伤害计算时判定,消费 `armor_roll` 封闭流(逐次掷逐次取号,可逐位回放)。
**护甲等级掷点:必中、非归零,只吃基础攻击分量**(2026-09-16 定稿落地,判定式与全部数值已拍板;判定对象措辞随敌人技能池批改述)。防守方由此多了一条数值轴——护甲等级(数据键 `armor_class`):攻击永远命中,没有 miss、没有零收益白回合;只有吃掷点的分量在掷点低于防守方护甲等级时按减伤档位打折,档位再重也不归零。判定式:攻击结算时掷单骰(骰面读表),掷点 ≥ 防守方护甲等级 + 攻击加成 → 全额;掷点 < 护甲等级按缺口(护甲等级 − 掷点)查减伤档位表打折——边界与档值读 `settlement.tres` 减伤档位表,三档皆非零档。暴击:天然最大面(读表)使该次基础攻击分量 ×暴击倍率(读表),双方同规,且天然最大面恒全额(暴击与折扣互斥;天然最大面〔nat20〕暴击是掷点层概念,与技能重击〔池技能〕严格区分——两层不得混述)。伤害下限:任何攻击落地伤害至少 damage_floor(读表,全局 max(damage_floor, ·))——"被减伤归零 v=0"零值伤害行语义随批退役,重档折扣的攻击行在行文本记"被压制"。掷点范围:只有基础攻击分量吃掷点——主角先手攻击的普通分量,敌方技能的基础伤害分量(= 攻击基线 × 技能伤害倍率,普通攻击倍率 1 为特例);无伤害分量的技能(增益/妨害类)不掷不折;棋盘来源一律无视护甲等级——伏击附加、爆裂、清障炸药、奖励即时伤害、技能必中附加分量(rider,2026-09-19)全部必中全额不掷,这是本机制的边界切口,与"奖励/惩罚必中"同构。护甲等级(数值轴,掷点打折)与护甲类型(属性轴,克制修正)严格分离:护甲类型不做护甲等级映射,克制修正点数读表、消费面不变,两概念在文档、表字段与代码键中不得混用。数值载体:主角与敌方护甲等级行值读 hero / enemy 表的 armor_class 列(正式行值归怪物设定批,登记[待办清单](../../06-待办清单.md)),ac_up(护甲强化)在其上加算(幅度/层数读 `status_effects.tres`)。攻击加成(`attack_bonus`)为结构位预留字段,切片恒 0,未来归元进度 / 武器附魔投值。掷点时机在结算战斗段内、每次基础攻击伤害计算时判定,消费 `armor_roll` 封闭流(逐次掷逐次取号,可逐位回放)。
EV 参考数不入正文(派生读数,需要时按判定式与现行表值自行复算);旧 defense_up 的减伤墙已整体退役换装为 AC(无双轨,见版本历史)。微调旋钮 = 档位边界与档位值,不动护甲等级值。换装点锚定:基准 AC(读 hero 表)自带的方向性偏移与[难度曲线与Boss](../冒险循环/难度曲线与Boss.md)已登记的加难杠杆扫描合并处理;其生存链区间模型按掷点带宽口径复核(带宽含暴击档与折扣档),"零红档"验收保留。
**结论**:先合成、再取整、全程非负;吃掷点分量必中非归零、低掷按档位折扣、天然最大面暴击恒全额(倍率读表)、落地伤害保底 ≥ damage_floor(读表);溢杀丢弃、治疗封顶、死亡即时判定。
```
敌方一次技能攻击 = max(damage_floor, floor( 掷点档位技能基础分量 + 伏击附加 ) × 主角防御乘数 × 敌方输出乘数 );伏击为后置加法,不进乘区、不掷不折
敌方一次技能攻击 = max(damage_floor, floor( 掷点档位技能基础分量 + 伏击附加 ) × 主角防御乘数 × 敌方输出乘数 ) + 必中附加分量 rider(若有——2026-09-19 新效应词汇批:max(damage_floor, floor(攻击基线 × rider_mult)),伏击为后置加法不进乘区不掷不折,rider 同族且更后置);增益/妨害技 = 0 伤害施放行(不掷不折、不兑付伏击),妨害状态按状态行 target_side 落主角
主角一次攻击 = max(damage_floor, floor( 攻击合计 × (100 + 主角输出乘数池合成值) ÷ 100 × (100 + 敌方防御乘数池合成值) ÷ 100 ) )——hero_offense(增伤/乏力载体)与 enemy_defense(硬化载体)两池串乘在攻击合计之后(2026-09-19 充能退役后合计 = 单分量)
粒度口径:增益池乘区作用在攻击合计层——合计为个位数时百分比档存在粒度取整(如合计 2 点 ×0.75 → 1,实际约 −33% 大于名义 −25%),为已知行为、接受现状;2026-09-18 数值语言拍板后百分比仅保留增益池 / AC 折扣档 / 暴击三处既有粗档,终值与量纲复核归状态层重设计批
乘数 = 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 伤害行)
吃掷点分量 = 主角普通分量 / 敌方技能基础伤害分量;穿刺、魔法、增益施放与棋盘来源伤害不掷不折
吃掷点分量 = 主角普通分量 / 敌方技能基础伤害分量;穿刺、魔法、增益/妨害施放、必中附加分量与棋盘来源伤害不掷不折
治疗量 = min( 当前生命 + 表值, 生命上限 )
```
@@ -308,7 +308,8 @@ EV 参考数不入正文(派生读数,需要时按判定式与现行表值
- 完美排雷:零误标且至少一面标中时第二份兑付恰一次并发高光行;出现误标或零标中则无高光;计数换图重置。
- 开轮摇号:每轮恰摇一次(首轮同样;轮内刷新换图不重摇);摇定后兑现前死亡 → 本拍技能作废(零敌方行动行)、不进冷却不进保底计数;已兑现技能进冷却、保底计数按执行结果更新。
- 战斗段次序:主角先手后逐敌"按摇定技能行兑现、结算伤害、执行上报"各恰一次;主角倒下立即短路,剩余敌人不行动。
- 护甲等级掷点:吃掷点分量(主角普通分量、敌方技能基础伤害分量)逐次掷单骰(骰面读表)——掷点 ≥ 防守方护甲等级 + 攻击加成全额兑付;低掷按缺口查减伤档位表(边界与档值读表),档位不设零档;天然最大面暴击该分量 ×暴击倍率(读表)且恒全额;穿刺/魔法分量与棋盘来源伤害(伏击附加、爆裂、清障炸药、奖励即时)及增益施放不掷不折。
- 护甲等级掷点:吃掷点分量(主角普通分量、敌方技能基础伤害分量)逐次掷单骰(骰面读表)——掷点 ≥ 防守方护甲等级 + 攻击加成全额兑付;低掷按缺口查减伤档位表(边界与档值读表),档位不设零档;天然最大面暴击该分量 ×暴击倍率(读表)且恒全额;穿刺/魔法分量与棋盘来源伤害(伏击附加、爆裂、清障炸药、奖励即时)、必中附加分量及增益/妨害施放不掷不折。
- 新效应词汇(2026-09-19):伤害技 rider_mult 行的每次攻击,伤害行携带 rider 值且终值 = max(伤害下限, 主分量链结果) + rider(停手轮零池零伏击下逐拍精确复算);rider 键只随带 rider_mult 的技能行出现;妨害技 = 施放行 + 状态按 target_side 落主角(投掷阈值随行可读下调),冷却/保底/死亡作废三闸无一例外。
- 伤害下限与留档:任何攻击落地伤害 ≥ damage_floor(读表),全流水零 v=0 伤害行、零"被减伤归零"行;掷点读数、护甲等级与档位随伤害行留档,天然最大面(nat20)行带暴击标记。
- 数值边界:伤害下限保底后全程无零值/负值伤害;溢杀丢弃不转移;治疗封顶不溢出。
- 出口分发:先判主角倒下(负)再判敌清空(胜);停手与耗尽轮恒同图,清图轮才允许换图。
@@ -342,3 +343,4 @@ EV 参考数不入正文(派生读数,需要时按判定式与现行表值
| v0.15 | 2026-09-18 | **甲效矩阵用户调参批(用户逐格给值,事实源 settlement.tres 五格改值、四格不动,零代码)**:普通行 ward 100→120 / heavy 100→50;穿刺行 light 100→80 / ward 150→120 / heavy 50→80;魔法行与普通-轻甲不动——「克制/中性/被克」三档结构与「普通行恒中性」退役,改五档(克制 / 弱克制 / 中性 / 弱被克 / 被克,档值读表)。矩阵消费面成文 = 主角侧(奖励直伤道具 / 主角攻击三分量 / 充能分量),敌方攻击不查矩阵、主角 armor_type 轴仍休眠(v0.13「敌方攻击恒 normal 档故中性」的归因改述——轴休眠是结构性的非数值性的)。语义列两行同步(穿刺「破不开重甲」重压语义弱化为与轻甲同档折损)。切片同批:settlement.tres 批注、冒烟矩阵三行断言改五档读数 + 乘区接线穿刺分量 3→2(3 点 ×80% 取整)随批改形,冒烟 300 项 0 失败 + 四探针 PASS;registry(enemy/hero armor_type 两行注记)与 敌人系统 / 难度曲线与Boss 三档措辞同步 |
| v0.16 | 2026-09-19 | **充能退役批(用户拍板,与切片代码 / registry / 07 清单 / README 同批)**:主角攻击三分量模型(普通 + 穿刺/魔法充能)整体退役,回归单分量——量 = 攻击基线、类型 = 主角表 attack_type;挖格批/旗判定批的充能计数条款删除、充能供给表与 charge_grants 调参行删除、乘区公式与粒度口径改"攻击合计";退役理由 = 克制策略归冒险前配置(营地换型/未来冒险前参数面),局内不再有挖掘攒弹药的第二伤害供给;保留面 = 攻击类型属性轴与棋盘奖励触发源的抽象分离、奖励直伤道具(穿刺弹/魔法矢)的克制直伤消费不变。切片同批:battle_orchestrator 攻击段单分量化 + _charge_points/_charge_counts/round_facts 充能键删除、DamageMath.charge_component → counter_component 改名(奖励直伤唯一消费方)、settlement.tres charge_grants 键与 schema 校验删除、冒烟充能断言组退役改形(乘区接线单分量基线 100、标中正向兑付行断言、恢复点探针换种子 42)、冒烟 293 项 0 失败 |
| v0.16 | 2026-09-18 | **甲效矩阵加法核换装批(用户拍板数值语言——小整数加法核,与 01-核心循环 数值语言条款 / registry / 切片代码同批)**:量纲 percent→整数点数,三档(克制 +1/中性 0/被克 −1)九格改值〔normal 0/+1/−1、pierce −1/+1/0、magic 0/−1/+1〕,pierce×heavy = 0 中性为用户特别拍板;五档词表与百分比乘区退役(v0.15 的五档表随批短命退役,理由=个位数刻度假粒度);分量算术改述=折算取整后加修正点数;缺项回退 100→0;奖励直伤行 payload 键 effectiveness 保留、值语义改点数;池乘区/AC 折扣档/暴击保留百分比并成文粒度口径(数值语言条款:百分比仅此三处既有粗档+开发侧工具);切片同批:settlement.tres/settlement_table.gd/damage_math/battle_orchestrator/smoke/registry/01-核心循环同步 |
| v0.17 | 2026-09-19 | **技能池新效应词汇批(用户拍板——设计权威 docs/proposal-status-vocabulary.md v1.0,与 敌人系统 / 增益状态 / registry / 切片代码同批)**:① 三乘法链尾部 +必中附加分量 rider(伤害技 rider_mult 字段:max(伤害下限, floor(攻击基线 × rider_mult))——后置加法、必中全额、不进乘区不出暴击、价位锚 0.75 = AC 折扣档最轻档;"固定值伤害"改形——固定值不随基线缩放与共享技能表前提冲突);② 增益/妨害技 = 同族施放行(0 伤害不掷不折不兑伏击),妨害状态按状态行 target_side 落主角——零新授予通道;③ 必中家族清单 +rider(掷点边界切口);④ 公式行/吃掷点行/验收标准三处同步 + 新效应词汇验收条目(rider 逐拍精确复算 + rider 键封闭 + 妨害落主角端到端);⑤ 实装面 = 仅 L2 Boss 卓尔(毒爆 +rider、新行蛛网束缚妨害→失衡),其余敌种不动;多段命中经用户拍板退役不入词汇表 |
@@ -106,15 +106,16 @@
|---|---|---|
| skill_id | 全部 | 主键,池条目引用键 |
| display_name | 全部 | 玩家可见名(明细行与动画共用) |
| type | 全部 | 封闭枚举 {普通攻击, 伤害, 增益};新类型走本文修订 |
| type | 全部 | 封闭枚举 {普通攻击, 伤害, 增益, 妨害}——**新效应词汇批 2026-09-19 由三扩四**(设计权威 docs/proposal-status-vocabulary.md v1.0;多段命中经用户拍板退役不入枚举);新类型走本文修订 |
| damage_mult | 仅伤害 | 伤害倍率;域 [1.1, 16] provisional。普通攻击恒 1、不可配 |
| rider_mult | 仅伤害、可省 | **必中附加分量(2026-09-19 新增)**:域 (0, 1],缺省无字段 = 无附加;分量值 = max(伤害下限, floor(攻击基线 × rider_mult))——随施放者攻击基线缩放,后置加法、必中全额、不进乘区、不出暴击(伏击附加同族);价位锚 0.75 = AC 折扣档最轻档"不掉档的稳定伤害" |
| cooldown_beats | 全部 | 施放后连续 N 拍不可摇中;普通攻击恒 0、不可配 |
| buff_ref / buff_duration | 仅增益 | 效果引用(指向状态效果行)与增益持续回合数 |
| P1 字段位 | — | 触发条件、命中段数、目标数、固定值分量——随对应后置批加列 |
| buff_ref / buff_duration | 仅增益与妨害 | 效果引用(指向状态效果行)与持续回合数;**落点由状态行 target_side 路由**(增益 → 敌方侧 / 妨害 → 主角侧,施放类 side 守卫加载拒绝)——妨害技零新授予通道 |
| P1 字段位 | — | 触发条件、命中段数、目标数——随对应后置批加列(原"固定值分量"位已由 rider_mult 实装收编——2026-09-19;多段命中「命中段数」保留以防复活) |
普通攻击也是一行技能行,两条域校验锁死它的特殊性:倍率恒 1、冷却恒 0——想配倍率或冷却的就不是普攻,是伤害技。技能伤害存倍率、不存固定值:伤害 = 施放者攻击基线 × 技能倍率——同一行"重击",不同敌种按各自攻击基线缩放 = 基线 A × 技能倍率 M(行值读 enemy.tres / skills.tres),深层强化行自动缩放,这是共享技能表成立的前提;固定值分量若将来需要,是加字段的事(P1)。增益技带效果引用与持续回合,百分比天然按施放者同池生效,无缩放问题。
普通攻击也是一行技能行,两条域校验锁死它的特殊性:倍率恒 1、冷却恒 0——想配倍率或冷却的就不是普攻,是伤害技。技能伤害存倍率、不存固定值:伤害 = 施放者攻击基线 × 技能倍率——同一行"重击",不同敌种按各自攻击基线缩放 = 基线 A × 技能倍率 M(行值读 enemy.tres / skills.tres),深层强化行自动缩放,这是共享技能表成立的前提;**固定的绝对值伤害不满足该前提**(不随基线缩放、跨关稀释——Brotato 教训),"固定值伤害"的合法形态是**必中附加分量 rider_mult**(×攻击基线的必中小倍率,2026-09-19 实装)。增益技带效果引用与持续回合,百分比天然按施放者同池生效,无缩放问题;妨害技同构,落点由状态行 target_side 路由到主角。
池构成纪律(加载校验,违规拒绝入表):**每池恰一行普通攻击**(普攻冷却恒 0 → 可摇集合恒非空,"空池不可能"由结构保证,最坏情况怪物平砍等待——那是玩家的反打窗口而非死拍);**每池增益类技能 ≤1**(非 RPG,怪物连出不同增益显得呆);池条目 skill_id 悬空致命;权重 > 0、冷却 ≥ 0。
池构成纪律(加载校验,违规拒绝入表):**每池恰一行普通攻击**(普攻冷却恒 0 → 可摇集合恒非空,"空池不可能"由结构保证,最坏情况怪物平砍等待——那是玩家的反打窗口而非死拍);**每池增益类技能 ≤1**(非 RPG,怪物连出不同增益显得呆);**每池妨害类技能 ≤1**(2026-09-19 新效应词汇批同构纪律);池条目 skill_id 悬空致命;权重 > 0、冷却 ≥ 0。
两道闸(表值 provisional,投值归[难度曲线与Boss](../冒险循环/难度曲线与Boss.md),行值读技能表):
@@ -178,7 +179,7 @@ Boss 专属身份 = 专属池承载:独占技能 + 权重轮廓(现行:酋
| 摇中 | 挖掘期呈现 | 结算揭示 |
|---|---|---|
| 普通攻击 | 零表示——完全不可预测 | 明细行"普通攻击(暴击/被压制)" |
| 特殊技 | 技能动画占位(攻击系 / 增益系不同)——纯类型级提醒,不预告技能名与数值 | 明细行具名技能 + 数值 |
| 特殊技 | 技能动画占位(攻击系 / 增益系 / 妨害系三族——2026-09-19 妨害系 ☠ 新增)——纯类型级提醒,不预告技能名与数值 | 明细行具名技能 + 数值 |
| nat20 暴击 | 无前置表示(掷点层,与技能重击严格区分) | 明细行"(暴击)"标注 |
即:普攻完全不可预测;特殊技有一次类型级预告,不可撤销,但给"继续挖还是停手"的决策依据。旧环"下一拍全程亮出(意图徽标 + 环点)"的预告粒度随行为环退役。技能动画的攻/防系映射归[战斗表现](战斗表现.md),敌人卡摇定动画位归[HUD 框架](../表现与支撑/HUD框架.md),本系统只锁上面这张三档规格。
@@ -186,7 +187,7 @@ Boss 专属身份 = 专属池承载:独占技能 + 权重轮廓(现行:酋
| 规格 | 含义 |
|---|---|
| 池与权重不公开 | 无技能池界面、无权重数值露出;实例池的可见面 = 摇定结果本身 |
| 类型级预告 | 特殊技只预告攻/防系类型,不预告技能名与数值 |
| 类型级预告 | 特殊技只预告攻击/增益/妨害系类型,不预告技能名与数值 |
| 映射每局恒定 | 动画映射以技能类型为键,跨局不重掷 |
| 数字只在明细 | 预告面是类型级动画,数字面是结算明细(具名技能 + 数值) |
| 预告时序锁定 | 开轮摇定即可见,挖掘期全程;轮内刷新换图不重摇 |
@@ -229,7 +230,7 @@ Boss 专属身份 = 专属池承载:独占技能 + 权重轮廓(现行:酋
| P1 | 情境条件触发器(低血触发防御、玩家停手时偷袭技等) | 载体 = 技能行触发条件字段加列;登记[待办清单](../../06-待办清单.md) |
| P1 | 个体化变体池(A 型好斗 / B 型守势、精英专属池) | 共识点 A 的 A2 案;登记[待办清单](../../06-待办清单.md) |
| P1 | 全局特殊间隔旋钮 | 特殊技背靠背实测仍嫌时的备用闸;登记[待办清单](../../06-待办清单.md) |
| P1 | 新效应词汇批(妨害技:对主角施减益;固定值分量;多段命中每段一掷) | 技能行字段位已预留;登记[待办清单](../../06-待办清单.md) |
| P1 | 新效应词汇批(妨害技 + 必中附加分量已实装 2026-09-19——设计权威 docs/proposal-status-vocabulary.md v1.0,实装面 = L2 Boss 卓尔;多段命中经用户拍板退役) | 妨害类型 + rider_mult 字段已落地;登记[待办清单](../../06-待办清单.md)(已解决移除,去向见台账) |
| P1 | 敌种名录扩容与投放节奏(含第二关池与投放) | 投放节奏是关卡命脉,归[难度曲线与Boss](../冒险循环/难度曲线与Boss.md) |
| P1 | 单体寻址("只打某一个敌人"的目标指定) | 首个单体效果上线时随批裁决归集语义与呈现 |
| P2 | 敌方技能图鉴 / 学习呈现(玩家侧技能知识系统) | 池不公开口径下的进阶信息面;登记[待办清单](../../06-待办清单.md) |
@@ -309,3 +310,4 @@ Boss 专属身份 = 专属池承载:独占技能 + 权重轮廓(现行:酋
| v0.8 | 2026-09-18 | **营地扩展前置批 + 护甲类型重配(用户指令,与战斗结算 / registry / 切片代码同批)**:① hero 表新增 armor_type / attack_type 两根可配置轴(缺省 light / normal;主角字段表同步两行)——护甲类型轴入矩阵消费面(敌方技能攻击类型轴未开前数值中性),基础攻击类型轴 = 量与类型抽象分离的营地换型落点;② 敌种护甲类型行值重配(数据面):关卡 1 全部轻甲(食人魔酋长 heavy→light、熊地精两行 ward→light),关卡 2 除 Boss 蛛化卓尔精灵 heavy→ward(魔法甲)外全部轻甲(熊地精四行 ward→light,巨蜘蛛既有 light 不动);现行克制三角读数效果 = L1 克制轴中性化、L2 仅 Boss 战非中性(魔法矢 ×150 / 穿刺弹 ×50 对 Boss) |
| v0.9 | 2026-09-18 | **甲效矩阵用户调参批同步(零代码,事实源 settlement.tres 五格改值——详见[战斗结算](战斗结算.md) v0.15)**:主角字段表 armor_type 行注记归因改述——轴休眠的理由由「敌方攻击恒 normal 档故中性」(依赖普通行恒 100 的旧数值结构)改为「矩阵消费面 = 主角侧、敌方攻击不查克制矩阵」(结构性,与数值无关),轴生效仍待敌方技能攻击类型批。历史注记:v0.8 行「魔法矢 ×150 / 穿刺弹 ×50 对 Boss」与当时矩阵(穿刺×魔法甲=150 / 魔法×魔法甲=50)正反互倒,系当批笔误,按历史不改写留档,正确读数见战斗结算 |
| v0.7 | 2026-09-17 | **数值纪律收口批:正文与调参表 knob 现行值改指路存根(事实源 `data/tables/*.tres` 与 registry),2 处失同步值修正**——共享技能表示例"熊地精 9×2=18"改符号化"基线 A × 技能倍率 M(行值读 enemy.tres / skills.tres)";蓄力语义"施加'攻击×2'状态""×2 遇 ×2 = ×4"改"施加 empower 状态(幅度读 status_effects.tres)",两层乘法组合语义保留符号表述 |
| v0.10 | 2026-09-19 | **技能池新效应词汇批(用户拍板——设计权威 docs/proposal-status-vocabulary.md v1.0,与 战斗结算 / 增益状态 / registry / 切片代码同批)**:① 技能类型枚举三→四(+妨害 debuff——对主角施减益的 0 伤害施放动作,字段复用 buff_ref/buff_duration,落点由状态行 target_side 路由〔增益 → 敌方侧 / 妨害 → 主角侧,施放类 side 守卫加载拒绝〕,执行与增益技同族施放行语义——不掷不折不兑付伏击);② 伤害技新字段 rider_mult(必中附加分量——"固定值伤害"改形:固定值不随基线缩放与共享技能表前提冲突,必中小倍率承载"躲不掉的稳定伤害");③ 池构成纪律 +每池妨害 ≤1;④ 意图三档特殊技预告扩三族(攻击系 ⚔ / 增益系 ✦ / 妨害系 ☠);⑤ 三词收敛两词——多段命中经用户拍板退役(无防御磨损体系,无对照机制),P1 字段位「命中段数」保留;⑥ 实装面 = 仅 L2 Boss 蛛化卓尔精灵(venom_burst + rider_mult 0.75;新行 web_snare 蛛网束缚 debuff→off_guard,首发载荷 = 失衡〔用户拍板〕,乏力 sapped 留作第二词汇),其余敌种不动 |
+16 -4
View File
@@ -129,7 +129,7 @@ entities:
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: 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 改指路存根
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 归 状态层重设计批〕
off_guard: { display_name: 失衡(我方护甲等级降低), target_side: hero, unit: ac, duration_settlements: 1, max_stack: 16, stack_policy: stack, source_class: flag_miss / enemy_skill_cast, 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 归 状态层重设计批〕;**2026-09-19 新效应词汇批:来源类别 +敌方技能施放**(妨害技 web_snare 蛛网束缚的容器落点——duration 由技能行 buff_duration=2 覆盖)
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 改指路存根
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〕
@@ -292,12 +292,14 @@ entities:
fields:
skill_id: String 全表唯一(池条目引用键——悬空引用加载致命〔config_db.validate_skill_pool_links〕)
display_name: String 非空(玩家可见名——明细行与动画共用,本地化归 设置与本地化)
type: enum {basic, damage, buff}(封闭枚举 = 普通攻击/伤害/增益;新类型走 敌人系统 修订)
type: enum {basic, damage, buff, debuff}(封闭枚举 = 普通攻击/伤害/增益/妨害——**新效应词汇批 2026-09-19 由三扩四**〔设计权威 docs/proposal-status-vocabulary.md v1.0〕;多段命中经用户拍板退役不入枚举;新类型走 敌人系统 修订)
damage_mult: float [1.1,16] 仅伤害技(provisional——**存倍率不存固定值**:伤害 = 施放者攻击基线 × 倍率,三乘法链第一乘〔战斗结算〕;普通攻击恒 1 不可配——域校验锁死)
rider_mult: float (0,1] 仅伤害技可配、缺省无(**2026-09-19 新效应词汇批新增**——必中附加分量:分量值 = max(damage_floor, floor(攻击基线 × rider_mult)),后置加法、必中全额、不进乘区不出暴击〔伏击附加同族〕;价位锚 0.75 = AC 折扣档最轻档"不掉档的稳定伤害"——可掷分量期望 AC10≈0.80/AC12≈0.76 对表;现行 venom_burst=0.75)
cooldown_beats: int [0,99](现行值读 data/tables/skills.tres;普攻恒 0 不可配——域校验锁死,空池不可能的结构前提;施放后连续 N 拍不可摇中,技能冷却与增益持续两计时器分账)
buff_ref / buff_duration: 仅增益技(效果引用 → StatusEffectTable 活行 + 持续回合;悬空引用加载致命;现行 charge→empower / harden→fortify,buff_duration=2 = 1 个有效增益拍〔先兑付后衰减含施放当轮〕;施放时长由技能行覆盖状态行时长——战斗结算 apply_effect duration_override)
buff_ref / buff_duration: 仅增益/妨害技(效果引用 → StatusEffectTable 活行 + 持续回合;悬空引用加载致命;**落点由状态行 target_side 路由**——buff 必须 enemy 侧 / debuff 必须 hero 侧〔施放类 side 守卫 2026-09-19,装载序以 loaded 表显式入参〕;现行 charge→empower / harden→fortify / web_snare→off_guard〔妨害首发,用户拍板〕,buff_duration=2 = 1 个有效增益拍〔先兑付后衰减含施放当轮〕;施放时长由技能行覆盖状态行时长——战斗结算 apply_effect duration_override)
pity_threshold: int [1,99] 全局单旋钮(现行值读 data/tables/skills.tres——保底 M:连续 M 拍执行普攻 → 下拍必出特殊技〔特殊技内按权重、不受冷却限制〕;地精类单特殊技低权重池受保底支配)
mvp_content: 七行 = attack 普通攻击(basic)· lunge 突刺(damage)· charge 蓄力(buff→empower)· heavy 重击(damage)· harden 硬化(buff→fortify,Boss 池独占——增益 ≤1 纪律下旧蓄力拍不进 Boss 池)· bite 撕咬(damage)· venom_burst 毒爆(damage)——倍率 / 冷却 / 持续等现行值**不列于本 registry**,读 data/tables/skills.tres(bite / venom_burst 2026-09-17 分支节点图批新增,本条 2026-09-18 补收编)
pool_discipline: 每池恰一行普攻 · 每池增益 ≤1 · **每池妨害 ≤1(2026-09-19 新效应词汇批新增)**(config_db.validate_skill_pool_links 加载拒绝——pool_composition / cast_side 两族)
mvp_content: 八行 = attack 普通攻击(basic)· lunge 突刺(damage)· charge 蓄力(buff→empower)· heavy 重击(damage)· harden 硬化(buff→fortify,Boss 池独占——增益 ≤1 纪律下旧蓄力拍不进 Boss 池)· bite 撕咬(damage)· venom_burst 毒爆(damage,**2026-09-19 +rider_mult 0.75 必中毒分量**)· web_snare 蛛网束缚(debuff→off_guard,妨害首发——卓尔池独占、实装面收窄仅 L2 Boss)——倍率 / 冷却 / 持续等现行值**不列于本 registry**,读 data/tables/skills.tres(bite / venom_burst 2026-09-17 分支节点图批新增,本条 2026-09-18 补收编;venom rider / web_snare 2026-09-19 新效应词汇批新增)
referenced_by: [敌人系统, 战斗结算, 难度曲线与Boss, 数据配置]
- name: reward_table
@@ -779,3 +781,13 @@ entities:
# 五档百分比词表退役);enemy/hero armor_type 两行注记同步;
# ③ 切片同批:settlement.tres 九格/settlement_table.gd 域与哨兵/damage_math 两函数改加法/battle_orchestrator
# _counter_delta 改名与回退 0/smoke 矩阵断言改形;元进度投值语言锁 flat;GP 提案档位词汇免议注记落 06 清单。
# 2026-09-19 技能池新效应词汇批(用户拍板——设计权威 docs/proposal-status-vocabulary.md v1.0;与 敌人系统 /
# 战斗结算 / 增益状态 / 06-待办清单 / 切片代码同批;06 清单「技能池新效应词汇批」解决移除):
# ① skill 条目:type 枚举三→四(+debuff 妨害——多段命中经用户拍板退役不入枚举);新增 rider_mult 字段
# (必中附加分量——固定值伤害改形:不通用/跨关稀释析出,价位锚 0.75 = AC 折扣档最轻档);池纪律 +
# 每池妨害 ≤1;施放类 side 守卫(buff→enemy 侧 / debuff→hero 侧,cast_side 族);
# ② status_effect:off_guard 来源类别 +敌方技能施放(妨害技落点——既有词汇复用,零新状态行);
# ③ 卓尔内容(全部 provisional 投值归 难度曲线与Boss):venom_burst +rider_mult 0.75(atk3 → 毒 2 点);
# web_snare 蛛网束缚新行(debuff→off_guard,duration 2 = 1 有效拍,冷却 4,池权重 2 → 卓尔池 6/2/2/2);
# 实装面 = 仅 L2 Boss 卓尔,其余敌种不动(用户拍板);
# ④ 冒烟 306 项 0 失败 + 四探针 PASS;L2 Boss 行为变更并入验收读数重测批变量清单(07 头注)。
+1 -1
View File
@@ -145,7 +145,7 @@ F4 原值(普通 ≤20% / Boss ≤50% 生效 max_hp)复验改在满配格 at
### 5.3 登记义务落点(本文档零改动既有文件;以下为落批后的收编义务)
- **难度曲线与Boss「期望值带」章节**:收编新带族(§0 生死带前提、b 分位带、g 通关率 gate、c 盲挖不设线、通关余量带保留注记、F4 满配格归属、f① 四级阶梯),注明"等 AC 批落批后收编"。同批改写 v0.4 掷点带宽段的"EV 中性引入"口径——实际落地规格(AC10 → 敌方输出 EV −21.25%)非 EV 中性,两口径冲突须以落批实现为准。
- **06-待办清单.md**:①「护甲等级掷点形式与数值域」「护甲等级掷点的随机流归属」「护甲等级(armor_class)行值未定」→ AC 落批后转已解决并注明去向(d20 / AC10 / 档位表);②「基线通关率越带」按 a 改写,同时升级为 f① 行值加难批的执行义务;③「真人通关率标定」接 d=① 管道;④「完美策略档的结构性加难杠杆」重估——b 的新带下"承伤带对完美档无分辨力"的前提已反转,该条目大概率转已解决/失义。
- **06-待办清单.md**:①「护甲等级掷点形式与数值域」「护甲等级掷点的随机流归属」「护甲等级(armor_class)行值未定」→ 已收口:2026-09-16 AC 批裁决成文于战斗结算 v0.10 与 registry settlement_table 条目,原 06 清单三条件目已按「解决即移除」口径删除(2026-09-19 清理批);②「基线通关率越带」按 a 改写,同时升级为 f① 行值加难批的执行义务;③「真人通关率标定」接 d=① 管道;④「完美策略档的结构性加难杠杆」重估——b 的新带下"承伤带对完美档无分辨力"的前提已反转,该条目大概率转已解决/失义。
- **registry entities.yaml**:AC 行值与档位参数由 AC 批会话收编,非本清单义务,仅衔接注记。
- 附带发现(不修,随收编批一并处理):难度曲线与Boss 的「待拍板」存根链接指向 `06-待拍板清单.md`,实际文件已更名 `06-待办清单.md`,断链。
+86
View File
@@ -0,0 +1,86 @@
# proposal-status-vocabulary(技能池新效应词汇批——设计权威)
- 版本:v1.0(2026-09-19 用户拍板定稿)
- 设计权威地位:同 docs/proposal-skill-pool.md v1.0 先例——本文档为技能行「妨害类型 + 必中附加分量」的语义权威;GDD(敌人系统 / 战斗结算 / 增益状态)与 registry / 切片实现以本文为锚同步。
- 上位纪律:小整数加法核(01-核心循环 数值语言条款);技能基线倍率 = 合法乘法位(台账 79 登记义务随批兑现)。
## 0. 三词收敛为两词(用户拍板 2026-09-19)
原登记三类新效应词汇,经对答会话逐项裁决:
| 原词汇 | 裁决 | 去向 |
|---|---|---|
| 妨害技(对主角施减益) | ✅ 立项 | 新增第四技能类型,见 §1 |
| 固定值伤害分量 | ✅ 改形立项 | **必中附加分量**(§2)——"固定值不通用/跨关稀释"析出此改形:固定值不随攻击基线缩放,与共享技能表"行值随敌种缩放"前提冲突(Brotato 稀释教训镜像);真正的设计需求是"躲不掉的稳定伤害",由必中小倍率承载 |
| 多段命中(每段一掷) | ❌ 退役 | 用户拍板:本作无防御磨损体系,多段失去"打高甲更疼"的对照机制,不实装;P1 字段位「命中段数」保留以防将来复活 |
实装面收窄(用户拍板):**仅第二关 Boss 蛛化卓尔精灵(drider)**——毒爆挂必中毒分量 + 新妨害技;其余敌种不动。
## 1. 妨害技(debuff)
### 1.1 语义
敌方对**主角**施加负面状态的特殊技。执行形态与增益技同族:**0 伤害施放行**(cast)——不掷不折、不兑付伏击("本轮喂的伏击逢施放拍不兑现"的读怪奖励保留);状态授予经唯一进货口进容器,**落点由状态行 `target_side` 路由**(妨害技引用 hero 侧行 → 自动落在主角),容器语义零改动。
### 1.2 字段与校验
- 技能类型枚举 {普通攻击 basic, 伤害 damage, 增益 buff} **+ 妨害 debuff**(封闭枚举修订——敌人系统结构冻结项,本批即修订批)。
- 字段复用 `buff_ref` / `buff_duration`(效果引用 + 施放持续回合;技能冷却与增益持续两计时器分账的既有口径不变)。适用面措辞从"仅增益"扩为"增益与妨害"。
- 域校验:妨害技禁配 damage_mult / rider_mult;必带 buff_ref;buff_duration ∈ [1,99]。
- 跨表校验(ConfigDB):buff 行的引用必须指向 **enemy 侧**状态行;debuff 行的引用必须指向 **hero 侧**状态行(side 守卫,防反向挂接)。
- 池构成纪律 +1:**每池妨害技 ≤1**(与"每池增益 ≤1"同构——非 RPG,怪物连出不同妨害显得呆)。
- 妨害技是特殊技:进保底闸(M 拍普攻必出特殊技)、受冷却闸管辖(既有两闸零改动)。
### 1.3 载荷词汇(复用既有主角侧减益行,零新状态行)
| 词汇 | 状态行 | 轴 | 现有来源 | 妨害技引用 |
|---|---|---|---|---|
| 失衡 | off_guard | AC 轴(掷点阈值下调) | 标空旗反噬 | ✅ **首发**(用户拍板) |
| 乏力 | sapped | hero_offense 池(输出打折) | 雷格负向 | 第二词汇(暂不实装) |
首发 = **失衡**:蛛网束缚的"被缠住、破绽百出"读法与 AC 轴联动(更易被护甲骰全额命中),与必中毒分量的"躲不掉"构成 Boss 战的压制组合。
### 1.4 意图呈现
特殊技类型级预告从两族扩三族:攻击系 ⚔(朱红)/ 增益系 ✦(蓝)/**妨害系 ☠(紫)**。终稿动画归表现层样张后(美术清单 §2.3 同批口径),本批为占位符号。
## 2. 必中附加分量(rider)
### 2.1 语义
伤害技可携带的第二伤害分量:**必中全额**——不吃护甲骰(无折扣无暴击)、后置加法(伏击附加同族:不进乘区)。
### 2.2 字段与数值
- 伤害技新字段 `rider_mult`,域 (0, 1],缺省无(无字段 = 无附加分量)。非伤害类型禁配。
- 分量值 = `max(damage_floor, floor(施放者攻击基线 × rider_mult))`——随施放者攻击基线缩放(共享技能表前提保持),下限保底防 atk=1 出零点哑弹。
- **价位锚(用户质询后修正)**:rider_mult = **0.75**,锚定 AC 折扣档表最轻档——"永远不会掉档的稳定伤害"。可掷分量期望对表:主角 AC10 ≈ 0.80、AC12 ≈ 0.76;必中 0.75 ≈ 中甲期望命中质量,天然克制堆护甲但不构成无脑溢价。×0.5 案(永久第三档)经用户质询否决。
### 2.3 结算位置与明细
```
敌方伤害技终值 = max(damage_floor, 主分量链结果) + rider
主分量链结果 = 现行三乘法链(基线×倍率 → AC 掷点折扣/暴击 → +克制点数〔敌方恒中性〕 → 伏击附加 → 池乘区 → floor)
rider = max(damage_floor, floor(atk × rider_mult))——必中、必全额、不进乘区、不出暴击
```
明细:零新行型——rider 随该技能的**伤害行**留档(payload `rider` 键),行文本后缀「+附加N(必中)」。
### 2.4 首实装
毒爆 venom_burst(蛛化卓尔精灵独占):damage_mult 2.5 不变,`rider_mult = 0.75`——atk 3 时毒分量 = 2 点(atk 区间 2–4 → 毒 1–3 点随开战掷定值缩放)。
## 3. 卓尔内容行(全部 provisional,投值归 难度曲线与Boss)
| 项 | 值 | 说明 |
|---|---|---|
| 毒爆 venom_burst | + rider_mult 0.75 | §2.4 |
| 蛛网束缚 web_snare(新行) | type debuff · buff_ref off_guard · buff_duration 2 · 冷却 4 | duration 2 = 1 个有效结算(empower/fortify 先兑付后衰减含施放当轮口径);失衡幅度沿用 off_guard 行值(AC 轴 −2,provisional) |
| 卓尔池 | 普攻 6 / 重击 2 / 毒爆 2 / **蛛网束缚 2** | 权重 provisional;主分量 EV 权重期望 1.67 → 1.25,加蛛网束缚的零伤害拍与毒分量后待抽样复核 |
## 4. 验收要点
- 妨害技施放行落行、off_guard 落主角(投掷阈值 10 → 8 随行可读);冷却/保底/死亡作废三既有闸对妨害技无一例外。
- 毒爆伤害行 rider 键随行;停手轮(零池零伏击)下终值 = max(1, 掷点档位主分量) + rider 逐拍精确复算。
- 加载校验拒绝:池妨害 >1 / 妨害缺 buff_ref / rider_mult 越域 / 非伤害技带 rider_mult / 妨害引用 enemy 侧状态。
- 冒烟全绿 + 四探针 PASS;≥20 遍模拟试玩 + 日志数据分析(用户验收标准);L2 Boss 行为变更并入验收读数重测批变量清单(07 头注)。
+11 -1
View File
@@ -12,7 +12,7 @@
## 当前状态快照(收口批先更新本节,再追加台账;≤10 行)
- **更新于**:2026-09-19(第7项用户裁示:技能缺漏不修、Alpha 立全怪物技能池数值验证条目;倍率vs加法体系判断已呈——不违背但须圈边界;06 清单 75 条)
- **更新于**:2026-09-19(旗行为基线前置采集批:拔旗定价复核+插旗不可逆提案两条自 06 清单销项〔用户拍板标记完成〕,观测面以 07-体验验证清单⑧承接——玩法零改动〔冒烟补旗奖励语义断言 11 项,见台账 83〕,清单 55→53 条)+(并行对答会话)**技能池新效应词汇批已执行收口**:妨害技 debuff 新类型 + 必中附加分量 rider_mult 0.75〔多段命中退役〕,实装面 = 仅 L2 Boss 卓尔〔毒爆+毒分量、蛛网束缚→失衡〕;冒烟 306 项 0 失败+四探针 PASS;800 局模拟试玩 L2 基线 90%→80% 死因集中 Boss、L1 回归一致;文档 v0.17/v0.10/v0.10+registry+07+README+06 条目移除;台账 82)
- **在飞**:表现层升级批未启动(前置 = 美术清单 P0 样张 + 用户看图拍板敌人卡形态);两份美术清单合并待拍板;多批工作区未提交
- **已完成**:06 待办清理批(清单 87→80 条;三裁决落地:变异死分支删/快照域进 Alpha 首批/未开格微光拍板;排雷玩法节新增禁拔旗提案登记)+ 冒险内成长提案登记批(GP 临时资源+商店房提案登记 06 清单关卡节点地图节,未评估;台账 74)
- **已完成**:**数值语言拍板批(加法核,台账 75)**——全项目数值语言=小整数加法核(模板 C 骨架+模板 A 成长语言)成文 01-核心循环;甲效矩阵 percent→三档点数 +1/0/−1(pierce×heavy=0 用户拍板,今晨五档 percent 调参〔台账 71〕随批退役);增益池/AC 折扣档/暴击保留百分比+粒度口径成文;元进度/GP 投值语言锁 flat;冒烟 300 全绿+四探针 PASS+flat vs percent A/B(L1 逐值全同、L2 Boss 战基础攻击 +1 生效 hp+100 档 50→60%)
@@ -211,3 +211,13 @@
78. **6-10 用户裁决落地批(2026-09-19,本会话——继 77 号回滚后用户逐项真实拍板,未提交)**:**第6项 删除**——第二关"解锁新元素"条目移除("解锁什么"已有事实答案;层名回填冒险结构这半步用户裁示"后续有其他改动再整体做设计");**第8项 并入+新立项**——资源预读与推理的边界条目删除、未开格徽章条目加指认句(预读边界按微光方案定);魔法道具节新立项「探宝罗盘效果重定——两方案评估」:①色光永久化路线(8 格色光人人常显,罗盘退役)②可选天赋路线(预测秘宝改黑帝斯塔罗牌式可选天赋增强件)——两方案不互斥,归魔法道具内容重定批;**第9项 Alpha 验收条件**——两关序列条目状态改写:垂直切片期可接受现状(测试直入口),**列入 Alpha 版本验收条件**,正式推进与接口漂移 ①②③⑥⑦ 对齐随 Alpha/正式侧冒险结构批;**第10项 设置独立于存档(用户两分制)**——系统级设置(音量/画面)一安装一份、删游戏才消失、不进存档;存档只存该档生涯数据。落文:设置与本地化.md 三处(独立存储定案)+存档序列化.md 边界表补行(系统级设置不入档)+06 条目删除。**第7项 待二轮**——用户要求 L1/L2 池对比后再定夺,报告已呈:数据面纪律全满足(每池恰一普攻/增益≤1/保底 M=4 全局)、EV 台阶方向正确(L1 1.00~1.11 → L2 1.11~1.67);两候选缺漏待裁:① L2 Boss 卓尔池无增益技(普6/重2/毒2,硬化未入池——registry"硬化=Boss 池独占载体"语义张力,有意设计还是遗漏待裁)② 敌人系统.md 池构成表只有 L1 三敌种,L2 三敌种(巨蜘蛛/重击手/卓尔)语义模板未成文(曲线 v0.7 有修订记录、正文表缺席)。06 清单 74 条。
79. **第7项裁示+Alpha 验证立项批(2026-09-19,本会话,未提交)**:用户裁示技能缺漏不做当期修复(后续可能全怪物技能池整体重设计,切片期只保正常游玩);06 新立项「Alpha:全怪物技能池数值验证与合理性设计」(难度曲线与Boss 主责+敌人系统共裁;范围含池构成/权重/倍率/冷却/保底/EV 台阶/克制覆盖+倍率取整抖动复核+卓尔增益技与文档 L2 行两缺漏复核;时点 Alpha 随验收重测同窗口)。**倍率 vs 加法体系判断**(已呈用户):不违背——加法纪律管修正层(克制/增益/强化走 ±N),技能倍率属基线差异层(伤害公式第一乘"基线×倍率");保留的两点技术理由 = 元进度 flat 攻击成长下倍率自动缩放(flat 附加会被基线成长稀释——Brotato 教训镜像)、个位数基线下倍率结果仍小整数(atk 2~3 × 1.5~2.5 → 3~8);两点须管住 = 数值语言根基批开工时把"技能基线倍率"登记为第四个合法乘法位(现行拍板文字"百分比仅保留三处"未点名它,字面张力)、取整抖动归 Alpha 验证条目。
80. **待办四事项排期改 Alpha+技能池新效应词汇批讨论批(2026-09-19,本会话——讨论场,未提交)**:用户从 06 清单点名五项讨论"是否可进入开发设计",裁决第 1–4 项(插旗不可逆提案/探宝罗盘两案评估/冒险内成长 GP+商店房提案/教学引导定稿批五条)**排期改 Alpha 阶段、垂直切片期不讨论**——06 清单八处状态行加排期注记(插旗/GP/罗盘三状态行+教学五条),清单条数不变。第 5 项**技能池新效应词汇批**进入方案讨论:底账已核(敌人系统/战斗结算/增益状态/skills.tres——技能行 P1 字段位=触发条件/命中段数/目标数/固定值分量;敌方现行词汇仅"倍率伤害+自增益"两类;池纪律增益≤1、意图三档、伏击附加必中全额不吃 AC 为既有锚点)。**三词汇方案已呈待拍板**——妨害技载体三案推 A(新增第四技能类型「妨害」+池纪律妨害≤1+意图预告新族;B 复用增益反用会挤占增益≤1 且预告误导;C 伤害技挂 rider 复合技方向刚随行为环批退役不回头)、首发作用轴推乏力复用(hero_offense 池+refresh 续时沿削弱定案;破防新行 hero_defense 空池留作第二词)、固定值分量推"伤害技附加成分+必中全额"(与伏击/棋盘直伤同族惯例)、多段推"每段独立倍率+每段一掷+伏击附加每行动一次"并认账两项数字后果(逐段取整损耗/逐段保底抬升);首用载体推 L1 不动、首发随第二关内容批。数值终值全归状态层重设计批/内容批;拍板后下一步=出 proposal 文档(proposal-skill-pool 同款设计权威)→ 四文档+registry 修订 → 实施批(schema 休眠字段+冒烟)。
81. **06 清单解决态残留清理批(2026-09-19,本会话——用户逐条过目后批准「已解决/已裁决即删」,未提交)**:删除 20 条解决态残留(=77 号台账 B 段裁决单全单,与 2026-09-18「解决即移除」新口径对齐)——地形变异 2(维度覆盖检查破缺/失义道具的掉落投放)· 战斗结算 2(护甲等级掷点形式与数值域/掷点的随机流归属)· 敌人系统 2(行为环废除与蓄力拍退役/护甲等级〔armor_class〕行值未定)· 地图战斗资源 1(功能道具的正式渠道)· 战斗表现 1(样张验收标准未成文)· 关卡节点地图 2(精英与 Boss 编码位/多敌数量的消费面)· 难度曲线与Boss 6(第二关深度轴行值未填充/第二关的新内容投放缺口/换算率接口的启用形态/代币与钥石的资源关系/钥石的重复获取/天赋树方向的去留与形态)· HUD框架 2(呈现只读面契约登记缺口/意图徽标占位期符号小修)· 数据配置 1(元进度表键结构未定)· 存档序列化 1(临时音效的覆盖清单);裁决本体与去向全在 owner 文档成文(战斗结算/关卡节点地图/元进度/音频/魔法道具等版本史在案),registry 版本批注与各 GDD 版本史按「历史不改写」豁免。**连带悬空指认清偿 6 处**——06 内 4(同深度第二敌种条目删「精英与 Boss 编码位」指认 / 区间平移换算率条目删「换算率接口」指认〔状态行 09-18 注记已在,零信息损失〕/ 两关序列与第二关技能池两条改「前提已于 2026-09-17 分支节点图批满足」口径)+ 关卡节点地图.md 功能道具渠道行去 06 指认 + docs/acceptance-ap6-ac.md §5.3① 护甲掷点三条目提法改指战斗结算(B 段裁决单连带动作)。**乙类 2 条保留待裁**(状态仍写待办、但所问已有更新裁决):叠层不续命的读感〔削弱半边已被 09-18 续时定案覆盖,删或收窄待用户判〕/ 第二关技能池与投放〔两半边已被分支节点图批消解,剩余投放节奏归敌人系统 P1 行+Alpha 技能池验证条目承载〕。**清单 75→55 条**(待办 47/部分收口 6/拍板待执行 2,解决态残留清零);并行讨论场会话 8 处排期注记 hunks(插旗/探宝罗盘/资源配比/教学五条)零触碰已核对共存;06 与 active.md 两文件均带并行在飞改动,提交时按 hunk 归属核对收编。
82. **旗行为基线前置采集批(2026-09-19,本会话——用户拍板「按方案改+两条标记完成+观测面记录 07 而非 06」,未提交)**:**裁决**——拔旗定价复核的实测义务与插旗不可逆提案(四情况兑付改判,Alpha 排期)的行为基线**同源采集**,观测面归 07-体验验证清单(「06 管要拍板的事、07 管要玩过才知道的事」既定分工),两条自 06 清单删除(55→53 条;棋盘生成节清空留节头〔空节先例=设置与本地化〕)。**07 新增观测项⑧「旗行为基线监控」**:四读数(误旗率=flag_miss 判定行÷flag_place 动作行〔口径随首批钉死〕/挖旗格尝试率与被拒后路径分布〔拔了挖开/拔了重标/放弃〕/同轮插撤率/拔旗次数每局);提案原文(四情况+四开放问题)指路锚挂 07 观测项(git 历史+台账 72 可溯),Alpha 评估冷启动问题就此消除;07 头注补「⑧ 独立采集轨道」防误读为四连批观测项。**关键发现=代码零改动**:现役 JSONL 日志已含全部所需字段(log_action 逐操作落盘含 flag_place/flag_pull/被拒 dig——2026-09-12 用户要求的完整持久化;结算步流 flag_hit/flag_miss 判定行带格坐标;ux_reject 结构化拒绝原因),比预计改面(补 2-3 个遥测行)更薄;冒烟不适用(零代码零数值)。**两红灯预置**(误旗后放弃纠错占比异常高=拔旗税劝退纠错/同轮插撤高频=误触摩擦过大)仅作 Alpha 评估输入,试玩现场不改机制;切片期玩法结构冻结维持(验收读数重测批前不动旗机制)。并行对答会话同窗口在飞(active.md 快照行共写+06 技能池条目状态行更注),本批 hunks 零重叠。
83. **旗奖励语义实证补批(2026-09-19,本会话——用户两问质询触发,未提交)**:**问①「误旗判定后拔旗再挖是否仍有奖励」实测=有**——smoke_all 新增 `_smoke_flag_misfire_dig_after_pull` 双场景断言 11 项全过(冒烟 317 项 0 失败,含本批新增):跨轮场景〔标安全格→收轮判定→拔旗→挖开〕标空归因行恰一次+负向兑付在案+**正向奖励照发**——机制根因=旗判定走消费型 `grant()`、挖开揭示走查询型 `query_full_snapshot`(不查 _granted、不消费),两通道互不吞并,「惩罚与奖励并行」为现行语义;同轮插撤场景=被拔不判(发射面已过滤)零惩罚、挖开奖励不受影响。07 观测项⑧补「语义锚」一段(「拔了挖开」路径收益语义以实测为准)。**问②澄清**——让已插旗格可直接挖开=插旗不可逆提案的情况②④机制,属真代码批,切片期冻结未实现(「零改动」仅指观测采集侧;本批唯一代码面=测试断言,零玩法零数值)。**过程记录(测试基建已知盲区,登记不扩批)**——首跑发现结算行 origin_cell 字段为数组而非 Vector2i(`!=` 比较类型非法→SCRIPT ERROR 中断函数后续断言,且**脚本错误不计入冒烟失败数**、静默吞剩余检查——首跑 309 项 0 失败实为断言未跑全),改同类型数组比较后全绿;同款比较写法在既有极性路由断言中以 `==` 形态在位未触发(Array==Vector2i 与 != 的报错行为差异),后续批可评估统一比较口径。并行对答会话在飞 hunks 零触碰。
82. **技能池新效应词汇批执行批(2026-09-19,本会话——用户逐项拍板后全权执行+授权提交,台账 80/81 的讨论场收口)**:**拍板链**(对答会话四裁决+失衡首发):三词收敛两词——妨害技 = 新增第四技能类型「妨害」(debuff)、载荷复用既有主角侧减益词汇(首发 = 失衡 off_guard AC 轴〔用户拍板〕,乏力 sapped 留作第二词汇);固定值伤害**改形为必中附加分量**(用户质询"×0.5=永久第三档"推翻初案 → 价位锚 0.75 = AC 折扣档最轻档"不掉档的稳定伤害",可掷分量期望 AC10≈0.80/AC12≈0.76 对表——必中分量的价必须从档位表选位);多段命中**退役**(无防御磨损体系,无"打高甲更疼"对照机制;P1 字段位「命中段数」保留);实装面收窄 = 仅 L2 Boss 蛛化卓尔精灵。**代码**:SkillTable type 枚举三→四 + rider_mult 域 (0,1] + 妨害校验(禁 damage_mult/rider_mult、必带 buff_ref);battle_orchestrator 施放行扩 debuff 分支(落点由状态行 target_side 路由——容器零改动)+ 伤害技 rider 后置加法(max(floor, 主分量链) + max(floor, floor(atk×rider)),payload rider 键+行文本「+附加N(必中)」);config_db.validate_skill_pool_links:池妨害 ≤1 + 施放类 side 守卫(buff→enemy/debuff→hero,status_table 显式入参修装载序 Nil 崩);enemy_card_view 意图映射 +妨害系 ☠ 紫。**数据**(全 provisional):venom_burst +rider_mult 0.75(atk3→毒2);web_snare 蛛网束缚新行(debuff→off_guard,duration 2=1 有效拍,CD4);卓尔池 6/2/2→6/2/2/2。**验证**:冒烟 306 项 0 失败——新探针 _smoke_debuff_rider 四断言(毒爆行逐拍精确复算含 rider 随开战掷定 atk 缩放 / rider 键封闭 / 蛛网束缚落主角端到端〔伤害行阈值=基准+失衡幅度〕 / 种子可达)+ 校验拒绝组六断言(妨害>1/缺 buff_ref/rider 越域/非伤害技带 rider/side 守卫反例);顺手修并行 board_type 批漏网(smoke variant_pool Array→String 字面量——原被 SCRIPT ERROR 静默吞断言);四探针 PASS。**试玩**(用户验收标准):800 局(两关×20 种子×普通/完美,4200-4219 同种子可比)——L2 基线通关 90%→80%、剩余死因 100% 集中 Boss(蛛网束缚+毒分量设计方向生效)、完美档基线位 80%;L1 基线 65%/完美 85% 与批前读数一致(零行为变更回归 ✓);台阶倒挂收窄(65 vs 90 → 65 vs 80);analyze_playtest.py 反事实重算 +rider 识别(敌方招式成分——无奖励世界保留 rider 只剥伏击)。**文档**:proposal-status-vocabulary.md v1.0 新建(设计权威)+ 敌人系统 v0.10(枚举四类/词汇表 rider 行/池纪律妨害≤1/意图三族/P1 表核销)+ 战斗结算 v0.17(三乘法链尾 rider/公式行/必中家族/验收两条)+ 增益状态 v0.10(off_guard 第二来源)+ registry skill 条目改写+off_guard 行+修订块 + 07 头注与速览行(重测变量+1)+ README 批节 + 06 条目解决移除。**边界**:数值全 provisional 归难度曲线与Boss;提交单含并行会话 06 残留清理批(75→55 条,台账 81,用户已批准)ride-along。
@@ -513,3 +513,12 @@ Godot_v4.7.2-stable_win64_console.exe --headless --path . --script res://smoke/s
**文档/registry 同批(批 3)**:敌人系统 v0.5(技能池章节重写)/ 战斗结算 v0.11(随机口径三处/三乘法链/施放行/敌方防御池/AC 措辞四处)/ 增益状态 v0.5(九行 + 敌方防御池;顺手清偿 v0.4 挂起的 sapped 文档同步)/ 难度曲线与Boss v0.6(曲线纪律/Boss 专属池/技能池投值表 + EV 实测登记)/ 战斗表现 v0.3 / HUD框架 v0.4 / 数据配置(敌人表措辞 + 技能表行)/ 03-内容规模 / 02-系统清单 / 关卡节点地图 / ux battle.md(改型注记)/ architecture.md(单位容器 API 面)/ registry(rng/skill 新条目/enemy/status_effect/settlement/术语七词条/修订记录)/ 06-待办清单(改型"单拍行为环体验验证"、收编关闭"行为环废除与蓄力拍退役"、新增 P1 五项 + P2 技能图鉴)。
**实现决策登记(提案未定处的自行拍板,按封装纪律报告)**:① 保底 M 载体 = 技能表全局单字段 pity_threshold(不分敌种,难度曲线单旋钮);② 冷却"施放后连续 N 拍不可摇中"的实现 = 摇号按当前冷却值排除、递减在其后(与提案"递减→排除"的可摇集合逐拍恒等);③ 增益持续与技能冷却两计时器 = apply_effect duration_override 通道;④ 敌方防御池乘区落点 = 主角攻击 Σ三分量后(hero_offense 现行走普通分量直乘的切片现状不动——登记遗留);⑤ 摇号器类名 SkillLottery(core/skill_lottery.gd)。
## 2026-09-19 技能池新效应词汇批(用户拍板——设计权威 docs/proposal-status-vocabulary.md v1.0)
**三词收敛两词**:妨害技(debuff 新类型)+ 必中附加分量(rider_mult,"固定值伤害"改形);多段命中经用户拍板退役(无防御磨损体系,无对照机制)。**实装面 = 仅 L2 Boss 蛛化卓尔精灵,其余敌种不动**:
- 毒爆 venom_burst + `rider_mult = 0.75`——必中毒分量 = max(1, floor(atk × 0.75))(atk 开战掷定 2–4 → 毒 1–3 点),后置加法、必中全额、不进乘区不出暴击;伤害行 payload 增 `rider` 键 + 行文本「+附加N(必中)」。
- 新技能行**蛛网束缚 web_snare**(debuff → off_guard 失衡,duration 2 = 1 有效结算,冷却 4,池权重 2 → 卓尔池 6/2/2/2 全 provisional)——0 伤害施放行,状态按 target_side 落主角(掷点阈值 10 → 8)。
- 结构面:SkillTable type 枚举 +debuff;池纪律 +每池妨害 ≤1;施放类 side 守卫(buff→enemy / debuff→hero,`validate_skill_pool_links` 增 status_table 显式入参——装载序修正);意图徽标 +妨害系 ☠(紫)。
- 验证:冒烟 306 项 0 失败(+新探针 `_smoke_debuff_rider`:毒爆行逐拍精确复算 / rider 键封闭 / 蛛网束缚落主角端到端 / 六项加载校验拒绝)+ 四探针 PASS;800 局模拟试玩(两关 × 20 种子 × 双画像)——L2 基线通关 90%→80%、死因全部集中 Boss(设计方向生效),L1 零行为变更回归一致(65%/85%)。
- 顺手收口:smoke_all `variant_pool(1, ["dungeon"])` → `"dungeon"`(并行 board_type 批签名 Array→String 的漏网同步——此前该断言被 SCRIPT ERROR 静默吞掉);analyze_playtest.py 反事实重算 +rider 识别。
@@ -481,9 +481,10 @@ func _combat_segment(ri: int) -> void:
if srow.is_empty():
_fatal("敌实例待发动作悬空: %s" % skill_id)
continue
if String(srow.type) == "buff":
# 增益技 = 0 伤害施放行:不兑付伏击(旧蓄力拍"零兑付"语义由施放行继承——本轮喂的伏击
# 逢施放拍不兑现的读怪奖励保留);状态授予即数值兑现,技能冷却与增益持续两计时器分账。
if String(srow.type) == "buff" or String(srow.type) == "debuff":
# 增益/妨害技(新效应词汇批 2026-09-19)= 0 伤害施放行:不兑付伏击(旧蓄力拍"零兑付"语义由施放行
# 继承——本轮喂的伏击逢施放拍不兑现的读怪奖励保留);状态授予即数值兑现,技能冷却与增益持续两计时器分账。
# 落点由状态行 target_side 路由(buff → 敌方侧 / debuff → 主角侧——容器零改动,proposal-status-vocabulary §1)。
var dur: int = int(srow.get("buff_duration", 1))
_status_effects.apply_effect(String(srow.buff_ref), {"source_class": "enemy_action", "origin_cell": Vector2i(-1, -1), "round_index": ri}, dur)
_emit_row("cast", "enemy_action", Vector2i(-1, -1), ri, "%s 施放 %s" % [u.display_name, String(srow.display_name)], 0, {"skill_id": skill_id, "effect_id": String(srow.buff_ref), "duration": dur})
@@ -491,21 +492,31 @@ func _combat_segment(ri: int) -> void:
continue
# 伤害技(含普攻——倍率恒 1):三乘法链 ① A = 攻击基线 × 技能倍率(判定对象 = 技能基础伤害分量)
# → ② d20 vs 主角 AC(nat20 暴击 ≠ 技能重击,两层严格区分)→ ③ +克制修正点数(敌打主角无甲轴恒中性 delta 0——加法核 2026-09-18 换装)
# → 伏击附加(后置加法、必中全额、不吃 AC)→ 增益池乘区 → 伤害下限 max(1,·)。
# → 伏击附加(后置加法、必中全额、不吃 AC)→ 增益池乘区 → 伤害下限 max(1,·)
# → 必中附加分量 rider(新效应词汇批 2026-09-19:后置加法、必中全额、不进乘区不出暴击——
# proposal-status-vocabulary §2;价位锚 rider_mult=0.75 = AC 折扣档最轻档"不掉档的稳定伤害")。
var baseline: int = int(round(float(u.atk) * float(srow.get("damage_mult", 1.0))))
var rider := 0
if srow.has("rider_mult"):
rider = maxi(int(db.settlement.damage_floor), int(floor(float(u.atk) * float(srow.rider_mult))))
var roll_read_e: Dictionary = _armor_roll()
var threshold_e: int = _defender_ac(_enemy_system.hero_unit()) + int(db.settlement.attack_bonus)
var crit_e: bool = bool(roll_read_e.crit)
var discount_e: int = _roll_discount(int(roll_read_e.roll), threshold_e)
var rolled_base: int = DamageMath.rolled_component(float(baseline), discount_e, crit_e, int(db.settlement.crit_multiplier), 0) # 敌打主角无甲轴恒中性——加法核中性 delta = 0(原 percent 100 退役)
var d_tick := _resolve_damage(rolled_base + L * _m_amb)
d_tick = maxi(int(db.settlement.damage_floor), d_tick)
d_tick = maxi(int(db.settlement.damage_floor), d_tick) + rider # rider 后置于伤害下限——独立必中加项,不进乘区
_enemy_system.apply_damage(_enemy_system.hero_unit(), d_tick)
var payload_e: Dictionary = {"target": "hero", "skill_id": skill_id, "baseline": baseline, "attach": L * _m_amb,
"roll": int(roll_read_e.roll), "ac": threshold_e, "tier": discount_e}
if crit_e:
payload_e["crit"] = true
_emit_row("damage", "enemy_action", Vector2i(-1, -1), ri, _attack_label("%s %s" % [u.display_name, String(srow.display_name)], crit_e, discount_e), d_tick, payload_e)
if rider > 0:
payload_e["rider"] = rider
var label_e := _attack_label("%s %s" % [u.display_name, String(srow.display_name)], crit_e, discount_e)
if rider > 0:
label_e += "+附加%d(必中)" % rider
_emit_row("damage", "enemy_action", Vector2i(-1, -1), ri, label_e, d_tick, payload_e)
_enemy_system.commit_action(u) # 调用序③执行上报——技能进冷却 + 保底计数(每结算每存活敌恰一次)
@@ -167,21 +167,35 @@ func _cross_validate(loaded: Dictionary) -> void:
# ⑤ 技能池引用完整性(敌人技能池批——敌人表池 × 技能表;独立入口 validate_skill_pool_links 供冒烟直验)
var skt = loaded.get("skill")
if skt != null and en != null:
for e in validate_skill_pool_links(skt, en):
for e in validate_skill_pool_links(skt, en, loaded.get("status_effects")):
push_diag("error", e.category, e.message)
# 池模板 × 技能行跨表校验(加载期致命;返回错误列表——ConfigDB 诊断通道与冒烟直验共用):
# skill_id 悬空致命 + 池构成纪律(每池恰一行普攻、增益技 ≤1——proposal §2.1 结构保证)。
func validate_skill_pool_links(skill_table, enemy_table) -> Array:
# skill_id 悬空致命 + 池构成纪律(每池恰一行普攻、增益技 ≤1、妨害技 ≤1——proposal §2.1 结构保证 +
# proposal-status-vocabulary §1.2)+ 施放类 side 守卫(增益引用 enemy 侧 / 妨害引用 hero 侧状态行)。
# status_table 显式入参:装载序上本校验先于成员赋值执行(self.status_effects 尚为 Nil)——装载通道传 loaded 表,
# 冒烟直验传 _db.status_effects;传 null 时 side 守卫跳过(其他校验不受影响)。
func validate_skill_pool_links(skill_table, enemy_table, status_table = null) -> Array:
var errs: Array = []
var skill_types := {}
for row in skill_table.rows:
skill_types[String(row.get("skill_id", ""))] = String(row.get("type", ""))
# 施放类 side 守卫(新效应词汇批 2026-09-19):buff → 敌方侧状态 / debuff → 主角侧状态,防反向挂接
for row in skill_table.rows:
var st: String = String(row.get("type", ""))
if st != "buff" and st != "debuff":
continue
var want_side: String = "enemy" if st == "buff" else "hero"
var eff: String = String(row.get("buff_ref", ""))
var srow: Dictionary = status_table.row_by_id(eff) if status_table != null else {}
if not srow.is_empty() and String(srow.get("target_side", "")) != want_side:
errs.append({"category": "cast_side", "message": "SkillTable %s(%s)引用 %s 的 target_side=%s ≠ %s(施放类 side 守卫)" % [String(row.get("skill_id", "")), st, eff, String(srow.get("target_side", "")), want_side]})
for row in enemy_table.rows:
var eid: String = String(row.get("enemy_id", ""))
var basic_n := 0
var buff_n := 0
var debuff_n := 0
for entry in row.get("pool", []):
var sid: String = String(entry.get("skill_id", ""))
if not skill_types.has(sid):
@@ -192,10 +206,14 @@ func validate_skill_pool_links(skill_table, enemy_table) -> Array:
basic_n += 1
"buff":
buff_n += 1
"debuff":
debuff_n += 1
if basic_n != 1:
errs.append({"category": "pool_composition", "message": "EnemyTable %s 池普攻行数 ≠ 1 (%d)——普攻冷却恒 0 = 空池不可能的结构前提" % [eid, basic_n]})
if buff_n > 1:
errs.append({"category": "pool_composition", "message": "EnemyTable %s 池增益技 > 1 (%d)——每池增益 ≤1 纪律(纠偏三)" % [eid, buff_n]})
if debuff_n > 1:
errs.append({"category": "pool_composition", "message": "EnemyTable %s 池妨害技 > 1 (%d)——每池妨害 ≤1 纪律(新效应词汇批 2026-09-19)" % [eid, debuff_n]})
return errs
@@ -13,9 +13,10 @@ extends Resource
# (特殊技内按权重、不受冷却限制——proposal §2.1 两道闸之二)。全局单旋钮(不分敌种)。
@export var pity_threshold: int = 4
const SKILL_TYPES := ["basic", "damage", "buff"] # 普通攻击 / 伤害 / 增益(封闭枚举——新类型走文档修订)
const SKILL_TYPES := ["basic", "damage", "buff", "debuff"] # 普通攻击 / 伤害 / 增益 / 妨害(封闭枚举——新效应词汇批 2026-09-19 由三扩四)
const MULT_DOMAIN_MIN := 1.1 # damage_mult 域 [1.1, 16] provisional(proposal §2.2)
const MULT_DOMAIN_MAX := 16.0
const RIDER_MULT_MAX := 1.0 # rider_mult 域 (0, 1](必中附加分量——proposal-status-vocabulary §2;首发 0.75 锚 AC 折扣档最轻档)
func validate() -> Array:
@@ -52,7 +53,10 @@ func validate() -> Array:
errs.append({"category": "cross_field", "message": "%s 普攻 cooldown_beats ≠ 0(禁配——池恒非空的结构前提): %d" % [sid, cd]})
if row.has("buff_ref") or row.has("buff_duration"):
errs.append({"category": "cross_field", "message": "%s 普攻不带增益字段" % sid})
# 伤害技:存倍率不存固定值——伤害 = 施放者攻击基线 × 技能倍率(三乘法链第一乘)
if row.has("rider_mult"):
errs.append({"category": "cross_field", "message": "%s 普攻不带必中附加分量(rider_mult 仅伤害技)" % sid})
# 伤害技:存倍率不存固定值——伤害 = 施放者攻击基线 × 技能倍率(三乘法链第一乘);
# 可选 rider_mult = 必中附加分量(后置加法、不吃骰不出暴击——proposal-status-vocabulary §2)
if type == "damage":
if not row.has("damage_mult"):
errs.append({"category": "cross_field", "message": "%s 伤害技缺 damage_mult(存倍率不存固定值)" % sid})
@@ -62,15 +66,33 @@ func validate() -> Array:
errs.append({"category": "domain", "message": "%s damage_mult 越域 [%.1f, %.1f]: %s" % [sid, MULT_DOMAIN_MIN, MULT_DOMAIN_MAX, str(m)]})
if row.has("buff_ref") or row.has("buff_duration"):
errs.append({"category": "cross_field", "message": "%s 伤害技不带增益字段" % sid})
if row.has("rider_mult"):
var rm: float = float(row.rider_mult)
if rm <= 0.0 or rm > RIDER_MULT_MAX:
errs.append({"category": "domain", "message": "%s rider_mult 越域 (0, %.1f]: %s" % [sid, RIDER_MULT_MAX, str(rm)]})
# 增益技:0 伤害动作(无倍率),效果引用 + 持续回合;悬空引用由 ConfigDB 跨表校验兜底
if type == "buff":
if row.has("damage_mult"):
errs.append({"category": "cross_field", "message": "%s 增益技为 0 伤害动作,不带 damage_mult" % sid})
if row.has("rider_mult"):
errs.append({"category": "cross_field", "message": "%s 增益技不带必中附加分量(rider_mult 仅伤害技)" % sid})
if String(row.get("buff_ref", "")) == "":
errs.append({"category": "cross_field", "message": "%s 增益技缺 buff_ref(效果引用)" % sid})
var bd: int = int(row.get("buff_duration", 0))
if bd < 1 or bd > 99:
errs.append({"category": "domain", "message": "%s buff_duration 越域 [1,99]: %d" % [sid, bd]})
# 妨害技(新效应词汇批 2026-09-19):0 伤害施放动作,对主角施加负面状态——
# 字段复用 buff_ref/buff_duration(落点由状态行 target_side 路由,ConfigDB side 守卫兜底);池纪律妨害 ≤1 在跨表通道
if type == "debuff":
if row.has("damage_mult"):
errs.append({"category": "cross_field", "message": "%s 妨害技为 0 伤害动作,不带 damage_mult" % sid})
if row.has("rider_mult"):
errs.append({"category": "cross_field", "message": "%s 妨害技不带必中附加分量(rider_mult 仅伤害技)" % sid})
if String(row.get("buff_ref", "")) == "":
errs.append({"category": "cross_field", "message": "%s 妨害技缺 buff_ref(效果引用)" % sid})
var dbd: int = int(row.get("buff_duration", 0))
if dbd < 1 or dbd > 99:
errs.append({"category": "domain", "message": "%s buff_duration 越域 [1,99]: %d" % [sid, dbd]})
if not has_basic:
errs.append({"category": "structural", "message": "SkillTable 无普攻行(basic)——池构成纪律的结构前提"})
if pity_threshold < 1 or pity_threshold > 99:
@@ -276,6 +276,9 @@ rows = [{
}, {
"skill_id": "venom_burst",
"weight": 2
}, {
"skill_id": "web_snare",
"weight": 2
}],
"advantage_per_round_cap": 4,
"armor_type": "ward",
@@ -342,6 +345,11 @@ rows = [{
;
; 甲效矩阵加法核换装批(2026-09-18 用户拍板——settlement.tres armor_effectiveness 量纲 percent→整数点数,
; 三档 克制 +1 / 中性 0 / 被克 −1,五档百分比词表随批退役)。
;
; 新效应词汇批(2026-09-19 用户拍板——设计权威 docs/proposal-status-vocabulary.md v1.0):卓尔池
; 6/2/2 → 6/2/2/2(+蛛网束缚 web_snare 2——妨害技,对主角施 off_guard;每池妨害 ≤1 纪律入跨表校验)。
; 主分量权重期望 1.67 → 1.25(零伤害拍占 2/12),加毒爆必中附加分量(max(1,floor(atk×0.75)),atk 区间
; 2–4 → 1–3 点)后净期望待抽样复核归 难度曲线与Boss;实装面 = 仅卓尔,其余敌种不动。
; 现行读数效果:L1/L2 小怪全 light → 穿刺类(开格充能/穿刺弹)被克 −1(穿刺弹 2→1、充能 3 点→2)、普通/魔法中性;
; L2 仅 Boss 战非中性(魔法甲)——基础攻击与穿刺弹克制 +1、魔法矢被克 −1(原威力 + delta 自行核算后落笔)。
; 原重配批注「魔法矢克 Boss ×150、穿刺弹被克 ×50」与当批矩阵正反互倒(系笔误),随本批订正为上行读数。
@@ -47,6 +47,14 @@ rows = [{
"display_name": "毒爆",
"type": "damage",
"damage_mult": 2.5,
"rider_mult": 0.75,
"cooldown_beats": 4
}, {
"skill_id": "web_snare",
"display_name": "蛛网束缚",
"type": "debuff",
"buff_ref": "off_guard",
"buff_duration": 2,
"cooldown_beats": 4
}]
@@ -67,3 +75,14 @@ rows = [{
; 毒爆 venom_burst = 伤害 ×2.5 冷却 4(蛛化卓尔精灵 drider 专属池独占技——"Boss=专属池独占技+权重轮廓"
; 纪律的本批兑现;池引用唯一性 = 唯一 enemy_id: drider)。
; 两行均为 damage 型(存倍率不存固定值——伤害 = 施放者攻击基线 × 技能倍率,三乘法链第一乘)。
;
; 新效应词汇批(2026-09-19 用户拍板——设计权威 docs/proposal-status-vocabulary.md v1.0,全值 provisional
; 投值归 难度曲线与Boss):三词收敛两词——多段命中退役(无防御磨损体系,无对照机制);固定值伤害改形
; 必中附加分量(rider_mult,域 (0,1]):后置加法、必中全额、不进乘区不出暴击,分量值 =
; max(damage_floor, floor(攻击基线 × rider_mult))——随基线缩放保持共享技能表前提;
; ×0.75 价位锚 = AC 折扣档最轻档"不掉档的稳定伤害"(可掷分量期望 AC10≈0.80 / AC12≈0.76 对表)。
; ① 毒爆 + rider_mult 0.75(必中毒分量:atk3 → 毒 2 点,atk 区间 2–4 → 1–3 点随开战掷定值缩放)。
; ② 蛛网束缚 web_snare(新行,妨害型 debuff——对主角施加 off_guard 失衡):0 伤害施放行(不掷不折不兑付
; 伏击),字段复用 buff_ref/buff_duration;duration 2 = 1 个有效结算(empower/fortify 先兑付后衰减含
; 施放当轮口径);冷却 4;首发载荷 = 失衡(用户拍板),乏力 sapped 为第二词汇暂不实装;
; 池纪律 +:每池妨害 ≤1(ConfigDB 跨表校验);实装面 = 仅卓尔池,其余敌种不动。
@@ -11,13 +11,15 @@ class_name EnemyCardView
extends PanelContainer
const COL_INK := Color8(51, 38, 27)
# 摇定动作呈现映射(敌人技能池批 §2.4 三档可见性):键 = pending_type(快照投影)。
# 摇定动作呈现映射(敌人技能池批 §2.4 三档可见性;新效应词汇批 2026-09-19 扩四档):键 = pending_type(快照投影)。
# 普通攻击零表示("—" 中性色——完全不可预测);伤害特殊技 = 攻击系 ⚔(朱红);
# 增益特殊技 = 防御/增益系 ✦(蓝)。nat20 暴击无前置表示(掷点层,与技能重击严格区分)。
# 增益特殊技 = 防御/增益系 ✦(蓝);妨害特殊技 = 妨害系 ☠(紫——对主角施减益,proposal-status-vocabulary §1.4)。
# nat20 暴击无前置表示(掷点层,与技能重击严格区分)。
const PENDING_STYLE := {
"basic": ["—", Color8(120, 106, 88)],
"damage": ["⚔", Color8(198, 61, 34)],
"buff": ["✦", Color8(46, 110, 142)],
"debuff": ["☠", Color8(122, 66, 148)],
}
# 蓄力档技能集(2026-09-18 用户拍板:重击类独立蓄力提示——伤害技 ⚔ / 增益技 ✦ / 重击类 蓄力 三档占位)
const CHARGE_SKILL_IDS := ["heavy"]
@@ -105,7 +107,7 @@ func _set_order(i: int) -> void:
# 摇定动作渲染(敌人技能池批——presenter 不翻译,渲染映射唯一定义处归本类〔code-review 2026-09-12 先例〕):
# pending_type = 战斗结算 快照投影(basic/damage/buff;"" = 未摇定/死亡残位)。
# pending_type = 战斗结算 快照投影(basic/damage/buff/debuff;"" = 未摇定/死亡残位)。
# 信号/入参契约:set_data 每结算行刷新、set_pending 每轮开轮刷新(开轮摇号时点)。
func set_pending(ptype: String, pid: String) -> void:
if _dead:
@@ -0,0 +1 @@
uid://cg2dgdnbkd7op
@@ -82,6 +82,7 @@ func _run_core_smoke(db, rng) -> void:
_smoke_clear_reward_chain()
_smoke_refresh_provenance_guard()
_smoke_polarity_routing()
_smoke_flag_misfire_dig_after_pull()
_smoke_negative_dictionary()
_smoke_resource_surface()
_smoke_settlement_segments()
@@ -489,7 +490,7 @@ func _mk_stream(stream_name: String, scope: int) -> RandomNumberGenerator:
func _smoke_variation_framework() -> void:
print("--- 地形变异 框架面(空清单合法 + 候选池门控通道)---")
check(_db.variation.rows.is_empty(), "变异清单为空(P0 合法态——零变体格)")
check(_db.variant_pool(1, ["dungeon"]).is_empty(), "候选池为空——棋盘生成静默产出无变异图(不报错、不警告)")
check(_db.variant_pool(1, "dungeon").is_empty(), "候选池为空——棋盘生成静默产出无变异图(不报错、不警告)")
check(_db.variation.row_by_id("nonexistent").is_empty(), "清单外 variant_id 返回空(读取通道在位)")
@@ -863,6 +864,77 @@ func _find_flag_target(minesweeper, want_mine: bool) -> Dictionary:
return {}
# ---- 旗奖励语义实证(2026-09-19 观测项⑧语义锚——用户质询「误旗判定后拔旗再挖是否仍有奖励」)----
# 场景 A(跨轮):标安全格 → 收轮判定(flag_miss 负向兑付)→ 拔旗 → 挖开 → 收轮。
# 语义锚 = 惩罚与奖励并行:判定走消费型 grant、挖开走查询型 query_full_snapshot,两通道互不吞并。
# 场景 B(同轮插撤):标安全格 → 同轮拔旗 → 挖开 → 收轮。被拔不判(抵消过滤)——零惩罚零影响。
func _smoke_flag_misfire_dig_after_pull() -> void:
print("--- 旗奖励语义(误旗判定后拔旗再挖)---")
# 场景 A:跨轮(判定已走)
var rng_a = load("res://core/rng_service.gd").new()
rng_a.set_master_seed(20260919)
var settle_a = load("res://core/battle_orchestrator.gd").new(_db, rng_a)
var rows_a: Array = []
settle_a.step_row.connect(func(row): rows_a.append(row))
check(settle_a.begin_battle({"level_index": 1, "node_depth": 4, "hero_hp": int(_db.hero.max_hp)}), "旗语义 A:开局受理")
var ms_a = settle_a.minesweeper
var t_a := _find_flag_target(ms_a, false)
check(not t_a.is_empty(), "旗语义 A:找到安全格旗目标")
if not t_a.is_empty():
if t_a.hero_cell != ms_a.hero_pos():
ms_a.settle_batch([{"action": "move", "cell": t_a.hero_cell}])
ms_a.settle_batch([{"action": "flag_place", "cell": t_a.flag_cell}])
ms_a.settle_batch([{"action": "stop"}]) # 收轮 → 判定批:flag_miss + 负向兑付
ms_a.settle_batch([{"action": "flag_pull", "cell": t_a.flag_cell}])
var dig_a: Array = ms_a.settle_batch([{"action": "dig", "cell": t_a.flag_cell}])
check(not dig_a.is_empty() and bool(dig_a[0].get("accepted", false)), "旗语义 A:拔旗后挖开被受理")
ms_a.settle_batch([{"action": "stop"}])
var target_a: Array = [t_a.flag_cell.x, t_a.flag_cell.y]
var miss_attr := 0
var miss_neg := 0
var dig_reward := 0
for row in rows_a:
if row.get("origin_cell", [0, 0]) != target_a:
continue
if row.get("type", "") == "flag_miss":
miss_attr += 1
if String(row.get("source_class", "")) == "flag_miss":
miss_neg += 1
if String(row.get("source_class", "")) == "safe_cell":
dig_reward += 1
check(miss_attr == 1, "旗语义 A:标空归因行恰一次(×%d——每格实例一次去重)" % miss_attr)
check(miss_neg >= 1, "旗语义 A:标空负向兑付行在案(×%d)" % miss_neg)
check(dig_reward >= 1, "旗语义 A:判定后拔旗再挖仍获正向奖励(×%d——惩罚与奖励并行)" % dig_reward)
# 场景 B:同轮插撤(被拔不判)
var rng_b = load("res://core/rng_service.gd").new()
rng_b.set_master_seed(20260919)
var settle_b = load("res://core/battle_orchestrator.gd").new(_db, rng_b)
var rows_b: Array = []
settle_b.step_row.connect(func(row): rows_b.append(row))
check(settle_b.begin_battle({"level_index": 1, "node_depth": 4, "hero_hp": int(_db.hero.max_hp)}), "旗语义 B:开局受理")
var ms_b = settle_b.minesweeper
var t_b := _find_flag_target(ms_b, false)
check(not t_b.is_empty(), "旗语义 B:找到安全格旗目标")
if not t_b.is_empty():
if t_b.hero_cell != ms_b.hero_pos():
ms_b.settle_batch([{"action": "move", "cell": t_b.hero_cell}])
ms_b.settle_batch([{"action": "flag_place", "cell": t_b.flag_cell}])
ms_b.settle_batch([{"action": "flag_pull", "cell": t_b.flag_cell}]) # 同轮拔——发射面已过滤
var dig_b: Array = ms_b.settle_batch([{"action": "dig", "cell": t_b.flag_cell}])
check(not dig_b.is_empty() and bool(dig_b[0].get("accepted", false)), "旗语义 B:同轮插撤后挖开被受理")
ms_b.settle_batch([{"action": "stop"}])
var target_b: Array = [t_b.flag_cell.x, t_b.flag_cell.y]
var miss_b := 0
var reward_b := 0
for row in rows_b:
if row.get("type", "") == "flag_miss" or String(row.get("source_class", "")) == "flag_miss":
miss_b += 1
if String(row.get("source_class", "")) == "safe_cell" and row.get("origin_cell", [0, 0]) == target_b:
reward_b += 1
check(miss_b == 0, "旗语义 B:同轮插撤零判定零惩罚(×%d——被拔不判)" % miss_b)
check(reward_b >= 1, "旗语义 B:同轮插撤后挖开奖励不受影响(×%d)" % reward_b)
# ---- 试玩日志器冒烟(结算快照 JSONL + 诊断转储)----
func _smoke_playtest_logger() -> void:
print("--- PlaytestLogger(结算快照 JSONL + 诊断转储)---")
@@ -1538,11 +1610,12 @@ func _smoke_skill_pool() -> void:
_smoke_skill_pool_ev_anchor()
_smoke_skill_pool_death_void()
_smoke_skill_pool_validation_reject()
_smoke_debuff_rider()
# ① 数据面:技能表行集 + 普攻锁死 + 建议池行值 + 空池不可能(结构断言)
func _smoke_skill_pool_data() -> void:
check(_db.skill.rows.size() == 7, "技能表七行(普攻/突刺/蓄力/重击/硬化 + 撕咬/毒爆——分支节点图批 L2 新行)")
check(_db.skill.rows.size() == 8, "技能表八行(普攻/突刺/蓄力/重击/硬化 + 撕咬/毒爆/蛛网束缚——分支节点图批 + 新效应词汇批)")
var basic: Dictionary = _db.skill.row_by_id("attack")
check(not basic.is_empty() and String(basic.type) == "basic" and int(basic.cooldown_beats) == 0
and (not basic.has("damage_mult") or is_equal_approx(float(basic.damage_mult), 1.0)),
@@ -1557,14 +1630,29 @@ func _smoke_skill_pool_data() -> void:
check(not bite.is_empty() and is_equal_approx(float(bite.damage_mult), 1.5) and int(bite.cooldown_beats) == 1,
"撕咬行(伤害 ×1.5 · 冷却 1——巨蜘蛛池载体,与突刺同倍率错开冷却轴)")
var venom: Dictionary = _db.skill.row_by_id("venom_burst")
check(not venom.is_empty() and is_equal_approx(float(venom.damage_mult), 2.5) and int(venom.cooldown_beats) == 4,
"毒爆行(伤害 ×2.5 · 冷却 4——蛛化卓尔精灵专属池独占技)")
check(not venom.is_empty() and is_equal_approx(float(venom.damage_mult), 2.5) and int(venom.cooldown_beats) == 4
and is_equal_approx(float(venom.rider_mult), 0.75),
"毒爆行(伤害 ×2.5 · 冷却 4 · 必中附加 ×0.75——蛛化卓尔精灵专属池独占技,新效应词汇批)")
var venom_sole_ok := true
for row in _db.enemy.rows:
for entry in row.pool:
if String(entry.skill_id) == "venom_burst" and String(row.enemy_id) != "drider":
venom_sole_ok = false
check(venom_sole_ok, "毒爆独占性(仅蛛化卓尔精灵池引用——Boss 专属池独占技纪律)")
# 新效应词汇批(2026-09-19):妨害技首发行 + off_guard 落点 + 实装面收窄
var snare: Dictionary = _db.skill.row_by_id("web_snare")
check(not snare.is_empty() and String(snare.type) == "debuff" and String(snare.buff_ref) == "off_guard"
and int(snare.buff_duration) == 2 and int(snare.cooldown_beats) == 4,
"蛛网束缚行(妨害型 · buff_ref → off_guard 失衡 · duration 2 = 1 有效拍 · 冷却 4——新效应词汇批首发)")
var snare_sole_ok := true
for row in _db.enemy.rows:
for entry in row.pool:
if String(entry.skill_id) == "web_snare" and String(row.enemy_id) != "drider":
snare_sole_ok = false
check(snare_sole_ok, "蛛网束缚独占性(仅蛛化卓尔精灵池引用——实装面收窄,其余敌种不动)")
var off_guard_row: Dictionary = _db.status_effect_row("off_guard")
check(not off_guard_row.is_empty() and String(off_guard_row.target_side) == "hero" and String(off_guard_row.unit) == "ac",
"失衡状态行(hero · ac 轴——妨害技落点,ConfigDB side 守卫正例)")
# 行集键 = (level_index, node_depth)——分支节点图批起 bugbear 等敌种跨关异池,enemy_id 不再唯一
var expect_pools := {
"1_0": {"attack": 9, "lunge": 1},
@@ -1578,7 +1666,7 @@ func _smoke_skill_pool_data() -> void:
"2_5": {"attack": 5, "lunge": 2, "heavy": 2},
"2_6": {"attack": 6, "bite": 2, "charge": 1},
"2_7": {"attack": 6, "bite": 2, "charge": 1},
"2_8": {"attack": 6, "heavy": 2, "venom_burst": 2},
"2_8": {"attack": 6, "heavy": 2, "venom_burst": 2, "web_snare": 2},
}
var pools_ok := true
for row in _db.enemy.rows:
@@ -1591,7 +1679,7 @@ func _smoke_skill_pool_data() -> void:
got[String(entry.skill_id)] = int(entry.weight)
if got != expect_pools[rk]:
pools_ok = false
check(pools_ok, "十二行池模板 = 建议池行值(L1 地精 9/1 · 熊地精 6/2/2 · 酋长 6/2/2;L2 兄弟精 6/1/2 · 蜘蛛 6/2/1 · 重击手 5/2/2 · 蛛化卓尔精灵 6/2/2——全部 provisional)")
check(pools_ok, "十二行池模板 = 建议池行值(L1 地精 9/1 · 熊地精 6/2/2 · 酋长 6/2/2;L2 兄弟精 6/1/2 · 蜘蛛 6/2/1 · 重击手 5/2/2 · 蛛化卓尔精灵 6/2/2/2——全部 provisional)")
var basic_count_ok := true
for row in _db.enemy.rows:
var n := 0
@@ -1830,6 +1918,26 @@ func _smoke_skill_pool_validation_reject() -> void:
check(not et2.validate().is_empty(), "加载校验拒绝:池权重 ≤ 0")
et2.rows = [{"enemy_id": "x", "display_name": "x", "pool": []}]
check(not et2.validate().is_empty(), "加载校验拒绝:空池(禁)")
# 新效应词汇批(2026-09-19):妨害 / 必中附加分量校验组
skill_table.rows = [
{"skill_id": "w1", "display_name": "w1", "type": "debuff", "buff_ref": "off_guard", "buff_duration": 2, "cooldown_beats": 4},
{"skill_id": "w2", "display_name": "w2", "type": "debuff", "buff_ref": "off_guard", "buff_duration": 2, "cooldown_beats": 4}]
enemy_table.rows = [{"enemy_id": "x", "display_name": "x", "pool": [{"skill_id": "w1", "weight": 1}, {"skill_id": "w2", "weight": 1}]}]
check(_has_err_category(_db.validate_skill_pool_links(skill_table, enemy_table), "pool_composition"),
"加载校验拒绝:池妨害技 > 1(每池妨害 ≤1 纪律)")
skill_table.rows = [{"skill_id": "w1", "display_name": "w1", "type": "debuff", "cooldown_beats": 4}]
check(not skill_table.validate().is_empty(), "加载校验拒绝:妨害技缺 buff_ref(效果引用)")
skill_table.rows = [{"skill_id": "d", "display_name": "d", "type": "damage", "damage_mult": 1.5, "rider_mult": 1.5, "cooldown_beats": 1}]
check(not skill_table.validate().is_empty(), "加载校验拒绝:rider_mult 越域 (0,1]")
skill_table.rows = [{"skill_id": "b", "display_name": "b", "type": "buff", "buff_ref": "empower", "buff_duration": 2, "rider_mult": 0.5, "cooldown_beats": 1}]
check(not skill_table.validate().is_empty(), "加载校验拒绝:非伤害技带必中附加分量")
# 施放类 side 守卫:妨害技引用敌方侧状态 → 拒绝(增益技引用主角侧同罪,本组以妨害反例覆盖)
skill_table.rows = [
{"skill_id": "atk", "display_name": "a", "type": "basic", "cooldown_beats": 0},
{"skill_id": "w1", "display_name": "w1", "type": "debuff", "buff_ref": "empower", "buff_duration": 2, "cooldown_beats": 4}]
enemy_table.rows = [{"enemy_id": "x", "display_name": "x", "pool": [{"skill_id": "atk", "weight": 1}, {"skill_id": "w1", "weight": 1}]}]
check(_has_err_category(_db.validate_skill_pool_links(skill_table, enemy_table, _db.status_effects), "cast_side"),
"加载校验拒绝:妨害技引用敌方侧状态(施放类 side 守卫)")
func _has_err_category(errs: Array, category: String) -> bool:
@@ -1839,6 +1947,74 @@ func _has_err_category(errs: Array, category: String) -> bool:
return false
# ⑦ 新效应词汇批实装探针(2026-09-19——妨害技蛛网束缚 + 毒爆必中附加分量,实装面 = L2 Boss 卓尔):
# 停手轮驱动 (2,8)——零挖掘零旗 → 零池零伏击,伤害行可逐拍精确复算;种子 hunt 至少各命一粒毒爆伤害行
# 与蛛网束缚施放行;毒分量随开战掷定的攻击基线缩放(atk 区间 2–4 → rider 1–3)。
func _smoke_debuff_rider() -> void:
var venom_seed := -1
var venom_check_ok := true
var venom_rows_seen := 0
var snare_seed := -1
var base_ac: int = int(_db.hero.armor_class)
var off_m: int = int(_db.status_effect_row("off_guard").magnitude)
var floor_v: int = int(_db.settlement.damage_floor)
for s in range(1, 401):
if venom_seed > 0 and snare_seed > 0:
break
var rg = load("res://core/rng_service.gd").new()
rg.set_master_seed(s)
var settlement = load("res://core/battle_orchestrator.gd").new(_db, rg)
var rows: Array = []
settlement.step_row.connect(func(row): rows.append(row))
if not settlement.begin_battle({"level_index": 2, "node_depth": 8, "hero_hp": int(_db.hero.max_hp)}):
continue
var boss_atk: int = int(settlement._enemy_system.all_enemies()[0].atk) # 开战掷定攻击基线(毒分量随其缩放)
for i in range(6):
if settlement.battle_result != "":
break
settlement.minesweeper.settle_batch([{"action": "stop"}])
var has_venom := false
var has_snare := false
var snare_round := -1
for row in rows:
if String(row.get("type", "")) != "damage" or String(row.get("source_class", "")) != "enemy_action":
if String(row.get("type", "")) == "cast" and String(row.get("skill_id", "")) == "web_snare":
has_snare = true
snare_round = int(row.get("round_index", -1))
continue
if String(row.get("skill_id", "")) == "venom_burst":
has_venom = true
venom_rows_seen += 1
var rider_v: int = int(row.get("rider", -1))
if rider_v != maxi(floor_v, int(floor(float(boss_atk) * 0.75))):
venom_check_ok = false
# 终值精确复算(停手轮池恒空):主分量链结果 + 必中附加后置
var base_factor: float = float(int(row.tier)) * (float(_db.settlement.crit_multiplier) / 100.0 if bool(row.get("crit", false)) else 1.0)
var rolled_main: int = int(floor(float(int(row.baseline)) * base_factor / 100.0))
var expected: int = maxi(floor_v, rolled_main + int(row.attach)) + rider_v
if int(row.value) != expected:
venom_check_ok = false
elif row.has("rider"):
venom_check_ok = false # rider 键只允许出现在带 rider_mult 的技能行
if has_snare:
# 施放后主角掷点阈值下调(off_guard ac 轴):同轮起的伤害行阈值读数 = 基准 AC + 失衡幅度。
# 只取"可观测"种子(施放轮后仍有敌方伤害行——施放在末轮随战斗终局属合法不可观测,不作失败)。
var seen_lowered := false
for row in rows:
if String(row.get("type", "")) != "damage" or String(row.get("source_class", "")) != "enemy_action":
continue
if int(row.get("round_index", -1)) >= snare_round and int(row.get("ac", -999)) == base_ac + off_m:
seen_lowered = true
break
if seen_lowered and snare_seed < 0:
snare_seed = s
if has_venom and venom_seed < 0:
venom_seed = s
check(venom_seed > 0 and venom_rows_seen >= 1, "毒爆必中附加分量种子可达(seed=%d,毒爆伤害行 ×%d)" % [venom_seed, venom_rows_seen])
check(venom_check_ok, "毒爆伤害行逐拍精确复算:终值 = max(1, 掷点档位主分量 + 伏击附加) + 必中附加(rider 只随 rider_mult 行出现)")
check(snare_seed > 0, "蛛网束缚落主角:施放后掷点阈值 = 基准 AC + 失衡幅度(off_guard ac 轴端到端,seed=%d)" % snare_seed)
# ---- 分支节点图批冒烟:图合法性校验 + L2 幽暗地域图版行进(2026-09-17——关卡节点地图 v1.0 图版落地)----
func _smoke_level_graph() -> void:
+5 -2
View File
@@ -15,6 +15,8 @@
掷点折扣与 ac_up 对敌方判定的影响不可恢复,忽略(已标注)。
· 新格式(2026-09-17 起 step 行携带 roll/ac/tier/crit/normal/pierce/magic/baseline/attach):
反事实按 DamageMath 公式逐行精确重算。
· 新效应词汇批(2026-09-19):敌方伤害行携带 rider(必中附加分量)——计为敌方招式成分,
无减伤世界(cf_tn)含 rider、无奖励世界(cf_tr)保留 rider 只剥伏击附加。
表值硬编码溯源(表值变更须同步——单一事实源仍在 .tres):
· status_effects.tres:attack_up 50 / weaken −65 / enrage 25 / off_guard 25 / sapped −25(percent)
@@ -418,10 +420,11 @@ def analyze(rows, label):
if exact_mode:
base = float(s.get("baseline", v))
att = int(s.get("attach", 0))
rider = int(s.get("rider", 0)) # 必中附加分量(新效应词汇批 2026-09-19)——敌方招式成分,非棋盘来源
rolled = rolled_component(base, int(s.get("tier", 100)), bool(s.get("crit")), 100)
pre = rolled + att
pre = rolled + att + rider
cf_nored = max(1, pre)
cf_norw = max(1, rolled)
cf_norw = max(1, rolled + rider) # 无奖励世界只剥棋盘来源的伏击附加,rider 保留
else:
pre = int(round(v / k_taken)) if k_taken > 0 else v
cf_nored = max(1, pre)