forked from Ports/goldeneye-pc-port
- 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).
31 lines
948 B
Python
31 lines
948 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(1)), int(m.group(2)), m.group(3)))
|
|
return out
|
|
|
|
a = seq("scratch/detA.log")
|
|
b = seq("scratch/detB.log")
|
|
print("draws A:", len(a), " B:", len(b))
|
|
|
|
# find first divergence in (t, ra) sequence
|
|
n = min(len(a), len(b))
|
|
first = None
|
|
for i in range(n):
|
|
if a[i][1:] != b[i][1:]:
|
|
first = i
|
|
break
|
|
if first is None:
|
|
print("sequences identical over", n, "draws; length diff only")
|
|
else:
|
|
print("first divergence at draw index", first)
|
|
for j in range(max(0, first - 3), min(n, first + 4)):
|
|
mark = " <==" if j == first else ""
|
|
sa = a[j]; sb = b[j]
|
|
same = "same" if sa[1:] == sb[1:] else "DIFF"
|
|
print(f" [{j}] A: t={sa[1]:4d} ra={sa[2]} B: t={sb[1]:4d} ra={sb[2]} {same}{mark}")
|