; 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]
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]
ld b, [hl] ; b = direction
call act_apply_vec
+
+ pop de
+ call act_set_tact
ret
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