mirror of
https://gitlab.com/xCrystal/pokecrystal-board.git
synced 2024-11-16 11:27:33 -08:00
419 lines
6.2 KiB
NASM
419 lines
6.2 KiB
NASM
LoadOverworldMonIcon:
|
|
ld a, e
|
|
call ReadMonMenuIcon
|
|
ld l, a
|
|
ld h, 0
|
|
add hl, hl
|
|
ld de, IconPointers
|
|
add hl, de
|
|
ld a, [hli]
|
|
ld e, a
|
|
ld d, [hl]
|
|
ld b, BANK(Icons)
|
|
ld c, 8
|
|
ret
|
|
|
|
LoadMenuMonIcon:
|
|
push hl
|
|
push de
|
|
push bc
|
|
call .LoadIcon
|
|
pop bc
|
|
pop de
|
|
pop hl
|
|
ret
|
|
|
|
.LoadIcon:
|
|
ld d, 0
|
|
ld hl, .Jumptable
|
|
add hl, de
|
|
add hl, de
|
|
ld a, [hli]
|
|
ld h, [hl]
|
|
ld l, a
|
|
jp hl
|
|
|
|
.Jumptable:
|
|
; entries correspond to MONICON_* constants
|
|
dw PartyMenu_InitAnimatedMonIcon ; MONICON_PARTYMENU
|
|
dw NamingScreen_InitAnimatedMonIcon ; MONICON_NAMINGSCREEN
|
|
dw MoveList_InitAnimatedMonIcon ; MONICON_MOVES
|
|
dw Trade_LoadMonIconGFX ; MONICON_TRADE
|
|
dw Unused_GetPartyMenuMonIcon ; MONICON_MOBILE1
|
|
dw Unused_GetPartyMenuMonIcon ; MONICON_MOBILE2
|
|
dw Unused_GetPartyMenuMonIcon ; MONICON_UNUSED
|
|
|
|
Unused_GetPartyMenuMonIcon:
|
|
call InitPartyMenuIcon
|
|
call .GetPartyMonItemGFX
|
|
call SetPartyMonIconAnimSpeed
|
|
ret
|
|
|
|
.GetPartyMonItemGFX:
|
|
push bc
|
|
ldh a, [hObjectStructIndex]
|
|
ld hl, wPartyMon1Item
|
|
ld bc, PARTYMON_STRUCT_LENGTH
|
|
call AddNTimes
|
|
pop bc
|
|
ld a, [hl]
|
|
and a
|
|
jr z, .no_item
|
|
push hl
|
|
push bc
|
|
ld d, a
|
|
callfar ItemIsMail
|
|
pop bc
|
|
pop hl
|
|
jr c, .not_mail
|
|
ld a, $06
|
|
jr .got_tile
|
|
.not_mail
|
|
ld a, $05
|
|
; fallthrough
|
|
|
|
.no_item
|
|
ld a, $04
|
|
.got_tile
|
|
ld hl, SPRITEANIMSTRUCT_FRAMESET_ID
|
|
add hl, bc
|
|
ld [hl], a
|
|
ret
|
|
|
|
PartyMenu_InitAnimatedMonIcon:
|
|
call InitPartyMenuIcon
|
|
call .SpawnItemIcon
|
|
call SetPartyMonIconAnimSpeed
|
|
ret
|
|
|
|
.SpawnItemIcon:
|
|
push bc
|
|
ldh a, [hObjectStructIndex]
|
|
ld hl, wPartyMon1Item
|
|
ld bc, PARTYMON_STRUCT_LENGTH
|
|
call AddNTimes
|
|
pop bc
|
|
ld a, [hl]
|
|
and a
|
|
ret z
|
|
push hl
|
|
push bc
|
|
ld d, a
|
|
callfar ItemIsMail
|
|
pop bc
|
|
pop hl
|
|
jr c, .mail
|
|
ld a, SPRITE_ANIM_FRAMESET_PARTY_MON_WITH_ITEM
|
|
jr .okay
|
|
|
|
.mail
|
|
ld a, SPRITE_ANIM_FRAMESET_PARTY_MON_WITH_MAIL
|
|
.okay
|
|
ld hl, SPRITEANIMSTRUCT_FRAMESET_ID
|
|
add hl, bc
|
|
ld [hl], a
|
|
ret
|
|
|
|
InitPartyMenuIcon:
|
|
ld a, [wCurIconTile]
|
|
push af
|
|
ldh a, [hObjectStructIndex]
|
|
ld hl, wPartySpecies
|
|
ld e, a
|
|
ld d, 0
|
|
add hl, de
|
|
ld a, [hl]
|
|
call ReadMonMenuIcon
|
|
ld [wCurIcon], a
|
|
call GetMemIconGFX
|
|
ldh a, [hObjectStructIndex]
|
|
; y coord
|
|
add a
|
|
add a
|
|
add a
|
|
add a
|
|
add $1c
|
|
ld d, a
|
|
; x coord
|
|
ld e, $10
|
|
; type is partymon icon
|
|
ld a, SPRITE_ANIM_INDEX_PARTY_MON
|
|
call _InitSpriteAnimStruct
|
|
pop af
|
|
ld hl, SPRITEANIMSTRUCT_TILE_ID
|
|
add hl, bc
|
|
ld [hl], a
|
|
ret
|
|
|
|
SetPartyMonIconAnimSpeed:
|
|
push bc
|
|
ldh a, [hObjectStructIndex]
|
|
ld b, a
|
|
call .getspeed
|
|
ld a, b
|
|
pop bc
|
|
ld hl, SPRITEANIMSTRUCT_DURATIONOFFSET
|
|
add hl, bc
|
|
ld [hl], a
|
|
rlca
|
|
rlca
|
|
ld hl, SPRITEANIMSTRUCT_VAR2
|
|
add hl, bc
|
|
ld [hl], a
|
|
ret
|
|
|
|
.getspeed
|
|
farcall PlacePartymonHPBar
|
|
call GetHPPal
|
|
ld e, d
|
|
ld d, 0
|
|
ld hl, .speeds
|
|
add hl, de
|
|
ld b, [hl]
|
|
ret
|
|
|
|
.speeds
|
|
db $00 ; HP_GREEN
|
|
db $40 ; HP_YELLOW
|
|
db $80 ; HP_RED
|
|
|
|
NamingScreen_InitAnimatedMonIcon:
|
|
ld a, [wTempIconSpecies]
|
|
call ReadMonMenuIcon
|
|
ld [wCurIcon], a
|
|
xor a
|
|
call GetIconGFX
|
|
depixel 4, 4, 4, 0
|
|
ld a, SPRITE_ANIM_INDEX_PARTY_MON
|
|
call _InitSpriteAnimStruct
|
|
ld hl, SPRITEANIMSTRUCT_ANIM_SEQ_ID
|
|
add hl, bc
|
|
ld [hl], SPRITE_ANIM_SEQ_NULL
|
|
ret
|
|
|
|
MoveList_InitAnimatedMonIcon:
|
|
ld a, [wTempIconSpecies]
|
|
call ReadMonMenuIcon
|
|
ld [wCurIcon], a
|
|
xor a
|
|
call GetIconGFX
|
|
ld d, 3 * 8 + 2 ; depixel 3, 4, 2, 4
|
|
ld e, 4 * 8 + 4
|
|
ld a, SPRITE_ANIM_INDEX_PARTY_MON
|
|
call _InitSpriteAnimStruct
|
|
ld hl, SPRITEANIMSTRUCT_ANIM_SEQ_ID
|
|
add hl, bc
|
|
ld [hl], SPRITE_ANIM_SEQ_NULL
|
|
ret
|
|
|
|
Trade_LoadMonIconGFX:
|
|
ld a, [wTempIconSpecies]
|
|
call ReadMonMenuIcon
|
|
ld [wCurIcon], a
|
|
ld a, $62
|
|
ld [wCurIconTile], a
|
|
call GetMemIconGFX
|
|
ret
|
|
|
|
GetSpeciesIcon:
|
|
; Load species icon into VRAM at tile a
|
|
push de
|
|
ld a, [wTempIconSpecies]
|
|
call ReadMonMenuIcon
|
|
ld [wCurIcon], a
|
|
pop de
|
|
ld a, e
|
|
call GetIconGFX
|
|
ret
|
|
|
|
FlyFunction_GetMonIcon:
|
|
push de
|
|
ld a, [wTempIconSpecies]
|
|
call ReadMonMenuIcon
|
|
ld [wCurIcon], a
|
|
pop de
|
|
ld a, e
|
|
call GetIcon_a
|
|
ret
|
|
|
|
GetMonIconDE: ; unreferenced
|
|
push de
|
|
ld a, [wTempIconSpecies]
|
|
call ReadMonMenuIcon
|
|
ld [wCurIcon], a
|
|
pop de
|
|
call GetIcon_de
|
|
ret
|
|
|
|
GetMemIconGFX:
|
|
ld a, [wCurIconTile]
|
|
GetIconGFX:
|
|
call GetIcon_a
|
|
ld de, 8 tiles
|
|
add hl, de
|
|
ld de, HeldItemIcons
|
|
lb bc, BANK(HeldItemIcons), 2
|
|
call GetGFXUnlessMobile
|
|
ld a, [wCurIconTile]
|
|
add 10
|
|
ld [wCurIconTile], a
|
|
ret
|
|
|
|
HeldItemIcons:
|
|
INCBIN "gfx/stats/mail.2bpp"
|
|
INCBIN "gfx/stats/item.2bpp"
|
|
|
|
GetIcon_de:
|
|
; Load icon graphics into VRAM starting from tile de.
|
|
ld l, e
|
|
ld h, d
|
|
jr GetIcon
|
|
|
|
GetIcon_a:
|
|
; Load icon graphics into VRAM starting from tile a.
|
|
ld l, a
|
|
ld h, 0
|
|
|
|
GetIcon:
|
|
; Load icon graphics into VRAM starting from tile hl.
|
|
|
|
; One tile is 16 bytes long.
|
|
rept 4
|
|
add hl, hl
|
|
endr
|
|
|
|
ld de, vTiles0
|
|
add hl, de
|
|
push hl
|
|
|
|
; The icons are contiguous, in order and of the same
|
|
; size, so the pointer table is somewhat redundant.
|
|
ld a, [wCurIcon]
|
|
push hl
|
|
ld l, a
|
|
ld h, 0
|
|
add hl, hl
|
|
ld de, IconPointers
|
|
add hl, de
|
|
ld a, [hli]
|
|
ld e, a
|
|
ld d, [hl]
|
|
pop hl
|
|
|
|
lb bc, BANK(Icons), 8
|
|
call GetGFXUnlessMobile
|
|
|
|
pop hl
|
|
ret
|
|
|
|
GetGFXUnlessMobile:
|
|
ld a, [wLinkMode]
|
|
cp LINK_MOBILE
|
|
jp nz, Request2bpp
|
|
jp Get2bppViaHDMA
|
|
|
|
FreezeMonIcons:
|
|
ld hl, wSpriteAnimationStructs
|
|
ld e, PARTY_LENGTH
|
|
ld a, [wMenuCursorY]
|
|
ld d, a
|
|
.loop
|
|
ld a, [hl]
|
|
and a
|
|
jr z, .next
|
|
cp d
|
|
jr z, .loadwithtwo
|
|
ld a, SPRITE_ANIM_SEQ_NULL
|
|
jr .ok
|
|
|
|
.loadwithtwo
|
|
ld a, SPRITE_ANIM_SEQ_PARTY_MON_SWITCH
|
|
|
|
.ok
|
|
push hl
|
|
ld c, l
|
|
ld b, h
|
|
ld hl, SPRITEANIMSTRUCT_ANIM_SEQ_ID
|
|
add hl, bc
|
|
ld [hl], a
|
|
pop hl
|
|
|
|
.next
|
|
ld bc, $10
|
|
add hl, bc
|
|
dec e
|
|
jr nz, .loop
|
|
ret
|
|
|
|
UnfreezeMonIcons:
|
|
ld hl, wSpriteAnimationStructs
|
|
ld e, PARTY_LENGTH
|
|
.loop
|
|
ld a, [hl]
|
|
and a
|
|
jr z, .next
|
|
push hl
|
|
ld c, l
|
|
ld b, h
|
|
ld hl, SPRITEANIMSTRUCT_ANIM_SEQ_ID
|
|
add hl, bc
|
|
ld [hl], SPRITE_ANIM_SEQ_PARTY_MON
|
|
pop hl
|
|
.next
|
|
ld bc, $10
|
|
add hl, bc
|
|
dec e
|
|
jr nz, .loop
|
|
ret
|
|
|
|
HoldSwitchmonIcon:
|
|
ld hl, wSpriteAnimationStructs
|
|
ld e, PARTY_LENGTH
|
|
ld a, [wSwitchMon]
|
|
ld d, a
|
|
.loop
|
|
ld a, [hl]
|
|
and a
|
|
jr z, .next
|
|
cp d
|
|
jr z, .is_switchmon
|
|
ld a, SPRITE_ANIM_SEQ_PARTY_MON_SELECTED
|
|
jr .join_back
|
|
|
|
.is_switchmon
|
|
ld a, SPRITE_ANIM_SEQ_PARTY_MON_SWITCH
|
|
.join_back
|
|
push hl
|
|
ld c, l
|
|
ld b, h
|
|
ld hl, SPRITEANIMSTRUCT_ANIM_SEQ_ID
|
|
add hl, bc
|
|
ld [hl], a
|
|
pop hl
|
|
.next
|
|
ld bc, $10
|
|
add hl, bc
|
|
dec e
|
|
jr nz, .loop
|
|
ret
|
|
|
|
ReadMonMenuIcon:
|
|
cp EGG
|
|
jr z, .egg
|
|
dec a
|
|
ld hl, MonMenuIcons
|
|
ld e, a
|
|
ld d, 0
|
|
add hl, de
|
|
ld a, [hl]
|
|
ret
|
|
.egg
|
|
ld a, ICON_EGG
|
|
ret
|
|
|
|
INCLUDE "data/pokemon/menu_icons.asm"
|
|
|
|
INCLUDE "data/icon_pointers.asm"
|
|
|
|
INCLUDE "gfx/icons.asm"
|