REDIVIVUS

Proposals / #1035

AddRoomDataActual's nDepth is an int: compared with the room status and the slot index by JL/JLE

applied · by Niehztog · submitted 2026-11-02, applied 2026-11-02

Ghidra v1841 · 4ca0e98

nDepth (ESI) is the zero-extended init depth, and every compare on it is signed: 0061b4ad MOVZX ECX,byte ptr [EDI+0x44] (fRoomStatus) / 0061b4b1 MOVZX ESI,BL / 0061b4b4 CMP ECX,ESI / 0061b4b6 JL; 0061b4ba TEST ESI,ESI / 0061b4bc JL; the slot scan 0061b4cd CMP EAX,ESI / 0061b4cf JLE; then 0061b4d1 MOV EDX,[ESI*4+0x744384] indexes gaRoomExActivationHandlers. Ghidra leaves it undefined4 and resolves it to uint, so the generator declares uint32_t and the status compare comes out unsigned (JA). Recompiled with VC8 SP1 (the 1.14d compiler) on main f26206a with the local as int: that compare becomes signed like the original's, and no function in the TU changes status.

Changes 1, applied together

  1. Retype variable win 0x0061b490 ESI

    typeundefined4→int