summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--constants/event_flags.asm40
-rw-r--r--constants/map_constants.asm6
-rw-r--r--constants/wram_constants.asm13
-rw-r--r--home/map_objects.asm6
-rw-r--r--main.asm24
-rw-r--r--maps/GoldenrodDeptStoreB1F.asm130
-rw-r--r--maps/GoldenrodGameCorner.asm2
-rw-r--r--maps/GoldenrodUnderground.asm676
-rw-r--r--maps/GoldenrodUndergroundSwitchRoomEntrances.asm968
-rw-r--r--maps/GoldenrodUndergroundWarehouse.asm226
-rw-r--r--maps/IcePath1F.asm32
-rw-r--r--maps/IcePathB1F.asm99
-rw-r--r--maps/IcePathB2FBlackthornSide.asm28
-rw-r--r--maps/IcePathB2FMahoganySide.asm53
-rw-r--r--maps/IcePathB3F.asm29
-rw-r--r--maps/MountMortar1FInside.asm53
-rw-r--r--maps/MountMortar1FOutside.asm40
-rw-r--r--maps/MountMortar2FInside.asm54
-rw-r--r--maps/MountMortarB1F.asm142
-rw-r--r--wram.asm2
20 files changed, 2585 insertions, 38 deletions
diff --git a/constants/event_flags.asm b/constants/event_flags.asm
index 12d5fce1..41010f6b 100644
--- a/constants/event_flags.asm
+++ b/constants/event_flags.asm
@@ -3,13 +3,13 @@
; These first eight flags are reset upon reloading the map.
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
- const EVENT_DRAGON_SHRINE_QUESTION_4
- const EVENT_DRAGON_SHRINE_QUESTION_5
- const EVENT_JUST_RECEIVED_DRATINI
- const EVENT_IN_YOUR_ROOM
+ const EVENT_TEMPORARY_UNTIL_MAP_RELOAD_2
+ const EVENT_TEMPORARY_UNTIL_MAP_RELOAD_3
+ const EVENT_TEMPORARY_UNTIL_MAP_RELOAD_4
+ const EVENT_TEMPORARY_UNTIL_MAP_RELOAD_5
+ const EVENT_TEMPORARY_UNTIL_MAP_RELOAD_6
+ const EVENT_TEMPORARY_UNTIL_MAP_RELOAD_7
+ const EVENT_TEMPORARY_UNTIL_MAP_RELOAD_8
; Johto story events
const EVENT_GOT_TM31_MUD_SLAP
const EVENT_GOT_TM49_FURY_CUTTER
@@ -143,11 +143,11 @@
const EVENT_ILEX_FOREST_HIDDEN_ETHER
const EVENT_ILEX_FOREST_HIDDEN_SUPER_POTION
const EVENT_ILEX_FOREST_HIDDEN_FULL_HEAL
- const EVENT_WAREHOUSE_ENTRANCE_HIDDEN_PARLYZ_HEAL
- const EVENT_WAREHOUSE_ENTRANCE_HIDDEN_SUPER_POTION
- const EVENT_WAREHOUSE_ENTRANCE_HIDDEN_ANTIDOTE
- const EVENT_UNDERGROUND_SWITCH_ROOM_ENTRANCES_HIDDEN_MAX_POTION
- const EVENT_UNDERGROUND_SWITCH_ROOM_ENTRANCES_HIDDEN_REVIVE
+ const EVENT_GOLDENROD_UNDERGROUND_HIDDEN_PARLYZ_HEAL
+ const EVENT_GOLDENROD_UNDERGROUND_HIDDEN_SUPER_POTION
+ const EVENT_GOLDENROD_UNDERGROUND_HIDDEN_ANTIDOTE
+ const EVENT_GOLDENROD_UNDERGROUND_SWITCH_ROOM_ENTRANCES_HIDDEN_MAX_POTION
+ const EVENT_GOLDENROD_UNDERGROUND_SWITCH_ROOM_ENTRANCES_HIDDEN_REVIVE
const EVENT_MOUNT_MORTAR_1F_OUTSIDE_HIDDEN_HYPER_POTION
const EVENT_MOUNT_MORTAR_1F_INSIDE_HIDDEN_MAX_REPEL
const EVENT_MOUNT_MORTAR_2F_INSIDE_HIDDEN_FULL_RESTORE
@@ -1717,9 +1717,9 @@
const EVENT_TEAM_ROCKET_BASE_B3F_PROTEIN
const EVENT_TEAM_ROCKET_BASE_B3F_ICE_HEAL
const EVENT_ILEX_FOREST_REVIVE
- const EVENT_WAREHOUSE_ENTRANCE_COIN_CASE
- const EVENT_UNDERGROUND_SWITCH_ROOM_ENTRANCES_SMOKE_BALL
- const EVENT_UNDERGROUND_SWITCH_ROOM_ENTRANCES_FULL_HEAL
+ const EVENT_GOLDENROD_UNDERGROUND_COIN_CASE
+ const EVENT_GOLDENROD_UNDERGROUND_SWITCH_ROOM_ENTRANCES_SMOKE_BALL
+ const EVENT_GOLDENROD_UNDERGROUND_SWITCH_ROOM_ENTRANCES_FULL_HEAL
const EVENT_GOLDENROD_DEPT_STORE_B1F_ETHER
const EVENT_GOLDENROD_DEPT_STORE_B1F_AMULET_COIN
const EVENT_GOLDENROD_DEPT_STORE_B1F_BURN_HEAL
@@ -1797,7 +1797,7 @@
const EVENT_RIVAL_CHERRYGROVE_CITY
const EVENT_RIVAL_AZALEA_TOWN
const EVENT_RIVAL_TEAM_ROCKET_BASE
- const EVENT_RIVAL_UNDERGROUND
+ const EVENT_RIVAL_GOLDENROD_UNDERGROUND
const EVENT_RIVAL_VICTORY_ROAD
const EVENT_RIVAL_OLIVINE_CITY
const EVENT_RIVAL_SPROUT_TOWER
@@ -1942,10 +1942,10 @@
const EVENT_OPENED_MT_SILVER
const EVENT_FOUGHT_SNORLAX ; 750
const EVENT_LAKE_OF_RAGE_RED_GYARADOS
- const EVENT_WAREHOUSE_ENTRANCE_GRANNY
- const EVENT_WAREHOUSE_ENTRANCE_GRAMPS
- const EVENT_WAREHOUSE_ENTRANCE_OLDER_HAIRCUT_BROTHER
- const EVENT_WAREHOUSE_ENTRANCE_YOUNGER_HAIRCUT_BROTHER
+ const EVENT_GOLDENROD_UNDERGROUND_GRANNY
+ const EVENT_GOLDENROD_UNDERGROUND_GRAMPS
+ const EVENT_GOLDENROD_UNDERGROUND_OLDER_HAIRCUT_BROTHER
+ const EVENT_GOLDENROD_UNDERGROUND_YOUNGER_HAIRCUT_BROTHER
const EVENT_MAHOGANY_TOWN_POKEFAN_M_BLOCKS_EAST
const EVENT_MAHOGANY_TOWN_POKEFAN_M_BLOCKS_GYM
const EVENT_ROUTE_32_FRIEDA_OF_FRIDAY
diff --git a/constants/map_constants.asm b/constants/map_constants.asm
index c41643c8..1d74fd4c 100644
--- a/constants/map_constants.asm
+++ b/constants/map_constants.asm
@@ -101,10 +101,10 @@ ENDM
map_const TEAM_ROCKET_BASE_B2F, 9, 15 ; 50
map_const TEAM_ROCKET_BASE_B3F, 9, 15 ; 51
map_const ILEX_FOREST, 27, 15 ; 52
- map_const WAREHOUSE_ENTRANCE, 18, 15 ; 53
- map_const UNDERGROUND_PATH_SWITCH_ROOM_ENTRANCES, 18, 15 ; 54
+ map_const GOLDENROD_UNDERGROUND, 18, 15 ; 53
+ map_const GOLDENROD_UNDERGROUND_SWITCH_ROOM_ENTRANCES,18, 15 ; 54
map_const GOLDENROD_DEPT_STORE_B1F, 9, 10 ; 55
- map_const UNDERGROUND_WAREHOUSE, 9, 10 ; 56
+ map_const GOLDENROD_UNDERGROUND_WAREHOUSE, 9, 10 ; 56
map_const MOUNT_MORTAR_1F_OUTSIDE, 18, 20 ; 57
map_const MOUNT_MORTAR_1F_INSIDE, 27, 20 ; 58
map_const MOUNT_MORTAR_2F_INSIDE, 18, 20 ; 59
diff --git a/constants/wram_constants.asm b/constants/wram_constants.asm
index 74d27aab..8f996cfb 100644
--- a/constants/wram_constants.asm
+++ b/constants/wram_constants.asm
@@ -41,10 +41,15 @@ FACE_LEFT EQU 2
FACE_RIGHT EQU 1
; TimeOfDay: ; d269
-MORN EQU 0
-DAY EQU 1
-NITE EQU 2
-DARKNESS EQU 3
+MORN_F EQU 0
+DAY_F EQU 1
+NITE_F EQU 2
+DARKNESS_F EQU 3
+
+MORN EQU 1 << MORN_F
+DAY EQU 1 << DAY_F
+NITE EQU 1 << NITE_F
+DARKNESS EQU 1 << DARKNESS_F
; ScriptFlags: ; d434
SCRIPT_RUNNING EQU 2
diff --git a/home/map_objects.asm b/home/map_objects.asm
index aef1e3d0..94fe60f4 100644
--- a/home/map_objects.asm
+++ b/home/map_objects.asm
@@ -240,9 +240,9 @@ CheckObjectTime::
ret
.TimeOfDayValues_17bb:
- db 1 << MORN ; 1
- db 1 << DAY ; 2
- db 1 << NITE ; 4
+ db MORN
+ db DAY
+ db NITE
.asm_17be
ld hl, $6
diff --git a/main.asm b/main.asm
index 321ebbcb..09fb1d84 100644
--- a/main.asm
+++ b/main.asm
@@ -340,11 +340,11 @@ CheckTime::
ld c, a
ret
-TimeOfDayTable: ; c012
- db MORN, 1 << MORN
- db DAY, 1 << DAY
- db NITE, 1 << NITE
- db NITE, 1 << NITE
+TimeOfDayTable:
+ db MORN_F, MORN
+ db DAY_F, DAY
+ db NITE_F, NITE
+ db NITE_F, NITE
db -1
INCLUDE "engine/engine_flags.asm"
@@ -1586,7 +1586,19 @@ INCLUDE "maps/TeamRocketBaseB3F.asm"
INCLUDE "maps/IlexForest.asm"
SECTION "bank46", ROMX, BANK[$46]
- dr $118000, $11c000
+INCLUDE "maps/GoldenrodUnderground.asm"
+INCLUDE "maps/GoldenrodUndergroundSwitchRoomEntrances.asm"
+INCLUDE "maps/GoldenrodDeptStoreB1F.asm"
+INCLUDE "maps/GoldenrodUndergroundWarehouse.asm"
+INCLUDE "maps/MountMortar1FOutside.asm"
+INCLUDE "maps/MountMortar1FInside.asm"
+INCLUDE "maps/MountMortar2FInside.asm"
+INCLUDE "maps/MountMortarB1F.asm"
+INCLUDE "maps/IcePath1F.asm"
+INCLUDE "maps/IcePathB1F.asm"
+INCLUDE "maps/IcePathB2FMahoganySide.asm"
+INCLUDE "maps/IcePathB2FBlackthornSide.asm"
+INCLUDE "maps/IcePathB3F.asm"
SECTION "bank47", ROMX, BANK[$47]
dr $11c000, $120000
diff --git a/maps/GoldenrodDeptStoreB1F.asm b/maps/GoldenrodDeptStoreB1F.asm
new file mode 100644
index 00000000..adadb249
--- /dev/null
+++ b/maps/GoldenrodDeptStoreB1F.asm
@@ -0,0 +1,130 @@
+ const_def 2 ; object constants
+ const GOLDENRODDEPTSTOREB1F_POKE_BALL1
+ const GOLDENRODDEPTSTOREB1F_POKE_BALL2
+ const GOLDENRODDEPTSTOREB1F_POKE_BALL3
+ const GOLDENRODDEPTSTOREB1F_POKE_BALL4
+ const GOLDENRODDEPTSTOREB1F_BLACK_BELT1
+ const GOLDENRODDEPTSTOREB1F_BLACK_BELT2
+ const GOLDENRODDEPTSTOREB1F_BLACK_BELT3
+ const GOLDENRODDEPTSTOREB1F_MACHOP
+
+GoldenrodDeptStoreB1F_MapScripts:
+ db 0 ; scene scripts
+
+ db 2 ; callbacks
+ callback MAPCALLBACK_TILES, .ClearBoxes
+ callback MAPCALLBACK_NEWMAP, .Unblock
+
+.ClearBoxes:
+ checkevent EVENT_RECEIVED_CARD_KEY
+ iftrue .GotCardKey
+ jump .Continue
+
+.GotCardKey:
+ changeblock 16, 4, $0d ; floor
+ jump .Continue
+
+.Continue:
+ checkevent EVENT_GOLDENROD_DEPT_STORE_B1F_LAYOUT_2
+ iftrue .Layout2
+ checkevent EVENT_GOLDENROD_DEPT_STORE_B1F_LAYOUT_3
+ iftrue .Layout3
+ changeblock 10, 8, $0d ; floor
+ return
+
+.Layout2:
+ changeblock 4, 10, $0d ; floor
+ return
+
+.Layout3:
+ changeblock 10, 12, $0d ; floor
+ return
+
+.Unblock:
+ clearevent EVENT_GOLDENROD_UNDERGROUND_WAREHOUSE_BLOCKED_OFF
+ return
+
+GoldenrodDeptStoreB1FBlackBelt1Script:
+ jumptextfaceplayer GoldenrodDeptStoreB1FBlackBelt1Text
+
+GoldenrodDeptStoreB1FBlackBelt2Script:
+ jumptextfaceplayer GoldenrodDeptStoreB1FBlackBelt2Text
+
+GoldenrodDeptStoreB1FBlackBelt3Script:
+ jumptextfaceplayer GoldenrodDeptStoreB1FBlackBelt3Text
+
+GoldenrodDeptStoreB1FMachopScript:
+ opentext
+ writetext GoldenrodDeptStoreB1FMachokeText
+ cry MACHOKE
+ waitbutton
+ closetext
+ end
+
+GoldenrodDeptStoreB1FEther:
+ itemball ETHER
+
+GoldenrodDeptStoreB1FAmuletCoin:
+ itemball AMULET_COIN
+
+GoldenrodDeptStoreB1FBurnHeal:
+ itemball BURN_HEAL
+
+GoldenrodDeptStoreB1FUltraBall:
+ itemball ULTRA_BALL
+
+GoldenrodDeptStoreB1FBlackBelt1Text:
+ text "Hey, kid! You're"
+ line "holding us up!"
+
+ para "Our policy is to"
+ line "work behind the"
+
+ para "scenes where no-"
+ line "one can see us!"
+ done
+
+GoldenrodDeptStoreB1FBlackBelt2Text:
+ text "I lose my passion"
+ line "for work if some-"
+ cont "one's watching."
+
+ para "Come on, kid,"
+ line "scoot!"
+ done
+
+GoldenrodDeptStoreB1FBlackBelt3Text:
+ text "Oohah! Oohah!"
+
+ para "The stuff on the"
+ line "ground's junk."
+
+ para "Take it if you"
+ line "want it!"
+ done
+
+GoldenrodDeptStoreB1FMachokeText:
+ text "MACHOKE: Maaacho!"
+ done
+
+GoldenrodDeptStoreB1F_MapEvents:
+ db 0, 0 ; filler
+
+ db 3 ; warp events
+ warp_event 17, 2, GOLDENROD_UNDERGROUND_WAREHOUSE, 3
+ warp_event 9, 4, GOLDENROD_DEPT_STORE_ELEVATOR, 1
+ warp_event 10, 4, GOLDENROD_DEPT_STORE_ELEVATOR, 2
+
+ db 0 ; coord events
+
+ db 0 ; bg events
+
+ db 8 ; object events
+ object_event 10, 15, SPRITE_POKE_BALL, SPRITEMOVEDATA_STILL, 0, 0, -1, -1, 0, OBJECTTYPE_ITEMBALL, 0, GoldenrodDeptStoreB1FEther, EVENT_GOLDENROD_DEPT_STORE_B1F_ETHER
+ object_event 14, 2, SPRITE_POKE_BALL, SPRITEMOVEDATA_STILL, 0, 0, -1, -1, 0, OBJECTTYPE_ITEMBALL, 0, GoldenrodDeptStoreB1FAmuletCoin, EVENT_GOLDENROD_DEPT_STORE_B1F_AMULET_COIN
+ object_event 6, 3, SPRITE_POKE_BALL, SPRITEMOVEDATA_STILL, 0, 0, -1, -1, 0, OBJECTTYPE_ITEMBALL, 0, GoldenrodDeptStoreB1FBurnHeal, EVENT_GOLDENROD_DEPT_STORE_B1F_BURN_HEAL
+ object_event 15, 15, SPRITE_POKE_BALL, SPRITEMOVEDATA_STILL, 0, 0, -1, -1, 0, OBJECTTYPE_ITEMBALL, 0, GoldenrodDeptStoreB1FUltraBall, EVENT_GOLDENROD_DEPT_STORE_B1F_ULTRA_BALL
+ object_event 9, 10, SPRITE_BLACK_BELT, SPRITEMOVEDATA_WALK_UP_DOWN, 0, 1, -1, -1, PAL_NPC_GREEN, OBJECTTYPE_SCRIPT, 0, GoldenrodDeptStoreB1FBlackBelt1Script, -1
+ object_event 4, 8, SPRITE_BLACK_BELT, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, PAL_NPC_RED, OBJECTTYPE_SCRIPT, 0, GoldenrodDeptStoreB1FBlackBelt2Script, -1
+ object_event 6, 13, SPRITE_BLACK_BELT, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 1, 0, -1, -1, PAL_NPC_BLUE, OBJECTTYPE_SCRIPT, 0, GoldenrodDeptStoreB1FBlackBelt3Script, -1
+ object_event 7, 7, SPRITE_MACHOP, SPRITEMOVEDATA_POKEMON, 0, 0, -1, -1, PAL_NPC_BLUE, OBJECTTYPE_SCRIPT, 0, GoldenrodDeptStoreB1FMachopScript, -1
diff --git a/maps/GoldenrodGameCorner.asm b/maps/GoldenrodGameCorner.asm
index ab88704c..89e9c0c9 100644
--- a/maps/GoldenrodGameCorner.asm
+++ b/maps/GoldenrodGameCorner.asm
@@ -515,8 +515,8 @@ GoldenrodGameCorner_MapEvents:
object_event 3, 2, SPRITE_CLERK, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, PAL_NPC_RED, OBJECTTYPE_SCRIPT, 0, GoldenrodGameCornerCoinVendorScript, -1
object_event 16, 2, SPRITE_RECEPTIONIST, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, PAL_NPC_RED, OBJECTTYPE_SCRIPT, 0, GoldenrodGameCornerTMVendorScript, -1
object_event 18, 2, SPRITE_RECEPTIONIST, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, PAL_NPC_RED, OBJECTTYPE_SCRIPT, 0, GoldenrodGameCornerPrizeMonVendorScript, -1
+ object_event 8, 7, SPRITE_PHARMACIST, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, DAY, PAL_NPC_BLUE, OBJECTTYPE_SCRIPT, 0, GoldenrodGameCornerPharmacistScript, -1
object_event 8, 7, SPRITE_PHARMACIST, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, NITE, PAL_NPC_BLUE, OBJECTTYPE_SCRIPT, 0, GoldenrodGameCornerPharmacistScript, -1
- object_event 8, 7, SPRITE_PHARMACIST, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, 4, PAL_NPC_BLUE, OBJECTTYPE_SCRIPT, 0, GoldenrodGameCornerPharmacistScript, -1
object_event 11, 10, SPRITE_POKEFAN_M, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, PAL_NPC_BROWN, OBJECTTYPE_SCRIPT, 0, GoldenrodGameCornerPokefanM1Script, -1
object_event 14, 8, SPRITE_COOLTRAINER_M, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, PAL_NPC_BLUE, OBJECTTYPE_SCRIPT, 0, GoldenrodGameCornerCooltrainerMScript, -1
object_event 17, 6, SPRITE_POKEFAN_F, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, PAL_NPC_RED, OBJECTTYPE_SCRIPT, 0, GoldenrodGameCornerPokefanFScript, -1
diff --git a/maps/GoldenrodUnderground.asm b/maps/GoldenrodUnderground.asm
new file mode 100644
index 00000000..1e629348
--- /dev/null
+++ b/maps/GoldenrodUnderground.asm
@@ -0,0 +1,676 @@
+ const_def 2 ; object constants
+ const GOLDENRODUNDERGROUND_SUPER_NERD1
+ const GOLDENRODUNDERGROUND_SUPER_NERD2
+ const GOLDENRODUNDERGROUND_SUPER_NERD3
+ const GOLDENRODUNDERGROUND_SUPER_NERD4
+ const GOLDENRODUNDERGROUND_POKE_BALL
+ const GOLDENRODUNDERGROUND_GRAMPS
+ const GOLDENRODUNDERGROUND_SUPER_NERD5
+ const GOLDENRODUNDERGROUND_SUPER_NERD6
+ const GOLDENRODUNDERGROUND_GRANNY
+
+GoldenrodUnderground_MapScripts:
+ db 0 ; scene scripts
+
+ db 3 ; callbacks
+ callback MAPCALLBACK_NEWMAP, .ResetSwitches
+ callback MAPCALLBACK_TILES, .CheckBasementKey
+ callback MAPCALLBACK_OBJECTS, .CheckDayOfWeek
+
+.ResetSwitches:
+ clearevent EVENT_SWITCH_1
+ clearevent EVENT_SWITCH_2
+ clearevent EVENT_SWITCH_3
+ clearevent EVENT_EMERGENCY_SWITCH
+ clearevent EVENT_SWITCH_4
+ clearevent EVENT_SWITCH_5
+ clearevent EVENT_SWITCH_6
+ clearevent EVENT_SWITCH_7
+ clearevent EVENT_SWITCH_8
+ clearevent EVENT_SWITCH_9
+ clearevent EVENT_SWITCH_10
+ clearevent EVENT_SWITCH_11
+ clearevent EVENT_SWITCH_12
+ clearevent EVENT_SWITCH_13
+ clearevent EVENT_SWITCH_14
+ writebyte 0
+ copyvartobyte wUndergroundSwitchPositions
+ return
+
+.CheckBasementKey:
+ checkevent EVENT_USED_BASEMENT_KEY
+ iffalse .LockBasementDoor
+ return
+
+.LockBasementDoor:
+ changeblock 18, 6, $3d ; locked door
+ return
+
+.CheckDayOfWeek:
+ checkcode VAR_WEEKDAY
+ ifequal MONDAY, .Monday
+ ifequal TUESDAY, .Tuesday
+ ifequal WEDNESDAY, .Wednesday
+ ifequal THURSDAY, .Thursday
+ ifequal FRIDAY, .Friday
+ ifequal SATURDAY, .Saturday
+
+.Sunday:
+ disappear GOLDENRODUNDERGROUND_GRAMPS
+ disappear GOLDENRODUNDERGROUND_SUPER_NERD5
+ appear GOLDENRODUNDERGROUND_SUPER_NERD6
+ appear GOLDENRODUNDERGROUND_GRANNY
+ return
+
+.Monday:
+ disappear GOLDENRODUNDERGROUND_GRAMPS
+ checktime MORN
+ iffalse .NotMondayMorning
+ appear GOLDENRODUNDERGROUND_GRAMPS
+.NotMondayMorning:
+ disappear GOLDENRODUNDERGROUND_SUPER_NERD5
+ disappear GOLDENRODUNDERGROUND_SUPER_NERD6
+ disappear GOLDENRODUNDERGROUND_GRANNY
+ return
+
+.Tuesday:
+ disappear GOLDENRODUNDERGROUND_GRAMPS
+ appear GOLDENRODUNDERGROUND_SUPER_NERD5
+ disappear GOLDENRODUNDERGROUND_SUPER_NERD6
+ disappear GOLDENRODUNDERGROUND_GRANNY
+ return
+
+.Wednesday:
+ disappear GOLDENRODUNDERGROUND_GRAMPS
+ disappear GOLDENRODUNDERGROUND_SUPER_NERD5
+ appear GOLDENRODUNDERGROUND_SUPER_NERD6
+ disappear GOLDENRODUNDERGROUND_GRANNY
+ return
+
+.Thursday:
+ disappear GOLDENRODUNDERGROUND_GRAMPS
+ appear GOLDENRODUNDERGROUND_SUPER_NERD5
+ disappear GOLDENRODUNDERGROUND_SUPER_NERD6
+ disappear GOLDENRODUNDERGROUND_GRANNY
+ return
+
+.Friday:
+ disappear GOLDENRODUNDERGROUND_GRAMPS
+ disappear GOLDENRODUNDERGROUND_SUPER_NERD5
+ appear GOLDENRODUNDERGROUND_SUPER_NERD6
+ disappear GOLDENRODUNDERGROUND_GRANNY
+ return
+
+.Saturday:
+ disappear GOLDENRODUNDERGROUND_GRAMPS
+ appear GOLDENRODUNDERGROUND_SUPER_NERD5
+ disappear GOLDENRODUNDERGROUND_SUPER_NERD6
+ appear GOLDENRODUNDERGROUND_GRANNY
+ return
+
+TrainerSupernerdEric:
+ trainer SUPER_NERD, ERIC, EVENT_BEAT_SUPER_NERD_ERIC, SupernerdEricSeenText, SupernerdEricBeatenText, 0, .Script
+
+.Script:
+ endifjustbattled
+ opentext
+ writetext SupernerdEricAfterBattleText
+ waitbutton
+ closetext
+ end
+
+TrainerSupernerdTeru:
+ trainer SUPER_NERD, TERU, EVENT_BEAT_SUPER_NERD_TERU, SupernerdTeruSeenText, SupernerdTeruBeatenText, 0, .Script
+
+.Script:
+ endifjustbattled
+ opentext
+ writetext SupernerdTeruAfterBattleText
+ waitbutton
+ closetext
+ end
+
+TrainerPokemaniacIssac:
+ trainer POKEMANIAC, ISSAC, EVENT_BEAT_POKEMANIAC_ISSAC, PokemaniacIssacSeenText, PokemaniacIssacBeatenText, 0, .Script
+
+.Script:
+ endifjustbattled
+ opentext
+ writetext PokemaniacIssacAfterBattleText
+ waitbutton
+ closetext
+ end
+
+TrainerPokemaniacDonald:
+ trainer POKEMANIAC, DONALD, EVENT_BEAT_POKEMANIAC_DONALD, PokemaniacDonaldSeenText, PokemaniacDonaldBeatenText, 0, .Script
+
+.Script:
+ endifjustbattled
+ opentext
+ writetext PokemaniacDonaldAfterBattleText
+ waitbutton
+ closetext
+ end
+
+BitterMerchantScript:
+ opentext
+ checkcode VAR_WEEKDAY
+ ifequal SUNDAY, .Open
+ ifequal SATURDAY, .Open
+ jump GoldenrodUndergroundScript_ShopClosed
+
+.Open:
+ pokemart MARTTYPE_BITTER, MART_UNDERGROUND
+ closetext
+ end
+
+BargainMerchantScript:
+ opentext
+ checkflag ENGINE_GOLDENROD_UNDERGROUND_MERCHANT_CLOSED
+ iftrue GoldenrodUndergroundScript_ShopClosed
+ checkcode VAR_WEEKDAY
+ ifequal MONDAY, .CheckMorn
+ jump GoldenrodUndergroundScript_ShopClosed
+
+.CheckMorn:
+ checktime MORN
+ iffalse GoldenrodUndergroundScript_ShopClosed
+ pokemart MARTTYPE_BARGAIN, 0
+ closetext
+ end
+
+OlderHaircutBrotherScript:
+ opentext
+ checkcode VAR_WEEKDAY
+ ifequal TUESDAY, .DoHaircut
+ ifequal THURSDAY, .DoHaircut
+ ifequal SATURDAY, .DoHaircut
+ jump GoldenrodUndergroundScript_ShopClosed
+
+.DoHaircut:
+ checkflag ENGINE_GOLDENROD_UNDERGROUND_GOT_HAIRCUT
+ iftrue .AlreadyGotHaircut
+ special PlaceMoneyTopRight
+ writetext UnknownText_0x7c5f9
+ yesorno
+ iffalse .Refused
+ checkmoney YOUR_MONEY, 500
+ ifequal HAVE_LESS, .NotEnoughMoney
+ writetext UnknownText_0x7c69a
+ buttonsound
+ special YoungerHaircutBrother
+ ifequal $0, .Refused
+ ifequal $1, .Refused
+ setflag ENGINE_GOLDENROD_UNDERGROUND_GOT_HAIRCUT
+ ifequal $2, .two
+ ifequal $3, .three
+ jump .else
+
+.two
+ setevent EVENT_TEMPORARY_UNTIL_MAP_RELOAD_1
+ clearevent EVENT_TEMPORARY_UNTIL_MAP_RELOAD_2
+ clearevent EVENT_TEMPORARY_UNTIL_MAP_RELOAD_3
+ jump .then
+
+.three
+ clearevent EVENT_TEMPORARY_UNTIL_MAP_RELOAD_1
+ setevent EVENT_TEMPORARY_UNTIL_MAP_RELOAD_2
+ clearevent EVENT_TEMPORARY_UNTIL_MAP_RELOAD_3
+ jump .then
+
+.else
+ clearevent EVENT_TEMPORARY_UNTIL_MAP_RELOAD_1
+ clearevent EVENT_TEMPORARY_UNTIL_MAP_RELOAD_2
+ setevent EVENT_TEMPORARY_UNTIL_MAP_RELOAD_3
+ jump .then
+
+.then
+ takemoney YOUR_MONEY, 500
+ special PlaceMoneyTopRight
+ writetext UnknownText_0x7c6b8
+ waitbutton
+ closetext
+ special FadeOutPalettes
+ playmusic MUSIC_HEAL
+ pause 60
+ special FadeInPalettes
+ special RestartMapMusic
+ opentext
+ writetext UnknownText_0x7c6d8
+ waitbutton
+ checkevent EVENT_TEMPORARY_UNTIL_MAP_RELOAD_1
+ iftrue EitherHaircutBrotherScript_SlightlyHappier
+ checkevent EVENT_TEMPORARY_UNTIL_MAP_RELOAD_2
+ iftrue EitherHaircutBrotherScript_Happier
+ jump EitherHaircutBrotherScript_MuchHappier
+
+.Refused:
+ writetext UnknownText_0x7c6ea
+ waitbutton
+ closetext
+ end
+
+.NotEnoughMoney:
+ writetext UnknownText_0x7c709
+ waitbutton
+ closetext
+ end
+
+.AlreadyGotHaircut:
+ writetext UnknownText_0x7c72b
+ waitbutton
+ closetext
+ end
+
+YoungerHaircutBrotherScript:
+ opentext
+ checkcode VAR_WEEKDAY
+ ifequal SUNDAY, .DoHaircut
+ ifequal WEDNESDAY, .DoHaircut
+ ifequal FRIDAY, .DoHaircut
+ jump GoldenrodUndergroundScript_ShopClosed
+
+.DoHaircut:
+ checkflag ENGINE_GOLDENROD_UNDERGROUND_GOT_HAIRCUT
+ iftrue .AlreadyGotHaircut
+ special PlaceMoneyTopRight
+ writetext UnknownText_0x7c75c
+ yesorno
+ iffalse .Refused
+ checkmoney YOUR_MONEY, 300
+ ifequal HAVE_LESS, .NotEnoughMoney
+ writetext UnknownText_0x7c7f1
+ buttonsound
+ special OlderHaircutBrother
+ ifequal $0, .Refused
+ ifequal $1, .Refused
+ setflag ENGINE_GOLDENROD_UNDERGROUND_GOT_HAIRCUT
+ ifequal $2, .two
+ ifequal $3, .three
+ jump .else
+
+.two
+ setevent EVENT_TEMPORARY_UNTIL_MAP_RELOAD_1
+ clearevent EVENT_TEMPORARY_UNTIL_MAP_RELOAD_2
+ clearevent EVENT_TEMPORARY_UNTIL_MAP_RELOAD_3
+ jump .then
+
+.three
+ clearevent EVENT_TEMPORARY_UNTIL_MAP_RELOAD_1
+ setevent EVENT_TEMPORARY_UNTIL_MAP_RELOAD_2
+ clearevent EVENT_TEMPORARY_UNTIL_MAP_RELOAD_3
+ jump .then
+
+.else
+ clearevent EVENT_TEMPORARY_UNTIL_MAP_RELOAD_1
+ clearevent EVENT_TEMPORARY_UNTIL_MAP_RELOAD_2
+ setevent EVENT_TEMPORARY_UNTIL_MAP_RELOAD_3
+ jump .then
+
+.then
+ takemoney YOUR_MONEY, 300
+ special PlaceMoneyTopRight
+ writetext UnknownText_0x7c80e
+ waitbutton
+ closetext
+ special FadeOutPalettes
+ playmusic MUSIC_HEAL
+ pause 60
+ special FadeInPalettes
+ special RestartMapMusic
+ opentext
+ writetext UnknownText_0x7c82a
+ waitbutton
+ checkevent EVENT_TEMPORARY_UNTIL_MAP_RELOAD_1
+ iftrue EitherHaircutBrotherScript_SlightlyHappier
+ checkevent EVENT_TEMPORARY_UNTIL_MAP_RELOAD_2
+ iftrue EitherHaircutBrotherScript_Happier
+ jump EitherHaircutBrotherScript_MuchHappier
+
+.Refused:
+ writetext UnknownText_0x7c842
+ waitbutton
+ closetext
+ end
+
+.NotEnoughMoney:
+ writetext UnknownText_0x7c85b
+ waitbutton
+ closetext
+ end
+
+.AlreadyGotHaircut:
+ writetext UnknownText_0x7c87b
+ waitbutton
+ closetext
+ end
+
+EitherHaircutBrotherScript_SlightlyHappier:
+ writetext HaircutBrosText_SlightlyHappier
+ special PlayCurMonCry
+ waitbutton
+ closetext
+ end
+
+EitherHaircutBrotherScript_Happier:
+ writetext HaircutBrosText_Happier
+ special PlayCurMonCry
+ waitbutton
+ closetext
+ end
+
+EitherHaircutBrotherScript_MuchHappier:
+ writetext HaircutBrosText_MuchHappier
+ special PlayCurMonCry
+ waitbutton
+ closetext
+ end
+
+BasementDoorScript::
+ opentext
+ checkevent EVENT_USED_BASEMENT_KEY
+ iftrue .Open
+ checkitem BASEMENT_KEY
+ iftrue .Unlock
+ writetext UnknownText_0x7c5b0
+ waitbutton
+ closetext
+ end
+
+.Unlock:
+ playsound SFX_TRANSACTION
+ writetext UnknownText_0x7c5d6
+ waitbutton
+ closetext
+ changeblock 18, 6, $2e ; unlocked door
+ reloadmappart
+ closetext
+ setevent EVENT_USED_BASEMENT_KEY
+ end
+
+.Open:
+ writetext UnknownText_0x7c5c3
+ waitbutton
+ closetext
+ end
+
+GoldenrodUndergroundScript_ShopClosed:
+ writetext UnknownText_0x7c904
+ waitbutton
+ closetext
+ end
+
+GoldenrodUndergroundCoinCase:
+ itemball COIN_CASE
+
+GoldenrodUndergroundNoEntrySign:
+ jumptext GoldenrodUndergroundNoEntryText
+
+GoldenrodUndergroundHiddenParlyzHeal:
+ hiddenitem PARLYZ_HEAL, EVENT_GOLDENROD_UNDERGROUND_HIDDEN_PARLYZ_HEAL
+
+GoldenrodUndergroundHiddenSuperPotion:
+ hiddenitem SUPER_POTION, EVENT_GOLDENROD_UNDERGROUND_HIDDEN_SUPER_POTION
+
+GoldenrodUndergroundHiddenAntidote:
+ hiddenitem ANTIDOTE, EVENT_GOLDENROD_UNDERGROUND_HIDDEN_ANTIDOTE
+
+SupernerdEricSeenText:
+ text "I got booted out"
+ line "of the GAME COR-"
+ cont "NER."
+
+ para "I was trying to"
+ line "cheat using my"
+ cont "#MON…"
+ done
+
+SupernerdEricBeatenText:
+ text "…Grumble…"
+ done
+
+SupernerdEricAfterBattleText:
+ text "I guess I have to"
+ line "do things fair and"
+ cont "square…"
+ done
+
+SupernerdTeruSeenText:
+ text "Do you consider"
+ line "type alignments in"
+ cont "battle?"
+
+ para "If you know your"
+ line "type advantages,"
+
+ para "you'll do better"
+ line "in battle."
+ done
+
+SupernerdTeruBeatenText:
+ text "Ow, ow, ow!"
+ done
+
+SupernerdTeruAfterBattleText:
+ text "I know my #MON"
+ line "type alignments."
+
+ para "But I only use one"
+ line "type of #MON."
+ done
+
+PokemaniacIssacSeenText:
+ text "My #MON just"
+ line "got haircuts!"
+
+ para "I'll show you how"
+ line "strong they are!"
+ done
+
+PokemaniacIssacBeatenText:
+ text "Aiyeeee!"
+ done
+
+PokemaniacIssacAfterBattleText:
+ text "Your #MON will"
+ line "like you more if"
+
+ para "you give them"
+ line "haircuts."
+ done
+
+PokemaniacDonaldSeenText:
+ text "I think you have"
+ line "some rare #MON"
+ cont "with you."
+
+ para "Let me see them!"
+ done
+
+PokemaniacDonaldBeatenText:
+ text "Gaah! I lost!"
+ line "That makes me mad!"
+ done
+
+PokemaniacDonaldAfterBattleText:
+ text "Are you making a"
+ line "#DEX? Here's a"
+ cont "hot tip."
+
+ para "The HIKER on ROUTE"
+ line "33, ANTHONY, is a"
+ cont "good guy."
+
+ para "He'll phone you if"
+ line "he sees any rare"
+ cont "#MON."
+ done
+
+UnknownText_0x7c5b0:
+ text "The door's locked…"
+ done
+
+UnknownText_0x7c5c3:
+ text "The door is open."
+ done
+
+UnknownText_0x7c5d6:
+ text "The BASEMENT KEY"
+ line "opened the door."
+ done
+
+UnknownText_0x7c5f9:
+ text "Welcome!"
+
+ para "I run the #MON"
+ line "SALON!"
+
+ para "I'm the older and"
+ line "better of the two"
+ cont "HAIRCUT BROTHERS."
+
+ para "I can make your"
+ line "#MON beautiful"
+ cont "for just ¥500."
+
+ para "Would you like me"
+ line "to do that?"
+ done
+
+UnknownText_0x7c69a:
+ text "Which #MON"
+ line "should I work on?"
+ done
+
+UnknownText_0x7c6b8:
+ text "OK! Watch it"
+ line "become beautiful!"
+ done
+
+UnknownText_0x7c6d8:
+ text "There! All done!"
+ done
+
+UnknownText_0x7c6ea:
+ text "Is that right?"
+ line "That's a shame!"
+ done
+
+UnknownText_0x7c709:
+ text "You'll need more"
+ line "money than that."
+ done
+
+UnknownText_0x7c72b:
+ text "I do only one"
+ line "haircut a day. I'm"
+ cont "done for today."
+ done
+
+UnknownText_0x7c75c:
+ text "Welcome to the"
+ line "#MON SALON!"
+
+ para "I'm the younger"
+ line "and less expen-"
+ cont "sive of the two"
+ cont "HAIRCUT BROTHERS."
+
+ para "I'll spiff up your"
+ line "#MON for just"
+ cont "¥300."
+
+ para "So? How about it?"
+ done
+
+UnknownText_0x7c7f1:
+ text "OK, which #MON"
+ line "should I do?"
+ done
+
+UnknownText_0x7c80e:
+ text "OK! I'll make it"
+ line "look cool!"
+ done
+
+UnknownText_0x7c82a:
+ text "There we go!"
+ line "All done!"
+ done
+
+UnknownText_0x7c842:
+ text "No? "
+ line "How disappointing!"
+ done
+
+UnknownText_0x7c85b:
+ text "You're a little"
+ line "short on funds."
+ done
+
+UnknownText_0x7c87b:
+ text "I can do only one"
+ line "haircut a day."
+
+ para "Sorry, but I'm all"
+ line "done for today."
+ done
+
+HaircutBrosText_SlightlyHappier:
+ text_from_ram wStringBuffer3
+ text " looks a"
+ line "little happier."
+ done
+
+HaircutBrosText_Happier:
+ text_from_ram wStringBuffer3
+ text " looks"
+ line "happy."
+ done
+
+HaircutBrosText_MuchHappier:
+ text_from_ram wStringBuffer3
+ text " looks"
+ line "delighted!"
+ done
+
+UnknownText_0x7c904:
+ text "We're not open"
+ line "today."
+ done
+
+GoldenrodUndergroundNoEntryText:
+ text "NO ENTRY BEYOND"
+ line "THIS POINT"
+ done
+
+GoldenrodUnderground_MapEvents:
+ db 0, 0 ; filler
+
+ db 6 ; warp events
+ warp_event 3, 2, GOLDENROD_UNDERGROUND_SWITCH_ROOM_ENTRANCES, 7
+ warp_event 3, 34, GOLDENROD_UNDERGROUND_SWITCH_ROOM_ENTRANCES, 4
+ warp_event 18, 6, GOLDENROD_UNDERGROUND, 4
+ warp_event 21, 31, GOLDENROD_UNDERGROUND, 3
+ warp_event 22, 31, GOLDENROD_UNDERGROUND, 3
+ warp_event 22, 27, GOLDENROD_UNDERGROUND_SWITCH_ROOM_ENTRANCES, 1
+
+ db 0 ; coord events
+
+ db 5 ; bg events
+ bg_event 18, 6, BGEVENT_READ, BasementDoorScript
+ bg_event 19, 6, BGEVENT_READ, GoldenrodUndergroundNoEntrySign
+ bg_event 6, 13, BGEVENT_ITEM, GoldenrodUndergroundHiddenParlyzHeal
+ bg_event 4, 18, BGEVENT_ITEM, GoldenrodUndergroundHiddenSuperPotion
+ bg_event 17, 8, BGEVENT_ITEM, GoldenrodUndergroundHiddenAntidote
+
+ db 9 ; object events
+ object_event 5, 31, SPRITE_SUPER_NERD, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, PAL_NPC_BROWN, OBJECTTYPE_TRAINER, 3, TrainerSupernerdEric, -1
+ object_event 6, 9, SPRITE_SUPER_NERD, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, PAL_NPC_BROWN, OBJECTTYPE_TRAINER, 2, TrainerSupernerdTeru, -1
+ object_event 3, 27, SPRITE_SUPER_NERD, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, PAL_NPC_BLUE, OBJECTTYPE_TRAINER, 2, TrainerPokemaniacIssac, -1
+ object_event 2, 6, SPRITE_SUPER_NERD, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, PAL_NPC_BLUE, OBJECTTYPE_TRAINER, 3, TrainerPokemaniacDonald, -1
+ object_event 7, 25, SPRITE_POKE_BALL, SPRITEMOVEDATA_STILL, 0, 0, -1, -1, 0, OBJECTTYPE_ITEMBALL, 0, GoldenrodUndergroundCoinCase, EVENT_GOLDENROD_UNDERGROUND_COIN_CASE
+ object_event 7, 11, SPRITE_GRAMPS, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, PAL_NPC_BROWN, OBJECTTYPE_SCRIPT, 0, BargainMerchantScript, EVENT_GOLDENROD_UNDERGROUND_GRAMPS
+ object_event 7, 14, SPRITE_SUPER_NERD, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, PAL_NPC_BLUE, OBJECTTYPE_SCRIPT, 0, OlderHaircutBrotherScript, EVENT_GOLDENROD_UNDERGROUND_OLDER_HAIRCUT_BROTHER
+ object_event 7, 15, SPRITE_SUPER_NERD, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, PAL_NPC_GREEN, OBJECTTYPE_SCRIPT, 0, YoungerHaircutBrotherScript, EVENT_GOLDENROD_UNDERGROUND_YOUNGER_HAIRCUT_BROTHER
+ object_event 7, 21, SPRITE_GRANNY, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, PAL_NPC_BROWN, OBJECTTYPE_SCRIPT, 0, BitterMerchantScript, EVENT_GOLDENROD_UNDERGROUND_GRANNY
diff --git a/maps/GoldenrodUndergroundSwitchRoomEntrances.asm b/maps/GoldenrodUndergroundSwitchRoomEntrances.asm
new file mode 100644
index 00000000..8c30fe78
--- /dev/null
+++ b/maps/GoldenrodUndergroundSwitchRoomEntrances.asm
@@ -0,0 +1,968 @@
+; block ids
+UNDERGROUND_DOOR_CLOSED1 EQU $2a
+UNDERGROUND_DOOR_CLOSED2 EQU $3e
+UNDERGROUND_DOOR_CLOSED3 EQU $3f
+UNDERGROUND_DOOR_OPEN1 EQU $2d
+UNDERGROUND_DOOR_OPEN2 EQU $3d
+
+ugdoor: MACRO
+\1_YCOORD EQU \2
+\1_XCOORD EQU \3
+ENDM
+
+ ugdoor UGDOOR_1, $10, $06
+ ugdoor UGDOOR_2, $0a, $06
+ ugdoor UGDOOR_3, $02, $06
+ ugdoor UGDOOR_4, $02, $0a
+ ugdoor UGDOOR_5, $0a, $0a
+ ugdoor UGDOOR_6, $10, $0a
+ ugdoor UGDOOR_7, $0c, $06
+ ugdoor UGDOOR_8, $0c, $08
+ ugdoor UGDOOR_9, $06, $06
+ ugdoor UGDOOR_10, $06, $08
+ ugdoor UGDOOR_11, $0c, $0a
+ ugdoor UGDOOR_12, $0c, $0c
+ ugdoor UGDOOR_13, $06, $0a
+ ugdoor UGDOOR_14, $06, $0c
+ ugdoor UGDOOR_15, $12, $0a
+ ugdoor UGDOOR_16, $12, $0c
+
+doorstate: MACRO
+ changeblock UGDOOR_\1_YCOORD, UGDOOR_\1_XCOORD, UNDERGROUND_DOOR_\2
+ENDM
+
+ const_def 2 ; object constants
+ const GOLDENRODUNDERGROUNDSWITCHROOMENTRANCES_PHARMACIST1
+ const GOLDENRODUNDERGROUNDSWITCHROOMENTRANCES_PHARMACIST2
+ const GOLDENRODUNDERGROUNDSWITCHROOMENTRANCES_ROCKET1
+ const GOLDENRODUNDERGROUNDSWITCHROOMENTRANCES_ROCKET2
+ const GOLDENRODUNDERGROUNDSWITCHROOMENTRANCES_ROCKET3
+ const GOLDENRODUNDERGROUNDSWITCHROOMENTRANCES_ROCKET_GIRL
+ const GOLDENRODUNDERGROUNDSWITCHROOMENTRANCES_TEACHER
+ const GOLDENRODUNDERGROUNDSWITCHROOMENTRANCES_SUPER_NERD
+ const GOLDENRODUNDERGROUNDSWITCHROOMENTRANCES_POKE_BALL1
+ const GOLDENRODUNDERGROUNDSWITCHROOMENTRANCES_POKE_BALL2
+ const GOLDENRODUNDERGROUNDSWITCHROOMENTRANCES_SILVER
+
+GoldenrodUndergroundSwitchRoomEntrances_MapScripts:
+ db 2 ; scene scripts
+ scene_script .DummyScene0 ; SCENE_DEFAULT
+ scene_script .DummyScene1 ; SCENE_FINISHED
+
+ db 1 ; callbacks
+ callback MAPCALLBACK_TILES, .UpdateDoorPositions
+
+.DummyScene0:
+ end
+
+.DummyScene1:
+ end
+
+.UpdateDoorPositions:
+ checkevent EVENT_SWITCH_4
+ iffalse .false4
+ doorstate 1, OPEN1
+.false4
+ checkevent EVENT_SWITCH_5
+ iffalse .false5
+ doorstate 2, OPEN1
+.false5
+ checkevent EVENT_SWITCH_6
+ iffalse .false6
+ doorstate 3, OPEN1
+.false6
+ checkevent EVENT_SWITCH_7
+ iffalse .false7
+ doorstate 4, OPEN1
+.false7
+ checkevent EVENT_SWITCH_8
+ iffalse .false8
+ doorstate 5, OPEN1
+.false8
+ checkevent EVENT_SWITCH_9
+ iffalse .false9
+ doorstate 6, OPEN1
+.false9
+ checkevent EVENT_SWITCH_10
+ iffalse .false10
+ doorstate 7, CLOSED1
+ doorstate 8, OPEN1
+.false10
+ checkevent EVENT_SWITCH_11
+ iffalse .false11
+ doorstate 9, CLOSED1
+ doorstate 10, OPEN1
+.false11
+ checkevent EVENT_SWITCH_12
+ iffalse .false12
+ doorstate 11, CLOSED1
+ doorstate 12, OPEN1
+.false12
+ checkevent EVENT_SWITCH_13
+ iffalse .false13
+ doorstate 13, CLOSED1
+ doorstate 14, OPEN1
+.false13
+ checkevent EVENT_SWITCH_14
+ iffalse .false14
+ doorstate 15, CLOSED1
+ doorstate 16, OPEN1
+.false14
+ return
+
+GoldenrodUndergroundSwitchRoomEntrancesSuperNerdScript:
+ jumptextfaceplayer GoldenrodUndergroundSwitchRoomEntrances_SuperNerdText
+
+GoldenrodUndergroundSwitchRoomEntrancesTeacherScript:
+ jumptextfaceplayer GoldenrodUndergroundSwitchRoomEntrances_TeacherText
+
+UndergroundSilverScene1:
+ turnobject PLAYER, RIGHT
+ showemote EMOTE_SHOCK, PLAYER, 15
+ special FadeOutMusic
+ pause 15
+ playsound SFX_EXIT_BUILDING
+ appear GOLDENRODUNDERGROUNDSWITCHROOMENTRANCES_SILVER
+ waitsfx
+ applymovement GOLDENRODUNDERGROUNDSWITCHROOMENTRANCES_SILVER, UndergroundSilverApproachMovement1
+ turnobject PLAYER, RIGHT
+ scall UndergroundSilverBattleScript
+ applymovement GOLDENRODUNDERGROUNDSWITCHROOMENTRANCES_SILVER, UndergroundSilverRetreatMovement1
+ playsound SFX_EXIT_BUILDING
+ disappear GOLDENRODUNDERGROUNDSWITCHROOMENTRANCES_SILVER
+ setscene SCENE_FINISHED
+ waitsfx
+ playmapmusic
+ end
+
+UndergroundSilverScene2:
+ turnobject PLAYER, RIGHT
+ showemote EMOTE_SHOCK, PLAYER, 15
+ special FadeOutMusic
+ pause 15
+ playsound SFX_EXIT_BUILDING
+ appear GOLDENRODUNDERGROUNDSWITCHROOMENTRANCES_SILVER
+ waitsfx
+ applymovement GOLDENRODUNDERGROUNDSWITCHROOMENTRANCES_SILVER, UndergroundSilverApproachMovement2
+ turnobject PLAYER, RIGHT
+ scall UndergroundSilverBattleScript
+ applymovement GOLDENRODUNDERGROUNDSWITCHROOMENTRANCES_SILVER, UndergroundSilverRetreatMovement2
+ playsound SFX_EXIT_BUILDING
+ disappear GOLDENRODUNDERGROUNDSWITCHROOMENTRANCES_SILVER
+ setscene SCENE_FINISHED
+ waitsfx
+ playmapmusic
+ end
+
+UndergroundSilverBattleScript:
+ checkevent EVENT_RIVAL_BURNED_TOWER
+ iftrue .Continue
+ setevent EVENT_RIVAL_BURNED_TOWER
+ setmapscene BURNED_TOWER_1F, SCENE_BURNEDTOWER1F_RIVAL_BATTLE
+.Continue:
+ playmusic MUSIC_RIVAL_ENCOUNTER
+ opentext
+ writetext UndergroundSilverBeforeText
+ waitbutton
+ closetext
+ setevent EVENT_RIVAL_GOLDENROD_UNDERGROUND
+ checkevent EVENT_GOT_TOTODILE_FROM_ELM
+ iftrue .Totodile
+ checkevent EVENT_GOT_CHIKORITA_FROM_ELM
+ iftrue .Chikorita
+ winlosstext UndergroundSilverWinText, UndergroundSilverLossText
+ setlasttalked GOLDENRODUNDERGROUNDSWITCHROOMENTRANCES_SILVER
+ loadtrainer RIVAL1, RIVAL1_4_TOTODILE
+ startbattle
+ dontrestartmapmusic
+ reloadmapafterbattle
+ jump .FinishRivalBattle
+
+.Totodile:
+ winlosstext UndergroundSilverWinText, UndergroundSilverLossText
+ setlasttalked GOLDENRODUNDERGROUNDSWITCHROOMENTRANCES_SILVER
+ loadtrainer RIVAL1, RIVAL1_4_CHIKORITA
+ startbattle
+ dontrestartmapmusic
+ reloadmapafterbattle
+ jump .FinishRivalBattle
+
+.Chikorita:
+ winlosstext UndergroundSilverWinText, UndergroundSilverLossText
+ setlasttalked GOLDENRODUNDERGROUNDSWITCHROOMENTRANCES_SILVER
+ loadtrainer RIVAL1, RIVAL1_4_CYNDAQUIL
+ startbattle
+ dontrestartmapmusic
+ reloadmapafterbattle
+ jump .FinishRivalBattle
+
+.FinishRivalBattle:
+ playmusic MUSIC_RIVAL_AFTER
+ opentext
+ writetext UndergroundSilverAfterText
+ waitbutton
+ closetext
+ end
+
+TrainerGruntM11:
+ trainer GRUNTM, GRUNTM_11, EVENT_BEAT_ROCKET_GRUNTM_11, GruntM11SeenText, GruntM11BeatenText, 0, .Script
+
+.Script:
+ endifjustbattled
+ opentext
+ writetext GruntM11AfterBattleText
+ waitbutton
+ closetext
+ end
+
+TrainerGruntM25:
+ trainer GRUNTM, GRUNTM_25, EVENT_BEAT_ROCKET_GRUNTM_25, GruntM25SeenText, GruntM25BeatenText, 0, .Script
+
+.Script:
+ endifjustbattled
+ opentext
+ writetext GruntM25AfterBattleText
+ waitbutton
+ closetext
+ end
+
+TrainerBurglarDuncan:
+ trainer BURGLAR, DUNCAN, EVENT_BEAT_BURGLAR_DUNCAN, BurglarDuncanSeenText, BurglarDuncanBeatenText, 0, .Script
+
+.Script:
+ endifjustbattled
+ opentext
+ writetext BurglarDuncanAfterBattleText
+ waitbutton
+ closetext
+ end
+
+TrainerBurglarEddie:
+ trainer BURGLAR, EDDIE, EVENT_BEAT_BURGLAR_EDDIE, BurglarEddieSeenText, BurglarEddieBeatenText, 0, .Script
+
+.Script:
+ endifjustbattled
+ opentext
+ writetext BurglarEddieAfterBattleText
+ waitbutton
+ closetext
+ end
+
+TrainerGruntM13:
+ trainer GRUNTM, GRUNTM_13, EVENT_BEAT_ROCKET_GRUNTM_13, GruntM13SeenText, GruntM13BeatenText, 0, .Script
+
+.Script:
+ endifjustbattled
+ opentext
+ writetext GruntM13AfterBattleText
+ waitbutton
+ closetext
+ end
+
+TrainerGruntF3:
+ trainer GRUNTF, GRUNTF_3, EVENT_BEAT_ROCKET_GRUNTF_3, GruntF3SeenText, GruntF3BeatenText, 0, .Script
+
+.Script:
+ endifjustbattled
+ opentext
+ writetext GruntF3AfterBattleText
+ waitbutton
+ closetext
+ end
+
+Switch1Script:
+ opentext
+ writetext SwitchRoomText_Switch1
+ buttonsound
+ checkevent EVENT_SWITCH_1
+ iftrue .On
+ writetext SwitchRoomText_OffTurnOn
+ yesorno
+ iffalse GoldenrodUndergroundSwitchRoomEntrances_DontToggle
+ copybytetovar wUndergroundSwitchPositions
+ addvar 1
+ copyvartobyte wUndergroundSwitchPositions
+ setevent EVENT_SWITCH_1
+ jump GoldenrodUndergroundSwitchRoomEntrances_UpdateDoors
+
+.On:
+ writetext SwitchRoomText_OnTurnOff
+ yesorno
+ iffalse GoldenrodUndergroundSwitchRoomEntrances_DontToggle
+ copybytetovar wUndergroundSwitchPositions
+ addvar -1
+ copyvartobyte wUndergroundSwitchPositions
+ clearevent EVENT_SWITCH_1
+ jump GoldenrodUndergroundSwitchRoomEntrances_UpdateDoors
+
+Switch2Script:
+ opentext
+ writetext SwitchRoomText_Switch2
+ buttonsound
+ checkevent EVENT_SWITCH_2
+ iftrue .On
+ writetext SwitchRoomText_OffTurnOn
+ yesorno
+ iffalse GoldenrodUndergroundSwitchRoomEntrances_DontToggle
+ copybytetovar wUndergroundSwitchPositions
+ addvar 2
+ copyvartobyte wUndergroundSwitchPositions
+ setevent EVENT_SWITCH_2
+ jump GoldenrodUndergroundSwitchRoomEntrances_UpdateDoors
+
+.On:
+ writetext SwitchRoomText_OnTurnOff
+ yesorno
+ iffalse GoldenrodUndergroundSwitchRoomEntrances_DontToggle
+ copybytetovar wUndergroundSwitchPositions
+ addvar -2
+ copyvartobyte wUndergroundSwitchPositions
+ clearevent EVENT_SWITCH_2
+ jump GoldenrodUndergroundSwitchRoomEntrances_UpdateDoors
+
+Switch3Script:
+ opentext
+ writetext SwitchRoomText_Switch3
+ buttonsound
+ checkevent EVENT_SWITCH_3
+ iftrue .On
+ writetext SwitchRoomText_OffTurnOn
+ yesorno
+ iffalse GoldenrodUndergroundSwitchRoomEntrances_DontToggle
+ copybytetovar wUndergroundSwitchPositions
+ addvar 3
+ copyvartobyte wUndergroundSwitchPositions
+ setevent EVENT_SWITCH_3
+ jump GoldenrodUndergroundSwitchRoomEntrances_UpdateDoors
+
+.On:
+ writetext SwitchRoomText_OnTurnOff
+ yesorno
+ iffalse GoldenrodUndergroundSwitchRoomEntrances_DontToggle
+ copybytetovar wUndergroundSwitchPositions
+ addvar -3
+ copyvartobyte wUndergroundSwitchPositions
+ clearevent EVENT_SWITCH_3
+ jump GoldenrodUndergroundSwitchRoomEntrances_UpdateDoors
+
+EmergencySwitchScript:
+ opentext
+ writetext SwitchRoomText_Emergency
+ buttonsound
+ checkevent EVENT_EMERGENCY_SWITCH
+ iftrue .On
+ writetext SwitchRoomText_OffTurnOn
+ yesorno
+ iffalse GoldenrodUndergroundSwitchRoomEntrances_DontToggle
+ writebyte 7
+ copyvartobyte wUndergroundSwitchPositions
+ setevent EVENT_EMERGENCY_SWITCH
+ setevent EVENT_SWITCH_1
+ setevent EVENT_SWITCH_2
+ setevent EVENT_SWITCH_3
+ jump GoldenrodUndergroundSwitchRoomEntrances_UpdateDoors
+
+.On:
+ writetext SwitchRoomText_OnTurnOff
+ yesorno
+ iffalse GoldenrodUndergroundSwitchRoomEntrances_DontToggle
+ writebyte 0
+ copyvartobyte wUndergroundSwitchPositions
+ clearevent EVENT_EMERGENCY_SWITCH
+ clearevent EVENT_SWITCH_1
+ clearevent EVENT_SWITCH_2
+ clearevent EVENT_SWITCH_3
+ jump GoldenrodUndergroundSwitchRoomEntrances_UpdateDoors
+
+GoldenrodUndergroundSwitchRoomEntrances_DontToggle:
+ closetext
+ end
+
+GoldenrodUndergroundSwitchRoomEntrances_UpdateDoors:
+ copybytetovar wUndergroundSwitchPositions
+ ifequal 0, .Position0
+ ifequal 1, .Position1
+ ifequal 2, .Position2
+ ifequal 3, .Position3
+ ifequal 4, .Position4
+ ifequal 5, .Position5
+ ifequal 6, .Position6
+ ifequal 7, .EmergencyPosition
+.Position0:
+ playsound SFX_ENTER_DOOR
+ scall .Clear4
+ scall .Clear5
+ scall .Clear6
+ scall .Clear7
+ scall .Clear8
+ scall .Clear9
+ scall .Clear10
+ scall .Clear11
+ scall .Clear12
+ scall .Clear13
+ scall .Clear14
+ reloadmappart
+ closetext
+ end
+
+.Position1:
+ playsound SFX_ENTER_DOOR
+ scall .Set4
+ scall .Set10
+ scall .Set13
+ scall .Clear9
+ scall .Clear11
+ scall .Clear12
+ scall .Clear14
+ reloadmappart
+ closetext
+ end
+
+.Position2:
+ playsound SFX_ENTER_DOOR
+ scall .Set5
+ scall .Set11
+ scall .Set12
+ scall .Clear8
+ scall .Clear10
+ scall .Clear13
+ scall .Clear14
+ reloadmappart
+ closetext
+ end
+
+.Position3:
+ playsound SFX_ENTER_DOOR
+ scall .Set6
+ scall .Set10
+ scall .Set13
+ scall .Clear7
+ scall .Clear11
+ scall .Clear12
+ scall .Clear14
+ reloadmappart
+ closetext
+ end
+
+.Position4:
+ playsound SFX_ENTER_DOOR
+ scall .Set7
+ scall .Set11
+ scall .Set12
+ scall .Clear6
+ scall .Clear10
+ scall .Clear13
+ scall .Clear14
+ reloadmappart
+ closetext
+ end
+
+.Position5:
+ playsound SFX_ENTER_DOOR
+ scall .Set8
+ scall .Set10
+ scall .Set13
+ scall .Clear5
+ scall .Clear11
+ scall .Clear12
+ scall .Clear14
+ reloadmappart
+ closetext
+ end
+
+.Position6:
+ playsound SFX_ENTER_DOOR
+ scall .Set9
+ scall .Set11
+ scall .Set12
+ scall .Set14
+ scall .Clear4
+ scall .Clear10
+ scall .Clear13
+ reloadmappart
+ closetext
+ end
+
+.EmergencyPosition:
+ playsound SFX_ENTER_DOOR
+ scall .Clear4
+ scall .Clear5
+ scall .Set6
+ scall .Clear7
+ scall .Set8
+ scall .Set9
+ scall .Clear10
+ scall .Set11
+ scall .Set12
+ scall .Clear13
+ scall .Set14
+ reloadmappart
+ closetext
+ writebyte 6
+ copyvartobyte wUndergroundSwitchPositions
+ end
+
+.Set4:
+ doorstate 1, OPEN1
+ setevent EVENT_SWITCH_4
+ end
+
+.Set5:
+ doorstate 2, OPEN1
+ setevent EVENT_SWITCH_5
+ end
+
+.Set6:
+ doorstate 3, OPEN1
+ setevent EVENT_SWITCH_6
+ end
+
+.Set7:
+ doorstate 4, OPEN1
+ setevent EVENT_SWITCH_7
+ end
+
+.Set8:
+ doorstate 5, OPEN1
+ setevent EVENT_SWITCH_8
+ end
+
+.Set9:
+ doorstate 6, OPEN1
+ setevent EVENT_SWITCH_9
+ end
+
+.Set10:
+ doorstate 7, CLOSED1
+ doorstate 8, OPEN1
+ setevent EVENT_SWITCH_10
+ end
+
+.Set11:
+ doorstate 9, CLOSED1
+ doorstate 10, OPEN1
+ setevent EVENT_SWITCH_11
+ end
+
+.Set12:
+ doorstate 11, CLOSED1
+ doorstate 12, OPEN1
+ setevent EVENT_SWITCH_12
+ end
+
+.Set13:
+ doorstate 13, CLOSED1
+ doorstate 14, OPEN1
+ setevent EVENT_SWITCH_13
+ end
+
+.Set14:
+ doorstate 15, CLOSED1
+ doorstate 16, OPEN1
+ setevent EVENT_SWITCH_14
+ end
+
+.Clear4:
+ doorstate 1, CLOSED2
+ clearevent EVENT_SWITCH_4
+ end
+
+.Clear5:
+ doorstate 2, CLOSED2
+ clearevent EVENT_SWITCH_5
+ end
+
+.Clear6:
+ doorstate 3, CLOSED2
+ clearevent EVENT_SWITCH_6
+ end
+
+.Clear7:
+ doorstate 4, CLOSED2
+ clearevent EVENT_SWITCH_7
+ end
+
+.Clear8:
+ doorstate 5, CLOSED2
+ clearevent EVENT_SWITCH_8
+ end
+
+.Clear9:
+ doorstate 6, CLOSED2
+ clearevent EVENT_SWITCH_9
+ end
+
+.Clear10:
+ doorstate 7, CLOSED3
+ doorstate 8, OPEN2
+ clearevent EVENT_SWITCH_10
+ end
+
+.Clear11:
+ doorstate 9, CLOSED3
+ doorstate 10, OPEN2
+ clearevent EVENT_SWITCH_11
+ end
+
+.Clear12:
+ doorstate 11, CLOSED3
+ doorstate 12, OPEN2
+ clearevent EVENT_SWITCH_12
+ end
+
+.Clear13:
+ doorstate 13, CLOSED3
+ doorstate 14, OPEN2
+ clearevent EVENT_SWITCH_13
+ end
+
+.Clear14:
+ doorstate 15, CLOSED3
+ doorstate 16, OPEN2
+ clearevent EVENT_SWITCH_14
+ end
+
+GoldenrodUndergroundSwitchRoomEntrancesSmokeBall:
+ itemball SMOKE_BALL
+
+GoldenrodUndergroundSwitchRoomEntrancesFullHeal:
+ itemball FULL_HEAL
+
+GoldenrodUndergroundSwitchRoomEntrancesHiddenMaxPotion:
+ hiddenitem MAX_POTION, EVENT_GOLDENROD_UNDERGROUND_SWITCH_ROOM_ENTRANCES_HIDDEN_MAX_POTION
+
+GoldenrodUndergroundSwitchRoomEntrancesHiddenRevive:
+ hiddenitem REVIVE, EVENT_GOLDENROD_UNDERGROUND_SWITCH_ROOM_ENTRANCES_HIDDEN_REVIVE
+
+UndergroundSilverApproachMovement1:
+ step DOWN
+ step LEFT
+ step LEFT
+ step LEFT
+ step_end
+
+UndergroundSilverApproachMovement2:
+ step DOWN
+ step DOWN
+ step LEFT
+ step LEFT
+ step LEFT
+ step_end
+
+UndergroundSilverRetreatMovement1:
+ step RIGHT
+ step RIGHT
+ step RIGHT
+ step UP
+ step_end
+
+UndergroundSilverRetreatMovement2:
+ step RIGHT
+ step RIGHT
+ step RIGHT
+ step UP
+ step UP
+ step_end
+
+UndergroundSilverBeforeText:
+ text "Hold it!"
+
+ para "I saw you, so I"
+ line "tailed you."
+
+ para "I don't need you"
+ line "underfoot while I"
+
+ para "take care of TEAM"
+ line "ROCKET."
+
+ para "…Wait a second."
+ line "You beat me be-"
+ cont "fore, didn't you?"
+
+ para "That was just a"
+ line "fluke."
+
+ para "But I repay my"
+ line "debts!"
+ done
+
+UndergroundSilverWinText:
+ text "…Why…"
+ line "Why do I lose?"
+
+ para "I've assembled the"
+ line "toughest #MON."
+
+ para "I didn't ease up"
+ line "on the gas."
+
+ para "So why do I lose?"
+ done
+
+UndergroundSilverAfterText:
+ text "…I don't under-"
+ line "stand…"
+
+ para "Is what that LANCE"
+ line "guy said true?"
+
+ para "That I don't treat"
+ line "#MON properly?"
+
+ para "Love…"
+
+ para "Trust…"
+
+ para "Are they really"
+ line "what I lack?"
+
+ para "Are they keeping"
+ line "me from winning?"
+
+ para "I… I just don't"
+ line "understand."
+
+ para "But it's not going"
+ line "to end here."
+
+ para "Not now. Not"
+ line "because of this."
+
+ para "I won't give up my"
+ line "dream of becoming"
+
+ para "the world's best"
+ line "#MON trainer!"
+ done
+
+UndergroundSilverLossText:
+ text "Humph. This is my"
+ line "real power, wimp."
+
+ para "I'll make TEAM"
+ line "ROCKET history."
+
+ para "And I'm going to"
+ line "grind that LANCE"
+ cont "under my heels."
+ done
+
+GoldenrodUndergroundSwitchRoomEntrances_SuperNerdText:
+ text "I was challenged"
+ line "to a battle down-"
+ cont "stairs."
+
+ para "It's rough down"
+ line "there. You'd"
+ cont "better be careful."
+ done
+
+GoldenrodUndergroundSwitchRoomEntrances_TeacherText:
+ text "There are some"
+ line "shops downstairs…"
+
+ para "But there are"
+ line "also trainers."
+
+ para "I'm scared to go"
+ line "down there."
+ done
+
+GruntM11SeenText:
+ text "Open one shutter,"
+ line "another closes."
+
+ para "Bet you can't get"
+ line "where you want!"
+ done
+
+GruntM11BeatenText:
+ text "Drat! I was sunk"
+ line "by indecision!"
+ done
+
+GruntM11AfterBattleText:
+ text "I'm confused too…"
+ line "The switch on the"
+
+ para "end is the one to"
+ line "press first, but…"
+ done
+
+GruntM25SeenText:
+ text "Kwahaha!"
+
+ para "Confounded by the"
+ line "shutters, are we?"
+
+ para "I'll let you in on"
+ line "a secret if you"
+ cont "can beat me!"
+ done
+
+GruntM25BeatenText:
+ text "Uwww…"
+ line "I blew it."
+ done
+
+GruntM25AfterBattleText:
+ text "All right. A hint!"
+
+ para "Change the order"
+ line "of switching."
+
+ para "That'll change the"
+ line "ways the shutters"
+ cont "open and close."
+ done
+
+BurglarDuncanSeenText:
+ text "Fork over your"
+ line "goodies!"
+ done
+
+BurglarDuncanBeatenText:
+ text "Mercy!"
+ done
+
+BurglarDuncanAfterBattleText:
+ text "Steal and sell!"
+ line "That's basic in"
+ cont "crime, bub!"
+ done
+
+BurglarEddieSeenText:
+ text "They ditched this"
+ line "project before"
+ cont "they finished."
+
+ para "I'm searching for"
+ line "leftover loot."
+ done
+
+BurglarEddieBeatenText:
+ text "Over the top!"
+ done
+
+BurglarEddieAfterBattleText:
+ text "UNDERGROUND WARE-"
+ line "HOUSE?"
+
+ para "What do you want"
+ line "to go there for?"
+
+ para "There's nothing"
+ line "down there."
+ done
+
+GruntM13SeenText:
+ text "I don't care if"
+ line "you're lost."
+
+ para "You show up here,"
+ line "you're nothing but"
+ cont "a victim!"
+ done
+
+GruntM13BeatenText:
+ text "Urk! Yeah, think"
+ line "you're cool, huh?"
+ done
+
+GruntM13AfterBattleText:
+ text "You must have ice"
+ line "in your veins to"
+ cont "dis TEAM ROCKET."
+ done
+
+SwitchRoomText_Switch1:
+ text "It's labeled"
+ line "SWITCH 1."
+ done
+
+GruntF3SeenText:
+ text "Are you lost? No,"
+ line "you can't be."
+
+ para "You don't have"
+ line "that scared look."
+
+ para "I'll give you"
+ line "something to be"
+ cont "scared about!"
+ done
+
+GruntF3BeatenText:
+ text "How could you?"
+ done
+
+GruntF3AfterBattleText:
+ text "Go wherever you'd"
+ line "like! Get lost!"
+ cont "See if I care!"
+ done
+
+SwitchRoomText_OffTurnOn:
+ text "It's OFF."
+ line "Turn it ON?"
+ done
+
+SwitchRoomText_OnTurnOff:
+ text "It's ON."
+ line "Turn it OFF?"
+ done
+
+SwitchRoomText_Switch2:
+ text "It's labeled"
+ line "SWITCH 2."
+ done
+
+SwitchRoomText_Switch3:
+ text "It's labeled"
+ line "SWITCH 3."
+ done
+
+SwitchRoomText_Emergency:
+ text "It's labeled"
+ line "EMERGENCY."
+ done
+
+GoldenrodUndergroundSwitchRoomEntrances_MapEvents:
+ db 0, 0 ; filler
+
+ db 9 ; warp events
+ warp_event 23, 3, GOLDENROD_UNDERGROUND, 6
+ warp_event 22, 10, GOLDENROD_UNDERGROUND_WAREHOUSE, 1
+ warp_event 23, 10, GOLDENROD_UNDERGROUND_WAREHOUSE, 2
+ warp_event 5, 25, GOLDENROD_UNDERGROUND, 2
+ warp_event 4, 29, GOLDENROD_CITY, 15
+ warp_event 5, 29, GOLDENROD_CITY, 15
+ warp_event 21, 25, GOLDENROD_UNDERGROUND, 1
+ warp_event 20, 29, GOLDENROD_CITY, 14
+ warp_event 21, 29, GOLDENROD_CITY, 14
+
+ db 2 ; coord events
+ coord_event 19, 4, SCENE_DEFAULT, UndergroundSilverScene1
+ coord_event 19, 5, SCENE_DEFAULT, UndergroundSilverScene2
+
+ db 6 ; bg events
+ bg_event 16, 1, BGEVENT_READ, Switch1Script
+ bg_event 10, 1, BGEVENT_READ, Switch2Script
+ bg_event 2, 1, BGEVENT_READ, Switch3Script
+ bg_event 20, 11, BGEVENT_READ, EmergencySwitchScript
+ bg_event 8, 9, BGEVENT_ITEM, GoldenrodUndergroundSwitchRoomEntrancesHiddenMaxPotion
+ bg_event 1, 8, BGEVENT_ITEM, GoldenrodUndergroundSwitchRoomEntrancesHiddenRevive
+
+ db 11 ; object events
+ object_event 9, 12, SPRITE_PHARMACIST, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, PAL_NPC_GREEN, OBJECTTYPE_TRAINER, 2, TrainerBurglarDuncan, EVENT_RADIO_TOWER_ROCKET_TAKEOVER
+ object_event 4, 8, SPRITE_PHARMACIST, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, PAL_NPC_GREEN, OBJECTTYPE_TRAINER, 2, TrainerBurglarEddie, EVENT_RADIO_TOWER_ROCKET_TAKEOVER
+ object_event 17, 2, SPRITE_ROCKET, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, OBJECTTYPE_TRAINER, 3, TrainerGruntM13, EVENT_RADIO_TOWER_ROCKET_TAKEOVER
+ object_event 11, 2, SPRITE_ROCKET, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, OBJECTTYPE_TRAINER, 3, TrainerGruntM11, EVENT_RADIO_TOWER_ROCKET_TAKEOVER
+ object_event 3, 2, SPRITE_ROCKET, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, OBJECTTYPE_TRAINER, 3, TrainerGruntM25, EVENT_RADIO_TOWER_ROCKET_TAKEOVER
+ object_event 19, 12, SPRITE_ROCKET_GIRL, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, PAL_NPC_RED, OBJECTTYPE_TRAINER, 1, TrainerGruntF3, EVENT_RADIO_TOWER_ROCKET_TAKEOVER
+ object_event 3, 27, SPRITE_TEACHER, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, OBJECTTYPE_SCRIPT, 0, GoldenrodUndergroundSwitchRoomEntrancesTeacherScript, -1
+ object_event 19, 27, SPRITE_SUPER_NERD, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, OBJECTTYPE_SCRIPT, 0, GoldenrodUndergroundSwitchRoomEntrancesSuperNerdScript, -1
+ object_event 1, 12, SPRITE_POKE_BALL, SPRITEMOVEDATA_STILL, 0, 0, -1, -1, 0, OBJECTTYPE_ITEMBALL, 0, GoldenrodUndergroundSwitchRoomEntrancesSmokeBall, EVENT_GOLDENROD_UNDERGROUND_SWITCH_ROOM_ENTRANCES_SMOKE_BALL
+ object_event 14, 9, SPRITE_POKE_BALL, SPRITEMOVEDATA_STILL, 0, 0, -1, -1, 0, OBJECTTYPE_ITEMBALL, 0, GoldenrodUndergroundSwitchRoomEntrancesFullHeal, EVENT_GOLDENROD_UNDERGROUND_SWITCH_ROOM_ENTRANCES_FULL_HEAL
+ object_event 23, 3, SPRITE_SILVER, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, OBJECTTYPE_SCRIPT, 0, ObjectEvent, EVENT_RIVAL_GOLDENROD_UNDERGROUND
diff --git a/maps/GoldenrodUndergroundWarehouse.asm b/maps/GoldenrodUndergroundWarehouse.asm
new file mode 100644
index 00000000..e9e9e735
--- /dev/null
+++ b/maps/GoldenrodUndergroundWarehouse.asm
@@ -0,0 +1,226 @@
+ const_def 2 ; object constants
+ const GOLDENRODUNDERGROUNDWAREHOUSE_ROCKET1
+ const GOLDENRODUNDERGROUNDWAREHOUSE_ROCKET2
+ const GOLDENRODUNDERGROUNDWAREHOUSE_ROCKET3
+ const GOLDENRODUNDERGROUNDWAREHOUSE_GENTLEMAN
+ const GOLDENRODUNDERGROUNDWAREHOUSE_POKE_BALL1
+ const GOLDENRODUNDERGROUNDWAREHOUSE_POKE_BALL2
+ const GOLDENRODUNDERGROUNDWAREHOUSE_POKE_BALL3
+
+GoldenrodUndergroundWarehouse_MapScripts:
+ db 0 ; scene scripts
+
+ db 1 ; callbacks
+ callback MAPCALLBACK_NEWMAP, .ResetSwitches
+
+.ResetSwitches:
+ clearevent EVENT_SWITCH_1
+ clearevent EVENT_SWITCH_2
+ clearevent EVENT_SWITCH_3
+ clearevent EVENT_EMERGENCY_SWITCH
+ clearevent EVENT_SWITCH_4
+ clearevent EVENT_SWITCH_5
+ clearevent EVENT_SWITCH_6
+ clearevent EVENT_SWITCH_7
+ clearevent EVENT_SWITCH_8
+ clearevent EVENT_SWITCH_9
+ clearevent EVENT_SWITCH_10
+ clearevent EVENT_SWITCH_11
+ clearevent EVENT_SWITCH_12
+ clearevent EVENT_SWITCH_13
+ clearevent EVENT_SWITCH_14
+ writebyte 0
+ copyvartobyte wUndergroundSwitchPositions
+ return
+
+TrainerGruntM24:
+ trainer GRUNTM, GRUNTM_24, EVENT_BEAT_ROCKET_GRUNTM_24, GruntM24SeenText, GruntM24BeatenText, 0, .Script
+
+.Script:
+ endifjustbattled
+ opentext
+ writetext GruntM24AfterBattleText
+ waitbutton
+ closetext
+ end
+
+TrainerGruntM14:
+ trainer GRUNTM, GRUNTM_14, EVENT_BEAT_ROCKET_GRUNTM_14, GruntM14SeenText, GruntM14BeatenText, 0, .Script
+
+.Script:
+ endifjustbattled
+ opentext
+ writetext GruntM14AfterBattleText
+ waitbutton
+ closetext
+ end
+
+TrainerGruntM15:
+ trainer GRUNTM, GRUNTM_15, EVENT_BEAT_ROCKET_GRUNTM_15, GruntM15SeenText, GruntM15BeatenText, 0, .Script
+
+.Script:
+ endifjustbattled
+ opentext
+ writetext GruntM15AfterBattleText
+ waitbutton
+ closetext
+ end
+
+GoldenrodUndergroundWarehouseDirectorScript:
+ faceplayer
+ opentext
+ checkevent EVENT_RECEIVED_CARD_KEY
+ iftrue .GotCardKey
+ writetext DirectorIntroText
+ buttonsound
+ verbosegiveitem CARD_KEY
+ setevent EVENT_RECEIVED_CARD_KEY
+ setevent EVENT_GOLDENROD_DEPT_STORE_B1F_LAYOUT_1
+ clearevent EVENT_GOLDENROD_DEPT_STORE_B1F_LAYOUT_2
+ clearevent EVENT_GOLDENROD_DEPT_STORE_B1F_LAYOUT_3
+ writetext DirectorCardKeyText
+ buttonsound
+.GotCardKey:
+ writetext DirectorAfterText
+ waitbutton
+ closetext
+ end
+
+GoldenrodUndergroundWarehouseMaxEther:
+ itemball MAX_ETHER
+
+GoldenrodUndergroundWarehouseTMSleepTalk:
+ itemball TM_SLEEP_TALK
+
+GruntM24SeenText:
+ text "How did you get"
+ line "this far?"
+
+ para "I guess it can't"
+ line "be helped. I'll"
+ cont "dispose of you."
+ done
+
+GruntM24BeatenText:
+ text "He disposed of me…"
+ done
+
+GruntM24AfterBattleText:
+ text "TEAM ROCKET will"
+ line "keep going, wait-"
+ cont "ing for the return"
+ cont "of GIOVANNI."
+
+ para "We'll do whatever"
+ line "it takes."
+ done
+
+GruntM14SeenText:
+ text "You're not going"
+ line "any farther!"
+
+ para "I don't show mercy"
+ line "to my enemies, not"
+ cont "even brats!"
+ done
+
+GruntM14BeatenText:
+ text "Blast it!"
+ done
+
+GruntM14AfterBattleText:
+ text "I lost…"
+
+ para "Please forgive me,"
+ line "GIOVANNI!"
+ done
+
+GruntM15SeenText:
+ text "Hyuck-hyuck-hyuck!"
+ line "I remember you!"
+
+ para "You got me good"
+ line "at our hideout!"
+ done
+
+GruntM15BeatenText:
+ text "Hyuck-hyuck-hyuck!"
+ line "So, that's how?"
+ done
+
+GruntM15AfterBattleText:
+ text "Hyuck-hyuck-hyuck!"
+ line "That was a blast!"
+ cont "I'll remember you!"
+ done
+
+DirectorIntroText:
+ text "DIRECTOR: Who?"
+ line "What? You came to"
+ cont "rescue me?"
+
+ para "Thank you!"
+
+ para "The RADIO TOWER!"
+
+ para "What's happening"
+ line "there?"
+
+ para "Taken over by TEAM"
+ line "ROCKET?"
+
+ para "Here. Take this"
+ line "CARD KEY."
+ done
+
+DirectorCardKeyText:
+ text "DIRECTOR: Use that"
+ line "to open the shut-"
+ cont "ters on 3F."
+ done
+
+DirectorAfterText:
+ text "I'm begging you to"
+ line "help."
+
+ para "There's no telling"
+ line "what they'll do if"
+
+ para "they control the"
+ line "transmitter."
+
+ para "They may even be"
+ line "able to control"
+
+ para "#MON using a"
+ line "special signal!"
+
+ para "You're the only"
+ line "one I can call on."
+
+ para "Please save the"
+ line "RADIO TOWER…"
+
+ para "And all the #-"
+ line "MON nationwide!"
+ done
+
+GoldenrodUndergroundWarehouse_MapEvents:
+ db 0, 0 ; filler
+
+ db 3 ; warp events
+ warp_event 2, 12, GOLDENROD_UNDERGROUND_SWITCH_ROOM_ENTRANCES, 2
+ warp_event 3, 12, GOLDENROD_UNDERGROUND_SWITCH_ROOM_ENTRANCES, 3
+ warp_event 17, 2, GOLDENROD_DEPT_STORE_B1F, 1
+
+ db 0 ; coord events
+
+ db 0 ; bg events
+
+ db 6 ; object events
+ object_event 9, 8, SPRITE_ROCKET, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, 0, OBJECTTYPE_TRAINER, 3, TrainerGruntM24, EVENT_RADIO_TOWER_ROCKET_TAKEOVER
+ object_event 8, 15, SPRITE_ROCKET, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, 0, OBJECTTYPE_TRAINER, 3, TrainerGruntM14, EVENT_RADIO_TOWER_ROCKET_TAKEOVER
+ object_event 14, 3, SPRITE_ROCKET, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, OBJECTTYPE_TRAINER, 4, TrainerGruntM15, EVENT_RADIO_TOWER_ROCKET_TAKEOVER
+ object_event 12, 8, SPRITE_GENTLEMAN, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, 0, OBJECTTYPE_SCRIPT, 0, GoldenrodUndergroundWarehouseDirectorScript, EVENT_RADIO_TOWER_ROCKET_TAKEOVER
+ object_event 18, 15, SPRITE_POKE_BALL, SPRITEMOVEDATA_STILL, 0, 0, -1, -1, 0, OBJECTTYPE_ITEMBALL, 0, GoldenrodUndergroundWarehouseMaxEther, EVENT_UNDERGROUND_WAREHOUSE_MAX_ETHER
+ object_event 13, 9, SPRITE_POKE_BALL, SPRITEMOVEDATA_STILL, 0, 0, -1, -1, 0, OBJECTTYPE_ITEMBALL, 0, GoldenrodUndergroundWarehouseTMSleepTalk, EVENT_UNDERGROUND_WAREHOUSE_TM_SLEEP_TALK
diff --git a/maps/IcePath1F.asm b/maps/IcePath1F.asm
new file mode 100644
index 00000000..23c16580
--- /dev/null
+++ b/maps/IcePath1F.asm
@@ -0,0 +1,32 @@
+ const_def 2 ; object constants
+ const ICEPATH1F_POKE_BALL1
+ const ICEPATH1F_POKE_BALL2
+ const ICEPATH1F_POKE_BALL3
+
+IcePath1F_MapScripts:
+ db 0 ; scene scripts
+
+ db 0 ; callbacks
+
+IcePath1FHMWaterfall:
+ itemball HM_WATERFALL
+
+IcePath1FPPUp:
+ itemball PP_UP
+
+IcePath1F_MapEvents:
+ db 0, 0 ; filler
+
+ db 4 ; warp events
+ warp_event 4, 19, ROUTE_44, 1
+ warp_event 36, 27, BLACKTHORN_CITY, 7
+ warp_event 37, 5, ICE_PATH_B1F, 1
+ warp_event 37, 13, ICE_PATH_B1F, 7
+
+ db 0 ; coord events
+
+ db 0 ; bg events
+
+ db 2 ; object events
+ object_event 31, 7, SPRITE_POKE_BALL, SPRITEMOVEDATA_STILL, 0, 0, -1, -1, 0, OBJECTTYPE_ITEMBALL, 0, IcePath1FHMWaterfall, EVENT_GOT_HM07_WATERFALL
+ object_event 32, 23, SPRITE_POKE_BALL, SPRITEMOVEDATA_STILL, 0, 0, -1, -1, 0, OBJECTTYPE_ITEMBALL, 0, IcePath1FPPUp, EVENT_ICE_PATH_1F_PP_UP
diff --git a/maps/IcePathB1F.asm b/maps/IcePathB1F.asm
new file mode 100644
index 00000000..5f3c150d
--- /dev/null
+++ b/maps/IcePathB1F.asm
@@ -0,0 +1,99 @@
+ const_def 2 ; object constants
+ const ICEPATHB1F_BOULDER1
+ const ICEPATHB1F_BOULDER2
+ const ICEPATHB1F_BOULDER3
+ const ICEPATHB1F_BOULDER4
+ const ICEPATHB1F_POKE_BALL
+
+IcePathB1F_MapScripts:
+ db 0 ; scene scripts
+
+ db 1 ; callbacks
+ callback MAPCALLBACK_CMDQUEUE, .SetUpStoneTable
+
+.SetUpStoneTable:
+ writecmdqueue .CommandQueue
+ return
+
+.CommandQueue:
+ cmdqueue CMDQUEUE_STONETABLE, .StoneTable ; check if any stones are sitting on a warp
+
+.StoneTable:
+ stonetable 3, ICEPATHB1F_BOULDER1, .Boulder1
+ stonetable 4, ICEPATHB1F_BOULDER2, .Boulder2
+ stonetable 5, ICEPATHB1F_BOULDER3, .Boulder3
+ stonetable 6, ICEPATHB1F_BOULDER4, .Boulder4
+ db -1 ; end
+
+.Boulder1:
+ disappear ICEPATHB1F_BOULDER1
+ clearevent EVENT_BOULDER_IN_ICE_PATH_1A
+ jump .FinishBoulder
+
+.Boulder2:
+ disappear ICEPATHB1F_BOULDER2
+ clearevent EVENT_BOULDER_IN_ICE_PATH_2A
+ jump .FinishBoulder
+
+.Boulder3:
+ disappear ICEPATHB1F_BOULDER3
+ clearevent EVENT_BOULDER_IN_ICE_PATH_3A
+ jump .FinishBoulder
+
+.Boulder4:
+ disappear ICEPATHB1F_BOULDER4
+ clearevent EVENT_BOULDER_IN_ICE_PATH_4A
+ jump .FinishBoulder
+
+.FinishBoulder:
+ pause 30
+ scall .BoulderFallsThrough
+ opentext
+ writetext IcePathBoulderFellThroughText
+ waitbutton
+ closetext
+ end
+
+.BoulderFallsThrough:
+ playsound SFX_STRENGTH
+ earthquake 80
+ end
+
+IcePathB1FBoulder:
+ jumpstd strengthboulder
+
+IcePathB1FIron:
+ itemball IRON
+
+IcePathB1FHiddenMaxPotion:
+ hiddenitem MAX_POTION, EVENT_ICE_PATH_B1F_HIDDEN_MAX_POTION
+
+IcePathBoulderFellThroughText:
+ text "The boulder fell"
+ line "through."
+ done
+
+IcePathB1F_MapEvents:
+ db 0, 0 ; filler
+
+ db 8 ; warp events
+ warp_event 3, 15, ICE_PATH_1F, 3
+ warp_event 17, 3, ICE_PATH_B2F_MAHOGANY_SIDE, 1
+ warp_event 11, 2, ICE_PATH_B2F_MAHOGANY_SIDE, 3 ; hole
+ warp_event 4, 7, ICE_PATH_B2F_MAHOGANY_SIDE, 4 ; hole
+ warp_event 5, 12, ICE_PATH_B2F_MAHOGANY_SIDE, 5 ; hole
+ warp_event 12, 13, ICE_PATH_B2F_MAHOGANY_SIDE, 6 ; hole
+ warp_event 5, 25, ICE_PATH_1F, 4
+ warp_event 11, 27, ICE_PATH_B2F_BLACKTHORN_SIDE, 1
+
+ db 0 ; coord events
+
+ db 1 ; bg events
+ bg_event 15, 31, BGEVENT_ITEM, IcePathB1FHiddenMaxPotion
+
+ db 5 ; object events
+ object_event 11, 7, SPRITE_BOULDER, SPRITEMOVEDATA_STRENGTH_BOULDER, 0, 0, -1, -1, 0, OBJECTTYPE_SCRIPT, 0, IcePathB1FBoulder, EVENT_BOULDER_IN_ICE_PATH_1
+ object_event 7, 8, SPRITE_BOULDER, SPRITEMOVEDATA_STRENGTH_BOULDER, 0, 0, -1, -1, 0, OBJECTTYPE_SCRIPT, 0, IcePathB1FBoulder, EVENT_BOULDER_IN_ICE_PATH_2
+ object_event 8, 9, SPRITE_BOULDER, SPRITEMOVEDATA_STRENGTH_BOULDER, 0, 0, -1, -1, 0, OBJECTTYPE_SCRIPT, 0, IcePathB1FBoulder, EVENT_BOULDER_IN_ICE_PATH_3
+ object_event 17, 7, SPRITE_BOULDER, SPRITEMOVEDATA_STRENGTH_BOULDER, 0, 0, -1, -1, 0, OBJECTTYPE_SCRIPT, 0, IcePathB1FBoulder, EVENT_BOULDER_IN_ICE_PATH_4
+ object_event 5, 35, SPRITE_POKE_BALL, SPRITEMOVEDATA_STILL, 0, 0, -1, -1, 0, OBJECTTYPE_ITEMBALL, 0, IcePathB1FIron, EVENT_ICE_PATH_B1F_IRON
diff --git a/maps/IcePathB2FBlackthornSide.asm b/maps/IcePathB2FBlackthornSide.asm
new file mode 100644
index 00000000..23ba9377
--- /dev/null
+++ b/maps/IcePathB2FBlackthornSide.asm
@@ -0,0 +1,28 @@
+ const_def 2 ; object constants
+ const ICEPATHB2FBLACKTHORNSIDE_POKE_BALL
+
+IcePathB2FBlackthornSide_MapScripts:
+ db 0 ; scene scripts
+
+ db 0 ; callbacks
+
+IcePathB2FBlackthornSideTMRest:
+ itemball TM_REST
+
+IcePathB2FBlackthornSideHiddenIceHeal:
+ hiddenitem ICE_HEAL, EVENT_ICE_PATH_B2F_BLACKTHORN_SIDE_HIDDEN_ICE_HEAL
+
+IcePathB2FBlackthornSide_MapEvents:
+ db 0, 0 ; filler
+
+ db 2 ; warp events
+ warp_event 3, 15, ICE_PATH_B1F, 8
+ warp_event 3, 3, ICE_PATH_B3F, 2
+
+ db 0 ; coord events
+
+ db 1 ; bg events
+ bg_event 2, 10, BGEVENT_ITEM, IcePathB2FBlackthornSideHiddenIceHeal
+
+ db 1 ; object events
+ object_event 8, 16, SPRITE_POKE_BALL, SPRITEMOVEDATA_STILL, 0, 0, -1, -1, 0, OBJECTTYPE_ITEMBALL, 0, IcePathB2FBlackthornSideTMRest, EVENT_ICE_PATH_B2F_BLACKTHORN_SIDE_TM_REST
diff --git a/maps/IcePathB2FMahoganySide.asm b/maps/IcePathB2FMahoganySide.asm
new file mode 100644
index 00000000..86a706db
--- /dev/null
+++ b/maps/IcePathB2FMahoganySide.asm
@@ -0,0 +1,53 @@
+ const_def 2 ; object constants
+ const ICEPATHB2FMAHOGANYSIDE_BOULDER1
+ const ICEPATHB2FMAHOGANYSIDE_BOULDER2
+ const ICEPATHB2FMAHOGANYSIDE_BOULDER3
+ const ICEPATHB2FMAHOGANYSIDE_BOULDER4
+ const ICEPATHB2FMAHOGANYSIDE_POKE_BALL1
+ const ICEPATHB2FMAHOGANYSIDE_POKE_BALL2
+
+IcePathB2FMahoganySide_MapScripts:
+ db 0 ; scene scripts
+
+ db 0 ; callbacks
+
+IcePathB2FMahoganySideBoulder:
+ jumptext IcePathB2FMahoganySideBoulderText
+
+IcePathB2FMahoganySideFullHeal:
+ itemball FULL_HEAL
+
+IcePathB2FMahoganySideMaxPotion:
+ itemball MAX_POTION
+
+IcePathB2FMahoganySideHiddenCarbos:
+ hiddenitem CARBOS, EVENT_ICE_PATH_B2F_MAHOGANY_SIDE_HIDDEN_CARBOS
+
+IcePathB2FMahoganySideBoulderText:
+ text "It's immovably"
+ line "imbedded in ice."
+ done
+
+IcePathB2FMahoganySide_MapEvents:
+ db 0, 0 ; filler
+
+ db 6 ; warp events
+ warp_event 17, 1, ICE_PATH_B1F, 2
+ warp_event 9, 11, ICE_PATH_B3F, 1
+ warp_event 11, 4, ICE_PATH_B1F, 3
+ warp_event 4, 6, ICE_PATH_B1F, 4
+ warp_event 4, 12, ICE_PATH_B1F, 5
+ warp_event 12, 12, ICE_PATH_B1F, 6
+
+ db 0 ; coord events
+
+ db 1 ; bg events
+ bg_event 0, 17, BGEVENT_ITEM, IcePathB2FMahoganySideHiddenCarbos
+
+ db 6 ; object events
+ object_event 11, 3, SPRITE_BOULDER, SPRITEMOVEDATA_STILL, 0, 0, -1, -1, 0, OBJECTTYPE_SCRIPT, 0, IcePathB2FMahoganySideBoulder, EVENT_BOULDER_IN_ICE_PATH_1A
+ object_event 4, 7, SPRITE_BOULDER, SPRITEMOVEDATA_STILL, 0, 0, -1, -1, 0, OBJECTTYPE_SCRIPT, 0, IcePathB2FMahoganySideBoulder, EVENT_BOULDER_IN_ICE_PATH_2A
+ object_event 3, 12, SPRITE_BOULDER, SPRITEMOVEDATA_STILL, 0, 0, -1, -1, 0, OBJECTTYPE_SCRIPT, 0, IcePathB2FMahoganySideBoulder, EVENT_BOULDER_IN_ICE_PATH_3A
+ object_event 12, 13, SPRITE_BOULDER, SPRITEMOVEDATA_STILL, 0, 0, -1, -1, 0, OBJECTTYPE_SCRIPT, 0, IcePathB2FMahoganySideBoulder, EVENT_BOULDER_IN_ICE_PATH_4A
+ object_event 8, 9, SPRITE_POKE_BALL, SPRITEMOVEDATA_STILL, 0, 0, -1, -1, 0, OBJECTTYPE_ITEMBALL, 0, IcePathB2FMahoganySideFullHeal, EVENT_ICE_PATH_B2F_MAHOGANY_SIDE_FULL_HEAL
+ object_event 0, 2, SPRITE_POKE_BALL, SPRITEMOVEDATA_STILL, 0, 0, -1, -1, 0, OBJECTTYPE_ITEMBALL, 0, IcePathB2FMahoganySideMaxPotion, EVENT_ICE_PATH_B2F_MAHOGANY_SIDE_MAX_POTION
diff --git a/maps/IcePathB3F.asm b/maps/IcePathB3F.asm
new file mode 100644
index 00000000..1130705a
--- /dev/null
+++ b/maps/IcePathB3F.asm
@@ -0,0 +1,29 @@
+ const_def 2 ; object constants
+ const ICEPATHB3F_POKE_BALL
+ const ICEPATHB3F_ROCK
+
+IcePathB3F_MapScripts:
+ db 0 ; scene scripts
+
+ db 0 ; callbacks
+
+IcePathB3FNevermeltice:
+ itemball NEVERMELTICE
+
+IcePathB3FRock:
+ jumpstd smashrock
+
+IcePathB3F_MapEvents:
+ db 0, 0 ; filler
+
+ db 2 ; warp events
+ warp_event 3, 5, ICE_PATH_B2F_MAHOGANY_SIDE, 2
+ warp_event 15, 5, ICE_PATH_B2F_BLACKTHORN_SIDE, 2
+
+ db 0 ; coord events
+
+ db 0 ; bg events
+
+ db 2 ; object events
+ object_event 5, 7, SPRITE_POKE_BALL, SPRITEMOVEDATA_STILL, 0, 0, -1, -1, 0, OBJECTTYPE_ITEMBALL, 0, IcePathB3FNevermeltice, EVENT_ICE_PATH_B3F_NEVERMELTICE
+ object_event 6, 6, SPRITE_ROCK, SPRITEMOVEDATA_SMASHABLE_ROCK, 0, 0, -1, -1, 0, OBJECTTYPE_SCRIPT, 0, IcePathB3FRock, -1
diff --git a/maps/MountMortar1FInside.asm b/maps/MountMortar1FInside.asm
new file mode 100644
index 00000000..3e837835
--- /dev/null
+++ b/maps/MountMortar1FInside.asm
@@ -0,0 +1,53 @@
+ const_def 2 ; object constants
+ const MOUNTMORTAR1FINSIDE_BOULDER
+ const MOUNTMORTAR1FINSIDE_POKE_BALL1
+ const MOUNTMORTAR1FINSIDE_POKE_BALL2
+ const MOUNTMORTAR1FINSIDE_POKE_BALL3
+ const MOUNTMORTAR1FINSIDE_POKE_BALL4
+ const MOUNTMORTAR1FINSIDE_POKE_BALL5
+ const MOUNTMORTAR1FINSIDE_SUPER_NERD1
+ const MOUNTMORTAR1FINSIDE_SUPER_NERD2
+ const MOUNTMORTAR1FINSIDE_POKE_BALL6
+ const MOUNTMORTAR1FINSIDE_POKE_BALL7
+
+MountMortar1FInside_MapScripts:
+ db 0 ; scene scripts
+
+ db 0 ; callbacks
+
+MountMortar1FBoulder:
+ jumpstd strengthboulder
+
+MountMortar1FInsideEscapeRope:
+ itemball ESCAPE_ROPE
+
+MountMortar1FInsideMaxRevive:
+ itemball MAX_REVIVE
+
+MountMortar1FInsideHyperPotion:
+ itemball HYPER_POTION
+
+MountMortar1FInsideHiddenMaxRepel:
+ hiddenitem MAX_REPEL, EVENT_MOUNT_MORTAR_1F_INSIDE_HIDDEN_MAX_REPEL
+
+MountMortar1FInside_MapEvents:
+ db 0, 0 ; filler
+
+ db 6 ; warp events
+ warp_event 11, 47, MOUNT_MORTAR_1F_OUTSIDE, 5
+ warp_event 29, 47, MOUNT_MORTAR_1F_OUTSIDE, 6
+ warp_event 5, 39, MOUNT_MORTAR_1F_OUTSIDE, 8
+ warp_event 33, 41, MOUNT_MORTAR_1F_OUTSIDE, 9
+ warp_event 3, 19, MOUNT_MORTAR_B1F, 1
+ warp_event 9, 9, MOUNT_MORTAR_2F_INSIDE, 2
+
+ db 0 ; coord events
+
+ db 1 ; bg events
+ bg_event 31, 9, BGEVENT_ITEM, MountMortar1FInsideHiddenMaxRepel
+
+ db 4 ; object events
+ object_event 21, 43, SPRITE_BOULDER, SPRITEMOVEDATA_STRENGTH_BOULDER, 0, 0, -1, -1, 0, OBJECTTYPE_SCRIPT, 0, MountMortar1FBoulder, -1
+ object_event 33, 22, SPRITE_POKE_BALL, SPRITEMOVEDATA_STILL, 0, 0, -1, -1, 0, OBJECTTYPE_ITEMBALL, 0, MountMortar1FInsideEscapeRope, EVENT_MOUNT_MORTAR_1F_INSIDE_ESCAPE_ROPE
+ object_event 16, 10, SPRITE_POKE_BALL, SPRITEMOVEDATA_STILL, 0, 0, -1, -1, 0, OBJECTTYPE_ITEMBALL, 0, MountMortar1FInsideMaxRevive, EVENT_MOUNT_MORTAR_1F_INSIDE_MAX_REVIVE
+ object_event 12, 21, SPRITE_POKE_BALL, SPRITEMOVEDATA_STILL, 0, 0, -1, -1, 0, OBJECTTYPE_ITEMBALL, 0, MountMortar1FInsideHyperPotion, EVENT_MOUNT_MORTAR_1F_INSIDE_HYPER_POTION
diff --git a/maps/MountMortar1FOutside.asm b/maps/MountMortar1FOutside.asm
new file mode 100644
index 00000000..d1f123c7
--- /dev/null
+++ b/maps/MountMortar1FOutside.asm
@@ -0,0 +1,40 @@
+ const_def 2 ; object constants
+ const MOUNTMORTAR1FOUTSIDE_POKE_BALL1
+ const MOUNTMORTAR1FOUTSIDE_POKE_BALL2
+
+MountMortar1FOutside_MapScripts:
+ db 0 ; scene scripts
+
+ db 0 ; callbacks
+
+MountMortar1FOutsideEther:
+ itemball ETHER
+
+MountMortar1FOutsideGuardSpec:
+ itemball GUARD_SPEC
+
+MountMortar1FOutsideHiddenHyperPotion:
+ hiddenitem HYPER_POTION, EVENT_MOUNT_MORTAR_1F_OUTSIDE_HIDDEN_HYPER_POTION
+
+MountMortar1FOutside_MapEvents:
+ db 0, 0 ; filler
+
+ db 9 ; warp events
+ warp_event 3, 33, ROUTE_42, 3
+ warp_event 17, 33, ROUTE_42, 4
+ warp_event 37, 33, ROUTE_42, 5
+ warp_event 17, 5, MOUNT_MORTAR_2F_INSIDE, 1
+ warp_event 11, 21, MOUNT_MORTAR_1F_INSIDE, 1
+ warp_event 29, 21, MOUNT_MORTAR_1F_INSIDE, 2
+ warp_event 17, 29, MOUNT_MORTAR_B1F, 2
+ warp_event 7, 13, MOUNT_MORTAR_1F_INSIDE, 3
+ warp_event 33, 13, MOUNT_MORTAR_1F_INSIDE, 4
+
+ db 0 ; coord events
+
+ db 1 ; bg events
+ bg_event 25, 22, BGEVENT_ITEM, MountMortar1FOutsideHiddenHyperPotion
+
+ db 2 ; object events
+ object_event 13, 15, SPRITE_POKE_BALL, SPRITEMOVEDATA_STILL, 0, 0, -1, -1, 0, OBJECTTYPE_ITEMBALL, 0, MountMortar1FOutsideEther, EVENT_MOUNT_MORTAR_1F_OUTSIDE_ETHER
+ object_event 31, 18, SPRITE_POKE_BALL, SPRITEMOVEDATA_STILL, 0, 0, -1, -1, 0, OBJECTTYPE_ITEMBALL, 0, MountMortar1FOutsideGuardSpec, EVENT_MOUNT_MORTAR_1F_OUTSIDE_REVIVE
diff --git a/maps/MountMortar2FInside.asm b/maps/MountMortar2FInside.asm
new file mode 100644
index 00000000..10eb78dc
--- /dev/null
+++ b/maps/MountMortar2FInside.asm
@@ -0,0 +1,54 @@
+ const_def 2 ; object constants
+ const MOUNTMORTAR2FINSIDE_POKE_BALL1
+ const MOUNTMORTAR2FINSIDE_POKE_BALL2
+ const MOUNTMORTAR2FINSIDE_POKE_BALL3
+ const MOUNTMORTAR2FINSIDE_POKE_BALL4
+ const MOUNTMORTAR2FINSIDE_POKE_BALL5
+ const MOUNTMORTAR2FINSIDE_POKE_BALL6
+ const MOUNTMORTAR2FINSIDE_SUPER_NERD
+
+MountMortar2FInside_MapScripts:
+ db 0 ; scene scripts
+
+ db 0 ; callbacks
+
+MountMortar2FInsideMaxPotion:
+ itemball MAX_POTION
+
+MountMortar2FInsideRareCandy:
+ itemball RARE_CANDY
+
+MountMortar2FInsideTMDefenseCurl:
+ itemball TM_DEFENSE_CURL
+
+MountMortar2FInsideDragonScale:
+ itemball DRAGON_SCALE
+
+MountMortar2FInsideElixer:
+ itemball ELIXER
+
+MountMortar2FInsideEscapeRope:
+ itemball ESCAPE_ROPE
+
+MountMortar2FInsideHiddenFullRestore:
+ hiddenitem FULL_RESTORE, EVENT_MOUNT_MORTAR_2F_INSIDE_HIDDEN_FULL_RESTORE
+
+MountMortar2FInside_MapEvents:
+ db 0, 0 ; filler
+
+ db 2 ; warp events
+ warp_event 17, 33, MOUNT_MORTAR_1F_OUTSIDE, 4
+ warp_event 3, 5, MOUNT_MORTAR_1F_INSIDE, 6
+
+ db 0 ; coord events
+
+ db 1 ; bg events
+ bg_event 19, 6, BGEVENT_ITEM, MountMortar2FInsideHiddenFullRestore
+
+ db 6 ; object events
+ object_event 31, 23, SPRITE_POKE_BALL, SPRITEMOVEDATA_STILL, 0, 0, -1, -1, 0, OBJECTTYPE_ITEMBALL, 0, MountMortar2FInsideMaxPotion, EVENT_MOUNT_MORTAR_2F_INSIDE_MAX_POTION
+ object_event 2, 24, SPRITE_POKE_BALL, SPRITEMOVEDATA_STILL, 0, 0, -1, -1, 0, OBJECTTYPE_ITEMBALL, 0, MountMortar2FInsideRareCandy, EVENT_MOUNT_MORTAR_2F_INSIDE_RARE_CANDY
+ object_event 19, 17, SPRITE_POKE_BALL, SPRITEMOVEDATA_STILL, 0, 0, -1, -1, 0, OBJECTTYPE_ITEMBALL, 0, MountMortar2FInsideTMDefenseCurl, EVENT_MOUNT_MORTAR_2F_INSIDE_TM_DEFENSE_CURL
+ object_event 14, 5, SPRITE_POKE_BALL, SPRITEMOVEDATA_STILL, 0, 0, -1, -1, 0, OBJECTTYPE_ITEMBALL, 0, MountMortar2FInsideDragonScale, EVENT_MOUNT_MORTAR_2F_INSIDE_DRAGON_SCALE
+ object_event 8, 9, SPRITE_POKE_BALL, SPRITEMOVEDATA_STILL, 0, 0, -1, -1, 0, OBJECTTYPE_ITEMBALL, 0, MountMortar2FInsideElixer, EVENT_MOUNT_MORTAR_2F_INSIDE_ELIXER
+ object_event 28, 5, SPRITE_POKE_BALL, SPRITEMOVEDATA_STILL, 0, 0, -1, -1, 0, OBJECTTYPE_ITEMBALL, 0, MountMortar2FInsideEscapeRope, EVENT_MOUNT_MORTAR_2F_INSIDE_ESCAPE_ROPE
diff --git a/maps/MountMortarB1F.asm b/maps/MountMortarB1F.asm
new file mode 100644
index 00000000..580d699f
--- /dev/null
+++ b/maps/MountMortarB1F.asm
@@ -0,0 +1,142 @@
+ const_def 2 ; object constants
+ const MOUNTMORTARB1F_POKE_BALL1
+ const MOUNTMORTARB1F_POKE_BALL2
+ const MOUNTMORTARB1F_BOULDER
+ const MOUNTMORTARB1F_BLACK_BELT
+ const MOUNTMORTARB1F_POKE_BALL3
+ const MOUNTMORTARB1F_POKE_BALL4
+ const MOUNTMORTARB1F_POKE_BALL5
+
+MountMortarB1F_MapScripts:
+ db 0 ; scene scripts
+
+ db 0 ; callbacks
+
+MountMortarB1FKiyoScript:
+ faceplayer
+ opentext
+ checkevent EVENT_GOT_TYROGUE_FROM_KIYO
+ iftrue .GotTyrogue
+ checkevent EVENT_BEAT_BLACKBELT_KIYO
+ iftrue .BeatKiyo
+ writetext UnknownText_0x7e24d
+ waitbutton
+ closetext
+ winlosstext UnknownText_0x7e2a9, 0
+ loadtrainer BLACKBELT_T, KIYO
+ startbattle
+ reloadmapafterbattle
+ setevent EVENT_BEAT_BLACKBELT_KIYO
+ opentext
+.BeatKiyo:
+ writetext UnknownText_0x7e2c0
+ buttonsound
+ waitsfx
+ checkcode VAR_PARTYCOUNT
+ ifequal PARTY_LENGTH, .NoRoom
+ writetext UnknownText_0x7e355
+ playsound SFX_CAUGHT_MON
+ waitsfx
+ givepoke TYROGUE, 10
+ setevent EVENT_GOT_TYROGUE_FROM_KIYO
+.GotTyrogue:
+ writetext UnknownText_0x7e36a
+ waitbutton
+ closetext
+ end
+
+.NoRoom:
+ writetext UnknownText_0x7e3df
+ waitbutton
+ closetext
+ end
+
+MountMortarB1FBoulder:
+ jumpstd strengthboulder
+
+MountMortarB1FHyperPotion:
+ itemball HYPER_POTION
+
+MountMortarB1FFullHeal:
+ itemball FULL_HEAL
+
+MountMortarB1FHiddenMaxRevive:
+ hiddenitem MAX_REVIVE, EVENT_MOUNT_MORTAR_B1F_HIDDEN_MAX_REVIVE
+
+UnknownText_0x7e24d:
+ text "Hey!"
+
+ para "I am the KARATE"
+ line "KING!"
+
+ para "I train alone here"
+ line "in the dark!"
+
+ para "You!"
+ line "Battle with me!"
+
+ para "Hwaaarggh!"
+ done
+
+UnknownText_0x7e2a9:
+ text "Waaaarggh!"
+ line "I'm beaten!"
+ done
+
+UnknownText_0x7e2c0:
+ text "I… I'm crushed…"
+
+ para "My training is"
+ line "still not enough…"
+
+ para "But a loss is a"
+ line "loss. I admit it."
+
+ para "As proof that you"
+ line "defeated me, I'll"
+
+ para "give you a rare"
+ line "fighting #MON."
+ done
+
+UnknownText_0x7e355:
+ text "<PLAYER> received"
+ line "TYROGUE."
+ done
+
+UnknownText_0x7e36a:
+ text "TYROGUE is a"
+ line "fighting-type."
+
+ para "It evolves into a"
+ line "tougher #MON."
+
+ para "Keep up the hard"
+ line "work. I'll keep"
+ cont "training too."
+
+ para "Farewell!"
+ done
+
+UnknownText_0x7e3df:
+ text "You have no room"
+ line "in your party!"
+ done
+
+MountMortarB1F_MapEvents:
+ db 0, 0 ; filler
+
+ db 2 ; warp events
+ warp_event 3, 3, MOUNT_MORTAR_1F_INSIDE, 5
+ warp_event 19, 29, MOUNT_MORTAR_1F_OUTSIDE, 7
+
+ db 0 ; coord events
+
+ db 1 ; bg events
+ bg_event 4, 6, BGEVENT_ITEM, MountMortarB1FHiddenMaxRevive
+
+ db 4 ; object events
+ object_event 31, 17, SPRITE_POKE_BALL, SPRITEMOVEDATA_STILL, 0, 0, -1, -1, 0, OBJECTTYPE_ITEMBALL, 0, MountMortarB1FHyperPotion, EVENT_MOUNT_MORTAR_B1F_HYPER_POTION
+ object_event 4, 16, SPRITE_POKE_BALL, SPRITEMOVEDATA_STILL, 0, 0, -1, -1, 0, OBJECTTYPE_ITEMBALL, 0, MountMortarB1FFullHeal, EVENT_MOUNT_MORTAR_B1F_CARBOS
+ object_event 9, 10, SPRITE_BOULDER, SPRITEMOVEDATA_STRENGTH_BOULDER, 0, 0, -1, -1, 0, OBJECTTYPE_SCRIPT, 0, MountMortarB1FBoulder, -1
+ object_event 13, 4, SPRITE_BLACK_BELT, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, PAL_NPC_BROWN, OBJECTTYPE_SCRIPT, 0, MountMortarB1FKiyoScript, -1
diff --git a/wram.asm b/wram.asm
index 33ae29b2..5682a250 100644
--- a/wram.asm
+++ b/wram.asm
@@ -3026,7 +3026,7 @@ wd6a4:: ds 1 ; d6a4
wd6a5:: ds 1 ; d6a5
wd6a6:: ds 1 ; d6a6
wd6a7:: ds 1 ; d6a7
-wd6a8:: ds 1 ; d6a8
+wUndergroundSwitchPositions:: ds 1 ; d6a8
wd6a9:: ds 1 ; d6a9
wd6aa:: ds 1 ; d6aa
wd6ab:: ds 1 ; d6ab