Playtest #4 fixes: tile picking, knocked-down state, element gauges, draft timer, live stats, shop items, drones, 赫默, 炎佑, UI flash
- #1 picking by the tile under the pointer (prep, battle, pen, equipment drops); the dragged model stays under the pointer (mouse and touch); pixel probe removed; phone ghost-click on the underframe fixed - #2 two-tap confirm on 机变 cards (like the shop) - #3 a 同盟 room with one human is untimed like 独立模拟 (no countdown outside battles) - #4 strategy draft: one synced countdown, 30 s per human turn, timeout takes the highlighted band - #5 special 维式重锤 (4) and 突变细胞 no longer sold; item card shows where they come from - #6 operator skill-mode sounds no longer play on normal attacks (纯烬艾雅法拉 and 55 others) - #7 detail card shows live battle stats and the prep-time battle-start stats (g.unitStats) - #8 official element gauges on units; burst cooldown (阻回) per PRTS - #9 knocked-down operators stay on their tile with a redeploy countdown ring - #10 drone behaviour per PRTS (暴鸰, 先兆者 shells, 黑云, 萨科塔之眼) - #11 赫默's drone only from her skill; placeable summons limited to talent tokens - #12 炎佑 stays where it is with no enemies; 祛恶之焰 as a continuous channel - #13 the occasional giant bond icon (loading texture scaled ×46) fixed - docs (DESIGN §18), recordings, data and tests updated (2467 unit tests, all browser suites green)
This commit is contained in:
1 parent
0aba602ecf
commit
d4f868cd19
107 files changed
+4510
-1653
No files matched your search
@@ -224,20 +224,20 @@ test('a terrain change by content (setDeviceActive at the prep end, no recompute
|
||||
|
||||
test('withdrawing a deployed summon into a full hand: HAND_FULL like any other card (no overflow into temp)', () => {
|
||||
const { m, ps } = prepMatch('act2autochess_m04');
|
||||
// 赫默 → one 医疗探机 (deployLimit 1): once deployed no stack is left in the hand to join
|
||||
const medic = give(m, ps, 'chess_char_2_02_a');
|
||||
// 伺夜 → one 狼群 (deployLimit 1): once deployed no stack is left in the hand to join
|
||||
const medic = give(m, ps, 'chess_char_3_19_a');
|
||||
assert.deepEqual(m.handle('p_0', { t: 'g.move', uid: medic.uid, to: { area: 'board', row: 10, col: 5 } }), { ok: true });
|
||||
const drone = ps.hand.find((p) => p && p.kind === 'token');
|
||||
assert.ok(drone && drone.count === 1, 'one drone');
|
||||
assert.ok(drone && drone.count === 1, 'one 狼群');
|
||||
assert.deepEqual(m.handle('p_0', { t: 'g.move', uid: drone.uid, to: { area: 'board', row: 9, col: 4 } }), { ok: true });
|
||||
// golden items never merge with each other: a plain full hand
|
||||
for (let i = 0; i < ps.hand.length; i++) if (!ps.hand[i]) giveItem(m, ps, 'chess_item_1_02_e_b', 'hand', i);
|
||||
assert.ok(ps.hand.every(Boolean) && ps.tempEmpty);
|
||||
assert.equal(m.handle('p_0', { t: 'g.move', uid: drone.uid, to: { area: 'hand', idx: 0 } }).error, ERR.HAND_FULL, 'a new card for a full hand');
|
||||
assert.equal(ps.board.get('9,4'), drone, 'the drone stays on the board');
|
||||
assert.equal(ps.board.get('9,4'), drone, 'the 狼群 stays on the board');
|
||||
assert.ok(ps.tempEmpty, 'nothing overflowed into temp (Ready stays possible)');
|
||||
assert.equal(m.handle('p_0', { t: 'g.move', uid: medic.uid, to: { area: 'hand', idx: 0 } }).error, ERR.HAND_FULL, 'the same as withdrawing an operator');
|
||||
// a free slot: the drone comes back
|
||||
// a free slot: the 狼群 comes back
|
||||
ps.hand[3] = null;
|
||||
assert.deepEqual(m.handle('p_0', { t: 'g.move', uid: drone.uid, to: { area: 'hand', idx: 0 } }), { ok: true });
|
||||
assert.equal(ps.hand[3], drone);
|
||||
|
||||
Reference in new issue
Block a user