mirror of
https://github.com/pret/pokered.git
synced 2024-10-22 22:55:31 +00:00
295 lines
5.6 KiB
NASM
295 lines
5.6 KiB
NASM
AnimatePartyMon_ForceSpeed1:
|
|
xor a
|
|
ld [wCurrentMenuItem], a
|
|
ld b, a
|
|
inc a
|
|
jr GetAnimationSpeed
|
|
|
|
; wPartyMenuHPBarColors contains the party mon's health bar colors
|
|
; 0: green
|
|
; 1: yellow
|
|
; 2: red
|
|
AnimatePartyMon::
|
|
ld hl, wPartyMenuHPBarColors
|
|
ld a, [wCurrentMenuItem]
|
|
ld c, a
|
|
ld b, 0
|
|
add hl, bc
|
|
ld a, [hl]
|
|
|
|
GetAnimationSpeed:
|
|
ld c, a
|
|
ld hl, PartyMonSpeeds
|
|
add hl, bc
|
|
ld a, [wOnSGB]
|
|
xor $1
|
|
add [hl]
|
|
ld c, a
|
|
add a
|
|
ld b, a
|
|
ld a, [wAnimCounter]
|
|
and a
|
|
jr z, .resetSprites
|
|
cp c
|
|
jr z, .animateSprite
|
|
.incTimer
|
|
inc a
|
|
cp b
|
|
jr nz, .skipResetTimer
|
|
xor a ; reset timer
|
|
.skipResetTimer
|
|
ld [wAnimCounter], a
|
|
jp DelayFrame
|
|
.resetSprites
|
|
push bc
|
|
ld hl, wMonPartySpritesSavedOAM
|
|
ld de, wShadowOAM
|
|
ld bc, $60
|
|
call CopyData
|
|
pop bc
|
|
xor a
|
|
jr .incTimer
|
|
.animateSprite
|
|
push bc
|
|
ld hl, wShadowOAMSprite00TileID
|
|
ld bc, $10
|
|
ld a, [wCurrentMenuItem]
|
|
call AddNTimes
|
|
ld c, ICONOFFSET
|
|
ld a, [hl]
|
|
cp ICON_BALL << 2
|
|
jr z, .editCoords
|
|
cp ICON_HELIX << 2
|
|
jr nz, .editTileIDS
|
|
; ICON_BALL and ICON_HELIX only shake up and down
|
|
.editCoords
|
|
dec hl
|
|
dec hl ; dec hl to the OAM y coord
|
|
ld c, $1 ; amount to increase the y coord by
|
|
; otherwise, load a second sprite frame
|
|
.editTileIDS
|
|
ld b, $4
|
|
ld de, $4
|
|
.loop
|
|
ld a, [hl]
|
|
add c
|
|
ld [hl], a
|
|
add hl, de
|
|
dec b
|
|
jr nz, .loop
|
|
pop bc
|
|
ld a, c
|
|
jr .incTimer
|
|
|
|
; Party mon animations cycle between 2 frames.
|
|
; The members of the PartyMonSpeeds array specify the number of V-blanks
|
|
; that each frame lasts for green HP, yellow HP, and red HP in order.
|
|
; On the naming screen, the yellow HP speed is always used.
|
|
PartyMonSpeeds:
|
|
db 5, 16, 32
|
|
|
|
LoadMonPartySpriteGfx:
|
|
; Load mon party sprite tile patterns into VRAM during V-blank.
|
|
ld hl, MonPartySpritePointers
|
|
ld a, $1c
|
|
|
|
LoadAnimSpriteGfx:
|
|
; Load animated sprite tile patterns into VRAM during V-blank. hl is the address
|
|
; of an array of structures that contain arguments for CopyVideoData and a is
|
|
; the number of structures in the array.
|
|
ld bc, $0
|
|
.loop
|
|
push af
|
|
push bc
|
|
push hl
|
|
add hl, bc
|
|
ld a, [hli]
|
|
ld e, a
|
|
ld a, [hli]
|
|
ld d, a
|
|
ld a, [hli]
|
|
ld c, a
|
|
ld a, [hli]
|
|
ld b, a
|
|
ld a, [hli]
|
|
ld h, [hl]
|
|
ld l, a
|
|
call CopyVideoData
|
|
pop hl
|
|
pop bc
|
|
ld a, $6
|
|
add c
|
|
ld c, a
|
|
pop af
|
|
dec a
|
|
jr nz, .loop
|
|
ret
|
|
|
|
LoadMonPartySpriteGfxWithLCDDisabled:
|
|
; Load mon party sprite tile patterns into VRAM immediately by disabling the
|
|
; LCD.
|
|
call DisableLCD
|
|
ld hl, MonPartySpritePointers
|
|
ld a, $1c
|
|
ld bc, $0
|
|
.loop
|
|
push af
|
|
push bc
|
|
push hl
|
|
add hl, bc
|
|
ld a, [hli]
|
|
ld e, a
|
|
ld a, [hli]
|
|
ld d, a
|
|
push de
|
|
ld a, [hli]
|
|
ld c, a
|
|
swap c
|
|
ld b, $0
|
|
ld a, [hli]
|
|
ld e, [hl]
|
|
inc hl
|
|
ld d, [hl]
|
|
pop hl
|
|
call FarCopyData2
|
|
pop hl
|
|
pop bc
|
|
ld a, $6
|
|
add c
|
|
ld c, a
|
|
pop af
|
|
dec a
|
|
jr nz, .loop
|
|
jp EnableLCD
|
|
|
|
INCLUDE "data/icon_pointers.asm"
|
|
|
|
WriteMonPartySpriteOAMByPartyIndex:
|
|
; Write OAM blocks for the party mon in [hPartyMonIndex].
|
|
push hl
|
|
push de
|
|
push bc
|
|
ldh a, [hPartyMonIndex]
|
|
ld hl, wPartySpecies
|
|
ld e, a
|
|
ld d, 0
|
|
add hl, de
|
|
ld a, [hl]
|
|
call GetPartyMonSpriteID
|
|
ld [wOAMBaseTile], a
|
|
call WriteMonPartySpriteOAM
|
|
pop bc
|
|
pop de
|
|
pop hl
|
|
ret
|
|
|
|
WriteMonPartySpriteOAMBySpecies:
|
|
; Write OAM blocks for the party sprite of the species in
|
|
; [wMonPartySpriteSpecies].
|
|
xor a
|
|
ldh [hPartyMonIndex], a
|
|
ld a, [wMonPartySpriteSpecies]
|
|
call GetPartyMonSpriteID
|
|
ld [wOAMBaseTile], a
|
|
jr WriteMonPartySpriteOAM
|
|
|
|
UnusedPartyMonSpriteFunction:
|
|
; This function is unused and doesn't appear to do anything useful. It looks
|
|
; like it may have been intended to load the tile patterns and OAM data for
|
|
; the mon party sprite associated with the species in [wcf91].
|
|
; However, its calculations are off and it loads garbage data.
|
|
ld a, [wcf91]
|
|
call GetPartyMonSpriteID
|
|
push af
|
|
ld hl, vSprites tile $00
|
|
call .LoadTilePatterns
|
|
pop af
|
|
add $54
|
|
ld hl, vSprites tile $04
|
|
call .LoadTilePatterns
|
|
xor a
|
|
ld [wMonPartySpriteSpecies], a
|
|
jr WriteMonPartySpriteOAMBySpecies
|
|
|
|
.LoadTilePatterns
|
|
push hl
|
|
add a
|
|
ld c, a
|
|
ld b, 0
|
|
ld hl, MonPartySpritePointers
|
|
add hl, bc
|
|
add hl, bc
|
|
add hl, bc
|
|
ld a, [hli]
|
|
ld e, a
|
|
ld a, [hli]
|
|
ld d, a
|
|
ld a, [hli]
|
|
ld c, a
|
|
ld a, [hli]
|
|
ld b, a
|
|
pop hl
|
|
jp CopyVideoData
|
|
|
|
WriteMonPartySpriteOAM:
|
|
; Write the OAM blocks for the first animation frame into the OAM buffer and
|
|
; make a copy at wMonPartySpritesSavedOAM.
|
|
push af
|
|
ld c, $10
|
|
ld h, HIGH(wShadowOAM)
|
|
ldh a, [hPartyMonIndex]
|
|
swap a
|
|
ld l, a
|
|
add $10
|
|
ld b, a
|
|
pop af
|
|
cp ICON_HELIX << 2
|
|
jr z, .helix
|
|
call WriteSymmetricMonPartySpriteOAM
|
|
jr .makeCopy
|
|
.helix
|
|
call WriteAsymmetricMonPartySpriteOAM
|
|
; Make a copy of the OAM buffer with the first animation frame written so that
|
|
; we can flip back to it from the second frame by copying it back.
|
|
.makeCopy
|
|
ld hl, wShadowOAM
|
|
ld de, wMonPartySpritesSavedOAM
|
|
ld bc, $60
|
|
jp CopyData
|
|
|
|
GetPartyMonSpriteID:
|
|
ld [wd11e], a
|
|
predef IndexToPokedex
|
|
ld a, [wd11e]
|
|
ld c, a
|
|
dec a
|
|
srl a
|
|
ld hl, MonPartyData
|
|
ld e, a
|
|
ld d, 0
|
|
add hl, de
|
|
ld a, [hl]
|
|
bit 0, c
|
|
jr nz, .skipSwap
|
|
swap a ; use lower nybble if pokedex num is even
|
|
.skipSwap
|
|
and $f0
|
|
srl a ; value == ICON constant << 2
|
|
srl a
|
|
ret
|
|
|
|
INCLUDE "data/pokemon/menu_icons.asm"
|
|
|
|
DEF INC_FRAME_1 EQUS "0, $20"
|
|
DEF INC_FRAME_2 EQUS "$20, $20"
|
|
|
|
BugIconFrame1: INCBIN "gfx/icons/bug.2bpp", INC_FRAME_1
|
|
PlantIconFrame1: INCBIN "gfx/icons/plant.2bpp", INC_FRAME_1
|
|
BugIconFrame2: INCBIN "gfx/icons/bug.2bpp", INC_FRAME_2
|
|
PlantIconFrame2: INCBIN "gfx/icons/plant.2bpp", INC_FRAME_2
|
|
SnakeIconFrame1: INCBIN "gfx/icons/snake.2bpp", INC_FRAME_1
|
|
QuadrupedIconFrame1: INCBIN "gfx/icons/quadruped.2bpp", INC_FRAME_1
|
|
SnakeIconFrame2: INCBIN "gfx/icons/snake.2bpp", INC_FRAME_2
|
|
QuadrupedIconFrame2: INCBIN "gfx/icons/quadruped.2bpp", INC_FRAME_2
|
|
|
|
TradeBubbleIconGFX: INCBIN "gfx/trade/bubble.2bpp"
|