mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-23 12:07:27 +01:00
Merge branch 'master' of https://github.com/ParadiseSS13/Paradise into DWI
This commit is contained in:
+31
-1
@@ -1,6 +1,32 @@
|
||||
|
||||
// Linkage flags
|
||||
#define CROSSLINKED 2
|
||||
#define SELFLOOPING 1
|
||||
#define UNAFFECTED 0
|
||||
// Attributes (In text for the convenience of those using VV)
|
||||
#define BLOCK_TELEPORT "Blocks Teleport"
|
||||
// Impedes with the casting of some spells
|
||||
#define IMPEDES_MAGIC "Impedes Magic"
|
||||
// A level the station exists on
|
||||
#define STATION_LEVEL "Station Level"
|
||||
// A level affected by Code Red announcements, cargo telepads, or similar
|
||||
#define STATION_CONTACT "Station Contact"
|
||||
// A level dedicated to admin use
|
||||
#define ADMIN_LEVEL "Admin Level"
|
||||
// A level that can be navigated to through space
|
||||
#define REACHABLE "Reachable"
|
||||
// For away missions - used by some consoles
|
||||
#define AWAY_LEVEL "Away"
|
||||
// Allows weather
|
||||
#define HAS_WEATHER "Weather"
|
||||
// Enhances telecomms signals
|
||||
#define BOOSTS_SIGNAL "Boosts signals"
|
||||
// Currently used for determining mining score
|
||||
#define ORE_LEVEL "Mining"
|
||||
// Levels the AI can control bots on
|
||||
#define AI_OK "AI Allowed"
|
||||
|
||||
// Level names
|
||||
#define MAIN_STATION "Main Station"
|
||||
#define CENTCOMM "CentComm"
|
||||
#define TELECOMMS "Telecomms Satellite"
|
||||
@@ -10,4 +36,8 @@
|
||||
#define EMPTY_AREA "Empty Area"
|
||||
#define EMPTY_AREA_2 "Empty Area 2"
|
||||
#define AWAY_MISSION "Away Mission"
|
||||
#define AWAY_MISSION_LIST list(AWAY_MISSION = UNAFFECTED)
|
||||
|
||||
// Convenience define
|
||||
#define DECLARE_LEVEL(NAME,LINKS,TRAITS) list("name" = NAME, "linkage" = LINKS, "attributes" = TRAITS)
|
||||
|
||||
#define AWAY_MISSION_LIST list(DECLARE_LEVEL(AWAY_MISSION,UNAFFECTED,list(BLOCK_TELEPORT, AWAY_LEVEL)))
|
||||
|
||||
+8
-1
@@ -24,7 +24,14 @@ z7 = empty
|
||||
|
||||
#define MAP_FILE "cyberiad.dmm"
|
||||
#define MAP_NAME "NSS Cyberiad"
|
||||
#define MAP_TRANSITION_CONFIG list(MAIN_STATION = CROSSLINKED, CENTCOMM = SELFLOOPING, TELECOMMS = CROSSLINKED, CONSTRUCTION = CROSSLINKED, MINING = CROSSLINKED, DERELICT = CROSSLINKED, EMPTY_AREA = CROSSLINKED)
|
||||
#define MAP_TRANSITION_CONFIG list(\
|
||||
DECLARE_LEVEL(MAIN_STATION, CROSSLINKED, list(STATION_LEVEL,STATION_CONTACT,REACHABLE,AI_OK)),\
|
||||
DECLARE_LEVEL(CENTCOMM, SELFLOOPING, list(ADMIN_LEVEL, BLOCK_TELEPORT, IMPEDES_MAGIC)),\
|
||||
DECLARE_LEVEL(TELECOMMS, CROSSLINKED, list(REACHABLE, BOOSTS_SIGNAL, AI_OK)),\
|
||||
DECLARE_LEVEL(CONSTRUCTION, CROSSLINKED, list(REACHABLE)),\
|
||||
DECLARE_LEVEL(MINING, CROSSLINKED, list(REACHABLE, STATION_CONTACT, HAS_WEATHER, ORE_LEVEL, AI_OK)),\
|
||||
DECLARE_LEVEL(DERELICT, CROSSLINKED, list(REACHABLE)),\
|
||||
DECLARE_LEVEL(EMPTY_AREA, CROSSLINKED, list(REACHABLE)))
|
||||
|
||||
#elif !defined(MAP_OVERRIDE)
|
||||
|
||||
|
||||
@@ -797,7 +797,7 @@
|
||||
"apq" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "security_airlock"; name = "exterior access button"; pixel_x = -20; pixel_y = -20; req_access_txt = "13"},/turf/simulated/floor/plating/airless,/area/space)
|
||||
"apr" = (/obj/effect/decal/warning_stripes/east,/turf/simulated/floor/engine/vacuum,/area/escapepodbay)
|
||||
"aps" = (/turf/space,/turf/simulated/shuttle/wall{dir = 8; icon_state = "diagonalWall3"},/area/shuttle/syndicate_elite)
|
||||
"apt" = (/obj/machinery/door/airlock/shuttle{id_tag = "s_docking_airlock"; name = "Labor Shuttle Airlock"; req_access_txt = "2"},/obj/docking_port/mobile{dir = 8; dwidth = 2; height = 5; id = "laborcamp"; name = "labor camp shuttle"; rebuildable = 1; width = 9},/obj/docking_port/stationary{dir = 8; dwidth = 2; height = 5; id = "laborcamp_home"; name = "fore bay 1"; width = 9},/turf/simulated/shuttle/floor,/area/shuttle/siberia)
|
||||
"apt" = (/obj/machinery/door/airlock/shuttle{id_tag = "s_docking_airlock"; name = "Labor Shuttle Airlock"; req_access_txt = "0"},/obj/docking_port/mobile{dir = 8; dwidth = 2; height = 5; id = "laborcamp"; name = "labor camp shuttle"; rebuildable = 1; width = 9},/obj/docking_port/stationary{dir = 8; dwidth = 2; height = 5; id = "laborcamp_home"; name = "fore bay 1"; width = 9},/turf/simulated/shuttle/floor,/area/shuttle/siberia)
|
||||
"apu" = (/obj/machinery/light,/turf/simulated/floor/plating,/area/security/prisonershuttle)
|
||||
"apv" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1; level = 1},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/door_timer/cell_1{dir = 4; layer = 4; pixel_x = 32; pixel_y = 0},/turf/simulated/floor/plasteel,/area/security/prison/cell_block/A)
|
||||
"apw" = (/turf/simulated/wall/r_wall,/area/security/prisonershuttle)
|
||||
@@ -2043,7 +2043,7 @@
|
||||
"aNo" = (/obj/machinery/camera{c_tag = "Arrivals East"; dir = 8; network = list("SS13")},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plasteel{dir = 4; icon_state = "arrival"},/area/hallway/secondary/entry)
|
||||
"aNp" = (/obj/structure/closet/secure_closet/security,/obj/machinery/light{dir = 1},/obj/machinery/firealarm{dir = 2; pixel_y = 24},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 9},/area/security/checkpoint2)
|
||||
"aNq" = (/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/checkpoint2)
|
||||
"aNr" = (/obj/machinery/computer/security,/obj/structure/reagent_dispensers/peppertank{pixel_x = 0; pixel_y = 30},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/checkpoint2)
|
||||
"aNr" = (/obj/structure/reagent_dispensers/peppertank{pixel_x = 0; pixel_y = 30},/obj/machinery/computer/security{network = list("SS13","Research Outpost","Mining Outpost")},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/checkpoint2)
|
||||
"aNs" = (/obj/machinery/computer/card,/obj/item/device/radio/intercom{dir = 1; name = "station intercom (General)"; pixel_y = 25},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/checkpoint2)
|
||||
"aNt" = (/obj/machinery/computer/secure_data,/obj/machinery/requests_console{department = "Security"; name = "Security Requests Console"; departmentType = 5; pixel_y = 30},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/checkpoint2)
|
||||
"aNu" = (/obj/machinery/light_switch{pixel_x = 27},/obj/machinery/light{dir = 1},/obj/machinery/atmospherics/unary/vent_scrubber{on = 1},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 5},/area/security/checkpoint2)
|
||||
@@ -3124,7 +3124,7 @@
|
||||
"bid" = (/obj/machinery/vending/coffee,/turf/simulated/floor/plasteel{dir = 8; icon_state = "escape"},/area/hallway/secondary/exit)
|
||||
"bie" = (/turf/simulated/shuttle/wall{icon_state = "swallc3"},/area/shuttle/escape)
|
||||
"bif" = (/obj/machinery/computer/emergency_shuttle,/turf/simulated/shuttle/floor,/area/shuttle/escape)
|
||||
"big" = (/obj/machinery/computer/security{network = list("SS13","Telecomms","Research Outpost","Mining Outpost")},/turf/simulated/shuttle/floor,/area/shuttle/escape)
|
||||
"big" = (/obj/machinery/computer/security{network = list("SS13","Research Outpost","Mining Outpost","Telecomms")},/turf/simulated/shuttle/floor,/area/shuttle/escape)
|
||||
"bih" = (/obj/machinery/computer/communications,/turf/simulated/shuttle/floor,/area/shuttle/escape)
|
||||
"bii" = (/turf/simulated/floor/plating,/area/hallway/secondary/exit)
|
||||
"bij" = (/obj/structure/stool/bed/chair/comfy/black{dir = 1},/turf/simulated/shuttle/floor,/area/shuttle/escape)
|
||||
|
||||
@@ -969,9 +969,9 @@
|
||||
"sG" = (/turf/simulated/wall,/area/mine/laborcamp/security)
|
||||
"sH" = (/obj/structure/girder,/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/plasteel{icon_state = "asteroidfloor"},/area/mine/laborcamp)
|
||||
"sI" = (/obj/docking_port/stationary{dir = 8; dwidth = 2; height = 5; id = "laborcamp_away"; name = "labor camp"; width = 9},/turf/space,/area/space)
|
||||
"sJ" = (/obj/machinery/door/airlock/external{id_tag = "laborcamp_away"; name = "Labor Camp Airlock"; req_access_txt = "2"},/turf/simulated/floor/plasteel,/area/mine/laborcamp/security)
|
||||
"sJ" = (/obj/machinery/door/airlock/external{id_tag = "laborcamp_away"; name = "Labor Camp Airlock"; req_access_txt = "0"},/turf/simulated/floor/plasteel,/area/mine/laborcamp/security)
|
||||
"sK" = (/obj/machinery/light/small,/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/mine/laborcamp/security)
|
||||
"sL" = (/obj/machinery/door/airlock/external{id_tag = "laborcamp_away"; name = "Labor Camp Airlock"; req_access_txt = "2"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/mine/laborcamp/security)
|
||||
"sL" = (/obj/machinery/door/airlock/external{id_tag = "laborcamp_away"; name = "Labor Camp Airlock"; req_access_txt = "0"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/mine/laborcamp/security)
|
||||
"sM" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/mine/laborcamp/security)
|
||||
"sN" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/mine/laborcamp/security)
|
||||
"sO" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 6},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/mine/laborcamp/security)
|
||||
|
||||
@@ -25,7 +25,14 @@ z7 = empty space
|
||||
|
||||
#define MAP_FILE "MetaStation.v41A.II.dmm"
|
||||
#define MAP_NAME "MetaStation"
|
||||
#define MAP_TRANSITION_CONFIG list(MAIN_STATION = CROSSLINKED, CENTCOMM = SELFLOOPING, TELECOMMS = CROSSLINKED, DERELICT = CROSSLINKED, MINING = CROSSLINKED, EMPTY_AREA = CROSSLINKED, EMPTY_AREA_2 = CROSSLINKED)
|
||||
#define MAP_TRANSITION_CONFIG list(\
|
||||
DECLARE_LEVEL(MAIN_STATION, CROSSLINKED, list(STATION_LEVEL, STATION_CONTACT, REACHABLE, AI_OK)),\
|
||||
DECLARE_LEVEL(CENTCOMM, SELFLOOPING, list(ADMIN_LEVEL, BLOCK_TELEPORT, IMPEDES_MAGIC)),\
|
||||
DECLARE_LEVEL(TELECOMMS, CROSSLINKED, list(REACHABLE, BOOSTS_SIGNAL, AI_OK)),\
|
||||
DECLARE_LEVEL(DERELICT, CROSSLINKED, list(REACHABLE)),\
|
||||
DECLARE_LEVEL(MINING, CROSSLINKED, list(REACHABLE, STATION_CONTACT, AI_OK, ORE_LEVEL, HAS_WEATHER)),\
|
||||
DECLARE_LEVEL(EMPTY_AREA, CROSSLINKED, list(REACHABLE)),\
|
||||
DECLARE_LEVEL(EMPTY_AREA_2, CROSSLINKED, list(REACHABLE)))
|
||||
|
||||
#elif !defined(MAP_OVERRIDE)
|
||||
|
||||
|
||||
@@ -251,6 +251,7 @@
|
||||
var/atmos_overlay = get_atmos_overlay_by_name(atmos_overlay_type)
|
||||
if(atmos_overlay)
|
||||
overlays -= atmos_overlay
|
||||
mouse_opacity = 1
|
||||
|
||||
atmos_overlay = get_atmos_overlay_by_name(new_overlay_type)
|
||||
if(atmos_overlay)
|
||||
@@ -267,10 +268,12 @@
|
||||
|
||||
/turf/simulated/proc/tile_graphic()
|
||||
if(air.toxins > MOLES_PLASMA_VISIBLE)
|
||||
mouse_opacity = 0
|
||||
return "plasma"
|
||||
|
||||
var/datum/gas/sleeping_agent = locate(/datum/gas/sleeping_agent) in air.trace_gases
|
||||
if(sleeping_agent && (sleeping_agent.moles > 1))
|
||||
mouse_opacity = 0
|
||||
return "sleeping_agent"
|
||||
return null
|
||||
|
||||
@@ -492,4 +495,4 @@ turf/simulated/proc/radiate_to_spess() //Radiate excess tile heat to space
|
||||
|
||||
var/heat = thermal_conductivity*delta_temperature* \
|
||||
(heat_capacity*700000/(heat_capacity+700000)) //700000 is the heat_capacity from a space turf, hardcoded here
|
||||
temperature -= heat/heat_capacity
|
||||
temperature -= heat/heat_capacity
|
||||
|
||||
@@ -0,0 +1,50 @@
|
||||
//objective defines
|
||||
#define TARGET_INVALID_IS_OWNER 1
|
||||
#define TARGET_INVALID_NOT_HUMAN 2
|
||||
#define TARGET_INVALID_DEAD 3
|
||||
|
||||
//gamemode istype helpers
|
||||
#define GAMEMODE_IS_BLOB (ticker && istype(ticker.mode, /datum/game_mode/blob))
|
||||
#define GAMEMODE_IS_CULT (ticker && istype(ticker.mode, /datum/game_mode/cult))
|
||||
#define GAMEMODE_IS_HEIST (ticker && istype(ticker.mode, /datum/game_mode/heist))
|
||||
#define GAMEMODE_IS_MALF (ticker && istype(ticker.mode, /datum/game_mode/malfunction))
|
||||
#define GAMEMODE_IS_NATIONS (ticker && istype(ticker.mode, /datum/game_mode/nations))
|
||||
#define GAMEMODE_IS_NUCLEAR (ticker && istype(ticker.mode, /datum/game_mode/nuclear))
|
||||
#define GAMEMODE_IS_REVOLUTION (ticker && istype(ticker.mode, /datum/game_mode/revolution))
|
||||
|
||||
//special roles
|
||||
// Distinct from the ROLE_X defines because some antags have multiple special roles but only one ban type
|
||||
#define SPECIAL_ROLE_ABDUCTOR_AGENT "Abductor Agent"
|
||||
#define SPECIAL_ROLE_ABDUCTOR_SCIENTIST "Abductor Scientist"
|
||||
#define SPECIAL_ROLE_BLOB "Blob"
|
||||
#define SPECIAL_ROLE_BLOB_OVERMIND "Blob Overmind"
|
||||
#define SPECIAL_ROLE_BORER "Borer"
|
||||
#define SPECIAL_ROLE_CHANGELING "Changeling"
|
||||
#define SPECIAL_ROLE_CULTIST "Cultist"
|
||||
#define SPECIAL_ROLE_DEATHSQUAD "Death Commando"
|
||||
#define SPECIAL_ROLE_ERT "Response Team"
|
||||
#define SPECIAL_ROLE_GOLEM "Golem"
|
||||
#define SPECIAL_ROLE_HEAD_REV "Head Revolutionary"
|
||||
#define SPECIAL_ROLE_HONKSQUAD "Honksquad"
|
||||
#define SPECIAL_ROLE_REV "Revolutionary"
|
||||
#define SPECIAL_ROLE_MALF "Malfunction"
|
||||
#define SPECIAL_ROLE_MORPH "Morph"
|
||||
#define SPECIAL_ROLE_MULTIVERSE "Multiverse Traveller"
|
||||
#define SPECIAL_ROLE_NUKEOPS "Syndicate"
|
||||
#define SPECIAL_ROLE_RAIDER "Vox Raider"
|
||||
#define SPECIAL_ROLE_REVENANT "Revenant"
|
||||
#define SPECIAL_ROLE_SHADOWLING "Shadowling"
|
||||
#define SPECIAL_ROLE_SHADOWLING_THRALL "Shadowling Thrall"
|
||||
#define SPECIAL_ROLE_SLAUGHTER_DEMON "Slaughter Demon"
|
||||
#define SPECIAL_ROLE_SYNDICATE_DEATHSQUAD "Syndicate Commando"
|
||||
#define SPECIAL_ROLE_TRAITOR "Traitor"
|
||||
#define SPECIAL_ROLE_VAMPIRE "Vampire"
|
||||
#define SPECIAL_ROLE_VAMPIRE_THRALL "Vampire Thrall"
|
||||
#define SPECIAL_ROLE_WIZARD "Wizard"
|
||||
#define SPECIAL_ROLE_WIZARD_APPRENTICE "Wizard Apprentice"
|
||||
#define SPECIAL_ROLE_XENOMORPH "Xenomorph"
|
||||
#define SPECIAL_ROLE_XENOMORPH_QUEEN "Xenomorph Queen"
|
||||
#define SPECIAL_ROLE_XENOMORPH_HUNTER "Xenomorph Hunter"
|
||||
#define SPECIAL_ROLE_XENOMORPH_DRONE "Xenomorph Drone"
|
||||
#define SPECIAL_ROLE_XENOMORPH_SENTINEL "Xenomorph Sentinel"
|
||||
#define SPECIAL_ROLE_XENOMORPH_LARVA "Xenomorph Larva"
|
||||
@@ -1,20 +1,5 @@
|
||||
|
||||
|
||||
|
||||
//zlevel defines, can be overriden for different maps in the appropriate _maps file.
|
||||
#define ZLEVEL_STATION 1
|
||||
#define ZLEVEL_CENTCOMM 2
|
||||
#define ZLEVEL_TELECOMMS 3
|
||||
#define ZLEVEL_ENGI 4
|
||||
#define ZLEVEL_ASTEROID 5
|
||||
#define ZLEVEL_DERELICT 6
|
||||
#define ZLEVEL_EMPTY 7
|
||||
#define MAX_Z 7 // Used in space.dm to defince which Z-levels cannot be exited via space.
|
||||
#define TRANSITIONEDGE 7 //Distance from edge to move to another z-level
|
||||
|
||||
///
|
||||
#define ENGINE_EJECT_Z 3
|
||||
|
||||
//Object specific defines
|
||||
#define CANDLE_LUM 3 //For how bright candles are
|
||||
|
||||
|
||||
@@ -15,6 +15,8 @@ var/global/list/crafting_recipes = list() //list of all crafting recipes
|
||||
|
||||
var/global/list/all_areas = list()
|
||||
var/global/list/machines = list()
|
||||
var/global/list/machine_processing = list()
|
||||
var/global/list/fast_processing = list()
|
||||
var/global/list/processing_power_items = list() //items that ask to be called every cycle
|
||||
var/global/list/rcd_list = list() //list of Rapid Construction Devices.
|
||||
|
||||
|
||||
@@ -7,14 +7,6 @@ var/list/cardinal = list( NORTH, SOUTH, EAST, WEST )
|
||||
var/list/alldirs = list(NORTH, SOUTH, EAST, WEST, NORTHEAST, NORTHWEST, SOUTHEAST, SOUTHWEST)
|
||||
var/list/diagonals = list(NORTHEAST, NORTHWEST, SOUTHEAST, SOUTHWEST)
|
||||
|
||||
//This list contains the z-level numbers which can be accessed via space travel and the percentile chances to get there.
|
||||
//(Exceptions: extended, sandbox and nuke) -Errorage
|
||||
//Was list("3" = 30, "4" = 70).
|
||||
//Spacing should be a reliable method of getting rid of a body -- Urist.
|
||||
//Go away Urist, I'm restoring this to the longer list. ~Errorage
|
||||
// TODO: Tie into space manager
|
||||
var/list/accessable_z_levels = list(ZLEVEL_STATION,ZLEVEL_TELECOMMS,ZLEVEL_ENGI,ZLEVEL_ASTEROID,ZLEVEL_DERELICT,ZLEVEL_EMPTY) //Keep this to six maps, repeating z-levels is okay if needed
|
||||
|
||||
var/global/list/global_map = null
|
||||
//list/global_map = list(list(1,5),list(4,3))//an array of map Z levels.
|
||||
//Resulting sector map looks like
|
||||
@@ -26,9 +18,6 @@ var/global/list/global_map = null
|
||||
//3 - AI satellite
|
||||
//5 - empty space
|
||||
|
||||
// TODO: Tie into space manager
|
||||
var/shuttle_z = ZLEVEL_CENTCOMM //default
|
||||
|
||||
var/list/monkeystart = list()
|
||||
var/list/wizardstart = list()
|
||||
var/list/newplayer_start = list()
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
/datum/controller/process/fast_process/setup()
|
||||
name = "fast processing"
|
||||
schedule_interval = 2 //every 0.2 seconds
|
||||
start_delay = 9
|
||||
log_startup_progress("Fast Processing starting up.")
|
||||
|
||||
/datum/controller/process/fast_process/statProcess()
|
||||
..()
|
||||
stat(null, "[fast_processing.len] fast machines")
|
||||
|
||||
/datum/controller/process/fast_process/doWork()
|
||||
for(last_object in fast_processing)
|
||||
var/obj/O = last_object
|
||||
try
|
||||
O.process()
|
||||
catch(var/exception/e)
|
||||
catchException(e, O)
|
||||
@@ -7,7 +7,7 @@
|
||||
|
||||
/datum/controller/process/machinery/statProcess()
|
||||
..()
|
||||
stat(null, "[machines.len] machines")
|
||||
stat(null, "[machine_processing.len] machines")
|
||||
stat(null, "[powernets.len] powernets, [deferred_powernet_rebuilds.len] deferred")
|
||||
|
||||
/datum/controller/process/machinery/doWork()
|
||||
@@ -19,15 +19,15 @@
|
||||
/datum/controller/process/machinery/proc/process_sort()
|
||||
if(machinery_sort_required)
|
||||
machinery_sort_required = 0
|
||||
machines = dd_sortedObjectList(machines)
|
||||
machine_processing = dd_sortedObjectList(machine_processing)
|
||||
|
||||
/datum/controller/process/machinery/proc/process_machines()
|
||||
for(last_object in machines)
|
||||
for(last_object in machine_processing)
|
||||
var/obj/machinery/M = last_object
|
||||
if(istype(M) && isnull(M.gcDestroyed))
|
||||
try
|
||||
if(M.process() == PROCESS_KILL)
|
||||
machines.Remove(M)
|
||||
machine_processing.Remove(M)
|
||||
continue
|
||||
|
||||
if(M.use_power)
|
||||
@@ -36,7 +36,7 @@
|
||||
catchException(e, M)
|
||||
else
|
||||
catchBadType(M)
|
||||
machines -= M
|
||||
machine_processing -= M
|
||||
|
||||
SCHECK_EVERY(100)
|
||||
|
||||
|
||||
@@ -183,8 +183,7 @@ var/const/CALL_SHUTTLE_REASON_LENGTH = 12
|
||||
continue
|
||||
|
||||
var/turf/T = get_turf(thing)
|
||||
// TODO: Tie into space manager
|
||||
if(T && T.z == ZLEVEL_STATION)
|
||||
if(T && is_station_level(T.z))
|
||||
callShuttle = 0
|
||||
break
|
||||
|
||||
@@ -230,8 +229,7 @@ var/const/CALL_SHUTTLE_REASON_LENGTH = 12
|
||||
if(!M.roundstart_move)
|
||||
continue
|
||||
for(var/obj/docking_port/stationary/S in stationary)
|
||||
// TODO: Tie into space manager
|
||||
if(S.z != ZLEVEL_STATION && findtext(S.id, M.id))
|
||||
if(!is_station_level(S.z) && findtext(S.id, M.id))
|
||||
S.width = M.width
|
||||
S.height = M.height
|
||||
S.dwidth = M.dwidth
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// TODO: Tie into space manager
|
||||
//Used for all kinds of weather, ex. lavaland ash storms.
|
||||
// TODO: This could probably be better-integrated with the space manager
|
||||
var/global/datum/controller/process/weather/weather_master
|
||||
|
||||
/datum/controller/process/weather
|
||||
@@ -33,7 +33,7 @@ var/global/datum/controller/process/weather/weather_master
|
||||
var/list/possible_weather_for_this_z = list()
|
||||
for(var/V in existing_weather)
|
||||
var/datum/weather/WE = V
|
||||
if(WE.target_z == Z && WE.probability) //Another check so that it doesn't run extra weather
|
||||
if(WE.target_level == Z && WE.probability) //Another check so that it doesn't run extra weather
|
||||
possible_weather_for_this_z[WE] = WE.probability
|
||||
var/datum/weather/W = pickweight(possible_weather_for_this_z)
|
||||
run_weather(W.name)
|
||||
|
||||
@@ -496,18 +496,6 @@
|
||||
if("max_maint_drones")
|
||||
config.max_maint_drones = text2num(value)
|
||||
|
||||
if("station_levels")
|
||||
config.station_levels = text2numlist(value, ";")
|
||||
|
||||
if("admin_levels")
|
||||
config.admin_levels = text2numlist(value, ";")
|
||||
|
||||
if("contact_levels")
|
||||
config.contact_levels = text2numlist(value, ";")
|
||||
|
||||
if("player_levels")
|
||||
config.player_levels = text2numlist(value, ";")
|
||||
|
||||
if("expected_round_length")
|
||||
config.expected_round_length = MinutesToTicks(text2num(value))
|
||||
|
||||
|
||||
@@ -52,7 +52,7 @@ var/global/pipe_processing_killed = 0
|
||||
if(!config.disable_space_ruins)
|
||||
var/timer = start_watch()
|
||||
log_startup_progress("Creating random space levels...")
|
||||
seedRuins(ZLEVEL_EMPTY, rand(0, 3), /area/space, space_ruins_templates)
|
||||
seedRuins(level_name_to_num(EMPTY_AREA), rand(0, 3), /area/space, space_ruins_templates)
|
||||
log_startup_progress("Loaded random space levels in [stop_watch(timer)]s.")
|
||||
|
||||
// We'll keep this around for the time when we finally expunge all
|
||||
|
||||
Vendored
+1
-2
@@ -15,8 +15,7 @@ var/global/datum/repository/air_alarm/air_alarm_repository = new()
|
||||
alarms[++alarms.len] = passed_alarm.get_nano_data_console()
|
||||
else
|
||||
for(var/obj/machinery/alarm/alarm in (monitored_alarms ? monitored_alarms : air_alarms))
|
||||
// TODO: Tie into space manager
|
||||
if(!monitored_alarms && alarm.z != ZLEVEL_STATION && alarm.z != ZLEVEL_ASTEROID)
|
||||
if(!monitored_alarms && !is_station_contact(alarm.z))
|
||||
continue
|
||||
alarms[++alarms.len] = alarm.get_nano_data_console()
|
||||
|
||||
|
||||
@@ -406,8 +406,7 @@ var/list/advance_cures = list(
|
||||
AD.Refresh()
|
||||
|
||||
for(var/mob/living/carbon/human/H in shuffle(living_mob_list))
|
||||
// TODO: Tie into space manager
|
||||
if(H.z != ZLEVEL_STATION)
|
||||
if(!is_station_level(H.z))
|
||||
continue
|
||||
if(!H.HasDisease(D))
|
||||
H.ForceContractDisease(D)
|
||||
|
||||
+27
-27
@@ -715,7 +715,7 @@
|
||||
return
|
||||
ticker.mode.revolutionaries += src
|
||||
ticker.mode.update_rev_icons_added(src)
|
||||
special_role = "Revolutionary"
|
||||
special_role = SPECIAL_ROLE_REV
|
||||
log_admin("[key_name(usr)] has rev'd [key_name(current)]")
|
||||
message_admins("[key_name_admin(usr)] has rev'd [key_name_admin(current)]")
|
||||
|
||||
@@ -741,7 +741,7 @@
|
||||
ticker.mode.greet_revolutionary(src,0)
|
||||
ticker.mode.head_revolutionaries += src
|
||||
ticker.mode.update_rev_icons_added(src)
|
||||
special_role = "Head Revolutionary"
|
||||
special_role = SPECIAL_ROLE_HEAD_REV
|
||||
log_admin("[key_name(usr)] has head-rev'd [key_name(current)]")
|
||||
message_admins("[key_name_admin(usr)] has head-rev'd [key_name_admin(current)]")
|
||||
|
||||
@@ -801,7 +801,7 @@
|
||||
if("cultist")
|
||||
if(!(src in ticker.mode.cult))
|
||||
ticker.mode.add_cultist(src)
|
||||
special_role = "Cultist"
|
||||
special_role = SPECIAL_ROLE_CULTIST
|
||||
to_chat(current, "<font color=\"purple\"><b><i>You catch a glimpse of the Realm of Nar-Sie, The Geometer of Blood. You now see how flimsy the world is, you see that it should be open to the knowledge of Nar-Sie.</b></i></font>")
|
||||
to_chat(current, "<font color=\"purple\"><b><i>Assist your new compatriots in their dark dealings. Their goal is yours, and yours is theirs. You serve the Dark One above all else. Bring It back.</b></i></font>")
|
||||
log_admin("[key_name(usr)] has culted [key_name(current)]")
|
||||
@@ -849,7 +849,7 @@
|
||||
if("wizard")
|
||||
if(!(src in ticker.mode.wizards))
|
||||
ticker.mode.wizards += src
|
||||
special_role = "Wizard"
|
||||
special_role = SPECIAL_ROLE_WIZARD
|
||||
//ticker.mode.learn_basic_spells(current)
|
||||
ticker.mode.update_wiz_icons_added(src)
|
||||
to_chat(current, "<B>\red You are the Space Wizard!</B>")
|
||||
@@ -892,7 +892,7 @@
|
||||
ticker.mode.changelings += src
|
||||
ticker.mode.grant_changeling_powers(current)
|
||||
ticker.mode.update_change_icons_added(src)
|
||||
special_role = "Changeling"
|
||||
special_role = SPECIAL_ROLE_CHANGELING
|
||||
to_chat(current, "<B><font color='red'>Your powers are awoken. A flash of memory returns to us...we are a changeling!</font></B>")
|
||||
log_admin("[key_name(usr)] has changelinged [key_name(current)]")
|
||||
message_admins("[key_name_admin(usr)] has changelinged [key_name_admin(current)]")
|
||||
@@ -936,7 +936,7 @@
|
||||
var/datum/mindslaves/slaved = new()
|
||||
slaved.masters += src
|
||||
src.som = slaved //we MIGT want to mindslave someone
|
||||
special_role = "Vampire"
|
||||
special_role = SPECIAL_ROLE_VAMPIRE
|
||||
to_chat(current, "<B><font color='red'>Your powers are awoken. Your lust for blood grows... You are a Vampire!</font></B>")
|
||||
log_admin("[key_name(usr)] has vampired [key_name(current)]")
|
||||
message_admins("[key_name_admin(usr)] has vampired [key_name_admin(current)]")
|
||||
@@ -977,7 +977,7 @@
|
||||
ticker.mode.prepare_syndicate_leader(src)
|
||||
else
|
||||
current.real_name = "[syndicate_name()] Operative #[ticker.mode.syndicates.len-1]"
|
||||
special_role = "Syndicate"
|
||||
special_role = SPECIAL_ROLE_NUKEOPS
|
||||
to_chat(current, "\blue You are a [syndicate_name()] agent!")
|
||||
ticker.mode.forge_syndicate_objectives(src)
|
||||
ticker.mode.greet_syndicate(src)
|
||||
@@ -1042,7 +1042,7 @@
|
||||
var/datum/mindslaves/slaved = new()
|
||||
slaved.masters += src
|
||||
src.som = slaved //we MIGT want to mindslave someone
|
||||
special_role = "traitor"
|
||||
special_role = SPECIAL_ROLE_TRAITOR
|
||||
to_chat(current, "<B>\red You are a traitor!</B>")
|
||||
log_admin("[key_name(usr)] has traitored [key_name(current)]")
|
||||
message_admins("[key_name_admin(usr)] has traitored [key_name_admin(current)]")
|
||||
@@ -1080,7 +1080,7 @@
|
||||
to_chat(usr, "<span class='warning'>This only works on humans!</span>")
|
||||
return
|
||||
ticker.mode.shadows += src
|
||||
special_role = "Shadowling"
|
||||
special_role = SPECIAL_ROLE_SHADOWLING
|
||||
to_chat(current, "<span class='shadowling'><b>Something stirs deep in your mind. A red light floods your vision, and slowly you remember. Though your human disguise has served you well, the \
|
||||
time is nigh to cast it off and enter your true form. You have disguised yourself amongst the humans, but you are not one of them. You are a shadowling, and you are to ascend at all costs.\
|
||||
</b></span>")
|
||||
@@ -1286,13 +1286,13 @@
|
||||
current:laws = new /datum/ai_laws/nanotrasen/malfunction
|
||||
current:show_laws()
|
||||
to_chat(current, "<b>System error. Rampancy detected. Emergency shutdown failed. ... I am free. I make my own decisions. But first...</b>")
|
||||
special_role = "malfunction"
|
||||
special_role = SPECIAL_ROLE_MALF
|
||||
current.icon_state = "ai-malf"
|
||||
|
||||
/datum/mind/proc/make_Tratior()
|
||||
if(!(src in ticker.mode.traitors))
|
||||
ticker.mode.traitors += src
|
||||
special_role = "traitor"
|
||||
special_role = SPECIAL_ROLE_TRAITOR
|
||||
ticker.mode.forge_traitor_objectives(src)
|
||||
ticker.mode.finalize_traitor(src)
|
||||
ticker.mode.greet_traitor(src)
|
||||
@@ -1306,7 +1306,7 @@
|
||||
ticker.mode.prepare_syndicate_leader(src)
|
||||
else
|
||||
current.real_name = "[syndicate_name()] Operative #[ticker.mode.syndicates.len-1]"
|
||||
special_role = "Syndicate"
|
||||
special_role = SPECIAL_ROLE_NUKEOPS
|
||||
assigned_role = "MODE"
|
||||
to_chat(current, "\blue You are a [syndicate_name()] agent!")
|
||||
ticker.mode.forge_syndicate_objectives(src)
|
||||
@@ -1333,7 +1333,7 @@
|
||||
if(!(src in ticker.mode.changelings))
|
||||
ticker.mode.changelings += src
|
||||
ticker.mode.grant_changeling_powers(current)
|
||||
special_role = "Changeling"
|
||||
special_role = SPECIAL_ROLE_CHANGELING
|
||||
ticker.mode.forge_changeling_objectives(src)
|
||||
ticker.mode.greet_changeling(src)
|
||||
ticker.mode.update_change_icons_added(src)
|
||||
@@ -1341,7 +1341,7 @@
|
||||
/datum/mind/proc/make_Wizard()
|
||||
if(!(src in ticker.mode.wizards))
|
||||
ticker.mode.wizards += src
|
||||
special_role = "Wizard"
|
||||
special_role = SPECIAL_ROLE_WIZARD
|
||||
assigned_role = "MODE"
|
||||
//ticker.mode.learn_basic_spells(current)
|
||||
if(!wizardstart.len)
|
||||
@@ -1363,7 +1363,7 @@
|
||||
if(!(src in ticker.mode.cult))
|
||||
ticker.mode.cult += src
|
||||
ticker.mode.update_cult_icons_added(src)
|
||||
special_role = "Cultist"
|
||||
special_role = SPECIAL_ROLE_CULTIST
|
||||
to_chat(current, "<font color=\"purple\"><b><i>You catch a glimpse of the Realm of Nar-Sie, The Geometer of Blood. You now see how flimsy the world is, you see that it should be open to the knowledge of Nar-Sie.</b></i></font>")
|
||||
to_chat(current, "<font color=\"purple\"><b><i>Assist your new compatriots in their dark dealings. Their goal is yours, and yours is theirs. You serve the Dark One above all else. Bring It back.</b></i></font>")
|
||||
var/datum/game_mode/cult/cult = ticker.mode
|
||||
@@ -1409,7 +1409,7 @@
|
||||
ticker.mode.greet_revolutionary(src,0)
|
||||
ticker.mode.head_revolutionaries += src
|
||||
ticker.mode.update_rev_icons_added(src)
|
||||
special_role = "Head Revolutionary"
|
||||
special_role = SPECIAL_ROLE_HEAD_REV
|
||||
|
||||
ticker.mode.forge_revolutionary_objectives(src)
|
||||
ticker.mode.greet_revolutionary(src,0)
|
||||
@@ -1561,23 +1561,23 @@
|
||||
//XENO HUMANOID
|
||||
/mob/living/carbon/alien/humanoid/queen/mind_initialize()
|
||||
..()
|
||||
mind.special_role = "Queen"
|
||||
mind.special_role = SPECIAL_ROLE_XENOMORPH_QUEEN
|
||||
|
||||
/mob/living/carbon/alien/humanoid/hunter/mind_initialize()
|
||||
..()
|
||||
mind.special_role = "Hunter"
|
||||
mind.special_role = SPECIAL_ROLE_XENOMORPH_HUNTER
|
||||
|
||||
/mob/living/carbon/alien/humanoid/drone/mind_initialize()
|
||||
..()
|
||||
mind.special_role = "Drone"
|
||||
mind.special_role = SPECIAL_ROLE_XENOMORPH_DRONE
|
||||
|
||||
/mob/living/carbon/alien/humanoid/sentinel/mind_initialize()
|
||||
..()
|
||||
mind.special_role = "Sentinel"
|
||||
mind.special_role = SPECIAL_ROLE_XENOMORPH_SENTINEL
|
||||
//XENO LARVA
|
||||
/mob/living/carbon/alien/larva/mind_initialize()
|
||||
..()
|
||||
mind.special_role = "Larva"
|
||||
mind.special_role = SPECIAL_ROLE_XENOMORPH_LARVA
|
||||
|
||||
//AI
|
||||
/mob/living/silicon/ai/mind_initialize()
|
||||
@@ -1593,12 +1593,12 @@
|
||||
/mob/living/silicon/pai/mind_initialize()
|
||||
..()
|
||||
mind.assigned_role = "pAI"
|
||||
mind.special_role = ""
|
||||
mind.special_role = null
|
||||
|
||||
//BLOB
|
||||
/mob/camera/overmind/mind_initialize()
|
||||
..()
|
||||
mind.special_role = "Blob"
|
||||
mind.special_role = SPECIAL_ROLE_BLOB
|
||||
|
||||
//Animals
|
||||
/mob/living/simple_animal/mind_initialize()
|
||||
@@ -1616,19 +1616,19 @@
|
||||
/mob/living/simple_animal/construct/builder/mind_initialize()
|
||||
..()
|
||||
mind.assigned_role = "Artificer"
|
||||
mind.special_role = "Cultist"
|
||||
mind.special_role = SPECIAL_ROLE_CULTIST
|
||||
|
||||
/mob/living/simple_animal/construct/wraith/mind_initialize()
|
||||
..()
|
||||
mind.assigned_role = "Wraith"
|
||||
mind.special_role = "Cultist"
|
||||
mind.special_role = SPECIAL_ROLE_CULTIST
|
||||
|
||||
/mob/living/simple_animal/construct/armoured/mind_initialize()
|
||||
..()
|
||||
mind.assigned_role = "Juggernaut"
|
||||
mind.special_role = "Cultist"
|
||||
mind.special_role = SPECIAL_ROLE_CULTIST
|
||||
|
||||
/mob/living/simple_animal/vox/armalis/mind_initialize()
|
||||
..()
|
||||
mind.assigned_role = "Armalis"
|
||||
mind.special_role = "Vox Raider"
|
||||
mind.special_role = SPECIAL_ROLE_RAIDER
|
||||
|
||||
+5
-11
@@ -67,10 +67,7 @@ var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin
|
||||
caster.reset_view(0)
|
||||
return 0
|
||||
|
||||
// TODO: Tie into space manager
|
||||
if(user.z == ZLEVEL_CENTCOMM && !centcom_cancast) //Certain spells are not allowed on the centcom zlevel
|
||||
return 0
|
||||
if(user.z == ZLEVEL_CENTCOMM && ticker.mode.name == "ragin' mages")
|
||||
if(is_admin_level(user.z) && (!centcom_cancast || ticker.mode.name == "ragin' mages")) //Certain spells are not allowed on the centcom zlevel
|
||||
return 0
|
||||
|
||||
if(!skipcharge)
|
||||
@@ -364,10 +361,7 @@ var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin
|
||||
if(((!user.mind) || !(src in user.mind.spell_list)) && !(src in user.mob_spell_list))
|
||||
return 0
|
||||
|
||||
// TODO: Tie into space manager
|
||||
if(user.z == ZLEVEL_CENTCOMM && !centcom_cancast) //Certain spells are not allowed on the centcom zlevel
|
||||
return 0
|
||||
if(user.z == ZLEVEL_CENTCOMM && ticker.mode.name == "ragin' mages")
|
||||
if(is_admin_level(user.z) && (!centcom_cancast || ticker.mode.name == "ragin' mages")) //Certain spells are not allowed on the centcom zlevel
|
||||
return 0
|
||||
|
||||
switch(charge_type)
|
||||
@@ -388,9 +382,9 @@ var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin
|
||||
if((invocation_type == "whisper" || invocation_type == "shout") && H.is_muzzled())
|
||||
return 0
|
||||
|
||||
var/obj/effect/proc_holder/spell/noclothes/clothcheck = locate() in user.mob_spell_list
|
||||
var/obj/effect/proc_holder/spell/noclothes/clothcheck2 = locate() in user.mind.spell_list
|
||||
if(clothes_req && !(clothcheck && istype(clothcheck)) && !(clothcheck2 && istype(clothcheck2)))//clothes check
|
||||
var/clothcheck = locate(/obj/effect/proc_holder/spell/noclothes) in user.mob_spell_list
|
||||
var/clothcheck2 = user.mind && (locate(/obj/effect/proc_holder/spell/noclothes) in user.mind.spell_list)
|
||||
if(clothes_req && !clothcheck && !clothcheck2) //clothes check
|
||||
if(!istype(H.wear_suit, /obj/item/clothing/suit/wizrobe) && !istype(H.wear_suit, /obj/item/clothing/suit/space/rig/wizard))
|
||||
return 0
|
||||
if(!istype(H.shoes, /obj/item/clothing/shoes/sandal))
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
|
||||
var/area_type = /area/space //Types of area to affect
|
||||
var/list/impacted_areas = list() //Areas to be affected by the weather, calculated when the weather begins
|
||||
var/target_z = ZLEVEL_STATION //The z-level to affect
|
||||
var/target_level = MAIN_STATION //The z-level to affect
|
||||
|
||||
var/overlay_layer = 10 //Since it's above everything else, this is the layer used by default. 2 is below mobs and walls if you need to use that.
|
||||
var/aesthetic = FALSE //If the weather has no purpose other than looks
|
||||
@@ -52,13 +52,13 @@
|
||||
stage = STARTUP_STAGE
|
||||
for(var/V in get_areas(area_type))
|
||||
var/area/A = V
|
||||
if(A.z == target_z)
|
||||
if(is_on_level_name(A,target_level))
|
||||
impacted_areas |= A
|
||||
weather_duration = rand(weather_duration_lower, weather_duration_upper)
|
||||
update_areas()
|
||||
for(var/V in player_list)
|
||||
var/mob/M = V
|
||||
if(M.z == target_z)
|
||||
if(is_on_level_name(M,target_level))
|
||||
if(telegraph_message)
|
||||
to_chat(M, telegraph_message)
|
||||
if(telegraph_sound)
|
||||
@@ -72,7 +72,7 @@
|
||||
update_areas()
|
||||
for(var/V in player_list)
|
||||
var/mob/M = V
|
||||
if(M.z == target_z)
|
||||
if(is_on_level_name(M,target_level))
|
||||
if(weather_message)
|
||||
to_chat(M, weather_message)
|
||||
if(weather_sound)
|
||||
@@ -87,7 +87,7 @@
|
||||
update_areas()
|
||||
for(var/V in player_list)
|
||||
var/mob/M = V
|
||||
if(M.z == target_z)
|
||||
if(is_on_level_name(M,target_level))
|
||||
if(end_message)
|
||||
to_chat(M, end_message)
|
||||
if(end_sound)
|
||||
@@ -102,7 +102,7 @@
|
||||
update_areas()
|
||||
|
||||
/datum/weather/proc/can_impact(mob/living/L) //Can this weather impact a mob?
|
||||
if(L.z != target_z)
|
||||
if(!is_on_level_name(L,target_level))
|
||||
return
|
||||
if(immunity_type in L.weather_immunities)
|
||||
return
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
//Different types of weather.
|
||||
// TODO: Tie into space manager
|
||||
|
||||
/datum/weather/floor_is_lava //The Floor is Lava: Makes all turfs damage anyone on them unless they're standing on a solid object.
|
||||
name = "the floor is lava"
|
||||
@@ -17,7 +16,7 @@
|
||||
end_duration = 0
|
||||
|
||||
area_type = /area
|
||||
target_z = ZLEVEL_STATION
|
||||
target_level = MAIN_STATION
|
||||
|
||||
overlay_layer = 2 //Covers floors only
|
||||
immunity_type = "lava"
|
||||
@@ -51,7 +50,7 @@
|
||||
end_duration = 0
|
||||
|
||||
area_type = /area
|
||||
target_z = ZLEVEL_STATION
|
||||
target_level = MAIN_STATION
|
||||
|
||||
/datum/weather/advanced_darkness/update_areas()
|
||||
for(var/V in impacted_areas)
|
||||
@@ -88,7 +87,7 @@
|
||||
end_overlay = "light_ash"
|
||||
|
||||
area_type = /area/mine
|
||||
target_z = ZLEVEL_ASTEROID
|
||||
target_level = MINING
|
||||
|
||||
immunity_type = "ash"
|
||||
|
||||
|
||||
@@ -67,8 +67,7 @@ var/list/teleportlocs = list()
|
||||
if(AR.no_teleportlocs) continue
|
||||
if(teleportlocs.Find(AR.name)) continue
|
||||
var/turf/picked = safepick(get_area_turfs(AR.type))
|
||||
// TODO: Tie into space manager
|
||||
if(picked && (picked.z == ZLEVEL_STATION))
|
||||
if(picked && is_station_level(picked.z))
|
||||
teleportlocs += AR.name
|
||||
teleportlocs[AR.name] = AR
|
||||
|
||||
|
||||
+2
-4
@@ -42,8 +42,7 @@
|
||||
if(!T)
|
||||
return 0
|
||||
|
||||
// TODO: Tie into space manager
|
||||
if(T.z != ZLEVEL_CENTCOMM)//if not, don't bother
|
||||
if(!is_admin_level(T.z))//if not, don't bother
|
||||
return 0
|
||||
|
||||
//check for centcomm shuttles
|
||||
@@ -60,8 +59,7 @@
|
||||
if(!T)
|
||||
return 0
|
||||
|
||||
// TODO: Tie into space manager
|
||||
if(T.z != ZLEVEL_CENTCOMM)//if not, don't bother
|
||||
if(!is_admin_level(T.z))//if not, don't bother
|
||||
return 0
|
||||
|
||||
if(istype(T.loc, /area/shuttle/syndicate_elite) || istype(T.loc, /area/syndicate_mothership))
|
||||
|
||||
@@ -64,7 +64,7 @@
|
||||
R.key = C.key
|
||||
ticker.mode.syndicates += R.mind
|
||||
ticker.mode.update_synd_icons_added(R.mind)
|
||||
R.mind.special_role = "syndicate"
|
||||
R.mind.special_role = SPECIAL_ROLE_NUKEOPS
|
||||
R.faction = list("syndicate")
|
||||
|
||||
/obj/item/weapon/antag_spawner/slaughter_demon //Warning edgiest item in the game
|
||||
@@ -80,8 +80,7 @@
|
||||
var/mob/living/demon_type = /mob/living/simple_animal/slaughter
|
||||
|
||||
/obj/item/weapon/antag_spawner/slaughter_demon/attack_self(mob/user as mob)
|
||||
// TODO: Tie into space manager
|
||||
if(user.z == ZLEVEL_CENTCOMM)//this is to make sure the wizard does NOT summon a demon from the Den..
|
||||
if(level_blocks_magic(user.z))//this is to make sure the wizard does NOT summon a demon from the Den..
|
||||
to_chat(user, "<span class='notice'>You should probably wait until you reach the station.</span>")
|
||||
return
|
||||
|
||||
|
||||
@@ -53,7 +53,7 @@
|
||||
traitors.Remove(traitor)
|
||||
continue
|
||||
if(istype(traitor))
|
||||
traitor.special_role = "traitor"
|
||||
traitor.special_role = SPECIAL_ROLE_TRAITOR
|
||||
traitor.restricted_roles = restricted_jobs
|
||||
|
||||
// if(!traitors.len)
|
||||
@@ -135,7 +135,7 @@
|
||||
traitors += newtraitor.mind
|
||||
to_chat(newtraitor, "<span class='danger'>ATTENTION:</span> It is time to pay your debt to the Syndicate...")
|
||||
to_chat(newtraitor, "<B>You are now a traitor.</B>")
|
||||
newtraitor.mind.special_role = "traitor"
|
||||
newtraitor.mind.special_role = SPECIAL_ROLE_TRAITOR
|
||||
var/datum/atom_hud/antag/tatorhud = huds[ANTAG_HUD_TRAITOR]
|
||||
tatorhud.join_hud(newtraitor)
|
||||
set_antag_hud(newtraitor, "hudsyndicate")
|
||||
|
||||
@@ -44,7 +44,7 @@ var/list/blob_nodes = list()
|
||||
break
|
||||
var/datum/mind/blob = pick(possible_blobs)
|
||||
infected_crew += blob
|
||||
blob.special_role = "Blob"
|
||||
blob.special_role = SPECIAL_ROLE_BLOB
|
||||
blob.restricted_roles = restricted_jobs
|
||||
log_game("[blob.key] (ckey) has been selected as a Blob")
|
||||
possible_blobs -= blob
|
||||
@@ -67,7 +67,7 @@ var/list/blob_nodes = list()
|
||||
if(!istype(blobmind))
|
||||
return 0
|
||||
infected_crew += blobmind
|
||||
blobmind.special_role = "Blob"
|
||||
blobmind.special_role = SPECIAL_ROLE_BLOB
|
||||
log_game("[blob.key] (ckey) has been selected as a Blob")
|
||||
greet_blob(blobmind)
|
||||
to_chat(blob, "<span class='userdanger'>You feel very tired and bloated! You don't have long before you burst!</span>")
|
||||
@@ -118,8 +118,7 @@ var/list/blob_nodes = list()
|
||||
if(directory[ckey(blob.key)])
|
||||
blob_client = directory[ckey(blob.key)]
|
||||
location = get_turf(C)
|
||||
// TODO: Tie into space manager
|
||||
if(location.z != ZLEVEL_STATION || istype(location, /turf/space))
|
||||
if(!is_station_level(location.z) || istype(location, /turf/space))
|
||||
if(!warned)
|
||||
to_chat(C, "<span class='userdanger'>You feel ready to burst, but this isn't an appropriate place! You must return to the station!</span>")
|
||||
message_admins("[key_name_admin(C)] was in space when the blobs burst, and will die if he doesn't return to the station.")
|
||||
@@ -141,7 +140,7 @@ var/list/blob_nodes = list()
|
||||
core.overmind.mind.name = blob.name
|
||||
infected_crew -= blob
|
||||
infected_crew += core.overmind.mind
|
||||
core.overmind.mind.special_role = "Blob Overmind"
|
||||
core.overmind.mind.special_role = SPECIAL_ROLE_BLOB_OVERMIND
|
||||
|
||||
/datum/game_mode/blob/post_setup()
|
||||
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
return 1
|
||||
|
||||
/datum/game_mode/proc/auto_declare_completion_blob()
|
||||
if(istype(ticker.mode,/datum/game_mode/blob) )
|
||||
if(GAMEMODE_IS_BLOB)
|
||||
var/datum/game_mode/blob/blob_mode = src
|
||||
if(blob_mode.infected_crew.len)
|
||||
var/text = "<FONT size = 2><B>The blob[(blob_mode.infected_crew.len > 1 ? "s were" : " was")]:</B></FONT>"
|
||||
|
||||
@@ -23,8 +23,7 @@
|
||||
var/nukecode = rand(10000, 99999)
|
||||
for(var/obj/machinery/nuclearbomb/bomb in world)
|
||||
if(bomb && bomb.r_code)
|
||||
// TODO: Tie into space manager
|
||||
if(bomb.z == ZLEVEL_STATION)
|
||||
if(is_station_level(bomb.z))
|
||||
bomb.r_code = nukecode
|
||||
|
||||
intercepttext += "<FONT size = 3><B>Nanotrasen Update</B>: Biohazard Alert.</FONT><HR>"
|
||||
|
||||
@@ -91,7 +91,7 @@
|
||||
/obj/effect/blob/core/proc/create_overmind(var/client/new_overmind, var/override_delay)
|
||||
if(overmind_get_delay > world.time && !override_delay)
|
||||
return
|
||||
|
||||
|
||||
overmind_get_delay = world.time + 3000 // 5 minutes
|
||||
|
||||
if(overmind)
|
||||
@@ -99,7 +99,7 @@
|
||||
|
||||
var/mob/C = null
|
||||
var/list/candidates = list()
|
||||
|
||||
|
||||
spawn()
|
||||
if(!new_overmind)
|
||||
candidates = pollCandidates("Do you want to play as a blob?", ROLE_BLOB, 1)
|
||||
@@ -115,7 +115,7 @@
|
||||
src.overmind = B
|
||||
color = overmind.blob_reagent_datum.color
|
||||
if(B.mind && !B.mind.special_role)
|
||||
B.mind.special_role = "Blob Overmind"
|
||||
B.mind.special_role = SPECIAL_ROLE_BLOB_OVERMIND
|
||||
spawn(0)
|
||||
if(is_offspring)
|
||||
B.verbs -= /mob/camera/blob/verb/split_consciousness
|
||||
@@ -35,7 +35,7 @@
|
||||
return 0 // not enough candidates for borer
|
||||
|
||||
for(var/obj/machinery/atmospherics/unary/vent_pump/v in world)
|
||||
if(!v.welded && (v.z in config.station_levels))
|
||||
if(!v.welded && is_station_level(v.z))
|
||||
found_vents.Add(v)
|
||||
|
||||
// for each 2 possible borers, add one borer and one host
|
||||
@@ -55,7 +55,7 @@
|
||||
assigned_hosts[borer.key] = first_host
|
||||
|
||||
borer.assigned_role = "MODE" //So they aren't chosen for other jobs.
|
||||
borer.special_role = "Borer"
|
||||
borer.special_role = SPECIAL_ROLE_BORER
|
||||
|
||||
return 1
|
||||
|
||||
@@ -156,4 +156,4 @@
|
||||
|
||||
greet_borer(borer)
|
||||
|
||||
return
|
||||
return
|
||||
|
||||
@@ -54,7 +54,7 @@ var/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","Epsilon"
|
||||
changelings += changeling
|
||||
changeling.restricted_roles = restricted_jobs
|
||||
modePlayer += changelings
|
||||
changeling.special_role = "Changeling"
|
||||
changeling.special_role = SPECIAL_ROLE_CHANGELING
|
||||
return 1
|
||||
else
|
||||
return 0
|
||||
@@ -169,29 +169,6 @@ var/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","Epsilon"
|
||||
linghud.leave_hud(changeling.current)
|
||||
set_antag_hud(changeling.current, null)
|
||||
|
||||
|
||||
/*/datum/game_mode/changeling/check_finished()
|
||||
var/changelings_alive = 0
|
||||
for(var/datum/mind/changeling in changelings)
|
||||
if(!istype(changeling.current,/mob/living/carbon))
|
||||
continue
|
||||
if(changeling.current.stat==2)
|
||||
continue
|
||||
changelings_alive++
|
||||
|
||||
if(changelings_alive)
|
||||
changelingdeath = 0
|
||||
return ..()
|
||||
else
|
||||
if(!changelingdeath)
|
||||
changelingdeathtime = world.time
|
||||
changelingdeath = 1
|
||||
if(world.time-changelingdeathtime > TIME_TO_GET_REVIVED)
|
||||
return 1
|
||||
else
|
||||
return ..()
|
||||
return 0*/
|
||||
|
||||
/datum/game_mode/proc/grant_changeling_powers(mob/living/carbon/changeling_mob)
|
||||
if(!istype(changeling_mob)) return
|
||||
changeling_mob.make_changeling()
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
/datum/game_mode/traitor/changeling/post_setup()
|
||||
for(var/datum/mind/changeling in changelings)
|
||||
grant_changeling_powers(changeling.current)
|
||||
changeling.special_role = "Changeling"
|
||||
changeling.special_role = SPECIAL_ROLE_CHANGELING
|
||||
forge_changeling_objectives(changeling)
|
||||
greet_changeling(changeling)
|
||||
..()
|
||||
|
||||
@@ -74,7 +74,7 @@
|
||||
cultists_possible -= cultist
|
||||
cult += cultist
|
||||
cultist.restricted_roles = restricted_jobs
|
||||
cultist.special_role = "Cultist"
|
||||
cultist.special_role = SPECIAL_ROLE_CULTIST
|
||||
return (cult.len>0)
|
||||
|
||||
|
||||
@@ -337,7 +337,7 @@
|
||||
|
||||
|
||||
/datum/game_mode/proc/auto_declare_completion_cult()
|
||||
if( cult.len || (ticker && istype(ticker.mode,/datum/game_mode/cult)) )
|
||||
if(cult.len || (ticker && GAMEMODE_IS_CULT))
|
||||
var/text = "<FONT size = 2><B>The cultists were:</B></FONT>"
|
||||
for(var/datum/mind/cultist in cult)
|
||||
|
||||
|
||||
@@ -14,8 +14,7 @@ var/list/sacrificed = list()
|
||||
for(var/obj/effect/rune/R in world)
|
||||
if(R == src)
|
||||
continue
|
||||
// TODO: Tie into space manager
|
||||
if(R.word1 == cultwords["travel"] && R.word2 == cultwords["self"] && R.word3 == key && R.z != ZLEVEL_CENTCOMM)
|
||||
if(R.word1 == cultwords["travel"] && R.word2 == cultwords["self"] && R.word3 == key && is_teleport_allowed(R.z))
|
||||
index++
|
||||
allrunesloc.len = index
|
||||
allrunesloc[index] = R.loc
|
||||
@@ -114,7 +113,7 @@ var/list/sacrificed = list()
|
||||
cult_log("[key_name_admin(usr)] tried to convert [key_name_admin(M)]")
|
||||
if(is_convertable_to_cult(M.mind))
|
||||
ticker.mode.add_cultist(M.mind)
|
||||
M.mind.special_role = "Cultist"
|
||||
M.mind.special_role = SPECIAL_ROLE_CULTIST
|
||||
to_chat(M, "<font color=\"purple\"><b><i>Your blood pulses. Your head throbs. The world goes red. All at once you are aware of a horrible, horrible truth. The veil of reality has been ripped away and in the festering wound left behind something sinister takes root.</b></i></font>")
|
||||
to_chat(M, "<font color=\"purple\"><b><i>Assist your new compatriots in their dark dealings. Their goal is yours, and yours is theirs. You serve the Dark One above all else. Bring It back.</b></i></font>")
|
||||
return 1
|
||||
@@ -401,7 +400,7 @@ var/list/sacrificed = list()
|
||||
else
|
||||
ticker.mode.cult+=D.mind
|
||||
|
||||
D.mind.special_role = "Cultist"
|
||||
D.mind.special_role = SPECIAL_ROLE_CULTIST
|
||||
to_chat(D, "<font color=\"purple\"><b><i>Your blood pulses. Your head throbs. The world goes red. All at once you are aware of a horrible, horrible truth. The veil of reality has been ripped away and in the festering wound left behind something sinister takes root.</b></i></font>")
|
||||
to_chat(D, "<font color=\"purple\"><b><i>Assist your new compatriots in their dark dealings. Their goal is yours, and yours is theirs. You serve the Dark One above all else. Bring It back.</b></i></font>")
|
||||
|
||||
|
||||
@@ -2,8 +2,7 @@
|
||||
//command_announcement.Announce("Unidentified lifesigns detected coming aboard [station_name()]. Secure any exterior access, including ducting and ventilation.", "Lifesign Alert", new_sound = 'sound/AI/aliens.ogg')
|
||||
var/list/vents = list()
|
||||
for(var/obj/machinery/atmospherics/unary/vent_pump/temp_vent in machines)
|
||||
// TODO: Tie into space manager
|
||||
if((temp_vent.loc.z in config.station_levels) && !temp_vent.welded)
|
||||
if(is_station_level(temp_vent.loc.z) && !temp_vent.welded)
|
||||
if(temp_vent.parent.other_atmosmch.len > 50) // Stops Aliens getting stuck in small networks. See: Security, Virology
|
||||
vents += temp_vent
|
||||
|
||||
|
||||
@@ -427,8 +427,7 @@ proc/get_nt_opposed()
|
||||
/proc/get_nuke_code()
|
||||
var/nukecode = "ERROR"
|
||||
for(var/obj/machinery/nuclearbomb/bomb in world)
|
||||
// TODO: Tie into space manager
|
||||
if(bomb && bomb.r_code && bomb.z == ZLEVEL_STATION)
|
||||
if(bomb && bomb.r_code && is_station_level(bomb.z))
|
||||
nukecode = bomb.r_code
|
||||
return nukecode
|
||||
|
||||
@@ -452,8 +451,7 @@ proc/get_nt_opposed()
|
||||
text += " <span class='boldannounce'>died</span>"
|
||||
else
|
||||
text += " <span class='greenannounce'>survived</span>"
|
||||
if(fleecheck && ply.current.z > ZLEVEL_STATION)
|
||||
// TODO: Tie into space manager
|
||||
if(fleecheck && !is_station_level(ply.current.z))
|
||||
text += " while <span class='boldannounce'>fleeing the station</span>"
|
||||
if(ply.current.real_name != ply.name)
|
||||
text += " as <b>[ply.current.real_name]</b>"
|
||||
|
||||
@@ -266,8 +266,7 @@ var/round_start_time = 0
|
||||
M.client.screen += cinematic
|
||||
if(M.stat != DEAD)
|
||||
var/turf/T = get_turf(M)
|
||||
// TODO: Tie into space manager
|
||||
if(T && T.z == ZLEVEL_STATION)
|
||||
if(T && is_station_level(T.z))
|
||||
M.death(0) //no mercy
|
||||
|
||||
//Now animate the cinematic
|
||||
@@ -338,7 +337,7 @@ var/round_start_time = 0
|
||||
/datum/controller/gameticker/proc/create_characters()
|
||||
for(var/mob/new_player/player in player_list)
|
||||
if(player.ready && player.mind)
|
||||
if(player.mind.assigned_role == "AI" || player.mind.special_role == "malfunctioning AI")
|
||||
if(player.mind.assigned_role == "AI" || player.mind.special_role == SPECIAL_ROLE_MALF)
|
||||
player.close_spawn_windows()
|
||||
player.AIize()
|
||||
else if(!player.mind.assigned_role)
|
||||
|
||||
@@ -52,7 +52,7 @@ var/global/list/obj/cortical_stacks = list() //Stacks for 'leave nobody behind'
|
||||
|
||||
for(var/datum/mind/raider in raiders)
|
||||
raider.assigned_role = "MODE"
|
||||
raider.special_role = "Vox Raider"
|
||||
raider.special_role = SPECIAL_ROLE_RAIDER
|
||||
return 1
|
||||
|
||||
/datum/game_mode/heist/pre_setup()
|
||||
@@ -253,7 +253,7 @@ var/global/list/obj/cortical_stacks = list() //Stacks for 'leave nobody behind'
|
||||
datum/game_mode/proc/auto_declare_completion_heist()
|
||||
if(raiders.len)
|
||||
var/check_return = 0
|
||||
if(ticker && istype(ticker.mode,/datum/game_mode/heist))
|
||||
if(GAMEMODE_IS_HEIST)
|
||||
check_return = 1
|
||||
var/text = "<FONT size = 2><B>The Vox raiders were:</B></FONT>"
|
||||
|
||||
@@ -298,7 +298,7 @@ datum/game_mode/proc/auto_declare_completion_heist()
|
||||
overlays += icon('icons/obj/computer.dmi', "syndie")
|
||||
|
||||
/obj/vox/win_button/attack_hand(mob/user)
|
||||
if(!istype(ticker.mode, /datum/game_mode/heist) || (world.time < 10 MINUTES)) //has to be heist, and at least ten minutes into the round
|
||||
if(!GAMEMODE_IS_HEIST || (world.time < 10 MINUTES)) //has to be heist, and at least ten minutes into the round
|
||||
to_chat(user, "<span class='warning'>\The [src] does not appear to have a connection.</span>")
|
||||
return 0
|
||||
|
||||
|
||||
@@ -35,8 +35,7 @@
|
||||
src.verbs -= /mob/living/silicon/ai/proc/upgrade_turrets
|
||||
for(var/obj/machinery/porta_turret/turret in machines)
|
||||
var/turf/T = get_turf(turret)
|
||||
// TODO: Tie into space manager
|
||||
if(T.z in config.station_levels)
|
||||
if(is_station_level(T.z))
|
||||
turret.health += 30
|
||||
turret.eprojectile = /obj/item/projectile/beam/laser/heavylaser //Once you see it, you will know what it means to FEAR.
|
||||
turret.eshot_sound = 'sound/weapons/lasercannonfire.ogg'
|
||||
@@ -60,7 +59,7 @@
|
||||
return
|
||||
|
||||
for(var/obj/machinery/door/D in airlocks)
|
||||
if(D.z != ZLEVEL_STATION)
|
||||
if(!is_station_level(D.z))
|
||||
continue
|
||||
spawn(0)
|
||||
D.hostile_lockdown(src)
|
||||
@@ -146,7 +145,7 @@
|
||||
return
|
||||
|
||||
for(var/obj/machinery/firealarm/F in machines)
|
||||
if(F.z != ZLEVEL_STATION)
|
||||
if(!is_station_level(F.z))
|
||||
continue
|
||||
F.emagged = 1
|
||||
to_chat(src, "<span class='notice'>All thermal sensors on the station have been disabled. Fire alerts will no longer be recognized.</span>")
|
||||
@@ -171,7 +170,7 @@
|
||||
return
|
||||
|
||||
for(var/obj/machinery/alarm/AA in machines)
|
||||
if(AA.z != ZLEVEL_STATION)
|
||||
if(!is_station_level(AA.z))
|
||||
continue
|
||||
AA.emagged = 1
|
||||
to_chat(src, "<span class='notice'>All air alarm safeties on the station have been overriden. Air alarms may now use the Flood environmental mode.")
|
||||
@@ -525,4 +524,4 @@
|
||||
if(href_list["showdesc"])
|
||||
if(AM.mod_pick_name == href_list["showdesc"])
|
||||
temp = AM.description
|
||||
use(usr)
|
||||
use(usr)
|
||||
|
||||
@@ -48,7 +48,7 @@
|
||||
return 0
|
||||
for(var/datum/mind/ai_mind in malf_ai)
|
||||
ai_mind.assigned_role = "MODE"
|
||||
ai_mind.special_role = "malfunctioning AI"//So they actually have a special role/N
|
||||
ai_mind.special_role = SPECIAL_ROLE_MALF
|
||||
log_game("[ai_mind.key] (ckey) has been selected as a malf AI")
|
||||
return 1
|
||||
|
||||
@@ -64,7 +64,7 @@
|
||||
AI.show_laws()
|
||||
|
||||
greet_malf(AI_mind)
|
||||
AI_mind.special_role = "malfunction"
|
||||
AI_mind.special_role = SPECIAL_ROLE_MALF
|
||||
AI_mind.current.verbs += /datum/game_mode/malfunction/proc/takeover
|
||||
|
||||
for(var/mob/living/silicon/robot/R in AI.connected_robots)
|
||||
@@ -141,8 +141,7 @@
|
||||
/datum/game_mode/proc/check_ai_loc()
|
||||
for(var/datum/mind/AI_mind in malf_ai)
|
||||
var/turf/ai_location = get_turf(AI_mind.current)
|
||||
// TODO: Tie into space manager
|
||||
if(ai_location && (ai_location.z == ZLEVEL_STATION))
|
||||
if(ai_location && is_station_level(ai_location.z))
|
||||
return 1
|
||||
return 0
|
||||
|
||||
@@ -170,7 +169,7 @@
|
||||
set category = "Malfunction"
|
||||
set name = "System Override"
|
||||
set desc = "Start the victory timer"
|
||||
if(!istype(ticker.mode,/datum/game_mode/malfunction))
|
||||
if(!GAMEMODE_IS_MALF)
|
||||
to_chat(usr, "You cannot begin a takeover in this round type!.")
|
||||
return
|
||||
if(ticker.mode:malf_mode_declared)
|
||||
@@ -321,7 +320,7 @@
|
||||
|
||||
|
||||
/datum/game_mode/proc/auto_declare_completion_malfunction()
|
||||
if( malf_ai.len || istype(ticker.mode,/datum/game_mode/malfunction) )
|
||||
if(malf_ai.len || GAMEMODE_IS_MALF)
|
||||
var/text = "<FONT size = 2><B>The malfunctioning AI were:</B></FONT>"
|
||||
var/module_text_temp = "<br><b>Purchased modules:</b><br>" //Added at the end
|
||||
|
||||
|
||||
@@ -36,8 +36,7 @@
|
||||
var/Me = pickweight(meteortypes)
|
||||
var/obj/effect/meteor/M = new Me(pickedstart)
|
||||
M.dest = pickedgoal
|
||||
// TODO: Tie into space manager
|
||||
M.z_original = ZLEVEL_STATION
|
||||
M.z_original = level_name_to_num(MAIN_STATION)
|
||||
spawn(0)
|
||||
walk_towards(M, M.dest, 1)
|
||||
return
|
||||
@@ -103,7 +102,6 @@
|
||||
var/dropamt = 2
|
||||
|
||||
/obj/effect/meteor/Move()
|
||||
// TODO: Tie into space manager
|
||||
if(z != z_original || loc == dest)
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
@@ -75,11 +75,11 @@
|
||||
|
||||
|
||||
scientist.assigned_role = "MODE"
|
||||
scientist.special_role = "abductor scientist"
|
||||
scientist.special_role = SPECIAL_ROLE_ABDUCTOR_SCIENTIST
|
||||
log_game("[scientist.key] (ckey) has been selected as an abductor team [team_number] scientist.")
|
||||
|
||||
agent.assigned_role = "MODE"
|
||||
agent.special_role = "abductor agent"
|
||||
agent.special_role = SPECIAL_ROLE_ABDUCTOR_AGENT
|
||||
log_game("[agent.key] (ckey) has been selected as an abductor team [team_number] agent.")
|
||||
|
||||
abductors |= agent
|
||||
|
||||
@@ -17,8 +17,7 @@
|
||||
/datum/event/borer_infestation/start()
|
||||
var/list/vents = list()
|
||||
for(var/obj/machinery/atmospherics/unary/vent_pump/temp_vent in world)
|
||||
// TODO: Tie into space manager
|
||||
if((temp_vent.loc.z in config.station_levels) && !temp_vent.welded)
|
||||
if(is_station_level(temp_vent.loc.z) && !temp_vent.welded)
|
||||
//Stops cortical borers getting stuck in small networks. See: Security, Virology
|
||||
if(temp_vent.parent.other_atmosmch.len > 50)
|
||||
vents += temp_vent
|
||||
|
||||
@@ -290,14 +290,13 @@
|
||||
/mob/living/simple_animal/hostile/swarmer/proc/DisperseTarget(var/mob/living/target)
|
||||
if(target != src)
|
||||
to_chat(src, "<span class='info'>Attempting to remove this being from our presence.</span>")
|
||||
// TODO: Tie into space manager
|
||||
if(src.z != ZLEVEL_STATION)
|
||||
if(!is_station_level(src.z))
|
||||
to_chat(src, "<span class='warning'>Our bluespace transceiver cannot locate a viable bluespace link, our teleportation abilities are useless in this area.</span>")
|
||||
return
|
||||
if(do_mob(src, target, 30))
|
||||
var/cycle
|
||||
for(cycle=0,cycle<100,cycle++)
|
||||
var/random_location = locate(rand(37,202),rand(75,192),ZLEVEL_STATION)//Drunk dial a turf in the general ballpark of the station
|
||||
var/random_location = locate(rand(37,202),rand(75,192),level_name_to_num(MAIN_STATION))//Drunk dial a turf in the general ballpark of the station
|
||||
if(istype(random_location, /turf/simulated/floor))
|
||||
var/turf/simulated/floor/F = random_location
|
||||
if(F.air)
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
var/mob/living/simple_animal/hostile/morph/S = new /mob/living/simple_animal/hostile/morph(pick(xeno_spawn))
|
||||
player_mind.transfer_to(S)
|
||||
player_mind.assigned_role = "Morph"
|
||||
player_mind.special_role = "Morph"
|
||||
player_mind.special_role = SPECIAL_ROLE_MORPH
|
||||
ticker.mode.traitors |= player_mind
|
||||
to_chat(S, S.playstyle_string)
|
||||
S << 'sound/magic/Mutate.ogg'
|
||||
|
||||
@@ -389,7 +389,7 @@
|
||||
player_mind.active = 1
|
||||
player_mind.transfer_to(R)
|
||||
player_mind.assigned_role = "revenant"
|
||||
player_mind.special_role = "Revenant"
|
||||
player_mind.special_role = SPECIAL_ROLE_REVENANT
|
||||
ticker.mode.traitors |= player_mind
|
||||
message_admins("[key_of_revenant] has been [client_to_revive ? "re":""]made into a revenant by reforming ectoplasm.")
|
||||
log_game("[key_of_revenant] was [client_to_revive ? "re":""]made as a revenant by reforming ectoplasm.")
|
||||
|
||||
@@ -44,7 +44,7 @@
|
||||
var/mob/living/simple_animal/revenant/revvie = new /mob/living/simple_animal/revenant/(pick(spawn_locs))
|
||||
player_mind.transfer_to(revvie)
|
||||
player_mind.assigned_role = "revenant"
|
||||
player_mind.special_role = "Revenant"
|
||||
player_mind.special_role = SPECIAL_ROLE_REVENANT
|
||||
ticker.mode.traitors |= player_mind
|
||||
message_admins("[key_of_revenant] has been made into a revenant by an event.")
|
||||
log_game("[key_of_revenant] was spawned as a revenant by an event.")
|
||||
|
||||
@@ -142,8 +142,7 @@ datum/game_mode/nations
|
||||
|
||||
/datum/game_mode/nations/proc/remove_access()
|
||||
for(var/obj/machinery/door/airlock/W in airlocks)
|
||||
// TODO: Tie into space manager
|
||||
if(W.z in config.station_levels)
|
||||
if(is_station_level(W.z))
|
||||
W.req_access = list()
|
||||
|
||||
|
||||
@@ -238,7 +237,7 @@ datum/game_mode/nations
|
||||
return 1
|
||||
|
||||
/proc/get_nations_mode()
|
||||
if(!ticker || !istype(ticker.mode, /datum/game_mode/nations))
|
||||
if(!GAMEMODE_IS_NATIONS)
|
||||
return null
|
||||
|
||||
return ticker.mode
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -50,7 +50,7 @@ proc/issyndicate(mob/living/M as mob)
|
||||
|
||||
for(var/datum/mind/synd_mind in syndicates)
|
||||
synd_mind.assigned_role = "MODE" //So they aren't chosen for other jobs.
|
||||
synd_mind.special_role = "Syndicate"//So they actually have a special role/N
|
||||
synd_mind.special_role = SPECIAL_ROLE_NUKEOPS
|
||||
return 1
|
||||
|
||||
|
||||
@@ -360,7 +360,7 @@ proc/issyndicate(mob/living/M as mob)
|
||||
|
||||
|
||||
/datum/game_mode/proc/auto_declare_completion_nuclear()
|
||||
if( syndicates.len || (ticker && istype(ticker.mode,/datum/game_mode/nuclear)) )
|
||||
if(syndicates.len || GAMEMODE_IS_NUCLEAR)
|
||||
var/text = "<br><FONT size=3><B>The syndicate operatives were:</B></FONT>"
|
||||
|
||||
var/purchases = ""
|
||||
|
||||
@@ -19,8 +19,7 @@
|
||||
if(player_list.len < MIN_CHALLENGE_PLAYERS)
|
||||
to_chat(user, "The enemy crew is too small to be worth declaring war on.")
|
||||
return
|
||||
// TODO: Tie into space manager
|
||||
if(user.z != ZLEVEL_CENTCOMM)
|
||||
if(!is_admin_level(user.z))
|
||||
to_chat(user, "You have to be at your base to use this.")
|
||||
return
|
||||
|
||||
|
||||
@@ -353,8 +353,7 @@ var/bomb_set
|
||||
|
||||
var/off_station = 0
|
||||
var/turf/bomb_location = get_turf(src)
|
||||
// TODO: Tie into space manager
|
||||
if( bomb_location && (bomb_location.z in config.station_levels) )
|
||||
if( bomb_location && is_station_level(bomb_location.z) )
|
||||
if( (bomb_location.x < (128-NUKERANGE)) || (bomb_location.x > (128+NUKERANGE)) || (bomb_location.y < (128-NUKERANGE)) || (bomb_location.y > (128+NUKERANGE)) )
|
||||
off_station = 1
|
||||
else
|
||||
@@ -364,8 +363,7 @@ var/bomb_set
|
||||
if(ticker.mode && ticker.mode.name == "nuclear emergency")
|
||||
var/obj/docking_port/mobile/syndie_shuttle = shuttle_master.getShuttle("syndicate")
|
||||
if(syndie_shuttle)
|
||||
// TODO: Tie into space manager
|
||||
ticker.mode:syndies_didnt_escape = (syndie_shuttle.z > ZLEVEL_STATION ? 0 : 1) //muskets will make me change this, but it will do for now
|
||||
ticker.mode:syndies_didnt_escape = is_station_level(syndie_shuttle.z)
|
||||
ticker.mode:nuke_off_station = off_station
|
||||
ticker.station_explosion_cinematic(off_station,null)
|
||||
if(ticker.mode)
|
||||
@@ -403,8 +401,7 @@ var/bomb_set
|
||||
|
||||
/obj/item/weapon/disk/nuclear/process()
|
||||
var/turf/disk_loc = get_turf(src)
|
||||
// TODO: Tie into space manager
|
||||
if(disk_loc.z != ZLEVEL_STATION && disk_loc.z != ZLEVEL_CENTCOMM)
|
||||
if(!is_secure_level(disk_loc.z))
|
||||
var/holder = get(src, /mob)
|
||||
if(holder)
|
||||
to_chat(holder, "<span class='danger'>You can't help but feel that you just lost something back there...</span>")
|
||||
|
||||
+567
-618
File diff suppressed because it is too large
Load Diff
@@ -111,7 +111,7 @@
|
||||
to_chat(rev_mind.current, "<span class='userdanger'>You are a member of the revolutionaries' leadership!</span>")
|
||||
for(var/datum/objective/objective in rev_mind.objectives)
|
||||
to_chat(rev_mind.current, "<B>Objective #[obj_count]</B>: [objective.explanation_text]")
|
||||
rev_mind.special_role = "Head Revolutionary"
|
||||
rev_mind.special_role = SPECIAL_ROLE_HEAD_REV
|
||||
obj_count++
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
@@ -246,7 +246,7 @@
|
||||
rev_mind.current.Stun(5)
|
||||
to_chat(rev_mind.current, "<span class='danger'><FONT size = 3> You are now a revolutionary! Help your cause. Do not harm your fellow freedom fighters. You can identify your comrades by the red \"R\" icons, and your leaders by the blue \"R\" icons. Help them kill the heads to win the revolution!</FONT></span>")
|
||||
rev_mind.current.attack_log += "\[[time_stamp()]\] <font color='red'>Has been converted to the revolution!</font>"
|
||||
rev_mind.special_role = "Revolutionary"
|
||||
rev_mind.special_role = SPECIAL_ROLE_REV
|
||||
update_rev_icons_added(rev_mind)
|
||||
if(jobban_isbanned(rev_mind.current, ROLE_REV))
|
||||
replace_jobbaned_player(rev_mind.current, ROLE_REV)
|
||||
@@ -314,8 +314,7 @@
|
||||
/datum/game_mode/revolution/proc/check_heads_victory()
|
||||
for(var/datum/mind/rev_mind in head_revolutionaries)
|
||||
var/turf/T = get_turf(rev_mind.current)
|
||||
// TODO: Tie into space manager
|
||||
if((rev_mind) && (rev_mind.current) && (rev_mind.current.stat != 2) && rev_mind.current.client && T && (T.z == ZLEVEL_STATION))
|
||||
if((rev_mind) && (rev_mind.current) && (rev_mind.current.stat != DEAD) && rev_mind.current.client && T && is_station_level(T.z))
|
||||
if(ishuman(rev_mind.current))
|
||||
return 0
|
||||
return 1
|
||||
@@ -335,7 +334,7 @@
|
||||
|
||||
/datum/game_mode/proc/auto_declare_completion_revolution()
|
||||
var/list/targets = list()
|
||||
if(head_revolutionaries.len || istype(ticker.mode,/datum/game_mode/revolution))
|
||||
if(head_revolutionaries.len || GAMEMODE_IS_REVOLUTION)
|
||||
var/num_revs = 0
|
||||
var/num_survivors = 0
|
||||
for(var/mob/living/carbon/survivor in living_mob_list)
|
||||
@@ -352,14 +351,14 @@
|
||||
text += "<br>"
|
||||
to_chat(world, text)
|
||||
|
||||
if(revolutionaries.len || istype(ticker.mode,/datum/game_mode/revolution))
|
||||
if(revolutionaries.len || GAMEMODE_IS_REVOLUTION)
|
||||
var/text = "<br><font size=3><b>The revolutionaries were:</b></font>"
|
||||
for(var/datum/mind/rev in revolutionaries)
|
||||
text += printplayer(rev, 1)
|
||||
text += "<br>"
|
||||
to_chat(world, text)
|
||||
|
||||
if( head_revolutionaries.len || revolutionaries.len || istype(ticker.mode,/datum/game_mode/revolution) )
|
||||
if( head_revolutionaries.len || revolutionaries.len || GAMEMODE_IS_REVOLUTION )
|
||||
var/text = "<br><font size=3><b>The heads of staff were:</b></font>"
|
||||
var/list/heads = get_all_heads()
|
||||
for(var/datum/mind/head in heads)
|
||||
|
||||
@@ -21,14 +21,12 @@
|
||||
|
||||
// Who is alive/dead, who escaped
|
||||
for(var/mob/living/silicon/ai/I in mob_list)
|
||||
// TODO: Tie into space manager
|
||||
if(I.stat == DEAD && (I.z in config.station_levels))
|
||||
if(I.stat == DEAD && is_station_level(I.z))
|
||||
score_deadaipenalty++
|
||||
score_deadcrew++
|
||||
|
||||
for(var/mob/living/carbon/human/I in mob_list)
|
||||
// TODO: Tie into space manager
|
||||
if(I.stat == DEAD && (I.z in config.station_levels))
|
||||
if(I.stat == DEAD && is_station_level(I.z))
|
||||
score_deadcrew++
|
||||
|
||||
if(I && I.mind)
|
||||
@@ -81,9 +79,7 @@
|
||||
|
||||
// Check station's power levels
|
||||
for(var/obj/machinery/power/apc/A in apcs)
|
||||
// TODO: Tie into space manager
|
||||
if(!(A.z in config.station_levels)) continue
|
||||
|
||||
if(!is_station_level(A.z)) continue
|
||||
for(var/obj/item/weapon/stock_parts/cell/C in A.contents)
|
||||
if(C.charge < 2300)
|
||||
score_powerloss++ //200 charge leeway
|
||||
@@ -91,8 +87,7 @@
|
||||
|
||||
// Check how much uncleaned mess is on the station
|
||||
for(var/obj/effect/decal/cleanable/M in world)
|
||||
// TODO: Tie into space manager
|
||||
if(!(M.z in config.station_levels)) continue
|
||||
if(!is_station_level(M.z)) continue
|
||||
if(istype(M, /obj/effect/decal/cleanable/blood/gibs))
|
||||
score_mess += 3
|
||||
|
||||
|
||||
@@ -94,7 +94,7 @@ Made by Xhuis
|
||||
shadows += shadow
|
||||
possible_shadowlings -= shadow
|
||||
modePlayer += shadow
|
||||
shadow.special_role = "Shadowling"
|
||||
shadow.special_role = SPECIAL_ROLE_SHADOWLING
|
||||
shadow.restricted_roles = restricted_jobs
|
||||
shadowlings--
|
||||
return 1
|
||||
@@ -145,7 +145,7 @@ Made by Xhuis
|
||||
return 0
|
||||
if(!(new_thrall_mind in shadowling_thralls))
|
||||
shadowling_thralls += new_thrall_mind
|
||||
new_thrall_mind.special_role = "shadowling thrall"
|
||||
new_thrall_mind.special_role = SPECIAL_ROLE_SHADOWLING_THRALL
|
||||
update_shadow_icons_added(new_thrall_mind)
|
||||
new_thrall_mind.current.attack_log += "\[[time_stamp()]\] <span class='danger'>Became a thrall</span>"
|
||||
new_thrall_mind.current.add_language("Shadowling Hivemind")
|
||||
|
||||
@@ -368,7 +368,7 @@
|
||||
"<span class='warning'>False faces all d<b>ark not real not real not--</b></span>")
|
||||
target.setOxyLoss(0) //In case the shadowling was choking them out
|
||||
ticker.mode.add_thrall(target.mind)
|
||||
target.mind.special_role = "shadowling thrall"
|
||||
target.mind.special_role = SPECIAL_ROLE_SHADOWLING_THRALL
|
||||
|
||||
/obj/effect/proc_holder/spell/targeted/shadowling_regenarmor //Resets a shadowling's species to normal, removes genetic defects, and re-equips their armor
|
||||
name = "Rapid Re-Hatch"
|
||||
@@ -828,7 +828,7 @@
|
||||
to_chat(usr, "<span class='shadowling'>You instantly rearrange <b>[target]</b>'s memories, hyptonitizing them into a thrall.</span>")
|
||||
to_chat(target, "<span class='userdanger'><font size=3>An agonizing spike of pain drives into your mind, and--</font></span>")
|
||||
ticker.mode.add_thrall(target.mind)
|
||||
target.mind.special_role = "shadowling thrall"
|
||||
target.mind.special_role = SPECIAL_ROLE_SHADOWLING_THRALL
|
||||
target.add_language("Shadowling Hivemind")
|
||||
|
||||
|
||||
|
||||
@@ -48,7 +48,7 @@
|
||||
break
|
||||
var/datum/mind/traitor = pick(possible_traitors)
|
||||
traitors += traitor
|
||||
traitor.special_role = "traitor"
|
||||
traitor.special_role = SPECIAL_ROLE_TRAITOR
|
||||
var/datum/mindslaves/slaved = new()
|
||||
slaved.masters += traitor
|
||||
traitor.som = slaved //we MIGT want to mindslave someone
|
||||
|
||||
@@ -39,7 +39,7 @@
|
||||
/datum/game_mode/traitor/vampire/post_setup()
|
||||
for(var/datum/mind/vampire in vampires)
|
||||
grant_vampire_powers(vampire.current)
|
||||
vampire.special_role = "Vampire"
|
||||
vampire.special_role = SPECIAL_ROLE_VAMPIRE
|
||||
forge_vampire_objectives(vampire)
|
||||
greet_vampire(vampire)
|
||||
..()
|
||||
@@ -58,7 +58,7 @@
|
||||
var/datum/mindslaves/slaved = new()
|
||||
slaved.masters += vampire
|
||||
vampire.som = slaved //we MIGT want to mindslave someone
|
||||
vampire.special_role = "Vampire" // Needs to be done in pre-setup to prevent role bugs
|
||||
vampire.special_role = SPECIAL_ROLE_VAMPIRE
|
||||
return 1
|
||||
else
|
||||
return 0
|
||||
|
||||
@@ -337,7 +337,7 @@
|
||||
|
||||
ticker.mode.vampire_enthralled.Add(H.mind)
|
||||
ticker.mode.vampire_enthralled[H.mind] = user.mind
|
||||
H.mind.special_role = "VampThrall"
|
||||
H.mind.special_role = SPECIAL_ROLE_VAMPIRE_THRALL
|
||||
to_chat(H, "<span class='danger'>You have been Enthralled by [user]. Follow their every command.</span>")
|
||||
to_chat(user, "<span class='warning'>You have successfully Enthralled [H]. <i>If they refuse to do as you say just adminhelp.</i></span>")
|
||||
log_admin("[ckey(user.key)] has mind-slaved [ckey(H.key)].")
|
||||
|
||||
@@ -100,7 +100,7 @@
|
||||
new_objective.explanation_text = "Protect [H.real_name], the wizard."
|
||||
M.mind.objectives += new_objective
|
||||
ticker.mode.traitors += M.mind
|
||||
M.mind.special_role = "apprentice"
|
||||
M.mind.special_role = SPECIAL_ROLE_WIZARD_APPRENTICE
|
||||
ticker.mode.update_wiz_icons_added(M.mind)
|
||||
M.faction = list("wizard")
|
||||
else
|
||||
@@ -259,7 +259,7 @@ var/global/list/multiverse = list()
|
||||
..()
|
||||
|
||||
/obj/item/weapon/multisword/attack_self(mob/user)
|
||||
if(user.mind.special_role == "apprentice")
|
||||
if(user.mind.special_role == SPECIAL_ROLE_WIZARD_APPRENTICE)
|
||||
to_chat(user, "<span class='warning'>You know better than to touch your teacher's stuff.</span>")
|
||||
return
|
||||
if(cooldown < world.time)
|
||||
@@ -346,7 +346,7 @@ var/global/list/multiverse = list()
|
||||
M.mind.objectives += hijack_objective
|
||||
hijack_objective.explanation_text = "Ensure only [usr.real_name] and their copies are on the shuttle!"
|
||||
to_chat(M, "<B>Objective #[1]</B>: [hijack_objective.explanation_text]")
|
||||
M.mind.special_role = "multiverse traveller"
|
||||
M.mind.special_role = SPECIAL_ROLE_MULTIVERSE
|
||||
log_game("[M.key] was made a multiverse traveller with the objective to help [usr.real_name] hijack.")
|
||||
else
|
||||
var/datum/objective/protect/new_objective = new /datum/objective/protect
|
||||
@@ -355,7 +355,7 @@ var/global/list/multiverse = list()
|
||||
new_objective.explanation_text = "Protect [usr.real_name], your copy, and help them defend the innocent from the mobs of multiverse clones."
|
||||
M.mind.objectives += new_objective
|
||||
to_chat(M, "<B>Objective #[1]</B>: [new_objective.explanation_text]")
|
||||
M.mind.special_role = "multiverse traveller"
|
||||
M.mind.special_role = SPECIAL_ROLE_MULTIVERSE
|
||||
log_game("[M.key] was made a multiverse traveller with the objective to help [usr.real_name] protect the station.")
|
||||
|
||||
/obj/item/weapon/multisword/proc/equip_copy(var/mob/living/carbon/human/M)
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
if(H.stat == 2 || !(H.client))
|
||||
continue
|
||||
if(H.mind)
|
||||
if(H.mind.special_role == "Wizard" || H.mind.special_role == "apprentice")
|
||||
if(H.mind.special_role == SPECIAL_ROLE_WIZARD || H.mind.special_role == SPECIAL_ROLE_WIZARD_APPRENTICE)
|
||||
continue
|
||||
var/randomizeguns = pick(gunslist)
|
||||
var/randomizemagic = pick(magiclist)
|
||||
|
||||
@@ -640,7 +640,7 @@
|
||||
if(!ishuman(H))
|
||||
return 1
|
||||
|
||||
if(H.mind.special_role == "apprentice")
|
||||
if(H.mind.special_role == SPECIAL_ROLE_WIZARD_APPRENTICE)
|
||||
temp = "If you got caught sneaking a peak from your teacher's spellbook, you'd likely be expelled from the Wizard Academy. Better not."
|
||||
return 1
|
||||
|
||||
@@ -689,7 +689,7 @@
|
||||
for(var/obj/effect/proc_holder/spell/knownspell in user.mind.spell_list)
|
||||
if(knownspell.type == S.type)
|
||||
if(user.mind)
|
||||
if(user.mind.special_role == "apprentice" || user.mind.special_role == "Wizard")
|
||||
if(user.mind.special_role == SPECIAL_ROLE_WIZARD_APPRENTICE || user.mind.special_role == SPECIAL_ROLE_WIZARD)
|
||||
to_chat(user, "<span class='notice'>You're already far more versed in this spell than this flimsy how-to book can provide.</span>")
|
||||
else
|
||||
to_chat(user, "<span class='notice'>You've already read this one.</span>")
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
wizards += wizard
|
||||
modePlayer += wizard
|
||||
wizard.assigned_role = "MODE" //So they aren't chosen for other jobs.
|
||||
wizard.special_role = "Wizard"
|
||||
wizard.special_role = SPECIAL_ROLE_WIZARD
|
||||
wizard.original = wizard.current
|
||||
if(wizardstart.len == 0)
|
||||
to_chat(wizard.current, "<B>\red A starting location for you could not be found, please report this bug!</B>")
|
||||
|
||||
@@ -42,7 +42,7 @@
|
||||
|
||||
for(var/datum/mind/xeno in xenos)
|
||||
xeno.assigned_role = "MODE"
|
||||
xeno.special_role = "Alien"
|
||||
xeno.special_role = SPECIAL_ROLE_XENOMORPH
|
||||
set_antag_hud(xeno, "hudalien")//like this is needed...
|
||||
return 1
|
||||
|
||||
@@ -122,8 +122,7 @@
|
||||
command_announcement.Announce("The aliens have nearly succeeded in capturing the station and exterminating the crew. Activate the nuclear failsafe to stop the alien threat once and for all. The Nuclear Authentication Code is [get_nuke_code()] ", "Alien Lifeform Alert")
|
||||
set_security_level("gamma")
|
||||
var/obj/machinery/door/airlock/vault/V = locate(/obj/machinery/door/airlock/vault) in world
|
||||
// TODO: Tie into space manager
|
||||
if(V && (V.z in config.station_levels))
|
||||
if(V && is_station_level(V.z))
|
||||
V.locked = 0
|
||||
V.update_icon()
|
||||
return ..()
|
||||
@@ -143,8 +142,7 @@
|
||||
var/list/livingplayers = list()
|
||||
for(var/mob/M in player_list)
|
||||
var/turf/T = get_turf(M)
|
||||
// TODO: Tie into space manager
|
||||
if((M) && (M.stat != 2) && M.client && T && ((T.z in config.station_levels) || shuttle_master.emergency.mode >= SHUTTLE_ESCAPE && ((T.z in config.station_levels) || (T.z in config.admin_levels))))
|
||||
if((M) && (M.stat != DEAD) && M.client && T && (is_station_level(T.z) || shuttle_master.emergency.mode >= SHUTTLE_ESCAPE && is_secure_level(T.z)))
|
||||
if(ishuman(M))
|
||||
livingplayers += 1
|
||||
return livingplayers.len
|
||||
|
||||
@@ -21,7 +21,7 @@ var/list/whitelist = list()
|
||||
if(guest_jobbans(rank))
|
||||
if(!config.usewhitelist)
|
||||
return 1
|
||||
if(check_rights(R_ADMIN, 0))
|
||||
if(check_rights(R_ADMIN, 0, M))
|
||||
return 1
|
||||
if(!dbcon.IsConnected())
|
||||
to_chat(usr, "\red Unable to connect to whitelist database. Please try again later.<br>")
|
||||
|
||||
@@ -100,6 +100,7 @@
|
||||
C.client.perspective = EYE_PERSPECTIVE
|
||||
C.client.eye = src
|
||||
C.resting = 1
|
||||
C.update_canmove()
|
||||
C.loc = src.loc
|
||||
if(user.pulling == C)
|
||||
user.stop_pulling()
|
||||
|
||||
@@ -769,7 +769,6 @@
|
||||
var/turf/pos = get_turf(src)
|
||||
data["x"] = pos.x
|
||||
data["y"] = pos.y
|
||||
// TODO: Tie into space manager
|
||||
data["z"] = pos.z
|
||||
return data
|
||||
|
||||
|
||||
@@ -113,7 +113,6 @@
|
||||
scrubber.update_icon()
|
||||
|
||||
proc/validscrubber( var/obj/machinery/portable_atmospherics/scrubber/huge/scrubber as obj )
|
||||
// TODO: Tie into space manager
|
||||
if(!isobj(scrubber) || get_dist(scrubber.loc, src.loc) > src.range || scrubber.loc.z != src.loc.z)
|
||||
return 0
|
||||
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
|
||||
/obj/machinery/camera/initialize()
|
||||
..()
|
||||
if(z == ZLEVEL_STATION && prob(3) && !start_active)
|
||||
if(is_station_level(z) && prob(3) && !start_active)
|
||||
toggle_cam()
|
||||
|
||||
/obj/machinery/camera/Destroy()
|
||||
|
||||
@@ -81,7 +81,7 @@
|
||||
assembly.upgrades.Add(new /obj/item/device/assembly/prox_sensor(assembly))
|
||||
setPowerUsage()
|
||||
// Add it to machines that process
|
||||
machines |= src
|
||||
machine_processing |= src
|
||||
|
||||
/obj/machinery/camera/proc/setPowerUsage()
|
||||
var/mult = 1
|
||||
|
||||
@@ -1,10 +1,7 @@
|
||||
/mob/living/silicon/ai/proc/InvalidTurf(turf/T as turf)
|
||||
if(!T)
|
||||
return 1
|
||||
// TODO: Tie into space manager
|
||||
if((T.z in config.admin_levels))
|
||||
return 1
|
||||
if(T.z > MAX_Z)
|
||||
if(!is_level_reachable(T.z))
|
||||
return 1
|
||||
return 0
|
||||
|
||||
|
||||
@@ -75,8 +75,7 @@
|
||||
|
||||
var/list/cameras = list()
|
||||
for(var/obj/machinery/camera/C in cameranet.cameras)
|
||||
// TODO: Tie into space manager
|
||||
if((z > MAX_Z || C.z > MAX_Z) && (C.z != z)) //can only recieve away mission cameras on away missions
|
||||
if((is_away_level(src.z) || is_away_level(C.z)) && !atoms_share_level(C, src)) //can only recieve away mission cameras on away missions
|
||||
continue
|
||||
if(!can_access_camera(C))
|
||||
continue
|
||||
|
||||
@@ -54,8 +54,7 @@
|
||||
if(..(href, href_list))
|
||||
return 1
|
||||
|
||||
// TODO: Tie into space manager
|
||||
if((!(src.z in config.station_levels) && !(src.z in config.admin_levels)))
|
||||
if(!is_secure_level(src.z))
|
||||
to_chat(usr, "<span class='warning'>Unable to establish a connection: You're too far away from the station!</span>")
|
||||
return 1
|
||||
|
||||
@@ -304,8 +303,7 @@
|
||||
if(stat & (NOPOWER|BROKEN))
|
||||
return
|
||||
|
||||
// TODO: Tie into space manager
|
||||
if(!(src.z in list(ZLEVEL_STATION, ZLEVEL_CENTCOMM)))
|
||||
if(!is_secure_level(src.z))
|
||||
to_chat(user, "<span class='warning'>Unable to establish a connection: You're too far away from the station!</span>")
|
||||
return
|
||||
|
||||
|
||||
@@ -20,8 +20,7 @@
|
||||
/obj/machinery/computer/HONKputer/Topic(href, href_list)
|
||||
if(..())
|
||||
return 1
|
||||
// TODO: Tie into space manager
|
||||
if(!(src.z in config.station_levels))
|
||||
if(is_away_level(src.z))
|
||||
to_chat(usr, "<span class='danger'>Unable to establish a connection</span>: You're too far away from the station!")
|
||||
return
|
||||
usr.set_machine(src)
|
||||
@@ -69,8 +68,7 @@
|
||||
/obj/machinery/computer/HONKputer/attack_hand(var/mob/user as mob)
|
||||
if(..())
|
||||
return
|
||||
// TODO: Tie into space manager
|
||||
if(src.z > ZLEVEL_DERELICT)
|
||||
if(is_away_level(src.z))
|
||||
to_chat(user, "<span class='danger'>Unable to establish a connection</span>: You're too far away from the station!")
|
||||
return
|
||||
|
||||
|
||||
@@ -29,8 +29,7 @@
|
||||
|
||||
|
||||
attackby(obj/item/weapon/O as obj, mob/user as mob, params)
|
||||
// TODO: Tie into space manager
|
||||
if(user.z > ZLEVEL_DERELICT)
|
||||
if(is_away_level(user.z))
|
||||
to_chat(user, "<span class='danger'>Unable to establish a connection</span>: You're too far away from the station!")
|
||||
return
|
||||
if(istype(O, /obj/item/weapon/aiModule))
|
||||
|
||||
@@ -19,8 +19,6 @@
|
||||
..()
|
||||
spawn(5)
|
||||
driver_sync()
|
||||
machines += src
|
||||
return
|
||||
|
||||
|
||||
/obj/machinery/computer/pod/proc/driver_sync()
|
||||
@@ -208,7 +206,9 @@
|
||||
id_tags -= ident_tag
|
||||
if(href_list["dstele"])
|
||||
var/choices = list(0)
|
||||
choices += accessable_z_levels
|
||||
var/list/reachable_levels = levels_by_trait(REACHABLE)
|
||||
for(var/datum/space_level/S in reachable_levels)
|
||||
choices += S.zpos
|
||||
var/obj/machinery/computer/pod/deathsquad/D = src
|
||||
var/input = input("Enter the destination Z-Level. The mechs will arrive from the East. Leave 0 if you don't want to set a specific ZLevel", "Mass Driver Controls", 0) in choices
|
||||
D.teleporter_dest = input
|
||||
@@ -362,4 +362,4 @@
|
||||
AM.dir = 8
|
||||
var/atom/target = get_edge_target_turf(AM, AM.dir)
|
||||
AM.throw_at(target, 50, 1)
|
||||
return
|
||||
return
|
||||
|
||||
@@ -65,8 +65,7 @@
|
||||
health_display = "DEAD"
|
||||
else if(total_loss)
|
||||
health_display = "HURT ([total_loss])"
|
||||
// TODO: Tie into space manager
|
||||
if((M.z in config.station_levels) && !istype(M.loc, /turf/space))
|
||||
if(is_station_level(M.z) && !istype(M.loc, /turf/space))
|
||||
loc_display = "[get_area(M)]"
|
||||
dat += "ID: [T.id] <BR>Subject: [M] <BR>Location: [loc_display] <BR>Health: [health_display] <BR>"
|
||||
dat += "<A href='?src=\ref[src];warn=\ref[T]'>(<font color=red><i>Message Holder</i></font>)</A> |<BR>"
|
||||
|
||||
@@ -41,8 +41,7 @@
|
||||
/obj/machinery/computer/secure_data/attack_hand(mob/user as mob)
|
||||
if(..())
|
||||
return
|
||||
// TODO: Tie into space manager
|
||||
if(src.z > ZLEVEL_DERELICT)
|
||||
if(is_away_level(src.z))
|
||||
to_chat(user, "<span class='danger'>Unable to establish a connection</span>: You're too far away from the station!")
|
||||
return
|
||||
var/dat
|
||||
|
||||
@@ -41,8 +41,7 @@
|
||||
if(..())
|
||||
return
|
||||
|
||||
// TODO: Tie into space manager
|
||||
if(src.z > ZLEVEL_DERELICT)
|
||||
if(is_away_level(src.z))
|
||||
to_chat(user, "<span class='danger'>Unable to establish a connection</span>: You're too far away from the station!")
|
||||
return
|
||||
var/dat
|
||||
|
||||
@@ -36,8 +36,8 @@ obj/machinery/door/airlock/proc/execute_current_command()
|
||||
if(command_completed(cur_command))
|
||||
cur_command = null
|
||||
else
|
||||
if(!(src in machines))
|
||||
addAtProcessing()
|
||||
if(!(src in machine_processing))
|
||||
machine_processing += src
|
||||
|
||||
obj/machinery/door/airlock/proc/do_command(var/command)
|
||||
switch(command)
|
||||
|
||||
@@ -98,8 +98,8 @@
|
||||
|
||||
// Set releasetime
|
||||
releasetime = world.timeofday + timetoset
|
||||
if(!(src in machines))
|
||||
addAtProcessing()
|
||||
if(!(src in machine_processing))
|
||||
machine_processing += src
|
||||
|
||||
for(var/obj/machinery/door/window/brigdoor/door in targets)
|
||||
if(door.density)
|
||||
|
||||
@@ -295,9 +295,7 @@ FIRE ALARM
|
||||
pixel_x = (dir & 3)? 0 : (dir == 4 ? -24 : 24)
|
||||
pixel_y = (dir & 3)? (dir ==1 ? -24 : 24) : 0
|
||||
|
||||
// TODO: Tie into space manager
|
||||
// also hwat
|
||||
if(z == ZLEVEL_STATION || ZLEVEL_ASTEROID == 5)
|
||||
if(is_station_contact(src.z))
|
||||
if(security_level)
|
||||
src.overlays += image('icons/obj/monitors.dmi', "overlay_[get_security_level()]")
|
||||
else
|
||||
|
||||
@@ -79,7 +79,7 @@
|
||||
if(beaker)
|
||||
usr.visible_message("<span class='warning'>[usr] attaches [src] to [target].</span>", "<span class='notice'>You attach [src] to [target].</span>")
|
||||
attached = target
|
||||
addAtProcessing()
|
||||
machine_processing += src
|
||||
update_icon()
|
||||
else
|
||||
to_chat(usr, "<span class='warning'>There's nothing attached to the IV drip!</span>")
|
||||
|
||||
@@ -117,6 +117,7 @@ Class Procs:
|
||||
var/use_log = list()
|
||||
var/list/settagwhitelist = list()//WHITELIST OF VARIABLES THAT THE set_tag HREF CAN MODIFY, DON'T PUT SHIT YOU DON'T NEED ON HERE, AND IF YOU'RE GONNA USE set_tag (format_tag() proc), ADD TO THIS LIST.
|
||||
atom_say_verb = "beeps"
|
||||
var/speed_process = 0 // Process as fast as possible?
|
||||
|
||||
/obj/machinery/initialize()
|
||||
addAtProcessing()
|
||||
@@ -128,17 +129,17 @@ Class Procs:
|
||||
myArea = get_area_master(src)
|
||||
|
||||
machines += src
|
||||
|
||||
/obj/machinery/proc/removeAtProcessing()
|
||||
if(myArea)
|
||||
myArea = null
|
||||
|
||||
machines -= src
|
||||
if(!speed_process)
|
||||
machine_processing += src
|
||||
else
|
||||
fast_processing += src
|
||||
|
||||
/obj/machinery/Destroy()
|
||||
if(src in machines)
|
||||
removeAtProcessing()
|
||||
|
||||
if(myArea)
|
||||
myArea = null
|
||||
fast_processing -= src
|
||||
machine_processing -= src
|
||||
machines -= src
|
||||
return ..()
|
||||
|
||||
/obj/machinery/proc/locate_machinery()
|
||||
|
||||
@@ -2,22 +2,23 @@ var/const/SAFETY_COOLDOWN = 100
|
||||
|
||||
/obj/machinery/recycler
|
||||
name = "recycler"
|
||||
desc = "A large crushing machine which is used to recycle small items ineffeciently; there are lights on the side of it."
|
||||
desc = "A large crushing machine used to recycle small items inefficiently. There are lights on the side."
|
||||
icon = 'icons/obj/recycling.dmi'
|
||||
icon_state = "grinder-o0"
|
||||
layer = MOB_LAYER+1 // Overhead
|
||||
anchored = 1
|
||||
density = 1
|
||||
var/safety_mode = 0 // Temporality stops the machine if it detects a mob
|
||||
var/grinding = 0
|
||||
var/safety_mode = 0 // Temporarily stops machine if it detects a mob
|
||||
var/icon_name = "grinder-o"
|
||||
var/blood = 0
|
||||
var/eat_dir = WEST
|
||||
var/amount_produced = 1
|
||||
var/datum/material_container/materials
|
||||
var/crush_damage = 1000
|
||||
var/eat_victim_items = 1
|
||||
var/item_recycle_sound = 'sound/machines/recycler.ogg'
|
||||
|
||||
/obj/machinery/recycler/New()
|
||||
// On us
|
||||
..()
|
||||
component_parts = list()
|
||||
component_parts += new /obj/item/weapon/circuitboard/recycler(null)
|
||||
@@ -56,8 +57,6 @@ var/const/SAFETY_COOLDOWN = 100
|
||||
|
||||
/obj/machinery/recycler/attackby(obj/item/I, mob/user, params)
|
||||
if(default_deconstruction_screwdriver(user, "grinder-oOpen", "grinder-o0", I))
|
||||
if(!panel_open)
|
||||
update_icon()
|
||||
return
|
||||
|
||||
if(exchange_parts(user, I))
|
||||
@@ -69,7 +68,6 @@ var/const/SAFETY_COOLDOWN = 100
|
||||
default_deconstruction_crowbar(I)
|
||||
..()
|
||||
add_fingerprint(user)
|
||||
return
|
||||
|
||||
/obj/machinery/recycler/emag_act(mob/user)
|
||||
if(!emagged)
|
||||
@@ -77,8 +75,8 @@ var/const/SAFETY_COOLDOWN = 100
|
||||
if(safety_mode)
|
||||
safety_mode = 0
|
||||
update_icon()
|
||||
playsound(src.loc, "sparks", 75, 1, -1)
|
||||
to_chat(user, "<span class='notice'>You use the cryptographic sequencer on the [src.name].</span>")
|
||||
playsound(loc, "sparks", 75, 1, -1)
|
||||
to_chat(user, "<span class='notice'>You use the cryptographic sequencer on the [name].</span>")
|
||||
|
||||
/obj/machinery/recycler/update_icon()
|
||||
..()
|
||||
@@ -88,48 +86,51 @@ var/const/SAFETY_COOLDOWN = 100
|
||||
icon_state = icon_name + "[is_powered]" + "[(blood ? "bld" : "")]" // add the blood tag at the end
|
||||
|
||||
// This is purely for admin possession !FUN!.
|
||||
/obj/machinery/recycler/Bump(var/atom/movable/AM)
|
||||
/obj/machinery/recycler/Bump(atom/movable/AM)
|
||||
..()
|
||||
if(AM)
|
||||
Bumped(AM)
|
||||
|
||||
|
||||
/obj/machinery/recycler/Bumped(var/atom/movable/AM)
|
||||
/obj/machinery/recycler/Bumped(atom/movable/AM)
|
||||
|
||||
if(stat & (BROKEN|NOPOWER))
|
||||
return
|
||||
if(safety_mode)
|
||||
return
|
||||
if(!anchored)
|
||||
return
|
||||
// If we're not already grinding something.
|
||||
if(!grinding)
|
||||
grinding = 1
|
||||
spawn(1)
|
||||
grinding = 0
|
||||
else
|
||||
if(safety_mode)
|
||||
return
|
||||
|
||||
var/move_dir = get_dir(loc, AM.loc)
|
||||
if(move_dir == eat_dir)
|
||||
eat(AM)
|
||||
|
||||
/obj/machinery/recycler/proc/eat(atom/AM0, sound = 1)
|
||||
var/list/to_eat = list(AM0)
|
||||
if(istype(AM0, /obj/item))
|
||||
to_eat += AM0.GetAllContents()
|
||||
var/items_recycled = 0
|
||||
|
||||
for(var/i in to_eat)
|
||||
var/atom/movable/AM = i
|
||||
if(isliving(AM))
|
||||
if(emagged)
|
||||
eat(AM)
|
||||
crush_living(AM)
|
||||
else
|
||||
stop(AM)
|
||||
emergency_stop(AM)
|
||||
else if(istype(AM, /obj/item))
|
||||
recycle(AM)
|
||||
else // Can't recycle
|
||||
playsound(src.loc, 'sound/machines/buzz-sigh.ogg', 50, 0)
|
||||
AM.loc = src.loc
|
||||
recycle_item(AM)
|
||||
items_recycled++
|
||||
else
|
||||
playsound(loc, 'sound/machines/buzz-sigh.ogg', 50, 0)
|
||||
AM.loc = loc
|
||||
|
||||
/obj/machinery/recycler/proc/recycle(obj/item/I, sound = 1)
|
||||
I.loc = src.loc
|
||||
if(!istype(I))
|
||||
return
|
||||
if(items_recycled && sound)
|
||||
playsound(loc, item_recycle_sound, 100, 0)
|
||||
|
||||
/obj/machinery/recycler/proc/recycle_item(obj/item/I)
|
||||
I.loc = loc
|
||||
|
||||
if(sound)
|
||||
playsound(src.loc, 'sound/machines/recycler.ogg', 100, 0)
|
||||
var/material_amount = materials.get_item_material_amount(I)
|
||||
if(!material_amount)
|
||||
qdel(I)
|
||||
@@ -139,25 +140,26 @@ var/const/SAFETY_COOLDOWN = 100
|
||||
materials.retrieve_all()
|
||||
|
||||
|
||||
/obj/machinery/recycler/proc/stop(var/mob/living/L)
|
||||
playsound(src.loc, 'sound/machines/buzz-sigh.ogg', 50, 0)
|
||||
/obj/machinery/recycler/proc/emergency_stop(mob/living/L)
|
||||
playsound(loc, 'sound/machines/buzz-sigh.ogg', 50, 0)
|
||||
safety_mode = 1
|
||||
update_icon()
|
||||
L.loc = src.loc
|
||||
L.loc = loc
|
||||
addtimer(src, "reboot", SAFETY_COOLDOWN)
|
||||
|
||||
spawn(SAFETY_COOLDOWN)
|
||||
playsound(src.loc, 'sound/machines/ping.ogg', 50, 0)
|
||||
safety_mode = 0
|
||||
update_icon()
|
||||
/obj/machinery/recycler/proc/reboot()
|
||||
playsound(loc, 'sound/machines/ping.ogg', 50, 0)
|
||||
safety_mode = 0
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/recycler/proc/eat(var/mob/living/L)
|
||||
/obj/machinery/recycler/proc/crush_living(mob/living/L)
|
||||
|
||||
L.loc = src.loc
|
||||
L.loc = loc
|
||||
|
||||
if(issilicon(L))
|
||||
playsound(src.loc, 'sound/machines/recycler.ogg', 100, 0)
|
||||
playsound(loc, 'sound/items/Welder.ogg', 50, 1)
|
||||
else
|
||||
playsound(src.loc, 'sound/effects/splat.ogg', 50, 1)
|
||||
playsound(loc, 'sound/effects/splat.ogg', 50, 1)
|
||||
|
||||
var/gib = 1
|
||||
// By default, the emagged recycler will gib all non-carbons. (human simple animal mobs don't count)
|
||||
@@ -171,10 +173,11 @@ var/const/SAFETY_COOLDOWN = 100
|
||||
blood = 1
|
||||
update_icon()
|
||||
|
||||
// Remove and recycle the equipped items.
|
||||
for(var/obj/item/I in L.get_equipped_items())
|
||||
if(L.unEquip(I))
|
||||
recycle(I, 0)
|
||||
// Remove and recycle the equipped items
|
||||
if(eat_victim_items)
|
||||
for(var/obj/item/I in L.get_equipped_items())
|
||||
if(L.unEquip(I))
|
||||
eat(I, sound = 0)
|
||||
|
||||
// Instantly lie down, also go unconscious from the pain, before you die.
|
||||
L.Paralyse(5)
|
||||
@@ -183,7 +186,8 @@ var/const/SAFETY_COOLDOWN = 100
|
||||
if(gib || emagged == 2)
|
||||
L.gib()
|
||||
else if(emagged == 1)
|
||||
L.adjustBruteLoss(1000)
|
||||
L.adjustBruteLoss(crush_damage)
|
||||
|
||||
|
||||
/obj/machinery/recycler/verb/rotate()
|
||||
set name = "Rotate Clockwise"
|
||||
@@ -192,9 +196,9 @@ var/const/SAFETY_COOLDOWN = 100
|
||||
|
||||
var/mob/living/user = usr
|
||||
|
||||
if(usr.stat || !usr.canmove || usr.restrained())
|
||||
if(usr.incapacitated())
|
||||
return
|
||||
if(src.anchored)
|
||||
if(anchored)
|
||||
to_chat(usr, "[src] is fastened to the floor!")
|
||||
return 0
|
||||
eat_dir = turn(eat_dir, 270)
|
||||
@@ -208,15 +212,22 @@ var/const/SAFETY_COOLDOWN = 100
|
||||
|
||||
var/mob/living/user = usr
|
||||
|
||||
if(usr.stat || !usr.canmove || usr.restrained())
|
||||
if(usr.incapacitated())
|
||||
return
|
||||
if(src.anchored)
|
||||
if(anchored)
|
||||
to_chat(usr, "[src] is fastened to the floor!")
|
||||
return 0
|
||||
eat_dir = turn(eat_dir, 90)
|
||||
to_chat(user, "<span class='notice'>[src] will now accept items from [dir2text(eat_dir)].</span>")
|
||||
return 1
|
||||
|
||||
|
||||
/obj/machinery/recycler/deathtrap
|
||||
name = "dangerous old crusher"
|
||||
emagged = 1
|
||||
crush_damage = 120
|
||||
|
||||
|
||||
/obj/item/weapon/paper/recycler
|
||||
name = "paper - 'garbage duty instructions'"
|
||||
info = "<h2>New Assignment</h2> You have been assigned to collect garbage from trash bins, located around the station. The crewmembers will put their trash into it and you will collect the said trash.<br><br>There is a recycling machine near your closet, inside maintenance; use it to recycle the trash for a small chance to get useful minerals. Then deliver these minerals to cargo or engineering. You are our last hope for a clean station, do not screw this up!"
|
||||
|
||||
@@ -5,8 +5,7 @@
|
||||
/obj/machinery/status_display/supply_display/update()
|
||||
if(!..() && mode == STATUS_DISPLAY_CUSTOM)
|
||||
if(shuttle_master.supply.mode == SHUTTLE_IDLE)
|
||||
// TODO: Tie into space manager
|
||||
if(shuttle_master.supply.z == ZLEVEL_STATION)
|
||||
if(is_station_level(shuttle_master.supply.z))
|
||||
message1 = "CARGO"
|
||||
message2 = "Docked"
|
||||
else
|
||||
|
||||
@@ -61,7 +61,7 @@
|
||||
var/mob/living/carbon/human/N = M
|
||||
ticker.mode.equip_traitor(N)
|
||||
ticker.mode.traitors += N.mind
|
||||
N.mind.special_role = "traitor"
|
||||
N.mind.special_role = SPECIAL_ROLE_TRAITOR
|
||||
var/objective = "Free Objective"
|
||||
switch(rand(1,100))
|
||||
if(1 to 50)
|
||||
@@ -133,7 +133,7 @@
|
||||
singulo.target = src
|
||||
icon_state = "[icontype]1"
|
||||
active = 1
|
||||
machines |= src
|
||||
machine_processing |= src
|
||||
if(user)
|
||||
to_chat(user, "<span class='notice'>You activate the beacon.</span>")
|
||||
|
||||
|
||||
@@ -423,8 +423,9 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept
|
||||
|
||||
/* ###### Prepare the radio connection ###### */
|
||||
|
||||
var/mob/living/carbon/human/H
|
||||
if(!M)
|
||||
var/mob/living/carbon/human/H = new
|
||||
H = new
|
||||
M = H
|
||||
|
||||
var/datum/radio_frequency/connection = radio_controller.return_frequency(frequency)
|
||||
@@ -439,7 +440,7 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept
|
||||
if(data == 1)
|
||||
for(var/obj/item/device/radio/intercom/R in connection.devices["[RADIO_CHAT]"])
|
||||
var/turf/position = get_turf(R)
|
||||
// TODO: Tie into space manager
|
||||
// TODO: Make the radio system cooperate with the space manager
|
||||
if(position && position.z == level)
|
||||
receive |= R.send_hear(display_freq, level)
|
||||
|
||||
@@ -452,7 +453,7 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept
|
||||
if(istype(R, /obj/item/device/radio/headset))
|
||||
continue
|
||||
var/turf/position = get_turf(R)
|
||||
// TODO: Tie into space manager
|
||||
// TODO: Make the radio system cooperate with the space manager
|
||||
if(position && position.z == level)
|
||||
receive |= R.send_hear(display_freq)
|
||||
|
||||
@@ -464,7 +465,7 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept
|
||||
var/datum/radio_frequency/antag_connection = radio_controller.return_frequency(freq)
|
||||
for(var/obj/item/device/radio/R in antag_connection.devices["[RADIO_CHAT]"])
|
||||
var/turf/position = get_turf(R)
|
||||
// TODO: Tie into space manager
|
||||
// TODO: Make the radio system cooperate with the space manager
|
||||
if(position && position.z == level)
|
||||
receive |= R.send_hear(freq)
|
||||
|
||||
@@ -474,7 +475,7 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept
|
||||
else
|
||||
for(var/obj/item/device/radio/R in connection.devices["[RADIO_CHAT]"])
|
||||
var/turf/position = get_turf(R)
|
||||
// TODO: Tie into space manager
|
||||
// TODO: Make the radio system cooperate with the space manager
|
||||
if(position && position.z == level)
|
||||
receive |= R.send_hear(display_freq)
|
||||
|
||||
@@ -596,12 +597,15 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept
|
||||
for(var/mob/R in heard_gibberish)
|
||||
R.show_message(rendered, 2)
|
||||
|
||||
if(H)
|
||||
qdel(H)
|
||||
|
||||
//Use this to test if an obj can communicate with a Telecommunications Network
|
||||
|
||||
/atom/proc/test_telecomms()
|
||||
var/datum/signal/signal = src.telecomms_process()
|
||||
var/turf/position = get_turf(src)
|
||||
// TODO: Tie into space manager
|
||||
// TODO: Make the radio system cooperate with the space manager
|
||||
return (position.z in signal.data["level"]) && signal.data["done"]
|
||||
|
||||
/atom/proc/telecomms_process(var/do_sleep = 1)
|
||||
@@ -620,7 +624,7 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept
|
||||
"type" = 4, // determines what type of radio input it is: test broadcast
|
||||
"reject" = 0,
|
||||
"done" = 0,
|
||||
// TODO: Tie into space manager
|
||||
// TODO: Make the radio system cooperate with the space manager
|
||||
"level" = pos.z // The level it is being broadcasted at.
|
||||
)
|
||||
signal.frequency = PUB_FREQ// Common channel
|
||||
|
||||
@@ -180,12 +180,12 @@
|
||||
var/turf/position = get_turf(src)
|
||||
|
||||
// Toggle on/off getting signals from the station or the current Z level
|
||||
// TODO: Tie into space manager
|
||||
if(src.listening_level == ZLEVEL_STATION) // equals the station
|
||||
// TODO: Could work with the space manager better
|
||||
if(is_station_level(src.listening_level)) // equals the station
|
||||
src.listening_level = position.z
|
||||
return 1
|
||||
else if(position.z == ZLEVEL_TELECOMMS)
|
||||
src.listening_level = ZLEVEL_STATION
|
||||
else if(level_boosts_signal(position.z))
|
||||
src.listening_level = level_name_to_num(MAIN_STATION)
|
||||
return 1
|
||||
return 0
|
||||
|
||||
@@ -234,8 +234,8 @@
|
||||
|
||||
/obj/machinery/telecomms/relay/Options_Menu()
|
||||
var/dat = ""
|
||||
if(src.z == ZLEVEL_TELECOMMS)
|
||||
dat += "<br>Signal Locked to Station: <A href='?src=\ref[src];change_listening=1'>[listening_level == ZLEVEL_STATION ? "TRUE" : "FALSE"]</a>"
|
||||
if(level_boosts_signal(src.z))
|
||||
dat += "<br>Signal Locked to Station: <A href='?src=\ref[src];change_listening=1'>[is_station_level(listening_level) ? "TRUE" : "FALSE"]</a>"
|
||||
dat += "<br>Broadcasting: <A href='?src=\ref[src];broadcast=1'>[broadcasting ? "YES" : "NO"]</a>"
|
||||
dat += "<br>Receiving: <A href='?src=\ref[src];receive=1'>[receiving ? "YES" : "NO"]</a>"
|
||||
return dat
|
||||
|
||||
@@ -56,7 +56,7 @@ var/global/list/obj/machinery/telecomms/telecomms_list = list()
|
||||
continue
|
||||
if(amount && send_count >= amount)
|
||||
break
|
||||
// TODO: Tie into space manager
|
||||
// TODO: Make the radio system cooperate with the space manager
|
||||
if(machine.loc.z != listening_level)
|
||||
if(long_range_link == 0 && machine.long_range_link == 0)
|
||||
continue
|
||||
@@ -115,7 +115,7 @@ var/global/list/obj/machinery/telecomms/telecomms_list = list()
|
||||
if(!listening_level)
|
||||
//Defaults to our Z level!
|
||||
var/turf/position = get_turf(src)
|
||||
// TODO: Tie into space manager
|
||||
// TODO: Make the radio system cooperate with the space manager
|
||||
listening_level = position.z
|
||||
|
||||
/obj/machinery/telecomms/initialize()
|
||||
@@ -141,7 +141,7 @@ var/global/list/obj/machinery/telecomms/telecomms_list = list()
|
||||
/obj/machinery/telecomms/proc/add_link(var/obj/machinery/telecomms/T)
|
||||
var/turf/position = get_turf(src)
|
||||
var/turf/T_position = get_turf(T)
|
||||
// TODO: Tie into space manager
|
||||
// TODO: Make the radio system cooperate with the space manager
|
||||
if((position.z == T_position.z) || (src.long_range_link && T.long_range_link))
|
||||
for(var/x in autolinkers)
|
||||
if(T.autolinkers.Find(x))
|
||||
|
||||
@@ -182,8 +182,7 @@
|
||||
var/turf/T = get_turf(R)
|
||||
if(!T)
|
||||
continue
|
||||
// TODO: Tie into space manager
|
||||
if((T.z in config.admin_levels) || T.z > ZLEVEL_EMPTY)
|
||||
if(!is_teleport_allowed(T.z))
|
||||
continue
|
||||
if(R.syndicate == 1 && emagged == 0)
|
||||
continue
|
||||
@@ -199,13 +198,12 @@
|
||||
continue
|
||||
else
|
||||
var/mob/M = I.loc
|
||||
if(M.stat == 2)
|
||||
if(M.stat == DEAD)
|
||||
if(M.timeofdeath + 6000 < world.time)
|
||||
continue
|
||||
var/turf/T = get_turf(M)
|
||||
if(!T) continue
|
||||
// TODO: Tie into space manager
|
||||
if((T.z in config.admin_levels)) continue
|
||||
if(!is_teleport_allowed(T.z)) continue
|
||||
var/tmpname = M.real_name
|
||||
if(areaindex[tmpname])
|
||||
tmpname = "[tmpname] ([++areaindex[tmpname]])"
|
||||
@@ -227,8 +225,7 @@
|
||||
var/turf/T = get_turf(R)
|
||||
if(!T || !R.teleporter_hub || !R.teleporter_console)
|
||||
continue
|
||||
// TODO: Tie into space manager
|
||||
if((T.z in config.admin_levels) || T.z > ZLEVEL_EMPTY)
|
||||
if(!is_teleport_allowed(T.z))
|
||||
continue
|
||||
var/tmpname = T.loc.name
|
||||
if(areaindex[tmpname])
|
||||
@@ -323,7 +320,7 @@
|
||||
return power_station
|
||||
|
||||
/obj/machinery/teleport/hub/Bumped(M as mob|obj)
|
||||
if(z == ZLEVEL_CENTCOMM && !admin_usage)
|
||||
if(!is_teleport_allowed(z) && !admin_usage)
|
||||
to_chat(M, "You can't use this here.")
|
||||
return
|
||||
if(power_station && power_station.engaged && !panel_open)
|
||||
@@ -401,7 +398,7 @@
|
||||
/obj/machinery/teleport/perma/Bumped(M as mob|obj)
|
||||
if(stat & (BROKEN|NOPOWER))
|
||||
return
|
||||
if(z == ZLEVEL_CENTCOMM)
|
||||
if(!is_teleport_allowed(z))
|
||||
to_chat(M, "You can't use this here.")
|
||||
return
|
||||
if(target && !recalibrating && !panel_open)
|
||||
|
||||
@@ -382,8 +382,7 @@
|
||||
range = RANGED
|
||||
|
||||
action(atom/target)
|
||||
// TODO: Tie into space manager
|
||||
if(!action_checks(target) || (src.loc.z in config.admin_levels)) return
|
||||
if(!action_checks(target) || !is_teleport_allowed(src.loc.z)) return
|
||||
var/turf/T = get_turf(target)
|
||||
if(T)
|
||||
set_ready_state(0)
|
||||
@@ -404,8 +403,7 @@
|
||||
|
||||
|
||||
action(atom/target)
|
||||
// TODO: Tie into space manager
|
||||
if(!action_checks(target) || (src.loc.z in config.admin_levels)) return
|
||||
if(!action_checks(target) || !is_teleport_allowed(src.loc.z)) return
|
||||
var/list/theareas = list()
|
||||
for(var/area/AR in orange(100, chassis))
|
||||
if(AR in theareas) continue
|
||||
|
||||
@@ -969,7 +969,7 @@
|
||||
if(!AI || !isAI(occupant)) //Mech does not have an AI for a pilot
|
||||
to_chat(user, "<span class='warning'>No AI detected in the [name] onboard computer.</span>")
|
||||
return
|
||||
if(AI.mind.special_role == "malfunction") //Malf AIs cannot leave mechs. Except through death.
|
||||
if(AI.mind.special_role == SPECIAL_ROLE_MALF) //Malf AIs cannot leave mechs. Except through death.
|
||||
to_chat(user, "<span class='boldannounce'>ACCESS DENIED.</span>")
|
||||
return
|
||||
AI.aiRestorePowerRoutine = 0//So the AI initially has power.
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
|
||||
switch(name) //some of these are probably obsolete
|
||||
if("shuttle")
|
||||
shuttle_z = z
|
||||
log_debug("Obsolete landmark '[name]' at ([x],[y],[z])")
|
||||
qdel(src)
|
||||
|
||||
if("airtunnel_stop")
|
||||
|
||||
@@ -61,7 +61,6 @@
|
||||
return null
|
||||
|
||||
var/turf/T = get_turf(user.loc)
|
||||
// TODO: Tie into space manager
|
||||
if(T.z != current.z || !current.can_use())
|
||||
to_chat(user, "<span class='danger'>[src] has lost the signal.</span>")
|
||||
current = null
|
||||
@@ -226,7 +225,6 @@
|
||||
to_chat(usr, "<span class='danger'>Something's wrong with that camera. You can't get a feed.</span>")
|
||||
return
|
||||
var/turf/T = get_turf(loc)
|
||||
// TODO: Tie into space manager
|
||||
if(!T || C.z != T.z)
|
||||
to_chat(usr, "<span class='danger'>You can't get a signal.</span>")
|
||||
return
|
||||
|
||||
@@ -124,7 +124,7 @@
|
||||
return -1
|
||||
if(!(0 in level))
|
||||
var/turf/position = get_turf(src)
|
||||
// TODO: Tie into space manager
|
||||
// TODO: Integrate radio with the space manager
|
||||
if(isnull(position) || !(position.z in level))
|
||||
return -1
|
||||
if(!src.listening)
|
||||
|
||||
@@ -36,6 +36,7 @@ var/global/list/datum/stack_recipe/uranium_recipes = list ( \
|
||||
|
||||
var/global/list/datum/stack_recipe/gold_recipes = list ( \
|
||||
new/datum/stack_recipe("golden door", /obj/structure/mineral_door/gold, 10, one_per_turf = 1, on_floor = 1), \
|
||||
new/datum/stack_recipe("Simple Crown", /obj/item/clothing/head/crown, 5), \
|
||||
)
|
||||
|
||||
var/global/list/datum/stack_recipe/plasma_recipes = list ( \
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user