An open, Linux-native reconstruction of The Impossible Game (PC / Steam).
This codebase was decompiled and reconstructed entirely by Cursor AI, working from the retail Windows binary, asset packs, and public reverse-engineering references — not from any leaked or original studio sources.
OpenTIG ships without the proprietary art, audio, and atlas packs from the commercial release. You must supply those files from a legitimate copy of the game.
- Purchase and install The Impossible Game on Steam.
- Locate the game’s installation directory on your system (via Steam: right-click the game → Manage → Browse local files).
- Copy the entire
resfolder from that installation into this repository’sresdirectory, replacing thePUT_FILES_HERE.txtplaceholder.
When finished, OpenTIG/res/ should contain the same atlas binaries, textures, sound effects, and menu music as the Steam build. OpenTIG will not run correctly until those files are present.
Dependencies (Debian/Ubuntu):
sudo apt install clang pkg-config libsdl2-dev libgl-devCompile & run (from this directory so res/ and levels/ resolve):
./build.sh
cp -n settings.ini.example settings.ini # optional display/audio prefs
./ImpossibleGame| Action | Binding |
|---|---|
| Jump | Right arrow (retail default) · mouse left · gamepad A |
| Pause / Back | Esc |
| Menus | ↑ ↓ · Enter |
The port mirrors the retail PC architecture (SDL2 window + OpenGL 2 immediate mode + fixed 60 Hz sim), with Linux replacements behind #else where the EXE used Win32 / OpenAL / Steam.
OpenTIG/
├── src/ All game sources & headers (flat)
│ ├── main.cpp
│ ├── Config.h / Settings.cpp
│ ├── GameInstance.* App shell / menus / main loop
│ ├── LevelController.* Gameplay sim
│ ├── LevelData.* level.dat loader
│ ├── Graphics.* / ImageAtlas.*
│ ├── SoundBank.* / Input.* / Platform.h
│ └── third_party/ stb_image, stb_vorbis, stb_truetype, minimp3
├── res/ Retail assets (copy from Steam; see Game assets)
├── levels/ Five story levels (level.dat + music)
├── screenshot.png Mid-level gameplay capture
├── build.sh
└── settings.ini.example
Retail-style fixed timestep (~16667 µs, max 10 catch-up steps):
- Poll input
appUpdate()— one 60 Hz sim tick (menus orLevelController::update)- Render with interpolation alpha
accumulator / frameTimeso spikes/blocks slide smoothly between ticks (not motion blur — the original lerps sprite positions the same way)
- World scrolls at +6 units/tick → 360 units/s, locked to the music timeline
- Player stays at a fixed screen X; jump / gravity use level-space physics scaled from the EXE
- Blocks, spikes, pits, walk-offs, and staircase Y-shift (
PitYShift) match reverse-engineered behavior
- Logical playfield 800×480 (menus 960×480), letterboxed into the native window / fullscreen drawable — no low-res FBO upscaler
- Sprites come from retail
game*.binatlases; textures use GL_LINEAR like the EXE - Backgrounds are vertical gradient strips (
background…background5)
- Tracks are preloaded and cached at boot (assets are often MP3 labeled
.ogg) - Level start only swaps the active buffer — no hitch decoding on Enter
| Folder | Menu label |
|---|---|
levels/4_fireaura |
Level 1 — Fire Aura |
levels/1_original |
Original Level |
levels/2_chaoz |
Level 2 — Chaoz Fantasy |
levels/3_heaven |
Level 3 — Heaven |
levels/5_phazd |
Level 4 — Phazd |
Playable end-to-end on Linux: main menu, level select, five story levels, music sync, hold-to-jump, practice flags, pause, progress HUD, native resolution / maximize.
Not goals of this tree: Steam achievements, custom level browser, or a byte-identical Windows binary.
- Retail binary analyzed:
ImpossibleGame.exe(SDL2 + OpenGL + OpenAL/ALURE + Steam) - Level format informed by community work (libImpossibleLevel, impossible-game-levels)
Built with Cursor — decompilation, reconstruction, physics/audio/render parity, and packaging were performed by Cursor AI agents.
OpenTIG — reverse-engineered reconstruction.
No copyright is claimed in The Impossible Game or any associated trademarks, music, artwork, or other proprietary materials.
This project is not the original source code and is not affiliated with, endorsed by, or associated with FlukeDude, Grip Games, Fluke Games, Steam, Valve, or any other rights holder.
Retail assets expected under res/ (and level data under levels/) remain the property of their respective owners and must be obtained from a legitimate Steam installation. This project is provided for interoperability, preservation, and educational study of the PC port. If you are a rights holder and want material removed, open an issue and it will be addressed.
