diff --git a/code/WorkInProgress/virus2/base.dm b/code/WorkInProgress/virus2/base.dm index ce2aec42040..4bd30bf08ca 100644 --- a/code/WorkInProgress/virus2/base.dm +++ b/code/WorkInProgress/virus2/base.dm @@ -113,7 +113,7 @@ proc/airborne_can_reach(turf/source, turf/target) var/infectionchance = 10 var/speed = 1 var/spreadtype = "Blood" // Can also be "Airborne" - var/stage = 1 + var/stage = 0 var/stageprob = 10 var/dead = 0 var/clicks = 0 @@ -225,7 +225,7 @@ proc/airborne_can_reach(turf/source, turf/target) if(mob.reagents.has_reagent("virusfood")) mob.reagents.remove_reagent("virusfood",0.1) clicks += 10 - if(clicks > stage*100 && prob(10)) + if(clicks > (stage+1)*100 && prob(10)) if(stage == 4) var/datum/disease2/resistance/res = new /datum/disease2/resistance(src) src.cure(mob) @@ -246,13 +246,13 @@ proc/airborne_can_reach(turf/source, turf/target) if(stage>1) E = effects[1] E.effect.deactivate(mob) - if(stage>2) + if(stage>=2) E = effects[2] E.effect.deactivate(mob) - if(stage>3) + if(stage>=3) E = effects[3] E.effect.deactivate(mob) - if(stage>4) + if(stage>=4) E = effects[4] E.effect.deactivate(mob) @@ -272,6 +272,7 @@ proc/airborne_can_reach(turf/source, turf/target) disease.spreadtype = spreadtype disease.stageprob = stageprob disease.antigen = antigen + disease.uniqueID = uniqueID for(var/datum/disease2/effectholder/holder in effects) // world << "adding effects" var/datum/disease2/effectholder/newholder = new /datum/disease2/effectholder diff --git a/code/game/gamemodes/epidemic/epidemic.dm b/code/game/gamemodes/epidemic/epidemic.dm index 25a66eaac20..6a94e65dd1c 100644 --- a/code/game/gamemodes/epidemic/epidemic.dm +++ b/code/game/gamemodes/epidemic/epidemic.dm @@ -8,6 +8,12 @@ var/checkwin_counter =0 var/finished = 0 + var/cruiser_arrival + + var/virus_name = "" + + var/stage = 0 + /////////////////////////// //Announces the game type// /////////////////////////// @@ -31,6 +37,51 @@ return 1 +/datum/game_mode/epidemic/proc/cruiser_seconds() + return (cruiser_arrival - world.time) / 10 + +////////////////////// INTERCEPT //////////////////////// +/// OVERWRITE THE INTERCEPT WITH A QUARANTINE WARNING /// +///////////////////////////////////////////////////////// + +/datum/game_mode/epidemic/send_intercept() + var/intercepttext = "CONFIDENTIAL REPORT
" + virus_name = "X-[rand(1,99)]™" + intercepttext += "Warning: Pathogen [virus_name] has been detected on [station_name()].

" + intercepttext += "Code violet quarantine of [station_name()] put under immediate effect.
" + intercepttext += "Class [rand(2,5)] cruiser has been dispatched. ETA: [round(cruiser_seconds() / 60)] minutes.
" + intercepttext += "
Instructions
" + intercepttext += "* ELIMINATE THREAT WITH EXTREME PREJUDICE. [virus_name] IS HIGHLY CONTAGIOUS. INFECTED CREW MEMBERS MUST BE QUARANTINED IMMEDIATELY.
" + intercepttext += "* [station_name()] is under QUARANTINE. Any vessels outbound from [station_name()] will be tracked down and destroyed.
" + intercepttext += "* The existence of [virus_name] is highly confidential. To prevent a panic, only high-ranking staff members are authorized to know of its existence. Crew members that illegally obtained knowledge of [virus_name] are to be neutralized.
" + intercepttext += "* A cure is to be researched immediately, but NanoTrasen intellectual property must be respected. To prevent knowledge of [virus_name] from falling into unauthorized hands, all medical staff that work with the pathogen must be enhanced with a NanoTrasen loyality implant.
" + + + for (var/obj/machinery/computer/communications/comm in world) + if (!(comm.stat & (BROKEN | NOPOWER)) && comm.prints_intercept) + var/obj/item/weapon/paper/intercept = new /obj/item/weapon/paper( comm.loc ) + intercept.name = "paper" + intercept.info = intercepttext + + comm.messagetitle.Add("Cent. Com. CONFIDENTIAL REPORT") + comm.messagetext.Add(intercepttext) + world << sound('commandreport.ogg') + +/datum/game_mode/epidemic/proc/announce_to_kill_crew() + var/intercepttext = "CONFIDENTIAL REPORT
" + intercepttext += "PATHOGEN [virus_name] IS STILL PRESENT ON [station_name()]. IN COMPLIANCE WITH NANOTRASEN LAWS FOR INTERSTELLAR SAFETY, EMERGENCY SAFETY MEASURES HAVE BEEN AUTHORIZED. ALL INFECTED CREW MEMBERS ON [station_name()] ARE TO BE NEUTRALIZED AND DISPOSED OF IN A MANNER THAT WILL DESTROY ALL TRACES OF THE PATHOGEN. FAILURE TO COMPLY WILL RESULT IN IMMEDIATE DESTRUCTION OF [station_name].
" + intercepttext += "CRUISER WILL ARRIVE IN [round(cruiser_seconds()/60)] MINUTES
" + + for (var/obj/machinery/computer/communications/comm in world) + if (!(comm.stat & (BROKEN | NOPOWER)) && comm.prints_intercept) + var/obj/item/weapon/paper/intercept = new /obj/item/weapon/paper( comm.loc ) + intercept.name = "paper" + intercept.info = intercepttext + + comm.messagetitle.Add("Cent. Com. CONFIDENTIAL REPORT") + comm.messagetext.Add(intercepttext) + world << sound('commandreport.ogg') + /datum/game_mode/epidemic/post_setup() var/list/crew = list() @@ -39,7 +90,6 @@ if(crew.len < 2) world << "\red There aren't enough players for this mode!" - return var/datum/disease2/disease/lethal = new lethal.makerandom(1) @@ -62,18 +112,24 @@ continue H.virus2 = nonlethal.getcopy() + cruiser_arrival = world.time + (10 * 90 * 60) + stage = 1 + 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() + if(stage == 1 && cruiser_seconds() < 60 * 30) + announce_to_kill_crew() + stage = 2 + else if(stage == 2 && cruiser_seconds() <= 0) + crew_lose() + stage = 3 + checkwin_counter++ if(checkwin_counter >= 20) if(!finished) @@ -106,6 +162,30 @@ else return 0 +/////////////////////////////////////////// +///Handle crew failure(station explodes)/// +/////////////////////////////////////////// +/datum/game_mode/epidemic/proc/crew_lose() + ticker.mode:explosion_in_progress = 1 + for(var/mob/M in world) + if(M.client) + M << 'Alarm.ogg' + world << "\blueIncoming missile detected.. Impact in 10.." + for (var/i=9 to 1 step -1) + sleep(10) + world << "\blue[i].." + sleep(10) + enter_allowed = 0 + for(var/mob/M in world) + if(M.client) + spawn(0) + M.client.station_explosion_cinematic() + sleep(110) + ticker.mode:station_was_nuked = 1 + ticker.mode:explosion_in_progress = 0 + return + + ////////////////////////////////////////////////////////////////////// //Announces the end of the game with all relavent information stated// ////////////////////////////////////////////////////////////////////// diff --git a/code/game/gamemodes/revolution/revolution.dm b/code/game/gamemodes/revolution/revolution.dm index bf996b30ee1..75e608b8d76 100644 --- a/code/game/gamemodes/revolution/revolution.dm +++ b/code/game/gamemodes/revolution/revolution.dm @@ -33,7 +33,7 @@ /////////////////////////// /datum/game_mode/revolution/announce() world << "The current game mode is - Revolution!" - world << "Some crewmembers are attempting to start a revolution!
\nRevolutionaries - Kill the Captain, HoP, HoS, CE, RD and CMO. Convert other crewmembers (excluding the heads of staff, and security officers) to your cause by flashing them. Protect your leaders.
\nPersonnel - Protect the heads of staff. Kill the leaders of the revolution, and brainwash the other revolutionaries (by beating them in the head).
" + world << "Some crewmembers are attempting to start a revolution!
\nRevolutionaries - Kill the Captain, HoP, HoS, CE, RD and CMO. Convert other crewmembers (excluding the heads of staff, and security officers) to your cause by convincing and then flashing them. Protect your leaders.
\nPersonnel - Protect the heads of staff. Kill the leaders of the revolution, and brainwash the other revolutionaries (by beating them in the head).
" /////////////////////////////////////////////////////////////////////////////// @@ -139,7 +139,8 @@ if (!where) mob << "The Syndicate were unfortunately unable to get you a flash." else - mob << "The flash in your [where] will implant a memory engram to convert others to our cause." + mob << "The flash in your [where] can be used to mark a crew member as revolutionist. Use this only on those true to your cause, to ensure that everyone bearing the mark can be trusted." + mob << "\red Do not use the flash on players who haven't agreed to join your cause. This is known as 'LOLFLASHING' and can get you banned." return 1 //////////////////////////////////////