; sets up the player actor
player_init:
+ xor a, a
+ ld [player+act_pos_y], a
+ ld [player+act_pos_x], a
+
ret
; updates the special player actor
-player_update:
+player_update:
+ call scroll_center_player
ret
; draws player at current location
call oamalloc
; write left cursor
- ld a, 100
+
+ ; calculate y pos
+ ld a, [scroll_y]
+ ld b, a ; b = scroll y
+
+ ld a, [player+act_pos_y]
+ add a, OBJ_OFF_Y
+ sub a, b
+ ; store y for second obj
+ ld [tmp_y], a
; write y
ld [hl+], a
+
+ ; calculate x pos
+ ld a, [scroll_x]
+ ld b, a
+ sub a, b
+
+ ld a, [player+act_pos_x]
+ add a, OBJ_OFF_X
+ ; store x for second obj
+ ld [tmp_x], a
; write x
ld [hl+], a
; write y
- ld a, 100
+ ld a, [tmp_y]
ld [hl+], a
; write x
- ld a, 108
+ ld a, [tmp_x]
+ add a, 8
ld [hl+], a
; write tile
or a, c
jr nz, video_wait_n_frames REL
ret
+
+ ; centers scroll on player
+ ; but does not allow camera to wrap
+scroll_center_player:
+ ld a, [player+act_pos_y]
+ sub a, 32
+ ld [scroll_y], a
+
+ ld a, [player+act_pos_x]
+ sub a, 32
+ ld [scroll_x], a
+ ret
; loads tilesets