diff options
-rw-r--r-- | bunny.gbasm | 158 | ||||
-rw-r--r-- | definitions.gbasm | 14 | ||||
-rw-r--r-- | entities.gbasm | 249 | ||||
-rw-r--r-- | main.gbasm | 3 | ||||
-rw-r--r-- | map/loading.gbasm | 6 |
5 files changed, 295 insertions, 135 deletions
diff --git a/bunny.gbasm b/bunny.gbasm index b76c9fa..5212a05 100644 --- a/bunny.gbasm +++ b/bunny.gbasm @@ -1,4 +1,8 @@ Initialize_Bunny: + LD HL, $mem_entites_list + LD A, $01 + LD (HL+), A + LD A, $mem_number_of_rooms CALL =RNG_Bound SLA A @@ -16,7 +20,7 @@ Initialize_Bunny: CALL =RNG_Bound ADD D - LD $mem_bunny_x, A + LD (HL+), A INC BC @@ -27,7 +31,17 @@ Initialize_Bunny: INC A CALL =RNG_Bound ADD D - LD $mem_bunny_y, A + LD (HL+), A + INC HL + LD A, $0d + LD (HL+), A + LD A, $10 + LD (HL+), A + LD (HL+), A + LD A, $03 + LD (HL+), A + + Fix_Bunny_screen: LD A, $mem_bunny_x @@ -50,26 +64,22 @@ Fix_Bunny_screen: OR $08 LD $reg_viewport_y, A - LD A, $50 - LD $mem_bunny_x_px, A - LD A, $40 - LD $mem_bunny_y_px, A RET Move_Bunny: LD C, $00 ; (bit 0 = has_scrolled, bit 1 = has ended movement) - LD A, $mem_moving_sprite_direction - CP $00 + LD A, $mem_bunny_direction + BIT 3, A JR NZ, =Move_Bunny.check_direction LD A, $mem_button_direction - LD $mem_moving_sprite_direction, A CP $00 JP Z, =Move_Bunny.end + SET 3, A + LD $mem_bunny_direction, A Move_Bunny.check_direction: - LD A, $mem_moving_sprite_direction - LD $mem_sprite_direction, A + LD A, $mem_bunny_direction DEC A LD B, $01 @@ -99,20 +109,11 @@ Move_Bunny: LD B, D Move_Bunny.horizontal_px_move: - LD A, $mem_bunny_x_px + SET 0, C + LD A, $reg_viewport_x ADD B - CP $30 - JR C, =Move_Bunny.horizontal_px_move.scrolling_fallback - CP $71 - JR NC, =Move_Bunny.horizontal_px_move.scrolling_fallback - LD $mem_bunny_x_px, A + LD $reg_viewport_x, A JP =Move_Bunny.check_end_of_movement - Move_Bunny.horizontal_px_move.scrolling_fallback: - SET 0, C - LD A, $reg_viewport_x - ADD B - LD $reg_viewport_x, A - JP =Move_Bunny.check_end_of_movement Move_Bunny.vertical_move: LD D, B @@ -129,24 +130,16 @@ Move_Bunny: LD B, D Move_Bunny.vertical_px_move: - LD A, $mem_bunny_y_px + SET 0, C + LD A, $reg_viewport_y ADD B - CP $30 - JR C, =Move_Bunny.vertical_px_move.scrolling_fallback - CP $71 - JR NC, =Move_Bunny.vertical_px_move.scrolling_fallback - LD $mem_bunny_y_px, A + LD $reg_viewport_y, A JP =Move_Bunny.check_end_of_movement - Move_Bunny.vertical_px_move.scrolling_fallback: - SET 0, C - LD A, $reg_viewport_y - ADD B - LD $reg_viewport_y, A - JP =Move_Bunny.check_end_of_movement Move_Bunny.collision: - LD A, $00 - LD $mem_moving_sprite_direction, A + LD A, $mem_bunny_direction + RES 3, A + LD $mem_bunny_direction, A JP =Move_Bunny.end Move_Bunny.check_end_of_movement: @@ -156,8 +149,10 @@ Move_Bunny: LD $mem_moving_animation_step, A JR NZ, =Move_Bunny.end SET 1, C - LD $mem_moving_sprite_direction, A - LD A, $mem_sprite_direction + LD A, $mem_bunny_direction + RES 3, A + LD $mem_bunny_direction, A + AND $07 DEC A BIT 1, A @@ -190,88 +185,3 @@ Move_Bunny: LD A, C LD $mem_map_loading_flags, A RET - -Display_Bunny: - LD A, $mem_bunny_x_px - LD B, A - LD A, $mem_bunny_y_px - LD C, A - LD A, $mem_moving_animation_step - - SUB $08 - BIT 7, A - JR Z, =Display_Bunny.Hop_ABS1_end - - ; Adding hop animation to Y - XOR $ff - INC A - Display_Bunny.Hop_ABS1_end: - SUB $04 - BIT 7, A - JR Z, =Display_Bunny.Hop_ABS2_end - XOR $ff - INC A - Display_Bunny.Hop_ABS2_end: - ADD C - - LD C, A - - LD A, $mem_sprite_direction - CP $enum_direction_left - JR Z, =Display_Bunny.Left_Direction_sprite - CP $enum_direction_right - JR Z, =Display_Bunny.Right_Direction_sprite - CP $enum_direction_up - JR Z, =Display_Bunny.Up_Direction_sprite - JP =Display_Bunny.Down_Direction_sprite - - Display_Bunny.Left_Direction_sprite: - LD E, $01 - LD D, $00 - JP =Display_Bunny.Write_OBJ - - Display_Bunny.Right_Direction_sprite: - LD E, $03 - LD D, $20 - JP =Display_Bunny.Write_OBJ - - Display_Bunny.Up_Direction_sprite: - LD E, $05 - LD D, $00 - JP =Display_Bunny.Write_OBJ - - Display_Bunny.Down_Direction_sprite: - LD E, $09 - LD D, $00 - JP =Display_Bunny.Write_OBJ - - Display_Bunny.Write_OBJ: - ; First OBJ (left) - LD HL, $FE00 - LD A, C - CALL =VBlank_Wait - LD (HL+), A - LD A, B - LD (HL+), A - LD A, E - INC A - LD (HL+), A - LD A, D - LD (HL+), A - - ; Second OBJ - LD A, B - ADD $08 - LD B, A - - LD A, C - LD (HL+), A - LD A, B - LD (HL+), A - LD A, E - XOR $02 - INC A - LD (HL+), A - LD A, D - LD (HL+), A - RET diff --git a/definitions.gbasm b/definitions.gbasm index e35f78f..18b4237 100644 --- a/definitions.gbasm +++ b/definitions.gbasm @@ -13,14 +13,12 @@ .DEFINE dungeon_generation_step $20 .DEFINE intial_duplication_probablity $01 -.DEFINE mem_bunny_x_px ($c000) -.DEFINE mem_bunny_y_px ($c001) .DEFINE mem_button_direction ($c002) -.DEFINE mem_moving_sprite_direction ($c003) .DEFINE mem_moving_animation_step ($c004) -.DEFINE mem_sprite_direction ($c005) -.DEFINE mem_bunny_x ($c006) -.DEFINE mem_bunny_y ($c007) +.DEFINE mem_bunny_sprite ($c980) +.DEFINE mem_bunny_x ($c981) +.DEFINE mem_bunny_y ($c982) +.DEFINE mem_bunny_direction ($c983) .DEFINE mem_viewport_x ($c008) .DEFINE mem_viewport_y ($c009) .DEFINE mem_rng_state_1 ($c00a) ; 2 bytes @@ -58,12 +56,12 @@ ; _padding: u24 ; } -.DEFINE mem_entites_list $c9800 ; Until IDK WHERE +.DEFINE mem_entites_list $c980 ; Until IDK WHERE ; struct entity { ; sprite: u8, ; x: u8, ; y: u8, -; direction: u3, +; direction: u8 (bit 3 = is_moving, bit 2-0: direction), ; } .DEFINE enum_direction_left $01 diff --git a/entities.gbasm b/entities.gbasm new file mode 100644 index 0000000..1e4772f --- /dev/null +++ b/entities.gbasm @@ -0,0 +1,249 @@ +Display_Entities: + LD A, $00 + LD ($80), A + LD HL, $mem_entites_list + CALL =Display_Entity + CALL =Display_Entity + RET + +Display_Entity: + LD A, (HL+) + LD E, A + + LD A, (HL+) + ADD $80 + LD D, A + LD A, $mem_viewport_x + LD B, A + SUB $83 + CP D + JP NC, =Display_Entity.skip + ADD $10 + CP D + JP C, =Display_Entity.skip + LD A, D + SUB $80 + SUB B + AND $0f + SWAP A + LD B, A + + LD A, (HL+) + ADD $80 + LD D, A + LD A, $mem_viewport_y + LD C, A + SUB $83 + CP D + JP NC, =Display_Entity.skip + ADD $10 + CP D + JP C, =Display_Entity.skip + LD A, D + SUB $80 + SUB C + AND $0f + SWAP A + ADD $02 + LD C, A + + + LD A, $mem_bunny_direction + BIT 3, A + JR Z, =Display_Entity.Viewport_offset_end + AND $07 + CP $enum_direction_down + JR Z, =Display_Entity.Viewport_offset_down + CP $enum_direction_right + JR Z, =Display_Entity.Viewport_offset_right + CP $enum_direction_up + JR Z, =Display_Entity.Viewport_offset_up + + Display_Entity.Viewport_offset_left: + LD A, $reg_viewport_x + SUB $08 + AND $0f + XOR $ff + ADD $12 + ADD B + + LD B, A + JR =Display_Entity.Viewport_offset_end + + Display_Entity.Viewport_offset_right: + LD A, $reg_viewport_x + SUB $08 + AND $0f + XOR $ff + ADD B + + LD B, A + + JR =Display_Entity.Viewport_offset_end + + Display_Entity.Viewport_offset_up: + LD A, $reg_viewport_y + SUB $08 + AND $0f + XOR $ff + ADD $12 + ADD C + + LD C, A + + JR =Display_Entity.Viewport_offset_end + + Display_Entity.Viewport_offset_down: + LD A, $reg_viewport_y + SUB $08 + AND $0f + XOR $ff + ADD C + + LD C, A + + Display_Entity.Viewport_offset_end: + + LD A, (HL+) + BIT 3, A + LD D, A + LD A, $00 + JR Z, =Display_Entity.Not_Moving_Animation + + LD A, D + AND $07 + + CP $enum_direction_down + JR Z, =Display_Entity.moving_offset_down + CP $enum_direction_right + JR Z, =Display_Entity.moving_offset_right + CP $enum_direction_up + JR Z, =Display_Entity.moving_offset_up + + Display_Entity.moving_offset_left: + LD A, $mem_moving_animation_step + XOR $ff + ADD B + LD B, A + + JR =Display_Entity.moving_offset_end + + Display_Entity.moving_offset_right: + LD A, $mem_moving_animation_step + INC A + ADD B + LD B, A + + JR =Display_Entity.moving_offset_end + + Display_Entity.moving_offset_up: + LD A, $mem_moving_animation_step + XOR $ff + ADD C + LD C, A + + JR =Display_Entity.moving_offset_end + + Display_Entity.moving_offset_down: + LD A, $mem_moving_animation_step + INC A + ADD C + LD C, A + + Display_Entity.moving_offset_end: + + + LD A, $mem_moving_animation_step + Display_Entity.Not_Moving_Animation: + + SUB $08 + BIT 7, A + JR Z, =Display_Entity.Hop_ABS1_end + + ; Adding hop animation to Y + XOR $ff + INC A + Display_Entity.Hop_ABS1_end: + SUB $04 + BIT 7, A + JR Z, =Display_Entity.Hop_ABS2_end + XOR $ff + INC A + Display_Entity.Hop_ABS2_end: + ADD C + + LD C, A + + LD A, D + AND $07 + + CP $enum_direction_left + JR Z, =Display_Entity.Left_Direction_sprite + CP $enum_direction_right + JR Z, =Display_Entity.Right_Direction_sprite + CP $enum_direction_up + JR Z, =Display_Entity.Up_Direction_sprite + JP =Display_Entity.Down_Direction_sprite + + Display_Entity.Left_Direction_sprite: + LD D, $00 + JP =Display_Entity.Write_OBJ + + Display_Entity.Right_Direction_sprite: + LD A, $02 + ADD E + LD E, A + LD D, $20 + JP =Display_Entity.Write_OBJ + + Display_Entity.Up_Direction_sprite: + LD A, $04 + ADD E + LD E, A + LD D, $00 + JP =Display_Entity.Write_OBJ + + Display_Entity.Down_Direction_sprite: + LD A, $08 + ADD E + LD E, A + LD D, $00 + JP =Display_Entity.Write_OBJ + + Display_Entity.Write_OBJ: + PUSH HL + ; First OBJ (left) + LD H, $FE + LD A, ($80) + LD L, A + LD A, C + LD (HL+), A + LD A, B + LD (HL+), A + LD A, E + INC A + LD (HL+), A + LD A, D + LD (HL+), A + + ; Second OBJ + LD A, B + ADD $08 + LD B, A + + LD A, C + LD (HL+), A + LD A, B + LD (HL+), A + LD A, E + XOR $02 + INC A + LD (HL+), A + LD A, D + LD (HL+), A + LD A, L + LD ($80), A + POP HL + + Display_Entity.skip: + RET @@ -21,9 +21,9 @@ New_Dungeon: JP =Wait_for_VRAM.loop VBLANK_Entrypoint: - CALL =Display_Bunny CALL =Display_Scrolling_Map CALL =Display_Objects + CALL =Display_Entities CALL =Object_Interactions_Check @@ -40,4 +40,5 @@ VBLANK_Entrypoint: .INCLUDE "buttons.gbasm" .INCLUDE "rng.gbasm" .INCLUDE "utils.gbasm" +.INCLUDE "entities.gbasm" .INCLUDE "tileset.gbasm" diff --git a/map/loading.gbasm b/map/loading.gbasm index a7783c8..e42f388 100644 --- a/map/loading.gbasm +++ b/map/loading.gbasm @@ -103,13 +103,15 @@ Display_Scrolling_Map: BIT 0, A JR Z, =Display_Scrolling_Map.End - LD A, $mem_moving_sprite_direction + LD A, $mem_bunny_direction + AND $07 DEC A AND $01 SLA A DEC A LD B, A - LD A, $mem_moving_sprite_direction + LD A, $mem_bunny_direction + AND $07 DEC A BIT 1, A |