0.2.5-dev: official battlefield scenes on the 3D board — a local fetch / extract step for the season scene bundles, per-field scene rendering with the metal board as fallback, the full bundle can include the extracted scenes and setup can fetch them (--scenes); nothing official is stored in the repository (PR #533 by @andrew05060414, ported; the owner's decision of 2026-10-12); golden: unchanged

This commit is contained in:
sganggs committed 2026-10-12 14:59:20 +08:00
1 parent 7fd0478dc0
commit d482fbb8ba
19 files changed
+1659 -22

No files matched your search

+48
View File
@@ -271,3 +271,51 @@ the preceding digest exactly; the changed partner/side also changes preparation
All five already differed from 0.2.4, so the final release-relative total remains 45 scenarios (§30.9 plus these
additional pairing effects). There are no new corpus cases or removals. The other follow-up fixes do not move this
corpus; their dedicated regressions cover the reported and newly found cases.
### 30.17 Official battlefield scenes (#532)
Report: the web board draws the metal theme for every battlefield. The reporter asked for the sand theme.
PR #533 by @andrew05060414.
Findings (2026-10-11; the official hot-update lists and asset indexes, read from the CDN, and the scene bundles of
version `26-04-13-12-31-42_e9b560`):
- The official board is not assembled at run time. Every battlefield is a prebuilt scene bundle, shipped only while
the season runs. DESIGN §15 said otherwise from an off-season list and is corrected there.
- Which art a battlefield uses is the dependency list of its scene bundle: the sand theme for act1 m01–m07 and act2
m02 / m04, `map_lakegarden` + `map_syracuse_metro` for act2 m01, `map_kxmr` + `map_lm_center` for act2 m03. The
same in the 上半 version of 2025-11 and the 下半 versions of 2026-03 / 04. No battlefield uses the metal theme.
- The sand theme bundle holds no mesh because the models are baked into each scene ("Combined Mesh (root: scene)").
- A scene's three sub-graphics `HIDDEN@1…3` are the left normal field, the right normal field and the boss field.
- `python3 tools/local-extract/fetch_scenes.py --list` against that Android hot-update list names 33 bundles and
22,801,308 bytes. That is the compressed CDN download, not the extracted size in the full zip.
Change: `tools/local-extract/scenes.py` exports a battlefield's scene (meshes in board space, materials, key light,
lightmap pages with the baked shadow mask in alpha, albedo textures) to `public/assets/local/scene/<stageId>/`;
`extract.py --only scene` runs it, reading the scene bundles from the client, `--scenes <dir>` or
`.cache/official-scenes/*`; `tools/local-extract/fetch_scenes.py` downloads the in-season bundles from the official
CDN (md5-checked against that version's hot-update list). The 3D board draws a stage's scene when the local-art
manifest lists it (`board3d/load.js loadScenePack`, `scene.js setScenePack`); the procedural metal board stays the
fallback and still draws the devices, gates, field edges and terrain overlays.
Owner decision (2026-10-12): the eleven scenes belong to the 0.2.5 asset pack. The maintainer's full release zip
includes the extracted files. A lite package or a source install may download and extract them on that machine
(`node tools/setup.mjs --scenes`; `--no-scenes` skips). Missing Python 3.8+ or UnityPy / lz4 / Pillow is a warning,
and the metal board remains. The repository never stores the bundles or the extracted files (`.gitignore` already
ignores `public/assets/`, `data/local-assets.json` and `.cache/`, and names `.cache/official-scenes/`). Packaging
does not fail when the scenes are absent; the summary line `battlefield scenes` says whether this machine has them.
`scenes.py` and `fetch_scenes.py` ship in a player zip only after they are committed, because the packager reads
`git ls-files`.
No gameplay change: the scene is art under the same grid, camera and unit layer. Golden results are not moved by
this change.
**[ASSUMED]** the light gains `SCENE_LIGHT` (`range` 8.0, `ambient` 0.2, `direct` 0.8, `indirect` 0.4) and the RGBM
reading of the lightmap pages (Unity linear decode, range 5), both in DESIGN §15. Not done: the scene's normal /
metallic / emission maps, map effects, sky box and post-processing; the tile graphics a level switches at run time
(mire, tide) still use the remake's overlays. The extracted byte size inside a full zip was not measured here.
Tests: `test/render/board3d-scene.test.js` (the scene table against data/stages.json, board-space conversion, chunk
layout shared by scenes.py and load.js, sub-graphic groups, RGBM decode, the loader with a fake store, BoardScene
with a stub renderer: scene on / areas / fallback). `test/scene-assets.test.js` (setup's scene step, the full plan
ships extracted scene files, the lite plan ships none, git ignores the bundles).