summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--constants.asm1
-rw-r--r--constants/event_flags.asm2
-rw-r--r--constants/npc_trade_constants.asm45
-rw-r--r--main.asm12
-rw-r--r--maps/BillsHouse.asm366
-rw-r--r--maps/CeruleanGym.asm383
-rw-r--r--maps/CeruleanGymBadgeSpeechHouse.asm29
-rw-r--r--maps/CeruleanMart.asm60
-rw-r--r--maps/CeruleanPokecenter1F.asm57
-rw-r--r--maps/CeruleanPokecenter2FBeta.asm16
-rw-r--r--maps/CeruleanPoliceStation.asm58
-rw-r--r--maps/CeruleanTradeSpeechHouse.asm69
-rw-r--r--maps/PowerPlant.asm401
-rw-r--r--maps/Route10Pokecenter1F.asm97
-rw-r--r--maps/Route10Pokecenter2FBeta.asm16
15 files changed, 1610 insertions, 2 deletions
diff --git a/constants.asm b/constants.asm
index 0ad13aed..bb993a78 100644
--- a/constants.asm
+++ b/constants.asm
@@ -43,3 +43,4 @@ INCLUDE "constants/sprite_data_constants.asm"
INCLUDE "constants/serial_constants.asm"
INCLUDE "constants/menu_constants.asm"
INCLUDE "constants/scene_constants.asm"
+INCLUDE "constants/npc_trade_constants.asm"
diff --git a/constants/event_flags.asm b/constants/event_flags.asm
index f11f5bfb..f8b9f55a 100644
--- a/constants/event_flags.asm
+++ b/constants/event_flags.asm
@@ -2,7 +2,7 @@
const_def
; These first eight flags are reset upon reloading the map.
- const EVENT_GAVE_KURT_APRICORNS ; 000
+ const EVENT_TEMPORARY_UNTIL_MAP_RELOAD_1 ; 000
const EVENT_RECEIVED_BALLS_FROM_KURT
const EVENT_DRAGON_SHRINE_QUESTION_2
const EVENT_DRAGON_SHRINE_QUESTION_3
diff --git a/constants/npc_trade_constants.asm b/constants/npc_trade_constants.asm
new file mode 100644
index 00000000..f84db5df
--- /dev/null
+++ b/constants/npc_trade_constants.asm
@@ -0,0 +1,45 @@
+ ; npctrade struct members (see data/events/npc_trades.asm)
+NPCTRADE_DIALOG EQU 0 ; db
+NPCTRADE_GIVEMON EQU 1 ; db
+NPCTRADE_GETMON EQU 2 ; db
+NPCTRADE_NICK EQU 3 ; ds MON_NAME_LENGTH
+NPCTRADE_DVS EQU 14 ; dw
+NPCTRADE_ITEM EQU 16 ; db
+NPCTRADE_OT_ID EQU 17 ; dw
+NPCTRADE_OT_NAME EQU 19 ; ds NAME_LENGTH
+NPCTRADE_GENDER EQU 30 ; db
+NPCTRADE_PADDING EQU 31 ; db
+
+; NPCTrades indexes (see data/events/npc_trades.asm)
+ const_def
+ const NPC_TRADE_MIKE ; 0
+ const NPC_TRADE_KYLE ; 1
+ const NPC_TRADE_TIM ; 2
+ const NPC_TRADE_EMY ; 3
+ const NPC_TRADE_CHRIS ; 4
+ const NPC_TRADE_KIM ; 5
+ const NPC_TRADE_FOREST ; 6
+NUM_NPC_TRADES EQU const_value
+
+; trade gender limits
+ const_def
+ const TRADE_GENDER_EITHER
+ const TRADE_GENDER_MALE
+ const TRADE_GENDER_FEMALE
+
+; TradeTexts indexes (see engine/events/npc_trade.asm)
+
+; trade dialogs
+ const_def
+ const TRADE_DIALOG_INTRO
+ const TRADE_DIALOG_CANCEL
+ const TRADE_DIALOG_WRONG
+ const TRADE_DIALOG_COMPLETE
+ const TRADE_DIALOG_AFTER
+
+; trade dialog sets
+ const_def
+ const TRADE_DIALOGSET_COLLECTOR
+ const TRADE_DIALOGSET_HAPPY
+ const TRADE_DIALOGSET_NEWBIE
+ const TRADE_DIALOGSET_GIRL
diff --git a/main.asm b/main.asm
index 401ecaa7..b5ecb340 100644
--- a/main.asm
+++ b/main.asm
@@ -1595,7 +1595,17 @@ SECTION "bank53", ROMX, BANK[$53]
dr $14c000, $150000
SECTION "bank54", ROMX, BANK[$54]
- dr $150000, $154000
+INCLUDE "maps/CeruleanGymBadgeSpeechHouse.asm"
+INCLUDE "maps/CeruleanPoliceStation.asm"
+INCLUDE "maps/CeruleanTradeSpeechHouse.asm"
+INCLUDE "maps/CeruleanPokecenter1F.asm"
+INCLUDE "maps/CeruleanPokecenter2FBeta.asm"
+INCLUDE "maps/CeruleanGym.asm"
+INCLUDE "maps/CeruleanMart.asm"
+INCLUDE "maps/Route10Pokecenter1F.asm"
+INCLUDE "maps/Route10Pokecenter2FBeta.asm"
+INCLUDE "maps/PowerPlant.asm"
+INCLUDE "maps/BillsHouse.asm"
SECTION "bank55", ROMX, BANK[$55]
dr $154000, $158000
diff --git a/maps/BillsHouse.asm b/maps/BillsHouse.asm
new file mode 100644
index 00000000..ff83b797
--- /dev/null
+++ b/maps/BillsHouse.asm
@@ -0,0 +1,366 @@
+ const_def 2 ; object constants
+ const BILLSHOUSE_GRAMPS
+
+BillsHouse_MapScripts:
+ db 0 ; scene scripts
+
+ db 0 ; callbacks
+
+BillsGrandpa:
+ faceplayer
+ opentext
+ checkevent EVENT_TEMPORARY_UNTIL_MAP_RELOAD_1
+ iftrue .JustShowedSomething
+ checkevent EVENT_GOT_THUNDERSTONE_FROM_BILLS_GRANDPA
+ iftrue .GotThunderstone
+ checkevent EVENT_MET_BILLS_GRANDPA
+ iftrue .MetGrandpa
+ writetext BillsGrandpaIntroText
+ buttonsound
+ setevent EVENT_MET_BILLS_GRANDPA
+.MetGrandpa:
+ checkevent EVENT_SHOWED_PICHU_TO_BILLS_GRANDPA
+ iftrue .ShowedPichu
+ checkevent EVENT_SHOWED_GROWLITHE_VULPIX_TO_BILLS_GRANDPA
+ iftrue .ShowedGrowlitheVulpix
+ checkevent EVENT_SHOWED_STARYU_TO_BILLS_GRANDPA
+ iftrue .ShowedStaryu
+ checkevent EVENT_SHOWED_ODDISH_TO_BILLS_GRANDPA
+ iftrue .ShowedOddish
+ checkevent EVENT_SHOWED_LICKITUNG_TO_BILLS_GRANDPA
+ iftrue .ShowedLickitung
+ writetext BillsGrandpaLickitungText
+ buttonsound
+ writetext BillsGrandpaAskToSeeMonText
+ yesorno
+ iffalse .SaidNo
+ scall .ExcitedToSee
+ special BillsGrandfather
+ iffalse .SaidNo
+ ifnotequal LICKITUNG, .WrongPokemon
+ scall .CorrectPokemon
+ setevent EVENT_SHOWED_LICKITUNG_TO_BILLS_GRANDPA
+ jump .ShowedLickitung
+
+.GotEverstone:
+ writetext BillsGrandpaOddishText
+ buttonsound
+ writetext BillsGrandpaAskToSeeMonText
+ yesorno
+ iffalse .SaidNo
+ scall .ExcitedToSee
+ special BillsGrandfather
+ iffalse .SaidNo
+ ifnotequal ODDISH, .WrongPokemon
+ scall .CorrectPokemon
+ setevent EVENT_SHOWED_ODDISH_TO_BILLS_GRANDPA
+ jump .ShowedOddish
+
+.GotLeafStone:
+ writetext BillsGrandpaStaryuText
+ buttonsound
+ writetext BillsGrandpaAskToSeeMonText
+ yesorno
+ iffalse .SaidNo
+ scall .ExcitedToSee
+ special BillsGrandfather
+ iffalse .SaidNo
+ ifnotequal STARYU, .WrongPokemon
+ scall .CorrectPokemon
+ setevent EVENT_SHOWED_STARYU_TO_BILLS_GRANDPA
+ jump .ShowedStaryu
+
+.GotWaterStone:
+ checkver
+ iftrue .AskVulpix
+ writetext BillsGrandpaGrowlitheText
+ buttonsound
+ writetext BillsGrandpaAskToSeeMonText
+ yesorno
+ iffalse .SaidNo
+ scall .ExcitedToSee
+ special BillsGrandfather
+ iffalse .SaidNo
+ ifnotequal GROWLITHE, .WrongPokemon
+ scall .CorrectPokemon
+ setevent EVENT_SHOWED_GROWLITHE_VULPIX_TO_BILLS_GRANDPA
+ jump .ShowedGrowlitheVulpix
+
+.AskVulpix:
+ writetext BillsGrandpaVulpixText
+ buttonsound
+ writetext BillsGrandpaAskToSeeMonText
+ yesorno
+ iffalse .SaidNo
+ scall .ExcitedToSee
+ special BillsGrandfather
+ iffalse .SaidNo
+ ifnotequal VULPIX, .WrongPokemon
+ scall .CorrectPokemon
+ setevent EVENT_SHOWED_GROWLITHE_VULPIX_TO_BILLS_GRANDPA
+ jump .ShowedGrowlitheVulpix
+
+.GotFireStone:
+ writetext BillsGrandpaPichuText
+ buttonsound
+ writetext BillsGrandpaAskToSeeMonText
+ yesorno
+ iffalse .SaidNo
+ scall .ExcitedToSee
+ special BillsGrandfather
+ iffalse .SaidNo
+ ifnotequal PICHU, .WrongPokemon
+ scall .CorrectPokemon
+ setevent EVENT_SHOWED_PICHU_TO_BILLS_GRANDPA
+ jump .ShowedPichu
+
+.ShowedLickitung:
+ checkevent EVENT_GOT_EVERSTONE_FROM_BILLS_GRANDPA
+ iftrue .GotEverstone
+ scall .ReceiveItem
+ verbosegiveitem EVERSTONE
+ iffalse .BagFull
+ setevent EVENT_GOT_EVERSTONE_FROM_BILLS_GRANDPA
+ setevent EVENT_TEMPORARY_UNTIL_MAP_RELOAD_1
+ closetext
+ end
+
+.ShowedOddish:
+ checkevent EVENT_GOT_LEAF_STONE_FROM_BILLS_GRANDPA
+ iftrue .GotLeafStone
+ scall .ReceiveItem
+ verbosegiveitem LEAF_STONE
+ iffalse .BagFull
+ setevent EVENT_GOT_LEAF_STONE_FROM_BILLS_GRANDPA
+ setevent EVENT_TEMPORARY_UNTIL_MAP_RELOAD_1
+ closetext
+ end
+
+.ShowedStaryu:
+ checkevent EVENT_GOT_WATER_STONE_FROM_BILLS_GRANDPA
+ iftrue .GotWaterStone
+ scall .ReceiveItem
+ verbosegiveitem WATER_STONE
+ iffalse .BagFull
+ setevent EVENT_GOT_WATER_STONE_FROM_BILLS_GRANDPA
+ setevent EVENT_TEMPORARY_UNTIL_MAP_RELOAD_1
+ closetext
+ end
+
+.ShowedGrowlitheVulpix:
+ checkevent EVENT_GOT_FIRE_STONE_FROM_BILLS_GRANDPA
+ iftrue .GotFireStone
+ scall .ReceiveItem
+ verbosegiveitem FIRE_STONE
+ iffalse .BagFull
+ setevent EVENT_GOT_FIRE_STONE_FROM_BILLS_GRANDPA
+ setevent EVENT_TEMPORARY_UNTIL_MAP_RELOAD_1
+ closetext
+ end
+
+.ShowedPichu:
+ scall .ReceiveItem
+ verbosegiveitem THUNDERSTONE
+ iffalse .BagFull
+ setevent EVENT_GOT_THUNDERSTONE_FROM_BILLS_GRANDPA
+ closetext
+ end
+
+.ExcitedToSee:
+ writetext BillsGrandpaExcitedToSeeText
+ buttonsound
+ end
+
+.SaidNo:
+ writetext BillsGrandpaYouDontHaveItTextText
+ waitbutton
+ closetext
+ end
+
+.CorrectPokemon:
+ writetext BillsGrandpaShownPokemonText
+ buttonsound
+ end
+
+.ReceiveItem:
+ writetext BillsGrandpaTokenOfAppreciationText
+ buttonsound
+ end
+
+.JustShowedSomething:
+ writetext BillsGrandpaComeAgainText
+ waitbutton
+ closetext
+ end
+
+.GotThunderstone:
+ writetext BillsGrandpaShownAllThePokemonText
+ waitbutton
+ closetext
+ end
+
+.WrongPokemon:
+ writetext BillsGrandpaWrongPokemonText
+ waitbutton
+ closetext
+ end
+
+.BagFull:
+ closetext
+ end
+
+BillsGrandpaIntroText:
+ text "Hm? You know BILL?"
+ line "He's my grandson."
+
+ para "He's in JOHTO. He"
+ line "does something"
+
+ para "with PCs, so I'm"
+ line "house-sitting."
+ done
+
+BillsGrandpaAskToSeeMonText:
+ text "If you have that"
+ line "#MON, may I see"
+ cont "it, please?"
+ done
+
+BillsGrandpaExcitedToSeeText:
+ text "You will show me?"
+ line "How good of you!"
+ done
+
+BillsGrandpaYouDontHaveItTextText:
+ text "You don't have it?"
+ line "That's too bad…"
+ done
+
+BillsGrandpaShownPokemonText:
+ text "Ah, so that is"
+ line "@"
+ text_from_ram wStringBuffer3
+ text "?"
+
+ para "Isn't it cute!"
+ line "That's so kind of"
+ cont "you."
+ done
+
+BillsGrandpaTokenOfAppreciationText:
+ text "Thanks!"
+
+ para "This is a token of"
+ line "my appreciation."
+ done
+
+BillsGrandpaComeAgainText:
+ text "Come visit again"
+ line "sometime."
+ done
+
+BillsGrandpaShownAllThePokemonText:
+ text "Thanks for showing"
+ line "me so many cute"
+ cont "#MON."
+
+ para "I really enjoyed"
+ line "myself. I'm glad"
+
+ para "I've lived such a"
+ line "long life."
+ done
+
+BillsGrandpaWrongPokemonText:
+ text "Hm?"
+
+ para "That's not the"
+ line "#MON that I was"
+ cont "told about."
+ done
+
+BillsGrandpaLickitungText:
+ text "My grandson BILL"
+ line "told me about a"
+
+ para "#MON that has a"
+ line "long tongue."
+ done
+
+BillsGrandpaOddishText:
+ text "Ah, my grandson"
+ line "mentioned a round,"
+
+ para "green #MON that"
+ line "has leaves growing"
+ cont "on its head."
+ done
+
+BillsGrandpaStaryuText:
+ text "Do you know of a"
+ line "sea #MON that"
+
+ para "has a red sphere"
+ line "in its body?"
+
+ para "You know, the one"
+ line "that's shaped like"
+ cont "a star?"
+
+ para "I heard that it"
+ line "appears at night."
+
+ para "I would surely"
+ line "like to see it."
+ done
+
+BillsGrandpaGrowlitheText:
+ text "BILL told me about"
+ line "a #MON that is"
+
+ para "very loyal to its"
+ line "trainer."
+
+ para "It's supposed to"
+ line "ROAR well."
+ done
+
+BillsGrandpaVulpixText:
+ text "I heard about a"
+ line "cute #MON that"
+ cont "has six tails."
+
+ para "I would love to"
+ line "hug a cute #MON"
+ cont "like that."
+ done
+
+BillsGrandpaPichuText:
+ text "Do you know that"
+ line "hugely popular"
+ cont "#MON?"
+
+ para "The #MON that"
+ line "has a yellow body"
+ cont "and red cheeks."
+
+ para "I would love to"
+ line "see what it looks"
+
+ para "like before it"
+ line "evolves."
+ done
+
+BillsHouse_MapEvents:
+ db 0, 0 ; filler
+
+ db 2 ; warp events
+ warp_event 2, 7, ROUTE_25, 1
+ warp_event 3, 7, ROUTE_25, 1
+
+ db 0 ; coord events
+
+ db 0 ; bg events
+
+ db 1 ; object events
+ object_event 2, 3, SPRITE_GRAMPS, SPRITEMOVEDATA_STANDING_UP, 0, 2, -1, -1, PAL_NPC_BLUE, OBJECTTYPE_SCRIPT, 0, BillsGrandpa, -1
diff --git a/maps/CeruleanGym.asm b/maps/CeruleanGym.asm
new file mode 100644
index 00000000..4fff92cd
--- /dev/null
+++ b/maps/CeruleanGym.asm
@@ -0,0 +1,383 @@
+ const_def 2 ; object constants
+ const CERULEANGYM_ROCKET
+ const CERULEANGYM_MISTY
+ const CERULEANGYM_SWIMMER_GIRL1
+ const CERULEANGYM_SWIMMER_GIRL2
+ const CERULEANGYM_SWIMMER_GUY
+ const CERULEANGYM_GYM_GUY
+
+CeruleanGym_MapScripts:
+ db 2 ; scene scripts
+ scene_script .DummyScene0 ; SCENE_CERULEANGYM_NOTHING
+ scene_script .GruntRunsOut ; SCENE_CERULEANGYM_GRUNT_RUNS_OUT
+
+ db 0 ; callbacks
+
+.DummyScene0:
+ end
+
+.GruntRunsOut:
+ priorityjump .GruntRunsOutScript
+ end
+
+.GruntRunsOutScript:
+ applymovement CERULEANGYM_ROCKET, CeruleanGymGruntRunsDownMovement
+ playsound SFX_TACKLE
+ applymovement CERULEANGYM_ROCKET, CeruleanGymGruntRunsIntoYouMovement
+ playmusic MUSIC_ROCKET_ENCOUNTER
+ opentext
+ writetext UnknownText_0x1884fb
+ waitbutton
+ closetext
+ showemote EMOTE_SHOCK, CERULEANGYM_ROCKET, 15
+ applymovement CERULEANGYM_ROCKET, CeruleanGymGruntBacksAwayMovement
+ opentext
+ writetext UnknownText_0x188574
+ waitbutton
+ closetext
+ applymovement CERULEANGYM_ROCKET, CeruleanGymGruntMovesCloseMovement
+ opentext
+ writetext UnknownText_0x1885a5
+ waitbutton
+ closetext
+ applymovement CERULEANGYM_ROCKET, CeruleanGymGruntRunsOutMovement
+ playsound SFX_EXIT_BUILDING
+ disappear CERULEANGYM_ROCKET
+ setevent EVENT_MET_ROCKET_GRUNT_AT_CERULEAN_GYM
+ clearevent EVENT_ROUTE_24_ROCKET
+ clearevent EVENT_ROUTE_25_MISTY_BOYFRIEND
+ setscene SCENE_CERULEANGYM_NOTHING
+ setmapscene ROUTE_25, SCENE_ROUTE25_MISTYS_DATE
+ setmapscene POWER_PLANT, SCENE_POWERPLANT_NOTHING
+ waitsfx
+ special RestartMapMusic
+ pause 15
+ turnobject PLAYER, DOWN
+ pause 15
+ end
+
+CeruleanGymMistyScript:
+ faceplayer
+ opentext
+ checkflag ENGINE_CASCADEBADGE
+ iftrue .FightDone
+ writetext UnknownText_0x188674
+ waitbutton
+ closetext
+ winlosstext UnknownText_0x18870c, 0
+ loadtrainer MISTY, MISTY1
+ startbattle
+ reloadmapafterbattle
+ setevent EVENT_BEAT_MISTY
+ setevent EVENT_BEAT_SWIMMERF_DIANA
+ setevent EVENT_BEAT_SWIMMERF_BRIANA
+ setevent EVENT_BEAT_SWIMMERM_PARKER
+ opentext
+ writetext UnknownText_0x188768
+ playsound SFX_GET_BADGE
+ waitsfx
+ setflag ENGINE_CASCADEBADGE
+.FightDone:
+ writetext UnknownText_0x188782
+ waitbutton
+ closetext
+ end
+
+TrainerSwimmerfDiana:
+ trainer SWIMMERF, DIANA, EVENT_BEAT_SWIMMERF_DIANA, SwimmerfDianaSeenText, SwimmerfDianaBeatenText, 0, .Script
+
+.Script:
+ endifjustbattled
+ opentext
+ writetext SwimmerfDianaAfterBattleText
+ waitbutton
+ closetext
+ end
+
+TrainerSwimmerfBriana:
+ trainer SWIMMERF, BRIANA, EVENT_BEAT_SWIMMERF_BRIANA, SwimmerfBrianaSeenText, SwimmerfBrianaBeatenText, 0, .Script
+
+.Script:
+ endifjustbattled
+ opentext
+ writetext SwimmerfBrianaAfterBattleText
+ waitbutton
+ closetext
+ end
+
+TrainerSwimmermParker:
+ trainer SWIMMERM, PARKER, EVENT_BEAT_SWIMMERM_PARKER, SwimmermParkerSeenText, SwimmermParkerBeatenText, 0, .Script
+
+.Script:
+ endifjustbattled
+ opentext
+ writetext SwimmermParkerAfterBattleText
+ waitbutton
+ closetext
+ end
+
+CeruleanGymGuyScript:
+ faceplayer
+ opentext
+ checkevent EVENT_BEAT_MISTY
+ iftrue .CeruleanGymGuyWinScript
+ writetext CeruleanGymGuyText
+ waitbutton
+ closetext
+ end
+
+.CeruleanGymGuyWinScript:
+ writetext CeruleanGymGuyWinText
+ waitbutton
+ closetext
+ end
+
+CeruleanGymHiddenMachinePart:
+ hiddenitem MACHINE_PART, EVENT_FOUND_MACHINE_PART_IN_CERULEAN_GYM
+
+CeruleanGymStatue1:
+ checkevent EVENT_TRAINERS_IN_CERULEAN_GYM
+ iffalse CeruleanGymStatue
+ opentext
+ writetext CeruleanGymNote1
+ waitbutton
+ closetext
+ end
+
+CeruleanGymStatue2:
+ checkevent EVENT_TRAINERS_IN_CERULEAN_GYM
+ iffalse CeruleanGymStatue
+ opentext
+ writetext CeruleanGymNote2
+ waitbutton
+ closetext
+ end
+
+CeruleanGymStatue:
+ checkflag ENGINE_CASCADEBADGE
+ iftrue .Beaten
+ jumpstd gymstatue1
+.Beaten:
+ trainertotext MISTY, MISTY1, MEM_BUFFER_1
+ jumpstd gymstatue2
+
+CeruleanGymGruntRunsDownMovement:
+ big_step DOWN
+ big_step DOWN
+ big_step DOWN
+ big_step DOWN
+ step_end
+
+CeruleanGymGruntRunsOutMovement:
+ big_step RIGHT
+ big_step DOWN
+ step_end
+
+CeruleanGymGruntRunsIntoYouMovement:
+ fix_facing
+ set_sliding
+ jump_step UP
+ remove_sliding
+ remove_fixed_facing
+ step_sleep 8
+ step_sleep 8
+ step DOWN
+ step DOWN
+ step_end
+
+CeruleanGymGruntMovesCloseMovement:
+ big_step DOWN
+ step_end
+
+CeruleanGymGruntBacksAwayMovement:
+ fix_facing
+ slow_step UP
+ remove_fixed_facing
+ step_end
+
+UnknownText_0x1884fb:
+ text "Oops! I so sorry!"
+ line "You not hurt,"
+ cont "okay?"
+
+ para "I very busy."
+ line "No time for talk-"
+ cont "ing with you. Not"
+ cont "good for me if"
+ cont "seen by somebody."
+ done
+
+UnknownText_0x188574:
+ text "Oh no! You seen"
+ line "me already! I make"
+ cont "big mistake!"
+ done
+
+UnknownText_0x1885a5:
+ text "Hey, you! Forget"
+ line "you see me, okay?"
+
+ para "You see, hear,"
+ line "know nothing,"
+
+ para "okay?"
+ line "Bye, kid! Nothing!"
+
+ para "Bye-bye a go-go!"
+ done
+
+CeruleanGymNote1:
+ text "Sorry, I'll be out"
+ line "for a while."
+ cont "MISTY, GYM LEADER"
+ done
+
+CeruleanGymNote2:
+ text "Since MISTY's out,"
+ line "we'll be away too."
+ cont "GYM TRAINERS"
+ done
+
+UnknownText_0x188674:
+ text "MISTY: I was ex-"
+ line "pecting you, you"
+ cont "pest!"
+
+ para "You may have a"
+ line "lot of JOHTO GYM"
+
+ para "BADGES, but you'd"
+ line "better not take me"
+ cont "too lightly."
+
+ para "My water-type"
+ line "#MON are tough!"
+ done
+
+UnknownText_0x18870c:
+ text "MISTY: You really"
+ line "are good…"
+
+ para "I'll admit that"
+ line "you are skilled…"
+
+ para "Here you go. It's"
+ line "CASCADEBADGE."
+ done
+
+UnknownText_0x188768:
+ text "<PLAYER> received"
+ line "CASCADEBADGE."
+ done
+
+UnknownText_0x188782:
+ text "MISTY: Are there"
+ line "many strong train-"
+ cont "ers in JOHTO? Like"
+ cont "you, I mean."
+
+ para "I'm going to"
+ line "travel one day, so"
+
+ para "I can battle some"
+ line "skilled trainers."
+ done
+
+SwimmerfDianaSeenText:
+ text "Sorry about being"
+ line "away. Let's get on"
+ cont "with it!"
+ done
+
+SwimmerfDianaBeatenText:
+ text "I give up! You're"
+ line "the winner!"
+ done
+
+SwimmerfDianaAfterBattleText:
+ text "I'll be swimming"
+ line "quietly."
+ done
+
+SwimmerfBrianaSeenText:
+ text "Don't let my ele-"
+ line "gant swimming un-"
+ cont "nerve you."
+ done
+
+SwimmerfBrianaBeatenText:
+ text "Ooh, you calmly"
+ line "disposed of me…"
+ done
+
+SwimmerfBrianaAfterBattleText:
+ text "Don't be too smug"
+ line "about beating me."
+
+ para "MISTY will destroy"
+ line "you if you get"
+ cont "complacent."
+ done
+
+SwimmermParkerSeenText:
+ text "Glub…"
+
+ para "I'm first! Come"
+ line "and get me!"
+ done
+
+SwimmermParkerBeatenText:
+ text "This can't be…"
+ done
+
+SwimmermParkerAfterBattleText:
+ text "MISTY has gotten"
+ line "much better in the"
+ cont "past few years."
+
+ para "Don't let your"
+ line "guard down, or"
+ cont "you'll be crushed!"
+ done
+
+CeruleanGymGuyText:
+ text "Yo! CHAMP in"
+ line "making!"
+
+ para "Since MISTY was"
+ line "away, I went out"
+
+ para "for some fun too."
+ line "He-he-he."
+ done
+
+CeruleanGymGuyWinText:
+ text "Hoo, you showed me"
+ line "how tough you are."
+
+ para "As always, that"
+ line "was one heck of a"
+ cont "great battle!"
+ done
+
+CeruleanGym_MapEvents:
+ db 0, 0 ; filler
+
+ db 2 ; warp events
+ warp_event 4, 15, CERULEAN_CITY, 5
+ warp_event 5, 15, CERULEAN_CITY, 5
+
+ db 0 ; coord events
+
+ db 3 ; bg events
+ bg_event 3, 8, BGEVENT_ITEM, CeruleanGymHiddenMachinePart
+ bg_event 2, 13, BGEVENT_READ, CeruleanGymStatue1
+ bg_event 6, 13, BGEVENT_READ, CeruleanGymStatue2
+
+ db 6 ; object events
+ object_event 4, 10, SPRITE_ROCKET, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, OBJECTTYPE_SCRIPT, 0, ObjectEvent, EVENT_CERULEAN_GYM_ROCKET
+ object_event 5, 3, SPRITE_MISTY, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, PAL_NPC_RED, OBJECTTYPE_SCRIPT, 0, CeruleanGymMistyScript, EVENT_TRAINERS_IN_CERULEAN_GYM
+ object_event 4, 6, SPRITE_SWIMMER_GIRL, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, PAL_NPC_GREEN, OBJECTTYPE_TRAINER, 3, TrainerSwimmerfDiana, EVENT_TRAINERS_IN_CERULEAN_GYM
+ object_event 1, 9, SPRITE_SWIMMER_GIRL, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, PAL_NPC_GREEN, OBJECTTYPE_TRAINER, 1, TrainerSwimmerfBriana, EVENT_TRAINERS_IN_CERULEAN_GYM
+ object_event 8, 9, SPRITE_SWIMMER_GUY, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, PAL_NPC_RED, OBJECTTYPE_TRAINER, 3, TrainerSwimmermParker, EVENT_TRAINERS_IN_CERULEAN_GYM
+ object_event 7, 13, SPRITE_GYM_GUY, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, PAL_NPC_BLUE, OBJECTTYPE_SCRIPT, 0, CeruleanGymGuyScript, EVENT_TRAINERS_IN_CERULEAN_GYM
diff --git a/maps/CeruleanGymBadgeSpeechHouse.asm b/maps/CeruleanGymBadgeSpeechHouse.asm
new file mode 100644
index 00000000..6d94bae0
--- /dev/null
+++ b/maps/CeruleanGymBadgeSpeechHouse.asm
@@ -0,0 +1,29 @@
+ const_def 2 ; object constants
+ const CERULEANGYMBADGESPEECHHOUSE_POKEFAN_M
+
+CeruleanGymBadgeSpeechHouse_MapScripts:
+ db 0 ; scene scripts
+
+ db 0 ; callbacks
+
+CeruleanGymBadgeSpeechHousePokefanMScript:
+ jumptextfaceplayer CeruleanGymBadgeSpeechHousePokefanMText
+
+CeruleanGymBadgeSpeechHousePokefanMText:
+ text "Are you collecting"
+ line "KANTO GYM BADGES?"
+ done
+
+CeruleanGymBadgeSpeechHouse_MapEvents:
+ db 0, 0 ; filler
+
+ db 2 ; warp events
+ warp_event 2, 7, CERULEAN_CITY, 1
+ warp_event 3, 7, CERULEAN_CITY, 1
+
+ db 0 ; coord events
+
+ db 0 ; bg events
+
+ db 1 ; object events
+ object_event 2, 3, SPRITE_POKEFAN_M, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, OBJECTTYPE_SCRIPT, 0, CeruleanGymBadgeSpeechHousePokefanMScript, -1
diff --git a/maps/CeruleanMart.asm b/maps/CeruleanMart.asm
new file mode 100644
index 00000000..6fd5c9b8
--- /dev/null
+++ b/maps/CeruleanMart.asm
@@ -0,0 +1,60 @@
+ const_def 2 ; object constants
+ const CERULEANMART_CLERK
+ const CERULEANMART_COOLTRAINER_M
+ const CERULEANMART_COOLTRAINER_F
+
+CeruleanMart_MapScripts:
+ db 0 ; scene scripts
+
+ db 0 ; callbacks
+
+CeruleanMart_Clerk:
+ opentext
+ pokemart MARTTYPE_STANDARD, MART_CERULEAN
+ closetext
+ end
+
+CeruleanMart_CooltrainerM:
+ jumptextfaceplayer CeruleanMart_CooltrainerMText
+
+CeruleanMart_CooltrainerF:
+ jumptextfaceplayer CeruleanMart_CooltrainerFText
+
+CeruleanMart_CooltrainerMText:
+ text "You'll run into"
+ line "many trainers on"
+
+ para "the way to CERU-"
+ line "LEAN's CAPE."
+
+ para "They want to see"
+ line "how they stack"
+
+ para "up against other"
+ line "trainers."
+ done
+
+CeruleanMart_CooltrainerFText:
+ text "MISTY is about the"
+ line "only person in"
+
+ para "town who can beat"
+ line "the trainers at"
+ cont "CERULEAN's CAPE."
+ done
+
+CeruleanMart_MapEvents:
+ db 0, 0 ; filler
+
+ db 2 ; warp events
+ warp_event 2, 7, CERULEAN_CITY, 6
+ warp_event 3, 7, CERULEAN_CITY, 6
+
+ 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, CeruleanMart_Clerk, -1
+ object_event 1, 6, SPRITE_COOLTRAINER_M, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, PAL_NPC_GREEN, OBJECTTYPE_SCRIPT, 0, CeruleanMart_CooltrainerM, -1
+ object_event 7, 2, SPRITE_COOLTRAINER_F, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 2, 0, -1, -1, PAL_NPC_RED, OBJECTTYPE_SCRIPT, 0, CeruleanMart_CooltrainerF, -1
diff --git a/maps/CeruleanPokecenter1F.asm b/maps/CeruleanPokecenter1F.asm
new file mode 100644
index 00000000..2968cb10
--- /dev/null
+++ b/maps/CeruleanPokecenter1F.asm
@@ -0,0 +1,57 @@
+ const_def 2 ; object constants
+ const CERULEANPOKECENTER1F_NURSE
+ const CERULEANPOKECENTER1F_SUPER_NERD
+ const CERULEANPOKECENTER1F_GYM_GUY
+
+CeruleanPokecenter1F_MapScripts:
+ db 0 ; scene scripts
+
+ db 0 ; callbacks
+
+CeruleanPokecenter1FNurseScript:
+ jumpstd pokecenternurse
+
+CeruleanPokecenter1FSuperNerdScript:
+ jumptextfaceplayer CeruleanPokecenter1FSuperNerdText
+
+CeruleanPokecenter1FGymGuyScript:
+ jumptextfaceplayer CeruleanPokecenter1FGymGuyText
+
+CeruleanPokecenter1FSuperNerdText:
+ text "ROUTE 9 stretches"
+ line "to the east. The"
+
+ para "POWER PLANT is at"
+ line "the end."
+ done
+
+CeruleanPokecenter1FGymGuyText:
+ text "The MAGNET TRAIN"
+ line "travels at over"
+
+ para "340 mph. It goes"
+ line "between KANTO and"
+
+ para "JOHTO in almost no"
+ line "time at all."
+
+ para "It really makes"
+ line "JOHTO accessible."
+ done
+
+CeruleanPokecenter1F_MapEvents:
+ db 0, 0 ; filler
+
+ db 3 ; warp events
+ warp_event 3, 7, CERULEAN_CITY, 4
+ warp_event 4, 7, CERULEAN_CITY, 4
+ warp_event 0, 7, POKECENTER_2F, 1
+
+ db 0 ; coord events
+
+ db 0 ; bg events
+
+ db 3 ; object events
+ object_event 3, 1, SPRITE_NURSE, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, OBJECTTYPE_SCRIPT, 0, CeruleanPokecenter1FNurseScript, -1
+ object_event 8, 4, SPRITE_SUPER_NERD, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 1, 0, -1, -1, 0, OBJECTTYPE_SCRIPT, 0, CeruleanPokecenter1FSuperNerdScript, -1
+ object_event 1, 5, SPRITE_GYM_GUY, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, PAL_NPC_GREEN, OBJECTTYPE_SCRIPT, 0, CeruleanPokecenter1FGymGuyScript, -1
diff --git a/maps/CeruleanPokecenter2FBeta.asm b/maps/CeruleanPokecenter2FBeta.asm
new file mode 100644
index 00000000..135d49d3
--- /dev/null
+++ b/maps/CeruleanPokecenter2FBeta.asm
@@ -0,0 +1,16 @@
+CeruleanPokecenter2FBeta_MapScripts:
+ db 0 ; scene scripts
+
+ db 0 ; callbacks
+
+CeruleanPokecenter2FBeta_MapEvents:
+ db 0, 0 ; filler
+
+ db 1 ; warp events
+ warp_event 0, 7, CERULEAN_POKECENTER_1F, 1
+
+ db 0 ; coord events
+
+ db 0 ; bg events
+
+ db 0 ; object events
diff --git a/maps/CeruleanPoliceStation.asm b/maps/CeruleanPoliceStation.asm
new file mode 100644
index 00000000..1c97dc0e
--- /dev/null
+++ b/maps/CeruleanPoliceStation.asm
@@ -0,0 +1,58 @@
+ const_def 2 ; object constants
+ const CERULEANPOLICESTATION_FISHING_GURU
+ const CERULEANPOLICESTATION_POKEFAN_F
+ const CERULEANPOLICESTATION_DIGLETT
+
+CeruleanPoliceStation_MapScripts:
+ db 0 ; scene scripts
+
+ db 0 ; callbacks
+
+CeruleanPoliceStationFishingGuruScript:
+ jumptextfaceplayer CeruleanPoliceStationFishingGuruText
+
+CeruleanPoliceStationPokefanFScript:
+ jumptextfaceplayer CeruleanPoliceStationPokefanFText
+
+CeruleanDiglett:
+ opentext
+ writetext CeruleanDiglettText
+ cry DIGLETT
+ waitbutton
+ closetext
+ end
+
+CeruleanPoliceStationFishingGuruText:
+ text "I heard that some"
+ line "shady character is"
+ cont "skulking about."
+
+ para "I won't stand for"
+ line "it if he turns out"
+ cont "to be a thief."
+ done
+
+CeruleanPoliceStationPokefanFText:
+ text "We were held up by"
+ line "robbers before."
+ done
+
+CeruleanDiglettText:
+ text "DIGLETT: Dug dug."
+ done
+
+CeruleanPoliceStation_MapEvents:
+ db 0, 0 ; filler
+
+ db 2 ; warp events
+ warp_event 2, 7, CERULEAN_CITY, 2
+ warp_event 3, 7, CERULEAN_CITY, 2
+
+ db 0 ; coord events
+
+ db 0 ; bg events
+
+ db 3 ; object events
+ object_event 5, 1, SPRITE_FISHING_GURU, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, PAL_NPC_GREEN, OBJECTTYPE_SCRIPT, 0, CeruleanPoliceStationFishingGuruScript, -1
+ object_event 5, 4, SPRITE_POKEFAN_F, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, PAL_NPC_BLUE, OBJECTTYPE_SCRIPT, 0, CeruleanPoliceStationPokefanFScript, -1
+ object_event 3, 5, SPRITE_DIGLETT, SPRITEMOVEDATA_POKEMON, 0, 0, -1, -1, PAL_NPC_BROWN, OBJECTTYPE_SCRIPT, 0, CeruleanDiglett, -1
diff --git a/maps/CeruleanTradeSpeechHouse.asm b/maps/CeruleanTradeSpeechHouse.asm
new file mode 100644
index 00000000..d1a3caea
--- /dev/null
+++ b/maps/CeruleanTradeSpeechHouse.asm
@@ -0,0 +1,69 @@
+ const_def 2 ; object constants
+ const CERULEANTRADESPEECHHOUSE_GRANNY
+ const CERULEANTRADESPEECHHOUSE_GRAMPS
+ const CERULEANTRADESPEECHHOUSE_RHYDON
+ const CERULEANTRADESPEECHHOUSE_ZUBAT
+
+CeruleanTradeSpeechHouse_MapScripts:
+ db 0 ; scene scripts
+
+ db 0 ; callbacks
+
+CeruleanTradeSpeechHouseGrannyScript:
+ jumptextfaceplayer CeruleanTradeSpeechHouseGrannyText
+
+CeruleanTradeSpeechHouseGrampsScript:
+ jumptextfaceplayer CeruleanTradeSpeechHouseGrampsText
+
+CeruleanTradeSpeechHouseRhydonScript:
+ opentext
+ writetext CeruleanTradeSpeechHouseRhydonText
+ cry KANGASKHAN
+ waitbutton
+ closetext
+ end
+
+CeruleanTradeSpeechHouseZubatScript:
+ opentext
+ writetext CeruleanTradeSpeechHouseZubatText
+ cry ZUBAT
+ waitbutton
+ closetext
+ end
+
+CeruleanTradeSpeechHouseGrannyText:
+ text "My husband lives"
+ line "happily with #-"
+ cont "MON he got through"
+ cont "trades."
+ done
+
+CeruleanTradeSpeechHouseGrampsText:
+ text "Ah… I'm so happy…"
+ done
+
+CeruleanTradeSpeechHouseRhydonText:
+ text "KANGASKHAN: Garu"
+ line "garuu."
+ done
+
+CeruleanTradeSpeechHouseZubatText:
+ text "ZUBAT: Zuba zubaa."
+ done
+
+CeruleanTradeSpeechHouse_MapEvents:
+ db 0, 0 ; filler
+
+ db 2 ; warp events
+ warp_event 2, 7, CERULEAN_CITY, 3
+ warp_event 3, 7, CERULEAN_CITY, 3
+
+ db 0 ; coord events
+
+ db 0 ; bg events
+
+ db 4 ; object events
+ object_event 2, 4, SPRITE_GRANNY, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, PAL_NPC_BLUE, OBJECTTYPE_SCRIPT, 0, CeruleanTradeSpeechHouseGrannyScript, -1
+ object_event 1, 2, SPRITE_GRAMPS, SPRITEMOVEDATA_WANDER, 0, 0, -1, -1, PAL_NPC_GREEN, OBJECTTYPE_SCRIPT, 0, CeruleanTradeSpeechHouseGrampsScript, -1
+ object_event 5, 2, SPRITE_RHYDON, SPRITEMOVEDATA_POKEMON, 0, 0, -1, -1, PAL_NPC_BROWN, OBJECTTYPE_SCRIPT, 0, CeruleanTradeSpeechHouseRhydonScript, -1
+ object_event 5, 6, SPRITE_ZUBAT, SPRITEMOVEDATA_POKEMON, 0, 0, -1, -1, 0, OBJECTTYPE_SCRIPT, 0, CeruleanTradeSpeechHouseZubatScript, -1
diff --git a/maps/PowerPlant.asm b/maps/PowerPlant.asm
new file mode 100644
index 00000000..31b28d3c
--- /dev/null
+++ b/maps/PowerPlant.asm
@@ -0,0 +1,401 @@
+ const_def 2 ; object constants
+ const POWERPLANT_OFFICER1
+ const POWERPLANT_GYM_GUY1
+ const POWERPLANT_GYM_GUY2
+ const POWERPLANT_OFFICER2
+ const POWERPLANT_GYM_GUY3
+ const POWERPLANT_FISHER
+ const POWERPLANT_FOREST
+
+PowerPlant_MapScripts:
+ db 2 ; scene scripts
+ scene_script .DummyScene0 ; SCENE_POWERPLANT_NOTHING
+ scene_script .DummyScene1 ; SCENE_POWERPLANT_GUARD_GETS_PHONE_CALL
+
+ db 0 ; callbacks
+
+.DummyScene0:
+ end
+
+.DummyScene1:
+ end
+
+PowerPlantGuardPhoneScript:
+ playsound SFX_CALL
+ showemote EMOTE_SHOCK, POWERPLANT_OFFICER1, 15
+ waitsfx
+ pause 30
+ applymovement POWERPLANT_OFFICER1, MovementData_0x188ed5
+ turnobject POWERPLANT_GYM_GUY1, DOWN
+ turnobject POWERPLANT_GYM_GUY2, DOWN
+ opentext
+ writetext UnknownText_0x188f22
+ waitbutton
+ closetext
+ turnobject POWERPLANT_OFFICER1, LEFT
+ turnobject PLAYER, RIGHT
+ opentext
+ writetext UnknownText_0x188f7f
+ waitbutton
+ closetext
+ turnobject PLAYER, DOWN
+ applymovement POWERPLANT_OFFICER1, MovementData_0x188eda
+ setscene SCENE_POWERPLANT_NOTHING
+ end
+
+PowerPlantOfficerScript:
+ faceplayer
+ opentext
+ checkevent EVENT_RETURNED_MACHINE_PART
+ iftrue .ReturnedMachinePart
+ checkevent EVENT_MET_MANAGER_AT_POWER_PLANT
+ iftrue .MetManager
+ writetext UnknownText_0x188ee0
+ waitbutton
+ closetext
+ end
+
+.MetManager:
+ writetext UnknownText_0x188f7f
+ waitbutton
+ closetext
+ end
+
+.ReturnedMachinePart:
+ writetext UnknownText_0x188fa2
+ waitbutton
+ closetext
+ end
+
+PowerPlantGymGuy1Script:
+ faceplayer
+ opentext
+ checkevent EVENT_RETURNED_MACHINE_PART
+ iftrue .ReturnedMachinePart
+ writetext UnknownText_0x188fcf
+ waitbutton
+ closetext
+ end
+
+.ReturnedMachinePart:
+ writetext UnknownText_0x189038
+ waitbutton
+ closetext
+ end
+
+PowerPlantGymGuy2Script:
+ faceplayer
+ opentext
+ checkevent EVENT_RETURNED_MACHINE_PART
+ iftrue .ReturnedMachinePart
+ writetext UnknownText_0x189079
+ waitbutton
+ closetext
+ end
+
+.ReturnedMachinePart:
+ writetext UnknownText_0x1890ef
+ waitbutton
+ closetext
+ end
+
+PowerPlantGymGuy3Script:
+ faceplayer
+ opentext
+ checkevent EVENT_RETURNED_MACHINE_PART
+ iftrue .ReturnedMachinePart
+ writetext UnknownText_0x18910e
+ waitbutton
+ closetext
+ end
+
+.ReturnedMachinePart:
+ writetext UnknownText_0x18917f
+ waitbutton
+ closetext
+ end
+
+PowerPlantGymGuy4Script:
+ faceplayer
+ opentext
+ checkevent EVENT_RETURNED_MACHINE_PART
+ iftrue .ReturnedMachinePart
+ writetext UnknownText_0x1891c2
+ waitbutton
+ closetext
+ end
+
+.ReturnedMachinePart:
+ writetext UnknownText_0x189225
+ waitbutton
+ closetext
+ end
+
+PowerPlantManager:
+ faceplayer
+ opentext
+ checkevent EVENT_RETURNED_MACHINE_PART
+ iftrue .ReturnedMachinePart
+ checkitem MACHINE_PART
+ iftrue .FoundMachinePart
+ checkevent EVENT_MET_MANAGER_AT_POWER_PLANT
+ iftrue .MetManager
+ writetext UnknownText_0x189264
+ waitbutton
+ closetext
+ setevent EVENT_MET_MANAGER_AT_POWER_PLANT
+ clearevent EVENT_CERULEAN_GYM_ROCKET
+ clearevent EVENT_FOUND_MACHINE_PART_IN_CERULEAN_GYM
+ setmapscene CERULEAN_GYM, SCENE_CERULEANGYM_GRUNT_RUNS_OUT
+ setscene SCENE_POWERPLANT_GUARD_GETS_PHONE_CALL
+ end
+
+.MetManager:
+ writetext UnknownText_0x189308
+ waitbutton
+ closetext
+ end
+
+.FoundMachinePart:
+ writetext UnknownText_0x18936e
+ buttonsound
+ takeitem MACHINE_PART
+ setevent EVENT_RETURNED_MACHINE_PART
+ clearevent EVENT_SAFFRON_TRAIN_STATION_POPULATION
+ setevent EVENT_ROUTE_5_6_POKEFAN_M_BLOCKS_UNDERGROUND_PATH
+ setevent EVENT_ROUTE_24_ROCKET
+ setevent EVENT_RESTORED_POWER_TO_KANTO
+ clearevent EVENT_GOLDENROD_TRAIN_STATION_GENTLEMAN
+.ReturnedMachinePart:
+ checkevent EVENT_GOT_TM07_ZAP_CANNON
+ iftrue .GotZapCannon
+ writetext UnknownText_0x1893c4
+ buttonsound
+ verbosegiveitem TM_ZAP_CANNON
+ iffalse .NoRoom
+ setevent EVENT_GOT_TM07_ZAP_CANNON
+ writetext UnknownText_0x1893f4
+ waitbutton
+.NoRoom:
+ closetext
+ end
+
+.GotZapCannon:
+ writetext UnknownText_0x189475
+ waitbutton
+ closetext
+ end
+
+PowerPlantBookshelf:
+ jumpstd difficultbookshelf
+
+MovementData_0x188ed5:
+ step RIGHT
+ step RIGHT
+ step UP
+ step UP
+ step_end
+
+MovementData_0x188eda:
+ step DOWN
+ step DOWN
+ step LEFT
+ step LEFT
+ turn_head DOWN
+ step_end
+
+UnknownText_0x188ee0:
+ text "A thief broke into"
+ line "the POWER PLANT…"
+
+ para "What is the world"
+ line "coming to?"
+ done
+
+UnknownText_0x188f22:
+ text "I just got word"
+ line "from CERULEAN."
+
+ para "It appears that a"
+ line "shady character"
+
+ para "has been loitering"
+ line "around."
+ done
+
+UnknownText_0x188f7f:
+ text "Could I ask for"
+ line "your cooperation?"
+ done
+
+UnknownText_0x188fa2:
+ text "We'll have to beef"
+ line "up our security"
+ cont "presence."
+ done
+
+UnknownText_0x188fcf:
+ text "Someone made off"
+ line "with a part that's"
+
+ para "essential for the"
+ line "generator."
+
+ para "Without it, the"
+ line "new generator's"
+ cont "useless!"
+ done
+
+UnknownText_0x189038:
+ text "The generator's up"
+ line "and running. It's"
+
+ para "making electricity"
+ line "to spare."
+ done
+
+UnknownText_0x189079:
+ text "This POWER PLANT"
+ line "had been abandoned"
+ cont "in the past."
+
+ para "We got it back up"
+ line "and running to"
+
+ para "provide power to"
+ line "the MAGNET TRAIN."
+ done
+
+UnknownText_0x1890ef:
+ text "The generator's"
+ line "running again!"
+ done
+
+UnknownText_0x18910e:
+ text "The POWER PLANT's"
+ line "MANAGER is up"
+ cont "ahead."
+
+ para "But since someone"
+ line "wrecked the gener-"
+ cont "ator, he's been"
+ cont "both sad and"
+ cont "furious…"
+ done
+
+UnknownText_0x18917f:
+ text "Since the gener-"
+ line "ator's been fixed,"
+
+ para "the MANAGER has"
+ line "been cheerful."
+ done
+
+UnknownText_0x1891c2:
+ text "The MAGNET TRAIN"
+ line "consumes a lot of"
+ cont "electricity."
+
+ para "It can't move if"
+ line "the new generator"
+ cont "isn't operating."
+ done
+
+UnknownText_0x189225:
+ text "All right! We can"
+ line "finally get the"
+
+ para "MAGNET TRAIN"
+ line "running again."
+ done
+
+UnknownText_0x189264:
+ text "MANAGER: I, I, I'm"
+ line "ready to blast"
+ cont "someone!"
+
+ para "Who would dare"
+ line "ruin my generator?"
+
+ para "I spent so much"
+ line "time on it!"
+
+ para "If I catch him,"
+ line "he's going to get"
+
+ para "a taste of my ZAP"
+ line "CANNON!"
+ done
+
+UnknownText_0x189308:
+ text "MANAGER: I won't"
+ line "forgive him!"
+
+ para "The culprit can"
+ line "cry and apologize,"
+
+ para "but I'll still"
+ line "hammer him!"
+
+ para "Gahahahah!"
+ done
+
+UnknownText_0x18936e:
+ text "MANAGER: Ah! Yeah!"
+
+ para "That's the missing"
+ line "PART from my be-"
+ cont "loved generator!"
+ cont "You found it?"
+ done
+
+UnknownText_0x1893c4:
+ text "Wahah! Thanks!"
+
+ para "Here! Take this TM"
+ line "as a reward!"
+ done
+
+UnknownText_0x1893f4:
+ text "MANAGER: TM07 is"
+ line "my ZAP CANNON."
+
+ para "It's a powerful"
+ line "technique!"
+
+ para "It's not what any-"
+ line "one would consider"
+
+ para "accurate, but it"
+ line "packs a wallop!"
+ done
+
+UnknownText_0x189475:
+ text "MANAGER: My be-"
+ line "loved generator!"
+
+ para "Keep pumping the"
+ line "electricity out!"
+ done
+
+PowerPlant_MapEvents:
+ db 0, 0 ; filler
+
+ db 2 ; warp events
+ warp_event 2, 17, ROUTE_10_NORTH, 2
+ warp_event 3, 17, ROUTE_10_NORTH, 2
+
+ db 1 ; coord events
+ coord_event 5, 12, SCENE_POWERPLANT_GUARD_GETS_PHONE_CALL, PowerPlantGuardPhoneScript
+
+ db 2 ; bg events
+ bg_event 0, 1, BGEVENT_READ, PowerPlantBookshelf
+ bg_event 1, 1, BGEVENT_READ, PowerPlantBookshelf
+
+ db 6 ; object events
+ object_event 4, 14, SPRITE_OFFICER, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, PAL_NPC_GREEN, OBJECTTYPE_SCRIPT, 0, PowerPlantOfficerScript, -1
+ object_event 2, 9, SPRITE_GYM_GUY, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, PAL_NPC_BLUE, OBJECTTYPE_SCRIPT, 0, PowerPlantGymGuy1Script, -1
+ object_event 6, 11, SPRITE_GYM_GUY, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, PAL_NPC_BLUE, OBJECTTYPE_SCRIPT, 0, PowerPlantGymGuy2Script, -1
+ object_event 9, 3, SPRITE_OFFICER, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, PAL_NPC_GREEN, OBJECTTYPE_SCRIPT, 0, PowerPlantGymGuy3Script, -1
+ object_event 7, 2, SPRITE_GYM_GUY, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 1, 0, -1, -1, PAL_NPC_BLUE, OBJECTTYPE_SCRIPT, 0, PowerPlantGymGuy4Script, -1
+ object_event 14, 10, SPRITE_FISHER, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, PAL_NPC_RED, OBJECTTYPE_SCRIPT, 0, PowerPlantManager, -1
diff --git a/maps/Route10Pokecenter1F.asm b/maps/Route10Pokecenter1F.asm
new file mode 100644
index 00000000..82a6c73a
--- /dev/null
+++ b/maps/Route10Pokecenter1F.asm
@@ -0,0 +1,97 @@
+ const_def 2 ; object constants
+ const ROUTE10POKECENTER1F_NURSE
+ const ROUTE10POKECENTER1F_GENTLEMAN
+ const ROUTE10POKECENTER1F_GYM_GUY
+ const ROUTE10POKECENTER1F_COOLTRAINER_F
+
+Route10Pokecenter1F_MapScripts:
+ db 0 ; scene scripts
+
+ db 0 ; callbacks
+
+Route10Pokecenter1FNurseScript:
+ jumpstd pokecenternurse
+
+Route10Pokecenter1FGentlemanScript:
+ jumptextfaceplayer Route10Pokecenter1FGentlemanText
+
+Route10Pokecenter1FGymGuyScript:
+ faceplayer
+ opentext
+ checkevent EVENT_RETURNED_MACHINE_PART
+ iftrue .ReturnedMachinePart
+ writetext Route10Pokecenter1FGymGuyText
+ waitbutton
+ closetext
+ end
+
+.ReturnedMachinePart:
+ writetext Route10Pokecenter1FGymGuyText_ReturnedMachinePart
+ waitbutton
+ closetext
+ end
+
+Route10Pokecenter1FCooltrainerFScript:
+ jumptextfaceplayer Route10Pokecenter1FCooltrainerFText
+
+Route10Pokecenter1FGentlemanText:
+ text "A #MON CENTER"
+ line "near a cave?"
+
+ para "That's mighty"
+ line "convenient."
+ done
+
+Route10Pokecenter1FGymGuyText:
+ text "The POWER PLANT's"
+ line "MANAGER is looking"
+
+ para "for a strong #-"
+ line "MON trainer."
+
+ para "He needs help"
+ line "getting back"
+
+ para "something that"
+ line "was stolen."
+ done
+
+Route10Pokecenter1FGymGuyText_ReturnedMachinePart:
+ text "I hear TEAM ROCKET"
+ line "got back together"
+
+ para "in JOHTO but fell"
+ line "apart right away."
+
+ para "I didn't know any-"
+ line "thing about that."
+ done
+
+Route10Pokecenter1FCooltrainerFText:
+ text "When you go out-"
+ line "side, you can see"
+
+ para "the roof of a big"
+ line "building."
+
+ para "That's the POWER"
+ line "PLANT."
+ done
+
+Route10Pokecenter1F_MapEvents:
+ db 0, 0 ; filler
+
+ db 3 ; warp events
+ warp_event 3, 7, ROUTE_10_NORTH, 1
+ warp_event 4, 7, ROUTE_10_NORTH, 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, Route10Pokecenter1FNurseScript, -1
+ object_event 7, 6, SPRITE_GENTLEMAN, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 1, 0, -1, -1, PAL_NPC_RED, OBJECTTYPE_SCRIPT, 0, Route10Pokecenter1FGentlemanScript, -1
+ object_event 7, 2, SPRITE_GYM_GUY, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, PAL_NPC_GREEN, OBJECTTYPE_SCRIPT, 0, Route10Pokecenter1FGymGuyScript, -1
+ object_event 1, 3, SPRITE_COOLTRAINER_F, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, OBJECTTYPE_SCRIPT, 0, Route10Pokecenter1FCooltrainerFScript, -1
diff --git a/maps/Route10Pokecenter2FBeta.asm b/maps/Route10Pokecenter2FBeta.asm
new file mode 100644
index 00000000..86927bb5
--- /dev/null
+++ b/maps/Route10Pokecenter2FBeta.asm
@@ -0,0 +1,16 @@
+Route10Pokecenter2FBeta_MapScripts:
+ db 0 ; scene scripts
+
+ db 0 ; callbacks
+
+Route10Pokecenter2FBeta_MapEvents:
+ db 0, 0 ; filler
+
+ db 1 ; warp events
+ warp_event 0, 7, ROUTE_10_POKECENTER_1F, 3
+
+ db 0 ; coord events
+
+ db 0 ; bg events
+
+ db 0 ; object events