From 597b6af85f70631aeb6c5ee5b426ff040cdb37d7 Mon Sep 17 00:00:00 2001 From: Lukas Krickl Date: Mon, 22 Dec 2025 07:04:08 +0100 Subject: [PATCH] combat: moved combat info to a struct --- src/actor.s | 15 ++++++++++----- src/defs.s | 15 +++++++++++++++ src/player.s | 12 ++++++------ src/wram.s | 6 ++---- 4 files changed, 33 insertions(+), 15 deletions(-) diff --git a/src/actor.s b/src/actor.s index 8bf49f9..8238362 100644 --- a/src/actor.s +++ b/src/actor.s @@ -201,7 +201,7 @@ act_die_table: ; player dw act_r_nop ; bat - dw act_die_bat + dw act_die_clear_tact ; actor die table ; inputs: @@ -220,10 +220,12 @@ act_die: ld l, a jp hl - ; bat dealloc + ; actor dealloc + ; sets type to 0 + ; and clears tact ; inputs: ; de: bat -act_die_bat: +act_die_clear_tact: xor a, a ld [de], a ; set type == 0 @@ -723,9 +725,12 @@ act_move_back: ; depends on the weapon equipped, ; the current facing direction ; and the actor's stats + ; if dst_act is NULl this returns without effect + ; does not play animations or update text ; inputs: - ; de: actor attacking -act_attack: + ; combat_src_act: ptr to source actor + ; combat_dst_act: the target actor +act_combat: ret ; loads attribute table of an actor diff --git a/src/defs.s b/src/defs.s index f6292d5..5ff9cd2 100644 --- a/src/defs.s +++ b/src/defs.s @@ -231,3 +231,18 @@ ; attr struct pointer .de item_attr, 2 .de item_size, 0 + + ; combat struct +.se 0 + ; ptr sto source and dst actor + ; if dst is NULL the attack fails +.de combat_src_act, 2 +.de combat_dst_act, 2 + ; combat results + + ; the damage done +.de combat_res_damage, 1 + ; the attack type (e.g. critical, dodge, miss) + ; if all flags are 0 == normal hit +.de combat_res_flags, 1 +.de combat_size, 0 diff --git a/src/player.s b/src/player.s index 2db9143..074beec 100644 --- a/src/player.s +++ b/src/player.s @@ -77,9 +77,9 @@ player_update: player_attack: ld de, player ld a, player HI - ld [combat_src_act], a + ld [combat+combat_src_act], a ld a, player LO - ld [combat_src_act+1], a + ld [combat+combat_src_act+1], a ; TODO: implement correctly ; for now just remove an actor if @@ -93,14 +93,14 @@ player_attack: add hl, de ld a, [hl+] - ld [combat_dst_act], a + ld [combat+combat_dst_act], a ld a, [hl] - ld [combat_dst_act+1], a + ld [combat+combat_dst_act+1], a ; for now just die if actor != NULL - ld a, [combat_dst_act] + ld a, [combat+combat_dst_act] ld d, a - ld a, [combat_dst_act+1] + ld a, [combat+combat_dst_act+1] ld e, a or a, d ret z diff --git a/src/wram.s b/src/wram.s index 5f45776..4bbb29e 100644 --- a/src/wram.s +++ b/src/wram.s @@ -125,7 +125,5 @@ tile_near: .adv 2 tile_far: .adv 2 tile_furthest: .adv 2 - ; ptrs to source and dst actor - ; if dst is NULL the attack fails -combat_src_act: .adv 2 -combat_dst_act: .adv 2 + ; combat data +combat: .adv combat_size -- 2.30.2