 |
Cheat Engine The Official Site of Cheat Engine
|
| View previous topic :: View next topic |
| Author |
Message |
Valduran How do I cheat?
Reputation: 0
Joined: 28 Nov 2013 Posts: 7
|
Posted: Thu Nov 28, 2013 1:19 pm Post subject: (PCSX2/General) Damage Multipliers - Mana Khemia/Ar Tonelico |
|
|
So I've recently got into hacking various PS2 games via PCSX2/CE in attempt to tweak various things for my personal enjoyment(Read: Making ridiculously easy games ridiculously hard... yeah, that's kinda the opposite of cheating, I know ), and at the moment I am working on the Mana Khemia games as well as Ar Tonelico 2, and so far I've managed to complete 100% functional scripts that significantly reduce XP/Money rewards as well as various scripts to adjust(nerf) Player stats as desired.
However, I'm not especially happy with the methods (and overall gameplay effect therof) I've used for increasing difficulty by reducing player stats and while it works in a pinch, I would prefer a more elegant solution in the form of a catch-all damage multiplier for all damage dealt and received by player characters. (i.e. player damage dealt is multiplied by 0.5 and damage received is multiplied by 2).
Unfortunately I've run into a brick wall in my efforts to locate the code that generates the damage number to be subtracted from health totals. I've found the code that applies the NEW HP values after damage has ALREADY been done(a simple check of what writes to the basic HP value), but a modification using that code to compare new HP totals with pre-damage HP totals and multiply the difference only has the final effect that I would want and would completely ruin the accuracy of the visuals (Damage numbers, HP displays, etc).
Does anyone have any idea how I could go about tracking down the addresses of the code that I actually need? (And is something like what I'm attempting to do even possible in a polished form without a huge amount of effort and knowledge?)
Also, if I were able to track it down how would I go about determining what the target of the damage is, so that my script would know whether to apply the 0.5x multiplier or the 2x multiplier? I'm hoping/assuming that the current target will be stored in ecx at that point, but I can't be sure, and even if it is I am a bit confused at how the comparison checks work in assembler scripts (though I must admit I haven't put that much effort into figuring them out yet. What I wouldn't give for simple if/else statements here ).
I'm also having a little bit of difficulty understanding how the state of certain registers comes to be and when the game knows which object to write/read to/from the register. From what I gather--in these games at least--ecx is typically used to store the address of whatever object is currently being manipulated(Player, monster, etc) and edx is used to ferry around the numbers that are being calculated and applied to the objects. But I often find myself confused at how certain data is being calculated or applied when the numbers or addresses contained in ecx/edx don't line up with what is actually happening.
For example, using the code that applies new HP values after damage/healing I can easily inject a bit of code to modify the new value which is contained in edx and it changes the HP value of whatever character was just healed/damage as expected, but for some reason when I inspect edx in the debugger with a break point at that address it appears to contain the SP(Mana) of the character dealing the damage, and not the new HP value that is being applied to the target of the damage. What am I missing here?
Sorry if this is a pretty hefty request overall, but any assistance at all would be greatly appreciated. Let me know if there is any information I need to provide concerning either the game in general or the specifics of the problem.
|
|
| Back to top |
|
 |
47iscool Cheater
Reputation: 0
Joined: 15 Apr 2014 Posts: 34
|
Posted: Fri Jul 25, 2014 12:55 am Post subject: |
|
|
Not sure if you have checked this thread in while or not but, I have some info that might help. CE can give the ASM that causes reads and writes.
After you have found your address such as health,ammo etc. Open up the debugger and set a breakpoint on it, when it freezes gameplay look at the registers menu. Take note of the ESI value, as it is the actual address of the ASM that is subtracting or adding ammo/health.
For example, when I fire my gun on Resident Evil 4 the ESI register changes to ESI=00120010. For some addresses you must go backwards to find something that works. So add this to CE's menu for RE4:
20120008 00000000
Freeze it and then restart the emulator or reload a save state and you will have inf ammo for all of your guns. Also note these codes will work on a real cheat system.
_________________
My codes:
bit.ly/1bQNawz |
|
| Back to top |
|
 |
Valduran How do I cheat?
Reputation: 0
Joined: 28 Nov 2013 Posts: 7
|
Posted: Mon Dec 15, 2014 7:44 pm Post subject: |
|
|
I stopped checking for replies after a few weeks. Surprising to see someone post in it after 6 months! And now I'm finally getting back to it a year later lol.
That info should go a long way in helping me get past the place I was stuck at. I'll give it a try next time I tinker with this project again, thanks a bunch.
|
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum You cannot attach files in this forum You can download files in this forum
|
|