Skip to main content

Indie game storeFree gamesFun gamesHorror games
Game developmentAssetsComics
SalesBundles
Jobs
TagsGame Engines

Dead Reckoning: A Generation Ship Simulation

A colony ship sim where you play the AI. Manage a sleeping crew across a generation-long voyage. Try not to lose them. · By GaranLorn

(FIXED IN 1.9!) Game breaking bug: Crash on year 18-20 Sticky

A topic by GaranLorn created 17 days ago Views: 40 Replies: 3
Viewing posts 1 to 4
Developer (1 edit)

What: Users reporting freeze in game with spiked CPU still occurring between Year 18-22. Confirmed myself on Mint machine 4x.

Root Cause: Most likely something with the colonist system. Checking current loop errors.


Fix: Check certain event scripts designed before more dynamic scripting.


Estimate: 3-4 hours.

Developer

Summary

The game freezes (indefinite hang, not a hard crash) when pressing Advance Year somewhere between years 18 and 20. The window remains open but becomes unresponsive. This is distinct from the CPU-spike issue addressed in 0.1.7, which was a gradual slowdown over a longer run — this one is sudden and reproducible at a consistent point in the timeline.

Steps to reproduce

  1. Start a new game (or load a save — see notes below)
  2. Advance through years normally
  3. At approximately year 18–20, press Advance Year
  4. Game hangs — no further output, window does not close

Expected behaviour

Year advances normally; event for that year is processed and displayed.

Actual behaviour

Game freezes. Based on the output captured during the session, the freeze appears to be an infinite loop rather than a crash, which is why the window stays open.

Developer

Crash log:


handle_crash: Program crashed with signal 11 Engine version: Godot Engine v4.6.1.stable.official Still crashing year 18

Developer

v0.1.9 — Crash Fix

If you hit a silent freeze or crash between years 18–24, this update is for you.

What was happening

The event log panel used a RichTextLabel with fit_content = true. That sounds innocuous, but it meant every character the typewriter animation drew triggered update_minimum_size(), which cascaded up through the entire UI tree — scroll container, events panel, main layout, all five tab panels, 200+ nodes. At 60 FPS in watch mode, that's roughly 30 full-tree layout recalculations per year. Over a 20-year run, the engine's internal message queue filled up and died with Container::_sort_children — Message queue out of memory.

A secondary culprit: the drift threshold glitch effect was calling add_theme_stylebox_override() with varying content margins, which kicked off the same cascade 8 more times per threshold event.

What was fixed

  • fit_content = false on the event log label. Text changes now call queue_redraw() — a cheap repaint with no layout impact. The label fills its container via size flags instead.
  • Glitch effect rewritten to use modulate tinting only. No style overrides, no margin changes, no cascade.
  • Choice button removal is now properly deferred. The previous free() call was causing signal-emission crashes during decision handling.
  • Message queue ceiling raised to 256MB as a secondary safety net.

Minor layout change

The decision choices panel now sits below the event log rather than scrolling inside it. Choices are always visible without scrolling — which is an improvement regardless.

Thanks to Efflixi and waterSticksToMyBalls for the reports.