I enjoy reverse engineering old games from time to time. Also I happen to be an old ElastoMania fan. Also I had some spare time recently. Three things combined, I decided to make my own attempt in remastering ElastoMania. Now I want to present the result of this work to you.
I understand that these days a lot of people show up only in EOL, so if you find this topic worthy, please spread the word there.
Motoros is an ambitious project that aims to collect all the original ElastoMania versions in one binary, port this unified engine to modern platforms and then, hopefully, merge with an original ElastoMania.
Right now the project is in alpha stage and incorporates only ElastoMania 1.0 alpha. The source code was reverse engineered from the original ElastoMania and then was heavily refactored until it became maintainable. It is an ongoing process, and the code is constantly validated against original binary to prove that it is exactly the same. Once again, the code (therefore, look, feel and, most importantly, the physics) is exactly the same.
You can download Windows, OS X and Linux versions here.
Here is the screenshot of Motoros running on OS X along with two virtual machines, each running its own copy of Motoros:
Full size version here.
FPS is not very high, especially in Windows, but that's two VMs pushing it out of my laptop. Single Motoros instance on native host is easily 200+ fps in windowed mode. Also I didn't bother to optimize the graphics pipeline yet.
Why don’t you join Elma 2 team?
Well, for several reasons. First and most important reason is that I don’t like to be a smartass, but I am. Even from the outside I see some things I don’t like in Elma 2. If I’d join Elma 2 team, it would fall apart, because I’d try to enforce my own way of doing things. And that is no good, because in the end they are making a great project.
Second, we have different goals. The goal of Elma 2 project is to make a new game with old engine. Motoros is an old game that runs on the new systems, nothing more. It is like a service pack to the original game, to make it available on modern platforms.
Also we have different priorities. Elma 2 team focuses on the new features and tries to make it more convenient for hardcore players, while I concentrate on understanding and redesigning the existing code and maintaining the original atmosphere for casual players.
Another difference is that original ElastoMania was meant to be small and quick, so is Motoros. I understand that size doesn’t matter in the modern world, but 800kb binary (plus 5mb of libraries) sadden me when I remember the original 300kb swift. So one of the priorities for Motoros is to have as small footprint as possible.
I understand that right now the project doesn’t look particularly useful for the community of hardcore ElastoMania players. Even more, I can’t promise that Motoros will ever have features that are important for the established way of playing ElastoMania (like online playing), because that’s what Elma 2 is for, and there is no point of making same things twice.
All in all, I don’t see us as competitors. Of course, once I finish porting all the ElastoMania series, and start implementing features, Motoros would become a competitor to Elma 2 (just as if Balazs decides to release new ElastoMania). But it’s long ahead, and I am not very interested in implementing features per se. If by the version 0.6 there won’t be interest neither from the community nor from Balazs, I’d rather concentrate on my other projects.
Concept of Motoros
My vision of remastering games could be expressed with the following phrase: “Don’t remake, but improve, and don’t be a pirate, but share your knowledge”.
In the context of ElastoMania, I also came up with the idea of collecting all the canonical engines in one binary, because it always frustrated me that I can’t play Action SuperCross as easily and lag-free as I can play ElastoMania.
Name Motoros wasn’t invented by me, it is an original name of Action SuperCross alpha version executable, I guess that it means “motor” in Hungarian.
Current version: 0.1
It is the first public alpha version, the port of ElastoMania alpha (also known as LGR DK).
The following features from the original version are missing:
- External levels support;
- Replay loading;
- Sound (in fact it was never there in ElastoMania alpha);
- Saving of state.dat and replays (for obvious reasons);
- Updating from Action SuperCross to ElastoMania and other shareware-specific features.
- To compensate to absence of state.dat, all levels are open for all players;
- FPS counter to track how code changes affect FPS rate;
- Switching to fullscreen (default is windowed mode);
- A demo-feature of drawing interactive polygons inside the game, just to make it obvious that I indeed possess freely modifiable source code and didn’t somehow wrapped original ElastoMania in the new binary to fool everyone (if this assumption made any sense to you). Interactive topology is disabled in multiplayer mode.
- In OS X version it’s impossible to switch from fullscreen back to windowed mode because of SDL bug;
- Escape keystroke in game is propagated to menu, resulting in going one level up from level menu;
- Ingame timer can't be toggled;
- Ingame timer and navigator are not displayed in replays;
- Window icon is missing;
The approximate release dates are as following:
- 0.1 — this release, ElastoMania alpha, experimental Windows, OS X and Linux support.
[15.12.14] 0.2 — ElastoMania 1.0, 1.1, 1.11, 1.11a (registered and shareware versions), external levels enabled, sound enabled.
[12.01.15] 0.3 — ElastoMania 1.11h, 1.2, demo-feature removed, saving enabled, experimental adjustable resolution support.
[02.02.15] 0.4 — Action SuperCross alpha (also known as motoros).
[23.03.15] 0.5 — Action SuperCross 1.0, 1.1 (registered and shareware versions).
[04.05.15] 0.6 — Action SuperCross 1.2, 1.3 (registered and shareware versions).
Legal status and the original author
I am aware that reverse engineering of ElastoMania is prohibited by its EULA. However I ignored it for 2 reasons:
- I consider my case to be fair use;
- ElastoMania EULA doesn’t have much legal force in my country of residence.
Also, from what I heard, Balazs is a great person, and he brought us a lot of pleasure with this game, and apparently keeping game engine in secret is a big deal for him, therefore the reverse engineered source code and any significant portions of code derived from the refactoring process won’t be publicly released under any circumstances unless Balazs gives specific permission.
The source code won’t be privately shared with anyone until I decide to stop working on this project.
Motoros is not the next version of ElastoMania. The binary version of the project must be considered as unofficial patch to the original version, therefore any new features and errors should be attributed to the author of the patch, but all the praise for the original game should go to the original author.
Motoros is provided as-is. You can do whatever you want with it, but don’t sell it or tamper with copyright information. I assume no liability for damages, direct or consequential, from use of Motoros.
Reverse engineering process and code facts
Reverse engineering took roughly 240 hours. Refactoring and porting took roughly 60 hours. I have recovered all the code from ElastoMania except for the editor. I made heavy use of LGR DK and BeOS versions of ElastoMania to make the code as close to the original as possible. Most of the names of the classes were kept. Most of the functions and variables were renamed because I didn’t understand Hungarian names.
There are 64 source code files and 63 header files with total of 482416 bytes in 22860 lines of code.
Tools used: IDA 6.6, Hex-Rays 2.0, Sublime Text 2, Watcom C++ 10.6, XCode 6.1, Microsoft Visual C++ 2010, gcc 4.8, and plenty of home-brewn scripts.
The description of the process is to be released next week on http://oldgames.today/
We are hiring
(Actually we aren’t, but I always wanted to say that phrase)
Mototros is developed as part of Old Games Today project, and it’s not the only game port that we work on. Currently we have 3 ongoing projects, and plenty more in plans. The basic idea is to create community that keeps old games up to date with modern world and hopefully involves original authors in this process.
We always welcome old games fans that want to help us. Currently we are looking for:
- Reverse engineers with adequate understanding of game mechanics, passion for games, coding discipline and ability to keep things private;
- Game developers with adequate understanding of C++, low-level specifics and code optimisation, passion for games, coding discipline and ability to keep things private;
- Site maintainer that is accurate and detailed, can write in English and search things on the internet;
- Graphic designer with basic sense of beauty and passion for 2D graphics.
We have no money, but we can offer plenty of experience and probably some recognition.
Thanks for reading. Have fun with the game. Hope to return with the next version in a month and a half.