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:
SkyMarshal
2012-04-04 23:15:47 -07:00
7 changed files with 149 additions and 28 deletions
+3
View File
@@ -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"
+22 -25
View File
@@ -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"
+1 -1
View File
@@ -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")
+120
View File
@@ -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
+1
View File
@@ -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
View File
@@ -1 +1 @@
Extend-A-Traitormongous
secret