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:
mport2004@gmail.com
2011-09-12 08:57:02 +00:00
parent 328b4ea89f
commit 206c30c48a
15 changed files with 5404 additions and 5380 deletions

View File

@@ -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)

View File

@@ -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')

View File

@@ -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

View File

@@ -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 )

View File

@@ -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

View File

@@ -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.")

View File

@@ -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()

View File

@@ -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>

View File

@@ -255,7 +255,7 @@
damage /= 4
show_message("\red The magma splashes on you!")
show_message("\red The blob attacks!")
fireloss += damage

View File

@@ -223,7 +223,7 @@
//paralysis += 1
show_message("\red The magma splashes on you!")
show_message("\red The blob attacks you!")
fireloss += damage

View File

@@ -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")

View File

@@ -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

View File

@@ -244,7 +244,7 @@
//paralysis += 1
show_message("\red The magma splashes on you!")
show_message("\red The blob attacks you!")
fireloss += damage

File diff suppressed because it is too large Load Diff

View File

@@ -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"