summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--constants/engine_flags.asm16
-rw-r--r--constants/event_flags.asm2
-rwxr-xr-xengine/engine_flags.asm16
-rw-r--r--macros/scripts/events.asm4
-rw-r--r--main.asm19
-rw-r--r--maps/OlivineLighthouse1F.asm53
-rw-r--r--maps/OlivineLighthouse2F.asm162
-rw-r--r--maps/OlivineLighthouse3F.asm135
-rw-r--r--maps/OlivineLighthouse4F.asm103
-rw-r--r--maps/OlivineLighthouse5F.asm113
-rw-r--r--maps/OlivineLighthouse6F.asm274
-rw-r--r--maps/RuinsOfAlphAerodactylChamber.asm77
-rw-r--r--maps/RuinsOfAlphHoOhChamber.asm77
-rw-r--r--maps/RuinsOfAlphInnerChamber.asm123
-rw-r--r--maps/RuinsOfAlphKabutoChamber.asm105
-rw-r--r--maps/RuinsOfAlphOmanyteChamber.asm77
-rw-r--r--maps/RuinsOfAlphOutside.asm238
-rw-r--r--maps/RuinsOfAlphResearchCenter.asm338
-rw-r--r--maps/SlowpokeWellB1F.asm341
-rw-r--r--maps/SlowpokeWellB2F.asm74
-rw-r--r--maps/UnionCave1F.asm223
-rw-r--r--maps/UnionCaveB1F.asm174
-rw-r--r--maps/UnionCaveB2F.asm158
23 files changed, 2882 insertions, 20 deletions
diff --git a/constants/engine_flags.asm b/constants/engine_flags.asm
index d41a2528..1b8f2f3d 100644
--- a/constants/engine_flags.asm
+++ b/constants/engine_flags.asm
@@ -51,14 +51,14 @@
engine_flag_def ENGINE_VOLCANOBADGE, wKantoBadges, 6 ; volcanobadge ; $28
engine_flag_def ENGINE_EARTHBADGE, wKantoBadges, 7 ; earthbadge
- engine_flag_def ENGINE_UNLOCKED_UNOWNS_1, wUnlockedUnowns, 0
- engine_flag_def ENGINE_UNLOCKED_UNOWNS_2, wUnlockedUnowns, 1
- engine_flag_def ENGINE_UNLOCKED_UNOWNS_3, wUnlockedUnowns, 2
- engine_flag_def ENGINE_UNLOCKED_UNOWNS_4, wUnlockedUnowns, 3
- engine_flag_def ENGINE_UNLOCKED_UNOWNS_5, wUnlockedUnowns, 4
- engine_flag_def ENGINE_UNLOCKED_UNOWNS_6, wUnlockedUnowns, 5
- engine_flag_def ENGINE_UNLOCKED_UNOWNS_7, wUnlockedUnowns, 6 ; $30
- engine_flag_def ENGINE_UNLOCKED_UNOWNS_8, wUnlockedUnowns, 7
+ engine_flag_def ENGINE_UNLOCKED_UNOWNS_A_TO_K, wUnlockedUnowns, 0
+ engine_flag_def ENGINE_UNLOCKED_UNOWNS_L_TO_R, wUnlockedUnowns, 1
+ engine_flag_def ENGINE_UNLOCKED_UNOWNS_S_TO_W, wUnlockedUnowns, 2
+ engine_flag_def ENGINE_UNLOCKED_UNOWNS_X_TO_Z, wUnlockedUnowns, 3
+ engine_flag_def ENGINE_UNLOCKED_UNOWNS_UNUSED_4, wUnlockedUnowns, 4
+ engine_flag_def ENGINE_UNLOCKED_UNOWNS_UNUSED_5, wUnlockedUnowns, 5
+ engine_flag_def ENGINE_UNLOCKED_UNOWNS_UNUSED_6, wUnlockedUnowns, 6 ; $30
+ engine_flag_def ENGINE_UNLOCKED_UNOWNS_UNUSED_7, wUnlockedUnowns, 7
engine_flag_def ENGINE_FLYPOINT_KRISS_HOUSE, wVisitedSpawns, 0 ; your house
engine_flag_def ENGINE_FLYPOINT_VIRIDIAN_POKECENTER, wVisitedSpawns, 1 ; viridian pokecenter
diff --git a/constants/event_flags.asm b/constants/event_flags.asm
index f5dcdc10..a0f67d37 100644
--- a/constants/event_flags.asm
+++ b/constants/event_flags.asm
@@ -622,7 +622,7 @@
const EVENT_BEVERLY_ASKED_FOR_PHONE_NUMBER
const EVENT_BEVERLY_READY_FOR_REMATCH
const EVENT_HUEY_ASKED_FOR_PHONE_NUMBER
- const EVENT_264
+ const EVENT_HUEY_READY_FOR_REMATCH
const EVENT_GOT_PROTEIN_FROM_HUEY
const EVENT_GOT_HP_UP_FROM_JOEY
const EVENT_GOT_CARBOS_FROM_VANCE
diff --git a/engine/engine_flags.asm b/engine/engine_flags.asm
index e5ed99fd..c6ee588b 100755
--- a/engine/engine_flags.asm
+++ b/engine/engine_flags.asm
@@ -137,14 +137,14 @@ EngineFlags:
engine_flag ENGINE_VOLCANOBADGE
engine_flag ENGINE_EARTHBADGE
- engine_flag ENGINE_UNLOCKED_UNOWNS_1
- engine_flag ENGINE_UNLOCKED_UNOWNS_2
- engine_flag ENGINE_UNLOCKED_UNOWNS_3
- engine_flag ENGINE_UNLOCKED_UNOWNS_4
- engine_flag ENGINE_UNLOCKED_UNOWNS_5
- engine_flag ENGINE_UNLOCKED_UNOWNS_6
- engine_flag ENGINE_UNLOCKED_UNOWNS_7
- engine_flag ENGINE_UNLOCKED_UNOWNS_8
+ engine_flag ENGINE_UNLOCKED_UNOWNS_A_TO_K
+ engine_flag ENGINE_UNLOCKED_UNOWNS_L_TO_R
+ engine_flag ENGINE_UNLOCKED_UNOWNS_S_TO_W
+ engine_flag ENGINE_UNLOCKED_UNOWNS_X_TO_Z
+ engine_flag ENGINE_UNLOCKED_UNOWNS_UNUSED_4
+ engine_flag ENGINE_UNLOCKED_UNOWNS_UNUSED_5
+ engine_flag ENGINE_UNLOCKED_UNOWNS_UNUSED_6
+ engine_flag ENGINE_UNLOCKED_UNOWNS_UNUSED_7
engine_flag ENGINE_FLYPOINT_KRISS_HOUSE
engine_flag ENGINE_FLYPOINT_VIRIDIAN_POKECENTER
diff --git a/macros/scripts/events.asm b/macros/scripts/events.asm
index dac28d8a..10ecc385 100644
--- a/macros/scripts/events.asm
+++ b/macros/scripts/events.asm
@@ -924,13 +924,13 @@ elevator: MACRO
dw \1 ; floor_list_pointer
ENDM
- enum trade_command ; $96
+ enum trade_command ; $95
trade: MACRO
db trade_command
db \1 ; trade_id
ENDM
- enum askforphonenumber_command ; $97
+ enum askforphonenumber_command ; $96
askforphonenumber: MACRO
db askforphonenumber_command
db \1 ; number
diff --git a/main.asm b/main.asm
index 01d4c2ee..41379ccb 100644
--- a/main.asm
+++ b/main.asm
@@ -1559,7 +1559,24 @@ INCLUDE "maps/RadioTower4F.asm"
INCLUDE "maps/RadioTower5F.asm"
SECTION "bank44", ROMX, BANK[$44]
- dr $110000, $114000
+INCLUDE "maps/RuinsOfAlphOutside.asm"
+INCLUDE "maps/RuinsOfAlphHoOhChamber.asm"
+INCLUDE "maps/RuinsOfAlphKabutoChamber.asm"
+INCLUDE "maps/RuinsOfAlphOmanyteChamber.asm"
+INCLUDE "maps/RuinsOfAlphAerodactylChamber.asm"
+INCLUDE "maps/RuinsOfAlphInnerChamber.asm"
+INCLUDE "maps/RuinsOfAlphResearchCenter.asm"
+INCLUDE "maps/UnionCave1F.asm"
+INCLUDE "maps/UnionCaveB1F.asm"
+INCLUDE "maps/UnionCaveB2F.asm"
+INCLUDE "maps/SlowpokeWellB1F.asm"
+INCLUDE "maps/SlowpokeWellB2F.asm"
+INCLUDE "maps/OlivineLighthouse1F.asm"
+INCLUDE "maps/OlivineLighthouse2F.asm"
+INCLUDE "maps/OlivineLighthouse3F.asm"
+INCLUDE "maps/OlivineLighthouse4F.asm"
+INCLUDE "maps/OlivineLighthouse5F.asm"
+INCLUDE "maps/OlivineLighthouse6F.asm"
SECTION "bank45", ROMX, BANK[$45]
dr $114000, $118000
diff --git a/maps/OlivineLighthouse1F.asm b/maps/OlivineLighthouse1F.asm
new file mode 100644
index 00000000..f411731e
--- /dev/null
+++ b/maps/OlivineLighthouse1F.asm
@@ -0,0 +1,53 @@
+ const_def 2 ; object constants
+ const OLIVINELIGHTHOUSE1F_SAILOR
+ const OLIVINELIGHTHOUSE1F_POKEFAN_F
+
+OlivineLighthouse1F_MapScripts:
+ db 0 ; scene scripts
+
+ db 0 ; callbacks
+
+OlivineLighthouse1FSailorScript:
+ jumptextfaceplayer OlivineLighthouse1FSailorText
+
+OlivineLighthouse1FPokefanFScript:
+ jumptextfaceplayer OlivineLighthouse1FPokefanFText
+
+OlivineLighthouse1FSailorText:
+ text "People train at"
+ line "this LIGHTHOUSE."
+
+ para "It's not easy to"
+ line "climb because of"
+ cont "all the trainers."
+ done
+
+OlivineLighthouse1FPokefanFText:
+ text "In the past, #-"
+ line "MON used to light"
+
+ para "the sea around"
+ line "OLIVINE at night."
+
+ para "The LIGHTHOUSE was"
+ line "made in honor of"
+ cont "those #MON."
+ done
+
+OlivineLighthouse1F_MapEvents:
+ db 0, 0 ; filler
+
+ db 5 ; warp events
+ warp_event 10, 17, OLIVINE_CITY, 9
+ warp_event 11, 17, OLIVINE_CITY, 9
+ warp_event 3, 11, OLIVINE_LIGHTHOUSE_2F, 1
+ warp_event 16, 13, OLIVINE_LIGHTHOUSE_2F, 3
+ warp_event 17, 13, OLIVINE_LIGHTHOUSE_2F, 4
+
+ db 0 ; coord events
+
+ db 0 ; bg events
+
+ db 2 ; object events
+ object_event 8, 2, SPRITE_SAILOR, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, OBJECTTYPE_SCRIPT, 0, OlivineLighthouse1FSailorScript, -1
+ object_event 16, 9, SPRITE_POKEFAN_F, SPRITEMOVEDATA_WALK_UP_DOWN, 0, 2, -1, -1, 0, OBJECTTYPE_SCRIPT, 0, OlivineLighthouse1FPokefanFScript, -1
diff --git a/maps/OlivineLighthouse2F.asm b/maps/OlivineLighthouse2F.asm
new file mode 100644
index 00000000..cf98f65e
--- /dev/null
+++ b/maps/OlivineLighthouse2F.asm
@@ -0,0 +1,162 @@
+ const_def 2 ; object constants
+ const OLIVINELIGHTHOUSE2F_SAILOR
+ const OLIVINELIGHTHOUSE2F_GENTLEMAN
+
+OlivineLighthouse2F_MapScripts:
+ db 0 ; scene scripts
+
+ db 0 ; callbacks
+
+TrainerGentlemanAlfred:
+ trainer GENTLEMAN, ALFRED, EVENT_BEAT_GENTLEMAN_ALFRED, GentlemanAlfredSeenText, GentlemanAlfredBeatenText, 0, .Script
+
+.Script:
+ endifjustbattled
+ opentext
+ writetext GentlemanAlfredAfterBattleText
+ waitbutton
+ closetext
+ end
+
+TrainerSailorHuey:
+ trainer SAILOR, HUEY1, EVENT_BEAT_SAILOR_HUEY, SailorHueySeenText, SailorHueyBeatenText, 0, .Script
+
+.Script:
+ endifjustbattled
+ opentext
+ checkevent EVENT_HUEY_READY_FOR_REMATCH
+ iftrue .WantsBattle
+ checkcellnum PHONE_SAILOR_HUEY
+ iftrue .NumberAccepted
+ checkevent EVENT_HUEY_ASKED_FOR_PHONE_NUMBER
+ iftrue .AskedBefore
+ writetext SailorHueyAfterBattleText
+ buttonsound
+ setevent EVENT_HUEY_ASKED_FOR_PHONE_NUMBER
+ scall .AskNumber1
+ jump .AskForNumber
+
+.AskedBefore:
+ scall .AskNumber2
+.AskForNumber:
+ askforphonenumber PHONE_SAILOR_HUEY
+ ifequal PHONE_CONTACTS_FULL, .PhoneFull
+ ifequal PHONE_CONTACT_REFUSED, .NumberDeclined
+ trainertotext SAILOR, HUEY1, MEM_BUFFER_0
+ scall .RegisteredNumber
+ jump .NumberAccepted
+
+.WantsBattle:
+ scall .Rematch
+ winlosstext SailorHueyBeatenText, 0
+ checkevent EVENT_BEAT_ELITE_FOUR
+ iftrue .LoadFight2
+ checkevent EVENT_CLEARED_RADIO_TOWER
+ iftrue .LoadFight1
+ loadtrainer SAILOR, HUEY1
+ startbattle
+ reloadmapafterbattle
+ clearevent EVENT_HUEY_READY_FOR_REMATCH
+ end
+
+.LoadFight1:
+ loadtrainer SAILOR, HUEY2
+ startbattle
+ reloadmapafterbattle
+ clearevent EVENT_HUEY_READY_FOR_REMATCH
+ end
+
+.LoadFight2:
+ loadtrainer SAILOR, HUEY3
+ startbattle
+ reloadmapafterbattle
+ clearevent EVENT_HUEY_READY_FOR_REMATCH
+ end
+
+.AskNumber1:
+ jumpstd asknumber1m
+ end
+
+.AskNumber2:
+ jumpstd asknumber2m
+ end
+
+.RegisteredNumber:
+ jumpstd registerednumberm
+ end
+
+.NumberAccepted:
+ jumpstd numberacceptedm
+ end
+
+.NumberDeclined:
+ jumpstd numberdeclinedm
+ end
+
+.PhoneFull:
+ jumpstd phonefullm
+ end
+
+.Rematch:
+ jumpstd rematchm
+ end
+
+SailorHueySeenText:
+ text "Men of the sea are"
+ line "always spoiling"
+ cont "for a good fight!"
+ done
+
+SailorHueyBeatenText:
+ text "Urf!"
+ line "I lose!"
+ done
+
+SailorHueyAfterBattleText:
+ text "What power!"
+ line "How would you like"
+
+ para "to sail the seas"
+ line "with me?"
+ done
+
+GentlemanAlfredSeenText:
+ text "Hm? This is no"
+ line "place for playing."
+ done
+
+GentlemanAlfredBeatenText:
+ text "Ah! I can see that"
+ line "you're serious."
+ done
+
+GentlemanAlfredAfterBattleText:
+ text "Up top is a #-"
+ line "MON that keeps the"
+ cont "LIGHTHOUSE lit."
+
+ para "But I hear that"
+ line "it's sick now and"
+
+ para "can't be cured by"
+ line "ordinary medicine."
+ done
+
+OlivineLighthouse2F_MapEvents:
+ db 0, 0 ; filler
+
+ db 6 ; warp events
+ warp_event 3, 11, OLIVINE_LIGHTHOUSE_1F, 3
+ warp_event 5, 3, OLIVINE_LIGHTHOUSE_3F, 2
+ warp_event 16, 13, OLIVINE_LIGHTHOUSE_1F, 4
+ warp_event 17, 13, OLIVINE_LIGHTHOUSE_1F, 5
+ warp_event 16, 11, OLIVINE_LIGHTHOUSE_3F, 4
+ warp_event 17, 11, OLIVINE_LIGHTHOUSE_3F, 5
+
+ db 0 ; coord events
+
+ db 0 ; bg events
+
+ db 2 ; object events
+ object_event 9, 3, SPRITE_SAILOR, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, PAL_NPC_BLUE, OBJECTTYPE_TRAINER, 3, TrainerSailorHuey, -1
+ object_event 17, 8, SPRITE_GENTLEMAN, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, PAL_NPC_BLUE, OBJECTTYPE_TRAINER, 3, TrainerGentlemanAlfred, -1
diff --git a/maps/OlivineLighthouse3F.asm b/maps/OlivineLighthouse3F.asm
new file mode 100644
index 00000000..53b2c591
--- /dev/null
+++ b/maps/OlivineLighthouse3F.asm
@@ -0,0 +1,135 @@
+ const_def 2 ; object constants
+ const OLIVINELIGHTHOUSE3F_SAILOR
+ const OLIVINELIGHTHOUSE3F_GENTLEMAN
+ const OLIVINELIGHTHOUSE3F_YOUNGSTER
+ const OLIVINELIGHTHOUSE3F_POKE_BALL
+
+OlivineLighthouse3F_MapScripts:
+ db 0 ; scene scripts
+
+ db 0 ; callbacks
+
+TrainerBirdKeeperTheo:
+ trainer BIRD_KEEPER, THEO, EVENT_BEAT_BIRD_KEEPER_THEO, BirdKeeperTheoSeenText, BirdKeeperTheoBeatenText, 0, .Script
+
+.Script:
+ endifjustbattled
+ opentext
+ writetext BirdKeeperTheoAfterBattleText
+ waitbutton
+ closetext
+ end
+
+TrainerGentlemanPreston:
+ trainer GENTLEMAN, PRESTON, EVENT_BEAT_GENTLEMAN_PRESTON, GentlemanPrestonSeenText, GentlemanPrestonBeatenText, 0, .Script
+
+.Script:
+ endifjustbattled
+ opentext
+ writetext GentlemanPrestonAfterBattleText
+ waitbutton
+ closetext
+ end
+
+TrainerSailorTerrell:
+ trainer SAILOR, TERRELL, EVENT_BEAT_SAILOR_TERRELL, SailorTerrellSeenText, SailorTerrellBeatenText, 0, .Script
+
+.Script:
+ endifjustbattled
+ opentext
+ writetext SailorTerrellAfterBattleText
+ waitbutton
+ closetext
+ end
+
+OlivineLighthouse3FEther:
+ itemball ETHER
+
+BirdKeeperTheoSeenText:
+ text "Why are you here?"
+ line "Are you just going"
+
+ para "to gawk? I suggest"
+ line "that you leave!"
+ done
+
+BirdKeeperTheoBeatenText:
+ text "You really are"
+ line "concerned…"
+ done
+
+BirdKeeperTheoAfterBattleText:
+ text "How the heck do"
+ line "you go up?"
+
+ para "I want to visit"
+ line "the sick #MON,"
+
+ para "but I can't get up"
+ line "there…"
+ done
+
+SailorTerrellSeenText:
+ text "Sailors are both"
+ line "kind and strong."
+ cont "How about you?"
+ done
+
+SailorTerrellBeatenText:
+ text "You are both kind"
+ line "and strong…"
+ done
+
+SailorTerrellAfterBattleText:
+ text "Every time I come"
+ line "back to OLIVINE, I"
+ cont "visit the GYM."
+
+ para "The GYM LEADER's"
+ line "#MON type has"
+
+ para "changed without me"
+ line "noticing."
+ done
+
+GentlemanPrestonSeenText:
+ text "I travel the world"
+ line "to train my #-"
+ cont "MON. I wish to"
+ cont "battle with you."
+ done
+
+GentlemanPrestonBeatenText:
+ text "…sigh… I must"
+ line "train some more…"
+ done
+
+GentlemanPrestonAfterBattleText:
+ text "JASMINE used to"
+ line "use rock #MON"
+ cont "like ONIX."
+ done
+
+OlivineLighthouse3F_MapEvents:
+ db 0, 0 ; filler
+
+ db 9 ; warp events
+ warp_event 13, 3, OLIVINE_LIGHTHOUSE_4F, 1
+ warp_event 5, 3, OLIVINE_LIGHTHOUSE_2F, 2
+ warp_event 9, 5, OLIVINE_LIGHTHOUSE_4F, 4
+ warp_event 16, 11, OLIVINE_LIGHTHOUSE_2F, 5
+ warp_event 17, 11, OLIVINE_LIGHTHOUSE_2F, 6
+ warp_event 16, 9, OLIVINE_LIGHTHOUSE_4F, 5
+ warp_event 17, 9, OLIVINE_LIGHTHOUSE_4F, 6
+ warp_event 8, 3, OLIVINE_LIGHTHOUSE_4F, 7
+ warp_event 9, 3, OLIVINE_LIGHTHOUSE_4F, 8
+
+ db 0 ; coord events
+
+ db 0 ; bg events
+
+ db 4 ; object events
+ object_event 9, 2, SPRITE_SAILOR, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, PAL_NPC_BLUE, OBJECTTYPE_TRAINER, 1, TrainerSailorTerrell, -1
+ object_event 13, 5, SPRITE_GENTLEMAN, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, PAL_NPC_BLUE, OBJECTTYPE_TRAINER, 4, TrainerGentlemanPreston, -1
+ object_event 3, 9, SPRITE_YOUNGSTER, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, PAL_NPC_BLUE, OBJECTTYPE_TRAINER, 3, TrainerBirdKeeperTheo, -1
+ object_event 8, 2, SPRITE_POKE_BALL, SPRITEMOVEDATA_STILL, 0, 0, -1, -1, 0, OBJECTTYPE_ITEMBALL, 0, OlivineLighthouse3FEther, EVENT_OLIVINE_LIGHTHOUSE_3F_ETHER
diff --git a/maps/OlivineLighthouse4F.asm b/maps/OlivineLighthouse4F.asm
new file mode 100644
index 00000000..50a4d17f
--- /dev/null
+++ b/maps/OlivineLighthouse4F.asm
@@ -0,0 +1,103 @@
+ const_def 2 ; object constants
+ const OLIVINELIGHTHOUSE4F_SAILOR
+ const OLIVINELIGHTHOUSE4F_LASS
+
+OlivineLighthouse4F_MapScripts:
+ db 0 ; scene scripts
+
+ db 0 ; callbacks
+
+TrainerLassConnie:
+ trainer LASS, CONNIE1, EVENT_BEAT_LASS_CONNIE, LassConnie1SeenText, LassConnie1BeatenText, 0, .Script
+
+.Script:
+ endifjustbattled
+ opentext
+ writetext LassConnie1AfterBattleText
+ waitbutton
+ closetext
+ end
+
+TrainerSailorKent:
+ trainer SAILOR, KENT, EVENT_BEAT_SAILOR_KENT, SailorKentSeenText, SailorKentBeatenText, 0, .Script
+
+.Script:
+ endifjustbattled
+ opentext
+ writetext SailorKentAfterBattleText
+ waitbutton
+ closetext
+ end
+
+SailorKentSeenText:
+ text "JASMINE must be"
+ line "worried sick about"
+ cont "the #MON here."
+
+ para "She won't even"
+ line "smile these days."
+ done
+
+SailorKentBeatenText:
+ text "I can't manage a"
+ line "smile either…"
+ done
+
+SailorKentAfterBattleText:
+ text "Speaking of sick,"
+ line "I've heard there's"
+
+ para "a good PHARMACY in"
+ line "CIANWOOD."
+ done
+
+LassConnie1SeenText:
+ text "JASMINE is this"
+ line "city's GYM LEADER."
+
+ para "I mean to bring"
+ line "her back with me."
+
+ para "Nobody had better"
+ line "get in my way!"
+ done
+
+LassConnie1BeatenText:
+ text "Aaack! My #MON!"
+ done
+
+LassConnie1AfterBattleText:
+ text "Right. Anybody"
+ line "would be worried"
+ cont "if his or her own"
+ cont "#MON were hurt."
+
+ para "I'll pray for the"
+ line "#MON here, so"
+
+ para "JASMINE can come"
+ line "back to the GYM."
+ done
+
+OlivineLighthouse4F_MapEvents:
+ db 0, 0 ; filler
+
+ db 10 ; warp events
+ warp_event 13, 3, OLIVINE_LIGHTHOUSE_3F, 1
+ warp_event 3, 5, OLIVINE_LIGHTHOUSE_5F, 2
+ warp_event 9, 7, OLIVINE_LIGHTHOUSE_5F, 3
+ warp_event 9, 5, OLIVINE_LIGHTHOUSE_3F, 3
+ warp_event 16, 9, OLIVINE_LIGHTHOUSE_3F, 6
+ warp_event 17, 9, OLIVINE_LIGHTHOUSE_3F, 7
+ warp_event 8, 3, OLIVINE_LIGHTHOUSE_3F, 8
+ warp_event 9, 3, OLIVINE_LIGHTHOUSE_3F, 9
+ warp_event 16, 7, OLIVINE_LIGHTHOUSE_5F, 4
+ warp_event 17, 7, OLIVINE_LIGHTHOUSE_5F, 5
+
+ db 0 ; coord events
+
+ db 0 ; bg events
+
+ db 2 ; object events
+ object_event 7, 14, SPRITE_SAILOR, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, PAL_NPC_BLUE, OBJECTTYPE_TRAINER, 3, TrainerSailorKent, -1
+ object_event 11, 2, SPRITE_LASS, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, PAL_NPC_BLUE, OBJECTTYPE_TRAINER, 1, TrainerLassConnie, -1
diff --git a/maps/OlivineLighthouse5F.asm b/maps/OlivineLighthouse5F.asm
new file mode 100644
index 00000000..0fd8e4e2
--- /dev/null
+++ b/maps/OlivineLighthouse5F.asm
@@ -0,0 +1,113 @@
+ const_def 2 ; object constants
+ const OLIVINELIGHTHOUSE5F_SAILOR
+ const OLIVINELIGHTHOUSE5F_YOUNGSTER
+ const OLIVINELIGHTHOUSE5F_POKE_BALL1
+ const OLIVINELIGHTHOUSE5F_POKE_BALL2
+ const OLIVINELIGHTHOUSE5F_POKE_BALL3
+
+OlivineLighthouse5F_MapScripts:
+ db 0 ; scene scripts
+
+ db 0 ; callbacks
+
+TrainerBirdKeeperDenis:
+ trainer BIRD_KEEPER, DENIS, EVENT_BEAT_BIRD_KEEPER_DENIS, BirdKeeperDenisSeenText, BirdKeeperDenisBeatenText, 0, .Script
+
+.Script:
+ endifjustbattled
+ opentext
+ writetext BirdKeeperDenisAfterBattleText
+ waitbutton
+ closetext
+ end
+
+TrainerSailorErnest:
+ trainer SAILOR, ERNEST, EVENT_BEAT_SAILOR_ERNEST, SailorErnestSeenText, SailorErnestBeatenText, 0, .Script
+
+.Script:
+ endifjustbattled
+ opentext
+ writetext SailorErnestAfterBattleText
+ waitbutton
+ closetext
+ end
+
+OlivineLighthouse5FRareCandy:
+ itemball RARE_CANDY
+
+OlivineLighthouse5FSuperRepel:
+ itemball GREAT_BALL
+
+OlivineLighthouse5FTMSwagger:
+ itemball TM_SWAGGER
+
+OlivineLighthouse5FHiddenHyperPotion:
+ hiddenitem HYPER_POTION, EVENT_OLIVINE_LIGHTHOUSE_5F_HIDDEN_HYPER_POTION
+
+SailorErnestSeenText:
+ text "I wanted to battle"
+ line "JASMINE, but she's"
+
+ para "not up to it now."
+ line "So, how about you?"
+ done
+
+SailorErnestBeatenText:
+ text "Whoa, whoa. You're"
+ line "overwhelming!"
+ done
+
+SailorErnestAfterBattleText:
+ text "A GYM LEADER isn't"
+ line "just about being"
+
+ para "strong. A LEADER"
+ line "also needs to be"
+ cont "compassionate."
+ done
+
+BirdKeeperDenisSeenText:
+ text "We're pretty high"
+ line "up here. My bird"
+
+ para "#MON are in"
+ line "prime form."
+ done
+
+BirdKeeperDenisBeatenText:
+ text "Oops…They crashed…"
+ done
+
+BirdKeeperDenisAfterBattleText:
+ text "My #MON learned"
+ line "how to use FLY in"
+ cont "CIANWOOD."
+
+ para "Well, since I'm a"
+ line "loser, I'll FLY"
+ cont "across the sea…"
+ done
+
+OlivineLighthouse5F_MapEvents:
+ db 0, 0 ; filler
+
+ db 7 ; warp events
+ warp_event 9, 15, OLIVINE_LIGHTHOUSE_6F, 1
+ warp_event 3, 5, OLIVINE_LIGHTHOUSE_4F, 2
+ warp_event 9, 7, OLIVINE_LIGHTHOUSE_4F, 3
+ warp_event 16, 7, OLIVINE_LIGHTHOUSE_4F, 9
+ warp_event 17, 7, OLIVINE_LIGHTHOUSE_4F, 10
+ warp_event 16, 5, OLIVINE_LIGHTHOUSE_6F, 2
+ warp_event 17, 5, OLIVINE_LIGHTHOUSE_6F, 3
+
+ db 0 ; coord events
+
+ db 1 ; bg events
+ bg_event 3, 13, BGEVENT_ITEM, OlivineLighthouse5FHiddenHyperPotion
+
+ db 5 ; object events
+ object_event 8, 11, SPRITE_SAILOR, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, PAL_NPC_BLUE, OBJECTTYPE_TRAINER, 3, TrainerSailorErnest, -1
+ object_event 8, 3, SPRITE_YOUNGSTER, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, PAL_NPC_BLUE, OBJECTTYPE_TRAINER, 4, TrainerBirdKeeperDenis, -1
+ object_event 15, 12, SPRITE_POKE_BALL, SPRITEMOVEDATA_STILL, 0, 0, -1, -1, 0, OBJECTTYPE_ITEMBALL, 0, OlivineLighthouse5FRareCandy, EVENT_OLIVINE_LIGHTHOUSE_5F_RARE_CANDY
+ object_event 6, 15, SPRITE_POKE_BALL, SPRITEMOVEDATA_STILL, 0, 0, -1, -1, 0, OBJECTTYPE_ITEMBALL, 0, OlivineLighthouse5FSuperRepel, EVENT_OLIVINE_LIGHTHOUSE_5F_SUPER_REPEL
+ object_event 2, 13, SPRITE_POKE_BALL, SPRITEMOVEDATA_STILL, 0, 0, -1, -1, 0, OBJECTTYPE_ITEMBALL, 0, OlivineLighthouse5FTMSwagger, EVENT_OLIVINE_LIGHTHOUSE_5F_TM_SWAGGER
diff --git a/maps/OlivineLighthouse6F.asm b/maps/OlivineLighthouse6F.asm
new file mode 100644
index 00000000..f0121b8e
--- /dev/null
+++ b/maps/OlivineLighthouse6F.asm
@@ -0,0 +1,274 @@
+ const_def 2 ; object constants
+ const OLIVINELIGHTHOUSE6F_JASMINE
+ const OLIVINELIGHTHOUSE6F_MONSTER
+ const OLIVINELIGHTHOUSE6F_POKE_BALL
+
+OlivineLighthouse6F_MapScripts:
+ db 0 ; scene scripts
+
+ db 0 ; callbacks
+
+OlivineLighthouseJasmine:
+ faceplayer
+ opentext
+ checkitem SECRETPOTION
+ iftrue .BroughtSecretpotion
+ checkevent EVENT_JASMINE_EXPLAINED_AMPHYS_SICKNESS
+ iftrue .ExplainedSickness
+ writetext JasmineCianwoodPharmacyText
+ buttonsound
+ setevent EVENT_JASMINE_EXPLAINED_AMPHYS_SICKNESS
+.ExplainedSickness:
+ writetext JasmineGetSomeMedicineText
+ waitbutton
+ closetext
+ end
+
+.BroughtSecretpotion:
+ writetext JasmineCureAmphyText
+ yesorno
+ iffalse .no
+ writetext PlayerHandedSecretpotionText
+ buttonsound
+ takeitem SECRETPOTION
+ writetext JasmineDontBeOffendedText
+ waitbutton
+ closetext
+ turnobject OLIVINELIGHTHOUSE6F_JASMINE, RIGHT
+ pause 15
+ turnobject OLIVINELIGHTHOUSE6F_MONSTER, LEFT
+ opentext
+ playmusic MUSIC_HEAL
+ writetext JasmineAmphyHowAreYouFeelingText
+ pause 60
+ buttonsound
+ closetext
+ special RestartMapMusic
+ cry AMPHAROS
+ special FadeOutPalettes
+ pause 10
+ special FadeInPalettes
+ opentext
+ writetext AmphyPaluPaluluText
+ waitbutton
+ closetext
+ turnobject OLIVINELIGHTHOUSE6F_MONSTER, RIGHT
+ pause 10
+ turnobject OLIVINELIGHTHOUSE6F_MONSTER, LEFT
+ pause 10
+ turnobject OLIVINELIGHTHOUSE6F_MONSTER, RIGHT
+ pause 10
+ turnobject OLIVINELIGHTHOUSE6F_MONSTER, LEFT
+ pause 10
+ faceplayer
+ opentext
+ writetext JasmineThankYouText
+ waitbutton
+ closetext
+ setevent EVENT_JASMINE_RETURNED_TO_GYM
+ clearevent EVENT_OLIVINE_GYM_JASMINE
+ checkcode VAR_FACING
+ ifequal DOWN, .FacingDown
+ ifequal RIGHT, .FacingRight
+ applymovement OLIVINELIGHTHOUSE6F_JASMINE, MovementData_0x60c68
+ disappear OLIVINELIGHTHOUSE6F_JASMINE
+ end
+
+.FacingDown:
+ applymovement OLIVINELIGHTHOUSE6F_JASMINE, MovementData_0x60c70
+ disappear OLIVINELIGHTHOUSE6F_JASMINE
+ end
+
+.FacingRight:
+ applymovement OLIVINELIGHTHOUSE6F_JASMINE, MovementData_0x60c79
+ disappear OLIVINELIGHTHOUSE6F_JASMINE
+ end
+
+.no:
+ writetext JasmineISeeText
+ waitbutton
+ closetext
+ turnobject OLIVINELIGHTHOUSE6F_JASMINE, RIGHT
+ pause 15
+ turnobject OLIVINELIGHTHOUSE6F_MONSTER, LEFT
+ opentext
+ writetext JasmineAmphyHangOnText
+ waitbutton
+ closetext
+ end
+
+OlivineLighthouseUnusedDummyScript:
+; unused
+ end
+
+OlivineLighthouseAmphy:
+ faceplayer
+ opentext
+ checkevent EVENT_JASMINE_RETURNED_TO_GYM
+ iftrue .HealthyNow
+ writetext AmphyPalPalooText
+ writebyte AMPHAROS
+ special PlaySlowCry
+ buttonsound
+ writetext AmphyBreathingLaboredText
+ waitbutton
+ closetext
+ end
+
+.HealthyNow:
+ writetext AmphyPaluPaluluText
+ cry AMPHAROS
+ waitbutton
+ closetext
+ special FadeOutPalettes
+ special FadeInPalettes
+ special FadeOutPalettes
+ special FadeInPalettes
+ end
+
+OlivineLighthouse6FSuperPotion:
+ itemball SUPER_POTION
+
+MovementData_0x60c68:
+ slow_step UP
+ slow_step UP
+ slow_step RIGHT
+ slow_step UP
+ slow_step UP
+ step_sleep 8
+ step_sleep 8
+ step_end
+
+MovementData_0x60c70:
+ slow_step DOWN
+ slow_step RIGHT
+ slow_step RIGHT
+ slow_step RIGHT
+ slow_step UP
+ slow_step RIGHT
+ slow_step RIGHT
+ slow_step RIGHT
+ step_end
+
+MovementData_0x60c79:
+ slow_step UP
+ slow_step UP
+ slow_step RIGHT
+ slow_step UP
+ slow_step UP
+ slow_step UP
+ step_sleep 8
+ step_end
+
+JasmineCianwoodPharmacyText:
+ text "JASMINE: … This"
+ line "#MON always"
+
+ para "kept the sea lit"
+ line "at night."
+
+ para "…But it suddenly"
+ line "got sick… It's"
+ cont "gasping for air…"
+
+ para "…I understand"
+ line "that there is a"
+
+ para "wonderful PHARMACY"
+ line "in CIANWOOD…"
+
+ para "But that's across"
+ line "the sea…"
+
+ para "And I can't leave"
+ line "AMPHY unattended…"
+ done
+
+JasmineGetSomeMedicineText:
+ text "…May I ask you to"
+ line "get some medicine"
+ cont "for me? Please?"
+ done
+
+JasmineCureAmphyText:
+ text "JASMINE: …Will"
+ line "that medicine cure"
+ cont "AMPHY?"
+ done
+
+PlayerHandedSecretpotionText:
+ text "<PLAYER> handed the"
+ line "SECRETPOTION to"
+ cont "JASMINE."
+ done
+
+JasmineDontBeOffendedText:
+ text "JASMINE: …Um,"
+ line "please don't be"
+ cont "offended…"
+
+ para "…AMPHY will not"
+ line "take anything from"
+ cont "anyone but me…"
+ done
+
+JasmineAmphyHowAreYouFeelingText:
+ text "JASMINE: …"
+
+ para "AMPHY, how are you"
+ line "feeling?"
+ done
+
+JasmineThankYouText:
+ text "JASMINE: …Oh, I'm"
+ line "so relieved…"
+
+ para "This is just so"
+ line "wonderful…"
+
+ para "Thank you so very,"
+ line "very much."
+
+ para "…I will return to"
+ line "the GYM…"
+ done
+
+JasmineISeeText:
+ text "JASMINE: …I see…"
+ done
+
+JasmineAmphyHangOnText:
+ text "…AMPHY, hang on!"
+ done
+
+AmphyPalPalooText:
+ text "AMPHY: …"
+ line "…Pa… paloo…"
+ done
+
+AmphyBreathingLaboredText:
+ text "Its breathing is"
+ line "terribly labored…"
+ done
+
+AmphyPaluPaluluText:
+ text "AMPHY: Palu!"
+ line "Palulu!"
+ done
+
+OlivineLighthouse6F_MapEvents:
+ db 0, 0 ; filler
+
+ db 3 ; warp events
+ warp_event 9, 15, OLIVINE_LIGHTHOUSE_5F, 1
+ warp_event 16, 5, OLIVINE_LIGHTHOUSE_5F, 6
+ warp_event 17, 5, OLIVINE_LIGHTHOUSE_5F, 7
+
+ db 0 ; coord events
+
+ db 0 ; bg events
+
+ db 3 ; object events
+ object_event 8, 8, SPRITE_JASMINE, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, PAL_NPC_RED, OBJECTTYPE_SCRIPT, 0, OlivineLighthouseJasmine, EVENT_OLIVINE_LIGHTHOUSE_JASMINE
+ object_event 9, 8, SPRITE_MONSTER, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, PAL_NPC_BROWN, OBJECTTYPE_SCRIPT, 0, OlivineLighthouseAmphy, -1
+ object_event 3, 4, SPRITE_POKE_BALL, SPRITEMOVEDATA_STILL, 0, 0, -1, -1, 0, OBJECTTYPE_ITEMBALL, 0, OlivineLighthouse6FSuperPotion, EVENT_OLIVINE_LIGHTHOUSE_6F_SUPER_POTION
diff --git a/maps/RuinsOfAlphAerodactylChamber.asm b/maps/RuinsOfAlphAerodactylChamber.asm
new file mode 100644
index 00000000..a257fada
--- /dev/null
+++ b/maps/RuinsOfAlphAerodactylChamber.asm
@@ -0,0 +1,77 @@
+RuinsOfAlphAerodactylChamber_MapScripts:
+ db 0 ; scene scripts
+
+ db 1 ; callbacks
+ callback MAPCALLBACK_TILES, .HiddenDoors
+
+.HiddenDoors:
+ checkevent EVENT_SOLVED_AERODACTYL_PUZZLE
+ iffalse .FloorClosed
+ return
+
+.FloorClosed:
+ changeblock 2, 2, $01 ; left floor
+ changeblock 4, 2, $02 ; right floor
+ return
+
+RuinsOfAlphAerodactylChamberPuzzle:
+ refreshscreen
+ writebyte UNOWNPUZZLE_AERODACTYL
+ special UnownPuzzle
+ closetext
+ iftrue .PuzzleComplete
+ end
+
+.PuzzleComplete:
+ setevent EVENT_RUINS_OF_ALPH_INNER_CHAMBER_TOURISTS
+ setevent EVENT_SOLVED_AERODACTYL_PUZZLE
+ setflag ENGINE_UNLOCKED_UNOWNS_S_TO_W
+ setmapscene RUINS_OF_ALPH_INNER_CHAMBER, SCENE_RUINSOFALPHINNERCHAMBER_STRANGE_PRESENCE
+ earthquake 30
+ showemote EMOTE_SHOCK, PLAYER, 15
+ changeblock 2, 2, $18 ; left hole
+ changeblock 4, 2, $19 ; right hole
+ reloadmappart
+ playsound SFX_STRENGTH
+ earthquake 80
+ warpcheck
+ end
+
+RuinsOfAlphAerodactylChamberAncientReplica:
+ jumptext RuinsOfAlphAerodactylChamberAncientReplicaText
+
+RuinsOfAlphAerodactylChamberDescriptionSign:
+ jumptext RuinsOfAlphAerodactylChamberDescriptionText
+
+RuinsOfAlphAerodactylChamberAncientReplicaText:
+ text "It's a replica of"
+ line "an ancient #-"
+ cont "MON."
+ done
+
+RuinsOfAlphAerodactylChamberDescriptionText:
+ text "This flying #-"
+ line "MON attacked its"
+
+ para "prey with saw-like"
+ line "fangs."
+ done
+
+RuinsOfAlphAerodactylChamber_MapEvents:
+ db 0, 0 ; filler
+
+ db 4 ; warp events
+ warp_event 3, 9, RUINS_OF_ALPH_OUTSIDE, 4
+ warp_event 4, 9, RUINS_OF_ALPH_OUTSIDE, 4
+ warp_event 3, 3, RUINS_OF_ALPH_INNER_CHAMBER, 8
+ warp_event 4, 3, RUINS_OF_ALPH_INNER_CHAMBER, 9
+
+ db 0 ; coord events
+
+ db 4 ; bg events
+ bg_event 2, 3, BGEVENT_READ, RuinsOfAlphAerodactylChamberAncientReplica
+ bg_event 5, 3, BGEVENT_READ, RuinsOfAlphAerodactylChamberAncientReplica
+ bg_event 3, 2, BGEVENT_UP, RuinsOfAlphAerodactylChamberPuzzle
+ bg_event 4, 2, BGEVENT_UP, RuinsOfAlphAerodactylChamberDescriptionSign
+
+ db 0 ; object events
diff --git a/maps/RuinsOfAlphHoOhChamber.asm b/maps/RuinsOfAlphHoOhChamber.asm
new file mode 100644
index 00000000..e133e2f6
--- /dev/null
+++ b/maps/RuinsOfAlphHoOhChamber.asm
@@ -0,0 +1,77 @@
+RuinsOfAlphHoOhChamber_MapScripts:
+ db 0 ; scene scripts
+
+ db 1 ; callbacks
+ callback MAPCALLBACK_TILES, .HiddenDoors
+
+.HiddenDoors:
+ checkevent EVENT_SOLVED_HO_OH_PUZZLE
+ iffalse .FloorClosed
+ return
+
+.FloorClosed:
+ changeblock 2, 2, $01 ; left floor
+ changeblock 4, 2, $02 ; right floor
+ return
+
+RuinsOfAlphHoOhChamberPuzzle:
+ refreshscreen
+ writebyte UNOWNPUZZLE_HO_OH
+ special UnownPuzzle
+ closetext
+ iftrue .PuzzleComplete
+ end
+
+.PuzzleComplete:
+ setevent EVENT_RUINS_OF_ALPH_INNER_CHAMBER_TOURISTS
+ setevent EVENT_SOLVED_HO_OH_PUZZLE
+ setflag ENGINE_UNLOCKED_UNOWNS_X_TO_Z
+ setmapscene RUINS_OF_ALPH_INNER_CHAMBER, SCENE_RUINSOFALPHINNERCHAMBER_STRANGE_PRESENCE
+ earthquake 30
+ showemote EMOTE_SHOCK, PLAYER, 15
+ changeblock 2, 2, $18 ; left hole
+ changeblock 4, 2, $19 ; right hole
+ reloadmappart
+ playsound SFX_STRENGTH
+ earthquake 80
+ warpcheck
+ end
+
+RuinsOfAlphHoOhChamberAncientReplica:
+ jumptext RuinsOfAlphHoOhChamberAncientReplicaText
+
+RuinsOfAlphHoOhChamberDescriptionSign:
+ jumptext RuinsOfAlphHoOhChamberDescriptionText
+
+RuinsOfAlphHoOhChamberAncientReplicaText:
+ text "It's a replica of"
+ line "an ancient #-"
+ cont "MON."
+ done
+
+RuinsOfAlphHoOhChamberDescriptionText:
+ text "A #MON that"
+ line "flew gracefully on"
+
+ para "rainbow-colored"
+ line "wings."
+ done
+
+RuinsOfAlphHoOhChamber_MapEvents:
+ db 0, 0 ; filler
+
+ db 4 ; warp events
+ warp_event 3, 9, RUINS_OF_ALPH_OUTSIDE, 1
+ warp_event 4, 9, RUINS_OF_ALPH_OUTSIDE, 1
+ warp_event 3, 3, RUINS_OF_ALPH_INNER_CHAMBER, 2
+ warp_event 4, 3, RUINS_OF_ALPH_INNER_CHAMBER, 3
+
+ db 0 ; coord events
+
+ db 4 ; bg events
+ bg_event 2, 3, BGEVENT_READ, RuinsOfAlphHoOhChamberAncientReplica
+ bg_event 5, 3, BGEVENT_READ, RuinsOfAlphHoOhChamberAncientReplica
+ bg_event 3, 2, BGEVENT_UP, RuinsOfAlphHoOhChamberPuzzle
+ bg_event 4, 2, BGEVENT_UP, RuinsOfAlphHoOhChamberDescriptionSign
+
+ db 0 ; object events
diff --git a/maps/RuinsOfAlphInnerChamber.asm b/maps/RuinsOfAlphInnerChamber.asm
new file mode 100644
index 00000000..fd7f7074
--- /dev/null
+++ b/maps/RuinsOfAlphInnerChamber.asm
@@ -0,0 +1,123 @@
+ const_def 2 ; object constants
+ const RUINSOFALPHINNERCHAMBER_FISHER
+ const RUINSOFALPHINNERCHAMBER_TEACHER
+ const RUINSOFALPHINNERCHAMBER_GRAMPS
+
+RuinsOfAlphInnerChamber_MapScripts:
+ db 2 ; scene scripts
+ scene_script .DummyScene0 ; SCENE_RUINSOFALPHINNERCHAMBER_NOTHING
+ scene_script .UnownAppear ; SCENE_RUINSOFALPHINNERCHAMBER_STRANGE_PRESENCE
+
+ db 0 ; callbacks
+
+.DummyScene0:
+ end
+
+.UnownAppear:
+ priorityjump .StrangePresenceScript
+ end
+
+.StrangePresenceScript:
+ opentext
+ writetext RuinsOfAlphStrangePresenceText
+ waitbutton
+ closetext
+ setscene SCENE_RUINSOFALPHINNERCHAMBER_NOTHING
+ setevent EVENT_MADE_UNOWN_APPEAR_IN_RUINS
+ end
+
+RuinsOfAlphInnerChamberFisherScript:
+ jumptextfaceplayer RuinsOfAlphInnerChamberFisherText
+
+RuinsOfAlphInnerChamberTeacherScript:
+ jumptextfaceplayer RuinsOfAlphInnerChamberTeacherText
+
+RuinsOfAlphInnerChamberGrampsScript:
+ jumptextfaceplayer RuinsOfAlphInnerChamberGrampsText
+
+RuinsOfAlphInnerChamberStatue:
+ jumptext RuinsOfAlphInnerChamberStatueText
+
+RuinsOfAlphStrangePresenceText:
+ text "There is a strange"
+ line "presence here…"
+ done
+
+RuinsOfAlphInnerChamberFisherText:
+ text "This is a big"
+ line "room, but there's"
+ cont "nothing here."
+ done
+
+RuinsOfAlphInnerChamberTeacherText:
+ text "This place has a"
+ line "mystical quality"
+ cont "to it."
+
+ para "It feels sort of"
+ line "ethereal even."
+ done
+
+RuinsOfAlphInnerChamberGrampsText:
+ text "Ancient buildings"
+ line "are often tombs of"
+ cont "kings."
+
+ para "Like the pyramids,"
+ line "for instance."
+ done
+
+RuinsOfAlphInnerChamberStatueText:
+ text "It's a replica of"
+ line "an ancient #-"
+ cont "MON."
+ done
+
+RuinsOfAlphInnerChamber_MapEvents:
+ db 0, 0 ; filler
+
+ db 9 ; warp events
+ warp_event 10, 13, RUINS_OF_ALPH_OUTSIDE, 5
+ warp_event 3, 15, RUINS_OF_ALPH_HO_OH_CHAMBER, 3
+ warp_event 4, 15, RUINS_OF_ALPH_HO_OH_CHAMBER, 4
+ warp_event 15, 3, RUINS_OF_ALPH_KABUTO_CHAMBER, 3
+ warp_event 16, 3, RUINS_OF_ALPH_KABUTO_CHAMBER, 4
+ warp_event 3, 21, RUINS_OF_ALPH_OMANYTE_CHAMBER, 3
+ warp_event 4, 21, RUINS_OF_ALPH_OMANYTE_CHAMBER, 4
+ warp_event 15, 24, RUINS_OF_ALPH_AERODACTYL_CHAMBER, 3
+ warp_event 16, 24, RUINS_OF_ALPH_AERODACTYL_CHAMBER, 4
+
+ db 0 ; coord events
+
+ db 26 ; bg events
+ bg_event 2, 3, BGEVENT_READ, RuinsOfAlphInnerChamberStatue
+ bg_event 5, 3, BGEVENT_READ, RuinsOfAlphInnerChamberStatue
+ bg_event 8, 3, BGEVENT_READ, RuinsOfAlphInnerChamberStatue
+ bg_event 11, 3, BGEVENT_READ, RuinsOfAlphInnerChamberStatue
+ bg_event 14, 3, BGEVENT_READ, RuinsOfAlphInnerChamberStatue
+ bg_event 17, 3, BGEVENT_READ, RuinsOfAlphInnerChamberStatue
+ bg_event 2, 8, BGEVENT_READ, RuinsOfAlphInnerChamberStatue
+ bg_event 5, 8, BGEVENT_READ, RuinsOfAlphInnerChamberStatue
+ bg_event 8, 8, BGEVENT_READ, RuinsOfAlphInnerChamberStatue
+ bg_event 11, 8, BGEVENT_READ, RuinsOfAlphInnerChamberStatue
+ bg_event 14, 8, BGEVENT_READ, RuinsOfAlphInnerChamberStatue
+ bg_event 17, 8, BGEVENT_READ, RuinsOfAlphInnerChamberStatue
+ bg_event 2, 13, BGEVENT_READ, RuinsOfAlphInnerChamberStatue
+ bg_event 17, 13, BGEVENT_READ, RuinsOfAlphInnerChamberStatue
+ bg_event 2, 18, BGEVENT_READ, RuinsOfAlphInnerChamberStatue
+ bg_event 5, 18, BGEVENT_READ, RuinsOfAlphInnerChamberStatue
+ bg_event 8, 18, BGEVENT_READ, RuinsOfAlphInnerChamberStatue
+ bg_event 11, 18, BGEVENT_READ, RuinsOfAlphInnerChamberStatue
+ bg_event 14, 18, BGEVENT_READ, RuinsOfAlphInnerChamberStatue
+ bg_event 17, 18, BGEVENT_READ, RuinsOfAlphInnerChamberStatue
+ bg_event 2, 24, BGEVENT_READ, RuinsOfAlphInnerChamberStatue
+ bg_event 5, 24, BGEVENT_READ, RuinsOfAlphInnerChamberStatue
+ bg_event 8, 24, BGEVENT_READ, RuinsOfAlphInnerChamberStatue
+ bg_event 11, 24, BGEVENT_READ, RuinsOfAlphInnerChamberStatue
+ bg_event 14, 24, BGEVENT_READ, RuinsOfAlphInnerChamberStatue
+ bg_event 17, 24, BGEVENT_READ, RuinsOfAlphInnerChamberStatue
+
+ db 3 ; object events
+ object_event 3, 7, SPRITE_FISHER, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, PAL_NPC_GREEN, OBJECTTYPE_SCRIPT, 0, RuinsOfAlphInnerChamberFisherScript, EVENT_RUINS_OF_ALPH_INNER_CHAMBER_TOURISTS
+ object_event 14, 13, SPRITE_TEACHER, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, 0, OBJECTTYPE_SCRIPT, 0, RuinsOfAlphInnerChamberTeacherScript, EVENT_RUINS_OF_ALPH_INNER_CHAMBER_TOURISTS
+ object_event 11, 19, SPRITE_GRAMPS, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, PAL_NPC_BROWN, OBJECTTYPE_SCRIPT, 0, RuinsOfAlphInnerChamberGrampsScript, EVENT_RUINS_OF_ALPH_INNER_CHAMBER_TOURISTS
diff --git a/maps/RuinsOfAlphKabutoChamber.asm b/maps/RuinsOfAlphKabutoChamber.asm
new file mode 100644
index 00000000..dca455e7
--- /dev/null
+++ b/maps/RuinsOfAlphKabutoChamber.asm
@@ -0,0 +1,105 @@
+ const_def 2 ; object constants
+ const RUINSOFALPHKABUTOCHAMBER_RECEPTIONIST
+ const RUINSOFALPHKABUTOCHAMBER_SCIENTIST
+
+RuinsOfAlphKabutoChamber_MapScripts:
+ db 0 ; scene scripts
+
+ db 1 ; callbacks
+ callback MAPCALLBACK_TILES, RuinsOfAlphKabutoChamberHiddenDoors
+
+RuinsOfAlphKabutoChamberReceptionistScript:
+ jumptextfaceplayer RuinsOfAlphKabutoChamberReceptionistText
+
+RuinsOfAlphKabutoChamberHiddenDoors:
+ checkevent EVENT_SOLVED_KABUTO_PUZZLE
+ iffalse .FloorClosed
+ return
+
+.FloorClosed:
+ changeblock 2, 2, $01 ; left floor
+ changeblock 4, 2, $02 ; right floor
+ return
+
+RuinsOfAlphKabutoChamberPuzzle:
+ refreshscreen
+ writebyte UNOWNPUZZLE_KABUTO
+ special UnownPuzzle
+ closetext
+ iftrue .PuzzleComplete
+ end
+
+.PuzzleComplete:
+ setevent EVENT_RUINS_OF_ALPH_INNER_CHAMBER_TOURISTS
+ setevent EVENT_SOLVED_KABUTO_PUZZLE
+ setflag ENGINE_UNLOCKED_UNOWNS_A_TO_K
+ setevent EVENT_RUINS_OF_ALPH_KABUTO_CHAMBER_RECEPTIONIST
+ setmapscene RUINS_OF_ALPH_INNER_CHAMBER, SCENE_RUINSOFALPHINNERCHAMBER_STRANGE_PRESENCE
+ earthquake 30
+ showemote EMOTE_SHOCK, PLAYER, 15
+ changeblock 2, 2, $18 ; left hole
+ changeblock 4, 2, $19 ; right hole
+ reloadmappart
+ playsound SFX_STRENGTH
+ earthquake 80
+ warpcheck
+ end
+
+RuinsOfAlphKabutoChamberAncientReplica:
+ jumptext RuinsOfAlphKabutoChamberAncientReplicaText
+
+RuinsOfAlphKabutoChamberDescriptionSign:
+ jumptext RuinsOfAlphKabutoChamberDescriptionText
+
+RuinsOfAlphKabutoChamberReceptionistText:
+ text "Welcome to this"
+ line "chamber."
+
+ para "There are sliding"
+ line "panels that depict"
+
+ para "a #MON drawn by"
+ line "the ancients."
+
+ para "Slide the panels"
+ line "around to form the"
+ cont "picture."
+
+ para "To the right is a"
+ line "description of the"
+ cont "#MON."
+ done
+
+RuinsOfAlphKabutoChamberAncientReplicaText:
+ text "It's a replica of"
+ line "an ancient #-"
+ cont "MON."
+ done
+
+RuinsOfAlphKabutoChamberDescriptionText:
+ text "A #MON that hid"
+ line "on the sea floor."
+
+ para "Eyes on its back"
+ line "scanned the area."
+ done
+
+RuinsOfAlphKabutoChamber_MapEvents:
+ db 0, 0 ; filler
+
+ db 4 ; warp events
+ warp_event 3, 9, RUINS_OF_ALPH_OUTSIDE, 2
+ warp_event 4, 9, RUINS_OF_ALPH_OUTSIDE, 2
+ warp_event 3, 3, RUINS_OF_ALPH_INNER_CHAMBER, 4
+ warp_event 4, 3, RUINS_OF_ALPH_INNER_CHAMBER, 5
+
+ db 0 ; coord events
+
+ db 4 ; bg events
+ bg_event 2, 3, BGEVENT_READ, RuinsOfAlphKabutoChamberAncientReplica
+ bg_event 5, 3, BGEVENT_READ, RuinsOfAlphKabutoChamberAncientReplica
+ bg_event 3, 2, BGEVENT_UP, RuinsOfAlphKabutoChamberPuzzle
+ bg_event 4, 2, BGEVENT_UP, RuinsOfAlphKabutoChamberDescriptionSign
+
+ db 1 ; object events
+ object_event 5, 5, SPRITE_RECEPTIONIST, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, OBJECTTYPE_SCRIPT, 0, RuinsOfAlphKabutoChamberReceptionistScript, EVENT_RUINS_OF_ALPH_KABUTO_CHAMBER_RECEPTIONIST
diff --git a/maps/RuinsOfAlphOmanyteChamber.asm b/maps/RuinsOfAlphOmanyteChamber.asm
new file mode 100644
index 00000000..6ea0a8c1
--- /dev/null
+++ b/maps/RuinsOfAlphOmanyteChamber.asm
@@ -0,0 +1,77 @@
+RuinsOfAlphOmanyteChamber_MapScripts:
+ db 0 ; scene scripts
+
+ db 1 ; callbacks
+ callback MAPCALLBACK_TILES, .HiddenDoors
+
+.HiddenDoors:
+ checkevent EVENT_SOLVED_OMANYTE_PUZZLE
+ iffalse .FloorClosed
+ return
+
+.FloorClosed:
+ changeblock 2, 2, $01 ; left floor
+ changeblock 4, 2, $02 ; right floor
+ return
+
+RuinsOfAlphOmanyteChamberPuzzle:
+ refreshscreen
+ writebyte UNOWNPUZZLE_OMANYTE
+ special UnownPuzzle
+ closetext
+ iftrue .PuzzleComplete
+ end
+
+.PuzzleComplete:
+ setevent EVENT_RUINS_OF_ALPH_INNER_CHAMBER_TOURISTS
+ setevent EVENT_SOLVED_OMANYTE_PUZZLE
+ setflag ENGINE_UNLOCKED_UNOWNS_L_TO_R
+ setmapscene RUINS_OF_ALPH_INNER_CHAMBER, SCENE_RUINSOFALPHINNERCHAMBER_STRANGE_PRESENCE
+ earthquake 30
+ showemote EMOTE_SHOCK, PLAYER, 15
+ changeblock 2, 2, $18 ; left hole
+ changeblock 4, 2, $19 ; right hole
+ reloadmappart
+ playsound SFX_STRENGTH
+ earthquake 80
+ warpcheck
+ end
+
+RuinsOfAlphOmanyteChamberAncientReplica:
+ jumptext RuinsOfAlphOmanyteChamberAncientReplicaText
+
+RuinsOfAlphOmanyteChamberDescriptionSign:
+ jumptext RuinsOfAlphOmanyteChamberDescriptionText
+
+RuinsOfAlphOmanyteChamberAncientReplicaText:
+ text "It's a replica of"
+ line "an ancient #-"
+ cont "MON."
+ done
+
+RuinsOfAlphOmanyteChamberDescriptionText:
+ text "This #MON"
+ line "drifted in the"
+
+ para "sea by twisting"
+ line "its ten tentacles."
+ done
+
+RuinsOfAlphOmanyteChamber_MapEvents:
+ db 0, 0 ; filler
+
+ db 4 ; warp events
+ warp_event 3, 9, RUINS_OF_ALPH_OUTSIDE, 3
+ warp_event 4, 9, RUINS_OF_ALPH_OUTSIDE, 3
+ warp_event 3, 3, RUINS_OF_ALPH_INNER_CHAMBER, 6
+ warp_event 4, 3, RUINS_OF_ALPH_INNER_CHAMBER, 7
+
+ db 0 ; coord events
+
+ db 4 ; bg events
+ bg_event 2, 3, BGEVENT_READ, RuinsOfAlphOmanyteChamberAncientReplica
+ bg_event 5, 3, BGEVENT_READ, RuinsOfAlphOmanyteChamberAncientReplica
+ bg_event 3, 2, BGEVENT_UP, RuinsOfAlphOmanyteChamberPuzzle
+ bg_event 4, 2, BGEVENT_UP, RuinsOfAlphOmanyteChamberDescriptionSign
+
+ db 0 ; object events
diff --git a/maps/RuinsOfAlphOutside.asm b/maps/RuinsOfAlphOutside.asm
new file mode 100644
index 00000000..4b098adc
--- /dev/null
+++ b/maps/RuinsOfAlphOutside.asm
@@ -0,0 +1,238 @@
+ const_def 2 ; object constants
+ const RUINSOFALPHOUTSIDE_YOUNGSTER1
+ const RUINSOFALPHOUTSIDE_SCIENTIST
+ const RUINSOFALPHOUTSIDE_FISHER
+ const RUINSOFALPHOUTSIDE_YOUNGSTER2
+ const RUINSOFALPHOUTSIDE_YOUNGSTER3
+
+RuinsOfAlphOutside_MapScripts:
+ db 2 ; scene scripts
+ scene_script .DummyScene0 ; SCENE_RUINSOFALPHOUTSIDE_NOTHING
+ scene_script .DummyScene1 ; SCENE_RUINSOFALPHOUTSIDE_GET_UNOWN_DEX
+
+ db 1 ; callbacks
+ callback MAPCALLBACK_OBJECTS, .ScientistCallback
+
+.DummyScene0:
+ end
+
+.DummyScene1:
+ end
+
+.ScientistCallback:
+ checkflag ENGINE_UNOWN_DEX
+ iftrue .NoScientist
+ checkevent EVENT_MADE_UNOWN_APPEAR_IN_RUINS
+ iftrue .MaybeScientist
+ jump .NoScientist
+
+.MaybeScientist:
+ checkcode VAR_UNOWNCOUNT
+ ifgreater 2, .YesScientist
+ jump .NoScientist
+
+.YesScientist:
+ appear RUINSOFALPHOUTSIDE_SCIENTIST
+ setscene SCENE_RUINSOFALPHOUTSIDE_GET_UNOWN_DEX
+ return
+
+.NoScientist:
+ disappear RUINSOFALPHOUTSIDE_SCIENTIST
+ setscene SCENE_RUINSOFALPHOUTSIDE_NOTHING
+ return
+
+RuinsOfAlphOutsideScientistScene1:
+ turnobject RUINSOFALPHOUTSIDE_SCIENTIST, UP
+ turnobject PLAYER, DOWN
+ jump RuinsOfAlphOutsideScientistSceneContinue
+
+RuinsOfAlphOutsideScientistScene2:
+ turnobject RUINSOFALPHOUTSIDE_SCIENTIST, LEFT
+ turnobject PLAYER, RIGHT
+ jump RuinsOfAlphOutsideScientistSceneContinue
+
+RuinsOfAlphOutsideScientistScript:
+ faceplayer
+RuinsOfAlphOutsideScientistSceneContinue:
+ opentext
+ writetext RuinsOfAlphOutsideScientistText
+ waitbutton
+ closetext
+ playmusic MUSIC_SHOW_ME_AROUND
+ follow RUINSOFALPHOUTSIDE_SCIENTIST, PLAYER
+ applymovement RUINSOFALPHOUTSIDE_SCIENTIST, MovementData_0x580ba
+ disappear RUINSOFALPHOUTSIDE_SCIENTIST
+ stopfollow
+ applymovement PLAYER, MovementData_0x580c5
+ setmapscene RUINS_OF_ALPH_RESEARCH_CENTER, SCENE_RUINSOFALPHRESEARCHCENTER_GET_UNOWN_DEX
+ warpcheck
+ end
+
+TrainerPsychicNathan:
+ trainer PSYCHIC_T, NATHAN, EVENT_BEAT_PSYCHIC_NATHAN, PsychicNathanSeenText, PsychicNathanBeatenText, 0, .Script
+
+.Script:
+ endifjustbattled
+ opentext
+ writetext PsychicNathanAfterBattleText
+ waitbutton
+ closetext
+ end
+
+TrainerSuperNerdStan:
+ trainer SUPER_NERD, STAN, EVENT_BEAT_SUPER_NERD_STAN, SuperNerdStanSeenText, SuperNerdStanBeatenText, 0, .Script
+
+.Script:
+ endifjustbattled
+ opentext
+ writetext SuperNerdStanAfterBattleText
+ waitbutton
+ closetext
+ end
+
+RuinsOfAlphOutsideMysteryChamberSign:
+ jumptext RuinsOfAlphOutsideMysteryChamberSignText
+
+RuinsOfAlphSign:
+ jumptext RuinsOfAlphSignText
+
+RuinsOfAlphResearchCenterSign:
+ jumptext RuinsOfAlphResearchCenterSignText
+
+MovementData_0x580ba:
+ step RIGHT
+ step RIGHT
+ step RIGHT
+ step RIGHT
+ step UP
+ step UP
+ step RIGHT
+ step RIGHT
+ step UP
+ step UP
+ step_end
+
+MovementData_0x580c5:
+ step UP
+ step_end
+
+RuinsOfAlphOutsideScientistText:
+ text "Hm? That's a #-"
+ line "DEX, isn't it?"
+ cont "May I see it?"
+
+ para "There are so many"
+ line "kinds of #MON."
+
+ para "Hm? What's this?"
+
+ para "What is this"
+ line "#MON?"
+
+ para "It looks like the"
+ line "strange writing on"
+
+ para "the walls of the"
+ line "RUINS."
+
+ para "If those drawings"
+ line "are really #-"
+ cont "MON, there should"
+ cont "be many more."
+
+ para "I know! Let me up-"
+ line "grade your #-"
+ cont "DEX. Follow me."
+ done
+
+SuperNerdStanSeenText:
+ text "What do you want?"
+ line "I'm studying--"
+ cont "don't disturb me!"
+ done
+
+SuperNerdStanBeatenText:
+ text "Sorry…"
+ line "I'm frustrated by"
+
+ para "our lack of real"
+ line "understanding…"
+ done
+
+SuperNerdStanAfterBattleText:
+ text "The RUINS are from"
+ line "about 1500 years"
+ cont "ago."
+
+ para "Nobody knows who"
+ line "built them."
+
+ para "It's also not"
+ line "known if the #-"
+ cont "MON statues have"
+ cont "any meaning."
+
+ para "It's all one big"
+ line "mystery…"
+ done
+
+PsychicNathanSeenText:
+ text "Hmmm… This is a"
+ line "strange place."
+ done
+
+PsychicNathanBeatenText:
+ text "…"
+ done
+
+PsychicNathanAfterBattleText:
+ text "I like thinking"
+ line "here."
+ done
+
+RuinsOfAlphOutsideMysteryChamberSignText:
+ text "MYSTERY STONE"
+ line "PANEL CHAMBER"
+ done
+
+RuinsOfAlphSignText:
+ text "RUINS OF ALPH"
+ line "Visitors Welcome"
+ done
+
+RuinsOfAlphResearchCenterSignText:
+ text "RUINS OF ALPH"
+ line "RESEARCH CENTER"
+
+ para "The Authority on"
+ line "the RUINS OF ALPH"
+ done
+
+RuinsOfAlphOutside_MapEvents:
+ db 0, 0 ; filler
+
+ db 11 ; warp events
+ warp_event 2, 17, RUINS_OF_ALPH_HO_OH_CHAMBER, 1
+ warp_event 14, 7, RUINS_OF_ALPH_KABUTO_CHAMBER, 1
+ warp_event 2, 29, RUINS_OF_ALPH_OMANYTE_CHAMBER, 1
+ warp_event 16, 33, RUINS_OF_ALPH_AERODACTYL_CHAMBER, 1
+ warp_event 10, 13, RUINS_OF_ALPH_INNER_CHAMBER, 1
+ warp_event 17, 11, RUINS_OF_ALPH_RESEARCH_CENTER, 1
+ warp_event 6, 19, UNION_CAVE_B1F, 1
+ warp_event 6, 27, UNION_CAVE_B1F, 2
+ warp_event 7, 5, ROUTE_36_RUINS_OF_ALPH_GATE, 3
+ warp_event 13, 20, ROUTE_32_RUINS_OF_ALPH_GATE, 1
+ warp_event 13, 21, ROUTE_32_RUINS_OF_ALPH_GATE, 2
+
+ db 2 ; coord events
+ coord_event 11, 14, SCENE_RUINSOFALPHOUTSIDE_GET_UNOWN_DEX, RuinsOfAlphOutsideScientistScene1
+ coord_event 10, 15, SCENE_RUINSOFALPHOUTSIDE_GET_UNOWN_DEX, RuinsOfAlphOutsideScientistScene2
+
+ db 3 ; bg events
+ bg_event 16, 8, BGEVENT_READ, RuinsOfAlphOutsideMysteryChamberSign
+ bg_event 12, 16, BGEVENT_READ, RuinsOfAlphSign
+ bg_event 18, 12, BGEVENT_READ, RuinsOfAlphResearchCenterSign
+
+ db 2 ; object events
+ object_event 4, 20, SPRITE_YOUNGSTER, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, OBJECTTYPE_TRAINER, 1, TrainerPsychicNathan, -1
+ object_event 11, 15, SPRITE_SCIENTIST, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, 0, OBJECTTYPE_SCRIPT, 0, RuinsOfAlphOutsideScientistScript, EVENT_RUINS_OF_ALPH_OUTSIDE_SCIENTIST
diff --git a/maps/RuinsOfAlphResearchCenter.asm b/maps/RuinsOfAlphResearchCenter.asm
new file mode 100644
index 00000000..363e6809
--- /dev/null
+++ b/maps/RuinsOfAlphResearchCenter.asm
@@ -0,0 +1,338 @@
+ const_def 2 ; object constants
+ const RUINSOFALPHRESEARCHCENTER_SCIENTIST1
+ const RUINSOFALPHRESEARCHCENTER_SCIENTIST2
+ const RUINSOFALPHRESEARCHCENTER_SCIENTIST3
+
+RuinsOfAlphResearchCenter_MapScripts:
+ db 2 ; scene scripts
+ scene_script .DummyScene0 ; SCENE_RUINSOFALPHRESEARCHCENTER_NOTHING
+ scene_script .GetUnownDex ; SCENE_RUINSOFALPHRESEARCHCENTER_GET_UNOWN_DEX
+
+ db 1 ; callbacks
+ callback MAPCALLBACK_OBJECTS, .ScientistCallback
+
+.DummyScene0:
+ end
+
+.GetUnownDex:
+ priorityjump .GetUnownDexScript
+ end
+
+.ScientistCallback:
+ checkscene
+ ifequal SCENE_RUINSOFALPHRESEARCHCENTER_GET_UNOWN_DEX, .ShowScientist
+ return
+
+.ShowScientist:
+ moveobject RUINSOFALPHRESEARCHCENTER_SCIENTIST3, 3, 7
+ appear RUINSOFALPHRESEARCHCENTER_SCIENTIST3
+ return
+
+.GetUnownDexScript:
+ applymovement RUINSOFALPHRESEARCHCENTER_SCIENTIST3, MovementData_0x5926f
+ playsound SFX_BOOT_PC
+ pause 60
+ playsound SFX_SWITCH_POKEMON
+ pause 30
+ playsound SFX_TALLY
+ pause 30
+ playsound SFX_TRANSACTION
+ pause 30
+ turnobject RUINSOFALPHRESEARCHCENTER_SCIENTIST3, DOWN
+ opentext
+ writetext RuinsOfAlphResearchCenterModifiedDexText
+ waitbutton
+ closetext
+ applymovement RUINSOFALPHRESEARCHCENTER_SCIENTIST3, MovementData_0x59274
+ opentext
+ writetext RuinsOfAlphResearchCenterDexUpgradedText
+ playsound SFX_ITEM
+ waitsfx
+ setflag ENGINE_UNOWN_DEX
+ writetext RuinsOfAlphResearchCenterScientist3Text
+ waitbutton
+ closetext
+ applymovement RUINSOFALPHRESEARCHCENTER_SCIENTIST3, MovementData_0x59276
+ setscene SCENE_RUINSOFALPHRESEARCHCENTER_NOTHING
+ special RestartMapMusic
+ end
+
+RuinsOfAlphResearchCenterScientist3Script:
+ faceplayer
+ opentext
+ checkcode VAR_UNOWNCOUNT
+ ifequal NUM_UNOWN, .PrinterAvailable
+ writetext RuinsOfAlphResearchCenterScientist3Text
+ waitbutton
+ closetext
+ end
+
+.PrinterAvailable:
+ writetext RuinsOfAlphResearchCenterScientist3_PrinterAvailable
+ waitbutton
+ closetext
+ end
+
+RuinsOfAlphResearchCenterScientist1Script:
+ faceplayer
+ opentext
+ checkflag ENGINE_UNOWN_DEX
+ iftrue .GotUnownDex
+ checkevent EVENT_MADE_UNOWN_APPEAR_IN_RUINS
+ iftrue .UnownAppeared
+ writetext RuinsOfAlphResearchCenterScientist1Text
+ waitbutton
+ closetext
+ end
+
+.UnownAppeared:
+ writetext RuinsOfAlphResearchCenterScientist1Text_UnownAppeared
+ waitbutton
+ closetext
+ end
+
+.GotUnownDex:
+ writetext RuinsOfAlphResearchCenterScientist1Text_GotUnownDex
+ waitbutton
+ closetext
+ end
+
+RuinsOfAlphResearchCenterScientist2Script:
+ faceplayer
+ opentext
+ checkevent EVENT_MADE_UNOWN_APPEAR_IN_RUINS
+ iftrue .UnownAppeared
+ writetext RuinsOfAlphResearchCenterScientist2Text
+ waitbutton
+ closetext
+ end
+
+.UnownAppeared:
+ writetext RuinsOfAlphResearchCenterScientist2Text_UnownAppeared
+ waitbutton
+ closetext
+ end
+
+RuinsOfAlphResearchCenterComputer:
+ opentext
+ checkevent EVENT_RUINS_OF_ALPH_RESEARCH_CENTER_SCIENTIST
+ iftrue .SkipChecking
+ checkcode VAR_UNOWNCOUNT
+ ifequal NUM_UNOWN, .FullUnownDex
+.SkipChecking:
+ writetext RuinsOfAlphResearchCenterComputerText
+ waitbutton
+ closetext
+ end
+.FullUnownDex:
+ writetext RuinsOfAlphResearchCenterComputerText_GotAllUnown
+ waitbutton
+ closetext
+ end
+
+RuinsOfAlphResearchCenterPrinter:
+ opentext
+ checkevent EVENT_RUINS_OF_ALPH_RESEARCH_CENTER_SCIENTIST
+ iftrue .SkipChecking
+ checkcode VAR_UNOWNCOUNT
+ ifequal NUM_UNOWN, .PrinterAvailable
+.SkipChecking:
+ writetext RuinsOfAlphResearchCenterPrinterText_DoesntWork
+ waitbutton
+ closetext
+ end
+
+.PrinterAvailable:
+ writetext RuinsOfAlphResearchCenterUnownPrinterText
+ waitbutton
+ special UnownPrinter
+ closetext
+ end
+
+RuinsOfAlphResearchCenterPhoto:
+; unreferenced
+ jumptext RuinsOfAlphResearchCenterProfSilktreePhotoText
+
+RuinsOfAlphResearchCenterBookshelf:
+ jumptext RuinsOfAlphResearchCenterAcademicBooksText
+
+MovementData_0x5926f:
+ step UP
+ step UP
+ step LEFT
+ turn_head UP
+ step_end
+
+MovementData_0x59274:
+ step DOWN
+ step_end
+
+MovementData_0x59276:
+ step UP
+ step_end
+
+RuinsOfAlphResearchCenterModifiedDexText:
+ text "Done!"
+
+ para "I modified your"
+ line "#DEX."
+
+ para "I added an"
+ line "optional #DEX"
+
+ para "to store UNOWN"
+ line "data."
+
+ para "It records them in"
+ line "the sequence that"
+ cont "they were caught."
+ done
+
+RuinsOfAlphResearchCenterDexUpgradedText:
+ text "<PLAYER>'s #DEX"
+ line "was upgraded."
+ done
+
+RuinsOfAlphResearchCenterScientist3Text:
+ text "The UNOWN you"
+ line "catch will all be"
+ cont "recorded."
+
+ para "Check to see how"
+ line "many kinds exist."
+ done
+
+RuinsOfAlphResearchCenterScientist3_PrinterAvailable:
+ text "You caught all the"
+ line "UNOWN variations?"
+
+ para "That's a great"
+ line "achievement!"
+
+ para "I've set up the"
+ line "printer here for"
+ cont "handling UNOWN."
+
+ para "Feel free to use"
+ line "it anytime."
+ done
+
+RuinsOfAlphResearchCenterScientist1Text:
+ text "The RUINS are"
+ line "about 1500 years"
+ cont "old."
+
+ para "But it's not known"
+ line "why they were"
+ cont "built--or by whom."
+ done
+
+RuinsOfAlphResearchCenterScientist1Text_GotUnownDex:
+ text "I wonder how many"
+ line "kinds of #MON"
+ cont "are in the RUINS?"
+ done
+
+RuinsOfAlphResearchCenterScientist1Text_UnownAppeared:
+ text "#MON appeared"
+ line "in the RUINS?"
+
+ para "That's incredible"
+ line "news!"
+
+ para "We'll need to"
+ line "investigate this."
+ done
+
+RuinsOfAlphResearchCenterScientist2Text:
+ text "There are odd pat-"
+ line "terns drawn on the"
+
+ para "walls of the"
+ line "RUINS."
+
+ para "They must be the"
+ line "keys for unravel-"
+ cont "ing the mystery"
+ cont "of the RUINS."
+ done
+
+RuinsOfAlphResearchCenterScientist2Text_UnownAppeared:
+ text "The strange #-"
+ line "MON you saw in the"
+ cont "RUINS?"
+
+ para "They appear to be"
+ line "very much like the"
+
+ para "drawings on the"
+ line "walls there."
+
+ para "Hmm…"
+
+ para "That must mean"
+ line "there are many"
+ cont "kinds of them…"
+ done
+
+RuinsOfAlphResearchCenterComputerText:
+ text "RUINS OF ALPH"
+
+ para "Exploration"
+ line "Year 10"
+ done
+
+RuinsOfAlphResearchCenterComputerText_GotAllUnown:
+ text "Mystery #MON"
+ line "Name: UNOWN"
+
+ para "A total of 26"
+ line "kinds found."
+ done
+
+RuinsOfAlphResearchCenterPrinterText_DoesntWork:
+ text "This doesn't seem"
+ line "to work yet."
+ done
+
+RuinsOfAlphResearchCenterUnownPrinterText:
+ text "UNOWN may be"
+ line "printed out."
+ done
+
+RuinsOfAlphResearchCenterProfSilktreePhotoText:
+; unused
+ text "It's a photo of"
+ line "the RESEARCH"
+
+ para "CENTER'S founder,"
+ line "PROF.SILKTREE."
+ done
+
+RuinsOfAlphResearchCenterAcademicBooksText:
+ text "There are many"
+ line "academic books."
+
+ para "Ancient Ruins…"
+ line "Mysteries of the"
+ cont "Ancients…"
+ done
+
+RuinsOfAlphResearchCenter_MapEvents:
+ db 0, 0 ; filler
+
+ db 2 ; warp events
+ warp_event 2, 7, RUINS_OF_ALPH_OUTSIDE, 6
+ warp_event 3, 7, RUINS_OF_ALPH_OUTSIDE, 6
+
+ db 0 ; coord events
+
+ db 3 ; bg events
+ bg_event 6, 5, BGEVENT_READ, RuinsOfAlphResearchCenterBookshelf
+ bg_event 3, 4, BGEVENT_READ, RuinsOfAlphResearchCenterComputer
+ bg_event 7, 1, BGEVENT_READ, RuinsOfAlphResearchCenterPrinter
+
+ db 3 ; object events
+ object_event 4, 5, SPRITE_SCIENTIST, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, PAL_NPC_BLUE, OBJECTTYPE_SCRIPT, 0, RuinsOfAlphResearchCenterScientist1Script, -1
+ object_event 5, 2, SPRITE_SCIENTIST, SPRITEMOVEDATA_WANDER, 2, 1, -1, -1, PAL_NPC_BLUE, OBJECTTYPE_SCRIPT, 0, RuinsOfAlphResearchCenterScientist2Script, -1
+ object_event 2, 5, SPRITE_SCIENTIST, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, PAL_NPC_BLUE, OBJECTTYPE_SCRIPT, 0, RuinsOfAlphResearchCenterScientist3Script, EVENT_RUINS_OF_ALPH_RESEARCH_CENTER_SCIENTIST
diff --git a/maps/SlowpokeWellB1F.asm b/maps/SlowpokeWellB1F.asm
new file mode 100644
index 00000000..843114e5
--- /dev/null
+++ b/maps/SlowpokeWellB1F.asm
@@ -0,0 +1,341 @@
+ const_def 2 ; object constants
+ const SLOWPOKEWELLB1F_ROCKET1
+ const SLOWPOKEWELLB1F_ROCKET2
+ const SLOWPOKEWELLB1F_ROCKET3
+ const SLOWPOKEWELLB1F_ROCKET_GIRL
+ const SLOWPOKEWELLB1F_SLOWPOKE1
+ const SLOWPOKEWELLB1F_SLOWPOKE2
+ const SLOWPOKEWELLB1F_KURT
+ const SLOWPOKEWELLB1F_BOULDER
+ const SLOWPOKEWELLB1F_POKE_BALL
+
+SlowpokeWellB1F_MapScripts:
+ db 0 ; scene scripts
+
+ db 0 ; callbacks
+
+SlowpokeWellB1FKurtScript:
+ jumptextfaceplayer SlowpokeWellB1FKurtText
+
+TrainerGruntM29:
+ trainer GRUNTM, GRUNTM_29, EVENT_BEAT_ROCKET_GRUNTM_29, GruntM29SeenText, GruntM29BeatenText, 0, .Script
+
+.Script:
+ endifjustbattled
+ opentext
+ writetext GruntM29AfterBattleText
+ waitbutton
+ closetext
+ end
+
+TrainerGruntM1:
+ trainer GRUNTM, GRUNTM_1, EVENT_BEAT_ROCKET_GRUNTM_1, GruntM1SeenText, GruntM1BeatenText, 0, .Script
+
+.Script:
+ opentext
+ writetext TrainerGruntM1WhenTalkText
+ waitbutton
+ closetext
+ special FadeBlackQuickly
+ special ReloadSpritesNoPalettes
+ disappear SLOWPOKEWELLB1F_ROCKET1
+ disappear SLOWPOKEWELLB1F_ROCKET2
+ disappear SLOWPOKEWELLB1F_ROCKET3
+ disappear SLOWPOKEWELLB1F_ROCKET_GIRL
+ pause 15
+ special FadeInQuickly
+ disappear SLOWPOKEWELLB1F_KURT
+ moveobject SLOWPOKEWELLB1F_KURT, 11, 6
+ appear SLOWPOKEWELLB1F_KURT
+ applymovement SLOWPOKEWELLB1F_KURT, KurtSlowpokeWellVictoryMovementData
+ turnobject PLAYER, RIGHT
+ opentext
+ writetext KurtLeaveSlowpokeWellText
+ waitbutton
+ closetext
+ setevent EVENT_CLEARED_SLOWPOKE_WELL
+ variablesprite SPRITE_AZALEA_ROCKET, SPRITE_SILVER
+ setmapscene AZALEA_TOWN, SCENE_AZALEATOWN_RIVAL_BATTLE
+ clearevent EVENT_ILEX_FOREST_APPRENTICE
+ clearevent EVENT_ILEX_FOREST_FARFETCHD
+ setevent EVENT_CHARCOAL_KILN_FARFETCH_D
+ setevent EVENT_CHARCOAL_KILN_APPRENTICE
+ setevent EVENT_SLOWPOKE_WELL_SLOWPOKES
+ setevent EVENT_SLOWPOKE_WELL_KURT
+ clearevent EVENT_AZALEA_TOWN_SLOWPOKES
+ clearevent EVENT_KURTS_HOUSE_SLOWPOKE
+ clearevent EVENT_KURTS_HOUSE_KURT_1
+ special FadeOutPalettes
+ special HealParty
+ pause 15
+ warp KURTS_HOUSE, 3, 3
+ end
+
+TrainerGruntM2:
+ trainer GRUNTM, GRUNTM_2, EVENT_BEAT_ROCKET_GRUNTM_2, GruntM2SeenText, GruntM2BeatenText, 0, .Script
+
+.Script:
+ endifjustbattled
+ opentext
+ writetext GruntM2AfterBattleText
+ waitbutton
+ closetext
+ end
+
+TrainerGruntF1:
+ trainer GRUNTF, GRUNTF_1, EVENT_BEAT_ROCKET_GRUNTF_1, GruntF1SeenText, GruntF1BeatenText, 0, .Script
+
+.Script:
+ endifjustbattled
+ opentext
+ writetext GruntF1AfterBattleText
+ waitbutton
+ closetext
+ end
+
+SlowpokeWellB1FSlowpokeWithMailScript:
+ faceplayer
+ opentext
+ cry SLOWPOKE
+ writetext SlowpokeWellB1FSlowpokeWithMailText
+ yesorno
+ iftrue .ReadMail
+ closetext
+ end
+
+.ReadMail:
+ writetext SlowpokeWellB1FSlowpokeMailText
+ waitbutton
+ closetext
+ end
+
+SlowpokeWellB1FTaillessSlowpokeScript:
+ faceplayer
+ opentext
+ writetext SlowpokeWellB1FTaillessSlowpokeText
+ cry SLOWPOKE
+ waitbutton
+ closetext
+ end
+
+SlowpokeWellB1FBoulder:
+ jumpstd strengthboulder
+
+SlowpokeWellB1FSuperPotion:
+ itemball SUPER_POTION
+
+KurtSlowpokeWellVictoryMovementData:
+ step LEFT
+ step LEFT
+ step LEFT
+ step LEFT
+ step UP
+ step_sleep 8
+ step_sleep 8
+ step_sleep 8
+ step LEFT
+ step UP
+ step UP
+ step_sleep 8
+ step_sleep 8
+ step_sleep 8
+ turn_head LEFT
+ step_end
+
+SlowpokeWellB1FKurtText:
+ text "KURT: Hey there,"
+ line "<PLAYER>!"
+
+ para "The guards up top"
+ line "took off when I"
+ cont "shouted at them."
+
+ para "But then I took a"
+ line "tumble down the"
+ cont "WELL."
+
+ para "I slammed down"
+ line "hard on my back,"
+ cont "so I can't move."
+
+ para "Rats! If I were"
+ line "fit, my #MON"
+
+ para "would've punished"
+ line "them…"
+
+ para "Ah, it can't be"
+ line "helped."
+
+ para "<PLAYER>, show them"
+ line "how gutsy you are"
+ cont "in my place!"
+ done
+
+KurtLeaveSlowpokeWellText:
+ text "KURT: Way to go,"
+ line "<PLAYER>!"
+
+ para "TEAM ROCKET has"
+ line "taken off."
+
+ para "My back's better"
+ line "too. Let's get out"
+ cont "of here."
+ done
+
+GruntM29SeenText:
+ text "Darn! I was stand-"
+ line "ing guard up top"
+
+ para "when some old coot"
+ line "yelled at me."
+
+ para "He startled me so"
+ line "much that I fell"
+ cont "down here."
+
+ para "I think I'll vent"
+ line "my anger by taking"
+ cont "it out on you!"
+ done
+
+GruntM29BeatenText:
+ text "Arrgh! This is NOT"
+ line "my day!"
+ done
+
+GruntM29AfterBattleText:
+ text "Sure, we've been"
+ line "hacking the tails"
+
+ para "off SLOWPOKE and"
+ line "selling them."
+
+ para "Everything we do"
+ line "is for profit."
+
+ para "That's right!"
+ line "We're TEAM ROCKET,"
+
+ para "and we'll do any-"
+ line "thing for money!"
+ done
+
+GruntM1SeenText:
+ text "What do you want?"
+
+ para "If you interrupt"
+ line "our work, don't"
+ cont "expect any mercy!"
+ done
+
+GruntM1BeatenText:
+ text "You did OK today,"
+ line "brat, but wait"
+ cont "'til next time!"
+ done
+
+TrainerGruntM1WhenTalkText:
+ text "Yeah, TEAM ROCKET"
+ line "was broken up"
+ cont "three years ago."
+
+ para "But we continued"
+ line "our activities"
+ cont "underground."
+
+ para "Now you can have"
+ line "fun watching us"
+ cont "stir up trouble!"
+ done
+
+GruntM2SeenText:
+ text "Quit taking SLOW-"
+ line "POKETAILS?"
+
+ para "If we obeyed you,"
+ line "TEAM ROCKET's rep"
+ cont "would be ruined!"
+ done
+
+GruntM2BeatenText:
+ text "Just…"
+ line "Too strong…"
+ done
+
+GruntM2AfterBattleText:
+ text "We need the money,"
+ line "but selling SLOW-"
+ cont "POKETAILS?"
+
+ para "It's tough being a"
+ line "ROCKET GRUNT!"
+ done
+
+GruntF1SeenText:
+ text "Stop taking TAILS?"
+
+ para "Yeah, just try to"
+ line "defeat all of us!"
+ done
+
+GruntF1BeatenText:
+ text "You rotten brat!"
+ done
+
+GruntF1AfterBattleText:
+ text "SLOWPOKETAILS"
+ line "grow back fast!"
+
+ para "What's wrong with"
+ line "selling them?"
+ done
+
+SlowpokeWellB1FSlowpokeWithMailText:
+ text "A SLOWPOKE with"
+ line "its TAIL cut off…"
+
+ para "Huh? It has MAIL."
+ line "Read it?"
+ done
+
+SlowpokeWellB1FSlowpokeMailText:
+ text "<PLAYER> read the"
+ line "MAIL."
+
+ para "Be good and look"
+ line "after the house"
+
+ para "with Grandpa and"
+ line "SLOWPOKE."
+
+ para "Love, Dad"
+ done
+
+SlowpokeWellB1FTaillessSlowpokeText:
+ text "A SLOWPOKE with"
+ line "its TAIL cut off…"
+ done
+
+SlowpokeWellB1F_MapEvents:
+ db 0, 0 ; filler
+
+ db 2 ; warp events
+ warp_event 17, 15, AZALEA_TOWN, 6
+ warp_event 7, 11, SLOWPOKE_WELL_B2F, 1
+
+ db 0 ; coord events
+
+ db 0 ; bg events
+
+ db 9 ; object events
+ object_event 14, 8, SPRITE_ROCKET, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, OBJECTTYPE_TRAINER, 1, TrainerGruntM29, EVENT_SLOWPOKE_WELL_ROCKETS
+ object_event 5, 2, SPRITE_ROCKET, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, OBJECTTYPE_TRAINER, 1, TrainerGruntM1, EVENT_SLOWPOKE_WELL_ROCKETS
+ object_event 5, 6, SPRITE_ROCKET, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, OBJECTTYPE_TRAINER, 2, TrainerGruntM2, EVENT_SLOWPOKE_WELL_ROCKETS
+ object_event 13, 2, SPRITE_ROCKET_GIRL, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, PAL_NPC_RED, OBJECTTYPE_TRAINER, 2, TrainerGruntF1, EVENT_SLOWPOKE_WELL_ROCKETS
+ object_event 7, 4, SPRITE_SLOWPOKE, SPRITEMOVEDATA_STILL, 0, 0, -1, -1, PAL_NPC_RED, OBJECTTYPE_SCRIPT, 0, SlowpokeWellB1FSlowpokeWithMailScript, EVENT_SLOWPOKE_WELL_SLOWPOKES
+ object_event 6, 2, SPRITE_SLOWPOKE, SPRITEMOVEDATA_STILL, 0, 0, -1, -1, PAL_NPC_RED, OBJECTTYPE_SCRIPT, 0, SlowpokeWellB1FTaillessSlowpokeScript, EVENT_SLOWPOKE_WELL_SLOWPOKES
+ object_event 16, 14, SPRITE_KURT, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, 0, OBJECTTYPE_SCRIPT, 0, SlowpokeWellB1FKurtScript, EVENT_SLOWPOKE_WELL_KURT
+ object_event 3, 2, SPRITE_BOULDER, SPRITEMOVEDATA_STRENGTH_BOULDER, 0, 0, -1, -1, 0, OBJECTTYPE_SCRIPT, 0, SlowpokeWellB1FBoulder, -1
+ object_event 10, 3, SPRITE_POKE_BALL, SPRITEMOVEDATA_STILL, 0, 0, -1, -1, 0, OBJECTTYPE_ITEMBALL, 0, SlowpokeWellB1FSuperPotion, EVENT_SLOWPOKE_WELL_B1F_SUPER_POTION
diff --git a/maps/SlowpokeWellB2F.asm b/maps/SlowpokeWellB2F.asm
new file mode 100644
index 00000000..3098815e
--- /dev/null
+++ b/maps/SlowpokeWellB2F.asm
@@ -0,0 +1,74 @@
+ const_def 2 ; object constants
+ const SLOWPOKEWELLB2F_GYM_GUY
+ const SLOWPOKEWELLB2F_POKE_BALL
+
+SlowpokeWellB2F_MapScripts:
+ db 0 ; scene scripts
+
+ db 0 ; callbacks
+
+SlowpokeWellB2FGymGuyScript:
+ faceplayer
+ opentext
+ checkevent EVENT_GOT_KINGS_ROCK_IN_SLOWPOKE_WELL
+ iftrue .GotKingsRock
+ writetext SlowpokeWellB2FGymGuyText
+ buttonsound
+ verbosegiveitem KINGS_ROCK
+ iffalse .NoRoom
+ setevent EVENT_GOT_KINGS_ROCK_IN_SLOWPOKE_WELL
+.NoRoom:
+ closetext
+ end
+
+.GotKingsRock:
+ writetext SlowpokeWellB2FGymGuyText_GotKingsRock
+ waitbutton
+ closetext
+ end
+
+SlowpokeWellB2FTMRainDance:
+ itemball TM_RAIN_DANCE
+
+SlowpokeWellB2FGymGuyText:
+ text "I'm waiting to see"
+ line "SLOWPOKE's moment"
+ cont "of evolution."
+
+ para "Through observa-"
+ line "tion, I made a new"
+ cont "discovery."
+
+ para "A SLOWPOKE with a"
+ line "KING'S ROCK often"
+
+ para "gets bitten by a"
+ line "SHELLDER."
+
+ para "Here, I'll share a"
+ line "KING'S ROCK with"
+ cont "you."
+ done
+
+SlowpokeWellB2FGymGuyText_GotKingsRock:
+ text "I'm going to be"
+ line "like SLOWPOKE."
+
+ para "I'll wait patient-"
+ line "ly, so I can see"
+ cont "one evolve."
+ done
+
+SlowpokeWellB2F_MapEvents:
+ db 0, 0 ; filler
+
+ db 1 ; warp events
+ warp_event 9, 11, SLOWPOKE_WELL_B1F, 2
+
+ db 0 ; coord events
+
+ db 0 ; bg events
+
+ db 2 ; object events
+ object_event 5, 4, SPRITE_GYM_GUY, SPRITEMOVEDATA_WANDER, 1, 2, -1, -1, 0, OBJECTTYPE_SCRIPT, 1, SlowpokeWellB2FGymGuyScript, -1
+ object_event 15, 5, SPRITE_POKE_BALL, SPRITEMOVEDATA_STILL, 0, 0, -1, -1, 0, OBJECTTYPE_ITEMBALL, 0, SlowpokeWellB2FTMRainDance, EVENT_SLOWPOKE_WELL_B2F_TM_RAIN_DANCE
diff --git a/maps/UnionCave1F.asm b/maps/UnionCave1F.asm
new file mode 100644
index 00000000..e5a5d8bb
--- /dev/null
+++ b/maps/UnionCave1F.asm
@@ -0,0 +1,223 @@
+ const_def 2 ; object constants
+ const UNIONCAVE1F_POKEFAN_M1
+ const UNIONCAVE1F_SUPER_NERD
+ const UNIONCAVE1F_POKEFAN_M2
+ const UNIONCAVE1F_FISHER1
+ const UNIONCAVE1F_FISHER2
+ const UNIONCAVE1F_POKE_BALL1
+ const UNIONCAVE1F_POKE_BALL2
+ const UNIONCAVE1F_POKE_BALL3
+ const UNIONCAVE1F_POKE_BALL4
+
+UnionCave1F_MapScripts:
+ db 0 ; scene scripts
+
+ db 0 ; callbacks
+
+TrainerPokemaniacLarry:
+ trainer POKEMANIAC, LARRY, EVENT_BEAT_POKEMANIAC_LARRY, PokemaniacLarrySeenText, PokemaniacLarryBeatenText, 0, .Script
+
+.Script:
+ endifjustbattled
+ opentext
+ writetext PokemaniacLarryAfterBattleText
+ waitbutton
+ closetext
+ end
+
+TrainerHikerRussell:
+ trainer HIKER, RUSSELL, EVENT_BEAT_HIKER_RUSSELL, HikerRussellSeenText, HikerRussellBeatenText, 0, .Script
+
+.Script:
+ endifjustbattled
+ opentext
+ writetext HikerRussellAfterBattleText
+ waitbutton
+ closetext
+ end
+
+TrainerHikerDaniel:
+ trainer HIKER, DANIEL, EVENT_BEAT_HIKER_DANIEL, HikerDanielSeenText, HikerDanielBeatenText, 0, .Script
+
+.Script:
+ endifjustbattled
+ opentext
+ writetext HikerDanielAfterBattleText
+ waitbutton
+ closetext
+ end
+
+TrainerFirebreatherBill:
+ trainer FIREBREATHER, BILL, EVENT_BEAT_FIREBREATHER_BILL, FirebreatherBillSeenText, FirebreatherBillBeatenText, 0, .Script
+
+.Script:
+ endifjustbattled
+ opentext
+ writetext FirebreatherBillAfterBattleText
+ waitbutton
+ closetext
+ end
+
+TrainerFirebreatherRay:
+ trainer FIREBREATHER, RAY, EVENT_BEAT_FIREBREATHER_RAY, FirebreatherRaySeenText, FirebreatherRayBeatenText, 0, .Script
+
+.Script:
+ endifjustbattled
+ opentext
+ writetext FirebreatherRayAfterBattleText
+ waitbutton
+ closetext
+ end
+
+UnionCave1FGreatBall:
+ itemball GREAT_BALL
+
+UnionCave1FXAttack:
+ itemball POTION
+
+UnionCave1FPotion:
+ itemball X_ATTACK
+
+UnionCave1FAwakening:
+ itemball AWAKENING
+
+UnionCave1FUnusedSign:
+; unused
+ jumptext UnionCave1FUnusedSignText
+
+HikerRussellSeenText:
+ text "You're headed to"
+ line "AZALEA, are you?"
+
+ para "Let my #MON see"
+ line "if you are good"
+ cont "enough to battle."
+ done
+
+HikerRussellBeatenText:
+ text "Oh, oh, oh!"
+ done
+
+HikerRussellAfterBattleText:
+ text "All right, then!"
+ line "I've decided."
+
+ para "I'm not leaving"
+ line "until my #MON"
+ cont "get tougher!"
+ done
+
+PokemaniacLarrySeenText:
+ text "I roam far and"
+ line "wide in search of"
+ cont "#MON."
+
+ para "Are you looking"
+ line "for #MON too?"
+
+ para "Then you're my"
+ line "collecting rival!"
+ done
+
+PokemaniacLarryBeatenText:
+ text "Ugh. My poor #-"
+ line "MON…"
+ done
+
+PokemaniacLarryAfterBattleText:
+ text "Every Friday, you"
+ line "can hear #MON"
+
+ para "roars from deep"
+ line "inside the cave."
+ done
+
+HikerDanielSeenText:
+ text "Whoa! What a"
+ line "surprise!"
+
+ para "I didn't expect to"
+ line "see anyone here!"
+ done
+
+HikerDanielBeatenText:
+ text "Whoa! I'm beaten"
+ line "big time!"
+ done
+
+HikerDanielAfterBattleText:
+ text "I was conned into"
+ line "buying a SLOWPOKE-"
+ cont "TAIL."
+
+ para "I feel sorry for"
+ line "the poor #MON."
+ done
+
+FirebreatherBillSeenText:
+ text "ZUBAT's SUPERSONIC"
+ line "keeps confusing"
+ cont "my #MON."
+
+ para "I'm seriously"
+ line "upset about that!"
+ done
+
+FirebreatherBillBeatenText:
+ text "I flamed out!"
+ done
+
+FirebreatherBillAfterBattleText:
+ text "On weekends, you"
+ line "can hear strange"
+
+ para "roars from deep in"
+ line "the cave."
+ done
+
+FirebreatherRaySeenText:
+ text "If it's light, a"
+ line "cave isn't scary."
+
+ para "If you're strong,"
+ line "#MON aren't"
+ cont "scary."
+ done
+
+FirebreatherRayBeatenText:
+ text "FLASH!"
+ done
+
+FirebreatherRayAfterBattleText:
+ text "It's my #MON's"
+ line "fire that lights"
+ cont "up this cave."
+ done
+
+UnionCave1FUnusedSignText:
+ text "UNION CAVE"
+ done
+
+UnionCave1F_MapEvents:
+ db 0, 0 ; filler
+
+ db 4 ; warp events
+ warp_event 5, 19, UNION_CAVE_B1F, 3
+ warp_event 3, 33, UNION_CAVE_B1F, 4
+ warp_event 17, 31, ROUTE_33, 1
+ warp_event 17, 3, ROUTE_32, 4
+
+ db 0 ; coord events
+
+ db 0 ; bg events
+
+ db 9 ; object events
+ object_event 4, 4, SPRITE_POKEFAN_M, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, PAL_NPC_BROWN, OBJECTTYPE_TRAINER, 1, TrainerHikerDaniel, -1
+ object_event 4, 21, SPRITE_SUPER_NERD, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, PAL_NPC_BLUE, OBJECTTYPE_TRAINER, 2, TrainerPokemaniacLarry, -1
+ object_event 15, 8, SPRITE_POKEFAN_M, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, PAL_NPC_BROWN, OBJECTTYPE_TRAINER, 3, TrainerHikerRussell, -1
+ object_event 16, 31, SPRITE_FISHER, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, PAL_NPC_RED, OBJECTTYPE_TRAINER, 4, TrainerFirebreatherRay, -1
+ object_event 15, 15, SPRITE_FISHER, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, PAL_NPC_RED, OBJECTTYPE_TRAINER, 2, TrainerFirebreatherBill, -1
+ object_event 17, 21, SPRITE_POKE_BALL, SPRITEMOVEDATA_STILL, 0, 0, -1, -1, 0, OBJECTTYPE_ITEMBALL, 0, UnionCave1FGreatBall, EVENT_UNION_CAVE_1F_GREAT_BALL
+ object_event 4, 2, SPRITE_POKE_BALL, SPRITEMOVEDATA_STILL, 0, 0, -1, -1, 0, OBJECTTYPE_ITEMBALL, 0, UnionCave1FXAttack, EVENT_UNION_CAVE_1F_X_ATTACK
+ object_event 4, 17, SPRITE_POKE_BALL, SPRITEMOVEDATA_STILL, 0, 0, -1, -1, 0, OBJECTTYPE_ITEMBALL, 0, UnionCave1FPotion, EVENT_UNION_CAVE_1F_POTION
+ object_event 12, 33, SPRITE_POKE_BALL, SPRITEMOVEDATA_STILL, 0, 0, -1, -1, 0, OBJECTTYPE_ITEMBALL, 0, UnionCave1FAwakening, EVENT_UNION_CAVE_1F_AWAKENING
diff --git a/maps/UnionCaveB1F.asm b/maps/UnionCaveB1F.asm
new file mode 100644
index 00000000..f13b821a
--- /dev/null
+++ b/maps/UnionCaveB1F.asm
@@ -0,0 +1,174 @@
+ const_def 2 ; object constants
+ const UNIONCAVEB1F_POKEFAN_M1
+ const UNIONCAVEB1F_POKEFAN_M2
+ const UNIONCAVEB1F_SUPER_NERD1
+ const UNIONCAVEB1F_SUPER_NERD2
+ const UNIONCAVEB1F_POKE_BALL1
+ const UNIONCAVEB1F_BOULDER
+ const UNIONCAVEB1F_POKE_BALL2
+
+UnionCaveB1F_MapScripts:
+ db 0 ; scene scripts
+
+ db 0 ; callbacks
+
+TrainerPokemaniacAndrew:
+ trainer POKEMANIAC, ANDREW, EVENT_BEAT_POKEMANIAC_ANDREW, PokemaniacAndrewSeenText, PokemaniacAndrewBeatenText, 0, .Script
+
+.Script:
+ endifjustbattled
+ opentext
+ writetext PokemaniacAndrewAfterBattleText
+ waitbutton
+ closetext
+ end
+
+TrainerPokemaniacCalvin:
+ trainer POKEMANIAC, CALVIN, EVENT_BEAT_POKEMANIAC_CALVIN, PokemaniacCalvinSeenText, PokemaniacCalvinBeatenText, 0, .Script
+
+.Script:
+ endifjustbattled
+ opentext
+ writetext PokemaniacCalvinAfterBattleText
+ waitbutton
+ closetext
+ end
+
+TrainerHikerPhillip:
+ trainer HIKER, PHILLIP, EVENT_BEAT_HIKER_PHILLIP, HikerPhillipSeenText, HikerPhillipBeatenText, 0, .Script
+
+.Script:
+ endifjustbattled
+ opentext
+ writetext HikerPhillipAfterBattleText
+ waitbutton
+ closetext
+ end
+
+TrainerHikerLeonard:
+ trainer HIKER, LEONARD, EVENT_BEAT_HIKER_LEONARD, HikerLeonardSeenText, HikerLeonardBeatenText, 0, .Script
+
+.Script:
+ endifjustbattled
+ opentext
+ writetext HikerLeonardAfterBattleText
+ waitbutton
+ closetext
+ end
+
+UnionCaveB1FTMSwift:
+ itemball TM_SWIFT
+
+UnionCaveB1FXDefend:
+ itemball X_DEFEND
+
+UnionCaveB1FBoulder:
+ jumpstd strengthboulder
+
+HikerPhillipSeenText:
+ text "It's been a while"
+ line "since I last saw"
+ cont "another person."
+
+ para "Don't be shy."
+ line "Let's battle!"
+ done
+
+HikerPhillipBeatenText:
+ text "Uurggh…"
+ done
+
+HikerPhillipAfterBattleText:
+ text "I've been lost for"
+ line "a long time…"
+
+ para "I don't mind it"
+ line "here, but I am"
+ cont "soooo hungry!"
+ done
+
+HikerLeonardSeenText:
+ text "What do you know!"
+ line "A visitor!"
+ done
+
+HikerLeonardBeatenText:
+ text "Wahahah! You're a"
+ line "feisty one!"
+ done
+
+HikerLeonardAfterBattleText:
+ text "I live down here."
+
+ para "You can, too, if"
+ line "you'd like."
+
+ para "There's plenty of"
+ line "room, you see."
+ done
+
+PokemaniacAndrewSeenText:
+ text "Who's there?"
+
+ para "Leave me and my"
+ line "#MON alone!"
+ done
+
+PokemaniacAndrewBeatenText:
+ text "Go…"
+ line "Go away!"
+ done
+
+PokemaniacAndrewAfterBattleText:
+ text "Just me and my"
+ line "#MON. I'm de-"
+ cont "lirious with joy."
+ done
+
+PokemaniacCalvinSeenText:
+ text "I came all the way"
+ line "here to conduct my"
+ cont "#MON research."
+
+ para "Let me demonstrate"
+ line "my findings in a"
+ cont "real battle!"
+ done
+
+PokemaniacCalvinBeatenText:
+ text "You demonstrated"
+ line "on me!"
+ done
+
+PokemaniacCalvinAfterBattleText:
+ text "I should compile"
+ line "and announce my"
+ cont "study findings."
+
+ para "I might even be-"
+ line "come famous like"
+ cont "PROF.ELM."
+ done
+
+UnionCaveB1F_MapEvents:
+ db 0, 0 ; filler
+
+ db 5 ; warp events
+ warp_event 3, 3, RUINS_OF_ALPH_OUTSIDE, 7
+ warp_event 3, 11, RUINS_OF_ALPH_OUTSIDE, 8
+ warp_event 7, 19, UNION_CAVE_1F, 1
+ warp_event 3, 33, UNION_CAVE_1F, 2
+ warp_event 17, 31, UNION_CAVE_B2F, 1
+
+ db 0 ; coord events
+
+ db 0 ; bg events
+
+ db 7 ; object events
+ object_event 10, 4, SPRITE_POKEFAN_M, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, PAL_NPC_BROWN, OBJECTTYPE_TRAINER, 1, TrainerHikerPhillip, -1
+ object_event 17, 10, SPRITE_POKEFAN_M, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, PAL_NPC_BROWN, OBJECTTYPE_TRAINER, 3, TrainerHikerLeonard, -1
+ object_event 5, 32, SPRITE_SUPER_NERD, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, PAL_NPC_BLUE, OBJECTTYPE_TRAINER, 3, TrainerPokemaniacAndrew, -1
+ object_event 17, 30, SPRITE_SUPER_NERD, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, PAL_NPC_BLUE, OBJECTTYPE_TRAINER, 3, TrainerPokemaniacCalvin, -1
+ object_event 2, 16, SPRITE_POKE_BALL, SPRITEMOVEDATA_STILL, 0, 0, -1, -1, 0, OBJECTTYPE_ITEMBALL, 0, UnionCaveB1FTMSwift, EVENT_UNION_CAVE_B1F_TM_SWIFT
+ object_event 7, 10, SPRITE_BOULDER, SPRITEMOVEDATA_STRENGTH_BOULDER, 0, 0, -1, -1, 0, OBJECTTYPE_SCRIPT, 0, UnionCaveB1FBoulder, -1
+ object_event 17, 23, SPRITE_POKE_BALL, SPRITEMOVEDATA_STILL, 0, 0, -1, -1, 0, OBJECTTYPE_ITEMBALL, 0, UnionCaveB1FXDefend, EVENT_UNION_CAVE_B1F_X_DEFEND
diff --git a/maps/UnionCaveB2F.asm b/maps/UnionCaveB2F.asm
new file mode 100644
index 00000000..e5e87401
--- /dev/null
+++ b/maps/UnionCaveB2F.asm
@@ -0,0 +1,158 @@
+ const_def 2 ; object constants
+ const UNIONCAVEB2F_ROCKER
+ const UNIONCAVEB2F_COOLTRAINER_F1
+ const UNIONCAVEB2F_COOLTRAINER_F2
+ const UNIONCAVEB2F_POKE_BALL1
+ const UNIONCAVEB2F_POKE_BALL2
+ const UNIONCAVEB2F_LAPRAS
+
+UnionCaveB2F_MapScripts:
+ db 0 ; scene scripts
+
+ db 1 ; callbacks
+ callback MAPCALLBACK_OBJECTS, .Lapras
+
+.Lapras:
+ checkflag ENGINE_UNION_CAVE_LAPRAS
+ iftrue .NoAppear
+ checkcode VAR_WEEKDAY
+ ifequal FRIDAY, .Appear
+.NoAppear:
+ disappear UNIONCAVEB2F_LAPRAS
+ return
+
+.Appear:
+ appear UNIONCAVEB2F_LAPRAS
+ return
+
+UnionCaveLapras:
+ faceplayer
+ cry LAPRAS
+ loadwildmon LAPRAS, 20
+ startbattle
+ disappear UNIONCAVEB2F_LAPRAS
+ setflag ENGINE_UNION_CAVE_LAPRAS
+ reloadmapafterbattle
+ end
+
+TrainerCooltrainermNick:
+ trainer COOLTRAINERM, NICK, EVENT_BEAT_COOLTRAINERM_NICK, CooltrainermNickSeenText, CooltrainermNickBeatenText, 0, .Script
+
+.Script:
+ endifjustbattled
+ opentext
+ writetext CooltrainermNickAfterBattleText
+ waitbutton
+ closetext
+ end
+
+TrainerCooltrainerfGwen:
+ trainer COOLTRAINERF, GWEN, EVENT_BEAT_COOLTRAINERF_GWEN, CooltrainerfGwenSeenText, CooltrainerfGwenBeatenText, 0, .Script
+
+.Script:
+ endifjustbattled
+ opentext
+ writetext CooltrainerfGwenAfterBattleText
+ waitbutton
+ closetext
+ end
+
+TrainerCooltrainerfEmma:
+ trainer COOLTRAINERF, EMMA, EVENT_BEAT_COOLTRAINERF_EMMA, CooltrainerfEmmaSeenText, CooltrainerfEmmaBeatenText, 0, .Script
+
+.Script:
+ endifjustbattled
+ opentext
+ writetext CooltrainerfEmmaAfterBattleText
+ waitbutton
+ closetext
+ end
+
+UnionCaveB2FElixer:
+ itemball ELIXER
+
+UnionCaveB2FHyperPotion:
+ itemball HYPER_POTION
+
+CooltrainermNickSeenText:
+ text "There are two"
+ line "kinds of people."
+
+ para "Those who have"
+ line "style, and those"
+ cont "who don't."
+
+ para "What kind of"
+ line "person are you?"
+ done
+
+CooltrainermNickBeatenText:
+ text "You've got"
+ line "dazzling style!"
+ done
+
+CooltrainermNickAfterBattleText:
+ text "Your #MON style"
+ line "is stunning and"
+ cont "colorful, I admit."
+
+ para "You'll just keep"
+ line "getting better!"
+ done
+
+CooltrainerfGwenSeenText:
+ text "I'm in training."
+ line "Care for a round?"
+ done
+
+CooltrainerfGwenBeatenText:
+ text "Aww, no! You're"
+ line "too good for me."
+ done
+
+CooltrainerfGwenAfterBattleText:
+ text "I'm going to train"
+ line "by myself until I"
+ cont "improve."
+ done
+
+CooltrainerfEmmaSeenText:
+ text "If the #MON I"
+ line "liked were there,"
+ cont "I'd go anywhere."
+
+ para "That's what a real"
+ line "trainer does."
+ done
+
+CooltrainerfEmmaBeatenText:
+ text "I'd rather pet my"
+ line "babies than this!"
+ done
+
+CooltrainerfEmmaAfterBattleText:
+ text "Just once a week,"
+ line "a #MON comes to"
+ cont "the water's edge."
+
+ para "I wanted to see"
+ line "that #MON…"
+ done
+
+UnionCaveB2F_MapEvents:
+ db 0, 0 ; filler
+
+ db 1 ; warp events
+ warp_event 5, 3, UNION_CAVE_B1F, 5
+
+ db 0 ; coord events
+
+ db 0 ; bg events
+
+ db 6 ; object events
+ object_event 17, 23, SPRITE_ROCKER, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, PAL_NPC_RED, OBJECTTYPE_TRAINER, 5, TrainerCooltrainermNick, -1
+ object_event 5, 13, SPRITE_COOLTRAINER_F, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, PAL_NPC_RED, OBJECTTYPE_TRAINER, 1, TrainerCooltrainerfGwen, -1
+ object_event 3, 28, SPRITE_COOLTRAINER_F, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, PAL_NPC_RED, OBJECTTYPE_TRAINER, 2, TrainerCooltrainerfEmma, -1
+ object_event 16, 2, SPRITE_POKE_BALL, SPRITEMOVEDATA_STILL, 0, 0, -1, -1, 0, OBJECTTYPE_ITEMBALL, 0, UnionCaveB2FElixer, EVENT_UNION_CAVE_B2F_ELIXER
+ object_event 12, 19, SPRITE_POKE_BALL, SPRITEMOVEDATA_STILL, 0, 0, -1, -1, 0, OBJECTTYPE_ITEMBALL, 0, UnionCaveB2FHyperPotion, EVENT_UNION_CAVE_B2F_HYPER_POTION
+ object_event 11, 31, SPRITE_SURF, SPRITEMOVEDATA_SWIM_WANDER, 1, 1, -1, -1, PAL_NPC_BLUE, OBJECTTYPE_SCRIPT, 0, UnionCaveLapras, EVENT_UNION_CAVE_B2F_LAPRAS