summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--constants/event_flags.asm16
-rw-r--r--constants/phone_constants.asm2
-rw-r--r--main.asm13
-rw-r--r--maps/Route37.asm243
-rw-r--r--maps/Route38.asm369
-rw-r--r--maps/Route39.asm302
-rw-r--r--maps/Route40.asm298
-rw-r--r--maps/Route41.asm366
-rw-r--r--maps/Route42.asm272
9 files changed, 1865 insertions, 16 deletions
diff --git a/constants/event_flags.asm b/constants/event_flags.asm
index ad423568..b5b9c2e8 100644
--- a/constants/event_flags.asm
+++ b/constants/event_flags.asm
@@ -660,13 +660,13 @@
const EVENT_287
const EVENT_288
const EVENT_DANA_ASKED_FOR_PHONE_NUMBER
- const EVENT_28A
+ const EVENT_DANA_READY_FOR_REMATCH
const EVENT_CHAD_ASKED_FOR_PHONE_NUMBER
- const EVENT_28C
+ const EVENT_CHAD_READY_FOR_REMATCH
const EVENT_DEREK_ASKED_FOR_PHONE_NUMBER
- const EVENT_28E
- const EVENT_TULLY_ASKED_FOR_PHONE_NUMBER
- const EVENT_290 ; 290
+ const EVENT_DEREK_READY_FOR_REMATCH
+ const EVENT_CHRIS_ASKED_FOR_PHONE_NUMBER
+ const EVENT_CHRIS_READY_FOR_REMATCH
const EVENT_BRENT_ASKED_FOR_PHONE_NUMBER
const EVENT_BRENT_READY_FOR_REMATCH
const EVENT_TIFFANY_ASKED_FOR_PHONE_NUMBER
@@ -1135,7 +1135,7 @@
const EVENT_BEAT_FISHER_KYLE
const EVENT_BEAT_FISHER_HENRY
const EVENT_BEAT_FISHER_MARVIN
- const EVENT_BEAT_FISHER_TULLY
+ const EVENT_BEAT_FISHER_CHRIS
const EVENT_BEAT_FISHER_ANDRE
const EVENT_BEAT_FISHER_RAYMOND
const EVENT_BEAT_FISHER_WILTON
@@ -1146,8 +1146,8 @@
const EVENT_BEAT_FISHER_BARNEY
const EVENT_BEAT_FISHER_RALPH2
const EVENT_BEAT_FISHER_RALPH3
- const EVENT_BEAT_FISHER_TULLY2
- const EVENT_BEAT_FISHER_TULLY3
+ const EVENT_BEAT_FISHER_CHRIS2
+ const EVENT_BEAT_FISHER_CHRIS3
const EVENT_BEAT_FISHER_WILTON2
const EVENT_BEAT_FISHER_SCOTT
const EVENT_BEAT_FISHER_WILTON3
diff --git a/constants/phone_constants.asm b/constants/phone_constants.asm
index 1eb2b2d2..9247e927 100644
--- a/constants/phone_constants.asm
+++ b/constants/phone_constants.asm
@@ -29,7 +29,7 @@
const PHONE_LASS_DANA
const PHONE_SCHOOLBOY_CHAD
const PHONE_POKEFANM_DEREK
- const PHONE_FISHER_TULLY
+ const PHONE_FISHER_CHRIS
const PHONE_POKEMANIAC_BRENT
const PHONE_PICNICKER_TIFFANY
const PHONE_BIRDKEEPER_VANCE
diff --git a/main.asm b/main.asm
index 4cfef6e8..b03d8e59 100644
--- a/main.asm
+++ b/main.asm
@@ -1655,13 +1655,12 @@ SECTION "bank4b", ROMX, BANK[$4b]
dr $12c000, $130000
SECTION "bank4c", ROMX, BANK[$4c]
-;INCLUDE "maps/Route37.asm"
-;INCLUDE "maps/Route38.asm"
-;INCLUDE "maps/Route39.asm"
-;INCLUDE "maps/Route40.asm"
-;INCLUDE "maps/Route41.asm"
-;INCLUDE "maps/Route42.asm"
- dr $130000, $134000
+INCLUDE "maps/Route37.asm"
+INCLUDE "maps/Route38.asm"
+INCLUDE "maps/Route39.asm"
+INCLUDE "maps/Route40.asm"
+INCLUDE "maps/Route41.asm"
+INCLUDE "maps/Route42.asm"
SECTION "bank4d", ROMX, BANK[$4d]
INCLUDE "maps/Route43.asm"
diff --git a/maps/Route37.asm b/maps/Route37.asm
new file mode 100644
index 00000000..108496f6
--- /dev/null
+++ b/maps/Route37.asm
@@ -0,0 +1,243 @@
+ const_def 2 ; object constants
+ const ROUTE37_WEIRD_TREE1
+ const ROUTE37_WEIRD_TREE2
+ const ROUTE37_YOUNGSTER
+ const ROUTE37_FRUIT_TREE1
+ const ROUTE37_SUNNY
+ const ROUTE37_FRUIT_TREE2
+ const ROUTE37_FRUIT_TREE3
+
+Route37_MapScripts:
+ db 0 ; scene scripts
+
+ db 1 ; callbacks
+ callback MAPCALLBACK_OBJECTS, .Sunny
+
+.Sunny:
+ checkcode VAR_WEEKDAY
+ ifequal SUNDAY, .SunnyAppears
+ disappear ROUTE37_SUNNY
+ return
+
+.SunnyAppears:
+ appear ROUTE37_SUNNY
+ return
+
+TrainerTwinsAnnandanne1:
+ trainer TWINS, ANNANDANNE1, EVENT_BEAT_TWINS_ANN_AND_ANNE, TwinsAnnandanne1SeenText, TwinsAnnandanne1BeatenText, 0, .Script
+
+.Script:
+ endifjustbattled
+ opentext
+ writetext TwinsAnnandanne1AfterBattleText
+ waitbutton
+ closetext
+ end
+
+TrainerTwinsAnnandanne2:
+ trainer TWINS, ANNANDANNE2, EVENT_BEAT_TWINS_ANN_AND_ANNE, TwinsAnnandanne2SeenText, TwinsAnnandanne2BeatenText, 0, .Script
+
+.Script:
+ endifjustbattled
+ opentext
+ writetext TwinsAnnandanne2AfterBattleText
+ waitbutton
+ closetext
+ end
+
+TrainerPsychicGreg:
+ trainer PSYCHIC_T, GREG, EVENT_BEAT_PSYCHIC_GREG, PsychicGregSeenText, PsychicGregBeatenText, 0, .Script
+
+.Script:
+ endifjustbattled
+ opentext
+ writetext PsychicGregAfterBattleText
+ waitbutton
+ closetext
+ end
+
+SunnyScript:
+ faceplayer
+ opentext
+ checkevent EVENT_GOT_MAGNET_FROM_SUNNY
+ iftrue SunnySundayScript
+ checkcode VAR_WEEKDAY
+ ifnotequal SUNDAY, SunnyNotSundayScript
+ checkevent EVENT_MET_SUNNY_OF_SUNDAY
+ iftrue .MetSunny
+ writetext MeetSunnyText
+ buttonsound
+ setevent EVENT_MET_SUNNY_OF_SUNDAY
+.MetSunny:
+ writetext SunnyGivesGiftText1
+ buttonsound
+ verbosegiveitem MAGNET
+ iffalse SunnyDoneScript
+ setevent EVENT_GOT_MAGNET_FROM_SUNNY
+ writetext SunnyGaveGiftText
+ waitbutton
+ closetext
+ end
+
+SunnySundayScript:
+ writetext SunnySundayText
+ waitbutton
+SunnyDoneScript:
+ closetext
+ end
+
+SunnyNotSundayScript:
+ writetext SunnyNotSundayText
+ waitbutton
+ closetext
+ end
+
+Route37Sign:
+ jumptext Route37SignText
+
+Route37FruitTree1:
+ fruittree FRUITTREE_ROUTE_37_1
+
+Route37FruitTree2:
+ fruittree FRUITTREE_ROUTE_37_2
+
+Route37FruitTree3:
+ fruittree FRUITTREE_ROUTE_37_3
+
+Route37HiddenEther:
+ hiddenitem ETHER, EVENT_ROUTE_37_HIDDEN_ETHER
+
+TwinsAnnandanne1SeenText:
+ text "ANN: ANNE and I"
+ line "are in this to-"
+ cont "gether!"
+ done
+
+TwinsAnnandanne1BeatenText:
+ text "ANN & ANNE: You're"
+ line "mean!"
+ done
+
+TwinsAnnandanne1AfterBattleText:
+ text "ANN: I can tell"
+ line "what my sister and"
+
+ para "my #MON are"
+ line "thinking."
+ done
+
+TwinsAnnandanne2SeenText:
+ text "ANNE: ANN and I"
+ line "are in this to-"
+ cont "gether!"
+ done
+
+TwinsAnnandanne2BeatenText:
+ text "ANN & ANNE: You're"
+ line "mean!"
+ done
+
+TwinsAnnandanne2AfterBattleText:
+ text "ANNE: We share the"
+ line "same feelings as"
+ cont "our #MON."
+ done
+
+PsychicGregSeenText:
+ text "#MON can't do a"
+ line "thing if they are"
+ cont "asleep."
+
+ para "I'll show you how"
+ line "scary that is!"
+ done
+
+PsychicGregBeatenText:
+ text "I lost. That's"
+ line "pretty sad…"
+ done
+
+PsychicGregAfterBattleText:
+ text "Putting #MON to"
+ line "sleep or paralyz-"
+ cont "ing them are good"
+ cont "battle techniques."
+ done
+
+MeetSunnyText:
+ text "SUNNY: Hi!"
+
+ para "I'm SUNNY of Sun-"
+ line "day, meaning it's"
+ cont "Sunday today!"
+ done
+
+SunnyGivesGiftText1:
+ text "I was told to give"
+ line "you this if I saw"
+ cont "you!"
+ done
+
+SunnyGaveGiftText:
+ text "SUNNY: That thing…"
+
+ para "Um…"
+
+ para "… What was it now…"
+
+ para "…"
+
+ para "Oh! I remember"
+ line "now!"
+
+ para "A #MON that"
+ line "knows electric"
+
+ para "moves should hold"
+ line "it."
+
+ para "My sis MONICA said"
+ line "it powers up"
+ cont "electric moves!"
+ done
+
+SunnySundayText:
+ text "SUNNY: My sisters"
+ line "and brothers are"
+ cont "MONICA, TUSCANY,"
+ cont "WESLEY, ARTHUR,"
+ cont "FRIEDA and SANTOS."
+
+ para "They're all older"
+ line "than me!"
+ done
+
+SunnyNotSundayText:
+ text "SUNNY: Isn't today"
+ line "Sunday?"
+ cont "Um… I forgot!"
+ done
+
+Route37SignText:
+ text "ROUTE 37"
+ done
+
+Route37_MapEvents:
+ db 0, 0 ; filler
+
+ db 0 ; warp events
+
+ db 0 ; coord events
+
+ db 2 ; bg events
+ bg_event 5, 3, BGEVENT_READ, Route37Sign
+ bg_event 4, 2, BGEVENT_ITEM, Route37HiddenEther
+
+ db 7 ; object events
+ object_event 6, 12, SPRITE_WEIRD_TREE, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, PAL_NPC_RED, OBJECTTYPE_TRAINER, 1, TrainerTwinsAnnandanne1, -1
+ object_event 7, 12, SPRITE_WEIRD_TREE, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, PAL_NPC_RED, OBJECTTYPE_TRAINER, 1, TrainerTwinsAnnandanne2, -1
+ object_event 9, 6, SPRITE_YOUNGSTER, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, PAL_NPC_BLUE, OBJECTTYPE_TRAINER, 3, TrainerPsychicGreg, -1
+ object_event 13, 5, SPRITE_FRUIT_TREE, SPRITEMOVEDATA_STILL, 0, 0, -1, -1, 0, OBJECTTYPE_SCRIPT, 0, Route37FruitTree1, -1
+ object_event 16, 8, SPRITE_BUG_CATCHER, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, 0, OBJECTTYPE_SCRIPT, 0, SunnyScript, EVENT_ROUTE_37_SUNNY_OF_SUNDAY
+ object_event 16, 5, SPRITE_FRUIT_TREE, SPRITEMOVEDATA_STILL, 0, 0, -1, -1, 0, OBJECTTYPE_SCRIPT, 0, Route37FruitTree2, -1
+ object_event 15, 7, SPRITE_FRUIT_TREE, SPRITEMOVEDATA_STILL, 0, 0, -1, -1, 0, OBJECTTYPE_SCRIPT, 0, Route37FruitTree3, -1
diff --git a/maps/Route38.asm b/maps/Route38.asm
new file mode 100644
index 00000000..da7645d6
--- /dev/null
+++ b/maps/Route38.asm
@@ -0,0 +1,369 @@
+ const_def 2 ; object constants
+ const ROUTE38_STANDING_YOUNGSTER1
+ const ROUTE38_LASS
+ const ROUTE38_STANDING_YOUNGSTER2
+ const ROUTE38_BUENA1
+ const ROUTE38_SAILOR
+ const ROUTE38_FRUIT_TREE
+ const ROUTE38_BUENA2
+
+Route38_MapScripts:
+ db 0 ; scene scripts
+
+ db 0 ; callbacks
+
+TrainerBirdKeeperToby:
+ trainer BIRD_KEEPER, TOBY, EVENT_BEAT_BIRD_KEEPER_TOBY, BirdKeeperTobySeenText, BirdKeeperTobyBeatenText, 0, .Script
+
+.Script
+ endifjustbattled
+ opentext
+ writetext BirdKeeperTobyAfterBattleText
+ waitbutton
+ closetext
+ end
+
+TrainerSailorHarry:
+ trainer SAILOR, HARRY, EVENT_BEAT_SAILOR_HARRY, SailorHarrySeenText, SailorHarryBeatenText, 0, .Script
+
+.Script
+ endifjustbattled
+ opentext
+ writetext SailorHarryAfterBattleText
+ waitbutton
+ closetext
+ end
+
+TrainerLassDana1:
+ trainer LASS, DANA1, EVENT_BEAT_LASS_DANA, LassDana1SeenText, LassDana1BeatenText, 0, .Script
+
+.Script
+ endifjustbattled
+ opentext
+ checkevent EVENT_DANA_READY_FOR_REMATCH
+ iftrue .DanaRematch
+ checkcellnum PHONE_LASS_DANA
+ iftrue .NumberAccepted
+ checkevent EVENT_DANA_ASKED_FOR_PHONE_NUMBER
+ iftrue .SecondTimeAsking
+ writetext UnknownText_0x1a20ec
+ buttonsound
+ setevent EVENT_DANA_ASKED_FOR_PHONE_NUMBER
+ scall .AskNumber1F
+ jump .AskForPhoneNumber
+
+.SecondTimeAsking:
+ scall .AskNumber2F
+.AskForPhoneNumber:
+ askforphonenumber PHONE_LASS_DANA
+ ifequal PHONE_CONTACTS_FULL, .PhoneFull
+ ifequal PHONE_CONTACT_REFUSED, .DeclinedPhoneNumber
+ trainertotext LASS, DANA1, MEM_BUFFER_0
+ scall .RegisteredPhoneNumber
+ jump .NumberAccepted
+
+.DanaRematch:
+ scall .Rematch
+ winlosstext LassDana1BeatenText, 0
+ checkevent EVENT_CLEARED_RADIO_TOWER
+ iftrue .LoadFight2
+ checkflag ENGINE_FLYPOINT_CIANWOOD
+ iftrue .LoadFight1
+ loadtrainer LASS, DANA1
+ startbattle
+ reloadmapafterbattle
+ clearevent EVENT_DANA_READY_FOR_REMATCH
+ end
+
+.LoadFight1:
+ loadtrainer LASS, DANA2
+ startbattle
+ reloadmapafterbattle
+ clearevent EVENT_DANA_READY_FOR_REMATCH
+ end
+
+.LoadFight2:
+ loadtrainer LASS, DANA3
+ startbattle
+ reloadmapafterbattle
+ clearevent EVENT_DANA_READY_FOR_REMATCH
+ end
+
+.AskNumber1F:
+ jumpstd asknumber1f
+ end
+
+.AskNumber2F:
+ jumpstd asknumber2f
+ end
+
+.RegisteredPhoneNumber:
+ jumpstd registerednumberf
+ end
+
+.NumberAccepted:
+ jumpstd numberacceptedf
+ end
+
+.DeclinedPhoneNumber:
+ jumpstd numberdeclinedf
+ end
+
+.PhoneFull:
+ jumpstd phonefullf
+ end
+
+.Rematch:
+ jumpstd rematchf
+ end
+
+TrainerSchoolboyChad1:
+ trainer SCHOOLBOY, CHAD1, EVENT_BEAT_SCHOOLBOY_CHAD, SchoolboyChad1SeenText, SchoolboyChad1BeatenText, 0, .Script
+
+.Script
+ endifjustbattled
+ opentext
+ checkevent EVENT_CHAD_READY_FOR_REMATCH
+ iftrue .ChadRematch
+ checkcellnum PHONE_SCHOOLBOY_CHAD
+ iftrue .HaveChadsNumber
+ checkevent EVENT_CHAD_ASKED_FOR_PHONE_NUMBER
+ iftrue .SecondTimeAsking
+ writetext UnknownText_0x1a200e
+ buttonsound
+ setevent EVENT_CHAD_ASKED_FOR_PHONE_NUMBER
+ scall .AskPhoneNumber1
+ jump .AskToRegisterNumber
+
+.SecondTimeAsking:
+ scall .AskPhoneNumber2
+.AskToRegisterNumber:
+ askforphonenumber PHONE_SCHOOLBOY_CHAD
+ ifequal PHONE_CONTACTS_FULL, .PhoneFull
+ ifequal PHONE_CONTACT_REFUSED, .SaidNo
+ trainertotext SCHOOLBOY, CHAD1, MEM_BUFFER_0
+ scall .RegisteredChad
+ jump .HaveChadsNumber
+
+.ChadRematch:
+ scall .Rematch
+ winlosstext SchoolboyChad1BeatenText, 0
+ checkevent EVENT_CLEARED_RADIO_TOWER
+ iftrue .LoadFight2
+ checkflag ENGINE_FLYPOINT_MAHOGANY
+ iftrue .LoadFight1
+ loadtrainer SCHOOLBOY, CHAD1
+ startbattle
+ reloadmapafterbattle
+ clearevent EVENT_CHAD_READY_FOR_REMATCH
+ end
+
+.LoadFight1:
+ loadtrainer SCHOOLBOY, CHAD2
+ startbattle
+ reloadmapafterbattle
+ clearevent EVENT_CHAD_READY_FOR_REMATCH
+ end
+
+.LoadFight2:
+ loadtrainer SCHOOLBOY, CHAD3
+ startbattle
+ reloadmapafterbattle
+ clearevent EVENT_CHAD_READY_FOR_REMATCH
+ end
+
+.AskPhoneNumber1:
+ jumpstd asknumber1m
+ end
+
+.AskPhoneNumber2:
+ jumpstd asknumber2m
+ end
+
+.RegisteredChad:
+ jumpstd registerednumberm
+ end
+
+.HaveChadsNumber:
+ jumpstd numberacceptedm
+ end
+
+.SaidNo:
+ jumpstd numberdeclinedm
+ end
+
+.PhoneFull:
+ jumpstd phonefullm
+ end
+
+.Rematch:
+ jumpstd rematchm
+ end
+
+TrainerBeautyValerie:
+ trainer BEAUTY, VALERIE, EVENT_BEAT_BEAUTY_VALERIE, BeautyValerieSeenText, BeautyValerieBeatenText, 0, .Script
+
+.Script
+ endifjustbattled
+ opentext
+ writetext BeautyValerieAfterBattleText
+ waitbutton
+ closetext
+ end
+
+Route38Sign:
+ jumptext Route38SignText
+
+Route38TrainerTips:
+ jumptext Route38TrainerTipsText
+
+Route38FruitTree:
+ fruittree FRUITTREE_ROUTE_38
+
+BirdKeeperTobySeenText:
+ text "Fly high into the"
+ line "sky, my beloved"
+ cont "bird #MON!"
+ done
+
+BirdKeeperTobyBeatenText:
+ text "I feel like just"
+ line "flying away now."
+ done
+
+BirdKeeperTobyAfterBattleText:
+ text "I plan to train in"
+ line "CIANWOOD CITY to"
+
+ para "teach my #MON"
+ line "how to fly."
+ done
+
+SchoolboyChad1SeenText:
+ text "Let me try some-"
+ line "thing I learned"
+ cont "today."
+ done
+
+SchoolboyChad1BeatenText:
+ text "I didn't study"
+ line "enough, I guess."
+ done
+
+UnknownText_0x1a200e:
+ text "I have to take so"
+ line "many tests, I"
+
+ para "don't have much"
+ line "time for #MON."
+
+ para "So when I do get"
+ line "to play, I really"
+ cont "concentrate."
+ done
+
+LassDana1SeenText:
+ text "Are you good at"
+ line "training?"
+
+ para "If you are, could"
+ line "you show me how?"
+ done
+
+LassDana1BeatenText:
+ text "I see. So you can"
+ line "battle that way."
+ done
+
+UnknownText_0x1a20ec:
+ text "I know something"
+ line "good!"
+
+ para "MOOMOO FARM's milk"
+ line "is famous for its"
+ cont "flavor."
+ done
+
+BeautyValerieSeenText:
+ text "Hi! Aren't you a"
+ line "cute trainer!"
+
+ para "May I see your"
+ line "#MON?"
+ done
+
+BeautyValerieBeatenText:
+ text "I'm glad I got to"
+ line "see your #MON!"
+ done
+
+BeautyValerieAfterBattleText:
+ text "When I see #-"
+ line "MON, it seems to"
+ cont "soothe my nerves."
+ done
+
+SailorHarrySeenText:
+ text "I've been over-"
+ line "seas, so I know"
+
+ para "about all sorts of"
+ line "#MON!"
+ done
+
+SailorHarryBeatenText:
+ text "Your skill is"
+ line "world class!"
+ done
+
+SailorHarryAfterBattleText:
+ text "All kinds of peo-"
+ line "ple around the"
+
+ para "world live happily"
+ line "with #MON."
+ done
+
+Route38SignText:
+ text "ROUTE 38"
+
+ para "OLIVINE CITY -"
+ line "ECRUTEAK CITY"
+ done
+
+Route38TrainerTipsText:
+ text "TRAINER TIPS"
+
+ para "If a #MON is"
+ line "trying to evolve,"
+ cont "you can stop it."
+
+ para "Press the B But-"
+ line "ton during evolu-"
+ cont "tion."
+
+ para "That startles the"
+ line "#MON and stops"
+ cont "its evolution."
+ done
+
+Route38_MapEvents:
+ db 0, 0 ; filler
+
+ db 2 ; warp events
+ warp_event 35, 8, ROUTE_38_ECRUTEAK_GATE, 1
+ warp_event 35, 9, ROUTE_38_ECRUTEAK_GATE, 2
+
+ db 0 ; coord events
+
+ db 2 ; bg events
+ bg_event 33, 7, BGEVENT_READ, Route38Sign
+ bg_event 5, 13, BGEVENT_READ, Route38TrainerTips
+
+ db 6 ; object events
+ object_event 4, 1, SPRITE_YOUNGSTER, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, PAL_NPC_BLUE, OBJECTTYPE_TRAINER, 3, TrainerSchoolboyChad1, -1
+ object_event 15, 3, SPRITE_LASS, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, PAL_NPC_BLUE, OBJECTTYPE_TRAINER, 2, TrainerLassDana1, -1
+ object_event 15, 10, SPRITE_YOUNGSTER, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, PAL_NPC_BLUE, OBJECTTYPE_TRAINER, 2, TrainerBirdKeeperToby, -1
+ object_event 9, 6, SPRITE_BUENA, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, PAL_NPC_BLUE, OBJECTTYPE_TRAINER, 2, TrainerBeautyValerie, -1
+ object_event 25, 5, SPRITE_SAILOR, SPRITEMOVEDATA_SPINCLOCKWISE, 0, 0, -1, -1, PAL_NPC_BLUE, OBJECTTYPE_TRAINER, 2, TrainerSailorHarry, -1
+ object_event 12, 10, SPRITE_FRUIT_TREE, SPRITEMOVEDATA_STILL, 0, 0, -1, -1, 0, OBJECTTYPE_SCRIPT, 0, Route38FruitTree, -1
diff --git a/maps/Route39.asm b/maps/Route39.asm
new file mode 100644
index 00000000..069e8cad
--- /dev/null
+++ b/maps/Route39.asm
@@ -0,0 +1,302 @@
+ const_def 2 ; object constants
+ const ROUTE39_SAILOR
+ const ROUTE39_POKEFAN_M
+ const ROUTE39_POKEFAN_F1
+ const ROUTE39_MILTANK1
+ const ROUTE39_MILTANK2
+ const ROUTE39_MILTANK3
+ const ROUTE39_MILTANK4
+ const ROUTE39_PSYCHIC_NORMAN
+ const ROUTE39_FRUIT_TREE
+ const ROUTE39_POKEFAN_F2
+
+Route39_MapScripts:
+ db 0 ; scene scripts
+
+ db 0 ; callbacks
+
+Route39Miltank:
+ opentext
+ writetext Route39MiltankText
+ cry MILTANK
+ waitbutton
+ closetext
+ end
+
+TrainerPokefanmDerek:
+ trainer POKEFANM, DEREK1, EVENT_BEAT_POKEFANM_DEREK, PokefanmDerekSeenText, PokefanmDerekBeatenText, 0, .Script
+
+.Script:
+ endifjustbattled
+ opentext
+ checkevent EVENT_DEREK_READY_FOR_REMATCH
+ iftrue .WantsBattle
+ checkcellnum PHONE_POKEFANM_DEREK
+ iftrue .NumberAccepted
+ checkevent EVENT_DEREK_ASKED_FOR_PHONE_NUMBER
+ iftrue .AskedAlready
+ writetext PokefanMDerekText_NotBragging
+ buttonsound
+ setevent EVENT_DEREK_ASKED_FOR_PHONE_NUMBER
+ scall .AskNumber1
+ jump .AskForNumber
+
+.AskedAlready:
+ scall .AskNumber2
+.AskForNumber:
+ askforphonenumber PHONE_POKEFANM_DEREK
+ ifequal PHONE_CONTACTS_FULL, .PhoneFull
+ ifequal PHONE_CONTACT_REFUSED, .NumberDeclined
+ trainertotext POKEFANM, DEREK1, MEM_BUFFER_0
+ scall .RegisteredNumber
+ jump .NumberAccepted
+
+.WantsBattle:
+ scall .Rematch
+ winlosstext PokefanmDerekBeatenText, 0
+ checkevent EVENT_BEAT_ELITE_FOUR
+ iftrue .LoadFight2
+ checkflag ENGINE_FLYPOINT_LAKE_OF_RAGE
+ iftrue .LoadFight1
+ loadtrainer POKEFANM, DEREK1
+ startbattle
+ reloadmapafterbattle
+ clearevent EVENT_DEREK_READY_FOR_REMATCH
+ end
+
+.LoadFight1:
+ loadtrainer POKEFANM, DEREK2
+ startbattle
+ reloadmapafterbattle
+ clearevent EVENT_DEREK_READY_FOR_REMATCH
+ end
+
+.LoadFight2:
+ loadtrainer POKEFANM, DEREK3
+ startbattle
+ reloadmapafterbattle
+ clearevent EVENT_DEREK_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
+
+TrainerPokefanfRuth:
+ trainer POKEFANF, RUTH, EVENT_BEAT_POKEFANF_RUTH, PokefanfRuthSeenText, PokefanfRuthBeatenText, 0, .Script
+
+.Script:
+ endifjustbattled
+ opentext
+ writetext PokefanfRuthAfterBattleText
+ waitbutton
+ closetext
+ end
+
+TrainerSailorEugene:
+ trainer SAILOR, EUGENE, EVENT_BEAT_SAILOR_EUGENE, SailorEugeneSeenText, SailorEugeneBeatenText, 0, .Script
+
+.Script:
+ endifjustbattled
+ opentext
+ writetext SailorEugeneAfterBattleText
+ waitbutton
+ closetext
+ end
+
+TrainerPsychicNorman:
+ trainer PSYCHIC_T, NORMAN, EVENT_BEAT_PSYCHIC_NORMAN, PsychicNormanSeenText, PsychicNormanBeatenText, 0, .Script
+
+.Script:
+ endifjustbattled
+ opentext
+ writetext PsychicNormanAfterBattleText
+ waitbutton
+ closetext
+ end
+
+Route39Sign:
+ jumptext Route39SignText
+
+MoomooFarmSign:
+ jumptext MoomooFarmSignText
+
+Route39TrainerTips:
+ jumptext Route39TrainerTipsText
+
+Route39FruitTree:
+ fruittree FRUITTREE_ROUTE_39
+
+Route39HiddenNugget:
+ hiddenitem NUGGET, EVENT_ROUTE_39_HIDDEN_NUGGET
+
+Route39MiltankText:
+ text "MILTANK: Mooo!"
+ done
+
+SailorEugeneSeenText:
+ text "I just got back to"
+ line "OLIVINE."
+
+ para "So how about a"
+ line "#MON battle?"
+ done
+
+SailorEugeneBeatenText:
+ text "Awaaargh!"
+ done
+
+SailorEugeneAfterBattleText:
+ text "My #MON were"
+ line "caught and raised"
+ cont "overseas."
+
+ para "They're my compan-"
+ line "ions on those long"
+ cont "voyages."
+ done
+
+PokefanmDerekSeenText:
+ text "Would you mind if"
+ line "I bragged about"
+ cont "my #MON?"
+ done
+
+PokefanmDerekBeatenText:
+ text "I couldn't begin"
+ line "to brag…"
+ done
+
+PokefanMDerekText_NotBragging:
+ text "I'm not listening"
+ line "to your bragging!"
+
+ para "We # FANS have"
+ line "a policy of not"
+
+ para "listening to other"
+ line "people brag!"
+ done
+
+PokefanfRuthSeenText:
+ text "Such darling"
+ line "#MON."
+
+ para "Let's show our"
+ line "#MON together"
+ cont "at the same time."
+ done
+
+PokefanfRuthBeatenText:
+ text "I don't mind"
+ line "losing."
+ done
+
+PokefanfRuthAfterBattleText:
+ text "Do you know about"
+ line "baby #MON?"
+
+ para "I bet they're just"
+ line "adorable!"
+ done
+
+PsychicNormanSeenText:
+ text "Let me see what"
+ line "your #MON are"
+ cont "capable of."
+ done
+
+PsychicNormanBeatenText:
+ text "Ooh, your #MON"
+ line "have potential."
+ done
+
+PsychicNormanAfterBattleText:
+ text "You know how #-"
+ line "MON have different"
+ cont "abilities?"
+
+ para "People are like"
+ line "that too. Every-"
+ cont "one has different"
+ cont "potential."
+ done
+
+Route39SignText:
+ text "ROUTE 39"
+
+ para "OLIVINE CITY -"
+ line "ECRUTEAK CITY"
+ done
+
+MoomooFarmSignText:
+ text "MOOMOO FARM"
+
+ para "Enjoy Our Fresh"
+ line "and Tasty Milk"
+ done
+
+Route39TrainerTipsText:
+ text "TRAINER TIPS"
+
+ para "Use HEADBUTT on"
+ line "trees to shake"
+ cont "#MON out."
+
+ para "Different kinds of"
+ line "#MON drop out"
+ cont "of trees."
+
+ para "Use HEADBUTT on"
+ line "any tree you see!"
+ done
+
+Route39_MapEvents:
+ db 0, 0 ; filler
+
+ db 2 ; warp events
+ warp_event 1, 3, ROUTE_39_BARN, 1
+ warp_event 5, 3, ROUTE_39_FARMHOUSE, 1
+
+ db 0 ; coord events
+
+ db 4 ; bg events
+ bg_event 5, 31, BGEVENT_READ, Route39TrainerTips
+ bg_event 9, 5, BGEVENT_READ, MoomooFarmSign
+ bg_event 15, 7, BGEVENT_READ, Route39Sign
+ bg_event 5, 13, BGEVENT_ITEM, Route39HiddenNugget
+
+ db 9 ; object events
+ object_event 13, 29, SPRITE_SAILOR, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, PAL_NPC_BLUE, OBJECTTYPE_TRAINER, 5, TrainerSailorEugene, -1
+ object_event 11, 19, SPRITE_POKEFAN_M, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, PAL_NPC_RED, OBJECTTYPE_TRAINER, 4, TrainerPokefanmDerek, -1
+ object_event 13, 22, SPRITE_POKEFAN_F, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, PAL_NPC_RED, OBJECTTYPE_TRAINER, 5, TrainerPokefanfRuth, -1
+ object_event 3, 12, SPRITE_TAUROS, SPRITEMOVEDATA_POKEMON, 0, 0, -1, -1, 0, OBJECTTYPE_SCRIPT, 0, Route39Miltank, -1
+ object_event 6, 11, SPRITE_TAUROS, SPRITEMOVEDATA_POKEMON, 0, 0, -1, -1, 0, OBJECTTYPE_SCRIPT, 0, Route39Miltank, -1
+ object_event 4, 15, SPRITE_TAUROS, SPRITEMOVEDATA_POKEMON, 0, 0, -1, -1, 0, OBJECTTYPE_SCRIPT, 0, Route39Miltank, -1
+ object_event 8, 13, SPRITE_TAUROS, SPRITEMOVEDATA_POKEMON, 0, 0, -1, -1, 0, OBJECTTYPE_SCRIPT, 0, Route39Miltank, -1
+ object_event 13, 6, SPRITE_YOUNGSTER, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, PAL_NPC_BLUE, OBJECTTYPE_TRAINER, 3, TrainerPsychicNorman, -1
+ object_event 9, 3, SPRITE_FRUIT_TREE, SPRITEMOVEDATA_STILL, 0, 0, -1, -1, 0, OBJECTTYPE_SCRIPT, 0, Route39FruitTree, -1
diff --git a/maps/Route40.asm b/maps/Route40.asm
new file mode 100644
index 00000000..7a66b61e
--- /dev/null
+++ b/maps/Route40.asm
@@ -0,0 +1,298 @@
+ const_def 2 ; object constants
+ const ROUTE40_OLIVINE_RIVAL1
+ const ROUTE40_OLIVINE_RIVAL2
+ const ROUTE40_SWIMMER_GIRL1
+ const ROUTE40_SWIMMER_GIRL2
+ const ROUTE40_ROCK1
+ const ROUTE40_ROCK2
+ const ROUTE40_ROCK3
+ const ROUTE40_LASS1
+ const ROUTE40_MONICA
+ const ROUTE40_POKEFAN_M
+ const ROUTE40_LASS2
+ const ROUTE40_STANDING_YOUNGSTER
+
+Route40_MapScripts:
+ db 0 ; scene scripts
+
+ db 1 ; callbacks
+ callback MAPCALLBACK_OBJECTS, .MonicaCallback
+
+.MonicaCallback:
+ checkcode VAR_WEEKDAY
+ ifequal MONDAY, .MonicaAppears
+ disappear ROUTE40_MONICA
+ return
+
+.MonicaAppears:
+ appear ROUTE40_MONICA
+ return
+
+TrainerSwimmerfElaine:
+ trainer SWIMMERF, ELAINE, EVENT_BEAT_SWIMMERF_ELAINE, SwimmerfElaineSeenText, SwimmerfElaineBeatenText, 0, .Script
+
+.Script:
+ endifjustbattled
+ opentext
+ writetext SwimmerfElaineAfterBattleText
+ waitbutton
+ closetext
+ end
+
+TrainerSwimmerfPaula:
+ trainer SWIMMERF, PAULA, EVENT_BEAT_SWIMMERF_PAULA, SwimmerfPaulaSeenText, SwimmerfPaulaBeatenText, 0, .Script
+
+.Script:
+ endifjustbattled
+ opentext
+ writetext SwimmerfPaulaAfterBattleText
+ waitbutton
+ closetext
+ end
+
+TrainerSwimmermSimon:
+ trainer SWIMMERM, SIMON, EVENT_BEAT_SWIMMERM_SIMON, SwimmermSimonSeenText, SwimmermSimonBeatenText, 0, .Script
+
+.Script:
+ endifjustbattled
+ opentext
+ writetext SwimmermSimonAfterBattleText
+ waitbutton
+ closetext
+ end
+
+TrainerSwimmermRandall:
+ trainer SWIMMERM, RANDALL, EVENT_BEAT_SWIMMERM_RANDALL, SwimmermRandallSeenText, SwimmermRandallBeatenText, 0, .Script
+
+.Script:
+ endifjustbattled
+ opentext
+ writetext SwimmermRandallAfterBattleText
+ waitbutton
+ closetext
+ end
+
+Route40Lass1Script:
+ jumptextfaceplayer Route40Lass1Text
+
+MonicaScript:
+ faceplayer
+ opentext
+ checkevent EVENT_GOT_SHARP_BEAK_FROM_MONICA
+ iftrue .Monday
+ checkcode VAR_WEEKDAY
+ ifnotequal MONDAY, .NotMonday
+ checkevent EVENT_MET_MONICA_OF_MONDAY
+ iftrue .MetMonica
+ writetext MeetMonicaText
+ buttonsound
+ setevent EVENT_MET_MONICA_OF_MONDAY
+.MetMonica:
+ writetext MonicaGivesGiftText
+ buttonsound
+ verbosegiveitem SHARP_BEAK
+ iffalse .done
+ setevent EVENT_GOT_SHARP_BEAK_FROM_MONICA
+ writetext MonicaGaveGiftText
+ waitbutton
+ closetext
+ end
+
+.Monday:
+ writetext MonicaMondayText
+ waitbutton
+.done:
+ closetext
+ end
+
+.NotMonday:
+ writetext MonicaNotMondayText
+ waitbutton
+ closetext
+ end
+
+Route40Sign:
+ jumptext Route40SignText
+
+Route40Rock:
+ jumpstd smashrock
+
+Route40HiddenHyperPotion:
+ hiddenitem HYPER_POTION, EVENT_ROUTE_40_HIDDEN_HYPER_POTION
+
+MovementData_0x1a621c:
+ step RIGHT
+ step UP
+ step UP
+ step UP
+ step UP
+ step UP
+ step UP
+ step_end
+
+MovementData_0x1a6224:
+ step UP
+ step UP
+ step UP
+ step UP
+ step UP
+ step_end
+
+MovementData_0x1a622a:
+ step UP
+ step UP
+ step UP
+ step UP
+ step_end
+
+SwimmermSimonSeenText:
+ text "You have to warm"
+ line "up before going"
+ cont "into the water."
+
+ para "That's basic."
+ done
+
+SwimmermSimonBeatenText:
+ text "OK! Uncle! I give!"
+ done
+
+SwimmermSimonAfterBattleText:
+ text "CIANWOOD CITY is"
+ line "a good distance"
+ cont "away from here."
+ done
+
+SwimmermRandallSeenText:
+ text "A young guy like"
+ line "you should swim."
+
+ para "Don't SURF on your"
+ line "#MON."
+ done
+
+SwimmermRandallBeatenText:
+ text "Uh-oh. I lost…"
+ done
+
+SwimmermRandallAfterBattleText:
+ text "Swimming exercises"
+ line "your entire body."
+ cont "It's healthy."
+ done
+
+SwimmerfElaineSeenText:
+ text "Are you going to"
+ line "CIANWOOD?"
+
+ para "How about a quick"
+ line "battle first?"
+ done
+
+SwimmerfElaineBeatenText:
+ text "I lost that one!"
+ done
+
+SwimmerfElaineAfterBattleText:
+ text "I'd say I'm a bet-"
+ line "ter swimmer than"
+ cont "you. Yeah!"
+ done
+
+SwimmerfPaulaSeenText:
+ text "No inner tube for"
+ line "me."
+
+ para "I'm hanging on to"
+ line "a sea #MON!"
+ done
+
+SwimmerfPaulaBeatenText:
+ text "Ooh, I'm feeling"
+ line "dizzy!"
+ done
+
+SwimmerfPaulaAfterBattleText:
+ text "While I float like"
+ line "this, the waves"
+ cont "carry me along."
+ done
+
+Route40Lass1Text:
+ text "Although you can't"
+ line "see it from here,"
+
+ para "CIANWOOD is across"
+ line "the sea."
+ done
+
+MeetMonicaText:
+ text "MONICA: Glad to"
+ line "meet you. I'm"
+
+ para "MONICA of Monday."
+ done
+
+MonicaGivesGiftText:
+ text "As a token of our"
+ line "friendship, I have"
+ cont "a gift for you!"
+ done
+
+MonicaGaveGiftText:
+ text "MONICA: It's an"
+ line "item that raises"
+
+ para "the power of fly-"
+ line "ing-type moves."
+
+ para "You should equip a"
+ line "bird #MON with"
+ cont "that item."
+ done
+
+MonicaMondayText:
+ text "MONICA: My broth-"
+ line "ers and sisters"
+
+ para "are all over the"
+ line "place."
+
+ para "See if you could"
+ line "find them all!"
+ done
+
+MonicaNotMondayText:
+ text "MONICA: I don't"
+ line "think today is"
+ cont "Monday. How sad…"
+ done
+
+Route40SignText:
+ text "ROUTE 40"
+
+ para "CIANWOOD CITY -"
+ line "OLIVINE CITY"
+ done
+
+Route40_MapEvents:
+ db 0, 0 ; filler
+
+ db 0 ; warp events
+
+ db 0 ; coord events
+
+ db 2 ; bg events
+ bg_event 16, 8, BGEVENT_READ, Route40Sign
+ bg_event 11, 7, BGEVENT_ITEM, Route40HiddenHyperPotion
+
+ db 9 ; object events
+ object_event 14, 15, SPRITE_OLIVINE_RIVAL, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, PAL_NPC_RED, OBJECTTYPE_TRAINER, 4, TrainerSwimmermSimon, -1
+ object_event 18, 30, SPRITE_OLIVINE_RIVAL, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, PAL_NPC_RED, OBJECTTYPE_TRAINER, 5, TrainerSwimmermRandall, -1
+ object_event 3, 19, SPRITE_SWIMMER_GIRL, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, PAL_NPC_GREEN, OBJECTTYPE_TRAINER, 4, TrainerSwimmerfElaine, -1
+ object_event 10, 25, SPRITE_SWIMMER_GIRL, SPRITEMOVEDATA_SPINCLOCKWISE, 0, 0, -1, -1, PAL_NPC_GREEN, OBJECTTYPE_TRAINER, 3, TrainerSwimmerfPaula, -1
+ object_event 12, 8, SPRITE_ROCK, SPRITEMOVEDATA_SMASHABLE_ROCK, 0, 0, -1, -1, 0, OBJECTTYPE_SCRIPT, 0, Route40Rock, -1
+ object_event 11, 7, SPRITE_ROCK, SPRITEMOVEDATA_SMASHABLE_ROCK, 0, 0, -1, -1, 0, OBJECTTYPE_SCRIPT, 0, Route40Rock, -1
+ object_event 13, 6, SPRITE_ROCK, SPRITEMOVEDATA_SMASHABLE_ROCK, 0, 0, -1, -1, 0, OBJECTTYPE_SCRIPT, 0, Route40Rock, -1
+ object_event 13, 10, SPRITE_LASS, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, OBJECTTYPE_SCRIPT, 0, Route40Lass1Script, -1
+ object_event 10, 6, SPRITE_BUENA, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 1, 0, -1, -1, 0, OBJECTTYPE_SCRIPT, 0, MonicaScript, EVENT_ROUTE_40_MONICA_OF_MONDAY
diff --git a/maps/Route41.asm b/maps/Route41.asm
new file mode 100644
index 00000000..d851a41e
--- /dev/null
+++ b/maps/Route41.asm
@@ -0,0 +1,366 @@
+ const_def 2 ; object constants
+ const ROUTE41_OLIVINE_RIVAL1
+ const ROUTE41_OLIVINE_RIVAL2
+ const ROUTE41_OLIVINE_RIVAL3
+ const ROUTE41_OLIVINE_RIVAL4
+ const ROUTE41_OLIVINE_RIVAL5
+ const ROUTE41_SWIMMER_GIRL1
+ const ROUTE41_SWIMMER_GIRL2
+ const ROUTE41_SWIMMER_GIRL3
+ const ROUTE41_SWIMMER_GIRL4
+ const ROUTE41_SWIMMER_GIRL5
+
+Route41_MapScripts:
+ db 0 ; scene scripts
+
+ db 0 ; callbacks
+
+TrainerSwimmerfKaylee:
+ trainer SWIMMERF, KAYLEE, EVENT_BEAT_SWIMMERF_KAYLEE, SwimmerfKayleeSeenText, SwimmerfKayleeBeatenText, 0, .Script
+
+.Script:
+ endifjustbattled
+ opentext
+ writetext SwimmerfKayleeAfterBattleText
+ waitbutton
+ closetext
+ end
+
+TrainerSwimmerfSusie:
+ trainer SWIMMERF, SUSIE, EVENT_BEAT_SWIMMERF_SUSIE, SwimmerfSusieSeenText, SwimmerfSusieBeatenText, 0, .Script
+
+.Script:
+ endifjustbattled
+ opentext
+ writetext SwimmerfSusieAfterBattleText
+ waitbutton
+ closetext
+ end
+
+TrainerSwimmerfDenise:
+ trainer SWIMMERF, DENISE, EVENT_BEAT_SWIMMERF_DENISE, SwimmerfDeniseSeenText, SwimmerfDeniseBeatenText, 0, .Script
+
+.Script:
+ endifjustbattled
+ opentext
+ writetext SwimmerfDeniseAfterBattleText
+ waitbutton
+ closetext
+ end
+
+TrainerSwimmerfKara:
+ trainer SWIMMERF, KARA, EVENT_BEAT_SWIMMERF_KARA, SwimmerfKaraSeenText, SwimmerfKaraBeatenText, 0, .Script
+
+.Script:
+ endifjustbattled
+ opentext
+ writetext SwimmerfKaraAfterBattleText
+ waitbutton
+ closetext
+ end
+
+TrainerSwimmerfWendy:
+ trainer SWIMMERF, WENDY, EVENT_BEAT_SWIMMERF_WENDY, SwimmerfWendySeenText, SwimmerfWendyBeatenText, 0, .Script
+
+.Script:
+ endifjustbattled
+ opentext
+ writetext SwimmerfWendyAfterBattleText
+ waitbutton
+ closetext
+ end
+
+TrainerSwimmermCharlie:
+ trainer SWIMMERM, CHARLIE, EVENT_BEAT_SWIMMERM_CHARLIE, SwimmermCharlieSeenText, SwimmermCharlieBeatenText, 0, .Script
+
+.Script:
+ endifjustbattled
+ opentext
+ writetext SwimmermCharlieAfterBattleText
+ waitbutton
+ closetext
+ end
+
+TrainerSwimmermGeorge:
+ trainer SWIMMERM, GEORGE, EVENT_BEAT_SWIMMERM_GEORGE, SwimmermGeorgeSeenText, SwimmermGeorgeBeatenText, 0, .Script
+
+.Script:
+ endifjustbattled
+ opentext
+ writetext SwimmermGeorgeAfterBattleText
+ waitbutton
+ closetext
+ end
+
+TrainerSwimmermBerke:
+ trainer SWIMMERM, BERKE, EVENT_BEAT_SWIMMERM_BERKE, SwimmermBerkeSeenText, SwimmermBerkeBeatenText, 0, .Script
+
+.Script:
+ endifjustbattled
+ opentext
+ writetext SwimmermBerkeAfterBattleText
+ waitbutton
+ closetext
+ end
+
+TrainerSwimmermKirk:
+ trainer SWIMMERM, KIRK, EVENT_BEAT_SWIMMERM_KIRK, SwimmermKirkSeenText, SwimmermKirkBeatenText, 0, .Script
+
+.Script:
+ endifjustbattled
+ opentext
+ writetext SwimmermKirkAfterBattleText
+ waitbutton
+ closetext
+ end
+
+TrainerSwimmermMathew:
+ trainer SWIMMERM, MATHEW, EVENT_BEAT_SWIMMERM_MATHEW, SwimmermMathewSeenText, SwimmermMathewBeatenText, 0, .Script
+
+.Script:
+ endifjustbattled
+ opentext
+ writetext SwimmermMathewAfterBattleText
+ waitbutton
+ closetext
+ end
+
+Route41Rock:
+; unused
+ jumpstd smashrock
+
+Route41HiddenMaxEther:
+ hiddenitem MAX_ETHER, EVENT_ROUTE_41_HIDDEN_MAX_ETHER
+
+SwimmermCharlieSeenText:
+ text "The water's warm"
+ line "here. I'm loose"
+ cont "and limber."
+
+ para "Sure, I'll take"
+ line "you on!"
+ done
+
+SwimmermCharlieBeatenText:
+ text "Yikes! I've got"
+ line "prune skin!"
+ done
+
+SwimmermCharlieAfterBattleText:
+ text "Isn't it relaxing"
+ line "just floating like"
+ cont "this?"
+ done
+
+SwimmermGeorgeSeenText:
+ text "I'm a bit tired."
+ line "If I win, lend me"
+ cont "your #MON."
+ done
+
+SwimmermGeorgeBeatenText:
+ text "Pant, pant…"
+ done
+
+SwimmermGeorgeAfterBattleText:
+ text "It's so far to"
+ line "CIANWOOD."
+
+ para "But it's no easy"
+ line "return trip to"
+ cont "OLIVINE either."
+
+ para "What should I do?"
+ done
+
+SwimmermBerkeSeenText:
+ text "See those islands"
+ line "that are blocked"
+ cont "by whirlpools?"
+
+ para "There just has to"
+ line "be a secret!"
+ done
+
+SwimmermBerkeBeatenText:
+ text "What's the secret"
+ line "to your strength?"
+ done
+
+SwimmermBerkeAfterBattleText:
+ text "It was a dark and"
+ line "stormy night…"
+
+ para "I saw this giant"
+ line "#MON flying"
+ cont "from the islands."
+
+ para "It was scattering"
+ line "feathers from its"
+ cont "silver wings."
+ done
+
+SwimmermKirkSeenText:
+ text "The waves are wild"
+ line "here."
+
+ para "They tire you out"
+ line "while you swim."
+ done
+
+SwimmermKirkBeatenText:
+ text "I'm beat!"
+ done
+
+SwimmermKirkAfterBattleText:
+ text "The currents keep"
+ line "me from reaching"
+ cont "that island."
+ done
+
+SwimmermMathewSeenText:
+ text "Are you seeking"
+ line "the secrets of"
+ cont "WHIRL ISLANDS?"
+ done
+
+SwimmermMathewBeatenText:
+ text "Ooh, you've got"
+ line "great endurance!"
+ done
+
+SwimmermMathewAfterBattleText:
+ text "A secret about"
+ line "WHIRL ISLANDS…"
+
+ para "It's pitch-black"
+ line "inside!"
+ done
+
+SwimmerfKayleeSeenText:
+ text "I'm on my way to"
+ line "WHIRL ISLANDS."
+
+ para "I'm going explor-"
+ line "ing with friends."
+ done
+
+SwimmerfKayleeBeatenText:
+ text "Is that how you do"
+ line "it?"
+ done
+
+SwimmerfKayleeAfterBattleText:
+ text "There's supposed"
+ line "to be a big #-"
+ cont "MON deep beneath"
+ cont "WHIRL ISLANDS."
+
+ para "I wonder what it"
+ line "could be?"
+ done
+
+SwimmerfSusieSeenText:
+ text "You look so ele-"
+ line "gant, riding your"
+ cont "#MON."
+ done
+
+SwimmerfSusieBeatenText:
+ text "I'm crushed…"
+ done
+
+SwimmerfSusieAfterBattleText:
+ text "Wasn't there a hit"
+ line "song about a boy"
+ cont "riding a LAPRAS?"
+ done
+
+SwimmerfDeniseSeenText:
+ text "The weather is so"
+ line "beautiful, I'm in"
+ cont "a daze!"
+ done
+
+SwimmerfDeniseBeatenText:
+ text "Ohhh!"
+ done
+
+SwimmerfDeniseAfterBattleText:
+ text "A sunburn is the"
+ line "worst for skin."
+
+ para "But I don't use a"
+ line "sunblock."
+
+ para "I won't pollute"
+ line "the water."
+ done
+
+SwimmerfKaraSeenText:
+ text "If you need to"
+ line "rest, just tread"
+ cont "water."
+
+ para "You'll get your"
+ line "wind back, so you"
+
+ para "can keep on going"
+ line "strong."
+ done
+
+SwimmerfKaraBeatenText:
+ text "Oh! You have more"
+ line "energy than I do."
+ done
+
+SwimmerfKaraAfterBattleText:
+ text "I heard roars from"
+ line "deep inside the"
+ cont "ISLANDS."
+ done
+
+SwimmerfWendySeenText:
+ text "At night, STARYU"
+ line "gather near the"
+ cont "water's surface."
+ done
+
+SwimmerfWendyBeatenText:
+ text "Oh, dear…"
+ done
+
+SwimmerfWendyAfterBattleText:
+ text "The clusters of"
+ line "STARYU light up"
+ cont "at the same time."
+
+ para "It's so beautiful,"
+ line "it's scary."
+ done
+
+Route41_MapEvents:
+ db 0, 0 ; filler
+
+ db 4 ; warp events
+ warp_event 12, 17, WHIRL_ISLAND_NW, 1
+ warp_event 36, 19, WHIRL_ISLAND_NE, 1
+ warp_event 12, 37, WHIRL_ISLAND_SW, 1
+ warp_event 36, 45, WHIRL_ISLAND_SE, 1
+
+ db 0 ; coord events
+
+ db 1 ; bg events
+ bg_event 9, 35, BGEVENT_ITEM, Route41HiddenMaxEther
+
+ db 10 ; object events
+ object_event 32, 6, SPRITE_OLIVINE_RIVAL, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, PAL_NPC_RED, OBJECTTYPE_TRAINER, 3, TrainerSwimmermCharlie, -1
+ object_event 46, 8, SPRITE_OLIVINE_RIVAL, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, PAL_NPC_RED, OBJECTTYPE_TRAINER, 3, TrainerSwimmermGeorge, -1
+ object_event 20, 26, SPRITE_OLIVINE_RIVAL, SPRITEMOVEDATA_SPINCOUNTERCLOCKWISE, 0, 0, -1, -1, PAL_NPC_RED, OBJECTTYPE_TRAINER, 3, TrainerSwimmermBerke, -1
+ object_event 32, 30, SPRITE_OLIVINE_RIVAL, SPRITEMOVEDATA_SPINCLOCKWISE, 0, 0, -1, -1, PAL_NPC_RED, OBJECTTYPE_TRAINER, 3, TrainerSwimmermKirk, -1
+ object_event 19, 46, SPRITE_OLIVINE_RIVAL, SPRITEMOVEDATA_SPINCOUNTERCLOCKWISE, 0, 0, -1, -1, PAL_NPC_RED, OBJECTTYPE_TRAINER, 3, TrainerSwimmermMathew, -1
+ object_event 17, 4, SPRITE_SWIMMER_GIRL, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, PAL_NPC_GREEN, OBJECTTYPE_TRAINER, 3, TrainerSwimmerfKaylee, -1
+ object_event 23, 19, SPRITE_SWIMMER_GIRL, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, PAL_NPC_GREEN, OBJECTTYPE_TRAINER, 3, TrainerSwimmerfSusie, -1
+ object_event 27, 34, SPRITE_SWIMMER_GIRL, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, PAL_NPC_GREEN, OBJECTTYPE_TRAINER, 3, TrainerSwimmerfDenise, -1
+ object_event 44, 28, SPRITE_SWIMMER_GIRL, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, PAL_NPC_GREEN, OBJECTTYPE_TRAINER, 4, TrainerSwimmerfKara, -1
+ object_event 9, 50, SPRITE_SWIMMER_GIRL, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, PAL_NPC_GREEN, OBJECTTYPE_TRAINER, 2, TrainerSwimmerfWendy, -1
diff --git a/maps/Route42.asm b/maps/Route42.asm
new file mode 100644
index 00000000..622286ce
--- /dev/null
+++ b/maps/Route42.asm
@@ -0,0 +1,272 @@
+ const_def 2 ; object constants
+ const ROUTE42_FISHER
+ const ROUTE42_POKEFAN_M
+ const ROUTE42_SUPER_NERD
+ const ROUTE42_FRUIT_TREE1
+ const ROUTE42_FRUIT_TREE2
+ const ROUTE42_FRUIT_TREE3
+ const ROUTE42_POKE_BALL1
+ const ROUTE42_POKE_BALL2
+ const ROUTE42_SUICUNE
+
+Route42_MapScripts:
+ db 0 ; scene scripts
+
+ db 0 ; callbacks
+
+TrainerFisherChris:
+ trainer FISHER, CHRIS1, EVENT_BEAT_FISHER_CHRIS, FisherChrisSeenText, FisherChrisBeatenText, 0, .Script
+
+.Script:
+ endifjustbattled
+ opentext
+ checkevent EVENT_CHRIS_READY_FOR_REMATCH
+ iftrue .WantsBattle
+ checkcellnum PHONE_FISHER_CHRIS
+ iftrue .NumberAccepted
+ checkevent EVENT_CHRIS_ASKED_FOR_PHONE_NUMBER
+ iftrue .AskedAlready
+ writetext FisherChrisAfterBattleText
+ buttonsound
+ setevent EVENT_CHRIS_ASKED_FOR_PHONE_NUMBER
+ scall .AskNumber1
+ jump .AskForNumber
+
+.AskedAlready:
+ scall .AskNumber2
+.AskForNumber:
+ askforphonenumber PHONE_FISHER_CHRIS
+ ifequal PHONE_CONTACTS_FULL, .PhoneFull
+ ifequal PHONE_CONTACT_REFUSED, .NumberDeclined
+ trainertotext FISHER, CHRIS1, MEM_BUFFER_0
+ scall .RegisteredNumber
+ jump .NumberAccepted
+
+.WantsBattle:
+ scall .Rematch
+ winlosstext FisherChrisBeatenText, 0
+ checkevent EVENT_BEAT_ELITE_FOUR
+ iftrue .LoadFight2
+ checkevent EVENT_CLEARED_ROCKET_HIDEOUT
+ iftrue .LoadFight1
+ loadtrainer FISHER, CHRIS1
+ startbattle
+ reloadmapafterbattle
+ clearevent EVENT_CHRIS_READY_FOR_REMATCH
+ end
+
+.LoadFight1:
+ loadtrainer FISHER, CHRIS2
+ startbattle
+ reloadmapafterbattle
+ clearevent EVENT_CHRIS_READY_FOR_REMATCH
+ end
+
+.LoadFight2:
+ loadtrainer FISHER, CHRIS3
+ startbattle
+ reloadmapafterbattle
+ clearevent EVENT_CHRIS_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
+
+TrainerPokemaniacShane:
+ trainer POKEMANIAC, SHANE, EVENT_BEAT_POKEMANIAC_SHANE, PokemaniacShaneSeenText, PokemaniacShaneBeatenText, 0, .Script
+
+.Script:
+ endifjustbattled
+ opentext
+ writetext PokemaniacShaneAfterBattleText
+ waitbutton
+ closetext
+ end
+
+TrainerHikerBenjamin:
+ trainer HIKER, BENJAMIN, EVENT_BEAT_HIKER_BENJAMIN, HikerBenjaminSeenText, HikerBenjaminBeatenText, 0, .Script
+
+.Script:
+ endifjustbattled
+ opentext
+ writetext HikerBenjaminAfterBattleText
+ waitbutton
+ closetext
+ end
+
+Route42Sign1:
+ jumptext Route42Sign1Text
+
+MtMortarSign1:
+ jumptext MtMortarSign1Text
+
+MtMortarSign2:
+ jumptext MtMortarSign2Text
+
+Route42Sign2:
+ jumptext Route42Sign2Text
+
+Route42UltraBall:
+ itemball ULTRA_BALL
+
+Route42SuperPotion:
+ itemball SUPER_POTION
+
+Route42FruitTree1:
+ fruittree FRUITTREE_ROUTE_42_1
+
+Route42FruitTree2:
+ fruittree FRUITTREE_ROUTE_42_2
+
+Route42FruitTree3:
+ fruittree FRUITTREE_ROUTE_42_3
+
+Route42HiddenMaxPotion:
+ hiddenitem MAX_POTION, EVENT_ROUTE_42_HIDDEN_MAX_POTION
+
+FisherChrisSeenText:
+ text "Let me demonstrate"
+ line "the power of the"
+ cont "#MON I caught!"
+ done
+
+FisherChrisBeatenText:
+ text "What? That's not"
+ line "right."
+ done
+
+FisherChrisAfterBattleText:
+ text "I want to become"
+ line "the trainer CHAMP"
+
+ para "using the #MON"
+ line "I caught."
+
+ para "That's the best"
+ line "part of fishing!"
+ done
+
+HikerBenjaminSeenText:
+ text "Ah, it's good to"
+ line "be outside!"
+ cont "I feel so free!"
+ done
+
+HikerBenjaminBeatenText:
+ text "Gahahah!"
+ done
+
+HikerBenjaminAfterBattleText:
+ text "Losing feels in-"
+ line "significant if you"
+
+ para "look up at the big"
+ line "sky!"
+ done
+
+PokemaniacShaneSeenText:
+ text "HEY!"
+
+ para "This is my secret"
+ line "place! Get lost,"
+ cont "you outsider!"
+ done
+
+PokemaniacShaneBeatenText:
+ text "I should have used"
+ line "my MOON STONE…"
+ done
+
+PokemaniacShaneAfterBattleText:
+ text "You're working on"
+ line "a #DEX?"
+
+ para "Wow, you must know"
+ line "some pretty rare"
+ cont "#MON!"
+
+ para "May I please see"
+ line "it. Please?"
+ done
+
+Route42Sign1Text:
+ text "ROUTE 42"
+
+ para "ECRUTEAK CITY -"
+ line "MAHOGANY TOWN"
+ done
+
+MtMortarSign1Text:
+ text "MOUNT MORTAR"
+
+ para "WATERFALL CAVE"
+ line "Inside"
+ done
+
+MtMortarSign2Text:
+ text "MOUNT MORTAR"
+
+ para "WATERFALL CAVE"
+ line "Inside"
+ done
+
+Route42Sign2Text:
+ text "ROUTE 42"
+
+ para "ECRUTEAK CITY -"
+ line "MAHOGANY TOWN"
+ done
+
+Route42_MapEvents:
+ db 0, 0 ; filler
+
+ db 5 ; warp events
+ warp_event 0, 8, ROUTE_42_ECRUTEAK_GATE, 3
+ warp_event 0, 9, ROUTE_42_ECRUTEAK_GATE, 4
+ warp_event 10, 5, MOUNT_MORTAR_1F_OUTSIDE, 1
+ warp_event 28, 9, MOUNT_MORTAR_1F_OUTSIDE, 2
+ warp_event 46, 7, MOUNT_MORTAR_1F_OUTSIDE, 3
+
+ db 0 ; coord events
+
+ db 5 ; bg events
+ bg_event 4, 10, BGEVENT_READ, Route42Sign1
+ bg_event 7, 5, BGEVENT_READ, MtMortarSign1
+ bg_event 45, 9, BGEVENT_READ, MtMortarSign2
+ bg_event 54, 8, BGEVENT_READ, Route42Sign2
+ bg_event 16, 11, BGEVENT_ITEM, Route42HiddenMaxPotion
+
+ db 8 ; object events
+ object_event 40, 10, SPRITE_FISHER, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, PAL_NPC_GREEN, OBJECTTYPE_TRAINER, 1, TrainerFisherChris, -1
+ object_event 51, 9, SPRITE_POKEFAN_M, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, PAL_NPC_BROWN, OBJECTTYPE_TRAINER, 3, TrainerHikerBenjamin, -1
+ object_event 47, 8, SPRITE_SUPER_NERD, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, PAL_NPC_BLUE, OBJECTTYPE_TRAINER, 3, TrainerPokemaniacShane, -1
+ object_event 27, 16, SPRITE_FRUIT_TREE, SPRITEMOVEDATA_STILL, 0, 0, -1, -1, 0, OBJECTTYPE_SCRIPT, 0, Route42FruitTree1, -1
+ object_event 28, 16, SPRITE_FRUIT_TREE, SPRITEMOVEDATA_STILL, 0, 0, -1, -1, 0, OBJECTTYPE_SCRIPT, 0, Route42FruitTree2, -1
+ object_event 29, 16, SPRITE_FRUIT_TREE, SPRITEMOVEDATA_STILL, 0, 0, -1, -1, 0, OBJECTTYPE_SCRIPT, 0, Route42FruitTree3, -1
+ object_event 6, 4, SPRITE_POKE_BALL, SPRITEMOVEDATA_STILL, 0, 0, -1, -1, 0, OBJECTTYPE_ITEMBALL, 0, Route42UltraBall, EVENT_ROUTE_42_ULTRA_BALL
+ object_event 33, 8, SPRITE_POKE_BALL, SPRITEMOVEDATA_STILL, 0, 0, -1, -1, 0, OBJECTTYPE_ITEMBALL, 0, Route42SuperPotion, EVENT_ROUTE_42_SUPER_POTION