HomeGamesUpdatesMethodology
Steam News9 June 202615d ago

Patch notes 0.2.71- Localization and bug fixes

Release notes for 0.2.71 Until this release, large stretches of in-game text still surfaced in English even with a language selected: the entire dynamically-assembled epilogue, colonist/ship status panels, the faction r

Full notes

Full Dead Reckoning: The Long Drift update

Read the full published notes in a cleaner layout. The original post stays linked below.

What changed

1 fix5 additions8 changes0 removals
  • UI and audio
  • Gameplay
  • Workshop
  • Performance
  • Fixes
changedFull-game localization (phased rollout)Phase 1 : wrapped ~75 hardcoded UI strings in _t/TextDB.ui
changedFull-game localization (phased rollout)Final sweep: remaining UI display strings localized via TextDB.label(); ~480 swept strings hand-translated across all four languages (now 1,061 label keys per language)
fixedTranslation groundwork (June 6)Semantic review of existing UI translations, fixed prior mistranslations
addedTranslation groundwork (June 6)EpilogueGenerator localization infrastructure stood up (new TextDB.label() gettext-style system underpinning all of the above)
added🐛 Bugs fixed: QA-surfaced runtime issuesbug-952 : crew ages were wrong (player report: ship-born "coming out the womb already 12," appearing to age twice a year). Two age-storage conventions collided: founders store age at launch, ship-born store current age (recomputed yearly by design). The cryo-bay readout added the mission year to both, double-counting ship-born years. Fix: add state.year only for non-ship-born colonists; tools/repro_aging.gd proved the fix (5,936 mismatches → 0). Surfaced as the dual-age feature above.
changed🐛 Bugs fixed: QA-surfaced runtime issuesbug-955 : out-of-bounds crash on German ocean-world endings. (50-run build QA: a flood of "Index 9/10 out of bounds (length()=9)") The i18n auto-wrapper had localized a hash-seed input: the loop ran over "Ocean World".length() (EN = 11) but the body indexed the translated label "Ozeanwelt" (DE = 9 chars). Fix: reverted the seed to the raw English literal so the loop bound and the indexed string match.

Release notes for 0.2.71

Until this release, large stretches of in-game text still surfaced in English even with a language selected: the entire dynamically-assembled epilogue, colonist/ship status panels, the faction report, planet survey readouts, and the arrival/ending screens. This release closes that gap.

Epilogue prose, hand-translated in stages, 0 → 566/566 paragraphs (×4 languages)

  • Landing beats + failure-cause paragraphs (first pass)

  • Transit / sleeper / lost / failed-landing endings → 206/566

  • Cargo-cult / fork / AI-vessel / theocratic endings → 236/566

  • Oligarchic / tribal / theocratic endings → 266/566

  • Digital-colony / structures / resource / pivotal paragraphs → 296/566

  • Planet-naming + surface/arrival descriptions → 326/566

  • feature_narrative paragraphs → 386/566

  • feature_narrative + decision_consequence → 416/566

  • decision_consequence → 446/566

  • decision_consequence + landing_beat → 476/566

  • landing_beat + tier_coda + watch_roster → 506/566

  • research_coda + abandoned_lifeboat + years_ahead + deck_uprising → 536/566

  • Final batch → 566/566 complete, plus repair of 3 DeepL spec-character drops

Full-game localization (phased rollout)

  • Phase 1: wrapped ~75 hardcoded UI strings in _t/TextDB.ui

  • Phase 2: localized roles / posts / milestones / classifier labels

  • Phase 3: localized all 256 PlanetData type / feature / POI / danger names + descriptions

  • Phase 4: localized 15 DriftSystem threshold events + PROBE log lines

  • Phase 4b: wrapped and translated all 51 inline YearProcessor events

  • Phase 6: rewrote watch-roster memorials pronoun-free (so they read correctly in every language) and localized their fragments

  • SplashScreen boot sequence + Main bridge diagnostics localized

  • Final sweep: remaining UI display strings localized via TextDB.label(); ~480 swept strings hand-translated across all four languages (now 1,061 label keys per language)

Translation groundwork (June 6)

  • Full translation audit + update across de/fr/it/es

  • Semantic review of existing UI translations, fixed prior mistranslations

  • EpilogueGenerator localization infrastructure stood up (new TextDB.label() gettext-style system underpinning all of the above)

✨ New feature

  • Dual ages in the colonist registry. The cryo-bay dossier now shows each colonist's biological age (the body, since frozen sleepers don't age) and chronological age (years since birth, cryo included). The two only diverge for colonists who actually slept.

🐛 Bugs fixed: QA-surfaced runtime issues

  • bug-952crew ages were wrong (player report: ship-born "coming out the womb already 12," appearing to age twice a year). Two age-storage conventions collided: founders store age at launch, ship-born store current age (recomputed yearly by design). The cryo-bay readout added the mission year to both, double-counting ship-born years. Fix: add state.year only for non-ship-born colonists; tools/repro_aging.gd proved the fix (5,936 mismatches → 0). Surfaced as the dual-age feature above.
  • bug-955: out-of-bounds crash on German ocean-world endings. (50-run build QA: a flood of "Index 9/10 out of bounds (length()=9)") The i18n auto-wrapper had localized a hash-seed input: the loop ran over "Ocean World".length() (EN = 11) but the body indexed the translated label "Ozeanwelt" (DE = 9 chars). Fix: reverted the seed to the raw English literal so the loop bound and the indexed string match.

  • bug-954untranslated English fragments leaked into localized epilogues. (500-run / build QA, e.g. FR: "…sur un monde viable avec sufficient resources") Six dynamic resource/reserve note fragments were raw English literals inserted via %s. Fix: wrapped all six with _e() and added translations to all five epilogue.json files; verified 0 English-resource leaks across fr/de/it/es.
  • bug-946settled-ending epilogue leaked English mid-sentence. (e.g. "…war controlled. A temperate world") Descent-quality words ("controlled"/"managed"), module status, and _planet_phrase() output were raw English inserted into otherwise-translated paragraphs. Fix: wrapped those literals with _e(); _planet_phrase() now localizes the lowercase "a temperate world" phrase before capitalization. Added 10 planet phrases + 5 fragments to all five epilogue files.
  • bug-939: localized epilogues silently rendered in English despite epilogue.json containing the translations. The key-extraction step used .encode().decode('unicode_escape'), which converts n correctly but re-corrupts every non-ASCII UTF-8 byte into mojibake (em-dash → âx80x94), so Godot's lookups missed and fell back to English. Fix: fix_epilogue_keys.py reverses the double-encoding across all five locale files; verified bijective against the 566 source _e() literals. (Lesson logged: never unicode_escape GDScript literals containing non-ASCII.)

🐛 Bugs fixed: i18n auto-wrap hazard cleanup

The broad auto-wrapper that inserted TextDB.label() around display strings also hit places it shouldn't. Three distinct hazard classes were caught and reverted:

  • bug-944: comparison sites. Wrapping matched literals on the right of ==/!= (e.g. if planet_type == TextDB.label("Twin System")), which are logic keys, not display strings, silently false in non-English. Reverted 35 sites. Rule: localize at display only, never at comparison.

  • bug-945: const blocks. The wrapper put a runtime call inside const declarations (FACTION_NAMES dict in FactionStatus.gd, TITLE_FULL in StartMenu.gd) → parse error not caught by --quit, only by binary import. Reverted to bare literals (these strings stay English anyway) and scanned all of ui/ for the same pattern.

  • Plus assorted wrong-reference / null-safety fixes from the same cleanup pass: bug-941 (_cls→TextDB, EventsPanel), bug-948 (planet_type→TextDB, ColonistStatus), bug-935 / bug-940 (TextDB null-safety), bug-934 (CamerasPanel font-size key).

🔧 Other updates

  • Cross-screen font consistency sweep with live font-size propagation; raised the minimum readable-font floor (bug-933: min now size−2, ≥11 instead of size−6, ≥7).

  • New translation-QA toolingper-locale autoplay sweeps (qa_locale_sweep.gd), localized UI-capture harnesses, a hardcoded-English auditor taught about the new _e/TextDB.label paths, plus 500-run and build-battery render harnesses (tuned to 60-year games landing at year

Source

Steam News / 9 June 2026

Open original post

Changelog.gg summarizes and formats this update. How we read updates.