diff --git a/data/config.json b/data/config.json index 493d6d87..d2ddd2af 100644 --- a/data/config.json +++ b/data/config.json @@ -1 +1 @@ -{"season":"act2autochess","seasonName":"卫戍协议:盟约","modes":{"mode_training_1":{"modeId":"mode_training_1","name":"入门协议","code":"AC-TR-1","sortId":1,"type":"LOCAL","difficulty":"TRAINING","inScope":false,"color":"#4ed8af","iconId":"mode_training_icon","backgroundId":"background_training","desc":"用以熟悉协议内容的模式","effectDescList":["·仅可使用预置的调配干员","·无奖励","·无法用于解锁策略"],"unlockText":null,"specialPhaseTime":150,"activeBondIds":["yanShip","sargonShip","victoriaShip","kjeragShip","lateranoShip","egirShip","siracusaShip","kazimierzShip","preciShip","swiftShip","skillfulShip","arcaneShip","steadShip","deputShip","visiShip","miraShip","investShip","raidShip","indomShip","maniShip","emptyShip","soloShip","suntShip"],"inactiveBondIds":[],"inactiveEnemyKeys":[],"lastRound":4,"bossRound":4,"hiddenRound":null,"rounds":{"1":{"template":"act1autochess_tr01","bossTemplates":null,"combatTimeLimit":40,"levelMaxPlayTime":40,"prepTime":999,"prepTimeData":999,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"2":{"template":"act1autochess_tr02","bossTemplates":null,"combatTimeLimit":45,"levelMaxPlayTime":45,"prepTime":999,"prepTimeData":999,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"3":{"template":"act1autochess_tr02","bossTemplates":null,"combatTimeLimit":45,"levelMaxPlayTime":45,"prepTime":999,"prepTimeData":999,"isSpPrepare":true,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"4":{"template":null,"bossTemplates":{"boss_7":"act1autochess_tr04"},"combatTimeLimit":null,"levelMaxPlayTime":180,"prepTime":999,"prepTimeData":999,"isSpPrepare":false,"isBoss":true,"isHidden":false,"bossOvertimeAfter":150}},"spRounds":[3],"combatTimeLimit":{"1":40,"2":45,"3":45,"4":null},"enemyScale":{"1":{"atk":1,"hp":1,"speed":1,"assumed":true},"2":{"atk":1,"hp":1,"speed":1,"assumed":true},"3":{"atk":1,"hp":1,"speed":1,"assumed":true},"4":{"atk":1,"hp":1,"speed":1,"assumed":true}},"bossHpScale":{"bloodPointKey":null,"coop":1,"aliveScaling":false,"aliveFull":4,"aliveAssumed":true,"unaffectedByEnemyScale":true},"upgradePrices":[4,4,6,9,12],"maxShopLevel":6,"shopSlots":{"1":{"chess":3,"item":0},"2":{"chess":3,"item":0},"3":{"chess":3,"item":0},"4":{"chess":3,"item":0},"5":{"chess":3,"item":1},"6":{"chess":3,"item":1}},"levelTagColors":{"1":"#434343","2":"#626654","3":"#445760","4":"#615B74","5":"#6C5E41","6":"#5d341e"},"stages":["act1autochess_m01"],"bossWeights":{"boss_7":5},"hiddenBossWeights":{}},"mode_single_funny":{"modeId":"mode_single_funny","name":"标准模拟","code":"AC-1","sortId":2,"type":"SINGLE","difficulty":"FUNNY","inScope":true,"color":"#f6a329","iconId":"mode_funny_icon","backgroundId":"background_funny","desc":"时长较短的模拟训练","effectDescList":["·可以快速完成作战","·常规奖励"],"unlockText":"通关【入门协议】后解锁","specialPhaseTime":150,"activeBondIds":["yanShip","sargonShip","victoriaShip","kjeragShip","siracusaShip","preciShip","swiftShip","steadShip","deputShip","visiShip","indomShip","maniShip","emptyShip"],"inactiveBondIds":["lateranoShip","egirShip","kazimierzShip","skillfulShip","arcaneShip","miraShip","investShip","raidShip","soloShip","suntShip"],"inactiveEnemyKeys":["enemy_1112_emppnt","enemy_1207_sfji","enemy_1275_dwlock_2","enemy_1234_dsubrl_2","enemy_10122_uacann_2","enemy_1272_nhtank_2","enemy_9008_acbunn","enemy_1174_duholy_2","enemy_1355_mrfly_2","enemy_1197_sfshu_2","enemy_10067_ftsjc","enemy_1270_nhstlk_2","enemy_1283_sgkill","enemy_1175_dushdo_2","enemy_1254_lypa_2","enemy_1425_lrcmra_2","enemy_1329_cbshld_2","enemy_1072_dlancer"],"lastRound":9,"bossRound":9,"hiddenRound":null,"rounds":{"1":{"template":"act1autochess_01","bossTemplates":null,"combatTimeLimit":45,"levelMaxPlayTime":45,"prepTime":null,"prepTimeData":300,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"2":{"template":"act1autochess_02","bossTemplates":null,"combatTimeLimit":45,"levelMaxPlayTime":45,"prepTime":null,"prepTimeData":300,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"3":{"template":"act1autochess_03","bossTemplates":null,"combatTimeLimit":55,"levelMaxPlayTime":55,"prepTime":null,"prepTimeData":300,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"4":{"template":"act1autochess_04","bossTemplates":null,"combatTimeLimit":55,"levelMaxPlayTime":55,"prepTime":null,"prepTimeData":300,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"5":{"template":"act1autochess_05","bossTemplates":null,"combatTimeLimit":55,"levelMaxPlayTime":55,"prepTime":null,"prepTimeData":300,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"6":{"template":"act1autochess_06","bossTemplates":null,"combatTimeLimit":70,"levelMaxPlayTime":70,"prepTime":null,"prepTimeData":300,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"7":{"template":"act1autochess_07","bossTemplates":null,"combatTimeLimit":85,"levelMaxPlayTime":85,"prepTime":null,"prepTimeData":300,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"8":{"template":"act1autochess_h01","bossTemplates":null,"combatTimeLimit":85,"levelMaxPlayTime":85,"prepTime":null,"prepTimeData":300,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"9":{"template":null,"bossTemplates":{"boss_1":"act1autochess_h07_01_s","boss_2":"act1autochess_h07_02_s","boss_3":"act1autochess_h07_03_s","boss_4":"act1autochess_h07_04_s","boss_5":"act2autochess_h07_05_s","boss_6":"act1autochess_h07_06_s","boss_7":"act1autochess_h07_07_s"},"combatTimeLimit":null,"levelMaxPlayTime":120,"prepTime":null,"prepTimeData":300,"isSpPrepare":false,"isBoss":true,"isHidden":false,"bossOvertimeAfter":150}},"spRounds":[],"combatTimeLimit":{"1":45,"2":45,"3":55,"4":55,"5":55,"6":70,"7":85,"8":85,"9":null},"enemyScale":{"1":{"atk":0.7,"hp":0.75,"speed":1,"kAtk":0,"kHp":0},"2":{"atk":0.7,"hp":0.75,"speed":1,"kAtk":0,"kHp":0},"3":{"atk":0.7,"hp":0.75,"speed":1,"kAtk":0,"kHp":0},"4":{"atk":0.7,"hp":0.75,"speed":1,"kAtk":0,"kHp":0},"5":{"atk":0.7,"hp":0.75,"speed":1,"kAtk":0,"kHp":0},"6":{"atk":0.7,"hp":0.75,"speed":1,"kAtk":0,"kHp":0},"7":{"atk":0.7,"hp":0.75,"speed":1,"kAtk":0,"kHp":0},"8":{"atk":0.7,"hp":0.75,"speed":1,"kAtk":0,"kHp":0},"9":{"atk":0.7,"hp":0.75,"speed":1,"kAtk":0,"kHp":0}},"bossHpScale":{"bloodPointKey":"bloodPoint","solo":0.25,"soloAssumed":true,"unaffectedByEnemyScale":true},"upgradePrices":[1,1,5,8,10],"maxShopLevel":6,"shopSlots":{"1":{"chess":3,"item":1},"2":{"chess":4,"item":1},"3":{"chess":4,"item":1},"4":{"chess":4,"item":1},"5":{"chess":4,"item":1},"6":{"chess":5,"item":1}},"levelTagColors":{"1":"#434343","2":"#626654","3":"#445760","4":"#615B74","5":"#6C5E41","6":"#5d341e"},"stages":["act1autochess_m01"],"bossWeights":{"boss_1":6,"boss_2":6,"boss_3":6,"boss_4":5,"boss_5":10,"boss_6":5,"boss_7":5},"hiddenBossWeights":{}},"mode_single_normal":{"modeId":"mode_single_normal","name":"险境模拟","code":"AC-2","sortId":3,"type":"SINGLE","difficulty":"NORMAL","inScope":true,"color":"#e85a1a","iconId":"mode_normal_icon","backgroundId":"background_normal","desc":"敌方攻击强度较高的模拟训练","effectDescList":["·可使用盟约数增加","·大幅增加奖励"],"unlockText":"通关【标准模拟】后解锁","specialPhaseTime":150,"activeBondIds":["yanShip","sargonShip","victoriaShip","kjeragShip","lateranoShip","egirShip","siracusaShip","kazimierzShip","preciShip","swiftShip","skillfulShip","arcaneShip","steadShip","deputShip","visiShip","miraShip","investShip","raidShip","indomShip","maniShip","emptyShip","soloShip","suntShip"],"inactiveBondIds":[],"inactiveEnemyKeys":["enemy_1112_emppnt","enemy_1207_sfji","enemy_1275_dwlock_2","enemy_1234_dsubrl_2","enemy_10122_uacann_2","enemy_1272_nhtank_2","enemy_9008_acbunn","enemy_1174_duholy_2","enemy_1355_mrfly_2","enemy_1197_sfshu_2","enemy_10067_ftsjc","enemy_1270_nhstlk_2","enemy_1283_sgkill","enemy_1175_dushdo_2","enemy_1254_lypa_2","enemy_1425_lrcmra_2","enemy_1329_cbshld_2","enemy_1072_dlancer"],"lastRound":14,"bossRound":14,"hiddenRound":15,"rounds":{"1":{"template":"act1autochess_01","bossTemplates":null,"combatTimeLimit":45,"levelMaxPlayTime":45,"prepTime":null,"prepTimeData":300,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"2":{"template":"act1autochess_02","bossTemplates":null,"combatTimeLimit":45,"levelMaxPlayTime":45,"prepTime":null,"prepTimeData":300,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"3":{"template":"act1autochess_03","bossTemplates":null,"combatTimeLimit":55,"levelMaxPlayTime":55,"prepTime":null,"prepTimeData":300,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"4":{"template":"act1autochess_04","bossTemplates":null,"combatTimeLimit":55,"levelMaxPlayTime":55,"prepTime":null,"prepTimeData":300,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"5":{"template":"act1autochess_05","bossTemplates":null,"combatTimeLimit":55,"levelMaxPlayTime":55,"prepTime":null,"prepTimeData":300,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"6":{"template":"act1autochess_06","bossTemplates":null,"combatTimeLimit":70,"levelMaxPlayTime":70,"prepTime":null,"prepTimeData":300,"isSpPrepare":true,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"7":{"template":"act1autochess_07","bossTemplates":null,"combatTimeLimit":85,"levelMaxPlayTime":85,"prepTime":null,"prepTimeData":300,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"8":{"template":"act1autochess_h01","bossTemplates":null,"combatTimeLimit":85,"levelMaxPlayTime":85,"prepTime":null,"prepTimeData":300,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"9":{"template":"act1autochess_h02","bossTemplates":null,"combatTimeLimit":95,"levelMaxPlayTime":95,"prepTime":null,"prepTimeData":300,"isSpPrepare":true,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"10":{"template":"act1autochess_h03","bossTemplates":null,"combatTimeLimit":95,"levelMaxPlayTime":95,"prepTime":null,"prepTimeData":300,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"11":{"template":"act1autochess_h04","bossTemplates":null,"combatTimeLimit":115,"levelMaxPlayTime":115,"prepTime":null,"prepTimeData":300,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"12":{"template":"act1autochess_h05","bossTemplates":null,"combatTimeLimit":115,"levelMaxPlayTime":115,"prepTime":null,"prepTimeData":300,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"13":{"template":"act1autochess_h06","bossTemplates":null,"combatTimeLimit":115,"levelMaxPlayTime":115,"prepTime":null,"prepTimeData":300,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"14":{"template":null,"bossTemplates":{"boss_1":"act1autochess_h07_01_s","boss_2":"act1autochess_h07_02_s","boss_3":"act1autochess_h07_03_s","boss_4":"act1autochess_h07_04_s","boss_5":"act2autochess_h07_05_s","boss_6":"act1autochess_h07_06_s","boss_7":"act1autochess_h07_07_s"},"combatTimeLimit":null,"levelMaxPlayTime":120,"prepTime":null,"prepTimeData":300,"isSpPrepare":false,"isBoss":true,"isHidden":false,"bossOvertimeAfter":150},"15":{"template":null,"bossTemplates":{"boss_8":"act1autochess_h08_01_s","boss_9":"act1autochess_h08_02_s","boss_10":"act1autochess_h08_03_s"},"combatTimeLimit":null,"levelMaxPlayTime":120,"prepTime":null,"prepTimeData":300,"isSpPrepare":false,"isBoss":true,"isHidden":true,"bossOvertimeAfter":150}},"spRounds":[6,9],"combatTimeLimit":{"1":45,"2":45,"3":55,"4":55,"5":55,"6":70,"7":85,"8":85,"9":95,"10":95,"11":115,"12":115,"13":115,"14":null,"15":null},"enemyScale":{"1":{"atk":0.7,"hp":0.75,"speed":1,"kAtk":0,"kHp":0},"2":{"atk":0.7,"hp":0.75,"speed":1,"kAtk":0,"kHp":0},"3":{"atk":0.7,"hp":0.75,"speed":1,"kAtk":0,"kHp":0},"4":{"atk":0.77,"hp":0.9,"speed":1,"kAtk":1,"kHp":1},"5":{"atk":0.77,"hp":0.9,"speed":1,"kAtk":1,"kHp":1},"6":{"atk":0.77,"hp":0.9,"speed":1,"kAtk":1,"kHp":1},"7":{"atk":0.77,"hp":0.9,"speed":1,"kAtk":1,"kHp":1},"8":{"atk":0.847,"hp":1.08,"speed":1,"kAtk":2,"kHp":2},"9":{"atk":0.847,"hp":1.08,"speed":1,"kAtk":2,"kHp":2},"10":{"atk":0.847,"hp":1.08,"speed":1,"kAtk":2,"kHp":2},"11":{"atk":0.9317,"hp":1.296,"speed":1,"kAtk":3,"kHp":3},"12":{"atk":1.02487,"hp":1.5552,"speed":1,"kAtk":4,"kHp":4},"13":{"atk":1.127357,"hp":1.86624,"speed":1,"kAtk":5,"kHp":5},"14":{"atk":1.127357,"hp":1.86624,"speed":1,"kAtk":5,"kHp":5},"15":{"atk":1.127357,"hp":1.86624,"speed":1,"kAtk":5,"kHp":5}},"bossHpScale":{"bloodPointKey":"bloodPointNormal","solo":0.25,"soloAssumed":true,"unaffectedByEnemyScale":true},"upgradePrices":[5,8,11,12,13],"maxShopLevel":6,"shopSlots":{"1":{"chess":3,"item":1},"2":{"chess":4,"item":1},"3":{"chess":4,"item":1},"4":{"chess":5,"item":1},"5":{"chess":5,"item":1},"6":{"chess":5,"item":1}},"levelTagColors":{"1":"#434343","2":"#626654","3":"#445760","4":"#615B74","5":"#6C5E41","6":"#5d341e"},"stages":["act1autochess_m01","act1autochess_m02","act1autochess_m03","act1autochess_m04","act2autochess_m01","act2autochess_m02","act2autochess_m03","act2autochess_m04"],"bossWeights":{"boss_1":6,"boss_2":6,"boss_3":6,"boss_4":5,"boss_5":10,"boss_6":5,"boss_7":5},"hiddenBossWeights":{"boss_8":50,"boss_9":40,"boss_10":40}},"mode_single_hard":{"modeId":"mode_single_hard","name":"绝境模拟","code":"AC-3","sortId":4,"type":"SINGLE","difficulty":"HARD","inScope":true,"color":"#e73118","iconId":"mode_hard_icon","backgroundId":"background_hard","desc":"敌方攻击强度极高的模拟训练","effectDescList":["·作战环境困难","·出现更加危险的敌人"],"unlockText":"通关【险境模拟】后解锁","specialPhaseTime":150,"activeBondIds":["yanShip","sargonShip","victoriaShip","kjeragShip","lateranoShip","egirShip","siracusaShip","kazimierzShip","preciShip","swiftShip","skillfulShip","arcaneShip","steadShip","deputShip","visiShip","miraShip","investShip","raidShip","indomShip","maniShip","emptyShip","soloShip","suntShip"],"inactiveBondIds":[],"inactiveEnemyKeys":[],"lastRound":14,"bossRound":14,"hiddenRound":15,"rounds":{"1":{"template":"act1autochess_01","bossTemplates":null,"combatTimeLimit":45,"levelMaxPlayTime":45,"prepTime":null,"prepTimeData":300,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"2":{"template":"act1autochess_02","bossTemplates":null,"combatTimeLimit":45,"levelMaxPlayTime":45,"prepTime":null,"prepTimeData":300,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"3":{"template":"act1autochess_03","bossTemplates":null,"combatTimeLimit":55,"levelMaxPlayTime":55,"prepTime":null,"prepTimeData":300,"isSpPrepare":true,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"4":{"template":"act1autochess_04","bossTemplates":null,"combatTimeLimit":55,"levelMaxPlayTime":55,"prepTime":null,"prepTimeData":300,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"5":{"template":"act1autochess_05","bossTemplates":null,"combatTimeLimit":55,"levelMaxPlayTime":55,"prepTime":null,"prepTimeData":300,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"6":{"template":"act1autochess_06","bossTemplates":null,"combatTimeLimit":70,"levelMaxPlayTime":70,"prepTime":null,"prepTimeData":300,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"7":{"template":"act1autochess_07","bossTemplates":null,"combatTimeLimit":85,"levelMaxPlayTime":85,"prepTime":null,"prepTimeData":300,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"8":{"template":"act1autochess_h01","bossTemplates":null,"combatTimeLimit":85,"levelMaxPlayTime":85,"prepTime":null,"prepTimeData":300,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"9":{"template":"act1autochess_h02","bossTemplates":null,"combatTimeLimit":95,"levelMaxPlayTime":95,"prepTime":null,"prepTimeData":300,"isSpPrepare":true,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"10":{"template":"act1autochess_h03","bossTemplates":null,"combatTimeLimit":95,"levelMaxPlayTime":95,"prepTime":null,"prepTimeData":300,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"11":{"template":"act1autochess_h04","bossTemplates":null,"combatTimeLimit":115,"levelMaxPlayTime":115,"prepTime":null,"prepTimeData":300,"isSpPrepare":true,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"12":{"template":"act1autochess_h05","bossTemplates":null,"combatTimeLimit":115,"levelMaxPlayTime":115,"prepTime":null,"prepTimeData":300,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"13":{"template":"act1autochess_h06","bossTemplates":null,"combatTimeLimit":115,"levelMaxPlayTime":115,"prepTime":null,"prepTimeData":300,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"14":{"template":null,"bossTemplates":{"boss_1":"act1autochess_h07_01_s","boss_2":"act1autochess_h07_02_s","boss_3":"act1autochess_h07_03_s","boss_4":"act1autochess_h07_04_s","boss_5":"act2autochess_h07_05_s","boss_6":"act1autochess_h07_06_s","boss_7":"act1autochess_h07_07_s"},"combatTimeLimit":null,"levelMaxPlayTime":120,"prepTime":null,"prepTimeData":300,"isSpPrepare":false,"isBoss":true,"isHidden":false,"bossOvertimeAfter":150},"15":{"template":null,"bossTemplates":{"boss_8":"act1autochess_h08_01_s","boss_9":"act1autochess_h08_02_s","boss_10":"act1autochess_h08_03_s"},"combatTimeLimit":null,"levelMaxPlayTime":120,"prepTime":null,"prepTimeData":300,"isSpPrepare":false,"isBoss":true,"isHidden":true,"bossOvertimeAfter":150}},"spRounds":[3,9,11],"combatTimeLimit":{"1":45,"2":45,"3":55,"4":55,"5":55,"6":70,"7":85,"8":85,"9":95,"10":95,"11":115,"12":115,"13":115,"14":null,"15":null},"enemyScale":{"1":{"atk":0.8,"hp":0.8,"speed":1,"kAtk":0,"kHp":0},"2":{"atk":0.8,"hp":0.8,"speed":1,"kAtk":0,"kHp":0},"3":{"atk":0.8,"hp":0.8,"speed":1,"kAtk":0,"kHp":0},"4":{"atk":0.8,"hp":0.8,"speed":1,"kAtk":0,"kHp":0},"5":{"atk":0.88,"hp":0.96,"speed":1,"kAtk":1,"kHp":1},"6":{"atk":0.88,"hp":0.96,"speed":1,"kAtk":1,"kHp":1},"7":{"atk":0.88,"hp":0.96,"speed":1,"kAtk":1,"kHp":1},"8":{"atk":0.88,"hp":0.96,"speed":1,"kAtk":1,"kHp":1},"9":{"atk":0.968,"hp":1.152,"speed":1,"kAtk":2,"kHp":2},"10":{"atk":0.968,"hp":1.152,"speed":1,"kAtk":2,"kHp":2},"11":{"atk":1.0648,"hp":1.3824,"speed":1,"kAtk":3,"kHp":3},"12":{"atk":1.0648,"hp":1.3824,"speed":1,"kAtk":3,"kHp":3},"13":{"atk":1.17128,"hp":1.65888,"speed":1,"kAtk":4,"kHp":4},"14":{"atk":1.17128,"hp":1.65888,"speed":1,"kAtk":4,"kHp":4},"15":{"atk":1.17128,"hp":1.65888,"speed":1,"kAtk":4,"kHp":4}},"bossHpScale":{"bloodPointKey":"bloodPointHard","solo":0.25,"soloAssumed":true,"unaffectedByEnemyScale":true},"upgradePrices":[5,8,11,12,13],"maxShopLevel":6,"shopSlots":{"1":{"chess":3,"item":1},"2":{"chess":4,"item":1},"3":{"chess":4,"item":1},"4":{"chess":5,"item":1},"5":{"chess":5,"item":1},"6":{"chess":5,"item":1}},"levelTagColors":{"1":"#434343","2":"#626654","3":"#445760","4":"#615B74","5":"#6C5E41","6":"#5d341e"},"stages":["act1autochess_m02","act1autochess_m03","act1autochess_m04","act2autochess_m01","act2autochess_m02","act2autochess_m03","act2autochess_m04"],"bossWeights":{"boss_1":6,"boss_2":6,"boss_3":6,"boss_4":5,"boss_5":10,"boss_6":5,"boss_7":5},"hiddenBossWeights":{"boss_8":50,"boss_9":40,"boss_10":40}},"mode_single_abyss":{"modeId":"mode_single_abyss","name":"终极模拟","code":"AC-4","sortId":5,"type":"SINGLE","difficulty":"ABYSS","inScope":true,"color":"#ff0024","iconId":"mode_abyss_icon","backgroundId":"background_abyss","desc":"敌方攻击强度到达极限的模拟训练","effectDescList":["·作战环境无比困难","·出现极度危险的敌人"],"unlockText":"通关2次【绝境模拟】后解锁","specialPhaseTime":150,"activeBondIds":["yanShip","sargonShip","victoriaShip","kjeragShip","lateranoShip","egirShip","siracusaShip","kazimierzShip","preciShip","swiftShip","skillfulShip","arcaneShip","steadShip","deputShip","visiShip","miraShip","investShip","raidShip","indomShip","maniShip","emptyShip","soloShip","suntShip"],"inactiveBondIds":[],"inactiveEnemyKeys":[],"lastRound":14,"bossRound":14,"hiddenRound":15,"rounds":{"1":{"template":"act1autochess_01","bossTemplates":null,"combatTimeLimit":45,"levelMaxPlayTime":45,"prepTime":null,"prepTimeData":300,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"2":{"template":"act1autochess_02","bossTemplates":null,"combatTimeLimit":45,"levelMaxPlayTime":45,"prepTime":null,"prepTimeData":300,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"3":{"template":"act1autochess_03","bossTemplates":null,"combatTimeLimit":55,"levelMaxPlayTime":55,"prepTime":null,"prepTimeData":300,"isSpPrepare":true,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"4":{"template":"act1autochess_04","bossTemplates":null,"combatTimeLimit":55,"levelMaxPlayTime":55,"prepTime":null,"prepTimeData":300,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"5":{"template":"act1autochess_05","bossTemplates":null,"combatTimeLimit":55,"levelMaxPlayTime":55,"prepTime":null,"prepTimeData":300,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"6":{"template":"act1autochess_06","bossTemplates":null,"combatTimeLimit":70,"levelMaxPlayTime":70,"prepTime":null,"prepTimeData":300,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"7":{"template":"act1autochess_07","bossTemplates":null,"combatTimeLimit":85,"levelMaxPlayTime":85,"prepTime":null,"prepTimeData":300,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"8":{"template":"act1autochess_h01","bossTemplates":null,"combatTimeLimit":85,"levelMaxPlayTime":85,"prepTime":null,"prepTimeData":300,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"9":{"template":"act1autochess_h02","bossTemplates":null,"combatTimeLimit":95,"levelMaxPlayTime":95,"prepTime":null,"prepTimeData":300,"isSpPrepare":true,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"10":{"template":"act1autochess_h03","bossTemplates":null,"combatTimeLimit":95,"levelMaxPlayTime":95,"prepTime":null,"prepTimeData":300,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"11":{"template":"act1autochess_h04","bossTemplates":null,"combatTimeLimit":115,"levelMaxPlayTime":115,"prepTime":null,"prepTimeData":300,"isSpPrepare":true,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"12":{"template":"act1autochess_h05","bossTemplates":null,"combatTimeLimit":115,"levelMaxPlayTime":115,"prepTime":null,"prepTimeData":300,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"13":{"template":"act1autochess_h06","bossTemplates":null,"combatTimeLimit":115,"levelMaxPlayTime":115,"prepTime":null,"prepTimeData":300,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"14":{"template":null,"bossTemplates":{"boss_1":"act1autochess_h07_01_s","boss_2":"act1autochess_h07_02_s","boss_3":"act1autochess_h07_03_s","boss_4":"act1autochess_h07_04_s","boss_5":"act2autochess_h07_05_s","boss_6":"act1autochess_h07_06_s","boss_7":"act1autochess_h07_07_s"},"combatTimeLimit":null,"levelMaxPlayTime":120,"prepTime":null,"prepTimeData":300,"isSpPrepare":false,"isBoss":true,"isHidden":false,"bossOvertimeAfter":150},"15":{"template":null,"bossTemplates":{"boss_8":"act1autochess_h08_01_s","boss_9":"act1autochess_h08_02_s","boss_10":"act1autochess_h08_03_s"},"combatTimeLimit":null,"levelMaxPlayTime":120,"prepTime":null,"prepTimeData":300,"isSpPrepare":false,"isBoss":true,"isHidden":true,"bossOvertimeAfter":150}},"spRounds":[3,9,11],"combatTimeLimit":{"1":45,"2":45,"3":55,"4":55,"5":55,"6":70,"7":85,"8":85,"9":95,"10":95,"11":115,"12":115,"13":115,"14":null,"15":null},"enemyScale":{"1":{"atk":1.1,"hp":1.2,"speed":1,"kAtk":1,"kHp":1},"2":{"atk":1.21,"hp":1.44,"speed":1,"kAtk":2,"kHp":2},"3":{"atk":1.21,"hp":1.44,"speed":1.15,"kAtk":2,"kHp":2},"4":{"atk":1.21,"hp":1.44,"speed":1.15,"kAtk":2,"kHp":2},"5":{"atk":1.21,"hp":1.44,"speed":1.15,"kAtk":2,"kHp":2},"6":{"atk":1.331,"hp":1.728,"speed":1.15,"kAtk":3,"kHp":3},"7":{"atk":1.331,"hp":1.728,"speed":1.15,"kAtk":3,"kHp":3},"8":{"atk":1.331,"hp":1.728,"speed":1.15,"kAtk":3,"kHp":3},"9":{"atk":1.331,"hp":1.728,"speed":1.15,"kAtk":3,"kHp":3},"10":{"atk":1.4641,"hp":2.0736,"speed":1.15,"kAtk":4,"kHp":4},"11":{"atk":1.61051,"hp":2.48832,"speed":1.15,"kAtk":5,"kHp":5},"12":{"atk":1.61051,"hp":2.48832,"speed":1.15,"kAtk":5,"kHp":5},"13":{"atk":1.771561,"hp":2.985984,"speed":1.15,"kAtk":6,"kHp":6},"14":{"atk":1.948717,"hp":3.583181,"speed":1.15,"kAtk":7,"kHp":7},"15":{"atk":1.948717,"hp":3.583181,"speed":1.15,"kAtk":7,"kHp":7}},"bossHpScale":{"bloodPointKey":"bloodPointAbyss","solo":0.25,"soloAssumed":true,"unaffectedByEnemyScale":true},"upgradePrices":[5,8,11,12,13],"maxShopLevel":6,"shopSlots":{"1":{"chess":3,"item":1},"2":{"chess":4,"item":1},"3":{"chess":4,"item":1},"4":{"chess":5,"item":1},"5":{"chess":5,"item":1},"6":{"chess":5,"item":1}},"levelTagColors":{"1":"#434343","2":"#626654","3":"#445760","4":"#615B74","5":"#6C5E41","6":"#5d341e"},"stages":["act1autochess_m02","act1autochess_m03","act1autochess_m04","act2autochess_m01","act2autochess_m02","act2autochess_m03","act2autochess_m04"],"bossWeights":{"boss_1":6,"boss_2":6,"boss_3":6,"boss_4":5,"boss_5":10,"boss_6":5,"boss_7":5},"hiddenBossWeights":{"boss_8":50,"boss_9":40,"boss_10":40}},"mode_multi_funny":{"modeId":"mode_multi_funny","name":"标准模拟","code":"AC-1","sortId":2,"type":"MULTI","difficulty":"FUNNY","inScope":true,"color":"#f6a329","iconId":"mode_funny_icon","backgroundId":"background_funny","desc":"敌方攻击强度较低的模拟训练","effectDescList":["·作战环境较为温和","·常规奖励"],"unlockText":"通关【入门协议】后解锁","specialPhaseTime":16,"activeBondIds":["yanShip","sargonShip","victoriaShip","kjeragShip","siracusaShip","preciShip","swiftShip","steadShip","deputShip","visiShip","indomShip","maniShip","emptyShip"],"inactiveBondIds":["lateranoShip","egirShip","kazimierzShip","skillfulShip","arcaneShip","miraShip","investShip","raidShip","soloShip","suntShip"],"inactiveEnemyKeys":["enemy_1112_emppnt","enemy_1207_sfji","enemy_1275_dwlock_2","enemy_1234_dsubrl_2","enemy_10122_uacann_2","enemy_1272_nhtank_2","enemy_9008_acbunn","enemy_1174_duholy_2","enemy_1355_mrfly_2","enemy_1197_sfshu_2","enemy_10067_ftsjc","enemy_1270_nhstlk_2","enemy_1283_sgkill","enemy_1175_dushdo_2","enemy_1254_lypa_2","enemy_1425_lrcmra_2","enemy_1329_cbshld_2","enemy_1072_dlancer"],"lastRound":14,"bossRound":14,"hiddenRound":null,"rounds":{"1":{"template":"act1autochess_01","bossTemplates":null,"combatTimeLimit":45,"levelMaxPlayTime":45,"prepTime":65,"prepTimeData":65,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"2":{"template":"act1autochess_02","bossTemplates":null,"combatTimeLimit":45,"levelMaxPlayTime":45,"prepTime":65,"prepTimeData":65,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"3":{"template":"act1autochess_03","bossTemplates":null,"combatTimeLimit":55,"levelMaxPlayTime":55,"prepTime":65,"prepTimeData":65,"isSpPrepare":true,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"4":{"template":"act1autochess_04","bossTemplates":null,"combatTimeLimit":55,"levelMaxPlayTime":55,"prepTime":95,"prepTimeData":95,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"5":{"template":"act1autochess_05","bossTemplates":null,"combatTimeLimit":55,"levelMaxPlayTime":55,"prepTime":95,"prepTimeData":95,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"6":{"template":"act1autochess_06","bossTemplates":null,"combatTimeLimit":70,"levelMaxPlayTime":70,"prepTime":100,"prepTimeData":100,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"7":{"template":"act1autochess_07","bossTemplates":null,"combatTimeLimit":85,"levelMaxPlayTime":85,"prepTime":105,"prepTimeData":105,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"8":{"template":"act1autochess_h01","bossTemplates":null,"combatTimeLimit":85,"levelMaxPlayTime":85,"prepTime":105,"prepTimeData":105,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"9":{"template":"act1autochess_h02","bossTemplates":null,"combatTimeLimit":95,"levelMaxPlayTime":95,"prepTime":125,"prepTimeData":125,"isSpPrepare":true,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"10":{"template":"act1autochess_h03","bossTemplates":null,"combatTimeLimit":95,"levelMaxPlayTime":95,"prepTime":125,"prepTimeData":125,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"11":{"template":"act1autochess_h04","bossTemplates":null,"combatTimeLimit":115,"levelMaxPlayTime":115,"prepTime":125,"prepTimeData":125,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"12":{"template":"act1autochess_h05","bossTemplates":null,"combatTimeLimit":115,"levelMaxPlayTime":115,"prepTime":125,"prepTimeData":125,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"13":{"template":"act1autochess_h06","bossTemplates":null,"combatTimeLimit":115,"levelMaxPlayTime":115,"prepTime":150,"prepTimeData":150,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"14":{"template":null,"bossTemplates":{"boss_1":"act1autochess_h07_01","boss_2":"act1autochess_h07_02","boss_3":"act1autochess_h07_03","boss_4":"act1autochess_h07_04","boss_5":"act2autochess_h07_05","boss_6":"act1autochess_h07_06","boss_7":"act1autochess_h07_07"},"combatTimeLimit":null,"levelMaxPlayTime":120,"prepTime":195,"prepTimeData":195,"isSpPrepare":false,"isBoss":true,"isHidden":false,"bossOvertimeAfter":150}},"spRounds":[3,9],"combatTimeLimit":{"1":45,"2":45,"3":55,"4":55,"5":55,"6":70,"7":85,"8":85,"9":95,"10":95,"11":115,"12":115,"13":115,"14":null},"enemyScale":{"1":{"atk":0.8,"hp":0.8,"speed":1,"kAtk":0,"kHp":0},"2":{"atk":0.8,"hp":0.8,"speed":1,"kAtk":0,"kHp":0},"3":{"atk":0.8,"hp":0.8,"speed":1,"kAtk":0,"kHp":0},"4":{"atk":0.8,"hp":0.8,"speed":1,"kAtk":0,"kHp":0},"5":{"atk":0.8,"hp":0.8,"speed":1,"kAtk":0,"kHp":0},"6":{"atk":0.8,"hp":0.8,"speed":1,"kAtk":0,"kHp":0},"7":{"atk":0.8,"hp":0.8,"speed":1,"kAtk":0,"kHp":0},"8":{"atk":0.8,"hp":0.8,"speed":1,"kAtk":0,"kHp":0},"9":{"atk":0.8,"hp":0.8,"speed":1,"kAtk":0,"kHp":0},"10":{"atk":0.8,"hp":0.8,"speed":1,"kAtk":0,"kHp":0},"11":{"atk":0.8,"hp":0.8,"speed":1,"kAtk":0,"kHp":0},"12":{"atk":0.88,"hp":0.96,"speed":1,"kAtk":1,"kHp":1},"13":{"atk":0.88,"hp":0.96,"speed":1,"kAtk":1,"kHp":1},"14":{"atk":0.88,"hp":0.96,"speed":1,"kAtk":1,"kHp":1}},"bossHpScale":{"bloodPointKey":"bloodPoint","coop":1,"aliveScaling":false,"aliveFull":4,"aliveAssumed":true,"unaffectedByEnemyScale":true},"upgradePrices":[5,8,10,11,11],"maxShopLevel":6,"shopSlots":{"1":{"chess":3,"item":1},"2":{"chess":4,"item":1},"3":{"chess":4,"item":1},"4":{"chess":4,"item":1},"5":{"chess":4,"item":1},"6":{"chess":5,"item":1}},"levelTagColors":{"1":"#434343","2":"#626654","3":"#445760","4":"#615B74","5":"#6C5E41","6":"#5d341e"},"stages":["act1autochess_m01"],"bossWeights":{"boss_1":6,"boss_2":6,"boss_3":6,"boss_4":5,"boss_5":10,"boss_6":5,"boss_7":5},"hiddenBossWeights":{}},"mode_multi_normal":{"modeId":"mode_multi_normal","name":"险境模拟","code":"AC-2","sortId":3,"type":"MULTI","difficulty":"NORMAL","inScope":true,"color":"#e85a1a","iconId":"mode_normal_icon","backgroundId":"background_normal","desc":"敌方攻击强度较高的模拟训练","effectDescList":["·可使用盟约数增加","·大幅增加奖励"],"unlockText":"通关【标准模拟】后解锁","specialPhaseTime":16,"activeBondIds":["yanShip","sargonShip","victoriaShip","kjeragShip","lateranoShip","egirShip","siracusaShip","kazimierzShip","preciShip","swiftShip","skillfulShip","arcaneShip","steadShip","deputShip","visiShip","miraShip","investShip","raidShip","indomShip","maniShip","emptyShip","soloShip","suntShip"],"inactiveBondIds":[],"inactiveEnemyKeys":["enemy_1112_emppnt","enemy_1207_sfji","enemy_1275_dwlock_2","enemy_1234_dsubrl_2","enemy_10122_uacann_2","enemy_1272_nhtank_2","enemy_9008_acbunn","enemy_1174_duholy_2","enemy_1355_mrfly_2","enemy_1197_sfshu_2","enemy_10067_ftsjc","enemy_1270_nhstlk_2","enemy_1283_sgkill","enemy_1175_dushdo_2","enemy_1254_lypa_2","enemy_1425_lrcmra_2","enemy_1329_cbshld_2","enemy_1072_dlancer"],"lastRound":14,"bossRound":14,"hiddenRound":15,"rounds":{"1":{"template":"act1autochess_01","bossTemplates":null,"combatTimeLimit":45,"levelMaxPlayTime":45,"prepTime":65,"prepTimeData":65,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"2":{"template":"act1autochess_02","bossTemplates":null,"combatTimeLimit":45,"levelMaxPlayTime":45,"prepTime":65,"prepTimeData":65,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"3":{"template":"act1autochess_03","bossTemplates":null,"combatTimeLimit":55,"levelMaxPlayTime":55,"prepTime":65,"prepTimeData":65,"isSpPrepare":true,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"4":{"template":"act1autochess_04","bossTemplates":null,"combatTimeLimit":55,"levelMaxPlayTime":55,"prepTime":95,"prepTimeData":95,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"5":{"template":"act1autochess_05","bossTemplates":null,"combatTimeLimit":55,"levelMaxPlayTime":55,"prepTime":95,"prepTimeData":95,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"6":{"template":"act1autochess_06","bossTemplates":null,"combatTimeLimit":70,"levelMaxPlayTime":70,"prepTime":100,"prepTimeData":100,"isSpPrepare":true,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"7":{"template":"act1autochess_07","bossTemplates":null,"combatTimeLimit":85,"levelMaxPlayTime":85,"prepTime":105,"prepTimeData":105,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"8":{"template":"act1autochess_h01","bossTemplates":null,"combatTimeLimit":85,"levelMaxPlayTime":85,"prepTime":105,"prepTimeData":105,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"9":{"template":"act1autochess_h02","bossTemplates":null,"combatTimeLimit":95,"levelMaxPlayTime":95,"prepTime":125,"prepTimeData":125,"isSpPrepare":true,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"10":{"template":"act1autochess_h03","bossTemplates":null,"combatTimeLimit":95,"levelMaxPlayTime":95,"prepTime":125,"prepTimeData":125,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"11":{"template":"act1autochess_h04","bossTemplates":null,"combatTimeLimit":115,"levelMaxPlayTime":115,"prepTime":125,"prepTimeData":125,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"12":{"template":"act1autochess_h05","bossTemplates":null,"combatTimeLimit":115,"levelMaxPlayTime":115,"prepTime":125,"prepTimeData":125,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"13":{"template":"act1autochess_h06","bossTemplates":null,"combatTimeLimit":115,"levelMaxPlayTime":115,"prepTime":150,"prepTimeData":150,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"14":{"template":null,"bossTemplates":{"boss_1":"act1autochess_h07_01","boss_2":"act1autochess_h07_02","boss_3":"act1autochess_h07_03","boss_4":"act1autochess_h07_04","boss_5":"act2autochess_h07_05","boss_6":"act1autochess_h07_06","boss_7":"act1autochess_h07_07"},"combatTimeLimit":null,"levelMaxPlayTime":120,"prepTime":195,"prepTimeData":195,"isSpPrepare":false,"isBoss":true,"isHidden":false,"bossOvertimeAfter":150},"15":{"template":null,"bossTemplates":{"boss_8":"act1autochess_h08_01","boss_9":"act1autochess_h08_02","boss_10":"act1autochess_h08_03"},"combatTimeLimit":null,"levelMaxPlayTime":120,"prepTime":195,"prepTimeData":195,"isSpPrepare":false,"isBoss":true,"isHidden":true,"bossOvertimeAfter":150}},"spRounds":[3,6,9],"combatTimeLimit":{"1":45,"2":45,"3":55,"4":55,"5":55,"6":70,"7":85,"8":85,"9":95,"10":95,"11":115,"12":115,"13":115,"14":null,"15":null},"enemyScale":{"1":{"atk":0.8,"hp":0.8,"speed":1,"kAtk":0,"kHp":0},"2":{"atk":0.88,"hp":0.96,"speed":1,"kAtk":1,"kHp":1},"3":{"atk":0.88,"hp":0.96,"speed":1,"kAtk":1,"kHp":1},"4":{"atk":0.968,"hp":1.152,"speed":1,"kAtk":2,"kHp":2},"5":{"atk":0.968,"hp":1.152,"speed":1,"kAtk":2,"kHp":2},"6":{"atk":0.968,"hp":1.152,"speed":1,"kAtk":2,"kHp":2},"7":{"atk":0.968,"hp":1.152,"speed":1,"kAtk":2,"kHp":2},"8":{"atk":1.0648,"hp":1.3824,"speed":1,"kAtk":3,"kHp":3},"9":{"atk":1.17128,"hp":1.65888,"speed":1,"kAtk":4,"kHp":4},"10":{"atk":1.17128,"hp":1.65888,"speed":1,"kAtk":4,"kHp":4},"11":{"atk":1.288408,"hp":1.990656,"speed":1,"kAtk":5,"kHp":5},"12":{"atk":1.417249,"hp":2.388787,"speed":1,"kAtk":6,"kHp":6},"13":{"atk":1.558974,"hp":2.866545,"speed":1,"kAtk":7,"kHp":7},"14":{"atk":1.558974,"hp":2.866545,"speed":1,"kAtk":7,"kHp":7},"15":{"atk":1.558974,"hp":2.866545,"speed":1,"kAtk":7,"kHp":7}},"bossHpScale":{"bloodPointKey":"bloodPointNormal","coop":1,"aliveScaling":false,"aliveFull":4,"aliveAssumed":true,"unaffectedByEnemyScale":true},"upgradePrices":[5,8,11,12,13],"maxShopLevel":6,"shopSlots":{"1":{"chess":3,"item":1},"2":{"chess":4,"item":1},"3":{"chess":4,"item":1},"4":{"chess":5,"item":1},"5":{"chess":5,"item":1},"6":{"chess":5,"item":1}},"levelTagColors":{"1":"#434343","2":"#626654","3":"#445760","4":"#615B74","5":"#6C5E41","6":"#5d341e"},"stages":["act1autochess_m01","act1autochess_m02","act1autochess_m03","act1autochess_m04","act2autochess_m01","act2autochess_m02","act2autochess_m03","act2autochess_m04"],"bossWeights":{"boss_1":6,"boss_2":6,"boss_3":6,"boss_4":5,"boss_5":10,"boss_6":5,"boss_7":5},"hiddenBossWeights":{"boss_8":50,"boss_9":40,"boss_10":40}},"mode_multi_hard":{"modeId":"mode_multi_hard","name":"绝境模拟","code":"AC-3","sortId":4,"type":"MULTI","difficulty":"HARD","inScope":true,"color":"#e73118","iconId":"mode_hard_icon","backgroundId":"background_hard","desc":"敌方攻击强度极高的模拟训练","effectDescList":["·作战环境困难","·出现更加危险的敌人"],"unlockText":"通关【险境模拟】后解锁","specialPhaseTime":16,"activeBondIds":["yanShip","sargonShip","victoriaShip","kjeragShip","lateranoShip","egirShip","siracusaShip","kazimierzShip","preciShip","swiftShip","skillfulShip","arcaneShip","steadShip","deputShip","visiShip","miraShip","investShip","raidShip","indomShip","maniShip","emptyShip","soloShip","suntShip"],"inactiveBondIds":[],"inactiveEnemyKeys":[],"lastRound":14,"bossRound":14,"hiddenRound":15,"rounds":{"1":{"template":"act1autochess_01","bossTemplates":null,"combatTimeLimit":45,"levelMaxPlayTime":45,"prepTime":65,"prepTimeData":65,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"2":{"template":"act1autochess_02","bossTemplates":null,"combatTimeLimit":45,"levelMaxPlayTime":45,"prepTime":65,"prepTimeData":65,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"3":{"template":"act1autochess_03","bossTemplates":null,"combatTimeLimit":55,"levelMaxPlayTime":55,"prepTime":65,"prepTimeData":65,"isSpPrepare":true,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"4":{"template":"act1autochess_04","bossTemplates":null,"combatTimeLimit":55,"levelMaxPlayTime":55,"prepTime":95,"prepTimeData":95,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"5":{"template":"act1autochess_05","bossTemplates":null,"combatTimeLimit":55,"levelMaxPlayTime":55,"prepTime":95,"prepTimeData":95,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"6":{"template":"act1autochess_06","bossTemplates":null,"combatTimeLimit":70,"levelMaxPlayTime":70,"prepTime":100,"prepTimeData":100,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"7":{"template":"act1autochess_07","bossTemplates":null,"combatTimeLimit":85,"levelMaxPlayTime":85,"prepTime":105,"prepTimeData":105,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"8":{"template":"act1autochess_h01","bossTemplates":null,"combatTimeLimit":85,"levelMaxPlayTime":85,"prepTime":105,"prepTimeData":105,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"9":{"template":"act1autochess_h02","bossTemplates":null,"combatTimeLimit":95,"levelMaxPlayTime":95,"prepTime":125,"prepTimeData":125,"isSpPrepare":true,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"10":{"template":"act1autochess_h03","bossTemplates":null,"combatTimeLimit":95,"levelMaxPlayTime":95,"prepTime":125,"prepTimeData":125,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"11":{"template":"act1autochess_h04","bossTemplates":null,"combatTimeLimit":115,"levelMaxPlayTime":115,"prepTime":125,"prepTimeData":125,"isSpPrepare":true,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"12":{"template":"act1autochess_h05","bossTemplates":null,"combatTimeLimit":115,"levelMaxPlayTime":115,"prepTime":125,"prepTimeData":125,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"13":{"template":"act1autochess_h06","bossTemplates":null,"combatTimeLimit":115,"levelMaxPlayTime":115,"prepTime":150,"prepTimeData":150,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"14":{"template":null,"bossTemplates":{"boss_1":"act1autochess_h07_01","boss_2":"act1autochess_h07_02","boss_3":"act1autochess_h07_03","boss_4":"act1autochess_h07_04","boss_5":"act2autochess_h07_05","boss_6":"act1autochess_h07_06","boss_7":"act1autochess_h07_07"},"combatTimeLimit":null,"levelMaxPlayTime":120,"prepTime":195,"prepTimeData":195,"isSpPrepare":false,"isBoss":true,"isHidden":false,"bossOvertimeAfter":150},"15":{"template":null,"bossTemplates":{"boss_8":"act1autochess_h08_01","boss_9":"act1autochess_h08_02","boss_10":"act1autochess_h08_03"},"combatTimeLimit":null,"levelMaxPlayTime":120,"prepTime":215,"prepTimeData":215,"isSpPrepare":false,"isBoss":true,"isHidden":true,"bossOvertimeAfter":150}},"spRounds":[3,9,11],"combatTimeLimit":{"1":45,"2":45,"3":55,"4":55,"5":55,"6":70,"7":85,"8":85,"9":95,"10":95,"11":115,"12":115,"13":115,"14":null,"15":null},"enemyScale":{"1":{"atk":1.1,"hp":1.2,"speed":1,"kAtk":1,"kHp":1},"2":{"atk":1.21,"hp":1.44,"speed":1,"kAtk":2,"kHp":2},"3":{"atk":1.21,"hp":1.44,"speed":1,"kAtk":2,"kHp":2},"4":{"atk":1.331,"hp":1.728,"speed":1,"kAtk":3,"kHp":3},"5":{"atk":1.331,"hp":1.728,"speed":1,"kAtk":3,"kHp":3},"6":{"atk":1.331,"hp":1.728,"speed":1,"kAtk":3,"kHp":3},"7":{"atk":1.331,"hp":1.728,"speed":1,"kAtk":3,"kHp":3},"8":{"atk":1.331,"hp":1.728,"speed":1,"kAtk":3,"kHp":3},"9":{"atk":1.4641,"hp":2.0736,"speed":1,"kAtk":4,"kHp":4},"10":{"atk":1.61051,"hp":2.48832,"speed":1,"kAtk":5,"kHp":5},"11":{"atk":1.771561,"hp":2.985984,"speed":1,"kAtk":6,"kHp":6},"12":{"atk":1.771561,"hp":2.985984,"speed":1,"kAtk":6,"kHp":6},"13":{"atk":1.948717,"hp":3.583181,"speed":1,"kAtk":7,"kHp":7},"14":{"atk":2.143589,"hp":4.299817,"speed":1,"kAtk":8,"kHp":8},"15":{"atk":2.143589,"hp":4.299817,"speed":1,"kAtk":8,"kHp":8}},"bossHpScale":{"bloodPointKey":"bloodPointHard","coop":1,"aliveScaling":false,"aliveFull":4,"aliveAssumed":true,"unaffectedByEnemyScale":true},"upgradePrices":[5,8,11,12,13],"maxShopLevel":6,"shopSlots":{"1":{"chess":3,"item":1},"2":{"chess":4,"item":1},"3":{"chess":4,"item":1},"4":{"chess":5,"item":1},"5":{"chess":5,"item":1},"6":{"chess":5,"item":1}},"levelTagColors":{"1":"#434343","2":"#626654","3":"#445760","4":"#615B74","5":"#6C5E41","6":"#5d341e"},"stages":["act1autochess_m02","act1autochess_m03","act1autochess_m04","act2autochess_m01","act2autochess_m02","act2autochess_m03","act2autochess_m04"],"bossWeights":{"boss_1":6,"boss_2":6,"boss_3":6,"boss_4":5,"boss_5":10,"boss_6":5,"boss_7":5},"hiddenBossWeights":{"boss_8":50,"boss_9":40,"boss_10":40}},"mode_multi_abyss":{"modeId":"mode_multi_abyss","name":"终极模拟","code":"AC-4","sortId":5,"type":"MULTI","difficulty":"ABYSS","inScope":true,"color":"#ff0024","iconId":"mode_abyss_icon","backgroundId":"background_abyss","desc":"敌方攻击强度到达极限的模拟训练","effectDescList":["·作战环境无比困难","·出现极度危险的敌人"],"unlockText":"通关2次【绝境模拟】后解锁","specialPhaseTime":16,"activeBondIds":["yanShip","sargonShip","victoriaShip","kjeragShip","lateranoShip","egirShip","siracusaShip","kazimierzShip","preciShip","swiftShip","skillfulShip","arcaneShip","steadShip","deputShip","visiShip","miraShip","investShip","raidShip","indomShip","maniShip","emptyShip","soloShip","suntShip"],"inactiveBondIds":[],"inactiveEnemyKeys":[],"lastRound":14,"bossRound":14,"hiddenRound":15,"rounds":{"1":{"template":"act1autochess_01","bossTemplates":null,"combatTimeLimit":45,"levelMaxPlayTime":45,"prepTime":65,"prepTimeData":65,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"2":{"template":"act1autochess_02","bossTemplates":null,"combatTimeLimit":45,"levelMaxPlayTime":45,"prepTime":65,"prepTimeData":65,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"3":{"template":"act1autochess_03","bossTemplates":null,"combatTimeLimit":55,"levelMaxPlayTime":55,"prepTime":65,"prepTimeData":65,"isSpPrepare":true,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"4":{"template":"act1autochess_04","bossTemplates":null,"combatTimeLimit":55,"levelMaxPlayTime":55,"prepTime":95,"prepTimeData":95,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"5":{"template":"act1autochess_05","bossTemplates":null,"combatTimeLimit":55,"levelMaxPlayTime":55,"prepTime":95,"prepTimeData":95,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"6":{"template":"act1autochess_06","bossTemplates":null,"combatTimeLimit":70,"levelMaxPlayTime":70,"prepTime":100,"prepTimeData":100,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"7":{"template":"act1autochess_07","bossTemplates":null,"combatTimeLimit":85,"levelMaxPlayTime":85,"prepTime":105,"prepTimeData":105,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"8":{"template":"act1autochess_h01","bossTemplates":null,"combatTimeLimit":85,"levelMaxPlayTime":85,"prepTime":105,"prepTimeData":105,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"9":{"template":"act1autochess_h02","bossTemplates":null,"combatTimeLimit":95,"levelMaxPlayTime":95,"prepTime":125,"prepTimeData":125,"isSpPrepare":true,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"10":{"template":"act1autochess_h03","bossTemplates":null,"combatTimeLimit":95,"levelMaxPlayTime":95,"prepTime":125,"prepTimeData":125,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"11":{"template":"act1autochess_h04","bossTemplates":null,"combatTimeLimit":115,"levelMaxPlayTime":115,"prepTime":125,"prepTimeData":125,"isSpPrepare":true,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"12":{"template":"act1autochess_h05","bossTemplates":null,"combatTimeLimit":115,"levelMaxPlayTime":115,"prepTime":125,"prepTimeData":125,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"13":{"template":"act1autochess_h06","bossTemplates":null,"combatTimeLimit":115,"levelMaxPlayTime":115,"prepTime":150,"prepTimeData":150,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"14":{"template":null,"bossTemplates":{"boss_1":"act1autochess_h07_01","boss_2":"act1autochess_h07_02","boss_3":"act1autochess_h07_03","boss_4":"act1autochess_h07_04","boss_5":"act2autochess_h07_05","boss_6":"act1autochess_h07_06","boss_7":"act1autochess_h07_07"},"combatTimeLimit":null,"levelMaxPlayTime":120,"prepTime":195,"prepTimeData":195,"isSpPrepare":false,"isBoss":true,"isHidden":false,"bossOvertimeAfter":150},"15":{"template":null,"bossTemplates":{"boss_8":"act1autochess_h08_01","boss_9":"act1autochess_h08_02","boss_10":"act1autochess_h08_03"},"combatTimeLimit":null,"levelMaxPlayTime":120,"prepTime":215,"prepTimeData":215,"isSpPrepare":false,"isBoss":true,"isHidden":true,"bossOvertimeAfter":150}},"spRounds":[3,9,11],"combatTimeLimit":{"1":45,"2":45,"3":55,"4":55,"5":55,"6":70,"7":85,"8":85,"9":95,"10":95,"11":115,"12":115,"13":115,"14":null,"15":null},"enemyScale":{"1":{"atk":1.1,"hp":1.2,"speed":1,"kAtk":1,"kHp":1},"2":{"atk":1.21,"hp":1.44,"speed":1,"kAtk":2,"kHp":2},"3":{"atk":1.21,"hp":1.44,"speed":1.15,"kAtk":2,"kHp":2},"4":{"atk":1.331,"hp":1.728,"speed":1.15,"kAtk":3,"kHp":3},"5":{"atk":1.331,"hp":2.0736,"speed":1.15,"kAtk":3,"kHp":4},"6":{"atk":1.4641,"hp":2.239488,"speed":1.15,"kAtk":4,"kHp":4},"7":{"atk":1.61051,"hp":3.583181,"speed":1.15,"kAtk":5,"kHp":7},"8":{"atk":1.61051,"hp":4.299817,"speed":1.15,"kAtk":5,"kHp":8},"9":{"atk":1.61051,"hp":4.299817,"speed":1.15,"kAtk":5,"kHp":8},"10":{"atk":1.61051,"hp":4.299817,"speed":1.15,"kAtk":5,"kHp":8},"11":{"atk":1.771561,"hp":5.15978,"speed":1.15,"kAtk":6,"kHp":9},"12":{"atk":1.771561,"hp":6.191736,"speed":1.15,"kAtk":6,"kHp":10},"13":{"atk":1.948717,"hp":6.687075,"speed":1.15,"kAtk":7,"kHp":10},"14":{"atk":2.143589,"hp":6.687075,"speed":1.15,"kAtk":8,"kHp":10},"15":{"atk":2.143589,"hp":6.687075,"speed":1.15,"kAtk":8,"kHp":10}},"bossHpScale":{"bloodPointKey":"bloodPointAbyss","coop":1,"aliveScaling":false,"aliveFull":4,"aliveAssumed":true,"unaffectedByEnemyScale":true},"upgradePrices":[5,8,11,12,13],"maxShopLevel":6,"shopSlots":{"1":{"chess":3,"item":1},"2":{"chess":4,"item":1},"3":{"chess":4,"item":1},"4":{"chess":5,"item":1},"5":{"chess":5,"item":1},"6":{"chess":5,"item":1}},"levelTagColors":{"1":"#434343","2":"#626654","3":"#445760","4":"#615B74","5":"#6C5E41","6":"#5d341e"},"stages":["act1autochess_m02","act1autochess_m03","act1autochess_m04","act2autochess_m01","act2autochess_m02","act2autochess_m03","act2autochess_m04"],"bossWeights":{"boss_1":6,"boss_2":6,"boss_3":6,"boss_4":5,"boss_5":10,"boss_6":5,"boss_7":5},"hiddenBossWeights":{"boss_8":50,"boss_9":40,"boss_10":40}}},"economy":{"income":[0,4,5,6,7,8,9,10,11,12,12,12,12,12,12,12],"incomeFormula":"min(3 + round, 12)","incomeCap":12,"incomeCapAlternative":10,"incomeAssumedAfterRound":3,"leftoverFundsLost":true,"leftoverFundsKeptByBands":["band_cannot"],"chessPrice":{"1":{"normal":2,"golden":2},"2":{"normal":3,"golden":3},"3":{"normal":3,"golden":3},"4":{"normal":3,"golden":3},"5":{"normal":4,"golden":4},"6":{"normal":4,"golden":4}},"chessSell":{"1":{"normal":1,"golden":1},"2":{"normal":1,"golden":1},"3":{"normal":1,"golden":1},"4":{"normal":1,"golden":1},"5":{"normal":1,"golden":1},"6":{"normal":1,"golden":1}},"chessStatus":{"1":{"normal":{"phase":1,"level":55,"skillLevel":4,"equipLevel":0,"eliteIconId":"char_elite_base_1"},"golden":{"phase":2,"level":50,"skillLevel":7,"equipLevel":1,"eliteIconId":"char_elite_gold_2"}},"2":{"normal":{"phase":1,"level":60,"skillLevel":4,"equipLevel":0,"eliteIconId":"char_elite_base_1"},"golden":{"phase":2,"level":55,"skillLevel":7,"equipLevel":1,"eliteIconId":"char_elite_gold_2"}},"3":{"normal":{"phase":2,"level":1,"skillLevel":4,"equipLevel":0,"eliteIconId":"char_elite_base_2"},"golden":{"phase":2,"level":60,"skillLevel":7,"equipLevel":1,"eliteIconId":"char_elite_gold_2"}},"4":{"normal":{"phase":2,"level":1,"skillLevel":4,"equipLevel":0,"eliteIconId":"char_elite_base_2"},"golden":{"phase":2,"level":60,"skillLevel":7,"equipLevel":1,"eliteIconId":"char_elite_gold_2"}},"5":{"normal":{"phase":2,"level":1,"skillLevel":4,"equipLevel":0,"eliteIconId":"char_elite_base_2"},"golden":{"phase":2,"level":60,"skillLevel":7,"equipLevel":1,"eliteIconId":"char_elite_gold_2"}},"6":{"normal":{"phase":2,"level":1,"skillLevel":4,"equipLevel":0,"eliteIconId":"char_elite_base_2"},"golden":{"phase":2,"level":60,"skillLevel":7,"equipLevel":3,"eliteIconId":"char_elite_gold_2"}}},"refreshPrice":1,"freeze":{"scope":"allUnsoldSlots","price":0,"consumedAtRoundStart":true,"refreshWhileFrozenRerollsAll":true,"rewardOfferFreezable":false},"shopClearedAtCombatStart":"unfrozenSlots","itemSellable":false,"itemDestroyRefund":0,"benchSize":10,"tempSize":5,"deployCap":8,"storeCntMax":6,"equipPerChess":2,"maxArtsPerRound":2,"poolCopies":{"1":12,"2":14,"3":18,"4":16,"5":8,"6":5},"poolCopiesOverrides":{"chess_char_6_11_a":4},"goldenCopies":3,"mergeCount":3,"mergeCountOverrides":{"chess_char_2_11_a":2},"itemMergeCount":2,"rewardOffer":{"count":3,"tierOffset":1,"maxTier":6,"price":0,"refreshable":false,"freezable":false,"expiresAtRoundEnd":true},"handFillOrder":"rightToLeft","shopOdds":{"model":"copyWeighted","note":"each slot draws 1 copy uniformly from remaining pool copies of unbanned visible chess with tier <= shop level; items: same tier shares, then uniform within tier [ASSUMED]"},"borrowCount":20,"fallbackBondId":"emptyShip","defaultBandId":"band_bldsk","defaultStartLp":28},"lpCapPerRound":10,"bossOvertimeAfter":150,"bossOvertimeDrainPerSec":1,"bossHpScale":{"formula":"co-op: bloodPoint[difficulty] — one pool for every field (\"所有人将一起对敌方领袖造成伤害\"; the mirrored copies of a pair field share it, \"两侧的敌方领袖共享生命值(敌方领袖的总生命值不变)\"); aliveScaling true would scale it × alive players at the Final Assault / aliveFull (巴哈姆特 12294 \"聯機隊友(撤退/死掉)變少,最後boss血條也會變少\", one community note, no proportion: off until confirmed, the alive / 4 proportion [ASSUMED]); solo: bloodPoint[difficulty] × solo (0.25 = one player of four) [ASSUMED]","coop":1,"solo":0.25,"soloAssumed":true,"aliveScaling":false,"aliveFull":4,"aliveAssumed":true,"unaffectedByEnemyScale":true},"hiddenCore":{"single":350,"multi":1200,"minTeamLpExclusive":1,"difficulties":["NORMAL","HARD","ABYSS"],"checkedAfterRound":14},"dp":{"init":10,"perSec":1,"max":99},"unite":{"maxHelpers":2,"helperOrder":"unitsOnField>activeBond>undownedUnits; pair: unitsOnField>activeBond>activeLayers>undownedUnits, first = right field (PRTS 帮助)","layerGainsEnabled":false,"keepsHpSpPositions":true,"leakedEnemyFullHp":true,"templates":{"1":"act1autochess_escaped_single","2":"act1autochess_escaped_multi"}},"finalAssault":{"pairing":"seatOrderPairs","oddPlayerAlone":true,"movableBossPerAlivePlayerSide":true,"layerGainsEnabled":false},"timers":{"infoCheck":25,"infoCheckHint":5,"bandDraft":50,"bandDraftHint":15,"bandTurn":30,"battleCheck":3,"spFirst":30,"spTurn":16,"soloPrepTimeData":300,"soloSpTimeData":150,"chatCd":1,"chatBubble":3,"broadcastDelay":1,"enterSteps":[{"step":"INFO_CHECK","time":25,"hint":5,"title":"确认本局信息"},{"step":"BAND_CHECK","time":50,"hint":15,"title":"选择策略"},{"step":"BATTLE_CHECK","time":3,"hint":0,"title":"协议启动"}]},"bans":{"FUNNY":{"core":0,"addon":1},"NORMAL":{"core":3,"addon":4},"HARD":{"core":3,"addon":4},"ABYSS":{"core":3,"addon":4},"TRAINING":{"core":0,"addon":0},"rule":"banned iff every bond of a visible non-DIY chess is in (drawn set D ∪ mode.inactiveBondIds); core = isCore bonds, addon = other bonds with weight > 0; uniform draw"},"bandDraft":{"skipsPerPlayer":1,"order":"random","duplicatesAllowed":true,"timeoutBandId":"band_bldsk"},"titles":[{"id":"comment_1","picId":"comment_icon_1","name":"卫戍之星","stat":"bossDamage","rule":"max","onlyOnWin":true,"text":"对敌方领袖造成伤害最高(仅胜利时)"},{"id":"comment_2","picId":"comment_icon_2","name":"不朽盟约","stat":"activatedLayers","rule":"max","text":"激活的盟约层数总和最高"},{"id":"comment_3","picId":"comment_icon_3","name":"坚若磐石","stat":"lpRemaining","rule":"max","text":"目标生命值损失最少"},{"id":"comment_4","picId":"comment_icon_4","name":"精英云集","stat":"merges","rule":"max","text":"晋升精锐次数最多"},{"id":"comment_5","picId":"comment_icon_5","name":"万事俱备","stat":"itemsEquipped","rule":"max","text":"装备配发数量最多"},{"id":"comment_6","picId":"comment_icon_6","name":"挥金如土","stat":"fundsSpent","rule":"max","text":"消耗资金最多"}],"titleRule":"each player gets at most one title; each title is used at most once per match; assign by the category where the player ranks best relative to teammates [ASSUMED]","tips":[{"tip":"只有在联合模拟中才能获得奖杯","weight":50},{"tip":"联合模拟在选择策略时可以进行一次跳过","weight":50},{"tip":"归属于特定盟约的干员只有部分会出现在调度中心内","weight":50},{"tip":"调度中心即使冻结,依然可以主动刷新","weight":50},{"tip":"晋级的特殊奖励无法被刷新、冻结,也不会保留至下一回合","weight":50},{"tip":"处于临时整备区的调度资源,在进入下一回合后会自动销毁","weight":50},{"tip":"一些特殊的盟约不需要部署干员也能激活生效","weight":50},{"tip":"干员晋级后已配发装备会回收至整备区,需要重新配置","weight":50},{"tip":"两件同名装备可以合成一件更强力的装备","weight":50},{"tip":"特定的装备组合可以为干员赋予额外的盟约效果","weight":50},{"tip":"叠加的盟约会在单次模拟中始终保留,但只有在盟约被激活时才会发挥作用","weight":50},{"tip":"多数情况下只有已经激活的盟约才可进行叠加","weight":50},{"tip":"休整期可以查看队友的战场情况","weight":50},{"tip":"休整期可以查看当前回合即将迎击的敌方单位","weight":50},{"tip":"拖拽干员至整备区可以直接撤退干员","weight":50},{"tip":"全体参与者就绪之前可随时取消准备,准备战斗后将无法进行操作","weight":50},{"tip":"只有达成完美作战的队友可以进行联防","weight":50},{"tip":"进行联防时,盟约不会继续叠加","weight":50},{"tip":"最终攻势中,两名参与者会处于同一个战场,但无法查看另一组队友的战场情况","weight":50},{"tip":"最终攻势中,所有人将一起对敌方领袖造成伤害","weight":50},{"tip":"达成特定的条件,可在最终攻势后解锁隐秘核心","weight":50}],"broadcasts":[{"id":"comment_boss_hit_1","type":"BOSS_HIT","priority":30,"text":"{0}博士对敌方领袖造成的伤害超过20%!","textRaw":"<@ba.vup>{0}博士对敌方领袖造成的伤害超过20%!","params":["0.2"]},{"id":"comment_boss_hit_2","type":"BOSS_HIT","priority":30,"text":"{0}博士对敌方领袖造成的伤害超过50%!","textRaw":"<@ba.vup>{0}博士对敌方领袖造成的伤害超过50%!","params":["0.5"]},{"id":"comment_boss_hit_3","type":"BOSS_HIT","priority":30,"text":"{0}博士对敌方领袖造成的伤害超过80%!","textRaw":"<@ba.vup>{0}博士对敌方领袖造成的伤害超过80%!","params":["0.8"]},{"id":"comment_char_damage_1","type":"CHAR_DAMAGE","priority":20,"text":"{0}博士的{1}干员造成的伤害量达到{2}","textRaw":"<@ba.vup>{0}博士的{1}干员造成的伤害量达到{2}","params":["200000"]},{"id":"comment_char_damage_2","type":"CHAR_DAMAGE","priority":20,"text":"{0}博士的{1}干员造成的伤害量达到{2}","textRaw":"<@ba.vup>{0}博士的{1}干员造成的伤害量达到{2}","params":["500000"]},{"id":"comment_char_damage_3","type":"CHAR_DAMAGE","priority":20,"text":"{0}博士的{1}干员造成的伤害量达到{2}","textRaw":"<@ba.vup>{0}博士的{1}干员造成的伤害量达到{2}","params":["1000000"]},{"id":"comment_shop_level_1","type":"SHOP_LEVEL","priority":11,"text":"{0}博士将调度中心等级提升为{1}级","textRaw":"<@ba.vup>{0}博士将调度中心等级提升为{1}级","params":["2"]},{"id":"comment_shop_level_2","type":"SHOP_LEVEL","priority":11,"text":"{0}博士将调度中心等级提升为{1}级","textRaw":"<@ba.vup>{0}博士将调度中心等级提升为{1}级","params":["3"]},{"id":"comment_shop_level_3","type":"SHOP_LEVEL","priority":11,"text":"{0}博士将调度中心等级提升为{1}级","textRaw":"<@ba.vup>{0}博士将调度中心等级提升为{1}级","params":["4"]},{"id":"comment_shop_level_4","type":"SHOP_LEVEL","priority":11,"text":"{0}博士将调度中心等级提升为{1}级","textRaw":"<@ba.vup>{0}博士将调度中心等级提升为{1}级","params":["5"]},{"id":"comment_shop_level_5","type":"SHOP_LEVEL","priority":11,"text":"{0}博士将调度中心等级提升为{1}级","textRaw":"<@ba.vup>{0}博士将调度中心等级提升为{1}级","params":["6"]},{"id":"comment_bond_effect","type":"BOND_EFFECT","priority":10,"text":"叠加层数","textRaw":"叠加层数","params":[]},{"id":"comment_golden_char","type":"GOLDEN_CHAR","priority":2,"text":"{0}博士的{1}干员晋升为精锐","textRaw":"<@ba.vup>{0}博士的{1}干员晋升为精锐","params":[]},{"id":"comment_char_gift","type":"CHAR_GIFT","priority":1,"text":"{0}博士给你赠送了{1}","textRaw":"<@ba.vup>{0}博士给你赠送了{1}","params":[]}],"trophies":{"byRoundsPassed":[{"maxRound":4,"FUNNY":0,"NORMAL":0,"HARD":0,"ABYSS":0},{"maxRound":8,"FUNNY":1,"NORMAL":1,"HARD":1,"ABYSS":1},{"maxRound":11,"FUNNY":2,"NORMAL":2,"HARD":2,"ABYSS":2},{"maxRound":13,"FUNNY":2,"NORMAL":3,"HARD":3,"ABYSS":3},{"maxRound":14,"FUNNY":3,"NORMAL":4,"HARD":5,"ABYSS":6}],"hiddenCore":{"FUNNY":null,"NORMAL":5,"HARD":7,"ABYSS":8},"multiOnly":true,"source":"research 01-core-data trophiesPerClear","medals":[{"count":0,"iconId":"trophy_level1_icon"},{"count":10,"iconId":"trophy_level2_icon"},{"count":30,"iconId":"trophy_level3_icon"},{"count":60,"iconId":"trophy_level4_icon"},{"count":100,"iconId":"trophy_level5_icon"}]},"roundScores":[{"round":0,"score":0},{"round":1,"score":10},{"round":2,"score":20},{"round":3,"score":30},{"round":4,"score":50},{"round":5,"score":70},{"round":6,"score":90},{"round":7,"score":110},{"round":8,"score":130},{"round":9,"score":150},{"round":10,"score":170},{"round":11,"score":200},{"round":12,"score":230},{"round":13,"score":260},{"round":14,"score":300}],"rewards":{"itemId":"act2autochess_token_chess","baseByRoundsPassed":[{"round":1,"count":10,"dailyPoint":10},{"round":2,"count":20,"dailyPoint":20},{"round":3,"count":30,"dailyPoint":30},{"round":4,"count":40,"dailyPoint":40},{"round":5,"count":50,"dailyPoint":50},{"round":6,"count":60,"dailyPoint":60},{"round":7,"count":70,"dailyPoint":70},{"round":8,"count":80,"dailyPoint":80},{"round":9,"count":90,"dailyPoint":90},{"round":10,"count":100,"dailyPoint":100},{"round":11,"count":120,"dailyPoint":120},{"round":12,"count":140,"dailyPoint":140},{"round":13,"count":160,"dailyPoint":160},{"round":14,"count":200,"dailyPoint":200}],"formula":"baseByRoundsPassed[roundsPassed].count * difficultyFactor[difficulty] * modeFactor[type]","difficultyFactor":{"FUNNY":1,"NORMAL":1.6,"HARD":1.7,"ABYSS":1.7},"modeFactor":{"SINGLE":1.25,"MULTI":1.25}},"constants":{"maxLevelCnt":15,"bossTrailerStartRound":3,"singleReconnectTime":86400,"trainingModeId":"mode_training_1","discountColor":"#59f4ca","premiumColor":"#ff5454","normalColor":"#ffc600","pingConds":[{"minMs":1,"textRaw":"<@ping.low>{0}ms"},{"minMs":60,"textRaw":"<@ping.medium>{0}ms"},{"minMs":200,"textRaw":"<@ping.high>{0}ms"}]}} \ No newline at end of file +{"season":"act2autochess","seasonName":"卫戍协议:盟约","modes":{"mode_training_1":{"modeId":"mode_training_1","name":"入门协议","code":"AC-TR-1","sortId":1,"type":"LOCAL","difficulty":"TRAINING","inScope":false,"color":"#4ed8af","iconId":"mode_training_icon","backgroundId":"background_training","desc":"用以熟悉协议内容的模式","effectDescList":["·仅可使用预置的调配干员","·无奖励","·无法用于解锁策略"],"unlockText":null,"specialPhaseTime":150,"activeBondIds":["yanShip","sargonShip","victoriaShip","kjeragShip","lateranoShip","egirShip","siracusaShip","kazimierzShip","preciShip","swiftShip","skillfulShip","arcaneShip","steadShip","deputShip","visiShip","miraShip","investShip","raidShip","indomShip","maniShip","emptyShip","soloShip","suntShip"],"inactiveBondIds":[],"inactiveEnemyKeys":[],"lastRound":4,"bossRound":4,"hiddenRound":null,"rounds":{"1":{"template":"act1autochess_tr01","bossTemplates":null,"combatTimeLimit":40,"levelMaxPlayTime":40,"prepTime":999,"prepTimeData":999,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"2":{"template":"act1autochess_tr02","bossTemplates":null,"combatTimeLimit":45,"levelMaxPlayTime":45,"prepTime":999,"prepTimeData":999,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"3":{"template":"act1autochess_tr02","bossTemplates":null,"combatTimeLimit":45,"levelMaxPlayTime":45,"prepTime":999,"prepTimeData":999,"isSpPrepare":true,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"4":{"template":null,"bossTemplates":{"boss_7":"act1autochess_tr04"},"combatTimeLimit":null,"levelMaxPlayTime":180,"prepTime":999,"prepTimeData":999,"isSpPrepare":false,"isBoss":true,"isHidden":false,"bossOvertimeAfter":150}},"spRounds":[3],"combatTimeLimit":{"1":40,"2":45,"3":45,"4":null},"enemyScale":{"1":{"atk":1,"hp":1,"speed":1,"assumed":true},"2":{"atk":1,"hp":1,"speed":1,"assumed":true},"3":{"atk":1,"hp":1,"speed":1,"assumed":true},"4":{"atk":1,"hp":1,"speed":1,"assumed":true}},"bossHpScale":{"bloodPointKey":null,"unaffectedByEnemyScale":true},"upgradePrices":[4,4,6,9,12],"maxShopLevel":6,"shopSlots":{"1":{"chess":3,"item":0},"2":{"chess":3,"item":0},"3":{"chess":3,"item":0},"4":{"chess":3,"item":0},"5":{"chess":3,"item":1},"6":{"chess":3,"item":1}},"levelTagColors":{"1":"#434343","2":"#626654","3":"#445760","4":"#615B74","5":"#6C5E41","6":"#5d341e"},"stages":["act1autochess_m01"],"bossWeights":{"boss_7":5},"hiddenBossWeights":{}},"mode_single_funny":{"modeId":"mode_single_funny","name":"标准模拟","code":"AC-1","sortId":2,"type":"SINGLE","difficulty":"FUNNY","inScope":true,"color":"#f6a329","iconId":"mode_funny_icon","backgroundId":"background_funny","desc":"时长较短的模拟训练","effectDescList":["·可以快速完成作战","·常规奖励"],"unlockText":"通关【入门协议】后解锁","specialPhaseTime":150,"activeBondIds":["yanShip","sargonShip","victoriaShip","kjeragShip","siracusaShip","preciShip","swiftShip","steadShip","deputShip","visiShip","indomShip","maniShip","emptyShip"],"inactiveBondIds":["lateranoShip","egirShip","kazimierzShip","skillfulShip","arcaneShip","miraShip","investShip","raidShip","soloShip","suntShip"],"inactiveEnemyKeys":["enemy_1112_emppnt","enemy_1207_sfji","enemy_1275_dwlock_2","enemy_1234_dsubrl_2","enemy_10122_uacann_2","enemy_1272_nhtank_2","enemy_9008_acbunn","enemy_1174_duholy_2","enemy_1355_mrfly_2","enemy_1197_sfshu_2","enemy_10067_ftsjc","enemy_1270_nhstlk_2","enemy_1283_sgkill","enemy_1175_dushdo_2","enemy_1254_lypa_2","enemy_1425_lrcmra_2","enemy_1329_cbshld_2","enemy_1072_dlancer"],"lastRound":9,"bossRound":9,"hiddenRound":null,"rounds":{"1":{"template":"act1autochess_01","bossTemplates":null,"combatTimeLimit":45,"levelMaxPlayTime":45,"prepTime":null,"prepTimeData":300,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"2":{"template":"act1autochess_02","bossTemplates":null,"combatTimeLimit":45,"levelMaxPlayTime":45,"prepTime":null,"prepTimeData":300,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"3":{"template":"act1autochess_03","bossTemplates":null,"combatTimeLimit":55,"levelMaxPlayTime":55,"prepTime":null,"prepTimeData":300,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"4":{"template":"act1autochess_04","bossTemplates":null,"combatTimeLimit":55,"levelMaxPlayTime":55,"prepTime":null,"prepTimeData":300,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"5":{"template":"act1autochess_05","bossTemplates":null,"combatTimeLimit":55,"levelMaxPlayTime":55,"prepTime":null,"prepTimeData":300,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"6":{"template":"act1autochess_06","bossTemplates":null,"combatTimeLimit":70,"levelMaxPlayTime":70,"prepTime":null,"prepTimeData":300,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"7":{"template":"act1autochess_07","bossTemplates":null,"combatTimeLimit":85,"levelMaxPlayTime":85,"prepTime":null,"prepTimeData":300,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"8":{"template":"act1autochess_h01","bossTemplates":null,"combatTimeLimit":85,"levelMaxPlayTime":85,"prepTime":null,"prepTimeData":300,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"9":{"template":null,"bossTemplates":{"boss_1":"act1autochess_h07_01_s","boss_2":"act1autochess_h07_02_s","boss_3":"act1autochess_h07_03_s","boss_4":"act1autochess_h07_04_s","boss_5":"act2autochess_h07_05_s","boss_6":"act1autochess_h07_06_s","boss_7":"act1autochess_h07_07_s"},"combatTimeLimit":null,"levelMaxPlayTime":120,"prepTime":null,"prepTimeData":300,"isSpPrepare":false,"isBoss":true,"isHidden":false,"bossOvertimeAfter":150}},"spRounds":[],"combatTimeLimit":{"1":45,"2":45,"3":55,"4":55,"5":55,"6":70,"7":85,"8":85,"9":null},"enemyScale":{"1":{"atk":0.7,"hp":0.75,"speed":1,"kAtk":0,"kHp":0},"2":{"atk":0.7,"hp":0.75,"speed":1,"kAtk":0,"kHp":0},"3":{"atk":0.7,"hp":0.75,"speed":1,"kAtk":0,"kHp":0},"4":{"atk":0.7,"hp":0.75,"speed":1,"kAtk":0,"kHp":0},"5":{"atk":0.7,"hp":0.75,"speed":1,"kAtk":0,"kHp":0},"6":{"atk":0.7,"hp":0.75,"speed":1,"kAtk":0,"kHp":0},"7":{"atk":0.7,"hp":0.75,"speed":1,"kAtk":0,"kHp":0},"8":{"atk":0.7,"hp":0.75,"speed":1,"kAtk":0,"kHp":0},"9":{"atk":0.7,"hp":0.75,"speed":1,"kAtk":0,"kHp":0}},"bossHpScale":{"bloodPointKey":"bloodPoint","unaffectedByEnemyScale":true},"upgradePrices":[1,1,5,8,10],"maxShopLevel":6,"shopSlots":{"1":{"chess":3,"item":1},"2":{"chess":4,"item":1},"3":{"chess":4,"item":1},"4":{"chess":4,"item":1},"5":{"chess":4,"item":1},"6":{"chess":5,"item":1}},"levelTagColors":{"1":"#434343","2":"#626654","3":"#445760","4":"#615B74","5":"#6C5E41","6":"#5d341e"},"stages":["act1autochess_m01"],"bossWeights":{"boss_1":6,"boss_2":6,"boss_3":6,"boss_4":5,"boss_5":10,"boss_6":5,"boss_7":5},"hiddenBossWeights":{}},"mode_single_normal":{"modeId":"mode_single_normal","name":"险境模拟","code":"AC-2","sortId":3,"type":"SINGLE","difficulty":"NORMAL","inScope":true,"color":"#e85a1a","iconId":"mode_normal_icon","backgroundId":"background_normal","desc":"敌方攻击强度较高的模拟训练","effectDescList":["·可使用盟约数增加","·大幅增加奖励"],"unlockText":"通关【标准模拟】后解锁","specialPhaseTime":150,"activeBondIds":["yanShip","sargonShip","victoriaShip","kjeragShip","lateranoShip","egirShip","siracusaShip","kazimierzShip","preciShip","swiftShip","skillfulShip","arcaneShip","steadShip","deputShip","visiShip","miraShip","investShip","raidShip","indomShip","maniShip","emptyShip","soloShip","suntShip"],"inactiveBondIds":[],"inactiveEnemyKeys":["enemy_1112_emppnt","enemy_1207_sfji","enemy_1275_dwlock_2","enemy_1234_dsubrl_2","enemy_10122_uacann_2","enemy_1272_nhtank_2","enemy_9008_acbunn","enemy_1174_duholy_2","enemy_1355_mrfly_2","enemy_1197_sfshu_2","enemy_10067_ftsjc","enemy_1270_nhstlk_2","enemy_1283_sgkill","enemy_1175_dushdo_2","enemy_1254_lypa_2","enemy_1425_lrcmra_2","enemy_1329_cbshld_2","enemy_1072_dlancer"],"lastRound":14,"bossRound":14,"hiddenRound":15,"rounds":{"1":{"template":"act1autochess_01","bossTemplates":null,"combatTimeLimit":45,"levelMaxPlayTime":45,"prepTime":null,"prepTimeData":300,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"2":{"template":"act1autochess_02","bossTemplates":null,"combatTimeLimit":45,"levelMaxPlayTime":45,"prepTime":null,"prepTimeData":300,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"3":{"template":"act1autochess_03","bossTemplates":null,"combatTimeLimit":55,"levelMaxPlayTime":55,"prepTime":null,"prepTimeData":300,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"4":{"template":"act1autochess_04","bossTemplates":null,"combatTimeLimit":55,"levelMaxPlayTime":55,"prepTime":null,"prepTimeData":300,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"5":{"template":"act1autochess_05","bossTemplates":null,"combatTimeLimit":55,"levelMaxPlayTime":55,"prepTime":null,"prepTimeData":300,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"6":{"template":"act1autochess_06","bossTemplates":null,"combatTimeLimit":70,"levelMaxPlayTime":70,"prepTime":null,"prepTimeData":300,"isSpPrepare":true,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"7":{"template":"act1autochess_07","bossTemplates":null,"combatTimeLimit":85,"levelMaxPlayTime":85,"prepTime":null,"prepTimeData":300,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"8":{"template":"act1autochess_h01","bossTemplates":null,"combatTimeLimit":85,"levelMaxPlayTime":85,"prepTime":null,"prepTimeData":300,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"9":{"template":"act1autochess_h02","bossTemplates":null,"combatTimeLimit":95,"levelMaxPlayTime":95,"prepTime":null,"prepTimeData":300,"isSpPrepare":true,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"10":{"template":"act1autochess_h03","bossTemplates":null,"combatTimeLimit":95,"levelMaxPlayTime":95,"prepTime":null,"prepTimeData":300,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"11":{"template":"act1autochess_h04","bossTemplates":null,"combatTimeLimit":115,"levelMaxPlayTime":115,"prepTime":null,"prepTimeData":300,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"12":{"template":"act1autochess_h05","bossTemplates":null,"combatTimeLimit":115,"levelMaxPlayTime":115,"prepTime":null,"prepTimeData":300,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"13":{"template":"act1autochess_h06","bossTemplates":null,"combatTimeLimit":115,"levelMaxPlayTime":115,"prepTime":null,"prepTimeData":300,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"14":{"template":null,"bossTemplates":{"boss_1":"act1autochess_h07_01_s","boss_2":"act1autochess_h07_02_s","boss_3":"act1autochess_h07_03_s","boss_4":"act1autochess_h07_04_s","boss_5":"act2autochess_h07_05_s","boss_6":"act1autochess_h07_06_s","boss_7":"act1autochess_h07_07_s"},"combatTimeLimit":null,"levelMaxPlayTime":120,"prepTime":null,"prepTimeData":300,"isSpPrepare":false,"isBoss":true,"isHidden":false,"bossOvertimeAfter":150},"15":{"template":null,"bossTemplates":{"boss_8":"act1autochess_h08_01_s","boss_9":"act1autochess_h08_02_s","boss_10":"act1autochess_h08_03_s"},"combatTimeLimit":null,"levelMaxPlayTime":120,"prepTime":null,"prepTimeData":300,"isSpPrepare":false,"isBoss":true,"isHidden":true,"bossOvertimeAfter":150}},"spRounds":[6,9],"combatTimeLimit":{"1":45,"2":45,"3":55,"4":55,"5":55,"6":70,"7":85,"8":85,"9":95,"10":95,"11":115,"12":115,"13":115,"14":null,"15":null},"enemyScale":{"1":{"atk":0.7,"hp":0.75,"speed":1,"kAtk":0,"kHp":0},"2":{"atk":0.7,"hp":0.75,"speed":1,"kAtk":0,"kHp":0},"3":{"atk":0.7,"hp":0.75,"speed":1,"kAtk":0,"kHp":0},"4":{"atk":0.77,"hp":0.9,"speed":1,"kAtk":1,"kHp":1},"5":{"atk":0.77,"hp":0.9,"speed":1,"kAtk":1,"kHp":1},"6":{"atk":0.77,"hp":0.9,"speed":1,"kAtk":1,"kHp":1},"7":{"atk":0.77,"hp":0.9,"speed":1,"kAtk":1,"kHp":1},"8":{"atk":0.847,"hp":1.08,"speed":1,"kAtk":2,"kHp":2},"9":{"atk":0.847,"hp":1.08,"speed":1,"kAtk":2,"kHp":2},"10":{"atk":0.847,"hp":1.08,"speed":1,"kAtk":2,"kHp":2},"11":{"atk":0.9317,"hp":1.296,"speed":1,"kAtk":3,"kHp":3},"12":{"atk":1.02487,"hp":1.5552,"speed":1,"kAtk":4,"kHp":4},"13":{"atk":1.127357,"hp":1.86624,"speed":1,"kAtk":5,"kHp":5},"14":{"atk":1.127357,"hp":1.86624,"speed":1,"kAtk":5,"kHp":5},"15":{"atk":1.127357,"hp":1.86624,"speed":1,"kAtk":5,"kHp":5}},"bossHpScale":{"bloodPointKey":"bloodPointNormal","unaffectedByEnemyScale":true},"upgradePrices":[5,8,11,12,13],"maxShopLevel":6,"shopSlots":{"1":{"chess":3,"item":1},"2":{"chess":4,"item":1},"3":{"chess":4,"item":1},"4":{"chess":5,"item":1},"5":{"chess":5,"item":1},"6":{"chess":5,"item":1}},"levelTagColors":{"1":"#434343","2":"#626654","3":"#445760","4":"#615B74","5":"#6C5E41","6":"#5d341e"},"stages":["act1autochess_m01","act1autochess_m02","act1autochess_m03","act1autochess_m04","act2autochess_m01","act2autochess_m02","act2autochess_m03","act2autochess_m04"],"bossWeights":{"boss_1":6,"boss_2":6,"boss_3":6,"boss_4":5,"boss_5":10,"boss_6":5,"boss_7":5},"hiddenBossWeights":{"boss_8":50,"boss_9":40,"boss_10":40}},"mode_single_hard":{"modeId":"mode_single_hard","name":"绝境模拟","code":"AC-3","sortId":4,"type":"SINGLE","difficulty":"HARD","inScope":true,"color":"#e73118","iconId":"mode_hard_icon","backgroundId":"background_hard","desc":"敌方攻击强度极高的模拟训练","effectDescList":["·作战环境困难","·出现更加危险的敌人"],"unlockText":"通关【险境模拟】后解锁","specialPhaseTime":150,"activeBondIds":["yanShip","sargonShip","victoriaShip","kjeragShip","lateranoShip","egirShip","siracusaShip","kazimierzShip","preciShip","swiftShip","skillfulShip","arcaneShip","steadShip","deputShip","visiShip","miraShip","investShip","raidShip","indomShip","maniShip","emptyShip","soloShip","suntShip"],"inactiveBondIds":[],"inactiveEnemyKeys":[],"lastRound":14,"bossRound":14,"hiddenRound":15,"rounds":{"1":{"template":"act1autochess_01","bossTemplates":null,"combatTimeLimit":45,"levelMaxPlayTime":45,"prepTime":null,"prepTimeData":300,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"2":{"template":"act1autochess_02","bossTemplates":null,"combatTimeLimit":45,"levelMaxPlayTime":45,"prepTime":null,"prepTimeData":300,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"3":{"template":"act1autochess_03","bossTemplates":null,"combatTimeLimit":55,"levelMaxPlayTime":55,"prepTime":null,"prepTimeData":300,"isSpPrepare":true,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"4":{"template":"act1autochess_04","bossTemplates":null,"combatTimeLimit":55,"levelMaxPlayTime":55,"prepTime":null,"prepTimeData":300,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"5":{"template":"act1autochess_05","bossTemplates":null,"combatTimeLimit":55,"levelMaxPlayTime":55,"prepTime":null,"prepTimeData":300,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"6":{"template":"act1autochess_06","bossTemplates":null,"combatTimeLimit":70,"levelMaxPlayTime":70,"prepTime":null,"prepTimeData":300,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"7":{"template":"act1autochess_07","bossTemplates":null,"combatTimeLimit":85,"levelMaxPlayTime":85,"prepTime":null,"prepTimeData":300,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"8":{"template":"act1autochess_h01","bossTemplates":null,"combatTimeLimit":85,"levelMaxPlayTime":85,"prepTime":null,"prepTimeData":300,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"9":{"template":"act1autochess_h02","bossTemplates":null,"combatTimeLimit":95,"levelMaxPlayTime":95,"prepTime":null,"prepTimeData":300,"isSpPrepare":true,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"10":{"template":"act1autochess_h03","bossTemplates":null,"combatTimeLimit":95,"levelMaxPlayTime":95,"prepTime":null,"prepTimeData":300,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"11":{"template":"act1autochess_h04","bossTemplates":null,"combatTimeLimit":115,"levelMaxPlayTime":115,"prepTime":null,"prepTimeData":300,"isSpPrepare":true,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"12":{"template":"act1autochess_h05","bossTemplates":null,"combatTimeLimit":115,"levelMaxPlayTime":115,"prepTime":null,"prepTimeData":300,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"13":{"template":"act1autochess_h06","bossTemplates":null,"combatTimeLimit":115,"levelMaxPlayTime":115,"prepTime":null,"prepTimeData":300,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"14":{"template":null,"bossTemplates":{"boss_1":"act1autochess_h07_01_s","boss_2":"act1autochess_h07_02_s","boss_3":"act1autochess_h07_03_s","boss_4":"act1autochess_h07_04_s","boss_5":"act2autochess_h07_05_s","boss_6":"act1autochess_h07_06_s","boss_7":"act1autochess_h07_07_s"},"combatTimeLimit":null,"levelMaxPlayTime":120,"prepTime":null,"prepTimeData":300,"isSpPrepare":false,"isBoss":true,"isHidden":false,"bossOvertimeAfter":150},"15":{"template":null,"bossTemplates":{"boss_8":"act1autochess_h08_01_s","boss_9":"act1autochess_h08_02_s","boss_10":"act1autochess_h08_03_s"},"combatTimeLimit":null,"levelMaxPlayTime":120,"prepTime":null,"prepTimeData":300,"isSpPrepare":false,"isBoss":true,"isHidden":true,"bossOvertimeAfter":150}},"spRounds":[3,9,11],"combatTimeLimit":{"1":45,"2":45,"3":55,"4":55,"5":55,"6":70,"7":85,"8":85,"9":95,"10":95,"11":115,"12":115,"13":115,"14":null,"15":null},"enemyScale":{"1":{"atk":0.8,"hp":0.8,"speed":1,"kAtk":0,"kHp":0},"2":{"atk":0.8,"hp":0.8,"speed":1,"kAtk":0,"kHp":0},"3":{"atk":0.8,"hp":0.8,"speed":1,"kAtk":0,"kHp":0},"4":{"atk":0.8,"hp":0.8,"speed":1,"kAtk":0,"kHp":0},"5":{"atk":0.88,"hp":0.96,"speed":1,"kAtk":1,"kHp":1},"6":{"atk":0.88,"hp":0.96,"speed":1,"kAtk":1,"kHp":1},"7":{"atk":0.88,"hp":0.96,"speed":1,"kAtk":1,"kHp":1},"8":{"atk":0.88,"hp":0.96,"speed":1,"kAtk":1,"kHp":1},"9":{"atk":0.968,"hp":1.152,"speed":1,"kAtk":2,"kHp":2},"10":{"atk":0.968,"hp":1.152,"speed":1,"kAtk":2,"kHp":2},"11":{"atk":1.0648,"hp":1.3824,"speed":1,"kAtk":3,"kHp":3},"12":{"atk":1.0648,"hp":1.3824,"speed":1,"kAtk":3,"kHp":3},"13":{"atk":1.17128,"hp":1.65888,"speed":1,"kAtk":4,"kHp":4},"14":{"atk":1.17128,"hp":1.65888,"speed":1,"kAtk":4,"kHp":4},"15":{"atk":1.17128,"hp":1.65888,"speed":1,"kAtk":4,"kHp":4}},"bossHpScale":{"bloodPointKey":"bloodPointHard","unaffectedByEnemyScale":true},"upgradePrices":[5,8,11,12,13],"maxShopLevel":6,"shopSlots":{"1":{"chess":3,"item":1},"2":{"chess":4,"item":1},"3":{"chess":4,"item":1},"4":{"chess":5,"item":1},"5":{"chess":5,"item":1},"6":{"chess":5,"item":1}},"levelTagColors":{"1":"#434343","2":"#626654","3":"#445760","4":"#615B74","5":"#6C5E41","6":"#5d341e"},"stages":["act1autochess_m02","act1autochess_m03","act1autochess_m04","act2autochess_m01","act2autochess_m02","act2autochess_m03","act2autochess_m04"],"bossWeights":{"boss_1":6,"boss_2":6,"boss_3":6,"boss_4":5,"boss_5":10,"boss_6":5,"boss_7":5},"hiddenBossWeights":{"boss_8":50,"boss_9":40,"boss_10":40}},"mode_single_abyss":{"modeId":"mode_single_abyss","name":"终极模拟","code":"AC-4","sortId":5,"type":"SINGLE","difficulty":"ABYSS","inScope":true,"color":"#ff0024","iconId":"mode_abyss_icon","backgroundId":"background_abyss","desc":"敌方攻击强度到达极限的模拟训练","effectDescList":["·作战环境无比困难","·出现极度危险的敌人"],"unlockText":"通关2次【绝境模拟】后解锁","specialPhaseTime":150,"activeBondIds":["yanShip","sargonShip","victoriaShip","kjeragShip","lateranoShip","egirShip","siracusaShip","kazimierzShip","preciShip","swiftShip","skillfulShip","arcaneShip","steadShip","deputShip","visiShip","miraShip","investShip","raidShip","indomShip","maniShip","emptyShip","soloShip","suntShip"],"inactiveBondIds":[],"inactiveEnemyKeys":[],"lastRound":14,"bossRound":14,"hiddenRound":15,"rounds":{"1":{"template":"act1autochess_01","bossTemplates":null,"combatTimeLimit":45,"levelMaxPlayTime":45,"prepTime":null,"prepTimeData":300,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"2":{"template":"act1autochess_02","bossTemplates":null,"combatTimeLimit":45,"levelMaxPlayTime":45,"prepTime":null,"prepTimeData":300,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"3":{"template":"act1autochess_03","bossTemplates":null,"combatTimeLimit":55,"levelMaxPlayTime":55,"prepTime":null,"prepTimeData":300,"isSpPrepare":true,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"4":{"template":"act1autochess_04","bossTemplates":null,"combatTimeLimit":55,"levelMaxPlayTime":55,"prepTime":null,"prepTimeData":300,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"5":{"template":"act1autochess_05","bossTemplates":null,"combatTimeLimit":55,"levelMaxPlayTime":55,"prepTime":null,"prepTimeData":300,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"6":{"template":"act1autochess_06","bossTemplates":null,"combatTimeLimit":70,"levelMaxPlayTime":70,"prepTime":null,"prepTimeData":300,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"7":{"template":"act1autochess_07","bossTemplates":null,"combatTimeLimit":85,"levelMaxPlayTime":85,"prepTime":null,"prepTimeData":300,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"8":{"template":"act1autochess_h01","bossTemplates":null,"combatTimeLimit":85,"levelMaxPlayTime":85,"prepTime":null,"prepTimeData":300,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"9":{"template":"act1autochess_h02","bossTemplates":null,"combatTimeLimit":95,"levelMaxPlayTime":95,"prepTime":null,"prepTimeData":300,"isSpPrepare":true,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"10":{"template":"act1autochess_h03","bossTemplates":null,"combatTimeLimit":95,"levelMaxPlayTime":95,"prepTime":null,"prepTimeData":300,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"11":{"template":"act1autochess_h04","bossTemplates":null,"combatTimeLimit":115,"levelMaxPlayTime":115,"prepTime":null,"prepTimeData":300,"isSpPrepare":true,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"12":{"template":"act1autochess_h05","bossTemplates":null,"combatTimeLimit":115,"levelMaxPlayTime":115,"prepTime":null,"prepTimeData":300,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"13":{"template":"act1autochess_h06","bossTemplates":null,"combatTimeLimit":115,"levelMaxPlayTime":115,"prepTime":null,"prepTimeData":300,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"14":{"template":null,"bossTemplates":{"boss_1":"act1autochess_h07_01_s","boss_2":"act1autochess_h07_02_s","boss_3":"act1autochess_h07_03_s","boss_4":"act1autochess_h07_04_s","boss_5":"act2autochess_h07_05_s","boss_6":"act1autochess_h07_06_s","boss_7":"act1autochess_h07_07_s"},"combatTimeLimit":null,"levelMaxPlayTime":120,"prepTime":null,"prepTimeData":300,"isSpPrepare":false,"isBoss":true,"isHidden":false,"bossOvertimeAfter":150},"15":{"template":null,"bossTemplates":{"boss_8":"act1autochess_h08_01_s","boss_9":"act1autochess_h08_02_s","boss_10":"act1autochess_h08_03_s"},"combatTimeLimit":null,"levelMaxPlayTime":120,"prepTime":null,"prepTimeData":300,"isSpPrepare":false,"isBoss":true,"isHidden":true,"bossOvertimeAfter":150}},"spRounds":[3,9,11],"combatTimeLimit":{"1":45,"2":45,"3":55,"4":55,"5":55,"6":70,"7":85,"8":85,"9":95,"10":95,"11":115,"12":115,"13":115,"14":null,"15":null},"enemyScale":{"1":{"atk":1.1,"hp":1.2,"speed":1,"kAtk":1,"kHp":1},"2":{"atk":1.21,"hp":1.44,"speed":1,"kAtk":2,"kHp":2},"3":{"atk":1.21,"hp":1.44,"speed":1.15,"kAtk":2,"kHp":2},"4":{"atk":1.21,"hp":1.44,"speed":1.15,"kAtk":2,"kHp":2},"5":{"atk":1.21,"hp":1.44,"speed":1.15,"kAtk":2,"kHp":2},"6":{"atk":1.331,"hp":1.728,"speed":1.15,"kAtk":3,"kHp":3},"7":{"atk":1.331,"hp":1.728,"speed":1.15,"kAtk":3,"kHp":3},"8":{"atk":1.331,"hp":1.728,"speed":1.15,"kAtk":3,"kHp":3},"9":{"atk":1.331,"hp":1.728,"speed":1.15,"kAtk":3,"kHp":3},"10":{"atk":1.4641,"hp":2.0736,"speed":1.15,"kAtk":4,"kHp":4},"11":{"atk":1.61051,"hp":2.48832,"speed":1.15,"kAtk":5,"kHp":5},"12":{"atk":1.61051,"hp":2.48832,"speed":1.15,"kAtk":5,"kHp":5},"13":{"atk":1.771561,"hp":2.985984,"speed":1.15,"kAtk":6,"kHp":6},"14":{"atk":1.948717,"hp":3.583181,"speed":1.15,"kAtk":7,"kHp":7},"15":{"atk":1.948717,"hp":3.583181,"speed":1.15,"kAtk":7,"kHp":7}},"bossHpScale":{"bloodPointKey":"bloodPointAbyss","unaffectedByEnemyScale":true},"upgradePrices":[5,8,11,12,13],"maxShopLevel":6,"shopSlots":{"1":{"chess":3,"item":1},"2":{"chess":4,"item":1},"3":{"chess":4,"item":1},"4":{"chess":5,"item":1},"5":{"chess":5,"item":1},"6":{"chess":5,"item":1}},"levelTagColors":{"1":"#434343","2":"#626654","3":"#445760","4":"#615B74","5":"#6C5E41","6":"#5d341e"},"stages":["act1autochess_m02","act1autochess_m03","act1autochess_m04","act2autochess_m01","act2autochess_m02","act2autochess_m03","act2autochess_m04"],"bossWeights":{"boss_1":6,"boss_2":6,"boss_3":6,"boss_4":5,"boss_5":10,"boss_6":5,"boss_7":5},"hiddenBossWeights":{"boss_8":50,"boss_9":40,"boss_10":40}},"mode_multi_funny":{"modeId":"mode_multi_funny","name":"标准模拟","code":"AC-1","sortId":2,"type":"MULTI","difficulty":"FUNNY","inScope":true,"color":"#f6a329","iconId":"mode_funny_icon","backgroundId":"background_funny","desc":"敌方攻击强度较低的模拟训练","effectDescList":["·作战环境较为温和","·常规奖励"],"unlockText":"通关【入门协议】后解锁","specialPhaseTime":16,"activeBondIds":["yanShip","sargonShip","victoriaShip","kjeragShip","siracusaShip","preciShip","swiftShip","steadShip","deputShip","visiShip","indomShip","maniShip","emptyShip"],"inactiveBondIds":["lateranoShip","egirShip","kazimierzShip","skillfulShip","arcaneShip","miraShip","investShip","raidShip","soloShip","suntShip"],"inactiveEnemyKeys":["enemy_1112_emppnt","enemy_1207_sfji","enemy_1275_dwlock_2","enemy_1234_dsubrl_2","enemy_10122_uacann_2","enemy_1272_nhtank_2","enemy_9008_acbunn","enemy_1174_duholy_2","enemy_1355_mrfly_2","enemy_1197_sfshu_2","enemy_10067_ftsjc","enemy_1270_nhstlk_2","enemy_1283_sgkill","enemy_1175_dushdo_2","enemy_1254_lypa_2","enemy_1425_lrcmra_2","enemy_1329_cbshld_2","enemy_1072_dlancer"],"lastRound":14,"bossRound":14,"hiddenRound":null,"rounds":{"1":{"template":"act1autochess_01","bossTemplates":null,"combatTimeLimit":45,"levelMaxPlayTime":45,"prepTime":65,"prepTimeData":65,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"2":{"template":"act1autochess_02","bossTemplates":null,"combatTimeLimit":45,"levelMaxPlayTime":45,"prepTime":65,"prepTimeData":65,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"3":{"template":"act1autochess_03","bossTemplates":null,"combatTimeLimit":55,"levelMaxPlayTime":55,"prepTime":65,"prepTimeData":65,"isSpPrepare":true,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"4":{"template":"act1autochess_04","bossTemplates":null,"combatTimeLimit":55,"levelMaxPlayTime":55,"prepTime":95,"prepTimeData":95,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"5":{"template":"act1autochess_05","bossTemplates":null,"combatTimeLimit":55,"levelMaxPlayTime":55,"prepTime":95,"prepTimeData":95,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"6":{"template":"act1autochess_06","bossTemplates":null,"combatTimeLimit":70,"levelMaxPlayTime":70,"prepTime":100,"prepTimeData":100,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"7":{"template":"act1autochess_07","bossTemplates":null,"combatTimeLimit":85,"levelMaxPlayTime":85,"prepTime":105,"prepTimeData":105,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"8":{"template":"act1autochess_h01","bossTemplates":null,"combatTimeLimit":85,"levelMaxPlayTime":85,"prepTime":105,"prepTimeData":105,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"9":{"template":"act1autochess_h02","bossTemplates":null,"combatTimeLimit":95,"levelMaxPlayTime":95,"prepTime":125,"prepTimeData":125,"isSpPrepare":true,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"10":{"template":"act1autochess_h03","bossTemplates":null,"combatTimeLimit":95,"levelMaxPlayTime":95,"prepTime":125,"prepTimeData":125,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"11":{"template":"act1autochess_h04","bossTemplates":null,"combatTimeLimit":115,"levelMaxPlayTime":115,"prepTime":125,"prepTimeData":125,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"12":{"template":"act1autochess_h05","bossTemplates":null,"combatTimeLimit":115,"levelMaxPlayTime":115,"prepTime":125,"prepTimeData":125,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"13":{"template":"act1autochess_h06","bossTemplates":null,"combatTimeLimit":115,"levelMaxPlayTime":115,"prepTime":150,"prepTimeData":150,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"14":{"template":null,"bossTemplates":{"boss_1":"act1autochess_h07_01","boss_2":"act1autochess_h07_02","boss_3":"act1autochess_h07_03","boss_4":"act1autochess_h07_04","boss_5":"act2autochess_h07_05","boss_6":"act1autochess_h07_06","boss_7":"act1autochess_h07_07"},"combatTimeLimit":null,"levelMaxPlayTime":120,"prepTime":195,"prepTimeData":195,"isSpPrepare":false,"isBoss":true,"isHidden":false,"bossOvertimeAfter":150}},"spRounds":[3,9],"combatTimeLimit":{"1":45,"2":45,"3":55,"4":55,"5":55,"6":70,"7":85,"8":85,"9":95,"10":95,"11":115,"12":115,"13":115,"14":null},"enemyScale":{"1":{"atk":0.8,"hp":0.8,"speed":1,"kAtk":0,"kHp":0},"2":{"atk":0.8,"hp":0.8,"speed":1,"kAtk":0,"kHp":0},"3":{"atk":0.8,"hp":0.8,"speed":1,"kAtk":0,"kHp":0},"4":{"atk":0.8,"hp":0.8,"speed":1,"kAtk":0,"kHp":0},"5":{"atk":0.8,"hp":0.8,"speed":1,"kAtk":0,"kHp":0},"6":{"atk":0.8,"hp":0.8,"speed":1,"kAtk":0,"kHp":0},"7":{"atk":0.8,"hp":0.8,"speed":1,"kAtk":0,"kHp":0},"8":{"atk":0.8,"hp":0.8,"speed":1,"kAtk":0,"kHp":0},"9":{"atk":0.8,"hp":0.8,"speed":1,"kAtk":0,"kHp":0},"10":{"atk":0.8,"hp":0.8,"speed":1,"kAtk":0,"kHp":0},"11":{"atk":0.8,"hp":0.8,"speed":1,"kAtk":0,"kHp":0},"12":{"atk":0.88,"hp":0.96,"speed":1,"kAtk":1,"kHp":1},"13":{"atk":0.88,"hp":0.96,"speed":1,"kAtk":1,"kHp":1},"14":{"atk":0.88,"hp":0.96,"speed":1,"kAtk":1,"kHp":1}},"bossHpScale":{"bloodPointKey":"bloodPoint","unaffectedByEnemyScale":true},"upgradePrices":[5,8,10,11,11],"maxShopLevel":6,"shopSlots":{"1":{"chess":3,"item":1},"2":{"chess":4,"item":1},"3":{"chess":4,"item":1},"4":{"chess":4,"item":1},"5":{"chess":4,"item":1},"6":{"chess":5,"item":1}},"levelTagColors":{"1":"#434343","2":"#626654","3":"#445760","4":"#615B74","5":"#6C5E41","6":"#5d341e"},"stages":["act1autochess_m01"],"bossWeights":{"boss_1":6,"boss_2":6,"boss_3":6,"boss_4":5,"boss_5":10,"boss_6":5,"boss_7":5},"hiddenBossWeights":{}},"mode_multi_normal":{"modeId":"mode_multi_normal","name":"险境模拟","code":"AC-2","sortId":3,"type":"MULTI","difficulty":"NORMAL","inScope":true,"color":"#e85a1a","iconId":"mode_normal_icon","backgroundId":"background_normal","desc":"敌方攻击强度较高的模拟训练","effectDescList":["·可使用盟约数增加","·大幅增加奖励"],"unlockText":"通关【标准模拟】后解锁","specialPhaseTime":16,"activeBondIds":["yanShip","sargonShip","victoriaShip","kjeragShip","lateranoShip","egirShip","siracusaShip","kazimierzShip","preciShip","swiftShip","skillfulShip","arcaneShip","steadShip","deputShip","visiShip","miraShip","investShip","raidShip","indomShip","maniShip","emptyShip","soloShip","suntShip"],"inactiveBondIds":[],"inactiveEnemyKeys":["enemy_1112_emppnt","enemy_1207_sfji","enemy_1275_dwlock_2","enemy_1234_dsubrl_2","enemy_10122_uacann_2","enemy_1272_nhtank_2","enemy_9008_acbunn","enemy_1174_duholy_2","enemy_1355_mrfly_2","enemy_1197_sfshu_2","enemy_10067_ftsjc","enemy_1270_nhstlk_2","enemy_1283_sgkill","enemy_1175_dushdo_2","enemy_1254_lypa_2","enemy_1425_lrcmra_2","enemy_1329_cbshld_2","enemy_1072_dlancer"],"lastRound":14,"bossRound":14,"hiddenRound":15,"rounds":{"1":{"template":"act1autochess_01","bossTemplates":null,"combatTimeLimit":45,"levelMaxPlayTime":45,"prepTime":65,"prepTimeData":65,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"2":{"template":"act1autochess_02","bossTemplates":null,"combatTimeLimit":45,"levelMaxPlayTime":45,"prepTime":65,"prepTimeData":65,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"3":{"template":"act1autochess_03","bossTemplates":null,"combatTimeLimit":55,"levelMaxPlayTime":55,"prepTime":65,"prepTimeData":65,"isSpPrepare":true,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"4":{"template":"act1autochess_04","bossTemplates":null,"combatTimeLimit":55,"levelMaxPlayTime":55,"prepTime":95,"prepTimeData":95,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"5":{"template":"act1autochess_05","bossTemplates":null,"combatTimeLimit":55,"levelMaxPlayTime":55,"prepTime":95,"prepTimeData":95,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"6":{"template":"act1autochess_06","bossTemplates":null,"combatTimeLimit":70,"levelMaxPlayTime":70,"prepTime":100,"prepTimeData":100,"isSpPrepare":true,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"7":{"template":"act1autochess_07","bossTemplates":null,"combatTimeLimit":85,"levelMaxPlayTime":85,"prepTime":105,"prepTimeData":105,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"8":{"template":"act1autochess_h01","bossTemplates":null,"combatTimeLimit":85,"levelMaxPlayTime":85,"prepTime":105,"prepTimeData":105,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"9":{"template":"act1autochess_h02","bossTemplates":null,"combatTimeLimit":95,"levelMaxPlayTime":95,"prepTime":125,"prepTimeData":125,"isSpPrepare":true,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"10":{"template":"act1autochess_h03","bossTemplates":null,"combatTimeLimit":95,"levelMaxPlayTime":95,"prepTime":125,"prepTimeData":125,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"11":{"template":"act1autochess_h04","bossTemplates":null,"combatTimeLimit":115,"levelMaxPlayTime":115,"prepTime":125,"prepTimeData":125,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"12":{"template":"act1autochess_h05","bossTemplates":null,"combatTimeLimit":115,"levelMaxPlayTime":115,"prepTime":125,"prepTimeData":125,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"13":{"template":"act1autochess_h06","bossTemplates":null,"combatTimeLimit":115,"levelMaxPlayTime":115,"prepTime":150,"prepTimeData":150,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"14":{"template":null,"bossTemplates":{"boss_1":"act1autochess_h07_01","boss_2":"act1autochess_h07_02","boss_3":"act1autochess_h07_03","boss_4":"act1autochess_h07_04","boss_5":"act2autochess_h07_05","boss_6":"act1autochess_h07_06","boss_7":"act1autochess_h07_07"},"combatTimeLimit":null,"levelMaxPlayTime":120,"prepTime":195,"prepTimeData":195,"isSpPrepare":false,"isBoss":true,"isHidden":false,"bossOvertimeAfter":150},"15":{"template":null,"bossTemplates":{"boss_8":"act1autochess_h08_01","boss_9":"act1autochess_h08_02","boss_10":"act1autochess_h08_03"},"combatTimeLimit":null,"levelMaxPlayTime":120,"prepTime":195,"prepTimeData":195,"isSpPrepare":false,"isBoss":true,"isHidden":true,"bossOvertimeAfter":150}},"spRounds":[3,6,9],"combatTimeLimit":{"1":45,"2":45,"3":55,"4":55,"5":55,"6":70,"7":85,"8":85,"9":95,"10":95,"11":115,"12":115,"13":115,"14":null,"15":null},"enemyScale":{"1":{"atk":0.8,"hp":0.8,"speed":1,"kAtk":0,"kHp":0},"2":{"atk":0.88,"hp":0.96,"speed":1,"kAtk":1,"kHp":1},"3":{"atk":0.88,"hp":0.96,"speed":1,"kAtk":1,"kHp":1},"4":{"atk":0.968,"hp":1.152,"speed":1,"kAtk":2,"kHp":2},"5":{"atk":0.968,"hp":1.152,"speed":1,"kAtk":2,"kHp":2},"6":{"atk":0.968,"hp":1.152,"speed":1,"kAtk":2,"kHp":2},"7":{"atk":0.968,"hp":1.152,"speed":1,"kAtk":2,"kHp":2},"8":{"atk":1.0648,"hp":1.3824,"speed":1,"kAtk":3,"kHp":3},"9":{"atk":1.17128,"hp":1.65888,"speed":1,"kAtk":4,"kHp":4},"10":{"atk":1.17128,"hp":1.65888,"speed":1,"kAtk":4,"kHp":4},"11":{"atk":1.288408,"hp":1.990656,"speed":1,"kAtk":5,"kHp":5},"12":{"atk":1.417249,"hp":2.388787,"speed":1,"kAtk":6,"kHp":6},"13":{"atk":1.558974,"hp":2.866545,"speed":1,"kAtk":7,"kHp":7},"14":{"atk":1.558974,"hp":2.866545,"speed":1,"kAtk":7,"kHp":7},"15":{"atk":1.558974,"hp":2.866545,"speed":1,"kAtk":7,"kHp":7}},"bossHpScale":{"bloodPointKey":"bloodPointNormal","unaffectedByEnemyScale":true},"upgradePrices":[5,8,11,12,13],"maxShopLevel":6,"shopSlots":{"1":{"chess":3,"item":1},"2":{"chess":4,"item":1},"3":{"chess":4,"item":1},"4":{"chess":5,"item":1},"5":{"chess":5,"item":1},"6":{"chess":5,"item":1}},"levelTagColors":{"1":"#434343","2":"#626654","3":"#445760","4":"#615B74","5":"#6C5E41","6":"#5d341e"},"stages":["act1autochess_m01","act1autochess_m02","act1autochess_m03","act1autochess_m04","act2autochess_m01","act2autochess_m02","act2autochess_m03","act2autochess_m04"],"bossWeights":{"boss_1":6,"boss_2":6,"boss_3":6,"boss_4":5,"boss_5":10,"boss_6":5,"boss_7":5},"hiddenBossWeights":{"boss_8":50,"boss_9":40,"boss_10":40}},"mode_multi_hard":{"modeId":"mode_multi_hard","name":"绝境模拟","code":"AC-3","sortId":4,"type":"MULTI","difficulty":"HARD","inScope":true,"color":"#e73118","iconId":"mode_hard_icon","backgroundId":"background_hard","desc":"敌方攻击强度极高的模拟训练","effectDescList":["·作战环境困难","·出现更加危险的敌人"],"unlockText":"通关【险境模拟】后解锁","specialPhaseTime":16,"activeBondIds":["yanShip","sargonShip","victoriaShip","kjeragShip","lateranoShip","egirShip","siracusaShip","kazimierzShip","preciShip","swiftShip","skillfulShip","arcaneShip","steadShip","deputShip","visiShip","miraShip","investShip","raidShip","indomShip","maniShip","emptyShip","soloShip","suntShip"],"inactiveBondIds":[],"inactiveEnemyKeys":[],"lastRound":14,"bossRound":14,"hiddenRound":15,"rounds":{"1":{"template":"act1autochess_01","bossTemplates":null,"combatTimeLimit":45,"levelMaxPlayTime":45,"prepTime":65,"prepTimeData":65,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"2":{"template":"act1autochess_02","bossTemplates":null,"combatTimeLimit":45,"levelMaxPlayTime":45,"prepTime":65,"prepTimeData":65,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"3":{"template":"act1autochess_03","bossTemplates":null,"combatTimeLimit":55,"levelMaxPlayTime":55,"prepTime":65,"prepTimeData":65,"isSpPrepare":true,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"4":{"template":"act1autochess_04","bossTemplates":null,"combatTimeLimit":55,"levelMaxPlayTime":55,"prepTime":95,"prepTimeData":95,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"5":{"template":"act1autochess_05","bossTemplates":null,"combatTimeLimit":55,"levelMaxPlayTime":55,"prepTime":95,"prepTimeData":95,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"6":{"template":"act1autochess_06","bossTemplates":null,"combatTimeLimit":70,"levelMaxPlayTime":70,"prepTime":100,"prepTimeData":100,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"7":{"template":"act1autochess_07","bossTemplates":null,"combatTimeLimit":85,"levelMaxPlayTime":85,"prepTime":105,"prepTimeData":105,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"8":{"template":"act1autochess_h01","bossTemplates":null,"combatTimeLimit":85,"levelMaxPlayTime":85,"prepTime":105,"prepTimeData":105,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"9":{"template":"act1autochess_h02","bossTemplates":null,"combatTimeLimit":95,"levelMaxPlayTime":95,"prepTime":125,"prepTimeData":125,"isSpPrepare":true,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"10":{"template":"act1autochess_h03","bossTemplates":null,"combatTimeLimit":95,"levelMaxPlayTime":95,"prepTime":125,"prepTimeData":125,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"11":{"template":"act1autochess_h04","bossTemplates":null,"combatTimeLimit":115,"levelMaxPlayTime":115,"prepTime":125,"prepTimeData":125,"isSpPrepare":true,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"12":{"template":"act1autochess_h05","bossTemplates":null,"combatTimeLimit":115,"levelMaxPlayTime":115,"prepTime":125,"prepTimeData":125,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"13":{"template":"act1autochess_h06","bossTemplates":null,"combatTimeLimit":115,"levelMaxPlayTime":115,"prepTime":150,"prepTimeData":150,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"14":{"template":null,"bossTemplates":{"boss_1":"act1autochess_h07_01","boss_2":"act1autochess_h07_02","boss_3":"act1autochess_h07_03","boss_4":"act1autochess_h07_04","boss_5":"act2autochess_h07_05","boss_6":"act1autochess_h07_06","boss_7":"act1autochess_h07_07"},"combatTimeLimit":null,"levelMaxPlayTime":120,"prepTime":195,"prepTimeData":195,"isSpPrepare":false,"isBoss":true,"isHidden":false,"bossOvertimeAfter":150},"15":{"template":null,"bossTemplates":{"boss_8":"act1autochess_h08_01","boss_9":"act1autochess_h08_02","boss_10":"act1autochess_h08_03"},"combatTimeLimit":null,"levelMaxPlayTime":120,"prepTime":215,"prepTimeData":215,"isSpPrepare":false,"isBoss":true,"isHidden":true,"bossOvertimeAfter":150}},"spRounds":[3,9,11],"combatTimeLimit":{"1":45,"2":45,"3":55,"4":55,"5":55,"6":70,"7":85,"8":85,"9":95,"10":95,"11":115,"12":115,"13":115,"14":null,"15":null},"enemyScale":{"1":{"atk":1.1,"hp":1.2,"speed":1,"kAtk":1,"kHp":1},"2":{"atk":1.21,"hp":1.44,"speed":1,"kAtk":2,"kHp":2},"3":{"atk":1.21,"hp":1.44,"speed":1,"kAtk":2,"kHp":2},"4":{"atk":1.331,"hp":1.728,"speed":1,"kAtk":3,"kHp":3},"5":{"atk":1.331,"hp":1.728,"speed":1,"kAtk":3,"kHp":3},"6":{"atk":1.331,"hp":1.728,"speed":1,"kAtk":3,"kHp":3},"7":{"atk":1.331,"hp":1.728,"speed":1,"kAtk":3,"kHp":3},"8":{"atk":1.331,"hp":1.728,"speed":1,"kAtk":3,"kHp":3},"9":{"atk":1.4641,"hp":2.0736,"speed":1,"kAtk":4,"kHp":4},"10":{"atk":1.61051,"hp":2.48832,"speed":1,"kAtk":5,"kHp":5},"11":{"atk":1.771561,"hp":2.985984,"speed":1,"kAtk":6,"kHp":6},"12":{"atk":1.771561,"hp":2.985984,"speed":1,"kAtk":6,"kHp":6},"13":{"atk":1.948717,"hp":3.583181,"speed":1,"kAtk":7,"kHp":7},"14":{"atk":2.143589,"hp":4.299817,"speed":1,"kAtk":8,"kHp":8},"15":{"atk":2.143589,"hp":4.299817,"speed":1,"kAtk":8,"kHp":8}},"bossHpScale":{"bloodPointKey":"bloodPointHard","unaffectedByEnemyScale":true},"upgradePrices":[5,8,11,12,13],"maxShopLevel":6,"shopSlots":{"1":{"chess":3,"item":1},"2":{"chess":4,"item":1},"3":{"chess":4,"item":1},"4":{"chess":5,"item":1},"5":{"chess":5,"item":1},"6":{"chess":5,"item":1}},"levelTagColors":{"1":"#434343","2":"#626654","3":"#445760","4":"#615B74","5":"#6C5E41","6":"#5d341e"},"stages":["act1autochess_m02","act1autochess_m03","act1autochess_m04","act2autochess_m01","act2autochess_m02","act2autochess_m03","act2autochess_m04"],"bossWeights":{"boss_1":6,"boss_2":6,"boss_3":6,"boss_4":5,"boss_5":10,"boss_6":5,"boss_7":5},"hiddenBossWeights":{"boss_8":50,"boss_9":40,"boss_10":40}},"mode_multi_abyss":{"modeId":"mode_multi_abyss","name":"终极模拟","code":"AC-4","sortId":5,"type":"MULTI","difficulty":"ABYSS","inScope":true,"color":"#ff0024","iconId":"mode_abyss_icon","backgroundId":"background_abyss","desc":"敌方攻击强度到达极限的模拟训练","effectDescList":["·作战环境无比困难","·出现极度危险的敌人"],"unlockText":"通关2次【绝境模拟】后解锁","specialPhaseTime":16,"activeBondIds":["yanShip","sargonShip","victoriaShip","kjeragShip","lateranoShip","egirShip","siracusaShip","kazimierzShip","preciShip","swiftShip","skillfulShip","arcaneShip","steadShip","deputShip","visiShip","miraShip","investShip","raidShip","indomShip","maniShip","emptyShip","soloShip","suntShip"],"inactiveBondIds":[],"inactiveEnemyKeys":[],"lastRound":14,"bossRound":14,"hiddenRound":15,"rounds":{"1":{"template":"act1autochess_01","bossTemplates":null,"combatTimeLimit":45,"levelMaxPlayTime":45,"prepTime":65,"prepTimeData":65,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"2":{"template":"act1autochess_02","bossTemplates":null,"combatTimeLimit":45,"levelMaxPlayTime":45,"prepTime":65,"prepTimeData":65,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"3":{"template":"act1autochess_03","bossTemplates":null,"combatTimeLimit":55,"levelMaxPlayTime":55,"prepTime":65,"prepTimeData":65,"isSpPrepare":true,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"4":{"template":"act1autochess_04","bossTemplates":null,"combatTimeLimit":55,"levelMaxPlayTime":55,"prepTime":95,"prepTimeData":95,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"5":{"template":"act1autochess_05","bossTemplates":null,"combatTimeLimit":55,"levelMaxPlayTime":55,"prepTime":95,"prepTimeData":95,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"6":{"template":"act1autochess_06","bossTemplates":null,"combatTimeLimit":70,"levelMaxPlayTime":70,"prepTime":100,"prepTimeData":100,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"7":{"template":"act1autochess_07","bossTemplates":null,"combatTimeLimit":85,"levelMaxPlayTime":85,"prepTime":105,"prepTimeData":105,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"8":{"template":"act1autochess_h01","bossTemplates":null,"combatTimeLimit":85,"levelMaxPlayTime":85,"prepTime":105,"prepTimeData":105,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"9":{"template":"act1autochess_h02","bossTemplates":null,"combatTimeLimit":95,"levelMaxPlayTime":95,"prepTime":125,"prepTimeData":125,"isSpPrepare":true,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"10":{"template":"act1autochess_h03","bossTemplates":null,"combatTimeLimit":95,"levelMaxPlayTime":95,"prepTime":125,"prepTimeData":125,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"11":{"template":"act1autochess_h04","bossTemplates":null,"combatTimeLimit":115,"levelMaxPlayTime":115,"prepTime":125,"prepTimeData":125,"isSpPrepare":true,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"12":{"template":"act1autochess_h05","bossTemplates":null,"combatTimeLimit":115,"levelMaxPlayTime":115,"prepTime":125,"prepTimeData":125,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"13":{"template":"act1autochess_h06","bossTemplates":null,"combatTimeLimit":115,"levelMaxPlayTime":115,"prepTime":150,"prepTimeData":150,"isSpPrepare":false,"isBoss":false,"isHidden":false,"bossOvertimeAfter":null},"14":{"template":null,"bossTemplates":{"boss_1":"act1autochess_h07_01","boss_2":"act1autochess_h07_02","boss_3":"act1autochess_h07_03","boss_4":"act1autochess_h07_04","boss_5":"act2autochess_h07_05","boss_6":"act1autochess_h07_06","boss_7":"act1autochess_h07_07"},"combatTimeLimit":null,"levelMaxPlayTime":120,"prepTime":195,"prepTimeData":195,"isSpPrepare":false,"isBoss":true,"isHidden":false,"bossOvertimeAfter":150},"15":{"template":null,"bossTemplates":{"boss_8":"act1autochess_h08_01","boss_9":"act1autochess_h08_02","boss_10":"act1autochess_h08_03"},"combatTimeLimit":null,"levelMaxPlayTime":120,"prepTime":215,"prepTimeData":215,"isSpPrepare":false,"isBoss":true,"isHidden":true,"bossOvertimeAfter":150}},"spRounds":[3,9,11],"combatTimeLimit":{"1":45,"2":45,"3":55,"4":55,"5":55,"6":70,"7":85,"8":85,"9":95,"10":95,"11":115,"12":115,"13":115,"14":null,"15":null},"enemyScale":{"1":{"atk":1.1,"hp":1.2,"speed":1,"kAtk":1,"kHp":1},"2":{"atk":1.21,"hp":1.44,"speed":1,"kAtk":2,"kHp":2},"3":{"atk":1.21,"hp":1.44,"speed":1.15,"kAtk":2,"kHp":2},"4":{"atk":1.331,"hp":1.728,"speed":1.15,"kAtk":3,"kHp":3},"5":{"atk":1.331,"hp":2.0736,"speed":1.15,"kAtk":3,"kHp":4},"6":{"atk":1.4641,"hp":2.239488,"speed":1.15,"kAtk":4,"kHp":4},"7":{"atk":1.61051,"hp":3.583181,"speed":1.15,"kAtk":5,"kHp":7},"8":{"atk":1.61051,"hp":4.299817,"speed":1.15,"kAtk":5,"kHp":8},"9":{"atk":1.61051,"hp":4.299817,"speed":1.15,"kAtk":5,"kHp":8},"10":{"atk":1.61051,"hp":4.299817,"speed":1.15,"kAtk":5,"kHp":8},"11":{"atk":1.771561,"hp":5.15978,"speed":1.15,"kAtk":6,"kHp":9},"12":{"atk":1.771561,"hp":6.191736,"speed":1.15,"kAtk":6,"kHp":10},"13":{"atk":1.948717,"hp":6.687075,"speed":1.15,"kAtk":7,"kHp":10},"14":{"atk":2.143589,"hp":6.687075,"speed":1.15,"kAtk":8,"kHp":10},"15":{"atk":2.143589,"hp":6.687075,"speed":1.15,"kAtk":8,"kHp":10}},"bossHpScale":{"bloodPointKey":"bloodPointAbyss","unaffectedByEnemyScale":true},"upgradePrices":[5,8,11,12,13],"maxShopLevel":6,"shopSlots":{"1":{"chess":3,"item":1},"2":{"chess":4,"item":1},"3":{"chess":4,"item":1},"4":{"chess":5,"item":1},"5":{"chess":5,"item":1},"6":{"chess":5,"item":1}},"levelTagColors":{"1":"#434343","2":"#626654","3":"#445760","4":"#615B74","5":"#6C5E41","6":"#5d341e"},"stages":["act1autochess_m02","act1autochess_m03","act1autochess_m04","act2autochess_m01","act2autochess_m02","act2autochess_m03","act2autochess_m04"],"bossWeights":{"boss_1":6,"boss_2":6,"boss_3":6,"boss_4":5,"boss_5":10,"boss_6":5,"boss_7":5},"hiddenBossWeights":{"boss_8":50,"boss_9":40,"boss_10":40}}},"economy":{"income":[0,4,5,6,7,8,9,10,11,12,12,12,12,12,12,12],"incomeFormula":"min(3 + round, 12)","incomeCap":12,"incomeCapAlternative":10,"incomeAssumedAfterRound":3,"leftoverFundsLost":true,"leftoverFundsKeptByBands":["band_cannot"],"chessPrice":{"1":{"normal":2,"golden":2},"2":{"normal":3,"golden":3},"3":{"normal":3,"golden":3},"4":{"normal":3,"golden":3},"5":{"normal":4,"golden":4},"6":{"normal":4,"golden":4}},"chessSell":{"1":{"normal":1,"golden":1},"2":{"normal":1,"golden":1},"3":{"normal":1,"golden":1},"4":{"normal":1,"golden":1},"5":{"normal":1,"golden":1},"6":{"normal":1,"golden":1}},"chessStatus":{"1":{"normal":{"phase":1,"level":55,"skillLevel":4,"equipLevel":0,"eliteIconId":"char_elite_base_1"},"golden":{"phase":2,"level":50,"skillLevel":7,"equipLevel":1,"eliteIconId":"char_elite_gold_2"}},"2":{"normal":{"phase":1,"level":60,"skillLevel":4,"equipLevel":0,"eliteIconId":"char_elite_base_1"},"golden":{"phase":2,"level":55,"skillLevel":7,"equipLevel":1,"eliteIconId":"char_elite_gold_2"}},"3":{"normal":{"phase":2,"level":1,"skillLevel":4,"equipLevel":0,"eliteIconId":"char_elite_base_2"},"golden":{"phase":2,"level":60,"skillLevel":7,"equipLevel":1,"eliteIconId":"char_elite_gold_2"}},"4":{"normal":{"phase":2,"level":1,"skillLevel":4,"equipLevel":0,"eliteIconId":"char_elite_base_2"},"golden":{"phase":2,"level":60,"skillLevel":7,"equipLevel":1,"eliteIconId":"char_elite_gold_2"}},"5":{"normal":{"phase":2,"level":1,"skillLevel":4,"equipLevel":0,"eliteIconId":"char_elite_base_2"},"golden":{"phase":2,"level":60,"skillLevel":7,"equipLevel":1,"eliteIconId":"char_elite_gold_2"}},"6":{"normal":{"phase":2,"level":1,"skillLevel":4,"equipLevel":0,"eliteIconId":"char_elite_base_2"},"golden":{"phase":2,"level":60,"skillLevel":7,"equipLevel":3,"eliteIconId":"char_elite_gold_2"}}},"refreshPrice":1,"freeze":{"scope":"allUnsoldSlots","price":0,"consumedAtRoundStart":true,"refreshWhileFrozenRerollsAll":true,"rewardOfferFreezable":false},"shopClearedAtCombatStart":"unfrozenSlots","itemSellable":false,"itemDestroyRefund":0,"benchSize":10,"tempSize":5,"deployCap":8,"storeCntMax":6,"equipPerChess":2,"maxArtsPerRound":2,"poolCopies":{"1":12,"2":14,"3":18,"4":16,"5":8,"6":5},"poolCopiesOverrides":{"chess_char_6_11_a":4},"goldenCopies":3,"mergeCount":3,"mergeCountOverrides":{"chess_char_2_11_a":2},"itemMergeCount":2,"rewardOffer":{"count":3,"tierOffset":1,"maxTier":6,"price":0,"refreshable":false,"freezable":false,"expiresAtRoundEnd":true},"handFillOrder":"rightToLeft","shopOdds":{"model":"copyWeighted","note":"each slot draws 1 copy uniformly from remaining pool copies of unbanned visible chess with tier <= shop level; items: same tier shares, then uniform within tier [ASSUMED]"},"borrowCount":20,"fallbackBondId":"emptyShip","defaultBandId":"band_bldsk","defaultStartLp":28},"lpCapPerRound":10,"bossOvertimeAfter":150,"bossOvertimeDrainPerSec":1,"bossHpScale":{"formula":"one pool for every boss field (\"所有人将一起对敌方领袖造成伤害\"; the mirrored copies of a pair field share it, \"两侧的敌方领袖共享生命值(敌方领袖的总生命值不变)\") = bloodPoint[difficulty] × share. perPlayer true (the owner's decision of 2026-10-06, PR #209): co-op share = coop × the players alive when the fight starts (bots and AI 托管 seats count, eliminated and departed seats do not), at most aliveFull; solo share = solo (1). perPlayer false (the fixed pool of 0.1.x, 「保持固定血量」): co-op share = coop whatever the count (× alive / aliveFull with aliveScaling, the alive / 4 proportion [ASSUMED]: 巴哈姆特 12294); solo was 0.25 [ASSUMED]","perPlayer":true,"coop":1,"solo":1,"aliveFull":4,"aliveScaling":false,"aliveAssumed":true,"unaffectedByEnemyScale":true},"hiddenCore":{"single":350,"multi":1200,"minTeamLpExclusive":1,"difficulties":["NORMAL","HARD","ABYSS"],"checkedAfterRound":14},"dp":{"init":10,"perSec":1,"max":99},"unite":{"maxHelpers":2,"helperOrder":"unitsOnField>activeBond>undownedUnits; pair: unitsOnField>activeBond>activeLayers>undownedUnits, first = right field (PRTS 帮助)","layerGainsEnabled":false,"keepsHpSpPositions":true,"leakedEnemyFullHp":true,"templates":{"1":"act1autochess_escaped_single","2":"act1autochess_escaped_multi"}},"finalAssault":{"pairing":"seatOrderPairs","oddPlayerAlone":true,"movableBossPerAlivePlayerSide":true,"layerGainsEnabled":false},"timers":{"infoCheck":25,"infoCheckHint":5,"bandDraft":50,"bandDraftHint":15,"bandTurn":30,"battleCheck":3,"spFirst":30,"spTurn":16,"soloPrepTimeData":300,"soloSpTimeData":150,"chatCd":1,"chatBubble":3,"broadcastDelay":1,"enterSteps":[{"step":"INFO_CHECK","time":25,"hint":5,"title":"确认本局信息"},{"step":"BAND_CHECK","time":50,"hint":15,"title":"选择策略"},{"step":"BATTLE_CHECK","time":3,"hint":0,"title":"协议启动"}]},"bans":{"FUNNY":{"core":0,"addon":1},"NORMAL":{"core":3,"addon":4},"HARD":{"core":3,"addon":4},"ABYSS":{"core":3,"addon":4},"TRAINING":{"core":0,"addon":0},"rule":"banned iff every bond of a visible non-DIY chess is in (drawn set D ∪ mode.inactiveBondIds); core = isCore bonds, addon = other bonds with weight > 0; uniform draw"},"bandDraft":{"skipsPerPlayer":1,"order":"random","duplicatesAllowed":true,"timeoutBandId":"band_bldsk"},"titles":[{"id":"comment_1","picId":"comment_icon_1","name":"卫戍之星","stat":"bossDamage","rule":"max","onlyOnWin":true,"text":"对敌方领袖造成伤害最高(仅胜利时)"},{"id":"comment_2","picId":"comment_icon_2","name":"不朽盟约","stat":"activatedLayers","rule":"max","text":"激活的盟约层数总和最高"},{"id":"comment_3","picId":"comment_icon_3","name":"坚若磐石","stat":"lpRemaining","rule":"max","text":"目标生命值损失最少"},{"id":"comment_4","picId":"comment_icon_4","name":"精英云集","stat":"merges","rule":"max","text":"晋升精锐次数最多"},{"id":"comment_5","picId":"comment_icon_5","name":"万事俱备","stat":"itemsEquipped","rule":"max","text":"装备配发数量最多"},{"id":"comment_6","picId":"comment_icon_6","name":"挥金如土","stat":"fundsSpent","rule":"max","text":"消耗资金最多"}],"titleRule":"each player gets at most one title; each title is used at most once per match; assign by the category where the player ranks best relative to teammates [ASSUMED]","tips":[{"tip":"只有在联合模拟中才能获得奖杯","weight":50},{"tip":"联合模拟在选择策略时可以进行一次跳过","weight":50},{"tip":"归属于特定盟约的干员只有部分会出现在调度中心内","weight":50},{"tip":"调度中心即使冻结,依然可以主动刷新","weight":50},{"tip":"晋级的特殊奖励无法被刷新、冻结,也不会保留至下一回合","weight":50},{"tip":"处于临时整备区的调度资源,在进入下一回合后会自动销毁","weight":50},{"tip":"一些特殊的盟约不需要部署干员也能激活生效","weight":50},{"tip":"干员晋级后已配发装备会回收至整备区,需要重新配置","weight":50},{"tip":"两件同名装备可以合成一件更强力的装备","weight":50},{"tip":"特定的装备组合可以为干员赋予额外的盟约效果","weight":50},{"tip":"叠加的盟约会在单次模拟中始终保留,但只有在盟约被激活时才会发挥作用","weight":50},{"tip":"多数情况下只有已经激活的盟约才可进行叠加","weight":50},{"tip":"休整期可以查看队友的战场情况","weight":50},{"tip":"休整期可以查看当前回合即将迎击的敌方单位","weight":50},{"tip":"拖拽干员至整备区可以直接撤退干员","weight":50},{"tip":"全体参与者就绪之前可随时取消准备,准备战斗后将无法进行操作","weight":50},{"tip":"只有达成完美作战的队友可以进行联防","weight":50},{"tip":"进行联防时,盟约不会继续叠加","weight":50},{"tip":"最终攻势中,两名参与者会处于同一个战场,但无法查看另一组队友的战场情况","weight":50},{"tip":"最终攻势中,所有人将一起对敌方领袖造成伤害","weight":50},{"tip":"达成特定的条件,可在最终攻势后解锁隐秘核心","weight":50}],"broadcasts":[{"id":"comment_boss_hit_1","type":"BOSS_HIT","priority":30,"text":"{0}博士对敌方领袖造成的伤害超过20%!","textRaw":"<@ba.vup>{0}博士对敌方领袖造成的伤害超过20%!","params":["0.2"]},{"id":"comment_boss_hit_2","type":"BOSS_HIT","priority":30,"text":"{0}博士对敌方领袖造成的伤害超过50%!","textRaw":"<@ba.vup>{0}博士对敌方领袖造成的伤害超过50%!","params":["0.5"]},{"id":"comment_boss_hit_3","type":"BOSS_HIT","priority":30,"text":"{0}博士对敌方领袖造成的伤害超过80%!","textRaw":"<@ba.vup>{0}博士对敌方领袖造成的伤害超过80%!","params":["0.8"]},{"id":"comment_char_damage_1","type":"CHAR_DAMAGE","priority":20,"text":"{0}博士的{1}干员造成的伤害量达到{2}","textRaw":"<@ba.vup>{0}博士的{1}干员造成的伤害量达到{2}","params":["200000"]},{"id":"comment_char_damage_2","type":"CHAR_DAMAGE","priority":20,"text":"{0}博士的{1}干员造成的伤害量达到{2}","textRaw":"<@ba.vup>{0}博士的{1}干员造成的伤害量达到{2}","params":["500000"]},{"id":"comment_char_damage_3","type":"CHAR_DAMAGE","priority":20,"text":"{0}博士的{1}干员造成的伤害量达到{2}","textRaw":"<@ba.vup>{0}博士的{1}干员造成的伤害量达到{2}","params":["1000000"]},{"id":"comment_shop_level_1","type":"SHOP_LEVEL","priority":11,"text":"{0}博士将调度中心等级提升为{1}级","textRaw":"<@ba.vup>{0}博士将调度中心等级提升为{1}级","params":["2"]},{"id":"comment_shop_level_2","type":"SHOP_LEVEL","priority":11,"text":"{0}博士将调度中心等级提升为{1}级","textRaw":"<@ba.vup>{0}博士将调度中心等级提升为{1}级","params":["3"]},{"id":"comment_shop_level_3","type":"SHOP_LEVEL","priority":11,"text":"{0}博士将调度中心等级提升为{1}级","textRaw":"<@ba.vup>{0}博士将调度中心等级提升为{1}级","params":["4"]},{"id":"comment_shop_level_4","type":"SHOP_LEVEL","priority":11,"text":"{0}博士将调度中心等级提升为{1}级","textRaw":"<@ba.vup>{0}博士将调度中心等级提升为{1}级","params":["5"]},{"id":"comment_shop_level_5","type":"SHOP_LEVEL","priority":11,"text":"{0}博士将调度中心等级提升为{1}级","textRaw":"<@ba.vup>{0}博士将调度中心等级提升为{1}级","params":["6"]},{"id":"comment_bond_effect","type":"BOND_EFFECT","priority":10,"text":"叠加层数","textRaw":"叠加层数","params":[]},{"id":"comment_golden_char","type":"GOLDEN_CHAR","priority":2,"text":"{0}博士的{1}干员晋升为精锐","textRaw":"<@ba.vup>{0}博士的{1}干员晋升为精锐","params":[]},{"id":"comment_char_gift","type":"CHAR_GIFT","priority":1,"text":"{0}博士给你赠送了{1}","textRaw":"<@ba.vup>{0}博士给你赠送了{1}","params":[]}],"trophies":{"byRoundsPassed":[{"maxRound":4,"FUNNY":0,"NORMAL":0,"HARD":0,"ABYSS":0},{"maxRound":8,"FUNNY":1,"NORMAL":1,"HARD":1,"ABYSS":1},{"maxRound":11,"FUNNY":2,"NORMAL":2,"HARD":2,"ABYSS":2},{"maxRound":13,"FUNNY":2,"NORMAL":3,"HARD":3,"ABYSS":3},{"maxRound":14,"FUNNY":3,"NORMAL":4,"HARD":5,"ABYSS":6}],"hiddenCore":{"FUNNY":null,"NORMAL":5,"HARD":7,"ABYSS":8},"multiOnly":true,"source":"research 01-core-data trophiesPerClear","medals":[{"count":0,"iconId":"trophy_level1_icon"},{"count":10,"iconId":"trophy_level2_icon"},{"count":30,"iconId":"trophy_level3_icon"},{"count":60,"iconId":"trophy_level4_icon"},{"count":100,"iconId":"trophy_level5_icon"}]},"roundScores":[{"round":0,"score":0},{"round":1,"score":10},{"round":2,"score":20},{"round":3,"score":30},{"round":4,"score":50},{"round":5,"score":70},{"round":6,"score":90},{"round":7,"score":110},{"round":8,"score":130},{"round":9,"score":150},{"round":10,"score":170},{"round":11,"score":200},{"round":12,"score":230},{"round":13,"score":260},{"round":14,"score":300}],"rewards":{"itemId":"act2autochess_token_chess","baseByRoundsPassed":[{"round":1,"count":10,"dailyPoint":10},{"round":2,"count":20,"dailyPoint":20},{"round":3,"count":30,"dailyPoint":30},{"round":4,"count":40,"dailyPoint":40},{"round":5,"count":50,"dailyPoint":50},{"round":6,"count":60,"dailyPoint":60},{"round":7,"count":70,"dailyPoint":70},{"round":8,"count":80,"dailyPoint":80},{"round":9,"count":90,"dailyPoint":90},{"round":10,"count":100,"dailyPoint":100},{"round":11,"count":120,"dailyPoint":120},{"round":12,"count":140,"dailyPoint":140},{"round":13,"count":160,"dailyPoint":160},{"round":14,"count":200,"dailyPoint":200}],"formula":"baseByRoundsPassed[roundsPassed].count * difficultyFactor[difficulty] * modeFactor[type]","difficultyFactor":{"FUNNY":1,"NORMAL":1.6,"HARD":1.7,"ABYSS":1.7},"modeFactor":{"SINGLE":1.25,"MULTI":1.25}},"constants":{"maxLevelCnt":15,"bossTrailerStartRound":3,"singleReconnectTime":86400,"trainingModeId":"mode_training_1","discountColor":"#59f4ca","premiumColor":"#ff5454","normalColor":"#ffc600","pingConds":[{"minMs":1,"textRaw":"<@ping.low>{0}ms"},{"minMs":60,"textRaw":"<@ping.medium>{0}ms"},{"minMs":200,"textRaw":"<@ping.high>{0}ms"}]}} \ No newline at end of file diff --git a/docs/BALANCE.md b/docs/BALANCE.md index 316498b4..8119010a 100644 --- a/docs/BALANCE.md +++ b/docs/BALANCE.md @@ -13,9 +13,11 @@ kinds / counts and routes must follow the official game; research 08 §6–§7, `k` copies, no kept fly placeholders; verified against all 429 official entry × round compositions and the official count distribution (同盟 险境 R3 ≤ 10 enemies, R13 ≈ 37 — the old generator averaged 28 / 81); * stats = the PRTS per-round `enemyScale` table only (`data/config.json`, 终极 ×1.15 speed from R3); -* leader pool = `bloodPoint[difficulty]` in co-op — one pool for every boss field, whatever the number of alive players - (config `bossHpScale.aliveScaling` would make it × alive / 4; off — the user chose the fixed pool, DESIGN §20.10); solo keeps ×0.25, - flagged [ASSUMED] in data; +* leader pool = `bloodPoint[difficulty]` × the players alive when the fight starts — one pool for every boss field; solo + × 1 (the owner's decision of 2026-10-06, adopting PR #209: it replaces the fixed pool of DESIGN §20.10, co-op + bloodPoint whatever the count and solo × 0.25 [ASSUMED] — config `bossHpScale.perPlayer: false`, `solo: 0.25` restores + it; DESIGN §25.13.4). The bots' solo matches got 4× the leader HP: in the golden corpus 4 of the 6 solo matches that + reached and won the Final Assault now lose it (team LP 0 with 93k–176k of the pool left); * leader parts and drones (DESIGN §20.10): a 剑 / 锤 / 碎铳之簧 passes every damage it takes to its leader 1:1 (PRTS "等量的 无来源生命流失"; until 2026-10-01 half, and a 剑 / 锤 only while grounded — the dive hits [ASSUMED], the handbook says "被击落时"); a 胄 drone that dies (whoever kills it, DESIGN §20.13) costs 2 % of the leader's shown max HP = the pool (unchanged from v2.5; which "最大生命值" the @@ -68,7 +70,7 @@ and runs the real `Battle` with full content (kits, talents, bonds with layers, IN_BATTLE 特质, equipment, bands, summons). Co-op rounds field **4 boards** against the same wave and then run **联防** exactly like the match (`unite.js`: ≤ 2 perfect helpers, only the survivors cost their source LP). Boss rounds build the Final Assault fields exactly like `Match.startFinalAssault` -(pairs / `_s` for a lone player, shared pool `GameData.bossPoolHp` = `bloodPoint` (solo ×0.25), merged team LP of 15 per player, leaks' `lpr`, +(pairs / `_s` for a lone player, shared pool `GameData.bossPoolHp` = `bloodPoint` × the players alive (solo × 1, §25.13.4), merged team LP of 15 per player, leaks' `lpr`, −1 LP/s after 150 s) and record the pool damage by 150 s, the kill time and the win rate. Metrics: **capped leaks** = min(leaks, 10) per board and round (what that board alone would lose; the targets below @@ -199,8 +201,8 @@ earlier commit (a current run differs for every leader) and were not refreshed h Reading: the early game is easy everywhere (official R1–R3 bring 3–10 enemies); leaks concentrate on the second-half specials (深池逐火 TIMES embers, stealth 隐形弩手组长 / 重弩突袭者, 疯狂的逐腐兽, 掠海漂移体) and 终极 R6–R11, where co-op -boards still leak 3–6 and 联防 halves the LP cost. Solo leaders (bloodPoint × 0.25 [ASSUMED]) are the hard part of the -solo modes; the solo pool factor is the one open number here (research 08 §8 #2). +boards still leak 3–6 and 联防 halves the LP cost. Solo leaders (bloodPoint × 0.25 [ASSUMED] when these tables were +measured; × 1 since the owner's decision of 2026-10-06, §25.13.4) are the hard part of the solo modes. Reproduce: `node tools/balance.mjs --mode all --difficulty ALL --tuning off [--bots 5] [--json]`. @@ -422,6 +424,8 @@ on a leader is cancelled (`MAX_BATTLE_DAMAGE`: 0 damage, nothing to the pool — `--profile` above ≈ 4.9 would have pushed the 170-layer R15 core curve, +20 % jitter, past 999) and `matchrun.mjs --layers N` adds at most the room left under 999, so `--check` stays clean on a boosted run. - **Pool size and the line**: a drone that dies (whoever kills it, DESIGN §20.13) costs 假想敌:胄 0.02 × the pool - max (【死亡集群】, boss_1 / boss_8; `bosses.js DRONE_LINK_BASE 'pool'`). Today that is at most 144000 (boss_8 ABYSS 7.2M) and lands; a pool above 14999950 would make every - drone kill a cancelled hit. Re-check this whenever the pool size changes (research 11 §6). + max (【死亡集群】, boss_1 / boss_8; `bosses.js DRONE_LINK_BASE 'pool'`). With the pool per player alive (§25.13.4) the + hidden 胄 终极 pool is 21.6M / 28.8M at 3 / 4 players, so a drone is 432000 / 576000 — above the line; the link is a + share, no hit, and passes it (`Battle.loseHp noHitLimit` [ASSUMED]: research 11 §2.1 checks every damage modifier, but + which max HP the official link reads is not documented). Re-check this whenever the pool size changes (research 11 §6). diff --git a/docs/DATA.md b/docs/DATA.md index 8310c8b8..a66e7ef2 100644 --- a/docs/DATA.md +++ b/docs/DATA.md @@ -71,7 +71,7 @@ Top level: `{ season, seasonName, modes, economy, lpCapPerRound, bossOvertimeAft | `spRounds` | `[3,9,11]` | rounds whose prep opens with a 机变 draft | | `combatTimeLimit[r]` | `{"1":45,…,"14":null}` | = `rounds[r].combatTimeLimit`: **real** seconds of the forced-2× battle (DESIGN §4) | | `enemyScale[r]` | `{"atk":1.1,"hp":1.2,"speed":1,"kAtk":1,"kHp":1}` | non-boss enemy multipliers (research 01 A3): `atk = atkBase·1.1^kAtk`, `hp = hpBase·1.2^kHp·extra`, `speed` 1.15 on ABYSS from R3. Apply to level-0 stats after special-enemy replacement, also to bounty/special enemies. **Leader HP pools excluded.** | -| `bossHpScale` | multi `{"bloodPointKey":"bloodPointAbyss","coop":1,"aliveScaling":false,"aliveFull":4,"aliveAssumed":true,…}` · solo `{"bloodPointKey":"bloodPoint","solo":0.25,"soloAssumed":true,…}` | one pool for every boss field: co-op = `bosses[id].bloodPoint[difficulty]` whatever the number of alive players; `aliveScaling: true` would scale it × alive / `aliveFull` (巴哈姆特 12294 "隊友變少,最後boss血條也會變少" — one community note, no proportion: off until confirmed, the proportion [ASSUMED, flagged `aliveAssumed`]); solo = × `solo` [ASSUMED, flagged]. `GameData.bossPoolHp(bossId, aliveCount)` / `bossPoolShare` implement it (DESIGN §20.10) | +| `bossHpScale` | `{"bloodPointKey":"bloodPointAbyss","unaffectedByEnemyScale":true}` | which `bloodPoint` column the mode reads; the pool rule's keys live in the global `bossHpScale` below — one set here would override it for this mode (`gamedata.js bossPoolShareOf`) | | `upgradePrices` | `[5,8,11,12,13]` | base price L1→2 … L5→6 (−1 per round start, floor 0, reset after upgrade) | | `maxShopLevel` | `6` | | | `shopSlots[level]` | `{"1":{"chess":3,"item":1},…}` | operator + item slots per shop level | @@ -119,7 +119,7 @@ Top level: `{ season, seasonName, modes, economy, lpCapPerRound, bossOvertimeAft |---|---|---| | `lpCapPerRound` | `10` | max LP lost per player per normal round | | `bossOvertimeAfter`, `bossOvertimeDrainPerSec` | `150`, `1` | official `bossTurnHpReduceTime`: from 150 **real** s of a boss round the merged team LP loses 1 per whole real second (`gamedata.js bossOvertimeDue`; first point at 151 s) | -| `bossHpScale` | `{"formula":"co-op: bloodPoint[difficulty] — one pool for every field …","coop":1,"solo":0.25,"soloAssumed":true,"aliveScaling":false,"aliveFull":4,"aliveAssumed":true,…}` | global form of the mode rule | +| `bossHpScale` | `{"formula":"one pool for every boss field …","perPlayer":true,"coop":1,"solo":1,"aliveFull":4,"aliveScaling":false,"aliveAssumed":true,…}` | the leader pool (one for every boss field) = `bosses[id].bloodPoint[difficulty]` × share: `perPlayer` true (the owner's decision of 2026-10-06, adopting PR #209 — it replaces the fixed pool of 「保持固定血量」) — co-op share = `coop` × the players alive when the fight starts (bots and AI 托管 seats count, eliminated and departed seats do not; at most `aliveFull`), solo share = `solo` (1). `perPlayer: false` with `solo: 0.25` restores the fixed pool of 0.1.x (co-op × `coop` whatever the count; `aliveScaling: true` would make it × alive / `aliveFull`, the proportion [ASSUMED, flagged `aliveAssumed`]). `GameData.bossPoolHp(bossId, aliveCount)` / `bossPoolShare` implement it (DESIGN §20.10, §25.13.4) | | `hiddenCore` | `{"single":350,"multi":1200,"minTeamLpExclusive":1,"difficulties":["NORMAL","HARD","ABYSS"],"checkedAfterRound":14}` | Σ activated layers must be **>** threshold and LP **>** 1 | | `dp` | `{"init":10,"perSec":1,"max":99}` | | | `unite` | `{"maxHelpers":2,"helperOrder":"unitsOnField>activeBond>undownedUnits; pair: unitsOnField>activeBond>activeLayers>undownedUnits, first = right field (PRTS 帮助)","layerGainsEnabled":false,"templates":{"1":"act1autochess_escaped_single","2":"act1autochess_escaped_multi"},…}` | 联防; `helperOrder` documents the rule `server/match/unite.js helperOrder` implements (research 08 §5; ties → seat) | @@ -538,11 +538,12 @@ Glyph legend (`rows`): 15. 炎佑 name in the enemy DB is `"炎佑"` with literal ASCII quotes. 16. Research-only fields (null without `docs/research`): stage `name`, item `category/kind/family/implFormula/ requiresBondId/rangeGrid/flavor`, bond `spec`, E2 art availability (falls back to "char has an E2 phase"). -17. [ASSUMED] content (flagged in data): 机变 family schedule and server pools, the solo leader pool factor - (`bossHpScale.solo` 0.25), title criteria, income cap 12, per-turn band-draft timer 30 s (`timers.bandTurn`, the - step's only countdown — user playtest #4), the shop-only item list (`SHOP_EXCLUDED_ITEMS`, from play), the alive / 4 - proportion of the optional co-op alive scaling (`bossHpScale.aliveAssumed`; `aliveScaling` off). The special-enemy - generator, the co-op leader pool (`bloodPoint`, one pool for every field) and the 联防 timing are official. +17. [ASSUMED] content (flagged in data): 机变 family schedule and server pools, title criteria, income cap 12, per-turn + band-draft timer 30 s (`timers.bandTurn`, the step's only countdown — user playtest #4), the shop-only item list + (`SHOP_EXCLUDED_ITEMS`, from play), the alive / 4 proportion of the fixed pool's optional alive scaling + (`bossHpScale.aliveAssumed`; `aliveScaling` off). The special-enemy generator, the leader table (`bloodPoint`, one + pool for every field) and the 联防 timing are official; the pool's × players alive is the owner's decision of + 2026-10-06 (PR #209: players' observation, no official text). 18. **Module parts flagged `isToken`** (伺夜, 浊心斯卡蒂, 缪尔赛思, 耀骑士临光 golden) upgrade the summon only; they are applied to `tokens.json` variants, never to the operator's talents/trait. 19. **Undefined enemy-database fields** (`m_defined:false`): a zero `m_value` means "never set" and falls back to the diff --git a/docs/META.md b/docs/META.md index d29c06fd..2aa2e67d 100644 --- a/docs/META.md +++ b/docs/META.md @@ -183,8 +183,8 @@ A `choice:` registry handler overrides the default application (§2.4) * `g.autoplay { on }` ("AI 托管"): the bot plays the seat (drafts, buying, placement, ready) until turned off. * `onLeave` (quit / reconnect window expired): 中途退出 counts as elimination (research 00-INDEX §3, 01 §9, 06 §7 / §10.3): every copy the seat holds returns to the shared pool at once; the seat leaves the round loop and the Final - Assault pairing (re-planned when it quits before the boss fight; the boss pool stays bloodPoint — it would shrink to - × alive / 4 only with config `bossHpScale.aliveScaling`, off — the user chose the fixed pool, DESIGN §20.10); its + Assault pairing (re-planned when it quits before the boss fight) and the boss pool (bloodPoint per player alive when + the fight starts — a departed seat no longer counts, DESIGN §25.13.4); its running normal battle is force-ended; a pending band pick becomes the default band and a 机变 turn passes on. Status `left`, LP 0, rounds passed = the rounds it had survived. When no human is left at all the match ends immediately (`reason: 'abandoned'`); when only eliminated spectators are @@ -626,13 +626,14 @@ Any `choice:` handler whose EffectRef reuses its own key must guard like this (o (own phase perfect) go to pending funds; bounty rounds decrement; LP ≤ 0 ⇒ eliminated (all copies back to the pool). * **Final Assault / Hidden Core**: finalAssault.js header. Boards are passed in board coordinates; the sim maps board rows 9–12 onto boss rows 2–5 (`BOSS_ROW_OFFSET` −7, matching every stage's boss rows) and mirrors the right side. - Pool (`finalAssault.js bossPoolHp` → `GameData.bossPoolShare`, DESIGN §20.10): one pool shared by every boss field - (official tip "最终攻势中,所有人将一起对敌方领袖造成伤害"); co-op = `bloodPoint[difficulty]` whatever the number of alive - players (notice 5114's "敌方领袖的总生命值不变" is about the mirrored copies of a pair field sharing the pool, not about that - number); `bossHpScale.aliveScaling` true (default false) would scale it × alive / `aliveFull` (4) — 巴哈姆特 12294 - "聯機隊友(撤退/死掉)變少,最後boss血條也會變少" is one community note without a proportion, kept off until the user confirms - it (it would shorten the fight after eliminations, the opposite of the playtest report); solo = × - `bossHpScale.solo` (0.25 = one player of four [ASSUMED]); leaders are never scaled by `enemyScale`. The merged team LP loses leaks (`lpr`), the overtime drain + Pool (`finalAssault.js bossPoolHp` → `GameData.bossPoolShare` → `gamedata.js bossPoolShareOf`, DESIGN §20.10, + §25.13.4): one pool shared by every boss field (official tip "最终攻势中,所有人将一起对敌方领袖造成伤害"; notice 5114's + "敌方领袖的总生命值不变" is about the mirrored copies of a pair field sharing it) = `bloodPoint[difficulty]` × the players + alive when the fight starts (bots and AI 托管 seats count, eliminated and departed seats do not; solo × 1) — the owner's + decision of 2026-10-06, adopting PR #209 by @qingjingshenghuo (players' observation: bloodPoint is one player's share), + which replaces the fixed pool of 「保持固定血量」 (config `bossHpScale.perPlayer: false` with `solo: 0.25` restores it; + its optional × alive / 4, `aliveScaling`, stays off); leaders are never scaled by `enemyScale`, their parts and escorts + keep their own HP. The merged team LP loses leaks (`lpr`), the overtime drain (`bossTurnHpReduceTime` 150 counts REAL seconds, like the boss level's 120 s maxPlayTime that runs out first — the battle goes on — so 1 LP per real second from 150 real s = 300 game s on the 2× field clock; `gd.bossOvertimeDue`) and leader "扣除目标生命" effects (the sim's `lpLoss` hook: boss_7 Doom, 斥退 …); after every change it is written back @@ -659,13 +660,15 @@ Any `choice:` handler whose EffectRef reuses its own key must guard like this (o **限伤** (research 11 §2; client `AutoChessStepModeManager._OnBossEnemyTakeDamage`): in both boss rounds a single hit on a leader with ceil(damage) ≥ `BOSS_HIT_LIMIT` = 300000 (shared/constants.js; 0 / Infinity = off) is cancelled in the sim (`sim/damage.js leaderHitCancelled`, SIM.md §4) — it deals 0 and nothing reaches the shared pool, the per-player - boss damage or the BOSS_HIT tickers; minions, parts, normal rounds and 联防 are unaffected. The server's own runs, the - browsers' runs and the server's verification share the rule, so digests agree. + boss damage or the BOSS_HIT tickers; minions, parts, normal rounds and 联防 are unaffected. 胄's drone link (2 % of the + pool when a drone dies) is a share, no hit, and passes the limit (`Battle.loseHp noHitLimit`; with the per-player pool + a hidden 胄 终极 drone is 432 000 / 576 000 at 3 / 4 players [ASSUMED], §25.13.4). The server's own runs, the browsers' + runs and the server's verification share the rule, so digests agree. ### 3.1 Balance layer (data/tuning.json) `data/config.json` is generated and stays research-faithful. There is **no custom balance** any more (DESIGN §14 -corrections, research 08 §6): enemy numbers are the official ones (the PRTS `enemyScale` table, leader pool = -`bloodPoint`). `data/tuning.json` (hand-maintained, loaded as `data.tuning`, layered on the config by gamedata.js only) +corrections, research 08 §6): enemy numbers are the official ones (the PRTS `enemyScale` table, the leader table +`bloodPoint` — × the players alive by the owner's decision of 2026-10-06, §25.13.4). `data/tuning.json` (hand-maintained, loaded as `data.tuning`, layered on the config by gamedata.js only) keeps just the result-title rules: ```jsonc diff --git a/docs/PLAYING.md b/docs/PLAYING.md index ecee9352..0ddddec2 100644 --- a/docs/PLAYING.md +++ b/docs/PLAYING.md @@ -116,10 +116,10 @@ ## 7. 最终攻势与隐秘核心 -- **最终攻势**(第 14 回合;独立标准为第 9 回合):按座位两两配对,每对共享一个战场,一人守左半边、一人守右半边(右侧玩家的棋盘左右镜像)。所有人**共同削减同一条领袖血条**(血量 = 该难度的官方领袖生命值,取自当前版本的游戏数据,例如终极「假想敌:胄」3 600 000,不论存活几人),看不到另一组的战场。全队 LP 合并成一个池,不再有每回合 10 点上限。顶部的 120 秒倒计时结束后战斗**继续**(不会超时判负);从开战第 150 秒起(实际秒数)全队每秒扣 1 点 LP。领袖血量归零即胜利(血条显示 0 时领袖已倒下,战斗立即结束),LP 归零即失败——以先归零的一方为准,LP 耗尽后打出的伤害不再计入。此阶段盟约不叠层。 -- **限伤**(最终攻势与隐秘核心,与官方相同):对领袖的**单次伤害达到 300000 或以上时整次作废**——这一下造成 0 点伤害,不计入领袖血条,也不显示伤害数字;不是截到 300000,而是一点都不算(299999 照常生效)。只针对领袖本体(含两人战场里的另一个领袖),领袖的部件、护卫、无人机和其他小怪不受影响,普通回合和联防也不受影响;部件把伤害等量转给领袖、无人机死亡令领袖失去 2% 生命时,这一下也按一次伤害检查(目前最多 14.4 万,不会触线)。层数极高时领袖仍可能几秒内倒下(例如每名玩家的两个盟约都在 999 层,或所有激活的盟约都在 999 层),这来自官方按层数计算、没有上限的伤害倍率(谢拉格、奥术、精准等),官方社区也有「boss一秒死」的说法。 +- **最终攻势**(第 14 回合;独立标准为第 9 回合):按座位两两配对,每对共享一个战场,一人守左半边、一人守右半边(右侧玩家的棋盘左右镜像)。所有人**共同削减同一条领袖血条**(血量 = 该难度的官方领袖生命值 × 开战时存活的玩家人数:领袖生命值取自当前版本的游戏数据,例如终极「假想敌:胄」3 600 000,4 人存活时为 14 400 000、2 人为 7 200 000;AI 队友和掉线托管的玩家都算,已被淘汰或中途退出的不算;独立模拟按 1 人计。这是作者 2026-10-06 采纳社区 PR #209 的决定,取代之前「保持固定血量」的做法),看不到另一组的战场。全队 LP 合并成一个池,不再有每回合 10 点上限。顶部的 120 秒倒计时结束后战斗**继续**(不会超时判负);从开战第 150 秒起(实际秒数)全队每秒扣 1 点 LP。领袖血量归零即胜利(血条显示 0 时领袖已倒下,战斗立即结束),LP 归零即失败——以先归零的一方为准,LP 耗尽后打出的伤害不再计入。此阶段盟约不叠层。 +- **限伤**(最终攻势与隐秘核心,与官方相同):对领袖的**单次伤害达到 300000 或以上时整次作废**——这一下造成 0 点伤害,不计入领袖血条,也不显示伤害数字;不是截到 300000,而是一点都不算(299999 照常生效)。只针对领袖本体(含两人战场里的另一个领袖),领袖的部件、护卫、无人机和其他小怪不受影响,普通回合和联防也不受影响;部件把伤害等量转给领袖时,这一下也按一次伤害检查;无人机死亡令领袖失去的 2% 血条不算一次伤害,不受限伤影响(隐秘核心终极「假想敌:胄」3 或 4 人存活时每架为 43.2 万 / 57.6 万,按限伤会整次作废,本作仍然计入,属推断)。层数极高时领袖仍可能几秒内倒下(例如每名玩家的两个盟约都在 999 层,或所有激活的盟约都在 999 层),这来自官方按层数计算、没有上限的伤害倍率(谢拉格、奥术、精准等),官方社区也有「boss一秒死」的说法。 - 最终攻势 / 隐秘核心的休整期按你在**关底战场上的半场**判定可部署地块(右侧玩家左右镜像),拖动时高亮的就是可放置的格子:例如「源石流发生装置」关底图中被 1×3 橙色管子围起的地块可以部署。在最终攻势放在这些格子上的干员进入隐秘核心时会留在原位。 -- **领袖的部件**:「假想敌:胄」的无人机死亡时(不论是谁击落;漏过去不算),胄失去领袖血条总量的 2%(例如终极 3 600 000 → 每架 72 000;官方没写明这个「最大生命值」指哪一个,本作按血条总量处理,属推断);隐秘核心的「斩胄之剑 / 破胄之锤」「碎铳之簧」受到的每一点伤害都会等量扣在领袖血条上(剑 / 锤被击落后一定算;俯冲途中挨的打也算,这一点官方两处文字不一致,属推断)。剑 / 锤平时悬浮在胄身边、无敌;掷出后闪现到固定路线,冲向攻击力最低的干员,途中被打中 15 次就会【瘫痪】(晕眩 10 秒、落地、受到的伤害 ×1.3);落地或瘫痪结束后,会以剩余生命值换成一把新的回到原位。「灭顶之灾」每次只发射 1 枚刺胄之弹(低于 20% 生命也一样),只打攻击范围内攻击力最高的干员。 +- **领袖的部件**:「假想敌:胄」的无人机死亡时(不论是谁击落;漏过去不算),胄失去领袖血条总量的 2%(例如终极 4 人存活 14 400 000 → 每架 288 000;官方没写明这个「最大生命值」指哪一个,本作按血条总量处理,属推断);隐秘核心的「斩胄之剑 / 破胄之锤」「碎铳之簧」受到的每一点伤害都会等量扣在领袖血条上(剑 / 锤被击落后一定算;俯冲途中挨的打也算,这一点官方两处文字不一致,属推断)。剑 / 锤平时悬浮在胄身边、无敌;掷出后闪现到固定路线,冲向攻击力最低的干员,途中被打中 15 次就会【瘫痪】(晕眩 10 秒、落地、受到的伤害 ×1.3);落地或瘫痪结束后,会以剩余生命值换成一把新的回到原位。「灭顶之灾」每次只发射 1 枚刺胄之弹(低于 20% 生命也一样),只打攻击范围内攻击力最高的干员。 - **巨型领袖**(假想敌:胄 / 管、盐风主教昆图斯、阿利斯泰尔、“萨米的意志”)的受击判定是一片约 5×3 格的区域(整个管道区块):攻击范围碰到其中任意一格就能打到它;它们**自缚、无法被阻挡**,不会离开原地。溅射按敌人的中心判定,打在旁边小怪身上的溅射碰不到巨型领袖。 - **隐秘核心**(第 15 回合,仅险境及以上):打倒领袖后,若全队激活的盟约层数总和 **> 1200**(独立 > 350)且 LP > 1,进入隐秘核心,挑战更强的领袖。失败不影响本局的通关。 diff --git a/docs/SIM.md b/docs/SIM.md index acd71c3e..7e4af3ae 100644 --- a/docs/SIM.md +++ b/docs/SIM.md @@ -742,7 +742,8 @@ partner's too: PRTS 备注 "全场范围内的所有敌人类我方单位也会 second however many carriers (PRTS 作战机制 "同名buff的默认叠加策略buff只能表现出一个"), while a carrier is on the field [ASSUMED]. 奥术法阵 has the same 备注 for its rider: while a carrier is on the field, every damage instance of such a unit silences its target for the item's 5 s ("造成伤害时使目标失去特殊能力5秒"; since 0.1.1). On a leader -in a boss / hidden battle a loss of ≥ `BOSS_HIT_LIMIT` (a part's 传递, a drone's death) is cancelled like a hit. Every HP-damage kind +in a boss / hidden battle a loss of ≥ `BOSS_HIT_LIMIT` (a part's 传递) is cancelled like a hit; 胄's drone link — 2 % of the +pool, a share that is no hit — passes it (`loseHp` `noHitLimit`, DESIGN §25.13.4 [ASSUMED]). Every HP-damage kind meets the limit (phys / arts / true / 元素伤害 incl. element bursts, DoT ticks); element 损伤 (the gauge, `type: 'element'`) removes no HP and never does. diff --git a/docs/design/engine.md b/docs/design/engine.md index c0492028..d663a7d0 100644 --- a/docs/design/engine.md +++ b/docs/design/engine.md @@ -123,7 +123,7 @@ Engine helpers (content must use these, never touch internals): `battle.dealDama - **Operator attacks**: every `interval` s if a valid target exists; targets = up to `maxTargets` (default 1) from `unitsInGrid(rangeGrid)` (a `rangeAoe` profile — 阵法术师, 轰击术师 — takes every selectable enemy in range, §21.18; 「同时攻击阻挡的所有敌人」 — 强攻手 / 重剑手 / 推击手 and the skills worded so, `hitAllBlocked` — up to the block count, never fewer than 1, since 0.2.0: PRTS 分支特性信息 "普通攻击最大目标数等于阻挡数(不会低于1)"), priority: (1) the enemies it blocks (every blocker, in range or not, §20.3), (2) profession/trait priorities (e.g. fly-first snipers, `trait` text parsed by build-data into `targetPriority`), (3) enemy with the **least remaining path distance** to its goal, ties → earliest spawned. Melee (no ranged trait) and ground-only attacks cannot hit air units (`Unit.isFlying`: FLY, or a 近地悬浮 / 浮空 enemy — PRTS "算作空中单位", §19.1). Stealthed enemies can't be targeted unless blocked or revealed — or within 3 s of a block's end (§22.8). Ranged ops fire projectiles (speed ~12 tiles/s, instant for melee/arts-beam classes as data indicates); damage applies on impact; a 锁定攻击范围 AoE (`rangeAoe`) strikes every selectable enemy on its range at once with instant hits (§21.18). - **Healers** (`dmgType heal`): target the ally in range with the lowest HP% below 100%, never a 禁疗 / 孤立 unit (tokens.json `abnormal`, `noHeal`; §20.3; 史尔特尔 during 余烬, §22.7), and never the enemies they block — also while blocking (§21.17); do nothing otherwise (SP still regenerates). - **Enemy AI**: follow the route (checkpoints; WALK paths recomputed on the grid when devices change); when blocked stop & fight (`dmgType 'none'` enemies never attack unless content arms them through `e.profile` — 转译基底's armed forms, §21.4); ranged enemies (`rangeRadius > 0`) attack ops whose 0.25 collider touches their radius (centre distance ≤ `rangeRadius` + 0.25, §3, §20.4): the enemy's own target rule filters the candidates first (`profile.canTarget`: 只攻击地面单位 …), then priority blocker → special priority → highest taunt → **latest deployed** (`aggroSeq`) — PRTS 索敌 "阻挡→特殊优先级→仇恨值→最早出现"; a stealthed ally is attacked only by the enemy it blocks (§19.1), and an enemy's area effects — splash, blasts, area skills, zones, jumps — and buff auras skip it unless it blocks that enemy, while 迷彩 does not protect from splash and the other area effects (`targeting.js areaSelectable` / `auraSelectable`, §22.12); an airborne (起飞) ally is never a ground enemy's selection — picks, area damage, zones and statuses skip it, while 无视无法选择 abilities, direct picks, debuff ticks and flying units still reach it (§21.22); unblocked, they stand for each attack's clip (enemies.json `attackAnim`: its wind-up before the strike and the rest of the clip after it, shortened when the attacks come quicker than the clip; `ATTACK_PAUSE = 0.35 s` after the strike when no clip is known; a 「不停止移动」 attacker never stops; §22.14). Every enemy attack strikes at its clip's damage frame after its swing starts — the first one of a contact too —, and a stun / freeze / sleep / 浮空, hiding, 缴械, 恐惧 or 战栗 (blocked) before that frame cuts the swing: no strike, the next swing starts from its wind-up (0.2.0, `ai.js attackWindup`; PRTS 状态机 / 异常效果 STUNNED; no clip known: no wind-up). FLY enemies ignore ground obstacles (only blockFly units block them) and follow their checkpoint route. A feared enemy runs between random 恐惧可达地块 away from the source (PRTS 诱发移动; `fear.js`); 恐惧 outranks 诱导; the 恐惧 / 诱导 walks re-plan from where the enemy stands after a push or an obstacle change, and the route re-plans when they end (§20.4). -- **Damage**: phys `max(A − max(0, D×(1−defIgnorePct) − defIgnoreFlat), 0.05·A)`; arts `max(A × (1 − R'/100), 0.05·A)` with `R' = max(0, R×(1−resIgnorePct) − resIgnoreFlat)`; true = A; 元素伤害 ('elemental') `max(A × (1 − 元素抗性/100), 0.05·A)`. Then × `dmgDealtMul` (source) × `dmgTakenMul` & type-specific taken multipliers (target) × `dmg.mul` — 元素伤害 takes 元素脆弱 (`elementalTakenMul`) alone, not `dmgTakenMul` (脆弱 = "受到的物理、法术、真实伤害提升"). Then **限伤**: on a leader (`isBoss` — the 10 bossInfoDict enemyIds and their mirrored copies; never parts, drones or escorts) in a `'boss'` / `'hidden'` battle a hit with `ceil(final) ≥ 300000` is cancelled — no HP or pool loss, no credit, no damage number, no `damaged` / kill (`shared/constants.js BOSS_HIT_LIMIT`, `damage.js leaderHitCancelled`, after every multiplier and the hit-step blocks, before HP shields; `loseHp` too — a part's 传递, a drone's death; the client's `MAX_BATTLE_DAMAGE`, §20.12). Then shields absorb; dodge checks for phys/arts. Element damage fills a gauge (1000; enemy leaders 2000) × `elemTakenMul` × max(0.05, 1 − 损伤抵抗/100), 损伤抵抗 = data `epResistance` (PRTS 元素; the 5 % floor of DMG_e, PRTS 游戏数据基础). An element fill on a target with no HP left is refused (damage.js `hasHp`: no burst on a corpse). A full gauge bursts with the side-specific official effects, as **无来源** damage (no damage-dealt multiplier or penetration of the unit that filled the gauge, which keeps the kill and the stats; §19.5) (sim/constants.js `ELEMENT`; operators: 灼燃 1200 arts + RES −20, 神经 stun 10 s then 1000 true, 凋亡 15 s of 阻回 (`noSp`: no SP gain of any kind) + 静默 with −1 SP/s and 100 arts/s, 侵蚀 DEF −100 then 800 phys; enemies: the "·我方" terms). Every burst starts a **爆发冷却** = its duration (灼燃 / 神经 / 侵蚀 10 s — enemies' 侵蚀 8 s — 凋亡 15 s) during which NO element of the unit fills or can be recovered; when it ends every gauge of the unit resets (§18.3). +- **Damage**: phys `max(A − max(0, D×(1−defIgnorePct) − defIgnoreFlat), 0.05·A)`; arts `max(A × (1 − R'/100), 0.05·A)` with `R' = max(0, R×(1−resIgnorePct) − resIgnoreFlat)`; true = A; 元素伤害 ('elemental') `max(A × (1 − 元素抗性/100), 0.05·A)`. Then × `dmgDealtMul` (source) × `dmgTakenMul` & type-specific taken multipliers (target) × `dmg.mul` — 元素伤害 takes 元素脆弱 (`elementalTakenMul`) alone, not `dmgTakenMul` (脆弱 = "受到的物理、法术、真实伤害提升"). Then **限伤**: on a leader (`isBoss` — the 10 bossInfoDict enemyIds and their mirrored copies; never parts, drones or escorts) in a `'boss'` / `'hidden'` battle a hit with `ceil(final) ≥ 300000` is cancelled — no HP or pool loss, no credit, no damage number, no `damaged` / kill (`shared/constants.js BOSS_HIT_LIMIT`, `damage.js leaderHitCancelled`, after every multiplier and the hit-step blocks, before HP shields; `loseHp` too — a part's 传递, but not 胄's drone link, a share of the pool that is no hit (`noHitLimit`, §25.13.4); the client's `MAX_BATTLE_DAMAGE`, §20.12). Then shields absorb; dodge checks for phys/arts. Element damage fills a gauge (1000; enemy leaders 2000) × `elemTakenMul` × max(0.05, 1 − 损伤抵抗/100), 损伤抵抗 = data `epResistance` (PRTS 元素; the 5 % floor of DMG_e, PRTS 游戏数据基础). An element fill on a target with no HP left is refused (damage.js `hasHp`: no burst on a corpse). A full gauge bursts with the side-specific official effects, as **无来源** damage (no damage-dealt multiplier or penetration of the unit that filled the gauge, which keeps the kill and the stats; §19.5) (sim/constants.js `ELEMENT`; operators: 灼燃 1200 arts + RES −20, 神经 stun 10 s then 1000 true, 凋亡 15 s of 阻回 (`noSp`: no SP gain of any kind) + 静默 with −1 SP/s and 100 arts/s, 侵蚀 DEF −100 then 800 phys; enemies: the "·我方" terms). Every burst starts a **爆发冷却** = its duration (灼燃 / 神经 / 侵蚀 10 s — enemies' 侵蚀 8 s — 凋亡 15 s) during which NO element of the unit fills or can be recovered; when it ends every gauge of the unit resets (§18.3). - **Leak**: an enemy reaching its goal is removed, counted as leaked for its field owner (`sourcePlayerId` for unite). LP accounting is done by the match, not the battle. - **Results**: `damageDealt` / a unit's `dmg` count only HP removed from the other side — a unit's own drain or 流失 and friendly damage are the target's `taken` only (§21.12). - **End**: all spawns done and no enemies alive ⇒ `cleared`; `time ≥ timeLimit` ⇒ `timeout` (remaining enemies = leaked). Boss battles end when the shared boss pool reaches 0 (victory) or the match forces an end (team LP 0). A pool holding less than 1 HP is empty (`constants.js BOSS_POOL_MIN_HP`: the hit, or the per-player credit, that would leave less takes the rest; §20.5). diff --git a/docs/design/network.md b/docs/design/network.md index a68bc783..a24aea7a 100644 --- a/docs/design/network.md +++ b/docs/design/network.md @@ -85,7 +85,7 @@ Piece = { uid, kind: 'chess'|'item'|'token', id, golden: bool, tier, items: [ { **Result validation (server, `fields.js validateClientResult`).** A client result is accepted only if structurally valid and plausible for its spec: every spec player reported and nobody else; finite numbers; `killed ≤ total ≤ 4·spawns + 100`; every leaked `enemyKey` is in the spec's spawns (multiset bound) or a key the spawned enemies' data mentions (content summons/splits, bounded by the total) — boss fields excepted (their leaks cost team LP through `b.progress`); `counted: false` only for enemies that never count (data `notCountInTotal`, schedule `countInTotal: false`, boss/part entries, content spawns); 联防: leaks + `unspawned` per (enemy, leaker) ≤ what that leaker sent in (nobody's survivors are billed to a teammate); per-bond `layerGains ≤ min(60 + 4·round, 999 − the bond's starting layers)` (§20.12) — the flat part raised by what the player's layer 特质 can add to that bond (their per-battle caps; an uncapped one leaves only the 999 room, §21.26) —, none when the spec disables gains, bonds must exist and be named by the player's bond snapshot, band, effects, units or items; `coins ≤ Σ bounty coins of the spawns`; `perfect` consistent with the counted leaks; unit states only for the player's own board uids with hpPct ∈ [0, 1]. The accepted result is **rebuilt** from whitelisted fields (leak mods/tags/sources from the spec — a content-spawned enemy (split, summon) keeps the mods of the schedule entry they equal, i.e. its parent's round multipliers and bounty id, so its 联防 re-entry and bounty match the server run; unit names from server data). Otherwise (or on any exception) the server re-simulates (normal/联防); a boss field is **handed over** instead (below). `SP_VERIFY=all|sample|off` (default `off`): `all` re-simulates every accepted normal/联防 result before accepting it (the server result wins on a digest mismatch); `sample` checks ~1 battle in 8 in a later callback and logs mismatches. `Match.verifyStats = { checked, mismatches, rejected, takeovers }`. Desync between display-only clients and the authority is tolerated: the authoritative outcome is what counts and is broadcast at settlement. -**Boss rounds.** The shared pool (`SharedBossPool`, co-op size = `bloodPoint[difficulty]`, see corrections) lives on the server and is fed by the authorities' `b.progress` damage deltas (attributed per player through `by`; BOSS_HIT tickers from each player's damage to that round's pool, §21.10) and by server-run fields; a server clock (250 ms) applies the overtime drain (−`bossOvertimeDrainPerSec` team LP per whole **real** second past `bossOvertimeAfter` real s, measured on the field clock — `gamedata.js bossOvertimeDue`, §4), the silence watchdog and the end checks: pool 0 → `b.end cleared` (victory), team LP 0 → `b.end forced` (defeat) — the first one the server registers decides the verdict (`Match._finalEnding`) and after a forced end no report (an in-flight `b.progress`, the final `b.result`) credits the pool (§20.5); results are awaited ≤ 6 s (× timerScale) after a forced end. `b.pool` is the live channel for the pool and the team LP: a boss `b.progress` (4 Hz per field) and the team-LP losses never re-mark the whole public state — `m.public` (`bossHp`, `teamLp`, `fields[].progress`) and the players' merged-LP shares (`_syncTeamLp`) refresh at ~1 Hz (`Match._bossPublic`, `BOSS_PUBLIC_MS`), and at once when the round ends. A boss field's `b.result` ends it only when the shared pool is empty or after that `b.end` — except a `'cleared'` result whose cumulative report covers what the pool still holds (within its 1 HP floor) while the plausibility budget (one field credits ≤ the pool per `BOSS_MIN_CLEAR_GS` 5 game s) has not caught up: it is **held** (`f.heldResult`; 999-layer boards kill a leader in 2–4 game s, §20.14) — the boss clock keeps crediting the report at the budget's rate, the silence watchdog and handovers skip the field, a re-sent copy is ignored, and the pool's end (`_endFinal`) completes the field with it; a forged report gains nothing a `b.progress` could not already get. Any other result — `'forced'` / `'timeout'` at t = 0, `'cleared'` while the pool still holds more than the report covers — and any result failing validation would stop the pair's fight (and, with every field done, end the Final Assault as a defeat), so the field is **handed over** (`Match._bossHandover`) to the partner's display replica (promoted with `b.start authoritative: true`) or, without one, to the server (fast-forwarded to the field clock); the sender gets `b.end takeover` and is never that field's authority again (`f.demoted`). There is no synthetic zero result for a running boss field: a stats-only stand-in (`fields.js syntheticResult`, carrying the damage already credited, never charging LP) only fills a result that cannot be had otherwise — the Final Assault already ending (no result, or an invalid one, within the grace) or a server-run battle whose `result()` threw. +**Boss rounds.** The shared pool (`SharedBossPool`, size = `bloodPoint[difficulty]` × the players alive when the fight starts, solo × 1 — the owner's decision of 2026-10-06 adopting PR #209, which replaces the fixed pool of 「保持固定血量」, §25.13.4) lives on the server and is fed by the authorities' `b.progress` damage deltas (attributed per player through `by`; BOSS_HIT tickers from each player's damage to that round's pool, §21.10) and by server-run fields; a server clock (250 ms) applies the overtime drain (−`bossOvertimeDrainPerSec` team LP per whole **real** second past `bossOvertimeAfter` real s, measured on the field clock — `gamedata.js bossOvertimeDue`, §4), the silence watchdog and the end checks: pool 0 → `b.end cleared` (victory), team LP 0 → `b.end forced` (defeat) — the first one the server registers decides the verdict (`Match._finalEnding`) and after a forced end no report (an in-flight `b.progress`, the final `b.result`) credits the pool (§20.5); results are awaited ≤ 6 s (× timerScale) after a forced end. `b.pool` is the live channel for the pool and the team LP: a boss `b.progress` (4 Hz per field) and the team-LP losses never re-mark the whole public state — `m.public` (`bossHp`, `teamLp`, `fields[].progress`) and the players' merged-LP shares (`_syncTeamLp`) refresh at ~1 Hz (`Match._bossPublic`, `BOSS_PUBLIC_MS`), and at once when the round ends. A boss field's `b.result` ends it only when the shared pool is empty or after that `b.end` — except a `'cleared'` result whose cumulative report covers what the pool still holds (within its 1 HP floor) while the plausibility budget (one field credits ≤ the pool per `BOSS_MIN_CLEAR_GS` 5 game s) has not caught up: it is **held** (`f.heldResult`; 999-layer boards kill a leader in 2–4 game s, §20.14) — the boss clock keeps crediting the report at the budget's rate, the silence watchdog and handovers skip the field, a re-sent copy is ignored, and the pool's end (`_endFinal`) completes the field with it; a forged report gains nothing a `b.progress` could not already get. Any other result — `'forced'` / `'timeout'` at t = 0, `'cleared'` while the pool still holds more than the report covers — and any result failing validation would stop the pair's fight (and, with every field done, end the Final Assault as a defeat), so the field is **handed over** (`Match._bossHandover`) to the partner's display replica (promoted with `b.start authoritative: true`) or, without one, to the server (fast-forwarded to the field clock); the sender gets `b.end takeover` and is never that field's authority again (`f.demoted`). There is no synthetic zero result for a running boss field: a stats-only stand-in (`fields.js syntheticResult`, carrying the damage already credited, never charging LP) only fills a result that cannot be had otherwise — the Final Assault already ending (no result, or an invalid one, within the grace) or a server-run battle whose `result()` threw. **Solo pause (official `PauseUp` / `ResumeUp`; `Match.setPause`).** C→S `g.pause { on }`: solo matches only (co-op → `WRONG_PHASE 'co-op battles never pause'`), and `on: true` only while a battle runs (COMBAT / FINAL_ASSAULT / HIDDEN_CORE with a live field, not once the Final Assault is ending — else `WRONG_PHASE 'no battle running'`); `on: false` is always accepted. While `m.public.paused` is true everything of the battle is frozen: the field clock (`b.start elapsed`, the boss plausibility budgets and the overtime drain), the authority deadline and the server-run release timers, the boss clock, the HUD `deadline` / `overtimeAt` (shifted by the paused time on resume) and the server-run pacers (FieldRunner / HeadlessPacer skip their intervals); the browser's runner stops its local clock. In solo battles the top bar shows a 暂停 / 继续作战 button (`ui/hud.js PauseButton`, `ui/matchStatus.js pauseAvailable`; `Space` toggles it), a paused overlay offers 继续作战 / 放弃模拟, and the HUD clocks freeze at the pause moment. A disconnect or leave resumes (the server takes the field over — nobody is left to resume it); the battle phase ending drops the pause. diff --git a/docs/history/0.2.0.md b/docs/history/0.2.0.md index 9d879044..96721d75 100644 --- a/docs/history/0.2.0.md +++ b/docs/history/0.2.0.md @@ -23,7 +23,7 @@ what stays [ASSUMED] and the questions left to the owner → §25.10. The closin 2026-10-06 (望's stock, skill triggers through summon areas, the 突袭 landing, GitHub #148) and the items the sources settled (泥岩's 闭锁; 忍冬, 深靛, 阿) → §25.11; release packaging and the asset manifest (the 自选 voices, the summons with no Spine model) → §25.12; round 18 — 拟态物质 at the copy cap (GitHub #207), 华法琳's 7 / 14 (GitHub #175, PR #192), -a merged elite 拉普兰德 as a new one (GitHub #169) → §25.13. +a merged elite 拉普兰德 as a new one (GitHub #169), the leader pool per player alive (PR #209) → §25.13. Decisions of the owner: 2026-10-04 — the server stays on plain `node:http` + `ws`, no web framework (§25.1); 2026-10-05 — the 补位 plan (§25.3); the 自选编队 rules, the collab operators out of the pool, ISW-A refused (§25.4); @@ -33,7 +33,8 @@ enemy in range, 纯烬艾雅法拉 S1 at full SP, 伺夜 S1 only with his pack o does not own shows as its stand-in everywhere (the owner's recall of the official mode, §25.3); the enemy damage frame kept (§25.7.2); 望's placed 棋子 count in her stock, skills that act through summons cast on an enemy in a summon's area, a melee 突袭 member lands where it can block (§25.11); 华法琳's granted trait at the data's 7 / 14, replacing the 12 / 24 -lock (§25.13.2); a newly merged elite 拉普兰德 counts as a new 拉普兰德 (§25.13.3). +lock (§25.13.2); a newly merged elite 拉普兰德 counts as a new 拉普兰德 (§25.13.3); the leader pool = bloodPoint × the players +alive at the fight's start, adopting PR #209 and replacing 「保持固定血量」 (§25.13.4). ### 25.1 Refactor and tooling: the big files split, golden results, lint, types, import boundaries (refactor plan; owner's decision of 2026-10-04: no web framework) — `server/http/`, `server/match/match/`, `server/match/player/`, `server/sim/battle/`, `content/enemies/`, `kits/ops/`, `public/js/ui/gameLogic/`, `render/fx/`, `render/app/`, `screens/game/`, `tools/golden.mjs`, `tools/check-imports.mjs`, `eslint.config.js`, `jsconfig.json` @@ -663,6 +664,7 @@ its tile, §18.1; §25.9.2). Where a 0.1.4 change met 0.2.0 work: | A melee 突袭 member lands on a tile where it can block before one where it cannot (GitHub #148, §25.11.3) | the owner, 2026-10-06 | | 华法琳's granted trait stops at the data's 7 / 14 (PRTS 3/27: lowered from 12 / 24; GitHub #175, PR #192, §25.13.2) | the owner, 2026-10-06 (replaces the 12 / 24 lock) | | A newly merged elite 拉普兰德 is a new 拉普兰德: +8 on its first manual refresh of the round (GitHub #169, §25.13.3) | the owner, 2026-10-06 (was [ASSUMED]: the copies' count carried) | +| The leader pool = bloodPoint × the players alive when the fight starts, solo × 1 (PR #209, §25.13.4) | the owner, 2026-10-06 (replaces 「保持固定血量」; config restores it) | Settled by the sources in W5V, no longer questions: 泥岩 S3's dormancy is 闭锁 — she lets go and blocks nobody (PRTS, §25.11.4); 阿 S2 / S3 keep the data's DEFAULT, 忍冬 S2's and 深靛 S1's notes are what the kits do (§25.11.5). @@ -894,3 +896,53 @@ ported PR credits its author there and here. `test/match/feedback1-meta.test.js` (updated on purpose: the elite made from copies that already fired adds +8 on its next refresh, once; new: two white copies refreshed this round, merge, refresh → +8). Docs: docs/META.md (the counter API, the edge cases), docs/PLAYING.md, the code comments. + +#### 25.13.4 The leader pool is bloodPoint per player alive when the fight starts (PR #209 by @qingjingshenghuo; the owner's decision of 2026-10-06); 胄's drone share passes 限伤 — `server/match/gamedata.js bossPoolShareOf`, `server/match/finalAssault.js bossPoolHp`, `tools/build-data.mjs` (config `bossHpScale`), `sim/battle/combat.js loseHp`, `sim/content/bosses.js` (死亡集群) + +- **Seen** (PR #209): the author's play of the official mode — the leader pool grows with the number of players; the + remake kept one fixed pool (co-op bloodPoint whatever the count, solo × 0.25 [ASSUMED]) since the owner's 「保持固定血量」 + (§20.9 / §20.10). +- **Official**: activity_table bossInfoDict `bloodPoint` per difficulty, no per-player factor in the data; notice 5114's + 「两侧的敌方领袖共享生命值(敌方领袖的总生命值不变)」 is about the mirrored copies of a pair field; the PR's rule is the + author's observation (实玩反馈), not an official text. 假想敌:胄 (PRTS): a drone that dies 「令假想敌:胄受到最大生命值2%的真实 + 伤害」; 限伤 (research 11 §2.1) cancels any damage modifier of ceil ≥ 300000 on a leader. +- **Decision**: the owner's decision of 2026-10-06 — adopt #209: the pool is the solo table value × the players alive + when the fight starts; it replaces 「保持固定血量」. +- **Now** (ported by hand onto 0.2.0's files; the PR's one-line `data/config.json` and its `docs/BOSS_HP_ZH.md` table + were not taken — the data is regenerated, PLAYING §7 gives the examples): + 1. `bossPoolShareOf` (gamedata.js, used by `GameData.bossPoolShare` and by `finalAssault.bossPoolHp` for a plain + game-data object): solo × `solo` (1); co-op with `perPlayer` true × `coop` (1) × the players alive at the Final + Assault's / Hidden Core's start (`alivePlayers()`: bots and AI 托管 seats count, eliminated and departed seats do + not; at most `aliveFull` 4; a count left out = a full team). The global `config.bossHpScale` carries the rule + (`perPlayer: true, solo: 1`); the modes' entries keep only `bloodPointKey` (one place restores the fixed pool: + `perPlayer: false, solo: 0.25`, its optional × alive / 4 `aliveScaling` too). data/config.json regenerated offline: + only `bossHpScale` (global and per mode) changed. Leaders still ignore `enemyScale`; parts and escorts keep their HP. + 2. #209 documented, without fixing, that 胄's drone link (2 % of the pool, `DRONE_LINK_BASE 'pool'`) meets 限伤: the + hidden 胄 终极 pool is 21 600 000 / 28 800 000 at 3 / 4 players, a drone 432 000 / 576 000, which the limit would + cancel — drones would stop counting exactly in the largest fights. The share is no hit: `Battle.loseHp` takes + `noHitLimit` and the drone link passes it; a part's 传递 and every hit stay under the limit. +- [ASSUMED]: the drone share past the limit (the official client checks every damage modifier on a leader and PRTS + calls the 2 % 真实伤害, but which max HP it reads is not documented — the remake reads the pool and keeps the share). + The count is taken at each boss round's start, as #209 states (a seat that leaves before the Hidden Core no longer + counts there). +- Golden: fields — the 20 boss / hidden scenarios (`boss-boss_1..7-pair` / `-solo`, `hidden-boss_8..10-pair` / + `-solo`): a pair field's pool × 2 (two players), a solo template's × 4 (solo × 1 instead of × 0.25); seven of them + (`boss-boss_1-pair`, `boss-boss_1-solo`, `boss-boss_3-pair`, `boss-boss_3-solo`, `boss-boss_5-solo`, + `boss-boss_7-pair`, `hidden-boss_9-solo`) now end at the 200 s cap instead of clearing; the two 联防 scenarios are + unchanged. matches — 11 of 18: `solo-FUNNY-2`, `solo-NORMAL-1`, `solo-HARD-1`, `solo-HARD-2` now lose the Final + Assault (team LP 0 with 93 088 – 176 395 of the pool left; solo leaders have 4× the HP); `solo-FUNNY-1`, + `solo-NORMAL-2`, `solo-HARD-9-boosted` (its Hidden Core too) win with more leader damage (team LP −6 / 0 / −1); + `coop2-NORMAL-3`, `coop4-FUNNY-6`, `coop2-ABYSS-10-boosted`, `coop2-NORMAL-70-diy` win with more leader damage + (the pool × the players alive). Unchanged: the matches that end before R14 and `coop2-NORMAL-8-serverrun` / + `coop2-NORMAL-14-standins` (one player left at R14: × 1, as before); roster / bonds / standins / diy unchanged. +- Tests: `test/match/boss-hp-scaling.test.js` (from PR #209, adapted: every leader and difficulty × 1–4 players and solo; + R14 / R15 leave out two departed players; AI 托管 and bots count, an eliminated player does not; config restores the + fixed pool — the PR's test said the opposite —, the plain-object fallback agrees; only the leader's HP scales), + `test/content/enemies_bosses.test.js` (hidden 胄 终极 at 3 / 4 players: the drone's 432 000 / 576 000 land, a hit of + the same size is cancelled), updated on purpose: `test/match/finalAssault.test.js` (the per-player pool, the fixed + pool restored through config, a mode entry overriding the global one), `test/match/balance.test.js`, + `test/match/bosshp.test.js`, `test/match/connection.test.js`, `test/docs-consistency.test.js` (the §20.9 record + points here; the data carries `perPlayer: true`), `test/sim/playtest6_limits.test.js` (the drone share lands past the + line), `test/match/playtest6-bosspool.test.js` (its 5 % knob halved to keep the two-player pool's size: that test is + about the pool's arithmetic). Docs: PLAYING §7, DATA (`bossHpScale`), META, BALANCE, SIM, the + design (engine.md 限伤, network.md boss rounds), the §20.9 / §20.10 records, research 00 / 01 / 08. diff --git a/docs/history/v2.5-playtest6.md b/docs/history/v2.5-playtest6.md index 41268408..913b5a9a 100644 --- a/docs/history/v2.5-playtest6.md +++ b/docs/history/v2.5-playtest6.md @@ -142,7 +142,7 @@ Official since the follow-up — read from the client binary (research 11, §20. | Ground routes (§21.15) | the official flow field unless the playtest #2 route crosses strictly fewer floor tiles (a corner touch is no crossing) | `server/sim/grid.js _buildField` always `use = o` (reverses 战场#01's col-8 road) | | Leader parts (§20.10, §20.13) | every damage a 剑 / 锤 / 碎铳之簧 takes is lost by its leader 1:1, 无来源 | `server/sim/content/bosses.js PART_TRANSFER = 0.5` (v2.5's share; v2.5 also passed a 剑 / 锤's damage only while grounded) | -Settled by the user ("保持固定血量"): the co-op leader pool does not shrink when players are eliminated — `config bossHpScale.aliveScaling` is **false** (pool = bloodPoint whatever the number of alive players; one community note, 巴哈姆特 12294, said otherwise) (§20.10); flip: `aliveScaling: true` (× alive / 4). +Settled by the user ("保持固定血量"): the co-op leader pool does not shrink when players are eliminated — `config bossHpScale.aliveScaling` is **false** (pool = bloodPoint whatever the number of alive players; one community note, 巴哈姆特 12294, said otherwise) (§20.10); flip: `aliveScaling: true` (× alive / 4). Replaced on 2026-10-06 by the owner's decision adopting PR #209: the pool is bloodPoint × the players alive when the fight starts, solo × 1 (§25.13.4; `bossHpScale.perPlayer: false` with `solo: 0.25` restores this fixed pool). Settled by the user (2026-10-02, after v2.5.2: "共享阵地按你说的规则就行"): on a shared field (联防, Final Assault / Hidden Core) the bond strip follows the player of the half the ‹ › pill points at; on 全景 or an empty half it shows your own bonds when you fight there, else the teammate picked with 前往查看 or the field's first player — never your own (§20.15); rule: `public/js/ui/watchBonds.js bondOwnerId`. @@ -152,7 +152,7 @@ Still [ASSUMED] (each in its section): the class rows covering every MANUAL skil - **Seen**: co-op 终极 / 绝境 leaders died within seconds; with the user's layer counts the official leader never dies that fast. - **HP and pool — official, unchanged**: `bloodPoint[difficulty]` = activity_table act2autochess bossInfoDict `bloodPoint` / `bloodPointNormal` / `bloodPointHard` / `bloodPointAbyss` of the current data (the cache equals upstream ArknightsGameData master as of 2026-10-01; `test/match/bosshp.test.js` pins all 40 values — e.g. 胄 247 500 / 675 000 / 1 800 000 / 3 600 000, hidden 胄 750 000 / 937 500 / 3 600 000 / 7 200 000). PRTS 盟约记录's leader table is an older (11月18日) revision: 铳 险境 and 胄 / 铳 / 萨米 绝境 differ, no 终极 column, no 卢西恩 row. The data has no per-player or per-field factor; leader HP ignores `enemyScale` ("领袖单位于服务器的生命值加成不受上述加成影响"). One pool for every boss field ("最终攻势中,所有人将一起对敌方领袖造成伤害"); notice 5114's "敌方领袖的总生命值不变" means the two mirrored copies of a pair field share it. -- **Pool size**: co-op = bloodPoint whatever the number of alive players — `bossHpScale.aliveScaling` (× alive / 4, one community note: 巴哈姆特 12294) stays **off** — the user chose the fixed pool (§20.9); solo × 0.25 [ASSUMED]. +- **Pool size**: co-op = bloodPoint whatever the number of alive players — `bossHpScale.aliveScaling` (× alive / 4, one community note: 巴哈姆特 12294) stays **off** — the user chose the fixed pool (§20.9); solo × 0.25 [ASSUMED]. (Replaced on 2026-10-06: bloodPoint per player alive at the fight's start, §25.13.4.) - **Fixed — why leaders fell too fast**: 1. **直接乘算**: "+X%" ATK / DEF / max HP from bonds, strategies, equipment, 机变 cards and per-layer 特质 are summed with each other and with the skills' "+X%" (PRTS 盟约记录 "…属性加成均为直接乘算"; 游戏数据基础 D_t = Σtᵢ, A = (A₀ + D_p)(1 + D_t)). v2.5 compounded them (×74 instead of ×12 at 600 精准 layers with four more bonuses). `DIRECT_BONUS_STACKING 'add'`, content/support `directMods`; 炎佑 ×1.5 and the char_attribute_mul 特质 stay multipliers (§5.2). 2. **Same-named enemy debuffs**: one instance per target, the strongest (PRTS 作战机制 "同名buff…只能表现出一个"; 巴哈姆特 12316 "共享型buff會跟對面搶") — 奥术, 灵知 坚冰, the 莱恩哈特 / 缄默德克萨斯 RES cuts (`Battle.applyStrongest`, §5.3). v2.5 kept one 奥术 per player, so a pair field multiplied it (×40 arts damage taken at +400 layers; ×7.6 now). "Strongest" rather than "latest" is [ASSUMED]. diff --git a/docs/research/00-INDEX.md b/docs/research/00-INDEX.md index 18d375b8..c96a2158 100644 --- a/docs/research/00-INDEX.md +++ b/docs/research/00-INDEX.md @@ -142,7 +142,7 @@ The server draws a disabled bond set **D**: **3 core + 4 add-on** in NORMAL/HARD | 3 | Item slot odds and server pools `pool_equip_*` | Same tier shares; pool contents as in 04 §8 | | 4 | Disabled-bond counts for NORMAL/HARD | 3 core + 4 add-on | | 5 | 机变 family per SP round, card pools, 道具补给 tiers | 01 A4 table: HARD+ R3/R9 悬赏, R11 道具补给/机密商店. 道具补给 tier windows R3 I–IV, R6 II–V, R9 III–VI, R11 IV–VI. | -| 6 | Boss HP pool vs alive players | `bloodPoint × alive/4`; solo ×0.25 | +| 6 | Boss HP pool vs alive players | `bloodPoint × alive/4`; solo ×0.25 (since 2026-10-06, the owner's decision adopting PR #209: `bloodPoint × alive` at the fight's start, solo × 1 — DESIGN §25.13.4) | | 7 | Pair order in the Final Assault | Alive players by seat: (1,2), (3,4); an odd player gets an `_s` map | | 8 | 联防 helper choice when >2 are perfect; leaked-enemy HP | Highest LP, then seat; leaked enemies re-enter at full HP | | 9 | Per-turn band-draft timer | 12 s, with the 50 s step cap | diff --git a/docs/research/01-core-rules.md b/docs/research/01-core-rules.md index b395b1b7..1e056981 100644 --- a/docs/research/01-core-rules.md +++ b/docs/research/01-core-rules.md @@ -173,6 +173,8 @@ Boss HP scaling: - The boss HP is one shared pool for the whole team. - It shrinks when teammates are eliminated or leave [COMM: "联机队友变少,最后boss血条也会变少"]. - Proposal: `hp = bloodPoint × alivePlayers / 4` [ASSUMED]. Solo uses `bloodPoint × 0.25` [ASSUMED]. +- [2026-10-06: the owner adopted PR #209 instead — `hp = bloodPoint × the players alive when the fight starts`, solo + `bloodPoint` (bloodPoint is one player's share; players' observation, no official text); DESIGN §25.13.4.] --- diff --git a/docs/research/08-waves-official.md b/docs/research/08-waves-official.md index 0ed9f843..3b87b93a 100644 --- a/docs/research/08-waves-official.md +++ b/docs/research/08-waves-official.md @@ -551,7 +551,7 @@ Everything in `docs/BALANCE.md` §4 (the tuned tables) and the `tools/balance.mj 2. **Stat scaling and balance.** - Delete every `enemyHpMul`, `enemyAtkMul` and `bossHpMul` in `data/tuning.json`. Keep the `titles` block. - Remove the `soloMul` in `bountySpawns`. - - `config.bossHpScale`: co-op pool = `bloodPoint[difficulty]` with no alive-player factor; solo stays a flagged config value. (2026-10-01: × alive / 4 available behind `aliveScaling`, off, see §6 #7.) + - `config.bossHpScale`: co-op pool = `bloodPoint[difficulty]` with no alive-player factor; solo stays a flagged config value. (2026-10-01: × alive / 4 available behind `aliveScaling`, off, see §6 #7.) (2026-10-06: replaced by the owner's decision adopting PR #209 — `bloodPoint` × the players alive at the fight's start, solo × 1; `perPlayer: false` restores the fixed pool; DESIGN §25.13.4.) - Keep `enemyScale` (PRTS table) and the 终极 speed ×1.15 from R3. - Re-run `tools/balance.mjs --tuning off` only to report, not to tune. 3. **Pathing** (`server/sim/grid.js`, `server/sim/ai.js`, `server/sim/Battle.js` — since 0.2.0 `server/sim/battle/spawns.js` / `tiles.js`): @@ -581,7 +581,7 @@ Everything in `docs/BALANCE.md` §4 (the tuned tables) and the `tools/balance.mj | # | Question | Default | |---|---|---| | 1 | Do 射击台 (act1 m03 (10,3)/(10,4)) and 土石结构 block ground movement? | Block [ASSUMED] | -| 2 | Leader HP pool in solo, and in co-op with fewer than 4 alive players | co-op `bloodPoint` (× alive / 4 behind `aliveScaling`, off — ask the user, 2026-10-01); solo config value (flagged) | +| 2 | Leader HP pool in solo, and in co-op with fewer than 4 alive players | co-op `bloodPoint` (× alive / 4 behind `aliveScaling`, off — ask the user, 2026-10-01); solo config value (flagged). Answered 2026-10-06 (the owner, PR #209): `bloodPoint` × the players alive at the fight's start, solo × 1 (DESIGN §25.13.4) | | 3 | Unit of `maxPlayTime` | Real seconds (×2 game) [ASSUMED] | | 4 | Exact 联防 predelay formula (`_CalculateActionPredelayConsiderUid`) | 0.5 s per owner [ASSUMED] | | 5 | DEF reduction in the 70 % / 80 % bases | HP/ATK only (下半 text) | diff --git a/server/match/finalAssault.js b/server/match/finalAssault.js index 5eaaea0b..7b9e04a8 100644 --- a/server/match/finalAssault.js +++ b/server/match/finalAssault.js @@ -8,13 +8,13 @@ // RIGHT side (the sim mirrors the right side: board col c → field col 20 − c with the piece direction RIGHT ↔ // LEFT, UP / DOWN unchanged (DESIGN §3, research 09 §1.2 ConvertChessPositionInfoToBossMap); board rows 9–12 → // boss rows 2–5, sim/constants BOSS_ROW_OFFSET). `bossFieldPlacement` gives that mapping for UIs / tools. -// * Shared boss HP pool (DESIGN §20.10, GameData.bossPoolShare): one pool shared by every boss field (official tip -// "所有人将一起对敌方领袖造成伤害"); co-op = bloodPoint[difficulty] whatever the number of alive players (notice 5114's -// "敌方领袖的总生命值不变" is about the mirrored copies of a pair field sharing it, not about that number); config -// bossHpScale.aliveScaling true scales it × alive / 4 (巴哈姆特 12294 "聯機隊友(撤退/死掉)變少,最後boss血條也會變少" — one -// community note, no proportion; off until the user confirms it); solo = bloodPoint × config bossHpScale.solo (0.25, -// flagged unknown); × the tuning bossHpMul when data/tuning.json still has one (docs/BALANCE.md); bosses are never -// scaled by enemyScale. +// * Shared boss HP pool (DESIGN §20.10, §25.13.4, gamedata.js bossPoolShareOf): one pool shared by every boss field +// (official tip "所有人将一起对敌方领袖造成伤害"; notice 5114's "敌方领袖的总生命值不变" is about the mirrored copies of +// a pair field sharing it) = bloodPoint[difficulty] × the players alive when the fight starts (bots and AI 托管 seats +// count, eliminated and departed seats do not; solo × 1) — the owner's decision of 2026-10-06, adopting PR #209 by +// @qingjingshenghuo, which replaces the fixed pool of 「保持固定血量」 (config bossHpScale perPlayer false / solo 0.25 +// restores it); × the tuning bossHpMul when data/tuning.json still has one (docs/BALANCE.md); bosses are never scaled +// by enemyScale and their parts / escorts keep their own HP. // * Overtime: bossTurnHpReduceTime counts REAL seconds like the level's 120 s maxPlayTime (which runs out first; the // battle goes on): from 150 real s (300 game s on the 2× field clock) the team loses bossOvertimeDrainPerSec (1) LP // per real second (gamedata.js bossOvertimeDue); m.public.deadline = the 120 s countdown, m.public.overtimeAt = the @@ -35,6 +35,7 @@ import { BOSS_ROW_OFFSET, COLS, BOSS_POOL_MIN_HP } from '../sim/constants.js'; import { mirrorDir, normDir } from '../sim/dir.js'; +import { bossPoolShareOf } from './gamedata.js'; /** * BOSS_HIT ticker thresholds (activity_table autoChessData.broadcastList comment_boss_hit_1..3, paramList 0.2 / 0.5 / @@ -62,7 +63,7 @@ export function pairPlayers(alive) { return groups; } -/** Shared boss HP for a boss id with `aliveCount` alive players (GameData.bossPoolShare; omitted ⇒ a full team). */ +/** Shared boss HP for a boss id with `aliveCount` alive players (GameData.bossPoolShare / bossPoolShareOf; omitted ⇒ a full team). */ export function bossPoolHp(gd, bossId, aliveCount) { const boss = gd.boss(bossId); const diff = gd.difficulty; @@ -70,13 +71,8 @@ export function bossPoolHp(gd, bossId, aliveCount) { if (base == null && boss && boss.bloodPoint) base = Object.values(boss.bloodPoint).find((v) => Number.isFinite(v)) ?? null; if (base == null) base = 500000; const tune = typeof gd.bossHpMul === 'function' ? gd.bossHpMul(bossId) : 1; - let share; - if (typeof gd.bossPoolShare === 'function') share = gd.bossPoolShare(aliveCount); - else { - const scale = gd.mode.bossHpScale && typeof gd.mode.bossHpScale === 'object' ? gd.mode.bossHpScale : {}; - const cfg = gd.config.bossHpScale && typeof gd.config.bossHpScale === 'object' ? gd.config.bossHpScale : {}; - share = gd.isSolo ? (Number.isFinite(scale.solo) ? scale.solo : Number.isFinite(cfg.solo) ? cfg.solo : 0.25) : 1; - } + const share = typeof gd.bossPoolShare === 'function' ? gd.bossPoolShare(aliveCount) + : bossPoolShareOf(gd.mode && gd.mode.bossHpScale, gd.config && gd.config.bossHpScale, !!gd.isSolo, aliveCount); return Math.max(1, Math.round(base * share * tune)); } diff --git a/server/match/gamedata.js b/server/match/gamedata.js index 35ce1624..237306d1 100644 --- a/server/match/gamedata.js +++ b/server/match/gamedata.js @@ -5,8 +5,8 @@ // key is missing, so a partial data set (tests, data being regenerated) still yields a working match. // // No custom balance (DESIGN §14 corrections, research 08 §6): enemy numbers are the official ones — the PRTS -// per-round enemyScale table of data/config.json, the leader pool = bloodPoint. data/tuning.json only overrides result -// titles: +// per-round enemyScale table of data/config.json, the leader pool = bloodPoint per player alive at the fight's start +// (bossPoolShareOf). data/tuning.json only overrides result titles: // titles[titleId] { stat?, rule? } merged over config.titles // (the former enemyHpMul / enemyAtkMul / enemySpeedMul / bossHpMul / flyPlaceholders knobs were removed; a tuning file // that still carries them is ignored). @@ -55,6 +55,34 @@ export const DEFAULTS = Object.freeze({ /** Game seconds per real second of a battle (forced 2×): combat limits in data are real seconds (combatTimeLimit). */ export const COMBAT_TIME_SCALE = 2; +/** + * Multiplier of bloodPoint[difficulty] for the shared leader pool (DESIGN §20.10, §25.13.4), from config bossHpScale — + * each key from the mode's entry first, then the global one; the defaults are the current rule: + * solo `solo` (1: the table value — one player's share); + * co-op `perPlayer` true (the owner's decision of 2026-10-06, adopting PR #209 by @qingjingshenghuo): `coop` (1) × the + * players alive when the fight starts — bots and AI 托管 seats count, eliminated and departed seats do not — + * at most `aliveFull` (4); a count left out means a full team; + * `perPlayer` false: the fixed pool of 0.1.x (「保持固定血量」, restorable with `solo` 0.25): `coop` whatever the + * count, × min(alive, aliveFull) / aliveFull with `aliveScaling`. + * @param {object|null|undefined} modeScale config.modes[modeId].bossHpScale + * @param {object|null|undefined} cfgScale config.bossHpScale + * @param {boolean} isSolo + * @param {number} [aliveCount] alive players at the Final Assault / Hidden Core start (co-op) + * @returns {number} + */ +export function bossPoolShareOf(modeScale, cfgScale, isSolo, aliveCount) { + const ms = modeScale && typeof modeScale === 'object' ? modeScale : {}; + const cs = cfgScale && typeof cfgScale === 'object' ? cfgScale : {}; + const pick = (k, d) => (Number.isFinite(ms[k]) && ms[k] > 0 ? ms[k] : Number.isFinite(cs[k]) && cs[k] > 0 ? cs[k] : d); + const flag = (k, d) => (typeof ms[k] === 'boolean' ? ms[k] : typeof cs[k] === 'boolean' ? cs[k] : d); + if (isSolo) return pick('solo', 1); + const full = Math.max(1, Math.floor(pick('aliveFull', 4))); + const n = Number(aliveCount); + const alive = Number.isFinite(n) && n >= 1 ? Math.min(full, Math.floor(n)) : full; + if (flag('perPlayer', true)) return pick('coop', 1) * alive; + return pick('coop', 1) * (flag('aliveScaling', false) ? alive / full : 1); +} + /** Strip the _a/_b suffix of an item id (the registry key of an item family). */ export const itemKey = (id) => (typeof id === 'string' ? id.replace(/_[ab]$/, '') : ''); @@ -110,14 +138,12 @@ export class GameData { } /** - * Official shared leader HP pool (DESIGN §20.10): ONE pool for every boss field of the match (official tip "最终攻势中, + * Shared leader HP pool (DESIGN §20.10, §25.13.4): ONE pool for every boss field of the match (official tip "最终攻势中, * 所有人将一起对敌方领袖造成伤害"; the mirrored copies of a pair field share it — notice 5114 "两侧的敌方领袖共享生命值 - * (敌方领袖的总生命值不变)", which is about those copies, not about the number of players). Co-op = bloodPoint - * [difficulty]; with config bossHpScale.aliveScaling (default false) × alive / aliveFull (4) — 巴哈姆特 12294 "聯機隊友 - * (撤退/死掉)變少,最後boss血條也會變少" is one community note without a proportion, kept off until confirmed (it would - * shorten fights after eliminations, the opposite of the playtest report); `aliveCount` omitted ⇒ a full team. Solo = bloodPoint × - * bossHpScale.solo (0.25 = one player of four, [ASSUMED]). Leaders are never scaled by enemyScale ("领袖单位于服务器的 - * 生命值加成不受上述加成影响"). + * (敌方领袖的总生命值不变)", which is about those copies). Size = bloodPoint[difficulty] × bossPoolShare: the table value + * per player alive when the fight starts (the owner's decision of 2026-10-06, PR #209; it replaces the fixed pool of + * 「保持固定血量」, which config bossHpScale restores — bossPoolShareOf); `aliveCount` omitted ⇒ a full team. Leaders are + * never scaled by enemyScale ("领袖单位于服务器的生命值加成不受上述加成影响"). * @param {string} bossId * @param {number} [aliveCount] alive players at the Final Assault / Hidden Core start (co-op) * @returns {number} @@ -132,20 +158,11 @@ export class GameData { } /** - * Multiplier of bloodPoint for the leader pool (see bossPoolHp): solo = bossHpScale.solo (0.25); co-op = coop (1) × - * min(alive, aliveFull) / aliveFull when bossHpScale.aliveScaling (mode entry first, then the global one). + * Multiplier of bloodPoint for the leader pool (see bossPoolHp; the rule and the config keys: bossPoolShareOf). * @param {number} [aliveCount] */ bossPoolShare(aliveCount) { - const ms = this.mode.bossHpScale && typeof this.mode.bossHpScale === 'object' ? this.mode.bossHpScale : {}; - const cs = this.config.bossHpScale && typeof this.config.bossHpScale === 'object' ? this.config.bossHpScale : {}; - const pick = (k, d) => (Number.isFinite(ms[k]) && ms[k] > 0 ? ms[k] : Number.isFinite(cs[k]) && cs[k] > 0 ? cs[k] : d); - if (this.isSolo) return pick('solo', 0.25); - const scaling = typeof ms.aliveScaling === 'boolean' ? ms.aliveScaling : cs.aliveScaling === true; - const full = Math.max(1, Math.floor(pick('aliveFull', 4))); - const n = Number(aliveCount); - const alive = scaling && Number.isFinite(n) && n >= 1 ? Math.min(full, Math.floor(n)) : full; - return pick('coop', 1) * (alive / full); + return bossPoolShareOf(this.mode.bossHpScale, this.config.bossHpScale, this.isSolo, aliveCount); } /** config.titles with the tuning overrides (stat / rule per title id) merged in. */ diff --git a/server/match/match/platform.js b/server/match/match/platform.js index f9878d9f..64d608cf 100644 --- a/server/match/match/platform.js +++ b/server/match/match/platform.js @@ -144,7 +144,8 @@ export class MatchPlatform { /** * 中途退出 counts as elimination (research 00-INDEX §3, 01 §9, 06 §7 / §10.3): every copy the player holds goes back * to the shared pool at once, and the seat has no place in later rounds, the Final Assault pairing or the boss pool - * (alive × 25 %). Rounds passed = the rounds the player had survived when leaving. + * (bloodPoint per player alive at the fight's start, DESIGN §25.13.4). Rounds passed = the rounds the player had + * survived when leaving. */ _quit(ps) { this.maybeEndInfo(); diff --git a/server/sim/battle/combat.js b/server/sim/battle/combat.js index e4fce6ee..6095990f 100644 --- a/server/sim/battle/combat.js +++ b/server/sim/battle/combat.js @@ -21,12 +21,13 @@ export class BattleCombat { * derived from 无来源 damage (`from.sourceless`, element bursts) is 无来源 too (hooks see no source, `source` is credited). * `sourceless: true` makes the loss itself 无来源 ("受到等量的无来源生命流失": hooks see no source; `source` keeps the * credit — the stats and the per-player shared-pool tally). - * On a leader in a boss / hidden battle a loss of ≥ BOSS_HIT_LIMIT is cancelled like a hit (damage.js leaderHitCancelled). + * On a leader in a boss / hidden battle a loss of ≥ BOSS_HIT_LIMIT is cancelled like a hit (damage.js leaderHitCancelled) + * — except with `noHitLimit: true`: a share of the leader's pool that is no hit (胄's 死亡集群 drone link, content/bosses.js). */ - loseHp(target, amount, { source = null, silent = false, tags = null, from = null, sourceless = false } = {}) { + loseHp(target, amount, { source = null, silent = false, tags = null, from = null, sourceless = false, noHitLimit = false } = {}) { if (!target || !target.alive || !(amount > 0)) return 0; - // 限伤 (shared/constants.js BOSS_HIT_LIMIT): a loss passed on to a leader (parts' 传递, 无人机) is one hit too - if (leaderHitCancelled(this, target, amount)) return 0; + // 限伤 (shared/constants.js BOSS_HIT_LIMIT): a loss passed on to a leader (the parts' 传递) is one hit too + if (!noHitLimit && leaderHitCancelled(this, target, amount)) return 0; const t = ['hpLoss']; for (const list of [from && from.tags, tags]) if (Array.isArray(list)) for (const x of list) if (!t.includes(x)) t.push(x); return applyHpLoss(this, source, target, amount, { type: 'true', tags: t, noSp: true, silent, origin: from ?? null, sourceless: !!sourceless || !!(from && from.sourceless) }); diff --git a/server/sim/content/bosses.js b/server/sim/content/bosses.js index f6810972..710f9006 100644 --- a/server/sim/content/bosses.js +++ b/server/sim/content/bosses.js @@ -20,7 +20,8 @@ // boss_1/8 假想敌:胄 random arts beam (range 8); 灭顶之灾 one 刺胄之弹 at the highest-ATK operator in range (8-hit // flying shell, 3×3 stun + phys DoT on arrival); <20 %: damage ×0.5 (no extra shell: PRTS // 能力修正); 死亡集群 drones — a drone that dies costs the leader 2 % of its max HP = the shared -// pool's (DRONE_LINK_BASE, [ASSUMED] reading). boss_8 adds 斩胄之剑 / 破胄之锤. +// pool's (DRONE_LINK_BASE, [ASSUMED] reading), past 限伤 (a share, no hit). boss_8 adds 斩胄之剑 / +// 破胄之锤. // 斩胄之剑 / 破胄之锤 初始模式: hover invulnerable next to 胄, AoE attacks (锤 150 % ATK). 出击模式: blink to the // level's blink route, fly at the lowest-ATK operator (3×3 stun + DoT); 15 hits shoot it // down (瘫痪: stun 10 s, ground unit, damage ×1.3). Either way a new 初始模式 copy with its HP @@ -110,8 +111,12 @@ const BLADE_HAND = Object.freeze({ enemy_9014_acstma: 'left_hand', enemy_9015_ac * 'unit': the in-battle unit's data max HP (600 000 / hidden 1 200 000, 不死) — 12 000 / 24 000 per drone at every * difficulty: 0.33 % of the 终极 bar but 19 % of the solo 标准 bar (61 875), so drones decide solo fights. * Round 2 of the boss-HP review tried 'unit'; the review measured the solo regression, so the default is back to 'pool'. - * 限伤 (shared/constants.js BOSS_HIT_LIMIT): the loss is one hit through Battle.loseHp — it lands up to the largest pool - * today (boss_8 终极 7 200 000 → 144 000) and would be cancelled above a 14 999 950 pool (ceil(0.02 × pool) ≥ 300000). + * 限伤 (shared/constants.js BOSS_HIT_LIMIT): the share is no hit and passes the limit (Battle.loseHp `noHitLimit`). + * Since the pool counts every player alive at the fight's start (DESIGN §25.13.4, the owner's decision of 2026-10-06), + * the hidden 胄 终极 pool reaches 21 600 000 / 28 800 000 with 3 / 4 players — a drone 432 000 / 576 000, which the + * limit (ceil ≥ 300000) would cancel, so drones would stop counting exactly in the largest fights. [ASSUMED]: the + * official client checks every damage modifier on a leader (research 11 §2.1) and PRTS calls the drone's 2 % 真实伤害, + * but which max HP it reads is not documented; the remake reads the pool and keeps the 2 % share. */ export const DRONE_LINK_BASE = 'pool'; /** 卢西恩 / 不祥幻影 AoE radius (PRTS "半径2"). */ @@ -403,7 +408,7 @@ function kitHelm(ab, e, b, tpl) { if (c.reason !== 'killed' || !(ratio > 0)) return; // a leak is no death const boss = e2.alive ? e2 : b3.aliveEnemies().find((o) => o.isBoss && o.defId === e2.defId); const by = c.killer && c.killer.side === 'ally' ? c.killer : null; // credited to the killing operator - if (boss) { b3.loseHp(boss, droneLinkBase(boss) * ratio, { source: by }); b3.fx('beam', { x: d.x, y: d.y, from: d.id, to: boss.id, kind: 'droneLink' }); } + if (boss) { b3.loseHp(boss, droneLinkBase(boss) * ratio, { source: by, noHitLimit: true }); b3.fx('beam', { x: d.x, y: d.y, from: d.id, to: boss.id, kind: 'droneLink' }); } }, }]); }, diff --git a/server/sim/damage.js b/server/sim/damage.js index 73efad2d..d6f170fd 100644 --- a/server/sim/damage.js +++ b/server/sim/damage.js @@ -172,8 +172,8 @@ export function mitigate(amount, type, target, ign = {}) { * number. A 'hitCap' fx event `{ id, n: ceil(amount) }` marks it for the client, which draws nothing — the official * shows no number [ASSUMED]. Every HP-damage kind is checked as the official `modifier.isDamage` (phys, arts, true, * 元素伤害 incl. element bursts, DoT ticks — they all come through dealDamage — and losses passed on to a leader through - * Battle.loseHp); element 损伤 (gauge fill, 'element') removes no HP and is never checked. Deterministic (Math.ceil of - * the same double on every engine). + * Battle.loseHp, except the 胄 drone link's pool share: `noHitLimit`, DESIGN §25.13.4); element 损伤 (gauge fill, + * 'element') removes no HP and is never checked. Deterministic (Math.ceil of the same double on every engine). */ export function leaderHitCancelled(battle, target, amount) { if (!(BOSS_HIT_LIMIT > 0) || !target || !target.isBoss || (battle.kind !== 'boss' && battle.kind !== 'hidden')) return false; diff --git a/shared/constants.js b/shared/constants.js index 2173cd39..69e01881 100644 --- a/shared/constants.js +++ b/shared/constants.js @@ -112,8 +112,9 @@ export function layerGainRoom(before, n) { * = data/bosses.json `enemyKey`; in the sim the tag-'boss' units: those leaders and their mirrored copies, never parts, * escorts or drones) whose `ceil(final damage)` ≥ this is CANCELLED: 0 damage, nothing credited to the shared pool * (`AutoChessStepModeManager._OnBossEnemyTakeDamage` → `modifier.Cancel()`). It is not a clamp: a hit of 299999 lands. - * Checked in server/sim/damage.js (dealDamage after DEF / RES and every multiplier, before shields; Battle.loseHp). - * Minions, normal rounds and 联防 are unaffected. 0 / Infinity = off. + * Checked in server/sim/damage.js (dealDamage after DEF / RES and every multiplier, before shields; Battle.loseHp — not + * the 胄 drone link's pool share, `noHitLimit`, DESIGN §25.13.4). Minions, normal rounds and 联防 are unaffected. + * 0 / Infinity = off. */ export const BOSS_HIT_LIMIT = 300000; diff --git a/test/content/enemies_bosses.test.js b/test/content/enemies_bosses.test.js index ea12bd63..501d6676 100644 --- a/test/content/enemies_bosses.test.js +++ b/test/content/enemies_bosses.test.js @@ -2306,6 +2306,29 @@ test('假想敌:胄 死亡集群: the 2 % reads the leader\'s shown max HP (th assert.equal(droneLinkBase(hb, 'unit'), 1200000); }); +test('假想敌:胄 (隐秘核心) 死亡集群 past 限伤: with 3 / 4 players alive the drone share (432 000 / 576 000) still lands — a share, no hit (DESIGN §25.13.4)', () => { + // the pool counts every player alive at the fight's start (the owner's decision of 2026-10-06, PR #209): hidden 胄 终极 + // 7 200 000 × 3 / × 4 — 2 % is ≥ BOSS_HIT_LIMIT (300000), which cancels a hit; the drone link is no hit + for (const [n, loss] of [[3, 432000], [4, 576000]]) { + const h = bossArena({ kind: 'hidden', hp: 7200000 * n, units: [{ chessId: 't_gun', row: 12, col: 3 }], setup: setTpl('act1autochess_h08_01') }); + h.step(); + const boss = put(h, 'enemy_9013_acstmk_2', [3, 10], { tag: 'boss' }); + boss.profile.noAttack = true; + h.run(skb('enemy_9013_acstmk_2', '2').initCooldown + 0.1); + const d = alive(h, 'enemy_1005_yokai')[0]; + assert.ok(d, `${n} players: a drone`); + const before = h.b.sharedBoss.hp; + h.b.kill(d, h.unit('t_gun')); + approx(before - h.b.sharedBoss.hp, loss, 1e-6, `${n} players: 2 % of ${7200000 * n}`); + assert.ok(!h.eventsOf('fx').some((f) => f[1] === 'hitCap'), `${n} players: not cancelled`); + // a hit of the same size is still cancelled (限伤) + const hp = h.b.sharedBoss.hp; + h.b.dealDamage(h.unit('t_gun'), boss, { amount: loss, type: 'true', canDodge: false }); + assert.equal(h.b.sharedBoss.hp, hp, `${n} players: a ${loss} hit is cancelled`); + assert.ok(h.eventsOf('fx').some((f) => f[1] === 'hitCap')); + } +}); + test('假想敌:胄 (隐秘核心) 死亡集群: summon.hp_ratio scales the drone HP', () => { const h = bossArena({ units: [{ chessId: 't_gun', row: 12, col: 3 }], setup: setTpl('act1autochess_h08_01') }); h.step(); diff --git a/test/docs-consistency.test.js b/test/docs-consistency.test.js index f0053766..3f8b16be 100644 --- a/test/docs-consistency.test.js +++ b/test/docs-consistency.test.js @@ -581,12 +581,15 @@ test('playtest6b follow-up (DESIGN §20.10–§20.13): leader HP, 直接乘算, assert.match(BALANCE, /superseded by that binary evidence/); assert.match(R11, /MAX_BATTLE_DAMAGE = 300000/); assert.match(R02, /MAX_GARRISON_STACK = 999/); - // §20.9: elite settled, 999 / 限伤 official with their flips, the fixed leader pool settled (aliveScaling off in the data) + // §20.9: elite settled, 999 / 限伤 official with their flips, the fixed leader pool settled then — replaced on 2026-10-06 + // by the owner's decision adopting PR #209 (a pool per player alive at the fight's start, §25.13.4), which the + // record points to; the data carries the new rule assert.match(s209, /\| A merge's elite \(§20\.11\) \| takes the consumed deployed copy's tile/); assert.match(s209, /`shared\/constants\.js BOND_LAYER_CAP = 0`/); assert.match(s209, /`shared\/constants\.js BOSS_HIT_LIMIT = 0`/); - assert.match(s209, /Settled by the user \("保持固定血量"\)[^\n]*aliveScaling` is \*\*false\*\*/); - assert.equal(DATA.config.bossHpScale.aliveScaling, false, 'the user chose the fixed leader pool'); + assert.match(s209, /Settled by the user \("保持固定血量"\)[^\n]*aliveScaling` is \*\*false\*\*[^\n]*Replaced on 2026-10-06 by the owner's decision[^\n]*§25\.13\.4/); + assert.equal(DATA.config.bossHpScale.perPlayer, true, 'the owner adopted the per-player pool (2026-10-06)'); + assert.equal(DATA.config.bossHpScale.aliveScaling, false, 'the fixed pool\'s optional × alive / 4 stays off'); assert.equal(SIM_CONST.DIRECT_BONUS_STACKING, 'add'); assert.match(s209, /DIRECT_BONUS_STACKING = 'multiply'/); // the normative lines diff --git a/test/golden/fields.json b/test/golden/fields.json index 7c34b4a4..35fc2c3b 100644 --- a/test/golden/fields.json +++ b/test/golden/fields.json @@ -9,7 +9,7 @@ }, "scenarios": { "boss-boss_1-pair": { - "about": "假想敌:胄 pair pool 1800000: chess_char_6_03_b chess_char_6_06_b chess_char_6_07_b chess_char_6_01_b chess_char_6_02_b chess_char_6_04_b chess_char_6_05_b chess_char_6_08_b chess_char_6_09_b chess_char_6_11_b token_10017_skadi2_dedant token_10030_mlyss_wtrman | chess_char_6_15_b chess_char_6_19_b chess_char_5_01_b chess_char_6_17_b chess_char_6_12_b chess_char_6_13_b chess_char_6_14_b chess_char_6_16_b chess_char_6_18_b chess_char_6_20_b", + "about": "假想敌:胄 pair pool 3600000: chess_char_6_03_b chess_char_6_06_b chess_char_6_07_b chess_char_6_01_b chess_char_6_02_b chess_char_6_04_b chess_char_6_05_b chess_char_6_08_b chess_char_6_09_b chess_char_6_11_b token_10017_skadi2_dedant token_10030_mlyss_wtrman | chess_char_6_15_b chess_char_6_19_b chess_char_5_01_b chess_char_6_17_b chess_char_6_12_b chess_char_6_13_b chess_char_6_14_b chess_char_6_16_b chess_char_6_18_b chess_char_6_20_b", "fast": true, "kind": "boss", "stageId": "act1autochess_m01", @@ -17,41 +17,41 @@ "round": 14, "seed": 1379500996, "waveId": "act1autochess_h07_01", - "time": 164.47, - "ticks": 4934, - "reason": "cleared", + "time": 200, + "ticks": 6000, + "reason": "forced", "killed": 20, "total": 20, "unspawned": 0, - "bossHpLeft": 0, - "rngDraws": 378, + "bossHpLeft": 977258, + "rngDraws": 436, "errors": {"count":0,"kinds":[]}, "players": { - "p1": {"killed":20,"total":20,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":1317181,"bossDmg":893762,"heal":16635,"deaths":1,"layerGains":{}}, - "p2": {"killed":0,"total":0,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":1179438,"bossDmg":906238,"heal":64844,"deaths":0,"layerGains":{}} + "p1": {"killed":20,"total":20,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":1711412,"bossDmg":1287987,"heal":21326,"deaths":1,"layerGains":{}}, + "p2": {"killed":0,"total":0,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":1607965,"bossDmg":1334755,"heal":69935,"deaths":0,"layerGains":{}} }, "units": [ - ["p1",1,"op","chess_char_6_03_b",2,"uniequip_002_yu",2329.04,1,13,0,0,11551,11636,0,1], + ["p1",1,"op","chess_char_6_03_b",2,"uniequip_002_yu",1429.57,1,13,0,0,13711,12897,0,1], ["p1",2,"op","chess_char_6_06_b",2,"uniequip_002_pepe",2939,1,15,0,0,1020,155,0,0], - ["p1",3,"op","chess_char_6_07_b",2,"uniequip_002_siege2",3101,1,17,3,52167,3498,1021,9,2], - ["p1",4,"op","chess_char_6_01_b",2,"uniequip_002_lemuen",1470,1,7,5,368599,1715,0,57,1], + ["p1",3,"op","chess_char_6_07_b",2,"uniequip_002_siege2",2610.99,1,17,3,52167,4683,1715,9,2], + ["p1",4,"op","chess_char_6_01_b",2,"uniequip_002_lemuen",1470,1,7,5,529108,1715,0,70,1], ["p1",5,"op","chess_char_6_02_b",2,"uniequip_002_sbell2",1933,1,9,0,0,784,0,0,0], - ["p1",6,"op","chess_char_6_04_b",2,"uniequip_002_skadi2",1198.5,1,19,0,88572,10001,1568,0,4], - ["p1",7,"op","chess_char_6_05_b",2,"uniequip_002_pasngr",1442,1,24,7,425657,5940,1735,81,8], + ["p1",6,"op","chess_char_6_04_b",2,"uniequip_002_skadi2",1217.49,1,19,0,95204,10720,2306,0,5], + ["p1",7,"op","chess_char_6_05_b",2,"uniequip_002_pasngr",1399.08,1,24,7,544138,7016,2768,98,10], ["p1",8,"op","chess_char_6_08_b",2,"uniequip_002_reed2",1668,1,11,0,0,1039,0,0,0], - ["p1",9,"op","chess_char_6_09_b",0,"uniequip_002_cello",1322,1,26,1,308463,946,0,43,43], - ["p1",10,"op","chess_char_6_11_b",2,"uniequip_002_mlyss",1893,1,64,1,49950,3853,212,101,3], + ["p1",9,"op","chess_char_6_09_b",0,"uniequip_002_cello",1322,1,26,1,369326,946,0,51,51], + ["p1",10,"op","chess_char_6_11_b",2,"uniequip_002_mlyss",1893,1,64,1,74740,3853,212,139,4], ["p1",11,"token","token_10017_skadi2_dedant",null,null,130.4,0,28,0,0,0,0,0,null], ["p1",12,"token","token_10030_mlyss_wtrman",null,null,0,0,22,0,10559,1880,0,10,1], - ["p2",13,"op","chess_char_6_15_b",2,"uniequip_002_qiubai",3985.92,1,33,8,650556,22517,0,161,3], - ["p2",14,"op","chess_char_6_19_b",2,"uniequip_002_blkkgt",2767,1,16,0,0,2599,0,0,0], + ["p2",13,"op","chess_char_6_15_b",2,"uniequip_002_qiubai",3985.92,1,33,7,801491,22517,0,191,3], + ["p2",14,"op","chess_char_6_19_b",2,"uniequip_002_blkkgt",2767,1,16,0,0,5706,0,0,0], ["p2",15,"op","chess_char_5_01_b",1,"uniequip_002_excu2",920.67,1,18,0,0,1393,0,0,0], - ["p2",16,"op","chess_char_6_17_b",2,"uniequip_002_nearl2",3593,1,23,0,147896,3339,0,110,3], - ["p2",17,"op","chess_char_6_12_b",1,"uniequip_002_rosmon",2886.8,1,8,0,0,3271,0,0,0], - ["p2",18,"op","chess_char_6_13_b",1,"uniequip_002_angel2",2037.8,1,10,0,0,5015,886,0,0], - ["p2",19,"op","chess_char_6_14_b",2,"uniequip_002_lumen",2753.55,1,20,0,0,3256,9463,13,1], - ["p2",20,"op","chess_char_6_16_b",2,"uniequip_002_halo2",1554.12,1,25,0,166892,1496,0,164,3], - ["p2",21,"op","chess_char_6_18_b",2,"uniequip_002_whitw2",1541,1,12,1,204736,1484,0,0,2], + ["p2",16,"op","chess_char_6_17_b",2,"uniequip_002_nearl2",3593,1,23,0,206155,4733,0,134,4], + ["p2",17,"op","chess_char_6_12_b",1,"uniequip_002_rosmon",1901.17,1,8,0,0,4257,0,0,0], + ["p2",18,"op","chess_char_6_13_b",1,"uniequip_002_angel2",1262.55,1,10,0,0,5790,886,0,0], + ["p2",19,"op","chess_char_6_14_b",2,"uniequip_002_lumen",2753.55,1,20,0,0,3256,14555,20,1], + ["p2",20,"op","chess_char_6_16_b",2,"uniequip_002_halo2",1554.12,1,25,0,250561,2087,0,204,4], + ["p2",21,"op","chess_char_6_18_b",2,"uniequip_002_whitw2",910.59,1,12,2,337284,2114,0,0,3], ["p2",22,"op","chess_char_6_20_b",2,"uniequip_002_agoat2",1631.88,1,27,0,0,0,54494,48,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], @@ -65,24 +65,26 @@ ["p1","~1","token","token_10017_skadi2_dedant",null,null,100,0,51,0,0,0,0,0,null], ["p2","~2","token","token_10019_nearl2_sword",null,null,5886.75,0,55,0,3122,593,0,25,null], ["p1","~2","token","token_10017_skadi2_dedant",null,null,130.4,0,60,0,0,0,0,0,null], - ["p2","~3","token","token_10019_nearl2_sword",null,null,6480,0,63,0,3114,0,0,25,null], - ["p1","~3","token","token_10030_mlyss_wtrman",null,null,477.19,1,65,0,5772,965,0,12,1], - ["p1","~4","token","token_10030_mlyss_wtrman",null,null,1442,1,68,0,948,0,0,3,null] + ["p2","~3","token","token_10019_nearl2_sword",null,null,6480,0,63,0,3122,0,0,25,null], + ["p1","~3","token","token_10030_mlyss_wtrman",null,null,1442,1,65,1,22723,965,965,28,1], + ["p1","~4","token","token_10030_mlyss_wtrman",null,null,1442,0,68,0,6951,0,0,12,null], + ["p1","~3","token","token_10017_skadi2_dedant",null,null,100,0,69,0,0,0,0,0,null], + ["p2","~4","token","token_10019_nearl2_sword",null,null,6480,1,71,0,3110,0,0,5,null] ], "enemies": { "enemy_1005_yokai": [4,4,0,0,3200], "enemy_1006_shield_2": [14,14,0,28741,601974], "enemy_1061_zomshd": [2,2,0,4261,91396], - "enemy_9013_acstmk": [1,1,0,38946,1800000], - "enemy_9016_acstmr": [6,6,0,0,48] + "enemy_9013_acstmk": [1,0,0,47914,2622742], + "enemy_9016_acstmr": [8,8,0,0,64] }, - "hooks": [1,66,4934,992,992,2496,2830,3678,31,38,79,74,9,31612,2415,15,27,0,1,30,0,19,0], - "events": {"atk":1292,"deploy":33,"die":38,"dmg":2565,"engage":16,"fx":493,"heal":482,"skill":153,"spawn":64,"status":628}, - "fx": {"beam":45,"blink":1,"bombard":9,"bombardShell":9,"burst":19,"copy":3,"dp":3,"drone":237,"droneLock":13,"drones":2,"firewall":1,"garrisonGrant":1,"lightning":92,"link":1,"lock":9,"phase":1,"radiantSword":3,"shell":6,"snow":5,"split":2,"storm":8,"summon":7,"talent":4,"tide":4,"wanted":8}, - "snaps": "ded36a63 3749b7c3 26fddad3 b8b72e12 43db040a 0428a690 a8355bc9 ebae0a4e 8d9bca01 895474b5 63433db3 fcd1d1c2 c64af858 e30123e5 572939b8 29a140cf df1b96c0" + "hooks": [1,70,6000,1208,1208,2984,3373,4986,32,41,94,88,9,39706,2798,15,29,0,1,32,0,21,0], + "events": {"atk":1512,"deploy":35,"die":41,"dmg":3089,"engage":17,"fx":630,"heal":489,"skill":182,"spawn":68,"status":684}, + "fx": {"beam":54,"blink":1,"bombard":9,"bombardShell":9,"burst":21,"copy":3,"dp":4,"drone":335,"droneLock":17,"drones":3,"firewall":1,"garrisonGrant":1,"lightning":108,"link":1,"lock":9,"radiantSword":4,"shell":8,"snow":5,"split":2,"storm":10,"summon":8,"talent":4,"tide":5,"wanted":8}, + "snaps": "d9836110 12e5b436 35c19c21 8b602c4b 63a29594 e92667ad 11995740 f731d336 2bcec2e1 d8cbc3bd 9017d64b 51d18505 e6ef48bf 94c31471 ab8f2380 1b98c997 13c68f78 a6b5eaa0 e318ae23 fd4a1367" }, "boss-boss_1-solo": { - "about": "假想敌:胄 solo pool 450000: chess_char_5_08_b chess_char_5_11_b chess_char_5_05_b chess_char_5_06_b chess_char_5_13_b chess_char_5_07_b chess_char_5_02_b chess_char_5_03_b chess_char_5_10_b chess_char_5_12_b", + "about": "假想敌:胄 solo pool 1800000: chess_char_5_08_b chess_char_5_11_b chess_char_5_05_b chess_char_5_06_b chess_char_5_13_b chess_char_5_07_b chess_char_5_02_b chess_char_5_03_b chess_char_5_10_b chess_char_5_12_b", "fast": false, "kind": "boss", "stageId": "act1autochess_m06", @@ -90,42 +92,42 @@ "round": 14, "seed": 752883748, "waveId": "act1autochess_h07_01_s", - "time": 162.83, - "ticks": 4885, - "reason": "cleared", + "time": 200, + "ticks": 6000, + "reason": "forced", "killed": 17, "total": 17, "unspawned": 0, - "bossHpLeft": 0, - "rngDraws": 42, + "bossHpLeft": 1074988, + "rngDraws": 51, "errors": {"count":0,"kinds":[]}, - "players": {"p1":{"killed":17,"total":17,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":662267,"bossDmg":450000,"heal":29581,"deaths":0,"layerGains":{}}}, + "players": {"p1":{"killed":17,"total":17,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":937287,"bossDmg":725012,"heal":37236,"deaths":0,"layerGains":{}}}, "units": [ - ["p1",1,"op","chess_char_5_08_b",2,"uniequip_002_horn",2775,1,3,1,7871,2793,0,6,1], - ["p1",2,"op","chess_char_5_11_b",1,"uniequip_002_demkni",4804.8,1,5,0,0,3426,19526,0,29], - ["p1",3,"op","chess_char_5_05_b",2,"uniequip_002_ulpia",7374,1,7,2,44217,3045,480,0,3], - ["p1",4,"op","chess_char_5_06_b",2,"uniequip_002_etlchi",2831.67,1,8,0,127653,5329,4738,120,4], - ["p1",5,"op","chess_char_5_13_b",1,"uniequip_002_ghost2",2747.47,1,10,3,81628,3979,2477,39,2], + ["p1",1,"op","chess_char_5_08_b",2,"uniequip_002_horn",2775,1,3,1,7871,3554,0,6,1], + ["p1",2,"op","chess_char_5_11_b",1,"uniequip_002_demkni",4804.8,1,5,0,0,4111,23085,0,35], + ["p1",3,"op","chess_char_5_05_b",2,"uniequip_002_ulpia",7374,1,7,2,98217,4568,720,0,3], + ["p1",4,"op","chess_char_5_06_b",2,"uniequip_002_etlchi",2895.67,1,8,0,174959,6852,6325,150,5], + ["p1",5,"op","chess_char_5_13_b",1,"uniequip_002_ghost2",2427.79,1,10,3,81628,5502,3680,39,2], ["p1",6,"op","chess_char_5_07_b",2,"uniequip_002_surtr",2680,1,4,0,0,2436,0,0,0], ["p1",7,"op","chess_char_5_02_b",2,"uniequip_002_titi",2302.4,1,1,0,0,3045,0,0,0], - ["p1",8,"op","chess_char_5_03_b",2,"uniequip_002_blaze2",1427.84,1,6,15,378851,2869,0,312,7], - ["p1",9,"op","chess_char_5_10_b",2,"uniequip_002_lisa",412.9,1,9,2,7130,3426,2359,43,3], - ["p1",10,"op","chess_char_5_12_b",0,"uniequip_002_dusk",1787,1,2,1,14917,2436,0,2,2] + ["p1",8,"op","chess_char_5_03_b",2,"uniequip_002_blaze2",1472,1,6,15,522447,3045,0,382,8], + ["p1",9,"op","chess_char_5_10_b",2,"uniequip_002_lisa",1480,1,9,2,10248,3426,3426,53,4], + ["p1",10,"op","chess_char_5_12_b",0,"uniequip_002_dusk",1787,1,2,1,41917,3045,0,2,2] ], "enemies": { "enemy_1005_yokai": [4,4,0,0,3200], "enemy_1006_shield_2": [9,9,0,0,149299], "enemy_1252_lysytb_2": [4,4,0,2456,59720], - "enemy_9013_acstmk": [1,1,0,27370,450000], - "enemy_9016_acstmr": [6,6,0,0,48] + "enemy_9013_acstmk": [1,0,0,33993,725012], + "enemy_9016_acstmr": [8,7,0,0,56] }, - "hooks": [1,34,4885,576,576,891,976,2229,24,24,51,50,141,17878,2105,0,24,0,1,23,0,0,0], - "events": {"atk":592,"deploy":10,"die":24,"dmg":916,"engage":6,"fx":233,"heal":112,"skill":101,"spawn":34,"status":229}, - "fx": {"anchor":3,"beam":45,"camouflage":1,"healAoe":29,"overload":1,"phase":1,"shell":6,"splash":139,"substitute":2,"summon":4,"swap":2}, - "snaps": "4c900389 f862f540 4ed71125 0e85d7ac afe4b408 55ed559f e5911c7d 63cd0eb8 275bba0b 471f797b 79019782 462b16c0 aced55d4 830a6b29 d94ac743 6bc9a86f bbbd2947" + "hooks": [1,36,6000,695,695,1031,1120,3238,24,24,60,59,168,20939,2362,0,26,0,1,24,0,0,0], + "events": {"atk":711,"deploy":10,"die":24,"dmg":1060,"engage":6,"fx":278,"heal":148,"skill":119,"spawn":36,"status":276}, + "fx": {"anchor":3,"beam":54,"camouflage":1,"healAoe":35,"overload":1,"shell":8,"splash":168,"substitute":2,"summon":4,"swap":2}, + "snaps": "1a8ea7a1 ee2c23be 764801f7 3ff6b731 30ddb2dd 73fd3162 7de4f83d cc38ed07 fc5dd653 14858375 10f31411 7735ea08 846588e1 eb79d460 52fbd5f1 d3709e55 3ad49400 267078f3 b786680b 2f316b6f" }, "boss-boss_2-pair": { - "about": "假想敌:铳 pair pool 3000000: chess_char_5_19_b chess_char_4_01_b chess_char_5_14_b chess_char_5_17_b chess_char_5_15_b chess_char_5_20_b chess_char_5_21_b chess_char_5_22_b chess_char_5_23_b chess_char_4_02_b | chess_char_4_11_b chess_char_4_04_b chess_char_4_07_b chess_char_4_16_b chess_char_4_09_b chess_char_4_06_b chess_char_4_10_b chess_char_4_12_b chess_char_4_13_b chess_char_4_14_b token_10041_cathy_catsld token_10041_cathy_catsld", + "about": "假想敌:铳 pair pool 6000000: chess_char_5_19_b chess_char_4_01_b chess_char_5_14_b chess_char_5_17_b chess_char_5_15_b chess_char_5_20_b chess_char_5_21_b chess_char_5_22_b chess_char_5_23_b chess_char_4_02_b | chess_char_4_11_b chess_char_4_04_b chess_char_4_07_b chess_char_4_16_b chess_char_4_09_b chess_char_4_06_b chess_char_4_10_b chess_char_4_12_b chess_char_4_13_b chess_char_4_14_b token_10041_cathy_catsld token_10041_cathy_catsld", "fast": false, "kind": "boss", "stageId": "act2autochess_m04", @@ -139,7 +141,7 @@ "killed": 7, "total": 8, "unspawned": 0, - "bossHpLeft": 2323494, + "bossHpLeft": 5323494, "rngDraws": 861, "errors": {"count":0,"kinds":[]}, "players": { @@ -174,10 +176,10 @@ "hooks": [1,46,6000,1359,1379,2883,2933,5284,9,22,136,129,20,37832,1034,0,10,1,1,9,0,12,0], "events": {"atk":1384,"deploy":36,"die":21,"dmg":2925,"engage":17,"fx":608,"heal":50,"leak":1,"skill":265,"spawn":32,"status":505}, "fx": {"aoe":38,"appear":2,"blink":13,"burst":12,"catShield":1,"charge":6,"counter":20,"crit":105,"dilemma":3,"disappear":2,"explosion":17,"frostNova":26,"garrisonGrant":1,"iceSpike":53,"overclock":2,"pull":3,"quadShot":2,"ripple":20,"sentry":5,"sermon":1,"shadowWeave":10,"shield":5,"soul":6,"sp":8,"stealth":8,"swordRain":91,"swordStorm":10,"tornado":4,"tornadoPulse":16,"weightless":4,"zone":114}, - "snaps": "fd90838e 1a32ad53 fa1fb93e d4cb9fb5 9a558a4f 03f789d7 0b46d96b 279a307a f3103ed5 faa4fc49 6fb7ae55 ce7f1071 c23efccb a5e804fd d5357397 7ac01e1e 1e658876 0bdd07d6 825d32ce b6f61819" + "snaps": "8c0abe54 9b607288 336a3889 ab855b37 55a7f144 2239f0b8 855b08a6 d6883aa1 06da7541 da586a98 f0803d88 8d33a16a c1c54b58 68e1874e a0524730 737daaf0 ebd64be9 ec096e18 d99e1d14 bf343ba5" }, "boss-boss_2-solo": { - "about": "假想敌:铳 solo pool 750000: chess_char_4_17_b chess_char_4_18_b chess_char_4_23_b chess_char_4_19_b chess_char_4_22_b chess_char_4_20_b chess_char_4_21_b chess_char_4_24_b chess_char_4_25_b chess_char_4_26_b", + "about": "假想敌:铳 solo pool 3000000: chess_char_4_17_b chess_char_4_18_b chess_char_4_23_b chess_char_4_19_b chess_char_4_22_b chess_char_4_20_b chess_char_4_21_b chess_char_4_24_b chess_char_4_25_b chess_char_4_26_b", "fast": false, "kind": "boss", "stageId": "act1autochess_m05", @@ -191,7 +193,7 @@ "killed": 5, "total": 7, "unspawned": 0, - "bossHpLeft": 609626, + "bossHpLeft": 2859626, "rngDraws": 58, "errors": {"count":0,"kinds":[]}, "players": {"p1":{"killed":5,"total":7,"perfect":false,"leaks":2,"leaksUncounted":0,"coins":0,"dmg":299098,"bossDmg":134272,"heal":35078,"deaths":3,"layerGains":{}}}, @@ -211,10 +213,10 @@ "hooks": [1,21,6000,385,385,1023,1424,4394,8,10,26,25,0,13111,66,5,8,2,1,11,0,3,1], "events": {"atk":403,"deploy":13,"die":8,"dmg":1420,"engage":7,"fx":263,"heal":40,"leak":2,"skill":54,"spawn":18,"status":411}, "fx": {"bandage":3,"block":3,"burst":3,"charge":7,"dodge":1,"featherArrow":1,"flame":5,"garrisonGrant":1,"healField":1,"jungleSoul":3,"mote":102,"redistribute":45,"reweave":3,"riposte":1,"rockslide":2,"sandChains":3,"sandChainsCharged":2,"shieldBreak":9,"slash":55,"spGift":5,"thorns":5,"truesilver":3}, - "snaps": "09caa9c4 9ec9d649 c657f2cf 3504b21a 6e4f39fe 10d4bf84 c953fdf2 ed0ad55b 25cfe34b be9909d2 ac3e96e3 f116685a 5e1cb186 63022f24 9b5efe2b c5fd6f48 1e1f3a3c 996662da 52bc2f38 25e8c496" + "snaps": "cfcfbf4d 2e36f4c4 d86de811 0291110d a7bef78a 57650c6e 1788104a a346a2f4 ac587ca9 03b1a538 d546b910 cb6e362b 1d445bed 6fb308e1 46e3cb1a 26076bc9 1f093b66 58befce9 abcdba0e 4123d12c" }, "boss-boss_3-pair": { - "about": "假想敌:管 pair pool 2000000: chess_char_6_03_b chess_char_6_06_b chess_char_6_07_b chess_char_6_01_b chess_char_6_02_b chess_char_6_04_b chess_char_6_05_b chess_char_6_08_b chess_char_6_09_b chess_char_6_11_b token_10017_skadi2_dedant | chess_char_6_15_b chess_char_6_19_b chess_char_5_01_b chess_char_6_17_b chess_char_6_12_b chess_char_6_13_b chess_char_6_14_b chess_char_6_16_b chess_char_6_18_b chess_char_6_20_b", + "about": "假想敌:管 pair pool 4000000: chess_char_6_03_b chess_char_6_06_b chess_char_6_07_b chess_char_6_01_b chess_char_6_02_b chess_char_6_04_b chess_char_6_05_b chess_char_6_08_b chess_char_6_09_b chess_char_6_11_b token_10017_skadi2_dedant | chess_char_6_15_b chess_char_6_19_b chess_char_5_01_b chess_char_6_17_b chess_char_6_12_b chess_char_6_13_b chess_char_6_14_b chess_char_6_16_b chess_char_6_18_b chess_char_6_20_b", "fast": false, "kind": "boss", "stageId": "act2autochess_m03", @@ -222,41 +224,41 @@ "round": 14, "seed": 1428555614, "waveId": "act1autochess_h07_03", - "time": 103.6, - "ticks": 3108, - "reason": "cleared", - "killed": 17, - "total": 18, + "time": 200, + "ticks": 6000, + "reason": "forced", + "killed": 21, + "total": 21, "unspawned": 0, - "bossHpLeft": 0, - "rngDraws": 781, + "bossHpLeft": 32389, + "rngDraws": 1396, "errors": {"count":0,"kinds":[]}, "players": { - "p1": {"killed":17,"total":18,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":804545,"bossDmg":740515,"heal":1513,"deaths":0,"layerGains":{}}, - "p2": {"killed":0,"total":0,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":1379222,"bossDmg":1259485,"heal":18886,"deaths":0,"layerGains":{}} + "p1": {"killed":21,"total":21,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":1695850,"bossDmg":1631787,"heal":2418,"deaths":0,"layerGains":{}}, + "p2": {"killed":0,"total":0,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":2455567,"bossDmg":2335824,"heal":25654,"deaths":0,"layerGains":{}} }, "units": [ ["p1",1,"op","chess_char_6_03_b",2,"uniequip_002_yu",3430,1,7,0,0,0,0,0,0], ["p1",2,"op","chess_char_6_06_b",2,"uniequip_002_pepe",2939,1,11,0,0,0,0,0,0], ["p1",3,"op","chess_char_6_07_b",2,"uniequip_002_siege2",3101,1,9,0,0,0,0,0,0], - ["p1",4,"op","chess_char_6_01_b",2,"uniequip_002_lemuen",2131.5,1,13,1,353516,0,0,32,4], - ["p1",5,"op","chess_char_6_02_b",2,"uniequip_002_sbell2",1933,1,17,0,193845,39,5,38,2], - ["p1",6,"op","chess_char_6_04_b",2,"uniequip_002_skadi2",1533.97,1,19,1,17503,4365,1291,0,3], - ["p1",7,"op","chess_char_6_05_b",2,"uniequip_002_pasngr",2307.2,1,21,1,176549,712,217,50,4], + ["p1",4,"op","chess_char_6_01_b",2,"uniequip_002_lemuen",2131.5,1,13,2,904165,0,0,62,8], + ["p1",5,"op","chess_char_6_02_b",2,"uniequip_002_sbell2",1933,1,17,2,323380,39,5,62,3], + ["p1",6,"op","chess_char_6_04_b",2,"uniequip_002_skadi2",1214.37,1,19,1,36269,8963,1922,0,5], + ["p1",7,"op","chess_char_6_05_b",2,"uniequip_002_pasngr",2307.2,1,21,1,303279,1552,491,96,8], ["p1",8,"op","chess_char_6_08_b",2,"uniequip_002_reed2",1668,1,5,0,0,0,0,0,0], ["p1",9,"op","chess_char_6_09_b",0,"uniequip_002_cello",1322,1,15,1,10,0,0,3,3], - ["p1",10,"op","chess_char_6_11_b",2,"uniequip_002_mlyss",1893,1,23,0,45158,0,0,106,3], + ["p1",10,"op","chess_char_6_11_b",2,"uniequip_002_mlyss",1893,1,23,0,89889,0,0,207,5], ["p1",11,"token","token_10017_skadi2_dedant",null,null,130.4,0,26,0,0,0,0,0,null], - ["p2",12,"op","chess_char_6_15_b",2,"uniequip_002_qiubai",3801.6,1,31,1,230732,8103,1186,110,2], + ["p2",12,"op","chess_char_6_15_b",2,"uniequip_002_qiubai",3801.6,1,31,1,449725,8103,1186,204,3], ["p2",13,"op","chess_char_6_19_b",2,"uniequip_002_blkkgt",2767,1,12,1,16446,0,0,3,1], ["p2",14,"op","chess_char_5_01_b",1,"uniequip_002_excu2",1653.08,1,10,1,6,1222,360,6,1], - ["p2",15,"op","chess_char_6_17_b",2,"uniequip_002_nearl2",6215.89,1,32,0,146091,836,0,41,2], - ["p2",16,"op","chess_char_6_12_b",1,"uniequip_002_rosmon",3117.74,1,16,3,104892,856,166,37,2], - ["p2",17,"op","chess_char_6_13_b",1,"uniequip_002_angel2",2392.2,1,20,2,743197,2712,799,206,3], - ["p2",18,"op","chess_char_6_14_b",2,"uniequip_002_lumen",2050.92,1,22,0,0,2064,2819,24,1], - ["p2",19,"op","chess_char_6_16_b",2,"uniequip_002_halo2",1554.12,1,25,2,34678,579,0,67,2], - ["p2",20,"op","chess_char_6_18_b",2,"uniequip_002_whitw2",1541,1,6,4,84942,0,0,11,2], - ["p2",21,"op","chess_char_6_20_b",2,"uniequip_002_agoat2",1631.88,1,18,0,0,0,13556,24,1], + ["p2",15,"op","chess_char_6_17_b",2,"uniequip_002_nearl2",6215.89,1,32,0,268872,836,0,81,4], + ["p2",16,"op","chess_char_6_12_b",1,"uniequip_002_rosmon",3117.74,1,16,3,190441,856,166,73,4], + ["p2",17,"op","chess_char_6_13_b",1,"uniequip_002_angel2",2392.2,1,20,2,1232637,5257,991,368,6], + ["p2",18,"op","chess_char_6_14_b",2,"uniequip_002_lumen",2050.92,1,22,0,0,2064,3414,47,1], + ["p2",19,"op","chess_char_6_16_b",2,"uniequip_002_halo2",1554.12,1,25,1,79495,579,0,148,4], + ["p2",20,"op","chess_char_6_18_b",2,"uniequip_002_whitw2",1541,1,6,5,181467,0,0,11,3], + ["p2",21,"op","chess_char_6_20_b",2,"uniequip_002_agoat2",1631.88,1,18,0,0,0,19537,50,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], ["-","~3","device","trap_1105_accrate",null,null,100,1,3,0,0,0,0,0,null], @@ -265,62 +267,68 @@ ["p2","~1","token","token_10019_nearl2_sword",null,null,7824,0,41,0,9120,0,0,0,null], ["p1","~2","token","token_10030_mlyss_wtrman",null,null,860.02,0,42,0,1348,1020,0,2,null], ["p1","~1","token","token_10017_skadi2_dedant",null,null,100,0,47,0,0,0,0,0,null], - ["p1","~3","token","token_10030_mlyss_wtrman",null,null,1557.36,1,51,0,8320,0,0,18,1], - ["p2","~2","token","token_10019_nearl2_sword",null,null,6480,0,52,0,9120,0,0,0,null], - ["p1","~4","token","token_10030_mlyss_wtrman",null,null,1557.36,1,54,0,0,0,0,0,null] + ["p1","~3","token","token_10030_mlyss_wtrman",null,null,1557.36,1,50,0,29214,0,0,62,1], + ["p2","~2","token","token_10019_nearl2_sword",null,null,6480,0,51,0,9120,0,0,0,null], + ["p1","~4","token","token_10030_mlyss_wtrman",null,null,1880.37,0,53,0,0,0,0,0,null], + ["p1","~2","token","token_10017_skadi2_dedant",null,null,130.4,0,55,0,0,0,0,0,null], + ["p1","~5","token","token_10030_mlyss_wtrman",null,null,1880.37,0,57,0,0,0,0,0,null], + ["p2","~3","token","token_10019_nearl2_sword",null,null,6480,0,58,0,9120,0,0,0,null], + ["p1","~3","token","token_10017_skadi2_dedant",null,null,100,0,61,0,0,0,0,0,null], + ["p1","~6","token","token_10030_mlyss_wtrman",null,null,1557.36,0,62,0,0,0,0,0,null], + ["p2","~4","token","token_10019_nearl2_sword",null,null,6480,1,64,0,9120,0,0,0,null] ], "enemies": { "enemy_1197_sfshu_2": [2,2,0,0,28809], "enemy_1198_msfshu_2": [6,6,0,0,24], "enemy_1209_sfden_2": [2,2,0,11003,154793], "enemy_1210_msfden_2": [2,2,0,0,90], - "enemy_9021_acduml": [1,1,0,0,2000000], - "enemy_9023_acdums": [6,5,0,6838,51] + "enemy_9021_acduml": [1,0,0,0,3967611], + "enemy_9023_acdums": [9,9,0,8178,90] }, - "hooks": [1,53,3108,805,805,1752,1974,1761,19,26,38,30,214,23319,943,4,19,0,1,18,0,1,0], - "events": {"atk":900,"deploy":30,"die":26,"dmg":1813,"engage":16,"fx":571,"heal":175,"skill":68,"spawn":51,"status":333}, + "hooks": [1,62,6000,1512,1512,3171,3572,2628,22,35,63,56,376,44379,1588,4,22,0,1,22,0,1,0], + "events": {"atk":1661,"deploy":36,"die":35,"dmg":3271,"engage":16,"fx":1035,"heal":306,"skill":119,"spawn":60,"status":513}, "fx": { - "airstrike": 76, + "airstrike": 135, "appear": 1, - "beam": 5, + "beam": 9, "blink": 2, - "bombard": 30, - "bombardShell": 30, + "bombard": 66, + "bombardShell": 66, "buff": 3, "burst": 1, "copy": 2, "disappear": 1, "displace": 2, - "dp": 3, - "drone": 164, - "droneLock": 13, - "drones": 2, - "explode": 86, + "dp": 5, + "drone": 339, + "droneLock": 17, + "drones": 3, + "explode": 138, "extraAttack": 1, "finale": 1, "garrisonGrant": 1, - "lightning": 42, - "link": 4, - "lock": 30, - "lure": 2, - "phase": 11, - "radiantSword": 2, + "lightning": 74, + "link": 5, + "lock": 66, + "lure": 3, + "phase": 18, + "radiantSword": 4, "slash": 11, "snow": 11, - "split": 2, - "steal": 3, - "storm": 4, - "summon": 10, + "split": 4, + "steal": 6, + "storm": 8, + "summon": 15, "sunBurst": 1, "talent": 4, "telegraph": 4, - "tide": 3, + "tide": 5, "wanted": 3 }, - "snaps": "f2137fd0 c04d9051 f10f9b96 29aa5d2c 2dae50e9 376aaf70 de60a0fc 9ba08ca9 8d4ba472 13c48fe0 cfe736f1" + "snaps": "b5e578c7 08019f4b 2414497e e8ccf404 0a757964 27f19ffa dc979221 9a9cddad 37887448 9597c3ad 3331f98b 22dca952 01026ee5 afe32a6d 65ca8fec ed617f42 3ed37aad 2975ad94 80313e62 c870870c" }, "boss-boss_3-solo": { - "about": "假想敌:管 solo pool 500000: chess_char_5_08_b chess_char_5_11_b chess_char_5_05_b chess_char_5_06_b chess_char_5_13_b chess_char_5_07_b chess_char_5_02_b chess_char_5_03_b chess_char_5_10_b chess_char_5_12_b", + "about": "假想敌:管 solo pool 2000000: chess_char_5_08_b chess_char_5_11_b chess_char_5_05_b chess_char_5_06_b chess_char_5_13_b chess_char_5_07_b chess_char_5_02_b chess_char_5_03_b chess_char_5_10_b chess_char_5_12_b", "fast": false, "kind": "boss", "stageId": "act1autochess_m04", @@ -328,27 +336,27 @@ "round": 14, "seed": 2055049882, "waveId": "act1autochess_h07_03_s", - "time": 164.23, - "ticks": 4927, - "reason": "cleared", - "killed": 17, - "total": 18, + "time": 200, + "ticks": 6000, + "reason": "forced", + "killed": 15, + "total": 15, "unspawned": 0, - "bossHpLeft": 0, - "rngDraws": 12, + "bossHpLeft": 1354917, + "rngDraws": 11, "errors": {"count":0,"kinds":[]}, - "players": {"p1":{"killed":17,"total":18,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":572696,"bossDmg":500000,"heal":11104,"deaths":2,"layerGains":{}}}, + "players": {"p1":{"killed":15,"total":15,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":717758,"bossDmg":645083,"heal":17064,"deaths":2,"layerGains":{}}}, "units": [ - ["p1",1,"op","chess_char_5_08_b",2,"uniequip_002_horn",2775,1,11,3,127241,6094,0,108,4], - ["p1",2,"op","chess_char_5_11_b",1,"uniequip_002_demkni",4804.8,1,9,0,0,0,8964,0,22], + ["p1",1,"op","chess_char_5_08_b",2,"uniequip_002_horn",2775,1,11,2,171218,8125,0,133,4], + ["p1",2,"op","chess_char_5_11_b",1,"uniequip_002_demkni",4804.8,1,9,0,0,0,14573,0,34], ["p1",3,"op","chess_char_5_05_b",2,"uniequip_002_ulpia",11982.75,1,28,2,34991,1441,1441,8,1], ["p1",4,"op","chess_char_5_06_b",2,"uniequip_002_etlchi",4255.1,1,10,1,4,0,0,4,3], - ["p1",5,"op","chess_char_5_13_b",1,"uniequip_002_ghost2",3488.8,1,13,2,3,812,0,1,1], - ["p1",6,"op","chess_char_5_07_b",2,"uniequip_002_surtr",5050.54,1,42,1,318104,17987,0,111,3], + ["p1",5,"op","chess_char_5_13_b",1,"uniequip_002_ghost2",3488.8,1,13,1,1,380,0,1,1], + ["p1",6,"op","chess_char_5_07_b",2,"uniequip_002_surtr",1,0,39,0,394058,23037,0,137,3], ["p1",7,"op","chess_char_5_02_b",2,"uniequip_002_titi",1439,1,7,0,0,0,0,0,0], - ["p1",8,"op","chess_char_5_03_b",2,"uniequip_002_blaze2",1472,1,8,4,20679,2870,0,21,1], - ["p1",9,"op","chess_char_5_10_b",2,"uniequip_002_lisa",1480,1,39,0,5875,2179,699,22,2], - ["p1",10,"op","chess_char_5_12_b",0,"uniequip_002_dusk",1787,1,45,4,65798,1787,0,33,21], + ["p1",8,"op","chess_char_5_03_b",2,"uniequip_002_blaze2",1251.2,1,8,4,20678,6668,0,20,1], + ["p1",9,"op","chess_char_5_10_b",2,"uniequip_002_lisa",1480,1,37,0,9449,2179,699,30,3], + ["p1",10,"op","chess_char_5_12_b",0,"uniequip_002_dusk",1787,1,42,4,87358,2139,352,45,30], ["-","~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], @@ -362,16 +370,16 @@ "enemy_1209_sfden_2": [2,2,0,869,59720], "enemy_1210_msfden_2": [2,2,0,0,44], "enemy_5601_entlec": [3,3,0,0,0], - "enemy_9021_acduml": [1,1,0,262,500000], - "enemy_9023_acdums": [9,8,0,3526,78] + "enemy_9021_acduml": [1,0,0,358,645083], + "enemy_9023_acdums": [6,6,0,3350,56] }, - "hooks": [1,45,4927,317,317,573,1278,591,23,26,58,55,21,14024,1023,1,22,0,1,101,0,1,0], - "events": {"atk":345,"deploy":17,"die":26,"dmg":596,"engage":8,"fx":236,"heal":41,"skill":113,"spawn":39,"status":146}, - "fx": {"anchor":1,"aoe":3,"beam":8,"burst":1,"candle":3,"ember":2,"explode":140,"healAoe":22,"overload":3,"phase":17,"revive":1,"splash":21,"substitute":1,"summon":9,"swap":1,"telegraph":1,"teleport":2}, - "snaps": "ded8b8ce ac3a4f01 f125cc85 edac7e9c 3f3cca3a 5b3c27a7 755f6359 94c52b5a def70464 ffdfd4af f4848669 eb07b332 ed0cdb0c 8f76fb8d d46b0a18 17765bf4 911ec97d" + "hooks": [1,42,6000,387,387,644,1581,796,20,24,80,78,20,17921,1173,1,19,0,1,139,0,1,0], + "events": {"atk":405,"deploy":17,"die":24,"dmg":734,"engage":8,"fx":203,"heal":59,"skill":158,"spawn":36,"status":179}, + "fx": {"anchor":1,"aoe":3,"beam":6,"burst":1,"candle":3,"ember":3,"explode":104,"healAoe":34,"overload":4,"phase":12,"revive":1,"splash":20,"substitute":1,"summon":6,"swap":1,"telegraph":1,"teleport":2}, + "snaps": "b1346fa2 d1431d71 954000f3 02df4df6 3b32ff34 eebe68a6 c345703b a96e6dd6 0fb36c93 d698e78f 3d220d56 882c3d3b 648c8b24 b2c55330 69e307bb d0f80cc1 37de46c4 406aa2b6 287ffc32 72da82fc" }, "boss-boss_4-pair": { - "about": "盐风主教昆图斯 pair pool 4200000: chess_char_5_19_b chess_char_4_01_b chess_char_5_14_b chess_char_5_17_b chess_char_5_15_b chess_char_5_20_b chess_char_5_21_b chess_char_5_22_b chess_char_5_23_b chess_char_4_02_b | chess_char_4_11_b chess_char_4_04_b chess_char_4_07_b chess_char_4_16_b chess_char_4_09_b chess_char_4_06_b chess_char_4_10_b chess_char_4_12_b chess_char_4_13_b chess_char_4_14_b token_10041_cathy_catsld token_10041_cathy_catsld", + "about": "盐风主教昆图斯 pair pool 8400000: chess_char_5_19_b chess_char_4_01_b chess_char_5_14_b chess_char_5_17_b chess_char_5_15_b chess_char_5_20_b chess_char_5_21_b chess_char_5_22_b chess_char_5_23_b chess_char_4_02_b | chess_char_4_11_b chess_char_4_04_b chess_char_4_07_b chess_char_4_16_b chess_char_4_09_b chess_char_4_06_b chess_char_4_10_b chess_char_4_12_b chess_char_4_13_b chess_char_4_14_b token_10041_cathy_catsld token_10041_cathy_catsld", "fast": false, "kind": "boss", "stageId": "act2autochess_m02", @@ -385,7 +393,7 @@ "killed": 9, "total": 14, "unspawned": 0, - "bossHpLeft": 3401883, + "bossHpLeft": 7601883, "rngDraws": 496, "errors": {"count":0,"kinds":[]}, "players": { @@ -456,10 +464,10 @@ "weightless": 4, "zone": 230 }, - "snaps": "55a3d863 705ac967 e815eea0 1a348247 c3de7555 507edda3 3afb1adb 03717bd5 8abcf4ac b28c884f 25956015 b1d7cf6f 1c11c8b3 a11f49b2 b58e3f47 632c829c a5e0d79c da3519b8 783a1f55 c42321eb" + "snaps": "9d889e0e f29df90d 7a4bf6fc 19fe1302 bbe35359 e3aae426 3f978616 3d9f6e1d dcc49f9b e2e26bac eaf0159e 0d0a2271 04949e73 baad20e5 dca9ced6 a4351d0b b4846197 afc80a44 a6e80893 96d194a3" }, "boss-boss_4-solo": { - "about": "盐风主教昆图斯 solo pool 1050000: chess_char_4_17_b chess_char_4_18_b chess_char_4_23_b chess_char_4_19_b chess_char_4_22_b chess_char_4_20_b chess_char_4_21_b chess_char_4_24_b chess_char_4_25_b chess_char_4_26_b", + "about": "盐风主教昆图斯 solo pool 4200000: chess_char_4_17_b chess_char_4_18_b chess_char_4_23_b chess_char_4_19_b chess_char_4_22_b chess_char_4_20_b chess_char_4_21_b chess_char_4_24_b chess_char_4_25_b chess_char_4_26_b", "fast": true, "kind": "boss", "stageId": "act1autochess_m03", @@ -473,7 +481,7 @@ "killed": 3, "total": 7, "unspawned": 0, - "bossHpLeft": 634802, + "bossHpLeft": 3784802, "rngDraws": 93, "errors": {"count":0,"kinds":[]}, "players": {"p1":{"killed":3,"total":7,"perfect":false,"leaks":4,"leaksUncounted":0,"coins":0,"dmg":684711,"bossDmg":415198,"heal":102513,"deaths":4,"layerGains":{}}}, @@ -495,10 +503,10 @@ "hooks": [1,23,6000,585,585,998,1144,8285,7,11,30,30,0,13584,137,13,8,4,1,7,0,31,0], "events": {"atk":794,"deploy":13,"die":7,"dmg":1126,"engage":6,"fx":343,"heal":107,"leak":4,"skill":62,"spawn":20,"status":525}, "fx": {"bandage":4,"block":19,"burst":31,"camouflage":1,"featherArrow":5,"garrisonGrant":1,"grow":1,"healField":2,"jungleSoul":1,"mote":68,"redistribute":45,"reweave":3,"rockfall":18,"rockslide":7,"sandChains":5,"shieldBreak":18,"slash":46,"spGift":3,"tentacle":6,"thorns":51,"tide":5,"truesilver":3}, - "snaps": "c0c3c8a1 dede8977 c4d8c4cc 8c2d08bd cb99317a 196b45de bb48c9f4 c58d0845 322cdc02 7974befb 878b7b20 b5942dc0 392b47b9 0113df40 7702202d 88ce7676 2837f961 7d9b9f2b 23bc524b 4953a701" + "snaps": "501b4dd4 877a4d48 68f61133 0c4f2d25 66d31d7d 2f1febdd 16d86817 be1ddbe8 895b5c6a ce7ab97a 2c2c9cff e0efdfa3 98ac6cb8 133c9069 5d797196 35eb846a 463c1d7b 0485eea7 2025f7bd a77ca075" }, "boss-boss_5-pair": { - "about": "卢西恩,“猩红血钻” pair pool 780000: chess_char_6_03_b chess_char_6_06_b chess_char_6_07_b chess_char_6_01_b chess_char_6_02_b chess_char_6_04_b chess_char_6_05_b chess_char_6_08_b chess_char_6_09_b chess_char_6_11_b token_10017_skadi2_dedant token_10030_mlyss_wtrman | chess_char_6_15_b chess_char_6_19_b chess_char_5_01_b chess_char_6_17_b chess_char_6_12_b chess_char_6_13_b chess_char_6_14_b chess_char_6_16_b chess_char_6_18_b chess_char_6_20_b", + "about": "卢西恩,“猩红血钻” pair pool 1560000: chess_char_6_03_b chess_char_6_06_b chess_char_6_07_b chess_char_6_01_b chess_char_6_02_b chess_char_6_04_b chess_char_6_05_b chess_char_6_08_b chess_char_6_09_b chess_char_6_11_b token_10017_skadi2_dedant token_10030_mlyss_wtrman | chess_char_6_15_b chess_char_6_19_b chess_char_5_01_b chess_char_6_17_b chess_char_6_12_b chess_char_6_13_b chess_char_6_14_b chess_char_6_16_b chess_char_6_18_b chess_char_6_20_b", "fast": false, "kind": "boss", "stageId": "act2autochess_m01", @@ -506,96 +514,102 @@ "round": 14, "seed": 2302764647, "waveId": "act2autochess_h07_05", - "time": 63.43, - "ticks": 1903, + "time": 116.4, + "ticks": 3492, "reason": "cleared", - "killed": 9, - "total": 13, + "killed": 17, + "total": 17, "unspawned": 0, "bossHpLeft": 0, - "rngDraws": 543, + "rngDraws": 957, "errors": {"count":0,"kinds":[]}, "players": { - "p1": {"killed":9,"total":13,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":514638,"bossDmg":398173,"heal":5957,"deaths":0,"layerGains":{}}, - "p2": {"killed":0,"total":0,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":531341,"bossDmg":381827,"heal":35458,"deaths":0,"layerGains":{}} + "p1": {"killed":17,"total":17,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":999785,"bossDmg":756103,"heal":20375,"deaths":2,"layerGains":{}}, + "p2": {"killed":0,"total":0,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":1020000,"bossDmg":803897,"heal":61815,"deaths":3,"layerGains":{}} }, "units": [ - ["p1",1,"op","chess_char_6_03_b",2,"uniequip_002_yu",5522.38,1,7,0,20684,1622,3307,6,1], - ["p1",2,"op","chess_char_6_06_b",2,"uniequip_002_pepe",2939,1,12,0,35710,987,0,9,1], - ["p1",3,"op","chess_char_6_07_b",2,"uniequip_002_siege2",3101,1,14,0,32171,3568,0,16,1], - ["p1",4,"op","chess_char_6_01_b",2,"uniequip_002_lemuen",1470,1,1,2,191700,829,195,20,1], - ["p1",5,"op","chess_char_6_02_b",2,"uniequip_002_sbell2",1933,1,16,1,46816,192,0,10,1], - ["p1",6,"op","chess_char_6_04_b",2,"uniequip_002_skadi2",1497.19,1,3,0,3353,3489,215,0,2], - ["p1",7,"op","chess_char_6_05_b",2,"uniequip_002_pasngr",1442,1,18,2,49281,1707,478,9,3], - ["p1",8,"op","chess_char_6_08_b",2,"uniequip_002_reed2",1668,1,5,0,17735,0,868,10,1], - ["p1",9,"op","chess_char_6_09_b",0,"uniequip_002_cello",1322,1,20,0,86367,4068,505,15,15], - ["p1",10,"op","chess_char_6_11_b",2,"uniequip_002_mlyss",1893,1,9,0,19279,848,195,34,2], + ["p1",1,"op","chess_char_6_03_b",2,"uniequip_002_yu",7216.72,1,7,0,54707,5937,9130,20,2], + ["p1",2,"op","chess_char_6_06_b",2,"uniequip_002_pepe",1074.06,1,12,0,46186,6044,294,16,2], + ["p1",3,"op","chess_char_6_07_b",2,"uniequip_002_siege2",3688.8,1,14,0,57400,4698,189,27,2], + ["p1",4,"op","chess_char_6_01_b",2,"uniequip_002_lemuen",1487.68,1,1,3,432902,4386,1760,36,3], + ["p1",5,"op","chess_char_6_02_b",2,"uniequip_002_sbell2",2520.63,1,16,1,76617,192,0,17,2], + ["p1",6,"op","chess_char_6_04_b",2,"uniequip_002_skadi2",1769.09,1,3,0,12934,9173,717,0,3], + ["p1",7,"op","chess_char_6_05_b",2,"uniequip_002_pasngr",1880.37,1,18,3,109704,1707,478,9,6], + ["p1",8,"op","chess_char_6_08_b",2,"uniequip_002_reed2",0,0,5,0,52484,4602,6914,33,2], + ["p1",9,"op","chess_char_6_09_b",0,"uniequip_002_cello",1723.89,1,20,2,113889,4068,505,20,20], + ["p1",10,"op","chess_char_6_11_b",2,"uniequip_002_mlyss",0,0,9,0,31419,2968,195,44,2], ["p1",11,"token","token_10017_skadi2_dedant",null,null,130.4,0,22,0,0,0,0,0,null], - ["p1",12,"token","token_10030_mlyss_wtrman",null,null,1668,1,10,0,8925,898,195,16,1], - ["p2",13,"op","chess_char_6_15_b",2,"uniequip_002_qiubai",3787.47,1,42,2,187685,9956,0,54,3], - ["p2",14,"op","chess_char_6_19_b",2,"uniequip_002_blkkgt",2767,1,13,0,47034,1444,0,15,1], - ["p2",15,"op","chess_char_5_01_b",1,"uniequip_002_excu2",2314,1,15,0,30808,971,971,27,1], - ["p2",16,"op","chess_char_6_17_b",2,"uniequip_002_nearl2",6201.77,1,45,1,65342,6236,0,19,2], - ["p2",17,"op","chess_char_6_12_b",1,"uniequip_002_rosmon",5051.9,1,2,1,70017,0,0,7,1], - ["p2",18,"op","chess_char_6_13_b",1,"uniequip_002_angel2",3765.5,1,17,0,49868,3727,1488,8,1], - ["p2",19,"op","chess_char_6_14_b",2,"uniequip_002_lumen",1899,1,4,0,0,0,1444,2,1], - ["p2",20,"op","chess_char_6_16_b",2,"uniequip_002_halo2",1554.12,1,19,1,11904,0,0,18,2], - ["p2",21,"op","chess_char_6_18_b",2,"uniequip_002_whitw2",1541,1,6,0,60821,0,0,0,1], - ["p2",22,"op","chess_char_6_20_b",2,"uniequip_002_agoat2",1631.88,1,21,0,0,2135,31556,21,1], + ["p1",12,"token","token_10030_mlyss_wtrman",null,null,0,0,10,0,8925,2566,195,17,1], + ["p2",13,"op","chess_char_6_15_b",2,"uniequip_002_qiubai",0,0,42,2,260273,13743,0,91,3], + ["p2",14,"op","chess_char_6_19_b",2,"uniequip_002_blkkgt",2873.29,1,13,0,157481,6073,0,44,3], + ["p2",15,"op","chess_char_5_01_b",1,"uniequip_002_excu2",0,0,15,0,43092,3945,1631,40,1], + ["p2",16,"op","chess_char_6_17_b",2,"uniequip_002_nearl2",6089.82,1,55,2,138155,15493,0,43,3], + ["p2",17,"op","chess_char_6_12_b",1,"uniequip_002_rosmon",5503.36,1,2,1,209692,1801,1375,27,2], + ["p2",18,"op","chess_char_6_13_b",1,"uniequip_002_angel2",0,0,17,1,61810,8849,2844,8,1], + ["p2",19,"op","chess_char_6_14_b",2,"uniequip_002_lumen",1710.2,1,4,0,0,1532,10285,13,1], + ["p2",20,"op","chess_char_6_16_b",2,"uniequip_002_halo2",1876.46,1,19,2,24349,1047,0,38,2], + ["p2",21,"op","chess_char_6_18_b",2,"uniequip_002_whitw2",1125.01,1,6,1,110394,2111,0,0,2], + ["p2",22,"op","chess_char_6_20_b",2,"uniequip_002_agoat2",1970.34,1,21,0,0,3202,45680,36,2], ["p2","~1","token","token_10019_nearl2_sword",null,null,1468.72,0,32,0,7863,6355,0,11,null], ["p1","~1","token","token_10030_mlyss_wtrman",null,null,2175.07,0,36,0,2618,0,0,7,null], - ["p1","~1","token","token_10040_siege2_vlion",null,null,3173.37,1,39,0,0,1078,0,0,null], - ["p2","~2","token","token_10019_nearl2_sword",null,null,6480,1,46,0,0,0,0,0,null] + ["p1","~1","token","token_10040_siege2_vlion",null,null,3173.37,0,39,0,0,1078,0,0,null], + ["p2","~2","token","token_10019_nearl2_sword",null,null,5622.56,0,46,0,0,857,0,0,null], + ["p1","~1","token","token_10017_skadi2_dedant",null,null,100,0,47,0,0,0,0,0,null], + ["p1","~2","token","token_10040_siege2_vlion",null,null,4677.04,1,57,0,0,539,0,0,null], + ["p2","~3","token","token_10019_nearl2_sword",null,null,7087.59,1,58,0,6892,736,0,0,null] ], "enemies": { "enemy_1010_demon_2": [2,2,0,3615,128995], - "enemy_2009_csaudc": [2,2,0,1188,68797], - "enemy_2010_csdcr": [1,0,0,642,18188], - "enemy_2016_csphtm": [2,2,0,39204,780000], - "enemy_2017_csphts": [5,5,0,35,50000] + "enemy_2009_csaudc": [4,4,0,2146,137594], + "enemy_2010_csdcr": [2,2,0,4710,103196], + "enemy_2016_csphtm": [2,2,0,94164,1560000], + "enemy_2017_csphts": [9,9,0,88,90000] }, - "hooks": [1,44,1903,363,363,1007,1180,1385,11,20,43,30,28,13768,781,16,12,0,1,9,0,9,41], - "events": {"atk":496,"deploy":32,"die":20,"dmg":1081,"engage":19,"fx":334,"heal":256,"skill":73,"spawn":38,"status":363}, + "hooks": [1,56,3492,654,654,1833,2142,3194,25,39,65,55,50,29032,1203,31,19,0,1,23,0,16,66], + "events": {"atk":802,"deploy":37,"die":39,"dmg":1979,"engage":19,"fx":640,"heal":383,"skill":120,"spawn":48,"status":568}, "fx": { - "airstrike": 14, - "blink": 11, - "bombard": 9, - "bombardShell": 9, - "burst": 9, + "airstrike": 18, + "blink": 17, + "bombard": 27, + "bombardShell": 27, + "burst": 16, + "cleanse": 1, "copy": 1, - "dodge": 41, + "dodge": 66, "dp": 2, - "drone": 102, - "droneLock": 3, - "drones": 1, - "explode": 12, - "extraAttack": 9, - "finale": 1, - "firewall": 1, + "drone": 202, + "droneLock": 8, + "drones": 2, + "emergency": 1, + "explode": 24, + "extraAttack": 13, + "finale": 3, + "firewall": 2, "garrisonGrant": 1, - "lightning": 26, + "lightning": 55, "link": 3, - "lock": 9, - "lure": 1, - "radiantSword": 2, - "scorchBurst": 2, - "shield": 10, - "slash": 11, - "snow": 14, + "lock": 27, + "lure": 2, + "radiantSword": 3, + "scorchBurst": 3, + "shield": 14, + "slash": 33, + "snow": 22, "split": 1, "steal": 1, - "storm": 3, + "storm": 6, "strike": 3, - "summon": 8, - "sunBurst": 3, + "summon": 14, + "sunBurst": 5, "talent": 4, - "tide": 2, - "wanted": 5 + "telegraph": 2, + "tide": 3, + "wanted": 8 }, - "snaps": "4d44447b 9ee7d749 4ce60158 46fdd0ab c05f0010 9fe29329 83c44a66" + "snaps": "726b45e6 655ee79a 912e8d78 fe351355 d02de871 2de23192 90fc2124 37da201e 332c960d a6a1a21f 4df5e422 d780f15c" }, "boss-boss_5-solo": { - "about": "卢西恩,“猩红血钻” solo pool 195000: chess_char_5_08_b chess_char_5_11_b chess_char_5_05_b chess_char_5_06_b chess_char_5_13_b chess_char_5_07_b chess_char_5_02_b chess_char_5_03_b chess_char_5_10_b chess_char_5_12_b", + "about": "卢西恩,“猩红血钻” solo pool 780000: chess_char_5_08_b chess_char_5_11_b chess_char_5_05_b chess_char_5_06_b chess_char_5_13_b chess_char_5_07_b chess_char_5_02_b chess_char_5_03_b chess_char_5_10_b chess_char_5_12_b", "fast": false, "kind": "boss", "stageId": "act1autochess_m02", @@ -603,45 +617,46 @@ "round": 14, "seed": 3943361264, "waveId": "act2autochess_h07_05_s", - "time": 130.73, - "ticks": 3922, - "reason": "cleared", - "killed": 8, - "total": 8, + "time": 200, + "ticks": 6000, + "reason": "forced", + "killed": 11, + "total": 11, "unspawned": 0, - "bossHpLeft": 0, - "rngDraws": 178, + "bossHpLeft": 470816, + "rngDraws": 315, "errors": {"count":0,"kinds":[]}, - "players": {"p1":{"killed":8,"total":8,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":296313,"bossDmg":195000,"heal":29860,"deaths":1,"layerGains":{}}}, + "players": {"p1":{"killed":11,"total":11,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":440497,"bossDmg":309184,"heal":42514,"deaths":2,"layerGains":{}}}, "units": [ - ["p1",1,"op","chess_char_5_08_b",2,"uniequip_002_horn",755.84,1,2,1,53141,5381,3368,40,2], - ["p1",2,"op","chess_char_5_11_b",1,"uniequip_002_demkni",4804.8,1,1,0,0,0,6179,0,16], - ["p1",3,"op","chess_char_5_05_b",2,"uniequip_002_ulpia",6491.29,1,22,1,36703,11736,9240,6,1], - ["p1",4,"op","chess_char_5_06_b",2,"uniequip_002_etlchi",3222,1,6,3,58184,202,202,28,3], - ["p1",5,"op","chess_char_5_13_b",1,"uniequip_002_ghost2",3436.8,1,9,0,0,640,640,0,0], - ["p1",6,"op","chess_char_5_07_b",2,"uniequip_002_surtr",5169.12,1,10,0,29260,4417,5462,11,1], + ["p1",1,"op","chess_char_5_08_b",2,"uniequip_002_horn",0,0,2,3,86409,6769,4000,57,3], + ["p1",2,"op","chess_char_5_11_b",1,"uniequip_002_demkni",4804.8,1,1,0,0,0,11371,0,24], + ["p1",3,"op","chess_char_5_05_b",2,"uniequip_002_ulpia",5314.5,1,26,0,44933,17400,14715,7,1], + ["p1",4,"op","chess_char_5_06_b",2,"uniequip_002_etlchi",3019.79,1,6,3,95982,607,404,53,4], + ["p1",5,"op","chess_char_5_13_b",1,"uniequip_002_ghost2",3044.99,1,9,0,0,1919,1599,0,0], + ["p1",6,"op","chess_char_5_07_b",2,"uniequip_002_surtr",1929.36,1,27,1,41267,10336,5462,15,1], ["p1",7,"op","chess_char_5_02_b",2,"uniequip_002_titi",1439,1,4,0,0,0,0,0,0], - ["p1",8,"op","chess_char_5_03_b",2,"uniequip_002_blaze2",1472,1,7,4,73347,3678,355,86,3], - ["p1",9,"op","chess_char_5_10_b",2,"uniequip_002_lisa",1480,1,5,0,9757,2982,126,26,2], - ["p1",10,"op","chess_char_5_12_b",0,"uniequip_002_dusk",0,0,8,0,32447,4726,2939,19,16], + ["p1",8,"op","chess_char_5_03_b",2,"uniequip_002_blaze2",1472,1,7,4,122584,5575,548,142,5], + ["p1",9,"op","chess_char_5_10_b",2,"uniequip_002_lisa",1480,1,5,0,11978,4913,126,33,3], + ["p1",10,"op","chess_char_5_12_b",0,"uniequip_002_dusk",388.36,1,28,0,33311,6125,2939,22,17], ["p1","~1","token","token_10015_dusk_drgn",null,null,743.37,0,13,0,3474,2602,1349,11,null], - ["p1","~1","token","token_10039_ulpia_block",null,null,3500,1,23,0,0,0,0,0,null] + ["p1","~1","token","token_10039_ulpia_block",null,null,3500,0,23,0,0,0,0,0,null], + ["p1","~2","token","token_10015_dusk_drgn",null,null,1987,1,29,0,557,10,0,2,null] ], "enemies": { "enemy_1249_lysdb_2": [2,2,0,798,19907], "enemy_2009_csaudc": [2,2,0,1153,26542], "enemy_2010_csdcr": [1,1,0,1406,19907], - "enemy_2016_csphtm": [1,1,0,17884,195000], - "enemy_2017_csphts": [3,3,0,412,30000], + "enemy_2016_csphtm": [1,0,0,27098,309184], + "enemy_2017_csphts": [6,6,0,642,60000], "enemy_5601_entlec": [2,2,0,0,4958] }, - "hooks": [1,24,3922,251,251,462,719,3404,12,13,44,41,63,12249,707,11,11,0,1,10,0,2,28], - "events": {"atk":255,"deploy":13,"die":13,"dmg":537,"engage":8,"fx":143,"heal":160,"skill":85,"spawn":23,"status":140}, - "fx": {"anchor":1,"aoe":1,"blink":3,"bloodBattle":1,"burst":2,"candle":2,"dodge":28,"explode":16,"healAoe":16,"overload":2,"shieldBreak":2,"splash":63,"summon":4,"telegraph":1,"teleport":1}, - "snaps": "1b2c287a 84575a26 1c23dc29 a114deca 5e8b866c c0c03c4d 9ebcd846 d7bd3330 6e137b65 583ffd58 18058456 413f8a25 be2c8f46" + "hooks": [1,31,6000,375,375,706,1122,4310,15,18,58,58,105,17691,965,17,14,0,1,56,0,5,50], + "events": {"atk":382,"deploy":17,"die":18,"dmg":801,"engage":9,"fx":236,"heal":243,"skill":116,"spawn":27,"status":187}, + "fx": {"anchor":1,"aoe":1,"blink":6,"bloodBattle":1,"burst":5,"candle":2,"dodge":50,"ember":1,"explode":23,"healAoe":24,"overload":3,"revive":1,"shieldBreak":2,"splash":105,"summon":8,"telegraph":1,"teleport":2}, + "snaps": "f590883a a712b6dd b255bbd5 f78cda4f 758806a9 5e5f93f1 79f75949 8a9dca76 4286a3e5 800ebfde e5322f8b 59ee77b3 7ce86a8c 41b17c52 3c688679 d4dfba3e 1201055e fd81fa2a af7389a1 4c86818b" }, "boss-boss_6-pair": { - "about": "阿利斯泰尔,帝国余晖 pair pool 3980000: chess_char_5_19_b chess_char_4_01_b chess_char_5_14_b chess_char_5_17_b chess_char_5_15_b chess_char_5_20_b chess_char_5_21_b chess_char_5_22_b chess_char_5_23_b chess_char_4_02_b | chess_char_4_11_b chess_char_4_04_b chess_char_4_07_b chess_char_4_16_b chess_char_4_09_b chess_char_4_06_b chess_char_4_10_b chess_char_4_12_b chess_char_4_13_b chess_char_4_14_b token_10041_cathy_catsld token_10041_cathy_catsld", + "about": "阿利斯泰尔,帝国余晖 pair pool 7960000: chess_char_5_19_b chess_char_4_01_b chess_char_5_14_b chess_char_5_17_b chess_char_5_15_b chess_char_5_20_b chess_char_5_21_b chess_char_5_22_b chess_char_5_23_b chess_char_4_02_b | chess_char_4_11_b chess_char_4_04_b chess_char_4_07_b chess_char_4_16_b chess_char_4_09_b chess_char_4_06_b chess_char_4_10_b chess_char_4_12_b chess_char_4_13_b chess_char_4_14_b token_10041_cathy_catsld token_10041_cathy_catsld", "fast": false, "kind": "boss", "stageId": "act1autochess_m07", @@ -655,7 +670,7 @@ "killed": 4, "total": 6, "unspawned": 0, - "bossHpLeft": 2680590, + "bossHpLeft": 6660590, "rngDraws": 559, "errors": {"count":0,"kinds":[]}, "players": { @@ -731,10 +746,10 @@ "weightless": 6, "zone": 228 }, - "snaps": "a5dd1d4a baa7b7db 7c505a8e a4224e3d d53319fe 5b811158 536cda3e 52938381 3a7db0e7 6d0ad629 52d45c14 98ee7b24 5d759658 0207119c a227cfea dc0605ed 7a6f9851 53a205a7 a69e6594 bc79ec80" + "snaps": "5feb83ed f13ed3b4 56be9cfd 39b0aa8a e95d527f 3acb6fe4 5cf64994 3a284512 941757f8 a04e88b3 04d5b3e2 1390b339 3e94c413 ad43bd42 f1b1463c af767763 1630b47b 0444ec4e 3be9c125 022e8e64" }, "boss-boss_6-solo": { - "about": "阿利斯泰尔,帝国余晖 solo pool 995000: chess_char_4_17_b chess_char_4_18_b chess_char_4_23_b chess_char_4_19_b chess_char_4_22_b chess_char_4_20_b chess_char_4_21_b chess_char_4_24_b chess_char_4_25_b chess_char_4_26_b", + "about": "阿利斯泰尔,帝国余晖 solo pool 3980000: chess_char_4_17_b chess_char_4_18_b chess_char_4_23_b chess_char_4_19_b chess_char_4_22_b chess_char_4_20_b chess_char_4_21_b chess_char_4_24_b chess_char_4_25_b chess_char_4_26_b", "fast": false, "kind": "boss", "stageId": "act1autochess_m01", @@ -748,7 +763,7 @@ "killed": 8, "total": 10, "unspawned": 0, - "bossHpLeft": 857526, + "bossHpLeft": 3842526, "rngDraws": 34, "errors": {"count":0,"kinds":[]}, "players": {"p1":{"killed":8,"total":10,"perfect":false,"leaks":2,"leaksUncounted":0,"coins":0,"dmg":167232,"bossDmg":137474,"heal":604,"deaths":15,"layerGains":{}}}, @@ -782,10 +797,10 @@ "hooks": [1,48,6000,136,136,190,390,568,32,34,20,19,0,6051,17,2,20,2,1,23,0,0,0], "events": {"atk":146,"deploy":22,"die":32,"dmg":173,"engage":6,"fx":74,"leak":2,"skill":41,"spawn":36,"status":72}, "fx": {"equip":14,"featherArrow":7,"flame":2,"garrisonGrant":1,"jungleSoul":2,"mote":5,"rockslide":1,"sandChains":4,"slash":18,"summon":2,"sword":2,"telegraph":11,"truesilver":4,"vest":1}, - "snaps": "16efbed3 c6eab4c3 36a06323 767b62a6 78aa6552 2fa3fc29 68b41c7b 8c29c3ba 27dd548e 02f56ffd 2dae0f9d e4c48324 9fda663e 17dc5d3d 084ac944 bffd930a 2a09fa38 cc661eb5 b706b3b0 cbbaa981" + "snaps": "b620c538 29ced61a 34d17ee4 2b0390a5 24ac6a3d 2ed777da 1334b711 7d03c205 e4c1174f d8acc1b5 3dc9a7e9 7d96e67a 70d5eaf5 90224909 ce3fc917 64345a66 402a0b35 f3039ebf 7893ba7a df4e011d" }, "boss-boss_7-pair": { - "about": "“萨米的意志” pair pool 2000000: chess_char_6_03_b chess_char_6_06_b chess_char_6_07_b chess_char_6_01_b chess_char_6_02_b chess_char_6_04_b chess_char_6_05_b chess_char_6_08_b chess_char_6_09_b chess_char_6_11_b token_10017_skadi2_dedant token_10030_mlyss_wtrman | chess_char_6_15_b chess_char_6_19_b chess_char_5_01_b chess_char_6_17_b chess_char_6_12_b chess_char_6_13_b chess_char_6_14_b chess_char_6_16_b chess_char_6_18_b chess_char_6_20_b", + "about": "“萨米的意志” pair pool 4000000: chess_char_6_03_b chess_char_6_06_b chess_char_6_07_b chess_char_6_01_b chess_char_6_02_b chess_char_6_04_b chess_char_6_05_b chess_char_6_08_b chess_char_6_09_b chess_char_6_11_b token_10017_skadi2_dedant token_10030_mlyss_wtrman | chess_char_6_15_b chess_char_6_19_b chess_char_5_01_b chess_char_6_17_b chess_char_6_12_b chess_char_6_13_b chess_char_6_14_b chess_char_6_16_b chess_char_6_18_b chess_char_6_20_b", "fast": true, "kind": "boss", "stageId": "act1autochess_m06", @@ -793,63 +808,67 @@ "round": 14, "seed": 120974514, "waveId": "act1autochess_h07_07", - "time": 144.33, - "ticks": 4330, - "reason": "cleared", + "time": 200, + "ticks": 6000, + "reason": "forced", "killed": 16, "total": 16, "unspawned": 0, - "bossHpLeft": 0, - "rngDraws": 666, + "bossHpLeft": 986716, + "rngDraws": 849, "errors": {"count":0,"kinds":[]}, "players": { - "p1": {"killed":16,"total":16,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":630171,"bossDmg":586902,"heal":20762,"deaths":0,"layerGains":{}}, - "p2": {"killed":0,"total":0,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":1842809,"bossDmg":1413098,"heal":34015,"deaths":0,"layerGains":{}} + "p1": {"killed":16,"total":16,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":915979,"bossDmg":872710,"heal":29371,"deaths":0,"layerGains":{}}, + "p2": {"killed":0,"total":0,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":2570285,"bossDmg":2140574,"heal":38904,"deaths":0,"layerGains":{}} }, "units": [ - ["p1",1,"op","chess_char_6_03_b",2,"uniequip_002_yu",4472.72,1,5,0,0,0,0,0,0], - ["p1",2,"op","chess_char_6_06_b",2,"uniequip_002_pepe",3832.46,1,7,0,0,0,0,0,0], - ["p1",3,"op","chess_char_6_07_b",2,"uniequip_002_siege2",4043.7,1,11,0,0,0,0,0,0], - ["p1",4,"op","chess_char_6_01_b",2,"uniequip_002_lemuen",1916.88,1,1,1,185852,0,0,78,0], - ["p1",5,"op","chess_char_6_02_b",2,"uniequip_002_sbell2",2520.63,1,9,0,0,0,0,0,0], - ["p1",6,"op","chess_char_6_04_b",2,"uniequip_002_skadi2",2083.79,1,17,0,32940,15589,1256,0,4], - ["p1",7,"op","chess_char_6_05_b",2,"uniequip_002_pasngr",1880.37,1,3,0,0,0,0,0,0], - ["p1",8,"op","chess_char_6_08_b",2,"uniequip_002_reed2",2175.07,1,13,0,113952,0,17614,101,3], - ["p1",9,"op","chess_char_6_09_b",0,"uniequip_002_cello",1723.89,1,15,1,193562,539,0,38,38], - ["p1",10,"op","chess_char_6_11_b",2,"uniequip_002_mlyss",2468.47,1,19,0,81362,11533,1148,139,4], + ["p1",1,"op","chess_char_6_03_b",2,"uniequip_002_yu",3430,1,5,0,0,0,0,0,0], + ["p1",2,"op","chess_char_6_06_b",2,"uniequip_002_pepe",2939,1,7,0,0,0,0,0,0], + ["p1",3,"op","chess_char_6_07_b",2,"uniequip_002_siege2",3101,1,11,0,0,0,0,0,0], + ["p1",4,"op","chess_char_6_01_b",2,"uniequip_002_lemuen",1470,1,1,1,273645,0,0,109,0], + ["p1",5,"op","chess_char_6_02_b",2,"uniequip_002_sbell2",1933,1,9,0,0,0,0,0,0], + ["p1",6,"op","chess_char_6_04_b",2,"uniequip_002_skadi2",1311.78,1,17,0,41684,20018,1371,0,5], + ["p1",7,"op","chess_char_6_05_b",2,"uniequip_002_pasngr",1442,1,3,0,0,0,0,0,0], + ["p1",8,"op","chess_char_6_08_b",2,"uniequip_002_reed2",1668,1,13,0,161605,0,25003,140,4], + ["p1",9,"op","chess_char_6_09_b",0,"uniequip_002_cello",1322,1,15,0,272107,539,0,51,51], + ["p1",10,"op","chess_char_6_11_b",2,"uniequip_002_mlyss",1165.8,1,19,0,124754,14725,1268,195,5], ["p1",11,"token","token_10017_skadi2_dedant",null,null,130.4,0,22,0,0,0,0,0,null], ["p1",12,"token","token_10030_mlyss_wtrman",null,null,0,0,20,0,5321,2876,0,18,1], - ["p2",13,"op","chess_char_6_15_b",2,"uniequip_002_qiubai",4502.02,1,26,4,275746,0,0,93,3], - ["p2",14,"op","chess_char_6_19_b",2,"uniequip_002_blkkgt",3608.17,1,2,0,0,0,0,0,0], - ["p2",15,"op","chess_char_5_01_b",1,"uniequip_002_excu2",3017.46,1,6,0,0,0,0,0,0], - ["p2",16,"op","chess_char_6_17_b",2,"uniequip_002_nearl2",7020.72,1,31,2,91620,12855,0,29,3], - ["p2",17,"op","chess_char_6_12_b",1,"uniequip_002_rosmon",2898.35,1,16,4,305737,8640,0,53,3], - ["p2",18,"op","chess_char_6_13_b",1,"uniequip_002_angel2",2888.36,1,21,4,841731,3871,1843,250,5], - ["p2",19,"op","chess_char_6_14_b",2,"uniequip_002_lumen",2476.3,1,8,0,0,0,0,0,0], - ["p2",20,"op","chess_char_6_16_b",2,"uniequip_002_halo2",1876.46,1,12,0,108450,0,0,89,3], - ["p2",21,"op","chess_char_6_18_b",2,"uniequip_002_whitw2",2009.46,1,14,0,219525,0,0,55,2], - ["p2",22,"op","chess_char_6_20_b",2,"uniequip_002_agoat2",1970.34,1,18,0,0,1120,32171,49,2], + ["p2",13,"op","chess_char_6_15_b",2,"uniequip_002_qiubai",3985.92,1,26,4,383307,0,0,140,3], + ["p2",14,"op","chess_char_6_19_b",2,"uniequip_002_blkkgt",2767,1,2,0,0,0,0,0,0], + ["p2",15,"op","chess_char_5_01_b",1,"uniequip_002_excu2",2314,1,6,0,0,0,0,0,0], + ["p2",16,"op","chess_char_6_17_b",2,"uniequip_002_nearl2",5651.46,1,31,2,147913,14673,0,46,3], + ["p2",17,"op","chess_char_6_12_b",1,"uniequip_002_rosmon",2185.84,1,16,4,402512,12000,0,74,4], + ["p2",18,"op","chess_char_6_13_b",1,"uniequip_002_angel2",2392.2,1,21,4,1163237,5257,2365,336,7], + ["p2",19,"op","chess_char_6_14_b",2,"uniequip_002_lumen",1899,1,8,0,0,0,0,0,0], + ["p2",20,"op","chess_char_6_16_b",2,"uniequip_002_halo2",1439,1,12,0,150368,0,0,119,4], + ["p2",21,"op","chess_char_6_18_b",2,"uniequip_002_whitw2",1541,1,14,0,322948,0,0,77,3], + ["p2",22,"op","chess_char_6_20_b",2,"uniequip_002_agoat2",1631.88,1,18,0,0,1120,36540,68,2], ["p1","~1","token","token_10030_mlyss_wtrman",null,null,893.08,0,34,1,6541,1574,743,16,null], ["p1","~2","token","token_10030_mlyss_wtrman",null,null,0,0,41,0,3698,2070,0,8,1], ["p1","~1","token","token_10017_skadi2_dedant",null,null,100,0,42,0,0,0,0,0,null], - ["p1","~3","token","token_10030_mlyss_wtrman",null,null,0,0,46,0,2081,1322,0,6,1], + ["p1","~3","token","token_10030_mlyss_wtrman",null,null,0,0,46,0,2973,1354,0,6,1], ["p1","~2","token","token_10017_skadi2_dedant",null,null,130.4,0,48,0,0,0,0,0,null], - ["p1","~4","token","token_10030_mlyss_wtrman",null,null,1048.86,1,49,0,3949,1128,0,11,1], - ["p1","~5","token","token_10030_mlyss_wtrman",null,null,1723.89,1,50,0,912,0,0,2,null] + ["p1","~4","token","token_10030_mlyss_wtrman",null,null,572.66,1,49,0,14223,2322,0,42,1], + ["p1","~5","token","token_10030_mlyss_wtrman",null,null,0,0,50,0,2157,2435,820,8,null], + ["p1","~6","token","token_10030_mlyss_wtrman",null,null,0,0,51,0,4167,1322,0,7,null], + ["p1","~3","token","token_10017_skadi2_dedant",null,null,100,0,52,0,0,0,0,0,null], + ["p1","~7","token","token_10030_mlyss_wtrman",null,null,0,0,53,0,2218,1429,107,5,null], + ["p1","~8","token","token_10030_mlyss_wtrman",null,null,408.66,1,54,0,885,972,59,3,null] ], "enemies": { "enemy_1067_snslime": [8,8,0,9423,111795], "enemy_1081_sotisd": [4,4,0,708,257989], "enemy_1249_lysdb_2": [4,4,0,0,103196], - "enemy_9033_acdeer": [1,1,0,32950,2000000] + "enemy_9033_acdeer": [1,0,0,48071,3013284] }, - "hooks": [1,48,4330,1042,1042,2602,2869,2311,20,26,74,65,201,28101,1210,4,17,0,1,19,0,10,0], - "events": {"atk":1213,"deploy":31,"die":26,"dmg":2635,"engage":16,"fx":419,"heal":416,"skill":139,"spawn":46,"status":432}, - "fx": {"airstrike":72,"beam":3,"blink":2,"burst":10,"column":36,"copy":4,"dp":4,"drone":235,"droneLock":12,"drones":2,"explode":6,"garrisonGrant":1,"link":1,"phase":1,"shieldBreak":4,"snow":5,"split":2,"steal":5,"sunBurst":4,"talent":4,"tide":4,"wanted":2}, - "snaps": "3159bc57 5a868dfc 1317f752 766b1ac3 ae4704fd 8b8561f0 0cf3e025 1cc4fae8 2ab8c69e 1c36a709 27dce433 db53cc68 922ea938 44d1d981 4325d4fb" + "hooks": [1,52,6000,1475,1475,3513,3867,3107,22,29,95,90,263,39065,1638,4,17,0,1,22,0,13,0], + "events": {"atk":1666,"deploy":35,"die":29,"dmg":3557,"engage":19,"fx":565,"heal":514,"skill":185,"spawn":50,"status":588}, + "fx": {"airstrike":92,"beam":4,"blink":2,"burst":13,"column":47,"copy":4,"dp":5,"drone":334,"droneLock":16,"drones":3,"explode":6,"garrisonGrant":1,"link":1,"phase":1,"shieldBreak":4,"snow":5,"split":5,"steal":7,"sunBurst":4,"talent":4,"tide":5,"wanted":2}, + "snaps": "aac21795 826f3a92 c07605ac 63ba2617 10d034dd f637231c 679eaf63 4484256d 932a1025 95a8f717 9f641051 49ed0ece cc247786 d907a3ce 4899d3c0 a603253f 2e8677a7 fc4cd6c6 ce276a0b 7cb6d808" }, "boss-boss_7-solo": { - "about": "“萨米的意志” solo pool 500000: chess_char_5_08_b chess_char_5_11_b chess_char_5_05_b chess_char_5_06_b chess_char_5_13_b chess_char_5_07_b chess_char_5_02_b chess_char_5_03_b chess_char_5_10_b chess_char_5_12_b", + "about": "“萨米的意志” solo pool 2000000: chess_char_5_08_b chess_char_5_11_b chess_char_5_05_b chess_char_5_06_b chess_char_5_13_b chess_char_5_07_b chess_char_5_02_b chess_char_5_03_b chess_char_5_10_b chess_char_5_12_b", "fast": false, "kind": "boss", "stageId": "act2autochess_m04", @@ -863,39 +882,39 @@ "killed": 11, "total": 11, "unspawned": 0, - "bossHpLeft": 107352, - "rngDraws": 3, + "bossHpLeft": 1319558, + "rngDraws": 2, "errors": {"count":0,"kinds":[]}, - "players": {"p1":{"killed":11,"total":11,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":552702,"bossDmg":392648,"heal":88645,"deaths":5,"layerGains":{}}}, + "players": {"p1":{"killed":11,"total":11,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":840496,"bossDmg":680442,"heal":64163,"deaths":2,"layerGains":{}}}, "units": [ - ["p1",1,"op","chess_char_5_08_b",2,"uniequip_002_horn",2775,1,5,0,156858,10701,0,262,4], - ["p1",2,"op","chess_char_5_11_b",1,"uniequip_002_demkni",4804.8,1,6,0,0,3306,75096,0,35], - ["p1",3,"op","chess_char_5_05_b",2,"uniequip_002_ulpia",8382,1,33,10,171525,27994,6412,16,3], - ["p1",4,"op","chess_char_5_06_b",2,"uniequip_002_etlchi",1647.4,1,36,1,2872,5769,2472,2,1], - ["p1",5,"op","chess_char_5_13_b",1,"uniequip_002_ghost2",4012.8,1,4,0,0,7608,0,0,0], - ["p1",6,"op","chess_char_5_07_b",2,"uniequip_002_surtr",1,0,32,0,148849,37895,1568,62,2], - ["p1",7,"op","chess_char_5_02_b",2,"uniequip_002_titi",2446.3,1,1,0,0,10764,0,0,0], - ["p1",8,"op","chess_char_5_03_b",2,"uniequip_002_blaze2",1472,1,2,0,0,10452,0,0,0], - ["p1",9,"op","chess_char_5_10_b",2,"uniequip_002_lisa",0,0,34,0,9619,4901,1941,20,2], - ["p1",10,"op","chess_char_5_12_b",0,"uniequip_002_dusk",0,0,35,0,62980,4730,1156,31,20], + ["p1",1,"op","chess_char_5_08_b",2,"uniequip_002_horn",2775,1,5,0,290413,8125,0,262,4], + ["p1",2,"op","chess_char_5_11_b",1,"uniequip_002_demkni",4804.8,1,6,0,0,0,55810,0,33], + ["p1",3,"op","chess_char_5_05_b",2,"uniequip_002_ulpia",8382,1,34,10,171135,25183,6052,16,3], + ["p1",4,"op","chess_char_5_06_b",2,"uniequip_002_etlchi",2622,1,7,1,4576,0,0,3,2], + ["p1",5,"op","chess_char_5_13_b",1,"uniequip_002_ghost2",4012.8,1,4,0,0,0,0,0,0], + ["p1",6,"op","chess_char_5_07_b",2,"uniequip_002_surtr",1,0,33,0,208640,37544,1568,62,2], + ["p1",7,"op","chess_char_5_02_b",2,"uniequip_002_titi",2446.3,1,1,0,0,9108,0,0,0], + ["p1",8,"op","chess_char_5_03_b",2,"uniequip_002_blaze2",1472,1,2,0,0,8844,0,0,0], + ["p1",9,"op","chess_char_5_10_b",2,"uniequip_002_lisa",0,0,35,0,10906,3693,733,20,2], + ["p1",10,"op","chess_char_5_12_b",0,"uniequip_002_dusk",1787,1,10,0,154826,0,0,69,49], ["p1","~1","token","token_10039_ulpia_block",null,null,3500,0,15,0,0,0,0,0,null], ["p1","~2","token","token_10039_ulpia_block",null,null,3500,0,24,0,0,0,0,0,null], - ["p1","~3","token","token_10039_ulpia_block",null,null,3500,0,30,0,0,0,0,0,null] + ["p1","~3","token","token_10039_ulpia_block",null,null,3500,0,31,0,0,0,0,0,null] ], "enemies": { "enemy_1061_zomshd": [2,2,0,0,33564], "enemy_1067_snslime": [5,5,0,2108,26957], "enemy_1081_sotisd": [4,4,0,2460,99533], - "enemy_5601_entlec": [1,1,0,0,0], - "enemy_9033_acdeer": [1,0,0,79550,392648] + "enemy_5601_entlec": [2,2,0,0,0], + "enemy_9033_acdeer": [1,0,0,48277,680442] }, - "hooks": [1,36,6000,396,396,565,1162,1868,17,22,67,67,0,14639,555,2,13,0,1,99,0,0,0], - "events": {"atk":401,"deploy":23,"die":22,"dmg":565,"engage":6,"fx":125,"heal":153,"skill":134,"spawn":26,"status":131}, - "fx": {"anchor":3,"aoe":2,"beam":5,"camouflage":1,"candle":1,"column":58,"ember":2,"explode":5,"healAoe":35,"overload":4,"phase":1,"reborn":2,"teleport":6}, - "snaps": "fb57a457 f79395da 67f61a4b a8042b07 2dee2fd5 02b7c25a e9445be9 f344d34a 6f0b4eb4 3953b4c7 7ed45175 e8dd0faa 17f63523 447c0320 d01edb81 70ff9dfc cfd63d5d cc791f1d 113661fb ec526ae4" + "hooks": [1,35,6000,435,435,539,1134,815,15,20,95,95,0,18590,552,2,14,0,1,95,0,0,0], + "events": {"atk":440,"deploy":21,"die":20,"dmg":539,"engage":6,"fx":94,"heal":110,"skill":190,"spawn":27,"status":120}, + "fx": {"anchor":3,"aoe":2,"beam":3,"candle":2,"column":34,"ember":2,"explode":5,"healAoe":33,"overload":4,"teleport":6}, + "snaps": "eb33b39d a3dc1508 a8dab4af ce053ad5 bbc47699 08af8d87 9ea7fa7b 720ed784 6d400ccf 2298e8da 8785b24a 0468f236 5be4de5d 44993753 6997a66e 90386686 a0d2730a b29e52dc 8aec02d2 e081bd25" }, "hidden-boss_8-pair": { - "about": "假想敌:胄 pair pool 7200000: chess_char_5_19_b chess_char_4_01_b chess_char_5_14_b chess_char_5_17_b chess_char_5_15_b chess_char_5_20_b chess_char_5_21_b chess_char_5_22_b chess_char_5_23_b chess_char_4_02_b | chess_char_4_11_b chess_char_4_04_b chess_char_4_07_b chess_char_4_16_b chess_char_4_09_b chess_char_4_06_b chess_char_4_10_b chess_char_4_12_b chess_char_4_13_b chess_char_4_14_b token_10041_cathy_catsld token_10041_cathy_catsld", + "about": "假想敌:胄 pair pool 14400000: chess_char_5_19_b chess_char_4_01_b chess_char_5_14_b chess_char_5_17_b chess_char_5_15_b chess_char_5_20_b chess_char_5_21_b chess_char_5_22_b chess_char_5_23_b chess_char_4_02_b | chess_char_4_11_b chess_char_4_04_b chess_char_4_07_b chess_char_4_16_b chess_char_4_09_b chess_char_4_06_b chess_char_4_10_b chess_char_4_12_b chess_char_4_13_b chess_char_4_14_b token_10041_cathy_catsld token_10041_cathy_catsld", "fast": false, "kind": "hidden", "stageId": "act1autochess_m05", @@ -909,12 +928,12 @@ "killed": 13, "total": 18, "unspawned": 0, - "bossHpLeft": 6125411, + "bossHpLeft": 12749411, "rngDraws": 469, "errors": {"count":0,"kinds":[]}, "players": { - "p1": {"killed":13,"total":18,"perfect":false,"leaks":2,"leaksUncounted":0,"coins":0,"dmg":1494144,"bossDmg":574264,"heal":34974,"deaths":19,"layerGains":{}}, - "p2": {"killed":0,"total":0,"perfect":false,"leaks":2,"leaksUncounted":0,"coins":0,"dmg":775494,"bossDmg":499168,"heal":3526,"deaths":23,"layerGains":{}} + "p1": {"killed":13,"total":18,"perfect":false,"leaks":2,"leaksUncounted":0,"coins":0,"dmg":1782144,"bossDmg":862264,"heal":34974,"deaths":19,"layerGains":{}}, + "p2": {"killed":0,"total":0,"perfect":false,"leaks":2,"leaksUncounted":0,"coins":0,"dmg":1063494,"bossDmg":787168,"heal":3526,"deaths":23,"layerGains":{}} }, "units": [ ["p1",1,"op","chess_char_5_19_b",2,"uniequip_002_mlynar",0,0,73,2,70060,30258,344,15,1], @@ -923,8 +942,8 @@ ["p1",4,"op","chess_char_5_17_b",1,"uniequip_002_f12yin",5476,1,88,0,43232,18483,434,21,3], ["p1",5,"op","chess_char_5_15_b",1,"uniequip_002_thorn2",161.56,1,79,2,719512,4898,9898,98,11], ["p1",6,"op","chess_char_5_20_b",2,"uniequip_002_aglina",2764,1,93,1,69538,10605,41,18,2], - ["p1",7,"op","chess_char_5_21_b",1,"uniequip_002_sntlla",2053.18,1,83,1,144400,7730,9,2,1], - ["p1",8,"op","chess_char_5_22_b",1,"uniequip_002_nymph",1084.8,1,72,1,380208,5369,9,40,13], + ["p1",7,"op","chess_char_5_21_b",1,"uniequip_002_sntlla",2053.18,1,83,1,288400,7730,9,2,1], + ["p1",8,"op","chess_char_5_22_b",1,"uniequip_002_nymph",1084.8,1,72,1,524208,5369,9,40,13], ["p1",9,"op","chess_char_5_23_b",1,"uniequip_002_reckpr",3220,1,90,0,0,11772,20169,18,2], ["p1",10,"op","chess_char_4_02_b",2,"uniequip_002_mostma",0,0,80,1,13692,10170,0,9,1], ["p2",11,"op","chess_char_4_11_b",1,"uniequip_002_cathy",0,0,75,0,0,7525,137,0,2], @@ -932,10 +951,10 @@ ["p2",13,"op","chess_char_4_07_b",1,"uniequip_002_bpipe",4170.25,1,92,1,15991,9948,1608,6,3], ["p2",14,"op","chess_char_4_16_b",2,"uniequip_002_texas2",1619,1,87,0,78679,12401,119,22,8], ["p2",15,"op","chess_char_4_09_b",1,"uniequip_002_mizuki",0,0,67,0,126046,8396,309,30,3], - ["p2",16,"op","chess_char_4_06_b",1,"uniequip_002_kroos2",0,0,71,1,157353,3122,0,77,1], + ["p2",16,"op","chess_char_4_06_b",1,"uniequip_002_kroos2",0,0,71,1,301353,3122,0,77,1], ["p2",17,"op","chess_char_4_10_b",1,"uniequip_002_aroma",0,0,20,0,52829,6922,264,53,2], ["p2",18,"op","chess_char_4_12_b",2,"uniequip_002_glady",2232,1,86,0,42669,2582,350,30,3], - ["p2",19,"op","chess_char_4_13_b",1,"uniequip_002_gnosis",0,0,63,2,212112,4467,489,68,20], + ["p2",19,"op","chess_char_4_13_b",1,"uniequip_002_gnosis",0,0,63,2,356112,4467,489,68,20], ["p2",20,"op","chess_char_4_14_b",1,"uniequip_002_lionhd",0,0,64,1,62422,3497,245,25,4], ["p2",21,"token","token_10041_cathy_catsld",null,null,100,1,21,0,0,0,0,0,null], ["p2",22,"token","token_10041_cathy_catsld",null,null,100,1,22,0,0,0,0,0,null] @@ -944,7 +963,7 @@ "enemy_10027_vtsk": [6,1,4,138886,892170], "enemy_1005_yokai": [4,4,0,0,1600], "enemy_1229_darmy_2": [8,8,0,3486,294231], - "enemy_9013_acstmk_2": [1,0,0,45577,1074589], + "enemy_9013_acstmk_2": [1,0,0,45577,1650589], "enemy_9014_acstma": [5,4,0,2385,30898], "enemy_9015_acstmb": [2,1,0,8977,5739], "enemy_9016_acstmr": [8,7,0,0,41] @@ -991,10 +1010,10 @@ "weightless": 2, "zone": 184 }, - "snaps": "4c3e3ba2 dc8ff7e6 31c920d5 7d65270e 2c533ead 863ba42f 8c7a019b b209debf 6fe4c51a 7857270a b1ed1345 e565d3b2 247ca8f2 3faf94f2 d936cd87 59546b2a 097fdfc5 75a58ae0 58b2be69 2f8e040a" + "snaps": "1b4d1c90 5e89ae3a 18b0277b 718ea4d9 fb14ee3f 2c5d7b5a 90a9e918 535d6535 ff46bb00 d6a87ebe a53bce20 63043c57 e1656d7b 7fb55cb8 8d7c7ef0 ced6863b 72e4c7b9 574e2998 fcaf465c 0ac59845" }, "hidden-boss_8-solo": { - "about": "假想敌:胄 solo pool 1800000: chess_char_4_17_b chess_char_4_18_b chess_char_4_23_b chess_char_4_19_b chess_char_4_22_b chess_char_4_20_b chess_char_4_21_b chess_char_4_24_b chess_char_4_25_b chess_char_4_26_b", + "about": "假想敌:胄 solo pool 7200000: chess_char_4_17_b chess_char_4_18_b chess_char_4_23_b chess_char_4_19_b chess_char_4_22_b chess_char_4_20_b chess_char_4_21_b chess_char_4_24_b chess_char_4_25_b chess_char_4_26_b", "fast": false, "kind": "hidden", "stageId": "act2autochess_m03", @@ -1008,16 +1027,16 @@ "killed": 6, "total": 16, "unspawned": 0, - "bossHpLeft": 1626440, + "bossHpLeft": 6810440, "rngDraws": 230, "errors": {"count":0,"kinds":[]}, - "players": {"p1":{"killed":6,"total":16,"perfect":false,"leaks":10,"leaksUncounted":0,"coins":0,"dmg":214027,"bossDmg":173560,"heal":30839,"deaths":21,"layerGains":{}}}, + "players": {"p1":{"killed":6,"total":16,"perfect":false,"leaks":10,"leaksUncounted":0,"coins":0,"dmg":430027,"bossDmg":389560,"heal":30839,"deaths":21,"layerGains":{}}}, "units": [ ["p1",1,"op","chess_char_4_17_b",1,"uniequip_002_hsguma",0,0,6,1,366,8626,0,14,0], ["p1",2,"op","chess_char_4_18_b",1,"uniequip_002_mudrok",0,0,36,3,17870,18617,6409,9,6], ["p1",3,"op","chess_char_4_23_b",2,"uniequip_002_gvial2",0,0,7,0,0,2811,0,0,0], ["p1",4,"op","chess_char_4_19_b",2,"uniequip_002_flamtl",0,0,53,0,0,12061,0,0,0], - ["p1",5,"op","chess_char_4_22_b",2,"uniequip_002_svrash",2569,1,11,4,160508,0,140,154,3], + ["p1",5,"op","chess_char_4_22_b",2,"uniequip_002_svrash",2569,1,11,4,376508,0,140,154,3], ["p1",6,"op","chess_char_4_20_b",2,"uniequip_002_fartth",0,0,32,0,3368,2838,0,5,0], ["p1",7,"op","chess_char_4_21_b",1,"uniequip_002_plosis",0,0,48,0,0,6595,12135,35,4], ["p1",8,"op","chess_char_4_24_b",1,"uniequip_002_billro",0,0,13,0,31916,6074,939,21,1], @@ -1033,7 +1052,7 @@ "enemy_1005_yokai": [4,2,2,0,800], "enemy_1197_sfshu": [3,2,1,80,19661], "enemy_1198_msfshu": [6,2,4,0,9], - "enemy_9013_acstmk_2": [1,0,0,38158,173560], + "enemy_9013_acstmk_2": [1,0,0,38158,389560], "enemy_9014_acstma": [3,2,0,0,1865], "enemy_9015_acstmb": [4,3,0,4799,0], "enemy_9016_acstmr": [6,6,0,0,22] @@ -1041,10 +1060,10 @@ "hooks": [1,56,6000,313,313,552,552,869,38,48,16,16,0,5467,46,4,30,10,1,32,0,0,0], "events": {"atk":365,"deploy":22,"die":38,"dmg":545,"engage":5,"fx":181,"heal":79,"leak":10,"skill":33,"spawn":44,"status":141}, "fx": {"bandage":1,"beam":33,"blink":11,"block":8,"charge":6,"explode":9,"garrisonGrant":1,"healField":4,"mote":4,"redistribute":5,"reweave":1,"rockslide":6,"sandChains":1,"shell":6,"shieldBreak":7,"slash":57,"spGift":5,"summon":6,"telegraph":3,"thorns":4,"truesilver":3}, - "snaps": "042ed945 989a7c29 cad5cf3a c674e50b f4dbe498 3d0e9f0a 50ed1de6 8dc4742b 28848e61 9de6fa6d 89a49b69 32117c89 30fa7867 594fb173 0f76ca3b 00706a51 437c7152 a57714b3 9599c159 11e36c9e" + "snaps": "c4c16f4a ddad744b 0ec6d0a5 6cb40df0 b236a93e cb798820 ca99623b cba70a39 80d89436 d2c74f1b fc6586fc acf0d6cf 27a8ebae 816ae142 dae36003 48c83f46 040cf0ab f675868b bf456a17 84add322" }, "hidden-boss_9-pair": { - "about": "假想敌:铳 pair pool 2800000: chess_char_6_03_b chess_char_6_06_b chess_char_6_07_b chess_char_6_01_b chess_char_6_02_b chess_char_6_04_b chess_char_6_05_b chess_char_6_08_b chess_char_6_09_b chess_char_6_11_b token_10017_skadi2_dedant token_10030_mlyss_wtrman | chess_char_6_15_b chess_char_6_19_b chess_char_5_01_b chess_char_6_17_b chess_char_6_12_b chess_char_6_13_b chess_char_6_14_b chess_char_6_16_b chess_char_6_18_b chess_char_6_20_b", + "about": "假想敌:铳 pair pool 5600000: chess_char_6_03_b chess_char_6_06_b chess_char_6_07_b chess_char_6_01_b chess_char_6_02_b chess_char_6_04_b chess_char_6_05_b chess_char_6_08_b chess_char_6_09_b chess_char_6_11_b token_10017_skadi2_dedant token_10030_mlyss_wtrman | chess_char_6_15_b chess_char_6_19_b chess_char_5_01_b chess_char_6_17_b chess_char_6_12_b chess_char_6_13_b chess_char_6_14_b chess_char_6_16_b chess_char_6_18_b chess_char_6_20_b", "fast": true, "kind": "hidden", "stageId": "act1autochess_m04", @@ -1058,11 +1077,11 @@ "killed": 8, "total": 8, "unspawned": 0, - "bossHpLeft": 1250394, + "bossHpLeft": 4049210, "rngDraws": 1680, "errors": {"count":0,"kinds":[]}, "players": { - "p1": {"killed":8,"total":8,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":1425643,"bossDmg":596498,"heal":13214,"deaths":5,"layerGains":{}}, + "p1": {"killed":8,"total":8,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":1426827,"bossDmg":597682,"heal":13214,"deaths":5,"layerGains":{}}, "p2": {"killed":0,"total":0,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":2554978,"bossDmg":913911,"heal":130784,"deaths":8,"layerGains":{}} }, "units": [ @@ -1072,7 +1091,7 @@ ["p1",4,"op","chess_char_6_01_b",2,"uniequip_002_lemuen",99.06,1,7,1,1043569,3226,0,57,8], ["p1",5,"op","chess_char_6_02_b",2,"uniequip_002_sbell2",931.61,1,9,0,31824,10406,0,46,2], ["p1",6,"op","chess_char_6_04_b",2,"uniequip_002_skadi2",745.66,1,52,0,8749,9134,562,0,4], - ["p1",7,"op","chess_char_6_05_b",2,"uniequip_002_pasngr",2451.4,1,13,1,80397,0,0,0,11], + ["p1",7,"op","chess_char_6_05_b",2,"uniequip_002_pasngr",2451.4,1,13,1,81581,0,0,0,11], ["p1",8,"op","chess_char_6_08_b",2,"uniequip_002_reed2",1668,1,19,1,32005,0,7161,70,2], ["p1",9,"op","chess_char_6_09_b",0,"uniequip_002_cello",0,0,21,1,131535,12922,0,27,27], ["p1",10,"op","chess_char_6_11_b",2,"uniequip_002_mlyss",1893,1,56,0,14353,9097,349,78,2], @@ -1106,7 +1125,7 @@ "enemies": { "enemy_1267_nhpbr_2": [6,6,0,2895,141894], "enemy_9007_acelem": [2,2,0,23398,309587], - "enemy_9017_achunt_2": [2,0,0,59262,1549606], + "enemy_9017_achunt_2": [2,0,0,59262,1550790], "enemy_9018_actrpa": [1,0,0,43264,577004], "enemy_9019_actrpb": [1,0,0,21943,535849], "enemy_9020_actrpc": [1,0,0,24229,938579] @@ -1154,10 +1173,10 @@ "wanted": 6, "zone": 6 }, - "snaps": "f645513b 06688205 c3e814cd fdcdd2b5 5c3631ce 11287136 b42fd177 bf601739 c3dd47cb 15454498 39ddf8e6 b700b12e c9c51c9f 6c8d0f0c 44eba6d9 881b02e6 5eaf02a0 88975197 c4b32556 c53c7de8" + "snaps": "9797dd57 d3ba8d58 32d06887 bf42877c 1994874a e5491557 66d383f3 1312fd65 b74b9f4a 2f28845d ead771e6 c391a1a4 f923753b 23bee15f caa10968 93e7fa5f 8c6cfd06 4d79d333 2710458e 1a607645" }, "hidden-boss_9-solo": { - "about": "假想敌:铳 solo pool 700000: chess_char_5_08_b chess_char_5_11_b chess_char_5_05_b chess_char_5_06_b chess_char_5_13_b chess_char_5_07_b chess_char_5_02_b chess_char_5_03_b chess_char_5_10_b chess_char_5_12_b", + "about": "假想敌:铳 solo pool 2800000: chess_char_5_08_b chess_char_5_11_b chess_char_5_05_b chess_char_5_06_b chess_char_5_13_b chess_char_5_07_b chess_char_5_02_b chess_char_5_03_b chess_char_5_10_b chess_char_5_12_b", "fast": false, "kind": "hidden", "stageId": "act2autochess_m02", @@ -1165,47 +1184,47 @@ "round": 15, "seed": 2109644996, "waveId": "act1autochess_h08_02_s", - "time": 156.47, - "ticks": 4694, - "reason": "cleared", + "time": 200, + "ticks": 6000, + "reason": "forced", "killed": 3, "total": 3, "unspawned": 0, - "bossHpLeft": 0, - "rngDraws": 66, + "bossHpLeft": 1870565, + "rngDraws": 124, "errors": {"count":0,"kinds":[]}, - "players": {"p1":{"killed":3,"total":3,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":2265462,"bossDmg":700000,"heal":58750,"deaths":5,"layerGains":{}}}, + "players": {"p1":{"killed":3,"total":3,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":2969443,"bossDmg":929435,"heal":76069,"deaths":5,"layerGains":{}}}, "units": [ - ["p1",1,"op","chess_char_5_08_b",2,"uniequip_002_horn",2682.23,1,1,0,302359,7306,0,96,3], - ["p1",2,"op","chess_char_5_11_b",1,"uniequip_002_demkni",4764.66,1,3,0,592,3362,21943,34,24], - ["p1",3,"op","chess_char_5_05_b",2,"uniequip_002_ulpia",10250.39,1,36,1,224410,30171,16881,22,4], - ["p1",4,"op","chess_char_5_06_b",2,"uniequip_002_etlchi",1257.32,1,7,1,1149847,13685,11307,154,4], - ["p1",5,"op","chess_char_5_13_b",1,"uniequip_002_ghost2",3273.38,1,9,1,105083,11952,3364,79,3], - ["p1",6,"op","chess_char_5_07_b",2,"uniequip_002_surtr",12.7,0,22,0,15153,17692,2346,10,2], + ["p1",1,"op","chess_char_5_08_b",2,"uniequip_002_horn",2775,1,1,0,377438,9366,0,127,4], + ["p1",2,"op","chess_char_5_11_b",1,"uniequip_002_demkni",4794.8,1,3,0,832,3417,28568,44,33], + ["p1",3,"op","chess_char_5_05_b",2,"uniequip_002_ulpia",10629,1,36,0,414083,36990,19701,39,5], + ["p1",4,"op","chess_char_5_06_b",2,"uniequip_002_etlchi",2567.95,1,7,1,1490203,17115,16047,201,5], + ["p1",5,"op","chess_char_5_13_b",1,"uniequip_002_ghost2",3364.8,1,9,1,118420,12547,3364,79,3], + ["p1",6,"op","chess_char_5_07_b",2,"uniequip_002_surtr",2524.94,1,39,0,15153,19432,3930,10,2], ["p1",7,"op","chess_char_5_02_b",2,"uniequip_002_titi",1439,1,5,0,0,0,0,0,0], - ["p1",8,"op","chess_char_5_03_b",2,"uniequip_002_blaze2",147.2,1,6,0,273139,1325,0,166,5], - ["p1",9,"op","chess_char_5_10_b",2,"uniequip_002_lisa",1480,1,35,0,11042,10309,2909,17,5], - ["p1",10,"op","chess_char_5_12_b",0,"uniequip_002_dusk",1787,1,2,1,183837,0,0,39,30], + ["p1",8,"op","chess_char_5_03_b",2,"uniequip_002_blaze2",968.1,1,6,0,289738,1471,967,189,6], + ["p1",9,"op","chess_char_5_10_b",2,"uniequip_002_lisa",1480,1,35,0,19621,10891,3491,28,6], + ["p1",10,"op","chess_char_5_12_b",0,"uniequip_002_dusk",1787,1,2,1,243954,0,0,53,41], ["p1","~1","token","token_10039_ulpia_block",null,null,3485,0,17,0,0,15,0,0,null], ["p1","~2","token","token_10039_ulpia_block",null,null,3350,0,24,0,0,150,0,0,null], ["p1","~3","token","token_10039_ulpia_block",null,null,3335,0,31,0,0,165,0,0,null] ], "enemies": { "enemy_10067_ftsjc": [1,1,0,1161,21565], - "enemy_5601_entlec": [6,4,0,0,128506], + "enemy_5601_entlec": [7,6,0,0,174538], "enemy_9007_acelem": [2,2,0,747,119439], - "enemy_9017_achunt_2": [1,1,0,29912,700000], - "enemy_9018_actrpa": [1,0,0,14416,389572], - "enemy_9019_actrpb": [1,0,0,13611,366830], - "enemy_9020_actrpc": [1,0,0,12739,539550] + "enemy_9017_achunt_2": [1,0,0,33211,929435], + "enemy_9018_actrpa": [1,0,0,16277,517062], + "enemy_9019_actrpb": [1,0,0,18530,477352], + "enemy_9020_actrpc": [1,0,0,15909,730051] }, - "hooks": [1,38,4694,703,703,2970,7187,4724,13,18,80,77,105,18449,1453,10,13,0,1,108,0,2,0], - "events": {"atk":1129,"deploy":25,"die":18,"dmg":6683,"engage":9,"fx":683,"heal":293,"skill":157,"spawn":26,"status":225}, - "fx": {"anchor":4,"aoe":2,"beam":17,"burst":2,"candle":6,"charge":5,"dash":12,"ember":2,"explode":1,"healAoe":24,"link":468,"overload":3,"palsy":2,"phase":10,"revive":1,"shieldBreak":9,"splash":105,"substitute":2,"swap":2,"teleport":6}, - "snaps": "da09b77c 914412d4 de564a4c 4fb38afd 5d1150b5 c441e00d be261ac7 bc9ec3c0 a44ead18 f0549b46 52b0c4ac cc2472a9 5873e15f b9c6c985 e86d39da db924478" + "hooks": [1,40,6000,876,876,3547,8777,6397,14,19,105,102,118,25207,1875,10,14,0,1,109,0,2,0], + "events": {"atk":1409,"deploy":26,"die":19,"dmg":8204,"engage":9,"fx":850,"heal":383,"skill":207,"spawn":27,"status":303}, + "fx": {"anchor":5,"aoe":2,"beam":20,"burst":2,"candle":7,"charge":7,"dash":12,"downed":1,"ember":2,"explode":1,"healAoe":33,"link":597,"overload":4,"palsy":4,"phase":12,"revive":1,"shieldBreak":10,"splash":118,"substitute":3,"swap":3,"teleport":6}, + "snaps": "37ac48f3 092a4bc2 41b7e5d4 56d6fd20 79e6de1e 5c8059ed c19e7138 677e05fa cbd43f62 8f0f65b8 4d76189a 297c0633 3bc4d3c3 9ff783eb 79b3ec5e 5c6f5ce5 a8d3399b 8de60a18 1eaa3427 f2260143" }, "hidden-boss_10-pair": { - "about": "假想敌:管 pair pool 7600000: chess_char_5_19_b chess_char_4_01_b chess_char_5_14_b chess_char_5_17_b chess_char_5_15_b chess_char_5_20_b chess_char_5_21_b chess_char_5_22_b chess_char_5_23_b chess_char_4_02_b | chess_char_4_11_b chess_char_4_04_b chess_char_4_07_b chess_char_4_16_b chess_char_4_09_b chess_char_4_06_b chess_char_4_10_b chess_char_4_12_b chess_char_4_13_b chess_char_4_14_b token_10041_cathy_catsld token_10041_cathy_catsld", + "about": "假想敌:管 pair pool 15200000: chess_char_5_19_b chess_char_4_01_b chess_char_5_14_b chess_char_5_17_b chess_char_5_15_b chess_char_5_20_b chess_char_5_21_b chess_char_5_22_b chess_char_5_23_b chess_char_4_02_b | chess_char_4_11_b chess_char_4_04_b chess_char_4_07_b chess_char_4_16_b chess_char_4_09_b chess_char_4_06_b chess_char_4_10_b chess_char_4_12_b chess_char_4_13_b chess_char_4_14_b token_10041_cathy_catsld token_10041_cathy_catsld", "fast": false, "kind": "hidden", "stageId": "act1autochess_m03", @@ -1219,7 +1238,7 @@ "killed": 12, "total": 12, "unspawned": 0, - "bossHpLeft": 6905955, + "bossHpLeft": 14505955, "rngDraws": 1001, "errors": {"count":0,"kinds":[]}, "players": { @@ -1297,10 +1316,10 @@ "weightless": 6, "zone": 76 }, - "snaps": "b2c8103f 91059bdb 14558c87 9a8c7aca 84358f47 3307ce1d c68d6ed2 f8846121 9987dee1 d785c1eb 47303c18 d7e164d1 f3923884 43b344b2 01ede284 10404dbc a9d562ec 8a8c176e 62612be1 a62fd897" + "snaps": "069c7e32 c7501279 b8a16379 183de18f 603028d5 6047bb6b 7dcf828f 66417d52 af439cf5 e7cd47f0 519c8da9 23a57b78 b6a29491 1afdf228 1f1c2f89 87c303a4 5772dcce 1ee11042 d00caaad 4e17c1ae" }, "hidden-boss_10-solo": { - "about": "假想敌:管 solo pool 1900000: chess_char_4_17_b chess_char_4_18_b chess_char_4_23_b chess_char_4_19_b chess_char_4_22_b chess_char_4_20_b chess_char_4_21_b chess_char_4_24_b chess_char_4_25_b chess_char_4_26_b", + "about": "假想敌:管 solo pool 7600000: chess_char_4_17_b chess_char_4_18_b chess_char_4_23_b chess_char_4_19_b chess_char_4_22_b chess_char_4_20_b chess_char_4_21_b chess_char_4_24_b chess_char_4_25_b chess_char_4_26_b", "fast": false, "kind": "hidden", "stageId": "act2autochess_m01", @@ -1314,7 +1333,7 @@ "killed": 12, "total": 13, "unspawned": 0, - "bossHpLeft": 1456236, + "bossHpLeft": 7156236, "rngDraws": 28, "errors": {"count":0,"kinds":[]}, "players": {"p1":{"killed":12,"total":13,"perfect":false,"leaks":1,"leaksUncounted":0,"coins":0,"dmg":595215,"bossDmg":443764,"heal":73194,"deaths":0,"layerGains":{}}}, @@ -1340,7 +1359,7 @@ "hooks": [1,25,6000,614,614,1220,1745,4474,12,13,28,26,0,15177,45,8,15,1,1,18,0,7,0], "events": {"atk":746,"deploy":10,"die":12,"dmg":1740,"engage":6,"fx":464,"heal":136,"leak":1,"skill":56,"spawn":25,"status":248}, "fx": {"bandage":6,"beam":15,"burst":7,"ember":2,"explode":188,"featherArrow":7,"garrisonGrant":1,"healField":2,"jungleSoul":5,"mote":68,"phase":29,"redistribute":40,"reweave":3,"rockslide":1,"sandChainsCharged":1,"shieldBreak":7,"slash":60,"spGift":9,"summon":8,"telegraph":2,"truesilver":3}, - "snaps": "e9427acd ebfc7293 54b83cec f73192a7 da013b29 ae4ce102 56c06904 f381b3d6 73f7c5ff 24e67367 5e775311 0a2b0728 55e12f90 fa3fa098 ffb9c57f 38c9b0ff fa39c059 5fe1ef80 b0c78d76 5dff9fe3" + "snaps": "e9089456 d56595f6 94862b5d c7e389c2 97042251 346900c6 d3f1fdf3 ee72f858 3559a133 032bf766 7d5d0f98 ab1e397a ca88665f 19e0cc43 4f90670f aa7bdb4e f43775ca a84c46d1 705ff5fd 5b7831a7" }, "unite-1": { "about": "联防 1 helper(s), 11 leaked: chess_char_6_03_b chess_char_6_06_b chess_char_6_07_b chess_char_6_01_b chess_char_6_02_b chess_char_6_04_b chess_char_6_05_b chess_char_6_08_b token_10017_skadi2_dedant", diff --git a/test/golden/matches.json b/test/golden/matches.json index 37c63eac..d8d0a2da 100644 --- a/test/golden/matches.json +++ b/test/golden/matches.json @@ -16,7 +16,7 @@ "combat": "client", "boost": null, "setup": {"stageId":"act1autochess_m01","bossId":"boss_5","hiddenBossId":null,"factions":["TIMES","DOT","INVISIBLE"]}, - "end": {"victory":true,"roundsPassed":9,"hiddenReached":false,"hiddenCleared":false,"reason":"victory","teamLp":27,"bossPoolLeft":0,"virtualMs":68100}, + "end": {"victory":true,"roundsPassed":9,"hiddenReached":false,"hiddenCleared":false,"reason":"victory","teamLp":21,"bossPoolLeft":0,"virtualMs":68100}, "rng": {"setup":16,"shop":142,"waves":0,"draft":0,"bots":5205,"meta":0}, "errors": {"engine":0,"logged":0,"sim":0,"dispatcher":0}, "rounds": [ @@ -35,12 +35,12 @@ "victory": true, "roundsPassed": 9, "eliminatedRound": null, - "lp": 27, + "lp": 21, "bandId": "band_ermengard", "title": {"id":"comment_1","name":"卫戍之星","picId":"comment_icon_1","text":"对敌方领袖造成伤害最高(仅胜利时)"}, "trophies": 0, "reward": 113, - "stats": {"activatedLayers":78,"bossDamage":50000,"dmgDealt":545829,"gold":72,"itemsEquipped":10,"kills":160,"leaks":0,"lpLost":0,"merges":2,"perfectRounds":8,"refreshes":14}, + "stats": {"activatedLayers":78,"bossDamage":200000,"dmgDealt":841708,"gold":72,"itemsEquipped":10,"kills":175,"leaks":0,"lpLost":0,"merges":2,"perfectRounds":8,"refreshes":14}, "lineup": ["4_14_a@12,7","2_08_a@12,8[4_05_e_a+2_04_e_b]","2_14_a@11,8","3_10_a@10,3","2_17_a@10,4[1_01_e_b+4_02_e_a]","4_01_b@10,7","1_12_b@10,8[3_05_e_a+5_02_e_a]","5_02_a@9,8[4_08_e_a]"], "bonds": ["deputShip 0/16","emptyShip 1/0","indomShip 0/7","preciShip 1/7","sargonShip 1/28","steadShip 2/38","swiftShip 1/5"] } @@ -56,7 +56,7 @@ "combat": "client", "boost": null, "setup": {"stageId":"act1autochess_m01","bossId":"boss_5","hiddenBossId":null,"factions":["ELEMENT","DOT","REFLECTION"]}, - "end": {"victory":true,"roundsPassed":9,"hiddenReached":false,"hiddenCleared":false,"reason":"victory","teamLp":23,"bossPoolLeft":0,"virtualMs":68100}, + "end": {"victory":false,"roundsPassed":8,"hiddenReached":false,"hiddenCleared":false,"reason":"defeat","teamLp":0,"bossPoolLeft":124751,"virtualMs":68100}, "rng": {"setup":16,"shop":123,"waves":0,"draft":0,"bots":5205,"meta":28}, "errors": {"engine":0,"logged":0,"sim":0,"dispatcher":0}, "rounds": [ @@ -75,15 +75,15 @@ "players": { "ai_0": { "alive": true, - "victory": true, - "roundsPassed": 9, + "victory": false, + "roundsPassed": 8, "eliminatedRound": null, - "lp": 23, + "lp": 0, "bandId": "band_ducklord", - "title": {"id":"comment_1","name":"卫戍之星","picId":"comment_icon_1","text":"对敌方领袖造成伤害最高(仅胜利时)"}, + "title": {"id":"comment_2","name":"不朽盟约","picId":"comment_icon_2","text":"激活的盟约层数总和最高"}, "trophies": 0, - "reward": 113, - "stats": {"activatedLayers":182,"bossDamage":50000,"dmgDealt":550945,"gold":68,"itemsEquipped":11,"kills":132,"leaks":6,"lpLost":6,"merges":3,"perfectRounds":5,"refreshes":11}, + "reward": 100, + "stats": {"activatedLayers":182,"bossDamage":75249,"dmgDealt":642303,"gold":68,"itemsEquipped":11,"kills":140,"leaks":6,"lpLost":6,"merges":3,"perfectRounds":5,"refreshes":11}, "lineup": ["3_20_a@12,3[3_11_e_b+1_05_e_a]","1_02_b@12,8[3_10_e_b+4_10_e_a]","1_06_a@11,3[5_02_e_a+1_05_e_b]","3_08_b@11,8","4_14_a@10,3","3_16_a@10,4","5_22_a@9,8","2_05_a@9,9"], "bonds": ["deputShip 1/22","emptyShip 0/12","indomShip 0/2","kjeragShip 1/34","steadShip 1/21","swiftShip 1/21","victoriaShip 1/84"] } @@ -99,7 +99,7 @@ "combat": "client", "boost": null, "setup": {"stageId":"act1autochess_m03","bossId":"boss_5","hiddenBossId":"boss_8","factions":["TIMES","DOT","INVISIBLE"]}, - "end": {"victory":true,"roundsPassed":14,"hiddenReached":false,"hiddenCleared":false,"reason":"victory","teamLp":17,"bossPoolLeft":0,"virtualMs":106900}, + "end": {"victory":false,"roundsPassed":13,"hiddenReached":false,"hiddenCleared":false,"reason":"defeat","teamLp":0,"bossPoolLeft":93088,"virtualMs":106900}, "rng": {"setup":25,"shop":207,"waves":0,"draft":10,"bots":8483,"meta":14}, "errors": {"engine":0,"logged":0,"sim":0,"dispatcher":0}, "rounds": [ @@ -144,15 +144,15 @@ "players": { "ai_0": { "alive": true, - "victory": true, - "roundsPassed": 14, + "victory": false, + "roundsPassed": 13, "eliminatedRound": null, - "lp": 17, + "lp": 0, "bandId": "band_ermengard", - "title": {"id":"comment_1","name":"卫戍之星","picId":"comment_icon_1","text":"对敌方领袖造成伤害最高(仅胜利时)"}, + "title": {"id":"comment_2","name":"不朽盟约","picId":"comment_icon_2","text":"激活的盟约层数总和最高"}, "trophies": 0, - "reward": 400, - "stats": {"activatedLayers":290,"bossDamage":97500,"dmgDealt":1744405,"gold":131,"itemsEquipped":23,"kills":371,"leaks":11,"lpLost":10,"merges":5,"perfectRounds":12,"refreshes":15}, + "reward": 320, + "stats": {"activatedLayers":290,"bossDamage":296912,"dmgDealt":2081142,"gold":131,"itemsEquipped":23,"kills":383,"leaks":11,"lpLost":10,"merges":5,"perfectRounds":12,"refreshes":15}, "lineup": ["2_14_a@12,5","5_10_a@12,7[4_07_e_a+3_08_e_b]","5_20_b@11,5[6_09_e_a+5_02_e_b]","3_20_b@11,8[3_06_e_a+4_08_e_a]","6_11_a@10,3[4_12_e_a+5_02_e_b]","3_18_a@10,8[2_04_e_b+4_05_e_b]","6_19_a@9,4[4_04_e_a+4_10_e_a]","1_08_a@9,5[1_01_e_a+1_02_e_a]"], "bonds": ["arcaneShip 0/2","deputShip 1/14","emptyShip 1/10","kazimierzShip 0/16","kjeragShip 1/24","maniShip 1/2","miraShip 1/15","preciShip 0/12","sargonShip 0/8","siracusaShip 1/151","soloShip 1/22","steadShip 0/6","suntShip 1/8","swiftShip 1/44"] } @@ -227,7 +227,7 @@ "title": {"id":"comment_1","name":"卫戍之星","picId":"comment_icon_1","text":"对敌方领袖造成伤害最高(仅胜利时)"}, "trophies": 0, "reward": 400, - "stats": {"activatedLayers":268,"bossDamage":97500,"dmgDealt":2254275,"gold":140,"itemsEquipped":13,"kills":270,"leaks":4,"lpLost":4,"merges":5,"perfectRounds":11,"refreshes":18}, + "stats": {"activatedLayers":268,"bossDamage":390000,"dmgDealt":2637590,"gold":140,"itemsEquipped":13,"kills":278,"leaks":4,"lpLost":4,"merges":5,"perfectRounds":11,"refreshes":18}, "lineup": ["1_17_b@12,5","4_14_b@11,4","3_11_a@11,5[1_05_e_a+3_08_e_a]","5_07_a@11,6[4_02_e_a+4_05_e_a]","4_10_a@10,3","1_02_b@10,4[4_12_e_a+4_06_e_a]","5_14_a@10,5[1_05_e_b+1_05_e_b]","4_04_a@10,6"], "bonds": ["arcaneShip 2/40","kazimierzShip 0/2","kjeragShip 1/13","lateranoShip 0/3","preciShip 2/58","raidShip 1/84","sargonShip 0/2","steadShip 0/8","suntShip 1/0","swiftShip 1/53","visiShip 1/20"] } @@ -243,7 +243,7 @@ "combat": "client", "boost": null, "setup": {"stageId":"act1autochess_m03","bossId":"boss_5","hiddenBossId":"boss_8","factions":["TIMES","DOT","INVISIBLE"]}, - "end": {"victory":true,"roundsPassed":14,"hiddenReached":false,"hiddenCleared":false,"reason":"victory","teamLp":10,"bossPoolLeft":0,"virtualMs":107800}, + "end": {"victory":false,"roundsPassed":13,"hiddenReached":false,"hiddenCleared":false,"reason":"defeat","teamLp":0,"bossPoolLeft":94716,"virtualMs":107800}, "rng": {"setup":25,"shop":201,"waves":0,"draft":42,"bots":8376,"meta":2}, "errors": {"engine":0,"logged":0,"sim":0,"dispatcher":0}, "rounds": [ @@ -288,15 +288,15 @@ "players": { "ai_0": { "alive": true, - "victory": true, - "roundsPassed": 14, + "victory": false, + "roundsPassed": 13, "eliminatedRound": null, - "lp": 10, + "lp": 0, "bandId": "band_ermengard", - "title": {"id":"comment_1","name":"卫戍之星","picId":"comment_icon_1","text":"对敌方领袖造成伤害最高(仅胜利时)"}, + "title": {"id":"comment_2","name":"不朽盟约","picId":"comment_icon_2","text":"激活的盟约层数总和最高"}, "trophies": 0, - "reward": 425, - "stats": {"activatedLayers":268,"bossDamage":195000,"dmgDealt":1669187,"gold":140,"itemsEquipped":16,"kills":380,"leaks":26,"lpLost":17,"merges":3,"perfectRounds":10,"refreshes":15}, + "reward": 340, + "stats": {"activatedLayers":268,"bossDamage":685284,"dmgDealt":2273515,"gold":140,"itemsEquipped":16,"kills":391,"leaks":26,"lpLost":17,"merges":3,"perfectRounds":10,"refreshes":15}, "lineup": ["6_12_a@12,5[5_01_e_a+5_02_e_a]","5_10_a@12,7[4_07_e_a+5_02_e_b]","4_14_a@11,8","3_11_a@10,3","5_14_a@9,4[3_08_e_a+3_11_e_a]","1_08_a@9,5[1_01_e_a+4_05_e_a]","6_02_a@9,6","4_10_a@9,8[4_08_e_a+4_10_e_b]"], "bonds": ["arcaneShip 1/30","deputShip 0/14","emptyShip 1/10","kazimierzShip 0/16","kjeragShip 1/51","preciShip 2/50","sargonShip 0/8","siracusaShip 1/79","soloShip 1/15","steadShip 0/21","swiftShip 1/33","visiShip 1/0"] } @@ -312,7 +312,7 @@ "combat": "client", "boost": null, "setup": {"stageId":"act1autochess_m03","bossId":"boss_5","hiddenBossId":"boss_10","factions":["ELEMENT","DOT","REFLECTION"]}, - "end": {"victory":true,"roundsPassed":14,"hiddenReached":false,"hiddenCleared":false,"reason":"victory","teamLp":3,"bossPoolLeft":0,"virtualMs":107800}, + "end": {"victory":false,"roundsPassed":13,"hiddenReached":false,"hiddenCleared":false,"reason":"defeat","teamLp":0,"bossPoolLeft":176395,"virtualMs":107800}, "rng": {"setup":25,"shop":279,"waves":0,"draft":42,"bots":8378,"meta":87}, "errors": {"engine":0,"logged":0,"sim":0,"dispatcher":0}, "rounds": [ @@ -363,15 +363,15 @@ "players": { "ai_0": { "alive": true, - "victory": true, - "roundsPassed": 14, + "victory": false, + "roundsPassed": 13, "eliminatedRound": null, - "lp": 3, + "lp": 0, "bandId": "band_ducklord", - "title": {"id":"comment_1","name":"卫戍之星","picId":"comment_icon_1","text":"对敌方领袖造成伤害最高(仅胜利时)"}, + "title": {"id":"comment_2","name":"不朽盟约","picId":"comment_icon_2","text":"激活的盟约层数总和最高"}, "trophies": 0, - "reward": 425, - "stats": {"activatedLayers":163,"bossDamage":195000,"dmgDealt":2277788,"gold":141,"itemsEquipped":11,"kills":264,"leaks":26,"lpLost":26,"merges":6,"perfectRounds":9,"refreshes":25}, + "reward": 340, + "stats": {"activatedLayers":163,"bossDamage":603605,"dmgDealt":2769206,"gold":141,"itemsEquipped":11,"kills":273,"leaks":26,"lpLost":26,"merges":6,"perfectRounds":9,"refreshes":25}, "lineup": ["1_17_b@12,5","3_17_a@12,6","4_20_a@12,7","4_10_b@10,3","2_18_a@10,5[4_11_e_a+1_05_e_b]","1_19_b@10,7","6_17_a@10,8[3_07_e_a+3_04_e_a]","6_19_a@9,5[4_02_e_b+5_03_e_a]"], "bonds": ["arcaneShip 1/48","kazimierzShip 2/48","kjeragShip 0/37","lateranoShip 0/3","preciShip 1/29","sargonShip 0/2","soloShip 1/0","steadShip 0/8","suntShip 1/0","swiftShip 1/38"] } @@ -596,7 +596,7 @@ "title": {"id":"comment_2","name":"不朽盟约","picId":"comment_icon_2","text":"激活的盟约层数总和最高"}, "trophies": 4, "reward": 400, - "stats": {"activatedLayers":250,"bossDamage":280840,"dmgDealt":2842128,"gold":139,"itemsEquipped":12,"kills":325,"leaks":11,"lpLost":9,"merges":5,"perfectRounds":11,"refreshes":23}, + "stats": {"activatedLayers":250,"bossDamage":490972,"dmgDealt":3069097,"gold":139,"itemsEquipped":12,"kills":331,"leaks":11,"lpLost":9,"merges":5,"perfectRounds":11,"refreshes":23}, "lineup": ["3_19_b@11,7[2_04_e_b]","5_12_a@11,8","4_10_a@10,5[1_02_e_b+2_01_e_a]","6_06_a@9,4","1_08_b@9,5","6_16_a@9,7","5_20_a@9,8[3_05_e_a+3_02_e_b]","3_13_b@9,9"], "bonds": ["arcaneShip 2/86","miraShip 1/12","preciShip 0/10","sargonShip 0/10","siracusaShip 1/110","skillfulShip 1/36","soloShip 1/6","suntShip 1/0","swiftShip 0/32"] }, @@ -610,7 +610,7 @@ "title": {"id":"comment_1","name":"卫戍之星","picId":"comment_icon_1","text":"对敌方领袖造成伤害最高(仅胜利时)"}, "trophies": 4, "reward": 400, - "stats": {"activatedLayers":199,"bossDamage":427910,"dmgDealt":3303988,"gold":137,"itemsEquipped":18,"kills":325,"leaks":6,"lpLost":6,"merges":5,"perfectRounds":12,"refreshes":13}, + "stats": {"activatedLayers":199,"bossDamage":926528,"dmgDealt":3823060,"gold":137,"itemsEquipped":18,"kills":325,"leaks":6,"lpLost":6,"merges":5,"perfectRounds":12,"refreshes":13}, "lineup": ["4_20_a@12,8[3_06_e_a]","1_17_b@11,7[3_08_e_a]","4_02_b@11,8[3_02_e_a+4_03_e_b]","4_01_b@10,7[4_04_e_a+1_02_e_a]","6_17_a@10,8[4_06_e_a+4_08_e_a]","6_19_a@9,7[1_05_e_a+1_01_e_b]","4_14_a@9,8","5_07_a@9,9"], "bonds": ["arcaneShip 2/34","kazimierzShip 1/38","kjeragShip 0/8","lateranoShip 0/8","preciShip 2/55","raidShip 1/0","sargonShip 0/10","suntShip 1/0","swiftShip 1/72"] } @@ -976,7 +976,7 @@ "title": {"id":"comment_2","name":"不朽盟约","picId":"comment_icon_2","text":"激活的盟约层数总和最高"}, "trophies": 3, "reward": 250, - "stats": {"activatedLayers":482,"bossDamage":46468,"dmgDealt":1661472,"gold":140,"itemsEquipped":25,"kills":311,"leaks":0,"lpLost":0,"merges":5,"perfectRounds":13,"refreshes":21}, + "stats": {"activatedLayers":482,"bossDamage":190683,"dmgDealt":1852681,"gold":140,"itemsEquipped":25,"kills":319,"leaks":0,"lpLost":0,"merges":5,"perfectRounds":13,"refreshes":21}, "lineup": ["6_08_a@11,6[3_03_e_a+3_02_e_a]","6_12_a@11,7[4_08_e_a+6_07_e_b]","2_14_b@10,3","2_17_b@10,4[4_02_e_b+5_01_e_a]","2_08_a@9,3[4_04_e_a+1_01_e_b]","6_06_a@9,4[3_08_e_a+3_01_e_b]","1_06_b@9,8","5_02_b@9,9[5_02_e_a+3_06_e_b]"], "bonds": ["deputShip 1/61","emptyShip 1/6","kjeragShip 0/7","preciShip 2/157","sargonShip 1/170","steadShip 1/88"] }, @@ -990,7 +990,7 @@ "title": {"id":"comment_3","name":"坚若磐石","picId":"comment_icon_3","text":"目标生命值损失最少"}, "trophies": 3, "reward": 250, - "stats": {"activatedLayers":207,"bossDamage":11698,"dmgDealt":1301544,"gold":129,"itemsEquipped":20,"kills":238,"leaks":46,"lpLost":0,"merges":6,"perfectRounds":10,"refreshes":20}, + "stats": {"activatedLayers":207,"bossDamage":73033,"dmgDealt":1373511,"gold":129,"itemsEquipped":20,"kills":238,"leaks":46,"lpLost":0,"merges":6,"perfectRounds":10,"refreshes":20}, "lineup": ["2_14_b@12,3","5_10_a@11,6[4_03_e_b+1_02_e_a]","6_01_a@11,7[3_05_e_a]","5_10_a@11,8[5_09_e_a+4_08_e_b]","6_14_a@10,3","4_16_a@10,8[4_11_e_a+4_04_e_b]","6_05_a@9,8[1_05_e_a+5_03_e_a]","2_16_a@9,9[5_02_e_a+4_05_e_b]"], "bonds": ["deputShip 1/96","emptyShip 1/23","preciShip 1/14","sargonShip 0/2","siracusaShip 1/74","steadShip 0/4"] }, @@ -1004,7 +1004,7 @@ "title": {"id":"comment_5","name":"万事俱备","picId":"comment_icon_5","text":"装备配发数量最多"}, "trophies": 3, "reward": 250, - "stats": {"activatedLayers":260,"bossDamage":81958,"dmgDealt":1639551,"gold":127,"itemsEquipped":20,"kills":283,"leaks":0,"lpLost":0,"merges":3,"perfectRounds":13,"refreshes":16}, + "stats": {"activatedLayers":260,"bossDamage":308467,"dmgDealt":1912652,"gold":127,"itemsEquipped":20,"kills":291,"leaks":0,"lpLost":0,"merges":3,"perfectRounds":13,"refreshes":16}, "lineup": ["4_25_a@12,3","1_07_b@11,7[1_01_e_a+1_05_e_a]","5_20_a@11,8[3_02_e_a+2_01_e_b]","6_18_a@10,3[2_01_e_b+4_03_e_b]","4_10_a@10,7[4_03_e_b]","3_18_b@9,4[3_07_e_b+3_11_e_a]","6_05_a@9,8","2_16_b@9,9[5_01_e_a+4_02_e_a]"], "bonds": ["sargonShip 0/8","siracusaShip 2/236","swiftShip 1/24","yanShip 0/1"] }, @@ -1018,7 +1018,7 @@ "title": {"id":"comment_1","name":"卫戍之星","picId":"comment_icon_1","text":"对敌方领袖造成伤害最高(仅胜利时)"}, "trophies": 3, "reward": 250, - "stats": {"activatedLayers":311,"bossDamage":144877,"dmgDealt":1819100,"gold":138,"itemsEquipped":36,"kills":300,"leaks":1,"lpLost":0,"merges":3,"perfectRounds":12,"refreshes":23}, + "stats": {"activatedLayers":311,"bossDamage":567817,"dmgDealt":2252972,"gold":138,"itemsEquipped":36,"kills":300,"leaks":1,"lpLost":0,"merges":3,"perfectRounds":12,"refreshes":23}, "lineup": ["3_20_b@12,8[5_02_e_b+6_03_e_a]","6_14_a@11,3","4_13_b@11,6[5_02_e_b+4_07_e_a]","6_01_a@11,7[3_11_e_a+3_04_e_a]","4_14_a@11,8[4_03_e_a+1_02_e_a]","4_22_a@10,8[4_04_e_b+4_02_e_a]","3_11_b@9,8[4_09_e_a+3_07_e_a]","5_14_a@9,9[4_06_e_b+2_01_e_b]"], "bonds": ["deputShip 1/20","emptyShip 0/12","kjeragShip 1/120","preciShip 2/117","siracusaShip 0/3","swiftShip 1/54","yanShip 0/1"] } @@ -1303,7 +1303,7 @@ "combat": "client", "boost": {"lp":400,"layers":300}, "setup": {"stageId":"act1autochess_m02","bossId":"boss_5","hiddenBossId":"boss_10","factions":["TIMES","ELEMENT","DOT"]}, - "end": {"victory":true,"roundsPassed":15,"hiddenReached":true,"hiddenCleared":true,"reason":"victory","teamLp":399,"bossPoolLeft":0,"virtualMs":113700}, + "end": {"victory":true,"roundsPassed":15,"hiddenReached":true,"hiddenCleared":true,"reason":"victory","teamLp":398,"bossPoolLeft":0,"virtualMs":113700}, "rng": {"setup":25,"shop":356,"waves":0,"draft":42,"bots":10350,"meta":3}, "errors": {"engine":0,"logged":0,"sim":0,"dispatcher":0}, "rounds": [ @@ -1366,12 +1366,12 @@ "victory": true, "roundsPassed": 15, "eliminatedRound": null, - "lp": 399, + "lp": 398, "bandId": "band_paganini", "title": {"id":"comment_1","name":"卫戍之星","picId":"comment_icon_1","text":"对敌方领袖造成伤害最高(仅胜利时)"}, "trophies": 0, "reward": 425, - "stats": {"activatedLayers":2279,"bossDamage":1145000,"dmgDealt":3042833,"gold":175,"itemsEquipped":26,"kills":366,"leaks":1,"lpLost":1,"merges":6,"perfectRounds":12,"refreshes":35}, + "stats": {"activatedLayers":2279,"bossDamage":4580000,"dmgDealt":6590189,"gold":175,"itemsEquipped":26,"kills":376,"leaks":1,"lpLost":1,"merges":6,"perfectRounds":12,"refreshes":35}, "lineup": ["4_02_b@12,7[3_08_e_a+3_03_e_b]","6_01_a@12,8[3_02_e_a]","6_16_a@11,5[1_05_e_b+3_03_e_a]","3_18_a@11,8[4_11_e_a+4_05_e_b]","4_10_b@10,4[4_07_e_a+1_02_e_b]","6_05_a@10,5","4_01_b@10,6[6_03_e_a+4_06_e_a]","1_08_b@9,9"], "bonds": ["arcaneShip 2/395","deputShip 0/300","egirShip 0/300","emptyShip 0/300","indomShip 0/308","investShip 0/300","kazimierzShip 0/308","kjeragShip 0/300","lateranoShip 1/306","maniShip 0/300","miraShip 0/300","preciShip 1/302","raidShip 0/300","sargonShip 0/300","siracusaShip 1/353","skillfulShip 0/343","soloShip 1/307","steadShip 0/300","suntShip 1/300","swiftShip 1/316","victoriaShip 0/300","visiShip 0/300","yanShip 0/300"] } @@ -1468,7 +1468,7 @@ "title": {"id":"comment_2","name":"不朽盟约","picId":"comment_icon_2","text":"激活的盟约层数总和最高"}, "trophies": 8, "reward": 425, - "stats": {"activatedLayers":2713,"bossDamage":883949,"dmgDealt":8912493,"gold":153,"itemsEquipped":19,"kills":273,"leaks":6,"lpLost":0,"merges":4,"perfectRounds":12,"refreshes":33}, + "stats": {"activatedLayers":2713,"bossDamage":1676605,"dmgDealt":10050362,"gold":153,"itemsEquipped":19,"kills":283,"leaks":6,"lpLost":0,"merges":4,"perfectRounds":12,"refreshes":33}, "lineup": ["2_18_b@11,5[2_01_e_a+3_03_e_a]","3_13_b@11,8","4_09_a@10,3","3_05_a@10,8[1_01_e_b+4_05_e_b]","3_09_a@9,6","6_16_a@9,7[3_11_e_a+1_02_e_b]","4_20_a@9,8","3_12_a@9,9[4_03_e_a]"], "bonds": ["arcaneShip 1/387","deputShip 0/304","egirShip 1/353","emptyShip 0/300","indomShip 0/300","investShip 0/300","kazimierzShip 1/356","kjeragShip 0/302","lateranoShip 0/300","maniShip 0/300","miraShip 0/300","preciShip 0/318","raidShip 1/330","sargonShip 0/300","siracusaShip 0/300","skillfulShip 1/340","soloShip 1/304","steadShip 1/343","suntShip 1/300","swiftShip 0/302","victoriaShip 0/300","visiShip 0/300","yanShip 0/300"] }, @@ -1482,7 +1482,7 @@ "title": {"id":"comment_1","name":"卫戍之星","picId":"comment_icon_1","text":"对敌方领袖造成伤害最高(仅胜利时)"}, "trophies": 8, "reward": 425, - "stats": {"activatedLayers":2334,"bossDamage":6063984,"dmgDealt":20631738,"gold":157,"itemsEquipped":29,"kills":286,"leaks":3,"lpLost":0,"merges":4,"perfectRounds":11,"refreshes":30}, + "stats": {"activatedLayers":2334,"bossDamage":12218936,"dmgDealt":34332028,"gold":157,"itemsEquipped":29,"kills":286,"leaks":3,"lpLost":0,"merges":4,"perfectRounds":11,"refreshes":30}, "lineup": ["3_16_a@12,8[3_09_e_b+4_07_e_a]","2_10_a@11,5[3_11_e_a+2_03_e_b]","6_05_a@11,8[3_05_e_b+3_10_e_b]","6_08_a@10,3[3_01_e_b+1_01_e_b]","5_11_a@10,4[4_12_e_a+5_09_e_a]","6_14_a@9,7[4_09_e_a+4_04_e_b]","1_06_b@9,8[1_05_e_b+2_01_e_b]","1_17_b@9,9[2_03_e_b+2_03_e_a]"], "bonds": ["arcaneShip 1/330","deputShip 1/326","egirShip 0/300","emptyShip 0/300","indomShip 0/326","investShip 0/300","kazimierzShip 0/305","kjeragShip 0/300","lateranoShip 0/300","maniShip 0/300","miraShip 0/300","preciShip 2/366","raidShip 0/300","sargonShip 0/300","siracusaShip 0/300","skillfulShip 0/300","soloShip 1/316","steadShip 1/340","suntShip 1/310","swiftShip 0/300","victoriaShip 1/346","visiShip 0/300","yanShip 0/305"] } @@ -1696,7 +1696,7 @@ "title": {"id":"comment_1","name":"卫戍之星","picId":"comment_icon_1","text":"对敌方领袖造成伤害最高(仅胜利时)"}, "trophies": 4, "reward": 400, - "stats": {"activatedLayers":513,"bossDamage":591866,"dmgDealt":4855342,"gold":160,"itemsEquipped":22,"kills":346,"leaks":0,"lpLost":0,"merges":5,"perfectRounds":13,"refreshes":31}, + "stats": {"activatedLayers":513,"bossDamage":1147951,"dmgDealt":5456360,"gold":160,"itemsEquipped":22,"kills":352,"leaks":0,"lpLost":0,"merges":5,"perfectRounds":13,"refreshes":31}, "lineup": ["6_05_a@12,8[4_08_e_a+2_01_e_b]","5_02_a@11,6[6_01_e_a]","6_05_a@11,7[3_04_e_a+3_03_e_a]","4_20_b@11,8","4_14_b@10,6[3_11_e_a+5_01_e_b]","5_21_b@10,8[1_01_e_a+6_03_e_a]","4_07_b@9,8[4_04_e_b+4_11_e_b]","4_23_b@9,9[4_06_e_a]"], "bonds": ["arcaneShip 0/2","indomShip 0/30","preciShip 2/203","sargonShip 1/187","steadShip 0/54","suntShip 2/0","swiftShip 1/25","victoriaShip 0/21","visiShip 1/98"] }, @@ -1710,7 +1710,7 @@ "title": {"id":"comment_3","name":"坚若磐石","picId":"comment_icon_3","text":"目标生命值损失最少"}, "trophies": 4, "reward": 400, - "stats": {"activatedLayers":108,"bossDamage":195634,"dmgDealt":2640559,"gold":134,"itemsEquipped":19,"kills":246,"leaks":47,"lpLost":0,"merges":6,"perfectRounds":8,"refreshes":12}, + "stats": {"activatedLayers":108,"bossDamage":427049,"dmgDealt":2882939,"gold":134,"itemsEquipped":19,"kills":246,"leaks":47,"lpLost":0,"merges":6,"perfectRounds":8,"refreshes":12}, "lineup": ["5_20_a@12,8","5_10_a@11,7","6_05_a@11,8[5_03_e_a+1_01_e_a]","3_13_a@10,5","5_02_a@10,6[3_07_e_a+4_03_e_a]","3_03_b@10,8[3_11_e_b+2_04_e_a]","2_04_b@9,8","1_08_b@9,9[1_02_e_a+4_06_e_a]"], "bonds": ["preciShip 1/24","sargonShip 1/32","siracusaShip 1/28","skillfulShip 1/24","soloShip 1/0","suntShip 1/0","yanShip 0/33"] } diff --git a/test/match/balance.test.js b/test/match/balance.test.js index aa508187..5256b62f 100644 --- a/test/match/balance.test.js +++ b/test/match/balance.test.js @@ -13,7 +13,7 @@ import { const RAW = withoutTuning(DATA); -test('no custom balance: legacy tuning multipliers are ignored; enemy scale = the PRTS table; leader pool = bloodPoint', () => { +test('no custom balance: legacy tuning multipliers are ignored; enemy scale = the PRTS table; leader pool = bloodPoint × alive players', () => { const tuning = { modes: { '*': { enemyHpMul: 0.5, enemyAtkMul: 0.9 }, @@ -28,21 +28,21 @@ test('no custom balance: legacy tuning multipliers are ignored; enemy scale = th assert.deepEqual(hard.enemyScale(r), { hpMul: e.hp, atkMul: e.atk, speedMul: e.speed }, `R${r}: the config (PRTS) table`); } assert.equal(hard.bossHpMul('boss_1'), 1); - // co-op: one pool = bloodPoint[difficulty] whatever the alive count (× alive / 4 only with config aliveScaling, off — - // DESIGN §20.10); solo: ×0.25 [ASSUMED, flagged] + // co-op: one pool = bloodPoint[difficulty] × the players alive at the fight's start; solo × 1 (DESIGN §25.13.4, the + // owner's decision of 2026-10-06 adopting PR #209 — it replaces the fixed pool of DESIGN §20.10) for (const [modeId, key] of [['mode_multi_funny', 'FUNNY'], ['mode_multi_normal', 'NORMAL'], ['mode_multi_hard', 'HARD'], ['mode_multi_abyss', 'ABYSS']]) { const gd = new GameData(RAW, modeId); for (const b of ['boss_1', 'boss_5', 'boss_8']) { - assert.equal(gd.bossPoolHp(b), DATA.bosses[b].bloodPoint[key], `${modeId} ${b}`); - assert.equal(gd.bossPoolHp(b, 4), DATA.bosses[b].bloodPoint[key], `${modeId} ${b} four alive`); - assert.equal(gd.bossPoolHp(b, 2), DATA.bosses[b].bloodPoint[key], `${modeId} ${b} two alive: still the data value`); + assert.equal(gd.bossPoolHp(b), DATA.bosses[b].bloodPoint[key] * 4, `${modeId} ${b}: no count, a full team`); + assert.equal(gd.bossPoolHp(b, 4), DATA.bosses[b].bloodPoint[key] * 4, `${modeId} ${b} four alive`); + assert.equal(gd.bossPoolHp(b, 2), DATA.bosses[b].bloodPoint[key] * 2, `${modeId} ${b} two alive: twice the data value`); } } - assert.equal(DATA.config.bossHpScale.aliveScaling, false); - assert.equal(DATA.config.bossHpScale.aliveAssumed, true); + assert.equal(DATA.config.bossHpScale.perPlayer, true); + assert.equal(DATA.config.bossHpScale.aliveScaling, false, 'the fixed pool\'s optional scaling stays off'); const solo = new GameData(RAW, 'mode_single_hard'); - assert.equal(solo.bossPoolHp('boss_2'), Math.round(DATA.bosses.boss_2.bloodPoint.HARD * 0.25)); - assert.equal(DATA.config.bossHpScale.soloAssumed, true); + assert.equal(solo.bossPoolHp('boss_2'), DATA.bosses.boss_2.bloodPoint.HARD); + assert.equal(DATA.config.bossHpScale.solo, 1); // the waves carry exactly the table const setup = setupMatchWaves(hard, createRng(3)); const w = buildNormalWave(hard, createRng(3), setup.factions, 3); diff --git a/test/match/boss-hp-scaling.test.js b/test/match/boss-hp-scaling.test.js new file mode 100644 index 00000000..acc4e41c --- /dev/null +++ b/test/match/boss-hp-scaling.test.js @@ -0,0 +1,102 @@ +// The Final Assault / Hidden Core leader pool = bloodPoint[difficulty] × the players alive when the fight starts (solo +// × 1) — the owner's decision of 2026-10-06, adopting PR #209 by @qingjingshenghuo (these tests are ported from it); +// it replaces the fixed pool of 「保持固定血量」 (DESIGN §20.9 / §20.10), which config bossHpScale still restores +// (DESIGN §25.13.4, server/match/gamedata.js bossPoolShareOf). +import { test } from 'node:test'; +import assert from 'node:assert/strict'; +import { makeMatch, DATA } from './harness.js'; +import { GameData } from '../../server/match/gamedata.js'; +import { bossPoolHp, SharedBossPool } from '../../server/match/finalAssault.js'; +import { makeBattle } from '../helpers/battleHarness.js'; + +const DIFFS = ['FUNNY', 'NORMAL', 'HARD', 'ABYSS']; + +test('every leader and difficulty: bloodPoint × the players alive (co-op), × 1 solo', () => { + for (const difficulty of DIFFS) { + const gd = new GameData(DATA, `mode_multi_${difficulty.toLowerCase()}`); + const solo = new GameData(DATA, `mode_single_${difficulty.toLowerCase()}`); + for (const id of Object.keys(DATA.bosses)) { + const base = DATA.bosses[id].bloodPoint[difficulty]; + for (const n of [1, 2, 3, 4]) assert.equal(bossPoolHp(gd, id, n), base * n, `${id} ${difficulty} ×${n}`); + assert.equal(bossPoolHp(solo, id, 1), base, `${id} ${difficulty} solo`); + } + } +}); + +for (const hidden of [false, true]) { + test(`R${hidden ? 15 : 14}: the round's pool leaves out two departed players`, () => { + const h = makeMatch({ humans: 4, difficulty: 'HARD', fake: true, instant: false }).start(); + h.toPrep(1); + const m = h.m; + m.onLeave('p_2'); + m.onLeave('p_3'); + assert.equal(m.alivePlayers().length, 2); + assert.equal(h.ps('p_2').alive, false); + m.round = hidden ? 15 : 14; + m.teamLp = 50; + m.bossId = 'boss_1'; + m.hiddenBossId = 'boss_9'; + m._planBossWaves(); + m.startFinalAssault(hidden); + const id = hidden ? m.hiddenBossId : m.bossId; + assert.equal(m.bossPool.maxHp, DATA.bosses[id].bloodPoint.HARD * 2); + m.dispose(); + }); +} + +test('disconnected players (AI 托管) and bots count; an eliminated player does not', () => { + const h = makeMatch({ humans: 3, bots: 1, fake: true, instant: false }).start(); + h.toPrep(1); + h.m.onDisconnect('p_1'); + h.ps('p_2').eliminate(1); + h.m.round = 14; + h.m._planBossWaves(); + h.m.startFinalAssault(false); + assert.equal(h.m.alivePlayers().length, 3); + assert.equal(h.m.bossPool.maxHp, h.m.gd.boss(h.m.bossId).bloodPoint.NORMAL * 3); + h.m.dispose(); +}); + +test('config restores the fixed pool of 0.1.x (perPlayer false, solo 0.25) — GameData and the plain-object fallback agree', () => { + const data = structuredClone(DATA); + data.config.bossHpScale = { ...data.config.bossHpScale, perPlayer: false, solo: 0.25 }; + for (const modeId of ['mode_single_abyss', 'mode_multi_abyss']) { + const gd = new GameData(data, modeId); + const base = data.bosses.boss_8.bloodPoint.ABYSS; + const expected = gd.isSolo ? base * 0.25 : base; + for (const n of [1, 2, 3, 4]) { + assert.equal(gd.bossPoolHp('boss_8', n), expected, `${modeId} ×${n}`); + assert.equal(bossPoolHp(gd, 'boss_8', n), expected); + // a caller's game-data object without bossPoolShare reads the same config through bossPoolShareOf + const plain = { boss: (id) => gd.boss(id), difficulty: gd.difficulty, mode: gd.mode, config: gd.config, isSolo: gd.isSolo }; + assert.equal(bossPoolHp(plain, 'boss_8', n), expected); + } + } + // and the per-player rule through the same fallback + const gd = new GameData(DATA, 'mode_multi_abyss'); + const plain = { boss: (id) => gd.boss(id), difficulty: gd.difficulty, mode: gd.mode, config: gd.config, isSolo: false }; + assert.equal(bossPoolHp(plain, 'boss_8', 3), DATA.bosses.boss_8.bloodPoint.ABYSS * 3); +}); + +test('only the leader\'s pool scales: escorts and the Hidden Core\'s parts keep their stats', () => { + for (const kind of ['boss', 'hidden']) { + const bossKey = kind === 'boss' ? 'enemy_9013_acstmk' : 'enemy_9013_acstmk_2'; + const snapshot = (n) => { + const h = makeBattle({ + kind, content: 'none', sharedBoss: new SharedBossPool(7200000 * n), autoFinish: false, + enemies: [{ key: bossKey, tag: 'boss', pos: [3, 10] }, { key: 'enemy_1427_lrnazg', pos: [2, 10] }, { key: 'enemy_9014_acstma', pos: [4, 10] }], + }); + h.step(); + return [bossKey, 'enemy_1427_lrnazg', 'enemy_9014_acstma'].map((key) => { + const e = h.enemy(key); + assert.ok(e, `spawned ${key}`); + return { hp: e.s.maxHp, atk: e.s.atk, def: e.s.def }; + }); + }; + const one = snapshot(1), four = snapshot(4); + assert.equal(four[0].hp, one[0].hp * 4, `${kind}: the leader shows the pool`); + assert.equal(four[0].atk, one[0].atk); + assert.equal(four[0].def, one[0].def); + assert.deepEqual(four.slice(1), one.slice(1), `${kind}: escort and part unchanged`); + } +}); diff --git a/test/match/bosshp.test.js b/test/match/bosshp.test.js index 462e2ba5..a13df846 100644 --- a/test/match/bosshp.test.js +++ b/test/match/bosshp.test.js @@ -2,8 +2,8 @@ // seconds; with our layers the official leader never dies that fast"). DESIGN §20.10. // * Pool: one pool for every boss field (official tip "最终攻势中,所有人将一起对敌方领袖造成伤害"), bloodPoint[difficulty] // of data/bosses.json (= activity_table bossInfoDict bloodPoint / Normal / Hard / Abyss of the current data; PRTS -// 盟约记录's leader table is the older 11月18日 revision, 铳 险境 and 胄 / 铳 / 萨米 绝境 differ, no 终极 column) whatever -// the number of alive players (× alive / 4 only with config bossHpScale.aliveScaling, off until confirmed). +// 盟约记录's leader table is the older 11月18日 revision, 铳 险境 and 胄 / 铳 / 萨米 绝境 differ, no 终极 column) per +// player alive when the fight starts (DESIGN §25.13.4: the owner's decision of 2026-10-06, adopting PR #209). // * Damage: the 卫戍 systems' "+X%" attribute bonuses are 直接乘算 — summed, not compounded (PRTS 盟约记录 / 游戏数据基础); // v2.5 compounded them, which made stacked lineups kill the leaders 1.2–3× faster (more with more layers). // Real bot matches to the Final Assault (real sim, server-run fields): every operator fighting the leader carries its @@ -67,12 +67,12 @@ test('leader HP data = the current official bossInfoDict for every leader and di const SYSTEM_KEY = /^(bond|item|band|choice):/; const MUL_STATS = ['atkMul', 'defMul', 'hpMul']; -test('终极 Final Assault (+200 layers per active bond): one bloodPoint pool for both fields, bonuses additive, each hit once', () => { +test('终极 Final Assault (+200 layers per active bond): one pool (bloodPoint × 4 alive) for both fields, bonuses additive, each hit once', () => { const h = toFinalAssault({ difficulty: 'ABYSS', seed: 2, bossId: 'boss_1', layers: 200 }); const m = h.m; const pool = m.bossPool; assert.equal(m.alivePlayers().length, 4); - assert.equal(pool.maxHp, DATA.bosses.boss_1.bloodPoint.ABYSS, 'full team: the data value (3 600 000)'); + assert.equal(pool.maxHp, DATA.bosses.boss_1.bloodPoint.ABYSS * 4, 'four alive: 4 × the data value (14 400 000)'); const fields = m.fields.filter((f) => f.battle); assert.equal(fields.length, 2, 'two pair fields'); // one second into the fight: every operator's stats @@ -99,8 +99,8 @@ test('终极 Final Assault (+200 layers per active bond): one bloodPoint pool fo test('绝境 Final Assault: both pair fields drain the one pool, every hit exactly once', () => { const h = toFinalAssault({ difficulty: 'HARD', seed: 3, bossId: 'boss_5' }); const m = h.m; - assert.equal(m.bossPool.maxHp, DATA.bosses.boss_5.bloodPoint.HARD, 'four alive: the data value'); - assert.equal(m.gd.bossPoolHp('boss_5', 2), DATA.bosses.boss_5.bloodPoint.HARD, 'two alive: the same pool (aliveScaling off)'); + assert.equal(m.bossPool.maxHp, DATA.bosses.boss_5.bloodPoint.HARD * 4, 'four alive: 4 × the data value'); + assert.equal(m.gd.bossPoolHp('boss_5', 2), DATA.bosses.boss_5.bloodPoint.HARD * 2, 'two alive: 2 × the data value'); const pool = m.bossPool; const fields = m.fields.filter((f) => f.battle); assert.equal(fields.length, 2); @@ -118,7 +118,8 @@ test('绝境 Final Assault: both pair fields drain the one pool, every hit exact test('终极 Final Assault vs 假想敌:胄 (seeded bot match): both players\' 奥术 never multiply on the leader; a drone costs it 2 % of the pool', () => { // DESIGN §20.10: one 奥术 instance per target (the strongest — PRTS 作战机制 同名buff, 巴哈姆特 12316 "共享型buff會跟對面搶"); - // 死亡集群's "最大生命值2%" = the leader's shown max HP, the pool (DRONE_LINK_BASE 'pool' [ASSUMED]): 72 000 at 终极 + // 死亡集群's "最大生命值2%" = the leader's shown max HP, the pool (DRONE_LINK_BASE 'pool' [ASSUMED]): 288 000 at 终极 + // with 4 alive (14 400 000) // the bots' boards follow every draw of the match (the elite-to-board merge, DESIGN §20.11, moved seed 7 to 12; the // 战术决策 drawn with replacement moved 12 on): the first of these seeds whose bots pair two 奥术 players const pairOf = (m) => m.fields.filter((f) => f.battle).find((f) => f.players.length === 2 && f.players.every((pid) => f.battle.getPlayer(pid).bonds.arcaneShip?.active)); @@ -161,7 +162,8 @@ test('终极 Final Assault vs 假想敌:胄 (seeded bot match): both players\' } assert.ok(withArcane > 100, `the leader carried 奥术 (${withArcane} samples)`); assert.ok(links.length >= 1, 'drones were shot down'); - for (const x of links) assert.equal(x, DATA.bosses.boss_1.bloodPoint.ABYSS * 0.02, 'drone link = 2 % × the 3 600 000 pool'); + for (const x of links) assert.equal(x, m.bossPool.maxHp * 0.02, 'drone link = 2 % × the pool'); + assert.equal(m.bossPool.maxHp, DATA.bosses.boss_1.bloodPoint.ABYSS * 4, 'the 14 400 000 pool of 4 alive players'); m.dispose(); }); @@ -194,7 +196,7 @@ test('绝境 Hidden Core vs 假想敌:铳 (隐秘核心): a 碎铳之簧 passe assert.equal(m.phase, PHASE.HIDDEN_CORE, 'reached the Hidden Core'); assert.ok(specs.length >= 1); const pool = new SharedBossPool(m.bossPool.maxHp); - assert.equal(pool.maxHp, DATA.bosses.boss_9.bloodPoint.HARD, 'the hidden 铳 pool = bloodPoint'); + assert.equal(pool.maxHp, DATA.bosses.boss_9.bloodPoint.HARD * m.alivePlayers().length, 'the hidden 铳 pool = bloodPoint × the players alive at its start'); const b = createBattleFromSpec(specs[0], new DataSource(DATA, null), { sharedBoss: pool, recordEvents: false, quiet: true }); // the springs stand from the start, 铳 enters ≈ 10 game s later for (let i = 0; i < 1200 && !b.enemies.some((e) => e.alive && e.isBoss); i++) b.step(); diff --git a/test/match/connection.test.js b/test/match/connection.test.js index 9c6b0cc0..edc0849b 100644 --- a/test/match/connection.test.js +++ b/test/match/connection.test.js @@ -183,7 +183,7 @@ test('onLeave: a quitter has no place in the Final Assault pairing or the boss p h.drive(() => m.phase === PHASE.FINAL_ASSAULT); assert.deepEqual(m.fields.map((f) => f.players), [alive], 'one boss field for the two players left'); assert.equal(m.bossPool.maxHp, bossPoolHp(m.gd, m.bossId, 2), 'the co-op boss pool of two alive players'); - assert.equal(m.bossPool.maxHp, m.gd.boss(m.bossId).bloodPoint[m.gd.difficulty], 'bloodPoint, no alive-player factor (DESIGN §20.10)'); + assert.equal(m.bossPool.maxHp, m.gd.boss(m.bossId).bloodPoint[m.gd.difficulty] * 2, 'bloodPoint × the two players left; the quitter does not count (DESIGN §25.13.4)'); const end = h.runToEnd(); assert.equal(end.victory, true); assert.equal(end.players.find((p) => p.playerId === first).roundsPassed, 0); diff --git a/test/match/finalAssault.test.js b/test/match/finalAssault.test.js index 12a70e98..3df13295 100644 --- a/test/match/finalAssault.test.js +++ b/test/match/finalAssault.test.js @@ -17,25 +17,35 @@ test('pairing by seat: (1,2), (3,4); an odd player alone', () => { assert.deepEqual(pairPlayers([p(3), p(1), p(0), p(2)]).map((g) => g.map((x) => x.seat)), [[0, 1], [2, 3]]); }); -test('boss pool = bloodPoint[difficulty] in co-op whatever the alive count (× alive / 4 only with aliveScaling; solo × 0.25) × tuning; shared and never negative', () => { - // research numbers (data/tuning.json left out); DESIGN §20.10: notice 5114's "敌方领袖的总生命值不变" is about the - // mirrored copies, the one note on player count (巴哈姆特 12294 "聯機隊友(撤退/死掉)變少,最後boss血條也會變少") has no - // proportion — config bossHpScale.aliveScaling (off) would apply × alive / 4 +test('boss pool = bloodPoint[difficulty] × the players alive at the fight\'s start (solo × 1) × tuning; config restores the fixed pool; shared and never negative', () => { + // DESIGN §25.13.4: the owner's decision of 2026-10-06 adopts PR #209 by @qingjingshenghuo (bloodPoint is one player's + // share) and replaces the fixed pool of 「保持固定血量」 — config bossHpScale (perPlayer false, solo 0.25) restores it. + // Research numbers (data/tuning.json left out). const { tuning, ...RAW } = DATA; // eslint-disable-line no-unused-vars const gd = new GameData(RAW, 'mode_multi_hard'); - for (const n of [4, 3, 2, 1, undefined, 9]) assert.equal(bossPoolHp(gd, 'boss_1', n), 1800000, `${n} alive`); + for (const n of [1, 2, 3, 4]) assert.equal(bossPoolHp(gd, 'boss_1', n), 1800000 * n, `${n} alive`); + assert.equal(bossPoolHp(gd, 'boss_1'), 1800000 * 4, 'no count given: a full team'); + assert.equal(bossPoolHp(gd, 'boss_1', 9), 1800000 * 4, 'at most aliveFull (4) players'); assert.equal(gd.bossPoolHp('boss_1', 2), bossPoolHp(gd, 'boss_1', 2), 'GameData agrees'); - // the flip: config bossHpScale.aliveScaling true scales the pool by alive / 4 - const scaled = new GameData({ ...RAW, config: { ...RAW.config, bossHpScale: { ...RAW.config.bossHpScale, aliveScaling: true }, - modes: { ...RAW.config.modes, mode_multi_hard: { ...RAW.config.modes.mode_multi_hard, bossHpScale: { ...RAW.config.modes.mode_multi_hard.bossHpScale, aliveScaling: true } } } } }, 'mode_multi_hard'); + assert.equal(bossPoolHp(new GameData(RAW, 'mode_single_abyss'), 'boss_5', 1), 3000000, 'solo: the table value'); + assert.equal(bossPoolHp(new GameData(RAW, 'mode_single_funny'), 'boss_2', 1), 225000); + // the flip back: the fixed pool of 0.1.x (perPlayer false; solo 0.25), and its optional × alive / 4 (aliveScaling) + const withScale = (over) => ({ ...RAW, config: { ...RAW.config, bossHpScale: { ...RAW.config.bossHpScale, ...over } } }); + const fixed = withScale({ perPlayer: false, solo: 0.25 }); + for (const n of [4, 3, 2, 1, undefined, 9]) assert.equal(bossPoolHp(new GameData(fixed, 'mode_multi_hard'), 'boss_1', n), 1800000, `fixed pool, ${n} alive`); + assert.equal(bossPoolHp(new GameData(fixed, 'mode_single_abyss'), 'boss_5', 1), 750000); + assert.equal(bossPoolHp(new GameData(fixed, 'mode_single_funny'), 'boss_2', 1), 56250); + const scaled = new GameData(withScale({ perPlayer: false, aliveScaling: true }), 'mode_multi_hard'); assert.equal(bossPoolHp(scaled, 'boss_1', 4), 1800000); assert.equal(bossPoolHp(scaled, 'boss_1', 3), 1350000); assert.equal(bossPoolHp(scaled, 'boss_1', 2), 900000); assert.equal(bossPoolHp(scaled, 'boss_1', 1), 450000); assert.equal(bossPoolHp(scaled, 'boss_1'), 1800000, 'no count given: a full team'); assert.equal(bossPoolHp(scaled, 'boss_1', 9), 1800000, 'never above the data value'); - assert.equal(bossPoolHp(new GameData(RAW, 'mode_single_abyss'), 'boss_5', 1), 750000); - assert.equal(bossPoolHp(new GameData(RAW, 'mode_single_funny'), 'boss_2', 1), 56250); + // a mode's own entry overrides the global one + const perMode = { ...RAW, config: { ...RAW.config, modes: { ...RAW.config.modes, mode_multi_hard: { ...RAW.config.modes.mode_multi_hard, bossHpScale: { ...RAW.config.modes.mode_multi_hard.bossHpScale, perPlayer: false } } } } }; + assert.equal(bossPoolHp(new GameData(perMode, 'mode_multi_hard'), 'boss_1', 3), 1800000, 'the mode entry first'); + assert.equal(bossPoolHp(new GameData(perMode, 'mode_multi_abyss'), 'boss_1', 3), 3600000 * 3, 'other modes keep the global rule'); // the balance layer multiplies the pool (docs/BALANCE.md) for (const modeId of ['mode_single_funny', 'mode_multi_hard']) { const tuned = new GameData(DATA, modeId); diff --git a/test/match/playtest6-bosspool.test.js b/test/match/playtest6-bosspool.test.js index 4dafc88c..1459a471 100644 --- a/test/match/playtest6-bosspool.test.js +++ b/test/match/playtest6-bosspool.test.js @@ -26,9 +26,10 @@ function realFinalAssault({ bossId, seed, clientCombat = true }) { h.setStage('act2autochess_m01'); const m = h.m; m.bossId = bossId; - // the autoplay lineups cannot clear a full 绝境 pool: 5 % of it (the tuning knob GameData.bossHpMul) — the pool's + // the autoplay lineups cannot clear a full 绝境 pool: 5 % of the one-player table value (the tuning knob + // GameData.bossHpMul; the pool counts both players alive since DESIGN §25.13.4, so 2.5 % of it) — the pool's // arithmetic, not its size, stalled the fight - m.gd.bossHpMul = () => 0.05; + m.gd.bossHpMul = () => 0.025; h.autoHumans(); m.start(); let last = ''; diff --git a/test/sim/playtest6_limits.test.js b/test/sim/playtest6_limits.test.js index ed320602..3c74d846 100644 --- a/test/sim/playtest6_limits.test.js +++ b/test/sim/playtest6_limits.test.js @@ -372,11 +372,12 @@ test('限伤 vs the real leader defences [ASSUMED order]: 阿利斯泰尔\'s 500 assert.equal(pool10.hp, before10); }); -test('限伤 vs 【死亡集群】 (real kit): a drone killed by an operator costs the leader 2 % of the pool max — a loss that lands up to a 14999950 pool and is cancelled above it (ceil)', () => { +test('限伤 vs 【死亡集群】 (real kit): a drone killed by an operator costs the leader 2 % of the pool max — a share, no hit: it lands past the 300000 line too (DESIGN §25.13.4)', () => { // boss_1 / boss_8 skill 2: bb hp_ratio 0.02; the leader's max HP is the shared pool's max (Battle syncs it), so the - // loss is 0.02 × pool max. Today's largest drone pool is boss_8 ABYSS 7.2M → 144000; a pool above 14999950 (≈ 2.08 × - // that), where ceil(0.02 × max) reaches 300000, would make every drone kill a cancelled hit — kept in view for any - // change to the pool size (research 11 §6). + // loss is 0.02 × pool max. With the pool per player alive (the owner's decision of 2026-10-06, PR #209) boss_8 ABYSS + // reaches 21.6M / 28.8M at 3 / 4 players: 432000 / 576000 per drone, past the line where ceil(0.02 × max) ≥ 300000 — + // until 0.2.0 the link was cancelled there like a hit; it is a share of the pool and lands (Battle.loseHp noHitLimit + // [ASSUMED], research 11 §6). assert.equal(gd.enemy('enemy_9013_acstmk').skills.find((s) => s.prefabKey === '2').bb.hp_ratio, 0.02); assert.equal(gd.enemy('enemy_9013_acstmk_2').skills.find((s) => s.prefabKey === '2').bb.hp_ratio, 0.02); const withOp = [{ ...PAIR[0], units: [{ uid: 1, chessId: 'chess_char_1_01_a', row: 10, col: 2 }] }, PAIR[1]]; @@ -399,16 +400,16 @@ test('限伤 vs 【死亡集群】 (real kit): a drone killed by an operator cos assert.equal(drone.alive, false, 'the drone died'); return { lost: before - pool.hp, caps, id: L.id }; }; - const today = run(7200000); - assert.equal(today.lost, 144000, 'boss_8 ABYSS-sized pool: the loss lands'); - assert.deepEqual(today.caps, []); + const solo = run(7200000); + assert.equal(solo.lost, 144000, 'boss_8 ABYSS-sized pool (one player): the loss lands'); + assert.deepEqual(solo.caps, []); const under = run(14999950); assert.equal(under.lost, 299999, 'just under the line: lands'); assert.deepEqual(under.caps, []); - for (const m of [14999951, 15000000]) { + for (const [m, want] of [[14999951, 299999.02], [15000000, 300000], [21600000, 432000], [28800000, 576000]]) { const over = run(m); - assert.equal(over.lost, 0, `${m}: ceil(0.02 × max) = 300000, one hit at the line: cancelled`); - assert.deepEqual(over.caps.map((c) => c[0]), [over.id]); + assert.ok(Math.abs(over.lost - want) < 1e-6, `${m}: the share lands past the line (${over.lost})`); + assert.deepEqual(over.caps, [], `${m}: no cancelled hit`); } }); diff --git a/tools/balance.mjs b/tools/balance.mjs index 95f6afd2..f7c58b96 100644 --- a/tools/balance.mjs +++ b/tools/balance.mjs @@ -7,8 +7,8 @@ // matches (stage, factions, bans, boss and lineups all vary with the seed), simulates the real wave of that round with // the real Battle and FULL content (kits, talents, bonds incl. layers, IN_BATTLE garrisons, items, bands, tokens) and // reports the leak distribution and clear time. Boss rounds (R14 / solo 标准 R9) and the Hidden Core (R15) run the -// real Final Assault fields (pairs, `_s` template for a lone player, shared boss HP pool = bloodPoint (co-op; × alive / 4 -// only with config bossHpScale.aliveScaling; solo ×0.25 [ASSUMED]) — GameData.bossPoolHp —, team LP, overtime drain) and report the pool damage by 150 s, the kill time and the team LP spent. +// real Final Assault fields (pairs, `_s` template for a lone player, shared boss HP pool = bloodPoint × the players alive +// at the fight's start (solo × 1; DESIGN §25.13.4) — GameData.bossPoolHp —, team LP, overtime drain) and report the pool damage by 150 s, the kill time and the team LP spent. // // The competent board of round r (curves below, profile-scaled): shop level, deployed units, elites (精锐), equipment, // 2–3 active bonds built around a core bond (3 members early, 6 from R11 when the pool allows it) and the layers those @@ -378,7 +378,7 @@ export function runBoss({ data, mode, difficulty, round, seed, profile = 1, boss } } const alive = m.alivePlayers(); - // the official pool (co-op = bloodPoint, × alive / 4 only with aliveScaling, DESIGN §20.10; solo ×0.25) — the match's own rule + // the match's own pool rule (bloodPoint × the players alive, solo × 1 — DESIGN §25.13.4) const pool = new SharedBossPool(bossPoolHp(gd, id, alive.length)); let teamLp = alive.reduce((s, p) => s + p.lp, 0); const teamLp0 = teamLp; diff --git a/tools/build-data.mjs b/tools/build-data.mjs index d1ec453c..4b2f0e0c 100644 --- a/tools/build-data.mjs +++ b/tools/build-data.mjs @@ -3511,9 +3511,9 @@ function buildConfig(ctx, waves, stages, bands) { lastRound, bossRound, hiddenRound, rounds, spRounds: roundNums.filter((r) => rounds[r].isSpPrepare), combatTimeLimit, enemyScale, - bossHpScale: type === 'SINGLE' - ? { bloodPointKey: DIFF_KEYS[m.modeDifficulty] || null, solo: 0.25, soloAssumed: true, unaffectedByEnemyScale: true } - : { bloodPointKey: DIFF_KEYS[m.modeDifficulty] || null, coop: 1, aliveScaling: false, aliveFull: 4, aliveAssumed: true, unaffectedByEnemyScale: true }, + // the pool rule's numbers live in the global bossHpScale below (one place restores the fixed pool); a key set here + // would override it for this mode (match/gamedata.js bossPoolShareOf) + bossHpScale: { bloodPointKey: DIFF_KEYS[m.modeDifficulty] || null, unaffectedByEnemyScale: true }, upgradePrices: levels.slice(0, -1).map((l) => shopLv[l].initialUpgradePrice), maxShopLevel: levels.length ? levels[levels.length - 1] : 6, shopSlots: Object.fromEntries(levels.map((l) => [l, { chess: shopLv[l].charChessCount, item: shopLv[l].itemCount }])), @@ -3577,9 +3577,11 @@ function buildConfig(ctx, waves, stages, bands) { }, lpCapPerRound: act.constData.costPlayerHpLimit ?? 10, bossOvertimeAfter: 150, bossOvertimeDrainPerSec: 1, + // DESIGN §25.13.4: the owner's decision of 2026-10-06 adopts PR #209 by @qingjingshenghuo — bloodPoint is one player's + // share; it replaces the fixed pool of 「保持固定血量」 (perPlayer false + solo 0.25 restore it) bossHpScale: { - formula: 'co-op: bloodPoint[difficulty] — one pool for every field ("所有人将一起对敌方领袖造成伤害"; the mirrored copies of a pair field share it, "两侧的敌方领袖共享生命值(敌方领袖的总生命值不变)"); aliveScaling true would scale it × alive players at the Final Assault / aliveFull (巴哈姆特 12294 "聯機隊友(撤退/死掉)變少,最後boss血條也會變少", one community note, no proportion: off until confirmed, the alive / 4 proportion [ASSUMED]); solo: bloodPoint[difficulty] × solo (0.25 = one player of four) [ASSUMED]', - coop: 1, solo: 0.25, soloAssumed: true, aliveScaling: false, aliveFull: 4, aliveAssumed: true, unaffectedByEnemyScale: true, + formula: 'one pool for every boss field ("所有人将一起对敌方领袖造成伤害"; the mirrored copies of a pair field share it, "两侧的敌方领袖共享生命值(敌方领袖的总生命值不变)") = bloodPoint[difficulty] × share. perPlayer true (the owner\'s decision of 2026-10-06, PR #209): co-op share = coop × the players alive when the fight starts (bots and AI 托管 seats count, eliminated and departed seats do not), at most aliveFull; solo share = solo (1). perPlayer false (the fixed pool of 0.1.x, 「保持固定血量」): co-op share = coop whatever the count (× alive / aliveFull with aliveScaling, the alive / 4 proportion [ASSUMED]: 巴哈姆特 12294); solo was 0.25 [ASSUMED]', + perPlayer: true, coop: 1, solo: 1, aliveFull: 4, aliveScaling: false, aliveAssumed: true, unaffectedByEnemyScale: true, }, hiddenCore: { single: 350, multi: 1200, minTeamLpExclusive: 1, difficulties: ['NORMAL', 'HARD', 'ABYSS'], checkedAfterRound: 14 }, dp: { init: 10, perSec: 1, max: 99 },