-
-
Notifications
You must be signed in to change notification settings - Fork 31
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* Symptoms * Paranoia * Conspiracy virus preset * Conspirological virus is in event now * Fever can cause dehydration * fix * Tweaks to paranoia * Adjust radio sounds in paranoia * More sound tweaks * oops * Bloody vomit * Vomit decal can contain more reagents * Fixes and tweak to paranoia * Fixes bad cure paths
- Loading branch information
1 parent
a320849
commit 94d698a
Showing
13 changed files
with
391 additions
and
45 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,56 @@ | ||
/* | ||
////////////////////////////////////// | ||
Itching | ||
Not noticable or unnoticable. | ||
Resistant. | ||
Increases stage speed. | ||
Little transmissibility. | ||
Low Level. | ||
BONUS | ||
Displays an annoying message! | ||
Should be used for buffing your disease. | ||
////////////////////////////////////// | ||
*/ | ||
|
||
/datum/symptom/itching | ||
name = "Itching" | ||
desc = "The virus irritates the skin, causing itching." | ||
stealth = 0 | ||
resistance = 3 | ||
stage_speed = 3 | ||
transmittable = 1 | ||
level = 1 | ||
severity = 1 | ||
symptom_delay_min = 5 | ||
symptom_delay_max = 25 | ||
var/scratch = FALSE | ||
threshold_descs = list( | ||
"Transmission 6" = "Increases frequency of itching.", | ||
"Stage Speed 7" = "The host will scrath itself when itching, causing superficial damage.", | ||
) | ||
|
||
/datum/symptom/itching/Start(datum/disease/advance/A) | ||
if(!..()) | ||
return | ||
if(A.properties["transmittable"] >= 6) //itch more often | ||
symptom_delay_min = 1 | ||
symptom_delay_max = 4 | ||
if(A.properties["stage_rate"] >= 7) //scratch | ||
scratch = TRUE | ||
|
||
/datum/symptom/itching/Activate(datum/disease/advance/A) | ||
if(!..()) | ||
return | ||
var/mob/living/carbon/human/M = A.affected_mob | ||
var/picked_bodypart = pick(BP_HEAD, BP_CHEST, BP_L_ARM, BP_R_ARM, BP_L_LEG, BP_R_LEG) | ||
var/obj/item/organ/external/BP = M.get_organ(picked_bodypart) | ||
if(istype(BP) && !BP_IS_ROBOTIC(BP) && !BP_IS_CRYSTAL(BP) && !BP.is_stump()) | ||
var/can_scratch = scratch && !M.incapacitated() | ||
var/datum/gender/T = gender_datums[M.get_gender()] | ||
M.visible_message("[can_scratch ? "<span class='warning'>[M] scratches [T.his] [BP.name].</span>" : ""]", "<span class='warning'>Your [BP.name] itches. [can_scratch ? " You scratch it." : ""]</span>") | ||
if(can_scratch) | ||
BP.take_external_damage(rand(1, 2)) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,76 @@ | ||
/* | ||
////////////////////////////////////// | ||
Narcolepsy | ||
Noticeable. | ||
Lowers resistance | ||
Decreases stage speed tremendously. | ||
Decreases transmittablity tremendously. | ||
Bonus | ||
Causes drowsiness and sleep. | ||
////////////////////////////////////// | ||
*/ | ||
|
||
/datum/symptom/narcolepsy | ||
name = "Narcolepsy" | ||
desc = "The virus causes a hormone imbalance, making the host sleepy and narcoleptic." | ||
stealth = -1 | ||
resistance = -2 | ||
stage_speed = -3 | ||
transmittable = 0 | ||
level = 6 | ||
symptom_delay_min = 30 | ||
symptom_delay_max = 85 | ||
severity = 4 | ||
var/yawning = FALSE | ||
threshold_descs = list( | ||
"Stealth 4" = "The symptom remains hidden until active.", | ||
"Transmission 4" = "Causes the host to periodically emit a yawn that spreads the virus in a manner similar to that of a sneeze.", | ||
"Stage Speed 10" = "Causes narcolepsy more often, increasing the chance of the host falling asleep.", | ||
) | ||
|
||
/datum/symptom/narcolepsy/Start(datum/disease/advance/A) | ||
if(!..()) | ||
return | ||
if(A.properties["stealth"] >= 4) | ||
suppress_warning = TRUE | ||
if(A.properties["transmittable"] >= 4) //yawning (mostly just some copy+pasted code from sneezing, with a few tweaks) | ||
yawning = TRUE | ||
if(A.properties["stage_speed"] >= 10) //act more often | ||
symptom_delay_min = 20 | ||
symptom_delay_max = 45 | ||
|
||
/datum/symptom/narcolepsy/Activate(datum/disease/advance/A) | ||
var/mob/living/M = A.affected_mob | ||
switch(A.stage) | ||
if(1) | ||
if(!suppress_warning && prob(50)) | ||
to_chat(M, "<span class='warning'>You feel tired.</span>") | ||
if(2) | ||
if(!suppress_warning && prob(50)) | ||
to_chat(M, "<span class='warning'>You feel very tired.</span>") | ||
if(3) | ||
if(!suppress_warning && prob(50)) | ||
to_chat(M, "<span class='warning'>You try to focus on staying awake.</span>") | ||
if(M.drowsyness < 70) | ||
M.drowsyness += 5 | ||
if(4) | ||
if(!suppress_warning && prob(50)) | ||
if(yawning) | ||
to_chat(M, "<span class='warning'>You try and fail to suppress a yawn.</span>") | ||
else | ||
to_chat(M, "<span class='warning'>You nod off for a moment.</span>") //you can't really yawn while nodding off, can you? | ||
M.drowsyness = max(0, M.drowsyness + 10) | ||
if(yawning) | ||
M.emote("yawn") | ||
if(M.CanSpreadAirborneDisease()) | ||
A.Spread(6) | ||
if(5) | ||
if(prob(50)) | ||
to_chat(M, "<span class='warning'>[pick("So tired...","You feel very sleepy.","You have a hard time keeping your eyes open.","You try to stay awake.")]</span>") | ||
M.drowsyness = max(0, M.drowsyness + 20) | ||
if(yawning) | ||
M.emote("yawn") | ||
if(M.CanSpreadAirborneDisease()) | ||
A.Spread(6) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,169 @@ | ||
// List of item types that may be used in activation of the symptom | ||
GLOBAL_LIST_INIT(paranoia_items, list( | ||
/obj/item/card/union, | ||
/obj/item/card/data, | ||
/obj/item/card/emag, | ||
/obj/item/plastique, | ||
/obj/item/aiModule/syndicate, | ||
/obj/item/aiModule/freeform, | ||
/obj/item/shield/energy, | ||
/obj/item/melee/baton, | ||
/obj/item/melee/baton/cattleprod, | ||
/obj/item/melee/energy/sword, | ||
/obj/item/implantcase/adrenalin, | ||
/obj/item/implantcase/explosive, | ||
/obj/item/implanter/uplink, | ||
/obj/item/gun/energy/gun, | ||
/obj/item/gun/energy/gun/nuclear, | ||
/obj/item/gun/energy/captain, | ||
/obj/item/gun/energy/ionrifle/small, | ||
/obj/item/gun/energy/toxgun, | ||
/obj/item/gun/projectile/pistol/military, | ||
/obj/item/gun/projectile/pistol/sec, | ||
/obj/item/gun/projectile/automatic, | ||
/obj/item/pen, | ||
/obj/item/grenade/anti_photon, | ||
/obj/item/grenade/smokebomb, | ||
/obj/item/grenade/empgrenade, | ||
/obj/item/grenade/frag, | ||
/obj/item/grenade/frag/high_yield, | ||
/obj/item/device/uplink_service/fake_ion_storm, | ||
/obj/item/device/powersink, | ||
)) | ||
|
||
// List of random spooky sounds to play to paranoid people | ||
// The associated list is: list(maximum repeats, minimum delay, maximum delay) | ||
// If no list is associated - treated as single sound instance | ||
GLOBAL_LIST_INIT(paranoia_sounds, list( | ||
"button" = list(3, 1 SECONDS, 3 SECONDS), | ||
'sound/machines/airlock_open.ogg', | ||
'sound/machines/airlock_open_force.ogg', | ||
'sound/machines/airlock_close.ogg', | ||
'sound/machines/airlock_close_force.ogg', | ||
'sound/machines/bolts_up.ogg', | ||
'sound/machines/bolts_down.ogg', | ||
'sound/machines/deniedboop.ogg' = list(5, 1.5 SECONDS, 3 SECONDS), | ||
'sound/effects/walkieon.ogg' = list(2, 2 SECONDS, 4 SECONDS), | ||
'sound/effects/walkietalkie.ogg' = list(6, 1 SECONDS, 6 SECONDS), | ||
'sound/weapons/Laser.ogg' = list(6, 1 SECONDS, 4 SECONDS), | ||
'sound/weapons/lasercannonfire.ogg' = list(3, 2 SECONDS, 6 SECONDS), | ||
'sound/weapons/pulse.ogg' = list(5, 1.5 SECONDS, 5 SECONDS), | ||
'sound/weapons/gunshot/gunshot_strong.ogg' = list(7, 1 SECONDS, 2 SECONDS), | ||
'sound/weapons/gunshot/gunshot_pistol.ogg' = list(7, 1 SECONDS, 2 SECONDS), | ||
'sound/weapons/gunshot/revolver.ogg' = list(6, 1.3 SECONDS, 3 SECONDS), | ||
'sound/weapons/gunshot/gunshot2.ogg' = list(10, 0.1 SECONDS, 0.4 SECONDS), | ||
'sound/weapons/gunshot/gunshot3.ogg' = list(10, 0.1 SECONDS, 0.4 SECONDS), | ||
'sound/weapons/guns/miss1.ogg' = list(5, 0.1 SECONDS, 1 SECONDS), | ||
'sound/weapons/guns/miss2.ogg' = list(5, 0.1 SECONDS, 1 SECONDS), | ||
'sound/weapons/guns/ricochet1.ogg' = list(5, 0.1 SECONDS, 1 SECONDS), | ||
'sound/weapons/guns/ricochet2.ogg' = list(5, 0.1 SECONDS, 1 SECONDS), | ||
// If you don't have infestation PTSD - you aren't a real human, | ||
'sound/weapons/rapidslice.ogg' = list(3, 1 SECONDS, 2 SECONDS), | ||
'sound/weapons/slashmiss.ogg' = list(7, 0.5 SECONDS, 1 SECONDS), | ||
'sound/weapons/alien_claw_flesh1.ogg' = list(5, 0.8 SECONDS, 1.4 SECONDS), | ||
'sound/simple_mob/abominable_infestation/assembler/ambient_1.ogg' = list(3, 2 SECONDS, 4 SECONDS), | ||
'sound/simple_mob/abominable_infestation/broodling/ambient_1.ogg' = list(2, 1 SECONDS, 3 SECONDS), | ||
'sound/simple_mob/abominable_infestation/broodling/ambient_2.ogg' = list(2, 1 SECONDS, 3 SECONDS), | ||
'sound/simple_mob/abominable_infestation/broodling/death.ogg', | ||
'sound/simple_mob/abominable_infestation/eviscerator/attack.ogg' = list(3, 1 SECONDS, 3 SECONDS), | ||
'sound/simple_mob/abominable_infestation/eviscerator/step.ogg' = list(4, 1 SECONDS, 3 SECONDS), | ||
'sound/simple_mob/abominable_infestation/eviscerator/aggro_1.ogg', | ||
'sound/simple_mob/abominable_infestation/eviscerator/aggro_2.ogg', | ||
'sound/simple_mob/abominable_infestation/eviscerator/aggro_3.ogg', | ||
'sound/simple_mob/abominable_infestation/eviscerator/death_1.ogg', | ||
'sound/simple_mob/abominable_infestation/floatfly/fly.ogg', | ||
'sound/simple_mob/abominable_infestation/floatfly/death.ogg', | ||
'sound/simple_mob/abominable_infestation/rhino/step.ogg' = list(3, 2 SECONDS, 4 SECONDS), | ||
'sound/simple_mob/abominable_infestation/rhino/roar.ogg', | ||
)) | ||
|
||
/* | ||
////////////////////////////////////// | ||
Paranoia | ||
Very stealthy. | ||
Reduces resistance. | ||
Increases stage speed. | ||
Reduces transmissibility. | ||
Medium Level. | ||
BONUS | ||
Displays an annoying message! | ||
Should be used for buffing your disease. | ||
////////////////////////////////////// | ||
*/ | ||
|
||
/datum/symptom/paranoia | ||
name = "Paranoia" | ||
desc = "The virus causes delusional and distrustful behavior in the host." | ||
stealth = 2 | ||
resistance = -2 | ||
stage_speed = 1 | ||
transmittable = -2 | ||
level = 5 | ||
severity = 1 | ||
symptom_delay_min = 2 | ||
symptom_delay_max = 90 // They will never know what to trust :) | ||
|
||
/datum/symptom/paranoia/Activate(datum/disease/advance/A) | ||
if(!..()) | ||
return | ||
if(A.stage <= 3) | ||
return | ||
else | ||
var/mob/living/M = A.affected_mob | ||
var/rand_effect = pick(1, 2, 3) | ||
switch(rand_effect) | ||
// Fake examine message | ||
if(1) | ||
SendFakeExamine(M) | ||
// Fake sound | ||
if(2) | ||
PlayFakeSound(M) | ||
|
||
/datum/symptom/paranoia/proc/SendFakeExamine(mob/living/M) | ||
if(M.is_blind()) | ||
return | ||
var/list/potential_people = list() | ||
for(var/mob/living/carbon/human/H in view(4, M)) | ||
if(H == M) | ||
continue | ||
if(!H.client) | ||
continue | ||
if(H.stat) | ||
continue | ||
if(H.is_invisible_to(M)) | ||
continue | ||
potential_people += H | ||
if(!LAZYLEN(potential_people)) | ||
return | ||
var/mob/living/carbon/human/H = pick(potential_people) | ||
var/fake_message = "at the void" | ||
if(prob(25) && istype(H.back, /obj/item/storage)) | ||
fake_message = "inside \the [H.back.name]" | ||
else | ||
var/obj/item/fake_item = pick(GLOB.paranoia_items) | ||
fake_message = "at \the [initial(fake_item.name)]" | ||
to_chat(M, "<span class='subtle'><b>\The [H]</b> looks [fake_message].</span>") | ||
|
||
/datum/symptom/paranoia/proc/PlayFakeSound(mob/living/M) | ||
var/turf/T = get_random_turf_in_range(M, 8, 4) | ||
var/S = pick(GLOB.paranoia_sounds) | ||
var/vol = rand(10, 50) | ||
M.playsound_local(T, S, vol, prob(50)) | ||
if(!islist(GLOB.paranoia_sounds[S])) | ||
return | ||
// Epic paranoidal sounds | ||
var/list/params = GLOB.paranoia_sounds[S] | ||
var/repeats = rand(1, params[1]) | ||
for(var/i = 1 to repeats) | ||
var/delay = rand(params[2], params[3]) | ||
addtimer(CALLBACK(src, .proc/PlayDelayedSound, M, T, S), delay) | ||
|
||
/datum/symptom/paranoia/proc/PlayDelayedSound(mob/living/M, turf/T, S, vol) | ||
if(QDELETED(M) || QDELETED(T)) | ||
return | ||
var/turf/TT = get_random_turf_in_range(T, 1) // Sound is coming from slightly different place now | ||
M.playsound_local(TT, S, rand(round(vol * 0.75), round(vol * 1.25)), prob(50)) |
Oops, something went wrong.