mirror of
https://github.com/PolarisSS13/Polaris.git
synced 2026-07-09 15:18:14 +01:00
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:
@@ -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.
|
||||
*/
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user