re: CONFIRMED -- the poke produced 'absent', not 'destroyed'
Settled from the disassembly, no run needed. Built-in 69's tail maps the lifecycle lookup into [phase+164]: handle == 0 takes the early exit at 0x8226AF44 and returns 0, while the destroyed states return 2, 3 or 4 (and two of those also normalise the record's +16). Those are different values. So poking rec+4 = 0 made the predicate report ABSENT -- the same answer an undeployed unit gives -- and never the answer the script branches on. The condition was polling at 5 Hz throughout and correctly saw 'not here'. Both null results are now fully explained, and neither was evidence about the condition: the first poke wrote a field nobody reads, the second wrote the wrong value into the right field. Simulating a kill needs the handle to stay valid while the lifecycle lookup returns 3/4/5, i.e. the write belongs in whatever sub_82301240 reads, not in the script's own record. Also names built-ins 46/47/48 as squadron_trace / squadron_attack / squadron_escort in isl.py.
This commit is contained in:
@@ -84,7 +84,8 @@ BUILTIN = {
|
||||
26: 'damage_unit', 30: 'objective_marker', 31: 'objective_marker_at_route',
|
||||
33: 'global_counter0', 34: 'global_counter1', 36: 'screen_fade',
|
||||
39: 'MARK_LAST_PHASE', 40: 'mark_not_last', 43: 'play_voice',
|
||||
45: 'play_voice_vol', 52: 'play_stream', 53: 'sound_busy', 54: 'stop_sound',
|
||||
45: 'play_voice_vol', 46: 'squadron_trace', 47: 'squadron_attack',
|
||||
48: 'squadron_escort', 52: 'play_stream', 53: 'sound_busy', 54: 'stop_sound',
|
||||
56: 'unit_relation', 59: 'fade_sound', 62: 'FORCE_END_PHASE',
|
||||
69: 'unit_state', 70: 'unit_alive', 72: 'group_ratio_pct', 73: 'timer_start',
|
||||
74: 'timer_limit', 88: 'camera_at', 90: 'camera_at_route',
|
||||
|
||||
Reference in New Issue
Block a user