This is a fan project to translate the game Another World (Out of This World, Outer World) into Hebrew.
Another World means a lot to many people. Some of us have been obsessed with this game since it was released in the 1991.
There are plenty of fandom sites regarding Another World, and every fan will tell you a different story of how much this games means to them. I would like to share my story here.
I've been crazy about this game. I remember the first time I jumped on that rope and kicked an alien where it hurts.
In 2003, I discovered the 3DO version of the game. It featured 16-bit scanned background graphics, incredible music and stunning sound effects. I was blown away. I started reverse-engineering that version, in hopes to be releasing this for the Gameboy Advance. Having contributed to KOS ( pronounced Chaos), I figured I'll be able to make the CD version fit in a 16MB cartridge.
I was able to complete the task and was talking about this over IRC. A friend of mine, did 1+1, and told me that there's another person, Cyx, who was working on rewriting the DOS version of AW. I wasted no time and pinged him.
Even back then, Cyx had an amazing record for reverse-engineering games and was part of ScummVM. He taught me new tricks in IDA. I was so thrilled. Reverse-engineering is in itself a game.
Cyx told me that Eric Chahi contacted him and requested that he stopped working on the project. This was because Eric was working on a 15th Anniversary version of the game. I immediately contacted Eric and told him about my port. And like with Cyx, he requested the same from me. I also learned about a 3rd person rewriting the game, Foxy.
While Eric allowed Foxy to keep his release, my version never saw the light of day.
The 3DO version of the game was done without Eric. Same goes for the sequel, Heart of The Alien.
Throughout the years since 2003, the game has been ported to every new platform imaginable, including the PS4 and Switch. Vinyl records of the soundtrack have been released, and two anniversary editions were published: 15th and 20th.
In 2006, as I was making plans for the summer holiday season, I contacted Eric and asked if it's possible to meet him. And so I did. We met for dinner, at sushi place he picked. He was very kind and humble.
I never got to release my gba port, but at least got to have dinner. Unfortunately I was so starstruck that I forgot to ask for a picture 🤦.
Here are some of my projects related to Another World:
- Another World Hebrew (2024)
- Hebrew translation of the introduction of the game. src
- Another World Swiss Army Knife (2024)
- Tool for manipulating resources, such as game code. src
- AWJS (2009)
- An HTML5 implementation of Another World src, chrome experiments
- AWPSP (2006)
- Heart of The Alien Redux (2005)
- Remake of the sequel to Another World website
Throughout the game there are only a few strings. All of them are stored within the main executable file, ANOTHER.EXE
.
There were two ways of translating the game:
- Patch the executable file, change the strings, add new font.
- Patch the animation file, render the new font by reusing shapes available.
I chose the second option, because this allows translations to other languages and portability with other platforms. You are no longer bound by the sizes of the strings within the .exe. Furthermore, just run the patch on a different version, and it should work just fine. Although some versions have additional opcodes that are not covered by Another World Swiss Army Knife.
For the Hebrew font, I chose to use the font that I dumped from my Apple IIe computer. It's a 6x8 font, and it looks great in the game. Any font of any size would work fine.
Here is the entire font from the Apple IIe rom dump:
Alternatively, I could have picked the VGA Hebrew font which would be as symbolic as this one.
Introduction for Another World is split into 3 files: a palette file, a code file, and a shapes file.
2048 resources/0017.pal
9871 resources/0018.txt
65230 resources/0019.shp
So is every level in the game. You can read more about the resources in the game at Fabien's Another World technical document.
Adding each letter of the new font into the shapes file and using the code file to render the text seemed logical. However, with only 305 bytes left within the 64KB limit, I opted for a creative alternative.
Each shape in the shapes file can be rendered with a zoom factor (scale), you can scale down to 1/64 or scale up to x4. I tracked down a simple shape at offset 45296 that when scaled down to 1/64th, it renders a single pixel.
A small TypeScript program processes a YAML file of required translations and patches the code file to render a sprite
for each pixel in the font. For example,
the text "HELLO" would generate up to 6 * (6*8) = 288 calls to the spr
opcode.
Here is a snippet of the code that draws "Good evening professor." (in Hebrew, of course):
draw_good_evening_professor: // "Good evening professor."
spr 45296 291 171 1
spr 45296 292 171 1
spr 45296 294 171 1
spr 45296 295 171 1
spr 45296 292 172 1
spr 45296 295 172 1
spr 45296 293 173 1
spr 45296 295 173 1
spr 45296 293 174 1
spr 45296 295 174 1
spr 45296 293 175 1
spr 45296 294 175 1
spr 45296 291 176 1
spr 45296 292 176 1
spr 45296 293 176 1
spr 45296 284 171 1
spr 45296 285 171 1
spr 45296 286 171 1
spr 45296 287 171 1
Each non-transparent pixel in the font yields an spr
opcode with 1/64 scale. Since this adds many opcodes, the
resulting code file is larger:
46904 resources/0018.txt
Still below 64kb, so we're good 😎
To run the project locally, you will need to install the dependencies:
npm install
Also, for the time being, the script assumes you have awsak
installed globally. Please view the documentation
at Another World Swiss Army Knife for more information.
A single shell script prepares the output disk image. This script is called build-hebrew-patch
. You will
have to place the original files in a directory called disk
.
After executing this shell script, a new directory will be created: patched
. Run ANOTHER.EXE from
this directory using dosbox (or any other emulator) and see the Hebrew translation in action.
- Eric Chahi's technical document of Another World's opcodes link
- Fabien Sanglard's 8-part technical document of Another World link
- Cyx's reverse-engineered Another World on all of its versions link
- Another World on Eric Chahi's website link
This project is licensed under the GPL 3 License - see the LICENSE.md file for details
Introduction title graphics in Hebrew done by the brilliant Niv Baehr github 🙏
You may contact me at gil at megidish dot net.