; calculates physical damage of
; one actor agains another
+ ; formula:
+ ; physical damage = (weapon damage a1 + strength a1 / 8) - (ac a2 / 2)
; inputs:
; de: actor1
; bc: actor2
; sub damage from actor2
; a: damage
stat_calc_physical_damage_vs:
+ ; actor 1
+
call stat_calc_weapon_damage
; a = damage
- push bc
- pop de ; de = actor2 now
ld b, a ; b = weapon damage
+ ; weapon damage + strenth / 8
+ call stat_calc_str
+ sla a ; / 2
+ sla a ; / 4
+ sla a ; / 8
+ add a, b
+ ld b, a ; b = real damage
+
+ ; actor 2
+
+ push bc
+ pop de ; de = actor2 now
+ ; damage - ac/2
call stat_calc_ac
+ sla a
+ sub_ba
+ jp c, @no_damage
+ ; b = damage to apply
+
+ ; apply damage
+
+ ld hl, act_hp
+ add hl, de
+ ; hl = act2 hp
+ ld a, [hl]
+ sub a, b
+ jp c, @dead
+
+ ; write new hp
+ ld [hl], a
ret
@no_damage:
xor a, a
ret
+@dead:
+ xor a, a
+ ld [hl], a ; write 0 hp
+ ret
; calculates the real speed state
; inputs: