summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIIMarckus <iimarckus@gmail.com>2018-10-04 00:04:18 -0600
committerIIMarckus <iimarckus@gmail.com>2018-10-04 00:04:18 -0600
commitd34ed8847fafac0fba47f54db5b8e6ce5e4c927b (patch)
tree8f7db7a54c8cd7a168ea5e8bb12bff4de2afd54e
parent6910c7a29002fd01fe4bb330b63294eafdb92865 (diff)
Add map objects from bank 4A.
-rw-r--r--constants/event_flags.asm14
-rw-r--r--constants/map_constants.asm8
-rw-r--r--main.asm13
-rw-r--r--maps/Route26.asm414
-rw-r--r--maps/Route27.asm452
-rw-r--r--maps/Route28.asm29
-rw-r--r--maps/Route29.asm438
-rw-r--r--maps/Route30.asm348
-rw-r--r--maps/Route31.asm365
9 files changed, 2063 insertions, 18 deletions
diff --git a/constants/event_flags.asm b/constants/event_flags.asm
index 471eaa8f..613ebfac 100644
--- a/constants/event_flags.asm
+++ b/constants/event_flags.asm
@@ -630,17 +630,17 @@
const EVENT_GOT_CALCIUM_FROM_ERIN
const EVENT_KENJI_ON_BREAK
const EVENT_GAVEN_ASKED_FOR_PHONE_NUMBER
- const EVENT_26C
+ const EVENT_GAVEN_READY_FOR_REMATCH
const EVENT_BETH_ASKED_FOR_PHONE_NUMBER
- const EVENT_26E
+ const EVENT_BETH_READY_FOR_REMATCH
const EVENT_JOSE_ASKED_FOR_PHONE_NUMBER
- const EVENT_270
+ const EVENT_JOSE_READY_FOR_REMATCH
const EVENT_REENA_ASKED_FOR_PHONE_NUMBER
- const EVENT_272
+ const EVENT_REENA_READY_FOR_REMATCH
const EVENT_JOEY_ASKED_FOR_PHONE_NUMBER
- const EVENT_274
+ const EVENT_JOEY_READY_FOR_REMATCH
const EVENT_WADE_ASKED_FOR_PHONE_NUMBER
- const EVENT_276
+ const EVENT_WADE_READY_FOR_REMATCH
const EVENT_RALPH_ASKED_FOR_PHONE_NUMBER
const EVENT_RALPH_READY_FOR_REMATCH
const EVENT_LIZ_ASKED_FOR_PHONE_NUMBER
@@ -1777,7 +1777,7 @@
const EVENT_ROUTE_27_TM_SOLARBEAM
const EVENT_ROUTE_27_RARE_CANDY
const EVENT_ROUTE_29_POTION
- const EVENT_ROUTE_31_POTION
+ const EVENT_ROUTE_31_ANTIDOTE
const EVENT_ROUTE_31_POKE_BALL
const EVENT_ROUTE_32_GREAT_BALL
const EVENT_ROUTE_32_POTION
diff --git a/constants/map_constants.asm b/constants/map_constants.asm
index cb874504..ea2ff37d 100644
--- a/constants/map_constants.asm
+++ b/constants/map_constants.asm
@@ -360,7 +360,7 @@ ENDM
map_const ROUTE_28, 9, 20 ; 1
map_const SILVER_CAVE_OUTSIDE, 18, 20 ; 2
map_const SILVER_CAVE_POKECENTER_1F, 4, 5 ; 3
- map_const ROUTE_28_FAMOUS_SPEECH_HOUSE, 4, 4 ; 4
+ map_const ROUTE_28_STEEL_WING_HOUSE, 4, 4 ; 4
newgroup ; 20
@@ -437,8 +437,8 @@ ENDM
map_const PLAYERS_HOUSE_2F, 3, 4 ; 7
map_const PLAYERS_NEIGHBORS_HOUSE, 4, 4 ; 8
map_const ELMS_HOUSE, 4, 4 ; 9
- map_const ROUTE_26_HEAL_SPEECH_HOUSE, 4, 4 ; 10
- map_const ROUTE_26_DAY_OF_WEEK_SIBLINGS_HOUSE, 4, 4 ; 11
+ map_const ROUTE_26_HEAL_HOUSE, 4, 4 ; 10
+ map_const DAY_OF_WEEK_SIBLINGS_HOUSE, 4, 4 ; 11
map_const ROUTE_27_SANDSTORM_HOUSE, 4, 4 ; 12
map_const ROUTE_29_ROUTE_46_GATE, 4, 5 ; 13
@@ -470,6 +470,6 @@ ENDM
map_const CHERRYGROVE_GYM_SPEECH_HOUSE, 4, 4 ; 6
map_const GUIDE_GENTS_HOUSE, 4, 4 ; 7
map_const CHERRYGROVE_EVOLUTION_SPEECH_HOUSE, 4, 4 ; 8
- map_const ROUTE_30_BERRY_SPEECH_HOUSE, 4, 4 ; 9
+ map_const ROUTE_30_BERRY_HOUSE, 4, 4 ; 9
map_const MR_POKEMONS_HOUSE, 4, 4 ; 10
map_const ROUTE_31_VIOLET_GATE, 4, 5 ; 11
diff --git a/main.asm b/main.asm
index 470f99a7..32383f2a 100644
--- a/main.asm
+++ b/main.asm
@@ -1638,13 +1638,12 @@ SECTION "bank49", ROMX, BANK[$49]
dr $124000, $128000
SECTION "bank4a", ROMX, BANK[$4a]
-;INCLUDE "maps/Route26.asm"
-;INCLUDE "maps/Route27.asm"
-;INCLUDE "maps/Route28.asm"
-;INCLUDE "maps/Route29.asm"
-;INCLUDE "maps/Route30.asm"
-;INCLUDE "maps/Route31.asm"
- dr $128000, $12c000
+INCLUDE "maps/Route26.asm"
+INCLUDE "maps/Route27.asm"
+INCLUDE "maps/Route28.asm"
+INCLUDE "maps/Route29.asm"
+INCLUDE "maps/Route30.asm"
+INCLUDE "maps/Route31.asm"
SECTION "bank4b", ROMX, BANK[$4b]
INCLUDE "maps/Route32.asm"
diff --git a/maps/Route26.asm b/maps/Route26.asm
new file mode 100644
index 00000000..aa6de49a
--- /dev/null
+++ b/maps/Route26.asm
@@ -0,0 +1,414 @@
+ const_def 2 ; object constants
+ const ROUTE26_COOLTRAINER_M1
+ const ROUTE26_COOLTRAINER_M2
+ const ROUTE26_COOLTRAINER_F1
+ const ROUTE26_COOLTRAINER_F2
+ const ROUTE26_YOUNGSTER
+ const ROUTE26_FISHER
+ const ROUTE26_FRUIT_TREE
+ const ROUTE26_POKE_BALL
+
+Route26_MapScripts:
+ db 0 ; scene scripts
+
+ db 0 ; callbacks
+
+TrainerCooltrainermJake:
+ trainer COOLTRAINERM, JAKE, EVENT_BEAT_COOLTRAINERM_JAKE, CooltrainermJakeSeenText, CooltrainermJakeBeatenText, 0, .Script
+
+.Script:
+ endifjustbattled
+ opentext
+ writetext CooltrainermJakeAfterBattleText
+ waitbutton
+ closetext
+ end
+
+TrainerCooltrainermGaven3:
+ trainer COOLTRAINERM, GAVEN3, EVENT_BEAT_COOLTRAINERM_GAVEN, CooltrainermGaven3SeenText, CooltrainermGaven3BeatenText, 0, .Script
+
+.Script:
+ endifjustbattled
+ opentext
+ checkevent EVENT_GAVEN_READY_FOR_REMATCH
+ iftrue .WantsBattle
+ checkcellnum PHONE_COOLTRAINERM_GAVEN
+ iftrue .NumberAccepted
+ checkevent EVENT_GAVEN_ASKED_FOR_PHONE_NUMBER
+ iftrue .AskedAlready
+ writetext CooltrainermGavenAfterText
+ buttonsound
+ setevent EVENT_GAVEN_ASKED_FOR_PHONE_NUMBER
+ scall .AskNumber1
+ jump .AskForNumber
+
+.AskedAlready:
+ scall .AskNumber2
+.AskForNumber:
+ askforphonenumber PHONE_COOLTRAINERM_GAVEN
+ ifequal PHONE_CONTACTS_FULL, .PhoneFull
+ ifequal PHONE_CONTACT_REFUSED, .NumberDeclined
+ trainertotext COOLTRAINERM, GAVEN3, MEM_BUFFER_0
+ scall .RegisteredNumber
+ jump .NumberAccepted
+
+.WantsBattle:
+ scall .Rematch
+ winlosstext CooltrainermGaven3BeatenText, 0
+ checkevent EVENT_RESTORED_POWER_TO_KANTO
+ iftrue .LoadFight2
+ checkevent EVENT_BEAT_ELITE_FOUR
+ iftrue .LoadFight1
+ loadtrainer COOLTRAINERM, GAVEN3
+ startbattle
+ reloadmapafterbattle
+ clearevent EVENT_GAVEN_READY_FOR_REMATCH
+ end
+
+.LoadFight1:
+ loadtrainer COOLTRAINERM, GAVEN1
+ startbattle
+ reloadmapafterbattle
+ clearevent EVENT_GAVEN_READY_FOR_REMATCH
+ end
+
+.LoadFight2:
+ loadtrainer COOLTRAINERM, GAVEN2
+ startbattle
+ reloadmapafterbattle
+ clearevent EVENT_GAVEN_READY_FOR_REMATCH
+ end
+
+.AskNumber1:
+ jumpstd asknumber1m
+ end
+
+.AskNumber2:
+ jumpstd asknumber2m
+ end
+
+.RegisteredNumber:
+ jumpstd registerednumberm
+ end
+
+.NumberAccepted:
+ jumpstd numberacceptedm
+ end
+
+.NumberDeclined:
+ jumpstd numberdeclinedm
+ end
+
+.PhoneFull:
+ jumpstd phonefullm
+ end
+
+.Rematch:
+ jumpstd rematchm
+ end
+
+TrainerCooltrainerfJoyce:
+ trainer COOLTRAINERF, JOYCE, EVENT_BEAT_COOLTRAINERF_JOYCE, CooltrainerfJoyceSeenText, CooltrainerfJoyceBeatenText, 0, .Script
+
+.Script:
+ endifjustbattled
+ opentext
+ writetext CooltrainerfJoyceAfterBattleText
+ waitbutton
+ closetext
+ end
+
+TrainerCooltrainerfBeth1:
+ trainer COOLTRAINERF, BETH1, EVENT_BEAT_COOLTRAINERF_BETH, CooltrainerfBeth1SeenText, CooltrainerfBeth1BeatenText, 0, .Script
+
+.Script:
+ endifjustbattled
+ opentext
+ checkevent EVENT_BETH_READY_FOR_REMATCH
+ iftrue .WantsBattle
+ checkcellnum PHONE_COOLTRAINERF_BETH
+ iftrue .NumberAccepted
+ checkevent EVENT_BETH_ASKED_FOR_PHONE_NUMBER
+ iftrue .AskedAlready
+ writetext CooltrainerfBethAfterText
+ buttonsound
+ setevent EVENT_BETH_ASKED_FOR_PHONE_NUMBER
+ scall .AskNumber1
+ jump .AskForNumber
+
+.AskedAlready:
+ scall .AskNumber2
+.AskForNumber:
+ askforphonenumber PHONE_COOLTRAINERF_BETH
+ ifequal PHONE_CONTACTS_FULL, .PhoneFull
+ ifequal PHONE_CONTACT_REFUSED, .NumberDeclined
+ trainertotext COOLTRAINERF, BETH1, MEM_BUFFER_0
+ scall .RegisteredNumber
+ jump .NumberAccepted
+
+.WantsBattle:
+ scall .Rematch
+ winlosstext CooltrainerfBeth1BeatenText, 0
+ checkevent EVENT_RESTORED_POWER_TO_KANTO
+ iftrue .LoadFight2
+ checkevent EVENT_BEAT_ELITE_FOUR
+ iftrue .LoadFight1
+ loadtrainer COOLTRAINERF, BETH1
+ startbattle
+ reloadmapafterbattle
+ clearevent EVENT_BETH_READY_FOR_REMATCH
+ end
+
+.LoadFight1:
+ loadtrainer COOLTRAINERF, BETH2
+ startbattle
+ reloadmapafterbattle
+ clearevent EVENT_BETH_READY_FOR_REMATCH
+ end
+
+.LoadFight2:
+ loadtrainer COOLTRAINERF, BETH3
+ startbattle
+ reloadmapafterbattle
+ clearevent EVENT_BETH_READY_FOR_REMATCH
+ end
+
+.AskNumber1:
+ jumpstd asknumber1f
+ end
+
+.AskNumber2:
+ jumpstd asknumber2f
+ end
+
+.RegisteredNumber:
+ jumpstd registerednumberf
+ end
+
+.NumberAccepted:
+ jumpstd numberacceptedf
+ end
+
+.NumberDeclined:
+ jumpstd numberdeclinedf
+ end
+
+.PhoneFull:
+ jumpstd phonefullf
+ end
+
+.Rematch:
+ jumpstd rematchf
+ end
+
+TrainerPsychicRichard:
+ trainer PSYCHIC_T, RICHARD, EVENT_BEAT_PSYCHIC_RICHARD, PsychicRichardSeenText, PsychicRichardBeatenText, 0, .Script
+
+.Script:
+ endifjustbattled
+ opentext
+ writetext PsychicRichardAfterBattleText
+ waitbutton
+ closetext
+ end
+
+TrainerFisherScott:
+ trainer FISHER, SCOTT, EVENT_BEAT_FISHER_SCOTT, FisherScottSeenText, FisherScottBeatenText, 0, .Script
+
+.Script:
+ endifjustbattled
+ opentext
+ writetext FisherScottAfterBattleText
+ waitbutton
+ closetext
+ end
+
+Route26Sign:
+ jumptext Route26SignText
+
+Route26FruitTree:
+ fruittree FRUITTREE_ROUTE_26
+
+Route26MaxElixer:
+ itemball MAX_ELIXER
+
+CooltrainermJakeSeenText:
+ text "I'm making my"
+ line "final preparations"
+
+ para "for the #MON"
+ line "LEAGUE."
+ done
+
+CooltrainermJakeBeatenText:
+ text "I blew it!"
+ done
+
+CooltrainermJakeAfterBattleText:
+ text "It's going to be"
+ line "tough to win at"
+ cont "the LEAGUE."
+
+ para "I need to do some"
+ line "more training."
+
+ para "I hear that the"
+ line "LEAGUE's ELITE"
+
+ para "FOUR are tougher"
+ line "than GYM LEADERS."
+ done
+
+CooltrainermGaven3SeenText:
+ text "By experiencing"
+ line "tough battles, you"
+ cont "gain power."
+ done
+
+CooltrainermGaven3BeatenText:
+ text "Gaah! Life is even"
+ line "tougher!"
+ done
+
+CooltrainermGavenAfterText:
+ text "To get to #MON"
+ line "LEAGUE, you have"
+
+ para "to get through"
+ line "VICTORY ROAD."
+
+ para "But VICTORY ROAD"
+ line "is tough."
+
+ para "Practically nobody"
+ line "goes there!"
+ done
+
+CooltrainerfJoyceSeenText:
+ text "Since you've come"
+ line "this far, you must"
+ cont "be good."
+
+ para "I'm going to give"
+ line "this battle every-"
+ cont "thing I've got!"
+ done
+
+CooltrainerfJoyceBeatenText:
+ text "No! I don't"
+ line "believe this!"
+ done
+
+CooltrainerfJoyceAfterBattleText:
+ text "I've defeated"
+ line "eight GYM LEADERS,"
+
+ para "so I was feeling"
+ line "confident."
+
+ para "I'll have to try"
+ line "harder next time."
+ done
+
+CooltrainerfBeth1SeenText:
+ text "I lost to a train-"
+ line "er named <RIVAL>."
+
+ para "He was really"
+ line "strong, but…"
+
+ para "It was as if he"
+ line "absolutely had to"
+ cont "win at any cost."
+
+ para "I felt sorry for"
+ line "his #MON."
+ done
+
+CooltrainerfBeth1BeatenText:
+ text "#MON aren't"
+ line "tools of war."
+ done
+
+CooltrainerfBethAfterText:
+ text "#MON are in-"
+ line "valuable, lifelong"
+ cont "partners."
+ done
+
+PsychicRichardSeenText:
+ text "Wow, look at all"
+ line "those BADGES!"
+ cont "I'm impressed."
+
+ para "But you're not"
+ line "satisfied by just"
+
+ para "collecting them,"
+ line "right?"
+ done
+
+PsychicRichardBeatenText:
+ text "Good battle!"
+ done
+
+PsychicRichardAfterBattleText:
+ text "People and #MON"
+ line "grow from their"
+ cont "experiences."
+
+ para "Don't get lazy and"
+ line "complacent."
+ done
+
+FisherScottSeenText:
+ text "I'm feeling great"
+ line "today!"
+
+ para "I feel like I"
+ line "could boot even"
+ cont "the LEAGUE CHAMP!"
+ done
+
+FisherScottBeatenText:
+ text "No! Not in this"
+ line "battle!"
+ done
+
+FisherScottAfterBattleText:
+ text "Just like in fish-"
+ line "ing, it's all over"
+
+ para "in #MON if you"
+ line "give up."
+ done
+
+Route26SignText:
+ text "ROUTE 26"
+
+ para "#MON LEAGUE"
+ line "RECEPTION GATE"
+ done
+
+Route26_MapEvents:
+ db 0, 0 ; filler
+
+ db 3 ; warp events
+ warp_event 7, 5, VICTORY_ROAD_GATE, 3
+ warp_event 15, 57, ROUTE_26_HEAL_HOUSE, 1
+ warp_event 5, 71, DAY_OF_WEEK_SIBLINGS_HOUSE, 1
+
+ db 0 ; coord events
+
+ db 1 ; bg events
+ bg_event 8, 6, BGEVENT_READ, Route26Sign
+
+ db 8 ; object events
+ object_event 11, 16, SPRITE_COOLTRAINER_M, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, PAL_NPC_RED, OBJECTTYPE_TRAINER, 2, TrainerCooltrainermJake, -1
+ object_event 9, 38, SPRITE_COOLTRAINER_M, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, PAL_NPC_RED, OBJECTTYPE_TRAINER, 5, TrainerCooltrainermGaven3, -1
+ object_event 10, 56, SPRITE_COOLTRAINER_F, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, PAL_NPC_RED, OBJECTTYPE_TRAINER, 3, TrainerCooltrainerfJoyce, -1
+ object_event 5, 8, SPRITE_COOLTRAINER_F, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, PAL_NPC_RED, OBJECTTYPE_TRAINER, 4, TrainerCooltrainerfBeth1, -1
+ object_event 13, 79, SPRITE_YOUNGSTER, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, PAL_NPC_BLUE, OBJECTTYPE_TRAINER, 4, TrainerPsychicRichard, -1
+ object_event 10, 92, SPRITE_FISHER, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, PAL_NPC_GREEN, OBJECTTYPE_TRAINER, 3, TrainerFisherScott, -1
+ object_event 14, 54, SPRITE_FRUIT_TREE, SPRITEMOVEDATA_STILL, 0, 0, -1, -1, 0, OBJECTTYPE_SCRIPT, 0, Route26FruitTree, -1
+ object_event 9, 15, SPRITE_POKE_BALL, SPRITEMOVEDATA_STILL, 0, 0, -1, -1, 0, OBJECTTYPE_ITEMBALL, 0, Route26MaxElixer, EVENT_ROUTE_26_MAX_ELIXER
diff --git a/maps/Route27.asm b/maps/Route27.asm
new file mode 100644
index 00000000..e08ac68b
--- /dev/null
+++ b/maps/Route27.asm
@@ -0,0 +1,452 @@
+ const_def 2 ; object constants
+ const ROUTE27_COOLTRAINER_M1
+ const ROUTE27_COOLTRAINER_M2
+ const ROUTE27_COOLTRAINER_F1
+ const ROUTE27_COOLTRAINER_F2
+ const ROUTE27_YOUNGSTER1
+ const ROUTE27_YOUNGSTER2
+ const ROUTE27_POKE_BALL1
+ const ROUTE27_POKE_BALL2
+ const ROUTE27_FISHER
+
+Route27_MapScripts:
+ db 2 ; scene scripts
+ scene_script .DummyScene0 ; SCENE_DEFAULT
+ scene_script .DummyScene1 ; SCENE_FINISHED
+
+ db 0 ; callbacks
+
+.DummyScene0:
+ end
+
+.DummyScene1:
+ end
+
+FirstStepIntoKantoLeftScene:
+ turnobject ROUTE27_FISHER, LEFT
+ showemote EMOTE_SHOCK, ROUTE27_FISHER, 15
+ applymovement ROUTE27_FISHER, MovementData_0x1a0a66
+ jump FirstStepIntoKantoScene_Continue
+
+FirstStepIntoKantoRightScene:
+ turnobject ROUTE27_FISHER, LEFT
+ showemote EMOTE_SHOCK, ROUTE27_FISHER, 15
+ applymovement ROUTE27_FISHER, MovementData_0x1a0a69
+FirstStepIntoKantoScene_Continue:
+ turnobject PLAYER, RIGHT
+ opentext
+ writetext Route27FisherHeyText
+ buttonsound
+ writetext Route27FisherText
+ waitbutton
+ closetext
+ setscene SCENE_FINISHED
+ end
+
+Route27FisherScript:
+ jumptextfaceplayer Route27FisherText
+
+TrainerPsychicGilbert:
+ trainer PSYCHIC_T, GILBERT, EVENT_BEAT_PSYCHIC_GILBERT, PsychicGilbertSeenText, PsychicGilbertBeatenText, 0, .Script
+
+.Script:
+ endifjustbattled
+ opentext
+ writetext PsychicGilbertAfterBattleText
+ waitbutton
+ closetext
+ end
+
+TrainerBirdKeeperJose2:
+ trainer BIRD_KEEPER, JOSE2, EVENT_BEAT_BIRD_KEEPER_JOSE2, BirdKeeperJose2SeenText, BirdKeeperJose2BeatenText, 0, .Script
+
+.Script:
+ endifjustbattled
+ opentext
+ checkevent EVENT_JOSE_READY_FOR_REMATCH
+ iftrue .WantsBattle
+ checkcellnum PHONE_BIRDKEEPER_JOSE
+ iftrue .NumberAccepted
+ checkevent EVENT_JOSE_ASKED_FOR_PHONE_NUMBER
+ iftrue .AskedAlready
+ writetext BirdKeeperJose2AfterBattleText
+ buttonsound
+ setevent EVENT_JOSE_ASKED_FOR_PHONE_NUMBER
+ scall .AskNumber1
+ jump .AskForNumber
+
+.AskedAlready:
+ scall .AskNumber2
+.AskForNumber:
+ askforphonenumber PHONE_BIRDKEEPER_JOSE
+ ifequal PHONE_CONTACTS_FULL, .PhoneFull
+ ifequal PHONE_CONTACT_REFUSED, .NumberDeclined
+ trainertotext BIRD_KEEPER, JOSE2, MEM_BUFFER_0
+ scall .RegisteredNumber
+ jump .NumberAccepted
+
+.WantsBattle:
+ scall .Rematch
+ winlosstext BirdKeeperJose2BeatenText, 0
+ checkevent EVENT_RESTORED_POWER_TO_KANTO
+ iftrue .LoadFight2
+ checkevent EVENT_BEAT_ELITE_FOUR
+ iftrue .LoadFight1
+ loadtrainer BIRD_KEEPER, JOSE2
+ startbattle
+ reloadmapafterbattle
+ clearevent EVENT_JOSE_READY_FOR_REMATCH
+ end
+
+.LoadFight1:
+ loadtrainer BIRD_KEEPER, JOSE1
+ startbattle
+ reloadmapafterbattle
+ clearevent EVENT_JOSE_READY_FOR_REMATCH
+ end
+
+.LoadFight2:
+ loadtrainer BIRD_KEEPER, JOSE3
+ startbattle
+ reloadmapafterbattle
+ clearevent EVENT_JOSE_READY_FOR_REMATCH
+ end
+
+.AskNumber1:
+ jumpstd asknumber1m
+ end
+
+.AskNumber2:
+ jumpstd asknumber2m
+ end
+
+.RegisteredNumber:
+ jumpstd registerednumberm
+ end
+
+.NumberAccepted:
+ jumpstd numberacceptedm
+ end
+
+.NumberDeclined:
+ jumpstd numberdeclinedm
+ end
+
+.PhoneFull:
+ jumpstd phonefullm
+ end
+
+.Rematch:
+ jumpstd rematchm
+ end
+
+TrainerCooltrainermBlake:
+ trainer COOLTRAINERM, BLAKE, EVENT_BEAT_COOLTRAINERM_BLAKE, CooltrainermBlakeSeenText, CooltrainermBlakeBeatenText, 0, .Script
+
+.Script:
+ endifjustbattled
+ opentext
+ writetext CooltrainermBlakeAfterBattleText
+ waitbutton
+ closetext
+ end
+
+TrainerCooltrainermBrian:
+ trainer COOLTRAINERM, BRIAN, EVENT_BEAT_COOLTRAINERM_BRIAN, CooltrainermBrianSeenText, CooltrainermBrianBeatenText, 0, .Script
+
+.Script:
+ endifjustbattled
+ opentext
+ writetext CooltrainermBrianAfterBattleText
+ waitbutton
+ closetext
+ end
+
+TrainerCooltrainerfReena:
+ trainer COOLTRAINERF, REENA1, EVENT_BEAT_COOLTRAINERF_REENA, CooltrainerfReenaSeenText, CooltrainerfReenaBeatenText, 0, .Script
+
+.Script:
+ endifjustbattled
+ opentext
+ checkevent EVENT_REENA_READY_FOR_REMATCH
+ iftrue .WantsBattle
+ checkcellnum PHONE_COOLTRAINERF_REENA
+ iftrue .NumberAccepted
+ checkevent EVENT_REENA_ASKED_FOR_PHONE_NUMBER
+ iftrue .AskedAlready
+ writetext CooltrainerfReenaAfterBattleText
+ buttonsound
+ setevent EVENT_REENA_ASKED_FOR_PHONE_NUMBER
+ scall .AskNumber1
+ jump .AskForNumber
+
+.AskedAlready:
+ scall .AskNumber2
+.AskForNumber:
+ askforphonenumber PHONE_COOLTRAINERF_REENA
+ ifequal PHONE_CONTACTS_FULL, .PhoneFull
+ ifequal PHONE_CONTACT_REFUSED, .NumberDeclined
+ trainertotext COOLTRAINERF, REENA1, MEM_BUFFER_0
+ scall .RegisteredNumber
+ jump .NumberAccepted
+
+.WantsBattle:
+ scall .Rematch
+ winlosstext CooltrainerfReenaBeatenText, 0
+ checkevent EVENT_RESTORED_POWER_TO_KANTO
+ iftrue .LoadFight2
+ checkevent EVENT_BEAT_ELITE_FOUR
+ iftrue .LoadFight1
+ loadtrainer COOLTRAINERF, REENA1
+ startbattle
+ reloadmapafterbattle
+ clearevent EVENT_REENA_READY_FOR_REMATCH
+ end
+
+.LoadFight1:
+ loadtrainer COOLTRAINERF, REENA2
+ startbattle
+ reloadmapafterbattle
+ clearevent EVENT_REENA_READY_FOR_REMATCH
+ end
+
+.LoadFight2:
+ loadtrainer COOLTRAINERF, REENA3
+ startbattle
+ reloadmapafterbattle
+ clearevent EVENT_REENA_READY_FOR_REMATCH
+ end
+
+.AskNumber1:
+ jumpstd asknumber1f
+ end
+
+.AskNumber2:
+ jumpstd asknumber2f
+ end
+
+.RegisteredNumber:
+ jumpstd registerednumberf
+ end
+
+.NumberAccepted:
+ jumpstd numberacceptedf
+ end
+
+.NumberDeclined:
+ jumpstd numberdeclinedf
+ end
+
+.PhoneFull:
+ jumpstd phonefullf
+ end
+
+.Rematch:
+ jumpstd rematchf
+ end
+
+TrainerCooltrainerfMegan:
+ trainer COOLTRAINERF, MEGAN, EVENT_BEAT_COOLTRAINERF_MEGAN, CooltrainerfMeganSeenText, CooltrainerfMeganBeatenText, 0, .Script
+
+.Script:
+ endifjustbattled
+ opentext
+ writetext CooltrainerfMeganAfterBattleText
+ waitbutton
+ closetext
+ end
+
+TohjoFallsSign:
+ jumptext TohjoFallsSignText
+
+Route27TMSolarbeam:
+ itemball TM_SOLARBEAM
+
+Route27RareCandy:
+ itemball RARE_CANDY
+
+MovementData_0x1a0a66:
+ step LEFT
+ step LEFT
+ step_end
+
+MovementData_0x1a0a69:
+ step LEFT
+ step_end
+
+Route27FisherHeyText:
+ text "Hey!"
+ done
+
+Route27FisherText:
+ text "Do you know what"
+ line "you just did?"
+
+ para "You've taken your"
+ line "first step into"
+ cont "KANTO."
+
+ para "Check your #-"
+ line "GEAR MAP and see."
+ done
+
+CooltrainermBlakeSeenText:
+ text "You look pretty"
+ line "strong."
+ cont "Let me battle you!"
+ done
+
+CooltrainermBlakeBeatenText:
+ text "Yow!"
+ done
+
+CooltrainermBlakeAfterBattleText:
+ text "If you prevail on"
+ line "this harsh trek,"
+
+ para "the truth will be"
+ line "revealed!"
+
+ para "Heh, sorry, I just"
+ line "wanted to say"
+ cont "something cool."
+ done
+
+CooltrainermBrianSeenText:
+ text "Hm? You're good,"
+ line "aren't you?"
+ done
+
+CooltrainermBrianBeatenText:
+ text "Just as I thought!"
+ done
+
+CooltrainermBrianAfterBattleText:
+ text "A good trainer can"
+ line "recognize other"
+ cont "good trainers."
+ done
+
+CooltrainerfReenaSeenText:
+ text "You shouldn't"
+ line "underestimate the"
+
+ para "wild #MON in"
+ line "these parts."
+ done
+
+CooltrainerfReenaBeatenText:
+ text "Oh! You're much"
+ line "too strong!"
+ done
+
+CooltrainerfReenaAfterBattleText:
+ text "You're just a kid,"
+ line "but you're not to"
+
+ para "be underestimated"
+ line "either."
+ done
+
+CooltrainerfMeganSeenText:
+ text "It's rare to see"
+ line "anyone come here."
+
+ para "Are you training"
+ line "on your own?"
+ done
+
+CooltrainerfMeganBeatenText:
+ text "Oh! You're really"
+ line "strong!"
+ done
+
+CooltrainerfMeganAfterBattleText:
+ text "I'm checking out"
+ line "pre- and post-"
+ cont "evolution #MON."
+
+ para "Evolution really"
+ line "does make #MON"
+ cont "stronger."
+
+ para "But evolved forms"
+ line "also learn moves"
+ cont "later on."
+ done
+
+PsychicGilbertSeenText:
+ text "Don't say a thing!"
+
+ para "Let me guess what"
+ line "you're thinking."
+
+ para "Mmmmmmm…"
+
+ para "I got it! You're"
+ line "on the #MON"
+ cont "LEAGUE challenge!"
+ done
+
+PsychicGilbertBeatenText:
+ text "You're too much!"
+ done
+
+PsychicGilbertAfterBattleText:
+ text "With your skills,"
+ line "you'll do well at"
+ cont "the LEAGUE."
+
+ para "That's what my"
+ line "premonition says."
+ done
+
+BirdKeeperJose2SeenText:
+ text "Tweet! Tweet!"
+ line "Tetweet!"
+ done
+
+BirdKeeperJose2BeatenText:
+ text "Tweet!"
+ done
+
+BirdKeeperJose2AfterBattleText:
+ text "BIRD KEEPERS like"
+ line "me mimic bird"
+
+ para "whistles to com-"
+ line "mand #MON."
+ done
+
+TohjoFallsSignText:
+ text "TOHJO FALLS"
+
+ para "The Link Between"
+ line "KANTO and JOHTO"
+ done
+
+Route27_MapEvents:
+ db 0, 0 ; filler
+
+ db 3 ; warp events
+ warp_event 33, 7, ROUTE_27_SANDSTORM_HOUSE, 1
+ warp_event 26, 5, TOHJO_FALLS, 1
+ warp_event 36, 5, TOHJO_FALLS, 2
+
+ db 2 ; coord events
+ coord_event 18, 10, SCENE_DEFAULT, FirstStepIntoKantoLeftScene
+ coord_event 19, 10, SCENE_DEFAULT, FirstStepIntoKantoRightScene
+
+ db 1 ; bg events
+ bg_event 25, 7, BGEVENT_READ, TohjoFallsSign
+
+ db 9 ; object events
+ object_event 49, 7, SPRITE_COOLTRAINER_M, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, PAL_NPC_RED, OBJECTTYPE_TRAINER, 3, TrainerCooltrainermBlake, -1
+ object_event 58, 6, SPRITE_COOLTRAINER_M, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, PAL_NPC_RED, OBJECTTYPE_TRAINER, 5, TrainerCooltrainermBrian, -1
+ object_event 72, 11, SPRITE_COOLTRAINER_F, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, PAL_NPC_RED, OBJECTTYPE_TRAINER, 5, TrainerCooltrainerfReena, -1
+ object_event 37, 6, SPRITE_COOLTRAINER_F, SPRITEMOVEDATA_SPINCLOCKWISE, 0, 0, -1, -1, PAL_NPC_RED, OBJECTTYPE_TRAINER, 2, TrainerCooltrainerfMegan, -1
+ object_event 64, 7, SPRITE_YOUNGSTER, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, PAL_NPC_BLUE, OBJECTTYPE_TRAINER, 5, TrainerPsychicGilbert, -1
+ object_event 58, 13, SPRITE_YOUNGSTER, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, PAL_NPC_BLUE, OBJECTTYPE_TRAINER, 3, TrainerBirdKeeperJose2, -1
+ object_event 60, 12, SPRITE_POKE_BALL, SPRITEMOVEDATA_STILL, 0, 0, -1, -1, 0, OBJECTTYPE_ITEMBALL, 0, Route27TMSolarbeam, EVENT_ROUTE_27_TM_SOLARBEAM
+ object_event 53, 12, SPRITE_POKE_BALL, SPRITEMOVEDATA_STILL, 0, 0, -1, -1, 0, OBJECTTYPE_ITEMBALL, 0, Route27RareCandy, EVENT_ROUTE_27_RARE_CANDY
+ object_event 21, 10, SPRITE_FISHER, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, 0, OBJECTTYPE_SCRIPT, 3, Route27FisherScript, -1
diff --git a/maps/Route28.asm b/maps/Route28.asm
new file mode 100644
index 00000000..af41de7c
--- /dev/null
+++ b/maps/Route28.asm
@@ -0,0 +1,29 @@
+Route28_MapScripts:
+ db 0 ; scene scripts
+
+ db 0 ; callbacks
+
+Route28Sign:
+ jumptext Route28SignText
+
+Route28HiddenRareCandy:
+ hiddenitem RARE_CANDY, EVENT_ROUTE_28_HIDDEN_RARE_CANDY
+
+Route28SignText:
+ text "ROUTE 28"
+ done
+
+Route28_MapEvents:
+ db 0, 0 ; filler
+
+ db 2 ; warp events
+ warp_event 7, 3, ROUTE_28_STEEL_WING_HOUSE, 1
+ warp_event 33, 5, VICTORY_ROAD_GATE, 7
+
+ db 0 ; coord events
+
+ db 2 ; bg events
+ bg_event 31, 5, BGEVENT_READ, Route28Sign
+ bg_event 25, 2, BGEVENT_ITEM, Route28HiddenRareCandy
+
+ db 0 ; object events
diff --git a/maps/Route29.asm b/maps/Route29.asm
new file mode 100644
index 00000000..3b3322f1
--- /dev/null
+++ b/maps/Route29.asm
@@ -0,0 +1,438 @@
+ const_def 2 ; object constants
+ const ROUTE29_COOLTRAINER_M1
+ const ROUTE29_YOUNGSTER
+ const ROUTE29_TEACHER1
+ const ROUTE29_FRUIT_TREE
+ const ROUTE29_FISHER
+ const ROUTE29_COOLTRAINER_M2
+ const ROUTE29_TUSCANY
+ const ROUTE29_POKE_BALL
+
+Route29_MapScripts:
+ db 2 ; scene scripts
+ scene_script .DummyScene0 ; SCENE_ROUTE29_NOTHING
+ scene_script .DummyScene1 ; SCENE_ROUTE29_CATCH_TUTORIAL
+
+ db 1 ; callbacks
+ callback MAPCALLBACK_OBJECTS, .Tuscany
+
+.DummyScene0:
+ end
+
+.DummyScene1:
+ end
+
+.Tuscany:
+ checkflag ENGINE_ZEPHYRBADGE
+ iftrue .DoesTuscanyAppear
+
+.TuscanyDisappears:
+ disappear ROUTE29_TUSCANY
+ return
+
+.DoesTuscanyAppear:
+ checkcode VAR_WEEKDAY
+ ifnotequal TUESDAY, .TuscanyDisappears
+ appear ROUTE29_TUSCANY
+ return
+
+Route29Tutorial1:
+ turnobject ROUTE29_COOLTRAINER_M1, UP
+ showemote EMOTE_SHOCK, ROUTE29_COOLTRAINER_M1, 15
+ applymovement ROUTE29_COOLTRAINER_M1, DudeMovementData1a
+ turnobject PLAYER, LEFT
+ setevent EVENT_DUDE_TALKED_TO_YOU
+ opentext
+ writetext CatchingTutorialIntroText
+ yesorno
+ iffalse Script_RefusedTutorial1
+ closetext
+ follow ROUTE29_COOLTRAINER_M1, PLAYER
+ applymovement ROUTE29_COOLTRAINER_M1, DudeMovementData1b
+ stopfollow
+ loadwildmon RATTATA, 5
+ catchtutorial BATTLETYPE_TUTORIAL
+ turnobject ROUTE29_COOLTRAINER_M1, UP
+ opentext
+ writetext CatchingTutorialDebriefText
+ waitbutton
+ closetext
+ setscene SCENE_ROUTE29_NOTHING
+ setevent EVENT_LEARNED_TO_CATCH_POKEMON
+ end
+
+Route29Tutorial2:
+ turnobject ROUTE29_COOLTRAINER_M1, UP
+ showemote EMOTE_SHOCK, ROUTE29_COOLTRAINER_M1, 15
+ applymovement ROUTE29_COOLTRAINER_M1, DudeMovementData2a
+ turnobject PLAYER, LEFT
+ setevent EVENT_DUDE_TALKED_TO_YOU
+ opentext
+ writetext CatchingTutorialIntroText
+ yesorno
+ iffalse Script_RefusedTutorial2
+ closetext
+ follow ROUTE29_COOLTRAINER_M1, PLAYER
+ applymovement ROUTE29_COOLTRAINER_M1, DudeMovementData2b
+ stopfollow
+ loadwildmon RATTATA, 5
+ catchtutorial BATTLETYPE_TUTORIAL
+ turnobject ROUTE29_COOLTRAINER_M1, UP
+ opentext
+ writetext CatchingTutorialDebriefText
+ waitbutton
+ closetext
+ setscene SCENE_ROUTE29_NOTHING
+ setevent EVENT_LEARNED_TO_CATCH_POKEMON
+ end
+
+Script_RefusedTutorial1:
+ writetext CatchingTutorialDeclinedText
+ waitbutton
+ closetext
+ applymovement ROUTE29_COOLTRAINER_M1, DudeMovementData1b
+ setscene SCENE_ROUTE29_NOTHING
+ end
+
+Script_RefusedTutorial2:
+ writetext CatchingTutorialDeclinedText
+ waitbutton
+ closetext
+ applymovement ROUTE29_COOLTRAINER_M1, DudeMovementData2b
+ setscene SCENE_ROUTE29_NOTHING
+ end
+
+CatchingTutorialDudeScript:
+ faceplayer
+ opentext
+ checkcode VAR_BOXSPACE
+ ifequal 0, .BoxFull
+ checkevent EVENT_LEARNED_TO_CATCH_POKEMON
+ iftrue .BoxFull
+ checkevent EVENT_GAVE_MYSTERY_EGG_TO_ELM
+ iffalse .BoxFull
+ writetext CatchingTutorialRepeatText
+ yesorno
+ iffalse .Declined
+ closetext
+ loadwildmon RATTATA, 5
+ catchtutorial BATTLETYPE_TUTORIAL
+ opentext
+ writetext CatchingTutorialDebriefText
+ waitbutton
+ closetext
+ setevent EVENT_LEARNED_TO_CATCH_POKEMON
+ end
+
+.BoxFull:
+ writetext CatchingTutorialBoxFullText
+ waitbutton
+ closetext
+ end
+
+.Declined:
+ writetext CatchingTutorialDeclinedText
+ waitbutton
+ closetext
+ end
+
+Route29YoungsterScript:
+ jumptextfaceplayer Route29YoungsterText
+
+Route29TeacherScript:
+ jumptextfaceplayer Route29TeacherText
+
+Route29FisherScript:
+ jumptextfaceplayer Route29FisherText
+
+Route29CooltrainerMScript:
+ faceplayer
+ opentext
+ checktime DAY
+ iftrue .day_morn
+ checktime NITE
+ iftrue .nite
+.day_morn
+ writetext Route29CooltrainerMText_WaitingForNight
+ waitbutton
+ closetext
+ end
+
+.nite
+ writetext Route29CooltrainerMText_WaitingForMorning
+ waitbutton
+ closetext
+ end
+
+TuscanyScript:
+ faceplayer
+ opentext
+ checkevent EVENT_GOT_PINK_BOW_FROM_TUSCANY
+ iftrue TuscanyTuesdayScript
+ checkcode VAR_WEEKDAY
+ ifnotequal TUESDAY, TuscanyNotTuesdayScript
+ checkevent EVENT_MET_TUSCANY_OF_TUESDAY
+ iftrue .MetTuscany
+ writetext MeetTuscanyText
+ buttonsound
+ setevent EVENT_MET_TUSCANY_OF_TUESDAY
+.MetTuscany:
+ writetext TuscanyGivesGiftText
+ buttonsound
+ verbosegiveitem PINK_BOW
+ iffalse TuscanyDoneScript
+ setevent EVENT_GOT_PINK_BOW_FROM_TUSCANY
+ writetext TuscanyGaveGiftText
+ waitbutton
+ closetext
+ end
+
+TuscanyTuesdayScript:
+ writetext TuscanyTuesdayText
+ waitbutton
+TuscanyDoneScript:
+ closetext
+ end
+
+TuscanyNotTuesdayScript:
+ writetext TuscanyNotTuesdayText
+ waitbutton
+ closetext
+ end
+
+Route29Sign1:
+ jumptext Route29Sign1Text
+
+Route29Sign2:
+ jumptext Route29Sign2Text
+
+Route29FruitTree:
+ fruittree FRUITTREE_ROUTE_29
+
+Route29Potion:
+ itemball POTION
+
+DudeMovementData1a:
+ step UP
+ step UP
+ step UP
+ step UP
+ step RIGHT
+ step RIGHT
+ step_end
+
+DudeMovementData2a:
+ step UP
+ step UP
+ step UP
+ step RIGHT
+ step RIGHT
+ step_end
+
+DudeMovementData1b:
+ step LEFT
+ step LEFT
+ step DOWN
+ step DOWN
+ step DOWN
+ step DOWN
+ step_end
+
+DudeMovementData2b:
+ step LEFT
+ step LEFT
+ step DOWN
+ step DOWN
+ step DOWN
+ step_end
+
+CatchingTutorialBoxFullText:
+ text "#MON hide in"
+ line "the grass. Who"
+
+ para "knows when they'll"
+ line "pop out…"
+ done
+
+CatchingTutorialIntroText:
+ text "I've seen you a"
+ line "couple times. How"
+
+ para "many #MON have"
+ line "you caught?"
+
+ para "Would you like me"
+ line "to show you how to"
+ cont "catch #MON?"
+ done
+
+CatchingTutorialDebriefText:
+ text "That's how you do"
+ line "it."
+
+ para "If you weaken them"
+ line "first, #MON are"
+ cont "easier to catch."
+ done
+
+CatchingTutorialDeclinedText:
+ text "Oh. Fine, then."
+
+ para "Anyway, if you"
+ line "want to catch"
+
+ para "#MON, you have"
+ line "to walk a lot."
+ done
+
+CatchingTutorialRepeatText:
+ text "Huh? You want me"
+ line "to show you how to"
+ cont "catch #MON?"
+ done
+
+Route29YoungsterText:
+ text "Yo. How are your"
+ line "#MON?"
+
+ para "If they're weak"
+ line "and not ready for"
+
+ para "battle, keep out"
+ line "of the grass."
+ done
+
+Route29TeacherText:
+ text "See those ledges?"
+ line "It's scary to jump"
+ cont "off them."
+
+ para "But you can go to"
+ line "NEW BARK without"
+
+ para "walking through"
+ line "the grass."
+ done
+
+Route29FisherText:
+ text "I wanted to take a"
+ line "break, so I saved"
+
+ para "to record my"
+ line "progress."
+ done
+
+; unused
+Text_WaitingForDay:
+ text "I'm waiting for"
+ line "#MON that"
+
+ para "appear only in the"
+ line "daytime."
+ done
+
+Route29CooltrainerMText_WaitingForNight:
+ text "I'm waiting for"
+ line "#MON that"
+
+ para "appear only at"
+ line "night."
+ done
+
+Route29CooltrainerMText_WaitingForMorning:
+ text "I'm waiting for"
+ line "#MON that"
+
+ para "appear only in the"
+ line "morning."
+ done
+
+MeetTuscanyText:
+ text "TUSCANY: I do be-"
+ line "lieve that this is"
+
+ para "the first time"
+ line "we've met?"
+
+ para "Please allow me to"
+ line "introduce myself."
+
+ para "I am TUSCANY of"
+ line "Tuesday."
+ done
+
+TuscanyGivesGiftText:
+ text "By way of intro-"
+ line "duction, please"
+
+ para "accept this gift,"
+ line "a PINK BOW."
+ done
+
+TuscanyGaveGiftText:
+ text "TUSCANY: Wouldn't"
+ line "you agree that it"
+ cont "is most adorable?"
+
+ para "It strengthens"
+ line "normal-type moves."
+
+ para "I am certain it"
+ line "will be of use."
+ done
+
+TuscanyTuesdayText:
+ text "TUSCANY: Have you"
+ line "met MONICA, my"
+ cont "older sister?"
+
+ para "Or my younger"
+ line "brother, WESLEY?"
+
+ para "I am the second of"
+ line "seven children."
+ done
+
+TuscanyNotTuesdayText:
+ text "TUSCANY: Today is"
+ line "not Tuesday. That"
+ cont "is unfortunate…"
+ done
+
+Route29Sign1Text:
+ text "ROUTE 29"
+
+ para "CHERRYGROVE CITY -"
+ line "NEW BARK TOWN"
+ done
+
+Route29Sign2Text:
+ text "ROUTE 29"
+
+ para "CHERRYGROVE CITY -"
+ line "NEW BARK TOWN"
+ done
+
+Route29_MapEvents:
+ db 0, 0 ; filler
+
+ db 1 ; warp events
+ warp_event 27, 1, ROUTE_29_ROUTE_46_GATE, 3
+
+ db 2 ; coord events
+ coord_event 53, 8, SCENE_ROUTE29_CATCH_TUTORIAL, Route29Tutorial1
+ coord_event 53, 9, SCENE_ROUTE29_CATCH_TUTORIAL, Route29Tutorial2
+
+ db 2 ; bg events
+ bg_event 51, 7, BGEVENT_READ, Route29Sign1
+ bg_event 3, 5, BGEVENT_READ, Route29Sign2
+
+ db 8 ; object events
+ object_event 50, 12, SPRITE_COOLTRAINER_M, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, PAL_NPC_RED, OBJECTTYPE_SCRIPT, 0, CatchingTutorialDudeScript, -1
+ object_event 27, 16, SPRITE_YOUNGSTER, SPRITEMOVEDATA_WALK_UP_DOWN, 0, 1, -1, -1, PAL_NPC_GREEN, OBJECTTYPE_SCRIPT, 0, Route29YoungsterScript, -1
+ object_event 15, 11, SPRITE_TEACHER, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 1, 0, -1, -1, PAL_NPC_GREEN, OBJECTTYPE_SCRIPT, 0, Route29TeacherScript, -1
+ object_event 12, 2, SPRITE_FRUIT_TREE, SPRITEMOVEDATA_STILL, 0, 0, -1, -1, 0, OBJECTTYPE_SCRIPT, 0, Route29FruitTree, -1
+ object_event 25, 3, SPRITE_FISHER, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, PAL_NPC_BLUE, OBJECTTYPE_SCRIPT, 0, Route29FisherScript, -1
+ object_event 13, 4, SPRITE_COOLTRAINER_M, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, PAL_NPC_RED, OBJECTTYPE_SCRIPT, 0, Route29CooltrainerMScript, -1
+ object_event 29, 12, SPRITE_TEACHER, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, 0, OBJECTTYPE_SCRIPT, 0, TuscanyScript, EVENT_ROUTE_29_TUSCANY_OF_TUESDAY
+ object_event 48, 2, SPRITE_POKE_BALL, SPRITEMOVEDATA_STILL, 0, 0, -1, -1, 0, OBJECTTYPE_ITEMBALL, 0, Route29Potion, EVENT_ROUTE_29_POTION
diff --git a/maps/Route30.asm b/maps/Route30.asm
new file mode 100644
index 00000000..5e47855b
--- /dev/null
+++ b/maps/Route30.asm
@@ -0,0 +1,348 @@
+ const_def 2 ; object constants
+ const ROUTE30_YOUNGSTER1
+ const ROUTE30_YOUNGSTER2
+ const ROUTE30_YOUNGSTER3
+ const ROUTE30_BUG_CATCHER
+ const ROUTE30_YOUNGSTER4
+ const ROUTE30_MONSTER1
+ const ROUTE30_MONSTER2
+ const ROUTE30_FRUIT_TREE1
+ const ROUTE30_FRUIT_TREE2
+ const ROUTE30_COOLTRAINER_F
+ const ROUTE30_POKE_BALL
+
+Route30_MapScripts:
+ db 0 ; scene scripts
+
+ db 0 ; callbacks
+
+YoungsterJoey_ImportantBattleScript:
+ waitsfx
+ playmusic MUSIC_JOHTO_TRAINER_BATTLE
+ opentext
+ writetext Text_UseTackle
+ pause 30
+ closetext
+ playsound SFX_TACKLE
+ applymovement ROUTE30_MONSTER2, Route30_JoeysRattataAttacksMovement
+ opentext
+ faceplayer
+ writetext Text_ThisIsABigBattle
+ waitbutton
+ turnobject ROUTE30_YOUNGSTER1, UP
+ closetext
+ playsound SFX_TACKLE
+ applymovement ROUTE30_MONSTER1, Route30_MikeysRattataAttacksMovement
+ special RestartMapMusic
+ end
+
+TrainerYoungsterJoey:
+ trainer YOUNGSTER, JOEY1, EVENT_BEAT_YOUNGSTER_JOEY, YoungsterJoey1SeenText, YoungsterJoey1BeatenText, 0, .Script
+
+.Script:
+ endifjustbattled
+ opentext
+ checkevent EVENT_JOEY_READY_FOR_REMATCH
+ iftrue .Rematch
+ checkcellnum PHONE_YOUNGSTER_JOEY
+ iftrue .NumberAccepted
+ checkevent EVENT_JOEY_ASKED_FOR_PHONE_NUMBER
+ iftrue .AskAgain
+ writetext YoungsterJoey1AfterText
+ buttonsound
+ setevent EVENT_JOEY_ASKED_FOR_PHONE_NUMBER
+ scall .AskNumber1
+ jump .RequestNumber
+
+.AskAgain:
+ scall .AskNumber2
+.RequestNumber:
+ askforphonenumber PHONE_YOUNGSTER_JOEY
+ ifequal PHONE_CONTACTS_FULL, .PhoneFull
+ ifequal PHONE_CONTACT_REFUSED, .NumberDeclined
+ trainertotext YOUNGSTER, JOEY1, MEM_BUFFER_0
+ scall .RegisteredNumber
+ jump .NumberAccepted
+
+.Rematch:
+ scall .RematchStd
+ winlosstext YoungsterJoey1BeatenText, 0
+ checkflag ENGINE_FLYPOINT_OLIVINE
+ iftrue .LoadFight2
+ checkflag ENGINE_FLYPOINT_GOLDENROD
+ iftrue .LoadFight1
+ loadtrainer YOUNGSTER, JOEY1
+ startbattle
+ reloadmapafterbattle
+ clearevent EVENT_JOEY_READY_FOR_REMATCH
+ end
+
+.LoadFight1:
+ loadtrainer YOUNGSTER, JOEY2
+ startbattle
+ reloadmapafterbattle
+ clearevent EVENT_JOEY_READY_FOR_REMATCH
+ end
+
+.LoadFight2:
+ loadtrainer YOUNGSTER, JOEY3
+ startbattle
+ reloadmapafterbattle
+ clearevent EVENT_JOEY_READY_FOR_REMATCH
+ end
+
+.AskNumber1:
+ jumpstd asknumber1m
+ end
+
+.AskNumber2:
+ jumpstd asknumber2m
+ end
+
+.RegisteredNumber:
+ jumpstd registerednumberm
+ end
+
+.NumberAccepted:
+ jumpstd numberacceptedm
+ end
+
+.NumberDeclined:
+ jumpstd numberdeclinedm
+ end
+
+.PhoneFull:
+ jumpstd phonefullm
+ end
+
+.RematchStd:
+ jumpstd rematchm
+ end
+
+TrainerYoungsterMikey:
+ trainer YOUNGSTER, MIKEY, EVENT_BEAT_YOUNGSTER_MIKEY, YoungsterMikeySeenText, YoungsterMikeyBeatenText, 0, .Script
+
+.Script:
+ endifjustbattled
+ opentext
+ writetext YoungsterMikeyAfterText
+ waitbutton
+ closetext
+ end
+
+TrainerBugCatcherDon:
+ trainer BUG_CATCHER, DON, EVENT_BEAT_BUG_CATCHER_DON, BugCatcherDonSeenText, BugCatcherDonBeatenText, 0, .Script
+
+.Script:
+ endifjustbattled
+ opentext
+ writetext BugCatcherDonAfterText
+ waitbutton
+ closetext
+ end
+
+Route30YoungsterScript:
+ faceplayer
+ opentext
+ checkevent EVENT_GAVE_MYSTERY_EGG_TO_ELM
+ iftrue .CompletedEggQuest
+ writetext Route30YoungsterText_DirectionsToMrPokemonsHouse
+ waitbutton
+ closetext
+ end
+
+.CompletedEggQuest:
+ writetext Route30YoungsterText_EveryoneIsBattling
+ waitbutton
+ closetext
+ end
+
+Route30CooltrainerFScript:
+ jumptextfaceplayer Route30CooltrainerFText
+
+Route30Sign:
+ jumptext Route30SignText
+
+MrPokemonsHouseDirectionsSign:
+ jumptext MrPokemonsHouseDirectionsSignText
+
+MrPokemonsHouseSign:
+ jumptext MrPokemonsHouseSignText
+
+Route30TrainerTips:
+ jumptext Route30TrainerTipsText
+
+Route30FruitTree1:
+ fruittree FRUITTREE_ROUTE_30_1
+
+Route30FruitTree2:
+ fruittree FRUITTREE_ROUTE_30_2
+
+Route30HiddenPotion:
+ hiddenitem POTION, EVENT_ROUTE_30_HIDDEN_POTION
+
+Route30_JoeysRattataAttacksMovement:
+ fix_facing
+ big_step UP
+ big_step DOWN
+ step_end
+
+Route30_MikeysRattataAttacksMovement:
+ fix_facing
+ big_step DOWN
+ big_step UP
+ step_end
+
+Text_UseTackle:
+ text "Go, RATTATA!"
+
+ para "TACKLE!"
+ done
+
+Text_ThisIsABigBattle:
+ text "What? This is a"
+ line "big battle!"
+ cont "Leave me alone!"
+ done
+
+YoungsterJoey1SeenText:
+ text "I just lost, so"
+ line "I'm trying to find"
+ cont "more #MON."
+
+ para "Wait! You look"
+ line "weak! Come on,"
+ cont "let's battle!"
+ done
+
+YoungsterJoey1BeatenText:
+ text "Ugh. I don't have"
+ line "any more #MON."
+ done
+
+YoungsterJoey1AfterText:
+ text "I have to have"
+ line "more #MON for"
+ cont "battles."
+
+ para "I'm going to catch"
+ line "some more!"
+ done
+
+YoungsterMikeySeenText:
+ text "You're a #MON"
+ line "trainer, right?"
+
+ para "Then you have to"
+ line "battle!"
+ done
+
+YoungsterMikeyBeatenText:
+ text "That's strange."
+ line "I won before."
+ done
+
+YoungsterMikeyAfterText:
+ text "Becoming a good"
+ line "trainer is really"
+ cont "tough."
+
+ para "I'm going to bat-"
+ line "tle other people"
+ cont "to get better."
+ done
+
+BugCatcherDonSeenText:
+ text "Instead of a bug"
+ line "#MON, I found"
+ cont "a trainer!"
+ done
+
+BugCatcherDonBeatenText:
+ text "Argh! You're too"
+ line "strong!"
+ done
+
+BugCatcherDonAfterText:
+ text "I ran out of #"
+ line "BALLS while I was"
+ cont "catching #MON."
+
+ para "I should've bought"
+ line "some more…"
+ done
+
+Route30YoungsterText_DirectionsToMrPokemonsHouse:
+ text "MR.#MON's"
+ line "house? It's a bit"
+ cont "farther ahead."
+ done
+
+Route30YoungsterText_EveryoneIsBattling:
+ text "Everyone's having"
+ line "fun battling!"
+ cont "You should too!"
+ done
+
+Route30CooltrainerFText:
+ text "I'm not a trainer."
+
+ para "But if you look"
+ line "one in the eyes,"
+ cont "prepare to battle."
+ done
+
+Route30SignText:
+ text "ROUTE 30"
+
+ para "VIOLET CITY -"
+ line "CHERRYGROVE CITY"
+ done
+
+MrPokemonsHouseDirectionsSignText:
+ text "MR.#MON'S HOUSE"
+ line "Straight Ahead!"
+ done
+
+MrPokemonsHouseSignText:
+ text "MR.#MON'S HOUSE"
+ done
+
+Route30TrainerTipsText:
+ text "TRAINER TIPS"
+
+ para "No stealing other"
+ line "people's #MON!"
+
+ para "# BALLS are to"
+ line "be thrown only at"
+ cont "wild #MON!"
+ done
+
+Route30_MapEvents:
+ db 0, 0 ; filler
+
+ db 2 ; warp events
+ warp_event 7, 39, ROUTE_30_BERRY_HOUSE, 1
+ warp_event 17, 5, MR_POKEMONS_HOUSE, 1
+
+ db 0 ; coord events
+
+ db 5 ; bg events
+ bg_event 9, 43, BGEVENT_READ, Route30Sign
+ bg_event 13, 29, BGEVENT_READ, MrPokemonsHouseDirectionsSign
+ bg_event 15, 5, BGEVENT_READ, MrPokemonsHouseSign
+ bg_event 3, 21, BGEVENT_READ, Route30TrainerTips
+ bg_event 14, 9, BGEVENT_ITEM, Route30HiddenPotion
+
+ db 10 ; object events
+ object_event 5, 26, SPRITE_YOUNGSTER, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, PAL_NPC_BLUE, OBJECTTYPE_SCRIPT, 0, YoungsterJoey_ImportantBattleScript, EVENT_ROUTE_30_BATTLE
+ object_event 6, 29, SPRITE_YOUNGSTER, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, PAL_NPC_BLUE, OBJECTTYPE_TRAINER, 4, TrainerYoungsterJoey, EVENT_ROUTE_30_YOUNGSTER_JOEY
+ object_event 5, 23, SPRITE_YOUNGSTER, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, PAL_NPC_BLUE, OBJECTTYPE_TRAINER, 1, TrainerYoungsterMikey, -1
+ object_event 4, 7, SPRITE_BUG_CATCHER, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, PAL_NPC_BROWN, OBJECTTYPE_TRAINER, 3, TrainerBugCatcherDon, -1
+ object_event 7, 31, SPRITE_YOUNGSTER, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 1, 0, -1, -1, 0, OBJECTTYPE_SCRIPT, 0, Route30YoungsterScript, -1
+ object_event 5, 24, SPRITE_MONSTER, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, PAL_NPC_RED, OBJECTTYPE_SCRIPT, 0, ObjectEvent, EVENT_ROUTE_30_BATTLE
+ object_event 5, 25, SPRITE_MONSTER, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, PAL_NPC_BLUE, OBJECTTYPE_SCRIPT, 0, ObjectEvent, EVENT_ROUTE_30_BATTLE
+ object_event 5, 39, SPRITE_FRUIT_TREE, SPRITEMOVEDATA_STILL, 0, 0, -1, -1, 0, OBJECTTYPE_SCRIPT, 0, Route30FruitTree1, -1
+ object_event 11, 5, SPRITE_FRUIT_TREE, SPRITEMOVEDATA_STILL, 0, 0, -1, -1, 0, OBJECTTYPE_SCRIPT, 0, Route30FruitTree2, -1
+ object_event 2, 13, SPRITE_COOLTRAINER_F, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, OBJECTTYPE_SCRIPT, 0, Route30CooltrainerFScript, -1
diff --git a/maps/Route31.asm b/maps/Route31.asm
new file mode 100644
index 00000000..7f47a1b2
--- /dev/null
+++ b/maps/Route31.asm
@@ -0,0 +1,365 @@
+ const_def 2 ; object constants
+ const ROUTE31_FISHER
+ const ROUTE31_YOUNGSTER
+ const ROUTE31_BUG_CATCHER
+ const ROUTE31_COOLTRAINER_M
+ const ROUTE31_FRUIT_TREE
+ const ROUTE31_POKE_BALL1
+ const ROUTE31_POKE_BALL2
+
+Route31_MapScripts:
+ db 0 ; scene scripts
+
+ db 1 ; callbacks
+ callback MAPCALLBACK_NEWMAP, .CheckMomCall
+
+.CheckMomCall:
+ checkevent EVENT_TALKED_TO_MOM_AFTER_MYSTERY_EGG_QUEST
+ iffalse .DoMomCall
+ return
+
+.DoMomCall:
+ specialphonecall SPECIALCALL_WORRIED
+ return
+
+TrainerBugCatcherWade1:
+ trainer BUG_CATCHER, WADE1, EVENT_BEAT_BUG_CATCHER_WADE, BugCatcherWade1SeenText, BugCatcherWade1BeatenText, 0, .Script
+
+.Script:
+ endifjustbattled
+ opentext
+ checkevent EVENT_WADE_READY_FOR_REMATCH
+ iftrue .WadeRematch
+ checkcellnum PHONE_BUG_CATCHER_WADE
+ iftrue .AcceptedNumberSTD
+ checkevent EVENT_WADE_ASKED_FOR_PHONE_NUMBER
+ iftrue .AskAgain
+ writetext BugCatcherWade1AfterText
+ waitbutton
+ setevent EVENT_WADE_ASKED_FOR_PHONE_NUMBER
+ scall .AskPhoneNumberSTD
+ jump .Continue
+
+.AskAgain:
+ scall .AskAgainSTD
+.Continue:
+ askforphonenumber PHONE_BUG_CATCHER_WADE
+ ifequal PHONE_CONTACTS_FULL, .PhoneFullSTD
+ ifequal PHONE_CONTACT_REFUSED, .DeclinedNumberSTD
+ trainertotext BUG_CATCHER, WADE1, MEM_BUFFER_0
+ scall .RegisterNumberSTD
+ jump .AcceptedNumberSTD
+
+.WadeRematch:
+ scall .RematchSTD
+ winlosstext BugCatcherWade1BeatenText, 0
+ checkflag ENGINE_FLYPOINT_MAHOGANY
+ iftrue .LoadFight2
+ checkflag ENGINE_FLYPOINT_GOLDENROD
+ iftrue .LoadFight1
+ loadtrainer BUG_CATCHER, WADE1
+ startbattle
+ reloadmapafterbattle
+ clearevent EVENT_WADE_READY_FOR_REMATCH
+ end
+
+.LoadFight1:
+ loadtrainer BUG_CATCHER, WADE2
+ startbattle
+ reloadmapafterbattle
+ clearevent EVENT_WADE_READY_FOR_REMATCH
+ end
+
+.LoadFight2:
+ loadtrainer BUG_CATCHER, WADE3
+ startbattle
+ reloadmapafterbattle
+ clearevent EVENT_WADE_READY_FOR_REMATCH
+ end
+
+.AskPhoneNumberSTD:
+ jumpstd asknumber1m
+ end
+
+.AskAgainSTD:
+ jumpstd asknumber2m
+ end
+
+.RegisterNumberSTD:
+ jumpstd registerednumberm
+ end
+
+.AcceptedNumberSTD:
+ jumpstd numberacceptedm
+ end
+
+.DeclinedNumberSTD:
+ jumpstd numberdeclinedm
+ end
+
+.PhoneFullSTD:
+ jumpstd phonefullm
+ end
+
+.RematchSTD:
+ jumpstd rematchm
+ end
+
+
+Route31MailRecipientScript:
+ faceplayer
+ opentext
+ checkevent EVENT_GOT_TM50_NIGHTMARE
+ iftrue .DescribeNightmare
+ checkevent EVENT_GOT_KENYA
+ iftrue .TryGiveKenya
+ writetext Text_Route31SleepyMan
+ waitbutton
+ closetext
+ end
+
+.TryGiveKenya:
+ writetext Text_Route31SleepyManGotMail
+ buttonsound
+ checkpokemail ReceivedSpearowMailText
+ ifequal POKEMAIL_WRONG_MAIL, .WrongMail
+ ifequal POKEMAIL_REFUSED, .Refused
+ ifequal POKEMAIL_NO_MAIL, .NoMail
+ ifequal POKEMAIL_LAST_MON, .LastMon
+ ; POKEMAIL_CORRECT
+ writetext Text_Route31HandOverMailMon
+ buttonsound
+ writetext Text_Route31ReadingMail
+ buttonsound
+ setevent EVENT_GAVE_KENYA
+ verbosegiveitem TM_NIGHTMARE
+ iffalse .NoRoomForItems
+ setevent EVENT_GOT_TM50_NIGHTMARE
+.DescribeNightmare:
+ writetext Text_Route31DescribeNightmare
+ waitbutton
+.NoRoomForItems:
+ closetext
+ end
+
+.WrongMail:
+ writetext Text_Route31WrongMail
+ waitbutton
+ closetext
+ end
+
+.NoMail:
+ writetext Text_Route31MissingMail
+ waitbutton
+ closetext
+ end
+
+.Refused:
+ writetext Text_Route31DeclinedToHandOverMail
+ waitbutton
+ closetext
+ end
+
+.LastMon:
+ writetext Text_Route31CantTakeLastMon
+ waitbutton
+ closetext
+ end
+
+ReceivedSpearowMailText:
+ db "DARK CAVE leads"
+ next "to another road@"
+
+Route31YoungsterScript:
+ jumptextfaceplayer Route31YoungsterText
+
+Route31Sign:
+ jumptext Route31SignText
+
+DarkCaveSign:
+ jumptext DarkCaveSignText
+
+Route31CooltrainerMScript:
+ jumptextfaceplayer Route31CooltrainerMText
+
+Route31FruitTree:
+ fruittree FRUITTREE_ROUTE_31
+
+Route31Antidote:
+ itemball ANTIDOTE
+
+Route31PokeBall:
+ itemball POKE_BALL
+
+Route31CooltrainerMText:
+ text "DARK CAVE…"
+
+ para "If #MON could"
+ line "light it up, I'd"
+ cont "explore it."
+ done
+
+BugCatcherWade1SeenText:
+ text "I caught a bunch"
+ line "of #MON. Let me"
+ cont "battle with you!"
+ done
+
+BugCatcherWade1BeatenText:
+ text "Awwwww…"
+ done
+
+BugCatcherWade1AfterText:
+ text "You can catch"
+ line "#MON even if"
+
+ para "you have six with"
+ line "you."
+
+ para "If you catch one,"
+ line "it'll go to your"
+ cont "BOX automatically."
+ done
+
+Text_Route31SleepyMan:
+ text "… Hnuurg… Huh?"
+
+ para "I walked too far"
+ line "today looking for"
+ cont "#MON."
+
+ para "My feet hurt and"
+ line "I'm sleepy…"
+
+ para "If I were a wild"
+ line "#MON, I'd be"
+ cont "easy to catch…"
+
+ para "…Zzzz…"
+ done
+
+Text_Route31SleepyManGotMail:
+ text "…Zzzz… Huh?"
+
+ para "What's that? You"
+ line "have MAIL for me?"
+ done
+
+Text_Route31HandOverMailMon:
+ text "<PLAYER> handed"
+ line "over the #MON"
+ cont "holding the MAIL."
+ done
+
+Text_Route31ReadingMail:
+ text "Let's see…"
+
+ para "…DARK CAVE leads"
+ line "to another road…"
+
+ para "That's good to"
+ line "know."
+
+ para "Thanks for bring-"
+ line "ing this to me."
+
+ para "My friend's a good"
+ line "guy, and you're a"
+ cont "swell guy too!"
+
+ para "I'd like to do"
+ line "something good in"
+ cont "return too!"
+
+ para "I know! I want you"
+ line "to have this!"
+ done
+
+Text_Route31DescribeNightmare:
+ text "TM50 is NIGHTMARE."
+
+ para "It's a wicked move"
+ line "that steadily cuts"
+
+ para "the HP of a sleep-"
+ line "ing enemy."
+
+ para "Ooooh…"
+ line "That's scary…"
+
+ para "I don't want to"
+ line "have bad dreams."
+ done
+
+Text_Route31WrongMail:
+ text "This MAIL isn't"
+ line "for me."
+ done
+
+Text_Route31MissingMail:
+ text "Why is this #-"
+ line "MON so special?"
+
+ para "It doesn't have"
+ line "any MAIL."
+ done
+
+Text_Route31DeclinedToHandOverMail:
+ text "What? You don't"
+ line "want anything?"
+ done
+
+Text_Route31CantTakeLastMon:
+ text "If I take that"
+ line "#MON from you,"
+
+ para "what are you going"
+ line "to use in battle?"
+ done
+
+Route31YoungsterText:
+ text "I found a good"
+ line "#MON in DARK"
+ cont "CAVE."
+
+ para "I'm going to raise"
+ line "it to take on"
+ cont "FALKNER."
+
+ para "He's the leader of"
+ line "VIOLET CITY's GYM."
+ done
+
+Route31SignText:
+ text "ROUTE 31"
+
+ para "VIOLET CITY -"
+ line "CHERRYGROVE CITY"
+ done
+
+DarkCaveSignText:
+ text "DARK CAVE"
+ done
+
+Route31_MapEvents:
+ db 0, 0 ; filler
+
+ db 3 ; warp events
+ warp_event 4, 6, ROUTE_31_VIOLET_GATE, 3
+ warp_event 4, 7, ROUTE_31_VIOLET_GATE, 4
+ warp_event 34, 5, DARK_CAVE_VIOLET_ENTRANCE, 1
+
+ db 0 ; coord events
+
+ db 2 ; bg events
+ bg_event 7, 5, BGEVENT_READ, Route31Sign
+ bg_event 31, 5, BGEVENT_READ, DarkCaveSign
+
+ db 7 ; object events
+ object_event 17, 7, SPRITE_FISHER, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, OBJECTTYPE_SCRIPT, 0, Route31MailRecipientScript, -1
+ object_event 9, 5, SPRITE_YOUNGSTER, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, 0, OBJECTTYPE_SCRIPT, 0, Route31YoungsterScript, -1
+ object_event 18, 15, SPRITE_BUG_CATCHER, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, PAL_NPC_BROWN, OBJECTTYPE_TRAINER, 3, TrainerBugCatcherWade1, -1
+ object_event 33, 8, SPRITE_COOLTRAINER_M, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, 0, OBJECTTYPE_SCRIPT, 0, Route31CooltrainerMScript, -1
+ object_event 16, 7, SPRITE_FRUIT_TREE, SPRITEMOVEDATA_STILL, 0, 0, -1, -1, 0, OBJECTTYPE_SCRIPT, 0, Route31FruitTree, -1
+ object_event 29, 5, SPRITE_POKE_BALL, SPRITEMOVEDATA_STILL, 0, 0, -1, -1, 0, OBJECTTYPE_ITEMBALL, 0, Route31Antidote, EVENT_ROUTE_31_ANTIDOTE
+ object_event 21, 13, SPRITE_POKE_BALL, SPRITEMOVEDATA_STILL, 0, 0, -1, -1, 0, OBJECTTYPE_ITEMBALL, 0, Route31PokeBall, EVENT_ROUTE_31_POKE_BALL