From: Lukas Krickl Date: Mon, 22 Dec 2025 05:32:03 +0000 (+0100) Subject: actor: Added actor die table X-Git-Url: https://git.krickl.dev/?a=commitdiff_plain;h=87a6e8c093af67f4bfc02574c63643b2068dca69;p=gbrg%2F.git actor: Added actor die table --- diff --git a/src/actor.s b/src/actor.s index 5fedb33..8bf49f9 100644 --- a/src/actor.s +++ b/src/actor.s @@ -195,6 +195,42 @@ act_init: ld l, a jp hl +act_die_table: + ; NULL + dw act_r_nop + ; player + dw act_r_nop + ; bat + dw act_die_bat + + ; actor die table + ; inputs: + ; de: actor ptr +act_die: + ld a, [de] ; type + add a, a ; * 2 for table offset + ld hl, act_die_table + ld b, 0 + ld c, a + add hl, bc + + ; load routine ptr + ld a, [hl+] + ld h, [hl] + ld l, a + jp hl + + ; bat dealloc + ; inputs: + ; de: bat +act_die_bat: + xor a, a + ld [de], a ; set type == 0 + + call act_clear_tact + + ret + ; generic actor table call ; inputs: diff --git a/src/player.s b/src/player.s index fffee98..2db9143 100644 --- a/src/player.s +++ b/src/player.s @@ -76,7 +76,10 @@ player_update: ; player attack call player_attack: ld de, player - call act_attr_get_attack_damage + ld a, player HI + ld [combat_src_act], a + ld a, player LO + ld [combat_src_act+1], a ; TODO: implement correctly ; for now just remove an actor if @@ -90,16 +93,19 @@ player_attack: add hl, de ld a, [hl+] - ld e, [hl] + ld [combat_dst_act], a + ld a, [hl] + ld [combat_dst_act+1], a + + ; for now just die if actor != NULL + ld a, [combat_dst_act] ld d, a - or a, e + ld a, [combat_dst_act+1] + ld e, a + or a, d ret z - - xor a, a - dec hl - ld [de], a ; set type to 0 - ld [hl+], a ; clear ptr - ld [hl], a + + call act_die ret diff --git a/src/wram.s b/src/wram.s index c0e89a7..5f45776 100644 --- a/src/wram.s +++ b/src/wram.s @@ -124,4 +124,8 @@ tmp_act_x: .adv 1 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