Hacking GameCube: Difference between revisions

From Wiki - GameHacking.org
(New page: {{Template:EnHacklopedia Header}} {{Template: EnHacklopedia_Legal}} Category: EnHacklopedia)
 
No edit summary
Line 1: Line 1:
{{Template:EnHacklopedia Header}}
{{Template:EnHacklopedia Header}}
==Encryption on GCN AR Codes==
Encryption is a mask on data which may or may not contain more data itself.<br /><br /> Encrypted codes are formatted for use in the ActionReplay. They look like this:<br />''All Evidence Max''<br /> G12C-TMX0-WRT5C<br /> G2ND-C1RJ-G4TZ1<br /><br /> Decrypted codes are in raw format and can be edited. They look like this:<br />''All Evidence Max''<br /> 00690E90 000004FF<br /><br /> Codes for the GCN AR are encrypted for a number of reasons, just the top line of every encrypted code does three things meant to prevent user error:
# Tells what region the code is for.
#* USA [often called NTSC or NTSC-U]
#* EU [often called PAL]
#* Japan [sometimes called JP or NTSC-J]
# Tells if the code has already been entered.
#* Each code has a unique ID among the codes for that game.<br />[[#How to Encrypt/Decrypt Codes|GCNCrypt]] gives each code its own random ID and has such a small chance of overlapping at any random point that it wasn't even worth mentioning.
# Tells what game the code is for via the "Game ID" which can be seen at the bottom of [#encryption_how_to GCNCrypt].
The encryption of the codes also allows the ActionReplay to check for accuracy of what was entered beyond where it belongs. When a new code is entered into the AR it decrypts it, if it could not decrypt it then an "Invalid Code" error shows up.
===How to Encrypt/Decrypt Codes===
Encrypting and Decrypting codes for the GameCube ActionReplay requires Parasyte's [[Tools#GCNcrypt|GCNCrypt]] program from the [[Tools#GCN Tools|GCN Tools]].<br /> Note: Once a game's AR code is decrypted in GCNCrypt, if the Auto Identifier box is checked, it will set the Game ID and Region so any code can be changed or added then encrypted for the same game.<br /><br /> To decrypt an encrypted code, paste the encrypted code into the left text box in GCNCrypt then press the "Decrypt" button at the bottom. Output is on the right and can be copy/pasted onto the left for editing.<br /> Many times after decrypting a code, the output won't be used. Hackers often decrypt codes from a game to automatically set the Region and Game ID for their new codes.<br /> However, if a code was decrypted to be edited.. this is important:<br /> Take the encrypted code, say this one:<br />''All Evidence Max''<br /> G12C-TMX0-WRT5C<br /> G2ND-C1RJ-G4TZ1<br /><br /> and then decrypt it in GCNCrypt, and this is the output:<br />''All Evidence Max''<br /> 01E22DC2 08000000<br /> 00690E90 000004FF<br /><br /> If the Auto Identifier box is checked (it should be) then copy the output over to the left and delete the top line of the code. This is done because- as said before- each time a code is encrypted, the top line gets added according to the Region and Game ID.<br /> After that what's left is:<br />''All Evidence Max''<br /> 00690E90 000004FF<br /><br /> Now the code can be edited according to the AR code types below. After editing is done simply press "Encrypt" and copy the output on the right!
==AR Code Types==
The single-line GameCube ActionReplay code types are the first two hex digits of a decrypted code. GameCube's memory range is from 0x80000000 to 0x817FFFFF so if the code's address is greater or equal to 0x81000000 then the code type gets 0x01 added to it. For the addresses used in the code types below, "rrrrrr" signifies that address. These are of course, decrypted.
{| class="EnHack-codetypes"
! class="EnHack-type" | Type
! class="EnHack-desc" | Description
|-
! class="EnHack-type" colspan="2" | RAM Writes
|-
| class="EnHack-type" |
* '''RAM Write and Fill'''
** ''8-Bit''<br /> 00rrrrrr xxxxxxyy
** ''16-Bit''<br /> 02rrrrrr xxxxyyyy
** ''32-Bit''<br /> 04rrrrrr yyyyyyyy
| class="EnHack-desc" | xxxxxx: Number of bytes to write, zero-based (000000 writes yy to 0x80rrrrrr, 000001 writes yy to 0x80rrrrrr and to rrrrrr+0x01) <br /> yy: Byte to write.<br /><br /> xxxx: Number of halfwords to write, zero-based (0000 writes yyyy to 0x80rrrrrr, 0001 writes yy to 0x80rrrrrr and to 0x80rrrrrr+0x02) <br /> yyyy: Halfword to write.<br /><br /> yyyyyyyy: Word to write.<br /><br />
|-
| class="EnHack-type" |
* '''Struct Write (Pointers)'''
** ''8-Bit''<br /> 40rrrrrr xxxxxxyy
** ''16-Bit''<br /> 42rrrrrr xxxxyyyy
** ''32-Bit''<br /> 44rrrrrr yyyyyyyy
| class="EnHack-desc" | xxxxxx: Byte offset from pointer.<br /> yy: Byte to write to address ((pointer at 80rrrrrr)+offset)<br /><br /> xxxx: Halfword offset from pointer.<br /> yyyy: Halfword to write to address ((pointer at 80rrrrrr)+offset*2)<br /><br /> yyyyyyyy: Word to write to pointed address (value at the pointer address of 80rrrrrr)<br /><br />
|-
| class="EnHack-type" |
* '''RAM Fill and Slide'''
** ''8-Bit''<br /> 00000000 80rrrrrr<br /> 000000yy xxvvzzzz
** ''16-Bit''<br /> 00000000 82rrrrrr<br /> 0000yyyy xxvvzzzz
** ''32-Bit''<br /> 00000000 84rrrrrr<br /> yyyyyyyy xxvvzzzz
| class="EnHack-desc" | yy: Byte to write for fill and slide, beginning at address<br /> xx: Value increment (signed)<br /> vv: Number of bytes to write, zero-based<br /> zzzz: Address increment (signed)<br /><br /> yyyy: Halfword to write for fill and slide, beginning at address<br /> xx: Value increment (signed)<br /> vv: Number of halfwords to write, zero-based<br /> zzzz: Address increment (signed)<br /><br /> yyyyyyyy: Word to write for fill and slide, beginning at address<br /> xx: Value increment (signed)<br /> vv: Number of words to write, zero-based<br /> zzzz: Address increment (signed)<br /><br /> TODO: Check and note what happens when vv is 00, 01, etc.<br /><br />
|-
| class="EnHack-type" |
* '''Signed Increment/Decrement'''
** ''8-Bit''<br /> 80rrrrrr 000000yy
** ''16-Bit''<br /> 82rrrrrr 0000yyyy
** ''32-Bit''<br /> 84rrrrrr yyyyyyyy
** ''Extended''<br /> 86rrrrrr yyyyyyyy
| class="EnHack-desc" |
Note: For signed values see "[[Generic_Code_Hacking#Signed_Searches|Signed Searches]]" in Generic Code Hacking.<br /><br /> yy: Signed byte to add to the value at address.<br /><br /> yyyy: Signed halfword to add to the value at address.<br /><br /> yyyyyyyy: Signed word to add to the value at address.<br /><br /> yyyyyyyy: Number to add to single precision (32-bit) float at address.<br /> Note: Number should be entered as a decimal value.<br /> TODO: Check exactly what kind of values this code type uses. (float, signed hex, unsigned hex, decimal[?], etc)<br /><br />
|-
! class="EnHack-type" colspan="2" | Conditional: If Equal
|-
| class="EnHack-type" |
* '''Next Line'''
** ''8-Bit''<br /> 08rrrrrr 000000yy
** ''16-Bit''<br /> 0Arrrrrr 0000yyyy
** ''32-Bit''<br /> 0Crrrrrr yyyyyyyy
* '''Next 2 Lines'''
** ''8-Bit''<br /> 48rrrrrr 000000yy
** ''16-Bit''<br /> 4Arrrrrr 0000yyyy
** ''32-Bit''<br /> 4Crrrrrr yyyyyyyy
* '''All until.. (see note)'''
** ''8-Bit''<br /> 88rrrrrr 000000yy
** ''16-Bit''<br /> 8Arrrrrr 0000yyyy
** ''32-Bit''<br /> 8Crrrrrr yyyyyyyy
* '''All Codes'''
** ''8-Bit''<br /> C8rrrrrr 000000yy
** ''16-Bit''<br /> CArrrrrr 0000yyyy
** ''32-Bit''<br /> CCrrrrrr yyyyyyyy
| class="EnHack-desc" | yy: Byte for comparison to the value at address.<br /><br /> yyyy: Halfword for comparison to the value at address.<br /><br /> yyyyyyyy: Word for comparison to the value at address.<br /><br />'''All until..''' note:<br /> The conditional will activate all of the code's following lines until a "00000000 40000000" line is reached. (just put that line in the code when and where it's needed)
|-
! class="EnHack-type" colspan="2" | Conditional: If Not Equal
|-
| class="EnHack-type" |
* '''Next Line'''
** ''8-Bit''<br /> 10rrrrrr 000000yy
** ''16-Bit''<br /> 12rrrrrr 0000yyyy
** ''32-Bit''<br /> 14rrrrrr yyyyyyyy
* '''Next 2 Lines'''
** ''8-Bit''<br /> 50rrrrrr 000000yy
** ''16-Bit''<br /> 52rrrrrr 0000yyyy
** ''32-Bit''<br /> 54rrrrrr yyyyyyyy
* '''All until.. (see note)'''
** ''8-Bit''<br /> 90rrrrrr 000000yy
** ''16-Bit''<br /> 92rrrrrr 0000yyyy
** ''32-Bit''<br /> 94rrrrrr yyyyyyyy
* '''All Codes'''
** ''8-Bit''<br /> D0rrrrrr 000000yy
** ''16-Bit''<br /> D2rrrrrr 0000yyyy
** ''32-Bit''<br /> D4rrrrrr yyyyyyyy
| class="EnHack-desc" | yy: Byte for comparison to the value at address.<br /><br /> yyyy: Halfword for comparison to the value at address.<br /><br /> yyyyyyyy: Word for comparison to the value at address.<br /><br />'''All until..''' note:<br /> The conditional will activate all of the code's following lines until a "00000000 40000000" line is reached. (just put that line in the code when and where it's needed)
|-
! class="EnHack-type" colspan="2" | Conditional: If Less (Signed)
|-
! class="EnHack-desc" colspan="2" |
Note: For signed values see "[[Generic_Code_Hacking#Signed_Searches|Signed Searches]]" in Generic Code Hacking.
|-
| class="EnHack-type" |
* '''Next Line'''
** ''8-Bit''<br /> 18rrrrrr 000000yy
** ''16-Bit''<br /> 1Arrrrrr 0000yyyy
** ''32-Bit''<br /> 1Crrrrrr yyyyyyyy
* '''Next 2 Lines'''
** ''8-Bit''<br /> 58rrrrrr 000000yy
** ''16-Bit''<br /> 5Arrrrrr 0000yyyy
** ''32-Bit''<br /> 5Crrrrrr yyyyyyyy
* '''All until.. (see note)'''
** ''8-Bit''<br /> 98rrrrrr 000000yy
** ''16-Bit''<br /> 9Arrrrrr 0000yyyy
** ''32-Bit''<br /> 9Crrrrrr yyyyyyyy
* '''All Codes'''
** ''8-Bit''<br /> D8rrrrrr 000000yy
** ''16-Bit''<br /> DArrrrrr 0000yyyy
** ''32-Bit''<br /> DCrrrrrr yyyyyyyy
| class="EnHack-desc" | yy: Byte for comparison to the value at address.<br /><br /> yyyy: Halfword for comparison to the value at address.<br /><br /> yyyyyyyy: Word for comparison to the value at address.<br /><br />'''All until..''' note:<br /> The conditional will activate all of the code's following lines until a "00000000 40000000" line is reached. (just put that line in the code when and where it's needed)
|-
! class="EnHack-type" colspan="2" | Conditional: If Greater (Signed)
|-
! class="EnHack-desc" colspan="2" |
Note: For signed values see "[[Generic_Code_Hacking#Signed_Searches|Signed Searches]]" in Generic Code Hacking.
|-
| class="EnHack-type" |
* '''Next Line'''
** ''8-Bit''<br /> 20rrrrrr 000000yy
** ''16-Bit''<br /> 22rrrrrr 0000yyyy
** ''32-Bit''<br /> 24rrrrrr yyyyyyyy
* '''Next 2 Lines'''
** ''8-Bit''<br /> 60rrrrrr 000000yy
** ''16-Bit''<br /> 62rrrrrr 0000yyyy
** ''32-Bit''<br /> 64rrrrrr yyyyyyyy
* '''All until.. (see note)'''
** ''8-Bit''<br /> A0rrrrrr 000000yy
** ''16-Bit''<br /> A2rrrrrr 0000yyyy
** ''32-Bit''<br /> A4rrrrrr yyyyyyyy
* '''All Codes'''
** ''8-Bit''<br /> E0rrrrrr 000000yy
** ''16-Bit''<br /> E2rrrrrr 0000yyyy
** ''32-Bit''<br /> E4rrrrrr yyyyyyyy
| class="EnHack-desc" | yy: Byte for comparison to the value at address.<br /><br /> yyyy: Halfword for comparison to the value at address.<br /><br /> yyyyyyyy: Word for comparison to the value at address.<br /><br />'''All until..''' note:<br /> The conditional will activate all of the code's following lines until a "00000000 40000000" line is reached. (just put that line in the code when and where it's needed)
|-
! class="EnHack-type" colspan="2" | Conditional: If Less (Unsigned)
|-
! class="EnHack-desc" colspan="2" |
Note: For unsigned values see "[[Generic_Code_Hacking#Signed_Searches|Signed Searches]]" in Generic Code Hacking.
|-
| class="EnHack-type" |
* '''Next Line'''
** ''8-Bit''<br /> 28rrrrrr 000000yy
** ''16-Bit''<br /> 2Arrrrrr 0000yyyy
** ''32-Bit''<br /> 2Crrrrrr yyyyyyyy
* '''Next 2 Lines'''
** ''8-Bit''<br /> 68rrrrrr 000000yy
** ''16-Bit''<br /> 6Arrrrrr 0000yyyy
** ''32-Bit''<br /> 6Crrrrrr yyyyyyyy
* '''All until.. (see note)'''
** ''8-Bit''<br /> A8rrrrrr 000000yy
** ''16-Bit''<br /> AArrrrrr 0000yyyy
** ''32-Bit''<br /> ACrrrrrr yyyyyyyy
* '''All Codes'''
** ''8-Bit''<br /> E8rrrrrr 000000yy
** ''16-Bit''<br /> EArrrrrr 0000yyyy
** ''32-Bit''<br /> ECrrrrrr yyyyyyyy
| class="EnHack-desc" | yy: Byte for comparison to the value at address.<br /><br /> yyyy: Halfword for comparison to the value at address.<br /><br /> yyyyyyyy: Word for comparison to the value at address.<br /><br />'''All until..''' note:<br /> The conditional will activate all of the code's following lines until a "00000000 40000000" line is reached. (just put that line in the code when and where it's needed)
|-
! class="EnHack-type" colspan="2" | Conditional: If Greater (Unsigned)
|-
! class="EnHack-desc" colspan="2" |
Note: For unsigned values see "[[Generic_Code_Hacking#Signed_Searches|Signed Searches]]" in Generic Code Hacking.
|-
| class="EnHack-type" |
* '''Next Line'''
** ''8-Bit''<br /> 30rrrrrr 000000yy
** ''16-Bit''<br /> 32rrrrrr 0000yyyy
** ''32-Bit''<br /> 34rrrrrr yyyyyyyy
* '''Next 2 Lines'''
** ''8-Bit''<br /> 70rrrrrr 000000yy
** ''16-Bit''<br /> 72rrrrrr 0000yyyy
** ''32-Bit''<br /> 74rrrrrr yyyyyyyy
* '''All until.. (see note)'''
** ''8-Bit''<br /> B0rrrrrr 000000yy
** ''16-Bit''<br /> B2rrrrrr 0000yyyy
** ''32-Bit''<br /> B4rrrrrr yyyyyyyy
* '''All Codes'''
** ''8-Bit''<br /> F0rrrrrr 000000yy
** ''16-Bit''<br /> F2rrrrrr 0000yyyy
** ''32-Bit''<br /> F4rrrrrr yyyyyyyy
| class="EnHack-desc" | yy: Byte for comparison to the value at address.<br /><br /> yyyy: Halfword for comparison to the value at address.<br /><br /> yyyyyyyy: Word for comparison to the value at address.<br /><br />'''All until..''' note:<br /> The conditional will activate all of the code's following lines until a "00000000 40000000" line is reached. (just put that line in the code when and where it's needed)
|-
! class="EnHack-type" colspan="2" | Conditional: If Bitwise AND
|-
! class="EnHack-desc" colspan="2" |
Note: For Bitwise AND see "[[Number_and_Data_Encoding_Formats#AND|AND]]" in Number Formats.
|-
| class="EnHack-type" |
* '''Next Line'''
** ''8-Bit''<br /> 38rrrrrr 000000yy
** ''16-Bit''<br /> 3Arrrrrr 0000yyyy
** ''32-Bit''<br /> 3Crrrrrr yyyyyyyy
* '''Next 2 Lines'''
** ''8-Bit''<br /> 78rrrrrr 000000yy
** ''16-Bit''<br /> 7Arrrrrr 0000yyyy
** ''32-Bit''<br /> 7Crrrrrr yyyyyyyy
* '''All until.. (see note)'''
** ''8-Bit''<br /> B8rrrrrr 000000yy
** ''16-Bit''<br /> BArrrrrr 0000yyyy
** ''32-Bit''<br /> BCrrrrrr yyyyyyyy
* '''All Codes'''
** ''8-Bit''<br /> F8rrrrrr 000000yy
** ''16-Bit''<br /> FArrrrrr 0000yyyy
** ''32-Bit''<br /> FCrrrrrr yyyyyyyy
| class="EnHack-desc" | yy: Byte for comparison to the value at address.<br /><br /> yyyy: Halfword for comparison to the value at address.<br /><br /> yyyyyyyy: Word for comparison to the value at address.<br /><br />'''All until..''' note:<br /> The conditional will activate all of the code's following lines until a "00000000 40000000" line is reached. (just put that line in the code when and where it's needed)
|}
==Button Values==
{| class="EnHack-code"
! class="EnHack-addy" | Value
! class="EnHack-comments" | Button
|-
! class="EnHack-addy" colspan="2" | Big Endian (More Common)
|-
! class="EnHack-addy" colspan="2" | Note: Values can be added together for use as button combos.
|-
| class="EnHack-addy" | 0x0000
| class="EnHack-comments" | No Buttons
|-
| class="EnHack-addy" | 0x0001
| class="EnHack-comments" | D-Pad Left
|-
| class="EnHack-addy" | 0x0002
| class="EnHack-comments" | D-Pad Right
|-
| class="EnHack-addy" | 0x0004
| class="EnHack-comments" | D-Pad Down
|-
| class="EnHack-addy" | 0x0008
| class="EnHack-comments" | D-Pad Up
|-
| class="EnHack-addy" | 0x0010
| class="EnHack-comments" | Z
|-
| class="EnHack-addy" | 0x0020
| class="EnHack-comments" | R (Digital Click)
|-
| class="EnHack-addy" | 0x0040
| class="EnHack-comments" | L (Digital Click)
|-
| class="EnHack-addy" | 0x0100
| class="EnHack-comments" | A
|-
| class="EnHack-addy" | 0x0200
| class="EnHack-comments" | B
|-
| class="EnHack-addy" | 0x0400
| class="EnHack-comments" | X
|-
| class="EnHack-addy" | 0x0800
| class="EnHack-comments" | Y
|-
| class="EnHack-addy" | 0x1000
| class="EnHack-comments" | Start
|-
! class="EnHack-addy" colspan="2" | Little Endian (Less Common)
|-
! class="EnHack-addy" colspan="2" | Note: Values can be added together for use as button combos.
|-
| class="EnHack-addy" | 0x0000
| class="EnHack-comments" | No Buttons
|-
| class="EnHack-addy" | 0x0001
| class="EnHack-comments" | A
|-
| class="EnHack-addy" | 0x0002
| class="EnHack-comments" | B
|-
| class="EnHack-addy" | 0x0004
| class="EnHack-comments" | X
|-
| class="EnHack-addy" | 0x0008
| class="EnHack-comments" | Y
|-
| class="EnHack-addy" | 0x0010
| class="EnHack-comments" | Start
|-
| class="EnHack-addy" | 0x0100
| class="EnHack-comments" | D-Pad Left
|-
| class="EnHack-addy" | 0x0200
| class="EnHack-comments" | D-Pad Right
|-
| class="EnHack-addy" | 0x0400
| class="EnHack-comments" | D-Pad Down
|-
| class="EnHack-addy" | 0x0800
| class="EnHack-comments" | D-Pad Up
|-
| class="EnHack-addy" | 0x1000
| class="EnHack-comments" | Z
|-
| class="EnHack-addy" | 0x2000
| class="EnHack-comments" | R (Digital Click)
|-
| class="EnHack-addy" | 0x4000
| class="EnHack-comments" | L (Digital Click)
|-
! class="EnHack-addy" colspan="2" | GBA Face Buttons
|-
! class="EnHack-addy" colspan="2" | Note: This is for games that use the GBA as a controller.<br /> Note: Values can be added together for use as button combos.
|-
| class="EnHack-addy" | 0x00
| class="EnHack-comments" | No Buttons
|-
| class="EnHack-addy" | 0x01
| class="EnHack-comments" | A
|-
| class="EnHack-addy" | 0x02
| class="EnHack-comments" | B
|-
| class="EnHack-addy" | 0x04
| class="EnHack-comments" | Select
|-
| class="EnHack-addy" | 0x08
| class="EnHack-comments" | Start
|-
| class="EnHack-addy" | 0x10
| class="EnHack-comments" | D-Pad Right
|-
| class="EnHack-addy" | 0x20
| class="EnHack-comments" | D-Pad Left
|-
| class="EnHack-addy" | 0x40
| class="EnHack-comments" | D-Pad Up
|-
| class="EnHack-addy" | 0x80
| class="EnHack-comments" | D-Pad Down
|}
==Setting up GCNrd==
==Using GCNrd==
==Creating Master Codes==
==PowerPC Assembly==
==Using GCNrd to Create Assembly Hacks==


{{Template: EnHacklopedia_Legal}}
{{Template: EnHacklopedia_Legal}}
[[Category: EnHacklopedia]]
[[Category: EnHacklopedia]]

Revision as of 07:35, 3 December 2008

EnHacklopedia >> {{ #ifeq: Hacking GameCube | EnHacklopedia | Index | Hacking GameCube }}



Encryption on GCN AR Codes

Encryption is a mask on data which may or may not contain more data itself.

Encrypted codes are formatted for use in the ActionReplay. They look like this:
All Evidence Max
G12C-TMX0-WRT5C
G2ND-C1RJ-G4TZ1

Decrypted codes are in raw format and can be edited. They look like this:
All Evidence Max
00690E90 000004FF

Codes for the GCN AR are encrypted for a number of reasons, just the top line of every encrypted code does three things meant to prevent user error:

  1. Tells what region the code is for.
    • USA [often called NTSC or NTSC-U]
    • EU [often called PAL]
    • Japan [sometimes called JP or NTSC-J]
  2. Tells if the code has already been entered.
    • Each code has a unique ID among the codes for that game.
      GCNCrypt gives each code its own random ID and has such a small chance of overlapping at any random point that it wasn't even worth mentioning.
  3. Tells what game the code is for via the "Game ID" which can be seen at the bottom of [#encryption_how_to GCNCrypt].

The encryption of the codes also allows the ActionReplay to check for accuracy of what was entered beyond where it belongs. When a new code is entered into the AR it decrypts it, if it could not decrypt it then an "Invalid Code" error shows up.

How to Encrypt/Decrypt Codes

Encrypting and Decrypting codes for the GameCube ActionReplay requires Parasyte's GCNCrypt program from the GCN Tools.
Note: Once a game's AR code is decrypted in GCNCrypt, if the Auto Identifier box is checked, it will set the Game ID and Region so any code can be changed or added then encrypted for the same game.

To decrypt an encrypted code, paste the encrypted code into the left text box in GCNCrypt then press the "Decrypt" button at the bottom. Output is on the right and can be copy/pasted onto the left for editing.
Many times after decrypting a code, the output won't be used. Hackers often decrypt codes from a game to automatically set the Region and Game ID for their new codes.
However, if a code was decrypted to be edited.. this is important:
Take the encrypted code, say this one:
All Evidence Max
G12C-TMX0-WRT5C
G2ND-C1RJ-G4TZ1

and then decrypt it in GCNCrypt, and this is the output:
All Evidence Max
01E22DC2 08000000
00690E90 000004FF

If the Auto Identifier box is checked (it should be) then copy the output over to the left and delete the top line of the code. This is done because- as said before- each time a code is encrypted, the top line gets added according to the Region and Game ID.
After that what's left is:
All Evidence Max
00690E90 000004FF

Now the code can be edited according to the AR code types below. After editing is done simply press "Encrypt" and copy the output on the right!


AR Code Types

The single-line GameCube ActionReplay code types are the first two hex digits of a decrypted code. GameCube's memory range is from 0x80000000 to 0x817FFFFF so if the code's address is greater or equal to 0x81000000 then the code type gets 0x01 added to it. For the addresses used in the code types below, "rrrrrr" signifies that address. These are of course, decrypted.

Type Description
RAM Writes
  • RAM Write and Fill
    • 8-Bit
      00rrrrrr xxxxxxyy
    • 16-Bit
      02rrrrrr xxxxyyyy
    • 32-Bit
      04rrrrrr yyyyyyyy
xxxxxx: Number of bytes to write, zero-based (000000 writes yy to 0x80rrrrrr, 000001 writes yy to 0x80rrrrrr and to rrrrrr+0x01)
yy: Byte to write.

xxxx: Number of halfwords to write, zero-based (0000 writes yyyy to 0x80rrrrrr, 0001 writes yy to 0x80rrrrrr and to 0x80rrrrrr+0x02)
yyyy: Halfword to write.

yyyyyyyy: Word to write.

  • Struct Write (Pointers)
    • 8-Bit
      40rrrrrr xxxxxxyy
    • 16-Bit
      42rrrrrr xxxxyyyy
    • 32-Bit
      44rrrrrr yyyyyyyy
xxxxxx: Byte offset from pointer.
yy: Byte to write to address ((pointer at 80rrrrrr)+offset)

xxxx: Halfword offset from pointer.
yyyy: Halfword to write to address ((pointer at 80rrrrrr)+offset*2)

yyyyyyyy: Word to write to pointed address (value at the pointer address of 80rrrrrr)

  • RAM Fill and Slide
    • 8-Bit
      00000000 80rrrrrr
      000000yy xxvvzzzz
    • 16-Bit
      00000000 82rrrrrr
      0000yyyy xxvvzzzz
    • 32-Bit
      00000000 84rrrrrr
      yyyyyyyy xxvvzzzz
yy: Byte to write for fill and slide, beginning at address
xx: Value increment (signed)
vv: Number of bytes to write, zero-based
zzzz: Address increment (signed)

yyyy: Halfword to write for fill and slide, beginning at address
xx: Value increment (signed)
vv: Number of halfwords to write, zero-based
zzzz: Address increment (signed)

yyyyyyyy: Word to write for fill and slide, beginning at address
xx: Value increment (signed)
vv: Number of words to write, zero-based
zzzz: Address increment (signed)

TODO: Check and note what happens when vv is 00, 01, etc.

  • Signed Increment/Decrement
    • 8-Bit
      80rrrrrr 000000yy
    • 16-Bit
      82rrrrrr 0000yyyy
    • 32-Bit
      84rrrrrr yyyyyyyy
    • Extended
      86rrrrrr yyyyyyyy

Note: For signed values see "Signed Searches" in Generic Code Hacking.

yy: Signed byte to add to the value at address.

yyyy: Signed halfword to add to the value at address.

yyyyyyyy: Signed word to add to the value at address.

yyyyyyyy: Number to add to single precision (32-bit) float at address.
Note: Number should be entered as a decimal value.
TODO: Check exactly what kind of values this code type uses. (float, signed hex, unsigned hex, decimal[?], etc)

Conditional: If Equal
  • Next Line
    • 8-Bit
      08rrrrrr 000000yy
    • 16-Bit
      0Arrrrrr 0000yyyy
    • 32-Bit
      0Crrrrrr yyyyyyyy
  • Next 2 Lines
    • 8-Bit
      48rrrrrr 000000yy
    • 16-Bit
      4Arrrrrr 0000yyyy
    • 32-Bit
      4Crrrrrr yyyyyyyy
  • All until.. (see note)
    • 8-Bit
      88rrrrrr 000000yy
    • 16-Bit
      8Arrrrrr 0000yyyy
    • 32-Bit
      8Crrrrrr yyyyyyyy
  • All Codes
    • 8-Bit
      C8rrrrrr 000000yy
    • 16-Bit
      CArrrrrr 0000yyyy
    • 32-Bit
      CCrrrrrr yyyyyyyy
yy: Byte for comparison to the value at address.

yyyy: Halfword for comparison to the value at address.

yyyyyyyy: Word for comparison to the value at address.

All until.. note:
The conditional will activate all of the code's following lines until a "00000000 40000000" line is reached. (just put that line in the code when and where it's needed)
Conditional: If Not Equal
  • Next Line
    • 8-Bit
      10rrrrrr 000000yy
    • 16-Bit
      12rrrrrr 0000yyyy
    • 32-Bit
      14rrrrrr yyyyyyyy
  • Next 2 Lines
    • 8-Bit
      50rrrrrr 000000yy
    • 16-Bit
      52rrrrrr 0000yyyy
    • 32-Bit
      54rrrrrr yyyyyyyy
  • All until.. (see note)
    • 8-Bit
      90rrrrrr 000000yy
    • 16-Bit
      92rrrrrr 0000yyyy
    • 32-Bit
      94rrrrrr yyyyyyyy
  • All Codes
    • 8-Bit
      D0rrrrrr 000000yy
    • 16-Bit
      D2rrrrrr 0000yyyy
    • 32-Bit
      D4rrrrrr yyyyyyyy
yy: Byte for comparison to the value at address.

yyyy: Halfword for comparison to the value at address.

yyyyyyyy: Word for comparison to the value at address.

All until.. note:
The conditional will activate all of the code's following lines until a "00000000 40000000" line is reached. (just put that line in the code when and where it's needed)
Conditional: If Less (Signed)

Note: For signed values see "Signed Searches" in Generic Code Hacking.

  • Next Line
    • 8-Bit
      18rrrrrr 000000yy
    • 16-Bit
      1Arrrrrr 0000yyyy
    • 32-Bit
      1Crrrrrr yyyyyyyy
  • Next 2 Lines
    • 8-Bit
      58rrrrrr 000000yy
    • 16-Bit
      5Arrrrrr 0000yyyy
    • 32-Bit
      5Crrrrrr yyyyyyyy
  • All until.. (see note)
    • 8-Bit
      98rrrrrr 000000yy
    • 16-Bit
      9Arrrrrr 0000yyyy
    • 32-Bit
      9Crrrrrr yyyyyyyy
  • All Codes
    • 8-Bit
      D8rrrrrr 000000yy
    • 16-Bit
      DArrrrrr 0000yyyy
    • 32-Bit
      DCrrrrrr yyyyyyyy
yy: Byte for comparison to the value at address.

yyyy: Halfword for comparison to the value at address.

yyyyyyyy: Word for comparison to the value at address.

All until.. note:
The conditional will activate all of the code's following lines until a "00000000 40000000" line is reached. (just put that line in the code when and where it's needed)
Conditional: If Greater (Signed)

Note: For signed values see "Signed Searches" in Generic Code Hacking.

  • Next Line
    • 8-Bit
      20rrrrrr 000000yy
    • 16-Bit
      22rrrrrr 0000yyyy
    • 32-Bit
      24rrrrrr yyyyyyyy
  • Next 2 Lines
    • 8-Bit
      60rrrrrr 000000yy
    • 16-Bit
      62rrrrrr 0000yyyy
    • 32-Bit
      64rrrrrr yyyyyyyy
  • All until.. (see note)
    • 8-Bit
      A0rrrrrr 000000yy
    • 16-Bit
      A2rrrrrr 0000yyyy
    • 32-Bit
      A4rrrrrr yyyyyyyy
  • All Codes
    • 8-Bit
      E0rrrrrr 000000yy
    • 16-Bit
      E2rrrrrr 0000yyyy
    • 32-Bit
      E4rrrrrr yyyyyyyy
yy: Byte for comparison to the value at address.

yyyy: Halfword for comparison to the value at address.

yyyyyyyy: Word for comparison to the value at address.

All until.. note:
The conditional will activate all of the code's following lines until a "00000000 40000000" line is reached. (just put that line in the code when and where it's needed)
Conditional: If Less (Unsigned)

Note: For unsigned values see "Signed Searches" in Generic Code Hacking.

  • Next Line
    • 8-Bit
      28rrrrrr 000000yy
    • 16-Bit
      2Arrrrrr 0000yyyy
    • 32-Bit
      2Crrrrrr yyyyyyyy
  • Next 2 Lines
    • 8-Bit
      68rrrrrr 000000yy
    • 16-Bit
      6Arrrrrr 0000yyyy
    • 32-Bit
      6Crrrrrr yyyyyyyy
  • All until.. (see note)
    • 8-Bit
      A8rrrrrr 000000yy
    • 16-Bit
      AArrrrrr 0000yyyy
    • 32-Bit
      ACrrrrrr yyyyyyyy
  • All Codes
    • 8-Bit
      E8rrrrrr 000000yy
    • 16-Bit
      EArrrrrr 0000yyyy
    • 32-Bit
      ECrrrrrr yyyyyyyy
yy: Byte for comparison to the value at address.

yyyy: Halfword for comparison to the value at address.

yyyyyyyy: Word for comparison to the value at address.

All until.. note:
The conditional will activate all of the code's following lines until a "00000000 40000000" line is reached. (just put that line in the code when and where it's needed)
Conditional: If Greater (Unsigned)

Note: For unsigned values see "Signed Searches" in Generic Code Hacking.

  • Next Line
    • 8-Bit
      30rrrrrr 000000yy
    • 16-Bit
      32rrrrrr 0000yyyy
    • 32-Bit
      34rrrrrr yyyyyyyy
  • Next 2 Lines
    • 8-Bit
      70rrrrrr 000000yy
    • 16-Bit
      72rrrrrr 0000yyyy
    • 32-Bit
      74rrrrrr yyyyyyyy
  • All until.. (see note)
    • 8-Bit
      B0rrrrrr 000000yy
    • 16-Bit
      B2rrrrrr 0000yyyy
    • 32-Bit
      B4rrrrrr yyyyyyyy
  • All Codes
    • 8-Bit
      F0rrrrrr 000000yy
    • 16-Bit
      F2rrrrrr 0000yyyy
    • 32-Bit
      F4rrrrrr yyyyyyyy
yy: Byte for comparison to the value at address.

yyyy: Halfword for comparison to the value at address.

yyyyyyyy: Word for comparison to the value at address.

All until.. note:
The conditional will activate all of the code's following lines until a "00000000 40000000" line is reached. (just put that line in the code when and where it's needed)
Conditional: If Bitwise AND

Note: For Bitwise AND see "AND" in Number Formats.

  • Next Line
    • 8-Bit
      38rrrrrr 000000yy
    • 16-Bit
      3Arrrrrr 0000yyyy
    • 32-Bit
      3Crrrrrr yyyyyyyy
  • Next 2 Lines
    • 8-Bit
      78rrrrrr 000000yy
    • 16-Bit
      7Arrrrrr 0000yyyy
    • 32-Bit
      7Crrrrrr yyyyyyyy
  • All until.. (see note)
    • 8-Bit
      B8rrrrrr 000000yy
    • 16-Bit
      BArrrrrr 0000yyyy
    • 32-Bit
      BCrrrrrr yyyyyyyy
  • All Codes
    • 8-Bit
      F8rrrrrr 000000yy
    • 16-Bit
      FArrrrrr 0000yyyy
    • 32-Bit
      FCrrrrrr yyyyyyyy
yy: Byte for comparison to the value at address.

yyyy: Halfword for comparison to the value at address.

yyyyyyyy: Word for comparison to the value at address.

All until.. note:
The conditional will activate all of the code's following lines until a "00000000 40000000" line is reached. (just put that line in the code when and where it's needed)


Button Values

Value Button
Big Endian (More Common)
Note: Values can be added together for use as button combos.
0x0000 No Buttons
0x0001 D-Pad Left
0x0002 D-Pad Right
0x0004 D-Pad Down
0x0008 D-Pad Up
0x0010 Z
0x0020 R (Digital Click)
0x0040 L (Digital Click)
0x0100 A
0x0200 B
0x0400 X
0x0800 Y
0x1000 Start
Little Endian (Less Common)
Note: Values can be added together for use as button combos.
0x0000 No Buttons
0x0001 A
0x0002 B
0x0004 X
0x0008 Y
0x0010 Start
0x0100 D-Pad Left
0x0200 D-Pad Right
0x0400 D-Pad Down
0x0800 D-Pad Up
0x1000 Z
0x2000 R (Digital Click)
0x4000 L (Digital Click)
GBA Face Buttons
Note: This is for games that use the GBA as a controller.
Note: Values can be added together for use as button combos.
0x00 No Buttons
0x01 A
0x02 B
0x04 Select
0x08 Start
0x10 D-Pad Right
0x20 D-Pad Left
0x40 D-Pad Up
0x80 D-Pad Down


Setting up GCNrd

Using GCNrd

Creating Master Codes

PowerPC Assembly

Using GCNrd to Create Assembly Hacks

Legal


All files (HTML, CSS, images) included in EnHacklopedia are licensed under the Creative Commons Attribution-ShareAlike 3.0 License. All authors contributing to EnHacklopedia should be made aware of the license before contributing. If the author does not agree to the licensing, his or her contributions will not be accepted into the project.