CwCheat

From Data Crystal
Revision as of 12:22, 16 September 2016 by Flame (talk | contribs) (Created page with "cwCheat is a homebrew for PSP. Like all cheating programs that work locally, it works by modifying memory during run-time, producing in-game effects. Every few milliseconds, i...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

cwCheat is a homebrew for PSP. Like all cheating programs that work locally, it works by modifying memory during run-time, producing in-game effects. Every few milliseconds, it will "run cheats," modifying system memory according to micro-programs called "cheats."


This program has become more popular since support for this type of cheat in PPSSPP was added.

_S ULUS-10551 #Specify the serial number of a game. cwCheat on PSP uses this to know which cheats you have installed apply to the game you're running.

_G YS Seven US #Specify the name of the game. This is for us humans, cwCheat doesn't use it.

_C0 / _C1 #Specify the start of a cheat micro-program. C0 is disable on game load, C1 is enabled on game load.

_L 0xXXXXXXXX 0xXXXXXXXX #This is how you write a line of cheats. If you leave off the _L at the beginning, the line will become a comment, ignored by cwCheat.

Constant Write Codes (0x0, 0x1, 0x2)

The basic code type is constant write. I'm not the author of cwCheat, but I am 100% sure that is where the "cw" in the program's name comes from. The "constant write" cheats are easy to find and it's easy to write the micro-programs for them. 0x0, 0x1 and 0x2 are the constant write code types.

Constant Write Codes
_L 0x0AAAAAAA 0x0000000V Constant write byte V at address AAAAAAA. For addresses, the value you specify is added to a base of 0x8800000 to form the PSP virtual address.
_L 0x1AAAAAAA 0x000000VV Constant write halfword VV
_L 0x2AAAAAAA 0x0000VVVV Constant write word VVVV

Increment / Decrement codes (0x3). I'm not sure how they could be useful.

Increment Codes
_L 0x301000VV 0x0AAAAAAA Continuously add VV to the byte at address AAAAAAA
_L 0x302000VV 0x0AAAAAAA Continuously subtract VV from the byte at address AAAAAAA
_L 0x3030VVVV 0x0AAAAAAA Continuously add VVVV to the halfword at address AAAAAAA
_L 0x304000VV 0x0AAAAAAA Continuously subtract VVVV from the halfword at address AAAAAAA
_L 0x30500000 0x0AAAAAAA

_L 0xVVVVVVVV 0x00000000

Continuously add VVVVVVVV to the word at address AAAAAAA
_L 0x306000VV 0x0AAAAAAA

_L 0xVVVVVVVV 0x00000000

Continuously subtract VVVVVVVV from the word at address AAAAAAA

Conditionals (0xD)

These will execute the code if some condition is true (otherwise it will not be executed). For example, if a flag is set to 1 in battle scenes and 0 otherwise, you can make a code that will affect battle scenes without interfering with other scenes.

Conditionals
_L 0xDAAAAAAA 0x200000VV EQUAL: Execute the next code if the byte at address AAAAAAA equals VV (otherwise, it is skipped)
_L 0xDAAAAAAA 0x202000VV NOT EQUAL: Execute the next code if the byte at address AAAAAAA does not equal VV (otherwise, it is skipped)
_L 0xDAAAAAAA 0x202000VV LESS THAN: Execute the next code if the byte at address AAAAAAA is less than VV (otherwise, it is skipped)
_L 0xDAAAAAAA 0x203000VV GREATER THAN: Execute the next code if the byte at address AAAAAAA is greater than VV (otherwise, it is skipped)
_L 0xDAAAAAAA 0x0000VVVV EQUAL: Execute the next code if the halfword at address AAAAAAA equals VVVV (otherwise, it is skipped)
_L 0xDAAAAAAA 0x0010VVVV NOT EQUAL: Execute the next code if the halfword at address AAAAAAA does not equal VVVV (otherwise, it is skipped)
_L 0xDAAAAAAA 0x0020VVVV LESS THAN: Execute the next code if the halfword at address AAAAAAA is less than VVVV (otherwise, it is skipped)
_L 0xDAAAAAAA 0x0030VVVV GREATER THAN: Execute the next code if the halfword at address AAAAAAA is greater than VVVV (otherwise, it is skipped)
Conditionals (Multiple Skip)
_L 0xE1NN00VV 0x0AAAAAAA EQUAL: Execute the next NN lines if the byte at address AAAAAAA equals VV (otherwise, it is skipped)
_L 0xE1NN00VV 0x1AAAAAAA NOT EQUAL: Execute the next NN lines if the byte at address AAAAAAA does not equal VV (otherwise, they are skipped)
_L 0xE1NN00VV 0x2AAAAAAA LESS THAN: Execute the next NN lines if the byte at address AAAAAAA is less than VV (otherwise, they are skipped)
_L 0xE1NN00VV 0x3AAAAAAA GREATER THAN: Execute the next NN lines if the byte at address AAAAAAA is greater than VV (otherwise, they are skipped)
_L 0xE0NNVVVV 0x0AAAAAAA EQUAL: Execute the next NN lines if the halfword at address AAAAAAA equals VVVV (otherwise, they are skipped)
_L 0xE0NNVVVV 0x1AAAAAAA NOT EQUAL: Execute the next NN lines if the halfword at address AAAAAAA does not equal VVVV (otherwise, they are skipped)
_L 0xE0NNVVVV 0x2AAAAAAA LESS THAN: Execute the next NN lines if the halfword at address AAAAAAA is less than VVVV (otherwise, they are skipped)
_L 0xE0NNVVVV 0x3AAAAAAA GREATER THAN: Execute the next code if the halfword at address AAAAAAA is greater than VVVV (otherwise, they are skipped)
Conditionals (Comparison)
_L 0xDAAAAAAA 0x0x4BBBBBBB

_L 0x000000NN 0x0000000Y

EQUAL: If the values at addresses AAAAAAA and BBBBBBB are equal, execute the next NN lines (otherwise, they are skipped)
_L 0xDAAAAAAA 0x0x5BBBBBBB

_L 0x000000NN 0x0000000Y

NOT EQUAL: If the values at addresses AAAAAAA and BBBBBBB are not equal, execute the next NN lines (otherwise, they are skipped)
_L 0xDAAAAAAA 0x0x6BBBBBBB

_L 0x000000NN 0x0000000Y

LESS THAN: If the value at address AAAAAAA is less than the value at address BBBBBBB, execute the next NN lines (otherwise, they are skipped)
_L 0xDAAAAAAA 0x0x7BBBBBBB

_L 0x000000NN 0x0000000Y

GREATER THAN: If the value at address AAAAAAA is greater than the value at address BBBBBBB, execute the next NN lines (otherwise, they are skipped)