r0ah / vitacheat

FinalCheat / VitaCheat Database
343 stars 279 forks source link

0x00100000 memory gap on pointer codes between vitacheat versions #100

Open magicbob93 opened 4 years ago

magicbob93 commented 4 years ago

Hi.

I was working on some codes for "Digimon - Next Order (PCSH00261)" and I even submitted them here. But after receiving many reports about them not working, I decided to take a look at what was wrong and I finally find out what was it.

I have a 3.60 PSVITA with Enso, so I use VitaCheat z05 version. The codes worked perfectly with me so I tested with a 3.65 PSVITA with Enso too, using the same version of VitaCheat (z05) and it worked too.

A guy named "Farizarch" on reddit helped me with some memory dumps. He uses a 3.65 PSVITA with Enso, but his version of VitaCheat is z06.

When I compared his dumps against eachother and compared his dumps with my dumps, I noticed it had a 0x00100000 memory gap between EVERY pointer found in ARtemp.

I don't know if it happens with all games, but because of this, I've had to make two versions of the codes, one based on z05 and other based on z06.

I also don't know if @r0ah knows about this issue, but even so, this report can help anyone who's struggling to get codes working.

@r0ah If you need, I can provide the dumps, addresses and prints that I used to get to this conclusion.

r0ah commented 4 years ago

Yes that's what I've been doing to titles that uses 0x100000 gap. I use condition to check certain fixed values. In the case of World of Final Fantasy, I check the Lann's name nnaL which is a fixed value.

Digimon Story Cyber Sleuth (PCSE00755)

_V0 Infinite Yen
$D201 840AD955 00AC85E5
$0200 840AD980 000F423F
$D201 841AD955 00AC85E5
$0200 841AD980 000F423F

World of Final Fantasy (PCSE00880)

_V0 Infinite Gil
$D201 8262F468 6E6E614C
$0200 826652E0 0098967F
$D201 8272F468 6E6E614C
$0200 827652E0 0098967F
r0ah commented 4 years ago

What I mean by "fixed" is it is a value that always has fixed value no matter what your progress is in the game. From the start of the game to until you finish it the value remains the same.

magicbob93 commented 4 years ago

Sorry for taking so long to answer. Had a tough week.

So basically I need to find a fixed value and if that's the case I Activate the pointer?

That's a clever trick, but I still need to find it.

I noticed there is a "DEAD" address on z06 version in digimon, maybe finding this address may help....

Thanks for the info anyway!

magicbob93 commented 4 years ago

@r0ah Also, I have a doubt.

There is anyway to search a specific address to find its value?

Example:

I want to know whats the value of the address "834D0EB8" is this possible?

RikuNoctis commented 4 years ago

@r0ah Also, I have a doubt.

There is anyway to search a specific address to find its value?

Example:

I want to know whats the value of the address "834D0EB8" is this possible?

You could just make a code on Vitacheat that points to that address but with no value. Use [TRIANGLE] on Vitacheat when you are editing that code again to inspect that address. It's not the ideal way to search for specific addresses as you need to input them first as a code and that already sounds like a chore, bu that should help a bit as long as you don't need to inspect too many addresses. It's not that different to simply use [TRIANGLE] and search for the address manually using [L] and [R] on your Vita, but at the very least you can save the address to easily check it later if you are doing something else without having to scroll through everything once again.

Alternatively, and probably the best way, would be to create a lot, and I mean a lot, of memory dumps and use another tool on your PC with an easier and better search function. As this is not something done "on the fly" it presents its own issues, but I think that's easier than doing it on Vitacheat.

magicbob93 commented 4 years ago

@r0ah Also, I have a doubt. There is anyway to search a specific address to find its value? Example: I want to know whats the value of the address "834D0EB8" is this possible?

You could just make a code on Vitacheat that points to that address but with no value. Use [TRIANGLE] on Vitacheat when you are editing that code again to inspect that address. It's not the ideal way to search for specific addresses as you need to input them first as a code and that already sounds like a chore, bu that should help a bit as long as you don't need to inspect too many addresses. It's not that different to simply use [TRIANGLE] and search for the address manually using [L] and [R] on your Vita, but at the very least you can save the address to easily check it later if you are doing something else without having to scroll through everything once again.

Alternatively, and probably the best way, would be to create a lot, and I mean a lot, of memory dumps and use another tool on your PC with an easier and better search function. As this is not something done "on the fly" it presents its own issues, but I think that's easier than doing it on Vitacheat.

I'll try this!

Yohoki commented 4 years ago

Sorry for taking so long to answer. Had a tough week.

So basically I need to find a fixed value and if that's the case I Activate the pointer?

That's a clever trick, but I still need to find it.

I noticed there is a "DEAD" address on z06 version in digimon, maybe finding this address may help....

Thanks for the info anyway!

The address you mentioned that ends in "DEAD" is used by vitacheat. That address and the 1-2 above it are used for the searcher. If you use fuzzy search for "between" you'll notice that these addresses store the values you are currently searching for. The 'DEAD' address is also somehow used, and is probably used for debugging. See DEADBEEF on google.

Since I've made TempAR a bit better, I've noticed that almost every game I hack now has 2 states it can be in, and there's usually a large gap (around 0x0010000 or so) separating those two states. I don't think it's to do with z06. I think it's always been a thing, but we haven't really noticed it until now with the better tools.

Your best bet is to do like r0ah suggested and make 2 codes, 1 for each state. Make a $D200 code that can compare an address to see which one is needed. You could even use it on a pointer if you need to, and see if the data looks like a pointer (ie, is it >81000000).