diff --git a/docs/battle-map-terrain-atlas-pipeline.md b/docs/battle-map-terrain-atlas-pipeline.md index f8b582b..d411f90 100644 --- a/docs/battle-map-terrain-atlas-pipeline.md +++ b/docs/battle-map-terrain-atlas-pipeline.md @@ -2,7 +2,7 @@ ## Scope -The first fifty campaign battles now use the same hand-painted tactical map pipeline. The renderer still reads the original scenario tile coordinates and battle logic; only the map texture asset changes from flat/vector map art to low-contrast raster terrain. +The first fifty-two campaign battles now use the same hand-painted tactical map pipeline. The renderer still reads the original scenario tile coordinates and battle logic; only the map texture asset changes from flat/vector map art to low-contrast raster terrain. ## Art Direction @@ -18,6 +18,7 @@ The first fifty campaign battles now use the same hand-painted tactical map pipe - Very large maps can use a 176px tile target through `VERY_LARGE_MAP_TILE_SIZE` when WebP encoding or browser memory pressure becomes the limiting factor. - Ultra large maps can use a 160px tile target through `ULTRA_LARGE_MAP_TILE_SIZE` when 176px output exceeds WebP encoder limits. - Extreme large maps can use a 152px tile target through `EXTREME_LARGE_MAP_TILE_SIZE` when 160px output exceeds WebP encoder limits. +- Massive maps can use a 144px tile target through `MASSIVE_LARGE_MAP_TILE_SIZE` when 152px output approaches the WebP encoder edge. - Re-evaluate the tile target before a generated map's longest edge approaches roughly 16,384px at 192px per tile. - Use `--tile-size` only for controlled comparisons; commit the selected production size in the map config. @@ -77,6 +78,8 @@ python scripts/generate-handpaint-map-sample.py --map forty-seventh --webp-quali python scripts/generate-handpaint-map-sample.py --map forty-eighth --webp-quality 90 python scripts/generate-handpaint-map-sample.py --map forty-ninth --webp-quality 90 python scripts/generate-handpaint-map-sample.py --map fiftieth --webp-quality 90 +python scripts/generate-handpaint-map-sample.py --map fifty-first --webp-quality 90 +python scripts/generate-handpaint-map-sample.py --map fifty-second --webp-quality 90 ``` Comparison example: @@ -137,6 +140,8 @@ python scripts/generate-handpaint-map-sample.py --map thirtieth --tile-size 192 - `src/assets/images/battle/forty-eighth-battle-map.webp` - `src/assets/images/battle/forty-ninth-battle-map.webp` - `src/assets/images/battle/fiftieth-battle-map.webp` +- `src/assets/images/battle/fifty-first-battle-map.webp` +- `src/assets/images/battle/fifty-second-battle-map.webp` ## QA Outputs @@ -238,5 +243,9 @@ python scripts/generate-handpaint-map-sample.py --map thirtieth --tile-size 192 - `docs/forty-ninth-battle-map-handpaint-preview.png` - `docs/fiftieth-battle-map-handpaint-before-after.png` - `docs/fiftieth-battle-map-handpaint-preview.png` +- `docs/fifty-first-battle-map-handpaint-before-after.png` +- `docs/fifty-first-battle-map-handpaint-preview.png` +- `docs/fifty-second-battle-map-handpaint-before-after.png` +- `docs/fifty-second-battle-map-handpaint-preview.png` Browser screenshots are saved per verification run after build/deploy. diff --git a/docs/fifty-first-battle-map-handpaint-before-after.png b/docs/fifty-first-battle-map-handpaint-before-after.png new file mode 100644 index 0000000..6c04d7e Binary files /dev/null and b/docs/fifty-first-battle-map-handpaint-before-after.png differ diff --git a/docs/fifty-first-battle-map-handpaint-preview.png b/docs/fifty-first-battle-map-handpaint-preview.png new file mode 100644 index 0000000..e3e99f6 Binary files /dev/null and b/docs/fifty-first-battle-map-handpaint-preview.png differ diff --git a/docs/fifty-second-battle-map-handpaint-before-after.png b/docs/fifty-second-battle-map-handpaint-before-after.png new file mode 100644 index 0000000..fb7bf00 Binary files /dev/null and b/docs/fifty-second-battle-map-handpaint-before-after.png differ diff --git a/docs/fifty-second-battle-map-handpaint-preview.png b/docs/fifty-second-battle-map-handpaint-preview.png new file mode 100644 index 0000000..d0d56f3 Binary files /dev/null and b/docs/fifty-second-battle-map-handpaint-preview.png differ diff --git a/scripts/generate-handpaint-map-sample.py b/scripts/generate-handpaint-map-sample.py index 9b31a07..30f3fcc 100644 --- a/scripts/generate-handpaint-map-sample.py +++ b/scripts/generate-handpaint-map-sample.py @@ -20,6 +20,7 @@ LARGE_MAP_TILE_SIZE = 192 VERY_LARGE_MAP_TILE_SIZE = 176 ULTRA_LARGE_MAP_TILE_SIZE = 160 EXTREME_LARGE_MAP_TILE_SIZE = 152 +MASSIVE_LARGE_MAP_TILE_SIZE = 144 TILE = DEFAULT_TILE_SIZE RNG = random.Random(240704) @@ -499,6 +500,26 @@ MAP_CONFIGS = { "seed": 241194, "tile_size": EXTREME_LARGE_MAP_TILE_SIZE, }, + "fifty-first": { + "slug": "fifty-first-battle-map", + "terrain_export": "fiftyFirstBattleMap", + "units_export": "fiftyFirstBattleUnits", + "ally_positions_export": "fiftyFirstBattleAllyPositions", + "out": BATTLE_IMAGE_DIR / "fifty-first-battle-map.webp", + "before": BATTLE_IMAGE_DIR / "fifty-first-battle-map.svg", + "seed": 241204, + "tile_size": MASSIVE_LARGE_MAP_TILE_SIZE, + }, + "fifty-second": { + "slug": "fifty-second-battle-map", + "terrain_export": "fiftySecondBattleMap", + "units_export": "fiftySecondBattleUnits", + "ally_positions_export": "fiftySecondBattleAllyPositions", + "out": BATTLE_IMAGE_DIR / "fifty-second-battle-map.webp", + "before": BATTLE_IMAGE_DIR / "fifty-second-battle-map.svg", + "seed": 241214, + "tile_size": MASSIVE_LARGE_MAP_TILE_SIZE, + }, } diff --git a/src/assets/images/battle/fifty-first-battle-map.svg b/src/assets/images/battle/fifty-first-battle-map.svg deleted file mode 100644 index 2b02add..0000000 --- a/src/assets/images/battle/fifty-first-battle-map.svg +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/assets/images/battle/fifty-first-battle-map.webp b/src/assets/images/battle/fifty-first-battle-map.webp new file mode 100644 index 0000000..abde24a Binary files /dev/null and b/src/assets/images/battle/fifty-first-battle-map.webp differ diff --git a/src/assets/images/battle/fifty-second-battle-map.svg b/src/assets/images/battle/fifty-second-battle-map.svg deleted file mode 100644 index f50c81f..0000000 --- a/src/assets/images/battle/fifty-second-battle-map.svg +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/assets/images/battle/fifty-second-battle-map.webp b/src/assets/images/battle/fifty-second-battle-map.webp new file mode 100644 index 0000000..108f2e4 Binary files /dev/null and b/src/assets/images/battle/fifty-second-battle-map.webp differ diff --git a/src/game/data/battleMapAssets.ts b/src/game/data/battleMapAssets.ts index 1f54e4e..7bfc201 100644 --- a/src/game/data/battleMapAssets.ts +++ b/src/game/data/battleMapAssets.ts @@ -2,8 +2,8 @@ import eighthBattleMapUrl from '../../assets/images/battle/eighth-battle-map.web import eighteenthBattleMapUrl from '../../assets/images/battle/eighteenth-battle-map.webp'; import eleventhBattleMapUrl from '../../assets/images/battle/eleventh-battle-map.webp'; import fiftiethBattleMapUrl from '../../assets/images/battle/fiftieth-battle-map.webp'; -import fiftyFirstBattleMapUrl from '../../assets/images/battle/fifty-first-battle-map.svg'; -import fiftySecondBattleMapUrl from '../../assets/images/battle/fifty-second-battle-map.svg'; +import fiftyFirstBattleMapUrl from '../../assets/images/battle/fifty-first-battle-map.webp'; +import fiftySecondBattleMapUrl from '../../assets/images/battle/fifty-second-battle-map.webp'; import fiftyThirdBattleMapUrl from '../../assets/images/battle/fifty-third-battle-map.svg'; import fiftyFourthBattleMapUrl from '../../assets/images/battle/fifty-fourth-battle-map.svg'; import fiftyFifthBattleMapUrl from '../../assets/images/battle/fifty-fifth-battle-map.svg';