Target Binary: IGI2.exe (x86 PE32, MSVC 6.0, DirectX 7)
Total Functions: 5,507
Status: PARTIAL — 880 functions renamed (16.0% coverage)
Last Verified: 2026年08月27日 via Ghidra MCP
| Chapter | Status | Coverage | Confidence |
|---|---|---|---|
| 01-Executable | PARTIAL — 55+ functions renamed | ~1.0% | HIGH |
| 02-Classes | PARTIAL — 8+ functions + structs | ~0.2% | HIGH |
| 03-Rendering | PARTIAL — 30+ functions renamed | ~0.5% | HIGH |
| 04-AI | PARTIAL — 50+ functions renamed | ~0.9% | HIGH |
| 05-Weapons | PARTIAL — 50+ functions renamed | ~0.9% | HIGH |
| 06-Level-System | PARTIAL — 30+ functions renamed | ~0.5% | HIGH |
| 07-Scripting | PARTIAL — 60+ functions renamed | ~1.1% | HIGH |
| 08-Resources | PARTIAL — 20+ functions renamed | ~0.4% | HIGH |
| 09-Audio | PARTIAL — 50+ functions renamed | ~0.9% | HIGH |
| 10-Menus | PARTIAL — 70+ functions renamed | ~1.3% | HIGH |
| 11-Configuration | PARTIAL — 70+ functions renamed | ~1.3% | HIGH |
| 12-Networking | PARTIAL — 60+ functions renamed | ~1.1% | HIGH |
| 13-Global-Data | PARTIAL — 19 areas mapped | ~0.3% | HIGH |
| cross-reference | STRUCTURAL — cross-references mapped | — | HIGH |
| 14-RE-Notes | PARTIAL — 41 sections documented | — | HIGH |
Total Functions Renamed: 880 (out of 5,507)
Coverage: 16.0% of codebase
Systems Analyzed: 14 of 15
| Metric | Value |
|---|---|
| Total functions | 5,507 |
| Functions renamed | 880 |
| Unnamed (FUN_*) | 4,627 |
| Coverage | 16.0% |
| Documentation files | 21 |
| Custom data types | 10+ (AINode, Entity, EntityStats, WeaponType, StateEntry, HumanAnimController) |
| Function tags | 105 definitions |
| Plate comments | 100+ |
| Import table | 80+ from 11 DLLs |
| Export table | 38 entries |
| Memory segments | 7 |
| Memory size | ~136 MB |
| Code gaps | 2,171 (largest 1,267 bytes) |
| switchD functions | 40+ |
| QTask types | 72+ identified |
| ScriptVM opcodes | 30+ |
| D3D API dispatch | 96 entries |
| AI navigation nodes | 1,024 |
- WinMain_CRTStartup (0x00404280) and System_InitializeAll (0x005D6040) renamed
- 90+ subsystem init pipeline documented
- vftable discovered @ 0x0067c7a8
- Config callback table: 48 entries
- QTask architecture: 0x34-byte types, 0xd slots, 0x200-byte state arrays
- File system: 4 device types, 0x90-byte handler table
- Game event system: 0xc-byte entries, 0x20 max events
- Pooled allocator FUN_0055b820 identified
- DList: 852 xrefs (RemoveNode), 217 xrefs (InsertNode) — most used data structure
- FatalError_Handler: 553 xrefs, 256-byte buffer
- Server logging: 347 xrefs, timestamped, traffic suppression
- ResourceManager: GLOB:/ and LOCA:/ paths
- D3D error converter: 15+ D3DERR_* strings
- Memory validation: power-of-2 alignment, bounds checks
- Memory deallocation: 0xcdcdcdcd MSVC debug fill
- Event dispatcher: indirect callback via DAT_083997e0 + type*0x1ff
- String parser: 2052-byte buffer pipeline
- Config system: case-insensitive __stricmp, 0x44-byte entries
- ScriptVM: custom bytecode interpreter, 30+ opcodes, 0x14-byte parameters
- SymbolTable: runtime registry, 1101 xrefs (Add), 666 xrefs (Remove)
- MemoryPool: reference-counted pool allocator, 214 xrefs
- Mem_Alloc (667 xrefs): alignment, 0xabababab debug fill, DList tracking
- PatternMatcher_Match (65 xrefs): wildcard syntax (,ドル ., ?, *, [], ^, {}, ())
- ScriptInterpreter_Execute: tokenization, .isExists, "this.", // comments, 0x100 depth stack
- ScriptVM_DispatchCallback: callback lookup via DAT_083997e0
- ScriptContext_Cleanup: frees 3 memory blocks + 0x13 frames
- HumanPlayer vtable (0x006aa4a0): 16 entries
- Generic vftable (0x0067c7a8): 16 entries (6 functions + 3 NULL + 3 placeholders + 1 data)
- RTTI: 8 C++ exception types (bad_cast, bad_typeid, exception, logic_error, etc.)
- HumanAnimController discovered: 604 bytes, 147 fields
- Model system: LoadModel, UnloadModel, InitModels, DeinitModels, zModel, VirModel
- Animation system: Stand/Death/Idle/Driving/1stPerson/UpperBody/Main
- File formats: %smodels/%s.res, LOCAL:models/%s.mef
- AIFunction_* API for animation control
- HumanAnimController struct: 604 bytes, 147 fields, offsets: 0x2c(flags), 0x48-0x5c, 0x568-0x574, 0x590
- 8 functions renamed (HumanAnimController, Model, Animation systems)
- System_InitializeAll: 30/95 subsystems identified
- 72 unique subsystems fully identified across 95 init calls
- Batch 1 (1-20): Core systems — Activate/Deactivate, Particle2D, InputPort, MenuItem, ParameterSystem, Level/Static/Dynamic/CameraBase, Serialization, EnumTypes, ScriptVM, MagicObjConfig, LevelScript, SkyTask, PhysicsObjType/Obj/MagicObj
- Batch 2 (21-40): Editor/Terrain/Water — EditorRigidObj, DiscardTerrain/Area, CubeModifier, AnimTask/AnimData, EditRigidObj/BoneObj, TextureModifier, Terrain/TerrainMap/TerrainMaterial, Water/WaterLayer, LODSettings, CutScene, AreaActivate, Vehicle, GlobalLight/Dirlight
- Batch 3 (41-60): Rendering/Audio — LightmapInfo, Lensflare, Origo, NoiseQTask, MoveRigidObj, SmoothQTask, MipMapControl, ScreenGrab, FlatSky/FlatWater, Forest, RunDelayed, SoundSysEdit/SoundDefGroupEdit/SoundDefGraphEdit/SoundDefSoundEdit/SoundDefTriggerOnceEdit/SoundManager
- Batch 4 (61-72): Editor/Debug — EditCamera, LevelTimer, EditorMagicObj, AnimSound, TerrainLightMap, SimpointObj, SplinePathDynCubeObj/GuideQTask, HeightMap, GFXCapsViewer, OLELoader, DebugConsoleTask
reverse-artifacts/
├── README.md ← Master index (this file)
├── STATUS.md ← Progress tracking (Rounds 6-16)
├── INDEX.md ← Cross-reference index
├── 01-executable/ (4 docs)
│ ├── exports.md
│ ├── functions.md
│ ├── imports.md
│ └── pe-structure.md
├── 02-classes/ (2 docs)
│ ├── classes.md (HumanPlayer, HumanSoldier, HumanAnimController)
│ └── structs.md (HumanAnimController 604B, 147 fields)
├── 03-rendering/ (1 doc)
├── 04-ai/ (1 doc)
├── 05-weapons/ (1 doc)
├── 06-level-system/ (1 doc)
├── 07-scripting/ (1 doc)
├── 08-resources/ (1 doc)
├── 09-audio/ (1 doc)
├── 10-menus/ (1 doc)
├── 11-configuration/ (1 doc)
├── 12-networking/ (1 doc)
├── 13-global-data/ (1 doc)
├── 14-reverse-engineering-notes/ (1 doc)
│ └── reverse-engineering-notes.md (41 sections)
├── ghidra-scripts/ (TBD)
└── cross-reference/ (1 doc)
└── CROSS-REFS.md
- Status: UNKNOWN / PARTIAL / STRUCTURAL / FORMATTED
- Confidence: LOW / MEDIUM / HIGH
- [FUN_00xxxxxx] = unnamed function in Ghidra
- Address format: 0x0068ca94
- All technical content (addresses, function names, descriptions) has been verified via Ghidra MCP
- QTask system: 0x34-byte types, 0xd slots, 0x200-byte state arrays
- Memory debug patterns: 0xcdcdcdcd (freed), 0xabababab (allocated)
- ScriptVM param types: 7=Real32, 6=Int32, 3=String, 1=bool8
This project represents partial reverse engineering of the IGI 2 codebase.
Of 5,507 total functions, 880 have been renamed and documented (16.0%).
The remaining 4,627 functions are still labeled as FUN_* in Ghidra.
All documented content is accurate and verified — only the coverage percentage is partial.
- 4,627 functions still need renaming and analysis
- HumanPlayer/Generic vtables need full method mapping
- Entity base class discovery (common patterns search)
- State machine architecture documentation (state IDs to names)
- Struct definitions: HumanPlayer, HumanSoldier, Entity, StateMachine
- 23 remaining System_InitializeAll calls (72/95 identified, 100% of batch)
- Priority: Continued reverse engineering effort
- Complete 07-scripting, 08-resources, 09-audio, 10-menus, 11-configuration, 12-networking sections
- Expand cross-reference documentation
- Add Ghidra script automation tools