mirror of
https://gitlab.com/xCrystal/pokecrystal-board.git
synced 2024-11-16 11:27:33 -08:00
e6ea1889fb
The former is arguably misleading (as you don’t access the memory location in hl to retrieve the jump location), and is consequently deprecated in newer versions of rgbds. This fix silences these deprecation warnings.
3314 lines
48 KiB
NASM
3314 lines
48 KiB
NASM
_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"
|