Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
C1 - Text & Dialogue
Updated 2 weeks agoText & Dialogue
Text · for creators. The friendliest asset type to work with — no art tools, no audio editor. Find a line in the Dev Hub, retype it, done. A rewrite, a translation, a joke patch: all the same workflow.
You'll be able to: edit any dialogue, item name, or UI string through the Dev Hub editor; understand the YAML it writes; format dialogue with the game's tags; and ship a multi-language text pack.
Before you start: Module A. No image editor required — if you skipped the sprite modules because you don't draw, this is your entry point.
What you can replace
Anything the game looks up through its localization system:
- NPC and boss dialogue
- Item names and descriptions
- UI prompts, tooltips, menu strings
- Quest text
If it's words on screen, it's almost certainly reachable.
The easy path — let the editor write it
You can author the files by hand, but you rarely should. The Dev Hub's Text editor finds the string for you and writes the file:
- Dev Hub → Text. The left pane lists every
(sheet, key)the game has accessed this session — so trigger or approach the line you want, and it appears. - Click a key → it loads into the editor on the right.
- Edit the text.
- Save. Stitchwork writes the YAML to your root workspace at
Text/{Sheet}/{Lang}.yml.
That's the whole loop. The change shows the next time that line is triggered.
Editor edits always win. Text is the one asset type where your root workspace beats every pack (every other type is packs-over-root). It's deliberate: the editor saves to the root, and root-wins guarantees an in-editor change is never silently shadowed by an installed pack. So what you type is what you see — every time.
What it writes — the YAML
Under the hood it's a small, readable file. Knowing the shape helps when you hand-edit or review:
# Stitchwork text replacement
KEY_NAME: "Replacement text"
ANOTHER_KEY: "Supports \"escaped quotes\" if needed"
#starts a comment.- One
KEY: "value"per entry. Keys are case- and whitespace-sensitive — copy them from the Dev Hub list, never retype. - Values are quoted strings.
The path:
Text/{SheetName}/{LANG}.yml
SheetName is the localization sheet (Wanderers, Prompts, Quests, …); LANG is a language code (EN, ZH, FR, JA, …).
Formatting dialogue — the tags
In-game line breaks and page turns come from tags, not from how the text looks in the file:
<page>— page break, NPC speaker<hpage>— page break, Hornet speaker<br>— line break within one page<page=S>,<page=T>, … — variant page styles (under the editor's More if you need them)
Use the editor's tag buttons to insert these — they carry the spacing logic that makes the result sit right in-game.
Editor display ≠ saved file. The editor soft-wraps long lines at sentence boundaries so they're readable while you work — those wraps are editor-only and never reach the YAML. The in-game appearance is decided entirely by the tags. So don't fuss over how the paragraph looks in the box; place your <br>/<page> tags and trust those.
Escaping — the three rules
Inside a quoted value:
- A double quote →
\" - A backslash →
\\ - A newline → don't. Use
<br>. A real newline in the YAML breaks the entry, and the game reads only up to the break.
Worked example — rewrite one quest line
- Text tab → trigger or approach the quest so its keys appear.
- Click the key, e.g.
Wanderers.HUNTER_FAN_GREET. - Edit the value; insert tags from the buttons if it needs page breaks.
- Save. It applies on the next trigger — already on screen, you'll see it the next time the line shows.
Multiple languages
To translate or rewrite across languages, ship one YAML per language under each sheet:
Text/Wanderers/
EN.yml
ZH.yml
JA.yml
The game reads whichever matches its current language setting, so a player who switches language at runtime sees the right file's overrides. One caution: the editor auto-saves into the game's active language file — if you're authoring ZH but the game is set to English, you'll write EN.yml by mistake. Set the game language first (Settings → Language).
Testing a line that only plays once
A first-meeting greeting or a one-shot cutscene line is awkward to verify — you'd have to start a new save to hear it again. The practical fix is DebugMod's Save State: snapshot the moment before the conversation, edit your line, restore, and re-watch it in context as often as you like — it even covers dialogue the flag editor can't track. See Testing With Savestates.
You can now rewrite or translate any string through the editor, format it with tags, and ship it across languages. Next: Distributing Your Pack when it's ready to share — or Audio if your text pack wants a voice.
Pages
- A-0 Wikis
- A1 - Getting Started
- A2 - Installing Packs
- A3 - The Pack Manager
- A4 - How Stitchwork Works
- A5 - When Something Looks Wrong
- AEx1 - Conditional Activation
- B0 - Choosing a Workflow
- B1 - Starting a Skin Pack
- B2 - Finding Any Sprite
- B3 - Porting Prior Work — Spritesheets & CKC
- B4 - Texture2D (T2D) Sprites
- B5 - Bigger Art — Anchors
- B6 - Animation Canvas Workflow
- B7 - Sprite Paths Reference
- B8 - The Animation Controller
- BEx1 - Reused frames — one sprite, many animations
- BEx2 - Instance-specific paths — same name, different art
- BEx3 - Appliqué: Per-Clip Art
- C1 - Text & Dialogue
- D1 - Audio
- E1 - Video
- F1 - Priority & Conflicts
- F2 - Distributing Your Pack
- G1 - Dumping & Full Dump
- G2 - Companion Mods
- G3 - Hotkeys
- G4 - Pack Folder Structure
- G5 - Testing With Savestates (DebugMod)
- G6 - Troubleshooting