; $1: add/sub
; $2: scroll_move_y/x
; uses: a
+ ; skipped if z flag is 1
#macro cursor_adjust_scroll
+.beginscope
ld a, [$2]
$1 a, 1
ld [$2], a
+.endscope
#endmacro
; move cursor
ld a, CURSOR_MOVE_SPEED * $3
ld [$1], a
#endmacro
+
cursor_move_direction cursor_move_y, cursor_move_x, 1
+ ld a, [cursor_y]
+ cp a, 0
; adjust scroll
cursor_adjust_scroll add, scroll_move_y
cursor_move_direction cursor_move_y, cursor_move_x, NEGATE
+ ld a, [cursor_y]
+ cp a, 0
; adjust scroll
cursor_adjust_scroll sub, scroll_move_y
cursor_move_direction cursor_move_x, cursor_move_y, NEGATE
+ ld a, [cursor_x]
+ cp a, 0
; adjust scroll
cursor_adjust_scroll sub, scroll_move_x
+
+ call z, cursor_abort_move
ret
@notleft:
cursor_move_direction cursor_move_x, cursor_move_y, 1
+ ld a, [cursor_x]
+ cp a, 0
; adjust scroll
cursor_adjust_scroll add, scroll_move_x
pop af
ret
+
+ ; aborts cursor move
+ ; uses: a
+cursor_abort_move:
+ xor a, a
+ ld [cursor_move_timer], a
+ ret