Files
goldeneye-pc-port/scratch/d318r_seqcmp2.py
T
James Dansereau cc169874ce D318: port-side watchdog + timeline probe for the Facility ai_22 softlock; D320: D318-class sweep of all level AI scripts; gfx_pc GE_D116 printf format fix
- D318 (RESOLVED): as-authored latent race — gas bit mid-monologue derails
  c78's pre-aim hold into a permanent ACT_ATTACK anim pin
  (actor_fire_or_aim_at_target_update moves only the endframe, never
  re-inits; N64-identical). NOT a port bug. Port-side watchdog
  port/src/d318watchdog.c (hooked in lv.c after g_GlobalTimer += ) detects
  the pinned state and re-inits the attack on confirm; GE_D318T=1 timeline
  diagnostic included. random.c gains an env-gated probe (GE_RANDPROBE) for
  bit-exact PRNG verification. Scratch evidence (dis/seqcmp scripts, addr
  dumps, session handoff) parked per house practice.
- D320 (OPEN): swept every level's AI scripts for the same aim-hold ->
  _update shape: 17 lists in 8 levels. Facility ai_19 and Control ai_9 are
  HIGH (non-self-healing, same as ai_22); Depot ai_12 MED-HIGH (objective
  bit gated behind a stop-check). Bond-combat loops likely safe (sustained
  fire stays inside the shoot window by design; exercised every playtest).
  Classified as-authored latent race(s), faithfully reproduced. Probe-verify
  path + generalize-the-watchdog recommendation documented in findings.md.
- gfx_pc.cpp: GE_D116 debug printf used %f for uint32_t args and %d for
  unsigned tile fields; casts added, build warning-free.

Full ntsc-final configure+compile+link PASS. Accuracy sweep write-up in
docs/dev/ACCURACY-AUDIT-2026-09-20.md (PRNG bit-exact; A1/shift32/wrapv/
PORT-hygiene/Gfx-Vtx/osVirtualToPhysical sweeps all clean or already fixed).
2026-09-19 00:38:14 -04:00

28 lines
805 B
Python

import re, sys
def seq(p):
out = []
for line in open(p, encoding="utf8", errors="replace"):
m = re.search(r"n=(\d+) t=(\d+) ra=([0-9a-f]+)", line)
if m:
out.append((int(m.group(2)), m.group(3)))
return out
a = seq(sys.argv[1])
b = seq(sys.argv[2])
print("draws:", len(a), len(b))
n = min(len(a), len(b))
first = None
for i in range(n):
if a[i] != b[i]:
first = i
break
if first is None:
print("FULL SEQUENCE IDENTICAL over", n, "draws (tick, caller)")
else:
print("first divergence at draw index", first)
for j in range(max(0, first - 2), min(n, first + 3)):
tag = "same" if a[j] == b[j] else "DIFF <=="
print(" [%d] A t=%4d ra=%s B t=%4d ra=%s %s"
% (j, a[j][0], a[j][1], b[j][0], b[j][1], tag))