File size: 2,959 Bytes
e454eb7 ed63829 e454eb7 ed63829 e454eb7 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 | # Memory Map - WA.exe 3.8.1
## Segments
| Segment | Start | End | Size | Description |
|---------|------------|------------|----------|----------------------|
| Headers | 0x00400000 | 0x00400FFF | 4 KB | PE headers |
| .text | 0x00401000 | 0x00619FFF | ~2.1 MB | Code |
| .rdata | 0x0061A000 | 0x00693FFF | ~484 KB | Read-only data, vtables |
| .data | 0x00694000 | 0x008C4157 | ~2.2 MB | Read-write globals |
| .rsrc | 0x008C5000 | 0x00954FFF | ~576 KB | Resources |
| .reloc | 0x00955000 | 0x00983FFF | ~188 KB | Relocations |
## Key Statistics
- Total functions identified: 6,859
- Image base: 0x00400000
- 32-bit x86 PE, compiled with MSVC
- Entry point: 0x005D8B6C (CRT startup)
- Export: SetHostingProxyAddressAndPort @ 0x0058E380
## DDGame structure access
The main game state is a 0x98B8-byte (39KB) monolithic object allocated by
`DDGame__Constructor` (0x56E220). It is wrapped by DDGameWrapper (0x56DEF0).
### DDGameWrapper offsets (from wrapper base)
- +0x488 β DDGame pointer (the allocated 0x98B8-byte object)
- +0x4C0 β GfxHandler 0 (vtable 0x66B280)
- +0x4CC β PCLandscape pointer
### DDGame offsets (from DDGame base)
- +0x0024 β Game state pointer
- +0x0028 β Constructor param
- +0x11B0 β Task state machine pointers (5 entries)
- +0x3548 β Display mode
- +0x354C β Display width
- +0x3560 β Display center X
- +0x3564 β Display center Y
- +0x3578 β HWND
- +0x358D β Palette (0x400 bytes)
- +0x3D98 β Gfx object pointers (4 entries)
### WormKit-convention offsets (DWORD-indexed)
These offsets are from the DDGameWrapper base, as used by WormKit mods:
- DDGame+0x08 β TurnGame object
- DDGame+0x488 β Game global state
- DDGame+0x4CC β PC_Landscape
- DDGame+0x510 β Weapon table
- DDGame+0x548 β Weapon panel
## Subsystem vtables
| Address | Object | Size | Notes |
|------------|-----------------|--------|---------------------------|
| 0x66A30C | DDGameWrapper | ~0x500 | Top-level wrapper |
| 0x66B280 | GfxHandler | 0x19C | 2 instances |
| 0x664144 | DisplayGfx | β | |
| 0x66B208 | PCLandscape | 0xB40 | Terrain, water, level |
| 0x66B1DC | LandscapeShader | β | Used by PCLandscape |
| 0x66B268 | WaterEffect | 0xBC | Created by PCLandscape |
| 0x66AF20 | DSSound | ~0xBD0 | DirectSound, 500 channels |
| 0x664118 | TaskStateMachine| β | 5 instances in DDGame |
| 0x6774C0 | OpenGLCPU | 0x48 | Optional, conditional |
## Fixed-point convention
All coordinates, velocities, and physics values use 16.16 fixed-point:
- `0x10000` = 1.0
- `0x20000` = 2.0
- `0xCCCC` β 0.8
- Positions stored as Fixed at CGameTask offsets 0x84 (X) and 0x88 (Y)
- Velocities stored as Fixed at CGameTask offsets 0x90 (X) and 0x94 (Y)
|