summaryrefslogtreecommitdiff
path: root/engine/events
diff options
context:
space:
mode:
Diffstat (limited to 'engine/events')
-rw-r--r--engine/events/bug_contest/caught_mon.asm37
-rw-r--r--engine/events/checktime.asm19
-rwxr-xr-xengine/events/engine_flags.asm195
-rwxr-xr-xengine/events/specials.asm572
4 files changed, 823 insertions, 0 deletions
diff --git a/engine/events/bug_contest/caught_mon.asm b/engine/events/bug_contest/caught_mon.asm
new file mode 100644
index 00000000..b2cc044a
--- /dev/null
+++ b/engine/events/bug_contest/caught_mon.asm
@@ -0,0 +1,37 @@
+BugContest_SetCaughtContestMon:
+ ld a, [wContestMon]
+ and a
+ jr z, .firstcatch
+ ld [wNamedObjectIndexBuffer], a
+ farcall DisplayAlreadyCaughtText
+ farcall DisplayCaughtContestMonStats
+ lb bc, 14, 7
+ call PlaceYesNoBox
+ ret c
+
+.firstcatch
+ call .generatestats
+ ld a, [wTempEnemyMonSpecies]
+ ld [wNamedObjectIndexBuffer], a
+ call GetPokemonName
+ ld hl, .ContestCaughtMonText
+ call PrintText
+ ret
+
+.generatestats
+ ld a, [wTempEnemyMonSpecies]
+ ld [wCurSpecies], a
+ ld [wCurPartySpecies], a
+ call GetBaseData
+ xor a
+ ld bc, PARTYMON_STRUCT_LENGTH
+ ld hl, wContestMon
+ call ByteFill
+ xor a
+ ld [wMonType], a
+ ld hl, wContestMon
+ jp GeneratePartyMonStats
+
+.ContestCaughtMonText:
+ text_far _ContestCaughtMonText
+ text_end
diff --git a/engine/events/checktime.asm b/engine/events/checktime.asm
new file mode 100644
index 00000000..6e470e88
--- /dev/null
+++ b/engine/events/checktime.asm
@@ -0,0 +1,19 @@
+CheckTime::
+ ld a, [wTimeOfDay]
+ ld hl, .TimeOfDayTable
+ ld de, 2
+ call IsInArray
+ inc hl
+ ld c, [hl]
+ ret c
+
+ xor a
+ ld c, a
+ ret
+
+.TimeOfDayTable:
+ db MORN_F, MORN
+ db DAY_F, DAY
+ db NITE_F, NITE
+ db NITE_F, NITE
+ db -1
diff --git a/engine/events/engine_flags.asm b/engine/events/engine_flags.asm
new file mode 100755
index 00000000..9fa5f8c0
--- /dev/null
+++ b/engine/events/engine_flags.asm
@@ -0,0 +1,195 @@
+EngineFlagAction:: ; c01b
+; Do action b on engine flag de
+;
+; b = 0: reset flag
+; = 1: set flag
+; > 1: check flag, result in c
+;
+; Setting/resetting does not return a result.
+
+
+; 16-bit flag ids are considered invalid, but it's nice
+; to know that the infrastructure is there.
+
+ ld a, d
+ cp 0
+ jr z, .ceiling
+ jr c, .read ; cp 0 can't set carry!
+ jr .invalid
+
+; There are only $a2 engine flags, so
+; anything beyond that is invalid too.
+
+.ceiling
+ ld a, e
+ cp NUM_ENGINE_FLAGS
+ jr c, .read
+
+; Invalid flags are treated as flag 00.
+
+.invalid
+ xor a
+ ld e, a
+ ld d, a
+
+; Get this flag's location.
+
+.read
+ ld hl, EngineFlags
+; location
+ add hl, de
+ add hl, de
+; bit
+ add hl, de
+
+; location
+ ld e, [hl]
+ inc hl
+ ld d, [hl]
+ inc hl
+; bit
+ ld c, [hl]
+
+; What are we doing with this flag?
+
+ ld a, b
+ cp 1
+ jr c, .reset ; b = 0
+ jr z, .set ; b = 1
+
+; Return the given flag in c.
+.check
+ ld a, [de]
+ and c
+ ld c, a
+ ret
+
+; Set the given flag.
+.set
+ ld a, [de]
+ or c
+ ld [de], a
+ ret
+
+; Reset the given flag.
+.reset
+ ld a, c
+ cpl ; AND all bits except the one in question
+ ld c, a
+ ld a, [de]
+ and c
+ ld [de], a
+ ret
+
+; 404d
+EngineFlags:
+; All locations are in WRAM bank 1.
+
+ ; location, bit
+ engine_flag ENGINE_RADIO_CARD
+ engine_flag ENGINE_MAP_CARD
+ engine_flag ENGINE_PHONE_CARD
+ engine_flag ENGINE_EXPN_CARD
+ engine_flag ENGINE_POKEGEAR
+
+ engine_flag ENGINE_DAY_CARE_MAN_HAS_EGG
+ engine_flag ENGINE_DAY_CARE_MAN_HAS_MON
+
+ engine_flag ENGINE_DAY_CARE_LADY_HAS_MON
+
+ engine_flag ENGINE_MOM_SAVING_MONEY
+ engine_flag ENGINE_DST
+
+ engine_flag ENGINE_0A
+
+ engine_flag ENGINE_POKEDEX
+ engine_flag ENGINE_UNOWN_DEX
+ engine_flag ENGINE_POKERUS
+ engine_flag ENGINE_ROCKET_SIGNAL_ON_CH20
+ engine_flag ENGINE_CREDITS_SKIP
+ engine_flag ENGINE_BUG_CONTEST_TIMER
+ engine_flag ENGINE_SAFARI_ZONE
+ engine_flag ENGINE_ROCKETS_IN_RADIO_TOWER
+ engine_flag ENGINE_BIKE_SHOP_CALL_ENABLED
+ engine_flag ENGINE_GIVE_POKERUS
+ engine_flag ENGINE_REACHED_GOLDENROD
+ engine_flag ENGINE_ROCKETS_IN_MAHOGANY
+
+ engine_flag ENGINE_STRENGTH_ACTIVE
+ engine_flag ENGINE_ALWAYS_ON_BIKE
+ engine_flag ENGINE_DOWNHILL
+
+ engine_flag ENGINE_ZEPHYRBADGE
+ engine_flag ENGINE_HIVEBADGE
+ engine_flag ENGINE_PLAINBADGE
+ engine_flag ENGINE_FOGBADGE
+ engine_flag ENGINE_MINERALBADGE
+ engine_flag ENGINE_STORMBADGE
+ engine_flag ENGINE_GLACIERBADGE
+ engine_flag ENGINE_RISINGBADGE
+
+ engine_flag ENGINE_BOULDERBADGE
+ engine_flag ENGINE_CASCADEBADGE
+ engine_flag ENGINE_THUNDERBADGE
+ engine_flag ENGINE_RAINBOWBADGE
+ engine_flag ENGINE_SOULBADGE
+ engine_flag ENGINE_MARSHBADGE
+ engine_flag ENGINE_VOLCANOBADGE
+ engine_flag ENGINE_EARTHBADGE
+
+ 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_PLAYERS_HOUSE
+ engine_flag ENGINE_FLYPOINT_VIRIDIAN_POKECENTER
+ engine_flag ENGINE_FLYPOINT_PALLET
+ engine_flag ENGINE_FLYPOINT_VIRIDIAN
+ engine_flag ENGINE_FLYPOINT_PEWTER
+ engine_flag ENGINE_FLYPOINT_CERULEAN
+ engine_flag ENGINE_FLYPOINT_ROCK_TUNNEL
+ engine_flag ENGINE_FLYPOINT_VERMILION
+ engine_flag ENGINE_FLYPOINT_LAVENDER
+ engine_flag ENGINE_FLYPOINT_SAFFRON
+ engine_flag ENGINE_FLYPOINT_CELADON
+ engine_flag ENGINE_FLYPOINT_FUCHSIA
+ engine_flag ENGINE_FLYPOINT_CINNABAR
+ engine_flag ENGINE_FLYPOINT_INDIGO_PLATEAU
+ engine_flag ENGINE_FLYPOINT_NEW_BARK
+ engine_flag ENGINE_FLYPOINT_CHERRYGROVE
+ engine_flag ENGINE_FLYPOINT_VIOLET
+
+ engine_flag ENGINE_FLYPOINT_AZALEA
+ engine_flag ENGINE_FLYPOINT_CIANWOOD
+ engine_flag ENGINE_FLYPOINT_GOLDENROD
+ engine_flag ENGINE_FLYPOINT_OLIVINE
+ engine_flag ENGINE_FLYPOINT_ECRUTEAK
+ engine_flag ENGINE_FLYPOINT_MAHOGANY
+ engine_flag ENGINE_FLYPOINT_LAKE_OF_RAGE
+ engine_flag ENGINE_FLYPOINT_BLACKTHORN
+ engine_flag ENGINE_FLYPOINT_SILVER_CAVE
+
+ engine_flag ENGINE_FLYPOINT_UNUSED
+ engine_flag ENGINE_LUCKY_NUMBER_SHOW
+ engine_flag ENGINE_4E
+
+ engine_flag ENGINE_KURT_MAKING_BALLS
+ engine_flag ENGINE_DAILY_BUG_CONTEST
+ engine_flag ENGINE_SPECIAL_WILDDATA
+ engine_flag ENGINE_TIME_CAPSULE
+ engine_flag ENGINE_ALL_FRUIT_TREES
+ engine_flag ENGINE_GOT_SHUCKIE_TODAY
+ engine_flag ENGINE_GOLDENROD_UNDERGROUND_MERCHANT_CLOSED
+ engine_flag ENGINE_FOUGHT_IN_TRAINER_HALL_TODAY
+
+ engine_flag ENGINE_MT_MOON_SQUARE_CLEFAIRY
+ engine_flag ENGINE_UNION_CAVE_LAPRAS
+ engine_flag ENGINE_GOLDENROD_UNDERGROUND_GOT_HAIRCUT
+ engine_flag ENGINE_GOLDENROD_DEPT_STORE_TM27_RETURN
+ engine_flag ENGINE_DAISYS_GROOMING
+ engine_flag ENGINE_INDIGO_PLATEAU_RIVAL_FIGHT
diff --git a/engine/events/specials.asm b/engine/events/specials.asm
new file mode 100755
index 00000000..e51f3451
--- /dev/null
+++ b/engine/events/specials.asm
@@ -0,0 +1,572 @@
+Special:: ; c22b
+ ld hl, SpecialsPointers ; $4239
+ add hl, de
+ add hl, de
+ add hl, de
+ ld b, [hl]
+ inc hl
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ ld a, b
+ rst FarCall
+ ret
+
+; Special routines can be used with the "special" map script command.
+; They often use wScriptVar for arguments and return values.
+
+add_special: MACRO
+; Some ROM0 specials have a nonzero bank.
+\1Special::
+IF _NARG == 1
+ dba \1
+ELSE
+ dbw \2, \1
+ENDC
+ENDM
+
+SpecialsPointers:
+ add_special WarpToSpawnPoint
+
+; Communications
+ add_special SetBitsForLinkTradeRequest
+ add_special WaitForLinkedFriend
+ add_special CheckLinkTimeout
+ add_special TryQuickSave
+ add_special CheckBothSelectedSameRoom
+ add_special FailedLinkToPast
+ add_special CloseLink
+ add_special WaitForOtherPlayerToExit
+ add_special SetBitsForBattleRequest
+ add_special SetBitsForTimeCapsuleRequest
+ add_special CheckTimeCapsuleCompatibility
+ add_special EnterTimeCapsule
+ add_special TradeCenter
+ add_special Colosseum
+ add_special TimeCapsule
+ add_special CableClubCheckWhichChris
+ add_special CheckMysteryGift
+ add_special GetMysteryGiftItem
+ add_special UnlockMysteryGift
+
+; Map events
+ add_special BugContestJudging
+ add_special CheckPartyFullAfterContest
+ add_special ContestDropOffMons
+ add_special ContestReturnMons
+ add_special GiveParkBalls
+ add_special CheckMagikarpLength
+ add_special MagikarpHouseSign
+ add_special HealParty
+ add_special PokemonCenterPC
+ add_special PlayersHousePC
+ add_special DayCareMan
+ add_special DayCareLady
+ add_special DayCareManOutside
+ add_special MoveDeletion
+ add_special BankOfMom
+ add_special MagnetTrain
+ add_special NameRival
+ add_special SetDayOfWeek
+ add_special OverworldTownMap
+ add_special UnownPrinter
+ add_special MapRadio
+ add_special UnownPuzzle
+ add_special SlotMachine
+ add_special CardFlip
+ add_special DummyNonfunctionalGameCornerGame
+ add_special ClearBGPalettesBufferScreen
+ add_special FadeOutPalettes
+ add_special FadeBlackQuickly
+ add_special FadeInPalettes
+ add_special FadeInQuickly
+ add_special ReloadSpritesNoPalettes, $02
+ add_special ClearBGPalettes
+ add_special UpdateTimePals
+ add_special ClearTilemap
+ add_special UpdateSprites
+ add_special ReplacePlayerSprite
+ add_special GameCornerPrizeMonCheckDex
+ add_special UnusedSetSeenMon
+ add_special WaitSFX, $03
+ add_special PlayMapMusic
+ add_special RestartMapMusic
+ add_special HealMachineAnim
+ add_special SurfStartStep
+ add_special FindPartyMonAboveLevel
+ add_special FindPartyMonAtLeastThatHappy
+ add_special FindPartyMonThatSpecies
+ add_special FindPartyMonThatSpeciesYourTrainerID
+ add_special UnusedCheckUnusedTwoDayTimer
+ add_special DayCareMon1
+ add_special DayCareMon2
+ add_special SelectRandomBugContestContestants
+ add_special ActivateFishingSwarm
+ add_special ToggleMaptileDecorations
+ add_special ToggleDecorationsVisibility
+ add_special GiveShuckle
+ add_special ReturnShuckle
+ add_special BillsGrandfather
+ add_special CheckPokerus
+ add_special DisplayCoinCaseBalance
+ add_special DisplayMoneyAndCoinBalance
+ add_special PlaceMoneyTopRight
+ add_special CheckForLuckyNumberWinners
+ add_special CheckLuckyNumberShowFlag
+ add_special ResetLuckyNumberShowFlag
+ add_special PrintTodaysLuckyNumber
+ add_special SelectApricornForKurt
+ add_special NameRater
+ add_special DisplayLinkRecord
+ add_special GetFirstPokemonHappiness
+ add_special CheckFirstMonIsEgg
+ add_special RandomUnseenWildMon
+ add_special RandomPhoneWildMon
+ add_special RandomPhoneMon
+ add_special LoadUsedSpritesGFX
+ add_special PlaySlowCry
+ add_special SnorlaxAwake
+ add_special YoungerHaircutBrother
+ add_special OlderHaircutBrother
+ add_special DaisysGrooming
+ add_special PlayCurMonCry
+ add_special ProfOaksPCBoot
+ add_special GameboyCheck
+ add_special TrainerHouse
+ add_special PhotoStudio
+ add_special InitRoamMons
+ add_special FadeOutMusic
+ add_special Diploma
+ add_special PrintDiploma
+ add_special InitialSetDSTFlag
+ add_special InitialClearDSTFlag
+ add_special MrChrono
+ add_special SpecialNone
+
+SpecialNone: ; c389
+ ret
+
+GameCornerPrizeMonCheckDex: ; c38a
+ ld a, [wScriptVar]
+ dec a
+ call CheckCaughtMon
+ ret nz
+ ld a, [wScriptVar]
+ dec a
+ call SetSeenAndCaughtMon
+ call FadeToMenu
+ ld a, [wScriptVar]
+ ld [wd151], a
+ farcall NewPokedexEntry
+ call ExitAllMenus
+ ret
+
+UnusedSetSeenMon: ; c3ac
+ ld a, [wScriptVar]
+ dec a
+ call SetSeenMon
+ ret
+
+FindPartyMonAboveLevel:
+ ld a, [wScriptVar]
+ ld b, a
+ farcall _FindPartyMonAboveLevel ; same bank
+ jr z, FoundNone
+ jr FoundOne
+
+FindPartyMonAtLeastThatHappy:
+ ld a, [wScriptVar]
+ ld b, a
+ farcall _FindPartyMonAtLeastThatHappy ; same bank
+ jr z, FoundNone
+ jr FoundOne
+
+FindPartyMonThatSpecies:
+ ld a, [wScriptVar]
+ ld b, a
+ farcall _FindPartyMonThatSpecies ; same bank
+ jr z, FoundNone
+ jr FoundOne
+
+FindPartyMonThatSpeciesYourTrainerID:
+ ld a, [wScriptVar]
+ ld b, a
+ farcall _FindPartyMonThatSpeciesYourTrainerID ; same bank
+ jr z, FoundNone
+ jr FoundOne
+
+FoundOne:
+ ld a, TRUE
+ ld [wScriptVar], a
+ ret
+
+FoundNone:
+ xor a
+ ld [wScriptVar], a
+ ret
+
+NameRival: ; c3f7
+ ld b, $2
+ ld de, wRivalName
+ farcall NamingScreen_
+ ld hl, wRivalName
+ ld de, .DefaultName
+ call InitName
+ ret
+
+.DefaultName:
+IF DEF(GOLD)
+ db "SILVER@"
+ENDC
+
+IF DEF(SILVER)
+ db "GOLD@"
+ENDC
+
+NameRater:
+ farcall _NameRater
+ ret
+
+OverworldTownMap: ; c41a (3:441a)
+ call FadeToMenu
+ farcall Function9188a
+ call ExitAllMenus
+ ret
+
+UnownPrinter: ; c427 (3:4427)
+ call FadeToMenu
+ farcall Function16e3a
+ call ExitAllMenus
+ ret
+
+DisplayLinkRecord: ; c434 (3:4434)
+ call FadeToMenu
+ farcall Function3f55d
+ call ExitAllMenus
+ ret
+
+PlayersHousePC: ; c441 (3:4441)
+ xor a
+ ld [wScriptVar], a
+ farcall Function159b0
+ ld a, c
+ ld [wScriptVar], a
+ ret
+
+CheckMysteryGift: ; c450 (3:4450)
+ ld a, $0
+ call OpenSRAM
+ ld a, [$abe2]
+ and a
+ jr z, .asm_c45c
+ inc a
+.asm_c45c
+ ld [wScriptVar], a
+ call CloseSRAM
+ ret
+
+GetMysteryGiftItem: ; c463 (3:4463)
+ ld a, $0
+ call OpenSRAM
+ ld a, [$abe2]
+ ld [wCurItem], a
+ ld a, $1
+ ld [wItemQuantityChangeBuffer], a
+ ld hl, wNumItems
+ call ReceiveItem
+ jr nc, .asm_c497
+ xor a
+ ld [$abe2], a
+ call CloseSRAM
+ ld a, [wCurItem]
+ ld [wd151], a
+ call GetItemName
+ ld hl, ReceivedMysteryGiftText ; $449f
+ call PrintText
+ ld a, $1
+ ld [wScriptVar], a
+ ret
+
+.asm_c497
+ call CloseSRAM
+ xor a
+ ld [wScriptVar], a
+ ret
+
+ReceivedMysteryGiftText:
+ text_far ReceivedMysteryGiftText_
+ db "@"
+
+BugContestJudging: ; c4a4 (3:44a4)
+ farcall _BugContestJudging
+ ld a, b
+ ld [wScriptVar], a
+ ret
+
+MapRadio: ; c4af (3:44af)
+ ld a, [wScriptVar]
+ ld e, a
+ farcall Function919c1
+ ret
+
+UnownPuzzle: ; c4ba (3:44ba)
+ call FadeToMenu
+ farcall Functione199d
+ ld a, [wFieldMoveSucceeded]
+ ld [wScriptVar], a
+ call ExitAllMenus
+ ret
+
+SlotMachine: ; c4cd (3:44cd)
+ call Functionc508
+ ret c
+ ld a, BANK(Function92c36)
+ ld hl, Function92c36
+ call Functionc4f4
+ ret
+
+CardFlip: ; c4da (3:44da)
+ call Functionc508
+ ret c
+ ld a, BANK(Functione0909)
+ ld hl, Functione0909
+ call Functionc4f4
+ ret
+
+DummyNonfunctionalGameCornerGame: ; c4e7 (3:44e7)
+ call Functionc508
+ ret c
+ ld a, BANK(Functione2668)
+ ld hl, Functione2668
+ call Functionc4f4
+ ret
+
+Functionc4f4: ; c4f4 (3:44f4)
+ call FarQueueScript
+ call FadeToMenu
+ ld hl, wQueuedScriptBank
+ ld a, [hli]
+ push af
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ pop af
+ rst FarCall
+ call ExitAllMenus
+ ret
+
+Functionc508: ; c508 (3:4508)
+ ld hl, wCoins
+ ld a, [hli]
+ or [hl]
+ jr z, .asm_c51e
+ ld a, COIN_CASE
+ ld [wCurItem], a
+ ld hl, wNumItems
+ call CheckItem
+ jr nc, .asm_c523
+ and a
+ ret
+
+.asm_c51e
+ ld hl, .NoCoinsText
+ jr .asm_c526
+
+.asm_c523
+ ld hl, .NoCoinCaseText
+.asm_c526
+ call PrintText
+ scf
+ ret
+
+.NoCoinsText:
+ text_far NoCoinsText_
+ db "@"
+
+.NoCoinCaseText:
+ text_far NoCoinCaseText_
+ db "@"
+
+ClearBGPalettesBufferScreen: ; c535 (3:4535)
+ call ClearBGPalettes
+ call BufferScreen
+ ret
+
+Functionc53c: ; c53c (3:453c)
+ jr c, .asm_c543
+ xor a
+ ld [wScriptVar], a
+ ret
+
+.asm_c543
+ ld a, $1
+ ld [wScriptVar], a
+ ret
+
+UnusedCheckUnusedTwoDayTimer: ; c549 (3:4549)
+ farcall Function118f8
+ ld a, [wUnusedTwoDayTimer]
+ ld [wScriptVar], a
+ ret
+
+ActivateFishingSwarm: ; c556 (3:4556)
+ ld a, [wScriptVar]
+ ld [wFishingSwarmFlag], a
+ jr .asm_c566
+
+.asm_c55e
+ ld a, d
+ ld [wDunsparceMapGroup], a
+ ld a, e
+ ld [wDunsparceMapNumber], a
+.asm_c566
+ SetFlag ENGINE_SPECIAL_WILDDATA
+ ret
+
+Functionc56c:
+ CheckFlagHL ENGINE_SPECIAL_WILDDATA
+ jr z, .asm_c578
+ xor a
+ ld [wScriptVar], a
+ ret
+
+.asm_c578
+ ld a, $1
+ ld [wScriptVar], a
+ xor a
+ ld [wFishingSwarmFlag], a
+ ld [wDunsparceMapGroup], a
+ ld [wDunsparceMapNumber], a
+ ret
+
+CheckPokerus: ; c588 (3:4588)
+ farcall Functionc7a40
+ jp Functionc53c
+
+ResetLuckyNumberShowFlag: ; c591 (3:4591)
+ farcall Function11917
+ ClearFlag ENGINE_LUCKY_NUMBER_SHOW
+ farcall LoadOrRegenerateLuckyIDNumber
+ ret
+
+CheckLuckyNumberShowFlag: ; c5a3 (3:45a3)
+ farcall Function1192e
+ jp Functionc53c
+
+CountUnown: ; c5ac (3:45ac)
+ ld hl, wUnownDex
+ ld b, $0
+.asm_c5b1
+ ld a, [hli]
+ and a
+ ret z
+ inc b
+ ld a, b
+ cp $1a
+ jr c, .asm_c5b1
+ ret
+
+SelectApricornForKurt: ; c5bb (3:45bb)
+ farcall Function24b8d
+ ld a, c
+ ld [wScriptVar], a
+ and a
+ ret z
+ ld [wCurItem], a
+ ld a, $1
+ ld [wItemQuantityChangeBuffer], a
+ ld hl, wNumItems
+ call TossItem
+ ret
+
+SnorlaxAwake: ; c5d6 (3:45d6)
+ ld a, [wChannelsEnd]
+ cp $40
+ jr nz, .asm_c5fb
+ ld a, [wXCoord]
+ ld b, a
+ ld a, [wYCoord]
+ ld c, a
+ ld hl, .ProximityCoords
+.asm_c5e8
+ ld a, [hli]
+ cp $ff
+ jr z, .asm_c5fb
+ cp b
+ jr nz, .asm_c5f8
+ ld a, [hli]
+ cp c
+ jr nz, .asm_c5e8
+ ld a, $1
+ jr .asm_c5fc
+
+.asm_c5f8
+ inc hl
+ jr .asm_c5e8
+
+.asm_c5fb
+ xor a
+.asm_c5fc
+ ld [wScriptVar], a
+ ret
+
+.ProximityCoords:
+ ; x, y
+ db 33, 8 ; left
+ db 34, 10 ; below
+ db 35, 10 ; below
+ db 36, 8 ; right
+ db 36, 9 ; right
+ db -1
+
+PlayCurMonCry: ; c60b (3:460b)
+ ld a, [wCurPartySpecies]
+ jp PlayMonCry
+
+GameboyCheck: ; c611 (3:4611)
+ ldh a, [hCGB]
+ and a
+ jr nz, .asm_c622
+ ldh a, [hSGB]
+ and a
+ jr nz, .asm_c61e
+ xor a
+ jr .asm_c624
+
+.asm_c61e
+ ld a, $1
+ jr .asm_c624
+
+.asm_c622
+ ld a, $2
+.asm_c624
+ ld [wScriptVar], a
+ ret
+
+FadeOutMusic: ; c628 (3:4628)
+ ld a, $0
+ ld [wMusicFadeID], a
+ ld a, $0
+ ld [wMusicFadeID + 1], a
+ ld a, $2
+ ld [wMusicFade], a
+ ret
+
+Diploma: ; c638 (3:4638)
+ call FadeToMenu
+ farcall Functione0002
+ call ExitAllMenus
+ ret
+
+PrintDiploma: ; c645 (3:4645)
+ call FadeToMenu
+ farcall Function84684
+ call ExitAllMenus
+ ret
+
+TrainerHouse: ; c652 (3:4652)
+ ld a, $0
+ call OpenSRAM
+ ld a, [$abfd]
+ ld [wScriptVar], a
+ jp CloseSRAM