Replace fourteenth battle map with hand-painted asset

This commit is contained in:
2026-07-09 15:20:41 +09:00
parent 4c22236e8c
commit ef8d90d8fe
7 changed files with 15 additions and 61 deletions

View File

@@ -2,7 +2,7 @@
## Scope ## Scope
The first thirteen 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 fourteen 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 ## Art Direction
@@ -30,6 +30,7 @@ python scripts/generate-handpaint-map-sample.py --map tenth --webp-quality 90
python scripts/generate-handpaint-map-sample.py --map eleventh --webp-quality 90 python scripts/generate-handpaint-map-sample.py --map eleventh --webp-quality 90
python scripts/generate-handpaint-map-sample.py --map twelfth --webp-quality 90 python scripts/generate-handpaint-map-sample.py --map twelfth --webp-quality 90
python scripts/generate-handpaint-map-sample.py --map thirteenth --webp-quality 90 python scripts/generate-handpaint-map-sample.py --map thirteenth --webp-quality 90
python scripts/generate-handpaint-map-sample.py --map fourteenth --webp-quality 90
``` ```
## Current Assets ## Current Assets
@@ -47,6 +48,7 @@ python scripts/generate-handpaint-map-sample.py --map thirteenth --webp-quality
- `src/assets/images/battle/eleventh-battle-map.webp` - `src/assets/images/battle/eleventh-battle-map.webp`
- `src/assets/images/battle/twelfth-battle-map.webp` - `src/assets/images/battle/twelfth-battle-map.webp`
- `src/assets/images/battle/thirteenth-battle-map.webp` - `src/assets/images/battle/thirteenth-battle-map.webp`
- `src/assets/images/battle/fourteenth-battle-map.webp`
## QA Outputs ## QA Outputs
@@ -74,5 +76,7 @@ python scripts/generate-handpaint-map-sample.py --map thirteenth --webp-quality
- `docs/twelfth-battle-map-handpaint-preview.png` - `docs/twelfth-battle-map-handpaint-preview.png`
- `docs/thirteenth-battle-map-handpaint-before-after.png` - `docs/thirteenth-battle-map-handpaint-before-after.png`
- `docs/thirteenth-battle-map-handpaint-preview.png` - `docs/thirteenth-battle-map-handpaint-preview.png`
- `docs/fourteenth-battle-map-handpaint-before-after.png`
- `docs/fourteenth-battle-map-handpaint-preview.png`
Browser screenshots are saved per verification run after build/deploy. Browser screenshots are saved per verification run after build/deploy.

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

View File

@@ -136,6 +136,15 @@ MAP_CONFIGS = {
"before": BATTLE_IMAGE_DIR / "thirteenth-battle-map.svg", "before": BATTLE_IMAGE_DIR / "thirteenth-battle-map.svg",
"seed": 240824, "seed": 240824,
}, },
"fourteenth": {
"slug": "fourteenth-battle-map",
"terrain_export": "fourteenthBattleMap",
"units_export": "fourteenthBattleUnits",
"ally_positions_export": "fourteenthBattleAllyPositions",
"out": BATTLE_IMAGE_DIR / "fourteenth-battle-map.webp",
"before": BATTLE_IMAGE_DIR / "fourteenth-battle-map.svg",
"seed": 240834,
},
} }

View File

@@ -1,59 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="3200" height="2400" viewBox="0 0 3200 2400">
<defs>
<linearGradient id="field" x1="0" y1="0" x2="1" y2="1">
<stop offset="0" stop-color="#8a8156"/>
<stop offset=".5" stop-color="#b1935b"/>
<stop offset="1" stop-color="#6d734d"/>
</linearGradient>
<pattern id="grain" width="64" height="64" patternUnits="userSpaceOnUse">
<path d="M6 14h22M38 18h18M12 44h24M44 50h14" stroke="#2c2518" stroke-width="5" opacity=".15" fill="none"/>
<path d="M20 6l8 8M50 32l8 8M8 58l10-8" stroke="#e3cb88" stroke-width="4" opacity=".15" fill="none"/>
</pattern>
</defs>
<rect width="3200" height="2400" fill="url(#field)"/>
<rect width="3200" height="2400" fill="url(#grain)" opacity=".64"/>
<rect x="1500" y="-70" width="245" height="2540" rx="105" fill="#5e97a4" opacity=".48"/>
<rect x="2110" y="390" width="210" height="2070" rx="92" fill="#5a8fa1" opacity=".42"/>
<rect x="1588" y="0" width="20" height="2200" rx="10" fill="#a8d5d0" opacity=".22"/>
<rect x="2186" y="455" width="18" height="1820" rx="9" fill="#a8d5d0" opacity=".18"/>
<g opacity=".46">
<ellipse cx="420" cy="320" rx="145" ry="84" fill="#6f8753"/>
<ellipse cx="660" cy="440" rx="168" ry="96" fill="#778e58"/>
<ellipse cx="920" cy="340" rx="138" ry="82" fill="#718854"/>
<ellipse cx="440" cy="1535" rx="180" ry="96" fill="#708854"/>
<ellipse cx="760" cy="1665" rx="230" ry="112" fill="#788f59"/>
<ellipse cx="2870" cy="2030" rx="205" ry="118" fill="#738956"/>
</g>
<path d="M150 1938 L1040 1938 L1450 1560 L2020 1560 L2460 1238 L2920 1238" stroke="#ccb47b" stroke-width="78" stroke-linecap="round" opacity=".9" fill="none"/>
<path d="M980 1492 L1800 1492 L2460 920" stroke="#ccb47b" stroke-width="70" stroke-linecap="round" opacity=".82" fill="none"/>
<path d="M2460 745 L2460 1840" stroke="#ccb47b" stroke-width="64" stroke-linecap="round" opacity=".8" fill="none"/>
<path d="M150 1938 L1040 1938 L1450 1560 L2020 1560 L2460 1238 L2920 1238" stroke="#6e4d2e" stroke-width="12" stroke-dasharray="46 48" opacity=".22" fill="none"/>
<path d="M980 1492 L1800 1492 L2460 920" stroke="#6e4d2e" stroke-width="10" stroke-dasharray="44 46" opacity=".2" fill="none"/>
<g opacity=".58">
<rect x="2290" y="860" width="560" height="64" fill="#9a855d"/>
<rect x="2290" y="1440" width="560" height="64" fill="#927d58"/>
<rect x="2270" y="900" width="64" height="580" fill="#867250"/>
<rect x="2812" y="900" width="64" height="580" fill="#867250"/>
<rect x="2400" y="1068" width="320" height="250" rx="14" fill="#a58b58"/>
<rect x="2475" y="1150" width="170" height="100" fill="#705f42" opacity=".52"/>
<path d="M2310 892 H2838" stroke="#d5bd81" stroke-width="10" opacity=".36" fill="none"/>
<path d="M2314 1472 H2834" stroke="#d5bd81" stroke-width="10" opacity=".3" fill="none"/>
</g>
<g opacity=".82">
<ellipse cx="1120" cy="1812" rx="160" ry="100" fill="#866b3e"/>
<rect x="1008" y="1740" width="224" height="128" fill="#a8874b"/>
<path d="M1008 1740 L1120 1662 L1232 1740Z" fill="#6b4a31"/>
<rect x="1080" y="1792" width="72" height="76" fill="#3b2b20"/>
<path d="M934 1905 C1040 1955 1235 1950 1315 1886" stroke="#d8c08a" stroke-width="18" opacity=".45" fill="none"/>
</g>
<g opacity=".26">
<ellipse cx="930" cy="330" rx="190" ry="112" fill="#9b9366"/>
<ellipse cx="2930" cy="280" rx="230" ry="140" fill="#999165"/>
<ellipse cx="1140" cy="2190" rx="270" ry="150" fill="#9b9366"/>
</g>
<g opacity=".42">
<path d="M0 0H3200V2400H0Z" fill="none" stroke="#ead6a2" stroke-width="22"/>
<path d="M108 98H3092V2298H108Z" fill="none" stroke="#3a2c1b" stroke-width="12"/>
</g>
<rect width="3200" height="2400" fill="#101015" opacity=".035"/>
</svg>

Before

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

View File

@@ -31,7 +31,7 @@ import fortySecondBattleMapUrl from '../../assets/images/battle/forty-second-bat
import fortySeventhBattleMapUrl from '../../assets/images/battle/forty-seventh-battle-map.svg'; import fortySeventhBattleMapUrl from '../../assets/images/battle/forty-seventh-battle-map.svg';
import fortySixthBattleMapUrl from '../../assets/images/battle/forty-sixth-battle-map.svg'; import fortySixthBattleMapUrl from '../../assets/images/battle/forty-sixth-battle-map.svg';
import fortyThirdBattleMapUrl from '../../assets/images/battle/forty-third-battle-map.svg'; import fortyThirdBattleMapUrl from '../../assets/images/battle/forty-third-battle-map.svg';
import fourteenthBattleMapUrl from '../../assets/images/battle/fourteenth-battle-map.svg'; import fourteenthBattleMapUrl from '../../assets/images/battle/fourteenth-battle-map.webp';
import fourthBattleMapUrl from '../../assets/images/battle/fourth-battle-map.webp'; import fourthBattleMapUrl from '../../assets/images/battle/fourth-battle-map.webp';
import nineteenthBattleMapUrl from '../../assets/images/battle/nineteenth-battle-map.svg'; import nineteenthBattleMapUrl from '../../assets/images/battle/nineteenth-battle-map.svg';
import ninthBattleMapUrl from '../../assets/images/battle/ninth-battle-map.webp'; import ninthBattleMapUrl from '../../assets/images/battle/ninth-battle-map.webp';