state: Added proper state machine based cursor movement
authorLukas Krickl <lukas@krickl.dev>
Thu, 27 Mar 2025 19:56:04 +0000 (20:56 +0100)
committerLukas Krickl <lukas@krickl.dev>
Thu, 27 Mar 2025 19:56:04 +0000 (20:56 +0100)
src/macros.inc
src/player.s
src/state.s
src/wram.s

index 402312ca56009784e3fe74806944921fe9b6a78d..fc5b0a0433e339d52c92f935e0e5f9bc9ada77e2 100644 (file)
 #macro cursor_move_direction
     xor a, a
     ld [$2], a
-    ld a, CURSOR_MOVE_TIMER
-    ld [cursor_move_timer], a
     ld a, CURSOR_MOVE_SPEED * $3 
     ld [$1], a
 #endmacro
index fd6c91dc5fccf22bb820c3a4fad87699fdc13cf9..251c25b8c836004d595f1b3ea2d1ae3c4f35bb7b 100644 (file)
@@ -21,13 +21,15 @@ player_init:
   ; inputs:
   ;   hl: pointer to player memory
 player_update:
-  ; check cursor movement
-  ld a, [cursor_move_timer] 
-  cp a, 0
-  call nz, cursor_move_delay
-  call z, handle_inputs 
-
+  call handle_inputs
+  push bc
+  call player_draw_cursor
+  pop bc
+  ret
 
+  ; updates the cursor 
+  ; sprites
+player_draw_cursor:
 @draw_cursor:
   ; draw cursor
   ld a, [scroll_y]
@@ -63,7 +65,7 @@ handle_inputs:
   jr z, @notdown REL
 
     call try_abort_move_down
-    ret z
+    jp z, @done
   
     cursor_move_direction cursor_move_y, cursor_move_x, 1 
     
@@ -71,6 +73,7 @@ handle_inputs:
     cursor_adjust_scroll add, scroll_move_y
 
     call cursor_move
+    ld bc, st_cursor_delay
     ret
 @notdown:
   
@@ -78,7 +81,7 @@ handle_inputs:
   jr z, @notup REL
 
     call try_abort_move_up
-    ret z
+    jr z, @done REL
 
     cursor_move_direction cursor_move_y, cursor_move_x, NEGATE
 
@@ -86,6 +89,7 @@ handle_inputs:
     cursor_adjust_scroll sub, scroll_move_y
     
     call cursor_move
+    ld bc, st_cursor_delay 
     ret
 @notup:
 
@@ -93,7 +97,7 @@ handle_inputs:
   jr z, @notleft REL
 
     call try_abort_move_left
-    ret z
+    jr z, @done REL
 
     cursor_move_direction cursor_move_x, cursor_move_y, NEGATE
 
@@ -101,7 +105,7 @@ handle_inputs:
     cursor_adjust_scroll sub, scroll_move_x
     
     call cursor_move
-
+    ld bc, st_cursor_delay 
     ret
 @notleft:
 
@@ -109,7 +113,7 @@ handle_inputs:
   jr z, @notright REL
 
     call try_abort_move_right
-    ret z
+    jr z, @done REL
 
     cursor_move_direction cursor_move_x, cursor_move_y, 1 
 
@@ -117,16 +121,11 @@ handle_inputs:
     cursor_adjust_scroll add, scroll_move_x
     
     call cursor_move
+    ld bc, st_cursor_delay 
+    ret
 @notright:
-
-  ret
-
-  ; updates cursor move delay
-  ; cursor move delay timer--
-cursor_move_delay:
-  ld a, [cursor_move_timer]
-  dec a
-  ld [cursor_move_timer], a
+@done:
+  ldnull bc
   ret
 
 cursor_move:
index 03e233c092ab1c66cb37976d5b9098191a574e4b..8f103dc0d9a3a60812da233fa7191aedaf6160b5 100644 (file)
@@ -40,12 +40,15 @@ st_update:
   cp a, 0
   jr z, @set_next_state_default REL
 
+  ; hl = actor ptr
+
   ; set returned state 
   push bc
   pop de ; de = src
   
   ld bc, st_size
-  jp memcpy 
+  call memcpy 
+  ret
 @set_next_state_default:
   
   ; set default state
@@ -78,6 +81,7 @@ st_null:
 
 st_cursor:
   st_def 0x00, player_update, st_cursor
-
+st_cursor_draw:
+  st_def 0x00, player_draw_cursor, st_cursor
 st_cursor_delay:
-  st_def CURSOR_MOVE_TIMER, st_null, st_cursor
+  st_def CURSOR_MOVE_TIMER, st_null_fn, st_cursor
index 4a6a3b2ac4263107c87a64204bdd7c9560147054..e93cfc55fe1ca7a22611a60444226316c79273e6 100644 (file)
@@ -33,7 +33,6 @@ state:
 cursor:
 cursor_y: .adv 1
 cursor_x: .adv 1
-cursor_move_timer: .adv 1
 cursor_move_y: .adv 1
 cursor_move_x: .adv 1