Skip to main content

A presentation on implementing save games

I recently gave a private presentation on how to implement save games. This is the blog post based on that. I wrote the presentation pretty quickly, so this is not the best structured blog post ever, but hopefully it's useful to someone.

Should you listen to me?

I don't consider myself an expert on save games, but I have worked on them at various stages in my career.

Amberstar, Ambermoon, and Albion, the first three games I worked on, were big CRPGs. The first two games saved to floppy disk, Albion only saved to hard drive. The logic wasn't very complicated, because these games did not use dynamic data structures. The save game consisted of fixed data structures and simple arrays.

As part of my work on the mission systems in Watch Dogs: Legion I also worked on the save games. I did not work on the save game system itself: that was legacy code. But I did spend a lot of time on the code for saving and loading mission data. My number one worry on Legion was something going wrong with the save games. If you mess up mission save data, you can erase enormous amounts of progress, or create corrupted or stuck save games. This actually happened on Amberstar, and back then I had to explain this directly to players, on the phone.

Quite recently I designed and implemented a save game system from scratch. The game that it's a part of has not been released, so it's hard to say if it would survive the crucible of shipping. But it did work during development, and, most encouragingly, other programmers used it, and said nice things about it.

Assumptions

Here are my assumptions for the rest of this blog post:

  • You've got a decently complicated game, with multiple programmers working on multiple systems over a period of years.
  • You want console support and online support.
  • Your game is multiplayer.
  • Your game is open world.
  • The game supports auto-saving.
  • The whole save game fits in memory.
  • Your engine has some kind of system to serialize and deserialize arbitrary data structures to something saveable. In the rest of this blog post I am going to assume we're using JSON, but it doesn't have to be that.

Read more…

How fingerprinting identified a press leak

Back on the Atari ST and Amiga illegal copies were a big problem. It's impossible to stop, but it was often worth trying to at least make it hard for copies to get cracked and distributed.

For some reason, we suspected press versions might be a source of leaks. So for Ambermoon, I implemented a fingerprinting mechanism. And lo and behold, it helped us identify a leak!

And now that I've released the source code, I can more easily show how I did it.

Read more…

Amberstar and Ambermoon source material released

For some time I had thought all of the source code of Amberstar, Ambermoon, and Albion were lost or inaccessible.

Back then we simply didn't do rigorous backups after finishing games. The shipping data and source code of Ambermoon were on my Amiga 2000, the shipping data and source code of Albion were on my 486 PC, I put both of those on a shelf at Blue Byte, they were moved to the office basement, I quit the company, now they are effectively lost, much to the regret of myself and fans who were interested in working on fan projects and remakes.

I did have some data here and there from the 90s. For instance, I had what looked like the source code of Amberstar, but sadly it was saved in GFA Assembler's proprietary tokenized .IS file format. I was able to find tools that convert GFA Basic's similar format, but nothing for assembly. I started rolling my own but at some point I would have needed a functioning ST emulator with GFA Assembler to generate the token table, and that's when I abandoned the process for a while.

After recording a podcast episode on Ambermoon, I decided to dig into my 90s backups again. And lo and behold: I found things.

Read more…

Interview about Ambermoon on Stay Forever

German retro-gamed podcast Stay Forever interviewed Karsten Köper, Erik Simon, and myself about Ambermoon, as well as its predecessor Amberstar, and Thalion Software in general.

Karsten was the designer of both Amberstar and Ambermoon, I was the main programmer, Erik was project manager and content designer, and he made some of the graphics as well.

This was a particular treat because Karsten and I hadn't spoken since around 2007 or 2008. I couldn't imagine talking about Ambermoon without him. We had a great time reminiscing about the development of Amberstar (which started much earlier than I realized) and then Ambermoon.

Now if only we could contact some more team members for an even bigger oral history!

You can listen to the podcast, in German, here.

Interview about Albion on DOS Game Club

DOS Game Club interviewed both Erik Simon and myself about Albion.

Both Erik and I and have individually spoken about Albion in the past, but this was actually the first time we were both interviewed together. It was a lot of fun! We talked about the whole history of Albion, starting with its links to Amberstar and Ambermoon, at Thalion. You can listen to it here.

DOS Game Club also recorded a podcast about the game itself, which you can listen to here.

Incidentally, another podcast, RMC Retro, heard the interview we did, and mentioned both Thalion roleplaying games and Albion, as well as Pyrdacor's Ambermoon remake (which deserves its own blog post eventually).

Interview on Game Dev Advice Podcast

I first met John Podlasek almost 30 years ago when we both worked at Blue Byte Software: he in the U.S. office, me in Germany. We lost touch a bit over the years, but last year he contacted me and asked me to be interviewed for his Game Dev Advice podcast.

It was a fun interview! I talked about how I got into the industry, and how I almost removed the sex and violence from GTA Vice City that one time. I hope I was also able to give some advice.

Read more…

Which video game character do you want to be?

Back around 1993 I was asked as part of an interview which video game character I wanted to be.

I answered:

"I'd like to be a stone from Tetris, because it is such an accurate yet subtle metaphor for human existence: we fall, rotate frantically to try and fit in with the others, and once there are too much of us we get wiped out."

Not bad, Jurie from 30 years ago.

My Marvel Snap MODOK deck

I've been playing Marvel Snap quite a bit since it came out, and I'm currently using a deck based on MODOK that I'm quite happy with.

This is what that deck currently looks like: My Marvel Snap MODOK deck

It's built to have multiple ways to deliver a ton of power in rounds 5 and 6.

It's not built to react to an opponent. I have a reactive deck, and it's fun, but I tend to lose because I can't generate enough power with it.

I don't win every single game with this and it has its vulnerabilities, but it works well, and I've never quite seen anyone use MODOK this way against me.

Here is a detailed explanation.

Read more…

Revamp! 2023 edition

If you're reading this, I finally finished converting my WordPress blog to a statically generated website, built using Nikola, and hosted on Netlify.

I started this whole process in September 2021, worked on it off and on - mostly off - and now it's good enough to turn the switch, and then tinker with it some more.

I am still trying to figure out what blogging means to me these days, but I do want a personal website I control and can update.

WordPress was fine, but I got a bit tired of having to update it and all of its plugins, and I suspect that during some PHP or WordPress or MySQL update by my hosting provider, it ate all of the special characters.

Now I have to update Nikola and Python and remember the workflow... but hey.

A ton of external links are broken. I did a reasonable amount of work to keep incoming links working, but seeing how many external links no longer worked, I lowered my standards. Still, I expect most links from the last version of the WordPress hosted version of this site to still work. On the back end, I had a big redirect list for even older links, but, well.

All comments have been restored - they were also broken on the WordPress version. However, I have not activated any kind of mechanism for anyone to comment here. Link to my post, or use social media, I guess.

Quick update (2016-2021)

I have been much more active on Twitter than here over the last few years, but I never intentionally decided to abandon my blog. So, in attempt to catch up, here is a list of some of the things I've done in the last 5 years, which I've not previously managed here:

I'll be writing more about each of these over the next few weeks.

The reason I haven't blogged as much: moving to Canada was a big life change, working on Legion was intense (not in the crunch sense, it just took a lot of my energy), and working at a big AAA company sadly meant fewer extracurricular activities, especially public ones.

So why am I blogging now? Because I recently quit Ubisoft to work on something exciting. Announcement soon!