feedback5 R19A: a stunned or frozen enemy is blocked by contact where it stands — an operator redeployed beside a frozen 隐匿 enemy blocks it and so reveals it (GitHub #232, @ccyl; the repro and the cause by @kukiC); golden: 52 scenarios move

ai.js updateEnemy returned on `stunned && !e.hidden` before the contact check (Battle._checkBlock), and 冻结 / 沉睡 / 浮空
set `stun` too, so a held enemy was never checked: an operator redeployed or deployed beside it, a slot freeing up or a
push / pull into contact with a stun all waited for the status to end (0.1.4 had it too). PRTS 异常效果: STUNNED / FROZEN
stop the enemy's moves and attacks and hold no 不可阻挡 (BLOCK_FREE), which SLEEPING / LEVITATE do; 术语释义 冻结 names no
block; 作战机制 §碰撞体积与位置识别: an operator deployed onto an enemy blocks it, a standing one included. The held branch now
runs the same check before it returns (no move, no attack, as before): _checkBlock still refuses 沉睡 / 浮空 / 恐惧 /
不可阻挡, an enemy held short of contact is blocked only once it walks in (the same point as without the status), and the
3 s 隐匿 window after a block's end is unchanged. A block the held enemy already holds is still not re-checked (a reborn()
重生 keeps its blocker, as in 0.1.4: noted as open in §25.22.1).

Golden — in each scenario the first divergence is a stunned or frozen enemy blocked during its status by an operator or
summon it touched with a free slot (traced one by one with an instrumented copy): roster-003, -014, -015, -016, -017,
-018, -019, -031, -036, -038, -040, -041, -045, -046, -047; bond-indomShip-high, bond-kazimierzShip-high,
bond-raidShip-low, bond-siracusaShip-low, bond-suntShip-low; boss-boss_3-solo, boss-boss_4-pair, boss-boss_7-solo,
hidden-boss_8-pair, hidden-boss_9-pair, hidden-boss_10-pair, unite-2; matches solo-FUNNY-1, solo-NORMAL-2, solo-HARD-2,
solo-ABYSS-1, coop2-NORMAL-3, coop2-HARD-4, coop3-ABYSS-5, coop2-NORMAL-8-serverrun, coop2-NORMAL-70-diy; diy-003, -004,
-026, -034, -035, -056, -057, -065, -066, -070, -071, -094, -095, -101, -102, -103. standins unchanged.

Tests: test/sim/feedback5-frozen-reblock.test.js (9; the four #232 cases and the 晕眩 / 冻结 capacity cases fail on the
parent). Docs: CHANGELOG 0.2.0 规则(按官方), docs/history/0.2.0.md §25.22.1, docs/SIM.md (§1.2 Blocking, stun, freeze),
docs/design/engine.md, docs/PLAYING.md.
This commit is contained in:
sganggs committed 2026-10-07 11:22:27 +08:00
1 parent 0b306baa49
commit 9123e76509
13 files changed
+959 -750

No files matched your search

+44 -44
View File
@@ -391,11 +391,11 @@
["p1",7,"op","chess_char_4_25_b",2,"uniequip_002_cetsyr",1671,1,51,0,0,7103,5985,0,2],
["p1",8,"op","chess_char_4_26_b",0,"uniequip_002_bldsk",1522,1,55,0,0,17721,26801,37,9]
],
"enemies": {"enemy_1166_dusbr_2":[14,11,3,33134,133646],"enemy_1170_dushld_2":[4,1,3,37533,54717],"enemy_9011_acrefr":[4,1,0,75921,133613]},
"enemies": {"enemy_1166_dusbr_2":[14,11,3,33134,133646],"enemy_1170_dushld_2":[4,1,3,37533,54688],"enemy_9011_acrefr":[4,1,0,75921,133641]},
"hooks": [1,58,5700,890,890,1451,1434,4113,41,47,35,33,100,4048,235,79,22,6,1,41,0,0,17],
"events": {"atk":1291,"deploy":36,"die":41,"dmg":1430,"engage":4,"fx":185,"heal":212,"leak":6,"skill":68,"spawn":30,"status":588},
"fx": {"bandage":9,"dodge":17,"extraAttack":56,"garrisonGrant":1,"mote":35,"redistribute":30,"revive":25,"reweave":2,"sandChains":4,"shield":5,"spGift":1},
"snaps": "7d5f326c b27b8121 c23f4b8e b11158be 745858a1 bc233c02 36600c75 96f7bb77 dd25f731 4dcd794a acc9ff4c c950f1bb dc098c51 333aecb6 1657b56a 3af3a6ec ae8a08a1 d78ef285 3ebb7cc5"
"snaps": "7d5f326c b27b8121 c23f4b8e b11158be 745858a1 bc233c02 36600c75 96f7bb77 dd25f731 4dcd794a acc9ff4c 889ddf60 c6455ec2 9e49b82f 26bf91e4 65dd88be eddb6226 14e89108 5e61cdf9"
},
"bond-investShip-low": {
"about": "投资人 low: tier 1 layers 1; chess_char_4_17_a chess_char_4_18_a chess_char_5_14_a chess_char_4_19_a chess_char_3_04_a chess_char_4_16_a chess_char_2_19_a chess_char_4_20_a",
@@ -546,24 +546,24 @@
"bossHpLeft": null,
"rngDraws": 19,
"errors": {"count":0,"kinds":[]},
"players": {"p1":{"killed":30,"total":30,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":403710,"bossDmg":0,"heal":1898,"deaths":3,"layerGains":{}}},
"players": {"p1":{"killed":30,"total":30,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":403610,"bossDmg":0,"heal":1898,"deaths":3,"layerGains":{}}},
"units": [
["p1",1,"op","chess_char_2_18_b",0,"uniequip_002_ashlok",1062.9,1,3,5,95295,2092,0,20,2],
["p1",1,"op","chess_char_2_18_b",0,"uniequip_002_ashlok",1062.9,1,3,6,95155,2092,0,20,2],
["p1",2,"op","chess_char_3_12_b",2,"uniequip_002_blemsh",3096,1,5,0,0,0,0,0,0],
["p1",3,"op","chess_char_5_08_b",2,"uniequip_002_horn",610.48,1,7,10,66609,4063,1898,52,2],
["p1",4,"op","chess_char_4_19_b",2,"uniequip_002_flamtl",2118,1,8,1,21184,0,0,17,2],
["p1",5,"op","chess_char_1_19_b",1,"uniequip_002_wildmn",0,0,9,4,81694,1971,0,50,2],
["p1",4,"op","chess_char_4_19_b",2,"uniequip_002_flamtl",2118,1,8,1,19858,0,0,17,2],
["p1",5,"op","chess_char_1_19_b",1,"uniequip_002_wildmn",0,0,9,3,83060,1971,0,50,2],
["p1",6,"op","chess_char_2_12_b",1,"uniequip_002_gravel",0,0,37,3,51889,4646,0,42,2],
["p1",7,"op","chess_char_3_17_b",1,"uniequip_002_shotst",3441.6,1,4,7,84143,0,0,29,3],
["p1",8,"op","chess_char_5_10_b",2,"uniequip_002_lisa",1480,1,6,0,2897,0,0,10,2],
["-","~1","device","trap_1105_accrate",null,null,100,1,1,0,0,0,0,0,null],
["-","~2","device","trap_1105_accrate",null,null,100,1,2,0,0,0,0,0,null]
],
"enemies": {"enemy_10124_uashld_2":[2,2,0,4508,124416],"enemy_1043_zomsbr":[23,23,0,20,146972],"enemy_1061_zomshd":[5,5,0,4181,132323]},
"hooks": [1,41,2613,239,239,479,594,3462,33,33,15,13,0,5189,999,11,30,0,1,43,0,0,5],
"events": {"atk":239,"deploy":9,"die":33,"dmg":474,"engage":7,"fx":53,"skill":28,"spawn":40,"status":121},
"enemies": {"enemy_10124_uashld_2":[2,2,0,4508,124416],"enemy_1043_zomsbr":[23,23,0,20,146972],"enemy_1061_zomshd":[5,5,0,4181,132223]},
"hooks": [1,41,2613,239,239,480,595,3447,33,33,15,13,0,5189,999,11,30,0,1,43,0,0,5],
"events": {"atk":239,"deploy":9,"die":33,"dmg":475,"engage":7,"fx":53,"skill":28,"spawn":40,"status":121},
"fx": {"aoe":24,"displace":14,"dodge":5,"flame":2,"overload":2,"riposte":1,"shield":2,"volley":3},
"snaps": "5a72bba9 62d17d06 7af61b0e de61a8e0 ff0837e9 7a7f5062 854b1dff e111ddbe ecf8b583"
"snaps": "5a72bba9 62d17d06 7af61b0e 145770cc 0e2d980c b193a626 7b9e061d 3713fd93 dd49f202"
},
"bond-kjeragShip-low": {
"about": "谢拉格 low: tier 1 layers 1; chess_char_1_02_a chess_char_3_02_a chess_char_3_03_a chess_char_3_04_a chess_char_2_05_a chess_char_3_11_a chess_char_4_26_a chess_char_3_01_a",
@@ -964,14 +964,14 @@
"round": 5,
"seed": 806507299,
"waveId": "act1autochess_05",
"time": 52.03,
"ticks": 1561,
"time": 53.63,
"ticks": 1609,
"reason": "cleared",
"killed": 17,
"total": 17,
"unspawned": 0,
"bossHpLeft": null,
"rngDraws": 19,
"rngDraws": 27,
"errors": {"count":0,"kinds":[]},
"players": {
"p1": {
@@ -983,28 +983,28 @@
"coins": 0,
"dmg": 126144,
"bossDmg": 0,
"heal": 3118,
"deaths": 0,
"heal": 2616,
"deaths": 1,
"layerGains": {"preciShip":4,"raidShip":1}
}
},
"units": [
["p1",1,"op","chess_char_4_17_a",1,null,2849,1,3,0,0,0,0,0,0],
["p1",2,"op","chess_char_4_18_a",1,null,3805.4,1,5,2,17633,1500,718,14,3],
["p1",3,"op","chess_char_2_09_a",1,null,2047.24,1,17,3,21927,0,0,26,1],
["p1",4,"op","chess_char_4_19_a",2,null,1274.82,1,9,1,20722,285,0,27,1],
["p1",1,"op","chess_char_4_17_a",1,null,1910.66,1,3,1,295,938,0,5,0],
["p1",2,"op","chess_char_4_18_a",1,null,3295.65,1,5,2,21486,1508,216,15,3],
["p1",3,"op","chess_char_2_09_a",1,null,2047.24,1,17,3,20715,0,0,25,1],
["p1",4,"op","chess_char_4_19_a",2,null,0,0,9,1,15228,1560,0,23,1],
["p1",5,"op","chess_char_1_18_a",1,null,3101.37,1,14,5,40597,4523,2400,48,3],
["p1",6,"op","chess_char_4_13_a",1,null,1587,1,4,1,9154,0,0,14,4],
["p1",6,"op","chess_char_4_13_a",1,null,1587,1,4,2,11064,0,0,15,4],
["p1",7,"op","chess_char_4_14_a",1,null,1276,1,6,0,0,0,0,0,0],
["p1",8,"op","chess_char_4_20_a",2,null,1217,1,8,5,16110,0,0,15,0],
["p1",8,"op","chess_char_4_20_a",2,null,1217,1,8,3,16758,0,0,15,0],
["-","~1","device","trap_1105_accrate",null,null,100,1,1,0,0,0,0,0,null],
["-","~2","device","trap_1105_accrate",null,null,100,1,2,0,0,0,0,0,null]
],
"enemies": {"enemy_1116_liprr":[11,11,0,216,69696],"enemy_1116_liprr_2":[4,4,0,812,34560],"enemy_1118_lidbox_2":[2,2,0,1487,21888]},
"hooks": [1,30,1561,189,189,224,220,81,17,20,12,12,0,4733,233,18,17,0,1,17,2,0,7],
"events": {"atk":204,"deploy":11,"die":20,"dmg":206,"engage":6,"fx":49,"heal":51,"layer":2,"skill":26,"spawn":27,"status":74},
"fx": {"aoe":3,"blink":3,"dodge":7,"flame":1,"frostNova":4,"garrison":2,"garrisonGrant":1,"liberate":3,"phase":11,"riposte":7,"rockslide":3,"shieldBreak":4},
"snaps": "0d70c7b9 c3f43a03 eb2f3dd4 82cb8790 8ef743dc 84dbbce3"
"enemies": {"enemy_1116_liprr":[11,11,0,122,69696],"enemy_1116_liprr_2":[4,4,0,1078,34560],"enemy_1118_lidbox_2":[2,2,0,3535,21888]},
"hooks": [1,30,1609,197,197,240,235,80,18,21,12,12,0,4590,247,20,17,0,1,18,2,0,7],
"events": {"atk":213,"deploy":11,"die":21,"dmg":222,"engage":7,"fx":52,"heal":50,"layer":2,"skill":26,"spawn":27,"status":83},
"fx": {"aoe":3,"blink":3,"block":1,"dodge":7,"flame":1,"frostNova":4,"garrison":2,"garrisonGrant":1,"liberate":3,"phase":10,"riposte":7,"rockslide":3,"shieldBreak":4,"thorns":3},
"snaps": "0d70c7b9 c3f43a03 eb2f3dd4 b15a471d 59890be2 3a914fb6"
},
"bond-raidShip-high": {
"about": "突袭 high: tier 1 layers 999; chess_char_4_17_b chess_char_4_18_b chess_char_2_09_b chess_char_4_19_b chess_char_1_18_b chess_char_4_14_b chess_char_4_20_b chess_char_4_21_b",
@@ -1127,8 +1127,8 @@
"round": 5,
"seed": 3227754780,
"waveId": "act1autochess_05",
"time": 76.77,
"ticks": 2303,
"time": 76.73,
"ticks": 2302,
"reason": "cleared",
"killed": 19,
"total": 19,
@@ -1149,10 +1149,10 @@
["p1","~1","token","token_10031_swire2_gdtrap",null,null,1000,1,9,0,0,0,0,0,null]
],
"enemies": {"enemy_1010_demon":[3,3,0,6485,25920],"enemy_1010_demon_2":[1,1,0,5868,17280],"enemy_1071_dftman":[15,15,0,793,48384]},
"hooks": [1,28,2303,229,229,281,303,0,24,24,5,5,0,4758,29,25,19,0,1,24,0,0,0],
"hooks": [1,28,2302,229,229,281,303,0,24,24,5,5,0,4757,29,25,19,0,1,24,0,0,0],
"events": {"atk":230,"deploy":9,"die":24,"dmg":303,"engage":7,"fx":47,"skill":14,"spawn":28,"status":57},
"fx": {"aoe":8,"coin":4,"crit":6,"dp":1,"strike":27,"summon":1},
"snaps": "d4f0d969 3a7c5df7 2ef957aa a7f6517c a92455fd 68aec1ce eedce2a7 6b90d848"
"snaps": "d4f0d969 3a7c5df7 2ef957aa a7f6517c 59a77ce3 96b3b4ea d486812a 5107747b"
},
"bond-siracusaShip-high": {
"about": "叙拉古 high: tier 2 layers 999; chess_char_1_08_b chess_char_2_16_b chess_char_3_18_b chess_char_5_01_b chess_char_1_07_b chess_char_3_19_b chess_char_4_10_b chess_char_4_26_b token_10028_vigil_wolf",
@@ -1448,34 +1448,34 @@
"round": 5,
"seed": 3833599911,
"waveId": "act1autochess_05",
"time": 55.87,
"ticks": 1676,
"time": 54.67,
"ticks": 1640,
"reason": "cleared",
"killed": 21,
"total": 21,
"unspawned": 0,
"bossHpLeft": null,
"rngDraws": 18,
"rngDraws": 17,
"errors": {"count":0,"kinds":[]},
"players": {"p1":{"killed":21,"total":21,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":93600,"bossDmg":0,"heal":604,"deaths":1,"layerGains":{}}},
"units": [
["p1",1,"op","chess_char_1_02_b",1,"uniequip_002_yak",3154,1,4,0,0,0,0,0,0],
["p1",2,"op","chess_char_4_17_a",1,null,2698.96,1,5,4,9164,150,0,20,0],
["p1",3,"op","chess_char_4_18_a",1,null,4587.2,1,8,7,14442,0,0,17,1],
["p1",4,"op","chess_char_4_16_a",2,null,0,0,10,3,13496,1850,604,26,2],
["p1",5,"op","chess_char_1_01_b",1,"uniequip_002_inside",1421,1,6,6,26692,0,0,42,2],
["p1",2,"op","chess_char_4_17_a",1,null,2713.96,1,5,4,8462,135,0,19,0],
["p1",3,"op","chess_char_4_18_a",1,null,4587.2,1,8,4,14376,0,0,17,1],
["p1",4,"op","chess_char_4_16_a",2,null,0,0,10,2,13892,1850,604,30,2],
["p1",5,"op","chess_char_1_01_b",1,"uniequip_002_inside",1421,1,6,9,28352,0,0,43,2],
["p1",6,"op","chess_char_4_12_a",2,null,1754,1,7,0,0,0,0,0,0],
["p1",7,"op","chess_char_4_13_a",1,null,1587,1,9,1,11465,0,0,28,6],
["p1",8,"op","chess_char_4_14_a",1,null,1276,1,11,0,18340,0,0,14,3],
["p1",7,"op","chess_char_4_13_a",1,null,1587,1,9,1,11229,0,0,28,6],
["p1",8,"op","chess_char_4_14_a",1,null,1276,1,11,1,17288,0,0,14,3],
["-","~1","device","trap_1105_accrate",null,null,100,1,1,0,0,0,0,0,null],
["-","~2","device","trap_1105_accrate",null,null,100,1,2,0,0,0,0,0,null],
["-","~3","device","trap_1105_accrate",null,null,100,1,3,0,0,0,0,0,null]
],
"enemies": {"enemy_1249_lysdb_2":[5,5,0,604,34560],"enemy_1251_lysyta":[15,15,0,182,47520],"enemy_1328_cbjedi":[1,1,0,1214,11520]},
"hooks": [1,32,1676,172,172,236,227,6,23,22,14,13,20,6028,516,14,21,0,1,23,0,0,0],
"events": {"atk":172,"deploy":8,"die":22,"dmg":223,"engage":6,"fx":47,"heal":1,"skill":29,"spawn":32,"status":100},
"fx": {"block":4,"explosion":3,"frostNova":6,"rockslide":1,"shieldBreak":9,"swordRain":12,"swordStorm":2,"thorns":10},
"snaps": "a178d904 2983cdc8 139d44ee 251a06de abba8bb0 de2ac2c1"
"enemies": {"enemy_1249_lysdb_2":[5,5,0,1007,34560],"enemy_1251_lysyta":[15,15,0,135,47520],"enemy_1328_cbjedi":[1,1,0,843,11520]},
"hooks": [1,32,1640,175,175,237,228,5,23,22,14,13,21,5955,504,16,21,0,1,23,0,0,0],
"events": {"atk":175,"deploy":8,"die":22,"dmg":225,"engage":6,"fx":45,"heal":1,"skill":29,"spawn":32,"status":101},
"fx": {"block":4,"explosion":3,"frostNova":6,"rockslide":1,"shieldBreak":8,"swordRain":12,"swordStorm":2,"thorns":9},
"snaps": "a178d904 2983cdc8 139d44ee c6071100 b5953eea e466bb8a"
},
"bond-suntShip-high": {
"about": "绝技 high: tier 2 layers 999; chess_char_1_02_b chess_char_1_04_b chess_char_4_19_a chess_char_1_01_b chess_char_1_03_b chess_char_1_06_b chess_char_4_20_a chess_char_4_21_a",