From e2fa97941f83ec9c4fd3c930c7e367d217ab5d19 Mon Sep 17 00:00:00 2001 From: Wickedness Date: Thu, 9 Jul 2026 15:02:05 +0900 Subject: [PATCH] Replace ninth battle map with hand-painted asset --- docs/battle-map-terrain-atlas-pipeline.md | 6 +- ...inth-battle-map-handpaint-before-after.png | Bin 0 -> 1886064 bytes docs/ninth-battle-map-handpaint-preview.png | Bin 0 -> 1619687 bytes scripts/generate-handpaint-map-sample.py | 9 ++ src/assets/images/battle/ninth-battle-map.svg | 88 ------------------ .../images/battle/ninth-battle-map.webp | Bin 0 -> 1046478 bytes src/game/data/battleMapAssets.ts | 2 +- 7 files changed, 15 insertions(+), 90 deletions(-) create mode 100644 docs/ninth-battle-map-handpaint-before-after.png create mode 100644 docs/ninth-battle-map-handpaint-preview.png delete mode 100644 src/assets/images/battle/ninth-battle-map.svg create mode 100644 src/assets/images/battle/ninth-battle-map.webp diff --git a/docs/battle-map-terrain-atlas-pipeline.md b/docs/battle-map-terrain-atlas-pipeline.md index f64cb27..8b56319 100644 --- a/docs/battle-map-terrain-atlas-pipeline.md +++ b/docs/battle-map-terrain-atlas-pipeline.md @@ -2,7 +2,7 @@ ## Scope -The first eight 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 nine 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 @@ -25,6 +25,7 @@ python scripts/generate-handpaint-map-sample.py --map fifth --webp-quality 90 python scripts/generate-handpaint-map-sample.py --map sixth --webp-quality 90 python scripts/generate-handpaint-map-sample.py --map seventh --webp-quality 90 python scripts/generate-handpaint-map-sample.py --map eighth --webp-quality 90 +python scripts/generate-handpaint-map-sample.py --map ninth --webp-quality 90 ``` ## Current Assets @@ -37,6 +38,7 @@ python scripts/generate-handpaint-map-sample.py --map eighth --webp-quality 90 - `src/assets/images/battle/sixth-battle-map.webp` - `src/assets/images/battle/seventh-battle-map.webp` - `src/assets/images/battle/eighth-battle-map.webp` +- `src/assets/images/battle/ninth-battle-map.webp` ## QA Outputs @@ -54,5 +56,7 @@ python scripts/generate-handpaint-map-sample.py --map eighth --webp-quality 90 - `docs/seventh-battle-map-handpaint-preview.png` - `docs/eighth-battle-map-handpaint-before-after.png` - `docs/eighth-battle-map-handpaint-preview.png` +- `docs/ninth-battle-map-handpaint-before-after.png` +- `docs/ninth-battle-map-handpaint-preview.png` Browser screenshots are saved per verification run after build/deploy. diff --git a/docs/ninth-battle-map-handpaint-before-after.png b/docs/ninth-battle-map-handpaint-before-after.png new file mode 100644 index 0000000000000000000000000000000000000000..25fb321518cbe1be82f45de7376ecbc062c0ae6f GIT binary patch literal 1886064 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