shithub: pokecrystal

Download patch

ref: e6165edadfe5e801679305eaba8b3895f360cba7
parent: 0799fbb4aa893445d1e7ddf16cca067d382072e2
parent: 769005d270a90642e3c53dc82c55589da8aa5cf7
author: Bryan Bishop <[email protected]>
date: Fri May 10 09:23:57 EDT 2013

Merge pull request #128 from yenatch/master

item effects

--- a/constants.asm
+++ b/constants.asm
@@ -1644,7 +1644,7 @@
 BRICK_PIECE   EQU $B4
 SURF_MAIL     EQU $B5
 LITEBLUEMAIL  EQU $B6
-PORTRAITM_AIL EQU $B7
+PORTRAITMAIL  EQU $B7
 LOVELY_MAIL   EQU $B8
 EON_MAIL      EQU $B9
 MORPH_MAIL    EQU $BA
--- a/extras/item_constants.py
+++ b/extras/item_constants.py
@@ -159,7 +159,7 @@
 180: 'BRICK_PIECE',
 181: 'SURF_MAIL',
 182: 'LITEBLUEMAIL',
-183: 'PORTRAITM_AIL',
+183: 'PORTRAITMAIL',
 184: 'LOVELY_MAIL',
 185: 'EON_MAIL',
 186: 'MORPH_MAIL',
--- /dev/null
+++ b/items/item_effects.asm
@@ -1,0 +1,1798 @@
+MasterBall:
+UltraBall:
+GreatBall:
+PokeBall:
+HeavyBall:
+LevelBall:
+LureBall:
+FastBall:
+FriendBall:
+MoonBall:
+LoveBall:
+ParkBall: ; e8a2
+	ld a, [IsInBattle]
+	dec a
+	jp nz, $77a0
+	ld a, [PartyCount]
+	cp $6
+	jr nz, .asm_e8c0
+	ld a, $1
+	call GetSRAMBank
+
+	ld a, [$ad10]
+	cp $14
+	call CloseSRAM
+
+	jp z, $77dc
+
+.asm_e8c0
+	xor a
+	ld [$c64e], a
+	ld a, [CurItem]
+	cp $b1
+	call nz, $6dfa
+
+	ld hl, Options
+	res 4, [hl]
+	ld hl, $783d
+	call $1057
+
+	ld a, [EnemyMonCatchRate]
+	ld b, a
+	ld a, [BattleType]
+	cp $3
+	jp z, .asm_e99c
+	ld a, [CurItem]
+	cp $1
+	jp z, .asm_e99c
+	ld a, [CurItem]
+	ld c, a
+	ld hl, Table_0xec0a
+
+.asm_e8f2
+	ld a, [hli]
+	cp $ff
+	jr z, .asm_e906
+	cp c
+	jr z, .asm_e8fe
+	inc hl
+	inc hl
+	jr .asm_e8f2
+
+.asm_e8fe
+	ld a, [hli]
+	ld h, [hl]
+	ld l, a
+	ld de, $6906
+	push de
+	jp [hl]
+
+.asm_e906
+	ld a, [CurItem]
+	cp $9f
+	ld a, b
+	jp z, $698e
+	ld a, b
+	ld [$ffb6], a
+	ld hl, EnemyMonHPHi
+	ld b, [hl]
+	inc hl
+	ld c, [hl]
+	inc hl
+	ld d, [hl]
+	inc hl
+	ld e, [hl]
+	sla c
+	rl b
+	ld h, d
+	ld l, e
+	add hl, de
+	add hl, de
+	ld d, h
+	ld e, l
+	ld a, d
+	and a
+	jr z, .asm_e940
+	srl d
+	rr e
+	srl d
+	rr e
+	srl b
+	rr c
+	srl b
+	rr c
+	ld a, c
+	and a
+	jr nz, .asm_e940
+	ld c, $1
+
+.asm_e940
+	ld b, e
+	push bc
+	ld a, b
+	sub c
+	ld [hMultiplier], a
+	xor a
+	ld [hProduct], a
+	ld [hMultiplicand], a
+	ld [$ffb5], a
+	call Multiply
+
+	pop bc
+	ld a, b
+	ld [hMultiplier], a
+	ld b, $4
+	call Divide
+
+	ld a, [$ffb6]
+	and a
+	jr nz, .asm_e960
+	ld a, $1
+
+.asm_e960
+	ld b, a
+	ld a, [EnemyMonStatus]
+	and $27
+	ld c, $a
+	jr nz, .asm_e971
+	and a
+	ld c, $5
+	jr nz, .asm_e971
+	ld c, $0
+
+.asm_e971
+	ld a, b
+	add c
+	jr nc, .asm_e977
+	ld a, $ff
+
+.asm_e977
+	ld d, a
+	push de
+	ld a, [BattleMonItem]
+	ld a, $d
+	ld hl, $7dd0
+	rst FarCall
+
+	ld a, b
+	cp $46
+	pop de
+	ld a, d
+	jr nz, .asm_e98e
+	add c
+	jr nc, .asm_e98e
+	ld a, $ff
+
+.asm_e98e
+	ld b, a
+	ld [MagikarpLength], a
+	call RNG
+
+	cp b
+	ld a, $0
+	jr z, .asm_e99c
+	jr nc, .asm_e99f
+
+.asm_e99c
+	ld a, [EnemyMonSpecies]
+
+.asm_e99f
+	ld [$c64e], a
+	ld c, $14
+	call DelayFrames
+
+	ld a, [CurItem]
+	cp $6
+	jr c, .asm_e9b0
+
+	ld a, $5
+
+.asm_e9b0
+	ld [$c689], a
+	ld de, $0100
+	ld a, e
+	ld [FXAnimIDLo], a
+	ld a, d
+	ld [FXAnimIDHi], a
+	xor a
+	ld [hBattleTurn], a
+	ld [Buffer2], a
+	ld [$cfca], a
+	ld a, $37
+	call Predef
+
+	ld a, [$c64e]
+	and a
+	jr nz, .asm_e9f5
+	ld a, [Buffer2]
+	cp $1
+	ld hl, $6db5
+	jp z, $6bdc
+	cp $2
+	ld hl, $6dba
+	jp z, $6bdc
+	cp $3
+	ld hl, $6dbf
+	jp z, $6bdc
+	cp $4
+	ld hl, $6dc4
+	jp z, $6bdc
+
+.asm_e9f5
+	ld hl, EnemyMonStatus
+	ld a, [hli]
+	push af
+	inc hl
+	ld a, [hli]
+	push af
+	ld a, [hl]
+	push af
+	push hl
+	ld hl, EnemyMonItem
+	ld a, [hl]
+	push af
+	push hl
+	ld hl, EnemySubStatus5
+	ld a, [hl]
+	push af
+	set 3, [hl]
+	bit 3, a
+	jr nz, .asm_ea13
+	jr .asm_ea1a
+
+.asm_ea13
+	ld a, $84
+	ld [TempEnemyMonSpecies], a
+	jr .asm_ea27
+
+.asm_ea1a
+	set 3, [hl]
+	ld hl, $c6f2
+	ld a, [EnemyMonAtkDefDV]
+	ld [hli], a
+	ld a, [EnemyMonSpdSpclDV]
+	ld [hl], a
+
+.asm_ea27
+	ld a, [TempEnemyMonSpecies]
+	ld [CurPartySpecies], a
+	ld a, [EnemyMonLevel]
+	ld [CurPartyLevel], a
+	ld a, $f
+	ld hl, $68eb
+	rst FarCall
+
+	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 3, [hl]
+	jr nz, .asm_ea67
+	ld hl, $c735
+	ld de, EnemyMonMove1
+	ld bc, $0004
+	call CopyBytes
+
+	ld hl, $c739
+	ld de, EnemyMonPPMove1
+	ld bc, $0004
+	call CopyBytes
+
+.asm_ea67
+	ld a, [EnemyMonSpecies]
+	ld [$c64e], a
+	ld [CurPartySpecies], a
+	ld [$d265], a
+	ld a, [BattleType]
+	cp $3
+	jp z, $6bd9
+	ld a, $41
+	ld hl, $607f
+	rst FarCall
+
+	ld hl, $6dc9
+	call $1057
+
+	call ClearSprites
+
+	ld a, [$d265]
+	dec a
+	call $3393
+
+	ld a, c
+	push af
+	ld a, [$d265]
+	dec a
+	call $3380
+
+	pop af
+	and a
+	jr nz, .asm_eab7
+	call $2ead
+
+	jr z, .asm_eab7
+	ld hl, $6df0
+	call $1057
+
+	call ClearSprites
+
+	ld a, [EnemyMonSpecies]
+	ld [$d265], a
+	ld a, $43
+	call Predef
+
+.asm_eab7
+	ld a, [BattleType]
+	cp $6
+	jp z, $6bd1
+	cp $b
+	jr nz, .asm_eac8
+	ld hl, $d0ee
+	set 6, [hl]
+
+.asm_eac8
+	ld a, [PartyCount]
+	cp $6
+	jr z, .asm_eb3c
+	xor a
+	ld [MonType], a
+	call ClearSprites
+
+	ld a, $6
+	call Predef
+
+	ld a, $13
+	ld hl, $5b49
+	rst FarCall
+
+	ld a, [CurItem]
+	cp $a4
+	jr nz, .asm_eaf8
+	ld a, [PartyCount]
+	dec a
+	ld hl, PartyMon1Happiness
+	ld bc, $0030
+	call AddNTimes
+
+	ld a, $c8
+	ld [hl], a
+
+.asm_eaf8
+	ld hl, $6df5
+	call $1057
+
+	ld a, [CurPartySpecies]
+	ld [$d265], a
+	call $343b
+
+	call $1dcf
+
+	jp c, $6be2
+
+	ld a, [PartyCount]
+	dec a
+	ld [CurPartyMon], a
+	ld hl, PartyMon1Nickname
+	ld bc, $000b
+	call AddNTimes
+
+	ld d, h
+	ld e, l
+	push de
+	xor a
+	ld [MonType], a
+	ld b, $0
+	ld a, $4
+	ld hl, $56c1
+	rst FarCall
+
+	call $04b6
+
+	call $0e51
+
+	pop hl
+	ld de, StringBuffer1
+	call $2ef9
+
+	jp $6be2
+
+.asm_eb3c
+	call ClearSprites
+
+	ld a, $9
+	call Predef
+
+	ld a, $13
+	ld hl, $5b83
+	rst FarCall
+
+	ld a, $1
+	call GetSRAMBank
+
+	ld a, [$ad10]
+	cp $14
+	jr nz, .asm_eb5b
+	ld hl, $d0ee
+	set 7, [hl]
+
+.asm_eb5b
+	ld a, [CurItem]
+	cp $a4
+	jr nz, .asm_eb67
+	ld a, $c8
+	ld [$ad41], a
+
+.asm_eb67
+	call CloseSRAM
+
+	ld hl, $6df5
+	call $1057
+
+	ld a, [CurPartySpecies]
+	ld [$d265], a
+	call $343b
+
+	call $1dcf
+
+	jr c, .asm_ebaf
+
+	xor a
+	ld [CurPartyMon], a
+	ld a, $2
+	ld [MonType], a
+	ld de, $d050
+	ld b, $0
+	ld a, $4
+	ld hl, $56c1
+	rst FarCall
+
+	ld a, $1
+	call GetSRAMBank
+
+	ld hl, $d050
+	ld de, $b082
+	ld bc, $000b
+	call CopyBytes
+
+	ld hl, $b082
+	ld de, StringBuffer1
+	call $2ef9
+
+	call CloseSRAM
+
+.asm_ebaf
+	ld a, $1
+	call GetSRAMBank
+
+	ld hl, $b082
+	ld de, $d050
+	ld bc, $000b
+	call CopyBytes
+
+	call CloseSRAM
+
+	ld hl, $6deb
+	call $1057
+
+	call $04b6
+
+	call $0e51
+
+	jr .asm_ebe2
+
+	ld a, $3
+	ld hl, $66ce
+	rst FarCall
+
+	jr .asm_ebe2
+
+	ld hl, $6dc9
+	call $1057
+
+	call ClearSprites
+
+.asm_ebe2
+	ld a, [BattleType]
+	cp $3
+	ret z
+	cp $2
+	ret z
+	cp $6
+	jr z, .asm_ec05
+	ld a, [$c64e]
+	and a
+	jr z, .asm_ebfb
+	call WhiteBGMap
+
+	call ClearTileMap
+
+.asm_ebfb
+	ld hl, NumItems
+	inc a
+	ld [$d10c], a
+	jp $2f53
+
+.asm_ec05
+	ld hl, $dc79
+	dec [hl]
+	ret
+; ec0a
+
+
+Table_0xec0a: ; ec0a
+	dbw ULTRA_BALL, Function_0xec29
+	dbw GREAT_BALL, Function_0xec2f
+	dbw MOON_STONE, Function_0xec2f
+	dbw HEAVY_BALL, Function_0xec50
+	dbw LEVEL_BALL, Function_0xed8c
+	dbw LURE_BALL,  Function_0xeccc
+	dbw FAST_BALL,  Function_0xed68
+	dbw MOON_BALL,  Function_0xecdd
+	dbw LOVE_BALL,  Function_0xed12
+	dbw PARK_BALL,  Function_0xec2f
+	db $ff
+; ec29
+
+
+Function_0xec29: ; ec29
+	sla b
+	ret nc
+	ld b, $ff
+	ret
+; ec2f
+
+
+Function_0xec2f: ; ec2f
+	ld a, b
+	srl a
+	add b
+	ld b, a
+	ret nc
+	ld b, $ff
+	ret
+; ec38
+
+
+INCBIN "baserom.gbc", $ec38, $ec50 - $ec38
+
+
+Function_0xec50: ; ec50
+	ld a, [EnemyMonSpecies]
+	ld hl, $4378
+	dec a
+	ld e, a
+	ld d, $0
+	add hl, de
+	add hl, de
+	ld a, $11
+	call GetFarHalfword
+
+.asm_ec61
+	call $6c38
+
+	call GetFarByte
+
+	inc hl
+	cp $50
+	jr nz, .asm_ec61
+	call $6c38
+
+	push bc
+	inc hl
+	inc hl
+	call GetFarHalfword
+
+	srl h
+	rr l
+	ld b, h
+	ld c, l
+	srl b
+	rr c
+	srl b
+	rr c
+	srl b
+	rr c
+	srl b
+	rr c
+	call $6c99
+
+	srl b
+	rr c
+	call $6c99
+
+	ld a, h
+	pop bc
+	jr .asm_eca4
+
+	push bc
+	ld a, b
+	cpl
+	ld b, a
+	ld a, c
+	cpl
+	ld c, a
+	inc bc
+	add hl, bc
+	pop bc
+	ret
+
+.asm_eca4
+	ld c, a
+	cp $4
+	jr c, .asm_ecbc
+
+	ld hl, $6cc4
+
+.asm_ecac
+	ld a, c
+	cp [hl]
+	jr c, .asm_ecb4
+
+	inc hl
+	inc hl
+	jr .asm_ecac
+
+.asm_ecb4
+	inc hl
+	ld a, b
+	add [hl]
+	ld b, a
+	ret nc
+	ld b, $ff
+	ret
+
+.asm_ecbc
+	ld a, b
+	sub $14
+	ld b, a
+	ret nc
+	ld b, $1
+	ret
+; ecc4
+
+
+INCBIN "baserom.gbc", $ecc4, $eccc - $ecc4
+
+
+Function_0xeccc: ; eccc
+	ld a, [BattleType]
+	cp $4
+	ret nz
+	ld a, b
+	add a
+	jr c, .asm_ecd9
+
+	add b
+	jr nc, .asm_ecdb
+
+.asm_ecd9
+	ld a, $ff
+
+.asm_ecdb
+	ld b, a
+	ret
+; ecdd
+
+
+Function_0xecdd: ; ecdd
+	push bc
+	ld a, [TempEnemyMonSpecies]
+	dec a
+	ld c, a
+	ld b, $0
+	ld hl, $65b1
+	add hl, bc
+	add hl, bc
+	ld a, $10
+	call GetFarHalfword
+
+	pop bc
+	push bc
+	ld a, $10
+	call GetFarByte
+
+	cp $2
+	pop bc
+	ret nz
+	inc hl
+	inc hl
+	inc hl
+	push bc
+	ld a, $10
+	call GetFarByte
+
+	cp $a
+	pop bc
+	ret nz
+	sla b
+	jr c, .asm_ed0f
+
+	sla b
+	jr nc, .asm_ed11
+
+.asm_ed0f
+	ld b, $ff
+
+.asm_ed11
+	ret
+; ed12
+
+
+Function_0xed12: ; ed12
+	ld a, [TempEnemyMonSpecies]
+	ld c, a
+	ld a, [TempBattleMonSpecies]
+	cp c
+	ret nz
+	push bc
+	ld a, [TempBattleMonSpecies]
+	ld [CurPartySpecies], a
+	xor a
+	ld [MonType], a
+	ld a, [CurBattleMon]
+	ld [CurPartyMon], a
+	ld a, $14
+	ld hl, $4bdd
+	rst FarCall
+
+	jr c, .asm_ed66
+
+	ld d, $0
+	jr nz, .asm_ed39
+	inc d
+
+.asm_ed39
+	push de
+	ld a, [TempEnemyMonSpecies]
+	ld [CurPartySpecies], a
+	ld a, $4
+	ld [MonType], a
+	ld a, $14
+	ld hl, $4bdd
+	rst FarCall
+
+	jr c, .asm_ed65
+
+	ld d, $0
+	jr nz, .asm_ed52
+	inc d
+
+.asm_ed52
+	ld a, d
+	pop de
+	cp d
+	pop bc
+	ret nz
+	sla b
+	jr c, .asm_ed62
+
+	sla b
+	jr c, .asm_ed62
+
+	sla b
+	ret nc
+
+.asm_ed62
+	ld b, $ff
+	ret
+
+.asm_ed65
+	pop de
+
+.asm_ed66
+	pop bc
+	ret
+; ed68
+
+
+Function_0xed68: ; ed68
+	ld a, [TempEnemyMonSpecies]
+	ld c, a
+	ld hl, $459a
+	ld d, $3
+
+.asm_ed71
+	ld a, $f
+	call GetFarByte
+
+	inc hl
+	cp $ff
+	jr z, .asm_ed88
+	cp c
+	jr nz, .asm_ed88
+	sla b
+	jr c, .asm_ed85
+
+	sla b
+	ret nc
+
+.asm_ed85
+	ld b, $ff
+	ret
+
+.asm_ed88
+	dec d
+	jr nz, .asm_ed71
+	ret
+; ed8c
+
+
+Function_0xed8c: ; ed8c
+	ld a, [BattleMonLevel]
+	ld c, a
+	ld a, [EnemyMonLevel]
+	cp c
+	ret nc
+	sla b
+	jr c, .asm_eda8
+
+	srl c
+	cp c
+	ret nc
+	sla b
+	jr c, .asm_eda8
+
+	srl c
+	cp c
+	ret nc
+	sla b
+	ret nc
+
+.asm_eda8
+	ld b, $ff
+	ret
+; edab
+
+
+INCBIN "baserom.gbc", $edab, $ee01 - $edab
+
+
+Item06: ; ee01
+	ld a, $24
+	ld hl, $5ae1
+	rst FarCall
+	ret
+; ee08
+
+
+Bicycle: ; ee08
+	ld a, $3
+	ld hl, $50b3
+	rst FarCall
+	ret
+; ee0f
+
+
+MoonStone:
+FireStone:
+Thunderstone:
+WaterStone:
+LeafStone:
+SunStone: ; ee0f
+	ld b, $5
+	call $71f9
+
+	jp c, $6e38
+
+	ld a, $1
+	call GetPartyParamLocation
+
+	ld a, [hl]
+	cp $70
+	jr z, .asm_ee35
+	ld a, $1
+	ld [$d1e9], a
+	ld a, $10
+	ld hl, $61d8
+	rst FarCall
+
+	ld a, [$d268]
+	and a
+	jr z, .asm_ee35
+	jp $7795
+
+.asm_ee35
+	call $77f2
+
+	xor a
+	ld [$d0ec], a
+	ret
+; ee3d
+
+
+HpUp:
+Protein:
+Iron:
+Carbos:
+Calcium: ; ee3d
+	ld b, $1
+	call $71f9
+
+	jp c, $6e9f
+
+	call $6ef5
+
+	call $6ed9
+
+	ld a, $b
+	call GetPartyParamLocation
+
+	add hl, bc
+	ld a, [hl]
+	cp $64
+	jr nc, .asm_ee83
+	add $a
+	ld [hl], a
+	call $6e8c
+
+	call $6ed9
+
+	ld hl, $6eab
+	add hl, bc
+	ld a, [hli]
+	ld h, [hl]
+	ld l, a
+	ld de, StringBuffer2
+	ld bc, $000d
+	call CopyBytes
+
+	call $7780
+
+	ld hl, $6ea6
+	call $1057
+
+	ld c, $2
+	ld a, $1
+	ld hl, $71c2
+	rst FarCall
+
+	jp $7795
+
+.asm_ee83
+	ld hl, $781f
+	call $1057
+
+	jp ClearPalettes
+; ee8c
+
+
+INCBIN "baserom.gbc", $ee8c, $ef14 - $ee8c
+
+
+RareCandy: ; ef14
+	ld b, $1
+	call $71f9
+
+	jp c, $6e9f
+
+	call $6ef5
+
+	ld a, $1f
+	call GetPartyParamLocation
+
+	ld a, [hl]
+	cp $64
+	jp nc, $6e83
+	inc a
+	ld [hl], a
+	ld [CurPartyLevel], a
+	push de
+	ld d, a
+	ld a, $14
+	ld hl, $4e47
+	rst FarCall
+
+	pop de
+	ld a, $8
+	call GetPartyParamLocation
+
+	ld a, [hMultiplicand]
+	ld [hli], a
+	ld a, [$ffb5]
+	ld [hli], a
+	ld a, [$ffb6]
+	ld [hl], a
+	ld a, $24
+	call GetPartyParamLocation
+
+	ld a, [hli]
+	ld b, a
+	ld c, [hl]
+	push bc
+	call $6e8c
+
+	ld a, $25
+	call GetPartyParamLocation
+
+	pop bc
+	ld a, [hld]
+	sub c
+	ld c, a
+	ld a, [hl]
+	sbc b
+	ld b, a
+	dec hl
+	ld a, [hl]
+	add c
+	ld [hld], a
+	ld a, [hl]
+	adc b
+	ld [hl], a
+	ld a, $9
+	ld hl, $709e
+	rst FarCall
+
+	ld a, $f8
+	call $724a
+
+	xor a
+	ld [MonType], a
+	ld a, $1f
+	call Predef
+
+	ld hl, $c4a9
+	ld b, $a
+	ld c, $9
+	call $0fe8
+
+	ld hl, $c4bf
+	ld bc, $0004
+	ld a, $28
+	call Predef
+
+	call $0a80
+
+	xor a
+	ld [MonType], a
+	ld a, [CurPartySpecies]
+	ld [$d265], a
+	ld a, $1a
+	call Predef
+
+	xor a
+	ld [$d1e9], a
+	ld a, $10
+	ld hl, $61d8
+	rst FarCall
+
+	jp $7795
+; efad
+
+
+HealPowder: ; efad
+	ld b, $1
+	call $71f9
+
+	jp c, $729e
+
+	call $6fda
+
+	cp $0
+	jr nz, .asm_efc9
+	ld c, $f
+	ld a, $1
+	ld hl, $71c2
+	rst FarCall
+
+	call $77d6
+
+	ld a, $0
+
+.asm_efc9
+	jp $709e
+; efcc
+
+
+Antidote:
+BurnHeal:
+IceHeal:
+Awakening:
+ParlyzHeal:
+FullHeal:
+Psncureberry:
+Przcureberry:
+BurntBerry:
+IceBerry:
+MintBerry:
+Miracleberry: ; efcc
+	ld b, $1
+	call $71f9
+
+	jp c, $729e
+
+	call $6fda
+
+	jp $709e
+; efda
+
+
+INCBIN "baserom.gbc", $efda, $f0a9 - $efda
+
+
+RevivalHerb: ; f0a9
+	ld b, $1
+	call $71f9
+
+	jp c, $729e
+
+	call $70d6
+
+	cp $0
+	jr nz, .asm_f0c5
+	ld c, $11
+	ld a, $1
+	ld hl, $71c2
+	rst FarCall
+
+	call $77d6
+
+	ld a, $0
+
+.asm_f0c5
+	jp $709e
+; f0c8
+
+
+Revive:
+MaxRevive: ; f0c8
+	ld b, $1
+	call $71f9
+
+	jp c, $729e
+
+	call $70d6
+
+	jp $709e
+; f0d6
+
+
+INCBIN "baserom.gbc", $f0d6, $f128 - $f0d6
+
+
+FullRestore: ; f128
+	ld b, $1
+	call $71f9
+
+	jp c, $729e
+
+	call $730d
+
+	jp z, $7299
+	call $731b
+
+	jr c, .asm_f13e
+
+	jp $6fd4
+
+.asm_f13e
+	call $7144
+
+	jp $709e
+; f144
+
+
+INCBIN "baserom.gbc", $f144, $f16a - $f144
+
+
+BitterBerry: ; f16a
+	ld hl, PlayerSubStatus3
+	bit 7, [hl]
+	ld a, $1
+	jr z, .asm_f183
+	res 7, [hl]
+	xor a
+	ld [hBattleTurn], a
+	call $7789
+
+	ld hl, $4d81
+	call FarBattleTextBox
+
+	ld a, $0
+
+.asm_f183
+	jp $709e
+; f186
+
+
+MaxPotion:
+HyperPotion:
+SuperPotion:
+Potion:
+FreshWater:
+SodaPop:
+Lemonade:
+MoomooMilk:
+Ragecandybar:
+BerryJuice:
+Berry:
+GoldBerry: ; f186
+	call $71a9
+	jp $709e
+; f18c
+
+
+Energypowder: ; f18c
+	ld c, $f
+	jr Function_0xf192
+; f190
+
+EnergyRoot: ; f190
+	ld c, $10
+; f192
+
+Function_0xf192: ; f192
+	push bc
+	call $71a9
+
+	pop bc
+	cp $0
+	jr nz, .asm_f1a6
+	ld a, $1
+	ld hl, $71c2
+	rst FarCall
+
+	call $77d6
+
+	ld a, $0
+
+.asm_f1a6
+	jp $709e
+; f1a9
+
+
+INCBIN "baserom.gbc", $f1a9, $f44f - $f1a9
+
+
+EscapeRope: ; f44f
+	xor a
+	ld [$d0ec], a
+	ld a, $3
+	ld hl, $4b95
+	rst FarCall
+
+	ld a, [$d0ec]
+	cp $1
+	call z, $7795
+	ret
+; f462
+
+
+SuperRepel: ; f462
+	ld b, $c8
+	jr Function_0xf46c
+; f466
+
+MaxRepel: ; f466
+	ld b, $fa
+	jr Function_0xf46c
+; f466
+
+Repel: ; f46a
+	ld b, $64
+; f46c
+
+Function_0xf46c: ; f46c
+	ld a, [$dca1]
+	and a
+	ld hl, $747d
+	jp nz, $1057
+	ld a, b
+	ld [$dca1], a
+	jp $7789
+; f47d
+
+
+INCBIN "baserom.gbc", $f47d, $f482 - $f47d
+
+
+XAccuracy: ; f482
+	ld hl, PlayerSubStatus4
+	bit 0, [hl]
+	jp nz, $77ca
+	set 0, [hl]
+	jp $7789
+; f48f
+
+
+PokeDoll: ; f48f
+	ld a, [IsInBattle]
+	dec a
+	jr nz, .asm_f4a6
+	inc a
+	ld [$d232], a
+	ld a, [$d0ee]
+	and $c0
+	or $2
+	ld [$d0ee], a
+	jp $7789
+
+.asm_f4a6
+	xor a
+	ld [$d0ec], a
+	ret
+; f4ab
+
+
+GuardSpec: ; f4ab
+	ld hl, PlayerSubStatus4
+	bit 1, [hl]
+	jp nz, $77ca
+	set 1, [hl]
+	jp $7789
+; f4b8
+
+
+DireHit: ; f4b8
+	ld hl, PlayerSubStatus4
+	bit 2, [hl]
+	jp nz, $77ca
+	set 2, [hl]
+	jp $7789
+; f4c5
+
+
+XAttack:
+XDefend:
+XSpeed:
+XSpecial: ; f4c5
+	call $7789
+
+	ld a, [CurItem]
+	ld hl, $7504
+
+.asm_f4ce
+	cp [hl]
+	jr z, .asm_f4d5
+	inc hl
+	inc hl
+	jr .asm_f4ce
+
+.asm_f4d5
+	inc hl
+	ld b, [hl]
+	xor a
+	ld [hBattleTurn], a
+	ld [AttackMissed], a
+	ld [$c70d], a
+	ld a, $d
+	ld hl, $61ef
+	rst FarCall
+
+	call WaitSFX
+
+	ld a, $d
+	ld hl, $63b8
+	rst FarCall
+
+	ld a, $d
+	ld hl, $644c
+	rst FarCall
+
+	ld a, [CurBattleMon]
+	ld [CurPartyMon], a
+	ld c, $3
+	ld a, $1
+	ld hl, $71c2
+	rst FarCall
+	ret
+; f504
+
+
+INCBIN "baserom.gbc", $f504, $f50c - $f504
+
+
+Item38: ; f50c
+	ld a, [IsInBattle]
+	and a
+	jr nz, .asm_f512
+
+.asm_f512
+	xor a
+	ld [DefaultFlypoint], a
+	ld b, $f8
+	ld hl, PartyMon1Status
+	call .asm_f554
+
+	ld a, [IsInBattle]
+	cp $1
+	jr z, .asm_f52b
+	ld hl, OTPartyMon1Status
+	call .asm_f554
+
+.asm_f52b
+	ld hl, BattleMonStatus
+	ld a, [hl]
+	and b
+	ld [hl], a
+	ld hl, EnemyMonStatus
+	ld a, [hl]
+	and b
+	ld [hl], a
+	ld a, [DefaultFlypoint]
+	and a
+	ld hl, UnknownText_0xf56c
+	jp z, $1057
+	ld hl, UnknownText_0xf576
+	call $1057
+
+	ld a, [Danger]
+	and $80
+	jr nz, .asm_f54e
+
+.asm_f54e
+	ld hl, UnknownText_0xf571
+	jp $1057
+
+
+.asm_f554
+	ld de, $0030
+	ld c, $6
+
+.asm_f559
+	ld a, [hl]
+	push af
+	and $7
+	jr z, .asm_f564
+	ld a, $1
+	ld [DefaultFlypoint], a
+
+.asm_f564
+	pop af
+	and b
+	ld [hl], a
+	add hl, de
+	dec c
+	jr nz, .asm_f559
+	ret
+; f56c
+
+
+UnknownText_0xf56c: ; 0xf56c
+	text_jump UnknownText_0x1c5bf9, BANK(UnknownText_0x1c5bf9)
+	db "@"
+; 0xf571
+
+UnknownText_0xf571: ; 0xf571
+	text_jump UnknownText_0x1c5c28, BANK(UnknownText_0x1c5c28)
+	db "@"
+; 0xf576
+
+UnknownText_0xf576: ; 0xf576
+	text_jump UnknownText_0x1c5c44, BANK(UnknownText_0x1c5c44)
+	start_asm
+; 0xf57b
+
+
+Function_0xf57b: ; f57b
+	ld a, [IsInBattle]
+	and a
+	jr nz, .asm_f58c
+
+	push de
+	ld de, SFX_POKEFLUTE
+	call WaitPlaySFX
+	call WaitSFX
+	pop de
+
+.asm_f58c
+	jp $13e0
+; f58f
+
+
+BlueCard: ; f58f
+	ld hl, .bluecardtext
+	jp $2012
+
+.bluecardtext
+	text_jump UnknownText_0x1c5c5e, BANK(UnknownText_0x1c5c5e)
+	db "@"
+; f59a
+
+
+CoinCase: ; f59a
+	ld hl, .coincasetext
+	jp $2012
+
+.coincasetext
+	text_jump UnknownText_0x1c5c7b, BANK(UnknownText_0x1c5c7b)
+	db "@"
+; f5a5
+
+
+OldRod: ; f5a5
+	ld e, $0
+	jr Function_0xf5b1
+; f5a9
+
+GoodRod: ; f5a9
+	ld e, $1
+	jr Function_0xf5b1
+; f5ad
+
+SuperRod: ; f5ad
+	ld e, $2
+	jr Function_0xf5b1
+; f5b1
+
+Function_0xf5b1: ; f5b1
+	ld a, $3
+	ld hl, $4f8e
+	rst FarCall
+	ret
+; f5b8
+
+
+Itemfinder: ; f5b8
+	ld a, $4
+	ld hl, $6580
+	rst FarCall
+	ret
+; f5bf
+
+
+MaxElixer:
+PpUp:
+Ether:
+MaxEther:
+Elixer:
+Mysteryberry: ; f5bf
+	ld a, [CurItem]
+	ld [DefaultFlypoint], a
+
+.asm_f5c5
+	ld b, $1
+	call $71f9
+
+	jp c, $76e0
+
+.asm_f5cd
+	ld a, [DefaultFlypoint]
+	cp $15
+	jp z, $76af
+	cp $41
+	jp z, $76af
+	ld hl, $7725
+	ld a, [DefaultFlypoint]
+	cp $3e
+	jr z, .asm_f5e7
+	ld hl, $772a
+
+.asm_f5e7
+	call $1057
+
+	ld a, [CurMoveNum]
+	push af
+	xor a
+	ld [CurMoveNum], a
+	ld a, $2
+	ld [$d235], a
+	ld a, $f
+	ld hl, $64bc
+	rst FarCall
+
+	pop bc
+	ld a, b
+	ld [CurMoveNum], a
+	jr nz, .asm_f5c5
+	ld hl, PartyMon1Move1
+	ld bc, $0030
+	call $7963
+
+	push hl
+	ld a, [hl]
+	ld [$d265], a
+	call $34f8
+
+	call CopyName1
+
+	pop hl
+	ld a, [DefaultFlypoint]
+	cp $3e
+	jp nz, $76a7
+	ld a, [hl]
+	cp $a6
+	jr z, .asm_f62f
+	ld bc, $0015
+	add hl, bc
+	ld a, [hl]
+	cp $c0
+	jr c, .asm_f637
+
+.asm_f62f
+	ld hl, $772f
+	call $1057
+
+	jr .asm_f5cd
+
+.asm_f637
+	ld a, [hl]
+	add $40
+	ld [hl], a
+	ld a, $1
+	ld [$d265], a
+	call $784c
+
+	call $7780
+
+	ld hl, $7734
+	call $1057
+
+	call ClearPalettes
+
+	jp $7795
+; f652
+
+
+INCBIN "baserom.gbc", $f652, $f73e - $f652
+
+
+Squirtbottle: ; f73e
+	ld a, $14
+	ld hl, $4730
+	rst FarCall
+	ret
+; f745
+
+
+CardKey: ; f745
+	ld a, $14
+	ld hl, $4779
+	rst FarCall
+	ret
+; f74c
+
+
+BasementKey: ; f74c
+	ld a, $14
+	ld hl, $47b4
+	rst FarCall
+	ret
+; f753
+
+
+SacredAsh: ; f753
+	ld a, $14
+	ld hl, $47e6
+	rst FarCall
+
+	ld a, [$d0ec]
+	cp $1
+	ret nz
+	call $7795
+	ret
+; f763
+
+
+NormalBox: ; f763
+	ld c, $2c
+	jr Function_0xf769
+; f767
+
+GorgeousBox: ; f767
+	ld c, $2b
+; f769
+
+Function_0xf769: ; f769
+	ld a, $9
+	ld hl, $6f02
+	rst FarCall
+
+	ld hl, UnknownText_0xf778
+	call $1057
+
+	jp $7795
+; f778
+
+UnknownText_0xf778: ; 0xf778
+	text_jump UnknownText_0x1c5d03, BANK(UnknownText_0x1c5d03)
+	db "@"
+; 0xf77d
+
+
+
+Brightpowder:
+Item19:
+LuckyPunch:
+MetalPowder:
+Nugget:
+Item2D:
+Item32:
+ExpShare:
+SilverLeaf:
+RedScale:
+Secretpotion:
+SSTicket:
+MysteryEgg:
+ClearBell:
+SilverWing:
+QuickClaw:
+GoldLeaf:
+SoftSand:
+SharpBeak:
+PoisonBarb:
+KingsRock:
+RedApricorn:
+Tinymushroom:
+BigMushroom:
+Silverpowder:
+BluApricorn:
+Item5A:
+AmuletCoin:
+YlwApricorn:
+GrnApricorn:
+CleanseTag:
+MysticWater:
+Twistedspoon:
+WhtApricorn:
+Blackbelt:
+BlkApricorn:
+Item64:
+PnkApricorn:
+Blackglasses:
+Slowpoketail:
+PinkBow:
+Stick:
+SmokeBall:
+Nevermeltice:
+Magnet:
+Pearl:
+BigPearl:
+Everstone:
+SpellTag:
+GsBall:
+MiracleSeed:
+ThickClub:
+FocusBand:
+Item78:
+HardStone:
+LuckyEgg:
+MachinePart:
+EggTicket:
+LostItem:
+Stardust:
+StarPiece:
+Pass:
+Item87:
+Item88:
+Item89:
+Charcoal:
+ScopeLens:
+Item8D:
+Item8E:
+MetalCoat:
+DragonFang:
+Item91:
+Leftovers:
+Item93:
+Item94:
+Item95:
+DragonScale:
+BerserkGene:
+Item99:
+Item9A:
+Item9B:
+FlowerMail:
+ItemA2:
+LightBall:
+PolkadotBow:
+ItemAB:
+UpGrade:
+ItemB0:
+RainbowWing:
+ItemB3: ; f77d
+	jp $77ed
+; f780
+
+
+
+
--- a/main.asm
+++ b/main.asm
@@ -5904,7 +5904,210 @@
 ; d486
 
 
-INCBIN "baserom.gbc", $d486, $fa0b - $d486
+INCBIN "baserom.gbc", $d486, $e722 - $d486
+
+
+DoItemEffect: ; e722
+	ld a, [CurItem]
+	ld [$d265], a
+	call GetItemName
+	call CopyName1
+	ld a, 1
+	ld [$d0ec], a
+	ld a, [CurItem]
+	dec a
+	ld hl, ItemEffects
+	rst $28
+	ret
+; e73c
+
+
+ItemEffects: ; e73c
+	dw MasterBall
+	dw UltraBall
+	dw Brightpowder
+	dw GreatBall
+	dw PokeBall
+	dw Item06
+	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 Item38
+	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
+
+INCLUDE "items/item_effects.asm"
+
+
+INCBIN "baserom.gbc", $f780, $fa0b - $f780
 
 
 SECTION "bank4",DATA,BANK[$4]