完整回合执行顺序(execute_full_turn)
1
回合开始:触发开局特性(battle_start_effects,只触发一次)
2
湿润印记处理:_apply_moisture_mark → 全队技能能耗 -N(印记层数)
3
回合开始特性逻辑(冷却递减、传动等预处理)
4
应对检测:判断 A/B 是否对对方技能有应对效果,决定先后手(见「应对系统」)
5
先手行动:_execute_with_counter → 含伤害/状态/应对结算
6
检查倒地 → 扣 MP(_check_fainted_and_deduct_mp)→ 触发 ON_FAINT 特性
7
死亡换人 / 被动换人(auto_switch)→ 若玩家需选人,弹出选人面板(异步等待)
8
检查胜负 → 如已分出胜负则结束回合
9
后手行动:同步骤5
10
检查倒地 → 扣 MP → 换人 → 检查胜负
11
回合结束效果(turn_end_effects)
12
检查倒地 → 扣 MP → 换人 → 回合数 +1
回合结束效果顺序(turn_end_effects)
1
触发 ON_TURN_END 特性(双方)
2
触发 PASSIVE 特性(煤渣草灼烧不衰减检测)
3
中毒:HP × 3% × 层数(不衰减)
4
灼烧:HP × 2% × 层数,之后层数 ÷2(最少减1层);煤渣草在场则层数不减反加
5
冻伤:每回合累加 HP÷12 不可恢复伤害(侵蚀最大HP上限)
6
寄生:HP × 8% × 层数,该值转给敌方恢复
7
星陨:倒计时 -1;到0引爆:(敌方魔攻/己方魔防) × 30 × 层数 × 0.9
8
天气效果(沙暴 1/16 HP·雪天冻结2层)→ 天气回合 -1
9
技能冷却 -1,临时能耗修改 -1 回合
10
印记回合结束效果(湿润/中毒印记/龙噬/荆刺等)
先后手判定逻辑(get_priority + _compare_action_order)
| 行动类型 | 优先级值 | 说明 |
|---|---|---|
| 换人 最高 | +99 | 换人永远优先于技能和聚能 |
| 带先手加成技能 | skill.priority_mod + pokemon.priority_stage | 高优先级技能(如迅捷) |
| 普通技能 | 0 | 速度高者先手 |
| 聚能 | 0 | 与普通技能同优先级,看速度 |
速度决胜规则
①
比较 优先级(priority_mod):高者先手
②
优先级相同 → 比较 当前速度(effective_speed):高者先手
③
速度相同 → 随机决定(50/50)
应对对先后手的影响
应对无视速度:A 应对 B 的技能 → B 先释放(被应对方先动),A 的应对效果在 B 释放过程中同步结算。不是"A 先动",而是"B 先动但 A 的防御效果已就位"。
| 场景 | 执行顺序 |
|---|---|
| A 应对 B,B 不应对 A | B 先动(释放技能),A 的应对效果即时结算,A 后动 |
| B 应对 A,A 不应对 B | A 先动,B 的应对效果即时结算,B 后动 |
| 双方互相应对 / 无人应对 | 正常先后手(优先级 → 速度 → 随机) |
基础伤害公式(DamageCalculator)
物理伤害 = (攻击方 effective_atk / 防守方 effective_def) × 技能威力 × 连击数 × 属性克制 × 0.9随机
魔法伤害 = (攻击方 effective_spatk / 防守方 effective_spdef) × ...
魔法伤害 = (攻击方 effective_spatk / 防守方 effective_spdef) × ...
属性修正计算
| 修正值 | 公式 |
|---|---|
| 有效物攻 | base_atk × (1 + atk_up) / max(0.1, 1 + atk_down) |
| 有效物防 | base_def × (1 + def_up) / max(0.1, 1 + def_down) |
| 有效速度 | base_spd × (1 + speed_up) / max(0.1, 1 + speed_down) |
属性克制倍率
| 情况 | 伤害倍率 | 前端显示 |
|---|---|---|
| 克制(super effective) | ×2.0+ | 克制! |
| 普通 | ×1.0 | 无标注 |
| 抵抗(not very effective) | ≤×0.5 | 抵抗 |
吸血(LIFE_DRAIN)
吸血在造成伤害的同一回合触发(非回合结束)。
回血量 = 实际造成伤害 × life_drain_pct(蝙蝠技能 = 100%)
动画:攻击命中后播放绿色 +N 浮动数字
回血量 = 实际造成伤害 × life_drain_pct(蝙蝠技能 = 100%)
动画:攻击命中后播放绿色 +N 浮动数字
减伤(DAMAGE_REDUCTION)
减伤是防御方技能的被动效果,在被攻击时生效(ON_COUNTER 之前判定)。
减伤量直接乘在伤害上,如火焰护盾 = 70% 减伤 → 实际受 30% 伤害
减伤量直接乘在伤害上,如火焰护盾 = 70% 减伤 → 实际受 30% 伤害
回合结束状态伤害(每回合末结算)
| 状态 | 每回合伤害/效果 | 衰减规则 | 换人是否清除 |
|---|---|---|---|
| 中毒 poison | HP × 3% × 层数 | 不衰减 | 不清除 |
| 灼烧 burn | HP × 2% × 层数 | 每回合层数 ÷2,最少 -1 层;煤渣草对手在场则层数增长 | 不清除 |
| 冻伤 freeze | 每回合累加 HP÷12 的不可恢复伤害(从最大HP上限侵蚀) | 不衰减,直到倒下 | 不清除 |
| 寄生 leech | HP × 8% × 层数 | 不衰减 | 不清除 |
| 星陨 meteor | 倒计时归零时引爆:(敌方魔攻÷己方魔防) × 30层 × 0.9 | 倒计时每回合 -1 | - |
萌化系统(cute_stacks)
| 规则 | 说明 |
|---|---|
| 萌化层数上限 | 默认 3 层;无忧无虑特性 = 无限(999) |
| 换人 | 不清除 萌化层数 |
| 触发条件 | 使用含 CUTE_* 效果的技能时获得层数,不同技能有不同条件 |
状态何时被清除?
中毒/灼烧/寄生/冻伤换人不清除,只能通过主动清除技能(DISPEL_DEBUFFS)或特殊效果消除。
属性修正(atk_up/def_up 等)换人时清零。
属性修正(atk_up/def_up 等)换人时清零。
能量基础规则
初始能量
10
入场时满能量
聚能回复
+5
使用聚能(action=-1)时回复
能量上限
10
超出无效(gain_energy 有上限)
能量不足时的行为
①
技能需要能量 > 当前能量 → 尝试扣 HP 补差
②
HP 够 → 用 HP 补差(缺少能量 × HP×5%),执行技能
③
HP 不够 → 退回聚能逻辑:回复 +5 能量,不执行技能
换人与能量
换人不清除能量(能量随精灵本体保留)。
公平鸽「衡量」入场时:energy = min(10, max(自身, 敌方)) → 复制敌方能量
公平鸽「衡量」入场时:energy = min(10, max(自身, 敌方)) → 复制敌方能量
换人类型
| 类型 | 触发 | 优先级 | 玩家能否自选 |
|---|---|---|---|
| 主动换人 | 玩家点击换人按钮 | +99(高于所有技能) | ✅ 可选任意存活精灵(除当前在场) |
| 死亡换人 | 精灵 HP≤0 倒下 | 回合内即时处理(先/后手行动后各检查一次) | ✅ 玩家弹出选人面板(排除倒下那只);AI随机选 |
| 被迫脱离 | 吓退应对成功 / 泡沫幻影等 FORCE_SWITCH | 技能执行完后立即处理 | ✅ 玩家弹出选人面板(候选 = 存活且非当前);AI随机 |
换人时保留与清除的内容
| 内容 | 换人是否保留 |
|---|---|
| HP | 保留 |
| 能量 | 保留 |
| 中毒/灼烧/寄生/冻伤层数 | 保留 |
| 萌化层数 | 保留 |
| 属性修正(atk_up/def_up 等) | 清除 |
| 威力乘数(power_multiplier) | 清除 |
| 临时能耗修改 | 清除 |
| 蓄力状态 | 清除 |
换人后的入场处理
1
触发印记入场效果(降灵/荆刺/蓄电)
2
触发迅捷入场技能(AGILITY 标记的技能自动释放)
3
触发 ON_ENTER 特性(守护者/公平鸽衡量/系统发育等)
应对触发条件
| 应对类型 | 触发条件 | 代码标识 |
|---|---|---|
| 应对攻击 | 对方使用物理/魔法技能 | ON_COUNTER, category="attack" |
| 应对防御 | 对方使用防御技能 | ON_COUNTER, category="defense" |
| 应对变化 | 对方使用变化/状态技能 | ON_COUNTER, category="status" |
应对成功的额外效果(部分技能)
| 效果 | 说明 |
|---|---|
| INTERRUPT 打断 | 对方技能被打断,不生效(地刺等) |
| FORCE_SWITCH 脱离 | 应对成功后己方主动脱离(泡沫幻影等) |
| FORCE_ENEMY_SWITCH 逼退 | 应对成功后对方被迫脱离(吓退等) |
| DAMAGE 反弹 | 以对方技能威力造成伤害 |
| BURN/POISON 状态 | 附加状态给对方(火焰护盾 = 应对攻击后对方灼烧4层) |
脱离效果只在应对成功时触发(有效果的防御技能判定通过),应对失败(如敌方使用变化技能但己方只应对攻击)不触发脱离。
聚能能否被打断?
聚能可以被打断:若对方技能应对中有 INTERRUPT tag,在聚能执行前检查 → 打断则聚能不回能量。
胜负判定 & MP 系统
初始 MP
4
双方各 4 点斗志
扣 MP 条件
-1
己方精灵倒下 → MP -1
MP ≤ 0 立即判负(check_winner)。
先手精灵倒下后,若 MP ≤ 0 则直接结束,后手不再行动。
先手精灵倒下后,若 MP ≤ 0 则直接结束,后手不再行动。
MP 检查时机(每次都检查)
①
先手行动结束后
②
后手行动结束后
③
回合结束效果(中毒/灼烧等状态伤害)后