Skip to content

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

OpenTIG

An open, Linux-native reconstruction of The Impossible Game (PC / Steam).

OpenTIG gameplay

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.


Game assets

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.

  1. Purchase and install The Impossible Game on Steam.
  2. Locate the game’s installation directory on your system (via Steam: right-click the game → ManageBrowse local files).
  3. Copy the entire res folder from that installation into this repository’s res directory, replacing the PUT_FILES_HERE.txt placeholder.

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.


Build

Dependencies (Debian/Ubuntu):

sudo apt install clang pkg-config libsdl2-dev libgl-dev

Compile & run (from this directory so res/ and levels/ resolve):

./build.sh
cp -n settings.ini.example settings.ini   # optional display/audio prefs
./ImpossibleGame

Controls

Action Binding
Jump Right arrow (retail default) · mouse left · gamepad A
Pause / Back Esc
Menus ↑ ↓ · Enter

How the source works

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

Main loop (GameInstance::run)

Retail-style fixed timestep (~16667 µs, max 10 catch-up steps):

  1. Poll input
  2. appUpdate() — one 60 Hz sim tick (menus or LevelController::update)
  3. Render with interpolation alpha accumulator / frameTime so spikes/blocks slide smoothly between ticks (not motion blur — the original lerps sprite positions the same way)

Gameplay (LevelController)

  • World scrolls at +6 units/tick360 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

Rendering (Graphics + ImageAtlas)

  • Logical playfield 800×480 (menus 960×480), letterboxed into the native window / fullscreen drawable — no low-res FBO upscaler
  • Sprites come from retail game*.bin atlases; textures use GL_LINEAR like the EXE
  • Backgrounds are vertical gradient strips (backgroundbackground5)

Audio (SoundBank)

  • 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

Levels

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

Status

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.


Credits & reconstruction notes

Built with Cursor — decompilation, reconstruction, physics/audio/render parity, and packaging were performed by Cursor AI agents.


Notice

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.

About

The Impossible Game

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages