summaryrefslogtreecommitdiff
path: root/data
diff options
context:
space:
mode:
Diffstat (limited to 'data')
-rw-r--r--data/audio/notes.asm27
-rw-r--r--data/audio/wave_samples.asm14
-rw-r--r--data/ball_colors.asm16
-rw-r--r--data/base_stats.asm3
-rw-r--r--data/battle_tower.asm209
-rw-r--r--data/bug_contest_winners.asm74
-rw-r--r--data/decoration_attributes.asm63
-rw-r--r--data/default_options.asm18
-rw-r--r--data/egg_move_pointers.asm1
-rw-r--r--data/emote_headers.asm22
-rw-r--r--data/engine_flags.asm206
-rw-r--r--data/evos_attacks_pointers.asm5
-rw-r--r--data/facings.asm264
-rw-r--r--data/field_move_blocks.asm53
-rw-r--r--data/fruit_tree_items.asm33
-rw-r--r--data/growth_rates.asm20
-rw-r--r--data/happiness_changes.asm22
-rw-r--r--data/hm_moves.asm12
-rw-r--r--data/landmarks.asm208
-rw-r--r--data/mail_input_chars.asm19
-rwxr-xr-xdata/map_objects.asm5
-rw-r--r--data/map_triggers.asm89
-rw-r--r--data/mapgroup_roofs.asm31
-rw-r--r--data/mom_phone_items.asm27
-rw-r--r--data/mon_menu_icons.asm255
-rw-r--r--data/mystery_gift/decos.asm40
-rw-r--r--data/mystery_gift/items.asm40
-rw-r--r--data/name_input_chars.asm31
-rw-r--r--data/npc_trades.asm22
-rw-r--r--data/odd_eggs.asm103
-rw-r--r--data/outdoor_sprites.asm696
-rw-r--r--data/phone_contacts.asm51
-rw-r--r--data/phone_special.asm18
-rw-r--r--data/pokedex/entries.asm255
-rw-r--r--data/pokedex/entries_1.asm64
-rw-r--r--data/pokedex/entries_2.asm64
-rw-r--r--data/pokedex/entries_3.asm64
-rw-r--r--data/pokedex/entries_4.asm59
-rw-r--r--data/pokedex/entries_crystal.asm2
-rw-r--r--data/pokedex/entry_pointers.asm75
-rw-r--r--data/pokedex/order_alpha.asm4
-rw-r--r--data/pokedex/order_new.asm4
-rw-r--r--data/pokemon_names.asm1
-rw-r--r--data/spawn_points.asm41
-rwxr-xr-xdata/sprite_anim_frames.asm499
-rw-r--r--[-rwxr-xr-x]data/sprite_anim_oam.asm (renamed from data/sprite_engine.asm)514
-rw-r--r--data/sprite_anim_seqs.asm94
-rw-r--r--data/sprite_mons.asm38
-rw-r--r--data/time_capsule/catch_rate_items.asm19
-rw-r--r--data/time_capsule/mon_order.asm255
-rw-r--r--data/time_capsule/special_stats.asm155
-rw-r--r--data/tmhm_moves.asm69
-rw-r--r--data/wild/bug_contest_mons.asm14
-rw-r--r--data/wild/johto_grass.asm2
-rw-r--r--data/wild/johto_water.asm2
-rw-r--r--data/wild/kanto_grass.asm2
-rw-r--r--data/wild/kanto_water.asm2
-rw-r--r--data/wild/probabilities.asm15
-rw-r--r--data/wild/roammon_maps.asm33
-rw-r--r--data/wild/swarm_grass.asm4
-rw-r--r--data/wild/swarm_water.asm4
-rw-r--r--data/wild/treemon_maps.asm50
-rw-r--r--data/wild/treemons.asm128
63 files changed, 4065 insertions, 1164 deletions
diff --git a/data/audio/notes.asm b/data/audio/notes.asm
new file mode 100644
index 000000000..543672a4a
--- /dev/null
+++ b/data/audio/notes.asm
@@ -0,0 +1,27 @@
+FrequencyTable: ; e8d80
+ dw 0 ; __
+ dw $f82c ; C_
+ dw $f89d ; C#
+ dw $f907 ; D_
+ dw $f96b ; D#
+ dw $f9ca ; E_
+ dw $fa23 ; F_
+ dw $fa77 ; F#
+ dw $fac7 ; G_
+ dw $fb12 ; G#
+ dw $fb58 ; A_
+ dw $fb9b ; A#
+ dw $fbda ; B_
+ dw $fc16 ; C_
+ dw $fc4e ; C#
+ dw $fc83 ; D_
+ dw $fcb5 ; D#
+ dw $fce5 ; E_
+ dw $fd11 ; F_
+ dw $fd3b ; F#
+ dw $fd63 ; G_
+ dw $fd89 ; G#
+ dw $fdac ; A_
+ dw $fdcd ; A#
+ dw $fded ; B_
+; e8db2
diff --git a/data/audio/wave_samples.asm b/data/audio/wave_samples.asm
new file mode 100644
index 000000000..8c5bafa75
--- /dev/null
+++ b/data/audio/wave_samples.asm
@@ -0,0 +1,14 @@
+WaveSamples: ; e8db2
+ ; these are streams of 32 4-bit values used as wavepatterns
+ ; nothing interesting here!
+ dn 0, 2, 4, 6, 8, 10, 12, 14, 15, 15, 15, 14, 14, 13, 13, 12, 12, 11, 10, 9, 8, 7, 6, 5, 4, 4, 3, 3, 2, 2, 1, 1
+ dn 0, 2, 4, 6, 8, 10, 12, 14, 14, 15, 15, 15, 15, 14, 14, 14, 13, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 2, 1, 1
+ dn 1, 3, 6, 9, 11, 13, 14, 14, 14, 14, 15, 15, 15, 15, 14, 13, 13, 14, 15, 15, 15, 15, 14, 14, 14, 14, 13, 11, 9, 6, 3, 1
+ dn 0, 2, 4, 6, 8, 10, 12, 13, 14, 15, 15, 14, 13, 14, 15, 15, 14, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0
+ dn 0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 12, 13, 14, 14, 15, 7, 7, 15, 14, 14, 13, 12, 10, 8, 7, 6, 5, 4, 3, 2, 1, 0
+ dn 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 3, 3, 2, 2, 1, 1, 15, 15, 14, 14, 12, 12, 10, 10, 8, 8, 10, 10, 12, 12, 14, 14
+ dn 0, 2, 4, 6, 8, 10, 12, 14, 12, 11, 10, 9, 8, 7, 6, 5, 15, 15, 15, 14, 14, 13, 13, 12, 4, 4, 3, 3, 2, 2, 1, 1
+ dn 12, 0, 10, 9, 8, 7, 15, 5, 15, 15, 15, 14, 14, 13, 13, 12, 4, 4, 3, 3, 2, 2, 15, 1, 0, 2, 4, 6, 8, 10, 12, 14
+ dn 4, 4, 3, 3, 2, 2, 1, 15, 0, 0, 4, 6, 8, 10, 12, 14, 15, 8, 15, 14, 14, 13, 13, 12, 12, 11, 10, 9, 8, 7, 6, 5
+ dn 1, 1, 0, 0, 0, 0, 0, 8, 0, 0, 1, 3, 5, 7, 9, 10, 11, 4, 11, 10, 10, 9, 9, 8, 8, 7, 6, 5, 4, 3, 2, 1
+; e8e52
diff --git a/data/ball_colors.asm b/data/ball_colors.asm
new file mode 100644
index 000000000..c3ba9d2b4
--- /dev/null
+++ b/data/ball_colors.asm
@@ -0,0 +1,16 @@
+; colors of balls thrown in battle
+
+BallColors: ; cd26c (33:526c)
+ db MASTER_BALL, PAL_BATTLE_OB_GREEN
+ db ULTRA_BALL, PAL_BATTLE_OB_YELLOW
+ db GREAT_BALL, PAL_BATTLE_OB_BLUE
+ db POKE_BALL, PAL_BATTLE_OB_RED
+ db HEAVY_BALL, PAL_BATTLE_OB_GRAY
+ db LEVEL_BALL, PAL_BATTLE_OB_BROWN
+ db LURE_BALL, PAL_BATTLE_OB_BLUE
+ db FAST_BALL, PAL_BATTLE_OB_BLUE
+ db FRIEND_BALL, PAL_BATTLE_OB_YELLOW
+ db MOON_BALL, PAL_BATTLE_OB_GRAY
+ db LOVE_BALL, PAL_BATTLE_OB_RED
+ db -1, PAL_BATTLE_OB_GRAY
+; cd284
diff --git a/data/base_stats.asm b/data/base_stats.asm
index b3e67d9a8..808a996a6 100644
--- a/data/base_stats.asm
+++ b/data/base_stats.asm
@@ -1,6 +1,5 @@
-BaseData0::
+BaseData::
INCLUDE "data/base_stats/bulbasaur.asm"
-BaseData1::
INCLUDE "data/base_stats/ivysaur.asm"
INCLUDE "data/base_stats/venusaur.asm"
INCLUDE "data/base_stats/charmander.asm"
diff --git a/data/battle_tower.asm b/data/battle_tower.asm
index 8997a53b8..2c78ffb82 100644
--- 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.
diff --git a/data/bug_contest_winners.asm b/data/bug_contest_winners.asm
new file mode 100644
index 000000000..8529ed0f0
--- /dev/null
+++ b/data/bug_contest_winners.asm
@@ -0,0 +1,74 @@
+BugContestantPointers: ; 13783
+ dw BugContestant_BugCatcherDon ; This reverts back to the player
+ dw BugContestant_BugCatcherDon
+ dw BugContestant_BugCatcherEd
+ dw BugContestant_CooltrainerMNick
+ dw BugContestant_PokefanMWilliam
+ dw BugContestant_BugCatcherBenny
+ dw BugContestant_CamperBarry
+ dw BugContestant_PicnickerCindy
+ dw BugContestant_BugCatcherJosh
+ dw BugContestant_YoungsterSamuel
+ dw BugContestant_SchoolboyKipp
+; 13799
+
+BugContestant_BugCatcherDon:
+ db BUG_CATCHER, DON
+ dbw KAKUNA, 300
+ dbw METAPOD, 285
+ dbw CATERPIE, 226
+
+BugContestant_BugCatcherEd:
+ db BUG_CATCHER, ED
+ dbw BUTTERFREE, 286
+ dbw BUTTERFREE, 251
+ dbw CATERPIE, 237
+
+BugContestant_CooltrainerMNick:
+ db COOLTRAINERM, NICK
+ dbw SCYTHER, 357
+ dbw BUTTERFREE, 349
+ dbw PINSIR, 368
+
+BugContestant_PokefanMWilliam:
+ db POKEFANM, WILLIAM
+ dbw PINSIR, 332
+ dbw BUTTERFREE, 324
+ dbw VENONAT, 321
+
+BugContestant_BugCatcherBenny:
+ db BUG_CATCHER, BUG_CATCHER_BENNY
+ dbw BUTTERFREE, 318
+ dbw WEEDLE, 295
+ dbw CATERPIE, 285
+
+BugContestant_CamperBarry:
+ db CAMPER, BARRY
+ dbw PINSIR, 366
+ dbw VENONAT, 329
+ dbw KAKUNA, 314
+
+BugContestant_PicnickerCindy:
+ db PICNICKER, CINDY
+ dbw BUTTERFREE, 341
+ dbw METAPOD, 301
+ dbw CATERPIE, 264
+
+BugContestant_BugCatcherJosh:
+ db BUG_CATCHER, JOSH
+ dbw SCYTHER, 326
+ dbw BUTTERFREE, 292
+ dbw METAPOD, 282
+
+BugContestant_YoungsterSamuel:
+ db YOUNGSTER, SAMUEL
+ dbw WEEDLE, 270
+ dbw PINSIR, 282
+ dbw CATERPIE, 251
+
+BugContestant_SchoolboyKipp:
+ db SCHOOLBOY, KIPP
+ dbw VENONAT, 267
+ dbw PARAS, 254
+ dbw KAKUNA, 259
+; 13807
diff --git a/data/decoration_attributes.asm b/data/decoration_attributes.asm
new file mode 100644
index 000000000..209662a6f
--- /dev/null
+++ b/data/decoration_attributes.asm
@@ -0,0 +1,63 @@
+decoration: MACRO
+ ; type, name, command, event flag, tile/sprite
+ db \1, \2, \3
+ dw \4
+ db \5
+ENDM
+
+DecorationAttributes: ; 26a4f
+; entries correspond to deco constants
+ 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
+; 26b8d
diff --git a/data/default_options.asm b/data/default_options.asm
new file mode 100644
index 000000000..b1916b88c
--- /dev/null
+++ b/data/default_options.asm
@@ -0,0 +1,18 @@
+DefaultOptions: ; 14f7c
+; 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
+; 14f84
diff --git a/data/egg_move_pointers.asm b/data/egg_move_pointers.asm
index 11665f23e..caa9ed7c0 100644
--- a/data/egg_move_pointers.asm
+++ b/data/egg_move_pointers.asm
@@ -254,3 +254,4 @@ endc
dw NoEggMoves
dw NoEggMoves
dw NoEggMoves
+; 0x23d07
diff --git a/data/emote_headers.asm b/data/emote_headers.asm
new file mode 100644
index 000000000..2618d3b0a
--- /dev/null
+++ b/data/emote_headers.asm
@@ -0,0 +1,22 @@
+emote_header: MACRO
+; graphics pointer, length, starting tile
+ dw \1
+ db \2 tiles, BANK(\1)
+ dw VTiles1 tile \3
+ENDM
+
+EmotesPointers: ; 144d
+; 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
+; 14495
diff --git a/data/engine_flags.asm b/data/engine_flags.asm
new file mode 100644
index 000000000..6eb5f6065
--- /dev/null
+++ b/data/engine_flags.asm
@@ -0,0 +1,206 @@
+engine_flag: MACRO
+ dwb \1, 1 << \2
+ENDM
+
+EngineFlags: ; 80462
+ ; 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
+
+; 80648
diff --git a/data/evos_attacks_pointers.asm b/data/evos_attacks_pointers.asm
index 4ce10b105..f6582e786 100644
--- a/data/evos_attacks_pointers.asm
+++ b/data/evos_attacks_pointers.asm
@@ -1,6 +1,4 @@
-; Pointer table for evolutions and attacks.
-
-; These are grouped together since they're both checked at level-up.
+; Evolutions and attacks are grouped together since they're both checked at level-up.
EvosAttacksPointers:: ; 0x425b1
dw BulbasaurEvosAttacks
@@ -254,3 +252,4 @@ EvosAttacksPointers:: ; 0x425b1
dw LugiaEvosAttacks
dw HoOhEvosAttacks
dw CelebiEvosAttacks
+; 0x427a7
diff --git a/data/facings.asm b/data/facings.asm
new file mode 100644
index 000000000..4d2a55364
--- /dev/null
+++ b/data/facings.asm
@@ -0,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
diff --git a/data/field_move_blocks.asm b/data/field_move_blocks.asm
new file mode 100644
index 000000000..5e9bbc1f4
--- /dev/null
+++ b/data/field_move_blocks.asm
@@ -0,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
diff --git a/data/fruit_tree_items.asm b/data/fruit_tree_items.asm
new file mode 100644
index 000000000..67b8f51ad
--- /dev/null
+++ b/data/fruit_tree_items.asm
@@ -0,0 +1,33 @@
+FruitTreeItems: ; 44097
+; 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
+; 440b5
diff --git a/data/growth_rates.asm b/data/growth_rates.asm
new file mode 100644
index 000000000..4a1564515
--- /dev/null
+++ b/data/growth_rates.asm
@@ -0,0 +1,20 @@
+growth_rate: MACRO
+; [1]/[2]*n**3 + [3]*n**2 + [4]*n - [5]
+ dn \1, \2
+ if \3 & $80 ; signed
+ db -\3 | $80
+ else
+ db \3
+ endc
+ db \4, \5
+ENDM
+
+GrowthRates: ; 50efa
+; entries correspond to base growth rate constants (see constants/pokemon_data_constants.asm)
+ growth_rate 1, 1, 0, 0, 0 ; Medium Fast
+ growth_rate 3, 4, 10, 0, 30 ; Slightly Fast
+ growth_rate 3, 4, 20, 0, 70 ; Slightly Slow
+ growth_rate 6, 5, -15, 100, 140 ; Medium Slow
+ growth_rate 4, 5, 0, 0, 0 ; Fast
+ growth_rate 5, 4, 0, 0, 0 ; Slow
+; 50f12
diff --git a/data/happiness_changes.asm b/data/happiness_changes.asm
new file mode 100644
index 000000000..de60ea32d
--- /dev/null
+++ b/data/happiness_changes.asm
@@ -0,0 +1,22 @@
+HappinessChanges:
+; 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
diff --git a/data/hm_moves.asm b/data/hm_moves.asm
new file mode 100644
index 000000000..ac9f1f542
--- /dev/null
+++ b/data/hm_moves.asm
@@ -0,0 +1,12 @@
+; HM moves can't be forgotten
+
+HMMoves: ; 34f0
+ db CUT
+ db FLY
+ db SURF
+ db STRENGTH
+ db FLASH
+ db WATERFALL
+ db WHIRLPOOL
+ db -1 ; end
+; 34f8
diff --git a/data/landmarks.asm b/data/landmarks.asm
new file mode 100644
index 000000000..0b927aaf6
--- /dev/null
+++ b/data/landmarks.asm
@@ -0,0 +1,208 @@
+landmark: MACRO
+; x, y, name
+ db \1, \2
+ dw \3
+ENDM
+
+Landmarks: ; 0x1ca8c3
+; 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
+; 0x1caa43
+
+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@"
diff --git a/data/mail_input_chars.asm b/data/mail_input_chars.asm
new file mode 100644
index 000000000..befdc0cf7
--- /dev/null
+++ b/data/mail_input_chars.asm
@@ -0,0 +1,19 @@
+; see engine/naming_screen.asm
+
+MailEntry_Uppercase: ; 122dd
+ db "A B C D E F G H I J"
+ db "K L M N O P Q R S T"
+ db "U V W X Y Z , ? !"
+ db "1 2 3 4 5 6 7 8 9 0"
+ db "<PK> <MN> <PO> <KE> é ♂ ♀ ¥ … ×"
+ db "lower DEL END "
+; 1224f
+
+MailEntry_Lowercase: ; 1224f
+ db "a b c d e f g h i j"
+ db "k l m n o p q r s t"
+ db "u v w x y z . - /"
+ db "'d 'l 'm 'r 's 't 'v & ( )"
+ db "<``> <''> [ ] ' : ; "
+ db "UPPER DEL END "
+; 122c1
diff --git a/data/map_objects.asm b/data/map_objects.asm
index 9cc495b7f..6bf9aeaa1 100755
--- a/data/map_objects.asm
+++ b/data/map_objects.asm
@@ -1,10 +1,10 @@
-; entries correspond to SPRITEMOVEDATA_* constants
-
sprite_movement_data: macro
db \1, \2, \3, \4, \5
dn \6, 0
endm
+SpriteMovementData:: ; 4273
+; entries correspond to SPRITEMOVEDATA_* constants
; function, facing, action, flags1, flags2, palette flags
sprite_movement_data SPRITEMOVEFN_00, DOWN, PERSON_ACTION_STAND, $02, $00, %0000 ; 00
sprite_movement_data SPRITEMOVEFN_STANDING, DOWN, PERSON_ACTION_STAND, $0c, $00, %0000 ; 01
@@ -44,3 +44,4 @@ endm
sprite_movement_data SPRITEMOVEFN_GRASS, DOWN, PERSON_ACTION_GRASS_SHAKE, $8e, $02, %0000 ; 23
sprite_movement_data SPRITEMOVEFN_RANDOM_WALK_XY, DOWN, PERSON_ACTION_STAND, $00, $00, %0010 ; 24
sprite_movement_data SPRITEMOVEFN_00, DOWN, PERSON_ACTION_STAND, $00, $00, %0000 ; 25
+; 4357
diff --git a/data/map_triggers.asm b/data/map_triggers.asm
new file mode 100644
index 000000000..b2ba1222a
--- /dev/null
+++ b/data/map_triggers.asm
@@ -0,0 +1,89 @@
+trigger_def: MACRO
+; db group, map
+; dw address
+ map \1
+ dw \2
+ENDM
+
+MapTriggers:: ; 4d01e
+ 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
diff --git a/data/mapgroup_roofs.asm b/data/mapgroup_roofs.asm
new file mode 100644
index 000000000..0cad8a0e3
--- /dev/null
+++ b/data/mapgroup_roofs.asm
@@ -0,0 +1,31 @@
+; valid roofs: 0, 1, 2, 3, 4, or -1 for none
+
+MapGroupRoofs: ; 1c021i
+ db -1 ; group 0 (unused)
+ db 3 ; group 1 (Olivine)
+ db 2 ; group 2 (Mahogany)
+ db -1 ; group 3
+ db 1 ; group 4 (Ecruteak)
+ db 2 ; group 5 (Blackthorn)
+ db -1 ; group 6
+ db -1 ; group 7
+ db 2 ; group 8 (Azalea)
+ db 2 ; group 9 (Lake of Rage)
+ db 1 ; group 10 (Violet)
+ db 4 ; group 11 (Goldenrod)
+ db -1 ; group 12
+ db -1 ; group 13
+ db -1 ; group 14
+ db -1 ; group 15
+ db -1 ; group 16
+ db -1 ; group 17
+ db -1 ; group 18
+ db 0 ; group 19 (Silver Cave)
+ db -1 ; group 20
+ db -1 ; group 21
+ db 3 ; group 22 (Cianwood)
+ db -1 ; group 23
+ db 0 ; group 24 (New Bark)
+ db -1 ; group 25
+ db 0 ; group 26 (Cherrygrove)
+; 1c03c
diff --git a/data/mom_phone_items.asm b/data/mom_phone_items.asm
new file mode 100644
index 000000000..533241ca1
--- /dev/null
+++ b/data/mom_phone_items.asm
@@ -0,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
diff --git a/data/mon_menu_icons.asm b/data/mon_menu_icons.asm
new file mode 100644
index 000000000..360b206a2
--- /dev/null
+++ b/data/mon_menu_icons.asm
@@ -0,0 +1,255 @@
+; party menu icons
+
+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
+; 8ebbf
diff --git a/data/mystery_gift/decos.asm b/data/mystery_gift/decos.asm
new file mode 100644
index 000000000..bdd4694c6
--- /dev/null
+++ b/data/mystery_gift/decos.asm
@@ -0,0 +1,40 @@
+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
+MysteryGiftDecosEnd
+; 2c76f
diff --git a/data/mystery_gift/items.asm b/data/mystery_gift/items.asm
new file mode 100644
index 000000000..b2379071e
--- /dev/null
+++ b/data/mystery_gift/items.asm
@@ -0,0 +1,40 @@
+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
+MysteryGiftItemsEnd:
+; 2c74a
diff --git a/data/name_input_chars.asm b/data/name_input_chars.asm
new file mode 100644
index 000000000..d89289142
--- /dev/null
+++ b/data/name_input_chars.asm
@@ -0,0 +1,31 @@
+; see engine/naming_screen.asm
+
+NameInputLower:
+ db "a b c d e f g h i"
+ db "j k l m n o p q r"
+ db "s t u v w x y z "
+ db "× ( ) : ; [ ] <PK> <MN>"
+ db "UPPER DEL END "
+
+BoxNameInputLower:
+ db "a b c d e f g h i"
+ db "j k l m n o p q r"
+ db "s t u v w x y z "
+ db "é 'd 'l 'm 'r 's 't 'v 0"
+ db "1 2 3 4 5 6 7 8 9"
+ db "UPPER DEL END "
+
+NameInputUpper:
+ db "A B C D E F G H I"
+ db "J K L M N O P Q R"
+ db "S T U V W X Y Z "
+ db "- ? ! / . , "
+ db "lower DEL END "
+
+BoxNameInputUpper:
+ db "A B C D E F G H I"
+ db "J K L M N O P Q R"
+ db "S T U V W X Y Z "
+ db "× ( ) : ; [ ] <PK> <MN>"
+ db "- ? ! ♂ ♀ / . , &"
+ db "lower DEL END "
diff --git a/data/npc_trades.asm b/data/npc_trades.asm
new file mode 100644
index 000000000..57b2411d3
--- /dev/null
+++ b/data/npc_trades.asm
@@ -0,0 +1,22 @@
+TRADE_EITHER_GENDER EQU 0
+TRADE_MALE_ONLY EQU 1
+TRADE_FEMALE_ONLY EQU 2
+
+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
+
+NPCTrades: ; fce58
+; 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
+; fcf38
diff --git a/data/odd_eggs.asm b/data/odd_eggs.asm
index 2a1e7d997..a46d84bdc 100644
--- a/data/odd_eggs.asm
+++ b/data/odd_eggs.asm
@@ -1,106 +1,9 @@
-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:
-
-prob: MACRO
+prob: macro
prob_total = prob_total + (\1)
dw prob_total * $ffff / 100
-ENDM
+endm
+OddEggProbabilities:
prob_total = 0
; Pichu
prob 8
diff --git a/data/outdoor_sprites.asm b/data/outdoor_sprites.asm
new file mode 100644
index 000000000..b99efcfe7
--- /dev/null
+++ b/data/outdoor_sprites.asm
@@ -0,0 +1,696 @@
+; Valid sprite IDs for each map group.
+; Maps with permission ROUTE or TOWN can only use these sprites.
+
+OutdoorSprites: ; 144b8
+ 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
diff --git a/data/phone_contacts.asm b/data/phone_contacts.asm
new file mode 100644
index 000000000..0c21049bb
--- /dev/null
+++ b/data/phone_contacts.asm
@@ -0,0 +1,51 @@
+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
+
+PhoneContacts: ; 9045f
+; 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
+; 90627
diff --git a/data/phone_special.asm b/data/phone_special.asm
new file mode 100644
index 000000000..c66c9ff77
--- /dev/null
+++ b/data/phone_special.asm
@@ -0,0 +1,18 @@
+specialcall: macro
+; condition, contact, script
+ dw \1
+ db \2
+ dba \3
+endm
+
+SpecialPhoneCallList: ; 90627
+; 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
+; 90657
diff --git a/data/pokedex/entries.asm b/data/pokedex/entries.asm
index c54f5e245..a12cdd3f4 100644
--- a/data/pokedex/entries.asm
+++ b/data/pokedex/entries.asm
@@ -4,22 +4,269 @@ INCLUDE "includes.asm"
SECTION "Pokedex Entries 001-064", ROMX
PokedexEntries1::
-INCLUDE "data/pokedex/entries_1.asm"
+BulbasaurPokedexEntry:: INCLUDE "data/pokedex/entries/bulbasaur.asm"
+IvysaurPokedexEntry:: INCLUDE "data/pokedex/entries/ivysaur.asm"
+VenusaurPokedexEntry:: INCLUDE "data/pokedex/entries/venusaur.asm"
+CharmanderPokedexEntry:: INCLUDE "data/pokedex/entries/charmander.asm"
+CharmeleonPokedexEntry:: INCLUDE "data/pokedex/entries/charmeleon.asm"
+CharizardPokedexEntry:: INCLUDE "data/pokedex/entries/charizard.asm"
+SquirtlePokedexEntry:: INCLUDE "data/pokedex/entries/squirtle.asm"
+WartortlePokedexEntry:: INCLUDE "data/pokedex/entries/wartortle.asm"
+BlastoisePokedexEntry:: INCLUDE "data/pokedex/entries/blastoise.asm"
+CaterpiePokedexEntry:: INCLUDE "data/pokedex/entries/caterpie.asm"
+MetapodPokedexEntry:: INCLUDE "data/pokedex/entries/metapod.asm"
+ButterfreePokedexEntry:: INCLUDE "data/pokedex/entries/butterfree.asm"
+WeedlePokedexEntry:: INCLUDE "data/pokedex/entries/weedle.asm"
+KakunaPokedexEntry:: INCLUDE "data/pokedex/entries/kakuna.asm"
+BeedrillPokedexEntry:: INCLUDE "data/pokedex/entries/beedrill.asm"
+PidgeyPokedexEntry:: INCLUDE "data/pokedex/entries/pidgey.asm"
+PidgeottoPokedexEntry:: INCLUDE "data/pokedex/entries/pidgeotto.asm"
+PidgeotPokedexEntry:: INCLUDE "data/pokedex/entries/pidgeot.asm"
+RattataPokedexEntry:: INCLUDE "data/pokedex/entries/rattata.asm"
+RaticatePokedexEntry:: INCLUDE "data/pokedex/entries/raticate.asm"
+SpearowPokedexEntry:: INCLUDE "data/pokedex/entries/spearow.asm"
+FearowPokedexEntry:: INCLUDE "data/pokedex/entries/fearow.asm"
+EkansPokedexEntry:: INCLUDE "data/pokedex/entries/ekans.asm"
+ArbokPokedexEntry:: INCLUDE "data/pokedex/entries/arbok.asm"
+PikachuPokedexEntry:: INCLUDE "data/pokedex/entries/pikachu.asm"
+RaichuPokedexEntry:: INCLUDE "data/pokedex/entries/raichu.asm"
+SandshrewPokedexEntry:: INCLUDE "data/pokedex/entries/sandshrew.asm"
+SandslashPokedexEntry:: INCLUDE "data/pokedex/entries/sandslash.asm"
+NidoranFPokedexEntry:: INCLUDE "data/pokedex/entries/nidoran_f.asm"
+NidorinaPokedexEntry:: INCLUDE "data/pokedex/entries/nidorina.asm"
+NidoqueenPokedexEntry:: INCLUDE "data/pokedex/entries/nidoqueen.asm"
+NidoranMPokedexEntry:: INCLUDE "data/pokedex/entries/nidoran_m.asm"
+NidorinoPokedexEntry:: INCLUDE "data/pokedex/entries/nidorino.asm"
+NidokingPokedexEntry:: INCLUDE "data/pokedex/entries/nidoking.asm"
+ClefairyPokedexEntry:: INCLUDE "data/pokedex/entries/clefairy.asm"
+ClefablePokedexEntry:: INCLUDE "data/pokedex/entries/clefable.asm"
+VulpixPokedexEntry:: INCLUDE "data/pokedex/entries/vulpix.asm"
+NinetalesPokedexEntry:: INCLUDE "data/pokedex/entries/ninetales.asm"
+JigglypuffPokedexEntry:: INCLUDE "data/pokedex/entries/jigglypuff.asm"
+WigglytuffPokedexEntry:: INCLUDE "data/pokedex/entries/wigglytuff.asm"
+ZubatPokedexEntry:: INCLUDE "data/pokedex/entries/zubat.asm"
+GolbatPokedexEntry:: INCLUDE "data/pokedex/entries/golbat.asm"
+OddishPokedexEntry:: INCLUDE "data/pokedex/entries/oddish.asm"
+GloomPokedexEntry:: INCLUDE "data/pokedex/entries/gloom.asm"
+VileplumePokedexEntry:: INCLUDE "data/pokedex/entries/vileplume.asm"
+ParasPokedexEntry:: INCLUDE "data/pokedex/entries/paras.asm"
+ParasectPokedexEntry:: INCLUDE "data/pokedex/entries/parasect.asm"
+VenonatPokedexEntry:: INCLUDE "data/pokedex/entries/venonat.asm"
+VenomothPokedexEntry:: INCLUDE "data/pokedex/entries/venomoth.asm"
+DiglettPokedexEntry:: INCLUDE "data/pokedex/entries/diglett.asm"
+DugtrioPokedexEntry:: INCLUDE "data/pokedex/entries/dugtrio.asm"
+MeowthPokedexEntry:: INCLUDE "data/pokedex/entries/meowth.asm"
+PersianPokedexEntry:: INCLUDE "data/pokedex/entries/persian.asm"
+PsyduckPokedexEntry:: INCLUDE "data/pokedex/entries/psyduck.asm"
+GolduckPokedexEntry:: INCLUDE "data/pokedex/entries/golduck.asm"
+MankeyPokedexEntry:: INCLUDE "data/pokedex/entries/mankey.asm"
+PrimeapePokedexEntry:: INCLUDE "data/pokedex/entries/primeape.asm"
+GrowlithePokedexEntry:: INCLUDE "data/pokedex/entries/growlithe.asm"
+ArcaninePokedexEntry:: INCLUDE "data/pokedex/entries/arcanine.asm"
+PoliwagPokedexEntry:: INCLUDE "data/pokedex/entries/poliwag.asm"
+PoliwhirlPokedexEntry:: INCLUDE "data/pokedex/entries/poliwhirl.asm"
+PoliwrathPokedexEntry:: INCLUDE "data/pokedex/entries/poliwrath.asm"
+AbraPokedexEntry:: INCLUDE "data/pokedex/entries/abra.asm"
+KadabraPokedexEntry:: INCLUDE "data/pokedex/entries/kadabra.asm"
SECTION "Pokedex Entries 065-128", ROMX
PokedexEntries2::
-INCLUDE "data/pokedex/entries_2.asm"
+AlakazamPokedexEntry:: INCLUDE "data/pokedex/entries/alakazam.asm"
+MachopPokedexEntry:: INCLUDE "data/pokedex/entries/machop.asm"
+MachokePokedexEntry:: INCLUDE "data/pokedex/entries/machoke.asm"
+MachampPokedexEntry:: INCLUDE "data/pokedex/entries/machamp.asm"
+BellsproutPokedexEntry:: INCLUDE "data/pokedex/entries/bellsprout.asm"
+WeepinbellPokedexEntry:: INCLUDE "data/pokedex/entries/weepinbell.asm"
+VictreebelPokedexEntry:: INCLUDE "data/pokedex/entries/victreebel.asm"
+TentacoolPokedexEntry:: INCLUDE "data/pokedex/entries/tentacool.asm"
+TentacruelPokedexEntry:: INCLUDE "data/pokedex/entries/tentacruel.asm"
+GeodudePokedexEntry:: INCLUDE "data/pokedex/entries/geodude.asm"
+GravelerPokedexEntry:: INCLUDE "data/pokedex/entries/graveler.asm"
+GolemPokedexEntry:: INCLUDE "data/pokedex/entries/golem.asm"
+PonytaPokedexEntry:: INCLUDE "data/pokedex/entries/ponyta.asm"
+RapidashPokedexEntry:: INCLUDE "data/pokedex/entries/rapidash.asm"
+SlowpokePokedexEntry:: INCLUDE "data/pokedex/entries/slowpoke.asm"
+SlowbroPokedexEntry:: INCLUDE "data/pokedex/entries/slowbro.asm"
+MagnemitePokedexEntry:: INCLUDE "data/pokedex/entries/magnemite.asm"
+MagnetonPokedexEntry:: INCLUDE "data/pokedex/entries/magneton.asm"
+FarfetchDPokedexEntry:: INCLUDE "data/pokedex/entries/farfetch_d.asm"
+DoduoPokedexEntry:: INCLUDE "data/pokedex/entries/doduo.asm"
+DodrioPokedexEntry:: INCLUDE "data/pokedex/entries/dodrio.asm"
+SeelPokedexEntry:: INCLUDE "data/pokedex/entries/seel.asm"
+DewgongPokedexEntry:: INCLUDE "data/pokedex/entries/dewgong.asm"
+GrimerPokedexEntry:: INCLUDE "data/pokedex/entries/grimer.asm"
+MukPokedexEntry:: INCLUDE "data/pokedex/entries/muk.asm"
+ShellderPokedexEntry:: INCLUDE "data/pokedex/entries/shellder.asm"
+CloysterPokedexEntry:: INCLUDE "data/pokedex/entries/cloyster.asm"
+GastlyPokedexEntry:: INCLUDE "data/pokedex/entries/gastly.asm"
+HaunterPokedexEntry:: INCLUDE "data/pokedex/entries/haunter.asm"
+GengarPokedexEntry:: INCLUDE "data/pokedex/entries/gengar.asm"
+OnixPokedexEntry:: INCLUDE "data/pokedex/entries/onix.asm"
+DrowzeePokedexEntry:: INCLUDE "data/pokedex/entries/drowzee.asm"
+HypnoPokedexEntry:: INCLUDE "data/pokedex/entries/hypno.asm"
+KrabbyPokedexEntry:: INCLUDE "data/pokedex/entries/krabby.asm"
+KinglerPokedexEntry:: INCLUDE "data/pokedex/entries/kingler.asm"
+VoltorbPokedexEntry:: INCLUDE "data/pokedex/entries/voltorb.asm"
+ElectrodePokedexEntry:: INCLUDE "data/pokedex/entries/electrode.asm"
+ExeggcutePokedexEntry:: INCLUDE "data/pokedex/entries/exeggcute.asm"
+ExeggutorPokedexEntry:: INCLUDE "data/pokedex/entries/exeggutor.asm"
+CubonePokedexEntry:: INCLUDE "data/pokedex/entries/cubone.asm"
+MarowakPokedexEntry:: INCLUDE "data/pokedex/entries/marowak.asm"
+HitmonleePokedexEntry:: INCLUDE "data/pokedex/entries/hitmonlee.asm"
+HitmonchanPokedexEntry:: INCLUDE "data/pokedex/entries/hitmonchan.asm"
+LickitungPokedexEntry:: INCLUDE "data/pokedex/entries/lickitung.asm"
+KoffingPokedexEntry:: INCLUDE "data/pokedex/entries/koffing.asm"
+WeezingPokedexEntry:: INCLUDE "data/pokedex/entries/weezing.asm"
+RhyhornPokedexEntry:: INCLUDE "data/pokedex/entries/rhyhorn.asm"
+RhydonPokedexEntry:: INCLUDE "data/pokedex/entries/rhydon.asm"
+ChanseyPokedexEntry:: INCLUDE "data/pokedex/entries/chansey.asm"
+TangelaPokedexEntry:: INCLUDE "data/pokedex/entries/tangela.asm"
+KangaskhanPokedexEntry:: INCLUDE "data/pokedex/entries/kangaskhan.asm"
+HorseaPokedexEntry:: INCLUDE "data/pokedex/entries/horsea.asm"
+SeadraPokedexEntry:: INCLUDE "data/pokedex/entries/seadra.asm"
+GoldeenPokedexEntry:: INCLUDE "data/pokedex/entries/goldeen.asm"
+SeakingPokedexEntry:: INCLUDE "data/pokedex/entries/seaking.asm"
+StaryuPokedexEntry:: INCLUDE "data/pokedex/entries/staryu.asm"
+StarmiePokedexEntry:: INCLUDE "data/pokedex/entries/starmie.asm"
+MrMimePokedexEntry:: INCLUDE "data/pokedex/entries/mr__mime.asm"
+ScytherPokedexEntry:: INCLUDE "data/pokedex/entries/scyther.asm"
+JynxPokedexEntry:: INCLUDE "data/pokedex/entries/jynx.asm"
+ElectabuzzPokedexEntry:: INCLUDE "data/pokedex/entries/electabuzz.asm"
+MagmarPokedexEntry:: INCLUDE "data/pokedex/entries/magmar.asm"
+PinsirPokedexEntry:: INCLUDE "data/pokedex/entries/pinsir.asm"
+TaurosPokedexEntry:: INCLUDE "data/pokedex/entries/tauros.asm"
SECTION "Pokedex Entries 129-192", ROMX
PokedexEntries3::
-INCLUDE "data/pokedex/entries_3.asm"
+MagikarpPokedexEntry:: INCLUDE "data/pokedex/entries/magikarp.asm"
+GyaradosPokedexEntry:: INCLUDE "data/pokedex/entries/gyarados.asm"
+LaprasPokedexEntry:: INCLUDE "data/pokedex/entries/lapras.asm"
+DittoPokedexEntry:: INCLUDE "data/pokedex/entries/ditto.asm"
+EeveePokedexEntry:: INCLUDE "data/pokedex/entries/eevee.asm"
+VaporeonPokedexEntry:: INCLUDE "data/pokedex/entries/vaporeon.asm"
+JolteonPokedexEntry:: INCLUDE "data/pokedex/entries/jolteon.asm"
+FlareonPokedexEntry:: INCLUDE "data/pokedex/entries/flareon.asm"
+PorygonPokedexEntry:: INCLUDE "data/pokedex/entries/porygon.asm"
+OmanytePokedexEntry:: INCLUDE "data/pokedex/entries/omanyte.asm"
+OmastarPokedexEntry:: INCLUDE "data/pokedex/entries/omastar.asm"
+KabutoPokedexEntry:: INCLUDE "data/pokedex/entries/kabuto.asm"
+KabutopsPokedexEntry:: INCLUDE "data/pokedex/entries/kabutops.asm"
+AerodactylPokedexEntry:: INCLUDE "data/pokedex/entries/aerodactyl.asm"
+SnorlaxPokedexEntry:: INCLUDE "data/pokedex/entries/snorlax.asm"
+ArticunoPokedexEntry:: INCLUDE "data/pokedex/entries/articuno.asm"
+ZapdosPokedexEntry:: INCLUDE "data/pokedex/entries/zapdos.asm"
+MoltresPokedexEntry:: INCLUDE "data/pokedex/entries/moltres.asm"
+DratiniPokedexEntry:: INCLUDE "data/pokedex/entries/dratini.asm"
+DragonairPokedexEntry:: INCLUDE "data/pokedex/entries/dragonair.asm"
+DragonitePokedexEntry:: INCLUDE "data/pokedex/entries/dragonite.asm"
+MewtwoPokedexEntry:: INCLUDE "data/pokedex/entries/mewtwo.asm"
+MewPokedexEntry:: INCLUDE "data/pokedex/entries/mew.asm"
+ChikoritaPokedexEntry:: INCLUDE "data/pokedex/entries/chikorita.asm"
+BayleefPokedexEntry:: INCLUDE "data/pokedex/entries/bayleef.asm"
+MeganiumPokedexEntry:: INCLUDE "data/pokedex/entries/meganium.asm"
+CyndaquilPokedexEntry:: INCLUDE "data/pokedex/entries/cyndaquil.asm"
+QuilavaPokedexEntry:: INCLUDE "data/pokedex/entries/quilava.asm"
+TyphlosionPokedexEntry:: INCLUDE "data/pokedex/entries/typhlosion.asm"
+TotodilePokedexEntry:: INCLUDE "data/pokedex/entries/totodile.asm"
+CroconawPokedexEntry:: INCLUDE "data/pokedex/entries/croconaw.asm"
+FeraligatrPokedexEntry:: INCLUDE "data/pokedex/entries/feraligatr.asm"
+SentretPokedexEntry:: INCLUDE "data/pokedex/entries/sentret.asm"
+FurretPokedexEntry:: INCLUDE "data/pokedex/entries/furret.asm"
+HoothootPokedexEntry:: INCLUDE "data/pokedex/entries/hoothoot.asm"
+NoctowlPokedexEntry:: INCLUDE "data/pokedex/entries/noctowl.asm"
+LedybaPokedexEntry:: INCLUDE "data/pokedex/entries/ledyba.asm"
+LedianPokedexEntry:: INCLUDE "data/pokedex/entries/ledian.asm"
+SpinarakPokedexEntry:: INCLUDE "data/pokedex/entries/spinarak.asm"
+AriadosPokedexEntry:: INCLUDE "data/pokedex/entries/ariados.asm"
+CrobatPokedexEntry:: INCLUDE "data/pokedex/entries/crobat.asm"
+ChinchouPokedexEntry:: INCLUDE "data/pokedex/entries/chinchou.asm"
+LanturnPokedexEntry:: INCLUDE "data/pokedex/entries/lanturn.asm"
+PichuPokedexEntry:: INCLUDE "data/pokedex/entries/pichu.asm"
+CleffaPokedexEntry:: INCLUDE "data/pokedex/entries/cleffa.asm"
+IgglybuffPokedexEntry:: INCLUDE "data/pokedex/entries/igglybuff.asm"
+TogepiPokedexEntry:: INCLUDE "data/pokedex/entries/togepi.asm"
+TogeticPokedexEntry:: INCLUDE "data/pokedex/entries/togetic.asm"
+NatuPokedexEntry:: INCLUDE "data/pokedex/entries/natu.asm"
+XatuPokedexEntry:: INCLUDE "data/pokedex/entries/xatu.asm"
+MareepPokedexEntry:: INCLUDE "data/pokedex/entries/mareep.asm"
+FlaaffyPokedexEntry:: INCLUDE "data/pokedex/entries/flaaffy.asm"
+AmpharosPokedexEntry:: INCLUDE "data/pokedex/entries/ampharos.asm"
+BellossomPokedexEntry:: INCLUDE "data/pokedex/entries/bellossom.asm"
+MarillPokedexEntry:: INCLUDE "data/pokedex/entries/marill.asm"
+AzumarillPokedexEntry:: INCLUDE "data/pokedex/entries/azumarill.asm"
+SudowoodoPokedexEntry:: INCLUDE "data/pokedex/entries/sudowoodo.asm"
+PolitoedPokedexEntry:: INCLUDE "data/pokedex/entries/politoed.asm"
+HoppipPokedexEntry:: INCLUDE "data/pokedex/entries/hoppip.asm"
+SkiploomPokedexEntry:: INCLUDE "data/pokedex/entries/skiploom.asm"
+JumpluffPokedexEntry:: INCLUDE "data/pokedex/entries/jumpluff.asm"
+AipomPokedexEntry:: INCLUDE "data/pokedex/entries/aipom.asm"
+SunkernPokedexEntry:: INCLUDE "data/pokedex/entries/sunkern.asm"
+SunfloraPokedexEntry:: INCLUDE "data/pokedex/entries/sunflora.asm"
SECTION "Pokedex Entries 193-251", ROMX
PokedexEntries4::
-INCLUDE "data/pokedex/entries_4.asm"
+YanmaPokedexEntry:: INCLUDE "data/pokedex/entries/yanma.asm"
+WooperPokedexEntry:: INCLUDE "data/pokedex/entries/wooper.asm"
+QuagsirePokedexEntry:: INCLUDE "data/pokedex/entries/quagsire.asm"
+EspeonPokedexEntry:: INCLUDE "data/pokedex/entries/espeon.asm"
+UmbreonPokedexEntry:: INCLUDE "data/pokedex/entries/umbreon.asm"
+MurkrowPokedexEntry:: INCLUDE "data/pokedex/entries/murkrow.asm"
+SlowkingPokedexEntry:: INCLUDE "data/pokedex/entries/slowking.asm"
+MisdreavusPokedexEntry:: INCLUDE "data/pokedex/entries/misdreavus.asm"
+UnownPokedexEntry:: INCLUDE "data/pokedex/entries/unown.asm"
+WobbuffetPokedexEntry:: INCLUDE "data/pokedex/entries/wobbuffet.asm"
+GirafarigPokedexEntry:: INCLUDE "data/pokedex/entries/girafarig.asm"
+PinecoPokedexEntry:: INCLUDE "data/pokedex/entries/pineco.asm"
+ForretressPokedexEntry:: INCLUDE "data/pokedex/entries/forretress.asm"
+DunsparcePokedexEntry:: INCLUDE "data/pokedex/entries/dunsparce.asm"
+GligarPokedexEntry:: INCLUDE "data/pokedex/entries/gligar.asm"
+SteelixPokedexEntry:: INCLUDE "data/pokedex/entries/steelix.asm"
+SnubbullPokedexEntry:: INCLUDE "data/pokedex/entries/snubbull.asm"
+GranbullPokedexEntry:: INCLUDE "data/pokedex/entries/granbull.asm"
+QwilfishPokedexEntry:: INCLUDE "data/pokedex/entries/qwilfish.asm"
+ScizorPokedexEntry:: INCLUDE "data/pokedex/entries/scizor.asm"
+ShucklePokedexEntry:: INCLUDE "data/pokedex/entries/shuckle.asm"
+HeracrossPokedexEntry:: INCLUDE "data/pokedex/entries/heracross.asm"
+SneaselPokedexEntry:: INCLUDE "data/pokedex/entries/sneasel.asm"
+TeddiursaPokedexEntry:: INCLUDE "data/pokedex/entries/teddiursa.asm"
+UrsaringPokedexEntry:: INCLUDE "data/pokedex/entries/ursaring.asm"
+SlugmaPokedexEntry:: INCLUDE "data/pokedex/entries/slugma.asm"
+MagcargoPokedexEntry:: INCLUDE "data/pokedex/entries/magcargo.asm"
+SwinubPokedexEntry:: INCLUDE "data/pokedex/entries/swinub.asm"
+PiloswinePokedexEntry:: INCLUDE "data/pokedex/entries/piloswine.asm"
+CorsolaPokedexEntry:: INCLUDE "data/pokedex/entries/corsola.asm"
+RemoraidPokedexEntry:: INCLUDE "data/pokedex/entries/remoraid.asm"
+OctilleryPokedexEntry:: INCLUDE "data/pokedex/entries/octillery.asm"
+DelibirdPokedexEntry:: INCLUDE "data/pokedex/entries/delibird.asm"
+MantinePokedexEntry:: INCLUDE "data/pokedex/entries/mantine.asm"
+SkarmoryPokedexEntry:: INCLUDE "data/pokedex/entries/skarmory.asm"
+HoundourPokedexEntry:: INCLUDE "data/pokedex/entries/houndour.asm"
+HoundoomPokedexEntry:: INCLUDE "data/pokedex/entries/houndoom.asm"
+KingdraPokedexEntry:: INCLUDE "data/pokedex/entries/kingdra.asm"
+PhanpyPokedexEntry:: INCLUDE "data/pokedex/entries/phanpy.asm"
+DonphanPokedexEntry:: INCLUDE "data/pokedex/entries/donphan.asm"
+Porygon2PokedexEntry:: INCLUDE "data/pokedex/entries/porygon2.asm"
+StantlerPokedexEntry:: INCLUDE "data/pokedex/entries/stantler.asm"
+SmearglePokedexEntry:: INCLUDE "data/pokedex/entries/smeargle.asm"
+TyroguePokedexEntry:: INCLUDE "data/pokedex/entries/tyrogue.asm"
+HitmontopPokedexEntry:: INCLUDE "data/pokedex/entries/hitmontop.asm"
+SmoochumPokedexEntry:: INCLUDE "data/pokedex/entries/smoochum.asm"
+ElekidPokedexEntry:: INCLUDE "data/pokedex/entries/elekid.asm"
+MagbyPokedexEntry:: INCLUDE "data/pokedex/entries/magby.asm"
+MiltankPokedexEntry:: INCLUDE "data/pokedex/entries/miltank.asm"
+BlisseyPokedexEntry:: INCLUDE "data/pokedex/entries/blissey.asm"
+RaikouPokedexEntry:: INCLUDE "data/pokedex/entries/raikou.asm"
+EnteiPokedexEntry:: INCLUDE "data/pokedex/entries/entei.asm"
+SuicunePokedexEntry:: INCLUDE "data/pokedex/entries/suicune.asm"
+LarvitarPokedexEntry:: INCLUDE "data/pokedex/entries/larvitar.asm"
+PupitarPokedexEntry:: INCLUDE "data/pokedex/entries/pupitar.asm"
+TyranitarPokedexEntry:: INCLUDE "data/pokedex/entries/tyranitar.asm"
+LugiaPokedexEntry:: INCLUDE "data/pokedex/entries/lugia.asm"
+HoOhPokedexEntry:: INCLUDE "data/pokedex/entries/ho_oh.asm"
+CelebiPokedexEntry:: INCLUDE "data/pokedex/entries/celebi.asm"
diff --git a/data/pokedex/entries_1.asm b/data/pokedex/entries_1.asm
deleted file mode 100644
index 7f3c04cd6..000000000
--- a/data/pokedex/entries_1.asm
+++ /dev/null
@@ -1,64 +0,0 @@
-BulbasaurPokedexEntry:: INCLUDE "data/pokedex/entries/bulbasaur.asm"
-IvysaurPokedexEntry:: INCLUDE "data/pokedex/entries/ivysaur.asm"
-VenusaurPokedexEntry:: INCLUDE "data/pokedex/entries/venusaur.asm"
-CharmanderPokedexEntry:: INCLUDE "data/pokedex/entries/charmander.asm"
-CharmeleonPokedexEntry:: INCLUDE "data/pokedex/entries/charmeleon.asm"
-CharizardPokedexEntry:: INCLUDE "data/pokedex/entries/charizard.asm"
-SquirtlePokedexEntry:: INCLUDE "data/pokedex/entries/squirtle.asm"
-WartortlePokedexEntry:: INCLUDE "data/pokedex/entries/wartortle.asm"
-BlastoisePokedexEntry:: INCLUDE "data/pokedex/entries/blastoise.asm"
-CaterpiePokedexEntry:: INCLUDE "data/pokedex/entries/caterpie.asm"
-MetapodPokedexEntry:: INCLUDE "data/pokedex/entries/metapod.asm"
-ButterfreePokedexEntry:: INCLUDE "data/pokedex/entries/butterfree.asm"
-WeedlePokedexEntry:: INCLUDE "data/pokedex/entries/weedle.asm"
-KakunaPokedexEntry:: INCLUDE "data/pokedex/entries/kakuna.asm"
-BeedrillPokedexEntry:: INCLUDE "data/pokedex/entries/beedrill.asm"
-PidgeyPokedexEntry:: INCLUDE "data/pokedex/entries/pidgey.asm"
-PidgeottoPokedexEntry:: INCLUDE "data/pokedex/entries/pidgeotto.asm"
-PidgeotPokedexEntry:: INCLUDE "data/pokedex/entries/pidgeot.asm"
-RattataPokedexEntry:: INCLUDE "data/pokedex/entries/rattata.asm"
-RaticatePokedexEntry:: INCLUDE "data/pokedex/entries/raticate.asm"
-SpearowPokedexEntry:: INCLUDE "data/pokedex/entries/spearow.asm"
-FearowPokedexEntry:: INCLUDE "data/pokedex/entries/fearow.asm"
-EkansPokedexEntry:: INCLUDE "data/pokedex/entries/ekans.asm"
-ArbokPokedexEntry:: INCLUDE "data/pokedex/entries/arbok.asm"
-PikachuPokedexEntry:: INCLUDE "data/pokedex/entries/pikachu.asm"
-RaichuPokedexEntry:: INCLUDE "data/pokedex/entries/raichu.asm"
-SandshrewPokedexEntry:: INCLUDE "data/pokedex/entries/sandshrew.asm"
-SandslashPokedexEntry:: INCLUDE "data/pokedex/entries/sandslash.asm"
-NidoranFPokedexEntry:: INCLUDE "data/pokedex/entries/nidoran_f.asm"
-NidorinaPokedexEntry:: INCLUDE "data/pokedex/entries/nidorina.asm"
-NidoqueenPokedexEntry:: INCLUDE "data/pokedex/entries/nidoqueen.asm"
-NidoranMPokedexEntry:: INCLUDE "data/pokedex/entries/nidoran_m.asm"
-NidorinoPokedexEntry:: INCLUDE "data/pokedex/entries/nidorino.asm"
-NidokingPokedexEntry:: INCLUDE "data/pokedex/entries/nidoking.asm"
-ClefairyPokedexEntry:: INCLUDE "data/pokedex/entries/clefairy.asm"
-ClefablePokedexEntry:: INCLUDE "data/pokedex/entries/clefable.asm"
-VulpixPokedexEntry:: INCLUDE "data/pokedex/entries/vulpix.asm"
-NinetalesPokedexEntry:: INCLUDE "data/pokedex/entries/ninetales.asm"
-JigglypuffPokedexEntry:: INCLUDE "data/pokedex/entries/jigglypuff.asm"
-WigglytuffPokedexEntry:: INCLUDE "data/pokedex/entries/wigglytuff.asm"
-ZubatPokedexEntry:: INCLUDE "data/pokedex/entries/zubat.asm"
-GolbatPokedexEntry:: INCLUDE "data/pokedex/entries/golbat.asm"
-OddishPokedexEntry:: INCLUDE "data/pokedex/entries/oddish.asm"
-GloomPokedexEntry:: INCLUDE "data/pokedex/entries/gloom.asm"
-VileplumePokedexEntry:: INCLUDE "data/pokedex/entries/vileplume.asm"
-ParasPokedexEntry:: INCLUDE "data/pokedex/entries/paras.asm"
-ParasectPokedexEntry:: INCLUDE "data/pokedex/entries/parasect.asm"
-VenonatPokedexEntry:: INCLUDE "data/pokedex/entries/venonat.asm"
-VenomothPokedexEntry:: INCLUDE "data/pokedex/entries/venomoth.asm"
-DiglettPokedexEntry:: INCLUDE "data/pokedex/entries/diglett.asm"
-DugtrioPokedexEntry:: INCLUDE "data/pokedex/entries/dugtrio.asm"
-MeowthPokedexEntry:: INCLUDE "data/pokedex/entries/meowth.asm"
-PersianPokedexEntry:: INCLUDE "data/pokedex/entries/persian.asm"
-PsyduckPokedexEntry:: INCLUDE "data/pokedex/entries/psyduck.asm"
-GolduckPokedexEntry:: INCLUDE "data/pokedex/entries/golduck.asm"
-MankeyPokedexEntry:: INCLUDE "data/pokedex/entries/mankey.asm"
-PrimeapePokedexEntry:: INCLUDE "data/pokedex/entries/primeape.asm"
-GrowlithePokedexEntry:: INCLUDE "data/pokedex/entries/growlithe.asm"
-ArcaninePokedexEntry:: INCLUDE "data/pokedex/entries/arcanine.asm"
-PoliwagPokedexEntry:: INCLUDE "data/pokedex/entries/poliwag.asm"
-PoliwhirlPokedexEntry:: INCLUDE "data/pokedex/entries/poliwhirl.asm"
-PoliwrathPokedexEntry:: INCLUDE "data/pokedex/entries/poliwrath.asm"
-AbraPokedexEntry:: INCLUDE "data/pokedex/entries/abra.asm"
-KadabraPokedexEntry:: INCLUDE "data/pokedex/entries/kadabra.asm"
diff --git a/data/pokedex/entries_2.asm b/data/pokedex/entries_2.asm
deleted file mode 100644
index 881986d92..000000000
--- a/data/pokedex/entries_2.asm
+++ /dev/null
@@ -1,64 +0,0 @@
-AlakazamPokedexEntry:: INCLUDE "data/pokedex/entries/alakazam.asm"
-MachopPokedexEntry:: INCLUDE "data/pokedex/entries/machop.asm"
-MachokePokedexEntry:: INCLUDE "data/pokedex/entries/machoke.asm"
-MachampPokedexEntry:: INCLUDE "data/pokedex/entries/machamp.asm"
-BellsproutPokedexEntry:: INCLUDE "data/pokedex/entries/bellsprout.asm"
-WeepinbellPokedexEntry:: INCLUDE "data/pokedex/entries/weepinbell.asm"
-VictreebelPokedexEntry:: INCLUDE "data/pokedex/entries/victreebel.asm"
-TentacoolPokedexEntry:: INCLUDE "data/pokedex/entries/tentacool.asm"
-TentacruelPokedexEntry:: INCLUDE "data/pokedex/entries/tentacruel.asm"
-GeodudePokedexEntry:: INCLUDE "data/pokedex/entries/geodude.asm"
-GravelerPokedexEntry:: INCLUDE "data/pokedex/entries/graveler.asm"
-GolemPokedexEntry:: INCLUDE "data/pokedex/entries/golem.asm"
-PonytaPokedexEntry:: INCLUDE "data/pokedex/entries/ponyta.asm"
-RapidashPokedexEntry:: INCLUDE "data/pokedex/entries/rapidash.asm"
-SlowpokePokedexEntry:: INCLUDE "data/pokedex/entries/slowpoke.asm"
-SlowbroPokedexEntry:: INCLUDE "data/pokedex/entries/slowbro.asm"
-MagnemitePokedexEntry:: INCLUDE "data/pokedex/entries/magnemite.asm"
-MagnetonPokedexEntry:: INCLUDE "data/pokedex/entries/magneton.asm"
-FarfetchDPokedexEntry:: INCLUDE "data/pokedex/entries/farfetch_d.asm"
-DoduoPokedexEntry:: INCLUDE "data/pokedex/entries/doduo.asm"
-DodrioPokedexEntry:: INCLUDE "data/pokedex/entries/dodrio.asm"
-SeelPokedexEntry:: INCLUDE "data/pokedex/entries/seel.asm"
-DewgongPokedexEntry:: INCLUDE "data/pokedex/entries/dewgong.asm"
-GrimerPokedexEntry:: INCLUDE "data/pokedex/entries/grimer.asm"
-MukPokedexEntry:: INCLUDE "data/pokedex/entries/muk.asm"
-ShellderPokedexEntry:: INCLUDE "data/pokedex/entries/shellder.asm"
-CloysterPokedexEntry:: INCLUDE "data/pokedex/entries/cloyster.asm"
-GastlyPokedexEntry:: INCLUDE "data/pokedex/entries/gastly.asm"
-HaunterPokedexEntry:: INCLUDE "data/pokedex/entries/haunter.asm"
-GengarPokedexEntry:: INCLUDE "data/pokedex/entries/gengar.asm"
-OnixPokedexEntry:: INCLUDE "data/pokedex/entries/onix.asm"
-DrowzeePokedexEntry:: INCLUDE "data/pokedex/entries/drowzee.asm"
-HypnoPokedexEntry:: INCLUDE "data/pokedex/entries/hypno.asm"
-KrabbyPokedexEntry:: INCLUDE "data/pokedex/entries/krabby.asm"
-KinglerPokedexEntry:: INCLUDE "data/pokedex/entries/kingler.asm"
-VoltorbPokedexEntry:: INCLUDE "data/pokedex/entries/voltorb.asm"
-ElectrodePokedexEntry:: INCLUDE "data/pokedex/entries/electrode.asm"
-ExeggcutePokedexEntry:: INCLUDE "data/pokedex/entries/exeggcute.asm"
-ExeggutorPokedexEntry:: INCLUDE "data/pokedex/entries/exeggutor.asm"
-CubonePokedexEntry:: INCLUDE "data/pokedex/entries/cubone.asm"
-MarowakPokedexEntry:: INCLUDE "data/pokedex/entries/marowak.asm"
-HitmonleePokedexEntry:: INCLUDE "data/pokedex/entries/hitmonlee.asm"
-HitmonchanPokedexEntry:: INCLUDE "data/pokedex/entries/hitmonchan.asm"
-LickitungPokedexEntry:: INCLUDE "data/pokedex/entries/lickitung.asm"
-KoffingPokedexEntry:: INCLUDE "data/pokedex/entries/koffing.asm"
-WeezingPokedexEntry:: INCLUDE "data/pokedex/entries/weezing.asm"
-RhyhornPokedexEntry:: INCLUDE "data/pokedex/entries/rhyhorn.asm"
-RhydonPokedexEntry:: INCLUDE "data/pokedex/entries/rhydon.asm"
-ChanseyPokedexEntry:: INCLUDE "data/pokedex/entries/chansey.asm"
-TangelaPokedexEntry:: INCLUDE "data/pokedex/entries/tangela.asm"
-KangaskhanPokedexEntry:: INCLUDE "data/pokedex/entries/kangaskhan.asm"
-HorseaPokedexEntry:: INCLUDE "data/pokedex/entries/horsea.asm"
-SeadraPokedexEntry:: INCLUDE "data/pokedex/entries/seadra.asm"
-GoldeenPokedexEntry:: INCLUDE "data/pokedex/entries/goldeen.asm"
-SeakingPokedexEntry:: INCLUDE "data/pokedex/entries/seaking.asm"
-StaryuPokedexEntry:: INCLUDE "data/pokedex/entries/staryu.asm"
-StarmiePokedexEntry:: INCLUDE "data/pokedex/entries/starmie.asm"
-MrMimePokedexEntry:: INCLUDE "data/pokedex/entries/mr__mime.asm"
-ScytherPokedexEntry:: INCLUDE "data/pokedex/entries/scyther.asm"
-JynxPokedexEntry:: INCLUDE "data/pokedex/entries/jynx.asm"
-ElectabuzzPokedexEntry:: INCLUDE "data/pokedex/entries/electabuzz.asm"
-MagmarPokedexEntry:: INCLUDE "data/pokedex/entries/magmar.asm"
-PinsirPokedexEntry:: INCLUDE "data/pokedex/entries/pinsir.asm"
-TaurosPokedexEntry:: INCLUDE "data/pokedex/entries/tauros.asm"
diff --git a/data/pokedex/entries_3.asm b/data/pokedex/entries_3.asm
deleted file mode 100644
index 869252baa..000000000
--- a/data/pokedex/entries_3.asm
+++ /dev/null
@@ -1,64 +0,0 @@
-MagikarpPokedexEntry:: INCLUDE "data/pokedex/entries/magikarp.asm"
-GyaradosPokedexEntry:: INCLUDE "data/pokedex/entries/gyarados.asm"
-LaprasPokedexEntry:: INCLUDE "data/pokedex/entries/lapras.asm"
-DittoPokedexEntry:: INCLUDE "data/pokedex/entries/ditto.asm"
-EeveePokedexEntry:: INCLUDE "data/pokedex/entries/eevee.asm"
-VaporeonPokedexEntry:: INCLUDE "data/pokedex/entries/vaporeon.asm"
-JolteonPokedexEntry:: INCLUDE "data/pokedex/entries/jolteon.asm"
-FlareonPokedexEntry:: INCLUDE "data/pokedex/entries/flareon.asm"
-PorygonPokedexEntry:: INCLUDE "data/pokedex/entries/porygon.asm"
-OmanytePokedexEntry:: INCLUDE "data/pokedex/entries/omanyte.asm"
-OmastarPokedexEntry:: INCLUDE "data/pokedex/entries/omastar.asm"
-KabutoPokedexEntry:: INCLUDE "data/pokedex/entries/kabuto.asm"
-KabutopsPokedexEntry:: INCLUDE "data/pokedex/entries/kabutops.asm"
-AerodactylPokedexEntry:: INCLUDE "data/pokedex/entries/aerodactyl.asm"
-SnorlaxPokedexEntry:: INCLUDE "data/pokedex/entries/snorlax.asm"
-ArticunoPokedexEntry:: INCLUDE "data/pokedex/entries/articuno.asm"
-ZapdosPokedexEntry:: INCLUDE "data/pokedex/entries/zapdos.asm"
-MoltresPokedexEntry:: INCLUDE "data/pokedex/entries/moltres.asm"
-DratiniPokedexEntry:: INCLUDE "data/pokedex/entries/dratini.asm"
-DragonairPokedexEntry:: INCLUDE "data/pokedex/entries/dragonair.asm"
-DragonitePokedexEntry:: INCLUDE "data/pokedex/entries/dragonite.asm"
-MewtwoPokedexEntry:: INCLUDE "data/pokedex/entries/mewtwo.asm"
-MewPokedexEntry:: INCLUDE "data/pokedex/entries/mew.asm"
-ChikoritaPokedexEntry:: INCLUDE "data/pokedex/entries/chikorita.asm"
-BayleefPokedexEntry:: INCLUDE "data/pokedex/entries/bayleef.asm"
-MeganiumPokedexEntry:: INCLUDE "data/pokedex/entries/meganium.asm"
-CyndaquilPokedexEntry:: INCLUDE "data/pokedex/entries/cyndaquil.asm"
-QuilavaPokedexEntry:: INCLUDE "data/pokedex/entries/quilava.asm"
-TyphlosionPokedexEntry:: INCLUDE "data/pokedex/entries/typhlosion.asm"
-TotodilePokedexEntry:: INCLUDE "data/pokedex/entries/totodile.asm"
-CroconawPokedexEntry:: INCLUDE "data/pokedex/entries/croconaw.asm"
-FeraligatrPokedexEntry:: INCLUDE "data/pokedex/entries/feraligatr.asm"
-SentretPokedexEntry:: INCLUDE "data/pokedex/entries/sentret.asm"
-FurretPokedexEntry:: INCLUDE "data/pokedex/entries/furret.asm"
-HoothootPokedexEntry:: INCLUDE "data/pokedex/entries/hoothoot.asm"
-NoctowlPokedexEntry:: INCLUDE "data/pokedex/entries/noctowl.asm"
-LedybaPokedexEntry:: INCLUDE "data/pokedex/entries/ledyba.asm"
-LedianPokedexEntry:: INCLUDE "data/pokedex/entries/ledian.asm"
-SpinarakPokedexEntry:: INCLUDE "data/pokedex/entries/spinarak.asm"
-AriadosPokedexEntry:: INCLUDE "data/pokedex/entries/ariados.asm"
-CrobatPokedexEntry:: INCLUDE "data/pokedex/entries/crobat.asm"
-ChinchouPokedexEntry:: INCLUDE "data/pokedex/entries/chinchou.asm"
-LanturnPokedexEntry:: INCLUDE "data/pokedex/entries/lanturn.asm"
-PichuPokedexEntry:: INCLUDE "data/pokedex/entries/pichu.asm"
-CleffaPokedexEntry:: INCLUDE "data/pokedex/entries/cleffa.asm"
-IgglybuffPokedexEntry:: INCLUDE "data/pokedex/entries/igglybuff.asm"
-TogepiPokedexEntry:: INCLUDE "data/pokedex/entries/togepi.asm"
-TogeticPokedexEntry:: INCLUDE "data/pokedex/entries/togetic.asm"
-NatuPokedexEntry:: INCLUDE "data/pokedex/entries/natu.asm"
-XatuPokedexEntry:: INCLUDE "data/pokedex/entries/xatu.asm"
-MareepPokedexEntry:: INCLUDE "data/pokedex/entries/mareep.asm"
-FlaaffyPokedexEntry:: INCLUDE "data/pokedex/entries/flaaffy.asm"
-AmpharosPokedexEntry:: INCLUDE "data/pokedex/entries/ampharos.asm"
-BellossomPokedexEntry:: INCLUDE "data/pokedex/entries/bellossom.asm"
-MarillPokedexEntry:: INCLUDE "data/pokedex/entries/marill.asm"
-AzumarillPokedexEntry:: INCLUDE "data/pokedex/entries/azumarill.asm"
-SudowoodoPokedexEntry:: INCLUDE "data/pokedex/entries/sudowoodo.asm"
-PolitoedPokedexEntry:: INCLUDE "data/pokedex/entries/politoed.asm"
-HoppipPokedexEntry:: INCLUDE "data/pokedex/entries/hoppip.asm"
-SkiploomPokedexEntry:: INCLUDE "data/pokedex/entries/skiploom.asm"
-JumpluffPokedexEntry:: INCLUDE "data/pokedex/entries/jumpluff.asm"
-AipomPokedexEntry:: INCLUDE "data/pokedex/entries/aipom.asm"
-SunkernPokedexEntry:: INCLUDE "data/pokedex/entries/sunkern.asm"
-SunfloraPokedexEntry:: INCLUDE "data/pokedex/entries/sunflora.asm"
diff --git a/data/pokedex/entries_4.asm b/data/pokedex/entries_4.asm
deleted file mode 100644
index 240f87e3e..000000000
--- a/data/pokedex/entries_4.asm
+++ /dev/null
@@ -1,59 +0,0 @@
-YanmaPokedexEntry:: INCLUDE "data/pokedex/entries/yanma.asm"
-WooperPokedexEntry:: INCLUDE "data/pokedex/entries/wooper.asm"
-QuagsirePokedexEntry:: INCLUDE "data/pokedex/entries/quagsire.asm"
-EspeonPokedexEntry:: INCLUDE "data/pokedex/entries/espeon.asm"
-UmbreonPokedexEntry:: INCLUDE "data/pokedex/entries/umbreon.asm"
-MurkrowPokedexEntry:: INCLUDE "data/pokedex/entries/murkrow.asm"
-SlowkingPokedexEntry:: INCLUDE "data/pokedex/entries/slowking.asm"
-MisdreavusPokedexEntry:: INCLUDE "data/pokedex/entries/misdreavus.asm"
-UnownPokedexEntry:: INCLUDE "data/pokedex/entries/unown.asm"
-WobbuffetPokedexEntry:: INCLUDE "data/pokedex/entries/wobbuffet.asm"
-GirafarigPokedexEntry:: INCLUDE "data/pokedex/entries/girafarig.asm"
-PinecoPokedexEntry:: INCLUDE "data/pokedex/entries/pineco.asm"
-ForretressPokedexEntry:: INCLUDE "data/pokedex/entries/forretress.asm"
-DunsparcePokedexEntry:: INCLUDE "data/pokedex/entries/dunsparce.asm"
-GligarPokedexEntry:: INCLUDE "data/pokedex/entries/gligar.asm"
-SteelixPokedexEntry:: INCLUDE "data/pokedex/entries/steelix.asm"
-SnubbullPokedexEntry:: INCLUDE "data/pokedex/entries/snubbull.asm"
-GranbullPokedexEntry:: INCLUDE "data/pokedex/entries/granbull.asm"
-QwilfishPokedexEntry:: INCLUDE "data/pokedex/entries/qwilfish.asm"
-ScizorPokedexEntry:: INCLUDE "data/pokedex/entries/scizor.asm"
-ShucklePokedexEntry:: INCLUDE "data/pokedex/entries/shuckle.asm"
-HeracrossPokedexEntry:: INCLUDE "data/pokedex/entries/heracross.asm"
-SneaselPokedexEntry:: INCLUDE "data/pokedex/entries/sneasel.asm"
-TeddiursaPokedexEntry:: INCLUDE "data/pokedex/entries/teddiursa.asm"
-UrsaringPokedexEntry:: INCLUDE "data/pokedex/entries/ursaring.asm"
-SlugmaPokedexEntry:: INCLUDE "data/pokedex/entries/slugma.asm"
-MagcargoPokedexEntry:: INCLUDE "data/pokedex/entries/magcargo.asm"
-SwinubPokedexEntry:: INCLUDE "data/pokedex/entries/swinub.asm"
-PiloswinePokedexEntry:: INCLUDE "data/pokedex/entries/piloswine.asm"
-CorsolaPokedexEntry:: INCLUDE "data/pokedex/entries/corsola.asm"
-RemoraidPokedexEntry:: INCLUDE "data/pokedex/entries/remoraid.asm"
-OctilleryPokedexEntry:: INCLUDE "data/pokedex/entries/octillery.asm"
-DelibirdPokedexEntry:: INCLUDE "data/pokedex/entries/delibird.asm"
-MantinePokedexEntry:: INCLUDE "data/pokedex/entries/mantine.asm"
-SkarmoryPokedexEntry:: INCLUDE "data/pokedex/entries/skarmory.asm"
-HoundourPokedexEntry:: INCLUDE "data/pokedex/entries/houndour.asm"
-HoundoomPokedexEntry:: INCLUDE "data/pokedex/entries/houndoom.asm"
-KingdraPokedexEntry:: INCLUDE "data/pokedex/entries/kingdra.asm"
-PhanpyPokedexEntry:: INCLUDE "data/pokedex/entries/phanpy.asm"
-DonphanPokedexEntry:: INCLUDE "data/pokedex/entries/donphan.asm"
-Porygon2PokedexEntry:: INCLUDE "data/pokedex/entries/porygon2.asm"
-StantlerPokedexEntry:: INCLUDE "data/pokedex/entries/stantler.asm"
-SmearglePokedexEntry:: INCLUDE "data/pokedex/entries/smeargle.asm"
-TyroguePokedexEntry:: INCLUDE "data/pokedex/entries/tyrogue.asm"
-HitmontopPokedexEntry:: INCLUDE "data/pokedex/entries/hitmontop.asm"
-SmoochumPokedexEntry:: INCLUDE "data/pokedex/entries/smoochum.asm"
-ElekidPokedexEntry:: INCLUDE "data/pokedex/entries/elekid.asm"
-MagbyPokedexEntry:: INCLUDE "data/pokedex/entries/magby.asm"
-MiltankPokedexEntry:: INCLUDE "data/pokedex/entries/miltank.asm"
-BlisseyPokedexEntry:: INCLUDE "data/pokedex/entries/blissey.asm"
-RaikouPokedexEntry:: INCLUDE "data/pokedex/entries/raikou.asm"
-EnteiPokedexEntry:: INCLUDE "data/pokedex/entries/entei.asm"
-SuicunePokedexEntry:: INCLUDE "data/pokedex/entries/suicune.asm"
-LarvitarPokedexEntry:: INCLUDE "data/pokedex/entries/larvitar.asm"
-PupitarPokedexEntry:: INCLUDE "data/pokedex/entries/pupitar.asm"
-TyranitarPokedexEntry:: INCLUDE "data/pokedex/entries/tyranitar.asm"
-LugiaPokedexEntry:: INCLUDE "data/pokedex/entries/lugia.asm"
-HoOhPokedexEntry:: INCLUDE "data/pokedex/entries/ho_oh.asm"
-CelebiPokedexEntry:: INCLUDE "data/pokedex/entries/celebi.asm"
diff --git a/data/pokedex/entries_crystal.asm b/data/pokedex/entries_crystal.asm
deleted file mode 100644
index fc38b063d..000000000
--- a/data/pokedex/entries_crystal.asm
+++ /dev/null
@@ -1,2 +0,0 @@
-INCLUDE "pokecrystal.asm"
-INCLUDE "data/pokedex/entries.asm"
diff --git a/data/pokedex/entry_pointers.asm b/data/pokedex/entry_pointers.asm
index 5a432e661..c4ddc7280 100644
--- a/data/pokedex/entry_pointers.asm
+++ b/data/pokedex/entry_pointers.asm
@@ -1,77 +1,5 @@
-GetDexEntryPointer: ; 44333
-; return dex entry pointer b:de
- push hl
- ld hl, PokedexDataPointerTable
- ld a, b
- dec a
- ld d, 0
- ld e, a
- add hl, de
- add hl, de
- ld e, [hl]
- inc hl
- ld d, [hl]
- push de
- rlca
- rlca
- and $3
- ld hl, .PokedexEntryBanks
- ld d, 0
- ld e, a
- add hl, de
- ld b, [hl]
- pop de
- pop hl
- ret
-
-.PokedexEntryBanks: ; 44351
-
-GLOBAL PokedexEntries1
-GLOBAL PokedexEntries2
-GLOBAL PokedexEntries3
-GLOBAL PokedexEntries4
-
- db BANK(PokedexEntries1)
- db BANK(PokedexEntries2)
- db BANK(PokedexEntries3)
- db BANK(PokedexEntries4)
-
-GetDexEntryPagePointer: ; 44355
- call GetDexEntryPointer ; b:de
- push hl
- ld h, d
- ld l, e
-; skip species name
-.loop1
- ld a, b
- call GetFarByte
- inc hl
- cp "@"
- jr nz, .loop1
-; skip height and weight
-rept 4
- inc hl
-endr
-; if c != 1: skip entry
- dec c
- jr z, .done
-; skip entry
-.loop2
- ld a, b
- call GetFarByte
- inc hl
- cp "@"
- jr nz, .loop2
-
-.done
- ld d, h
- ld e, l
- pop hl
- ret
-
PokedexDataPointerTable: ; 0x44378
-; Pointers to all the Pokedex entries.
-
+; entries correspond to constants/pokemon_constants.asm
dw BulbasaurPokedexEntry
dw IvysaurPokedexEntry
dw VenusaurPokedexEntry
@@ -323,3 +251,4 @@ PokedexDataPointerTable: ; 0x44378
dw LugiaPokedexEntry
dw HoOhPokedexEntry
dw CelebiPokedexEntry
+; 0x4456e
diff --git a/data/pokedex/order_alpha.asm b/data/pokedex/order_alpha.asm
index bab0a981d..8fcb0acd1 100644
--- a/data/pokedex/order_alpha.asm
+++ b/data/pokedex/order_alpha.asm
@@ -1,5 +1,6 @@
-; Every Pokemon sorted alphabetically by name.
+; Every Pokémon sorted alphabetically by name.
+AlphabeticalPokedexOrder: ; 0x40c65
db ABRA
db AERODACTYL
db AIPOM
@@ -251,3 +252,4 @@
db YANMA
db ZAPDOS
db ZUBAT
+; 0x40d60
diff --git a/data/pokedex/order_new.asm b/data/pokedex/order_new.asm
index a98a658cd..bf7e3d298 100644
--- a/data/pokedex/order_new.asm
+++ b/data/pokedex/order_new.asm
@@ -1,5 +1,6 @@
-; Every Pokemon sorted in New Pokedex Order.
+; Every Pokémon sorted in New Pokédex Order.
+NewPokedexOrder: ; 0x40d60
db CHIKORITA
db BAYLEEF
db MEGANIUM
@@ -251,3 +252,4 @@
db MEWTWO
db MEW
db CELEBI
+; 0x40e5b
diff --git a/data/pokemon_names.asm b/data/pokemon_names.asm
index 06b1a6e55..266b0c020 100644
--- a/data/pokemon_names.asm
+++ b/data/pokemon_names.asm
@@ -1,3 +1,4 @@
+PokemonNames::
db "BULBASAUR@"
db "IVYSAUR@@@"
db "VENUSAUR@@"
diff --git a/data/spawn_points.asm b/data/spawn_points.asm
new file mode 100644
index 000000000..49ba362d7
--- /dev/null
+++ b/data/spawn_points.asm
@@ -0,0 +1,41 @@
+spawn: MACRO
+; map, y, x
+ map \1
+ db \2, \3
+ENDM
+
+SpawnPoints: ; 0x152ab
+; 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
+; 1531f
diff --git a/data/sprite_anim_frames.asm b/data/sprite_anim_frames.asm
new file mode 100755
index 000000000..0111a5bc2
--- /dev/null
+++ b/data/sprite_anim_frames.asm
@@ -0,0 +1,499 @@
+SpriteAnimFrameData: ; 8d6e6
+; entries correspond to SPRITE_ANIM_FRAMESET_* constants
+ dw .Frameset_00
+ dw .Frameset_PartyMon
+ dw .Frameset_02
+ dw .Frameset_03
+ dw .Frameset_04
+ dw .Frameset_05
+ dw .Frameset_06
+ dw .Frameset_07
+ dw .Frameset_TextEntryCursor
+ dw .Frameset_09
+ dw .Frameset_GameFreakLogo
+ dw .Frameset_GSIntroStar
+ dw .Frameset_GSIntroSparkle
+ dw .Frameset_SlotsGolem
+ dw .Frameset_SlotsChansey
+ dw .Frameset_SlotsChansey2
+ dw .Frameset_SlotsEgg
+ dw .Frameset_RedWalk
+ dw .Frameset_StillCursor
+ dw .Frameset_TradePokeBall
+ dw .Frameset_TradePokeBall0
+ dw .Frameset_TradePoof
+ dw .Frameset_TradeTubeBulge
+ dw .Frameset_TrademonIcon
+ dw .Frameset_TrademonBubble
+ dw .Frameset_EvolutionBallOfLight
+ dw .Frameset_RadioTuningKnob
+ dw .Frameset_MagnetTrainRed
+ dw .Frameset_1c
+ dw .Frameset_Leaf
+ dw .Frameset_CutTree
+ dw .Frameset_EggCrack
+ dw .Frameset_EggHatch
+ dw .Frameset_21
+ dw .Frameset_22
+ dw .Frameset_23
+ dw .Frameset_24
+ dw .Frameset_HeadbuttTree
+ dw .Frameset_26
+ dw .Frameset_27
+ dw .Frameset_28
+ dw .Frameset_29
+ dw .Frameset_2a
+ dw .Frameset_2b
+ dw .Frameset_2c
+ dw .Frameset_BlueWalk
+ dw .Frameset_MagnetTrainBlue
+ dw .Frameset_2f
+ dw .Frameset_30
+ dw .Frameset_31
+ dw .Frameset_32
+ dw .Frameset_33
+ dw .Frameset_34
+ dw .Frameset_IntroSuicune
+ dw .Frameset_IntroSuicune2
+ dw .Frameset_IntroPichu
+ dw .Frameset_IntroWooper
+ dw .Frameset_IntroUnown1
+ dw .Frameset_IntroUnown2
+ dw .Frameset_IntroUnown3
+ dw .Frameset_IntroUnown4
+ dw .Frameset_IntroUnownF2
+ dw .Frameset_IntroSuicuneAway
+ dw .Frameset_IntroUnownF
+ dw .Frameset_CelebiLeft
+ dw .Frameset_CelebiRight
+; 8d76a
+
+.Frameset_00:
+ frame SPRITE_ANIM_FRAME_IDX_00, 32
+ endanim
+
+.Frameset_PartyMon:
+ frame SPRITE_ANIM_FRAME_IDX_00, 8
+ frame SPRITE_ANIM_FRAME_IDX_01, 8
+ dorestart
+
+.Frameset_02:
+ frame SPRITE_ANIM_FRAME_IDX_3D, 8
+ frame SPRITE_ANIM_FRAME_IDX_3E, 8
+ dorestart
+
+.Frameset_03:
+ frame SPRITE_ANIM_FRAME_IDX_3F, 8
+ frame SPRITE_ANIM_FRAME_IDX_40, 8
+ dorestart
+
+.Frameset_04:
+ frame SPRITE_ANIM_FRAME_IDX_00, 4
+ frame SPRITE_ANIM_FRAME_IDX_01, 4
+ dorestart
+
+.Frameset_05:
+ frame SPRITE_ANIM_FRAME_IDX_3D, 4
+ frame SPRITE_ANIM_FRAME_IDX_3E, 4
+ dorestart
+
+.Frameset_06:
+ frame SPRITE_ANIM_FRAME_IDX_3F, 4
+ frame SPRITE_ANIM_FRAME_IDX_40, 4
+ dorestart
+
+.Frameset_RedWalk:
+ frame SPRITE_ANIM_FRAME_IDX_00, 8
+ frame SPRITE_ANIM_FRAME_IDX_01, 8
+ frame SPRITE_ANIM_FRAME_IDX_00, 8
+ frame SPRITE_ANIM_FRAME_IDX_01, 8, OAM_X_FLIP
+ dorestart
+
+.Frameset_BlueWalk:
+ frame SPRITE_ANIM_FRAME_IDX_63, 8
+ frame SPRITE_ANIM_FRAME_IDX_64, 8
+ frame SPRITE_ANIM_FRAME_IDX_63, 8
+ frame SPRITE_ANIM_FRAME_IDX_64, 8, OAM_X_FLIP
+ dorestart
+
+.Frameset_MagnetTrainBlue:
+ frame SPRITE_ANIM_FRAME_IDX_65, 8
+ frame SPRITE_ANIM_FRAME_IDX_66, 8
+ frame SPRITE_ANIM_FRAME_IDX_65, 8
+ frame SPRITE_ANIM_FRAME_IDX_66, 8, OAM_X_FLIP
+ dorestart
+
+.Frameset_07:
+ frame SPRITE_ANIM_FRAME_IDX_1E, 1
+ frame SPRITE_ANIM_FRAME_IDX_1F, 1
+ dorestart
+
+.Frameset_TextEntryCursor:
+ frame SPRITE_ANIM_FRAME_IDX_20, 1
+ dorepeat 1
+ dorestart
+
+.Frameset_09:
+ frame SPRITE_ANIM_FRAME_IDX_21, 1
+ dorepeat 1
+ dorestart
+
+.Frameset_GameFreakLogo:
+ frame SPRITE_ANIM_FRAME_IDX_81, 12
+ frame SPRITE_ANIM_FRAME_IDX_82, 1
+ frame SPRITE_ANIM_FRAME_IDX_83, 1
+ frame SPRITE_ANIM_FRAME_IDX_82, 4
+ frame SPRITE_ANIM_FRAME_IDX_81, 12
+ frame SPRITE_ANIM_FRAME_IDX_82, 12
+ frame SPRITE_ANIM_FRAME_IDX_83, 4
+ frame SPRITE_ANIM_FRAME_IDX_84, 32
+ frame SPRITE_ANIM_FRAME_IDX_85, 3
+ frame SPRITE_ANIM_FRAME_IDX_86, 3
+ frame SPRITE_ANIM_FRAME_IDX_87, 4
+ frame SPRITE_ANIM_FRAME_IDX_88, 4
+ frame SPRITE_ANIM_FRAME_IDX_89, 4
+ frame SPRITE_ANIM_FRAME_IDX_8A, 10
+ frame SPRITE_ANIM_FRAME_IDX_8B, 7
+ endanim
+
+.Frameset_GSIntroStar:
+ frame SPRITE_ANIM_FRAME_IDX_23, 3
+ frame SPRITE_ANIM_FRAME_IDX_23, 3, OAM_Y_FLIP
+ dorestart
+
+.Frameset_GSIntroSparkle:
+ frame SPRITE_ANIM_FRAME_IDX_24, 2
+ frame SPRITE_ANIM_FRAME_IDX_25, 2
+ frame SPRITE_ANIM_FRAME_IDX_26, 2
+ frame SPRITE_ANIM_FRAME_IDX_25, 2
+ dorestart
+
+.Frameset_SlotsGolem:
+ frame SPRITE_ANIM_FRAME_IDX_27, 7
+ frame SPRITE_ANIM_FRAME_IDX_28, 7
+ frame SPRITE_ANIM_FRAME_IDX_27, 7, OAM_Y_FLIP
+ frame SPRITE_ANIM_FRAME_IDX_28, 7, OAM_X_FLIP
+ dorestart
+
+.Frameset_SlotsChansey:
+ frame SPRITE_ANIM_FRAME_IDX_29, 7
+ frame SPRITE_ANIM_FRAME_IDX_2A, 7
+ frame SPRITE_ANIM_FRAME_IDX_29, 7
+ frame SPRITE_ANIM_FRAME_IDX_2B, 7
+ dorestart
+
+.Frameset_SlotsChansey2:
+ frame SPRITE_ANIM_FRAME_IDX_29, 7
+ frame SPRITE_ANIM_FRAME_IDX_2C, 7
+ frame SPRITE_ANIM_FRAME_IDX_2D, 7
+ frame SPRITE_ANIM_FRAME_IDX_2C, 7
+ frame SPRITE_ANIM_FRAME_IDX_29, 7
+ endanim
+
+.Frameset_SlotsEgg:
+ frame SPRITE_ANIM_FRAME_IDX_2E, 20
+ endanim
+
+.Frameset_StillCursor:
+ frame SPRITE_ANIM_FRAME_IDX_2F, 32
+ endanim
+
+.Frameset_TradePokeBall:
+ frame SPRITE_ANIM_FRAME_IDX_30, 32
+ endanim
+
+.Frameset_TradePokeBall0:
+ frame SPRITE_ANIM_FRAME_IDX_30, 3
+ frame SPRITE_ANIM_FRAME_IDX_31, 3
+ frame SPRITE_ANIM_FRAME_IDX_30, 3
+ frame SPRITE_ANIM_FRAME_IDX_31, 3, OAM_X_FLIP
+ dorestart
+
+.Frameset_TradePoof:
+ frame SPRITE_ANIM_FRAME_IDX_32, 4
+ frame SPRITE_ANIM_FRAME_IDX_33, 4
+ frame SPRITE_ANIM_FRAME_IDX_34, 4
+ delanim
+
+.Frameset_TradeTubeBulge:
+ frame SPRITE_ANIM_FRAME_IDX_35, 3
+ frame SPRITE_ANIM_FRAME_IDX_36, 3
+ dorestart
+
+.Frameset_TrademonIcon:
+ frame SPRITE_ANIM_FRAME_IDX_37, 7
+ frame SPRITE_ANIM_FRAME_IDX_38, 7
+ dorestart
+
+.Frameset_TrademonBubble:
+ frame SPRITE_ANIM_FRAME_IDX_39, 32
+ endanim
+
+.Frameset_EvolutionBallOfLight:
+ frame SPRITE_ANIM_FRAME_IDX_3B, 2
+ frame SPRITE_ANIM_FRAME_IDX_3A, 2
+ frame SPRITE_ANIM_FRAME_IDX_3B, 2
+ endanim
+
+.Frameset_RadioTuningKnob:
+ frame SPRITE_ANIM_FRAME_IDX_3C, 32
+ endanim
+
+.Frameset_MagnetTrainRed:
+ frame SPRITE_ANIM_FRAME_IDX_41, 8
+ frame SPRITE_ANIM_FRAME_IDX_42, 8
+ frame SPRITE_ANIM_FRAME_IDX_41, 8
+ frame SPRITE_ANIM_FRAME_IDX_42, 8, OAM_X_FLIP
+ dorestart
+
+; XXX
+ frame SPRITE_ANIM_FRAME_IDX_43, 8
+ frame SPRITE_ANIM_FRAME_IDX_44, 8
+ dorestart
+
+; XXX
+ frame SPRITE_ANIM_FRAME_IDX_45, 8
+ frame SPRITE_ANIM_FRAME_IDX_46, 8
+ dorestart
+
+; XXX
+ frame SPRITE_ANIM_FRAME_IDX_47, 8
+ frame SPRITE_ANIM_FRAME_IDX_48, 8
+ dorestart
+
+; XXX
+ frame SPRITE_ANIM_FRAME_IDX_49, 1
+ frame SPRITE_ANIM_FRAME_IDX_49, 1, OAM_X_FLIP
+ frame SPRITE_ANIM_FRAME_IDX_49, 1, OAM_X_FLIP, OAM_Y_FLIP
+ frame SPRITE_ANIM_FRAME_IDX_49, 1, OAM_Y_FLIP
+ dorestart
+
+; XXX
+ frame SPRITE_ANIM_FRAME_IDX_4A, 32
+ endanim
+
+; XXX
+ frame SPRITE_ANIM_FRAME_IDX_4B, 32
+ endanim
+
+; XXX
+ frame SPRITE_ANIM_FRAME_IDX_4C, 32
+ endanim
+
+; XXX
+ frame SPRITE_ANIM_FRAME_IDX_4D, 32
+ endanim
+
+; XXX
+ frame SPRITE_ANIM_FRAME_IDX_4E, 3
+ dorepeat 3
+ dorestart
+
+.Frameset_1c:
+ dorepeat 32
+ endanim
+
+.Frameset_Leaf:
+ frame SPRITE_ANIM_FRAME_IDX_4F, 32
+ endanim
+
+.Frameset_CutTree:
+ frame SPRITE_ANIM_FRAME_IDX_50, 2
+ frame SPRITE_ANIM_FRAME_IDX_51, 16
+ dorepeat 1
+ frame SPRITE_ANIM_FRAME_IDX_52, 1
+ dorepeat 1
+ frame SPRITE_ANIM_FRAME_IDX_53, 1
+ delanim
+
+.Frameset_EggCrack:
+ frame SPRITE_ANIM_FRAME_IDX_54, 32
+ endanim
+
+.Frameset_EggHatch:
+ frame SPRITE_ANIM_FRAME_IDX_55, 32
+ endanim
+
+.Frameset_21:
+ frame SPRITE_ANIM_FRAME_IDX_55, 32, OAM_X_FLIP
+ endanim
+
+.Frameset_22:
+ frame SPRITE_ANIM_FRAME_IDX_55, 32, OAM_Y_FLIP
+ endanim
+
+.Frameset_23:
+ frame SPRITE_ANIM_FRAME_IDX_55, 32, OAM_X_FLIP, OAM_Y_FLIP
+ endanim
+
+.Frameset_24:
+ frame SPRITE_ANIM_FRAME_IDX_56, 10
+ frame SPRITE_ANIM_FRAME_IDX_57, 9
+ frame SPRITE_ANIM_FRAME_IDX_58, 10
+ frame SPRITE_ANIM_FRAME_IDX_59, 10
+ frame SPRITE_ANIM_FRAME_IDX_58, 9
+ frame SPRITE_ANIM_FRAME_IDX_5A, 10
+ dorestart
+
+.Frameset_HeadbuttTree:
+ frame SPRITE_ANIM_FRAME_IDX_50, 2
+ frame SPRITE_ANIM_FRAME_IDX_5B, 2
+ frame SPRITE_ANIM_FRAME_IDX_50, 2
+ frame SPRITE_ANIM_FRAME_IDX_5B, 2, OAM_X_FLIP
+ dorestart
+
+.Frameset_26:
+ frame SPRITE_ANIM_FRAME_IDX_5C, 2
+ endanim
+
+.Frameset_27:
+ frame SPRITE_ANIM_FRAME_IDX_5D, 2
+ endanim
+
+.Frameset_28:
+ frame SPRITE_ANIM_FRAME_IDX_5E, 2
+ endanim
+
+.Frameset_29:
+ frame SPRITE_ANIM_FRAME_IDX_5F, 2
+ endanim
+
+.Frameset_2a:
+ frame SPRITE_ANIM_FRAME_IDX_60, 2
+ endanim
+
+.Frameset_2b:
+ frame SPRITE_ANIM_FRAME_IDX_61, 2
+ endanim
+
+.Frameset_2c:
+ frame SPRITE_ANIM_FRAME_IDX_62, 2
+ endanim
+
+.Frameset_2f:
+ frame SPRITE_ANIM_FRAME_IDX_32, 3
+ frame SPRITE_ANIM_FRAME_IDX_33, 3
+ frame SPRITE_ANIM_FRAME_IDX_34, 3
+ frame SPRITE_ANIM_FRAME_IDX_30, 3
+ frame SPRITE_ANIM_FRAME_IDX_31, 3
+ frame SPRITE_ANIM_FRAME_IDX_30, 3
+ frame SPRITE_ANIM_FRAME_IDX_31, 3, OAM_X_FLIP
+ frame SPRITE_ANIM_FRAME_IDX_30, 3
+ frame SPRITE_ANIM_FRAME_IDX_31, 3
+ frame SPRITE_ANIM_FRAME_IDX_30, 3
+ frame SPRITE_ANIM_FRAME_IDX_31, 3, OAM_X_FLIP
+ frame SPRITE_ANIM_FRAME_IDX_30, 3
+ frame SPRITE_ANIM_FRAME_IDX_31, 3
+ frame SPRITE_ANIM_FRAME_IDX_30, 3
+ frame SPRITE_ANIM_FRAME_IDX_31, 3, OAM_X_FLIP
+ endanim
+
+.Frameset_30:
+ frame SPRITE_ANIM_FRAME_IDX_30, 3
+ frame SPRITE_ANIM_FRAME_IDX_31, 3
+ frame SPRITE_ANIM_FRAME_IDX_30, 3
+ frame SPRITE_ANIM_FRAME_IDX_31, 3, OAM_X_FLIP
+ frame SPRITE_ANIM_FRAME_IDX_30, 3
+ frame SPRITE_ANIM_FRAME_IDX_31, 3
+ frame SPRITE_ANIM_FRAME_IDX_30, 3
+ frame SPRITE_ANIM_FRAME_IDX_31, 3, OAM_X_FLIP
+ frame SPRITE_ANIM_FRAME_IDX_30, 3
+ frame SPRITE_ANIM_FRAME_IDX_31, 3
+ frame SPRITE_ANIM_FRAME_IDX_30, 3
+ frame SPRITE_ANIM_FRAME_IDX_31, 3, OAM_X_FLIP
+ frame SPRITE_ANIM_FRAME_IDX_32, 3
+ frame SPRITE_ANIM_FRAME_IDX_33, 3
+ frame SPRITE_ANIM_FRAME_IDX_34, 3
+ delanim
+
+.Frameset_31:
+ frame SPRITE_ANIM_FRAME_IDX_67, 3
+ frame SPRITE_ANIM_FRAME_IDX_68, 3
+ dorestart
+
+.Frameset_32:
+ frame SPRITE_ANIM_FRAME_IDX_6C, 3
+ endanim
+
+.Frameset_33:
+ frame SPRITE_ANIM_FRAME_IDX_6D, 3
+ endanim
+
+.Frameset_34:
+ frame SPRITE_ANIM_FRAME_IDX_69, 2
+ frame SPRITE_ANIM_FRAME_IDX_6A, 2
+ frame SPRITE_ANIM_FRAME_IDX_6B, 2
+ delanim
+
+.Frameset_IntroSuicune:
+ frame SPRITE_ANIM_FRAME_IDX_6E, 3
+ frame SPRITE_ANIM_FRAME_IDX_6F, 3
+ frame SPRITE_ANIM_FRAME_IDX_70, 3
+ frame SPRITE_ANIM_FRAME_IDX_71, 3
+ dorestart
+
+.Frameset_IntroSuicune2:
+ frame SPRITE_ANIM_FRAME_IDX_71, 3
+ frame SPRITE_ANIM_FRAME_IDX_6E, 7
+ endanim
+
+.Frameset_IntroPichu:
+ frame SPRITE_ANIM_FRAME_IDX_72, 32
+ frame SPRITE_ANIM_FRAME_IDX_73, 7
+ frame SPRITE_ANIM_FRAME_IDX_74, 7
+ endanim
+
+.Frameset_IntroWooper:
+ frame SPRITE_ANIM_FRAME_IDX_75, 3
+ endanim
+
+.Frameset_IntroUnown1:
+ frame SPRITE_ANIM_FRAME_IDX_76, 3
+ frame SPRITE_ANIM_FRAME_IDX_77, 3
+ frame SPRITE_ANIM_FRAME_IDX_78, 7
+ delanim
+
+.Frameset_IntroUnown2:
+ frame SPRITE_ANIM_FRAME_IDX_76, 3, OAM_X_FLIP
+ frame SPRITE_ANIM_FRAME_IDX_77, 3, OAM_X_FLIP
+ frame SPRITE_ANIM_FRAME_IDX_78, 7, OAM_X_FLIP
+ delanim
+
+.Frameset_IntroUnown3:
+ frame SPRITE_ANIM_FRAME_IDX_76, 3, OAM_Y_FLIP
+ frame SPRITE_ANIM_FRAME_IDX_77, 3, OAM_Y_FLIP
+ frame SPRITE_ANIM_FRAME_IDX_78, 7, OAM_Y_FLIP
+ delanim
+
+.Frameset_IntroUnown4:
+ frame SPRITE_ANIM_FRAME_IDX_76, 3, OAM_X_FLIP, OAM_Y_FLIP
+ frame SPRITE_ANIM_FRAME_IDX_77, 3, OAM_X_FLIP, OAM_Y_FLIP
+ frame SPRITE_ANIM_FRAME_IDX_78, 7, OAM_X_FLIP, OAM_Y_FLIP
+ delanim
+
+.Frameset_IntroUnownF2:
+ frame SPRITE_ANIM_FRAME_IDX_79, 3
+ frame SPRITE_ANIM_FRAME_IDX_7A, 3
+ frame SPRITE_ANIM_FRAME_IDX_7B, 3
+ frame SPRITE_ANIM_FRAME_IDX_7C, 7
+ frame SPRITE_ANIM_FRAME_IDX_7D, 7
+ endanim
+
+.Frameset_IntroSuicuneAway:
+ frame SPRITE_ANIM_FRAME_IDX_7E, 3
+ endanim
+
+.Frameset_IntroUnownF:
+ dorepeat 0
+ endanim
+
+.Frameset_CelebiLeft:
+ frame SPRITE_ANIM_FRAME_IDX_7F, 8
+ frame SPRITE_ANIM_FRAME_IDX_80, 8
+ endanim
+
+.Frameset_CelebiRight:
+ frame SPRITE_ANIM_FRAME_IDX_7F, 8, OAM_X_FLIP
+ frame SPRITE_ANIM_FRAME_IDX_80, 8, OAM_X_FLIP
+ endanim
+; 8d94d
diff --git a/data/sprite_engine.asm b/data/sprite_anim_oam.asm
index 31872d531..304151e8c 100755..100644
--- a/data/sprite_engine.asm
+++ b/data/sprite_anim_oam.asm
@@ -1,503 +1,3 @@
-SpriteAnimFrameData: ; 8d6e6
-; entries correspond to SPRITE_ANIM_FRAMESET_* constants
- dw .Frameset_00
- dw .Frameset_PartyMon
- dw .Frameset_02
- dw .Frameset_03
- dw .Frameset_04
- dw .Frameset_05
- dw .Frameset_06
- dw .Frameset_07
- dw .Frameset_TextEntryCursor
- dw .Frameset_09
- dw .Frameset_GameFreakLogo
- dw .Frameset_GSIntroStar
- dw .Frameset_GSIntroSparkle
- dw .Frameset_SlotsGolem
- dw .Frameset_SlotsChansey
- dw .Frameset_SlotsChansey2
- dw .Frameset_SlotsEgg
- dw .Frameset_RedWalk
- dw .Frameset_StillCursor
- dw .Frameset_TradePokeBall
- dw .Frameset_TradePokeBall0
- dw .Frameset_TradePoof
- dw .Frameset_TradeTubeBulge
- dw .Frameset_TrademonIcon
- dw .Frameset_TrademonBubble
- dw .Frameset_EvolutionBallOfLight
- dw .Frameset_RadioTuningKnob
- dw .Frameset_MagnetTrainRed
- dw .Frameset_1c
- dw .Frameset_Leaf
- dw .Frameset_CutTree
- dw .Frameset_EggCrack
- dw .Frameset_EggHatch
- dw .Frameset_21
- dw .Frameset_22
- dw .Frameset_23
- dw .Frameset_24
- dw .Frameset_HeadbuttTree
- dw .Frameset_26
- dw .Frameset_27
- dw .Frameset_28
- dw .Frameset_29
- dw .Frameset_2a
- dw .Frameset_2b
- dw .Frameset_2c
- dw .Frameset_BlueWalk
- dw .Frameset_MagnetTrainBlue
- dw .Frameset_2f
- dw .Frameset_30
- dw .Frameset_31
- dw .Frameset_32
- dw .Frameset_33
- dw .Frameset_34
- dw .Frameset_IntroSuicune
- dw .Frameset_IntroSuicune2
- dw .Frameset_IntroPichu
- dw .Frameset_IntroWooper
- dw .Frameset_IntroUnown1
- dw .Frameset_IntroUnown2
- dw .Frameset_IntroUnown3
- dw .Frameset_IntroUnown4
- dw .Frameset_IntroUnownF2
- dw .Frameset_IntroSuicuneAway
- dw .Frameset_IntroUnownF
- dw .Frameset_CelebiLeft
- dw .Frameset_CelebiRight
-; 8d76a
-
-.Frameset_00:
- frame SPRITE_ANIM_FRAME_IDX_00, 32
- endanim
-
-.Frameset_PartyMon:
- frame SPRITE_ANIM_FRAME_IDX_00, 8
- frame SPRITE_ANIM_FRAME_IDX_01, 8
- dorestart
-
-.Frameset_02:
- frame SPRITE_ANIM_FRAME_IDX_3D, 8
- frame SPRITE_ANIM_FRAME_IDX_3E, 8
- dorestart
-
-.Frameset_03:
- frame SPRITE_ANIM_FRAME_IDX_3F, 8
- frame SPRITE_ANIM_FRAME_IDX_40, 8
- dorestart
-
-.Frameset_04:
- frame SPRITE_ANIM_FRAME_IDX_00, 4
- frame SPRITE_ANIM_FRAME_IDX_01, 4
- dorestart
-
-.Frameset_05:
- frame SPRITE_ANIM_FRAME_IDX_3D, 4
- frame SPRITE_ANIM_FRAME_IDX_3E, 4
- dorestart
-
-.Frameset_06:
- frame SPRITE_ANIM_FRAME_IDX_3F, 4
- frame SPRITE_ANIM_FRAME_IDX_40, 4
- dorestart
-
-.Frameset_RedWalk:
- frame SPRITE_ANIM_FRAME_IDX_00, 8
- frame SPRITE_ANIM_FRAME_IDX_01, 8
- frame SPRITE_ANIM_FRAME_IDX_00, 8
- frame SPRITE_ANIM_FRAME_IDX_01, 8, OAM_X_FLIP
- dorestart
-
-.Frameset_BlueWalk:
- frame SPRITE_ANIM_FRAME_IDX_63, 8
- frame SPRITE_ANIM_FRAME_IDX_64, 8
- frame SPRITE_ANIM_FRAME_IDX_63, 8
- frame SPRITE_ANIM_FRAME_IDX_64, 8, OAM_X_FLIP
- dorestart
-
-.Frameset_MagnetTrainBlue:
- frame SPRITE_ANIM_FRAME_IDX_65, 8
- frame SPRITE_ANIM_FRAME_IDX_66, 8
- frame SPRITE_ANIM_FRAME_IDX_65, 8
- frame SPRITE_ANIM_FRAME_IDX_66, 8, OAM_X_FLIP
- dorestart
-
-.Frameset_07:
- frame SPRITE_ANIM_FRAME_IDX_1E, 1
- frame SPRITE_ANIM_FRAME_IDX_1F, 1
- dorestart
-
-.Frameset_TextEntryCursor:
- frame SPRITE_ANIM_FRAME_IDX_20, 1
- dorepeat 1
- dorestart
-
-.Frameset_09:
- frame SPRITE_ANIM_FRAME_IDX_21, 1
- dorepeat 1
- dorestart
-
-.Frameset_GameFreakLogo:
- frame SPRITE_ANIM_FRAME_IDX_81, 12
- frame SPRITE_ANIM_FRAME_IDX_82, 1
- frame SPRITE_ANIM_FRAME_IDX_83, 1
- frame SPRITE_ANIM_FRAME_IDX_82, 4
- frame SPRITE_ANIM_FRAME_IDX_81, 12
- frame SPRITE_ANIM_FRAME_IDX_82, 12
- frame SPRITE_ANIM_FRAME_IDX_83, 4
- frame SPRITE_ANIM_FRAME_IDX_84, 32
- frame SPRITE_ANIM_FRAME_IDX_85, 3
- frame SPRITE_ANIM_FRAME_IDX_86, 3
- frame SPRITE_ANIM_FRAME_IDX_87, 4
- frame SPRITE_ANIM_FRAME_IDX_88, 4
- frame SPRITE_ANIM_FRAME_IDX_89, 4
- frame SPRITE_ANIM_FRAME_IDX_8A, 10
- frame SPRITE_ANIM_FRAME_IDX_8B, 7
- endanim
-
-.Frameset_GSIntroStar:
- frame SPRITE_ANIM_FRAME_IDX_23, 3
- frame SPRITE_ANIM_FRAME_IDX_23, 3, OAM_Y_FLIP
- dorestart
-
-.Frameset_GSIntroSparkle:
- frame SPRITE_ANIM_FRAME_IDX_24, 2
- frame SPRITE_ANIM_FRAME_IDX_25, 2
- frame SPRITE_ANIM_FRAME_IDX_26, 2
- frame SPRITE_ANIM_FRAME_IDX_25, 2
- dorestart
-
-.Frameset_SlotsGolem:
- frame SPRITE_ANIM_FRAME_IDX_27, 7
- frame SPRITE_ANIM_FRAME_IDX_28, 7
- frame SPRITE_ANIM_FRAME_IDX_27, 7, OAM_Y_FLIP
- frame SPRITE_ANIM_FRAME_IDX_28, 7, OAM_X_FLIP
- dorestart
-
-.Frameset_SlotsChansey:
- frame SPRITE_ANIM_FRAME_IDX_29, 7
- frame SPRITE_ANIM_FRAME_IDX_2A, 7
- frame SPRITE_ANIM_FRAME_IDX_29, 7
- frame SPRITE_ANIM_FRAME_IDX_2B, 7
- dorestart
-
-.Frameset_SlotsChansey2:
- frame SPRITE_ANIM_FRAME_IDX_29, 7
- frame SPRITE_ANIM_FRAME_IDX_2C, 7
- frame SPRITE_ANIM_FRAME_IDX_2D, 7
- frame SPRITE_ANIM_FRAME_IDX_2C, 7
- frame SPRITE_ANIM_FRAME_IDX_29, 7
- endanim
-
-.Frameset_SlotsEgg:
- frame SPRITE_ANIM_FRAME_IDX_2E, 20
- endanim
-
-.Frameset_StillCursor:
- frame SPRITE_ANIM_FRAME_IDX_2F, 32
- endanim
-
-.Frameset_TradePokeBall:
- frame SPRITE_ANIM_FRAME_IDX_30, 32
- endanim
-
-.Frameset_TradePokeBall0:
- frame SPRITE_ANIM_FRAME_IDX_30, 3
- frame SPRITE_ANIM_FRAME_IDX_31, 3
- frame SPRITE_ANIM_FRAME_IDX_30, 3
- frame SPRITE_ANIM_FRAME_IDX_31, 3, OAM_X_FLIP
- dorestart
-
-.Frameset_TradePoof:
- frame SPRITE_ANIM_FRAME_IDX_32, 4
- frame SPRITE_ANIM_FRAME_IDX_33, 4
- frame SPRITE_ANIM_FRAME_IDX_34, 4
- delanim
-
-.Frameset_TradeTubeBulge:
- frame SPRITE_ANIM_FRAME_IDX_35, 3
- frame SPRITE_ANIM_FRAME_IDX_36, 3
- dorestart
-
-.Frameset_TrademonIcon:
- frame SPRITE_ANIM_FRAME_IDX_37, 7
- frame SPRITE_ANIM_FRAME_IDX_38, 7
- dorestart
-
-.Frameset_TrademonBubble:
- frame SPRITE_ANIM_FRAME_IDX_39, 32
- endanim
-
-.Frameset_EvolutionBallOfLight:
- frame SPRITE_ANIM_FRAME_IDX_3B, 2
- frame SPRITE_ANIM_FRAME_IDX_3A, 2
- frame SPRITE_ANIM_FRAME_IDX_3B, 2
- endanim
-
-.Frameset_RadioTuningKnob:
- frame SPRITE_ANIM_FRAME_IDX_3C, 32
- endanim
-
-.Frameset_MagnetTrainRed:
- frame SPRITE_ANIM_FRAME_IDX_41, 8
- frame SPRITE_ANIM_FRAME_IDX_42, 8
- frame SPRITE_ANIM_FRAME_IDX_41, 8
- frame SPRITE_ANIM_FRAME_IDX_42, 8, OAM_X_FLIP
- dorestart
-
-; XXX
- frame SPRITE_ANIM_FRAME_IDX_43, 8
- frame SPRITE_ANIM_FRAME_IDX_44, 8
- dorestart
-
-; XXX
- frame SPRITE_ANIM_FRAME_IDX_45, 8
- frame SPRITE_ANIM_FRAME_IDX_46, 8
- dorestart
-
-; XXX
- frame SPRITE_ANIM_FRAME_IDX_47, 8
- frame SPRITE_ANIM_FRAME_IDX_48, 8
- dorestart
-
-; XXX
- frame SPRITE_ANIM_FRAME_IDX_49, 1
- frame SPRITE_ANIM_FRAME_IDX_49, 1, OAM_X_FLIP
- frame SPRITE_ANIM_FRAME_IDX_49, 1, OAM_X_FLIP, OAM_Y_FLIP
- frame SPRITE_ANIM_FRAME_IDX_49, 1, OAM_Y_FLIP
- dorestart
-
-; XXX
- frame SPRITE_ANIM_FRAME_IDX_4A, 32
- endanim
-
-; XXX
- frame SPRITE_ANIM_FRAME_IDX_4B, 32
- endanim
-
-; XXX
- frame SPRITE_ANIM_FRAME_IDX_4C, 32
- endanim
-
-; XXX
- frame SPRITE_ANIM_FRAME_IDX_4D, 32
- endanim
-
-; XXX
- frame SPRITE_ANIM_FRAME_IDX_4E, 3
- dorepeat 3
- dorestart
-
-.Frameset_1c:
- dorepeat 32
- endanim
-
-.Frameset_Leaf:
- frame SPRITE_ANIM_FRAME_IDX_4F, 32
- endanim
-
-.Frameset_CutTree:
- frame SPRITE_ANIM_FRAME_IDX_50, 2
- frame SPRITE_ANIM_FRAME_IDX_51, 16
- dorepeat 1
- frame SPRITE_ANIM_FRAME_IDX_52, 1
- dorepeat 1
- frame SPRITE_ANIM_FRAME_IDX_53, 1
- delanim
-
-.Frameset_EggCrack:
- frame SPRITE_ANIM_FRAME_IDX_54, 32
- endanim
-
-.Frameset_EggHatch:
- frame SPRITE_ANIM_FRAME_IDX_55, 32
- endanim
-
-.Frameset_21:
- frame SPRITE_ANIM_FRAME_IDX_55, 32, OAM_X_FLIP
- endanim
-
-.Frameset_22:
- frame SPRITE_ANIM_FRAME_IDX_55, 32, OAM_Y_FLIP
- endanim
-
-.Frameset_23:
- frame SPRITE_ANIM_FRAME_IDX_55, 32, OAM_X_FLIP, OAM_Y_FLIP
- endanim
-
-.Frameset_24:
- frame SPRITE_ANIM_FRAME_IDX_56, 10
- frame SPRITE_ANIM_FRAME_IDX_57, 9
- frame SPRITE_ANIM_FRAME_IDX_58, 10
- frame SPRITE_ANIM_FRAME_IDX_59, 10
- frame SPRITE_ANIM_FRAME_IDX_58, 9
- frame SPRITE_ANIM_FRAME_IDX_5A, 10
- dorestart
-
-.Frameset_HeadbuttTree:
- frame SPRITE_ANIM_FRAME_IDX_50, 2
- frame SPRITE_ANIM_FRAME_IDX_5B, 2
- frame SPRITE_ANIM_FRAME_IDX_50, 2
- frame SPRITE_ANIM_FRAME_IDX_5B, 2, OAM_X_FLIP
- dorestart
-
-.Frameset_26:
- frame SPRITE_ANIM_FRAME_IDX_5C, 2
- endanim
-
-.Frameset_27:
- frame SPRITE_ANIM_FRAME_IDX_5D, 2
- endanim
-
-.Frameset_28:
- frame SPRITE_ANIM_FRAME_IDX_5E, 2
- endanim
-
-.Frameset_29:
- frame SPRITE_ANIM_FRAME_IDX_5F, 2
- endanim
-
-.Frameset_2a:
- frame SPRITE_ANIM_FRAME_IDX_60, 2
- endanim
-
-.Frameset_2b:
- frame SPRITE_ANIM_FRAME_IDX_61, 2
- endanim
-
-.Frameset_2c:
- frame SPRITE_ANIM_FRAME_IDX_62, 2
- endanim
-
-.Frameset_2f:
- frame SPRITE_ANIM_FRAME_IDX_32, 3
- frame SPRITE_ANIM_FRAME_IDX_33, 3
- frame SPRITE_ANIM_FRAME_IDX_34, 3
- frame SPRITE_ANIM_FRAME_IDX_30, 3
- frame SPRITE_ANIM_FRAME_IDX_31, 3
- frame SPRITE_ANIM_FRAME_IDX_30, 3
- frame SPRITE_ANIM_FRAME_IDX_31, 3, OAM_X_FLIP
- frame SPRITE_ANIM_FRAME_IDX_30, 3
- frame SPRITE_ANIM_FRAME_IDX_31, 3
- frame SPRITE_ANIM_FRAME_IDX_30, 3
- frame SPRITE_ANIM_FRAME_IDX_31, 3, OAM_X_FLIP
- frame SPRITE_ANIM_FRAME_IDX_30, 3
- frame SPRITE_ANIM_FRAME_IDX_31, 3
- frame SPRITE_ANIM_FRAME_IDX_30, 3
- frame SPRITE_ANIM_FRAME_IDX_31, 3, OAM_X_FLIP
- endanim
-
-.Frameset_30:
- frame SPRITE_ANIM_FRAME_IDX_30, 3
- frame SPRITE_ANIM_FRAME_IDX_31, 3
- frame SPRITE_ANIM_FRAME_IDX_30, 3
- frame SPRITE_ANIM_FRAME_IDX_31, 3, OAM_X_FLIP
- frame SPRITE_ANIM_FRAME_IDX_30, 3
- frame SPRITE_ANIM_FRAME_IDX_31, 3
- frame SPRITE_ANIM_FRAME_IDX_30, 3
- frame SPRITE_ANIM_FRAME_IDX_31, 3, OAM_X_FLIP
- frame SPRITE_ANIM_FRAME_IDX_30, 3
- frame SPRITE_ANIM_FRAME_IDX_31, 3
- frame SPRITE_ANIM_FRAME_IDX_30, 3
- frame SPRITE_ANIM_FRAME_IDX_31, 3, OAM_X_FLIP
- frame SPRITE_ANIM_FRAME_IDX_32, 3
- frame SPRITE_ANIM_FRAME_IDX_33, 3
- frame SPRITE_ANIM_FRAME_IDX_34, 3
- delanim
-
-.Frameset_31:
- frame SPRITE_ANIM_FRAME_IDX_67, 3
- frame SPRITE_ANIM_FRAME_IDX_68, 3
- dorestart
-
-.Frameset_32:
- frame SPRITE_ANIM_FRAME_IDX_6C, 3
- endanim
-
-.Frameset_33:
- frame SPRITE_ANIM_FRAME_IDX_6D, 3
- endanim
-
-.Frameset_34:
- frame SPRITE_ANIM_FRAME_IDX_69, 2
- frame SPRITE_ANIM_FRAME_IDX_6A, 2
- frame SPRITE_ANIM_FRAME_IDX_6B, 2
- delanim
-
-.Frameset_IntroSuicune:
- frame SPRITE_ANIM_FRAME_IDX_6E, 3
- frame SPRITE_ANIM_FRAME_IDX_6F, 3
- frame SPRITE_ANIM_FRAME_IDX_70, 3
- frame SPRITE_ANIM_FRAME_IDX_71, 3
- dorestart
-
-.Frameset_IntroSuicune2:
- frame SPRITE_ANIM_FRAME_IDX_71, 3
- frame SPRITE_ANIM_FRAME_IDX_6E, 7
- endanim
-
-.Frameset_IntroPichu:
- frame SPRITE_ANIM_FRAME_IDX_72, 32
- frame SPRITE_ANIM_FRAME_IDX_73, 7
- frame SPRITE_ANIM_FRAME_IDX_74, 7
- endanim
-
-.Frameset_IntroWooper:
- frame SPRITE_ANIM_FRAME_IDX_75, 3
- endanim
-
-.Frameset_IntroUnown1:
- frame SPRITE_ANIM_FRAME_IDX_76, 3
- frame SPRITE_ANIM_FRAME_IDX_77, 3
- frame SPRITE_ANIM_FRAME_IDX_78, 7
- delanim
-
-.Frameset_IntroUnown2:
- frame SPRITE_ANIM_FRAME_IDX_76, 3, OAM_X_FLIP
- frame SPRITE_ANIM_FRAME_IDX_77, 3, OAM_X_FLIP
- frame SPRITE_ANIM_FRAME_IDX_78, 7, OAM_X_FLIP
- delanim
-
-.Frameset_IntroUnown3:
- frame SPRITE_ANIM_FRAME_IDX_76, 3, OAM_Y_FLIP
- frame SPRITE_ANIM_FRAME_IDX_77, 3, OAM_Y_FLIP
- frame SPRITE_ANIM_FRAME_IDX_78, 7, OAM_Y_FLIP
- delanim
-
-.Frameset_IntroUnown4:
- frame SPRITE_ANIM_FRAME_IDX_76, 3, OAM_X_FLIP, OAM_Y_FLIP
- frame SPRITE_ANIM_FRAME_IDX_77, 3, OAM_X_FLIP, OAM_Y_FLIP
- frame SPRITE_ANIM_FRAME_IDX_78, 7, OAM_X_FLIP, OAM_Y_FLIP
- delanim
-
-.Frameset_IntroUnownF2:
- frame SPRITE_ANIM_FRAME_IDX_79, 3
- frame SPRITE_ANIM_FRAME_IDX_7A, 3
- frame SPRITE_ANIM_FRAME_IDX_7B, 3
- frame SPRITE_ANIM_FRAME_IDX_7C, 7
- frame SPRITE_ANIM_FRAME_IDX_7D, 7
- endanim
-
-.Frameset_IntroSuicuneAway:
- frame SPRITE_ANIM_FRAME_IDX_7E, 3
- endanim
-
-.Frameset_IntroUnownF:
- dorepeat 0
- endanim
-
-.Frameset_CelebiLeft:
- frame SPRITE_ANIM_FRAME_IDX_7F, 8
- frame SPRITE_ANIM_FRAME_IDX_80, 8
- endanim
-
-.Frameset_CelebiRight:
- frame SPRITE_ANIM_FRAME_IDX_7F, 8, OAM_X_FLIP
- frame SPRITE_ANIM_FRAME_IDX_80, 8, OAM_X_FLIP
- endanim
-; 8d94d
-
SpriteAnimOAMData: ; 8d94d
; entries correspond to SPRITE_ANIM_FRAME_IDX_* constants
; vtile offset, pointer
@@ -1634,17 +1134,3 @@ SpriteAnimOAMData: ; 8d94d
dsprite 0, 0, 0, 4, $52, $01
dsprite 0, 0, 1, 4, $53, $01
; 8e706
-
-BrokenStdGFXPointers: ; Broken 2bpp pointers
- dbbw $80, $01, .deleted ; 128-tile 2bpp at 1:672a (inside Multiply)
- dbbw $80, $01, .deleted
- dbbw $80, $01, .deleted
- dbbw $80, $01, .deleted
- dbbw $10, $37, .deleted ; 16-tile 2bpp at 37:672a (within Tileset11GFX)
- dbbw $10, $11, .deleted ; 16-tile 2bpp at 11:672a (empty data)
- dbbw $10, $39, .deleted ; 16-tile 2bpp at 39:672a (empty data)
- dbbw $10, $24, .deleted ; 16-tile 2bpp at 24:672a (inside Function926f7)
- dbbw $10, $21, .deleted ; 16-tile 2bpp at 21:672a (inside Function8671c)
-
-.deleted
-; 8e72a (23:672a)
diff --git a/data/sprite_anim_seqs.asm b/data/sprite_anim_seqs.asm
new file mode 100644
index 000000000..8f8d89aaf
--- /dev/null
+++ b/data/sprite_anim_seqs.asm
@@ -0,0 +1,94 @@
+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
+; 8d24b
diff --git a/data/sprite_mons.asm b/data/sprite_mons.asm
new file mode 100644
index 000000000..d3000e2b7
--- /dev/null
+++ b/data/sprite_mons.asm
@@ -0,0 +1,38 @@
+SpriteMons: ; 14495
+; 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
+; 144b8
diff --git a/data/time_capsule/catch_rate_items.asm b/data/time_capsule/catch_rate_items.asm
new file mode 100644
index 000000000..fbab7d434
--- /dev/null
+++ b/data/time_capsule/catch_rate_items.asm
@@ -0,0 +1,19 @@
+; Pokémon traded from RBY do not have held items, so GSC usually interprets the
+; catch rate as an item. However, if the catch rate appears in this table, the
+; item associated with the table entry is used instead.
+
+TimeCapsule_CatchRateItems: ; 28785
+ db ITEM_19, LEFTOVERS
+ db ITEM_2D, BITTER_BERRY
+ db ITEM_32, GOLD_BERRY
+ db ITEM_5A, BERRY
+ db ITEM_64, BERRY
+ db ITEM_78, BERRY
+ db ITEM_87, BERRY
+ db ITEM_BE, BERRY
+ db ITEM_C3, BERRY
+ db ITEM_DC, BERRY
+ db ITEM_FA, BERRY
+ db -1, BERRY
+ db 0 ; end
+; 2879e
diff --git a/data/time_capsule/mon_order.asm b/data/time_capsule/mon_order.asm
new file mode 100644
index 000000000..e40ba0273
--- /dev/null
+++ b/data/time_capsule/mon_order.asm
@@ -0,0 +1,255 @@
+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 ; 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
+; fba18
diff --git a/data/time_capsule/special_stats.asm b/data/time_capsule/special_stats.asm
new file mode 100644
index 000000000..9998692ab
--- /dev/null
+++ b/data/time_capsule/special_stats.asm
@@ -0,0 +1,155 @@
+; The original base Special stat for each Pokémon from Red/Blue
+
+KantoMonSpecials: ; fb656
+ 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
+; fb6ed
diff --git a/data/tmhm_moves.asm b/data/tmhm_moves.asm
new file mode 100644
index 000000000..c1af85ec5
--- /dev/null
+++ b/data/tmhm_moves.asm
@@ -0,0 +1,69 @@
+TMHMMoves: ; 1167a
+; 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
+; 116b7
diff --git a/data/wild/bug_contest_mons.asm b/data/wild/bug_contest_mons.asm
new file mode 100644
index 000000000..c3cdeaa8a
--- /dev/null
+++ b/data/wild/bug_contest_mons.asm
@@ -0,0 +1,14 @@
+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
+; 97db3
diff --git a/data/wild/johto_grass.asm b/data/wild/johto_grass.asm
index f241dd5d8..be435b048 100644
--- a/data/wild/johto_grass.asm
+++ b/data/wild/johto_grass.asm
@@ -1,5 +1,7 @@
; Johto Pokémon in grass
+JohtoGrassWildMons: ; 0x2a5e9
+
map SPROUT_TOWER_2F
db 2 percent, 2 percent, 2 percent ; encounter rates: morn/day/nite
; morn
diff --git a/data/wild/johto_water.asm b/data/wild/johto_water.asm
index a4d957ef0..d6e11c3a0 100644
--- a/data/wild/johto_water.asm
+++ b/data/wild/johto_water.asm
@@ -1,5 +1,7 @@
; Johto Pokémon in water
+JohtoWaterWildMons: ; 0x2b11d
+
map RUINS_OF_ALPH_OUTSIDE
db 2 percent ; encounter rate
db 15, WOOPER
diff --git a/data/wild/kanto_grass.asm b/data/wild/kanto_grass.asm
index e06627d19..415514748 100644
--- a/data/wild/kanto_grass.asm
+++ b/data/wild/kanto_grass.asm
@@ -1,5 +1,7 @@
; Kanto Pokémon in grass
+KantoGrassWildMons: ; 0x2b274
+
map DIGLETTS_CAVE
db 4 percent, 2 percent, 8 percent ; encounter rates: morn/day/nite
; morn
diff --git a/data/wild/kanto_water.asm b/data/wild/kanto_water.asm
index 558d56a26..71fab48fb 100644
--- a/data/wild/kanto_water.asm
+++ b/data/wild/kanto_water.asm
@@ -1,5 +1,7 @@
; Kanto Pokémon in water
+KantoWaterWildMons: ; 0x2b7f7
+
map TOHJO_FALLS
db 4 percent ; encounter rate
db 20, GOLDEEN
diff --git a/data/wild/probabilities.asm b/data/wild/probabilities.asm
new file mode 100644
index 000000000..a18e9d336
--- /dev/null
+++ b/data/wild/probabilities.asm
@@ -0,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
diff --git a/data/wild/roammon_maps.asm b/data/wild/roammon_maps.asm
new file mode 100644
index 000000000..ee213bff5
--- /dev/null
+++ b/data/wild/roammon_maps.asm
@@ -0,0 +1,33 @@
+; 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
+
+RoamMaps: ; 2a40f
+ 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
+; 2a4a0
diff --git a/data/wild/swarm_grass.asm b/data/wild/swarm_grass.asm
index 61d0d8532..a26417f64 100644
--- a/data/wild/swarm_grass.asm
+++ b/data/wild/swarm_grass.asm
@@ -1,4 +1,6 @@
-; swarms in grass
+; Pokémon swarms in grass
+
+SwarmGrassWildMons: ; 0x2b8d0
; Dunsparce swarm
map DARK_CAVE_VIOLET_ENTRANCE
diff --git a/data/wild/swarm_water.asm b/data/wild/swarm_water.asm
index 67751b2bd..3f69af512 100644
--- a/data/wild/swarm_water.asm
+++ b/data/wild/swarm_water.asm
@@ -1,4 +1,6 @@
-; swarms in water
+; Pokémon swarms in water
+
+SwarmWaterWildMons: ; 0x2b92f
; No swarms encountered while surfing in Crystal
diff --git a/data/wild/treemon_maps.asm b/data/wild/treemon_maps.asm
new file mode 100644
index 000000000..47491c2c9
--- /dev/null
+++ b/data/wild/treemon_maps.asm
@@ -0,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
diff --git a/data/wild/treemons.asm b/data/wild/treemons.asm
new file mode 100644
index 000000000..0cb8fa83d
--- /dev/null
+++ b/data/wild/treemons.asm
@@ -0,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