The in-game Settings menu. One full-screen panel with a section rail on the left and options on the right (mobile: sections collapse into an accordion). Every option persists locally and syncs with cloud save. Defaults are chosen for a first-time mobile player.
Layout
- Opened from the gear icon on the main HUD. Full-screen overlay, dark parchment-and-iron chrome consistent with the codex aesthetic.
- Section rail (left, Cinzel labels): Audio · Display · Battle & Autoplay · Controls · Tutorials · Notices · Notifications · Account & Data · Language & Accessibility · Legal & Support.
- Control types: slider (0–100), toggle, segmented (2–4 exclusive choices), dropdown, action button (opens dialog/page).
- Footer bar: Restore Defaults (per open section, with confirm) and game version/build string.
- Changes apply instantly — no Save button. Destructive actions always confirm.
Audio
| Option | Control | Values | Default |
| Master Volume | Slider | 0–100 | 80 |
| Music | Slider | 0–100 | 60 |
| Sound Effects | Slider | 0–100 | 90 |
| UI Sounds | Slider | 0–100 | 60 |
| Mute All Sound | Toggle | on/off (master bus to zero; sliders remembered) | Off |
| Mute in Background | Toggle | on/off | On |
Display
| Option | Control | Values | Default |
| Frame Rate | Segmented | 30 / 60 / Max — caps the animation loop; Max follows the display (a stored 120 reads as Max) | 60 |
| Battery Saver | Toggle | caps 30 fps, reduces VFX | Off |
| Screen Shake | Toggle | on/off | On |
| VFX Intensity | Segmented | Low / Standard | Standard |
| Keep Screen Awake | Toggle | stops the screen sleeping while the game is open; shown only where the browser has the Wake Lock API; never runs in the background | Off |
Battle & Autoplay
| Option | Control | Values | Default |
| Auto-Advance Floors | Toggle | advance when portal opens | On |
| Stop Advancing After a Loss | Toggle | a lost battle switches Auto-Advance Floors off | Off |
| On Death | Segmented | Stay / Go Down | Go Down |
| Autochallenge Boss — Out of Keys | Segmented | Stay / Go Up / Go Down | Go Down |
| Targeting | Segmented | Lowest Health / Highest Health / Random | Lowest Health |
| Optimize For | Segmented | Overall Power / ATK / DEF / HP | Overall Power |
| Ultimate | Segmented | Turn 1 / Turn 2 / Turn 3 / Never Use | Turn 1 |
| Prioritize Buffs | Toggle | use a ready buff/support move before damage | Off |
| Prioritize Debuffs | Toggle | use a ready debuff move before damage | Off |
| Streak Counter | Toggle | show/hide post-battle counter | On |
| Confirm Premium Spend | Static | Coming — one confirm before every Wraithgold spend is not built yet | — |
Autoplay never auto-enters boss rooms — fixed rule, not a setting. See Win Streak & Floors. What On Death, Out of Keys, Targeting, Optimize For, Ultimate and the Prioritize rows do is on Autoplay.
Controls
Status: LIVE on release since 2026-09-02 (0.67). Keyboard only — a touch device has no keys to bind, and the section changes nothing there.
| Option | Control | Values | Default |
| Toggle Autoplay | Key | any single character | A |
| Open / Close Equipment | Key | any single character | E |
| Open / Close Inventory | Key | any single character | I |
| Lock / Unlock Hovered | Key | any single character | L |
Click a row to arm it, then press the key. Clicking the armed row again, or Escape, cancels; Backspace or Delete unbinds (the row prints an em dash and matches no key). Space never binds. Closing Settings drops an armed row without binding anything. One key belongs to one action: binding a key another row already uses takes it from that row.
The rule. A bound key calls the same thing the on-screen button calls, so the keyboard can never reach a state a click cannot. A key is ignored while a text field has focus, while Ctrl / Cmd / Alt is held (browser shortcuts win), on auto-repeat, and at character creation. Inventory opens the item bag; with the soul bag already open it switches to the item bag rather than closing.
Lock / Unlock Hovered (SHIPPED IN 0.87, 2026-09-28): with the pointer over a creature or item tile in either bag, the key toggles that record’s lock — the same LOCK the detail panel and creature sheet toggle, ignored by every dismantle. It does nothing when the pointer is off the tiles, while a panel covers the bag, or in dismantle-select mode.
NEW badge (SHIPPED IN 0.87, 2026-09-28; a bag display rule stored here): a creature or item that arrives in a bag — a hatch, a drop, a craft — wears a red dot and NEW at the bottom left of its tile until the pointer passes over it (a tap on touch). Records moving between the bag, the equipment slots and the pens are not arrivals, and what a load brings is the baseline, never an arrival. The unseen set is a list of uids in this per-realm settings store (bag.fresh), pruned when a uid leaves; Restore Defaults does not touch it.
Tutorials
| Option | Control | Values | Default |
| Tutorial Arrows | Toggle | On / Off — shows the unlock arrow on each newly opened system until its control is clicked once (tutorials.arrows) | On |
| Reset: <system> | Action | One row per system the account's best floor has opened (none for a locked one); its line says Clicked once or Arrow pending. RESET clears ftue[<system>] so that arrow comes back. | — |
An arrow points at each system the floor you reach opens, until you click it once. It never blocks play. The ladder and the arrows: index > System unlocks.
Notices
| Option | Control | Values | Default |
| The Letter | Action | Once the floor-101 letter has been shown (ftue.letter101): opens it again | — |
| <system> | Static | One row per system whose unlock arrow has been clicked (ftue[<system>]): “<system> opened at floor N.”, the floor from unlocks.csv | Floor N |
| Download My History | Action | Saves the server’s record of this account as a JSON file: the ledger totals, every currency earned and spent (one row per credited battle that paid Ichor), item grants, battle drops (kept 30 days) and Shadow Trader trades. Read from GET /api/me/history, own account only | — |
| Download My History (CSV) | Action | The same record as one CSV: src, when, what, amount, detail | — |
Replaced the Adventure Log section 2026-10-22 (D, T31-2: the player-side log is retired; the action log is kept server side only). Derived from the tutorial flags, never stored: no save key, and a cleared arrow (Tutorials > RESET) takes its row with it until it is clicked again. With none yet the section reads No notices yet.
Notifications
| Option | Control | Values | Default |
| Breeding Complete | Toggle | the in-game banner when a pen lays an egg | On |
| PvP Defense Results | Toggle | the in-game note of how the defense did while away | On |
| Season Ending Soon | Static | Coming — needs push notifications | — |
| Daily Reset | Static | Coming — needs push notifications | — |
Account & Data
| Option | Control | Values | Default |
| Sign Out | Action | saves the climb, ends the session, returns to sign-in | — |
| Player Name | Static | set at character creation; no rename in game (D ruling 2026-08-17) — an admin renames via /api/admin/rename | — |
| Link Account | Segmented | one segment per configured provider (Steam · Discord · Google · Apple when keyed); gold = linked to this climb; the list is /api/auth/providers (Accounts & Sign-in) | — |
| Cloud Save | Static (live) | the time of the last save the server acknowledged; cannot be switched off — the server owns the save | — |
| Restore Purchases | Static | Coming — with the app-store builds | — |
| Export My Data | Action | downloads this save as a JSON file, built in the client (no server read) | — |
| Reset Progress (New Game) | Action (danger) | resets everything on the account — save, badges, boards, ratings, bought slots, boons, trades — back to Floor 1, Lv 1 (T61); the login and paid Wraithgold stay (Accounts) | — |
| Delete Account | Action (danger) | Two steps: what goes, then type DELETE. Schedules deletion 7 days out and signs out every device; signing in before then offers CANCEL DELETION / CONTINUE. Web link: delete-account.html | — |
Language & Accessibility
| Option | Control | Values | Default |
| Language | Segmented | Auto (device) · English · each codex/locales.csv language (today Português (Brasil), fully translated since 2026-11-02) | Auto |
| Text Size | — | Removed (T57) — the whole stage scales with the window; there is no separate text scale | — |
| Colorblind Mode | Static | Coming — needs a second palette | — |
| Reduce Motion | Toggle | disables shake, parallax, heavy transitions | Off |
| Reduce Flashing | Toggle | dampens hit-flash and strobe VFX | Off |
Legal & Support
| Option | Control | Values | Default |
| Help & FAQ | Action | opens help.html on this site in a new tab | — |
| Contact Support | Action | closes Settings and opens the in-game report form | — |
| Analytics | Toggle | records the opt-out in the save; no usage analytics are collected today, and any that ever are must honour it | On (opt-out) |
| Privacy Policy | Action | opens privacy.html on this site in a new tab | — |
| Terms of Service | Action | opens terms.html on this site in a new tab | — |
| Credits | Action | opens credits.html on this site in a new tab | — |
| Version | Static | the running build from version.json (the same string as the footer) | — |
Changelog
- 2026-11-03 — the Account rows match the live game (D 2026-11-03 codex review; dfmc-client lane codexreview-b). WIKI ONLY. Link Account is a live segmented row fed by
/api/auth/providers (lane googlebtn), not Coming; Reset Progress has the T61 full scope; Text Size is removed (T57), not coming. Help & FAQ and the new Accounts & Sign-in page are the player-facing text.
- 2026-11-02 — Português (Brasil) is translated (rulings card T63 item 5; dfmc-client lane ptbr). Codex data only, no client change. Every Settings section name, row label, description and note has its pt-BR text (
codex/strings_pt-BR.csv, 381/381 keys), so a device set to Portuguese, or the Idioma row set to Português (Brasil), reads this window in Portuguese. The terms, the register and the gate counts: system-client-shell.html, “Language & the string table”.
- 2026-10-23 — Language is a real control (C22, D T47-5; dfmc-client lane c22-l10n). On dev. The static “More languages are coming” row is a picker: Auto (device) follows the device’s language, or pick English / any language in
codex/locales.csv; stored as the prefs key lang.language. Every Settings label and description now reads through the string table (codex/strings_en.csv, keys set_<section>_<row>_label / _desc), so a translation covers this window. The table, its gate and what it covers: system-client-shell.html, “Language & the string table”.
- 2026-10-23 — Download My History (A19, BACKLOG § 3, D 2026-10-22; T39 “keep the account history forever on the server”; dfmc-client lane a19-a10). On dev. Two action rows at the foot of Notices save the server’s own record of the account (JSON, or CSV): ledger totals, every currency grant and spend, item grants, battle drops, trades. The door is
GET /api/me/history — session-bound, paged, read-only; another account’s history is refused. The ops-only account log and the battle telemetry are not in it.
- 2026-10-22 — Notices replaces the Adventure Log section (ADVLOG-OUT, client half (D, Tower rulings form card T31-2; dfmc-client lane advlog-client). LIVE on release since 2026-10-23 (0.89).) The Battle Detail Storage row left with the log. NOTICES lists what players used to re-read from it: The Letter (re-opens the floor-101 letter) and one row per opened system. The section rail now also names Tutorials, which it had missed.
- 2026-10-22 — Tutorials (T6 part 3, D, Tower rulings form card T6: "Tutorials can be turned off at the settings menu, and specific tutorials can be re-engaged from the settings menu"). LIVE on release since 2026-10-23 (0.89). A new section between Controls and Adventure Log: Tutorial Arrows (toggle, default on) hides every unlock arrow; one Reset: <system> action row per system already open clears that system's
ftue flag so its arrow returns. The rows ride SETTINGS_SCHEMA like every other row (the section's options are built from the unlock ladder at read time). Gate: tools/probe_t6c_ftue.py 33/33.
- 2026-10-01 — Delete Account deletes the account (D, Rulings board card settings; lane DELETE). LIVE on release since 2026-10-23 (0.89). The row was a static Coming with no server door. It is a danger action now: the first dialog lists what goes, the second takes the typed word DELETE, and
POST /api/account/delete schedules the deletion 7 days out and signs out every device. A sign-in inside the 7 days boots to Deletion scheduled on <date> with CANCEL DELETION (restores everything untouched) and CONTINUE (signs out; the deletion stands); until one is chosen every other server door answers 423. After the window the daily sweep purges the account: see Privacy Policy §6 for what goes and what is kept. A web link for players outside the game is delete-account.html. Gate tools/probe_delete.py 23/23.
- 2026-10-01 — Legal & Support: the four document rows have pages to open (D, Rulings board card settings; lane LEGAL). WIKI ONLY. Help & FAQ, Privacy Policy, Terms of Service and Credits opened help.html, privacy.html, terms.html and credits.html on this site, and all four were 404. They exist now. The privacy policy describes what the server actually stores, checked against
src/worker.js; the privacy and terms pages carry bracketed placeholders for company details that do not exist yet, and a counsel review of both is on the backlog. Still not built, and required before the store releases: the in-game Delete Account door (Apple 5.1.1(v), Google Play account-deletion policy), an age screen, and odds shown before any paid random draw.
- 2026-10-01 — every row does what it says, or says it is coming (D, Rulings board card settings; client, lane SETTINGS). LIVE on release since 2026-10-23 (0.89). 17 controls had no reader and 8 action rows answered “(Mock — not wired)”. Wired: Frame Rate (30 / 60 / Max, a cap on the animation loop) and Battery Saver’s 30 fps cap; Cloud Save prints the last acknowledged save; Export My Data downloads the save as JSON; Help, Privacy, Terms and Credits open their pages on this site (written by the docs lane); Contact Support opens the report form. Removed as not fitting the game: Graphics Quality, Damage Numbers, Confirm Advancements, Clear Wild Battle Detail Now, Egg Ready to Hatch, Quiet Hours, Server / Region, Haptics. Shown as Coming: Link Account, Restore Purchases, Delete Account, Season Ending Soon, Daily Reset, Text Size, Colorblind Mode, Confirm Premium Spend; Language reads English. Gate
tools/probe_settings.py.
- 2026-09-30 — review fixes F304, F311, F312 (client, lane P). On dev. Legal & Support › Version printed a hardcoded v0.5; it prints the running build, as the footer does. Restore Defaults on the Display section now lets go of (or takes) the screen wake lock at once — a held lock used to survive the reset until the page was hidden. The Autochallenge Boss — Out of Keys description lost a half-deleted sentence from a removed mode that contradicted the Go Down default. Gate
tools/probe_review_lanep.mjs.
- 2026-09-30 — review drift fixes: F297, F315, F316, F317. WIKI ONLY. The tables now match
SETTINGS_SCHEMA: Audio defaults Music 60 / Sound Effects 90 plus Mute All Sound (the 09-24 change had reached only this changelog); On Death defaults to Go Down; Battle & Autoplay gains Stop Advancing After a Loss, Out of Keys, Targeting, Optimize For, Ultimate and both Prioritize rows; Display gains Keep Screen Awake; Account & Data gains Sign Out and Reset Progress, and Player Name is a static row (renaming is admin-only, D 2026-08-17), not a rename dialog. The Pending Approval banner is replaced: the menu has been live since 0.67. DESCRIPTIVE ONLY.
- 2026-09-30 — Audio: Mute All Sound off brings the zone music back, and a bed that fails to load does not silence the zone (client review F346 / F347). ON DEV. Muting tears the zone bed down; unmuting only restored the mix, so the music stayed off until the next zone change. Unmuting now starts the zone bed again. A bed whose file failed to load (a network blip) was kept as the playing bed, so nothing tried again; the failed load is now dropped, so the next time the bed is asked for (unmute, returning to the tab, re-entering the zone) it loads again.
- 2026-09-28 — Controls: a lock key for the hovered bag tile, and a NEW badge on bag arrivals (player asks relayed by D). SHIPPED IN 0.87. Two asks: “hover over a monster in the soul bag and press L to lock/unlock it”, and a player could not tell which creatures had just arrived after opening eggs. Lock: a fourth Controls row, Lock / Unlock Hovered, default
L, rebindable like the rest; it calls the same lock the LOCK button calls. NEW: no marker existed for items or creatures. A red dot + NEW now sits bottom left of any tile whose record arrived since the player last looked, and hovering the tile clears it. It persists across a reload as the unseen uid set, not a seen set — a seen set would hold every uid in both bags (~760 × 36 B, doubling a small save); the unseen set is usually a handful, capped at 400. It rides the per-realm settings store, so no save shape changed and no server field was added. Gate dfmc-client/tools/probe_baglock_new.py 3/13 before, 13/13 after; tools/probe_hotkeys.py re-aimed from three rows to four (13/15 on the old tree, 15/15).
- 2026-09-25 — Audio: the sliders read as loudness, the master is a bounded trim, and every clip shares one ceiling (#995, #993, D). SHIPPED IN 0.87. #995: “60% is loud and 30% is impossible to hear, seems muted. Go research how other games implement these sliders.” Measured (
dfmc-client/tools/afx_measure.py, through the client’s own decoder) the clips behind the Sound Effects slider spanned 31 LU at the same slider position — an impact at −8 LUFS was “60% is loud”, a creature clip at −35 LUFS under a g0.4 was “30% is muted” — so the slider was reporting the clips, not a law. The clips are trimmed to one ceiling now (−18 LUFS, never above −1 dBFS; Audio Review and codex/AFX_SPEC.md rule 3 own it). The law itself, researched: Music and Sound Effects keep (pct/100)^1.6, which is Stevens’ power law — the slider is percent of full loudness: 50% is half as loud (−9.6 dB), 30% is −16.7 dB, 10% is −32 dB, 0 is silence — the curve that the square, cube and dB-linear sliders of other titles approximate, and the one that keeps 30% clearly audible. Master Volume leaves that curve: two loudness faders in series compounded (master 10 × effects 30 was −48.7 dB, silence), and the OS volume is the real master, so this one is a trim — 0 = mute, then dB-linear from −24 dB to 0 dB with a linear roll-off to silence under 10% (dr-lex, Programming Volume Controls). Master at 10 / 30 / 60 / 80 / 100 is now −21.6 / −16.8 / −9.6 / −4.8 / 0 dB (was −32 / −16.7 / −7.1 / −3.1 / 0); Sound Effects at 30 under any master of 10 or more never lands below −38.3 dB. UI Sounds is unchanged. No row, default or save shape changed. Gate tools/probe_00995.py 14/14, red 4/14.
- 2026-09-24 — the cogwheels open this window on Battle & Autoplay; Confirm Release / Sacrifice is gone (#981, #982, D). ON DEV (0.87). Two player reports. #981: the cogwheel beside the AUTOPLAY pill in a fight, and the one in the Auto PVP hub, opened a separate AUTOPLAY OPTIONS popup that carried a hand-picked six of this section’s rows and drifted every time the section gained one — Stop Advancing After a Loss, Autochallenge Boss and the Ultimate timing never reached it. D: “it should take the player to the regular settings section for autoplay … remove that one.” Both cogwheels now open GAME SETTINGS on Battle & Autoplay, and the popup is removed outright — its markup, its state and its menu key — so there is one place the autoplay settings live. #982: “remove Confirm Release/Sacrifice from the autoplay menu. Makes no sense.” The row was a locked toggle that no code path ever read — no release or sacrifice dialog consulted it — so it is deleted rather than moved to another section; the table above no longer lists it. Gate
tools/probe_autoset.py 7/7, red 1/7.
- 2026-09-24 — Audio: the five sliders do something. LIVE ON DEV since 2026-09-24 (0.85). The Audio section has been documented above since the settings spec and not one of its rows had ever been read — there was no audio engine in the client. Master, Music and Sound Effects are real buses now (master feeding music and sfx), tapered rather than linear so a slider does not spend half its travel above comfortable, and they take a new value while the finger is still on them. UI Sounds stays a multiplier on the interface cues specifically, on top of the effects bus, because it is a category of sound and not a bus of its own. The defaults move with the engine that gives them meaning: Master 80, Music 60, Sound Effects 90. One new row, Mute All Sound, cuts the master to zero and remembers where every slider was, so unmuting restores the mix instead of a default. The bindings ride the same per-realm settings store as every other option, so they follow cloud save and Restore Defaults like the rest; no save shape changed and no server call was added. Mute in Background is still documented and still does nothing — it needs a page-visibility hook and is not in this batch.
- 2026-09-02 — Controls: hotkeys for autoplay, equipment and inventory, bound from Settings. LIVE on release since 2026-09-02 (0.67). A player ask (backlog 9.7). A new Controls section with three rebindable rows, defaults
A / E / I, documented above. The bindings live in the same per-realm settings store as every other option, so they ride cloud save and Restore Defaults like the rest; no save shape changed and no server call was added. Gate tools/probe_hotkeys.py 6/15 before, 15/15 after; same-day review gate tools/probe_hotkeys_dom.py (what the player sees and clicks) 6/9 before, 9/9 after — it caught an armed row surviving a closed Settings window and eating the next letter typed anywhere.
All values persist to local settings storage immediately and ride along with cloud save. Per-section "Restore Defaults" resets only the visible section. Nothing in Settings can grant gameplay advantage; PvP pacing is server-controlled.