pokegold/items/item_effects.asm

2883 lines
44 KiB
NASM
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

DoItemEffect_:: ; e7a6 (3:67a6)
ld a, [wd002]
ld [wd151], a
call GetItemName
call Function317b
ld a, $1
ld [wFieldMoveSucceeded], a
ld a, [wd002]
dec a
ld hl, .ItemEffects
rst JumpTable
ret
.ItemEffects
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 Item47
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 Item73
dw Item74
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 Item81
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
FastBall: ; e926
FriendBall: ; e926
GreatBall: ; e926
HeavyBall: ; e926
LevelBall: ; e926
LoveBall: ; e926
LureBall: ; e926
MasterBall: ; e926
MoonBall: ; e926
ParkBall: ; e926
PokeBall: ; e926
UltraBall: ; e926
ld a, [wBattleMode]
dec a
jp nz, Functionf7e7
ld a, [wPartyCount]
cp PARTY_LENGTH
jr nz, .room_in_party_or_pc
ld a, $1
call OpenSRAM
ld a, [$ad6c]
cp $14
call CloseSRAM
jp z, FailToUseBall
.room_in_party_or_pc
xor a
ld [wWildMon], a
ld a, [wd002]
cp PARK_BALL
call nz, ReturnToBattle_UseBall
ld hl, wOptions
res NO_TEXT_SCROLL, [hl]
ld hl, Text_UsedItem ; $7884
call PrintText
ld a, [wd114]
ld b, a
ld a, [wBattleType]
cp BATTLETYPE_TUTORIAL
jp z, .catch_without_fail
ld a, [wd002]
cp MASTER_BALL
jp z, .catch_without_fail
ld a, [wd002]
ld c, a
ld hl, BallMultiplierFunctionTable ; $6c73
.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, [wd002]
cp LEVEL_BALL
ld a, b
jp z, .skip_hp_calc
ld a, b
ld [hPrintNum4], a
ld hl, wEnemyMonHP
ld b, [hl]
inc hl
ld c, [hl]
inc hl
ld d, [hl]
inc hl
ld e, [hl]
; (3 * MaxHP - 2 * CurHP) / (3 * MaxHP) * level
sla c
rl b
ld h, d
ld l, e
add hl, de
add hl, de
ld d, h
ld e, l
; This routine is buggy. The intention is to get de, the Max HP score,
; to be an 8-bit number. To do this, we divide both bc and de by 4.
; It only does this division once, and doesn't check to make sure that
; e is not zero. In addition to passing along a divide-by-zero error,
; this could also cause an unusually small denominator to be passed,
; sending the resulting catch rate through the floor.
ld a, d
and a
jr z, .okay_hp_div
srl d
rr e
srl d
rr e
srl b
rr c
srl b
rr c
ld a, c
and a
jr nz, .okay_hp_div
ld c, $1
.okay_hp_div
ld b, e
push bc
ld a, b
sub c
ld [hRemainder], a
xor a
ld [hDividend], a
ld [hQuotient], a
ld [hStringCmpString2], a
call Multiply
pop bc
ld a, b
ld [hRemainder], a
ld b, $4
call Divide
ld a, [hPrintNum4]
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, [wEnemyMonStatus]
and 1 << FRZ | SLP
ld c, $a
jr nz, .add_status
; ld a, [wEnemyMonStatus]
and a
ld c, $5
jr nz, .add_status
ld c, $0
.add_status
ld a, b
add c
jr nc, .max_catch_rate
ld a, $ff
.max_catch_rate
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, [wBattleMonItem]
; ld b, a
callba GetItemHeldEffect ; d:7e9b
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 [wCurHPAnimMaxHP], a
call Random
cp b
ld a, $0
jr z, .catch_without_fail
jr nc, .asm_ea23
.catch_without_fail
ld a, [wEnemyMonSpecies]
.asm_ea23
ld [wWildMon], a
ld c, 20
call DelayFrames
ld a, [wd002]
cp POKE_BALL + 1
jr c, .asm_ea34
ld a, $5
.asm_ea34
ld [wcb67], a
ld de, ANIM_THROW_POKE_BALL
ld a, e
ld [wcf3e], a
ld a, d
ld [wcf3f], a
xor a
ld [hBattleTurn], a
ld [wBuffer2], a
ld [wcf46], a
predef PlayBattleAnim
ld a, [wWildMon]
and a
jr nz, .caught
ld a, [wBuffer2]
cp $1
ld hl, Text_ThePokemonBrokeFree ; $6e09
jp z, .break_free
cp $2
ld hl, Text_AppearedToBeCaught ; $6e0e
jp z, .break_free
cp $3
ld hl, Text_AarghAlmostHadIt ; $6e13
jp z, .break_free
cp $4
ld hl, Text_ShootItWasSoCloseToo ; $6e18
jp z, .break_free
.caught
ld hl, wEnemyMonStatus
ld a, [hli]
push af
inc hl
ld a, [hli]
push af
ld a, [hl]
push af
push hl
ld hl, wEnemyMonItem
ld a, [hl]
push af
push hl
ld hl, wEnemySubStatus5
ld a, [hl]
push af
set SUBSTATUS_TRANSFORMED, [hl]
bit SUBSTATUS_TRANSFORMED, a
jr nz, .ditto
jr .not_ditto
.ditto
ld a, DITTO
ld [wTempEnemyMonSpecies], a
jr .load_data
.not_ditto
set SUBSTATUS_TRANSFORMED, [hl]
ld hl, wcbd0
ld a, [wEnemyMonDVs]
ld [hli], a
ld a, [wEnemyMonMovesEnd + 1]
ld [hl], a
.load_data
ld a, [wTempEnemyMonSpecies]
ld [wCurPartySpecies], a
ld a, [wEnemyMonLevel]
ld [wCurPartyLevel], a
callba LoadEnemyMon
pop af
ld [wEnemySubStatus5], 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, wEnemySubStatus5
bit SUBSTATUS_TRANSFORMED, [hl]
jr nz, .transformed
ld hl, wWildMonMoves
ld de, wEnemyMonMoves
ld bc, NUM_MOVES
call CopyBytes
ld hl, wWildMonPP
ld de, wEnemyMonPP
ld bc, NUM_MOVES
call CopyBytes
.transformed
ld a, [wEnemyMonSpecies]
ld [wWildMon], a
ld [wd004], a
ld [wd151], a
ld a, [wBattleType]
cp BATTLETYPE_TUTORIAL
jp z, .finish_tutorial
ld hl, Text_GotchaMonWasCaught ; $6e1d
call PrintText
call ClearSprites
ld a, [wd151]
dec a
call CheckCaughtMon
ld a, c
push af
ld a, [wd151]
dec a
call SetSeenAndCaughtMon
pop af
and a
jr nz, .skip_dex
call CheckReceivedDex
jr z, .skip_dex
ld hl, Text_MonNewlyAddedToPokedex ; $6e44
call PrintText
call ClearSprites
ld a, [wEnemyMonSpecies]
ld [wd151], a
predef NewPokedexEntry
.skip_dex
ld a, [wBattleType]
cp BATTLETYPE_CONTEST
jp z, .catch_bug_contest_mon
ld a, [wPartyCount]
cp PARTY_LENGTH
jr z, .send_mon_to_pc
xor a
ld [wMonType], a
call ClearSprites
predef TryAddMonToParty
ld a, [wd002]
cp FRIEND_BALL
jr nz, .skip_party_mon_friend_ball
ld a, [wPartyCount]
dec a
ld hl, wPartyMon1Happiness
ld bc, PARTYMON_STRUCT_LENGTH
call AddNTimes
ld a, FRIEND_BALL_HAPPINESS
ld [hl], a
.skip_party_mon_friend_ball
ld hl, Text_AskNicknameNewlyCaughtMon ; $6e49
call PrintText
ld a, [wCurPartySpecies]
ld [wd151], a
call GetPokemonName
call YesNoBox
jp c, .end_ball_function
ld a, [wPartyCount]
dec a
ld [wd005], a
ld hl, wPartyMon1Nickname
ld bc, PKMN_NAME_LENGTH
call AddNTimes
ld d, h
ld e, l
push de
xor a
ld [wMonType], a
ld b, $0
callba NamingScreen
call RotateThreePalettesRight
call Functiond9e
pop hl
ld de, wStringBuffer1
call InitName
jp .end_ball_function
.send_mon_to_pc
call ClearSprites
predef SentPkmnIntoBox
ld a, BANK(sBoxCount)
call OpenSRAM
ld a, [sBoxCount]
cp MONS_PER_BOX
jr nz, .not_full_yet
ld hl, wBattleResult
set 7, [hl]
.not_full_yet
ld a, [wd002]
cp FRIEND_BALL
jr nz, .skip_box_mon_friend_ball
ld a, FRIEND_BALL_HAPPINESS
ld [sBoxMon1Happiness], a
.skip_box_mon_friend_ball
call CloseSRAM
ld hl, Text_AskNicknameNewlyCaughtMon ; $6e49
call PrintText
ld a, [wd004]
ld [wd151], a
call GetPokemonName
call YesNoBox
jr c, .init_name_in_sram
xor a
ld [wd005], a
ld a, $2
ld [wMonType], a
ld de, wMonOrItemNameBuffer
ld b, $0
callba NamingScreen
ld a, $1
call OpenSRAM
ld hl, wMonOrItemNameBuffer
ld de, sBoxMonNicknames
ld bc, PKMN_NAME_LENGTH
call CopyBytes
ld hl, sBoxMonNicknames
ld de, wStringBuffer1
call InitName
call CloseSRAM
.init_name_in_sram
ld a, $1
call OpenSRAM
ld hl, sBoxMonNicknames
ld de, wMonOrItemNameBuffer
ld bc, PKMN_NAME_LENGTH
call CopyBytes
call CloseSRAM
ld hl, Text_SentToBillsPC ; $6e3f
call PrintText
call RotateThreePalettesRight
call Functiond9e
jr .end_ball_function
.catch_bug_contest_mon
callba BugContest_SetCaughtContestMon ; same bank
jr .end_ball_function
.finish_tutorial
ld hl, Text_GotchaMonWasCaught ; $6e1d
.break_free
call PrintText
call ClearSprites
.end_ball_function
ld a, [wBattleType]
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, wNumItems
inc a
ld [wd009], a
jp TossItem
.used_park_ball
ld hl, wParkBalls
dec [hl]
ret
BallMultiplierFunctionTable: ; ec73
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:
sla b
ret nc
ld b, $ff
ret
GreatBallMultiplier:
SafariBallMultiplier:
ParkBallMultiplier:
ld a, b
srl a
add b
ld b, a
ret nc
ld b, $ff
ret
HeavyBallMultiplier:
ld a, [wEnemyMon]
dec a
ld hl, PokedexDataPointerTable
ld e, a
ld d, $0
add hl, de
add hl, de
rlca
rlca
and $3
add BANK(PokedexEntries1) ; $68
ld d, a
ld a, BANK(PokedexDataPointerTable)
call GetFarHalfword
.loop
ld a, d
call GetFarByte
inc hl
cp "@"
jr nz, .loop
ld a, d
push bc
inc hl
inc hl
call GetFarHalfword
srl h
rr l
ld b, h
ld c, l
srl b
rr c
srl b
rr c
srl b
rr c
srl b
rr c
call .sub_bc
srl b
rr c
call .sub_bc
ld a, h
pop bc
jr .compare
.sub_bc
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 ; $6d18
.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:
ld a, [wBattleType]
cp BATTLETYPE_FISH
ret nz
ld a, b
add a
jr c, .asm_ed2d
add b
jr nc, .asm_ed2f
.asm_ed2d
ld a, $ff
.asm_ed2f
ld b, a
ret
MoonBallMultiplier:
; This function is buggy.
; Intent: multiply catch rate by 4 if mon evolves with moon stone
; Reality: no boost
push bc
ld a, [wTempEnemyMonSpecies]
dec a
ld c, a
ld b, $0
ld hl, EvosAttacksPointers ; $67bd
add hl, bc
add hl, bc
ld a, BANK(EvosAttacksPointers) ; $10
call GetFarHalfword
pop bc
push bc
ld a, BANK(EvosAttacksPointers) ; $10
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(EvosAttacksPointers) ; $10
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
ld a, [wTempEnemyMonSpecies]
ld c, a
ld a, [wd0ee]
cp c
ret nz
push bc
ld a, [wd0ee]
ld [wCurPartySpecies], a
xor a
ld [wMonType], a
ld a, [wCurBattleMon]
ld [wd005], a
callba GetGender ; 14:52f1
jr c, .asm_edba
ld d, $0
jr nz, .asm_ed8d
inc d
.asm_ed8d
push de
ld a, [wTempEnemyMonSpecies]
ld [wd004], a
ld a, $4
ld [wMonType], a
callba GetGender ; 14:52f1
jr c, .asm_edb9
ld d, $0
jr nz, .asm_eda6
inc d
.asm_eda6
ld a, d
pop de
cp d
pop bc
ret nz ; for the intended effect, this should be “ret z”
sla b
jr c, .asm_edb6
sla b
jr c, .asm_edb6
sla b
ret nc
.asm_edb6
ld b, $ff
ret
.asm_edb9
pop de
.asm_edba
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, [wTempEnemyMonSpecies]
ld c, a
ld hl, FleeMons
ld d, $3
.asm_edc5
ld a, BANK(FleeMons)
call GetFarByte
inc hl
cp $ff
jr z, .asm_eddc
cp c
jr nz, .asm_eddc ; for the intended effect, this should be “jr nz, .loop”
sla b
jr c, .asm_edd9
sla b
ret nc
.asm_edd9
ld b, $ff
ret
.asm_eddc
dec d
jr nz, .asm_edc5
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, [wBattleMonLevel]
ld c, a
ld a, [wEnemyMonLevel]
cp c
ret nc
sla b
jr c, .asm_edfc
srl c
cp c
ret nc
sla b
jr c, .asm_edfc
srl c
cp c
ret nc
sla b
ret nc
.asm_edfc
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_ThisMonCantBeCaught:
text_jump Text_ThisMonCantBeCaught_
db "@"
Text_YouMissedThePokemon:
text_jump Text_YouMissedThePokemon_
db "@"
Text_ThePokemonBrokeFree:
text_jump Text_ThePokemonBrokeFree_
db "@"
Text_AppearedToBeCaught:
text_jump Text_AppearedToBeCaught_
db "@"
Text_AarghAlmostHadIt:
text_jump Text_AarghAlmostHadIt_
db "@"
Text_ShootItWasSoCloseToo:
text_jump Text_ShootItWasSoCloseToo_
db "@"
Text_GotchaMonWasCaught:
text_jump Text_GotchaMonWasCaught_
start_asm
call WaitSFX
push bc
ld de, MUSIC_NONE
call PlayMusic
call DelayFrame
ld de, MUSIC_CAPTURE
call PlayMusic
pop bc
ld hl, Text_CaughtMonWaitbutton
ret
Text_CaughtMonWaitbutton:
text_jump Text_CaughtMonWaitbutton_
db "@"
Text_SentToBillsPC:
text_jump Text_SentToBillsPC_
db "@"
Text_MonNewlyAddedToPokedex:
text_jump Text_MonNewlyAddedToPokedex_
db "@"
Text_AskNicknameNewlyCaughtMon:
text_jump Text_AskNicknameNewlyCaughtMon_
db "@"
ReturnToBattle_UseBall: ; ee4e (3:6e4e)
callba ReturnToBattle_UseBall_ ; 9:7307
ret
TownMap: ; ee55 (3:6e55)
callba TownMap_ ; 24:5a4f
ret
Bicycle: ; ee5c
callba BicycleFunction ; same bank
ret
FireStone: ; ee63
LeafStone: ; ee63
MoonStone: ; ee63
SunStone: ; ee63
Thunderstone: ; ee63
WaterStone: ; ee63
ld b, PARTYMENUACTION_EVO_STONE
call Functionf24f
jp c, .cancel
ld a, MON_ITEM
call GetPartyParamLocation
ld a, [hl]
cp EVERSTONE
jr z, .failed
ld a, $1
ld [wd0d2], a
callba EvolvePokemon ; 10:61db
ld a, [wd154]
and a
jr z, .failed
jp Functionf7dc
.failed
call Functionf839
.cancel
xor a
ld [wFieldMoveSucceeded], a
ret
Calcium: ; ee91
Carbos: ; ee91
HPUp: ; ee91
Iron: ; ee91
Protein: ; ee91
ld b, PARTYMENUACTION_HEALING_ITEM
call Functionf24f
jp c, Functioneef3
call Functionef49
call Functionef2d
ld a, MON_STAT_EXP
call GetPartyParamLocation
add hl, bc
ld a, [hl]
cp 100
jr nc, Functioneed7
add 10
ld [hl], a
call Functioneee0
call Functionef2d
ld hl, StatStrings
add hl, bc
ld a, [hli]
ld h, [hl]
ld l, a
ld de, wStringBuffer2
ld bc, ITEM_NAME_LENGTH
call CopyBytes
call Functionf7c7
ld hl, Text_StatRoseFromVitamin ; $6efa
call PrintText
ld c, HAPPINESS_USEDITEM
callba ChangeHappiness
jp Functionf7dc
Functioneed7:
ld hl, Text_WontHaveAnyEffect ; $7866
call PrintText
jp ClearPalettes
Functioneee0: ; eee0 (3:6ee0)
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
Functioneef3: ; eef3 (3:6ef3)
xor a
ld [wFieldMoveSucceeded], a
jp ClearPalettes
Text_StatRoseFromVitamin:
text_jump Text_StatRoseFromVitamin_
db "@"
StatStrings:
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@"
Functionef2d: ; ef2d (3:6f2d)
ld a, [wd002]
ld hl, StatOffsets
.asm_ef33
cp [hl]
inc hl
jr z, .asm_ef3a
inc hl
jr .asm_ef33
.asm_ef3a
ld a, [hl]
ld c, a
ld b, $0
ret
StatOffsets:
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
Functionef49: ; ef49 (3:6f49)
ld a, [wd004]
ld [wCurSpecies], a
ld [wd151], a
ld a, $1f
call GetPartyParamLocation
ld a, [hl]
ld [wCurPartyLevel], a
call GetBaseData
ld a, [wd005]
ld hl, wPartyMonNicknames
call GetNick
ret
RareCandy: ; ef68 (3:6f68)
ld b, PARTYMENUACTION_HEALING_ITEM
call Functionf24f
jp c, Functioneef3
call Functionef49
ld a, MON_LEVEL
call GetPartyParamLocation
ld a, [hl]
cp MAX_LEVEL
jp nc, Functioneed7
inc a
ld [hl], a
ld [wCurPartyLevel], a
push de
ld d, a
callba CalcExpAtLevel
pop de
ld a, $8
call GetPartyParamLocation
ld a, [hQuotient]
ld [hli], a
ld a, [hPrintNum3]
ld [hli], a
ld a, [hPrintNum4]
ld [hl], a
ld a, $24
call GetPartyParamLocation
ld a, [hli]
ld b, a
ld c, [hl]
push bc
call Functioneee0
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
ld c, $1
callba ChangeHappiness
ld a, PARTYMENUTEXT_LEVEL_UP
call Functionf2a0
xor a
ld [wMonType], a
predef CopyPkmnToTempMon
hlcoord 9, 0
ld b, 10
ld c, 9
call TextBox
hlcoord 11, 1
ld bc, $4
predef PrintTempMonStats
call WaitPressAorB_BlinkCursor
xor a
ld [wMonType], a
ld a, [wd004]
ld [wd151], a
predef LearnLevelMoves
xor a
ld [wd0d2], a
callba EvolvePokemon
jp Functionf7dc
HealPowder: ; f003 (3:7003)
ld b, $1
call Functionf24f
jp c, Functionf2f4
call Functionf030
cp $0
jr nz, .asm_f01f
ld c, $f
callba ChangeHappiness
call Functionf81d
ld a, $0
.asm_f01f
jp Functionf0f4
Antidote: ; f022
Awakening: ; f022
BurnHeal: ; f022
BurntBerry: ; f022
FullHeal: ; f022
IceBerry: ; f022
IceHeal: ; f022
MintBerry: ; f022
Miracleberry: ; f022
ParlyzHeal: ; f022
Przcureberry: ; f022
Psncureberry: ; f022
ld b, $1
call Functionf24f
jp c, Functionf2f4
Functionf02a:
call Functionf030
jp Functionf0f4
Functionf030: ; f030 (3:7030)
call Functionf363
ld a, $1
ret z
call Functionf0ae
ld a, MON_STATUS
call GetPartyParamLocation
ld a, [hl]
and c
jr nz, .asm_f04a
call Functionf05f
ld a, $1
ret nc
ld b, PARTYMENUTEXT_HEAL_CONFUSION
.asm_f04a
xor a
ld [hl], a
ld a, b
ld [wd03e], a
call Functionf086
call Functionf7c7
call Functionf2cf
call Functionf7dc
ld a, $0
ret
Functionf05f: ; f05f (3:705f)
call Functionf2fc
jr nc, .asm_f072
ld a, [wPlayerSubStatus3]
bit SUBSTATUS_CONFUSED, a
jr z, .asm_f072
ld a, c
cp $ff
jr nz, .asm_f072
scf
ret
.asm_f072
and a
ret
RestoreBattlemonHP:
call Functionf2fc
ret nc
ld a, $22
call GetPartyParamLocation
ld a, [hli]
ld [wBattleMonHP], a
ld a, [hld]
ld [wBattleMonHP + 1], a
ret
Functionf086: ; f086 (3:7086)
call Functionf2fc
ret nc
xor a
ld [wBattleMonStatus], a
ld hl, wPlayerSubStatus5
res 0, [hl]
ld hl, wPlayerSubStatus1
res 0, [hl]
call Functionf0ae
ld a, c
cp $ff
jr nz, .asm_f0a5
ld hl, wPlayerSubStatus3
res 7, [hl]
.asm_f0a5
push bc
callba CalcPlayerStats ; d:66f6
pop bc
ret
Functionf0ae: ; f0ae (3:70ae)
push hl
ld a, [wd002]
ld hl, .healingactions ; $70c7
ld bc, $3
.asm_f0b8
cp [hl]
jr z, .asm_f0be
add hl, bc
jr .asm_f0b8
.asm_f0be
inc hl
ld b, [hl]
inc hl
ld a, [hl]
ld c, a
cp $ff
pop hl
ret
.healingactions
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
Functionf0f4: ; f0f4 (3:70f4)
ld hl, .Jumptable ; $70f9
rst JumpTable
ret
.Jumptable:
dw Functionf2f8
dw Functionf2ef
dw Functionf2f4
RevivalHerb: ; f0ff
ld b, $1
call Functionf24f
jp c, Functionf2f4
call Functionf12c
cp $0
jr nz, .asm_f11b
ld c, $11
callba ChangeHappiness
call Functionf81d
ld a, $0
.asm_f11b
jp Functionf0f4
MaxRevive: ; f11e
Revive: ; f11e
ld b, $1
call Functionf24f
jp c, Functionf2f4
call Functionf12c
jp Functionf0f4
Functionf12c: ; f12c (3:712c)
call Functionf363
ld a, $1
ret nz
ld a, [wBattleMode]
and a
jr z, .asm_f15a
ld a, [wd005]
ld c, a
ld d, $0
ld hl, wcbda
ld b, CHECK_FLAG
predef FlagPredef
ld a, c
and a
jr z, .asm_f15a
ld a, [wd005]
ld c, a
ld hl, wcb42
ld b, SET_FLAG
predef FlagPredef
.asm_f15a
xor a
ld [wDanger], a
ld a, [wd002]
cp REVIVE
jr z, .asm_f16a
call Functionf319
jr .asm_f16d
.asm_f16a
call Functionf310
.asm_f16d
call Functionf231
ld a, $f7
ld [wd03e], a
call Functionf2cf
call Functionf7dc
ld a, $0
ret
FullRestore: ; f17e (3:717e)
ld b, $1
call Functionf24f
jp c, Functionf2f4
call Functionf363
jp z, Functionf2ef
call CalculateCurHPAnimRemainingHP
jr c, .asm_f194
jp Functionf02a
.asm_f194
call Functionf19a
jp Functionf0f4
Functionf19a: ; f19a (3:719a)
xor a
ld [wDanger], a
call Functionf319
ld a, $20
call GetPartyParamLocation
xor a
ld [hli], a
ld [hl], a
call Functionf086
call RestoreBattlemonHP
call Functionf231
ld a, $f5
ld [wd03e], a
call Functionf2cf
call Functionf7dc
ld a, $0
ret
BitterBerry: ; f1c0
ld hl, wPlayerSubStatus3
bit 7, [hl]
ld a, $1
jr z, .asm_f1d9
res 7, [hl]
xor a
ld [hBattleTurn], a
call Functionf7d0
ld hl, Text_ConfusedNoMore ; $5746
call StdBattleTextBox
ld a, $0
.asm_f1d9
jp Functionf0f4
Berry: ; f1dc
BerryJuice: ; f1dc
FreshWater: ; f1dc
GoldBerry: ; f1dc
HyperPotion: ; f1dc
Lemonade: ; f1dc
MaxPotion: ; f1dc
MoomooMilk: ; f1dc
Potion: ; f1dc
Ragecandybar: ; f1dc
SodaPop: ; f1dc
SuperPotion: ; f1dc
call Functionf1ff
jp Functionf0f4
Energypowder: ; f1e2 (3:71e2)
ld c, $f
jr asm_f1e8
EnergyRoot: ; f1e6 (3:71e6)
ld c, $10
asm_f1e8
push bc
call Functionf1ff
pop bc
cp $0
jr nz, .asm_f1fc
callba ChangeHappiness
call Functionf81d
ld a, $0
.asm_f1fc
jp Functionf0f4
Functionf1ff: ; f1ff (3:71ff)
ld b, PARTYMENUACTION_HEALING_ITEM
call Functionf24f
ld a, $2
ret c
call Functionf363
ld a, $1
ret z
call CalculateCurHPAnimRemainingHP
ld a, $1
ret nc
xor a
ld [wDanger], a
call Functionf3eb
call Functionf327
call RestoreBattlemonHP
call Functionf231
ld a, PARTYMENUTEXT_HEAL_HP
ld [wd03e], a
call Functionf2cf
call Functionf7dc
ld a, $0
ret
Functionf231: ; f231 (3:7231)
push de
ld de, $4
call WaitPlaySFX
pop de
ld a, [wd005]
hlcoord 11, 0
ld bc, $28
call AddNTimes
ld a, $2
ld [wd007], a
predef_jump AnimateHPBar
Functionf24f: ; f24f (3:724f)
call Functionf261
ret c
ld a, [wCurPartySpecies]
cp EGG
jr nz, .asm_f25f
call Functionf82f
scf
ret
.asm_f25f
and a
ret
Functionf261: ; f261 (3:7261)
ld a, b
ld [wd03e], a
push hl
push de
push bc
call ClearBGPalettes
call Functionf272
pop bc
pop de
pop hl
ret
Functionf272: ; f272 (3:7272)
callba LoadPartyMenuGFX
callba InitPartyMenuWithCancel
callba InitPartyMenuGFX
callba WritePartyMenuTilemap
callba PrintPartyMenuText
call WaitBGMap
call SetPalettes
call DelayFrame
callba PartyMenuSelect
ret
Functionf2a0: ; f2a0 (3:72a0)
ld [wd03e], a
ld a, [wCurPartySpecies]
push af
ld a, [wd005]
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 [wd005], a
pop af
ld [wCurPartySpecies], a
ret
Functionf2cf: ; f2cf (3:72cf)
xor a
ld [hBGMapMode], a
hlcoord 0, 0
ld bc, SCREEN_HEIGHT * SCREEN_WIDTH
ld a, " "
call ByteFill
ld a, [wd03e]
call Functionf2a0
ld a, $1
ld [hBGMapMode], a
ld c, 50
call DelayFrames
jp WaitPressAorB_BlinkCursor
Functionf2ef: ; f2ef (3:72ef)
call Functionf839
jr Functionf2f8
Functionf2f4: ; f2f4 (3:72f4)
xor a
ld [wFieldMoveSucceeded], a
Functionf2f8: ; f2f8 (3:72f8)
call ClearPalettes
ret
Functionf2fc: ; f2fc (3:72fc)
ld a, [wBattleMode]
and a
ret z
ld a, [wd005]
push hl
ld hl, wCurBattleMon
cp [hl]
pop hl
jr nz, .asm_f30e
scf
ret
.asm_f30e
xor a
ret
Functionf310: ; f310 (3:7310)
call GetCurHPAnimMaxHP
srl d
rr e
jr asm_f31c
Functionf319: ; f319 (3:7319)
call GetCurHPAnimMaxHP
asm_f31c
ld a, MON_HP
call GetPartyParamLocation
ld [hl], d
inc hl
ld [hl], e
jp CopyCurHPToAnimBufferNewHP
Functionf327: ; f327 (3:7327)
ld a, $23
call GetPartyParamLocation
ld a, [hl]
add e
ld [hld], a
ld a, [hl]
adc d
ld [hl], a
jr c, .asm_f34b
call CopyCurHPToAnimBufferNewHP
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, .asm_f34e
.asm_f34b
call Functionf319
.asm_f34e
ret
Functionf34f: ; f34f (3:734f)
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, .asm_f35f
xor a
ld [hld], a
ld [hl], a
.asm_f35f
call CopyCurHPToAnimBufferNewHP
ret
Functionf363: ; f363 (3:7363)
push de
call CopyMaxHPToAnimBufferMaxHP
call CopyCurHPToAnimBufferOldHP
call GetCurHPAnimOldHP
ld a, d
or e
pop de
ret
CalculateCurHPAnimRemainingHP: ; f371 (3:7371)
call GetCurHPAnimOldHP
ld h, d
ld l, e
call GetCurHPAnimMaxHP
ld a, l
sub e
ld a, h
sbc d
ret
CopyCurHPToAnimBufferNewHP: ; f37e (3:737e)
ld a, MON_HP
call GetPartyParamLocation
ld a, [hli]
ld [wCurHPAnimNewHP + 1], a
ld a, [hl]
ld [wCurHPAnimNewHP], a
ret
SetCurHPAnimNewHP:
ld a, d
ld [wCurHPAnimNewHP + 1], a
ld a, e
ld [wCurHPAnimNewHP], a
ret
GetCurHPAnimNewHP:
ld a, [wCurHPAnimNewHP + 1]
ld d, a
ld a, [wCurHPAnimNewHP]
ld e, a
ret
CopyCurHPToAnimBufferOldHP: ; f39e (3:739e)
ld a, MON_HP
call GetPartyParamLocation
ld a, [hli]
ld [wCurHPAnimOldHP + 1], a
ld a, [hl]
ld [wCurHPAnimOldHP], a
ret
GetCurHPAnimOldHP: ; f3ac (3:73ac)
ld a, [wCurHPAnimOldHP + 1]
ld d, a
ld a, [wCurHPAnimOldHP]
ld e, a
ret
CopyMaxHPToAnimBufferMaxHP: ; f3b5 (3:73b5)
push hl
ld a, MON_MAXHP
call GetPartyParamLocation
ld a, [hli]
ld [wCurHPAnimMaxHP + 1], a
ld a, [hl]
ld [wCurHPAnimMaxHP], a
pop hl
ret
GetCurHPAnimMaxHP: ; f3c5 (3:73c5)
ld a, [wCurHPAnimMaxHP + 1]
ld d, a
ld a, [wCurHPAnimMaxHP]
ld e, a
ret
GetOneFifthMaxHP: ; f3ce (3:73ce)
push bc
ld a, MON_MAXHP
call GetPartyParamLocation
ld a, [hli]
ld [hDividend], a
ld a, [hl]
ld [hPrintNum2], a
ld a, $5
ld [hMultiplier], a
ld b, $2
call Divide
ld a, [hStringCmpString2]
ld d, a
ld a, [hPrintNum4]
ld e, a
pop bc
ret
Functionf3eb: ; f3eb (3:73eb)
push hl
ld a, [wd002]
ld hl, HealingItemParameters
ld d, a
.asm_f3f3
ld a, [hli]
cp -1
jr z, .asm_f3ff
cp d
jr z, .asm_f400
inc hl
inc hl
jr .asm_f3f3
.asm_f3ff
scf
.asm_f400
ld e, [hl]
inc hl
ld d, [hl]
pop hl
ret
HealingItemParameters:
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
ld a, [wPartyMenuCursor]
dec a
ld b, a
call Functionf46f
jr c, .asm_f469
ld a, b
ld [wd005], a
call Functionf363
call GetOneFifthMaxHP
call Functionf34f
push bc
call Functionf231
pop bc
call GetOneFifthMaxHP
ld a, c
ld [wd005], a
call Functionf363
call Functionf327
.asm_f45d
call Functionf231
ld a, PARTYMENUTEXT_HEAL_HP
call Functionf2a0
call JoyWaitAorB
.asm_f469
ld a, b
inc a
ld [wPartyMenuCursor], a
ret
Functionf46f: ; f46f (3:746f)
push bc
ld a, $1
ld [wd03e], a
call Functionf272
pop bc
jr c, .asm_f494
ld a, [wPartyMenuCursor]
dec a
ld c, a
ld a, b
cp c
jr z, .asm_f496
ld a, c
ld [wd005], a
call Functionf363
jr z, .asm_f496
call CalculateCurHPAnimRemainingHP
jr nc, .asm_f496
xor a
ret
.asm_f494
scf
ret
.asm_f496
push bc
ld hl, Text_MilkDrinkCantBeUsed
call MenuTextBoxBackup
pop bc
jr Functionf46f
Text_MilkDrinkCantBeUsed:
text_jump Text_MilkDrinkCantBeUsed_
db "@"
EscapeRope: ; f4a5 (3:74a5)
xor a
ld [wFieldMoveSucceeded], a
callba EscapeRopeFunction ; same bank
ld a, [wFieldMoveSucceeded]
cp $1
call z, Functionf7dc
ret
SuperRepel: ; f4b8 (3:74b8)
ld b, 200
jr asm_f4c2
MaxRepel: ; f4bc (3:74bc)
ld b, 250
jr asm_f4c2
Repel: ; f4c0 (3:74c0)
ld b, 100
asm_f4c2
ld a, [wRepelSteps]
and a
ld hl, Text_RepelsEffectsStillLinger
jp nz, PrintText
ld a, b
ld [wRepelSteps], a
jp Functionf7d0
Text_RepelsEffectsStillLinger:
text_jump Text_RepelsEffectsStillLinger_
db "@"
XAccuracy: ; f4d8 (3:74d8)
ld hl, wPlayerSubStatus4
bit SUBSTATUS_X_ACCURACY, [hl]
jp nz, Functionf811
set SUBSTATUS_X_ACCURACY, [hl]
jp Functionf7d0
PokeDoll: ; f4e5 (3:74e5)
ld a, [wBattleMode]
dec a
jr nz, .asm_f4f6
inc a
ld [wd11c], a
inc a
ld [wBattleResult], a
jp Functionf7d0
.asm_f4f6
xor a
ld [wFieldMoveSucceeded], a
ret
GuardSpec: ; f4fb (3:74fb)
ld hl, wPlayerSubStatus4
bit SUBSTATUS_MIST, [hl]
jp nz, Functionf811
set SUBSTATUS_MIST, [hl]
jp Functionf7d0
DireHit: ; f508 (3:7508)
ld hl, wPlayerSubStatus4
bit SUBSTATUS_FOCUS_ENERGY, [hl]
jp nz, Functionf811
set SUBSTATUS_FOCUS_ENERGY, [hl]
jp Functionf7d0
XAttack: ; f515
XDefend: ; f515
XSpecial: ; f515
XSpeed: ; f515
call Functionf7d0
ld a, [wd002]
ld hl, .x_item_table
.asm_f51e
cp [hl]
jr z, .asm_f525
inc hl
inc hl
jr .asm_f51e
.asm_f525
inc hl
ld b, [hl]
xor a
ld [hBattleTurn], a
ld [wcb45], a
ld [wcbeb], a
callba CheckIfStatCanBeRaised
call WaitSFX
callba BattleCommand_StatUpMessage
callba BattleCommand_StatUpFailText
ld a, [wCurBattleMon]
ld [wd005], a
ld c, HAPPINESS_USEDXITEM
callba ChangeHappiness
ret
.x_item_table
db X_ATTACK, ATTACK
db X_DEFEND, DEFENSE
db X_SPEED, SPEED
db X_SPECIAL, SP_ATTACK
PokeFlute: ; f55c (3:755c)
ld a, [wBattleMode]
and a
jr nz, .asm_f562
.asm_f562
xor a
ld [wceed], a
ld b, $ff ^ SLP
ld hl, wPartyMon1End
call Functionf5a4
ld a, [wBattleMode]
cp $1
jr z, .asm_f57b
ld hl, wOTPartyMon1End
call Functionf5a4
.asm_f57b
ld hl, wBattleMonStatus
ld a, [hl]
and b
ld [hl], a
ld hl, wEnemyMonStatus
ld a, [hl]
and b
ld [hl], a
ld a, [wMovementBufferCount]
and a
ld hl, Text_NowThatsACatchyTune ; $75bc
jp z, PrintText
ld hl, Text_PlayedThePokeFlute ; $75c6
call PrintText
ld a, [wDanger]
and $80
jr nz, .asm_f59e
.asm_f59e
ld hl, Text_AllSleepingMonWokeUp ; $75c1
jp PrintText
Functionf5a4: ; f5a4 (3:75a4)
ld de, $30
ld c, $6
.asm_f5a9
ld a, [hl]
push af
and $7
jr z, .asm_f5b4
ld a, $1
ld [wceed], a
.asm_f5b4
pop af
and b
ld [hl], a
add hl, de
dec c
jr nz, .asm_f5a9
ret
Text_NowThatsACatchyTune:
text_jump Text_NowThatsACatchyTune_
db "@"
Text_AllSleepingMonWokeUp:
text_jump Text_AllSleepingMonWokeUp_
db "@"
Text_PlayedThePokeFlute:
text_jump Text_PlayedThePokeFlute_
start_asm
ld a, [wBattleMode]
and a
jr nz, .asm_f5dc
push de
ld de, SFX_POKEFLUTE
call WaitPlaySFX
call WaitSFX
pop de
.asm_f5dc
ld hl, .terminator
ret
.terminator db "@"
CoinCase: ; f5e1 (3:75e1)
ld hl, Text_CoinCase
jp MenuTextBoxWaitButton
Text_CoinCase:
text_jump Text_CoinCase_
db "@"
OldRod: ; f5ec (3:75ec)
ld e, $0
jr asm_f5f8
GoodRod: ; f5f0 (3:75f0)
ld e, $1
jr asm_f5f8
SuperRod: ; f5f4 (3:75f4)
ld e, $2
jr asm_f5f8
asm_f5f8
callba FishingRodFunction ; same bank
ret
Itemfinder: ; f5ff (3:75ff)
callba ItemfinderFunction
ret
Elixer: ; f606
Ether: ; f606
MaxElixer: ; f606
MaxEther: ; f606
Mysteryberry: ; f606
PPUp: ; f606 (3:7606)
ld a, [wd002]
ld [wMovementBufferCount], a
.asm_f60c
ld b, $1
call Functionf24f
jp c, Functionf727
.asm_f614
ld a, [wMovementBufferCount]
cp MAX_ELIXER
jp z, Functionf6f6
cp ELIXER
jp z, Functionf6f6
ld hl, Text_RaiseThePPOfWhichMove
ld a, [wMovementBufferCount]
cp PP_UP
jr z, .asm_f62e
ld hl, Text_RestoreThePPOfWhichMove
.asm_f62e
call PrintText
ld a, [wcfc7]
push af
xor a
ld [wcfc7], a
ld a, $2
ld [wd11f], a
ld a, $f
ld hl, $62f3
rst FarCall
pop bc
ld a, b
ld [wcfc7], a
jr nz, .asm_f60c
ld hl, wPartyMon1Moves
ld bc, $30
call Functionf9aa
push hl
ld a, [hl]
ld [wd151], a
call GetMoveName
call Function317b
pop hl
ld a, [wceed]
cp PP_UP
jp nz, Functionf6ee
ld a, [hl]
cp $a6
jr z, .asm_f676
ld bc, $15
add hl, bc
ld a, [hl]
cp $c0
jr c, .asm_f67e
.asm_f676
ld hl, Text_PPIsMaxedOut ; $7776
call PrintText
jr .asm_f614
.asm_f67e
ld a, [hl]
add $40
ld [hl], a
ld a, $1
ld [wd151], a
call Functionf893
call Functionf7c7
ld hl, Text_PPsIncreased ; $777b
call PrintText
asm_f693
call ClearPalettes
jp Functionf7dc
asm_f699
ld a, [wBattleMode]
and a
jr z, .asm_f6b3
ld a, [wd005]
ld b, a
ld a, [wCurBattleMon]
cp b
jr nz, .asm_f6b3
ld a, [wPlayerSubStatus5]
bit SUBSTATUS_TRANSFORMED, a
jr nz, .asm_f6b3
call Functionf6be
.asm_f6b3
call Functionf7c7
ld hl, Text_PPWasRestored
call PrintText
jr asm_f693
Functionf6be: ; f6be (3:76be)
ld a, [wd005]
ld hl, wPartyMon1Moves
ld bc, $30
call AddNTimes
ld de, wBattleMonMoves
ld b, $4
.asm_f6cf
ld a, [de]
and a
jr z, .asm_f6ed
cp [hl]
jr nz, .asm_f6e8
push hl
push de
push bc
inc de
inc de
inc de
inc de
inc de
inc de
ld bc, $15
add hl, bc
ld a, [hl]
ld [de], a
pop bc
pop de
pop hl
.asm_f6e8
inc hl
inc de
dec b
jr nz, .asm_f6cf
.asm_f6ed
ret
Functionf6ee: ; f6ee (3:76ee)
call Functionf72f
jr nz, asm_f699
jp Functionf724
Functionf6f6: ; f6f6 (3:76f6)
xor a
ld hl, wMenuCursorY
ld [hli], a
ld [hl], a
ld b, $4
.asm_f6fe
push bc
ld hl, wPartyMon1Moves
ld bc, $30
call Functionf9aa
ld a, [hl]
and a
jr z, .asm_f715
call Functionf72f
jr z, .asm_f715
ld hl, wcee1
inc [hl]
.asm_f715
ld hl, wMenuCursorY
inc [hl]
pop bc
dec b
jr nz, .asm_f6fe
ld a, [wcee1]
and a
jp nz, asm_f699
Functionf724: ; f724 (3:7724)
call Functionf839
Functionf727: ; f727 (3:7727)
call ClearPalettes
xor a
ld [wFieldMoveSucceeded], a
ret
Functionf72f: ; f72f (3:772f)
xor a
ld [wMonType], a
call GetMaxPPOfMove
ld hl, wPartyMon1PP
ld bc, $30
call Functionf9aa
ld a, [wd151]
ld b, a
ld a, [hl]
and $3f
cp b
jr nc, .asm_f76a
ld a, [wceed]
cp MAX_ELIXER
jr z, .asm_f764
cp $40
jr z, .asm_f764
ld c, $5
cp $96
jr z, .asm_f75c
ld c, $a
.asm_f75c
ld a, [hl]
and $3f
add c
cp b
jr nc, .asm_f764
ld b, a
.asm_f764
ld a, [hl]
and $c0
or b
ld [hl], a
ret
.asm_f76a
xor a
ret
Text_RaiseThePPOfWhichMove:
text_jump Text_RaiseThePPOfWhichMove_
db "@"
Text_RestoreThePPOfWhichMove:
text_jump Text_RestoreThePPOfWhichMove_
db "@"
Text_PPIsMaxedOut:
text_jump Text_PPIsMaxedOut_
db "@"
Text_PPsIncreased:
text_jump Text_PPsIncreased_
db "@"
Text_PPWasRestored:
text_jump Text_PPWasRestored_
db "@"
Squirtbottle: ; f785 (3:7785)
callba SquirtbottleFunction ; 14:4763
ret
CardKey: ; f78c (3:778c)
callba CardKeyFunction ; 14:47ac
ret
BasementKey: ; f793 (3:7793)
callba BasementKeyFunction ; 14:47e7
ret
SacredAsh: ; f79a (3:779a)
callba SacredAshFunction ; 14:4819
ld a, [wFieldMoveSucceeded]
cp $1
ret nz
call Functionf7dc
ret
NormalBox: ; f7aa (3:77aa)
ld c, DECOFLAG_SILVER_TROPHY_DOLL
jr asm_f7b0
GorgeousBox: ; f7ae (3:77ae)
ld c, DECOFLAG_GOLD_TROPHY_DOLL
asm_f7b0
callba ReceiveDecorationC ; 9:70d5
ld hl, Text_TrohpyInside ; $77bf
call PrintText
jp Functionf7dc
Text_TrohpyInside:
text_jump Text_TrohpyInside_
db "@"
AmuletCoin: ; f7c4
BerserkGene: ; f7c4
BigMushroom: ; f7c4
BigPearl: ; f7c4
Blackbelt: ; f7c4
Blackglasses: ; f7c4
BlkApricorn: ; f7c4
BluApricorn: ; f7c4
Brightpowder: ; f7c4
Charcoal: ; f7c4
CleanseTag: ; f7c4
DragonFang: ; f7c4
DragonScale: ; f7c4
Everstone: ; f7c4
ExpShare: ; f7c4
FlowerMail: ; f7c4
FocusBand: ; f7c4
GoldLeaf: ; f7c4
GrnApricorn: ; f7c4
HardStone: ; f7c4
Item19: ; f7c4
Item2D: ; f7c4
Item32: ; f7c4
Item47: ; f7c4
Item5A: ; f7c4
Item64: ; f7c4
Item73: ; f7c4
Item74: ; f7c4
Item78: ; f7c4
Item81: ; f7c4
Item87: ; f7c4
Item88: ; f7c4
Item89: ; f7c4
Item8D: ; f7c4
Item8E: ; f7c4
Item91: ; f7c4
Item93: ; f7c4
Item94: ; f7c4
Item95: ; f7c4
Item99: ; f7c4
Item9A: ; f7c4
Item9B: ; f7c4
ItemA2: ; f7c4
ItemAB: ; f7c4
ItemB0: ; f7c4
ItemB3: ; f7c4
KingsRock: ; f7c4
Leftovers: ; f7c4
LightBall: ; f7c4
LostItem: ; f7c4
LuckyEgg: ; f7c4
LuckyPunch: ; f7c4
MachinePart: ; f7c4
Magnet: ; f7c4
MetalCoat: ; f7c4
MetalPowder: ; f7c4
MiracleSeed: ; f7c4
MysteryEgg: ; f7c4
MysticWater: ; f7c4
Nevermeltice: ; f7c4
Nugget: ; f7c4
Pass: ; f7c4
Pearl: ; f7c4
PinkBow: ; f7c4
PnkApricorn: ; f7c4
PoisonBarb: ; f7c4
PolkadotBow: ; f7c4
QuickClaw: ; f7c4
RainbowWing: ; f7c4
RedApricorn: ; f7c4
RedScale: ; f7c4
SSTicket: ; f7c4
ScopeLens: ; f7c4
Secretpotion: ; f7c4
SharpBeak: ; f7c4
SilverLeaf: ; f7c4
SilverWing: ; f7c4
Silverpowder: ; f7c4
Slowpoketail: ; f7c4
SmokeBall: ; f7c4
SoftSand: ; f7c4
SpellTag: ; f7c4
StarPiece: ; f7c4
Stardust: ; f7c4
Stick: ; f7c4
ThickClub: ; f7c4
Tinymushroom: ; f7c4
Twistedspoon: ; f7c4
UpGrade: ; f7c4
WhtApricorn: ; f7c4
YlwApricorn: ; f7c4
jp Functionf834
Functionf7c7: ; f7c7 (3:77c7)
push de
ld de, SFX_FULL_HEAL
call WaitPlaySFX
pop de
ret
Functionf7d0: ; f7d0 (3:77d0)
ld hl, Text_UsedItem
call PrintText
call Functionf7c7
call WaitPressAorB_BlinkCursor
Functionf7dc: ; f7dc (3:77dc)
ld hl, wTMsHMsEnd
ld a, $1
ld [wd009], a
jp TossItem
Functionf7e7: ; f7e7 (3:77e7)
call ReturnToBattle_UseBall
ld de, Start
ld a, e
ld [wcf3e], a
ld a, d
ld [wcf3f], a
xor a
ld [wcb67], a
ld [hBattleTurn], a
ld [wcf46], a
predef PlayBattleAnim
ld hl, Text_BlockedTheBall
call PrintText
ld hl, Text_DontBeAThief
call PrintText
jr Functionf7dc
Functionf811: ; f811 (3:7811)
ld hl, Text_WontHaveAnyEffect
call PrintText
ld a, $2
ld [wFieldMoveSucceeded], a
ret
Functionf81d: ; f81d (3:781d)
ld hl, Text_LooksBitter
jp PrintText
FailToUseBall: ; f823 (3:7823)
ld hl, Text_CantUseBallBoxIsFull
call PrintText
ld a, $2
ld [wFieldMoveSucceeded], a
ret
Functionf82f: ; f82f (3:782f)
ld hl, Text_CantUseOnEgg
jr asm_f84b
Functionf834: ; f834 (3:7834)
ld hl, Text_IsntTheTimeToUseThat
jr asm_f84b
Functionf839: ; f839 (3:7839)
ld hl, Text_WontHaveAnyEffect
jr asm_f84b
Functionf83e:
ld hl, Text_BelongsToSomeoneElse
jr asm_f84b
Functionf843:
ld hl, Text_CyclingIsntAllowed
jr asm_f84b
Functionf848:
ld hl, Text_CantGetOnYourItemNow
asm_f84b
xor a
ld [wFieldMoveSucceeded], a
jp PrintText
Text_LooksBitter:
text_jump Text_LooksBitter_
db "@"
Text_CantUseOnEgg:
text_jump Text_CantUseOnEgg_
db "@"
Text_IsntTheTimeToUseThat:
text_jump Text_IsntTheTimeToUseThat_
db "@"
Text_BelongsToSomeoneElse:
text_jump Text_BelongsToSomeoneElse_
db "@"
Text_WontHaveAnyEffect:
text_jump Text_WontHaveAnyEffect_
db "@"
Text_BlockedTheBall:
text_jump Text_BlockedTheBall_
db "@"
Text_DontBeAThief:
text_jump Text_DontBeAThief_
db "@"
Text_CyclingIsntAllowed:
text_jump Text_CyclingIsntAllowed_
db "@"
Text_CantGetOnYourItemNow:
text_jump Text_CantGetOnYourItemNow_
db "@"
Text_CantUseBallBoxIsFull:
text_jump Text_CantUseBallBoxIsFull_
db "@"
Text_UsedItem:
text_jump Text_UsedItem_
db "@"
Text_GotOnItem:
text_jump Text_GotOnItem_
db "@"
Text_GotOffItem:
text_jump Text_GotOffItem_
db "@"
Functionf893: ; f893 (3:7893)
ld a, $2
call GetPartyParamLocation
push hl
ld de, wBuffer1
predef FillPP
pop hl
ld bc, $15
add hl, bc
ld de, wCurHPAnimMaxHP
ld b, $0
.asm_f8ab
inc b
ld a, b
cp $5
ret z
ld a, [wd151]
dec a
jr nz, .asm_f8bd
ld a, [wMenuCursorY]
inc a
cp b
jr nz, .asm_f8c4
.asm_f8bd
ld a, [hl]
and $c0
ld a, [de]
call nz, Functionf8c8
.asm_f8c4
inc hl
inc de
jr .asm_f8ab
Functionf8c8: ; f8c8 (3:78c8)
push bc
ld a, [de]
ld [hPrintNum4], a
xor a
ld [hPastLeadingZeroes], a
ld [hQuotient], a
ld [hPrintNum3], a
ld a, $5
ld [hRemainder], 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_f8fd
.asm_f8ea
ld a, [hPrintNum4]
cp $8
jr c, .asm_f8f2
ld a, $7
.asm_f8f2
add b
ld b, a
ld a, [wd151]
dec a
jr z, .asm_f8fd
dec c
jr nz, .asm_f8ea
.asm_f8fd
ld [hl], b
pop bc
ret
Functionf900: ; f900 (3:7900)
ld a, $17
call GetPartyParamLocation
push hl
ld a, $2
call GetPartyParamLocation
pop de
xor a
ld [wMenuCursorY], a
ld [wMonType], a
ld c, $4
.asm_f915
ld a, [hli]
and a
ret z
push hl
push de
push bc
call GetMaxPPOfMove
pop bc
pop de
ld a, [de]
and $c0
ld b, a
ld a, [wd151]
add b
ld [de], a
inc de
ld hl, wMenuCursorY
inc [hl]
pop hl
dec c
jr nz, .asm_f915
ret
GetMaxPPOfMove: ; f933 (3:7933)
ld a, [wStringBuffer1]
push af
ld a, [wStringBuffer1 + 1]
push af
ld a, [wMonType]
and a
ld hl, wPartyMon1Moves
ld bc, $30
jr z, .asm_f961
ld hl, wOTPartyMon1Moves
dec a
jr z, .asm_f961
ld hl, wTempMonMoves
dec a
jr z, .asm_f95c
ld hl, wTempMonMoves
dec a
jr z, .asm_f95c
ld hl, wBattleMonMoves
.asm_f95c
call Functionf9b0
jr .asm_f964
.asm_f961
call Functionf9aa
.asm_f964
ld a, [hl]
dec a
push hl
ld hl, Moves + MOVE_PP
ld bc, $7
call AddNTimes
ld a, BANK(Moves)
call GetFarByte
ld b, a
ld de, wStringBuffer1
ld [de], a
pop hl
push bc
ld bc, $15
ld a, [wMonType]
cp $4
jr nz, .asm_f989
ld bc, $6
.asm_f989
add hl, bc
ld a, [hl]
and $c0
pop bc
or b
ld hl, wStringBuffer1 + 1
ld [hl], a
xor a
ld [wd151], a
ld a, b
call Functionf8c8
ld a, [hl]
and $3f
ld [wd151], a
pop af
ld [wStringBuffer1 + 1], a
.asm_f9a3
pop af
ld [wStringBuffer1], a
ret
Functionf9aa: ; f9aa (3:79aa)
ld a, [wd005]
call AddNTimes
Functionf9b0: ; f9b0 (3:79b0)
ld a, [wMenuCursorY]
ld c, a
ld b, $0
add hl, bc
ret
GetPokeballWobble:
ld a, [wBuffer2]
inc a
ld [wBuffer2], a
cp $4
jr z, .asm_f9e3
ld a, [wWildMon]
and a
ld c, $0
ret nz
ld hl, PokeballWobbleProbabilities
ld a, [wCurHPAnimMaxHP]
ld b, a
.asm_f9d1
ld a, [hli]
cp b
jr nc, .asm_f9d8
inc hl
jr .asm_f9d1
.asm_f9d8
ld b, [hl]
call Random
cp b
ld c, $0
ret c
ld c, $2
ret
.asm_f9e3
ld a, [wWildMon]
and a
ld c, $1
ret nz
ld c, $2
ret
PokeballWobbleProbabilities:
db 1, 63
db 2, 75
db 3, 84
db 4, 90
db 5, 95
db 7, 103
db 10, 113
db 15, 126
db 20, 134
db 30, 149
db 40, 160
db 50, 169
db 60, 177
db 80, 191
db 100, 201
db 120, 211
db 140, 220
db 160, 227
db 180, 234
db 200, 240
db 220, 246
db 240, 251
db 254, 253
db 255, 255