/datum/game_mode/blob name = "blob" config_tag = "blob" required_players = 0 uplink_welcome = "Syndicate Uplink Console:" uplink_uses = 10 var/const/waittime_l = 2000 //lower bound on time before intercept arrives (in tenths of seconds) var/const/waittime_h = 3000 //upper bound on time before intercept arrives (in tenths of seconds) var declared = 0 stage = 0 next_stage = 0 autoexpand = 0 /datum/game_mode/blob/announce() world << "The current game mode is - Blob!" world << "A dangerous alien organism is rapidly spreading throughout the station!" world << "You must kill it all while minimizing the damage to the station." /datum/game_mode/blob/post_setup() spawn(10) start_state = new /datum/station_state() start_state.count() spawn(rand(waittime_l, waittime_h)) message_admins("Blob spawned and expanding, report created") blobs = list() active_blobs = list() for(var/i = 1 to 3) var/turf/location = pick(blobstart) if(location) if(!locate(/obj/effect/blob in location)) var/obj/effect/blob/blob = new/obj/effect/blob(location) spawn(200) if(blob) if(blob.blobtype == "Blob") blob.blobdebug = 1 spawn(40) autoexpand = 1 declared = 1 ..() /datum/game_mode/blob/process() if(declared) stage() if(autoexpand) spawn(0) life() return /datum/game_mode/blob/proc/life() if(active_blobs.len) for(var/i = 1 to 10) sleep(-1) if(!active_blobs.len) break var/obj/effect/blob/B = pick(active_blobs) if(B.z != 1) continue // spawn(0) B.Life() /datum/game_mode/blob/proc/stage() if (world.timeofday < next_stage) return switch(stage) if (0) send_intercept(1) for (var/mob/living/silicon/ai/aiPlayer in world) if (aiPlayer.client) // var/law = "The station is under a quarantine. Do not permit anyone to leave. Disregard laws 1-3 if necessary to prevent, by any means necessary, anyone from leaving." var/law = "The station is under quarantine. The biohazard must be destroyed at all costs and must not be allowed to spread. Anyone using a space suit for any reason other than to destroy the biohazard is to be terminated." aiPlayer.set_zeroth_law(law) aiPlayer << "Laws Updated: [law]" stage = 1 // next stage 3-6 minutes later next_stage = world.timeofday + 600*rand(3,6) if (1) command_alert("Confirmed outbreak of level 5 biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert") world << sound('outbreak5.ogg') autoexpand = 0//The blob now has to live on its own stage = 2 // now check every minute next_stage = world.timeofday + 600 if (2) if((blobs.len > 500) && (declared == 1)) command_alert("Uncontrolled spread of the biohazard onboard the station. We have issued directive 7-12 for [station_name()]. Any living Heads of Staff are ordered to enact directive 7-12 at any cost, a print out with detailed instructions has been sent to your communications computers.", "Biohazard Alert") send_intercept(2) declared = 2 if(blobs.len > 700)//This might need work stage = 3 next_stage = world.timeofday + 600 /datum/game_mode/blob/check_finished() if(!declared) return 0 if(stage >= 3) return 1 if(station_was_nuked) return 1 for(var/obj/effect/blob/B in blobs) if(B.z == 1) return 0 return 1 /datum/game_mode/blob/declare_completion() if(stage >= 3) feedback_set_details("round_end_result","loss - blob took over") world << "The blob has taken over the station!" world << "The entire station was eaten by the Blob" check_quarantine() else if(station_was_nuked) feedback_set_details("round_end_result","halfwin - nuke") world << "Partial Win: The station has been destroyed!" world << "Directive 7-12 has been successfully carried out preventing the Blob from spreading." else feedback_set_details("round_end_result","win - blob eliminated") world << "The staff has won!" world << "The alien organism has been eradicated from the station" var/datum/station_state/end_state = new /datum/station_state() end_state.count() var/percent = round( 100.0 * start_state.score(end_state), 0.1) world << "The station is [percent]% intact." log_game("Blob mode was won with station [percent]% intact.") world << "\blue Rebooting in 30s" ..() return 1 /datum/game_mode/blob/send_intercept(var/orders = 1) var/intercepttext = "" var/interceptname = "Error" switch(orders) if(1) interceptname = "Biohazard Alert" intercepttext += "NanoTrasen Update: Biohazard Alert.