mirror of
https://github.com/jkdansereau/goldeneye-pc-port.git
synced 2026-10-23 15:52:42 +02:00
D243 M-167: camera shake mechanism confirmed live -- first positive result
M-163's live playtest smoothed prop->pos completely (log-verified) but the visible camera shake was unchanged -- the camera's look-at filter doesn't read prop->pos at all. It reads field_488.pos, a separate variable computed from render_pos (the model's own animated-skeleton transform), independent of prop->pos even though both happened to show the same period-4 cycling symptom through a probe that only logged one of them. Retargeted the suppression at field_488.pos's actual write site (bondview2.c:10495-10497, GE_D243X3-gated, freezes it while POSEND is active). User's live playtest: "yep camera shake is gone now" -- the first positive result across the whole D243 investigation. Not a real fix -- GE_D243X3 unconditionally freezes state rather than correcting why the model's skeleton animation cycles in the first place. User also reports Bond's own rendered body still visibly duplicates/glitches, expected since this only freezes the camera-feed copy, not the render_pos draw-path read -- likely the same underlying mechanism observed through a different consumer, not yet isolated. porting-notes.md D11 gets the generalized lesson: confirm the actual consumer reads the field you fixed before spending a live-test cycle on it -- two fields can show the same symptom from one shared root cause while being genuinely independent data paths.
This commit is contained in:
1 parent
e4a870484b
commit
53219c18ae
5 files changed
+50
-3
No files matched your search
@@ -1148,6 +1148,8 @@ see whether something *inside* that function is overwriting it. A
|
||||
visibility gate stopping updates and a competing writer stomping them
|
||||
produce the same visual symptom but need opposite fixes.
|
||||
|
||||
**Update (same D243 investigation, later in the same project's life): fixing the field you found the bug in doesn't mean you've fixed what's rendered — check which field the CONSUMER actually reads.** Having found `chrTick` overwrites `prop->pos`, two live-playtest cycles were spent neutralizing exactly that overwrite (save/restore `prop->pos` around `chrTick`) — it worked completely (confirmed in logs: the field went smooth) and yet the visible symptom (camera shake) was completely unchanged. The reason: the camera's look-at filter doesn't read `prop->pos` at all — it reads `field_488.pos`, a *different* field written from a *different* data path (`render_pos`, the model's animated-skeleton transform, computed independently of `prop->pos` inside the same function). Both fields happened to show the same "period-4 cycling" symptom, which made them look like one bug through a probe that only logged `prop->pos` — they were two independent outputs of the same underlying animation-tick call, and only one of them was what actually got rendered. **The generalizable check, sharpened:** once you've confirmed a field is being overwritten, don't assume that field is what the visible symptom's consumer (a camera filter, a draw call, a collision check) actually reads — trace the consumer's own read site explicitly and confirm it's the same field before spending a live-test cycle suppressing the wrong one. A quick static check (grep the consumer's exact read expression) is far cheaper than a live playtest.
|
||||
|
||||
## E. Process / method notes
|
||||
|
||||
- Investigation loop is: reproduce → env-gated capped probe → root-cause
|
||||
|
||||
Reference in new issue
Block a user