mirror of
https://github.com/yogstation13/Yogstation.git
synced 2025-02-26 09:04:50 +00:00
Makes damage precision explicit
This commit is contained in:
@@ -161,3 +161,6 @@
|
||||
#define BODY_ZONE_PRECISE_R_HAND "r_hand"
|
||||
#define BODY_ZONE_PRECISE_L_FOOT "l_foot"
|
||||
#define BODY_ZONE_PRECISE_R_FOOT "r_foot"
|
||||
|
||||
//We will round to this value in damage calculations.
|
||||
#define DAMAGE_PRECISION 0.1
|
||||
@@ -8,7 +8,7 @@
|
||||
play_attack_sound(damage_amount, damage_type, damage_flag)
|
||||
if(!(resistance_flags & INDESTRUCTIBLE) && obj_integrity > 0)
|
||||
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
|
||||
var/old_integ = obj_integrity
|
||||
obj_integrity = max(old_integ - damage_amount, 0)
|
||||
@@ -33,7 +33,7 @@
|
||||
armor_protection = armor.getRating(damage_flag)
|
||||
if(armor_protection) //Only apply weak-against-armor/hollowpoint effects if there actually IS armor.
|
||||
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.
|
||||
/obj/proc/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0)
|
||||
|
||||
@@ -144,7 +144,7 @@
|
||||
/obj/item/organ/brain/proc/get_brain_damage()
|
||||
var/brain_damage_threshold = max_integrity * BRAIN_DAMAGE_INTEGRITY_MULTIPLIER
|
||||
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)
|
||||
var/adjusted_amount
|
||||
@@ -157,11 +157,11 @@
|
||||
else
|
||||
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 >= 0.1)
|
||||
if(adjusted_amount >= DAMAGE_PRECISION)
|
||||
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)
|
||||
. = adjusted_amount
|
||||
|
||||
|
||||
@@ -166,9 +166,15 @@
|
||||
|
||||
update |= picked.heal_damage(brute, burn, stamina, only_robotic, only_organic, FALSE)
|
||||
|
||||
brute = round(brute - (brute_was - picked.brute_dam), 0.01)
|
||||
burn = round(burn - (burn_was - picked.burn_dam), 0.01)
|
||||
stamina = round(stamina - (stamina_was - picked.stamina_dam), 0.01)
|
||||
<<<<<<< HEAD
|
||||
brute -= (brute_was - picked.brute_dam)
|
||||
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
|
||||
if(updating_health)
|
||||
@@ -186,9 +192,9 @@
|
||||
var/update = 0
|
||||
while(parts.len && (brute > 0 || burn > 0 || stamina > 0))
|
||||
var/obj/item/bodypart/picked = pick(parts)
|
||||
var/brute_per_part = round(brute/parts.len, 0.01)
|
||||
var/burn_per_part = round(burn/parts.len, 0.01)
|
||||
var/stamina_per_part = round(stamina/parts.len, 0.01)
|
||||
var/brute_per_part = round(brute/parts.len, DAMAGE_PRECISION)
|
||||
var/burn_per_part = round(burn/parts.len, DAMAGE_PRECISION)
|
||||
var/stamina_per_part = round(stamina/parts.len, DAMAGE_PRECISION)
|
||||
|
||||
var/brute_was = picked.brute_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)
|
||||
|
||||
brute = round(brute - (picked.brute_dam - brute_was), 0.01)
|
||||
burn = round(burn - (picked.burn_dam - burn_was), 0.01)
|
||||
stamina = round(stamina - (picked.stamina_dam - stamina_was), 0.01)
|
||||
<<<<<<< HEAD
|
||||
brute -= (picked.brute_dam - brute_was)
|
||||
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
|
||||
if(updating_health)
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
/mob/living/simple_animal/proc/adjustHealth(amount, updating_health = TRUE, forced = FALSE)
|
||||
if(!forced && (status_flags & GODMODE))
|
||||
return FALSE
|
||||
bruteloss = CLAMP(bruteloss + amount, 0, maxHealth)
|
||||
bruteloss = round(CLAMP(bruteloss + amount, 0, maxHealth),DAMAGE_PRECISION)
|
||||
if(updating_health)
|
||||
updatehealth()
|
||||
return amount
|
||||
|
||||
@@ -121,9 +121,9 @@
|
||||
if(owner && (owner.status_flags & GODMODE))
|
||||
return FALSE //godmode
|
||||
var/dmg_mlt = CONFIG_GET(number/damage_multiplier)
|
||||
brute = max(brute * dmg_mlt, 0)
|
||||
burn = max(burn * dmg_mlt, 0)
|
||||
stamina = max(stamina * dmg_mlt, 0)
|
||||
brute = round(max(brute * dmg_mlt, 0),DAMAGE_PRECISION)
|
||||
burn = round(max(burn * dmg_mlt, 0),DAMAGE_PRECISION)
|
||||
stamina = round(max(stamina * dmg_mlt, 0),DAMAGE_PRECISION)
|
||||
if(status == BODYPART_ROBOTIC) //This makes robolimbs not damageable by chems and makes it stronger
|
||||
brute = max(0, brute - 5)
|
||||
burn = max(0, burn - 4)
|
||||
@@ -144,8 +144,8 @@
|
||||
|
||||
if(total_damage > can_inflict)
|
||||
var/excess = total_damage - can_inflict
|
||||
brute = brute * (excess / total_damage)
|
||||
burn = burn * (excess / total_damage)
|
||||
brute = round(brute * (excess / total_damage),DAMAGE_PRECISION)
|
||||
burn = round(burn * (excess / total_damage),DAMAGE_PRECISION)
|
||||
|
||||
brute_dam += brute
|
||||
burn_dam += burn
|
||||
@@ -172,9 +172,9 @@
|
||||
if(only_organic && status != BODYPART_ORGANIC) //This makes robolimbs not healable by chems.
|
||||
return
|
||||
|
||||
brute_dam = max(brute_dam - brute, 0)
|
||||
burn_dam = max(burn_dam - burn, 0)
|
||||
stamina_dam = max(stamina_dam - stamina, 0)
|
||||
brute_dam = round(max(brute_dam - brute, 0), DAMAGE_PRECISION)
|
||||
burn_dam = round(max(burn_dam - burn, 0), DAMAGE_PRECISION)
|
||||
stamina_dam = round(max(stamina_dam - stamina, 0), DAMAGE_PRECISION)
|
||||
if(owner && updating_health)
|
||||
owner.updatehealth()
|
||||
return update_bodypart_damage_state()
|
||||
|
||||
Reference in New Issue
Block a user