Merge branch 'master' into areaStuff

This commit is contained in:
Heroman3003
2024-12-07 05:14:52 +10:00
committed by GitHub
187 changed files with 5545 additions and 1161 deletions
+9 -2
View File
@@ -3,8 +3,8 @@ GLOBAL_LIST_EMPTY(archive_diseases)
GLOBAL_LIST_INIT(advance_cures, list(
"sodiumchloride", "sugar", "orangejuice",
"spaceacillin", "glucose", "ethanol",
"dyloteane", "impedrezene", "hepanephrodaxon",
"gold", "silver"
"leporazine", "impedrezene", "hepanephrodaxon",
"silver", "gold"
))
/datum/disease/advance
@@ -236,6 +236,13 @@ GLOBAL_LIST_INIT(advance_cures, list(
Refresh(1)
return
/datum/disease/advance/proc/PickyEvolve(var/list/datum/symptom/D)
var/s = safepick(D)
if(s)
AddSymptom(new s)
Refresh(1)
return
// Randomly remove a symptom.
/datum/disease/advance/proc/Devolve()
if(length(symptoms) > 1)
@@ -0,0 +1,38 @@
/*
//////////////////////////////////////
Deafness
Slightly hidden.
Lowers resistance.
Increases stage speed slightly.
Decreases transmittablity.
Intense Level.
Bonus
Causes intermittent loss of hearing.
//////////////////////////////////////
*/
/datum/symptom/deafness
name = "Deafness"
stealth = 1
resistance = -2
stage_speed = 1
transmittable = -3
level = 4
severity = 3
/datum/symptom/deafness/Activate(datum/disease/advance/A)
..()
if(prob(SYMPTOM_ACTIVATION_PROB))
var/mob/living/M = A.affected_mob
switch(A.stage)
if(3, 4)
to_chat(M, span_warning("[pick("you hear a ringing in your ear.", "You ears pop.")]"))
if(5)
to_chat(M, span_userdanger("You ear pop and begin ringing loudly!"))
M.ear_deaf += 20
return
@@ -6,7 +6,7 @@ Necrotizing Fasciitis (AKA Flesh-Eating Disease)
Very very noticable.
Lowers resistance tremendously.
No changes to stage speed.
Decreases transmittablity temrendously.
Decreases transmittablity tremendously.
Fatal Level.
Bonus
@@ -0,0 +1,33 @@
/*
//////////////////////////////////////
Flippinov
Slightly hidden.
No change to resistance.
Increases stage speed.
Little transmittable.
Low Level.
BONUS
Makes the host FLIP.
Should be used for buffing your disease.
//////////////////////////////////////
*/
/datum/symptom/spyndrome
name = "Flippinov"
stealth = 2
resistance = 0
stage_speed = 3
transmittable = 1
level = 1
severity = 1
/datum/symptom/spyndrome/Activate(datum/disease/advance/A)
..()
if(prob(SYMPTOM_ACTIVATION_PROB))
var/mob/living/L = A.affected_mob
L.emote("flip")
@@ -0,0 +1,56 @@
/*
//////////////////////////////////////
Alopecia
Noticable.
Decreases resistance slightly.
Reduces stage speed slightly.
Transmittable.
Intense Level.
BONUS
Makes the mob lose hair.
//////////////////////////////////////
*/
/datum/symptom/shedding
name = "Alopecia"
stealth = -1
resistance = -1
stage_speed = -1
transmittable = 2
level = 4
severity = 1
/datum/symptom/shedding/Activate(datum/disease/advance/A)
..()
if(!prob(SYMPTOM_ACTIVATION_PROB))
return
if(ishuman(A.affected_mob))
return
var/mob/living/carbon/human/H = A.affected_mob
var/obj/item/organ/external/head/head_organ = H.get_organ(BP_HEAD)
if(!istype(head_organ))
return
to_chat(H, span_warning("[pick("Your scalp itches.", "Your skin feels flakey.")]"))
switch(A.stage)
if(3, 4)
if(H.h_style != "Bald" && H.h_style != "Balding Hair")
to_chat(H, span_warning("Your hair starts to fall out in clumps..."))
addtimer(CALLBACK(src, PROC_REF(change_hair), H, null, "Balding Hair"), 5 SECONDS)
if(5)
if(H.h_style != "Shaved" && H.h_style != "Bald")
to_chat(H, span_warning("Your hair starts to fall out in clumps..."))
addtimer(CALLBACK(src, PROC_REF(change_hair), H, "Shaved", "Bald"), 5 SECONDS)
return
/datum/symptom/shedding/proc/change_hair(var/mob/living/carbon/human/H, f_style, h_style)
if(!H)
return
if(f_style)
H.f_style = f_style
if(h_style)
H.h_style = h_style
return
@@ -130,7 +130,7 @@ Bonus
Very high level.
Bonus
Heals brain damage, treats radiation.
Heals clone damage, treats radiation.
//////////////////////////////////////
*/
@@ -0,0 +1,42 @@
/*
//////////////////////////////////////
Hematophagy
Little bit hidden.
Decreases resistance slightly.
Decreases stage speed tremendously.
Slightly increased transmittablity.
Intense level.
BONUS
The host must feed on BLOOD
//////////////////////////////////////
*/
/datum/symptom/hematophagy
name = "Hematophagy"
stealth = 1
resistance = -1
resistance = -4
transmittable = 1
level = 4
/datum/symptom/hematophagy/Start(datum/disease/advance/A)
if(ishuman(A.affected_mob))
var/mob/living/carbon/human/H = A.affected_mob
H.species.organic_food_coeff = 0
H.species.bloodsucker = TRUE
add_verb(H, /mob/living/carbon/human/proc/bloodsuck)
/datum/symptom/hematophagy/End(datum/disease/advance/A)
if(ishuman(A.affected_mob))
var/mob/living/carbon/human/H = A.affected_mob
H.species.organic_food_coeff = initial(H.species.organic_food_coeff)
H.species.bloodsucker = initial(H.species.bloodsucker)
remove_verb(H, /mob/living/carbon/human/proc/bloodsuck)
@@ -0,0 +1,41 @@
/*
//////////////////////////////////////
Photosensitivity
Noticable.
Increases resistance.
Increases stage speed slightly.
Decreases transmittablity tremendously.
Fatal Level.
Bonus
Deals brute damage over time.
//////////////////////////////////////
*/
/datum/symptom/photosensitivity
name = "Photosensitivity"
stealth = -2
resistance = 2
stage_speed = 1
transmittable = -4
level = 6
severity = 5
/datum/symptom/photosensitivity/Activate(datum/disease/advance/A)
..()
if(prob(SYMPTOM_ACTIVATION_PROB))
var/mob/living/carbon/human/H = A.affected_mob
var/turf/T = get_turf(H)
switch(A.stage)
if(3)
if(T.get_lumcount() > 0.5)
to_chat(H, span_danger("Your skin itches under the light..."))
if(4, 5)
if(T.get_lumcount() > 0.5)
to_chat(H, span_danger("Your skin feels like burning!"))
H.adjustFireLoss(T.get_lumcount())
return
@@ -0,0 +1,46 @@
/*
//////////////////////////////////////
Pica
Not noticable or unnoticable.
Decreases resistance.
Increases stage speed.
Little transmittable.
Low Level.
BONUS
The host gains hunger for any kind of object.
//////////////////////////////////////
*/
/datum/symptom/pica
name = "Pica"
stealth = 0
resistance = -2
stage_speed = 3
transmittable = 1
level = 1
severity = 1
/datum/symptom/pica/Start(datum/disease/advance/A)
add_verb(A.affected_mob, /mob/living/proc/eat_trash)
add_verb(A.affected_mob, /mob/living/proc/toggle_trash_catching)
/datum/symptom/pica/End(datum/disease/advance/A)
remove_verb(A.affected_mob, /mob/living/proc/eat_trash)
remove_verb(A.affected_mob, /mob/living/proc/toggle_trash_catching)
/datum/symptom/pica/Activate(datum/disease/advance/A)
..()
if(prob(SYMPTOM_ACTIVATION_PROB))
var/list/nearby = oview(5, A.affected_mob)
to_chat(A.affected_mob, span_warning("You could go fo a bite of [pick(nearby)]..."))
else if (prob(SYMPTOM_ACTIVATION_PROB))
if(ishuman(A.affected_mob))
var/mob/living/carbon/human/H = A.affected_mob
var/list/item = H.get_equipped_items()
to_chat(H, span_warning("[pick(item)] looks oddly [pick("delicious", "tasty", "scrumptious", "inviting")]..."))
return
@@ -0,0 +1,98 @@
/*
//////////////////////////////////////
Mass Revectoring
Very noticeable.
Increases resistance slightly.
Increases stage speed.
Decreases transmittablity
Intense level.
BONUS
Changes the size of the host.
//////////////////////////////////////
*/
/datum/symptom/size
name = "Mass Revectoring"
stealth = -4
resistance = 1
stage_speed = 2
transmittable = -2
level = 4
severity = 1
/datum/symptom/size/Activate(datum/disease/advance/A)
..()
if(prob(SYMPTOM_ACTIVATION_PROB))
var/mob/living/M = A.affected_mob
switch(A.stage)
if(4, 5)
M.emote("twitch")
Resize(M, rand(25, 200))
/datum/symptom/size/proc/Resize(mob/living/M, var/size)
M.resize(size+M.size_multiplier/100)
/*
//////////////////////////////////////
Enlargement Disorder
Very noticeable.
Increases resistance slightly.
Increases stage speed.
Decreases transmittablity
Intense level.
BONUS
Grows the host to bigger sizes
//////////////////////////////////////
*/
/datum/symptom/size/grow
name = "Enlargement Disorder"
/datum/symptom/size/Activate(datum/disease/advance/A)
..()
if(prob(SYMPTOM_ACTIVATION_PROB))
var/mob/living/M = A.affected_mob
switch(A.stage)
if(4, 5)
M.emote("twitch")
Resize(M, rand(100, 200))
/*
//////////////////////////////////////
Dwindling Malady
Very noticeable.
Increases resistance slightly.
Increases stage speed.
Decreases transmittablity
Intense level.
BONUS
Shrinks the host to small sizes
//////////////////////////////////////
*/
/datum/symptom/size/shrink
name = "Dwindling Malady"
/datum/symptom/size/Activate(datum/disease/advance/A)
..()
if(prob(SYMPTOM_ACTIVATION_PROB))
var/mob/living/M = A.affected_mob
switch(A.stage)
if(4, 5)
M.emote("twitch")
Resize(M, rand(25, 100))
@@ -42,3 +42,78 @@ Bonus
icky.viruses |= A.Copy()
return
/*
//////////////////////////////////////
Bluespace Sneezing
Very Noticable.
Resistant
Doesn't increase stage speed.
Little transmittable.
Low Level.
Bonus
Forces a spread type of AIRBORNE
with extra range AND teleports the mob
//////////////////////////////////////
*/
/datum/symptom/sneeze/bluespace
name = "Bluespace Sneezing"
stealth = -2
resistance = 3
stage_speed = 0
transmittable = 1
level = 4
severity = 1
/datum/symptom/sneeze/bluespace/Activate(datum/disease/advance/A)
..()
if(prob(SYMPTOM_ACTIVATION_PROB))
var/mob/living/M = A.affected_mob
switch(A.stage)
if(1, 2, 3)
M.emote("sniff")
else
SneezeTeleport(A, M)
A.spread(A.stage)
if(prob(30))
var/obj/effect/decal/cleanable/mucus/icky = new(get_turf(M))
icky.viruses |= A.Copy()
return
/datum/symptom/sneeze/bluespace/proc/SneezeTeleport(datum/disease/advance/A, var/mob/living/M)
var/list/destination = list()
var/mob/living/carbon/human/H = M
var/place
for(var/mob/living/carbon/human/B in range(A.stage, M))
if(B.can_be_drop_pred && H.can_be_drop_prey && H.devourable)
destination += B.vore_selected
for(var/turf/T in range(A.stage, H))
if(istype(T, /turf/space)) // No danger, this is just a fun/vore symptom
continue
destination += T
if(isemptylist(destination))
to_chat(H, span_warning("You go to sneeze, but can't."))
return FALSE
place = safepick(destination)
var/mob/living/carbon/human/unlucky = locate() in place
if(unlucky)
if(unlucky.can_be_drop_pred && H.can_be_drop_prey && H.devourable)
place = unlucky.vore_selected
else if(unlucky.devourable && unlucky.can_be_drop_prey && H.can_be_drop_pred)
unlucky.forceMove(H.vore_selected)
H.emote("sneeze")
do_teleport(H, place)
return TRUE
@@ -16,7 +16,7 @@ BONUS
//////////////////////////////////////
*/
/datum/symptom/mlem
/datum/symptom/spyndrome
name = "Spyndrome"
stealth = 2
resistance = 0
@@ -24,9 +24,8 @@ BONUS
transmittable = 1
level = 1
severity = 1
var/list/directions = list(2,4,1,8,2,4,1,8,2,4,1,8,2,4,1,8,2,4,1,8)
/datum/symptom/mlem/Activate(var/datum/disease/advance/A)
/datum/symptom/spyndrome/Activate(var/datum/disease/advance/A)
..()
if(prob(SYMPTOM_ACTIVATION_PROB))
@@ -34,7 +33,5 @@ BONUS
to_chat(viewers(A.affected_mob), span_warning("[A.affected_mob.name] struggles violently against their restraints!"))
else
to_chat(viewers(A.affected_mob), span_warning("[A.affected_mob.name] spins around violently!"))
for(var/D in directions)
A.affected_mob.dir = D
A.affected_mob.dir = pick(2,4,1,8)
A.affected_mob.emote("spin")
return
@@ -0,0 +1,43 @@
/*
//////////////////////////////////////
Healing
No change to stealth.
Slightly decreases resistance.
Increases stage speed.
Decreases transmittablity considerably.
Moderate Level.
Bonus
Heals toxins in the affected mob's blood stream.
//////////////////////////////////////
*/
/datum/symptom/stimulant
name = "Overactive Adrenal Gland"
stealth = 0
resistance = -1
stage_speed = 2
transmittable = -3
level = 3
severity = 1
/datum/symptom/stimulant/Activate(datum/disease/advance/A)
..()
if(prob(SYMPTOM_ACTIVATION_PROB))
var/mob/living/L = A.affected_mob
to_chat(L, span_notice("You feel a rush of energy inside you!"))
switch(A.stage)
if(1, 2)
L.jitteriness += 5
if(3, 4)
L.jitteriness += 10
else
if(L.reagents.get_reagent_amount("hyperzine" < 10))
L.reagents.add_reagent("hyperzine", 5)
if(prob(30))
L.jitteriness += 15
return
@@ -1,7 +1,7 @@
/*
//////////////////////////////////////
Sneezing
Synthetic Infection
Slightly hidden.
Increases resistance.
@@ -23,7 +23,6 @@ Bonus
transmittable = 1
level = 5
severity = 3
id = "synthetic_infection"
/datum/symptom/infect_synthetics/Start(datum/disease/advance/A)
A.infect_synthetics = TRUE
+45
View File
@@ -0,0 +1,45 @@
/datum/disease/appendicitis
form = "Condition"
name = "Appendicitis"
max_stages = 3
spread_text = "Non-contagius"
spread_flags = NON_CONTAGIOUS
cure_text = "Surgery"
agent = "Shitty Appendix"
viable_mobtypes = list(/mob/living/carbon/human)
desc = "If left untreated the subject will become very weak, and may vomit often."
severity = MINOR
disease_flags = CAN_CARRY|CAN_CARRY
visibility_flags = HIDDEN_PANDEMIC
required_organs = list(/obj/item/organ/internal/appendix)
bypasses_immunity = TRUE
virus_heal_resistant = TRUE
/datum/disease/appendicitis/stage_act()
if(!..())
return
switch(stage)
if(1)
if(prob(5))
affected_mob.adjustToxLoss(1)
if(2)
var/obj/item/organ/internal/appendix/A = affected_mob.internal_organs_by_name[O_APPENDIX]
if(A)
A.inflamed = TRUE
if(prob(3))
to_chat(affected_mob, span_warning("You feel a stabbing pain in your abdomen!"))
affected_mob.custom_emote(VISIBLE_MESSAGE, "winces painfully.")
affected_mob.Stun(rand(4, 6))
affected_mob.adjustToxLoss(1)
if(3)
if(prob(1))
to_chat(affected_mob, span_danger("Your abdomen is a world of pain!"))
affected_mob.custom_emote(VISIBLE_MESSAGE, "winces painfully.")
affected_mob.Weaken(10)
if(prob(1))
affected_mob.vomit(95)
if(prob(5))
to_chat(affected_mob, span_warning("You feel a stabbing pain in your abdomen!"))
affected_mob.custom_emote(VISIBLE_MESSAGE, "winces painfully.")
affected_mob.Stun(rand(4, 6))
affected_mob.adjustToxLoss(2)
+32
View File
@@ -0,0 +1,32 @@
/datum/disease/fake_gbs
name = "GBS"
max_stages = 5
spread_text = "On contact"
spread_flags = CONTACT_GENERAL
cure_text = "Adranol & Sulfur"
cures = list("adranol", "sulfur")
agent = "Gravitokinetic Bipotential SADS-"
viable_mobtypes = list(/mob/living/carbon/human, /mob/living/carbon/human/monkey)
desc = "if left untreated death will occur."
severity = BIOHAZARD // Mimics real GBS
/datum/disease/fake_gbs/stage_act()
if(!..())
return FALSE
switch(stage)
if(2)
if(prob(1))
affected_mob.emote("sneeze")
if(3)
if(prob(5))
affected_mob.emote("cough")
else if(prob(5))
affected_mob.emote("gasp")
if(prob(10))
to_chat(span_danger("You're starting to feel very weak..."))
if(4)
if(prob(10))
affected_mob.emote("cough")
if(5)
if(prob(10))
affected_mob.emote("cough")
+49
View File
@@ -0,0 +1,49 @@
/datum/disease/gbs
name = "GBS"
max_stages = 5
spread_text = "On contact"
spread_flags = CONTACT_GENERAL
cure_text = "Adranol & Sulfur"
cures = list("adranol", "sulfur")
cure_chance = 15
agent = "Gravitokinetic Bipotential SADS+"
viable_mobtypes = list(/mob/living/carbon/human)
severity = BIOHAZARD
/datum/disease/gbs/stage_act()
if(!..())
return FALSE
switch(stage)
if(2)
if(prob(45))
affected_mob.adjustToxLoss(5)
if(prob(1))
affected_mob.emote("sneeze")
if(3)
if(prob(5))
affected_mob.emote("cough")
else if(prob(5))
affected_mob.emote("gasp")
if(prob(10))
to_chat(affected_mob, span_danger("You're starting to feel very weak..."))
if(4)
if(prob(10))
affected_mob.emote("cough")
affected_mob.adjustToxLoss(5)
if(5)
to_chat(affected_mob, span_danger("Your body feels as if it's trying to rip itself open..."))
if(prob(50))
affected_mob.delayed_gib()
else
return
/datum/disease/gbs/curable
name = "Non-Contagious GBS"
stage_prob = 5
spread_text = "Non-contagious"
spread_flags = NON_CONTAGIOUS
cure_text = "Cryoxadone"
cures = list("cryoxadone")
cure_chance = 10
agent = "gibbis"
disease_flags = CURABLE
+8 -2
View File
@@ -7,5 +7,11 @@
/datum/ghost_query/maints_pred
role_name = "Maintenance Predator"
be_special_flag = BE_MAINTPRED
question = "It appears a predatory critter is lurking in the maintenance. Do you want to play as it? ((You get to choose type of critter. Expect to be treated as vore predator.))"
cutoff_number = 1
question = "It appears a predatory critter is lurking in maintenance. Do you want to play as it? ((You get to choose type of critter. Expect to be treated as vore predator.))"
cutoff_number = 1
/datum/ghost_query/maints_lurker
role_name = "Maintenance Lurker"
be_special_flag = BE_MAINTLURKER
question = "It appears a strange individual is lurking in maintenance. Do you want to play as them? ((You can spawn as your currently loaded character slot. Expect to be treated as vore predator.))"
cutoff_number = 1
+13 -1
View File
@@ -63,4 +63,16 @@
/decl/hierarchy/outfit/zaddat
name = "Zaddat Suit"
suit = /obj/item/clothing/suit/space/void/zaddat/
mask = /obj/item/clothing/mask/gas/zaddat
mask = /obj/item/clothing/mask/gas/zaddat
/decl/hierarchy/outfit/maint_lurker
name = "Maintenance Lurker Outfit"
id_slot = slot_wear_id
id_type = /obj/item/card/id/civilian/lurker
pda_slot = slot_belt
pda_type = /obj/item/pda
id_pda_assignment = "NO DATA"
headset = /obj/item/radio/headset
headset_alt = /obj/item/radio/headset/alt
headset_earbud = /obj/item/radio/headset/earbud
+34
View File
@@ -8,6 +8,7 @@
holder_type = /obj/machinery/door/airlock
wire_count = 12
proper_name = "Airlock"
tgui_template = "WiresAirlock"
/datum/wires/airlock/interactable(mob/user)
var/obj/machinery/door/airlock/A = holder
@@ -41,6 +42,39 @@
. += "The 'Check Timing Mechanism' light is [(A.normalspeed == 0 && haspower) ? "on" : "off"]."
. += "The IDScan light is [(A.aiDisabledIdScanner == 0 && haspower) ? "on" : "off."]"
/datum/wires/airlock/tgui_data(mob/user)
var/list/data = ..()
var/obj/machinery/door/airlock/A = holder
data["id_tag"] = A.id_tag
data["frequency"] = A.radio_connection ? A.frequency : null
data["min_freq"] = RADIO_LOW_FREQ
data["max_freq"] = RADIO_HIGH_FREQ
return data
/datum/wires/airlock/tgui_act(action, list/params)
. = ..()
if(.)
return
var/obj/machinery/door/airlock/A = holder
switch(action)
if("set_id_tag")
var/new_id = tgui_input_text(usr, "Enter a new ID tag for [A]", "[A] ID Tag", A.id_tag, 30, FALSE, TRUE)
if(new_id)
A.id_tag = new_id
return TRUE
if("set_frequency")
A.set_frequency(sanitize_frequency(text2num(params["freq"]), RADIO_LOW_FREQ, RADIO_HIGH_FREQ))
return TRUE
if("clear_frequency")
A.set_frequency(null)
return TRUE
/datum/wires/airlock/on_cut(wire, mend)
var/obj/machinery/door/airlock/A = holder
switch(wire)
+3 -1
View File
@@ -9,6 +9,8 @@
/// The display name for the TGUI window. For example, given the var is "APC"...
/// When the TGUI window is opened, "wires" will be appended to it's title, and it would become "APC wires".
var/proper_name = "Unknown"
/// The template to use for TGUI.
var/tgui_template = "Wires"
/// The total number of wires that our holder atom has.
var/wire_count = NONE
/// A list of all wires. For a list of valid wires defines that can go here, see `code/__DEFINES/wires.dm`
@@ -92,7 +94,7 @@
/datum/wires/tgui_interact(mob/user, datum/tgui/ui = null)
ui = SStgui.try_update_ui(user, src, ui)
if(!ui)
ui = new(user, src, "Wires", "[proper_name] wires")
ui = new(user, src, tgui_template, "[proper_name] wires")
ui.open()
/datum/wires/tgui_state(mob/user)