Project I.G.I Internal is Project to access internal methods of the game by using DLL injection method into the game and calling IGI Natives methods to modify/alter the behaviour of the game.
This was originally intended for research project to understand the game mechanics and how developers worked hard to create them.
So don't use this project to misuse the game's identity and source of original game devs.
- General section.
- DLL File - This project is DLL file rather than standard application.
- DLL Injection - This project needs DLL injection into IGI game.
- Hooking - This project uses Minhook for API calls.
- GTLibc -C/C++ library for interactig with Game.
- Pattern Scanning - This project use pattern memory scanning to check Game/Player is loaded properly.
- Game specific section.
- IGI Graphs Structure - Project IGI 1 Graph structure data.
- IGI 3D Models - Project IGI uses 3D models in form of MEF (Mesh External File).
- IGI Camera View - IGI use game Camera called Viewport to display the game updates.
- Native section.
- Native Invoker - Native invoker is a technology to invoke native methods from Game using their Hash with its Handler.
Use the build_and_reload.bat
batch file for automated building and DLL injection with hot reload capability:
# Debug build with auto-injection
.\build_and_reload.bat Debug x86
# Release build with auto-injection
.\build_and_reload.bat Release x86
Configuration: Update OUTDLL
and INJECTOR
paths in the batch file according to your setup.
Open this project in Visual Studio and build it. Your output will be in Release/Debug folder depending on configuration. You'll find IGI-Internals-Debug.dll
or IGI-Internals-Release.dll
. Use any x86(32-bit) compatible DLL injector or the recommended IGI-Injector.
This DLL seamlessly integrates with IGI's built-in debug functionality while adding powerful enhancement features. See IGIDebug.md for complete documentation on IGI's native debug keys and activation methods.
- ๐ Mission Unlock - Access all missions instantly without progression
- โ๏ธ Weapon Unlock - Unlock complete weapon collection
- ๐ก๏ธ Invincible Mode - Unlimited health and damage immunity
โ๏ธ Fly Mode - Fly through levels with unrestricted movement- ๐๏ธ 3rd Person Mode - Enhanced perspective for better gameplay
- ๐ท Free Camera Controls - Professional camera manipulation
- ๐๏ธ Level Management - Instant level loading and restart functionality
- ๐พ Memory Operations - Real-time game state modification
- ๐ฎ Enhanced Debugging - Native IGI functionality integration
- FiberPool.hpp - IGI-specific task scheduler optimized for IGI (2000) game architecture
- FiberPoolEx.hpp - Generic fiber pool implementation for modern game engines
- Dual-thread system - Separated DLL management from game operations for better performance
IGI (2000) uses a Windows Message-based event loop rather than modern game engine loops:
- Current Implementation:
TextPrintDetour()
hook callsFiberPool::Instance().RunPending()
- Critical Limitation: Only executes when HUD text is being drawn (e.g., weapon names, status messages)
- Problem: When player shows knife or no HUD text is displayed, the scheduler stops running
- Impact: Task execution becomes inconsistent and frame-dependent on UI state
๐ Alternative GameLoop Methods Under Investigation:
- SFX Sound hooks - May provide more consistent per-frame execution
- Render pipeline hooks - Graphics calls that execute every frame
- Input polling hooks - Continuous input processing methods
- Timer-based approaches - Windows timer integration for consistent execution
- More gameplay enhancement modes
- Advanced AI manipulation
- Custom mission scripting
- Enhanced visual effects
๐ Special Recognition: Massive thanks to BlankName for discovering and documenting IGI's debug key system, making this integration possible!
The project could be build for IGI Editor the only thing we need to change is Features.cpp file we have to update with Features file for Editor which could be found here Features_Editor.cpp
The DLL provides the following implemented features accessible via hotkeys during gameplay:
- Ctrl+F1: Random weapon pickup - Equips a random available weapon
- Ctrl+F2: Random FPS setting - Sets game framerate to random value
- Ctrl+F3: Load humanplayer - Loads/reloads the human player character
- Ctrl+F4: Free Camera Mode - Activates free camera (Arrow keys to move, Space/Alt for up/down, Home to exit)
- Ctrl+F5: Show status message - Displays game status information
- Ctrl+F6: Write config - Saves current game configuration
- Home (Debug builds only): Display all available hotkeys in console
You can modify the project by focusing on the Features.cpp file located in the DllMainLoop() method under the MENU_SCREEN_INGAME section. Add your logic for Adding/Removing Buildings/Weapons/A.I etc into the game using the FiberPool task scheduler for thread-safe execution.
TextPrintDetour()
which only executes when HUD text is being rendered. This means task execution may be inconsistent when no UI text is displayed (e.g., when showing knife weapon). Consider this limitation when implementing time-sensitive features.
Lets say you found new hash for Native now how to add them into project and use them. So you have to follow the steps.
- First Add your Hash to Natives.hpp class like this
MY_FIRST_NATIVE = 0x00402F90
- Go to Natives folder and open NativeHelper.hpp file and in any relevant section add its definition.
NATIVE_DECL void MY_FIRST_NATIVE_LOAD() { NATIVE_INVOKE<Void>((Void)HASH::MY_FIRST_NATIVE); }
- Now go to Features.cpp class and use it.
// Native method.
if (GT_HotKeysPressed(VK_CONTROL, VK_F1)) {
MY_FIRST_NATIVE_LOAD();
}
For detailed version history and comprehensive changelog information, see CHANGELOG.md.
Debug Hotkey Improvement:
- ๐ง Hotkey Update: Changed debug hotkey logging from
Space
toHome
key- ๐ฏ Reason: Prevents conflicts with game controls and provides dedicated debug access
- ๐ Scope: Updated in both
Features.cpp
andFeatures_Editor.cpp
- ๐ ๏ธ Function:
LogAllHotkeys()
now triggered by Home key in debug builds
Previous Architecture Updates (v2.6.0):
- ๐งต Dual-Thread Architecture: Major architectural overhaul separating DLL and Game threads
- ๐ Auto-Ejection Technology: Single-keypress DLL unloading with CreateRemoteThread
- ๐ก๏ธ Crash Prevention System: Console control handler and MinHook protection
- โก Optimized Performance: 100Hz responsive hotkey detection (10ms intervals)
- ๐ฏ Thread-Safe Operations: Detached thread architecture with proper cleanup
Technical Achievements:
- โ Zero-Crash DLL Lifecycle: Complete elimination of detachment crashes
- ๐ง Smart Cleanup System: Automatic debug hotkey, console, and MinHook cleanup
- ๐ Performance: 100Hz hotkey responsiveness, instant DLL ejection
- ๐งต Thread Architecture: Separated game thread from DLL management thread
- ๐ฎ Seamless Re-injection: No external ejector needed for development workflow
For comprehensive resource management documentation including Resource operations, MEF Models, Script handling, Camera controls, Memory operations, and Configuration management, see resource_docs.md.
Quick Reference:
- ๐ง Resource Operations: Loading, unloading, and managing game resources
- ๐ฎ MEF Models: 3D model management and manipulation
- ๐ Script Handling: QSC, QAS, and QVM script operations
- ๐ท Camera Controls: Free camera implementation with custom controls
- ๐พ Memory Operations: Memory allocation and player management
- โ๏ธ Configuration: Game and weapon configuration management
View Complete Resource Documentation โ
Original Author: HeavenHM@2022