Did you need to study this to be able to write this code?
for example, I don't understand why you used cmp [rsp+10] in infinite AP cheat
I wanted to understand how you created the code, I had found the address, but none of the scripts I created worked, but you made it look easy.
This is the method I used for the compare list:
This is the compare list:
SpoilerSpoilerSpoilerSpoiler
Spoiler
Blue = First thing that appears Red = While using the AP - clicking on the girl
2735923611
How did you find this value? or others that would work?
To find the value of "AP", you need to follow several steps (since the values are encrypted, making it more complex than in other games).
First, set the search to 4 bytes (Value Type 4 Bytes). Then, perform "Unknown Initial Value" and "First Scan" (preferably do this with the game paused). Now, remove the pause (if the game was paused) and perform "Increased Value" until the AP reach the maximum limit (but do not click on the girl with the backpack yet). Obviously, when the AP reach the maximum limit, do not perform "Increased Value" anymore but instead perform "Changed Value" and then "Unchanged Value" several times (I refer to unchanged value). Now, click on the girl and perform "Changed Value" followed by "Increased Value". At this point, there should be only one value left (sometimes there are also a dozen values, in which case try to freeze the header or modify one of these to see which one changes the AP value).
When performing a compare, do not mark as group 2. This is useful if multiple values enter the same address. You can mark the value you want to separate (in this case, AP) and perform "scan for commonalities". You do not have to use the RSP register for the compare; try using other registers, such as R8. Do not check "Only find matching groups" as it is specific for grouping values in both blue and red (useful for separating values like HP for your characters and HP for enemies).
The compare function works as follows:
cmp [rsp+10],(int)88
jne code
Here, (int)88 is a static value that does not change even after restarting the game. RSP is the register where you look for a value that does not change (even after restarting the game). The +10 is the offset, which is the line where the static value is found. This offset is usually a multiple of 4 and is seen in hexadecimal (Hex) as 0, 4, 8, 0C, 10, 14... which would be 0, 4, 8, 12, 16, 20...
The script checks if the value at the offset 10 (line 16) in the RSP register is (int)88. If it is, it executes the code. If not, it does not execute the code. In this case, it executes:
but it always remains zero - giving the impression that it didn't work
The value (int)2735923611 was found randomly, I shot random numbers until a high number came out, in fact it should be equal to 98976 Ap (2735923611 = 97976). The value is encrypted so don't expect that if you enter (int)1000 as the result, 1000 Ap will come out (I did some tests and it seems to give 0 Ap) for example 2735913611 = 600 Ap 2786245530 = 3300 Ap.
When making a comparison in a specific registry, it is recommended to take screenshots of the list, then restart the game and redo everything necessary to find the value you want to separate from the rest of the values and compare it initially to see which values have not changed. This way, you can find your static value. Of course, you must search in the same registry (if the first time in the commonality scanner you choose RSP, you must also choose the RSP registry the second time)
trying to create a cheat to always leave support at maximum, I ended up creating one that leaves all statuses increasing forever
and no one ever dies... I have no idea what happened. ahahahahah
trying to create a cheat to always leave support at maximum, I ended up creating one that leaves all statuses increasing forever
and no one ever dies... I have no idea what happened. ahahahahah
I believe I understand what happened. The code you originally provided was:
cmp [rsp+0], (int)0
jnp code
Normally, the correct way to write this would be:
cmp [rsp+0], (int)0
jne code
Here's the explanation:
cmp [rsp+0], (int)0 compares the value at memory address [rsp+0] with the integer value 0.
jne code is the correct jump instruction, which stands for "jump if not equal". This will jump to the code label if the comparison result is not equal to 0.
The original jnp instruction you had used stands for "jump if not parity", which is not the correct condition to check for the comparison you're performing.
Additionally, you mentioned that in the case of using "red values" in the "Structure Compare", the correct instruction would be:
cmp [rsp+0], (int)0
je code
Here, je stands for "jump if equal", which will jump to the code label if the comparison result is equal to 0.
However, you noted that none of these cases apply in the game you're working on. I hope this explanation helps clarify the correct usage of the comparison and jump instructions in your code.
Another thing that likely happened is that when you right-clicked on your value and then selected "Find commonalities between addresses", you then also selected "Mark section as group 1" (which highlighted your value in blue). Probably, you also selected "Mark section as group 2" on some other value (which highlighted the other values in red).
This additional step is not necessary. It is sufficient to just highlight your value in blue and leave the others in white (highlighting the other values in red is something that is only done if you have over 1000 values, because Cheat Engine cannot effectively compare too many values at once).
I completely forgot that you can do it using "db" and knowing the address of the aob by putting '??' where it changes with reset
I even have a program they made years and years ago that compares previous values and automatically puts '??'
I'll leave it here for anyone who wants it
ps: I wouldn't know how to find these hex in this game
I tried to find this
76 ?? 48 8D ?? ?? ?? F3 ?? ?? ?? ?? ?? 48 8D
and I couldn't find it anywhere
If AoBTool is an excellent tool for updating cheats, it saves a lot of time.
76 ?? 48 8D ?? ?? ?? F3 ?? ?? ?? ?? ?? 48 8D
To find this value, you need to use "BrakeAndTrace", which is very useful and if you succeed, it will save you a lot of time, but it is something for very experienced cheaters. I've been trying to figure out how to do it for more than a year, but with poor results, especially if you're like me and have learned to use Cheat Engine on your own, watching YouTube videos and asking for help from more experienced people. However, this is something truly difficult to accomplish, and it would be better if you studied assembly (which is not easy in itself), but if you succeed, you might no longer need to do "compare", which is very useful when the "accessed addresses" list has thousands of results, and you could also find where the original, unencrypted value is located.
Here are some videos where you could learn how to do this:
Spoiler
I had watched these videos before, but for each game it is a different way of reasoning the structure.
I wish there was always someone making these videos for new games.
Could MBRKiNG make a video showing how he found this array? because I don't know how to use "trace instructions" in these new versions of CE. Spoiler
I mean, I can find the value that db 90 90 is changing, but I don't understand how you find it (the array). Spoiler