From f7bfb82895ad206d9aeeb40c667049f93cc4578a Mon Sep 17 00:00:00 2001 From: Lukas Krickl Date: Fri, 19 Sep 2025 17:45:07 +0200 Subject: [PATCH] actor: wip actor drawing --- src/actor.s | 13 +++++++++++++ src/main.s | 1 + src/map.s | 2 ++ src/player.s | 27 +++++++++++++++++++++++++++ src/sys.s | 24 ++++++++++-------------- src/update.s | 5 ++++- src/wram.s | 4 +--- 7 files changed, 58 insertions(+), 18 deletions(-) create mode 100644 src/actor.s diff --git a/src/actor.s b/src/actor.s new file mode 100644 index 0000000..5c1b5a7 --- /dev/null +++ b/src/actor.s @@ -0,0 +1,13 @@ + ; draws a single object + ; for an actor accounting for scroll + ; inputs: + ; de: actor + ; hl: oam ptr + ; b: tile + ; c: oam flags + ; a: nnnn0000: y offset from actor pos; + ; 0000nnnn: x offset from actor pos + ; returns: + ; hl: next oam ptr (if reserved!) +actor_draw: + ret diff --git a/src/main.s b/src/main.s index 37473bc..c1f398f 100644 --- a/src/main.s +++ b/src/main.s @@ -64,6 +64,7 @@ main: #include "rowpatterns.s" #include "math.s" #include "game.s" +#include "actor.s" #include "tiles.inc" #include "text.s" diff --git a/src/map.s b/src/map.s index eb40337..3e19a67 100644 --- a/src/map.s +++ b/src/map.s @@ -48,6 +48,8 @@ map_load: ; to make bottom of scrn0 visible ld a, 144 ld [scroll_y], a + + call player_init ret ; loads all tile banks diff --git a/src/player.s b/src/player.s index e69de29..aa07701 100644 --- a/src/player.s +++ b/src/player.s @@ -0,0 +1,27 @@ + ; sets up the player actor +player_init: + ; initial position + ld a, 232 + ld [player+act_pos_y], a + ld a, 64 + ld [player+act_pos_x], a + ret + + ; updates the special player actor +player_update: + ret + +#define PLAYER_SPRITE_IDLE1 0x8A + + ; draws the special player actor +player_draw: + ld a, 2 + call oamalloc + + ld de, player + ld b, PLAYER_SPRITE_IDLE1 + ld c, 0 + ld a, 0 + call actor_draw + + ret diff --git a/src/sys.s b/src/sys.s index 3c6e58f..871dded 100644 --- a/src/sys.s +++ b/src/sys.s @@ -55,22 +55,14 @@ call_tbl: ; hl = function value jp hl - ; loads scroll into bc - ; returns: - ; b: scroll y - ; c: scroll x -load_scroll: - ld a, [scroll_y] - ld b, a ; b = scroll_y - ld a, [scroll_x] - ld c, a ; c = scroll_x - ret - ; loads unit sprite into hl ; increments unit sprite + ; inputs: + ; a: amount of objects to reserve ; returns; ; hl: current unit sprite -load_oam_obj: +oamalloc: + push af ld a, [current_oam_obj] @@ -81,13 +73,17 @@ load_oam_obj: add hl, de ; hl = next oam ; next object - add a, oamsize + ld b, a + pop af + sla a + sla a ; * 4 to get oam size from requsted objs + add a, b ; current oam + input * 4 ld [current_oam_obj], a ret ; resets unit obj -reset_oam_obj: +oamfree_all: xor a, a ld [current_oam_obj], a ret diff --git a/src/update.s b/src/update.s index 139fab5..e342b23 100644 --- a/src/update.s +++ b/src/update.s @@ -7,6 +7,9 @@ update_game: ; clear oam call shadow_oam_clear + + call player_draw + call player_update ret @@ -27,7 +30,7 @@ update: ld [frame_count], a ; reset objects - call reset_oam_obj + call oamfree_all ; load current sate routine ld a, [game_state] diff --git a/src/wram.s b/src/wram.s index 27e86b3..b1f0a68 100644 --- a/src/wram.s +++ b/src/wram.s @@ -55,9 +55,7 @@ scroll_x: .adv 1 srand: .adv 2 -; units -; player_unit (unit 0) is reserved -player_unit: .adv 0 +player: .adv act_size actors: .adv act_size * ACTS_MAX map_objs: .adv mo_size * MAP_OBJ_MAX -- 2.30.2