feedback5: merge CB3 — community reports (operator kits): 砾's normal attack hits twice at 50 % 伤害倍率 (a 频次 enemy loses 2), 乌尔比安's S3 moves only onto his own board (never behind the one-helper 联防 map's red gate nor onto a boss field's other half), the 「受到攻击时」 counters answer every enemy damage instance (菲莱 S2 on 深溟巢涌者's pulse, 星熊, 泡泡, 刺玫, 余, 玛恩纳, 年, 斩业星熊), an in-place 复活 restarts a deploy-timed skill so a 突袭 member jumps at once, 银灰's normal attack plays its own impact (and 雷蛇 / 初雪 / 圣约送葬人 drop a skill mode's sound); five reports pinned; §25.17 between CB2's §25.16 and CB4's §25.18; data/assets.json lists 银灰's impact (p_imp_spear_n.mp3 fetched); golden: vs feedback5 CB3's own rules — roster-002/004/005/008/010/012/016/024/033/044, bond-indomShip-low/high, bond-kazimierzShip-low/high, bond-lateranoShip-low, boss-boss_2-solo, boss-boss_4-pair/-solo, hidden-boss_8-pair/-solo, hidden-boss_9-solo, diy-051, matches solo-FUNNY-2, coop2-NORMAL-3, coop4-ABYSS-7, coop2-ABYSS-10-boosted; vs CB3 exactly what feedback5 changed since its base (CB2, CB4, CB5)

The merge:
- server/sim/battle/players.js: CB3's onOwnBoard hunk is byte-identical to CB4's (git kept one); its comment and
  docs/SIM.md's onOwnBoard row now name 乌尔比安's S3 【移动】 next to the 突袭 landing (DESIGN §25.17.2 / §25.18).
- test/sim/facing-invariance.test.js: CB3's scenario setup (onOwnBoard off on the open field) and the CB4 merge's
  突袭 test (its enemy inside the board) merged cleanly, both kept.
- data/assets.json: CB3 had regenerated it offline without 银灰's entry (his official impact file was not on disk);
  `node tools/fetch-assets.mjs --add-only` (shared public/assets, add-only) downloaded p_imp_spear_n.mp3 — 8.8 KB,
  the only new file (ok 1, skipped 7968; the 117 misses are the known upstream gaps) — and rewrote the manifest.
  Field-wise JSON compare with CB3's manifest: only audio.sfx.units.char_172_svrash = { hit: p_imp_spear_n } plus hash
  and stats (files / bytes / sfxUnits +1); against feedback5: CB3's four operators (银灰 now the spear impact and no
  S3 swing, 雷蛇 / 初雪 / 圣约送葬人 without the skill-mode impact) plus hash / stats. §25.17.6 says so.
- docs/history/0.2.0.md: §25.17 placed in order, the intro's per-stream list and workstream list name CB3.

Golden moves outside CB3's commit list: coop2-NORMAL-3 fields 砾 from round 3 (her double hit) and 刺玫 in rounds 4-7
(instrumented); solo-FUNNY-1 (in CB3's list through the counters) fields no counter operator on feedback5's path, only
砾, whose two half hits change no kill, leak, LP or end stat there, so its digest stays.

Gate: non-browser suites 5003 / 5003, npm run golden ok, test/golden.test.js 9 / 9, lint 0 errors, check:imports ok,
typecheck ok.
This commit is contained in:
sganggs committed 2026-10-07 03:41:48 +08:00
commit d841d6ac22
33 files changed
+956 -245

No files matched your search

+9 -9
View File
@@ -2069,28 +2069,28 @@
"bossHpLeft": null,
"rngDraws": 0,
"errors": {"count":0,"kinds":[]},
"players": {"p1":{"killed":85,"total":99,"perfect":false,"leaks":14,"leaksUncounted":0,"coins":0,"dmg":1118348,"bossDmg":0,"heal":39314,"deaths":11,"layerGains":{}}},
"players": {"p1":{"killed":85,"total":99,"perfect":false,"leaks":14,"leaksUncounted":0,"coins":0,"dmg":1118419,"bossDmg":0,"heal":39314,"deaths":11,"layerGains":{}}},
"units": [
["p1",1,"op","chess_char_5_diy1_a",0,null,2592,1,120,0,6323,2592,0,24,0],
["p1",2,"op","chess_char_5_diy2_a",1,null,2592,1,113,1,21971,2592,1520,19,1],
["p1",3,"op","chess_char_5_diy1_a",2,null,2592,1,111,2,58248,3442,0,36,1],
["p1",4,"op","chess_char_5_diy2_b",0,"none",3228,1,121,12,109351,3228,0,74,1],
["p1",5,"op","chess_char_5_diy1_b",1,"none",3032.16,1,12,19,263069,21223,23687,95,6],
["p1",5,"op","chess_char_5_diy1_b",1,"none",3032.16,1,12,19,262996,21223,23687,95,6],
["p1",6,"op","chess_char_5_diy2_b",2,"none",732.33,1,93,16,190077,6715,0,82,2],
["p1",7,"op","chess_char_5_diy1_b",0,"uniequip_002_hsgma2",27.21,1,75,12,127942,6809,0,83,1],
["p1",8,"op","chess_char_5_diy2_b",1,"uniequip_002_hsgma2",1,1,3,5,67826,7203,6378,42,4],
["p1",9,"op","chess_char_5_diy1_b",2,"uniequip_002_hsgma2",0,0,5,2,79393,4086,0,44,2],
["p1",7,"op","chess_char_5_diy1_b",0,"uniequip_002_hsgma2",27.21,1,75,12,128015,6809,0,83,1],
["p1",8,"op","chess_char_5_diy2_b",1,"uniequip_002_hsgma2",1,1,3,5,67837,7203,6378,42,4],
["p1",9,"op","chess_char_5_diy1_b",2,"uniequip_002_hsgma2",0,0,5,2,79453,4086,0,44,2],
["p1",10,"op","chess_char_6_diy1_a",0,null,0,0,118,0,1484,5185,605,43,0],
["p1",11,"op","chess_char_6_diy2_a",1,null,2592,1,119,2,62301,2644,6236,42,2],
["p1",12,"op","chess_char_6_diy1_a",2,null,0,0,11,14,130362,3304,888,80,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_1010_demon":[42,38,4,21593,454505],"enemy_1320_wdrrl_2":[12,6,5,44200,309455],"enemy_1422_lrsldr_2":[45,41,4,3230,354388]},
"hooks": [1,121,6900,1369,1369,2970,2970,1467,96,109,22,20,0,11502,695,97,99,13,1,96,0,0,0],
"events": {"atk":1482,"deploy":20,"die":96,"dmg":2756,"engage":12,"fx":893,"heal":574,"leak":13,"skill":42,"spawn":113,"status":264},
"enemies": {"enemy_1010_demon":[42,38,4,21593,454505],"enemy_1320_wdrrl_2":[12,6,5,44200,309526],"enemy_1422_lrsldr_2":[45,41,4,3230,354388]},
"hooks": [1,121,6900,1369,1369,2973,2973,1467,96,109,22,20,0,11502,695,97,99,13,1,96,0,0,0],
"events": {"atk":1482,"deploy":20,"die":96,"dmg":2759,"engage":12,"fx":893,"heal":574,"leak":13,"skill":42,"spawn":113,"status":264},
"fx": {"counter":154,"explode":10,"strike":695,"undying":21,"zone":13},
"snaps": "3178290b a1e79565 3e8d348d 5df93583 8eaac70b 4fd00ffb c91cde31 fe3a467d bc262795 604cd633 bbf789d3 7026fba9 19512d4c 51ebad00 91169fd0 b7c98067 f6a5313f f592cfc9 b78c6faf 3522036e 0ff4b89b dc781b7a c895cf51"
"snaps": "3178290b a1e79565 3e8d348d 57d8c0ec 693d384c 31d69b16 e600d9d0 18d1f8ba 6b8f73c6 556d017a e6dbe7c7 a8f52db3 e86e3395 6f0b94e1 5de77001 0f5c8e43 2d22cb67 9d427bb7 b213b370 79e1e980 6dbddd86 d243d612 6b2385d8"
},
"diy-052": {
"about": "6_diy1_b=hsgma2/S1 6_diy2_b=hsgma2/S2 6_diy1_b=hsgma2/S3 6_diy2_b=hsgma2/S1/002_hsgma2 6_diy1_b=hsgma2/S2/002_hsgma2 6_diy2_b=hsgma2/S3/002_hsgma2 5_diy1_a=thumpy/S1 5_diy2_a=thumpy/S2 5_diy1_a=thumpy/S3 5_diy2_b=thumpy/S1 5_diy1_b=thumpy/S2 5_diy2_b=thumpy/S3",