fix: 优先使用香槟炸弹原皮的本地模型覆盖 (#442)

This commit is contained in:
Siornya committed 2026-10-10 04:12:18 +08:00
1 parent 1db8e51023
commit 7ecc80d537
10 files changed
+111 -23

No files matched your search

+4 -3
View File
@@ -48,9 +48,9 @@ describe('extract.py helpers (no UnityPy needed)', { skip: !PY && 'no python3' }
assert.equal(tokenSpines.bundles, 'pkgrps/btl_pfb_tokens_*.ab');
assert.equal(tokenSpines.sub, 'spine/token');
assert.equal(enemySpines.sub, 'spine/enemy');
// every listed id is a token of the game data without a web model (data/assets.json tokens[id].spine), sorted, unique
// Sorted game tokens whose original model needs local art; champagne has a web skin fallback.
const ids = tokenSpines.ids;
assert.equal(ids.length, 39);
assert.equal(ids.length, 40);
assert.deepEqual([...ids].sort(), ids);
assert.equal(new Set(ids).size, ids.length);
const tokens = JSON.parse(readFileSync(path.join(ROOT, 'data/tokens.json'), 'utf8'));
@@ -58,7 +58,8 @@ describe('extract.py helpers (no UnityPy needed)', { skip: !PY && 'no python3' }
const web = JSON.parse(readFileSync(path.join(ROOT, 'data/assets.json'), 'utf8')).tokens;
for (const id of ids) {
assert.ok(tokens[id] || backups.tokens[id], `${id}: a token of the game data`);
assert.equal(web[id]?.spine, undefined, `${id}: no web model`);
if (id === 'token_10031_swire2_gdtrap') assert.match(web[id]?.spine?.skel, /ambienceSynesthesia_4/, 'champagne keeps its skin fallback');
else assert.equal(web[id]?.spine, undefined, `${id}: no web model`);
}
// the 自选 summons whose prefab draws nothing (an EmptyAnimator: displayType HIDDEN / an effect) are left out
for (const id of ['token_10039_ulpia_block', 'token_10055_phatm2_mndclv', 'token_10058_sbell2_icetgt', 'token_10065_demetr_dmtpos',