diff options
Diffstat (limited to 'engine/sprites.asm')
-rwxr-xr-x | engine/sprites.asm | 545 |
1 files changed, 541 insertions, 4 deletions
diff --git a/engine/sprites.asm b/engine/sprites.asm index b8b4b2a47..bf82659e8 100755 --- a/engine/sprites.asm +++ b/engine/sprites.asm @@ -174,7 +174,7 @@ endr ; Look up the third field from the table in the wc300 array (10x2). ; Take the value and load it in ld a, [de] - call LookUpInwDict_c300 + call LookUpInwSpriteAnimDict ld [hli], a pop de ; Set hl to field 4. Kinda pointless, because we're presumably already here. @@ -374,11 +374,11 @@ Function8d0ec: ; 8d0ec ret ; 8d109 -LookUpInwDict_c300: ; 8d109 -; a = wDict_c300[a] if a in wDict_c300 else 0 +LookUpInwSpriteAnimDict: ; 8d109 +; a = wSpriteAnimDict[a] if a in wSpriteAnimDict else 0 push hl push bc - ld hl, wDict_c300 + ld hl, wSpriteAnimDict ld b, a ld c, 10 .loop @@ -2885,3 +2885,540 @@ endr Unknown_8e75d: ; 8e75d sine_wave $100 + + +Function8e79d: ; 8e79d + ld a, [hSGB] + ld de, GFX_8e7f4 + and a + jr z, .asm_8e7a8 + ld de, GFX_8e804 + +.asm_8e7a8 + ld hl, VTiles0 + lb bc, BANK(GFX_8e7f4), 1 + call Request2bpp + ld c, $8 + ld d, $0 +.asm_8e7b5 + push bc + call Function8e7c6 + call DelayFrame + pop bc +rept 2 + inc d +endr + dec c + jr nz, .asm_8e7b5 + call ClearSprites + ret +; 8e7c6 + +Function8e7c6: ; 8e7c6 + ld hl, Sprites + ld c, $8 +.asm_8e7cb + ld a, c + and a + ret z + dec c + ld a, c + sla a + sla a + sla a + push af + push de + push hl + call Function8e72c + pop hl + pop de + add $68 + ld [hli], a + pop af + push de + push hl + call Function8e72a + pop hl + pop de + add $54 + ld [hli], a + ld a, $0 + ld [hli], a + ld a, $6 + ld [hli], a + jr .asm_8e7cb +; 8e7f4 + +GFX_8e7f4: ; 8e7f4 +INCBIN "gfx/unknown/08e7f4.2bpp" +GFX_8e804: ; 8e804 +INCBIN "gfx/unknown/08e804.2bpp" + +ClearSpriteAnims: ; 8e814 + push hl + push de + push bc + push af + ld hl, wSpriteAnimDict + ld bc, wSpriteAnimsEnd - wSpriteAnimDict +.loop + ld [hl], $0 + inc hl + dec bc + ld a, c + or b + jr nz, .loop + pop af + pop bc + pop de + pop hl + ret +; 8e82b + +Function8e82b: ; 8e82b + 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 +; 8e83f + +Function8e83f: ; 8e83f + push hl + push de + push bc + call Function8e849 + pop bc + pop de + pop hl + ret +; 8e849 + +Function8e849: ; 8e849 + ld d, 0 + ld hl, Jumptable_8e854 +rept 2 + add hl, de +endr + ld a, [hli] + ld h, [hl] + ld l, a + jp [hl] +; 8e854 + + +Jumptable_8e854: ; 8e854 (23:6854) + dw Function8e8d5 + dw Function8e961 + dw Function8e97d + dw Function8e99a + dw Function8e898 + dw Function8e8b1 + dw Function8e862 + + +Function8e862: ; 8e862 (23:6862) + call Function8e908 + call Function8e86c + call Function8e936 + ret + +Function8e86c: ; 8e86c (23:686c) + push bc + ld a, [hObjectStructIndexBuffer] + ld hl, PartyMon1Item + ld bc, PARTYMON_STRUCT_LENGTH + call AddNTimes + pop bc + ld a, [hl] + and a + jr z, .asm_8e890 + push hl + push bc + ld d, a + callab ItemIsMail + pop bc + pop hl + jr c, .asm_8e88e + ld a, $6 + jr .asm_8e892 +.asm_8e88e + ld a, $5 +.asm_8e890 + ld a, $4 +.asm_8e892 + ld hl, $1 + add hl, bc + ld [hl], a + ret + +Function8e898: ; 8e898 (23:6898) + call Function8e8d5 + ld hl, $2 + add hl, bc + ld a, $0 + ld [hl], a + ld hl, $4 + add hl, bc + ld a, $48 + ld [hl], a + ld hl, $5 + add hl, bc + ld a, $48 + ld [hl], a + ret + +Function8e8b1: ; 8e8b1 (23:68b1) + call Function8e908 + call Function8e936 + ld hl, $2 + add hl, bc + ld a, $0 + ld [hl], a + ld hl, $4 + add hl, bc + ld a, $18 + ld [hl], a + ld hl, $5 + add hl, bc + ld a, $60 + ld [hl], a + ld a, c + ld [wc608], a + ld a, b + ld [wc608 + 1], a + ret + +Function8e8d5: ; 8e8d5 (23:68d5) + call Function8e908 + call Function8e8df + call Function8e936 + ret + +Function8e8df: ; 8e8df (23:68df) + push bc + ld a, [hObjectStructIndexBuffer] + ld hl, PartyMon1Item + ld bc, $30 + call AddNTimes + pop bc + ld a, [hl] + and a + ret z + push hl + push bc + ld d, a + callab ItemIsMail + pop bc + pop hl + jr c, .asm_8e900 + ld a, $3 + jr .asm_8e902 +.asm_8e900 + ld a, $2 +.asm_8e902 + ld hl, $1 + add hl, bc + ld [hl], a + ret + +Function8e908: ; 8e908 (23:6908) + ld a, [wc3b7] + push af + ld a, [hObjectStructIndexBuffer] + ld hl, PartySpecies + ld e, a + ld d, $0 + add hl, de + ld a, [hl] + call ReadMonMenuIcon + ld [CurIcon], a + call Function8e9db + 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, $3 + add hl, bc + ld [hl], a + ret + +Function8e936: ; 8e936 (23:6936) + push bc + ld a, [hObjectStructIndexBuffer] + ld b, a + call Function8e94c + ld a, b + pop bc + ld hl, $9 + add hl, bc + ld [hl], a + rlca + rlca + ld hl, $d + add hl, bc + ld [hl], a + ret + +Function8e94c: ; 8e94c (23:694c) + callba PlacePartymonHPBar + call GetHPPal + ld e, d + ld d, 0 + ld hl, Unknown_8e95e + add hl, de + ld b, [hl] + ret +; 8e95e (23:695e) + +Unknown_8e95e: ; 8e95e + db $00, $40, $80 +; 8e961 + +Function8e961: ; 8e961 (23:6961) + ld a, [wd265] + call ReadMonMenuIcon + ld [CurIcon], a + xor a + call GetIconGFX + lb de, $24, $20 + ld a, SPRITE_ANIM_INDEX_00 + call InitSpriteAnimStruct + ld hl, $2 + add hl, bc + ld [hl], $0 + ret + +Function8e97d: ; 8e97d (23:697d) + ld a, [wd265] + call ReadMonMenuIcon + ld [CurIcon], a + xor a + call GetIconGFX + ld d, $1a + ld e, $24 + ld a, SPRITE_ANIM_INDEX_00 + call InitSpriteAnimStruct + ld hl, $2 + add hl, bc + ld [hl], $0 + ret + +Function8e99a: ; 8e99a (23:699a) + ld a, [wd265] + call ReadMonMenuIcon + ld [CurIcon], a + ld a, $62 + ld [wc3b7], a + call Function8e9db + ret + +GetSpeciesIcon: ; 8e9ac +; Load species icon into VRAM at tile a + push de + ld a, [wd265] + call ReadMonMenuIcon + ld [CurIcon], a + pop de + ld a, e + call GetIconGFX + ret +; 8e9bc + + +Function8e9bc: ; 8e9bc (23:69bc) + push de + ld a, [wd265] + call ReadMonMenuIcon + ld [CurIcon], a + pop de + ld a, e + call GetIcon_a + ret +; 8e9cc (23:69cc) + +Function8e9cc: ; 8e9cc + push de + ld a, [wd265] + call ReadMonMenuIcon + ld [CurIcon], a + pop de + call GetIcon_de + ret +; 8e9db + +Function8e9db: ; 8e9db (23:69db) + ld a, [wc3b7] + +GetIconGFX: ; 8e9de + call GetIcon_a + ld de, $80 ; 8 tiles + add hl, de + ld de, HeldItemIcons + lb bc, BANK(HeldItemIcons), 2 + call GetGFXUnlessMobile + ld a, [wc3b7] + add 10 + ld [wc3b7], a + ret + +HeldItemIcons: +INCBIN "gfx/icon/mail.2bpp" +INCBIN "gfx/icon/item.2bpp" +; 8ea17 + +GetIcon_de: ; 8ea17 +; Load icon graphics into VRAM starting from tile de. + ld l, e + ld h, d + jr GetIcon + +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 + + lb bc, BANK(Icons), 8 + call GetGFXUnlessMobile + + pop hl + ret +; 8ea3f + +GetGFXUnlessMobile: ; 8ea3f + ld a, [wLinkMode] + cp LINK_MOBILE + jp nz, Request2bpp + jp Get2bpp_2 +; 8ea4a + +Function8ea4a: ; 8ea4a + ld hl, wSpriteAnimationStructs + ld e, $6 + ld a, [MenuSelection2] + ld d, a +.loop + ld a, [hl] + and a + jr z, .next + cp d + jr z, .loadwithtwo + ld a, $0 + jr .ok + +.loadwithtwo + ld a, $2 + +.ok + push hl + ld c, l + ld b, h + ld hl, $2 + add hl, bc + ld [hl], a + pop hl + +.next + ld bc, $10 + add hl, bc + dec e + jr nz, .loop + ret +; 8ea71 + +Function8ea71: ; 8ea71 + ld hl, wSpriteAnimationStructs + ld e, $6 +.loop + ld a, [hl] + and a + jr z, .zero + push hl + ld c, l + ld b, h + ld hl, $2 + add hl, bc + ld [hl], $1 + pop hl +.zero + ld bc, $10 + add hl, bc + dec e + jr nz, .loop + ret +; 8ea8c (23:6a8c) + +Function8ea8c: ; 8ea8c + ld hl, wSpriteAnimationStructs + ld e, $6 + ld a, [wd0e3] + ld d, a +.asm_8ea95 + ld a, [hl] + and a + jr z, .asm_8eaab + cp d + jr z, .asm_8eaa0 + ld a, $3 + jr .asm_8eaa2 +.asm_8eaa0 + ld a, $2 +.asm_8eaa2 + push hl + ld c, l + ld b, h + ld hl, $2 + add hl, bc + ld [hl], a + pop hl +.asm_8eaab + ld bc, $10 + add hl, bc + dec e + jr nz, .asm_8ea95 + ret + +INCLUDE "menu/mon_icons.asm" |