Epoch Street Official BoardsNewsDev blogGuide 日本語

← All guides

Texture Pack Creation Guide (English)

Restyle the game with your own art: board squares, the numbers on them, Chance-card artwork, slot-machine symbols, and the High-Low playing cards. A texture pack is one .esskin file; packs can replace *everything* or just a single image — every image you don't include keeps its normal look.

Appearance settings — texture packs are loaded here
Appearance settings — texture packs are loaded here

1. How packs work

2. The easy way — import one image at a time, in-game

No folders, no manifest.json.

  1. Open Settings → Display → Appearance → Art for squares & more (the Art list).
  2. Select the row you want to change (bank, chance, switch…) and press Enter. A file picker opens — choose one image (png / jpg / webp / …).
  3. It applies immediately, and the panel below shows now next to built-in so you can compare. Press Delete to put it back.
  4. Your imports collect into a pack called My images. N names it and P packages it into a shareable myskin.esskin in user://skins/ — hand that file to anyone. The appearance hub does the same from its Package my images ("Package my images") row.

The rows that stand for a whole set — card artwork, slot symbols, trump faces, digits —take several files at once, and there the file name is the id (the part after the key's prefix): 12.png for card #12 (chance.art.12.png works too), 0.png…9.png for digits (digits only take effect once all ten are present).

Anything larger than 1024×1024 is scaled down, and every import is re-encoded as PNG.

2a. Drawing inside the game — the Piece / Texture Studio

You can draw the art inside the game, with no external editor — and with the original still on screen beside you, so "what did the bank square's frame look like again?" is answered while you draw rather than from memory.

The Piece / Texture Studio
The Piece / Texture Studio
  1. Open Piece / Texture Studio from the mode list (no mode needed).
  2. Under "◆ A texture pack", press Start a new texture pack and name it. To fix up a pack you already have, press Duplicate an installed pack instead — the duplicate is a *new* pack and the original is never edited in place.
  3. On the Which art tab, pick what you want to replace and press Draw this one.
  4. Draw on the Draw tab. The Compare column on the right shows three live samples of the key you are on — Draft / Now / Built-in — so you can check your work against the original at any moment.
  5. On the Pack info tab, fill in the name, author, version and description. Art style is either pixel art (crisp) or painted art (smooth).
  6. Make the pack writes an .esskin, installs it and switches it on, so you can use it right away. Share does that first and then goes on to the publish form (where the description and changelog are typed).

Drafts live in user://skins/studio/<name>/ and use the same key-as-file-path layout as §4, so you can start a pack in the Studio and finish it in an external pixel editor —save the PNG outside and the Studio notices and offers to reload it.

A draft folder never reaches a match. Nothing you are half-way through drawing can show up in a game until you press Make the pack.

Other controls

3. Building a pack from a folder (quick start)

  1. Create a folder user://skins/dev/MyPack/. On Windows that is %APPDATA%\EpochStreet\skins\dev\MyPack\.
  2. Put a manifest.json in it:
   { "format": 1, "name": "MyPack", "author": "you", "version": "1.0",
     "filter": "nearest" }

filter: "nearest" for crisp pixel art, "linear" for smooth painted art.

A pack may also say what the money in a match is called, so a themed pack can arrive already speaking its own currency:

   { "format": 1, "name": "Hyrule", "filter": "nearest",
     "currency": { "name": { "ja": "ルピー", "en": "Rupees" },
                   "unit": { "ja": "ルピー", "en": "R" } } }

name replaces the word "Cash" where it labels a figure; unit replaces the G after every number. Both are optional and independent (rename just the unit if you like), at most 10 and 6 characters. A player who set their own currency in Settings → Display → Appearance → Currency outranks the pack.

A pack may name the shops and lot buildings too — replace only the pictures and the buildings go on being called "Custom image":

   { "format": 1, "name": "My High Street", "filter": "linear",
     "names": { "shopRank": { "3": { "en": "Silver Store" } },
                "lot":      { "tollbooth": { "en": "Checkpoint" } } } }

shopRank takes fee ranks "0"–"7"; lot takes tollbooth / inn / helipad / taxoffice / myhome / realestate / park (the amusement park has one picture per capital stage but only one name, so it is just park). At most 16 characters each. The language must match exactly — a name written only under "en" is shown only to players playing in English; everyone else sees the game's own name, so that nobody is handed a name they cannot read.

Sphere Battle mods (from 2026-10-05 — test builds first, like Sphere Battle itself) use the same shape: each sphere's name, the class names, and the word "Sphere" itself:

   { "format": 1, "name": "Item pack", "filter": "nearest",
     "names": { "sphere":      { "1": { "en": "Super Mushroom" } },
                "sphereClass": { "mage": { "en": "Wizard" } } },
     "terms": { "sphere":  { "en": "Item" },
                "spheres": { "en": "Items" } } }

sphere takes sphere numbers "1"–"128"; sphereClass takes warrior / merchant / mage / cleric / thief / dancer / hero / sage / freelancer / smuggler. Names: 20 characters. With terms.sphere every "Sphere" in play becomes that word (Sphere Battle → Item Battle, Sphere die → Item die; "a sphere" → "an item"). spheres is the English plural — leave it out and an "s" is added ("TM" → "TMs"). Words: 12 characters. Debug/developer text and anything outside the game (site, guides) keep the original word. Languages match exactly as above (except that the Spanish UI uses the English word). In Streamer Mode a pack you have not allowed on stream does not rename anything. To type them in game instead: Settings →Display → Appearance → Sphere names & pictures — what you type goes into your own pack, and P turns it into a shareable pack.

  1. Add images using the paths from the table below (start with one — e.g. square/shop.png). A ready-made example lives in the repo at docs/skin-template/ (one sample of each category) — copy it and replace the art.
  2. In-game: enable the pack in Settings → Display → Appearance → Texture-pack stack (Enter toggles the checkbox, ←→ moves a pack's priority). Press F5 during a match to see your latest saved edits instantly. The preview strip on that screen shows tiles, both digit sets, a card, a slot symbol and a trump card live.
  3. When happy, press P on your dev-folder row to package it into a shareable MyPack.esskin (written next to the installed packs in user://skins/).

4. Image paths (the full v1 list)

Sizes are the *design* sizes — other sizes are scaled to fit (keep the aspect ratio). PNG with transparency only.

Path in the packReplacesSize
square/<type>.png — type is one of: shop, vacant, bank, card_spade, card_heart, card_diamond, card_club, event, chance, casino, cannon, stockbroker, lucky, superlucky, changingmark, switch, rest, warp, dice, vehicle, door, doorexit, barrier, vehicleexit, vehicleempty, stairsup, stairsdownthat square type's tile art (stairsup / stairsdown are the up and down staircases, used on boards with floors)64×64
square/<type>/<colour>.png — colour 0-63; type is one of the squares that CARRY a colour: warp, door, doorexit, cannon, switch, vehicle, vehicleexit, vehicleempty, stairsup, stairsdownart for that colour only (e.g. square/warp/5.png = the warps whose colour is 5). A warp's colour is what pairs it with its destination, so it can have its own picture; a colour you do not cover falls through to the two rows below64×64
square/vacant.pngthe empty lot. If you supply this, the game draws nothing of its own on the square — no gold SALE tag, no grey owner band, no dashed parcel hint, only the two rings that say which area it belongs to. Saying 「for sale」 is your picture's job (a built-on lot is different: it keeps the owner's colour band)64×64
square/changingmark/<suit>.png — suit is spade, heart, diamond, clubone image per suit for the changing-mark square. It cycles while you play, so this is what lets your art say which mark it grants next. Ship none and your square/changingmark.png is used with the suit symbol drawn on top, so the square is never unreadable64×64
square/<vehicle type>/<style>.png — type is vehicle, vehicleexit, vehicleempty; style is plane, ship, car, train, minecartone image per vehicle style, so a board's ferry line and its train line still look different under your pack. Ship none and square/vehicle.png is used for every style64×64
square/switch/<kind>.png — kind is pass (pass switch), chance (pass switch + chance square)one image per switch kind; a stop switch stays square/switch.png. Ship none and square/switch.png is used as it is (no "»" / "?" mark is drawn over a picture). The colour mask is square/tint/switch/<kind>.png (used only from the pack that drew that kind)64×64
square/tint/<type>.png — the same ten typesthe colour mask over square/<type>.png: where it is opaque, the tile wears that square's own colour (multiplied, so your shading survives). One image covers all 64 colours — ship this when you cannot know the board. Only the mask from the same pack as the art is used64×64
square/shop.owned.pngoptional variant for owned shops64×64
square/shop/building/<rank>.png — rank 0–7the shop-building pictogram per shopping-fee tier48×32
square/lot/<building>.png — tollbooth, helipad, taxoffice, myhome, realestate, inn, park0–park5the developed-lot building pictograms (inn = the Inn)48×32
board/background.pngthe backdrop behind the board (tiled)512×512
digits/board/0.png … 9.png, plus optional minus.png, g.pngthe numbers drawn on squares (prices/fees) — this set is used *only* there16×22 per digit
digits/payment/0.png … 9.png, minus.png, g.pngthe big payment/salary numbers — a separate texture set from the square digits, never shared24×34
chance/back.png, chance/front.pngChance-card back and face frame96×144
chance/art/<id>.png — the id is the Chance card's number: 0–226 in the product build, plus 301–331 under developer modethe artwork of Chance card #id80×80
slot/frame.pngthe slot machine cabinet, drawn over the reels — keep the reel window (x 71–329, y 58–240) transparent400×372
slot/symbol/<n>.png — 1 slime, 2 stock, 3 warp, 4 wildcard, 8 sevenslot reel symbols48×48
square/event/<id>.png — id = the Chance card number an event square fires (1+), or an event idThe event square's art, one image per id. The ids are listed in the Art list (e.g. square.event.12 → square/event/12.png); ids you do not name keep the event face from square/<type>.png64×64
casino/<motif>.png — cherries, warp, dokodemo, seven, coin, coins, loss, holiday, turnaround, shopup, stockdiv, ska, die, twodice, ticket, hat, belt, shoes, chest, trap, boost, seedThe casino minigame pictograms (prizes, chests, jack-in-the-box, boost, and the Power Seed of Treasure Hunt (Modern)) — shared by Scratch, Lucky Panel, Rope, Tarot, both races, Treasure Hunt and Battle Colosseum64×64
casino/racer/bird.png, casino/racer/slime.pngThe race characters (bird = Legacy Race, slime = Modern Race). Tinted with the seat colour, so pale art keeps all 8 players distinct64×64
casino/tarot/who/<0-4>.png, casino/tarot/what/<0-8>.pngThe tarot faces (who = Wheel of Fortune, Emperor, Hanged Man, Judgement, World / what = Chariot, Magician, Lovers, Death, Strength, Star, Moon, Sun, Joker (8 = the Silver Tarot rule's Modern only))64×64
trump/back.png, trump/<suit>/<rank>.png — suit spade, heart, diamond, club, rank 1–13 (1 = Ace, 11–13 = J/Q/K)the High-Low playing cards64×96
money/cash.pngthe coin beside every player's cash and in the payment burst32×32
money/stock.pnga mark beside the stock figure — replaces the built-in TURNIP (in Japanese kabu means both "turnip" and "stock" — the pun the mark is)32×32
award/<name>.png — tollking (Toll King), propertyking (Property King), stockking (Stock King)the three match-award trophiesabout 64×64
sphere/<colour>.png — colour is blue, yellowgreen, orange, red, yellow, green, purple (Movement, Suits, Money, Shops, Fees, Stocks, Special)a sphere's picture, per colour — one picture for every sphere of that colour, drawn instead of the dot in sockets, the bag, the acquisition card, the class card and the sidebar (where a thin line in the colour sits under it). Also importable from the colour rows of the in-game "Sphere names & pictures" screenabout 32×32
sphere/no/<number>.png — number 1–128one picture per sphere; beats the colour pictureabout 32×32
spheredie/face.png, spheredie/empty.pngthe sphere die's face and the empty socket markup to 256×256
spheredie/<colour>.png, spheredie/no/<number>.pngthe big sphere on the die (high resolution welcome, up to 1024×1024). Without it the sphere/ picture is scaled up, else the colour dotabout 256×256
dice/face.pngthe upper-left die's ground (your turn, a watched player, a summon; both dice of a pair). Without it: the white face and its rim128×128 (square)
dice/<face>.png — face 0–12 (dice/0.png … dice/12.png)one die face, drawn over the ground (paint it opaque for a whole-face picture). 0 is the blank face of a finished walk, 7–9 come from a board's settings, 10–12 from two dice shown on one128×128 (square)

Notes:

5. Finding a texture's name

The easy way: Settings → Display → Appearance → Art for squares & more (the Art list). Every replaceable image is listed kind by kind with its file path, how it looks now, how it looks built-in, and which pack replaced it. F narrows the list to what your pack actually replaced. No Debug Mode needed — and with nothing imported it still works as a plain "what does this square look like?" browser.

The appearance list — image paths and what currently replaces each
The appearance list — image paths and what currently replaces each

For a deeper trace (test builds only), with Debug Mode on, open Other → Debug → Skin audit during a match: it lists every texture path the game has requested this session and which pack answered (or "default"). Visit a screen (the board, a card, the slot…) and check the list — it's the fastest way to see what's left to cover.

6. Import, upload, download

An imported pack joins the list and is enabled straight away. Copying a file into the folder by hand does nothing — the set of enabled packs lives in skins.json, and only the import writes to it.

7. Limits (checked on import/publish)

LimitValue
Pack file sizeup to 8 MB
Single imageup to 1024×1024 px
Files per packup to 2000
FormatPNG (with alpha)
Nameup to 24 characters
Building name (names)up to 16 characters each
Sphere / class name (names.sphere / names.sphereClass)up to 20 characters each
Word (terms)up to 12 characters each

A failed import lists exactly which rule was broken and for which file.

7a. Sharing a whole shop design

The images you import and the names you type in Settings → Display → Appearance → Shop designs become one .esskin when you press P on that screen. Whoever receives it presses I on the texture-pack screen and picks the file: the art and the names arrive together (an imported pack is enabled and put on top for you).

To keep a pack's art but go back to the names you are used to, there are two ways:

8. Tips