From 35f03a3d754d988aa33be953412dc81d2a7fe7b5 Mon Sep 17 00:00:00 2001 From: Lukas Krickl Date: Thu, 30 Oct 2025 17:57:20 +0100 Subject: [PATCH] map: wip player scrolling --- src/map.s | 5 ----- src/player.s | 33 +++++++++++++++++++++++++++++---- src/tiles.s | 2 +- src/video.s | 12 ++++++++++++ src/wram.s | 3 +++ 5 files changed, 45 insertions(+), 10 deletions(-) diff --git a/src/map.s b/src/map.s index e8afa88..f04823e 100644 --- a/src/map.s +++ b/src/map.s @@ -33,11 +33,6 @@ map_load: call player_init call ui_init - ; initial scroll value - ; to make bottom of scrn0 visible - ld a, 144 - ld [scroll_y], a - ret ; loads a tileset diff --git a/src/player.s b/src/player.s index 8fb8662..9a98f0e 100644 --- a/src/player.s +++ b/src/player.s @@ -4,10 +4,15 @@ ; 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 @@ -16,10 +21,29 @@ player_draw: 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 @@ -36,11 +60,12 @@ player_draw: ; 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 diff --git a/src/tiles.s b/src/tiles.s index 4f1c9da..6327de7 100644 --- a/src/tiles.s +++ b/src/tiles.s @@ -1,7 +1,7 @@ ; tile definitions #define GFX_GRASS 0x48 -#define GFX_PHIVE 0x4A +#define GFX_PHIVE 0x62 #define GFX_EHIVE 0x4A #define GFX_FOOD 0x03 diff --git a/src/video.s b/src/video.s index 1900c0d..f421c6c 100644 --- a/src/video.s +++ b/src/video.s @@ -156,6 +156,18 @@ video_wait_n_frames: 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 diff --git a/src/wram.s b/src/wram.s index 1e7bc88..d099a18 100644 --- a/src/wram.s +++ b/src/wram.s @@ -68,6 +68,9 @@ srand: .adv 2 player: .adv act_size enemy: .adv act_size + +tmp_y: .adv 1 +tmp_x: .adv 1 ; current map ptr map: .adv 2 -- 2.30.2