User:TimoVM/JP Aka Midori Ao ACE Translation
This page is based on a translation/analysis of an ACE setup used in the Japanese versions of Pokémon Red, Green and Blue. The original article was written by flag3833753 and can be found [here].
Please note that the bulk of the guide focuses on later revisions of Red and Green. Details on how to adapt the guide for early versions of Red and Green, along with Blue, can be found at the end of the guide.
What is a RAM writer?
A RAM writer is a program that allows you to rewrite the game's memory, by adjusting values at specific memory addresses. This allows you to do basically anything in game, like getting any item, any pokémon etc..
Unfortunately, fully functional RAM writers are quite large in size. To allow for a fast setup^, we'll first make a compact RAM writer that is limited in functionality, then use that to write the full RAM writer.
Requirements
In order to install the RAM writer, you require the following:
- "なかよしバッヂ" in the item bag. (TO DO: add guide on how to actually obtain)
- The number of Safari Balls needs to be set to zero. If you've never visited the safari zone, no action is needed. If you have been there, start a new safari game and walk out the full 500 steps. The number of Safari Balls will be set to 0 once you get kicked out. Note that the safari ball count will not be reset if you leave early.
- An empty, unused box that has never been full at any point in the past, make sure to set it as the active box.
- Catch a pokémon and give it the nickname "うるてぽん". Then, deposit it in the day-care.
No unused box available
In the case that you don't have any unused boxes left, you will need to deposit a pokémon with a nickname "うるてEん" instead of the nickname "うるてぽん" to the day-care. Since "E" is usually an unavailable character, you need to take the following steps:
- The number of remaining safari balls should be 0.
- Deposit a pokémon with the nickname "てウん" to the day-care and immediately take it back.
- Place pokémon with the following nicknames in order, starting from the 6th slot in the box:
ゾケゼひぢ ギめなぼづ ゅにづづの
- Place a pokémon with the nickname "うるてぽん" in the 6th slot in the party.
- Use "なかよしバッヂ". The 6th party pokémon's nickname should now be altered to "うるてEん". Deposit this pokémon to the day-care.
Catching pokémon and nicknaming them
Now that you have everything that's needed, we'll catch a bunch of pokémon and give them specific nicknames. After giving them nicknames, deposit them in the empty box in order.
Note: manually deposited pokémon are inserted at the bottom of the box, newly caught pokémon that are sent to the box with a full party get inserted at the top of the box instead.
If you send pokémon to the box by catching with a full party instead of manually depositing, make sure to follow the nickname list in reverse order.
Number of nickname | Nickname | Notes |
---|---|---|
Nickname #1 | がんぜクョ | small ョ |
Nickname #2 | ぶづぜンづ | ン, not ソ |
Nickname #3 | よヅぜウづ | ヅ, not ジ |
Nickname #4 | にぽづにぞ | |
Nickname #5 | づなゅへへ | small ゅ |
Nickname #6 | ううグ空だ | 空 represents an empty space |
Nickname #7 | どグだギョ | small ョ |
Nickname #8 | べへにんグ | |
Nickname #9 | だゲぼダぞ | |
Nickname #10 | 空へにんグ | 空 represents an empty space |
Nickname #11 | わとんヅー | ヅ, not ジ |
Nickname #12 | グリググだ | |
Nickname #13 | ざグわねん | |
Nickname #14 | ぱへふんぴ | |
Nickname #15 | へふんボぷ | |
Nickname #16 | へふんだし | |
Nickname #17 | ぼヂキづご | |
Nickname #18 | ョのなひだ | small ョ |
Nickname #19 | へよんち空 | 空 represents an empty space |
Nickname #20 | ぼダメにぽ | |
Nickname #21 | にュだガに | small ュ |
Nickname #22 | にヂ空ギて | 空 represents an empty space |
Nickname #23 | ボデの |
After depositing all pokémon and making sure to check if the order of nicknames inside the box is correct, you can use "なかよしバッヂ" . This will start the compact RAM writer.
Using the compact RAM writer
With the compact RAM writer, you can change the values stored in specific memory addresses. The controls are as follows:
A: Address +1 B: Address -1 DOWN: Value +1 UP: Value -1 RIGHT: Value +10h LEFT: Value -10h START: Exit
Next, we'll be using the compact RAM writer to rewrite the values at the address range $D9B3 to $DA52. Change the values according to the following table:
Address | Value | Opcode |
---|---|---|
D9B3 | 21 58 DA | ld hl,DA58 |
D9B6 | CD 0A DA | call DA0A |
D9B9 | E5 | push hl |
D9BA | 54 | ld d,h |
D9BB | 5D | ld e,l |
D9BC | 3E F8 | ld a,F8 |
D9BE | 83 | add e |
D9BF | 5F | ld e,a |
D9C0 | 38 01 | jr c,+01 |
D9C2 | 15 | dec d |
D9C3 | 06 12 | ld b,12 |
D9C5 | 21 AB C3 | ld hl,C3AB |
D9C8 | 3E 7C | ld a,7C |
D9CA | 22 | ldi (hl),a |
D9CB | 7A | ld a,d |
D9CC | CD FE D9 | call D9FE |
D9CF | 7A | ld a,d |
D9D0 | CD 00 DA | call DA00 |
D9D3 | 7B | ld a,e |
D9D4 | CD FE D9 | call D9FE |
D9D7 | 7B | ld a,e |
D9D8 | CD 00 DA | call DA00 |
D9DB | 3E 7F | ld a,7F |
D9DD | 22 | ldi (hl),a |
D9DE | 1A | ld a,(de) |
D9DF | CD FE D9 | call D9FE |
D9E2 | 1A | ld a,(de) |
D9E3 | CD 00 DA | call DA00 |
D9E6 | 36 7C | ld (hl),7C |
D9E8 | 3E 0C | ld a,0C |
D9EA | 85 | add l |
D9EB | 6F | ld l,a |
D9EC | 30 01 | jr nc,+01 |
D9EE | 24 | inc h |
D9EF | 1C | inc e |
D9F0 | 20 01 | jr nz,+01 |
D9F2 | 14 | inc d |
D9F3 | 05 | dec b |
D9F4 | 20 D2 | jr nz,-2E |
D9F6 | 21 4B C4 | ld hl,C44B |
D9F9 | 36 ED | ld (hl),ED |
D9FB | E1 | pop hl |
D9FC | 18 B8 | jr -48 |
D9FE | CB 37 | swap a |
DA00 | E6 0F | and a,0F |
DA02 | C6 F6 | and a,F6 |
DA04 | 30 02 | jr nc,+02 |
DA06 | C6 60 | add a,60 |
DA08 | 22 | ldi (hl),a |
DA09 | C9 | ret |
DA0A | CD 67 38 | call 3867 |
DA0D | F0 B3 | ld a,(ff00+B3) |
DA0F | CB 57 | bit 2,a |
DA11 | 28 01 | jr z,+01 |
DA13 | E9 | jp hl |
DA14 | CB 5F | bit 3,a |
DA16 | 28 02 | jr z,+02 |
DA18 | C1 | pop bc |
DA19 | C9 | ret |
DA1A | CB 77 | bit 6,a |
DA1C | 28 04 | jr z,+04 |
DA1E | 3E FF | a,FF |
DA20 | 18 15 | jr +15 |
DA22 | CB 7F | bit 7,a |
DA24 | 28 04 | jr z,+04 |
DA26 | 3E 01 | ld a,01 |
DA28 | 18 0D | jr +0D |
DA2A | CB 67 | bit 4,a |
DA2C | 28 04 | jr z,+04 |
DA2E | 3E 10 | ld a,10 |
DA30 | 18 05 | jr z,+05 |
DA32 | CB 6F | bit 5,a |
DA34 | C8 | ret z |
DA35 | 3E F0 | ld a,F0 |
DA37 | CB 43 | bit 0,e |
DA39 | 28 03 | jr z,+03 |
DA3B | 86 | add (hl) |
DA3C | 77 | ld (hl),a |
DA3D | C9 | ret |
DA3E | CB 4B | bit 1,e |
DA40 | 28 03 | jr z,+03 |
DA42 | 84 | add h |
DA43 | 67 | ld h,a |
DA44 | C9 | ret |
DA45 | CB 7F | bit 7,a |
DA47 | 28 05 | jr +05 |
DA49 | 85 | add l |
DA4A | 6F | ld l,a |
DA4B | D8 | ret c |
DA4C | 25 | dec h |
DA4D | C9 | ret |
DA4E | 85 | add l |
DA4F | 6F | ld l,a |
DA50 | D0 | ret nc |
DA51 | 24 | inc h |
DA52 | C9 | ret |
After writing these values, it is recommended to exit the compact RAM writer and save.
Next, change the values of addresses $D984 to $D987 to:
00 C3 B3 D9
After this is done, exit the program and use "なかよしバッヂ" again. This time, the full RAM writer should start.
- If the full RAM writer starts successfully, you can exit the full RAM writer and save.
- If it does not start, reset the game and check the values you entered using the compact RAM writer.
Using the full RAM writer
Controls are as follows:
DOWN: address +1 UP: address -1 RIGHT: address +10 LEFT: address -10 B+DOWN: address +100 B+UP: address -100 B+RIGHT: address +1000 B+LEFT: address -1000 A+DOWN: value +1 A+UP: value -1 A+RIGHT: value +10 A+LEFT: value -10 SELECT: execute code starting from the current selected address (USE ONLY IF YOU KNOW WHAT YOU'RE DOING) START: exit
You'll notice that this RAM writer is much more convenient to use compared to the compact RAM writer.
Be VERY careful when using SELECT. Using it without meaning to will likely crash the game.
Keep in mind that the memory editor occupies the range between $D9B3 and $DA52. Do not edit the values within this range, otherwise you risk destroying the full RAM writer and crashing the game.
Porting the setup to early Red/Green versions and Blue versions
Nicknames to change
Due to version differences, the code described earlier doesn't fully work on Blue version and earlier revisions of Red & Green versions. This can be resolved by using different nicknames for the compact RAM writer, and adjusting a small bit of the code we'll write with that compact RAM writer.
First, adjust the following nicknames. All other nicknames go unchanged.
Number of nickname | Nickname to replace | Nickname to use in R/G | Nickname to use in B | Notes |
---|---|---|---|---|
Nickname #4 | にぽづにぞ | にぽづにピ | にぽづ空空 | 空 represents empty space |
Nickname #5 | づなゅへへ | づなゅへへ | 空なゅへタ | small ゅ, 空 represents empty space |
Values to change with the compact RAM writer
Next, adjust the following values. All other values go unchanged.
Location of values | Values to replace | Values to use in R/G | Values to use in B |
---|---|---|---|
DA0A | CD 67 38 | CD 79 38 | CD 8F 38 |