Epoch Street GuideBoardsNewsDev blog 日本語

← All guides

Custom Piece Creation & Import Guide (English)

Make your own game piece — a character, an animal, anything — and play as it instead of the built-in circle, triangle, square, diamond, or star. A piece can be animated, is saved as a single shareable file, and carries one colour that is yours.

Choosing a piece — your own pieces sit in this list too
Choosing a piece — your own pieces sit in this list too

*(日本語版はこちら → PIECE_GUIDE.ja.md)*

What works today vs. coming soon. You can now make a piece inside the game with the Piece / Texture Studio (§2b, added 2026-08-19) or in an external tool and import it (§2/§3). The online gallery upload/download is still on the way — where this guide says *(coming soon)*, that part isn't in the game yet.


1. Where pieces live, and the keys you'll use

All custom pieces are files in your pieces folder: user://pieces/ (on Windows this is %APPDATA%\EpochStreet\pieces\).

Player settings — pieces are imported and exported from here
Player settings — pieces are imported and exported from here

Everything is done from the Player Setup screen (Main menu → play locally → the seat list). With that screen open:

KeyDoes
IImport a piece — pick an .espiece file, or any image (see §2/§3)
EExport / reveal the selected seat's piece file, to share it
OOpen the pieces folder (drop files in here, then it rescans)
HHide custom art — show every custom piece as a plain shape instead
EnterOn a seat's piece field: open the piece list (name + description; on a CPU seat, AI characters are listed first). On the colour swatch: open the colour list

To use a piece: import it, then press Enter on a seat's piece field and pick it from the list. Your choice is remembered per seat. In ひとりであそぶ free play, an "opponents" screen after the map choice lets you pick each CPU's piece/AI character and its strength (つよさ 1–5) the same way.

2. The quickest piece: import any image

  1. Have any image ready — a PNG, JPG, WebP, or BMP (a character, a logo, a photo…).
  2. Player Setup → press I → choose the image.
  3. The game turns it into a piece automatically: it is scaled to a square frame, given a name (the filename) and an identity colour picked from the image's average colour.
  4. Press Enter on the seat's piece field and pick it from the list. Done — you're playing as your image.

This makes a still piece (one idle frame). For a piece that animates, use the Piece / Texture Studio (§2b) or author an .espiece yourself (§3).

2b. Make one inside the game — the Piece / Texture Studio (コマ/テクスチャ工房)

Since 2026-08-19 you can build a piece without any other software — no image editor, no text editor, no zip tool. Open the Studio from:

The Piece / Texture Studio
The Piece / Texture Studio

*(While the feature is being finished the Studio is shown with Test Mode on (Settings → Other → Test mode; it moved off Developer Mode on 2026-08-20). If you do not see it, keep using §2/§3 — nothing about the file format has changed.)*

Where do you start? The Studio opens on four doors, so you never face a blank page:

DoorWhat it does
Start from a shapeA circle / triangle / square / diamond / star silhouette in the colour you pick
Duplicate an existing pieceCopies any piece in your list into a new draft (the original is never changed)
From an image or sprite sheetReads your PNG: you declare the cell size, the game maps rows to states and finds the frames. It also offers to make a one-colour background transparent
Blank canvasExactly that

The four tabs

Drafts and finishing. Work in progress is saved as a plain folder under user://pieces/drafts/<name>/sheet.png + manifest.json you can open in any other tool (edit sheet.png outside and the Studio offers to reload it). Press 完成させる / Finalize and the game writes a real .espiece into your pieces folder. The 検証 strip in the header shows, all the time, whether the piece is within the §6 limits — finalize stays disabled until it is, and says which rule is in the way.

Finalizing always makes a new piece: the name and colour are part of a piece's identity (§4), so editing a finished piece starts a fresh draft rather than changing the original in place.

3. An animated piece: author an .espiece

An .espiece is just a ZIP file containing two things, renamed to end in .espiece:

manifest.json     ← text: the piece's settings
sheet.png         ← image: the animation frames

3a. Draw the sheet (sheet.png)

Use any pixel-art tool (Aseprite, Piskel, GIMP, Photoshop…). One PNG holds every frame:

Example: a 32 px piece with 4 idle frames and 6 walk frames → the PNG is 192 px wide (6 cells × 32) and 64 px tall (2 rows).

3b. Write the settings (manifest.json)

A plain-text file. Copy this template (there's a ready copy in docs/piece-template/):

{
  "format": 1,
  "name": "My Piece",
  "nameEn": "My Piece",
  "author": "you",
  "desc": "One line about this piece.",
  "descEn": "One line about this piece, in English.",
  "job": "hero",
  "color": "#ff8f1f",
  "cell": 32,
  "yOffset": 0,
  "states": {
    "idle": { "row": 0, "frames": 4, "fps": 6 },
    "walk": { "row": 1, "frames": 6, "fps": 10 }
  }
}

3c. Import it (since 2026-09-02 there are three ways)

The shortest is to import the folder as it is.

Whichever you use, if something is wrong the game names the rule that failed *and what to change*; fix it and import again.

Want a starting point? Press T on コマをえらぶ and the game writes a starter kit to user://pieces/_template/ — tracing underlays at all four cell sizes, blank sheets, a manifest.json, the AI variant, a quick reference and a copy of this guide — then opens the folder.

4. The name and the identity colour (important!)

The name. Every custom piece has its own name (name, ≤ 16 characters), shown in the piece lists. Two rules worth knowing:

The colour. Every custom piece has exactly one colour, fixed when the piece is made, that can never change. It is used everywhere the game shows "your colour": your side-panel card, minimap pin, stock-table column, and movement arrows.

5. Animation states

Only idle is required; every state you skip simply shows idle instead.

StatePlays when…Suggested frames
idlestanding on a square (and as every fallback) — required2–4
walkmoving between squares (auto-flipped left — draw facing right)4–6
hopthe little jump of each step2–3
joygood things: salary, big income, prizes. On the podium: 2nd place (and 3rd, in games of 5 or more)3–4
sadpaying a big toll, going bankrupt. On the podium: last place, and anyone who went bankrupt3–4
winyou won — the podium's 1st block4–6

The podium is where these get seen. When a match ends, every player strikes a pose on the results screen, decided by where they finished:

FinishedPose
1stwin
2ndjoy
3rd, in games of 5 players or morejoy
lastsad — in a 2-player game that is 2nd place
anyone who went bankrupt, wherever they placedsad
everyone elseidle

*(In play the game also uses idle and walk; hop is read from your file and will animate as that moment gets wired up. Skipping a state is always safe — it simply shows idle, which is the same pose the middle of the field gets on the podium anyway.)*

6. Limits (checked automatically on import)

LimitValue
File size1 MB per sheet (each alternate skin adds another 1 MB of budget — §6b)
Sheet sizeup to 1024 × 1024 px
Cell (frame) size16 / 24 / 32 / 48 / 64 / 96 / 128 px square
Frames per state1–8
Animation speed1–12 fps
Nameup to 16 characters
Colour#rrggbb, not near-black
desc (optional)up to 128 characters (descEn the same, budgeted separately) — shown under the name in piece lists
job (optional)one of warrior / merchant / mage / cleric / thief / dancer / hero / sage / freelancer
ai block (optional, §8)type required inside it (one of the 6 §8 types); tendency keys only from the §8 lists, values −2…+2; build ratios 0–8; intensity 1–5; minStock 0–999
skins (optional, §6b)up to 16. id is a-z 0-9 _ -, up to 16 chars, unique in the piece. Skin names up to 16 chars, unique. Colour #rrggbb, not near-black

If an import fails, the game lists exactly which rule was broken.

6b. Alternate skins — recolours and outfits in ONE piece

You can do this inside the game. The Piece/Texture Studio (§2b) has a Look row on its Draw tab: “+ Add” makes a new look seeded from the art you already have, and you paint over it. The name and “suggest a colour” live on the same row. What follows is how to do it with an outside tool.

Repaints of the same character can live in a single .espiece. Ten Toads do not need ten files — the piece list shows one entry, and players switch between the looks with ←→ on the 見た目 / Look row (under the portrait) in the piece picker.

Two steps:

  1. Add skins to manifest.json:
  "skins": [
    { "id": "green", "name": "みどり", "nameEn": "Green", "color": "#43a047" },
    { "id": "blue",  "name": "あお",   "nameEn": "Blue"  }
  ]
  1. Put that repaint's sheet in the zip as sheet.<id>.png (sheet.green.png and sheet.blue.png above). sheet.png is the BASE look and is never listed in skins.

Rules

7. Sharing

7b. Use a piece as a GUEST character (the Maharaja and friends)

The nine guest characters — the Maharaja, the Mark Angel and Holidaymon from chance cards, plus the six that sphere events summon — can wear your art and answer to a name you choose.

Open Settings → Display → Appearance → Guest characters. One row per guest:

KeyDoes
←→Step through the art: the built-in token, then your guest art, then your own pieces
IImport art for the focused guest — an .espiece or any image
NName the guest (up to 16 characters). Blank = the game's own name
OOpen the guest-art folder (user://guests/, on Windows %APPDATA%\EpochStreet\guests\)
KStep through the skins — only when the art has any (the §17 skins)
DelTake back one decision at a time: the name first, then the skin, then the art

The art is an .espiece, and only the idle row is needed. Everything in §3 applies —same cells, same limits, same validator — so a piece you already made works as a guest, and a guest sprite you author is a piece you could play as. Draw it facing right: a guest walking left is mirrored, exactly as a player's piece is. If you also drew walk, it is used while the guest moves; every state you leave out simply shows idle.

Guest art lives in its own folder, so it never appears in the piece picker and never has to be chosen for a seat. Dropping a plain image on the row (I) wraps it as a 1-frame piece for you, which is the shortest route to a still guest.

The name is one string in every language (it is what you typed, so it is not translated) and it reaches everything: the guest's turn plate, the shopping-fee payment, the chance card that summons it, the sphere that summons it, and its own 召喚中BGM row in the music settings. Three states, like a shop's name:

So assigning art that is called 「大魔導士マーリン」 also renames the guest to that, unless you asked for the built-in name back.

Streamer Mode treats guest art exactly like a piece: art you imported is hidden until you clear it in 配信で使う素材, and a hidden guest falls back to its built-in token — not to a plain shape. Nothing about the match changes either way, and in online play each player sees their own guest looks and names.

8. Give your piece a personality — optional AI

A piece can carry an AI personality: how a CPU player behaves when it uses your piece. A "Wizard" that pumps its own areas and plays the market, a saboteur that wrecks everyone's plans — you decide. A piece with an AI personality becomes a selectable AI opponent: it appears in the opponent picker, and the CPU plays under the piece's name. Add an optional ai block (and a desc line) to manifest.json:

"desc": "A grand mage who plays the market.",
"ai": {
  "type": "insider",
  "tendencies": { "stocks": 2, "caution": 1 },
  "build": { "priority": 1, "ratios": { "home": 4, "convini": 2 } },
  "intensity": 4,
  "minStock": 86
}
typeNamePlays like
balancedBalancedsolid, all-round play
insiderInsiderbuys stock in its own areas, then invests to drive the price up
coriderCo-riderrides others — buys stock in areas opponents are building up
defenseDefensiveprotects its own shops and funds
saboteurSaboteurdisruption: blocks your chance-card lines, breaks up monopolies, dumps stock to crash prices
aggressiveAggressivepushes its own shop fees up as fast as possible

Every type except the saboteur also plays the chance-card board to line its own cards up (across, down, diagonal). Once anyone — itself included — has started a line in some direction, it flips from its own cards along that same direction; while no direction is set yet it sticks to across or down. The saboteur does the opposite: it flips to stop the 4+-in-a-row bonus. Every type except defensive and saboteur will 5×-buy to break up an area monopoly (one player with 4+ shops).

KeyPushes toward (+)
shopsbuying and valuing property aggressively
invest増資: how many shares it wants in a district before it will invest there. 0 = its personality's own minimum (99 for most, 105 for the insider, 50 for the aggressive). +1/-1 move it by 20 shares (a 99 personality invests at 79 / 119). +2 takes it down to 50 — except for the aggressive, the one already-reckless personality, which goes to 20. -2 fixes it at 150 for everybody. A minus step also caps what it puts into ONE capital increase (-1 = 500G, -2 = 250G; 999G is the game's own ceiling, so a plus step cannot raise it). It makes its own shops slightly more worth landing on too — that part scales with the shares it holds. Want the share bar and the money to move independently? Write ai.minStock (below) — then this row moves only the money.
stocksbuying and holding stock
buyoutgoing for 5× buyouts. For the saboteur it means one more thing: at 2 or more (the saboteur's own default is 2) and つよさ 3+, it will also buy a shop out purely to knock a rival's 3-shop district down to two — never above 10 % of the goal. Set it to -1 or lower and that stops
cautiondefensive play, keeping reserves
dealsopening negotiations of its own more often, and bargaining harder in them
auctionbidding further over the odds at auction
dump(saboteur) how far it crashes a stock before stopping — each step ±10 %
routeshow far it steers clear of roads with expensive shops ahead. A separate dial from caution (which is about money and property), so 「reckless with paths but careful with investment」 — and the reverse — can both be written. At 2 or more (the defensive archetype's default is 2), a seat holding a district with 1,000G+ left to invest, 3+ of its own shops and its minimum shares +20 enters defensive mode: it stops chasing suits for the salary and takes the cheapest road instead (it does not ignore the suits entirely). 「Expensive」 means a fee of two salaries or more. Reaching the target leaves the mode and heads straight for the bank. -1 or lower never enters it

Three things to know about ratios:

Strength is separate from personality. The AI's つよさ (strength, 1–5) is chosen in the game when you pick opponents, not in the piece file (intensity merely proposes the initial value) — at low strength the personality barely shows; at 5 the AI reads the board and acts by situation. Also, a CPU at strength 3 or higher holding 150+ shares of an area containing one of its own vacant lots may rebuild that lot into a shop.

When it applies — and when it never does:

9. Troubleshooting

Have fun — and remember: at board size, silhouette beats detail every time.