diff options
Diffstat (limited to 'engine/sprites.asm')
-rwxr-xr-x | engine/sprites.asm | 527 |
1 files changed, 42 insertions, 485 deletions
diff --git a/engine/sprites.asm b/engine/sprites.asm index e71fc5686..c00d1e9fc 100755 --- a/engine/sprites.asm +++ b/engine/sprites.asm @@ -114,6 +114,7 @@ DoNextFrameForFirst16Sprites: ; 8cfa8 (23:4fa8) ret InitSpriteAnimStruct:: ; 8cfd6 +; Initialize animation a at pixel x=e, y=d ; Find if there's any room in the wSpriteAnimationStructs array, which is 10x16 push de push af @@ -159,7 +160,7 @@ endr ld e, l ld d, h ; Set hl to the first field (field 0) in the current structure. - ld hl, 0 + ld hl, SPRITEANIMSTRUCT_INDEX add hl, bc ; Load the index. ld a, [wc3b4] @@ -174,11 +175,11 @@ 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 LookUpInwSpriteAnimDict + call GetSpriteAnimVTile ld [hli], a pop de -; Set hl to field 4. Kinda pointless, because we're presumably already here. - ld hl, $4 +; Set hl to field 4 (X coordinate). Kinda pointless, because we're presumably already here. + ld hl, SPRITEANIMSTRUCT_XCOORD add hl, bc ; Load the original value of de into here. ld a, e @@ -203,15 +204,15 @@ rept 4 ld [hli], a endr ld [hl], a -; back up the address of the first field to wc3b8 +; back up the address of the first field to wSpriteAnimAddrBackup ld a, c - ld [wc3b8], a + ld [wSpriteAnimAddrBackup], a ld a, b - ld [wc3b8 + 1], a + ld [wSpriteAnimAddrBackup + 1], a ret ; 8d036 -Function8d036: ; 8d036 +DeinitializeSprite: ; 8d036 ; Clear the index field of the struct in bc. ld hl, SPRITEANIMSTRUCT_INDEX add hl, bc @@ -220,7 +221,7 @@ Function8d036: ; 8d036 ; 8d03d -Function8d03d: ; 8d03d (23:503d) +DeinitializeAllSprites: ; 8d03d (23:503d) ; Clear the index field of every struct in the wSpriteAnimationStructs array. ld hl, wSpriteAnimationStructs ld bc, $10 @@ -235,7 +236,7 @@ Function8d03d: ; 8d03d (23:503d) Function8d04c: ; 8d04c - call Function8d0ec ; init WRAM + call InitSpriteAnimBuffer ; init WRAM call Function8d132 ; read from a memory array cp -3 jr z, .done @@ -259,7 +260,7 @@ Function8d04c: ; 8d04c ld c, a ; number of objects .loop ; first byte: y (px) - ; [de] = [wCurrAnimYCoord] + [wCurrAnimYOffset] + [wGlobalAnimYOffset] + Function8d0be([hl]) + ; [de] = [wCurrAnimYCoord] + [wCurrAnimYOffset] + [wGlobalAnimYOffset] + AddOrSubtractY([hl]) ld a, [wCurrAnimYCoord] ld b, a ld a, [wCurrAnimYOffset] @@ -268,13 +269,13 @@ Function8d04c: ; 8d04c ld a, [wGlobalAnimYOffset] add b ld b, a - call Function8d0be + call AddOrSubtractY add b ld [de], a inc hl inc de ; second byte: x (px) - ; [de] = [wCurrAnimXCoord] + [wCurrAnimXOffset] + [wGlobalAnimXOffset] + Function8d0ce([hl]) + ; [de] = [wCurrAnimXCoord] + [wCurrAnimXOffset] + [wGlobalAnimXOffset] + AddOrSubtractX([hl]) ld a, [wCurrAnimXCoord] ld b, a ld a, [wCurrAnimXOffset] @@ -283,7 +284,7 @@ Function8d04c: ; 8d04c ld a, [wGlobalAnimXOffset] add b ld b, a - call Function8d0ce + call AddOrSubtractX add b ld [de], a inc hl @@ -311,7 +312,7 @@ Function8d04c: ; 8d04c jr .done .delete - call Function8d036 + call DeinitializeSprite .done and a @@ -323,12 +324,13 @@ Function8d04c: ; 8d04c ret ; 8d0be -Function8d0be: ; 8d0be +AddOrSubtractY: ; 8d0be push hl ld a, [hl] - ld hl, wc3b8 + ld hl, wCurrSpriteAddSubFlags bit 6, [hl] jr z, .ok + ; 8 - a add $8 xor $ff inc a @@ -338,12 +340,13 @@ Function8d0be: ; 8d0be ret ; 8d0ce -Function8d0ce: ; 8d0ce +AddOrSubtractX: ; 8d0ce push hl ld a, [hl] - ld hl, wc3b8 + ld hl, wCurrSpriteAddSubFlags bit 5, [hl] jr z, .ok + ; 8 - a add $8 xor $ff inc a @@ -354,7 +357,7 @@ Function8d0ce: ; 8d0ce ; 8d0de Function8d0de: ; 8d0de - ld a, [wc3b8] + ld a, [wCurrSpriteAddSubFlags] ld b, a ld a, [hl] xor b @@ -366,9 +369,9 @@ Function8d0de: ; 8d0de ret ; 8d0ec -Function8d0ec: ; 8d0ec +InitSpriteAnimBuffer: ; 8d0ec xor a - ld [wc3b8], a + ld [wCurrSpriteAddSubFlags], a ld hl, SPRITEANIMSTRUCT_TILE_ID add hl, bc ld a, [hli] @@ -384,8 +387,9 @@ Function8d0ec: ; 8d0ec ret ; 8d109 -LookUpInwSpriteAnimDict: ; 8d109 +GetSpriteAnimVTile: ; 8d109 ; a = wSpriteAnimDict[a] if a in wSpriteAnimDict else 0 +; VTiles offset push hl push bc ld hl, wSpriteAnimDict @@ -452,7 +456,7 @@ Function8d132: ; 8d132 ld a, [hl] push hl and $3f - ld hl, SPRITEANIMSTRUCT_09 + ld hl, SPRITEANIMSTRUCT_DURATIONOFFSET add hl, bc add [hl] ld hl, SPRITEANIMSTRUCT_DURATION @@ -463,7 +467,7 @@ Function8d132: ; 8d132 ld a, [hl] and $c0 srl a - ld [wc3b8], a + ld [wCurrSpriteAddSubFlags], a pop af ret @@ -552,6 +556,7 @@ endr ; 8d1c4 Unknown_8d1c4: ; 8d1c4 + ; ??, sequence, tile db $01, SPRITE_ANIM_SEQ_01, $00 ; 00 db $07, SPRITE_ANIM_SEQ_04, $00 ; 01 db $08, SPRITE_ANIM_SEQ_05, $05 ; 02 @@ -562,7 +567,7 @@ Unknown_8d1c4: ; 8d1c4 db $0e, SPRITE_ANIM_SEQ_0A, $07 ; 07 db $10, SPRITE_ANIM_SEQ_0B, $07 ; 08 db $08, SPRITE_ANIM_SEQ_0C, $05 ; 09 - db $11, SPRITE_ANIM_SEQ_00, $00 ; 0a + db $11, SPRITE_ANIM_SEQ_00, $00 ; 0a flying sprite db $12, SPRITE_ANIM_SEQ_0D, $08 ; 0b db $12, SPRITE_ANIM_SEQ_0E, $08 ; 0c db $12, SPRITE_ANIM_SEQ_0F, $08 ; 0d @@ -572,11 +577,11 @@ Unknown_8d1c4: ; 8d1c4 db $17, SPRITE_ANIM_SEQ_12, $00 ; 11 db $18, SPRITE_ANIM_SEQ_12, $00 ; 12 db $19, SPRITE_ANIM_SEQ_13, $00 ; 13 - db $1a, SPRITE_ANIM_SEQ_14, $00 ; 14 + db $1a, SPRITE_ANIM_SEQ_14, $00 ; 14 radio tuning knob db $1b, SPRITE_ANIM_SEQ_00, $00 ; 15 db $1d, SPRITE_ANIM_SEQ_15, $00 ; 16 db $1e, SPRITE_ANIM_SEQ_00, $00 ; 17 - db $1d, SPRITE_ANIM_SEQ_17, $00 ; 18 + db $1d, SPRITE_ANIM_SEQ_17, $00 ; 18 flying leaves db $1f, SPRITE_ANIM_SEQ_00, $00 ; 19 db $24, SPRITE_ANIM_SEQ_19, $00 ; 1a db $25, SPRITE_ANIM_SEQ_00, $00 ; 1b @@ -605,26 +610,26 @@ INCLUDE "data/sprite_engine.asm" ; Unknown_8d6e6 ; Unknown_8d94d -ApplyXOffset: ; 8e72a +ApplySineWaveX: ; 8e72a add $10 -ApplyYOffset: ; 8e72c +ApplySineWaveY: ; 8e72c and $3f cp $20 - jr nc, .xflip - call Function8e741 + jr nc, .flip + call .ApplyOffset ld a, h ret -.xflip +.flip and $1f - call Function8e741 + call .ApplyOffset ld a, h xor $ff ; cpl inc a ret ; 8e741 -Function8e741: ; 8e741 +.ApplyOffset: ; 8e741 ld e, a ld a, d ld d, 0 @@ -696,7 +701,7 @@ endr push de push hl - call ApplyYOffset + call ApplySineWaveY pop hl pop de add 13 * 8 @@ -705,7 +710,7 @@ endr pop af push de push hl - call ApplyXOffset + call ApplySineWaveX pop hl pop de add 10 * 8 + 4 @@ -743,451 +748,3 @@ ClearSpriteAnims2: ; 8e814 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" |