Makes damage precision explicit

This commit is contained in:
Jordan Brown
2018-07-15 01:03:05 -04:00
committed by Ling
parent 5726360347
commit b9ab2c47d3
6 changed files with 39 additions and 24 deletions

View File

@@ -161,3 +161,6 @@
#define BODY_ZONE_PRECISE_R_HAND "r_hand" #define BODY_ZONE_PRECISE_R_HAND "r_hand"
#define BODY_ZONE_PRECISE_L_FOOT "l_foot" #define BODY_ZONE_PRECISE_L_FOOT "l_foot"
#define BODY_ZONE_PRECISE_R_FOOT "r_foot" #define BODY_ZONE_PRECISE_R_FOOT "r_foot"
//We will round to this value in damage calculations.
#define DAMAGE_PRECISION 0.1

View File

@@ -8,7 +8,7 @@
play_attack_sound(damage_amount, damage_type, damage_flag) play_attack_sound(damage_amount, damage_type, damage_flag)
if(!(resistance_flags & INDESTRUCTIBLE) && obj_integrity > 0) if(!(resistance_flags & INDESTRUCTIBLE) && obj_integrity > 0)
damage_amount = run_obj_armor(damage_amount, damage_type, damage_flag, attack_dir, armour_penetration) damage_amount = run_obj_armor(damage_amount, damage_type, damage_flag, attack_dir, armour_penetration)
if(damage_amount >= 0.1) if(damage_amount >= DAMAGE_PRECISION)
. = damage_amount . = damage_amount
var/old_integ = obj_integrity var/old_integ = obj_integrity
obj_integrity = max(old_integ - damage_amount, 0) obj_integrity = max(old_integ - damage_amount, 0)
@@ -33,7 +33,7 @@
armor_protection = armor.getRating(damage_flag) armor_protection = armor.getRating(damage_flag)
if(armor_protection) //Only apply weak-against-armor/hollowpoint effects if there actually IS armor. if(armor_protection) //Only apply weak-against-armor/hollowpoint effects if there actually IS armor.
armor_protection = CLAMP(armor_protection - armour_penetration, 0, 100) armor_protection = CLAMP(armor_protection - armour_penetration, 0, 100)
return round(damage_amount * (100 - armor_protection)*0.01, 0.1) return round(damage_amount * (100 - armor_protection)*0.01, DAMAGE_PRECISION)
//the sound played when the obj is damaged. //the sound played when the obj is damaged.
/obj/proc/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) /obj/proc/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0)

View File

@@ -144,7 +144,7 @@
/obj/item/organ/brain/proc/get_brain_damage() /obj/item/organ/brain/proc/get_brain_damage()
var/brain_damage_threshold = max_integrity * BRAIN_DAMAGE_INTEGRITY_MULTIPLIER var/brain_damage_threshold = max_integrity * BRAIN_DAMAGE_INTEGRITY_MULTIPLIER
var/offset_integrity = obj_integrity - (max_integrity - brain_damage_threshold) var/offset_integrity = obj_integrity - (max_integrity - brain_damage_threshold)
. = round((1 - (offset_integrity / brain_damage_threshold)) * BRAIN_DAMAGE_DEATH,0.1) . = round((1 - (offset_integrity / brain_damage_threshold)) * BRAIN_DAMAGE_DEATH, DAMAGE_PRECISION)
/obj/item/organ/brain/proc/adjust_brain_damage(amount, maximum) /obj/item/organ/brain/proc/adjust_brain_damage(amount, maximum)
var/adjusted_amount var/adjusted_amount
@@ -157,11 +157,11 @@
else else
adjusted_amount = amount adjusted_amount = amount
adjusted_amount = round(adjusted_amount * BRAIN_DAMAGE_INTEGRITY_MULTIPLIER,0.1) adjusted_amount = round(adjusted_amount * BRAIN_DAMAGE_INTEGRITY_MULTIPLIER, DAMAGE_PRECISION)
if(adjusted_amount) if(adjusted_amount)
if(adjusted_amount >= 0.1) if(adjusted_amount >= DAMAGE_PRECISION)
take_damage(adjusted_amount) take_damage(adjusted_amount)
else if(adjusted_amount <= -0.1) else if(adjusted_amount <= -DAMAGE_PRECISION)
obj_integrity = min(max_integrity, obj_integrity-adjusted_amount) obj_integrity = min(max_integrity, obj_integrity-adjusted_amount)
. = adjusted_amount . = adjusted_amount

View File

@@ -166,9 +166,15 @@
update |= picked.heal_damage(brute, burn, stamina, only_robotic, only_organic, FALSE) update |= picked.heal_damage(brute, burn, stamina, only_robotic, only_organic, FALSE)
brute = round(brute - (brute_was - picked.brute_dam), 0.01) <<<<<<< HEAD
burn = round(burn - (burn_was - picked.burn_dam), 0.01) brute -= (brute_was - picked.brute_dam)
stamina = round(stamina - (stamina_was - picked.stamina_dam), 0.01) burn -= (burn_was - picked.burn_dam)
stamina -= (stamina_was - picked.stamina_dam)
=======
brute = round(brute - (brute_was - picked.brute_dam), DAMAGE_PRECISION)
burn = round(burn - (burn_was - picked.burn_dam), DAMAGE_PRECISION)
stamina = round(stamina - (stamina_was - picked.stamina_dam), DAMAGE_PRECISION)
>>>>>>> 259dc6f386... Merge pull request #39139 from AnturK/iloveprecision
parts -= picked parts -= picked
if(updating_health) if(updating_health)
@@ -186,9 +192,9 @@
var/update = 0 var/update = 0
while(parts.len && (brute > 0 || burn > 0 || stamina > 0)) while(parts.len && (brute > 0 || burn > 0 || stamina > 0))
var/obj/item/bodypart/picked = pick(parts) var/obj/item/bodypart/picked = pick(parts)
var/brute_per_part = round(brute/parts.len, 0.01) var/brute_per_part = round(brute/parts.len, DAMAGE_PRECISION)
var/burn_per_part = round(burn/parts.len, 0.01) var/burn_per_part = round(burn/parts.len, DAMAGE_PRECISION)
var/stamina_per_part = round(stamina/parts.len, 0.01) var/stamina_per_part = round(stamina/parts.len, DAMAGE_PRECISION)
var/brute_was = picked.brute_dam var/brute_was = picked.brute_dam
var/burn_was = picked.burn_dam var/burn_was = picked.burn_dam
@@ -197,9 +203,15 @@
update |= picked.receive_damage(brute_per_part, burn_per_part, stamina_per_part, FALSE) update |= picked.receive_damage(brute_per_part, burn_per_part, stamina_per_part, FALSE)
brute = round(brute - (picked.brute_dam - brute_was), 0.01) <<<<<<< HEAD
burn = round(burn - (picked.burn_dam - burn_was), 0.01) brute -= (picked.brute_dam - brute_was)
stamina = round(stamina - (picked.stamina_dam - stamina_was), 0.01) burn -= (picked.burn_dam - burn_was)
stamina -= (picked.stamina_dam - stamina_was)
=======
brute = round(brute - (picked.brute_dam - brute_was), DAMAGE_PRECISION)
burn = round(burn - (picked.burn_dam - burn_was), DAMAGE_PRECISION)
stamina = round(stamina - (picked.stamina_dam - stamina_was), DAMAGE_PRECISION)
>>>>>>> 259dc6f386... Merge pull request #39139 from AnturK/iloveprecision
parts -= picked parts -= picked
if(updating_health) if(updating_health)

View File

@@ -2,7 +2,7 @@
/mob/living/simple_animal/proc/adjustHealth(amount, updating_health = TRUE, forced = FALSE) /mob/living/simple_animal/proc/adjustHealth(amount, updating_health = TRUE, forced = FALSE)
if(!forced && (status_flags & GODMODE)) if(!forced && (status_flags & GODMODE))
return FALSE return FALSE
bruteloss = CLAMP(bruteloss + amount, 0, maxHealth) bruteloss = round(CLAMP(bruteloss + amount, 0, maxHealth),DAMAGE_PRECISION)
if(updating_health) if(updating_health)
updatehealth() updatehealth()
return amount return amount

View File

@@ -121,9 +121,9 @@
if(owner && (owner.status_flags & GODMODE)) if(owner && (owner.status_flags & GODMODE))
return FALSE //godmode return FALSE //godmode
var/dmg_mlt = CONFIG_GET(number/damage_multiplier) var/dmg_mlt = CONFIG_GET(number/damage_multiplier)
brute = max(brute * dmg_mlt, 0) brute = round(max(brute * dmg_mlt, 0),DAMAGE_PRECISION)
burn = max(burn * dmg_mlt, 0) burn = round(max(burn * dmg_mlt, 0),DAMAGE_PRECISION)
stamina = max(stamina * dmg_mlt, 0) stamina = round(max(stamina * dmg_mlt, 0),DAMAGE_PRECISION)
if(status == BODYPART_ROBOTIC) //This makes robolimbs not damageable by chems and makes it stronger if(status == BODYPART_ROBOTIC) //This makes robolimbs not damageable by chems and makes it stronger
brute = max(0, brute - 5) brute = max(0, brute - 5)
burn = max(0, burn - 4) burn = max(0, burn - 4)
@@ -144,8 +144,8 @@
if(total_damage > can_inflict) if(total_damage > can_inflict)
var/excess = total_damage - can_inflict var/excess = total_damage - can_inflict
brute = brute * (excess / total_damage) brute = round(brute * (excess / total_damage),DAMAGE_PRECISION)
burn = burn * (excess / total_damage) burn = round(burn * (excess / total_damage),DAMAGE_PRECISION)
brute_dam += brute brute_dam += brute
burn_dam += burn burn_dam += burn
@@ -172,9 +172,9 @@
if(only_organic && status != BODYPART_ORGANIC) //This makes robolimbs not healable by chems. if(only_organic && status != BODYPART_ORGANIC) //This makes robolimbs not healable by chems.
return return
brute_dam = max(brute_dam - brute, 0) brute_dam = round(max(brute_dam - brute, 0), DAMAGE_PRECISION)
burn_dam = max(burn_dam - burn, 0) burn_dam = round(max(burn_dam - burn, 0), DAMAGE_PRECISION)
stamina_dam = max(stamina_dam - stamina, 0) stamina_dam = round(max(stamina_dam - stamina, 0), DAMAGE_PRECISION)
if(owner && updating_health) if(owner && updating_health)
owner.updatehealth() owner.updatehealth()
return update_bodypart_damage_state() return update_bodypart_damage_state()