mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2026-01-03 05:52:43 +00:00
The safe plasma limit on breathing has been lowered causing plasma to actually damage you at a semi decent rate.
The force secret mode will now build the list of possible modes and make sure it can set the forced mode up before it actually picks the mode. If the setup fails it will just use another mode from the secret list. The R-table in medbay lobby was replaced with a normal table and medbay mostly follows the old "Can you get to the hall with next to nothing on you" map design. Blob mode work. git-svn-id: http://tgstation13.googlecode.com/svn/trunk@2185 316c924e-a436-60f5-8080-3fe189b3f50e
This commit is contained in:
@@ -141,6 +141,7 @@ var
|
||||
list/prisonwarped = list() //list of players already warped
|
||||
list/blobstart = list()
|
||||
list/blobs = list()
|
||||
list/active_blobs = list()
|
||||
// list/traitors = list() //traitor list
|
||||
list/cardinal = list( NORTH, SOUTH, EAST, WEST )
|
||||
list/alldirs = list(NORTH, SOUTH, EAST, WEST, NORTHEAST, NORTHWEST, SOUTHEAST, SOUTHWEST)
|
||||
|
||||
@@ -3,8 +3,13 @@
|
||||
config_tag = "blob"
|
||||
required_players = 0
|
||||
|
||||
var/stage = 0
|
||||
var/next_stage = 0
|
||||
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
|
||||
stage = 0
|
||||
next_stage = 0
|
||||
modestart = 0
|
||||
|
||||
|
||||
/datum/game_mode/blob/announce()
|
||||
@@ -17,86 +22,65 @@
|
||||
spawn(10)
|
||||
start_state = new /datum/station_state()
|
||||
start_state.count()
|
||||
spawn (20)
|
||||
var/turf/location = pick(blobstart)
|
||||
// spawn(100)
|
||||
spawn(rand(waittime_l, waittime_h))
|
||||
message_admins("Blob spawned and expanding, report created")
|
||||
blobs = list()
|
||||
new /obj/blob(location)
|
||||
location = pick(blobstart)
|
||||
// if(!locate(/obj/blob in location))
|
||||
// new/obj/blob(location)
|
||||
active_blobs = list()
|
||||
for (var/i = 1 to 4)
|
||||
var/turf/location = pick(blobstart)
|
||||
if(location)
|
||||
if(!locate(/obj/blob in location))
|
||||
new/obj/blob(location)
|
||||
spawn(40)
|
||||
modestart = 1
|
||||
..()
|
||||
|
||||
|
||||
/datum/game_mode/blob/process()
|
||||
if(prob(2))
|
||||
spawn_meteors()
|
||||
if(modestart)
|
||||
spawn(0)
|
||||
life()
|
||||
stage()
|
||||
return
|
||||
|
||||
|
||||
/datum/game_mode/blob/proc/life()
|
||||
if (blobs.len > 0)
|
||||
for (var/i = 1 to 25)
|
||||
sleep(-1)
|
||||
if (blobs.len == 0)
|
||||
break
|
||||
|
||||
var/obj/blob/B = pick(blobs)
|
||||
var/obj/blob/B = pick(active_blobs)
|
||||
if(B.z != 1)
|
||||
continue
|
||||
|
||||
for (var/atom/A in B.loc)
|
||||
A.blob_act()
|
||||
|
||||
// for (var/atom/A in B.loc)
|
||||
// A.blob_act()
|
||||
spawn(0)
|
||||
B.Life()
|
||||
|
||||
|
||||
/datum/game_mode/blob/proc/stage()
|
||||
// initial stage timing
|
||||
if (!next_stage)
|
||||
// sometime between 20s to 1m30s after round start
|
||||
next_stage = world.timeofday + rand(200, 900)
|
||||
|
||||
send_intercept()
|
||||
if (world.timeofday < next_stage)
|
||||
return
|
||||
|
||||
switch (stage)
|
||||
switch(stage)
|
||||
if (0)
|
||||
var/dat = ""
|
||||
dat += "<FONT size = 3><B>Cent. Com. Update</B>: Biohazard Alert.</FONT><HR>"
|
||||
dat += "Reports indicate the probable transfer of a biohazardous agent onto [station_name()] during the last crew deployment cycle.<BR>"
|
||||
dat += "Preliminary analysis of the organism classifies it as a level 5 biohazard. Its origin is unknown.<BR>"
|
||||
dat += "Cent. Com. has issued a directive 7-10 for [station_name()]. The station is to be considered quarantined.<BR>"
|
||||
dat += "Orders for all [station_name()] personnel follows:<BR>"
|
||||
dat += " 1. Do not leave the quarantine area.<BR>"
|
||||
dat += " 2. Locate any outbreaks of the organism on the station.<BR>"
|
||||
dat += " 3. If found, use any neccesary means to contain the organism.<BR>"
|
||||
dat += " 4. Avoid damage to the capital infrastructure of the station.<BR>"
|
||||
dat += "<BR>Note in the event of a quarantine breach or uncontrolled spread of the biohazard, the directive 7-10 may be upgraded to a directive 7-12 without further notice.<BR>"
|
||||
dat += "Message ends."
|
||||
|
||||
for (var/obj/machinery/computer/communications/C in machines)
|
||||
if(! (C.stat & (BROKEN|NOPOWER) ) )
|
||||
var/obj/item/weapon/paper/P = new /obj/item/weapon/paper( C.loc )
|
||||
P.name = "paper- 'Cent. Com. Biohazard Alert.'"
|
||||
P.info = dat
|
||||
C.messagetitle.Add("Cent. Com. Biohazard Alert")
|
||||
C.messagetext.Add(P.info)
|
||||
|
||||
world << "<FONT size = 3><B>Cent. Com. Update</B>: Biohazard Alert.</FONT>"
|
||||
world << "\red Summary downloaded and printed out at all communications consoles."
|
||||
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."
|
||||
aiPlayer.set_zeroth_law(law)
|
||||
aiPlayer << "An additional law has been added by CentCom: [law]"
|
||||
|
||||
stage = 1
|
||||
// next stage 5-10 minutes later
|
||||
next_stage = world.timeofday + 600*rand(5,10)
|
||||
|
||||
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')
|
||||
stage = 2
|
||||
// now check every minute
|
||||
next_stage = world.timeofday + 600
|
||||
@@ -122,11 +106,10 @@
|
||||
|
||||
|
||||
/datum/game_mode/blob/check_finished()
|
||||
if(stage <= 1)
|
||||
if(!modestart)
|
||||
return 0
|
||||
if(stage >= 4)
|
||||
return 1
|
||||
|
||||
for(var/obj/blob/B in blobs)
|
||||
if(B.z == 1)
|
||||
return 0
|
||||
@@ -134,7 +117,7 @@
|
||||
|
||||
|
||||
/datum/game_mode/blob/declare_completion()
|
||||
if (stage == 4)
|
||||
if (stage >= 4)
|
||||
world << "<FONT size = 3><B>The staff has lost!</B></FONT>"
|
||||
world << "<B>The station was destroyed by Cent. Com.</B>"
|
||||
var/numDead = 0
|
||||
@@ -185,3 +168,31 @@
|
||||
|
||||
..()
|
||||
return 1
|
||||
|
||||
|
||||
/datum/game_mode/blob/send_intercept()
|
||||
var/intercepttext = "<FONT size = 3><B>Cent. Com. Update</B>: Biohazard Alert.</FONT><HR>"
|
||||
intercepttext += "Reports indicate the probable transfer of a biohazardous agent onto [station_name()] during the last crew deployment cycle.<BR>"
|
||||
intercepttext += "Preliminary analysis of the organism classifies it as a level 5 biohazard. Its origin is unknown.<BR>"
|
||||
intercepttext += "Cent. Com. has issued a directive 7-10 for [station_name()]. The station is to be considered quarantined.<BR>"
|
||||
intercepttext += "Orders for all [station_name()] personnel follows:<BR>"
|
||||
intercepttext += " 1. Do not leave the quarantine area.<BR>"
|
||||
intercepttext += " 2. Locate any outbreaks of the organism on the station.<BR>"
|
||||
intercepttext += " 3. If found, use any neccesary means to contain the organism.<BR>"
|
||||
intercepttext += " 4. Avoid damage to the capital infrastructure of the station.<BR>"
|
||||
intercepttext += "<BR>Note in the event of a quarantine breach or uncontrolled spread of the biohazard, the directive 7-10 may be upgraded to a directive 7-12 without further notice.<BR>"
|
||||
intercepttext += "Message ends."
|
||||
|
||||
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- 'Biohazard Alert'"
|
||||
intercept.info = intercepttext
|
||||
|
||||
comm.messagetitle.Add("Biohazard Alert")
|
||||
comm.messagetext.Add(intercepttext)
|
||||
|
||||
// world << sound('outbreak5.ogg')Quiet printout for now
|
||||
|
||||
// command_alert("Summary downloaded and printed out at all communications consoles.", "Enemy communication intercept. Security Level Elevated.")
|
||||
// world << sound('intercept.ogg')
|
||||
|
||||
@@ -10,8 +10,9 @@
|
||||
var/health = 40
|
||||
|
||||
|
||||
New(loc, var/h = 30)
|
||||
New(loc, var/h = 40)
|
||||
blobs += src
|
||||
active_blobs += src
|
||||
src.health = h
|
||||
src.dir = pick(1,2,4,8)
|
||||
src.update()
|
||||
@@ -20,6 +21,8 @@
|
||||
|
||||
Del()
|
||||
blobs -= src
|
||||
if(active)
|
||||
active_blobs -= src
|
||||
..()
|
||||
|
||||
/*
|
||||
@@ -35,6 +38,7 @@
|
||||
|
||||
|
||||
proc/Life()
|
||||
set background = 1
|
||||
if(!active) return
|
||||
|
||||
var/turf/U = src.loc
|
||||
@@ -48,20 +52,27 @@
|
||||
src.update()
|
||||
return
|
||||
*/
|
||||
//Bad blob you can not into space
|
||||
//Spaceblobs will harden and become inactive
|
||||
if(istype(U, /turf/space))
|
||||
src.health -= 15
|
||||
src.update()
|
||||
src.active = 0
|
||||
src.health += 40
|
||||
src.name = "strong blob"
|
||||
src.icon_state = "blob_idle"//needs a new sprite
|
||||
active_blobs -= src
|
||||
return
|
||||
|
||||
var/p = health //TODO: DEFERRED * (U.n2/11376000 + U.oxygen/1008000 + U.co2/200)
|
||||
|
||||
if(!prob(p)) return
|
||||
|
||||
for(var/dirn in cardinal)
|
||||
sleep(3) // -- Skie
|
||||
sleep(3)
|
||||
var/turf/T = get_step(src, dirn)
|
||||
|
||||
if (istype(T.loc, /area/arrival))
|
||||
if(istype(T.loc, /area/arrival))
|
||||
continue
|
||||
|
||||
if((locate(/obj/blob) in T))
|
||||
continue
|
||||
|
||||
var/obj/blob/B = new /obj/blob(U, src.health)
|
||||
@@ -69,13 +80,14 @@
|
||||
if(T.Enter(B,src) && !(locate(/obj/blob) in T))
|
||||
B.loc = T // open cell, so expand
|
||||
else
|
||||
if(prob(60)) // closed cell, 40% chance to not expand
|
||||
if(prob(90)) // closed cell, 10% chance to not expand
|
||||
if(!locate(/obj/blob) in T)
|
||||
for(var/atom/A in T) // otherwise explode contents of turf
|
||||
A.blob_act()
|
||||
|
||||
T.blob_act()
|
||||
del(B)
|
||||
return
|
||||
|
||||
|
||||
ex_act(severity)
|
||||
@@ -170,13 +182,13 @@
|
||||
|
||||
|
||||
/datum/station_state/proc/score(var/datum/station_state/result)
|
||||
var/r1a = min( result.floor / floor, 1.0)
|
||||
var/r1b = min(result.r_wall/ r_wall, 1.0)
|
||||
var/r1c = min(result.wall / wall, 1.0)
|
||||
var/r2a = min(result.window / window, 1.0)
|
||||
var/r2b = min(result.door / door, 1.0)
|
||||
var/r2c = min(result.grille / grille, 1.0)
|
||||
var/r3 = min(result.mach / mach, 1.0)
|
||||
var/r1a = min( result.floor / max(floor,1), 1.0)
|
||||
var/r1b = min(result.r_wall/ max(r_wall,1), 1.0)
|
||||
var/r1c = min(result.wall / max(wall,1), 1.0)
|
||||
var/r2a = min(result.window / max(window,1), 1.0)
|
||||
var/r2b = min(result.door / max(door,1), 1.0)
|
||||
var/r2c = min(result.grille / max(grille,1), 1.0)
|
||||
var/r3 = min(result.mach / max(mach,1), 1.0)
|
||||
//diary << "Blob scores:[r1b] [r1c] / [r2a] [r2b] [r2c] / [r3] [r1a]"
|
||||
return (4*(r1b+r1c) + 2*(r2a+r2b+r2c) + r3+r1a)/16.0
|
||||
|
||||
|
||||
@@ -63,7 +63,7 @@
|
||||
if((world.time/10)>=3600 && toggle_space_ninja && !sent_ninja_to_station)//If an hour has passed, relatively speaking. Also, if ninjas are allowed to spawn and if there is not already a ninja for the round.
|
||||
space_ninja_arrival()//Handled in space_ninja.dm. Doesn't announce arrival, all sneaky-like.
|
||||
if(4)
|
||||
command_alert("Confirmed anomaly type SPC-MGM-152 aboard [station_name()]. All personnel must destroy the anomaly.", "Anomaly Alert")
|
||||
command_alert("Confirmed outbreak of level 5 biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert")
|
||||
world << sound('outbreak5.ogg')
|
||||
var/turf/T = pick(blobstart)
|
||||
var/obj/blob/bl = new /obj/blob( T.loc, 30 )
|
||||
|
||||
@@ -45,17 +45,17 @@ var/global/datum/controller/gameticker/ticker
|
||||
src.hide_mode = 1
|
||||
var/list/datum/game_mode/runnable_modes
|
||||
if((master_mode=="random") || (master_mode=="secret"))
|
||||
if(secret_force_mode != "secret")
|
||||
src.mode = config.pick_mode(secret_force_mode)
|
||||
|
||||
else
|
||||
|
||||
runnable_modes = config.get_runnable_modes()
|
||||
if (runnable_modes.len==0)
|
||||
current_state = GAME_STATE_PREGAME
|
||||
world << "<B>Unable to choose playable game mode.</B> Reverting to pre-game lobby."
|
||||
return 0
|
||||
if(secret_force_mode != "secret")
|
||||
var/datum/game_mode/M = config.pick_mode(secret_force_mode)
|
||||
if(M.can_start())
|
||||
src.mode = config.pick_mode(secret_force_mode)
|
||||
ResetOccupations()
|
||||
if(!src.mode)
|
||||
src.mode = pickweight(runnable_modes)
|
||||
if(src.mode)
|
||||
var/mtype = src.mode.type
|
||||
|
||||
@@ -387,10 +387,9 @@
|
||||
user << "Centcom will not allow the shuttle to be called. Consider all contracts terminated."
|
||||
return
|
||||
|
||||
// if(ticker.mode.name == "blob" || ticker.mode.name == "Corporate Restructuring" || ticker.mode.name == "sandbox")
|
||||
// user << "Under directive 7-10, [station_name()] is quarantined until further notice."
|
||||
// return
|
||||
// These modes are no longer used so I am commenting them out. N
|
||||
if(ticker.mode.name == "blob" || ticker.mode.name == "sandbox")
|
||||
user << "Under directive 7-10, [station_name()] is quarantined until further notice."
|
||||
return
|
||||
|
||||
emergency_shuttle.incall()
|
||||
log_game("[key_name(user)] has called the shuttle.")
|
||||
|
||||
@@ -1251,6 +1251,9 @@
|
||||
icon_state = "ionrifle"
|
||||
fire_sound = 'Laser.ogg'
|
||||
origin_tech = "combat=3;magnets=2"//This could likely be changed up a bit
|
||||
w_class = 4.0
|
||||
flags = FPRINT | TABLEPASS | CONDUCT | USEDELAY | ONBACK
|
||||
force = 5.0
|
||||
charge_cost = 100
|
||||
|
||||
load_into_chamber()
|
||||
|
||||
@@ -1824,7 +1824,7 @@
|
||||
<A href='?src=\ref[src];secretsfun=wave'>Spawn a wave of meteors</A><BR>
|
||||
<A href='?src=\ref[src];secretsfun=gravanomalies'>Spawn a gravitational anomaly (Untested)</A><BR>
|
||||
<A href='?src=\ref[src];secretsfun=timeanomalies'>Spawn wormholes (Untested)</A><BR>
|
||||
<A href='?src=\ref[src];secretsfun=goblob'>Spawn magma(Untested)</A><BR>
|
||||
<A href='?src=\ref[src];secretsfun=goblob'>Spawn blob(Untested)</A><BR>
|
||||
<A href='?src=\ref[src];secretsfun=aliens'>Trigger an Alien infestation</A><BR>
|
||||
<A href='?src=\ref[src];secretsfun=spaceninja'>Send in a space ninja</A><BR>
|
||||
<A href='?src=\ref[src];secretsfun=carp'>Trigger an Carp migration</A><BR>
|
||||
|
||||
@@ -255,7 +255,7 @@
|
||||
damage /= 4
|
||||
|
||||
|
||||
show_message("\red The magma splashes on you!")
|
||||
show_message("\red The blob attacks!")
|
||||
|
||||
fireloss += damage
|
||||
|
||||
|
||||
@@ -223,7 +223,7 @@
|
||||
|
||||
//paralysis += 1
|
||||
|
||||
show_message("\red The magma splashes on you!")
|
||||
show_message("\red The blob attacks you!")
|
||||
|
||||
fireloss += damage
|
||||
|
||||
|
||||
@@ -532,7 +532,7 @@
|
||||
|
||||
//paralysis += 1
|
||||
|
||||
show_message("\red The magma splashes on you!")
|
||||
show_message("\red The blob attacks you!")
|
||||
|
||||
var/list/zones = list("head","chest","chest", "groin", "l_arm", "r_arm", "l_hand", "r_hand", "l_leg", "r_leg", "l_foot", "r_foot")
|
||||
|
||||
@@ -552,7 +552,7 @@
|
||||
if (weakened < 10)
|
||||
weakened = rand(10, 15)
|
||||
for(var/mob/O in viewers(src, null))
|
||||
O.show_message(text("\red <B>The magma has weakened []!</B>", src), 1, "\red You hear someone fall.", 2)
|
||||
O.show_message(text("\red <B>The blob has weakened []!</B>", src), 1, "\red You hear someone fall.", 2)
|
||||
temp.take_damage(damage)
|
||||
if ("chest")
|
||||
if ((((wear_suit && wear_suit.body_parts_covered & UPPER_TORSO) || (w_uniform && w_uniform.body_parts_covered & UPPER_TORSO)) && prob(85)))
|
||||
@@ -563,12 +563,12 @@
|
||||
if (weakened < 5)
|
||||
weakened = 5
|
||||
for(var/mob/O in viewers(src, null))
|
||||
O.show_message(text("\red <B>The magma has knocked down []!</B>", src), 1, "\red You hear someone fall.", 2)
|
||||
O.show_message(text("\red <B>The blob has knocked down []!</B>", src), 1, "\red You hear someone fall.", 2)
|
||||
else
|
||||
if (stunned < 5)
|
||||
stunned = 5
|
||||
for(var/mob/O in viewers(src, null))
|
||||
if(O.client) O.show_message(text("\red <B>The magma has stunned []!</B>", src), 1)
|
||||
if(O.client) O.show_message(text("\red <B>The blob has stunned []!</B>", src), 1)
|
||||
if(stat != 2) stat = 1
|
||||
temp.take_damage(damage)
|
||||
if ("groin")
|
||||
|
||||
@@ -309,7 +309,7 @@
|
||||
var/safe_oxygen_min = 16 // Minimum safe partial pressure of O2, in kPa
|
||||
//var/safe_oxygen_max = 140 // Maximum safe partial pressure of O2, in kPa (Not used for now)
|
||||
var/safe_co2_max = 10 // Yes it's an arbitrary value who cares?
|
||||
var/safe_toxins_max = 0.5
|
||||
var/safe_toxins_max = 0.005
|
||||
var/SA_para_min = 1
|
||||
var/SA_sleep_min = 5
|
||||
var/oxygen_used = 0
|
||||
|
||||
@@ -244,7 +244,7 @@
|
||||
|
||||
//paralysis += 1
|
||||
|
||||
show_message("\red The magma splashes on you!")
|
||||
show_message("\red The blob attacks you!")
|
||||
|
||||
fireloss += damage
|
||||
|
||||
|
||||
10573
maps/tgstation.2.0.8.dmm
10573
maps/tgstation.2.0.8.dmm
File diff suppressed because it is too large
Load Diff
@@ -132,7 +132,6 @@
|
||||
#define FILE_DIR "icons/effects"
|
||||
#define FILE_DIR "icons/misc"
|
||||
#define FILE_DIR "icons/mob"
|
||||
#define FILE_DIR "icons/mob/huds"
|
||||
#define FILE_DIR "icons/obj"
|
||||
#define FILE_DIR "icons/obj/assemblies"
|
||||
#define FILE_DIR "icons/obj/atmospherics"
|
||||
|
||||
Reference in New Issue
Block a user