- Record RVAs, not absolute runtime VAs.
- Runtime VA = module base + RVA.
- Ghidra, PDB, and in-game logs can disagree on absolute addresses because of ASLR and function chunking.
- Treat EEex-documented layouts as authoritative when they match runtime behavior.
- Treat build-manifest offsets as locally validated runtime facts that may need revalidation per build.
Use CVidTile::RenderTexture, not either CVidCell::RenderTexture overload.
CInfGame::LoadArea- RVA
0x27E710
- RVA
CVidTile::RenderTexture- RVA
0x4247E0
- RVA
LoadArea is the area boundary. It resets scale detection and allows RenderTexture to reclassify the next area.
Current build: BGEE 2.6.6.x
| Symbol | Offset | Kind | Opcode |
|---|---|---|---|
CRes::Demand |
0x36 |
call_rel32 |
0xE8 |
DrawBindTexture |
0x6E |
call_rel32 |
0xE8 |
DrawDisable |
0x7F |
call_rel32 |
0xE8 |
DrawColor |
0x89 |
call_rel32 |
0xE8 |
DrawPushState |
0x91 |
call_rel32 |
0xE8 |
DrawColorTone |
0xB6 |
call_rel32 |
0xE8 |
DrawBegin |
0xC0 |
call_rel32 |
0xE8 |
DrawTexCoord |
0xCD |
call_rel32 |
0xE8 |
DrawVertex |
0xDB |
call_rel32 |
0xE8 |
DrawEnd |
0x17A |
call_rel32 |
0xE8 |
DrawPopState |
0x1AD |
jmp_rel32 |
0xE9 |
The last item matters: DrawPopState is a tail jump, so a resolver that assumes every branch is E8 rel32 is wrong on this build.
Current build manifest values:
CVidTile::pRes = 0x100TIS linear-tiles flag = 0x1DCTIS header tile-dimension field = 0x14
Authoritative from EEex docs where they line up with runtime behavior:
CRes::pDataat+0x40CRes::bLoadedat+0x51CResTileCResTileSetCResPVR
Locally validated for this project/build:
CVidTile::pRes- TIS linear-tiles flag at
+0x1DC CVidTile::RenderTexturecallsite offsets and instruction kindsCResTileSet::hbeing optional at runtime
- TIS header field
+0x14is the authored tile dimension used by the asset pipeline. - Explicit values
0x40,0x80,0x100, and0x200map to1x,2x,4x, and8x; other values are not trusted as scale metadata. CResTileSet::his present for at least the authored 4x path, but can be null for standard tilesets.- When
his null, the 12-byte PVR entry table inpDatacan classify scale from the GCD of bounded, same-pageu/vcoordinate deltas. Raw atlas origins are not dimensions. - The
+0x1DCflag is kept only for the current seam/linear tone handling path, not for deciding upscale factor.