Jump to content

Guides:Goldenrod Glitch Pokédex Mode ACE setup (FR): Difference between revisions

m
no edit summary
mNo edit summary
 
(3 intermediate revisions by the same user not shown)
Line 36:
 
* Obtaining duplicate key items requires obtaining a glitch pokémon that cannot be manually released.
* Hatching a $00 species pokémon sets the seen/caught flags for an pokémon species that should not exist.
* Duplicate key item swap glitch removes the CANCEL button from the key item pocket.
* Buying or obtaining additional poké balls causes issues when done with an extended ball pocket.
Line 158 ⟶ 157:
The party will now contain two Drowzee/Machop that will both be holding a bicycle each. Take these held items to add them to the bottom of the Key Item list. '''It is now safe to save.'''
 
===Setting up glitch pokédex mode ACE===
 
# Arrange the Ball pocket as follows:
Line 403 ⟶ 402:
||
21 7A D6 2A 23 F6 84 22 AF 21 E1 D5 47 4E 09 23
36 FF 2E FC 36 01 21 0322 DCDA CB4E BE35 2E09 2336 CB BE 21FF C9
22 DA 4E 35 09 36 FF C9
|}
 
Line 411 ⟶ 409:
# Add a CANCEL button at the end of the key item list.
# Set the amount of items in the ball pocket to 1.
# Remove the seen/caught flags of the hatched $00 species.
# Remove the glitch pokémon at the end of the party.
 
===Optional: Altering the current Pokédex Mode===
 
This code will alter the current active Pokédex Mode. By default, it sets the Pokédex Mode to zero, making it possible to use the Pokédex normally again. By changing the value marked in bold, you can change the value that the Pokédex Mode will be set to. You can reactivate Mode 25, the Mode that executes from $F8CDD8CD onward, by changing the value in bold to $19.
 
{| class="wikitable" style="margin-left: auto; margin-right: auto; border: none;"
Line 466 ⟶ 463:
[[File:Box French GS Reset.png]]
|}
* Make sure to put the "BOXCODES" nicknamed pokémon in the 2nd party slot.
* Write a new mail with the following content:
* Use TM25 to execute the code. If the game crashes, double check the box name code and ensure you've performed every step of the process correctly.
* If the code executes succesfully, the "MAILWRITER" nicknamed pokémon has now been repaired.
 
=Appendix=
 
==Plain text transcripts of codes==
 
* Glitch Pokédex mail
 
{| class="wikitable" style="margin-left: auto; margin-right: auto; border: none;"
! Language !! Mail
|
|-
[[File:Mail French GS.png]]
! scope="row" | French
||
p 0 ç é 5 4 j' 7 é 4 4 j' é é 6 4
é Mn 2 j' W ♀ j' + 's ç 2 Pk p 0 - 1
|}
 
* Before using TM25, make sure to re-read the mail.
* Setup box name code
* Use TM25 to execute the code. If the game crashes, double check the box name code and ensure you've performed every step of the process correctly
 
* If the code executes succesfully, the "MAILWRITER" nicknamed pokémon has now been repaired.
{| class="wikitable" style="margin-left: auto; margin-right: auto; border: none;"
! Language !! Box names
|-
! scope="row"| French
||
Box 1: é 5 2 ? O é 2 2
Box 2: n' n' n' n' n' p ♀ Pk
Box 3: 0 g ♂ u' s é 6 2
Box 4: ? b é ♀ 2 u' ♂ 5
Box 5: é 3 2 u' t é 0 2
Box 6: é ; 4 p u' 6 ♀ ]
Box 7: ♀ ♀ ♀ ♀ ♀ 's 5 5
Box 8: ? ♀ é [ 4 u' x 5
Box 9: é ( 4 H u' z 5 5
Box 10: é : 4 * é ) 4 n'
|}
 
* Reset box name code (Glitch Pokédex Mode)
 
{| class="wikitable" style="margin-left: auto; margin-right: auto; border: none;"
! Language !! Box names
|-
! scope="row" | French
||
Box 1: p u' 6 é ) 4 u' F
Box 2: é ; 4 n' n' p ♀ Pk
Box 3: 0 g ♂ T é [ 4 5
Box 4: u' X é ( 4 H u' z
Box 5: é : 4 n'
|}
 
* Reset box name code (Wrong Pocket TM)
 
{| class="wikitable" style="margin-left: auto; margin-right: auto; border: none;"
! Language !! Box names
|-
! scope="row" | French
||
Box 1: p u' 6 é ) 4 u' F
Box 2: é ; 4 u' I é [ 4
Box 3: u' w é ( 4 H u' z
Box 4: é : 4 n'
|}
 
==In-depth explanation of the setup==
 
===Effect of the glitch pokédex mode===
 
In the 2nd generation of Pokémon games, the Pokédex offers three different modes of sorting pokémon species (New, Old, A-Z). When the Pokédex is opened, the game checks which mode was last active, then launches a function to sort all species. Since the game needs to know which mode was last active, the last used Pokédex mode is stored in RAM at address $D67E.
 
By swapping an item stack using the extended Ball Pocket, we can directly overwrite the value for the last used mode. When the Pokédex is next opened, the game will read this value and attempt to launch an invalid sorting function depending on the value used, some of which will trigger ACE.
 
For the French versions of Gold & Silver, mode 25 ($19) will trigger ACE from $D8CD onward, which corresponds to the 6th character of the 2nd box name.
 
===Effect of the mail===
 
The last read mail is buffered from $CEED onward. Converting the characters from the mail to assembly results in the following, ordered by language:
 
====French====
 
<pre>
Mail
 
AF xor a ; a = $00
F6 BF or $BF ; a = $BF
EA FB FA ld ($FAFB), a
D6 FD sub $FD ; a = $C2
EA FA FA ld ($FAFA), a
D6 EA sub $EA ; a = $D8
EA FC FA ld ($FAFC), a
4E ld c, (hl)
EA B8 D5 ld (wItems), a ; Change first item in main item pocket to TM25
D6 96 sub $96 ; a = $42
F5 push af
DE E4 sbc $E4 ; a = $5E, set carry flag
DC BF F8 call c, wBoxNames
E1 pop hl ; h = $42
AF xor a ; a = $00
F6 E3 or $E3 ; a = $E3
F7 rst30h ; Jump to $10:42E3, final bytes of Pokedex_ReinitDexEntryScreen. This will set $CE63 to $FF, causing immediate exit of Pokédex after return
 
Bootstrap ($FAFA, 5th party pokémon's stat experience)
 
C2 BF D8 jr nz, wBoxNames
</pre>
 
===Effect of the setup box name code===
 
Converting the characters from box names to assembly results in the following code. Please note that the box name code overwrites part of itself, the translated assembly assumes the code was already used once.
 
The code overwrites part of itself to call the byteFill function. This will fill the area between $D57E and $D5AF with $FF values, setting all 50 TM quantities to 255. Separately, this code overwrites the latter half of party pokémon #5's stat experience data, allowing it to function as a TM25 bootstrap that redirects execution to the Mail Writer.
 
====French====
 
<pre>
Box 1: $D8BF
EA FB F8 ld ($F8FB), a ; a = $5E
E6 8E and $8E ; a = $0E
EA F9 F8 ld ($F8F9), a
50 ld d, b
 
Box 2: $D8C8
D9 reti
D9 reti
D9 reti
D9 reti
D9 reti
AF xor a ; Entry point of mode 25, a = $00
F5 push af
E1 pop hl ; hl = $0080
50 ld d; b
 
Box 3: $D8D1
F6 A6 or $A6 ; a = $A6
EF rst28h JumpTable; Due to ROM header structure, call $CEEA, three bytes before the last read mail
DE B2 sbc $B2 ; a = $31
EA FC F8 ld ($F8FC), a
FB ei
50 ld d, b
 
Box 4: $D8DA
E6 A1 and $A1 ; a = $21
EA F5 F8 ld ($F8F5), a
DE EF sbc $EF ; a = $32, carry flag set
FB ei
50 ld d, b
 
Box 5: $D8E3
EA F8 F8 ld ($F8F8), a
DE B3 sbc $B3 ; a = $7E
EA F6 F8 ld ($FD8F6), a
50 ld d, b
 
Box 6: $D8EC
EA 9D FA ld ($FA9D), a
AF xor a ; a = $00, carry flag reset
DE FC sbc $FC ; a = $04, carry flag set
F5 push af
9F sbc a ; a = $FF, carry flag set
21
 
Box 7: $D8F5
7E F5 ld hl, wTMsHMs
01 32 00 ld bc, $0032
DC 5E 31 call c, byteFill
50 ld d, b
 
Box 8: $D8FE
E6 F5 and $F5 ; a = $F5, carry flag reset
EA 9E FA ld ($FA9E), a
DE B7 sub $B7 ; a = $3E, carry flag reset
FB ei
50 ld d, b
 
Box 9: $D907
EA 9A FA ld ($FA9A), a
87 add a ; a = $7C, carry flag reset
DE B9 sbc $B9 ; a = $C3, carry flag set
FB ei
FB ei
50 ld d, b
 
Box 10: $D910
EA 9C FA ld ($FA9C), a
F1 pop af ; a = $04, carry flag set
EA 9B FA ld ($FA9B), a
D9 ret c
50 ld d, b
 
Party pokémon #3's stat experience, starting from $DA9A
3E 04 ld a, $04
C3 7E F5 jp wTMsHMs
</pre>
 
===Effect of the TM code===
 
Converting the TM quantities to assembly results in the following code. Please note that this code requires a value of $04 in register a in order to properly work.
 
====French====
 
<pre>
11 55 DD ld de, $DD55
D5 push de
D5 push de ; .nextMail
D5 push de
21 2B 62 ld hl, _ComposeMailMessage
CF rst08h, FarCall a:hl
E1 pop hl
D1 pop de
2A ldi a, (hl) ; .continue
FE 50 cp $50
38 FB jr c, .continue
28 0A jr z, .terminator
87 add a, a
86 add a, (hl)
12 ld (de), a
13 inc de
23 inc hl
81 add a, c
4F ld c, a
12 ld (de), a
18 EF jr .continue
21 01 C4 ld hl, $C401 ; .screenLoop
4D ld c, l
CD 90 3A call PrintBCDNumber.loop
1B dec de ; .goBack
CD 3B 37 call JoyTextDelay_ForcehJoyDown
BD cp a, l ; l = $04
28 D9 jr z, .nextMail
38 F0 jr c, .displayLoop
FE 08 cp $08
C8 ret z
18 F2 jr .goBack
</pre>
 
===Effect of the side effect-fixing code===
 
When using the Mail Writer, the assembly from this code is directly written and executed as follows:
 
<pre>
21 7A D6 ld hl, $D67A ; Address where the original pokégear flags have been displaced to
2A ldi a, (hl)
23 inc hl
F6 84 or $84 ; Ensures that minimal pokégears are restored if $D67A is empty
22 ldi (hl), a
AF xor a ; a = $00
21 E1 D5 ld wNumKeyItems ; Current amount of key items in key item pocket
47 ld b, a ; b = $00
4E ld c, (hl) ; Set c to amount of key items
09 add hl, bc
23 inc hl
36 FF ld (hl), $FF ; Restore cancel button to key item pocket
2E FC ld l, $FC ; hl targets wNumBalls
36 01 ld (hl), $01 ; Set current amount of balls in ball pocket to 1
21 22 DA ld hl, wPartyCount
4E ld a, (hl)
35 dec (hl) ; Remove last party pokémon
09 add hl, bc
36 FF ld (hl), $FF ; Re-add proper terminator to party list
C9 ret
</pre>
 
===Effect of the pokédex mode-altering code===
 
When using the Mail Writer, the assembly from this code is directly written and executed as follows:
 
<pre>
3E XX ld a, $XX
EA 7E D6 ld (wLastDexMode), a
C9 ret
</pre>
 
===Effect of the reset box name code (Glitch Pokédex Mode)===
 
Converting the characters from box names to assembly results in the following code. This code overwrites the latter half of party pokémon #3's stat experience data, allowing it to function as a TM25 bootstrap that redirects execution to the Mail Writer.
 
====French====
 
<pre>
Box 1: $D8BF
AF xor a ; a = $00, reset carry flag
DE FC sbc $FC ; a = $04, set carry flag
EA 9B FA ld ($FA9B), a
D6 85 sbc $85 ; a = $7E, set carry flag
50 ld d, b
 
Box 2: $D8C8
EA 9D FA ld ($FA9B), a
D9 reti
D9 reti
AF xor a ; Entry point of mode 25, a = $00
F5 push af
E1 pop hl ; hl = $0080
50 ld d, b
 
Box 3: $D8D1
F6 A6 or $A6 ; a = $A6
EF rst28h JumpTable; Due to ROM header structure, call $CEEA, three bytes before the last read mail
93 sub e ; a = $F5, set carry flag
EA 9E FA ld ($FA9E), a
FB ei
50 ld d; b
 
Box 4: $D8DA
DE 97 sub $97 ; a = $3E, reset carry flag
EA 9A FA ld ($FA9A), a
87 add a, a ; a = $7C, reset carry flag
DE B9 sbc $B9 ; a = $C3, set carry flag
50 ld d, b
 
Box 5: $D8E3
EA 9C FA ld ($FA9C), a
D9 reti
50 ld d, b
 
Party pokémon #3's stat experience, starting from $DA9A
3E 04 ld a, $04
C3 7E F5 jp wTMsHMs
</pre>
 
===Effect of the reset box name code (Wrong Pocket TM)===
 
Converting the characters from box names to assembly results in the following code. This code overwrites the latter half of party pokémon #3's stat experience data, allowing it to function as a TM25 bootstrap that redirects execution to the Mail Writer.
 
This code requires a bootstrap pokémon in the 2nd party slot that redirects execution to box names.
 
====French====
 
<pre>
Box 1: $D8BF
AF xor a ; a = $00, reset carry flag
DE FC sbc $FC ; a = $04, set carry flag
EA 9B FA ld ($FA9B), a
D6 85 sbc $85 ; a = $7E, set carry flag
50 ld d, b
 
Box 2: $D8C8
 
EA 9D FA ld ($FA9B), a
DE 88 sbc $88 ; a = $F5, set carry flag
EA 9E FA ld ($FA9E), a
50 ld d; b
 
Box 3: $D8D1
 
DE B6 sub $D6 ; a = $3E, reset carry flag
EA 9A FA ld ($FA9A), a
87 add a, a ; a = $7C, reset carry flag
DE B9 sbc $B9 ; a = $C3, set carry flag
50 ld d, b
 
Box 4: $D8DA
 
EA 9C FA ld ($FA9C), a
D9 reti
50 ld d, b
 
Party pokémon #3's stat experience, starting from $DA9A
3E 04 ld a, $04
C3 7E F5 jp wTMsHMs
</pre>
 
[[Category:Guides]]
1,560

edits

Cookies help us deliver our services. By using our services, you agree to our use of cookies.