6.4 KiB
Advance Wars — spritesheet spec
Art is split into five independent sheets, one per category, so each can be painted and dropped in separately. Until a sheet is painted, the game renders a procedural stand-in with the exact same frame map — everything is fully playable art-free, and you can drop in one sheet at a time.
Rivers and roads need NO art on the map itself: they are drawn in code (Graphics) from tile connection masks, so there are no variant frames to paint for the terrain sheet. Shoreline foam where sea meets land is also drawn in code. This exemption does not extend to the battle background sheet (§5) — that one needs a full backdrop scene for every occupiable terrain, river/road/bridge included, since it's a standalone illustration rather than a tileable ground texture.
Drop-in procedure (no code changes)
- Paint a sheet per the specs below.
- Save it under
assets/images/advancewars/(suggested names below). - In
data/advancewars-artwork.json, set that sheet'spath. - Reload. Sheets left
path: nullkeep their procedural stand-in.
Keep source PSDs next to the PNGs. Frames are append-only — never
renumber. Frame indices are pinned in data/advancewars-rules.json
(terrains[].frame, units[].frame) and in UI_FRAMES in
AdvanceWarsMapView.js.
Tinting rules (important!)
The building sheet and the unit sheet are painted neutral and tintable: light gray / near-white bodies (#e0e0e0-ish) with dark outlines. The engine applies each army's color with a multiply tint at runtime (orange / blue / yellow / green + gray for neutral buildings), and flips unit art horizontally for enemy armies — so paint every unit facing RIGHT. Avoid saturated colors on anything tinted; details that must stay colored (glass, smoke, tires) should be dark.
The terrain and UI sheets are painted in full color — no tinting.
1. Terrain sheet — advancewars-terrain.png
48×48 cells, 8 columns × 1 row = 384×48 px. Full color, opaque tiles.
| frame | content |
|---|---|
| 0 | Plain (grass) |
| 1 | Wood (trees — hides units in fog) |
| 2 | Mountain |
| 3 | Sea |
| 4 | Reef (rocky shallows on sea) |
| 5 | Shoal (beach/sand transition) |
| 6 | Bridge, horizontal (paint the water background into the tile) |
| 7 | Bridge, vertical (ditto) |
Everything is a flat 48×48 tile — no headroom on this sheet. Rivers, roads and coastlines are code-drawn; do not paint them.
2. Building sheet — advancewars-buildings.png
48×64 cells, 5 frames in 1 row (suggest 6 columns = 288×64 px, last cell spare). Bottom 48×48 is the tile footprint; the top 16 px is headroom for roofs and flags. Bottom-aligned, transparent background (the ground tile shows through), neutral + tintable.
| frame | content |
|---|---|
| 0 | City |
| 1 | Base (land factory) |
| 2 | Airport |
| 3 | Port |
| 4 | HQ (make it grand — flag, use the headroom) |
3. Unit sheet — advancewars-units.png
48×64 cells, 12 columns × 3 rows = 576×192 px. Bottom-aligned in the 48×48 footprint with 16 px headroom for heads/rotors/masts. Transparent background, neutral + tintable, facing RIGHT.
Each unit gets exactly two frames: [idle A, idle B] — a subtle
2-frame cycle (bob, tread shift, rotor spin). Frames are base and
base+1, laid out row-major:
| base | unit | base | unit | |
|---|---|---|---|---|
| 0 | Infantry | 18 | Missiles | |
| 2 | Mech | 20 | Fighter | |
| 4 | Recon | 22 | Bomber | |
| 6 | Tank | 24 | B-Copter | |
| 8 | Md Tank | 26 | T-Copter | |
| 10 | APC | 28 | Battleship | |
| 12 | Artillery | 30 | Cruiser | |
| 14 | Rockets | 32 | Lander | |
| 16 | Anti-Air | 34 | Sub |
4. UI sheet — advancewars-ui.png
48×48 cells, 7 frames in 1 row (suggest 8 columns = 384×48 px, last cell spare). Full color, transparent background.
| frame | content |
|---|---|
| 0 | tile cursor (corner brackets, white) |
| 1 | explosion, small |
| 2 | explosion, big |
| 3 | capture flag icon |
| 4 | low-fuel icon (lightning bolt) |
| 5 | low-ammo icon (bullet) |
| 6 | CO power star |
Icons 3–6 render at roughly 40% tile size as unit badges; keep them bold and readable when small.
5. Battle background sheet — advancewars-battlebg.png
256×256 cells, 5 columns × 3 rows = 1280×768 px (14 frames used, last cell
spare). Full color, full-bleed illustration — no transparency needed,
these fill the entire backdrop behind each fighter in the battle cut-in
window (AdvanceWarsBattleAnim.js). Landscape/scene paintings, not tile
icons: think "diorama behind the two combatants," not "48×48 ground swatch."
One frame per terrain type a unit can actually stand on, plus one per building type. A property tile's own terrain id (city/base/airport/port/hq) is its building type — there's no separate "terrain underneath the building" to paint over, since a tile only ever has one terrain value at a time. So each frame below is a straight lookup, not a layered composite.
| frame | content |
|---|---|
| 0 | Plain (grass field) |
| 1 | Wood (forest clearing) |
| 2 | Mountain |
| 3 | Sea (open water) |
| 4 | Reef (rocky shallows) |
| 5 | Shoal (beach) |
| 6 | River |
| 7 | Bridge — used for both horizontal and vertical bridge tiles; orientation doesn't matter for a static backdrop, so this one frame covers both bridgeh and bridgev |
| 8 | Road |
| 9 | City |
| 10 | Base (land factory) |
| 11 | Airport |
| 12 | Port |
| 13 | HQ |
Each fighter's backdrop is picked by looking up the terrain tile they're
actually standing on when the battle happens (from the engine's battle
event coordinates) — so, e.g., a tank parked on a captured city shows the
City background, not Plain, even though a tank could also be fought on open
grass elsewhere. The defender's backdrop is horizontally mirrored (matching
the mirrored defender unit sprite) — avoid art with strong left/right
asymmetry (e.g. a building silhouette that visibly leans one way) unless
you're fine with it flipping on the right-hand side.
Unlike the other four sheets, this one is painted in full color and is not tinted — buildings here don't need to react to owner army color the way the small map-icon building sheet does.
Also paint frame 86 of assets/images/game-icons.png (44×44, row 5
col 11 of that 15-per-row sheet). Suggested motif: a small orange tank on a
green tile, AW box-art style.