shithub: pokecrystal

Download patch

ref: 31cce83e9b3bab01d8a605b170549fbd25ca5fee
parent: c2ad79c4f21b5f4dd661d69a7a81b69506be8821
author: Remy Oukaour <[email protected]>
date: Mon Dec 11 08:47:58 EST 2017

Move lots of data tables into individual data/ files
(This is not expected to be their final location, but it makes them easier to relocate when necessary, and easier for users to edit until the whole project's file structure is finalized.)

--- a/constants.asm
+++ b/constants.asm
@@ -29,6 +29,7 @@
 INCLUDE "constants/std_constants.asm"
 INCLUDE "constants/deco_constants.asm"
 INCLUDE "constants/radio_constants.asm"
+INCLUDE "constants/npctrade_constants.asm"
 INCLUDE "constants/sprite_constants.asm"
 INCLUDE "constants/tileset_constants.asm"
 INCLUDE "constants/cgb_constants.asm"
--- a/constants/deco_constants.asm
+++ b/constants/deco_constants.asm
@@ -59,7 +59,7 @@
 	enum DECOFLAG_\1
 endm
 
-; decorations
+; decorations (see data/decoration_attribute.asm)
 const_value = 1
 __enum__ = 0
 	const BEDS
--- a/constants/item_constants.asm
+++ b/constants/item_constants.asm
@@ -197,6 +197,7 @@
 	const MIRAGE_MAIL  ; $BD
 	const ITEM_BE      ; $BE
 
+; see data/tmhm_moves.asm for moves
 	add_tm DYNAMICPUNCH ; $BF
 	add_tm HEADBUTT     ; $C0
 	add_tm CURSE        ; $C1
--- a/constants/landmark_constants.asm
+++ b/constants/landmark_constants.asm
@@ -1,4 +1,4 @@
-; Landmarks indexes (see engine/landmarks.asm)
+; Landmarks indexes (see data/landmarks.asm)
 	const_def
 
 ; Johto landmarks
--- a/constants/map_constants.asm
+++ b/constants/map_constants.asm
@@ -603,7 +603,7 @@
 EMOTE_OBJECT EQU 7
 
 
-; SpawnPoints indexes (see engine/spawn_points.asm)
+; SpawnPoints indexes (see data/spawn_points.asm)
 const_value = -1
 	const SPAWN_N_A
 	const SPAWN_HOME
@@ -679,7 +679,7 @@
 	const EMOTE_GRASS_RUSTLE ; 11
 EMOTE_MEM EQU -1
 
-; FruitTreeItems indexes (see engine/fruit_trees.asm)
+; FruitTreeItems indexes (see data/fruit_tree_items.asm)
 const_value SET 1
 	const FRUITTREE_ROUTE_29      ; 01
 	const FRUITTREE_ROUTE_30_1    ; 02
--- a/constants/misc_constants.asm
+++ b/constants/misc_constants.asm
@@ -25,6 +25,7 @@
 MOVE_NAME_LENGTH   EQU 13
 ITEM_NAME_LENGTH   EQU 13
 TRAINER_CLASS_NAME_LENGTH EQU 13
+NAME_LENGTH_JAPANESE EQU 6
 
 ; GetName types (see home.asm)
 PKMN_NAME     EQU 1
@@ -82,7 +83,12 @@
 NUM_HOF_TEAMS = 30
 
 
-; ChangeHappiness arguments (see event/happiness_egg.asm)
+; significant money values
+START_MONEY EQU 3000
+MOM_MONEY   EQU 2300
+
+
+; ChangeHappiness arguments (see data/happiness_changes.asm)
 const_value = 1
 	const HAPPINESS_GAINLEVEL         ; 01
 	const HAPPINESS_USEDITEM          ; 02
--- /dev/null
+++ b/constants/npctrade_constants.asm
@@ -1,0 +1,21 @@
+; npctrade struct members (see data/npc_trades.asm)
+TRADE_DIALOG  EQU 0
+TRADE_GIVEMON EQU 1
+TRADE_GETMON  EQU 2
+TRADE_NICK    EQU 3
+TRADE_DVS     EQU 14
+TRADE_ITEM    EQU 16
+TRADE_OT_ID   EQU 17
+TRADE_OT_NAME EQU 19
+TRADE_GENDER  EQU 30
+TRADE_PADDING EQU 31
+
+; NPCTrades indexes (see data/npc_trades.asm)
+	const_def
+	const NPCTRADE_MIKE   ; 0
+	const NPCTRADE_KYLE   ; 1
+	const NPCTRADE_TIM    ; 2
+	const NPCTRADE_EMY    ; 3
+	const NPCTRADE_CHRIS  ; 4
+	const NPCTRADE_KIM    ; 5
+	const NPCTRADE_FOREST ; 6
--- a/constants/phone_constants.asm
+++ b/constants/phone_constants.asm
@@ -1,4 +1,4 @@
-; PhoneContacts indexes (see engine/phone.asm)
+; PhoneContacts indexes (see data/phone_contacts.asm)
 	const_def
 	const PHONE_00
 	const PHONE_MOM
@@ -39,7 +39,7 @@
 	const PHONE_PICNICKER_ERIN
 	const PHONE_BUENA
 
-; SpecialPhoneCallList indexes (see engine/phone.asm)
+; SpecialPhoneCallList indexes (see data/phone_special.asm)
 	const_def
 	const SPECIALCALL_NONE
 	const SPECIALCALL_POKERUS
--- a/constants/pokemon_constants.asm
+++ b/constants/pokemon_constants.asm
@@ -14,7 +14,7 @@
 ; - PicPointers (see gfx/pics/pic_pointers.asm)
 ; - AlphabeticalPokedexOrder (see data/pokedex/order_alpha.asm)
 ; - NewPokedexOrder (see data/pokedex/order_new.asm)
-; - MonMenuIcons (see menu/mon_icons.asm)
+; - MonMenuIcons (see data/mon_menu_icons.asm)
 ; - Pokered_MonIndices (see engine/time_capsule/conversion.asm)
 ; - SortedPokemon (see misc/fixed_words.asm)
 const_value set 1
--- a/constants/pokemon_data_constants.asm
+++ b/constants/pokemon_data_constants.asm
@@ -27,8 +27,9 @@
 	const NO_EGGS      ; f
 
 
-; IconPointers indexes (see menu/mon_icons.asm)
-const_value SET 1
+; IconPointers indexes (see gfx/icon_pointers.asm)
+	const_def
+	const ICON_NULL
 	const ICON_POLIWAG
 	const ICON_JIGGLYPUFF
 	const ICON_DIGLETT
@@ -94,6 +95,8 @@
 BASE_HAPPINESS        EQU 70
 FRIEND_BALL_HAPPINESS EQU 200
 HAPPINESS_TO_EVOLVE   EQU 220
+HAPPINESS_THRESHOLD_1 EQU 100
+HAPPINESS_THRESHOLD_2 EQU 200
 
 
 NUM_GRASSMON EQU 7 ; data/wild/*_grass.asm table size
--- a/constants/sprite_constants.asm
+++ b/constants/sprite_constants.asm
@@ -105,7 +105,7 @@
 	const SPRITE_RAIKOU ; 65
 	const SPRITE_STANDING_YOUNGSTER ; 66
 
-; SpriteMons indexes (see engine/overworld.asm)
+; SpriteMons indexes (see data/sprite_mons.asm)
 const_value SET $80
 SPRITE_POKEMON EQU const_value
 	const SPRITE_UNOWN ; 80
@@ -326,7 +326,7 @@
 	const PERSON_ACTION_GRASS_SHAKE
 	const PERSON_ACTION_SKYFALL
 
-; Facings indexes (see engine/facings.asm)
+; Facings indexes (see data/facings.asm)
 	const_def
 	const FACING_STEP_DOWN_0
 	const FACING_STEP_DOWN_1
@@ -487,7 +487,7 @@
 	const SPRITE_ANIM_SEQ_INTRO_UNOWN_F
 	const SPRITE_ANIM_SEQ_INTRO_SUICUNE_AWAY
 
-; SpriteAnimSeqData indexes (see engine/sprites.asm)
+; SpriteAnimSeqData indexes (see data/sprite_anim_seqs.asm)
 	const_def
 	const SPRITE_ANIM_INDEX_PARTY_MON
 	const SPRITE_ANIM_INDEX_01
--- a/constants/wram_constants.asm
+++ b/constants/wram_constants.asm
@@ -7,27 +7,38 @@
 	const WILDMON    ; 4
 
 ; Options: (bits) ; cfcc
-const_value SET 5
-	const STEREO       ; 5
-	const BATTLE_SHIFT ; 6
-	const BATTLE_SCENE ; 7
+const_value SET 4
+	const NO_TEXT_SCROLL ; 4
+	const STEREO         ; 5
+	const BATTLE_SHIFT   ; 6
+	const BATTLE_SCENE   ; 7
 
-; Options: (bits 0-2 values) ; cfcc
-FAST_TEXT      EQU 0
-MED_TEXT       EQU 1
-SLOW_TEXT      EQU 2
-NO_TEXT_SCROLL EQU 4
+; Options: (bits 0-2)
+TEXT_DELAY_FAST EQU 1
+TEXT_DELAY_MED  EQU 3
+TEXT_DELAY_SLOW EQU 5
 
+; TextBoxFrame: ; cfce
+	const_def
+	const FRAME_1 ; 0
+	const FRAME_2 ; 1
+	const FRAME_3 ; 2
+	const FRAME_4 ; 3
+	const FRAME_5 ; 4
+	const FRAME_6 ; 5
+	const FRAME_7 ; 6
+	const FRAME_8 ; 7
+
 ; Options2:
 	const_def
 	const MENU_ACCOUNT ; 0
 
 ; GBPrinter:
-PRINT_LIGHTEST EQU $00
-PRINT_LIGHTER  EQU $20
-PRINT_NORMAL   EQU $40
-PRINT_DARKER   EQU $60
-PRINT_DARKEST  EQU $7f
+GBPRINTER_LIGHTEST EQU $00
+GBPRINTER_LIGHTER  EQU $20
+GBPRINTER_NORMAL   EQU $40
+GBPRINTER_DARKER   EQU $60
+GBPRINTER_DARKEST  EQU $7f
 
 ; WalkingDirection: ; d043
 const_value SET -1
--- a/data/battle_tower.asm
+++ b/data/battle_tower.asm
@@ -1,212 +1,3 @@
-Function_LoadOpponentTrainerAndPokemons: ; 1f8000
-	ld a, [rSVBK]
-	push af
-	ld a, BANK(BT_OTTrainer)
-	ld [rSVBK], a
-
-	; Fill BT_OTTrainer with zeros
-	xor a
-	ld hl, BT_OTTrainer
-	ld bc, BT_OTTrainerEnd - BT_OTTrainer
-	call ByteFill
-
-	; Write $ff into the Item-Slots
-	ld a, $ff
-	ld [BT_OTPkmn1Item], a
-	ld [BT_OTPkmn2Item], a
-	ld [BT_OTPkmn3Item], a
-
-	; Set BT_OTTrainer as start address to write the following data to
-	ld de, BT_OTTrainer
-
-	ld a, [hRandomAdd]
-	ld b, a
-.resample ; loop to find a random trainer
-	call Random
-	ld a, [hRandomAdd]
-	add b
-	ld b, a ; b contains the nr of the trainer
-IF DEF(CRYSTAL11)
-	and (1 << 7) - 1
-	cp 70
-ELSE
-	and (1 << 5) - 1
-	cp 21
-ENDC
-	jr nc, .resample
-	ld b, a
-
-	ld a, BANK(sBTTrainers)
-	call GetSRAMBank
-
-	ld c, BATTLETOWER_NROFTRAINERS
-	ld hl, sBTTrainers
-.next_trainer
-	ld a, [hli]
-	cp b
-	jr z, .resample
-	dec c
-	jr nz, .next_trainer ; c <= 7  initialise all 7 trainers?
-
-	ld hl, sBTTrainers
-	ld a, [sNrOfBeatenBattleTowerTrainers]
-	ld c, a
-	ld a, b
-	ld b, 0
-	add hl, bc
-	ld [hl], a
-
-	call CloseSRAM
-
-	push af
-; Copy name (10 bytes) and class (1 byte) of trainer
-	ld hl, BattleTowerTrainers
-	ld bc, NAME_LENGTH
-	call AddNTimes
-	ld bc, NAME_LENGTH
-	call CopyBytes
-
-	call Function_LoadRandomBattleTowerPkmn
-	pop af
-
-	ld hl, BattleTowerTrainerData
-	ld bc, BATTLETOWER_TRAINERDATALENGTH
-	call AddNTimes
-	ld bc, BATTLETOWER_TRAINERDATALENGTH
-.copy_bt_trainer_data_loop
-	ld a, BANK(BattleTowerTrainerData)
-	call GetFarByte
-	ld [de], a
-	inc hl
-	inc de
-	dec bc
-	ld a, b
-	or c
-	jr nz, .copy_bt_trainer_data_loop
-
-	pop af
-	ld [rSVBK], a
-
-	ret
-
-
-Function_LoadRandomBattleTowerPkmn: ; 1f8081
-	ld c, BATTLETOWER_NROFPKMNS
-.loop
-	push bc
-	ld a, BANK(sBTPkmnPrevTrainer1)
-	call GetSRAMBank
-
-.FindARandomBattleTowerPkmn:
-	; From Which LevelGroup are the Pkmn loaded
-	; a = 1..10
-	ld a, [wBTChoiceOfLvlGroup] ; [$d800]
-	dec a
-	ld hl, BattleTowerMons
-	ld bc, BattleTowerMons2 - BattleTowerMons1
-	call AddNTimes
-
-	ld a, [hRandomAdd]
-	ld b, a
-.resample
-	call Random
-	ld a, [hRandomAdd]
-	add b
-	ld b, a
-	and $1f
-	cp BATTLETOWER_NRMONSPERLEVELBRACKET
-	jr nc, .resample
-	; in register 'a' is the chosen Pkmn of the LevelGroup
-
-	; Check if Pkmn was already loaded before
-	; Check current and the 2 previous teams
-	; includes check if item is double at the current team
-	ld bc, PARTYMON_STRUCT_LENGTH + PKMN_NAME_LENGTH
-	call AddNTimes
-	ld a, [hli]
-	ld b, a
-	ld a, [hld]
-	ld c, a
-	ld a, [BT_OTPkmn1]
-	cp b
-	jr z, .FindARandomBattleTowerPkmn
-	ld a, [BT_OTPkmn1Item]
-	cp c
-	jr z, .FindARandomBattleTowerPkmn
-	ld a, [BT_OTPkmn2]
-	cp b
-	jr z, .FindARandomBattleTowerPkmn
-	ld a, [BT_OTPkmn2Item]
-	cp c
-	jr z, .FindARandomBattleTowerPkmn
-	ld a, [BT_OTPkmn3]
-	cp b
-	jr z, .FindARandomBattleTowerPkmn
-	ld a, [BT_OTPkmn3Item]
-	cp c
-	jr z, .FindARandomBattleTowerPkmn
-	ld a, [sBTPkmnPrevTrainer1]
-	cp b
-	jr z, .FindARandomBattleTowerPkmn
-	ld a, [sBTPkmnPrevTrainer2]
-	cp b
-	jr z, .FindARandomBattleTowerPkmn
-	ld a, [sBTPkmnPrevTrainer3]
-	cp b
-	jr z, .FindARandomBattleTowerPkmn
-	ld a, [sBTPkmnPrevPrevTrainer1]
-	cp b
-	jr z, .FindARandomBattleTowerPkmn
-	ld a, [sBTPkmnPrevPrevTrainer2]
-	cp b
-	jr z, .FindARandomBattleTowerPkmn
-	ld a, [sBTPkmnPrevPrevTrainer3]
-	cp b
-	jr z, .FindARandomBattleTowerPkmn
-
-	ld bc, PARTYMON_STRUCT_LENGTH + PKMN_NAME_LENGTH
-	call CopyBytes
-
-	ld a, [wNamedObjectIndexBuffer]
-	push af
-	push de
-	ld hl, - (PARTYMON_STRUCT_LENGTH + PKMN_NAME_LENGTH)
-	add hl, de
-	ld a, [hl]
-	ld [wNamedObjectIndexBuffer], a
-	ld bc, PARTYMON_STRUCT_LENGTH
-	add hl, bc
-	push hl
-	call GetPokemonName
-	ld h, d
-	ld l, e
-	pop de
-	ld bc, PKMN_NAME_LENGTH
-	call CopyBytes
-
-	pop de
-	pop af
-	ld [wNamedObjectIndexBuffer], a
-	pop bc
-	dec c
-	jp nz, .loop
-
-	ld a, [sBTPkmnPrevTrainer1]
-	ld [sBTPkmnPrevPrevTrainer1], a
-	ld a, [sBTPkmnPrevTrainer2]
-	ld [sBTPkmnPrevPrevTrainer2], a
-	ld a, [sBTPkmnPrevTrainer3]
-	ld [sBTPkmnPrevPrevTrainer3], a
-	ld a, [BT_OTPkmn1]
-	ld [sBTPkmnPrevTrainer1], a
-	ld a, [BT_OTPkmn2]
-	ld [sBTPkmnPrevTrainer2], a
-	ld a, [BT_OTPkmn3]
-	ld [sBTPkmnPrevTrainer3], a
-	call CloseSRAM
-	ret
-; 1f814e
-
 BattleTowerTrainers: ; 1f814e
 ; The trainer class is not used in Crystal 1.0 due to a bug.
 ; Instead, the sixth character in the trainer's name is used.
--- /dev/null
+++ b/data/decoration_attributes.asm
@@ -1,0 +1,60 @@
+decoration: MACRO
+	; type, name, command, event flag, tile/sprite
+	db \1, \2, \3
+	dw \4
+	db \5
+ENDM
+
+	decoration DECO_PLANT,   $00,            $0,                EVENT_GAVE_KURT_APRICORNS,       $00
+	decoration DECO_PLANT,   PUT_IT_AWAY,    PUT_AWAY_BED,      EVENT_GAVE_KURT_APRICORNS,       $00
+	decoration DECO_BED,     FEATHERY_BED,   SET_UP_BED,        EVENT_DECO_BED_1,                $1b
+	decoration DECO_BED,     PINK_BED,       SET_UP_BED,        EVENT_DECO_BED_2,                $1c
+	decoration DECO_BED,     POLKADOT_BED,   SET_UP_BED,        EVENT_DECO_BED_3,                $1d
+	decoration DECO_BED,     PIKACHU_BED,    SET_UP_BED,        EVENT_DECO_BED_4,                $1e
+	decoration DECO_PLANT,   PUT_IT_AWAY,    PUT_AWAY_CARPET,   EVENT_GAVE_KURT_APRICORNS,       $00
+	decoration DECO_CARPET,  RED_CARPET,     SET_UP_CARPET,     EVENT_DECO_CARPET_1,             $08
+	decoration DECO_CARPET,  BLUE_CARPET,    SET_UP_CARPET,     EVENT_DECO_CARPET_2,             $0b
+	decoration DECO_CARPET,  YELLOW_CARPET,  SET_UP_CARPET,     EVENT_DECO_CARPET_3,             $0e
+	decoration DECO_CARPET,  GREEN_CARPET,   SET_UP_CARPET,     EVENT_DECO_CARPET_4,             $11
+	decoration DECO_PLANT,   PUT_IT_AWAY,    PUT_AWAY_PLANT,    EVENT_GAVE_KURT_APRICORNS,       $00
+	decoration DECO_PLANT,   MAGNAPLANT,     SET_UP_PLANT,      EVENT_DECO_PLANT_1,              $20
+	decoration DECO_PLANT,   TROPICPLANT,    SET_UP_PLANT,      EVENT_DECO_PLANT_2,              $21
+	decoration DECO_PLANT,   JUMBOPLANT,     SET_UP_PLANT,      EVENT_DECO_PLANT_3,              $22
+	decoration DECO_PLANT,   PUT_IT_AWAY,    PUT_AWAY_POSTER,   EVENT_GAVE_KURT_APRICORNS,       $00
+	decoration DECO_PLANT,   TOWN_MAP_D,     SET_UP_POSTER,     EVENT_DECO_PLANT_4,              $1f
+	decoration DECO_POSTER,  PIKACHU,        SET_UP_POSTER,     EVENT_DECO_POSTER_1,             $23
+	decoration DECO_POSTER,  CLEFAIRY,       SET_UP_POSTER,     EVENT_DECO_POSTER_2,             $24
+	decoration DECO_POSTER,  JIGGLYPUFF,     SET_UP_POSTER,     EVENT_DECO_POSTER_3,             $25
+	decoration DECO_PLANT,   PUT_IT_AWAY,    PUT_AWAY_CONSOLE,  EVENT_GAVE_KURT_APRICORNS,       $00
+	decoration DECO_PLANT,   FAMICOM,        SET_UP_CONSOLE,    EVENT_DECO_FAMICOM,              SPRITE_FAMICOM
+	decoration DECO_PLANT,   SUPER_NES,      SET_UP_CONSOLE,    EVENT_DECO_SNES,                 SPRITE_SNES
+	decoration DECO_PLANT,   NINTENDO_64,    SET_UP_CONSOLE,    EVENT_DECO_N64,                  SPRITE_N64
+	decoration DECO_PLANT,   VIRTUAL_BOY,    SET_UP_CONSOLE,    EVENT_DECO_VIRTUAL_BOY,          SPRITE_VIRTUAL_BOY
+	decoration DECO_PLANT,   PUT_IT_AWAY,    PUT_AWAY_BIG_DOLL, EVENT_GAVE_KURT_APRICORNS,       $00
+	decoration DECO_BIGDOLL, SNORLAX,        SET_UP_BIG_DOLL,   EVENT_DECO_BIG_SNORLAX_DOLL,     SPRITE_BIG_SNORLAX
+	decoration DECO_BIGDOLL, ONIX,           SET_UP_BIG_DOLL,   EVENT_DECO_BIG_ONIX_DOLL,        SPRITE_BIG_ONIX
+	decoration DECO_BIGDOLL, LAPRAS,         SET_UP_BIG_DOLL,   EVENT_DECO_BIG_LAPRAS_DOLL,      SPRITE_BIG_LAPRAS
+	decoration DECO_PLANT,   PUT_IT_AWAY,    PUT_AWAY_DOLL,     EVENT_GAVE_KURT_APRICORNS,       $00
+	decoration DECO_DOLL,    PIKACHU,        SET_UP_DOLL,       EVENT_DECO_PIKACHU_DOLL,         SPRITE_PIKACHU
+	decoration DECO_PLANT,   SURF_PIKA_DOLL, SET_UP_DOLL,       EVENT_DECO_SURFING_PIKACHU_DOLL, SPRITE_SURFING_PIKACHU
+	decoration DECO_DOLL,    CLEFAIRY,       SET_UP_DOLL,       EVENT_DECO_CLEFAIRY_DOLL,        SPRITE_CLEFAIRY
+	decoration DECO_DOLL,    JIGGLYPUFF,     SET_UP_DOLL,       EVENT_DECO_JIGGLYPUFF_DOLL,      SPRITE_JIGGLYPUFF
+	decoration DECO_DOLL,    BULBASAUR,      SET_UP_DOLL,       EVENT_DECO_BULBASAUR_DOLL,       SPRITE_BULBASAUR
+	decoration DECO_DOLL,    CHARMANDER,     SET_UP_DOLL,       EVENT_DECO_CHARMANDER_DOLL,      SPRITE_CHARMANDER
+	decoration DECO_DOLL,    SQUIRTLE,       SET_UP_DOLL,       EVENT_DECO_SQUIRTLE_DOLL,        SPRITE_SQUIRTLE
+	decoration DECO_DOLL,    POLIWAG,        SET_UP_DOLL,       EVENT_DECO_POLIWAG_DOLL,         SPRITE_POLIWAG
+	decoration DECO_DOLL,    DIGLETT,        SET_UP_DOLL,       EVENT_DECO_DIGLETT_DOLL,         SPRITE_DIGLETT
+	decoration DECO_DOLL,    STARYU,         SET_UP_DOLL,       EVENT_DECO_STARMIE_DOLL,         SPRITE_STARMIE
+	decoration DECO_DOLL,    MAGIKARP,       SET_UP_DOLL,       EVENT_DECO_MAGIKARP_DOLL,        SPRITE_MAGIKARP
+	decoration DECO_DOLL,    ODDISH,         SET_UP_DOLL,       EVENT_DECO_ODDISH_DOLL,          SPRITE_ODDISH
+	decoration DECO_DOLL,    GENGAR,         SET_UP_DOLL,       EVENT_DECO_GENGAR_DOLL,          SPRITE_GENGAR
+	decoration DECO_DOLL,    SHELLDER,       SET_UP_DOLL,       EVENT_DECO_SHELLDER_DOLL,        SPRITE_SHELLDER
+	decoration DECO_DOLL,    GRIMER,         SET_UP_DOLL,       EVENT_DECO_GRIMER_DOLL,          SPRITE_GRIMER
+	decoration DECO_DOLL,    VOLTORB,        SET_UP_DOLL,       EVENT_DECO_VOLTORB_DOLL,         SPRITE_VOLTORB
+	decoration DECO_DOLL,    WEEDLE,         SET_UP_DOLL,       EVENT_DECO_WEEDLE_DOLL,          SPRITE_WEEDLE
+	decoration DECO_DOLL,    UNOWN,          SET_UP_DOLL,       EVENT_DECO_UNOWN_DOLL,           SPRITE_UNOWN
+	decoration DECO_DOLL,    GEODUDE,        SET_UP_DOLL,       EVENT_DECO_GEODUDE_DOLL,         SPRITE_GEODUDE
+	decoration DECO_DOLL,    MACHOP,         SET_UP_DOLL,       EVENT_DECO_MACHOP_DOLL,          SPRITE_MACHOP
+	decoration DECO_DOLL,    TENTACOOL,      SET_UP_DOLL,       EVENT_DECO_TENTACOOL_DOLL,       SPRITE_TENTACOOL
+	decoration DECO_PLANT,   GOLD_TROPHY,    SET_UP_DOLL,       EVENT_DECO_GOLD_TROPHY,          SPRITE_GOLD_TROPHY
+	decoration DECO_PLANT,   SILVER_TROPHY,  SET_UP_DOLL,       EVENT_DECO_SILVER_TROPHY,        SPRITE_SILVER_TROPHY
--- /dev/null
+++ b/data/default_options.asm
@@ -1,0 +1,16 @@
+; Options: med text speed
+	db TEXT_DELAY_MED
+; wSaveFileExists: no
+	db $00
+; TextBoxFrame: frame 1
+	db FRAME_1
+; TextBoxFlags: ??
+	db $01
+; GBPrinter: normal brightness
+	db GBPRINTER_NORMAL
+; Options2: menu account on
+	db $01
+; $cfd2: ??
+	db $00
+; $cfd3: ??
+	db $00
--- a/data/egg_move_pointers.asm
+++ b/data/egg_move_pointers.asm
@@ -1,4 +1,3 @@
-EggMovePointers:: ; 0x23b11
 	dw BulbasaurEggMoves
 	dw NoEggMoves
 	dw NoEggMoves
--- a/data/egg_moves.asm
+++ b/data/egg_moves.asm
@@ -10,6 +10,7 @@
 ; and can only breed with Ditto.
 
 
+EggMovePointers:: ; 0x23b11
 INCLUDE "data/egg_move_pointers.asm"
 
 
--- /dev/null
+++ b/data/emote_headers.asm
@@ -1,0 +1,20 @@
+emote_header: MACRO
+; graphics pointer, length, starting tile
+	dw \1
+	db \2 tiles, BANK(\1)
+	dw VTiles1 tile \3
+ENDM
+
+; entries correspond to EMOTE_* constants
+	emote_header ShockEmote,     4, $78
+	emote_header QuestionEmote,  4, $78
+	emote_header HappyEmote,     4, $78
+	emote_header SadEmote,       4, $78
+	emote_header HeartEmote,     4, $78
+	emote_header BoltEmote,      4, $78
+	emote_header SleepEmote,     4, $78
+	emote_header FishEmote,      4, $78
+	emote_header JumpShadowGFX,  1, $7c
+	emote_header FishingRodGFX,  2, $7c
+	emote_header BoulderDustGFX, 2, $7e
+	emote_header GrassRustleGFX, 1, $7e
--- /dev/null
+++ b/data/engine_flags.asm
@@ -1,0 +1,203 @@
+engine_flag: MACRO
+	dwb \1, 1 << \2
+ENDM
+
+	; location, bit
+	; (all locations are in WRAM bank 1)
+
+	; pokegear
+	engine_flag wPokegearFlags, 1 ; radio card       ; $0
+	engine_flag wPokegearFlags, 0 ; map card
+	engine_flag wPokegearFlags, 2 ; phone card
+	engine_flag wPokegearFlags, 3 ; expn card
+	engine_flag wPokegearFlags, 7 ; on/off
+
+	;   wDayCareMan, 7 ; day-care 1 on
+	engine_flag wDayCareMan, 6 ; egg is ready
+	;   wDayCareMan, 5 ; monster 1 and 2 are compatible
+	engine_flag wDayCareMan, 0 ; monster 1 in day-care
+
+	;   wDayCareLady, 7 = day-care 2 on
+	engine_flag wDayCareLady, 0 ; monster 2 in day-care
+
+	engine_flag wMomSavingMoney, 0 ; mom saving money ; $8
+	engine_flag wMomSavingMoney, 7 ; dst
+
+	engine_flag wUnusedTwoDayTimerOn, 0 ; unused, possibly related to a 2-day timer
+
+	engine_flag StatusFlags, 0 ; pokedex
+	engine_flag StatusFlags, 1 ; unown dex
+	engine_flag StatusFlags, 3 ; pokerus
+	engine_flag StatusFlags, 4 ; rocket signal on ch20
+	engine_flag StatusFlags, 6 ; credits skip
+	engine_flag StatusFlags, 7 ; bug contest on   ; $10
+	engine_flag StatusFlags2, 2 ; bug contest timer
+	engine_flag StatusFlags2, 1 ; safari zone?
+	engine_flag StatusFlags2, 0 ; rockets in radio tower
+	engine_flag StatusFlags2, 4 ; bike shop call enabled (1024 bike steps reqd)
+	engine_flag StatusFlags2, 5 ; give pokerus
+	engine_flag StatusFlags2, 6 ; berry -> berry juice when trading?
+	engine_flag StatusFlags2, 7 ; rockets in mahogany
+
+	engine_flag BikeFlags, 0 ; strength active  ; $18
+	engine_flag BikeFlags, 1 ; always on bike (cant surf)
+	engine_flag BikeFlags, 2 ; downhill (cycling road)
+
+	engine_flag JohtoBadges, 0 ; zephyrbadge
+	engine_flag JohtoBadges, 1 ; hivebadge
+	engine_flag JohtoBadges, 2 ; plainbadge
+	engine_flag JohtoBadges, 3 ; fogbadge
+	engine_flag JohtoBadges, 4 ; mineralbadge
+	engine_flag JohtoBadges, 5 ; stormbadge ; $20
+	engine_flag JohtoBadges, 6 ; glacierbadge
+	engine_flag JohtoBadges, 7 ; risingbadge
+
+	engine_flag KantoBadges, 0 ; boulderbadge
+	engine_flag KantoBadges, 1 ; cascadebadge
+	engine_flag KantoBadges, 2 ; thunderbadge
+	engine_flag KantoBadges, 3 ; rainbowbadge
+	engine_flag KantoBadges, 4 ; soulbadge
+	engine_flag KantoBadges, 5 ; marshbadge ; $28
+	engine_flag KantoBadges, 6 ; volcanobadge
+	engine_flag KantoBadges, 7 ; earthbadge
+
+	; unown sets
+	engine_flag UnlockedUnowns, 0 ; 1
+	engine_flag UnlockedUnowns, 1 ; 2
+	engine_flag UnlockedUnowns, 2 ; 3
+	engine_flag UnlockedUnowns, 3 ; 4
+	engine_flag UnlockedUnowns, 4 ; 5
+	engine_flag UnlockedUnowns, 5 ; 6       ; $30
+	engine_flag UnlockedUnowns, 6 ; 7
+	engine_flag UnlockedUnowns, 7 ; 8
+
+	; fly
+	engine_flag VisitedSpawns, 0     ; your house
+	engine_flag VisitedSpawns, 1     ; viridian pokecenter
+	engine_flag VisitedSpawns, 2     ; pallet
+	engine_flag VisitedSpawns, 3     ; viridian
+	engine_flag VisitedSpawns, 4     ; pewter
+	engine_flag VisitedSpawns, 5     ; cerulean ; $38
+	engine_flag VisitedSpawns, 6     ; rock tunnel
+	engine_flag VisitedSpawns, 7     ; vermilion
+	engine_flag VisitedSpawns + 1, 0 ; lavender
+	engine_flag VisitedSpawns + 1, 1 ; saffron
+	engine_flag VisitedSpawns + 1, 2 ; celadon
+	engine_flag VisitedSpawns + 1, 3 ; fuchsia
+	engine_flag VisitedSpawns + 1, 4 ; cinnabar
+	engine_flag VisitedSpawns + 1, 5 ; indigo plateau ; $40
+	engine_flag VisitedSpawns + 1, 6 ; new bark
+	engine_flag VisitedSpawns + 1, 7 ; cherrygrove
+	engine_flag VisitedSpawns + 2, 0 ; violet
+	                                 ; union cave
+	engine_flag VisitedSpawns + 2, 2 ; azalea
+	engine_flag VisitedSpawns + 2, 3 ; cianwood
+	engine_flag VisitedSpawns + 2, 4 ; goldenrod
+	engine_flag VisitedSpawns + 2, 5 ; olivine
+	engine_flag VisitedSpawns + 2, 6 ; ecruteak  ; $48
+	engine_flag VisitedSpawns + 2, 7 ; mahogany
+	engine_flag VisitedSpawns + 3, 0 ; lake of rage
+	engine_flag VisitedSpawns + 3, 1 ; blackthorn
+	engine_flag VisitedSpawns + 3, 2 ; silver cave
+	                                 ; fast ship
+	engine_flag VisitedSpawns + 3, 4 ; unused
+
+	engine_flag wLuckyNumberShowFlag, 0 ; lucky number show
+	engine_flag StatusFlags2, 3 ; ????
+
+	engine_flag DailyFlags, 0 ; kurt making balls  ; $50
+	engine_flag DailyFlags, 1 ; ????
+	engine_flag DailyFlags, 2 ; special wilddata?
+	engine_flag DailyFlags, 3 ; time capsule (24h wait)
+	engine_flag DailyFlags, 4 ; all fruit trees
+	engine_flag DailyFlags, 5 ; shuckle given
+	engine_flag DailyFlags, 6 ; goldenrod underground merchant closed
+	engine_flag DailyFlags, 7 ; fought in trainer hall today
+
+	engine_flag WeeklyFlags, 0 ; mt moon square clefairy  ; $58
+	engine_flag WeeklyFlags, 1 ; union cave lapras
+	engine_flag WeeklyFlags, 2 ; goldenrod underground haircut used
+	engine_flag WeeklyFlags, 3 ; goldenrod mall happiness event floor05 person07
+	engine_flag WeeklyFlags, 4 ; tea in blues house
+	engine_flag WeeklyFlags, 5 ; indigo plateau rival fight
+	engine_flag WeeklyFlags, 6 ; move tutor
+	engine_flag WeeklyFlags, 7 ; buenas password
+
+	engine_flag SwarmFlags, 0 ; buenas password 2
+	engine_flag SwarmFlags, 1 ; goldenrod dept store sale is on
+
+	engine_flag GameTimerPause, 7 ; $62
+
+	engine_flag PlayerGender, 0 ; player is female
+
+	engine_flag wCelebiEvent, 2 ; have gs ball after kurt examined it
+
+	; rematches
+	engine_flag wDailyRematchFlags, 0 ; jack
+	engine_flag wDailyRematchFlags, 1 ; huey
+	engine_flag wDailyRematchFlags, 2 ; gaven
+	engine_flag wDailyRematchFlags, 3 ; beth  ; $68
+	engine_flag wDailyRematchFlags, 4 ; jose
+	engine_flag wDailyRematchFlags, 5 ; reena
+	engine_flag wDailyRematchFlags, 6 ; joey
+	engine_flag wDailyRematchFlags, 7 ; wade
+	engine_flag wDailyRematchFlags + 1, 0 ; ralph
+	engine_flag wDailyRematchFlags + 1, 1 ; liz
+	engine_flag wDailyRematchFlags + 1, 2 ; anthony
+	engine_flag wDailyRematchFlags + 1, 3 ; todd  ; $70
+	engine_flag wDailyRematchFlags + 1, 4 ; gina
+	engine_flag wDailyRematchFlags + 1, 5 ; arnie
+	engine_flag wDailyRematchFlags + 1, 6 ; alan
+	engine_flag wDailyRematchFlags + 1, 7 ; dana
+	engine_flag wDailyRematchFlags + 2, 0 ; chad
+	engine_flag wDailyRematchFlags + 2, 1 ; tully
+	engine_flag wDailyRematchFlags + 2, 2 ; brent
+	engine_flag wDailyRematchFlags + 2, 3 ; tiffany  ; $78
+	engine_flag wDailyRematchFlags + 2, 4 ; vance
+	engine_flag wDailyRematchFlags + 2, 5 ; wilton
+	engine_flag wDailyRematchFlags + 2, 6 ; parry
+	engine_flag wDailyRematchFlags + 2, 7 ; erin
+
+	engine_flag wDailyPhoneItemFlags, 0 ; beverly has nugget
+	engine_flag wDailyPhoneItemFlags, 1 ; jose has star piece
+	engine_flag wDailyPhoneItemFlags, 2 ; wade has item (see EVENT_WADE_HAS_*** in constants/event_flags.asm)
+	engine_flag wDailyPhoneItemFlags, 3 ; gina has leaf stone  ; $80
+	engine_flag wDailyPhoneItemFlags, 4 ; alan has fire stone
+	engine_flag wDailyPhoneItemFlags, 5 ; liz has thunderstone
+	engine_flag wDailyPhoneItemFlags, 6 ; derek has nugget
+	engine_flag wDailyPhoneItemFlags, 7 ; tully has water stone
+
+	engine_flag wDailyPhoneItemFlags + 1, 0 ; tiffany has pink bow
+	engine_flag wDailyPhoneItemFlags + 1, 1 ; wilton has item (see EVENT_WILTON_HAS_*** in constants/event_flags.asm)
+
+	engine_flag wDailyPhoneTimeOfDayFlags, 0
+	engine_flag wDailyPhoneTimeOfDayFlags, 1  ; $88
+	engine_flag wDailyPhoneTimeOfDayFlags, 2
+	engine_flag wDailyPhoneTimeOfDayFlags, 3
+	engine_flag wDailyPhoneTimeOfDayFlags, 4
+	engine_flag wDailyPhoneTimeOfDayFlags, 5
+	engine_flag wDailyPhoneTimeOfDayFlags, 6
+	engine_flag wDailyPhoneTimeOfDayFlags, 7
+
+	engine_flag wDailyPhoneTimeOfDayFlags + 1, 0
+	engine_flag wDailyPhoneTimeOfDayFlags + 1, 1  ; $90
+	engine_flag wDailyPhoneTimeOfDayFlags + 1, 2
+	engine_flag wDailyPhoneTimeOfDayFlags + 1, 3
+	engine_flag wDailyPhoneTimeOfDayFlags + 1, 4
+	engine_flag wDailyPhoneTimeOfDayFlags + 1, 5
+	engine_flag wDailyPhoneTimeOfDayFlags + 1, 6
+	engine_flag wDailyPhoneTimeOfDayFlags + 1, 7
+
+	engine_flag wDailyPhoneTimeOfDayFlags + 2, 0
+	engine_flag wDailyPhoneTimeOfDayFlags + 2, 1  ; $98
+	engine_flag wDailyPhoneTimeOfDayFlags + 2, 2
+	engine_flag wDailyPhoneTimeOfDayFlags + 2, 3
+	engine_flag wDailyPhoneTimeOfDayFlags + 2, 4
+	engine_flag wDailyPhoneTimeOfDayFlags + 2, 5
+	engine_flag wDailyPhoneTimeOfDayFlags + 2, 6
+	engine_flag wDailyPhoneTimeOfDayFlags + 2, 7
+
+	engine_flag wPlayerSpriteSetupFlags, 2 ; female player has been transformed into male
+
+	engine_flag SwarmFlags, 2 ; dunsparce swarm   ; $a0
+	engine_flag SwarmFlags, 3 ; yanma swarm
--- a/data/evos_attacks.asm
+++ b/data/evos_attacks.asm
@@ -4,6 +4,7 @@
 SECTION "Evolutions and Attacks", ROMX
 
 
+EvosAttacksPointers:: ; 0x425b1
 INCLUDE "data/evos_attacks_pointers.asm"
 
 
--- a/data/evos_attacks_pointers.asm
+++ b/data/evos_attacks_pointers.asm
@@ -1,8 +1,5 @@
-; Pointer table for evolutions and attacks.
+; Evolutions and attacks are grouped together since they're both checked at level-up.
 
-; These are grouped together since they're both checked at level-up.
-
-EvosAttacksPointers:: ; 0x425b1
 	dw BulbasaurEvosAttacks
 	dw IvysaurEvosAttacks
 	dw VenusaurEvosAttacks
--- /dev/null
+++ b/data/facings.asm
@@ -1,0 +1,264 @@
+Facings: ; 4049
+; entries correspond to FACING_* constants
+	dw FacingStepDown0
+	dw FacingStepDown1
+	dw FacingStepDown2
+	dw FacingStepDown3
+	dw FacingStepUp0
+	dw FacingStepUp1
+	dw FacingStepUp2
+	dw FacingStepUp3
+	dw FacingStepLeft0
+	dw FacingStepLeft1
+	dw FacingStepLeft2
+	dw FacingStepLeft3
+	dw FacingStepRight0
+	dw FacingStepRight1
+	dw FacingStepRight2
+	dw FacingStepRight3
+	dw FacingFishDown
+	dw FacingFishUp
+	dw FacingFishLeft
+	dw FacingFishRight
+	dw FacingEmote
+	dw FacingShadow
+	dw FacingBigDollAsymmetric
+	dw FacingBigDollSymmetric
+	dw FacingWeirdTree0
+	dw FacingWeirdTree1
+	dw FacingWeirdTree2
+	dw FacingWeirdTree3
+	dw FacingBoulderDust1
+	dw FacingBoulderDust2
+	dw FacingGrass1
+	dw FacingGrass2
+FacingsEnd:
+	dw 0
+
+NUM_FACINGS EQU (FacingsEnd - Facings) / 2
+
+
+; Tables used as a reference to transform OAM data.
+
+; Format:
+;	db y, x, attributes, tile index
+
+FacingStepDown0:
+FacingStepDown2:
+FacingWeirdTree0:
+FacingWeirdTree2: ; standing down
+	db 4 ; #
+	db  0,  0, 0, $00
+	db  0,  8, 0, $01
+	db  8,  0, 2, $02
+	db  8,  8, 2, $03
+; 409c
+
+FacingStepDown1: ; walking down 1
+	db 4 ; #
+	db  0,  0, 0, $80
+	db  0,  8, 0, $81
+	db  8,  0, 2, $82
+	db  8,  8, 2, $83
+; 40ad
+
+FacingStepDown3: ; walking down 2
+	db 4 ; #
+	db  0,  8, X_FLIP, $80
+	db  0,  0, X_FLIP, $81
+	db  8,  8, 2 | X_FLIP, $82
+	db  8,  0, 2 | X_FLIP, $83
+; 40be
+
+FacingStepUp0:
+FacingStepUp2: ; standing up
+	db 4 ; #
+	db  0,  0, 0, $04
+	db  0,  8, 0, $05
+	db  8,  0, 2, $06
+	db  8,  8, 2, $07
+; 40cf
+
+FacingStepUp1: ; walking up 1
+	db 4 ; #
+	db  0,  0, 0, $84
+	db  0,  8, 0, $85
+	db  8,  0, 2, $86
+	db  8,  8, 2, $87
+; 40e0
+
+FacingStepUp3: ; walking up 2
+	db 4 ; #
+	db  0,  8, X_FLIP, $84
+	db  0,  0, X_FLIP, $85
+	db  8,  8, 2 | X_FLIP, $86
+	db  8,  0, 2 | X_FLIP, $87
+; 40f1
+
+FacingStepLeft0:
+FacingStepLeft2: ; standing left
+	db 4 ; #
+	db  0,  0, 0, $08
+	db  0,  8, 0, $09
+	db  8,  0, 2, $0a
+	db  8,  8, 2, $0b
+; 4102
+
+FacingStepRight0:
+FacingStepRight2: ; standing right
+	db 4 ; #
+	db  0,  8, X_FLIP, $08
+	db  0,  0, X_FLIP, $09
+	db  8,  8, 2 | X_FLIP, $0a
+	db  8,  0, 2 | X_FLIP, $0b
+; 4113
+
+FacingStepLeft1:
+FacingStepLeft3: ; walking left
+	db 4 ; #
+	db  0,  0, 0, $88
+	db  0,  8, 0, $89
+	db  8,  0, 2, $8a
+	db  8,  8, 2, $8b
+; 4124
+
+FacingStepRight1:
+FacingStepRight3: ; walking right
+	db 4 ; #
+	db  0,  8, X_FLIP, $88
+	db  0,  0, X_FLIP, $89
+	db  8,  8, 2 | X_FLIP, $8a
+	db  8,  0, 2 | X_FLIP, $8b
+; 4135
+
+FacingFishDown: ; fishing down
+	db 5 ; #
+	db  0,  0, 0, $00
+	db  0,  8, 0, $01
+	db  8,  0, 2, $02
+	db  8,  8, 2, $03
+	db 16,  0, 4, $fc
+; 414a
+
+FacingFishUp: ; fishing up
+	db 5 ; #
+	db  0,  0, 0, $04
+	db  0,  8, 0, $05
+	db  8,  0, 2, $06
+	db  8,  8, 2, $07
+	db -8,  0, 4, $fc
+; 415f
+
+FacingFishLeft: ; fishing left
+	db 5 ; #
+	db  0,  0, 0, $08
+	db  0,  8, 0, $09
+	db  8,  0, 2, $0a
+	db  8,  8, 2, $0b
+	db  5, -8, 4 | X_FLIP, $fd
+; 4174
+
+FacingFishRight: ; fishing right
+	db 5 ; #
+	db  0,  8, X_FLIP, $08
+	db  0,  0, X_FLIP, $09
+	db  8,  8, 2 | X_FLIP, $0a
+	db  8,  0, 2 | X_FLIP, $0b
+	db  5, 16, 4, $fd
+; 4189
+
+FacingEmote: ; emote
+	db 4 ; #
+	db  0,  0, 4, $f8
+	db  0,  8, 4, $f9
+	db  8,  0, 4, $fa
+	db  8,  8, 4, $fb
+; 419a
+
+FacingShadow: ; shadow
+	db 2 ; #
+	db  0,  0, 4, $fc
+	db  0,  8, 4 | X_FLIP, $fc
+; 41a3
+
+FacingBigDollSymmetric: ; big snorlax or lapras doll
+	db 16 ; #
+	db  0,  0, 0, $00
+	db  0,  8, 0, $01
+	db  8,  0, 0, $02
+	db  8,  8, 0, $03
+	db 16,  0, 0, $04
+	db 16,  8, 0, $05
+	db 24,  0, 0, $06
+	db 24,  8, 0, $07
+	db  0, 24, X_FLIP, $00
+	db  0, 16, X_FLIP, $01
+	db  8, 24, X_FLIP, $02
+	db  8, 16, X_FLIP, $03
+	db 16, 24, X_FLIP, $04
+	db 16, 16, X_FLIP, $05
+	db 24, 24, X_FLIP, $06
+	db 24, 16, X_FLIP, $07
+; 41e4
+
+FacingWeirdTree1: ; 41e4
+	db 4 ; #
+	db  0,  0, 0, $04
+	db  0,  8, 0, $05
+	db  8,  0, 0, $06
+	db  8,  8, 0, $07
+; 41f5
+
+FacingWeirdTree3: ; 41f5
+	db 4 ; #
+	db  0,  8, X_FLIP, $04
+	db  0,  0, X_FLIP, $05
+	db  8,  8, X_FLIP, $06
+	db  8,  0, X_FLIP, $07
+; 4206
+
+FacingBigDollAsymmetric: ; big doll other than snorlax or lapras
+	db 14 ; #
+	db  0,  0, 0, $00
+	db  0,  8, 0, $01
+	db  8,  0, 0, $04
+	db  8,  8, 0, $05
+	db 16,  8, 0, $07
+	db 24,  8, 0, $0a
+	db  0, 24, 0, $03
+	db  0, 16, 0, $02
+	db  8, 24, X_FLIP, $02
+	db  8, 16, 0, $06
+	db 16, 24, 0, $09
+	db 16, 16, 0, $08
+	db 24, 24, X_FLIP, $04
+	db 24, 16, 0, $0b
+; 423f
+
+FacingBoulderDust1: ; boulder dust 1
+	db 4 ; #
+	db  0,  0, 4, $fe
+	db  0,  8, 4, $fe
+	db  8,  0, 4, $fe
+	db  8,  8, 4, $fe
+; 4250
+
+FacingBoulderDust2: ; boulder dust 2
+	db 4 ; #
+	db  0,  0, 4, $ff
+	db  0,  8, 4, $ff
+	db  8,  0, 4, $ff
+	db  8,  8, 4, $ff
+; 4261
+
+FacingGrass1: ; 4261
+	db 2 ; #
+	db  8,  0, 4, $fe
+	db  8,  8, 4 | X_FLIP, $fe
+; 426a
+
+FacingGrass2: ; 426a
+	db 2 ; #
+	db  9, -1, 4, $fe
+	db  9,  9, 4 | X_FLIP, $fe
+; 4273
--- /dev/null
+++ b/data/fruit_tree_items.asm
@@ -1,0 +1,32 @@
+; entries correspond to FRUITTREE_* constants
+
+	db BERRY        ; ROUTE_29
+	db BERRY        ; ROUTE_30_1
+	db BERRY        ; ROUTE_38
+	db BERRY        ; ROUTE_46_1
+	db PSNCUREBERRY ; ROUTE_30_2
+	db PSNCUREBERRY ; ROUTE_33
+	db BITTER_BERRY ; ROUTE_31
+	db BITTER_BERRY ; ROUTE_43
+	db PRZCUREBERRY ; VIOLET_CITY
+	db PRZCUREBERRY ; ROUTE_46_2
+	db MYSTERYBERRY ; ROUTE_35
+	db MYSTERYBERRY ; ROUTE_45
+	db ICE_BERRY    ; ROUTE_36
+	db ICE_BERRY    ; ROUTE_26
+	db MINT_BERRY   ; ROUTE_39
+	db BURNT_BERRY  ; ROUTE_44
+	db RED_APRICORN ; ROUTE_37_1
+	db BLU_APRICORN ; ROUTE_37_2
+	db BLK_APRICORN ; ROUTE_37_3
+	db WHT_APRICORN ; AZALEA_TOWN
+	db PNK_APRICORN ; ROUTE_42_1
+	db GRN_APRICORN ; ROUTE_42_2
+	db YLW_APRICORN ; ROUTE_42_3
+	db BERRY        ; ROUTE_11
+	db PSNCUREBERRY ; ROUTE_2
+	db BITTER_BERRY ; ROUTE_1
+	db PRZCUREBERRY ; ROUTE_8
+	db ICE_BERRY    ; PEWTER_CITY_1
+	db MINT_BERRY   ; PEWTER_CITY_2
+	db BURNT_BERRY  ; FUCHSIA_CITY
--- /dev/null
+++ b/data/happiness_changes.asm
@@ -1,0 +1,22 @@
+; entries correspond to HAPPINESS_* constants
+
+; change if happiness < 100, change if happiness < 200, change otherwise
+	db  +5,  +3,  +2 ; Gained a level
+	db  +5,  +3,  +2 ; Vitamin
+	db  +1,  +1,  +0 ; X Item
+	db  +3,  +2,  +1 ; Battled a Gym Leader
+	db  +1,  +1,  +0 ; Learned a move
+	db  -1,  -1,  -1 ; Lost to an enemy
+	db  -5,  -5, -10 ; Fainted due to poison
+	db  -5,  -5, -10 ; Lost to a much stronger enemy
+	db  +1,  +1,  +1 ; Haircut (Y1)
+	db  +3,  +3,  +1 ; Haircut (Y2)
+	db  +5,  +5,  +2 ; Haircut (Y3)
+	db  +1,  +1,  +1 ; Haircut (O1)
+	db  +3,  +3,  +1 ; Haircut (O2)
+	db +10, +10,  +4 ; Haircut (O3)
+	db  -5,  -5, -10 ; Used Heal Powder or Energypowder (bitter)
+	db -10, -10, -15 ; Used Energy Root (bitter)
+	db -15, -15, -20 ; Used Revival Herb (bitter)
+	db  +3,  +3,  +1 ; Grooming
+	db +10,  +6,  +4 ; Gained a level in the place where it was caught
--- /dev/null
+++ b/data/hm_blocks.asm
@@ -1,0 +1,53 @@
+CutTreeBlockPointers: ; c862
+; tileset, block list pointer
+	dbw TILESET_JOHTO_1, .johto1
+	dbw TILESET_JOHTO_2, .johto2
+	dbw TILESET_KANTO, .kanto
+	dbw TILESET_PARK, .park
+	dbw TILESET_ILEX_FOREST, .ilex
+	db -1
+
+.johto1 ; Johto OW
+; facing block, replacement block, animation
+	db $03, $02, $01 ; grass
+	db $5b, $3c, $00 ; tree
+	db $5f, $3d, $00 ; tree
+	db $63, $3f, $00 ; tree
+	db $67, $3e, $00 ; tree
+	db -1
+
+.johto2 ; Goldenrod area
+; facing block, replacement block, animation
+	db $03, $02, $01 ; grass
+	db -1
+
+.kanto ; Kanto OW
+; facing block, replacement block, animation
+	db $0b, $0a, $01 ; grass
+	db $32, $6d, $00 ; tree
+	db $33, $6c, $00 ; tree
+	db $34, $6f, $00 ; tree
+	db $35, $4c, $00 ; tree
+	db $60, $6e, $00 ; tree
+	db -1
+
+.park ; National Park
+; facing block, replacement block, animation
+	db $13, $03, $01 ; grass
+	db $03, $04, $01 ; grass
+	db -1
+
+.ilex ; Ilex Forest
+; facing block, replacement block, animation
+	db $0f, $17, $00
+	db -1
+
+
+WhirlpoolBlockPointers: ; c8a4
+	dbw TILESET_JOHTO_1, .johto
+	db -1
+
+.johto ; c8a8
+; facing block, replacement block, animation
+	db $07, $36, $00
+	db -1
--- /dev/null
+++ b/data/landmarks.asm
@@ -1,0 +1,207 @@
+landmark: MACRO
+; x, y, name
+	db \1, \2
+	dw \3
+ENDM
+
+; entries correspond to constants/landmark_constants.asm
+	landmark   0,   0, SpecialMapName
+	landmark 148, 116, NewBarkTownName
+	landmark 136, 116, Route29Name
+	landmark 108, 116, CherrygroveCityName
+	landmark 108,  96, Route30Name
+	landmark 104,  76, Route31Name
+	landmark  92,  76, VioletCityName
+	landmark  93,  74, SproutTowerName
+	landmark  92, 108, Route32Name
+	landmark  84,  92, RuinsOfAlphName
+	landmark  92, 140, UnionCaveName
+	landmark  90, 140, Route33Name
+	landmark  76, 140, AzaleaTownName
+	landmark  78, 138, SlowpokeWellName
+	landmark  60, 136, IlexForestName
+	landmark  60, 128, Route34Name
+	landmark  60, 108, GoldenrodCityName
+	landmark  58, 108, RadioTowerName
+	landmark  60,  92, Route35Name
+	landmark  60,  76, NationalParkName
+	landmark  72,  76, Route36Name
+	landmark  76,  68, Route37Name
+	landmark  76,  60, EcruteakCityName
+	landmark  78,  58, TinTowerName
+	landmark  74,  58, BurnedTowerName
+	landmark  60,  60, Route38Name
+	landmark  44,  64, Route39Name
+	landmark  44,  76, OlivineCityName
+	landmark  46,  78, LighthouseName
+	landmark  36,  72, BattleTowerName
+	landmark  36,  80, Route40Name
+	landmark  36, 108, WhirlIslandsName
+	landmark  36, 116, Route41Name
+	landmark  28, 116, CianwoodCityName
+	landmark 100,  60, Route42Name
+	landmark  92,  60, MtMortarName
+	landmark 116,  60, MahoganyTownName
+	landmark 116,  52, Route43Name
+	landmark 116,  44, LakeOfRageName
+	landmark 128,  60, Route44Name
+	landmark 138,  54, IcePathName
+	landmark 140,  60, BlackthornCityName
+	landmark 140,  52, DragonsDenName
+	landmark 140,  80, Route45Name
+	landmark 120,  88, DarkCaveName
+	landmark 132, 104, Route46Name
+	landmark 156,  84, SilverCaveName
+	landmark  60, 124, PalletTownName
+	landmark  60, 108, Route1Name
+	landmark  60,  92, ViridianCityName
+	landmark  60,  80, Route2Name
+	landmark  60,  68, PewterCityName
+	landmark  72,  68, Route3Name
+	landmark  84,  68, MtMoonName
+	landmark  96,  68, Route4Name
+	landmark 108,  68, CeruleanCityName
+	landmark 108,  60, Route24Name
+	landmark 116,  52, Route25Name
+	landmark 108,  76, Route5Name
+	landmark 116,  92, UndergroundName
+	landmark 108,  92, Route6Name
+	landmark 108, 100, VermilionCityName
+	landmark  96,  76, DiglettsCaveName
+	landmark  96,  84, Route7Name
+	landmark 124,  84, Route8Name
+	landmark 124,  68, Route9Name
+	landmark 140,  68, RockTunnelName
+	landmark 140,  72, Route10Name
+	landmark 140,  76, PowerPlantName
+	landmark 140,  84, LavenderTownName
+	landmark 148,  84, LavRadioTowerName
+	landmark  84,  84, CeladonCityName
+	landmark 108,  84, SaffronCityName
+	landmark 124, 100, Route11Name
+	landmark 140,  96, Route12Name
+	landmark 132, 116, Route13Name
+	landmark 124, 128, Route14Name
+	landmark 112, 132, Route15Name
+	landmark  76,  84, Route16Name
+	landmark  76, 108, Route17Name
+	landmark  88, 132, Route18Name
+	landmark 100, 132, FuchsiaCityName
+	landmark 100, 144, Route19Name
+	landmark  84, 148, Route20Name
+	landmark  76, 148, SeafoamIslandsName
+	landmark  60, 148, CinnabarIslandName
+	landmark  60, 136, Route21Name
+	landmark  44,  84, Route22Name
+	landmark  36,  68, VictoryRoadName
+	landmark  36,  60, Route23Name
+	landmark  36,  52, IndigoPlateauName
+	landmark  36, 108, Route26Name
+	landmark  28, 116, Route27Name
+	landmark  20, 116, TohjoFallsName
+	landmark  28,  84, Route28Name
+	landmark 148, 132, FastShipName
+
+
+NewBarkTownName:     db "NEW BARK¯TOWN@"
+CherrygroveCityName: db "CHERRYGROVE¯CITY@"
+VioletCityName:      db "VIOLET CITY@"
+AzaleaTownName:      db "AZALEA TOWN@"
+GoldenrodCityName:   db "GOLDENROD¯CITY@"
+EcruteakCityName:    db "ECRUTEAK¯CITY@"
+OlivineCityName:     db "OLIVINE¯CITY@"
+CianwoodCityName:    db "CIANWOOD¯CITY@"
+MahoganyTownName:    db "MAHOGANY¯TOWN@"
+BlackthornCityName:  db "BLACKTHORN¯CITY@"
+LakeOfRageName:      db "LAKE OF¯RAGE@"
+SilverCaveName:      db "SILVER CAVE@"
+SproutTowerName:     db "SPROUT¯TOWER@"
+RuinsOfAlphName:     db "RUINS¯OF ALPH@"
+UnionCaveName:       db "UNION CAVE@"
+SlowpokeWellName:    db "SLOWPOKE¯WELL@"
+RadioTowerName:      db "RADIO TOWER@"
+PowerPlantName:      db "POWER PLANT@"
+NationalParkName:    db "NATIONAL¯PARK@"
+TinTowerName:        db "TIN TOWER@"
+LighthouseName:      db "LIGHTHOUSE@"
+WhirlIslandsName:    db "WHIRL¯ISLANDS@"
+MtMortarName:        db "MT.MORTAR@"
+DragonsDenName:      db "DRAGON'S¯DEN@"
+IcePathName:         db "ICE PATH@"
+NotApplicableName:   db "N/A@"
+PalletTownName:      db "PALLET TOWN@"
+ViridianCityName:    db "VIRIDIAN¯CITY@"
+PewterCityName:      db "PEWTER CITY@"
+CeruleanCityName:    db "CERULEAN¯CITY@"
+LavenderTownName:    db "LAVENDER¯TOWN@"
+VermilionCityName:   db "VERMILION¯CITY@"
+CeladonCityName:     db "CELADON¯CITY@"
+SaffronCityName:     db "SAFFRON¯CITY@"
+FuchsiaCityName:     db "FUCHSIA¯CITY@"
+CinnabarIslandName:  db "CINNABAR¯ISLAND@"
+IndigoPlateauName:   db "INDIGO¯PLATEAU@"
+VictoryRoadName:     db "VICTORY¯ROAD@"
+MtMoonName:          db "MT.MOON@"
+RockTunnelName:      db "ROCK TUNNEL@"
+LavRadioTowerName:   db "LAV¯RADIO TOWER@"
+SilphCoName:         db "SILPH CO.@"
+SafariZoneName:      db "SAFARI ZONE@"
+SeafoamIslandsName:  db "SEAFOAM¯ISLANDS@"
+PokemonMansionName:  db "#MON¯MANSION@"
+CeruleanCaveName:    db "CERULEAN¯CAVE@"
+Route1Name:          db "ROUTE 1@"
+Route2Name:          db "ROUTE 2@"
+Route3Name:          db "ROUTE 3@"
+Route4Name:          db "ROUTE 4@"
+Route5Name:          db "ROUTE 5@"
+Route6Name:          db "ROUTE 6@"
+Route7Name:          db "ROUTE 7@"
+Route8Name:          db "ROUTE 8@"
+Route9Name:          db "ROUTE 9@"
+Route10Name:         db "ROUTE 10@"
+Route11Name:         db "ROUTE 11@"
+Route12Name:         db "ROUTE 12@"
+Route13Name:         db "ROUTE 13@"
+Route14Name:         db "ROUTE 14@"
+Route15Name:         db "ROUTE 15@"
+Route16Name:         db "ROUTE 16@"
+Route17Name:         db "ROUTE 17@"
+Route18Name:         db "ROUTE 18@"
+Route19Name:         db "ROUTE 19@"
+Route20Name:         db "ROUTE 20@"
+Route21Name:         db "ROUTE 21@"
+Route22Name:         db "ROUTE 22@"
+Route23Name:         db "ROUTE 23@"
+Route24Name:         db "ROUTE 24@"
+Route25Name:         db "ROUTE 25@"
+Route26Name:         db "ROUTE 26@"
+Route27Name:         db "ROUTE 27@"
+Route28Name:         db "ROUTE 28@"
+Route29Name:         db "ROUTE 29@"
+Route30Name:         db "ROUTE 30@"
+Route31Name:         db "ROUTE 31@"
+Route32Name:         db "ROUTE 32@"
+Route33Name:         db "ROUTE 33@"
+Route34Name:         db "ROUTE 34@"
+Route35Name:         db "ROUTE 35@"
+Route36Name:         db "ROUTE 36@"
+Route37Name:         db "ROUTE 37@"
+Route38Name:         db "ROUTE 38@"
+Route39Name:         db "ROUTE 39@"
+Route40Name:         db "ROUTE 40@"
+Route41Name:         db "ROUTE 41@"
+Route42Name:         db "ROUTE 42@"
+Route43Name:         db "ROUTE 43@"
+Route44Name:         db "ROUTE 44@"
+Route45Name:         db "ROUTE 45@"
+Route46Name:         db "ROUTE 46@"
+DarkCaveName:        db "DARK CAVE@"
+IlexForestName:      db "ILEX¯FOREST@"
+BurnedTowerName:     db "BURNED¯TOWER@"
+FastShipName:        db "FAST SHIP@"
+ViridianForestName:  db "VIRIDIAN¯FOREST@"
+DiglettsCaveName:    db "DIGLETT'S¯CAVE@"
+TohjoFallsName:      db "TOHJO FALLS@"
+UndergroundName:     db "UNDERGROUND@"
+BattleTowerName:     db "BATTLE¯TOWER@"
+SpecialMapName:      db "SPECIAL@"
--- /dev/null
+++ b/data/map_triggers.asm
@@ -1,0 +1,87 @@
+trigger_def: MACRO
+; db group, map
+; dw address
+	map \1
+	dw \2
+ENDM
+
+	trigger_def POKECENTER_2F,                          wPokecenter2FTrigger
+	trigger_def TRADE_CENTER,                           wTradeCenterTrigger
+	trigger_def COLOSSEUM,                              wColosseumTrigger
+	trigger_def TIME_CAPSULE,                           wTimeCapsuleTrigger
+	trigger_def POWER_PLANT,                            wPowerPlantTrigger
+	trigger_def CERULEAN_GYM,                           wCeruleanGymTrigger
+	trigger_def ROUTE_25,                               wRoute25Trigger
+	trigger_def TRAINER_HOUSE_B1F,                      wTrainerHouseB1FTrigger
+	trigger_def VICTORY_ROAD_GATE,                      wVictoryRoadGateTrigger
+	trigger_def SAFFRON_TRAIN_STATION,                  wSaffronTrainStationTrigger
+	trigger_def ROUTE_16_GATE,                          wRoute16GateTrigger
+	trigger_def ROUTE_17_18_GATE,                       wRoute1718GateTrigger
+	trigger_def INDIGO_PLATEAU_POKECENTER_1F,           wIndigoPlateauPokecenter1FTrigger
+	trigger_def WILLS_ROOM,                             wWillsRoomTrigger
+	trigger_def KOGAS_ROOM,                             wKogasRoomTrigger
+	trigger_def BRUNOS_ROOM,                            wBrunosRoomTrigger
+	trigger_def KARENS_ROOM,                            wKarensRoomTrigger
+	trigger_def LANCES_ROOM,                            wLancesRoomTrigger
+	trigger_def HALL_OF_FAME,                           wHallOfFameTrigger
+	trigger_def ROUTE_27,                               wRoute27Trigger
+	trigger_def NEW_BARK_TOWN,                          wNewBarkTownTrigger
+	trigger_def ELMS_LAB,                               wElmsLabTrigger
+	trigger_def KRISS_HOUSE_1F,                         wKrissHouse1FTrigger
+	trigger_def ROUTE_29,                               wRoute29Trigger
+	trigger_def CHERRYGROVE_CITY,                       wCherrygroveCityTrigger
+	trigger_def MR_POKEMONS_HOUSE,                      wMrPokemonsHouseTrigger
+	trigger_def ROUTE_32,                               wRoute32Trigger
+	trigger_def ROUTE_35_NATIONAL_PARK_GATE,            wRoute35NationalParkGateTrigger
+	trigger_def ROUTE_36,                               wRoute36Trigger
+	trigger_def ROUTE_36_NATIONAL_PARK_GATE,            wRoute36NationalParkGateTrigger
+	trigger_def AZALEA_TOWN,                            wAzaleaTownTrigger
+	trigger_def GOLDENROD_GYM,                          wGoldenrodGymTrigger
+	trigger_def GOLDENROD_MAGNET_TRAIN_STATION,         wGoldenrodMagnetTrainStationTrigger
+	trigger_def GOLDENROD_POKECENTER_1F,                wGoldenrodPokecenter1FTrigger
+	trigger_def OLIVINE_CITY,                           wOlivineCityTrigger
+	trigger_def ROUTE_34,                               wRoute34Trigger
+	trigger_def ROUTE_34_ILEX_FOREST_GATE,              wRoute34IlexForestGateTrigger
+	trigger_def ECRUTEAK_HOUSE,                         wEcruteakHouseTrigger
+	trigger_def WISE_TRIOS_ROOM,                        wWiseTriosRoomTrigger
+	trigger_def ECRUTEAK_POKECENTER_1F,                 wEcruteakPokecenter1FTrigger
+	trigger_def ECRUTEAK_GYM,                           wEcruteakGymTrigger
+	trigger_def MAHOGANY_TOWN,                          wMahoganyTownTrigger
+	trigger_def ROUTE_42,                               wRoute42Trigger
+	trigger_def CIANWOOD_CITY,                          wCianwoodCityTrigger
+	trigger_def BATTLE_TOWER_1F,                        wBattleTower1FTrigger
+	trigger_def BATTLE_TOWER_BATTLE_ROOM,               wBattleTowerBattleRoomTrigger
+	trigger_def BATTLE_TOWER_ELEVATOR,                  wBattleTowerElevatorTrigger
+	trigger_def BATTLE_TOWER_HALLWAY,                   wBattleTowerHallwayTrigger
+	trigger_def BATTLE_TOWER_OUTSIDE,                   wBattleTowerOutsideTrigger
+	trigger_def ROUTE_43_GATE,                          wRoute43GateTrigger
+	trigger_def MOUNT_MOON,                             wMountMoonTrigger
+	trigger_def SPROUT_TOWER_3F,                        wSproutTower3FTrigger
+	trigger_def TIN_TOWER_1F,                           wTinTower1FTrigger
+	trigger_def BURNED_TOWER_1F,                        wBurnedTower1FTrigger
+	trigger_def BURNED_TOWER_B1F,                       wBurnedTowerB1FTrigger
+	trigger_def RADIO_TOWER_5F,                         wRadioTower5FTrigger
+	trigger_def RUINS_OF_ALPH_OUTSIDE,                  wRuinsOfAlphOutsideTrigger
+	trigger_def RUINS_OF_ALPH_RESEARCH_CENTER,          wRuinsOfAlphResearchCenterTrigger
+	trigger_def RUINS_OF_ALPH_HO_OH_CHAMBER,            wRuinsOfAlphHoOhChamberTrigger
+	trigger_def RUINS_OF_ALPH_KABUTO_CHAMBER,           wRuinsOfAlphKabutoChamberTrigger
+	trigger_def RUINS_OF_ALPH_OMANYTE_CHAMBER,          wRuinsOfAlphOmanyteChamberTrigger
+	trigger_def RUINS_OF_ALPH_AERODACTYL_CHAMBER,       wRuinsOfAlphAerodactylChamberTrigger
+	trigger_def RUINS_OF_ALPH_INNER_CHAMBER,            wRuinsOfAlphInnerChamberTrigger
+	trigger_def MAHOGANY_MART_1F,                       wMahoganyMart1FTrigger
+	trigger_def TEAM_ROCKET_BASE_B1F,                   wTeamRocketBaseB1FTrigger
+	trigger_def TEAM_ROCKET_BASE_B2F,                   wTeamRocketBaseB2FTrigger
+	trigger_def TEAM_ROCKET_BASE_B3F,                   wTeamRocketBaseB3FTrigger
+	trigger_def UNDERGROUND_PATH_SWITCH_ROOM_ENTRANCES, wUndergroundPathSwitchRoomEntrancesTrigger
+	trigger_def SILVER_CAVE_ROOM_3,                     wSilverCaveRoom3Trigger
+	trigger_def VICTORY_ROAD,                           wVictoryRoadTrigger
+	trigger_def DRAGONS_DEN_B1F,                        wDragonsDenB1FTrigger
+	trigger_def DRAGON_SHRINE,                          wDragonShrineTrigger
+	trigger_def OLIVINE_PORT,                           wOlivinePortTrigger
+	trigger_def VERMILION_PORT,                         wVermilionPortTrigger
+	trigger_def FAST_SHIP_1F,                           wFastShip1FTrigger
+	trigger_def FAST_SHIP_B1F,                          wFastShipB1FTrigger
+	trigger_def MOUNT_MOON_SQUARE,                      wMountMoonSquareTrigger
+	trigger_def MOBILE_TRADE_ROOM_MOBILE,               wMobileTradeRoomMobileTrigger
+	trigger_def MOBILE_BATTLE_ROOM,                     wMobileBattleRoomTrigger
+	db -1
--- /dev/null
+++ b/data/mom_phone_items.asm
@@ -1,0 +1,27 @@
+momitem: macro
+; money to trigger, cost, kind, item
+	dt \1
+	dt \2
+	db \3, \4
+ENDM
+
+MomItems_1: ; fd136
+	momitem      0,   600, MOM_ITEM, SUPER_POTION
+	momitem      0,    90, MOM_ITEM, ANTIDOTE
+	momitem      0,   180, MOM_ITEM, POKE_BALL
+	momitem      0,   450, MOM_ITEM, ESCAPE_ROPE
+	momitem      0,   500, MOM_ITEM, GREAT_BALL
+MomItems_1End: ; fd15e
+
+MomItems_2: ; fd15e
+	momitem    900,   600, MOM_ITEM, SUPER_POTION
+	momitem   4000,   270, MOM_ITEM, REPEL
+	momitem   7000,   600, MOM_ITEM, SUPER_POTION
+	momitem  10000,  1800, MOM_DOLL, DECO_CHARMANDER_DOLL
+	momitem  15000,  3000, MOM_ITEM, MOON_STONE
+	momitem  19000,   600, MOM_ITEM, SUPER_POTION
+	momitem  30000,  4800, MOM_DOLL, DECO_CLEFAIRY_DOLL
+	momitem  40000,   900, MOM_ITEM, HYPER_POTION
+	momitem  50000,  8000, MOM_DOLL, DECO_PIKACHU_DOLL
+	momitem 100000, 22800, MOM_DOLL, DECO_BIG_SNORLAX_DOLL
+MomItems_2End: ; fd1ae
--- /dev/null
+++ b/data/mon_menu_icons.asm
@@ -1,0 +1,252 @@
+; party menu icons
+	db ICON_BULBASAUR   ; BULBASAUR
+	db ICON_BULBASAUR   ; IVYSAUR
+	db ICON_BULBASAUR   ; VENUSAUR
+	db ICON_CHARMANDER  ; CHARMANDER
+	db ICON_CHARMANDER  ; CHARMELEON
+	db ICON_BIGMON      ; CHARIZARD
+	db ICON_SQUIRTLE    ; SQUIRTLE
+	db ICON_SQUIRTLE    ; WARTORTLE
+	db ICON_SQUIRTLE    ; BLASTOISE
+	db ICON_CATERPILLAR ; CATERPIE
+	db ICON_CATERPILLAR ; METAPOD
+	db ICON_MOTH        ; BUTTERFREE
+	db ICON_CATERPILLAR ; WEEDLE
+	db ICON_CATERPILLAR ; KAKUNA
+	db ICON_BUG         ; BEEDRILL
+	db ICON_BIRD        ; PIDGEY
+	db ICON_BIRD        ; PIDGEOTTO
+	db ICON_BIRD        ; PIDGEOT
+	db ICON_FOX         ; RATTATA
+	db ICON_FOX         ; RATICATE
+	db ICON_BIRD        ; SPEAROW
+	db ICON_BIRD        ; FEAROW
+	db ICON_SERPENT     ; EKANS
+	db ICON_SERPENT     ; ARBOK
+	db ICON_PIKACHU     ; PIKACHU
+	db ICON_PIKACHU     ; RAICHU
+	db ICON_MONSTER     ; SANDSHREW
+	db ICON_MONSTER     ; SANDSLASH
+	db ICON_FOX         ; NIDORAN_F
+	db ICON_FOX         ; NIDORINA
+	db ICON_MONSTER     ; NIDOQUEEN
+	db ICON_FOX         ; NIDORAN_M
+	db ICON_FOX         ; NIDORINO
+	db ICON_MONSTER     ; NIDOKING
+	db ICON_CLEFAIRY    ; CLEFAIRY
+	db ICON_CLEFAIRY    ; CLEFABLE
+	db ICON_FOX         ; VULPIX
+	db ICON_FOX         ; NINETALES
+	db ICON_JIGGLYPUFF  ; JIGGLYPUFF
+	db ICON_JIGGLYPUFF  ; WIGGLYTUFF
+	db ICON_BAT         ; ZUBAT
+	db ICON_BAT         ; GOLBAT
+	db ICON_ODDISH      ; ODDISH
+	db ICON_ODDISH      ; GLOOM
+	db ICON_ODDISH      ; VILEPLUME
+	db ICON_BUG         ; PARAS
+	db ICON_BUG         ; PARASECT
+	db ICON_CATERPILLAR ; VENONAT
+	db ICON_MOTH        ; VENOMOTH
+	db ICON_DIGLETT     ; DIGLETT
+	db ICON_DIGLETT     ; DUGTRIO
+	db ICON_FOX         ; MEOWTH
+	db ICON_FOX         ; PERSIAN
+	db ICON_MONSTER     ; PSYDUCK
+	db ICON_MONSTER     ; GOLDUCK
+	db ICON_FIGHTER     ; MANKEY
+	db ICON_FIGHTER     ; PRIMEAPE
+	db ICON_FOX         ; GROWLITHE
+	db ICON_FOX         ; ARCANINE
+	db ICON_POLIWAG     ; POLIWAG
+	db ICON_POLIWAG     ; POLIWHIRL
+	db ICON_POLIWAG     ; POLIWRATH
+	db ICON_HUMANSHAPE  ; ABRA
+	db ICON_HUMANSHAPE  ; KADABRA
+	db ICON_HUMANSHAPE  ; ALAKAZAM
+	db ICON_FIGHTER     ; MACHOP
+	db ICON_FIGHTER     ; MACHOKE
+	db ICON_FIGHTER     ; MACHAMP
+	db ICON_ODDISH      ; BELLSPROUT
+	db ICON_ODDISH      ; WEEPINBELL
+	db ICON_ODDISH      ; VICTREEBEL
+	db ICON_JELLYFISH   ; TENTACOOL
+	db ICON_JELLYFISH   ; TENTACRUEL
+	db ICON_GEODUDE     ; GEODUDE
+	db ICON_GEODUDE     ; GRAVELER
+	db ICON_GEODUDE     ; GOLEM
+	db ICON_EQUINE      ; PONYTA
+	db ICON_EQUINE      ; RAPIDASH
+	db ICON_SLOWPOKE    ; SLOWPOKE
+	db ICON_SLOWPOKE    ; SLOWBRO
+	db ICON_VOLTORB     ; MAGNEMITE
+	db ICON_VOLTORB     ; MAGNETON
+	db ICON_BIRD        ; FARFETCH_D
+	db ICON_BIRD        ; DODUO
+	db ICON_BIRD        ; DODRIO
+	db ICON_LAPRAS      ; SEEL
+	db ICON_LAPRAS      ; DEWGONG
+	db ICON_BLOB        ; GRIMER
+	db ICON_BLOB        ; MUK
+	db ICON_SHELL       ; SHELLDER
+	db ICON_SHELL       ; CLOYSTER
+	db ICON_GHOST       ; GASTLY
+	db ICON_GHOST       ; HAUNTER
+	db ICON_GHOST       ; GENGAR
+	db ICON_SERPENT     ; ONIX
+	db ICON_HUMANSHAPE  ; DROWZEE
+	db ICON_HUMANSHAPE  ; HYPNO
+	db ICON_SHELL       ; KRABBY
+	db ICON_SHELL       ; KINGLER
+	db ICON_VOLTORB     ; VOLTORB
+	db ICON_VOLTORB     ; ELECTRODE
+	db ICON_ODDISH      ; EXEGGCUTE
+	db ICON_ODDISH      ; EXEGGUTOR
+	db ICON_MONSTER     ; CUBONE
+	db ICON_MONSTER     ; MAROWAK
+	db ICON_FIGHTER     ; HITMONLEE
+	db ICON_FIGHTER     ; HITMONCHAN
+	db ICON_MONSTER     ; LICKITUNG
+	db ICON_BLOB        ; KOFFING
+	db ICON_BLOB        ; WEEZING
+	db ICON_EQUINE      ; RHYHORN
+	db ICON_MONSTER     ; RHYDON
+	db ICON_CLEFAIRY    ; CHANSEY
+	db ICON_ODDISH      ; TANGELA
+	db ICON_MONSTER     ; KANGASKHAN
+	db ICON_FISH        ; HORSEA
+	db ICON_FISH        ; SEADRA
+	db ICON_FISH        ; GOLDEEN
+	db ICON_FISH        ; SEAKING
+	db ICON_STARYU      ; STARYU
+	db ICON_STARYU      ; STARMIE
+	db ICON_HUMANSHAPE  ; MR__MIME
+	db ICON_BUG         ; SCYTHER
+	db ICON_HUMANSHAPE  ; JYNX
+	db ICON_HUMANSHAPE  ; ELECTABUZZ
+	db ICON_HUMANSHAPE  ; MAGMAR
+	db ICON_BUG         ; PINSIR
+	db ICON_EQUINE      ; TAUROS
+	db ICON_FISH        ; MAGIKARP
+	db ICON_GYARADOS    ; GYARADOS
+	db ICON_LAPRAS      ; LAPRAS
+	db ICON_BLOB        ; DITTO
+	db ICON_FOX         ; EEVEE
+	db ICON_FOX         ; VAPOREON
+	db ICON_FOX         ; JOLTEON
+	db ICON_FOX         ; FLAREON
+	db ICON_VOLTORB     ; PORYGON
+	db ICON_SHELL       ; OMANYTE
+	db ICON_SHELL       ; OMASTAR
+	db ICON_SHELL       ; KABUTO
+	db ICON_SHELL       ; KABUTOPS
+	db ICON_BIRD        ; AERODACTYL
+	db ICON_SNORLAX     ; SNORLAX
+	db ICON_BIRD        ; ARTICUNO
+	db ICON_BIRD        ; ZAPDOS
+	db ICON_BIRD        ; MOLTRES
+	db ICON_SERPENT     ; DRATINI
+	db ICON_SERPENT     ; DRAGONAIR
+	db ICON_BIGMON      ; DRAGONITE
+	db ICON_HUMANSHAPE  ; MEWTWO
+	db ICON_HUMANSHAPE  ; MEW
+	db ICON_ODDISH      ; CHIKORITA
+	db ICON_ODDISH      ; BAYLEEF
+	db ICON_ODDISH      ; MEGANIUM
+	db ICON_FOX         ; CYNDAQUIL
+	db ICON_FOX         ; QUILAVA
+	db ICON_FOX         ; TYPHLOSION
+	db ICON_MONSTER     ; TOTODILE
+	db ICON_MONSTER     ; CROCONAW
+	db ICON_MONSTER     ; FERALIGATR
+	db ICON_FOX         ; SENTRET
+	db ICON_FOX         ; FURRET
+	db ICON_BIRD        ; HOOTHOOT
+	db ICON_BIRD        ; NOCTOWL
+	db ICON_BUG         ; LEDYBA
+	db ICON_BUG         ; LEDIAN
+	db ICON_BUG         ; SPINARAK
+	db ICON_BUG         ; ARIADOS
+	db ICON_BAT         ; CROBAT
+	db ICON_FISH        ; CHINCHOU
+	db ICON_FISH        ; LANTURN
+	db ICON_PIKACHU     ; PICHU
+	db ICON_CLEFAIRY    ; CLEFFA
+	db ICON_JIGGLYPUFF  ; IGGLYBUFF
+	db ICON_CLEFAIRY    ; TOGEPI
+	db ICON_BIRD        ; TOGETIC
+	db ICON_BIRD        ; NATU
+	db ICON_BIRD        ; XATU
+	db ICON_FOX         ; MAREEP
+	db ICON_MONSTER     ; FLAAFFY
+	db ICON_MONSTER     ; AMPHAROS
+	db ICON_ODDISH      ; BELLOSSOM
+	db ICON_JIGGLYPUFF  ; MARILL
+	db ICON_JIGGLYPUFF  ; AZUMARILL
+	db ICON_SUDOWOODO   ; SUDOWOODO
+	db ICON_POLIWAG     ; POLITOED
+	db ICON_ODDISH      ; HOPPIP
+	db ICON_ODDISH      ; SKIPLOOM
+	db ICON_ODDISH      ; JUMPLUFF
+	db ICON_MONSTER     ; AIPOM
+	db ICON_ODDISH      ; SUNKERN
+	db ICON_ODDISH      ; SUNFLORA
+	db ICON_BUG         ; YANMA
+	db ICON_MONSTER     ; WOOPER
+	db ICON_MONSTER     ; QUAGSIRE
+	db ICON_FOX         ; ESPEON
+	db ICON_FOX         ; UMBREON
+	db ICON_BIRD        ; MURKROW
+	db ICON_SLOWPOKE    ; SLOWKING
+	db ICON_GHOST       ; MISDREAVUS
+	db ICON_UNOWN       ; UNOWN
+	db ICON_GHOST       ; WOBBUFFET
+	db ICON_EQUINE      ; GIRAFARIG
+	db ICON_BUG         ; PINECO
+	db ICON_BUG         ; FORRETRESS
+	db ICON_SERPENT     ; DUNSPARCE
+	db ICON_BUG         ; GLIGAR
+	db ICON_SERPENT     ; STEELIX
+	db ICON_MONSTER     ; SNUBBULL
+	db ICON_MONSTER     ; GRANBULL
+	db ICON_FISH        ; QWILFISH
+	db ICON_BUG         ; SCIZOR
+	db ICON_BUG         ; SHUCKLE
+	db ICON_BUG         ; HERACROSS
+	db ICON_FOX         ; SNEASEL
+	db ICON_MONSTER     ; TEDDIURSA
+	db ICON_MONSTER     ; URSARING
+	db ICON_BLOB        ; SLUGMA
+	db ICON_BLOB        ; MAGCARGO
+	db ICON_EQUINE      ; SWINUB
+	db ICON_EQUINE      ; PILOSWINE
+	db ICON_SHELL       ; CORSOLA
+	db ICON_FISH        ; REMORAID
+	db ICON_FISH        ; OCTILLERY
+	db ICON_MONSTER     ; DELIBIRD
+	db ICON_FISH        ; MANTINE
+	db ICON_BIRD        ; SKARMORY
+	db ICON_FOX         ; HOUNDOUR
+	db ICON_FOX         ; HOUNDOOM
+	db ICON_BIGMON      ; KINGDRA
+	db ICON_EQUINE      ; PHANPY
+	db ICON_EQUINE      ; DONPHAN
+	db ICON_VOLTORB     ; PORYGON2
+	db ICON_EQUINE      ; STANTLER
+	db ICON_MONSTER     ; SMEARGLE
+	db ICON_FIGHTER     ; TYROGUE
+	db ICON_FIGHTER     ; HITMONTOP
+	db ICON_HUMANSHAPE  ; SMOOCHUM
+	db ICON_HUMANSHAPE  ; ELEKID
+	db ICON_HUMANSHAPE  ; MAGBY
+	db ICON_EQUINE      ; MILTANK
+	db ICON_CLEFAIRY    ; BLISSEY
+	db ICON_FOX         ; RAIKOU
+	db ICON_FOX         ; ENTEI
+	db ICON_FOX         ; SUICUNE
+	db ICON_MONSTER     ; LARVITAR
+	db ICON_MONSTER     ; PUPITAR
+	db ICON_MONSTER     ; TYRANITAR
+	db ICON_LUGIA       ; LUGIA
+	db ICON_HO_OH       ; HO_OH
+	db ICON_HUMANSHAPE  ; CELEBI
--- /dev/null
+++ b/data/mystery_gift/decos.asm
@@ -1,0 +1,37 @@
+	db DECOFLAG_PIKACHU_DOLL
+	db DECOFLAG_BULBASAUR_DOLL
+	db DECOFLAG_CHARMANDER_DOLL
+	db DECOFLAG_SQUIRTLE_DOLL
+	db DECOFLAG_POLIWAG_DOLL
+	db DECOFLAG_DIGLETT_DOLL
+	db DECOFLAG_STARMIE_DOLL
+	db DECOFLAG_MAGIKARP_DOLL
+	db DECOFLAG_ODDISH_DOLL
+	db DECOFLAG_GENGAR_DOLL
+	db DECOFLAG_CLEFAIRY_POSTER
+	db DECOFLAG_JIGGLYPUFF_POSTER
+	db DECOFLAG_SNES
+	db DECOFLAG_SHELLDER_DOLL
+	db DECOFLAG_VOLTORB_DOLL
+	db DECOFLAG_WEEDLE_DOLL
+	db DECOFLAG_MAGNAPLANT
+	db DECOFLAG_TROPICPLANT
+	db DECOFLAG_FAMICOM
+	db DECOFLAG_N64
+	db DECOFLAG_SURF_PIKACHU_DOLL
+	db DECOFLAG_JIGGLYPUFF_DOLL
+	db DECOFLAG_PINK_BED
+	db DECOFLAG_POLKADOT_BED
+	db DECOFLAG_RED_CARPET
+	db DECOFLAG_BLUE_CARPET
+	db DECOFLAG_YELLOW_CARPET
+	db DECOFLAG_GREEN_CARPET
+	db DECOFLAG_JUMBOPLANT
+	db DECOFLAG_VIRTUAL_BOY
+	db DECOFLAG_MACHOP_DOLL
+	db DECOFLAG_PIKACHU_POSTER
+	db DECOFLAG_TENTACOOL_DOLL
+	db DECOFLAG_BIG_ONIX_DOLL
+	db DECOFLAG_PIKACHU_BED
+	db DECOFLAG_GRIMER_DOLL
+	db DECOFLAG_UNOWN_DOLL
--- /dev/null
+++ b/data/mystery_gift/items.asm
@@ -1,0 +1,37 @@
+	db BERRY
+	db PRZCUREBERRY
+	db MINT_BERRY
+	db ICE_BERRY
+	db BURNT_BERRY
+	db PSNCUREBERRY
+	db GUARD_SPEC
+	db X_DEFEND
+	db X_ATTACK
+	db BITTER_BERRY
+	db DIRE_HIT
+	db X_SPECIAL
+	db X_ACCURACY
+	db EON_MAIL
+	db MORPH_MAIL
+	db MUSIC_MAIL
+	db MIRACLEBERRY
+	db GOLD_BERRY
+	db REVIVE
+	db GREAT_BALL
+	db SUPER_REPEL
+	db MAX_REPEL
+	db ELIXER
+	db ETHER
+	db WATER_STONE
+	db FIRE_STONE
+	db LEAF_STONE
+	db THUNDERSTONE
+	db MAX_ETHER
+	db MAX_ELIXER
+	db MAX_REVIVE
+	db SCOPE_LENS
+	db HP_UP
+	db PP_UP
+	db RARE_CANDY
+	db BLUESKY_MAIL
+	db MIRAGE_MAIL
--- /dev/null
+++ b/data/npc_trades.asm
@@ -1,0 +1,20 @@
+npctrade: MACRO
+; dialog set, requested mon, offered mon, nickname, dvs, item, OT ID, OT name, gender requested
+	db \1, \2, \3, \4, \5, \6, \7
+	shift
+	dw \7
+	db \8, \9, 0
+ENDM
+
+TRADE_EITHER_GENDER EQU 0
+TRADE_MALE_ONLY     EQU 1
+TRADE_FEMALE_ONLY   EQU 2
+
+; entries correspond to NPCTRADE_* constants
+	npctrade 0, ABRA,       MACHOP,     "MUSCLE@@@@@", $37, $66, GOLD_BERRY,   37460, "MIKE@@@@@@@", TRADE_EITHER_GENDER
+	npctrade 0, BELLSPROUT, ONIX,       "ROCKY@@@@@@", $96, $66, BITTER_BERRY, 48926, "KYLE@@@@@@@", TRADE_EITHER_GENDER
+	npctrade 1, KRABBY,     VOLTORB,    "VOLTY@@@@@@", $98, $88, PRZCUREBERRY, 29189, "TIM@@@@@@@@", TRADE_EITHER_GENDER
+	npctrade 3, DRAGONAIR,  DODRIO,     "DORIS@@@@@@", $77, $66, SMOKE_BALL,   00283, "EMY@@@@@@@@", TRADE_FEMALE_ONLY
+	npctrade 2, HAUNTER,    XATU,       "PAUL@@@@@@@", $96, $86, MYSTERYBERRY, 15616, "CHRIS@@@@@@", TRADE_EITHER_GENDER
+	npctrade 3, CHANSEY,    AERODACTYL, "AEROY@@@@@@", $96, $66, GOLD_BERRY,   26491, "KIM@@@@@@@@", TRADE_EITHER_GENDER
+	npctrade 0, DUGTRIO,    MAGNETON,   "MAGGIE@@@@@", $96, $66, METAL_COAT,   50082, "FOREST@@@@@", TRADE_EITHER_GENDER
--- a/data/odd_eggs.asm
+++ b/data/odd_eggs.asm
@@ -1,100 +1,4 @@
-GiveOddEgg: ; 1fb4b6
-
-	; Figure out which egg to give.
-
-	; Compare a random word to
-	; probabilities out of 0xffff.
-	call Random
-	ld hl, .Probabilities
-	ld c, 0
-	ld b, c
-.loop
-	ld a, [hli]
-	ld e, a
-	ld a, [hli]
-	ld d, a
-
-	; Break on $ffff.
-	ld a, d
-	cp $ffff / $100
-	jr nz, .not_done
-	ld a, e
-	cp $ffff % $100
-	jr z, .done
-.not_done
-
-	; Break when [hRandom] <= de.
-	ld a, [hRandom + 1]
-	cp d
-	jr c, .done
-	jr z, .ok
-	jr .next
-.ok
-	ld a, [hRandom + 0]
-	cp e
-	jr c, .done
-	jr z, .done
-.next
-	inc bc
-	jr .loop
-.done
-
-	ld hl, OddEggs
-	ld a, OddEgg2 - OddEgg1
-	call AddNTimes
-
-	ld de, OddEggSpecies
-	ld bc, PARTYMON_STRUCT_LENGTH + 2 * PKMN_NAME_LENGTH
-	call CopyBytes
-
-	ld a, EGG_TICKET
-	ld [CurItem], a
-	ld a, 1
-	ld [wItemQuantityChangeBuffer], a
-	ld a, -1
-	ld [CurItemQuantity], a
-	ld hl, NumItems
-	call TossItem
-
-	; load species in wcd2a
-	ld a, EGG
-	ld [wMobileMonSpeciesBuffer], a
-
-	; load pointer to (wMobileMonSpeciesBuffer - 1) in wMobileMonSpeciesPointerBuffer
-	ld a, (wMobileMonSpeciesBuffer - 1) % $100
-	ld [wMobileMonSpeciesPointerBuffer], a
-	ld a, (wMobileMonSpeciesBuffer - 1) / $100
-	ld [wMobileMonSpeciesPointerBuffer + 1], a
-	; load pointer to OddEggSpecies in wMobileMonStructurePointerBuffer
-	ld a, OddEggSpecies % $100
-	ld [wMobileMonStructurePointerBuffer], a
-	ld a, OddEggSpecies / $100
-	ld [wMobileMonStructurePointerBuffer + 1], a
-
-	; load Odd Egg Name in wTempOddEggNickname
-	ld hl, .Odd
-	ld de, wTempOddEggNickname
-	ld bc, PKMN_NAME_LENGTH
-	call CopyBytes
-
-	; load pointer to wTempOddEggNickname in wMobileMonOTNamePointerBuffer
-	ld a, wTempOddEggNickname % $100
-	ld [wMobileMonOTNamePointerBuffer], a
-	ld a, wTempOddEggNickname / $100
-	ld [wMobileMonOTNamePointerBuffer + 1], a
-	; load pointer to wOddEggName in wMobileMonNicknamePointerBuffer
-	ld a, wOddEggName % $100
-	ld [wMobileMonNicknamePointerBuffer], a
-	ld a, wOddEggName / $100
-	ld [wMobileMonNicknamePointerBuffer + 1], a
-	callba AddMobileMonToParty
-	ret
-; 1fb546
-
-.Odd:
-	db "ODD@@@@@@@@@"
-
-.Probabilities:
+OddEggProbabilities:
 
 prob: MACRO
 prob_total = prob_total + (\1)
--- /dev/null
+++ b/data/outdoor_sprites.asm
@@ -1,0 +1,694 @@
+OutdoorSprites: ; 144b8
+; Valid sprite IDs for each map group.
+	dw Group1Sprites
+	dw Group2Sprites
+	dw Group3Sprites
+	dw Group4Sprites
+	dw Group5Sprites
+	dw Group6Sprites
+	dw Group7Sprites
+	dw Group8Sprites
+	dw Group9Sprites
+	dw Group10Sprites
+	dw Group11Sprites
+	dw Group12Sprites
+	dw Group13Sprites
+	dw Group14Sprites
+	dw Group15Sprites
+	dw Group16Sprites
+	dw Group17Sprites
+	dw Group18Sprites
+	dw Group19Sprites
+	dw Group20Sprites
+	dw Group21Sprites
+	dw Group22Sprites
+	dw Group23Sprites
+	dw Group24Sprites
+	dw Group25Sprites
+	dw Group26Sprites
+; 144ec
+
+
+Group13Sprites: ; 144ec
+	db SPRITE_SUICUNE
+	db SPRITE_SILVER_TROPHY
+	db SPRITE_FAMICOM
+	db SPRITE_POKEDEX
+	db SPRITE_WILL
+	db SPRITE_KAREN
+	db SPRITE_NURSE
+	db SPRITE_OLD_LINK_RECEPTIONIST
+	db SPRITE_BIG_LAPRAS
+	db SPRITE_BIG_ONIX
+	db SPRITE_SUDOWOODO
+	db SPRITE_BIG_SNORLAX
+	db SPRITE_TEACHER
+	db SPRITE_FISHER
+	db SPRITE_YOUNGSTER
+	db SPRITE_BLUE
+	db SPRITE_GRAMPS
+	db SPRITE_BUG_CATCHER
+	db SPRITE_COOLTRAINER_F
+	db SPRITE_SWIMMER_GIRL
+	db SPRITE_SWIMMER_GUY
+	db SPRITE_POKE_BALL
+	db SPRITE_FRUIT_TREE
+; 14503
+
+Group23Sprites: ; 14503
+	db SPRITE_SUICUNE
+	db SPRITE_SILVER_TROPHY
+	db SPRITE_FAMICOM
+	db SPRITE_POKEDEX
+	db SPRITE_WILL
+	db SPRITE_KAREN
+	db SPRITE_NURSE
+	db SPRITE_OLD_LINK_RECEPTIONIST
+	db SPRITE_BIG_LAPRAS
+	db SPRITE_BIG_ONIX
+	db SPRITE_SUDOWOODO
+	db SPRITE_BIG_SNORLAX
+	db SPRITE_TEACHER
+	db SPRITE_FISHER
+	db SPRITE_YOUNGSTER
+	db SPRITE_BLUE
+	db SPRITE_GRAMPS
+	db SPRITE_BUG_CATCHER
+	db SPRITE_COOLTRAINER_F
+	db SPRITE_SWIMMER_GIRL
+	db SPRITE_SWIMMER_GUY
+	db SPRITE_POKE_BALL
+	db SPRITE_FRUIT_TREE
+; 1451a
+
+Group14Sprites: ; 1451a
+	db SPRITE_SUICUNE
+	db SPRITE_SILVER_TROPHY
+	db SPRITE_FAMICOM
+	db SPRITE_POKEDEX
+	db SPRITE_WILL
+	db SPRITE_KAREN
+	db SPRITE_NURSE
+	db SPRITE_OLD_LINK_RECEPTIONIST
+	db SPRITE_BIG_LAPRAS
+	db SPRITE_BIG_ONIX
+	db SPRITE_SUDOWOODO
+	db SPRITE_BIG_SNORLAX
+	db SPRITE_TEACHER
+	db SPRITE_FISHER
+	db SPRITE_YOUNGSTER
+	db SPRITE_BLUE
+	db SPRITE_GRAMPS
+	db SPRITE_BUG_CATCHER
+	db SPRITE_COOLTRAINER_F
+	db SPRITE_SWIMMER_GIRL
+	db SPRITE_SWIMMER_GUY
+	db SPRITE_POKE_BALL
+	db SPRITE_FRUIT_TREE
+; 14531
+
+Group6Sprites: ; 14531
+	db SPRITE_SUICUNE
+	db SPRITE_SILVER_TROPHY
+	db SPRITE_FAMICOM
+	db SPRITE_POKEDEX
+	db SPRITE_WILL
+	db SPRITE_KAREN
+	db SPRITE_NURSE
+	db SPRITE_OLD_LINK_RECEPTIONIST
+	db SPRITE_BIG_LAPRAS
+	db SPRITE_BIG_ONIX
+	db SPRITE_SUDOWOODO
+	db SPRITE_BIG_SNORLAX
+	db SPRITE_TEACHER
+	db SPRITE_FISHER
+	db SPRITE_YOUNGSTER
+	db SPRITE_BLUE
+	db SPRITE_GRAMPS
+	db SPRITE_BUG_CATCHER
+	db SPRITE_COOLTRAINER_F
+	db SPRITE_SWIMMER_GIRL
+	db SPRITE_SWIMMER_GUY
+	db SPRITE_POKE_BALL
+	db SPRITE_FRUIT_TREE
+; 14548
+
+Group7Sprites: ; 14548
+	db SPRITE_SUICUNE
+	db SPRITE_SILVER_TROPHY
+	db SPRITE_FAMICOM
+	db SPRITE_POKEDEX
+	db SPRITE_WILL
+	db SPRITE_KAREN
+	db SPRITE_NURSE
+	db SPRITE_OLD_LINK_RECEPTIONIST
+	db SPRITE_BIG_LAPRAS
+	db SPRITE_BIG_ONIX
+	db SPRITE_SUDOWOODO
+	db SPRITE_BIG_SNORLAX
+	db SPRITE_COOLTRAINER_M
+	db SPRITE_SUPER_NERD
+	db SPRITE_COOLTRAINER_F
+	db SPRITE_FISHER
+	db SPRITE_YOUNGSTER
+	db SPRITE_LASS
+	db SPRITE_POKEFAN_M
+	db SPRITE_ROCKET
+	db SPRITE_MISTY
+	db SPRITE_POKE_BALL
+	db SPRITE_SLOWPOKE
+; 1455f
+
+Group25Sprites: ; 1455f
+	db SPRITE_SUICUNE
+	db SPRITE_SILVER_TROPHY
+	db SPRITE_FAMICOM
+	db SPRITE_POKEDEX
+	db SPRITE_WILL
+	db SPRITE_KAREN
+	db SPRITE_NURSE
+	db SPRITE_OLD_LINK_RECEPTIONIST
+	db SPRITE_BIG_LAPRAS
+	db SPRITE_BIG_ONIX
+	db SPRITE_SUDOWOODO
+	db SPRITE_BIG_SNORLAX
+	db SPRITE_COOLTRAINER_M
+	db SPRITE_SUPER_NERD
+	db SPRITE_COOLTRAINER_F
+	db SPRITE_FISHER
+	db SPRITE_YOUNGSTER
+	db SPRITE_LASS
+	db SPRITE_POKEFAN_M
+	db SPRITE_ROCKET
+	db SPRITE_MISTY
+	db SPRITE_POKE_BALL
+	db SPRITE_SLOWPOKE
+; 14576
+
+Group21Sprites: ; 14576
+	db SPRITE_SUICUNE
+	db SPRITE_SILVER_TROPHY
+	db SPRITE_FAMICOM
+	db SPRITE_POKEDEX
+	db SPRITE_WILL
+	db SPRITE_KAREN
+	db SPRITE_NURSE
+	db SPRITE_OLD_LINK_RECEPTIONIST
+	db SPRITE_BIG_LAPRAS
+	db SPRITE_BIG_ONIX
+	db SPRITE_SUDOWOODO
+	db SPRITE_BIG_SNORLAX
+	db SPRITE_FISHER
+	db SPRITE_POLIWAG
+	db SPRITE_TEACHER
+	db SPRITE_GRAMPS
+	db SPRITE_YOUNGSTER
+	db SPRITE_LASS
+	db SPRITE_BIKER
+	db SPRITE_SILVER
+	db SPRITE_BLUE
+	db SPRITE_POKE_BALL
+	db SPRITE_FRUIT_TREE
+; 1458d
+
+Group18Sprites: ; 1458d
+	db SPRITE_SUICUNE
+	db SPRITE_SILVER_TROPHY
+	db SPRITE_FAMICOM
+	db SPRITE_POKEDEX
+	db SPRITE_WILL
+	db SPRITE_KAREN
+	db SPRITE_NURSE
+	db SPRITE_OLD_LINK_RECEPTIONIST
+	db SPRITE_BIG_LAPRAS
+	db SPRITE_BIG_ONIX
+	db SPRITE_SUDOWOODO
+	db SPRITE_BIG_SNORLAX
+	db SPRITE_POKEFAN_M
+	db SPRITE_MACHOP
+	db SPRITE_GRAMPS
+	db SPRITE_YOUNGSTER
+	db SPRITE_FISHER
+	db SPRITE_TEACHER
+	db SPRITE_SUPER_NERD
+	db SPRITE_BIG_SNORLAX
+	db SPRITE_BIKER
+	db SPRITE_POKE_BALL
+	db SPRITE_FRUIT_TREE
+; 145a4
+
+Group12Sprites: ; 145a4
+	db SPRITE_SUICUNE
+	db SPRITE_SILVER_TROPHY
+	db SPRITE_FAMICOM
+	db SPRITE_POKEDEX
+	db SPRITE_WILL
+	db SPRITE_KAREN
+	db SPRITE_NURSE
+	db SPRITE_OLD_LINK_RECEPTIONIST
+	db SPRITE_BIG_LAPRAS
+	db SPRITE_BIG_ONIX
+	db SPRITE_SUDOWOODO
+	db SPRITE_BIG_SNORLAX
+	db SPRITE_POKEFAN_M
+	db SPRITE_MACHOP
+	db SPRITE_GRAMPS
+	db SPRITE_YOUNGSTER
+	db SPRITE_FISHER
+	db SPRITE_TEACHER
+	db SPRITE_SUPER_NERD
+	db SPRITE_BIG_SNORLAX
+	db SPRITE_BIKER
+	db SPRITE_POKE_BALL
+	db SPRITE_FRUIT_TREE
+; 145bb
+
+Group17Sprites: ; 145bb
+	db SPRITE_SUICUNE
+	db SPRITE_SILVER_TROPHY
+	db SPRITE_FAMICOM
+	db SPRITE_POKEDEX
+	db SPRITE_WILL
+	db SPRITE_KAREN
+	db SPRITE_NURSE
+	db SPRITE_OLD_LINK_RECEPTIONIST
+	db SPRITE_BIG_LAPRAS
+	db SPRITE_BIG_ONIX
+	db SPRITE_SUDOWOODO
+	db SPRITE_BIG_SNORLAX
+	db SPRITE_POKEFAN_M
+	db SPRITE_MACHOP
+	db SPRITE_GRAMPS
+	db SPRITE_YOUNGSTER
+	db SPRITE_FISHER
+	db SPRITE_TEACHER
+	db SPRITE_SUPER_NERD
+	db SPRITE_BIG_SNORLAX
+	db SPRITE_BIKER
+	db SPRITE_POKE_BALL
+	db SPRITE_FRUIT_TREE
+; 145d2
+
+Group16Sprites: ; 145d2
+	db SPRITE_SUICUNE
+	db SPRITE_SILVER_TROPHY
+	db SPRITE_FAMICOM
+	db SPRITE_POKEDEX
+	db SPRITE_WILL
+	db SPRITE_KAREN
+	db SPRITE_NURSE
+	db SPRITE_OLD_LINK_RECEPTIONIST
+	db SPRITE_BIG_LAPRAS
+	db SPRITE_BIG_ONIX
+	db SPRITE_SUDOWOODO
+	db SPRITE_BIG_SNORLAX
+	db SPRITE_POKEFAN_M
+	db SPRITE_BUENA
+	db SPRITE_GRAMPS
+	db SPRITE_YOUNGSTER
+	db SPRITE_FISHER
+	db SPRITE_TEACHER
+	db SPRITE_SUPER_NERD
+	db SPRITE_MACHOP
+	db SPRITE_BIKER
+	db SPRITE_POKE_BALL
+	db SPRITE_BOULDER
+; 145e9
+
+Group24Sprites: ; 145e9
+	db SPRITE_SUICUNE
+	db SPRITE_SILVER_TROPHY
+	db SPRITE_FAMICOM
+	db SPRITE_POKEDEX
+	db SPRITE_WILL
+	db SPRITE_KAREN
+	db SPRITE_NURSE
+	db SPRITE_OLD_LINK_RECEPTIONIST
+	db SPRITE_BIG_LAPRAS
+	db SPRITE_BIG_ONIX
+	db SPRITE_SUDOWOODO
+	db SPRITE_BIG_SNORLAX
+	db SPRITE_SILVER
+	db SPRITE_TEACHER
+	db SPRITE_FISHER
+	db SPRITE_COOLTRAINER_M
+	db SPRITE_YOUNGSTER
+	db SPRITE_MONSTER
+	db SPRITE_GRAMPS
+	db SPRITE_BUG_CATCHER
+	db SPRITE_COOLTRAINER_F
+	db SPRITE_POKE_BALL
+	db SPRITE_FRUIT_TREE
+; 14600
+
+Group26Sprites: ; 14600
+	db SPRITE_SUICUNE
+	db SPRITE_SILVER_TROPHY
+	db SPRITE_FAMICOM
+	db SPRITE_POKEDEX
+	db SPRITE_WILL
+	db SPRITE_KAREN
+	db SPRITE_NURSE
+	db SPRITE_OLD_LINK_RECEPTIONIST
+	db SPRITE_BIG_LAPRAS
+	db SPRITE_BIG_ONIX
+	db SPRITE_SUDOWOODO
+	db SPRITE_BIG_SNORLAX
+	db SPRITE_SILVER
+	db SPRITE_TEACHER
+	db SPRITE_FISHER
+	db SPRITE_COOLTRAINER_M
+	db SPRITE_YOUNGSTER
+	db SPRITE_MONSTER
+	db SPRITE_GRAMPS
+	db SPRITE_BUG_CATCHER
+	db SPRITE_COOLTRAINER_F
+	db SPRITE_POKE_BALL
+	db SPRITE_FRUIT_TREE
+; 14617
+
+Group19Sprites: ; 14617
+	db SPRITE_SUICUNE
+	db SPRITE_SILVER_TROPHY
+	db SPRITE_FAMICOM
+	db SPRITE_POKEDEX
+	db SPRITE_WILL
+	db SPRITE_KAREN
+	db SPRITE_NURSE
+	db SPRITE_OLD_LINK_RECEPTIONIST
+	db SPRITE_BIG_LAPRAS
+	db SPRITE_BIG_ONIX
+	db SPRITE_SUDOWOODO
+	db SPRITE_BIG_SNORLAX
+	db SPRITE_SILVER
+	db SPRITE_TEACHER
+	db SPRITE_FISHER
+	db SPRITE_COOLTRAINER_M
+	db SPRITE_YOUNGSTER
+	db SPRITE_MONSTER
+	db SPRITE_GRAMPS
+	db SPRITE_BUG_CATCHER
+	db SPRITE_COOLTRAINER_F
+	db SPRITE_POKE_BALL
+	db SPRITE_FRUIT_TREE
+; 1462e
+
+Group10Sprites: ; 1462e
+	db SPRITE_SUICUNE
+	db SPRITE_SILVER_TROPHY
+	db SPRITE_FAMICOM
+	db SPRITE_POKEDEX
+	db SPRITE_WILL
+	db SPRITE_KAREN
+	db SPRITE_NURSE
+	db SPRITE_OLD_LINK_RECEPTIONIST
+	db SPRITE_BIG_LAPRAS
+	db SPRITE_BIG_ONIX
+	db SPRITE_SUDOWOODO
+	db SPRITE_BIG_SNORLAX
+	db SPRITE_FISHER
+	db SPRITE_LASS
+	db SPRITE_OFFICER
+	db SPRITE_GRAMPS
+	db SPRITE_YOUNGSTER
+	db SPRITE_COOLTRAINER_M
+	db SPRITE_BUG_CATCHER
+	db SPRITE_SUPER_NERD
+	db SPRITE_WEIRD_TREE
+	db SPRITE_POKE_BALL
+	db SPRITE_FRUIT_TREE
+; 14645
+
+Group4Sprites: ; 14645
+	db SPRITE_SUICUNE
+	db SPRITE_SILVER_TROPHY
+	db SPRITE_FAMICOM
+	db SPRITE_POKEDEX
+	db SPRITE_WILL
+	db SPRITE_KAREN
+	db SPRITE_NURSE
+	db SPRITE_OLD_LINK_RECEPTIONIST
+	db SPRITE_BIG_LAPRAS
+	db SPRITE_BIG_ONIX
+	db SPRITE_SUDOWOODO
+	db SPRITE_BIG_SNORLAX
+	db SPRITE_FISHER
+	db SPRITE_LASS
+	db SPRITE_OFFICER
+	db SPRITE_GRAMPS
+	db SPRITE_YOUNGSTER
+	db SPRITE_COOLTRAINER_M
+	db SPRITE_BUG_CATCHER
+	db SPRITE_SUPER_NERD
+	db SPRITE_WEIRD_TREE
+	db SPRITE_POKE_BALL
+	db SPRITE_FRUIT_TREE
+; 1465c
+
+Group8Sprites: ; 1465c
+	db SPRITE_SUICUNE
+	db SPRITE_SILVER_TROPHY
+	db SPRITE_FAMICOM
+	db SPRITE_POKEDEX
+	db SPRITE_WILL
+	db SPRITE_KAREN
+	db SPRITE_NURSE
+	db SPRITE_OLD_LINK_RECEPTIONIST
+	db SPRITE_KURT_OUTSIDE
+	db SPRITE_BIG_ONIX
+	db SPRITE_SUDOWOODO
+	db SPRITE_BIG_SNORLAX
+	db SPRITE_GRAMPS
+	db SPRITE_YOUNGSTER
+	db SPRITE_OFFICER
+	db SPRITE_POKEFAN_M
+	db SPRITE_BLACK_BELT
+	db SPRITE_TEACHER
+	db SPRITE_AZALEA_ROCKET
+	db SPRITE_LASS
+	db SPRITE_SILVER
+	db SPRITE_FRUIT_TREE
+	db SPRITE_SLOWPOKE
+; 14673
+
+Group11Sprites: ; 14673
+	db SPRITE_SUICUNE
+	db SPRITE_SILVER_TROPHY
+	db SPRITE_POKE_BALL
+	db SPRITE_POKEDEX
+	db SPRITE_WILL
+	db SPRITE_KAREN
+	db SPRITE_NURSE
+	db SPRITE_OLD_LINK_RECEPTIONIST
+	db SPRITE_BIG_LAPRAS
+	db SPRITE_BIG_ONIX
+	db SPRITE_SUDOWOODO
+	db SPRITE_BIG_SNORLAX
+	db SPRITE_GRAMPS
+	db SPRITE_YOUNGSTER
+	db SPRITE_OFFICER
+	db SPRITE_POKEFAN_M
+	db SPRITE_DAY_CARE_MON_1
+	db SPRITE_COOLTRAINER_F
+	db SPRITE_ROCKET
+	db SPRITE_LASS
+	db SPRITE_DAY_CARE_MON_2
+	db SPRITE_FRUIT_TREE
+	db SPRITE_SLOWPOKE
+; 1468a
+
+Group22Sprites: ; 1468a
+	db SPRITE_SUICUNE
+	db SPRITE_SILVER_TROPHY
+	db SPRITE_FAMICOM
+	db SPRITE_POKEDEX
+	db SPRITE_WILL
+	db SPRITE_KAREN
+	db SPRITE_NURSE
+	db SPRITE_OLD_LINK_RECEPTIONIST
+	db SPRITE_STANDING_YOUNGSTER
+	db SPRITE_BIG_ONIX
+	db SPRITE_SUDOWOODO
+	db SPRITE_BIG_SNORLAX
+	db SPRITE_OLIVINE_RIVAL
+	db SPRITE_POKEFAN_M
+	db SPRITE_LASS
+	db SPRITE_BUENA
+	db SPRITE_SWIMMER_GIRL
+	db SPRITE_SAILOR
+	db SPRITE_POKEFAN_F
+	db SPRITE_SUPER_NERD
+	db SPRITE_TAUROS
+	db SPRITE_FRUIT_TREE
+	db SPRITE_ROCK
+; 146a1
+
+Group1Sprites: ; 146a1
+	db SPRITE_SUICUNE
+	db SPRITE_SILVER_TROPHY
+	db SPRITE_FAMICOM
+	db SPRITE_POKEDEX
+	db SPRITE_WILL
+	db SPRITE_KAREN
+	db SPRITE_NURSE
+	db SPRITE_OLD_LINK_RECEPTIONIST
+	db SPRITE_STANDING_YOUNGSTER
+	db SPRITE_BIG_ONIX
+	db SPRITE_SUDOWOODO
+	db SPRITE_BIG_SNORLAX
+	db SPRITE_OLIVINE_RIVAL
+	db SPRITE_POKEFAN_M
+	db SPRITE_LASS
+	db SPRITE_BUENA
+	db SPRITE_SWIMMER_GIRL
+	db SPRITE_SAILOR
+	db SPRITE_POKEFAN_F
+	db SPRITE_SUPER_NERD
+	db SPRITE_TAUROS
+	db SPRITE_FRUIT_TREE
+	db SPRITE_ROCK
+; 146b8
+
+Group9Sprites: ; 146b8
+	db SPRITE_SUICUNE
+	db SPRITE_SILVER_TROPHY
+	db SPRITE_FAMICOM
+	db SPRITE_POKEDEX
+	db SPRITE_WILL
+	db SPRITE_KAREN
+	db SPRITE_NURSE
+	db SPRITE_OLD_LINK_RECEPTIONIST
+	db SPRITE_BIG_LAPRAS
+	db SPRITE_BIG_ONIX
+	db SPRITE_SUDOWOODO
+	db SPRITE_BIG_SNORLAX
+	db SPRITE_LANCE
+	db SPRITE_GRAMPS
+	db SPRITE_SUPER_NERD
+	db SPRITE_COOLTRAINER_F
+	db SPRITE_FISHER
+	db SPRITE_COOLTRAINER_M
+	db SPRITE_LASS
+	db SPRITE_YOUNGSTER
+	db SPRITE_GYARADOS
+	db SPRITE_FRUIT_TREE
+	db SPRITE_POKE_BALL
+; 146cf
+
+Group2Sprites: ; 146cf
+	db SPRITE_SUICUNE
+	db SPRITE_SILVER_TROPHY
+	db SPRITE_FAMICOM
+	db SPRITE_POKEDEX
+	db SPRITE_WILL
+	db SPRITE_KAREN
+	db SPRITE_NURSE
+	db SPRITE_OLD_LINK_RECEPTIONIST
+	db SPRITE_BIG_LAPRAS
+	db SPRITE_BIG_ONIX
+	db SPRITE_SUDOWOODO
+	db SPRITE_BIG_SNORLAX
+	db SPRITE_GRAMPS
+	db SPRITE_YOUNGSTER
+	db SPRITE_LASS
+	db SPRITE_SUPER_NERD
+	db SPRITE_COOLTRAINER_M
+	db SPRITE_POKEFAN_M
+	db SPRITE_BLACK_BELT
+	db SPRITE_COOLTRAINER_F
+	db SPRITE_FISHER
+	db SPRITE_FRUIT_TREE
+	db SPRITE_POKE_BALL
+; 146e6
+
+Group5Sprites: ; 146e6
+	db SPRITE_SUICUNE
+	db SPRITE_SILVER_TROPHY
+	db SPRITE_FAMICOM
+	db SPRITE_POKEDEX
+	db SPRITE_WILL
+	db SPRITE_KAREN
+	db SPRITE_NURSE
+	db SPRITE_OLD_LINK_RECEPTIONIST
+	db SPRITE_BIG_LAPRAS
+	db SPRITE_BIG_ONIX
+	db SPRITE_SUDOWOODO
+	db SPRITE_BIG_SNORLAX
+	db SPRITE_GRAMPS
+	db SPRITE_YOUNGSTER
+	db SPRITE_LASS
+	db SPRITE_SUPER_NERD
+	db SPRITE_COOLTRAINER_M
+	db SPRITE_POKEFAN_M
+	db SPRITE_BLACK_BELT
+	db SPRITE_COOLTRAINER_F
+	db SPRITE_FISHER
+	db SPRITE_FRUIT_TREE
+	db SPRITE_POKE_BALL
+; 146fd
+
+Group3Sprites: ; 146fd
+	db SPRITE_SUICUNE
+	db SPRITE_SILVER_TROPHY
+	db SPRITE_FAMICOM
+	db SPRITE_POKEDEX
+	db SPRITE_WILL
+	db SPRITE_KAREN
+	db SPRITE_NURSE
+	db SPRITE_OLD_LINK_RECEPTIONIST
+	db SPRITE_GAMEBOY_KID
+	db SPRITE_BIG_ONIX
+	db SPRITE_SUDOWOODO
+	db SPRITE_BIG_SNORLAX
+	db SPRITE_LASS
+	db SPRITE_POKEFAN_F
+	db SPRITE_TEACHER
+	db SPRITE_YOUNGSTER
+	db SPRITE_GROWLITHE
+	db SPRITE_POKEFAN_M
+	db SPRITE_ROCKER
+	db SPRITE_FISHER
+	db SPRITE_SCIENTIST
+	db SPRITE_POKE_BALL
+	db SPRITE_BOULDER
+; 14714
+
+Group15Sprites: ; 14714
+	db SPRITE_SUICUNE
+	db SPRITE_SILVER_TROPHY
+	db SPRITE_FAMICOM
+	db SPRITE_POKEDEX
+	db SPRITE_WILL
+	db SPRITE_KAREN
+	db SPRITE_NURSE
+	db SPRITE_OLD_LINK_RECEPTIONIST
+	db SPRITE_BIG_LAPRAS
+	db SPRITE_BIG_ONIX
+	db SPRITE_SUDOWOODO
+	db SPRITE_BIG_SNORLAX
+	db SPRITE_SAILOR
+	db SPRITE_FISHING_GURU
+	db SPRITE_GENTLEMAN
+	db SPRITE_SUPER_NERD
+	db SPRITE_HO_OH
+	db SPRITE_TEACHER
+	db SPRITE_COOLTRAINER_F
+	db SPRITE_YOUNGSTER
+	db SPRITE_FAIRY
+	db SPRITE_POKE_BALL
+	db SPRITE_ROCK
+; 1472b
+
+Group20Sprites: ; 1472b
+	db SPRITE_OAK
+	db SPRITE_FISHER
+	db SPRITE_TEACHER
+	db SPRITE_TWIN
+	db SPRITE_POKEFAN_M
+	db SPRITE_GRAMPS
+	db SPRITE_FAIRY
+	db SPRITE_SILVER
+	db SPRITE_FISHING_GURU
+	db SPRITE_POKE_BALL
+	db SPRITE_POKEDEX
+; 14736
--- /dev/null
+++ b/data/phone_contacts.asm
@@ -1,0 +1,49 @@
+phone: macro
+; trainer class, trainer id, map, ?, script 1, ?, script 2
+	db  \1, \2
+	map \3
+	db  \4
+	dba \5
+	db  \6
+	dba \7
+endm
+
+; entries correspond to PHONE_* constants
+	phone TRAINER_NONE, PHONE_00,              N_A,                       0, UnusedPhoneScript,   0, UnusedPhoneScript
+	phone TRAINER_NONE, PHONECONTACT_MOM,      KRISS_HOUSE_1F,            7, MomPhoneScript,      0, UnusedPhoneScript
+	phone TRAINER_NONE, PHONECONTACT_BIKESHOP, OAKS_LAB,                  0, UnusedPhoneScript,   0, UnusedPhoneScript
+	phone TRAINER_NONE, PHONECONTACT_BILL,     N_A,                       7, BillPhoneScript1,    0, BillPhoneScript2
+	phone TRAINER_NONE, PHONECONTACT_ELM,      ELMS_LAB,                  7, ElmPhoneScript1,     0, ElmPhoneScript2
+	phone SCHOOLBOY,    JACK1,                 NATIONAL_PARK,             7, JackPhoneScript1,    7, JackPhoneScript2
+	phone POKEFANF,     BEVERLY1,              NATIONAL_PARK,             7, BeverlyPhoneScript1, 7, BeverlyPhoneScript2
+	phone SAILOR,       HUEY1,                 OLIVINE_LIGHTHOUSE_2F,     7, HueyPhoneScript1,    7, HueyPhoneScript2
+	phone TRAINER_NONE, PHONE_00,              N_A,                       0, UnusedPhoneScript,   0, UnusedPhoneScript
+	phone TRAINER_NONE, PHONE_00,              N_A,                       0, UnusedPhoneScript,   0, UnusedPhoneScript
+	phone TRAINER_NONE, PHONE_00,              N_A,                       0, UnusedPhoneScript,   0, UnusedPhoneScript
+	phone COOLTRAINERM, GAVEN3,                ROUTE_26,                  7, GavenPhoneScript1,   7, GavenPhoneScript2
+	phone COOLTRAINERF, BETH1,                 ROUTE_26,                  7, BethPhoneScript1,    7, BethPhoneScript2
+	phone BIRD_KEEPER,  JOSE2,                 ROUTE_27,                  7, JosePhoneScript1,    7, JosePhoneScript2
+	phone COOLTRAINERF, REENA1,                ROUTE_27,                  7, ReenaPhoneScript1,   7, ReenaPhoneScript2
+	phone YOUNGSTER,    JOEY1,                 ROUTE_30,                  7, JoeyPhoneScript1,    7, JoeyPhoneScript2
+	phone BUG_CATCHER,  WADE1,                 ROUTE_31,                  7, WadePhoneScript1,    7, WadePhoneScript2
+	phone FISHER,       RALPH1,                ROUTE_32,                  7, RalphPhoneScript1,   7, RalphPhoneScript2
+	phone PICNICKER,    LIZ1,                  ROUTE_32,                  7, LizPhoneScript1,     7, LizPhoneScript2
+	phone HIKER,        ANTHONY2,              ROUTE_33,                  7, AnthonyPhoneScript1, 7, AnthonyPhoneScript2
+	phone CAMPER,       TODD1,                 ROUTE_34,                  7, ToddPhoneScript1,    7, ToddPhoneScript2
+	phone PICNICKER,    GINA1,                 ROUTE_34,                  7, GinaPhoneScript1,    7, GinaPhoneScript2
+	phone JUGGLER,      IRWIN1,                ROUTE_35,                  7, IrwinPhoneScript1,   7, IrwinPhoneScript2
+	phone BUG_CATCHER,  ARNIE1,                ROUTE_35,                  7, ArniePhoneScript1,   7, ArniePhoneScript2
+	phone SCHOOLBOY,    ALAN1,                 ROUTE_36,                  7, AlanPhoneScript1,    7, AlanPhoneScript2
+	phone TRAINER_NONE, PHONE_00,              N_A,                       0, UnusedPhoneScript,   0, UnusedPhoneScript
+	phone LASS,         DANA1,                 ROUTE_38,                  7, DanaPhoneScript1,    7, DanaPhoneScript2
+	phone SCHOOLBOY,    CHAD1,                 ROUTE_38,                  7, ChadPhoneScript1,    7, ChadPhoneScript2
+	phone POKEFANM,     DEREK1,                ROUTE_39,                  7, DerekPhoneScript1,   7, DerekPhoneScript2
+	phone FISHER,       TULLY1,                ROUTE_42,                  7, TullyPhoneScript1,   7, TullyPhoneScript2
+	phone POKEMANIAC,   BRENT1,                ROUTE_43,                  7, BrentPhoneScript1,   7, BrentPhoneScript2
+	phone PICNICKER,    TIFFANY3,              ROUTE_43,                  7, TiffanyPhoneScript1, 7, TiffanyPhoneScript2
+	phone BIRD_KEEPER,  VANCE1,                ROUTE_44,                  7, VancePhoneScript1,   7, VancePhoneScript2
+	phone FISHER,       WILTON1,               ROUTE_44,                  7, WiltonPhoneScript1,  7, WiltonPhoneScript2
+	phone BLACKBELT_T,  KENJI3,                ROUTE_45,                  7, KenjiPhoneScript1,   7, KenjiPhoneScript2
+	phone HIKER,        PARRY1,                ROUTE_45,                  7, ParryPhoneScript1,   7, ParryPhoneScript2
+	phone PICNICKER,    ERIN1,                 ROUTE_46,                  7, ErinPhoneScript1,    7, ErinPhoneScript2
+	phone TRAINER_NONE, PHONECONTACT_BUENA,    GOLDENROD_DEPT_STORE_ROOF, 7, BuenaPhoneScript1,   7, BuenaPhoneScript2
--- /dev/null
+++ b/data/phone_special.asm
@@ -1,0 +1,16 @@
+specialcall: macro
+; condition, contact, script
+	dw \1
+	db \2
+	dba \3
+endm
+
+; entries correspond to SPECIALCALL_* constants
+	specialcall SpecialCallOnlyWhenOutside, PHONE_ELM, ElmPhoneScript2
+	specialcall SpecialCallOnlyWhenOutside, PHONE_ELM, ElmPhoneScript2
+	specialcall SpecialCallOnlyWhenOutside, PHONE_ELM, ElmPhoneScript2
+	specialcall SpecialCallOnlyWhenOutside, PHONE_ELM, ElmPhoneScript2
+	specialcall SpecialCallWhereverYouAre,  PHONE_ELM, ElmPhoneScript2
+	specialcall SpecialCallWhereverYouAre,  PHONE_OAK, BikeShopPhoneScript
+	specialcall SpecialCallWhereverYouAre,  PHONE_MOM, MomPhoneLectureScript
+	specialcall SpecialCallOnlyWhenOutside, PHONE_ELM, ElmPhoneScript2
--- /dev/null
+++ b/data/spawn_points.asm
@@ -1,0 +1,39 @@
+spawn: MACRO
+; map, y, x
+	map \1
+	db \2, \3
+ENDM
+
+; entries correspond to SPAWN_* constants
+
+	spawn KRISS_HOUSE_2F,              3,  3
+	spawn VIRIDIAN_POKECENTER_1F,      5,  3
+
+	spawn PALLET_TOWN,                 5,  6
+	spawn VIRIDIAN_CITY,              23, 26
+	spawn PEWTER_CITY,                13, 26
+	spawn CERULEAN_CITY,              19, 22
+	spawn ROUTE_10_NORTH,             11,  2
+	spawn VERMILION_CITY,              9,  6
+	spawn LAVENDER_TOWN,               5,  6
+	spawn SAFFRON_CITY,                9, 30
+	spawn CELADON_CITY,               29, 10
+	spawn FUCHSIA_CITY,               19, 28
+	spawn CINNABAR_ISLAND,            11, 12
+	spawn ROUTE_23,                    9,  6
+
+	spawn NEW_BARK_TOWN,              13,  6
+	spawn CHERRYGROVE_CITY,           29,  4
+	spawn VIOLET_CITY,                31, 26
+	spawn ROUTE_32,                   11, 74
+	spawn AZALEA_TOWN,                15, 10
+	spawn CIANWOOD_CITY,              23, 44
+	spawn GOLDENROD_CITY,             15, 28
+	spawn OLIVINE_CITY,               13, 22
+	spawn ECRUTEAK_CITY,              23, 28
+	spawn MAHOGANY_TOWN,              15, 14
+	spawn LAKE_OF_RAGE,               21, 29
+	spawn BLACKTHORN_CITY,            21, 30
+	spawn SILVER_CAVE_OUTSIDE,        23, 20
+	spawn FAST_SHIP_CABINS_SW_SSW_NW,  6,  2
+	spawn N_A,                        -1, -1
--- /dev/null
+++ b/data/sprite_anim_seqs.asm
@@ -1,0 +1,92 @@
+; entries correspond to SPRITE_ANIM_INDEX_* constants
+	; frameset sequence, tile
+; SPRITE_ANIM_INDEX_PARTY_MON
+	db SPRITE_ANIM_FRAMESET_PARTY_MON, SPRITE_ANIM_SEQ_PARTY_MON, $00
+; SPRITE_ANIM_INDEX_01
+	db SPRITE_ANIM_FRAMESET_07, SPRITE_ANIM_SEQ_04, $00
+; SPRITE_ANIM_INDEX_NAMING_SCREEN_CURSOR
+	db SPRITE_ANIM_FRAMESET_TEXT_ENTRY_CURSOR, SPRITE_ANIM_SEQ_NAMING_SCREEN_CURSOR, $05
+; SPRITE_ANIM_INDEX_GAMEFREAK_LOGO
+	db SPRITE_ANIM_FRAMESET_GAMEFREAK_LOGO, SPRITE_ANIM_SEQ_GAMEFREAK_LOGO, $00
+; SPRITE_ANIM_INDEX_GS_INTRO_STAR
+	db SPRITE_ANIM_FRAMESET_GS_INTRO_STAR, SPRITE_ANIM_SEQ_GS_INTRO_STAR, $06
+; SPRITE_ANIM_INDEX_GS_INTRO_SPARKLE
+	db SPRITE_ANIM_FRAMESET_GS_INTRO_SPARKLE, SPRITE_ANIM_SEQ_GS_INTRO_SPARKLE, $06
+; SPRITE_ANIM_INDEX_SLOTS_GOLEM
+	db SPRITE_ANIM_FRAMESET_SLOTS_GOLEM, SPRITE_ANIM_SEQ_SLOTS_GOLEM, $07
+; SPRITE_ANIM_INDEX_SLOTS_CHANSEY
+	db SPRITE_ANIM_FRAMESET_SLOTS_CHANSEY, SPRITE_ANIM_SEQ_SLOTS_CHANSEY, $07
+; SPRITE_ANIM_INDEX_SLOTS_EGG
+	db SPRITE_ANIM_FRAMESET_SLOTS_EGG, SPRITE_ANIM_SEQ_SLOTS_EGG, $07
+; SPRITE_ANIM_INDEX_COMPOSE_MAIL_CURSOR
+	db SPRITE_ANIM_FRAMESET_TEXT_ENTRY_CURSOR, SPRITE_ANIM_SEQ_MAIL_CURSOR, $05
+; SPRITE_ANIM_INDEX_RED_WALK
+	db SPRITE_ANIM_FRAMESET_RED_WALK, SPRITE_ANIM_SEQ_NULL, $00
+; SPRITE_ANIM_INDEX_0B
+	db SPRITE_ANIM_FRAMESET_STILL_CURSOR, SPRITE_ANIM_SEQ_0D, $08
+; SPRITE_ANIM_INDEX_DUMMY_GAME
+	db SPRITE_ANIM_FRAMESET_STILL_CURSOR, SPRITE_ANIM_SEQ_0E, $08
+; SPRITE_ANIM_INDEX_0D
+	db SPRITE_ANIM_FRAMESET_STILL_CURSOR, SPRITE_ANIM_SEQ_0F, $08
+; SPRITE_ANIM_INDEX_TRADE_POKE_BALL
+	db SPRITE_ANIM_FRAMESET_TRADE_POKE_BALL, SPRITE_ANIM_SEQ_TRADE_POKE_BALL, $00
+; SPRITE_ANIM_INDEX_TRADE_POOF
+	db SPRITE_ANIM_FRAMESET_TRADE_POOF, SPRITE_ANIM_SEQ_NULL, $00
+; SPRITE_ANIM_INDEX_TRADE_TUBE_BULGE
+	db SPRITE_ANIM_FRAMESET_TRADE_TUBE_BULGE, SPRITE_ANIM_SEQ_TRADE_TUBE_BULGE, $00
+; SPRITE_ANIM_INDEX_TRADEMON_ICON
+	db SPRITE_ANIM_FRAMESET_TRADEMON_ICON, SPRITE_ANIM_SEQ_TRADEMON_IN_TUBE, $00
+; SPRITE_ANIM_INDEX_TRADEMON_BUBBLE
+	db SPRITE_ANIM_FRAMESET_TRADEMON_BUBBLE, SPRITE_ANIM_SEQ_TRADEMON_IN_TUBE, $00
+; SPRITE_ANIM_INDEX_EVOLUTION_BALL_OF_LIGHT
+	db SPRITE_ANIM_FRAMESET_EVOLUTION_BALL_OF_LIGHT, SPRITE_ANIM_SEQ_REVEAL_NEW_MON, $00
+; SPRITE_ANIM_INDEX_RADIO_TUNING_KNOB
+	db SPRITE_ANIM_FRAMESET_RADIO_TUNING_KNOB, SPRITE_ANIM_SEQ_RADIO_TUNING_KNOB, $00
+; SPRITE_ANIM_INDEX_MAGNET_TRAIN_RED
+	db SPRITE_ANIM_FRAMESET_MAGNET_TRAIN_RED, SPRITE_ANIM_SEQ_NULL, $00
+; SPRITE_ANIM_INDEX_LEAF
+	db SPRITE_ANIM_FRAMESET_LEAF, SPRITE_ANIM_SEQ_CUT_LEAVES, $00
+; SPRITE_ANIM_INDEX_CUT_TREE
+	db SPRITE_ANIM_FRAMESET_CUT_TREE, SPRITE_ANIM_SEQ_NULL, $00
+; SPRITE_ANIM_INDEX_FLY_LEAF
+	db SPRITE_ANIM_FRAMESET_LEAF, SPRITE_ANIM_SEQ_FLY_LEAF, $00
+; SPRITE_ANIM_INDEX_EGG_CRACK
+	db SPRITE_ANIM_FRAMESET_EGG_CRACK, SPRITE_ANIM_SEQ_NULL, $00
+; SPRITE_ANIM_INDEX_1A
+	db SPRITE_ANIM_FRAMESET_24, SPRITE_ANIM_SEQ_19, $00
+; SPRITE_ANIM_INDEX_HEADBUTT
+	db SPRITE_ANIM_FRAMESET_HEADBUTT, SPRITE_ANIM_SEQ_NULL, $00
+; SPRITE_ANIM_INDEX_EGG_HATCH
+	db SPRITE_ANIM_FRAMESET_EGG_HATCH, SPRITE_ANIM_SEQ_REVEAL_NEW_MON, $00
+; SPRITE_ANIM_INDEX_1D
+	db SPRITE_ANIM_FRAMESET_26, SPRITE_ANIM_SEQ_1A, $00
+; SPRITE_ANIM_INDEX_BLUE_WALK
+	db SPRITE_ANIM_FRAMESET_BLUE_WALK, SPRITE_ANIM_SEQ_NULL, $00
+; SPRITE_ANIM_INDEX_MAGNET_TRAIN_BLUE
+	db SPRITE_ANIM_FRAMESET_MAGNET_TRAIN_BLUE, SPRITE_ANIM_SEQ_NULL, $00
+; SPRITE_ANIM_INDEX_20
+	db SPRITE_ANIM_FRAMESET_2F, SPRITE_ANIM_SEQ_NULL, $00
+; SPRITE_ANIM_INDEX_21
+	db SPRITE_ANIM_FRAMESET_30, SPRITE_ANIM_SEQ_NULL, $00
+; SPRITE_ANIM_INDEX_22
+	db SPRITE_ANIM_FRAMESET_31, SPRITE_ANIM_SEQ_NULL, $00
+; SPRITE_ANIM_INDEX_23
+	db SPRITE_ANIM_FRAMESET_32, SPRITE_ANIM_SEQ_1B, $00
+; SPRITE_ANIM_INDEX_24
+	db SPRITE_ANIM_FRAMESET_33, SPRITE_ANIM_SEQ_1C, $00
+; SPRITE_ANIM_INDEX_25
+	db SPRITE_ANIM_FRAMESET_34, SPRITE_ANIM_SEQ_NULL, $00
+; SPRITE_ANIM_INDEX_INTRO_SUICUNE
+	db SPRITE_ANIM_FRAMESET_INTRO_SUICUNE, SPRITE_ANIM_SEQ_INTRO_SUICUNE, $00
+; SPRITE_ANIM_INDEX_INTRO_PICHU
+	db SPRITE_ANIM_FRAMESET_INTRO_PICHU, SPRITE_ANIM_SEQ_INTRO_PICHU_WOOPER, $00
+; SPRITE_ANIM_INDEX_INTRO_WOOPER
+	db SPRITE_ANIM_FRAMESET_INTRO_WOOPER, SPRITE_ANIM_SEQ_INTRO_PICHU_WOOPER, $00
+; SPRITE_ANIM_INDEX_INTRO_UNOWN
+	db SPRITE_ANIM_FRAMESET_INTRO_UNOWN_1, SPRITE_ANIM_SEQ_INTRO_UNOWN, $00
+; SPRITE_ANIM_INDEX_INTRO_UNOWN_F
+	db SPRITE_ANIM_FRAMESET_INTRO_UNOWN_F, SPRITE_ANIM_SEQ_INTRO_UNOWN_F, $00
+; SPRITE_ANIM_INDEX_INTRO_SUICUNE_AWAY
+	db SPRITE_ANIM_FRAMESET_INTRO_SUICUNE_AWAY, SPRITE_ANIM_SEQ_INTRO_SUICUNE_AWAY, $00
+; SPRITE_ANIM_INDEX_CELEBI
+	db SPRITE_ANIM_FRAMESET_CELEBI_LEFT, SPRITE_ANIM_SEQ_NULL, $00 ; 2c
--- /dev/null
+++ b/data/sprite_mons.asm
@@ -1,0 +1,37 @@
+; entries correspond to SPRITE_* constants past SPRITE_POKEMON
+
+	db UNOWN
+	db GEODUDE
+	db GROWLITHE
+	db WEEDLE
+	db SHELLDER
+	db ODDISH
+	db GENGAR
+	db ZUBAT
+	db MAGIKARP
+	db SQUIRTLE
+	db TOGEPI
+	db BUTTERFREE
+	db DIGLETT
+	db POLIWAG
+	db PIKACHU
+	db CLEFAIRY
+	db CHARMANDER
+	db JYNX
+	db STARMIE
+	db BULBASAUR
+	db JIGGLYPUFF
+	db GRIMER
+	db EKANS
+	db PARAS
+	db TENTACOOL
+	db TAUROS
+	db MACHOP
+	db VOLTORB
+	db LAPRAS
+	db RHYDON
+	db MOLTRES
+	db SNORLAX
+	db GYARADOS
+	db LUGIA
+	db HO_OH
--- /dev/null
+++ b/data/time_capsule/mon_order.asm
@@ -1,0 +1,253 @@
+	db RHYDON
+	db KANGASKHAN
+	db NIDORAN_M
+	db CLEFAIRY
+	db SPEAROW
+	db VOLTORB
+	db NIDOKING
+	db SLOWBRO
+	db IVYSAUR
+	db EXEGGUTOR
+	db LICKITUNG
+	db EXEGGCUTE
+	db GRIMER
+	db GENGAR
+	db NIDORAN_F
+	db NIDOQUEEN
+	db CUBONE
+	db RHYHORN
+	db LAPRAS
+	db ARCANINE
+	db MEW
+	db GYARADOS
+	db SHELLDER
+	db TENTACOOL
+	db GASTLY
+	db SCYTHER
+	db STARYU
+	db BLASTOISE
+	db PINSIR
+	db TANGELA
+	db SCIZOR ; MISSINGNO.
+	db SHUCKLE ; MISSINGNO.
+	db GROWLITHE
+	db ONIX
+	db FEAROW
+	db PIDGEY
+	db SLOWPOKE
+	db KADABRA
+	db GRAVELER
+	db CHANSEY
+	db MACHOKE
+	db MR__MIME
+	db HITMONLEE
+	db HITMONCHAN
+	db ARBOK
+	db PARASECT
+	db PSYDUCK
+	db DROWZEE
+	db GOLEM
+	db HERACROSS ; MISSINGNO.
+	db MAGMAR
+	db HO_OH ; MISSINGNO.
+	db ELECTABUZZ
+	db MAGNETON
+	db KOFFING
+	db SNEASEL ; MISSINGNO.
+	db MANKEY
+	db SEEL
+	db DIGLETT
+	db TAUROS
+	db TEDDIURSA ; MISSINGNO.
+	db URSARING ; MISSINGNO.
+	db SLUGMA ; MISSINGNO.
+	db FARFETCH_D
+	db VENONAT
+	db DRAGONITE
+	db MAGCARGO ; MISSINGNO.
+	db SWINUB ; MISSINGNO.
+	db PILOSWINE ; MISSINGNO.
+	db DODUO
+	db POLIWAG
+	db JYNX
+	db MOLTRES
+	db ARTICUNO
+	db ZAPDOS
+	db DITTO
+	db MEOWTH
+	db KRABBY
+	db CORSOLA ; MISSINGNO.
+	db REMORAID ; MISSINGNO.
+	db OCTILLERY ; MISSINGNO.
+	db VULPIX
+	db NINETALES
+	db PIKACHU
+	db RAICHU
+	db DELIBIRD ; MISSINGNO.
+	db MANTINE ; MISSINGNO.
+	db DRATINI
+	db DRAGONAIR
+	db KABUTO
+	db KABUTOPS
+	db HORSEA
+	db SEADRA
+	db SKARMORY ; MISSINGNO.
+	db HOUNDOUR ; MISSINGNO.
+	db SANDSHREW
+	db SANDSLASH
+	db OMANYTE
+	db OMASTAR
+	db JIGGLYPUFF
+	db WIGGLYTUFF
+	db EEVEE
+	db FLAREON
+	db JOLTEON
+	db VAPOREON
+	db MACHOP
+	db ZUBAT
+	db EKANS
+	db PARAS
+	db POLIWHIRL
+	db POLIWRATH
+	db WEEDLE
+	db KAKUNA
+	db BEEDRILL
+	db HOUNDOOM ; MISSINGNO.
+	db DODRIO
+	db PRIMEAPE
+	db DUGTRIO
+	db VENOMOTH
+	db DEWGONG
+	db KINGDRA ; MISSINGNO.
+	db PHANPY ; MISSINGNO.
+	db CATERPIE
+	db METAPOD
+	db BUTTERFREE
+	db MACHAMP
+	db DONPHAN ; MISSINGNO.
+	db GOLDUCK
+	db HYPNO
+	db GOLBAT
+	db MEWTWO
+	db SNORLAX
+	db MAGIKARP
+	db PORYGON2 ; MISSINGNO.
+	db STANTLER ; MISSINGNO.
+	db MUK
+	db SMEARGLE ; MISSINGNO.
+	db KINGLER
+	db CLOYSTER
+	db TYROGUE ; MISSINGNO.
+	db ELECTRODE
+	db CLEFABLE
+	db WEEZING
+	db PERSIAN
+	db MAROWAK
+	db HITMONTOP ; MISSINGNO.
+	db HAUNTER
+	db ABRA
+	db ALAKAZAM
+	db PIDGEOTTO
+	db PIDGEOT
+	db STARMIE
+	db BULBASAUR
+	db VENUSAUR
+	db TENTACRUEL
+	db SMOOCHUM ; MISSINGNO.
+	db GOLDEEN
+	db SEAKING
+	db ELEKID ; MISSINGNO.
+	db MAGBY ; MISSINGNO.
+	db MILTANK ; MISSINGNO.
+	db BLISSEY ; MISSINGNO.
+	db PONYTA
+	db RAPIDASH
+	db RATTATA
+	db RATICATE
+	db NIDORINO
+	db NIDORINA
+	db GEODUDE
+	db PORYGON
+	db AERODACTYL
+	db RAIKOU ; MISSINGNO.
+	db MAGNEMITE
+	db ENTEI ; MISSINGNO.
+	db SUICUNE ; MISSINGNO.
+	db CHARMANDER
+	db SQUIRTLE
+	db CHARMELEON
+	db WARTORTLE
+	db CHARIZARD
+	db LARVITAR ; MISSINGNO.
+	db PUPITAR ; MISSINGNO. KABUTOPS FOSSIL
+	db TYRANITAR ; MISSINGNO. AERODACTYL FOSSIL
+	db LUGIA ; MISSINGNO. GHOST
+	db ODDISH
+	db GLOOM
+	db VILEPLUME
+	db BELLSPROUT
+	db WEEPINBELL
+	db VICTREEBEL
+
+	db CHIKORITA
+	db BAYLEEF
+	db MEGANIUM
+	db CYNDAQUIL
+	db QUILAVA
+	db TYPHLOSION
+	db TOTODILE
+	db CROCONAW
+	db FERALIGATR
+	db SENTRET
+	db FURRET
+	db HOOTHOOT
+	db NOCTOWL
+	db LEDYBA
+	db LEDIAN
+	db SPINARAK
+	db ARIADOS
+	db CROBAT
+	db CHINCHOU
+	db LANTURN
+	db PICHU
+	db CLEFFA
+	db IGGLYBUFF
+	db TOGEPI
+	db TOGETIC
+	db NATU
+	db XATU
+	db MAREEP
+	db FLAAFFY
+	db AMPHAROS
+	db BELLOSSOM
+	db MARILL
+	db AZUMARILL
+	db SUDOWOODO
+	db POLITOED
+	db HOPPIP
+	db SKIPLOOM
+	db JUMPLUFF
+	db AIPOM
+	db SUNKERN
+	db SUNFLORA
+	db YANMA
+	db WOOPER
+	db QUAGSIRE
+	db ESPEON
+	db UMBREON
+	db MURKROW
+	db SLOWKING
+	db MISDREAVUS
+	db UNOWN
+	db WOBBUFFET
+	db GIRAFARIG
+	db PINECO
+	db FORRETRESS
+	db DUNSPARCE
+	db GLIGAR
+	db STEELIX
+	db SNUBBULL
+	db GRANBULL
+	db QWILFISH
+	db WOBBUFFET
+	db WOBBUFFET
--- /dev/null
+++ b/data/time_capsule/special_stats.asm
@@ -1,0 +1,152 @@
+; The original base Special stat for each Pokémon from Red/Blue
+	db  65 ; BULBASAUR
+	db  80 ; IVYSAUR
+	db 100 ; VENUSAUR
+	db  50 ; CHARMANDER
+	db  65 ; CHARMELEON
+	db  85 ; CHARIZARD
+	db  50 ; SQUIRTLE
+	db  65 ; WARTORTLE
+	db  85 ; BLASTOISE
+	db  20 ; CATERPIE
+	db  25 ; METAPOD
+	db  80 ; BUTTERFREE
+	db  20 ; WEEDLE
+	db  25 ; KAKUNA
+	db  45 ; BEEDRILL
+	db  35 ; PIDGEY
+	db  50 ; PIDGEOTTO
+	db  70 ; PIDGEOT
+	db  25 ; RATTATA
+	db  50 ; RATICATE
+	db  31 ; SPEAROW
+	db  61 ; FEAROW
+	db  40 ; EKANS
+	db  65 ; ARBOK
+	db  50 ; PIKACHU
+	db  90 ; RAICHU
+	db  30 ; SANDSHREW
+	db  55 ; SANDSLASH
+	db  40 ; NIDORAN_F
+	db  55 ; NIDORINA
+	db  75 ; NIDOQUEEN
+	db  40 ; NIDORAN_M
+	db  55 ; NIDORINO
+	db  75 ; NIDOKING
+	db  60 ; CLEFAIRY
+	db  85 ; CLEFABLE
+	db  65 ; VULPIX
+	db 100 ; NINETALES
+	db  25 ; JIGGLYPUFF
+	db  50 ; WIGGLYTUFF
+	db  40 ; ZUBAT
+	db  75 ; GOLBAT
+	db  75 ; ODDISH
+	db  85 ; GLOOM
+	db 100 ; VILEPLUME
+	db  55 ; PARAS
+	db  80 ; PARASECT
+	db  40 ; VENONAT
+	db  90 ; VENOMOTH
+	db  45 ; DIGLETT
+	db  70 ; DUGTRIO
+	db  40 ; MEOWTH
+	db  65 ; PERSIAN
+	db  50 ; PSYDUCK
+	db  80 ; GOLDUCK
+	db  35 ; MANKEY
+	db  60 ; PRIMEAPE
+	db  50 ; GROWLITHE
+	db  80 ; ARCANINE
+	db  40 ; POLIWAG
+	db  50 ; POLIWHIRL
+	db  70 ; POLIWRATH
+	db 105 ; ABRA
+	db 120 ; KADABRA
+	db 135 ; ALAKAZAM
+	db  35 ; MACHOP
+	db  50 ; MACHOKE
+	db  65 ; MACHAMP
+	db  70 ; BELLSPROUT
+	db  85 ; WEEPINBELL
+	db 100 ; VICTREEBEL
+	db 100 ; TENTACOOL
+	db 120 ; TENTACRUEL
+	db  30 ; GEODUDE
+	db  45 ; GRAVELER
+	db  55 ; GOLEM
+	db  65 ; PONYTA
+	db  80 ; RAPIDASH
+	db  40 ; SLOWPOKE
+	db  80 ; SLOWBRO
+	db  95 ; MAGNEMITE
+	db 120 ; MAGNETON
+	db  58 ; FARFETCH_D
+	db  35 ; DODUO
+	db  60 ; DODRIO
+	db  70 ; SEEL
+	db  95 ; DEWGONG
+	db  40 ; GRIMER
+	db  65 ; MUK
+	db  45 ; SHELLDER
+	db  85 ; CLOYSTER
+	db 100 ; GASTLY
+	db 115 ; HAUNTER
+	db 130 ; GENGAR
+	db  30 ; ONIX
+	db  90 ; DROWZEE
+	db 115 ; HYPNO
+	db  25 ; KRABBY
+	db  50 ; KINGLER
+	db  55 ; VOLTORB
+	db  80 ; ELECTRODE
+	db  60 ; EXEGGCUTE
+	db 125 ; EXEGGUTOR
+	db  40 ; CUBONE
+	db  50 ; MAROWAK
+	db  35 ; HITMONLEE
+	db  35 ; HITMONCHAN
+	db  60 ; LICKITUNG
+	db  60 ; KOFFING
+	db  85 ; WEEZING
+	db  30 ; RHYHORN
+	db  45 ; RHYDON
+	db 105 ; CHANSEY
+	db 100 ; TANGELA
+	db  40 ; KANGASKHAN
+	db  70 ; HORSEA
+	db  95 ; SEADRA
+	db  50 ; GOLDEEN
+	db  80 ; SEAKING
+	db  70 ; STARYU
+	db 100 ; STARMIE
+	db 100 ; MR__MIME
+	db  55 ; SCYTHER
+	db  95 ; JYNX
+	db  85 ; ELECTABUZZ
+	db  85 ; MAGMAR
+	db  55 ; PINSIR
+	db  70 ; TAUROS
+	db  20 ; MAGIKARP
+	db 100 ; GYARADOS
+	db  95 ; LAPRAS
+	db  48 ; DITTO
+	db  65 ; EEVEE
+	db 110 ; VAPOREON
+	db 110 ; JOLTEON
+	db 110 ; FLAREON
+	db  75 ; PORYGON
+	db  90 ; OMANYTE
+	db 115 ; OMASTAR
+	db  45 ; KABUTO
+	db  70 ; KABUTOPS
+	db  60 ; AERODACTYL
+	db  65 ; SNORLAX
+	db 125 ; ARTICUNO
+	db 125 ; ZAPDOS
+	db 125 ; MOLTRES
+	db  50 ; DRATINI
+	db  70 ; DRAGONAIR
+	db 100 ; DRAGONITE
+	db 154 ; MEWTWO
+	db 100 ; MEW
--- /dev/null
+++ b/data/tmhm_moves.asm
@@ -1,0 +1,67 @@
+; TMs
+	db DYNAMICPUNCH
+	db HEADBUTT
+	db CURSE
+	db ROLLOUT
+	db ROAR
+	db TOXIC
+	db ZAP_CANNON
+	db ROCK_SMASH
+	db PSYCH_UP
+	db HIDDEN_POWER
+	db SUNNY_DAY
+	db SWEET_SCENT
+	db SNORE
+	db BLIZZARD
+	db HYPER_BEAM
+	db ICY_WIND
+	db PROTECT
+	db RAIN_DANCE
+	db GIGA_DRAIN
+	db ENDURE
+	db FRUSTRATION
+	db SOLARBEAM
+	db IRON_TAIL
+	db DRAGONBREATH
+	db THUNDER
+	db EARTHQUAKE
+	db RETURN
+	db DIG
+	db PSYCHIC_M
+	db SHADOW_BALL
+	db MUD_SLAP
+	db DOUBLE_TEAM
+	db ICE_PUNCH
+	db SWAGGER
+	db SLEEP_TALK
+	db SLUDGE_BOMB
+	db SANDSTORM
+	db FIRE_BLAST
+	db SWIFT
+	db DEFENSE_CURL
+	db THUNDERPUNCH
+	db DREAM_EATER
+	db DETECT
+	db REST
+	db ATTRACT
+	db THIEF
+	db STEEL_WING
+	db FIRE_PUNCH
+	db FURY_CUTTER
+	db NIGHTMARE
+
+; HMs
+	db CUT
+	db FLY
+	db SURF
+	db STRENGTH
+	db FLASH
+	db WHIRLPOOL
+	db WATERFALL
+
+; Move tutor
+	db FLAMETHROWER
+	db THUNDERBOLT
+	db ICE_BEAM
+
+	db 0 ; end
--- /dev/null
+++ b/data/wild/bug_contest_mons.asm
@@ -1,0 +1,12 @@
+	;   %, species,   min, max
+	db 20, CATERPIE,    7, 18
+	db 20, WEEDLE,      7, 18
+	db 10, METAPOD,     9, 18
+	db 10, KAKUNA,      9, 18
+	db  5, BUTTERFREE, 12, 15
+	db  5, BEEDRILL,   12, 15
+	db 10, VENONAT,    10, 16
+	db 10, PARAS,      10, 17
+	db  5, SCYTHER,    13, 14
+	db  5, PINSIR,     13, 14
+	db -1, VENOMOTH,   30, 40
--- /dev/null
+++ b/data/wild/probabilities.asm
@@ -1,0 +1,15 @@
+GrassMonProbTable: ; 2a1cb
+	db 30,  $0 ; 30% chance
+	db 60,  $2 ; 30% chance
+	db 80,  $4 ; 20% chance
+	db 90,  $6 ; 10% chance
+	db 95,  $8 ;  5% chance
+	db 99,  $a ;  4% chance
+	db 100, $c ;  1% chance
+; 2a1d9
+
+WaterMonProbTable: ; 2a1d9
+	db 60,  $0 ; 60% chance
+	db 90,  $2 ; 30% chance
+	db 100, $4 ; 10% chance
+; 2a1df
--- /dev/null
+++ b/data/wild/roammon_maps.asm
@@ -1,0 +1,31 @@
+; Maps that roaming monsters can be on, and possible maps they can jump to.
+; Notably missing are Route 40 and Route 41, which are water routes.
+
+roam_map: macro
+; map, # of other maps, other maps
+	map \1
+	db  \2
+rept \2
+	map \3
+	shift
+endr
+	db 0
+endm
+
+	roam_map ROUTE_29, 2, ROUTE_30, ROUTE_46
+	roam_map ROUTE_30, 2, ROUTE_29, ROUTE_31
+	roam_map ROUTE_31, 3, ROUTE_30, ROUTE_32, ROUTE_36
+	roam_map ROUTE_32, 3, ROUTE_36, ROUTE_31, ROUTE_33
+	roam_map ROUTE_33, 2, ROUTE_32, ROUTE_34
+	roam_map ROUTE_34, 2, ROUTE_33, ROUTE_35
+	roam_map ROUTE_35, 2, ROUTE_34, ROUTE_36
+	roam_map ROUTE_36, 4, ROUTE_35, ROUTE_31, ROUTE_32, ROUTE_37
+	roam_map ROUTE_37, 3, ROUTE_36, ROUTE_38, ROUTE_42
+	roam_map ROUTE_38, 3, ROUTE_37, ROUTE_39, ROUTE_42
+	roam_map ROUTE_39, 1, ROUTE_38
+	roam_map ROUTE_42, 4, ROUTE_43, ROUTE_44, ROUTE_37, ROUTE_38
+	roam_map ROUTE_43, 2, ROUTE_42, ROUTE_44
+	roam_map ROUTE_44, 3, ROUTE_42, ROUTE_43, ROUTE_45
+	roam_map ROUTE_45, 2, ROUTE_44, ROUTE_46
+	roam_map ROUTE_46, 2, ROUTE_45, ROUTE_29
+	db -1 ; end
--- /dev/null
+++ b/data/wild/treemon_maps.asm
@@ -1,0 +1,50 @@
+treemon_map: macro
+	map \1
+	db  \2 ; treemon set
+endm
+
+TreeMonMaps: ; b825e
+	treemon_map ROUTE_26, 4
+	treemon_map ROUTE_27, 4
+	treemon_map ROUTE_28, 0
+	treemon_map ROUTE_29, 3
+	treemon_map ROUTE_30, 3
+	treemon_map ROUTE_31, 3
+	treemon_map ROUTE_32, 4
+	treemon_map ROUTE_33, 2
+	treemon_map ROUTE_34, 3
+	treemon_map ROUTE_35, 3
+	treemon_map ROUTE_36, 3
+	treemon_map ROUTE_37, 3
+	treemon_map ROUTE_38, 3
+	treemon_map ROUTE_39, 3
+	treemon_map ROUTE_40, 0
+	treemon_map ROUTE_41, 0
+	treemon_map ROUTE_42, 2
+	treemon_map ROUTE_43, 5
+	treemon_map ROUTE_44, 1
+	treemon_map ROUTE_45, 1
+	treemon_map ROUTE_46, 1
+	treemon_map NEW_BARK_TOWN, 0
+	treemon_map CHERRYGROVE_CITY, 0
+	treemon_map VIOLET_CITY, 0
+	treemon_map AZALEA_TOWN, 2
+	treemon_map CIANWOOD_CITY, 0
+	treemon_map GOLDENROD_CITY, 0
+	treemon_map OLIVINE_CITY, 0
+	treemon_map ECRUTEAK_CITY, 0
+	treemon_map MAHOGANY_TOWN, 0
+	treemon_map LAKE_OF_RAGE, 5
+	treemon_map BLACKTHORN_CITY, 0
+	treemon_map SILVER_CAVE_OUTSIDE, 0
+	treemon_map ILEX_FOREST, 6
+	db -1
+; b82c5
+
+RockMonMaps: ; b82c5
+	treemon_map CIANWOOD_CITY, 7
+	treemon_map ROUTE_40, 7
+	treemon_map DARK_CAVE_VIOLET_ENTRANCE, 7
+	treemon_map SLOWPOKE_WELL_B1F, 7
+	db -1
+; b82d2
--- /dev/null
+++ b/data/wild/treemons.asm
@@ -1,0 +1,128 @@
+TreeMons: ; b82e8
+	dw TreeMons1
+	dw TreeMons1
+	dw TreeMons2
+	dw TreeMons3
+	dw TreeMons4
+	dw TreeMons5
+	dw TreeMons6
+	dw RockMons
+	dw TreeMons1
+
+; Two tables each (common, rare).
+; Structure:
+;	db  %, species, level
+
+TreeMons1: ; b82fa
+; common
+	db 50, SPEAROW,    10
+	db 15, SPEAROW,    10
+	db 15, SPEAROW,    10
+	db 10, AIPOM,      10
+	db  5, AIPOM,      10
+	db  5, AIPOM,      10
+	db -1
+; rare
+	db 50, SPEAROW,    10
+	db 15, HERACROSS,  10
+	db 15, HERACROSS,  10
+	db 10, AIPOM,      10
+	db  5, AIPOM,      10
+	db  5, AIPOM,      10
+	db -1
+
+TreeMons2: ; b8320
+; common
+	db 50, SPEAROW,    10
+	db 15, EKANS,      10
+	db 15, SPEAROW,    10
+	db 10, AIPOM,      10
+	db  5, AIPOM,      10
+	db  5, AIPOM,      10
+	db -1
+; rare
+	db 50, SPEAROW,    10
+	db 15, HERACROSS,  10
+	db 15, HERACROSS,  10
+	db 10, AIPOM,      10
+	db  5, AIPOM,      10
+	db  5, AIPOM,      10
+	db -1
+
+TreeMons3: ; b8346
+; common
+	db 50, HOOTHOOT,   10
+	db 15, SPINARAK,   10
+	db 15, LEDYBA,     10
+	db 10, EXEGGCUTE,  10
+	db  5, EXEGGCUTE,  10
+	db  5, EXEGGCUTE,  10
+	db -1
+; rare
+	db 50, HOOTHOOT,   10
+	db 15, PINECO,     10
+	db 15, PINECO,     10
+	db 10, EXEGGCUTE,  10
+	db  5, EXEGGCUTE,  10
+	db  5, EXEGGCUTE,  10
+	db -1
+
+TreeMons4: ; b836c
+; common
+	db 50, HOOTHOOT,   10
+	db 15, EKANS,      10
+	db 15, HOOTHOOT,   10
+	db 10, EXEGGCUTE,  10
+	db  5, EXEGGCUTE,  10
+	db  5, EXEGGCUTE,  10
+	db -1
+; rare
+	db 50, HOOTHOOT,   10
+	db 15, PINECO,     10
+	db 15, PINECO,     10
+	db 10, EXEGGCUTE,  10
+	db  5, EXEGGCUTE,  10
+	db  5, EXEGGCUTE,  10
+	db -1
+
+TreeMons5: ; b8392
+; common
+	db 50, HOOTHOOT,   10
+	db 15, VENONAT,    10
+	db 15, HOOTHOOT,   10
+	db 10, EXEGGCUTE,  10
+	db  5, EXEGGCUTE,  10
+	db  5, EXEGGCUTE,  10
+	db -1
+; rare
+	db 50, HOOTHOOT,   10
+	db 15, PINECO,     10
+	db 15, PINECO,     10
+	db 10, EXEGGCUTE,  10
+	db  5, EXEGGCUTE,  10
+	db  5, EXEGGCUTE,  10
+	db -1
+
+TreeMons6: ; b83b8
+; common
+	db 50, HOOTHOOT,   10
+	db 15, PINECO,     10
+	db 15, PINECO,     10
+	db 10, NOCTOWL,    10
+	db  5, BUTTERFREE, 10
+	db  5, BEEDRILL,   10
+	db -1
+; rare
+	db 50, HOOTHOOT,   10
+	db 15, CATERPIE,   10
+	db 15, WEEDLE,     10
+	db 10, HOOTHOOT,   10
+	db  5, METAPOD,    10
+	db  5, KAKUNA,     10
+	db -1
+
+RockMons: ; b83de
+	db 90, KRABBY,     15
+	db 10, SHUCKLE,    15
+	db -1
+; b83e5
--- /dev/null
+++ b/engine/battle_tower.asm
@@ -1,0 +1,210 @@
+Function_LoadOpponentTrainerAndPokemons: ; 1f8000
+	ld a, [rSVBK]
+	push af
+	ld a, BANK(BT_OTTrainer)
+	ld [rSVBK], a
+
+	; Fill BT_OTTrainer with zeros
+	xor a
+	ld hl, BT_OTTrainer
+	ld bc, BT_OTTrainerEnd - BT_OTTrainer
+	call ByteFill
+
+	; Write $ff into the Item-Slots
+	ld a, $ff
+	ld [BT_OTPkmn1Item], a
+	ld [BT_OTPkmn2Item], a
+	ld [BT_OTPkmn3Item], a
+
+	; Set BT_OTTrainer as start address to write the following data to
+	ld de, BT_OTTrainer
+
+	ld a, [hRandomAdd]
+	ld b, a
+.resample ; loop to find a random trainer
+	call Random
+	ld a, [hRandomAdd]
+	add b
+	ld b, a ; b contains the nr of the trainer
+IF DEF(CRYSTAL11)
+	and (1 << 7) - 1
+	cp 70
+ELSE
+	and (1 << 5) - 1
+	cp 21
+ENDC
+	jr nc, .resample
+	ld b, a
+
+	ld a, BANK(sBTTrainers)
+	call GetSRAMBank
+
+	ld c, BATTLETOWER_NROFTRAINERS
+	ld hl, sBTTrainers
+.next_trainer
+	ld a, [hli]
+	cp b
+	jr z, .resample
+	dec c
+	jr nz, .next_trainer ; c <= 7  initialise all 7 trainers?
+
+	ld hl, sBTTrainers
+	ld a, [sNrOfBeatenBattleTowerTrainers]
+	ld c, a
+	ld a, b
+	ld b, 0
+	add hl, bc
+	ld [hl], a
+
+	call CloseSRAM
+
+	push af
+; Copy name (10 bytes) and class (1 byte) of trainer
+	ld hl, BattleTowerTrainers
+	ld bc, NAME_LENGTH
+	call AddNTimes
+	ld bc, NAME_LENGTH
+	call CopyBytes
+
+	call Function_LoadRandomBattleTowerPkmn
+	pop af
+
+	ld hl, BattleTowerTrainerData
+	ld bc, BATTLETOWER_TRAINERDATALENGTH
+	call AddNTimes
+	ld bc, BATTLETOWER_TRAINERDATALENGTH
+.copy_bt_trainer_data_loop
+	ld a, BANK(BattleTowerTrainerData)
+	call GetFarByte
+	ld [de], a
+	inc hl
+	inc de
+	dec bc
+	ld a, b
+	or c
+	jr nz, .copy_bt_trainer_data_loop
+
+	pop af
+	ld [rSVBK], a
+
+	ret
+
+
+Function_LoadRandomBattleTowerPkmn: ; 1f8081
+	ld c, BATTLETOWER_NROFPKMNS
+.loop
+	push bc
+	ld a, BANK(sBTPkmnPrevTrainer1)
+	call GetSRAMBank
+
+.FindARandomBattleTowerPkmn:
+	; From Which LevelGroup are the Pkmn loaded
+	; a = 1..10
+	ld a, [wBTChoiceOfLvlGroup] ; [$d800]
+	dec a
+	ld hl, BattleTowerMons
+	ld bc, BattleTowerMons2 - BattleTowerMons1
+	call AddNTimes
+
+	ld a, [hRandomAdd]
+	ld b, a
+.resample
+	call Random
+	ld a, [hRandomAdd]
+	add b
+	ld b, a
+	and $1f
+	cp BATTLETOWER_NRMONSPERLEVELBRACKET
+	jr nc, .resample
+	; in register 'a' is the chosen Pkmn of the LevelGroup
+
+	; Check if Pkmn was already loaded before
+	; Check current and the 2 previous teams
+	; includes check if item is double at the current team
+	ld bc, PARTYMON_STRUCT_LENGTH + PKMN_NAME_LENGTH
+	call AddNTimes
+	ld a, [hli]
+	ld b, a
+	ld a, [hld]
+	ld c, a
+	ld a, [BT_OTPkmn1]
+	cp b
+	jr z, .FindARandomBattleTowerPkmn
+	ld a, [BT_OTPkmn1Item]
+	cp c
+	jr z, .FindARandomBattleTowerPkmn
+	ld a, [BT_OTPkmn2]
+	cp b
+	jr z, .FindARandomBattleTowerPkmn
+	ld a, [BT_OTPkmn2Item]
+	cp c
+	jr z, .FindARandomBattleTowerPkmn
+	ld a, [BT_OTPkmn3]
+	cp b
+	jr z, .FindARandomBattleTowerPkmn
+	ld a, [BT_OTPkmn3Item]
+	cp c
+	jr z, .FindARandomBattleTowerPkmn
+	ld a, [sBTPkmnPrevTrainer1]
+	cp b
+	jr z, .FindARandomBattleTowerPkmn
+	ld a, [sBTPkmnPrevTrainer2]
+	cp b
+	jr z, .FindARandomBattleTowerPkmn
+	ld a, [sBTPkmnPrevTrainer3]
+	cp b
+	jr z, .FindARandomBattleTowerPkmn
+	ld a, [sBTPkmnPrevPrevTrainer1]
+	cp b
+	jr z, .FindARandomBattleTowerPkmn
+	ld a, [sBTPkmnPrevPrevTrainer2]
+	cp b
+	jr z, .FindARandomBattleTowerPkmn
+	ld a, [sBTPkmnPrevPrevTrainer3]
+	cp b
+	jr z, .FindARandomBattleTowerPkmn
+
+	ld bc, PARTYMON_STRUCT_LENGTH + PKMN_NAME_LENGTH
+	call CopyBytes
+
+	ld a, [wNamedObjectIndexBuffer]
+	push af
+	push de
+	ld hl, - (PARTYMON_STRUCT_LENGTH + PKMN_NAME_LENGTH)
+	add hl, de
+	ld a, [hl]
+	ld [wNamedObjectIndexBuffer], a
+	ld bc, PARTYMON_STRUCT_LENGTH
+	add hl, bc
+	push hl
+	call GetPokemonName
+	ld h, d
+	ld l, e
+	pop de
+	ld bc, PKMN_NAME_LENGTH
+	call CopyBytes
+
+	pop de
+	pop af
+	ld [wNamedObjectIndexBuffer], a
+	pop bc
+	dec c
+	jp nz, .loop
+
+	ld a, [sBTPkmnPrevTrainer1]
+	ld [sBTPkmnPrevPrevTrainer1], a
+	ld a, [sBTPkmnPrevTrainer2]
+	ld [sBTPkmnPrevPrevTrainer2], a
+	ld a, [sBTPkmnPrevTrainer3]
+	ld [sBTPkmnPrevPrevTrainer3], a
+	ld a, [BT_OTPkmn1]
+	ld [sBTPkmnPrevTrainer1], a
+	ld a, [BT_OTPkmn2]
+	ld [sBTPkmnPrevTrainer2], a
+	ld a, [BT_OTPkmn3]
+	ld [sBTPkmnPrevTrainer3], a
+	call CloseSRAM
+	ret
+; 1f814e
+
+INCLUDE "data/battle_tower.asm"
--- a/engine/decorations.asm
+++ b/engine/decorations.asm
@@ -541,69 +541,9 @@
 	ret
 ; 26a4f
 
-decoration: MACRO
-	; type, name, command, event flag, tile/sprite
-	db \1, \2, \3
-	dw \4
-	db \5
-ENDM
-
 DecorationAttributes: ; 26a4f
-	decoration DECO_PLANT,    $00,               $0,                 EVENT_GAVE_KURT_APRICORNS,                         $00
-	decoration DECO_PLANT,    PUT_IT_AWAY,       PUT_AWAY_BED,       EVENT_GAVE_KURT_APRICORNS,                         $00
-	decoration DECO_BED,      FEATHERY_BED,      SET_UP_BED,         EVENT_DECO_BED_1,                  $1b
-	decoration DECO_BED,      PINK_BED,          SET_UP_BED,         EVENT_DECO_BED_2,                  $1c
-	decoration DECO_BED,      POLKADOT_BED,      SET_UP_BED,         EVENT_DECO_BED_3,                  $1d
-	decoration DECO_BED,      PIKACHU_BED,       SET_UP_BED,         EVENT_DECO_BED_4,                  $1e
-	decoration DECO_PLANT,    PUT_IT_AWAY,       PUT_AWAY_CARPET,    EVENT_GAVE_KURT_APRICORNS,                         $00
-	decoration DECO_CARPET,   RED_CARPET,        SET_UP_CARPET,      EVENT_DECO_CARPET_1,               $08
-	decoration DECO_CARPET,   BLUE_CARPET,       SET_UP_CARPET,      EVENT_DECO_CARPET_2,               $0b
-	decoration DECO_CARPET,   YELLOW_CARPET,     SET_UP_CARPET,      EVENT_DECO_CARPET_3,               $0e
-	decoration DECO_CARPET,   GREEN_CARPET,      SET_UP_CARPET,      EVENT_DECO_CARPET_4,               $11
-	decoration DECO_PLANT,    PUT_IT_AWAY,       PUT_AWAY_PLANT,     EVENT_GAVE_KURT_APRICORNS,                         $00
-	decoration DECO_PLANT,    MAGNAPLANT,        SET_UP_PLANT,       EVENT_DECO_PLANT_1,                $20
-	decoration DECO_PLANT,    TROPICPLANT,       SET_UP_PLANT,       EVENT_DECO_PLANT_2,                $21
-	decoration DECO_PLANT,    JUMBOPLANT,        SET_UP_PLANT,       EVENT_DECO_PLANT_3,                $22
-	decoration DECO_PLANT,    PUT_IT_AWAY,       PUT_AWAY_POSTER,    EVENT_GAVE_KURT_APRICORNS,                         $00
-	decoration DECO_PLANT,    TOWN_MAP_D,        SET_UP_POSTER,      EVENT_DECO_PLANT_4,                $1f
-	decoration DECO_POSTER,   PIKACHU,           SET_UP_POSTER,      EVENT_DECO_POSTER_1,               $23
-	decoration DECO_POSTER,   CLEFAIRY,          SET_UP_POSTER,      EVENT_DECO_POSTER_2,               $24
-	decoration DECO_POSTER,   JIGGLYPUFF,        SET_UP_POSTER,      EVENT_DECO_POSTER_3,               $25
-	decoration DECO_PLANT,    PUT_IT_AWAY,       PUT_AWAY_CONSOLE,   EVENT_GAVE_KURT_APRICORNS,                         $00
-	decoration DECO_PLANT,    FAMICOM,           SET_UP_CONSOLE,     EVENT_DECO_FAMICOM,                SPRITE_FAMICOM
-	decoration DECO_PLANT,    SUPER_NES,         SET_UP_CONSOLE,     EVENT_DECO_SNES,                   SPRITE_SNES
-	decoration DECO_PLANT,    NINTENDO_64,       SET_UP_CONSOLE,     EVENT_DECO_N64,                    SPRITE_N64
-	decoration DECO_PLANT,    VIRTUAL_BOY,       SET_UP_CONSOLE,     EVENT_DECO_VIRTUAL_BOY,            SPRITE_VIRTUAL_BOY
-	decoration DECO_PLANT,    PUT_IT_AWAY,       PUT_AWAY_BIG_DOLL,  EVENT_GAVE_KURT_APRICORNS,                         $00
-	decoration DECO_BIGDOLL,  SNORLAX,           SET_UP_BIG_DOLL,    EVENT_DECO_BIG_SNORLAX_DOLL,       SPRITE_BIG_SNORLAX
-	decoration DECO_BIGDOLL,  ONIX,              SET_UP_BIG_DOLL,    EVENT_DECO_BIG_ONIX_DOLL,          SPRITE_BIG_ONIX
-	decoration DECO_BIGDOLL,  LAPRAS,            SET_UP_BIG_DOLL,    EVENT_DECO_BIG_LAPRAS_DOLL,        SPRITE_BIG_LAPRAS
-	decoration DECO_PLANT,    PUT_IT_AWAY,       PUT_AWAY_DOLL,      EVENT_GAVE_KURT_APRICORNS,                         $00
-	decoration DECO_DOLL,     PIKACHU,           SET_UP_DOLL,        EVENT_DECO_PIKACHU_DOLL,           SPRITE_PIKACHU
-	decoration DECO_PLANT,    SURF_PIKA_DOLL,    SET_UP_DOLL,        EVENT_DECO_SURFING_PIKACHU_DOLL,   SPRITE_SURFING_PIKACHU
-	decoration DECO_DOLL,     CLEFAIRY,          SET_UP_DOLL,        EVENT_DECO_CLEFAIRY_DOLL,          SPRITE_CLEFAIRY
-	decoration DECO_DOLL,     JIGGLYPUFF,        SET_UP_DOLL,        EVENT_DECO_JIGGLYPUFF_DOLL,        SPRITE_JIGGLYPUFF
-	decoration DECO_DOLL,     BULBASAUR,         SET_UP_DOLL,        EVENT_DECO_BULBASAUR_DOLL,         SPRITE_BULBASAUR
-	decoration DECO_DOLL,     CHARMANDER,        SET_UP_DOLL,        EVENT_DECO_CHARMANDER_DOLL,        SPRITE_CHARMANDER
-	decoration DECO_DOLL,     SQUIRTLE,          SET_UP_DOLL,        EVENT_DECO_SQUIRTLE_DOLL,          SPRITE_SQUIRTLE
-	decoration DECO_DOLL,     POLIWAG,           SET_UP_DOLL,        EVENT_DECO_POLIWAG_DOLL,           SPRITE_POLIWAG
-	decoration DECO_DOLL,     DIGLETT,           SET_UP_DOLL,        EVENT_DECO_DIGLETT_DOLL,           SPRITE_DIGLETT
-	decoration DECO_DOLL,     STARYU,            SET_UP_DOLL,        EVENT_DECO_STARMIE_DOLL,           SPRITE_STARMIE
-	decoration DECO_DOLL,     MAGIKARP,          SET_UP_DOLL,        EVENT_DECO_MAGIKARP_DOLL,          SPRITE_MAGIKARP
-	decoration DECO_DOLL,     ODDISH,            SET_UP_DOLL,        EVENT_DECO_ODDISH_DOLL,            SPRITE_ODDISH
-	decoration DECO_DOLL,     GENGAR,            SET_UP_DOLL,        EVENT_DECO_GENGAR_DOLL,            SPRITE_GENGAR
-	decoration DECO_DOLL,     SHELLDER,          SET_UP_DOLL,        EVENT_DECO_SHELLDER_DOLL,          SPRITE_SHELLDER
-	decoration DECO_DOLL,     GRIMER,            SET_UP_DOLL,        EVENT_DECO_GRIMER_DOLL,            SPRITE_GRIMER
-	decoration DECO_DOLL,     VOLTORB,           SET_UP_DOLL,        EVENT_DECO_VOLTORB_DOLL,           SPRITE_VOLTORB
-	decoration DECO_DOLL,     WEEDLE,            SET_UP_DOLL,        EVENT_DECO_WEEDLE_DOLL,            SPRITE_WEEDLE
-	decoration DECO_DOLL,     UNOWN,             SET_UP_DOLL,        EVENT_DECO_UNOWN_DOLL,             SPRITE_UNOWN
-	decoration DECO_DOLL,     GEODUDE,           SET_UP_DOLL,        EVENT_DECO_GEODUDE_DOLL,           SPRITE_GEODUDE
-	decoration DECO_DOLL,     MACHOP,            SET_UP_DOLL,        EVENT_DECO_MACHOP_DOLL,            SPRITE_MACHOP
-	decoration DECO_DOLL,     TENTACOOL,         SET_UP_DOLL,        EVENT_DECO_TENTACOOL_DOLL,         SPRITE_TENTACOOL
-	decoration DECO_PLANT,    GOLD_TROPHY,       SET_UP_DOLL,        EVENT_DECO_GOLD_TROPHY,            SPRITE_GOLD_TROPHY
-	decoration DECO_PLANT,    SILVER_TROPHY,     SET_UP_DOLL,        EVENT_DECO_SILVER_TROPHY,          SPRITE_SILVER_TROPHY
+INCLUDE "data/decoration_attributes.asm"
 ; 26b8d
-
 
 DecorationNames: ; 26b8d
 	db "CANCEL@"
--- a/engine/delete_save_change_clock.asm
+++ b/engine/delete_save_change_clock.asm
@@ -127,7 +127,7 @@
 	ld e, a
 	ld d, $0
 	add hl, de
-	ld [hl], $61
+	ld [hl], "▲"
 	ret
 
 .dpadinput ; 4d490
@@ -227,7 +227,7 @@
 	ld c, $2
 	call .ComponentFromNumber
 	ld hl, sPlayerData + (PlayerName - wPlayerData)
-	ld c, $5 ; PLAYER_NAME_LENGTH_J
+	ld c, NAME_LENGTH_JAPANESE - 1
 	call .ComponentFromString
 	ld hl, sPlayerData + (Money - wPlayerData)
 	ld c, $3
--- a/engine/engine_flags.asm
+++ b/engine/engine_flags.asm
@@ -84,205 +84,4 @@
 
 
 EngineFlags: ; 80462
-; All locations are in WRAM bank 1.
-engine_flag: MACRO
-	dwb \1, 1 << \2
-ENDM
-	; location, bit
-
-	; pokegear
-	engine_flag wPokegearFlags, 1 ; radio card       ; $0
-	engine_flag wPokegearFlags, 0 ; map card
-	engine_flag wPokegearFlags, 2 ; phone card
-	engine_flag wPokegearFlags, 3 ; expn card
-	engine_flag wPokegearFlags, 7 ; on/off
-
-	;   wDayCareMan, 7 ; day-care 1 on
-	engine_flag wDayCareMan, 6 ; egg is ready
-	;   wDayCareMan, 5 ; monster 1 and 2 are compatible
-	engine_flag wDayCareMan, 0 ; monster 1 in day-care
-
-	;   wDayCareLady, 7 = day-care 2 on
-	engine_flag wDayCareLady, 0 ; monster 2 in day-care
-
-	engine_flag wMomSavingMoney, 0 ; mom saving money ; $8
-	engine_flag wMomSavingMoney, 7 ; dst
-
-	engine_flag wUnusedTwoDayTimerOn, 0 ; unused, possibly related to a 2-day timer
-
-	engine_flag StatusFlags, 0 ; pokedex
-	engine_flag StatusFlags, 1 ; unown dex
-	engine_flag StatusFlags, 3 ; pokerus
-	engine_flag StatusFlags, 4 ; rocket signal on ch20
-	engine_flag StatusFlags, 6 ; credits skip
-	engine_flag StatusFlags, 7 ; bug contest on   ; $10
-	engine_flag StatusFlags2, 2 ; bug contest timer
-	engine_flag StatusFlags2, 1 ; safari zone?
-	engine_flag StatusFlags2, 0 ; rockets in radio tower
-	engine_flag StatusFlags2, 4 ; bike shop call enabled (1024 bike steps reqd)
-	engine_flag StatusFlags2, 5 ; give pokerus
-	engine_flag StatusFlags2, 6 ; berry -> berry juice when trading?
-	engine_flag StatusFlags2, 7 ; rockets in mahogany
-
-	engine_flag BikeFlags, 0 ; strength active  ; $18
-	engine_flag BikeFlags, 1 ; always on bike (cant surf)
-	engine_flag BikeFlags, 2 ; downhill (cycling road)
-
-	engine_flag JohtoBadges, 0 ; zephyrbadge
-	engine_flag JohtoBadges, 1 ; hivebadge
-	engine_flag JohtoBadges, 2 ; plainbadge
-	engine_flag JohtoBadges, 3 ; fogbadge
-	engine_flag JohtoBadges, 4 ; mineralbadge
-	engine_flag JohtoBadges, 5 ; stormbadge ; $20
-	engine_flag JohtoBadges, 6 ; glacierbadge
-	engine_flag JohtoBadges, 7 ; risingbadge
-
-	engine_flag KantoBadges, 0 ; boulderbadge
-	engine_flag KantoBadges, 1 ; cascadebadge
-	engine_flag KantoBadges, 2 ; thunderbadge
-	engine_flag KantoBadges, 3 ; rainbowbadge
-	engine_flag KantoBadges, 4 ; soulbadge
-	engine_flag KantoBadges, 5 ; marshbadge ; $28
-	engine_flag KantoBadges, 6 ; volcanobadge
-	engine_flag KantoBadges, 7 ; earthbadge
-
-	; unown sets
-	engine_flag UnlockedUnowns, 0 ; 1
-	engine_flag UnlockedUnowns, 1 ; 2
-	engine_flag UnlockedUnowns, 2 ; 3
-	engine_flag UnlockedUnowns, 3 ; 4
-	engine_flag UnlockedUnowns, 4 ; 5
-	engine_flag UnlockedUnowns, 5 ; 6       ; $30
-	engine_flag UnlockedUnowns, 6 ; 7
-	engine_flag UnlockedUnowns, 7 ; 8
-
-	; fly
-	engine_flag VisitedSpawns, 0     ; your house
-	engine_flag VisitedSpawns, 1     ; viridian pokecenter
-	engine_flag VisitedSpawns, 2     ; pallet
-	engine_flag VisitedSpawns, 3     ; viridian
-	engine_flag VisitedSpawns, 4     ; pewter
-	engine_flag VisitedSpawns, 5     ; cerulean ; $38
-	engine_flag VisitedSpawns, 6     ; rock tunnel
-	engine_flag VisitedSpawns, 7     ; vermilion
-	engine_flag VisitedSpawns + 1, 0 ; lavender
-	engine_flag VisitedSpawns + 1, 1 ; saffron
-	engine_flag VisitedSpawns + 1, 2 ; celadon
-	engine_flag VisitedSpawns + 1, 3 ; fuchsia
-	engine_flag VisitedSpawns + 1, 4 ; cinnabar
-	engine_flag VisitedSpawns + 1, 5 ; indigo plateau ; $40
-	engine_flag VisitedSpawns + 1, 6 ; new bark
-	engine_flag VisitedSpawns + 1, 7 ; cherrygrove
-	engine_flag VisitedSpawns + 2, 0 ; violet
-	                                 ; union cave
-	engine_flag VisitedSpawns + 2, 2 ; azalea
-	engine_flag VisitedSpawns + 2, 3 ; cianwood
-	engine_flag VisitedSpawns + 2, 4 ; goldenrod
-	engine_flag VisitedSpawns + 2, 5 ; olivine
-	engine_flag VisitedSpawns + 2, 6 ; ecruteak  ; $48
-	engine_flag VisitedSpawns + 2, 7 ; mahogany
-	engine_flag VisitedSpawns + 3, 0 ; lake of rage
-	engine_flag VisitedSpawns + 3, 1 ; blackthorn
-	engine_flag VisitedSpawns + 3, 2 ; silver cave
-	                                 ; fast ship
-	engine_flag VisitedSpawns + 3, 4 ; unused
-
-	engine_flag wLuckyNumberShowFlag, 0 ; lucky number show
-	engine_flag StatusFlags2, 3 ; ????
-
-	engine_flag DailyFlags, 0 ; kurt making balls  ; $50
-	engine_flag DailyFlags, 1 ; ????
-	engine_flag DailyFlags, 2 ; special wilddata?
-	engine_flag DailyFlags, 3 ; time capsule (24h wait)
-	engine_flag DailyFlags, 4 ; all fruit trees
-	engine_flag DailyFlags, 5 ; shuckle given
-	engine_flag DailyFlags, 6 ; goldenrod underground merchant closed
-	engine_flag DailyFlags, 7 ; fought in trainer hall today
-
-	engine_flag WeeklyFlags, 0 ; mt moon square clefairy  ; $58
-	engine_flag WeeklyFlags, 1 ; union cave lapras
-	engine_flag WeeklyFlags, 2 ; goldenrod underground haircut used
-	engine_flag WeeklyFlags, 3 ; goldenrod mall happiness event floor05 person07
-	engine_flag WeeklyFlags, 4 ; tea in blues house
-	engine_flag WeeklyFlags, 5 ; indigo plateau rival fight
-	engine_flag WeeklyFlags, 6 ; move tutor
-	engine_flag WeeklyFlags, 7 ; buenas password
-
-	engine_flag SwarmFlags, 0 ; buenas password 2
-	engine_flag SwarmFlags, 1 ; goldenrod dept store sale is on
-
-	engine_flag GameTimerPause, 7 ; $62
-
-	engine_flag PlayerGender, 0 ; player is female
-
-	engine_flag wCelebiEvent, 2 ; have gs ball after kurt examined it
-
-	; rematches
-	engine_flag wDailyRematchFlags, 0 ; jack
-	engine_flag wDailyRematchFlags, 1 ; huey
-	engine_flag wDailyRematchFlags, 2 ; gaven
-	engine_flag wDailyRematchFlags, 3 ; beth  ; $68
-	engine_flag wDailyRematchFlags, 4 ; jose
-	engine_flag wDailyRematchFlags, 5 ; reena
-	engine_flag wDailyRematchFlags, 6 ; joey
-	engine_flag wDailyRematchFlags, 7 ; wade
-	engine_flag wDailyRematchFlags + 1, 0 ; ralph
-	engine_flag wDailyRematchFlags + 1, 1 ; liz
-	engine_flag wDailyRematchFlags + 1, 2 ; anthony
-	engine_flag wDailyRematchFlags + 1, 3 ; todd  ; $70
-	engine_flag wDailyRematchFlags + 1, 4 ; gina
-	engine_flag wDailyRematchFlags + 1, 5 ; arnie
-	engine_flag wDailyRematchFlags + 1, 6 ; alan
-	engine_flag wDailyRematchFlags + 1, 7 ; dana
-	engine_flag wDailyRematchFlags + 2, 0 ; chad
-	engine_flag wDailyRematchFlags + 2, 1 ; tully
-	engine_flag wDailyRematchFlags + 2, 2 ; brent
-	engine_flag wDailyRematchFlags + 2, 3 ; tiffany  ; $78
-	engine_flag wDailyRematchFlags + 2, 4 ; vance
-	engine_flag wDailyRematchFlags + 2, 5 ; wilton
-	engine_flag wDailyRematchFlags + 2, 6 ; parry
-	engine_flag wDailyRematchFlags + 2, 7 ; erin
-
-	engine_flag wDailyPhoneItemFlags, 0 ; beverly has nugget
-	engine_flag wDailyPhoneItemFlags, 1 ; jose has star piece
-	engine_flag wDailyPhoneItemFlags, 2 ; wade has item (see EVENT_WADE_HAS_*** in constants/event_flags.asm)
-	engine_flag wDailyPhoneItemFlags, 3 ; gina has leaf stone  ; $80
-	engine_flag wDailyPhoneItemFlags, 4 ; alan has fire stone
-	engine_flag wDailyPhoneItemFlags, 5 ; liz has thunderstone
-	engine_flag wDailyPhoneItemFlags, 6 ; derek has nugget
-	engine_flag wDailyPhoneItemFlags, 7 ; tully has water stone
-
-	engine_flag wDailyPhoneItemFlags + 1, 0 ; tiffany has pink bow
-	engine_flag wDailyPhoneItemFlags + 1, 1 ; wilton has item (see EVENT_WILTON_HAS_*** in constants/event_flags.asm)
-
-	engine_flag wDailyPhoneTimeOfDayFlags, 0
-	engine_flag wDailyPhoneTimeOfDayFlags, 1  ; $88
-	engine_flag wDailyPhoneTimeOfDayFlags, 2
-	engine_flag wDailyPhoneTimeOfDayFlags, 3
-	engine_flag wDailyPhoneTimeOfDayFlags, 4
-	engine_flag wDailyPhoneTimeOfDayFlags, 5
-	engine_flag wDailyPhoneTimeOfDayFlags, 6
-	engine_flag wDailyPhoneTimeOfDayFlags, 7
-
-	engine_flag wDailyPhoneTimeOfDayFlags + 1, 0
-	engine_flag wDailyPhoneTimeOfDayFlags + 1, 1  ; $90
-	engine_flag wDailyPhoneTimeOfDayFlags + 1, 2
-	engine_flag wDailyPhoneTimeOfDayFlags + 1, 3
-	engine_flag wDailyPhoneTimeOfDayFlags + 1, 4
-	engine_flag wDailyPhoneTimeOfDayFlags + 1, 5
-	engine_flag wDailyPhoneTimeOfDayFlags + 1, 6
-	engine_flag wDailyPhoneTimeOfDayFlags + 1, 7
-
-	engine_flag wDailyPhoneTimeOfDayFlags + 2, 0
-	engine_flag wDailyPhoneTimeOfDayFlags + 2, 1  ; $98
-	engine_flag wDailyPhoneTimeOfDayFlags + 2, 2
-	engine_flag wDailyPhoneTimeOfDayFlags + 2, 3
-	engine_flag wDailyPhoneTimeOfDayFlags + 2, 4
-	engine_flag wDailyPhoneTimeOfDayFlags + 2, 5
-	engine_flag wDailyPhoneTimeOfDayFlags + 2, 6
-	engine_flag wDailyPhoneTimeOfDayFlags + 2, 7
-
-	engine_flag wPlayerSpriteSetupFlags, 2 ; female player has been transformed into male
-
-	engine_flag SwarmFlags, 2 ; dunsparce swarm   ; $a0
-	engine_flag SwarmFlags, 3 ; yanma swarm
+INCLUDE "data/engine_flags.asm"
--- a/engine/events_2.asm
+++ b/engine/events_2.asm
@@ -254,18 +254,7 @@
 ; 97d87
 
 ContestMons: ; 97d87
-	;   %, species,   min, max
-	db 20, CATERPIE,    7, 18
-	db 20, WEEDLE,      7, 18
-	db 10, METAPOD,     9, 18
-	db 10, KAKUNA,      9, 18
-	db  5, BUTTERFREE, 12, 15
-	db  5, BEEDRILL,   12, 15
-	db 10, VENONAT,    10, 16
-	db 10, PARAS,      10, 17
-	db  5, SCYTHER,    13, 14
-	db  5, PINSIR,     13, 14
-	db -1, VENOMOTH,   30, 40
+INCLUDE "data/wild/bug_contest_mons.asm"
 ; 97db3
 
 DoBikeStep:: ; 97db3
--- a/engine/events_3.asm
+++ b/engine/events_3.asm
@@ -455,56 +455,8 @@
 	ret
 ; b825e
 
-TreeMonMaps: ; b825e
-treemon_map: macro
-	map \1
-	db  \2 ; treemon set
-endm
-	treemon_map ROUTE_26, 4
-	treemon_map ROUTE_27, 4
-	treemon_map ROUTE_28, 0
-	treemon_map ROUTE_29, 3
-	treemon_map ROUTE_30, 3
-	treemon_map ROUTE_31, 3
-	treemon_map ROUTE_32, 4
-	treemon_map ROUTE_33, 2
-	treemon_map ROUTE_34, 3
-	treemon_map ROUTE_35, 3
-	treemon_map ROUTE_36, 3
-	treemon_map ROUTE_37, 3
-	treemon_map ROUTE_38, 3
-	treemon_map ROUTE_39, 3
-	treemon_map ROUTE_40, 0
-	treemon_map ROUTE_41, 0
-	treemon_map ROUTE_42, 2
-	treemon_map ROUTE_43, 5
-	treemon_map ROUTE_44, 1
-	treemon_map ROUTE_45, 1
-	treemon_map ROUTE_46, 1
-	treemon_map NEW_BARK_TOWN, 0
-	treemon_map CHERRYGROVE_CITY, 0
-	treemon_map VIOLET_CITY, 0
-	treemon_map AZALEA_TOWN, 2
-	treemon_map CIANWOOD_CITY, 0
-	treemon_map GOLDENROD_CITY, 0
-	treemon_map OLIVINE_CITY, 0
-	treemon_map ECRUTEAK_CITY, 0
-	treemon_map MAHOGANY_TOWN, 0
-	treemon_map LAKE_OF_RAGE, 5
-	treemon_map BLACKTHORN_CITY, 0
-	treemon_map SILVER_CAVE_OUTSIDE, 0
-	treemon_map ILEX_FOREST, 6
-	db -1
-; b82c5
+INCLUDE "data/wild/treemon_maps.asm"
 
-RockMonMaps: ; b82c5
-	treemon_map CIANWOOD_CITY, 7
-	treemon_map ROUTE_40, 7
-	treemon_map DARK_CAVE_VIOLET_ENTRANCE, 7
-	treemon_map SLOWPOKE_WELL_B1F, 7
-	db -1
-; b82d2
-
 GetTreeMons: ; b82d2
 ; Return the address of TreeMon table a in hl.
 ; Return nc if table a doesn't exist.
@@ -533,128 +485,7 @@
 	ret
 ; b82e8
 
-TreeMons: ; b82e8
-	dw TreeMons1
-	dw TreeMons1
-	dw TreeMons2
-	dw TreeMons3
-	dw TreeMons4
-	dw TreeMons5
-	dw TreeMons6
-	dw RockMons
-	dw TreeMons1
-
-; Two tables each (normal, rare).
-; Structure:
-;	db  %, species, level
-
-TreeMons1: ; b82fa
-	db 50, SPEAROW,    10
-	db 15, SPEAROW,    10
-	db 15, SPEAROW,    10
-	db 10, AIPOM,      10
-	db  5, AIPOM,      10
-	db  5, AIPOM,      10
-	db -1
-
-	db 50, SPEAROW,    10
-	db 15, HERACROSS,  10
-	db 15, HERACROSS,  10
-	db 10, AIPOM,      10
-	db  5, AIPOM,      10
-	db  5, AIPOM,      10
-	db -1
-
-TreeMons2: ; b8320
-	db 50, SPEAROW,    10
-	db 15, EKANS,      10
-	db 15, SPEAROW,    10
-	db 10, AIPOM,      10
-	db  5, AIPOM,      10
-	db  5, AIPOM,      10
-	db -1
-
-	db 50, SPEAROW,    10
-	db 15, HERACROSS,  10
-	db 15, HERACROSS,  10
-	db 10, AIPOM,      10
-	db  5, AIPOM,      10
-	db  5, AIPOM,      10
-	db -1
-
-TreeMons3: ; b8346
-	db 50, HOOTHOOT,   10
-	db 15, SPINARAK,   10
-	db 15, LEDYBA,     10
-	db 10, EXEGGCUTE,  10
-	db  5, EXEGGCUTE,  10
-	db  5, EXEGGCUTE,  10
-	db -1
-
-	db 50, HOOTHOOT,   10
-	db 15, PINECO,     10
-	db 15, PINECO,     10
-	db 10, EXEGGCUTE,  10
-	db  5, EXEGGCUTE,  10
-	db  5, EXEGGCUTE,  10
-	db -1
-
-TreeMons4: ; b836c
-	db 50, HOOTHOOT,   10
-	db 15, EKANS,      10
-	db 15, HOOTHOOT,   10
-	db 10, EXEGGCUTE,  10
-	db  5, EXEGGCUTE,  10
-	db  5, EXEGGCUTE,  10
-	db -1
-
-	db 50, HOOTHOOT,   10
-	db 15, PINECO,     10
-	db 15, PINECO,     10
-	db 10, EXEGGCUTE,  10
-	db  5, EXEGGCUTE,  10
-	db  5, EXEGGCUTE,  10
-	db -1
-
-TreeMons5: ; b8392
-	db 50, HOOTHOOT,   10
-	db 15, VENONAT,    10
-	db 15, HOOTHOOT,   10
-	db 10, EXEGGCUTE,  10
-	db  5, EXEGGCUTE,  10
-	db  5, EXEGGCUTE,  10
-	db -1
-
-	db 50, HOOTHOOT,   10
-	db 15, PINECO,     10
-	db 15, PINECO,     10
-	db 10, EXEGGCUTE,  10
-	db  5, EXEGGCUTE,  10
-	db  5, EXEGGCUTE,  10
-	db -1
-
-TreeMons6: ; b83b8
-	db 50, HOOTHOOT,   10
-	db 15, PINECO,     10
-	db 15, PINECO,     10
-	db 10, NOCTOWL,    10
-	db  5, BUTTERFREE, 10
-	db  5, BEEDRILL,   10
-	db -1
-
-	db 50, HOOTHOOT,   10
-	db 15, CATERPIE,   10
-	db 15, WEEDLE,     10
-	db 10, HOOTHOOT,   10
-	db  5, METAPOD,    10
-	db  5, KAKUNA,     10
-	db -1
-
-RockMons: ; b83de
-	db 90, KRABBY,     15
-	db 10, SHUCKLE,    15
-	db -1
-; b83e5
+INCLUDE "data/wild/treemons.asm"
 
 GetTreeMon: ; b83e5
 	push hl
--- a/engine/facings.asm
+++ /dev/null
@@ -1,264 +1,0 @@
-Facings: ; 4049
-; entries correspond to FACING_* constants
-	dw FacingStepDown0
-	dw FacingStepDown1
-	dw FacingStepDown2
-	dw FacingStepDown3
-	dw FacingStepUp0
-	dw FacingStepUp1
-	dw FacingStepUp2
-	dw FacingStepUp3
-	dw FacingStepLeft0
-	dw FacingStepLeft1
-	dw FacingStepLeft2
-	dw FacingStepLeft3
-	dw FacingStepRight0
-	dw FacingStepRight1
-	dw FacingStepRight2
-	dw FacingStepRight3
-	dw FacingFishDown
-	dw FacingFishUp
-	dw FacingFishLeft
-	dw FacingFishRight
-	dw FacingEmote
-	dw FacingShadow
-	dw FacingBigDollAsymmetric
-	dw FacingBigDollSymmetric
-	dw FacingWeirdTree0
-	dw FacingWeirdTree1
-	dw FacingWeirdTree2
-	dw FacingWeirdTree3
-	dw FacingBoulderDust1
-	dw FacingBoulderDust2
-	dw FacingGrass1
-	dw FacingGrass2
-FacingsEnd:
-	dw 0
-
-NUM_FACINGS EQU (FacingsEnd - Facings) / 2
-
-
-; Tables used as a reference to transform OAM data.
-
-; Format:
-;	db y, x, attributes, tile index
-
-FacingStepDown0:
-FacingStepDown2:
-FacingWeirdTree0:
-FacingWeirdTree2: ; standing down
-	db 4 ; #
-	db  0,  0, 0, $00
-	db  0,  8, 0, $01
-	db  8,  0, 2, $02
-	db  8,  8, 2, $03
-; 409c
-
-FacingStepDown1: ; walking down 1
-	db 4 ; #
-	db  0,  0, 0, $80
-	db  0,  8, 0, $81
-	db  8,  0, 2, $82
-	db  8,  8, 2, $83
-; 40ad
-
-FacingStepDown3: ; walking down 2
-	db 4 ; #
-	db  0,  8, X_FLIP, $80
-	db  0,  0, X_FLIP, $81
-	db  8,  8, 2 | X_FLIP, $82
-	db  8,  0, 2 | X_FLIP, $83
-; 40be
-
-FacingStepUp0:
-FacingStepUp2: ; standing up
-	db 4 ; #
-	db  0,  0, 0, $04
-	db  0,  8, 0, $05
-	db  8,  0, 2, $06
-	db  8,  8, 2, $07
-; 40cf
-
-FacingStepUp1: ; walking up 1
-	db 4 ; #
-	db  0,  0, 0, $84
-	db  0,  8, 0, $85
-	db  8,  0, 2, $86
-	db  8,  8, 2, $87
-; 40e0
-
-FacingStepUp3: ; walking up 2
-	db 4 ; #
-	db  0,  8, X_FLIP, $84
-	db  0,  0, X_FLIP, $85
-	db  8,  8, 2 | X_FLIP, $86
-	db  8,  0, 2 | X_FLIP, $87
-; 40f1
-
-FacingStepLeft0:
-FacingStepLeft2: ; standing left
-	db 4 ; #
-	db  0,  0, 0, $08
-	db  0,  8, 0, $09
-	db  8,  0, 2, $0a
-	db  8,  8, 2, $0b
-; 4102
-
-FacingStepRight0:
-FacingStepRight2: ; standing right
-	db 4 ; #
-	db  0,  8, X_FLIP, $08
-	db  0,  0, X_FLIP, $09
-	db  8,  8, 2 | X_FLIP, $0a
-	db  8,  0, 2 | X_FLIP, $0b
-; 4113
-
-FacingStepLeft1:
-FacingStepLeft3: ; walking left
-	db 4 ; #
-	db  0,  0, 0, $88
-	db  0,  8, 0, $89
-	db  8,  0, 2, $8a
-	db  8,  8, 2, $8b
-; 4124
-
-FacingStepRight1:
-FacingStepRight3: ; walking right
-	db 4 ; #
-	db  0,  8, X_FLIP, $88
-	db  0,  0, X_FLIP, $89
-	db  8,  8, 2 | X_FLIP, $8a
-	db  8,  0, 2 | X_FLIP, $8b
-; 4135
-
-FacingFishDown: ; fishing down
-	db 5 ; #
-	db  0,  0, 0, $00
-	db  0,  8, 0, $01
-	db  8,  0, 2, $02
-	db  8,  8, 2, $03
-	db 16,  0, 4, $fc
-; 414a
-
-FacingFishUp: ; fishing up
-	db 5 ; #
-	db  0,  0, 0, $04
-	db  0,  8, 0, $05
-	db  8,  0, 2, $06
-	db  8,  8, 2, $07
-	db -8,  0, 4, $fc
-; 415f
-
-FacingFishLeft: ; fishing left
-	db 5 ; #
-	db  0,  0, 0, $08
-	db  0,  8, 0, $09
-	db  8,  0, 2, $0a
-	db  8,  8, 2, $0b
-	db  5, -8, 4 | X_FLIP, $fd
-; 4174
-
-FacingFishRight: ; fishing right
-	db 5 ; #
-	db  0,  8, X_FLIP, $08
-	db  0,  0, X_FLIP, $09
-	db  8,  8, 2 | X_FLIP, $0a
-	db  8,  0, 2 | X_FLIP, $0b
-	db  5, 16, 4, $fd
-; 4189
-
-FacingEmote: ; emote
-	db 4 ; #
-	db  0,  0, 4, $f8
-	db  0,  8, 4, $f9
-	db  8,  0, 4, $fa
-	db  8,  8, 4, $fb
-; 419a
-
-FacingShadow: ; shadow
-	db 2 ; #
-	db  0,  0, 4, $fc
-	db  0,  8, 4 | X_FLIP, $fc
-; 41a3
-
-FacingBigDollSymmetric: ; big snorlax or lapras doll
-	db 16 ; #
-	db  0,  0, 0, $00
-	db  0,  8, 0, $01
-	db  8,  0, 0, $02
-	db  8,  8, 0, $03
-	db 16,  0, 0, $04
-	db 16,  8, 0, $05
-	db 24,  0, 0, $06
-	db 24,  8, 0, $07
-	db  0, 24, X_FLIP, $00
-	db  0, 16, X_FLIP, $01
-	db  8, 24, X_FLIP, $02
-	db  8, 16, X_FLIP, $03
-	db 16, 24, X_FLIP, $04
-	db 16, 16, X_FLIP, $05
-	db 24, 24, X_FLIP, $06
-	db 24, 16, X_FLIP, $07
-; 41e4
-
-FacingWeirdTree1: ; 41e4
-	db 4 ; #
-	db  0,  0, 0, $04
-	db  0,  8, 0, $05
-	db  8,  0, 0, $06
-	db  8,  8, 0, $07
-; 41f5
-
-FacingWeirdTree3: ; 41f5
-	db 4 ; #
-	db  0,  8, X_FLIP, $04
-	db  0,  0, X_FLIP, $05
-	db  8,  8, X_FLIP, $06
-	db  8,  0, X_FLIP, $07
-; 4206
-
-FacingBigDollAsymmetric: ; big doll other than snorlax or lapras
-	db 14 ; #
-	db  0,  0, 0, $00
-	db  0,  8, 0, $01
-	db  8,  0, 0, $04
-	db  8,  8, 0, $05
-	db 16,  8, 0, $07
-	db 24,  8, 0, $0a
-	db  0, 24, 0, $03
-	db  0, 16, 0, $02
-	db  8, 24, X_FLIP, $02
-	db  8, 16, 0, $06
-	db 16, 24, 0, $09
-	db 16, 16, 0, $08
-	db 24, 24, X_FLIP, $04
-	db 24, 16, 0, $0b
-; 423f
-
-FacingBoulderDust1: ; boulder dust 1
-	db 4 ; #
-	db  0,  0, 4, $fe
-	db  0,  8, 4, $fe
-	db  8,  0, 4, $fe
-	db  8,  8, 4, $fe
-; 4250
-
-FacingBoulderDust2: ; boulder dust 2
-	db 4 ; #
-	db  0,  0, 4, $ff
-	db  0,  8, 4, $ff
-	db  8,  0, 4, $ff
-	db  8,  8, 4, $ff
-; 4261
-
-FacingGrass1: ; 4261
-	db 2 ; #
-	db  8,  0, 4, $fe
-	db  8,  8, 4 | X_FLIP, $fe
-; 426a
-
-FacingGrass2: ; 426a
-	db 2 ; #
-	db  9, -1, 4, $fe
-	db  9,  9, 4 | X_FLIP, $fe
-; 4273
--- a/engine/fruit_trees.asm
+++ b/engine/fruit_trees.asm
@@ -103,36 +103,7 @@
 ; 44097
 
 FruitTreeItems: ; 44097
-	db BERRY
-	db BERRY
-	db BERRY
-	db BERRY
-	db PSNCUREBERRY
-	db PSNCUREBERRY
-	db BITTER_BERRY
-	db BITTER_BERRY
-	db PRZCUREBERRY
-	db PRZCUREBERRY
-	db MYSTERYBERRY
-	db MYSTERYBERRY
-	db ICE_BERRY
-	db ICE_BERRY
-	db MINT_BERRY
-	db BURNT_BERRY
-	db RED_APRICORN
-	db BLU_APRICORN
-	db BLK_APRICORN
-	db WHT_APRICORN
-	db PNK_APRICORN
-	db GRN_APRICORN
-	db YLW_APRICORN
-	db BERRY
-	db PSNCUREBERRY
-	db BITTER_BERRY
-	db PRZCUREBERRY
-	db ICE_BERRY
-	db MINT_BERRY
-	db BURNT_BERRY
+INCLUDE "data/fruit_tree_items.asm"
 ; 440b5
 
 FruitBearingTreeText: ; 440b5
--- a/engine/intro_menu.asm
+++ b/engine/intro_menu.asm
@@ -199,8 +199,6 @@
 	ld [Coins], a
 	ld [Coins + 1], a
 
-START_MONEY EQU 3000
-
 IF START_MONEY / $10000
 	ld a, START_MONEY / $10000
 ENDC
@@ -214,11 +212,11 @@
 	ld [wWhichMomItem], a
 
 	ld hl, MomItemTriggerBalance
-	ld [hl], 2300 / $10000
+	ld [hl], MOM_MONEY / $10000
 	inc hl
-	ld [hl], 2300 / $100 % $100
+	ld [hl], MOM_MONEY / $100 % $100
 	inc hl
-	ld [hl], 2300 % $100
+	ld [hl], MOM_MONEY % $100
 
 	call InitializeNPCNames
 
--- a/engine/landmarks.asm
+++ b/engine/landmarks.asm
@@ -48,212 +48,7 @@
 
 
 Landmarks: ; 0x1ca8c3
-
-landmark: MACRO
-	db \1, \2
-	dw \3
-ENDM
-
-	landmark   0,   0, SpecialMapName
-	landmark 148, 116, NewBarkTownName
-	landmark 136, 116, Route29Name
-	landmark 108, 116, CherrygroveCityName
-	landmark 108,  96, Route30Name
-	landmark 104,  76, Route31Name
-	landmark  92,  76, VioletCityName
-	landmark  93,  74, SproutTowerName
-	landmark  92, 108, Route32Name
-	landmark  84,  92, RuinsOfAlphName
-	landmark  92, 140, UnionCaveName
-	landmark  90, 140, Route33Name
-	landmark  76, 140, AzaleaTownName
-	landmark  78, 138, SlowpokeWellName
-	landmark  60, 136, IlexForestName
-	landmark  60, 128, Route34Name
-	landmark  60, 108, GoldenrodCityName
-	landmark  58, 108, RadioTowerName
-	landmark  60,  92, Route35Name
-	landmark  60,  76, NationalParkName
-	landmark  72,  76, Route36Name
-	landmark  76,  68, Route37Name
-	landmark  76,  60, EcruteakCityName
-	landmark  78,  58, TinTowerName
-	landmark  74,  58, BurnedTowerName
-	landmark  60,  60, Route38Name
-	landmark  44,  64, Route39Name
-	landmark  44,  76, OlivineCityName
-	landmark  46,  78, LighthouseName
-	landmark  36,  72, BattleTowerName
-	landmark  36,  80, Route40Name
-	landmark  36, 108, WhirlIslandsName
-	landmark  36, 116, Route41Name
-	landmark  28, 116, CianwoodCityName
-	landmark 100,  60, Route42Name
-	landmark  92,  60, MtMortarName
-	landmark 116,  60, MahoganyTownName
-	landmark 116,  52, Route43Name
-	landmark 116,  44, LakeOfRageName
-	landmark 128,  60, Route44Name
-	landmark 138,  54, IcePathName
-	landmark 140,  60, BlackthornCityName
-	landmark 140,  52, DragonsDenName
-	landmark 140,  80, Route45Name
-	landmark 120,  88, DarkCaveName
-	landmark 132, 104, Route46Name
-	landmark 156,  84, SilverCaveName
-	landmark  60, 124, PalletTownName
-	landmark  60, 108, Route1Name
-	landmark  60,  92, ViridianCityName
-	landmark  60,  80, Route2Name
-	landmark  60,  68, PewterCityName
-	landmark  72,  68, Route3Name
-	landmark  84,  68, MtMoonName
-	landmark  96,  68, Route4Name
-	landmark 108,  68, CeruleanCityName
-	landmark 108,  60, Route24Name
-	landmark 116,  52, Route25Name
-	landmark 108,  76, Route5Name
-	landmark 116,  92, UndergroundName
-	landmark 108,  92, Route6Name
-	landmark 108, 100, VermilionCityName
-	landmark  96,  76, DiglettsCaveName
-	landmark  96,  84, Route7Name
-	landmark 124,  84, Route8Name
-	landmark 124,  68, Route9Name
-	landmark 140,  68, RockTunnelName
-	landmark 140,  72, Route10Name
-	landmark 140,  76, PowerPlantName
-	landmark 140,  84, LavenderTownName
-	landmark 148,  84, LavRadioTowerName
-	landmark  84,  84, CeladonCityName
-	landmark 108,  84, SaffronCityName
-	landmark 124, 100, Route11Name
-	landmark 140,  96, Route12Name
-	landmark 132, 116, Route13Name
-	landmark 124, 128, Route14Name
-	landmark 112, 132, Route15Name
-	landmark  76,  84, Route16Name
-	landmark  76, 108, Route17Name
-	landmark  88, 132, Route18Name
-	landmark 100, 132, FuchsiaCityName
-	landmark 100, 144, Route19Name
-	landmark  84, 148, Route20Name
-	landmark  76, 148, SeafoamIslandsName
-	landmark  60, 148, CinnabarIslandName
-	landmark  60, 136, Route21Name
-	landmark  44,  84, Route22Name
-	landmark  36,  68, VictoryRoadName
-	landmark  36,  60, Route23Name
-	landmark  36,  52, IndigoPlateauName
-	landmark  36, 108, Route26Name
-	landmark  28, 116, Route27Name
-	landmark  20, 116, TohjoFallsName
-	landmark  28,  84, Route28Name
-	landmark 148, 132, FastShipName
-
-
-NewBarkTownName:     db "NEW BARK¯TOWN@"
-CherrygroveCityName: db "CHERRYGROVE¯CITY@"
-VioletCityName:      db "VIOLET CITY@"
-AzaleaTownName:      db "AZALEA TOWN@"
-GoldenrodCityName:   db "GOLDENROD¯CITY@"
-EcruteakCityName:    db "ECRUTEAK¯CITY@"
-OlivineCityName:     db "OLIVINE¯CITY@"
-CianwoodCityName:    db "CIANWOOD¯CITY@"
-MahoganyTownName:    db "MAHOGANY¯TOWN@"
-BlackthornCityName:  db "BLACKTHORN¯CITY@"
-LakeOfRageName:      db "LAKE OF¯RAGE@"
-SilverCaveName:      db "SILVER CAVE@"
-SproutTowerName:     db "SPROUT¯TOWER@"
-RuinsOfAlphName:     db "RUINS¯OF ALPH@"
-UnionCaveName:       db "UNION CAVE@"
-SlowpokeWellName:    db "SLOWPOKE¯WELL@"
-RadioTowerName:      db "RADIO TOWER@"
-PowerPlantName:      db "POWER PLANT@"
-NationalParkName:    db "NATIONAL¯PARK@"
-TinTowerName:        db "TIN TOWER@"
-LighthouseName:      db "LIGHTHOUSE@"
-WhirlIslandsName:    db "WHIRL¯ISLANDS@"
-MtMortarName:        db "MT.MORTAR@"
-DragonsDenName:      db "DRAGON'S¯DEN@"
-IcePathName:         db "ICE PATH@"
-NotApplicableName:   db "N/A@"
-PalletTownName:      db "PALLET TOWN@"
-ViridianCityName:    db "VIRIDIAN¯CITY@"
-PewterCityName:      db "PEWTER CITY@"
-CeruleanCityName:    db "CERULEAN¯CITY@"
-LavenderTownName:    db "LAVENDER¯TOWN@"
-VermilionCityName:   db "VERMILION¯CITY@"
-CeladonCityName:     db "CELADON¯CITY@"
-SaffronCityName:     db "SAFFRON¯CITY@"
-FuchsiaCityName:     db "FUCHSIA¯CITY@"
-CinnabarIslandName:  db "CINNABAR¯ISLAND@"
-IndigoPlateauName:   db "INDIGO¯PLATEAU@"
-VictoryRoadName:     db "VICTORY¯ROAD@"
-MtMoonName:          db "MT.MOON@"
-RockTunnelName:      db "ROCK TUNNEL@"
-LavRadioTowerName:   db "LAV¯RADIO TOWER@"
-SilphCoName:         db "SILPH CO.@"
-SafariZoneName:      db "SAFARI ZONE@"
-SeafoamIslandsName:  db "SEAFOAM¯ISLANDS@"
-PokemonMansionName:  db "#MON¯MANSION@"
-CeruleanCaveName:    db "CERULEAN¯CAVE@"
-Route1Name:          db "ROUTE 1@"
-Route2Name:          db "ROUTE 2@"
-Route3Name:          db "ROUTE 3@"
-Route4Name:          db "ROUTE 4@"
-Route5Name:          db "ROUTE 5@"
-Route6Name:          db "ROUTE 6@"
-Route7Name:          db "ROUTE 7@"
-Route8Name:          db "ROUTE 8@"
-Route9Name:          db "ROUTE 9@"
-Route10Name:         db "ROUTE 10@"
-Route11Name:         db "ROUTE 11@"
-Route12Name:         db "ROUTE 12@"
-Route13Name:         db "ROUTE 13@"
-Route14Name:         db "ROUTE 14@"
-Route15Name:         db "ROUTE 15@"
-Route16Name:         db "ROUTE 16@"
-Route17Name:         db "ROUTE 17@"
-Route18Name:         db "ROUTE 18@"
-Route19Name:         db "ROUTE 19@"
-Route20Name:         db "ROUTE 20@"
-Route21Name:         db "ROUTE 21@"
-Route22Name:         db "ROUTE 22@"
-Route23Name:         db "ROUTE 23@"
-Route24Name:         db "ROUTE 24@"
-Route25Name:         db "ROUTE 25@"
-Route26Name:         db "ROUTE 26@"
-Route27Name:         db "ROUTE 27@"
-Route28Name:         db "ROUTE 28@"
-Route29Name:         db "ROUTE 29@"
-Route30Name:         db "ROUTE 30@"
-Route31Name:         db "ROUTE 31@"
-Route32Name:         db "ROUTE 32@"
-Route33Name:         db "ROUTE 33@"
-Route34Name:         db "ROUTE 34@"
-Route35Name:         db "ROUTE 35@"
-Route36Name:         db "ROUTE 36@"
-Route37Name:         db "ROUTE 37@"
-Route38Name:         db "ROUTE 38@"
-Route39Name:         db "ROUTE 39@"
-Route40Name:         db "ROUTE 40@"
-Route41Name:         db "ROUTE 41@"
-Route42Name:         db "ROUTE 42@"
-Route43Name:         db "ROUTE 43@"
-Route44Name:         db "ROUTE 44@"
-Route45Name:         db "ROUTE 45@"
-Route46Name:         db "ROUTE 46@"
-DarkCaveName:        db "DARK CAVE@"
-IlexForestName:      db "ILEX¯FOREST@"
-BurnedTowerName:     db "BURNED¯TOWER@"
-FastShipName:        db "FAST SHIP@"
-ViridianForestName:  db "VIRIDIAN¯FOREST@"
-DiglettsCaveName:    db "DIGLETT'S¯CAVE@"
-TohjoFallsName:      db "TOHJO FALLS@"
-UndergroundName:     db "UNDERGROUND@"
-BattleTowerName:     db "BATTLE¯TOWER@"
-SpecialMapName:      db "SPECIAL@"
+INCLUDE "data/landmarks.asm"
 
 
 RegionCheck: ; 0x1caea1
--- a/engine/map_objects.asm
+++ b/engine/map_objects.asm
@@ -1,5 +1,5 @@
 
-INCLUDE "engine/facings.asm"
+INCLUDE "data/facings.asm"
 
 SpriteMovementData:: ; 4273
 INCLUDE "data/map_objects.asm"
--- a/engine/map_triggers.asm
+++ /dev/null
@@ -1,91 +1,0 @@
-MapTriggers:: ; 4d01e
-; Map triggers
-
-trigger_def: MACRO
-; db group, map
-; dw address
-	map \1
-	dw \2
-ENDM
-
-	trigger_def POKECENTER_2F,                          wPokecenter2FTrigger
-	trigger_def TRADE_CENTER,                           wTradeCenterTrigger
-	trigger_def COLOSSEUM,                              wColosseumTrigger
-	trigger_def TIME_CAPSULE,                           wTimeCapsuleTrigger
-	trigger_def POWER_PLANT,                            wPowerPlantTrigger
-	trigger_def CERULEAN_GYM,                           wCeruleanGymTrigger
-	trigger_def ROUTE_25,                               wRoute25Trigger
-	trigger_def TRAINER_HOUSE_B1F,                      wTrainerHouseB1FTrigger
-	trigger_def VICTORY_ROAD_GATE,                      wVictoryRoadGateTrigger
-	trigger_def SAFFRON_TRAIN_STATION,                  wSaffronTrainStationTrigger
-	trigger_def ROUTE_16_GATE,                          wRoute16GateTrigger
-	trigger_def ROUTE_17_18_GATE,                       wRoute1718GateTrigger
-	trigger_def INDIGO_PLATEAU_POKECENTER_1F,           wIndigoPlateauPokecenter1FTrigger
-	trigger_def WILLS_ROOM,                             wWillsRoomTrigger
-	trigger_def KOGAS_ROOM,                             wKogasRoomTrigger
-	trigger_def BRUNOS_ROOM,                            wBrunosRoomTrigger
-	trigger_def KARENS_ROOM,                            wKarensRoomTrigger
-	trigger_def LANCES_ROOM,                            wLancesRoomTrigger
-	trigger_def HALL_OF_FAME,                           wHallOfFameTrigger
-	trigger_def ROUTE_27,                               wRoute27Trigger
-	trigger_def NEW_BARK_TOWN,                          wNewBarkTownTrigger
-	trigger_def ELMS_LAB,                               wElmsLabTrigger
-	trigger_def KRISS_HOUSE_1F,                         wKrissHouse1FTrigger
-	trigger_def ROUTE_29,                               wRoute29Trigger
-	trigger_def CHERRYGROVE_CITY,                       wCherrygroveCityTrigger
-	trigger_def MR_POKEMONS_HOUSE,                      wMrPokemonsHouseTrigger
-	trigger_def ROUTE_32,                               wRoute32Trigger
-	trigger_def ROUTE_35_NATIONAL_PARK_GATE,            wRoute35NationalParkGateTrigger
-	trigger_def ROUTE_36,                               wRoute36Trigger
-	trigger_def ROUTE_36_NATIONAL_PARK_GATE,            wRoute36NationalParkGateTrigger
-	trigger_def AZALEA_TOWN,                            wAzaleaTownTrigger
-	trigger_def GOLDENROD_GYM,                          wGoldenrodGymTrigger
-	trigger_def GOLDENROD_MAGNET_TRAIN_STATION,         wGoldenrodMagnetTrainStationTrigger
-	trigger_def GOLDENROD_POKECENTER_1F,                wGoldenrodPokecenter1FTrigger
-	trigger_def OLIVINE_CITY,                           wOlivineCityTrigger
-	trigger_def ROUTE_34,                               wRoute34Trigger
-	trigger_def ROUTE_34_ILEX_FOREST_GATE,              wRoute34IlexForestGateTrigger
-	trigger_def ECRUTEAK_HOUSE,                         wEcruteakHouseTrigger
-	trigger_def WISE_TRIOS_ROOM,                        wWiseTriosRoomTrigger
-	trigger_def ECRUTEAK_POKECENTER_1F,                 wEcruteakPokecenter1FTrigger
-	trigger_def ECRUTEAK_GYM,                           wEcruteakGymTrigger
-	trigger_def MAHOGANY_TOWN,                          wMahoganyTownTrigger
-	trigger_def ROUTE_42,                               wRoute42Trigger
-	trigger_def CIANWOOD_CITY,                          wCianwoodCityTrigger
-	trigger_def BATTLE_TOWER_1F,                        wBattleTower1FTrigger
-	trigger_def BATTLE_TOWER_BATTLE_ROOM,               wBattleTowerBattleRoomTrigger
-	trigger_def BATTLE_TOWER_ELEVATOR,                  wBattleTowerElevatorTrigger
-	trigger_def BATTLE_TOWER_HALLWAY,                   wBattleTowerHallwayTrigger
-	trigger_def BATTLE_TOWER_OUTSIDE,                   wBattleTowerOutsideTrigger
-	trigger_def ROUTE_43_GATE,                          wRoute43GateTrigger
-	trigger_def MOUNT_MOON,                             wMountMoonTrigger
-	trigger_def SPROUT_TOWER_3F,                        wSproutTower3FTrigger
-	trigger_def TIN_TOWER_1F,                           wTinTower1FTrigger
-	trigger_def BURNED_TOWER_1F,                        wBurnedTower1FTrigger
-	trigger_def BURNED_TOWER_B1F,                       wBurnedTowerB1FTrigger
-	trigger_def RADIO_TOWER_5F,                         wRadioTower5FTrigger
-	trigger_def RUINS_OF_ALPH_OUTSIDE,                  wRuinsOfAlphOutsideTrigger
-	trigger_def RUINS_OF_ALPH_RESEARCH_CENTER,          wRuinsOfAlphResearchCenterTrigger
-	trigger_def RUINS_OF_ALPH_HO_OH_CHAMBER,            wRuinsOfAlphHoOhChamberTrigger
-	trigger_def RUINS_OF_ALPH_KABUTO_CHAMBER,           wRuinsOfAlphKabutoChamberTrigger
-	trigger_def RUINS_OF_ALPH_OMANYTE_CHAMBER,          wRuinsOfAlphOmanyteChamberTrigger
-	trigger_def RUINS_OF_ALPH_AERODACTYL_CHAMBER,       wRuinsOfAlphAerodactylChamberTrigger
-	trigger_def RUINS_OF_ALPH_INNER_CHAMBER,            wRuinsOfAlphInnerChamberTrigger
-	trigger_def MAHOGANY_MART_1F,                       wMahoganyMart1FTrigger
-	trigger_def TEAM_ROCKET_BASE_B1F,                   wTeamRocketBaseB1FTrigger
-	trigger_def TEAM_ROCKET_BASE_B2F,                   wTeamRocketBaseB2FTrigger
-	trigger_def TEAM_ROCKET_BASE_B3F,                   wTeamRocketBaseB3FTrigger
-	trigger_def UNDERGROUND_PATH_SWITCH_ROOM_ENTRANCES, wUndergroundPathSwitchRoomEntrancesTrigger
-	trigger_def SILVER_CAVE_ROOM_3,                     wSilverCaveRoom3Trigger
-	trigger_def VICTORY_ROAD,                           wVictoryRoadTrigger
-	trigger_def DRAGONS_DEN_B1F,                        wDragonsDenB1FTrigger
-	trigger_def DRAGON_SHRINE,                          wDragonShrineTrigger
-	trigger_def OLIVINE_PORT,                           wOlivinePortTrigger
-	trigger_def VERMILION_PORT,                         wVermilionPortTrigger
-	trigger_def FAST_SHIP_1F,                           wFastShip1FTrigger
-	trigger_def FAST_SHIP_B1F,                          wFastShipB1FTrigger
-	trigger_def MOUNT_MOON_SQUARE,                      wMountMoonSquareTrigger
-	trigger_def MOBILE_TRADE_ROOM_MOBILE,               wMobileTradeRoomMobileTrigger
-	trigger_def MOBILE_BATTLE_ROOM,                     wMobileBattleRoomTrigger
-	db -1
-; 4d15b
--- a/engine/mon_icons.asm
+++ b/engine/mon_icons.asm
@@ -450,4 +450,27 @@
 	jr nz, .loop
 	ret
 
-INCLUDE "menu/mon_icons.asm"
+ReadMonMenuIcon: ; 8eab3
+	cp EGG
+	jr z, .egg
+	dec a
+	ld hl, MonMenuIcons
+	ld e, a
+	ld d, 0
+	add hl, de
+	ld a, [hl]
+	ret
+.egg
+	ld a, ICON_EGG
+	ret
+; 8eac4
+
+MonMenuIcons: ; 8eac4
+INCLUDE "data/mon_menu_icons.asm"
+
+
+INCLUDE "gfx/icon_pointers.asm"
+
+Icons:
+INCLUDE "gfx/icons.asm"
+
--- a/engine/mysterygift2.asm
+++ b/engine/mysterygift2.asm
@@ -123,7 +123,7 @@
 
 MysteryGiftGetItemHeldEffect: ; 2c708 (b:4708)
 	ld a, c
-	cp $25 ; 37
+	cp MysteryGiftItemsEnd - MysteryGiftItems
 	jr nc, MysteryGiftFallbackItem
 	ld hl, MysteryGiftItems
 	ld b, 0
@@ -133,7 +133,7 @@
 
 MysteryGiftGetDecoration: ; 2c715 (b:4715)
 	ld a, c
-	cp $25 ; 37
+	cp MysteryGiftDecosEnd - MysteryGiftDecos
 	jr nc, MysteryGiftFallbackItem
 	ld hl, MysteryGiftDecos
 	ld b, 0
@@ -147,81 +147,11 @@
 ; 2c725 (b:4725)
 
 MysteryGiftItems: ; 2c725
-	db BERRY
-	db PRZCUREBERRY
-	db MINT_BERRY
-	db ICE_BERRY
-	db BURNT_BERRY
-	db PSNCUREBERRY
-	db GUARD_SPEC
-	db X_DEFEND
-	db X_ATTACK
-	db BITTER_BERRY
-	db DIRE_HIT
-	db X_SPECIAL
-	db X_ACCURACY
-	db EON_MAIL
-	db MORPH_MAIL
-	db MUSIC_MAIL
-	db MIRACLEBERRY
-	db GOLD_BERRY
-	db REVIVE
-	db GREAT_BALL
-	db SUPER_REPEL
-	db MAX_REPEL
-	db ELIXER
-	db ETHER
-	db WATER_STONE
-	db FIRE_STONE
-	db LEAF_STONE
-	db THUNDERSTONE
-	db MAX_ETHER
-	db MAX_ELIXER
-	db MAX_REVIVE
-	db SCOPE_LENS
-	db HP_UP
-	db PP_UP
-	db RARE_CANDY
-	db BLUESKY_MAIL
-	db MIRAGE_MAIL
+INCLUDE "data/mystery_gift/items.asm"
+MysteryGiftItemsEnd
 ; 2c74a
 
 MysteryGiftDecos: ; 2c74a
-	db DECOFLAG_PIKACHU_DOLL
-	db DECOFLAG_BULBASAUR_DOLL
-	db DECOFLAG_CHARMANDER_DOLL
-	db DECOFLAG_SQUIRTLE_DOLL
-	db DECOFLAG_POLIWAG_DOLL
-	db DECOFLAG_DIGLETT_DOLL
-	db DECOFLAG_STARMIE_DOLL
-	db DECOFLAG_MAGIKARP_DOLL
-	db DECOFLAG_ODDISH_DOLL
-	db DECOFLAG_GENGAR_DOLL
-	db DECOFLAG_CLEFAIRY_POSTER
-	db DECOFLAG_JIGGLYPUFF_POSTER
-	db DECOFLAG_SNES
-	db DECOFLAG_SHELLDER_DOLL
-	db DECOFLAG_VOLTORB_DOLL
-	db DECOFLAG_WEEDLE_DOLL
-	db DECOFLAG_MAGNAPLANT
-	db DECOFLAG_TROPICPLANT
-	db DECOFLAG_FAMICOM
-	db DECOFLAG_N64
-	db DECOFLAG_SURF_PIKACHU_DOLL
-	db DECOFLAG_JIGGLYPUFF_DOLL
-	db DECOFLAG_PINK_BED
-	db DECOFLAG_POLKADOT_BED
-	db DECOFLAG_RED_CARPET
-	db DECOFLAG_BLUE_CARPET
-	db DECOFLAG_YELLOW_CARPET
-	db DECOFLAG_GREEN_CARPET
-	db DECOFLAG_JUMBOPLANT
-	db DECOFLAG_VIRTUAL_BOY
-	db DECOFLAG_MACHOP_DOLL
-	db DECOFLAG_PIKACHU_POSTER
-	db DECOFLAG_TENTACOOL_DOLL
-	db DECOFLAG_BIG_ONIX_DOLL
-	db DECOFLAG_PIKACHU_BED
-	db DECOFLAG_GRIMER_DOLL
-	db DECOFLAG_UNOWN_DOLL
+INCLUDE "data/mystery_gift/decos.asm"
+MysteryGiftDecosEnd
 ; 2c76f
--- a/engine/npctrade.asm
+++ b/engine/npctrade.asm
@@ -1,27 +1,11 @@
-
-; Trade struct
-TRADE_DIALOG  EQU 0
-TRADE_GIVEMON EQU 1
-TRADE_GETMON  EQU 2
-TRADE_NICK    EQU 3
-TRADE_DVS     EQU 14
-TRADE_ITEM    EQU 16
-TRADE_OT_ID   EQU 17
-TRADE_OT_NAME EQU 19
-TRADE_GENDER  EQU 30
-TRADE_PADDING EQU 31
-
 ; Trade dialogs
-TRADE_INTRO    EQU 0
-TRADE_CANCEL   EQU 1
-TRADE_WRONG    EQU 2
-TRADE_COMPLETE EQU 3
-TRADE_AFTER    EQU 4
+	const_def
+	const TRADE_INTRO
+	const TRADE_CANCEL
+	const TRADE_WRONG
+	const TRADE_COMPLETE
+	const TRADE_AFTER
 
-TRADE_EITHER_GENDER EQU 0
-TRADE_MALE_ONLY EQU 1
-TRADE_FEMALE_ONLY EQU 2
-
 NPCTrade:: ; fcba8
 	ld a, e
 	ld [wJumptableIndex], a
@@ -428,23 +412,7 @@
 
 
 NPCTrades: ; fce58
-npctrade: MACRO
-	db \1, \2, \3, \4 ; dialog set, requested mon, offered mon, nickname
-	db \5, \6 ; dvs
-	shift
-	db \6 ; item
-	dw \7 ; OT ID
-	db \8, \9, 0 ; OT name, gender requested
-ENDM
-
-
-	npctrade 0, ABRA,       MACHOP,     "MUSCLE@@@@@", $37, $66, GOLD_BERRY,   37460, "MIKE@@@@@@@", TRADE_EITHER_GENDER
-	npctrade 0, BELLSPROUT, ONIX,       "ROCKY@@@@@@", $96, $66, BITTER_BERRY, 48926, "KYLE@@@@@@@", TRADE_EITHER_GENDER
-	npctrade 1, KRABBY,     VOLTORB,    "VOLTY@@@@@@", $98, $88, PRZCUREBERRY, 29189, "TIM@@@@@@@@", TRADE_EITHER_GENDER
-	npctrade 3, DRAGONAIR,  DODRIO,     "DORIS@@@@@@", $77, $66, SMOKE_BALL,   00283, "EMY@@@@@@@@", TRADE_FEMALE_ONLY
-	npctrade 2, HAUNTER,    XATU,       "PAUL@@@@@@@", $96, $86, MYSTERYBERRY, 15616, "CHRIS@@@@@@", TRADE_EITHER_GENDER
-	npctrade 3, CHANSEY,    AERODACTYL, "AEROY@@@@@@", $96, $66, GOLD_BERRY,   26491, "KIM@@@@@@@@", TRADE_EITHER_GENDER
-	npctrade 0, DUGTRIO,    MAGNETON,   "MAGGIE@@@@@", $96, $66, METAL_COAT,   50082, "FOREST@@@@@", TRADE_EITHER_GENDER
+INCLUDE "data/npc_trades.asm"
 ; fcf38
 
 
--- /dev/null
+++ b/engine/odd_eggs.asm
@@ -1,0 +1,96 @@
+GiveOddEgg: ; 1fb4b6
+	; Figure out which egg to give.
+
+	; Compare a random word to
+	; probabilities out of 0xffff.
+	call Random
+	ld hl, OddEggProbabilities
+	ld c, 0
+	ld b, c
+.loop
+	ld a, [hli]
+	ld e, a
+	ld a, [hli]
+	ld d, a
+
+	; Break on $ffff.
+	ld a, d
+	cp $ffff / $100
+	jr nz, .not_done
+	ld a, e
+	cp $ffff % $100
+	jr z, .done
+.not_done
+
+	; Break when [hRandom] <= de.
+	ld a, [hRandom + 1]
+	cp d
+	jr c, .done
+	jr z, .ok
+	jr .next
+.ok
+	ld a, [hRandom + 0]
+	cp e
+	jr c, .done
+	jr z, .done
+.next
+	inc bc
+	jr .loop
+.done
+
+	ld hl, OddEggs
+	ld a, OddEgg2 - OddEgg1
+	call AddNTimes
+
+	ld de, OddEggSpecies
+	ld bc, PARTYMON_STRUCT_LENGTH + 2 * PKMN_NAME_LENGTH
+	call CopyBytes
+
+	ld a, EGG_TICKET
+	ld [CurItem], a
+	ld a, 1
+	ld [wItemQuantityChangeBuffer], a
+	ld a, -1
+	ld [CurItemQuantity], a
+	ld hl, NumItems
+	call TossItem
+
+	; load species in wcd2a
+	ld a, EGG
+	ld [wMobileMonSpeciesBuffer], a
+
+	; load pointer to (wMobileMonSpeciesBuffer - 1) in wMobileMonSpeciesPointerBuffer
+	ld a, (wMobileMonSpeciesBuffer - 1) % $100
+	ld [wMobileMonSpeciesPointerBuffer], a
+	ld a, (wMobileMonSpeciesBuffer - 1) / $100
+	ld [wMobileMonSpeciesPointerBuffer + 1], a
+	; load pointer to OddEggSpecies in wMobileMonStructurePointerBuffer
+	ld a, OddEggSpecies % $100
+	ld [wMobileMonStructurePointerBuffer], a
+	ld a, OddEggSpecies / $100
+	ld [wMobileMonStructurePointerBuffer + 1], a
+
+	; load Odd Egg Name in wTempOddEggNickname
+	ld hl, .Odd
+	ld de, wTempOddEggNickname
+	ld bc, PKMN_NAME_LENGTH
+	call CopyBytes
+
+	; load pointer to wTempOddEggNickname in wMobileMonOTNamePointerBuffer
+	ld a, wTempOddEggNickname % $100
+	ld [wMobileMonOTNamePointerBuffer], a
+	ld a, wTempOddEggNickname / $100
+	ld [wMobileMonOTNamePointerBuffer + 1], a
+	; load pointer to wOddEggName in wMobileMonNicknamePointerBuffer
+	ld a, wOddEggName % $100
+	ld [wMobileMonNicknamePointerBuffer], a
+	ld a, wOddEggName / $100
+	ld [wMobileMonNicknamePointerBuffer + 1], a
+	callba AddMobileMonToParty
+	ret
+; 1fb546
+
+.Odd:
+	db "ODD@@@@@@@@@"
+
+INCLUDE "data/odd_eggs.asm"
--- a/engine/options_menu.asm
+++ b/engine/options_menu.asm
@@ -105,6 +105,11 @@
 ; e42f5
 
 
+	const_def
+	const TEXT_SPEED_FAST ; 0
+	const TEXT_SPEED_MED  ; 1
+	const TEXT_SPEED_SLOW ; 2
+
 Options_TextSpeed: ; e42f5
 	call GetTextSpeed
 	ld a, [hJoyPressed]
@@ -113,9 +118,9 @@
 	bit D_RIGHT_F, a
 	jr z, .NonePressed
 	ld a, c ; right pressed
-	cp SLOW_TEXT
+	cp TEXT_SPEED_SLOW
 	jr c, .Increase
-	ld c, FAST_TEXT +- 1
+	ld c, TEXT_SPEED_FAST +- 1
 
 .Increase:
 	inc c
@@ -126,7 +131,7 @@
 	ld a, c
 	and a
 	jr nz, .Decrease
-	ld c, SLOW_TEXT + 1
+	ld c, TEXT_SPEED_SLOW + 1
 
 .Decrease:
 	dec c
@@ -154,38 +159,39 @@
 ; e4331
 
 .Strings:
+; entries correspond to TEXT_SPEED_* constants
 	dw .Fast
 	dw .Mid
 	dw .Slow
 
-.Fast:
-	db "FAST@"
-.Mid:
-	db "MID @"
-.Slow:
-	db "SLOW@"
+.Fast: db "FAST@"
+.Mid:  db "MID @"
+.Slow: db "SLOW@"
 ; e4346
 
 
 GetTextSpeed: ; e4346
-	ld a, [Options] ; This converts the number of frames, to 0, 1, 2 representing speed
-	and 7
-	cp 5 ; 5 frames of delay is slow
+; converts TEXT_DELAY_* value in a to TEXT_SPEED_* value in c,
+; with previous/next TEXT_DELAY_* values in d/e
+	ld a, [Options]
+	and $7
+	cp TEXT_DELAY_SLOW
 	jr z, .slow
-	cp 1 ; 1 frame of delay is fast
+	cp TEXT_DELAY_FAST
 	jr z, .fast
-	ld c, MED_TEXT ; set it to mid if not one of the above
-	lb de, 1, 5
+	; none of the above
+	ld c, TEXT_SPEED_MED
+	lb de, TEXT_DELAY_FAST, TEXT_DELAY_SLOW
 	ret
 
 .slow
-	ld c, SLOW_TEXT
-	lb de, 3, 1
+	ld c, TEXT_SPEED_SLOW
+	lb de, TEXT_DELAY_MED, TEXT_DELAY_FAST
 	ret
 
 .fast
-	ld c, FAST_TEXT
-	lb de, 5, 3
+	ld c, TEXT_SPEED_FAST
+	lb de, TEXT_DELAY_SLOW, TEXT_DELAY_MED
 	ret
 ; e4365
 
@@ -227,10 +233,8 @@
 	ret
 ; e4398
 
-.On:
-	db "ON @"
-.Off:
-	db "OFF@"
+.On:  db "ON @"
+.Off: db "OFF@"
 ; e43a0
 
 
@@ -270,10 +274,8 @@
 	ret
 ; e43d1
 
-.Shift:
-	db "SHIFT@"
-.Set:
-	db "SET  @"
+.Shift: db "SHIFT@"
+.Set:   db "SET  @"
 ; e43dd
 
 
@@ -320,13 +322,18 @@
 	ret
 ; e4416
 
-.Mono:
-	db "MONO  @"
-.Stereo:
-	db "STEREO@"
+.Mono:   db "MONO  @"
+.Stereo: db "STEREO@"
 ; e4424
 
 
+	const_def
+	const PRINT_LIGHTEST ; 0
+	const PRINT_LIGHTER  ; 1
+	const PRINT_NORMAL   ; 2
+	const PRINT_DARKER   ; 3
+	const PRINT_DARKEST  ; 4
+
 Options_Print: ; e4424
 	call GetPrinterSetting
 	ld a, [hJoyPressed]
@@ -335,9 +342,9 @@
 	bit D_RIGHT_F, a
 	jr z, .NonePressed
 	ld a, c
-	cp 4
+	cp PRINT_DARKEST
 	jr c, .Increase
-	ld c, -1
+	ld c, PRINT_LIGHTEST - 1
 
 .Increase:
 	inc c
@@ -348,7 +355,7 @@
 	ld a, c
 	and a
 	jr nz, .Decrease
-	ld c, 5
+	ld c, PRINT_DARKEST + 1
 
 .Decrease:
 	dec c
@@ -373,6 +380,7 @@
 ; e445a
 
 .Strings:
+; entries correspond to PRINT_* constants
 	dw .Lightest
 	dw .Lighter
 	dw .Normal
@@ -379,51 +387,49 @@
 	dw .Darker
 	dw .Darkest
 
-.Lightest:
-	db "LIGHTEST@"
-.Lighter:
-	db "LIGHTER @"
-.Normal:
-	db "NORMAL  @"
-.Darker:
-	db "DARKER  @"
-.Darkest:
-	db "DARKEST @"
+.Lightest: db "LIGHTEST@"
+.Lighter:  db "LIGHTER @"
+.Normal:   db "NORMAL  @"
+.Darker:   db "DARKER  @"
+.Darkest:  db "DARKEST @"
 ; e4491
 
 
 GetPrinterSetting: ; e4491
-	ld a, [GBPrinter] ; converts from the stored printer setting to 0,1,2,3,4
+; converts GBPRINTER_* value in a to PRINT_* value in c,
+; with previous/next GBPRINTER_* values in d/e
+	ld a, [GBPrinter]
 	and a
 	jr z, .IsLightest
-	cp PRINT_LIGHTER
+	cp GBPRINTER_LIGHTER
 	jr z, .IsLight
-	cp PRINT_DARKER
+	cp GBPRINTER_DARKER
 	jr z, .IsDark
-	cp PRINT_DARKEST
+	cp GBPRINTER_DARKEST
 	jr z, .IsDarkest
-	ld c, 2 ; normal if none of the above
-	lb de, PRINT_LIGHTER, PRINT_DARKER ; the 2 values next to this setting
+	; none of the above
+	ld c, PRINT_NORMAL
+	lb de, GBPRINTER_LIGHTER, GBPRINTER_DARKER
 	ret
 
 .IsLightest:
-	ld c, 0
-	lb de, PRINT_DARKEST, PRINT_LIGHTER ; the 2 values next to this setting
+	ld c, PRINT_LIGHTEST
+	lb de, GBPRINTER_DARKEST, GBPRINTER_LIGHTER
 	ret
 
 .IsLight:
-	ld c, 1
-	lb de, PRINT_LIGHTEST, PRINT_NORMAL ; the 2 values next to this setting
+	ld c, PRINT_LIGHTER
+	lb de, GBPRINTER_LIGHTEST, GBPRINTER_NORMAL
 	ret
 
 .IsDark:
-	ld c, 3
-	lb de, PRINT_NORMAL, PRINT_DARKEST ; the 2 values next to this setting
+	ld c, PRINT_DARKER
+	lb de, GBPRINTER_NORMAL, GBPRINTER_DARKEST
 	ret
 
 .IsDarkest:
-	ld c, 4
-	lb de, PRINT_DARKER, PRINT_LIGHTEST ; the 2 values next to this setting
+	ld c, PRINT_DARKEST
+	lb de, GBPRINTER_DARKER, GBPRINTER_LIGHTEST
 	ret
 ; e44c1
 
@@ -463,10 +469,8 @@
 	ret
 ; e44f2
 
-.Off:
-	db "OFF@"
-.On:
-	db "ON @"
+.Off: db "OFF@"
+.On:  db "ON @"
 ; e44fa
 
 
--- a/engine/overworld.asm
+++ b/engine/overworld.asm
@@ -716,764 +716,18 @@
 	ret
 ; 1444d
 
-emote_header: MACRO
-	dw \1
-	db \2 tiles, BANK(\1)
-	dw VTiles1 tile \3
-ENDM
 
 EmotesPointers: ; 144d
-; entries correspond to EMOTE_* constants
-; graphics address, length, starting tile
-	emote_header ShockEmote,     4, $78
-	emote_header QuestionEmote,  4, $78
-	emote_header HappyEmote,     4, $78
-	emote_header SadEmote,       4, $78
-	emote_header HeartEmote,     4, $78
-	emote_header BoltEmote,      4, $78
-	emote_header SleepEmote,     4, $78
-	emote_header FishEmote,      4, $78
-	emote_header JumpShadowGFX,  1, $7c
-	emote_header FishingRodGFX,  2, $7c
-	emote_header BoulderDustGFX, 2, $7e
-	emote_header GrassRustleGFX, 1, $7e
+INCLUDE "data/emote_headers.asm"
 ; 14495
 
 
 SpriteMons: ; 14495
-	db UNOWN
-	db GEODUDE
-	db GROWLITHE
-	db WEEDLE
-	db SHELLDER
-	db ODDISH
-	db GENGAR
-	db ZUBAT
-	db MAGIKARP
-	db SQUIRTLE
-	db TOGEPI
-	db BUTTERFREE
-	db DIGLETT
-	db POLIWAG
-	db PIKACHU
-	db CLEFAIRY
-	db CHARMANDER
-	db JYNX
-	db STARMIE
-	db BULBASAUR
-	db JIGGLYPUFF
-	db GRIMER
-	db EKANS
-	db PARAS
-	db TENTACOOL
-	db TAUROS
-	db MACHOP
-	db VOLTORB
-	db LAPRAS
-	db RHYDON
-	db MOLTRES
-	db SNORLAX
-	db GYARADOS
-	db LUGIA
-	db HO_OH
+INCLUDE "data/sprite_mons.asm"
 ; 144b8
 
 
-OutdoorSprites: ; 144b8
-; Valid sprite IDs for each map group.
-
-	dw Group1Sprites
-	dw Group2Sprites
-	dw Group3Sprites
-	dw Group4Sprites
-	dw Group5Sprites
-	dw Group6Sprites
-	dw Group7Sprites
-	dw Group8Sprites
-	dw Group9Sprites
-	dw Group10Sprites
-	dw Group11Sprites
-	dw Group12Sprites
-	dw Group13Sprites
-	dw Group14Sprites
-	dw Group15Sprites
-	dw Group16Sprites
-	dw Group17Sprites
-	dw Group18Sprites
-	dw Group19Sprites
-	dw Group20Sprites
-	dw Group21Sprites
-	dw Group22Sprites
-	dw Group23Sprites
-	dw Group24Sprites
-	dw Group25Sprites
-	dw Group26Sprites
-; 144ec
-
-
-Group13Sprites: ; 144ec
-	db SPRITE_SUICUNE
-	db SPRITE_SILVER_TROPHY
-	db SPRITE_FAMICOM
-	db SPRITE_POKEDEX
-	db SPRITE_WILL
-	db SPRITE_KAREN
-	db SPRITE_NURSE
-	db SPRITE_OLD_LINK_RECEPTIONIST
-	db SPRITE_BIG_LAPRAS
-	db SPRITE_BIG_ONIX
-	db SPRITE_SUDOWOODO
-	db SPRITE_BIG_SNORLAX
-	db SPRITE_TEACHER
-	db SPRITE_FISHER
-	db SPRITE_YOUNGSTER
-	db SPRITE_BLUE
-	db SPRITE_GRAMPS
-	db SPRITE_BUG_CATCHER
-	db SPRITE_COOLTRAINER_F
-	db SPRITE_SWIMMER_GIRL
-	db SPRITE_SWIMMER_GUY
-	db SPRITE_POKE_BALL
-	db SPRITE_FRUIT_TREE
-; 14503
-
-Group23Sprites: ; 14503
-	db SPRITE_SUICUNE
-	db SPRITE_SILVER_TROPHY
-	db SPRITE_FAMICOM
-	db SPRITE_POKEDEX
-	db SPRITE_WILL
-	db SPRITE_KAREN
-	db SPRITE_NURSE
-	db SPRITE_OLD_LINK_RECEPTIONIST
-	db SPRITE_BIG_LAPRAS
-	db SPRITE_BIG_ONIX
-	db SPRITE_SUDOWOODO
-	db SPRITE_BIG_SNORLAX
-	db SPRITE_TEACHER
-	db SPRITE_FISHER
-	db SPRITE_YOUNGSTER
-	db SPRITE_BLUE
-	db SPRITE_GRAMPS
-	db SPRITE_BUG_CATCHER
-	db SPRITE_COOLTRAINER_F
-	db SPRITE_SWIMMER_GIRL
-	db SPRITE_SWIMMER_GUY
-	db SPRITE_POKE_BALL
-	db SPRITE_FRUIT_TREE
-; 1451a
-
-Group14Sprites: ; 1451a
-	db SPRITE_SUICUNE
-	db SPRITE_SILVER_TROPHY
-	db SPRITE_FAMICOM
-	db SPRITE_POKEDEX
-	db SPRITE_WILL
-	db SPRITE_KAREN
-	db SPRITE_NURSE
-	db SPRITE_OLD_LINK_RECEPTIONIST
-	db SPRITE_BIG_LAPRAS
-	db SPRITE_BIG_ONIX
-	db SPRITE_SUDOWOODO
-	db SPRITE_BIG_SNORLAX
-	db SPRITE_TEACHER
-	db SPRITE_FISHER
-	db SPRITE_YOUNGSTER
-	db SPRITE_BLUE
-	db SPRITE_GRAMPS
-	db SPRITE_BUG_CATCHER
-	db SPRITE_COOLTRAINER_F
-	db SPRITE_SWIMMER_GIRL
-	db SPRITE_SWIMMER_GUY
-	db SPRITE_POKE_BALL
-	db SPRITE_FRUIT_TREE
-; 14531
-
-Group6Sprites: ; 14531
-	db SPRITE_SUICUNE
-	db SPRITE_SILVER_TROPHY
-	db SPRITE_FAMICOM
-	db SPRITE_POKEDEX
-	db SPRITE_WILL
-	db SPRITE_KAREN
-	db SPRITE_NURSE
-	db SPRITE_OLD_LINK_RECEPTIONIST
-	db SPRITE_BIG_LAPRAS
-	db SPRITE_BIG_ONIX
-	db SPRITE_SUDOWOODO
-	db SPRITE_BIG_SNORLAX
-	db SPRITE_TEACHER
-	db SPRITE_FISHER
-	db SPRITE_YOUNGSTER
-	db SPRITE_BLUE
-	db SPRITE_GRAMPS
-	db SPRITE_BUG_CATCHER
-	db SPRITE_COOLTRAINER_F
-	db SPRITE_SWIMMER_GIRL
-	db SPRITE_SWIMMER_GUY
-	db SPRITE_POKE_BALL
-	db SPRITE_FRUIT_TREE
-; 14548
-
-Group7Sprites: ; 14548
-	db SPRITE_SUICUNE
-	db SPRITE_SILVER_TROPHY
-	db SPRITE_FAMICOM
-	db SPRITE_POKEDEX
-	db SPRITE_WILL
-	db SPRITE_KAREN
-	db SPRITE_NURSE
-	db SPRITE_OLD_LINK_RECEPTIONIST
-	db SPRITE_BIG_LAPRAS
-	db SPRITE_BIG_ONIX
-	db SPRITE_SUDOWOODO
-	db SPRITE_BIG_SNORLAX
-	db SPRITE_COOLTRAINER_M
-	db SPRITE_SUPER_NERD
-	db SPRITE_COOLTRAINER_F
-	db SPRITE_FISHER
-	db SPRITE_YOUNGSTER
-	db SPRITE_LASS
-	db SPRITE_POKEFAN_M
-	db SPRITE_ROCKET
-	db SPRITE_MISTY
-	db SPRITE_POKE_BALL
-	db SPRITE_SLOWPOKE
-; 1455f
-
-Group25Sprites: ; 1455f
-	db SPRITE_SUICUNE
-	db SPRITE_SILVER_TROPHY
-	db SPRITE_FAMICOM
-	db SPRITE_POKEDEX
-	db SPRITE_WILL
-	db SPRITE_KAREN
-	db SPRITE_NURSE
-	db SPRITE_OLD_LINK_RECEPTIONIST
-	db SPRITE_BIG_LAPRAS
-	db SPRITE_BIG_ONIX
-	db SPRITE_SUDOWOODO
-	db SPRITE_BIG_SNORLAX
-	db SPRITE_COOLTRAINER_M
-	db SPRITE_SUPER_NERD
-	db SPRITE_COOLTRAINER_F
-	db SPRITE_FISHER
-	db SPRITE_YOUNGSTER
-	db SPRITE_LASS
-	db SPRITE_POKEFAN_M
-	db SPRITE_ROCKET
-	db SPRITE_MISTY
-	db SPRITE_POKE_BALL
-	db SPRITE_SLOWPOKE
-; 14576
-
-Group21Sprites: ; 14576
-	db SPRITE_SUICUNE
-	db SPRITE_SILVER_TROPHY
-	db SPRITE_FAMICOM
-	db SPRITE_POKEDEX
-	db SPRITE_WILL
-	db SPRITE_KAREN
-	db SPRITE_NURSE
-	db SPRITE_OLD_LINK_RECEPTIONIST
-	db SPRITE_BIG_LAPRAS
-	db SPRITE_BIG_ONIX
-	db SPRITE_SUDOWOODO
-	db SPRITE_BIG_SNORLAX
-	db SPRITE_FISHER
-	db SPRITE_POLIWAG
-	db SPRITE_TEACHER
-	db SPRITE_GRAMPS
-	db SPRITE_YOUNGSTER
-	db SPRITE_LASS
-	db SPRITE_BIKER
-	db SPRITE_SILVER
-	db SPRITE_BLUE
-	db SPRITE_POKE_BALL
-	db SPRITE_FRUIT_TREE
-; 1458d
-
-Group18Sprites: ; 1458d
-	db SPRITE_SUICUNE
-	db SPRITE_SILVER_TROPHY
-	db SPRITE_FAMICOM
-	db SPRITE_POKEDEX
-	db SPRITE_WILL
-	db SPRITE_KAREN
-	db SPRITE_NURSE
-	db SPRITE_OLD_LINK_RECEPTIONIST
-	db SPRITE_BIG_LAPRAS
-	db SPRITE_BIG_ONIX
-	db SPRITE_SUDOWOODO
-	db SPRITE_BIG_SNORLAX
-	db SPRITE_POKEFAN_M
-	db SPRITE_MACHOP
-	db SPRITE_GRAMPS
-	db SPRITE_YOUNGSTER
-	db SPRITE_FISHER
-	db SPRITE_TEACHER
-	db SPRITE_SUPER_NERD
-	db SPRITE_BIG_SNORLAX
-	db SPRITE_BIKER
-	db SPRITE_POKE_BALL
-	db SPRITE_FRUIT_TREE
-; 145a4
-
-Group12Sprites: ; 145a4
-	db SPRITE_SUICUNE
-	db SPRITE_SILVER_TROPHY
-	db SPRITE_FAMICOM
-	db SPRITE_POKEDEX
-	db SPRITE_WILL
-	db SPRITE_KAREN
-	db SPRITE_NURSE
-	db SPRITE_OLD_LINK_RECEPTIONIST
-	db SPRITE_BIG_LAPRAS
-	db SPRITE_BIG_ONIX
-	db SPRITE_SUDOWOODO
-	db SPRITE_BIG_SNORLAX
-	db SPRITE_POKEFAN_M
-	db SPRITE_MACHOP
-	db SPRITE_GRAMPS
-	db SPRITE_YOUNGSTER
-	db SPRITE_FISHER
-	db SPRITE_TEACHER
-	db SPRITE_SUPER_NERD
-	db SPRITE_BIG_SNORLAX
-	db SPRITE_BIKER
-	db SPRITE_POKE_BALL
-	db SPRITE_FRUIT_TREE
-; 145bb
-
-Group17Sprites: ; 145bb
-	db SPRITE_SUICUNE
-	db SPRITE_SILVER_TROPHY
-	db SPRITE_FAMICOM
-	db SPRITE_POKEDEX
-	db SPRITE_WILL
-	db SPRITE_KAREN
-	db SPRITE_NURSE
-	db SPRITE_OLD_LINK_RECEPTIONIST
-	db SPRITE_BIG_LAPRAS
-	db SPRITE_BIG_ONIX
-	db SPRITE_SUDOWOODO
-	db SPRITE_BIG_SNORLAX
-	db SPRITE_POKEFAN_M
-	db SPRITE_MACHOP
-	db SPRITE_GRAMPS
-	db SPRITE_YOUNGSTER
-	db SPRITE_FISHER
-	db SPRITE_TEACHER
-	db SPRITE_SUPER_NERD
-	db SPRITE_BIG_SNORLAX
-	db SPRITE_BIKER
-	db SPRITE_POKE_BALL
-	db SPRITE_FRUIT_TREE
-; 145d2
-
-Group16Sprites: ; 145d2
-	db SPRITE_SUICUNE
-	db SPRITE_SILVER_TROPHY
-	db SPRITE_FAMICOM
-	db SPRITE_POKEDEX
-	db SPRITE_WILL
-	db SPRITE_KAREN
-	db SPRITE_NURSE
-	db SPRITE_OLD_LINK_RECEPTIONIST
-	db SPRITE_BIG_LAPRAS
-	db SPRITE_BIG_ONIX
-	db SPRITE_SUDOWOODO
-	db SPRITE_BIG_SNORLAX
-	db SPRITE_POKEFAN_M
-	db SPRITE_BUENA
-	db SPRITE_GRAMPS
-	db SPRITE_YOUNGSTER
-	db SPRITE_FISHER
-	db SPRITE_TEACHER
-	db SPRITE_SUPER_NERD
-	db SPRITE_MACHOP
-	db SPRITE_BIKER
-	db SPRITE_POKE_BALL
-	db SPRITE_BOULDER
-; 145e9
-
-Group24Sprites: ; 145e9
-	db SPRITE_SUICUNE
-	db SPRITE_SILVER_TROPHY
-	db SPRITE_FAMICOM
-	db SPRITE_POKEDEX
-	db SPRITE_WILL
-	db SPRITE_KAREN
-	db SPRITE_NURSE
-	db SPRITE_OLD_LINK_RECEPTIONIST
-	db SPRITE_BIG_LAPRAS
-	db SPRITE_BIG_ONIX
-	db SPRITE_SUDOWOODO
-	db SPRITE_BIG_SNORLAX
-	db SPRITE_SILVER
-	db SPRITE_TEACHER
-	db SPRITE_FISHER
-	db SPRITE_COOLTRAINER_M
-	db SPRITE_YOUNGSTER
-	db SPRITE_MONSTER
-	db SPRITE_GRAMPS
-	db SPRITE_BUG_CATCHER
-	db SPRITE_COOLTRAINER_F
-	db SPRITE_POKE_BALL
-	db SPRITE_FRUIT_TREE
-; 14600
-
-Group26Sprites: ; 14600
-	db SPRITE_SUICUNE
-	db SPRITE_SILVER_TROPHY
-	db SPRITE_FAMICOM
-	db SPRITE_POKEDEX
-	db SPRITE_WILL
-	db SPRITE_KAREN
-	db SPRITE_NURSE
-	db SPRITE_OLD_LINK_RECEPTIONIST
-	db SPRITE_BIG_LAPRAS
-	db SPRITE_BIG_ONIX
-	db SPRITE_SUDOWOODO
-	db SPRITE_BIG_SNORLAX
-	db SPRITE_SILVER
-	db SPRITE_TEACHER
-	db SPRITE_FISHER
-	db SPRITE_COOLTRAINER_M
-	db SPRITE_YOUNGSTER
-	db SPRITE_MONSTER
-	db SPRITE_GRAMPS
-	db SPRITE_BUG_CATCHER
-	db SPRITE_COOLTRAINER_F
-	db SPRITE_POKE_BALL
-	db SPRITE_FRUIT_TREE
-; 14617
-
-Group19Sprites: ; 14617
-	db SPRITE_SUICUNE
-	db SPRITE_SILVER_TROPHY
-	db SPRITE_FAMICOM
-	db SPRITE_POKEDEX
-	db SPRITE_WILL
-	db SPRITE_KAREN
-	db SPRITE_NURSE
-	db SPRITE_OLD_LINK_RECEPTIONIST
-	db SPRITE_BIG_LAPRAS
-	db SPRITE_BIG_ONIX
-	db SPRITE_SUDOWOODO
-	db SPRITE_BIG_SNORLAX
-	db SPRITE_SILVER
-	db SPRITE_TEACHER
-	db SPRITE_FISHER
-	db SPRITE_COOLTRAINER_M
-	db SPRITE_YOUNGSTER
-	db SPRITE_MONSTER
-	db SPRITE_GRAMPS
-	db SPRITE_BUG_CATCHER
-	db SPRITE_COOLTRAINER_F
-	db SPRITE_POKE_BALL
-	db SPRITE_FRUIT_TREE
-; 1462e
-
-Group10Sprites: ; 1462e
-	db SPRITE_SUICUNE
-	db SPRITE_SILVER_TROPHY
-	db SPRITE_FAMICOM
-	db SPRITE_POKEDEX
-	db SPRITE_WILL
-	db SPRITE_KAREN
-	db SPRITE_NURSE
-	db SPRITE_OLD_LINK_RECEPTIONIST
-	db SPRITE_BIG_LAPRAS
-	db SPRITE_BIG_ONIX
-	db SPRITE_SUDOWOODO
-	db SPRITE_BIG_SNORLAX
-	db SPRITE_FISHER
-	db SPRITE_LASS
-	db SPRITE_OFFICER
-	db SPRITE_GRAMPS
-	db SPRITE_YOUNGSTER
-	db SPRITE_COOLTRAINER_M
-	db SPRITE_BUG_CATCHER
-	db SPRITE_SUPER_NERD
-	db SPRITE_WEIRD_TREE
-	db SPRITE_POKE_BALL
-	db SPRITE_FRUIT_TREE
-; 14645
-
-Group4Sprites: ; 14645
-	db SPRITE_SUICUNE
-	db SPRITE_SILVER_TROPHY
-	db SPRITE_FAMICOM
-	db SPRITE_POKEDEX
-	db SPRITE_WILL
-	db SPRITE_KAREN
-	db SPRITE_NURSE
-	db SPRITE_OLD_LINK_RECEPTIONIST
-	db SPRITE_BIG_LAPRAS
-	db SPRITE_BIG_ONIX
-	db SPRITE_SUDOWOODO
-	db SPRITE_BIG_SNORLAX
-	db SPRITE_FISHER
-	db SPRITE_LASS
-	db SPRITE_OFFICER
-	db SPRITE_GRAMPS
-	db SPRITE_YOUNGSTER
-	db SPRITE_COOLTRAINER_M
-	db SPRITE_BUG_CATCHER
-	db SPRITE_SUPER_NERD
-	db SPRITE_WEIRD_TREE
-	db SPRITE_POKE_BALL
-	db SPRITE_FRUIT_TREE
-; 1465c
-
-Group8Sprites: ; 1465c
-	db SPRITE_SUICUNE
-	db SPRITE_SILVER_TROPHY
-	db SPRITE_FAMICOM
-	db SPRITE_POKEDEX
-	db SPRITE_WILL
-	db SPRITE_KAREN
-	db SPRITE_NURSE
-	db SPRITE_OLD_LINK_RECEPTIONIST
-	db SPRITE_KURT_OUTSIDE
-	db SPRITE_BIG_ONIX
-	db SPRITE_SUDOWOODO
-	db SPRITE_BIG_SNORLAX
-	db SPRITE_GRAMPS
-	db SPRITE_YOUNGSTER
-	db SPRITE_OFFICER
-	db SPRITE_POKEFAN_M
-	db SPRITE_BLACK_BELT
-	db SPRITE_TEACHER
-	db SPRITE_AZALEA_ROCKET
-	db SPRITE_LASS
-	db SPRITE_SILVER
-	db SPRITE_FRUIT_TREE
-	db SPRITE_SLOWPOKE
-; 14673
-
-Group11Sprites: ; 14673
-	db SPRITE_SUICUNE
-	db SPRITE_SILVER_TROPHY
-	db SPRITE_POKE_BALL
-	db SPRITE_POKEDEX
-	db SPRITE_WILL
-	db SPRITE_KAREN
-	db SPRITE_NURSE
-	db SPRITE_OLD_LINK_RECEPTIONIST
-	db SPRITE_BIG_LAPRAS
-	db SPRITE_BIG_ONIX
-	db SPRITE_SUDOWOODO
-	db SPRITE_BIG_SNORLAX
-	db SPRITE_GRAMPS
-	db SPRITE_YOUNGSTER
-	db SPRITE_OFFICER
-	db SPRITE_POKEFAN_M
-	db SPRITE_DAY_CARE_MON_1
-	db SPRITE_COOLTRAINER_F
-	db SPRITE_ROCKET
-	db SPRITE_LASS
-	db SPRITE_DAY_CARE_MON_2
-	db SPRITE_FRUIT_TREE
-	db SPRITE_SLOWPOKE
-; 1468a
-
-Group22Sprites: ; 1468a
-	db SPRITE_SUICUNE
-	db SPRITE_SILVER_TROPHY
-	db SPRITE_FAMICOM
-	db SPRITE_POKEDEX
-	db SPRITE_WILL
-	db SPRITE_KAREN
-	db SPRITE_NURSE
-	db SPRITE_OLD_LINK_RECEPTIONIST
-	db SPRITE_STANDING_YOUNGSTER
-	db SPRITE_BIG_ONIX
-	db SPRITE_SUDOWOODO
-	db SPRITE_BIG_SNORLAX
-	db SPRITE_OLIVINE_RIVAL
-	db SPRITE_POKEFAN_M
-	db SPRITE_LASS
-	db SPRITE_BUENA
-	db SPRITE_SWIMMER_GIRL
-	db SPRITE_SAILOR
-	db SPRITE_POKEFAN_F
-	db SPRITE_SUPER_NERD
-	db SPRITE_TAUROS
-	db SPRITE_FRUIT_TREE
-	db SPRITE_ROCK
-; 146a1
-
-Group1Sprites: ; 146a1
-	db SPRITE_SUICUNE
-	db SPRITE_SILVER_TROPHY
-	db SPRITE_FAMICOM
-	db SPRITE_POKEDEX
-	db SPRITE_WILL
-	db SPRITE_KAREN
-	db SPRITE_NURSE
-	db SPRITE_OLD_LINK_RECEPTIONIST
-	db SPRITE_STANDING_YOUNGSTER
-	db SPRITE_BIG_ONIX
-	db SPRITE_SUDOWOODO
-	db SPRITE_BIG_SNORLAX
-	db SPRITE_OLIVINE_RIVAL
-	db SPRITE_POKEFAN_M
-	db SPRITE_LASS
-	db SPRITE_BUENA
-	db SPRITE_SWIMMER_GIRL
-	db SPRITE_SAILOR
-	db SPRITE_POKEFAN_F
-	db SPRITE_SUPER_NERD
-	db SPRITE_TAUROS
-	db SPRITE_FRUIT_TREE
-	db SPRITE_ROCK
-; 146b8
-
-Group9Sprites: ; 146b8
-	db SPRITE_SUICUNE
-	db SPRITE_SILVER_TROPHY
-	db SPRITE_FAMICOM
-	db SPRITE_POKEDEX
-	db SPRITE_WILL
-	db SPRITE_KAREN
-	db SPRITE_NURSE
-	db SPRITE_OLD_LINK_RECEPTIONIST
-	db SPRITE_BIG_LAPRAS
-	db SPRITE_BIG_ONIX
-	db SPRITE_SUDOWOODO
-	db SPRITE_BIG_SNORLAX
-	db SPRITE_LANCE
-	db SPRITE_GRAMPS
-	db SPRITE_SUPER_NERD
-	db SPRITE_COOLTRAINER_F
-	db SPRITE_FISHER
-	db SPRITE_COOLTRAINER_M
-	db SPRITE_LASS
-	db SPRITE_YOUNGSTER
-	db SPRITE_GYARADOS
-	db SPRITE_FRUIT_TREE
-	db SPRITE_POKE_BALL
-; 146cf
-
-Group2Sprites: ; 146cf
-	db SPRITE_SUICUNE
-	db SPRITE_SILVER_TROPHY
-	db SPRITE_FAMICOM
-	db SPRITE_POKEDEX
-	db SPRITE_WILL
-	db SPRITE_KAREN
-	db SPRITE_NURSE
-	db SPRITE_OLD_LINK_RECEPTIONIST
-	db SPRITE_BIG_LAPRAS
-	db SPRITE_BIG_ONIX
-	db SPRITE_SUDOWOODO
-	db SPRITE_BIG_SNORLAX
-	db SPRITE_GRAMPS
-	db SPRITE_YOUNGSTER
-	db SPRITE_LASS
-	db SPRITE_SUPER_NERD
-	db SPRITE_COOLTRAINER_M
-	db SPRITE_POKEFAN_M
-	db SPRITE_BLACK_BELT
-	db SPRITE_COOLTRAINER_F
-	db SPRITE_FISHER
-	db SPRITE_FRUIT_TREE
-	db SPRITE_POKE_BALL
-; 146e6
-
-Group5Sprites: ; 146e6
-	db SPRITE_SUICUNE
-	db SPRITE_SILVER_TROPHY
-	db SPRITE_FAMICOM
-	db SPRITE_POKEDEX
-	db SPRITE_WILL
-	db SPRITE_KAREN
-	db SPRITE_NURSE
-	db SPRITE_OLD_LINK_RECEPTIONIST
-	db SPRITE_BIG_LAPRAS
-	db SPRITE_BIG_ONIX
-	db SPRITE_SUDOWOODO
-	db SPRITE_BIG_SNORLAX
-	db SPRITE_GRAMPS
-	db SPRITE_YOUNGSTER
-	db SPRITE_LASS
-	db SPRITE_SUPER_NERD
-	db SPRITE_COOLTRAINER_M
-	db SPRITE_POKEFAN_M
-	db SPRITE_BLACK_BELT
-	db SPRITE_COOLTRAINER_F
-	db SPRITE_FISHER
-	db SPRITE_FRUIT_TREE
-	db SPRITE_POKE_BALL
-; 146fd
-
-Group3Sprites: ; 146fd
-	db SPRITE_SUICUNE
-	db SPRITE_SILVER_TROPHY
-	db SPRITE_FAMICOM
-	db SPRITE_POKEDEX
-	db SPRITE_WILL
-	db SPRITE_KAREN
-	db SPRITE_NURSE
-	db SPRITE_OLD_LINK_RECEPTIONIST
-	db SPRITE_GAMEBOY_KID
-	db SPRITE_BIG_ONIX
-	db SPRITE_SUDOWOODO
-	db SPRITE_BIG_SNORLAX
-	db SPRITE_LASS
-	db SPRITE_POKEFAN_F
-	db SPRITE_TEACHER
-	db SPRITE_YOUNGSTER
-	db SPRITE_GROWLITHE
-	db SPRITE_POKEFAN_M
-	db SPRITE_ROCKER
-	db SPRITE_FISHER
-	db SPRITE_SCIENTIST
-	db SPRITE_POKE_BALL
-	db SPRITE_BOULDER
-; 14714
-
-Group15Sprites: ; 14714
-	db SPRITE_SUICUNE
-	db SPRITE_SILVER_TROPHY
-	db SPRITE_FAMICOM
-	db SPRITE_POKEDEX
-	db SPRITE_WILL
-	db SPRITE_KAREN
-	db SPRITE_NURSE
-	db SPRITE_OLD_LINK_RECEPTIONIST
-	db SPRITE_BIG_LAPRAS
-	db SPRITE_BIG_ONIX
-	db SPRITE_SUDOWOODO
-	db SPRITE_BIG_SNORLAX
-	db SPRITE_SAILOR
-	db SPRITE_FISHING_GURU
-	db SPRITE_GENTLEMAN
-	db SPRITE_SUPER_NERD
-	db SPRITE_HO_OH
-	db SPRITE_TEACHER
-	db SPRITE_COOLTRAINER_F
-	db SPRITE_YOUNGSTER
-	db SPRITE_FAIRY
-	db SPRITE_POKE_BALL
-	db SPRITE_ROCK
-; 1472b
-
-Group20Sprites: ; 1472b
-	db SPRITE_OAK
-	db SPRITE_FISHER
-	db SPRITE_TEACHER
-	db SPRITE_TWIN
-	db SPRITE_POKEFAN_M
-	db SPRITE_GRAMPS
-	db SPRITE_FAIRY
-	db SPRITE_SILVER
-	db SPRITE_FISHING_GURU
-	db SPRITE_POKE_BALL
-	db SPRITE_POKEDEX
-; 14736
+INCLUDE "data/outdoor_sprites.asm"
 
 
 SpriteHeaders: ; 14736
--- a/engine/phone.asm
+++ b/engine/phone.asm
@@ -761,87 +761,11 @@
 ; 9045f
 
 PhoneContacts: ; 9045f
-phone: MACRO
-	db  \1, \2 ; trainer
-	map \3     ; map
-	db  \4
-	dba \5 ; script 1
-	db  \6
-	dba \7 ; script 2
-ENDM
-; entries correspond to PHONE_* constants
-	phone TRAINER_NONE, PHONE_00,              N_A,                       0, UnusedPhoneScript,   0, UnusedPhoneScript
-	phone TRAINER_NONE, PHONECONTACT_MOM,      KRISS_HOUSE_1F,            7, MomPhoneScript,      0, UnusedPhoneScript
-	phone TRAINER_NONE, PHONECONTACT_BIKESHOP, OAKS_LAB,                  0, UnusedPhoneScript,   0, UnusedPhoneScript
-	phone TRAINER_NONE, PHONECONTACT_BILL,     N_A,                       7, BillPhoneScript1,    0, BillPhoneScript2
-	phone TRAINER_NONE, PHONECONTACT_ELM,      ELMS_LAB,                  7, ElmPhoneScript1,     0, ElmPhoneScript2
-	phone SCHOOLBOY,    JACK1,                 NATIONAL_PARK,             7, JackPhoneScript1,    7, JackPhoneScript2
-	phone POKEFANF,     BEVERLY1,              NATIONAL_PARK,             7, BeverlyPhoneScript1, 7, BeverlyPhoneScript2
-	phone SAILOR,       HUEY1,                 OLIVINE_LIGHTHOUSE_2F,     7, HueyPhoneScript1,    7, HueyPhoneScript2
-	phone TRAINER_NONE, PHONE_00,              N_A,                       0, UnusedPhoneScript,   0, UnusedPhoneScript
-	phone TRAINER_NONE, PHONE_00,              N_A,                       0, UnusedPhoneScript,   0, UnusedPhoneScript
-	phone TRAINER_NONE, PHONE_00,              N_A,                       0, UnusedPhoneScript,   0, UnusedPhoneScript
-	phone COOLTRAINERM, GAVEN3,                ROUTE_26,                  7, GavenPhoneScript1,   7, GavenPhoneScript2
-	phone COOLTRAINERF, BETH1,                 ROUTE_26,                  7, BethPhoneScript1,    7, BethPhoneScript2
-	phone BIRD_KEEPER,  JOSE2,                 ROUTE_27,                  7, JosePhoneScript1,    7, JosePhoneScript2
-	phone COOLTRAINERF, REENA1,                ROUTE_27,                  7, ReenaPhoneScript1,   7, ReenaPhoneScript2
-	phone YOUNGSTER,    JOEY1,                 ROUTE_30,                  7, JoeyPhoneScript1,    7, JoeyPhoneScript2
-	phone BUG_CATCHER,  WADE1,                 ROUTE_31,                  7, WadePhoneScript1,    7, WadePhoneScript2
-	phone FISHER,       RALPH1,                ROUTE_32,                  7, RalphPhoneScript1,   7, RalphPhoneScript2
-	phone PICNICKER,    LIZ1,                  ROUTE_32,                  7, LizPhoneScript1,     7, LizPhoneScript2
-	phone HIKER,        ANTHONY2,              ROUTE_33,                  7, AnthonyPhoneScript1, 7, AnthonyPhoneScript2
-	phone CAMPER,       TODD1,                 ROUTE_34,                  7, ToddPhoneScript1,    7, ToddPhoneScript2
-	phone PICNICKER,    GINA1,                 ROUTE_34,                  7, GinaPhoneScript1,    7, GinaPhoneScript2
-	phone JUGGLER,      IRWIN1,                ROUTE_35,                  7, IrwinPhoneScript1,   7, IrwinPhoneScript2
-	phone BUG_CATCHER,  ARNIE1,                ROUTE_35,                  7, ArniePhoneScript1,   7, ArniePhoneScript2
-	phone SCHOOLBOY,    ALAN1,                 ROUTE_36,                  7, AlanPhoneScript1,    7, AlanPhoneScript2
-	phone TRAINER_NONE, PHONE_00,              N_A,                       0, UnusedPhoneScript,   0, UnusedPhoneScript
-	phone LASS,         DANA1,                 ROUTE_38,                  7, DanaPhoneScript1,    7, DanaPhoneScript2
-	phone SCHOOLBOY,    CHAD1,                 ROUTE_38,                  7, ChadPhoneScript1,    7, ChadPhoneScript2
-	phone POKEFANM,     DEREK1,                ROUTE_39,                  7, DerekPhoneScript1,   7, DerekPhoneScript2
-	phone FISHER,       TULLY1,                ROUTE_42,                  7, TullyPhoneScript1,   7, TullyPhoneScript2
-	phone POKEMANIAC,   BRENT1,                ROUTE_43,                  7, BrentPhoneScript1,   7, BrentPhoneScript2
-	phone PICNICKER,    TIFFANY3,              ROUTE_43,                  7, TiffanyPhoneScript1, 7, TiffanyPhoneScript2
-	phone BIRD_KEEPER,  VANCE1,                ROUTE_44,                  7, VancePhoneScript1,   7, VancePhoneScript2
-	phone FISHER,       WILTON1,               ROUTE_44,                  7, WiltonPhoneScript1,  7, WiltonPhoneScript2
-	phone BLACKBELT_T,  KENJI3,                ROUTE_45,                  7, KenjiPhoneScript1,   7, KenjiPhoneScript2
-	phone HIKER,        PARRY1,                ROUTE_45,                  7, ParryPhoneScript1,   7, ParryPhoneScript2
-	phone PICNICKER,    ERIN1,                 ROUTE_46,                  7, ErinPhoneScript1,    7, ErinPhoneScript2
-	phone TRAINER_NONE, PHONECONTACT_BUENA,    GOLDENROD_DEPT_STORE_ROOF, 7, BuenaPhoneScript1,   7, BuenaPhoneScript2
+INCLUDE "data/phone_contacts.asm"
 ; 90627
 
 SpecialPhoneCallList: ; 90627
-	dw SpecialCallOnlyWhenOutside
-	db PHONE_ELM
-	dba ElmPhoneScript2
-
-	dw SpecialCallOnlyWhenOutside
-	db PHONE_ELM
-	dba ElmPhoneScript2
-
-	dw SpecialCallOnlyWhenOutside
-	db PHONE_ELM
-	dba ElmPhoneScript2
-
-	dw SpecialCallOnlyWhenOutside
-	db PHONE_ELM
-	dba ElmPhoneScript2
-
-	dw SpecialCallWhereverYouAre
-	db PHONE_ELM
-	dba ElmPhoneScript2
-
-	dw SpecialCallWhereverYouAre
-	db PHONE_OAK ; ????????
-	dba BikeShopPhoneScript ; bike shop
-
-	dw SpecialCallWhereverYouAre
-	db PHONE_MOM
-	dba MomPhoneLectureScript
-
-	dw SpecialCallOnlyWhenOutside
-	db PHONE_ELM
-	dba ElmPhoneScript2
+INCLUDE "data/phone_special.asm"
 ; 90657
 
 UnknownScript_0x90657: ; 0x90657
--- a/engine/save.asm
+++ b/engine/save.asm
@@ -727,14 +727,7 @@
 ; 14f7c
 
 DefaultOptions: ; 14f7c
-	db $03 ; mid text speed
-	db $00 ; wSaveFileExists
-	db $00 ; frame 0
-	db $01 ; TextBoxFlags
-	db $40 ; gb printer: normal brightness
-	db $01 ; menu account on
-	db $00 ; ??
-	db $00 ; ??
+INCLUDE "data/default_options.asm"
 ; 14f84
 
 CheckPrimarySaveFile: ; 14f84
--- a/engine/spawn_points.asm
+++ b/engine/spawn_points.asm
@@ -1,44 +1,6 @@
 
 SpawnPoints: ; 0x152ab
-
-spawn: MACRO
-; map, y, x
-	map \1
-	db \2, \3
-ENDM
-
-	spawn KRISS_HOUSE_2F,              3,  3
-	spawn VIRIDIAN_POKECENTER_1F,      5,  3
-
-	spawn PALLET_TOWN,                 5,  6
-	spawn VIRIDIAN_CITY,              23, 26
-	spawn PEWTER_CITY,                13, 26
-	spawn CERULEAN_CITY,              19, 22
-	spawn ROUTE_10_NORTH,             11,  2
-	spawn VERMILION_CITY,              9,  6
-	spawn LAVENDER_TOWN,               5,  6
-	spawn SAFFRON_CITY,                9, 30
-	spawn CELADON_CITY,               29, 10
-	spawn FUCHSIA_CITY,               19, 28
-	spawn CINNABAR_ISLAND,            11, 12
-	spawn ROUTE_23,                    9,  6
-
-	spawn NEW_BARK_TOWN,              13,  6
-	spawn CHERRYGROVE_CITY,           29,  4
-	spawn VIOLET_CITY,                31, 26
-	spawn ROUTE_32,                   11, 74
-	spawn AZALEA_TOWN,                15, 10
-	spawn CIANWOOD_CITY,              23, 44
-	spawn GOLDENROD_CITY,             15, 28
-	spawn OLIVINE_CITY,               13, 22
-	spawn ECRUTEAK_CITY,              23, 28
-	spawn MAHOGANY_TOWN,              15, 14
-	spawn LAKE_OF_RAGE,               21, 29
-	spawn BLACKTHORN_CITY,            21, 30
-	spawn SILVER_CAVE_OUTSIDE,        23, 20
-	spawn FAST_SHIP_CABINS_SW_SSW_NW,  6,  2
-	spawn N_A,                        -1, -1
-
+INCLUDE "data/spawn_points.asm"
 
 
 LoadSpawnPoint: ; 1531f
--- a/engine/sprites.asm
+++ b/engine/sprites.asm
@@ -551,98 +551,7 @@
 ; 8d1c4
 
 SpriteAnimSeqData: ; 8d1c4
-; entries correspond to SPRITE_ANIM_INDEX_* constants
-	; frameset sequence, tile
-; SPRITE_ANIM_INDEX_PARTY_MON
-	db SPRITE_ANIM_FRAMESET_PARTY_MON, SPRITE_ANIM_SEQ_PARTY_MON, $00
-; SPRITE_ANIM_INDEX_01
-	db SPRITE_ANIM_FRAMESET_07, SPRITE_ANIM_SEQ_04, $00
-; SPRITE_ANIM_INDEX_NAMING_SCREEN_CURSOR
-	db SPRITE_ANIM_FRAMESET_TEXT_ENTRY_CURSOR, SPRITE_ANIM_SEQ_NAMING_SCREEN_CURSOR, $05
-; SPRITE_ANIM_INDEX_GAMEFREAK_LOGO
-	db SPRITE_ANIM_FRAMESET_GAMEFREAK_LOGO, SPRITE_ANIM_SEQ_GAMEFREAK_LOGO, $00
-; SPRITE_ANIM_INDEX_GS_INTRO_STAR
-	db SPRITE_ANIM_FRAMESET_GS_INTRO_STAR, SPRITE_ANIM_SEQ_GS_INTRO_STAR, $06
-; SPRITE_ANIM_INDEX_GS_INTRO_SPARKLE
-	db SPRITE_ANIM_FRAMESET_GS_INTRO_SPARKLE, SPRITE_ANIM_SEQ_GS_INTRO_SPARKLE, $06
-; SPRITE_ANIM_INDEX_SLOTS_GOLEM
-	db SPRITE_ANIM_FRAMESET_SLOTS_GOLEM, SPRITE_ANIM_SEQ_SLOTS_GOLEM, $07
-; SPRITE_ANIM_INDEX_SLOTS_CHANSEY
-	db SPRITE_ANIM_FRAMESET_SLOTS_CHANSEY, SPRITE_ANIM_SEQ_SLOTS_CHANSEY, $07
-; SPRITE_ANIM_INDEX_SLOTS_EGG
-	db SPRITE_ANIM_FRAMESET_SLOTS_EGG, SPRITE_ANIM_SEQ_SLOTS_EGG, $07
-; SPRITE_ANIM_INDEX_COMPOSE_MAIL_CURSOR
-	db SPRITE_ANIM_FRAMESET_TEXT_ENTRY_CURSOR, SPRITE_ANIM_SEQ_MAIL_CURSOR, $05
-; SPRITE_ANIM_INDEX_RED_WALK
-	db SPRITE_ANIM_FRAMESET_RED_WALK, SPRITE_ANIM_SEQ_NULL, $00
-; SPRITE_ANIM_INDEX_0B
-	db SPRITE_ANIM_FRAMESET_STILL_CURSOR, SPRITE_ANIM_SEQ_0D, $08
-; SPRITE_ANIM_INDEX_DUMMY_GAME
-	db SPRITE_ANIM_FRAMESET_STILL_CURSOR, SPRITE_ANIM_SEQ_0E, $08
-; SPRITE_ANIM_INDEX_0D
-	db SPRITE_ANIM_FRAMESET_STILL_CURSOR, SPRITE_ANIM_SEQ_0F, $08
-; SPRITE_ANIM_INDEX_TRADE_POKE_BALL
-	db SPRITE_ANIM_FRAMESET_TRADE_POKE_BALL, SPRITE_ANIM_SEQ_TRADE_POKE_BALL, $00
-; SPRITE_ANIM_INDEX_TRADE_POOF
-	db SPRITE_ANIM_FRAMESET_TRADE_POOF, SPRITE_ANIM_SEQ_NULL, $00
-; SPRITE_ANIM_INDEX_TRADE_TUBE_BULGE
-	db SPRITE_ANIM_FRAMESET_TRADE_TUBE_BULGE, SPRITE_ANIM_SEQ_TRADE_TUBE_BULGE, $00
-; SPRITE_ANIM_INDEX_TRADEMON_ICON
-	db SPRITE_ANIM_FRAMESET_TRADEMON_ICON, SPRITE_ANIM_SEQ_TRADEMON_IN_TUBE, $00
-; SPRITE_ANIM_INDEX_TRADEMON_BUBBLE
-	db SPRITE_ANIM_FRAMESET_TRADEMON_BUBBLE, SPRITE_ANIM_SEQ_TRADEMON_IN_TUBE, $00
-; SPRITE_ANIM_INDEX_EVOLUTION_BALL_OF_LIGHT
-	db SPRITE_ANIM_FRAMESET_EVOLUTION_BALL_OF_LIGHT, SPRITE_ANIM_SEQ_REVEAL_NEW_MON, $00
-; SPRITE_ANIM_INDEX_RADIO_TUNING_KNOB
-	db SPRITE_ANIM_FRAMESET_RADIO_TUNING_KNOB, SPRITE_ANIM_SEQ_RADIO_TUNING_KNOB, $00
-; SPRITE_ANIM_INDEX_MAGNET_TRAIN_RED
-	db SPRITE_ANIM_FRAMESET_MAGNET_TRAIN_RED, SPRITE_ANIM_SEQ_NULL, $00
-; SPRITE_ANIM_INDEX_LEAF
-	db SPRITE_ANIM_FRAMESET_LEAF, SPRITE_ANIM_SEQ_CUT_LEAVES, $00
-; SPRITE_ANIM_INDEX_CUT_TREE
-	db SPRITE_ANIM_FRAMESET_CUT_TREE, SPRITE_ANIM_SEQ_NULL, $00
-; SPRITE_ANIM_INDEX_FLY_LEAF
-	db SPRITE_ANIM_FRAMESET_LEAF, SPRITE_ANIM_SEQ_FLY_LEAF, $00
-; SPRITE_ANIM_INDEX_EGG_CRACK
-	db SPRITE_ANIM_FRAMESET_EGG_CRACK, SPRITE_ANIM_SEQ_NULL, $00
-; SPRITE_ANIM_INDEX_1A
-	db SPRITE_ANIM_FRAMESET_24, SPRITE_ANIM_SEQ_19, $00
-; SPRITE_ANIM_INDEX_HEADBUTT
-	db SPRITE_ANIM_FRAMESET_HEADBUTT, SPRITE_ANIM_SEQ_NULL, $00
-; SPRITE_ANIM_INDEX_EGG_HATCH
-	db SPRITE_ANIM_FRAMESET_EGG_HATCH, SPRITE_ANIM_SEQ_REVEAL_NEW_MON, $00
-; SPRITE_ANIM_INDEX_1D
-	db SPRITE_ANIM_FRAMESET_26, SPRITE_ANIM_SEQ_1A, $00
-; SPRITE_ANIM_INDEX_BLUE_WALK
-	db SPRITE_ANIM_FRAMESET_BLUE_WALK, SPRITE_ANIM_SEQ_NULL, $00
-; SPRITE_ANIM_INDEX_MAGNET_TRAIN_BLUE
-	db SPRITE_ANIM_FRAMESET_MAGNET_TRAIN_BLUE, SPRITE_ANIM_SEQ_NULL, $00
-; SPRITE_ANIM_INDEX_20
-	db SPRITE_ANIM_FRAMESET_2F, SPRITE_ANIM_SEQ_NULL, $00
-; SPRITE_ANIM_INDEX_21
-	db SPRITE_ANIM_FRAMESET_30, SPRITE_ANIM_SEQ_NULL, $00
-; SPRITE_ANIM_INDEX_22
-	db SPRITE_ANIM_FRAMESET_31, SPRITE_ANIM_SEQ_NULL, $00
-; SPRITE_ANIM_INDEX_23
-	db SPRITE_ANIM_FRAMESET_32, SPRITE_ANIM_SEQ_1B, $00
-; SPRITE_ANIM_INDEX_24
-	db SPRITE_ANIM_FRAMESET_33, SPRITE_ANIM_SEQ_1C, $00
-; SPRITE_ANIM_INDEX_25
-	db SPRITE_ANIM_FRAMESET_34, SPRITE_ANIM_SEQ_NULL, $00
-; SPRITE_ANIM_INDEX_INTRO_SUICUNE
-	db SPRITE_ANIM_FRAMESET_INTRO_SUICUNE, SPRITE_ANIM_SEQ_INTRO_SUICUNE, $00
-; SPRITE_ANIM_INDEX_INTRO_PICHU
-	db SPRITE_ANIM_FRAMESET_INTRO_PICHU, SPRITE_ANIM_SEQ_INTRO_PICHU_WOOPER, $00
-; SPRITE_ANIM_INDEX_INTRO_WOOPER
-	db SPRITE_ANIM_FRAMESET_INTRO_WOOPER, SPRITE_ANIM_SEQ_INTRO_PICHU_WOOPER, $00
-; SPRITE_ANIM_INDEX_INTRO_UNOWN
-	db SPRITE_ANIM_FRAMESET_INTRO_UNOWN_1, SPRITE_ANIM_SEQ_INTRO_UNOWN, $00
-; SPRITE_ANIM_INDEX_INTRO_UNOWN_F
-	db SPRITE_ANIM_FRAMESET_INTRO_UNOWN_F, SPRITE_ANIM_SEQ_INTRO_UNOWN_F, $00
-; SPRITE_ANIM_INDEX_INTRO_SUICUNE_AWAY
-	db SPRITE_ANIM_FRAMESET_INTRO_SUICUNE_AWAY, SPRITE_ANIM_SEQ_INTRO_SUICUNE_AWAY, $00
-; SPRITE_ANIM_INDEX_CELEBI
-	db SPRITE_ANIM_FRAMESET_CELEBI_LEFT, SPRITE_ANIM_SEQ_NULL, $00 ; 2c
+INCLUDE "data/sprite_anim_seqs.asm"
 ; 8d24b
 
 INCLUDE "engine/sprite_anims.asm" ; DoAnimFrame
--- a/engine/time_capsule/conversion.asm
+++ b/engine/time_capsule/conversion.asm
@@ -145,159 +145,7 @@
 ; fb656
 
 KantoMonSpecials: ; fb656
-; The original special base stat for
-; each Kanto monster from Red/Blue.
-	db  65 ; BULBASAUR
-	db  80 ; IVYSAUR
-	db 100 ; VENUSAUR
-	db  50 ; CHARMANDER
-	db  65 ; CHARMELEON
-	db  85 ; CHARIZARD
-	db  50 ; SQUIRTLE
-	db  65 ; WARTORTLE
-	db  85 ; BLASTOISE
-	db  20 ; CATERPIE
-	db  25 ; METAPOD
-	db  80 ; BUTTERFREE
-	db  20 ; WEEDLE
-	db  25 ; KAKUNA
-	db  45 ; BEEDRILL
-	db  35 ; PIDGEY
-	db  50 ; PIDGEOTTO
-	db  70 ; PIDGEOT
-	db  25 ; RATTATA
-	db  50 ; RATICATE
-	db  31 ; SPEAROW
-	db  61 ; FEAROW
-	db  40 ; EKANS
-	db  65 ; ARBOK
-	db  50 ; PIKACHU
-	db  90 ; RAICHU
-	db  30 ; SANDSHREW
-	db  55 ; SANDSLASH
-	db  40 ; NIDORAN_F
-	db  55 ; NIDORINA
-	db  75 ; NIDOQUEEN
-	db  40 ; NIDORAN_M
-	db  55 ; NIDORINO
-	db  75 ; NIDOKING
-	db  60 ; CLEFAIRY
-	db  85 ; CLEFABLE
-	db  65 ; VULPIX
-	db 100 ; NINETALES
-	db  25 ; JIGGLYPUFF
-	db  50 ; WIGGLYTUFF
-	db  40 ; ZUBAT
-	db  75 ; GOLBAT
-	db  75 ; ODDISH
-	db  85 ; GLOOM
-	db 100 ; VILEPLUME
-	db  55 ; PARAS
-	db  80 ; PARASECT
-	db  40 ; VENONAT
-	db  90 ; VENOMOTH
-	db  45 ; DIGLETT
-	db  70 ; DUGTRIO
-	db  40 ; MEOWTH
-	db  65 ; PERSIAN
-	db  50 ; PSYDUCK
-	db  80 ; GOLDUCK
-	db  35 ; MANKEY
-	db  60 ; PRIMEAPE
-	db  50 ; GROWLITHE
-	db  80 ; ARCANINE
-	db  40 ; POLIWAG
-	db  50 ; POLIWHIRL
-	db  70 ; POLIWRATH
-	db 105 ; ABRA
-	db 120 ; KADABRA
-	db 135 ; ALAKAZAM
-	db  35 ; MACHOP
-	db  50 ; MACHOKE
-	db  65 ; MACHAMP
-	db  70 ; BELLSPROUT
-	db  85 ; WEEPINBELL
-	db 100 ; VICTREEBEL
-	db 100 ; TENTACOOL
-	db 120 ; TENTACRUEL
-	db  30 ; GEODUDE
-	db  45 ; GRAVELER
-	db  55 ; GOLEM
-	db  65 ; PONYTA
-	db  80 ; RAPIDASH
-	db  40 ; SLOWPOKE
-	db  80 ; SLOWBRO
-	db  95 ; MAGNEMITE
-	db 120 ; MAGNETON
-	db  58 ; FARFETCH_D
-	db  35 ; DODUO
-	db  60 ; DODRIO
-	db  70 ; SEEL
-	db  95 ; DEWGONG
-	db  40 ; GRIMER
-	db  65 ; MUK
-	db  45 ; SHELLDER
-	db  85 ; CLOYSTER
-	db 100 ; GASTLY
-	db 115 ; HAUNTER
-	db 130 ; GENGAR
-	db  30 ; ONIX
-	db  90 ; DROWZEE
-	db 115 ; HYPNO
-	db  25 ; KRABBY
-	db  50 ; KINGLER
-	db  55 ; VOLTORB
-	db  80 ; ELECTRODE
-	db  60 ; EXEGGCUTE
-	db 125 ; EXEGGUTOR
-	db  40 ; CUBONE
-	db  50 ; MAROWAK
-	db  35 ; HITMONLEE
-	db  35 ; HITMONCHAN
-	db  60 ; LICKITUNG
-	db  60 ; KOFFING
-	db  85 ; WEEZING
-	db  30 ; RHYHORN
-	db  45 ; RHYDON
-	db 105 ; CHANSEY
-	db 100 ; TANGELA
-	db  40 ; KANGASKHAN
-	db  70 ; HORSEA
-	db  95 ; SEADRA
-	db  50 ; GOLDEEN
-	db  80 ; SEAKING
-	db  70 ; STARYU
-	db 100 ; STARMIE
-	db 100 ; MR__MIME
-	db  55 ; SCYTHER
-	db  95 ; JYNX
-	db  85 ; ELECTABUZZ
-	db  85 ; MAGMAR
-	db  55 ; PINSIR
-	db  70 ; TAUROS
-	db  20 ; MAGIKARP
-	db 100 ; GYARADOS
-	db  95 ; LAPRAS
-	db  48 ; DITTO
-	db  65 ; EEVEE
-	db 110 ; VAPOREON
-	db 110 ; JOLTEON
-	db 110 ; FLAREON
-	db  75 ; PORYGON
-	db  90 ; OMANYTE
-	db 115 ; OMASTAR
-	db  45 ; KABUTO
-	db  70 ; KABUTOPS
-	db  60 ; AERODACTYL
-	db  65 ; SNORLAX
-	db 125 ; ARTICUNO
-	db 125 ; ZAPDOS
-	db 125 ; MOLTRES
-	db  50 ; DRATINI
-	db  70 ; DRAGONAIR
-	db 100 ; DRAGONITE
-	db 154 ; MEWTWO
-	db 100 ; MEW
+INCLUDE "data/time_capsule/special_stats.asm"
 ; fb6ed
 
 
@@ -427,256 +275,5 @@
 ; fb91c
 
 Pokered_MonIndices: ; fb91c
-	db RHYDON
-	db KANGASKHAN
-	db NIDORAN_M
-	db CLEFAIRY
-	db SPEAROW
-	db VOLTORB
-	db NIDOKING
-	db SLOWBRO
-	db IVYSAUR
-	db EXEGGUTOR
-	db LICKITUNG
-	db EXEGGCUTE
-	db GRIMER
-	db GENGAR
-	db NIDORAN_F
-	db NIDOQUEEN
-	db CUBONE
-	db RHYHORN
-	db LAPRAS
-	db ARCANINE
-	db MEW
-	db GYARADOS
-	db SHELLDER
-	db TENTACOOL
-	db GASTLY
-	db SCYTHER
-	db STARYU
-	db BLASTOISE
-	db PINSIR
-	db TANGELA
-	db SCIZOR
-	db SHUCKLE
-	db GROWLITHE
-	db ONIX
-	db FEAROW
-	db PIDGEY
-	db SLOWPOKE
-	db KADABRA
-	db GRAVELER
-	db CHANSEY
-	db MACHOKE
-	db MR__MIME
-	db HITMONLEE
-	db HITMONCHAN
-	db ARBOK
-	db PARASECT
-	db PSYDUCK
-	db DROWZEE
-	db GOLEM
-	db HERACROSS
-	db MAGMAR
-	db HO_OH
-	db ELECTABUZZ
-	db MAGNETON
-	db KOFFING
-	db SNEASEL
-	db MANKEY
-	db SEEL
-	db DIGLETT
-	db TAUROS
-	db TEDDIURSA
-	db URSARING
-	db SLUGMA
-	db FARFETCH_D
-	db VENONAT
-	db DRAGONITE
-	db MAGCARGO
-	db SWINUB
-	db PILOSWINE
-	db DODUO
-	db POLIWAG
-	db JYNX
-	db MOLTRES
-	db ARTICUNO
-	db ZAPDOS
-	db DITTO
-	db MEOWTH
-	db KRABBY
-	db CORSOLA
-	db REMORAID
-	db OCTILLERY
-	db VULPIX
-	db NINETALES
-	db PIKACHU
-	db RAICHU
-	db DELIBIRD
-	db MANTINE
-	db DRATINI
-	db DRAGONAIR
-	db KABUTO
-	db KABUTOPS
-	db HORSEA
-	db SEADRA
-	db SKARMORY
-	db HOUNDOUR
-	db SANDSHREW
-	db SANDSLASH
-	db OMANYTE
-	db OMASTAR
-	db JIGGLYPUFF
-	db WIGGLYTUFF
-	db EEVEE
-	db FLAREON
-	db JOLTEON
-	db VAPOREON
-	db MACHOP
-	db ZUBAT
-	db EKANS
-	db PARAS
-	db POLIWHIRL
-	db POLIWRATH
-	db WEEDLE
-	db KAKUNA
-	db BEEDRILL
-	db HOUNDOOM
-	db DODRIO
-	db PRIMEAPE
-	db DUGTRIO
-	db VENOMOTH
-	db DEWGONG
-	db KINGDRA
-	db PHANPY
-	db CATERPIE
-	db METAPOD
-	db BUTTERFREE
-	db MACHAMP
-	db DONPHAN
-	db GOLDUCK
-	db HYPNO
-	db GOLBAT
-	db MEWTWO
-	db SNORLAX
-	db MAGIKARP
-	db PORYGON2
-	db STANTLER
-	db MUK
-	db SMEARGLE
-	db KINGLER
-	db CLOYSTER
-	db TYROGUE
-	db ELECTRODE
-	db CLEFABLE
-	db WEEZING
-	db PERSIAN
-	db MAROWAK
-	db HITMONTOP
-	db HAUNTER
-	db ABRA
-	db ALAKAZAM
-	db PIDGEOTTO
-	db PIDGEOT
-	db STARMIE
-	db BULBASAUR
-	db VENUSAUR
-	db TENTACRUEL
-	db SMOOCHUM
-	db GOLDEEN
-	db SEAKING
-	db ELEKID
-	db MAGBY
-	db MILTANK
-	db BLISSEY
-	db PONYTA
-	db RAPIDASH
-	db RATTATA
-	db RATICATE
-	db NIDORINO
-	db NIDORINA
-	db GEODUDE
-	db PORYGON
-	db AERODACTYL
-	db RAIKOU
-	db MAGNEMITE
-	db ENTEI
-	db SUICUNE
-	db CHARMANDER
-	db SQUIRTLE
-	db CHARMELEON
-	db WARTORTLE
-	db CHARIZARD
-	db LARVITAR
-	db PUPITAR
-	db TYRANITAR
-	db LUGIA
-	db ODDISH
-	db GLOOM
-	db VILEPLUME
-	db BELLSPROUT
-	db WEEPINBELL
-	db VICTREEBEL
-	db CHIKORITA
-	db BAYLEEF
-	db MEGANIUM
-	db CYNDAQUIL
-	db QUILAVA
-	db TYPHLOSION
-	db TOTODILE
-	db CROCONAW
-	db FERALIGATR
-	db SENTRET
-	db FURRET
-	db HOOTHOOT
-	db NOCTOWL
-	db LEDYBA
-	db LEDIAN
-	db SPINARAK
-	db ARIADOS
-	db CROBAT
-	db CHINCHOU
-	db LANTURN
-	db PICHU
-	db CLEFFA
-	db IGGLYBUFF
-	db TOGEPI
-	db TOGETIC
-	db NATU
-	db XATU
-	db MAREEP
-	db FLAAFFY
-	db AMPHAROS
-	db BELLOSSOM
-	db MARILL
-	db AZUMARILL
-	db SUDOWOODO
-	db POLITOED
-	db HOPPIP
-	db SKIPLOOM
-	db JUMPLUFF
-	db AIPOM
-	db SUNKERN
-	db SUNFLORA
-	db YANMA
-	db WOOPER
-	db QUAGSIRE
-	db ESPEON
-	db UMBREON
-	db MURKROW
-	db SLOWKING
-	db MISDREAVUS
-	db UNOWN
-	db WOBBUFFET
-	db GIRAFARIG
-	db PINECO
-	db FORRETRESS
-	db DUNSPARCE
-	db GLIGAR
-	db STEELIX
-	db SNUBBULL
-	db GRANBULL
-	db QWILFISH
-	db WOBBUFFET
-	db WOBBUFFET
+INCLUDE "data/time_capsule/mon_order.asm"
 ; fba18
--- a/engine/tmhm.asm
+++ b/engine/tmhm.asm
@@ -46,68 +46,5 @@
 ; 1167a
 
 TMHMMoves: ; 1167a
-	db DYNAMICPUNCH
-	db HEADBUTT
-	db CURSE
-	db ROLLOUT
-	db ROAR
-	db TOXIC
-	db ZAP_CANNON
-	db ROCK_SMASH
-	db PSYCH_UP
-	db HIDDEN_POWER
-	db SUNNY_DAY
-	db SWEET_SCENT
-	db SNORE
-	db BLIZZARD
-	db HYPER_BEAM
-	db ICY_WIND
-	db PROTECT
-	db RAIN_DANCE
-	db GIGA_DRAIN
-	db ENDURE
-	db FRUSTRATION
-	db SOLARBEAM
-	db IRON_TAIL
-	db DRAGONBREATH
-	db THUNDER
-	db EARTHQUAKE
-	db RETURN
-	db DIG
-	db PSYCHIC_M
-	db SHADOW_BALL
-	db MUD_SLAP
-	db DOUBLE_TEAM
-	db ICE_PUNCH
-	db SWAGGER
-	db SLEEP_TALK
-	db SLUDGE_BOMB
-	db SANDSTORM
-	db FIRE_BLAST
-	db SWIFT
-	db DEFENSE_CURL
-	db THUNDERPUNCH
-	db DREAM_EATER
-	db DETECT
-	db REST
-	db ATTRACT
-	db THIEF
-	db STEEL_WING
-	db FIRE_PUNCH
-	db FURY_CUTTER
-	db NIGHTMARE
-	db CUT
-	db FLY
-	db SURF
-	db STRENGTH
-	db FLASH
-	db WHIRLPOOL
-	db WATERFALL
-
-; Move tutor
-	db FLAMETHROWER
-	db THUNDERBOLT
-	db ICE_BEAM
-
-	db 0 ; end
+INCLUDE "data/tmhm_moves.asm"
 ; 116b7
--- a/engine/wildmons.asm
+++ b/engine/wildmons.asm
@@ -271,7 +271,7 @@
 	inc hl
 	inc hl
 	call CheckOnWater
-	ld de, .WaterMonTable
+	ld de, WaterMonProbTable
 	jr z, .watermon
 	inc hl
 	inc hl
@@ -278,7 +278,7 @@
 	ld a, [TimeOfDay]
 	ld bc, $e
 	call AddNTimes
-	ld de, .GrassMonTable
+	ld de, GrassMonProbTable
 
 .watermon
 ; hl contains the pointer to the wild mon data, let's save that to the stack
@@ -357,22 +357,8 @@
 	ret
 ; 2a1cb
 
-.GrassMonTable: ; 2a1cb
-	db 30,  $0 ; 30% chance
-	db 60,  $2 ; 30% chance
-	db 80,  $4 ; 20% chance
-	db 90,  $6 ; 10% chance
-	db 95,  $8 ;  5% chance
-	db 99,  $a ;  4% chance
-	db 100, $c ;  1% chance
-; 2a1d9
+INCLUDE "data/wild/probabilities.asm"
 
-.WaterMonTable: ; 2a1d9
-	db 60,  $0 ; 60% chance
-	db 90,  $2 ; 30% chance
-	db 100, $4 ; 10% chance
-; 2a1df
-
 CheckRepelEffect:: ; 2a1df
 ; If there is no active Repel, there's no need to be here.
 	ld a, [wRepelEffect]
@@ -799,27 +785,7 @@
 ; 2a40f
 
 RoamMaps: ; 2a40f
-; Maps that roaming monsters can be on,
-; and possible maps they can jump to.
-; Notably missing are Route 40 and
-; Route 41, which are water routes.
-	roam_map ROUTE_29, 2, ROUTE_30, ROUTE_46
-	roam_map ROUTE_30, 2, ROUTE_29, ROUTE_31
-	roam_map ROUTE_31, 3, ROUTE_30, ROUTE_32, ROUTE_36
-	roam_map ROUTE_32, 3, ROUTE_36, ROUTE_31, ROUTE_33
-	roam_map ROUTE_33, 2, ROUTE_32, ROUTE_34
-	roam_map ROUTE_34, 2, ROUTE_33, ROUTE_35
-	roam_map ROUTE_35, 2, ROUTE_34, ROUTE_36
-	roam_map ROUTE_36, 4, ROUTE_35, ROUTE_31, ROUTE_32, ROUTE_37
-	roam_map ROUTE_37, 3, ROUTE_36, ROUTE_38, ROUTE_42
-	roam_map ROUTE_38, 3, ROUTE_37, ROUTE_39, ROUTE_42
-	roam_map ROUTE_39, 1, ROUTE_38
-	roam_map ROUTE_42, 4, ROUTE_43, ROUTE_44, ROUTE_37, ROUTE_38
-	roam_map ROUTE_43, 2, ROUTE_42, ROUTE_44
-	roam_map ROUTE_44, 3, ROUTE_42, ROUTE_43, ROUTE_45
-	roam_map ROUTE_45, 2, ROUTE_44, ROUTE_46
-	roam_map ROUTE_46, 2, ROUTE_45, ROUTE_29
-	db -1
+INCLUDE "data/wild/roammon_maps.asm"
 ; 2a4a0
 
 ValidateTempWildMonSpecies: ; 2a4a0
--- a/event/happiness_egg.asm
+++ b/event/happiness_egg.asm
@@ -55,11 +55,11 @@
 
 	push de
 	ld a, [de]
-	cp 100
+	cp HAPPINESS_THRESHOLD_1
 	ld e, 0
 	jr c, .ok
 	inc e
-	cp 200
+	cp HAPPINESS_THRESHOLD_2
 	jr c, .ok
 	inc e
 
@@ -73,7 +73,7 @@
 	ld d, 0
 	add hl, de
 	ld a, [hl]
-	cp 100
+	cp $64 ; $80?
 	pop de
 
 	ld a, [de]
@@ -103,25 +103,7 @@
 	ret
 
 .Actions:
-	db  +5,  +3,  +2 ; Gained a level
-	db  +5,  +3,  +2 ; Vitamin
-	db  +1,  +1,  +0 ; X Item
-	db  +3,  +2,  +1 ; Battled a Gym Leader
-	db  +1,  +1,  +0 ; Learned a move
-	db  -1,  -1,  -1 ; Lost to an enemy
-	db  -5,  -5, -10 ; Fainted due to poison
-	db  -5,  -5, -10 ; Lost to a much stronger enemy
-	db  +1,  +1,  +1 ; Haircut (Y1)
-	db  +3,  +3,  +1 ; Haircut (Y2)
-	db  +5,  +5,  +2 ; Haircut (Y3)
-	db  +1,  +1,  +1 ; Haircut (O1)
-	db  +3,  +3,  +1 ; Haircut (O2)
-	db +10, +10,  +4 ; Haircut (O3)
-	db  -5,  -5, -10 ; Used Heal Powder or Energypowder (bitter)
-	db -10, -10, -15 ; Used Energy Root (bitter)
-	db -15, -15, -20 ; Used Revival Herb (bitter)
-	db  +3,  +3,  +1 ; Grooming
-	db +10,  +6,  +4 ; Gained a level in the place where it was caught
+INCLUDE "data/happiness_changes.asm"
 
 StepHappiness:: ; 725a
 ; Raise the party's happiness by 1 point every other step cycle.
@@ -165,7 +147,7 @@
 	jr z, .day_care_lady
 
 	ld a, [wBreedMon1Level] ; level
-	cp 100
+	cp MAX_LEVEL
 	jr nc, .day_care_lady
 	ld hl, wBreedMon1Exp + 2 ; exp
 	inc [hl]
@@ -187,7 +169,7 @@
 	jr z, .check_egg
 
 	ld a, [wBreedMon2Level] ; level
-	cp 100
+	cp MAX_LEVEL
 	jr nc, .check_egg
 	ld hl, wBreedMon2Exp + 2 ; exp
 	inc [hl]
--- a/event/mom_phone.asm
+++ b/event/mom_phone.asm
@@ -80,11 +80,11 @@
 
 .check_have_2300
 	ld hl, hMoneyTemp
-	ld [hl], (2300 / $10000) ; $00
+	ld [hl], MOM_MONEY / $10000
 	inc hl
-	ld [hl], ((2300 % $10000) / $100) ; $08
+	ld [hl], MOM_MONEY / $100 % $100
 	inc hl
-	ld [hl], (2300 % $100) ; $fc
+	ld [hl], MOM_MONEY % $100
 .loop
 	ld de, MomItemTriggerBalance
 	ld bc, wMomsMoney
@@ -212,31 +212,7 @@
 	ret
 ; fd136
 
-momitem: macro
-; money to trigger, cost, kind, item
-	dt \1
-	dt \2
-	db \3, \4
-ENDM
-
-MomItems_1: ; fd136
-	momitem      0,   600, MOM_ITEM, SUPER_POTION
-	momitem      0,    90, MOM_ITEM, ANTIDOTE
-	momitem      0,   180, MOM_ITEM, POKE_BALL
-	momitem      0,   450, MOM_ITEM, ESCAPE_ROPE
-	momitem      0,   500, MOM_ITEM, GREAT_BALL
-MomItems_2: ; fd15e
-	momitem    900,   600, MOM_ITEM, SUPER_POTION
-	momitem   4000,   270, MOM_ITEM, REPEL
-	momitem   7000,   600, MOM_ITEM, SUPER_POTION
-	momitem  10000,  1800, MOM_DOLL, DECO_CHARMANDER_DOLL
-	momitem  15000,  3000, MOM_ITEM, MOON_STONE
-	momitem  19000,   600, MOM_ITEM, SUPER_POTION
-	momitem  30000,  4800, MOM_DOLL, DECO_CLEFAIRY_DOLL
-	momitem  40000,   900, MOM_ITEM, HYPER_POTION
-	momitem  50000,  8000, MOM_DOLL, DECO_PIKACHU_DOLL
-	momitem 100000, 22800, MOM_DOLL, DECO_BIG_SNORLAX_DOLL
-; fd1ae
+INCLUDE "data/mom_phone_items.asm"
 
 	db 0, 0, 0 ; XXX
 
--- a/event/overworld.asm
+++ b/event/overworld.asm
@@ -277,53 +277,9 @@
 	xor a
 	ret
 
-CutTreeBlockPointers: ; c862
-; Which tileset are we in?
-	dbw TILESET_JOHTO_1, .johto1
-	dbw TILESET_JOHTO_2, .johto2
-	dbw TILESET_KANTO, .kanto
-	dbw TILESET_PARK, .park
-	dbw TILESET_ILEX_FOREST, .ilex
-	db -1
 
-.johto1 ; Johto OW
-; Which meta tile are we facing, which should we replace it with, and which animation?
-	db $03, $02, $01 ; grass
-	db $5b, $3c, $00 ; tree
-	db $5f, $3d, $00 ; tree
-	db $63, $3f, $00 ; tree
-	db $67, $3e, $00 ; tree
-	db -1
+INCLUDE "data/hm_blocks.asm"
 
-.johto2 ; Goldenrod area
-	db $03, $02, $01 ; grass
-	db -1
-
-.kanto ; Kanto OW
-	db $0b, $0a, $01 ; grass
-	db $32, $6d, $00 ; tree
-	db $33, $6c, $00 ; tree
-	db $34, $6f, $00 ; tree
-	db $35, $4c, $00 ; tree
-	db $60, $6e, $00 ; tree
-	db -1
-
-.park ; National Park
-	db $13, $03, $01 ; grass
-	db $03, $04, $01 ; grass
-	db -1
-
-.ilex ; Ilex Forest
-	db $0f, $17, $00
-	db -1
-
-WhirlpoolBlockPointers: ; c8a4
-	dbw TILESET_JOHTO_1, .johto
-	db -1
-
-.johto ; c8a8
-	db $07, $36, $00
-	db -1
 
 OWFlash: ; c8ac
 	call .CheckUseFlash
--- /dev/null
+++ b/gfx/icon_pointers.asm
@@ -1,0 +1,41 @@
+IconPointers:
+; entries correspond to ICON_* constants
+	dw NullIcon
+	dw PoliwagIcon
+	dw JigglypuffIcon
+	dw DiglettIcon
+	dw PikachuIcon
+	dw StaryuIcon
+	dw FishIcon
+	dw BirdIcon
+	dw MonsterIcon
+	dw ClefairyIcon
+	dw OddishIcon
+	dw BugIcon
+	dw GhostIcon
+	dw LaprasIcon
+	dw HumanshapeIcon
+	dw FoxIcon
+	dw EquineIcon
+	dw ShellIcon
+	dw BlobIcon
+	dw SerpentIcon
+	dw VoltorbIcon
+	dw SquirtleIcon
+	dw BulbasaurIcon
+	dw CharmanderIcon
+	dw CaterpillarIcon
+	dw UnownIcon
+	dw GeodudeIcon
+	dw FighterIcon
+	dw EggIcon
+	dw JellyfishIcon
+	dw MothIcon
+	dw BatIcon
+	dw SnorlaxIcon
+	dw HoOhIcon
+	dw LugiaIcon
+	dw GyaradosIcon
+	dw SlowpokeIcon
+	dw SudowoodoIcon
+	dw BigmonIcon
--- /dev/null
+++ b/gfx/icons.asm
@@ -1,0 +1,39 @@
+NullIcon:
+PoliwagIcon:      INCBIN "gfx/icon/poliwag.2bpp" ; 0x8ec0d
+JigglypuffIcon:   INCBIN "gfx/icon/jigglypuff.2bpp" ; 0x8ec8d
+DiglettIcon:      INCBIN "gfx/icon/diglett.2bpp" ; 0x8ed0d
+PikachuIcon:      INCBIN "gfx/icon/pikachu.2bpp" ; 0x8ed8d
+StaryuIcon:       INCBIN "gfx/icon/staryu.2bpp" ; 0x8ee0d
+FishIcon:         INCBIN "gfx/icon/fish.2bpp" ; 0x8ee8d
+BirdIcon:         INCBIN "gfx/icon/bird.2bpp" ; 0x8ef0d
+MonsterIcon:      INCBIN "gfx/icon/monster.2bpp" ; 0x8ef8d
+ClefairyIcon:     INCBIN "gfx/icon/clefairy.2bpp" ; 0x8f00d
+OddishIcon:       INCBIN "gfx/icon/oddish.2bpp" ; 0x8f08d
+BugIcon:          INCBIN "gfx/icon/bug.2bpp" ; 0x8f10d
+GhostIcon:        INCBIN "gfx/icon/ghost.2bpp" ; 0x8f18d
+LaprasIcon:       INCBIN "gfx/icon/lapras.2bpp" ; 0x8f20d
+HumanshapeIcon:   INCBIN "gfx/icon/humanshape.2bpp" ; 0x8f28d
+FoxIcon:          INCBIN "gfx/icon/fox.2bpp" ; 0x8f30d
+EquineIcon:       INCBIN "gfx/icon/equine.2bpp" ; 0x8f38d
+ShellIcon:        INCBIN "gfx/icon/shell.2bpp" ; 0x8f40d
+BlobIcon:         INCBIN "gfx/icon/blob.2bpp" ; 0x8f48d
+SerpentIcon:      INCBIN "gfx/icon/serpent.2bpp" ; 0x8f50d
+VoltorbIcon:      INCBIN "gfx/icon/voltorb.2bpp" ; 0x8f58d
+SquirtleIcon:     INCBIN "gfx/icon/squirtle.2bpp" ; 0x8f60d
+BulbasaurIcon:    INCBIN "gfx/icon/bulbasaur.2bpp" ; 0x8f68d
+CharmanderIcon:   INCBIN "gfx/icon/charmander.2bpp" ; 0x8f70d
+CaterpillarIcon:  INCBIN "gfx/icon/caterpillar.2bpp" ; 0x8f78d
+UnownIcon:        INCBIN "gfx/icon/unown.2bpp" ; 0x8f80d
+GeodudeIcon:      INCBIN "gfx/icon/geodude.2bpp" ; 0x8f88d
+FighterIcon:      INCBIN "gfx/icon/fighter.2bpp" ; 0x8f90d
+EggIcon:          INCBIN "gfx/icon/egg.2bpp" ; 0x8f98d
+JellyfishIcon:    INCBIN "gfx/icon/jellyfish.2bpp" ; 0x8fa0d
+MothIcon:         INCBIN "gfx/icon/moth.2bpp" ; 0x8fa8d
+BatIcon:          INCBIN "gfx/icon/bat.2bpp" ; 0x8fb0d
+SnorlaxIcon:      INCBIN "gfx/icon/snorlax.2bpp" ; 0x8fb8d
+HoOhIcon:         INCBIN "gfx/icon/ho_oh.2bpp" ; 0x8fc0d
+LugiaIcon:        INCBIN "gfx/icon/lugia.2bpp" ; 0x8fc8d
+GyaradosIcon:     INCBIN "gfx/icon/gyarados.2bpp" ; 0x8fd0d
+SlowpokeIcon:     INCBIN "gfx/icon/slowpoke.2bpp" ; 0x8fd8d
+SudowoodoIcon:    INCBIN "gfx/icon/sudowoodo.2bpp" ; 0x8fe0d
+BigmonIcon:       INCBIN "gfx/icon/bigmon.2bpp" ; 0x8fe8d
--- a/macros/map.asm
+++ b/macros/map.asm
@@ -212,15 +212,3 @@
 	db \1, \2
 	dw \3
 endm
-
-
-roam_map: macro
-; A map and an arbitrary number of some more maps.
-	map \1
-	db  \2
-rept \2
-	map \3
-	shift
-endr
-	db 0
-endm
--- a/main.asm
+++ b/main.asm
@@ -2350,7 +2350,9 @@
 	ld c, $0
 	ret
 
-INCLUDE "engine/map_triggers.asm"
+MapTriggers:: ; 4d01e
+INCLUDE "data/map_triggers.asm"
+; 4d15b
 
 _LoadMapPart:: ; 4d15b
 	ld hl, wMisc
@@ -6063,8 +6065,8 @@
 
 SECTION "bank7E", ROMX
 
-INCLUDE "data/battle_tower.asm"
-INCLUDE "data/odd_eggs.asm"
+INCLUDE "engine/battle_tower.asm"
+INCLUDE "engine/odd_eggs.asm"
 
 SECTION "bank7F", ROMX
 
--- a/maps/BlackthornEmysHouse.asm
+++ b/maps/BlackthornEmysHouse.asm
@@ -11,7 +11,7 @@
 Emy:
 	faceplayer
 	opentext
-	trade $3
+	trade NPCTRADE_EMY
 	waitbutton
 	closetext
 	end
--- a/maps/GoldenrodDeptStore5F.asm
+++ b/maps/GoldenrodDeptStore5F.asm
@@ -126,7 +126,7 @@
 Mike:
 	faceplayer
 	opentext
-	trade $0
+	trade NPCTRADE_MIKE
 	waitbutton
 	closetext
 	end
--- a/maps/OlivineTimsHouse.asm
+++ b/maps/OlivineTimsHouse.asm
@@ -11,7 +11,7 @@
 Tim:
 	faceplayer
 	opentext
-	trade $2
+	trade NPCTRADE_TIM
 	waitbutton
 	closetext
 	end
--- a/maps/PewterPokecenter1F.asm
+++ b/maps/PewterPokecenter1F.asm
@@ -32,7 +32,7 @@
 Chris:
 	faceplayer
 	opentext
-	trade $4
+	trade NPCTRADE_CHRIS
 	waitbutton
 	closetext
 	end
--- a/maps/PowerPlant.asm
+++ b/maps/PowerPlant.asm
@@ -191,7 +191,7 @@
 Forest:
 	faceplayer
 	opentext
-	trade $6
+	trade NPCTRADE_FOREST
 	waitbutton
 	closetext
 	end
--- a/maps/Route14.asm
+++ b/maps/Route14.asm
@@ -14,7 +14,7 @@
 Kim:
 	faceplayer
 	opentext
-	trade $5
+	trade NPCTRADE_KIM
 	waitbutton
 	closetext
 	end
--- a/maps/VioletOnixTradeHouse.asm
+++ b/maps/VioletOnixTradeHouse.asm
@@ -15,7 +15,7 @@
 Kyle:
 	faceplayer
 	opentext
-	trade $1
+	trade NPCTRADE_KYLE
 	waitbutton
 	closetext
 	end
--- a/menu/mon_icons.asm
+++ /dev/null
@@ -1,349 +1,0 @@
-ReadMonMenuIcon: ; 8eab3
-	cp EGG
-	jr z, .egg
-	dec a
-	ld hl, MonMenuIcons
-	ld e, a
-	ld d, 0
-	add hl, de
-	ld a, [hl]
-	ret
-.egg
-	ld a, ICON_EGG
-	ret
-; 8eac4
-
-MonMenuIcons: ; 8eac4
-	db ICON_BULBASAUR    ; BULBASAUR
-	db ICON_BULBASAUR    ; IVYSAUR
-	db ICON_BULBASAUR    ; VENUSAUR
-	db ICON_CHARMANDER   ; CHARMANDER
-	db ICON_CHARMANDER   ; CHARMELEON
-	db ICON_BIGMON       ; CHARIZARD
-	db ICON_SQUIRTLE     ; SQUIRTLE
-	db ICON_SQUIRTLE     ; WARTORTLE
-	db ICON_SQUIRTLE     ; BLASTOISE
-	db ICON_CATERPILLAR  ; CATERPIE
-	db ICON_CATERPILLAR  ; METAPOD
-	db ICON_MOTH         ; BUTTERFREE
-	db ICON_CATERPILLAR  ; WEEDLE
-	db ICON_CATERPILLAR  ; KAKUNA
-	db ICON_BUG          ; BEEDRILL
-	db ICON_BIRD         ; PIDGEY
-	db ICON_BIRD         ; PIDGEOTTO
-	db ICON_BIRD         ; PIDGEOT
-	db ICON_FOX          ; RATTATA
-	db ICON_FOX          ; RATICATE
-	db ICON_BIRD         ; SPEAROW
-	db ICON_BIRD         ; FEAROW
-	db ICON_SERPENT      ; EKANS
-	db ICON_SERPENT      ; ARBOK
-	db ICON_PIKACHU      ; PIKACHU
-	db ICON_PIKACHU      ; RAICHU
-	db ICON_MONSTER      ; SANDSHREW
-	db ICON_MONSTER      ; SANDSLASH
-	db ICON_FOX          ; NIDORAN_F
-	db ICON_FOX          ; NIDORINA
-	db ICON_MONSTER      ; NIDOQUEEN
-	db ICON_FOX          ; NIDORAN_M
-	db ICON_FOX          ; NIDORINO
-	db ICON_MONSTER      ; NIDOKING
-	db ICON_CLEFAIRY     ; CLEFAIRY
-	db ICON_CLEFAIRY     ; CLEFABLE
-	db ICON_FOX          ; VULPIX
-	db ICON_FOX          ; NINETALES
-	db ICON_JIGGLYPUFF   ; JIGGLYPUFF
-	db ICON_JIGGLYPUFF   ; WIGGLYTUFF
-	db ICON_BAT          ; ZUBAT
-	db ICON_BAT          ; GOLBAT
-	db ICON_ODDISH       ; ODDISH
-	db ICON_ODDISH       ; GLOOM
-	db ICON_ODDISH       ; VILEPLUME
-	db ICON_BUG          ; PARAS
-	db ICON_BUG          ; PARASECT
-	db ICON_CATERPILLAR  ; VENONAT
-	db ICON_MOTH         ; VENOMOTH
-	db ICON_DIGLETT      ; DIGLETT
-	db ICON_DIGLETT      ; DUGTRIO
-	db ICON_FOX          ; MEOWTH
-	db ICON_FOX          ; PERSIAN
-	db ICON_MONSTER      ; PSYDUCK
-	db ICON_MONSTER      ; GOLDUCK
-	db ICON_FIGHTER      ; MANKEY
-	db ICON_FIGHTER      ; PRIMEAPE
-	db ICON_FOX          ; GROWLITHE
-	db ICON_FOX          ; ARCANINE
-	db ICON_POLIWAG      ; POLIWAG
-	db ICON_POLIWAG      ; POLIWHIRL
-	db ICON_POLIWAG      ; POLIWRATH
-	db ICON_HUMANSHAPE   ; ABRA
-	db ICON_HUMANSHAPE   ; KADABRA
-	db ICON_HUMANSHAPE   ; ALAKAZAM
-	db ICON_FIGHTER      ; MACHOP
-	db ICON_FIGHTER      ; MACHOKE
-	db ICON_FIGHTER      ; MACHAMP
-	db ICON_ODDISH       ; BELLSPROUT
-	db ICON_ODDISH       ; WEEPINBELL
-	db ICON_ODDISH       ; VICTREEBEL
-	db ICON_JELLYFISH    ; TENTACOOL
-	db ICON_JELLYFISH    ; TENTACRUEL
-	db ICON_GEODUDE      ; GEODUDE
-	db ICON_GEODUDE      ; GRAVELER
-	db ICON_GEODUDE      ; GOLEM
-	db ICON_EQUINE       ; PONYTA
-	db ICON_EQUINE       ; RAPIDASH
-	db ICON_SLOWPOKE     ; SLOWPOKE
-	db ICON_SLOWPOKE     ; SLOWBRO
-	db ICON_VOLTORB      ; MAGNEMITE
-	db ICON_VOLTORB      ; MAGNETON
-	db ICON_BIRD         ; FARFETCH_D
-	db ICON_BIRD         ; DODUO
-	db ICON_BIRD         ; DODRIO
-	db ICON_LAPRAS       ; SEEL
-	db ICON_LAPRAS       ; DEWGONG
-	db ICON_BLOB         ; GRIMER
-	db ICON_BLOB         ; MUK
-	db ICON_SHELL        ; SHELLDER
-	db ICON_SHELL        ; CLOYSTER
-	db ICON_GHOST        ; GASTLY
-	db ICON_GHOST        ; HAUNTER
-	db ICON_GHOST        ; GENGAR
-	db ICON_SERPENT      ; ONIX
-	db ICON_HUMANSHAPE   ; DROWZEE
-	db ICON_HUMANSHAPE   ; HYPNO
-	db ICON_SHELL        ; KRABBY
-	db ICON_SHELL        ; KINGLER
-	db ICON_VOLTORB      ; VOLTORB
-	db ICON_VOLTORB      ; ELECTRODE
-	db ICON_ODDISH       ; EXEGGCUTE
-	db ICON_ODDISH       ; EXEGGUTOR
-	db ICON_MONSTER      ; CUBONE
-	db ICON_MONSTER      ; MAROWAK
-	db ICON_FIGHTER      ; HITMONLEE
-	db ICON_FIGHTER      ; HITMONCHAN
-	db ICON_MONSTER      ; LICKITUNG
-	db ICON_BLOB         ; KOFFING
-	db ICON_BLOB         ; WEEZING
-	db ICON_EQUINE       ; RHYHORN
-	db ICON_MONSTER      ; RHYDON
-	db ICON_CLEFAIRY     ; CHANSEY
-	db ICON_ODDISH       ; TANGELA
-	db ICON_MONSTER      ; KANGASKHAN
-	db ICON_FISH         ; HORSEA
-	db ICON_FISH         ; SEADRA
-	db ICON_FISH         ; GOLDEEN
-	db ICON_FISH         ; SEAKING
-	db ICON_STARYU       ; STARYU
-	db ICON_STARYU       ; STARMIE
-	db ICON_HUMANSHAPE   ; MR__MIME
-	db ICON_BUG          ; SCYTHER
-	db ICON_HUMANSHAPE   ; JYNX
-	db ICON_HUMANSHAPE   ; ELECTABUZZ
-	db ICON_HUMANSHAPE   ; MAGMAR
-	db ICON_BUG          ; PINSIR
-	db ICON_EQUINE       ; TAUROS
-	db ICON_FISH         ; MAGIKARP
-	db ICON_GYARADOS     ; GYARADOS
-	db ICON_LAPRAS       ; LAPRAS
-	db ICON_BLOB         ; DITTO
-	db ICON_FOX          ; EEVEE
-	db ICON_FOX          ; VAPOREON
-	db ICON_FOX          ; JOLTEON
-	db ICON_FOX          ; FLAREON
-	db ICON_VOLTORB      ; PORYGON
-	db ICON_SHELL        ; OMANYTE
-	db ICON_SHELL        ; OMASTAR
-	db ICON_SHELL        ; KABUTO
-	db ICON_SHELL        ; KABUTOPS
-	db ICON_BIRD         ; AERODACTYL
-	db ICON_SNORLAX      ; SNORLAX
-	db ICON_BIRD         ; ARTICUNO
-	db ICON_BIRD         ; ZAPDOS
-	db ICON_BIRD         ; MOLTRES
-	db ICON_SERPENT      ; DRATINI
-	db ICON_SERPENT      ; DRAGONAIR
-	db ICON_BIGMON       ; DRAGONITE
-	db ICON_HUMANSHAPE   ; MEWTWO
-	db ICON_HUMANSHAPE   ; MEW
-	db ICON_ODDISH       ; CHIKORITA
-	db ICON_ODDISH       ; BAYLEEF
-	db ICON_ODDISH       ; MEGANIUM
-	db ICON_FOX          ; CYNDAQUIL
-	db ICON_FOX          ; QUILAVA
-	db ICON_FOX          ; TYPHLOSION
-	db ICON_MONSTER      ; TOTODILE
-	db ICON_MONSTER      ; CROCONAW
-	db ICON_MONSTER      ; FERALIGATR
-	db ICON_FOX          ; SENTRET
-	db ICON_FOX          ; FURRET
-	db ICON_BIRD         ; HOOTHOOT
-	db ICON_BIRD         ; NOCTOWL
-	db ICON_BUG          ; LEDYBA
-	db ICON_BUG          ; LEDIAN
-	db ICON_BUG          ; SPINARAK
-	db ICON_BUG          ; ARIADOS
-	db ICON_BAT          ; CROBAT
-	db ICON_FISH         ; CHINCHOU
-	db ICON_FISH         ; LANTURN
-	db ICON_PIKACHU      ; PICHU
-	db ICON_CLEFAIRY     ; CLEFFA
-	db ICON_JIGGLYPUFF   ; IGGLYBUFF
-	db ICON_CLEFAIRY     ; TOGEPI
-	db ICON_BIRD         ; TOGETIC
-	db ICON_BIRD         ; NATU
-	db ICON_BIRD         ; XATU
-	db ICON_FOX          ; MAREEP
-	db ICON_MONSTER      ; FLAAFFY
-	db ICON_MONSTER      ; AMPHAROS
-	db ICON_ODDISH       ; BELLOSSOM
-	db ICON_JIGGLYPUFF   ; MARILL
-	db ICON_JIGGLYPUFF   ; AZUMARILL
-	db ICON_SUDOWOODO    ; SUDOWOODO
-	db ICON_POLIWAG      ; POLITOED
-	db ICON_ODDISH       ; HOPPIP
-	db ICON_ODDISH       ; SKIPLOOM
-	db ICON_ODDISH       ; JUMPLUFF
-	db ICON_MONSTER      ; AIPOM
-	db ICON_ODDISH       ; SUNKERN
-	db ICON_ODDISH       ; SUNFLORA
-	db ICON_BUG          ; YANMA
-	db ICON_MONSTER      ; WOOPER
-	db ICON_MONSTER      ; QUAGSIRE
-	db ICON_FOX          ; ESPEON
-	db ICON_FOX          ; UMBREON
-	db ICON_BIRD         ; MURKROW
-	db ICON_SLOWPOKE     ; SLOWKING
-	db ICON_GHOST        ; MISDREAVUS
-	db ICON_UNOWN        ; UNOWN
-	db ICON_GHOST        ; WOBBUFFET
-	db ICON_EQUINE       ; GIRAFARIG
-	db ICON_BUG          ; PINECO
-	db ICON_BUG          ; FORRETRESS
-	db ICON_SERPENT      ; DUNSPARCE
-	db ICON_BUG          ; GLIGAR
-	db ICON_SERPENT      ; STEELIX
-	db ICON_MONSTER      ; SNUBBULL
-	db ICON_MONSTER      ; GRANBULL
-	db ICON_FISH         ; QWILFISH
-	db ICON_BUG          ; SCIZOR
-	db ICON_BUG          ; SHUCKLE
-	db ICON_BUG          ; HERACROSS
-	db ICON_FOX          ; SNEASEL
-	db ICON_MONSTER      ; TEDDIURSA
-	db ICON_MONSTER      ; URSARING
-	db ICON_BLOB         ; SLUGMA
-	db ICON_BLOB         ; MAGCARGO
-	db ICON_EQUINE       ; SWINUB
-	db ICON_EQUINE       ; PILOSWINE
-	db ICON_SHELL        ; CORSOLA
-	db ICON_FISH         ; REMORAID
-	db ICON_FISH         ; OCTILLERY
-	db ICON_MONSTER      ; DELIBIRD
-	db ICON_FISH         ; MANTINE
-	db ICON_BIRD         ; SKARMORY
-	db ICON_FOX          ; HOUNDOUR
-	db ICON_FOX          ; HOUNDOOM
-	db ICON_BIGMON       ; KINGDRA
-	db ICON_EQUINE       ; PHANPY
-	db ICON_EQUINE       ; DONPHAN
-	db ICON_VOLTORB      ; PORYGON2
-	db ICON_EQUINE       ; STANTLER
-	db ICON_MONSTER      ; SMEARGLE
-	db ICON_FIGHTER      ; TYROGUE
-	db ICON_FIGHTER      ; HITMONTOP
-	db ICON_HUMANSHAPE   ; SMOOCHUM
-	db ICON_HUMANSHAPE   ; ELEKID
-	db ICON_HUMANSHAPE   ; MAGBY
-	db ICON_EQUINE       ; MILTANK
-	db ICON_CLEFAIRY     ; BLISSEY
-	db ICON_FOX          ; RAIKOU
-	db ICON_FOX          ; ENTEI
-	db ICON_FOX          ; SUICUNE
-	db ICON_MONSTER      ; LARVITAR
-	db ICON_MONSTER      ; PUPITAR
-	db ICON_MONSTER      ; TYRANITAR
-	db ICON_LUGIA        ; LUGIA
-	db ICON_HO_OH        ; HO_OH
-	db ICON_HUMANSHAPE   ; CELEBI
-
-IconPointers:
-	dw NullIcon
-	dw PoliwagIcon
-	dw JigglypuffIcon
-	dw DiglettIcon
-	dw PikachuIcon
-	dw StaryuIcon
-	dw FishIcon
-	dw BirdIcon
-	dw MonsterIcon
-	dw ClefairyIcon
-	dw OddishIcon
-	dw BugIcon
-	dw GhostIcon
-	dw LaprasIcon
-	dw HumanshapeIcon
-	dw FoxIcon
-	dw EquineIcon
-	dw ShellIcon
-	dw BlobIcon
-	dw SerpentIcon
-	dw VoltorbIcon
-	dw SquirtleIcon
-	dw BulbasaurIcon
-	dw CharmanderIcon
-	dw CaterpillarIcon
-	dw UnownIcon
-	dw GeodudeIcon
-	dw FighterIcon
-	dw EggIcon
-	dw JellyfishIcon
-	dw MothIcon
-	dw BatIcon
-	dw SnorlaxIcon
-	dw HoOhIcon
-	dw LugiaIcon
-	dw GyaradosIcon
-	dw SlowpokeIcon
-	dw SudowoodoIcon
-	dw BigmonIcon
-
-Icons:
-NullIcon:
-PoliwagIcon:      INCBIN "gfx/icon/poliwag.2bpp" ; 0x8ec0d
-JigglypuffIcon:   INCBIN "gfx/icon/jigglypuff.2bpp" ; 0x8ec8d
-DiglettIcon:      INCBIN "gfx/icon/diglett.2bpp" ; 0x8ed0d
-PikachuIcon:      INCBIN "gfx/icon/pikachu.2bpp" ; 0x8ed8d
-StaryuIcon:       INCBIN "gfx/icon/staryu.2bpp" ; 0x8ee0d
-FishIcon:         INCBIN "gfx/icon/fish.2bpp" ; 0x8ee8d
-BirdIcon:         INCBIN "gfx/icon/bird.2bpp" ; 0x8ef0d
-MonsterIcon:      INCBIN "gfx/icon/monster.2bpp" ; 0x8ef8d
-ClefairyIcon:     INCBIN "gfx/icon/clefairy.2bpp" ; 0x8f00d
-OddishIcon:       INCBIN "gfx/icon/oddish.2bpp" ; 0x8f08d
-BugIcon:          INCBIN "gfx/icon/bug.2bpp" ; 0x8f10d
-GhostIcon:        INCBIN "gfx/icon/ghost.2bpp" ; 0x8f18d
-LaprasIcon:       INCBIN "gfx/icon/lapras.2bpp" ; 0x8f20d
-HumanshapeIcon:   INCBIN "gfx/icon/humanshape.2bpp" ; 0x8f28d
-FoxIcon:          INCBIN "gfx/icon/fox.2bpp" ; 0x8f30d
-EquineIcon:       INCBIN "gfx/icon/equine.2bpp" ; 0x8f38d
-ShellIcon:        INCBIN "gfx/icon/shell.2bpp" ; 0x8f40d
-BlobIcon:         INCBIN "gfx/icon/blob.2bpp" ; 0x8f48d
-SerpentIcon:      INCBIN "gfx/icon/serpent.2bpp" ; 0x8f50d
-VoltorbIcon:      INCBIN "gfx/icon/voltorb.2bpp" ; 0x8f58d
-SquirtleIcon:     INCBIN "gfx/icon/squirtle.2bpp" ; 0x8f60d
-BulbasaurIcon:    INCBIN "gfx/icon/bulbasaur.2bpp" ; 0x8f68d
-CharmanderIcon:   INCBIN "gfx/icon/charmander.2bpp" ; 0x8f70d
-CaterpillarIcon:  INCBIN "gfx/icon/caterpillar.2bpp" ; 0x8f78d
-UnownIcon:        INCBIN "gfx/icon/unown.2bpp" ; 0x8f80d
-GeodudeIcon:      INCBIN "gfx/icon/geodude.2bpp" ; 0x8f88d
-FighterIcon:      INCBIN "gfx/icon/fighter.2bpp" ; 0x8f90d
-EggIcon:          INCBIN "gfx/icon/egg.2bpp" ; 0x8f98d
-JellyfishIcon:    INCBIN "gfx/icon/jellyfish.2bpp" ; 0x8fa0d
-MothIcon:         INCBIN "gfx/icon/moth.2bpp" ; 0x8fa8d
-BatIcon:          INCBIN "gfx/icon/bat.2bpp" ; 0x8fb0d
-SnorlaxIcon:      INCBIN "gfx/icon/snorlax.2bpp" ; 0x8fb8d
-HoOhIcon:         INCBIN "gfx/icon/ho_oh.2bpp" ; 0x8fc0d
-LugiaIcon:        INCBIN "gfx/icon/lugia.2bpp" ; 0x8fc8d
-GyaradosIcon:     INCBIN "gfx/icon/gyarados.2bpp" ; 0x8fd0d
-SlowpokeIcon:     INCBIN "gfx/icon/slowpoke.2bpp" ; 0x8fd8d
-SudowoodoIcon:    INCBIN "gfx/icon/sudowoodo.2bpp" ; 0x8fe0d
-BigmonIcon:       INCBIN "gfx/icon/bigmon.2bpp" ; 0x8fe8d
--- a/wram.asm
+++ b/wram.asm
@@ -1613,9 +1613,9 @@
 NEXTU ; d002
 ; mobile participant nicknames
 	ds 4
-wMobileParticipant1Nickname:: ds 6
-wMobileParticipant2Nickname:: ds 6
-wMobileParticipant3Nickname:: ds 6
+wMobileParticipant1Nickname:: ds NAME_LENGTH_JAPANESE
+wMobileParticipant2Nickname:: ds NAME_LENGTH_JAPANESE
+wMobileParticipant3Nickname:: ds NAME_LENGTH_JAPANESE
 
 NEXTU ; d002
 ; earthquake data buffer