mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-26 22:50:26 +01:00
Removes shitty "status" variable on organs, makes them use organ_flags instead (#76350)
## About The Pull Request Title. ## Why It's Good For The Game Seriously this shit pisses me off, why are ORGAN_SYNTHETIC and ORGAN_ROBOTIC two different things? ## Changelog not applicable unless i fucked up --------- Co-authored-by: Time-Green <7501474+Time-Green@users.noreply.github.com>
This commit is contained in:
co-authored by
Time-Green
parent
b090e404dd
commit
82cf9ea499
@@ -58,12 +58,6 @@
|
||||
#define RESPIRATION_OXYGEN (1 << 0)
|
||||
#define RESPIRATION_N2 (1 << 1)
|
||||
#define RESPIRATION_PLASMA (1 << 2)
|
||||
|
||||
//Organ defines for carbon mobs
|
||||
#define ORGAN_ORGANIC 1
|
||||
#define ORGAN_ROBOTIC 2
|
||||
#define ORGAN_MINERAL 3 // Used for the plasmaman liver
|
||||
|
||||
#define DEFAULT_BODYPART_ICON_ORGANIC 'icons/mob/species/human/bodyparts_greyscale.dmi'
|
||||
#define DEFAULT_BODYPART_ICON_ROBOTIC 'icons/mob/augmentation/augments.dmi'
|
||||
|
||||
|
||||
+30
-16
@@ -1,20 +1,34 @@
|
||||
/// Helper to figure out if an organ is organic
|
||||
#define IS_ORGANIC_ORGAN(organ) (organ.organ_flags & ORGAN_ORGANIC)
|
||||
/// Helper to figure out if an organ is robotic
|
||||
#define IS_ROBOTIC_ORGAN(organ) (organ.organ_flags & ORGAN_ROBOTIC)
|
||||
|
||||
// Flags for the organ_flags var on /obj/item/organ
|
||||
///Synthetic organs, or cybernetic organs. Reacts to EMPs and don't deteriorate or heal
|
||||
#define ORGAN_SYNTHETIC (1<<0)
|
||||
///Frozen organs, don't deteriorate
|
||||
#define ORGAN_FROZEN (1<<1)
|
||||
///Failing organs perform damaging effects until replaced or fixed
|
||||
#define ORGAN_FAILING (1<<2)
|
||||
///Currently only the brain
|
||||
#define ORGAN_VITAL (1<<3)
|
||||
///is a snack? :D
|
||||
#define ORGAN_EDIBLE (1<<4)
|
||||
///Synthetic organ affected by an EMP. Deteriorates over time.
|
||||
#define ORGAN_SYNTHETIC_EMP (1<<5)
|
||||
///Can't be removed using surgery
|
||||
#define ORGAN_UNREMOVABLE (1<<6)
|
||||
/// Organic organs, the default. Don't get affected by EMPs.
|
||||
#define ORGAN_ORGANIC (1<<0)
|
||||
/// Synthetic organs, or cybernetic organs. Reacts to EMPs and don't deteriorate or heal
|
||||
#define ORGAN_ROBOTIC (1<<1)
|
||||
/// Mineral organs. Snowflakey.
|
||||
#define ORGAN_MINERAL (1<<2)
|
||||
/// Frozen organs, don't deteriorate
|
||||
#define ORGAN_FROZEN (1<<3)
|
||||
/// Failing organs perform damaging effects until replaced or fixed, and typically they don't function properly either
|
||||
#define ORGAN_FAILING (1<<4)
|
||||
/// Synthetic organ affected by an EMP. Deteriorates over time.
|
||||
#define ORGAN_EMP (1<<5)
|
||||
/// Currently only the brain - Removing this organ KILLS the owner
|
||||
#define ORGAN_VITAL (1<<6)
|
||||
/// Can be eaten
|
||||
#define ORGAN_EDIBLE (1<<7)
|
||||
/// Can't be removed using surgery or other common means
|
||||
#define ORGAN_UNREMOVABLE (1<<8)
|
||||
/// Can't be seen by scanners, doesn't anger body purists
|
||||
#define ORGAN_HIDDEN (1<<7)
|
||||
#define ORGAN_HIDDEN (1<<9)
|
||||
|
||||
/// Helper to figure out if a limb is organic
|
||||
#define IS_ORGANIC_LIMB(limb) (limb.bodytype & BODYTYPE_ORGANIC)
|
||||
/// Helper to figure out if a limb is robotic
|
||||
#define IS_ROBOTIC_LIMB(limb) (limb.bodytype & BODYTYPE_ROBOTIC)
|
||||
|
||||
// Flags for the bodypart_flags var on /obj/item/bodypart
|
||||
/// Bodypart cannot be dismembered or amputated
|
||||
@@ -46,7 +60,7 @@
|
||||
/// All head flags, default for most heads
|
||||
#define HEAD_ALL_FEATURES (HEAD_HAIR|HEAD_FACIAL_HAIR|HEAD_LIPS|HEAD_EYESPRITES|HEAD_EYECOLOR|HEAD_EYEHOLES|HEAD_DEBRAIN)
|
||||
|
||||
/// When the surgery step fails :(
|
||||
/// Return value when the surgery step fails :(
|
||||
#define SURGERY_STEP_FAIL -1
|
||||
|
||||
// Flags for surgery_flags on surgery datums
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
#define IS_ORGANIC_LIMB(limb) (limb.bodytype & BODYTYPE_ORGANIC)
|
||||
@@ -419,12 +419,14 @@ DEFINE_BITFIELD(emote_flags, list(
|
||||
))
|
||||
|
||||
DEFINE_BITFIELD(organ_flags, list(
|
||||
"ORGAN_SYNTHETIC" = ORGAN_SYNTHETIC,
|
||||
"ORGAN_ORGANIC" = ORGAN_ORGANIC,
|
||||
"ORGAN_ROBOTIC" = ORGAN_ROBOTIC,
|
||||
"ORGAN_MINERAL" = ORGAN_MINERAL,
|
||||
"ORGAN_FROZEN" = ORGAN_FROZEN,
|
||||
"ORGAN_FAILING" = ORGAN_FAILING,
|
||||
"ORGAN_EMP" = ORGAN_EMP,
|
||||
"ORGAN_VITAL" = ORGAN_VITAL,
|
||||
"ORGAN_EDIBLE" = ORGAN_EDIBLE,
|
||||
"ORGAN_SYNTHETIC_EMP" = ORGAN_SYNTHETIC_EMP,
|
||||
"ORGAN_UNREMOVABLE" = ORGAN_UNREMOVABLE,
|
||||
))
|
||||
|
||||
|
||||
@@ -130,7 +130,6 @@
|
||||
var/required_tool_type = TOOL_CAUTERY
|
||||
var/obj/item/close_tool = user.get_inactive_held_item()
|
||||
var/is_robotic = the_surgery.requires_bodypart_type == BODYTYPE_ROBOTIC
|
||||
|
||||
if(is_robotic)
|
||||
required_tool_type = TOOL_SCREWDRIVER
|
||||
|
||||
|
||||
@@ -916,7 +916,7 @@
|
||||
quirk_holder.add_mob_memory(/datum/memory/key/quirk_smoker, protagonist = quirk_holder, preferred_brand = initial(drug_container_type.name))
|
||||
// smoker lungs have 25% less health and healing
|
||||
var/obj/item/organ/internal/lungs/smoker_lungs = quirk_holder.get_organ_slot(ORGAN_SLOT_LUNGS)
|
||||
if (smoker_lungs && !(smoker_lungs.organ_flags & ORGAN_SYNTHETIC)) // robotic lungs aren't affected
|
||||
if(smoker_lungs && IS_ORGANIC_ORGAN(smoker_lungs)) // robotic lungs aren't affected
|
||||
smoker_lungs.maxHealth = smoker_lungs.maxHealth * 0.75
|
||||
smoker_lungs.healing_factor = smoker_lungs.healing_factor * 0.75
|
||||
|
||||
@@ -1175,10 +1175,10 @@
|
||||
if(!istype(owner))
|
||||
return
|
||||
for(var/obj/item/bodypart/limb as anything in owner.bodyparts)
|
||||
if(!IS_ORGANIC_LIMB(limb))
|
||||
if(IS_ROBOTIC_LIMB(limb))
|
||||
cybernetics_level++
|
||||
for(var/obj/item/organ/organ as anything in owner.organs)
|
||||
if((organ.organ_flags & ORGAN_SYNTHETIC || organ.status == ORGAN_ROBOTIC) && !(organ.organ_flags & ORGAN_HIDDEN))
|
||||
if(IS_ROBOTIC_ORGAN(organ) && !(organ.organ_flags & ORGAN_HIDDEN))
|
||||
cybernetics_level++
|
||||
update_mood()
|
||||
|
||||
@@ -1189,25 +1189,25 @@
|
||||
|
||||
/datum/quirk/body_purist/proc/on_organ_gain(datum/source, obj/item/organ/new_organ, special)
|
||||
SIGNAL_HANDLER
|
||||
if((new_organ.organ_flags & ORGAN_SYNTHETIC || new_organ.status == ORGAN_ROBOTIC) && !(new_organ.organ_flags & ORGAN_HIDDEN)) //why the fuck are there 2 of them
|
||||
if(IS_ROBOTIC_ORGAN(new_organ) && !(new_organ.organ_flags & ORGAN_HIDDEN)) //why the fuck are there 2 of them
|
||||
cybernetics_level++
|
||||
update_mood()
|
||||
|
||||
/datum/quirk/body_purist/proc/on_organ_lose(datum/source, obj/item/organ/old_organ, special)
|
||||
SIGNAL_HANDLER
|
||||
if((old_organ.organ_flags & ORGAN_SYNTHETIC || old_organ.status == ORGAN_ROBOTIC) && !(old_organ.organ_flags & ORGAN_HIDDEN))
|
||||
if(IS_ROBOTIC_ORGAN(old_organ) && !(old_organ.organ_flags & ORGAN_HIDDEN))
|
||||
cybernetics_level--
|
||||
update_mood()
|
||||
|
||||
/datum/quirk/body_purist/proc/on_limb_gain(datum/source, obj/item/bodypart/new_limb, special)
|
||||
SIGNAL_HANDLER
|
||||
if(!IS_ORGANIC_LIMB(new_limb))
|
||||
if(IS_ROBOTIC_LIMB(new_limb))
|
||||
cybernetics_level++
|
||||
update_mood()
|
||||
|
||||
/datum/quirk/body_purist/proc/on_limb_lose(datum/source, obj/item/bodypart/old_limb, special)
|
||||
SIGNAL_HANDLER
|
||||
if(!IS_ORGANIC_LIMB(old_limb))
|
||||
if(IS_ROBOTIC_LIMB(old_limb))
|
||||
cybernetics_level--
|
||||
update_mood()
|
||||
|
||||
|
||||
@@ -935,7 +935,7 @@ GLOBAL_LIST_EMPTY(possible_items)
|
||||
continue
|
||||
//this is an objective item
|
||||
var/obj/item/organ/wanted = stolen
|
||||
if(!(wanted.organ_flags & ORGAN_FAILING) && !(wanted.organ_flags & ORGAN_SYNTHETIC))
|
||||
if(!(wanted.organ_flags & ORGAN_FAILING) && !IS_ROBOTIC_ORGAN(wanted))
|
||||
stolen_count++
|
||||
return stolen_count >= amount
|
||||
|
||||
|
||||
@@ -151,7 +151,7 @@
|
||||
for(var/obj/item/organ/new_organ as anything in infusing_into.output_organs)
|
||||
var/obj/item/organ/old_organ = target.get_organ_slot(initial(new_organ.slot))
|
||||
if(old_organ)
|
||||
if((old_organ.type != new_organ) && (old_organ.status != ORGAN_ROBOTIC))
|
||||
if((old_organ.type != new_organ) && !IS_ROBOTIC_ORGAN(old_organ))
|
||||
continue // Old organ can be mutated!
|
||||
else if(ispath(new_organ, /obj/item/organ/external))
|
||||
continue // External organ can be grown!
|
||||
|
||||
@@ -327,7 +327,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
|
||||
|
||||
reagents.expose(smoker, INGEST, min(to_smoke / reagents.total_volume, 1))
|
||||
var/obj/item/organ/internal/lungs/lungs = smoker.get_organ_slot(ORGAN_SLOT_LUNGS)
|
||||
if(lungs && !(lungs.organ_flags & ORGAN_SYNTHETIC))
|
||||
if(lungs && IS_ORGANIC_ORGAN(lungs))
|
||||
var/smoker_resistance = HAS_TRAIT(smoker, TRAIT_SMOKER) ? 0.5 : 1
|
||||
smoker.adjustOrganLoss(ORGAN_SLOT_LUNGS, lung_harm*smoker_resistance)
|
||||
if(!reagents.trans_to(smoker, to_smoke, methods = INGEST, ignore_stomach = TRUE))
|
||||
|
||||
@@ -390,9 +390,9 @@
|
||||
if(iscarbon(target))
|
||||
var/mob/living/carbon/carbontarget = target
|
||||
var/cyberimp_detect
|
||||
for(var/obj/item/organ/internal/cyberimp/CI in carbontarget.organs)
|
||||
if(CI.status == ORGAN_ROBOTIC && !(CI.organ_flags & ORGAN_HIDDEN))
|
||||
cyberimp_detect += "[!cyberimp_detect ? "[CI.get_examine_string(user)]" : ", [CI.get_examine_string(user)]"]"
|
||||
for(var/obj/item/organ/internal/cyberimp/cyberimp in carbontarget.organs)
|
||||
if(IS_ROBOTIC_ORGAN(cyberimp) && !(cyberimp.organ_flags & ORGAN_HIDDEN))
|
||||
cyberimp_detect += "[!cyberimp_detect ? "[cyberimp.get_examine_string(user)]" : ", [cyberimp.get_examine_string(user)]"]"
|
||||
if(cyberimp_detect)
|
||||
render_list += "<span class='notice ml-1'>Detected cybernetic modifications:</span>\n"
|
||||
render_list += "<span class='notice ml-2'>[cyberimp_detect]</span>\n"
|
||||
|
||||
@@ -88,7 +88,7 @@
|
||||
patient.balloon_alert(user, "no [parse_zone(user.zone_selected)]!")
|
||||
return FALSE
|
||||
if(!IS_ORGANIC_LIMB(affecting)) //Limb must be organic to be healed - RR
|
||||
patient.balloon_alert(user, "it's mechanical!")
|
||||
patient.balloon_alert(user, "it's not organic!")
|
||||
return FALSE
|
||||
if(affecting.brute_dam && brute || affecting.burn_dam && burn)
|
||||
user.visible_message(
|
||||
|
||||
@@ -140,7 +140,7 @@
|
||||
|
||||
var/obj/item/bodypart/affecting = attacked_humanoid.get_bodypart(check_zone(user.zone_selected))
|
||||
|
||||
if(affecting && !IS_ORGANIC_LIMB(affecting) && !user.combat_mode)
|
||||
if(affecting && IS_ROBOTIC_LIMB(affecting) && !user.combat_mode)
|
||||
if(src.use_tool(attacked_humanoid, user, 0, volume=50, amount=1))
|
||||
if(user == attacked_humanoid)
|
||||
user.visible_message(span_notice("[user] starts to fix some of the dents on [attacked_humanoid]'s [affecting.name]."),
|
||||
|
||||
@@ -388,7 +388,7 @@
|
||||
for(var/obj/item/bodypart/burn_limb as anything in burn_human.bodyparts)
|
||||
if(IS_ORGANIC_LIMB(burn_limb) && burn_limb.limb_id != SPECIES_PLASMAMAN) //getting every organic, non-plasmaman limb (augments/androids are immune to this)
|
||||
plasma_parts += burn_limb
|
||||
if(!IS_ORGANIC_LIMB(burn_limb))
|
||||
if(IS_ROBOTIC_LIMB(burn_limb))
|
||||
robo_parts += burn_limb
|
||||
|
||||
burn_human.adjustToxLoss(15, required_biotype = MOB_ORGANIC) // This is from plasma, so it should obey plasma biotype requirements
|
||||
|
||||
@@ -3,8 +3,7 @@
|
||||
desc = "A nausea-inducing hunk of twisting flesh and metal."
|
||||
icon = 'icons/obj/abductor.dmi'
|
||||
icon_state = "gland"
|
||||
status = ORGAN_ROBOTIC
|
||||
organ_flags = NONE
|
||||
organ_flags = ORGAN_ROBOTIC // weird?
|
||||
beating = TRUE
|
||||
/// Shows name of the gland as well as a description of what it does upon examination by abductor scientists and observers.
|
||||
var/abductor_hint = "baseline placebo referencer"
|
||||
|
||||
@@ -22,27 +22,27 @@
|
||||
return
|
||||
|
||||
var/obj/item/organ/internal/appendix/appendix = owner.get_organ_slot(ORGAN_SLOT_APPENDIX)
|
||||
if((!appendix && !HAS_TRAIT(owner, TRAIT_NOHUNGER)) || (appendix && ((appendix.organ_flags & ORGAN_FAILING) || (appendix.organ_flags & ORGAN_SYNTHETIC))))
|
||||
if((!appendix && !HAS_TRAIT(owner, TRAIT_NOHUNGER)) || (appendix && ((appendix.organ_flags & ORGAN_FAILING) || IS_ROBOTIC_ORGAN(appendix))))
|
||||
replace_appendix(appendix)
|
||||
return
|
||||
|
||||
var/obj/item/organ/internal/liver/liver = owner.get_organ_slot(ORGAN_SLOT_LIVER)
|
||||
if((!liver && !HAS_TRAIT(owner, TRAIT_LIVERLESS_METABOLISM)) || (liver && ((liver.damage > liver.high_threshold) || (liver.organ_flags & ORGAN_SYNTHETIC))))
|
||||
if((!liver && !HAS_TRAIT(owner, TRAIT_LIVERLESS_METABOLISM)) || (liver && ((liver.damage > liver.high_threshold) || IS_ROBOTIC_ORGAN(liver))))
|
||||
replace_liver(liver)
|
||||
return
|
||||
|
||||
var/obj/item/organ/internal/lungs/lungs = owner.get_organ_slot(ORGAN_SLOT_LUNGS)
|
||||
if((!lungs && !HAS_TRAIT(owner, TRAIT_NOBREATH)) || (lungs && ((lungs.damage > lungs.high_threshold) || (lungs.organ_flags & ORGAN_SYNTHETIC))))
|
||||
if((!lungs && !HAS_TRAIT(owner, TRAIT_NOBREATH)) || (lungs && ((lungs.damage > lungs.high_threshold) || IS_ROBOTIC_ORGAN(lungs))))
|
||||
replace_lungs(lungs)
|
||||
return
|
||||
|
||||
var/obj/item/organ/internal/stomach/stomach = owner.get_organ_slot(ORGAN_SLOT_STOMACH)
|
||||
if((!stomach && !HAS_TRAIT(owner, TRAIT_NOHUNGER)) || (stomach && ((stomach.damage > stomach.high_threshold) || (stomach.organ_flags & ORGAN_SYNTHETIC))))
|
||||
if((!stomach && !HAS_TRAIT(owner, TRAIT_NOHUNGER)) || (stomach && ((stomach.damage > stomach.high_threshold) || IS_ROBOTIC_ORGAN(stomach))))
|
||||
replace_stomach(stomach)
|
||||
return
|
||||
|
||||
var/obj/item/organ/internal/eyes/eyes = owner.get_organ_slot(ORGAN_SLOT_EYES)
|
||||
if(!eyes || (eyes && ((eyes.damage > eyes.low_threshold) || (eyes.organ_flags & ORGAN_SYNTHETIC))))
|
||||
if(!eyes || (eyes && ((eyes.damage > eyes.low_threshold) || IS_ROBOTIC_ORGAN(eyes))))
|
||||
replace_eyes(eyes)
|
||||
return
|
||||
|
||||
|
||||
@@ -55,7 +55,7 @@
|
||||
/datum/component/living_heart/proc/on_organ_replaced(obj/item/organ/source, obj/item/organ/replacement)
|
||||
SIGNAL_HANDLER
|
||||
|
||||
if(replacement.status == ORGAN_ROBOTIC || (replacement.organ_flags & ORGAN_SYNTHETIC))
|
||||
if(IS_ROBOTIC_ORGAN(replacement))
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
|
||||
@@ -183,9 +183,7 @@ GLOBAL_LIST_INIT(heretic_start_knowledge, initialize_starting_knowledge())
|
||||
return FALSE
|
||||
if(!new_heart.useable)
|
||||
return FALSE
|
||||
if(new_heart.status == ORGAN_ROBOTIC)
|
||||
return FALSE
|
||||
if(new_heart.organ_flags & (ORGAN_SYNTHETIC|ORGAN_FAILING))
|
||||
if(new_heart.organ_flags & (ORGAN_ROBOTIC|ORGAN_FAILING))
|
||||
return FALSE
|
||||
|
||||
return TRUE
|
||||
|
||||
@@ -142,7 +142,7 @@
|
||||
if(deprecise_zone(organ.zone) != zone_to_check)
|
||||
continue
|
||||
// Also, some organs to exclude. Don't remove vital (brains), don't remove synthetics, and don't remove unremovable
|
||||
if(organ.organ_flags & (ORGAN_SYNTHETIC|ORGAN_VITAL|ORGAN_UNREMOVABLE))
|
||||
if(organ.organ_flags & (ORGAN_ROBOTIC|ORGAN_VITAL|ORGAN_UNREMOVABLE))
|
||||
continue
|
||||
|
||||
organs_we_can_remove[organ.name] = organ
|
||||
|
||||
@@ -84,7 +84,7 @@
|
||||
|
||||
if(isorgan(weapon))
|
||||
var/obj/item/organ/consumed = weapon
|
||||
if(consumed.status == ORGAN_ROBOTIC || (consumed.organ_flags & ORGAN_SYNTHETIC))
|
||||
if(!IS_ORGANIC_ORGAN(consumed))
|
||||
balloon_alert(user, "not organic!")
|
||||
return
|
||||
if(consumed.organ_flags & ORGAN_VITAL) // Basically, don't eat organs like brains
|
||||
|
||||
@@ -189,7 +189,7 @@ GLOBAL_LIST_INIT(bibleitemstates, list(
|
||||
var/mob/living/carbon/human/built_in_his_image = blessed
|
||||
for(var/obj/item/bodypart/bodypart as anything in built_in_his_image.bodyparts)
|
||||
if(!IS_ORGANIC_LIMB(bodypart))
|
||||
balloon_alert(user, "can't heal metal!")
|
||||
balloon_alert(user, "can't heal inorganic!")
|
||||
return FALSE
|
||||
|
||||
var/heal_amt = 10
|
||||
|
||||
@@ -42,7 +42,7 @@
|
||||
visual = FALSE
|
||||
item_flags = NOBLUDGEON
|
||||
slot = ORGAN_SLOT_MONSTER_CORE
|
||||
organ_flags = NONE
|
||||
organ_flags = ORGAN_ORGANIC
|
||||
force = 0
|
||||
/// Set to true if this organ has decayed into uselessness.
|
||||
var/inert = FALSE
|
||||
|
||||
@@ -896,8 +896,7 @@
|
||||
desc = "An eerie metal shard surrounded by dark energies...of soup drinking. You probably don't think you should have been able to find this."
|
||||
icon = 'icons/obj/lavaland/artefacts.dmi'
|
||||
icon_state = "cursed_katana_organ"
|
||||
status = ORGAN_ORGANIC
|
||||
organ_flags = ORGAN_FROZEN|ORGAN_UNREMOVABLE
|
||||
organ_flags = ORGAN_ORGANIC | ORGAN_FROZEN | ORGAN_UNREMOVABLE
|
||||
items_to_create = list(/obj/item/kitchen/spoon)
|
||||
extend_sound = 'sound/items/unsheath.ogg'
|
||||
retract_sound = 'sound/items/sheath.ogg'
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
plane = GAME_PLANE_UPPER
|
||||
zone = BODY_ZONE_HEAD
|
||||
slot = ORGAN_SLOT_BRAIN
|
||||
organ_flags = ORGAN_VITAL
|
||||
organ_flags = ORGAN_ORGANIC | ORGAN_VITAL
|
||||
attack_verb_continuous = list("attacks", "slaps", "whacks")
|
||||
attack_verb_simple = list("attack", "slap", "whack")
|
||||
|
||||
@@ -379,7 +379,7 @@
|
||||
desc = "This collection of sparkling gems somehow allows a golem to think."
|
||||
icon_state = "adamantine_resonator"
|
||||
color = COLOR_GOLEM_GRAY
|
||||
status = ORGAN_MINERAL
|
||||
organ_flags = ORGAN_MINERAL
|
||||
organ_traits = list(TRAIT_ADVANCEDTOOLUSER, TRAIT_LITERATE, TRAIT_CAN_STRIP, TRAIT_ROCK_METAMORPHIC)
|
||||
|
||||
////////////////////////////////////TRAUMAS////////////////////////////////////////
|
||||
@@ -507,7 +507,7 @@
|
||||
amount_cured++
|
||||
return amount_cured
|
||||
|
||||
/obj/item/organ/internal/brain/apply_organ_damage(damage_amount, maximum, required_organtype)
|
||||
/obj/item/organ/internal/brain/apply_organ_damage(damage_amount, maximum = maxHealth, required_organ_flag = NONE)
|
||||
. = ..()
|
||||
if(!owner)
|
||||
return
|
||||
|
||||
@@ -856,8 +856,6 @@
|
||||
blood_volume += (excess_healing * 2) //1 excess = 10 blood
|
||||
|
||||
for(var/obj/item/organ/organ as anything in organs)
|
||||
if(organ.organ_flags & ORGAN_SYNTHETIC)
|
||||
continue
|
||||
organ.apply_organ_damage(excess_healing * -1) //1 excess = 5 organ damage healed
|
||||
|
||||
return ..()
|
||||
|
||||
@@ -375,6 +375,8 @@
|
||||
return
|
||||
for(var/obj/item/organ/organ as anything in organs)
|
||||
organ.emp_act(severity)
|
||||
for(var/obj/item/bodypart/bodypart as anything in src.bodyparts)
|
||||
bodypart.emp_act(severity)
|
||||
|
||||
///Adds to the parent by also adding functionality to propagate shocks through pulling and doing some fluff effects.
|
||||
/mob/living/carbon/electrocute_act(shock_damage, source, siemens_coeff = 1, flags = NONE)
|
||||
@@ -771,7 +773,7 @@
|
||||
var/changed_something = FALSE
|
||||
var/obj/item/organ/new_organ = pick(GLOB.bioscrambler_valid_organs)
|
||||
var/obj/item/organ/replaced = get_organ_slot(initial(new_organ.slot))
|
||||
if (!(replaced?.organ_flags & ORGAN_SYNTHETIC))
|
||||
if (!replaced || !IS_ROBOTIC_ORGAN(replaced))
|
||||
changed_something = TRUE
|
||||
new_organ = new new_organ()
|
||||
new_organ.replace_into(src)
|
||||
@@ -795,15 +797,15 @@
|
||||
/// Fill in the lists of things we can bioscramble into people
|
||||
/mob/living/carbon/proc/init_bioscrambler_lists()
|
||||
var/list/body_parts = typesof(/obj/item/bodypart/chest) + typesof(/obj/item/bodypart/head) + subtypesof(/obj/item/bodypart/arm) + subtypesof(/obj/item/bodypart/leg)
|
||||
for (var/obj/item/bodypart/part as anything in body_parts)
|
||||
if (!is_type_in_typecache(part, GLOB.bioscrambler_parts_blacklist) && BODYTYPE_CAN_BE_BIOSCRAMBLED(initial(part.bodytype)))
|
||||
for(var/obj/item/bodypart/part as anything in body_parts)
|
||||
if(!is_type_in_typecache(part, GLOB.bioscrambler_parts_blacklist) && BODYTYPE_CAN_BE_BIOSCRAMBLED(initial(part.bodytype)))
|
||||
continue
|
||||
body_parts -= part
|
||||
GLOB.bioscrambler_valid_parts = body_parts
|
||||
|
||||
var/list/organs = subtypesof(/obj/item/organ/internal) + subtypesof(/obj/item/organ/external)
|
||||
for (var/obj/item/organ/organ_type as anything in organs)
|
||||
if (!is_type_in_typecache(organ_type, GLOB.bioscrambler_organs_blacklist) && !(initial(organ_type.organ_flags) & ORGAN_SYNTHETIC))
|
||||
for(var/obj/item/organ/organ_type as anything in organs)
|
||||
if(!is_type_in_typecache(organ_type, GLOB.bioscrambler_organs_blacklist) && !(initial(organ_type.organ_flags) & ORGAN_ROBOTIC))
|
||||
continue
|
||||
organs -= organ_type
|
||||
GLOB.bioscrambler_valid_organs = organs
|
||||
|
||||
@@ -114,13 +114,13 @@
|
||||
* * slot - organ slot, like [ORGAN_SLOT_HEART]
|
||||
* * amount - damage to be done
|
||||
* * maximum - currently an arbitrarily large number, can be set so as to limit damage
|
||||
* * required_organtype - targets only a specific organ type if set to ORGAN_ORGANIC or ORGAN_ROBOTIC
|
||||
* * required_organ_flag - targets only a specific organ type if set to ORGAN_ORGANIC or ORGAN_ROBOTIC
|
||||
*/
|
||||
/mob/living/carbon/adjustOrganLoss(slot, amount, maximum, required_organtype)
|
||||
/mob/living/carbon/adjustOrganLoss(slot, amount, maximum = INFINITY, required_organ_flag = NONE)
|
||||
var/obj/item/organ/affected_organ = get_organ_slot(slot)
|
||||
if(!affected_organ || (status_flags & GODMODE))
|
||||
return
|
||||
if(required_organtype && (affected_organ.status != required_organtype))
|
||||
if(required_organ_flag && !(affected_organ.organ_flags & required_organ_flag))
|
||||
return
|
||||
affected_organ.apply_organ_damage(amount, maximum)
|
||||
|
||||
@@ -131,13 +131,13 @@
|
||||
* Arguments:
|
||||
* * slot - organ slot, like [ORGAN_SLOT_HEART]
|
||||
* * amount - damage to be set to
|
||||
* * required_organtype - targets only a specific organ type if set to ORGAN_ORGANIC or ORGAN_ROBOTIC
|
||||
* * required_organ_flag - targets only a specific organ type if set to ORGAN_ORGANIC or ORGAN_ROBOTIC
|
||||
*/
|
||||
/mob/living/carbon/setOrganLoss(slot, amount, required_organtype)
|
||||
/mob/living/carbon/setOrganLoss(slot, amount, required_organ_flag = NONE)
|
||||
var/obj/item/organ/affected_organ = get_organ_slot(slot)
|
||||
if(!affected_organ || (status_flags & GODMODE))
|
||||
return
|
||||
if(required_organtype && (affected_organ.status != required_organtype))
|
||||
if(required_organ_flag && !(affected_organ.organ_flags & required_organ_flag))
|
||||
return
|
||||
if(affected_organ.damage == amount)
|
||||
return
|
||||
|
||||
@@ -686,7 +686,7 @@ GLOBAL_LIST_EMPTY(features_by_species)
|
||||
|
||||
|
||||
if(mutant_bodyparts["ears"])
|
||||
if(!source.dna.features["ears"] || source.dna.features["ears"] == "None" || source.head && (source.head.flags_inv & HIDEHAIR) || (source.wear_mask && (source.wear_mask.flags_inv & HIDEHAIR)) || !noggin || !IS_ORGANIC_LIMB(noggin))
|
||||
if(!source.dna.features["ears"] || source.dna.features["ears"] == "None" || source.head && (source.head.flags_inv & HIDEHAIR) || (source.wear_mask && (source.wear_mask.flags_inv & HIDEHAIR)) || !noggin || IS_ROBOTIC_LIMB(noggin))
|
||||
bodyparts_to_add -= "ears"
|
||||
|
||||
if(!bodyparts_to_add)
|
||||
|
||||
@@ -367,9 +367,9 @@
|
||||
. += "<span class='deptradio'>Rank:</span> [target_record.rank]\n<a href='?src=[REF(src)];hud=1;photo_front=1;examine_time=[world.time]'>\[Front photo\]</a><a href='?src=[REF(src)];hud=1;photo_side=1;examine_time=[world.time]'>\[Side photo\]</a>"
|
||||
if(HAS_TRAIT(user, TRAIT_MEDICAL_HUD))
|
||||
var/cyberimp_detect
|
||||
for(var/obj/item/organ/internal/cyberimp/CI in organs)
|
||||
if(CI.status == ORGAN_ROBOTIC && !(CI.organ_flags & ORGAN_HIDDEN))
|
||||
cyberimp_detect += "[!cyberimp_detect ? "[CI.get_examine_string(user)]" : ", [CI.get_examine_string(user)]"]"
|
||||
for(var/obj/item/organ/internal/cyberimp/cyberimp in organs)
|
||||
if(IS_ROBOTIC_ORGAN(cyberimp) && !(cyberimp.organ_flags & ORGAN_HIDDEN))
|
||||
cyberimp_detect += "[!cyberimp_detect ? "[cyberimp.get_examine_string(user)]" : ", [cyberimp.get_examine_string(user)]"]"
|
||||
if(cyberimp_detect)
|
||||
. += "<span class='notice ml-1'>Detected cybernetic modifications:</span>"
|
||||
. += "<span class='notice ml-2'>[cyberimp_detect]</span>"
|
||||
|
||||
@@ -513,13 +513,6 @@
|
||||
to_chat(src, span_notice("You feel your heart beating again!"))
|
||||
electrocution_animation(40)
|
||||
|
||||
/mob/living/carbon/human/emp_act(severity)
|
||||
. = ..()
|
||||
if(. & EMP_PROTECT_CONTENTS)
|
||||
return
|
||||
for(var/obj/item/bodypart/L as anything in src.bodyparts)
|
||||
L.emp_act()
|
||||
|
||||
/mob/living/carbon/human/acid_act(acidpwr, acid_volume, bodyzone_hit) //todo: update this to utilize check_obscured_slots() //and make sure it's check_obscured_slots(TRUE) to stop aciding through visors etc
|
||||
var/list/damaged = list()
|
||||
var/list/inventory_items_to_kill = list()
|
||||
|
||||
@@ -159,7 +159,7 @@
|
||||
|
||||
/obj/item/organ/internal/brain/dullahan
|
||||
decoy_override = TRUE
|
||||
organ_flags = NONE
|
||||
organ_flags = ORGAN_ORGANIC //not vital
|
||||
|
||||
/obj/item/organ/internal/tongue/dullahan
|
||||
zone = "abstract"
|
||||
|
||||
@@ -743,7 +743,7 @@
|
||||
if(!needs_heart())
|
||||
return FALSE
|
||||
var/obj/item/organ/internal/heart/heart = get_organ_slot(ORGAN_SLOT_HEART)
|
||||
if(!heart || (heart.organ_flags & ORGAN_SYNTHETIC))
|
||||
if(!heart || IS_ROBOTIC_ORGAN(heart))
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
|
||||
@@ -279,10 +279,10 @@
|
||||
updatehealth()
|
||||
return amount
|
||||
|
||||
/mob/living/proc/adjustOrganLoss(slot, amount, maximum, required_organtype)
|
||||
/mob/living/proc/adjustOrganLoss(slot, amount, maximum, required_organ_flag)
|
||||
return
|
||||
|
||||
/mob/living/proc/setOrganLoss(slot, amount, maximum, required_organtype)
|
||||
/mob/living/proc/setOrganLoss(slot, amount, maximum, required_organ_flag)
|
||||
return
|
||||
|
||||
/mob/living/proc/get_organ_loss(slot)
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
/mob/living/silicon/setStaminaLoss(amount, updating_health = TRUE)
|
||||
return FALSE
|
||||
|
||||
/mob/living/silicon/adjustOrganLoss(slot, amount, maximum = 500, required_organtype) //immune to organ damage (no organs, duh)
|
||||
/mob/living/silicon/adjustOrganLoss(slot, amount, maximum = 500, required_organ_flag) //immune to organ damage (no organs, duh)
|
||||
return FALSE
|
||||
|
||||
/mob/living/silicon/setOrganLoss(slot, amount)
|
||||
|
||||
@@ -570,7 +570,7 @@ GLOBAL_LIST_INIT(wire_node_generating_types, typecacheof(list(/obj/structure/gri
|
||||
return ..()
|
||||
|
||||
var/obj/item/bodypart/affecting = H.get_bodypart(check_zone(user.zone_selected))
|
||||
if(affecting && !IS_ORGANIC_LIMB(affecting))
|
||||
if(affecting && IS_ROBOTIC_LIMB(affecting))
|
||||
if(user == H)
|
||||
user.visible_message(span_notice("[user] starts to fix some of the wires in [H]'s [affecting.name]."), span_notice("You start fixing some of the wires in [H == user ? "your" : "[H]'s"] [affecting.name]."))
|
||||
if(!do_after(user, 50, H))
|
||||
|
||||
@@ -80,6 +80,9 @@ GLOBAL_LIST_INIT(name2reagent, build_name2reagent())
|
||||
var/burning_volume = 0.5
|
||||
///Assoc list with key type of addiction this reagent feeds, and value amount of addiction points added per unit of reagent metabolzied (which means * REAGENTS_METABOLISM every life())
|
||||
var/list/addiction_types = null
|
||||
/// The affected organ_flags, if the reagent damages/heals organ damage of an affected mob.
|
||||
/// See "Organ defines for carbon mobs" in /code/_DEFINES/surgery.dm
|
||||
var/affected_organ_flags = ORGAN_ORGANIC
|
||||
/// The affected bodytype, if the reagent damages/heals bodyparts (Brute/Fire) of an affected mob.
|
||||
/// See "Bodytype defines" in /code/_DEFINES/mobs.dm
|
||||
var/affected_bodytype = BODYTYPE_ORGANIC
|
||||
@@ -89,9 +92,6 @@ GLOBAL_LIST_INIT(name2reagent, build_name2reagent())
|
||||
/// The affected respiration type, if the reagent damages/heals oxygen damage of an affected mob.
|
||||
/// See "Mob bio-types flags" in /code/_DEFINES/mobs.dm
|
||||
var/affected_respiration_type = ALL
|
||||
/// The affected organtype, if the reagent damages/heals organ damage of an affected mob.
|
||||
/// See "Organ defines for carbon mobs" in /code/_DEFINES/mobs.dm
|
||||
var/affected_organtype = ORGAN_ORGANIC
|
||||
|
||||
///The default reagent container for the reagent, used for icon generation
|
||||
var/obj/item/reagent_containers/default_container = /obj/item/reagent_containers/cup/bottle
|
||||
|
||||
@@ -100,7 +100,7 @@
|
||||
chemical_flags = REAGENT_CAN_BE_SYNTHESIZED
|
||||
|
||||
/datum/reagent/medicine/c2/libital/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired)
|
||||
affected_mob.adjustOrganLoss(ORGAN_SLOT_LIVER, 0.3 * REM * seconds_per_tick, required_organtype = affected_organtype)
|
||||
affected_mob.adjustOrganLoss(ORGAN_SLOT_LIVER, 0.3 * REM * seconds_per_tick, required_organ_flag = affected_organ_flags)
|
||||
affected_mob.adjustBruteLoss(-3 * REM * normalise_creation_purity() * seconds_per_tick, required_bodytype = affected_bodytype)
|
||||
..()
|
||||
return TRUE
|
||||
@@ -164,7 +164,7 @@
|
||||
|
||||
/datum/reagent/medicine/c2/lenturi/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired)
|
||||
affected_mob.adjustFireLoss(-3 * REM * normalise_creation_purity() * seconds_per_tick, required_bodytype = affected_bodytype)
|
||||
affected_mob.adjustOrganLoss(ORGAN_SLOT_STOMACH, 0.4 * REM * seconds_per_tick, required_organtype = affected_organtype)
|
||||
affected_mob.adjustOrganLoss(ORGAN_SLOT_STOMACH, 0.4 * REM * seconds_per_tick, required_organ_flag = affected_organ_flags)
|
||||
..()
|
||||
return TRUE
|
||||
|
||||
@@ -180,7 +180,7 @@
|
||||
|
||||
/datum/reagent/medicine/c2/aiuri/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired)
|
||||
affected_mob.adjustFireLoss(-2 * REM * normalise_creation_purity() * seconds_per_tick, required_bodytype = affected_bodytype)
|
||||
affected_mob.adjustOrganLoss(ORGAN_SLOT_EYES, 0.25 * REM * seconds_per_tick, required_organtype = affected_organtype)
|
||||
affected_mob.adjustOrganLoss(ORGAN_SLOT_EYES, 0.25 * REM * seconds_per_tick, required_organ_flag = affected_organ_flags)
|
||||
..()
|
||||
return TRUE
|
||||
|
||||
@@ -331,7 +331,7 @@
|
||||
|
||||
//you're yes and... oh no!
|
||||
healypoints = round(healypoints, 0.1)
|
||||
affected_mob.adjustOrganLoss(ORGAN_SLOT_HEART, healypoints / 5, required_organtype = affected_organtype)
|
||||
affected_mob.adjustOrganLoss(ORGAN_SLOT_HEART, healypoints / 5, required_organ_flag = affected_organ_flags)
|
||||
..()
|
||||
return TRUE
|
||||
|
||||
@@ -352,7 +352,7 @@
|
||||
if(creation_purity >= 1) //Perfectly pure multivers gives a bonus of 2!
|
||||
medibonus += 1
|
||||
affected_mob.adjustToxLoss(-0.5 * min(medibonus, 3 * normalise_creation_purity()) * REM * seconds_per_tick, required_biotype = affected_biotype) //not great at healing but if you have nothing else it will work
|
||||
affected_mob.adjustOrganLoss(ORGAN_SLOT_LUNGS, 0.5 * REM * seconds_per_tick, required_organtype = affected_organtype) //kills at 40u
|
||||
affected_mob.adjustOrganLoss(ORGAN_SLOT_LUNGS, 0.5 * REM * seconds_per_tick, required_organ_flag = affected_organ_flags) //kills at 40u
|
||||
for(var/r2 in affected_mob.reagents.reagent_list)
|
||||
var/datum/reagent/the_reagent2 = r2
|
||||
if(the_reagent2 == src)
|
||||
@@ -396,7 +396,7 @@
|
||||
..()
|
||||
|
||||
/datum/reagent/medicine/c2/syriniver/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired)
|
||||
affected_mob.adjustOrganLoss(ORGAN_SLOT_LIVER, 0.8 * REM * seconds_per_tick, required_organtype = affected_organtype)
|
||||
affected_mob.adjustOrganLoss(ORGAN_SLOT_LIVER, 0.8 * REM * seconds_per_tick, required_organ_flag = affected_organ_flags)
|
||||
affected_mob.adjustToxLoss(-1 * REM * seconds_per_tick, FALSE, required_biotype = affected_biotype)
|
||||
for(var/datum/reagent/R in affected_mob.reagents.reagent_list)
|
||||
if(issyrinormusc(R))
|
||||
@@ -407,7 +407,7 @@
|
||||
. = TRUE
|
||||
|
||||
/datum/reagent/medicine/c2/syriniver/overdose_process(mob/living/carbon/affected_mob, seconds_per_tick, times_fired)
|
||||
affected_mob.adjustOrganLoss(ORGAN_SLOT_LIVER, 1.5 * REM * seconds_per_tick, required_organtype = affected_organtype)
|
||||
affected_mob.adjustOrganLoss(ORGAN_SLOT_LIVER, 1.5 * REM * seconds_per_tick, required_organ_flag = affected_organ_flags)
|
||||
affected_mob.adjust_disgust(3 * REM * seconds_per_tick)
|
||||
affected_mob.reagents.add_reagent(/datum/reagent/medicine/c2/musiver, 0.225 * REM * seconds_per_tick)
|
||||
..()
|
||||
@@ -425,7 +425,7 @@
|
||||
chemical_flags = REAGENT_CAN_BE_SYNTHESIZED
|
||||
|
||||
/datum/reagent/medicine/c2/musiver/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired)
|
||||
affected_mob.adjustOrganLoss(ORGAN_SLOT_LIVER, 0.1 * REM * seconds_per_tick, required_organtype = affected_organtype)
|
||||
affected_mob.adjustOrganLoss(ORGAN_SLOT_LIVER, 0.1 * REM * seconds_per_tick, required_organ_flag = affected_organ_flags)
|
||||
affected_mob.adjustToxLoss(-1 * REM * seconds_per_tick * normalise_creation_purity(), FALSE, required_biotype = affected_biotype)
|
||||
for(var/datum/reagent/R in affected_mob.reagents.reagent_list)
|
||||
if(issyrinormusc(R))
|
||||
@@ -445,7 +445,7 @@
|
||||
return ..()
|
||||
|
||||
/datum/reagent/medicine/c2/musiver/overdose_process(mob/living/carbon/affected_mob, seconds_per_tick, times_fired)
|
||||
affected_mob.adjustOrganLoss(ORGAN_SLOT_LIVER, 1.5 * REM * seconds_per_tick, required_organtype = affected_organtype)
|
||||
affected_mob.adjustOrganLoss(ORGAN_SLOT_LIVER, 1.5 * REM * seconds_per_tick, required_organ_flag = affected_organ_flags)
|
||||
affected_mob.adjust_disgust(3 * REM * seconds_per_tick)
|
||||
..()
|
||||
. = TRUE
|
||||
@@ -523,7 +523,7 @@
|
||||
user.add_traits(subject_traits, type)
|
||||
|
||||
/datum/reagent/medicine/c2/penthrite/on_mob_life(mob/living/carbon/human/H, seconds_per_tick, times_fired)
|
||||
H.adjustOrganLoss(ORGAN_SLOT_STOMACH, 0.25 * REM * seconds_per_tick, required_organtype = affected_organtype)
|
||||
H.adjustOrganLoss(ORGAN_SLOT_STOMACH, 0.25 * REM * seconds_per_tick, required_organ_flag = affected_organ_flags)
|
||||
if(H.health <= HEALTH_THRESHOLD_CRIT && H.health > (H.crit_threshold + HEALTH_THRESHOLD_FULLCRIT * (2 * normalise_creation_purity()))) //we cannot save someone below our lowered crit threshold.
|
||||
|
||||
H.adjustToxLoss(-2 * REM * seconds_per_tick, FALSE, required_biotype = affected_biotype)
|
||||
@@ -533,7 +533,7 @@
|
||||
|
||||
H.losebreath = 0
|
||||
|
||||
H.adjustOrganLoss(ORGAN_SLOT_HEART, max(volume/10, 1) * REM * seconds_per_tick, required_organtype = affected_organtype) // your heart is barely keeping up!
|
||||
H.adjustOrganLoss(ORGAN_SLOT_HEART, max(volume/10, 1) * REM * seconds_per_tick, required_organ_flag = affected_organ_flags) // your heart is barely keeping up!
|
||||
|
||||
H.set_jitter_if_lower(rand(0 SECONDS, 4 SECONDS) * REM * seconds_per_tick)
|
||||
H.set_dizzy_if_lower(rand(0 SECONDS, 4 SECONDS) * REM * seconds_per_tick)
|
||||
@@ -557,7 +557,7 @@
|
||||
/datum/reagent/medicine/c2/penthrite/overdose_process(mob/living/carbon/human/H, seconds_per_tick, times_fired)
|
||||
REMOVE_TRAIT(H, TRAIT_STABLEHEART, type)
|
||||
H.adjustStaminaLoss(10 * REM * seconds_per_tick, required_biotype = affected_biotype)
|
||||
H.adjustOrganLoss(ORGAN_SLOT_HEART, 10 * REM * seconds_per_tick, required_organtype = affected_organtype)
|
||||
H.adjustOrganLoss(ORGAN_SLOT_HEART, 10 * REM * seconds_per_tick, required_organ_flag = affected_organ_flags)
|
||||
H.set_heartattack(TRUE)
|
||||
|
||||
|
||||
|
||||
@@ -1373,7 +1373,7 @@
|
||||
/datum/reagent/consumable/ethanol/neurotoxin/on_mob_life(mob/living/carbon/drinker, seconds_per_tick, times_fired)
|
||||
drinker.set_drugginess(100 SECONDS * REM * seconds_per_tick)
|
||||
drinker.adjust_dizzy(4 SECONDS * REM * seconds_per_tick)
|
||||
drinker.adjustOrganLoss(ORGAN_SLOT_BRAIN, 1 * REM * seconds_per_tick, 150, required_organtype = affected_organtype)
|
||||
drinker.adjustOrganLoss(ORGAN_SLOT_BRAIN, 1 * REM * seconds_per_tick, 150, required_organ_flag = affected_organ_flags)
|
||||
if(SPT_PROB(10, seconds_per_tick))
|
||||
drinker.adjustStaminaLoss(10, required_biotype = affected_biotype)
|
||||
drinker.drop_all_held_items()
|
||||
@@ -1384,7 +1384,7 @@
|
||||
ADD_TRAIT(drinker, paralyzed_limb, type)
|
||||
drinker.adjustStaminaLoss(10, required_biotype = affected_biotype)
|
||||
if(current_cycle > 30)
|
||||
drinker.adjustOrganLoss(ORGAN_SLOT_BRAIN, 2 * REM * seconds_per_tick, required_organtype = affected_organtype)
|
||||
drinker.adjustOrganLoss(ORGAN_SLOT_BRAIN, 2 * REM * seconds_per_tick, required_organ_flag = affected_organ_flags)
|
||||
if(current_cycle > 50 && SPT_PROB(7.5, seconds_per_tick))
|
||||
if(!drinker.undergoing_cardiac_arrest() && drinker.can_heartattack())
|
||||
drinker.set_heartattack(TRUE)
|
||||
|
||||
@@ -125,7 +125,7 @@
|
||||
..()
|
||||
|
||||
/datum/reagent/drug/krokodil/overdose_process(mob/living/affected_mob, seconds_per_tick, times_fired)
|
||||
affected_mob.adjustOrganLoss(ORGAN_SLOT_BRAIN, 0.25 * REM * seconds_per_tick, required_organtype = affected_organtype)
|
||||
affected_mob.adjustOrganLoss(ORGAN_SLOT_BRAIN, 0.25 * REM * seconds_per_tick, required_organ_flag = affected_organ_flags)
|
||||
affected_mob.adjustToxLoss(0.25 * REM * seconds_per_tick, FALSE, required_biotype = affected_biotype)
|
||||
..()
|
||||
. = TRUE
|
||||
@@ -178,7 +178,7 @@
|
||||
affected_mob.AdjustImmobilized(-40 * REM * seconds_per_tick)
|
||||
affected_mob.adjustStaminaLoss(-2 * REM * seconds_per_tick, FALSE, required_biotype = affected_biotype)
|
||||
affected_mob.set_jitter_if_lower(4 SECONDS * REM * seconds_per_tick)
|
||||
affected_mob.adjustOrganLoss(ORGAN_SLOT_BRAIN, rand(1, 4) * REM * seconds_per_tick, required_organtype = affected_organtype)
|
||||
affected_mob.adjustOrganLoss(ORGAN_SLOT_BRAIN, rand(1, 4) * REM * seconds_per_tick, required_organ_flag = affected_organ_flags)
|
||||
if(SPT_PROB(2.5, seconds_per_tick))
|
||||
affected_mob.emote(pick("twitch", "shiver"))
|
||||
..()
|
||||
@@ -195,7 +195,7 @@
|
||||
affected_mob.drop_all_held_items()
|
||||
..()
|
||||
affected_mob.adjustToxLoss(1 * REM * seconds_per_tick, FALSE, required_biotype = affected_biotype)
|
||||
affected_mob.adjustOrganLoss(ORGAN_SLOT_BRAIN, (rand(5, 10) / 10) * REM * seconds_per_tick, required_organtype = affected_organtype)
|
||||
affected_mob.adjustOrganLoss(ORGAN_SLOT_BRAIN, (rand(5, 10) / 10) * REM * seconds_per_tick, required_organ_flag = affected_organ_flags)
|
||||
. = TRUE
|
||||
|
||||
/datum/reagent/drug/bath_salts
|
||||
@@ -230,7 +230,7 @@
|
||||
to_chat(affected_mob, span_notice("[high_message]"))
|
||||
affected_mob.add_mood_event("salted", /datum/mood_event/stimulant_heavy, name)
|
||||
affected_mob.adjustStaminaLoss(-5 * REM * seconds_per_tick, FALSE, required_biotype = affected_biotype)
|
||||
affected_mob.adjustOrganLoss(ORGAN_SLOT_BRAIN, 4 * REM * seconds_per_tick, required_organtype = affected_organtype)
|
||||
affected_mob.adjustOrganLoss(ORGAN_SLOT_BRAIN, 4 * REM * seconds_per_tick, required_organ_flag = affected_organ_flags)
|
||||
affected_mob.adjust_hallucinations(10 SECONDS * REM * seconds_per_tick)
|
||||
if(!HAS_TRAIT(affected_mob, TRAIT_IMMOBILIZED) && !ismovable(affected_mob.loc))
|
||||
step(affected_mob, pick(GLOB.cardinals))
|
||||
@@ -293,7 +293,7 @@
|
||||
affected_mob.remove_status_effect(/datum/status_effect/jitter)
|
||||
affected_mob.remove_status_effect(/datum/status_effect/confusion)
|
||||
affected_mob.disgust = 0
|
||||
affected_mob.adjustOrganLoss(ORGAN_SLOT_BRAIN, 0.2 * REM * seconds_per_tick, required_organtype = affected_organtype)
|
||||
affected_mob.adjustOrganLoss(ORGAN_SLOT_BRAIN, 0.2 * REM * seconds_per_tick, required_organ_flag = affected_organ_flags)
|
||||
..()
|
||||
. = TRUE
|
||||
|
||||
@@ -310,7 +310,7 @@
|
||||
if(3)
|
||||
affected_mob.emote("frown")
|
||||
affected_mob.add_mood_event("happiness_drug", /datum/mood_event/happiness_drug_bad_od)
|
||||
affected_mob.adjustOrganLoss(ORGAN_SLOT_BRAIN, 0.5 * REM * seconds_per_tick, required_organtype = affected_organtype)
|
||||
affected_mob.adjustOrganLoss(ORGAN_SLOT_BRAIN, 0.5 * REM * seconds_per_tick, required_organ_flag = affected_organ_flags)
|
||||
..()
|
||||
. = TRUE
|
||||
|
||||
@@ -385,7 +385,7 @@
|
||||
|
||||
/datum/reagent/drug/maint/powder/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired)
|
||||
. = ..()
|
||||
affected_mob.adjustOrganLoss(ORGAN_SLOT_BRAIN, 0.1 * REM * seconds_per_tick, required_organtype = affected_organtype)
|
||||
affected_mob.adjustOrganLoss(ORGAN_SLOT_BRAIN, 0.1 * REM * seconds_per_tick, required_organ_flag = affected_organ_flags)
|
||||
// 5x if you want to OD, you can potentially go higher, but good luck managing the brain damage.
|
||||
var/amt = max(round(volume/3, 0.1), 1)
|
||||
affected_mob?.mind?.experience_multiplier_reasons |= type
|
||||
@@ -398,7 +398,7 @@
|
||||
|
||||
/datum/reagent/drug/maint/powder/overdose_process(mob/living/affected_mob, seconds_per_tick, times_fired)
|
||||
. = ..()
|
||||
affected_mob.adjustOrganLoss(ORGAN_SLOT_BRAIN, 6 * REM * seconds_per_tick, required_organtype = affected_organtype)
|
||||
affected_mob.adjustOrganLoss(ORGAN_SLOT_BRAIN, 6 * REM * seconds_per_tick, required_organ_flag = affected_organ_flags)
|
||||
|
||||
/datum/reagent/drug/maint/sludge
|
||||
name = "Maintenance Sludge"
|
||||
@@ -451,13 +451,13 @@
|
||||
affected_mob.AdjustUnconscious(-10 * REM * seconds_per_tick)
|
||||
affected_mob.AdjustParalyzed(-10 * REM * seconds_per_tick)
|
||||
affected_mob.AdjustImmobilized(-10 * REM * seconds_per_tick)
|
||||
affected_mob.adjustOrganLoss(ORGAN_SLOT_LIVER, 1.5 * REM * seconds_per_tick, required_organtype = affected_organtype)
|
||||
affected_mob.adjustOrganLoss(ORGAN_SLOT_LIVER, 1.5 * REM * seconds_per_tick, required_organ_flag = affected_organ_flags)
|
||||
|
||||
/datum/reagent/drug/maint/tar/overdose_process(mob/living/affected_mob, seconds_per_tick, times_fired)
|
||||
. = ..()
|
||||
|
||||
affected_mob.adjustToxLoss(5 * REM * seconds_per_tick, required_biotype = affected_biotype)
|
||||
affected_mob.adjustOrganLoss(ORGAN_SLOT_LIVER, 3 * REM * seconds_per_tick, required_organtype = affected_organtype)
|
||||
affected_mob.adjustOrganLoss(ORGAN_SLOT_LIVER, 3 * REM * seconds_per_tick, required_organ_flag = affected_organ_flags)
|
||||
|
||||
/datum/reagent/drug/mushroomhallucinogen
|
||||
name = "Mushroom Hallucinogen"
|
||||
@@ -598,7 +598,7 @@
|
||||
/datum/reagent/drug/blastoff/on_mob_life(mob/living/carbon/dancer, seconds_per_tick, times_fired)
|
||||
. = ..()
|
||||
|
||||
dancer.adjustOrganLoss(ORGAN_SLOT_LUNGS, 0.3 * REM * seconds_per_tick, required_organtype = affected_organtype)
|
||||
dancer.adjustOrganLoss(ORGAN_SLOT_LUNGS, 0.3 * REM * seconds_per_tick, required_organ_flag = affected_organ_flags)
|
||||
dancer.AdjustKnockdown(-20)
|
||||
|
||||
if(SPT_PROB(BLASTOFF_DANCE_MOVE_CHANCE_PER_UNIT * volume, seconds_per_tick))
|
||||
@@ -606,7 +606,7 @@
|
||||
|
||||
/datum/reagent/drug/blastoff/overdose_process(mob/living/dancer, seconds_per_tick, times_fired)
|
||||
. = ..()
|
||||
dancer.adjustOrganLoss(ORGAN_SLOT_LUNGS, 0.3 * REM * seconds_per_tick, required_organtype = affected_organtype)
|
||||
dancer.adjustOrganLoss(ORGAN_SLOT_LUNGS, 0.3 * REM * seconds_per_tick, required_organ_flag = affected_organ_flags)
|
||||
|
||||
if(SPT_PROB(BLASTOFF_DANCE_MOVE_CHANCE_PER_UNIT * volume, seconds_per_tick))
|
||||
dancer.emote("spin")
|
||||
@@ -669,7 +669,7 @@
|
||||
|
||||
/datum/reagent/drug/saturnx/on_mob_life(mob/living/carbon/invisible_man, seconds_per_tick, times_fired)
|
||||
. = ..()
|
||||
invisible_man.adjustOrganLoss(ORGAN_SLOT_LIVER, 0.3 * REM * seconds_per_tick, required_organtype = affected_organtype)
|
||||
invisible_man.adjustOrganLoss(ORGAN_SLOT_LIVER, 0.3 * REM * seconds_per_tick, required_organ_flag = affected_organ_flags)
|
||||
|
||||
/datum/reagent/drug/saturnx/on_mob_metabolize(mob/living/invisible_man)
|
||||
. = ..()
|
||||
@@ -745,7 +745,7 @@
|
||||
invisible_man.emote("giggle")
|
||||
if(SPT_PROB(5, seconds_per_tick))
|
||||
invisible_man.emote("laugh")
|
||||
invisible_man.adjustOrganLoss(ORGAN_SLOT_LIVER, 0.4 * REM * seconds_per_tick, required_organtype = affected_organtype)
|
||||
invisible_man.adjustOrganLoss(ORGAN_SLOT_LIVER, 0.4 * REM * seconds_per_tick, required_organ_flag = affected_organ_flags)
|
||||
|
||||
/datum/reagent/drug/saturnx/stable
|
||||
name = "Stabilized Saturn-X"
|
||||
@@ -787,7 +787,7 @@
|
||||
/datum/reagent/drug/kronkaine/on_mob_life(mob/living/carbon/kronkaine_fiend, seconds_per_tick, times_fired)
|
||||
. = ..()
|
||||
kronkaine_fiend.add_mood_event("tweaking", /datum/mood_event/stimulant_medium, name)
|
||||
kronkaine_fiend.adjustOrganLoss(ORGAN_SLOT_HEART, 0.4 * REM * seconds_per_tick, required_organtype = affected_organtype)
|
||||
kronkaine_fiend.adjustOrganLoss(ORGAN_SLOT_HEART, 0.4 * REM * seconds_per_tick, required_organ_flag = affected_organ_flags)
|
||||
kronkaine_fiend.set_jitter_if_lower(20 SECONDS * REM * seconds_per_tick)
|
||||
kronkaine_fiend.AdjustSleeping(-20 * REM * seconds_per_tick)
|
||||
kronkaine_fiend.adjust_drowsiness(-10 SECONDS * REM * seconds_per_tick)
|
||||
@@ -800,7 +800,7 @@
|
||||
|
||||
/datum/reagent/drug/kronkaine/overdose_process(mob/living/kronkaine_fiend, seconds_per_tick, times_fired)
|
||||
. = ..()
|
||||
kronkaine_fiend.adjustOrganLoss(ORGAN_SLOT_HEART, 1 * REM * seconds_per_tick, required_organtype = affected_organtype)
|
||||
kronkaine_fiend.adjustOrganLoss(ORGAN_SLOT_HEART, 1 * REM * seconds_per_tick, required_organ_flag = affected_organ_flags)
|
||||
kronkaine_fiend.set_jitter_if_lower(20 SECONDS * REM * seconds_per_tick)
|
||||
if(SPT_PROB(10, seconds_per_tick))
|
||||
to_chat(kronkaine_fiend, span_danger(pick("You feel like your heart is going to explode!", "Your ears are ringing!", "You sweat like a pig!", "You clench your jaw and grind your teeth.", "You feel prickles of pain in your chest.")))
|
||||
|
||||
@@ -15,11 +15,11 @@
|
||||
var/liver_damage = 0.5
|
||||
|
||||
/datum/reagent/impurity/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired)
|
||||
var/obj/item/organ/internal/liver/L = affected_mob.get_organ_slot(ORGAN_SLOT_LIVER)
|
||||
if(!L)//Though, lets be safe
|
||||
var/obj/item/organ/internal/liver/liver = affected_mob.get_organ_slot(ORGAN_SLOT_LIVER)
|
||||
if(!liver)//Though, lets be safe
|
||||
affected_mob.adjustToxLoss(1 * REM * seconds_per_tick, FALSE, required_biotype = affected_biotype)//Incase of no liver!
|
||||
return ..()
|
||||
affected_mob.adjustOrganLoss(ORGAN_SLOT_LIVER, liver_damage * REM * seconds_per_tick, required_organtype = affected_organtype)
|
||||
affected_mob.adjustOrganLoss(ORGAN_SLOT_LIVER, liver_damage * REM * seconds_per_tick, required_organ_flag = affected_organ_flags)
|
||||
return ..()
|
||||
|
||||
//Basically just so people don't forget to adjust metabolization_rate
|
||||
|
||||
+3
-3
@@ -297,7 +297,7 @@ Basically, we fill the time between now and 2s from now with hands based off the
|
||||
|
||||
/datum/reagent/inverse/hercuri/overdose_process(mob/living/carbon/owner, seconds_per_tick, times_fired)
|
||||
. = ..()
|
||||
owner.adjustOrganLoss(ORGAN_SLOT_LIVER, 2 * REM * seconds_per_tick, required_organtype = affected_organtype) //Makes it so you can't abuse it with pyroxadone very easily (liver dies from 25u unless it's fully upgraded)
|
||||
owner.adjustOrganLoss(ORGAN_SLOT_LIVER, 2 * REM * seconds_per_tick, required_organ_flag = affected_organ_flags) //Makes it so you can't abuse it with pyroxadone very easily (liver dies from 25u unless it's fully upgraded)
|
||||
var/heating = 10 * creation_purity * REM * seconds_per_tick * TEMPERATURE_DAMAGE_COEFFICIENT
|
||||
owner.adjust_bodytemperature(heating) //hot hot
|
||||
if(ishuman(owner))
|
||||
@@ -491,7 +491,7 @@ Basically, we fill the time between now and 2s from now with hands based off the
|
||||
//Heals toxins if it's the only thing present - kinda the oposite of multiver! Maybe that's why it's inverse!
|
||||
/datum/reagent/inverse/healing/monover/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired)
|
||||
if(length(affected_mob.reagents.reagent_list) > 1)
|
||||
affected_mob.adjustOrganLoss(ORGAN_SLOT_LUNGS, 0.5 * seconds_per_tick, required_organtype = affected_organtype) //Hey! It's everyone's favourite drawback from multiver!
|
||||
affected_mob.adjustOrganLoss(ORGAN_SLOT_LUNGS, 0.5 * seconds_per_tick, required_organ_flag = affected_organ_flags) //Hey! It's everyone's favourite drawback from multiver!
|
||||
return ..()
|
||||
affected_mob.adjustToxLoss(-2 * REM * creation_purity * seconds_per_tick, FALSE, required_biotype = affected_biotype)
|
||||
..()
|
||||
@@ -552,7 +552,7 @@ Basically, we fill the time between now and 2s from now with hands based off the
|
||||
for(var/datum/wound/iter_wound as anything in affected_mob.all_wounds)
|
||||
iter_wound.adjust_blood_flow(1-creation_purity)
|
||||
affected_mob.adjustBruteLoss(5 * (1-creation_purity) * seconds_per_tick, required_bodytype = affected_bodytype)
|
||||
affected_mob.adjustOrganLoss(ORGAN_SLOT_HEART, (1 + (1-creation_purity)) * seconds_per_tick, required_organtype = affected_organtype)
|
||||
affected_mob.adjustOrganLoss(ORGAN_SLOT_HEART, (1 + (1-creation_purity)) * seconds_per_tick, required_organ_flag = affected_organ_flags)
|
||||
if(affected_mob.health < HEALTH_THRESHOLD_CRIT)
|
||||
affected_mob.add_movespeed_modifier(/datum/movespeed_modifier/reagent/nooartrium)
|
||||
if(affected_mob.health < HEALTH_THRESHOLD_FULLCRIT)
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
|
||||
/datum/reagent/impurity/methanol/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired)
|
||||
var/obj/item/organ/internal/eyes/eyes = affected_mob.get_organ_slot(ORGAN_SLOT_EYES)
|
||||
eyes?.apply_organ_damage(0.5 * REM * seconds_per_tick, required_organtype = affected_organtype)
|
||||
eyes?.apply_organ_damage(0.5 * REM * seconds_per_tick, required_organ_flag = affected_organ_flags)
|
||||
return ..()
|
||||
|
||||
//Chloral Hydrate - Impure Version
|
||||
|
||||
@@ -720,7 +720,7 @@
|
||||
var/obj/item/organ/internal/eyes/eyes = affected_mob.get_organ_slot(ORGAN_SLOT_EYES)
|
||||
if(eyes)
|
||||
// Healing eye damage will cure nearsightedness and blindness from ... eye damage
|
||||
eyes.apply_organ_damage(-2 * REM * seconds_per_tick * normalise_creation_purity(), required_organtype = affected_organtype)
|
||||
eyes.apply_organ_damage(-2 * REM * seconds_per_tick * normalise_creation_purity(), required_organ_flag = affected_organ_flags)
|
||||
// If our eyes are seriously damaged, we have a probability of causing eye blur while healing depending on purity
|
||||
if(eyes.damaged && SPT_PROB(16 - min(normalized_purity * 6, 12), seconds_per_tick))
|
||||
// While healing, gives some eye blur
|
||||
@@ -990,7 +990,7 @@
|
||||
inverse_chem_val = 0.45
|
||||
|
||||
/datum/reagent/medicine/mannitol/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired)
|
||||
affected_mob.adjustOrganLoss(ORGAN_SLOT_BRAIN, -2 * REM * seconds_per_tick * normalise_creation_purity(), required_organtype = affected_organtype)
|
||||
affected_mob.adjustOrganLoss(ORGAN_SLOT_BRAIN, -2 * REM * seconds_per_tick * normalise_creation_purity(), required_organ_flag = affected_organ_flags)
|
||||
..()
|
||||
|
||||
//Having mannitol in you will pause the brain damage from brain tumor (so it heals an even 2 brain damage instead of 1.8)
|
||||
@@ -1056,7 +1056,7 @@
|
||||
..()
|
||||
|
||||
/datum/reagent/medicine/neurine/on_mob_dead(mob/living/carbon/affected_mob, seconds_per_tick)
|
||||
affected_mob.adjustOrganLoss(ORGAN_SLOT_BRAIN, -1 * REM * seconds_per_tick * normalise_creation_purity(), required_organtype = affected_organtype)
|
||||
affected_mob.adjustOrganLoss(ORGAN_SLOT_BRAIN, -1 * REM * seconds_per_tick * normalise_creation_purity(), required_organ_flag = affected_organ_flags)
|
||||
..()
|
||||
|
||||
/datum/reagent/medicine/mutadone
|
||||
@@ -1242,7 +1242,7 @@
|
||||
affected_mob.adjustToxLoss(-0.5 * REM * seconds_per_tick, FALSE, required_biotype = affected_biotype)
|
||||
affected_mob.adjustCloneLoss(-0.1 * REM * seconds_per_tick, FALSE, required_biotype = affected_biotype)
|
||||
affected_mob.adjustStaminaLoss(-0.5 * REM * seconds_per_tick, FALSE, required_biotype = affected_biotype)
|
||||
affected_mob.adjustOrganLoss(ORGAN_SLOT_BRAIN, 1 * REM * seconds_per_tick, 150, affected_organtype) //This does, after all, come from ambrosia, and the most powerful ambrosia in existence, at that!
|
||||
affected_mob.adjustOrganLoss(ORGAN_SLOT_BRAIN, 1 * REM * seconds_per_tick, 150, affected_organ_flags) //This does, after all, come from ambrosia, and the most powerful ambrosia in existence, at that!
|
||||
else
|
||||
affected_mob.adjustBruteLoss(-5 * REM * seconds_per_tick, FALSE, required_bodytype = affected_bodytype) //slow to start, but very quick healing once it gets going
|
||||
affected_mob.adjustFireLoss(-5 * REM * seconds_per_tick, FALSE, required_bodytype = affected_bodytype)
|
||||
@@ -1251,7 +1251,7 @@
|
||||
affected_mob.adjustCloneLoss(-1 * REM * seconds_per_tick, FALSE, required_biotype = affected_biotype)
|
||||
affected_mob.adjustStaminaLoss(-3 * REM * seconds_per_tick, FALSE, required_biotype = affected_biotype)
|
||||
affected_mob.adjust_jitter_up_to(6 SECONDS * REM * seconds_per_tick, 1 MINUTES)
|
||||
affected_mob.adjustOrganLoss(ORGAN_SLOT_BRAIN, 2 * REM * seconds_per_tick, 150, affected_organtype)
|
||||
affected_mob.adjustOrganLoss(ORGAN_SLOT_BRAIN, 2 * REM * seconds_per_tick, 150, affected_organ_flags)
|
||||
if(SPT_PROB(5, seconds_per_tick))
|
||||
affected_mob.say(return_hippie_line(), forced = /datum/reagent/medicine/earthsblood)
|
||||
affected_mob.adjust_drugginess_up_to(20 SECONDS * REM * seconds_per_tick, 30 SECONDS * REM * seconds_per_tick)
|
||||
@@ -1313,7 +1313,7 @@
|
||||
affected_mob.adjust_hallucinations(-10 SECONDS * REM * seconds_per_tick)
|
||||
|
||||
if(SPT_PROB(10, seconds_per_tick))
|
||||
affected_mob.adjustOrganLoss(ORGAN_SLOT_BRAIN, 1, 50, affected_organtype)
|
||||
affected_mob.adjustOrganLoss(ORGAN_SLOT_BRAIN, 1, 50, affected_organ_flags)
|
||||
affected_mob.adjustStaminaLoss(2.5 * REM * seconds_per_tick, FALSE, required_biotype = affected_biotype)
|
||||
..()
|
||||
return TRUE
|
||||
@@ -1543,7 +1543,7 @@
|
||||
chemical_flags = REAGENT_CAN_BE_SYNTHESIZED
|
||||
|
||||
/datum/reagent/medicine/silibinin/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired)
|
||||
affected_mob.adjustOrganLoss(ORGAN_SLOT_LIVER, -2 * REM * seconds_per_tick, required_organtype = affected_organtype)//Add a chance to cure liver trauma once implemented.
|
||||
affected_mob.adjustOrganLoss(ORGAN_SLOT_LIVER, -2 * REM * seconds_per_tick, required_organ_flag = affected_organ_flags)//Add a chance to cure liver trauma once implemented.
|
||||
..()
|
||||
. = TRUE
|
||||
|
||||
@@ -1559,7 +1559,7 @@
|
||||
|
||||
/datum/reagent/medicine/polypyr/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) //I wanted a collection of small positive effects, this is as hard to obtain as coniine after all.
|
||||
. = ..()
|
||||
affected_mob.adjustOrganLoss(ORGAN_SLOT_LUNGS, -0.25 * REM * seconds_per_tick, required_organtype = affected_organtype)
|
||||
affected_mob.adjustOrganLoss(ORGAN_SLOT_LUNGS, -0.25 * REM * seconds_per_tick, required_organ_flag = affected_organ_flags)
|
||||
affected_mob.adjustBruteLoss(-0.35 * REM * seconds_per_tick, FALSE, required_bodytype = affected_bodytype)
|
||||
return TRUE
|
||||
|
||||
@@ -1572,7 +1572,7 @@
|
||||
exposed_human.update_body_parts()
|
||||
|
||||
/datum/reagent/medicine/polypyr/overdose_process(mob/living/affected_mob, seconds_per_tick, times_fired)
|
||||
affected_mob.adjustOrganLoss(ORGAN_SLOT_LUNGS, 0.5 * REM * seconds_per_tick, required_organtype = affected_organtype)
|
||||
affected_mob.adjustOrganLoss(ORGAN_SLOT_LUNGS, 0.5 * REM * seconds_per_tick, required_organ_flag = affected_organ_flags)
|
||||
..()
|
||||
. = TRUE
|
||||
|
||||
@@ -1594,7 +1594,7 @@
|
||||
|
||||
/datum/reagent/medicine/granibitaluri/overdose_process(mob/living/affected_mob, seconds_per_tick, times_fired)
|
||||
. = TRUE
|
||||
affected_mob.adjustOrganLoss(ORGAN_SLOT_LIVER, 0.2 * REM * seconds_per_tick, required_organtype = affected_organtype)
|
||||
affected_mob.adjustOrganLoss(ORGAN_SLOT_LIVER, 0.2 * REM * seconds_per_tick, required_organ_flag = affected_organ_flags)
|
||||
affected_mob.adjustToxLoss(0.2 * REM * seconds_per_tick, FALSE, required_biotype = affected_biotype) //Only really deadly if you eat over 100u
|
||||
..()
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
to_chat(user, span_warning("The limb is missing!"))
|
||||
return
|
||||
if(!IS_ORGANIC_LIMB(affecting))
|
||||
to_chat(user, span_notice("Medicine won't work on a robotic limb!"))
|
||||
to_chat(user, span_notice("Medicine won't work on an inorganic limb!"))
|
||||
return
|
||||
..()
|
||||
|
||||
|
||||
@@ -98,7 +98,7 @@
|
||||
return FALSE
|
||||
var/mob/living/carbon/human/blessed = target
|
||||
for(var/obj/item/bodypart/bodypart as anything in blessed.bodyparts)
|
||||
if(!IS_ORGANIC_LIMB(bodypart))
|
||||
if(IS_ROBOTIC_LIMB(bodypart))
|
||||
to_chat(chap, span_warning("[GLOB.deity] refuses to heal this metallic taint!"))
|
||||
return TRUE
|
||||
|
||||
@@ -258,7 +258,7 @@
|
||||
return FALSE
|
||||
var/mob/living/carbon/human/blessed = blessed_living
|
||||
for(var/obj/item/bodypart/robolimb as anything in blessed.bodyparts)
|
||||
if(!IS_ORGANIC_LIMB(robolimb))
|
||||
if(IS_ROBOTIC_LIMB(robolimb))
|
||||
to_chat(chap, span_warning("[GLOB.deity] refuses to heal this metallic taint!"))
|
||||
return TRUE
|
||||
|
||||
|
||||
@@ -66,20 +66,16 @@
|
||||
var/speed_modifier = 0
|
||||
|
||||
// Limb disabling variables
|
||||
///Whether it is possible for the limb to be disabled whatsoever. TRUE means that it is possible.
|
||||
var/can_be_disabled = FALSE //Defaults to FALSE, as only human limbs can be disabled, and only the appendages.
|
||||
///Controls if the limb is disabled. TRUE means it is disabled (similar to being removed, but still present for the sake of targeted interactions).
|
||||
var/bodypart_disabled = FALSE
|
||||
///Handles limb disabling by damage. If 0 (0%), a limb can't be disabled via damage. If 1 (100%), it is disabled at max limb damage. Anything between is the percentage of damage against maximum limb damage needed to disable the limb.
|
||||
var/disabling_threshold_percentage = 0
|
||||
///Whether it is possible for the limb to be disabled whatsoever. TRUE means that it is possible.
|
||||
var/can_be_disabled = FALSE //Defaults to FALSE, as only human limbs can be disabled, and only the appendages.
|
||||
|
||||
// Damage state variables
|
||||
|
||||
// Damage variables
|
||||
///A mutiplication of the burn and brute damage that the limb's stored damage contributes to its attached mob's overall wellbeing.
|
||||
var/body_damage_coeff = 1
|
||||
///Used in determining overlays for limb damage states. As the mob receives more burn/brute damage, their limbs update to reflect.
|
||||
var/brutestate = 0
|
||||
var/burnstate = 0
|
||||
///The current amount of brute damage the limb has
|
||||
var/brute_dam = 0
|
||||
///The current amount of burn damage the limb has
|
||||
@@ -87,6 +83,10 @@
|
||||
///The maximum brute OR burn damage a bodypart can take. Once we hit this cap, no more damage of either type!
|
||||
var/max_damage = 0
|
||||
|
||||
//Used in determining overlays for limb damage states. As the mob receives more burn/brute damage, their limbs update to reflect.
|
||||
var/brutestate = 0
|
||||
var/burnstate = 0
|
||||
|
||||
///Gradually increases while burning when at full damage, destroys the limb when at 100
|
||||
var/cremation_progress = 0
|
||||
|
||||
@@ -1170,7 +1170,7 @@
|
||||
|
||||
/obj/item/bodypart/emp_act(severity)
|
||||
. = ..()
|
||||
if(. & EMP_PROTECT_WIRES || !(bodytype & BODYTYPE_ROBOTIC))
|
||||
if(. & EMP_PROTECT_WIRES || !IS_ROBOTIC_LIMB(src))
|
||||
return FALSE
|
||||
owner.visible_message(span_danger("[owner]'s [src.name] seems to malfunction!"))
|
||||
|
||||
|
||||
@@ -4,26 +4,32 @@
|
||||
icon = 'icons/obj/medical/organs/organs.dmi'
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
throwforce = 0
|
||||
///The mob that owns this organ.
|
||||
/// The mob that owns this organ.
|
||||
var/mob/living/carbon/owner = null
|
||||
var/status = ORGAN_ORGANIC
|
||||
///The body zone this organ is supposed to inhabit.
|
||||
/// The body zone this organ is supposed to inhabit.
|
||||
var/zone = BODY_ZONE_CHEST
|
||||
///The organ slot this organ is supposed to inhabit. This should be unique by type. (Lungs, Appendix, Stomach, etc)
|
||||
/**
|
||||
* The organ slot this organ is supposed to inhabit. This should be unique by type. (Lungs, Appendix, Stomach, etc)
|
||||
* Do NOT add slots with matching names to different zones - it will break the organs_slot list!
|
||||
*/
|
||||
var/slot
|
||||
// DO NOT add slots with matching names to different zones - it will break organs_slot list!
|
||||
var/organ_flags = ORGAN_EDIBLE
|
||||
/// Random flags that describe this organ
|
||||
var/organ_flags = ORGAN_ORGANIC | ORGAN_EDIBLE
|
||||
/// Maximum damage the organ can take, ever.
|
||||
var/maxHealth = STANDARD_ORGAN_THRESHOLD
|
||||
/// Total damage this organ has sustained
|
||||
/// Should only ever be modified by apply_organ_damage
|
||||
/**
|
||||
* Total damage this organ has sustained.
|
||||
* Should only ever be modified by apply_organ_damage!
|
||||
*/
|
||||
var/damage = 0
|
||||
///Healing factor and decay factor function on % of maxhealth, and do not work by applying a static number per tick
|
||||
/// Healing factor and decay factor function on % of maxhealth, and do not work by applying a static number per tick
|
||||
var/healing_factor = 0 //fraction of maxhealth healed per on_life(), set to 0 for generic organs
|
||||
var/decay_factor = 0 //same as above but when without a living owner, set to 0 for generic organs
|
||||
var/high_threshold = STANDARD_ORGAN_THRESHOLD * 0.45 //when severe organ damage occurs
|
||||
var/low_threshold = STANDARD_ORGAN_THRESHOLD * 0.1 //when minor organ damage occurs
|
||||
var/severe_cooldown //cooldown for severe effects, used for synthetic organ emp effects.
|
||||
///Organ variables for determining what we alert the owner with when they pass/clear the damage thresholds
|
||||
|
||||
// Organ variables for determining what we alert the owner with when they pass/clear the damage thresholds
|
||||
var/prev_damage = 0
|
||||
var/low_threshold_passed
|
||||
var/high_threshold_passed
|
||||
@@ -32,16 +38,22 @@
|
||||
var/high_threshold_cleared
|
||||
var/low_threshold_cleared
|
||||
|
||||
///When you take a bite you cant jam it in for surgery anymore.
|
||||
/// When set to false, this can't be used in surgeries and such - Honestly a terrible variable.
|
||||
var/useable = TRUE
|
||||
|
||||
/// Food reagents if the organ is edible
|
||||
var/list/food_reagents = list(/datum/reagent/consumable/nutriment = 5)
|
||||
///The size of the reagent container
|
||||
/// The size of the reagent container if the organ is edible
|
||||
var/reagent_vol = 10
|
||||
|
||||
/// Time this organ has failed for
|
||||
var/failure_time = 0
|
||||
///Do we effect the appearance of our mob. Used to save time in preference code
|
||||
/// Do we affect the appearance of our mob. Used to save time in preference code
|
||||
var/visual = TRUE
|
||||
/// Traits that are given to the holder of the organ. If you want an effect that changes this, don't add directly to this. Use the add_organ_trait() proc
|
||||
/**
|
||||
* Traits that are given to the holder of the organ.
|
||||
* If you want an effect that changes this, don't add directly to this. Use the add_organ_trait() proc.
|
||||
*/
|
||||
var/list/organ_traits
|
||||
/// Status Effects that are given to the holder of the organ.
|
||||
var/list/organ_effects
|
||||
@@ -201,7 +213,7 @@ INITIALIZE_IMMEDIATE(/obj/item/organ)
|
||||
. += span_notice("It should be inserted in the [parse_zone(zone)].")
|
||||
|
||||
if(organ_flags & ORGAN_FAILING)
|
||||
if(status == ORGAN_ROBOTIC)
|
||||
if(IS_ROBOTIC_ORGAN(src))
|
||||
. += span_warning("[src] seems to be broken.")
|
||||
return
|
||||
. += span_warning("[src] has decayed for too long, and has turned a sickly color. It probably won't work without repairs.")
|
||||
@@ -225,12 +237,12 @@ INITIALIZE_IMMEDIATE(/obj/item/organ)
|
||||
return //so we don't grant the organ's action to mobs who pick up the organ.
|
||||
|
||||
///Adjusts an organ's damage by the amount "damage_amount", up to a maximum amount, which is by default max damage
|
||||
/obj/item/organ/proc/apply_organ_damage(damage_amount, maximum = maxHealth, required_organtype) //use for damaging effects
|
||||
/obj/item/organ/proc/apply_organ_damage(damage_amount, maximum = maxHealth, required_organ_flag = NONE) //use for damaging effects
|
||||
if(!damage_amount) //Micro-optimization.
|
||||
return
|
||||
if(maximum < damage)
|
||||
return
|
||||
if(required_organtype && (status != required_organtype))
|
||||
if(required_organ_flag && !(organ_flags & required_organ_flag))
|
||||
return
|
||||
damage = clamp(damage + damage_amount, 0, maximum)
|
||||
var/mess = check_damage_thresholds(owner)
|
||||
@@ -245,8 +257,8 @@ INITIALIZE_IMMEDIATE(/obj/item/organ)
|
||||
to_chat(owner, mess)
|
||||
|
||||
///SETS an organ's damage to the amount "damage_amount", and in doing so clears or sets the failing flag, good for when you have an effect that should fix an organ if broken
|
||||
/obj/item/organ/proc/set_organ_damage(damage_amount, required_organtype) //use mostly for admin heals
|
||||
apply_organ_damage(damage_amount - damage, required_organtype = required_organtype)
|
||||
/obj/item/organ/proc/set_organ_damage(damage_amount, required_organ_flag = NONE) //use mostly for admin heals
|
||||
return apply_organ_damage(damage_amount - damage, required_organ_flag = required_organ_flag)
|
||||
|
||||
/** check_damage_thresholds
|
||||
* input: mob/organ_owner (a mob, the owner of the organ we call the proc on)
|
||||
|
||||
+1
-1
@@ -7,7 +7,7 @@
|
||||
name = "external organ"
|
||||
desc = "An external organ that is too external."
|
||||
|
||||
organ_flags = ORGAN_EDIBLE
|
||||
organ_flags = ORGAN_ORGANIC | ORGAN_EDIBLE
|
||||
visual = TRUE
|
||||
|
||||
///The overlay datum that actually draws stuff on the limb
|
||||
|
||||
@@ -174,6 +174,7 @@
|
||||
/obj/item/organ/external/wings/functional/robotic
|
||||
name = "robotic wings"
|
||||
desc = "Using microscopic hover-engines, or \"microwings,\" as they're known in the trade, these tiny devices are able to lift a few grams at a time. Gathering enough of them, and you can lift impressively large things."
|
||||
organ_flags = ORGAN_ROBOTIC
|
||||
sprite_accessory_override = /datum/sprite_accessory/wings/robotic
|
||||
|
||||
///skeletal wings, which relate to skeletal races.
|
||||
|
||||
@@ -41,7 +41,7 @@
|
||||
on_death(seconds_per_tick, times_fired) //Kinda hate doing it like this, but I really don't want to call process directly.
|
||||
|
||||
/obj/item/organ/internal/on_death(seconds_per_tick, times_fired) //runs decay when outside of a person
|
||||
if(organ_flags & (ORGAN_SYNTHETIC | ORGAN_FROZEN))
|
||||
if(organ_flags & (ORGAN_ROBOTIC | ORGAN_FROZEN))
|
||||
return
|
||||
apply_organ_damage(decay_factor * maxHealth * seconds_per_tick)
|
||||
|
||||
@@ -57,7 +57,7 @@
|
||||
if(failure_time > 0)
|
||||
failure_time--
|
||||
|
||||
if(organ_flags & ORGAN_SYNTHETIC_EMP) //Synthetic organ has been emped, is now failing.
|
||||
if(organ_flags & ORGAN_EMP) //Synthetic organ has been emped, is now failing.
|
||||
apply_organ_damage(decay_factor * maxHealth * seconds_per_tick)
|
||||
return
|
||||
|
||||
|
||||
@@ -28,14 +28,13 @@
|
||||
return ..()
|
||||
|
||||
/obj/item/organ/internal/appendix/on_life(seconds_per_tick, times_fired)
|
||||
..()
|
||||
var/mob/living/carbon/organ_owner = owner
|
||||
if(!organ_owner)
|
||||
. = ..()
|
||||
if(!owner)
|
||||
return
|
||||
|
||||
if(organ_flags & ORGAN_FAILING)
|
||||
// forced to ensure people don't use it to gain tox as slime person
|
||||
organ_owner.adjustToxLoss(2 * seconds_per_tick, updating_health = TRUE, forced = TRUE)
|
||||
owner.adjustToxLoss(2 * seconds_per_tick, updating_health = TRUE, forced = TRUE)
|
||||
else if(inflamation_stage)
|
||||
inflamation(seconds_per_tick)
|
||||
else if(SPT_PROB(APPENDICITIS_PROB, seconds_per_tick))
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
desc = "This expanded digestive chamber allows golems to smelt minerals, provided that they are immersed in lava."
|
||||
icon_state = "ethereal_heart"
|
||||
color = COLOR_GOLEM_GRAY
|
||||
status = ORGAN_MINERAL
|
||||
organ_flags = ORGAN_MINERAL
|
||||
/// Action which performs smelting
|
||||
var/datum/action/cooldown/internal_smelting/smelter
|
||||
|
||||
|
||||
@@ -60,7 +60,7 @@
|
||||
|
||||
/obj/item/organ/internal/cyberimp/arm/examine(mob/user)
|
||||
. = ..()
|
||||
if(status == ORGAN_ROBOTIC)
|
||||
if(IS_ROBOTIC_ORGAN(src))
|
||||
. += span_info("[src] is assembled in the [zone == BODY_ZONE_R_ARM ? "right" : "left"] arm configuration. You can use a screwdriver to reassemble it.")
|
||||
|
||||
/obj/item/organ/internal/cyberimp/arm/screwdriver_act(mob/living/user, obj/item/screwtool)
|
||||
@@ -98,7 +98,7 @@
|
||||
|
||||
/obj/item/organ/internal/cyberimp/arm/emp_act(severity)
|
||||
. = ..()
|
||||
if(. & EMP_PROTECT_SELF || status == ORGAN_ORGANIC)
|
||||
if(. & EMP_PROTECT_SELF || !IS_ROBOTIC_ORGAN(src))
|
||||
return
|
||||
if(prob(15/severity) && owner)
|
||||
to_chat(owner, span_warning("The electromagnetic pulse causes [src] to malfunction!"))
|
||||
|
||||
@@ -44,7 +44,6 @@
|
||||
desc = "These cybernetic eye implants will display a security HUD over everything you see."
|
||||
HUD_type = DATA_HUD_SECURITY_ADVANCED
|
||||
HUD_trait = TRAIT_SECURITY_HUD
|
||||
organ_flags = ALL
|
||||
|
||||
/obj/item/organ/internal/cyberimp/eyes/hud/diagnostic
|
||||
name = "Diagnostic HUD implant"
|
||||
@@ -54,4 +53,4 @@
|
||||
/obj/item/organ/internal/cyberimp/eyes/hud/security/syndicate
|
||||
name = "Contraband Security HUD Implant"
|
||||
desc = "A Cybersun Industries brand Security HUD Implant. These illicit cybernetic eye implants will display a security HUD over everything you see."
|
||||
organ_flags = ORGAN_SYNTHETIC | ORGAN_HIDDEN
|
||||
organ_flags = ORGAN_ROBOTIC | ORGAN_HIDDEN
|
||||
|
||||
@@ -3,8 +3,7 @@
|
||||
name = "cybernetic implant"
|
||||
desc = "A state-of-the-art implant that improves a baseline's functionality."
|
||||
visual = FALSE
|
||||
status = ORGAN_ROBOTIC
|
||||
organ_flags = ORGAN_SYNTHETIC
|
||||
organ_flags = ORGAN_ROBOTIC
|
||||
var/implant_color = "#FFFFFF"
|
||||
var/implant_overlay
|
||||
|
||||
|
||||
@@ -104,7 +104,7 @@
|
||||
icon_state = "ears-c"
|
||||
desc = "A basic cybernetic organ designed to mimic the operation of ears."
|
||||
damage_multiplier = 0.9
|
||||
organ_flags = ORGAN_SYNTHETIC
|
||||
organ_flags = ORGAN_ROBOTIC
|
||||
|
||||
/obj/item/organ/internal/ears/cybernetic/upgraded
|
||||
name = "upgraded cybernetic ears"
|
||||
|
||||
@@ -151,7 +151,7 @@
|
||||
eye_color_left = initial(eye_color_left)
|
||||
eye_color_right = initial(eye_color_right)
|
||||
|
||||
/obj/item/organ/internal/eyes/apply_organ_damage(damage_amount, maximum, required_organtype)
|
||||
/obj/item/organ/internal/eyes/apply_organ_damage(damage_amount, maximum = maxHealth, required_organ_flag)
|
||||
. = ..()
|
||||
if(!owner)
|
||||
return
|
||||
@@ -261,7 +261,7 @@
|
||||
desc = "Golems somehow measure external light levels and detect nearby ore using this sensitive mineral lattice."
|
||||
color = COLOR_GOLEM_GRAY
|
||||
visual = FALSE
|
||||
status = ORGAN_MINERAL
|
||||
organ_flags = ORGAN_MINERAL
|
||||
color_cutoffs = list(10, 15, 5)
|
||||
actions_types = list(/datum/action/cooldown/golem_ore_sight)
|
||||
|
||||
@@ -284,12 +284,11 @@
|
||||
name = "robotic eyes"
|
||||
icon_state = "cybernetic_eyeballs"
|
||||
desc = "Your vision is augmented."
|
||||
status = ORGAN_ROBOTIC
|
||||
organ_flags = ORGAN_SYNTHETIC
|
||||
organ_flags = ORGAN_ROBOTIC
|
||||
|
||||
/obj/item/organ/internal/eyes/robotic/emp_act(severity)
|
||||
. = ..()
|
||||
if(!owner || . & EMP_PROTECT_SELF)
|
||||
if((. & EMP_PROTECT_SELF) || !owner)
|
||||
return
|
||||
if(prob(10 * severity))
|
||||
return
|
||||
|
||||
@@ -201,7 +201,7 @@
|
||||
desc = "A basic electronic device designed to mimic the functions of an organic human heart."
|
||||
icon_state = "heart-c-on"
|
||||
base_icon_state = "heart-c"
|
||||
organ_flags = ORGAN_SYNTHETIC
|
||||
organ_flags = ORGAN_ROBOTIC
|
||||
maxHealth = STANDARD_ORGAN_THRESHOLD*0.75 //This also hits defib timer, so a bit higher than its less important counterparts
|
||||
|
||||
var/dose_available = FALSE
|
||||
@@ -241,7 +241,7 @@
|
||||
owner.losebreath += 10
|
||||
COOLDOWN_START(src, severe_cooldown, 20 SECONDS)
|
||||
if(prob(emp_vulnerability/severity)) //Chance of permanent effects
|
||||
organ_flags |= ORGAN_SYNTHETIC_EMP //Starts organ faliure - gonna need replacing soon.
|
||||
organ_flags |= ORGAN_EMP //Starts organ faliure - gonna need replacing soon.
|
||||
Stop()
|
||||
owner.visible_message(span_danger("[owner] clutches at [owner.p_their()] chest as if [owner.p_their()] heart is stopping!"), \
|
||||
span_userdanger("You feel a terrible pain in your chest, as if your heart has stopped!"))
|
||||
@@ -263,7 +263,7 @@
|
||||
/obj/item/organ/internal/heart/freedom
|
||||
name = "heart of freedom"
|
||||
desc = "This heart pumps with the passion to give... something freedom."
|
||||
organ_flags = ORGAN_SYNTHETIC //the power of freedom prevents heart attacks
|
||||
organ_flags = ORGAN_ROBOTIC //the power of freedom prevents heart attacks
|
||||
/// The cooldown until the next time this heart can give the host an adrenaline boost.
|
||||
COOLDOWN_DECLARE(adrenaline_cooldown)
|
||||
|
||||
|
||||
@@ -139,7 +139,7 @@
|
||||
|
||||
if(filterToxins && !HAS_TRAIT(owner, TRAIT_TOXINLOVER))
|
||||
for(var/datum/reagent/toxin/toxin in cached_reagents)
|
||||
if(status != toxin.affected_organtype) //this particular toxin does not affect this type of organ
|
||||
if(toxin.affected_organ_flags && !(organ_flags & toxin.affected_organ_flags)) //this particular toxin does not affect this type of organ
|
||||
continue
|
||||
var/amount = round(toxin.volume, CHEMICAL_QUANTISATION_LEVEL) // this is an optimization
|
||||
if(belly)
|
||||
@@ -245,7 +245,7 @@
|
||||
name = "basic cybernetic liver"
|
||||
desc = "A very basic device designed to mimic the functions of a human liver. Handles toxins slightly worse than an organic liver."
|
||||
icon_state = "liver-c"
|
||||
organ_flags = ORGAN_SYNTHETIC
|
||||
organ_flags = ORGAN_ROBOTIC
|
||||
toxTolerance = 2
|
||||
liver_resistance = 0.9 * LIVER_DEFAULT_TOX_RESISTANCE // -10%
|
||||
maxHealth = STANDARD_ORGAN_THRESHOLD*0.5
|
||||
@@ -278,7 +278,7 @@
|
||||
owner.adjustToxLoss(10)
|
||||
COOLDOWN_START(src, severe_cooldown, 10 SECONDS)
|
||||
if(prob(emp_vulnerability/severity)) //Chance of permanent effects
|
||||
organ_flags |= ORGAN_SYNTHETIC_EMP //Starts organ faliure - gonna need replacing soon.
|
||||
organ_flags |= ORGAN_EMP //Starts organ faliure - gonna need replacing soon.
|
||||
|
||||
#undef HAS_SILENT_TOXIN
|
||||
#undef HAS_NO_TOXIN
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
name = "porous rock"
|
||||
desc = "A spongy rock capable of absorbing chemicals."
|
||||
icon_state = "liver-p"
|
||||
status = ORGAN_MINERAL
|
||||
organ_flags = ORGAN_MINERAL
|
||||
color = COLOR_GOLEM_GRAY
|
||||
|
||||
/obj/item/organ/internal/liver/golem/handle_chemical(mob/living/carbon/organ_owner, datum/reagent/chem, seconds_per_tick, times_fired)
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
name = "reagent processing crystal"
|
||||
desc = "A large crystal that is somehow capable of metabolizing chemicals, these are found in plasmamen."
|
||||
icon_state = "liver-p"
|
||||
status = ORGAN_MINERAL
|
||||
organ_flags = ORGAN_MINERAL
|
||||
organ_traits = list(TRAIT_PLASMA_LOVER_METABOLISM)
|
||||
|
||||
/obj/item/organ/internal/liver/bone/plasmaman/handle_chemical(mob/living/carbon/organ_owner, datum/reagent/chem, seconds_per_tick, times_fired)
|
||||
|
||||
@@ -820,7 +820,7 @@
|
||||
name = "basic cybernetic lungs"
|
||||
desc = "A basic cybernetic version of the lungs found in traditional humanoid entities."
|
||||
icon_state = "lungs-c"
|
||||
organ_flags = ORGAN_SYNTHETIC
|
||||
organ_flags = ORGAN_ROBOTIC
|
||||
maxHealth = STANDARD_ORGAN_THRESHOLD * 0.5
|
||||
|
||||
var/emp_vulnerability = 80 //Chance of permanent effects if emp-ed.
|
||||
@@ -855,7 +855,7 @@
|
||||
owner.losebreath += 20
|
||||
COOLDOWN_START(src, severe_cooldown, 30 SECONDS)
|
||||
if(prob(emp_vulnerability/severity)) //Chance of permanent effects
|
||||
organ_flags |= ORGAN_SYNTHETIC_EMP //Starts organ faliure - gonna need replacing soon.
|
||||
organ_flags |= ORGAN_EMP //Starts organ faliure - gonna need replacing soon.
|
||||
|
||||
|
||||
/obj/item/organ/internal/lungs/lavaland
|
||||
|
||||
@@ -289,7 +289,7 @@
|
||||
name = "basic cybernetic stomach"
|
||||
desc = "A basic device designed to mimic the functions of a human stomach"
|
||||
icon_state = "stomach-c"
|
||||
organ_flags = ORGAN_SYNTHETIC
|
||||
organ_flags = ORGAN_ROBOTIC
|
||||
maxHealth = STANDARD_ORGAN_THRESHOLD * 0.5
|
||||
var/emp_vulnerability = 80 //Chance of permanent effects if emp-ed.
|
||||
metabolism_efficiency = 0.035 // not as good at digestion
|
||||
@@ -320,7 +320,7 @@
|
||||
owner.vomit(stun = FALSE)
|
||||
COOLDOWN_START(src, severe_cooldown, 10 SECONDS)
|
||||
if(prob(emp_vulnerability/severity)) //Chance of permanent effects
|
||||
organ_flags |= ORGAN_SYNTHETIC_EMP //Starts organ faliure - gonna need replacing soon.
|
||||
organ_flags |= ORGAN_EMP //Starts organ faliure - gonna need replacing soon.
|
||||
|
||||
|
||||
#undef STOMACH_METABOLISM_CONSTANT
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
icon_state = "stomach-p"
|
||||
desc = "A rocklike organ which grinds and processes nutrition from minerals."
|
||||
color = COLOR_GOLEM_GRAY
|
||||
status = ORGAN_MINERAL
|
||||
organ_flags = ORGAN_MINERAL
|
||||
organ_traits = list(TRAIT_ROCK_EATER)
|
||||
hunger_modifier = 10 // golems burn fuel quickly
|
||||
/// How slow are you when the "hungry" icon appears?
|
||||
|
||||
@@ -143,7 +143,7 @@
|
||||
ADD_TRAIT(tongue_owner, TRAIT_AGEUSIA, NO_TONGUE_TRAIT)
|
||||
tongue_owner.voice_filter = initial(tongue_owner.voice_filter)
|
||||
|
||||
/obj/item/organ/internal/tongue/apply_organ_damage(damage_amount, maximum, required_organtype)
|
||||
/obj/item/organ/internal/tongue/apply_organ_damage(damage_amount, maximum = maxHealth, required_organ_flag)
|
||||
. = ..()
|
||||
if(!owner)
|
||||
return
|
||||
@@ -467,8 +467,7 @@ GLOBAL_LIST_INIT(english_to_zombie, list())
|
||||
/obj/item/organ/internal/tongue/robot
|
||||
name = "robotic voicebox"
|
||||
desc = "A voice synthesizer that can interface with organic lifeforms."
|
||||
status = ORGAN_ROBOTIC
|
||||
organ_flags = NONE
|
||||
organ_flags = ORGAN_ROBOTIC
|
||||
icon_state = "tonguerobot"
|
||||
say_mod = "states"
|
||||
attack_verb_continuous = list("beeps", "boops")
|
||||
@@ -575,7 +574,7 @@ GLOBAL_LIST_INIT(english_to_zombie, list())
|
||||
name = "golem tongue"
|
||||
desc = "This silicate plate doesn't seem particularly mobile, but golems use it to form sounds."
|
||||
color = COLOR_WEBSAFE_DARK_GRAY
|
||||
status = ORGAN_MINERAL
|
||||
organ_flags = ORGAN_MINERAL
|
||||
say_mod = "rumbles"
|
||||
sense_of_taste = FALSE
|
||||
liked_foodtypes = STONE
|
||||
|
||||
@@ -349,7 +349,6 @@
|
||||
#include "code\__HELPERS\atoms.dm"
|
||||
#include "code\__HELPERS\auxtools.dm"
|
||||
#include "code\__HELPERS\bitflag_lists.dm"
|
||||
#include "code\__HELPERS\bodyparts.dm"
|
||||
#include "code\__HELPERS\chat.dm"
|
||||
#include "code\__HELPERS\chat_filter.dm"
|
||||
#include "code\__HELPERS\clients.dm"
|
||||
|
||||
Reference in New Issue
Block a user