0.2.4-dev: round-29 community fixes and the official shared card pool
- Shared card pool and item stock as in the official mode (the owner's request, from the 路标档案馆 video and public notes): solo low-tier exceptions, co-op operators x2, shared item stock with special-item exceptions, normal / advanced occupancy 1 / 2, re-check on buy, 机变 exhaustion, release on consume / destroy / elimination; 整备 never exceeds stock; invariant held <= cap. - 突袭: one taunt-first reselect right after a revive (the owner's rule); ordinary polls and redeploys keep the 0.2.3 rule; a revive on an enemy's tile stays. #475: online boss / hidden-boss Raid may land on the empty half (owner-limited scope). - 浊心斯卡蒂 S1 x 坚守 no longer bounce redirected damage, and the two shares conserve the hit (idea of PR #464 by @HappyTanuki). - Operator fixes adapted from PRs by @Xinglan233 (#459 哈洛德 S2 elemental trigger, #460 涤火杰西卡 shield on the four adjacent tiles, #461 家族徽章 first hit after stealth, #462 松果 S2 regrow per deploy); 克莱门莎 S2 splash 1.1 / 100% ATK and air auto-trigger (#467); 白面 copying 歌蕾蒂娅 / 余 skips the three-member condition (#473, the owner's video). - 香槟炸弹 is not chosen by friendly auras / heals (PR #468 / #476 by @Siornya); 琳琅诗怀雅 coin balance (PR #450 by @IceCodeNew); Touch prep display (PR #451 by @YinqiMargatroid); lobby header (PR #471 by @YuriRestia); Japanese UI terms (PR #448 by @scutkane). - AI-only boss countdown grace, render-failure cache / recovery without restarting a battle, device units kept on a same-field re-entry, DIY detail / skill previews, large-text result buttons. - golden: battle families equal 0.2.3 except diy-135 / diy-136 (克莱门莎); all 18 release matches move through the shared pool, every flip named in docs/history/0.2.4.md §29.12; two coverage scenarios added.
This commit is contained in:
1 parent
1db8e51023
commit
6bfc08270c
129 files changed
+3477
-1011
No files matched your search
+17
-3
@@ -3561,8 +3561,19 @@ function enemyScaleFor(table, type, difficulty, round, isHidden) {
|
||||
* Build data/config.json: modes (rounds, timers, shop, enemy scaling), economy, bans, timers,
|
||||
* titles, tips, broadcasts, trophies and other global tunables.
|
||||
*/
|
||||
function buildConfig(ctx, waves, stages, bands) {
|
||||
function buildConfig(ctx, waves, stages, bands, chess, items) {
|
||||
const { act, ac } = ctx;
|
||||
// Original experiment: 路标档案馆, BV1eLXXBqEgF (2026-03-29), 0:30 / 1:30 / 2:00.
|
||||
// These are concurrent stock counts, not limits on appearances or total purchases during a match.
|
||||
const stockByName = (records, counts) => Object.fromEntries(Object.entries(counts).map(([name, count]) => {
|
||||
const rec = Object.values(records).find((r) => !r.isGolden && r.name === name);
|
||||
if (!rec) throw new Error(`pool stock: missing ${name}`);
|
||||
return [rec.chessId || rec.id, count];
|
||||
}));
|
||||
const chessStock = stockByName(chess, { 普罗旺斯: 10, 德克萨斯: 10, 跃跃: 10, 古米: 10, 格雷伊: 10,
|
||||
风丸: 8, 赫默: 12, 休谟斯: 12, 砾: 12, 蒂比: 12, 调香师: 12 });
|
||||
const itemStock = stockByName(items, { 简易通讯机: 5, 蜂鸣器: 6, 防暴盾: 6, 浓缩嗅盐: 6,
|
||||
寻呼模块: 7, 伪装服: 7, 拉特兰桥夹: 7, 商业包装方案: 2 });
|
||||
const addendum = ctx.research.core?._criticAddendum || {};
|
||||
const multipliers = addendum.enemyStatMultipliers || DEFAULT_ENEMY_MULTIPLIERS;
|
||||
if (!addendum.enemyStatMultipliers) warn('config: using built-in enemy multiplier table (research 01 _criticAddendum missing)');
|
||||
@@ -3668,7 +3679,10 @@ function buildConfig(ctx, waves, stages, bands) {
|
||||
storeCntMax: act.constData.storeCntMax,
|
||||
equipPerChess: 2, maxArtsPerRound: 2,
|
||||
poolCopies: { 1: 12, 2: 14, 3: 18, 4: 16, 5: 8, 6: 5 },
|
||||
poolCopiesOverrides: { chess_char_6_11_a: 4 },
|
||||
poolCopiesOverrides: chessStock,
|
||||
coopPoolMultiplier: 2,
|
||||
itemPoolCopies: { 1: 4, 2: 6, 3: 7, 4: 8, 5: 7, 6: 3 },
|
||||
itemPoolCopiesOverrides: itemStock,
|
||||
goldenCopies: 3,
|
||||
mergeCount: 3,
|
||||
mergeCountOverrides: Object.fromEntries(Object.entries(act.charChessDataDict).filter(([, c]) => !c.isGolden && c.upgradeNum && c.upgradeNum !== 3).map(([id, c]) => [id, c.upgradeNum])),
|
||||
@@ -4079,7 +4093,7 @@ async function main() {
|
||||
// the bonds each strategy is built around (DESIGN §21.26): the bot skips, and the strategy draft marks 本局禁用, a band
|
||||
// whose bond the mode switches off
|
||||
for (const b of Object.values(bands)) b.bondIds = bandBondIds(b, { bonds, pools: choices.pools });
|
||||
const config = buildConfig(ctx, waves, stages, bands);
|
||||
const config = buildConfig(ctx, waves, stages, bands, chess, items);
|
||||
const files = { config, chess, bonds, garrisons, items, bands, effects, choices, enemies, factions, waves, stages, bosses, tokens, backups };
|
||||
|
||||
// the unit forms rebuild every PRESET chess at every rank (before the annotation: each pass as built)
|
||||
|
||||
Reference in new issue
Block a user