123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461
MenuMonIconColors::
INCLUDE "data/mon_icon_pals.asm"
LoadOverworldMonIcon: ; 8e82b
ld a, e
ld [CurIcon], a
ld l, a
ld h, 0
add hl, hl
ld de, IconPointers
add hl, de
ld a, [hli]
ld e, a
ld d, [hl]
jp GetMonIconBank
; 8e83f
SetMenuMonIconColor:
push hl
push de
push bc
push af
ld a, [wd265]
ld [CurPartySpecies], a
call GetMenuMonIconPalette
ld hl, Sprites + 3
jr ProcessMenuMonIconColor
SetMenuMonIconColor_NoShiny:
push hl
push de
push bc
push af
ld a, [wd265]
ld [CurPartySpecies], a
and a
call GetMenuMonIconPalette_PredeterminedShininess
ld hl, Sprites + 3
jr ProcessMenuMonIconColor
LoadPartyMenuMonIconColors:
push hl
push de
push bc
push af
ld a, [PartyCount]
sub c
ld [CurPartyMon], a
ld d, 0
ld e, a
ld hl, PartySpecies
add hl, de
ld a, [hl]
ld [CurPartySpecies], a
;ld a, MON_DVS ; this will not work for us. SHINYFAIL
call GetPartyParamLocation
; apparently, MonType doens't get updated when calling the party screen
; so we force it to work this way
ld a, PARTYMON
ld [MonType], a
call GetMenuMonIconPalette
push af
ld hl, Sprites + 3
ld a, [CurPartyMon]
swap a
ld d, 0
ld e, a
add hl, de
pop af
ProcessMenuMonIconColor:
ld c, 4
ld de, 4
.colorIcon
ld [hl], a
add hl, de
dec c
jr nz, .colorIcon
pop af
pop bc
pop de
pop hl
ret
GetMenuMonIconPalette::
; check shininess
callba GetShiny
jr nc, .not_shiny
scf
jr GetMenuMonIconPalette_PredeterminedShininess
.not_shiny
and a
GetMenuMonIconPalette_PredeterminedShininess:
push af
ld a, [CurPartySpecies]
dec a
ld c, a
ld b, 0
ld hl, MenuMonIconColors
add hl, bc
ld e, [hl]
pop af
ld a, e
jr c, .shiny
swap a
.shiny
and $f
ld l, a
ret
LoadPartyMenuMonIcon:
call LoadPartyMenuMonIconColors
push hl
push de
push bc
call InitPartyMenuIcon
call .SpawnItemIcon
call SetPartyMonIconAnimSpeed
pop bc
pop de
pop hl
ret
.SpawnItemIcon: ; 8e8df (23:68df)
push bc
ld a, [hObjectStructIndexBuffer]
ld hl, PartyMon1Item
ld bc, PARTYMON_STRUCT_LENGTH
call AddNTimes
pop bc
ld a, [hl]
and a
ret z
push hl
push bc
ld d, a
farcall ItemIsMail
pop bc
pop hl
jr c, .mail
ld a, SPRITE_ANIM_FRAMESET_03
jr .okay
.mail
ld a, SPRITE_ANIM_FRAMESET_02
.okay
ld hl, SPRITEANIMSTRUCT_FRAMESET_ID
add hl, bc
ld [hl], a
ret
LoadNamingScreenMonIcon:
push hl
push de
push bc
;ld hl, TempMonDVs ; this will not work for us. SHINYFAIL
call SetMenuMonIconColor
ld a, [wd265]
ld [CurIcon], a
xor a
call GetIconGFX
depixel 4, 4, 4, 0
ld a, SPRITE_ANIM_INDEX_00
call InitSpriteAnimStruct
ld hl, SPRITEANIMSTRUCT_ANIM_SEQ_ID
add hl, bc
ld [hl], SPRITE_ANIM_SEQ_NULL
pop bc
pop de
pop hl
ret
LoadMoveMenuMonIcon:
push hl
push de
push bc
;ld a, MON_DVS ; this will not work for us. SHINYFAIL
call GetPartyParamLocation
call SetMenuMonIconColor
ld a, [wd265]
ld [CurIcon], a
xor a
call GetIconGFX
lb de, 3 * 8 + 2, 4 * 8 + 4
ld a, SPRITE_ANIM_INDEX_00
call InitSpriteAnimStruct
ld hl, SPRITEANIMSTRUCT_ANIM_SEQ_ID
add hl, bc
ld [hl], SPRITE_ANIM_SEQ_NULL
pop bc
pop de
pop hl
ret
LoadTradeAnimationMonIcon:
push hl
push de
push bc
call SetMenuMonIconColor_NoShiny
ld a, [wd265]
ld [CurIcon], a
ld a, $62
ld [wCurIconTile], a
call GetMemIconGFX
pop bc
pop de
pop hl
ret
InitPartyMenuIcon: ; 8e908 (23:6908)
ld a, [wCurIconTile]
push af
ld a, [hObjectStructIndexBuffer]
ld hl, PartySpecies
ld e, a
ld d, $0
add hl, de
ld a, [hl]
ld [CurIcon], a
call GetMemIconGFX
ld a, [hObjectStructIndexBuffer]
; y coord
rept 4
add a
endr
add $1c
ld d, a
; x coord
ld e, $10
; type is partymon icon
ld a, SPRITE_ANIM_INDEX_00
call InitSpriteAnimStruct
pop af
ld hl, SPRITEANIMSTRUCT_TILE_ID
add hl, bc
ld [hl], a
ret
SetPartyMonIconAnimSpeed: ; 8e936 (23:6936)
push bc
ld a, [hObjectStructIndexBuffer]
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_0D
add hl, bc
ld [hl], a
ret
.getspeed ; 8e94c (23:694c)
farcall PlacePartymonHPBar
call GetHPPal
ld e, d
ld d, 0
ld hl, .speeds
add hl, de
ld b, [hl]
ret
; 8e95e (23:695e)
.speeds ; 8e95e
db $00, $40, $80
; 8e961
PokegearFlyMap_GetMonIcon: ; 8e9ac
; Load species icon into VRAM at tile a
push de
ld a, [wd265]
ld [CurIcon], a
pop de
ld a, e
jp GetIconGFX
; 8e9bc
FlyFunction_GetMonIcon: ; 8e9bc (23:69bc)
push de
ld a, [wd265]
ld [CurIcon], a
pop de
ld a, e
jp GetIcon_a
; 8e9cc (23:69cc)
GetMemIconGFX: ; 8e9db (23:69db)
ld a, [wCurIconTile]
GetIconGFX: ; 8e9de
call GetIcon_a
ld de, $80 ; 8 tiles
add hl, de
ld de, HeldItemIcons
lb bc, BANK(HeldItemIcons), 2
call Request2bpp
ld a, [wCurIconTile]
add 10
ld [wCurIconTile], a
ret
HeldItemIcons:
INCBIN "gfx/icon/mail.2bpp"
INCBIN "gfx/icon/item.2bpp"
; 8ea17
GetIcon_a: ; 8ea1b
; Load icon graphics into VRAM starting from tile a.
ld l, a
ld h, 0
GetIcon: ; 8ea1e
; 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, [CurIcon]
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
call GetMonIconBank
call Request2bpp
pop hl
ret
; 8ea3f
; routine by com3tiin
; http://www.pokecommunity.com/showthread.php?t=338470
GetMonIconBank:
ld a, [CurIcon]
cp a, $80
lb bc, BANK(Icons1), 8
ret c
lb bc, BANK(Icons2), 8
ret
FreezeMonIcons: ; 8ea4a
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_02
.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
; 8ea71
UnfreezeMonIcons: ; 8ea71
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_01
pop hl
.next
ld bc, $10
add hl, bc
dec e
jr nz, .loop
ret
; 8ea8c (23:6a8c)
HoldSwitchmonIcon: ; 8ea8c
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_03
jr .join_back
.is_switchmon
ld a, SPRITE_ANIM_SEQ_02
.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