rectangle collision: fixed rect to rect collision for actors
authorLukas Krickl <lukas@krickl.dev>
Tue, 23 Sep 2025 15:55:55 +0000 (17:55 +0200)
committerLukas Krickl <lukas@krickl.dev>
Tue, 23 Sep 2025 15:55:55 +0000 (17:55 +0200)
src/actor.s
src/debug.s
src/map.s
src/rectangle.s

index f64611ce13aae2ee52f51d9c61908ddcebdc8a69..d292de9b44af20b3105578b633939a19e4437ffe 100644 (file)
@@ -139,6 +139,7 @@ actor_despawn:
 actor_write_default_collider:
        ld [hl+], a ; mask
        ld a, b
+       add a, 16
        ld [hl+], a ; y pos
        ld a, c
        ld [hl+], a ; x pos
@@ -165,6 +166,7 @@ actor_write_default_collider:
                pop bc
                pop hl ; hl = test rect
 
+               BREAK
                call rect_point_test
                cp a, 1
                jp z, $2
@@ -197,8 +199,8 @@ actor_test_movement:
 
                actor_test_movement_corner rect_bl, @rect_collision
                actor_test_movement_corner rect_br, @rect_collision
-               actor_test_movement_corner rect_tl, @rect_collision
-               actor_test_movement_corner rect_tr, @rect_collision
+               actor_test_movement_corner rect_tl, @rect_collision
+               actor_test_movement_corner rect_tr, @rect_collision
 @skip_rect:
                add hl, de ; next rect (de = r_size)
                dec b
index 48af253275c109af72fc5ff2548617092e05e8d2..644451f41b9d92b82ea2864a4d8c126266f32765 100644 (file)
@@ -102,6 +102,37 @@ dbg_rect_draw:
        ld e, a
        ld a, [dbg_rect+1]
        ld d, a
+       
+       call dbg_rect_draw_ptr
+       
+       ; always draw player rectangle
+       ld de, player+act_rect
+       call dbg_rect_draw_ptr
+
+       ret
+
+@rect_draw_cycle:
+       ld a, [dbg_rect]
+       ld l, a
+       ld a, [dbg_rect+1]
+       ld h, a
+       ld de, r_size
+       add hl, de
+       
+       ; next rectangle
+       ld a, l
+       ld [dbg_rect], a
+       ld a, h
+       ld [dbg_rect+1], a
+
+       ld a, 16
+       ld [dbg_delay], a
+       ret
+       
+       ; draws a rectangle from ptr
+       ; inputs:
+       ;               de: rectangle
+dbg_rect_draw_ptr:
 
        ; de = rectangle ptr
        
@@ -207,20 +238,3 @@ dbg_rect_draw:
        ret
 @rect_not_alloced:
        ret
-@rect_draw_cycle:
-       ld a, [dbg_rect]
-       ld l, a
-       ld a, [dbg_rect+1]
-       ld h, a
-       ld de, r_size
-       add hl, de
-       
-       ; next rectangle
-       ld a, l
-       ld [dbg_rect], a
-       ld a, h
-       ld [dbg_rect+1], a
-
-       ld a, 16
-       ld [dbg_delay], a
-       ret
index 0de607cbd45dd42c29050bc3b36fe6dfc0342649..4388b725b8aadf0443ed703e8c579344c92e537a 100644 (file)
--- a/src/map.s
+++ b/src/map.s
@@ -239,6 +239,9 @@ l1_objs:
        ; rectangle at y/x 0/0 with height 32 width 64
        modef MOT_RECT, 0, 9, 0x0804 
 
+       ; center rectangle
+       ; modef MOT_RECT, 0, 9, 0x8604 
+
        ; rectangle at y/x 0/0 with height 32 width 48 
        modef MOT_RECT, 0, 9, 0xE604 
 
index 1ccb4d36289118f9190147e2c4eb0d507b93fb4b..1cc2744a8fe3dd75082d990f0a28cf2378db4370 100644 (file)
@@ -178,7 +178,7 @@ rect_point_test:
        ld a, c ; compare x
        cp a, e
        jp c, @no_collision
-
+       
        ; top right
        push hl
        call rect_tr