mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-01-11 09:22:41 +00:00
* Removes like 50% of the cost of using the ui, it turns out that the storage component is fucking moronic. Likely significantly reduces the overtime of typecacheof * Reduces the cost of reloading the dummy by ~50% Turns out just initializing and deleting organs was like half the cost of reloading a default dummy. It occured to me (Mothblocks) that we don't actually care about any organs we can't see or that don't effect visuals. So almost all of our organ loading can just be skipped. This saves a significant chunk of cpu time, items next! Co-authored-by: Seth Scherer <supernovaa41@gmx.com>
100 lines
3.4 KiB
Plaintext
100 lines
3.4 KiB
Plaintext
/obj/item/organ/zombie_infection
|
|
name = "festering ooze"
|
|
desc = "A black web of pus and viscera."
|
|
zone = BODY_ZONE_HEAD
|
|
slot = ORGAN_SLOT_ZOMBIE
|
|
icon_state = "blacktumor"
|
|
visual = FALSE
|
|
var/causes_damage = TRUE
|
|
var/datum/species/old_species = /datum/species/human
|
|
var/living_transformation_time = 30
|
|
var/converts_living = FALSE
|
|
|
|
var/revive_time_min = 450
|
|
var/revive_time_max = 700
|
|
var/timer_id
|
|
|
|
/obj/item/organ/zombie_infection/Initialize(mapload)
|
|
. = ..()
|
|
if(iscarbon(loc))
|
|
Insert(loc)
|
|
GLOB.zombie_infection_list += src
|
|
|
|
/obj/item/organ/zombie_infection/Destroy()
|
|
GLOB.zombie_infection_list -= src
|
|
. = ..()
|
|
|
|
/obj/item/organ/zombie_infection/Insert(mob/living/carbon/M, special = 0)
|
|
. = ..()
|
|
START_PROCESSING(SSobj, src)
|
|
|
|
/obj/item/organ/zombie_infection/Remove(mob/living/carbon/M, special = 0)
|
|
. = ..()
|
|
STOP_PROCESSING(SSobj, src)
|
|
if(iszombie(M) && old_species && !QDELETED(M))
|
|
M.set_species(old_species)
|
|
if(timer_id)
|
|
deltimer(timer_id)
|
|
|
|
/obj/item/organ/zombie_infection/on_find(mob/living/finder)
|
|
to_chat(finder, "<span class='warning'>Inside the head is a disgusting black \
|
|
web of pus and viscera, bound tightly around the brain like some \
|
|
biological harness.</span>")
|
|
|
|
/obj/item/organ/zombie_infection/process(delta_time)
|
|
if(!owner)
|
|
return
|
|
if(!(src in owner.internal_organs))
|
|
Remove(owner)
|
|
if(owner.mob_biotypes & MOB_MINERAL)//does not process in inorganic things
|
|
return
|
|
if (causes_damage && !iszombie(owner) && owner.stat != DEAD)
|
|
owner.adjustToxLoss(0.5 * delta_time)
|
|
if(DT_PROB(5, delta_time))
|
|
to_chat(owner, span_danger("You feel sick..."))
|
|
if(timer_id)
|
|
return
|
|
if(owner.suiciding)
|
|
return
|
|
if(owner.stat != DEAD && !converts_living)
|
|
return
|
|
if(!owner.getorgan(/obj/item/organ/brain))
|
|
return
|
|
if(!iszombie(owner))
|
|
to_chat(owner, "<span class='cultlarge'>You can feel your heart stopping, but something isn't right... \
|
|
life has not abandoned your broken form. You can only feel a deep and immutable hunger that \
|
|
not even death can stop, you will rise again!</span>")
|
|
var/revive_time = rand(revive_time_min, revive_time_max)
|
|
var/flags = TIMER_STOPPABLE
|
|
timer_id = addtimer(CALLBACK(src, .proc/zombify), revive_time, flags)
|
|
|
|
/obj/item/organ/zombie_infection/proc/zombify()
|
|
timer_id = null
|
|
|
|
if(!converts_living && owner.stat != DEAD)
|
|
return
|
|
|
|
if(!iszombie(owner))
|
|
old_species = owner.dna.species.type
|
|
owner.set_species(/datum/species/zombie/infectious)
|
|
|
|
var/stand_up = (owner.stat == DEAD) || (owner.stat == UNCONSCIOUS)
|
|
|
|
//Fully heal the zombie's damage the first time they rise
|
|
owner.setToxLoss(0, 0)
|
|
owner.setOxyLoss(0, 0)
|
|
owner.heal_overall_damage(INFINITY, INFINITY, INFINITY, null, TRUE)
|
|
|
|
if(!owner.revive(full_heal = FALSE, admin_revive = FALSE))
|
|
return
|
|
|
|
owner.grab_ghost()
|
|
owner.visible_message(span_danger("[owner] suddenly convulses, as [owner.p_they()][stand_up ? " stagger to [owner.p_their()] feet and" : ""] gain a ravenous hunger in [owner.p_their()] eyes!"), span_alien("You HUNGER!"))
|
|
playsound(owner.loc, 'sound/hallucinations/far_noise.ogg', 50, TRUE)
|
|
owner.do_jitter_animation(living_transformation_time)
|
|
owner.Stun(living_transformation_time)
|
|
to_chat(owner, span_alertalien("You are now a zombie! Do not seek to be cured, do not help any non-zombies in any way, do not harm your zombie brethren and spread the disease by killing others. You are a creature of hunger and violence."))
|
|
|
|
/obj/item/organ/zombie_infection/nodamage
|
|
causes_damage = FALSE
|