Files
Cesarus85--mjolnir-vr/source
Jonas VolmanandClaude Opus 5 ba612bffb7 _actor_customize_unit EXACT (+640) under the narrow _random_range exception
Owner ruling 2026-09-20: allow the narrow _random_range COMDAT exception and land
+640. Do not extend it to _point_from_line3d; its explicit guard remains.

One line. The grenade count is computed with the header's __inline helper,
random_range(lower, upper + 1), instead of spelling out
seed_random_range(get_global_random_seed_address(), lower, upper + 1). This is
exactly how the already-exact _ai_scripting_renew in ai_script.c computes the
same grenade count from the same fields.

The decoded allocator predicts why it matters: the helper's two inlined
parameters raise the grenade block's pressure from 3 to 5, lifting
actor_variant_definition's web from 53 to 65 - one point above change_colors at
64 - so it takes ebx and change_colors spills, which is January's allocation. The
same form also fixes the push order at 0x18e. One source fact resolves both
halves of what had been classed as "allocator decision plus a separate
difference".

THE EXCEPTION, and its limits. The change newly defines exactly one symbol,
_random_range, a COMDAT byte-identical to January's single copy, which the split
credits to action_obey.obj. That emission is admitted by the ruling above and by
nothing broader; ai_script.obj and encounters.obj already emit the same COMDAT.
The _point_from_line3d guard still exits 0 on this unit.

The function was parked; its entry is removed by brace-depth line surgery.

Verified: full ninja green; code 1,462,353 -> 1,462,991 (7,303 -> 7,304
functions); actors 73/3 -> 74/2; 11,060 function rows and 1,706 section rows
diffed board-wide, 0 worse; newly defined symbols: _random_range only; parks
180 -> 179 active, 0 stale, 0 invalid; fake_match_scan 0 findings.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-21 02:04:23 -07:00
..
2025-11-28 00:16:20 +00:00
2026-09-19 15:56:43 -07:00
2026-09-19 15:56:43 -07:00
2026-06-08 02:47:21 +01:00