Jump to content
IGNORED

Cracking Aquarius games. Is it possible?


mfkadhim

Recommended Posts

So I've been playing some of the games I had back in 80s when I had an actually Aquarius computer (Sold it like 25 years ago and I'm regretting it now). Thanks to those who worked hard to develop Aquarius emulators, now I can playing my childhood favorite games on PC any day.

However I wonder if anyone managed to crack/modify games to change some of the parameters such as how many lives you have in the game (nightstalker or astrosmash) or increase weapon and armor level in games like AD&D. Basically I need to do cheats lol.

 

I played around with Night Stalker a little bit using Virtual Aquarius emulator and I tried to get ridiculous number of lives by altering the .bin RAM file I received from using "File --> Save Ram" command. I simply opened the file in hex editor and increased the number of lives to 99 and then loaded the file again in the emulator. It worked visually but as soon as I lose one life, the number gets back to the default value. Can someone explain why this happened? I also wonder if someone successfully managed to crack these games.

 

Kind regards.

bandicam 2021-01-23 23-41-59-783.png

Edited by mfkadhim
  • Like 1
Link to comment
Share on other sites

First of all, welcome to AtariAge!

 

Quote

So I've been playing some of the games I had back in 80s when I had an actually Aquarius computer (Sold it like 25 years ago and I'm regretting it now). Thanks to those who worked hard to develop Aquarius emulators, now I can playing my childhood favorite games on PC any day.

However I wonder if anyone managed to crack/modify games to change some of the parameters such as how many lives you have in the game (nightstalker or astrosmash) or increase weapon and armor level in games like AD&D. Basically I need to do cheats lol.

Certainly.  There were two things that bugged me about Aquarius BurgerTime, for example.  First, there are stray, almost-invisible garbage characters in the screen border.  Because the character code happens to match the background color code, I surmised that this was the result of an off-by-one error in the routine which cleared the screen and filled it with color.  Second, the number of peppers and lives is limited to nine, which is a limitation that other BurgerTime implementations do not have.  I patched the game to get rid of the garbage characters, and to raise the number of peppers and lives from 9 to 99.  I included the patched version in the Aquaricart collection as a bonus.

 

Quote

I played around with Night Stalker a little bit using Virtual Aquarius emulator and I tried to get ridiculous number of lives by altering the .bin RAM file I received from using "File --> Save Ram" command. I simply opened the file in hex editor and increased the number of lives to 99 and then loaded the file again in the emulator. It worked visually but as soon as I lose one life, the number gets back to the default value. Can someone explain why this happened? I also wonder if someone successfully managed to crack these games.

You'd have to analyze the code to find out why this is happening.  It's possible that the value you changed is only one of the places where the starting number of lives is stored in memory.  There might also be something unusual about how the number of lives is updated during a game; in BurgerTime, for example, I noticed that the original program never increases the number of lives if it has already reached nine, yet it always increments the number of peppers if you pick up a bonus, and then decrements it again if the number has gone above nine.

  • Like 1
Link to comment
Share on other sites

1 hour ago, mfkadhim said:

So I've been playing some of the games I had back in 80s when I had an actually Aquarius computer (Sold it like 25 years ago and I'm regretting it now). Thanks to those who worked hard to develop Aquarius emulators, now I can playing my childhood favorite games on PC any day.

However I wonder if anyone managed to crack/modify games to change some of the parameters such as how many lives you have in the game (nightstalker or astrosmash) or increase weapon and armor level in games like AD&D. Basically I need to do cheats lol.

 

I played around with Night Stalker a little bit using Virtual Aquarius emulator and I tried to get ridiculous number of lives by altering the .bin RAM file I received from using "File --> Save Ram" command. I simply opened the file in hex editor and increased the number of lives to 99 and then loaded the file again in the emulator. It worked visually but as soon as I lose one life, the number gets back to the default value. Can someone explain why this happened? I also wonder if someone successfully managed to crack these games.

 

Kind regards.

bandicam 2021-01-23 23-41-59-783.png

In my experience ram digging on other systems, generally there are multiple memory addresses associated with lives, score and such.

 

For example, there can be an internal life count (how many lives you actually have), and an address for what is displayed on screen. When the internal life count updates, it also updates the display address. The display address under normal circumstances can never update on its own other than if the internal life count is also updated, so updating the display address wouldn’t also affect the internal life count.

 

So, if it works the same as other systems I’ve messed with, then my guess is you found and modified only the display address. Modifying the display address only made it appear on screen as though you had 99 lives, but in reality the internal life count was still it’s original value. So when you lost a life, the internal life count updated the display address to the actual amount.

 

This is only a guess from other systems I’ve messed with, as I haven’t really taken a look at either the Aquarius or Intellivision ram values.

  • Like 1
Link to comment
Share on other sites

^ That's what I'm thinking, too.  I haven't looked at Night Stalker, but there's probably an internal counter for the number of lives, and a string buffer for what is displayed on the screen.  Changing one without changing the other could result in the behavior the OP is observing.  Other games might use a different approach; BurgerTime, for example, simply adds 48 to its counter values to convert them to the corresponding ASCII values for display.  I had to change this when I raised the upper limits from nine, since the original code wouldn't work for values of more than one digit.

Link to comment
Share on other sites

On 1/24/2021 at 12:45 AM, jaybird3rd said:

First of all, welcome to AtariAge!

 

Certainly.  There were two things that bugged me about Aquarius BurgerTime, for example.  First, there are stray, almost-invisible garbage characters in the screen border.  Because the character code happens to match the background color code, I surmised that this was the result of an off-by-one error in the routine which cleared the screen and filled it with color.  Second, the number of peppers and lives is limited to nine, which is a limitation that other BurgerTime implementations do not have.  I patched the game to get rid of the garbage characters, and to raise the number of peppers and lives from 9 to 99.  I included the patched version in the Aquaricart collection as a bonus.

 

You'd have to analyze the code to find out why this is happening.  It's possible that the value you changed is only one of the places where the starting number of lives is stored in memory.  There might also be something unusual about how the number of lives is updated during a game; in BurgerTime, for example, I noticed that the original program never increases the number of lives if it has already reached nine, yet it always increments the number of peppers if you pick up a bonus, and then decrements it again if the number has gone above nine.

Hello and Thank you!

Glad that someone managed to increase the number of peppers as it always bugged me in past. To be honest BurgerTime was on my list of the games to modify. I definitely will play your mod very soon. Thanks for including the link to Aquaricart collection.

 

And you're right looks like the value I changed is only used as a "Display value" or something like that. I need to dig deeper into this by analyzing the code stored in both RAM and registers even though my knowledge is low in those areas but I guess it worth trying.

On 1/24/2021 at 1:15 AM, EdgeOfPortal said:

In my experience ram digging on other systems, generally there are multiple memory addresses associated with lives, score and such.

 

For example, there can be an internal life count (how many lives you actually have), and an address for what is displayed on screen. When the internal life count updates, it also updates the display address. The display address under normal circumstances can never update on its own other than if the internal life count is also updated, so updating the display address wouldn’t also affect the internal life count.

 

So, if it works the same as other systems I’ve messed with, then my guess is you found and modified only the display address. Modifying the display address only made it appear on screen as though you had 99 lives, but in reality the internal life count was still it’s original value. So when you lost a life, the internal life count updated the display address to the actual amount.

 

This is only a guess from other systems I’ve messed with, as I haven’t really taken a look at either the Aquarius or Intellivision ram values.

You are absolutely right!. From my observation with both Night Stalker and AD&D, looks like the system use two different memory addresses where one used for displaying the value on screen while the other is the actual number that should be modified.

The same scenario with the game AD&D, I increased armor to 99 and again the value on screen has changed successfully but as soon as I change weapon or get hit, the value change back to the default/original value. Again I probably need to dig deeper into how values are stored in the system. I might post again if I made progress.

 

On 1/24/2021 at 2:32 AM, evg2000 said:

Any chance the emulators allow you to capture memory state?  If so start a game, capture memory state, immediately lose a life, capture memory state and then compare the two. Maybe you can find the locations that change when you lose a life.

Smart suggestion :D I'll try that and post update here.

  • Like 1
Link to comment
Share on other sites

You can use a technique called "byte patching" to update the rom image.  Rather than change the life value, I'd change the invariant; the test in the flow control to determine when the game ends.  There are lots of approaches you can take.  You need to know the hex value of the thing you want to change; but luckily low numbers are the same as decimal.

 

You can use a tool like 'xxd' to dump the binary rom image to text-based hex values, then search and edit it like a text file.  Use the '-r' switch to revert from text back to binary, then fire up the emulator and try it out to see if your change resulted in the desired effect.  'xxd' should be available with most Linux distributions.  You can run a Linux VM and use a shared folder to bridge your virtual machine and your host (real) computer.

 

You'll probably have to repeat that last step a lot because you're blindly changing byte values without any diassembly--but it will work for most programs.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...