fix: 修复审计发现的 3 个潜在 bug(CoreFeatureTag / pierce / Deck 防呆)
1. CoreFeatureTag 位运算串扰:feature_tags 实为单选枚举(游戏设计器 core_tab 以 OptionButton 下标写入),但 spell_evaluator 用位与 `&` 判定,非 2 的幂 常量会串扰(如 3 & 1 = 1 误判持久内存)。改为 `==` 相等判定,常量值保持 与设计器下标一致;补充注释说明单选语义与未来多选(位标志)的迁移路径。 2. modifier_pierce_plus 空操作:MODIFIER 携带的 pierce 从未生效(可购买无效)。 新增 CastStats.pierce_add,_apply_modifier 累加,_push_projectile 叠加到 ACTION 自带 pierce。穿透修正现在生效。 3. 战前 Deck 防呆缺失:可带无 ACTION 卡组进战斗。新增 CombatManager.has_castable_action();商店"下一波"按钮校验,无 ACTION 时 显示警告并阻止进入(新增 SHOP_NEED_ACTION i18n 键,zh_CN/zh_TW/en/ja)。 静态审查通过;因本机无 Godot CLI 未经运行时验证,需在编辑器 play_scene 验收。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,7 +1,15 @@
|
||||
## CoreFeatureTag — Core 特性标签整数常量(Autoload: CoreFeatureTag)
|
||||
## CoreFeatureTag — Core 特性标签枚举常量(Autoload: CoreFeatureTag)
|
||||
## 禁止在判断逻辑中使用裸字符串(跨切片约束 ADR-R5-N2)。
|
||||
##
|
||||
## feature_tags 当前为**单选枚举值**(一个 Core 至多一个特性):游戏设计器
|
||||
## core_tab.gd 以 OptionButton 下标 0..5 写入(0=无),下标即等于下列常量值。
|
||||
## ⚠️ 因此判定必须用 `==`(相等),**不能用位与 `&`**——常量值非 2 的幂,
|
||||
## `&` 会串扰(如 ALWAYS_CAST_LAST(3) & PERSISTENT_MEMORY(1) = 1 误判持久内存)。
|
||||
## 若将来需要一个 Core 同时携带多个特性,应改为 2 的幂位标志 + 设计器多选,
|
||||
## 并把所有判定改回 `& X != 0`。
|
||||
extends Node
|
||||
|
||||
const NONE: int = 0 # 无特性(OptionButton 下标 0)
|
||||
const PERSISTENT_MEMORY: int = 1 # 寄存器跨帧保留(wand_memory Core)
|
||||
const DUAL_STREAM: int = 2 # 双流执行(P6-N12,S6 P1 实现)
|
||||
const ALWAYS_CAST_LAST: int = 3 # 尾槽 MODIFIER/TRIGGER/LOGIC 静默跳过(P6-N7)
|
||||
|
||||
Reference in New Issue
Block a user