feedback5 WE1: 秘术师 stores its energy at the attack check, not one interval later (GitHub #181)

PRTS 分支特性信息 秘术师: "能量储存与攻击占用相同的攻击间隔:在进行攻击判定时…若无有效目标且能量储存数未满,则改为储存一份
攻击能量(属于攻击行为);仅没有有效目标,且能量储存数已满的情况下才进入待机状态", "攻击被打断且弹道未能成功生成的情况下,储存的
能量不会被消耗"; PRTS 异常效果 缴械 "秘术师储存能量同样无法进行".

- ai.js updateAlly: a ready unit (able to act, not disarmed) whose attack check finds no valid target — no target, or
  its profile's canAttack false (a 秘术师 kit's target rule: 深靛's bound enemies, 维伊's marked ones) — calls the
  profile's storeEnergy; a stored energy restarts the attack interval, a full store idles with the attack ready. A
  DEFAULT cast at the check that leaves no target stores in the same check.
- professions.js mystic: storeEnergy (up to bb times), releaseEnergy (performAttack, after beforeAttack: a cancelled
  shot keeps them) and hitsFn(b, u, info) — the energies leave with the attack and land with its main hit; the old
  separate store timer (it started only once the attack was ready and never restarted the interval) is gone.
  [ASSUMED] a redeployment holds no energy.
- 维伊 / 黑键 kits: their own tick stores become the kit's storeEnergy on the shared check; 深靛 / 维伊 no longer write
  hadTarget themselves.

Golden: roster-003, roster-021, roster-022, bond-preciShip-high (深靛 stores at her check); matches solo-FUNNY-1,
solo-NORMAL-2, solo-HARD-2, solo-ABYSS-1, solo-ABYSS-2, coop2-NORMAL-3, coop2-HARD-4, coop4-FUNNY-6, coop4-ABYSS-7,
coop2-NORMAL-8-serverrun, solo-HARD-9-boosted, coop2-ABYSS-10-boosted, coop2-NORMAL-14-standins (each fields 深靛);
diy-032 (维伊) and diy-114 (黑键): the first store after a redeployment comes at the next tick's attack check instead of
the end of the redeploy tick (with the old tick store added back as a fallback the diy family matches the old digests).
fields, standins unchanged.

Tests: test/sim/feedback5-mystic-store.test.js (new, 4); op_veen, op_ebnhlz, kits_t1t2, kits_alt_t1 pass unchanged.
Docs: SIM.md §Professions (mystic row, profile hooks).
This commit is contained in:
sganggs committed 2026-10-06 14:53:56 +08:00
1 parent a009d77d71
commit 8f62f3e360
11 files changed
+354 -214

No files matched your search

+49 -49
View File
@@ -135,27 +135,27 @@
"time": 110,
"ticks": 3300,
"reason": "timeout",
"killed": 83,
"killed": 82,
"total": 85,
"unspawned": 0,
"bossHpLeft": null,
"rngDraws": 65,
"errors": {"count":0,"kinds":[]},
"players": {
"p1": {"killed":83,"total":85,"perfect":false,"leaks":2,"leaksUncounted":0,"coins":14,"dmg":118566,"bossDmg":0,"heal":18912,"deaths":4,"layerGains":{"preciShip":3}}
"p1": {"killed":82,"total":85,"perfect":false,"leaks":3,"leaksUncounted":0,"coins":12,"dmg":119937,"bossDmg":0,"heal":18305,"deaths":4,"layerGains":{"preciShip":3}}
},
"units": [
["p1",1,"op","chess_char_1_10_b",0,"uniequip_002_sunbr",2493,1,5,1,1,0,298,4,3],
["p1",2,"op","chess_char_1_12_b",1,"uniequip_002_estell",2042.2,1,7,4,1786,818,173,29,2],
["p1",3,"op","chess_char_1_20_b",1,"uniequip_002_liskam",2697.7,1,10,12,23549,748,0,74,1],
["p1",4,"op","chess_char_1_18_b",1,"uniequip_002_utage",1059.8,1,11,8,23248,8723,6429,94,1],
["p1",1,"op","chess_char_1_10_b",0,"uniequip_002_sunbr",2493,1,5,1,1,0,366,5,4],
["p1",2,"op","chess_char_1_12_b",1,"uniequip_002_estell",1868.8,1,7,4,2973,1059,173,30,2],
["p1",3,"op","chess_char_1_20_b",1,"uniequip_002_liskam",840.52,1,10,11,23272,2789,0,73,1],
["p1",4,"op","chess_char_1_18_b",1,"uniequip_002_utage",3354,1,11,7,23856,5745,5745,89,1],
["p1",5,"op","chess_char_1_19_b",1,"uniequip_002_wildmn",0,0,14,8,43612,8315,0,80,2],
["p1",6,"op","chess_char_1_13_b",1,"uniequip_002_podego",2446.5,1,8,3,3,0,0,2,2],
["p1",7,"op","chess_char_1_14_b",1,"uniequip_002_greyy",0,0,12,9,874,2612,0,18,1],
["p1",8,"op","chess_char_1_17_b",1,"uniequip_002_indigo",0,0,15,8,12385,1613,0,14,1],
["p1",9,"op","chess_char_2_01_a",1,null,1694,1,4,11,4929,0,0,26,1],
["p1",10,"op","chess_char_2_02_a",1,null,1400,1,6,0,0,0,6455,38,4],
["p1",11,"op","chess_char_2_04_a",1,null,977,1,9,19,8179,545,0,58,2],
["p1",6,"op","chess_char_1_13_b",1,"uniequip_002_podego",2446.5,1,8,6,1159,0,0,6,3],
["p1",7,"op","chess_char_1_14_b",1,"uniequip_002_greyy",0,0,12,8,2471,2981,0,19,1],
["p1",8,"op","chess_char_1_17_b",1,"uniequip_002_indigo",0,0,15,6,9632,1613,0,7,1],
["p1",9,"op","chess_char_2_01_a",1,null,1694,1,4,11,4437,0,0,26,1],
["p1",10,"op","chess_char_2_02_a",1,null,1400,1,6,0,0,0,6463,38,4],
["p1",11,"op","chess_char_2_04_a",1,null,977,1,9,20,8524,0,0,57,3],
["p1",12,"op","chess_char_2_05_a",1,null,0,0,13,0,0,4616,3219,20,1],
["p1",13,"token","token_10000_silent_healrb",null,null,1000,1,106,0,0,0,2339,37,null],
["-","~1","device","trap_1105_accrate",null,null,100,1,1,0,0,0,0,0,null],
@@ -169,22 +169,22 @@
"enemy_1041_lazerd": [1,1,0,418,2430],
"enemy_1116_liprr_2": [1,1,0,28,6750],
"enemy_1169_duphlx": [1,1,0,11,3600],
"enemy_1195_sfyin": [12,12,0,102,21600],
"enemy_1195_sfyin": [12,12,0,125,21600],
"enemy_1196_msfyin": [24,24,0,0,48],
"enemy_1197_sfshu": [9,9,0,437,20250],
"enemy_1197_sfshu": [9,9,0,347,20250],
"enemy_1198_msfshu": [27,27,0,0,81],
"enemy_1200_msfjin": [1,1,0,0,30],
"enemy_1234_dsubrl_2": [1,1,0,7959,12600],
"enemy_1292_duskld": [1,1,0,1152,9010],
"enemy_1387_winshd": [1,0,0,778,9309],
"enemy_1292_duskld": [1,0,0,1408,9924],
"enemy_1387_winshd": [1,0,0,952,9766],
"enemy_1502_crowns": [1,1,0,259,5400],
"enemy_2008_flking": [1,0,0,11860,0],
"enemy_2008_flking": [1,0,0,10628,0],
"enemy_9016_acstmr": [1,1,0,0,8]
},
"hooks": [1,105,3300,574,574,636,728,216,87,91,21,20,0,15537,205,28,85,0,1,91,1,0,0],
"events": {"atk":638,"bounty":7,"deploy":17,"die":91,"dmg":707,"engage":10,"fx":89,"heal":191,"layer":1,"skill":41,"spawn":101,"status":198},
"fx": {"aoe":1,"blink":1,"displace":8,"ember":1,"explode":8,"garrison":1,"heal":3,"pulse":31,"reveal":1,"sleep":6,"summon":25,"undying":1,"zone":2},
"snaps": "ba9efbdf a02eb193 460ac297 ade04e6a 7abe4489 4fa14e24 2d31bcf9 b7f6436a 82e99758 65a1db5b 88f5cc4f"
"hooks": [1,105,3300,572,572,645,737,212,86,90,24,22,0,16965,221,27,85,0,1,90,1,0,0],
"events": {"atk":644,"bounty":6,"deploy":17,"die":90,"dmg":720,"engage":10,"fx":95,"heal":182,"layer":1,"skill":46,"spawn":101,"status":216},
"fx": {"aoe":1,"blink":1,"displace":8,"ember":1,"explode":8,"garrison":1,"heal":4,"pulse":31,"reveal":1,"revive":1,"sleep":9,"summon":25,"undying":1,"zone":3},
"snaps": "c29e3835 5fb0366b b546dd37 6a32dfd5 34277801 63ebe110 4c1bc600 26e3b0be 9fb56d80 12d64b27 70d04cf0"
},
"roster-004": {
"about": "pass 0 band 2: chess_char_2_08_a chess_char_2_17_a chess_char_2_18_a chess_char_2_07_a chess_char_2_09_a chess_char_2_11_a chess_char_2_13_a chess_char_2_16_a chess_char_2_12_a chess_char_2_06_a chess_char_2_10_a chess_char_2_14_a",
@@ -1350,29 +1350,29 @@
"round": 4,
"seed": 3256727035,
"waveId": "act1autochess_04",
"time": 98.07,
"ticks": 2942,
"time": 102.4,
"ticks": 3072,
"reason": "cleared",
"killed": 29,
"killed": 28,
"total": 29,
"unspawned": 0,
"bossHpLeft": null,
"rngDraws": 157,
"rngDraws": 141,
"errors": {"count":0,"kinds":[]},
"players": {"p1":{"killed":29,"total":29,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":8,"dmg":238140,"bossDmg":0,"heal":3572,"deaths":3,"layerGains":{}}},
"players": {"p1":{"killed":28,"total":29,"perfect":false,"leaks":1,"leaksUncounted":0,"coins":8,"dmg":236542,"bossDmg":0,"heal":3433,"deaths":4,"layerGains":{}}},
"units": [
["p1",1,"op","chess_char_1_02_b",0,"none",3229.86,1,5,1,1795,1562,779,14,1],
["p1",2,"op","chess_char_1_20_a",0,null,893.77,1,6,2,6656,1304,0,37,2],
["p1",1,"op","chess_char_1_02_b",0,"none",3674.03,1,5,0,3262,1093,640,16,1],
["p1",2,"op","chess_char_1_20_a",0,null,0,0,6,0,2746,2198,0,24,1],
["p1",3,"op","chess_char_1_04_b",0,"none",0,0,11,2,7053,2904,0,33,1],
["p1",4,"op","chess_char_1_08_b",0,"none",2414.98,1,44,1,11193,3115,0,38,3],
["p1",4,"op","chess_char_1_08_b",0,"none",2414.98,1,44,1,11193,3115,0,38,4],
["p1",5,"op","chess_char_1_18_a",0,null,2530,1,15,0,20592,2233,2233,45,4],
["p1",6,"op","chess_char_1_19_a",0,null,0,0,9,3,7931,1482,0,31,1],
["p1",7,"op","chess_char_1_17_a",0,null,1139,1,7,0,11585,0,0,15,2],
["p1",7,"op","chess_char_1_17_a",0,null,1139,1,7,1,11229,0,0,11,2],
["p1",8,"op","chess_char_1_01_b",0,"none",1341,1,10,4,16855,0,0,83,5],
["p1",9,"op","chess_char_1_03_b",0,"none",1311,1,12,5,69334,0,0,39,2],
["p1",10,"op","chess_char_1_06_b",0,"none",1297,1,14,3,34003,559,559,73,2],
["p1",11,"op","chess_char_1_07_b",1,"none",1527,1,4,4,29924,0,0,27,1],
["p1",12,"op","chess_char_1_09_b",0,"none",2085,1,8,4,21218,0,0,75,25],
["p1",11,"op","chess_char_1_07_b",1,"none",1527,1,4,5,27587,0,0,32,2],
["p1",12,"op","chess_char_1_09_b",0,"none",2085,1,8,4,24758,0,0,75,25],
["-","~1","device","trap_1105_accrate",null,null,100,0,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]
@@ -1381,19 +1381,19 @@
"enemy_10043_sailor": [1,1,0,0,4950],
"enemy_10124_uashld_2": [1,1,0,1427,22500],
"enemy_1081_sotisd": [1,1,0,1110,13500],
"enemy_1116_liprr": [12,12,0,384,59400],
"enemy_1116_liprr_2": [6,6,0,307,40500],
"enemy_1121_lifbos": [3,3,0,4543,54000],
"enemy_1174_duholy": [1,1,0,1708,13500],
"enemy_1116_liprr": [12,12,0,130,59400],
"enemy_1116_liprr_2": [6,6,0,373,40500],
"enemy_1121_lifbos": [3,3,0,4950,54000],
"enemy_1174_duholy": [1,1,0,1912,13500],
"enemy_1229_darmy_2": [1,1,0,2835,4950],
"enemy_1325_cbgpro_2": [1,1,0,55,4140],
"enemy_1504_cqbw": [1,1,0,791,9000],
"enemy_2085_skzjxd_2": [1,1,0,0,11700]
"enemy_2085_skzjxd_2": [1,0,1,0,10102]
},
"hooks": [1,45,2942,615,615,727,734,928,32,33,49,47,32,9649,110,27,29,0,1,32,0,0,0],
"events": {"atk":688,"bounty":4,"deploy":13,"die":33,"dmg":726,"engage":12,"fx":41,"heal":32,"skill":96,"spawn":44,"status":256},
"fx": {"crit":26,"dp":3,"explode":1,"liberate":6,"shield":4,"telegraph":1},
"snaps": "08475251 060e1404 a77d3fa6 74ab94fb 39ec40a8 4a899aaf 8a49b1ba b7ea4461 d110804c df9fa85e"
"hooks": [1,45,3072,593,593,708,716,789,32,34,50,48,32,10207,109,27,29,1,1,32,0,0,0],
"events": {"atk":666,"bounty":4,"deploy":13,"die":33,"dmg":708,"engage":12,"fx":42,"heal":32,"leak":1,"skill":98,"spawn":44,"status":250},
"fx": {"crit":29,"dp":4,"explode":1,"liberate":5,"shield":2,"telegraph":1},
"snaps": "08475251 060e1404 a77d3fa6 74ab94fb 597ed35c b0c3395a 90aa0cea a4456ef2 82f4194a 8213606e 9b3cc85b"
},
"roster-022": {
"about": "pass 1 band 2: chess_char_1_10_b chess_char_1_12_b chess_char_1_20_b chess_char_1_18_b chess_char_1_19_b chess_char_1_13_b chess_char_1_14_b chess_char_1_17_b chess_char_2_01_a chess_char_2_02_a chess_char_2_04_a chess_char_2_05_a",
@@ -1411,18 +1411,18 @@
"total": 28,
"unspawned": 0,
"bossHpLeft": null,
"rngDraws": 158,
"rngDraws": 157,
"errors": {"count":0,"kinds":[]},
"players": {"p1":{"killed":16,"total":28,"perfect":false,"leaks":12,"leaksUncounted":0,"coins":4,"dmg":203302,"bossDmg":0,"heal":19896,"deaths":6,"layerGains":{}}},
"units": [
["p1",1,"op","chess_char_1_10_b",1,"none",0,0,7,1,6370,8454,1895,21,2],
["p1",1,"op","chess_char_1_10_b",1,"none",0,0,7,1,6370,8435,1895,21,2],
["p1",2,"op","chess_char_1_12_b",0,"none",0,0,8,3,27258,5955,714,18,1],
["p1",3,"op","chess_char_1_20_b",0,"none",2872,1,6,1,11594,10327,0,24,8],
["p1",4,"op","chess_char_1_18_b",0,"none",0,0,9,0,4940,7421,2877,6,2],
["p1",5,"op","chess_char_1_19_b",0,"none",0,0,10,2,20108,8644,0,42,1],
["p1",6,"op","chess_char_1_13_b",0,"none",1095,1,3,0,17174,0,3175,49,2],
["p1",7,"op","chess_char_1_14_b",0,"none",1430,1,4,6,77183,500,0,34,2],
["p1",8,"op","chess_char_1_17_b",0,"none",1356,1,12,1,18041,1000,0,7,3],
["p1",7,"op","chess_char_1_14_b",0,"none",1430,1,4,6,75682,500,0,34,2],
["p1",8,"op","chess_char_1_17_b",0,"none",1356,1,12,1,19542,1000,0,6,3],
["p1",9,"op","chess_char_2_01_a",0,null,677.6,1,35,0,5908,678,0,9,0],
["p1",10,"op","chess_char_2_02_a",0,null,1400,1,5,0,0,1000,8195,45,2],
["p1",11,"op","chess_char_2_04_a",0,null,0,0,11,2,14727,1027,0,25,7],
@@ -1433,7 +1433,7 @@
"enemies": {
"enemy_1007_slime": [1,1,0,0,950],
"enemy_1025_reveng": [1,1,0,556,8640],
"enemy_1116_liprr": [12,9,3,727,95134],
"enemy_1116_liprr": [12,9,3,708,95134],
"enemy_1116_liprr_2": [6,4,2,1413,56359],
"enemy_1121_lifbos": [3,0,2,1910,16825],
"enemy_1160_hvyslr": [1,1,0,2131,17280],
@@ -1442,10 +1442,10 @@
"enemy_1404_msnip": [1,0,1,6948,5875],
"enemy_2002_bearmi": [1,0,1,9048,2918]
},
"hooks": [1,43,3300,363,363,888,880,767,22,33,31,31,0,12925,98,30,28,11,1,22,0,0,0],
"events": {"atk":382,"bounty":2,"deploy":13,"die":22,"dmg":880,"engage":10,"fx":26,"heal":463,"leak":11,"skill":62,"spawn":42,"status":202},
"hooks": [1,43,3300,361,361,887,879,766,22,33,31,31,0,12928,98,30,28,11,1,22,0,0,0],
"events": {"atk":380,"bounty":2,"deploy":13,"die":22,"dmg":879,"engage":10,"fx":26,"heal":462,"leak":11,"skill":62,"spawn":42,"status":202},
"fx": {"buff":1,"crit":1,"liberate":4,"shield":16,"zone":4},
"snaps": "9001a773 d682bb23 8fbcd651 5df53986 07e3ac0f 0f7aa6b9 5acdf417 61e10070 400a77ca 652541a4 8bc87622"
"snaps": "f47a9f8c 4266c760 0e931b86 d24c1ab5 c099f108 f478288e 5ac67dbc 4b7a912c 8be6bdb2 03342f4c 6638335a"
},
"roster-023": {
"about": "pass 1 band 2: chess_char_2_08_a chess_char_2_17_a chess_char_2_18_a chess_char_2_07_a chess_char_2_09_a chess_char_2_11_a chess_char_2_13_a chess_char_2_16_a chess_char_2_12_a chess_char_2_06_a chess_char_2_10_a chess_char_2_14_a",