Little Big Adventure 2 (aka Twinsen's Odyssey) is the sequel to Little Big Adventure (aka Relentless: Twinsen's Adventure) in 1997.
This repository is the community fork of the classic source release. We maintain the project with preservation in mind while improving portability and long-term maintainability.
The original LBA2 engine source is the lba2-classic codebase: it is mostly assembly, with C++ for game logic, and is the canonical historical release. lba2-classic-community is a community fork for evolving and modernizing the code: ports of assembly to C++, SDL3, libsmacker, and other updates. The goal is to preserve the history and culture of the original while making the codebase easier to build and extend. See ASM_TO_CPP_REFERENCE.md for which modules have been ported from ASM to C++ in this fork.
For a history of project changes, please see the CHANGELOG.md.
- CMake 3.23+
- Ninja (for
make buildand presets) - A C/C++ compiler with C++98 support (GCC, Clang)
- SDL3 (shared library)
- GNU Make — only required for the
makeshortcuts; plain CMake works without it - Optional: UASM — only required for
ENABLE_ASM=ONworkflows
On macOS, install with brew install ninja sdl3.
makeormake help— lists convenience targets (build,run,clean,test, …).make build— configuresbuild/(Ninja, Debug) and compileslba2. Or plain CMake:cmake -B build && cmake --build build.- Retail game data are not in this repo. You need a directory that contains
lba2.hqr. How you point the engine at it is your choice:export LBA2_GAME_DIR=/path,./data/(gitignored),--game-dir, or bounded automatic discovery — see docs/GAME_DATA.md. Nothing is "special-cased" except that marker file. make runor./scripts/dev/build-and-run.sh— build if needed, then run.make runsetsLBA2_GAME_DIRautomatically if./dataor../LBA2containslba2.hqr; otherwise pass--game-dir /path/to/classic/installto the binary.make test— host-only tests (path resolution, parsers, ABI bounds, version checks); no retail files or Docker required.
Windows: Use MSYS2 (recommended; see docs/WINDOWS.md). Discovery and the game work the same (LBA2_GAME_DIR, --game-dir, paths with \ or /). The root Makefile and scripts/dev/*.sh need a Unix-like shell (MSYS2 UCRT64, Git Bash, or WSL); alternatively run cmake and build/SOURCES/lba2.exe from cmd.exe / PowerShell and set the env var with set LBA2_GAME_DIR=....
For platform-specific builds, use the presets in CMakePresets.json (all use the Ninja generator, so ninja must be on PATH):
- Linux:
cmake --preset linux && cmake --build --preset linux - macOS:
cmake --preset macos_arm64 && cmake --build --preset macos_arm64(ormacos_x86_64) - Windows:
cmake --preset windows_ucrt64 && cmake --build --preset windows_ucrt64— see docs/WINDOWS.md - Cross-compile Windows from Linux:
cmake --preset cross_linux2win && cmake --build --preset cross_linux2win. To skip the preset, use the toolchain file directly:cmake -B build -DCMAKE_TOOLCHAIN_FILE=cmake/mingw-w64-i686.cmake.
| Option | Values | Default | Description |
|---|---|---|---|
SOUND_BACKEND |
null, miles, sdl |
sdl |
Sound backend. Use sdl for audio via SDL3. miles requires the proprietary Miles Sound System SDK. See docs/AUDIO.md. |
MVIDEO_BACKEND |
null, smacker |
smacker |
Motion video backend. Use smacker for FMV playback via the bundled open-source libsmacker. |
DEBUG_TOOLS |
ON, OFF |
OFF |
Enable original Adeline developer debug tools: overlay, FPS counter, screenshots, collision visualization, benchmarks, cheat codes, bug save/load, command-line scene selection. See docs/DEBUG.md. |
LBA2_BUILD_TESTS |
ON, OFF |
OFF |
Build CTest targets (ASM equivalence + host tests such as test_res_discovery). |
LBA2_BUILD_ASM_EQUIV_TESTS |
ON, OFF |
ON |
ASM↔CPP equivalence suite (needs objcopy). Set OFF for host-only tests (e.g. macOS CI, make test). |
Minimal build (no audio/video): -DSOUND_BACKEND=null -DMVIDEO_BACKEND=null. When MVIDEO_BACKEND=smacker, video audio routes through the active sound backend (SDL: real audio; NULL/MILES: silent). See LIB386/SMACKER/README.md and LIB386/AIL/MILES/README.md for details on the proprietary SDKs and their open-source replacements.
This source port includes a Quake-style drop-down debug console. It is always available (no build flag), designed to be minimally invasive — normal gameplay is unchanged unless you open and use it. See docs/CONSOLE.md for commands, usage, and integration details.
lba2-classic-community/
├── CMakeLists.txt # Root build configuration
├── CMakePresets.json # Cross-platform preset builds (linux/macos/windows/...)
├── Makefile # Convenience targets (build/run/test/format)
├── cmake/ # Toolchains and CMake helpers
├── scripts/ # Dev and CI helper scripts
├── SOURCES/ # Main game logic and app entrypoints
│ ├── CONSOLE/ # Always-on debug console module (core + state)
│ ├── 3DEXT/ # 3D extensions (terrain, sky, rain, decor)
│ ├── CONFIG/ # Input/config UI and bindings
│ └── *.CPP, *.H, *.ASM # Gameplay systems (AI, physics, save/load, etc.)
├── LIB386/ # Engine libraries
│ ├── 3D/ # Projection, rotation, matrices
│ ├── AIL/ # Audio abstraction (SDL/Miles/null)
│ ├── ANIM/ # Animation system
│ ├── OBJECT/ # 3D object rendering
│ ├── pol_work/ # Polygon fillers/rasterization
│ ├── SVGA/ # Text/sprite/dirty-box rendering paths
│ ├── SYSTEM/ # Platform/system/input/timer abstractions
│ ├── H/ # Shared legacy headers/types
│ └── libsmacker/ # Open-source Smacker decoder (LGPL 2.1)
├── tests/ # Host tests + ASM↔CPP equivalence test wiring
├── docs/ # Project documentation index and subsystem docs
└── run_tests_docker.sh # Docker wrapper for ASM↔CPP test workflows
Engine reference (terms, lifecycles, scene index): GLOSSARY, LIFECYCLES, SCENES.
Build, debug, preservation, and porting docs are in docs/.
This codebase is a window into 1990s game development at Adeline Software International in Lyon, France. Beyond the technical content, the source files contain original developer artifacts worth exploring. The ASCII art and French comments documented below are from the original Adeline / lba2-classic codebase (same files or content preserved when porting ASM to C++ in this fork).
- ASCII art banners -- The developers decorated their source files with elaborate text banners in two distinct styles. See ASCII_ART.md for a full catalog.
- French comments -- The code is written with French comments throughout, many of which are informal, humorous, or expressive in ways that reflect the personality of the team. See FRENCH_COMMENTS.md for a curated selection with English translations.
This source code is licensed under the GNU General Public License.
Please note this license only applies to Little Big Adventure 2 engine source code. Little Big Adventure 2 game assets (art, models, textures, audio, etc.) are not open-source and therefore aren't redistributable.
Read our Contribution Guidelines.
- Official Website: https://twinsenslittlebigadventure.com/
- Discord: https://discord.gg/jsTPWYXHsh
- Docs: https://lba-classic-doc.readthedocs.io/
- Direction: Frédérick Raynal
- Programmers: Sébastien Viannay / Laurent Salmeron / Cédric Bermond / Frantz Cournil / Marc Bureau du Colombier
- 3D Artists & Animations: Paul-Henri Michaud / Arnaud Lhomme
- Artists: Yaeël Barroz, Sabine Morlat, Didier Quentin
- Story & Design: Frédérick Raynal / Didier Chanfray / Yaël Barroz / Laurent Salmeron / Marc Albinet
- Dialogs: Marc Albinet
- Story coding: Frantz Cournil / Lionel Chaze / Pascal Dubois
- Video Sequences: Frédéric Taquet / Benoît Boucher / Ludovic Rubin / Merlin Pardot
- Music & Sound FX: Philippe Vachey
- Testing: Bruno Marion / Thomas Ferraz / Alexis Madinier / Christopher Horwood / Bertrand Fillardet
- Quality Control: Emmanuel Oualid
Use the credits command in the console to see the full original credits.
The intellectual property is currently owned by [2.21]. Copyright [2.21] Originally developed by Adeline Software International in 1994