Finish cleanup of bank 3.

This commit is contained in:
entrpntr
2020-05-04 16:23:03 -04:00
parent fd35959d94
commit 858f7a0b8a
19 changed files with 1375 additions and 1334 deletions

View File

@@ -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

17
data/items/heal_hp.asm Normal file
View File

@@ -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

View File

@@ -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

6
data/items/x_stats.asm Normal file
View File

@@ -0,0 +1,6 @@
XItemStats:
; item, stat
db X_ATTACK, ATTACK
db X_DEFEND, DEFENSE
db X_SPEED, SPEED
db X_SPECIAL, SP_ATTACK

View File

@@ -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

View File

@@ -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"

View File

@@ -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.

View File

@@ -1577,7 +1577,7 @@ MovementData_CastRod:
PutTheRodAway:
hlcoord 1, 14
lb bc, $3, $12
lb bc, 3, 18
call ClearBox
call WaitBGMap
xor a

View File

@@ -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

File diff suppressed because it is too large Load Diff

View File

@@ -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
inc hl
jr .asm_d2b2
jr z, .ok
jr c, .ok
.asm_d2ca
.next
inc hl
jr .loop
.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

View File

@@ -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

View File

@@ -120,4 +120,3 @@ _GetVarAction::
ld a, [wBattleResult]
and $ff ^ BATTLERESULT_BITMASK
jp .loadstringbuffer2

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -64,7 +64,6 @@ ROMX $0e
ROMX $0f
"Battle Core"
ROMX $10
org $4000
"bank10"
ROMX $11
org $4000

View File

@@ -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

View File

@@ -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