feedback5 WAA: the 孤岛风云 prisoners leave the gate confined and change model as their official prefabs do — grey while 【禁锢】, the blinking orange warning before the last confined attack, red once freed; the 4th attack already hits freed (community report of 2026-10-06 「囚徒类敌人出门就是已解放的模型」)

- Cause, client: the prisoner skeletons carry three clip sets whose collar light is grey, blinking orange
  and red. The official battle prefabs (local client battle/enm_pfb_6.ab: the Graphic component's anim key
  -> clip table, the modes' replace pairs, the clip the Spine starts on) draw mode Default (【禁锢】) on the
  grey set, mode R (the warning) on the orange set and mode L (【解放】) on the red one. The name-based role
  resolver gave 普通囚犯 / 老练囚犯 their unnumbered set — the red one — so they came out of the gate freed;
  no FORMS entry existed, so no prisoner ever changed (强壮囚犯 / 拳师囚犯 / 重犯 / 传奇重犯 stayed grey).
- Cause, sim: buff_template_data enemy_confinement[atk_cnt] spends a charge ON_BEFORE_ATTACK (not while
  麻痹) and switches to mode R when one is left; enemy_liberty_listener[warning] switches to mode L before
  the next attack (PRTS "进行第4次攻击前,切换至解放状态"). archetypes.js prisoner() counted on the 'attack'
  hook, after the damage, so the 4th attack still hit confined, and it sent no form.
- Now: prisoner() counts in `before` (an attack 麻痹 interrupts never gets there, PRTS 拳师囚犯), setForm
  'warning' (fx 'phase', drawn silently: kinds.js SILENT_PHASES) before attack times-1 and 'liberty' (fx
  'liberate') before attack times; 重犯's free-all and 杰斯顿's KO switch the freed ones too.
  render/units.js FORMS maps 'warning' / 'liberty' for the six skeletons (普通 / 老练囚犯 *2 / unnumbered,
  强壮囚犯 *2 / *3, 拳师囚犯 / 重犯 / 传奇重犯 *_orange / *_red). tools/assets/spine.mjs PREFAB_SPINE_ROLES gives
  普通囚犯 / 老练囚犯 their grey *3 set; data/assets.json regenerated (fetch-assets --offline --add-only, JSON
  compare: only those two anims and the hash), data/enemies.json too (build-data --offline: only their
  attackAnim.clip Attack -> Attack3, same length and strike frame). The 3D board draws the same Pixi views.
- Docs: ASSETS.md (PREFAB_SPINE_ROLES, the prisoner forms), SIM.md (the form fx), design/client.md (FORMS).
- Tests: test/content/feedback5-prisoners.test.js (the six: warning before attack 3, attack 4 hits with
  ATK +50 %, the forms reach the client and UnitInfo; free-all; 麻痹), test/render/feedback5-prisoners.test.js
  (manifest = the prefab's grey set, FORMS sets, view clips, PREFAB_SPINE_ROLES = the committed manifest) —
  both fail on the parent but the 麻痹 pin; test/render/feedback5-prisoners.browser.test.js (RENDER_E2E=1:
  three prisoners on the 2D and the 3D board, each model's set follows its sim form).
- Golden: 28 scenarios. Only the warning's new 'phase' fx (the prisoner fell before its 4th attack):
  roster-001, roster-003, roster-007, roster-024, roster-033, bond-miraShip-low. The 4th attack now hits
  freed, one attack earlier than before, so the fight after it moves: roster-004, roster-022, roster-026,
  bond-kazimierzShip-low, bond-raidShip-low, bond-soloShip-low, bond-victoriaShip-low, bond-visiShip-low,
  standin-01, diy-024, diy-061, diy-065, diy-066, diy-094, diy-097, diy-104, diy-105, diy-127; only the
  per-second snapshots besides the fx: roster-021, diy-017; and the bot matches whose battles field
  prisoners: solo-ABYSS-2, solo-HARD-9-boosted.
This commit is contained in:
sganggs committed 2026-10-06 21:57:51 +08:00
1 parent e1ffcd1b07
commit 6372f2892b
18 files changed
+788 -352

No files matched your search

+27 -27
View File
@@ -24,7 +24,7 @@
"total": 50,
"unspawned": 0,
"bossHpLeft": null,
"rngDraws": 595,
"rngDraws": 404,
"errors": {"count":0,"kinds":[]},
"players": {
"p1": {
@@ -34,44 +34,44 @@
"leaks": 28,
"leaksUncounted": 0,
"coins": 4,
"dmg": 280742,
"dmg": 266162,
"bossDmg": 0,
"heal": 26765,
"deaths": 19,
"heal": 16178,
"deaths": 23,
"layerGains": {"raidShip":13,"visiShip":2}
}
},
"units": [
["p1",1,"op","chess_char_3_12_a",2,null,0,0,73,3,40405,3648,0,20,2],
["p1",2,"op","chess_char_4_09_a",0,null,458.8,1,83,5,55322,5509,0,34,2],
["p1",3,"op","chess_char_3_05_a",2,null,1865.8,1,77,3,29828,11858,0,46,2],
["p1",4,"op","chess_char_3_18_a",2,null,2638,1,7,2,32526,8770,0,75,2],
["p1",5,"op","chess_char_4_04_a",1,null,1264.1,1,91,2,17806,8706,0,100,9],
["p1",6,"op","chess_char_4_07_a",1,null,0,0,74,1,16008,10455,0,37,1],
["p1",7,"op","chess_char_4_16_a",1,null,807.8,1,92,1,9136,11490,0,98,14],
["p1",8,"op","chess_char_3_01_a",2,null,1271,1,5,0,15937,0,0,131,2],
["p1",9,"op","chess_char_3_04_a",2,null,1218,1,8,0,0,0,26765,59,3],
["p1",10,"op","chess_char_3_21_a",2,null,161.7,1,6,1,42388,1110,0,121,2],
["p1",11,"op","chess_char_4_02_a",1,null,1272,1,93,3,11537,1724,0,61,1],
["p1",12,"op","chess_char_4_13_a",1,null,812,1,84,1,9849,812,0,27,1]
["p1",1,"op","chess_char_3_12_a",2,null,0,0,73,4,63063,4029,0,26,3],
["p1",2,"op","chess_char_4_09_a",0,null,333.6,1,82,4,41987,5634,0,33,2],
["p1",3,"op","chess_char_3_05_a",2,null,1442.3,1,75,2,30691,11964,0,46,2],
["p1",4,"op","chess_char_3_18_a",2,null,0,0,7,0,12109,3090,0,27,1],
["p1",5,"op","chess_char_4_04_a",1,null,951,1,90,2,20875,5420,0,75,9],
["p1",6,"op","chess_char_4_07_a",1,null,0,0,76,1,16997,12466,0,39,1],
["p1",7,"op","chess_char_4_16_a",1,null,0,0,88,1,7848,10473,0,110,10],
["p1",8,"op","chess_char_3_01_a",2,null,1271,1,5,2,25558,0,0,144,2],
["p1",9,"op","chess_char_3_04_a",2,null,1218,1,83,0,0,1218,16178,35,2],
["p1",10,"op","chess_char_3_21_a",2,null,1272,1,89,3,26523,1272,0,58,1],
["p1",11,"op","chess_char_4_02_a",1,null,0,0,9,2,11150,1653,0,50,1],
["p1",12,"op","chess_char_4_13_a",1,null,812,1,84,1,9361,812,0,25,1]
],
"enemies": {
"enemy_10001_trslim": [1,1,0,8,4860],
"enemy_1000_gopro_2": [1,1,0,0,1836],
"enemy_10018_sgrobh": [1,1,0,2811,8100],
"enemy_1001_bigbo": [1,0,1,1301,3217],
"enemy_10027_vtsk": [1,0,1,16122,2471],
"enemy_10018_sgrobh": [1,1,0,3793,8100],
"enemy_1001_bigbo": [1,0,1,2157,2613],
"enemy_10027_vtsk": [1,0,1,12395,936],
"enemy_10031_cnvsld": [1,0,1,0,0],
"enemy_10034_cnvsax": [1,0,1,0,0],
"enemy_10034_cnvsax": [1,0,1,808,2545],
"enemy_10042_prtrop": [1,0,1,0,0],
"enemy_1116_liprr_2": [21,12,9,5347,131366],
"enemy_1119_vofsd": [12,6,6,19166,93491],
"enemy_1121_lifbos_2": [9,1,7,9882,35401]
"enemy_1116_liprr_2": [21,14,7,7342,129693],
"enemy_1119_vofsd": [12,4,7,12831,76140],
"enemy_1121_lifbos_2": [9,1,7,8976,39440]
},
"hooks": [1,93,5100,939,939,1515,1509,3842,41,82,41,39,0,22264,26,41,50,27,1,41,5,0,6],
"events": {"atk":1088,"bounty":2,"deploy":43,"die":55,"dmg":1509,"engage":11,"fx":61,"heal":59,"layer":5,"leak":27,"skill":80,"spawn":62,"status":123},
"fx": {"blink":14,"dodge":7,"dp":5,"garrison":5,"liberate":13,"slash":16,"telegraph":1},
"snaps": "8b8be66d 3d41101a 548df15a 1009f8b0 08d13c52 9fe4b099 64799759 70e168de 0b87fdee 880a5dbc 4750bf5e 71d1cbac a6d3a940 eda8aa0d 5dec048f 8b7b727d 0b96370a"
"hooks": [1,90,5100,782,782,1274,1278,2889,45,81,35,32,0,17872,24,38,50,26,1,46,5,0,3],
"events": {"atk":875,"bounty":2,"deploy":40,"die":55,"dmg":1278,"engage":11,"fx":87,"heal":35,"layer":5,"leak":26,"skill":67,"spawn":62,"status":127},
"fx": {"beam":8,"blink":10,"dodge":3,"dp":7,"garrison":5,"liberate":16,"phase":13,"slash":24,"telegraph":1},
"snaps": "8b8be66d b3674b6a 84ebce5a 655e2381 01458f80 5429a40f 79ef58a7 e0c853b0 b82a9af1 80ef3ca7 cfdb8a3a 47523368 7134b000 32056871 69a04f4b c6c5ecc7 e01e6b80"
},
"standin-02": {
"about": "normal band 5 as stand-ins: chess_char_4_17_a→char_610_acfend chess_char_4_18_a→char_602_cdfend chess_char_5_05_a→char_602_cdfend chess_char_4_19_a→char_608_acpion chess_char_5_01_a→char_600_cpione chess_char_4_22_a→char_609_acguad chess_char_4_23_a→char_609_acguad chess_char_5_06_a→char_609_acguad chess_char_4_20_a→char_603_csnipe chess_char_4_24_a→char_604_ccast chess_char_5_02_a→char_604_ccast chess_char_5_03_a→char_612_accast",