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
//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
for(var/datum/organ/external/O in organs)
if(ignore_inorganic && !O.is_organic())
continue
amount += O.brute_dam
return amount
/mob/living/carbon/human/getFireLoss()
/mob/living/carbon/human/getFireLoss(var/ignore_inorganic = FALSE)
var/amount = 0
for(var/datum/organ/external/O in organs)
if(ignore_inorganic && !O.is_organic())
continue
amount += O.burn_dam
return amount
@@ -170,11 +174,13 @@
return parts
//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()
for(var/datum/organ/external/O in organs)
if(!O.is_existing())
continue
if(ignore_inorganics && !O.is_organic())
continue
if(O.brute_dam + O.burn_dam < O.max_damage)
parts += O
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.
//It automatically updates damage overlays if necesary
//It automatically updates health status
/mob/living/carbon/human/take_organ_damage(var/brute, var/burn, var/sharp = 0, var/edge = 0)
var/list/datum/organ/external/parts = get_damageable_organs()
/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(ignore_inorganics)
if(!parts.len)
return
var/datum/organ/external/picked = pick(parts)

View File

@@ -478,7 +478,7 @@
src.updatehealth()
// 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)
return 0 //godmode
if(flags & INVULNERABLE)

View File

@@ -413,7 +413,7 @@
var/mob/living/carbon/human/H = M
if(H.species.name == "Grey")
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)
@@ -923,7 +923,7 @@
if(isvampire(H))
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>")
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
else
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(..())
return 1
M.take_organ_damage(REM, 0)
M.take_organ_damage(REM, 0, ignore_inorganics = TRUE)
/datum/reagent/fluorine
name = "Fluorine"
@@ -2254,7 +2254,7 @@
return 1
if(prob(33))
M.take_organ_damage(REM, 0)
M.take_organ_damage(REM, 0, ignore_inorganics = TRUE)
M.adjustOxyLoss(3)
if(prob(20))
M.emote("gasp")
@@ -2505,7 +2505,7 @@
M.radiation = max(M.radiation - 7 * REM, 0)
M.adjustToxLoss(-REM)
if(prob(15))
M.take_organ_damage(1, 0)
M.take_organ_damage(1, 0, ignore_inorganics = TRUE)
/datum/reagent/lithotorcrazine
name = "Lithotorcrazine"
@@ -3089,7 +3089,7 @@
if(ishuman(M))
var/mob/living/carbon/human/H = M
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"))
H.adjustOxyLoss(-5)
H.heal_organ_damage(5, 5)