pokecrystal-board/engine/gfx/mon_icons.asm

419 lines
6.3 KiB
NASM
Raw Normal View History

2018-06-24 07:09:41 -07:00
LoadOverworldMonIcon:
2015-12-04 05:46:11 -08:00
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
2018-06-24 07:09:41 -07:00
LoadMenuMonIcon:
2015-12-04 05:46:11 -08:00
push hl
push de
push bc
2016-01-09 13:28:22 -08:00
call .LoadIcon
2015-12-04 05:46:11 -08:00
pop bc
pop de
pop hl
ret
2018-06-24 07:09:41 -07:00
.LoadIcon:
2015-12-04 05:46:11 -08:00
ld d, 0
2016-01-09 13:28:22 -08:00
ld hl, .Jumptable
2015-12-04 05:46:11 -08:00
add hl, de
2016-03-01 19:31:21 -08:00
add hl, de
2015-12-04 05:46:11 -08:00
ld a, [hli]
ld h, [hl]
ld l, a
jp hl
2015-12-04 05:46:11 -08:00
2018-06-24 07:09:41 -07:00
.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
2015-12-04 05:46:11 -08:00
Unused_GetPartyMenuMonIcon:
2015-12-04 05:46:11 -08:00
call InitPartyMenuIcon
2016-01-09 13:28:22 -08:00
call .GetPartyMonItemGFX
2015-12-04 05:46:11 -08:00
call SetPartyMonIconAnimSpeed
ret
2018-06-24 07:09:41 -07:00
.GetPartyMonItemGFX:
2015-12-04 05:46:11 -08:00
push bc
ldh a, [hObjectStructIndex]
2018-01-23 14:39:09 -08:00
ld hl, wPartyMon1Item
2015-12-04 05:46:11 -08:00
ld bc, PARTYMON_STRUCT_LENGTH
call AddNTimes
pop bc
ld a, [hl]
and a
2016-01-09 13:28:22 -08:00
jr z, .no_item
2015-12-04 05:46:11 -08:00
push hl
push bc
ld d, a
2017-12-24 09:47:30 -08:00
callfar ItemIsMail
2015-12-04 05:46:11 -08:00
pop bc
pop hl
2016-01-09 13:28:22 -08:00
jr c, .not_mail
ld a, $06
2016-01-09 13:28:22 -08:00
jr .got_tile
.not_mail
ld a, $05
; fallthrough
2016-01-09 13:28:22 -08:00
.no_item
ld a, $04
2016-01-09 13:28:22 -08:00
.got_tile
2015-12-05 12:38:25 -08:00
ld hl, SPRITEANIMSTRUCT_FRAMESET_ID
2015-12-04 05:46:11 -08:00
add hl, bc
ld [hl], a
ret
2018-06-24 07:09:41 -07:00
PartyMenu_InitAnimatedMonIcon:
2015-12-04 05:46:11 -08:00
call InitPartyMenuIcon
call .SpawnItemIcon
call SetPartyMonIconAnimSpeed
ret
2018-06-24 07:09:41 -07:00
.SpawnItemIcon:
2015-12-04 05:46:11 -08:00
push bc
ldh a, [hObjectStructIndex]
2018-01-23 14:39:09 -08:00
ld hl, wPartyMon1Item
2015-12-04 05:46:11 -08:00
ld bc, PARTYMON_STRUCT_LENGTH
call AddNTimes
pop bc
ld a, [hl]
and a
ret z
push hl
push bc
ld d, a
2017-12-24 09:47:30 -08:00
callfar ItemIsMail
2015-12-04 05:46:11 -08:00
pop bc
pop hl
jr c, .mail
ld a, SPRITE_ANIM_FRAMESET_PARTY_MON_WITH_ITEM
2015-12-04 05:46:11 -08:00
jr .okay
.mail
ld a, SPRITE_ANIM_FRAMESET_PARTY_MON_WITH_MAIL
2015-12-04 05:46:11 -08:00
.okay
2015-12-05 12:38:25 -08:00
ld hl, SPRITEANIMSTRUCT_FRAMESET_ID
2015-12-04 05:46:11 -08:00
add hl, bc
ld [hl], a
ret
2018-06-24 07:09:41 -07:00
InitPartyMenuIcon:
2015-12-04 05:46:11 -08:00
ld a, [wCurIconTile]
push af
ldh a, [hObjectStructIndex]
2018-01-23 14:39:09 -08:00
ld hl, wPartySpecies
2015-12-04 05:46:11 -08:00
ld e, a
ld d, 0
2015-12-04 05:46:11 -08:00
add hl, de
ld a, [hl]
call ReadMonMenuIcon
2018-01-23 14:39:09 -08:00
ld [wCurIcon], a
2015-12-04 05:46:11 -08:00
call GetMemIconGFX
ldh a, [hObjectStructIndex]
2015-12-04 05:46:11 -08:00
; y coord
add a
add a
add a
add a
2015-12-04 05:46:11 -08:00
add $1c
ld d, a
; x coord
ld e, $10
; type is partymon icon
2023-09-24 06:06:19 -07:00
ld a, SPRITE_ANIM_OBJ_PARTY_MON
call _InitSpriteAnimStruct
2015-12-04 05:46:11 -08:00
pop af
ld hl, SPRITEANIMSTRUCT_TILE_ID
add hl, bc
ld [hl], a
ret
2018-06-24 07:09:41 -07:00
SetPartyMonIconAnimSpeed:
2015-12-04 05:46:11 -08:00
push bc
ldh a, [hObjectStructIndex]
2015-12-04 05:46:11 -08:00
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
2015-12-04 05:46:11 -08:00
add hl, bc
ld [hl], a
ret
2018-06-24 07:09:41 -07:00
.getspeed
2017-12-24 09:47:30 -08:00
farcall PlacePartymonHPBar
2015-12-04 05:46:11 -08:00
call GetHPPal
ld e, d
ld d, 0
ld hl, .speeds
add hl, de
ld b, [hl]
ret
2018-06-24 07:09:41 -07:00
.speeds
db $00 ; HP_GREEN
db $40 ; HP_YELLOW
db $80 ; HP_RED
2015-12-04 05:46:11 -08:00
2018-06-24 07:09:41 -07:00
NamingScreen_InitAnimatedMonIcon:
ld a, [wTempIconSpecies]
2015-12-04 05:46:11 -08:00
call ReadMonMenuIcon
2018-01-23 14:39:09 -08:00
ld [wCurIcon], a
2015-12-04 05:46:11 -08:00
xor a
call GetIconGFX
depixel 4, 4, 4, 0
2023-09-24 06:06:19 -07:00
ld a, SPRITE_ANIM_OBJ_PARTY_MON
call _InitSpriteAnimStruct
2015-12-04 05:46:11 -08:00
ld hl, SPRITEANIMSTRUCT_ANIM_SEQ_ID
add hl, bc
2023-09-24 06:06:19 -07:00
ld [hl], SPRITE_ANIM_FUNC_NULL
2015-12-04 05:46:11 -08:00
ret
2018-06-24 07:09:41 -07:00
MoveList_InitAnimatedMonIcon:
ld a, [wTempIconSpecies]
2015-12-04 05:46:11 -08:00
call ReadMonMenuIcon
2018-01-23 14:39:09 -08:00
ld [wCurIcon], a
2015-12-04 05:46:11 -08:00
xor a
call GetIconGFX
2023-07-26 17:50:16 -07:00
ld d, 3 * TILE_WIDTH + 2 ; depixel 3, 4, 2, 4
ld e, 4 * TILE_WIDTH + 4
2023-09-24 06:06:19 -07:00
ld a, SPRITE_ANIM_OBJ_PARTY_MON
call _InitSpriteAnimStruct
2015-12-04 05:46:11 -08:00
ld hl, SPRITEANIMSTRUCT_ANIM_SEQ_ID
add hl, bc
2023-09-24 06:06:19 -07:00
ld [hl], SPRITE_ANIM_FUNC_NULL
2015-12-04 05:46:11 -08:00
ret
2018-06-24 07:09:41 -07:00
Trade_LoadMonIconGFX:
ld a, [wTempIconSpecies]
2015-12-04 05:46:11 -08:00
call ReadMonMenuIcon
2018-01-23 14:39:09 -08:00
ld [wCurIcon], a
2015-12-04 05:46:11 -08:00
ld a, $62
ld [wCurIconTile], a
call GetMemIconGFX
ret
2018-06-24 07:09:41 -07:00
GetSpeciesIcon:
2015-12-04 05:46:11 -08:00
; Load species icon into VRAM at tile a
push de
ld a, [wTempIconSpecies]
2015-12-04 05:46:11 -08:00
call ReadMonMenuIcon
2018-01-23 14:39:09 -08:00
ld [wCurIcon], a
2015-12-04 05:46:11 -08:00
pop de
ld a, e
call GetIconGFX
ret
2018-06-24 07:09:41 -07:00
FlyFunction_GetMonIcon:
2015-12-04 05:46:11 -08:00
push de
ld a, [wTempIconSpecies]
2015-12-04 05:46:11 -08:00
call ReadMonMenuIcon
2018-01-23 14:39:09 -08:00
ld [wCurIcon], a
2015-12-04 05:46:11 -08:00
pop de
ld a, e
call GetIcon_a
ret
GetMonIconDE: ; unreferenced
2015-12-04 05:46:11 -08:00
push de
ld a, [wTempIconSpecies]
2015-12-04 05:46:11 -08:00
call ReadMonMenuIcon
2018-01-23 14:39:09 -08:00
ld [wCurIcon], a
2015-12-04 05:46:11 -08:00
pop de
call GetIcon_de
ret
2018-06-24 07:09:41 -07:00
GetMemIconGFX:
2015-12-04 05:46:11 -08:00
ld a, [wCurIconTile]
2018-06-24 07:09:41 -07:00
GetIconGFX:
2015-12-04 05:46:11 -08:00
call GetIcon_a
ld de, 8 tiles
2015-12-04 05:46:11 -08:00
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"
2015-12-04 05:46:11 -08:00
2018-06-24 07:09:41 -07:00
GetIcon_de:
2015-12-04 05:46:11 -08:00
; Load icon graphics into VRAM starting from tile de.
ld l, e
ld h, d
jr GetIcon
2018-06-24 07:09:41 -07:00
GetIcon_a:
2015-12-04 05:46:11 -08:00
; Load icon graphics into VRAM starting from tile a.
ld l, a
ld h, 0
2018-06-24 07:09:41 -07:00
GetIcon:
2015-12-04 05:46:11 -08:00
; Load icon graphics into VRAM starting from tile hl.
; One tile is 16 bytes long.
rept 4
add hl, hl
endr
2017-12-28 04:32:33 -08:00
ld de, vTiles0
2015-12-04 05:46:11 -08:00
add hl, de
push hl
; The icons are contiguous, in order and of the same
; size, so the pointer table is somewhat redundant.
2018-01-23 14:39:09 -08:00
ld a, [wCurIcon]
2015-12-04 05:46:11 -08:00
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
2018-06-24 07:09:41 -07:00
GetGFXUnlessMobile:
2015-12-04 05:46:11 -08:00
ld a, [wLinkMode]
cp LINK_MOBILE
jp nz, Request2bpp
jp Get2bppViaHDMA
2015-12-04 05:46:11 -08:00
2018-06-24 07:09:41 -07:00
FreezeMonIcons:
2015-12-04 05:46:11 -08:00
ld hl, wSpriteAnimationStructs
ld e, PARTY_LENGTH
2015-12-15 15:59:49 -08:00
ld a, [wMenuCursorY]
2015-12-04 05:46:11 -08:00
ld d, a
.loop
ld a, [hl]
and a
jr z, .next
cp d
jr z, .loadwithtwo
2023-09-24 06:06:19 -07:00
ld a, SPRITE_ANIM_FUNC_NULL
2015-12-04 05:46:11 -08:00
jr .ok
.loadwithtwo
2023-09-24 06:06:19 -07:00
ld a, SPRITE_ANIM_FUNC_PARTY_MON_SWITCH
2015-12-04 05:46:11 -08:00
.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
2018-06-24 07:09:41 -07:00
UnfreezeMonIcons:
2015-12-04 05:46:11 -08:00
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
2023-09-24 06:06:19 -07:00
ld [hl], SPRITE_ANIM_FUNC_PARTY_MON
2015-12-04 05:46:11 -08:00
pop hl
.next
ld bc, $10
add hl, bc
dec e
jr nz, .loop
ret
2018-06-24 07:09:41 -07:00
HoldSwitchmonIcon:
2015-12-04 05:46:11 -08:00
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
2023-09-24 06:06:19 -07:00
ld a, SPRITE_ANIM_FUNC_PARTY_MON_SELECTED
2015-12-04 05:46:11 -08:00
jr .join_back
.is_switchmon
2023-09-24 06:06:19 -07:00
ld a, SPRITE_ANIM_FUNC_PARTY_MON_SWITCH
2015-12-04 05:46:11 -08:00
.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
2018-06-24 07:09:41 -07:00
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"