mirror of
https://github.com/vgstation-coders/vgstation13.git
synced 2025-12-10 18:32:03 +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
|
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)
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user