summaryrefslogtreecommitdiff
path: root/engine/events/specials.asm
diff options
context:
space:
mode:
Diffstat (limited to 'engine/events/specials.asm')
-rwxr-xr-xengine/events/specials.asm572
1 files changed, 572 insertions, 0 deletions
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