@geoffb , I’ll answer your question here.

The short answer is that it used to be challenging, but since I did my massive overhaul back in February to use my XML-based system, it is now fairly easy to add a new game. Supporting Elliot Quest required zero updates to the engine, though I updated it anyway (small unrelated efficency tweak). I think it took about 3 hours to add the game, and most of it was reading all that “baked” JavaScript. I’m pretty familiar with Impact. I would’ve had a release ready by Friday, but I was out of town.

The Ragatron engine now targets 4 games on 2 platforms, for a total of 8 unique games as far as the engine is concerned. There is some mild #ifdef MAC / #ifdef WINDOWS going on. Each iteration represented some small challenges. Considering that Elliot Quest required no engine update, I think I now have the various cases down. These are the parameters that differentiate the games:

<md5>79b0f87d72859c46653550765b886987</md5> <app_nw_is_compressed>1</app_nw_is_compressed> <app_nw_is_hidden>1</app_nw_is_hidden> <app_nw_bytelocation>41409024</app_nw_bytelocation> <target>elliot_quest.exe</target>

On Windows, most games compress and hide their engine code inside the exe (AWL, LB, EQ). GDT does not.

On Mac, most games do not compress app.nw. AWL is the only one that does.

One release of AWL moved JavaScript from index.html to a game.js. Fortunately, I had previously added a “target” flag on the hacks. It was originally so I could hit package.json:

<category>Core Stats</category>
<name>Fast Soul Orb Cooldown</name>

Anyway, the last major way I could streamline my effort is to have an easier way to separate the nw.exe from the app.nw zip file. I haven’t bothered. I have an inefficient script that finds it (looks for a zip header and tests if zip is valid), and my XML has a flag for the byte location. I only run it once, but I sometimes wonder if that barrier prevents others from submitting XML cheats.