forums.PPSSPP.org
Looking for help converting CE to CwCheat - Printable Version

+- forums.PPSSPP.org (https://forums.ppsspp.org)
+-- Forum: PPSSPP - Playstation Portable Simulator Suitable for Playing Portably (/forumdisplay.php?fid=1)
+--- Forum: General Discussion and Announcements (/forumdisplay.php?fid=2)
+--- Thread: Looking for help converting CE to CwCheat (/showthread.php?tid=16427)



Looking for help converting CE to CwCheat - Suterusu - 08-23-2015 05:03 AM

So I've been playing MGS:Peace Walker and I found a way to edit Snake's stats and skills using Cheat Engine but I have to redo the changes each time I finish a mission. I was thinking that if I could somehow convert the changes I make from Cheat Engine to CwCheat that I could make the changes stick because from what I understand CwCheat constantly changes to keep the cheat active. I saw read somewhere about making a dump file from the default memory viewer that comes with PPSSPP and loading it into Cheat Engine but I can't find any information on what exactly I would be doing after that to make it into a CwCheat. Any help would be greatly appreciated!


RE: Looking for help converting CE to CwCheat - LunaMoo - 08-23-2015 08:32 AM

You don't need memory dumps, it's the most inefficient method there is(except maybe using hex editor for savestates which is even worse;p).

To get the addresses between ppsspp/cwc/CE all you need is to understand some simple facts:
- CW cheat address starts from zero,
- in ppsspp memory it starts from 0x8800000,
- in Cheat Engine, same for any other memory editing software it starts at whenever address ppsspp allocates psp ram - which you can see it in the log when you start a first game - increased by 8mb(0x800000) since it's reserved for kernel.

If your geek lvl is decent you probably have all info already, below a supplementary wall of text in case you don't.

So let's say you see in the log that psp ram is allocated at 0xB340000, when you increase it by 8mb you get 0xB340000 + 0x800000 = 0xBB40000 and that's where CW cheat address starts at. So let's say during that session, you found something you want to make cwcheat from at 0xBC01234 just decrease it by the number you previously calculated(0xBB40000) and you end up with 0xC1234 and that would be the address for your cw cheat. Then just look at cwc code types, for example here or here and format your cheat using the address and value or whatever you want to do with it. Small tip: you don't even need hex calculator when you use CE, since you can just copy the cheat table entry and when you paste it, you can offset the value which is enough for +/-.

Make note memory is allocated dynamically, so will be different each time you restart ppsspp, many games additionally do similar thing and will have different address for every stage/level which forces you to either find a pointer in game and use a pointer code type, or if you can deal with mips asm it's actually faster to just make an asm cheat which does not replaces value of some variable, but modifies game code to change it to whatever you want or avoid decreasing it etc. quite frankly the only way to find a pointer quickly would be knowing asm as well, so either way you would have to learn a bit on your own and by your description(different address for every mission) that's probably what you will have to do for MGS.;]

In that case google for "mips asm" and find some document to learn from, you don't really have to learn how to program in it, but at least enough to understand what every opcode you will see does especially basic ones like reads and writes and some math ones. Then open ppsspp disassembly calculate the address for it(cwc address+0x8800000) and set a memory breakpoint to find what code reads and writes to it, then just be creative and modify it to get result you want.
Or find a pointer. Let's say the code that reads it would looks like lw t1,0x12(v1), pointer is pretty much an address which stores an address in this example v1 would be a register which stores an address which increased by 0x12 bytes offset points exactly at the variable you want. So in that example to find a pointer you would simply have to find where v1 is read from. It's often just slightly earlier in the same function, althrough doesn't have to since it can read it much earlier and pass it through registers and/or temporary locations, it could also be multi level pointer which means some other pointer points into the pointer and there could be a few layers of those(althrough psp is too simple to really have much deepth).

Eventually you could just write yourself an AOB scan script in CE to search the addresses you want, you would still have to re-search them every mission, but by simply activating the script, not as good, but that's always faster than manual search, CE forums is full of tutorials and examples how to do pretty much anything with it, maybe even has some youtube tutorials, so might be easier.