Hi everyone,
I'm currently (re)implementing the code types for Artemis' cheat engine. As this project is a community effort, I'm asking you for feedback and suggestions on new code types.
Here's the current list of supported types. As you'll notice, this is heavily inspired by CodeBreaker.
I'm currently (re)implementing the code types for Artemis' cheat engine. As this project is a community effort, I'm asking you for feedback and suggestions on new code types.
Here's the current list of supported types. As you'll notice, this is heavily inspired by CodeBreaker.
Code:
Code Types supported by Artemis written by misfire <[email protected]> Last update: Jul 22 2009 Overview: 0 - 8-bit constant write 1 - 16-bit constant write 2 - 32-bit constant write 3 - Increment / Decrement 4 - 32-bit constant serial write 5 - Copy bytes 6 - Pointer write 7 - Boolean operation 8 - TODO 9 - Hook code A - TODO B - TODO C - 32-bit do all following codes if equal to D - Do multi-lines if conditional E - should be converted to D code type for backwards compatibility F - TODO "8-bit constant write" 0-aaaaaaa 000000vv a = address (25 bits) v = value (8 bits) Constantly writes the 8-bit value @v to address @a. The address can be odd or even. Example: 002BAA31 00000063 The 8-bit value 0x63 is repeatedly written to memory location 0x002BAA31. -------------------- "16-bit constant write" 1-aaaaaaa 0000vvvv a = address (25 bits) v = value (16 bits) Constantly writes the 16-bit value @v to address @a. The address must be aligned to 2. Example: 107657B2 0000FFFF The 16-bit value 0xFFFF is repeatedly written to memory location 0x007657B2. -------------------- "32-bit constant write" 2-aaaaaaa vvvvvvvv a = address (25 bits) v = value (32 bits) Constantly writes the 32-bit value @v to address @a. The address must be aligned to 4. Example: 20417A64 42C80000 The 32-bit value 0x42C80000 is repeatedly written to memory location 0x00417A64. -------------------- "Increment / Decrement" 8-bit increment 3-00000vv 0aaaaaaa 8-bit decrement 3-01000vv 0aaaaaaa 16-bit increment 3-020vvvv 0aaaaaaa 16-bit decrement 3-030vvvv 0aaaaaaa 32-bit increment 3-0400000 0aaaaaaa vvvvvvvv 00000000 32-bit decrement 3-0500000 0aaaaaaa vvvvvvvv 00000000 a = address (25 bit) v = value (8/16/32 bit) It increments/decrements the current value at address @a by value @v. Only used with a joker code above it! Example: 30000005 0012AC29 This will add the 8-bit value 0x05 to the value at address 0x0012AC29. -------------------- "32-bit constant serial write" 4-aaaaaaa nnnnssss vvvvvvvv iiiiiiii a = start address (25 bits) n = number of times to write (16 bits) s = size of address step (divided by 4) (16 bits) v = start value (32 bits) i = size of value step (32 bits) Starting with address @a, this code type will write the 32-bit value @v to @n addresses. In each cycle, the address is incremented by @s * 4 and the value is incremented by @i. Example 1: 402E8390 00040001 FFFFFFFF 00000000 - writes 0xFFFFFFFF to 0x002E8390 - writes 0xFFFFFFFF to 0x002E8394 - writes 0xFFFFFFFF to 0x002E8398 - writes 0xFFFFFFFF to 0x002E839C Example 2: 4099A20C 00060002 00000000 00100000 - writes 0x00000000 to 0x0099A20C - writes 0x00100000 to 0x0099A214 - writes 0x00200000 to 0x0099A21C - writes 0x00300000 to 0x0099A224 - writes 0x00400000 to 0x0099A22C - writes 0x00500000 to 0x0099A234 -------------------- "Copy bytes" 5-sssssss nnnnnnnn 0ddddddd 00000000 s = address to copy from (25 bits) n = number of bytes to copy (32 bits) d = address to copy to (25 bits) Copies a block of @n bytes from source address @s to destination address @d. This is done repeatedly, so you need a D code in front of it to only copy stuff once. Example: 50339328 00000008 0036AED4 00000000 Copy 8 bytes from memory location 0x00339328 to 0x0036AED4. -------------------- "Pointer write" 8-bit write 6-aaaaaaa 000000vv 00000000 iiiiiiii 16-bit write 6-aaaaaaa 0000vvvv 00010000 iiiiiiii 32-bit write 6-aaaaaaa vvvvvvvv 00020000 iiiiiiii a = address to load 32-bit base address from (25 bits) v = value to store at base + offset (8/16/32 bits) i = 32-bit offset to be added to base Loads 32-bit base address from address @a, adds offset @i to it, and constantly writes the value @v to the final address. Note that execution stops if base is equal to 0. Example: 6018F6D4 000003E7 00010000 00000156 - loads base address from address 0x0018F6D4, say base is 0x001A0000 - adds offset 0x00000156 to base to make final address 0x001A0156 where 16-bit value 0x03E7 will be written to -------------------- "Boolean operation" 8-bit OR 7-aaaaaaa 000000vv 16-bit OR 7-aaaaaaa 0010vvvv 8-bit AND 7-aaaaaaa 002000vv 16-bit AND 7-aaaaaaa 0030vvvv 8-bit XOR 7-aaaaaaa 004000vv 16-bit XOR 7-aaaaaaa 0050vvvv a = address (25 bits) v = value (8/16 bits) Performs a bitwise logical operation between value @v and the value stored at address @a. Example: 7048D402 005014A9 0x14A9 is XORed to the 16-bit value at address 0x0048D402. -------------------- "Hook code" 9-aaaaaaa vvvvvvvv a = address (25 bits) v = value (32 bits) This code will "hook" the game and is essential for most of the other types to work. It hard-codes a jal to the cheat engine at address @a if the 32-bit value at @a is equal to value @v. The address @a needs to be inside a function which is called many times a second, e.g. scePadRead(). To cheat on multi-ELF games, create a 9 code for each ELF. Example: 902D51F8 0C0B95F6 Insert hook if 32-bit value at address 0x002D51F8 is equal to 0x0C0B95F6. -------------------- "32-bit do all following codes if equal to" C-aaaaaaa vvvvvvvv a = address (25 bits) v = value (32 bits) All following codes will be executed only if 32-bit value at address @a is equal to value @v. Can be used to exit the code sequence at any point. To act on all codes (like traditional "Auto Activation") put it at the top of the code list. Example: C0153880 03E00008 If the 32-bit value 0x03E00008 is at address 0x00153880, then activate all following codes; otherwise, do nothing. -------------------- "Do multi-lines if conditional" 16-bit test D-aaaaaaa nnt0vvvv 8-bit test D-aaaaaaa nnt100vv a = address (25 bits) n = number of lines to execute (8 bits) t = test condition (3 bits) 0 equal 1 not equal 2 less than 3 greater than 4 NAND 5 AND 6 NOR 7 OR v = value (8/16 bits) Compares value at address @a to value @v, and executes next @n code lines only if the test condition @t is true. Example: D00802CC 07002882 200802CC 8C860000 200802D0 10C00033 200802D4 00050C02 200802D8 00C13021 200802DC 10000030 200802E0 A4C50000 100800BC 00000083 Activate next 7 lines of code if 16-bit value at address 0x000802CC is equal to 0x2882; otherwise, skip the 7 code lines.
Comment