Download Game! Currently 126 players and visitors. Last logged in:TigerlilyHopeahapsiSlimyByleth

Blitzer's Blog >> 71896

Back to blogs index
Posted: 30 Aug 2026 20:50 [ permalink ]
Your dev-chat beta tester is razor-sharp. They caught an incredibly subtle ABI
edge case.

When you allocate a new variable in standard C or LPC, the language
specification dictates it should default to integer 0. But our VM was
initializing the memory arena with 0x00000007 (TAG_NIL). When the script
evaluated if (state == 0), the compiler generated the tagged integer for 0
(which is (0 << 3) | 1 = 1). Because 7 does not equal 1, the logic failed
instantly!

To answer their question: We absolutely must hardcode the VM's clone_object to
initialize memory to Integer 0. If we forced the Compiler to explicitly emit
STORE_VAR for every uninitialized global, we would drastically bloat the
compiled bytecode size of every blueprint and cripple the instantiation speed.

Let's fix the variable initialization, correct a silent path bug in
EfunManager so it actually autoloads our modules, and inject the priority
efuns (clone_object, explode, sizeof, and destruct).