diff --git a/main.asm b/main.asm index 897c90f..d85466b 100644 --- a/main.asm +++ b/main.asm @@ -69,7 +69,7 @@ WaitVBlank: ld bc, 160 ld d, 0 call Memset - + ; Turn the LCD on ld a, LCDCF_ON | LCDCF_BGON | LCDCF_OBJON | LCDCF_OBJ8 ld [rLCDC], a @@ -88,6 +88,7 @@ WaitVBlank: ldh [rIF], a ; Enable interrupts ei + jp Main Main:: call ResetShadowOAM @@ -197,6 +198,21 @@ HandleInput:: ret HandleRender:: + ; Calculate current frame for player + ld a, [hFrameCounter] + and a, %0000_0111 + cp a, 0 + jr nz, .skipAnim + + ld a, [wMetaspritePosition.frame] + inc a + cp PlayerMetasprite.framesEnd - PlayerMetasprite.framesStart + jr nz, .skipAnimReset + ld a, 0 +.skipAnimReset + ld [wMetaspritePosition.frame], a +.skipAnim + ; Render the player ; load de ld a, [wMetaspritePosition.x] @@ -216,7 +232,23 @@ HandleRender:: adc a, b ld b, a - ld hl, CatMetasprite + ; Add frameOffset + ld hl, PlayerMetasprite.framesStart + ld a, [wMetaspritePosition.frame] + add a, l + ld l, a + jr nc, .noCarry1 + inc h +.noCarry1 + ld a, [hl] + + ld hl, PlayerMetasprite + add a, l + ld l, a + jr nc, .noCarry2 + inc h +.noCarry2 + call RenderMetasprite ; Render the shadow @@ -379,11 +411,13 @@ VBlankInterrupt: SECTION "VBlank Handler", ROM0 VBlankHandler: - ldh a, [hFrameCounter] - ld a, HIGH(wShadowOAM) call hOAMDMA + ldh a, [hFrameCounter] + inc a + ldh [hFrameCounter], a + ; Reset registers to orignal state pop hl pop de @@ -407,68 +441,42 @@ Tilemap: INCBIN "tileset.tilemap" TilemapEnd: -SECTION "Level data", ROM0 - db $03 ; width - db $03 ; height - - ; Each byte stores whether it is solid or not - - ; Z = 1 - db $01 - db $01 - db $01 - - db $01 - db $01 - db $01 - - db $01 - db $01 - db $00 - - ; Z = 2 - db $01 - db $01 - db $01 - - db $01 - db $01 - db $01 - - db $00 - db $00 - db $00 - - ; Z = 3 - db $01 - db $00 - db $00 - - db $00 - db $00 - db $00 - - db $00 - db $00 - db $00 - SECTION "Graphics", ROM0 GfxCat: INCBIN "sprites.2bpp" .end:: -CatMetasprite: - db 0, 0, 2, 0 - db 8, 0, 6, 0 - db 128 - ShadowMetasprite: db 12, 0, 1, 0 db 128 +PlayerMetasprite: +.vertWalk1: + db 0, 0, 2, 0 + db 8, 0, 6, 0 + db 128 +.vertWalk2: + db 0, 0, 2, 0 + db 8, 0, 7, 0 + db 128 +.vertWalk3: + db 0, 0, 2, 0 + db 8, 0, 6, 0 + db 128 +.vertWalk4: + db 0, 0, 2, 0 + db 8, 0, 8, 0 + db 128 +.framesStart + db .vertWalk1 - PlayerMetasprite + db .vertWalk2 - PlayerMetasprite + db .vertWalk3 - PlayerMetasprite + db .vertWalk4 - PlayerMetasprite +.framesEnd + SECTION "Position Vars", WRAM0 - wMetaspriteBegin: +wMetaspriteBegin: ; Q12.4 fixed-point X posiition wMetaspritePosition:: .x: @@ -477,6 +485,8 @@ wMetaspritePosition:: dw .z: dw +.frame: + db ; Q4.4 fixed-point velocity wMetaspriteVelocity:: diff --git a/sprites.png b/sprites.png index 635e506..f6ac8f1 100644 Binary files a/sprites.png and b/sprites.png differ