Guides:SRAM Glitch ACE Setups (EN): Difference between revisions
m
no edit summary
mNo edit summary |
mNo edit summary Tags: Mobile edit Mobile web edit |
||
(21 intermediate revisions by the same user not shown) | |||
Line 6:
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].
The contents of this guide are demonstrated in the following video:
{{youtube|jxu9VgwvkJw|TimoVM}}
=Setting up initial ACE=
Line 154 ⟶ 158:
| [[File:RareCandyLocation.png]] || Rare Candy|| x243 || At the Thunderstone spot, walk 7 steps to the right to get Rare Candy x0. Toss 13 from the stack, then swap to slot #16.
|-
| [[File:TM14Location.png]] || TM14 || x213 || At the Thunderstone spot, swap the Thunderstone with the TM23 x64 stack 4 slots below, then toss 63 TM23s. Walk 1 step up and 9 steps left to get
|}
Line 250 ⟶ 254:
===Setting up 4F to execute item codes===
Next, we'll be entering a list of
{| class="wikitable"
Line 272 ⟶ 276:
===Setting up the Nickname Writer===
* Next, we'll be entering a list of
{| class="wikitable"
Line 281 ⟶ 285:
* Pick up Eevees and enter the nicknames in the above screenshot one by one. '''The nicknames from this list needs to be entered in this exact order from the top to the bottom.'''
* Once
▲* Once you're at the pokémon center, use 4F. This should open a screen in which you're asked to enter a pokémon's nickname
* For now, press START to end writing the nickname. This should display the main menu, a number should be written on screen.
* Press SELECT to exit the Nickname Writer safely.
Line 290 ⟶ 293:
From this point onward, whenever you use the ACE item, you should be able to open the nickname writer. Please make sure to keep note of the following:
* Since the Nickname Writer works independently of the current active box, you can change the current active box however much you like.
* When writing data, the Nickname Writer will overwrite enemy party data. While this does not have any effect outside of battle, it is recommended to not use the Nickname Writer in battle.
The program works as follows:
Line 298 ⟶ 300:
* This nickname then gets converted to a sequence of five bytes.
* All five bytes are written starting from the starting location
* The program displays a glitched overworld view, along with a checksum (sum of all written byte values) towards the top right of the screen to confirm that you correctly entered the code. '''If the printed checksum doesn't match the expected checksum, you made a mistake entering a code.''' The glitched overworld view is temporary and will not affect your game.
* Afterwards, it waits for the user to decide what to do.
During the input phase, the controls are as follows:
* '''Press A''' for the program to ask for a new nickname and convert that to the next five bytes to be written.
* '''Press B''' to go back one byte at a time. The checksum will automatically be overwritten by the value written at the current selected address, giving you a measure of how far back you're going.
* '''Press START''' to immediately start executing the newly written program. '''Only do this when you've finished writing everything.'''
* '''Press SELECT''' to safely quit the Nickname Writer, without executing the newly written code.
{| class="wikitable"
! Write mode !! Input mode
|-
! [[File:RB Name writer write mode.png
! [[File:RB Name writer input mode.png]]
|-
|
|}
Line 330 ⟶ 332:
** We are currently located in the Celadon Pokémon center, while we need to return to Pallet Town to pick up the starter pokémon
We will be removing all these side effect using the Nickname Writer. The nicknames we need to enter will be generated by the [https://timovm.github.io/NicknameConverter/ Nickname Converter webtool]. Simply open the link, copy paste one of the two codes below into the converter, then press the "Run" button to display the list of nicknames.
'''When using the Nickname Writer, the generated nicknames need to be entered from top to bottom.'''
Line 374 ⟶ 376:
** Alters the exit of the poké center to lead out to Pallet Town
From this point onward, you can exit the
==Additional applications of the Nickname Writer==
The Nickname Writer allows you to easily write and execute arbitrary payloads. You can either make and execute your own codes, or head to the [[Guides:Nickname Writer Codes|Nickname Writer codes]] page. This page contains a collection of assembly for nickname codes that can be used for a variety of common purposes such as editing pokémon and items, editing player stats, resetting legendaries etc..
[[Guides:Nickname Writer Codes|Nickname Writer Codes]]
=Addendum: raw text transcripts of nickname codes=
Line 389 ⟶ 393:
! Nickname
|-
C l l U ( ( : ; W ;
</pre>
Line 399 ⟶ 403:
! List of nicknames
|-
g .
</pre>
|}
Line 413 ⟶ 415:
! List of nicknames
|-
</pre>
|}
Line 450 ⟶ 451:
87 add a
0B dec bc ; Filler, compensates previous inc bc, no effect on flags
30 04 jp nc, .notChar ; Aside from space (should not be used), "add a" will only give nc if value read is not a text char
86 add a, (hl)
12 ld (de), a
Line 502 ⟶ 503:
<pre>
21 1E D3 ld hl, wBagItems ; item #1's ID
▲21 65 DA ld hl, 4F_Execution_Pointer
3E 21 ld a, $21▼
3E 28 ld a, $28
22 ldi (hl), a
; The contents of the first nickname (see previous section) are written right after this, ensuring safe return.
</pre>
Line 524 ⟶ 517:
<pre>
</pre>
Line 538 ⟶ 529:
<pre>
</pre>
===Raw Assembly===
<pre>
==Nickname Writer==
Line 555 ⟶ 545:
<pre>
11
D5 push de
.newMail
D5 push de
21 24 65 ld hl, AskName + 39h ; Prepares data and calls DisplayNamingScreen
CD 22 39 call $3922 ; sets b to 01, then jumps to Bankswitch, calling b:hl
0E 80 ld c, $80 ; Ensure checksum consistency
21 4B CF ld hl, wStringBuffer ; Address where new name gets written to
Line 578 ⟶ 567:
18 F3 jp .newChar
.terminator
21 29 C4 ld hl, $C429 ; Corresponds to screen tile▼
D5 push de
0E 01 ld c, $01 ; How many bytes printed as numbers?
CD DF 15 call PrintBCDNumber.loop
.numLoop
CB FE set 7, (hl)
20 FB jp nz, .numLoop ; Repeat until hl == $C400
.inputLoop
CD 31 38 call JoypadLowSensitivity ; Halt execution until frame has passed, get joypad status and store result in hJoy5
E6 0F and $0F ; Set z flag if A, B, START, SELECT not pressed
28 F7 jp z, .inputLoop
D1 pop de
▲1F rra ; is B pressed?
1F rra ; Is START pressed?▼
▲1B dec de
1B dec de
38 E1 jr c, .terminator
1F rra ; Is SELECT pressed? If yes, set c flag
E1 pop hl ;
E9 jp hl ; If START pressed, jump to hl to execute newly written code
</pre>
Line 608 ⟶ 595:
<pre>
11
38
</pre>
Line 734 ⟶ 720:
01 59 C3 2E 3E
</pre>
[[Category:Guides]]
|