diff --git a/.gitignore b/.gitignore index 89efb0f..65ba2cf 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ build *.swp +*.swo diff --git a/src/actor.asm b/src/actor.asm index d25d022..4d71f1d 100644 --- a/src/actor.asm +++ b/src/actor.asm @@ -7,7 +7,6 @@ SECTION "Actor", ROM0 ActorROM:: .structs: dw ActorIdle -.tiles: ActorIdle:: db 60 db 15 diff --git a/src/animation.asm b/src/animation.asm index ff75495..9683e09 100644 --- a/src/animation.asm +++ b/src/animation.asm @@ -15,20 +15,20 @@ SECTION "Actor STructs", WRAM0 dstruct Actor, Player -SECTION "Animation Variables", WRAM0 +SECTION "Animation Variables", HRAM -wCameraX: dw -wCameraY: dw +hCameraX: dw +hCameraY: dw -wWorkingX: dw -wWorkingY: dw -wWorkingScreenX: db -wWorkingScreenY: db -wWorkingState: db -wWorkingCounter: db -wWorkingData: dw -wWorkingTile: db -wWorkingEnd: +hWorkingX: dw +hWorkingY: dw +hWorkingScreenX: db +hWorkingScreenY: db +hWorkingState: db +hWorkingCounter: db +hWorkingData: dw +hWorkingTile: db +hWorkingEnd: SECTION "Animations Subs", ROM0 @@ -48,27 +48,27 @@ RenderActor:: ; @input: hl <- Player ; @input: de <- ShadowOAM place ld a, [hli] ; a <- YPos - ld [wWorkingScreenY], a + ldh [hWorkingScreenY], a ld a, [hli] ; a <- XPos - ld [wWorkingScreenX], a + ldh [hWorkingScreenX], a push hl ld a, [hli] ; a <- GFXCounter - ld [wWorkingCounter], a + ldh [hWorkingCounter], a ld a, [hli] ; a <- GFXState - ld [wWorkingState], a + ldh [hWorkingState], a ld a, [hli] ; a <- GFXData(Low) - ld [wWorkingData+1], a + ldh [hWorkingData+1], a ld a, [hli] ; a <- GFXData (High) - ld [wWorkingData], a + ldh [hWorkingData], a ld a, [hl] ; a <- TileData - ld [wWorkingTile], a + ldh [hWorkingTile], a ; fin loading data - ld a, [wWorkingData] + ld a, [hWorkingData] ld l, a - ld a, [wWorkingData+1] + ld a, [hWorkingData+1] ld h, a ; add actor struct offset saved in wWorkingState - ld a, [wWorkingState] + ld a, [hWorkingState] rlca ; double state offset because of word length add a, l ld l, a @@ -82,7 +82,7 @@ RenderActor:: ld h, a ld a, [hli] ; a <- state frame limit ld b, a - ld a, [wWorkingCounter] + ld a, [hWorkingCounter] inc a ld c, a ld a, b @@ -93,7 +93,7 @@ RenderActor:: xor a .continueAnimation ; TODO: make counter 0 indexed so doesnt skip first frame - ld [wWorkingCounter], a + ldh [hWorkingCounter], a ld b, h ld c, l pop hl @@ -124,7 +124,7 @@ RenderActor:: ; load Y position, then offset by -16 ld a, [hli] ld c, a - ld a, [wWorkingScreenY] + ld a, [hWorkingScreenY] add c ld c, 16 add c @@ -133,7 +133,7 @@ RenderActor:: ; load X position, then offset by -8 ld a, [hli] ld c, a - ld a, [wWorkingScreenX] + ld a, [hWorkingScreenX] add c ld c, 8 add c @@ -142,7 +142,7 @@ RenderActor:: ; load tile offset, and add to base tile pointer ld a, [hli] ld c, a - ld a, [wWorkingTile] + ld a, [hWorkingTile] add c ld [de], a inc de diff --git a/src/defines.asm b/src/defines.asm index 665352f..28323c3 100644 --- a/src/defines.asm +++ b/src/defines.asm @@ -12,19 +12,8 @@ P1F_DPAD EQU $20 SECTION "ROM Vars", ROM0 -dPlayerWidth: db 2 -dPlayerHeight: db 2 -dPlayerSpriteTiles: db $01, $02, $09, $0A - SECTION "WRAM Vars", WRAM0[$C000] -X: dw -N: dw -ANS: db - -rPlayerX: db -rPlayerY: db - SECTION "HRAM Vars", HRAM hVBlankFlag: db diff --git a/src/entry.asm b/src/entry.asm index 185cd8a..5be7906 100644 --- a/src/entry.asm +++ b/src/entry.asm @@ -25,8 +25,6 @@ Start: ld [rSCY], a ld [rSCX], a ld [rNR52], a - ld a, LCDCF_ON | LCDCF_OBJON | LCDCF_BGON - ld [rLCDC], a call CopyDMARoutine @@ -43,11 +41,14 @@ Start: ld a, LOW(ActorROM) ld [Player_GFXData + 1], a + ld a, LCDCF_ON | LCDCF_OBJON | LCDCF_BGON + ld [rLCDC], a + game_loop: - call Wait_VBlank + call Hide_OAM call Read_Pad call PC_Update - call Clear_OAM + call Wait_VBlank ld de, wShadowOAM ld hl, Player call RenderActor diff --git a/src/misc.asm b/src/misc.asm index 4edbb4e..e2c3a1b 100644 --- a/src/misc.asm +++ b/src/misc.asm @@ -1,102 +1,3 @@ -Player_To_OAM: -; -- first loop -- - ld hl, wShadowOAM - ld a, [dPlayerHeight] - ld b, a - ld d, 16 - ld a, [rPlayerY] - add d ; d has the base Y value (counting offsets) - ld d, a -.fouter - ld a, [dPlayerWidth] - ld c, a ; c is finner counter -.finner - ld a, d - ld [hl], a - ld a, 4 - call .add4hl -; end of finner loop - dec c - jr nz, .finner - ld a, d - ld d, 8 - add d - ld d, a -; end of fouter loop - dec b - jr nz, .fouter -; -- second loop -- - ld hl, wShadowOAM+1 - ld a, [dPlayerHeight] - ld b, a -.souter - ld d, 8 - ld a, [rPlayerX] - add d - ld d, a - ld a, [dPlayerWidth] - ld c, a -.sinner - ld a, d - ld [hl], a - add 8 - ld d, a - ld a, 4 - call .add4hl - dec c - jr nz, .sinner - dec b - jr nz, .souter -; -- third loop -- - ld hl, wShadowOAM+2 - ld de, dPlayerSpriteTiles - ld a, [dPlayerHeight] - ld b, a - ld a, [dPlayerWidth] - ld c, a - xor a -.tloop1 - add b - dec c - jr nz, .tloop1 - ld c, a -.tloop2 - ld a, [de] - ld [hl], a - ld a, 4 - call .add4hl - inc de - dec c - jr nz, .tloop2 -; -- fourth loop -- - ld hl, wShadowOAM+3 - ld a, [dPlayerHeight] - ld b, a - ld a, [dPlayerWidth] - ld c, a - xor a -.lloop1 - add b - dec c - jr nz, .lloop1 - ld c, a -.lloop2 - xor a - ld [hl], a - ld a, 4 - call .add4hl - dec c - jr nz, .lloop2 - ret - -.add4hl: - add a, l ; a = low + old_l - ld l, a ; a = low + old_l = new_l - adc a, h ; a = new_l + old_h + carry - sub l ; a = old_h + carry - ld h, a - ret - PC_Update: ld b, 0 ld c, 0 @@ -146,6 +47,20 @@ Clear_OAM: jr nz, .loop ret +Hide_OAM: + ld hl, wShadowOAM + ld c, wShadowOAMEnd - wShadowOAM +.loop: + xor a + ld [hl], a + ld a, l + or 3 + inc a + ld l, a + dec c + jr nz, .loop + ret + Clear_Map: ld hl, _SCRN0 ld bc, _SCRN0_END - _SCRN0