diff options
Diffstat (limited to 'engine/events')
-rw-r--r-- | engine/events/bug_contest/caught_mon.asm | 37 | ||||
-rw-r--r-- | engine/events/checktime.asm | 19 | ||||
-rwxr-xr-x | engine/events/engine_flags.asm | 195 | ||||
-rwxr-xr-x | engine/events/specials.asm | 572 |
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 |