This is another « Another World » Bytecode Interpreter written in C++ and built with SDL, targeting Linux, BSD and WASM with Emscripten.
This is a fork of Fabien Sanglard's project, itself a fork of Gregory Montoir's original implementation, almost completely rewritten with a cleaner architecture and better code readability in mind, primarily for educational purposes.
You can play Another World directly in your browser by clicking here.
In order to build the Linux port, you must install the build toolchain, the SDL2 and the zlib libraries.
Under Debian and derivatives (Ubuntu, Mint, ...):
apt-get install build-essential libsdl2-dev zlib1g-dev
make -f Makefile.linux
or
./build.sh linux
The original game data files must be copied into the share/another-world directory.
./bin/another-world.bin
In order to build the WASM port, You must install the Emscripten toolchain.
make -f Makefile.wasm
or
./build.sh wasm
The original game data files must be copied into the share/another-world directory.
emrun ./bin/another-world.html
Usage: another-world.bin [OPTIONS...]
Options:
-h, --help display this help and exit
--datadir=PATH directory where data files are stored
--dumpdir=PATH directory where dump files are stored
--quiet quiet mode
--debug debug mode
--debug-all debug all subsystems
--debug-engine debug the engine subsystem
--debug-backend debug the backend subsystem
--debug-resources debug the resources subsystem
--debug-video debug the video subsystem
--debug-audio debug the audio subsystem
--debug-mixer debug the mixer subsystem
--debug-sound debug the sound subsystem
--debug-music debug the music subsystem
--debug-input debug the input subsystem
--debug-vm debug the vm subsystem
Up,Down,Left,RightmoveSpacerun or fireTabor<Shift>Tabchange the window size0...9jump at a specific game partcenter a code to jump at a specific levelppause the gamerreset the gamemchange the display mode (standard/CRT/pages/palette/...)vchange the video mode (RGB/RGB-ALT/VGA/EGA/CGA)Escapeexit the game
Eric Chahi's website with some interesting informations:
Grégory Montoir's reimplementation of the game engine:
Fabien Sanglard's fork cleaned up with legibility and readability in mind:
You can also find below some great articles written by Fabien Sanglard about the architecture and ports of Another World:
- Another World Code Review
- The polygons of Another World
- The polygons of Another World: Amiga
- The polygons of Another World: Atari ST
- The polygons of Another World: IBM PC
- The polygons of Another World: Sega Genesis
- The polygons of Another World: SNES
- The polygons of Another World: GBA
- The polygons of Another World: Jaguar
Thanks to:
- Eric Chahi, obviously, who made this fantastic game and released it in 1991.
- Gregory Montoir, who reversed the original virtual machine and wrote a full modern implementation.
- Fabien Sanglard, who improved the reimplementation and wrote blog posts about this clever architecture.
The source code is released under the terms of the GNU General Public License 2.0.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>
The original game data files are protected under the copyrights of their authors and are not distributed with this project.
Please do not distribute the original data game files with this project.
