The in-career Settings app is a deliberately small screen: three sections — Language, Units, UI Scale — that you can reach without leaving a save. It exists so you can fix the two things most likely to bite mid-career (text too small at high resolution, wrong speed unit) without a trip back to the main menu. Every control writes to the same config.db keys the main-menu Settings uses, so the two screens are always in agreement.
How to open it
- Sidebar → Settings (icon 19, directly above Log Out). Available in every phase and in season.
- Escape, B, or the header’s Back button closes it.
There is no Save button and no Apply button. Every click writes to disk and takes effect immediately.
Language
A row of flag buttons, one per available language. The active one is filled charcoal with an amber border; hovering any of them shows the language’s own name in a hover-help bubble. A language whose flag image is missing falls back to its uppercase code.
Six built-in languages ship with the game:
| Code | Name | Flag |
|---|---|---|
en | English | gb |
fr | Français | fr |
es | Español | es |
it | Italiano | it |
de | Deutsch | de |
pt-BR | Português (BR) | br |
On top of those, the list is scanned from mods/lang/*.txt at the moment the screen opens: any community language pack found there is offered too, using the #name: and #flag: header lines inside the file for its label and flag. A pack cannot shadow a built-in — a mods/lang/fr.txt is ignored in favour of the shipped French. In the Steam Next Fest demo build, mod support is compile-time disabled and only the six built-ins are listed.
Switching is a hot switch — no restart, no reload of the save:
- The dictionary for the new code is loaded.
- A global translation epoch counter is bumped, which invalidates every cached parsed template across the game (template caches mix the epoch into their variable hash).
ui/languageis written toconfig.db.- This screen drops its own cached template so it re-renders in the new language on the same frame.
Selecting an unknown code silently falls back to en.
One deliberate exception: the tutorial voice-over is keyed by step id, so the spoken guidance stays English in every language even when the on-screen text translates.
Appearance
One button, Theme: Light / Theme: Dark. It flips the whole interface between the light beige palette and the dark, low-glare one — every career screen, dialog and hover bubble at once (the race view is unchanged). The choice is written straight away and is the same setting as Dark Mode in the main-menu Settings → Display tab.
Automation
One row per department — Infrastructure, Marketing, Scouting, Academy, Car & R&D, Finance, Weekend loadout, Race weekends — each reading AI or Manual, plus All departments to flip them together. The same switches sit as an AI pill in the header of every department app. What each one does is on the Automation page. The choice is saved with the career.
Units
Two toggle buttons.
| Button | Values | Applies to |
|---|---|---|
| Speed | km/h ⟷ mph | ”Speed unit used across the game (HUD, car data, profiles).” |
| Temperature | °C ⟷ °F | ”Temperature unit for tires, engine and weather readouts.” |
Each click flips the value, pushes it into the shared Win95 formatting helpers (set_speed_unit_kmh / set_temp_unit_c) so every screen redraws in the new unit, and writes the key straight away. These are display conversions only — nothing in the simulation changes.
UI Scale
Three presets for the Win95 career interface zoom: 100 %, 125 %, 150 %. The active one is bracketed ([125%]). Hover text: “Zoom of the whole career interface. Applies immediately.”
Clicking a preset calls markup::set_ui_scale, writes the key, and drops the cached template — because the layout changes size, the parsed template has to be rebuilt.
This is the fix for small text on a high-DPI screen, and it is also the setting most likely to make a list overflow its window. That is handled: every sidebar screen except the Desktop opts into the generic page scroll, whose range is measured from the real laid-out content height. If something still looks cut off at 150 %, the [app-scroll] line written to debug.log on each app open carries ui_scale, viewport_h, content_h, overflow and max_scroll — that line is what a bug report needs. See Career Desktop & Sidebar.
What this app does not cover
The career Settings app is a subset. In particular, Race HUD Scale is not here — it lives in the main-menu Settings → Display, labelled “Race HUD Scale” with the same 100 / 125 / 150 presets, and writes hud.race_hud_scale. Because the race HUD only exists during a live session, the practical route is the in-race pause menu: Escape → Settings during a session opens the full Settings screen as an overlay, and the race re-reads the HUD scale when the overlay closes.
Everything else also stays in the full Settings screen: Display (vsync, fps cap, fullscreen, resolution, replay recording), Audio (engine / radio / driver / music volumes), Simulation sliders, Career sliders (prize pools, AI financial intelligence, balance multipliers), Keybindings, Events (per-event auto-actions in live sessions), and the --dev-only Dev tab.
The keys it writes
| Control | Scope | Key | Value written |
|---|---|---|---|
| Language | ui | language | the language code, e.g. fr, pt-BR |
| Speed unit | hud | speed_unit_kmh | 1 = km/h, 0 = mph |
| Temperature unit | hud | temp_unit_c | 1 = °C, 0 = °F |
| UI scale | hud | ui_scale | 1.00 / 1.25 / 1.50 |
| (main-menu Settings only) | hud | race_hud_scale | 1.00 / 1.25 / 1.50 |
config.db is a SQLite file with a single config(scope, key, value) table, primary-keyed on (scope, key). Reads that find nothing fall back to a default: ui_scale → 1.0, both unit flags → true (km/h and °C).
Advanced
-
Since 0.5.1 the runtime
config.dblives in your user data directory, not the game folder. Settings are player data, and a Steam depot update used to overwrite your tuned values on every patch.Platform Location Linux $XDG_DATA_HOME/TheUndercut/else~/.local/share/TheUndercut/Windows %APPDATA%\TheUndercut\macOS ~/Library/Application Support/TheUndercut/A
UNDERCUT_DATA_DIRenvironment variable overrides it, and a portable-marker file next to the executable forces the game folder. Theconfig.dbshipped in the install directory is only the seed: editing it withsqlite3does not change what a running game reads. -
The career app writes on click; the main-menu Settings writes on Save. Both apply their changes live, but the full Settings screen only persists when you confirm. If you set units from the main menu and quit without saving, they revert. The career app has no such trap.
-
Settings saves merge, they do not overwrite. Keys you (or a mod) added by hand are preserved.
-
config.dbwrites usesynchronous=NORMALunder WAL. That is safe against corruption, and it means a settings change does not fsync per key. The career save path deliberately keepssynchronous=FULL— these are only preferences. -
Forced migrations can overwrite a key you tuned.
CONFIG_MIGRATIONSrows run exactly once perconfig.db, keyed on a migration id, and exist so a balance fix reaches every existing player. If a value you set reverts after an update, that is why; a[config_db] migration <id> applied: …line indebug.lognames it. -
On Steam, a depot update overwrites the shipped
config.dbseed, not your user copy.display_config.txtis deliberately excluded from packing for the same reason — overwriting a player’s vsync/fps cap on every update is rude. -
Language packs are content, not saved data. They stay in the game folder’s
mods/lang/, so they are not cloud-synced and do not fight Workshop. -
The whole UI is written in English as the translation key. Any string added to the game ships with its
lang/fr.txtpair, andfr.txtis the reference file the other five are propagated from. A shipping build is expected to report 0 MISSING on every built-in language.
Common mistakes
- Editing the
config.dbin the install folder. Since 0.5.1 that is only the seed. Change settings in-game, or edit the copy in your user data directory. - Looking here for the race HUD scale. It is Settings → Display in the main menu, or the in-race Escape → Settings overlay.
- Looking here for volumes, prize pools or AI sliders. They are in the full Settings screen’s Audio / Career tabs.
- Setting units from the main menu and quitting without saving. The main-menu screen persists on Save; the career app persists on click.
- Expecting 150 % UI scale to break lists. It does not — the page scroll measures real content. If something is cut off, grab the
[app-scroll]line fromdebug.logfor the report. - Installing a language pack named after a built-in.
mods/lang/de.txtwill simply be ignored; use an unused code. - Expecting the tutorial voice-over to translate. It is keyed by step id and stays English by design.
See also
- Career Desktop & Sidebar — how UI scale interacts with the page scroll
- Career Hub — the screen most affected by a scale change
- Settings → Display — vsync, fps cap, replay recording, Race HUD Scale
- Settings → Audio — the volume faders
- Settings → Career — prize pools, AI financial intelligence, balance sliders
- Settings → Simulation — the physics and AI sliders
- Telemetry — where the unit settings show up in the data views
- Glossary