diff options
| -rw-r--r-- | data/battle/wobble_probabilities.asm | 27 | ||||
| -rw-r--r-- | data/items/heal_hp.asm | 17 | ||||
| -rw-r--r-- | data/items/heal_status.asm | 19 | ||||
| -rw-r--r-- | data/items/x_stats.asm | 6 | ||||
| -rwxr-xr-x | engine/battle/anim_hp_bar.asm | 235 | ||||
| -rw-r--r-- | engine/battle_anims/pokeball_wobble.asm | 45 | ||||
| -rwxr-xr-x | engine/events/engine_flags.asm | 9 | ||||
| -rwxr-xr-x | engine/events/overworld.asm | 2 | ||||
| -rwxr-xr-x | engine/events/specials.asm | 5 | ||||
| -rwxr-xr-x | engine/items/item_effects.asm | 1861 | ||||
| -rwxr-xr-x | engine/items/items.asm | 406 | ||||
| -rw-r--r-- | engine/items/tmhm.asm | 4 | ||||
| -rwxr-xr-x | engine/overworld/variables.asm | 1 | ||||
| -rwxr-xr-x | engine/pokemon/health.asm | 48 | ||||
| -rwxr-xr-x | engine/pokemon/move_mon.asm | 8 | ||||
| -rwxr-xr-x | home/names.asm | 2 | ||||
| -rw-r--r-- | layout.link | 1 | ||||
| -rw-r--r-- | main.asm | 13 | ||||
| -rw-r--r-- | wram.asm | 6 | 
19 files changed, 1378 insertions, 1337 deletions
| diff --git a/data/battle/wobble_probabilities.asm b/data/battle/wobble_probabilities.asm new file mode 100644 index 00000000..38e9a12c --- /dev/null +++ b/data/battle/wobble_probabilities.asm @@ -0,0 +1,27 @@ +WobbleProbabilities: +; catch rate, chance of wobbling / 255 +; nLeft/255 = (nRight/255) ** 4 +	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 diff --git a/data/items/heal_hp.asm b/data/items/heal_hp.asm new file mode 100644 index 00000000..cc3da236 --- /dev/null +++ b/data/items/heal_hp.asm @@ -0,0 +1,17 @@ +HealingHPAmounts: +	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,   MAX_STAT_VALUE +	dbw FULL_RESTORE, MAX_STAT_VALUE +	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 ; end diff --git a/data/items/heal_status.asm b/data/items/heal_status.asm new file mode 100644 index 00000000..b39f2f80 --- /dev/null +++ b/data/items/heal_status.asm @@ -0,0 +1,19 @@ +; See also data/battle/held_heal_status.asm + +StatusHealingActions: +	;  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 ; end diff --git a/data/items/x_stats.asm b/data/items/x_stats.asm new file mode 100644 index 00000000..25554209 --- /dev/null +++ b/data/items/x_stats.asm @@ -0,0 +1,6 @@ +XItemStats: +	;  item,      stat +	db X_ATTACK,  ATTACK +	db X_DEFEND,  DEFENSE +	db X_SPEED,   SPEED +	db X_SPECIAL, SP_ATTACK diff --git a/engine/battle/anim_hp_bar.asm b/engine/battle/anim_hp_bar.asm index 561cba42..9248ad4f 100755 --- a/engine/battle/anim_hp_bar.asm +++ b/engine/battle/anim_hp_bar.asm @@ -1,61 +1,59 @@ -HP_BAR_MAX_PIXELS EQU $30 - -AnimateHPBar_: ; d62d (3:562d) -	call Functiond665 -	jr c, .asm_d64b -	call Functiond676 -.asm_d635 +_AnimateHPBar: +	call .IsMaximumMoreThan48Pixels +	jr c, .MoreThan48Pixels +	call .ComputePixels +.ShortAnimLoop:  	push bc  	push hl -	call Functiond6e8 +	call ShortAnim_UpdateVariables  	pop hl  	pop bc  	push af  	push bc  	push hl -	call Functiond736 -	call Functiond7cf +	call ShortHPBarAnim_UpdateTiles +	call HPBarAnim_BGMapUpdate  	pop hl  	pop bc  	pop af -	jr nc, .asm_d635 +	jr nc, .ShortAnimLoop  	ret -.asm_d64b -	call Functiond676 -.asm_d64e +.MoreThan48Pixels: +	call .ComputePixels +.LongAnimLoop:  	push bc  	push hl -	call Functiond6fb +	call LongAnim_UpdateVariables  	pop hl  	pop bc  	ret c  	push af  	push bc  	push hl -	call Functiond74f -	call Functiond7cf +	call LongHPBarAnim_UpdateTiles +	call HPBarAnim_BGMapUpdate  	pop hl  	pop bc  	pop af -	jr nc, .asm_d64e +	jr nc, .LongAnimLoop  	ret -Functiond665: ; d665 (3:5665) +.IsMaximumMoreThan48Pixels:  	ld a, [wCurHPAnimMaxHP + 1]  	and a -	jr nz, .asm_d674 +	jr nz, .player  	ld a, [wCurHPAnimMaxHP] -	cp HP_BAR_MAX_PIXELS -	jr nc, .asm_d674 +	cp HP_BAR_LENGTH_PX +	jr nc, .player  	and a  	ret -.asm_d674 +.player  	scf  	ret -Functiond676: ; d676 (3:5676) +.ComputePixels:  	push hl  	ld hl, wCurHPAnimMaxHP  	ld a, [hli] @@ -70,6 +68,7 @@ Functiond676: ; d676 (3:5676)  	call ComputeHPBarPixels  	ld a, e  	ld [wCurHPBarPixels], a +  	ld a, [wCurHPAnimNewHP]  	ld c, a  	ld a, [wCurHPAnimNewHP + 1] @@ -81,6 +80,7 @@ Functiond676: ; d676 (3:5676)  	call ComputeHPBarPixels  	ld a, e  	ld [wNewHPBarPixels], a +  	push hl  	ld hl, wCurHPAnimOldHP  	ld a, [hli] @@ -98,15 +98,15 @@ Functiond676: ; d676 (3:5676)  	ld a, d  	sbc b  	ld d, a -	jr c, .asm_d6c7 +	jr c, .negative  	ld a, [wCurHPAnimOldHP]  	ld [wCurHPAnimLowHP], a  	ld a, [wCurHPAnimNewHP]  	ld [wCurHPAnimHighHP], a -	ld bc, $1 -	jr .asm_d6df +	ld bc, 1 +	jr .got_direction -.asm_d6c7 +.negative  	ld a, [wCurHPAnimOldHP]  	ld [wCurHPAnimHighHP], a  	ld a, [wCurHPAnimNewHP] @@ -118,31 +118,32 @@ Functiond676: ; d676 (3:5676)  	ld a, d  	xor $ff  	ld d, a -	ld bc, rIE -.asm_d6df +	ld bc, -1 +.got_direction  	ld a, d  	ld [wCurHPAnimDeltaHP], a  	ld a, e  	ld [wCurHPAnimDeltaHP + 1], a  	ret -Functiond6e8: ; d6e8 (3:56e8) +ShortAnim_UpdateVariables:  	ld hl, wCurHPBarPixels  	ld a, [wNewHPBarPixels]  	cp [hl] -	jr nz, .asm_d6f3 +	jr nz, .not_finished  	scf  	ret -.asm_d6f3 +.not_finished  	ld a, c  	add [hl]  	ld [hl], a -	call Functiond83f +	call ShortHPBar_CalcPixelFrame  	and a  	ret -Functiond6fb: ; d6fb (3:56fb) +LongAnim_UpdateVariables: +.loop  	ld hl, wCurHPAnimOldHP  	ld a, [hli]  	ld e, a @@ -150,15 +151,15 @@ Functiond6fb: ; d6fb (3:56fb)  	ld d, a  	ld a, e  	cp [hl] -	jr nz, .asm_d70d +	jr nz, .next  	inc hl  	ld a, d  	cp [hl] -	jr nz, .asm_d70d +	jr nz, .next  	scf  	ret -.asm_d70d +.next  	ld l, e  	ld h, d  	add hl, bc @@ -178,27 +179,26 @@ Functiond6fb: ; d6fb (3:56fb)  	ld c, a  	ld a, [hli]  	ld b, a -	; BUG: This routine is meant to make the HP bar move at -	; the same rate regardless of how many HP the Pokemon has. -	; In actuality, this causes Pokemon with more than 48 HP -	; to gain or lose HP at the rate of 1 HP per BGMap update -	; rather than 1 pixel on the HUD. -	; To fix, move the "ld a, e" above the "pop de". -	call ComputeHPBarPixels ; returns to e +	; This routine is buggy. The result from ComputeHPBarPixels is stored +	; in e. However, the pop de opcode deletes this result before it is even +	; used. The game then proceeds as though it never deleted that output. +	; To fix, uncomment the line below. +	call ComputeHPBarPixels +	; ld a, e  	pop bc -	pop de ; overloads e +	pop de  	pop hl -	ld a, e ; expects result from ComputeHPBarPixels +	ld a, e ; Comment or delete this line to fix the above bug.  	ld hl, wCurHPBarPixels  	cp [hl] -	jr z, Functiond6fb +	jr z, .loop  	ld [hl], a  	and a  	ret -Functiond736: ; d736 (3:5736) -	call Functiond78a -	ld d, $6 +ShortHPBarAnim_UpdateTiles: +	call HPBarAnim_UpdateHPRemaining +	ld d, HP_BAR_LENGTH  	ld a, [wWhichHPBar]  	and $1  	ld b, a @@ -206,13 +206,13 @@ Functiond736: ; d736 (3:5736)  	ld e, a  	ld c, a  	push de -	call Functiond777 +	call HPBarAnim_RedrawHPBar  	pop de -	call Functiond7ba +	call HPBarAnim_PaletteUpdate  	ret -Functiond74f: ; d74f (3:574f) -	call Functiond78a +LongHPBarAnim_UpdateTiles: +	call HPBarAnim_UpdateHPRemaining  	ld a, [wCurHPAnimOldHP]  	ld c, a  	ld a, [wCurHPAnimOldHP + 1] @@ -223,45 +223,45 @@ Functiond74f: ; d74f (3:574f)  	ld d, a  	call ComputeHPBarPixels  	ld c, e -	ld d, $6 +	ld d, HP_BAR_LENGTH  	ld a, [wWhichHPBar]  	and $1  	ld b, a  	push de -	call Functiond777 +	call HPBarAnim_RedrawHPBar  	pop de -	call Functiond7ba +	call HPBarAnim_PaletteUpdate  	ret -Functiond777: ; d777 (3:5777) +HPBarAnim_RedrawHPBar:  	ld a, [wWhichHPBar]  	cp $2 -	jr nz, .asm_d786 -	ld a, $28 +	jr nz, .skip +	ld a, 2 * SCREEN_WIDTH  	add l  	ld l, a -	ld a, $0 +	ld a, 0  	adc h  	ld h, a -.asm_d786 +.skip  	call DrawBattleHPBar  	ret -Functiond78a: ; d78a (3:578a) +HPBarAnim_UpdateHPRemaining:  	ld a, [wWhichHPBar]  	and a  	ret z  	cp $1 -	jr z, .asm_d798 -	ld de, $16 -	jr .asm_d79b +	jr z, .load_15 +	ld de, SCREEN_WIDTH + 2 +	jr .loaded_de -.asm_d798 -	ld de, $15 -.asm_d79b +.load_15 +	ld de, SCREEN_WIDTH + 1 +.loaded_de  	push hl  	add hl, de -	ld a, $7f +	ld a, " "  	ld [hli], a  	ld [hli], a  	ld [hld], a @@ -276,7 +276,7 @@ Functiond78a: ; d78a (3:578a)  	pop hl  	ret -Functiond7ba: ; d7ba (3:57ba) +HPBarAnim_PaletteUpdate:  	ldh a, [hCGB]  	and a  	ret z @@ -284,45 +284,43 @@ Functiond7ba: ; d7ba (3:57ba)  	call SetHPPal  	ld a, [wCurHPAnimPal]  	ld c, a -	ld a, $2 -	ld hl, $520b -	rst FarCall +	farcall ApplyHPBarPals  	ret -Functiond7cf: ; d7cf (3:57cf) +HPBarAnim_BGMapUpdate:  	ldh a, [hCGB]  	and a -	jr nz, .asm_d7db +	jr nz, .cgb  	call DelayFrame  	call DelayFrame  	ret -.asm_d7db +.cgb  	ld a, [wWhichHPBar]  	and a -	jr z, .asm_d82f +	jr z, .load_0  	cp $1 -	jr z, .asm_d833 +	jr z, .load_1  	ld a, [wCurPartyMon]  	cp $3 -	jr nc, .asm_d7f0 +	jr nc, .bottom_half_of_screen  	ld c, $0 -	jr .asm_d7f2 +	jr .got_third -.asm_d7f0 +.bottom_half_of_screen  	ld c, $1 -.asm_d7f2 +.got_third  	push af  	cp $2 -	jr z, .asm_d805 +	jr z, .skip_delay  	cp $5 -	jr z, .asm_d805 +	jr z, .skip_delay  	ld a, $2  	ldh [hBGMapMode], a  	ld a, c  	ldh [hBGMapThird], a  	call DelayFrame -.asm_d805 +.skip_delay  	ld a, $1  	ldh [hBGMapMode], a  	ld a, c @@ -330,12 +328,12 @@ Functiond7cf: ; d7cf (3:57cf)  	call DelayFrame  	pop af  	cp $2 -	jr z, .asm_d819 +	jr z, .two_frames  	cp $5 -	jr z, .asm_d819 +	jr z, .two_frames  	ret -.asm_d819 +.two_frames  	inc c  	ld a, $2  	ldh [hBGMapMode], a @@ -349,73 +347,78 @@ Functiond7cf: ; d7cf (3:57cf)  	call DelayFrame  	ret -.asm_d82f +.load_0  	ld c, $0 -	jr .asm_d835 +	jr .finish -.asm_d833 +.load_1  	ld c, $1 -.asm_d835 +.finish  	call DelayFrame  	ld a, c  	ldh [hBGMapThird], a  	call DelayFrame  	ret -Functiond83f: ; d83f (3:583f) +ShortHPBar_CalcPixelFrame:  	ld a, [wCurHPAnimMaxHP]  	ld c, a -	ld b, $0 -	ld hl, $0 +	ld b, 0 +	ld hl, 0  	ld a, [wCurHPBarPixels] -	cp HP_BAR_MAX_PIXELS -	jr nc, .asm_d88b +	cp HP_BAR_LENGTH_PX +	jr nc, .return_max  	and a -	jr z, .asm_d886 +	jr z, .return_zero  	call AddNTimes -	ld b, $0 -.asm_d857 + +	ld b, 0 +; This routine is buggy. If [wCurHPAnimMaxHP] * [wCurHPBarPixels] is +; divisible by HP_BAR_LENGTH_PX, the loop runs one extra time. +; To fix, uncomment the line below. +.loop  	ld a, l -	sub HP_BAR_MAX_PIXELS % $100 +	sub HP_BAR_LENGTH_PX  	ld l, a  	ld a, h -	sbc HP_BAR_MAX_PIXELS / $100 +	sbc $0  	ld h, a -	jr c, .asm_d864 +	; jr z, .done +	jr c, .done  	inc b -	jr .asm_d857 +	jr .loop -.asm_d864 +.done  	push bc  	ld bc, $80  	add hl, bc  	pop bc  	ld a, l -	sub HP_BAR_MAX_PIXELS % $100 +	sub HP_BAR_LENGTH_PX  	ld l, a  	ld a, h -	sbc HP_BAR_MAX_PIXELS / $100 +	sbc $0  	ld h, a -	jr c, .asm_d875 +	jr c, .no_carry  	inc b -.asm_d875 +.no_carry  	ld a, [wCurHPAnimLowHP]  	cp b -	jr nc, .asm_d882 +	jr nc, .finish  	ld a, [wCurHPAnimHighHP]  	cp b -	jr c, .asm_d882 +	jr c, .finish  	ld a, b -.asm_d882 +.finish  	ld [wCurHPAnimOldHP], a  	ret -.asm_d886 +.return_zero  	xor a  	ld [wCurHPAnimOldHP], a  	ret -.asm_d88b +.return_max  	ld a, [wCurHPAnimMaxHP]  	ld [wCurHPAnimOldHP], a  	ret diff --git a/engine/battle_anims/pokeball_wobble.asm b/engine/battle_anims/pokeball_wobble.asm new file mode 100644 index 00000000..c430e513 --- /dev/null +++ b/engine/battle_anims/pokeball_wobble.asm @@ -0,0 +1,45 @@ +GetPokeBallWobble: +; Returns whether a Poke Ball will wobble in the catch animation. +; Whether a Pokemon is caught is determined beforehand. + +	ld a, [wBuffer2] +	inc a +	ld [wBuffer2], a + +; Wobble up to 3 times. +	cp 3 + 1 +	jr z, .finished + +	ld a, [wWildMon] +	and a +	ld c, 0 ; next +	ret nz + +	ld hl, WobbleProbabilities +	ld a, [wBuffer1] +	ld b, a +.loop +	ld a, [hli] +	cp b +	jr nc, .checkwobble +	inc hl +	jr .loop + +.checkwobble +	ld b, [hl] +	call Random +	cp b +	ld c, 0 ; next +	ret c +	ld c, 2 ; escaped +	ret + +.finished +	ld a, [wWildMon] +	and a +	ld c, 1 ; caught +	ret nz +	ld c, 2 ; escaped +	ret + +INCLUDE "data/battle/wobble_probabilities.asm" diff --git a/engine/events/engine_flags.asm b/engine/events/engine_flags.asm index d1329f1d..4099dfda 100755 --- a/engine/events/engine_flags.asm +++ b/engine/events/engine_flags.asm @@ -1,4 +1,4 @@ -EngineFlagAction:: ; c01b +EngineFlagAction::  ; Do action b on engine flag de  ;  ;   b = 0: reset flag @@ -7,22 +7,21 @@ EngineFlagAction:: ; c01b  ;  ; Setting/resetting does not return a result. -  ; 16-bit flag ids are considered invalid, but it's nice  ; to know that the infrastructure is there.  	ld a, d -	cp 0 +	cp HIGH(NUM_ENGINE_FLAGS)  	jr z, .ceiling  	jr c, .read ; cp 0 can't set carry!  	jr .invalid -; There are only $a2 engine flags, so +; There are only NUM_ENGINE_FLAGS engine flags, so  ; anything beyond that is invalid too.  .ceiling  	ld a, e -	cp NUM_ENGINE_FLAGS +	cp LOW(NUM_ENGINE_FLAGS)  	jr c, .read  ; Invalid flags are treated as flag 00. diff --git a/engine/events/overworld.asm b/engine/events/overworld.asm index ca8116c4..441f38b0 100755 --- a/engine/events/overworld.asm +++ b/engine/events/overworld.asm @@ -1577,7 +1577,7 @@ MovementData_CastRod:  PutTheRodAway:  	hlcoord 1, 14 -	lb bc, $3, $12 +	lb bc, 3, 18  	call ClearBox  	call WaitBGMap  	xor a diff --git a/engine/events/specials.asm b/engine/events/specials.asm index ab02d3a0..f4b6437d 100755 --- a/engine/events/specials.asm +++ b/engine/events/specials.asm @@ -90,9 +90,7 @@ NameRival:  .default  IF DEF(_GOLD)  	db "SILVER@" -ENDC - -IF DEF(_SILVER) +ELIF DEF(_SILVER)  	db "GOLD@"  ENDC @@ -317,6 +315,7 @@ CheckSwarmFlag::  	ret  CheckPokerus: +; Check if a monster in your party has Pokerus  	farcall _CheckPokerus  	jp ScriptReturnCarry diff --git a/engine/items/item_effects.asm b/engine/items/item_effects.asm index ddbd1001..29f72831 100755 --- a/engine/items/item_effects.asm +++ b/engine/items/item_effects.asm @@ -12,198 +12,188 @@ _DoItemEffect::  	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 ItemfinderEffect -	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 +; entries correspond to item ids +	dw PokeBallEffect      ; MASTER_BALL +	dw PokeBallEffect      ; ULTRA_BALL +	dw NoEffect            ; BRIGHTPOWDER +	dw PokeBallEffect      ; GREAT_BALL +	dw PokeBallEffect      ; POKE_BALL +	dw TownMapEffect       ; TOWN_MAP +	dw BicycleEffect       ; BICYCLE +	dw EvoStoneEffect      ; MOON_STONE +	dw StatusHealingEffect ; ANTIDOTE +	dw StatusHealingEffect ; BURN_HEAL +	dw StatusHealingEffect ; ICE_HEAL +	dw StatusHealingEffect ; AWAKENING +	dw StatusHealingEffect ; PARLYZ_HEAL +	dw FullRestoreEffect   ; FULL_RESTORE +	dw RestoreHPEffect     ; MAX_POTION +	dw RestoreHPEffect     ; HYPER_POTION +	dw RestoreHPEffect     ; SUPER_POTION +	dw RestoreHPEffect     ; POTION +	dw EscapeRopeEffect    ; ESCAPE_ROPE +	dw RepelEffect         ; REPEL +	dw RestorePPEffect     ; MAX_ELIXER +	dw EvoStoneEffect      ; FIRE_STONE +	dw EvoStoneEffect      ; THUNDERSTONE +	dw EvoStoneEffect      ; WATER_STONE +	dw NoEffect            ; ITEM_19 +	dw VitaminEffect       ; HP_UP +	dw VitaminEffect       ; PROTEIN +	dw VitaminEffect       ; IRON +	dw VitaminEffect       ; CARBOS +	dw NoEffect            ; LUCKY_PUNCH +	dw VitaminEffect       ; CALCIUM +	dw RareCandyEffect     ; RARE_CANDY +	dw XAccuracyEffect     ; X_ACCURACY +	dw EvoStoneEffect      ; LEAF_STONE +	dw NoEffect            ; METAL_POWDER +	dw NoEffect            ; NUGGET +	dw PokeDollEffect      ; POKE_DOLL +	dw StatusHealingEffect ; FULL_HEAL +	dw ReviveEffect        ; REVIVE +	dw ReviveEffect        ; MAX_REVIVE +	dw GuardSpecEffect     ; GUARD_SPEC +	dw SuperRepelEffect    ; SUPER_REPEL +	dw MaxRepelEffect      ; MAX_REPEL +	dw DireHitEffect       ; DIRE_HIT +	dw NoEffect            ; ITEM_2D +	dw RestoreHPEffect     ; FRESH_WATER +	dw RestoreHPEffect     ; SODA_POP +	dw RestoreHPEffect     ; LEMONADE +	dw XItemEffect         ; X_ATTACK +	dw NoEffect            ; ITEM_32 +	dw XItemEffect         ; X_DEFEND +	dw XItemEffect         ; X_SPEED +	dw XItemEffect         ; X_SPECIAL +	dw CoinCaseEffect      ; COIN_CASE +	dw ItemfinderEffect    ; ITEMFINDER +	dw PokeFluteEffect     ; POKE_FLUTE +	dw NoEffect            ; EXP_SHARE +	dw OldRodEffect        ; OLD_ROD +	dw GoodRodEffect       ; GOOD_ROD +	dw NoEffect            ; SILVER_LEAF +	dw SuperRodEffect      ; SUPER_ROD +	dw RestorePPEffect     ; PP_UP +	dw RestorePPEffect     ; ETHER +	dw RestorePPEffect     ; MAX_ETHER +	dw RestorePPEffect     ; ELIXER +	dw NoEffect            ; RED_SCALE +	dw NoEffect            ; SECRETPOTION +	dw NoEffect            ; S_S_TICKET +	dw NoEffect            ; MYSTERY_EGG +	dw NoEffect            ; ITEM_46 +	dw NoEffect            ; SILVER_WING +	dw RestoreHPEffect     ; MOOMOO_MILK +	dw NoEffect            ; QUICK_CLAW +	dw StatusHealingEffect ; PSNCUREBERRY +	dw NoEffect            ; GOLD_LEAF +	dw NoEffect            ; SOFT_SAND +	dw NoEffect            ; SHARP_BEAK +	dw StatusHealingEffect ; PRZCUREBERRY +	dw StatusHealingEffect ; BURNT_BERRY +	dw StatusHealingEffect ; ICE_BERRY +	dw NoEffect            ; POISON_BARB +	dw NoEffect            ; KINGS_ROCK +	dw BitterBerryEffect   ; BITTER_BERRY +	dw StatusHealingEffect ; MINT_BERRY +	dw NoEffect            ; RED_APRICORN +	dw NoEffect            ; TINYMUSHROOM +	dw NoEffect            ; BIG_MUSHROOM +	dw NoEffect            ; SILVERPOWDER +	dw NoEffect            ; BLU_APRICORN +	dw NoEffect            ; ITEM_5A +	dw NoEffect            ; AMULET_COIN +	dw NoEffect            ; YLW_APRICORN +	dw NoEffect            ; GRN_APRICORN +	dw NoEffect            ; CLEANSE_TAG +	dw NoEffect            ; MYSTIC_WATER +	dw NoEffect            ; TWISTEDSPOON +	dw NoEffect            ; WHT_APRICORN +	dw NoEffect            ; BLACKBELT_I +	dw NoEffect            ; BLK_APRICORN +	dw NoEffect            ; ITEM_64 +	dw NoEffect            ; PNK_APRICORN +	dw NoEffect            ; BLACKGLASSES +	dw NoEffect            ; SLOWPOKETAIL +	dw NoEffect            ; PINK_BOW +	dw NoEffect            ; STICK +	dw NoEffect            ; SMOKE_BALL +	dw NoEffect            ; NEVERMELTICE +	dw NoEffect            ; MAGNET +	dw StatusHealingEffect ; MIRACLEBERRY +	dw NoEffect            ; PEARL +	dw NoEffect            ; BIG_PEARL +	dw NoEffect            ; EVERSTONE +	dw NoEffect            ; SPELL_TAG +	dw RestoreHPEffect     ; RAGECANDYBAR +	dw NoEffect            ; ITEM_73 +	dw NoEffect            ; ITEM_74 +	dw NoEffect            ; MIRACLE_SEED +	dw NoEffect            ; THICK_CLUB +	dw NoEffect            ; FOCUS_BAND +	dw NoEffect            ; ITEM_78 +	dw EnergypowderEffect  ; ENERGYPOWDER +	dw EnergyRootEffect    ; ENERGY_ROOT +	dw HealPowderEffect    ; HEAL_POWDER +	dw RevivalHerbEffect   ; REVIVAL_HERB +	dw NoEffect            ; HARD_STONE +	dw NoEffect            ; LUCKY_EGG +	dw CardKeyEffect       ; CARD_KEY +	dw NoEffect            ; MACHINE_PART +	dw NoEffect            ; ITEM_81 +	dw NoEffect            ; LOST_ITEM +	dw NoEffect            ; STARDUST +	dw NoEffect            ; STAR_PIECE +	dw BasementKeyEffect   ; BASEMENT_KEY +	dw NoEffect            ; PASS +	dw NoEffect            ; ITEM_87 +	dw NoEffect            ; ITEM_88 +	dw NoEffect            ; ITEM_89 +	dw NoEffect            ; CHARCOAL +	dw RestoreHPEffect     ; BERRY_JUICE +	dw NoEffect            ; SCOPE_LENS +	dw NoEffect            ; ITEM_8D +	dw NoEffect            ; ITEM_8E +	dw NoEffect            ; METAL_COAT +	dw NoEffect            ; DRAGON_FANG +	dw NoEffect            ; ITEM_91 +	dw NoEffect            ; LEFTOVERS +	dw NoEffect            ; ITEM_93 +	dw NoEffect            ; ITEM_94 +	dw NoEffect            ; ITEM_95 +	dw RestorePPEffect     ; MYSTERYBERRY +	dw NoEffect            ; DRAGON_SCALE +	dw NoEffect            ; BERSERK_GENE +	dw NoEffect            ; ITEM_99 +	dw NoEffect            ; ITEM_9A +	dw NoEffect            ; ITEM_9B +	dw SacredAshEffect     ; SACRED_ASH +	dw PokeBallEffect      ; HEAVY_BALL +	dw NoEffect            ; FLOWER_MAIL +	dw PokeBallEffect      ; LEVEL_BALL +	dw PokeBallEffect      ; LURE_BALL +	dw PokeBallEffect      ; FAST_BALL +	dw NoEffect            ; ITEM_A2 +	dw NoEffect            ; LIGHT_BALL +	dw PokeBallEffect      ; FRIEND_BALL +	dw PokeBallEffect      ; MOON_BALL +	dw PokeBallEffect      ; LOVE_BALL +	dw NormalBoxEffect     ; NORMAL_BOX +	dw GorgeousBoxEffect   ; GORGEOUS_BOX +	dw EvoStoneEffect      ; SUN_STONE +	dw NoEffect            ; POLKADOT_BOW +	dw NoEffect            ; ITEM_AB +	dw NoEffect            ; UP_GRADE +	dw RestoreHPEffect     ; BERRY +	dw RestoreHPEffect     ; GOLD_BERRY +	dw SquirtbottleEffect  ; SQUIRTBOTTLE +	dw NoEffect            ; ITEM_B0 +	dw PokeBallEffect      ; PARK_BALL +	dw NoEffect            ; RAINBOW_WING +	dw NoEffect            ; ITEM_B3 + +PokeBallEffect:  	ld a, [wBattleMode]  	dec a  	jp nz, UseBallInTrainerBattle @@ -640,6 +630,7 @@ UltraBall: ; e926  	ld a, BANK(sBoxMonNicknames)  	call OpenSRAM +  	ld hl, wMonOrItemNameBuffer  	ld de, sBoxMonNicknames  	ld bc, MON_NAME_LENGTH @@ -654,6 +645,7 @@ UltraBall: ; e926  .SkipBoxMonNickname:  	ld a, BANK(sBoxMonNicknames)  	call OpenSRAM +  	ld hl, sBoxMonNicknames  	ld de, wMonOrItemNameBuffer  	ld bc, MON_NAME_LENGTH @@ -728,8 +720,8 @@ UltraBallMultiplier:  	ld b, $ff  	ret -GreatBallMultiplier:  SafariBallMultiplier: +GreatBallMultiplier:  ParkBallMultiplier:  ; multiply catch rate by 1.5  	ld a, b @@ -755,17 +747,19 @@ HeavyBallMultiplier:  	add hl, de  	rlca  	rlca -	and $3 +	and %11  	add BANK("Pokedex Entries 001-064")  	ld d, a  	ld a, BANK(PokedexDataPointerTable)  	call GetFarHalfword -.loop + +.SkipText:  	ld a, d  	call GetFarByte  	inc hl  	cp "@" -	jr nz, .loop +	jr nz, .SkipText +  	ld a, d  	push bc  	inc hl @@ -851,12 +845,13 @@ LureBallMultiplier:  	ld a, b  	add a -	jr c, .asm_ed2d +	jr c, .max +  	add b -	jr nc, .asm_ed2f -.asm_ed2d +	jr nc, .done +.max  	ld a, $ff -.asm_ed2f +.done  	ld b, a  	ret @@ -869,15 +864,15 @@ MoonBallMultiplier:  	dec a  	ld c, a  	ld b, 0 -	ld hl, EvosAttacksPointers ; $67bd +	ld hl, EvosAttacksPointers  	add hl, bc  	add hl, bc -	ld a, BANK(EvosAttacksPointers) ; $10 +	ld a, BANK(EvosAttacksPointers)  	call GetFarHalfword  	pop bc  	push bc -	ld a, BANK(EvosAttacksPointers) ; $10 +	ld a, BANK(EvosAttacksPointers)  	call GetFarByte  	cp EVOLVE_ITEM  	pop bc @@ -891,7 +886,7 @@ MoonBallMultiplier:  ; No Pokémon evolve with Burn Heal,  ; so Moon Balls always have a catch rate of 1×.  	push bc -	ld a, BANK(EvosAttacksPointers) ; $10 +	ld a, BANK(EvosAttacksPointers)  	call GetFarByte  	cp MOON_STONE_RED ; BURN_HEAL  	pop bc @@ -922,45 +917,52 @@ LoveBallMultiplier:  	push bc  	ld a, [wTempBattleMonSpecies]  	ld [wCurPartySpecies], a -	xor a +	xor a ; PARTYMON  	ld [wMonType], a  	ld a, [wCurBattleMon]  	ld [wCurPartyMon], a -	farcall GetGender ; 14:52f1 -	jr c, .asm_edba -	ld d, $0 -	jr nz, .asm_ed8d -	inc d -.asm_ed8d +	farcall 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, [wTempEnemyMonSpecies]  	ld [wCurPartySpecies], a -	ld a, $4 +	ld a, WILDMON  	ld [wMonType], a -	farcall GetGender ; 14:52f1 -	jr c, .asm_edb9 -	ld d, $0 -	jr nz, .asm_eda6 -	inc d -.asm_eda6 +	farcall 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” +	ret nz ; for the intended effect, this should be "ret z" +  	sla b -	jr c, .asm_edb6 +	jr c, .max  	sla b -	jr c, .asm_edb6 +	jr c, .max  	sla b  	ret nc -.asm_edb6 +.max  	ld b, $ff  	ret -.asm_edb9 +.done2  	pop de -.asm_edba + +.done1  	pop bc  	ret @@ -973,27 +975,30 @@ FastBallMultiplier:  	ld a, [wTempEnemyMonSpecies]  	ld c, a  	ld hl, FleeMons -	ld d, $3 -.asm_edc5 +	ld d, 3 + +.loop  	ld a, BANK(FleeMons)  	call GetFarByte  	inc hl -	cp $ff -	jr z, .asm_eddc +	cp -1 +	jr z, .next  	cp c -	jr nz, .asm_eddc ; for the intended effect, this should be “jr nz, .loop” +	jr nz, .next ; for the intended effect, this should be "jr nz, .loop"  	sla b -	jr c, .asm_edd9 +	jr c, .max +  	sla b  	ret nc -.asm_edd9 + +.max  	ld b, $ff  	ret -.asm_eddc +.next  	dec d -	jr nz, .asm_edc5 +	jr nz, .loop  	ret  LevelBallMultiplier: @@ -1004,20 +1009,23 @@ LevelBallMultiplier:  	ld c, a  	ld a, [wEnemyMonLevel]  	cp c -	ret nc +	ret nc ; if player is lower level, we're done here  	sla b -	jr c, .asm_edfc +	jr c, .max +  	srl c  	cp c -	ret nc +	ret nc ; if player/2 is lower level, we're done here  	sla b -	jr c, .asm_edfc +	jr c, .max +  	srl c  	cp c -	ret nc +	ret nc ; if player/4 is lower level, we're done here  	sla b  	ret nc -.asm_edfc + +.max  	ld b, $ff  	ret @@ -1083,65 +1091,69 @@ ReturnToBattle_UseBall:  	farcall _ReturnToBattle_UseBall  	ret -TownMap: ; ee55 (3:6e55) -	farcall TownMap_ ; 24:5a4f +TownMapEffect: +	farcall PokegearMap  	ret -Bicycle: ; ee5c -	farcall BikeFunction ; same bank +BicycleEffect: +	farcall BikeFunction  	ret -FireStone: ; ee63 -LeafStone: ; ee63 -MoonStone: ; ee63 -SunStone: ; ee63 -Thunderstone: ; ee63 -WaterStone: ; ee63 +EvoStoneEffect:  	ld b, PARTYMENUACTION_EVO_STONE -	call Functionf24f -	jp c, .cancel +	call UseItem_SelectMon + +	jp c, .DecidedNotToUse +  	ld a, MON_ITEM  	call GetPartyParamLocation +  	ld a, [hl]  	cp EVERSTONE -	jr z, .failed +	jr z, .NoEffect +  	ld a, $1  	ld [wForceEvolution], a -	farcall EvolvePokemon ; 10:61db -	ld a, [wd154] +	farcall EvolvePokemon + +	ld a, [wMonTriedToEvolve]  	and a -	jr z, .failed +	jr z, .NoEffect +  	jp UseDisposableItem -.failed +.NoEffect:  	call WontHaveAnyEffectMessage -.cancel + +.DecidedNotToUse:  	xor a  	ld [wItemEffectSucceeded], a  	ret - -Calcium: ; ee91 -Carbos: ; ee91 -HPUp: ; ee91 -Iron: ; ee91 -Protein: ; ee91 +VitaminEffect:  	ld b, PARTYMENUACTION_HEALING_ITEM -	call Functionf24f -	jp c, Functioneef3 -	call Functionef49 -	call Functionef2d +	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, Functioneed7 +	jr nc, NoEffectMessage +  	add 10  	ld [hl], a -	call Functioneee0 -	call Functionef2d +	call UpdateStatsAfterItem + +	call GetStatExpRelativePointer +  	ld hl, StatStrings  	add hl, bc  	ld a, [hli] @@ -1161,12 +1173,12 @@ Protein: ; ee91  	jp UseDisposableItem -Functioneed7: +NoEffectMessage:  	ld hl, ItemWontHaveEffectText  	call PrintText  	jp ClearPalettes -Functioneee0: ; eee0 (3:6ee0) +UpdateStatsAfterItem:  	ld a, MON_MAXHP  	call GetPartyParamLocation  	ld d, h @@ -1176,7 +1188,7 @@ Functioneee0: ; eee0 (3:6ee0)  	ld b, TRUE  	predef_jump CalcMonStats -Functioneef3: ; eef3 (3:6ef3) +RareCandy_StatBooster_ExitMenu:  	xor a  	ld [wItemEffectSucceeded], a  	jp ClearPalettes @@ -1198,34 +1210,34 @@ StatStrings:  .speed   db "SPEED@"  .special db "SPECIAL@" -Functionef2d: ; ef2d (3:6f2d) +GetStatExpRelativePointer:  	ld a, [wCurItem] -	ld hl, StatOffsets -.asm_ef33 +	ld hl, Table_eeeb +.next  	cp [hl]  	inc hl -	jr z, .asm_ef3a +	jr z, .got_it  	inc hl -	jr .asm_ef33 +	jr .next -.asm_ef3a +.got_it  	ld a, [hl]  	ld c, a -	ld b, $0 +	ld b, 0  	ret -StatOffsets: +Table_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 -Functionef49: ; ef49 (3:6f49) +RareCandy_StatBooster_GetParameters:  	ld a, [wCurPartySpecies]  	ld [wCurSpecies], a -	ld [wd151], a -	ld a, $1f +	ld [wTempSpecies], a +	ld a, MON_LEVEL  	call GetPartyParamLocation  	ld a, [hl]  	ld [wCurPartyLevel], a @@ -1235,24 +1247,30 @@ Functionef49: ; ef49 (3:6f49)  	call GetNick  	ret -RareCandy: ; ef68 (3:6f68) +RareCandyEffect:  	ld b, PARTYMENUACTION_HEALING_ITEM -	call Functionf24f -	jp c, Functioneef3 -	call Functionef49 +	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, Functioneed7 +	jp nc, NoEffectMessage +  	inc a  	ld [hl], a  	ld [wCurPartyLevel], a  	push de  	ld d, a  	farcall CalcExpAtLevel +  	pop de -	ld a, $8 +	ld a, MON_EXP  	call GetPartyParamLocation  	ldh a, [hMultiplicand + 0] @@ -1262,15 +1280,17 @@ RareCandy: ; ef68 (3:6f68)  	ldh a, [hMultiplicand + 2]  	ld [hl], a -	ld a, $24 +	ld a, MON_MAXHP  	call GetPartyParamLocation  	ld a, [hli]  	ld b, a  	ld c, [hl]  	push bc -	call Functioneee0 -	ld a, $25 +	call UpdateStatsAfterItem + +	ld a, MON_MAXHP + 1  	call GetPartyParamLocation +  	pop bc  	ld a, [hld]  	sub c @@ -1285,110 +1305,114 @@ RareCandy: ; ef68 (3:6f68)  	ld a, [hl]  	adc b  	ld [hl], a -	ld c, $1 +	ld c, 1  	farcall ChangeHappiness +  	ld a, PARTYMENUTEXT_LEVEL_UP -	call Functionf2a0 -	xor a +	call ItemActionText + +	xor a ; PARTYMON  	ld [wMonType], a  	predef CopyMonToTempMon +  	hlcoord 9, 0  	ld b, 10  	ld c, 9  	call Textbox +  	hlcoord 11, 1 -	ld bc, $4 +	ld bc, 4  	predef PrintTempMonStats +  	call WaitPressAorB_BlinkCursor -	xor a + +	xor a ; PARTYMON  	ld [wMonType], a  	ld a, [wCurPartySpecies] -	ld [wd151], a +	ld [wTempSpecies], a  	predef LearnLevelMoves +  	xor a  	ld [wForceEvolution], a  	farcall EvolvePokemon +  	jp UseDisposableItem -HealPowder: ; f003 (3:7003) -	ld b, $1 -	call Functionf24f -	jp c, Functionf2f4 -	call Functionf030 +HealPowderEffect: +	ld b, PARTYMENUACTION_HEALING_ITEM +	call UseItem_SelectMon + +	jp c, StatusHealer_ExitMenu + +	call UseStatusHealer +  	cp $0 -	jr nz, .asm_f01f -	ld c, $f +	jr nz, .asm_efc9 +	ld c, HAPPINESS_BITTERPOWDER  	farcall ChangeHappiness +  	call LooksBitterMessage +  	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 + +.asm_efc9 +	jp StatusHealer_Jumptable + +StatusHealingEffect: +	ld b, PARTYMENUACTION_HEALING_ITEM +	call UseItem_SelectMon +	jp c, StatusHealer_ExitMenu + +FullyHealStatus: +	call UseStatusHealer +	jp StatusHealer_Jumptable + +UseStatusHealer: +	call IsMonFainted  	ld a, $1  	ret z -	call Functionf0ae +	call GetItemHealingAction  	ld a, MON_STATUS  	call GetPartyParamLocation  	ld a, [hl]  	and c -	jr nz, .asm_f04a -	call Functionf05f +	jr nz, .good +	call IsItemUsedOnConfusedMon  	ld a, $1  	ret nc  	ld b, PARTYMENUTEXT_HEAL_CONFUSION -.asm_f04a +.good  	xor a  	ld [hl], a  	ld a, b  	ld [wPartyMenuActionText], a -	call Functionf086 +	call HealStatus  	call Play_SFX_FULL_HEAL -	call Functionf2cf +	call ItemActionTextWaitButton  	call UseDisposableItem  	ld a, $0  	ret -Functionf05f: ; f05f (3:705f) -	call Functionf2fc -	jr nc, .asm_f072 +IsItemUsedOnConfusedMon: +	call IsItemUsedOnBattleMon +	jr nc, .nope  	ld a, [wPlayerSubStatus3]  	bit SUBSTATUS_CONFUSED, a -	jr z, .asm_f072 +	jr z, .nope  	ld a, c  	cp $ff -	jr nz, .asm_f072 +	jr nz, .nope  	scf  	ret -.asm_f072 +.nope  	and a  	ret -RestoreBattlemonHP: -	call Functionf2fc +BattlemonRestoreHealth: +	call IsItemUsedOnBattleMon  	ret nc -	ld a, $22 +	ld a, MON_HP  	call GetPartyParamLocation  	ld a, [hli]  	ld [wBattleMonHP], a @@ -1396,284 +1420,281 @@ RestoreBattlemonHP:  	ld [wBattleMonHP + 1], a  	ret -Functionf086: ; f086 (3:7086) -	call Functionf2fc +HealStatus: +	call IsItemUsedOnBattleMon  	ret nc  	xor a  	ld [wBattleMonStatus], a  	ld hl, wPlayerSubStatus5 -	res 0, [hl] +	res SUBSTATUS_TOXIC, [hl]  	ld hl, wPlayerSubStatus1 -	res 0, [hl] -	call Functionf0ae +	res SUBSTATUS_NIGHTMARE, [hl] +	call GetItemHealingAction  	ld a, c -	cp $ff -	jr nz, .asm_f0a5 +	cp %11111111 +	jr nz, .not_full_heal  	ld hl, wPlayerSubStatus3 -	res 7, [hl] -.asm_f0a5 +	res SUBSTATUS_CONFUSED, [hl] +.not_full_heal  	push bc -	farcall CalcPlayerStats ; d:66f6 +	farcall CalcPlayerStats  	pop bc  	ret -Functionf0ae: ; f0ae (3:70ae) +GetItemHealingAction:  	push hl  	ld a, [wCurItem] -	ld hl, .healingactions ; $70c7 -	ld bc, $3 -.asm_f0b8 +	ld hl, StatusHealingActions +	ld bc, 3 +.next  	cp [hl] -	jr z, .asm_f0be +	jr z, .found_it  	add hl, bc -	jr .asm_f0b8 +	jr .next -.asm_f0be +.found_it  	inc hl  	ld b, [hl]  	inc hl  	ld a, [hl]  	ld c, a -	cp $ff +	cp %11111111  	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 +INCLUDE "data/items/heal_status.asm" + +StatusHealer_Jumptable: +	ld hl, .dw  	rst JumpTable  	ret -.Jumptable: -	dw Functionf2f8 -	dw Functionf2ef -	dw Functionf2f4 +.dw +	dw StatusHealer_ClearPalettes +	dw StatusHealer_NoEffect +	dw StatusHealer_ExitMenu -RevivalHerb: ; f0ff -	ld b, $1 -	call Functionf24f -	jp c, Functionf2f4 -	call Functionf12c -	cp $0 -	jr nz, .asm_f11b -	ld c, $11 +RevivalHerbEffect: +	ld b, PARTYMENUACTION_HEALING_ITEM +	call UseItem_SelectMon +	jp c, StatusHealer_ExitMenu + +	call RevivePokemon +	cp 0 +	jr nz, .asm_f0c5 + +	ld c, HAPPINESS_REVIVALHERB  	farcall ChangeHappiness  	call LooksBitterMessage -	ld a, $0 -.asm_f11b -	jp Functionf0f4 +	ld a, 0 -MaxRevive: ; f11e -Revive: ; f11e -	ld b, $1 -	call Functionf24f -	jp c, Functionf2f4 -	call Functionf12c -	jp Functionf0f4 +.asm_f0c5 +	jp StatusHealer_Jumptable -Functionf12c: ; f12c (3:712c) -	call Functionf363 -	ld a, $1 +ReviveEffect: +	ld b, PARTYMENUACTION_HEALING_ITEM +	call UseItem_SelectMon +	jp c, StatusHealer_ExitMenu + +	call RevivePokemon +	jp StatusHealer_Jumptable + +RevivePokemon: +	call IsMonFainted +	ld a, 1  	ret nz  	ld a, [wBattleMode]  	and a -	jr z, .asm_f15a +	jr z, .skip_to_revive +  	ld a, [wCurPartyMon]  	ld c, a -	ld d, $0 +	ld d, 0  	ld hl, wBattleParticipantsIncludingFainted  	ld b, CHECK_FLAG  	predef SmallFarFlagAction  	ld a, c  	and a -	jr z, .asm_f15a +	jr z, .skip_to_revive +  	ld a, [wCurPartyMon]  	ld c, a  	ld hl, wBattleParticipantsNotFainted  	ld b, SET_FLAG  	predef SmallFarFlagAction -.asm_f15a + +.skip_to_revive  	xor a  	ld [wLowHealthAlarm], a  	ld a, [wCurItem]  	cp REVIVE -	jr z, .asm_f16a -	call Functionf319 -	jr .asm_f16d - -.asm_f16a -	call Functionf310 -.asm_f16d -	call Functionf231 -	ld a, $f7 +	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 [wPartyMenuActionText], a -	call Functionf2cf +	call ItemActionTextWaitButton  	call UseDisposableItem -	ld a, $0 +	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) +FullRestoreEffect: +	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 + +.FullRestore:  	xor a  	ld [wLowHealthAlarm], a -	call Functionf319 -	ld a, $20 +	call ReviveFullHP +	ld a, MON_STATUS  	call GetPartyParamLocation  	xor a  	ld [hli], a  	ld [hl], a -	call Functionf086 -	call RestoreBattlemonHP -	call Functionf231 -	ld a, $f5 +	call HealStatus +	call BattlemonRestoreHealth +	call HealHP_SFX_GFX +	ld a, PARTYMENUTEXT_HEAL_HP  	ld [wPartyMenuActionText], a -	call Functionf2cf +	call ItemActionTextWaitButton  	call UseDisposableItem -	ld a, $0 +	ld a, 0  	ret -BitterBerry: ; f1c0 +BitterBerryEffect:  	ld hl, wPlayerSubStatus3 -	bit 7, [hl] -	ld a, $1 -	jr z, .asm_f1d9 -	res 7, [hl] +	bit SUBSTATUS_CONFUSED, [hl] +	ld a, 1 +	jr z, .done + +	res SUBSTATUS_CONFUSED, [hl]  	xor a  	ldh [hBattleTurn], a  	call UseItemText +  	ld hl, ConfusedNoMoreText  	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: + +	ld a, 0 + +.done +	jp StatusHealer_Jumptable + +RestoreHPEffect: +	call ItemRestoreHP +	jp StatusHealer_Jumptable + +EnergypowderEffect: +	ld c, HAPPINESS_BITTERPOWDER +	jr EnergypowderEnergyRootCommon + +EnergyRootEffect: +	ld c, HAPPINESS_ENERGYROOT + +EnergypowderEnergyRootCommon:  	push bc -	call Functionf1ff +	call ItemRestoreHP  	pop bc -	cp $0 -	jr nz, .asm_f1fc +	cp 0 +	jr nz, .skip_happiness +  	farcall ChangeHappiness  	call LooksBitterMessage -	ld a, $0 -.asm_f1fc -	jp Functionf0f4 +	ld a, 0 + +.skip_happiness +	jp StatusHealer_Jumptable -Functionf1ff: ; f1ff (3:71ff) +ItemRestoreHP:  	ld b, PARTYMENUACTION_HEALING_ITEM -	call Functionf24f -	ld a, $2 +	call UseItem_SelectMon +	ld a, 2  	ret c -	call Functionf363 -	ld a, $1 + +	call IsMonFainted +	ld a, 1  	ret z -	call CalculateCurHPAnimRemainingHP -	ld a, $1 + +	call IsMonAtFullHealth +	ld a, 1  	ret nc +  	xor a  	ld [wLowHealthAlarm], a -	call Functionf3eb -	call Functionf327 -	call RestoreBattlemonHP -	call Functionf231 +	call GetHealingItemAmount +	call RestoreHealth +	call BattlemonRestoreHealth +	call HealHP_SFX_GFX  	ld a, PARTYMENUTEXT_HEAL_HP  	ld [wPartyMenuActionText], a -	call Functionf2cf +	call ItemActionTextWaitButton  	call UseDisposableItem -	ld a, $0 +	ld a, 0  	ret -Functionf231: ; f231 (3:7231) +HealHP_SFX_GFX:  	push de -	ld de, $4 +	ld de, SFX_POTION  	call WaitPlaySFX  	pop de  	ld a, [wCurPartyMon]  	hlcoord 11, 0 -	ld bc, $28 +	ld bc, SCREEN_WIDTH * 2  	call AddNTimes  	ld a, $2  	ld [wWhichHPBar], a  	predef_jump AnimateHPBar -Functionf24f: ; f24f (3:724f) -	call Functionf261 +UseItem_SelectMon: +	call .SelectMon  	ret c +  	ld a, [wCurPartySpecies]  	cp EGG -	jr nz, .asm_f25f +	jr nz, .not_egg +  	call CantUseOnEggMessage  	scf  	ret -.asm_f25f +.not_egg  	and a  	ret -Functionf261: ; f261 (3:7261) +.SelectMon:  	ld a, b  	ld [wPartyMenuActionText], a  	push hl  	push de  	push bc  	call ClearBGPalettes -	call Functionf272 +	call ChooseMonToUseItemOn  	pop bc  	pop de  	pop hl  	ret -Functionf272: ; f272 (3:7272) +ChooseMonToUseItemOn:  	farcall LoadPartyMenuGFX  	farcall InitPartyMenuWithCancel  	farcall InitPartyMenuGFX @@ -1685,7 +1706,7 @@ Functionf272: ; f272 (3:7272)  	farcall PartyMenuSelect  	ret -Functionf2a0: ; f2a0 (3:72a0) +ItemActionText:  	ld [wPartyMenuActionText], a  	ld a, [wCurPartySpecies]  	push af @@ -1708,33 +1729,33 @@ Functionf2a0: ; f2a0 (3:72a0)  	ld [wCurPartySpecies], a  	ret -Functionf2cf: ; f2cf (3:72cf) +ItemActionTextWaitButton:  	xor a  	ldh [hBGMapMode], a  	hlcoord 0, 0 -	ld bc, SCREEN_HEIGHT * SCREEN_WIDTH +	ld bc, wTilemapEnd - wTilemap  	ld a, " "  	call ByteFill  	ld a, [wPartyMenuActionText] -	call Functionf2a0 +	call ItemActionText  	ld a, $1  	ldh [hBGMapMode], a  	ld c, 50  	call DelayFrames  	jp WaitPressAorB_BlinkCursor -Functionf2ef: ; f2ef (3:72ef) +StatusHealer_NoEffect:  	call WontHaveAnyEffectMessage -	jr Functionf2f8 +	jr StatusHealer_ClearPalettes -Functionf2f4: ; f2f4 (3:72f4) +StatusHealer_ExitMenu:  	xor a -	ld [wFieldMoveSucceeded], a -Functionf2f8: ; f2f8 (3:72f8) +	ld [wItemEffectSucceeded], a +StatusHealer_ClearPalettes:  	call ClearPalettes  	ret -Functionf2fc: ; f2fc (3:72fc) +IsItemUsedOnBattleMon:  	ld a, [wBattleMode]  	and a  	ret z @@ -1743,32 +1764,32 @@ Functionf2fc: ; f2fc (3:72fc)  	ld hl, wCurBattleMon  	cp [hl]  	pop hl -	jr nz, .asm_f30e +	jr nz, .nope  	scf  	ret -.asm_f30e +.nope  	xor a  	ret -Functionf310: ; f310 (3:7310) -	call GetCurHPAnimMaxHP +ReviveHalfHP: +	call LoadHPFromBuffer1  	srl d  	rr e -	jr asm_f31c +	jr ContinueRevive -Functionf319: ; f319 (3:7319) -	call GetCurHPAnimMaxHP -asm_f31c: +ReviveFullHP: +	call LoadHPFromBuffer1 +ContinueRevive:  	ld a, MON_HP  	call GetPartyParamLocation  	ld [hl], d  	inc hl  	ld [hl], e -	jp CopyCurHPToAnimBufferNewHP +	jp LoadCurHPIntoBuffer5 -Functionf327: ; f327 (3:7327) -	ld a, $23 +RestoreHealth: +	ld a, MON_HP + 1  	call GetPartyParamLocation  	ld a, [hl]  	add e @@ -1776,8 +1797,8 @@ Functionf327: ; f327 (3:7327)  	ld a, [hl]  	adc d  	ld [hl], a -	jr c, .asm_f34b -	call CopyCurHPToAnimBufferNewHP +	jr c, .full_hp +	call LoadCurHPIntoBuffer5  	ld a, MON_HP + 1  	call GetPartyParamLocation  	ld d, h @@ -1790,13 +1811,13 @@ Functionf327: ; f327 (3:7327)  	dec hl  	ld a, [de]  	sbc [hl] -	jr c, .asm_f34e -.asm_f34b -	call Functionf319 -.asm_f34e +	jr c, .finish +.full_hp +	call ReviveFullHP +.finish  	ret -Functionf34f: ; f34f (3:734f) +RemoveHP:  	ld a, MON_HP + 1  	call GetPartyParamLocation  	ld a, [hl] @@ -1805,93 +1826,93 @@ Functionf34f: ; f34f (3:734f)  	ld a, [hl]  	sbc d  	ld [hl], a -	jr nc, .asm_f35f +	jr nc, .okay  	xor a  	ld [hld], a  	ld [hl], a -.asm_f35f -	call CopyCurHPToAnimBufferNewHP +.okay +	call LoadCurHPIntoBuffer5  	ret -Functionf363: ; f363 (3:7363) +IsMonFainted:  	push de -	call CopyMaxHPToAnimBufferMaxHP -	call CopyCurHPToAnimBufferOldHP -	call GetCurHPAnimOldHP +	call LoadMaxHPToBuffer1 +	call LoadCurHPToBuffer3 +	call LoadHPFromBuffer3  	ld a, d  	or e  	pop de  	ret -CalculateCurHPAnimRemainingHP: ; f371 (3:7371) -	call GetCurHPAnimOldHP +IsMonAtFullHealth: +	call LoadHPFromBuffer3  	ld h, d  	ld l, e -	call GetCurHPAnimMaxHP +	call LoadHPFromBuffer1  	ld a, l  	sub e  	ld a, h  	sbc d  	ret -CopyCurHPToAnimBufferNewHP: ; f37e (3:737e) +LoadCurHPIntoBuffer5:  	ld a, MON_HP  	call GetPartyParamLocation  	ld a, [hli] -	ld [wCurHPAnimNewHP + 1], a +	ld [wBuffer6], a  	ld a, [hl] -	ld [wCurHPAnimNewHP], a +	ld [wBuffer5], a  	ret -SetCurHPAnimNewHP: +LoadHPIntoBuffer5:  	ld a, d -	ld [wCurHPAnimNewHP + 1], a +	ld [wBuffer6], a  	ld a, e -	ld [wCurHPAnimNewHP], a +	ld [wBuffer5], a  	ret -GetCurHPAnimNewHP: -	ld a, [wCurHPAnimNewHP + 1] +LoadHPFromBuffer5: +	ld a, [wBuffer6]  	ld d, a -	ld a, [wCurHPAnimNewHP] +	ld a, [wBuffer5]  	ld e, a  	ret -CopyCurHPToAnimBufferOldHP: ; f39e (3:739e) +LoadCurHPToBuffer3:  	ld a, MON_HP  	call GetPartyParamLocation  	ld a, [hli] -	ld [wCurHPAnimOldHP + 1], a +	ld [wBuffer4], a  	ld a, [hl] -	ld [wCurHPAnimOldHP], a +	ld [wBuffer3], a  	ret -GetCurHPAnimOldHP: ; f3ac (3:73ac) -	ld a, [wCurHPAnimOldHP + 1] +LoadHPFromBuffer3: +	ld a, [wBuffer4]  	ld d, a -	ld a, [wCurHPAnimOldHP] +	ld a, [wBuffer3]  	ld e, a  	ret -CopyMaxHPToAnimBufferMaxHP: ; f3b5 (3:73b5) +LoadMaxHPToBuffer1:  	push hl  	ld a, MON_MAXHP  	call GetPartyParamLocation  	ld a, [hli] -	ld [wCurHPAnimMaxHP + 1], a +	ld [wBuffer2], a  	ld a, [hl] -	ld [wCurHPAnimMaxHP], a +	ld [wBuffer1], a  	pop hl  	ret -GetCurHPAnimMaxHP: ; f3c5 (3:73c5) -	ld a, [wCurHPAnimMaxHP + 1] +LoadHPFromBuffer1: +	ld a, [wBuffer2]  	ld d, a -	ld a, [wCurHPAnimMaxHP] +	ld a, [wBuffer1]  	ld e, a  	ret -GetOneFifthMaxHP: ; f3ce (3:73ce) +GetOneFifthMaxHP:  	push bc  	ld a, MON_MAXHP  	call GetPartyParamLocation @@ -1910,135 +1931,122 @@ GetOneFifthMaxHP: ; f3ce (3:73ce)  	pop bc  	ret -Functionf3eb: ; f3eb (3:73eb) +GetHealingItemAmount:  	push hl  	ld a, [wCurItem] -	ld hl, HealingItemParameters +	ld hl, HealingHPAmounts  	ld d, a -.asm_f3f3 +.next  	ld a, [hli]  	cp -1 -	jr z, .asm_f3ff +	jr z, .NotFound  	cp d -	jr z, .asm_f400 +	jr z, .done  	inc hl  	inc hl -	jr .asm_f3f3 +	jr .next -.asm_f3ff +.NotFound:  	scf -.asm_f400 +.done  	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 +INCLUDE "data/items/heal_hp.asm"  Softboiled_MilkDrinkFunction: +; Softboiled/Milk Drink in the field  	ld a, [wPartyMenuCursor]  	dec a  	ld b, a -	call Functionf46f -	jr c, .asm_f469 +	call .SelectMilkDrinkRecipient ; select pokemon +	jr c, .skip  	ld a, b  	ld [wCurPartyMon], a -	call Functionf363 +	call IsMonFainted  	call GetOneFifthMaxHP -	call Functionf34f +	call RemoveHP  	push bc -	call Functionf231 +	call HealHP_SFX_GFX  	pop bc  	call GetOneFifthMaxHP  	ld a, c  	ld [wCurPartyMon], a -	call Functionf363 -	call Functionf327 -.asm_f45d -	call Functionf231 +	call IsMonFainted +	call RestoreHealth +	call HealHP_SFX_GFX  	ld a, PARTYMENUTEXT_HEAL_HP -	call Functionf2a0 +	call ItemActionText  	call JoyWaitAorB -.asm_f469 +.skip  	ld a, b  	inc a  	ld [wPartyMenuCursor], a  	ret -Functionf46f: ; f46f (3:746f) +.SelectMilkDrinkRecipient: +.loop  	push bc -	ld a, $1 +	ld a, PARTYMENUACTION_HEALING_ITEM  	ld [wPartyMenuActionText], a -	call Functionf272 +	call ChooseMonToUseItemOn  	pop bc -	jr c, .asm_f494 +	jr c, .set_carry  	ld a, [wPartyMenuCursor]  	dec a  	ld c, a  	ld a, b  	cp c -	jr z, .asm_f496 +	jr z, .cant_use ; chose the same mon as user  	ld a, c  	ld [wCurPartyMon], a -	call Functionf363 -	jr z, .asm_f496 -	call CalculateCurHPAnimRemainingHP -	jr nc, .asm_f496 +	call IsMonFainted +	jr z, .cant_use +	call IsMonAtFullHealth +	jr nc, .cant_use  	xor a  	ret -.asm_f494 +.set_carry  	scf  	ret -.asm_f496 +.cant_use  	push bc  	ld hl, .ItemCantUseOnMonText  	call MenuTextboxBackup  	pop bc -	jr Functionf46f +	jr .loop  .ItemCantUseOnMonText:  	text_far _ItemCantUseOnMonText  	text_end -EscapeRope: ; f4a5 (3:74a5) +EscapeRopeEffect:  	xor a -	ld [wFieldMoveSucceeded], a -	farcall EscapeRopeFunction ; same bank -	ld a, [wFieldMoveSucceeded] -	cp $1 +	ld [wItemEffectSucceeded], a +	farcall EscapeRopeFunction + +	ld a, [wItemEffectSucceeded] +	cp 1  	call z, UseDisposableItem  	ret -SuperRepel: ; f4b8 (3:74b8) +SuperRepelEffect:  	ld b, 200 -	jr asm_f4c2 +	jr UseRepel -MaxRepel: ; f4bc (3:74bc) +MaxRepelEffect:  	ld b, 250 -	jr asm_f4c2 +	jr UseRepel -Repel: ; f4c0 (3:74c0) +RepelEffect:  	ld b, 100 -asm_f4c2: + +UseRepel:  	ld a, [wRepelEffect]  	and a  	ld hl, RepelUsedEarlierIsStillInEffectText @@ -2052,57 +2060,57 @@ RepelUsedEarlierIsStillInEffectText:  	text_far _RepelUsedEarlierIsStillInEffectText  	text_end -XAccuracy: ; f4d8 (3:74d8) +XAccuracyEffect:  	ld hl, wPlayerSubStatus4  	bit SUBSTATUS_X_ACCURACY, [hl]  	jp nz, WontHaveAnyEffect_NotUsedMessage  	set SUBSTATUS_X_ACCURACY, [hl]  	jp UseItemText -PokeDoll: ; f4e5 (3:74e5) +PokeDollEffect:  	ld a, [wBattleMode]  	dec a  	jr nz, .asm_f4f6  	inc a  	ld [wForcedSwitch], a +	; set battle draw  	inc a  	ld [wBattleResult], a  	jp UseItemText  .asm_f4f6  	xor a -	ld [wFieldMoveSucceeded], a +	ld [wItemEffectSucceeded], a  	ret -GuardSpec: ; f4fb (3:74fb) +GuardSpecEffect:  	ld hl, wPlayerSubStatus4  	bit SUBSTATUS_MIST, [hl]  	jp nz, WontHaveAnyEffect_NotUsedMessage  	set SUBSTATUS_MIST, [hl]  	jp UseItemText -DireHit: ; f508 (3:7508) +DireHitEffect:  	ld hl, wPlayerSubStatus4  	bit SUBSTATUS_FOCUS_ENERGY, [hl]  	jp nz, WontHaveAnyEffect_NotUsedMessage  	set SUBSTATUS_FOCUS_ENERGY, [hl]  	jp UseItemText -XAttack: ; f515 -XDefend: ; f515 -XSpecial: ; f515 -XSpeed: ; f515 +XItemEffect:  	call UseItemText +  	ld a, [wCurItem] -	ld hl, .x_item_table -.asm_f51e +	ld hl, XItemStats + +.loop  	cp [hl] -	jr z, .asm_f525 +	jr z, .got_it  	inc hl  	inc hl -	jr .asm_f51e +	jr .loop -.asm_f525 +.got_it  	inc hl  	ld b, [hl]  	xor a @@ -2121,13 +2129,9 @@ XSpeed: ; f515  	farcall ChangeHappiness  	ret -.x_item_table -	db X_ATTACK,  ATTACK -	db X_DEFEND,  DEFENSE -	db X_SPEED,   SPEED -	db X_SPECIAL, SP_ATTACK +INCLUDE "data/items/x_stats.asm" -PokeFlute: +PokeFluteEffect:  	ld a, [wBattleMode]  	and a  	jr nz, .dummy @@ -2205,19 +2209,22 @@ PokeFlute:  	text_asm  	ld a, [wBattleMode]  	and a -	jr nz, .asm_f5dc +	jr nz, .battle +  	push de  	ld de, SFX_POKEFLUTE  	call WaitPlaySFX  	call WaitSFX  	pop de -.asm_f5dc + +.battle  	ld hl, .terminator  	ret -.terminator db "@" +.terminator +	db "@" -CoinCase: +CoinCaseEffect:  	ld hl, .CoinCaseCountText  	jp MenuTextboxWaitButton @@ -2225,15 +2232,15 @@ CoinCase:  	text_far _CoinCaseCountText  	text_end -OldRod: ; f5ec (3:75ec) +OldRodEffect:  	ld e, $0  	jr UseRod -GoodRod: ; f5f0 (3:75f0) +GoodRodEffect:  	ld e, $1  	jr UseRod -SuperRod: ; f5f4 (3:75f4) +SuperRodEffect:  	ld e, $2  	jr UseRod @@ -2241,34 +2248,34 @@ UseRod:  	farcall FishFunction  	ret -ItemfinderEffect: ; f5ff (3:75ff) +ItemfinderEffect:  	farcall ItemFinder  	ret -Elixer: ; f606 -Ether: ; f606 -MaxElixer: ; f606 -MaxEther: ; f606 -Mysteryberry: ; f606 -PPUp: ; f606 (3:7606) +RestorePPEffect:  	ld a, [wCurItem] -	ld [wMovementBufferCount], a -.asm_f60c -	ld b, $1 -	call Functionf24f -	jp c, Functionf727 -.asm_f614 -	ld a, [wMovementBufferCount] +	ld [wceed], a + +.loop +	; Party Screen opens to choose on which mon to use the Item +	ld b, PARTYMENUACTION_HEALING_ITEM +	call UseItem_SelectMon +	jp c, PPRestoreItem_Cancel + +.loop2 +	ld a, [wceed]  	cp MAX_ELIXER -	jp z, Functionf6f6 +	jp z, Elixer_RestorePPofAllMoves  	cp ELIXER -	jp z, Functionf6f6 +	jp z, Elixer_RestorePPofAllMoves +  	ld hl, RaiseThePPOfWhichMoveText -	ld a, [wMovementBufferCount] +	ld a, [wceed]  	cp PP_UP -	jr z, .asm_f62e +	jr z, .ppup  	ld hl, RestoreThePPOfWhichMoveText -.asm_f62e + +.ppup  	call PrintText  	ld a, [wCurMoveNum] @@ -2277,187 +2284,201 @@ PPUp: ; f606 (3:7606)  	ld [wCurMoveNum], a  	ld a, $2  	ld [wMoveSelectionMenuType], a -	ld a, $f -	ld hl, $62f3 -	rst FarCall +	farcall MoveSelectionScreen  	pop bc  	ld a, b  	ld [wCurMoveNum], a -	jr nz, .asm_f60c +	jr nz, .loop  	ld hl, wPartyMon1Moves -	ld bc, $30 -	call Functionf9aa +	ld bc, PARTYMON_STRUCT_LENGTH +	call GetMthMoveOfNthPartymon +  	push hl  	ld a, [hl] -	ld [wd151], a +	ld [wNamedObjectIndexBuffer], a  	call GetMoveName  	call CopyName1  	pop hl +  	ld a, [wceed]  	cp PP_UP -	jp nz, Functionf6ee +	jp nz, Not_PP_Up +  	ld a, [hl] -	cp $a6 -	jr z, .asm_f676 -	ld bc, $15 +	cp SKETCH +	jr z, .CantUsePPUpOnSketch + +	ld bc, MON_PP - MON_MOVES  	add hl, bc  	ld a, [hl] -	cp $c0 -	jr c, .asm_f67e -.asm_f676 +	cp PP_UP_MASK +	jr c, .do_ppup + +.CantUsePPUpOnSketch: +.pp_is_maxed_out  	ld hl, PPIsMaxedOutText  	call PrintText -	jr .asm_f614 +	jr .loop2 -.asm_f67e +.do_ppup  	ld a, [hl] -	add $40 +	add PP_UP_ONE  	ld [hl], a -	ld a, $1 -	ld [wd151], a -	call Functionf893 +	ld a, TRUE +	ld [wUsePPUp], a +	call ApplyPPUp  	call Play_SFX_FULL_HEAL  	ld hl, PPsIncreasedText  	call PrintText -asm_f693: + +FinishPPRestore:  	call ClearPalettes  	jp UseDisposableItem -asm_f699: +BattleRestorePP:  	ld a, [wBattleMode]  	and a -	jr z, .asm_f6b3 +	jr z, .not_in_battle  	ld a, [wCurPartyMon]  	ld b, a  	ld a, [wCurBattleMon]  	cp b -	jr nz, .asm_f6b3 +	jr nz, .not_in_battle  	ld a, [wPlayerSubStatus5]  	bit SUBSTATUS_TRANSFORMED, a -	jr nz, .asm_f6b3 -	call Functionf6be -.asm_f6b3 +	jr nz, .not_in_battle +	call .UpdateBattleMonPP + +.not_in_battle  	call Play_SFX_FULL_HEAL  	ld hl, PPRestoredText  	call PrintText -	jr asm_f693 +	jr FinishPPRestore -Functionf6be: ; f6be (3:76be) +.UpdateBattleMonPP:  	ld a, [wCurPartyMon]  	ld hl, wPartyMon1Moves -	ld bc, $30 +	ld bc, PARTYMON_STRUCT_LENGTH  	call AddNTimes  	ld de, wBattleMonMoves -	ld b, $4 -.asm_f6cf +	ld b, NUM_MOVES +.loop  	ld a, [de]  	and a -	jr z, .asm_f6ed +	jr z, .done  	cp [hl] -	jr nz, .asm_f6e8 +	jr nz, .next  	push hl  	push de  	push bc +rept NUM_MOVES + 2 ; wBattleMonPP - wBattleMonMoves  	inc de -	inc de -	inc de -	inc de -	inc de -	inc de -	ld bc, $15 +endr +	ld bc, MON_PP - MON_MOVES  	add hl, bc  	ld a, [hl]  	ld [de], a  	pop bc  	pop de  	pop hl -.asm_f6e8 + +.next  	inc hl  	inc de  	dec b -	jr nz, .asm_f6cf -.asm_f6ed +	jr nz, .loop + +.done  	ret -Functionf6ee: ; f6ee (3:76ee) -	call Functionf72f -	jr nz, asm_f699 -	jp Functionf724 +Not_PP_Up: +	call RestorePP +	jr nz, BattleRestorePP +	jp PPRestoreItem_NoEffect -Functionf6f6: ; f6f6 (3:76f6) +Elixer_RestorePPofAllMoves:  	xor a  	ld hl, wMenuCursorY  	ld [hli], a  	ld [hl], a -	ld b, $4 -.asm_f6fe +	ld b, NUM_MOVES +.moveLoop  	push bc  	ld hl, wPartyMon1Moves -	ld bc, $30 -	call Functionf9aa +	ld bc, PARTYMON_STRUCT_LENGTH +	call GetMthMoveOfNthPartymon  	ld a, [hl]  	and a -	jr z, .asm_f715 -	call Functionf72f -	jr z, .asm_f715 +	jr z, .next + +	call RestorePP +	jr z, .next  	ld hl, wMenuCursorX  	inc [hl] -.asm_f715 + +.next  	ld hl, wMenuCursorY  	inc [hl]  	pop bc  	dec b -	jr nz, .asm_f6fe +	jr nz, .moveLoop  	ld a, [wMenuCursorX]  	and a -	jp nz, asm_f699 -Functionf724: ; f724 (3:7724) +	jp nz, BattleRestorePP + +PPRestoreItem_NoEffect:  	call WontHaveAnyEffectMessage -Functionf727: ; f727 (3:7727) + +PPRestoreItem_Cancel:  	call ClearPalettes  	xor a -	ld [wFieldMoveSucceeded], a +	ld [wItemEffectSucceeded], a  	ret -Functionf72f: ; f72f (3:772f) -	xor a +RestorePP: +	xor a ; PARTYMON  	ld [wMonType], a  	call GetMaxPPOfMove  	ld hl, wPartyMon1PP -	ld bc, $30 -	call Functionf9aa -	ld a, [wd151] +	ld bc, PARTYMON_STRUCT_LENGTH +	call GetMthMoveOfNthPartymon +	ld a, [wTempPP]  	ld b, a  	ld a, [hl] -	and $3f +	and PP_MASK  	cp b -	jr nc, .asm_f76a +	jr nc, .dont_restore +  	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 +	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 $3f +	and PP_MASK  	add c  	cp b -	jr nc, .asm_f764 +	jr nc, .restore_all  	ld b, a -.asm_f764 + +.restore_all  	ld a, [hl] -	and $c0 +	and PP_UP_MASK  	or b  	ld [hl], a  	ret -.asm_f76a +.dont_restore  	xor a  	ret @@ -2481,33 +2502,33 @@ PPRestoredText:  	text_far _PPRestoredText  	text_end -Squirtbottle: ; f785 (3:7785) -	farcall SquirtbottleFunction ; 14:4763 +SquirtbottleEffect: +	farcall _Squirtbottle  	ret -CardKey: ; f78c (3:778c) -	farcall CardKeyFunction ; 14:47ac +CardKeyEffect: +	farcall _CardKey  	ret -BasementKey: ; f793 (3:7793) -	farcall BasementKeyFunction ; 14:47e7 +BasementKeyEffect: +	farcall _BasementKey  	ret -SacredAsh: ; f79a (3:779a) -	farcall SacredAshFunction ; 14:4819 -	ld a, [wFieldMoveSucceeded] +SacredAshEffect: +	farcall _SacredAsh +	ld a, [wItemEffectSucceeded]  	cp $1  	ret nz  	call UseDisposableItem  	ret -NormalBox: ; f7aa (3:77aa) +NormalBoxEffect:  	ld c, DECOFLAG_SILVER_TROPHY_DOLL -	jr asm_f7b0 +	jr OpenBox -GorgeousBox: ; f7ae (3:77ae) +GorgeousBoxEffect:  	ld c, DECOFLAG_GOLD_TROPHY_DOLL -asm_f7b0: +OpenBox:  	farcall SetSpecificDecorationFlag  	ld hl, .SentTrophyHomeText @@ -2519,97 +2540,7 @@ asm_f7b0:  	text_far _SentTrophyHomeText  	text_end -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 +NoEffect:  	jp IsntTheTimeMessage  Play_SFX_FULL_HEAL: @@ -2751,40 +2682,42 @@ ItemGotOffText:  	text_far _ItemGotOffText  	text_end -Functionf893: ; f893 (3:7893) -	ld a, $2 +ApplyPPUp: +	ld a, MON_MOVES  	call GetPartyParamLocation  	push hl  	ld de, wBuffer1  	predef FillPP  	pop hl -	ld bc, $15 +	ld bc, MON_PP - MON_MOVES  	add hl, bc -	ld de, wCurHPAnimMaxHP -	ld b, $0 -.asm_f8ab +	ld de, wBuffer1 +	ld b, 0 +.loop  	inc b  	ld a, b -	cp $5 +	cp NUM_MOVES + 1  	ret z -	ld a, [wd151] -	dec a -	jr nz, .asm_f8bd +	ld a, [wUsePPUp] +	dec a ; FALSE? +	jr nz, .use  	ld a, [wMenuCursorY]  	inc a  	cp b -	jr nz, .asm_f8c4 -.asm_f8bd +	jr nz, .skip + +.use  	ld a, [hl] -	and $c0 -	ld a, [de] -	call nz, Functionf8c8 -.asm_f8c4 +	and PP_UP_MASK +	ld a, [de] ; wasted cycle +	call nz, ComputeMaxPP + +.skip  	inc hl  	inc de -	jr .asm_f8ab +	jr .loop -Functionf8c8: ; f8c8 (3:78c8) +ComputeMaxPP:  	push bc  	; Divide the base PP by 5.  	ld a, [de] @@ -2807,37 +2740,44 @@ Functionf8c8: ; f8c8 (3:78c8)  	ld c, a  	; If this value is 0, we are done  	and a -	jr z, .asm_f8fd -.asm_f8ea +	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.  	ldh a, [hQuotient + 3]  	cp $8 -	jr c, .asm_f8f2 +	jr c, .okay  	ld a, $7 -.asm_f8f2 + +.okay  	add b  	ld b, a -	ld a, [wd151] +	ld a, [wTempPP]  	dec a -	jr z, .asm_f8fd +	jr z, .NoPPUp  	dec c -	jr nz, .asm_f8ea -.asm_f8fd +	jr nz, .loop + +.NoPPUp:  	ld [hl], b  	pop bc  	ret -Functionf900: ; f900 (3:7900) -	ld a, $17 +RestoreAllPP: +	ld a, MON_PP  	call GetPartyParamLocation  	push hl -	ld a, $2 +	ld a, MON_MOVES  	call GetPartyParamLocation  	pop de -	xor a +	xor a ; PARTYMON  	ld [wMenuCursorY], a  	ld [wMonType], a -	ld c, $4 -.asm_f915 +	ld c, NUM_MOVES +.loop  	ld a, [hli]  	and a  	ret z @@ -2848,9 +2788,9 @@ Functionf900: ; f900 (3:7900)  	pop bc  	pop de  	ld a, [de] -	and $c0 +	and PP_UP_MASK  	ld b, a -	ld a, [wd151] +	ld a, [wTempPP]  	add b  	ld [de], a  	inc de @@ -2858,41 +2798,50 @@ Functionf900: ; f900 (3:7900)  	inc [hl]  	pop hl  	dec c -	jr nz, .asm_f915 +	jr nz, .loop  	ret -GetMaxPPOfMove: ; f933 (3:7933) -	ld a, [wStringBuffer1] +GetMaxPPOfMove: +	ld a, [wStringBuffer1 + 0]  	push af  	ld a, [wStringBuffer1 + 1]  	push af +  	ld a, [wMonType]  	and a +  	ld hl, wPartyMon1Moves -	ld bc, $30 -	jr z, .asm_f961 +	ld bc, PARTYMON_STRUCT_LENGTH +	jr z, .got_partymon ; PARTYMON +  	ld hl, wOTPartyMon1Moves  	dec a -	jr z, .asm_f961 +	jr z, .got_partymon ; OTPARTYMON +  	ld hl, wTempMonMoves  	dec a -	jr z, .asm_f95c -	ld hl, wTempMonMoves +	jr z, .got_nonpartymon ; BOXMON + +	ld hl, wTempMonMoves ; Wasted cycles  	dec a -	jr z, .asm_f95c -	ld hl, wBattleMonMoves -.asm_f95c -	call Functionf9b0 -	jr .asm_f964 - -.asm_f961 -	call Functionf9aa -.asm_f964 +	jr z, .got_nonpartymon ; TEMPMON + +	ld hl, wBattleMonMoves ; 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, $7 +	ld bc, MOVE_LENGTH  	call AddNTimes  	ld a, BANK(Moves)  	call GetFarByte @@ -2900,103 +2849,43 @@ GetMaxPPOfMove: ; f933 (3:7933)  	ld de, wStringBuffer1  	ld [de], a  	pop hl +  	push bc -	ld bc, $15 +	ld bc, MON_PP - MON_MOVES  	ld a, [wMonType] -	cp $4 -	jr nz, .asm_f989 -	ld bc, $6 -.asm_f989 +	cp WILDMON +	jr nz, .notwild +	ld bc, wEnemyMonPP - wEnemyMonMoves +.notwild  	add hl, bc  	ld a, [hl] -	and $c0 +	and PP_UP_MASK  	pop bc +  	or b  	ld hl, wStringBuffer1 + 1  	ld [hl], a  	xor a -	ld [wd151], a -	ld a, b -	call Functionf8c8 +	ld [wTempPP], a +	ld a, b ; this gets lost anyway +	call ComputeMaxPP  	ld a, [hl] -	and $3f -	ld [wd151], a +	and PP_MASK +	ld [wTempPP], a +  	pop af  	ld [wStringBuffer1 + 1], a -.asm_f9a3  	pop af -	ld [wStringBuffer1], a +	ld [wStringBuffer1 + 0], a  	ret -Functionf9aa: ; f9aa (3:79aa) +GetMthMoveOfNthPartymon:  	ld a, [wCurPartyMon]  	call AddNTimes -Functionf9b0: ; f9b0 (3:79b0) + +GetMthMoveOfCurrentMon:  	ld a, [wMenuCursorY]  	ld c, a -	ld b, $0 +	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 diff --git a/engine/items/items.asm b/engine/items/items.asm index 5ab48b2a..ef0f10dd 100755 --- a/engine/items/items.asm +++ b/engine/items/items.asm @@ -1,235 +1,244 @@ -_ReceiveItem:: ; d1e2 (3:51e2) -	call CheckBagOrPC -	jp nz, PutItemInPocketOrPC +_ReceiveItem:: +	call DoesHLEqualNumItems +	jp nz, PutItemInPocket  	push hl  	call CheckItemPocket  	pop de  	ld a, [wItemAttributeParamBuffer]  	dec a -	ld hl, .Jumptable +	ld hl, .Pockets  	rst JumpTable  	ret -.Jumptable -	dw ReceiveNormalItem -	dw ReceiveKeyItem -	dw ReceiveBall -	dw ReceiveTMHM +.Pockets: +; entries correspond to item types +	dw .Item +	dw .KeyItem +	dw .Ball +	dw .TMHM -ReceiveNormalItem: +.Item:  	ld h, d  	ld l, e -	jp PutItemInPocketOrPC +	jp PutItemInPocket -ReceiveKeyItem: +.KeyItem:  	ld h, d  	ld l, e -	jp PutItemInKeyItemPocket +	jp ReceiveKeyItem -ReceiveBall: +.Ball:  	ld hl, wNumBalls -	jp PutItemInPocketOrPC +	jp PutItemInPocket -ReceiveTMHM: +.TMHM:  	ld h, d  	ld l, e  	ld a, [wCurItem]  	ld c, a -	call GetNumberedTMHM -	jp PutItemInTMPocket +	call GetTMHMNumber +	jp ReceiveTMHM -_TossItem:: ; d21a (3:521a) -	call CheckBagOrPC -	jr nz, remove_item_from_bag_or_pc +_TossItem:: +	call DoesHLEqualNumItems +	jr nz, .remove  	push hl  	call CheckItemPocket  	pop de  	ld a, [wItemAttributeParamBuffer]  	dec a -	ld hl, .Jumptable ; $522d +	ld hl, .Pockets  	rst JumpTable  	ret -.Jumptable -	dw RemoveNormalItem -	dw RemoveKeyItem -	dw RemoveBall -	dw RemoveTMHM +.Pockets: +; entries correspond to item types +	dw .Item +	dw .KeyItem +	dw .Ball +	dw .TMHM -RemoveBall: +.Ball:  	ld hl, wNumBalls -	jp RemoveItemAndQuantity +	jp RemoveItemFromPocket -RemoveTMHM: +.TMHM:  	ld h, d  	ld l, e  	ld a, [wCurItem]  	ld c, a -	call GetNumberedTMHM -	jp RemoveTMorHM +	call GetTMHMNumber +	jp TossTMHM -RemoveKeyItem: +.KeyItem:  	ld h, d  	ld l, e -	jp RemoveItemWithoutQuantity +	jp TossKeyItem -RemoveNormalItem: +.Item:  	ld h, d  	ld l, e -remove_item_from_bag_or_pc: -	jp RemoveItemAndQuantity -_CheckItem:: ; d251 (3:5251) -	call CheckBagOrPC -	jr nz, check_item_in_bag_or_pc +.remove +	jp RemoveItemFromPocket + +_CheckItem:: +	call DoesHLEqualNumItems +	jr nz, .nope  	push hl  	call CheckItemPocket  	pop de  	ld a, [wItemAttributeParamBuffer]  	dec a -	ld hl, .Jumptable +	ld hl, .Pockets  	rst JumpTable  	ret -.Jumptable -	dw CheckNormalItem -	dw CheckKeyItem -	dw CheckBall -	dw CheckTMHM +.Pockets: +; entries correspond to item types +	dw .Item +	dw .KeyItem +	dw .Ball +	dw .TMHM -CheckBall: +.Ball:  	ld hl, wNumBalls -	jp CheckItemWithQuantity +	jp CheckTheItem -CheckTMHM: +.TMHM:  	ld h, d  	ld l, e  	ld a, [wCurItem]  	ld c, a -	call GetNumberedTMHM -	jp CheckTMorHM +	call GetTMHMNumber +	jp CheckTMHM -CheckKeyItem: +.KeyItem:  	ld h, d  	ld l, e -	jp CheckItemWithoutQuantity +	jp CheckKeyItems -CheckNormalItem: +.Item:  	ld h, d  	ld l, e -check_item_in_bag_or_pc: -	jp CheckItemWithQuantity -CheckBagOrPC: ; d288 (3:5288) +.nope +	jp CheckTheItem + +DoesHLEqualNumItems:  	ld a, l -	cp wNumItems % $100 +	cp LOW(wNumItems)  	ret nz  	ld a, h -	cp wNumItems / $100 +	cp HIGH(wNumItems)  	ret -GetPocketCapacity: ; d290 (3:5290) +GetPocketCapacity:  	ld c, MAX_ITEMS  	ld a, e -	cp wNumItems % $100 -	jr nz, .asm_d29b +	cp LOW(wNumItems) +	jr nz, .not_bag  	ld a, d -	cp wNumItems / $100 +	cp HIGH(wNumItems)  	ret z -.asm_d29b + +.not_bag  	ld c, MAX_PC_ITEMS  	ld a, e  	cp LOW(wNumPCItems) -	jr nz, .asm_d2a6 +	jr nz, .not_pc  	ld a, d  	cp HIGH(wNumPCItems)  	ret z -.asm_d2a6 + +.not_pc  	ld c, MAX_BALLS  	ret -PutItemInPocketOrPC: ; d2a9 (3:52a9) +PutItemInPocket:  	ld d, h  	ld e, l  	inc hl  	ld a, [wCurItem]  	ld c, a -	ld b, $0 -.asm_d2b2 +	ld b, 0 +.loop  	ld a, [hli] -	cp $ff -	jr z, .asm_d2ca +	cp -1 +	jr z, .terminator  	cp c -	jr nz, .asm_d2c7 -	ld a, $63 +	jr nz, .next +	ld a, 99  	sub [hl]  	add b  	ld b, a  	ld a, [wItemQuantityChangeBuffer]  	cp b -	jr z, .asm_d2d3 -	jr c, .asm_d2d3 -.asm_d2c7 +	jr z, .ok +	jr c, .ok + +.next  	inc hl -	jr .asm_d2b2 +	jr .loop -.asm_d2ca +.terminator  	call GetPocketCapacity  	ld a, [de]  	cp c -	jr c, .asm_d2d3 +	jr c, .ok  	and a  	ret -.asm_d2d3 +.ok  	ld h, d  	ld l, e  	ld a, [wCurItem]  	ld c, a  	ld a, [wItemQuantityChangeBuffer]  	ld [wItemQuantityBuffer], a -.asm_d2df +.loop2  	inc hl  	ld a, [hli] -	cp $ff -	jr z, .asm_d2fc +	cp -1 +	jr z, .terminator2  	cp c -	jr nz, .asm_d2df +	jr nz, .loop2  	ld a, [wItemQuantityBuffer]  	add [hl] -	cp $64 -	jr nc, .asm_d2f3 +	cp 100 +	jr nc, .newstack  	ld [hl], a -	jr .asm_d30a +	jr .done -.asm_d2f3 -	ld [hl], $63 -	sub $63 +.newstack +	ld [hl], 99 +	sub 99  	ld [wItemQuantityBuffer], a -	jr .asm_d2df +	jr .loop2 -.asm_d2fc +.terminator2  	dec hl  	ld a, [wCurItem]  	ld [hli], a  	ld a, [wItemQuantityBuffer]  	ld [hli], a -	ld [hl], $ff +	ld [hl], -1  	ld h, d  	ld l, e  	inc [hl] -.asm_d30a + +.done  	scf  	ret -RemoveItemAndQuantity: ; d30c (3:530c) +RemoveItemFromPocket:  	ld d, h  	ld e, l  	ld a, [hli]  	ld c, a  	ld a, [wCurItemQuantity]  	cp c -	jr nc, .asm_d325 +	jr nc, .ok ; memory  	ld c, a  	ld b, $0  	add hl, bc @@ -237,202 +246,206 @@ RemoveItemAndQuantity: ; d30c (3:530c)  	ld a, [wCurItem]  	cp [hl]  	inc hl -	jr z, .asm_d334 +	jr z, .skip  	ld h, d  	ld l, e  	inc hl -.asm_d325 + +.ok  	ld a, [wCurItem]  	ld b, a -.asm_d329 +.loop  	ld a, [hli]  	cp b -	jr z, .asm_d334 -	cp $ff -	jr z, .asm_d354 +	jr z, .skip +	cp -1 +	jr z, .nope  	inc hl -	jr .asm_d329 +	jr .loop -.asm_d334 +.skip  	ld a, [wItemQuantityChangeBuffer]  	ld b, a  	ld a, [hl]  	sub b -	jr c, .asm_d354 +	jr c, .nope  	ld [hl], a  	ld [wItemQuantityBuffer], a  	and a -	jr nz, .asm_d352 +	jr nz, .yup  	dec hl  	ld b, h  	ld c, l  	inc hl  	inc hl -.asm_d348 +.loop2  	ld a, [hli]  	ld [bc], a  	inc bc -	cp $ff -	jr nz, .asm_d348 +	cp -1 +	jr nz, .loop2  	ld h, d  	ld l, e  	dec [hl] -.asm_d352 + +.yup  	scf  	ret -.asm_d354 +.nope  	and a  	ret -CheckItemWithQuantity: ; d356 (3:5356) +CheckTheItem:  	ld a, [wCurItem]  	ld c, a -.asm_d35a +.loop  	inc hl  	ld a, [hli] -	cp $ff -	jr z, .asm_d365 +	cp -1 +	jr z, .done  	cp c -	jr nz, .asm_d35a +	jr nz, .loop  	scf  	ret -.asm_d365 +.done  	and a  	ret -PutItemInKeyItemPocket: ; d367 (3:5367) -	ld hl, wItemsEnd +ReceiveKeyItem: +	ld hl, wNumKeyItems  	ld a, [hli] -	cp $19 -	jr nc, .asm_d37f +	cp MAX_KEY_ITEMS +	jr nc, .nope  	ld c, a -	ld b, $0 +	ld b, 0  	add hl, bc  	ld a, [wCurItem]  	ld [hli], a -	ld [hl], $ff +	ld [hl], -1  	ld hl, wNumKeyItems  	inc [hl]  	scf  	ret -.asm_d37f +.nope  	and a  	ret -RemoveItemWithoutQuantity: ; d381 (3:5381) +TossKeyItem:  	ld a, [wCurItemQuantity]  	ld e, a -	ld d, $0 -	ld hl, wItemsEnd +	ld d, 0 +	ld hl, wNumKeyItems  	ld a, [hl]  	cp e -	jr nc, .asm_d394 -	call FindAndTossKeyItem +	jr nc, .ok +	call .Toss  	ret nc -	jr .asm_d397 +	jr .ok2 -.asm_d394 +.ok  	dec [hl]  	inc hl  	add hl, de -.asm_d397 + +.ok2  	ld d, h  	ld e, l  	inc hl -.asm_d39a +.loop  	ld a, [hli]  	ld [de], a  	inc de -	cp $ff -	jr nz, .asm_d39a +	cp -1 +	jr nz, .loop  	scf  	ret -FindAndTossKeyItem: ; d3a3 (3:53a3) -	ld hl, wItemsEnd +.Toss: +	ld hl, wNumKeyItems  	ld a, [wCurItem]  	ld c, a -.asm_d3aa +.loop3  	inc hl  	ld a, [hl]  	cp c -	jr z, .asm_d3b5 -	cp $ff -	jr nz, .asm_d3aa +	jr z, .ok3 +	cp -1 +	jr nz, .loop3  	xor a  	ret -.asm_d3b5 +.ok3  	ld a, [wNumKeyItems]  	dec a  	ld [wNumKeyItems], a  	scf  	ret -CheckItemWithoutQuantity: ; d3be (3:53be) +CheckKeyItems:  	ld a, [wCurItem]  	ld c, a  	ld hl, wKeyItems -.asm_d3c5 +.loop  	ld a, [hli]  	cp c -	jr z, .asm_d3cf -	cp $ff -	jr nz, .asm_d3c5 +	jr z, .done +	cp -1 +	jr nz, .loop  	and a  	ret -.asm_d3cf +.done  	scf  	ret -PutItemInTMPocket: ; d3d1 (3:53d1) +ReceiveTMHM:  	dec c -	ld b, $0 +	ld b, 0  	ld hl, wTMsHMs  	add hl, bc  	ld a, [wItemQuantityChangeBuffer]  	add [hl] -	cp $64 -	jr nc, .asm_d3e3 +	cp 100 +	jr nc, .toomany  	ld [hl], a  	scf  	ret -.asm_d3e3 +.toomany  	and a  	ret -RemoveTMorHM: ; d3e5 (3:53e5) +TossTMHM:  	dec c -	ld b, $0 +	ld b, 0  	ld hl, wTMsHMs  	add hl, bc  	ld a, [wItemQuantityChangeBuffer]  	ld b, a  	ld a, [hl]  	sub b -	jr c, .asm_d406 +	jr c, .nope  	ld [hl], a  	ld [wItemQuantityBuffer], a -	jr nz, .asm_d404 +	jr nz, .yup  	ld a, [wTMHMPocketScrollPosition]  	and a -	jr z, .asm_d404 +	jr z, .yup  	dec a  	ld [wTMHMPocketScrollPosition], a -.asm_d404 + +.yup  	scf  	ret -.asm_d406 +.nope  	and a  	ret -CheckTMorHM: ; d408 (3:5408) +CheckTMHM:  	dec c  	ld b, $0  	ld hl, wTMsHMs @@ -443,107 +456,124 @@ CheckTMorHM: ; d408 (3:5408)  	scf  	ret -GetNumberedTMHM:: ; d414 (3:5414) +GetTMHMNumber:: +; Return the number of a TM/HM by item id c.  	ld a, c -	cp ITEM_C3 -	jr c, .asm_d41f -	cp ITEM_DC -	jr c, .asm_d41e +; Skip any dummy items. +	cp ITEM_C3 ; TM04-05 +	jr c, .done +	cp ITEM_DC ; TM28-29 +	jr c, .skip  	dec a -.asm_d41e +.skip  	dec a -.asm_d41f -	sub $bf +.done +	sub TM01  	inc a  	ld c, a  	ret -GetNumberedTM: +GetNumberedTMHM: +; Return the item id of a TM/HM by number c.  	ld a, c +; Skip any gaps.  	cp ITEM_C3 - (TM01 - 1) -	jr c, .asm_d42f +	jr c, .done  	cp ITEM_DC - (TM01 - 1) - 1 -	jr c, .asm_d42e +	jr c, .skip_one +.skip_two  	inc a -.asm_d42e +.skip_one  	inc a -.asm_d42f +.done  	add TM01  	dec a  	ld c, a  	ret -_CheckTossableItem:: ; d434 (3:5434) -	ld a, $4 +_CheckTossableItem:: +; Return 1 in wItemAttributeParamBuffer and carry if wCurItem can't be removed from the bag. +	ld a, ITEMATTR_PERMISSIONS  	call GetItemAttr -	bit 7, a +	bit CANT_TOSS_F, a  	jr nz, ItemAttr_ReturnCarry  	and a  	ret  CheckSelectableItem: -	ld a, $4 +; Return 1 in wItemAttributeParamBuffer and carry if wCurItem can't be selected. +	ld a, ITEMATTR_PERMISSIONS  	call GetItemAttr -	bit 6, a +	bit CANT_SELECT_F, a  	jr nz, ItemAttr_ReturnCarry  	and a  	ret  CheckItemPocket:: -	ld a, $5 +; Return the pocket for wCurItem in wItemAttributeParamBuffer. +	ld a, ITEMATTR_POCKET  	call GetItemAttr  	and $f  	ld [wItemAttributeParamBuffer], a  	ret  CheckItemContext: -	ld a, $6 +; Return the context for wCurItem in wItemAttributeParamBuffer. +	ld a, ITEMATTR_HELP  	call GetItemAttr  	and $f  	ld [wItemAttributeParamBuffer], a  	ret  CheckItemMenu: -	ld a, $6 +; Return the menu for wCurItem in wItemAttributeParamBuffer. +	ld a, ITEMATTR_HELP  	call GetItemAttr  	swap a  	and $f  	ld [wItemAttributeParamBuffer], a  	ret -GetItemAttr: ; d46d (3:546d) +GetItemAttr: +; Get attribute a of wCurItem. +  	push hl  	push bc +  	ld hl, ItemAttributes  	ld c, a -	ld b, $0 +	ld b, 0  	add hl, bc +  	xor a  	ld [wItemAttributeParamBuffer], a +  	ld a, [wCurItem]  	dec a  	ld c, a -	ld a, $7 +	ld a, ITEMATTR_STRUCT_LENGTH  	call AddNTimes  	ld a, BANK(ItemAttributes)  	call GetFarByte +  	pop bc  	pop hl  	ret  ItemAttr_ReturnCarry: -	ld a, $1 +	ld a, 1  	ld [wItemAttributeParamBuffer], a  	scf  	ret  GetItemPrice: +; Return the price of wCurItem in de.  	push hl  	push bc -	ld a, $0 +	ld a, ITEMATTR_PRICE  	call GetItemAttr  	ld e, a -	ld a, $1 +	ld a, ITEMATTR_PRICE_HI  	call GetItemAttr  	ld d, a  	pop bc diff --git a/engine/items/tmhm.asm b/engine/items/tmhm.asm index 1849d23c..f5261123 100644 --- a/engine/items/tmhm.asm +++ b/engine/items/tmhm.asm @@ -23,7 +23,7 @@ TMHMPocket:  .ConvertItemToTMHMNumber:  	ld a, [wCurItem]  	ld c, a -	callfar GetNumberedTM +	callfar GetNumberedTMHM  	ld a, c  	ld [wCurItem], a  	ret @@ -31,7 +31,7 @@ TMHMPocket:  ConvertCurItemIntoCurTMHM:  	ld a, [wCurItem]  	ld c, a -	callfar GetNumberedTMHM +	callfar GetTMHMNumber  	ld a, c  	ld [wTempTMHM], a  	ret diff --git a/engine/overworld/variables.asm b/engine/overworld/variables.asm index 6f14c549..406cf715 100755 --- a/engine/overworld/variables.asm +++ b/engine/overworld/variables.asm @@ -120,4 +120,3 @@ _GetVarAction::  	ld a, [wBattleResult]  	and $ff ^ BATTLERESULT_BITMASK  	jp .loadstringbuffer2 - diff --git a/engine/pokemon/health.asm b/engine/pokemon/health.asm index 022477b0..d11a073b 100755 --- a/engine/pokemon/health.asm +++ b/engine/pokemon/health.asm @@ -1,54 +1,62 @@ -HealParty: ; c69d (3:469d) +HealParty:  	xor a  	ld [wCurPartyMon], a  	ld hl, wPartySpecies -.asm_c6a4 +.loop  	ld a, [hli]  	cp -1 -	jr z, .asm_c6bb +	jr z, .done  	cp EGG -	jr z, .asm_c6b2 +	jr z, .next +  	push hl  	call HealPartyMon  	pop hl -.asm_c6b2 + +.next  	ld a, [wCurPartyMon]  	inc a  	ld [wCurPartyMon], a -	jr .asm_c6a4 +	jr .loop -.asm_c6bb +.done  	ret  HealPartyMon: -	ld a, $0 +	ld a, MON_SPECIES  	call GetPartyParamLocation  	ld d, h  	ld e, l -	ld hl, $20 + +	ld hl, MON_STATUS  	add hl, de  	xor a  	ld [hli], a  	ld [hl], a -	ld hl, $24 + +	ld hl, MON_MAXHP  	add hl, de + +	; bc = MON_HP  	ld b, h  	ld c, l  	dec bc  	dec bc +  	ld a, [hli]  	ld [bc], a  	inc bc  	ld a, [hl]  	ld [bc], a -	farcall Functionf900 + +	farcall RestoreAllPP  	ret  ComputeHPBarPixels:  ; e = bc * (6 * 8) / de  	ld a, b  	or c -	jr z, .asm_c722 +	jr z, .zero  	push hl  	xor a  	ldh [hMultiplicand + 0], a @@ -62,7 +70,7 @@ ComputeHPBarPixels:  	; We need de to be under 256 because hDivisor is only 1 byte.  	ld a, d  	and a -	jr z, .asm_c711 +	jr z, .divide  	; divide de and hProduct by 4  	srl d  	rr e @@ -78,25 +86,25 @@ ComputeHPBarPixels:  	ldh [hDividend + 3], a  	ld a, b  	ldh [hDividend + 2], a -.asm_c711 +.divide  	ld a, e  	ldh [hDivisor], a -	ld b, $4 +	ld b, 4  	call Divide  	ldh a, [hQuotient + 3]  	ld e, a  	pop hl  	and a  	ret nz -	ld e, $1 +	ld e, 1  	ret -.asm_c722 -	ld e, $0 +.zero +	ld e, 0  	ret -AnimateHPBar: ; c725 (3:4725) +AnimateHPBar:  	call WaitBGMap -	call AnimateHPBar_ +	call _AnimateHPBar  	call WaitBGMap  	ret diff --git a/engine/pokemon/move_mon.asm b/engine/pokemon/move_mon.asm index 566e23ee..0c50dd4e 100755 --- a/engine/pokemon/move_mon.asm +++ b/engine/pokemon/move_mon.asm @@ -803,7 +803,7 @@ RetrieveMonFromDayCareLady:  	jp RetrieveBreedmon  RetrieveBreedmon: -	ld hl, wPokemonData +	ld hl, wPartyCount  	ld a, [hl]  	cp PARTY_LENGTH  	jr nz, .room_in_party @@ -1693,7 +1693,7 @@ GivePoke::  	call CopyBytes  	pop af  	and a -	jr z, .set_caught_data +	jr z, .wildmon  	pop de  	pop bc  	pop hl @@ -1750,8 +1750,8 @@ GivePoke::  	call CloseSRAM  	jr .skip_nickname -.set_caught_data -	callfar Functionc7cd0 +.wildmon +	callfar GiveANickname_YesNo  	pop de  	jr c, .skip_nickname  	call InitNickname diff --git a/home/names.asm b/home/names.asm index 35b3d132..e3da8793 100755 --- a/home/names.asm +++ b/home/names.asm @@ -196,7 +196,7 @@ GetTMHMName::  	push de  	ld a, [wNamedObjectIndexBuffer]  	ld c, a -	callfar GetNumberedTMHM +	callfar GetTMHMNumber  	pop de  ; HM numbers start from 51, not 1 diff --git a/layout.link b/layout.link index 795b7535..59cc54c9 100644 --- a/layout.link +++ b/layout.link @@ -64,7 +64,6 @@ ROMX $0e  ROMX $0f  	"Battle Core"  ROMX $10 -	org $4000  	"bank10"  ROMX $11  	org $4000 @@ -46,6 +46,7 @@ INCLUDE "engine/pokemon/breedmon_level_growth.asm"  INCLUDE "engine/pokemon/search2.asm"  INCLUDE "engine/events/bug_contest/caught_mon.asm"  INCLUDE "engine/items/item_effects.asm" +INCLUDE "engine/battle_anims/pokeball_wobble.asm"  INCLUDE "engine/pokemon/knows_move.asm" @@ -416,13 +417,13 @@ DoPoisonStep::  	dr $50610, $506f2  SweetScentFromMenu::  	dr $506f2, $50763 -SquirtbottleFunction:: +_Squirtbottle::  	dr $50763, $507ac -CardKeyFunction:: +_CardKey::  	dr $507ac, $507e7 -BasementKeyFunction:: +_BasementKey::  	dr $507e7, $50819 -SacredAshFunction:: +_SacredAsh::  	dr $50819, $5087d  CopyMonToTempMon::  	dr $5087d, $50940 @@ -626,7 +627,7 @@ _TownMap::  	dr $9188a, $919c1  PlayRadio::  	dr $919c1, $91a4f -TownMap_:: +PokegearMap::  	dr $91a4f, $91a61  _FlyMap::  	dr $91a61, $91c7f @@ -679,7 +680,7 @@ PrintTodaysLuckyNumber::  	dr $c7bad, $c7bbf  CheckPartyFullAfterContest::  	dr $c7bbf, $c7cd0 -Functionc7cd0:: +GiveANickname_YesNo::  	dr $c7cd0, $c7cde @@ -1740,11 +1740,11 @@ wd151::  wFailedToFlee:: db ; d152  wNumFleeAttempts:: db ; d153 -wd154:: ds 1 ; d154 -wROMBankBackup:: ds 1 ; d155 +wMonTriedToEvolve:: db ; d154 +wROMBankBackup:: db ; d155  wFarByte::  wTempBank:: db ; d156 -wTimeOfDay:: ds 1 ; d157 +wTimeOfDay:: db ; d157  wd158:: ds 1 ; d158  wMapStatus:: db ; d159 | 
