mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-23 12:07:27 +01:00
Fixed cyborg rev heads counting as living and still being able to flash people.
Normal revs that get borged will be unrev'd. Added a cooldown to the captains message system. Cleaned up the Coms computer slightly. Fixed a few runtimes. More blob work. git-svn-id: http://tgstation13.googlecode.com/svn/trunk@2207 316c924e-a436-60f5-8080-3fe189b3f50e
This commit is contained in:
@@ -549,6 +549,7 @@ datum
|
||||
return 1
|
||||
|
||||
share(datum/gas_mixture/sharer)
|
||||
if(!sharer) return 0
|
||||
var/delta_oxygen = QUANTIZE(oxygen_archived - sharer.oxygen_archived)/5
|
||||
var/delta_carbon_dioxide = QUANTIZE(carbon_dioxide_archived - sharer.carbon_dioxide_archived)/5
|
||||
var/delta_nitrogen = QUANTIZE(nitrogen_archived - sharer.nitrogen_archived)/5
|
||||
|
||||
@@ -107,32 +107,6 @@
|
||||
circuit = "/obj/item/weapon/circuitboard/card/centcom"
|
||||
req_access = list(access_cent_captain)
|
||||
|
||||
/obj/machinery/computer/communications
|
||||
name = "Communications Console"
|
||||
desc = "This can be used for various important functions. Still under developement."
|
||||
icon_state = "comm"
|
||||
req_access = list(access_heads)
|
||||
circuit = "/obj/item/weapon/circuitboard/communications"
|
||||
var/prints_intercept = 1
|
||||
var/authenticated = 0
|
||||
var/list/messagetitle = list()
|
||||
var/list/messagetext = list()
|
||||
var/currmsg = 0
|
||||
var/aicurrmsg = 0
|
||||
var/state = STATE_DEFAULT
|
||||
var/aistate = STATE_DEFAULT
|
||||
var/const
|
||||
STATE_DEFAULT = 1
|
||||
STATE_CALLSHUTTLE = 2
|
||||
STATE_CANCELSHUTTLE = 3
|
||||
STATE_MESSAGELIST = 4
|
||||
STATE_VIEWMESSAGE = 5
|
||||
STATE_DELMESSAGE = 6
|
||||
STATE_STATUSDISPLAY = 7
|
||||
|
||||
var/status_display_freq = "1435"
|
||||
var/stat_msg1
|
||||
var/stat_msg2
|
||||
|
||||
/obj/machinery/computer/data
|
||||
name = "data"
|
||||
|
||||
@@ -183,24 +183,6 @@
|
||||
idle_power_usage = 2
|
||||
active_power_usage = 4
|
||||
|
||||
/obj/machinery/nuclearbomb
|
||||
desc = "Uh oh. RUN!!!!"
|
||||
name = "Nuclear Fission Explosive"
|
||||
icon = 'stationobjs.dmi'
|
||||
icon_state = "nuclearbomb0"
|
||||
density = 1
|
||||
var/deployable = 0.0
|
||||
var/extended = 0.0
|
||||
var/timeleft = 60.0
|
||||
var/timing = 0.0
|
||||
var/r_code = "ADMIN"
|
||||
var/code = ""
|
||||
var/yes_code = 0.0
|
||||
var/safety = 1.0
|
||||
var/obj/item/weapon/disk/nuclear/auth = null
|
||||
flags = FPRINT
|
||||
use_power = 0
|
||||
|
||||
/obj/machinery/restruct
|
||||
name = "DNA Physical Restructurization Accelerator"
|
||||
desc = "This looks complex."
|
||||
|
||||
@@ -7,9 +7,10 @@
|
||||
var/const/waittime_h = 3000 //upper bound on time before intercept arrives (in tenths of seconds)
|
||||
|
||||
var
|
||||
declared = 0
|
||||
stage = 0
|
||||
next_stage = 0
|
||||
modestart = 0
|
||||
autoexpand = 0
|
||||
|
||||
|
||||
/datum/game_mode/blob/announce()
|
||||
@@ -22,9 +23,10 @@
|
||||
spawn(10)
|
||||
start_state = new /datum/station_state()
|
||||
start_state.count()
|
||||
// spawn(100)
|
||||
|
||||
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)
|
||||
@@ -32,20 +34,22 @@
|
||||
if(location)
|
||||
if(!locate(/obj/blob in location))
|
||||
var/obj/blob/blob = new/obj/blob(location)
|
||||
spawn(100)
|
||||
spawn(200)
|
||||
if(blob)
|
||||
if(blob.blobtype == "Blob")
|
||||
blob.blobdebug = 1
|
||||
spawn(40)
|
||||
modestart = 1
|
||||
autoexpand = 1
|
||||
declared = 1
|
||||
..()
|
||||
|
||||
|
||||
/datum/game_mode/blob/process()
|
||||
if(modestart)
|
||||
spawn(0)
|
||||
life()
|
||||
stage()
|
||||
if(declared)
|
||||
stage()
|
||||
if(autoexpand)
|
||||
spawn(0)
|
||||
life()
|
||||
return
|
||||
|
||||
|
||||
@@ -60,8 +64,6 @@
|
||||
if(B.z != 1)
|
||||
continue
|
||||
|
||||
// for (var/atom/A in B.loc)
|
||||
// A.blob_act()
|
||||
spawn(0)
|
||||
B.Life()
|
||||
|
||||
@@ -72,37 +74,41 @@
|
||||
|
||||
switch(stage)
|
||||
if (0)
|
||||
send_intercept()
|
||||
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."
|
||||
aiPlayer.set_zeroth_law(law)
|
||||
aiPlayer << "Laws Updated: [law]"
|
||||
stage = 1
|
||||
// next stage 5-10 minutes later
|
||||
next_stage = world.timeofday + 600*rand(2,8)
|
||||
// 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 > 800)//Dono if this should be more or less yet
|
||||
command_alert("Uncontrolled spread of the biohazard onboard the station. We have issued directive 7-12 for [station_name()].", "Biohazard Alert")
|
||||
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)
|
||||
stage = 3
|
||||
next_stage = world.timeofday + 600
|
||||
else
|
||||
next_stage = world.timeofday + 600
|
||||
next_stage = world.timeofday + 600
|
||||
|
||||
|
||||
/datum/game_mode/blob/check_finished()
|
||||
if(!modestart)
|
||||
if(!declared)
|
||||
return 0
|
||||
if(stage >= 3)
|
||||
return 1
|
||||
if(station_was_nuked)
|
||||
return 1
|
||||
for(var/obj/blob/B in blobs)
|
||||
if(B.z == 1)
|
||||
return 0
|
||||
@@ -110,39 +116,14 @@
|
||||
|
||||
|
||||
/datum/game_mode/blob/declare_completion()
|
||||
if (stage >= 3)
|
||||
world << "<FONT size = 3><B>The staff has lost!</B></FONT>"
|
||||
world << "<B>The station was destroyed by NanoTrasen</B>"
|
||||
var/numDead = 0
|
||||
var/numAlive = 0
|
||||
var/numSpace = 0
|
||||
var/numOffStation = 0
|
||||
for (var/mob/living/silicon/ai/aiPlayer in world)
|
||||
for(var/mob/M in world)
|
||||
if ((M != aiPlayer && M.client))
|
||||
if (M.stat == 2)
|
||||
numDead += 1
|
||||
else
|
||||
var/T = M.loc
|
||||
if (istype(T, /turf/space))
|
||||
numSpace += 1
|
||||
else if(istype(T, /turf))
|
||||
if (M.z!=1)
|
||||
numOffStation += 1
|
||||
else
|
||||
numAlive += 1
|
||||
if (numSpace==0 && numOffStation==0)
|
||||
world << "<FONT size = 3><B>The AI has won!</B></FONT>"
|
||||
world << "<B>The AI successfully maintained the quarantine - no players were in space or were off-station (as far as we can tell).</B>"
|
||||
log_game("AI won at Blob mode despite overall loss.")
|
||||
else
|
||||
world << "<FONT size = 3><B>The AI has lost!</B></FONT>"
|
||||
world << text("<B>The AI failed to maintain the quarantine - [] were in space and [] were off-station (as far as we can tell).</B>", numSpace, numOffStation)
|
||||
log_game("AI lost at Blob mode.")
|
||||
if(stage >= 3)
|
||||
world << "<FONT size = 3><B>The blob has taken over the station!</B></FONT>"
|
||||
world << "<B>The entire station was eaten by the Blob</B>"
|
||||
check_quarantine()
|
||||
|
||||
log_game("Blob mode was lost.")
|
||||
|
||||
return 1
|
||||
else if(station_was_nuked)
|
||||
world << "<FONT size = 3><B>Partial Win: The station has been destroyed!</B></FONT>"
|
||||
world << "<B>Directive 7-12 has been successfully carried out preventing the Blob from spreading.</B>"
|
||||
|
||||
else
|
||||
world << "<FONT size = 3><B>The staff has won!</B></FONT>"
|
||||
@@ -150,15 +131,10 @@
|
||||
|
||||
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 << "<B>The station is [percent]% intact.</B>"
|
||||
|
||||
log_game("Blob mode was won with station [percent]% intact.")
|
||||
|
||||
world << "\blue Rebooting in 30s"
|
||||
|
||||
..()
|
||||
return 1
|
||||
|
||||
@@ -178,12 +154,23 @@
|
||||
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 += "<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.<BR>"
|
||||
intercepttext += "Message ends."
|
||||
if(2)
|
||||
//Bomb code goes here
|
||||
return
|
||||
|
||||
var/nukecode = "ERROR"
|
||||
for(var/obj/machinery/nuclearbomb/bomb in world)
|
||||
if(bomb && bomb.r_code)
|
||||
if(bomb.z == 1)
|
||||
nukecode = bomb.r_code
|
||||
interceptname = "Directive 7-12"
|
||||
intercepttext += "<FONT size = 3><B>NanoTrasen Update</B>: Biohazard Alert.</FONT><HR>"
|
||||
intercepttext += "Directive 7-12 has been issued for [station_name()].<BR>"
|
||||
intercepttext += "The biohazard has grown out of control and will soon reach critical mass.<BR>"
|
||||
intercepttext += "Your orders are as follows:<BR>"
|
||||
intercepttext += "1. Secure the Nuclear Authentication Disk.<BR>"
|
||||
intercepttext += "2. Detonate the Nuke located in the Station's Vault.<BR>"
|
||||
intercepttext += "Nuclear Authentication Code: [nukecode]"
|
||||
intercepttext += "Message ends."
|
||||
|
||||
for(var/obj/machinery/computer/communications/comm in world)
|
||||
if (!(comm.stat & (BROKEN | NOPOWER)) && comm.prints_intercept)
|
||||
@@ -195,7 +182,38 @@
|
||||
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')
|
||||
/datum/game_mode/blob/proc/check_quarantine()
|
||||
var/numDead = 0
|
||||
var/numAlive = 0
|
||||
var/numSpace = 0
|
||||
var/numOffStation = 0
|
||||
for (var/mob/living/silicon/ai/aiPlayer in world)
|
||||
for(var/mob/M in world)
|
||||
if ((M != aiPlayer && M.client))
|
||||
if (M.stat == 2)
|
||||
numDead += 1
|
||||
else
|
||||
var/T = M.loc
|
||||
if (istype(T, /turf/space))
|
||||
numSpace += 1
|
||||
else if(istype(T, /turf))
|
||||
if (M.z!=1)
|
||||
numOffStation += 1
|
||||
else
|
||||
numAlive += 1
|
||||
if (numSpace==0 && numOffStation==0)
|
||||
world << "<FONT size = 3><B>The AI has won!</B></FONT>"
|
||||
world << "<B>The AI successfully maintained the quarantine - no players were in space or were off-station (as far as we can tell).</B>"
|
||||
log_game("AI won at Blob mode despite overall loss.")
|
||||
else
|
||||
world << "<FONT size = 3><B>The AI has lost!</B></FONT>"
|
||||
world << text("<B>The AI failed to maintain the quarantine - [] were in space and [] were off-station (as far as we can tell).</B>", numSpace, numOffStation)
|
||||
log_game("AI lost at Blob mode.")
|
||||
log_game("Blob mode was lost.")
|
||||
return 1
|
||||
@@ -9,7 +9,8 @@
|
||||
anchored = 1
|
||||
var
|
||||
active = 1
|
||||
health = 40
|
||||
health = 30
|
||||
brute_resist = 4
|
||||
blobtype = "Blob"
|
||||
blobdebug = 0
|
||||
/*Types
|
||||
@@ -20,7 +21,7 @@
|
||||
*/
|
||||
|
||||
|
||||
New(loc, var/h = 40)
|
||||
New(loc, var/h = 30)
|
||||
blobs += src
|
||||
active_blobs += src
|
||||
src.health = h
|
||||
@@ -44,13 +45,14 @@
|
||||
return 0
|
||||
|
||||
|
||||
proc/check_mutations()
|
||||
proc/check_mutations()//These could be their own objects I guess
|
||||
if(blobtype != "Blob") return
|
||||
desc = "This really needs a better sprite"
|
||||
desc = "This really needs a better sprite."
|
||||
//Spaceeeeeeblobbb
|
||||
if(istype(src.loc, /turf/space))
|
||||
active = 0
|
||||
health += 40
|
||||
brute_resist = 2
|
||||
name = "strong blob"
|
||||
icon_state = "blob_idle"//needs a new sprite
|
||||
blobtype = "Shield"
|
||||
@@ -84,29 +86,32 @@
|
||||
proc/Life(var/pulse = 0)
|
||||
set background = 1
|
||||
|
||||
if(blobtype == "Factory")
|
||||
for(var/i = 1 to 2)
|
||||
new/obj/critter/blob(src.loc)
|
||||
return
|
||||
|
||||
if(check_mutations())
|
||||
return
|
||||
|
||||
if(blobtype == "Factory")
|
||||
for(var/i = 1 to 2)
|
||||
new/obj/critter/blob(src.loc)
|
||||
if(!pulse)
|
||||
return
|
||||
|
||||
if(!prob(health)) return//Does not do much unless its healthy it seems, might want to change this later
|
||||
|
||||
for(var/dirn in cardinal)
|
||||
// sleep(3) Due to the background we might not need this dono though
|
||||
var/list/dirs = new/list(cardinal)
|
||||
for(var/i = 1 to 4)
|
||||
var/dirn = pick(dirs)
|
||||
dirs.Remove(dirn)
|
||||
var/turf/T = get_step(src, dirn)
|
||||
|
||||
if((locate(/obj/blob) in T))
|
||||
if(((src.blobtype == "Node") || (pulse > 0))&& (pulse < 12))
|
||||
if(((src.blobtype == "Node") || (pulse > 0))&& (pulse < 15))
|
||||
var/obj/blob/E = (locate(/obj/blob) in T)
|
||||
E.Life((pulse+1))
|
||||
return//Pass it along and end
|
||||
continue
|
||||
|
||||
|
||||
var/obj/blob/B = new /obj/blob(src.loc, src.health)
|
||||
var/obj/blob/B = new /obj/blob(src.loc, min(src.health, 40))//Currently capping blob health at 40 because thats very strong
|
||||
if(T.Enter(B,src) && !(locate(/obj/blob) in T))
|
||||
B.loc = T // open cell, so expand
|
||||
else
|
||||
@@ -138,10 +143,10 @@
|
||||
del(src)
|
||||
return
|
||||
if(blobtype != "Blob") return
|
||||
if(health<10)
|
||||
if(health <= 10)
|
||||
icon_state = "blob_damaged"
|
||||
return
|
||||
if(health<20)
|
||||
if(health <= 20)
|
||||
icon_state = "blob_damaged2"
|
||||
return
|
||||
|
||||
@@ -155,21 +160,19 @@
|
||||
attackby(var/obj/item/weapon/W, var/mob/user)
|
||||
playsound(src.loc, 'attackblob.ogg', 50, 1)
|
||||
src.visible_message("\red <B>The [src.name] has been attacked with \the [W][(user ? " by [user]." : ".")]")
|
||||
var/damage = W.force / 4.0
|
||||
if(istype(W, /obj/item/weapon/weldingtool))
|
||||
var/obj/item/weapon/weldingtool/WT = W
|
||||
if(WT.welding)
|
||||
damage = 15
|
||||
playsound(src.loc, 'Welder.ogg', 100, 1)
|
||||
var/damage = 0
|
||||
switch(W.damtype)
|
||||
if("fire")
|
||||
damage = (W.force)
|
||||
if(istype(W, /obj/item/weapon/weldingtool))
|
||||
playsound(src.loc, 'Welder.ogg', 100, 1)
|
||||
if("brute")
|
||||
damage = (W.force / max(src.brute_resist,1))
|
||||
|
||||
src.health -= damage
|
||||
src.update()
|
||||
|
||||
|
||||
examine()
|
||||
set src in oview(1)
|
||||
usr << "Some blob thing."
|
||||
|
||||
|
||||
/datum/station_state/proc/count()
|
||||
for(var/turf/T in world)
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
name = "traitor+changeling"
|
||||
config_tag = "traitorchan"
|
||||
traitors_possible = 3 //hard limit on traitors if scaling is turned off
|
||||
restricted_jobs = list("AI", "Cyborg")
|
||||
required_players = 20
|
||||
required_enemies = 2
|
||||
|
||||
|
||||
@@ -63,21 +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 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 )
|
||||
spawn(0)
|
||||
bl.Life()
|
||||
bl.Life()
|
||||
bl.Life()
|
||||
bl.Life()
|
||||
bl.Life()
|
||||
blobevent = 1
|
||||
dotheblobbaby()
|
||||
spawn(3000)
|
||||
blobevent = 0
|
||||
//start loop here
|
||||
mini_blob_event()
|
||||
|
||||
if(5)
|
||||
high_radiation_event()
|
||||
@@ -98,13 +84,6 @@
|
||||
if(13)
|
||||
IonStorm()
|
||||
|
||||
/proc/dotheblobbaby()
|
||||
if (blobevent)
|
||||
for(var/obj/blob/B in world)
|
||||
if (prob (40))
|
||||
B.Life()
|
||||
spawn(30)
|
||||
dotheblobbaby()
|
||||
|
||||
/obj/bhole/New()
|
||||
src.smoke = new /datum/effects/system/harmless_smoke_spread()
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
/proc/mini_blob_event()
|
||||
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 )
|
||||
spawn(0)
|
||||
bl.Life()
|
||||
bl.Life()
|
||||
bl.Life()
|
||||
bl.Life()
|
||||
bl.Life()
|
||||
blobevent = 1
|
||||
dotheblobbaby()
|
||||
spawn(3000)
|
||||
blobevent = 0
|
||||
|
||||
/proc/dotheblobbaby()
|
||||
if (blobevent)
|
||||
for(var/obj/blob/B in world)
|
||||
if (prob (40))
|
||||
B.Life()
|
||||
spawn(30)
|
||||
dotheblobbaby()
|
||||
@@ -1,3 +1,21 @@
|
||||
/obj/machinery/nuclearbomb
|
||||
desc = "Uh oh. RUN!!!!"
|
||||
name = "Nuclear Fission Explosive"
|
||||
icon = 'stationobjs.dmi'
|
||||
icon_state = "nuclearbomb0"
|
||||
density = 1
|
||||
var/deployable = 0.0
|
||||
var/extended = 0.0
|
||||
var/timeleft = 60.0
|
||||
var/timing = 0.0
|
||||
var/r_code = "ADMIN"
|
||||
var/code = ""
|
||||
var/yes_code = 0.0
|
||||
var/safety = 1.0
|
||||
var/obj/item/weapon/disk/nuclear/auth = null
|
||||
flags = FPRINT
|
||||
use_power = 0
|
||||
|
||||
/obj/machinery/nuclearbomb/New()
|
||||
..()
|
||||
r_code = "[rand(10000, 99999.0)]"//Creates a random code upon object spawn.
|
||||
@@ -58,9 +76,7 @@
|
||||
..()
|
||||
if (usr.stat || usr.restrained())
|
||||
return
|
||||
if ( ! (istype(usr, /mob/living/carbon/human) || \
|
||||
istype(usr, /mob/living/silicon) || \
|
||||
istype(usr, /mob/living/carbon/monkey) && ticker && ticker.mode.name == "monkey") )
|
||||
if (!ishuman(usr))
|
||||
usr << "\red You don't have the dexterity to do this!"
|
||||
return 1
|
||||
if ((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf))))
|
||||
@@ -121,11 +137,11 @@
|
||||
return
|
||||
return
|
||||
|
||||
//this whole thing is retarded???
|
||||
|
||||
/obj/machinery/nuclearbomb/ex_act(severity)
|
||||
return
|
||||
|
||||
|
||||
/obj/machinery/nuclearbomb/blob_act()
|
||||
if (src.timing == -1.0)
|
||||
return
|
||||
@@ -133,6 +149,7 @@
|
||||
return ..()
|
||||
return
|
||||
|
||||
|
||||
/obj/machinery/nuclearbomb/proc/explode()
|
||||
if (src.safety)
|
||||
src.timing = 0
|
||||
@@ -152,6 +169,9 @@
|
||||
|
||||
*/
|
||||
enter_allowed = 0
|
||||
|
||||
|
||||
|
||||
var/derp = 0
|
||||
for (var/turf/T in range(1,src))
|
||||
if (!is_type_in_list(T.loc, the_station_areas))
|
||||
@@ -184,7 +204,12 @@
|
||||
as it will return null). Leaving this for you since you apparently plan to work this further. /N
|
||||
*/
|
||||
|
||||
ticker.mode.check_win()
|
||||
if(!ticker.mode.check_win())//If the mode does not deal with the nuke going off so just reboot because everyone is stuck as is
|
||||
world << "<B>Resetting in 30 seconds!</B>"
|
||||
sleep(300)
|
||||
log_game("Rebooting due to nuclear detonation")
|
||||
world.Reboot()
|
||||
return
|
||||
|
||||
|
||||
/obj/item/weapon/disk/nuclear/Del()
|
||||
|
||||
@@ -177,6 +177,7 @@
|
||||
for(var/mob/living/M in view(rev_mind.current))
|
||||
M << "[rev_mind.current] looks like they just remembered their real allegiance!"
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//Keeps track of players having the correct icons////////////////////////////////////////////////
|
||||
//CURRENTLY CONTAINS BUGS:///////////////////////////////////////////////////////////////////////
|
||||
@@ -291,8 +292,9 @@
|
||||
/////////////////////////////
|
||||
/datum/game_mode/revolution/proc/check_heads_victory()
|
||||
for(var/datum/mind/rev_mind in head_revolutionaries)
|
||||
if(rev_mind && rev_mind.current && rev_mind.current.stat != 2)
|
||||
return 0
|
||||
if((rev_mind) && (rev_mind.current) && ((rev_mind.current.stat != 2) || (rev_mind.current.z != 1)))
|
||||
if(ishuman(rev_mind.current))
|
||||
return 0
|
||||
return 1
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
@@ -311,7 +313,12 @@
|
||||
var/list/names = new
|
||||
for(var/datum/mind/i in head_revolutionaries)
|
||||
if(i.current)
|
||||
names += i.current.real_name + ((i.current.stat==2)?" (Dead)":"")
|
||||
var/hstatus = ""
|
||||
if(i.current.stat == 2)
|
||||
hstatus = " Dead"
|
||||
else if(i.current.z != 1)
|
||||
hstatus = " Abandoned the station"
|
||||
names += i.current.real_name + " ([hstatus])"
|
||||
else
|
||||
names += "[i.key] (character destroyed)"
|
||||
world << "<FONT size = 2><B>The head revolutionaries were: </B></FONT>"
|
||||
@@ -325,7 +332,7 @@
|
||||
hstatus = " Dead"
|
||||
else if(i.current.z != 1)
|
||||
hstatus = " Abandoned the station"
|
||||
names += i.current.real_name + " [hstatus]"
|
||||
names += i.current.real_name + " ([hstatus])"
|
||||
else
|
||||
names += "[i.key] (character destroyed)"
|
||||
if (revolutionaries.len!=0)
|
||||
@@ -350,7 +357,7 @@
|
||||
hstatus = " Dead"
|
||||
else if(i.current.z != 1)
|
||||
hstatus = " Abandoned the station"
|
||||
names += i.current.real_name + " [hstatus]" + ((i in targets)?"(target)":"")
|
||||
names += i.current.real_name + " ([hstatus])" + ((i in targets)?"(target)":"")
|
||||
else
|
||||
names += "[i.key] (character destroyed)" + ((i in targets)?"(target)":"")
|
||||
if (heads.len!=0)
|
||||
|
||||
@@ -748,9 +748,7 @@ Auto Patrol: []"},
|
||||
/obj/machinery/bot/ed209/emp_act(severity)
|
||||
if (cam)
|
||||
cam.emp_act(severity)
|
||||
if (severity > 2)
|
||||
..(severity-1)
|
||||
else if (severity==2 && prob(70))
|
||||
if(severity==2 && prob(70))
|
||||
..(severity-1)
|
||||
else
|
||||
var/obj/overlay/pulse2 = new/obj/overlay ( src.loc )
|
||||
@@ -766,22 +764,23 @@ Auto Patrol: []"},
|
||||
if (C.stat==2)
|
||||
continue
|
||||
targets += C
|
||||
if (prob(50))
|
||||
var/mob/toshoot = pick(targets)
|
||||
if (toshoot)
|
||||
targets-=toshoot
|
||||
if (prob(50) && !emagged)
|
||||
emagged = 1
|
||||
shootAt(toshoot)
|
||||
emagged = 0
|
||||
else
|
||||
shootAt(toshoot)
|
||||
if (/*prob(50)*/ 1 )
|
||||
var/mob/toarrest = pick(targets)
|
||||
if (toarrest)
|
||||
//targets-=toarrest
|
||||
src.target = toarrest
|
||||
src.mode = SECBOT_HUNT
|
||||
if(targets.len)
|
||||
if(prob(50))
|
||||
var/mob/toshoot = pick(targets)
|
||||
if (toshoot)
|
||||
targets-=toshoot
|
||||
if (prob(50) && !emagged)
|
||||
emagged = 1
|
||||
shootAt(toshoot)
|
||||
emagged = 0
|
||||
else
|
||||
shootAt(toshoot)
|
||||
else if(prob(50))
|
||||
if(targets.len)
|
||||
var/mob/toarrest = pick(targets)
|
||||
if (toarrest)
|
||||
src.target = toarrest
|
||||
src.mode = SECBOT_HUNT
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,10 +1,39 @@
|
||||
// The communications computer
|
||||
/obj/machinery/computer/communications
|
||||
name = "Communications Console"
|
||||
desc = "This can be used for various important functions. Still under developement."
|
||||
icon_state = "comm"
|
||||
req_access = list(access_heads)
|
||||
circuit = "/obj/item/weapon/circuitboard/communications"
|
||||
var/prints_intercept = 1
|
||||
var/authenticated = 0
|
||||
var/list/messagetitle = list()
|
||||
var/list/messagetext = list()
|
||||
var/currmsg = 0
|
||||
var/aicurrmsg = 0
|
||||
var/state = STATE_DEFAULT
|
||||
var/aistate = STATE_DEFAULT
|
||||
var/message_cooldown = 0
|
||||
var/const
|
||||
STATE_DEFAULT = 1
|
||||
STATE_CALLSHUTTLE = 2
|
||||
STATE_CANCELSHUTTLE = 3
|
||||
STATE_MESSAGELIST = 4
|
||||
STATE_VIEWMESSAGE = 5
|
||||
STATE_DELMESSAGE = 6
|
||||
STATE_STATUSDISPLAY = 7
|
||||
|
||||
var/status_display_freq = "1435"
|
||||
var/stat_msg1
|
||||
var/stat_msg2
|
||||
|
||||
|
||||
/obj/machinery/computer/communications/process()
|
||||
..()
|
||||
if(state != STATE_STATUSDISPLAY)
|
||||
src.updateDialog()
|
||||
|
||||
|
||||
/obj/machinery/computer/communications/Topic(href, href_list)
|
||||
if(..())
|
||||
return
|
||||
@@ -29,19 +58,20 @@
|
||||
authenticated = 2
|
||||
if("logout")
|
||||
authenticated = 0
|
||||
if("nolockdown")
|
||||
disablelockdown(usr)
|
||||
post_status("alert", "default")
|
||||
|
||||
if("announce")
|
||||
if(src.authenticated==2)
|
||||
if(message_cooldown) return
|
||||
var/input = input(usr, "Please choose a message to announce to the station crew.", "What?", "")
|
||||
if(!input)
|
||||
return
|
||||
captain_announce(input)
|
||||
captain_announce(input)//This should really tell who is, IE HoP, CE, HoS, RD, Captain
|
||||
log_say("[key_name(usr)] has made a captain announcement: [input]")
|
||||
message_admins("[key_name_admin(usr)] has made a captain announcement.", 1)
|
||||
if("call-prison")
|
||||
call_prison_shuttle(usr)
|
||||
message_cooldown = 1
|
||||
spawn(600)//One minute cooldown
|
||||
message_cooldown = 0
|
||||
|
||||
if("callshuttle")
|
||||
src.state = STATE_DEFAULT
|
||||
if(src.authenticated)
|
||||
@@ -49,10 +79,8 @@
|
||||
if("callshuttle2")
|
||||
if(src.authenticated)
|
||||
call_shuttle_proc(usr)
|
||||
|
||||
if(emergency_shuttle.online)
|
||||
post_status("shuttle")
|
||||
|
||||
src.state = STATE_DEFAULT
|
||||
if("cancelshuttle")
|
||||
src.state = STATE_DEFAULT
|
||||
@@ -142,26 +170,15 @@
|
||||
src.aistate = STATE_STATUSDISPLAY
|
||||
src.updateUsrDialog()
|
||||
|
||||
/proc/disablelockdown(var/mob/usr)
|
||||
world << "\red Lockdown cancelled by [usr.name]!"
|
||||
|
||||
for(var/obj/machinery/firealarm/FA in world) //deactivate firealarms
|
||||
spawn( 0 )
|
||||
if(FA.lockdownbyai == 1)
|
||||
FA.lockdownbyai = 0
|
||||
FA.reset()
|
||||
for(var/obj/machinery/door/airlock/AL in world) //open airlocks
|
||||
spawn ( 0 )
|
||||
if(AL.canAIControl() && AL.lockdownbyai == 1)
|
||||
AL.open()
|
||||
AL.lockdownbyai = 0
|
||||
|
||||
/obj/machinery/computer/communications/attack_ai(var/mob/user as mob)
|
||||
return src.attack_hand(user)
|
||||
|
||||
|
||||
/obj/machinery/computer/communications/attack_paw(var/mob/user as mob)
|
||||
return src.attack_hand(user)
|
||||
|
||||
|
||||
/obj/machinery/computer/communications/attack_hand(var/mob/user as mob)
|
||||
if(..())
|
||||
return
|
||||
@@ -184,8 +201,6 @@
|
||||
if(STATE_DEFAULT)
|
||||
if (src.authenticated)
|
||||
dat += "<BR>\[ <A HREF='?src=\ref[src];operation=logout'>Log Out</A> \]"
|
||||
dat += "<BR>\[ <A HREF='?src=\ref[src];operation=call-prison'>Send Prison Shutle</A> \]"
|
||||
dat += "<BR>\[ <A HREF='?src=\ref[src];operation=nolockdown'>Disable Lockdown</A> \]"
|
||||
if (src.authenticated==2)
|
||||
dat += "<BR>\[ <A HREF='?src=\ref[src];operation=announce'>Make An Announcement</A> \]"
|
||||
if(emergency_shuttle.location==0)
|
||||
@@ -245,9 +260,7 @@
|
||||
if(STATE_DEFAULT)
|
||||
if(emergency_shuttle.location==0 && !emergency_shuttle.online)
|
||||
dat += "<BR>\[ <A HREF='?src=\ref[src];operation=ai-callshuttle'>Call Emergency Shuttle</A> \]"
|
||||
dat += "<BR>\[ <A HREF='?src=\ref[src];operation=call-prison'>Send Prison Shutle</A> \]"
|
||||
dat += "<BR>\[ <A HREF='?src=\ref[src];operation=ai-messagelist'>Message List</A> \]"
|
||||
dat += "<BR>\[ <A HREF='?src=\ref[src];operation=nolockdown'>Disable Lockdown</A> \]"
|
||||
dat += "<BR>\[ <A HREF='?src=\ref[src];operation=ai-status'>Set Status Display</A> \]"
|
||||
if(STATE_CALLSHUTTLE)
|
||||
dat += "Are you sure you want to call the shuttle? \[ <A HREF='?src=\ref[src];operation=ai-callshuttle2'>OK</A> | <A HREF='?src=\ref[src];operation=ai-main'>Cancel</A> \]"
|
||||
@@ -303,53 +316,6 @@
|
||||
|
||||
return
|
||||
|
||||
/proc/call_prison_shuttle(var/mob/usr)
|
||||
if ((!( ticker ) || emergency_shuttle.location == 1))
|
||||
return
|
||||
if(ticker.mode.name == "blob" || ticker.mode.name == "Corporate Restructuring" || ticker.mode.name == "sandbox")
|
||||
usr << "Under directive 7-10, [station_name()] is quarantined until further notice."
|
||||
return
|
||||
if(ticker.mode.name == "revolution")
|
||||
usr << "Centcom will not allow the shuttle to be called, due to the possibility of sabotage by revolutionaries."
|
||||
return
|
||||
if(ticker.mode.name == "AI malfunction")
|
||||
usr << "Centcom will not allow the shuttle to be called."
|
||||
return
|
||||
for(var/obj/machinery/computer/prison_shuttle/PS in world)
|
||||
if(!PS.allowedtocall)
|
||||
usr << "\red Centcom will not allow the shuttle to be called"
|
||||
return
|
||||
if(PS.z == 3)
|
||||
usr << "\red Already in transit! Please wait!"
|
||||
return
|
||||
var/A = locate(/area/shuttle/prison/)
|
||||
for(var/mob/M in A)
|
||||
M.show_message("\red Launch sequence initiated!")
|
||||
spawn(0) shake_camera(M, 10, 1)
|
||||
sleep(10)
|
||||
|
||||
if(PS.z == 2) //This is the laziest proc ever
|
||||
for(var/atom/movable/AM as mob|obj in A)
|
||||
AM.z = 3
|
||||
AM.Move()
|
||||
sleep(rand(600,1800))
|
||||
for(var/atom/movable/AM as mob|obj in A)
|
||||
AM.z = 1
|
||||
AM.Move()
|
||||
else
|
||||
for(var/atom/movable/AM as mob|obj in A)
|
||||
AM.z = 3
|
||||
AM.Move()
|
||||
sleep(rand(600,1800))
|
||||
for(var/atom/movable/AM as mob|obj in A)
|
||||
AM.z = 2
|
||||
AM.Move()
|
||||
for(var/mob/M in A)
|
||||
M.show_message("\red Prison shuttle has arrived at destination!")
|
||||
return
|
||||
return
|
||||
|
||||
|
||||
/proc/enable_prison_shuttle(var/mob/user)
|
||||
for(var/obj/machinery/computer/prison_shuttle/PS in world)
|
||||
PS.allowedtocall = !(PS.allowedtocall)
|
||||
@@ -358,39 +324,27 @@
|
||||
if ((!( ticker ) || emergency_shuttle.location))
|
||||
return
|
||||
|
||||
if(sent_strike_team == 1)
|
||||
user << "Centcom will not allow the shuttle to be called. Consider all contracts terminated."
|
||||
return
|
||||
|
||||
if(world.time < 6000) // Ten minute grace period to let the game get going without lolmetagaming. -- TLE
|
||||
if(sent_strike_team == 1)
|
||||
user << "Centcom will not allow the shuttle to be called. Consider all contracts terminated."
|
||||
return
|
||||
else
|
||||
user << "The emergency shuttle is refueling. Please wait another [(6000-world.time)/10] seconds before trying again."
|
||||
return
|
||||
user << "The emergency shuttle is refueling. Please wait another [(6000-world.time)/10] seconds before trying again."
|
||||
return
|
||||
|
||||
if(emergency_shuttle.direction == -1)
|
||||
user << "Shuttle may not be called while returning to CentCom."
|
||||
return
|
||||
|
||||
if(ticker.mode.name == "revolution" || ticker.mode.name == "AI malfunction" || ticker.mode.name == "confliction")
|
||||
//user << "Centcom will not allow the shuttle to be called." //Old code
|
||||
//if(sent_strike_team == 1)
|
||||
// user << "Consider all contracts terminated."
|
||||
//return
|
||||
|
||||
if(sent_strike_team == 1)
|
||||
user << "Centcom will not allow the shuttle to be called. Consider all contracts terminated."
|
||||
return
|
||||
if(ticker.mode.name == "revolution" || ticker.mode.name == "AI malfunction" || ticker.mode.name == "sandbox")
|
||||
//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(sent_strike_team == 1)
|
||||
if(ticker.mode.name != "revolution" || ticker.mode.name != "AI malfunction")
|
||||
user << "Centcom will not allow the shuttle to be called. Consider all contracts terminated."
|
||||
if(ticker.mode.name == "blob")
|
||||
if(ticker.mode:declared)
|
||||
user << "Under directive 7-10, [station_name()] is quarantined until further notice."
|
||||
return
|
||||
|
||||
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.")
|
||||
message_admins("[key_name_admin(user)] has called the shuttle.", 1)
|
||||
@@ -399,6 +353,7 @@
|
||||
|
||||
return
|
||||
|
||||
|
||||
/proc/cancel_call_proc(var/mob/user)
|
||||
if ((!( ticker ) || emergency_shuttle.location || emergency_shuttle.direction == 0 || emergency_shuttle.timeleft() < 300))
|
||||
return
|
||||
@@ -417,8 +372,6 @@
|
||||
|
||||
if(!frequency) return
|
||||
|
||||
|
||||
|
||||
var/datum/signal/status_signal = new
|
||||
status_signal.source = src
|
||||
status_signal.transmission_method = 1
|
||||
@@ -434,24 +387,6 @@
|
||||
frequency.post_signal(src, status_signal)
|
||||
|
||||
|
||||
|
||||
/*
|
||||
receive_signal(datum/signal/signal)
|
||||
|
||||
switch(signal.data["command"])
|
||||
if("blank")
|
||||
mode = 0
|
||||
|
||||
if("shuttle")
|
||||
mode = 1
|
||||
|
||||
if("message")
|
||||
set_message(signal.data["msg1"], signal.data["msg2"])
|
||||
|
||||
if("alert")
|
||||
set_picture(signal.data["picture_state"])
|
||||
*/
|
||||
|
||||
/obj/machinery/computer/communications/Del()
|
||||
|
||||
for(var/obj/machinery/computer/communications/commconsole in world)
|
||||
|
||||
@@ -409,12 +409,13 @@ var/list/sacrificed = list()
|
||||
while(this_rune && user && user.stat==0 && user.client && user.loc==this_rune.loc)
|
||||
user.take_organ_damage(1, 0)
|
||||
sleep(30)
|
||||
D.visible_message("\red [D] slowly dissipates into dust and bones.", \
|
||||
"\red You feel pain, as bonds formed between your soul and this homunculus break.", \
|
||||
"\red You hear faint rustle.")
|
||||
ghost.invisibility = 10
|
||||
ghost.key = D.key
|
||||
D.dust(1)
|
||||
if(D)
|
||||
D.visible_message("\red [D] slowly dissipates into dust and bones.", \
|
||||
"\red You feel pain, as bonds formed between your soul and this homunculus break.", \
|
||||
"\red You hear faint rustle.")
|
||||
ghost.invisibility = 10
|
||||
ghost.key = D.key
|
||||
D.dust(1)
|
||||
return
|
||||
|
||||
|
||||
|
||||
@@ -45,7 +45,7 @@
|
||||
M.weakened = 10
|
||||
flick("e_flash", M.flash)
|
||||
|
||||
if(ishuman(M))
|
||||
if(ishuman(M) && ishuman(user))
|
||||
if(user.mind in ticker.mode.head_revolutionaries)
|
||||
var/revsafe = 0
|
||||
for(var/obj/item/weapon/implant/loyalty/L in M)
|
||||
|
||||
@@ -260,9 +260,10 @@
|
||||
Metroid.Discipline++
|
||||
|
||||
spawn()
|
||||
Metroid.SStun = 1
|
||||
sleep(rand(5,20))
|
||||
Metroid.SStun = 0
|
||||
if(Metroid)
|
||||
Metroid.SStun = 1
|
||||
sleep(rand(5,20))
|
||||
Metroid.SStun = 0
|
||||
|
||||
spawn(0)
|
||||
Metroid.canmove = 0
|
||||
|
||||
@@ -1257,20 +1257,8 @@
|
||||
spawn(rand(300,600))
|
||||
del(P)
|
||||
if("goblob")
|
||||
command_alert("Confirmed anomaly type SPC-MGM-152 aboard [station_name()]. All personnel must destroy the anomaly.", "Anomaly Alert")
|
||||
world << sound('outbreak5.ogg')
|
||||
var/turf/T = pick(blobstart)
|
||||
var/obj/blob/bl = new /obj/blob( T.loc, 30 )
|
||||
spawn(0)
|
||||
bl.Life()
|
||||
bl.Life()
|
||||
bl.Life()
|
||||
bl.Life()
|
||||
bl.Life()
|
||||
blobevent = 1
|
||||
dotheblobbaby()
|
||||
spawn(3000)
|
||||
blobevent = 0
|
||||
mini_blob_event()
|
||||
message_admins("[key_name_admin(usr)] has spawned blob", 1)
|
||||
if("aliens")
|
||||
if(aliens_allowed)
|
||||
alien_infestation()
|
||||
|
||||
@@ -40,8 +40,7 @@ var/mining_shuttle_moving = 0
|
||||
var/mining_shuttle_location = 0 // 0 = station 13, 1 = mining station
|
||||
|
||||
proc/move_mining_shuttle()
|
||||
if (mining_shuttle_moving)
|
||||
return
|
||||
if(mining_shuttle_moving) return
|
||||
mining_shuttle_moving = 1
|
||||
spawn(mining_shuttle_tickstomove*10)
|
||||
var/area/fromArea
|
||||
@@ -80,6 +79,11 @@ proc/move_mining_shuttle()
|
||||
usr.machine = src
|
||||
src.add_fingerprint(usr)
|
||||
if(href_list["move"])
|
||||
if(ticker.mode.name == "blob")
|
||||
if(ticker.mode:declared)
|
||||
usr << "Under directive 7-10, [station_name()] is quarantined until further notice."
|
||||
return
|
||||
|
||||
if (!mining_shuttle_moving)
|
||||
usr << "\blue shuttle called and will arrive shortly"
|
||||
move_mining_shuttle()
|
||||
|
||||
@@ -60,13 +60,17 @@
|
||||
spawn(0)
|
||||
ainame(src)
|
||||
|
||||
if(src.mind)
|
||||
ticker.mode.remove_revolutionary(src.mind)
|
||||
return
|
||||
|
||||
|
||||
/mob/living/silicon/ai/verb/pick_icon()
|
||||
set category = "AI Commands"
|
||||
set name = "Change AI Core Display"
|
||||
if(stat || aiRestorePowerRoutine)
|
||||
return
|
||||
|
||||
|
||||
//if(icon_state == initial(icon_state))
|
||||
var/icontype = input("Please, select a display!", "AI", null/*, null*/) in list("Clown", "HAL9000", "Monochrome", "Blue", "HAL9000 Mark2", "Inverted", "Firewall", "Green")
|
||||
if(icontype == "Clown")
|
||||
|
||||
@@ -35,6 +35,8 @@
|
||||
var/obj/item/weapon/cell/C = new(src)
|
||||
C.charge = 1500
|
||||
cell = C
|
||||
if(src.mind)
|
||||
ticker.mode.remove_revolutionary(src.mind)
|
||||
..()
|
||||
|
||||
//If there's an MMI in the robot, have it ejected when the mob goes away. --NEO
|
||||
|
||||
@@ -2245,8 +2245,10 @@ note dizziness decrements automatically in the mob's Life() proc.
|
||||
if("nuclear emergency")
|
||||
if (!derp) boom.icon_state = "loss_nuke"
|
||||
else boom.icon_state = "loss_nuke2"
|
||||
if("AI malfunction")
|
||||
if("malfunction")
|
||||
boom.icon_state = "loss_malf"
|
||||
if("blob")
|
||||
return//Nothin here yet and the general one does not fit.
|
||||
else
|
||||
boom.icon_state = "loss_general"
|
||||
#elif
|
||||
|
||||
+1839
-1839
File diff suppressed because it is too large
Load Diff
@@ -354,6 +354,7 @@
|
||||
#include "code\game\gamemodes\cult\cult_items.dm"
|
||||
#include "code\game\gamemodes\events\clang.dm"
|
||||
#include "code\game\gamemodes\events\dust.dm"
|
||||
#include "code\game\gamemodes\events\miniblob.dm"
|
||||
#include "code\game\gamemodes\events\ninja_abilities.dm"
|
||||
#include "code\game\gamemodes\events\ninja_equipment.dm"
|
||||
#include "code\game\gamemodes\events\space_ninja.dm"
|
||||
|
||||
Reference in New Issue
Block a user