-
Notifications
You must be signed in to change notification settings - Fork 0
Pnach Basics
So if you aren't already aware pnach cheats are basically just differently formatted, RAW GameShark Codes.
This means 2 things:
-
What you may assume at first glance is an entire address actually isn't. It's ths of an address because the first digit is inherent to the code.
-
Codes follow a set number of defined formats.
To get into the technical stuff, Gameshark codes (and thus pnach codes) only address a portion of the game’s memory. If you're looking into memory from Cheat Engine you should be able to limit your search to the 20000000 - 21FFFFFF range to find whatever you're looking for. The addresses 22000000 - 2FFFFFFF deal with the more technical aspects of the emulation.
The formatting for codes works as follows:
---------------------------------------------------------------
PCSX2 1.5.0 - Extended PNACH - Cheat Sheet
---------------------------------------------------------------
patch=1,EE,0AAAAAAA,extended,000000VV -> Writes value V into address A (1-Byte Write)
patch=1,EE,1AAAAAAA,extended,0000VVVV -> Writes value V into address A (2-Byte Write)
patch=1,EE,2AAAAAAA,extended,VVVVVVVV -> Writes value V into address A (4-Byte Write)
patch=1,EE,300000VV,extended,0AAAAAAA -> Increases the value of address A by the value V (1-Byte)
patch=1,EE,301000VV,extended,0AAAAAAA -> Decreases the value of address A by the value V (1-Byte)
patch=1,EE,3020VVVV,extended,0AAAAAAA -> Increases the value of address A by the value V (2-Byte)
patch=1,EE,3030VVVV,extended,0AAAAAAA -> Decreases the value of address A by the value V (2-Byte)
patch=1,EE,30400000,extended,0AAAAAAA |-> Increases the value of address A by the value V (4-Byte)
patch=1,EE,VVVVVVVV,extended,00000000 |
patch=1,EE,30500000,extended,0AAAAAAA |-> Decreases the value of address A by the value V (4-Byte)
patch=1,EE,VVVVVVVV,extended,00000000 |
patch=1,EE,4AAAAAAA,extended,TTTTBBBB |-> Writes value V into address A + (B * (4 * T))
patch=1,EE,VVVVVVVV,extended,00000000 | in a loop T times.
patch=1,EE,5FFFFFFF,extended,NNNNNNNN |-> Copies the N amount of bytes from address F to address T
patch=1,EE,0TTTTTTT,extended,00000000 |
patch=1,EE,6AAAAAAA,extended,VVVVVVVV |-> Writes value V into the pointed address of A + O, X
patch=1,EE,000X0000,extended,OOOOOOOO | determines data depth (0 = 1-Byte, 1 = 2-Byte 2 = 4-Byte)
patch=1,EE,7AAAAAAA,extended,00X0VVVV -> Performs a bitwise operation with the value stored at address
A and value V, and writes it back to address A.
Operations (X): 0 = 1-Byte OR, 1 = 2-Byte OR, 2 = 1-Byte AND, 3 = 2-Byte AND, 4 = 1-Byte XOR, 5 = 2-Byte XOR
patch=1,EE,DAAAAAAA,extended,00XXVVVV -> Checks the value at address A and compares it to value V. If the
condition is true, it activates 1 line of code.
Operations (X): 00 = Equal, 10 = Not Equal, 20 = Lesser, 30 = Greater
patch=1,EE,EZNNVVVV,extended,XAAAAAAA -> Checks the value at address A and compares it to value V. If the
condition is true, it activates N amount of lines.
Value Type (Z): 0 = 2-Byte, 1 = 1-Byte
Operations (X): 0 = Equal , 1 = Not Equal, 2 = Lesser, 3 = Greater
As an example, this block of code:
patch=1,EE,E0041A04,extended,0032BAE0
patch=1,EE,E0030001,extended,0032BAE4
patch=1,EE,E0020001,extended,0032BAE8
patch=1,EE,01C6C754,extended,00000001
patch=1,EE,01C6C750,extended,00000001
Translates to:
IF the value of 2032BAE0 is equal to 1A04 run the next 4 lines.
Then IF the value of 2032BAE4 is equal to 0001 run the next 3 lines.
Then IF the value of 2032BAE8 is equal to 0001 run the next 2 lines.
Then set the byte at 21C6C754 to 01.
Then set the byte at 21C6C750 to 01.
If at any point one of those conditions is not true the last 2 lines do nothing.
These codes are not supported by PCSX2 1.6.0 (as far as people tested)
patch=1,EE,8AAAAAAA,extended,OOOOOOOO |-> Copies the value at the pointed address of A + O into
patch=1,EE,0TTTTTTT,extended,00000000 | address T
patch=1,EE,9AAAAAAA,extended,0TTTTTTT -> Copies the value stored at address A to address T
patch=1,EE,ADDDDDDD,extended,00000000 |-> Copies the value stored at address D to the pointed
patch=1,EE,0PPPPPPP,extended,0IIIIIII | address of P + I
patch=1,EE,BXXSSSSS,extended,00000000 -> Activates X amount of lines every S milliseconds.
patch=1,EE,CAAAAAAA,extended,00000000 |-> Compares the value at address A with the value at
patch=1,EE,0TTTTTTT,extended,YZXXXXXX | address T. If true, activates X amount of lines.
Value Type (Y): 0 = 4-Byte, 1 = 2-Byte, 2 = 1-Byte
Operations (Z): 00 = Equal, 10 = Not Equal, 20 = Lesser, 30 = Greater
- Coding
- Item Modification
- Stats
- World Codes
- Miscellaneous