mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2025-12-26 01:22:03 +00:00
## About The Pull Request 123 changed files and multiple crashes after writing broken regex, I replaced most remains of direct spans with macros. This cleans up the code and makes it easier to work with in general, see justification for the original PR. I also fixed a bunch of broken and/or unclosed spans here too. I intentionally avoided replacing spans with multiple classes (in most cases) and spans in the middle of strings as it would impact readability (in my opinion at least) and could be done later if required. ## Why It's Good For The Game Cleaner code, actually using our macros, fixes borked HTML in some places. See original PR. ## Changelog Nothing player-facing
104 lines
3.9 KiB
Plaintext
104 lines
3.9 KiB
Plaintext
/obj/item/organ/internal/zombie_infection
|
|
name = "festering ooze"
|
|
desc = "A black web of pus and viscera."
|
|
zone = BODY_ZONE_HEAD
|
|
slot = ORGAN_SLOT_ZOMBIE
|
|
icon_state = "blacktumor"
|
|
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/internal/zombie_infection/Initialize(mapload)
|
|
. = ..()
|
|
if(iscarbon(loc))
|
|
Insert(loc)
|
|
GLOB.zombie_infection_list += src
|
|
|
|
/obj/item/organ/internal/zombie_infection/Destroy()
|
|
GLOB.zombie_infection_list -= src
|
|
. = ..()
|
|
|
|
/obj/item/organ/internal/zombie_infection/on_mob_insert(mob/living/carbon/M, special = FALSE, movement_flags)
|
|
. = ..()
|
|
|
|
START_PROCESSING(SSobj, src)
|
|
|
|
/obj/item/organ/internal/zombie_infection/on_mob_remove(mob/living/carbon/M, special = FALSE)
|
|
. = ..()
|
|
STOP_PROCESSING(SSobj, src)
|
|
if(iszombie(M) && old_species && !special)
|
|
M.set_species(old_species)
|
|
if(timer_id)
|
|
deltimer(timer_id)
|
|
|
|
/obj/item/organ/internal/zombie_infection/on_mob_insert(mob/living/carbon/organ_owner, special)
|
|
. = ..()
|
|
RegisterSignal(organ_owner, COMSIG_LIVING_DEATH, PROC_REF(organ_owner_died))
|
|
|
|
/obj/item/organ/internal/zombie_infection/on_mob_remove(mob/living/carbon/organ_owner, special)
|
|
. = ..()
|
|
UnregisterSignal(organ_owner, COMSIG_LIVING_DEATH)
|
|
|
|
/obj/item/organ/internal/zombie_infection/proc/organ_owner_died(mob/living/carbon/source, gibbed)
|
|
SIGNAL_HANDLER
|
|
if(iszombie(source))
|
|
qdel(src) // Congrats you somehow died so hard you stopped being a zombie
|
|
|
|
/obj/item/organ/internal/zombie_infection/on_find(mob/living/finder)
|
|
to_chat(finder, span_warning("Inside the head is a disgusting black \
|
|
web of pus and viscera, bound tightly around the brain like some \
|
|
biological harness."))
|
|
|
|
/obj/item/organ/internal/zombie_infection/process(seconds_per_tick, times_fired)
|
|
if(!owner)
|
|
return
|
|
if(!(src in owner.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 * seconds_per_tick)
|
|
if (SPT_PROB(5, seconds_per_tick))
|
|
to_chat(owner, span_danger("You feel sick..."))
|
|
if(timer_id || HAS_TRAIT(owner, TRAIT_SUICIDED) || !owner.get_organ_by_type(/obj/item/organ/internal/brain))
|
|
return
|
|
if(owner.stat != DEAD && !converts_living)
|
|
return
|
|
if(!iszombie(owner))
|
|
to_chat(owner, span_cult_large("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!"))
|
|
var/revive_time = rand(revive_time_min, revive_time_max)
|
|
var/flags = TIMER_STOPPABLE
|
|
timer_id = addtimer(CALLBACK(src, PROC_REF(zombify), owner), revive_time, flags)
|
|
|
|
/obj/item/organ/internal/zombie_infection/proc/zombify(mob/living/carbon/target)
|
|
timer_id = null
|
|
|
|
if(!converts_living && owner.stat != DEAD)
|
|
return
|
|
|
|
if(!iszombie(owner))
|
|
old_species = owner.dna.species.type
|
|
target.set_species(/datum/species/zombie/infectious)
|
|
|
|
var/stand_up = (target.stat == DEAD) || (target.stat == UNCONSCIOUS)
|
|
|
|
//Fully heal the zombie's damage the first time they rise
|
|
if(!target.heal_and_revive(0, span_danger("[target] suddenly convulses, as [target.p_they()][stand_up ? " stagger to [target.p_their()] feet and" : ""] gain a ravenous hunger in [target.p_their()] eyes!")))
|
|
return
|
|
|
|
to_chat(target, span_alien("You HUNGER!"))
|
|
to_chat(target, 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."))
|
|
playsound(target, 'sound/effects/hallucinations/far_noise.ogg', 50, 1)
|
|
target.do_jitter_animation(living_transformation_time)
|
|
target.Stun(living_transformation_time)
|
|
|
|
/obj/item/organ/internal/zombie_infection/nodamage
|
|
causes_damage = FALSE
|