forked from Ports/goldeneye-pc-port
D303: model converter copied 1/4 of each star muzzle flash's vertices
The op-22 DisplayListPrimaryRecord count is the number of star-flash arms; dorottex (and PD's modelRenderNodeStarGunfire) read count*4 vertices. d43_emit/d43_convert sized the array as count vertices, so 3/4 of every muzzle star came from neighbouring sidecar bytes and drew as long spikes (M16 "shooting up"). Size it 16*4*count. Emitter round-trip checks all pass; M16 renders a clean star headless. Also TEMP GE_STARTWEAPON (bondview_r.c) for weapon repros. Re-run tools_pc/d43_emit.py to regenerate data/pcmodels-*.
This commit is contained in:
1 parent
00b0006971
commit
d061ca3d12
7 files changed
+45
-4
No files matched your search
@@ -273,6 +273,10 @@ framing — it never looked like game logic to begin with.
|
||||
|
||||
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).
|
||||
|
||||
### A-cnt. A record's "count" field may not count what the converter copies (D303)
|
||||
|
||||
The offline model converter sizes each record's trailing arrays from its count field. Check what the *runtime consumer* does with that count before trusting its name: GE's op-22 `DisplayListPrimaryRecord.numVertices` is really the number of star-flash ARMS, and `dorottex()` reads `count*4` vertices (PD names it `stargunfire.unk00` and reads `unk00*4`). Sizing by the field name dropped 3/4 of every muzzle star; the missing vertices came from neighbouring sidecar bytes and drew as spikes. For every record type, derive the copied extent from the reading loop, and cross-check PD's typed struct.
|
||||
|
||||
## 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