mirror of
https://github.com/jkdansereau/goldeneye-pc-port.git
synced 2026-10-23 15:52:42 +02:00
D307: security cameras read the mount pad as their look-at pad
CCTVRecord's own s32 `pad` (the look-at pad) shadows the inherited ObjectRecord `pad` (mount pad) under IDO. The PC struct renamed it `lookpad` to satisfy GCC, which silently re-pointed setupCctv's reads at the mount pad, so every camera's look vector was its lens offset and the lens faced the wall. Read `lookpad` on PC (#ifdef PORT, A1 class); matches PD's setupCreateCctv (lookatpadnum). User-verified vs 1964, golden gate 3/3. Porting-notes gains the duplicate-member rename trap.
This commit is contained in:
1 parent
40b6994504
commit
00b0006971
5 files changed
+39
-10
No files matched your search
@@ -269,6 +269,10 @@ framing — it never looked like game logic to begin with.
|
||||
Diagnostic tell: a hardware watchpoint on the "poisoned" field sees *no
|
||||
writes at all*.
|
||||
|
||||
### A-dup. Renaming an IDO duplicate member re-points every read of it (D307)
|
||||
|
||||
IDO accepts a struct that redeclares an inherited member name (`inherits ObjectRecord;` then its own `pad`); GCC rejects it, so the port renames one. **The rename changes which field existing code reads**: on N64 the later declaration shadows the inherited one, so `rec->pad` meant the derived record's own field. After renaming it (`lookpad`), unchanged game code silently binds to the inherited field instead. D307: `setupCctv` read the mount pad as the look-at pad and every security camera faced its wall. When a port rename resolves a duplicate, grep every `->name` on that struct type and decide per site which field N64 meant (PD's named-field sources are the tie-breaker).
|
||||
|
||||
## B. 16-byte PC `Gfx` / `Vtx` vs 8-byte N64
|
||||
|
||||
Any buffer reservation, `memcpy` size, slot stride, or pool budget
|
||||
|
||||
Reference in new issue
Block a user