From c29d1b8dbd191c3db022ca2462b110f420da95e3 Mon Sep 17 00:00:00 2001 From: chrg6 Date: Mon, 9 Nov 2026 12:39:21 -0500 Subject: [PATCH] Name exit code 70 for what it mostly is: a fatal error the game wrote to its log, often memory that ran out. The launcher told players that code 70 meant the game could not start itself again. The game exits with 70 after any FATAL line of its own (runtime/dispatch.c rt_fatal), most often an allocation that failed when the memory ran out; a failed re-run of itself (plat_reexec) is the rare case. A 0.6.1 player on a 16 GB laptop got the old text three times, which pointed away from the log line that says what happened. Co-Authored-By: Claude Opus 5.5 --- launcher/ui/app.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/launcher/ui/app.py b/launcher/ui/app.py index 84d4d02b..316d1696 100644 --- a/launcher/ui/app.py +++ b/launcher/ui/app.py @@ -86,11 +86,13 @@ def free_gb(path): return 0.0 -# Exit codes that end the game without a line of its own in its log, and what they mean. The game's crash report exits -# with 71 after writing its FATAL lines (runtime/main.c crash_handler); the others come from Windows when something -# ends the process before or around that report. +# Exit codes that end the game, and what they mean. The game exits with 70 after a FATAL line of its own: an error it +# cannot go on from, most often an allocation that failed because the memory ran out (runtime/dispatch.c rt_fatal), or +# a failed re-run of itself (runtime/platform/win32.c plat_reexec). Its crash report exits with 71 after writing its +# FATAL lines (runtime/main.c crash_handler). The others come from Windows when something ends the process before or +# around that report. EXIT_CODES = { - 70: 'the game could not start itself again', + 70: 'a fatal error: the FATAL line near the end of its log says which, often memory that ran out', 71: 'the crash report ended the game', 0xC0000005: 'access violation', 0xC00000FD: 'stack overflow',