diff options
Diffstat (limited to 'items/item_effects.asm')
-rw-r--r-- | items/item_effects.asm | 3313 |
1 files changed, 0 insertions, 3313 deletions
diff --git a/items/item_effects.asm b/items/item_effects.asm deleted file mode 100644 index c13568a5d..000000000 --- a/items/item_effects.asm +++ /dev/null @@ -1,3313 +0,0 @@ -_DoItemEffect:: ; e722 - ld a, [CurItem] - ld [wd265], a - call GetItemName - call CopyName1 - ld a, 1 - ld [wItemEffectSucceeded], a - ld a, [CurItem] - dec a - ld hl, ItemEffects - rst JumpTable - ret -; e73c - - -ItemEffects: ; e73c - dw MasterBall - dw UltraBall - dw Brightpowder - dw GreatBall - dw PokeBall - dw TownMap - dw Bicycle - dw MoonStone - dw Antidote - dw BurnHeal - dw IceHeal - dw Awakening - dw ParlyzHeal - dw FullRestore - dw MaxPotion - dw HyperPotion - dw SuperPotion - dw Potion - dw EscapeRope - dw Repel - dw MaxElixer - dw FireStone - dw Thunderstone - dw WaterStone - dw Item19 - dw HPUp - dw Protein - dw Iron - dw Carbos - dw LuckyPunch - dw Calcium - dw RareCandy - dw XAccuracy - dw LeafStone - dw MetalPowder - dw Nugget - dw PokeDoll - dw FullHeal - dw Revive - dw MaxRevive - dw GuardSpec - dw SuperRepel - dw MaxRepel - dw DireHit - dw Item2D - dw FreshWater - dw SodaPop - dw Lemonade - dw XAttack - dw Item32 - dw XDefend - dw XSpeed - dw XSpecial - dw CoinCase - dw Itemfinder - dw PokeFlute - dw ExpShare - dw OldRod - dw GoodRod - dw SilverLeaf - dw SuperRod - dw PPUp - dw Ether - dw MaxEther - dw Elixer - dw RedScale - dw Secretpotion - dw SSTicket - dw MysteryEgg - dw ClearBell - dw SilverWing - dw MoomooMilk - dw QuickClaw - dw Psncureberry - dw GoldLeaf - dw SoftSand - dw SharpBeak - dw Przcureberry - dw BurntBerry - dw IceBerry - dw PoisonBarb - dw KingsRock - dw BitterBerry - dw MintBerry - dw RedApricorn - dw Tinymushroom - dw BigMushroom - dw Silverpowder - dw BluApricorn - dw Item5A - dw AmuletCoin - dw YlwApricorn - dw GrnApricorn - dw CleanseTag - dw MysticWater - dw Twistedspoon - dw WhtApricorn - dw Blackbelt - dw BlkApricorn - dw Item64 - dw PnkApricorn - dw Blackglasses - dw Slowpoketail - dw PinkBow - dw Stick - dw SmokeBall - dw Nevermeltice - dw Magnet - dw Miracleberry - dw Pearl - dw BigPearl - dw Everstone - dw SpellTag - dw Ragecandybar - dw GsBall - dw BlueCard - dw MiracleSeed - dw ThickClub - dw FocusBand - dw Item78 - dw Energypowder - dw EnergyRoot - dw HealPowder - dw RevivalHerb - dw HardStone - dw LuckyEgg - dw CardKey - dw MachinePart - dw EggTicket - dw LostItem - dw Stardust - dw StarPiece - dw BasementKey - dw Pass - dw Item87 - dw Item88 - dw Item89 - dw Charcoal - dw BerryJuice - dw ScopeLens - dw Item8D - dw Item8E - dw MetalCoat - dw DragonFang - dw Item91 - dw Leftovers - dw Item93 - dw Item94 - dw Item95 - dw Mysteryberry - dw DragonScale - dw BerserkGene - dw Item99 - dw Item9A - dw Item9B - dw SacredAsh - dw HeavyBall - dw FlowerMail - dw LevelBall - dw LureBall - dw FastBall - dw ItemA2 - dw LightBall - dw FriendBall - dw MoonBall - dw LoveBall - dw NormalBox - dw GorgeousBox - dw SunStone - dw PolkadotBow - dw ItemAB - dw UpGrade - dw Berry - dw GoldBerry - dw Squirtbottle - dw ItemB0 - dw ParkBall - dw RainbowWing - dw ItemB3 -; e8a2 - - -MasterBall: -UltraBall: -GreatBall: -PokeBall: -HeavyBall: -LevelBall: -LureBall: -FastBall: -FriendBall: -MoonBall: -LoveBall: -ParkBall: ; e8a2 - ld a, [wBattleMode] - dec a - jp nz, UseBallInTrainerBattle - - ld a, [PartyCount] - cp PARTY_LENGTH - jr nz, .room_in_party - - ld a, BANK(sBoxCount) - call GetSRAMBank - ld a, [sBoxCount] - cp MONS_PER_BOX - call CloseSRAM - jp z, Ball_BoxIsFullMessage - -.room_in_party - xor a - ld [wWildMon], a - ld a, [CurItem] - cp PARK_BALL - call nz, ReturnToBattle_UseBall - - ld hl, Options - res NO_TEXT_SCROLL, [hl] - ld hl, UsedItemText - call PrintText - - ld a, [EnemyMonCatchRate] - ld b, a - ld a, [BattleType] - cp BATTLETYPE_TUTORIAL - jp z, .catch_without_fail - ld a, [CurItem] - cp MASTER_BALL - jp z, .catch_without_fail - ld a, [CurItem] - ld c, a - ld hl, BallMultiplierFunctionTable - -.get_multiplier_loop - ld a, [hli] - cp $ff - jr z, .skip_or_return_from_ball_fn - cp c - jr z, .call_ball_function - inc hl - inc hl - jr .get_multiplier_loop - -.call_ball_function - ld a, [hli] - ld h, [hl] - ld l, a - ld de, .skip_or_return_from_ball_fn - push de - jp hl - -.skip_or_return_from_ball_fn - ld a, [CurItem] - cp LEVEL_BALL - ld a, b - jp z, .skip_hp_calc - - ld a, b - ld [hMultiplicand + 2], a - - ld hl, EnemyMonHP - ld b, [hl] - inc hl - ld c, [hl] - inc hl - ld d, [hl] - inc hl - ld e, [hl] - sla c - rl b - - ld h, d - ld l, e - add hl, de - add hl, de - ld d, h - ld e, l - ld a, d - and a - jr z, .okay_1 - - srl d - rr e - srl d - rr e - srl b - rr c - srl b - rr c - - ld a, c - and a - jr nz, .okay_1 - ld c, $1 -.okay_1 - ld b, e - - push bc - ld a, b - sub c - ld [hMultiplier], a - xor a - ld [hDividend + 0], a - ld [hMultiplicand + 0], a - ld [hMultiplicand + 1], a - call Multiply - pop bc - - ld a, b - ld [hDivisor], a - ld b, $4 - call Divide - - ld a, [hQuotient + 2] - and a - jr nz, .statuscheck - ld a, 1 -.statuscheck -; This routine is buggy. It was intended that SLP and FRZ provide a higher -; catch rate than BRN/PSN/PAR, which in turn provide a higher catch rate than -; no status effect at all. But instead, it makes BRN/PSN/PAR provide no -; benefit. -; Uncomment the line below to fix this. - ld b, a - ld a, [EnemyMonStatus] - and 1 << FRZ | SLP - ld c, 10 - jr nz, .addstatus - ; ld a, [EnemyMonStatus] - and a - ld c, 5 - jr nz, .addstatus - ld c, 0 -.addstatus - ld a, b - add c - jr nc, .max_1 - ld a, $ff -.max_1 - - ld d, a - push de - - ; BUG: callba overwrites a, - ; and GetItemHeldEffect takes b anyway. - - ; This is probably the reason - ; the HELD_CATCH_CHANCE effect - ; is never used. - - ; Uncomment the line below to fix. - - ld a, [BattleMonItem] -; ld b, a - callba GetItemHeldEffect - ld a, b - cp HELD_CATCH_CHANCE - - pop de - ld a, d - - jr nz, .skip_hp_calc - add c - jr nc, .skip_hp_calc - ld a, $ff -.skip_hp_calc - - ld b, a - ld [Buffer1], a - call Random - - cp b - ld a, 0 - jr z, .catch_without_fail - jr nc, .fail_to_catch - -.catch_without_fail - ld a, [EnemyMonSpecies] - -.fail_to_catch - ld [wWildMon], a - ld c, 20 - call DelayFrames - - ld a, [CurItem] - cp POKE_BALL + 1 ; Assumes Master/Ultra/Great come before - jr c, .not_kurt_ball - ld a, POKE_BALL -.not_kurt_ball - ld [wBattleAnimParam], a - - ld de, ANIM_THROW_POKE_BALL - ld a, e - ld [FXAnimIDLo], a - ld a, d - ld [FXAnimIDHi], a - xor a - ld [hBattleTurn], a - ld [Buffer2], a - ld [wNumHits], a - predef PlayBattleAnim - - ld a, [wWildMon] - and a - jr nz, .caught - ld a, [Buffer2] - cp $1 - ld hl, Text_NoShake - jp z, .shake_and_break_free - cp $2 - ld hl, Text_OneShake - jp z, .shake_and_break_free - cp $3 - ld hl, Text_TwoShakes - jp z, .shake_and_break_free - cp $4 - ld hl, Text_ThreeShakes - jp z, .shake_and_break_free -.caught - - ld hl, EnemyMonStatus - ld a, [hli] - push af - inc hl - ld a, [hli] - push af - ld a, [hl] - push af - push hl - ld hl, EnemyMonItem - ld a, [hl] - push af - push hl - ld hl, EnemySubStatus5 - ld a, [hl] - push af - set SUBSTATUS_TRANSFORMED, [hl] - bit SUBSTATUS_TRANSFORMED, a - jr nz, .ditto - jr .not_ditto - -.ditto - ld a, DITTO - ld [TempEnemyMonSpecies], a - jr .load_data - -.not_ditto - set SUBSTATUS_TRANSFORMED, [hl] - ld hl, wEnemyBackupDVs - ld a, [EnemyMonDVs] - ld [hli], a - ld a, [EnemyMonDVs + 1] - ld [hl], a - -.load_data - ld a, [TempEnemyMonSpecies] - ld [CurPartySpecies], a - ld a, [EnemyMonLevel] - ld [CurPartyLevel], a - callba LoadEnemyMon - - pop af - ld [EnemySubStatus5], a - - pop hl - pop af - ld [hl], a - pop hl - pop af - ld [hld], a - pop af - ld [hld], a - dec hl - pop af - ld [hl], a - - ld hl, EnemySubStatus5 - bit SUBSTATUS_TRANSFORMED, [hl] - jr nz, .Transformed - ld hl, wWildMonMoves - ld de, EnemyMonMoves - ld bc, NUM_MOVES - call CopyBytes - - ld hl, wWildMonPP - ld de, EnemyMonPP - ld bc, NUM_MOVES - call CopyBytes -.Transformed: - - ld a, [EnemyMonSpecies] - ld [wWildMon], a - ld [CurPartySpecies], a - ld [wd265], a - ld a, [BattleType] - cp BATTLETYPE_TUTORIAL - jp z, .FinishTutorial - - callba TrainerRankings_WildMonsCaught - - ld hl, Text_GotchaMonWasCaught - call PrintText - - call ClearSprites - - ld a, [wd265] - dec a - call CheckCaughtMon - - ld a, c - push af - ld a, [wd265] - dec a - call SetSeenAndCaughtMon - pop af - and a - jr nz, .skip_pokedex - - call CheckReceivedDex - jr z, .skip_pokedex - - ld hl, Text_AddedToPokedex - call PrintText - - call ClearSprites - - ld a, [EnemyMonSpecies] - ld [wd265], a - predef NewPokedexEntry - -.skip_pokedex - ld a, [BattleType] - cp BATTLETYPE_CONTEST - jp z, .catch_bug_contest_mon - cp BATTLETYPE_CELEBI - jr nz, .not_celebi - ld hl, wBattleResult - set 6, [hl] -.not_celebi - - ld a, [PartyCount] - cp PARTY_LENGTH - jr z, .SendToPC - - xor a ; PARTYMON - ld [MonType], a - call ClearSprites - - predef TryAddMonToParty - - callba SetCaughtData - - ld a, [CurItem] - cp FRIEND_BALL - jr nz, .SkipPartyMonFriendBall - - ld a, [PartyCount] - dec a - ld hl, PartyMon1Happiness - ld bc, PARTYMON_STRUCT_LENGTH - call AddNTimes - - ld a, FRIEND_BALL_HAPPINESS - ld [hl], a -.SkipPartyMonFriendBall: - - ld hl, Text_AskNicknameNewlyCaughtMon - call PrintText - - ld a, [CurPartySpecies] - ld [wd265], a - call GetPokemonName - - call YesNoBox - jp c, .return_from_capture - - ld a, [PartyCount] - dec a - ld [CurPartyMon], a - ld hl, PartyMonNicknames - ld bc, PKMN_NAME_LENGTH - call AddNTimes - - ld d, h - ld e, l - push de - xor a ; PARTYMON - ld [MonType], a - ld b, 0 - callba NamingScreen - - call RotateThreePalettesRight - - call LoadStandardFont - - pop hl - ld de, StringBuffer1 - call InitName - - jp .return_from_capture - -.SendToPC: - call ClearSprites - - predef SentPkmnIntoBox - - callba SetBoxMonCaughtData - - ld a, BANK(sBoxCount) - call GetSRAMBank - - ld a, [sBoxCount] - cp MONS_PER_BOX - jr nz, .BoxNotFullYet - ld hl, wBattleResult - set 7, [hl] -.BoxNotFullYet: - ld a, [CurItem] - cp FRIEND_BALL - jr nz, .SkipBoxMonFriendBall - ; Bug: overwrites the happiness of the first mon in the box! - ld a, FRIEND_BALL_HAPPINESS - ld [sBoxMon1Happiness], a -.SkipBoxMonFriendBall: - call CloseSRAM - - ld hl, Text_AskNicknameNewlyCaughtMon - call PrintText - - ld a, [CurPartySpecies] - ld [wd265], a - call GetPokemonName - - call YesNoBox - jr c, .SkipBoxMonNickname - - xor a - ld [CurPartyMon], a - ld a, BOXMON - ld [MonType], a - ld de, wMonOrItemNameBuffer - ld b, $0 - callba NamingScreen - - ld a, BANK(sBoxMonNicknames) - call GetSRAMBank - - ld hl, wMonOrItemNameBuffer - ld de, sBoxMonNicknames - ld bc, PKMN_NAME_LENGTH - call CopyBytes - - ld hl, sBoxMonNicknames - ld de, StringBuffer1 - call InitName - - call CloseSRAM - -.SkipBoxMonNickname: - ld a, BANK(sBoxMonNicknames) - call GetSRAMBank - - ld hl, sBoxMonNicknames - ld de, wMonOrItemNameBuffer - ld bc, PKMN_NAME_LENGTH - call CopyBytes - - call CloseSRAM - - ld hl, Text_SentToBillsPC - call PrintText - - call RotateThreePalettesRight - call LoadStandardFont - jr .return_from_capture - -.catch_bug_contest_mon - callba BugContest_SetCaughtContestMon - jr .return_from_capture - -.FinishTutorial: - ld hl, Text_GotchaMonWasCaught - -.shake_and_break_free - call PrintText - call ClearSprites - -.return_from_capture - ld a, [BattleType] - cp BATTLETYPE_TUTORIAL - ret z - cp BATTLETYPE_DEBUG - ret z - cp BATTLETYPE_CONTEST - jr z, .used_park_ball - - ld a, [wWildMon] - and a - jr z, .toss - - call ClearBGPalettes - call ClearTileMap - -.toss - ld hl, NumItems - inc a - ld [wItemQuantityChangeBuffer], a - jp TossItem - -.used_park_ball - ld hl, wParkBallsRemaining - dec [hl] - ret -; ec0a - - -BallMultiplierFunctionTable: -; table of routines that increase or decrease the catch rate based on -; which ball is used in a certain situation. - dbw ULTRA_BALL, UltraBallMultiplier - dbw GREAT_BALL, GreatBallMultiplier - dbw SAFARI_BALL, SafariBallMultiplier ; Safari Ball, leftover from RBY - dbw HEAVY_BALL, HeavyBallMultiplier - dbw LEVEL_BALL, LevelBallMultiplier - dbw LURE_BALL, LureBallMultiplier - dbw FAST_BALL, FastBallMultiplier - dbw MOON_BALL, MoonBallMultiplier - dbw LOVE_BALL, LoveBallMultiplier - dbw PARK_BALL, ParkBallMultiplier - db $ff - -UltraBallMultiplier: -; multiply catch rate by 2 - sla b - ret nc - ld b, $ff - ret - -SafariBallMultiplier: -GreatBallMultiplier: -ParkBallMultiplier: -; multiply catch rate by 1.5 - ld a, b - srl a - add b - ld b, a - ret nc - ld b, $ff - ret - -GetPokedexEntryBank: - push hl - push de - ld a, [EnemyMonSpecies] - rlca - rlca - and 3 - ld hl, .PokedexEntryBanks - ld d, 0 - ld e, a - add hl, de - ld a, [hl] - pop de - pop hl - ret - -.PokedexEntryBanks: - -GLOBAL PokedexEntries1 -GLOBAL PokedexEntries2 -GLOBAL PokedexEntries3 -GLOBAL PokedexEntries4 - - db BANK(PokedexEntries1) - db BANK(PokedexEntries2) - db BANK(PokedexEntries3) - db BANK(PokedexEntries4) - -HeavyBallMultiplier: -; subtract 20 from catch rate if weight < 102.4 kg -; else add 0 to catch rate if weight < 204.8 kg -; else add 20 to catch rate if weight < 307.2 kg -; else add 30 to catch rate if weight < 409.6 kg -; else add 40 to catch rate (never happens) - ld a, [EnemyMonSpecies] - ld hl, PokedexDataPointerTable - dec a - ld e, a - ld d, 0 - add hl, de - add hl, de - ld a, BANK(PokedexDataPointerTable) - call GetFarHalfword - -.SkipText: - call GetPokedexEntryBank - call GetFarByte - inc hl - cp "@" - jr nz, .SkipText - - call GetPokedexEntryBank - push bc - inc hl - inc hl - call GetFarHalfword - - srl h - rr l - ld b, h - ld c, l - - rept 4 - srl b - rr c - endr - call .subbc - - srl b - rr c - call .subbc - - ld a, h - pop bc - jr .compare - -.subbc - ; subtract bc from hl - push bc - ld a, b - cpl - ld b, a - ld a, c - cpl - ld c, a - inc bc - add hl, bc - pop bc - ret - -.compare - ld c, a - cp 1024 >> 8 ; 102.4 kg - jr c, .lightmon - - ld hl, .WeightsTable -.lookup - ld a, c - cp [hl] - jr c, .heavymon - inc hl - inc hl - jr .lookup - -.heavymon - inc hl - ld a, b - add [hl] - ld b, a - ret nc - ld b, $ff - ret - -.lightmon - ld a, b - sub 20 - ld b, a - ret nc - ld b, $1 - ret - -.WeightsTable: -; weight factor, boost - db 2048 >> 8, 0 - db 3072 >> 8, 20 - db 4096 >> 8, 30 - db 65280 >> 8, 40 - -LureBallMultiplier: -; multiply catch rate by 3 if this is a fishing rod battle - ld a, [BattleType] - cp BATTLETYPE_FISH - ret nz - - ld a, b - add a - jr c, .max - - add b - jr nc, .done -.max - ld a, $ff -.done - ld b, a - ret - -MoonBallMultiplier: -; This function is buggy. -; Intent: multiply catch rate by 4 if mon evolves with moon stone -; Reality: no boost - -GLOBAL EvosAttacks -GLOBAL EvosAttacksPointers - - push bc - ld a, [TempEnemyMonSpecies] - dec a - ld c, a - ld b, 0 - ld hl, EvosAttacksPointers - add hl, bc - add hl, bc - ld a, BANK(EvosAttacksPointers) - call GetFarHalfword - pop bc - - push bc - ld a, BANK(EvosAttacks) - call GetFarByte - cp EVOLVE_ITEM - pop bc - ret nz - - inc hl - inc hl - inc hl - -; Moon Stone's constant from Pokémon Red is used. -; No Pokémon evolve with Burn Heal, -; so Moon Balls always have a catch rate of 1×. - push bc - ld a, BANK(EvosAttacks) - call GetFarByte - cp MOON_STONE_RED ; BURN_HEAL - pop bc - ret nz - - sla b - jr c, .max - sla b - jr nc, .done -.max - ld b, $ff -.done - ret - -LoveBallMultiplier: -; This function is buggy. -; Intent: multiply catch rate by 8 if mons are of same species, different sex -; Reality: multiply catch rate by 8 if mons are of same species, same sex - - ; does species match? - ld a, [TempEnemyMonSpecies] - ld c, a - ld a, [TempBattleMonSpecies] - cp c - ret nz - - ; check player mon species - push bc - ld a, [TempBattleMonSpecies] - ld [CurPartySpecies], a - xor a ; PARTYMON - ld [MonType], a - ld a, [CurBattleMon] - ld [CurPartyMon], a - callba GetGender - jr c, .done1 ; no effect on genderless - - ld d, 0 ; male - jr nz, .playermale - inc d ; female -.playermale - - ; check wild mon species - push de - ld a, [TempEnemyMonSpecies] - ld [CurPartySpecies], a - ld a, WILDMON - ld [MonType], a - callba GetGender - jr c, .done2 ; no effect on genderless - - ld d, 0 ; male - jr nz, .wildmale - inc d ; female -.wildmale - - ld a, d - pop de - cp d - pop bc - ret nz ; for the intended effect, this should be “ret z” - - sla b - jr c, .max - sla b - jr c, .max - sla b - ret nc -.max - ld b, $ff - ret - -.done2 - pop de - -.done1 - pop bc - ret - -FastBallMultiplier: -; This function is buggy. -; Intent: multiply catch rate by 4 if enemy mon is in one of the three -; FleeMons tables. -; Reality: multiply catch rate by 4 if enemy mon is one of the first three in -; the first FleeMons table. - ld a, [TempEnemyMonSpecies] - ld c, a - ld hl, FleeMons - ld d, 3 - -.loop - ld a, BANK(FleeMons) - call GetFarByte - - inc hl - cp -1 - jr z, .next - cp c - jr nz, .next ; for the intended effect, this should be “jr nz, .loop” - sla b - jr c, .max - - sla b - ret nc - -.max - ld b, $ff - ret - -.next - dec d - jr nz, .loop - ret - -LevelBallMultiplier: -; multiply catch rate by 8 if player mon level / 4 > enemy mon level -; multiply catch rate by 4 if player mon level / 2 > enemy mon level -; multiply catch rate by 2 if player mon level > enemy mon level - ld a, [BattleMonLevel] - ld c, a - ld a, [EnemyMonLevel] - cp c - ret nc ; if player is lower level, we're done here - sla b - jr c, .max - - srl c - cp c - ret nc ; if player/2 is lower level, we're done here - sla b - jr c, .max - - srl c - cp c - ret nc ; if player/4 is lower level, we're done here - sla b - ret nc - -.max - ld b, $ff - ret - -; These two texts were carried over from gen 1. -; They are not used in gen 2, and are dummied out. - -Text_RBY_CatchMarowak: ; 0xedab - ; It dodged the thrown BALL! This #MON can't be caught! - text_jump UnknownText_0x1c5a5a - db "@" -; 0xedb0 - -Text_RBY_NoShake: ; 0xedb0 - ; You missed the #MON! - text_jump UnknownText_0x1c5a90 - db "@" -; 0xedb5 - -Text_NoShake: ; 0xedb5 - ; Oh no! The #MON broke free! - text_jump UnknownText_0x1c5aa6 - db "@" -; 0xedba - -Text_OneShake: ; 0xedba - ; Aww! It appeared to be caught! - text_jump UnknownText_0x1c5ac3 - db "@" -; 0xedbf - -Text_TwoShakes: ; 0xedbf - ; Aargh! Almost had it! - text_jump UnknownText_0x1c5ae3 - db "@" -; 0xedc4 - -Text_ThreeShakes: ; 0xedc4 - ; Shoot! It was so close too! - text_jump UnknownText_0x1c5afa - db "@" -; 0xedc9 - -Text_GotchaMonWasCaught: ; 0xedc9 - ; Gotcha! @ was caught!@ @ - text_jump UnknownText_0x1c5b17 - start_asm - call WaitSFX - push bc - ld de, MUSIC_NONE - call PlayMusic - call DelayFrame - ld de, MUSIC_CAPTURE - call PlayMusic - pop bc - ld hl, TextJump_Waitbutton - ret -; ede6 - -TextJump_Waitbutton: ; 0xede6 - ; @ - text_jump Text_Waitbutton_2 - db "@" -; 0xedeb - -Text_SentToBillsPC: ; 0xedeb - ; was sent to BILL's PC. - text_jump UnknownText_0x1c5b38 - db "@" -; 0xedf0 - -Text_AddedToPokedex: ; 0xedf0 - ; 's data was newly added to the #DEX.@ @ - text_jump UnknownText_0x1c5b53 - db "@" -; 0xedf5 - -Text_AskNicknameNewlyCaughtMon: ; 0xedf5 - ; Give a nickname to @ ? - text_jump UnknownText_0x1c5b7f - db "@" -; 0xedfa - -ReturnToBattle_UseBall: ; edfa (3:6dfa) - callba _ReturnToBattle_UseBall - ret - -TownMap: ; ee01 - callba PokegearMap - ret -; ee08 - - -Bicycle: ; ee08 - callba BikeFunction - ret -; ee0f - - -MoonStone: -FireStone: -Thunderstone: -WaterStone: -LeafStone: -SunStone: ; ee0f - ld b, PARTYMENUACTION_EVO_STONE - call UseItem_SelectMon - - jp c, .DecidedNotToUse - - ld a, MON_ITEM - call GetPartyParamLocation - - ld a, [hl] - cp EVERSTONE - jr z, .NoEffect - - ld a, $1 - ld [wForceEvolution], a - callba EvolvePokemon - - ld a, [wMonTriedToEvolve] - and a - jr z, .NoEffect - - jp UseDisposableItem - -.NoEffect: - call WontHaveAnyEffectMessage - -.DecidedNotToUse: - xor a - ld [wItemEffectSucceeded], a - ret -; ee3d - - -HPUp: -Protein: -Iron: -Carbos: -Calcium: ; ee3d - ld b, PARTYMENUACTION_HEALING_ITEM - call UseItem_SelectMon - - jp c, RareCandy_StatBooster_ExitMenu - - call RareCandy_StatBooster_GetParameters - - call GetStatExpRelativePointer - - ld a, MON_STAT_EXP - call GetPartyParamLocation - - add hl, bc - ld a, [hl] - cp 100 - jr nc, NoEffectMessage - - add 10 - ld [hl], a - call UpdateStatsAfterItem - - call GetStatExpRelativePointer - - ld hl, StatStrings - add hl, bc - ld a, [hli] - ld h, [hl] - ld l, a - ld de, StringBuffer2 - ld bc, ITEM_NAME_LENGTH - call CopyBytes - - call Play_SFX_FULL_HEAL - - ld hl, Text_StatRose - call PrintText - - ld c, HAPPINESS_USEDITEM - callba ChangeHappiness - - jp UseDisposableItem - - -NoEffectMessage: ; ee83 - ld hl, WontHaveAnyEffectText - call PrintText - jp ClearPalettes -; ee8c - - -UpdateStatsAfterItem: ; ee8c - ld a, MON_MAXHP - call GetPartyParamLocation - ld d, h - ld e, l - ld a, MON_STAT_EXP - 1 - call GetPartyParamLocation - ld b, $1 - predef_jump CalcPkmnStats -; ee9f - -RareCandy_StatBooster_ExitMenu: ; ee9f - xor a - ld [wItemEffectSucceeded], a - jp ClearPalettes -; eea6 - - -Text_StatRose: ; 0xeea6 - ; 's @ rose. - text_jump UnknownText_0x1c5b9a - db "@" -; 0xeeab - - -StatStrings: ; eeab - dw .health - dw .attack - dw .defense - dw .speed - dw .special - -.health db "HEALTH@" -.attack db "ATTACK@" -.defense db "DEFENSE@" -.speed db "SPEED@" -.special db "SPECIAL@" -; eed9 - - -GetStatExpRelativePointer: ; eed9 - ld a, [CurItem] - ld hl, Table_eeeb -.next - cp [hl] - inc hl - jr z, .got_it - inc hl - jr .next - -.got_it - ld a, [hl] - ld c, a - ld b, 0 - ret -; eeeb - -Table_eeeb: ; eeeb - db HP_UP, MON_HP_EXP - MON_STAT_EXP - db PROTEIN, MON_ATK_EXP - MON_STAT_EXP - db IRON, MON_DEF_EXP - MON_STAT_EXP - db CARBOS, MON_SPD_EXP - MON_STAT_EXP - db CALCIUM, MON_SPC_EXP - MON_STAT_EXP -; eef5 - - -RareCandy_StatBooster_GetParameters: ; eef5 - ld a, [CurPartySpecies] - ld [CurSpecies], a - ld [wd265], a - ld a, MON_LEVEL - call GetPartyParamLocation - ld a, [hl] - ld [CurPartyLevel], a - call GetBaseData - ld a, [CurPartyMon] - ld hl, PartyMonNicknames - call GetNick - ret -; 0xef14 - - -RareCandy: ; ef14 - ld b, PARTYMENUACTION_HEALING_ITEM - call UseItem_SelectMon - - jp c, RareCandy_StatBooster_ExitMenu - - call RareCandy_StatBooster_GetParameters - - ld a, MON_LEVEL - call GetPartyParamLocation - - ld a, [hl] - cp MAX_LEVEL - jp nc, NoEffectMessage - - inc a - ld [hl], a - ld [CurPartyLevel], a - push de - ld d, a - callba CalcExpAtLevel - - pop de - ld a, MON_EXP - call GetPartyParamLocation - - ld a, [hMultiplicand] - ld [hli], a - ld a, [hMultiplicand + 1] - ld [hli], a - ld a, [hMultiplicand + 2] - ld [hl], a - - ld a, MON_MAXHP - call GetPartyParamLocation - ld a, [hli] - ld b, a - ld c, [hl] - push bc - call UpdateStatsAfterItem - - ld a, MON_MAXHP + 1 - call GetPartyParamLocation - - pop bc - ld a, [hld] - sub c - ld c, a - ld a, [hl] - sbc b - ld b, a - dec hl - ld a, [hl] - add c - ld [hld], a - ld a, [hl] - adc b - ld [hl], a - callba LevelUpHappinessMod - - ld a, PARTYMENUTEXT_LEVEL_UP - call ItemActionText - - xor a ; PARTYMON - ld [MonType], a - predef CopyPkmnToTempMon - - hlcoord 9, 0 - ld b, 10 - ld c, 9 - call TextBox - - hlcoord 11, 1 - ld bc, $0004 - predef PrintTempMonStats - - call WaitPressAorB_BlinkCursor - - xor a ; PARTYMON - ld [MonType], a - ld a, [CurPartySpecies] - ld [wd265], a - predef LearnLevelMoves - - xor a - ld [wForceEvolution], a - callba EvolvePokemon - - jp UseDisposableItem -; efad - - -HealPowder: ; efad - ld b, PARTYMENUACTION_HEALING_ITEM - call UseItem_SelectMon - - jp c, StatusHealer_ExitMenu - - call UseStatusHealer - - cp $0 - jr nz, .asm_efc9 - ld c, HAPPINESS_BITTERPOWDER - callba ChangeHappiness - - call LooksBitterMessage - - ld a, $0 - -.asm_efc9 - jp StatusHealer_Jumptable -; efcc - - -Antidote: -BurnHeal: -IceHeal: -Awakening: -ParlyzHeal: -FullHeal: -Psncureberry: -Przcureberry: -BurntBerry: -IceBerry: -MintBerry: -Miracleberry: ; efcc - ld b, PARTYMENUACTION_HEALING_ITEM - call UseItem_SelectMon - jp c, StatusHealer_ExitMenu - -FullyHealStatus: ; efd4 - call UseStatusHealer - jp StatusHealer_Jumptable -; efda - - -UseStatusHealer: ; efda (3:6fda) - call IsMonFainted - ld a, $1 - ret z - call GetItemHealingAction - ld a, MON_STATUS - call GetPartyParamLocation - ld a, [hl] - and c - jr nz, .good - call IsItemUsedOnConfusedMon - ld a, $1 - ret nc - ld b, PARTYMENUTEXT_HEAL_CONFUSION -.good - xor a - ld [hl], a - ld a, b - ld [PartyMenuActionText], a - call HealStatus - call Play_SFX_FULL_HEAL - call ItemActionTextWaitButton - call UseDisposableItem - ld a, $0 - ret - -IsItemUsedOnConfusedMon: ; f009 (3:7009) - call IsItemUsedOnBattleMon - jr nc, .nope - ld a, [PlayerSubStatus3] - bit SUBSTATUS_CONFUSED, a - jr z, .nope - ld a, c - cp $ff - jr nz, .nope - scf - ret - -.nope - and a - ret - -BattlemonRestoreHealth: ; f01e (3:701e) - call IsItemUsedOnBattleMon - ret nc - ld a, MON_HP - call GetPartyParamLocation - ld a, [hli] - ld [BattleMonHP], a - ld a, [hld] - ld [BattleMonHP + 1], a - ret - -HealStatus: ; f030 (3:7030) - call IsItemUsedOnBattleMon - ret nc - xor a - ld [BattleMonStatus], a - ld hl, PlayerSubStatus5 - res SUBSTATUS_TOXIC, [hl] - ld hl, PlayerSubStatus1 - res SUBSTATUS_NIGHTMARE, [hl] - call GetItemHealingAction - ld a, c - cp %11111111 - jr nz, .not_full_heal - ld hl, PlayerSubStatus3 - res SUBSTATUS_CONFUSED, [hl] -.not_full_heal - push bc - callba CalcPlayerStats - pop bc - ret - -GetItemHealingAction: ; f058 (3:7058) - push hl - ld a, [CurItem] - ld hl, .healingactions - ld bc, 3 -.next - cp [hl] - jr z, .found_it - add hl, bc - jr .next - -.found_it - inc hl - ld b, [hl] - inc hl - ld a, [hl] - ld c, a - cp %11111111 - pop hl - ret -; f071 (3:7071) - -.healingactions ; f071 -; item, party menu action text, status - db ANTIDOTE, PARTYMENUTEXT_HEAL_PSN, 1 << PSN - db BURN_HEAL, PARTYMENUTEXT_HEAL_BRN, 1 << BRN - db ICE_HEAL, PARTYMENUTEXT_HEAL_FRZ, 1 << FRZ - db AWAKENING, PARTYMENUTEXT_HEAL_SLP, SLP - db PARLYZ_HEAL, PARTYMENUTEXT_HEAL_PAR, 1 << PAR - db FULL_HEAL, PARTYMENUTEXT_HEAL_ALL, %11111111 - db FULL_RESTORE, PARTYMENUTEXT_HEAL_ALL, %11111111 - db HEAL_POWDER, PARTYMENUTEXT_HEAL_ALL, %11111111 - db PSNCUREBERRY, PARTYMENUTEXT_HEAL_PSN, 1 << PSN - db PRZCUREBERRY, PARTYMENUTEXT_HEAL_PAR, 1 << PAR - db BURNT_BERRY, PARTYMENUTEXT_HEAL_FRZ, 1 << FRZ - db ICE_BERRY, PARTYMENUTEXT_HEAL_BRN, 1 << BRN - db MINT_BERRY, PARTYMENUTEXT_HEAL_SLP, SLP - db MIRACLEBERRY, PARTYMENUTEXT_HEAL_ALL, %11111111 - db -1, 0, 0 -; f09e - -StatusHealer_Jumptable: ; f09e (3:709e) - ld hl, .dw - rst JumpTable - ret - -.dw ; f0a3 (3:70a3) - dw StatusHealer_ClearPalettes - dw StatusHealer_NoEffect - dw StatusHealer_ExitMenu - - -RevivalHerb: ; f0a9 - ld b, PARTYMENUACTION_HEALING_ITEM - call UseItem_SelectMon - jp c, StatusHealer_ExitMenu - - call RevivePokemon - cp 0 - jr nz, .asm_f0c5 - - ld c, HAPPINESS_REVIVALHERB - callba ChangeHappiness - call LooksBitterMessage - ld a, 0 - -.asm_f0c5 - jp StatusHealer_Jumptable -; f0c8 - - -Revive: -MaxRevive: ; f0c8 - ld b, PARTYMENUACTION_HEALING_ITEM - call UseItem_SelectMon - jp c, StatusHealer_ExitMenu - - call RevivePokemon - jp StatusHealer_Jumptable -; f0d6 - - -RevivePokemon: ; f0d6 - call IsMonFainted - ld a, 1 - ret nz - ld a, [wBattleMode] - and a - jr z, .skip_to_revive - - ld a, [CurPartyMon] - ld c, a - ld d, 0 - ld hl, wBattleParticipantsIncludingFainted - ld b, CHECK_FLAG - predef FlagPredef - ld a, c - and a - jr z, .skip_to_revive - - ld a, [CurPartyMon] - ld c, a - ld hl, wBattleParticipantsNotFainted - ld b, SET_FLAG - predef FlagPredef - -.skip_to_revive - xor a - ld [Danger], a - ld a, [CurItem] - cp REVIVE - jr z, .revive_half_hp - - call ReviveFullHP - jr .finish_revive - -.revive_half_hp - call ReviveHalfHP - -.finish_revive - call HealHP_SFX_GFX - ld a, PARTYMENUTEXT_REVIVE - ld [PartyMenuActionText], a - call ItemActionTextWaitButton - call UseDisposableItem - ld a, 0 - ret -; f128 - - -FullRestore: ; f128 - ld b, PARTYMENUACTION_HEALING_ITEM - call UseItem_SelectMon - jp c, StatusHealer_ExitMenu - - call IsMonFainted - jp z, StatusHealer_NoEffect - - call IsMonAtFullHealth - jr c, .NotAtFullHealth - - jp FullyHealStatus - -.NotAtFullHealth: - call .FullRestore - jp StatusHealer_Jumptable -; f144 - - -.FullRestore: ; f144 - xor a - ld [Danger], a - call ReviveFullHP - ld a, MON_STATUS - call GetPartyParamLocation - xor a - ld [hli], a - ld [hl], a - call HealStatus - call BattlemonRestoreHealth - call HealHP_SFX_GFX - ld a, PARTYMENUTEXT_HEAL_HP - ld [PartyMenuActionText], a - call ItemActionTextWaitButton - call UseDisposableItem - ld a, 0 - ret -; f16a - - -BitterBerry: ; f16a - ld hl, PlayerSubStatus3 - bit SUBSTATUS_CONFUSED, [hl] - ld a, 1 - jr z, .done - - res SUBSTATUS_CONFUSED, [hl] - xor a - ld [hBattleTurn], a - call UseItemText - - ld hl, ConfusedNoMoreText - call StdBattleTextBox - - ld a, 0 - -.done - jp StatusHealer_Jumptable -; f186 - - -MaxPotion: -HyperPotion: -SuperPotion: -Potion: -FreshWater: -SodaPop: -Lemonade: -MoomooMilk: -Ragecandybar: -BerryJuice: -Berry: -GoldBerry: ; f186 - call ItemRestoreHP - jp StatusHealer_Jumptable -; f18c - - -Energypowder: ; f18c - ld c, HAPPINESS_BITTERPOWDER - jr EnergypowderEnergyRootCommon -; f190 - -EnergyRoot: ; f190 - ld c, HAPPINESS_ENERGYROOT -; f192 - -EnergypowderEnergyRootCommon: ; f192 - push bc - call ItemRestoreHP - pop bc - cp 0 - jr nz, .skip_happiness - - callba ChangeHappiness - call LooksBitterMessage - ld a, 0 - -.skip_happiness - jp StatusHealer_Jumptable -; f1a9 - - -ItemRestoreHP: ; f1a9 (3:71a9) - ld b, PARTYMENUACTION_HEALING_ITEM - call UseItem_SelectMon - ld a, 2 - ret c - - call IsMonFainted - ld a, 1 - ret z - - call IsMonAtFullHealth - ld a, 1 - ret nc - - xor a - ld [Danger], a - call GetHealingItemAmount - call RestoreHealth - call BattlemonRestoreHealth - call HealHP_SFX_GFX - ld a, PARTYMENUTEXT_HEAL_HP - ld [PartyMenuActionText], a - call ItemActionTextWaitButton - call UseDisposableItem - ld a, 0 - ret - -HealHP_SFX_GFX: ; f1db (3:71db) - push de - ld de, SFX_POTION - call WaitPlaySFX - pop de - ld a, [CurPartyMon] - hlcoord 11, 0 - ld bc, SCREEN_WIDTH * 2 - call AddNTimes - ld a, $2 - ld [wWhichHPBar], a - predef_jump AnimateHPBar - -UseItem_SelectMon: ; f1f9 (3:71f9) - call .SelectMon - ret c - - ld a, [CurPartySpecies] - cp EGG - jr nz, .not_egg - - call CantUseOnEggMessage - scf - ret - -.not_egg - and a - ret - -.SelectMon: ; f20b (3:720b) - ld a, b - ld [PartyMenuActionText], a - push hl - push de - push bc - call ClearBGPalettes - call ChoosePkmnToUseItemOn - pop bc - pop de - pop hl - ret - -ChoosePkmnToUseItemOn: ; f21c (3:721c) - callba LoadPartyMenuGFX - callba InitPartyMenuWithCancel - callba InitPartyMenuGFX - callba WritePartyMenuTilemap - callba PrintPartyMenuText - call WaitBGMap - call SetPalettes - call DelayFrame - callba PartyMenuSelect - ret - -ItemActionText: ; f24a (3:724a) - ld [PartyMenuActionText], a - ld a, [CurPartySpecies] - push af - ld a, [CurPartyMon] - push af - push hl - push de - push bc - callba WritePartyMenuTilemap - callba PrintPartyMenuActionText - call WaitBGMap - call SetPalettes - call DelayFrame - pop bc - pop de - pop hl - pop af - ld [CurPartyMon], a - pop af - ld [CurPartySpecies], a - ret - -ItemActionTextWaitButton: ; f279 (3:7279) - xor a - ld [hBGMapMode], a - hlcoord 0, 0 - ld bc, TileMapEnd - TileMap - ld a, " " - call ByteFill - ld a, [PartyMenuActionText] - call ItemActionText - ld a, $1 - ld [hBGMapMode], a - ld c, 50 - call DelayFrames - jp WaitPressAorB_BlinkCursor - -StatusHealer_NoEffect: ; f299 (3:7299) - call WontHaveAnyEffectMessage - jr StatusHealer_ClearPalettes - -StatusHealer_ExitMenu: ; f29e (3:729e) - xor a - ld [wItemEffectSucceeded], a -StatusHealer_ClearPalettes: ; f2a2 (3:72a2) - call ClearPalettes - ret - -IsItemUsedOnBattleMon: ; f2a6 (3:72a6) - ld a, [wBattleMode] - and a - ret z - ld a, [CurPartyMon] - push hl - ld hl, CurBattleMon - cp [hl] - pop hl - jr nz, .nope - scf - ret - -.nope - xor a - ret - -ReviveHalfHP: ; f2ba (3:72ba) - call LoadHPFromBuffer1 - srl d - rr e - jr ContinueRevive - -ReviveFullHP: ; f2c3 (3:72c3) - call LoadHPFromBuffer1 -ContinueRevive: ; f2c6 (3:72c6) - ld a, MON_HP - call GetPartyParamLocation - ld [hl], d - inc hl - ld [hl], e - jp LoadCurHPIntoBuffer5 - -RestoreHealth: ; f2d1 (3:72d1) - ld a, MON_HP + 1 - call GetPartyParamLocation - ld a, [hl] - add e - ld [hld], a - ld a, [hl] - adc d - ld [hl], a - jr c, .full_hp - call LoadCurHPIntoBuffer5 - ld a, MON_HP + 1 - call GetPartyParamLocation - ld d, h - ld e, l - ld a, MON_MAXHP + 1 - call GetPartyParamLocation - ld a, [de] - sub [hl] - dec de - dec hl - ld a, [de] - sbc [hl] - jr c, .finish -.full_hp - call ReviveFullHP -.finish - ret - -RemoveHP: ; f2f9 (3:72f9) - ld a, MON_HP + 1 - call GetPartyParamLocation - ld a, [hl] - sub e - ld [hld], a - ld a, [hl] - sbc d - ld [hl], a - jr nc, .okay - xor a - ld [hld], a - ld [hl], a -.okay - call LoadCurHPIntoBuffer5 - ret - -IsMonFainted: ; f30d (3:730d) - push de - call LoadMaxHPToBuffer1 - call LoadCurHPToBuffer3 - call LoadHPFromBuffer3 - ld a, d - or e - pop de - ret - -IsMonAtFullHealth: ; f31b (3:731b) - call LoadHPFromBuffer3 - ld h, d - ld l, e - call LoadHPFromBuffer1 - ld a, l - sub e - ld a, h - sbc d - ret - -LoadCurHPIntoBuffer5: ; f328 (3:7328) - ld a, MON_HP - call GetPartyParamLocation - ld a, [hli] - ld [Buffer6], a - ld a, [hl] - ld [Buffer5], a - ret -; f336 (3:7336) - -LoadHPIntoBuffer5: ; f336 - ld a, d - ld [Buffer6], a - ld a, e - ld [Buffer5], a - ret -; f33f - -LoadHPFromBuffer5: ; f33f - ld a, [Buffer6] - ld d, a - ld a, [Buffer5] - ld e, a - ret -; f348 - -LoadCurHPToBuffer3: ; f348 (3:7348) - ld a, MON_HP - call GetPartyParamLocation - ld a, [hli] - ld [Buffer4], a - ld a, [hl] - ld [Buffer3], a - ret - -LoadHPFromBuffer3: ; f356 (3:7356) - ld a, [Buffer4] - ld d, a - ld a, [Buffer3] - ld e, a - ret - -LoadMaxHPToBuffer1: ; f35f (3:735f) - push hl - ld a, MON_MAXHP - call GetPartyParamLocation - ld a, [hli] - ld [Buffer2], a - ld a, [hl] - ld [Buffer1], a - pop hl - ret - -LoadHPFromBuffer1: ; f36f (3:736f) - ld a, [Buffer2] - ld d, a - ld a, [Buffer1] - ld e, a - ret - -GetOneFifthMaxHP: ; f378 (3:7378) - push bc - ld a, MON_MAXHP - call GetPartyParamLocation - ld a, [hli] - ld [hDividend + 0], a - ld a, [hl] - ld [hDividend + 1], a - ld a, 5 - ld [hDivisor], a - ld b, 2 - call Divide - ld a, [hQuotient + 1] - ld d, a - ld a, [hQuotient + 2] - ld e, a - pop bc - ret - -GetHealingItemAmount: ; f395 (3:7395) - push hl - ld a, [CurItem] - ld hl, .Healing - ld d, a -.next - ld a, [hli] - cp -1 - jr z, .NotFound - cp d - jr z, .done - inc hl - inc hl - jr .next - -.NotFound: - scf -.done - ld e, [hl] - inc hl - ld d, [hl] - pop hl - ret -; f3af (3:73af) - -.Healing: ; f3af - dbw FRESH_WATER, 50 - dbw SODA_POP, 60 - dbw LEMONADE, 80 - dbw HYPER_POTION, 200 - dbw SUPER_POTION, 50 - dbw POTION, 20 - dbw MAX_POTION, 999 - dbw FULL_RESTORE, 999 - dbw MOOMOO_MILK, 100 - dbw BERRY, 10 - dbw GOLD_BERRY, 30 - dbw ENERGYPOWDER, 50 - dbw ENERGY_ROOT, 200 - dbw RAGECANDYBAR, 20 - dbw BERRY_JUICE, 20 - dbw -1, 0 -; f3df - -Softboiled_MilkDrinkFunction: ; f3df (3:73df) -; Softboiled/Milk Drink in the field - ld a, [wPartyMenuCursor] - dec a - ld b, a - call .SelectMilkDrinkRecipient ; select pokemon - jr c, .skip - ld a, b - ld [CurPartyMon], a - call IsMonFainted - call GetOneFifthMaxHP - call RemoveHP - push bc - call HealHP_SFX_GFX - pop bc - call GetOneFifthMaxHP - ld a, c - ld [CurPartyMon], a - call IsMonFainted - call RestoreHealth - call HealHP_SFX_GFX - ld a, PARTYMENUTEXT_HEAL_HP - call ItemActionText - call JoyWaitAorB -.skip - ld a, b - inc a - ld [wPartyMenuCursor], a - ret - -.SelectMilkDrinkRecipient: ; f419 (3:7419) -.loop - push bc - ld a, PARTYMENUACTION_HEALING_ITEM - ld [PartyMenuActionText], a - call ChoosePkmnToUseItemOn - pop bc - jr c, .set_carry - ld a, [wPartyMenuCursor] - dec a - ld c, a - ld a, b - cp c - jr z, .cant_use ; chose the same mon as user - ld a, c - ld [CurPartyMon], a - call IsMonFainted - jr z, .cant_use - call IsMonAtFullHealth - jr nc, .cant_use - xor a - ret - -.set_carry - scf - ret - -.cant_use - push bc - ld hl, .Text_CantBeUsed - call MenuTextBoxBackup - pop bc - jr .loop -; f44a (3:744a) - -.Text_CantBeUsed: ; 0xf44a - ; That can't be used on this #MON. - text_jump UnknownText_0x1c5bac - db "@" -; 0xf44f - - -EscapeRope: ; f44f - xor a - ld [wItemEffectSucceeded], a - callba EscapeRopeFunction - - ld a, [wItemEffectSucceeded] - cp 1 - call z, UseDisposableItem - ret -; f462 - - -SuperRepel: ; f462 - ld b, 200 - jr UseRepel -; f466 - -MaxRepel: ; f466 - ld b, 250 - jr UseRepel -; f466 - -Repel: ; f46a - ld b, 100 -; f46c - -UseRepel: ; f46c - ld a, [wRepelEffect] - and a - ld hl, TextJump_RepelUsedEarlierIsStillInEffect - jp nz, PrintText - - ld a, b - ld [wRepelEffect], a - jp UseItemText - - -TextJump_RepelUsedEarlierIsStillInEffect: ; 0xf47d - ; The REPEL used earlier is still in effect. - text_jump Text_RepelUsedEarlierIsStillInEffect - db "@" -; 0xf482 - - -XAccuracy: ; f482 - ld hl, PlayerSubStatus4 - bit SUBSTATUS_X_ACCURACY, [hl] - jp nz, WontHaveAnyEffect_NotUsedMessage - set SUBSTATUS_X_ACCURACY, [hl] - jp UseItemText -; f48f - - -PokeDoll: ; f48f - ld a, [wBattleMode] - dec a - jr nz, .asm_f4a6 - inc a - ld [wForcedSwitch], a - ld a, [wBattleResult] - and 3 << 6 - or $2 - ld [wBattleResult], a - jp UseItemText - -.asm_f4a6 - xor a - ld [wItemEffectSucceeded], a - ret -; f4ab - - -GuardSpec: ; f4ab - ld hl, PlayerSubStatus4 - bit SUBSTATUS_MIST, [hl] - jp nz, WontHaveAnyEffect_NotUsedMessage - set SUBSTATUS_MIST, [hl] - jp UseItemText -; f4b8 - - -DireHit: ; f4b8 - ld hl, PlayerSubStatus4 - bit SUBSTATUS_FOCUS_ENERGY, [hl] - jp nz, WontHaveAnyEffect_NotUsedMessage - set SUBSTATUS_FOCUS_ENERGY, [hl] - jp UseItemText -; f4c5 - - -XAttack: -XDefend: -XSpeed: -XSpecial: ; f4c5 - call UseItemText - - ld a, [CurItem] - ld hl, .x_item_table - -.loop - cp [hl] - jr z, .got_it - inc hl - inc hl - jr .loop - -.got_it - inc hl - ld b, [hl] - xor a - ld [hBattleTurn], a - ld [AttackMissed], a - ld [EffectFailed], a - callba CheckIfStatCanBeRaised - call WaitSFX - - callba BattleCommand_StatUpMessage - callba BattleCommand_StatUpFailText - - ld a, [CurBattleMon] - ld [CurPartyMon], a - ld c, HAPPINESS_USEDXITEM - callba ChangeHappiness - ret -; f504 - -.x_item_table ; f504 - db X_ATTACK, ATTACK - db X_DEFEND, DEFENSE - db X_SPEED, SPEED - db X_SPECIAL, SP_ATTACK -; f50c - - -PokeFlute: ; f50c - ld a, [wBattleMode] - and a - jr nz, .dummy -.dummy - - xor a - ld [wd002], a - - ld b, $ff ^ SLP - - ld hl, PartyMon1Status - call .CureSleep - - ld a, [wBattleMode] - cp WILD_BATTLE - jr z, .skip_otrainer - ld hl, OTPartyMon1Status - call .CureSleep -.skip_otrainer - - ld hl, BattleMonStatus - ld a, [hl] - and b - ld [hl], a - ld hl, EnemyMonStatus - ld a, [hl] - and b - ld [hl], a - - ld a, [wd002] - and a - ld hl, .CatchyTune - jp z, PrintText - ld hl, .PlayedTheFlute - call PrintText - - ld a, [Danger] - and $80 - jr nz, .dummy2 -.dummy2 - ld hl, .AllSleepingMonWokeUp - jp PrintText - - -.CureSleep: - ld de, PARTYMON_STRUCT_LENGTH - ld c, PARTY_LENGTH - -.loop - ld a, [hl] - push af - and SLP - jr z, .not_asleep - ld a, 1 - ld [wd002], a -.not_asleep - pop af - and b - ld [hl], a - add hl, de - dec c - jr nz, .loop - ret -; f56c - - -.CatchyTune: ; 0xf56c - ; Played the # FLUTE. Now, that's a catchy tune! - text_jump UnknownText_0x1c5bf9 - db "@" -; 0xf571 - -.AllSleepingMonWokeUp: ; 0xf571 - ; All sleeping #MON woke up. - text_jump UnknownText_0x1c5c28 - db "@" -; 0xf576 - -.PlayedTheFlute: ; 0xf576 - ; played the # FLUTE.@ @ - text_jump UnknownText_0x1c5c44 - start_asm - ld a, [wBattleMode] - and a - jr nz, .battle - - push de - ld de, SFX_POKEFLUTE - call WaitPlaySFX - call WaitSFX - pop de - -.battle - jp PokeFluteTerminatorCharacter -; f58f - - -BlueCard: ; f58f - ld hl, .bluecardtext - jp MenuTextBoxWaitButton - -.bluecardtext - text_jump UnknownText_0x1c5c5e - db "@" -; f59a - - -CoinCase: ; f59a - ld hl, .coincasetext - jp MenuTextBoxWaitButton - -.coincasetext - text_jump UnknownText_0x1c5c7b - db "@" -; f5a5 - - -OldRod: ; f5a5 - ld e, $0 - jr UseRod -; f5a9 - -GoodRod: ; f5a9 - ld e, $1 - jr UseRod -; f5ad - -SuperRod: ; f5ad - ld e, $2 - jr UseRod -; f5b1 - -UseRod: ; f5b1 - callba FishFunction - ret -; f5b8 - - -Itemfinder: ; f5b8 - callba ItemFinder - ret -; f5bf - - -MaxElixer: -PPUp: -Ether: -MaxEther: -Elixer: -Mysteryberry: ; f5bf - ld a, [CurItem] - ld [wd002], a - -.loop - ; Party Screen opens to choose on which Pkmn to use the Item - ld b, PARTYMENUACTION_HEALING_ITEM - call UseItem_SelectMon - jp c, PPRestoreItem_Cancel - -.loop2 - ld a, [wd002] - cp MAX_ELIXER - jp z, Elixer_RestorePPofAllMoves - cp ELIXER - jp z, Elixer_RestorePPofAllMoves - - ld hl, TextJump_RaiseThePPOfWhichMove - ld a, [wd002] - cp PP_UP - jr z, .ppup - ld hl, TextJump_RestoreThePPOfWhichMove - -.ppup - call PrintText - - ld a, [CurMoveNum] - push af - xor a - ld [CurMoveNum], a - ld a, $2 - ld [wMoveSelectionMenuType], a - callba MoveSelectionScreen - pop bc - - ld a, b - ld [CurMoveNum], a - jr nz, .loop - ld hl, PartyMon1Moves - ld bc, PARTYMON_STRUCT_LENGTH - call GetMthMoveOfNthPartymon - - push hl - ld a, [hl] - ld [wd265], a - call GetMoveName - call CopyName1 - pop hl - - ld a, [wd002] - cp PP_UP - jp nz, Not_PP_Up - - ld a, [hl] - cp SKETCH - jr z, .CantUsePPUpOnSketch - - ld bc, $0015 - add hl, bc - ld a, [hl] - cp 3 << 6 ; have 3 PP Ups already been used? - jr c, .do_ppup - -.CantUsePPUpOnSketch: -.pp_is_maxed_out - ld hl, TextJump_PPIsMaxedOut - call PrintText - jr .loop2 - -.do_ppup - ld a, [hl] - add 1 << 6 ; increase PP Up count by 1 - ld [hl], a - ld a, $1 - ld [wd265], a - call ApplyPPUp - call Play_SFX_FULL_HEAL - - ld hl, TextJump_PPsIncreased - call PrintText - -FinishPPRestore: ; f64c - call ClearPalettes - jp UseDisposableItem -; f652 - -BattleRestorePP: ; f652 - ld a, [wBattleMode] - and a - jr z, .not_in_battle - ld a, [CurPartyMon] - ld b, a - ld a, [CurBattleMon] - cp b - jr nz, .not_in_battle - ld a, [PlayerSubStatus5] - bit SUBSTATUS_TRANSFORMED, a - jr nz, .not_in_battle - call .UpdateBattleMonPP - -.not_in_battle - call Play_SFX_FULL_HEAL - ld hl, UnknownText_0xf739 - call PrintText - jr FinishPPRestore - -.UpdateBattleMonPP: - ld a, [CurPartyMon] - ld hl, PartyMon1Moves - ld bc, PARTYMON_STRUCT_LENGTH - call AddNTimes - ld de, BattleMonMoves - ld b, NUM_MOVES -.loop - ld a, [de] - and a - jr z, .done - cp [hl] - jr nz, .next - push hl - push de - push bc - rept NUM_MOVES + 2 ; BattleMonPP - BattleMonMoves - inc de - endr - ld bc, MON_PP - MON_MOVES - add hl, bc - ld a, [hl] - ld [de], a - pop bc - pop de - pop hl - -.next - inc hl - inc de - dec b - jr nz, .loop - -.done - ret -; f6a7 - -Not_PP_Up: ; f6a7 - call RestorePP - jr nz, BattleRestorePP - jp PPRestoreItem_NoEffect -; f6af - -Elixer_RestorePPofAllMoves: ; f6af - xor a - ld hl, wMenuCursorY - ld [hli], a - ld [hl], a - ld b, NUM_MOVES -.moveLoop - push bc - ld hl, PartyMon1Moves - ld bc, PARTYMON_STRUCT_LENGTH - call GetMthMoveOfNthPartymon - ld a, [hl] - and a - jr z, .next - - call RestorePP - jr z, .next - ld hl, wMenuCursorX - inc [hl] - -.next - ld hl, wMenuCursorY - inc [hl] - pop bc - dec b - jr nz, .moveLoop - ld a, [wMenuCursorX] - and a - jp nz, BattleRestorePP - -PPRestoreItem_NoEffect: ; f6dd - call WontHaveAnyEffectMessage - -PPRestoreItem_Cancel: ; f6e0 - call ClearPalettes - xor a - ld [wItemEffectSucceeded], a - ret -; f6e8 - -RestorePP: ; f6e8 - xor a ; PARTYMON - ld [MonType], a - call GetMaxPPOfMove - ld hl, PartyMon1PP - ld bc, PARTYMON_STRUCT_LENGTH - call GetMthMoveOfNthPartymon - ld a, [wd265] - ld b, a - ld a, [hl] - and (1 << 6) - 1 - cp b - jr nc, .dont_restore - - ld a, [wd002] - cp MAX_ELIXER - jr z, .restore_all - cp MAX_ETHER - jr z, .restore_all - - ld c, 5 - cp MYSTERYBERRY - jr z, .restore_some - - ld c, 10 - -.restore_some - ld a, [hl] - and (1 << 6) - 1 - add c - cp b - jr nc, .restore_all - ld b, a - -.restore_all - ld a, [hl] - and 3 << 6 - or b - ld [hl], a - ret - -.dont_restore - xor a - ret -; f725 - -TextJump_RaiseThePPOfWhichMove: ; 0xf725 - ; Raise the PP of which move? - text_jump Text_RaiseThePPOfWhichMove - db "@" -; 0xf72a - -TextJump_RestoreThePPOfWhichMove: ; 0xf72a - ; Restore the PP of which move? - text_jump Text_RestoreThePPOfWhichMove - db "@" -; 0xf72f - -TextJump_PPIsMaxedOut: ; 0xf72f - ; 's PP is maxed out. - text_jump Text_PPIsMaxedOut - db "@" -; 0xf734 - -TextJump_PPsIncreased: ; 0xf734 - ; 's PP increased. - text_jump Text_PPsIncreased - db "@" -; 0xf739 - -UnknownText_0xf739: ; 0xf739 - ; PP was restored. - text_jump UnknownText_0x1c5cf1 - db "@" -; 0xf73e - - -Squirtbottle: ; f73e - callba _Squirtbottle - ret -; f745 - - -CardKey: ; f745 - callba _CardKey - ret -; f74c - - -BasementKey: ; f74c - callba _BasementKey - ret -; f753 - - -SacredAsh: ; f753 - callba _SacredAsh - ld a, [wItemEffectSucceeded] - cp $1 - ret nz - call UseDisposableItem - ret -; f763 - - -NormalBox: ; f763 - ld c, DECOFLAG_SILVER_TROPHY_DOLL - jr OpenBox -; f767 - -GorgeousBox: ; f767 - ld c, DECOFLAG_GOLD_TROPHY_DOLL -OpenBox: ; f769 - callba SetSpecificDecorationFlag - - ld hl, .text - call PrintText - - jp UseDisposableItem -; f778 - -.text ; 0xf778 - ; There was a trophy inside! - text_jump UnknownText_0x1c5d03 - db "@" -; 0xf77d - -Brightpowder: -Item19: -LuckyPunch: -MetalPowder: -Nugget: -Item2D: -Item32: -ExpShare: -SilverLeaf: -RedScale: -Secretpotion: -SSTicket: -MysteryEgg: -ClearBell: -SilverWing: -QuickClaw: -GoldLeaf: -SoftSand: -SharpBeak: -PoisonBarb: -KingsRock: -RedApricorn: -Tinymushroom: -BigMushroom: -Silverpowder: -BluApricorn: -Item5A: -AmuletCoin: -YlwApricorn: -GrnApricorn: -CleanseTag: -MysticWater: -Twistedspoon: -WhtApricorn: -Blackbelt: -BlkApricorn: -Item64: -PnkApricorn: -Blackglasses: -Slowpoketail: -PinkBow: -Stick: -SmokeBall: -Nevermeltice: -Magnet: -Pearl: -BigPearl: -Everstone: -SpellTag: -GsBall: -MiracleSeed: -ThickClub: -FocusBand: -Item78: -HardStone: -LuckyEgg: -MachinePart: -EggTicket: -LostItem: -Stardust: -StarPiece: -Pass: -Item87: -Item88: -Item89: -Charcoal: -ScopeLens: -Item8D: -Item8E: -MetalCoat: -DragonFang: -Item91: -Leftovers: -Item93: -Item94: -Item95: -DragonScale: -BerserkGene: -Item99: -Item9A: -Item9B: -FlowerMail: -ItemA2: -LightBall: -PolkadotBow: -ItemAB: -UpGrade: -ItemB0: -RainbowWing: -ItemB3: -TeruSama: ; f77d - jp IsntTheTimeMessage -; f780 - - -Play_SFX_FULL_HEAL: ; f780 - push de - ld de, SFX_FULL_HEAL - call WaitPlaySFX - pop de - ret -; f789 - -UseItemText: ; f789 - ld hl, UsedItemText - call PrintText - call Play_SFX_FULL_HEAL - call WaitPressAorB_BlinkCursor -UseDisposableItem: ; f795 - ld hl, NumItems - ld a, 1 - ld [wItemQuantityChangeBuffer], a - jp TossItem -; f7a0 - -UseBallInTrainerBattle: ; f7a0 - call ReturnToBattle_UseBall - ld de, ANIM_THROW_POKE_BALL - ld a, e - ld [FXAnimIDLo], a - ld a, d - ld [FXAnimIDHi], a - xor a - ld [wBattleAnimParam], a - ld [hBattleTurn], a - ld [wNumHits], a - predef PlayBattleAnim - ld hl, BlockedTheBallText - call PrintText - ld hl, DontBeAThiefText - call PrintText - jr UseDisposableItem -; f7ca - -WontHaveAnyEffect_NotUsedMessage: ; f7ca - ld hl, WontHaveAnyEffectText - call PrintText - - ; Item wasn't used. - ld a, $2 - ld [wItemEffectSucceeded], a - ret -; f7d6 - -LooksBitterMessage: ; f7d6 - ld hl, LooksBitterText - jp PrintText -; f7dc - -Ball_BoxIsFullMessage: ; f7dc - ld hl, Ball_BoxIsFullText - call PrintText - - ; Item wasn't used. - ld a, $2 - ld [wItemEffectSucceeded], a - ret -; f7e8 - -CantUseOnEggMessage: ; f7e8 - ld hl, CantUseOnEggText - jr CantUseItemMessage - -IsntTheTimeMessage: ; f7ed - ld hl, IsntTheTimeText - jr CantUseItemMessage - -WontHaveAnyEffectMessage: ; f7f2 - ld hl, WontHaveAnyEffectText - jr CantUseItemMessage - -BelongsToSomeoneElseMessage: ; f7f7 - ld hl, BelongsToSomeoneElseText - jr CantUseItemMessage - -CyclingIsntAllowedMessage: ; f7fc - ld hl, CyclingIsntAllowedText - jr CantUseItemMessage - -CantGetOnYourBikeMessage: ; f801 - ld hl, CantGetOnYourBikeText - -CantUseItemMessage: ; f804 -; Item couldn't be used. - xor a - ld [wItemEffectSucceeded], a - jp PrintText -; f80b - -LooksBitterText: ; 0xf80b - ; It looks bitter… - text_jump UnknownText_0x1c5d3e - db "@" -; 0xf810 - -CantUseOnEggText: ; 0xf810 - ; That can't be used on an EGG. - text_jump UnknownText_0x1c5d50 - db "@" -; 0xf815 - -IsntTheTimeText: ; 0xf815 - ; OAK: ! This isn't the time to use that! - text_jump UnknownText_0x1c5d6e - db "@" -; 0xf81a - -BelongsToSomeoneElseText: ; 0xf81a - ; That belongs to someone else! - text_jump UnknownText_0x1c5d97 - db "@" -; 0xf81f - -WontHaveAnyEffectText: ; 0xf81f - ; It won't have any effect. - text_jump UnknownText_0x1c5db6 - db "@" -; 0xf824 - -BlockedTheBallText: ; 0xf824 - ; The trainer blocked the BALL! - text_jump UnknownText_0x1c5dd0 - db "@" -; 0xf829 - -DontBeAThiefText: ; 0xf829 - ; Don't be a thief! - text_jump UnknownText_0x1c5def - db "@" -; 0xf82e - -CyclingIsntAllowedText: ; 0xf82e - ; Cycling isn't allowed here. - text_jump UnknownText_0x1c5e01 - db "@" -; 0xf833 - -CantGetOnYourBikeText: ; 0xf833 - ; Can't get on your @ now. - text_jump UnknownText_0x1c5e1d - db "@" -; 0xf838 - -Ball_BoxIsFullText: ; 0xf838 - ; The #MON BOX is full. That can't be used now. - text_jump UnknownText_0x1c5e3a - db "@" -; 0xf83d - -UsedItemText: ; 0xf83d - ; used the@ . - text_jump UnknownText_0x1c5e68 - db "@" -; 0xf842 - -GotOnTheItemText: ; 0xf842 - ; got on the@ . - text_jump UnknownText_0x1c5e7b - db "@" -; 0xf847 - -GotOffTheItemText: ; 0xf847 - ; got off@ the @ . - text_jump UnknownText_0x1c5e90 - db "@" -; 0xf84c - - -ApplyPPUp: ; f84c - ld a, MON_MOVES - call GetPartyParamLocation - push hl - ld de, Buffer1 - predef FillPP - pop hl - ld bc, MON_PP - MON_MOVES - add hl, bc - ld de, Buffer1 - ld b, 0 -.loop - inc b - ld a, b - cp NUM_MOVES + 1 - ret z - ld a, [wd265] - dec a - jr nz, .use - ld a, [wMenuCursorY] - inc a - cp b - jr nz, .skip - -.use - ld a, [hl] - and 3 << 6 - ld a, [de] ; wasted cycle - call nz, ComputeMaxPP - -.skip - inc hl - inc de - jr .loop -; f881 - - - -ComputeMaxPP: ; f881 - push bc - ; Divide the base PP by 5. - ld a, [de] - ld [hDividend + 3], a - xor a - ld [hDividend], a - ld [hDividend + 1], a - ld [hDividend + 2], a - ld a, 5 - ld [hDivisor], a - ld b, 4 - call Divide - ; Get the number of PP, which are bits 6 and 7 of the PP value stored in RAM. - ld a, [hl] - ld b, a - swap a - and $f - srl a - srl a - ld c, a - ; If this value is 0, we are done - and a - jr z, .NoPPUp - -.loop - ; Normally, a move with 40 PP would have 64 PP with three PP Ups. - ; Since this would overflow into bit 6, we prevent that from happening - ; by decreasing the extra amount of PP each PP Up provides, resulting - ; in a maximum of 61. - ld a, [hQuotient + 2] - cp $8 - jr c, .okay - ld a, $7 - -.okay - add b - ld b, a - ld a, [wd265] - dec a - jr z, .NoPPUp - dec c - jr nz, .loop - -.NoPPUp: - ld [hl], b - pop bc - ret -; f8b9 - -RestoreAllPP: ; f8b9 - ld a, MON_PP - call GetPartyParamLocation - push hl - ld a, MON_MOVES - call GetPartyParamLocation - pop de - xor a ; PARTYMON - ld [wMenuCursorY], a - ld [MonType], a - ld c, NUM_MOVES -.loop - ld a, [hli] - and a - ret z - push hl - push de - push bc - call GetMaxPPOfMove - pop bc - pop de - ld a, [de] - and 3 << 6 - ld b, a - ld a, [wd265] - add b - ld [de], a - inc de - ld hl, wMenuCursorY - inc [hl] - pop hl - dec c - jr nz, .loop - ret -; f8ec - - -GetMaxPPOfMove: ; f8ec - ld a, [StringBuffer1 + 0] - push af - ld a, [StringBuffer1 + 1] - push af - - ld a, [MonType] - and a - - ld hl, PartyMon1Moves - ld bc, PARTYMON_STRUCT_LENGTH - jr z, .got_partymon ; PARTYMON - - ld hl, OTPartyMon1Moves - dec a - jr z, .got_partymon ; OTPARTYMON - - ld hl, TempMonMoves - dec a - jr z, .got_nonpartymon ; BOXMON - - ld hl, TempMonMoves ; Wasted cycles - dec a - jr z, .got_nonpartymon ; TEMPMON - - ld hl, BattleMonMoves ; WILDMON - -.got_nonpartymon ; BOXMON, TEMPMON, WILDMON - call GetMthMoveOfCurrentMon - jr .gotdatmove - -.got_partymon ; PARTYMON, OTPARTYMON - call GetMthMoveOfNthPartymon - -.gotdatmove - ld a, [hl] - dec a - - push hl - ld hl, Moves + MOVE_PP - ld bc, MOVE_LENGTH - call AddNTimes - ld a, BANK(Moves) - call GetFarByte - ld b, a - ld de, StringBuffer1 - ld [de], a - pop hl - - push bc - ld bc, MON_PP - MON_MOVES - ld a, [MonType] - cp WILDMON - jr nz, .notwild - ld bc, EnemyMonPP - EnemyMonMoves -.notwild - add hl, bc - ld a, [hl] - and 3 << 6 - pop bc - - or b - ld hl, StringBuffer1 + 1 - ld [hl], a - xor a - ld [wd265], a - ld a, b ; this gets lost anyway - call ComputeMaxPP - ld a, [hl] - and (1 << 6) - 1 - ld [wd265], a - - pop af - ld [StringBuffer1 + 1], a - pop af - ld [StringBuffer1 + 0], a - ret -; f963 - -GetMthMoveOfNthPartymon: ; f963 - ld a, [CurPartyMon] - call AddNTimes - -GetMthMoveOfCurrentMon: ; f969 - ld a, [wMenuCursorY] - ld c, a - ld b, 0 - add hl, bc - ret -; f971 - -INCLUDE "items/pokeball_wobble.asm" |