robotic limb related fixes (#16920)

* mednanobots now ignore robotic limbs. Arithrazine/chlorine/anything that deals damage while in-system now ignore robotic limbs.

* standardized from 1/0 to FALSE/TRUE

* Could've sworn that would have worked, but in testing it on a martian it runtimed. Damn.
This commit is contained in:
MadmanMartian
2017-12-31 10:02:17 +00:00
committed by Pieter-Jan Briers
parent 46f6bce256
commit 0f5f11f873
3 changed files with 18 additions and 12 deletions

View File

@@ -34,15 +34,19 @@
return 0 return 0
//These procs fetch a cumulative total damage from all organs //These procs fetch a cumulative total damage from all organs
/mob/living/carbon/human/getBruteLoss() /mob/living/carbon/human/getBruteLoss(var/ignore_inorganic = FALSE)
var/amount = 0 var/amount = 0
for(var/datum/organ/external/O in organs) for(var/datum/organ/external/O in organs)
if(ignore_inorganic && !O.is_organic())
continue
amount += O.brute_dam amount += O.brute_dam
return amount return amount
/mob/living/carbon/human/getFireLoss() /mob/living/carbon/human/getFireLoss(var/ignore_inorganic = FALSE)
var/amount = 0 var/amount = 0
for(var/datum/organ/external/O in organs) for(var/datum/organ/external/O in organs)
if(ignore_inorganic && !O.is_organic())
continue
amount += O.burn_dam amount += O.burn_dam
return amount return amount
@@ -170,11 +174,13 @@
return parts return parts
//Returns a list of damageable organs //Returns a list of damageable organs
/mob/living/carbon/human/proc/get_damageable_organs() /mob/living/carbon/human/proc/get_damageable_organs(var/ignore_inorganics = FALSE)
var/list/datum/organ/external/parts = list() var/list/datum/organ/external/parts = list()
for(var/datum/organ/external/O in organs) for(var/datum/organ/external/O in organs)
if(!O.is_existing()) if(!O.is_existing())
continue continue
if(ignore_inorganics && !O.is_organic())
continue
if(O.brute_dam + O.burn_dam < O.max_damage) if(O.brute_dam + O.burn_dam < O.max_damage)
parts += O parts += O
return parts return parts
@@ -199,8 +205,8 @@ In most cases it makes more sense to use apply_damage() instead! And make sure t
//Damages ONE external organ, organ gets randomly selected from damagable ones. //Damages ONE external organ, organ gets randomly selected from damagable ones.
//It automatically updates damage overlays if necesary //It automatically updates damage overlays if necesary
//It automatically updates health status //It automatically updates health status
/mob/living/carbon/human/take_organ_damage(var/brute, var/burn, var/sharp = 0, var/edge = 0) /mob/living/carbon/human/take_organ_damage(var/brute, var/burn, var/sharp = 0, var/edge = 0, var/ignore_inorganics = FALSE)
var/list/datum/organ/external/parts = get_damageable_organs() var/list/datum/organ/external/parts = get_damageable_organs(ignore_inorganics)
if(!parts.len) if(!parts.len)
return return
var/datum/organ/external/picked = pick(parts) var/datum/organ/external/picked = pick(parts)

View File

@@ -478,7 +478,7 @@
src.updatehealth() src.updatehealth()
// damage ONE external organ, organ gets randomly selected from damaged ones. // damage ONE external organ, organ gets randomly selected from damaged ones.
/mob/living/proc/take_organ_damage(var/brute, var/burn) /mob/living/proc/take_organ_damage(var/brute, var/burn, var/ignore_inorganics = FALSE)
if(status_flags & GODMODE) if(status_flags & GODMODE)
return 0 //godmode return 0 //godmode
if(flags & INVULNERABLE) if(flags & INVULNERABLE)

View File

@@ -413,7 +413,7 @@
var/mob/living/carbon/human/H = M var/mob/living/carbon/human/H = M
if(H.species.name == "Grey") if(H.species.name == "Grey")
M.adjustToxLoss(REM) M.adjustToxLoss(REM)
M.take_organ_damage(0, REM) M.take_organ_damage(0, REM, ignore_inorganics = TRUE)
/datum/reagent/water/reaction_mob(var/mob/living/M, var/method = TOUCH, var/volume) /datum/reagent/water/reaction_mob(var/mob/living/M, var/method = TOUCH, var/volume)
@@ -923,7 +923,7 @@
if(isvampire(H)) if(isvampire(H))
if(!(VAMP_MATURE in H.mind.vampire.powers)) if(!(VAMP_MATURE in H.mind.vampire.powers))
to_chat(H, "<span class='danger'>A freezing liquid permeates your bloodstream. Your vampiric powers fade and your insides burn.</span>") to_chat(H, "<span class='danger'>A freezing liquid permeates your bloodstream. Your vampiric powers fade and your insides burn.</span>")
H.take_organ_damage(0, 5) //FIRE H.take_organ_damage(0, 5) //FIRE, MAGIC FIRE THAT BURNS ROBOTIC LIMBS TOO!
H.mind.vampire.smitecounter += 10 //50 units to catch on fire. Generally you'll get fucked up quickly H.mind.vampire.smitecounter += 10 //50 units to catch on fire. Generally you'll get fucked up quickly
else else
to_chat(H, "<span class='warning'>A freezing liquid permeates your bloodstream. Your vampiric powers counter most of the damage.</span>") to_chat(H, "<span class='warning'>A freezing liquid permeates your bloodstream. Your vampiric powers counter most of the damage.</span>")
@@ -1155,7 +1155,7 @@
if(..()) if(..())
return 1 return 1
M.take_organ_damage(REM, 0) M.take_organ_damage(REM, 0, ignore_inorganics = TRUE)
/datum/reagent/fluorine /datum/reagent/fluorine
name = "Fluorine" name = "Fluorine"
@@ -2254,7 +2254,7 @@
return 1 return 1
if(prob(33)) if(prob(33))
M.take_organ_damage(REM, 0) M.take_organ_damage(REM, 0, ignore_inorganics = TRUE)
M.adjustOxyLoss(3) M.adjustOxyLoss(3)
if(prob(20)) if(prob(20))
M.emote("gasp") M.emote("gasp")
@@ -2505,7 +2505,7 @@
M.radiation = max(M.radiation - 7 * REM, 0) M.radiation = max(M.radiation - 7 * REM, 0)
M.adjustToxLoss(-REM) M.adjustToxLoss(-REM)
if(prob(15)) if(prob(15))
M.take_organ_damage(1, 0) M.take_organ_damage(1, 0, ignore_inorganics = TRUE)
/datum/reagent/lithotorcrazine /datum/reagent/lithotorcrazine
name = "Lithotorcrazine" name = "Lithotorcrazine"
@@ -3089,7 +3089,7 @@
if(ishuman(M)) if(ishuman(M))
var/mob/living/carbon/human/H = M var/mob/living/carbon/human/H = M
if(H.species.name != "Diona") if(H.species.name != "Diona")
if(H.getOxyLoss()>0 || H.getBruteLoss()>0 || H.getToxLoss()>0 || H.getFireLoss()>0 || H.getCloneLoss()>0) if(H.getOxyLoss()>0 || H.getBruteLoss(ignore_inorganic = TRUE)>0 || H.getToxLoss()>0 || H.getFireLoss(ignore_inorganic = TRUE)>0 || H.getCloneLoss()>0)
if(holder.has_reagent("mednanobots")) if(holder.has_reagent("mednanobots"))
H.adjustOxyLoss(-5) H.adjustOxyLoss(-5)
H.heal_organ_damage(5, 5) H.heal_organ_damage(5, 5)