mirror of
https://github.com/VOREStation/VOREStation.git
synced 2026-05-19 13:20:47 +01:00
c07054d463
* Upport these * wtf * Update negative.dm * Hard feet into a neutral * revert * type-o * Makes toxin_gut a trait. Better as a trait than a var. * Fix these Was free trait otherwise * Update negative.dm * Fixes these as well * Update low_sugar.dm * Update vorestation.dme * Converts these to components Still needs optimization. * Makes absorbent a component * Implements deep sleeper * Update living_movement.dm * Update living_movement.dm * Update negative.dm * why not * Adjust these * Update positive.dm * Update positive.dm * Eh, let's lower this some. * Add singulo mtabolism * these too * Make this use bloodloss_rate * Update negative.dm * grapples you * Update mob_grab.dm * my brain hurts reading this please leave more comments * Slippery * enable * Remove waterbreather from breathless Unneeded * Update negative.dm * Update low_sugar.dm * Update snacks.dm
87 lines
3.8 KiB
Plaintext
87 lines
3.8 KiB
Plaintext
///The schizophrenia / 'episodic hallucinations' trait, but componentized.
|
|
///There is a lot of math that I don't even want to try to fathom in this.
|
|
///There was also almost 0 commentation.
|
|
/datum/component/schizophrenia
|
|
///The maximum amount of hallucinations we can have.
|
|
var/hallucination_max = 60
|
|
///The amount of hallucinations to increase by each tick during an episode.
|
|
var/hallucination_increase = 3
|
|
|
|
var/episode_length_nomeds_avg = 4000
|
|
var/episode_length_nomeds_dev = 100
|
|
|
|
var/episode_length_meds_avg = 2000
|
|
var/episode_length_meds_dev = 500
|
|
|
|
var/break_length_nomeds_avg = 3000
|
|
var/break_length_nomeds_dev = 600
|
|
|
|
var/break_length_meds_avg = 30000
|
|
var/break_length_meds_dev = 7000
|
|
|
|
//Holds the info if we're in an episode, when then next one will begin, and when it will end.
|
|
var/list/episode = list("in_episode" = FALSE)
|
|
|
|
/datum/component/schizophrenia/Initialize()
|
|
if(!ishuman(parent))
|
|
return COMPONENT_INCOMPATIBLE
|
|
episode["next_episode_begin"] = world.time + 6000
|
|
episode["next_episode_end"] = world.time + 9000
|
|
|
|
/datum/component/schizophrenia/RegisterWithParent()
|
|
RegisterSignal(parent, COMSIG_LIVING_LIFE, PROC_REF(process_component))
|
|
|
|
/datum/component/schizophrenia/UnregisterFromParent()
|
|
UnregisterSignal(parent, list(COMSIG_LIVING_LIFE))
|
|
|
|
/datum/component/schizophrenia/proc/process_component()
|
|
SIGNAL_HANDLER
|
|
var/mob/living/carbon/human/human_guy = parent
|
|
if(QDELETED(parent))
|
|
return
|
|
///How much medication we currently have in our system.
|
|
var/med_vol = get_med_volume(human_guy)
|
|
|
|
if(!episode["in_episode"])
|
|
if(world.time > episode["next_episode_begin"])
|
|
episode["meds_at_beginning"] = med_vol
|
|
episode["in_episode"] = TRUE
|
|
|
|
else if(episode["meds_at_end"] && !med_vol) //Meds ran out
|
|
var/new_episode_begin = world.time + (episode["next_episode_begin"] - world.time)/10
|
|
episode["next_episode_end"] = new_episode_begin + (episode["next_episode_end"] - episode["next_episode_begin"])
|
|
episode["next_episode_begin"] = new_episode_begin
|
|
episode["meds_at_end"] = FALSE
|
|
|
|
else if(!episode["meds_at_end"] && med_vol) //Meds were taken between episodes
|
|
var/new_episode_begin = world.time + (episode["next_episode_begin"] - world.time)*10
|
|
episode["next_episode_end"] = new_episode_begin + (episode["next_episode_end"] - episode["next_episode_begin"])
|
|
episode["next_episode_begin"] = new_episode_begin
|
|
episode["meds_at_end"] = TRUE
|
|
|
|
else
|
|
if(world.time > episode["next_episode_end"])
|
|
episode["meds_at_end"] = med_vol
|
|
episode["in_episode"] = FALSE
|
|
var/break_length_dev = med_vol ? break_length_meds_dev : break_length_nomeds_dev
|
|
var/break_length_avg = med_vol ? break_length_meds_avg : break_length_nomeds_avg
|
|
var/episode_length_dev = med_vol ? episode_length_meds_dev : episode_length_nomeds_dev
|
|
var/episode_length_avg = med_vol ? episode_length_meds_avg : episode_length_nomeds_avg
|
|
episode["next_episode_begin"] = world.time + max(120,GAUSSIAN_RANDOM() * break_length_dev + break_length_avg)
|
|
episode["next_episode_end"] = episode["next_episode_begin"] + max(120,GAUSSIAN_RANDOM() * episode_length_dev + episode_length_avg)
|
|
else
|
|
if(!episode["meds_at_beginning"] && med_vol)
|
|
episode["next_episode_end"] = world.time + (episode["next_episode_end"] - world.time)/8
|
|
human_guy.hallucination = min(hallucination_max,human_guy.hallucination + hallucination_increase)
|
|
|
|
///Checks to see if we have tercozolam in our systeem and returns how much if so.
|
|
/datum/component/schizophrenia/proc/get_med_volume(mob/living/carbon/human/human_guy)
|
|
var/total_vol = 0
|
|
for(var/datum/reagent/reagent in human_guy.bloodstr.reagent_list)
|
|
if(istype(reagent,/datum/reagent/tercozolam))
|
|
total_vol += reagent.volume
|
|
for(var/datum/reagent/reagent in human_guy.ingested.reagent_list)
|
|
if(istype(reagent,/datum/reagent/tercozolam))
|
|
total_vol += reagent.volume
|
|
return total_vol
|