aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bunny.gbasm158
-rw-r--r--definitions.gbasm14
-rw-r--r--entities.gbasm249
-rw-r--r--main.gbasm3
-rw-r--r--map/loading.gbasm6
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
diff --git a/main.gbasm b/main.gbasm
index 61fed0d..f96b893 100644
--- a/main.gbasm
+++ b/main.gbasm
@@ -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