mirror of
https://github.com/nunuhara/xsystem4.git
synced 2026-09-28 01:48:04 +03:00
The 'lint' type in system 4 is NOT a 64-bit integer type. It is actually a signed 32-bit integer type that is clamped between 0 and INT32_MAX. Negative numbers can be assigned to a lint using SH_LOCALASSIGN (or at least, the unofficial compiler emits such code) but LI_* instructions always produce a positive result. I'm guessing System40.exe converts lints to 64-bit integers for doing arithmetic, and then clamps the result to the 32-bit integer range before writing back to a variable. This fixes a bug in Sengoku Rance where units would become invincible in commander battles after their HP fell below zero.