diff options
Diffstat (limited to 'engine')
-rwxr-xr-x | engine/gfx/sprite_anims.asm | 46 | ||||
-rwxr-xr-x | engine/gfx/sprites.asm | 125 |
2 files changed, 159 insertions, 12 deletions
diff --git a/engine/gfx/sprite_anims.asm b/engine/gfx/sprite_anims.asm index 285c3303..fbd57abf 100755 --- a/engine/gfx/sprite_anims.asm +++ b/engine/gfx/sprite_anims.asm @@ -711,6 +711,7 @@ DoAnimFrame: call .AnonymousJumptable jp hl +IF DEF(_GOLD) ; anonymous jumptable dw .Function8d835 dw .Function8d84c @@ -735,7 +736,6 @@ DoAnimFrame: ld a, [hl] cp $a4 jr nc, .asm_5881 - ld hl, $0d add hl, bc add $4 @@ -766,13 +766,57 @@ DoAnimFrame: call DeinitializeSprite ret +ELIF DEF(_SILVER) +; anonymous jumptable + dw .Function8d835 + dw .Function8d856 + +.Function8d835: + ld a, [wIntroSceneTimer] + and $30 + swap a + add $3 + ld d, a + ld hl, $0c + add hl, bc + ld a, [wIntroSceneTimer] + and $30 + swap a + add $07 + add [hl] + ld [hl], a + call .Sprites_Sine + ld hl, $07 + add hl, bc + ld [hl], a +.Function8d856: + ld hl, $04 + add hl, bc + ld a, [hl] + cp $a4 + jr nc, .asm_5863 + add $4 + ld [hl], a + ret + +.asm_5863 + call DeinitializeSprite + ret +ENDC + .Function8d885: ld hl, $0c add hl, bc ld a, [hl] +IF DEF(_GOLD) inc a ld [hl], a ld d, 2 +ELIF DEF(_SILVER) + dec a + ld [hl], a + ld d, 8 +ENDC call .Sprites_Sine ld hl, $07 add hl, bc diff --git a/engine/gfx/sprites.asm b/engine/gfx/sprites.asm index cb8aea53..ef352606 100755 --- a/engine/gfx/sprites.asm +++ b/engine/gfx/sprites.asm @@ -321,7 +321,7 @@ AddOrSubtractX: bit OAM_X_FLIP, [hl] jr z, .ok ; -8 - a - add $8 + add 8 xor $ff inc a @@ -486,9 +486,10 @@ GetSpriteAnimFrame: ret GetFrameOAMPointer: +; Load OAM data pointer ld e, a ld d, 0 - ld hl, $5dbd + ld hl, SpriteAnimOAMData add hl, de add hl, de add hl, de @@ -497,10 +498,10 @@ GetFrameOAMPointer: Unreferenced_BrokenGetStdGraphics: push hl ld l, a - ld h, $00 + ld h, 0 add hl, hl add hl, hl - ld de, $6666 + ld de, BrokenStdGFXPointers ; broken 2bpp pointers add hl, de ld c, [hl] inc hl @@ -519,18 +520,120 @@ INCLUDE "data/sprite_anims/sequences.asm" INCLUDE "engine/gfx/sprite_anims.asm" -SpriteAnimFrameData: - dr $8dbfe, $8e68a +INCLUDE "data/sprite_anims/framesets.asm" + +INCLUDE "data/sprite_anims/oam.asm" + +BrokenStdGFXPointers: + ; tile count, bank, pointer + ; (all pointers were dummied out to .deleted) + dbbw 128, $01, .deleted + dbbw 128, $01, .deleted + dbbw 128, $01, .deleted + dbbw 128, $01, .deleted + dbbw 16, $37, .deleted + dbbw 16, $11, .deleted + dbbw 16, $39, .deleted + dbbw 16, $24, .deleted + dbbw 16, $21, .deleted + +.deleted Sprites_Cosine: ; a = d * cos(a * pi/32) add %010000 ; cos(x) = sin(x + pi/2) ; fallthrough Sprites_Sine: - dr $8e68c, $8e6fd +; a = d * sin(a * pi/32) + calc_sine_wave .SineWave + +.SineWave: + sine_table 256 + +AnimateEndOfExpBar: + ldh a, [hSGB] + ld de, EndOfExpBarGFX + and a + jr z, .load + ld de, SGBEndOfExpBarGFX + +.load + ld hl, vTiles0 tile $00 + lb bc, BANK(EndOfExpBarGFX), 1 + call Request2bpp + ld c, 8 + ld d, 0 +.loop + push bc + call .AnimateFrame + call DelayFrame + pop bc + inc d + inc d + dec c + jr nz, .loop + call ClearSprites + ret + +.AnimateFrame: + ld hl, wVirtualOAMSprite00 + ld c, 8 ; number of animated circles +.anim_loop + ld a, c + and a + ret z + dec c + ld a, c +; multiply by 8 + sla a + sla a + sla a + push af + + push de + push hl + call Sprites_Sine + pop hl + pop de + add 13 * TILE_WIDTH + ld [hli], a ; y + + pop af + push de + push hl + call Sprites_Cosine + pop hl + pop de + add 10 * TILE_WIDTH + 4 + ld [hli], a ; x + + ld a, $0 + ld [hli], a ; tile id + ld a, PAL_BATTLE_OB_BLUE + ld [hli], a ; attributes + jr .anim_loop -AnimateEndOfExpBar:: - dr $8e6fd, $8e774 +EndOfExpBarGFX: +INCBIN "gfx/battle/expbarend.2bpp" +SGBEndOfExpBarGFX: +INCBIN "gfx/battle/expbarend_sgb.2bpp" -ClearSpriteAnims2:: - dr $8e774, $8e78b +ClearSpriteAnims2: + 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 |