pokered/engine/mon_party_sprites.asm
2014-05-27 11:08:52 -07:00

403 lines
6.2 KiB
NASM
Executable file

AnimatePartyMon_ForceSpeed1: ; 716f7 (1c:56f7)
xor a
ld [wCurrentMenuItem], a ; wCurrentMenuItem
ld b, a
inc a
jr GetAnimationSpeed
; wcf1f contains the party mon's health bar colors
; 0: green
; 1: yellow
; 2: red
AnimatePartyMon: ; 716ff (1c:56ff)
ld hl, wcf1f
ld a, [wCurrentMenuItem]
ld c, a
ld b, $0
add hl, bc
ld a, [hl]
GetAnimationSpeed: ; 7170a (1c:570a)
ld c, a
ld hl, PartyMonSpeeds
add hl, bc
ld a, [wcf1b]
xor $1
add [hl]
ld c, a
add a
ld b, a
ld a, [W_SUBANIMTRANSFORM] ; W_SUBANIMTRANSFORM
and a
jr z, .resetSprites
cp c
jr z, .animateSprite
.incTimer
inc a
cp b
jr nz, .resetTimer
xor a
.resetTimer
ld [W_SUBANIMTRANSFORM], a ; W_SUBANIMTRANSFORM
jp DelayFrame
.resetSprites
push bc
ld hl, wcc5b
ld de, wOAMBuffer
ld bc, $60
call CopyData
pop bc
xor a
jr .incTimer
.animateSprite
push bc
ld hl, wOAMBuffer + $02 ; OAM tile id
ld bc, $10
ld a, [wCurrentMenuItem]
call AddNTimes
ld c, $40 ; amount to increase the tile id by
ld a, [hl]
cp $4 ; tile ID for SPRITE_BALL_M
jr z, .editCoords
cp $8 ; tile ID for SPRITE_HELIX
jr nz, .editTileIDS
; SPRITE_BALL_M and SPRITE_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
PartyMonSpeeds: ; 71769 (1c:5769)
db $05,$10,$20
Func_7176c: ; 7176c (1c:576c)
ld hl, MonPartySpritePointers ; $57c0
ld a, $1c
Func_71771: ; 71771 (1c:5771)
ld bc, $0
.asm_71774
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, .asm_71774
ret
Func_71791: ; 71791 (1c:5791)
call DisableLCD
ld hl, MonPartySpritePointers ; $57c0
ld a, $1c
ld bc, $0
.asm_7179c
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, .asm_7179c
jp EnableLCD
MonPartySpritePointers: ; 717c0 (1c:57c0)
dw SlowbroSprite + $c0
db $40 / $10 ; 40 bytes
db BANK(SlowbroSprite)
dw $8000
dw BallSprite
db $80 / $10 ; $80 bytes
db BANK(BallSprite)
dw $8040
dw ClefairySprite + $c0
db $40 / $10 ; $40 bytes
db BANK(ClefairySprite)
dw $80C0
dw BirdSprite + $c0
db $40 / $10 ; $40 bytes
db BANK(BirdSprite)
dw $8100
dw SeelSprite
db $40 / $10 ; $40 bytes
db BANK(SeelSprite)
dw $8140
dw MonPartySprites + $40
db $10 / $10 ; $10 bytes
db BANK(MonPartySprites)
dw $8180
dw MonPartySprites + $50
db $10 / $10 ; $10 bytes
db BANK(MonPartySprites)
dw $81A0
dw MonPartySprites + $60
db $10 / $10 ; $10 bytes
db BANK(MonPartySprites)
dw $81C0
dw MonPartySprites + $70
db $10 / $10 ; $10 bytes
db BANK(MonPartySprites)
dw $81E0
dw MonPartySprites + $80
db $10 / $10 ; $10 bytes
db BANK(MonPartySprites)
dw $8200
dw MonPartySprites + $90
db $10 / $10 ; $10 bytes
db BANK(MonPartySprites)
dw $8220
dw MonPartySprites + $A0
db $10 / $10 ; $10 bytes
db BANK(MonPartySprites)
dw $8240
dw MonPartySprites + $B0
db $10 / $10 ; $10 bytes
db BANK(MonPartySprites)
dw $8260
dw MonPartySprites + $100
db $40 / $10 ; $40 bytes
db BANK(MonPartySprites)
dw $8380
dw SlowbroSprite
db $40 / $10 ; $40 bytes
db BANK(SlowbroSprite)
dw $8400
dw BallSprite
db $80 / $10 ; $80 bytes
db BANK(BallSprite)
dw $8440
dw ClefairySprite
db $40 / $10 ; $40 bytes
db BANK(ClefairySprite)
dw $84C0
dw BirdSprite
db $40 / $10 ; $40 bytes
db BANK(BirdSprite)
dw $8500
dw SeelSprite + $C0
db $40 / $10 ; $40 bytes
db BANK(SeelSprite)
dw $8540
dw MonPartySprites
db $10 / $10 ; $10 bytes
db BANK(MonPartySprites)
dw $8580
dw MonPartySprites + $10
db $10 / $10 ; $10 bytes
db BANK(MonPartySprites)
dw $85A0
dw MonPartySprites + $20
db $10 / $10 ; $10 bytes
db BANK(MonPartySprites)
dw $85C0
dw MonPartySprites + $30
db $10 / $10 ; $10 bytes
db BANK(MonPartySprites)
dw $85E0
dw MonPartySprites + $C0
db $10 / $10 ; $10 bytes
db BANK(MonPartySprites)
dw $8600
dw MonPartySprites + $D0
db $10 / $10 ; $10 bytes
db BANK(MonPartySprites)
dw $8620
dw MonPartySprites + $E0
db $10 / $10 ; $10 bytes
db BANK(MonPartySprites)
dw $8640
dw MonPartySprites + $F0
db $10 / $10 ; $10 bytes
db BANK(MonPartySprites)
dw $8660
dw MonPartySprites + $140
db $40 / $10 ; $40 bytes
db BANK(MonPartySprites)
dw $8780
Func_71868: ; 71868 (1c:5868)
push hl
push de
push bc
ld a, [H_DOWNARROWBLINKCNT2] ; $ff8c
ld hl, W_PARTYMON1 ; W_PARTYMON1
ld e, a
ld d, $0
add hl, de
ld a, [hl]
call GetPartyMonSpriteID
ld [wcd5b], a
call Func_718c3
pop bc
pop de
pop hl
ret
Func_71882: ; 71882 (1c:5882)
xor a
ld [H_DOWNARROWBLINKCNT2], a ; $ff8c
ld a, [wcd5d]
call GetPartyMonSpriteID
ld [wcd5b], a
jr Func_718c3
Func_71890: ; 71890 (1c:5890)
ld a, [wcf91]
call GetPartyMonSpriteID
push af
ld hl, $8000
call Func_718ac
pop af
add $54
ld hl, $8040
call Func_718ac
xor a
ld [wcd5d], a
jr Func_71882
Func_718ac: ; 718ac (1c:58ac)
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
Func_718c3: ; 718c3 (1c:58c3)
push af
ld c, $10
ld h, wOAMBuffer / $100
ld a, [H_DOWNARROWBLINKCNT2] ; $ff8c
swap a
ld l, a
add $10
ld b, a
pop af
cp $8
jr z, .asm_718da
call Func_712a6
jr .asm_718dd
.asm_718da
call Func_71281
.asm_718dd
ld hl, wOAMBuffer
ld de, wcc5b
ld bc, $60
jp CopyData
GetPartyMonSpriteID: ; 718e9 (1c:58e9)
ld [wd11e], a
ld a, $3a
call Predef ; indirect jump to IndexToPokedex (41010 (10:5010))
ld a, [wd11e]
ld c, a
dec a
srl a
ld hl, MonPartyData ; $590d
ld e, a
ld d, $0
add hl, de
ld a, [hl]
bit 0, c
jr nz, .asm_71906
swap a
.asm_71906
and $f0
srl a
srl a
ret
INCLUDE "data/mon_party_sprites.asm"
MonPartySprites: ; 71959 (1c:5959)
INCBIN "gfx/mon_ow_sprites.2bpp"