Sprite packs

Reskin the whole game

Every sprite, tile, background, icon and letter in Sunspire Saga can be replaced with your own art. A pack is nothing more than image files named after the slot they replace. This page lists every slot, the sizes that fit, and how to load what you make.

Loads PNG, GIF or WebP files, or one zip. The pack stays in this browser and the play page uses it at once; the slot list below marks what it covers.

What a pack is

One image file per thing you want to reskin, named exactly after its slot (wolf.png replaces the Fang Wolf, and so on). Load files with the button above, or zip any number of them — folder names inside a zip are ignored, so a zipped folder from your file manager works as-is. Accepted formats: .png, .gif (animated GIFs play their frames), .webp, and .zip containing those. Anything you load is kept in this browser's own database (IndexedDB, with room for large packs); nothing is uploaded. Only load art you made or have the rights to use.

Battle enemies

Centered in their battle slot and drawn at their own pixel size (built-ins are 20–30 px tall). A white hit-flash version is generated automatically.
oozeMire OozeharpyCrag Harpy
batDusk BatboarIron Boar
wolfFang WolfshadePale Shade
spiderPit SpidergargoyleGargoyle
beetleOre BeetleogreMaw Ogre (boss)
golemRuin GolemwyrmShadow Wyrm (boss)
The eight spirits fight you before they join; their battle forms are djinn_battle_flint ... djinn_battle_squall (one per spirit name).

Summons

Shown large in the summon cutscene; the drop-shadow pass is generated for you. Each summon has a slot of its own, with the element slot as fallback.
sum_gnome sum_titanGnome, Titan (fallback sum_earth)
sum_salamand sum_phoenixSalamand, Phoenix (fallback sum_fire)
sum_nixie sum_leviathNixie, Leviath (fallback sum_water)
sum_sylph sum_tempestSylph, Tempest (fallback sum_wind)
sum_sol_avatarSol Avatar (fallback sum_sol)

Characters

Six frames per character, drawn at native pixel size with the feet on the tile (built-ins are 16×22). 2 is the walking frame; left-facing is mirrored from right automatically. In battle the four adepts are drawn at native size (1×) from seven more frames named like the walk frames: the idle back stance back, the two-frame attack attack/attack2 and cast cast/cast2, the single recoil frame hit when taking damage, and downed while knocked out (lying on the ground, bottom-anchored like the rest) — hero_back, ari_cast2, lyn_hit... Townsfolk never fight, so they take only the six walk frames.
hero_down / hero_down2Generic set: applies to every character that has no personal skin loaded.
hero_up / hero_up2
hero_right / hero_right2
For one specific character, replace the hero prefix with their id, e.g. ari_down.png:
ariAri, earth adept and party leader (13 frames)
lynLyn, water adept; wanders Brindle's plaza until she joins (13 frames)
bramBram, fire adept, the miner who joins at the mine (13 frames)
seraSera, wind adept, the scout who joins on the trail (13 frames)
elderElder Sorin, Thera's village elder; stands on the lane by the west houses (6 walk frames)
maraMara, the Thera shopkeeper; picks mint outside her shop on the lane (6 walk frames)
pollyPolly, a Thera village kid; wanders the east end of the lane and hints at Flint. The story never gives Polly a gender — the built-in art is a small child with brown hair, a green tunic and a yellow scarf, so draw them as you like (6 walk frames)
dovDov, the Brindle shopkeeper; stands at the west side of the plaza (6 walk frames)
minerA Brindle miner; wanders near the inn and warns about the ogre (6 walk frames)
inaIna, the innkeeper's daughter; wanders by the Brindle inn (6 walk frames)
hobHob, the farmer of Mira Farmstead east of Thera; wanders the yard by the inn (6 walk frames)

Map objects

Native pixel size, bottom edge anchored to the tile.
djinnfallback for every collectible spirit (~14×11)
djinn_<name>one specific spirit: djinn_flint, djinn_granite, djinn_forge, djinn_ember, djinn_dew, djinn_mist, djinn_breeze, djinn_squall
treetrees on every map (~16×18); add more variants with any suffix (tree_2, tree_pine...) and each tree on the map keeps a stable random pick from them
tree_trail_...variants used only on the Sunspire Trail (tree_trail, tree_trail_2...); without any, trail trees use the generic pool
housewhole buildings, drawn as one sprite over a 48×48 footprint (taller is fine), bottom-anchored, door at the bottom-middle tile. Resolution order: a sprite for the exact building (house_thera_1, house_thera_2, house_thera_shop, house_thera_far_1..2 and house_thera_far_inn at Mira Farmstead, house_brindle_1..3, house_brindle_inn), else its kind (house_inn, house_shop, plus suffix variants), else the generic pool (house, house_2...), else the built-in tile house — per building, so partial packs work.
fence_h fence_post
fence_v fence_v2
the fences around the Thera paddock, four 16×16 tiles chosen by neighbours: fence_h for a run (draw the post at the left, x 2–5, with rails to both edges, so corners clip cleanly), fence_post for the end of a run (post at the right with rails arriving from the left; mirrored automatically for left ends), fence_v / fence_v2 for vertical runs (post at the left, plank at x 6–7 running top to bottom), mixed per tile
boulderthe boulder sealing the fence gap (~16×16, taller is fine), bottom-anchored; boulder_2... variants work like trees
signthe signposts in Thera and Brindle (~16×16), bottom-anchored; sign_2... variants, stable pick per signpost
chesttreasure chests, closed state (~16×16, bottom-anchored, chest_2... variants, stable pick per chest); chest_open (and chest_open_2...) is shown the moment a chest is looted — a still for about 1.5 s, an animated GIF once in full — after which the chest shows the closed sprite again
wellthe healing well in Thera (16×16 fits best — you can stand on it); well_2... variants
springthe spirit spring in the Sunspire; spring_2... variants
grassthe 16×16 ground tile on grassy maps; grass_2... variants mix per tile, grass_trail_... applies only on the Sunspire Trail
wyrm_sShadow Wyrm on the shrine map (~22×18)
ogre_sMaw Ogre in the mine (~18×18)

Battle backgrounds

Drawn behind the combatants, stretched to the 240×160 screen (make them exactly that size for crisp pixels; animated GIFs work here too). Each battle picks the background of the place you are fighting in.
bgfallback for every battle
bg_fieldoutdoors: Thera Fields and around Brindle
bg_mineinside Brindle Mine
bg_trailthe Sunspire Trail
bg_towerinside the Sunspire
Load several variants of one environment by adding any suffix after the type (bg_field_2, bg_mine_deep...) — each battle picks one at random. Any other bg_... name (or plain bg) is a generic variant, used wherever no typed background exists.

Battle interface

All interface art resolves most-specific slot first, then falls back to the built-in look.
icon_fight ... icon_fleethe seven toolbar command icons (fight arts spirit summon item defend flee), ~18×18, centered; the chosen one is drawn two pixels higher, nothing else is added
fx_quake ...cast effect per art (slug names: spaces become underscores, e.g. fx_gaia_blade, fx_ice_horn). Scaled to the screen width (240 px, aspect kept) with its top-left corner on the screen's top-left corner, so a 240×160 image fits exactly and a taller one is cut off at the bottom; drawn under the party sprites; pure black (#000) is transparent; an animated GIF plays once from the moment of the cast at its native speed, and the effect stays on screen for the whole animation
fx_earth / fire / water / wind / healelement fallback for cast effects
art_quake ... / art_earth ...submenu icon per art (~8×8), with art_<element> and art_heal as fallbacks
spirit_flint ... / spirit_earth ...submenu icon per spirit, element fallback
summon_gnome ... summon_sol_avatar / summon_earth ...submenu icon per summon, element fallback (including summon_sol)
item_herb item_potion item_pdrop item_elixiritem icons in the battle ITEM window, the shops and the ITEMS grid (built in 7×7; rows and grid cells grow to fit icons up to 16×16, and bigger ones are shrunk to fit)
item_compassLyn's Compass, the key item, in the ITEMS grid (built in: a brass compass, 7×7)
gear_wood gear_bronze gear_iron gear_steel gear_sol gear_vest gear_leather gear_chain gear_aegisgear icons in the shops and the EQUIP grid, one per weapon or armour (built in 7×7; rows and grid cells grow to fit up to 16×16, bigger ones are shrunk)
mark_equippedthe E drawn over the bottom-right corner of gear a member is wearing in the EQUIP grid (built in: a green E, 6×7)
portrait_ari portrait_lyn portrait_bram portrait_serathe portrait on the member card of the ITEMS and EQUIP screens, 32×32 (bigger ones are shrunk); without one the member's walking sprite is shown at 2×, framed on the head and shoulders
choice_yes choice_noicons beside YES and NO in the yes/no box (built in: a green tick and a red cross, 7×6; the box grows to fit icons up to 24×24)
el_earth el_fire el_water el_wind el_sol el_healelement badge at the right of each arts-window row (~7×7, centred; el_heal for CURE and PURE PLY, el_sol for the SOL AVATAR)
range_one range_all range_ally range_partyrange badge at the far right of each arts-window row: one enemy, every enemy, one ally, the whole party (~7×7, centred)
cursorthe menu cursor, a hand pointing right at the selected row in every list (arts window, pause menu, shops, yes/no choices, title screen); ~12×9, drawn with its right edge at the fingertip and nudged a pixel to and fro while it waits
bg_summon / bg_summon_earth ...summon cutscene backdrop, generic or per element: bg_summon_earth, fire, water, wind for the summons of that element, and bg_summon_sol for the SOL AVATAR, the special summon that needs one spirit of every element on standby. It replaces the whole cutscene background: stretched to the full 240×160 screen (make it that size for crisp pixels), no built-in glow or rays underneath, and an animated GIF plays once from the start with the cutscene stretched to last at least as long as the GIF. The summon figure (sum_...) stands in the centre

Title screen

titlereplaces the built-in logo, ring and ribbon on the title screen; drawn centered from 8 px down over the sky and spire, scaled down only if wider than 240 px (animated GIFs play)

Font

The game font can be replaced one character at a time with small images, the way a bitmap font sheet is cut up. Load them like any other sprite (or in the zip); every character you leave out keeps the built-in 5×5 letter, so a partial set works. File names are case-sensitive here.
A ... Zuppercase letters, 6×8
lowercase-a ... lowercase-zlowercase letters, usually 6×6 (ascenders such as l and h may use an 8-row cell)
0 ... 9digits
period comma colin semicolin questionmark exclaimationpoint apostrophe quote dash underline plus equals slash percent dollar number and at tilde line bracket-left bracket-right parentheses1 parentheses2 arrow arrow-left arrow-right spacepunctuation (colon, semicolon and exclamationpoint are accepted spellings too); space is optional and only sets the width of a space
All cells are bottom-aligned on one line: give every image the same bottom edge (the baseline plus a shadow row, if your letters have one) and draw descenders inside the cell. Glyphs are drawn at their own pixel size with one pixel of air after each (none if the image already ends in an empty column), so sets may be proportional; text wrapping follows the real widths and capitals are 8 px tall, so menus and the battle strip grow to fit. Plain dialogue text shows the glyphs in their own colours (a white glyph with a dark shadow stays that way); coloured labels such as gold headings or red HP tint the glyph in that colour.

Complete slot list

Every file name the loader accepts, generated from the game's own data so it is always current. With a pack loaded, covered slots are marked green with a tick, loaded variants are listed after their slot, and files that match no slot are called out above the list. Slots marked variants also take any suffix (name_2, name_anything...) for extra random variants. Add .png, .gif or .webp to each name.

Making a pack

  1. Draw sprites in any pixel editor (Aseprite, Piskel, GIMP...). Use a transparent background and sizes near the built-ins for the cleanest fit.
  2. Export one file per slot with the exact slot name, e.g. wolf.png. For animation, export an animated .gif instead.
  3. Load the files with the button at the top of this page — or zip the folder and load the zip. Partial packs are fine; unlisted slots keep the built-in art.
  4. Swap art any time by loading a file with the same name again, or press Reset to built-in art to remove everything.
Packs live in this browser only — on another device or after clearing site data, load the zip again.