Archives For Projects

Introducing the ArgData API

February 22, 2017 — 1 Comment

I have already written about my love for Microprose Formula One Grand Prix, so I won’t go into that again. But today is special, because it marks the 25th anniversary of me purchasing the game for the Amiga. Ah yes, on 22nd February 1992, a gawky twelve-year-old bought a game that would forever change his life! Good times!

To celebrate that momentous occasion, I figured that I should try to release some of the stuff I’m working on related to F1GP, and so here it is: ArgData!

The ArgData API allows you to edit a lot of things related to F1GP, such as car colors, driver performance, player horsepower levels and various settings. The full list of features is available both at ArgData’s own site, and at its GitHub page. What the API does for you is provide a class library with helpful classes and methods for updating all sorts of data, so that you don’t have to know the exact byte location of stuff inside F1GP’s GP.EXE file.

As an example, this is how you would update the player’s (i.e., your) horsepower level, “cheating” to make you faster in a straight line than any of the AI cars 🙂

var exeFile = GpExeFile.At(@"C:\Games\GPRIX\GP.EXE");
var writer = PlayerHorsepowerWriter.For(exeFile);
writer.WritePlayerHorsepower(999);   // default is 716, LOL

Surely you can agree with me that this is easier than knowing that you should write the value 22,610 at byte position 19,848? Well, that’s one example, and I won’t go into too many details here regarding how the API is used, the other sites provide that information. There is even a reference section at the ArgData site. Lots of stuff in the documentation needs improving, but it’s a start… And this is just version 0.14 of the API, there’s still a bit of stuff that can and will be added.

On another note, there may (or may not) be some stuff related to the ArgData project that is worthy of future blog posts, so if I get around to it, maybe I will fill in some details here and there in due time. Build server setup, automated tests, publishing to NuGet, etc.

But until then, go ahead and grab ArgData from NuGet if you feel like it, and start messing around. To get started, you can follow the Quick Start guide and change the top of the color at the top of the sidepods to make the 1991 Jordan go from the one on the left to the one on the right. Fancy stuff, eh?



ArgData’s website:
NuGet package:
GitHub source:


Introducing Patina

July 16, 2013 — Leave a comment

Patina is a tool for finding occurrences of byte data patterns in one file within the data of another.

For instance, let’s say you have two files. The first file contains this:


And the second file contains:


Then a match is found for the values 12345, since the second file contains this sequence.

OK, so let’s consider another scenario. The first file contains:


And the second file contains:


Notice the missing “5” in the second file. So obviously, a match will not be found for the full sequence of “12345”. So what will Patina do? Well, it will find a match for “1234”.

Patina starts with the longest possible sequence from the first file, and looks for it in the second file. So when no match is found for “12345”, the length to look for and the next sequence to check for is “1234”, then “2345”, then “123”, “234”, “345”, etc.

However, since Patina has already found a match for “1234”, it will not also find a match for “123” or “234”. The purpose is to get the longest possible matches and ignore any smaller matches within the found match.

Any matches that are found will just be output to the screen, in a format looking like this:

Data at position 0 (16 bytes) found in 2 place(s).

Of course it’s pretty useless to just get the output to the screen, but I’ll get around to dumping it as XML or JSON eventually.

The source code is on GitHub:

Jaevner is a tool for exporting data from a Lotus Notes calendar and importing it into a Google Calendar. Yes, there are other tools that are available that do this. Yes, it can be done using the export and import features of Lotus Notes and Google Calendar. But I have created this anyway.

It is a simple one-way export/import. Any changes you make on the Google Calendar side will be overwritten the next time the tool is run.

At the core it has two parts: A piece of LotusScript code that runs in Lotus Notes, exporting your calendar data as a CSV file. It also starts the second part of the tool, which is a console application that reads the exported calendar data and inserts it into a Google Calendar of your choice.

The source code can be found on GitHub: