summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--constants/map_constants.asm3
-rwxr-xr-xengine/specials.asm14
-rw-r--r--main.asm24
-rw-r--r--maps/CopycatsHouse1F.asm88
-rw-r--r--maps/CopycatsHouse2F.asm261
-rw-r--r--maps/FightingDojo.asm58
-rw-r--r--maps/MrPsychicsHouse.asm63
-rw-r--r--maps/Route5CleanseTagHouse.asm76
-rw-r--r--maps/Route5SaffronGate.asm35
-rw-r--r--maps/Route5UndergroundPathEntrance.asm33
-rw-r--r--maps/SaffronGym.asm339
-rw-r--r--maps/SaffronMagnetTrainStation.asm228
-rw-r--r--maps/SaffronMart.asm52
-rw-r--r--maps/SaffronPokecenter1F.asm95
-rw-r--r--maps/SaffronPokecenter2FBeta.asm16
-rw-r--r--maps/SilphCo1F.asm69
16 files changed, 1439 insertions, 15 deletions
diff --git a/constants/map_constants.asm b/constants/map_constants.asm
index a893bad9..8662cea0 100644
--- a/constants/map_constants.asm
+++ b/constants/map_constants.asm
@@ -130,11 +130,10 @@ ENDM
map_const DARK_CAVE_BLACKTHORN_ENTRANCE, 18, 15 ; 79
map_const DRAGONS_DEN_1F, 9, 5 ; 80
map_const DRAGONS_DEN_B1F, 18, 20 ; 81
- map_const DRAGON_SHRINE, 5, 5 ; 82
map_const TOHJO_FALLS, 9, 15 ; 83
map_const DIGLETTS_CAVE, 18, 10 ; 84
map_const MOUNT_MOON, 9, 15 ; 85
- map_const UNDERGROUND, 14, 3 ; 86
+ map_const UNDERGROUND_PATH, 14, 3 ; 86
map_const ROCK_TUNNEL_1F, 18, 15 ; 87
map_const ROCK_TUNNEL_B1F, 18, 15 ; 88
map_const SAFARI_ZONE_FUCHSIA_GATE_BETA, 4, 5 ; 89
diff --git a/engine/specials.asm b/engine/specials.asm
index a715778e..29b6eba9 100755
--- a/engine/specials.asm
+++ b/engine/specials.asm
@@ -120,12 +120,12 @@ SpecialsPointers:
add_special DisplayLinkRecord
add_special GetFirstPokemonHappiness
add_special CheckFirstMonIsEgg
- add_special Function2a9f7
- add_special Function2aa6b
- add_special Function2aab3
- add_special Function14226
- add_special Functionfb94b
- add_special Functionc5d6
+ add_special RandomUnseenWildMon
+ add_special RandomPhoneWildMon
+ add_special RandomPhoneMon
+ add_special LoadUsedSpritesGFX
+ add_special PlaySlowCry
+ add_special SnorlaxAwake
add_special YoungerHaircutBrother
add_special OlderHaircutBrother
add_special DaisysGrooming
@@ -479,7 +479,7 @@ SelectApricornForKurt: ; c5bb (3:45bb)
call TossItem
ret
-Functionc5d6: ; c5d6 (3:45d6)
+SnorlaxAwake: ; c5d6 (3:45d6)
ld a, [wChannelsEnd]
cp $40
jr nz, .asm_c5fb
diff --git a/main.asm b/main.asm
index b5ecb340..925e7ec2 100644
--- a/main.asm
+++ b/main.asm
@@ -684,7 +684,7 @@ Function1415c:: ; 1415c
dr $1415c, $1416d
Function1416d:: ; 1416d
dr $1416d, $14226
-Function14226:
+LoadUsedSpritesGFX:
dr $14226, $14317
DoesSpriteHaveFacings_:: ; 14317
dr $14317, $14334
@@ -848,11 +848,11 @@ InitRoamMons:
dr $2a7d7, $2a8e0
JumpRoamMons:
dr $2a8e0, $2a9f7
-Function2a9f7:
+RandomUnseenWildMon:
dr $2a9f7, $2aa6b
-Function2aa6b:
+RandomPhoneWildMon:
dr $2aa6b, $2aab3
-Function2aab3:
+RandomPhoneMon:
dr $2aab3, $2c000
SECTION "bankb", ROMX, BANK[$b]
@@ -1494,7 +1494,7 @@ Shrink2Pic:
dr $fb64e, $fb7f7
Functionfb7f7:
dr $fb7f7, $fb94b
-Functionfb94b:
+PlaySlowCry:
dr $fb94b, $fb981
NewPokedexEntry:
dr $fb981, $fba12
@@ -1649,7 +1649,19 @@ SECTION "bank60", ROMX, BANK[$60]
dr $180000, $184000
SECTION "bank61", ROMX, BANK[$61]
- dr $184000, $188000
+INCLUDE "maps/FightingDojo.asm"
+INCLUDE "maps/SaffronGym.asm"
+INCLUDE "maps/SaffronMart.asm"
+INCLUDE "maps/SaffronPokecenter1F.asm"
+INCLUDE "maps/SaffronPokecenter2FBeta.asm"
+INCLUDE "maps/MrPsychicsHouse.asm"
+INCLUDE "maps/SaffronMagnetTrainStation.asm"
+INCLUDE "maps/SilphCo1F.asm"
+INCLUDE "maps/CopycatsHouse1F.asm"
+INCLUDE "maps/CopycatsHouse2F.asm"
+INCLUDE "maps/Route5UndergroundPathEntrance.asm"
+INCLUDE "maps/Route5SaffronGate.asm"
+INCLUDE "maps/Route5CleanseTagHouse.asm"
SECTION "bank62", ROMX, BANK[$62]
dr $188000, $18c000
diff --git a/maps/CopycatsHouse1F.asm b/maps/CopycatsHouse1F.asm
new file mode 100644
index 00000000..f35fa487
--- /dev/null
+++ b/maps/CopycatsHouse1F.asm
@@ -0,0 +1,88 @@
+ const_def 2 ; object constants
+ const COPYCATSHOUSE1F_POKEFAN_M
+ const COPYCATSHOUSE1F_POKEFAN_F
+ const COPYCATSHOUSE1F_CLEFAIRY
+
+CopycatsHouse1F_MapScripts:
+ db 0 ; scene scripts
+
+ db 0 ; callbacks
+
+CopycatsHouse1FPokefanMScript:
+ jumptextfaceplayer CopycatsHouse1FPokefanMText
+
+CopycatsHouse1FPokefanFScript:
+ faceplayer
+ opentext
+ checkevent EVENT_RETURNED_MACHINE_PART
+ iftrue .ReturnedMachinePart
+ writetext CopycatsHouse1FPokefanFText
+ waitbutton
+ closetext
+ end
+
+.ReturnedMachinePart:
+ writetext CopycatsHouse1FPokefanFText_ReturnedMachinePart
+ waitbutton
+ closetext
+ end
+
+CopycatsHouse1FBlisseyScript:
+ opentext
+ writetext CopycatsHouse1FBlisseyText
+ cry BLISSEY
+ waitbutton
+ closetext
+ end
+
+CopycatsHouse1FPokefanMText:
+ text "My daughter likes"
+ line "to mimic people."
+
+ para "Her mimicry has"
+ line "earned her the"
+
+ para "nickname COPYCAT"
+ line "around here."
+ done
+
+CopycatsHouse1FPokefanFText:
+ text "My daughter is so"
+ line "self-centered…"
+
+ para "She only has a few"
+ line "friends."
+ done
+
+CopycatsHouse1FPokefanFText_ReturnedMachinePart:
+ text "She recently lost"
+ line "the # DOLL that"
+
+ para "a boy gave her"
+ line "three years ago."
+
+ para "Ever since then,"
+ line "she's gotten even"
+ cont "better at mimicry…"
+ done
+
+CopycatsHouse1FBlisseyText:
+ text "BLISSEY: Bliisii!"
+ done
+
+CopycatsHouse1F_MapEvents:
+ db 0, 0 ; filler
+
+ db 3 ; warp events
+ warp_event 2, 7, SAFFRON_CITY, 8
+ warp_event 3, 7, SAFFRON_CITY, 8
+ warp_event 2, 0, COPYCATS_HOUSE_2F, 1
+
+ db 0 ; coord events
+
+ db 0 ; bg events
+
+ db 3 ; object events
+ object_event 2, 3, SPRITE_POKEFAN_M, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, OBJECTTYPE_SCRIPT, 0, CopycatsHouse1FPokefanMScript, -1
+ object_event 5, 4, SPRITE_POKEFAN_F, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, PAL_NPC_GREEN, OBJECTTYPE_SCRIPT, 0, CopycatsHouse1FPokefanFScript, -1
+ object_event 6, 6, SPRITE_CLEFAIRY, SPRITEMOVEDATA_POKEMON, 0, 0, -1, -1, 0, OBJECTTYPE_SCRIPT, 0, CopycatsHouse1FBlisseyScript, -1
diff --git a/maps/CopycatsHouse2F.asm b/maps/CopycatsHouse2F.asm
new file mode 100644
index 00000000..7127cdd8
--- /dev/null
+++ b/maps/CopycatsHouse2F.asm
@@ -0,0 +1,261 @@
+ const_def 2 ; object constants
+ const COPYCATSHOUSE2F_COPYCAT
+ const COPYCATSHOUSE2F_DODRIO
+ const COPYCATSHOUSE2F_FAIRYDOLL ; lost item
+ const COPYCATSHOUSE2F_MONSTERDOLL
+ const COPYCATSHOUSE2F_BIRDDOLL
+
+CopycatsHouse2F_MapScripts:
+ db 0 ; scene scripts
+
+ db 0 ; callbacks
+
+Copycat:
+ faceplayer
+ checkevent EVENT_GOT_PASS_FROM_COPYCAT
+ iftrue .GotPass
+ checkevent EVENT_RETURNED_LOST_ITEM_TO_COPYCAT
+ iftrue .TryGivePassAgain
+ checkitem LOST_ITEM
+ iftrue .ReturnLostItem
+ applymovement COPYCATSHOUSE2F_COPYCAT, CopycatSpinAroundMovementData
+ faceplayer
+ variablesprite SPRITE_COPYCAT, SPRITE_CHRIS
+ special LoadUsedSpritesGFX
+ checkevent EVENT_RETURNED_MACHINE_PART
+ iftrue .TalkAboutLostItem
+ opentext
+ writetext CopycatText_Male_1
+ waitbutton
+ closetext
+ applymovement COPYCATSHOUSE2F_COPYCAT, CopycatSpinAroundMovementData
+ faceplayer
+ variablesprite SPRITE_COPYCAT, SPRITE_LASS
+ special LoadUsedSpritesGFX
+ opentext
+ writetext CopycatText_QuickMimicking
+ waitbutton
+ closetext
+ end
+
+.TalkAboutLostItem:
+ opentext
+ writetext CopycatText_Male_2
+ waitbutton
+ closetext
+ applymovement COPYCATSHOUSE2F_COPYCAT, CopycatSpinAroundMovementData
+ faceplayer
+ variablesprite SPRITE_COPYCAT, SPRITE_LASS
+ special LoadUsedSpritesGFX
+ opentext
+ writetext CopycatText_Worried
+ waitbutton
+ closetext
+ setevent EVENT_MET_COPYCAT_FOUND_OUT_ABOUT_LOST_ITEM
+ end
+
+.ReturnLostItem:
+ opentext
+ writetext CopycatText_GiveDoll
+ buttonsound
+ takeitem LOST_ITEM
+ setevent EVENT_RETURNED_LOST_ITEM_TO_COPYCAT
+ clearevent EVENT_COPYCATS_HOUSE_2F_DOLL
+ jump .GivePass
+
+.TryGivePassAgain:
+ opentext
+.GivePass:
+ writetext CopycatText_GivePass
+ buttonsound
+ verbosegiveitem PASS
+ iffalse .Cancel
+ setevent EVENT_GOT_PASS_FROM_COPYCAT
+ writetext CopycatText_ExplainPass
+ waitbutton
+ closetext
+ end
+
+.GotPass:
+ applymovement COPYCATSHOUSE2F_COPYCAT, CopycatSpinAroundMovementData
+ faceplayer
+ variablesprite SPRITE_COPYCAT, SPRITE_CHRIS
+ special LoadUsedSpritesGFX
+ opentext
+ writetext CopycatText_Male_3
+ waitbutton
+ closetext
+ applymovement COPYCATSHOUSE2F_COPYCAT, CopycatSpinAroundMovementData
+ faceplayer
+ variablesprite SPRITE_COPYCAT, SPRITE_LASS
+ special LoadUsedSpritesGFX
+ opentext
+ writetext CopycatText_ItsAScream
+ waitbutton
+.Cancel:
+ closetext
+ end
+
+CopycatsDodrio:
+ opentext
+ writetext CopycatsDodrioText1
+ cry DODRIO
+ buttonsound
+ writetext CopycatsDodrioText2
+ waitbutton
+ closetext
+ end
+
+CopycatsHouse2FDoll:
+ jumptext CopycatsHouse2FDollText
+
+CopycatsHouse2FBookshelf:
+ jumpstd picturebookshelf
+
+CopycatSpinAroundMovementData:
+ turn_head DOWN
+ turn_head LEFT
+ turn_head UP
+ turn_head RIGHT
+ turn_head DOWN
+ turn_head LEFT
+ turn_head UP
+ turn_head RIGHT
+ turn_head DOWN
+ step_end
+
+CopycatText_Male_1:
+ text "<PLAYER>: Hi! Do"
+ line "you like #MON?"
+
+ para "<PLAYER>: Uh, no, I"
+ line "just asked you."
+
+ para "<PLAYER>: Huh?"
+ line "You're strange!"
+ done
+
+CopycatText_QuickMimicking:
+ text "COPYCAT: Hmm?"
+ line "Quit mimicking?"
+
+ para "But that's my"
+ line "favorite hobby!"
+ done
+
+CopycatText_Male_2:
+ text "<PLAYER>: Hi!"
+ line "I heard that you"
+
+ para "lost your favorite"
+ line "# DOLL."
+
+ para "<PLAYER>: If I find"
+ line "it, you'll give me"
+ cont "a rail PASS?"
+
+ para "<PLAYER>: I'll go"
+ line "find it for you."
+
+ para "You think you lost"
+ line "it when you went"
+ cont "to VERMILION CITY?"
+ done
+
+CopycatText_Worried:
+ text "COPYCAT: Pardon?"
+
+ para "I shouldn't decide"
+ line "what you should"
+ cont "do?"
+
+ para "But I'm really"
+ line "worried… What if"
+ cont "someone finds it?"
+ done
+
+CopycatText_GiveDoll:
+ text "COPYCAT: Yay!"
+ line "That's my CLEFAIRY"
+ cont "# DOLL!"
+
+ para "See the tear where"
+ line "the right leg is"
+
+ para "sewn on? That's"
+ line "proof!"
+ done
+
+CopycatText_GivePass:
+ text "OK. Here's the"
+ line "MAGNET TRAIN PASS"
+ cont "like I promised!"
+ done
+
+CopycatText_ExplainPass:
+ text "COPYCAT: That's"
+ line "the PASS for the"
+ cont "MAGNET TRAIN."
+
+ para "The rail company"
+ line "man gave me that"
+
+ para "when they tore"
+ line "down our old house"
+ cont "for the STATION."
+ done
+
+CopycatText_Male_3:
+ text "<PLAYER>: Hi!"
+ line "Thanks a lot for"
+ cont "the rail PASS!"
+
+ para "<PLAYER>: Pardon?"
+
+ para "<PLAYER>: Is it"
+ line "that fun to mimic"
+ cont "my every move?"
+ done
+
+CopycatText_ItsAScream:
+ text "COPYCAT: You bet!"
+ line "It's a scream!"
+ done
+
+CopycatsDodrioText1:
+ text "DODRIO: Gii giii!"
+ done
+
+CopycatsDodrioText2:
+ text "MIRROR, MIRROR ON"
+ line "THE WALL, WHO'S"
+
+ para "THE FAIREST ONE OF"
+ line "ALL?"
+ done
+
+CopycatsHouse2FDollText:
+ text "This is a rare"
+ line "#MON! Huh?"
+
+ para "It's only a doll…"
+ done
+
+CopycatsHouse2F_MapEvents:
+ db 0, 0 ; filler
+
+ db 1 ; warp events
+ warp_event 3, 0, COPYCATS_HOUSE_1F, 3
+
+ db 0 ; coord events
+
+ db 2 ; bg events
+ bg_event 0, 1, BGEVENT_READ, CopycatsHouse2FBookshelf
+ bg_event 1, 1, BGEVENT_READ, CopycatsHouse2FBookshelf
+
+ db 5 ; object events
+ object_event 4, 3, SPRITE_COPYCAT, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, PAL_NPC_RED, OBJECTTYPE_SCRIPT, 0, Copycat, -1
+ object_event 6, 4, SPRITE_MOLTRES, SPRITEMOVEDATA_POKEMON, 0, 0, -1, -1, PAL_NPC_BROWN, OBJECTTYPE_SCRIPT, 0, CopycatsDodrio, -1
+ object_event 6, 1, SPRITE_FAIRY, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, PAL_NPC_RED, OBJECTTYPE_SCRIPT, 0, CopycatsHouse2FDoll, EVENT_COPYCATS_HOUSE_2F_DOLL
+ object_event 2, 1, SPRITE_MONSTER, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, PAL_NPC_GREEN, OBJECTTYPE_SCRIPT, 0, CopycatsHouse2FDoll, -1
+ object_event 7, 1, SPRITE_BIRD, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, PAL_NPC_BLUE, OBJECTTYPE_SCRIPT, 0, CopycatsHouse2FDoll, -1
diff --git a/maps/FightingDojo.asm b/maps/FightingDojo.asm
new file mode 100644
index 00000000..e097febb
--- /dev/null
+++ b/maps/FightingDojo.asm
@@ -0,0 +1,58 @@
+ const_def 2 ; object constants
+ const FIGHTINGDOJO_BLACK_BELT
+ const FIGHTINGDOJO_POKE_BALL
+
+FightingDojo_MapScripts:
+ db 0 ; scene scripts
+
+ db 0 ; callbacks
+
+FightingDojoBlackBelt:
+ jumptextfaceplayer FightingDojoBlackBeltText
+
+FightingDojoSign1:
+ jumptext FightingDojoSign1Text
+
+FightingDojoSign2:
+ jumptext FightingDojoSign2Text
+
+FightingDojoFocusBand:
+ itemball FOCUS_BAND
+
+FightingDojoBlackBeltText:
+ text "Hello!"
+
+ para "KARATE KING, the"
+ line "FIGHTING DOJO's"
+
+ para "master, is in a"
+ line "cave in JOHTO for"
+ cont "training."
+ done
+
+FightingDojoSign1Text:
+ text "What goes around"
+ line "comes around!"
+ done
+
+FightingDojoSign2Text:
+ text "Enemies on every"
+ line "side!"
+ done
+
+FightingDojo_MapEvents:
+ db 0, 0 ; filler
+
+ db 2 ; warp events
+ warp_event 4, 11, SAFFRON_CITY, 1
+ warp_event 5, 11, SAFFRON_CITY, 1
+
+ db 0 ; coord events
+
+ db 2 ; bg events
+ bg_event 4, 0, BGEVENT_READ, FightingDojoSign1
+ bg_event 5, 0, BGEVENT_READ, FightingDojoSign2
+
+ db 2 ; object events
+ object_event 4, 4, SPRITE_BLACK_BELT, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, PAL_NPC_BLUE, OBJECTTYPE_SCRIPT, 0, FightingDojoBlackBelt, -1
+ object_event 3, 1, SPRITE_POKE_BALL, SPRITEMOVEDATA_STILL, 0, 0, -1, -1, 0, OBJECTTYPE_ITEMBALL, 0, FightingDojoFocusBand, EVENT_PICKED_UP_FOCUS_BAND
diff --git a/maps/MrPsychicsHouse.asm b/maps/MrPsychicsHouse.asm
new file mode 100644
index 00000000..264001ac
--- /dev/null
+++ b/maps/MrPsychicsHouse.asm
@@ -0,0 +1,63 @@
+ const_def 2 ; object constants
+ const MRPSYCHICSHOUSE_FISHING_GURU
+
+MrPsychicsHouse_MapScripts:
+ db 0 ; scene scripts
+
+ db 0 ; callbacks
+
+MrPsychic:
+ faceplayer
+ opentext
+ checkevent EVENT_GOT_TM29_PSYCHIC
+ iftrue .AlreadyGotItem
+ writetext MrPsychicText1
+ buttonsound
+ verbosegiveitem TM_PSYCHIC
+ iffalse .Done
+ setevent EVENT_GOT_TM29_PSYCHIC
+.AlreadyGotItem:
+ writetext MrPsychicText2
+ waitbutton
+.Done:
+ closetext
+ end
+
+MrPsychicsHouseBookshelf:
+ jumpstd difficultbookshelf
+
+MrPsychicText1:
+ text "…"
+
+ para "…"
+
+ para "…"
+
+ para "…I got it!"
+
+ para "You wanted this!"
+ done
+
+MrPsychicText2:
+ text "TM29 is PSYCHIC."
+
+ para "It may lower the"
+ line "target's SPECIAL"
+ cont "abilities."
+ done
+
+MrPsychicsHouse_MapEvents:
+ db 0, 0 ; filler
+
+ db 2 ; warp events
+ warp_event 2, 7, SAFFRON_CITY, 5
+ warp_event 3, 7, SAFFRON_CITY, 5
+
+ db 0 ; coord events
+
+ db 2 ; bg events
+ bg_event 0, 1, BGEVENT_READ, MrPsychicsHouseBookshelf
+ bg_event 1, 1, BGEVENT_READ, MrPsychicsHouseBookshelf
+
+ db 1 ; object events
+ object_event 5, 3, SPRITE_FISHING_GURU, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, PAL_NPC_GREEN, OBJECTTYPE_SCRIPT, 0, MrPsychic, -1
diff --git a/maps/Route5CleanseTagHouse.asm b/maps/Route5CleanseTagHouse.asm
new file mode 100644
index 00000000..90554d1a
--- /dev/null
+++ b/maps/Route5CleanseTagHouse.asm
@@ -0,0 +1,76 @@
+ const_def 2 ; object constants
+ const ROUTE5CLEANSETAGHOUSE_GRANNY
+ const ROUTE5CLEANSETAGHOUSE_TEACHER
+
+Route5CleanseTagHouse_MapScripts:
+ db 0 ; scene scripts
+
+ db 0 ; callbacks
+
+Route5CleanseTagHouseGrannyScript:
+ faceplayer
+ opentext
+ checkevent EVENT_GOT_CLEANSE_TAG
+ iftrue .GotCleanseTag
+ writetext Route5CleanseTagHouseGrannyText1
+ buttonsound
+ verbosegiveitem CLEANSE_TAG
+ iffalse .NoRoom
+ setevent EVENT_GOT_CLEANSE_TAG
+.GotCleanseTag:
+ writetext Route5CleanseTagHouseGrannyText2
+ waitbutton
+.NoRoom:
+ closetext
+ end
+
+Route5CleanseTagHouseTeacherScript:
+ jumptextfaceplayer Route5CleanseTagHouseTeacherText
+
+HouseForSaleBookshelf:
+ jumpstd difficultbookshelf
+
+Route5CleanseTagHouseGrannyText1:
+ text "Eeyaaaah!"
+
+ para "I sense a sinister"
+ line "shadow hovering"
+ cont "over you."
+
+ para "Take this to ward"
+ line "it off!"
+ done
+
+Route5CleanseTagHouseGrannyText2:
+ text "You were in mortal"
+ line "danger, but you"
+ cont "are protected now."
+ done
+
+Route5CleanseTagHouseTeacherText:
+ text "My Grandma is into"
+ line "warding off what"
+
+ para "she believes to be"
+ line "evil spirits."
+
+ para "I'm sorry that she"
+ line "startled you."
+ done
+
+Route5CleanseTagHouse_MapEvents:
+ db 0, 0 ; filler
+
+ db 2 ; warp events
+ warp_event 2, 7, ROUTE_5, 4
+ warp_event 3, 7, ROUTE_5, 4
+
+ db 0 ; coord events
+
+ db 2 ; bg events
+ bg_event 0, 1, BGEVENT_READ, HouseForSaleBookshelf
+ bg_event 1, 1, BGEVENT_READ, HouseForSaleBookshelf
+
+ db 2 ; object events
+ object_event 2, 5, SPRITE_GRANNY, SPRITEMOVEDATA_SPINCLOCKWISE, 0, 0, -1, -1, PAL_NPC_BROWN, OBJECTTYPE_SCRIPT, 0, Route5CleanseTagHouseGrannyScript, -1
+ object_event 5, 3, SPRITE_TEACHER, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, PAL_NPC_RED, OBJECTTYPE_SCRIPT, 0, Route5CleanseTagHouseTeacherScript, -1
diff --git a/maps/Route5SaffronGate.asm b/maps/Route5SaffronGate.asm
new file mode 100644
index 00000000..3a0161af
--- /dev/null
+++ b/maps/Route5SaffronGate.asm
@@ -0,0 +1,35 @@
+ const_def 2 ; object constants
+ const ROUTE5SAFFRONGATE_OFFICER
+
+Route5SaffronGate_MapScripts:
+ db 0 ; scene scripts
+
+ db 0 ; callbacks
+
+Route5SaffronGateOfficerScript:
+ jumptextfaceplayer Route5SaffronGateOfficerText
+
+Route5SaffronGateOfficerText:
+ text "You're from JOHTO,"
+ line "aren't you?"
+
+ para "How do you like"
+ line "KANTO? It's nice,"
+ cont "don't you agree?"
+ done
+
+Route5SaffronGate_MapEvents:
+ db 0, 0 ; filler
+
+ db 4 ; warp events
+ warp_event 4, 0, ROUTE_5, 2
+ warp_event 5, 0, ROUTE_5, 3
+ warp_event 4, 7, SAFFRON_CITY, 9
+ warp_event 5, 7, SAFFRON_CITY, 9
+
+ db 0 ; coord events
+
+ db 0 ; bg events
+
+ db 1 ; object events
+ object_event 0, 4, SPRITE_OFFICER, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, PAL_NPC_BLUE, OBJECTTYPE_SCRIPT, 0, Route5SaffronGateOfficerScript, -1
diff --git a/maps/Route5UndergroundPathEntrance.asm b/maps/Route5UndergroundPathEntrance.asm
new file mode 100644
index 00000000..d62a042b
--- /dev/null
+++ b/maps/Route5UndergroundPathEntrance.asm
@@ -0,0 +1,33 @@
+ const_def 2 ; object constants
+ const ROUTE5UNDERGROUNDPATHENTRANCE_TEACHER
+
+Route5UndergroundPathEntrance_MapScripts:
+ db 0 ; scene scripts
+
+ db 0 ; callbacks
+
+Route5UndergroundPathEntranceTeacherScript:
+ jumptextfaceplayer Route5UndergroundPathEntranceTeacherText
+
+Route5UndergroundPathEntranceTeacherText:
+ text "Many cities in"
+ line "JOHTO have long"
+
+ para "histories. I'd"
+ line "love to visit!"
+ done
+
+Route5UndergroundPathEntrance_MapEvents:
+ db 0, 0 ; filler
+
+ db 3 ; warp events
+ warp_event 3, 7, ROUTE_5, 1
+ warp_event 4, 7, ROUTE_5, 1
+ warp_event 4, 3, UNDERGROUND_PATH, 1
+
+ db 0 ; coord events
+
+ db 0 ; bg events
+
+ db 1 ; object events
+ object_event 2, 2, SPRITE_TEACHER, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, PAL_NPC_GREEN, OBJECTTYPE_SCRIPT, 0, Route5UndergroundPathEntranceTeacherScript, -1
diff --git a/maps/SaffronGym.asm b/maps/SaffronGym.asm
new file mode 100644
index 00000000..c495d110
--- /dev/null
+++ b/maps/SaffronGym.asm
@@ -0,0 +1,339 @@
+ const_def 2 ; object constants
+ const SAFFRONGYM_SABRINA
+ const SAFFRONGYM_GRANNY1
+ const SAFFRONGYM_YOUNGSTER1
+ const SAFFRONGYM_GRANNY2
+ const SAFFRONGYM_YOUNGSTER2
+ const SAFFRONGYM_GYM_GUY
+
+SaffronGym_MapScripts:
+ db 0 ; scene scripts
+
+ db 0 ; callbacks
+
+SaffronGymSabrinaScript:
+ faceplayer
+ opentext
+ checkflag ENGINE_MARSHBADGE
+ iftrue .FightDone
+ writetext UnknownText_0x189cdf
+ waitbutton
+ closetext
+ winlosstext UnknownText_0x189df4, 0
+ loadtrainer SABRINA, SABRINA1
+ startbattle
+ reloadmapafterbattle
+ setevent EVENT_BEAT_SABRINA
+ setevent EVENT_BEAT_MEDIUM_REBECCA
+ setevent EVENT_BEAT_MEDIUM_DORIS
+ setevent EVENT_BEAT_PSYCHIC_FRANKLIN
+ setevent EVENT_BEAT_PSYCHIC_JARED
+ opentext
+ writetext UnknownText_0x189e95
+ playsound SFX_GET_BADGE
+ waitsfx
+ setflag ENGINE_MARSHBADGE
+ writetext UnknownText_0x189ead
+ waitbutton
+ closetext
+ end
+
+.FightDone:
+ writetext UnknownText_0x189f6c
+ waitbutton
+ closetext
+ end
+
+TrainerMediumRebecca:
+ trainer MEDIUM, REBECCA, EVENT_BEAT_MEDIUM_REBECCA, MediumRebeccaSeenText, MediumRebeccaBeatenText, 0, .Script
+
+.Script:
+ endifjustbattled
+ opentext
+ writetext MediumRebeccaAfterBattleText
+ waitbutton
+ closetext
+ end
+
+TrainerPsychicFranklin:
+ trainer PSYCHIC_T, FRANKLIN, EVENT_BEAT_PSYCHIC_FRANKLIN, PsychicFranklinSeenText, PsychicFranklinBeatenText, 0, .Script
+
+.Script:
+ endifjustbattled
+ opentext
+ writetext PsychicFranklinAfterBattleText
+ waitbutton
+ closetext
+ end
+
+TrainerMediumDoris:
+ trainer MEDIUM, DORIS, EVENT_BEAT_MEDIUM_DORIS, MediumDorisSeenText, MediumDorisBeatenText, 0, .Script
+
+.Script:
+ endifjustbattled
+ opentext
+ writetext MediumDorisAfterBattleText
+ waitbutton
+ closetext
+ end
+
+TrainerPsychicJared:
+ trainer PSYCHIC_T, JARED, EVENT_BEAT_PSYCHIC_JARED, PsychicJaredSeenText, PsychicJaredBeatenText, 0, .Script
+
+.Script:
+ endifjustbattled
+ opentext
+ writetext PsychicJaredAfterBattleText
+ waitbutton
+ closetext
+ end
+
+SaffronGymGuyScript:
+ faceplayer
+ opentext
+ checkevent EVENT_BEAT_SABRINA
+ iftrue .SaffronGymGuyWinScript
+ writetext SaffronGymGuyText
+ waitbutton
+ closetext
+ end
+
+.SaffronGymGuyWinScript:
+ writetext SaffronGymGuyWinText
+ waitbutton
+ closetext
+ end
+
+SaffronGymStatue:
+ checkflag ENGINE_MARSHBADGE
+ iftrue .Beaten
+ jumpstd gymstatue1
+.Beaten:
+ trainertotext SABRINA, SABRINA1, MEM_BUFFER_1
+ jumpstd gymstatue2
+
+UnknownText_0x189cdf:
+ text "SABRINA: I knew"
+ line "you were coming…"
+
+ para "Three years ago I"
+ line "had a vision of"
+ cont "your arrival."
+
+ para "You're after my"
+ line "BADGE."
+
+ para "I don't enjoy bat-"
+ line "tling, but it's my"
+
+ para "duty as a LEADER"
+ line "to confer BADGES"
+
+ para "on anyone who has"
+ line "proven him- or"
+ cont "herself worthy."
+
+ para "Since you wish it,"
+ line "I will show you my"
+ cont "psychic powers!"
+ done
+
+UnknownText_0x189df4:
+ text "SABRINA: Your"
+ line "power…"
+
+ para "It far exceeds"
+ line "what I foresaw…"
+
+ para "Maybe it isn't"
+ line "possible to fully"
+
+ para "predict what the"
+ line "future holds…"
+
+ para "OK, you win. You"
+ line "earned yourself"
+ cont "MARSHBADGE."
+ done
+
+UnknownText_0x189e95:
+ text "<PLAYER> received"
+ line "MARSHBADGE."
+ done
+
+UnknownText_0x189ead:
+ text "SABRINA: MARSH-"
+ line "BADGE draws out"
+
+ para "your subliminal"
+ line "powers…"
+
+ para "Although I failed"
+ line "to accurately pre-"
+ cont "dict your power,"
+ cont "this much I know"
+ cont "to be true."
+
+ para "You will become a"
+ line "celebrated and"
+ cont "beloved CHAMPION!"
+ done
+
+UnknownText_0x189f6c:
+ text "SABRINA: Your love"
+ line "for your #MON"
+
+ para "overwhelmed my"
+ line "psychic power…"
+
+ para "The power of love,"
+ line "I think, is also a"
+
+ para "kind of psychic"
+ line "power…"
+ done
+
+MediumRebeccaSeenText:
+ text "The power of all"
+ line "those you defeated"
+ cont "comes to me!"
+ done
+
+MediumRebeccaBeatenText:
+ text "Strong…"
+ line "Far too strong…"
+ done
+
+MediumRebeccaAfterBattleText:
+ text "What is the source"
+ line "of your power?"
+ done
+
+PsychicFranklinSeenText:
+ text "Psychic power is"
+ line "the power of your"
+ cont "soul."
+ done
+
+PsychicFranklinBeatenText:
+ text "Your soul has more"
+ line "power than mine!"
+ done
+
+PsychicFranklinAfterBattleText:
+ text "You made your soul"
+ line "stronger, not just"
+ cont "your abilities."
+ done
+
+MediumDorisSeenText:
+ text "Fufufufu…"
+ line "I see it clearly."
+
+ para "I can see into"
+ line "your soul!"
+ done
+
+MediumDorisBeatenText:
+ text "Though I read you,"
+ line "I still lost…"
+ done
+
+MediumDorisAfterBattleText:
+ text "Darn! I forgot"
+ line "that I predicted I"
+ cont "would lose to you."
+ done
+
+PsychicJaredSeenText:
+ text "The FIGHTING DOJO"
+ line "next door was once"
+ cont "this city's GYM."
+ done
+
+PsychicJaredBeatenText:
+ text "I was no match…"
+ done
+
+PsychicJaredAfterBattleText:
+ text "KARATE KING, the"
+ line "master of the"
+
+ para "FIGHTING DOJO, was"
+ line "just destroyed by"
+ cont "SABRINA."
+ done
+
+SaffronGymGuyText:
+ text "Yo, CHAMP in"
+ line "making!"
+
+ para "A trainer as"
+ line "skilled as you"
+
+ para "doesn't need to be"
+ line "told how to deal"
+
+ para "with psychic-type"
+ line "#MON, right?"
+
+ para "I expect great"
+ line "things from you!"
+
+ para "Good luck!"
+ done
+
+SaffronGymGuyWinText:
+ text "That was another"
+ line "fantastic battle!"
+ done
+
+SaffronGym_MapEvents:
+ db 0, 0 ; filler
+
+ db 32 ; warp events
+ warp_event 8, 17, SAFFRON_CITY, 2
+ warp_event 9, 17, SAFFRON_CITY, 2
+ warp_event 11, 15, SAFFRON_GYM, 18
+ warp_event 19, 15, SAFFRON_GYM, 19
+ warp_event 19, 11, SAFFRON_GYM, 20
+ warp_event 1, 11, SAFFRON_GYM, 21
+ warp_event 5, 3, SAFFRON_GYM, 22
+ warp_event 11, 5, SAFFRON_GYM, 23
+ warp_event 1, 15, SAFFRON_GYM, 24
+ warp_event 19, 3, SAFFRON_GYM, 25
+ warp_event 15, 17, SAFFRON_GYM, 26
+ warp_event 5, 17, SAFFRON_GYM, 27
+ warp_event 5, 9, SAFFRON_GYM, 28
+ warp_event 9, 3, SAFFRON_GYM, 29
+ warp_event 15, 9, SAFFRON_GYM, 30
+ warp_event 15, 5, SAFFRON_GYM, 31
+ warp_event 1, 5, SAFFRON_GYM, 32
+ warp_event 19, 17, SAFFRON_GYM, 3
+ warp_event 19, 9, SAFFRON_GYM, 4
+ warp_event 1, 9, SAFFRON_GYM, 5
+ warp_event 5, 5, SAFFRON_GYM, 6
+ warp_event 11, 3, SAFFRON_GYM, 7
+ warp_event 1, 17, SAFFRON_GYM, 8
+ warp_event 19, 5, SAFFRON_GYM, 9
+ warp_event 15, 15, SAFFRON_GYM, 10
+ warp_event 5, 15, SAFFRON_GYM, 11
+ warp_event 5, 11, SAFFRON_GYM, 12
+ warp_event 9, 5, SAFFRON_GYM, 13
+ warp_event 15, 11, SAFFRON_GYM, 14
+ warp_event 15, 3, SAFFRON_GYM, 15
+ warp_event 1, 3, SAFFRON_GYM, 16
+ warp_event 11, 9, SAFFRON_GYM, 17
+
+ db 0 ; coord events
+
+ db 1 ; bg events
+ bg_event 8, 15, BGEVENT_READ, SaffronGymStatue
+
+ db 6 ; object events
+ object_event 9, 8, SPRITE_SABRINA, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, PAL_NPC_RED, OBJECTTYPE_SCRIPT, 0, SaffronGymSabrinaScript, -1
+ object_event 17, 16, SPRITE_GRANNY, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, PAL_NPC_BROWN, OBJECTTYPE_TRAINER, 3, TrainerMediumRebecca, -1
+ object_event 3, 16, SPRITE_YOUNGSTER, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, PAL_NPC_BLUE, OBJECTTYPE_TRAINER, 3, TrainerPsychicFranklin, -1
+ object_event 3, 4, SPRITE_GRANNY, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, PAL_NPC_BROWN, OBJECTTYPE_TRAINER, 2, TrainerMediumDoris, -1
+ object_event 17, 4, SPRITE_YOUNGSTER, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, PAL_NPC_BLUE, OBJECTTYPE_TRAINER, 2, TrainerPsychicJared, -1
+ object_event 9, 14, SPRITE_GYM_GUY, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, PAL_NPC_BLUE, OBJECTTYPE_SCRIPT, 0, SaffronGymGuyScript, -1
diff --git a/maps/SaffronMagnetTrainStation.asm b/maps/SaffronMagnetTrainStation.asm
new file mode 100644
index 00000000..c8823fe0
--- /dev/null
+++ b/maps/SaffronMagnetTrainStation.asm
@@ -0,0 +1,228 @@
+ const_def 2 ; object constants
+ const SAFFRONMAGNETTRAINSTATION_OFFICER
+ const SAFFRONMAGNETTRAINSTATION_GYM_GUY
+ const SAFFRONMAGNETTRAINSTATION_TEACHER
+ const SAFFRONMAGNETTRAINSTATION_LASS
+
+SaffronMagnetTrainStation_MapScripts:
+ db 1 ; scene scripts
+ scene_script .DummyScene ; SCENE_DEFAULT
+
+ db 0 ; callbacks
+
+.DummyScene:
+ end
+
+SaffronMagnetTrainStationOfficerScript:
+ faceplayer
+ opentext
+ checkevent EVENT_RESTORED_POWER_TO_KANTO
+ iftrue .MagnetTrainToGoldenrod
+ writetext UnknownText_0x18a8a9
+ waitbutton
+ closetext
+ end
+
+.MagnetTrainToGoldenrod:
+ writetext UnknownText_0x18a8dd
+ yesorno
+ iffalse .DecidedNotToRide
+ checkitem PASS
+ iffalse .PassNotInBag
+ writetext UnknownText_0x18a917
+ waitbutton
+ closetext
+ applymovement SAFFRONMAGNETTRAINSTATION_OFFICER, MovementData_0x18a88f
+ applymovement PLAYER, MovementData_0x18a898
+ writebyte TRUE
+ special MagnetTrain
+ warpcheck
+ newloadmap MAPSETUP_TRAIN
+ end
+
+.PassNotInBag:
+ writetext UnknownText_0x18a956
+ waitbutton
+ closetext
+ end
+
+.DecidedNotToRide:
+ writetext UnknownText_0x18a978
+ waitbutton
+ closetext
+ end
+
+Script_ArriveFromGoldenrod:
+ applymovement SAFFRONMAGNETTRAINSTATION_OFFICER, MovementData_0x18a88f
+ applymovement PLAYER, MovementData_0x18a8a1
+ applymovement SAFFRONMAGNETTRAINSTATION_OFFICER, MovementData_0x18a894
+ opentext
+ writetext UnknownText_0x18a993
+ waitbutton
+ closetext
+ end
+
+SaffronMagnetTrainStationGymGuyScript:
+ faceplayer
+ opentext
+ checkevent EVENT_RETURNED_MACHINE_PART
+ iftrue .ReturnedMachinePart
+ writetext SaffronMagnetTrainStationGymGuyText
+ waitbutton
+ closetext
+ end
+
+.ReturnedMachinePart:
+ writetext SaffronMagnetTrainStationGymGuyText_ReturnedMachinePart
+ waitbutton
+ closetext
+ end
+
+SaffronMagnetTrainStationTeacherScript:
+ jumptextfaceplayer SaffronMagnetTrainStationTeacherText
+
+SaffronMagnetTrainStationLassScript:
+ jumptextfaceplayer SaffronMagnetTrainStationLassText
+
+MovementData_0x18a88f:
+ step UP
+ step UP
+ step RIGHT
+ turn_head LEFT
+ step_end
+
+MovementData_0x18a894:
+ step LEFT
+ step DOWN
+ step DOWN
+ step_end
+
+MovementData_0x18a898:
+ step UP
+ step UP
+ step UP
+ step LEFT
+ step LEFT
+ step LEFT
+ step UP
+ step UP
+ step_end
+
+MovementData_0x18a8a1:
+ step LEFT
+ step LEFT
+ step DOWN
+ step DOWN
+ step DOWN
+ step DOWN
+ turn_head UP
+ step_end
+
+UnknownText_0x18a8a9:
+ text "I'm sorry, but the"
+ line "MAGNET TRAIN isn't"
+ cont "operating now."
+ done
+
+UnknownText_0x18a8dd:
+ text "We'll soon depart"
+ line "for GOLDENROD."
+
+ para "Are you coming on"
+ line "board?"
+ done
+
+UnknownText_0x18a917:
+ text "May I see your"
+ line "rail PASS, please?"
+
+ para "OK. Right this"
+ line "way, sir."
+ done
+
+UnknownText_0x18a956:
+ text "Sorry, but you"
+ line "don't have a PASS."
+ done
+
+UnknownText_0x18a978:
+ text "We hope to see you"
+ line "again."
+ done
+
+UnknownText_0x18a993:
+ text "We have arrived in"
+ line "SAFFRON."
+
+ para "We hope to see you"
+ line "again."
+ done
+
+SaffronMagnetTrainStationGymGuyText:
+ text "The MAGNET TRAIN"
+ line "is a super-modern"
+
+ para "rail liner that"
+ line "uses electricity"
+
+ para "and magnets to"
+ line "attain incredible"
+ cont "speed."
+
+ para "However, if there"
+ line "isn't any elec-"
+ cont "tricity…"
+ done
+
+SaffronMagnetTrainStationGymGuyText_ReturnedMachinePart:
+ text "Whew…"
+
+ para "How many times"
+ line "have I gone back"
+
+ para "and forth between"
+ line "KANTO and JOHTO?"
+ done
+
+SaffronMagnetTrainStationTeacherText:
+ text "Before the MAGNET"
+ line "TRAIN STATION was"
+
+ para "built, there was a"
+ line "house there."
+
+ para "A little girl"
+ line "named COPYCAT used"
+ cont "to live there."
+ done
+
+SaffronMagnetTrainStationLassText:
+ text "Hi. Do you have a"
+ line "rail PASS? I have"
+
+ para "one. All the peo-"
+ line "ple in SAFFRON who"
+
+ para "ride the MAGNET"
+ line "TRAIN have PASSES."
+ done
+
+SaffronMagnetTrainStation_MapEvents:
+ db 0, 0 ; filler
+
+ db 4 ; warp events
+ warp_event 8, 17, SAFFRON_CITY, 6
+ warp_event 9, 17, SAFFRON_CITY, 6
+ warp_event 6, 5, GOLDENROD_MAGNET_TRAIN_STATION, 4
+ warp_event 11, 5, GOLDENROD_MAGNET_TRAIN_STATION, 3
+
+ db 1 ; coord events
+ coord_event 11, 6, SCENE_DEFAULT, Script_ArriveFromGoldenrod
+
+ db 0 ; bg events
+
+ db 4 ; object events
+ object_event 9, 9, SPRITE_OFFICER, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, OBJECTTYPE_SCRIPT, 0, SaffronMagnetTrainStationOfficerScript, -1
+ object_event 10, 14, SPRITE_GYM_GUY, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, 0, OBJECTTYPE_SCRIPT, 0, SaffronMagnetTrainStationGymGuyScript, -1
+ object_event 6, 11, SPRITE_TEACHER, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, OBJECTTYPE_SCRIPT, 0, SaffronMagnetTrainStationTeacherScript, EVENT_SAFFRON_TRAIN_STATION_POPULATION
+ object_event 6, 10, SPRITE_LASS, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, PAL_NPC_GREEN, OBJECTTYPE_SCRIPT, 0, SaffronMagnetTrainStationLassScript, EVENT_SAFFRON_TRAIN_STATION_POPULATION
diff --git a/maps/SaffronMart.asm b/maps/SaffronMart.asm
new file mode 100644
index 00000000..55e078d8
--- /dev/null
+++ b/maps/SaffronMart.asm
@@ -0,0 +1,52 @@
+ const_def 2 ; object constants
+ const SAFFRONMART_CLERK
+ const SAFFRONMART_COOLTRAINER_M
+ const SAFFRONMART_COOLTRAINER_F
+
+SaffronMart_MapScripts:
+ db 0 ; scene scripts
+
+ db 0 ; callbacks
+
+SaffronMartClerkScript:
+ opentext
+ pokemart MARTTYPE_STANDARD, MART_SAFFRON
+ closetext
+ end
+
+SaffronMartCooltrainerMScript:
+ jumptextfaceplayer SaffronMartCooltrainerMText
+
+SaffronMartCooltrainerFScript:
+ jumptextfaceplayer SaffronMartCooltrainerFText
+
+SaffronMartCooltrainerMText:
+ text "There's a big"
+ line "RADIO TOWER in"
+ cont "LAVENDER."
+ done
+
+SaffronMartCooltrainerFText:
+ text "I want to become"
+ line "stronger, but I'm"
+ cont "not good yet…"
+
+ para "Could you show me"
+ line "how sometime?"
+ done
+
+SaffronMart_MapEvents:
+ db 0, 0 ; filler
+
+ db 2 ; warp events
+ warp_event 2, 7, SAFFRON_CITY, 3
+ warp_event 3, 7, SAFFRON_CITY, 3
+
+ 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, SaffronMartClerkScript, -1
+ object_event 7, 2, SPRITE_COOLTRAINER_M, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, PAL_NPC_BROWN, OBJECTTYPE_SCRIPT, 0, SaffronMartCooltrainerMScript, -1
+ object_event 7, 6, SPRITE_COOLTRAINER_F, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 1, 0, -1, -1, PAL_NPC_GREEN, OBJECTTYPE_SCRIPT, 0, SaffronMartCooltrainerFScript, -1
diff --git a/maps/SaffronPokecenter1F.asm b/maps/SaffronPokecenter1F.asm
new file mode 100644
index 00000000..b403b37e
--- /dev/null
+++ b/maps/SaffronPokecenter1F.asm
@@ -0,0 +1,95 @@
+ const_def 2 ; object constants
+ const SAFFRONPOKECENTER1F_NURSE
+ const SAFFRONPOKECENTER1F_TEACHER
+ const SAFFRONPOKECENTER1F_FISHER
+ const SAFFRONPOKECENTER1F_YOUNGSTER
+
+SaffronPokecenter1F_MapScripts:
+ db 0 ; scene scripts
+
+ db 0 ; callbacks
+
+SaffronPokecenter1FNurseScript:
+ jumpstd pokecenternurse
+
+SaffronPokecenter1FTeacherScript:
+ jumptextfaceplayer UnknownText_0x18a4a3
+
+SaffronPokecenter1FFisherScript:
+ faceplayer
+ opentext
+ checkevent EVENT_RETURNED_MACHINE_PART
+ iftrue .SolvedKantoPowerCrisis
+ writetext UnknownText_0x18a5d3
+ waitbutton
+ closetext
+ end
+
+.SolvedKantoPowerCrisis:
+ writetext UnknownText_0x18a62e
+ waitbutton
+ closetext
+ end
+
+SaffronPokecenter1FYoungsterScript:
+ jumptextfaceplayer SaffronPokecenter1FYoungsterText
+
+UnknownText_0x18a4a3:
+ text "There's a huge"
+ line "POWER PLANT north"
+ cont "of LAVENDER TOWN."
+ done
+
+UnknownText_0x18a5d3:
+ text "I just happened to"
+ line "come through ROCK"
+
+ para "TUNNEL. There was"
+ line "some commotion at"
+ cont "the POWER PLANT."
+ done
+
+UnknownText_0x18a62e:
+ text "Caves collapse"
+ line "easily."
+
+ para "Several caves have"
+ line "disappeared in the"
+
+ para "past few years,"
+ line "like the one out-"
+ cont "side CERULEAN."
+
+ para "As a pro HIKER,"
+ line "that's common"
+ cont "knowledge."
+ done
+
+SaffronPokecenter1FYoungsterText:
+ text "SILPH CO.'s HEAD"
+ line "OFFICE and the"
+
+ para "MAGNET TRAIN STA-"
+ line "TION--they're the"
+
+ para "places to see in"
+ line "SAFFRON."
+ done
+
+SaffronPokecenter1F_MapEvents:
+ db 0, 0 ; filler
+
+ db 3 ; warp events
+ warp_event 3, 7, SAFFRON_CITY, 4
+ warp_event 4, 7, SAFFRON_CITY, 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, SaffronPokecenter1FNurseScript, -1
+ object_event 7, 2, SPRITE_TEACHER, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, PAL_NPC_GREEN, OBJECTTYPE_SCRIPT, 0, SaffronPokecenter1FTeacherScript, -1
+ object_event 8, 6, SPRITE_FISHER, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, PAL_NPC_RED, OBJECTTYPE_SCRIPT, 0, SaffronPokecenter1FFisherScript, -1
+ object_event 1, 4, SPRITE_YOUNGSTER, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, PAL_NPC_BLUE, OBJECTTYPE_SCRIPT, 0, SaffronPokecenter1FYoungsterScript, -1
diff --git a/maps/SaffronPokecenter2FBeta.asm b/maps/SaffronPokecenter2FBeta.asm
new file mode 100644
index 00000000..912f1281
--- /dev/null
+++ b/maps/SaffronPokecenter2FBeta.asm
@@ -0,0 +1,16 @@
+SaffronPokecenter2FBeta_MapScripts:
+ db 0 ; scene scripts
+
+ db 0 ; callbacks
+
+SaffronPokecenter2FBeta_MapEvents:
+ db 0, 0 ; filler
+
+ db 1 ; warp events
+ warp_event 0, 7, SAFFRON_POKECENTER_1F, 3
+
+ db 0 ; coord events
+
+ db 0 ; bg events
+
+ db 0 ; object events
diff --git a/maps/SilphCo1F.asm b/maps/SilphCo1F.asm
new file mode 100644
index 00000000..d14f19b2
--- /dev/null
+++ b/maps/SilphCo1F.asm
@@ -0,0 +1,69 @@
+ const_def 2 ; object constants
+ const SILPHCO1F_RECEPTIONIST
+ const SILPHCO1F_OFFICER
+
+SilphCo1F_MapScripts:
+ db 0 ; scene scripts
+
+ db 0 ; callbacks
+
+SilphCoReceptionistScript:
+ jumptextfaceplayer SilphCoReceptionistText
+
+SilphCoOfficerScript:
+ faceplayer
+ opentext
+ checkevent EVENT_GOT_UP_GRADE
+ iftrue .GotUpGrade
+ writetext SilphCoOfficerText
+ buttonsound
+ verbosegiveitem UP_GRADE
+ iffalse .NoRoom
+ setevent EVENT_GOT_UP_GRADE
+.GotUpGrade:
+ writetext SilphCoOfficerText_GotUpGrade
+ waitbutton
+.NoRoom:
+ closetext
+ end
+
+SilphCoReceptionistText:
+ text "Welcome. This is"
+ line "SILPH CO.'s HEAD"
+ cont "OFFICE BUILDING."
+ done
+
+SilphCoOfficerText:
+ text "Only employees are"
+ line "permitted to go"
+ cont "upstairs."
+
+ para "But since you came"
+ line "such a long way,"
+
+ para "have this neat"
+ line "little souvenir."
+ done
+
+SilphCoOfficerText_GotUpGrade:
+ text "It's SILPH CO.'s"
+ line "latest product."
+
+ para "It's not for sale"
+ line "anywhere yet."
+ done
+
+SilphCo1F_MapEvents:
+ db 0, 0 ; filler
+
+ db 2 ; warp events
+ warp_event 2, 7, SAFFRON_CITY, 7
+ warp_event 3, 7, SAFFRON_CITY, 7
+
+ db 0 ; coord events
+
+ db 0 ; bg events
+
+ db 2 ; object events
+ object_event 4, 2, SPRITE_RECEPTIONIST, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, PAL_NPC_BLUE, OBJECTTYPE_SCRIPT, 0, SilphCoReceptionistScript, -1
+ object_event 13, 1, SPRITE_OFFICER, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, PAL_NPC_BLUE, OBJECTTYPE_SCRIPT, 0, SilphCoOfficerScript, -1