isl: rename built-ins 8/9/93 to stopwatch_start/_elapsed/_stop

They are start / read / stop of one of 32 per-phase stopwatches, not
flag operations.  123-127 keep timer_* -- that is the mission timer,
five scalars at [phase+304..320], a different clock.

Artefact check: 84 lines changed across 5 files and all 84 pair
exactly with their old-name partners once column padding is
normalised (0 removed lines without an old name, 0 added lines
without a new one).  data/isl-timers.txt reproduces the same
675/675, 11.2 % control, 82/1 and identical histograms, which is
what shows the rename is cosmetic.

Also withdraws a label from the previous commit: sub_8230C398 is NOT
the message pump.  It runs every frame but drains nothing -- a state
machine on [0x828E1F8C] that only allocates, builds strings, looks up
and PUSHES.  And bus+8216 is weak evidence: sub_82254A08 is a generic
map find with ~120 sites, and the key looked up is a pointer, not a
tag.  The open handle is now the ring buffer at bus+4, not bus+8216.
This commit is contained in:
Sylpheed RE agent
2026-08-27 09:21:04 +00:00
parent 11bcf283cb
commit 3fa898093f
10 changed files with 153 additions and 106 deletions

View File

@@ -30,7 +30,7 @@ fired by time passing, which is not a property of the graph.
## phase 1 — END_PHASE at 0x0033C8: 3 necessary condition(s)
precond 0x002870 unit_hp_pct(TCN001, Character_Player_Test) != 0
precond 0x002BC4 hp_pct_test(ADT101, 0) != 1
precond 0x0031D8 read_freg(0) < 600
precond 0x0031D8 stopwatch_elapsed(0) < 600
## phase 1 — FORCE_END_PHASE at 0x00E0B4: 0 necessary condition(s)
@@ -40,7 +40,7 @@ fired by time passing, which is not a property of the graph.
## phase 2 — END_PHASE at 0x012714: 10 necessary condition(s)
precond 0x011814 unit_hp_pct(TCN001, Character_Player_Test) != 0
precond 0x011B70 read_freg(0) < 70
precond 0x011B70 stopwatch_elapsed(0) < 70
precond 0x011BC4 hp_pct_test(ADT201, 0) != 1
precond 0x011C18 hp_pct_test(ADT202, 0) != 1
precond 0x011C6C hp_pct_test(ADT203, 0) != 1
@@ -52,8 +52,8 @@ fired by time passing, which is not a property of the graph.
## phase 2 — END_PHASE at 0x012964: 3 necessary condition(s)
precond 0x011814 unit_hp_pct(TCN001, Character_Player_Test) != 0
precond 0x011B70 read_freg(0) < 70
precond 0x012774 read_freg(0) < 600
precond 0x011B70 stopwatch_elapsed(0) < 70
precond 0x012774 stopwatch_elapsed(0) < 600
## phase 2 — FORCE_END_PHASE at 0x01B828: 0 necessary condition(s)
@@ -87,7 +87,7 @@ fired by time passing, which is not a property of the graph.
## phase 1 — END_PHASE at 0x006010: 7 necessary condition(s)
precond 0x004D70 unit_hp_pct(TCN001, Character_Player_Test) != 0
precond 0x00523C hp_pct_test(TCN004, 0) != 1
precond 0x005888 read_freg(0) <= 210
precond 0x005888 stopwatch_elapsed(0) <= 210
precond 0x0058DC hp_pct_test(ADT102, 0) != 1
precond 0x005930 hp_pct_test(ADT107, 0) != 1
precond 0x005984 hp_pct_test(ADT113, 0) != 1
@@ -96,8 +96,8 @@ fired by time passing, which is not a property of the graph.
## phase 1 — END_PHASE at 0x006260: 4 necessary condition(s)
precond 0x004D70 unit_hp_pct(TCN001, Character_Player_Test) != 0
precond 0x00523C hp_pct_test(TCN004, 0) != 1
precond 0x005888 read_freg(0) <= 210
precond 0x006070 read_freg(0) < 1200
precond 0x005888 stopwatch_elapsed(0) <= 210
precond 0x006070 stopwatch_elapsed(0) < 1200
## phase 1 — FORCE_END_PHASE at 0x01482C: 0 necessary condition(s)
@@ -140,7 +140,7 @@ fired by time passing, which is not a property of the graph.
precond 0x02B4F8 unit_hp_pct(TCN001, Character_Player_Test) != 0
precond 0x02B9C4 hp_pct_test(TCN004, 0) != 1
precond 0x02BFC8 global[112] < 4
precond 0x02C240 read_freg(0) <= 300
precond 0x02C240 stopwatch_elapsed(0) <= 300
precond 0x02C294 hp_pct_test(ADT301, 0) != 1
precond 0x02C2E8 hp_pct_test(ADT302, 0) != 1
precond 0x02C33C hp_pct_test(ADT303, 0) != 1
@@ -158,8 +158,8 @@ fired by time passing, which is not a property of the graph.
precond 0x02B4F8 unit_hp_pct(TCN001, Character_Player_Test) != 0
precond 0x02B9C4 hp_pct_test(TCN004, 0) != 1
precond 0x02BFC8 global[112] < 4
precond 0x02C240 read_freg(0) <= 300
precond 0x02CFD4 read_freg(0) < 1200
precond 0x02C240 stopwatch_elapsed(0) <= 300
precond 0x02CFD4 stopwatch_elapsed(0) < 1200
## phase 3 — FORCE_END_PHASE at 0x034A10: 0 necessary condition(s)
@@ -193,7 +193,7 @@ fired by time passing, which is not a property of the graph.
## phase 1 — END_PHASE at 0x004688: 12 necessary condition(s)
precond 0x0034B0 unit_hp_pct(TCN001, Character_Player_Test) != 0
precond 0x00397C hp_pct_test(TCN004, 0) != 1
precond 0x003FC8 read_freg(0) < 210
precond 0x003FC8 stopwatch_elapsed(0) < 210
precond 0x00401C hp_pct_test(ADT101, 0) != 1
precond 0x004070 hp_pct_test(ADT102, 0) != 1
precond 0x0040C4 hp_pct_test(ADT103, 0) != 1
@@ -207,8 +207,8 @@ fired by time passing, which is not a property of the graph.
## phase 1 — END_PHASE at 0x0048D8: 4 necessary condition(s)
precond 0x0034B0 unit_hp_pct(TCN001, Character_Player_Test) != 0
precond 0x00397C hp_pct_test(TCN004, 0) != 1
precond 0x003FC8 read_freg(0) < 210
precond 0x0046E8 read_freg(0) < 600
precond 0x003FC8 stopwatch_elapsed(0) < 210
precond 0x0046E8 stopwatch_elapsed(0) < 600
## phase 1 — FORCE_END_PHASE at 0x009FF4: 0 necessary condition(s)
@@ -231,7 +231,7 @@ fired by time passing, which is not a property of the graph.
precond 0x00E210 hp_pct_test(TCN004, 0) != 1
precond 0x00E814 global[44] != 3
precond 0x00EA28 global[56] != 0
precond 0x00EB5C read_freg(0) < 420
precond 0x00EB5C stopwatch_elapsed(0) < 420
precond 0x00EFC0 global[8] == 0
TRIGGER 0x00F098 global[8] != 2
TRIGGER 0x00F1E4 <unknown> != 1
@@ -268,7 +268,7 @@ fired by time passing, which is not a property of the graph.
precond 0x019690 hp_pct_test(TCN004, 0) != 1
precond 0x019C94 global[64] != 4
precond 0x019E9C global[76] != 2
precond 0x01A70C read_freg(0) < 600
precond 0x01A70C stopwatch_elapsed(0) < 600
TRIGGER 0x01A7E4 global[64] != 0
TRIGGER 0x01A994 global[44] != 0
TRIGGER 0x01AB10 global[8] == 0
@@ -310,13 +310,13 @@ fired by time passing, which is not a property of the graph.
precond 0x0032B0 hp_pct_test(ADT103, 0) != 1
precond 0x003304 hp_pct_test(ADT106, 0) != 1
precond 0x003358 hp_pct_test(ADT107, 0) != 1
TRIGGER 0x003478 read_freg(0, 0) >= 130
TRIGGER 0x003478 stopwatch_elapsed(0, 0) >= 130
## phase 1 — END_PHASE at 0x003A1C: 4 necessary condition(s)
precond 0x002698 unit_hp_pct(TCN001, Character_Player_Test) != 0
precond 0x002B94 hp_pct_test(TCN004, 0) != 1
precond 0x003208 hp_pct_test(ADT101, 0) != 1
precond 0x0037FC read_freg(0) < 600
precond 0x0037FC stopwatch_elapsed(0) < 600
## phase 1 — FORCE_END_PHASE at 0x0052A4: 0 necessary condition(s)
@@ -343,7 +343,7 @@ fired by time passing, which is not a property of the graph.
precond 0x008474 unit_hp_pct(TCN001, Character_Player_Test) != 0
precond 0x008970 hp_pct_test(TCN004, 0) != 1
precond 0x008FA4 global[16] != 1
precond 0x0099A4 read_freg(0) < 600
precond 0x0099A4 stopwatch_elapsed(0) < 600
## phase 2 — FORCE_END_PHASE at 0x00C9CC: 0 necessary condition(s)
@@ -367,14 +367,14 @@ fired by time passing, which is not a property of the graph.
## phase 1 — END_PHASE at 0x0037C0: 4 necessary condition(s)
TRIGGER 0x002D84 unit_hp_pct(TCN001, Character_Player_Test) == 0
TRIGGER 0x002F48 read_freg(0) < 600
TRIGGER 0x002F48 stopwatch_elapsed(0) < 600
TRIGGER 0x00305C unit_hp_pct(TCN001, Character_Player_Test) != 0
TRIGGER 0x0033D4 hp_pct_test(TCN004, 0) != 1
## phase 1 — END_PHASE at 0x003D94: 15 necessary condition(s)
TRIGGER 0x002D84 unit_hp_pct(TCN001, Character_Player_Test) == 0
TRIGGER 0x002DD8 hp_pct_test(TCN004, 0) == 1
precond 0x002E34 read_freg(0) < 600
precond 0x002E34 stopwatch_elapsed(0) < 600
precond 0x0037D8 global[4] != 1
precond 0x00382C hp_pct_test(ADT101, 0) != 1
precond 0x003880 hp_pct_test(ADT102, 0) != 1
@@ -394,12 +394,12 @@ fired by time passing, which is not a property of the graph.
TRIGGER 0x00964C unit_hp_pct(TCN001, Character_Player_Test) == 0
TRIGGER 0x009828 unit_hp_pct(TCN001, Character_Player_Test) != 0
TRIGGER 0x009BA0 hp_pct_test(TCN004, 0) != 1
TRIGGER 0x009F20 read_freg(0) < 600
TRIGGER 0x009F20 stopwatch_elapsed(0) < 600
## phase 2 — END_PHASE at 0x00A410: 8 necessary condition(s)
TRIGGER 0x00964C unit_hp_pct(TCN001, Character_Player_Test) == 0
TRIGGER 0x0096A0 hp_pct_test(TCN004, 0) == 1
precond 0x0096FC read_freg(0) < 600
precond 0x0096FC stopwatch_elapsed(0) < 600
precond 0x00A0A0 global[12] < 4
precond 0x00A0F4 hp_pct_test(ADT205, 0) != 1
precond 0x00A148 hp_pct_test(ADT206, 0) != 1
@@ -438,12 +438,12 @@ fired by time passing, which is not a property of the graph.
## phase 1 — END_PHASE at 0x00407C: 3 necessary condition(s)
precond 0x0032D4 unit_hp_pct(TCN001, Character_Player_Test) != 0
precond 0x0037D8 hp_pct_test(TCN004, 0) != 1
precond 0x003E5C read_freg(0) < 600
precond 0x003E5C stopwatch_elapsed(0) < 600
## phase 1 — END_PHASE at 0x0043A8: 5 necessary condition(s)
precond 0x0032D4 unit_hp_pct(TCN001, Character_Player_Test) != 0
precond 0x0037D8 hp_pct_test(TCN004, 0) != 1
precond 0x003E5C read_freg(0) < 600
precond 0x003E5C stopwatch_elapsed(0) < 600
precond 0x00409C global[0] < 9
TRIGGER 0x00422C global[4] != 1
@@ -461,12 +461,12 @@ fired by time passing, which is not a property of the graph.
## phase 2 — END_PHASE at 0x00CED8: 3 necessary condition(s)
precond 0x00C130 unit_hp_pct(TCN001, Character_Player_Test) != 0
precond 0x00C634 hp_pct_test(TCN004, 0) != 1
precond 0x00CCB8 read_freg(0) < 600
precond 0x00CCB8 stopwatch_elapsed(0) < 600
## phase 2 — END_PHASE at 0x00D8A8: 16 necessary condition(s)
precond 0x00C130 unit_hp_pct(TCN001, Character_Player_Test) != 0
precond 0x00C634 hp_pct_test(TCN004, 0) != 1
precond 0x00CCB8 read_freg(0) < 600
precond 0x00CCB8 stopwatch_elapsed(0) < 600
precond 0x00CF3C unit_state(ADT215) == 0
precond 0x00CF94 unit_state(ADT217) != 0
precond 0x00CFF0 hp_pct_test(ADT201, 0) != 1
@@ -505,7 +505,7 @@ fired by time passing, which is not a property of the graph.
precond 0x013B28 unit_hp_pct(TCN001, Character_Player_Test) != 0
precond 0x014024 hp_pct_test(TCN004, 0) != 1
precond 0x014698 hp_pct_test(ADT301, 0) != 1
precond 0x014F2C read_freg(0) < 1200
precond 0x014F2C stopwatch_elapsed(0) < 1200
## phase 3 — FORCE_END_PHASE at 0x01B31C: 0 necessary condition(s)
@@ -545,15 +545,15 @@ fired by time passing, which is not a property of the graph.
precond 0x002750 unit_hp_pct(TCN001, Character_Player_Test) != 0
precond 0x002B98 hp_pct_test(TCN004, 0) != 1
precond 0x003214 hp_pct_test(TCN012, 0) != 1
precond 0x00349C read_freg(0) < 600
precond 0x00349C stopwatch_elapsed(0) < 600
## phase 1 — END_PHASE at 0x003B34: 7 necessary condition(s)
precond 0x002750 unit_hp_pct(TCN001, Character_Player_Test) != 0
precond 0x002B98 hp_pct_test(TCN004, 0) != 1
precond 0x003214 hp_pct_test(TCN012, 0) != 1
precond 0x00349C read_freg(0) < 600
precond 0x00349C stopwatch_elapsed(0) < 600
precond 0x0036DC global[0] < 7
TRIGGER 0x0037FC read_freg(0, 0) >= 300
TRIGGER 0x0037FC stopwatch_elapsed(0, 0) >= 300
TRIGGER 0x0039B8 global[8] != 1
## phase 1 — FORCE_END_PHASE at 0x00976C: 0 necessary condition(s)
@@ -604,7 +604,7 @@ fired by time passing, which is not a property of the graph.
precond 0x00D1C8 hp_pct_test(TCN004, 0) != 1
precond 0x00D844 hp_pct_test(TCT012, 0) != 1
precond 0x00DAC4 hp_pct_test(ADN201, 0) != 1
precond 0x00ED40 read_freg(0) < 600
precond 0x00ED40 stopwatch_elapsed(0) < 600
TRIGGER 0x00EF18 squad_survival_pct(TCN004, 99.9) != 0
TRIGGER 0x00F344 global[16] != 1
@@ -636,7 +636,7 @@ fired by time passing, which is not a property of the graph.
TRIGGER 0x003594 unit_hp_pct(TCN001, Character_Player_Test) == 0
TRIGGER 0x0035E8 hp_pct_test(TCN104, 0) == 1
TRIGGER 0x00363C hp_pct_test(TCN012, 0) == 1
precond 0x003698 read_freg(0) < 600
precond 0x003698 stopwatch_elapsed(0) < 600
precond 0x00420C global[8] != 1
precond 0x004220 global[12] != 1
precond 0x004234 global[16] != 1
@@ -656,7 +656,7 @@ fired by time passing, which is not a property of the graph.
TRIGGER 0x00EEB8 unit_hp_pct(TCN001, Character_Player_Test) == 0
TRIGGER 0x00EF0C hp_pct_test(TCN004, 0) == 1
TRIGGER 0x00EF60 hp_pct_test(TCN012, 0) == 1
precond 0x00EFBC read_freg(0) < 600
precond 0x00EFBC stopwatch_elapsed(0) < 600
precond 0x00FB70 hp_pct_test(ADN205, 0) != 1
precond 0x00FBC4 hp_pct_test(ADN206, 0) != 1
precond 0x00FC18 hp_pct_test(ADN207, 0) != 1
@@ -710,7 +710,7 @@ fired by time passing, which is not a property of the graph.
precond 0x0039E8 hp_pct_test(TCN008, 0) != 1
precond 0x003C30 hp_pct_test(TCN104, 0) != 1
precond 0x004234 global[0] != 11
TRIGGER 0x0043F4 read_freg(0, 0) >= 300
TRIGGER 0x0043F4 stopwatch_elapsed(0, 0) >= 300
TRIGGER 0x004540 unit_state(TCN104) != 1
TRIGGER 0x004860 global[4] == 0
@@ -719,7 +719,7 @@ fired by time passing, which is not a property of the graph.
precond 0x0039E8 hp_pct_test(TCN008, 0) != 1
precond 0x003C30 hp_pct_test(TCN104, 0) != 1
precond 0x004234 global[0] != 11
precond 0x004A0C read_freg(0) < 600
precond 0x004A0C stopwatch_elapsed(0) < 600
## phase 1 — FORCE_END_PHASE at 0x007BF0: 0 necessary condition(s)
@@ -780,7 +780,7 @@ fired by time passing, which is not a property of the graph.
precond 0x012AD0 unit_state(ADS322) == 1
precond 0x012B28 unit_state(ADS323) == 1
TRIGGER 0x012DCC unit_state(TCN006) != 1
TRIGGER 0x013010 read_freg(global[4]) >= 5
TRIGGER 0x013010 stopwatch_elapsed(global[4]) >= 5
## phase 3 — END_PHASE at 0x013680: 6 necessary condition(s)
precond 0x011E4C unit_hp_pct(TCN001, Character_Player_Test) != 0
@@ -816,13 +816,13 @@ fired by time passing, which is not a property of the graph.
## phase 1 — END_PHASE at 0x001590: 2 necessary condition(s)
precond 0x000FE4 unit_hp_pct(TCN001, Character_Player_Test) != 0
precond 0x001370 read_freg(0) < 600
precond 0x001370 stopwatch_elapsed(0) < 600
## phase 1 — END_PHASE at 0x001BA8: 6 necessary condition(s)
precond 0x000FE4 unit_hp_pct(TCN001, Character_Player_Test) != 0
precond 0x001370 read_freg(0) < 600
precond 0x001370 stopwatch_elapsed(0) < 600
precond 0x0015E8 hp_pct_test(ADT001, 0) != 1
TRIGGER 0x001708 read_freg(0, 0) > 300
TRIGGER 0x001708 stopwatch_elapsed(0, 0) > 300
TRIGGER 0x001918 hp_pct_test(TCN001, 99.9) != 0
TRIGGER 0x001A2C global[4] == 0
@@ -858,12 +858,12 @@ fired by time passing, which is not a property of the graph.
## phase 1 — END_PHASE at 0x0027C0: 3 necessary condition(s)
precond 0x001AD4 unit_hp_pct(TCN001, Character_Player_Test) != 0
precond 0x001F1C hp_pct_test(TCN004, 0) != 1
precond 0x0025A0 read_freg(0) < 600
precond 0x0025A0 stopwatch_elapsed(0) < 600
## phase 1 — END_PHASE at 0x002A00: 4 necessary condition(s)
precond 0x001AD4 unit_hp_pct(TCN001, Character_Player_Test) != 0
precond 0x001F1C hp_pct_test(TCN004, 0) != 1
precond 0x0025A0 read_freg(0) < 600
precond 0x0025A0 stopwatch_elapsed(0) < 600
precond 0x0027E0 global[0] < 10
## phase 1 — FORCE_END_PHASE at 0x00A684: 0 necessary condition(s)
@@ -880,12 +880,12 @@ fired by time passing, which is not a property of the graph.
## phase 2 — END_PHASE at 0x00CD8C: 3 necessary condition(s)
precond 0x00C0A0 unit_hp_pct(TCN001, Character_Player_Test) != 0
precond 0x00C4E8 hp_pct_test(TCN004, 0) != 1
precond 0x00CB6C read_freg(0) < 600
precond 0x00CB6C stopwatch_elapsed(0) < 600
## phase 2 — END_PHASE at 0x00D214: 6 necessary condition(s)
precond 0x00C0A0 unit_hp_pct(TCN001, Character_Player_Test) != 0
precond 0x00C4E8 hp_pct_test(TCN004, 0) != 1
precond 0x00CB6C read_freg(0) < 600
precond 0x00CB6C stopwatch_elapsed(0) < 600
precond 0x00CDAC global[8] < 6
TRIGGER 0x00CFA8 hp_pct_test(TCN004, 99.9) != 0
TRIGGER 0x00D098 global[4] != 1
@@ -919,7 +919,7 @@ fired by time passing, which is not a property of the graph.
TRIGGER 0x003290 hp_pct_test(TCN004, 0) == 1
TRIGGER 0x0032E4 hp_pct_test(TCN006, 0) == 1
TRIGGER 0x003338 hp_pct_test(TCN008, 0) == 1
precond 0x003394 read_freg(0) <= 1200
precond 0x003394 stopwatch_elapsed(0) <= 1200
precond 0x004004 global[4] != 1
TRIGGER 0x0040E8 global[8] != 1
TRIGGER 0x0041DC <unknown> != 1
@@ -993,18 +993,18 @@ fired by time passing, which is not a property of the graph.
## phase 1 — END_PHASE at 0x002B48: 2 necessary condition(s)
precond 0x0024D8 unit_hp_pct(TCN001, Character_Player_Test) != 0
precond 0x002928 read_freg(0) < 600
precond 0x002928 stopwatch_elapsed(0) < 600
## phase 1 — END_PHASE at 0x0031B0: 10 necessary condition(s)
precond 0x0024D8 unit_hp_pct(TCN001, Character_Player_Test) != 0
precond 0x002928 read_freg(0) < 600
precond 0x002928 stopwatch_elapsed(0) < 600
precond 0x002BA8 hp_pct_test(ADT102, 0) != 1
precond 0x002BFC hp_pct_test(ADT103, 0) != 1
precond 0x002C50 hp_pct_test(ADT104, 0) != 1
precond 0x002CA4 hp_pct_test(ADT105, 0) != 1
precond 0x002CF8 hp_pct_test(ADT108, 0) != 1
precond 0x002D4C hp_pct_test(ADT114, 0) != 1
TRIGGER 0x002E90 read_freg(0) > 300
TRIGGER 0x002E90 stopwatch_elapsed(0) > 300
TRIGGER 0x003034 global[8] != 1
## phase 1 — FORCE_END_PHASE at 0x0061D4: 0 necessary condition(s)
@@ -1014,13 +1014,13 @@ fired by time passing, which is not a property of the graph.
## phase 2 — END_PHASE at 0x0085AC: 2 necessary condition(s)
precond 0x007FC4 unit_hp_pct(TCN201, Character_Player_Test) != 0
precond 0x00838C read_freg(0) < 600
precond 0x00838C stopwatch_elapsed(0) < 600
## phase 2 — END_PHASE at 0x008C24: 6 necessary condition(s)
precond 0x007FC4 unit_hp_pct(TCN201, Character_Player_Test) != 0
precond 0x00838C read_freg(0) < 600
precond 0x00838C stopwatch_elapsed(0) < 600
precond 0x00860C hp_pct_test(ADT201, 0) != 1
TRIGGER 0x008750 read_freg(0) >= 300
TRIGGER 0x008750 stopwatch_elapsed(0) >= 300
TRIGGER 0x008974 hp_pct_test(TCN201, 99.9) != 0
TRIGGER 0x008AA8 global[8] != 1
@@ -1052,7 +1052,7 @@ fired by time passing, which is not a property of the graph.
TRIGGER 0x003FFC unit_hp_pct(TCN001, Character_Player_Test) == 0
TRIGGER 0x004050 hp_pct_test(TCN004, 0) == 1
precond 0x0040A4 hp_pct_test(TCT006, 0) != 1
TRIGGER 0x004B5C read_freg(0) >= 900
TRIGGER 0x004B5C stopwatch_elapsed(0) >= 900
TRIGGER 0x00571C hp_pct_test(ADN101, 0) != 1
TRIGGER 0x00632C global[0] != 1
@@ -1066,7 +1066,7 @@ fired by time passing, which is not a property of the graph.
TRIGGER 0x010388 unit_hp_pct(TCN001, Character_Player_Test) == 0
TRIGGER 0x0103DC hp_pct_test(TCN204, 0) == 1
TRIGGER 0x010430 hp_pct_test(TCN006, 0) == 1
precond 0x01048C read_freg(0) < 1200
precond 0x01048C stopwatch_elapsed(0) < 1200
precond 0x011040 hp_pct_test(ADT201, 0) != 1
precond 0x011094 hp_pct_test(ADT202, 0) != 1
TRIGGER 0x011190 global[12] != 1
@@ -1102,11 +1102,11 @@ fired by time passing, which is not a property of the graph.
## phase 1 — END_PHASE at 0x000CB0: 2 necessary condition(s)
precond 0x0005A0 unit_hp_pct(TCN001, Character_Player_Test) != 0
precond 0x0009F0 read_freg(0) < 600
precond 0x0009F0 stopwatch_elapsed(0) < 600
## phase 1 — END_PHASE at 0x001054: 4 necessary condition(s)
precond 0x0005A0 unit_hp_pct(TCN001, Character_Player_Test) != 0
precond 0x0009F0 read_freg(0) < 600
precond 0x0009F0 stopwatch_elapsed(0) < 600
precond 0x000CF8 player_gauge0_test(0) != 1
TRIGGER 0x000D34 player_gauge1_test(0) != 1
@@ -1291,7 +1291,7 @@ fired by time passing, which is not a property of the graph.
precond 0x006860 hp_pct_test(ADT101, 0) != 1
precond 0x0072CC unit_hp_pct(TCN001, Character_Player_Test) != 0
precond 0x0076D8 hp_pct_test(TCN004, 0) != 1
precond 0x007D84 read_freg(0) < 1800
precond 0x007D84 stopwatch_elapsed(0) < 1800
## phase 1 — FORCE_END_PHASE at 0x00C114: 0 necessary condition(s)
@@ -1325,7 +1325,7 @@ fired by time passing, which is not a property of the graph.
## phase 1 — END_PHASE at 0x017E48: 4 necessary condition(s)
precond 0x01705C unit_hp_pct(TCN001, Character_Player_Test) != 0
precond 0x017454 hp_pct_test(TCN004, 0) != 1
precond 0x017AB0 read_freg(0) < 1200
precond 0x017AB0 stopwatch_elapsed(0) < 1200
TRIGGER 0x017BAC global[0] >= 100
## phase 1 — FORCE_END_PHASE at 0x01C28C: 0 necessary condition(s)
@@ -1366,7 +1366,7 @@ fired by time passing, which is not a property of the graph.
precond 0x0039C8 unit_hp_pct(TCN001, Character_Player_Test) != 0
precond 0x003DD8 hp_pct_test(TCN004, 0) != 1
precond 0x0043DC global[0] != 8
precond 0x00462C read_freg(0) < 900
precond 0x00462C stopwatch_elapsed(0) < 900
TRIGGER 0x004828 global[0] != 0
## phase 1 — FORCE_END_PHASE at 0x00FF5C: 0 necessary condition(s)
@@ -1401,12 +1401,12 @@ fired by time passing, which is not a property of the graph.
## phase 1 — END_PHASE at 0x002D74: 3 necessary condition(s)
precond 0x002128 unit_hp_pct(TCN001, Character_Player_Test) != 0
precond 0x002538 hp_pct_test(TCN004, 0) != 1
precond 0x002B84 read_freg(0) < 1200
precond 0x002B84 stopwatch_elapsed(0) < 1200
## phase 1 — END_PHASE at 0x003850: 22 necessary condition(s)
precond 0x002128 unit_hp_pct(TCN001, Character_Player_Test) != 0
precond 0x002538 hp_pct_test(TCN004, 0) != 1
precond 0x002B84 read_freg(0) < 1200
precond 0x002B84 stopwatch_elapsed(0) < 1200
precond 0x002DCC hp_pct_test(ADN113, 0) != 1
precond 0x002E20 hp_pct_test(ADN114, 0) != 1
precond 0x002E74 hp_pct_test(ADN115, 0) != 1
@@ -1455,12 +1455,12 @@ fired by time passing, which is not a property of the graph.
precond 0x00218C unit_hp_pct(TCN001, Character_Player_Test) != 0
precond 0x0024E0 hp_pct_test(TCN003, 0) != 1
precond 0x002534 hp_pct_test(TCN002, 0) != 1
TRIGGER 0x0026E8 read_freg(0) > 420
TRIGGER 0x0026E8 stopwatch_elapsed(0) > 420
## phase 1 — END_PHASE at 0x002C2C: 4 necessary condition(s)
precond 0x00218C unit_hp_pct(TCN001, Character_Player_Test) != 0
precond 0x0024E0 hp_pct_test(TCN003, 0) != 1
precond 0x002920 read_freg(0) < 1200
precond 0x002920 stopwatch_elapsed(0) < 1200
TRIGGER 0x002A4C unit_hp_pct(TCN001, ELLEN) != 0
## phase 1 — FORCE_END_PHASE at 0x006F24: 0 necessary condition(s)
@@ -1505,14 +1505,14 @@ fired by time passing, which is not a property of the graph.
precond 0x010548 unit_hp_pct(TCN001, Character_Player_Test) != 0
precond 0x010970 hp_pct_test(TCN004, 0) != 1
precond 0x010FCC hp_pct_test(TCT006, 0) != 1
precond 0x011254 read_freg(0) < 1200
precond 0x011254 stopwatch_elapsed(0) < 1200
## phase 1 — END_PHASE at 0x011814: 7 necessary condition(s)
precond 0x00CD3C global[56] == 1
precond 0x010548 unit_hp_pct(TCN001, Character_Player_Test) != 0
precond 0x010970 hp_pct_test(TCN004, 0) != 1
precond 0x010FCC hp_pct_test(TCT006, 0) != 1
precond 0x011254 read_freg(0) < 1200
precond 0x011254 stopwatch_elapsed(0) < 1200
precond 0x011534 global[52] < 14
precond 0x011554 global[60] != 1

View File

@@ -21,7 +21,7 @@ block over its ACTUAL predecessors — not from a linear walk.
builtin103 35
random 26
unit_hp_pct 9
read_freg 9
stopwatch_elapsed 9
builtin7 9
builtin99 1
@@ -41,7 +41,7 @@ block over its ACTUAL predecessors — not from a linear walk.
0x005768 if random(5) == 3 -> 0x552C
0x00577C if random(5) == 4 -> 0x55D4
0x005790 if random(5) == 5 -> 0x567C
0x005888 if read_freg(0) <= 210 -> 0x6028
0x005888 if stopwatch_elapsed(0) <= 210 -> 0x6028
0x0058DC if hp_pct_test(ADT102, 0) != 1 -> 0x6028
0x005930 if hp_pct_test(ADT107, 0) != 1 -> 0x6028
0x005984 if hp_pct_test(ADT113, 0) != 1 -> 0x6028
@@ -57,7 +57,7 @@ block over its ACTUAL predecessors — not from a linear walk.
0x005E30 if hp_pct_test(ADN112, 0) != 1 -> 0x5F98
0x005E84 if hp_pct_test(ADN114, 0) != 1 -> 0x5F98
0x005ED8 if hp_pct_test(ADN115, 0) != 1 -> 0x5F98
0x006070 if read_freg(0) < 1200 -> 0x6278
0x006070 if stopwatch_elapsed(0) < 1200 -> 0x6278
0x0062C0 if unit_state(ADS151) != 2 -> 0x65A0
0x0062F8 if builtin105(ADS151) != 1 -> 0x6594
0x006330 if unit_alive(TCS151) != 1 -> 0x6594
@@ -300,7 +300,7 @@ block over its ACTUAL predecessors — not from a linear walk.
0x010BF8 if unit_state(ADS151) != 1 -> 0x10C64
0x010C50 if unit_state(TCS151) == 1 -> 0x10D24
0x010D7C if dist_lt(TCN001, ADS151, 4000) != 1 -> 0x10EA8
0x010EF0 if read_freg(8) <= 60 -> 0x11064
0x010EF0 if stopwatch_elapsed(8) <= 60 -> 0x11064
0x011094 if builtin103() != 0 -> 0x110B4
0x0110F8 if unit_state(TCS151) == 1 -> 0x11184
0x0111C4 if hp_pct_test(ADS151, 0) != 1 -> 0x112F0
@@ -476,7 +476,7 @@ block over its ACTUAL predecessors — not from a linear walk.
0x0195A8 if random(3) == 3 -> 0x194BC
0x019698 if hp_pct_test(TCT206, 0) != 1 -> 0x1994C
0x0199C8 if builtin7(TCT206, 1, Route_TCT206_p2S, 4294967295, 500) == 1 -> 0x19A38
0x019A24 if read_freg(0) <= 600 -> 0x19A44
0x019A24 if stopwatch_elapsed(0) <= 600 -> 0x19A44
0x019A8C if <unknown: no static entry> <= 240 -> 0x1A1E4
0x019AE0 if hp_pct_test(ADN201, 0) != 1 -> 0x1A1E4
0x019B34 if hp_pct_test(ADN202, 0) != 1 -> 0x1A1E4
@@ -519,7 +519,7 @@ block over its ACTUAL predecessors — not from a linear walk.
0x01A924 if hp_pct_test(TCT206, 89.9) != 0 -> 0x1AA38
0x01AA38 if global[104] != 0 -> 0x1AAEC
0x01AAF8 if global[4] == 0 -> 0x1ABCC
0x01AB54 if read_freg(global[4]) >= 5 -> 0x1ABCC
0x01AB54 if stopwatch_elapsed(global[4]) >= 5 -> 0x1ABCC
0x01AC98 if unit_alive(ADN201) != 1 -> 0x1AD68
0x01AD04 if dist_lt(TCT206, ADN201, 15000) != 1 -> 0x1AD68
0x01AD8C if unit_alive(ADN202) != 1 -> 0x1AE5C
@@ -746,7 +746,7 @@ block over its ACTUAL predecessors — not from a linear walk.
0x023E40 if unit_state(ADS251) != 1 -> 0x23EAC
0x023E98 if unit_state(TCS251) == 1 -> 0x23F6C
0x023FC4 if dist_lt(TCN001, ADS251, 4000) != 1 -> 0x2402C
0x024074 if read_freg(8) <= 60 -> 0x241E8
0x024074 if stopwatch_elapsed(8) <= 60 -> 0x241E8
0x024230 if unit_state(TCS251) == 1 -> 0x24328
0x024368 if hp_pct_test(ADS251, 0) != 1 -> 0x243F4
0x0243F8 if global[20] != 0 -> 0x24494
@@ -786,7 +786,7 @@ block over its ACTUAL predecessors — not from a linear walk.
0x02BF04 if random(5) == 4 -> 0x2BD5C
0x02BF18 if random(5) == 5 -> 0x2BE04
0x02BFC8 if global[112] < 4 -> 0x2C1F8
0x02C240 if read_freg(0) <= 300 -> 0x2CF8C
0x02C240 if stopwatch_elapsed(0) <= 300 -> 0x2CF8C
0x02C294 if hp_pct_test(ADT301, 0) != 1 -> 0x2CF8C
0x02C2E8 if hp_pct_test(ADT302, 0) != 1 -> 0x2CF8C
0x02C33C if hp_pct_test(ADT303, 0) != 1 -> 0x2CF8C
@@ -814,10 +814,10 @@ block over its ACTUAL predecessors — not from a linear walk.
0x02CB04 if hp_pct_test(ADS351, 0) != 1 -> 0x2CC0C
0x02CC0C if global[112] != 0 -> 0x2CD1C
0x02CDC8 if global[4] == 0 -> 0x2CE9C
0x02CE24 if read_freg(global[4]) >= 5 -> 0x2CE9C
0x02CE24 if stopwatch_elapsed(global[4]) >= 5 -> 0x2CE9C
0x02CE9C if global[112] != 0 -> 0x2CEFC
0x02CEDC if builtin99() == 0 -> 0x2CEFC
0x02CFD4 if read_freg(0) < 1200 -> 0x2D1F4
0x02CFD4 if stopwatch_elapsed(0) < 1200 -> 0x2D1F4
0x02D238 if hp_pct_test(ADS351, 0) != 1 -> 0x2D2F4
0x02D270 if builtin105(ADS351) != 1 -> 0x2D2F4
0x02DF64 if hp_pct_test(ADT301, 0) != 1 -> 0x2DFA8

View File

@@ -177,7 +177,7 @@ phase code bases: 0xe4 0x14aa8 0x24b4c
## phase 2 — builtin 6 (END_PHASE) at 0x1AC44
01AB74: 02030C00 set.i len=12 k=02,03 00000000 00000000 local[0] = special[0]
01AB80: 00000C13 call len=12 k=00,00 00000009 000002A1 read_freg
01AB80: 00000C13 call len=12 k=00,00 00000009 000002A1 stopwatch_elapsed
01AB8C: 02020C01 set.f len=12 k=02,02 00000001 00000000 special[1] = special[0]
01AB98: 01021001 set.f len=16 k=01,02 00000000 40140000 00000000 special[0] = imm 5
01ABA8: 02020C05 cmp.b len=12 k=02,02 00000000 00000001

View File

@@ -26,7 +26,7 @@ fired by time passing, which is not a property of the graph.
## phase 1 — END_PHASE at 0x006010: 7 necessary condition(s)
precond 0x004D70 unit_hp_pct(TCN001, Character_Player_Test) != 0
precond 0x00523C hp_pct_test(TCN004, 0) != 1
precond 0x005888 read_freg(0) <= 210
precond 0x005888 stopwatch_elapsed(0) <= 210
precond 0x0058DC hp_pct_test(ADT102, 0) != 1
precond 0x005930 hp_pct_test(ADT107, 0) != 1
precond 0x005984 hp_pct_test(ADT113, 0) != 1
@@ -35,8 +35,8 @@ fired by time passing, which is not a property of the graph.
## phase 1 — END_PHASE at 0x006260: 4 necessary condition(s)
precond 0x004D70 unit_hp_pct(TCN001, Character_Player_Test) != 0
precond 0x00523C hp_pct_test(TCN004, 0) != 1
precond 0x005888 read_freg(0) <= 210
precond 0x006070 read_freg(0) < 1200
precond 0x005888 stopwatch_elapsed(0) <= 210
precond 0x006070 stopwatch_elapsed(0) < 1200
## phase 1 — FORCE_END_PHASE at 0x01482C: 0 necessary condition(s)
@@ -79,7 +79,7 @@ fired by time passing, which is not a property of the graph.
precond 0x02B4F8 unit_hp_pct(TCN001, Character_Player_Test) != 0
precond 0x02B9C4 hp_pct_test(TCN004, 0) != 1
precond 0x02BFC8 global[112] < 4
precond 0x02C240 read_freg(0) <= 300
precond 0x02C240 stopwatch_elapsed(0) <= 300
precond 0x02C294 hp_pct_test(ADT301, 0) != 1
precond 0x02C2E8 hp_pct_test(ADT302, 0) != 1
precond 0x02C33C hp_pct_test(ADT303, 0) != 1
@@ -97,7 +97,7 @@ fired by time passing, which is not a property of the graph.
precond 0x02B4F8 unit_hp_pct(TCN001, Character_Player_Test) != 0
precond 0x02B9C4 hp_pct_test(TCN004, 0) != 1
precond 0x02BFC8 global[112] < 4
precond 0x02C240 read_freg(0) <= 300
precond 0x02CFD4 read_freg(0) < 1200
precond 0x02C240 stopwatch_elapsed(0) <= 300
precond 0x02CFD4 stopwatch_elapsed(0) < 1200
## phase 3 — FORCE_END_PHASE at 0x034A10: 0 necessary condition(s)

View File

@@ -103,12 +103,12 @@ Generated by `tools/re-capture/isl_report.py calls`.
3 move_order 20
124 timer_stop 15
120 wait_cmds_drained 14
8 set_flag 12
8 stopwatch_start 12
100 reset_phase_threads 12
93 clear_flag 12
93 stopwatch_stop 12
59 fade_sound 12
6 END_PHASE 12
9 read_freg 12
9 stopwatch_elapsed 12
95 unit_hp_pct 9
115 named_event 9
48 squadron_escort 8
@@ -185,7 +185,7 @@ resync from 0x5058
00528C: 00000C13 call len=12 k=00,00 0000007C 00000256 timer_stop
005298: 01020C00 set.i len=12 k=01,02 00000000 FFFFFFFF special[0] = imm 0xFFFFFFFF
0052A4: 02030C00 set.i len=12 k=02,03 00000000 00000000 local[0] = special[0]
0052B0: 00000C13 call len=12 k=00,00 0000005D 00000257 clear_flag(0xFFFFFFFF)
0052B0: 00000C13 call len=12 k=00,00 0000005D 00000257 stopwatch_stop(0xFFFFFFFF)
0052BC: 00000C13 call len=12 k=00,00 00000076 00000258 builtin118
0052C8: 00000C13 call len=12 k=00,00 00000027 0000025A MARK_LAST_PHASE
0052D4: 00000C13 call len=12 k=00,00 00000052 0000025B banner_mission_failed

View File

@@ -1,12 +1,14 @@
# The 32 per-phase stopwatches -- set_flag / read_freg / clear_flag vs the timeline
# The 32 per-phase stopwatches -- stopwatch_start / _elapsed / _stop vs the timeline
Written by hand from tools/re-capture/isl.py; see docs/re/structures/isl-timers.md.
(Built-ins 8 / 9 / 93; the corpus called them set_flag / read_freg / clear_flag
until the reading below showed they are a stopwatch bank.)
Claim under test: `[phase+88][i]` only advances while `[phase+120][i] == 1`,
and built-in 8 is the only thing that sets that flag. So every timeline
entry's `kind` must be an index its own phase starts, or the entry is dead.
file phase set_flag(i) started read_freg(i) timeline kinds
file phase stopwatch_start(i) stopwatch_elapsed(i) timeline kinds
Stage01.ssb 1 [0, 5, 14] [0] {0: 27, 5: 3}
Stage01.ssb 2 [0, 5, 14] [0] {0: 24, 5: 3}
Stage02.ssb 1 [0, 5, 8] [0, 8] {0: 21, 5: 4}
@@ -54,8 +56,8 @@ Stage29.ssb 1 [0, 5] [0] {
timeline entries whose kind is started in the same phase : 675 / 675 = 100.0%
entry-weighted control (a random index in 0..31) : 11.2%
read_freg indices started in the same phase : 82 yes / 1 no ['Stage06.ssb ph1 read_freg(15)']
stopwatch_elapsed indices started in the same phase : 82 yes / 1 no ['Stage06.ssb ph1 stopwatch_elapsed(15)']
set_flag argument histogram: {0: 44, 1: 10, 2: 1, 4: 2, 5: 38, 6: 2, 7: 2, 8: 5, 9: 2, 10: 4, 11: 2, 12: 1, 13: 1, 14: 21, 15: 24, 16: 1, 17: 3, 18: 3, 19: 2, 20: 2, 21: 2}
read_freg argument histogram: {0: 105, 1: 13, 2: 2, 4: 1, 6: 2, 7: 2, 8: 5, 9: 2, 10: 3, 11: 2, 12: 3, 13: 1, 14: 5, 15: 28, 16: 1, 17: 3, 18: 3, 19: 2, 20: 2, 21: 2, None: 31}
clear_flag argument histogram: {-1: 133}
stopwatch_start argument histogram: {0: 44, 1: 10, 2: 1, 4: 2, 5: 38, 6: 2, 7: 2, 8: 5, 9: 2, 10: 4, 11: 2, 12: 1, 13: 1, 14: 21, 15: 24, 16: 1, 17: 3, 18: 3, 19: 2, 20: 2, 21: 2}
stopwatch_elapsed argument histogram: {0: 105, 1: 13, 2: 2, 4: 1, 6: 2, 7: 2, 8: 5, 9: 2, 10: 3, 11: 2, 12: 3, 13: 1, 14: 5, 15: 28, 16: 1, 17: 3, 18: 3, 19: 2, 20: 2, 21: 2, None: 31}
stopwatch_stop argument histogram: {-1: 133}