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 = falseon the event log label. Text changes now callqueue_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.
