Medical Expansion (#6465)

* Starts work on the Medical Expansion.

* Further Work

* Save Everything!

* Large volume of things.

* Log of Change

* I'm an idiot.

* Kidney assisted sprites. They didn't exist, for some reason.

* Fixfix

* Fixfix

* Update encased.dm

* Update glass.dm

* Update Chemistry-Reagents.dm

I am once more an idiot.

* Split augs.

* Fixfix
This commit is contained in:
Mechoid
2019-10-19 20:27:39 -07:00
committed by Atermonera
parent 5c849287c5
commit e2e870f2b4
80 changed files with 2581 additions and 167 deletions
+35
View File
@@ -1,3 +1,38 @@
/*
* Modifiers applied by Medical sources.
*/
/datum/modifier/bloodpump
name = "external blood pumping"
desc = "Your blood flows thanks to the wonderful power of science."
on_created_text = "<span class='notice'>You feel alive.</span>"
on_expired_text = "<span class='notice'>You feel.. less alive.</span>"
stacks = MODIFIER_STACK_EXTEND
pulse_set_level = PULSE_NORM
/datum/modifier/bloodpump/check_if_valid()
..()
if(holder.stat == DEAD)
src.expire()
/datum/modifier/bloodpump_corpse
name = "forced blood pumping"
desc = "Your blood flows thanks to the wonderful power of science."
on_created_text = "<span class='notice'>You feel alive.</span>"
on_expired_text = "<span class='notice'>You feel.. less alive.</span>"
stacks = MODIFIER_STACK_EXTEND
pulse_set_level = PULSE_SLOW
/datum/modifier/bloodpump/corpse/check_if_valid()
..()
if(holder.stat != DEAD)
src.expire()
/*
* Modifiers caused by chemicals or organs specifically.
*/
+26 -2
View File
@@ -182,6 +182,31 @@ the artifact triggers the rage.
accuracy_dispersion = 3 // Ditto.
evasion = -45 // Too angry to dodge.
// Speedy, but not hasted.
/datum/modifier/sprinting
name = "sprinting"
desc = "You are filled with energy!"
on_created_text = "<span class='warning'>You feel a surge of energy!</span>"
on_expired_text = "<span class='notice'>The energy high dies out.</span>"
stacks = MODIFIER_STACK_EXTEND
slowdown = -1
disable_duration_percent = 0.8
// Speedy, but not berserked.
/datum/modifier/melee_surge
name = "melee surge"
desc = "You are filled with energy!"
on_created_text = "<span class='warning'>You feel a surge of energy!</span>"
on_expired_text = "<span class='notice'>The energy high dies out.</span>"
stacks = MODIFIER_STACK_ALLOWED
attack_speed_percent = 0.8
outgoing_melee_damage_percent = 1.1
disable_duration_percent = 0.8
// Non-cult version of deep wounds.
// Surprisingly, more dangerous.
/datum/modifier/grievous_wounds
@@ -201,7 +226,6 @@ the artifact triggers the rage.
// Ignition, but confined to the modifier system.
// This makes it more predictable and thus, easier to balance.
/datum/modifier/fire
@@ -305,7 +329,7 @@ the artifact triggers the rage.
bleeding_rate_percent = 0.8
pulse_set_level = PULSE_SLOW
pulse_modifier = -1
// Temperature Normalizer.
/datum/modifier/homeothermic
+5
View File
@@ -164,6 +164,11 @@
if(name != "Noise") // Audible Emotes
if(ishuman(speaker))
var/mob/living/carbon/human/H = speaker
if(H.species.has_organ[O_VOICE] && !(flags & SIGNLANG) && !(flags & NONVERBAL)) // Does the species need a voicebox? Is the language even spoken?
var/obj/item/organ/internal/voicebox/vocal = H.internal_organs_by_name[O_VOICE]
if(!vocal || vocal.is_broken() || vocal.mute)
return FALSE
if(src.name in H.species.assisted_langs)
. = FALSE
var/obj/item/organ/internal/voicebox/vox = locate() in H.internal_organs // Only voiceboxes for now. Maybe someday it'll include other organs, but I'm not that clever
+13 -3
View File
@@ -974,7 +974,7 @@
var/brainOxPercent = 0.015 //Default 1.5% of your current oxyloss is applied as brain damage, 50 oxyloss is 1 brain damage
if(CE_STABLE in chem_effects)
brainOxPercent = 0.008 //Halved in effect
if(oxyloss >= 20 && prob(5))
if(oxyloss >= (getMaxHealth() * 0.3) && prob(5)) // If oxyloss exceeds 30% of your max health, you can take brain damage.
adjustBrainLoss(brainOxPercent * oxyloss)
if(halloss >= species.total_health)
@@ -1547,6 +1547,8 @@
var/temp = PULSE_NORM
var/brain_modifier = 1
var/modifier_shift = 0
var/modifier_set
@@ -1578,6 +1580,14 @@
var/obj/item/organ/internal/heart/Pump = internal_organs_by_name[O_HEART]
var/obj/item/organ/internal/brain/Control = internal_organs_by_name[O_BRAIN]
if(Control)
brain_modifier = Control.get_control_efficiency()
if(brain_modifier <= 0.7 && brain_modifier >= 0.4) // 70%-40% control, things start going weird as the brain is failing.
brain_modifier = rand(5, 15) / 10
if(Pump)
temp += Pump.standard_pulse_level - PULSE_NORM
@@ -1605,7 +1615,7 @@
if(R.id in cheartstopper) //Conditional heart-stoppage
if(R.volume >= R.overdose)
temp = PULSE_NONE
return temp
return temp * brain_modifier
//handles different chems' influence on pulse
for(var/datum/reagent/R in reagents.reagent_list)
if(R.id in bradycardics)
@@ -1620,7 +1630,7 @@
if(R.volume >= R.overdose)
temp = PULSE_NONE
return temp
return round(temp * brain_modifier)
/mob/living/carbon/human/proc/handle_heartbeat()
if(pulse == PULSE_NONE)
@@ -60,7 +60,9 @@
O_BRAIN = /obj/item/organ/internal/brain/replicant,
O_EYES = /obj/item/organ/internal/eyes/replicant,
O_AREJECT = /obj/item/organ/internal/immunehub/replicant,
O_VRLINK = /obj/item/organ/internal/brainmirror
O_VRLINK = /obj/item/organ/internal/brainmirror,
O_STOMACH = /obj/item/organ/internal/stomach,
O_INTESTINE = /obj/item/organ/internal/intestine
)
/datum/species/shapeshifter/replicant/alpha
@@ -95,7 +97,9 @@
O_AREJECT = /obj/item/organ/internal/immunehub/replicant,
O_PLASMA = /obj/item/organ/internal/xenos/plasmavessel/replicant,
O_ACID = /obj/item/organ/internal/xenos/acidgland/replicant,
O_VRLINK = /obj/item/organ/internal/brainmirror
O_VRLINK = /obj/item/organ/internal/brainmirror,
O_STOMACH = /obj/item/organ/internal/stomach,
O_INTESTINE = /obj/item/organ/internal/intestine
)
/datum/species/shapeshifter/replicant/beta
@@ -119,5 +123,7 @@
O_VENTC = /obj/item/organ/internal/metamorphgland/replicant,
O_PLASMA = /obj/item/organ/internal/xenos/plasmavessel/replicant,
O_RESIN = /obj/item/organ/internal/xenos/resinspinner/replicant,
O_VRLINK = /obj/item/organ/internal/brainmirror
O_VRLINK = /obj/item/organ/internal/brainmirror,
O_STOMACH = /obj/item/organ/internal/stomach,
O_INTESTINE = /obj/item/organ/internal/intestine
)
@@ -196,7 +196,9 @@
O_KIDNEYS = /obj/item/organ/internal/kidneys,
O_BRAIN = /obj/item/organ/internal/brain,
O_APPENDIX = /obj/item/organ/internal/appendix,
O_EYES = /obj/item/organ/internal/eyes
O_EYES = /obj/item/organ/internal/eyes,
O_STOMACH = /obj/item/organ/internal/stomach,
O_INTESTINE = /obj/item/organ/internal/intestine
)
var/vision_organ // If set, this organ is required for vision. Defaults to "eyes" if the species has them.
var/dispersed_eyes // If set, the species will be affected by flashbangs regardless if they have eyes or not, as they see in large areas.
@@ -48,8 +48,11 @@
O_VOICE = /obj/item/organ/internal/voicebox,
O_LIVER = /obj/item/organ/internal/liver,
O_KIDNEYS = /obj/item/organ/internal/kidneys,
O_SPLEEN = /obj/item/organ/internal/spleen/minor,
O_BRAIN = /obj/item/organ/internal/brain,
O_EYES = /obj/item/organ/internal/eyes
O_EYES = /obj/item/organ/internal/eyes,
O_STOMACH = /obj/item/organ/internal/stomach,
O_INTESTINE =/obj/item/organ/internal/intestine
)
/*
@@ -110,7 +110,9 @@
O_LIVER = /obj/item/organ/internal/liver,
O_KIDNEYS = /obj/item/organ/internal/kidneys,
O_BRAIN = /obj/item/organ/internal/brain,
O_EYES = /obj/item/organ/internal/eyes
O_EYES = /obj/item/organ/internal/eyes,
O_STOMACH = /obj/item/organ/internal/stomach,
O_INTESTINE = /obj/item/organ/internal/intestine
)
unarmed_types = list(
@@ -25,6 +25,20 @@
spawn_flags = SPECIES_CAN_JOIN
appearance_flags = HAS_HAIR_COLOR | HAS_SKIN_TONE | HAS_LIPS | HAS_UNDERWEAR | HAS_EYE_COLOR
has_organ = list(
O_HEART = /obj/item/organ/internal/heart,
O_LUNGS = /obj/item/organ/internal/lungs,
O_VOICE = /obj/item/organ/internal/voicebox,
O_LIVER = /obj/item/organ/internal/liver,
O_KIDNEYS = /obj/item/organ/internal/kidneys,
O_BRAIN = /obj/item/organ/internal/brain,
O_APPENDIX = /obj/item/organ/internal/appendix,
O_SPLEEN = /obj/item/organ/internal/spleen,
O_EYES = /obj/item/organ/internal/eyes,
O_STOMACH = /obj/item/organ/internal/stomach,
O_INTESTINE = /obj/item/organ/internal/intestine
)
inherent_verbs = list(
/mob/living/carbon/human/proc/tie_hair)
@@ -122,6 +136,8 @@
O_LIVER = /obj/item/organ/internal/liver/unathi,
O_BRAIN = /obj/item/organ/internal/brain/unathi,
O_EYES = /obj/item/organ/internal/eyes,
O_STOMACH = /obj/item/organ/internal/stomach/unathi,
O_INTESTINE = /obj/item/organ/internal/intestine/unathi
)
@@ -228,7 +244,9 @@
O_LIVER = /obj/item/organ/internal/liver,
O_KIDNEYS = /obj/item/organ/internal/kidneys,
O_BRAIN = /obj/item/organ/internal/brain,
O_EYES = /obj/item/organ/internal/eyes
O_EYES = /obj/item/organ/internal/eyes,
O_STOMACH = /obj/item/organ/internal/stomach,
O_INTESTINE = /obj/item/organ/internal/intestine
)
/datum/species/tajaran/equip_survival_gear(var/mob/living/carbon/human/H)
@@ -384,7 +402,9 @@
O_LIVER = /obj/item/organ/internal/liver,
O_KIDNEYS = /obj/item/organ/internal/kidneys,
O_BRAIN = /obj/item/organ/internal/brain,
O_EYES = /obj/item/organ/internal/eyes
O_EYES = /obj/item/organ/internal/eyes,
O_STOMACH = /obj/item/organ/internal/stomach,
O_INTESTINE =/obj/item/organ/internal/intestine
)
descriptors = list(
@@ -51,7 +51,9 @@
O_BRAIN = /obj/item/organ/internal/brain/xeno,
O_PLASMA = /obj/item/organ/internal/xenos/plasmavessel,
O_HIVE = /obj/item/organ/internal/xenos/hivenode,
O_NUTRIENT = /obj/item/organ/internal/diona/nutrients
O_NUTRIENT = /obj/item/organ/internal/diona/nutrients,
O_STOMACH = /obj/item/organ/internal/stomach/xeno,
O_INTESTINE = /obj/item/organ/internal/intestine/xeno
)
bump_flag = ALIEN
@@ -182,7 +184,9 @@
O_ACID = /obj/item/organ/internal/xenos/acidgland,
O_HIVE = /obj/item/organ/internal/xenos/hivenode,
O_RESIN = /obj/item/organ/internal/xenos/resinspinner,
O_NUTRIENT = /obj/item/organ/internal/diona/nutrients
O_NUTRIENT = /obj/item/organ/internal/diona/nutrients,
O_STOMACH = /obj/item/organ/internal/stomach/xeno,
O_INTESTINE = /obj/item/organ/internal/intestine/xeno
)
inherent_verbs = list(
@@ -218,7 +222,9 @@
O_BRAIN = /obj/item/organ/internal/brain/xeno,
O_PLASMA = /obj/item/organ/internal/xenos/plasmavessel/hunter,
O_HIVE = /obj/item/organ/internal/xenos/hivenode,
O_NUTRIENT = /obj/item/organ/internal/diona/nutrients
O_NUTRIENT = /obj/item/organ/internal/diona/nutrients,
O_STOMACH = /obj/item/organ/internal/stomach/xeno,
O_INTESTINE = /obj/item/organ/internal/intestine/xeno
)
inherent_verbs = list(
@@ -247,7 +253,9 @@
O_PLASMA = /obj/item/organ/internal/xenos/plasmavessel/sentinel,
O_ACID = /obj/item/organ/internal/xenos/acidgland,
O_HIVE = /obj/item/organ/internal/xenos/hivenode,
O_NUTRIENT = /obj/item/organ/internal/diona/nutrients
O_NUTRIENT = /obj/item/organ/internal/diona/nutrients,
O_STOMACH = /obj/item/organ/internal/stomach/xeno,
O_INTESTINE = /obj/item/organ/internal/intestine/xeno
)
inherent_verbs = list(
@@ -284,7 +292,9 @@
O_ACID = /obj/item/organ/internal/xenos/acidgland,
O_HIVE = /obj/item/organ/internal/xenos/hivenode,
O_RESIN = /obj/item/organ/internal/xenos/resinspinner,
O_NUTRIENT = /obj/item/organ/internal/diona/nutrients
O_NUTRIENT = /obj/item/organ/internal/diona/nutrients,
O_STOMACH = /obj/item/organ/internal/stomach/xeno,
O_INTESTINE = /obj/item/organ/internal/intestine/xeno
)
inherent_verbs = list(
+8
View File
@@ -1002,6 +1002,14 @@ default behaviour is:
else
to_chat(src, "<span class='warning'>You feel nauseous...</span>")
if(ishuman(src))
var/mob/living/carbon/human/Hu = src
if(CE_ANTACID in Hu.chem_effects)
if(prob(min(90, Hu.chem_effects[CE_ANTACID] * 15)))
spawn(rand(30 SECONDS, 2 MINUTES))
lastpuke = FALSE
return
spawn()
if(!skip_wait)
sleep(150) //15 seconds until second warning
@@ -97,6 +97,29 @@
flick("portable_analyzer_load", src)
icon_state = "portable_analyzer_full"
/obj/item/weapon/portable_scanner
name = "Portable Resonant Analyzer"
icon = 'icons/obj/items.dmi'
icon_state = "portable_scanner"
desc = "An advanced scanning device used for analyzing objects without completely annihilating them for science. Unfortunately, it has no connection to any database like its angrier cousin."
/obj/item/weapon/portable_scanner/afterattack(var/atom/target, var/mob/living/user, proximity)
if(!target)
return
if(!proximity)
return
if(istype(target,/obj/item))
var/obj/item/I = target
if(do_after(src, 5 SECONDS * I.w_class))
for(var/mob/M in viewers())
M.show_message(text("<span class='notice'>[user] sweeps \the [src] over \the [I].</span>"), 1)
flick("[initial(icon_state)]-scan", src)
if(I.origin_tech && I.origin_tech.len)
for(var/T in I.origin_tech)
to_chat(user, "<span class='notice'>\The [I] had level [I.origin_tech[T]] in [CallTechName(T)].</span>")
else
to_chat(user, "<span class='notice'>\The [I] cannot be scanned by \the [src].</span>")
//This is used to unlock other borg covers.
/obj/item/weapon/card/robot //This is not a child of id cards, as to avoid dumb typechecks on computers.
name = "access code transmission device"