Go Back   The PokéCommunity Forums > ROM Hacking > Research & Development
Reload this Page Quick Research & Development Thread

Notices
For all updates, view the main page.

Research & Development Got a well-founded knack with ROM hacking? Love reverse-engineering the Pokémon games? Or perhaps you love your assembly language. This is the spot for polling and gathering your ideas, and then implementing them! Share your hypothesis, get ideas from others, and collaborate to create!
Research & Development programs in this forum are subject to moderator approval before they are displayed.



Reply
 
Thread Tools
  #151    
Old August 19th, 2011 (9:00 AM).
TheDarkShark TheDarkShark is offline
Metal Headed Hacker
 
Join Date: May 2010
Location: Germany
Gender: Male
Nature: Calm
Posts: 56

@DavidJCobb: lol, while fiddling with the values in the memory viewer i managed to open a second textbox. All it does is showing the same text though...
Here's what I did: open apply a new value to the text box's y coordinate (in this case i chose 8) and open the text box. While it's open, apply a new value (here 0xf) and return to the game. when pressing A it will open the second text box.
Actually, only the second text box will be hidden when the script is ended, the first one is cleared.
Just in case you can use this...

Attached Images
File Type: png Tile Insertion ROM.png‎ (3.9 KB, 114 views) (Save to Dropbox)
__________________
There are two things every Rom-Hacker should learn:
1. Don't give away everything you know!

Reply With Quote

Relevant Advertising!

  #152    
Old August 19th, 2011 (1:43 PM).
DavidJCobb DavidJCobb is offline
RESIDENT RAAAAAAAAAAAAGEMASTER
 
Join Date: Jul 2010
Gender: Male
Nature: Lonely
Posts: 275

Quote originally posted by TheDarkShark:
@DavidJCobb: lol, while fiddling with the values in the memory viewer i managed to open a second textbox. All it does is showing the same text though...
Here's what I did: open apply a new value to the text box's y coordinate (in this case i chose 8) and open the text box. While it's open, apply a new value (here 0xf) and return to the game. when pressing A it will open the second text box.
Actually, only the second text box will be hidden when the script is ended, the first one is cleared.
Just in case you can use this...
Ah, yes, you've taken advantage of our ability to modify the textbox's recorded coordinates before a screen repaint erases it. It is a clever technique.

However, I am looking to do something more ambitious: my goal is to manipulate the textbox generated by the showcoins/showmoney commands. These boxes, unlike the standard ones, are variable in size and can have their positions changed without properly-timed memory alterations.

The uses for a dynamically-positioned variably-sized non-blocking second message box are many and varied. For example, in dialogue-heavy hacks, the second box could function as a nametag positioned directly above the standard one, thereby removing the need to repeat the speaker's name in the main dialogue.

I am still having difficulty dissecting and identifying all of the code, but I already know of two things I can try. Furthermore I plan on finding the offsets of every single piece of ASM code that runs as part of the showcoins functionality. I may also investigate showmoney functionality and look for commonalities. If I can't accomplish my goal, I hope to at least save a significant amount of time for others who may pursue it in the future.

__________________
Reply With Quote
  #153    
Old August 19th, 2011 (9:10 PM).
Team Fail's Avatar
Team Fail Team Fail is online now

burning passion

ModeratorCS
 
Join Date: May 2009
Location: yes
Age: 21
Gender: Male
Nature: Brave
Posts: 12,453

I found three interesting offsets while fooling around in the RAM of Firered BPRE.

Offsets 0x02277AC0 to 0x02277AC2 have to do with screen refreshing (after toggling help menus or using warps) and if you make the game "freeze", just set the bytes to 00 00 00 to unfreeze it.

Also, I just found this, but if you modify the bytes 0x02277AB8 to 0x02277ABB and 0x02277AC8 to 0x02277ACB you can tinker with the fades to black and "freeze" it part way, leaving some tiles dimmed and some bright.

__________________
CONTENTS
001
  THE LAB
002
  VISITOR MESSAGE
003
  PRIVATE MESSAGE
004
  PUSHING BUTTONS
005
  PUSHING BUTTONS BLOG
006
  ALT
007
  PHO
008
  PAIR 1
009
  PAIR 2
010
  TWITTER
011
  TF'S MUSIC STUDIO
012
  PC DISCORD - #GENERAL
SEEN
151

OWN
151
DATA
CRY
AREA
QUIT
Reply With Quote
  #154    
Old August 20th, 2011 (4:21 PM). Edited August 20th, 2011 by DavidJCobb.
DavidJCobb DavidJCobb is offline
RESIDENT RAAAAAAAAAAAAGEMASTER
 
Join Date: Jul 2010
Gender: Male
Nature: Lonely
Posts: 275

I have managed to create ASM code that successfully displays a secondary message box with header text and body text.

The capabilities and limitations of the code that I know of are as follows:

  • It has header and body text. You can specify strings for both, but you can't, say, display only a header.
  • The position and size cannot yet be changed. The underlying code is capable of taking single-byte X and Y arguments, but currently I just force them both to 0. SEE NEW CODE AT BOTTOM
  • I don't know if it works with \n, \l, \p, or any other formatting control codes. I didn't try any.
  • To hide the box, you can call hidecoins. It requires X and Y arguments, but doesn't appear to use them; it will hide the secondary box regardless of position and size.
Here's an example script to demonstrate how you would load your strings and call the ASM:

Spoiler:
Code:
#dynamic 0x800000

#org @start lock loadpointer 0x0 @sHeader // Header text loadpointer 0x1 @sBody // Body text callasm 0x8780001 // Change this to wherever you place the ASM release end

#org @sHeader = HEAD

#org @sBody = BODY

And finally, the ASM:

Spoiler:
Code:
.align 2
.thumb

SHOWCOINS: push {lr} push {r0-r7} mov r5, #0x0 mov r4, #0x0 ldr r0, UNKNOWN_DATA_0 ldr r1, SHOWCOINS_UNK_1 bl CALL_R1 lsl r0, r0, #0x10 lsr r0, r0, #0x10 cmp r0, #0x1 beq SHOWCOINS_RETURN mov r1, r5 mov r2, r4 bl SECONDARY b SHOWCOINS_RETURN

SHOWCOINS_RETURN: pop {r0-r7} pop {pc}

SECONDARY: push {lr} push {r0-r7} add sp, #-0x20 mov r6, r0 mov r4, r1 mov r3, r2 lsl r4, r4, #0x18 lsl r3, r3, #0x18 mov r0, #0x80 lsl r0, r0, #0x11 add r4, r4, r0 lsr r4, r4, #0x18 add r3, r3, r0 lsr r3, r3, #0x18 mov r0, #0x8 str r0, [sp] mov r0, #0x3 str r0, [sp, #0x4] mov r0, #0xF str r0, [sp, #0x8] mov r0, #0x20 str r0, [sp, #0xC] add r0, sp, #0x10 mov r1, #0x0 mov r2, r4 ldr r4, UNKNOWN_FUNCTION_0 bl CALL_R4 ldr r0, [sp, #0x10] ldr r1, [sp, #0x14] str r0, [sp, #0x18] str r1, [sp, #0x1C] ldr r4, UNKNOWN_DATA_1 add r0, sp, #0x18 ldr r5, UNKNOWN_FUNCTION_1 bl CALL_R5 strb r0, [r4] ldrb r0, [r4] mov r1, #0x0 ldr r2, UNKNOWN_FUNCTION_2 bl CALL_R2 ldrb r0, [r4] ldr r5, UNKNOWN_FUNCTION_3 bl CALL_R5 ldrb r0, [r4] ldr r5, UNKNOWN_DATA_2 mov r1, r5 mov r2, #0xD0 ldr r3, UNKNOWN_FUNCTION_4 bl CALL_R3 ldrb r0, [r4] mov r1, #0x0 mov r2, r5 mov r3, #0xD ldr r6, UNKNOWN_FUNCTION_5 bl CALL_R6 ldrb r0, [r4] ldr r2, SCRIPT_BANK_0 ldr r2, [r2] mov r3, #0x0 str r3, [sp] mov r1, #0xFF str r1, [sp, #0x4] str r3, [sp, #0x8] mov r1, #0x2 ldr r7, UNKNOWN_FUNCTION_6 bl CALL_R7 mov r0, r6 bl SECONDARY_LOAD_BODY add sp, #0x20 pop {r0-r7} pop {pc}

SECONDARY_LOAD_BODY: push {lr} push {r0-r7} add sp, #-0xC mov r1, r0 ldr r0, BUFFER_RAM_OFFSET mov r2, #0x1 mov r3, #0x4 ldr r6, UNKNOWN_FUNCTION_7 bl CALL_R6 ldr r4, STRING_RAM_OFFSET ldr r1, SCRIPT_BANK_1 ldr r1, [r1] mov r0, r4 ldr r6, BODY_STRING_LOADER bl CALL_R6 mov r0, #0x0 mov r1, r4 mov r2, #0x0 ldr r6, UNKNOWN_FUNCTION_8 bl CALL_R6 ldr r1, UNKNOWN_DATA_1 ldrb r1, [r1] mov r3, #0x40 sub r3, r3, r0 lsl r3, r3, #0x18 lsr r3, r3, #0x18 mov r0, #0xC str r0, [sp] mov r0, #0x0 str r0, [sp, #0x4] str r0, [sp, #0x8] mov r0, r1 mov r1, #0x0 mov r2, r4 ldr r6, UNKNOWN_FUNCTION_6 bl CALL_R6 add sp, #0xC pop {r0-r7} pop {pc}

CALL_R1: bx r1 bx lr

CALL_R2: bx r2 bx lr

CALL_R3: bx r3 bx lr

CALL_R4: bx r4 bx lr

CALL_R5: bx r5 bx lr

CALL_R6: bx r6 bx lr

CALL_R7: bx r7 bx lr

.align 2 SCRIPT_BANK_0: .word 0x03000F14

SCRIPT_BANK_1: .word 0x03000F18

UNKNOWN_DATA_0: .word 0x0809D6D5

UNKNOWN_DATA_1: .word 0x02039A28

UNKNOWN_DATA_2: .word 0x0000021D

SHOWCOINS_UNK_1: .word 0x081119D5

UNKNOWN_FUNCTION_0: .word 0x0810FE51

UNKNOWN_FUNCTION_1: .word 0x08003CE5

UNKNOWN_FUNCTION_2: .word 0x0800445D

UNKNOWN_FUNCTION_3: .word 0x08003FA1

UNKNOWN_FUNCTION_4: .word 0x0814FF2D

UNKNOWN_FUNCTION_5: .word 0x0810F2E9

UNKNOWN_FUNCTION_6: .word 0x08002C49

UNKNOWN_FUNCTION_7: .word 0x08008E79

UNKNOWN_FUNCTION_8: .word 0x08005ED5

BUFFER_RAM_OFFSET: .word 0x02021CD0

STRING_RAM_OFFSET: .word 0x02021D18

BODY_STRING_LOADER: .word 0x08008FCD

This is the first fully-functional ASM code I have ever written. There is still much to be done, but this is a big step. C:

EDIT: New code. This one allows you to specify the box X, Y, width, and height using script variables.

Script:

Spoiler:
Code:
#dynamic 0x800000

#org @start lock loadpointer 0x0 @sHeader // Header text loadpointer 0x1 @sBody // Body text setvar 0x8000 0x0003 // X -- single-byte! setvar 0x8001 0x0001 // Y -- single-byte! setvar 0x8002 0x000A // Width -- single-byte! setvar 0x8003 0x0002 // Height -- single-byte! callasm 0x8780001 // Change this to wherever you place the ASM

msgbox @sStandard 0x2 // just as a demonstration.

hidecoins 0x00 0x00 // hides secondary box. release end

#org @sHeader = HEAD

#org @sBody = BODY

#org @sStandard = STANDARD

And new assembly:

Spoiler:
Code:
.align 2
.thumb

SHOWCOINS: push {lr} push {r0-r7} ldr r5, SCRIPT_VAR_8000 ldrh r5, [r5] ldr r4, SCRIPT_VAR_8001 ldrh r4, [r4] ldr r0, UNKNOWN_DATA_0 ldr r1, SHOWCOINS_UNK_1 bl CALL_R1 lsl r0, r0, #0x10 lsr r0, r0, #0x10 cmp r0, #0x1 beq SHOWCOINS_RETURN mov r1, r5 mov r2, r4 bl SECONDARY b SHOWCOINS_RETURN

SHOWCOINS_RETURN: pop {r0-r7} pop {pc}

SECONDARY: push {lr} push {r0-r7} add sp, #-0x20 mov r6, r0 mov r4, r1 mov r3, r2 lsl r4, r4, #0x18 lsl r3, r3, #0x18 mov r0, #0x80 lsl r0, r0, #0x11 add r4, r4, r0 lsr r4, r4, #0x18 add r3, r3, r0 lsr r3, r3, #0x18 ldr r0, SCRIPT_VAR_8002 ldrh r0, [r0] str r0, [sp] ldr r0, SCRIPT_VAR_8003 ldrh r0, [r0] str r0, [sp, #0x4] mov r0, #0xF str r0, [sp, #0x8] mov r0, #0x20 str r0, [sp, #0xC] add r0, sp, #0x10 mov r1, #0x0 mov r2, r4 ldr r4, UNKNOWN_FUNCTION_0 bl CALL_R4 ldr r0, [sp, #0x10] ldr r1, [sp, #0x14] str r0, [sp, #0x18] str r1, [sp, #0x1C] ldr r4, UNKNOWN_DATA_1 add r0, sp, #0x18 ldr r5, UNKNOWN_FUNCTION_1 bl CALL_R5 strb r0, [r4] ldrb r0, [r4] mov r1, #0x0 ldr r2, UNKNOWN_FUNCTION_2 bl CALL_R2 ldrb r0, [r4] ldr r5, UNKNOWN_FUNCTION_3 bl CALL_R5 ldrb r0, [r4] ldr r5, UNKNOWN_DATA_2 mov r1, r5 mov r2, #0xD0 ldr r3, UNKNOWN_FUNCTION_4 bl CALL_R3 ldrb r0, [r4] mov r1, #0x0 mov r2, r5 mov r3, #0xD ldr r6, UNKNOWN_FUNCTION_5 bl CALL_R6 ldrb r0, [r4] ldr r2, SCRIPT_BANK_0 ldr r2, [r2] mov r3, #0x0 str r3, [sp] mov r1, #0xFF str r1, [sp, #0x4] str r3, [sp, #0x8] mov r1, #0x2 ldr r7, UNKNOWN_FUNCTION_6 bl CALL_R7 mov r0, r6 bl SECONDARY_LOAD_BODY add sp, #0x20 pop {r0-r7} pop {pc}

SECONDARY_LOAD_BODY: push {lr} push {r0-r7} add sp, #-0xC mov r1, r0 ldr r0, BUFFER_RAM_OFFSET mov r2, #0x1 mov r3, #0x4 ldr r6, UNKNOWN_FUNCTION_7 bl CALL_R6 ldr r4, STRING_RAM_OFFSET ldr r1, SCRIPT_BANK_1 ldr r1, [r1] mov r0, r4 ldr r6, BODY_STRING_LOADER bl CALL_R6 mov r0, #0x0 mov r1, r4 mov r2, #0x0 ldr r6, UNKNOWN_FUNCTION_8 bl CALL_R6 ldr r1, UNKNOWN_DATA_1 ldrb r1, [r1] mov r3, #0x40 sub r3, r3, r0 lsl r3, r3, #0x18 lsr r3, r3, #0x18 mov r0, #0xC str r0, [sp] mov r0, #0x0 str r0, [sp, #0x4] str r0, [sp, #0x8] mov r0, r1 mov r1, #0x0 mov r2, r4 ldr r6, UNKNOWN_FUNCTION_6 bl CALL_R6 add sp, #0xC pop {r0-r7} pop {pc}

CALL_R1: bx r1 bx lr

CALL_R2: bx r2 bx lr

CALL_R3: bx r3 bx lr

CALL_R4: bx r4 bx lr

CALL_R5: bx r5 bx lr

CALL_R6: bx r6 bx lr

CALL_R7: bx r7 bx lr

.align 2 SCRIPT_BANK_0: .word 0x03000F14

SCRIPT_BANK_1: .word 0x03000F18

SCRIPT_VAR_8000: .word 0x020370B8

SCRIPT_VAR_8001: .word 0x020370BA

SCRIPT_VAR_8002: .word 0x020370BC

SCRIPT_VAR_8003: .word 0x020370BE

UNKNOWN_DATA_0: .word 0x0809D6D5

UNKNOWN_DATA_1: .word 0x02039A28

UNKNOWN_DATA_2: .word 0x0000021D

SHOWCOINS_UNK_1: .word 0x081119D5

UNKNOWN_FUNCTION_0: .word 0x0810FE51

UNKNOWN_FUNCTION_1: .word 0x08003CE5

UNKNOWN_FUNCTION_2: .word 0x0800445D

UNKNOWN_FUNCTION_3: .word 0x08003FA1

UNKNOWN_FUNCTION_4: .word 0x0814FF2D

UNKNOWN_FUNCTION_5: .word 0x0810F2E9

UNKNOWN_FUNCTION_6: .word 0x08002C49

UNKNOWN_FUNCTION_7: .word 0x08008E79

UNKNOWN_FUNCTION_8: .word 0x08005ED5

BUFFER_RAM_OFFSET: .word 0x02021CD0

STRING_RAM_OFFSET: .word 0x02021D18

BODY_STRING_LOADER: .word 0x08008FCD

__________________
Reply With Quote
  #155    
Old August 20th, 2011 (10:37 PM).
Mr.Pkmn's Avatar
Mr.Pkmn Mr.Pkmn is offline
Ordinary ASM Magician
 
Join Date: May 2008
Posts: 39

I'm sorry to bump, but since it was the last post of the page i throught it passed unnoticed...

Quote originally posted by Mr.Pkmn:
How can we fix the broken sun weather in FRLG? Heavy rain works fine but intense sunlight makes the screen black.
Also I wonder if the snowy weather could set auto-hail, like other weathers do...

Reply With Quote
  #156    
Old August 21st, 2011 (5:26 AM).
TheDarkShark TheDarkShark is offline
Metal Headed Hacker
 
Join Date: May 2010
Location: Germany
Gender: Male
Nature: Calm
Posts: 56

@Mr.Pkmn: I think fog has already been researched. I'm sure it'd be easy to find the main weather-routine by debugging that one.

@DavidJCobb: Ah, so that's what you meant... I thought you wanted another textbox like I have an the screenshot I posted above. I think I'll take a look into porting this over to the German version of Firered... but I already told Jambo I would port the trainer mugshot thing first. I'll see what I can do. Pretty neat, anyway. I think I can make good use of the text-rendering when I work on my hack again...

__________________
There are two things every Rom-Hacker should learn:
1. Don't give away everything you know!

Reply With Quote
  #157    
Old August 31st, 2011 (3:40 PM).
EdensElite's Avatar
EdensElite EdensElite is offline
No0b, but getting there.
 
Join Date: Jun 2011
Location: UK
Gender: Male
Nature: Bold
Posts: 190

How do you edit the PC Boxes? I assume its they are graphics in the ROM but I can't find them on unLZ.

__________________

ROM Hacking was getting frustrating for me. I've now stopped productions and writing the game from scratch in HTML 5.

That means it will be playable in the browser, and across multiple devices such as the iPod touch.
Reply With Quote
  #158    
Old August 31st, 2011 (7:54 PM). Edited September 14th, 2011 by DavidJCobb.
DavidJCobb DavidJCobb is offline
RESIDENT RAAAAAAAAAAAAGEMASTER
 
Join Date: Jul 2010
Gender: Male
Nature: Lonely
Posts: 275

Out of boredom, I dug through every single script and OW in a clean FireRed BPRE ROM and wrote down every single flag and variable I could find. My findings are below, and include OW-visibility flags, item ownership flags, and more. (Not trainer or world map flags, though.)

Summarized flag findings:
Flags 0x000 - 0x006, at minimum, are temporary flags and are directly manipulated by the game engine.

Flags 0x011 - 0x01F are used to control the visibility of destructible OWs, i.e. Rock Smash boulders. They are probably cleared by the game engine every time a map is loaded, as no level scripts clear them. Do not use them on standard OWs.

Flag 0x266 appears to be directly manipulated by the game engine. If set, there is an EGG waiting for you in the Four Island Daycare Center. It is unset manually by scripts if you choose to discard the egg.

The game does not use checkitem to see if you have an item; instead, Game Freak scripts will always check for flags that were set as part of the event sequence that gave you the item (or it may even check for the OW-visibility flags if it was a pickup). E.x. the game uses "checkflag 0x271" after manually setting it, not "checkitem ITEM_BICYCLE 0x1".

A similar thing is done with badges. The "champ-in-making" guy that always chills next to a Gym statue doesn't check badge flags directly; there are eight flags (4B0-4B7) that are set along with those flags, which he checks. Redundant...

Not all of the listed OW-visibility flags are set/cleared directly. Most of them correspond to Person IDs in AMap, and are indirectly altered when one uses "hidesprite" on the Persons (referring to them by Person event number rather than ID).

Notable flags:
Flags 0x011 - 0x01F are used to control the visibility of destructible OWs.

Flag 0x266 is set by the game engine if an Egg is in the Daycare.

Flags 0x4B0 - 0x4B7 affect the "champ-in-making" guy's dialogue in Gyms.

Flags 0x4B8 - 0x4BC are set if the player has beaten {whoever} in the Elite Four during their current attempt at it. They're cleared upon entering the Hall of Fame registration room.

Flags 0x500 - 0x700 are trainer flags.

Flags 0x820 - 0x827 are read directly by the game engine and determine Badge acquisition. But we already knew this.

Flag 0x82D is set if you customize your profile by talking to some woman in some PokeCenter. Apparently directly set by the game engine.

If Flag 0x834 is set, then the player knows the name of Bill's PC (as opposed to "Someone's" PC). Don't know if this affects the PC menu, but it affects dialogue shown when receiving a Pokemon and having it sent to the PC.

Flag 0x842 may have something to do with wireless functionality or some minigame. It's checked after healing at a PokeCenter.

Flag 0x844 is set when Celio connects to Lanette -- IOW when you can trade with R/S/E. Don't mistake it for the E4 completion flag like I almost did.

Flag 0x849 is set when you solve the Tanoby Key.

If Flags 0x84A and 0x84B are cleared, the Vermilion City dockworker won't even bother checking for the MysticTicket and AuroraTicket, respectively. You won't be able to use them. I don't know what sets or clears these flags.

Flags 0x890 - 0x8FD are world map flags.

Flags 0x900 and up overlap the RAM used for script variables and hence ARE NOT SAFE TO USE.

Summarized variable findings:
0x4020 - 0x4024 are all pedometers, the first of them controlling REPEL expiration.

0x4036 is used for Selphy's Pokemon-fetching game. (She's the woman at Resort Gorgeous). I don't know what modifies this var -- possibly the game engine itself?

0x403A is used in elevator scripts and is directly modified when special 0xD8 is called. Don't store anything that you want to be permanent in this variable.

Vars 0x4064 through 0x4066 are used as part of the boulder puzzles in Victory Road. They're also cleared upon entering Route 23, along with 0x4067.

0x4069 sets which fossil is being revived in Cinnabar Island, and 0x406A sets the progress (1 = active, 2 = complete).

Full findings:

Spoiler:
Some of the flags and variables are set by a script that runs once at the start of the game. This script is called by the game engine itself, and shall be referred to as "game start script" in the notes below.

Code:
LIST OF IDENTIFIED IN-GAME FLAGS (FIRERED)

002 Apparent temporary flag. 003 Apparent temporary flag. 004 Apparent temporary flag. 005 Apparent temporary flag. 006 Apparent temporary flag. 011 Used for a CUT tree in VIRIDIAN CITY. Used for ROCK SMASH boulders in KINDLE ROAD and ROCK TUNNEL (1.82). 012 Used for CUT trees in VIRIDIAN,PEWTER,VERMILION,FUCHSIA; 2+3 ISLES; RTS 8,9,10,12,13,14,16,25; BOND BRIDGE, FIVE ISLE MEADOW; BERRY FOREST; ERIKA's Gym Used for ROCK SMASH boulders in FOUR ISLAND; SEVAULT CANYON; CERULEAN CAVE (1.72, 1.73, 1.74), ROCK TUNNEL (1.82), MT. EMBER (1.97,99,103,104,105,106,107,108) 013 Used for CUT trees in CERULEAN CITY, CELADON CITY, FUCHSIA CITY; RTS 1, 8, 10, 14; BOND BRIDGE, FIVE ISLE MEADOW; BERRY FOREST; ERIKA's Gym Used for ROCK SMASH boulders in KINDLE ROAD, SEVAULT CANYON; CERULEAN CAVE (1.72, 1.73, 1.74), ROCK TUNNEL (1.82), MT. EMBER (1.97,99,103,104,105,106,108) 014 Used for CUT trees in CELADON CITY, FUCHSIA CITY; ROUTE 1, ROUTE 10, ROUTE 14; BERRY FOREST; ERIKA's Gym Used for ROCK SMASH boulders in CERULEAN CAVE (1.72, 1.73, 1.74), ROCK TUNNEL (1.82), MT. EMBER (1.97, 1.99, 1.103, 1.104, 1.105, 1.106) 015 Used for CUT trees in FUCHSIA CITY, ROUTE 1, ROUTE 10, and BERRY FOREST. Used for ROCK SMASH boulders in KINDLE ROAD, SEVAULT CANYON; CERULEAN CAVE (1.72, 1.73, 1.74), ROCK TUNNEL (1.82), MT. EMBER (1.97, 1.99, 1.103, 1.104, 1.105, 1.106) 016 Used for CUT trees in ROUTE 1 and BERRY FOREST. Used for ROCK SMASH boulders in KINDLE ROAD, SEVAULT CANYON; CERULEAN CAVE (1.72, 1.73, 1.74), ROCK TUNNEL (1.82), MT. EMBER (1.97, 1.99, 1.103, 1.106) 017 Used for a CUT tree in BERRY FOREST. Used for ROCK SMASH boulders in KINDLE ROAD, SEVAULT CANYON; CERULEAN CAVE (1.72, 1.73, 1.74), ROCK TUNNEL (1.82), MT. EMBER (1.97, 1.99, 1.106) 018 Used for a CUT tree in BERRY FOREST. Used for ROCK SMASH boulders in KINDLE ROAD, CERULEAN CAVE (1.73, 1.74), ROCK TUNNEL (1.82), MT. EMBER (1.99) 019 Used for a CUT tree in BERRY FOREST. Used for ROCK SMASH boulders in KINDLE ROAD, CERULEAN CAVE (1.73, 1.74), ROCK TUNNEL (1.82), MT. EMBER (1.99) 01A Used for a CUT tree in BERRY FOREST. Used for ROCK SMASH boulders in KINDLE ROAD, CERULEAN CAVE (1.73, 1.74), ROCK TUNNEL (1.82), MT. EMBER (1.99) 01B Used for a CUT tree in BERRY FOREST. Used for ROCK SMASH boulders in KINDLE ROAD, SEVAULT CANYON; CERULEAN CAVE (1.73), ROCK TUNNEL (1.82) 01C Used for ROCK SMASH boulders in KINDLE ROAD and ROCK TUNNEL (1.82). 01D Used for ROCK SMASH boulders in KINDLE ROAD and ROCK TUNNEL (1.82). 01E Used for ROCK SMASH boulders in KINDLE ROAD and ROCK TUNNEL (1.82). 01F Used for ROCK SMASH boulders in KINDLE ROAD and ROCK TUNNEL (1.82). 028 Controls visibility of the BULBASAUR BALL OW in OAK's Lab. 029 Controls visibility of the CHARMANDER BALL OW in OAK's Lab. 02A Controls visibility of the SQUIRTLE BALL OW in OAK's Lab. 02B Controls visibility of the OAK OW in OAK's Lab (PALLET TOWN (4.3)). Set by GAME START SCRIPT. Cleared after the "Don't go out yet!" OAK Script event. 02C Controls visibility of the OAK OW in PALLET TOWN (3.0). Set by GAME START SCRIPT. Set after the wild-battle-with-OAK Script event. Set after OAK welcomes the player back to PALLET TOWN (level script). 02D Controls visibility of GARY's OW in OAK's Lab (PALLET TOWN (4.3)). 02E Controls visibility of the "You Must Battle Brock" guy in PEWTER CITY. Cleared after he escorts you to the Gym. 02F Controls visibility of DOME FOSSIL OW in MT. MOON (1.3). Cleared if you enter MT. MOON (1.3) while 232 is cleared. 030 Controls visibility of HELIX FOSSIL OW in MT. MOON (1.3). Cleared if you enter MT. MOON (1.3) while 232 is cleared. 031 Controls visibility of the NUGGET BRIDGE prize-giver OW in ROUTE 24. Set after BILL gives the player the S.S. ANNE TICKET. 032 Controls visibility of BILL's mutant OW in his cottage (ROUTE 25 (30.0)). 033 Controls visibility of BILL's OW in his cottage (ROUTE 25 (30.0)). Set by GAME START SCRIPT. Cleared when the player helps BILL turn back into a human being. 034 Controls visibility of MR. FUJI's OW in POKeMON TOWER (1.94). 035 Controls visibility of MR. FUJI's OW in LAVENDER TOWN (8.2). Set by GAME START SCRIPT. Cleared after talking to MR. FUJI in POKeMON TOWER. 036 Controls visibility of an item OW in ROCKET HIDEOUT (1.45). Set by GAME START SCRIPT. 037 Controls visibility of the item OW (SILPH SCOPE) in ROCKET HIDEOUT (1.45). Set by GAME START SCRIPT. Cleared after beating GIOVANNI for the first time. 038 Controls visibility of GIOVANNI's OW in ROCKET HIDEOUT (1.45). 039 Controls visibility of the TOWN MAP OW in Daisy's house (PALLET TOWN (4.2)). 03A Controls visibility of the POKEDEX OWs in OAK's Lab (PALLET TOWN (4.3)). 03B Controls visibility of the TEAM ROCKET GRUNT OW in CERULEAN CITY. 03C Controls visibility of the Rival OW in CERULEAN CITY. Set by GAME START SCRIPT. 03D Controls visibility of the Rival OW in S.S. ANNE (1.6). Set by GAME START SCRIPT. Set every time you enter LAVENDER TOWN. 03E Controls visibility of the TEAM ROCKET GRUNT OWs in SAFFRON CITY. Set after beating TEAM ROCKET at SILPH CO. 03F Controls visibility of the civilian OWs in SAFFRON CITY and the receptionist OW in SILPH CO. (1.47). Set by GAME START SCRIPT. Cleared after beating TEAM ROCKET at SILPH CO. 040 Controls visibility of a STRENGTH boulder in SEAFOAM ISLANDS (1.83). 041 Controls visibility of a STRENGTH boulder in SEAFOAM ISLANDS (1.83). 042 Controls visibility of a STRENGTH boulder in SEAFOAM ISLANDS (1.84). 043 Controls visibility of a STRENGTH boulder in SEAFOAM ISLANDS (1.84). 044 Controls visibility of a STRENGTH boulder in SEAFOAM ISLANDS (1.85). 045 Controls visibility of a STRENGTH boulder in SEAFOAM ISLANDS (1.85). 046 Controls visibility of a current-blocking STRENGTH boulder in SEAFOAM ISLANDS (1.86). 047 Controls visibility of a current-blocking STRENGTH boulder in SEAFOAM ISLANDS (1.86). 048 Controls visibility of a STRENGTH boulder in SEAFOAM ISLANDS (1.86). 049 Controls visibility of a STRENGTH boulder in SEAFOAM ISLANDS (1.86). 04A Controls visibility of a STRENGTH boulder in SEAFOAM ISLANDS (1.86). 04B Controls visibility of a STRENGTH boulder in SEAFOAM ISLANDS (1.86). 04C Controls visibility of a current-blocking STRENGTH boulder in SEAFOAM ISLANDS (1.87). 04D Controls visibility of a current-blocking STRENGTH boulder in SEAFOAM ISLANDS (1.87). 04E Controls visibility of Gary's OW in SILPH CO. (1.53). 04F Controls visibility of Gary's OW in ROUTE 22. Set by GAME START SCRIPT. 050 Unknown. Cleared after an NPC escorts you to the MUSEUM in PEWTER CITY. 051 Controls visibility of Gary's OW in POKeMON TOWER (1.89). 052 Controls visibility of the MOLTRES OW in MT. EMBER (1.101). Cleared if the player enters the map while 2BD is unset (MOLTRES not fainted/0x5'd). 053 Controls visibility of TEAM ROCKET GRUNT OWs in SILPH CO., and of GIOVANNI's OW in SILPH CO.. 054 Controls visibility of the SNORLAX OW on ROUTE 12. Set immediately before the battle with the SNORLAX on ROUTE 12. 055 Controls visibility of GIOVANNI's OW in VIRIDIAN CITY's Gym. 057 Controls visibility of the EEVEE BALL OW in CELADON CITY (10.11). 058 Controls visibility of a STRENGTH boulder in VICTORY ROAD (1.40). 059 Controls visibility of a STRENGTH boulder in VICTORY ROAD (1.41). 05A Controls visibility of OAK's OW in POKeMON LEAGUE (1.79). Set by GAME START SCRIPT. 05B Controls visibility of a TEAM ROCKET GRUNT OW in the GAME CORNER. 05C Controls visibility of the OW that blocks access to CERULEAN CAVE. Set after finishing the CELIO/RUBY/SAPPHIRE subplot. 05D Controls visibility of the ZAPDOS OW in POWER PLANT (1.95). 05E Controls visibility of a TEAM ROCKET GRUNT in POKeMON TOWER (1.94). 05F Controls visibility of the TEAM ROCKET GRUNT OWs in CELADON CITY. Controls visibility of the SILPH CO. employee OW in CELADON CITY. Set after beating GIOVANNI for the first time, in the hideout beneath the GAME CORNER. 060 Controls visibility of the HITMONLEE BALL OW in the FIGHTING DOJO (SAFFRON CITY (14.2)). 061 Controls visibility of the HITMONCHAN BALL OW in the FIGHTING DOJO (SAFFRON CITY (14.2)). 062 Controls visibility of BILL's OW in CINNABAR ISLAND. Set by GAME START SCRIPT. Cleared after beating CINNABAR ISLAND Gym Leader BLAINE, and after encountering BILL in the CINNABAR ISLAND PokeCenter. 063 Controls visibility of a Player OW in the Union Room (0.4). 064 Controls visibility of a Player OW in the Union Room (0.4). 065 Controls visibility of a Player OW in the Union Room (0.4). 066 Controls visibility of a Player OW in the Union Room (0.4). 067 Controls visibility of a Player OW in the Union Room (0.4). 068 Controls visibility of a Player OW in the Union Room (0.4). 069 Controls visibility of a Player OW in the Union Room (0.4). 06A Controls visibility of a Player OW in the Union Room (0.4). 06B Controls visibility of the SEAGALLOP Ferry OW in CINNABAR ISLAND. Set by GAME START SCRIPT. 06C Controls visibility of an OW in SAFFRON's fan club. He responds to your TRAINER CARD stickers. Set by GAME START SCRIPT. 06D Controls visibility of an OW in SAFFRON's fan club. He responds to your TRAINER CARD stickers. Set by GAME START SCRIPT. 06E Controls visibility of an OW in SAFFRON's fan club. She responds to your TRAINER CARD stickers. Set by GAME START SCRIPT. 06F Controls visibility of an OW in SAFFRON's fan club. She responds to your TRAINER CARD stickers. Set by GAME START SCRIPT. 070 Controls visibility of green-suit OW in the second floor of all PokeCenters. Altered by the Pokemon Center 2F level scripts. 071 Controls visibility of BILL's OW in ONE ISLAND. 072 Controls visibility of BILL's OW in ONE ISLAND's PokeCenter. 073 Controls visibility of CELIO's OW in ONE ISLAND's PokeCenter. 074 Controls visibility of a Biker OW in TWO ISLAND's GAME CORNER. Set by GAME START SCRIPT. 075 Controls visibility of LOSTELLE's OW in TWO ISLAND's GAME CORNER. Set by GAME START SCRIPT. 076 Controls visibility of LOSTELLE's OW in her home in THREE ISLAND (THREE ISLAND (34.0)). Set by GAME START SCRIPT. 079 Controls visibility of Biker OWs in THREE ISLAND and THREE ISLE PORT. 07A Controls visibility of LOSTELLE's OW in BERRY FOREST. 07B Controls visibility of a shopper OW in TWO ISLAND. Set by GAME START SCRIPT. Cleared when the TWO ISLAND shopkeeper hears about Lostelle. (TWO ISLAND level script.) 07C Controls visibility of a BRUNO-rumor-telling OW in TWO ISLAND. Set by GAME START SCRIPT. Cleared when the TWO ISLAND shopkeeper hears about Gym progress. (TWO ISLAND level script.) 07D Controls visibility of a shopper OW in TWO ISLAND. Set by GAME START SCRIPT. Cleared when the TWO ISLAND shopkeeper hears about E4 progress. (TWO ISLAND level script.) 07E Controls visibility of anti-Biker OWs in THREE ISLAND. Set when entering THREE ISLAND after you've rescued LOSTELLE (2A3 is set). 080 Controls visibility of the SNORLAX OW in ROUTE 16. Set immediately before the battle with the SNORLAX on ROUTE 16. 081 Controls visibility of the MEWTWO OW in CERULEAN CAVE (1.74). 082 Controls visibility of the ARTICUNO OW in SEAFOAM ISLANDS (1.87). 083 Controls visibility of a TEAM ROCKET GRUNT in POKeMON TOWER (1.94). 084 Controls visibility of a TEAM ROCKET GRUNT in POKeMON TOWER (1.94). 085 Controls visibility of a VOLTORB in POWER PLANT (1.95). 086 Controls visibility of a VOLTORB in POWER PLANT (1.95). 087 Controls visibility of S.S. ANNE OW in S.S. ANNE (1.4). 088 Controls visibility of TEAM ROCKET GRUNT OWs in FIVE ISLE MEADOW, OUTCAST ISLAND, and ROCKET WAREHOUSE. Set if the player has defeated TEAM ROCKET at ROCKET WAREHOUSE. 089 Controls visibility of TEAM ROCKET GRUNT OWs in MT. EMBER (1.97). 08A Controls visibility of the RUBY OW in MT. EMBER (1.102). 08B Controls visibility of LORELEI's OW in ICEFALL CAVE (1.113). 08C Controls visibility of LORELEI's OW in her home on FOUR ISLAND. Set by GAME START SCRIPT. Set after finishing the CELIO/RUBY/SAPPHIRE subplot. Cleared after assisting LORELEI in ICEFALL CAVE. 08D Controls visibility of TEAM ROCKET GRUNT OWs in ICEFALL CAVE (1.113). 08E Controls visibility of the scientist OW in RUIN VALLEY. Set after assisting LORELEI in ICEFALL CAVE. 08F Controls visibility of the SAPPHIRE OW in DOTTED HOLE (1.120). 090 Controls visibility of the thief OW in DOTTED HOLE (1.120). Set by GAME START SCRIPT. 091 Controls visibility of one single Biker OW in THREE ISLAND. Set by GAME START SCRIPT. Cleared after a brief confrontation with a biker at the TWO ISLAND GAME CORNER. 092 Controls visibility of the Running Shoes guy in PEWTER CITY. Set by GAME START SCRIPT. Cleared after beating PEWTER CITY Gym Leader BROCK. 093 Controls visibility of SELPHY's OW in LOST CAVE (2.22). 094 Controls visibility of SELPHY's OW in RESORT GORGEOUS. Set by GAME START SCRIPT. Cleared after rescuing SELPHY from LOST CAVE, before warping to RESORT GORGEOUS. 095 Controls visibility of SELPHY's OW in her home at RESORT GORGEOUS (RESORT GORGEOUS (39.0)). Set by GAME START SCRIPT. Cleared after rescuing SELPHY from LOST CAVE, after she dismisses you from her front door. 096 Controls visibility of SELPHY's Butler's OW in her home at RESORT GORGEOUS. Set by GAME START SCRIPT. 097 Controls visibility of GARY's OW in FOUR ISLAND. Set by GAME START SCRIPT. Cleared by one FOUR ISLAND level script if another (Gary encounter) is able to run. 098 Controls visibility of GARY's OW in SIX ISLAND's PokeCenter. 099 Controls visibility of the DEOXYS OW in BIRTH ISLAND (2.56). Set by GAME START SCRIPT. Set when entering the map after 2E4 is set. 09A Controls visibility of the Triangle OW in BIRTH ISLAND (2.56). Set when entering the map after 2E4 is set. Cleared when wnetering when 2E4 is cleared and 2F7 (DEOXYS fainted) is unset. 09B Controls visibility of the LUGIA OW in NAVEL ROCK (2.38). Set when entering the map after 2F2 is set. Cleared when entering when 2F2 is cleared and 2F5 (fainted) is unset. 09C Controls visibility of the HO-OH OW in NAVEL ROCK (2.37). Set when entering the map after 2F3 is set. Cleared when entering when 2F3 is cleared and 2F6 (fainted) is unset. 09D Controls visibility of certain FAME CHECKER NPCs that spawn in after you beat the Elite Four. It is cleared during a Hall of Rame room level script. Set by GAME START SCRIPT. Controls visibility of the FUJI fan OW in LAVENDER CITY's PokeCenter. Controls visibility of the LANCE fan OW in SAFFRON CITY (near the Trainer Fan Club). Controls visibility of the BRUNO fan OW in EMBER SPA. 09E Controls visibility of two invisible Person events on a bookcase in CELADON CITY (10.8). They contain FAME CHECKER data on ERIKA. Set by GAME START SCRIPT. 09F Unknown. Set by GAME START SCRIPT. 0A0 Unknown. Set by GAME START SCRIPT. 0A1 Controls visibility of the OAK Assistant OW in VERMILION CITY. Set by GAME START SCRIPT. Set when entering VERMILION CITY while 2F9 is set. 0A2 Controls visibility of BILL's OW in the CINNABAR ISLAND PokeCenter. Set by GAME START SCRIPT. 0A3 Controls visibility of OAK's OW at the INDIGO PLATEAU (3.9). Set by GAME START SCRIPT. 0A4 Unknown. Set by GAME START SCRIPT. Conditionally cleared by special 1B9. 0A5 Controls visibility of a MEOWTH Doll OW in LORELEI's home on FOUR ISLAND. Set by GAME START SCRIPT. Conditionally cleared by special 1B9. 0A6 Controls visibility of a CHANSEY Doll OW in LORELEI's home on FOUR ISLAND. Set by GAME START SCRIPT. Conditionally cleared by special 1B9. 0A7 Controls visibility of a NIDORANF Doll OW in LORELEI's home on FOUR ISLAND. Set by GAME START SCRIPT. Conditionally cleared by special 1B9. 0A8 Controls visibility of a JIGGLYPUFF Doll OW in LORELEI's home on FOUR ISLAND. Set by GAME START SCRIPT. Conditionally cleared by special 1B9. 0A9 Controls visibility of a NIDORANM Doll OW in LORELEI's home on FOUR ISLAND. Set by GAME START SCRIPT. Conditionally cleared by special 1B9. 0AA Controls visibility of a FEAROW Doll OW in LORELEI's home on FOUR ISLAND. Set by GAME START SCRIPT. Conditionally cleared by special 1B9. 0AB Controls visibility of a PIDGEOT Doll OW in LORELEI's home on FOUR ISLAND. Set by GAME START SCRIPT. Conditionally cleared by special 1B9. 0AC Controls visibility of a LAPRAS Doll OW in LORELEI's home on FOUR ISLAND. Set by GAME START SCRIPT. Conditionally cleared by special 1B9. 0AD Controls visibility of TEAM ROCKET GRUNT OWs in MT. MOON (1.3) and ROCKET HIDEOUT (all). Set after beating VIRIDIAN CITY Gym Leader GIOVANNI. 0AE Unknown. Set by GAME START SCRIPT. 154 Controls visibility of an item OW in ROUTE 1. 155 Controls visibility of an item OW in ROUTE 1. 156 Controls visibility of an item OW in VIRIDIAN FOREST. 157 Controls visibility of an item OW in VIRIDIAN FOREST. 158 Controls visibility of an item OW in VIRIDIAN FOREST. 159 Controls visibility of an item OW in MT. MOON (1.1). 15A Controls visibility of an item OW in MT. MOON (1.1). 15B Controls visibility of an item OW in MT. MOON (1.1). 15C Controls visibility of an item OW in MT. MOON (1.1). 15D Controls visibility of an item OW in MT. MOON (1.1). 15E Controls visibility of an item OW in MT. MOON (1.1). 15F Controls visibility of an item OW in MT. MOON (1.3). 160 Controls visibility of an item OW in MT. MOON (1.3). 161 Controls visibility of an item OW in ROUTE 4. 162 Controls visibility of an item OW in ROUTE 24. 163 Controls visibility of an item OW in ROUTE 25. 164 Controls visibility of an item OW in S.S. ANNE (1.13). 165 Controls visibility of an item OW in S.S. ANNE (1.19). 166 Controls visibility of an item OW in S.S. ANNE (1.21). 167 Controls visibility of an item OW in S.S. ANNE (1.25). 168 Controls visibility of an item OW in S.S. ANNE (1.26). 169 Controls visibility of an item OW in S.S. ANNE (1.28). 16A Controls visibility of an item OW in S.S. ANNE (1.10). 16B Controls visibility of an item OW in ROUTE 9. 16C Controls visibility of an item OW in ROCKET HIDEOUT (1.42). 16D Controls visibility of an item OW in ROCKET HIDEOUT (1.42). 16E Controls visibility of an item OW in ROCKET HIDEOUT (1.43). 16F Controls visibility of an item OW in ROCKET HIDEOUT (1.43). 170 Controls visibility of an item OW in ROCKET HIDEOUT (1.43). 171 Controls visibility of an item OW in ROCKET HIDEOUT (1.43). 172 Controls visibility of an item OW in ROCKET HIDEOUT (1.44). 173 Controls visibility of an item OW in ROCKET HIDEOUT (1.44). 174 Controls visibility of an item OW in ROCKET HIDEOUT (1.45). 175 Controls visibility of an item OW in ROCKET HIDEOUT (1.45). 176 Controls visibility of an item OW in ROCKET HIDEOUT (1.45). 177 Controls visibility of an item OW in POKeMON TOWER (1.90). 178 Controls visibility of an item OW in POKeMON TOWER (1.91). 179 Controls visibility of an item OW in POKeMON TOWER (1.91). 17A Controls visibility of an item OW in POKeMON TOWER (1.91). 17B Controls visibility of an item OW in POKeMON TOWER (1.92). 17C Controls visibility of an item OW in POKeMON TOWER (1.93). 17D Controls visibility of an item OW in POKeMON TOWER (1.93). 17E Controls visibility of an item OW in ROUTE 12. 17F Controls visibility of an item OW in ROUTE 12. 180 Controls visibility of an item OW in ROUTE 15. 181 Controls visibility of an item OW in SAFARI ZONE (1.63). 182 Controls visibility of an item OW in SAFARI ZONE (1.64). 183 Controls visibility of an item OW in SAFARI ZONE (1.64). 184 Controls visibility of an item OW in SAFARI ZONE (1.64). 185 Controls visibility of an item OW in SAFARI ZONE (1.64). 186 Controls visibility of an item OW in SAFARI ZONE (1.65). 187 Controls visibility of an item OW in SAFARI ZONE (1.65). 188 Controls visibility of an item OW in SAFARI ZONE (1.66). 189 Controls visibility of the item OW (GOLD TEETH) in SAFARI ZONE (1.66). 18A Controls visibility of an item OW in SAFARI ZONE (1.66). 18B Controls visibility of an item OW in SAFARI ZONE (1.66). 18C Controls visibility of an item OW in SILPH CO. (1.49). 18D Controls visibility of an item OW in SILPH CO. (1.50). 18E Controls visibility of an item OW in SILPH CO. (1.50). 18F Controls visibility of an item OW in SILPH CO. (1.50). 190 Controls visibility of an item OW in SILPH CO. (1.51). 191 Controls visibility of an item OW in SILPH CO. (1.51). 192 Controls visibility of the item OW (CARD KEY) in SILPH CO. (1.52). Set if the player has the CARD KEY. 193 Controls visibility of an item OW in SILPH CO. (1.52). 194 Controls visibility of an item OW in SILPH CO. (1.52). 195 Controls visibility of an item OW in SILPH CO. (1.53). 196 Controls visibility of an item OW in SILPH CO. (1.53). 197 Controls visibility of an item OW in SILPH CO. (1.56). 198 Controls visibility of an item OW in SILPH CO. (1.56). 199 Controls visibility of an item OW in SILPH CO. (1.56). 19A Controls visibility of an item OW in POWER PLANT (1.95). 19B Controls visibility of an item OW in POWER PLANT (1.95). 19C Controls visibility of an item OW in POWER PLANT (1.95). 19D Controls visibility of an item OW in POWER PLANT (1.95). 19E Controls visibility of an item OW in POWER PLANT (1.95). 19F Controls visibility of an item OW in POKeMON MANSION (1.59). 1A1 Controls visibility of an item OW in POKeMON MANSION (1.60). 1A2 Controls visibility of an item OW in POKeMON MANSION (1.61). 1A3 Controls visibility of an item OW in POKeMON MANSION (1.61). 1A4 Controls visibility of an item OW in POKeMON MANSION (1.62). 1A5 Controls visibility of an item OW in POKeMON MANSION (1.62). 1A7 Controls visibility of an item OW in POKeMON MANSION (1.62). 1A8 Controls visibility of the item OW (SECRET KEY) in POKeMON MANSION (1.62). Set if the player has the key for CINNABAR ISLAND's Gym. 1A9 Controls visibility of an item OW in VICTORY ROAD (1.39). 1AA Controls visibility of an item OW in VICTORY ROAD (1.39). 1AB Controls visibility of an item OW in VICTORY ROAD (1.40). 1AC Controls visibility of an item OW in VICTORY ROAD (1.40). 1AD Controls visibility of an item OW in VICTORY ROAD (1.40). 1AE Controls visibility of an item OW in VICTORY ROAD (1.40). 1AF Controls visibility of an item OW in VICTORY ROAD (1.41). 1B0 Controls visibility of an item OW in VICTORY ROAD (1.41). 1B1 Controls visibility of an item OW in CERULEAN CAVE (1.72). 1B2 Controls visibility of an item OW in CERULEAN CAVE (1.72). 1B3 Controls visibility of an item OW in CERULEAN CAVE (1.72). 1B4 Controls visibility of an item OW in CERULEAN CAVE (1.73). 1B5 Controls visibility of an item OW in CERULEAN CAVE (1.73). 1B6 Controls visibility of an item OW in CERULEAN CAVE (1.73). 1B7 Controls visibility of an item OW in CERULEAN CAVE (1.74). 1B8 Controls visibility of an item OW in CERULEAN CAVE (1.74). 1B9 Controls visibility of an item OW in FUCHSIA CITY (11.7). 1BA Controls visibility of an item OW in TWO ISLAND. 1BB Controls visibility of an item OW in THREE ISLAND. 1BE Controls visibility of an item OW in VIRIDIAN FOREST. 1BF Controls visibility of an item OW in MT. MOON (1.3). 1C0 Controls visibility of an item OW in MT. MOON (1.3). 1C1 Controls visibility of an item OW in ROUTE 11. 1C2 Controls visibility of an item OW in ROUTE 9. 1C3 Controls visibility of an item OW in ROCK TUNNEL (1.81). 1C4 Controls visibility of an item OW in ROCK TUNNEL (1.81). 1C5 Controls visibility of an item OW in ROCK TUNNEL (1.81). 1C6 Controls visibility of an item OW in ROCK TUNNEL (1.82). 1C7 Controls visibility of an item OW in ROCK TUNNEL (1.82). 1C8 Controls visibility of an item OW in SILPH CO. (1.54). 1C9 Controls visibility of an item OW in SILPH CO. (1.57). 1CA Controls visibility of an item OW in POKeMON MANSION (1.59). 1CB Controls visibility of an item OW in POKeMON MANSION (1.60). 1CC Controls visibility of an item OW in POKeMON MANSION (1.60). 1CD Controls visibility of an item OW in VIRIDIAN CITY. 1CE Controls visibility of an item OW in ROUTE 11. 1CF Controls visibility of an item OW in ROUTE 11. 1D0 Controls visibility of an item OW in POKeMON TOWER (1.92). 1D1 Controls visibility of an item OW in CELADON CITY. 1D2 Controls visibility of an item OW in ROCKET HIDEOUT (1.44). 1D3 Controls visibility of an item OW in SAFARI ZONE (1.65). 1D4 Controls visibility of an item OW in SEAFOAM ISLANDS (1.83). 1D5 Controls visibility of an item OW in SEAFOAM ISLANDS (1.84). 1D6 Controls visibility of an item OW in SEAFOAM ISLANDS (1.84). 1D7 Controls visibility of an item OW in SEAFOAM ISLANDS (1.85). 1D8 Controls visibility of an item OW in SEAFOAM ISLANDS (1.87). 1D9 Controls visibility of an item OW in FOUR ISLAND. 1DA Controls visibility of an item OW in FOUR ISLAND. 1DB Controls visibility of an item OW in KINDLE ROAD. 1DC Controls visibility of an item OW in KINDLE ROAD. 1DD Controls visibility of an item OW in KINDLE ROAD. 1DE Controls visibility of an item OW in FIVE ISLE MEADOW. 1DF Controls visibility of an item OW in FIVE ISLE MEADOW. 1E0 Controls visibility of an item OW in MEMORIAL PILLAR. 1E1 Controls visibility of an item OW in OUTCAST ISLAND. 1E2 Controls visibility of an item OW in WATER PATH. 1E3 Controls visibility of an item OW in WATER PATH. 1E4 Controls visibility of an item OW in RUIN VALLEY. 1E5 Controls visibility of an item OW in RUIN VALLEY. 1E6 Controls visibility of an item OW in RUIN VALLEY. 1E7 Controls visibility of an item OW in SEVAULT CANYON. 1E8 Controls visibility of an item OW in SEVAULT CANYON. 1E9 Controls visibility of an item OW in SEVAULT CANYON. 1EA Controls visibility of an item OW in BERRY FOREST. 1EB Controls visibility of an item OW in BERRY FOREST. 1EC Controls visibility of an item OW in BERRY FOREST. 1ED Controls visibility of an item OW in MT. EMBER (1.97). 1EE Controls visibility of an item OW in MT. EMBER (1.97). 1EF Controls visibility of an item OW in MT. EMBER (1.97). 1F0 Controls visibility of an item OW in ICEFALL CAVE (1.111). 1F1 Controls visibility of an item OW in ICEFALL CAVE (1.111). 1F2 Controls visibility of an item OW in ICEFALL CAVE (1.112). 1F3 Controls visibility of an item OW in ICEFALL CAVE (1.112). 1F4 Controls visibility of an item OW in ROCKET WAREHOUSE. 1F5 Controls visibility of an item OW in ROCKET WAREHOUSE. 1F6 Controls visibility of an item OW in ROCKET WAREHOUSE. 1F7 Controls visibility of an item OW in ROCKET WAREHOUSE. 1F8 Controls visibility of an item OW in LOST CAVE (2.22). 1F9 Controls visibility of an item OW in LOST CAVE (2.23). 1FA Controls visibility of an item OW in LOST CAVE (2.24). 1FB Controls visibility of an item OW in LOST CAVE (2.25). 1FC Controls visibility of an item OW in LOST CAVE (2.26). 1FD Controls visibility of an item OW in SEVAULT CANYON (42.0). 1FE Controls visibility of an item OW in SILPH CO. (1.50). 230 Set if the player received a POTION from the salesman on ROUTE 1. 231 Set if the player has received TM34 SHOCK WAVE from VERMILION CITY Gym Leader LT. SURGE. 232 Set if the player has taken either of the two fossils from MT. MOON. 233 Set if the player helped BILL turn back into a human being. 234 Set if the player received the S.S. ANNE TICKET from BILL. 235 Unknown. Set after BILL gives the player the S.S. ANNE TICKET. 236 Set if the player received TM42 from the bereaved man at MEMORIAL PILLAR. 237 Set if the player received HM01 CUT from the captain of the S.S. ANNE. 238 Set if the player received HM02 FLY from the woman on ROUTE 16 (map 25.0). 239 Set if the player received HM03 SURF from the man in the SAFARI ZONE. 23A Set if the player received HM04 STRENGTH from the SAFARI ZONE Warden. 23B Set if the player received HM05 FLASH from one of OAK's assistants on ROUTE 2 (map 15.2). 23C Set after talking to MR. FUJI in POKeMON TOWER. Allows the player to sneak past a TEAM ROCKET guard in SAFFRON CITY and enter the besieged SILPH CO. skyscraper. 23D Set if the player received the POKe FLUTE from MR. FUJI at his home in LAVENDER TOWN. 23F Unknown. If set, the hiker in the burglarized CERULEAN house calms down. 240 Set if the player received the OLD ROD from the fisherman in VERMILION CITY. 241 Set if the player obtained a BIKE VOUCHER from the man in the POKeMON Fan Club. 243 Set if the player received the COIN CASE from a man in CELADON CITY. Checked by the internal script that handles hidden item Signposts. (Item ID 0 is treated as a COINS pickup, you see.) 244 Set if the player received the GOOD ROD from the fisherman in FUCHSIA CITY. 245 Set if the player received TM29 PSYCHIC from MR. PSYCHIC in SAFFRON CITY. 246 Set if the player received LAPRAS from the man in SILPH CO. 247 Unknown. Checked when the player enters PROF. OAK's lab. 248 Set if the player traded with a boy on ROUTE 2 (map 15.1). 249 Set if the player purchased a MAGIKARP from the conman on ROUTE 4 (map 16.0). 24A Set if the player traded with an old man in CERULEAN CITY (map 7.2). 24B Set if the player traded with a young girl at the UNDERGROUND PATH entrance (map 1.30). 24D Set if the player traded with a young girl in VERMILION CITY (map 9.4). 24E Set if the player received TM38 FIRE BLAST from CINNABAR ISLAND Gym Leader BLAINE. 24F Unknown. Set if the player enters PROF. OAK's lab while 247 is set. 250 Set if the player received the MASTER BALL from the SILPH CO. PRESIDENT. 251 Set if the player traded with a boy on ROUTE 11 (map 22.1). 252 Set if the player received the ITEMFINDER from one of OAK's aides on ROUTE 11 (map 22.1). 253 Set if the player has battled the SNORLAX on ROUTE 12. 254 Set if the player has received TM39 ROCK TOMB from PEWTER CITY Gym Leader BROCK. 255 Set if the player has received the SUPER ROD from the fisherman on ROUTE 12 (map 23.2). 256 Set if the player has received the EXP. SHARE from one of OAK's aides on ROUTE 15 (map 24.1). 257 Set if the player traded with a boy on ROUTE 18 (map 26.1). 258 Set after the first Rival battle. Allows the player to heal at their house in PALLET TOWN. 259 Set if the player has received TM06 TOXIC from FUCHSIA CITY Gym Leader KOGA. 25B Set if the player has received TM27 RETURN from the bereaved woman on ROUTE 12 (map 23.1). 25E Set if the player has received OLD AMBER from a man in PEWTER CITY's Museum. 263 Set if the player has received EEVEE from the Poke Ball OW in CELADON CITY (10.11). 264 Unknown. Used as part of the trashcan puzzle in VERMILION CITY's Gym. 265 Unknown. Used as part of the quiz puzzles in CINNABAR ISLAND's Gym. 266 Set if the FOUR ISLAND Daycare has an EGG waiting for the player. Is directly manipulated by the game engine. 26C Toggles which set of POKeMON MANSION blocked doorways is open. 26D Set if the player hit the switch behind the poster in the GAME CORNER. 26E Set if the player received 10 COINS from the fisherman in the GAME CORNER. 26F Set if the player received 20 COINS from the scientist in the GAME CORNER. 270 Set if the player received 20 COINS from the gentleman in the GAME CORNER. 271 Set if the player received a BICYCLE from CERULEAN CITY's bike salesman. 272 Set if the player chose the DOME FOSSIL (KABUTO) in MT. MOON. 273 Set if the player chose the HELIX FOSSIL (OMANYTE) in MT. MOON. 274 Set if the player traded with an old man in CINNABAR ISLAND (map 12.2). 275 Set if the player traded with a woman in CINNABAR ISLAND (map 12.2). 276 Set if the player traded with a man in CINNABAR ISLAND (map 12.4). 278 Set if the player has taken one of the two prize Pokemon from the SAFFRON CITY FIGHTING DOJO. 27A SILPH CO. blocked doorway. If set, the door is open. 27B SILPH CO. blocked doorway. 27C SILPH CO. blocked doorway. 27D SILPH CO. blocked doorway. 27E SILPH CO. blocked doorway. 27F SILPH CO. blocked doorway. 280 SILPH CO. blocked doorway. 281 SILPH CO. blocked doorway. 282 SILPH CO. blocked doorway. 283 SILPH CO. blocked doorway. 284 SILPH CO. blocked doorway. 285 SILPH CO. blocked doorway. 286 SILPH CO. blocked doorway. 287 SILPH CO. blocked doorway. 288 SILPH CO. blocked doorway. 289 SILPH CO. blocked doorway. 28A SILPH CO. blocked doorway. 28B SILPH CO. blocked doorway. 28C SILPH CO. blocked doorway. 28D SILPH CO. blocked doorway. 290 Set if the player has spoken to the sticker kid on FOUR ISLAND at least once? 291 Unknown. Checked in a PALLET TOWN level script. Set when the player has chosen a starter. 293 Set if the player has received TM19 GIGA DRAIN from CELADON CITY Gym Leader ERIKA. 294 Set if the player has given LEMONADE to the girl on the CELADON Department Store roof. ...in exchange for TM33 REFLECT. 295 Set if the player has given SODA POP to the girl on the CELADON Department Store roof. ...in exchange for TM20 SAFEGUARD. 296 Set if the player has given FRESH WATER to the girl on the CELADON Department Store roof. ...in exchange for TM16 LIGHT SCREEN. 297 Set if the player has received TM03 WATER PULSE from CERULEAN CITY Gym Leader MISTY. 298 Set if the player has received TM26 EARTHQUAKE from VIRIDIAN CITY Gym Leader GIOVANNI. 29A Set if the player has received TM04 CALM MIND from SAFFRON CITY Gym Leader SABRINA. 29B Set after beating Gary at CERULEAN CITY. 29C Set if the player has shown a MAGIKARP to the fisherman on Route 12 (map 23.2) and had its size recorded. 29D Set if the TWO ISLAND shopkeeper has told you that his shop is new. 29E Set if the TWO ISLAND shopkeeper has told you that he now stocks items with help from the islanders now that you've rescued Lostelle. 29F Set if the TWO ISLAND shopkeeper has told you that he "gives it his best". 2A0 Set if the TWO ISLAND shopkeeper has told you that he now stocks items from distant lands. 2A1 Unknown. If set, the SEVII ISLAND PokeCenters will "now have PC linkage with people in KANTO". Set by a level script every time the player enters THREE ISLE PORT (3.49). 2A2 Set when the player enters TWO ISLAND for the first time. 2A3 Set after rescuing LOSTELLE in BERRY FOREST, before warping to her home. 2A5 Set if the palyer picked up the LIFT KEY from the OW (ROCKET HIDEOUT (1.45)). If unset, the ROCKET HIDEOUT elevator does not work. ("It appears to need a key.") 2A6 Set if the player has received TEA from the old woman in CELADON CITY. 2AC If unset, the ROCKET HIDEOUT elevator does not work. ("It appears to need a key.") 2BB Set if the player has received a POWDER JAR from a man in CERULEAN CITY. 2BC Set if the MEWTWO battle does not end in an 0x4 (escaped) or 0x5 (?) outcome (special B4). 2BD Set if the MOLTRES battle does not end in an 0x4 (escaped) or 0x5 (?) outcome (special B4). 2BE Set if the ARTICUNO battle does not end in an 0x4 (escaped) or 0x5 (?) outcome (special B4). 2BF Set if the ZAPDOS battle does not end in an 0x4 (escaped) or 0x5 (?) outcome (special B4). 2C0 Set if the ROCK SLIDE Move Tutor has already been used. 2C1 Set if the THUNDER WAVE Move Tutor has already been used. 2C2 Set if the ROCK SLIDE Move Tutor has already been used. 2C3 Set if the EXPLOSION Move Tutor has already been used. 2C4 Set if the MEGA PUNCH Move Tutor has already been used. 2C5 Set if the MEGA KICK Move Tutor has already been used. 2C6 Set if the DREAM EATER Move Tutor has already been used. 2C7 Set if the SOFTBOILED Move Tutor has already been used. 2C8 Set if the SUBSTITUTE Move Tutor has already been used. 2C9 Set if the SWORDS DANCE Move Tutor has already been used. 2CA Set if the SEISMIC TOSS Move Tutor has already been used. 2CB Set if the COUNTER Move Tutor has already been used. 2CC Set if the METRONOME Move Tutor has already been used. 2CD Set if the player has given a POKe DOLL to the COPYCAT in SAFFRON CITY. 2CE Set if the BODY SLAM Move Tutor has already been used. 2CF Unknown. Set when entering PROF. OAK's lab. 2D0 Set if a POWER PLANT ELECTRODE battle doesn't end in an 0x4 or 0x5 outcome (special B4). 2D1 Set if a POWER PLANT ELECTRODE battle doesn't end in an 0x4 or 0x5 outcome (special B4). 2D2 Unknown. Part of the SEAFOAM ISLANDS level scripts that determine whether the fast current is blocked. If not set, a Route 20 level script clears 40 and 41, and sets 42 through 47. 2D3 Unknown. Part of the SEAFOAM ISLANDS level scripts that determine whether the fast current is blocked. If not set, a Route 20 level script clears 48 through 4B, and sets 4C and 4D. 2D4 Unknown. Affects LORELEI's dialogue at her home on FOUR ISLAND. 2D5 Set if the player has defeated TEAM ROCKET at ROCKET WAREHOUSE. 2D6 If set, the player will be able to enter the ROCKET WAREHOUSE. (The tile will change to one that enables warps.) 2D7 Set if the player earned TM42 from the bereaved man at MEMORIAL PILLAR, but had no room for it. Talking to the man with this flag set will make him remember the player and give the item if there is now room for it. 2D8 Set when the SAPPHIRE is stolen from DOTTED HOLE by TEAM ROCKET. Allows the player to enter both of the necessary passwords to open the door to ROCKET WAREHOUSE. 2D9 Set if the player has shown a HERACROSS to the woman on WATER PATH (map 41.0) and had its size recorded. 2DA Set if the player received the EGG from the man in the WATER LABYRINTH. 2DB Set if the player "earned" the EGG from WATER LABYRINTH, but had no room for it at the time. Upon talking to the man again, he'll give them the EGG immediately if this flag is set. 2DC Set when the player finds the SAPPHIRE at ROCKET WAREHOUSE. 2DD Set when the player finds the RUBY in MT. EMBER. 2E1 Set if the player has learned a starter-only power move from the woman on CAPE BRINK (40.0). 2E2 Set if the player received a NUGGET from the man in THREE ISLE PATH. 2E3 Set if the door to the ruins in RUIN VALLEY is open. A level script enables the door warp. 2E4 Set if the DEOXYS battle doesn't end in a 1, 4 (escaped), or 5 (?) (special B4). 2EC Set if the DOME FOSSIL (KABUTO) has been revived. 2ED Set if the HELIX FOSSIL (OMANYTE) has been revived. 2EE Set if the OLD AMBER (AERODACTYL) has been revived. 2EF Set if the player received HM06 ROCK SMASH from the man in EMBER SPA. 2F0 Set if the VERMILION sailor already knows you have the MYSTICTICKET. 2F1 Set if the VERMILION sailor already knows you have the AURORATICKET. 2F2 Set if the LUGIA battle doesn't end in a 1, 4 (escaped), or 5 (?) (special B4). 2F3 Set if the HO-OH battle doesn't end in a 1 (faint), 4 (escaped), or 5 (?) (special B4). 2F5 Unknown. Allows you to rebattle a fainted LUGIA if you beat the ELITE FOUR again? Cleared during the Hall of Fame room level script, if the National Dex is already unlocked. Set if the LUGIA battle ends with the Pokemon fainting. 2F6 Unknown. Allows you to rebattle a fainted HO-OH if you beat the ELITE FOUR again? Cleared during the Hall of Fame room level script, if the National Dex is already unlocked. Set if the HO-OH battle ends with the Pokemon fainting. 2F7 Unknown. Allows you to rebattle a fainted DEOXYS if you beat the ELITE FOUR again? Cleared during the Hall of Fame room level script, if the National Dex is already unlocked. Set if the DEOXYS battle ends with the Pokemon fainting. 2F8 Unknown. Affects the dialogue of the TEA-giving woman in CELADON CITY. 2F9 Set if the player spoke to the OAK assistant in VERMILION CITY. When the player re-enters the map, this flag will be used by a level script to hide the assistant's OW. 2FA Set if the player received an EVERSTONE from one of OAK's assistants on ROUTE 10 (map 21.0). 2FB Set if the player received a MOON STONE from the man in the TWO ISLAND GAME CORNER. 2FC Set if the player received a FULL RESTORE from a thankful THREE ISLAND civilian. 2FD Set if the player received an AMULET COIN from one of OAK's aides on ROUTE 16 (map 25.2). 2FE Set if the player earned the MOON STONE from the man in the TWO ISLAND GAME CORNER, but did not have room for it. The player will receive it if they talk to the man again later. 2FF Used by the game's internal PC script. It is set immediately before the plaer is asked if they want their Pokedex rated, and cleared immediately after (regardless of their selection). 4B0 Champ-in-making guy flag. Set if the player has defeated PEWTER's Gym Leader, BROCK. Also affects PokeCenter nurse dialog when she heals your Pokemon after a whiteout. If this flag is not set, she'll offer some advice. 4B1 Champ-in-making guy flag. Set if the player has defeated CERULEAN's Gym Leader, MISTY. 4B2 Champ-in-making guy flag. Set if the player has defeated VERMILION's Gym Leader, LT. SURGE. 4B3 Champ-in-making guy flag. Set if the player has defeated CELADON's Gym Leader, ERIKA. 4B4 Champ-in-making guy flag. Set if the player has defeated FUCHSIA's Gym Leader, KOGA. 4B5 Champ-in-making guy flag. Set if the player has defeated SAFFRON's Gym Leader, SABRINA. 4B6 Champ-in-making guy flag. Set if the player has defeated CINNABAR's Gym Leader, BLAINE. 4B7 Champ-in-making guy flag. Set if the player has defeated VIRIDIAN's Gym Leader, GIOVANNI. 4B8 Set if the player has defeated Lorelei during the current attempt at the E4. Cleared in the Hall of Fame room. 4B9 Set if the player has defeated Bruno during the current attempt at the E4. Cleared in the Hall of Fame room. 4BA Set if the player has defeated Agatha during the current attempt at the E4. Cleared in the Hall of Fame room. 4BB Set if the player has defeated Lance during the current attempt at the E4. Cleared in the Hall of Fame room. 4BC Set if the player has defeated Gary during the current attempt at the E4. Cleared in the Hall of Fame room.

// Flags 500 - 700 are trainer flags. Subtract 0x500 from a normal flag // for the equivalent used in trainer flag script commands.

805 Strength has already been used on this map. 807 Set just prior to a wild battle triggered by talking to an OW, and cleared just after. Possibly used as a failsafe for if a player faints during a legendary battle, as that would (I think) terminate script execution. 820 Unknown. Appears to be set if the player has the TEACHY TV when talking to VIRIDIAN Old Man. 820 If set, the player has the BOULDERBADGE. 821 If set, the player has the CASCADEBADGE. 822 If set, the player has the THUNDERBADGE. 823 If set, the player has the RAINBOWBADGE. 824 If set, the player has the SOULBADGE. 825 If set, the player has the MARSHBADGE. 826 If set, the player has the VOLCANOBADGE. 827 If set, the player has the EARTHBADGE. 828 If set, the POKeMON menu is accessible. 829 If set, the POKeDEX menu is accessible. Checked by the game's internal PC script. Checked by the game's internal linking functions. ("It appears to be undergoing adjustments...") If not set, the WIRELESS COMMUNICATION CLUB on PokeCenters 2F is disabled. If not set, the MYSTERY GIFT questionnaire in PokeMarts is disabled. 82C If set, the player has beaten the Elite Four at least once. Checked during Bruno's, Agatha's, Lance's, and Gary's Elite Four scripts. Checked by the game's internal PC script. If set, DAISY will groom Pokemon. Does this get set when you obtain the VS SEEKER? 82D Set if the player has customized their profile. (Apparently set by the game engine itself?) 82F Running Shoes 830 Unknown. Set if variable 0x405E == 0x1 when entering ROUTE 16 and ROUTE 18. 834 If set, the player knows the name of BILL's PC. (Unset = "Someone's".) This is used both in normal scripts and in the internal script for the PC. 839 UNCONFIRMED: Mystery Gift enabled. 83B Unknown. Set by special 125. 83E Set when talking to some chick in PALLET TOWN that mimics a sign or whatever. 841 Unknown. Cleared by a level script every time the player enters THREE ISLE PORT (3.49). If set, the PC will be unusable ("The usual PC services aren't available..."). 842 Unknown. Checked after healing at a PokeCenter. 843 Unknown. Read and written to by special 165. 844 Set when CELIO successfully connects to LANETTE -- in other words, when you're allowed to trade to R/S/E. 846 Set when obtaining the RAINBOW PASS. 847 Unknown... Set if the player has no berries, or no BERRY POUCH? (Set by the game engine?) 848 Cleared when entering BIRTH ISLAND when 2E4 is unset and 2F7 (DEOXYS fainted?) is unset. 849 Set if the player has solved TANOBY KEY. 84A If not set, the VERMILION sailor won't check if you have the MYSTICTICKET. You can't use it. 84B If not set, the VERMILION sailor won't check if you have the AURORATICKET. You can't use it. 890 World Map Flag (PALLET TOWN). 891 World Map Flag (VIRIDIAN CITY). 892 World Map Flag (PEWTER CITY). 893 World Map Flag (CERULEAN CITY). 894 World Map Flag (LAVENDER TOWN). 895 World Map Flag (VERMILION CITY). 896 World Map Flag (CELADON CITY). 897 World Map Flag (FUCHSIA CITY). 898 World Map Flag (CINNABAR ISLAND). 899 World Map Flag (INDIGO PLATEAU). 89A World Map Flag (SAFFRON CITY). 89B World Map Flag (ONE ISLAND). If set, OAK welcomes the player back to PALLET TOWN when they enter the town. 89C World Map Flag (TWO ISLAND). 89D World Map Flag (THREE ISLAND). 89E World Map Flag (FOUR ISLAND). 89F World Map Flag (FIVE ISLAND). 8A0 World Map Flag (SEVEN ISLAND). 8A1 World Map Flag (SIX ISLAND). 8A4 World Map Flag (VIRIDIAN FOREST). 8A5 World Map Flag (MT. MOON (1.1)). 8A6 World Map Flag (S.S. ANNE (1.4)). 8A7 World Map Flag (UNDERGROUND PATH (1.31)). 8A8 World Map Flag (UNDERGROUND PATH (1.34)). 8A9 World Map Flag (DIGLETT'S CAVE (1.37)). 8AA World Map Flag (VICTORY ROAD (1.39)). 8AB World Map Flag (ROCKET HIDEOUT (1.42)). 8AC World Map Flag (SILPH CO. (1.47)). 8AD World Map Flag (POKeMON MANSION (1.59)). 8AE World Map Flag (SAFARI ZONE (1.63)). 8AF World Map Flag (POKeMON LEAGUE (1.75)). 8B0 World Map Flag (ROCK TUNNEL (1.81)). 8B1 World Map Flag (SEAFOAM ISLANDS (1.83)). 8B2 World Map Flag (POKeMON TOWER (1.88)). 8B3 World Map Flag (CERULEAN CAVE (1.72)). 8B4 World Map Flag (POWER PLANT). 8B5 World Map Flag (NAVEL ROCK (2.0)). 8B6 World Map Flag (MT. EMBER (1.97)). 8B7 World Map Flag (BERRY FOREST). 8B8 World Map Flag (ICEFALL CAVE (1.110)). 8B9 World Map Flag (ROCKET WAREHOUSE). 8BA World Map Flag (TRAINER TOWER (2.10)). 8BB World Map Flag (DOTTED HOLE (1.115)). 8BC World Map Flag (LOST CAVE (2.12)). 8BD World Map Flag (PATTERN BUSH). 8BE World Map Flag (ALTERING CAVE). 8BF World Map Flag (MONEAN CHAMBER). 8C0 World Map Flag (THREE ISLE PATH). 8C1 World Map Flag (TANOBY KEY). 8C2 World Map Flag (BIRTH ISLAND (2.56)). // I have reason to believe that flags 0x890 - 0x8FD // are reserved for World Map Flags, even though you // can't fly to most of them.

LIST OF IDENTIFIED IN-GAME VARS (FIRERED)

4000 Temporary/disposable variable. Written to by special E7. 4001 Temporary/disposable variable. 4003 Temporary/disposable variable? Used in TRAINER TOWER. 4006 Temporary/disposable variable? Used in TANOBY KEY. 4008 Temporary/disposable variable? Used in TANOBY KEY. 400E Temporary/disposable variable? Used in TRAINER TOWER. 400F Temporary/disposable variable? Used in TRAINER TOWER. 4010 Temporary/disposable variable. Written to by (incomplete?) special 142. 4020 Pedometer. It counts down, and upon reaching 0x0000, REPEL expires. 4021 Pedometer. Max value 0x007F; it loops back to 0x0000 after. 4022 Pedometer. Max value 0x0004; it loops back to 0x0000 after. 4023 Pedometer. Max value 0x05DC; it just stays at that value after? 4025 Pedometer? Used for DAISY's script? Haven't seen it in action myself yet. Set to 0x01F4 (500) by GAME START SCRIPT. 4031 The starter that the player chose (0, 1, 2). Accessed directly by special 129. 4036 Multi-use, for SELPHY's Pokemon-fetching-and-showing game. Apparently set to 0x0000 when it's time for a new "round" to start. Apparently set to 0xFFFF if you're out of time. 4037 Box that a newly-received (givepokemon) Pokemon was sent to. Is directly manipulated by the game engine itself. Read by special 165. 4038 Unknown. Read by specials A6 and A9. Written to by special A8. Used by special AA. 4039 Unknown. Written to by specials A6, A7, and A9. 403A Used in elevator scripts (current floor?). Written to by special 0xD8. 403C 0xXXYY -- the current bank and map, respectively. 403E Unknown. Accessed directly by special 1AC. 4042 Unknown. Read by special 167. 4043 Unknown. Written to by special 167. 4049 Unknown. Something to do with the sticker kid on FOUR ISLAND. 404A Unknown. Something to do with the sticker kid on FOUR ISLAND. 404B Unknown. Something to do with the sticker kid on FOUR ISLAND. 404E Unknown. Written to by special 197. 4050 Unknown or multi-use. Set to 0x1 after the "Don't go out yet!" OAK Script event. Set to 0x2 during the Hall of Fame room level script, if the National Dex is NOT already unlocked. Set to 0x3 after OAK's chat with the player in PALLET TOWN after beating the E4. 4051 Set to 0x2 to disable the "Old Man Needs Coffee" Script event in VIRIDIAN CITY. 4052 Set to 0x1 to disable Script events for Gary in CERULEAN CITY. 4053 Unknown. Set to 0x0 after the player watches the S.S. ANNE depart. 4054 Unknown or multi-use. Set to 0x2 to disable Script events for a Rival encounter on ROUTE 22. Set to 0x3 after VIRIDIAN CITY Gym Leader GIOVANNI is defeated. Enables next Rival. Set to 0x4 to disable Script events for a second Rival encounter on ROUTE 22. 4055 Unknown. Is set to 0x0 when the player hasn't encounted PROF. OAK yet. Is set to 0x1 when OAK is escorting the player to his lab. Is set to 0x2 when the player needs to choose a starter. Is set to 0x3 when the player and their Rival have both chosen starters. Is set to 0x4 after the player's first battle with their Rival. Is set to 0x5 when the player needs to deliver OAK's PARCEL. Is set to 0x9 when the player enters PROF. OAK while it is set to 0x8. If >= 0x1 and no other events pending, then DAISY comments on a recent Rival battle. Set to 0x7 after OAK's chat with the player in PALLET TOWN after beating the E4. 4056 Unknown. If equal to 0x0, "sethealingplace" runs whenever the player enters their bedroom in PALLET TOWN. Another level script then sets the variable to 0x1. 4057 Multi-use. Set to 0x1 to disable the OAK's PARCEL level script in VIRIDIAN CITY's PokeMart. Set to some other value to enable VIRIDIAN CITY's normal PokeMart script. 4058 Unknown. Checked by DAISY's script in PALLET TOWN. Apparently part of the sequence of events that makes her give away the TOWN MAP. Set to 0x2 when DAISY gives away the TOWN MAP. 4059 If != 0x0, then the player beat the Ghost MAROWAK at POKeMON TOWER. 405A Set to some value to disable the Old Man that blocks the VIRIDIAN CITY Gym. 405B Multi-use. Set to 0x1 to disable Script events for a Rival encounter on the S.S. ANNE. Is set to 0x1 when entering LAVENDER TOWN. 405C If != 0x0, then the player beat Gary at SILPH CO. 405D If != 0x0, then the player beat Gary at POKeMON TOWER. 405E Set to 0x0 to disable Script events on the tiles bordering the exits to the CYCLING ROAD gatehouse. Set to 0x1 to disable Script events on the tiles bordering the entrances. 405F Controls various badge-checking Script events on Route 23. 4060 If >= 0x1, then TEAM ROCKET has left SILPH CO. 4061 Set to 0x1 to disable the Pay-To-Enter Script events in PEWTER CITY's Museum. 4062 Set to 0x1 to disable the thirsty-guard roadblock Script events in the SAFFRON gatehouses. 4064 Unknown or multi-use. Reset to 0x0000 when entering Route 23. Used as part of the Boulder puzzle scripts in VICTORY ROAD. 4065 Unknown or multi-use. Reset to 0x0000 when entering Route 23. Used as part of the Boulder puzzle scripts in VICTORY ROAD. 4066 Unknown or multi-use. Reset to 0x0000 when entering Route 23. Used as part of the Boulder puzzle scripts in VICTORY ROAD. 4067 Unknown. Reset to 0x0000 when entering Route 23. 4068 Set to 0x2 after an Elite Four chamber level script forces the player to walk up. Rechecked later after the E4 battle in that chamber has ended. Reset to 0x0000 in the Hall of Fame room. 4069 Set to 0x1, 0x2, or 0x3 depending on which fossil is being revived at the CINNABAR ISLAND lab. 406A Fossil revival process. 0x1 means that a revival is in progress. 0x2 means that it is complete. 406B Set to 0x1 to disable Script events for the Nugget Bridge challenge. 406C Unknown or multi-use. Set to 0x1 to disable the man that traps you in PEWTER until you beat Brock. Set to 0x2 to disable Script events for the man that gives Running Shoes at PEWTER. 406E Safari Zone status. Set to 0x0 when not in the SAFARI ZONE. Set to 0x1 ...? Set to 0x2 after paying to enter the SAFARI ZONE. 406F I haven't the faintest idea. Used in Pokemon Center 2F level scripts. 4070 Set to 0x1 when talking to some chick in PALLET TOWN that mimics a sign or whatever. 4071 See 408A. 4073 Affects dialogue in the SAFFRON CITY TRAINER FAN CLUB building. Is set to 0x1 when the occupants -- your new fans -- swarm you. 4074 Unknown. Checked if != 0x0 in a level script for the woman-who-likes-battles's house (map 31.0). 4075 Used in a ONE ISLAND level script. If it equals 0x2, BILL will welcome you to ONE ISLAND, bring you into the PokeCenter to see CELIO, and then the variable will be set to 0x3. 4076 Multi-use, for the RUBY/SAPPHIRE subplot. Set to 0x4 if hasn't beaten the ROCKET GRUNTs they eavesdrop on at MT. EMBER? Set to 0x5 when the RUBY has been delivered to CELIO on ONE ISLAND. Set to 0x6 when the subplot is complete. If >= 0x5, VERMILION dockworker acknowledges your RAINBOW PASS. (Travel to SEVII) If >= 0x1, VERMILION dockworker acknowledges your TRI-PASS. (Travel to SEVII 1-3) 4078 Affects the commentary and items offered by the shopkeeper on One Island. The variable's value is managed by a TWO ISLAND level script that checks various flags. 0x4078 == 0x2 means that Lostelle has been rescued. 0x4078 == 0x3 means that you've beaten all Gyms, but not the Elite Four. (?) 0x4078 == 0x4 means that the shopkeeper offers items "from distant lands". (Beat E4) 4079 Multi-use, for the LOSTELLE event. Set to 0x1 after dealing with a Biker at the TWO ISLAND GAME CORNER. Set to 0x2 after rescuing LOSTELLE in BERRY FOREST, before warping to her home. Is set to 0x3 when LOSTELLE is reunited with her father. Is set to 0x4 when the subplot is complete. 407B Unknown or multi-use. Set to 0x2 to enable the first Script events for the Bikers in THREE ISLAND? Set to 0x3 to disable the first Script events for the Bikers in THREE ISLAND. Set to 0x4 to disable the second Script events for the Bikers. (They leave.) 407C Unknown or multi-use. Set to 0x1 to ...? Set to 0x2 to disable the Pokemon Center 2F level script (TEALA's tutorial). 407D Set to 0x1 to disable the ROCKET GRUNT Script events behind the broken home in CERULEAN. 407E Unknown or multi-use. Is set to 0x1 after the player helps the S.S. ANNE's captain. Is set to 0x2 when the player is stepping out of a boat and into VERMILION CITY or the S.S. ANNE harbor. Is set to 0x3 when the S.S. ANNE has departed VERMILION CITY. 407F Set to 0x2 after a Script event on MT. EMBER, in which the player hears ROCKET GRUNTs talk. 4080 Set to 0x1 after a Script event in ICEFALL CAVE, in which the player assists LORELEI. 4081 Set to 0x1 to disable a Script event blocking access to the Pokemon in the FIGHTING DOJO. 4082 Multi-use. Set to 0x0 to enable a Script event at the TRAINER TOWER counter. (A level script on the tower's exterior (Map 3.62) does this.) Set to 0x1 to disable a Script event at the TRAINER TOWER counter. 4083 Set to 0x1 upon entering the LOST CAVE room with the lost woman. 4084 Multi-use, for the SELPHY event. Set to 0x1 upon rescuing SELPHY from LOST CAVE, before warping to RESORT GORGEOUS. Set to 0x2 upon being promptly dismissed from her front door (level script). 4085 Unknown. Used in two level scripts for INDIGO PLATEAU (3.9). Does something if it equals 1. 4086 Set to 0x1 to disable a FOUR ISLAND level script (Gary encounter without battle). 4088 Set to 0x1 to disable Script events in ROCKET WAREHOUSE. 4089 Set to 0x1 to disable a SIX ISLAND (37.0) level script (Gary encounter without battle). 408A Multi-use, for an event where you meet BILL at CINNABAR ISLAND's PokeCenter, and he leaves on a boat. Set to 0x1 upon meeting BILL in the PokeCenter. The same script makes you both leave. Is set to 0x1 when used in level scripts that show BILL's departure from the island. 408B Set to 0x1 to disable the Script events for the fossil guy in MT. MOON. ... 5EF4 - 7FFF CONFIRMED UNSAFE! In PC box space!

LIST OF IDENTIFIED ITEM HIDDEN IDS (FIRERED)

UNUSED: 07, 10, 18, 28, 2B, 2C, 2D, 2E, 7C, BC, BF, all above.

00 POTION VIRIDIAN FOREST (1.0) 01 ANTIDOTE VIRIDIAN FOREST (1.0) 02 MOON STONE MT. MOON (1.3) 03 ETHER MT. MOON (1.3) 04 ELIXIR ROUTE 25 (3.44) 05 ETHER ROUTE 25 (3.44) 06 ETHER ROUTE 9 (3.27) 08 HYPER POTION S.S. ANNE (1.8) 09 SUPER POTION ROUTE 10 (3.28) 0A MAX ETHER ROUTE 10 (3.28) 0B PP UP ROCKET HIDEOUT (1.42) 0C NUGGET ROCKET HIDEOUT (1.44) 0D NEST BALL ROCKET HIDEOUT (1.45) 0E BIG MUSHROOM POKeMON TOWER (1.92) 0F PP UP ROUTE 13 (3.31) 11 RARE CANDY ROUTE 17 (3.35) 12 FULL RESTORE ROUTE 17 (3.35) 13 PP UP ROUTE 17 (3.35) 14 MAX REVIVE ROUTE 17 (3.35) 15 MAX ELIXIR ROUTE 17 (3.35) 16 LEAF STONE SAFARI ZONE (1.63) 17 REVIVE SAFARI ZONE (1.66) 19 MAX POTION SILPH CO. (1.55) 1A NUGGET SAFFRON CITY (14.1) 1B MAX ELIXIR POWER PLANT (1.95) 1C THUNDERSTONE POWER PLANT (1.95) 1D NUGGET SEAFOAM ISLANDS (1.86) 1E WATER STONE SEAFOAM ISLANDS (1.87) 1F MOON STONE POKeMON MANSION (1.59) 20 RARE CANDY POKeMON MANSION (1.61) 21 ELIXIR POKeMON MANSION (1.62) 22 FULL RESTORE ROUTE 23 (3.42) 23 ULTRA BALL ROUTE 23 (3.42) 24 MAX ETHER ROUTE 23 (3.42) 25 ULTRA BALL VICTORY ROAD (1.39) 26 FULL RESTORE VICTORY ROAD (1.39) 27 ULTRA BALL CERULEAN CAVE (1.72) 29 ESCAPE ROPE ROUTE 11 (3.29) 2A HYPER POTION ROUTE 12 (3.30) 2F PP UP CELADON CITY (3.6) 30 MAX ETHER VERMILION CITY (3.5) 31 RARE CANDY CERULEAN CITY (3.3) 32 GREAT BALL ROUTE 4 (3.22) 33 ???????? [0000] CELADON CITY (10.14) // Amount: $0A -- COINS pickup?! 34 ???????? [0000] CELADON CITY (10.14) // Amount: $0A -- COINS pickup?! 35 ???????? [0000] CELADON CITY (10.14) // Amount: $14 -- COINS pickup?! 36 ???????? [0000] CELADON CITY (10.14) // Amount: $0A -- COINS pickup?! 37 ???????? [0000] CELADON CITY (10.14) // Amount: $0A -- COINS pickup?! 38 ???????? [0000] CELADON CITY (10.14) // Amount: $14 -- COINS pickup?! 39 ???????? [0000] CELADON CITY (10.14) // Amount: $0A -- COINS pickup?! 3A ???????? [0000] CELADON CITY (10.14) // Amount: $0A -- COINS pickup?! 3B ???????? [0000] CELADON CITY (10.14) // Amount: $0A -- COINS pickup?! 3C ???????? [0000] CELADON CITY (10.14) // Amount: $28 -- COINS pickup?! 3D ???????? [0000] CELADON CITY (10.14) // Amount: $64 -- COINS pickup?! 3E ???????? [0000] CELADON CITY (10.14) // Amount: $0A -- COINS pickup?! 3F CHERI BERRY SEVAULT CANYON (3.64) 40 HEART SCALE TANOBY RUINS (3.65) 41 HEART SCALE TANOBY RUINS (3.65) 42 HEART SCALE TANOBY RUINS (3.65) 43 HEART SCALE TANOBY RUINS (3.65) 44 NEST BALL ROCKET WAREHOUSE (1.114) 45 NET BALL ROCKET WAREHOUSE (1.114) 46 POTION UNDERGROUND PATH (1.31) 47 ANTIDOTE UNDERGROUND PATH (1.31) 48 PARLYZ HEAL UNDERGROUND PATH (1.31) 49 AWAKENING UNDERGROUND PATH (1.31) 4A BURN HEAL UNDERGROUND PATH (1.31) 4B ICE HEAL UNDERGROUND PATH (1.31) 4C ETHER UNDERGROUND PATH (1.31) 4D POTION UNDERGROUND PATH (1.34) 4E ANTIDOTE UNDERGROUND PATH (1.34) 4F PARLYZ HEAL UNDERGROUND PATH (1.34) 50 AWAKENING UNDERGROUND PATH (1.34) 51 BURN HEAL UNDERGROUND PATH (1.34) 52 ICE HEAL UNDERGROUND PATH (1.34) 53 ETHER UNDERGROUND PATH (1.34) 54 TINYMUSHROOM MT. MOON (1.2) 55 TINYMUSHROOM MT. MOON (1.2) 56 TINYMUSHROOM MT. MOON (1.2) 57 BIG MUSHROOM MT. MOON (1.2) 58 BIG MUSHROOM MT. MOON (1.2) 59 BIG MUSHROOM MT. MOON (1.2) 5A RAZZ BERRY BERRY FOREST (1.109) 5B BLUK BERRY BERRY FOREST (1.109) 5C NANAB BERRY BERRY FOREST (1.109) 5D WEPEAR BERRY BERRY FOREST (1.109) 5E ORAN BERRY BERRY FOREST (1.109) 5F CHERI BERRY BERRY FOREST (1.109) 60 CHESTO BERRY BERRY FOREST (1.109) 61 PECHA BERRY BERRY FOREST (1.109) 62 RAWST BERRY BERRY FOREST (1.109) 63 ASPEAR BERRY BERRY FOREST (1.109) 64 PERSIM BERRY BERRY FOREST (1.109) 65 PINAP BERRY BERRY FOREST (1.109) 66 LUM BERRY BERRY FOREST (1.109) 67 STARDUST TREASURE BEACH (3.46) 68 STARDUST TREASURE BEACH (3.46) 69 PEARL TREASURE BEACH (3.46) 6A PEARL TREASURE BEACH (3.46) 6B ULTRA BALL TREASURE BEACH (3.46) 6C ULTRA BALL TREASURE BEACH (3.46) 6D STAR PIECE TREASURE BEACH (3.46) 6E BIG PEARL TREASURE BEACH (3.46) 6F RARE CANDY CAPE BRINK (3.47) 70 POKe BALL PEWTER CITY (3.2) 71 ORAN BERRY ROUTE 3 (3.21) 72 PERSIM BERRY ROUTE 4 (3.22) 73 PECHA BERRY ROUTE 24 (3.43) 74 ORAN BERRY ROUTE 25 (3.44) 75 BLUK BERRY ROUTE 25 (3.44) 76 SITRUS BERRY ROUTE 6 (3.24) 77 RARE CANDY ROUTE 6 (3.24) 78 PECHA BERRY S.S. ANNE (1.10) 79 CHERI BERRY S.S. ANNE (1.10) 7A CHESTO BERRY S.S. ANNE (1.10) 7B RARE CANDY ROUTE 9 (3.27) 7D PERSIM BERRY ROUTE 10 (3.28) 7E CHERI BERRY ROUTE 10 (3.28) 7F RAWST BERRY ROUTE 8 (3.26) 80 LUM BERRY ROUTE 8 (3.26) 81 LEPPA BERRY ROUTE 8 (3.26) 82 RARE CANDY ROUTE 12 (3.30) 83 LEFTOVERS ROUTE 12 (3.30) 84 LEFTOVERS ROUTE 16 (3.34) 85 MAX REVIVE FUCHSIA CITY (3.7) 86 NET BALL ROCKET HIDEOUT (1.45) 87 ULTRA BALL SILPH CO. (1.48) 88 PROTEIN SILPH CO. (1.49) 89 IRON SILPH CO. (1.50) 8A PP UP SILPH CO. (1.51) 8B CARBOS SILPH CO. (1.52) 8C ZINC SILPH CO. (1.53) 8D NUGGET SILPH CO. (1.54) 8E CALCIUM SILPH CO. (1.55) 8F HP UP SILPH CO. (1.56) 90 REVIVE SILPH CO. (1.57) 91 LUM BERRY ROUTE 23 (3.42) 92 SITRUS BERRY ROUTE 23 (3.42) 93 ASPEAR BERRY ROUTE 23 (3.42) 94 LEPPA BERRY ROUTE 23 (3.42) 95 ZINC ROUTE 14 (3.32) 96 CHESTO BERRY ROUTE 9 (3.27) 97 NANAB BERRY ROUTE 10 (3.28) 98 WEPEAR BERRY ROUTE 7 (3.25) 99 STARDUST ROUTE 20 (3.38) 9A PEARL ROUTE 21 (3.39) 9B MAX ELIXIR ROUTE 23 (3.42) 9C RAZZ BERRY ROUTE 4 (3.22) 9D PINAP BERRY ROUTE 14 (3.32) 9E FIRE STONE MT. EMBER (1.97) 9F SOOTHE BELL POKeMON TOWER (1.94) // Amount: $81 ?!? A0 SACRED ASH NAVEL ROCK (2.37) A1 PP MAX CAPE BRINK (3.47) A2 ULTRA BALL MT. EMBER (1.97) A3 NUGGET THREE ISLE PATH (2.34) A4 PP UP THREE ISLAND (3.14) A5 MAX REPEL BOND BRIDGE (3.48) A6 PEARL BOND BRIDGE (3.48) A7 STARDUST BOND BRIDGE (3.48) A8 PEARL FOUR ISLAND (3.15) A9 ULTRA BALL FOUR ISLAND (3.15) AA BIG PEARL MEMORIAL PILLAR (3.57) AB RAZZ BERRY MEMORIAL PILLAR (3.57) AC SITRUS BERRY MEMORIAL PILLAR (3.57) AD BLUK BERRY MEMORIAL PILLAR (3.57) AE NEST BALL RESORT GORGEOUS (3.54) AF STARDUST RESORT GORGEOUS (3.54) B0 STAR PIECE RESORT GORGEOUS (3.54) B1 STARDUST RESORT GORGEOUS (3.54) B2 STAR PIECE OUTCAST ISLAND (3.58) B3 NET BALL OUTCAST ISLAND (3.58) B4 ULTRA BALL GREEN PATH (3.59) B5 ASPEAR BERRY WATER PATH (3.60) B6 ORAN BERRY WATER PATH (3.60) B7 PINAP BERRY WATER PATH (3.60) B8 LEPPA BERRY SIX ISLAND (3.18) B9 BIG PEARL TRAINER TOWER (3.62) BA PEARL TRAINER TOWER (3.62) BB NANAB BERRY TRAINER TOWER (3.62) BD MACHO BRACE VIRIDIAN CITY (5.1) // Amount: $81 ?!? BE LAVA COOKIE S.S. ANNE (1.4)

EDIT: Updated with information from JPAN's special list as well as some hidden scripts I found (that are executed directly by the game engine, and are not referenced in maps).

__________________
Reply With Quote
  #159    
Old September 1st, 2011 (1:43 AM).
knizz's Avatar
knizz knizz is offline
 
Join Date: Aug 2007
Posts: 192

DavidJCobb, I wish I knew you when I was still ROM Hacking. Great work.

__________________
Firered IDA 6.5 DB: https://www.dropbox.com/s/d856o3pyndyr5sr/firered.idb
VBA-M with lua scripting support
Reply With Quote
  #160    
Old September 9th, 2011 (12:13 AM). Edited September 9th, 2011 by DavidJCobb.
DavidJCobb DavidJCobb is offline
RESIDENT RAAAAAAAAAAAAGEMASTER
 
Join Date: Jul 2010
Gender: Male
Nature: Lonely
Posts: 275

Quote originally posted by knizz:
DavidJCobb, I wish I knew you when I was still ROM Hacking. Great work.
Thanks. I've seen some of your work; coming from someone of your skill, that compliment means a lot.

* * * * *

Building on some work by knizz --

Quote originally posted by knizz:
As I said once in another thread there is an array of npc-data at 02036E38 . . .

-- I have deciphered more of the OW/Person data structure:

Bytes 0 - 8: Unknown.
Byte 9: Map number for this Person event.
Byte 10: Map bank number for this Person event.
Bytes 11 - 15: Unknown
Bytes 16 - 17: Tile X (stepping off of)
Bytes 18 - 19: Tile Y (stepping off of)
Bytes 20 - 21: Tile X (stepping onto)
Bytes 22 - 23: Tile Y (stepping oto)
Byte 24: Unknown. Changes with last movement direction. (11 down, 44 right, 33 left)
Bytes 25 - 27: Unknown.
Byte 28: Sprite frame
Bytes 29 - 31: Unknown.
Byte 32: Facing direction (same format as PLAYERFACING script var's values).
Bytes 33 - 35: Unknown.

Offset of the facing direction byte for Person event N: 0x02036E38 + (0x24 * N) + 0x20

* * * * *

EDIT: Found offsets for some scripts that people may find interesting.

0x081A4EB4 and 0x081A4EC1
Something to do with trainer battles... Is this used by the core game engine?

0x081A6843
This script handles hidden-item Signposts. Inputs are 0x8005 (item ID) and 0x8006 (amount). If the item ID is 0 (item: ????????) then it is treated as a Coins pickup.

0x081A6955
Script for the PC.

0x081A6AC8
Script for SURF. It does not include the badge check; that is evidently done in ASM before this is called.

0x081A6B0D
Script for current that is too fast to SURF in.

0x081A7705
Script for the Mystery Gift questionnaire.

0x081A77A0
Appears to be the script that is executed if you press Select without having a Key Item registered to that button.

0x081A8D49
I have no idea, but it has something to do with digging up an item. Where in FireRed can you do that?

0x081A8D97
Script for PokeCenter healing after whiting out.

0x081A8DD8
Script for Mom healing after whiting out.

0x081A8DFD
Script for whiting out (on the overworld, in battles, or both?).

0x081AD008
Script for a Fame Checker entry. This actually runs inside the Fame Checker. The others probably do, too.

0x081BE2B7
Script for WATERFALL. Like the SURF script, the badge check is performed elsewhere.

0x081BE38B
Script for DIVE (submerging). Apparently an R/S/E leftover. Like SURF and WATERFALL, there's no badge check here.

0x081BE3D4
Script for DIVE (emerging). No badge check.

0x081BE420
Script for if you try to use DIVE when you cannot emerge at the spot you're currently standing on.

0x081BF546
Internal script for hatching an EGG (by walking).

0x081BFB65
Script executed when REPEL wears off.

* * * * *

And some string offsets:

0x0826CF8C - 0x0826D19D
Nicknames of the Pokemon you can receive in in-game trades.

0x081C55C9
Strings for saving the game.

0x081B2DF8 - 0x081BB1B3(?)
L/R help strings.

__________________
Reply With Quote
  #161    
Old September 10th, 2011 (7:33 AM).
NarutoActor's Avatar
NarutoActor NarutoActor is offline
The rocks cry out to me
Silver Tier
 
Join Date: Jan 2009
Location: Brooklyn/Marlboro
Age: 22
Gender: Female
Nature: Bashful
Posts: 1,977
Send a message via AIM to NarutoActor Send a message via Windows Live Messenger to NarutoActor

'Offset of the facing direction byte for Person event N: 0x02036E38 + (0x24 * N) + 0x20'
This is extremely useful I have been trying to find this out recently too. Good job :D

Actually, I have a question. If you talk to the npc does the value change, or is it strictly the facing the player has in advance map.

__________________
~There are those people who understand hex, F the rest
Reply With Quote
  #162    
Old September 10th, 2011 (1:54 PM). Edited September 11th, 2011 by DavidJCobb.
DavidJCobb DavidJCobb is offline
RESIDENT RAAAAAAAAAAAAGEMASTER
 
Join Date: Jul 2010
Gender: Male
Nature: Lonely
Posts: 275

Quote originally posted by NarutoActor:
'Offset of the facing direction byte for Person event N: 0x02036E38 + (0x24 * N) + 0x20'
This is extremely useful I have been trying to find this out recently too. Good job :D

Actually, I have a question. If you talk to the npc does the value change, or is it strictly the facing the player has in advance map.

It varies depending on the movement behavior that you have set. What I found was that the byte was not updated after talking if the behavior was "No Movement". When using either the rotate-clockwise or walk-around-randomly behaviors, however, the OW's facing byte updated when they moved, when they turned, and when the "faceplayer" command was used.

EDIT: I also just updated my list of every known flag and variable in FireRed. A list of all Hidden IDs (hidden-item Signposts) has been added as well.

__________________
Reply With Quote
  #163    
Old September 16th, 2011 (12:28 AM).
DavidJCobb DavidJCobb is offline
RESIDENT RAAAAAAAAAAAAGEMASTER
 
Join Date: Jul 2010
Gender: Male
Nature: Lonely
Posts: 275

I just found a few interesting quirks about some FireRed scripting commands. When I get around to it, I'll be uploading an updated version of a command reference I've been working on.

- - -

Setworldmapflag will set a flag if it is one of the sixteen entries in a list of world map flag numbers whose maps can be flown to. (That is, it will work for Viridian City's world map flag, but not for, say, Rock Tunnel's.)

- - -

Braille2 sets variable 0x8004 to a value based on the width of the braille string at the pointer you give it.

Because braille strings do not support the \p or \l control codes, Game Freak had to create a "fake" message cursor every time they wanted to show multi-part or multi-line braille strings. To facilitate this, they created special 0x1B2, which draws a cursor on the screen at a position specified by variables 0x8004 (X) and 0x8005 (Y).

braille2 will calculate the length of a specified braille string, and then set 0x8004 to a value based on that length. If you then show that string in a message box and call special 0x1B2, a cursor will appear exactly at the end of the braille string. For an example of its usage, view the scripts for the Signpost events in the Ruby or Sapphire rooms in Mt. Ember.

- - -

Setwildbattle will actually generate a 100-byte Pokemon data structure. If you know how, you can then manipulate this data structure before calling dowildbattle if you want to change its moveset or something.

- - -

If hidepokepic is called too soon after showpokepic, the script will freeze and hang with the pokepic box visible. I suspect the problems arise if you try to hide a pokepic while the game is still trying to display one.

- - -

Givepokemon will send the new Pokemon to the player's PC if their party is full. The number of the box to which the Pokemon is sent is stored in 0x4037 (yes, the game itself writes that var as part of the command). LASTRESULT is set to 0 if the Pokemon is stored in the party, 1 if it's sent to the PC, and 2 if there's no room in the party or the PC.

__________________
Reply With Quote
  #164    
Old September 23rd, 2011 (11:09 AM).
Mr. Magius's Avatar
Mr. Magius Mr. Magius is offline

  

Crystal Tier
 
Join Date: Jul 2007
Location: ... ;)
Gender: Male
Posts: 243

How about adding a new type? Sorry if it's been mentioned, I haven't checked out much of this thread.

__________________
Reply With Quote
  #165    
Old September 23rd, 2011 (11:30 AM).
Crimson5M's Avatar
Crimson5M Crimson5M is offline
what
Crystal Tier
 
Join Date: Feb 2011
Location: Scotland
Age: 20
Gender: Male
Nature: Quiet
Posts: 1,085

Quote originally posted by Mr. Magius:
How about adding a new type? Sorry if it's been mentioned, I haven't checked out much of this thread.

Why not just edit the ??? type and change Curse to ghost like it is in gen V?

__________________
Youtube
Reply With Quote
  #166    
Old September 23rd, 2011 (7:53 PM).
Mr. Magius's Avatar
Mr. Magius Mr. Magius is offline

  

Crystal Tier
 
Join Date: Jul 2007
Location: ... ;)
Gender: Male
Posts: 243

Quote originally posted by Fireworks:
Why not just edit the ??? type and change Curse to ghost like it is in gen V?
Hmm.. yes, but what about strengths and weaknesses and whatnot? And say one wanted to add more than one type?

__________________
Reply With Quote
  #167    
Old September 24th, 2011 (2:36 PM).
DavidJCobb DavidJCobb is offline
RESIDENT RAAAAAAAAAAAAGEMASTER
 
Join Date: Jul 2010
Gender: Male
Nature: Lonely
Posts: 275

During my analysis of cmda6, I discovered that Game Freak implemented their own script-controlled walking ASM into the Advance-generation games. There can be up to eight subroutines to run on every frame of animation, only one of which may be active at any given time. You can select a subroutine to activate using cmda6.

At 0x03005090, there is a list of ASM functions to be executed on every frame of animation. Each entry in the list is a pointer to the routine, some metadata about the list item itself, and thirty-or-so bytes for the routine to work with (so that it may maintain its state).

When on the overworld, one of the items on this list is 0x0806E811, a walking routine manager. This routine manager will check one of the bytes in its execution-list-item (set by cmda6) and based on that byte, it will call one of eight walking subroutines.

Those subroutines in turn check the player's coordinates against stored values to see if the player has moved. If so, the subroutine processes player movement accordingly (check the tile they're standing on, change it if necessary, what have you).

There are eight slots for walking subroutines, and the defined subroutines (pointed to by pointers at 0x083A7310) are:
#0 at 0x0806E955: Nop
#1 at 0x0806EB55: Broken (R/S/E leftover: Route 113 ash-covered grass)
#2 at 0x0806E955: Nop
#3 at 0x0806E955: Nop
#4 at 0x0806E9E1: Icefall Cave ice tiles
#5 at 0x0806E955: Nop
#6 at 0x0806E955: Nop
#7 at 0x0806EC41: Broken (R/S/E leftover: Granite Cave/Sky Pillar broken floor tiles)

(The three defined subroutines basically change certain tiles out from under the player's feet. Theoretically, though, a subroutine can do anything it wants on every frame of animation that the overworld is being processed.)

What this means is that we now have an official way -- something that was designed for this use -- to set up our own custom-made ASM functions to run the very instant the player takes a step. If we keep the broken functions in the table, we can define up to four custom ASM subroutines; if we ditch those, we can define six.

(We could also repoint and extend the subroutine pointer table, and modify the related ASM code, thereby allowing up to 255 custom subroutines to be predefined and activated with cmda6.)

One possible use case for all of this would be an alternate (and more script-friendly) implementation of JPAN-style walking scripts, which would work without breaking other game functions (i.e. wild encounters in tall grass).

For more information, see the description for cmda6 in my FireRed script command reference.

Oh, something else: the R/S/E leftovers prove that this discovery applies to all Advance-generation games. The offsets will differ, and the walking subroutines will have some differences in R/S/E, but the system itself exists in all Pokemon GBA games.

__________________
Reply With Quote
  #168    
Old September 26th, 2011 (6:42 PM). Edited September 26th, 2011 by DavidJCobb.
DavidJCobb DavidJCobb is offline
RESIDENT RAAAAAAAAAAAAGEMASTER
 
Join Date: Jul 2010
Gender: Male
Nature: Lonely
Posts: 275

Here's some information that may make my previous discovery more useful.

First, a demonstration.

Next, the walking subroutine that I used in that demonstration, with comments added. Modifying this should allow for easily-controlled tile-changing-when-stepped on effects.

Spoiler:
Code:
.align 2
.thumb

SUBR_MAIN: push {r4-r7,lr} add sp, #-0x4 lsl r0, r0, #0x18 lsr r0, r0, #0x18 ldr r2, EXECUTION_QUEUE add r2, r2, #0x8 lsl r1, r0, #0x2 add r1, r1, r0 lsl r1, r1, #0x3 add r5, r1, r2 // r5 is the start of roughly 30 bytes of RAM alotted for this functionality mov r1, #0x2 ldsh r0, [r5, r1] // we use this as part of a queueing system cmp r0, #0x0 // only happens after switching subroutines with cmda6 (the 30 bytes are cleared) beq SUBR_INIT cmp r0, #0x1 // 1 means that we're listening for footsteps beq SUBR_STEP bgt SUBR_TILE // higher values mean we have a tile change queued mov r0, #0x1 strh r0, [r5, #0x2]

SUBR_RTRN: add sp, #0x4 pop {r4-r7} pop {pc}

SUBR_INIT: // initialize our state data mov r4, sp add r4, r4, #0x2 mov r1, r4 ldr r3, F_GET_COORDS bl CALL_R3 ldrh r2, [sp] strh r2, [r5, #0x4] // we ldrh r0, [r4] strh r0, [r5, #0x6] ldr r2, DEFAULT_COLOR strh r2, [r5, #0x8] mov r2, #0x0 strh r2, [r5, #0xC] mov r2, #0x1 strh r2, [r5, #0x2] b SUBR_RTRN

SUBR_STEP: // check if the player's taken a step mov r4, sp add r4, r4, #0x2 mov r1, r4 mov r0, sp ldr r3, F_GET_COORDS bl CALL_R3 mov r0, sp // compare current coords to logged coords ldrh r2, [r0] mov r3, #0x0 ldsh r1, [r0, r3] mov r3, #0x4 ldsh r0, [r5, r3] cmp r0, r1 bne SUBR_STEP_CHECK_SWITCH mov r3, #0x0 ldsh r1, [r4, r3] mov r3, #0x6 ldsh r0, [r5, r3] cmp r0, r1 beq SUBR_RTRN b SUBR_STEP_CHECK_SWITCH

SUBR_STEP_CHECK_SWITCH: strh r2, [r5, #0x4] // log the new coords ldrh r0, [r4] strh r0, [r5, #0x6] mov r0, sp mov r3, #0x0 ldsh r0, [r0, r3] ldsh r1, [r4, r3] ldr r3, F_GET_TILE // check if the player's standing on one of the "palette" tiles bl CALL_R3 mov r2, #0x0 ldr r1, BLUE_SWITCH_TILE cmp r0, r1 beq SUBR_STEP_SET_BLUE ldr r1, RED_SWITCH_TILE cmp r0, r1 beq SUBR_STEP_SET_RED ldr r1, GREEN_SWITCH_TILE cmp r0, r1 beq SUBR_STEP_SET_GREEN ldr r1, WHITE_SWITCH_TILE cmp r0, r1 beq SUBR_STEP_SET_WHITE b SUBR_STEP_CHECK_CANVAS

SUBR_STEP_SET_BLUE: ldr r2, BLUE_CANVAS_TILE b SUBR_STEP_SET

SUBR_STEP_SET_RED: ldr r2, RED_CANVAS_TILE b SUBR_STEP_SET

SUBR_STEP_SET_GREEN: ldr r2, GREEN_CANVAS_TILE b SUBR_STEP_SET

SUBR_STEP_SET_WHITE: ldr r2, WHITE_CANVAS_TILE b SUBR_STEP_SET

SUBR_STEP_SET: strh r2, [r5, #0x8] // if so, store their selection (tile ID of color to change to) b SUBR_RTRN

SUBR_STEP_CHECK_CANVAS: // check if standing on a "canvas" tile ldr r2, BLUE_CANVAS_TILE cmp r0, r2 beq SUBR_STEP_QUEUE_CANVAS ldr r2, RED_CANVAS_TILE cmp r0, r2 beq SUBR_STEP_QUEUE_CANVAS ldr r2, GREEN_CANVAS_TILE cmp r0, r2 beq SUBR_STEP_QUEUE_CANVAS ldr r2, WHITE_CANVAS_TILE cmp r0, r2 beq SUBR_STEP_QUEUE_CANVAS b SUBR_RTRN

SUBR_STEP_QUEUE_CANVAS: mov r2, #0x4 // if so, queue a change strh r2, [r5, #0xC] mov r0, #0x2 strh r0, [r5, #0x2] ldrh r0, [sp] strh r0, [r5, #0xE] ldrh r0, [r4] strh r0, [r5, #0x10] b SUBR_RTRN

SUBR_TILE: ldrh r0, [r5, #0xC] cmp r0, #0x1 // we can delay a change by a specific number of frames bgt SUBR_TILE_DELAY mov r1, sp ldrh r0, [r5, #0xE] strh r0, [r1] mov r4, sp add r4, r4, #0x2 ldrh r0, [r5, #0x10] strh r0, [r4] mov r0, #0x24 // the "ice tile just cracked" sound ldr r3, F_PLAY_SOUND bl CALL_R3 mov r0, sp mov r3, #0x0 ldsh r0, [r0, r3] ldsh r1, [r4, r3] ldrh r2, [r5, #0x8] ldr r3, F_CHANGE_TILE bl CALL_R3 mov r0, sp mov r3, #0x0 ldsh r0, [r0, r3] ldsh r1, [r4, r3] ldr r3, F_REPAINT_TILE // not entirely sure how it works, but it does update the specified tile's entries in graphical memory bl CALL_R3 mov r0, #0x1 strh r0, [r5, #0x2] b SUBR_RTRN

SUBR_TILE_DELAY: sub r0, #0x1 strh r0, [r5, #0xC] b SUBR_RTRN

CALL_R3: bx r3 bx lr

.align 2 F_GET_COORDS: .word 0x0805C539

F_GET_TILE: .word 0x08058E49

F_PLAY_SOUND: .word 0x080722CD

F_CHANGE_TILE: .word 0x08058FA5

F_REPAINT_TILE: .word 0x0805A8E9

EXECUTION_QUEUE: .word 0x03005090

// Everything below here is a tile number in the major and minor tilesets // You'd basically use the hex values that AMap shows you when you mouseover a given tile DEFAULT_COLOR: .word 0x000003F4

BLUE_CANVAS_TILE: .word 0x000003EC

RED_CANVAS_TILE: .word 0x000003ED

GREEN_CANVAS_TILE: .word 0x000003F5

WHITE_CANVAS_TILE: .word 0x000003F4

BLUE_SWITCH_TILE: .word 0x000003E9

RED_SWITCH_TILE: .word 0x000003EA

GREEN_SWITCH_TILE: .word 0x000003EB

WHITE_SWITCH_TILE: .word 0x000003F1

The upshot of all of this is that it is now very easy to make polished effects like a floor cracking underneath the player's feet, for example -- complete with sound effects and perhaps even other behaviors.

That alone could be used for things like unique Gym puzzles. Theoretically, that is just scratching the surface of this functionality's potential, however. Remember that it runs on every frame of animation in which the overworld is being shown and/or processed. In theory, you could do things like timing how long the player stands on a block, or tampering with the movement patterns of an NPC (this runs when you take a step, not when you finish moving, so problems waiting for movement should be few and far between).

And so this concludes my research on CmdA6.

__________________
Reply With Quote
  #169    
Old October 6th, 2011 (7:38 AM).
knizz's Avatar
knizz knizz is offline
 
Join Date: Aug 2007
Posts: 192

Quote originally posted by DavidJCobb:
At 0x03005090, there is a list of ASM functions to be executed on every frame of animation. Each entry in the list is a pointer to the routine, some metadata about the list item itself, and thirty-or-so bytes for the routine to work with (so that it may maintain its state).
FINALLY! Finally someone understands the relevance of this list.
I called it callback3-list and all functions that can be in one of it's slots are prefixed with c3_ in my database. The walking routine manager (0x0806E811) is called c3_ash in it. The table with the eight slots (0x083A7310) is named 'ashtable'.

The ash handler calls 'music_play' and 'setmaptile' internally. Once at 0806EB22 (Tile 0x35B) and another time at 0806EAD8 (Tile 0x35A). A subfunction (0806E958) that is called from 0806EA82 and sets some flags.

I didn't know that this is controllable via the 0xA6 command. So thanks for telling.

__________________
Firered IDA 6.5 DB: https://www.dropbox.com/s/d856o3pyndyr5sr/firered.idb
VBA-M with lua scripting support
Reply With Quote
  #170    
Old October 13th, 2011 (7:21 AM).
slawter666 slawter666 is offline
 
Join Date: Sep 2008
Posts: 67

Is the screen size for the GBA Pokémon games (240 x 160) set within the ROM or the GBA hardware? And if it was theoretically possible to expand it to the DS screen size (or greater)(256 x 192) would it be that size on an emulator or if it was played on a DS or would it still be limited to the original GBA screen size?

Reply With Quote
  #171    
Old October 13th, 2011 (7:57 AM).
Team Fail's Avatar
Team Fail Team Fail is online now

burning passion

ModeratorCS
 
Join Date: May 2009
Location: yes
Age: 21
Gender: Male
Nature: Brave
Posts: 12,453

Quote originally posted by slawter666:
Is the screen size for the GBA Pokémon games (240 x 160) set within the ROM or the GBA hardware? And if it was theoretically possible to expand it to the DS screen size (or greater)(256 x 192) would it be that size on an emulator or if it was played on a DS or would it still be limited to the original GBA screen size?

It's set by the GBA hardware. And, if it were played on DS hardware, it might just be scaled to fit the screen.

__________________
CONTENTS
001
  THE LAB
002
  VISITOR MESSAGE
003
  PRIVATE MESSAGE
004
  PUSHING BUTTONS
005
  PUSHING BUTTONS BLOG
006
  ALT
007
  PHO
008
  PAIR 1
009
  PAIR 2
010
  TWITTER
011
  TF'S MUSIC STUDIO
012
  PC DISCORD - #GENERAL
SEEN
151

OWN
151
DATA
CRY
AREA
QUIT
Reply With Quote
  #172    
Old October 13th, 2011 (8:27 AM). Edited October 13th, 2011 by The 100 Mega Shock.
The 100 Mega Shock The 100 Mega Shock is offline
Gold Tier
 
Join Date: Aug 2010
Gender: Male
Posts: 1,235

Even if you tried expanding the viewable area on an emulator I'm almost certain that the system would not draw anything outside of the original screen size, due to the nature of how 2D consoles, and emulation of them, work

You can do this with emulators for 3D consoles like N64, DC and Gamecube, but they're a completely different beast when it comes to emulation and passing the graphics to your computer to be drawn - and it totally depends on the game whether or not you'll get a useful result from displaying more screen area than was originally intended.

As for your other point, for all intents and purposes the DS is treated as a Game Boy Advance when it goes into backwards compatibility mode - the main processor of the GBA is identical to the second processor of the DS, so the game's code can be run natively on the system. It behaves exactly the same as a GBA would.

__________________
Reply With Quote
  #173    
Old October 13th, 2011 (11:03 AM).
romancandle romancandle is offline
 
Join Date: Oct 2009
Gender: Male
Nature: Adamant
Posts: 72

How hard would it be to make a tool for editing Pokemon Abilities--names, effects, descriptions--or adding new ones in Gen III?

Reply With Quote
  #174    
Old October 13th, 2011 (11:26 AM).
Gamer2020's Avatar
Gamer2020 Gamer2020 is offline
Accept no Imitations!
 
Join Date: Jun 2008
Location: Distant Land
Gender: Male
Nature: Bold
Posts: 846
Send a message via Skype™ to Gamer2020

Quote originally posted by romancandle:
How hard would it be to make a tool for editing Pokemon Abilities--names, effects, descriptions--or adding new ones in Gen III?
I'm not sure but I think someone made one already.

__________________

Pokemon Game Editor Download!
Accept no imitations!
Reply With Quote
  #175    
Old October 13th, 2011 (11:35 AM).
romancandle romancandle is offline
 
Join Date: Oct 2009
Gender: Male
Nature: Adamant
Posts: 72

Quote originally posted by Gamer2020:

I'm not sure but I think someone made one already.

I sure haven't found any, but then again, I'm not a great searcher. I've tried Google and searching these forums specifically. If you find it, please PM a link to me.

Reply With Quote
Reply
Quick Reply

Sponsored Links
Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -8. The time now is 5:43 PM.