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.

1. How packs work
- A pack is a zip renamed to
.esskincontaining PNG images whose folder path is their meaning: an image atsquare/shop.pngreplaces the shop-square texture. - Packs are local: they change what *you* see. Other players' games are unaffected (and their packs don't affect you). Replays and spectating use *your* packs.
- You can enable several packs at once and order them (Settings → Display → Appearance → Texture-pack stack). For each image the topmost pack that provides it wins; anything nobody provides falls back to the built-in look. Mixing a "board" pack with a "cards" pack just works.
- Some boards draw their own squares. A board author can put a picture of their own on a square — Dream World's bank is a wrapped sweet, not a generic bank — and by default the board's picture wins over yours, so the board still looks like itself. Your pack fills in everywhere the board said nothing, which is almost everywhere.
- A pack that redraws *most* of the board is treated as a whole-look statement and covers the board's own art instead. Each pack shows which way it went on its row in the stack screen, with the number it was judged on ("priority").
- Press
Bon a pack's row to decide it yourself: automatic → always beat the board→ always yield to the board → automatic. Your answer always outranks the number. - A pack you published carries the priority the site recorded for it, so everyone who installs it starts from the same behaviour; the operators can adjust it.
- The same rule covers building art, the backdrop (
board/background.png) and 3D models. - Anything missing, oversized, or broken simply falls back — a pack can never break the game.
2. The easy way — import one image at a time, in-game
No folders, no manifest.json.
- Open Settings → Display → Appearance → Art for squares & more (the Art list).
- Select the row you want to change (bank, chance, switch…) and press Enter. A file picker opens — choose one image (png / jpg / webp / …).
- It applies immediately, and the panel below shows now next to built-in so you can compare. Press Delete to put it back.
- Your imports collect into a pack called My images. N names it and P packages it into a shareable
myskin.esskininuser://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.

- Open Piece / Texture Studio from the mode list (no mode needed).
- 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.
- On the Which art tab, pick what you want to replace and press Draw this one.
- Card artwork, Slot symbols and Card faces open with ▶ into one row per image (
#12 …for a card) — pick the one to draw. Typing a number or a name in Filter finds it too. - It asks for a size (64px by default — one board square).
- With Start from the original ticked, the game's own art is copied in for you to paint over. The built-in art itself is never modified.
- Load from an image puts a picture you already have under that key.
- 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.
- Trace over the original puts the built-in art faintly under your canvas.
- Copy the original in repaints the current key from the built-in art (undoable).
- Change the size scales what you have drawn.
- On the Pack info tab, fill in the name, author, version and description. Art style is either pixel art (crisp) or painted art (smooth).
- 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
- Text size — the A- / A+ buttons in the header (9–28). Remembered for next time.
- Deleting a draft — Delete draft at the bottom of the first screen. It asks first, and any
.esskinyou already made from that draft is not deleted. - Tags — set them on the Share form's Tags row (up to 5). “Featured” and “Official” are operator-only and are not offered.
3. Building a pack from a folder (quick start)
- Create a folder
user://skins/dev/MyPack/. On Windows that is%APPDATA%\EpochStreet\skins\dev\MyPack\. - Put a
manifest.jsonin 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.
- 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 atdocs/skin-template/(one sample of each category) — copy it and replace the art. - 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.
- When happy, press P on your dev-folder row to package it into a shareable
MyPack.esskin(written next to the installed packs inuser://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 pack | Replaces | Size |
|---|---|---|
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, stairsdown | that 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, stairsdown | art 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 below | 64×64 |
square/vacant.png | the 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, club | one 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 unreadable | 64×64 |
square/<vehicle type>/<style>.png — type is vehicle, vehicleexit, vehicleempty; style is plane, ship, car, train, minecart | one 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 style | 64×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 types | the 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 used | 64×64 |
square/shop.owned.png | optional variant for owned shops | 64×64 |
square/shop/building/<rank>.png — rank 0–7 | the shop-building pictogram per shopping-fee tier | 48×32 |
square/lot/<building>.png — tollbooth, helipad, taxoffice, myhome, realestate, inn, park0–park5 | the developed-lot building pictograms (inn = the Inn) | 48×32 |
board/background.png | the backdrop behind the board (tiled) | 512×512 |
digits/board/0.png … 9.png, plus optional minus.png, g.png | the numbers drawn on squares (prices/fees) — this set is used *only* there | 16×22 per digit |
digits/payment/0.png … 9.png, minus.png, g.png | the big payment/salary numbers — a separate texture set from the square digits, never shared | 24×34 |
chance/back.png, chance/front.png | Chance-card back and face frame | 96×144 |
chance/art/<id>.png — the id is the Chance card's number: 0–226 in the product build, plus 301–331 under developer mode | the artwork of Chance card #id | 80×80 |
slot/frame.png | the slot machine cabinet, drawn over the reels — keep the reel window (x 71–329, y 58–240) transparent | 400×372 |
slot/symbol/<n>.png — 1 slime, 2 stock, 3 warp, 4 wildcard, 8 seven | slot reel symbols | 48×48 |
square/event/<id>.png — id = the Chance card number an event square fires (1+), or an event id | The 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>.png | 64×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, seed | The 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 Colosseum | 64×64 |
casino/racer/bird.png, casino/racer/slime.png | The race characters (bird = Legacy Race, slime = Modern Race). Tinted with the seat colour, so pale art keeps all 8 players distinct | 64×64 |
casino/tarot/who/<0-4>.png, casino/tarot/what/<0-8>.png | The 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 cards | 64×96 |
money/cash.png | the coin beside every player's cash and in the payment burst | 32×32 |
money/stock.png | a 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 trophies | about 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" screen | about 32×32 |
sphere/no/<number>.png — number 1–128 | one picture per sphere; beats the colour picture | about 32×32 |
spheredie/face.png, spheredie/empty.png | the sphere die's face and the empty socket mark | up to 256×256 |
spheredie/<colour>.png, spheredie/no/<number>.png | the big sphere on the die (high resolution welcome, up to 1024×1024). Without it the sphere/ picture is scaled up, else the colour dot | about 256×256 |
dice/face.png | the upper-left die's ground (your turn, a watched player, a summon; both dice of a pair). Without it: the white face and its rim | 128×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 one | 128×128 (square) |
Notes:
- The two digit folders are separate textures (user ruling 2026-07-28): the game never uses
digits/board/glyphs outside squares, and never usesdigits/payment/glyphs on them. Ship one folder, the other, or both — each stands alone. Payment numbers always end in a G, so givedigits/payment/ag.pngor the payment screens will keep the regular font. - Digits are all-or-nothing per folder: if you provide
digits/board/, it must contain all of0–9(mixed-font numbers are unreadable, so the game refuses half sets).minus/gare optional. Digits are drawn monospaced (widest glyph sets the width) and bottom-aligned. - Square safe zones: the game draws information *on top of* your tile art — the owner colour band and rank at the top ≈ 12 px, prices and player dots at the bottom ≈ 14 px (of the 64 px design size). Keep those strips calm.
- One pack draws the whole die: of the packs with any
dice/picture, the top one draws the die. A face it lacks is *its* ground + the game's pips — never another pack's face. For a Mario Party–style number block, draw all of 0–12 (at least 0–10). The roll's motion stays the game's; only the pictures change. Your die is changed on your screen only — opponents do not see it. - Any subset is fine everywhere else — one card, three tiles, only digits: all valid.
- Future game features add new paths to this table; unknown paths in your pack only produce a warning, so packs stay compatible in both directions.
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.

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
- Import a pack you received — any of these does the same thing:
- drag the
.esskinonto the game window (main menu) - press L on the shop & building design screen (Settings → Display → Appearance → Shop & building designs)
- press L on the Art list
- Settings → Display → Appearance → Import a texture pack (this row and the pack-order screen need no mode either)
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.
- Upload / download in game: this works (2026-08-22).
- Upload: U on the pack-order screen. Your
.esskinpublishes as askinpack. - Download: Downloads & Account, listed as Texture pack. Installing one adds a row to the pack order.
- Handing the
.esskinover directly (Discord etc.) still works exactly as before. - There is only ONE format you author:
.esskin. The Texture pack listing also carries packs made in an older, download-only format (texturepack). To a player they are the same thing —install one and it joins the same pack-order list, with the same enable / reorder / Streamer-Mode decision (2026-08-24). The only difference is whether you can create it, and what this game writes is.esskin. To build your own, follow §2 or §3. - Content rules: only art you have the right to share; nothing offensive.
- Streaming: imported packs start as off stream. While Streamer Mode is ON a pack you have not allowed is not drawn (the built-in tiles are). Allow it with T on its row, or manage every imported asset at once in Settings → Display → Streamer-Mode assets.
7. Limits (checked on import/publish)
| Limit | Value |
|---|---|
| Pack file size | up to 8 MB |
| Single image | up to 1024×1024 px |
| Files per pack | up to 2000 |
| Format | PNG (with alpha) |
| Name | up 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:
- N on the pack's row — turns off that pack's names only. The art stays exactly as it is.
- N then Enter with nothing typed on a Shop designs row — that one slot goes back to the game's built-in name (Street Stall, Supermarket, Toll Booth…). Typing a name of your own of course outranks everything. Del takes the decision back and lets the pack name it again.
8. Tips
- Design at the nominal sizes first; test at real zoom levels with F5 before polishing.
- High-contrast, low-detail art reads best — tiles are small on screen.
- Test with all 8 player colours on the board: your tile art must not fight the owner bands and piece dots the game draws on top.
- Keep your dev folder under version control if the pack grows — a pack is just files.