But from my RAM dump observations, this game uses memory shuffling, so it doesn't work with fixed offsets. You might have to search for nearby data that is always the same and then calculate the correct offset.
I've just done a CheatEngine-esque search over 4 RAM dumps with each a different amount of hearts.
But I don't understand how you observed that the game uses memory shuffling.
How did you do your "cheatengine-esque" search?I've just done a CheatEngine-esque search over 4 RAM dumps with each a different amount of hearts.
But I don't understand how you observed that the game uses memory shuffling.
How did you do your "cheatengine-esque" search?
I get that, but there are a lot of values to keep track of manually. I was wondering if there was a program for this.He probably dumped the RAM, searched for the coin value, spent/gained coins, dumped the RAM, searched for the new value, etc.
Edit: but with hearts, not coins.
I get that, but there are a lot of values to keep track of manually. I was wondering if there was a program for this.
I get that, but there are a lot of values to keep track of manually. I was wondering if there was a program for this.
print("Opening file one")
one = open("one.bin", "rb").read()
one_find = 1
print("Opening file two")
two = open("two.bin", "rb").read()
two_find = 2
print("Opening file three")
three = open("three.bin", "rb").read()
three_find = 3
matches = []
print("Scanning file one for matches")
for x in range(len(one)):
if one[x] == one_find:
matches.append(x)
#print("Position:", x)
rem = []
print("Scanning file two and removing stuff that isn't correct")
for x in range(len(matches)):
if two[matches[x]] != two_find:
rem.append(x)
#print("Removing:", matches[x])
matches = [v for i, v in enumerate(matches) if i not in rem]
rem = []
print("Scanning file three and removing stuff that isn't correct")
for x in range(len(matches)):
if three[matches[x]] != three_find:
rem.append(x)
#print("Removing:", matches[x])
matches = [v for i, v in enumerate(matches) if i not in rem]
print("Remaining matches:", matches)
Well, I tried myself, but I don't have good news sadly.
I made 4 RAM dumps (3MB is the most we are getting with spider huh?), first 2 in one play session, the other two after restarting the game, and then in HxD I compared them, checking for differences. Sadly, I didn't see anything that could look like a changed hearts value (3 in one dump, 2 in another, then 2 to 1 in the final 2 dumps). The dumps were very similair however, not many changes and a lot of them seemed like a repeating pattern (perhaps home menu colors or some other animation that was on a different frame between dumps?).
So either that amount is outside the range available to spider/gpuhax, or it's actually not stored in it as-is.
I'm attaching those 4 dumps, in case someone more patient/skilled wants to take a look.
dumps.zip
mem1.bin - 3 hearts
mem2.bin - 2 hearts
mem3.bin - 2 hearts
mem4.bin - 1 hearts
mem1 and mem2 are first session, mem3 and mem4 are second. In all cases there is 800 coins (if anyone wants to look for that)
How did you make those dumps (MemoryDump.dat)? I've made mine with the example I've posted earlier in the thread. That dumps 100Mb each (by default).
I believe MemoryDump.dat only dumps the browser's memory, but I could be wrong (since I don't understand assembly, and I have no idea what the starting offset is).
You're taking the wrong approach.
Values like hearts, gems, coins etc are all referenced multiple times -- even if you update the display value, it'll be quickly set back to the actual value.
Gotta take the oblique approach.
Or you could just wait for me to release my thing once I'm done testing it.
Well, I'm going to wait for sure. I do have a question however, how are you searching for those values exactly? Do you use spidertools to dump the RAM, or something else?
-I made a dump of the ROM and figured out how to extract the archives in the romfs so that I'd have an idea of what data I wanted to be looking for.
-I then used KazoWAR's memdump (posted earlier in the thread) to make a bunch of RAM dumps.
-I just used ctrl-f to find what I wanted to edit. In cases where I'm editing data stored in memory that isn't in the romfs, I would just write a custom thing in c# to compare the files. Dunno if there are any existing tools for that kind of thing -- it's less effort for me to write one for a specific task than try to find a general case tool.
Just curious, those of you that are dumping RAM from Pokemon Shuffle, did you transfer your ticket.db over from emuNAND or do you have another method of running spiderhax from emuNAND?