ref: 8583cc4724144e255d61a2c7ed7dd70036bcdb6e
dir: /items/item_effects.asm/
_DoItemEffect:: ; e722 ld a, [CurItem] ld [$d265], a call GetItemName call CopyName1 ld a, 1 ld [$d0ec], 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, [IsInBattle] dec a jp nz, Functionf7a0 ld a, [PartyCount] cp PARTY_LENGTH jr nz, .asm_e8c0 ld a, $1 call GetSRAMBank ld a, [$ad10] cp 20 call CloseSRAM jp z, Ball_BoxIsFullMessage .asm_e8c0 xor a ld [$c64e], a ld a, [CurItem] cp PARK_BALL call nz, Functionedfa 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, .asm_e99c ld a, [CurItem] cp MASTER_BALL jp z, .asm_e99c ld a, [CurItem] ld c, a ld hl, BallMultiplierFunctionTable .asm_e8f2 ld a, [hli] cp $ff jr z, .asm_e906 cp c jr z, .asm_e8fe inc hl inc hl jr .asm_e8f2 .asm_e8fe ld a, [hli] ld h, [hl] ld l, a ld de, .asm_e906 push de jp [hl] .asm_e906 ld a, [CurItem] cp LEVEL_BALL ld a, b jp z, .asm_e98e ld a, b ld [$ffb6], 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, .asm_e940 srl d rr e srl d rr e srl b rr c srl b rr c ld a, c and a jr nz, .asm_e940 ld c, $1 .asm_e940 ld b, e push bc ld a, b sub c ld [hMultiplier], a xor a ld [hProduct], a ld [hMultiplicand], a ld [$ffb5], a call Multiply pop bc ld a, b ld [hDivisor], a ld b, $4 call Divide ld a, [$ffb6] 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. ld b, a ld a, [EnemyMonStatus] and 1 << FRZ | SLP ld c, 10 jr nz, .addstatus and a ld c, 5 jr nz, .addstatus ld c, 0 .addstatus ld a, b add c jr nc, .asm_e977 ld a, $ff .asm_e977 ld d, a push de ; BUG: callba overwrites a, ; and GetItem 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 GetItem ld a, b cp HELD_CATCH_CHANCE pop de ld a, d jr nz, .asm_e98e add c jr nc, .asm_e98e ld a, $ff .asm_e98e ld b, a ld [Buffer1], a call Random cp b ld a, 0 jr z, .asm_e99c jr nc, .asm_e99f .asm_e99c ld a, [EnemyMonSpecies] .asm_e99f ld [$c64e], a ld c, 20 call DelayFrames ld a, [CurItem] cp POKE_BALL + 1 ; Assumes Master/Ultra/Great come before jr c, .asm_e9b0 ld a, POKE_BALL .asm_e9b0 ld [$c689], 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 [$cfca], a predef PlayBattleAnim ld a, [$c64e] and a jr nz, .asm_e9f5 ld a, [Buffer2] cp $1 ld hl, UnknownText_0xedb5 jp z, .asm_ebdc cp $2 ld hl, UnknownText_0xedba jp z, .asm_ebdc cp $3 ld hl, UnknownText_0xedbf jp z, .asm_ebdc cp $4 ld hl, UnknownText_0xedc4 jp z, .asm_ebdc .asm_e9f5 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, .asm_ea13 jr .asm_ea1a .asm_ea13 ld a, DITTO ld [TempEnemyMonSpecies], a jr .asm_ea27 .asm_ea1a set 3, [hl] ld hl, $c6f2 ld a, [EnemyMonDVs] ld [hli], a ld a, [EnemyMonDVs + 1] ld [hl], a .asm_ea27 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, .asm_ea67 ld hl, $c735 ld de, EnemyMonMoves ld bc, NUM_MOVES call CopyBytes ld hl, $c739 ld de, EnemyMonPP ld bc, NUM_MOVES call CopyBytes .asm_ea67 ld a, [EnemyMonSpecies] ld [$c64e], a ld [CurPartySpecies], a ld [$d265], a ld a, [BattleType] cp BATTLETYPE_TUTORIAL jp z, .asm_ebd9 callba Function10607f ld hl, UnknownText_0xedc9 call PrintText call ClearSprites ld a, [$d265] dec a call CheckCaughtMon ld a, c push af ld a, [$d265] dec a call SetSeenAndCaughtMon pop af and a jr nz, .asm_eab7 call Function2ead jr z, .asm_eab7 ld hl, UnknownText_0xedf0 call PrintText call ClearSprites ld a, [EnemyMonSpecies] ld [$d265], a predef Functionfb877 .asm_eab7 ld a, [BattleType] cp BATTLETYPE_CONTEST jp z, .asm_ebd1 cp BATTLETYPE_CELEBI jr nz, .asm_eac8 ld hl, $d0ee set 6, [hl] .asm_eac8 ld a, [PartyCount] cp PARTY_LENGTH jr z, .asm_eb3c xor a ld [MonType], a call ClearSprites predef Functiond88c callba Function4db49 ld a, [CurItem] cp FRIEND_BALL jr nz, .asm_eaf8 ld a, [PartyCount] dec a ld hl, PartyMon1Happiness ld bc, PartyMon2 - PartyMon1 call AddNTimes ld a, FRIEND_BALL_HAPPINESS ld [hl], a .asm_eaf8 ld hl, UnknownText_0xedf5 call PrintText ld a, [CurPartySpecies] ld [$d265], a call GetPokemonName call YesNoBox jp c, .asm_ebe2 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 ld [MonType], a ld b, 0 callba Function116c1 call Function4b6 call Functione51 pop hl ld de, StringBuffer1 call InitName jp .asm_ebe2 .asm_eb3c call ClearSprites predef Functionde6e callba Function4db83 ld a, $1 call GetSRAMBank ld a, [$ad10] cp MONS_PER_BOX jr nz, .asm_eb5b ld hl, $d0ee set 7, [hl] .asm_eb5b ld a, [CurItem] cp FRIEND_BALL jr nz, .asm_eb67 ld a, FRIEND_BALL_HAPPINESS ld [$ad41], a .asm_eb67 call CloseSRAM ld hl, UnknownText_0xedf5 call PrintText ld a, [CurPartySpecies] ld [$d265], a call GetPokemonName call YesNoBox jr c, .asm_ebaf xor a ld [CurPartyMon], a ld a, BOXMON ld [MonType], a ld de, $d050 ld b, $0 callba Function116c1 ld a, $1 call GetSRAMBank ld hl, $d050 ld de, $b082 ld bc, $000b call CopyBytes ld hl, $b082 ld de, StringBuffer1 call InitName call CloseSRAM .asm_ebaf ld a, $1 call GetSRAMBank ld hl, $b082 ld de, $d050 ld bc, $000b call CopyBytes call CloseSRAM ld hl, UnknownText_0xedeb call PrintText call Function4b6 call Functione51 jr .asm_ebe2 .asm_ebd1 callba Functione6ce jr .asm_ebe2 .asm_ebd9 ld hl, UnknownText_0xedc9 .asm_ebdc call PrintText call ClearSprites .asm_ebe2 ld a, [BattleType] cp BATTLETYPE_TUTORIAL ret z cp 2 ret z cp BATTLETYPE_CONTEST jr z, .used_park_ball ld a, [$c64e] and a jr z, .toss call WhiteBGMap call ClearTileMap .toss ld hl, NumItems inc a ld [$d10c], a jp TossItem .used_park_ball ld hl, $dc79 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 8, 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 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 UnknownText_0xedab: ; 0xedab ; It dodged the thrown BALL! This #MON can't be caught! text_jump UnknownText_0x1c5a5a db "@" ; 0xedb0 UnknownText_0xedb0: ; 0xedb0 ; You missed the #MON! text_jump UnknownText_0x1c5a90 db "@" ; 0xedb5 UnknownText_0xedb5: ; 0xedb5 ; Oh no! The #MON broke free! text_jump UnknownText_0x1c5aa6 db "@" ; 0xedba UnknownText_0xedba: ; 0xedba ; Aww! It appeared to be caught! text_jump UnknownText_0x1c5ac3 db "@" ; 0xedbf UnknownText_0xedbf: ; 0xedbf ; Aargh! Almost had it! text_jump UnknownText_0x1c5ae3 db "@" ; 0xedc4 UnknownText_0xedc4: ; 0xedc4 ; Shoot! It was so close too! text_jump UnknownText_0x1c5afa db "@" ; 0xedc9 UnknownText_0xedc9: ; 0xedc9 ; Gotcha! @ was caught!@ @ text_jump UnknownText_0x1c5b17 start_asm ; 0xedce Functionedce: ; edce call WaitSFX push bc ld de, MUSIC_NONE call PlayMusic call DelayFrame ld de, MUSIC_CAPTURE call PlayMusic pop bc ld hl, UnknownText_0xede6 ret ; ede6 UnknownText_0xede6: ; 0xede6 ; @ text_jump UnknownText_0x1c5b35 db "@" ; 0xedeb UnknownText_0xedeb: ; 0xedeb ; was sent to BILL's PC. text_jump UnknownText_0x1c5b38 db "@" ; 0xedf0 UnknownText_0xedf0: ; 0xedf0 ; 's data was newly added to the #DEX.@ @ text_jump UnknownText_0x1c5b53 db "@" ; 0xedf5 UnknownText_0xedf5: ; 0xedf5 ; Give a nickname to @ ? text_jump UnknownText_0x1c5b7f db "@" ; 0xedfa Functionedfa: ; edfa (3:6dfa) callba Function2715c ret TownMap: ; ee01 callba Function91ae1 ret ; ee08 Bicycle: ; ee08 callba Functiond0b3 ret ; ee0f MoonStone: FireStone: Thunderstone: WaterStone: LeafStone: SunStone: ; ee0f ld b, $5 call Functionf1f9 jp c, .asm_ee38 ld a, PartyMon1Item - PartyMon1 call GetPartyParamLocation ld a, [hl] cp EVERSTONE jr z, .asm_ee35 ld a, $1 ld [$d1e9], a callba Function421d8 ld a, [$d268] and a jr z, .asm_ee35 jp Functionf795 .asm_ee35 call WontHaveAnyEffectMessage .asm_ee38 xor a ld [$d0ec], a ret ; ee3d HpUp: Protein: Iron: Carbos: Calcium: ; ee3d ld b, $1 call Functionf1f9 jp c, Functionee9f call Functioneef5 call Functioneed9 ld a, PartyMon1StatExp - PartyMon1 call GetPartyParamLocation add hl, bc ld a, [hl] cp 100 jr nc, Functionee83 add 10 ld [hl], a call Functionee8c call Functioneed9 ld hl, Strings_eeab add hl, bc ld a, [hli] ld h, [hl] ld l, a ld de, StringBuffer2 ld bc, $000d call CopyBytes call Functionf780 ld hl, UnknownText_0xeea6 call PrintText ld c, $2 callba ChangeHappiness jp Functionf795 Functionee83: ; ee83 ld hl, WontHaveAnyEffectText call PrintText jp ClearPalettes ; ee8c Functionee8c: ; ee8c ld a, PartyMon1MaxHP - PartyMon1 call GetPartyParamLocation ld d, h ld e, l ld a, PartyMon1HPExp - 1 - PartyMon1 call GetPartyParamLocation ld b, $1 predef_jump Functione167 ; ee9f Functionee9f: ; ee9f xor a ld [$d0ec], a jp ClearPalettes ; eea6 UnknownText_0xeea6: ; 0xeea6 ; 's @ rose. text_jump UnknownText_0x1c5b9a db "@" ; 0xeeab Strings_eeab: ; 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 Functioneed9: ; eed9 ld a, [CurItem] ld hl, Table_eeeb .next cp [hl] inc hl jr z, .asm_eee6 inc hl jr .next .asm_eee6 ld a, [hl] ld c, a ld b, 0 ret ; eeeb Table_eeeb: ; eeeb db HP_UP, PartyMon1HPExp - PartyMon1StatExp db PROTEIN, PartyMon1AtkExp - PartyMon1StatExp db IRON, PartyMon1DefExp - PartyMon1StatExp db CARBOS, PartyMon1SpdExp - PartyMon1StatExp db CALCIUM, PartyMon1SpcExp - PartyMon1StatExp ; eef5 Functioneef5: ; eef5 ld a, [CurPartySpecies] ld [CurSpecies], a ld [$d265], a ld a, PartyMon1Level - PartyMon1 call GetPartyParamLocation ld a, [hl] ld [CurPartyLevel], a call GetBaseData ld a, [CurPartyMon] ld hl, PartyMonNicknames call GetNick ret ; 0xef14 RareCandy: ; ef14 ld b, $1 call Functionf1f9 jp c, Functionee9f call Functioneef5 ld a, PartyMon1Level - PartyMon1 call GetPartyParamLocation ld a, [hl] cp MAX_LEVEL jp nc, Functionee83 inc a ld [hl], a ld [CurPartyLevel], a push de ld d, a callba Function50e47 pop de ld a, $8 call GetPartyParamLocation ld a, [hMultiplicand] ld [hli], a ld a, [$ffb5] ld [hli], a ld a, [$ffb6] ld [hl], a ld a, $24 call GetPartyParamLocation ld a, [hli] ld b, a ld c, [hl] push bc call Functionee8c ld a, $25 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 Function2709e ld a, $f8 call Functionf24a xor a ld [MonType], a predef Function5084a hlcoord 9, 0 ld b, 10 ld c, 9 call TextBox hlcoord 11, 1 ld bc, $0004 predef Function50b7b call Functiona80 xor a ld [MonType], a ld a, [CurPartySpecies] ld [$d265], a predef LearnLevelMoves xor a ld [$d1e9], a callba Function421d8 jp Functionf795 ; efad HealPowder: ; efad ld b, $1 call Functionf1f9 jp c, Functionf29e call Functionefda cp $0 jr nz, .asm_efc9 ld c, $f callba ChangeHappiness call LooksBitterMessage ld a, $0 .asm_efc9 jp Functionf09e ; efcc Antidote: BurnHeal: IceHeal: Awakening: ParlyzHeal: FullHeal: Psncureberry: Przcureberry: BurntBerry: IceBerry: MintBerry: Miracleberry: ; efcc ld b, $1 call Functionf1f9 jp c, Functionf29e Functionefd4: ; efd4 call Functionefda jp Functionf09e ; efda Functionefda: ; efda (3:6fda) call Functionf30d ld a, $1 ret z call Functionf058 ld a, $20 call GetPartyParamLocation ld a, [hl] and c jr nz, .asm_eff4 call Functionf009 ld a, $1 ret nc ld b, $f9 .asm_eff4 xor a ld [hl], a ld a, b ld [PartyMenuActionText], a ; $d141 call Functionf030 call Functionf780 call Functionf279 call Functionf795 ld a, $0 ret Functionf009: ; f009 (3:7009) call Functionf2a6 jr nc, .asm_f01c ld a, [PlayerSubStatus3] ; $c66a bit 7, a jr z, .asm_f01c ld a, c cp $ff jr nz, .asm_f01c scf ret .asm_f01c and a ret Functionf01e: ; f01e (3:701e) call Functionf2a6 ret nc ld a, $22 call GetPartyParamLocation ld a, [hli] ld [BattleMonHP], a ; $c63c ld a, [hld] ld [$c63d], a ret Functionf030: ; f030 (3:7030) call Functionf2a6 ret nc xor a ld [BattleMonStatus], a ; $c63a ld hl, PlayerSubStatus5 ; $c66c res 0, [hl] ld hl, PlayerSubStatus1 ; $c668 res 0, [hl] call Functionf058 ld a, c cp $ff jr nz, .asm_f04f ld hl, PlayerSubStatus3 ; $c66a res 7, [hl] .asm_f04f push bc callba Function365d7 pop bc ret Functionf058: ; f058 (3:7058) push hl ld a, [CurItem] ; $d106 ld hl, Table_f071 ld bc, 3 .next cp [hl] jr z, .asm_f068 add hl, bc jr .next .asm_f068 inc hl ld b, [hl] inc hl ld a, [hl] ld c, a cp %11111111 pop hl ret ; f071 (3:7071) Table_f071: ; f071 ; item, party menu action text, status db ANTIDOTE, $f0, 1 << PSN db BURN_HEAL, $f1, 1 << BRN db ICE_HEAL, $f2, 1 << FRZ db AWAKENING, $f3, SLP db PARLYZ_HEAL, $f4, 1 << PAR db FULL_HEAL, $f6, %11111111 db FULL_RESTORE, $f6, %11111111 db HEAL_POWDER, $f6, %11111111 db PSNCUREBERRY, $f0, 1 << PSN db PRZCUREBERRY, $f4, 1 << PAR db BURNT_BERRY, $f2, 1 << FRZ db ICE_BERRY, $f1, 1 << BRN db MINT_BERRY, $f3, SLP db MIRACLEBERRY, $f6, %11111111 db -1, 0, 0 ; f09e Functionf09e: ; f09e (3:709e) ld hl, Jumptable_f0a3 rst JumpTable ret Jumptable_f0a3: ; f0a3 (3:70a3) dw Functionf2a2 dw Functionf299 dw Functionf29e RevivalHerb: ; f0a9 ld b, $1 call Functionf1f9 jp c, Functionf29e call Functionf0d6 cp 0 jr nz, .asm_f0c5 ld c, $11 callba ChangeHappiness call LooksBitterMessage ld a, 0 .asm_f0c5 jp Functionf09e ; f0c8 Revive: MaxRevive: ; f0c8 ld b, $1 call Functionf1f9 jp c, Functionf29e call Functionf0d6 jp Functionf09e ; f0d6 Functionf0d6: ; f0d6 call Functionf30d ld a, 1 ret nz ld a, [IsInBattle] and a jr z, .asm_f104 ld a, [CurPartyMon] ld c, a ld d, 0 ld hl, $c6fc ld b, CHECK_FLAG predef FlagPredef ld a, c and a jr z, .asm_f104 ld a, [CurPartyMon] ld c, a ld hl, $c664 ld b, SET_FLAG predef FlagPredef .asm_f104 xor a ld [Danger], a ld a, [CurItem] cp REVIVE jr z, .asm_f114 call Functionf2c3 jr .asm_f117 .asm_f114 call Functionf2ba .asm_f117 call Functionf1db ld a, $f7 ld [PartyMenuActionText], a call Functionf279 call Functionf795 ld a, 0 ret ; f128 FullRestore: ; f128 ld b, 1 call Functionf1f9 jp c, Functionf29e call Functionf30d jp z, Functionf299 call Functionf31b jr c, .asm_f13e jp Functionefd4 .asm_f13e call Functionf144 jp Functionf09e ; f144 Functionf144: ; f144 xor a ld [Danger], a call Functionf2c3 ld a, PartyMon1Status - PartyMon1 call GetPartyParamLocation xor a ld [hli], a ld [hl], a call Functionf030 call Functionf01e call Functionf1db ld a, $f5 ld [PartyMenuActionText], a call Functionf279 call Functionf795 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 Functionf789 ld hl, ConfusedNoMoreText call StdBattleTextBox ld a, 0 .done jp Functionf09e ; f186 MaxPotion: HyperPotion: SuperPotion: Potion: FreshWater: SodaPop: Lemonade: MoomooMilk: Ragecandybar: BerryJuice: Berry: GoldBerry: ; f186 call Functionf1a9 jp Functionf09e ; f18c Energypowder: ; f18c ld c, $f jr Functionf192 ; f190 EnergyRoot: ; f190 ld c, $10 ; f192 Functionf192: ; f192 push bc call Functionf1a9 pop bc cp 0 jr nz, .asm_f1a6 callba ChangeHappiness call LooksBitterMessage ld a, 0 .asm_f1a6 jp Functionf09e ; f1a9 Functionf1a9: ; f1a9 (3:71a9) ld b, 1 call Functionf1f9 ld a, 2 ret c call Functionf30d ld a, 1 ret z call Functionf31b ld a, 1 ret nc xor a ld [Danger], a ; $c2a6 call Functionf395 call Functionf2d1 call Functionf01e call Functionf1db ld a, $f5 ld [PartyMenuActionText], a ; $d141 call Functionf279 call Functionf795 ld a, 0 ret Functionf1db: ; f1db (3:71db) push de ld de, SFX_POTION call WaitPlaySFX pop de ld a, [CurPartyMon] ; $d109 hlcoord 11, 0 ld bc, SCREEN_WIDTH * 2 call AddNTimes ld a, $2 ld [$d10a], a predef_jump Functionc6e0 Functionf1f9: ; f1f9 (3:71f9) call Functionf20b ret c ld a, [CurPartySpecies] ; $d108 cp EGG jr nz, .asm_f209 call CantUseOnEggMessage scf ret .asm_f209 and a ret Functionf20b: ; f20b (3:720b) ld a, b ld [PartyMenuActionText], a ; $d141 push hl push de push bc call WhiteBGMap call Functionf21c pop bc pop de pop hl ret Functionf21c: ; f21c (3:721c) callba Function5004f callba Function50405 callba Function503e0 callba WritePartyMenuTilemap callba PrintPartyMenuText call WaitBGMap call Function32f9 call DelayFrame callba PartyMenuSelect ret Functionf24a: ; f24a (3:724a) ld [PartyMenuActionText], a ; $d141 ld a, [CurPartySpecies] ; $d108 push af ld a, [CurPartyMon] ; $d109 push af push hl push de push bc callba WritePartyMenuTilemap callba Function50566 call WaitBGMap call Function32f9 call DelayFrame pop bc pop de pop hl pop af ld [CurPartyMon], a ; $d109 pop af ld [CurPartySpecies], a ; $d108 ret Functionf279: ; f279 (3:7279) xor a ld [hBGMapMode], a ; $ff00+$d4 ld hl, TileMap ; $c4a0 (aliases: SpritesEnd) ld bc, TileMapEnd - TileMap ld a, " " call ByteFill ld a, [PartyMenuActionText] ; $d141 call Functionf24a ld a, $1 ld [hBGMapMode], a ; $ff00+$d4 ld c, $32 call DelayFrames jp Functiona80 Functionf299: ; f299 (3:7299) call WontHaveAnyEffectMessage jr Functionf2a2 Functionf29e: ; f29e (3:729e) xor a ld [$d0ec], a Functionf2a2: ; f2a2 (3:72a2) call ClearPalettes ret Functionf2a6: ; f2a6 (3:72a6) ld a, [IsInBattle] ; $d22d (aliases: EnemyMonEnd) and a ret z ld a, [CurPartyMon] ; $d109 push hl ld hl, CurBattleMon ; $d0d4 cp [hl] pop hl jr nz, .asm_f2b8 scf ret .asm_f2b8 xor a ret Functionf2ba: ; f2ba (3:72ba) call Functionf36f srl d rr e jr asm_f2c6 Functionf2c3: ; f2c3 (3:72c3) call Functionf36f asm_f2c6: ; f2c6 (3:72c6) ld a, $22 call GetPartyParamLocation ld [hl], d inc hl ld [hl], e jp Functionf328 Functionf2d1: ; f2d1 (3:72d1) ld a, $23 call GetPartyParamLocation ld a, [hl] add e ld [hld], a ld a, [hl] adc d ld [hl], a jr c, .asm_f2f5 call Functionf328 ld a, $23 call GetPartyParamLocation ld d, h ld e, l ld a, $25 call GetPartyParamLocation ld a, [de] sub [hl] dec de dec hl ld a, [de] sbc [hl] jr c, .asm_f2f8 .asm_f2f5 call Functionf2c3 .asm_f2f8 ret Functionf2f9: ; f2f9 (3:72f9) ld a, $23 call GetPartyParamLocation ld a, [hl] sub e ld [hld], a ld a, [hl] sbc d ld [hl], a jr nc, .asm_f309 xor a ld [hld], a ld [hl], a .asm_f309 call Functionf328 ret Functionf30d: ; f30d (3:730d) push de call Functionf35f call Functionf348 call Functionf356 ld a, d or e pop de ret Functionf31b: ; f31b (3:731b) call Functionf356 ld h, d ld l, e call Functionf36f ld a, l sub e ld a, h sbc d ret Functionf328: ; f328 (3:7328) ld a, $22 call GetPartyParamLocation ld a, [hli] ld [$d1ef], a ld a, [hl] ld [$d1ee], a ret ; f336 (3:7336) Functionf336: ; f336 ld a, d ld [$d1ef], a ld a, e ld [$d1ee], a ret ; f33f Functionf33f: ; f33f ld a, [$d1ef] ld d, a ld a, [$d1ee] ld e, a ret ; f348 Functionf348: ; f348 (3:7348) ld a, $22 call GetPartyParamLocation ld a, [hli] ld [$d1ed], a ld a, [hl] ld [$d1ec], a ret Functionf356: ; f356 (3:7356) ld a, [$d1ed] ld d, a ld a, [$d1ec] ld e, a ret Functionf35f: ; f35f (3:735f) push hl ld a, $24 call GetPartyParamLocation ld a, [hli] ld [Buffer2], a ; $d1eb (aliases: MovementType) ld a, [hl] ld [Buffer1], a ; $d1ea (aliases: MagikarpLength) pop hl ret Functionf36f: ; f36f (3:736f) ld a, [Buffer2] ; $d1eb (aliases: MovementType) ld d, a ld a, [Buffer1] ; $d1ea (aliases: MagikarpLength) ld e, a ret Functionf378: ; f378 (3:7378) push bc ld a, PartyMon1MaxHP - PartyMon1 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 Functionf395: ; f395 (3:7395) push hl ld a, [CurItem] ; $d106 ld hl, Tablef3af ld d, a .next ld a, [hli] cp -1 jr z, .asm_f3a9 cp d jr z, .done inc hl inc hl jr .next .asm_f3a9 scf .done ld e, [hl] inc hl ld d, [hl] pop hl ret ; f3af (3:73af) Tablef3af: ; 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 Functionf3df: ; f3df (3:73df) ; Softboiled/Milk Drink in the field ld a, [$d0d8] dec a ld b, a call Functionf419 jr c, .asm_f413 ld a, b ld [CurPartyMon], a ; $d109 call Functionf30d call Functionf378 call Functionf2f9 push bc call Functionf1db pop bc call Functionf378 ld a, c ld [CurPartyMon], a ; $d109 call Functionf30d call Functionf2d1 call Functionf1db ld a, $f5 call Functionf24a call Functiona36 .asm_f413 ld a, b inc a ld [$d0d8], a ret Functionf419: ; f419 (3:7419) push bc ld a, $1 ld [PartyMenuActionText], a ; $d141 call Functionf21c pop bc jr c, .asm_f43e ld a, [$d0d8] dec a ld c, a ld a, b cp c jr z, .asm_f440 ld a, c ld [CurPartyMon], a ; $d109 call Functionf30d jr z, .asm_f440 call Functionf31b jr nc, .asm_f440 xor a ret .asm_f43e scf ret .asm_f440 push bc ld hl, UnknownText_0xf44a call Function1d67 pop bc jr Functionf419 ; f44a (3:744a) UnknownText_0xf44a: ; 0xf44a ; That can't be used on this #MON. text_jump UnknownText_0x1c5bac db "@" ; 0xf44f EscapeRope: ; f44f xor a ld [$d0ec], a callba Functioncb95 ld a, [$d0ec] cp 1 call z, Functionf795 ret ; f462 SuperRepel: ; f462 ld b, 200 jr Function_0xf46c ; f466 MaxRepel: ; f466 ld b, 250 jr Function_0xf46c ; f466 Repel: ; f46a ld b, 100 ; f46c Function_0xf46c: ; f46c ld a, [$dca1] and a ld hl, UnknownText_0xf47d jp nz, PrintText ld a, b ld [$dca1], a jp Functionf789 ; f47d UnknownText_0xf47d: ; 0xf47d ; The REPEL used earlier is still in effect. text_jump UnknownText_0x1c5bcd db "@" ; 0xf482 XAccuracy: ; f482 ld hl, PlayerSubStatus4 bit SUBSTATUS_X_ACCURACY, [hl] jp nz, WontHaveAnyEffect_NotUsedMessage set SUBSTATUS_X_ACCURACY, [hl] jp Functionf789 ; f48f PokeDoll: ; f48f ld a, [IsInBattle] dec a jr nz, .asm_f4a6 inc a ld [$d232], a ld a, [$d0ee] and $c0 or $2 ld [$d0ee], a jp Functionf789 .asm_f4a6 xor a ld [$d0ec], a ret ; f4ab GuardSpec: ; f4ab ld hl, PlayerSubStatus4 bit 1, [hl] jp nz, WontHaveAnyEffect_NotUsedMessage set 1, [hl] jp Functionf789 ; f4b8 DireHit: ; f4b8 ld hl, PlayerSubStatus4 bit 2, [hl] jp nz, WontHaveAnyEffect_NotUsedMessage set 2, [hl] jp Functionf789 ; f4c5 XAttack: XDefend: XSpeed: XSpecial: ; f4c5 call Functionf789 ld a, [CurItem] ld hl, Tablef504 .asm_f4ce cp [hl] jr z, .asm_f4d5 inc hl inc hl jr .asm_f4ce .asm_f4d5 inc hl ld b, [hl] xor a ld [hBattleTurn], a ld [AttackMissed], a ld [$c70d], a callba Function361ef call WaitSFX callba BattleCommand8c callba BattleCommand8e ld a, [CurBattleMon] ld [CurPartyMon], a ld c, $3 callba ChangeHappiness ret ; f504 Tablef504: ; f504 db X_ATTACK, ATTACK db X_DEFEND, DEFENSE db X_SPEED, SPEED db X_SPECIAL, SP_ATTACK ; f50c PokeFlute: ; f50c ld a, [IsInBattle] and a jr nz, .asm_f512 .asm_f512 xor a ld [$d002], a ld b, $ff ^ SLP ld hl, PartyMon1Status call .Functionf554 ld a, [IsInBattle] cp WILD_BATTLE jr z, .asm_f52b ld hl, OTPartyMon1Status call .Functionf554 .asm_f52b ld hl, BattleMonStatus ld a, [hl] and b ld [hl], a ld hl, EnemyMonStatus ld a, [hl] and b ld [hl], a ld a, [$d002] and a ld hl, UnknownText_0xf56c jp z, PrintText ld hl, UnknownText_0xf576 call PrintText ld a, [Danger] and $80 jr nz, .asm_f54e .asm_f54e ld hl, UnknownText_0xf571 jp PrintText .Functionf554 ld de, PartyMon2 - PartyMon1 ld c, PARTY_LENGTH .loop ld a, [hl] push af and SLP jr z, .asm_f564 ld a, 1 ld [$d002], a .asm_f564 pop af and b ld [hl], a add hl, de dec c jr nz, .loop ret ; f56c UnknownText_0xf56c: ; 0xf56c ; Played the # FLUTE. Now, that's a catchy tune! text_jump UnknownText_0x1c5bf9 db "@" ; 0xf571 UnknownText_0xf571: ; 0xf571 ; All sleeping #MON woke up. text_jump UnknownText_0x1c5c28 db "@" ; 0xf576 UnknownText_0xf576: ; 0xf576 ; played the # FLUTE.@ @ text_jump UnknownText_0x1c5c44 start_asm ; 0xf57b Function_0xf57b: ; f57b ld a, [IsInBattle] and a jr nz, .asm_f58c push de ld de, SFX_POKEFLUTE call WaitPlaySFX call WaitSFX pop de .asm_f58c jp Function13e0 ; f58f BlueCard: ; f58f ld hl, .bluecardtext jp Function2012 .bluecardtext text_jump UnknownText_0x1c5c5e db "@" ; f59a CoinCase: ; f59a ld hl, .coincasetext jp Function2012 .coincasetext text_jump UnknownText_0x1c5c7b db "@" ; f5a5 OldRod: ; f5a5 ld e, $0 jr Function_0xf5b1 ; f5a9 GoodRod: ; f5a9 ld e, $1 jr Function_0xf5b1 ; f5ad SuperRod: ; f5ad ld e, $2 jr Function_0xf5b1 ; f5b1 Function_0xf5b1: ; f5b1 callba Functioncf8e ret ; f5b8 Itemfinder: ; f5b8 callba Function12580 ret ; f5bf MaxElixer: PpUp: Ether: MaxEther: Elixer: Mysteryberry: ; f5bf ld a, [CurItem] ld [$d002], a .asm_f5c5 ld b, $1 call Functionf1f9 jp c, Functionf6e0 .asm_f5cd ld a, [$d002] cp MAX_ELIXER jp z, Functionf6af cp ELIXER jp z, Functionf6af ld hl, UnknownText_0xf725 ld a, [$d002] cp PP_UP jr z, .asm_f5e7 ld hl, UnknownText_0xf72a .asm_f5e7 call PrintText ld a, [CurMoveNum] push af xor a ld [CurMoveNum], a ld a, $2 ld [$d235], a callba Function3e4bc pop bc ld a, b ld [CurMoveNum], a jr nz, .asm_f5c5 ld hl, PartyMon1Moves ld bc, PartyMon2 - PartyMon1 call Functionf963 push hl ld a, [hl] ld [$d265], a call GetMoveName call CopyName1 pop hl ld a, [$d002] cp PP_UP jp nz, Functionf6a7 ld a, [hl] cp $a6 jr z, .asm_f62f ld bc, $0015 add hl, bc ld a, [hl] cp $c0 jr c, .asm_f637 .asm_f62f ld hl, UnknownText_0xf72f call PrintText jr .asm_f5cd .asm_f637 ld a, [hl] add $40 ld [hl], a ld a, $1 ld [$d265], a call Functionf84c call Functionf780 ld hl, UnknownText_0xf734 call PrintText Functionf64c: ; f64c call ClearPalettes jp Functionf795 ; f652 Functionf652: ; f652 ld a, [IsInBattle] and a jr z, .asm_f66c ld a, [CurPartyMon] ld b, a ld a, [CurBattleMon] cp b jr nz, .asm_f66c ld a, [PlayerSubStatus5] bit 3, a jr nz, .asm_f66c call .asm_f677 .asm_f66c call Functionf780 ld hl, UnknownText_0xf739 call PrintText jr Functionf64c .asm_f677 ld a, [CurPartyMon] ld hl, PartyMon1Moves ld bc, PartyMon2 - PartyMon1 call AddNTimes ld de, BattleMonMoves ld b, NUM_MOVES .asm_f688 ld a, [de] and a jr z, .asm_f6a6 cp [hl] jr nz, .asm_f6a1 push hl push de push bc rept NUM_MOVES + 2 ; BattleMonPP - BattleMonMoves inc de endr ld bc, PartyMon1PP - PartyMon1Moves add hl, bc ld a, [hl] ld [de], a pop bc pop de pop hl .asm_f6a1 inc hl inc de dec b jr nz, .asm_f688 .asm_f6a6 ret ; f6a7 Functionf6a7: ; f6a7 call Functionf6e8 jr nz, Functionf652 jp Functionf6dd ; f6af Functionf6af: ; f6af xor a ld hl, $cfa9 ld [hli], a ld [hl], a ld b, NUM_MOVES .asm_f6b7 push bc ld hl, PartyMon1Moves ld bc, PartyMon2 - PartyMon1 call Functionf963 ld a, [hl] and a jr z, .asm_f6ce call Functionf6e8 jr z, .asm_f6ce ld hl, $cfaa inc [hl] .asm_f6ce ld hl, $cfa9 inc [hl] pop bc dec b jr nz, .asm_f6b7 ld a, [$cfaa] and a jp nz, Functionf652 Functionf6dd: ; f6dd call WontHaveAnyEffectMessage Functionf6e0: ; f6e0 call ClearPalettes xor a ld [$d0ec], a ret ; f6e8 Functionf6e8: ; f6e8 xor a ld [MonType], a call Functionf8ec ld hl, PartyMon1PP ld bc, PartyMon2 - PartyMon1 call Functionf963 ld a, [$d265] ld b, a ld a, [hl] and $3f cp b jr nc, .asm_f723 ld a, [$d002] cp MAX_ELIXER jr z, .asm_f71d cp MAX_ETHER jr z, .asm_f71d ld c, 5 cp MYSTERYBERRY jr z, .asm_f715 ld c, 10 .asm_f715 ld a, [hl] and $3f add c cp b jr nc, .asm_f71d ld b, a .asm_f71d ld a, [hl] and $c0 or b ld [hl], a ret .asm_f723 xor a ret ; f725 UnknownText_0xf725: ; 0xf725 ; Raise the PP of which move? text_jump UnknownText_0x1c5c8a db "@" ; 0xf72a UnknownText_0xf72a: ; 0xf72a ; Restore the PP of which move? text_jump UnknownText_0x1c5ca7 db "@" ; 0xf72f UnknownText_0xf72f: ; 0xf72f ; 's PP is maxed out. text_jump UnknownText_0x1c5cc6 db "@" ; 0xf734 UnknownText_0xf734: ; 0xf734 ; 's PP increased. text_jump UnknownText_0x1c5cdd 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, [$d0ec] cp $1 ret nz call Functionf795 ret ; f763 NormalBox: ; f763 ld c, $2c jr Function_0xf769 ; f767 GorgeousBox: ; f767 ld c, $2b ; f769 Function_0xf769: ; f769 callba Function26f02 ld hl, UnknownText_0xf778 call PrintText jp Functionf795 ; f778 UnknownText_0xf778: ; 0xf778 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: ; f77d jp IsntTheTimeMessage ; f780 Functionf780: ; f780 push de ld de, SFX_FULL_HEAL call WaitPlaySFX pop de ret ; f789 Functionf789: ; f789 ld hl, UsedItemText call PrintText call Functionf780 call Functiona80 ; fallthrough ; f795 Functionf795: ; f795 ld hl, NumItems ld a, 1 ld [$d10c], a jp TossItem ; f7a0 Functionf7a0: ; f7a0 call Functionedfa ld de, ANIM_THROW_POKE_BALL ld a, e ld [FXAnimIDLo], a ld a, d ld [FXAnimIDHi], a xor a ld [$c689], a ld [hBattleTurn], a ld [$cfca], a predef PlayBattleAnim ld hl, BlockedTheBallText call PrintText ld hl, DontBeAThiefText call PrintText jr Functionf795 ; f7ca WontHaveAnyEffect_NotUsedMessage: ; f7ca ld hl, WontHaveAnyEffectText call PrintText ; Item wasn't used. ld a, $2 ld [$d0ec], 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 [$d0ec], 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 [$d0ec], 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 Functionf84c: ; f84c ld a, PartyMon1Moves - PartyMon1 call GetPartyParamLocation push hl ld de, Buffer1 predef FillPP pop hl ld bc, PartyMon1PP - PartyMon1Moves add hl, bc ld de, Buffer1 ld b, 0 .asm_f864 inc b ld a, b cp NUM_MOVES + 1 ret z ld a, [$d265] dec a jr nz, .asm_f876 ld a, [$cfa9] inc a cp b jr nz, .asm_f87d .asm_f876 ld a, [hl] and $c0 ld a, [de] call nz, Functionf881 .asm_f87d inc hl inc de jr .asm_f864 ; f881 Functionf881: ; f881 push bc 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 ld a, [hl] ld b, a swap a and $f srl a srl a ld c, a and a jr z, .asm_f8b6 .asm_f8a3 ld a, [$ffb6] cp $8 jr c, .asm_f8ab ld a, $7 .asm_f8ab add b ld b, a ld a, [$d265] dec a jr z, .asm_f8b6 dec c jr nz, .asm_f8a3 .asm_f8b6 ld [hl], b pop bc ret ; f8b9 Functionf8b9: ; f8b9 ld a, PartyMon1PP - PartyMon1 call GetPartyParamLocation push hl ld a, PartyMon1Moves - PartyMon1 call GetPartyParamLocation pop de xor a ld [$cfa9], a ld [MonType], a ld c, NUM_MOVES .loop ld a, [hli] and a ret z push hl push de push bc call Functionf8ec pop bc pop de ld a, [de] and $c0 ld b, a ld a, [$d265] add b ld [de], a inc de ld hl, $cfa9 inc [hl] pop hl dec c jr nz, .loop ret ; f8ec Functionf8ec: ; f8ec ld a, [StringBuffer1 + 0] push af ld a, [StringBuffer1 + 1] push af ld a, [MonType] and a ld hl, PartyMon1Moves ld bc, PartyMon2 - PartyMon1 jr z, .asm_f91a ld hl, OTPartyMon1Moves dec a jr z, .asm_f91a ld hl, TempMonMoves dec a jr z, .asm_f915 ld hl, TempMonMoves dec a jr z, .asm_f915 ld hl, BattleMonMoves .asm_f915 call Functionf969 jr .asm_f91d .asm_f91a call Functionf963 .asm_f91d 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, PartyMon1PP - PartyMon1Moves ld a, [MonType] cp WILDMON jr nz, .asm_f942 ld bc, EnemyMonPP - EnemyMonMoves .asm_f942 add hl, bc ld a, [hl] and $c0 pop bc or b ld hl, $d074 ld [hl], a xor a ld [$d265], a ld a, b call Functionf881 ld a, [hl] and $3f ld [$d265], a pop af ld [StringBuffer1 + 1], a pop af ld [StringBuffer1 + 0], a ret ; f963 Functionf963: ; f963 ld a, [CurPartyMon] call AddNTimes Functionf969: ; f969 ld a, [$cfa9] ld c, a ld b, 0 add hl, bc ret ; f971