feedback7 UIBACK: upgrading the 调度中心 opens the new shop slot EMPTY — the next refresh or round start fills it; 0.2.0's fill-at-once (464a823, item 19) reverted (GitHub #332 and PR #333 by @2321Robin, official recording BV1AXwuzdEys 1:39 — authored by them: the economy.js change, the rewritten level-slots test and the docs hunks applied as reviewed, without the PR's UPGRADE_FILLS_NEW_SLOTS flag and LOCAL RULING comment: the empty slot is the rule): the shop bar draws a null operator slot as a bare dashed frame (EmptyCard, inert scard--sold) instead of the SOLD OUT 「已招募」 frame, one new UI string in the four packs; META.md §3 and §7 and PLAYING.md say so; the dev mock opens the slot empty and survives null slots; test/ui/shop-empty-slot.e2e.test.js; golden: only matches moves, all 18 (the bots' shop RNG stream) — end results changed in solo-FUNNY-1 defeat→victory, solo-NORMAL-1 and solo-HARD-1 victory→defeat, solo-HARD-2 and solo-ABYSS-1 defeat→eliminated, coop2-NORMAL-14-standins defeat→victory (2 distinct stand-ins fielded: golden-standins.test.js asks ≥ 2); roster, bonds, fields, standins, diy unchanged
This commit is contained in:
1 parent
b4bc89ad4e
commit
4bb0c11e42
15 files changed
+691
-542
No files matched your search
@@ -229,7 +229,7 @@ export function attachAudit(m, { invariants = true, limit = 200 } = {}) {
|
||||
if (f0 - ps.funds !== price && !fx && !hasSpendEffects(m, ps)) fail(`${ps.playerId}: level-up paid ${f0 - ps.funds}, price ${price}`);
|
||||
const next = gd.upgradeBase(ps.shop.level) ?? 0;
|
||||
if (ps.shop.upgradePrice !== next) fail(`${ps.playerId}: upgrade price after level-up ${ps.shop.upgradePrice}, expected ${next}`);
|
||||
// the new level's extra slots open at once (item 19 of 2026-10-06); the cards shown before stay in place
|
||||
// the new level's extra slots open at once, empty (GitHub #332 / PR #333); the cards shown before stay in place
|
||||
const { chess, item } = gd.shopSlots(ps.shop.level);
|
||||
const want = Math.max(chess, layout0.chess) + Math.max(item, layout0.item);
|
||||
if (ps.shop.slots.length !== want) fail(`${ps.playerId}: ${ps.shop.slots.length} shop slots after the level-up to ${ps.shop.level}, expected ${want}`);
|
||||
|
||||
@@ -93,11 +93,14 @@ export class PlayerEconomy {
|
||||
}
|
||||
|
||||
/**
|
||||
* The 调度中心's upgrade opens the new level's extra slots at once, each with a new card drawn at the new level; the
|
||||
* cards already shown stay where they are (chess slots keep their index, the item slot stays after them). Official: the
|
||||
* tutorial's 休整期 page 「升级:…升级后将出现更多的商品栏位、可调度干员以及新装备」; the community report of 2026-10-06
|
||||
* (item 19) 「升级商店获得新的商店位时用新卡补上,而不是空着」. Until 0.2.0 the extra slots waited for the next roll (a
|
||||
* refresh or the round start). [ASSUMED] the new card follows the freeze toggle, as a manual refresh's cards do.
|
||||
* The 调度中心's upgrade opens the new level's extra slots at once — EMPTY: no card is drawn into them (a `null` slot).
|
||||
* The next roll (a manual refresh or the round start) fills them with the other unfrozen slots; the cards already shown
|
||||
* stay where they are (chess slots keep their index, the item slot stays after them). Official: the footage of a 1→2
|
||||
* upgrade (bilibili BV1AXwuzdEys 1:39, GitHub #332 / PR #333 by @2321Robin) shows the new slot appear and stay empty, and
|
||||
* the texts only name the slots — the tutorial's 休整期 page 「升级后将出现更多的商品栏位」, PRTS 帮助 「增加刷新栏位」 —,
|
||||
* never a card that comes with them. 0.2.0 drew a card into each new slot instead (item 19 of the community report of
|
||||
* 2026-10-06, 「升级商店获得新的商店位时用新卡补上,而不是空着」, one uncorroborated remark; its follow-on, that the new card
|
||||
* follows the freeze toggle, was [ASSUMED]); until then the extra slots waited for the next roll as well.
|
||||
*/
|
||||
_openLevelSlots() {
|
||||
const { chess: nChess, item: nItem } = this.gd.shopSlots(this.shop.level);
|
||||
@@ -106,9 +109,8 @@ export class PlayerEconomy {
|
||||
if (nChess <= layout.chess && nItem <= layout.item) return;
|
||||
const chess = old.slice(0, layout.chess);
|
||||
const items = old.slice(layout.chess);
|
||||
const fresh = (s) => { if (s) s.frozen = this.shop.frozen; return s; };
|
||||
while (chess.length < nChess) chess.push(fresh(this._rollChessSlot()));
|
||||
while (items.length < nItem) items.push(fresh(this._rollItemSlot()));
|
||||
while (chess.length < nChess) chess.push(null);
|
||||
while (items.length < nItem) items.push(null);
|
||||
this.shop.slots = [...chess, ...items];
|
||||
this.shop.layout = { chess: chess.length, item: items.length };
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user