Skip to main content

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

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.