v0.1.9 — Crash Fix
FINALLY!
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.