Playtest #6 follow-up (v2.5.1): leader HP review — 直接乘算, one debuff instance, 999 layer cap, 限伤; elite to the board; 假想敌:胄 kit
- co-op leaders died within seconds: leader HP is the official data (40 values pinned); bond / strategy / item / 机变 / 特质 "+X%" bonuses now add up (PRTS 直接乘算) instead of compounding; a same-named enemy debuff keeps one (strongest) instance per target (奥术 across a pair field); leader parts pass damage 1:1; fixed co-op pool (the user's call) - official limits read from the client: each bond stops at 999 layers (MAX_GARRISON_STACK); a leader hit of 300000+ in boss / hidden battles is cancelled (MAX_BATTLE_DAMAGE, 限伤) — shared/constants.js switches, research 11 - a merge that consumes a deployed copy puts the elite on that tile and facing (user-confirmed); gold target highlight, promotion effect - 假想敌:胄 per PRTS: one shell, shells within range, any drone death costs 2 % max HP, 剑/锤 sorties and 瘫痪 - DESIGN §20.10–§20.14; 2842 unit tests, all 28 browser suites green; Chrome = Node on boss fields
This commit is contained in:
1 parent
6464e4b46a
commit
620f88c0d8
81 files changed
+4194
-447
No files matched your search
@@ -151,6 +151,21 @@ export function boardOrder(board) {
|
||||
.sort((a, b) => b.r - a.r || a.c - b.c);
|
||||
}
|
||||
|
||||
/**
|
||||
* Where a merge's elite stands (PRTS 卫戍协议/帮助 "若消耗已部署至作战区的干员,则发送至作战区对应位置"): of the board tiles
|
||||
* the consumed copies stood on (`[{ key, dir }]`), the first in deployment order (top→bottom, left→right — the copy the
|
||||
* battle deploys first; the right-hand boss half is mirrored on screen but deploys in the same board order) that
|
||||
* `legal(r, c)` accepts for the elite, or null (⇒ the hand). [ASSUMED] the order: the official text names one position.
|
||||
* public/js/ui/gameLogic.js mergeTarget mirrors it for the client.
|
||||
* @param {Array<{ key: string, dir?: string }>} tiles
|
||||
* @param {(r: number, c: number) => boolean} [legal]
|
||||
* @returns {{ key: string, dir?: string, r: number, c: number } | null}
|
||||
*/
|
||||
export function mergeTile(tiles, legal = () => true) {
|
||||
const sorted = (tiles || []).map((t) => { const [r, c] = parseKey(t.key); return { ...t, r, c }; }).sort((a, b) => b.r - a.r || a.c - b.c);
|
||||
return sorted.find((t) => inField(t.r, t.c) && legal(t.r, t.c)) || null;
|
||||
}
|
||||
|
||||
/** Index of the free slot to fill (right→left, config.economy.handFillOrder), or -1. */
|
||||
export function freeSlot(arr) {
|
||||
for (let i = arr.length - 1; i >= 0; i--) if (arr[i] == null) return i;
|
||||
|
||||
Reference in new issue
Block a user