mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-21 19:17:50 +01:00
Merge pull request #790 from CIB/master
No more round-breaking vira, except when that's what the round is about!
This commit is contained in:
@@ -37,6 +37,7 @@
|
||||
#define FILE_DIR "code/game/gamemodes/blob"
|
||||
#define FILE_DIR "code/game/gamemodes/changeling"
|
||||
#define FILE_DIR "code/game/gamemodes/cult"
|
||||
#define FILE_DIR "code/game/gamemodes/epidemic"
|
||||
#define FILE_DIR "code/game/gamemodes/extended"
|
||||
#define FILE_DIR "code/game/gamemodes/malfunction"
|
||||
#define FILE_DIR "code/game/gamemodes/meteor"
|
||||
@@ -193,6 +194,7 @@
|
||||
#define FILE_DIR "icons/vending_icons"
|
||||
#define FILE_DIR "interface"
|
||||
#define FILE_DIR "maps"
|
||||
#define FILE_DIR "maps/backup"
|
||||
#define FILE_DIR "sound"
|
||||
#define FILE_DIR "sound/ambience"
|
||||
#define FILE_DIR "sound/announcer"
|
||||
@@ -422,6 +424,7 @@
|
||||
#include "code\game\gamemodes\changeling\traitor_chan.dm"
|
||||
#include "code\game\gamemodes\cult\cult.dm"
|
||||
#include "code\game\gamemodes\cult\cult_items.dm"
|
||||
#include "code\game\gamemodes\epidemic\epidemic.dm"
|
||||
#include "code\game\gamemodes\extended\extended.dm"
|
||||
#include "code\game\gamemodes\malfunction\Malf_Modules.dm"
|
||||
#include "code\game\gamemodes\malfunction\malfunction.dm"
|
||||
|
||||
@@ -331,9 +331,9 @@ proc/airborne_can_reach(turf/source, turf/target)
|
||||
/datum/disease2/effect/greater/radian
|
||||
name = "Radian's syndrome"
|
||||
stage = 4
|
||||
maxm = 3
|
||||
maxm = 2
|
||||
activate(var/mob/living/carbon/mob,var/multiplier)
|
||||
mob.radiation += (2*multiplier)
|
||||
mob.radiation += (20*multiplier)
|
||||
|
||||
/datum/disease2/effect/greater/toxins
|
||||
name = "Hyperacid Syndrome"
|
||||
@@ -355,11 +355,28 @@ proc/airborne_can_reach(turf/source, turf/target)
|
||||
activate(var/mob/living/carbon/mob,var/multiplier)
|
||||
shake_camera(mob,5*multiplier)
|
||||
|
||||
/datum/disease2/effect/greater/deaf
|
||||
name = "Hard of hearing syndrome"
|
||||
/datum/disease2/effect/greater/fever
|
||||
name = "Fever syndrome"
|
||||
stage = 4
|
||||
maxm = 2
|
||||
activate(var/mob/living/carbon/mob,var/multiplier)
|
||||
mob.ear_deaf += 20
|
||||
mob.adjustFireLoss(10 * multiplier)
|
||||
|
||||
/datum/disease2/effect/greater/weak_bones
|
||||
name = "Bone Density Syndrome"
|
||||
stage = 4
|
||||
maxm = 2
|
||||
activate(var/mob/living/carbon/mob,var/multiplier)
|
||||
var/name = pick(mob.organs)
|
||||
var/datum/organ/external/organ = mob.organs[name]
|
||||
|
||||
if(!organ.broken)
|
||||
mob.adjustBruteLoss(10)
|
||||
mob.visible_message("\red You hear a loud cracking sound coming from [mob.name].","\red <b>Something feels like it shattered in your [organ.display_name]!</b>","You hear a sickening crack.")
|
||||
mob.emote("scream")
|
||||
organ.broken = 1
|
||||
organ.wound = pick("broken","fracture","hairline fracture") //Randomise in future. Edit: Randomized. --SkyMarshal
|
||||
organ.perma_injury = 10
|
||||
|
||||
/datum/disease2/effect/invisible
|
||||
name = "Waiting Syndrome"
|
||||
@@ -373,14 +390,6 @@ proc/airborne_can_reach(turf/source, turf/target)
|
||||
activate(var/mob/living/carbon/mob,var/multiplier)
|
||||
mob.mutations |= 512
|
||||
|
||||
/*/datum/disease2/effect/greater/noface
|
||||
name = "Identity Loss syndrome"
|
||||
stage = 4
|
||||
activate(var/mob/living/carbon/mob,var/multiplier)
|
||||
mob.face_dmg++
|
||||
deactivate(var/mob/living/carbon/mob)
|
||||
mob.face_dmg--*/
|
||||
|
||||
/datum/disease2/effect/greater/monkey
|
||||
name = "Monkism syndrome"
|
||||
stage = 4
|
||||
@@ -439,18 +448,6 @@ proc/airborne_can_reach(turf/source, turf/target)
|
||||
activate(var/mob/living/carbon/mob,var/multiplier)
|
||||
mob.setBrainLoss(50)
|
||||
|
||||
/datum/disease2/effect/greater/suicide
|
||||
name = "Suicidal syndrome"
|
||||
stage = 4
|
||||
activate(var/mob/living/carbon/mob,var/multiplier)
|
||||
mob.suiciding = 1
|
||||
//instead of killing them instantly, just put them at -175 health and let 'em gasp for a while
|
||||
viewers(mob) << "\red <b>[mob.name] is holding \his breath. It looks like \he's trying to commit suicide.</b>"
|
||||
mob.adjustOxyLoss(175 - mob.getToxLoss() - mob.getFireLoss() - mob.getBruteLoss() - mob.getOxyLoss())
|
||||
mob.updatehealth()
|
||||
spawn(200) //in case they get revived by cryo chamber or something stupid like that, let them suicide again in 20 seconds
|
||||
mob.suiciding = 0
|
||||
|
||||
// lesser syndromes, partly just copypastes
|
||||
/datum/disease2/effect/lesser/hallucinations
|
||||
name = "Hallucinational Syndrome"
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
for(var/mob/living/carbon/human/H in world)
|
||||
if((H.virus2) || (H.stat == 2) || prob(30))
|
||||
continue
|
||||
if(prob(90)) //may need changing, currently 10% chance for "deadly" disease
|
||||
if(prob(100)) // no lethal diseases outside virus mode!
|
||||
infect_mob_random_lesser(H)
|
||||
if(prob(20))//don't want people to know that the virus alert = greater virus
|
||||
command_alert("Probable outbreak of level [rand(1,6)] viral biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Virus Alert")
|
||||
|
||||
@@ -0,0 +1,120 @@
|
||||
/datum/game_mode/epidemic
|
||||
name = "epidemic"
|
||||
config_tag = "epidemic"
|
||||
required_players = 6
|
||||
|
||||
var/const/waittime_l = 300 //lower bound on time before intercept arrives (in tenths of seconds)
|
||||
var/const/waittime_h = 600 //upper bound on time before intercept arrives (in tenths of seconds)
|
||||
var/checkwin_counter =0
|
||||
var/finished = 0
|
||||
|
||||
///////////////////////////
|
||||
//Announces the game type//
|
||||
///////////////////////////
|
||||
/datum/game_mode/epidemic/announce()
|
||||
world << "<B>The current game mode is - Epidemic!</B>"
|
||||
world << "<B>A deadly epidemic is spreading on the station. Find a cure as fast as possible, and keep your distance to anyone who speaks in a hoarse voice!</B>"
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
//Gets the round setup, cancelling if there's not enough players at the start//
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
/datum/game_mode/epidemic/pre_setup()
|
||||
var/doctors = 0
|
||||
for(var/mob/new_player/player in world)
|
||||
if(player.mind.assigned_role in list("Chief Medical Officer","Medical Doctor"))
|
||||
doctors++
|
||||
break
|
||||
|
||||
if(doctors < 1)
|
||||
return 0
|
||||
|
||||
return 1
|
||||
|
||||
|
||||
/datum/game_mode/epidemic/post_setup()
|
||||
var/list/crew = list()
|
||||
for(var/mob/living/carbon/human/H in world) if(H.client)
|
||||
crew += H
|
||||
|
||||
if(crew.len < 2)
|
||||
world << "\red There aren't enough players for this mode!"
|
||||
return
|
||||
|
||||
var/datum/disease2/disease/lethal = new
|
||||
lethal.makerandom(1)
|
||||
lethal.infectionchance = 5
|
||||
|
||||
var/datum/disease2/disease/nonlethal = new
|
||||
nonlethal.makerandom(0)
|
||||
nonlethal.infectionchance = 0
|
||||
|
||||
for(var/i = 0, i < crew.len / 3, i++)
|
||||
var/mob/living/carbon/human/H = pick(crew)
|
||||
if(H.virus2)
|
||||
i--
|
||||
continue
|
||||
H.virus2 = lethal.getcopy()
|
||||
|
||||
for(var/i = 0, i < crew.len / 3, i++)
|
||||
var/mob/living/carbon/human/H = pick(crew)
|
||||
if(H.virus2)
|
||||
continue
|
||||
H.virus2 = nonlethal.getcopy()
|
||||
|
||||
spawn (rand(waittime_l, waittime_h))
|
||||
send_intercept()
|
||||
|
||||
spawn(10 * 60 * 30)
|
||||
command_alert("Unknown pathogen detected in routine biological scans.", "Biohazard Alert")
|
||||
spawn(300)
|
||||
command_alert("Pathogen identified as level 7 biohazard. All crew, take precaution immediately. Avoid contact with other biological personnel when necessary. Initiate quarantine immediately.", "Biohazard Alert")
|
||||
|
||||
..()
|
||||
|
||||
|
||||
/datum/game_mode/epidemic/process()
|
||||
checkwin_counter++
|
||||
if(checkwin_counter >= 20)
|
||||
if(!finished)
|
||||
ticker.mode.check_win()
|
||||
checkwin_counter = 0
|
||||
return 0
|
||||
|
||||
//////////////////////////////////////
|
||||
//Checks if the revs have won or not//
|
||||
//////////////////////////////////////
|
||||
/datum/game_mode/epidemic/check_win()
|
||||
var/alive = 0
|
||||
var/sick = 0
|
||||
for(var/mob/living/carbon/human/H in world)
|
||||
if(H.key && H.stat != 2) alive++
|
||||
if(H.virus2 && H.stat != 2) sick++
|
||||
|
||||
if(alive == 0)
|
||||
finished = 2
|
||||
if(sick == 0)
|
||||
finished = 1
|
||||
return
|
||||
|
||||
///////////////////////////////
|
||||
//Checks if the round is over//
|
||||
///////////////////////////////
|
||||
/datum/game_mode/epidemic/check_finished()
|
||||
if(finished != 0)
|
||||
return 1
|
||||
else
|
||||
return 0
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
//Announces the end of the game with all relavent information stated//
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
/datum/game_mode/epidemic/declare_completion()
|
||||
if(finished == 1)
|
||||
feedback_set_details("round_end_result","win - epidemic cured")
|
||||
world << "\red <FONT size = 3><B> The virus outbreak was contained! The crew wins!</B></FONT>"
|
||||
else if(finished == 2)
|
||||
feedback_set_details("round_end_result","loss - rev heads killed")
|
||||
world << "\red <FONT size = 3><B> The crew succumbed to the epidemic!</B></FONT>"
|
||||
..()
|
||||
return 1
|
||||
@@ -399,7 +399,7 @@
|
||||
//New version pretends to call the shuttle but cause the shuttle to return after a random duration.
|
||||
emergency_shuttle.fake_recall = rand(300,500)
|
||||
|
||||
if(ticker.mode.name == "blob")
|
||||
if(ticker.mode.name == "blob" || ticker.mode.name == "epidemic")
|
||||
user << "Under directive 7-10, [station_name()] is quarantined until further notice."
|
||||
return
|
||||
|
||||
|
||||
@@ -55,6 +55,7 @@ PROBABILITY CULT 1
|
||||
PROBABILITY MONKEY 0
|
||||
PROBABILITY TRAITORCHAN 0
|
||||
PROBABILITY EXTEND-A-TRAITORMONGOUS 3
|
||||
PROBABILITY EPIDEMIC 1
|
||||
## if amount of traitors scales or not
|
||||
TRAITOR_SCALING
|
||||
|
||||
|
||||
+1
-1
@@ -1 +1 @@
|
||||
Extend-A-Traitormongous
|
||||
secret
|
||||
|
||||
Reference in New Issue
Block a user