Ambermoon.net and my love of the Amiga game Ambermoon - Article dev remake special by Pyrdacor

Some people asked about my reasons and background. So I started to write a bit of the story and process of developing this remake. It is not complete but should give a little bit of insight. About the "How" and the "Why" I have to tell a lot. Unfortunately my time is very limited to document all this. Some things about the "How" are indirectly documented inside some "Issues" of the github issue tracker. Especially here, here and here

The motivation behind this project is easy. I got the Amiga and Ambermoon as a child. It was my first RPG ever and what should I say. I loved it and was totally fascinated by the huge world and its atmosphere. I started to write walkthroughs, books and even planned a sequel ages ago (I guess my earliest plans for a sequel are at least 15 years old if not much older).

So Ambermoon was always a part of my life and I always wished to create a game like it. What kept me away from porting it to PC was the deep belief, that it is just not possible. I didn't have any source code, I didn't know anything about Amiga programming and architecture and I knew that recreating a whole game is too much of work for one person.

But a few years ago I stumbled on a port of The Settlers by a swedish guy called Jon Lund Steffensen called freeserf (http://jonls.dk/freeserf). The Settlers was another game which fascinated me as a child and I also wanted to create such a game. :D So seeing this project I realized that it is possible somehow. I invested most of my free time into a port of freeserf from C++ to C#. I know, a bit unconventional, but I liked C# very much at that point and I can do stuff very fast with it. Another reason for the port was, that freeserf missed the AI component. 

And I wasn't into C++ anymore at that time (even though I did C++ for several years since I was 14) and didn't want to develop the AI in C++. So I ported to C# in a short amount of time (it was kind of a fulltime job, and I guess I managed to do my real 40h job as a sideline for months without someone noticing). Finally I could implement the AI and I even started to implement a multiplayer mode. I mean a real one! Not a split screen. So you can play The Settlers in a multiplayer game via LAN or Internet. It is not finished until today because of ... you know ... Ambermoon. :)

At that time I still considered Ambermoon to be too hard to port. And then (as I still was a fan and read much about Ambermoon on fansites like the one from Alex) I stumbled onto an article which talked about the data driven development of Ambermoon. It was written by Jurie Horneman :).

I was extremely interested. Data driven means that lots of the game logic, which is normally implemented in code, is represented by pure data. I also found that Karsten Köper came up with this idea at the age of 17? I immediately became a fan of him. And a fan of data driven development. I even started writing down ideas about a new data driven programming language. :D Those damn Thalion influencers. ;)

I knew I was pretty good at analyzing data and making sense out of it. So I searched the web for resources of Ambermoon. I found the AmberWorlds project by Oliver Gantert and slothsoft by Daniel Schulz which both decoded parts of the data or even provided tools. The projects seemed rather dead. And I found an Ambermoon project on gitlab by Nico Bendlin which also provided valuable resources. It became a direct resource for my research. Especially his text lists eased looking stuff up, finding map IDs etc. I wanted to preserve the efforts of all the projects and contributors and extend the game data decoding.

So I thought, maybe I can decode some data as well. And so I did. Quiet successful imo. I started to create a map loader and displayed my first map. Luckily I could reuse great parts of my freeserf.net engine (which I implemented from scratch before).

It took not too long until I could render all 2D maps of Ambermoon. The visual parts of 2D maps were already decoded to a great extend before I started and displaying tiles with my engine wasn't that hard anymore. Then I decoded more and more stuff like map characters, map events, the UI layout and all kind of graphics. Some through testing and looking which bytes change and some through just looking at bytes and make sense out of it. 

For example when you see some bytes in character data you can compare the characters and try to guess what it could be. Then you change the byte and see what happens in the Amiga version to be sure. I continued this process and so finally I could implement all features and decode all game data. There is not much left which is not yet decoded. And if so, those bits and bytes mostly are unused by Ambermoon (maybe Amberstar used some of them, as they share some parts of the formats).

One of the hardest part were the 3D maps. It took me quiet awhile but finally I also managed to decode the whole 3D map data, skies, lighting, 3D monsters and objects, move paths and so on. Back then there was no information of the lab data (labyrinth data) which basically stores all data for the 3D environment. Not even the textures were decoded or extracted. I am very proud of that part as it was pretty hard and I did it nearly without any reverse engineering but just by wrapping my head around bits and bytes and playing with ideas.

Ah yeah speaking of reverse engineering. I never saw m68k before. I have a book about x86 Assembler in my bookshelf but that's it. Luckily a guy called kermitfrog joined the project on github and offered some help. He managed to setup a debugger and was in general very good in finding code locations. He analyzed some things for me, that were not clear and also pointed me in the right directions. With my pieces of knowledge about assembler I finally also started reverse engineering. Again I could make good sense out of code fragments and found many things. Sometimes it was also guessing and assuming but in the end all dots were connected. Together we found many things (even original bugs nobody found before) and could correct the game mechanics so that it really behaves like in the original. There are hundreds of tiny aspects we adjusted through reverse engineering. There is a huge thread about it on GitHub if you are interested (link).

So here we are now. Ambermoon.net is released and beside some minor bugs it is quiet stable and runs on multiple platforms. I always was a fan of open source and cross platform development. It isn't always easy but I deeply think that the world is there to share ideas, resources and joy. :)

With Ambermoon.net I fulfilled a dream of mine, which I never really thought to come true. And there is more. My knowledge about Ambermoon has grown a lot. So I feel to be capable of creating mods and even a sequel now. Maybe I can even be a full-time game developer some time in the future. That would be awesome.

Links :1) Amiga Build (Github) 2) Ambermoon.net (Scroll down for Linux/Mac/Windows Standalone) 3) Support my Patreon

No comments:

Post a Comment

You do not need an account to sign up or log in... Feel free to post a comment as a guest user. Please dont spam!