import json, sys def val(x): if isinstance(x, dict) and 't' in x: v=x.get('v') if x['t']=='struct' and isinstance(v,dict): return {k:val(w) for k,w in v.items()} return v return x rows=[] for ln in open(sys.argv[1]): r=json.loads(ln) if r.get('hook')!='Game::SVSOSlaversRefuel::UpdateDifficultyTier': continue a={x['n']:val(x) for x in (r.get('args') or [])} s=r.get('side') or {} cd=s.get('cdiff') or {} rows.append((a.get('frame'), a.get('cdiff_in'), a.get('predict_path'), val(cd.get('before')), val(cd.get('after')))) print(f"{len(rows)} UpdateDifficultyTier calls") prev=None for f,ci,pp,b,af in rows: mark = " <== STORE" if (b or {}).get('value') != (af or {}).get('value') else "" if pp!="no_store_unchanged" or mark or f in (1,2,49,50,51,99,100,101): print(f" frame={f:4} cdiff_in={ci:3} {pp:32} {(b or {}).get('value')} -> {(af or {}).get('value')}{mark}") print("frames seen:", rows[0][0], "..", rows[-1][0])