; get inputs
call poll_inputs
+ call video_map_adjust_scroll
+
ld a, 1
ld [frame_ready], a
pop_all
ret
; scrolls if the flag is set
+ ; loads a new map row and sets the scroll
+ ; timer
video_map_perform_scroll:
ld a, [game_flags]
and a, GPF_SCROLL
ret z
- ld a, [scroll_y]
- sub a, MAP_ROW_H
- ld [scroll_y], a
-
- ld a, [player_next_scroll_y]
- ; sub a, MAP_ROW_H/2
- ld [player_next_scroll_y], a
-
call map_advance_row
- call scroll_up_adjust
-
; unset flag
ld a, [game_flags]
and a, ~GPF_SCROLL & 0xFF
ld [game_flags], a
+
+ ld a, MAP_ROW_H
+ ld [scroll_timer], a
+ ret
+
+ ; adjusts the scroll slowly 1 pixel each frame
+ ; until the timer reaches 0
+video_map_adjust_scroll:
+ ld a, [scroll_timer]
+ cp a, 0
+ ret z
+
+ dec a
+ ld [scroll_timer], a
+
+
+ ld a, [scroll_y]
+ dec a
+ ld [scroll_y], a
+
+ call scroll_up_adjust
ret
; adjusts all actors and rectangles positions
ld de, act_pos_y
add hl, de
ld a, [hl]
- add a, MAP_ROW_H
+ add a, 1
ld [hl+], a ; hl = page y pos hi
ld a, [hl]
add hl, de
jr nz, @act_loop REL
+ ; adjust player
+
+ ld a, [player+act_pos_y]
+ add a, 1
+ ld [player+act_pos_y], a
+
+ ld a, [player+act_pos_y_hi]
+ adc a, 0
+ ld [player+act_pos_y_hi], a
+
; TODO: adjust rectangles
ret