diff options
author | Astatin <[email protected]> | 2024-08-29 16:14:35 +0900 |
---|---|---|
committer | Astatin <astatin@redacted> | 2024-08-29 16:14:35 +0900 |
commit | 522bde7b7e7d70fc86a5dac2042b7b20e05c197b (patch) | |
tree | 01d3f81170c91debdf0784fa5c6255955730cd80 /map | |
parent | 4a4ff1db8fe026ced0530f8c2531033da43164e6 (diff) |
Fix issues related to VBlank wait in sameboy + Add stairs interactions
Diffstat (limited to 'map')
-rw-r--r-- | map/loading.gbasm | 61 | ||||
-rw-r--r-- | map/objects.gbasm | 77 |
2 files changed, 114 insertions, 24 deletions
diff --git a/map/loading.gbasm b/map/loading.gbasm index bb3410b..a7783c8 100644 --- a/map/loading.gbasm +++ b/map/loading.gbasm @@ -48,17 +48,14 @@ Load_Row: ; (+1/-1 direction in B) LD A, $mem_viewport_x SUB $03 LD D, A + LD A, $mem_moving_animation_step + ADD D + LD D, A LD A, $mem_viewport_x ADD $0D LD E, A - Load_Row.For_X: - LD A, D - CALL =Load_Block - - INC D - LD A, D - CP E - JR NZ, =Load_Row.For_X + LD A, D + CALL =Load_Block POP DE POP BC @@ -90,20 +87,44 @@ Load_Column: ; (+1/-1 direction in B) LD A, $mem_viewport_y ADD $0D LD E, A - Load_Column.For_Y: - LD A, D - CALL =Load_Block - - INC B - LD A, B - CP E - JR NZ, =Load_Column.For_Y + LD A, $mem_moving_animation_step + ADD B + LD B, A + LD A, D + CALL =Load_Block POP DE POP BC POP AF RET +Display_Scrolling_Map: + LD A, $mem_map_loading_flags + BIT 0, A + JR Z, =Display_Scrolling_Map.End + + LD A, $mem_moving_sprite_direction + DEC A + AND $01 + SLA A + DEC A + LD B, A + LD A, $mem_moving_sprite_direction + DEC A + + BIT 1, A + JR NZ, =Display_Scrolling_Map.vertical + + Display_Scrolling_Map.horizontal: + CALL =Load_Column + JP =Display_Scrolling_Map.End + + Display_Scrolling_Map.vertical: + CALL =Load_Row + + Display_Scrolling_Map.End: + RET + Construct_Tile_Address: ; Construct Tile Map address from A and B in DE PUSH AF PUSH BC @@ -197,41 +218,49 @@ Load_Block: ; X in A, Y in B JR Z, =Load_Block.Empty Load_Block.Solid: LD A, C + CALL =VBlank_Wait LD (DE), A LD A, E OR $20 LD E, A LD A, C OR $02 + CALL =VBlank_Wait LD (DE), A INC E LD A, C OR $03 + CALL =VBlank_Wait LD (DE), A LD A, E AND $DF LD E, A LD A, C OR $01 + CALL =VBlank_Wait LD (DE), A JR =Load_Block.End Load_Block.Empty: LD A, $00 + CALL =VBlank_Wait LD (DE), A LD A, E OR $20 LD E, A LD A, $00 + CALL =VBlank_Wait LD (DE), A INC E LD A, $00 + CALL =VBlank_Wait LD (DE), A LD A, E AND $DF LD E, A LD A, $00 + CALL =VBlank_Wait LD (DE), A Load_Block.End: diff --git a/map/objects.gbasm b/map/objects.gbasm index da80118..bfaa903 100644 --- a/map/objects.gbasm +++ b/map/objects.gbasm @@ -45,17 +45,25 @@ Initialize_Objects: RET Stairs_action: - LD A, $00 - LD $mem_bunny_x, A - LD A, $00 - LD $mem_bunny_y, A - CALL =Fix_Bunny_screen - RET + Stairs_action.Wait_VBlank: + LD A, $reg_lcd_status + AND $03 + CP $01 + JR NZ, =Stairs_action.Wait_VBlank + + ; LCDC + XOR A + LD $reg_lcd_controller, A + + JP =New_Dungeon Display_Objects: LD A, $mem_map_loading_flags BIT 0, A JR Z, =Display_Objects.End + LD A, $mem_moving_animation_step + CP $00 + JR NZ, =Display_Objects.End LD HL, $mem_object_list Display_Objects.loop: LD A, (HL+) @@ -63,34 +71,44 @@ Display_Objects: JR Z, =Display_Objects.next LD C, A LD A, (HL+) + ADD $80 LD D, A LD A, $mem_viewport_x - SUB $03 + SUB $83 CP D JR NC, =Display_Objects.next ADD $10 CP D JR C, =Display_Objects.next + LD A, D + SUB $80 + LD D, A LD A, (HL+) + ADD $80 LD B, A LD A, $mem_viewport_y - SUB $03 + SUB $83 CP B JR NC, =Display_Objects.next ADD $10 CP B JR C, =Display_Objects.next + LD A, B + SUB $80 + LD B, A LD A, D CALL =Construct_Tile_Address + CALL =VBlank_Wait LD A, C LD (DE), A INC E INC C + CALL =VBlank_Wait LD A, C LD (DE), A @@ -100,12 +118,14 @@ Display_Objects: XOR $21 LD E, A + CALL =VBlank_Wait LD A, C LD (DE), A INC C INC E + CALL =VBlank_Wait LD A, C LD (DE), A @@ -118,3 +138,44 @@ Display_Objects: JR NZ, =Display_Objects.loop Display_Objects.End: RET + +Object_Interactions_Check: + LD A, $mem_map_loading_flags + BIT 1, A + JR Z, =Object_Interactions_Check.End + LD HL, $mem_object_list + LD A, $mem_bunny_x + LD C, A + LD A, $mem_bunny_y + LD B, A + Object_Interactions_Check.loop: + LD A, (HL+) + CP $00 + JR Z, =Object_Interactions_Check.next + + LD A, (HL+) + CP C + JR NZ, =Object_Interactions_Check.next + + LD A, (HL+) + CP B + JR NZ, =Object_Interactions_Check.next + + LD A, (HL+) + LD D, A + LD A, (HL+) + LD E, A + + PUSH DE + RET + + Object_Interactions_Check.next: + LD A, L + AND $f8 + ADD $08 + LD L, A + CP $80 + JR NZ, =Object_Interactions_Check.loop + + Object_Interactions_Check.End: + RET |