actor: act_move_frward and back now perform collision checks internally
authorLukas Krickl <lukas@krickl.dev>
Wed, 17 Dec 2025 13:52:21 +0000 (14:52 +0100)
committerLukas Krickl <lukas@krickl.dev>
Wed, 17 Dec 2025 13:52:21 +0000 (14:52 +0100)
src/actor.s
src/player.s

index 41c94b4ad2e05ded192138a6fb48143bd10d8815..cb382a7344f91e39c54526c44d10c5d2430fb6f2 100644 (file)
@@ -244,10 +244,21 @@ act_apply_pos:
        
        
        ; moves the actor forward
-       ; does not perform collision checks
+       ; performs collision checks
        ; inputs:
        ;               de: actor
 act_move_forward:
+       push de
+       ld hl, act_dir_forward
+       call act_can_move
+       pop de
+       ret z ; bail on collision
+
+       push de
+       call act_clear_tact
+       pop de
+       push de
+
        ld hl, act_dir
        add hl, de ; hl = act_dir
        ld a, [hl]
@@ -261,13 +272,30 @@ act_move_forward:
        
        call act_apply_vec
 
+       ; TODO: check if player collides with actor
+       ; at new location
+
+       pop de
+       call act_set_tact
+
        ret
        
        ; moves the actor back
-       ; does not perform collision checks
+       ; performs collision checks
        ; inputs:
        ;               de: actor
 act_move_back:
+       push de
+       ld hl, act_dir_back
+       call act_can_move
+       pop de
+       ret z ; bail on collision
+
+       push de
+       call act_clear_tact
+       pop de
+       push de
+
        ld hl, act_dir
        add hl, de ; hl = act_dir
        ld a, [hl]
@@ -286,6 +314,9 @@ act_move_back:
        ld b, [hl] ; b = direction
 
        call act_apply_vec
+
+       pop de
+       call act_set_tact
        
        ret
 
index 5ed0077cba1c425c49c36eee96e937e39f27edb8..22fdf82391d73c0548e13f049c885d07be04442b 100644 (file)
@@ -76,42 +76,22 @@ player_handle_move:
        ld b, DIRUP
        input_just
        jr z, @not_up REL
-               ld hl, act_dir_forward
-               ld de, player
-               call act_can_move
-               ld de, player
-               call nz, player_move_forward
+               call player_move_forward
 @not_up:
 
        ld b, DIRDOWN
        input_just
        jr z, @not_down REL
-               ld hl, act_dir_back
-               ld de, player
-               call act_can_move
-               ld de, player
                call nz, player_move_back
 @not_down:
        ret
 
 player_move_forward:
-       ld de, player
-       call act_clear_tact
-
        ld de, player
        call act_move_forward
-
-       ld de, player
-       call act_set_tact
        jp map_full_draw
 
 player_move_back:
-       ld de, player
-       call act_clear_tact
-
        ld de, player
        call act_move_back
-
-       ld de, player
-       call act_set_tact
        jp map_full_draw