mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-07-13 00:55:20 +01:00
Adds Romerol (the REAL zombie powder) to uplink (#23369)
* Adds Romerol (the REAL zombie powder) to uplink 🆑 coiax add: Syndicate agents have gained access to a highly dangerous experimental bioterror agent, that causes partial reanimation and aggression after death. del: Zombie infections are no longer visible on MediHUD. /🆑 - Adds a reagent to the uplink that gives anyone who injests it a dormant zombie organ that will reanimate them as a zombie after they die. - Initial price estimate is 20TC because this is some fungal TB level !fun!. - Good for traitor chefs. - Zombies are fun, let's have more of them. * Fixes runtimes, removes airlock tearing * aGGression * Update health? * Zombies are not TOXINLOVERS that's dumb * Removes from uplink * Revert "Removes from uplink" This reverts commit a0acd313929b0787c2eab0d7f289e305212fa0ed. * 25 TC
This commit is contained in:
@@ -1010,7 +1010,7 @@ var/list/datum/outfit/custom_outfits = list() //Admin created outfits
|
||||
return
|
||||
|
||||
for(var/mob/living/carbon/human/H in mob_list)
|
||||
new /obj/item/organ/body_egg/zombie_infection(H)
|
||||
new /obj/item/organ/zombie_infection(H)
|
||||
|
||||
message_admins("[key_name_admin(usr)] added a latent zombie infection to all humans.")
|
||||
log_admin("[key_name(usr)] added a latent zombie infection to all humans.")
|
||||
@@ -1027,7 +1027,7 @@ var/list/datum/outfit/custom_outfits = list() //Admin created outfits
|
||||
if(confirm != "Yes")
|
||||
return
|
||||
|
||||
for(var/obj/item/organ/body_egg/zombie_infection/I in zombie_infection_list)
|
||||
for(var/obj/item/organ/zombie_infection/I in zombie_infection_list)
|
||||
qdel(I)
|
||||
|
||||
message_admins("[key_name_admin(usr)] cured all zombies.")
|
||||
@@ -1169,4 +1169,4 @@ var/list/datum/outfit/custom_outfits = list() //Admin created outfits
|
||||
if (world.visibility && !world.reachable)
|
||||
message_admins("WARNING: The server will not show up on the hub because byond is detecting that a filewall is blocking incoming connections.")
|
||||
|
||||
feedback_add_details("admin_verb","HUB") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
feedback_add_details("admin_verb","HUB") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
sexes = 0
|
||||
blacklisted = 1
|
||||
meat = /obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/mutant/zombie
|
||||
species_traits = list(NOBREATH,RESISTCOLD,RESISTPRESSURE,NOBLOOD,RADIMMUNE,NOZOMBIE,EASYDISMEMBER,EASYLIMBATTACHMENT,TOXINLOVER)
|
||||
species_traits = list(NOBREATH,RESISTCOLD,RESISTPRESSURE,NOBLOOD,RADIMMUNE,NOZOMBIE,EASYDISMEMBER,EASYLIMBATTACHMENT)
|
||||
mutant_organs = list(/obj/item/organ/tongue/zombie)
|
||||
|
||||
/datum/species/zombie/infectious
|
||||
@@ -40,7 +40,7 @@
|
||||
C.put_in_hands(zh)
|
||||
|
||||
// Next, deal with the source of this zombie corruption
|
||||
var/obj/item/organ/body_egg/zombie_infection/infection
|
||||
var/obj/item/organ/zombie_infection/infection
|
||||
infection = C.getorganslot("zombie_infection")
|
||||
if(!infection)
|
||||
infection = new(C)
|
||||
@@ -59,4 +59,4 @@
|
||||
limbs_id = "zombie" //They look like zombies
|
||||
sexes = 0
|
||||
meat = /obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/mutant/zombie
|
||||
mutant_organs = list(/obj/item/organ/tongue/zombie)
|
||||
mutant_organs = list(/obj/item/organ/tongue/zombie)
|
||||
|
||||
@@ -1365,7 +1365,7 @@
|
||||
//Misc reagents
|
||||
|
||||
/datum/reagent/romerol
|
||||
name = "romerol"
|
||||
name = "Romerol"
|
||||
// the REAL zombie powder
|
||||
id = "romerol"
|
||||
description = "Romerol is a highly experimental bioterror agent \
|
||||
@@ -1379,11 +1379,11 @@
|
||||
|
||||
/datum/reagent/romerol/on_mob_life(mob/living/carbon/human/H)
|
||||
// Silently add the zombie infection organ to be activated upon death
|
||||
new /obj/item/organ/body_egg/zombie_infection(H)
|
||||
new /obj/item/organ/zombie_infection(H)
|
||||
..()
|
||||
|
||||
/datum/reagent/growthserum
|
||||
name = "Growth serum"
|
||||
name = "Growth Serum"
|
||||
id = "growthserum"
|
||||
description = "A commercial chemical designed to help older men in the bedroom."//not really it just makes you a giant
|
||||
color = "#ff0000"//strong red. rgb 255, 0, 0
|
||||
|
||||
@@ -234,6 +234,12 @@
|
||||
icon_state = "bottle12"
|
||||
list_reagents = list("atropine" = 30)
|
||||
|
||||
/obj/item/weapon/reagent_containers/glass/bottle/romerol
|
||||
name = "romerol bottle"
|
||||
desc = "A small bottle of Romerol. The REAL zombie powder."
|
||||
icon_state = "bottle12"
|
||||
list_reagents = list("romerol" = 30)
|
||||
|
||||
/obj/item/weapon/reagent_containers/glass/bottle/flu_virion
|
||||
name = "Flu virion culture bottle"
|
||||
desc = "A small bottle. Contains H13N1 flu virion culture in synthblood medium."
|
||||
|
||||
@@ -632,6 +632,13 @@ var/list/uplink_items = list() // Global list so we only initialize this once.
|
||||
cost = 6
|
||||
surplus = 50
|
||||
|
||||
/datum/uplink_item/stealthy_weapons/romerol_kit
|
||||
name = "Romerol"
|
||||
desc = "A highly experimental bioterror agent which creates dormant nodules to be etched into the grey matter of the brain. On death, these nodules take control of the dead body, causing limited revivification, along with slurred speech, aggression, and the ability to infect others with this agent."
|
||||
item = /obj/item/weapon/storage/box/syndie_kit/romerol
|
||||
cost = 25
|
||||
exclude_modes = list(/datum/game_mode/nuclear, /datum/game_mode/gang)
|
||||
|
||||
/datum/uplink_item/stealthy_weapons/dart_pistol
|
||||
name = "Dart Pistol"
|
||||
desc = "A miniaturized version of a normal syringe gun. It is very quiet when fired and can fit into any \
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/obj/item/zombie_hand
|
||||
name = "zombie claw"
|
||||
desc = "A zombie's claw is its primary tool, capable of infecting \
|
||||
unconcious or dead humans, butchering all other living things to \
|
||||
sustain the zombie, forcing open airlock doors and opening \
|
||||
humans, butchering all other living things to \
|
||||
sustain the zombie, smashing open airlock doors and opening \
|
||||
child-safe caps on bottles."
|
||||
flags = NODROP|ABSTRACT|DROPDEL
|
||||
icon = 'icons/effects/blood.dmi'
|
||||
@@ -28,9 +28,6 @@
|
||||
. = ..()
|
||||
if(!proximity_flag)
|
||||
return
|
||||
if(istype(target, /obj/machinery/door/airlock) && !removing_airlock)
|
||||
tear_airlock(target, user)
|
||||
|
||||
else if(isliving(target))
|
||||
if(ishuman(target))
|
||||
check_infection(target, user)
|
||||
@@ -45,7 +42,7 @@
|
||||
// zombies)
|
||||
return
|
||||
|
||||
var/obj/item/organ/body_egg/zombie_infection/infection
|
||||
var/obj/item/organ/zombie_infection/infection
|
||||
infection = target.getorganslot("zombie_infection")
|
||||
if(!infection)
|
||||
infection = new(target)
|
||||
@@ -54,48 +51,11 @@
|
||||
if(target.stat == DEAD)
|
||||
var/hp_gained = target.maxHealth
|
||||
target.gib()
|
||||
user.adjustBruteLoss(-hp_gained)
|
||||
user.adjustToxLoss(-hp_gained)
|
||||
user.adjustFireLoss(-hp_gained)
|
||||
user.adjustCloneLoss(-hp_gained)
|
||||
// zero as argument for no instant health update
|
||||
user.adjustBruteLoss(-hp_gained, 0)
|
||||
user.adjustToxLoss(-hp_gained, 0)
|
||||
user.adjustFireLoss(-hp_gained, 0)
|
||||
user.adjustCloneLoss(-hp_gained, 0)
|
||||
user.updatehealth()
|
||||
user.adjustBrainLoss(-hp_gained) // Zom Bee gibbers "BRAAAAISNSs!1!"
|
||||
|
||||
/obj/item/zombie_hand/proc/tear_airlock(obj/machinery/door/airlock/A, mob/user)
|
||||
removing_airlock = TRUE
|
||||
user << "<span class='notice'>You start tearing apart the airlock...</span>"
|
||||
|
||||
playsound(src.loc, 'sound/machines/airlock_alien_prying.ogg', 100, 1)
|
||||
A.audible_message("<span class='italics'>You hear a loud metallic grinding sound.</span>")
|
||||
|
||||
addtimer(CALLBACK(src, .proc/growl, user), 20)
|
||||
|
||||
if(do_after(user, delay=160, needhand=FALSE, target=A, progress=TRUE))
|
||||
playsound(src.loc, 'sound/hallucinations/far_noise.ogg', 50, 1)
|
||||
A.audible_message("<span class='danger'>With a screech, [A] is torn apart!</span>")
|
||||
var/obj/structure/door_assembly/door = new A.assemblytype(get_turf(A))
|
||||
door.density = 0
|
||||
door.anchored = 1
|
||||
door.name = "ravaged [door]"
|
||||
door.desc = "An airlock that has been torn apart. Looks like it won't be keeping much out now."
|
||||
qdel(A)
|
||||
removing_airlock = FALSE
|
||||
|
||||
/obj/item/zombie_hand/proc/growl(mob/user)
|
||||
if(removing_airlock)
|
||||
playsound(src.loc, 'sound/hallucinations/growl3.ogg', 50, 1)
|
||||
user.audible_message("<span class='warning'>[user] growls as [user.p_their()] claws dig into the metal frame...</span>")
|
||||
|
||||
/obj/item/zombie_hand/suicide_act(mob/living/carbon/user)
|
||||
// Suiciding as a zombie brings someone else in to play it
|
||||
user.visible_message("<span class='suicide'>[user] is lying down.</span>")
|
||||
if(!istype(user))
|
||||
return
|
||||
|
||||
user.Weaken(30)
|
||||
var/success = offer_control(user)
|
||||
if(success)
|
||||
user.visible_message("<span class='suicide'>[user] appears to have found new spirit.</span>")
|
||||
return SHAME
|
||||
else
|
||||
user.visible_message("<span class='suicide'>[user] stops moving.</span>")
|
||||
return OXYLOSS
|
||||
user.nutrition = min(user.nutrition + hp_gained, NUTRITION_LEVEL_FULL)
|
||||
|
||||
@@ -1,67 +1,75 @@
|
||||
#define START_TIMER reanimation_timer = world.time + rand(600,1200)
|
||||
|
||||
/obj/item/organ/body_egg/zombie_infection
|
||||
/obj/item/organ/zombie_infection
|
||||
name = "festering ooze"
|
||||
desc = "A black web of pus and vicera."
|
||||
zone = "head"
|
||||
slot = "zombie_infection"
|
||||
var/reanimation_timer
|
||||
origin_tech = "biotech=5"
|
||||
var/datum/species/old_species
|
||||
var/living_transformation_time = 5
|
||||
var/converts_living = FALSE
|
||||
|
||||
/obj/item/organ/body_egg/zombie_infection/New()
|
||||
var/revive_time_min = 600
|
||||
var/revive_time_max = 1200
|
||||
var/timer_id
|
||||
|
||||
/obj/item/organ/zombie_infection/New(loc)
|
||||
. = ..()
|
||||
if(iscarbon(loc))
|
||||
Insert(loc)
|
||||
zombie_infection_list += src
|
||||
|
||||
/obj/item/organ/body_egg/zombie_infection/Destroy()
|
||||
/obj/item/organ/zombie_infection/Destroy()
|
||||
zombie_infection_list -= src
|
||||
. = ..()
|
||||
|
||||
/obj/item/organ/body_egg/zombie_infection/on_find(mob/living/finder)
|
||||
/obj/item/organ/zombie_infection/Insert(var/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)
|
||||
M.set_species(old_species)
|
||||
if(timer_id)
|
||||
deltimer(timer_id)
|
||||
|
||||
/obj/item/organ/zombie_infection/on_find(mob/living/finder)
|
||||
finder << "<span class='warning'>Inside the head is a disgusting black \
|
||||
web of pus and vicera, bound tightly around the brain like some \
|
||||
biological harness.</span>"
|
||||
|
||||
/obj/item/organ/body_egg/zombie_infection/egg_process()
|
||||
if(!ishuman(owner)) // We do not support monkey or xeno zombies. Yet.
|
||||
qdel(src)
|
||||
/obj/item/organ/zombie_infection/process()
|
||||
if(!owner)
|
||||
return
|
||||
else if(reanimation_timer && (reanimation_timer < world.time))
|
||||
zombify() // Rise and shine, Mr Romero... rise and shine.
|
||||
reanimation_timer = null
|
||||
else if(owner.stat == DEAD && (!reanimation_timer))
|
||||
START_TIMER
|
||||
else if(converts_living && !iszombie(owner) && !reanimation_timer)
|
||||
START_TIMER
|
||||
if(!(src in owner.internal_organs))
|
||||
Remove(owner)
|
||||
|
||||
/obj/item/organ/body_egg/zombie_infection/Remove(mob/living/carbon/M, special = 0)
|
||||
. = ..()
|
||||
CHECK_DNA_AND_SPECIES(M)
|
||||
if(iszombie(M) && old_species)
|
||||
M.set_species(old_species)
|
||||
if(timer_id)
|
||||
return
|
||||
if(owner.stat != DEAD && !converts_living)
|
||||
return
|
||||
|
||||
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
|
||||
|
||||
/obj/item/organ/body_egg/zombie_infection/proc/zombify()
|
||||
CHECK_DNA_AND_SPECIES(owner)
|
||||
if(!iszombie(owner))
|
||||
old_species = owner.dna.species.type
|
||||
|
||||
if(!converts_living && owner.stat != DEAD)
|
||||
return
|
||||
|
||||
var/stand_up = (owner.stat == DEAD) || (owner.stat == UNCONSCIOUS)
|
||||
|
||||
owner.grab_ghost()
|
||||
owner.set_species(/datum/species/zombie/infectious)
|
||||
var/old_stat = owner.stat // Save for the message
|
||||
owner.revive(full_heal = TRUE)
|
||||
switch(old_stat)
|
||||
if(DEAD, UNCONSCIOUS)
|
||||
owner.visible_message("<span class='danger'>[owner] staggers to [owner.p_their()] feet!</span>")
|
||||
owner << "<span class='danger'>You stagger to your feet!</span>"
|
||||
// Conscious conversions will generally only happen for an event
|
||||
// or for a converts_living=TRUE infection
|
||||
if(CONSCIOUS)
|
||||
owner.visible_message("<span class='danger'>[owner] suddenly convulses, as [owner.p_they()] gain a ravenous hunger in [owner.p_their()] eyes!</span>",
|
||||
"<span class='alien'>You HUNGER!</span>")
|
||||
playsound(owner.loc, 'sound/hallucinations/growl3.ogg', 50, 1)
|
||||
owner.do_jitter_animation(living_transformation_time)
|
||||
owner.Stun(living_transformation_time)
|
||||
owner << "<span class='alertalien'>You are now a zombie!</span>"
|
||||
|
||||
#undef START_TIMER
|
||||
owner.visible_message("<span class='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>", "<span class='alien'>You HUNGER!</span>")
|
||||
playsound(owner.loc, 'sound/hallucinations/far_noise.ogg', 50, 1)
|
||||
owner.do_jitter_animation(living_transformation_time * 10)
|
||||
owner.Stun(living_transformation_time)
|
||||
owner << "<span class='alertalien'>You are now a zombie!</span>"
|
||||
|
||||
Reference in New Issue
Block a user