mirror of
https://github.com/CHOMPstation/CHOMPstation.git
synced 2026-08-22 11:36:38 +01:00
Merge branch 'master' of https://github.com/PolarisSS13/Polaris into heart_damage_2
# Conflicts: # code/modules/mob/living/simple_animal/hostile/giant_spider.dm # code/modules/organs/blood.dm # code/modules/organs/internal/lungs.dm # code/modules/organs/organ.dm # code/modules/organs/organ_external.dm
This commit is contained in:
@@ -6,7 +6,6 @@ var/const/BLOOD_VOLUME_SAFE = 85
|
||||
var/const/BLOOD_VOLUME_OKAY = 75
|
||||
var/const/BLOOD_VOLUME_BAD = 60
|
||||
var/const/BLOOD_VOLUME_SURVIVE = 40
|
||||
var/const/CE_STABLE_THRESHOLD = 0.5
|
||||
|
||||
/mob/living/carbon/human/var/datum/reagents/vessel // Container for blood and BLOOD ONLY. Do not transfer other chems here.
|
||||
/mob/living/carbon/human/var/var/pale = 0 // Should affect how mob sprite is drawn, but currently doesn't.
|
||||
@@ -69,24 +68,14 @@ var/const/CE_STABLE_THRESHOLD = 0.5
|
||||
|
||||
if(!heart)
|
||||
blood_volume = 0
|
||||
if(heart.is_broken())
|
||||
blood_volume *= 0.3
|
||||
else if(heart.is_bruised())
|
||||
blood_volume *= 0.7
|
||||
else if(heart.damage)
|
||||
else if(heart.damage > 1 && heart.damage < heart.min_bruised_damage)
|
||||
blood_volume *= 0.8
|
||||
else if(heart.damage >= heart.min_bruised_damage && heart.damage < heart.min_broken_damage)
|
||||
blood_volume *= 0.6
|
||||
else if(heart.damage >= heart.min_broken_damage && heart.damage < INFINITY)
|
||||
blood_volume *= 0.3
|
||||
|
||||
//Effects of bloodloss
|
||||
|
||||
var/dmg_coef = 1 //Lower means less damage taken
|
||||
var/threshold_coef = 1 //Lower means the damage caps off lower
|
||||
|
||||
if(CE_STABLE in chem_effects)
|
||||
dmg_coef = 0.5
|
||||
threshold_coef = 0.75
|
||||
// dmg_coef = min(1, 10/chem_effects[CE_STABLE]) //TODO: add effect for increased damage
|
||||
// threshold_coef = min(dmg_coef / CE_STABLE_THRESHOLD, 1)
|
||||
|
||||
if(blood_volume >= BLOOD_VOLUME_SAFE)
|
||||
if(pale)
|
||||
pale = 0
|
||||
@@ -100,32 +89,34 @@ var/const/CE_STABLE_THRESHOLD = 0.5
|
||||
if(prob(1))
|
||||
var/word = pick("dizzy","woosey","faint")
|
||||
src << "\red You feel [word]"
|
||||
if(getOxyLoss() < 20 * threshold_coef)
|
||||
adjustOxyLoss(3 * dmg_coef)
|
||||
if(oxyloss < 20)
|
||||
oxyloss += 3
|
||||
else if(blood_volume >= BLOOD_VOLUME_BAD)
|
||||
if(!pale)
|
||||
pale = 1
|
||||
update_body()
|
||||
eye_blurry = max(eye_blurry,6)
|
||||
if(getOxyLoss() < 50 * threshold_coef)
|
||||
adjustOxyLoss(10 * dmg_coef)
|
||||
adjustOxyLoss(1 * dmg_coef)
|
||||
if(oxyloss < 50)
|
||||
oxyloss += 10
|
||||
oxyloss += 1
|
||||
if(prob(15))
|
||||
Paralyse(rand(1,3))
|
||||
var/word = pick("dizzy","woosey","faint")
|
||||
src << "\red You feel extremely [word]"
|
||||
else if(blood_volume >= BLOOD_VOLUME_SURVIVE)
|
||||
adjustOxyLoss(5 * dmg_coef)
|
||||
adjustToxLoss(3 * dmg_coef)
|
||||
oxyloss += 5
|
||||
toxloss += 3
|
||||
if(prob(15))
|
||||
var/word = pick("dizzy","woosey","faint")
|
||||
src << "\red You feel extremely [word]"
|
||||
else
|
||||
// There currently is a strange bug here. If the mob is not below -100 health
|
||||
// when death() is called, apparently they will be just fine, and this way it'll
|
||||
// spam deathgasp. Adjusting toxloss ensures the mob will stay dead.
|
||||
adjustToxLoss(300 * dmg_coef) // just to be safe!
|
||||
death()
|
||||
else //Not enough blood to survive (usually)
|
||||
if(!pale)
|
||||
pale = 1
|
||||
update_body()
|
||||
eye_blurry = max(eye_blurry,6)
|
||||
Paralyse(3)
|
||||
toxloss += 3
|
||||
oxyloss += 75 // 15 more than dexp fixes (also more than dex+dexp+tricord)
|
||||
|
||||
// Without enough blood you slowly go hungry.
|
||||
if(blood_volume < BLOOD_VOLUME_SAFE)
|
||||
@@ -153,8 +144,6 @@ var/const/CE_STABLE_THRESHOLD = 0.5
|
||||
blood_loss_divisor += 5
|
||||
else if((temp.organ_tag == BP_L_HAND) || (temp.organ_tag == BP_R_HAND) || (temp.organ_tag == BP_L_FOOT) || (temp.organ_tag == BP_R_FOOT))
|
||||
blood_loss_divisor += 10
|
||||
if(CE_STABLE in chem_effects) //Inaprov slows bloodloss
|
||||
blood_loss_divisor += 10
|
||||
if(temp.applied_pressure)
|
||||
if(ishuman(temp.applied_pressure))
|
||||
var/mob/living/carbon/human/H = temp.applied_pressure
|
||||
|
||||
@@ -24,6 +24,19 @@
|
||||
/obj/item/organ/internal/brain/digitize()
|
||||
replace_self_with(/obj/item/organ/internal/mmi_holder/robot)
|
||||
|
||||
/obj/item/organ/internal/brain/handle_germ_effects()
|
||||
. = ..() //Up should return an infection level as an integer
|
||||
if(!.) return
|
||||
|
||||
//Bacterial meningitis (more of a spine thing but 'brain infection' isn't a common thing)
|
||||
if (. >= 1)
|
||||
if(prob(1))
|
||||
owner.custom_pain("Your neck aches, and feels very stiff!",0)
|
||||
if (. >= 2)
|
||||
if(prob(1))
|
||||
owner.custom_pain("Your feel very dizzy for a moment!",0)
|
||||
owner.confused = max(owner.confused, 2)
|
||||
|
||||
/obj/item/organ/internal/brain/proc/replace_self_with(replace_path)
|
||||
var/mob/living/carbon/human/tmp_owner = owner
|
||||
qdel(src)
|
||||
|
||||
@@ -67,9 +67,22 @@
|
||||
|
||||
/obj/item/organ/internal/eyes/process() //Eye damage replaces the old eye_stat var.
|
||||
..()
|
||||
if(!owner)
|
||||
return
|
||||
if(!owner) return
|
||||
|
||||
if(is_bruised())
|
||||
owner.eye_blurry = 20
|
||||
if(is_broken())
|
||||
owner.eye_blind = 20
|
||||
owner.eye_blind = 20
|
||||
|
||||
/obj/item/organ/internal/eyes/handle_germ_effects()
|
||||
. = ..() //Up should return an infection level as an integer
|
||||
if(!.) return
|
||||
|
||||
//Conjunctivitis
|
||||
if (. >= 1)
|
||||
if(prob(1))
|
||||
owner.custom_pain("The corners of your eyes itch! It's quite frustrating.",0)
|
||||
if (. >= 2)
|
||||
if(prob(1))
|
||||
owner.custom_pain("Your eyes are watering, making it harder to see clearly for a moment.",1)
|
||||
owner.eye_blurry += 10
|
||||
|
||||
@@ -5,4 +5,18 @@
|
||||
icon_state = "heart-on"
|
||||
organ_tag = O_HEART
|
||||
parent_organ = BP_TORSO
|
||||
dead_icon = "heart-off"
|
||||
dead_icon = "heart-off"
|
||||
|
||||
|
||||
/obj/item/organ/internal/heart/handle_germ_effects()
|
||||
. = ..() //Up should return an infection level as an integer
|
||||
if(!.) return
|
||||
|
||||
//Endocarditis (very rare, usually for artificially implanted heart valves/pacemakers)
|
||||
if (. >= 1)
|
||||
if(prob(1))
|
||||
owner.custom_pain("Your chest feels uncomfortably tight!",0)
|
||||
if (. >= 2)
|
||||
if(prob(1))
|
||||
owner.custom_pain("A stabbing pain rolls through your chest!",1)
|
||||
owner.apply_damage(damage = 25, damagetype = HALLOSS, def_zone = parent_organ)
|
||||
|
||||
@@ -8,11 +8,8 @@
|
||||
parent_organ = BP_GROIN
|
||||
|
||||
/obj/item/organ/internal/kidneys/process()
|
||||
|
||||
..()
|
||||
|
||||
if(!owner)
|
||||
return
|
||||
if(!owner) return
|
||||
|
||||
// Coffee is really bad for you with busted kidneys.
|
||||
// This should probably be expanded in some way, but fucked if I know
|
||||
@@ -22,4 +19,18 @@
|
||||
if(is_bruised())
|
||||
owner.adjustToxLoss(0.1 * PROCESS_ACCURACY)
|
||||
else if(is_broken())
|
||||
owner.adjustToxLoss(0.3 * PROCESS_ACCURACY)
|
||||
owner.adjustToxLoss(0.3 * PROCESS_ACCURACY)
|
||||
|
||||
/obj/item/organ/internal/kidneys/handle_germ_effects()
|
||||
. = ..() //Up should return an infection level as an integer
|
||||
if(!.) return
|
||||
|
||||
//Pyelonephritis
|
||||
if (. >= 1)
|
||||
if(prob(1))
|
||||
owner.custom_pain("There's a stabbing pain in your lower back!",1)
|
||||
if (. >= 2)
|
||||
if(prob(1))
|
||||
owner.custom_pain("You feel extremely tired, like you can't move!",1)
|
||||
owner.m_intent = "walk"
|
||||
owner.hud_used.move_intent.icon_state = "walking"
|
||||
|
||||
@@ -7,18 +7,8 @@
|
||||
parent_organ = BP_GROIN
|
||||
|
||||
/obj/item/organ/internal/liver/process()
|
||||
|
||||
..()
|
||||
|
||||
if(!owner)
|
||||
return
|
||||
|
||||
if (germ_level > INFECTION_LEVEL_ONE)
|
||||
if(prob(1))
|
||||
owner << "<span class='danger'>Your skin itches.</span>"
|
||||
if (germ_level > INFECTION_LEVEL_TWO)
|
||||
if(prob(1))
|
||||
spawn owner.vomit()
|
||||
if(!owner) return
|
||||
|
||||
if(owner.life_tick % PROCESS_ACCURACY == 0)
|
||||
|
||||
@@ -52,4 +42,17 @@
|
||||
if(filter_effect < 3)
|
||||
owner.adjustToxLoss(owner.chem_effects[CE_ALCOHOL_TOXIC] * 0.1 * PROCESS_ACCURACY)
|
||||
else
|
||||
take_damage(owner.chem_effects[CE_ALCOHOL_TOXIC] * 0.1 * PROCESS_ACCURACY, prob(1)) // Chance to warn them
|
||||
take_damage(owner.chem_effects[CE_ALCOHOL_TOXIC] * 0.1 * PROCESS_ACCURACY, prob(1)) // Chance to warn them
|
||||
|
||||
/obj/item/organ/internal/liver/handle_germ_effects()
|
||||
. = ..() //Up should return an infection level as an integer
|
||||
if(!.) return
|
||||
|
||||
//Pyogenic Abscess
|
||||
if (. >= 1)
|
||||
if(prob(1))
|
||||
owner.custom_pain("There's a sharp pain in your upper-right abdomen!",1)
|
||||
if (. >= 2)
|
||||
if(prob(1) && owner.getToxLoss() < owner.maxHealth*0.3)
|
||||
//owner << "" //Toxins provide their own messages for pain
|
||||
owner.adjustToxLoss(5) //Not realistic to PA but there are basically no 'real' liver infections
|
||||
|
||||
@@ -13,10 +13,6 @@
|
||||
if(!owner)
|
||||
return
|
||||
|
||||
if (germ_level > INFECTION_LEVEL_ONE)
|
||||
if(prob(5))
|
||||
owner.emote("cough") //respitory tract infection
|
||||
|
||||
if(is_bruised())
|
||||
if(prob(4))
|
||||
spawn owner.emote("me", 1, "coughs up blood!")
|
||||
@@ -28,5 +24,18 @@
|
||||
/obj/item/organ/internal/lungs/proc/rupture()
|
||||
var/obj/item/organ/external/parent = owner.get_organ(parent_organ)
|
||||
if(istype(parent))
|
||||
owner.custom_pain("You feel a stabbing pain in your [parent.name]!", 50)
|
||||
bruise()
|
||||
owner.custom_pain("You feel a stabbing pain in your [parent.name]!", 1)
|
||||
bruise()
|
||||
|
||||
/obj/item/organ/internal/lungs/handle_germ_effects()
|
||||
. = ..() //Up should return an infection level as an integer
|
||||
if(!.) return
|
||||
|
||||
//Bacterial pneumonia
|
||||
if (. >= 1)
|
||||
if(prob(5))
|
||||
owner.emote("cough")
|
||||
if (. >= 2)
|
||||
if(prob(1))
|
||||
owner.custom_pain("You suddenly feel short of breath and take a sharp, painful breath!",1)
|
||||
owner.adjustOxyLoss(30) //Look it's hard to simulate low O2 perfusion okay
|
||||
|
||||
@@ -47,4 +47,16 @@
|
||||
if(dead_icon)
|
||||
dead_icon = "[initial(dead_icon)]_assisted"
|
||||
|
||||
// Brain is defined in brain.dm
|
||||
// Brain is defined in brain.dm
|
||||
/obj/item/organ/internal/handle_germ_effects()
|
||||
. = ..() //Should be an interger value for infection level
|
||||
if(!.) return
|
||||
|
||||
var/antibiotics = owner.reagents.get_reagent_amount("spaceacillin")
|
||||
|
||||
if(. >= 2 && antibiotics < 5) //INFECTION_LEVEL_TWO
|
||||
if (prob(3))
|
||||
take_damage(1,silent=prob(30))
|
||||
|
||||
//if(. >= 3 && antibiotics < 30) //INFECTION_LEVEL_THREE, others are handled on each specific organ
|
||||
//Nothing that generic internal organs do for this
|
||||
|
||||
@@ -139,8 +139,16 @@ var/list/organ_cache = list()
|
||||
|
||||
/obj/item/organ/proc/handle_germ_effects()
|
||||
//** Handle the effects of infections
|
||||
if(robotic >= ORGAN_ROBOT) //Just in case!
|
||||
germ_level = 0
|
||||
return 0
|
||||
|
||||
var/antibiotics = owner.reagents.get_reagent_amount("spaceacillin")
|
||||
|
||||
if((status & ORGAN_DEAD) && antibiotics < 30) //Sepsis from 'dead' organs
|
||||
var/sepsis_severity = 1 + round((germ_level - INFECTION_LEVEL_THREE)/200,0.25) //1 Tox plus a little based on germ level
|
||||
owner.adjustToxLoss(sepsis_severity)
|
||||
|
||||
if (germ_level > 0 && germ_level < INFECTION_LEVEL_ONE/2 && prob(30))
|
||||
germ_level--
|
||||
|
||||
@@ -150,17 +158,20 @@ var/list/organ_cache = list()
|
||||
germ_level++
|
||||
|
||||
if(germ_level >= INFECTION_LEVEL_ONE)
|
||||
var/fever_temperature = (owner.species.heat_level_1 - owner.species.body_temperature - 5)* min(germ_level/INFECTION_LEVEL_TWO, 1) + owner.species.body_temperature
|
||||
owner.bodytemperature += between(0, (fever_temperature - T20C)/BODYTEMP_COLD_DIVISOR + 1, fever_temperature - owner.bodytemperature)
|
||||
. = 1 //Organ qualifies for effect-specific processing
|
||||
//var/fever_temperature = (owner.species.heat_level_1 - owner.species.body_temperature - 5)* min(germ_level/INFECTION_LEVEL_TWO, 1) + owner.species.body_temperature
|
||||
//owner.bodytemperature += between(0, (fever_temperature - T20C)/BODYTEMP_COLD_DIVISOR + 1, fever_temperature - owner.bodytemperature)
|
||||
var/fever_temperature = owner.species.heat_discomfort_level * 1.10 //Heat discomfort level plus 10%
|
||||
if(owner.bodytemperature < fever_temperature)
|
||||
owner.bodytemperature += min(0.2,(fever_temperature - owner.bodytemperature) / 10) //Will usually climb by 0.2, else 10% of the difference if less
|
||||
|
||||
if (germ_level >= INFECTION_LEVEL_TWO)
|
||||
var/obj/item/organ/external/parent = owner.get_organ(parent_organ)
|
||||
//spread germs
|
||||
if (antibiotics < 5 && parent.germ_level < germ_level && ( parent.germ_level < INFECTION_LEVEL_ONE*2 || prob(30) ))
|
||||
parent.germ_level++
|
||||
. = 2 //Organ qualifies for effect-specific processing
|
||||
//No particular effect on the general 'organ' at 3
|
||||
|
||||
if (prob(3)) //about once every 30 seconds
|
||||
take_damage(1,silent=prob(30))
|
||||
if (germ_level >= INFECTION_LEVEL_THREE && antibiotics < 30)
|
||||
. = 3 //Organ qualifies for effect-specific processing
|
||||
germ_level++ //Germ_level increases without overdose of antibiotics
|
||||
|
||||
/obj/item/organ/proc/handle_rejection()
|
||||
// Process unsuitable transplants. TODO: consider some kind of
|
||||
@@ -245,7 +256,7 @@ var/list/organ_cache = list()
|
||||
if(owner && parent_organ && amount > 0)
|
||||
var/obj/item/organ/external/parent = owner.get_organ(parent_organ)
|
||||
if(parent && !silent)
|
||||
owner.custom_pain("Something inside your [parent.name] hurts a lot.", amount)
|
||||
owner.custom_pain("Something inside your [parent.name] hurts a lot.", 1)
|
||||
|
||||
/obj/item/organ/proc/bruise()
|
||||
damage = max(damage, min_bruised_damage)
|
||||
@@ -270,9 +281,13 @@ var/list/organ_cache = list()
|
||||
return
|
||||
switch (severity)
|
||||
if (1)
|
||||
take_damage(rand(3, 7))
|
||||
take_damage(rand(6,12))
|
||||
if (2)
|
||||
take_damage(rand(1, 3))
|
||||
take_damage(rand(4,8))
|
||||
if (3)
|
||||
take_damage(rand(3,6))
|
||||
if (4)
|
||||
take_damage(rand(1,4))
|
||||
|
||||
/obj/item/organ/proc/removed(var/mob/living/user)
|
||||
|
||||
|
||||
@@ -102,11 +102,19 @@
|
||||
/obj/item/organ/external/emp_act(severity)
|
||||
if(!(robotic >= ORGAN_ROBOT))
|
||||
return
|
||||
var/burn_damage = 0
|
||||
switch (severity)
|
||||
if (1)
|
||||
take_damage(rand(6, 10))
|
||||
burn_damage += rand(8, 13)
|
||||
if (2)
|
||||
take_damage(rand(2, 6))
|
||||
burn_damage += rand(6, 9)
|
||||
if(3)
|
||||
burn_damage += rand(4, 7)
|
||||
if(4)
|
||||
burn_damage += rand(1, 5)
|
||||
|
||||
if(burn_damage)
|
||||
take_damage(0, burn_damage)
|
||||
|
||||
/obj/item/organ/external/attack_self(var/mob/living/user)
|
||||
if(!contents.len)
|
||||
@@ -243,12 +251,12 @@
|
||||
return (vital || (robotic >= ORGAN_ROBOT) || brute_dam + burn_dam + additional_damage < max_damage)
|
||||
|
||||
/obj/item/organ/external/take_damage(brute, burn, sharp, edge, used_weapon = null, list/forbidden_limbs = list())
|
||||
brute = round(brute * brute_mod, 0.1)
|
||||
burn = round(burn * burn_mod, 0.1)
|
||||
|
||||
if((brute <= 0) && (burn <= 0))
|
||||
return 0
|
||||
|
||||
brute *= brute_mod
|
||||
burn *= burn_mod
|
||||
|
||||
// High brute damage or sharp objects may damage internal organs
|
||||
if(internal_organs && (brute_dam >= max_damage || (((sharp && brute >= 5) || brute >= 10) && prob(5))))
|
||||
// Damage an internal organ
|
||||
@@ -479,7 +487,7 @@ This function completely restores a damaged organ to perfect condition.
|
||||
if((damage > 15) && (type != BURN) && (local_damage > 30) && prob(damage) && (robotic < ORGAN_ROBOT))
|
||||
var/datum/wound/internal_bleeding/I = new (min(damage - 15, 15))
|
||||
wounds += I
|
||||
owner.custom_pain("You feel something rip in your [name]!", 50)
|
||||
owner.custom_pain("You feel something rip in your [name]!", 1)
|
||||
|
||||
//Burn damage can cause fluid loss due to blistering and cook-off
|
||||
if((damage > 5 || damage + burn_dam >= 15) && type == BURN && (robotic < ORGAN_ROBOT))
|
||||
@@ -622,13 +630,12 @@ Note that amputating the affected organ does in fact remove the infection from t
|
||||
break //limit increase to a maximum of one per second
|
||||
|
||||
/obj/item/organ/external/handle_germ_effects()
|
||||
|
||||
if(germ_level < INFECTION_LEVEL_TWO)
|
||||
return ..()
|
||||
. = ..() //May be null or an infection level, if null then no specific processing needed here
|
||||
if(!.) return
|
||||
|
||||
var/antibiotics = owner.reagents.get_reagent_amount("spaceacillin")
|
||||
|
||||
if(germ_level >= INFECTION_LEVEL_TWO)
|
||||
if(. >= 2 && antibiotics < 5) //INFECTION_LEVEL_TWO
|
||||
//spread the infection to internal organs
|
||||
var/obj/item/organ/target_organ = null //make internal organs become infected one at a time instead of all at once
|
||||
for (var/obj/item/organ/I in internal_organs)
|
||||
@@ -660,14 +667,13 @@ Note that amputating the affected organ does in fact remove the infection from t
|
||||
if (parent.germ_level < INFECTION_LEVEL_ONE*2 || prob(30))
|
||||
parent.germ_level++
|
||||
|
||||
if(germ_level >= INFECTION_LEVEL_THREE && antibiotics < 30) //overdosing is necessary to stop severe infections
|
||||
if(. >= 3 && antibiotics < 30) //INFECTION_LEVEL_THREE
|
||||
if (!(status & ORGAN_DEAD))
|
||||
status |= ORGAN_DEAD
|
||||
owner << "<span class='notice'>You can't feel your [name] anymore...</span>"
|
||||
owner.update_body(1)
|
||||
|
||||
germ_level++
|
||||
owner.adjustToxLoss(1)
|
||||
for (var/obj/item/organ/external/child in children)
|
||||
child.germ_level += 110 //Burst of infection from a parent organ becoming necrotic
|
||||
|
||||
//Updating wounds. Handles wound natural I had some free spachealing, internal bleedings and infections
|
||||
/obj/item/organ/external/proc/update_wounds()
|
||||
@@ -699,7 +705,7 @@ Note that amputating the affected organ does in fact remove the infection from t
|
||||
|
||||
owner.vessel.remove_reagent("blood", wound_update_accuracy * W.damage/40) //line should possibly be moved to handle_blood, so all the bleeding stuff is in one place.
|
||||
if(prob(1 * wound_update_accuracy))
|
||||
owner.custom_pain("You feel a stabbing pain in your [name]!", 50)
|
||||
owner.custom_pain("You feel a stabbing pain in your [name]!",1)
|
||||
|
||||
// slow healing
|
||||
var/heal_amt = 0
|
||||
|
||||
@@ -70,30 +70,30 @@ var/const/standard_monitor_styles = "blank=ipc_blank;\
|
||||
parts = list(BP_HEAD)
|
||||
monitor_styles = standard_monitor_styles
|
||||
|
||||
/datum/robolimb/hesphiastos
|
||||
company = "Hesphiastos"
|
||||
/datum/robolimb/hephaestus
|
||||
company = "Hephaestus"
|
||||
desc = "This limb has a militaristic black and green casing with gold stripes."
|
||||
icon = 'icons/mob/human_races/cyberlimbs/hesphiastos/hesphiastos_main.dmi'
|
||||
icon = 'icons/mob/human_races/cyberlimbs/hephaestus/hephaestus_main.dmi'
|
||||
unavailable_to_build = 1
|
||||
|
||||
/datum/robolimb/hesphiastos_alt1
|
||||
company = "Hesphiastos - Frontier"
|
||||
desc = "A rugged prosthetic head featuring the standard Hesphiastos theme, a visor and an external display."
|
||||
icon = 'icons/mob/human_races/cyberlimbs/hesphiastos/hesphiastos_alt1.dmi'
|
||||
/datum/robolimb/hephaestus_alt1
|
||||
company = "Hephaistos - Frontier"
|
||||
desc = "A rugged prosthetic head featuring the standard Hephaestus theme, a visor and an external display."
|
||||
icon = 'icons/mob/human_races/cyberlimbs/hephaestus/hephaestus_alt1.dmi'
|
||||
unavailable_to_build = 1
|
||||
parts = list(BP_HEAD)
|
||||
monitor_styles = "blank=hesphiastos_alt_off;\
|
||||
pink=hesphiastos_alt_pink;\
|
||||
orange=hesphiastos_alt_orange;\
|
||||
goggles=hesphiastos_alt_goggles;\
|
||||
scroll=hesphiastos_alt_scroll;\
|
||||
rgb=hesphiastos_alt_rgb;\
|
||||
rainbow=hesphiastos_alt_rainbow"
|
||||
monitor_styles = "blank=hephaestus_alt_off;\
|
||||
pink=hephaestus_alt_pink;\
|
||||
orange=hephaestus_alt_orange;\
|
||||
goggles=hephaestus_alt_goggles;\
|
||||
scroll=hephaestus_alt_scroll;\
|
||||
rgb=hephaestus_alt_rgb;\
|
||||
rainbow=hephaestus_alt_rainbow"
|
||||
|
||||
/datum/robolimb/hesphiastos_monitor
|
||||
company = "Hesphiastos Monitor"
|
||||
desc = "Hesphiastos' unique spin on a popular prosthetic head model. It looks rugged and sturdy."
|
||||
icon = 'icons/mob/human_races/cyberlimbs/hesphiastos/hesphiastos_monitor.dmi'
|
||||
/datum/robolimb/hephaistos_monitor
|
||||
company = "Hephaestus Monitor"
|
||||
desc = "Hephaestus' unique spin on a popular prosthetic head model. It looks rugged and sturdy."
|
||||
icon = 'icons/mob/human_races/cyberlimbs/hephaestus/hephaestus_monitor.dmi'
|
||||
unavailable_to_build = 1
|
||||
parts = list(BP_HEAD)
|
||||
monitor_styles = standard_monitor_styles
|
||||
@@ -112,6 +112,13 @@ var/const/standard_monitor_styles = "blank=ipc_blank;\
|
||||
unavailable_to_build = 1
|
||||
parts = list(BP_HEAD)
|
||||
|
||||
/datum/robolimb/morpheus_alt2
|
||||
company = "Morpheus - Skeleton Crew"
|
||||
desc = "This limb is simple and functional; it's basically just a case for a brain."
|
||||
icon = 'icons/mob/human_races/cyberlimbs/morpheus/morpheus_alt2.dmi'
|
||||
unavailable_to_build = 1
|
||||
parts = list(BP_HEAD)
|
||||
|
||||
/datum/robolimb/veymed
|
||||
company = "Vey-Med"
|
||||
desc = "This high quality limb is nearly indistinguishable from an organic one."
|
||||
@@ -183,8 +190,8 @@ var/const/standard_monitor_styles = "blank=ipc_blank;\
|
||||
/obj/item/weapon/disk/limb/bishop
|
||||
company = "Bishop"
|
||||
|
||||
/obj/item/weapon/disk/limb/hesphiastos
|
||||
company = "Hesphiastos"
|
||||
/obj/item/weapon/disk/limb/hephaestus
|
||||
company = "Hephaestus"
|
||||
|
||||
/obj/item/weapon/disk/limb/morpheus
|
||||
company = "Morpheus"
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
/obj/item/organ/internal/cell
|
||||
name = "microbattery"
|
||||
desc = "A small, powerful cell for use in fully prosthetic bodies."
|
||||
icon = 'icons/obj/power.dmi'
|
||||
icon_state = "scell"
|
||||
organ_tag = "cell"
|
||||
parent_organ = BP_TORSO
|
||||
@@ -27,6 +26,7 @@
|
||||
vital = 1
|
||||
var/brain_type = /obj/item/device/mmi
|
||||
var/obj/item/device/mmi/stored_mmi
|
||||
robotic = ORGAN_ASSISTED
|
||||
|
||||
/obj/item/organ/internal/mmi_holder/Destroy()
|
||||
if(stored_mmi && (stored_mmi.loc == src))
|
||||
@@ -84,7 +84,7 @@
|
||||
/obj/item/organ/internal/mmi_holder/posibrain
|
||||
name = "positronic brain interface"
|
||||
brain_type = /obj/item/device/mmi/digital/posibrain
|
||||
|
||||
robotic = ORGAN_ROBOT
|
||||
|
||||
/obj/item/organ/internal/mmi_holder/posibrain/update_from_mmi()
|
||||
..()
|
||||
@@ -94,6 +94,7 @@
|
||||
/obj/item/organ/internal/mmi_holder/robot
|
||||
name = "digital brain interface"
|
||||
brain_type = /obj/item/device/mmi/digital/robot
|
||||
robotic = ORGAN_ROBOT
|
||||
|
||||
/obj/item/organ/internal/mmi_holder/robot/update_from_mmi()
|
||||
..()
|
||||
|
||||
@@ -28,6 +28,19 @@
|
||||
// Give them a new cell.
|
||||
owner.internal_organs_by_name["cell"] = new /obj/item/organ/internal/cell(owner,1)
|
||||
|
||||
/obj/item/organ/external/chest/handle_germ_effects()
|
||||
. = ..() //Should return an infection level
|
||||
if(!. || (status & ORGAN_DEAD)) return //If it's already above 2, it's become necrotic and we can just not worry about it.
|
||||
|
||||
//Staph infection symptoms for CHEST
|
||||
if (. >= 1)
|
||||
if(prob(.))
|
||||
owner.custom_pain("Your [name] [pick("aches","itches","throbs")]!",0)
|
||||
|
||||
if (. >= 2)
|
||||
if(prob(.))
|
||||
owner.custom_pain("A jolt of pain surges through your [name]!",1)
|
||||
|
||||
/obj/item/organ/external/groin
|
||||
name = "lower body"
|
||||
organ_tag = BP_GROIN
|
||||
@@ -45,6 +58,19 @@
|
||||
cannot_amputate = 1
|
||||
organ_rel_size = 30
|
||||
|
||||
/obj/item/organ/external/groin/handle_germ_effects()
|
||||
. = ..() //Should return an infection level
|
||||
if(!. || (status & ORGAN_DEAD)) return //If it's already above 2, it's become necrotic and we can just not worry about it.
|
||||
|
||||
//Staph infection symptoms for GROIN
|
||||
if (. >= 1)
|
||||
if(prob(.))
|
||||
owner.custom_pain("Your [name] [pick("aches","itches","throbs")]!",0)
|
||||
|
||||
if (. >= 2)
|
||||
if(prob(.))
|
||||
owner.custom_pain("A jolt of pain surges through your [name]!",1)
|
||||
|
||||
/obj/item/organ/external/arm
|
||||
organ_tag = "l_arm"
|
||||
name = "left arm"
|
||||
@@ -60,6 +86,23 @@
|
||||
force = 7
|
||||
throwforce = 10
|
||||
|
||||
/obj/item/organ/external/arm/handle_germ_effects()
|
||||
. = ..() //Should return an infection level
|
||||
if(!. || (status & ORGAN_DEAD)) return //If it's already above 2, it's become necrotic and we can just not worry about it.
|
||||
|
||||
//Staph infection symptoms for ARM
|
||||
if (. >= 1)
|
||||
if(prob(.))
|
||||
owner.custom_pain("Your [name] [pick("aches","itches","throbs")]!",0)
|
||||
|
||||
if (. >= 2)
|
||||
if(prob(.))
|
||||
owner.custom_pain("A jolt of pain surges through your [name]!",1)
|
||||
if(organ_tag == "l_arm") //Specific level 2 'feature
|
||||
owner.drop_l_hand()
|
||||
else if(organ_tag == "r_arm")
|
||||
owner.drop_r_hand()
|
||||
|
||||
/obj/item/organ/external/arm/right
|
||||
organ_tag = "r_arm"
|
||||
name = "right arm"
|
||||
@@ -84,6 +127,20 @@
|
||||
force = 10
|
||||
throwforce = 12
|
||||
|
||||
/obj/item/organ/external/leg/handle_germ_effects()
|
||||
. = ..() //Should return an infection level
|
||||
if(!. || (status & ORGAN_DEAD)) return //If it's already above 2, it's become necrotic and we can just not worry about it.
|
||||
|
||||
//Staph infection symptoms for LEG
|
||||
if (. >= 1)
|
||||
if(prob(.))
|
||||
owner.custom_pain("Your [name] [pick("aches","itches","throbs")]!",0)
|
||||
|
||||
if (. >= 2)
|
||||
if(prob(.))
|
||||
owner.custom_pain("A jolt of pain surges through your [name]!",1)
|
||||
owner.Weaken(5)
|
||||
|
||||
/obj/item/organ/external/leg/right
|
||||
organ_tag = "r_leg"
|
||||
name = "right leg"
|
||||
@@ -114,6 +171,20 @@
|
||||
owner.drop_from_inventory(owner.shoes)
|
||||
..()
|
||||
|
||||
/obj/item/organ/external/foot/handle_germ_effects()
|
||||
. = ..() //Should return an infection level
|
||||
if(!. || (status & ORGAN_DEAD)) return //If it's already above 2, it's become necrotic and we can just not worry about it.
|
||||
|
||||
//Staph infection symptoms for FOOT
|
||||
if (. >= 1)
|
||||
if(prob(.))
|
||||
owner.custom_pain("Your [name] [pick("aches","itches","throbs")]!",0)
|
||||
|
||||
if (. >= 2)
|
||||
if(prob(.))
|
||||
owner.custom_pain("A jolt of pain surges through your [name]!",1)
|
||||
owner.Weaken(5)
|
||||
|
||||
/obj/item/organ/external/foot/right
|
||||
organ_tag = "r_foot"
|
||||
name = "right foot"
|
||||
@@ -146,6 +217,23 @@
|
||||
owner.drop_from_inventory(owner.gloves)
|
||||
..()
|
||||
|
||||
/obj/item/organ/external/hand/handle_germ_effects()
|
||||
. = ..() //Should return an infection level
|
||||
if(!. || (status & ORGAN_DEAD)) return //If it's already above 2, it's become necrotic and we can just not worry about it.
|
||||
|
||||
//Staph infection symptoms for HAND
|
||||
if (. >= 1)
|
||||
if(prob(.))
|
||||
owner.custom_pain("Your [name] [pick("aches","itches","throbs")]!",0)
|
||||
|
||||
if (. >= 2)
|
||||
if(prob(.))
|
||||
owner.custom_pain("A jolt of pain surges through your [name]!",1)
|
||||
if(organ_tag == "l_hand") //Specific level 2 'feature
|
||||
owner.drop_l_hand()
|
||||
else if(organ_tag == "r_hand")
|
||||
owner.drop_r_hand()
|
||||
|
||||
/obj/item/organ/external/hand/right
|
||||
organ_tag = "r_hand"
|
||||
name = "right hand"
|
||||
@@ -202,6 +290,20 @@
|
||||
if (burn_dam > 40)
|
||||
disfigure("burn")
|
||||
|
||||
/obj/item/organ/external/head/handle_germ_effects()
|
||||
. = ..() //Should return an infection level
|
||||
if(!. || (status & ORGAN_DEAD)) return //If it's already above 2, it's become necrotic and we can just not worry about it.
|
||||
|
||||
//Staph infection symptoms for HEAD
|
||||
if (. >= 1)
|
||||
if(prob(.))
|
||||
owner.custom_pain("Your [name] [pick("aches","itches","throbs")]!",0)
|
||||
|
||||
if (. >= 2)
|
||||
if(prob(.))
|
||||
owner.custom_pain("A jolt of pain surges through your [name]!",1)
|
||||
owner.eye_blurry += 20 //Specific level 2 'feature
|
||||
|
||||
/obj/item/organ/external/head/skrell
|
||||
eye_icon = "skrell_eyes_s"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user