summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xengine/specials.asm4
-rw-r--r--main.asm11
-rw-r--r--maps/AzaleaGym.asm380
-rw-r--r--maps/AzaleaMart.asm60
-rw-r--r--maps/AzaleaPokecenter1F.asm81
-rw-r--r--maps/CharcoalKiln.asm166
-rw-r--r--maps/KurtsHouse.asm497
7 files changed, 1191 insertions, 8 deletions
diff --git a/engine/specials.asm b/engine/specials.asm
index c5fd6b7b..c005455e 100755
--- a/engine/specials.asm
+++ b/engine/specials.asm
@@ -552,13 +552,13 @@ FadeOutMusic: ; c628 (3:4628)
ld [wMusicFade], a
ret
-Functionc638: ; c638 (3:4638)
+Diploma: ; c638 (3:4638)
call FadeToMenu
callba Functione0002
call ExitAllMenus
ret
-Functionc645: ; c645 (3:4645)
+PrintDiploma: ; c645 (3:4645)
call FadeToMenu
callba Function84684
call ExitAllMenus
diff --git a/main.asm b/main.asm
index 788ce84b..253b0df6 100644
--- a/main.asm
+++ b/main.asm
@@ -1774,12 +1774,11 @@ INCLUDE "maps/PowerPlant.asm"
INCLUDE "maps/BillsHouse.asm"
SECTION "bank55", ROMX, BANK[$55]
-;INCLUDE "maps/AzaleaPokecenter1F.asm"
-;INCLUDE "maps/CharcoalKiln.asm"
-;INCLUDE "maps/AzaleaMart.asm"
-;INCLUDE "maps/KurtsHouse.asm"
-;INCLUDE "maps/AzaleaGym.asm"
- dr $154000, $158000
+INCLUDE "maps/AzaleaPokecenter1F.asm"
+INCLUDE "maps/CharcoalKiln.asm"
+INCLUDE "maps/AzaleaMart.asm"
+INCLUDE "maps/KurtsHouse.asm"
+INCLUDE "maps/AzaleaGym.asm"
SECTION "bank56", ROMX, BANK[$56]
;INCLUDE "maps/VioletMart.asm"
diff --git a/maps/AzaleaGym.asm b/maps/AzaleaGym.asm
new file mode 100644
index 00000000..a79efc76
--- /dev/null
+++ b/maps/AzaleaGym.asm
@@ -0,0 +1,380 @@
+ const_def 2 ; object constants
+ const AZALEAGYM_BUGSY
+ const AZALEAGYM_BUG_CATCHER1
+ const AZALEAGYM_BUG_CATCHER2
+ const AZALEAGYM_BUG_CATCHER3
+ const AZALEAGYM_TWIN1
+ const AZALEAGYM_TWIN2
+ const AZALEAGYM_GYM_GUY
+
+AzaleaGym_MapScripts:
+ db 0 ; scene scripts
+
+ db 0 ; callbacks
+
+AzaleaGymBugsyScript:
+ faceplayer
+ opentext
+ checkevent EVENT_BEAT_BUGSY
+ iftrue .FightDone
+ writetext BugsyText_INeverLose
+ waitbutton
+ closetext
+ winlosstext BugsyText_ResearchIncomplete, 0
+ loadtrainer BUGSY, BUGSY1
+ startbattle
+ reloadmapafterbattle
+ setevent EVENT_BEAT_BUGSY
+ opentext
+ writetext Text_ReceivedHiveBadge
+ playsound SFX_GET_BADGE
+ waitsfx
+ setflag ENGINE_HIVEBADGE
+ checkcode VAR_BADGES
+ scall AzaleaGymActivateRockets
+.FightDone:
+ checkevent EVENT_GOT_TM49_FURY_CUTTER
+ iftrue .GotFuryCutter
+ setevent EVENT_BEAT_TWINS_AMY_AND_MAY
+ setevent EVENT_BEAT_BUG_CATCHER_BENNY
+ setevent EVENT_BEAT_BUG_CATCHER_AL
+ setevent EVENT_BEAT_BUG_CATCHER_JOSH
+ writetext BugsyText_HiveBadgeSpeech
+ buttonsound
+ verbosegiveitem TM_FURY_CUTTER
+ iffalse .NoRoomForFuryCutter
+ setevent EVENT_GOT_TM49_FURY_CUTTER
+ writetext BugsyText_FuryCutterSpeech
+ waitbutton
+ closetext
+ end
+
+.GotFuryCutter:
+ writetext BugsyText_BugMonsAreDeep
+ waitbutton
+.NoRoomForFuryCutter:
+ closetext
+ end
+
+AzaleaGymActivateRockets:
+ ifequal 7, .RadioTowerRockets
+ ifequal 6, .GoldenrodRockets
+ end
+
+.GoldenrodRockets:
+ jumpstd goldenrodrockets
+
+.RadioTowerRockets:
+ jumpstd radiotowerrockets
+
+TrainerTwinsAmyandmay1:
+ trainer TWINS, AMYANDMAY1, EVENT_BEAT_TWINS_AMY_AND_MAY, TwinsAmyandmay1SeenText, TwinsAmyandmay1BeatenText, 0, .AfterScript
+
+.AfterScript:
+ endifjustbattled
+ opentext
+ writetext TwinsAmyandmay1AfterBattleText
+ waitbutton
+ closetext
+ end
+
+TrainerTwinsAmyandmay2:
+ trainer TWINS, AMYANDMAY2, EVENT_BEAT_TWINS_AMY_AND_MAY, TwinsAmyandmay2SeenText, TwinsAmyandmay2BeatenText, 0, .AfterScript
+
+.AfterScript:
+ endifjustbattled
+ opentext
+ writetext TwinsAmyandmay2AfterBattleText
+ waitbutton
+ closetext
+ end
+
+TrainerBugCatcherBenny:
+ trainer BUG_CATCHER, BUG_CATCHER_BENNY, EVENT_BEAT_BUG_CATCHER_BENNY, BugCatcherBennySeenText, BugCatcherBennyBeatenText, 0, .AfterScript
+
+.AfterScript:
+ endifjustbattled
+ opentext
+ writetext BugCatcherBennyAfterBattleText
+ waitbutton
+ closetext
+ end
+
+TrainerBugCatcherAl:
+ trainer BUG_CATCHER, AL, EVENT_BEAT_BUG_CATCHER_AL, BugCatcherAlSeenText, BugCatcherAlBeatenText, 0, .AfterScript
+
+.AfterScript:
+ endifjustbattled
+ opentext
+ writetext BugCatcherAlAfterBattleText
+ waitbutton
+ closetext
+ end
+
+TrainerBugCatcherJosh:
+ trainer BUG_CATCHER, JOSH, EVENT_BEAT_BUG_CATCHER_JOSH, BugCatcherJoshSeenText, BugCatcherJoshBeatenText, 0, .AfterScript
+
+.AfterScript:
+ endifjustbattled
+ opentext
+ writetext BugCatcherJoshAfterBattleText
+ waitbutton
+ closetext
+ end
+
+AzaleaGymGuyScript:
+ faceplayer
+ checkevent EVENT_BEAT_BUGSY
+ iftrue .AzaleaGymGuyWinScript
+ opentext
+ writetext AzaleaGymGuyText
+ waitbutton
+ closetext
+ end
+
+.AzaleaGymGuyWinScript:
+ opentext
+ writetext AzaleaGymGuyWinText
+ waitbutton
+ closetext
+ end
+
+AzaleaGymStatue:
+ checkflag ENGINE_HIVEBADGE
+ iftrue .Beaten
+ jumpstd gymstatue1
+.Beaten:
+ trainertotext BUGSY, BUGSY1, MEM_BUFFER_1
+ jumpstd gymstatue2
+
+BugsyText_INeverLose:
+ text "I'm BUGSY!"
+ line "I never lose when"
+
+ para "it comes to bug"
+ line "#MON."
+
+ para "My research is"
+ line "going to make me"
+
+ para "the authority on"
+ line "bug #MON!"
+
+ para "Let me demonstrate"
+ line "what I've learned"
+ cont "from my studies."
+ done
+
+BugsyText_ResearchIncomplete:
+ text "Whoa, amazing!"
+ line "You're an expert"
+ cont "on #MON!"
+
+ para "My research isn't"
+ line "complete yet."
+
+ para "OK, you win. Take"
+ line "this BADGE."
+ done
+
+Text_ReceivedHiveBadge:
+ text "<PLAYER> received"
+ line "HIVEBADGE."
+ done
+
+BugsyText_HiveBadgeSpeech:
+ text "Do you know the"
+ line "benefits of HIVE-"
+ cont "BADGE?"
+
+ para "If you have it,"
+ line "#MON up to L30"
+ cont "will obey you."
+
+ para "#MON that know"
+ line "CUT will be able"
+
+ para "to use it outside"
+ line "of battle too."
+
+ para "Here, I also want"
+ line "you to have this."
+ done
+
+BugsyText_FuryCutterSpeech:
+ text "TM49 contains"
+ line "FURY CUTTER."
+
+ para "If you don't miss,"
+ line "it gets stronger"
+ cont "every turn."
+
+ para "The longer your"
+ line "battle goes, the"
+ cont "better it gets."
+
+ para "Isn't that great?"
+ line "I discovered it!"
+ done
+
+BugsyText_BugMonsAreDeep:
+ text "Bug #MON are"
+ line "deep. There are"
+
+ para "many mysteries to"
+ line "be explored."
+
+ para "Study your favor-"
+ line "ites thoroughly."
+ done
+
+BugCatcherBennySeenText:
+ text "Bug #MON evolve"
+ line "young. So they get"
+
+ para "stronger that much"
+ line "faster."
+ done
+
+BugCatcherBennyBeatenText:
+ text "Just evolving"
+ line "isn't enough!"
+ done
+
+BugCatcherBennyAfterBattleText:
+ text "#MON become"
+ line "stronger if they"
+ cont "evolve. Really!"
+ done
+
+BugCatcherAlSeenText:
+ text "Bug #MON are"
+ line "cool and tough!"
+
+ para "I'll prove it to"
+ line "you!"
+ done
+
+BugCatcherAlBeatenText:
+ text "You proved how"
+ line "tough you are…"
+ done
+
+BugCatcherAlAfterBattleText:
+ text "They're so cool,"
+ line "but most girls"
+
+ para "don't like bug"
+ line "#MON."
+
+ para "I don't know why…"
+ done
+
+BugCatcherJoshSeenText:
+ text "You saved all the"
+ line "SLOWPOKE? Whew,"
+ cont "you're mighty!"
+
+ para "But my grown-up"
+ line "#MON are pretty"
+ cont "tough too!"
+ done
+
+BugCatcherJoshBeatenText:
+ text "Urrgggh!"
+ done
+
+BugCatcherJoshAfterBattleText:
+ text "I guess I should"
+ line "teach them better"
+ cont "moves…"
+ done
+
+TwinsAmyandmay1SeenText:
+ text "AMY: Hi! Are you"
+ line "challenging the"
+ cont "LEADER? No way!"
+ done
+
+TwinsAmyandmay1BeatenText:
+ text "AMY & MAY: Oh,"
+ line "double goodness!"
+ done
+
+TwinsAmyandmay1AfterBattleText:
+ text "AMY: You're"
+ line "really strong!"
+ done
+
+TwinsAmyandmay2SeenText:
+ text "MAY: You want to"
+ line "see the LEADER?"
+ cont "We come first!"
+ done
+
+TwinsAmyandmay2BeatenText:
+ text "AMY & MAY: Oh,"
+ line "double goodness!"
+ done
+
+TwinsAmyandmay2AfterBattleText:
+ text "MAY: Our bug #-"
+ line "MON lost! Oh, what"
+ cont "a shame."
+ done
+
+AzaleaGymGuyText:
+ text "Yo, challenger!"
+
+ para "BUGSY's young, but"
+ line "his knowledge of"
+
+ para "bug #MON is for"
+ line "real."
+
+ para "It's going to be"
+ line "tough without my"
+ cont "advice."
+
+ para "Let's see… Bug"
+ line "#MON don't like"
+ cont "fire."
+
+ para "Flying-type moves"
+ line "are super-effec-"
+ cont "tive too."
+ done
+
+AzaleaGymGuyWinText:
+ text "Well done! That"
+ line "was a great clash"
+
+ para "of talented young"
+ line "trainers."
+
+ para "With people like"
+ line "you, the future of"
+ cont "#MON is bright!"
+ done
+
+AzaleaGym_MapEvents:
+ db 0, 0 ; filler
+
+ db 2 ; warp events
+ warp_event 4, 15, AZALEA_TOWN, 5
+ warp_event 5, 15, AZALEA_TOWN, 5
+
+ db 0 ; coord events
+
+ db 2 ; bg events
+ bg_event 3, 13, BGEVENT_READ, AzaleaGymStatue
+ bg_event 6, 13, BGEVENT_READ, AzaleaGymStatue
+
+ db 7 ; object events
+ object_event 5, 7, SPRITE_BUGSY, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, PAL_NPC_GREEN, OBJECTTYPE_SCRIPT, 0, AzaleaGymBugsyScript, -1
+ object_event 5, 3, SPRITE_BUG_CATCHER, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, PAL_NPC_BROWN, OBJECTTYPE_TRAINER, 2, TrainerBugCatcherBenny, -1
+ object_event 8, 8, SPRITE_BUG_CATCHER, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, PAL_NPC_BROWN, OBJECTTYPE_TRAINER, 3, TrainerBugCatcherAl, -1
+ object_event 0, 2, SPRITE_BUG_CATCHER, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, PAL_NPC_BROWN, OBJECTTYPE_TRAINER, 3, TrainerBugCatcherJosh, -1
+ object_event 4, 10, SPRITE_TWIN, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, PAL_NPC_RED, OBJECTTYPE_TRAINER, 1, TrainerTwinsAmyandmay1, -1
+ object_event 5, 10, SPRITE_TWIN, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, PAL_NPC_RED, OBJECTTYPE_TRAINER, 1, TrainerTwinsAmyandmay2, -1
+ object_event 7, 13, SPRITE_GYM_GUY, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, PAL_NPC_RED, OBJECTTYPE_SCRIPT, 0, AzaleaGymGuyScript, -1
diff --git a/maps/AzaleaMart.asm b/maps/AzaleaMart.asm
new file mode 100644
index 00000000..c98ff31a
--- /dev/null
+++ b/maps/AzaleaMart.asm
@@ -0,0 +1,60 @@
+ const_def 2 ; object constants
+ const AZALEAMART_CLERK
+ const AZALEAMART_COOLTRAINER_M
+ const AZALEAMART_BUG_CATCHER
+
+AzaleaMart_MapScripts:
+ db 0 ; scene scripts
+
+ db 0 ; callbacks
+
+AzaleaMartClerkScript:
+ opentext
+ pokemart MARTTYPE_STANDARD, MART_AZALEA
+ closetext
+ end
+
+AzaleaMartCooltrainerMScript:
+ jumptextfaceplayer AzaleaMartCooltrainerMText
+
+AzaleaMartBugCatcherScript:
+ jumptextfaceplayer AzaleaMartBugCatcherText
+
+AzaleaMartCooltrainerMText:
+ text "There's no GREAT"
+ line "BALL here. #"
+
+ para "BALLS will have"
+ line "to do."
+
+ para "I wish KURT would"
+ line "make me some of"
+ cont "his custom BALLS."
+ done
+
+AzaleaMartBugCatcherText:
+ text "A GREAT BALL is"
+ line "better for catch-"
+ cont "ing #MON than a"
+ cont "# BALL."
+
+ para "But KURT's might"
+ line "be better some-"
+ cont "times."
+ done
+
+AzaleaMart_MapEvents:
+ db 0, 0 ; filler
+
+ db 2 ; warp events
+ warp_event 2, 7, AZALEA_TOWN, 3
+ warp_event 3, 7, AZALEA_TOWN, 3
+
+ db 0 ; coord events
+
+ db 0 ; bg events
+
+ db 3 ; object events
+ object_event 1, 3, SPRITE_CLERK, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, OBJECTTYPE_SCRIPT, 0, AzaleaMartClerkScript, -1
+ object_event 2, 5, SPRITE_COOLTRAINER_M, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, 0, OBJECTTYPE_SCRIPT, 0, AzaleaMartCooltrainerMScript, -1
+ object_event 7, 2, SPRITE_BUG_CATCHER, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 2, 0, -1, -1, PAL_NPC_RED, OBJECTTYPE_SCRIPT, 0, AzaleaMartBugCatcherScript, -1
diff --git a/maps/AzaleaPokecenter1F.asm b/maps/AzaleaPokecenter1F.asm
new file mode 100644
index 00000000..27b5ff1d
--- /dev/null
+++ b/maps/AzaleaPokecenter1F.asm
@@ -0,0 +1,81 @@
+ const_def 2 ; object constants
+ const AZALEAPOKECENTER1F_NURSE
+ const AZALEAPOKECENTER1F_GENTLEMAN
+ const AZALEAPOKECENTER1F_FISHING_GURU
+ const AZALEAPOKECENTER1F_POKEFAN_F
+
+AzaleaPokecenter1F_MapScripts:
+ db 1 ; scene scripts
+ scene_script .DummyScene
+
+ db 0 ; callbacks
+
+.DummyScene:
+ end
+
+AzaleaPokecenter1FNurseScript:
+ jumpstd pokecenternurse
+
+AzaleaPokecenter1FGentlemanScript:
+ jumptextfaceplayer AzaleaPokecenter1FGentlemanText
+
+AzaleaPokecenter1FFishingGuruScript:
+ jumptextfaceplayer AzaleaPokecenter1FFishingGuruText
+
+AzaleaPokecenter1FPokefanFScript:
+ jumptextfaceplayer AzaleaPokecenter1FPokefanFText
+
+AzaleaPokecenter1FGentlemanText:
+ text "Do your #MON"
+ line "know HM moves?"
+
+ para "Those moves can"
+ line "be used even if"
+
+ para "your #MON has"
+ line "fainted."
+ done
+
+AzaleaPokecenter1FFishingGuruText:
+ text "BILL's PC can"
+ line "store up to 20"
+ cont "#MON per BOX."
+ done
+
+AzaleaPokecenter1FPokefanFText:
+ text "Do you know about"
+ line "APRICORNS?"
+
+ para "Crack one open,"
+ line "hollow it out and"
+
+ para "fit it with a"
+ line "special device."
+
+ para "Then you can catch"
+ line "#MON with it."
+
+ para "Before # BALLS"
+ line "were invented,"
+
+ para "everyone used"
+ line "APRICORNS."
+ done
+
+AzaleaPokecenter1F_MapEvents:
+ db 0, 0 ; filler
+
+ db 3 ; warp events
+ warp_event 3, 7, AZALEA_TOWN, 1
+ warp_event 4, 7, AZALEA_TOWN, 1
+ warp_event 0, 7, POKECENTER_2F, 1
+
+ db 0 ; coord events
+
+ db 0 ; bg events
+
+ db 4 ; object events
+ object_event 3, 1, SPRITE_NURSE, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, OBJECTTYPE_SCRIPT, 0, AzaleaPokecenter1FNurseScript, -1
+ object_event 9, 6, SPRITE_GENTLEMAN, SPRITEMOVEDATA_WALK_UP_DOWN, 0, 1, -1, -1, 0, OBJECTTYPE_SCRIPT, 0, AzaleaPokecenter1FGentlemanScript, -1
+ object_event 6, 1, SPRITE_FISHING_GURU, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, OBJECTTYPE_SCRIPT, 0, AzaleaPokecenter1FFishingGuruScript, -1
+ object_event 1, 4, SPRITE_POKEFAN_F, SPRITEMOVEDATA_WANDER, 1, 2, -1, -1, 0, OBJECTTYPE_SCRIPT, 0, AzaleaPokecenter1FPokefanFScript, -1
diff --git a/maps/CharcoalKiln.asm b/maps/CharcoalKiln.asm
new file mode 100644
index 00000000..dda28937
--- /dev/null
+++ b/maps/CharcoalKiln.asm
@@ -0,0 +1,166 @@
+ const_def 2 ; object constants
+ const CHARCOALKILN_BLACK_BELT
+ const CHARCOALKILN_YOUNGSTER
+ const CHARCOALKILN_MOLTRES
+
+CharcoalKiln_MapScripts:
+ db 0 ; scene scripts
+
+ db 0 ; callbacks
+
+CharcoalKilnBoss:
+ faceplayer
+ opentext
+ checkevent EVENT_GOT_HM01_CUT
+ iftrue .GotCut
+ checkevent EVENT_CLEARED_SLOWPOKE_WELL
+ iftrue .SavedSlowpoke
+ writetext CharcoalKilnBossText1
+ waitbutton
+ closetext
+ end
+
+.SavedSlowpoke:
+ writetext CharcoalKilnBossText2
+ waitbutton
+ closetext
+ end
+
+.GotCut:
+ writetext CharcoalKilnBossText3
+ waitbutton
+ closetext
+ end
+
+CharcoalKilnApprentice:
+ faceplayer
+ opentext
+ checkevent EVENT_GOT_CHARCOAL_IN_CHARCOAL_KILN
+ iftrue .YoureTheCoolest
+ checkevent EVENT_GOT_HM01_CUT
+ iftrue .Thanks
+ writetext CharcoalKilnApprenticeText1
+ waitbutton
+ closetext
+ end
+
+.Thanks:
+ writetext CharcoalKilnApprenticeText2
+ buttonsound
+ verbosegiveitem CHARCOAL
+ iffalse .Done
+ setevent EVENT_GOT_CHARCOAL_IN_CHARCOAL_KILN
+ closetext
+ end
+
+.YoureTheCoolest:
+ writetext CharcoalKilnApprenticeText3
+ waitbutton
+.Done:
+ closetext
+ end
+
+CharcoalKilnFarfetchd:
+ faceplayer
+ opentext
+ writetext FarfetchdText
+ cry FARFETCH_D
+ waitbutton
+ closetext
+ end
+
+CharcoalKilnBookshelf:
+ jumpstd magazinebookshelf
+
+CharcoalKilnRadio:
+ jumpstd radio2
+
+CharcoalKilnBossText1:
+ text "All the SLOWPOKE"
+ line "have disappeared"
+ cont "from the town."
+
+ para "The forest's pro-"
+ line "tector may be"
+ cont "angry with us…"
+
+ para "It may be a bad"
+ line "omen. We should"
+ cont "stay in."
+ done
+
+CharcoalKilnBossText2:
+ text "The SLOWPOKE have"
+ line "returned…"
+
+ para "But my APPRENTICE"
+ line "hasn't come back"
+ cont "from ILEX FOREST."
+
+ para "Where in the world"
+ line "is that lazy guy?"
+ done
+
+CharcoalKilnBossText3:
+ text "You chased off"
+ line "TEAM ROCKET and"
+
+ para "went to ILEX"
+ line "FOREST alone?"
+
+ para "That takes guts!"
+ line "I like that. Come"
+ cont "train with us."
+ done
+
+CharcoalKilnApprenticeText1:
+ text "Where have all the"
+ line "SLOWPOKE gone?"
+
+ para "Are they out play-"
+ line "ing somewhere?"
+ done
+
+CharcoalKilnApprenticeText2:
+ text "I'm sorry--I for-"
+ line "got to thank you."
+
+ para "This is CHARCOAL"
+ line "that I made."
+
+ para "Fire-type #MON"
+ line "would be happy to"
+ cont "hold that."
+ done
+
+CharcoalKilnApprenticeText3:
+ text "The SLOWPOKE came"
+ line "back, and you even"
+ cont "found FARFETCH'D."
+
+ para "You're the cool-"
+ line "est, man!"
+ done
+
+FarfetchdText:
+ text "FARFETCH'D: Kwaa!"
+ done
+
+CharcoalKiln_MapEvents:
+ db 0, 0 ; filler
+
+ db 2 ; warp events
+ warp_event 2, 7, AZALEA_TOWN, 2
+ warp_event 3, 7, AZALEA_TOWN, 2
+
+ db 0 ; coord events
+
+ db 3 ; bg events
+ bg_event 0, 1, BGEVENT_READ, CharcoalKilnBookshelf
+ bg_event 1, 1, BGEVENT_READ, CharcoalKilnBookshelf
+ bg_event 7, 1, BGEVENT_READ, CharcoalKilnRadio
+
+ db 3 ; object events
+ object_event 2, 3, SPRITE_BLACK_BELT, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, 0, OBJECTTYPE_SCRIPT, 0, CharcoalKilnBoss, EVENT_CHARCOAL_KILN_BOSS
+ object_event 5, 3, SPRITE_YOUNGSTER, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, 0, OBJECTTYPE_SCRIPT, 0, CharcoalKilnApprentice, EVENT_CHARCOAL_KILN_APPRENTICE
+ object_event 5, 6, SPRITE_MOLTRES, SPRITEMOVEDATA_POKEMON, 2, 2, -1, -1, PAL_NPC_BROWN, OBJECTTYPE_SCRIPT, 0, CharcoalKilnFarfetchd, EVENT_CHARCOAL_KILN_FARFETCH_D
diff --git a/maps/KurtsHouse.asm b/maps/KurtsHouse.asm
new file mode 100644
index 00000000..df26a5fc
--- /dev/null
+++ b/maps/KurtsHouse.asm
@@ -0,0 +1,497 @@
+ const_def 2 ; object constants
+ const KURTSHOUSE_KURT1
+ const KURTSHOUSE_TWIN1
+ const KURTSHOUSE_SLOWPOKE
+ const KURTSHOUSE_KURT2
+ const KURTSHOUSE_TWIN2
+
+KurtsHouse_MapScripts:
+ db 0 ; scene scripts
+
+ db 1 ; callbacks
+ callback MAPCALLBACK_OBJECTS, .KurtCallback
+
+.KurtCallback:
+ checkevent EVENT_CLEARED_SLOWPOKE_WELL
+ iffalse .Done
+ checkflag ENGINE_KURT_MAKING_BALLS
+ iftrue .MakingBalls
+ disappear KURTSHOUSE_KURT2
+ appear KURTSHOUSE_KURT1
+ return
+
+.MakingBalls:
+ disappear KURTSHOUSE_KURT1
+ appear KURTSHOUSE_KURT2
+.Done:
+ return
+
+Kurt1:
+ faceplayer
+ opentext
+ checkevent EVENT_KURT_GAVE_YOU_LURE_BALL
+ iftrue .GotLureBall
+ checkevent EVENT_CLEARED_SLOWPOKE_WELL
+ iftrue .ClearedSlowpokeWell
+ writetext UnknownText_0x18e473
+ waitbutton
+ closetext
+ special FadeOutMusic
+ setevent EVENT_AZALEA_TOWN_SLOWPOKETAIL_ROCKET
+ checkcode VAR_FACING
+ ifequal UP, .RunAround
+ turnobject PLAYER, DOWN
+ playsound SFX_FLY
+ applymovement KURTSHOUSE_KURT1, MovementData_0x18e466
+ playsound SFX_EXIT_BUILDING
+ disappear KURTSHOUSE_KURT1
+ waitsfx
+ special RestartMapMusic
+ end
+
+.RunAround:
+ turnobject PLAYER, DOWN
+ playsound SFX_FLY
+ applymovement KURTSHOUSE_KURT1, MovementData_0x18e46c
+ playsound SFX_EXIT_BUILDING
+ disappear KURTSHOUSE_KURT1
+ waitsfx
+ special RestartMapMusic
+ end
+
+.ClearedSlowpokeWell:
+ writetext UnknownText_0x18e615
+ buttonsound
+ verbosegiveitem LURE_BALL
+ iffalse .NoRoomForBall
+ setevent EVENT_KURT_GAVE_YOU_LURE_BALL
+.GotLureBall:
+ checkevent EVENT_TEMPORARY_UNTIL_MAP_RELOAD_2
+ iftrue .ThatTurnedOutGreat
+ checkevent EVENT_TEMPORARY_UNTIL_MAP_RELOAD_1
+ iftrue .WaitForApricorns
+ checkevent EVENT_GAVE_KURT_RED_APRICORN
+ iftrue .GiveLevelBall
+ checkevent EVENT_GAVE_KURT_BLU_APRICORN
+ iftrue .GiveLureBall
+ checkevent EVENT_GAVE_KURT_YLW_APRICORN
+ iftrue .GiveMoonBall
+ checkevent EVENT_GAVE_KURT_GRN_APRICORN
+ iftrue .GiveFriendBall
+ checkevent EVENT_GAVE_KURT_WHT_APRICORN
+ iftrue .GiveFastBall
+ checkevent EVENT_GAVE_KURT_BLK_APRICORN
+ iftrue .GiveHeavyBall
+ checkevent EVENT_GAVE_KURT_PNK_APRICORN
+ iftrue .GiveLoveBall
+ writetext UnknownText_0x18e6c9
+ buttonsound
+.CheckApricorns:
+ checkitem RED_APRICORN
+ iftrue .AskApricorn
+ checkitem BLU_APRICORN
+ iftrue .AskApricorn
+ checkitem YLW_APRICORN
+ iftrue .AskApricorn
+ checkitem GRN_APRICORN
+ iftrue .AskApricorn
+ checkitem WHT_APRICORN
+ iftrue .AskApricorn
+ checkitem BLK_APRICORN
+ iftrue .AskApricorn
+ checkitem PNK_APRICORN
+ iftrue .AskApricorn
+ closetext
+ end
+
+.AskApricorn:
+ writetext UnknownText_0x18e736
+ buttonsound
+ special SelectApricornForKurt
+ ifequal FALSE, .Cancel
+ ifequal BLU_APRICORN, .Blu
+ ifequal YLW_APRICORN, .Ylw
+ ifequal GRN_APRICORN, .Grn
+ ifequal WHT_APRICORN, .Wht
+ ifequal BLK_APRICORN, .Blk
+ ifequal PNK_APRICORN, .Pnk
+; .Red
+ setevent EVENT_GAVE_KURT_RED_APRICORN
+ jump .GaveKurtApricorns
+
+.Blu:
+ setevent EVENT_GAVE_KURT_BLU_APRICORN
+ jump .GaveKurtApricorns
+
+.Ylw:
+ setevent EVENT_GAVE_KURT_YLW_APRICORN
+ jump .GaveKurtApricorns
+
+.Grn:
+ setevent EVENT_GAVE_KURT_GRN_APRICORN
+ jump .GaveKurtApricorns
+
+.Wht:
+ setevent EVENT_GAVE_KURT_WHT_APRICORN
+ jump .GaveKurtApricorns
+
+.Blk:
+ setevent EVENT_GAVE_KURT_BLK_APRICORN
+ jump .GaveKurtApricorns
+
+.Pnk:
+ setevent EVENT_GAVE_KURT_PNK_APRICORN
+ jump .GaveKurtApricorns
+
+.GaveKurtApricorns:
+ setevent EVENT_TEMPORARY_UNTIL_MAP_RELOAD_1
+ setflag ENGINE_KURT_MAKING_BALLS
+.WaitForApricorns:
+ writetext UnknownText_0x18e779
+ waitbutton
+ closetext
+ end
+
+.Cancel:
+ writetext UnknownText_0x18e7bc
+ waitbutton
+ closetext
+ end
+
+.KurtMakingBallsScript:
+ writetext UnknownText_0x18e7d8
+ waitbutton
+ closetext
+ end
+
+._ThatTurnedOutGreat:
+ setevent EVENT_TEMPORARY_UNTIL_MAP_RELOAD_2
+.ThatTurnedOutGreat:
+ writetext UnknownText_0x18e82a
+ waitbutton
+.NoRoomForBall:
+ closetext
+ end
+
+.GiveLevelBall:
+ checkflag ENGINE_KURT_MAKING_BALLS
+ iftrue .KurtMakingBallsScript
+ writetext UnknownText_0x18e7fb
+ buttonsound
+ verbosegiveitem LEVEL_BALL
+ iffalse .NoRoomForBall
+ clearevent EVENT_GAVE_KURT_RED_APRICORN
+ jump ._ThatTurnedOutGreat
+
+.GiveLureBall:
+ checkflag ENGINE_KURT_MAKING_BALLS
+ iftrue .KurtMakingBallsScript
+ writetext UnknownText_0x18e7fb
+ buttonsound
+ verbosegiveitem LURE_BALL
+ iffalse .NoRoomForBall
+ clearevent EVENT_GAVE_KURT_BLU_APRICORN
+ jump ._ThatTurnedOutGreat
+
+.GiveMoonBall:
+ checkflag ENGINE_KURT_MAKING_BALLS
+ iftrue .KurtMakingBallsScript
+ writetext UnknownText_0x18e7fb
+ buttonsound
+ verbosegiveitem MOON_BALL
+ iffalse .NoRoomForBall
+ clearevent EVENT_GAVE_KURT_YLW_APRICORN
+ jump ._ThatTurnedOutGreat
+
+.GiveFriendBall:
+ checkflag ENGINE_KURT_MAKING_BALLS
+ iftrue .KurtMakingBallsScript
+ writetext UnknownText_0x18e7fb
+ buttonsound
+ verbosegiveitem FRIEND_BALL
+ iffalse .NoRoomForBall
+ clearevent EVENT_GAVE_KURT_GRN_APRICORN
+ jump ._ThatTurnedOutGreat
+
+.GiveFastBall:
+ checkflag ENGINE_KURT_MAKING_BALLS
+ iftrue .KurtMakingBallsScript
+ writetext UnknownText_0x18e7fb
+ buttonsound
+ verbosegiveitem FAST_BALL
+ iffalse .NoRoomForBall
+ clearevent EVENT_GAVE_KURT_WHT_APRICORN
+ jump ._ThatTurnedOutGreat
+
+.GiveHeavyBall:
+ checkflag ENGINE_KURT_MAKING_BALLS
+ iftrue .KurtMakingBallsScript
+ writetext UnknownText_0x18e7fb
+ buttonsound
+ verbosegiveitem HEAVY_BALL
+ iffalse .NoRoomForBall
+ clearevent EVENT_GAVE_KURT_BLK_APRICORN
+ jump ._ThatTurnedOutGreat
+
+.GiveLoveBall:
+ checkflag ENGINE_KURT_MAKING_BALLS
+ iftrue .KurtMakingBallsScript
+ writetext UnknownText_0x18e7fb
+ buttonsound
+ verbosegiveitem LOVE_BALL
+ iffalse .NoRoomForBall
+ clearevent EVENT_GAVE_KURT_PNK_APRICORN
+ jump ._ThatTurnedOutGreat
+
+KurtsGranddaughter:
+ faceplayer
+ opentext
+ checkevent EVENT_FAST_SHIP_FIRST_TIME
+ iftrue .Dad
+ checkevent EVENT_CLEARED_SLOWPOKE_WELL
+ iftrue .SlowpokeBack
+ checkevent EVENT_AZALEA_TOWN_SLOWPOKETAIL_ROCKET
+ iftrue .Lonely
+ writetext KurtsGranddaughterSlowpokeGoneText
+ waitbutton
+ closetext
+ end
+
+.SlowpokeBack:
+ writetext KurtsGranddaughterSlowpokeBackText
+ waitbutton
+ closetext
+ end
+
+.Lonely:
+ writetext KurtsGranddaughterLonelyText
+ waitbutton
+ closetext
+ end
+
+.Dad:
+ writetext KurtsGranddaughterDadText
+ waitbutton
+ closetext
+ end
+
+KurtsHouseSlowpoke:
+ faceplayer
+ opentext
+ writetext KurtsHouseSlowpokeText
+ cry SLOWPOKE
+ waitbutton
+ closetext
+ end
+
+KurtsHouseOakPhoto:
+ jumptext KurtsHouseOakPhotoText
+
+KurtsHouseCelebiStatue:
+ jumptext KurtsHouseCelebiStatueText
+
+KurtsHouseBookshelf:
+ jumpstd difficultbookshelf
+
+KurtsHouseRadio:
+ jumpstd radio2
+
+MovementData_0x18e466:
+ big_step DOWN
+ big_step DOWN
+ big_step DOWN
+ big_step DOWN
+ big_step DOWN
+ step_end
+
+MovementData_0x18e46c:
+ big_step RIGHT
+ big_step DOWN
+ big_step DOWN
+ big_step DOWN
+ big_step DOWN
+ big_step DOWN
+ step_end
+
+UnknownText_0x18e473:
+ text "Hm? Who are you?"
+
+ para "<PLAYER>, eh? You"
+ line "want me to make"
+ cont "some BALLS?"
+
+ para "Sorry, but that'll"
+ line "have to wait."
+
+ para "Do you know TEAM"
+ line "ROCKET? Ah, don't"
+
+ para "worry. I'll tell"
+ line "you anyhow."
+
+ para "TEAM ROCKET's an"
+ line "evil gang that"
+
+ para "uses #MON for"
+ line "their dirty work."
+
+ para "They're supposed"
+ line "to have disbanded"
+ cont "three years ago."
+
+ para "Anyway, they're at"
+ line "the WELL, cutting"
+
+ para "off SLOWPOKETAILS"
+ line "for sale!"
+
+ para "So I'm going to"
+ line "go give them a"
+ cont "lesson in pain!"
+
+ para "Hang on, SLOWPOKE!"
+ line "Old KURT is on his"
+ cont "way!"
+ done
+
+UnknownText_0x18e615:
+ text "KURT: Hi, <PLAYER>!"
+
+ para "You handled your-"
+ line "self like a real"
+ cont "hero at the WELL."
+
+ para "I like your style!"
+
+ para "I would be honored"
+ line "to make BALLS for"
+
+ para "a trainer like"
+ line "you."
+
+ para "This is all I have"
+ line "now, but take it."
+ done
+
+UnknownText_0x18e6c9:
+ text "KURT: I make BALLS"
+ line "from APRICORNS."
+
+ para "Collect them from"
+ line "trees and bring"
+ cont "'em to me."
+
+ para "I'll make BALLS"
+ line "out of them."
+ done
+
+UnknownText_0x18e736:
+ text "KURT: You have an"
+ line "APRICORN for me?"
+
+ para "Fine! I'll turn it"
+ line "into a BALL."
+ done
+
+UnknownText_0x18e779:
+ text "KURT: It'll take a"
+ line "day to make you a"
+
+ para "BALL. Come back"
+ line "for it later."
+ done
+
+UnknownText_0x18e7bc:
+ text "KURT: Oh…"
+ line "That's a letdown."
+ done
+
+UnknownText_0x18e7d8:
+ text "KURT: I'm working!"
+ line "Don't bother me!"
+ done
+
+UnknownText_0x18e7fb:
+ text "KURT: Ah, <PLAYER>!"
+ line "I just finished"
+ cont "your BALL. Here!"
+ done
+
+UnknownText_0x18e82a:
+ text "KURT: That turned"
+ line "out great."
+
+ para "Try catching"
+ line "#MON with it."
+ done
+
+KurtsGranddaughterSlowpokeGoneText:
+ text "The SLOWPOKE are"
+ line "gone… Were they"
+
+ para "taken away by bad"
+ line "people?"
+ done
+
+KurtsGranddaughterLonelyText:
+ text "Grandpa's gone…"
+ line "I'm so lonely…"
+ done
+
+KurtsGranddaughterSlowpokeBackText:
+ text "The SLOWPOKE my"
+ line "Dad gave me came"
+
+ para "back! Its TAIL is"
+ line "growing back too!"
+ done
+
+KurtsGranddaughterDadText:
+ text "Dad works at SILPH"
+ line "where he studies"
+ cont "# BALLS."
+
+ para "I have to stay"
+ line "home with Grandpa"
+ cont "and SLOWPOKE."
+ done
+
+KurtsHouseSlowpokeText:
+ text "SLOWPOKE: …"
+ line "Yawn?"
+ done
+
+KurtsHouseOakPhotoText:
+ text "…A young PROF."
+ line "OAK?"
+ done
+
+KurtsHouseCelebiStatueText:
+ text "It's a statue of"
+ line "the forest's pro-"
+ cont "tector."
+ done
+
+KurtsHouse_MapEvents:
+ db 0, 0 ; filler
+
+ db 2 ; warp events
+ warp_event 3, 7, AZALEA_TOWN, 4
+ warp_event 4, 7, AZALEA_TOWN, 4
+
+ db 0 ; coord events
+
+ db 7 ; bg events
+ bg_event 6, 1, BGEVENT_READ, KurtsHouseRadio
+ bg_event 8, 0, BGEVENT_READ, KurtsHouseOakPhoto
+ bg_event 9, 0, BGEVENT_READ, KurtsHouseOakPhoto
+ bg_event 5, 1, BGEVENT_READ, KurtsHouseBookshelf
+ bg_event 2, 1, BGEVENT_READ, KurtsHouseBookshelf
+ bg_event 3, 1, BGEVENT_READ, KurtsHouseBookshelf
+ bg_event 4, 1, BGEVENT_READ, KurtsHouseCelebiStatue
+
+ db 4 ; object events
+ object_event 3, 2, SPRITE_KURT, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, OBJECTTYPE_SCRIPT, 0, Kurt1, EVENT_KURTS_HOUSE_KURT_1
+ object_event 5, 3, SPRITE_TWIN, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, 0, OBJECTTYPE_SCRIPT, 0, KurtsGranddaughter, -1
+ object_event 6, 3, SPRITE_SLOWPOKE, SPRITEMOVEDATA_STILL, 0, 0, -1, -1, 0, OBJECTTYPE_SCRIPT, 0, KurtsHouseSlowpoke, EVENT_KURTS_HOUSE_SLOWPOKE
+ object_event 14, 3, SPRITE_KURT, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, 0, OBJECTTYPE_SCRIPT, 0, Kurt1, EVENT_KURTS_HOUSE_KURT_2