summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIIMarckus <iimarckus@gmail.com>2018-10-03 11:30:16 -0600
committerIIMarckus <iimarckus@gmail.com>2018-10-03 11:30:16 -0600
commit9425a0110e00a3173accdac94cb2a4a4042efdd0 (patch)
tree93509932659c3e70225651629e16bdf668db8d70
parent095d1b60fd0a2d21d40c1091a04b37ea83cfe7cf (diff)
Add map objects from bank 51.
-rw-r--r--main.asm31
-rw-r--r--maps/MahoganyGym.asm393
-rw-r--r--maps/MahoganyPokecenter1F.asm70
-rw-r--r--maps/MahoganyRedGyaradosSpeechHouse.asm76
-rw-r--r--maps/OlivineCafe.asm88
-rw-r--r--maps/OlivineGoodRodHouse.asm95
-rw-r--r--maps/OlivineGym.asm213
-rw-r--r--maps/OlivineHouseBeta.asm55
-rw-r--r--maps/OlivineMart.asm60
-rw-r--r--maps/OlivinePokecenter1F.asm61
-rw-r--r--maps/OlivinePunishmentSpeechHouse.asm55
-rw-r--r--maps/OlivineTimsHouse.asm34
-rw-r--r--maps/Route38EcruteakGate.asm39
-rw-r--r--maps/Route39Barn.asm203
-rw-r--r--maps/Route39Farmhouse.asm208
-rw-r--r--maps/Route42EcruteakGate.asm34
-rw-r--r--wram.asm2
17 files changed, 1700 insertions, 17 deletions
diff --git a/main.asm b/main.asm
index 8057da20..8b3609ba 100644
--- a/main.asm
+++ b/main.asm
@@ -1714,22 +1714,21 @@ SECTION "bank50", ROMX, BANK[$50]
dr $140000, $144000
SECTION "bank51", ROMX, BANK[$51]
-;INCLUDE "maps/OlivinePokecenter1F.asm"
-;INCLUDE "maps/OlivineGym.asm"
-;INCLUDE "maps/OlivineTimsHouse.asm"
-;INCLUDE "maps/OlivineHouseBeta.asm"
-;INCLUDE "maps/OlivinePunishmentSpeechHouse.asm"
-;INCLUDE "maps/OlivineGoodRodHouse.asm"
-;INCLUDE "maps/OlivineCafe.asm"
-;INCLUDE "maps/OlivineMart.asm"
-;INCLUDE "maps/Route38EcruteakGate.asm"
-;INCLUDE "maps/Route39Barn.asm"
-;INCLUDE "maps/Route39Farmhouse.asm
-;INCLUDE "maps/MahoganyRedGyaradosSpeechHouse.asm"
-;INCLUDE "maps/MahoganyGym.asm"
-;INCLUDE "maps/MahoganyPokecenter1F.asm"
-;INCLUDE "maps/Route42EcruteakGate.asm"
- dr $144000, $148000
+INCLUDE "maps/OlivinePokecenter1F.asm"
+INCLUDE "maps/OlivineGym.asm"
+INCLUDE "maps/OlivineTimsHouse.asm"
+INCLUDE "maps/OlivineHouseBeta.asm"
+INCLUDE "maps/OlivinePunishmentSpeechHouse.asm"
+INCLUDE "maps/OlivineGoodRodHouse.asm"
+INCLUDE "maps/OlivineCafe.asm"
+INCLUDE "maps/OlivineMart.asm"
+INCLUDE "maps/Route38EcruteakGate.asm"
+INCLUDE "maps/Route39Barn.asm"
+INCLUDE "maps/Route39Farmhouse.asm"
+INCLUDE "maps/MahoganyRedGyaradosSpeechHouse.asm"
+INCLUDE "maps/MahoganyGym.asm"
+INCLUDE "maps/MahoganyPokecenter1F.asm"
+INCLUDE "maps/Route42EcruteakGate.asm"
SECTION "bank52", ROMX, BANK[$52]
INCLUDE "maps/EcruteakTinTowerEntrance.asm"
diff --git a/maps/MahoganyGym.asm b/maps/MahoganyGym.asm
new file mode 100644
index 00000000..f578597f
--- /dev/null
+++ b/maps/MahoganyGym.asm
@@ -0,0 +1,393 @@
+ const_def 2 ; object constants
+ const MAHOGANYGYM_PRYCE
+ const MAHOGANYGYM_BUENA1
+ const MAHOGANYGYM_ROCKER1
+ const MAHOGANYGYM_BUENA2
+ const MAHOGANYGYM_ROCKER2
+ const MAHOGANYGYM_ROCKER3
+ const MAHOGANYGYM_GYM_GUY
+
+MahoganyGym_MapScripts:
+ db 0 ; scene scripts
+
+ db 0 ; callbacks
+
+MahoganyGymPryceScript:
+ faceplayer
+ opentext
+ checkevent EVENT_BEAT_PRYCE
+ iftrue .FightDone
+ writetext PryceText_Intro
+ waitbutton
+ closetext
+ winlosstext PryceText_Impressed, 0
+ loadtrainer PRYCE, PRYCE1
+ startbattle
+ reloadmapafterbattle
+ setevent EVENT_BEAT_PRYCE
+ opentext
+ writetext Text_ReceivedGlacierBadge
+ playsound SFX_GET_BADGE
+ waitsfx
+ setflag ENGINE_GLACIERBADGE
+ checkcode VAR_BADGES
+ scall MahoganyGymActivateRockets
+.FightDone:
+ checkevent EVENT_GOT_TM16_ICY_WIND
+ iftrue PryceScript_Defeat
+ setevent EVENT_BEAT_SKIER_ROXANNE
+ setevent EVENT_BEAT_SKIER_CLARISSA
+ setevent EVENT_BEAT_BOARDER_RONALD
+ setevent EVENT_BEAT_BOARDER_BRAD
+ setevent EVENT_BEAT_BOARDER_DOUGLAS
+ writetext PryceText_GlacierBadgeSpeech
+ buttonsound
+ verbosegiveitem TM_ICY_WIND
+ iffalse MahoganyGym_NoRoomForIcyWind
+ setevent EVENT_GOT_TM16_ICY_WIND
+ writetext PryceText_IcyWindSpeech
+ waitbutton
+ closetext
+ end
+
+PryceScript_Defeat:
+ writetext PryceText_CherishYourPokemon
+ waitbutton
+MahoganyGym_NoRoomForIcyWind:
+ closetext
+ end
+
+MahoganyGymActivateRockets:
+ ifequal 7, .RadioTowerRockets
+ ifequal 6, .GoldenrodRockets
+ end
+
+.GoldenrodRockets:
+ jumpstd goldenrodrockets
+
+.RadioTowerRockets:
+ jumpstd radiotowerrockets
+
+TrainerSkierRoxanne:
+ trainer SKIER, ROXANNE, EVENT_BEAT_SKIER_ROXANNE, SkierRoxanneSeenText, SkierRoxanneBeatenText, 0, .Script
+
+.Script:
+ endifjustbattled
+ opentext
+ writetext SkierRoxanneAfterBattleText
+ waitbutton
+ closetext
+ end
+
+TrainerSkierClarissa:
+ trainer SKIER, CLARISSA, EVENT_BEAT_SKIER_CLARISSA, SkierClarissaSeenText, SkierClarissaBeatenText, 0, .Script
+
+.Script:
+ endifjustbattled
+ opentext
+ writetext SkierClarissaAfterBattleText
+ waitbutton
+ closetext
+ end
+
+TrainerBoarderRonald:
+ trainer BOARDER, RONALD, EVENT_BEAT_BOARDER_RONALD, BoarderRonaldSeenText, BoarderRonaldBeatenText, 0, .Script
+
+.Script:
+ endifjustbattled
+ opentext
+ writetext BoarderRonaldAfterBattleText
+ waitbutton
+ closetext
+ end
+
+TrainerBoarderBrad:
+ trainer BOARDER, BRAD, EVENT_BEAT_BOARDER_BRAD, BoarderBradSeenText, BoarderBradBeatenText, 0, .Script
+
+.Script:
+ endifjustbattled
+ opentext
+ writetext BoarderBradAfterBattleText
+ waitbutton
+ closetext
+ end
+
+TrainerBoarderDouglas:
+ trainer BOARDER, DOUGLAS, EVENT_BEAT_BOARDER_DOUGLAS, BoarderDouglasSeenText, BoarderDouglasBeatenText, 0, .Script
+
+.Script:
+ endifjustbattled
+ opentext
+ writetext BoarderDouglasAfterBattleText
+ waitbutton
+ closetext
+ end
+
+MahoganyGymGuyScript:
+ faceplayer
+ opentext
+ checkevent EVENT_BEAT_PRYCE
+ iftrue .MahoganyGymGuyWinScript
+ writetext MahoganyGymGuyText
+ waitbutton
+ closetext
+ end
+
+.MahoganyGymGuyWinScript:
+ writetext MahoganyGymGuyWinText
+ waitbutton
+ closetext
+ end
+
+MahoganyGymStatue:
+ checkflag ENGINE_GLACIERBADGE
+ iftrue .Beaten
+ jumpstd gymstatue1
+.Beaten:
+ trainertotext PRYCE, PRYCE1, MEM_BUFFER_1
+ jumpstd gymstatue2
+
+PryceText_Intro:
+ text "#MON have many"
+ line "experiences in"
+
+ para "their lives, just "
+ line "like we do. "
+
+ para "I, too, have seen"
+ line "and suffered much"
+ cont "in my life."
+
+ para "Since I am your"
+ line "elder, let me show"
+ cont "you what I mean."
+
+ para "I have been with"
+ line "#MON since"
+
+ para "before you were"
+ line "born."
+
+ para "I do not lose"
+ line "easily."
+
+ para "I, PRYCE--the"
+ line "winter trainer--"
+
+ para "shall demonstrate"
+ line "my power!"
+ done
+
+PryceText_Impressed:
+ text "Ah, I am impressed"
+ line "by your prowess."
+
+ para "With your strong"
+ line "will, I know you"
+
+ para "will overcome all"
+ line "life's obstacles."
+
+ para "You are worthy of"
+ line "this BADGE!"
+ done
+
+Text_ReceivedGlacierBadge:
+ text "<PLAYER> received"
+ line "GLACIERBADGE."
+ done
+
+PryceText_GlacierBadgeSpeech:
+ text "That BADGE will"
+ line "raise the SPECIAL"
+ cont "stats of #MON."
+
+ para "It also lets your"
+ line "#MON use WHIRL-"
+ cont "POOL to get across"
+ cont "real whirlpools."
+
+ para "And this… This is"
+ line "a gift from me!"
+ done
+
+PryceText_IcyWindSpeech:
+ text "That TM contains"
+ line "ICY WIND."
+
+ para "It inflicts damage"
+ line "and lowers speed."
+
+ para "It demonstrates"
+ line "the harshness of"
+ cont "winter."
+ done
+
+PryceText_CherishYourPokemon:
+ text "When the ice and"
+ line "snow melt, spring"
+ cont "arrives."
+
+ para "You and your #-"
+ line "MON will be to-"
+
+ para "gether for many"
+ line "years to come."
+
+ para "Cherish your time"
+ line "together!"
+ done
+
+BoarderRonaldSeenText:
+ text "I'll freeze your"
+ line "#MON, so you"
+ cont "can't do a thing!"
+ done
+
+BoarderRonaldBeatenText:
+ text "Darn. I couldn't"
+ line "do a thing."
+ done
+
+BoarderRonaldAfterBattleText:
+ text "I think there's a"
+ line "move a #MON"
+
+ para "can use while it's"
+ line "frozen."
+ done
+
+BoarderBradSeenText:
+ text "This GYM has a"
+ line "slippery floor."
+
+ para "It's fun, isn't"
+ line "it?"
+
+ para "But hey--we're"
+ line "not playing games"
+ cont "here!"
+ done
+
+BoarderBradBeatenText:
+ text "Do you see how"
+ line "serious we are?"
+ done
+
+BoarderBradAfterBattleText:
+ text "This GYM is great."
+ line "I love boarding"
+ cont "with my #MON!"
+ done
+
+BoarderDouglasSeenText:
+ text "I know PRYCE's"
+ line "secret."
+ done
+
+BoarderDouglasBeatenText:
+ text "OK. I'll tell you"
+ line "PRYCE's secret."
+ done
+
+BoarderDouglasAfterBattleText:
+ text "The secret behind"
+ line "PRYCE's power…"
+
+ para "He meditates under"
+ line "a waterfall daily"
+
+ para "to strengthen his"
+ line "mind and body."
+ done
+
+SkierRoxanneSeenText:
+ text "To get to PRYCE,"
+ line "our GYM LEADER,"
+
+ para "you need to think"
+ line "before you skate."
+ done
+
+SkierRoxanneBeatenText:
+ text "I wouldn't lose to"
+ line "you in skiing!"
+ done
+
+SkierRoxanneAfterBattleText:
+ text "If you don't skate"
+ line "with precision,"
+
+ para "you won't get far"
+ line "in this GYM."
+ done
+
+SkierClarissaSeenText:
+ text "Check out my"
+ line "parallel turn!"
+ done
+
+SkierClarissaBeatenText:
+ text "No! You made me"
+ line "wipe out!"
+ done
+
+SkierClarissaAfterBattleText:
+ text "I shouldn't have"
+ line "been bragging"
+ cont "about my skiing…"
+ done
+
+MahoganyGymGuyText:
+ text "PRYCE is a veteran"
+ line "who has trained"
+
+ para "#MON for some"
+ line "50 years."
+
+ para "He's said to be"
+ line "good at freezing"
+
+ para "opponents with"
+ line "ice-type moves."
+
+ para "That means you"
+ line "should melt him"
+
+ para "with your burning"
+ line "ambition!"
+ done
+
+MahoganyGymGuyWinText:
+ text "PRYCE is some-"
+ line "thing, but you're"
+ cont "something else!"
+
+ para "That was a hot"
+ line "battle that"
+
+ para "bridged the gen-"
+ line "eration gap!"
+ done
+
+MahoganyGym_MapEvents:
+ db 0, 0 ; filler
+
+ db 2 ; warp events
+ warp_event 4, 17, MAHOGANY_TOWN, 3
+ warp_event 5, 17, MAHOGANY_TOWN, 3
+
+ db 0 ; coord events
+
+ db 2 ; bg events
+ bg_event 3, 15, BGEVENT_READ, MahoganyGymStatue
+ bg_event 6, 15, BGEVENT_READ, MahoganyGymStatue
+
+ db 7 ; object events
+ object_event 5, 3, SPRITE_PRYCE, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, PAL_NPC_BROWN, OBJECTTYPE_SCRIPT, 0, MahoganyGymPryceScript, -1
+ object_event 4, 6, SPRITE_BUENA, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, PAL_NPC_RED, OBJECTTYPE_TRAINER, 1, TrainerSkierRoxanne, -1
+ object_event 0, 17, SPRITE_ROCKER, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, PAL_NPC_BLUE, OBJECTTYPE_TRAINER, 1, TrainerBoarderRonald, -1
+ object_event 9, 17, SPRITE_BUENA, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, PAL_NPC_RED, OBJECTTYPE_TRAINER, 1, TrainerSkierClarissa, -1
+ object_event 5, 9, SPRITE_ROCKER, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, PAL_NPC_BLUE, OBJECTTYPE_TRAINER, 1, TrainerBoarderBrad, -1
+ object_event 2, 4, SPRITE_ROCKER, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, PAL_NPC_BLUE, OBJECTTYPE_TRAINER, 1, TrainerBoarderDouglas, -1
+ object_event 7, 15, SPRITE_GYM_GUY, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, PAL_NPC_RED, OBJECTTYPE_SCRIPT, 0, MahoganyGymGuyScript, -1
diff --git a/maps/MahoganyPokecenter1F.asm b/maps/MahoganyPokecenter1F.asm
new file mode 100644
index 00000000..caad5e04
--- /dev/null
+++ b/maps/MahoganyPokecenter1F.asm
@@ -0,0 +1,70 @@
+ const_def 2 ; object constants
+ const MAHOGANYPOKECENTER1F_NURSE
+ const MAHOGANYPOKECENTER1F_POKEFAN_M
+ const MAHOGANYPOKECENTER1F_YOUNGSTER
+ const MAHOGANYPOKECENTER1F_COOLTRAINER_F
+
+MahoganyPokecenter1F_MapScripts:
+ db 0 ; scene scripts
+
+ db 0 ; callbacks
+
+MahoganyPokecenter1FNurseScript:
+ jumpstd pokecenternurse
+
+MahoganyPokecenter1FPokefanMScript:
+ jumptextfaceplayer MahoganyPokecenter1FPokefanMText
+
+MahoganyPokecenter1FYoungsterScript:
+ jumptextfaceplayer MahoganyPokecenter1FYoungsterText
+
+MahoganyPokecenter1FCooltrainerFScript:
+ jumptextfaceplayer MahoganyPokecenter1FCooltrainerFText
+
+MahoganyPokecenter1FPokefanMText:
+ text "What's this? TEAM"
+ line "ROCKET has come"
+ cont "back?"
+
+ para "I saw some men in"
+ line "black at LAKE OF"
+ cont "RAGE…"
+ done
+
+MahoganyPokecenter1FYoungsterText:
+ text "I stop my #MON"
+ line "from evolving too"
+ cont "early."
+
+ para "I make them learn"
+ line "certain moves be-"
+ cont "fore I let them"
+ cont "evolve."
+ done
+
+MahoganyPokecenter1FCooltrainerFText:
+ text "#MON do become"
+ line "stronger when they"
+
+ para "evolve, but they"
+ line "also learn moves"
+ cont "more slowly."
+ done
+
+MahoganyPokecenter1F_MapEvents:
+ db 0, 0 ; filler
+
+ db 3 ; warp events
+ warp_event 3, 7, MAHOGANY_TOWN, 4
+ warp_event 4, 7, MAHOGANY_TOWN, 4
+ warp_event 0, 7, POKECENTER_2F, 1
+
+ db 0 ; coord events
+
+ db 0 ; bg events
+
+ db 4 ; object events
+ object_event 3, 1, SPRITE_NURSE, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, OBJECTTYPE_SCRIPT, 0, MahoganyPokecenter1FNurseScript, -1
+ object_event 7, 2, SPRITE_POKEFAN_M, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, PAL_NPC_RED, OBJECTTYPE_SCRIPT, 0, MahoganyPokecenter1FPokefanMScript, -1
+ object_event 1, 3, SPRITE_YOUNGSTER, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, PAL_NPC_GREEN, OBJECTTYPE_SCRIPT, 0, MahoganyPokecenter1FYoungsterScript, -1
+ object_event 2, 3, SPRITE_COOLTRAINER_F, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, 0, OBJECTTYPE_SCRIPT, 0, MahoganyPokecenter1FCooltrainerFScript, -1
diff --git a/maps/MahoganyRedGyaradosSpeechHouse.asm b/maps/MahoganyRedGyaradosSpeechHouse.asm
new file mode 100644
index 00000000..5984c89f
--- /dev/null
+++ b/maps/MahoganyRedGyaradosSpeechHouse.asm
@@ -0,0 +1,76 @@
+ const_def 2 ; object constants
+ const MAHOGANYREDGYARADOSSPEECHHOUSE_BLACK_BELT
+ const MAHOGANYREDGYARADOSSPEECHHOUSE_TEACHER
+
+MahoganyRedGyaradosSpeechHouse_MapScripts:
+ db 0 ; scene scripts
+
+ db 0 ; callbacks
+
+MahoganyRedGyaradosSpeechHouseBlackBeltScript:
+ jumptextfaceplayer MahoganyRedGyaradosSpeechHouseBlackBeltText
+
+MahoganyRedGyaradosSpeechHouseTeacherScript:
+ faceplayer
+ opentext
+ checkflag ENGINE_ROCKETS_IN_RADIO_TOWER
+ iftrue .RocketsInRadioTower
+ writetext MahoganyRedGyaradosSpeechHouseTeacherText
+ waitbutton
+ closetext
+ end
+
+.RocketsInRadioTower:
+ writetext MahoganyRedGyaradosSpeechHouseTeacherText_RocketsInRadioTower
+ waitbutton
+ closetext
+ end
+
+MahoganyRedGyaradosSpeechHouseUnusedBookshelf1:
+; unused
+ jumpstd picturebookshelf
+
+MahoganyRedGyaradosSpeechHouseUnusedBookshelf2:
+; unused
+ jumpstd magazinebookshelf
+
+MahoganyRedGyaradosSpeechHouseBlackBeltText:
+ text "I heard that a red"
+ line "GYARADOS appeared"
+ cont "at the LAKE."
+
+ para "That's odd, since"
+ line "even ordinary"
+
+ para "GYARADOS are rare"
+ line "in that lake…"
+ done
+
+MahoganyRedGyaradosSpeechHouseTeacherText:
+ text "My favorite radio"
+ line "program? I'd say"
+ cont "#MON MUSIC."
+ done
+
+MahoganyRedGyaradosSpeechHouseTeacherText_RocketsInRadioTower:
+ text "I've been hearing"
+ line "laughter on the"
+
+ para "radio…"
+ line "It's creepy."
+ done
+
+MahoganyRedGyaradosSpeechHouse_MapEvents:
+ db 0, 0 ; filler
+
+ db 2 ; warp events
+ warp_event 2, 7, MAHOGANY_TOWN, 2
+ warp_event 3, 7, MAHOGANY_TOWN, 2
+
+ db 0 ; coord events
+
+ db 0 ; bg events
+
+ db 2 ; object events
+ object_event 2, 3, SPRITE_BLACK_BELT, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, OBJECTTYPE_SCRIPT, 0, MahoganyRedGyaradosSpeechHouseBlackBeltScript, -1
+ object_event 6, 5, SPRITE_TEACHER, SPRITEMOVEDATA_WALK_UP_DOWN, 0, 1, -1, -1, PAL_NPC_BLUE, OBJECTTYPE_SCRIPT, 0, MahoganyRedGyaradosSpeechHouseTeacherScript, -1
diff --git a/maps/OlivineCafe.asm b/maps/OlivineCafe.asm
new file mode 100644
index 00000000..41ae1b43
--- /dev/null
+++ b/maps/OlivineCafe.asm
@@ -0,0 +1,88 @@
+ const_def 2 ; object constants
+ const OLIVINECAFE_SAILOR1
+ const OLIVINECAFE_FISHING_GURU
+ const OLIVINECAFE_SAILOR2
+
+OlivineCafe_MapScripts:
+ db 0 ; scene scripts
+
+ db 0 ; callbacks
+
+OlivineCafeStrengthSailorScript:
+ faceplayer
+ opentext
+ checkevent EVENT_GOT_HM04_STRENGTH
+ iftrue .GotStrength
+ writetext OlivineCafeStrengthSailorText
+ buttonsound
+ verbosegiveitem HM_STRENGTH
+ setevent EVENT_GOT_HM04_STRENGTH
+.GotStrength:
+ writetext OlivineCafeStrengthSailorText_GotStrength
+ waitbutton
+ closetext
+ end
+
+OlivineCafeFishingGuruScript:
+ jumptextfaceplayer OlivineCafeFishingGuruText
+
+OlivineCafeStrengthSailorText:
+ text "Hah! Your #MON"
+ line "sure look like"
+ cont "lightweights!"
+
+ para "They don't have"
+ line "the power to move"
+ cont "boulders aside."
+
+ para "Here, use this"
+ line "and teach them"
+ cont "STRENGTH!"
+
+ para "You'll need"
+ line "GOLDENROD's GYM"
+
+ para "BADGE to use that"
+ line "outside battles."
+ done
+
+OlivineCafeStrengthSailorText_GotStrength:
+ text "On the sea, the"
+ line "only thing you can"
+
+ para "count on is your"
+ line "own good self!"
+
+ para "I'm so proud of my"
+ line "buff bod!"
+ done
+
+OlivineCafeFishingGuruText:
+ text "Crossing the sea?"
+ line "Then listen up!"
+
+ para "There are whirl-"
+ line "pools on the way"
+ cont "to CIANWOOD."
+
+ para "Your #MON must"
+ line "know a special"
+
+ para "move to get over"
+ line "the whirlpools."
+ done
+
+OlivineCafe_MapEvents:
+ db 0, 0 ; filler
+
+ db 2 ; warp events
+ warp_event 2, 7, OLIVINE_CITY, 7
+ warp_event 3, 7, OLIVINE_CITY, 7
+
+ db 0 ; coord events
+
+ db 0 ; bg events
+
+ db 2 ; object events
+ object_event 4, 3, SPRITE_SAILOR, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, 0, OBJECTTYPE_SCRIPT, 0, OlivineCafeStrengthSailorScript, -1
+ object_event 1, 5, SPRITE_FISHING_GURU, SPRITEMOVEDATA_WALK_UP_DOWN, 0, 1, -1, -1, 0, OBJECTTYPE_SCRIPT, 0, OlivineCafeFishingGuruScript, -1
diff --git a/maps/OlivineGoodRodHouse.asm b/maps/OlivineGoodRodHouse.asm
new file mode 100644
index 00000000..67acb021
--- /dev/null
+++ b/maps/OlivineGoodRodHouse.asm
@@ -0,0 +1,95 @@
+ const_def 2 ; object constants
+ const OLIVINEGOODRODHOUSE_FISHING_GURU
+
+OlivineGoodRodHouse_MapScripts:
+ db 0 ; scene scripts
+
+ db 0 ; callbacks
+
+GoodRodGuru:
+ faceplayer
+ opentext
+ checkevent EVENT_GOT_GOOD_ROD
+ iftrue .AlreadyGotItem
+ writetext OfferGoodRodText
+ yesorno
+ iffalse .DontWantIt
+ writetext GiveGoodRodText
+ buttonsound
+ verbosegiveitem GOOD_ROD
+ writetext GaveGoodRodText
+ waitbutton
+ closetext
+ setevent EVENT_GOT_GOOD_ROD
+ end
+
+.DontWantIt:
+ writetext DontWantGoodRodText
+ waitbutton
+ closetext
+ end
+
+.AlreadyGotItem:
+ writetext HaveGoodRodText
+ waitbutton
+ closetext
+ end
+
+GoodRodHouseBookshelf:
+; unused
+ jumpstd picturebookshelf
+
+OfferGoodRodText:
+ text "OLIVINE is on the"
+ line "sea!"
+
+ para "And if it's on the"
+ line "sea, there are"
+ cont "bound to be fish!"
+
+ para "I've fished here"
+ line "for 30 years."
+
+ para "Would you like to"
+ line "face the sea and"
+ cont "fish?"
+ done
+
+GiveGoodRodText:
+ text "Ah, hahah!"
+ line "We have ourselves"
+ cont "a new angler!"
+ done
+
+GaveGoodRodText:
+ text "Fish aren't found"
+ line "in the sea alone."
+
+ para "They go wherever"
+ line "there is water."
+ done
+
+DontWantGoodRodText:
+ text "Whaaat? You don't"
+ line "like to fish!?"
+ cont "Incomprehensible!"
+ done
+
+HaveGoodRodText:
+ text "How are things?"
+ line "Land the big one?"
+ done
+
+OlivineGoodRodHouse_MapEvents:
+ db 0, 0 ; filler
+
+ db 2 ; warp events
+ warp_event 2, 7, OLIVINE_CITY, 6
+ warp_event 3, 7, OLIVINE_CITY, 6
+
+ db 0 ; coord events
+
+ db 0 ; bg events
+
+ db 1 ; object events
+ object_event 2, 3, SPRITE_FISHING_GURU, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, PAL_NPC_GREEN, OBJECTTYPE_SCRIPT, 0, GoodRodGuru, -1
diff --git a/maps/OlivineGym.asm b/maps/OlivineGym.asm
new file mode 100644
index 00000000..536d3c6e
--- /dev/null
+++ b/maps/OlivineGym.asm
@@ -0,0 +1,213 @@
+ const_def 2 ; object constants
+ const OLIVINEGYM_JASMINE
+ const OLIVINEGYM_GYM_GUY
+
+OlivineGym_MapScripts:
+ db 0 ; scene scripts
+
+ db 0 ; callbacks
+
+OlivineGymJasmineScript:
+ faceplayer
+ opentext
+ checkevent EVENT_BEAT_JASMINE
+ iftrue .FightDone
+ writetext Jasmine_SteelTypeIntro
+ waitbutton
+ closetext
+ winlosstext Jasmine_BetterTrainer, 0
+ loadtrainer JASMINE, JASMINE1
+ startbattle
+ reloadmapafterbattle
+ setevent EVENT_BEAT_JASMINE
+ opentext
+ writetext Text_ReceivedMineralBadge
+ playsound SFX_GET_BADGE
+ waitsfx
+ setflag ENGINE_MINERALBADGE
+ checkcode VAR_BADGES
+ scall OlivineGymActivateRockets
+.FightDone:
+ checkevent EVENT_GOT_TM23_IRON_TAIL
+ iftrue .GotIronTail
+ writetext Jasmine_BadgeSpeech
+ buttonsound
+ verbosegiveitem TM_IRON_TAIL
+ iffalse .NoRoomForIronTail
+ setevent EVENT_GOT_TM23_IRON_TAIL
+ writetext Jasmine_IronTailSpeech
+ waitbutton
+ closetext
+ end
+
+.GotIronTail:
+ writetext Jasmine_GoodLuck
+ waitbutton
+.NoRoomForIronTail:
+ closetext
+ end
+
+OlivineGymActivateRockets:
+ ifequal 7, .RadioTowerRockets
+ ifequal 6, .GoldenrodRockets
+ end
+
+.GoldenrodRockets:
+ jumpstd goldenrodrockets
+
+.RadioTowerRockets:
+ jumpstd radiotowerrockets
+
+OlivineGymGuyScript:
+ faceplayer
+ checkevent EVENT_BEAT_JASMINE
+ iftrue .OlivineGymGuyWinScript
+ checkevent EVENT_JASMINE_RETURNED_TO_GYM
+ iffalse .OlivineGymGuyPreScript
+ opentext
+ writetext OlivineGymGuyText
+ waitbutton
+ closetext
+ end
+
+.OlivineGymGuyWinScript:
+ opentext
+ writetext OlivineGymGuyWinText
+ waitbutton
+ closetext
+ end
+
+.OlivineGymGuyPreScript:
+ opentext
+ writetext OlivineGymGuyPreText
+ waitbutton
+ closetext
+ end
+
+OlivineGymStatue:
+ checkflag ENGINE_MINERALBADGE
+ iftrue .Beaten
+ jumpstd gymstatue1
+.Beaten:
+ trainertotext JASMINE, JASMINE1, MEM_BUFFER_1
+ jumpstd gymstatue2
+
+Jasmine_SteelTypeIntro:
+ text "…Thank you for"
+ line "your help at the"
+ cont "LIGHTHOUSE…"
+
+ para "But this is dif-"
+ line "ferent. Please"
+
+ para "allow me to intro-"
+ line "duce myself."
+
+ para "I am JASMINE, a"
+ line "GYM LEADER. I use"
+ cont "the steel-type."
+
+ para "…Do you know about"
+ line "the steel-type?"
+
+ para "It's a type that"
+ line "was only recently"
+ cont "discovered."
+
+ para "…Um… May I begin?"
+ done
+
+Jasmine_BetterTrainer:
+ text "…You are a better"
+ line "trainer than me,"
+
+ para "in both skill and"
+ line "kindness."
+
+ para "In accordance with"
+ line "LEAGUE rules, I"
+
+ para "confer upon you"
+ line "this BADGE."
+ done
+
+Text_ReceivedMineralBadge:
+ text "<PLAYER> received"
+ line "MINERALBADGE."
+ done
+
+Jasmine_BadgeSpeech:
+ text "MINERALBADGE"
+ line "raises #MON's"
+ cont "DEFENSE."
+
+ para "…Um… Please take"
+ line "this too…"
+ done
+
+Text_ReceivedTM09:
+ text "<PLAYER> received"
+ line "TM09."
+ done
+
+Jasmine_IronTailSpeech:
+ text "…You could use"
+ line "that TM to teach"
+ cont "IRON TAIL."
+ done
+
+Jasmine_GoodLuck:
+ text "Um… I don't know"
+ line "how to say this,"
+ cont "but good luck…"
+ done
+
+OlivineGymGuyText:
+ text "JASMINE uses the"
+ line "newly discovered"
+ cont "steel-type."
+
+ para "I don't know very"
+ line "much about it."
+ done
+
+OlivineGymGuyWinText:
+ text "That was awesome."
+
+ para "The steel-type,"
+ line "huh?"
+
+ para "That was a close"
+ line "encounter of an"
+ cont "unknown kind!"
+ done
+
+OlivineGymGuyPreText:
+ text "JASMINE, the GYM"
+ line "LEADER, is at the"
+ cont "LIGHTHOUSE."
+
+ para "She's been tending"
+ line "to a sick #MON."
+
+ para "A strong trainer"
+ line "has to be compas-"
+ cont "sionate."
+ done
+
+OlivineGym_MapEvents:
+ db 0, 0 ; filler
+
+ db 2 ; warp events
+ warp_event 4, 15, OLIVINE_CITY, 2
+ warp_event 5, 15, OLIVINE_CITY, 2
+
+ db 0 ; coord events
+
+ db 2 ; bg events
+ bg_event 3, 13, BGEVENT_READ, OlivineGymStatue
+ bg_event 6, 13, BGEVENT_READ, OlivineGymStatue
+
+ db 2 ; object events
+ object_event 5, 3, SPRITE_JASMINE, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, PAL_NPC_RED, OBJECTTYPE_SCRIPT, 0, OlivineGymJasmineScript, EVENT_OLIVINE_GYM_JASMINE
+ object_event 7, 13, SPRITE_GYM_GUY, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, PAL_NPC_RED, OBJECTTYPE_SCRIPT, 0, OlivineGymGuyScript, -1
diff --git a/maps/OlivineHouseBeta.asm b/maps/OlivineHouseBeta.asm
new file mode 100644
index 00000000..2570de37
--- /dev/null
+++ b/maps/OlivineHouseBeta.asm
@@ -0,0 +1,55 @@
+ const_def 2 ; object constants
+ const OLIVINEHOUSEBETA_TEACHER
+ const OLIVINEHOUSEBETA_RHYDON
+
+OlivineHouseBeta_MapScripts:
+ db 0 ; scene scripts
+
+ db 0 ; callbacks
+
+OlivineHouseBetaTeacherScript:
+ jumptextfaceplayer OlivineHouseBetaTeacherText
+
+OlivineHouseBetaRhydonScript:
+ opentext
+ writetext OlivineHouseBetaRhydonText
+ cry RHYDON
+ waitbutton
+ closetext
+ end
+
+OlivineHouseBetaBookshelf1:
+ jumpstd picturebookshelf
+
+OlivineHouseBetaBookshelf2:
+ jumpstd magazinebookshelf
+
+OlivineHouseBetaTeacherText:
+ text "When my #MON"
+ line "got sick, the"
+
+ para "PHARMACIST in"
+ line "ECRUTEAK made some"
+ cont "medicine for me."
+ done
+
+OlivineHouseBetaRhydonText:
+ text "RHYDON: Gugooh!"
+ done
+
+OlivineHouseBeta_MapEvents:
+ db 0, 0 ; filler
+
+ db 2 ; warp events
+ warp_event 2, 7, OLIVINE_CITY, 4
+ warp_event 3, 7, OLIVINE_CITY, 4
+
+ db 0 ; coord events
+
+ db 2 ; bg events
+ bg_event 0, 1, BGEVENT_READ, OlivineHouseBetaBookshelf1
+ bg_event 1, 1, BGEVENT_READ, OlivineHouseBetaBookshelf2
+
+ db 2 ; object events
+ object_event 2, 3, SPRITE_TEACHER, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, 0, OBJECTTYPE_SCRIPT, 0, OlivineHouseBetaTeacherScript, -1
+ object_event 6, 4, SPRITE_RHYDON, SPRITEMOVEDATA_WALK_UP_DOWN, 0, 2, -1, -1, 0, OBJECTTYPE_SCRIPT, 0, OlivineHouseBetaRhydonScript, -1
diff --git a/maps/OlivineMart.asm b/maps/OlivineMart.asm
new file mode 100644
index 00000000..f06aeebd
--- /dev/null
+++ b/maps/OlivineMart.asm
@@ -0,0 +1,60 @@
+ const_def 2 ; object constants
+ const OLIVINEMART_CLERK
+ const OLIVINEMART_COOLTRAINER_F
+ const OLIVINEMART_LASS
+
+OlivineMart_MapScripts:
+ db 0 ; scene scripts
+
+ db 0 ; callbacks
+
+OlivineMartClerkScript:
+ opentext
+ pokemart MARTTYPE_STANDARD, MART_OLIVINE
+ closetext
+ end
+
+OlivineMartCooltrainerFScript:
+ jumptextfaceplayer OlivineMartCooltrainerFText
+
+OlivineMartLassScript:
+ jumptextfaceplayer OlivineMartLassText
+
+OlivineMartCooltrainerFText:
+ text "Do your #MON"
+ line "already know the"
+
+ para "move for carrying"
+ line "people on water?"
+ done
+
+OlivineMartLassText:
+ text "My BUTTERFREE came"
+ line "from my boyfriend"
+ cont "overseas."
+
+ para "It carried some"
+ line "MAIL from him."
+
+ para "Want to know what"
+ line "it says?"
+
+ para "Let's see… Nope!"
+ line "It's a secret!"
+ done
+
+OlivineMart_MapEvents:
+ db 0, 0 ; filler
+
+ db 2 ; warp events
+ warp_event 2, 7, OLIVINE_CITY, 8
+ warp_event 3, 7, OLIVINE_CITY, 8
+
+ db 0 ; coord events
+
+ db 0 ; bg events
+
+ db 3 ; object events
+ object_event 1, 3, SPRITE_CLERK, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, OBJECTTYPE_SCRIPT, 0, OlivineMartClerkScript, -1
+ object_event 6, 2, SPRITE_COOLTRAINER_F, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 2, 0, -1, -1, PAL_NPC_GREEN, OBJECTTYPE_SCRIPT, 0, OlivineMartCooltrainerFScript, -1
+ object_event 1, 6, SPRITE_LASS, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, 0, OBJECTTYPE_SCRIPT, 0, OlivineMartLassScript, -1
diff --git a/maps/OlivinePokecenter1F.asm b/maps/OlivinePokecenter1F.asm
new file mode 100644
index 00000000..7ef22925
--- /dev/null
+++ b/maps/OlivinePokecenter1F.asm
@@ -0,0 +1,61 @@
+ const_def 2 ; object constants
+ const OLIVINEPOKECENTER1F_NURSE
+ const OLIVINEPOKECENTER1F_FISHING_GURU
+ const OLIVINEPOKECENTER1F_FISHER
+ const OLIVINEPOKECENTER1F_TEACHER
+
+OlivinePokecenter1F_MapScripts:
+ db 0 ; scene scripts
+
+ db 0 ; callbacks
+
+OlivinePokecenter1FNurseScript:
+ jumpstd pokecenternurse
+
+OlivinePokecenter1FFishingGuruScript:
+ jumpstd happinesschecknpc
+
+OlivinePokecenter1FFisherScript:
+ jumptextfaceplayer OlivinePokecenter1FFisherText
+
+OlivinePokecenter1FTeacherScript:
+ jumptextfaceplayer OlivinePokecenter1FTeacherText
+
+OlivinePokecenter1FFisherText:
+ text "Sailors are really"
+ line "generous."
+
+ para "One taught my"
+ line "#MON STRENGTH."
+
+ para "Now it can move"
+ line "big boulders."
+ done
+
+OlivinePokecenter1FTeacherText:
+ text "There's a person"
+ line "in CIANWOOD CITY"
+ cont "across the sea."
+
+ para "I heard him brag-"
+ line "ging about his"
+ cont "rare #MON."
+ done
+
+OlivinePokecenter1F_MapEvents:
+ db 0, 0 ; filler
+
+ db 3 ; warp events
+ warp_event 3, 7, OLIVINE_CITY, 1
+ warp_event 4, 7, OLIVINE_CITY, 1
+ warp_event 0, 7, POKECENTER_2F, 1
+
+ db 0 ; coord events
+
+ db 0 ; bg events
+
+ db 4 ; object events
+ object_event 3, 1, SPRITE_NURSE, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, OBJECTTYPE_SCRIPT, 0, OlivinePokecenter1FNurseScript, -1
+ object_event 8, 4, SPRITE_FISHING_GURU, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 1, 0, -1, -1, 0, OBJECTTYPE_SCRIPT, 0, OlivinePokecenter1FFishingGuruScript, -1
+ object_event 2, 3, SPRITE_FISHER, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, PAL_NPC_GREEN, OBJECTTYPE_SCRIPT, 0, OlivinePokecenter1FFisherScript, -1
+ object_event 7, 1, SPRITE_TEACHER, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, OBJECTTYPE_SCRIPT, 0, OlivinePokecenter1FTeacherScript, -1
diff --git a/maps/OlivinePunishmentSpeechHouse.asm b/maps/OlivinePunishmentSpeechHouse.asm
new file mode 100644
index 00000000..e590f158
--- /dev/null
+++ b/maps/OlivinePunishmentSpeechHouse.asm
@@ -0,0 +1,55 @@
+ const_def 2 ; object constants
+ const OLIVINEPUNISHMENTSPEECHHOUSE_POKEFAN_M
+ const OLIVINEPUNISHMENTSPEECHHOUSE_LASS
+
+OlivinePunishmentSpeechHouse_MapScripts:
+ db 0 ; scene scripts
+
+ db 0 ; callbacks
+
+OlivinePunishmentSpeechHouseDad:
+ jumptextfaceplayer OlivinePunishmentSpeechHouseDadText
+
+OlivinePunishmentSpeechHouseDaughter:
+ jumptextfaceplayer OlivinePunishmentSpeechHouseDaughterText
+
+OlivinePunishmentSpeechHouseBookshelf2:
+ jumpstd picturebookshelf
+
+OlivinePunishmentSpeechHouseBookshelf1:
+ jumpstd magazinebookshelf
+
+OlivinePunishmentSpeechHouseDadText:
+ text "Along the way to"
+ line "CIANWOOD, there"
+
+ para "are four deserted"
+ line "islands."
+
+ para "Bad kids are taken"
+ line "to the islands as"
+ cont "punishment!"
+ done
+
+OlivinePunishmentSpeechHouseDaughterText:
+ text "Whenever I get in"
+ line "trouble, Daddy"
+ cont "always scares me."
+ done
+
+OlivinePunishmentSpeechHouse_MapEvents:
+ db 0, 0 ; filler
+
+ db 2 ; warp events
+ warp_event 2, 7, OLIVINE_CITY, 5
+ warp_event 3, 7, OLIVINE_CITY, 5
+
+ db 0 ; coord events
+
+ db 2 ; bg events
+ bg_event 0, 1, BGEVENT_READ, OlivinePunishmentSpeechHouseBookshelf1
+ bg_event 1, 1, BGEVENT_READ, OlivinePunishmentSpeechHouseBookshelf2
+
+ db 2 ; object events
+ object_event 1, 2, SPRITE_POKEFAN_M, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, 0, OBJECTTYPE_SCRIPT, 0, OlivinePunishmentSpeechHouseDad, -1
+ object_event 5, 5, SPRITE_LASS, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 2, 0, -1, -1, 0, OBJECTTYPE_SCRIPT, 0, OlivinePunishmentSpeechHouseDaughter, -1
diff --git a/maps/OlivineTimsHouse.asm b/maps/OlivineTimsHouse.asm
new file mode 100644
index 00000000..60263cf3
--- /dev/null
+++ b/maps/OlivineTimsHouse.asm
@@ -0,0 +1,34 @@
+ const_def 2 ; object constants
+ const OLIVINETIMSHOUSE_TIM
+
+OlivineTimsHouse_MapScripts:
+ db 0 ; scene scripts
+
+ db 0 ; callbacks
+
+Tim:
+ faceplayer
+ opentext
+ trade NPC_TRADE_TIM
+ waitbutton
+ closetext
+ end
+
+TimsHouseBookshelf:
+ jumpstd magazinebookshelf
+
+OlivineTimsHouse_MapEvents:
+ db 0, 0 ; filler
+
+ db 2 ; warp events
+ warp_event 2, 7, OLIVINE_CITY, 3
+ warp_event 3, 7, OLIVINE_CITY, 3
+
+ db 0 ; coord events
+
+ db 2 ; bg events
+ bg_event 0, 1, BGEVENT_READ, TimsHouseBookshelf
+ bg_event 1, 1, BGEVENT_READ, TimsHouseBookshelf
+
+ db 1 ; object events
+ object_event 2, 3, SPRITE_FISHING_GURU, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, PAL_NPC_RED, OBJECTTYPE_SCRIPT, 0, Tim, -1
diff --git a/maps/Route38EcruteakGate.asm b/maps/Route38EcruteakGate.asm
new file mode 100644
index 00000000..2277c3a1
--- /dev/null
+++ b/maps/Route38EcruteakGate.asm
@@ -0,0 +1,39 @@
+ const_def 2 ; object constants
+ const ROUTE38ECRUTEAKGATE_OFFICER
+
+Route38EcruteakGate_MapScripts:
+ db 0 ; scene scripts
+
+ db 0 ; callbacks
+
+Route38EcruteakGateOfficerScript:
+ jumptextfaceplayer Route38EcruteakGateOfficerText
+
+Route38EcruteakGateOfficerText:
+ text "Where did you say"
+ line "you're from?"
+
+ para "NEW BARK TOWN?"
+
+ para "PROF.ELM lives"
+ line "over there, right?"
+
+ para "You've come a long"
+ line "way to get here."
+ done
+
+Route38EcruteakGate_MapEvents:
+ db 0, 0 ; filler
+
+ db 4 ; warp events
+ warp_event 0, 4, ROUTE_38, 1
+ warp_event 0, 5, ROUTE_38, 2
+ warp_event 9, 4, ECRUTEAK_CITY, 14
+ warp_event 9, 5, ECRUTEAK_CITY, 15
+
+ db 0 ; coord events
+
+ db 0 ; bg events
+
+ db 1 ; object events
+ object_event 5, 2, SPRITE_OFFICER, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, PAL_NPC_RED, OBJECTTYPE_SCRIPT, 0, Route38EcruteakGateOfficerScript, -1
diff --git a/maps/Route39Barn.asm b/maps/Route39Barn.asm
new file mode 100644
index 00000000..96bb784b
--- /dev/null
+++ b/maps/Route39Barn.asm
@@ -0,0 +1,203 @@
+ const_def 2 ; object constants
+ const ROUTE39BARN_TWIN1
+ const ROUTE39BARN_TWIN2
+ const ROUTE39BARN_MOOMOO
+
+Route39Barn_MapScripts:
+ db 0 ; scene scripts
+
+ db 0 ; callbacks
+
+Route39BarnTwin1Script:
+ faceplayer
+ opentext
+ checkevent EVENT_HEALED_MOOMOO
+ iftrue .FeedingMooMoo
+ writetext Route39BarnTwinMoomooIsSickText
+ waitbutton
+ closetext
+ turnobject ROUTE39BARN_TWIN1, RIGHT
+ end
+
+.FeedingMooMoo:
+ writetext Route39BarnTwinWereFeedingMoomooText
+ waitbutton
+ closetext
+ turnobject ROUTE39BARN_TWIN1, RIGHT
+ end
+
+Route39BarnTwin2Script:
+ faceplayer
+ opentext
+ checkevent EVENT_HEALED_MOOMOO
+ iftrue .FeedingMooMoo
+ writetext Route39BarnTwinMoomooIsSickText
+ waitbutton
+ closetext
+ turnobject ROUTE39BARN_TWIN2, LEFT
+ end
+
+.FeedingMooMoo:
+ writetext Route39BarnTwinWereFeedingMoomooText
+ waitbutton
+ closetext
+ turnobject ROUTE39BARN_TWIN2, LEFT
+ end
+
+MoomooScript:
+ opentext
+ checkevent EVENT_HEALED_MOOMOO
+ iftrue .HappyCow
+ writetext MoomooWeakMooText
+ writebyte MILTANK
+ special PlaySlowCry
+ buttonsound
+ writetext Route39BarnItsCryIsWeakText
+ checkevent EVENT_TALKED_TO_FARMER_ABOUT_MOOMOO
+ iftrue .GiveBerry
+ waitbutton
+ closetext
+ end
+
+.GiveBerry:
+ buttonsound
+ writetext Route39BarnAskGiveBerryText
+ yesorno
+ iffalse .Refused
+ checkitem BERRY
+ iffalse .NoBerriesInBag
+ takeitem BERRY
+ copybytetovar wMooMooBerries
+ addvar 1
+ copyvartobyte wMooMooBerries
+ ifequal 3, .ThreeBerries
+ ifequal 5, .FiveBerries
+ ifequal 7, .SevenBerries
+ writetext Route39BarnGaveBerryText
+ waitbutton
+ closetext
+ end
+
+.ThreeBerries:
+ writetext Route39BarnGaveBerryText
+ buttonsound
+ writetext Route39BarnLittleHealthierText
+ waitbutton
+ closetext
+ end
+
+.FiveBerries:
+ writetext Route39BarnGaveBerryText
+ buttonsound
+ writetext Route39BarnQuiteHealthyText
+ waitbutton
+ closetext
+ end
+
+.SevenBerries:
+ playmusic MUSIC_HEAL
+ writetext Route39BarnGaveBerryText
+ pause 60
+ buttonsound
+ special RestartMapMusic
+ writetext Route39BarnTotallyHealthyText
+ waitbutton
+ closetext
+ setevent EVENT_HEALED_MOOMOO
+ end
+
+.NoBerriesInBag:
+ writetext Route39BarnNoBerriesText
+ waitbutton
+ closetext
+ end
+
+.Refused:
+ writetext Route39BarnRefusedBerryText
+ waitbutton
+ closetext
+ end
+
+.HappyCow:
+ writetext MoomooHappyMooText
+ cry MILTANK
+ waitbutton
+ closetext
+ end
+
+Route39BarnTwinMoomooIsSickText:
+ text "MOOMOO is sick…"
+
+ para "She needs lots of"
+ line "BERRIES."
+ done
+
+Route39BarnTwinWereFeedingMoomooText:
+ text "We're feeding"
+ line "MOOMOO!"
+ done
+
+MoomooWeakMooText:
+ text "MILTANK: …Moo…"
+ done
+
+Route39BarnItsCryIsWeakText:
+ text "Its cry is weak…"
+ done
+
+MoomooHappyMooText:
+ text "MILTANK: MOO!"
+ done
+
+Route39BarnAskGiveBerryText:
+ text "Give a BERRY to"
+ line "MILTANK?"
+ done
+
+Route39BarnGaveBerryText:
+ text "<PLAYER> gave a"
+ line "BERRY to MILTANK."
+ done
+
+Route39BarnLittleHealthierText:
+ text "MILTANK became a"
+ line "little healthier!"
+ done
+
+Route39BarnQuiteHealthyText:
+ text "MILTANK became"
+ line "quite healthy!"
+ done
+
+Route39BarnTotallyHealthyText:
+ text "MILTANK became"
+ line "totally healthy!"
+ done
+
+Route39BarnNoBerriesText:
+ text "<PLAYER> has no"
+ line "BERRIES…"
+ done
+
+Route39BarnRefusedBerryText:
+ text "<PLAYER> wouldn't"
+ line "give a BERRY."
+
+ para "MILTANK looks sad."
+ done
+
+Route39Barn_MapEvents:
+ db 0, 0 ; filler
+
+ db 2 ; warp events
+ warp_event 3, 7, ROUTE_39, 1
+ warp_event 4, 7, ROUTE_39, 1
+
+ db 0 ; coord events
+
+ db 0 ; bg events
+
+ db 3 ; object events
+ object_event 2, 3, SPRITE_TWIN, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, OBJECTTYPE_SCRIPT, 0, Route39BarnTwin1Script, -1
+ object_event 4, 3, SPRITE_TWIN, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, PAL_NPC_GREEN, OBJECTTYPE_SCRIPT, 0, Route39BarnTwin2Script, -1
+ object_event 3, 3, SPRITE_TAUROS, SPRITEMOVEDATA_POKEMON, 0, 0, -1, -1, 0, OBJECTTYPE_SCRIPT, 0, MoomooScript, -1
diff --git a/maps/Route39Farmhouse.asm b/maps/Route39Farmhouse.asm
new file mode 100644
index 00000000..7d93f943
--- /dev/null
+++ b/maps/Route39Farmhouse.asm
@@ -0,0 +1,208 @@
+ const_def 2 ; object constants
+ const ROUTE39FARMHOUSE_POKEFAN_M
+ const ROUTE39FARMHOUSE_POKEFAN_F
+
+Route39Farmhouse_MapScripts:
+ db 0 ; scene scripts
+
+ db 0 ; callbacks
+
+PokefanM_DairyFarmer:
+ faceplayer
+ opentext
+ checkevent EVENT_HEALED_MOOMOO
+ iftrue FarmerMScript_SellMilk
+ writetext FarmerMText_SickCow
+ waitbutton
+ closetext
+ setevent EVENT_TALKED_TO_FARMER_ABOUT_MOOMOO
+ end
+
+FarmerMScript_SellMilk:
+ checkitem MOOMOO_MILK
+ iftrue FarmerMScript_Milking
+ writetext FarmerMText_BuyMilk
+ special PlaceMoneyTopRight
+ yesorno
+ iffalse FarmerMScript_NoSale
+ checkmoney YOUR_MONEY, 500
+ ifequal HAVE_LESS, FarmerMScript_NoMoney
+ giveitem MOOMOO_MILK
+ iffalse FarmerMScript_NoRoom
+ takemoney YOUR_MONEY, 500
+ special PlaceMoneyTopRight
+ waitsfx
+ playsound SFX_TRANSACTION
+ writetext FarmerMText_GotMilk
+ buttonsound
+ itemnotify
+ closetext
+ end
+
+FarmerMScript_NoMoney:
+ writetext FarmerMText_NoMoney
+ waitbutton
+ closetext
+ end
+
+FarmerMScript_NoRoom:
+ writetext FarmerMText_NoRoom
+ waitbutton
+ closetext
+ end
+
+FarmerMScript_NoSale:
+ writetext FarmerMText_NoSale
+ waitbutton
+ closetext
+ end
+
+FarmerMScript_Milking:
+ writetext FarmerMText_Milking
+ waitbutton
+ closetext
+ end
+
+PokefanF_SnoreFarmer:
+ faceplayer
+ opentext
+ checkevent EVENT_GOT_TM13_SNORE_FROM_MOOMOO_FARM
+ iftrue FarmerFScript_GotSnore
+ checkevent EVENT_HEALED_MOOMOO
+ iftrue FarmerFScript_GiveSnore
+ writetext FarmerFText_InTrouble
+ waitbutton
+ closetext
+ end
+
+FarmerFScript_GiveSnore:
+ writetext FarmerFText_HealedMiltank
+ buttonsound
+ verbosegiveitem TM_SNORE
+ iffalse FarmerFScript_NoRoomForSnore
+ setevent EVENT_GOT_TM13_SNORE_FROM_MOOMOO_FARM
+FarmerFScript_GotSnore:
+ writetext FarmerFText_SnoreSpeech
+ waitbutton
+FarmerFScript_NoRoomForSnore:
+ closetext
+ end
+
+FarmhouseBookshelf:
+ jumpstd picturebookshelf
+
+FarmerMText_SickCow:
+ text "My MILTANK ain't"
+ line "givin' me milk"
+ cont "nomore."
+
+ para "This here FARM's"
+ line "got famous milk."
+
+ para "Most everyone"
+ line "wants a drink."
+
+ para "It'll give me lots"
+ line "o' milk if'n I"
+
+ para "feed it lots o'"
+ line "BERRIES, I reckon."
+ done
+
+FarmerMText_BuyMilk:
+ text "How'd you like my"
+ line "MOOMOO MILK?"
+
+ para "It's my pride and"
+ line "joy, son."
+
+ para "Give it to #MON"
+ line "to restore HP!"
+
+ para "I'll give it to ya"
+ line "fer just ¥500."
+ done
+
+FarmerMText_GotMilk:
+ text "Here ya go!"
+ line "Drink up'n enjoy!"
+ done
+
+FarmerMText_NoMoney:
+ text "Sorry, son."
+ line "No cash, no sale!"
+ done
+
+FarmerMText_NoRoom:
+ text "I reckon yer"
+ line "PACK's full, son."
+ done
+
+FarmerMText_NoSale:
+ text "You don't want it?"
+ line "Come again, hear?"
+ done
+
+FarmerMText_Milking:
+ text "I best go do my"
+ line "milkin'."
+ done
+
+FarmerFText_InTrouble:
+ text "Our milk even goes"
+ line "out to KANTO."
+
+ para "So if our own"
+ line "MILTANK won't give"
+
+ para "us any milk, we're"
+ line "in trouble."
+ done
+
+FarmerFText_HealedMiltank:
+ text "You fixed our"
+ line "MILTANK, hon. Now"
+
+ para "it gives MOOMOO"
+ line "MILK again."
+
+ para "Here's somethin'"
+ line "fer your trouble."
+ done
+
+Text_ReceivedTM13:
+ text "<PLAYER> received"
+ line "TM13."
+ done
+
+FarmerFText_SnoreSpeech:
+ text "That there's"
+ line "SNORE."
+
+ para "It's a rare move"
+ line "that only works"
+
+ para "while the #MON"
+ line "is asleep."
+
+ para "You best think how"
+ line "you ought to use"
+ cont "it, hon."
+ done
+
+Route39Farmhouse_MapEvents:
+ db 0, 0 ; filler
+
+ db 2 ; warp events
+ warp_event 2, 7, ROUTE_39, 2
+ warp_event 3, 7, ROUTE_39, 2
+
+ db 0 ; coord events
+
+ db 2 ; bg events
+ bg_event 0, 1, BGEVENT_READ, FarmhouseBookshelf
+ bg_event 1, 1, BGEVENT_READ, FarmhouseBookshelf
+
+ db 2 ; object events
+ object_event 3, 2, SPRITE_POKEFAN_M, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, PAL_NPC_BLUE, OBJECTTYPE_SCRIPT, 0, PokefanM_DairyFarmer, -1
+ object_event 5, 4, SPRITE_POKEFAN_F, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, PAL_NPC_BROWN, OBJECTTYPE_SCRIPT, 0, PokefanF_SnoreFarmer, -1
diff --git a/maps/Route42EcruteakGate.asm b/maps/Route42EcruteakGate.asm
new file mode 100644
index 00000000..577cf0a7
--- /dev/null
+++ b/maps/Route42EcruteakGate.asm
@@ -0,0 +1,34 @@
+ const_def 2 ; object constants
+ const ROUTE42ECRUTEAKGATE_OFFICER
+
+Route42EcruteakGate_MapScripts:
+ db 0 ; scene scripts
+
+ db 0 ; callbacks
+
+Route42EcruteakGateOfficerScript:
+ jumptextfaceplayer Route42EcruteakGateOfficerText
+
+Route42EcruteakGateOfficerText:
+ text "MOUNT MORTAR is"
+ line "like a maze."
+
+ para "Be careful. Don't"
+ line "get lost in there."
+ done
+
+Route42EcruteakGate_MapEvents:
+ db 0, 0 ; filler
+
+ db 4 ; warp events
+ warp_event 0, 4, ECRUTEAK_CITY, 1
+ warp_event 0, 5, ECRUTEAK_CITY, 2
+ warp_event 9, 4, ROUTE_42, 1
+ warp_event 9, 5, ROUTE_42, 2
+
+ db 0 ; coord events
+
+ db 0 ; bg events
+
+ db 1 ; object events
+ object_event 5, 2, SPRITE_OFFICER, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, PAL_NPC_RED, OBJECTTYPE_SCRIPT, 0, Route42EcruteakGateOfficerScript, -1
diff --git a/wram.asm b/wram.asm
index e969c211..4d8a3f21 100644
--- a/wram.asm
+++ b/wram.asm
@@ -3029,7 +3029,7 @@ wd6a3:: ds 1 ; d6a3
wd6a4:: ds 1 ; d6a4
wd6a5:: ds 1 ; d6a5
wd6a6:: ds 1 ; d6a6
-wd6a7:: ds 1 ; d6a7
+wMooMooBerries:: ds 1 ; d6a7
wUndergroundSwitchPositions:: ds 1 ; d6a8
wd6a9:: ds 1 ; d6a9
wd6aa:: ds 1 ; d6aa