Jump to content

Guides:Wrong Pocket TM ACE setup (JP): Difference between revisions

m
No edit summary
Tags: Mobile edit Mobile web edit
 
(6 intermediate revisions by the same user not shown)
Line 7:
If you encounter any issues when going through this guide or would like to provide feedback, please contact TimoVM on the [https://discord.gg/EA7jxJ6 Glitch City Research Institute Discord].
 
=Setting up initial ACE=
=General overview=
 
In the generation 2 games, items are stored in their own dedicated compartiments. All TMs and HMs are stored in their own pocket, all key items are kept in their own pocket, etc..
Line 22:
'''When starting from a new game, it is recommended to NEVER have had a total 6 pokémon in the party. This allows you to use an easier and faster alternative method to obtain a bad clone.'''
 
===A note on the side effects of the method described below===
 
The method described on this page requires fairly heavy abuse of glitches that will produce a small amount of side effects. All these side effects can be fixed with later applications of ACE and are never permanently harmful for the game in any way:
Line 31:
Later parts of the guide will offer methods to fix these side effects.
 
==Step 1: Requirements for this guide==
 
'''When playing on original cartridge or on emulator, it is absolutely required to have used the Clear Save Data feature (press SELECT + UP + B on the title screen) at least once since owning the game.'''
Line 43:
* If your trainer ID does not fulfill both requirements, one of the methods described in the guide will not work correctly. When starting from a new save, it is recommended to reset your game until you get a compatible trainer ID. If you do not wish to reset your save, a workaround is provided that requires you to not have traded the Machop in Goldenrod City yet.
 
==Step 2a: Obtaining a bad clone through bug catching contest==
 
Thanks to a JP Gold & Silver exclusive glitch, it is possible to exploit the bug catching contest to obtain a bad clone.
Line 49:
In combination with the Day Care, we can turn this bad clone into a glitch pokémon that we'll be using to perform a variety of glitches.
 
===Requirements===
 
* '''This method is only possible if you've never had a full party at any point since starting the game.''' Follow step 1b2b if you don't fulfill this requirement.
* Catch an Abra (10% spawn rate on route 34 all day). Save and reset to save on poké balls used.
* In-game time needs to be tuesday/thursday/saturday to be able to participate with the bug catching contest.
 
===Obtaining the bad clone===
 
# Have 5 pokémon in your party, with Abra as the first party pokémon.
Line 68:
Now that you have the bad clone, continue to step 3.
 
==Step 2b: Obtaining a bad clone through resetting while saving==
 
A bad clone is created when you reset the game at a very specific time frame where:
Line 76:
In combination with the Day Care, we can turn this bad clone into a glitch pokémon that we'll be using to perform a variety of glitches.
 
===Requirements===
 
* A box that has never been full at any point in the past.
Line 82:
* An additional pokémon that you can deposit to the PC.
 
===Obtaining the bad clone===
 
# Deposit any party pokémon to the current active box.
Line 98:
'''After obtaining the bad clone, you can proceed to step 3.'''
 
==Step 3: Obtaining additional bicycles and getting TM17 in the ball pocket==
 
This works in any language version on any generation 2 game, the method is based on a translation of a [[https://nakayoshibaddi.hatenadiary.jp/entry/2017/08/15/223932 blogpost from 任意コード]].
Line 112:
# Using the [[Pokémon cloning (Generation II)|cloning glitch]], get at least six copies of Machop (it is recommended to keep some spares just to be safe). We'll be using these Machop in the remainder of the setup.
 
===Getting everything ready for the setup===
 
# If you haven't done so yet, make sure to catch a Drowzee. Can be found on route 34, 50% encounter odds at any time.
Line 122:
## Clone the Bad Clone at least once, for a total of two Bad Clones. '''Ensure that the Bad Clone and all its clones are at lvl 0. You can keep it at lvl 0 by only withdrawing it using "Move pkmn w/o mail".'''
 
===Collecting the items and the party needed===
 
Have the following items in the ball pocket:
* Slot 1: Poké Ball x1
* Slot 2 and beyond: empty
 
(Both can be bought in the Goldenrod Dept. Store if needed, make sure to store or sell everything else you have in the Ball pocket.)
 
Have the following items in the key item pocket:
Line 168 ⟶ 166:
Keep in mind that we'll be corrupting both the Drowzees and the unwanted pokémon. Make sure to only use pokémon you do not wish to keep. The normal pokémon will not be corrupted at all during this process.
 
===Obtaining duplicate bicycles===
 
# Deposit the bad clone in the daycare and retrieve it. '''It will now have turned into a glitch pokémon'''. Arrange your party as follows:
Line 184 ⟶ 182:
The party will now contain two Drowzee 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.'''
 
===Obtaining TM17===
 
# Go to the bottom of the key item list. The bottom of the list should consist of three separate bicycles.
Line 193 ⟶ 191:
Do not worry about the glitch pokémon that's still in your party or the key item list that lacks a cancel button, we'll fix both in the last step of the guide.
 
=Final=Step step4: How to execute ACE using TM17==
 
Now that we have obtained TM17 outside of the TM/HM pocket, we'll need to set up everything needed to actually safely use it. TM17's effect is to execute code starting from $DA47, which is near the end of party pokémon #1's data. What we'd like to do is to redirect it such that box names get executed instead:
Line 200 ⟶ 198:
* Prepare specific box names to run a simple test code.
 
===Preparing the party===
 
* Arrange your party like this:
Line 214 ⟶ 212:
'''In order to safely use TM17, it's required to put a lvl 0 Bad Clone in the second party slot, Drowzee holding TM41 in the third party slot and a pokémon nicknamed "てていリ".'''
 
===Testing the setup===
 
Now that you have set up a party for TM17 ACE, we'll rename box names to form a specific bit of code which we'll execute when we use TM17.
Line 232 ⟶ 230:
* Was the code correctly entered?
 
=WhatSetting toup do with a TM17an ACE setupenvironment=
 
Now that the ACE setup has been succesfully tested, we can start expanding the setup to more easily write arbitrary data. This will be done by installing the Mail writer, a small program installed using a set of box name codes.
 
==Step 5: Installing the Mail Writer==
Use the following link to continue to the next guide: [[User:TimoVM/Mail Writer GS (JP)|Mail writer GS (JP)]]
 
For the Japanese versions of Gold & Silver, the mail writer can easily be installed as a set of box name codes. Write the following box codes:
=Appendix: in-depth explanation of the setup=
 
{| class="wikitable" style="margin-left: auto; margin-right: auto; border: none;"
|
[[File:Box Japanese GS Setup.png]]
|}
 
After this is done, you can easily use the mail writer by going through the necessary steps and using TM17.
 
==Step 6: Using the Mail writer==
 
The mail writer will open a screen that asks you to write the contents of a mail. This is where you'll need to enter mail codes. Once done, use the "END" option to finish the mail.
 
This will cause the mail writer to convert the newly written code into assembly. It will also '''print a checksum''' (sum of all written values) on the lower left corner of the screen. This can be used to verify if a code was entered correctly.
 
Assembly can easily be converted to mail codes using [https://timovm.github.io/MailConverter/ TimoVM's MailConverter]. Simply paste the assembly of the code you wish to enter here, press "run" and the converter will automatically generate mail codes requiring the least amount of button presses to write.
 
===Controls===
 
Between entering mail codes, the mail writer will ask for user input.
* '''Press A''' to open a new mail and continue writing data.
* '''Press B''' to immediately jump to and start executing the newly written program. '''Only use this when you've finished every mail.'''
* '''Press any other button''' to go back one byte at a time to correct errors. '''If the printed checksum doesn't match the expected checksum, press DOWN 16 times to retry the last mail.''' This will also overwrite the printed checksum with the value at the currently selected address, giving you a method to check how far back you're going.
 
=What to do with the Mail writer=
 
The Mail writer allows you to easily write and execute arbitrary payloads. Aside from writing your own codes, we recommend the following:
* [[User:TimoVM/Mail Writer Codes|Mail codes]]: this page contains a collection of assembly for mail codes that can be used for a variety of common purposes such as editing pokémon, obtaining items, etc..
* [[User:TimoVM/RAM Writer|RAM writer]]: (recommended for more experienced users) this page contains the assembly for a large one-size-fits all program that allows you to edit any value in RAM with a user-friendly GUI. It will also fix the side effects of the ACE setup when you first run it.
 
=Appendix=
 
==Plain text transcripts of codes==
 
Testing box code name:
 
<pre>Box 1: ョ ベ ゥ シ ゆ の</pre>
 
Mail Writer:
 
<pre>Box 1: ヅ に わ ゆ ゆ ゾ ュ ぼ
Box 2: ゆ に ヂ ぺ な に ヨ プ
Box 3: ゅ ま む ゅ ご き き よ
Box 4: ぐ デ だ ガ ご き き よ
Box 5: キ デ ド ア ぺ デ ご ?
Box 6: だ ! ズ が と ぜ ォ ギ
Box 7: ビ ヘ ば で が ブ ブ ぜ
Box 8: げ ぜ ォ ま き ぐ ァ プ
Box 9: ダ れ か リ ダ リ だ ゥ</pre>
 
==In-depth explanation of the setup==
 
===Effect of the Bad Clone===
Line 264 ⟶ 312:
</pre>
 
===Effect of the test box name===
 
Box name data starts from $D8B2 onward. Converting the provided mail code to assembly results in the following:
Line 275 ⟶ 323:
</pre>
 
===Effect of the Mail Writer===
==Acknowledgements==
 
Box name data starts from $D8B2 onward. Converting the provided mail code to assembly results in the following:
Most of the setup of this page, with the exception of the final setup with the Bad Clone, Drowzee and nicknamed pokémon, were all previously referenced in a [https://flag3833753.hatenablog.com/entry/2022/08/17/192006 blogpost written by flag3833753].
 
<pre>
==Plain text transcripts of codes==
Box 1: $D8B2
11 C6 DC ld de, $DCC6
D5 push de
D5 push de ; .newMail
0E AE ld c, $AE ; c = $AE
3E 50 ld a, $50 ; a = $50
 
Box 2: $D8BB
Testing box code name:
D5 push de
C6 10 sub $A0 ; a = $60
47 ld b, a ; bc = $60AE
C5 push bc
C6 A4 add a, $A4 ; a = $04
42 ld b, d
50 ld d, b
 
Box 3: $D8C4
<pre>Box 1: ョ ベ ゥ シ ゆ の</pre>
E1 pop hl ; hl = $60AE
CF rst08H ; Farcall _ComposeMailMessage (a:hl = 04:60AE)
D1 pop de
E1 pop hl ; Set both hl and dc to the start of the newly written mail
2A ldi a, (hl) ; .loop
B7 or a, a
B7 or a, a
D6 50 sub $50
 
Box 4: $D8CD
28 13 jr, .terminator
30 05 jr, .character
2A ldi a, (hl) ; If terminator, escape loop. if newline, get new value for a and continue
B7 or a, a
B7 or a, a
D6 50 sub $50 ; Ensures that new character will result in the same value when combined with the next
 
Box 5: $D8D6
86 add (hl) ; .character
12 ld (de), a
13 inc de
80 add a, b
47 ld b, a ; Responsible for generating checksum
12 ld (de), a
2A ldi a, (hl) ; inc hl is not available, so this will have to do
E6 50 or $50 ; Ensures that carry flag is not set
 
Box 6: $D8DF
30 E7 jr nc, .loop
0C inc c ; .terminator, _ComposeMailMessage sets bc to 0000, so c = 01 after this part
26 C4 ld h, $C4
2E F4 ld l, $F4 ; hl = $C4F4, bottom left screen tile
06 50 ld b, $50 ; Ensures that b is consistent for the next call
 
Box 7: $D8E8
1A ld a, (de)
CD 3A 33 call PrintBCDNumber.loop + 01h ; PrintBCDNumber.loop itself can't be reached, so we skip forward one byte.
26 1B ld h, $1B ; .errorCorrection
1B dec de ; Calling PrintBCDNumber.loop with c = 01 advances de by 1.
2E 50 ld l, $50 ; hl = $1B50
 
Box 8: $D8F1
29 add hl, hl ; hl = $36A0
2E F4 ld l, $F4 ; hl = $36F4 (address of JoyTextDelay_ForcehJoyDown)
CF rst08H ; Farcall JoyTextDelay_ForcehJoyDown set a = current button state
B7 or a, a ; Are any buttons pressed? if not, ask for new button states
28 E9 jr z, .terminator
42 ld b, d
50 ld d, b
 
Box 9: $D8FA
0F rlca ; Is the a button pressed? If yes, start a new mail
DA B6 D8 jp c, .loop
0F rlca ; Is the b button pressed? If yes, return and execute newly written program.
D8 ret c ; If not, another button was pressed, so decrement de to allow user to correct errors
30 EA jr nc, .errorCorrection
</pre>
 
=Acknowledgements=
 
Most of the setup of this page, with the exception of the final setup and the Mail Writer program, were all previously referenced in a [https://flag3833753.hatenablog.com/entry/2022/08/17/192006 blogpost written by flag3833753].
 
[[Category:Guides]]
1,540

edits

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