feedback5: merge CB1 — community reports (bonds / strategies / items): a pair of colds on an enemy becomes the freeze and leaves no cold (the 谢拉格 wind no longer freezes for good), a 复活 (埃芒加德's 命结之秘, M3茧甲) is a knock-out and an immediate free redeploy where the operator lies (砾's and 瑕光's 被击倒时 / 部署时 layers fire), 佩佩's special refresh is paid, the result card hides the layers of 调和 / 协防干员 / 独行 / 绝技, the 炎佑 keeps off 外勤医疗's slot, 凯瑟琳's 定向投放 offers every shop item; 烛煌's 绝处重燃 before the hammer's lock and the 寻呼模块 / 简易通讯机 tier cap kept as they are (the owner's decisions of 2026-10-07); §25.15 → §25.21 (§25.15 is the shortcuts'); golden: vs feedback5 CB1's own rules — roster-005/009/010/012/014/015/016/018/026/029/031/033/036/040/042/046/047/049, bond-egirShip-high, bond-indomShip-low, bond-kjeragShip-high, bond-maniShip-high, bond-raidShip-low, bond-steadShip-high, bond-suntShip-low, boss-boss_2/3/4/6-pair, hidden-boss_8/9/10-pair, standin-07, matches solo-FUNNY-1, solo-NORMAL-1, solo-HARD-1, solo-ABYSS-1, coop3-ABYSS-5, coop4-FUNNY-6, coop4-ABYSS-7; vs CB1 what feedback5 changed since its base (CB2, CB3, CB4, CB5) plus roster-014
Conflicts resolved by hand: - server/sim/content/items/battle.js: CB3 had extended `revivedInPlace` (an in-place 复活 restarts a deploy-timed skill, item 44); CB1 replaced the in-place revive by PRTS's form — `reviveNow`, a `death` hook that redeploys the operator at once, free, where it lies — and removed `revivedInPlace`. CB1's side is kept: its redeploy resets the skill, so an `activateOnDeploy` skill starts anew by itself; CB3's tests (test/sim/feedback5-raid-revive.test.js: the jump at once after M3茧甲 / 埃芒加德, the window back to full, 砾's fresh barrier) pass on it unchanged. Their header, bonds_core's comment, DESIGN §25.17.5 say so. - docs/SIM.md, docs/design/engine.md: CB1's `fatal` rows (the 复活 are `death` hooks now); the `death` rows also say a deploy-timed skill starts anew (§25.17.5). - data/choices.json: no conflict; `node tools/build-data.mjs --offline` on the merged tree rewrites all 15 data files byte-identically, and the JSON compare with feedback5 shows only pools.pool_equip_kathe.maxTier removed (CB1). - docs/history/0.2.0.md: CB1's section renumbered §25.21 (its §25.15.1–10 and two self-citations; no citation of it elsewhere), placed last; the owner's decisions of 2026-10-07 on items 5 and 45 recorded there, in the intro and in the two pin tests' headers (feedback5-blaze-hammer, feedback5-cb1-pins). Golden: solo-FUNNY-1 (outside CB1's list) has 6 埃芒加德 revives and 85 freezes on feedback5's path (instrumented). roster-014 differs from CB1's own digest by 玛恩纳's 无动于衷: CB3's rule (every enemy damage instance) answers the 萨卡兹枯朽战车's pollution that hits a 卡西米尔 operator in CB1's timeline — with that counter limited to attacks the merged roster-014 equals CB1's digest exactly (checked). Gate: non-browser suites 5021 / 5021, npm run golden ok, test/golden.test.js 9 / 9, lint 0 errors, check:imports ok, typecheck ok.
This commit is contained in:
commit
9ca52ba798
39 files changed
+1433
-861
No files matched your search
@@ -237,11 +237,15 @@ test('坎诺特 (利滚利: leftover funds are kept, +1 at ≥ 5): with a full b
|
||||
assert.ok(m.gd.leftoverKeptBands.includes(ps.bandId));
|
||||
ps.funds = 14;
|
||||
const merges = ps.stats.merges;
|
||||
// the level-up on the curve is paid for first (its price depends on the rounds the run levelled at: 9 or 10 here);
|
||||
// after it the bot buys / refreshes nothing that takes it under the 5 capital
|
||||
const level0 = ps.shop.level, price0 = ps.shop.upgradePrice;
|
||||
h.run(() => m.phase === PHASE.COMBAT && m.round === 7);
|
||||
// (a merge may spend the reserve; the level-up on the curve is paid for first and leaves enough here)
|
||||
// (a merge may spend the reserve)
|
||||
if (ps.stats.merges === merges) {
|
||||
checked++;
|
||||
assert.ok(ps.funds >= 5, `seed ${seed}: ${ps.funds} funds banked`);
|
||||
const afterLevelUp = 14 - (ps.shop.level > level0 ? price0 : 0);
|
||||
assert.ok(ps.funds >= Math.min(5, afterLevelUp), `seed ${seed}: ${ps.funds} funds banked (${afterLevelUp} after the level-up)`);
|
||||
}
|
||||
m.dispose();
|
||||
}
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
// Community report of 2026-10-06 「凯瑟琳装备池没有超出商店等级的装备,原版凯瑟琳1升2都能有6本装备」 (item 43): the 凯瑟琳 strategy
|
||||
// (定向投放, up_shop_add_special_goods {count 3, choice 1, pool pool_equip_kathe}) offered only items up to the shop level —
|
||||
// data/choices.json pool_equip_kathe maxTier 'shopLevel', an [ASSUMED] cap (the pool is server-side). The players' first-hand
|
||||
// account: tier VI items show at the 1 → 2 upgrade. The pool is every shop-eligible item now (uniform [ASSUMED]).
|
||||
|
||||
import { test } from 'node:test';
|
||||
import assert from 'node:assert/strict';
|
||||
import { makeMatch, DATA } from './harness.js';
|
||||
|
||||
test('凯瑟琳 定向投放: the level 1 → 2 offer draws from every tier, the special items never', () => {
|
||||
assert.equal(DATA.choices.pools.pool_equip_kathe.maxTier, undefined, 'no shop-level cap in the data');
|
||||
const tiers = new Map();
|
||||
for (let seed = 1; seed <= 12; seed++) {
|
||||
const h = makeMatch({ mode: 'solo', difficulty: 'NORMAL', humans: 1, seed, fake: true }).start();
|
||||
h.toPrep(1, { band: 'band_cathy' });
|
||||
const ps = h.ps('p_0');
|
||||
ps.funds = 50;
|
||||
assert.deepEqual(h.m.handle('p_0', { t: 'g.levelUp' }), { ok: true });
|
||||
assert.equal(ps.shop.level, 2);
|
||||
const offer = ps.offers[ps.offers.length - 1];
|
||||
assert.ok(offer, `seed ${seed}: an offer`);
|
||||
const ids = (offer.slots ?? []).filter((s) => s && s.kind === 'item').map((s) => s.id);
|
||||
assert.equal(ids.length, 3, `seed ${seed}: 3 items`);
|
||||
for (const id of ids) {
|
||||
const rec = h.m.gd.item(id);
|
||||
assert.ok(rec && !rec.shopExcluded, `seed ${seed}: ${id} is a shop item`);
|
||||
tiers.set(rec.tier, (tiers.get(rec.tier) || 0) + 1);
|
||||
}
|
||||
}
|
||||
assert.ok([...tiers.keys()].some((t) => t > 2), `items above the shop level (the parent: tiers I–II only) — ${JSON.stringify([...tiers])}`);
|
||||
assert.ok(tiers.has(6), 'tier VI among them');
|
||||
});
|
||||
Reference in new issue
Block a user