Alexandre LHUILLIER - Software projects, stories & opinions
Version Française
Koalabs
Koalabs is a fusion of 2 companies: Tetraedge, responsible for several games and ports on PocketPC and Nintendo DS, and Home Design 3D’s development team, which was then part of Anuman Interactive.At the time I joined them, Koalabs had already released a number of ports for iPhone and iPad: l’Amerzone, Return to Mysterious Island 2, Dracula 1 to 3 (4 and 5 were still in development), Atlantis 1 to 5...
Since they didn’t have the original games’ source codes, first TetraEdge then Koalabs had to develop its own engine, first used for porting Syberia 1 to the DS, at a time Unity was hardly usable and the cost of licences for other proprietary engines was around millions of €s.
Only sound and graphic sources were available, code or scripts were not, so they had to be completely written, while playing the original game to know how the flow of the game had to be made.
When I arrived, I spent 2 months and a half scripting one of those games, then I joined the team responsible for the engine and the game’s code.
One of my most important endeavours in this team has been to port this engine, first to Android, then to the Nintendo Switch.
The engine and its tools
The Android port
Actually, the engine had been ported to Android for a first time using Marmalade: choosing this multi-platform technology seemed to make sense then, since we did expect to have to also port the games to Windows Phone, which meant making 2 ports at once. Also, Android NDK wasn’t really a thing when this port began. One game using this version of the engine had already been released on Amazon’s Android store.The mysterious bugs we encountered while porting the next games, missing features (Marmalade didn’t even support multithreading on Android at the time) and the license cose dug the grave of that choice. I then decided to port the engine again using Android’s NDK, which had reached version r9d at that time.
Android’s NDK and SDK came with their share of problems, but at least they allowed us to have more control and to know where problems came from.
Some parts of the engine had to be completely re-written for Android:
- Sound management, which used OpenAL on other platforms: at the time, OpenSLES was the only official option for Android
- Input management, including "Back" button usage - which doesn’t exist on Apple devices - inside games
- "Application lifecyle management" which is different on Andoird, and can change from device to device
I was then able to port the first 2 Syberia, Dracula 4 and 5 which were then still being developed, as well as around ten other games.
The build tool
A tool allowing us to build a version of the game had been created for this engine: it allowed us to configure many aspects of the build we needed to make (monolingual or multilingual, which platform, complete app or "Freemium"...). You could choose every build necessary in a list, they were then built one after the other.I had to update this tool so it could build Android versions of the games.
The Nintendo Switch port
It must be noted that the first 2 Syberia had already been ported to the PS3 and the Xbox360 a while ago, so many console-specific issues had already been solved.
Having our own engine for which we knew the sources, as well as the modernity of Ninteodo’s tools for the Switch made this task relatively easy.
Unfortunately I can’t go into more detail, Nintendo’s tools are under severe NDA.
We took this opportunity to fix issues and add missing things from previous versions. I also made it so the game can be controlled in every possible way on the Nintendo Switch:
- Using the touch screen
- Using a pad, either the Pro Pad or using both joy-con(Pad management had already been sorted out for PS3 and Xbox360 versions)
- Holding one joy-con horizontally
- Holding one joy-con like a remote control.
I also had to program a version containing both games, allowing to switch from one game to the other from the main menu, which wasn’t easy because the engine of each game was slightly different and therefore incompatible. I sorted this out by putting in common the most possible code of both engines (making some parts that were different for no real reasons identical on the way), and putting everything else, next to the code specific to each game, inside 2 dynamically linked libraries. The game links the right library each time you switch from one game to another.
This version will be released on November 8th, 2018. Its development has gone on after I left Koalabs: Cloud saves have been added :)
Syberia for Android: https://play.google.com/store/apps/details?id=com.microids.syberia&hl=en
Syberia 2 for Android: https://play.google.com/store/apps/details?id=com.microids.syberia2&hl=en
Syberia for Nintendo Switch: https://www.nintendo.com/games/detail/syberia-switch
Syberia 2 for Nintendo Switch: https://www.nintendo.com/games/detail/syberia-2-switch