mirror of
https://github.com/vgstation-coders/vgstation13.git
synced 2025-12-10 02:16:05 +00:00
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:
committed by
Pieter-Jan Briers
parent
46f6bce256
commit
0f5f11f873
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user