mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-07-21 12:04:48 +01:00
Merge remote-tracking branch 'upstream/master' into departmental-clothing-vendors
This commit is contained in:
+1
-1
@@ -28,7 +28,7 @@ While normally provided, Heads of Staff and Maintainers are not obligated to pub
|
||||
|
||||
All Pull Requests are expected to be tested prior to submission. If a submitted Pull Request fails to pass CI checks, the likelihood of it being merged will be significantly lower. If you can't take the time to compile/test your Pull Request, do not expect a warm reception.
|
||||
|
||||
It is expected that contributors discuss larger design changes on the forums prior to coding a Pull Request. The amount of time spent on any given Pull Request is not relevant. Maintainers are not responsible for contributors wasting their time creating features nobody asked for.
|
||||
It is expected that contributors discuss larger changes on the forums prior to coding a Pull Request. The amount of time spent on any given Pull Request is not relevant. Maintainers are not responsible for contributors wasting their time creating features nobody asked for.
|
||||
|
||||
Barring highly specific circumstances (such as single line changes, submissions from advanced users, or changes to repo documentation), we will not accept Pull Requests utilising the web editor.
|
||||
|
||||
|
||||
+2754
-3658
File diff suppressed because it is too large
Load Diff
@@ -3395,16 +3395,12 @@
|
||||
/area/ruin/space/ancientstation/rnd)
|
||||
"hU" = (
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/machinery/particle_accelerator/control_box{
|
||||
icon = 'icons/obj/machines/particle_accelerator3.dmi'
|
||||
},
|
||||
/obj/machinery/particle_accelerator/control_box,
|
||||
/turf/simulated/floor/plating,
|
||||
/area/ruin/space/ancientstation/thetacorridor)
|
||||
"hV" = (
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/structure/particle_accelerator/particle_emitter/right{
|
||||
icon = 'icons/obj/machines/particle_accelerator3.dmi'
|
||||
},
|
||||
/obj/structure/particle_accelerator/particle_emitter/right,
|
||||
/turf/simulated/floor/plating,
|
||||
/area/ruin/space/ancientstation/thetacorridor)
|
||||
"hW" = (
|
||||
@@ -4029,9 +4025,7 @@
|
||||
/area/ruin/space/ancientstation/thetacorridor)
|
||||
"jm" = (
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/structure/particle_accelerator/particle_emitter/center{
|
||||
icon = 'icons/obj/machines/particle_accelerator3.dmi'
|
||||
},
|
||||
/obj/structure/particle_accelerator/particle_emitter/center,
|
||||
/turf/simulated/floor/plating,
|
||||
/area/ruin/space/ancientstation/thetacorridor)
|
||||
"jn" = (
|
||||
@@ -4747,23 +4741,17 @@
|
||||
/area/ruin/space/ancientstation/thetacorridor)
|
||||
"kT" = (
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/structure/particle_accelerator/particle_emitter/left{
|
||||
icon = 'icons/obj/machines/particle_accelerator3.dmi'
|
||||
},
|
||||
/obj/structure/particle_accelerator/particle_emitter/left,
|
||||
/turf/simulated/floor/plating,
|
||||
/area/ruin/space/ancientstation/thetacorridor)
|
||||
"kU" = (
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/structure/particle_accelerator/fuel_chamber{
|
||||
icon = 'icons/obj/machines/particle_accelerator3.dmi'
|
||||
},
|
||||
/obj/structure/particle_accelerator/fuel_chamber,
|
||||
/turf/simulated/floor/plating,
|
||||
/area/ruin/space/ancientstation/thetacorridor)
|
||||
"kV" = (
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/structure/particle_accelerator/end_cap{
|
||||
icon = 'icons/obj/machines/particle_accelerator3.dmi'
|
||||
},
|
||||
/obj/structure/particle_accelerator/end_cap,
|
||||
/turf/simulated/floor/plating,
|
||||
/area/ruin/space/ancientstation/thetacorridor)
|
||||
"kW" = (
|
||||
@@ -4785,9 +4773,7 @@
|
||||
/area/ruin/space/ancientstation/rnd)
|
||||
"kY" = (
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/structure/particle_accelerator/power_box{
|
||||
icon = 'icons/obj/machines/particle_accelerator3.dmi'
|
||||
},
|
||||
/obj/structure/particle_accelerator/power_box,
|
||||
/turf/simulated/floor/plating,
|
||||
/area/ruin/space/ancientstation/thetacorridor)
|
||||
"kZ" = (
|
||||
|
||||
@@ -66,6 +66,7 @@
|
||||
/datum/controller/subsystem/##X/New(){\
|
||||
NEW_SS_GLOBAL(SS##X);\
|
||||
PreInit();\
|
||||
ss_id=#X;\
|
||||
}\
|
||||
/datum/controller/subsystem/##X
|
||||
|
||||
@@ -73,5 +74,6 @@
|
||||
/datum/controller/subsystem/processing/##X/New(){\
|
||||
NEW_SS_GLOBAL(SS##X);\
|
||||
PreInit();\
|
||||
ss_id="processing_[#X]";\
|
||||
}\
|
||||
/datum/controller/subsystem/processing/##X
|
||||
|
||||
@@ -118,5 +118,8 @@
|
||||
#define SPLASHSCREEN_LAYER 23
|
||||
#define SPLASHSCREEN_PLANE 23
|
||||
|
||||
// This should always be on top.
|
||||
#define HUD_PLANE_BUILDMODE 30
|
||||
|
||||
///Plane master controller keys
|
||||
#define PLANE_MASTERS_GAME "plane_masters_game"
|
||||
|
||||
@@ -45,7 +45,8 @@
|
||||
// Subsystems shutdown in the reverse of the order they initialize in
|
||||
// The numbers just define the ordering, they are meaningless otherwise.
|
||||
#define INIT_ORDER_PROFILER 101
|
||||
#define INIT_ORDER_TITLE 100 // Load this quickly so people dont see a blank lobby screen
|
||||
#define INIT_ORDER_QUEUE 100 // Load this quickly so people cant queue skip
|
||||
#define INIT_ORDER_TITLE 99 // Load this quickly so people dont see a blank lobby screen
|
||||
#define INIT_ORDER_GARBAGE 21
|
||||
#define INIT_ORDER_DBCORE 20
|
||||
#define INIT_ORDER_BLACKBOX 19
|
||||
|
||||
@@ -203,5 +203,6 @@ GLOBAL_VAR_INIT(midnight_rollovers, 0)
|
||||
GLOBAL_VAR_INIT(rollovercheck_last_timeofday, 0)
|
||||
/proc/update_midnight_rollover()
|
||||
if(world.timeofday < GLOB.rollovercheck_last_timeofday) //TIME IS GOING BACKWARDS!
|
||||
return GLOB.midnight_rollovers++
|
||||
GLOB.midnight_rollovers++
|
||||
GLOB.rollovercheck_last_timeofday = world.timeofday
|
||||
return GLOB.midnight_rollovers
|
||||
|
||||
@@ -44,7 +44,8 @@ GLOBAL_LIST_INIT(drinks, list("beer2","hot_coco","orangejuice","tomatojuice","li
|
||||
"vodkatonic","ginfizz","bahama_mama","singulo","sbiten","devilskiss","red_mead",
|
||||
"mead","iced_beer","grog","aloe","andalusia","alliescocktail","soy_latte",
|
||||
"cafe_latte","acidspit","amasec","neurotoxin","hippiesdelight","bananahonk",
|
||||
"silencer","changelingsting","irishcarbomb","syndicatebomb","erikasurprise","driestmartini", "flamingmoe"))
|
||||
"silencer","changelingsting","irishcarbomb","syndicatebomb","erikasurprise","driestmartini", "flamingmoe",
|
||||
"arnold_palmer","gimlet","sidecar","whiskeysour","mintjulep","pinacolada"))
|
||||
|
||||
//Liver Toxins list
|
||||
GLOBAL_LIST_INIT(liver_toxins, list("toxin", "plasma", "sacid", "facid", "cyanide","amanitin", "carpotoxin"))
|
||||
|
||||
@@ -50,8 +50,6 @@ GLOBAL_VAR_INIT(copier_items_printed_logged, FALSE)
|
||||
|
||||
GLOBAL_DATUM_INIT(data_core, /datum/datacore, new) // Station datacore, manifest, etc
|
||||
|
||||
GLOBAL_VAR_INIT(panic_bunker_enabled, FALSE) // Is the panic bunker enabled
|
||||
|
||||
GLOBAL_LIST_EMPTY(ability_verbs) // Create-level abilities
|
||||
GLOBAL_LIST_INIT(pipe_colors, list("grey" = PIPE_COLOR_GREY, "red" = PIPE_COLOR_RED, "blue" = PIPE_COLOR_BLUE, "cyan" = PIPE_COLOR_CYAN, "green" = PIPE_COLOR_GREEN, "yellow" = PIPE_COLOR_YELLOW, "purple" = PIPE_COLOR_PURPLE))
|
||||
|
||||
|
||||
@@ -67,6 +67,9 @@
|
||||
if(modifiers["shift"] && modifiers["alt"])
|
||||
AltShiftClickOn(A)
|
||||
return
|
||||
if(modifiers["shift"] && modifiers["middle"])
|
||||
ShiftMiddleClickOn(A)
|
||||
return
|
||||
if(modifiers["middle"])
|
||||
MiddleClickOn(A)
|
||||
if(controlled_mech) //Are we piloting a mech? Placed here so the modifiers are not overridden.
|
||||
@@ -128,6 +131,8 @@
|
||||
A.AICtrlShiftClick(src)
|
||||
/mob/living/silicon/ai/AltShiftClickOn(atom/A)
|
||||
A.AIAltShiftClick(src)
|
||||
/mob/living/silicon/ai/ShiftMiddleClickOn(atom/A)
|
||||
A.AIShiftMiddleClick(src)
|
||||
/mob/living/silicon/ai/ShiftClickOn(atom/A)
|
||||
A.AIShiftClick(src)
|
||||
/mob/living/silicon/ai/CtrlClickOn(atom/A)
|
||||
@@ -148,6 +153,9 @@
|
||||
/atom/proc/AIAltShiftClick()
|
||||
return
|
||||
|
||||
/atom/proc/AIShiftMiddleClick()
|
||||
return
|
||||
|
||||
/atom/proc/AIShiftClick(mob/living/user) // borgs use this too
|
||||
if(user.client)
|
||||
user.examinate(src)
|
||||
@@ -215,3 +223,8 @@
|
||||
if(!ai_control_check(user))
|
||||
return
|
||||
toggle_light(user)
|
||||
|
||||
/obj/machinery/door/airlock/AIShiftMiddleClick(mob/user) // Toggles door timings.
|
||||
if(!ai_control_check(user))
|
||||
return
|
||||
toggle_speed(user)
|
||||
|
||||
@@ -363,9 +363,11 @@
|
||||
A.AltShiftClick(src)
|
||||
return
|
||||
|
||||
/atom/proc/AltShiftClick(mob/user)
|
||||
/mob/proc/ShiftMiddleClickOn(atom/A)
|
||||
return
|
||||
|
||||
/atom/proc/AltShiftClick(mob/user)
|
||||
return
|
||||
|
||||
/*
|
||||
Misc helpers
|
||||
|
||||
@@ -30,6 +30,9 @@
|
||||
if(modifiers["middle"] && modifiers["ctrl"])
|
||||
CtrlMiddleClickOn(A)
|
||||
return
|
||||
if(modifiers["shift"] && modifiers["middle"])
|
||||
ShiftMiddleClickOn(A)
|
||||
return
|
||||
if(modifiers["middle"])
|
||||
MiddleClickOn(A)
|
||||
return
|
||||
@@ -126,7 +129,8 @@
|
||||
A.BorgCtrlShiftClick(src)
|
||||
/mob/living/silicon/robot/AltShiftClickOn(atom/A)
|
||||
A.BorgAltShiftClick(src)
|
||||
|
||||
/mob/living/silicon/robot/ShiftMiddleClickOn(atom/A)
|
||||
A.BorgShiftMiddleClick(src)
|
||||
|
||||
/atom/proc/BorgShiftClick(mob/user)
|
||||
if(user.client && user.client.eye == user)
|
||||
@@ -148,6 +152,8 @@
|
||||
/atom/proc/BorgAltShiftClick()
|
||||
return
|
||||
|
||||
/atom/proc/BorgShiftMiddleClick()
|
||||
return
|
||||
|
||||
// AIRLOCKS
|
||||
|
||||
@@ -163,6 +169,8 @@
|
||||
/obj/machinery/door/airlock/BorgAltShiftClick(mob/living/silicon/robot/user) // Enables emergency override on doors! Forwards to AI code.
|
||||
AIAltShiftClick(user)
|
||||
|
||||
/obj/machinery/door/airlock/BorgShiftMiddleClick(mob/living/silicon/robot/user) //Toggles door timing. Forwards to AI code.
|
||||
AIShiftMiddleClick(user)
|
||||
|
||||
// APC
|
||||
|
||||
|
||||
@@ -176,8 +176,3 @@
|
||||
//1 = standard hud
|
||||
//2 = reduced hud (just hands and intent switcher)
|
||||
//3 = no hud (for screenshots)
|
||||
|
||||
|
||||
#define HUD_LAYER_SCREEN 20
|
||||
|
||||
#define HUD_LAYER_BUILDMODE 30
|
||||
|
||||
@@ -32,7 +32,9 @@ GLOBAL_DATUM_INIT(configuration, /datum/server_configuration, new())
|
||||
var/datum/configuration_section/logging_configuration/logging
|
||||
/// Holder for the MC configuration datum
|
||||
var/datum/configuration_section/mc_configuration/mc
|
||||
/// Holder for the MC configuration datum
|
||||
/// Holder for the metrics configuration datum
|
||||
var/datum/configuration_section/metrics_configuration/metrics
|
||||
/// Holder for the movement configuration datum
|
||||
var/datum/configuration_section/movement_configuration/movement
|
||||
/// Holder for the overflow configuration datum
|
||||
var/datum/configuration_section/overflow_configuration/overflow
|
||||
@@ -71,6 +73,7 @@ GLOBAL_DATUM_INIT(configuration, /datum/server_configuration, new())
|
||||
jobs = new()
|
||||
logging = new()
|
||||
mc = new()
|
||||
metrics = new()
|
||||
movement = new()
|
||||
overflow = new()
|
||||
ruins = new()
|
||||
@@ -99,6 +102,7 @@ GLOBAL_DATUM_INIT(configuration, /datum/server_configuration, new())
|
||||
jobs.load_data(raw_config_data["job_configuration"])
|
||||
logging.load_data(raw_config_data["logging_configuration"])
|
||||
mc.load_data(raw_config_data["mc_configuration"])
|
||||
metrics.load_data(raw_config_data["metrics_configuration"])
|
||||
movement.load_data(raw_config_data["movement_configuration"])
|
||||
overflow.load_data(raw_config_data["overflow_configuration"])
|
||||
ruins.load_data(raw_config_data["ruin_configuration"])
|
||||
|
||||
@@ -14,8 +14,6 @@
|
||||
var/lobby_time = 240
|
||||
/// Ban all Guest BYOND accounts
|
||||
var/guest_ban = TRUE
|
||||
/// Player threshold to automatically enable panic bunker
|
||||
var/panic_bunker_threshold = 150
|
||||
/// Allow players to use AntagHUD?
|
||||
var/allow_antag_hud = TRUE
|
||||
/// Forbid players from rejoining if they use AntagHUD?
|
||||
@@ -121,7 +119,6 @@
|
||||
|
||||
// Numbers
|
||||
CONFIG_LOAD_NUM(lobby_time, data["lobby_time"])
|
||||
CONFIG_LOAD_NUM(panic_bunker_threshold, data["panic_bunker_threshold"])
|
||||
CONFIG_LOAD_NUM(base_loadout_points, data["base_loadout_points"])
|
||||
CONFIG_LOAD_NUM(cryo_penalty_period, data["cryo_penalty_period"])
|
||||
CONFIG_LOAD_NUM(minimum_client_build, data["minimum_client_build"])
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
/// Config holder for stuff relating to metrics management
|
||||
/datum/configuration_section/metrics_configuration
|
||||
// NO EDITS OR READS TO THIS EVER
|
||||
protection_state = PROTECTION_PRIVATE
|
||||
/// Are metrics enabled or disabled
|
||||
var/enable_metrics = FALSE
|
||||
/// Endpoint to send metrics to, including protocol
|
||||
var/metrics_endpoint = null
|
||||
/// Endpoint authorisation API key
|
||||
var/metrics_api_token = null
|
||||
|
||||
/datum/configuration_section/metrics_configuration/load_data(list/data)
|
||||
// Use the load wrappers here. That way the default isnt made 'null' if you comment out the config line
|
||||
CONFIG_LOAD_BOOL(enable_metrics, data["enable_metrics"])
|
||||
|
||||
CONFIG_LOAD_STR(metrics_endpoint, data["metrics_endpoint"])
|
||||
CONFIG_LOAD_STR(metrics_api_token, data["metrics_api_token"])
|
||||
@@ -2,6 +2,8 @@
|
||||
/datum/controller/subsystem
|
||||
// Metadata; you should define these.
|
||||
name = "fire codertrain" //name of the subsystem
|
||||
/// Subsystem ID. Used for when we need a technical name for the SS
|
||||
var/ss_id = "fire_codertrain_again"
|
||||
var/init_order = INIT_ORDER_DEFAULT //order of initialization. Higher numbers are initialized first, lower numbers later. Use defines in __DEFINES/subsystems.dm for easy understanding of order.
|
||||
var/wait = 20 //time to wait (in deciseconds) between each call to fire(). Must be a positive integer.
|
||||
var/priority = FIRE_PRIORITY_DEFAULT //When mutiple subsystems need to run in the same tick, higher priority subsystems will run first and be given a higher share of the tick before MC_TICK_CHECK triggers a sleep
|
||||
@@ -227,3 +229,17 @@
|
||||
if("queued_priority") //editing this breaks things.
|
||||
return 0
|
||||
. = ..()
|
||||
|
||||
/**
|
||||
* Returns the metrics for the subsystem.
|
||||
*
|
||||
* This can be overriden on subtypes for variables that could affect tick usage
|
||||
* Example: ATs on SSair
|
||||
*/
|
||||
/datum/controller/subsystem/proc/get_metrics()
|
||||
SHOULD_CALL_PARENT(TRUE)
|
||||
var/list/out = list()
|
||||
out["cost"] = cost
|
||||
out["tick_usage"] = tick_usage
|
||||
out["custom"] = list() // Override as needed on child
|
||||
return out
|
||||
|
||||
@@ -11,6 +11,11 @@ SUBSYSTEM_DEF(acid)
|
||||
/datum/controller/subsystem/acid/stat_entry()
|
||||
..("P:[processing.len]")
|
||||
|
||||
/datum/controller/subsystem/acid/get_metrics()
|
||||
. = ..()
|
||||
var/list/cust = list()
|
||||
cust["processing"] = length(processing)
|
||||
.["custom"] = cust
|
||||
|
||||
/datum/controller/subsystem/acid/fire(resumed = 0)
|
||||
if(!resumed)
|
||||
|
||||
@@ -66,6 +66,12 @@ SUBSYSTEM_DEF(air)
|
||||
msg += "AT/MS:[round((cost ? active_turfs.len/cost : 0),0.1)]"
|
||||
..(msg)
|
||||
|
||||
/datum/controller/subsystem/air/get_metrics()
|
||||
. = ..()
|
||||
var/list/cust = list()
|
||||
cust["active_turfs"] = length(active_turfs)
|
||||
cust["hotspots"] = length(hotspots)
|
||||
.["custom"] = cust
|
||||
|
||||
/datum/controller/subsystem/air/Initialize(timeofday)
|
||||
setup_overlays() // Assign icons and such for gas-turf-overlays
|
||||
|
||||
@@ -12,6 +12,12 @@ SUBSYSTEM_DEF(fires)
|
||||
..("P:[processing.len]")
|
||||
|
||||
|
||||
/datum/controller/subsystem/fires/get_metrics()
|
||||
. = ..()
|
||||
var/list/cust = list()
|
||||
cust["processing"] = length(processing)
|
||||
.["custom"] = cust
|
||||
|
||||
/datum/controller/subsystem/fires/fire(resumed = 0)
|
||||
if(!resumed)
|
||||
src.currentrun = processing.Copy()
|
||||
|
||||
@@ -61,6 +61,22 @@ SUBSYSTEM_DEF(garbage)
|
||||
msg += " | Fail:[fail_counts.Join(",")]"
|
||||
..(msg)
|
||||
|
||||
/datum/controller/subsystem/garbage/get_metrics()
|
||||
. = ..()
|
||||
var/list/cust = list()
|
||||
if((delslasttick + gcedlasttick) == 0) // Account for DIV0
|
||||
cust["gcr"] = 0
|
||||
else
|
||||
cust["gcr"] = (gcedlasttick / (delslasttick + gcedlasttick))
|
||||
cust["total_harddels"] = totaldels
|
||||
cust["total_softdels"] = totalgcs
|
||||
var/i = 0
|
||||
for(var/list/L in queues)
|
||||
i++
|
||||
cust["queue_[i]"] = length(L)
|
||||
|
||||
.["custom"] = cust
|
||||
|
||||
/datum/controller/subsystem/garbage/Shutdown()
|
||||
//Adds the del() log to the qdel log file
|
||||
var/list/dellog = list()
|
||||
|
||||
@@ -11,6 +11,14 @@ SUBSYSTEM_DEF(lighting)
|
||||
/datum/controller/subsystem/lighting/stat_entry()
|
||||
..("L:[length(sources_queue)]|C:[length(corners_queue)]|O:[length(objects_queue)]")
|
||||
|
||||
/datum/controller/subsystem/lighting/get_metrics()
|
||||
. = ..()
|
||||
var/list/cust = list()
|
||||
cust["sources_queue"] = length(sources_queue)
|
||||
cust["corners_queue"] = length(corners_queue)
|
||||
cust["objects_queue"] = length(objects_queue)
|
||||
.["custom"] = cust
|
||||
|
||||
/datum/controller/subsystem/lighting/Initialize(timeofday)
|
||||
if(!initialized)
|
||||
if(GLOB.configuration.general.starlight)
|
||||
|
||||
@@ -20,6 +20,12 @@ SUBSYSTEM_DEF(machines)
|
||||
fire()
|
||||
return ..()
|
||||
|
||||
/datum/controller/subsystem/machines/get_metrics()
|
||||
. = ..()
|
||||
var/list/cust = list()
|
||||
cust["processing"] = length(processing)
|
||||
.["custom"] = cust
|
||||
|
||||
/datum/controller/subsystem/machines/proc/makepowernets()
|
||||
for(var/datum/powernet/PN in powernets)
|
||||
qdel(PN)
|
||||
|
||||
@@ -62,7 +62,7 @@ SUBSYSTEM_DEF(mapping)
|
||||
log_startup_progress("Populating lavaland...")
|
||||
var/lavaland_setup_timer = start_watch()
|
||||
seedRuins(list(level_name_to_num(MINING)), GLOB.configuration.ruins.lavaland_ruin_budget, /area/lavaland/surface/outdoors/unexplored, GLOB.lava_ruins_templates)
|
||||
spawn_rivers(list(level_name_to_num(MINING)))
|
||||
spawn_rivers(level_name_to_num(MINING))
|
||||
log_startup_progress("Successfully populated lavaland in [stop_watch(lavaland_setup_timer)]s.")
|
||||
|
||||
// Now we make a list of areas for teleport locs
|
||||
|
||||
@@ -0,0 +1,47 @@
|
||||
SUBSYSTEM_DEF(metrics)
|
||||
name = "Metrics"
|
||||
wait = 30 SECONDS
|
||||
offline_implications = "Server metrics will no longer be ingested into monitoring systems. No immediate action is needed."
|
||||
runlevels = RUNLEVEL_LOBBY | RUNLEVEL_SETUP | RUNLEVEL_GAME | RUNLEVEL_POSTGAME // ALL THE LEVELS
|
||||
flags = SS_KEEP_TIMING // This needs to ingest every 30 IRL seconds, not ingame seconds.
|
||||
/// The real time of day the server started. Used to calculate time drift
|
||||
var/world_init_time = 0 // Not set in here. Set in world/New()
|
||||
|
||||
/datum/controller/subsystem/metrics/Initialize(start_timeofday)
|
||||
if(!GLOB.configuration.metrics.enable_metrics)
|
||||
flags |= SS_NO_FIRE // Disable firing to save CPU
|
||||
return ..()
|
||||
|
||||
|
||||
/datum/controller/subsystem/metrics/fire(resumed)
|
||||
SShttp.create_async_request(RUSTG_HTTP_METHOD_POST, GLOB.configuration.metrics.metrics_endpoint, get_metrics_json(), list(
|
||||
"Authorization" = "ApiKey [GLOB.configuration.metrics.metrics_api_token]",
|
||||
"Content-Type" = "application/json"
|
||||
))
|
||||
|
||||
/datum/controller/subsystem/metrics/proc/get_metrics_json()
|
||||
var/list/out = list()
|
||||
out["@timestamp"] = time_stamp() // This is required by ElasticSearch, complete with this name. DO NOT REMOVE THIS.
|
||||
out["cpu"] = world.cpu
|
||||
// out["maptick"] = world.map_cpu // TODO: 514
|
||||
out["elapsed_processed"] = world.time
|
||||
out["elapsed_real"] = (REALTIMEOFDAY - world_init_time)
|
||||
out["client_count"] = length(GLOB.clients)
|
||||
out["round_id"] = text2num(GLOB.round_id) // This is so we can filter the metrics by a single round ID
|
||||
|
||||
// Funnel in all SS metrics
|
||||
var/list/ss_data = list()
|
||||
for(var/datum/controller/subsystem/SS in Master.subsystems)
|
||||
ss_data[SS.ss_id] = SS.get_metrics()
|
||||
|
||||
out["subsystems"] = ss_data
|
||||
// And send it all
|
||||
return json_encode(out)
|
||||
|
||||
/*
|
||||
|
||||
// Uncomment this if you add new metrics to verify how the JSON formats
|
||||
|
||||
/client/verb/debugmetricts()
|
||||
usr << browse(SSmetrics.get_metrics_json(), "window=aadebug")
|
||||
*/
|
||||
@@ -12,6 +12,12 @@ SUBSYSTEM_DEF(mobs)
|
||||
/// The amount of giant spiders that exist in the world. Used for mob capping.
|
||||
var/giant_spiders = 0
|
||||
|
||||
/datum/controller/subsystem/mobs/get_metrics()
|
||||
. = ..()
|
||||
var/list/cust = list()
|
||||
cust["processing"] = length(GLOB.mob_living_list)
|
||||
.["custom"] = cust
|
||||
|
||||
/datum/controller/subsystem/mobs/stat_entry()
|
||||
..("P:[GLOB.mob_living_list.len]")
|
||||
|
||||
|
||||
@@ -14,6 +14,12 @@ SUBSYSTEM_DEF(processing)
|
||||
/datum/controller/subsystem/processing/stat_entry()
|
||||
..("[stat_tag]:[processing.len]")
|
||||
|
||||
/datum/controller/subsystem/processing/get_metrics()
|
||||
. = ..()
|
||||
var/list/cust = list()
|
||||
cust["processing"] = length(processing)
|
||||
.["custom"] = cust
|
||||
|
||||
/datum/controller/subsystem/processing/fire(resumed = 0)
|
||||
if(!resumed)
|
||||
currentrun = processing.Copy()
|
||||
|
||||
@@ -0,0 +1,45 @@
|
||||
#define QUEUE_DATA_FILE "data/queue_data.json"
|
||||
// These are defines for the sake of making sure we get the right keys
|
||||
#define QUEUE_DATA_FILE_THRESHOLD_KEY "threshold"
|
||||
#define QUEUE_DATA_FILE_ENABLED_KEY "enabled"
|
||||
#define QUEUE_DATA_FILE_PERSISTENT_KEY "persistent"
|
||||
|
||||
SUBSYSTEM_DEF(queue)
|
||||
name = "Server Queue"
|
||||
init_order = INIT_ORDER_QUEUE // 100
|
||||
flags = SS_NO_FIRE
|
||||
/// Threshold of players to queue new people
|
||||
var/queue_threshold = 0
|
||||
/// Whether the queue is enabled or not
|
||||
var/queue_enabled = FALSE
|
||||
/// Whether to persist these settings over multiple rounds
|
||||
var/persist_queue = FALSE
|
||||
/// List of ckeys allowed to bypass queue this round
|
||||
var/list/queue_bypass_list = list()
|
||||
/// Last world.time we let a ckey in. 3 second delay between each letin to avoid a mass bubble
|
||||
var/last_letin_time = 0
|
||||
|
||||
/datum/controller/subsystem/queue/Initialize(start_timeofday)
|
||||
if(fexists(QUEUE_DATA_FILE))
|
||||
try
|
||||
var/F = file2text(QUEUE_DATA_FILE)
|
||||
var/list/data = json_decode(F)
|
||||
queue_threshold = data[QUEUE_DATA_FILE_THRESHOLD_KEY]
|
||||
queue_enabled = data[QUEUE_DATA_FILE_ENABLED_KEY]
|
||||
persist_queue = data[QUEUE_DATA_FILE_PERSISTENT_KEY]
|
||||
catch
|
||||
stack_trace("Failed to load [QUEUE_DATA_FILE] from disk due to malformed JSON. You may need to setup the queue again.")
|
||||
|
||||
return ..()
|
||||
|
||||
/datum/controller/subsystem/queue/Shutdown()
|
||||
// Save if persistent
|
||||
if(persist_queue)
|
||||
if(fexists(QUEUE_DATA_FILE))
|
||||
fdel(QUEUE_DATA_FILE)
|
||||
var/data = list()
|
||||
data[QUEUE_DATA_FILE_THRESHOLD_KEY] = queue_threshold
|
||||
data[QUEUE_DATA_FILE_ENABLED_KEY] = queue_enabled
|
||||
data[QUEUE_DATA_FILE_PERSISTENT_KEY] = persist_queue
|
||||
var/json_data = json_encode(data)
|
||||
text2file(json_data, QUEUE_DATA_FILE)
|
||||
@@ -12,6 +12,11 @@ SUBSYSTEM_DEF(spacedrift)
|
||||
/datum/controller/subsystem/spacedrift/stat_entry()
|
||||
..("P:[processing.len]")
|
||||
|
||||
/datum/controller/subsystem/spacedrift/get_metrics()
|
||||
. = ..()
|
||||
var/list/cust = list()
|
||||
cust["processing"] = length(processing)
|
||||
.["custom"] = cust
|
||||
|
||||
/datum/controller/subsystem/spacedrift/fire(resumed = 0)
|
||||
if(!resumed)
|
||||
|
||||
@@ -27,6 +27,13 @@ SUBSYSTEM_DEF(tgui)
|
||||
/datum/controller/subsystem/tgui/stat_entry()
|
||||
..("P:[processing_uis.len]")
|
||||
|
||||
/datum/controller/subsystem/tgui/get_metrics()
|
||||
. = ..()
|
||||
var/list/cust = list()
|
||||
cust["processing"] = length(processing_uis)
|
||||
.["custom"] = cust
|
||||
|
||||
|
||||
/datum/controller/subsystem/tgui/fire(resumed = 0)
|
||||
if (!resumed)
|
||||
src.currentrun = processing_uis.Copy()
|
||||
|
||||
@@ -15,6 +15,12 @@ SUBSYSTEM_DEF(throwing)
|
||||
/datum/controller/subsystem/throwing/stat_entry()
|
||||
..("P:[processing.len]")
|
||||
|
||||
/datum/controller/subsystem/throwing/get_metrics()
|
||||
. = ..()
|
||||
var/list/cust = list()
|
||||
cust["processing"] = length(processing)
|
||||
.["custom"] = cust
|
||||
|
||||
/datum/controller/subsystem/throwing/fire(resumed = 0)
|
||||
if(!resumed)
|
||||
src.currentrun = processing.Copy()
|
||||
|
||||
@@ -3,6 +3,7 @@ GLOBAL_REAL(SSmentor_tickets, /datum/controller/subsystem/tickets/mentor_tickets
|
||||
/datum/controller/subsystem/tickets/mentor_tickets/New()
|
||||
NEW_SS_GLOBAL(SSmentor_tickets)
|
||||
PreInit()
|
||||
ss_id = "mentor_tickets"
|
||||
|
||||
/datum/controller/subsystem/tickets/mentor_tickets
|
||||
name = "Mentor Tickets"
|
||||
|
||||
@@ -41,6 +41,12 @@ SUBSYSTEM_DEF(tickets)
|
||||
|
||||
var/ticketCounter = 1
|
||||
|
||||
/datum/controller/subsystem/tickets/get_metrics()
|
||||
. = ..()
|
||||
var/list/cust = list()
|
||||
cust["tickets"] = length(allTickets) // Not a perf metric but I want to see a graph where SSair usage spikes and 20 tickets come in
|
||||
.["custom"] = cust
|
||||
|
||||
/datum/controller/subsystem/tickets/Initialize()
|
||||
if(!close_messages)
|
||||
close_messages = list("<font color='red' size='4'><b>- [ticket_name] Rejected! -</b></font>",
|
||||
|
||||
@@ -37,6 +37,12 @@ SUBSYSTEM_DEF(timer)
|
||||
/datum/controller/subsystem/timer/stat_entry(msg)
|
||||
..("B:[bucket_count] P:[length(second_queue)] H:[length(hashes)] C:[length(clienttime_timers)] S:[length(timer_id_dict)]")
|
||||
|
||||
/datum/controller/subsystem/timer/get_metrics()
|
||||
. = ..()
|
||||
var/list/cust = list()
|
||||
cust["bucket_count"] = bucket_count
|
||||
.["custom"] = cust
|
||||
|
||||
/datum/controller/subsystem/timer/fire(resumed = FALSE)
|
||||
var/lit = last_invoke_tick
|
||||
var/last_check = world.time - TICKS2DS(BUCKET_LEN*1.5)
|
||||
|
||||
@@ -9,11 +9,17 @@ SUBSYSTEM_DEF(weather)
|
||||
flags = SS_BACKGROUND
|
||||
wait = 10
|
||||
runlevels = RUNLEVEL_GAME
|
||||
offline_implications = "Ash storms will no longer trigger. No immediate action is needed."
|
||||
offline_implications = "Ash storms will no longer trigger. No immediate action is needed."
|
||||
var/list/processing = list()
|
||||
var/list/eligible_zlevels = list()
|
||||
var/list/next_hit_by_zlevel = list() //Used by barometers to know when the next storm is coming
|
||||
|
||||
/datum/controller/subsystem/weather/get_metrics()
|
||||
. = ..()
|
||||
var/list/cust = list()
|
||||
cust["processing"] = length(processing)
|
||||
.["custom"] = cust
|
||||
|
||||
/datum/controller/subsystem/weather/fire()
|
||||
// process active weather
|
||||
for(var/V in processing)
|
||||
|
||||
+110
-110
@@ -356,159 +356,159 @@ GLOBAL_VAR_INIT(record_id_num, 1001)
|
||||
job_clothes = H.mind.assigned_role
|
||||
switch(job_clothes)
|
||||
if("Head of Personnel")
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "hop_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY)
|
||||
clothes_s = new /icon('icons/mob/clothing/uniform.dmi', "hop_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/clothing/feet.dmi', "brown"), ICON_UNDERLAY)
|
||||
if("Nanotrasen Representative")
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "officer_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "laceups"), ICON_UNDERLAY)
|
||||
clothes_s = new /icon('icons/mob/clothing/uniform.dmi', "officer_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/clothing/feet.dmi', "laceups"), ICON_UNDERLAY)
|
||||
if("Blueshield")
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "officer_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "jackboots"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/hands.dmi', "swat_gl"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "blueshield"), ICON_OVERLAY)
|
||||
clothes_s = new /icon('icons/mob/clothing/uniform.dmi', "officer_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/clothing/feet.dmi', "jackboots"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/clothing/hands.dmi', "swat_gl"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/clothing/suit.dmi', "blueshield"), ICON_OVERLAY)
|
||||
if("Magistrate")
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "really_black_suit_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "laceups"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "judge"), ICON_OVERLAY)
|
||||
clothes_s = new /icon('icons/mob/clothing/uniform.dmi', "really_black_suit_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/clothing/feet.dmi', "laceups"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/clothing/suit.dmi', "judge"), ICON_OVERLAY)
|
||||
if("Bartender")
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "ba_suit_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
|
||||
clothes_s = new /icon('icons/mob/clothing/uniform.dmi', "ba_suit_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/clothing/feet.dmi', "black"), ICON_UNDERLAY)
|
||||
if("Botanist")
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "hydroponics_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
|
||||
clothes_s = new /icon('icons/mob/clothing/uniform.dmi', "hydroponics_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/clothing/feet.dmi', "black"), ICON_UNDERLAY)
|
||||
if("Chef")
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "chef_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
|
||||
clothes_s = new /icon('icons/mob/clothing/uniform.dmi', "chef_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/clothing/feet.dmi', "black"), ICON_UNDERLAY)
|
||||
if("Janitor")
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "janitor_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
|
||||
clothes_s = new /icon('icons/mob/clothing/uniform.dmi', "janitor_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/clothing/feet.dmi', "black"), ICON_UNDERLAY)
|
||||
if("Librarian")
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "red_suit_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
|
||||
clothes_s = new /icon('icons/mob/clothing/uniform.dmi', "red_suit_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/clothing/feet.dmi', "black"), ICON_UNDERLAY)
|
||||
if("Barber")
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "barber_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
|
||||
clothes_s = new /icon('icons/mob/clothing/uniform.dmi', "barber_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/clothing/feet.dmi', "black"), ICON_UNDERLAY)
|
||||
if("Clown")
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "clown_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "clown"), ICON_UNDERLAY)
|
||||
clothes_s = new /icon('icons/mob/clothing/uniform.dmi', "clown_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/clothing/feet.dmi', "clown"), ICON_UNDERLAY)
|
||||
if("Mime")
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "mime_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
|
||||
clothes_s = new /icon('icons/mob/clothing/uniform.dmi', "mime_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/clothing/feet.dmi', "black"), ICON_UNDERLAY)
|
||||
if("Quartermaster")
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "qm_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY)
|
||||
clothes_s = new /icon('icons/mob/clothing/uniform.dmi', "qm_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/clothing/feet.dmi', "brown"), ICON_UNDERLAY)
|
||||
if("Cargo Technician")
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "cargotech_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
|
||||
clothes_s = new /icon('icons/mob/clothing/uniform.dmi', "cargotech_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/clothing/feet.dmi', "black"), ICON_UNDERLAY)
|
||||
if("Shaft Miner")
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "explorer_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "explorer"), ICON_UNDERLAY)
|
||||
clothes_s = new /icon('icons/mob/clothing/uniform.dmi', "explorer_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/clothing/feet.dmi', "explorer"), ICON_UNDERLAY)
|
||||
if("Lawyer")
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "internalaffairs_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY)
|
||||
clothes_s = new /icon('icons/mob/clothing/uniform.dmi', "internalaffairs_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/clothing/feet.dmi', "brown"), ICON_UNDERLAY)
|
||||
if("Chaplain")
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "chapblack_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
|
||||
clothes_s = new /icon('icons/mob/clothing/uniform.dmi', "chapblack_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/clothing/feet.dmi', "black"), ICON_UNDERLAY)
|
||||
if("Research Director")
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "director_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_open"), ICON_OVERLAY)
|
||||
clothes_s = new /icon('icons/mob/clothing/uniform.dmi', "director_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/clothing/feet.dmi', "brown"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/clothing/suit.dmi', "labcoat_open"), ICON_OVERLAY)
|
||||
if("Scientist")
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "toxinswhite_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_tox_open"), ICON_OVERLAY)
|
||||
clothes_s = new /icon('icons/mob/clothing/uniform.dmi', "toxinswhite_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/clothing/feet.dmi', "white"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/clothing/suit.dmi', "labcoat_tox_open"), ICON_OVERLAY)
|
||||
if("Chemist")
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "chemistrywhite_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_chem_open"), ICON_OVERLAY)
|
||||
clothes_s = new /icon('icons/mob/clothing/uniform.dmi', "chemistrywhite_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/clothing/feet.dmi', "white"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/clothing/suit.dmi', "labcoat_chem_open"), ICON_OVERLAY)
|
||||
if("Chief Medical Officer")
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "cmo_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_cmo_open"), ICON_OVERLAY)
|
||||
clothes_s = new /icon('icons/mob/clothing/uniform.dmi', "cmo_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/clothing/feet.dmi', "brown"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/clothing/suit.dmi', "labcoat_cmo_open"), ICON_OVERLAY)
|
||||
if("Medical Doctor")
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "medical_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_open"), ICON_OVERLAY)
|
||||
clothes_s = new /icon('icons/mob/clothing/uniform.dmi', "medical_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/clothing/feet.dmi', "white"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/clothing/suit.dmi', "labcoat_open"), ICON_OVERLAY)
|
||||
if("Coroner")
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "scrubsblack_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_mort_open"), ICON_OVERLAY)
|
||||
clothes_s = new /icon('icons/mob/clothing/uniform.dmi', "scrubsblack_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/clothing/feet.dmi', "white"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/clothing/suit.dmi', "labcoat_mort_open"), ICON_OVERLAY)
|
||||
if("Geneticist")
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "geneticswhite_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_gen_open"), ICON_OVERLAY)
|
||||
clothes_s = new /icon('icons/mob/clothing/uniform.dmi', "geneticswhite_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/clothing/feet.dmi', "white"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/clothing/suit.dmi', "labcoat_gen_open"), ICON_OVERLAY)
|
||||
if("Virologist")
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "virologywhite_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_vir_open"), ICON_OVERLAY)
|
||||
clothes_s = new /icon('icons/mob/clothing/uniform.dmi', "virologywhite_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/clothing/feet.dmi', "white"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/clothing/suit.dmi', "labcoat_vir_open"), ICON_OVERLAY)
|
||||
if("Psychiatrist")
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "psych_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "laceups"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_open"), ICON_UNDERLAY)
|
||||
clothes_s = new /icon('icons/mob/clothing/uniform.dmi', "psych_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/clothing/feet.dmi', "laceups"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/clothing/suit.dmi', "labcoat_open"), ICON_UNDERLAY)
|
||||
if("Paramedic")
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "paramedic_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
|
||||
clothes_s = new /icon('icons/mob/clothing/uniform.dmi', "paramedic_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/clothing/feet.dmi', "black"), ICON_UNDERLAY)
|
||||
if("Captain")
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "captain_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY)
|
||||
clothes_s = new /icon('icons/mob/clothing/uniform.dmi', "captain_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/clothing/feet.dmi', "brown"), ICON_UNDERLAY)
|
||||
if("Head of Security")
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "hosred_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "jackboots"), ICON_UNDERLAY)
|
||||
clothes_s = new /icon('icons/mob/clothing/uniform.dmi', "hosred_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/clothing/feet.dmi', "jackboots"), ICON_UNDERLAY)
|
||||
if("Warden")
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "warden_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "jackboots"), ICON_UNDERLAY)
|
||||
clothes_s = new /icon('icons/mob/clothing/uniform.dmi', "warden_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/clothing/feet.dmi', "jackboots"), ICON_UNDERLAY)
|
||||
if("Detective")
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "detective_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "detective"), ICON_OVERLAY)
|
||||
clothes_s = new /icon('icons/mob/clothing/uniform.dmi', "detective_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/clothing/feet.dmi', "brown"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/clothing/suit.dmi', "detective"), ICON_OVERLAY)
|
||||
if("Security Pod Pilot")
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "secred_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "jackboots"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "bomber"), ICON_OVERLAY)
|
||||
clothes_s = new /icon('icons/mob/clothing/uniform.dmi', "secred_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/clothing/feet.dmi', "jackboots"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/clothing/suit.dmi', "bomber"), ICON_OVERLAY)
|
||||
if("Brig Physician")
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "medical_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "fr_jacket_open"), ICON_OVERLAY)
|
||||
clothes_s = new /icon('icons/mob/clothing/uniform.dmi', "medical_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/clothing/feet.dmi', "white"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/clothing/suit.dmi', "fr_jacket_open"), ICON_OVERLAY)
|
||||
if("Security Officer")
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "secred_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "jackboots"), ICON_UNDERLAY)
|
||||
clothes_s = new /icon('icons/mob/clothing/uniform.dmi', "secred_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/clothing/feet.dmi', "jackboots"), ICON_UNDERLAY)
|
||||
if("Chief Engineer")
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "chief_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/belt.dmi', "utility"), ICON_OVERLAY)
|
||||
clothes_s = new /icon('icons/mob/clothing/uniform.dmi', "chief_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/clothing/feet.dmi', "brown"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/clothing/belt.dmi', "utility"), ICON_OVERLAY)
|
||||
if("Station Engineer")
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "engine_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "orange"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/belt.dmi', "utility"), ICON_OVERLAY)
|
||||
clothes_s = new /icon('icons/mob/clothing/uniform.dmi', "engine_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/clothing/feet.dmi', "orange"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/clothing/belt.dmi', "utility"), ICON_OVERLAY)
|
||||
if("Life Support Specialist")
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "atmos_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/belt.dmi', "utility"), ICON_OVERLAY)
|
||||
clothes_s = new /icon('icons/mob/clothing/uniform.dmi', "atmos_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/clothing/feet.dmi', "black"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/clothing/belt.dmi', "utility"), ICON_OVERLAY)
|
||||
if("Mechanic")
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "mechanic_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "orange"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/belt.dmi', "utility"), ICON_OVERLAY)
|
||||
clothes_s = new /icon('icons/mob/clothing/uniform.dmi', "mechanic_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/clothing/feet.dmi', "orange"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/clothing/belt.dmi', "utility"), ICON_OVERLAY)
|
||||
if("Roboticist")
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "robotics_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_open"), ICON_OVERLAY)
|
||||
clothes_s = new /icon('icons/mob/clothing/uniform.dmi', "robotics_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/clothing/feet.dmi', "black"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/clothing/suit.dmi', "labcoat_open"), ICON_OVERLAY)
|
||||
if("Syndicate Agent")
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "syndicate_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
|
||||
clothes_s = new /icon('icons/mob/clothing/uniform.dmi', "syndicate_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/clothing/feet.dmi', "black"), ICON_UNDERLAY)
|
||||
if("Syndicate Officer")
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "syndicate_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "jackboots"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/hands.dmi', "swat_gl"), ICON_UNDERLAY)
|
||||
clothes_s = new /icon('icons/mob/clothing/uniform.dmi', "syndicate_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/clothing/feet.dmi', "jackboots"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/clothing/hands.dmi', "swat_gl"), ICON_UNDERLAY)
|
||||
if("Syndicate Nuclear Operative")
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "syndicate_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "jackboots"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/hands.dmi', "swat_gl"), ICON_UNDERLAY)
|
||||
clothes_s = new /icon('icons/mob/clothing/uniform.dmi', "syndicate_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/clothing/feet.dmi', "jackboots"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/clothing/hands.dmi', "swat_gl"), ICON_UNDERLAY)
|
||||
else if(H.mind && (H.mind.assigned_role in get_all_centcom_jobs()))
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "officer_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "laceups"), ICON_UNDERLAY)
|
||||
clothes_s = new /icon('icons/mob/clothing/uniform.dmi', "officer_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/clothing/feet.dmi', "laceups"), ICON_UNDERLAY)
|
||||
else
|
||||
clothes_s = new /icon('icons/mob/uniform.dmi', "grey_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
|
||||
clothes_s = new /icon('icons/mob/clothing/uniform.dmi', "grey_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/clothing/feet.dmi', "black"), ICON_UNDERLAY)
|
||||
|
||||
preview_icon.Blend(face_s, ICON_OVERLAY) // Why do we do this twice
|
||||
if(clothes_s)
|
||||
|
||||
@@ -78,7 +78,7 @@
|
||||
|
||||
/client/proc/debug_variables(datum/D in world)
|
||||
set category = "Debug"
|
||||
set name = "View Variables"
|
||||
set name = "\[Admin\] View Variables"
|
||||
|
||||
var/static/cookieoffset = rand(1, 9999) //to force cookies to reset after the round.
|
||||
|
||||
|
||||
@@ -36,6 +36,14 @@
|
||||
if(prob(2))
|
||||
affected_mob.visible_message("<span class='danger'>[affected_mob] coughs up butterflies!</span>", \
|
||||
"<span class='userdanger'>You cough up butterflies!</span>")
|
||||
new /mob/living/simple_animal/butterfly(affected_mob.loc)
|
||||
new /mob/living/simple_animal/butterfly(affected_mob.loc)
|
||||
return
|
||||
for(var/i in 1 to 2)
|
||||
var/mob/living/simple_animal/butterfly/B = new(affected_mob.loc)
|
||||
addtimer(CALLBACK(B, /mob/living/simple_animal/butterfly/.proc/decompose), rand(5, 25) SECONDS)
|
||||
|
||||
/**
|
||||
* Made so severe anxiety does not overload the SSmob while keeping it's effect
|
||||
*/
|
||||
/mob/living/simple_animal/butterfly/proc/decompose()
|
||||
visible_message("<span class='notice'>[src] decomposes due to being outside of its original habitat for too long!</span>",
|
||||
"<span class='userdanger'>You decompose for being too long out of your habitat!</span>")
|
||||
melt()
|
||||
|
||||
@@ -49,6 +49,18 @@
|
||||
..()
|
||||
D.set_light(4)
|
||||
|
||||
/datum/dog_fashion/head/hardhat
|
||||
name = "Engineer REAL_NAME"
|
||||
desc = "Trust him, he's an engineer."
|
||||
|
||||
/datum/dog_fashion/head/hardhat/white
|
||||
name = "Chief engineer REAL_NAME"
|
||||
desc = "Hasn't delamed the engine once."
|
||||
|
||||
/datum/dog_fashion/head/hardhat/red
|
||||
name = "Fire chief REAL_NAME"
|
||||
desc = "Some days you're the dog, some days you're the hydrant."
|
||||
|
||||
/datum/dog_fashion/head/helmet
|
||||
name = "Sergeant REAL_NAME"
|
||||
desc = "The ever-loyal, the ever-vigilant."
|
||||
|
||||
@@ -558,11 +558,12 @@ GLOBAL_LIST_INIT(spells, typesof(/obj/effect/proc_holder/spell))
|
||||
if(((!user.mind) || !(src in user.mind.spell_list)) && !(src in user.mob_spell_list))
|
||||
if(show_message)
|
||||
to_chat(user, "<span class='warning'>You shouldn't have this spell! Something's wrong.</span>")
|
||||
return 0
|
||||
return FALSE
|
||||
|
||||
var/turf/T = get_turf(user)
|
||||
if(is_admin_level(T.z) && !centcom_cancast) //Certain spells are not allowed on the centcom zlevel
|
||||
return 0
|
||||
if(!centcom_cancast) //Certain spells are not allowed on the centcom zlevel
|
||||
var/turf/T = get_turf(user)
|
||||
if(T && is_admin_level(T.z))
|
||||
return FALSE
|
||||
|
||||
if(!holy_area_cancast && user.holy_check())
|
||||
return FALSE
|
||||
@@ -573,21 +574,21 @@ GLOBAL_LIST_INIT(spells, typesof(/obj/effect/proc_holder/spell))
|
||||
if(charge_counter < charge_max)
|
||||
if(show_message)
|
||||
to_chat(user, still_recharging_msg)
|
||||
return 0
|
||||
return FALSE
|
||||
if("charges")
|
||||
if(!charge_counter)
|
||||
if(show_message)
|
||||
to_chat(user, "<span class='notice'>[name] has no charges left.</span>")
|
||||
return 0
|
||||
return FALSE
|
||||
if(!ghost)
|
||||
if(user.stat && !stat_allowed)
|
||||
if(show_message)
|
||||
to_chat(user, "<span class='notice'>You can't cast this spell while incapacitated.</span>")
|
||||
return 0
|
||||
return FALSE
|
||||
if(ishuman(user) && (invocation_type == "whisper" || invocation_type == "shout") && user.is_muzzled())
|
||||
if(show_message)
|
||||
to_chat(user, "Mmmf mrrfff!")
|
||||
return 0
|
||||
return FALSE
|
||||
|
||||
if(ishuman(user))
|
||||
var/mob/living/carbon/human/H = user
|
||||
|
||||
@@ -56,8 +56,7 @@
|
||||
qdel(holder)
|
||||
if(!QDELETED(target))
|
||||
if(mobloc.density)
|
||||
for(var/direction in GLOB.alldirs)
|
||||
var/turf/T = get_step(mobloc, direction)
|
||||
for(var/turf/T in orange(7))
|
||||
if(T)
|
||||
if(target.Move(T))
|
||||
break
|
||||
|
||||
@@ -787,6 +787,14 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
|
||||
reference = "50M"
|
||||
item = /obj/item/ammo_box/magazine/sniper_rounds
|
||||
|
||||
/datum/uplink_item/ammo/sniper/antimatter
|
||||
name = "Sniper - .50 Antimatter Magazine"
|
||||
desc = "A 6-round magazine of antimatter ammo for use with .50 sniper rifles. \
|
||||
Able to heavily damage objects, and delimb people."
|
||||
reference = "50A"
|
||||
item = /obj/item/ammo_box/magazine/sniper_rounds/antimatter
|
||||
cost = 5
|
||||
|
||||
/datum/uplink_item/ammo/sniper/soporific
|
||||
name = "Sniper - .50 Soporific Magazine"
|
||||
desc = "A 3-round magazine of soporific ammo designed for use with .50 sniper rifles. Put your enemies to sleep today!"
|
||||
|
||||
@@ -346,7 +346,7 @@
|
||||
var/obj/machinery/firealarm/F = alarm
|
||||
F.update_fire_light(fire)
|
||||
for(var/obj/machinery/light/L in src)
|
||||
L.update()
|
||||
L.update(TRUE, TRUE, FALSE)
|
||||
|
||||
/**
|
||||
* unset the fire alarm visual affects in an area
|
||||
@@ -360,7 +360,7 @@
|
||||
var/obj/machinery/firealarm/F = alarm
|
||||
F.update_fire_light(fire)
|
||||
for(var/obj/machinery/light/L in src)
|
||||
L.update()
|
||||
L.update(TRUE, TRUE, FALSE)
|
||||
|
||||
/area/proc/updateicon()
|
||||
var/weather_icon
|
||||
|
||||
@@ -191,6 +191,7 @@
|
||||
/obj/item/gun/magic/tentacle
|
||||
name = "tentacle"
|
||||
desc = "A fleshy tentacle that can stretch out and grab things or people."
|
||||
icon = 'icons/obj/items.dmi'
|
||||
icon_state = "tentacle"
|
||||
item_state = "tentacle"
|
||||
flags = ABSTRACT | NODROP | NOBLUDGEON | DROPDEL
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
sharp = TRUE
|
||||
hitsound = 'sound/weapons/bladeslice.ogg'
|
||||
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
|
||||
sprite_sheets_inhand = list("Skrell" = 'icons/mob/species/skrell/held.dmi') // To stop skrell stabbing themselves in the head
|
||||
sprite_sheets_inhand = list("Skrell" = 'icons/mob/clothing/species/skrell/held.dmi') // To stop skrell stabbing themselves in the head
|
||||
|
||||
/obj/item/melee/cultblade/New()
|
||||
if(SSticker.mode)
|
||||
@@ -187,9 +187,9 @@
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
|
||||
armor = list("melee" = -50, "bullet" = -50, "laser" = -50,"energy" = -50, "bomb" = -50, "bio" = -50, "rad" = -50, "fire" = 0, "acid" = 0)
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/suit.dmi',
|
||||
"Drask" = 'icons/mob/species/drask/suit.dmi',
|
||||
"Grey" = 'icons/mob/species/grey/suit.dmi'
|
||||
"Vox" = 'icons/mob/clothing/species/vox/suit.dmi',
|
||||
"Drask" = 'icons/mob/clothing/species/drask/suit.dmi',
|
||||
"Grey" = 'icons/mob/clothing/species/grey/suit.dmi'
|
||||
)
|
||||
hoodtype = /obj/item/clothing/head/hooded/flagellant_hood
|
||||
|
||||
@@ -220,9 +220,9 @@
|
||||
flags_cover = HEADCOVERSEYES
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/head.dmi',
|
||||
"Drask" = 'icons/mob/species/drask/head.dmi',
|
||||
"Grey" = 'icons/mob/species/grey/head.dmi'
|
||||
"Vox" = 'icons/mob/clothing/species/vox/head.dmi',
|
||||
"Drask" = 'icons/mob/clothing/species/drask/head.dmi',
|
||||
"Grey" = 'icons/mob/clothing/species/grey/head.dmi'
|
||||
)
|
||||
|
||||
/obj/item/whetstone/cult
|
||||
|
||||
@@ -948,11 +948,7 @@ structure_check() searches for nearby cultist structures required for the invoca
|
||||
V.Grant(ghost)
|
||||
//GM.Grant(ghost)
|
||||
while(!QDELETED(user))
|
||||
if(!(user in T))
|
||||
user.visible_message("<span class='warning'>A spectral tendril wraps around [user] and pulls [user.p_them()] back to the rune!</span>")
|
||||
Beam(user, icon_state = "drainbeam", time = 2)
|
||||
user.forceMove(get_turf(src)) //NO ESCAPE :^)
|
||||
if(user.key)
|
||||
if(user.key || QDELETED(src))
|
||||
user.visible_message("<span class='warning'>[user] slowly relaxes, the glow around [user.p_them()] dimming.</span>",
|
||||
"<span class='danger'>You are re-united with your physical form. [src] releases its hold over you.</span>")
|
||||
user.Weaken(3)
|
||||
@@ -960,12 +956,16 @@ structure_check() searches for nearby cultist structures required for the invoca
|
||||
if(user.health <= 10)
|
||||
to_chat(ghost, "<span class='cultitalic'>Your body can no longer sustain the connection!</span>")
|
||||
break
|
||||
if(!(user in T))
|
||||
user.visible_message("<span class='warning'>A spectral tendril wraps around [user] and pulls [user.p_them()] back to the rune!</span>")
|
||||
Beam(user, icon_state = "drainbeam", time = 2)
|
||||
user.forceMove(get_turf(src)) //NO ESCAPE :^)
|
||||
sleep(5)
|
||||
CM.Remove(ghost)
|
||||
V.Remove(ghost)
|
||||
//GM.Remove(ghost)
|
||||
if(user.grab_ghost())
|
||||
CM.Remove(ghost)
|
||||
V.Remove(ghost)
|
||||
//GM.Remove(ghost)
|
||||
user.remove_atom_colour(ADMIN_COLOUR_PRIORITY, RUNE_COLOR_DARKRED)
|
||||
user.grab_ghost()
|
||||
user = null
|
||||
rune_in_use = FALSE
|
||||
|
||||
|
||||
@@ -358,6 +358,7 @@
|
||||
item_state = "alienpistol"
|
||||
origin_tech = "combat=4;magnets=7;powerstorage=3;abductor=3"
|
||||
trigger_guard = TRIGGER_GUARD_ALLOW_ALL
|
||||
can_holster = TRUE
|
||||
|
||||
/obj/item/paper/abductor
|
||||
name = "Dissection Guide"
|
||||
|
||||
@@ -123,7 +123,7 @@ Made by Xhuis
|
||||
..()
|
||||
|
||||
/datum/game_mode/proc/greet_shadow(datum/mind/shadow)
|
||||
to_chat(shadow.current, "<b>Currently, you are disguised as an employee aboard [world.name].</b>")
|
||||
to_chat(shadow.current, "<b>Currently, you are disguised as an employee aboard [station_name()].</b>")
|
||||
to_chat(shadow.current, "<b>In your limited state, you have two abilities: Hatch and Shadowling Hivemind (:8).</b>")
|
||||
to_chat(shadow.current, "<b>Any other shadowlings are your allies. You must assist them as they shall assist you.</b>")
|
||||
to_chat(shadow.current, "<span class='motd'>For more information, check the wiki page: ([GLOB.configuration.url.wiki_url]/index.php/Shadowling)</span>")
|
||||
|
||||
@@ -145,8 +145,8 @@
|
||||
/datum/theft_objective/supermatter_sliver
|
||||
name = "a supermatter sliver"
|
||||
typepath = /obj/item/nuke_core/supermatter_sliver
|
||||
protected_jobs = list("Chief Engineer", "Engineer", "Atmospheric Technician") //Unlike other steal objectives, all jobs in the department have easy access, and would not be noticed at all stealing this
|
||||
location_override = "Engineering. You can use the box and instructions provided to harvest the sliver"
|
||||
protected_jobs = list("Chief Engineer", "Station Engineer", "Life Support Specialist") //Unlike other steal objectives, all jobs in the department have easy access, and would not be noticed at all stealing this
|
||||
location_override = "Engineering. You can use the box and instructions provided to harvest the sliver."
|
||||
special_equipment = /obj/item/storage/box/syndie_kit/supermatter
|
||||
job_possession = FALSE //The CE / engineers / atmos techs do not carry around supermater slivers.
|
||||
|
||||
|
||||
@@ -218,9 +218,13 @@
|
||||
|
||||
/obj/effect/proc_holder/spell/vampire/mob_aoe/glare/cast(list/targets, mob/user = usr)
|
||||
user.visible_message("<span class='warning'>[user]'s eyes emit a blinding flash!</span>")
|
||||
if(istype(user:glasses, /obj/item/clothing/glasses/sunglasses/blindfold))
|
||||
to_chat(user, "<span class='warning'>You're blindfolded!</span>")
|
||||
return
|
||||
if(ishuman(user))
|
||||
var/mob/living/carbon/human/H = user
|
||||
if(istype(H.glasses, /obj/item/clothing/glasses/sunglasses/blindfold))
|
||||
var/obj/item/clothing/glasses/sunglasses/blindfold/B = H.glasses
|
||||
if(B.tint)
|
||||
to_chat(user, "<span class='warning'>You're blindfolded!</span>")
|
||||
return
|
||||
for(var/mob/living/target in targets)
|
||||
if(!affects(target))
|
||||
continue
|
||||
@@ -453,8 +457,7 @@
|
||||
flick("mist_reappear", animation)
|
||||
sleep(5)
|
||||
if(!user.Move(mobloc))
|
||||
for(var/direction in list(1,2,4,8,5,6,9,10))
|
||||
var/turf/T = get_step(mobloc, direction)
|
||||
for(var/turf/T in orange(7, mobloc))
|
||||
if(T)
|
||||
if(user.Move(T))
|
||||
break
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
|
||||
var/mapping = 0 // For the overview file (overview.dm), not used on this page
|
||||
|
||||
var/list/network = list()
|
||||
var/list/network = list("SS13","Mining Outpost")
|
||||
var/obj/machinery/camera/active_camera
|
||||
var/list/watchers = list()
|
||||
|
||||
|
||||
@@ -814,12 +814,7 @@ About the new airlock wires panel:
|
||||
safe = 1
|
||||
to_chat(usr, "<span class='notice'>The door safeties have been enabled.</span>")
|
||||
if("speed-toggle")
|
||||
if(wires.is_cut(WIRE_SPEED))
|
||||
to_chat(usr, "<span class='warning'>The timing wire is cut - Cannot alter timing.</span>")
|
||||
else if(normalspeed)
|
||||
normalspeed = 0
|
||||
else
|
||||
normalspeed = 1
|
||||
toggle_speed(usr)
|
||||
if("open-close")
|
||||
open_close(usr)
|
||||
else
|
||||
@@ -851,10 +846,16 @@ About the new airlock wires panel:
|
||||
/obj/machinery/door/airlock/proc/toggle_bolt(mob/user)
|
||||
if(wires.is_cut(WIRE_DOOR_BOLTS))
|
||||
to_chat(user, "<span class='warning'>The door bolt control wire has been cut - Door bolts permanently dropped.</span>")
|
||||
else if(lock())
|
||||
to_chat(user, "<span class='notice'>The door bolts have been dropped.</span>")
|
||||
else if(unlock())
|
||||
return
|
||||
|
||||
if(unlock()) // Trying to unbolt
|
||||
to_chat(user, "<span class='notice'>The door bolts have been raised.</span>")
|
||||
return
|
||||
|
||||
if(lock()) // Trying to bolt
|
||||
to_chat(user, "<span class='notice'>The door bolts have been dropped.</span>")
|
||||
user.create_log(MISC_LOG, "Bolted", src)
|
||||
add_hiddenprint(user)
|
||||
|
||||
/obj/machinery/door/airlock/proc/toggle_emergency_status(mob/user)
|
||||
emergency = !emergency
|
||||
@@ -864,6 +865,17 @@ About the new airlock wires panel:
|
||||
to_chat(user, "<span class='notice'>Emergency access has been disabled.</span>")
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/door/airlock/proc/toggle_speed(mob/user)
|
||||
if(wires.is_cut(WIRE_SPEED))
|
||||
to_chat(user, "<span class='warning'>The timing wire has been cut - Cannot alter timing.</span>")
|
||||
return
|
||||
normalspeed = !normalspeed
|
||||
|
||||
if(normalspeed)
|
||||
to_chat(user, "<span class='notice'>The door is now in <b>normal</b> mode.</span>")
|
||||
else
|
||||
to_chat(user, "<span class='notice'>The door is now in <b>fast</b> mode.</span>")
|
||||
|
||||
/obj/machinery/door/airlock/attackby(obj/item/C, mob/user, params)
|
||||
add_fingerprint(user)
|
||||
if(!headbutt_shock_check(user))
|
||||
|
||||
@@ -77,6 +77,7 @@
|
||||
|
||||
/obj/machinery/light_switch/attack_hand(mob/user)
|
||||
on = !on
|
||||
playsound(src, 'sound/machines/lightswitch.ogg', 10, TRUE)
|
||||
updateicon()
|
||||
|
||||
if(light_connect)
|
||||
|
||||
@@ -16,9 +16,10 @@
|
||||
desc = "A generic vending machine."
|
||||
icon = 'icons/obj/vending.dmi'
|
||||
icon_state = "generic"
|
||||
layer = 2.9
|
||||
anchored = 1
|
||||
density = 1
|
||||
layer = BELOW_OBJ_LAYER
|
||||
anchored = TRUE
|
||||
density = TRUE
|
||||
face_while_pulling = TRUE
|
||||
max_integrity = 300
|
||||
integrity_failure = 100
|
||||
armor = list(melee = 20, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 70)
|
||||
@@ -1002,6 +1003,7 @@
|
||||
products = list(/obj/item/reagent_containers/food/snacks/candy/candybar = 6,/obj/item/reagent_containers/food/drinks/dry_ramen = 6,/obj/item/reagent_containers/food/snacks/chips =6,
|
||||
/obj/item/reagent_containers/food/snacks/sosjerky = 6,/obj/item/reagent_containers/food/snacks/no_raisin = 6,/obj/item/reagent_containers/food/snacks/pistachios =6,
|
||||
/obj/item/reagent_containers/food/snacks/spacetwinkie = 6,/obj/item/reagent_containers/food/snacks/cheesiehonkers = 6,/obj/item/reagent_containers/food/snacks/tastybread = 6)
|
||||
premium = list(/obj/item/reagent_containers/food/snacks/stroopwafel = 2)
|
||||
contraband = list(/obj/item/reagent_containers/food/snacks/syndicake = 6)
|
||||
prices = list(/obj/item/reagent_containers/food/snacks/candy/candybar = 20,/obj/item/reagent_containers/food/drinks/dry_ramen = 30,
|
||||
/obj/item/reagent_containers/food/snacks/chips =25,/obj/item/reagent_containers/food/snacks/sosjerky = 30,/obj/item/reagent_containers/food/snacks/no_raisin = 20,
|
||||
|
||||
@@ -195,23 +195,16 @@
|
||||
if(target.status != LIGHT_EMPTY)
|
||||
AddShards(1, U)
|
||||
target.status = LIGHT_EMPTY
|
||||
target.update()
|
||||
|
||||
var/obj/item/light/L2 = new target.light_type()
|
||||
|
||||
target.status = L2.status
|
||||
target.switchcount = L2.switchcount
|
||||
var/obj/item/light/replacement = target.light_type
|
||||
target.status = LIGHT_OK
|
||||
target.switchcount = 0
|
||||
target.rigged = emagged
|
||||
target.brightness_range = L2.brightness_range
|
||||
target.brightness_power = L2.brightness_power
|
||||
target.brightness_color = L2.brightness_color
|
||||
target.brightness_range = initial(replacement.brightness_range)
|
||||
target.brightness_power = initial(replacement.brightness_power)
|
||||
target.brightness_color = initial(replacement.brightness_color)
|
||||
target.on = target.has_power()
|
||||
target.update()
|
||||
qdel(L2)
|
||||
|
||||
if(target.on && target.rigged)
|
||||
target.explode()
|
||||
return
|
||||
target.update(TRUE, TRUE, FALSE)
|
||||
|
||||
else
|
||||
to_chat(U, "[src]'s refill light blinks red.")
|
||||
|
||||
@@ -5,8 +5,8 @@
|
||||
icon_state = "headset"
|
||||
item_state = "headset"
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/ears.dmi',
|
||||
"Vox Armalis" = 'icons/mob/species/armalis/ears.dmi'
|
||||
"Vox" = 'icons/mob/clothing/species/vox/ears.dmi',
|
||||
"Vox Armalis" = 'icons/mob/clothing/species/armalis/ears.dmi'
|
||||
) //We read you loud and skree-er.
|
||||
materials = list(MAT_METAL=75)
|
||||
canhear_range = 0 // can't hear headsets from very far away
|
||||
|
||||
@@ -16,12 +16,21 @@
|
||||
GLOBAL_LIST_INIT(metal_recipes, list(
|
||||
new /datum/stack_recipe("stool", /obj/structure/chair/stool, one_per_turf = 1, on_floor = 1),
|
||||
new /datum/stack_recipe("barstool", /obj/structure/chair/stool/bar, one_per_turf = 1, on_floor = 1),
|
||||
new /datum/stack_recipe("chair", /obj/structure/chair, one_per_turf = 1, on_floor = 1),
|
||||
new /datum/stack_recipe("chair (dark)", /obj/structure/chair, one_per_turf = 1, on_floor = 1),
|
||||
new /datum/stack_recipe("chair (light)", /obj/structure/chair/light, one_per_turf = 1, on_floor = 1),
|
||||
new /datum/stack_recipe("shuttle seat", /obj/structure/chair/comfy/shuttle, 2, one_per_turf = 1, on_floor = 1),
|
||||
new /datum/stack_recipe("sofa (middle)", /obj/structure/chair/sofa, one_per_turf = 1, on_floor = 1),
|
||||
new /datum/stack_recipe("sofa (left)", /obj/structure/chair/sofa/left, one_per_turf = 1, on_floor = 1),
|
||||
new /datum/stack_recipe("sofa (right)", /obj/structure/chair/sofa/right, one_per_turf = 1, on_floor = 1),
|
||||
new /datum/stack_recipe("sofa (corner)", /obj/structure/chair/sofa/corner, one_per_turf = 1, on_floor = 1),
|
||||
new /datum/stack_recipe_list("sofas", list(
|
||||
new /datum/stack_recipe("sofa (middle)", /obj/structure/chair/sofa, 1, one_per_turf = TRUE, on_floor = TRUE),
|
||||
new /datum/stack_recipe("sofa (left)", /obj/structure/chair/sofa/left, 1, one_per_turf = TRUE, on_floor = TRUE),
|
||||
new /datum/stack_recipe("sofa (right)", /obj/structure/chair/sofa/right, 1, one_per_turf = TRUE, on_floor = TRUE),
|
||||
new /datum/stack_recipe("sofa (corner)", /obj/structure/chair/sofa/corner, 1, one_per_turf = TRUE, on_floor = TRUE)
|
||||
)), \
|
||||
new /datum/stack_recipe_list("corporate sofas", list( \
|
||||
new /datum/stack_recipe("sofa (middle)", /obj/structure/chair/sofa/corp, 1, one_per_turf = TRUE, on_floor = TRUE), \
|
||||
new /datum/stack_recipe("sofa (left)", /obj/structure/chair/sofa/corp/left, 1, one_per_turf = TRUE, on_floor = TRUE), \
|
||||
new /datum/stack_recipe("sofa (right)", /obj/structure/chair/sofa/corp/right, 1, one_per_turf = TRUE, on_floor = TRUE), \
|
||||
new /datum/stack_recipe("sofa (corner)", /obj/structure/chair/sofa/corp/corner, 1, one_per_turf = TRUE, on_floor = TRUE), \
|
||||
)), \
|
||||
new /datum/stack_recipe("barber chair", /obj/structure/chair/barber, one_per_turf = 1, on_floor = 1),
|
||||
new /datum/stack_recipe("wheelchair", /obj/structure/chair/wheelchair, 15, one_per_turf = 1, on_floor = 1),
|
||||
new /datum/stack_recipe("bed", /obj/structure/bed, 2, one_per_turf = 1, on_floor = 1),
|
||||
@@ -176,6 +185,11 @@ GLOBAL_LIST_INIT(wood_recipes, list(
|
||||
new /datum/stack_recipe("wood floor tile", /obj/item/stack/tile/wood, 1, 4, 20),
|
||||
new /datum/stack_recipe("wood table frame", /obj/structure/table_frame/wood, 2, time = 10), \
|
||||
new /datum/stack_recipe("wooden chair", /obj/structure/chair/wood, 3, time = 10, one_per_turf = 1, on_floor = 1),
|
||||
new /datum/stack_recipe_list("pews", list(
|
||||
new /datum/stack_recipe("pew (middle)", /obj/structure/chair/sofa/pew, 1, one_per_turf = TRUE, on_floor = TRUE),
|
||||
new /datum/stack_recipe("pew (left)", /obj/structure/chair/sofa/pew/left, 1, one_per_turf = TRUE, on_floor = TRUE),
|
||||
new /datum/stack_recipe("pew (right)", /obj/structure/chair/sofa/pew/right, 1, one_per_turf = TRUE, on_floor = TRUE),
|
||||
)), \
|
||||
new /datum/stack_recipe("wooden barricade", /obj/structure/barricade/wooden, 5, time = 50, one_per_turf = 1, on_floor = 1),
|
||||
new /datum/stack_recipe("bookcase", /obj/structure/bookcase, 5, time = 50, one_per_turf = 1, on_floor = 1),
|
||||
new /datum/stack_recipe("dresser", /obj/structure/dresser, 30, time = 50, one_per_turf = 1, on_floor = 1),
|
||||
@@ -241,6 +255,7 @@ GLOBAL_LIST_INIT(cloth_recipes, list ( \
|
||||
new/datum/stack_recipe("white beanie", /obj/item/clothing/head/beanie, 2), \
|
||||
null, \
|
||||
new/datum/stack_recipe("blindfold", /obj/item/clothing/glasses/sunglasses/blindfold, 3), \
|
||||
new/datum/stack_recipe("tattered blindfold", /obj/item/clothing/glasses/sunglasses/blindfold/fake, 2), \
|
||||
))
|
||||
|
||||
/obj/item/stack/sheet/cloth
|
||||
|
||||
@@ -12,7 +12,6 @@
|
||||
item_state = "plutoniumcore"
|
||||
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF
|
||||
flags_2 = RAD_NO_CONTAMINATE_2 //Don't have the item itself become irradiated when it makes radiation.
|
||||
var/pulse = 0
|
||||
var/cooldown = 0
|
||||
var/pulseicon = "plutonium_core_pulse"
|
||||
|
||||
@@ -49,14 +48,42 @@
|
||||
icon = 'icons/obj/nuke_tools.dmi'
|
||||
icon_state = "core_container_empty"
|
||||
item_state = "metal"
|
||||
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF //Don't want people trying to break it open with acid, then destroying the core.
|
||||
var/obj/item/nuke_core/plutonium/core
|
||||
var/dented = FALSE
|
||||
var/cracked = FALSE
|
||||
|
||||
/obj/item/nuke_core_container/Destroy()
|
||||
QDEL_NULL(core)
|
||||
return ..()
|
||||
|
||||
/obj/item/nuke_core_container/ex_act(severity)
|
||||
switch(severity)
|
||||
if(EXPLODE_DEVASTATE)
|
||||
if(!cracked)
|
||||
crack_open()
|
||||
if(EXPLODE_HEAVY)
|
||||
if(!dented)
|
||||
dented = TRUE
|
||||
|
||||
/obj/item/nuke_core_container/examine(mob/user)
|
||||
. = ..()
|
||||
if(cracked) // Cracked open.
|
||||
. += "<span class='warning'>It is broken, and can no longer store objects safely.</span>"
|
||||
else if(dented) // Not cracked, but dented.
|
||||
. += "<span class='notice'>[src] looks dented. Perhaps a bigger explosion may break it.</span>"
|
||||
else // Not cracked or dented.
|
||||
. += "Fine print on the box reads \"Cybersun Industries secure container, guaranteed thermite proof, assistant proof, and explosive resistant.\""
|
||||
|
||||
/obj/item/nuke_core_container/attack_hand(mob/user)
|
||||
if(cracked && core)
|
||||
unload(user)
|
||||
else
|
||||
return ..()
|
||||
|
||||
|
||||
/obj/item/nuke_core_container/proc/load(obj/item/nuke_core/plutonium/new_core, mob/user)
|
||||
if(core || !istype(new_core))
|
||||
if(core || !istype(new_core) || cracked)
|
||||
return
|
||||
new_core.forceMove(src)
|
||||
core = new_core
|
||||
@@ -64,6 +91,12 @@
|
||||
to_chat(user, "<span class='warning'>Container is sealing...</span>")
|
||||
addtimer(CALLBACK(src, .proc/seal), 10 SECONDS)
|
||||
|
||||
/obj/item/nuke_core_container/proc/unload(mob/user)
|
||||
core.add_fingerprint(user)
|
||||
user.put_in_active_hand(core)
|
||||
core = null
|
||||
icon_state = "core_container_cracked_empty"
|
||||
|
||||
/obj/item/nuke_core_container/proc/seal()
|
||||
if(!QDELETED(core))
|
||||
STOP_PROCESSING(SSobj, core)
|
||||
@@ -73,7 +106,7 @@
|
||||
to_chat(loc, "<span class='warning'>[src] is permanently sealed, [core]'s radiation is contained.</span>")
|
||||
|
||||
/obj/item/nuke_core_container/attackby(obj/item/nuke_core/plutonium/core, mob/user)
|
||||
if(!istype(core))
|
||||
if(!istype(core) || cracked)
|
||||
return ..()
|
||||
|
||||
if(!user.drop_item())
|
||||
@@ -82,9 +115,20 @@
|
||||
else
|
||||
load(core, user)
|
||||
|
||||
/obj/item/nuke_core_container/proc/crack_open()
|
||||
visible_message("<span class='boldnotice'>[src] bursts open!</span>")
|
||||
if(core)
|
||||
START_PROCESSING(SSobj, core)
|
||||
icon_state = "core_container_cracked_loaded"
|
||||
else
|
||||
icon_state = "core_container_cracked_empty"
|
||||
name = "broken nuke core container"
|
||||
cracked = TRUE
|
||||
|
||||
/obj/item/paper/guides/antag/nuke_instructions
|
||||
info = "How to break into a Nanotrasen nuclear device and remove its plutonium core:<br>\
|
||||
<ul>\
|
||||
<li>Acquire some clothing that protects you from radiation, due to the radioactivity of the core.</li>\
|
||||
<li>Use a screwdriver with a very thin tip (provided) to unscrew the terminal's front panel.</li>\
|
||||
<li>Dislodge and remove the front panel with a crowbar.</li>\
|
||||
<li>Cut the inner metal plate with a welding tool.</li>\
|
||||
@@ -99,7 +143,7 @@
|
||||
/obj/item/paper/guides/antag/supermatter_sliver
|
||||
info = "How to safely extract a supermatter sliver:<br>\
|
||||
<ul>\
|
||||
<li>Approach an active supermatter crystal with radiation shielded personal protective equipment. DO NOT MAKE PHYSICAL CONTACT.</li>\
|
||||
<li>Approach an active supermatter crystal with radiation shielded personal protective equipment, and active magboots. DO NOT MAKE PHYSICAL CONTACT.</li>\
|
||||
<li>Use a supermatter scalpel (provided) to slice off a sliver of the crystal.</li>\
|
||||
<li>Use supermatter extraction tongs (also provided) to safely pick up the sliver you sliced off.</li>\
|
||||
<li>Physical contact of any object with the sliver will dust the object, as well as yourself.</li>\
|
||||
@@ -183,7 +227,7 @@
|
||||
return ..()
|
||||
|
||||
/obj/item/nuke_core_container/supermatter/load(obj/item/retractor/supermatter/I, mob/user)
|
||||
if(!istype(I) || !I.sliver)
|
||||
if(!istype(I) || !I.sliver || sliver)
|
||||
return
|
||||
I.sliver.forceMove(src)
|
||||
sliver = I.sliver
|
||||
@@ -202,13 +246,56 @@
|
||||
if(ismob(loc))
|
||||
to_chat(loc, "<span class='warning'>[src] is permanently sealed, [sliver] is safely contained.</span>")
|
||||
|
||||
/obj/item/nuke_core_container/supermatter/unload(obj/item/retractor/supermatter/I, mob/user)
|
||||
if(!istype(I) || I.sliver)
|
||||
return
|
||||
sliver.forceMove(I)
|
||||
I.sliver = sliver
|
||||
sliver = null
|
||||
I.icon_state = "supermatter_tongs_loaded"
|
||||
I.item_state = "supermatter_tongs_loaded"
|
||||
icon_state = "core_container_cracked_empty"
|
||||
to_chat(user, "<span class='notice'>You carefully pick up [I.sliver] with [I].</span>")
|
||||
|
||||
/obj/item/nuke_core_container/supermatter/attackby(obj/item/retractor/supermatter/tongs, mob/user)
|
||||
if(istype(tongs))
|
||||
//try to load shard into core
|
||||
load(tongs, user)
|
||||
if(cracked)
|
||||
//lets take that shard out
|
||||
unload(tongs, user)
|
||||
else
|
||||
//try to load shard into core
|
||||
load(tongs, user)
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/item/nuke_core_container/supermatter/attack_hand(mob/user)
|
||||
if(cracked && sliver) //What did we say about touching the shard...
|
||||
if(!isliving(user) || user.status_flags & GODMODE)
|
||||
return FALSE
|
||||
user.visible_message("<span class='danger'>[user] reaches out and tries to pick up [sliver]. [user.p_their()] body starts to glow and bursts into flames before flashing into dust!</span>",
|
||||
"<span class='userdanger'>You reach for [sliver] with your hands. That was dumb.</span>",
|
||||
"<span class='italics'>Everything suddenly goes silent.</span>")
|
||||
radiation_pulse(user, 500, 2)
|
||||
playsound(src, 'sound/effects/supermatter.ogg', 50, TRUE)
|
||||
message_admins("[sliver] has consumed [key_name_admin(user)] [ADMIN_JMP(src)].")
|
||||
investigate_log("has consumed [key_name(user)].", "supermatter")
|
||||
user.dust()
|
||||
icon_state = "core_container_cracked_empty"
|
||||
qdel(sliver)
|
||||
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/item/nuke_core_container/supermatter/crack_open()
|
||||
visible_message("<span class='boldnotice'>[src] bursts open!</span>")
|
||||
if(sliver)
|
||||
START_PROCESSING(SSobj, sliver)
|
||||
icon_state = "supermatter_container_cracked_loaded"
|
||||
else
|
||||
icon_state = "core_container_cracked_empty"
|
||||
name = "broken supermatter bin"
|
||||
cracked = TRUE
|
||||
|
||||
/obj/item/scalpel/supermatter
|
||||
name = "supermatter scalpel"
|
||||
desc = "A scalpel with a fragile tip of condensed hyper-noblium gas, searingly cold to the touch, that can safely shave a sliver off a supermatter crystal."
|
||||
@@ -267,6 +354,8 @@
|
||||
investigate_log("has irradiated [key_name(victim)].", "supermatter")
|
||||
else if(istype(AM, /obj/singularity))
|
||||
return
|
||||
else if(istype(AM, /obj/item/nuke_core_container))
|
||||
return
|
||||
else
|
||||
investigate_log("has consumed [AM].", "supermatter")
|
||||
qdel(AM)
|
||||
|
||||
@@ -67,9 +67,9 @@
|
||||
slot_flags = SLOT_HEAD
|
||||
dog_fashion = /datum/dog_fashion/head/fried_vox_empty
|
||||
sprite_sheets = list(
|
||||
"Skrell" = 'icons/mob/species/skrell/head.dmi',
|
||||
"Drask" = 'icons/mob/species/drask/head.dmi',
|
||||
"Kidan" = 'icons/mob/species/kidan/head.dmi'
|
||||
"Skrell" = 'icons/mob/clothing/species/skrell/head.dmi',
|
||||
"Drask" = 'icons/mob/clothing/species/drask/head.dmi',
|
||||
"Kidan" = 'icons/mob/clothing/species/kidan/head.dmi'
|
||||
)
|
||||
|
||||
/obj/item/trash/pistachios
|
||||
|
||||
@@ -33,11 +33,11 @@ LIGHTERS ARE IN LIGHTERS.DM
|
||||
var/list/list_reagents = list("nicotine" = 40)
|
||||
var/first_puff = TRUE // the first puff is a bit more reagents ingested
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/mask.dmi',
|
||||
"Unathi" = 'icons/mob/species/unathi/mask.dmi',
|
||||
"Tajaran" = 'icons/mob/species/tajaran/mask.dmi',
|
||||
"Vulpkanin" = 'icons/mob/species/vulpkanin/mask.dmi',
|
||||
"Grey" = 'icons/mob/species/grey/mask.dmi')
|
||||
"Vox" = 'icons/mob/clothing/species/vox/mask.dmi',
|
||||
"Unathi" = 'icons/mob/clothing/species/unathi/mask.dmi',
|
||||
"Tajaran" = 'icons/mob/clothing/species/tajaran/mask.dmi',
|
||||
"Vulpkanin" = 'icons/mob/clothing/species/vulpkanin/mask.dmi',
|
||||
"Grey" = 'icons/mob/clothing/species/grey/mask.dmi')
|
||||
|
||||
|
||||
/obj/item/clothing/mask/cigarette/New()
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
actions_types = list(/datum/action/item_action/toggle_paddles)
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50)
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/back.dmi'
|
||||
"Vox" = 'icons/mob/clothing/species/vox/back.dmi'
|
||||
)
|
||||
|
||||
var/paddles_on_defib = TRUE //if the paddles are on the defib (TRUE)
|
||||
|
||||
@@ -18,9 +18,9 @@
|
||||
resistance_flags = NONE
|
||||
max_integrity = 300
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/back.dmi',
|
||||
"Vox Armalis" = 'icons/mob/species/armalis/back.dmi',
|
||||
"Grey" = 'icons/mob/species/grey/back.dmi'
|
||||
"Vox" = 'icons/mob/clothing/species/vox/back.dmi',
|
||||
"Vox Armalis" = 'icons/mob/clothing/species/armalis/back.dmi',
|
||||
"Grey" = 'icons/mob/clothing/species/grey/back.dmi'
|
||||
) //For Armalis anything but this and the nitrogen tank will use the default backpack icon.
|
||||
|
||||
/obj/item/storage/backpack/attackby(obj/item/W as obj, mob/user as mob, params)
|
||||
|
||||
@@ -97,9 +97,8 @@
|
||||
"<span class='danger'>May the power of [deity_name] compel you to be healed!</span>")
|
||||
playsound(loc, "punch", 25, 1, -1)
|
||||
else
|
||||
if(!istype(H.head, /obj/item/clothing/head/helmet))
|
||||
M.adjustBrainLoss(10)
|
||||
to_chat(M, "<span class='warning'>You feel dumber.</span>")
|
||||
M.adjustBrainLoss(10)
|
||||
to_chat(M, "<span class='warning'>You feel dumber.</span>")
|
||||
H.visible_message("<span class='danger'>[user] beats [H == user ? "[user.p_them()]self" : "[H]"] over the head with [src]!</span>")
|
||||
playsound(src.loc, "punch", 25, 1, -1)
|
||||
else
|
||||
|
||||
@@ -84,7 +84,7 @@
|
||||
|
||||
/obj/item/storage/firstaid/toxin/Initialize(mapload)
|
||||
. = ..()
|
||||
icon_state = pick("antitoxin", "antitoxfirstaid", "antitoxfirstaid2", "antitoxfirstaid3")
|
||||
icon_state = pick("antitoxin", "antitoxfirstaid", "antitoxfirstaid2")
|
||||
|
||||
/obj/item/storage/firstaid/toxin/populate_contents()
|
||||
for(var/I in 1 to 3)
|
||||
|
||||
@@ -170,7 +170,7 @@
|
||||
name = "nitrogen tank"
|
||||
desc = "A tank of nitrogen."
|
||||
icon_state = "oxygen_fr"
|
||||
sprite_sheets = list("Vox Armalis" = 'icons/mob/species/armalis/back.dmi') //Do it for Big Bird.
|
||||
sprite_sheets = list("Vox Armalis" = 'icons/mob/clothing/species/armalis/back.dmi') //Do it for Big Bird.
|
||||
distribute_pressure = TANK_DEFAULT_RELEASE_PRESSURE
|
||||
|
||||
/obj/item/tank/internals/nitrogen/populate_gas()
|
||||
@@ -188,7 +188,7 @@
|
||||
name = "vox specialized nitrogen tank"
|
||||
desc = "A high-tech nitrogen tank designed specifically for Vox."
|
||||
icon_state = "emergency_vox"
|
||||
sprite_sheets = list("Vox Armalis" = 'icons/mob/species/armalis/belt.dmi') //Do it for Big Bird.
|
||||
sprite_sheets = list("Vox Armalis" = 'icons/mob/clothing/species/armalis/belt.dmi') //Do it for Big Bird.
|
||||
volume = 35
|
||||
|
||||
/obj/item/tank/internals/emergency_oxygen/double/vox/populate_gas()
|
||||
|
||||
@@ -137,6 +137,12 @@
|
||||
rotate()
|
||||
|
||||
// Chair types
|
||||
/obj/structure/chair/light
|
||||
name = "chair"
|
||||
icon_state = "chair_greyscale"
|
||||
resistance_flags = FLAMMABLE
|
||||
item_chair = /obj/item/chair/light
|
||||
|
||||
/obj/structure/chair/wood
|
||||
name = "wooden chair"
|
||||
desc = "Old is never too old to not be in fashion."
|
||||
@@ -268,6 +274,33 @@
|
||||
anchored = TRUE
|
||||
item_chair = null
|
||||
buildstackamount = 1
|
||||
var/image/armrest = null
|
||||
|
||||
/obj/structure/chair/sofa/Initialize(mapload)
|
||||
armrest = GetArmrest()
|
||||
armrest.layer = ABOVE_MOB_LAYER
|
||||
return ..()
|
||||
|
||||
/obj/structure/chair/sofa/proc/GetArmrest()
|
||||
return mutable_appearance('icons/obj/chairs.dmi', "[icon_state]_armrest")
|
||||
|
||||
/obj/structure/chair/sofa/Destroy()
|
||||
QDEL_NULL(armrest)
|
||||
return ..()
|
||||
|
||||
/obj/structure/chair/sofa/post_buckle_mob(mob/living/M)
|
||||
. = ..()
|
||||
update_armrest()
|
||||
|
||||
/obj/structure/chair/sofa/post_unbuckle_mob(mob/living/M)
|
||||
. = ..()
|
||||
update_armrest()
|
||||
|
||||
/obj/structure/chair/sofa/proc/update_armrest()
|
||||
if(has_buckled_mobs())
|
||||
add_overlay(armrest)
|
||||
else
|
||||
cut_overlay(armrest)
|
||||
|
||||
/obj/structure/chair/sofa/left
|
||||
icon_state = "sofaend_left"
|
||||
@@ -278,6 +311,32 @@
|
||||
/obj/structure/chair/sofa/corner
|
||||
icon_state = "sofacorner"
|
||||
|
||||
/obj/structure/chair/sofa/corp
|
||||
name = "sofa"
|
||||
desc = "Soft and cushy."
|
||||
icon_state = "corp_sofamiddle"
|
||||
|
||||
/obj/structure/chair/sofa/corp/left
|
||||
icon_state = "corp_sofaend_left"
|
||||
|
||||
/obj/structure/chair/sofa/corp/right
|
||||
icon_state = "corp_sofaend_right"
|
||||
|
||||
/obj/structure/chair/sofa/corp/corner
|
||||
icon_state = "corp_sofacorner"
|
||||
|
||||
/obj/structure/chair/sofa/pew
|
||||
name = "pew"
|
||||
desc = "Rigid and uncomfortable, perfect for keeping you awake and alert."
|
||||
icon_state = "pewmiddle"
|
||||
buildstacktype = /obj/item/stack/sheet/wood
|
||||
|
||||
/obj/structure/chair/sofa/pew/left
|
||||
icon_state = "pewend_left"
|
||||
|
||||
/obj/structure/chair/sofa/pew/right
|
||||
icon_state = "pewend_right"
|
||||
|
||||
/obj/structure/chair/stool
|
||||
name = "stool"
|
||||
desc = "Apply butt."
|
||||
@@ -309,6 +368,10 @@
|
||||
var/break_chance = 5 //Likely hood of smashing the chair.
|
||||
var/obj/structure/chair/origin_type = /obj/structure/chair
|
||||
|
||||
/obj/item/chair/light
|
||||
icon_state = "chair_greyscale_toppled"
|
||||
origin_type = /obj/structure/chair/light
|
||||
|
||||
/obj/item/chair/stool
|
||||
name = "stool"
|
||||
icon = 'icons/obj/chairs.dmi'
|
||||
|
||||
@@ -408,6 +408,10 @@
|
||||
return
|
||||
if(!isliving(AM))
|
||||
return
|
||||
var/mob/living/L = AM
|
||||
if(L.incorporeal_move || L.flying || L.floating)
|
||||
return
|
||||
|
||||
// Don't break if they're just flying past
|
||||
if(AM.throwing)
|
||||
addtimer(CALLBACK(src, .proc/throw_check, AM), 5)
|
||||
|
||||
@@ -8,6 +8,8 @@ GLOBAL_LIST_INIT(map_transition_config, list(CC_TRANSITION_CONFIG))
|
||||
// Right off the bat
|
||||
enable_auxtools_debugger()
|
||||
|
||||
SSmetrics.world_init_time = REALTIMEOFDAY
|
||||
|
||||
// Do sanity checks to ensure RUST actually exists
|
||||
if(!fexists(RUST_G))
|
||||
DIRECT_OUTPUT(world.log, "ERROR: RUSTG was not found and is required for the game to function. Server will now exit.")
|
||||
|
||||
@@ -97,10 +97,9 @@
|
||||
qdel(exist_query)
|
||||
else
|
||||
if(!exist_query.NextRow()) // If there isnt a row, they aint been seen before
|
||||
if(GLOB.panic_bunker_enabled)
|
||||
if(SSqueue?.queue_enabled && (length(GLOB.clients) > SSqueue.queue_threshold) && !(ckey in SSqueue.queue_bypass_list))
|
||||
qdel(exist_query)
|
||||
var/threshold = GLOB.configuration.general.panic_bunker_threshold
|
||||
return list("reason" = "panic bunker", "desc" = "Server is not accepting connections from never-before-seen players until player count is less than [threshold]. Please try again later.")
|
||||
return list("reason" = "server queue", "desc" = "You seem to have managed to skip the server queue, possibly due to connecting during a restart. Please reconnect in 10 minutes. If you still cannot connect, please inform the server host.")
|
||||
|
||||
qdel(exist_query)
|
||||
|
||||
|
||||
@@ -72,7 +72,7 @@ GLOBAL_VAR_INIT(nologevent, 0)
|
||||
|
||||
/datum/admins/proc/show_player_panel(mob/M in GLOB.mob_list)
|
||||
set category = null
|
||||
set name = "Show Player Panel"
|
||||
set name = "\[Admin\] Show Player Panel"
|
||||
set desc="Edit player (respawn, ban, heal, etc)"
|
||||
|
||||
if(!M)
|
||||
@@ -766,7 +766,7 @@ GLOBAL_VAR_INIT(nologevent, 0)
|
||||
message_admins("[key_name_admin(usr)] checked the AI laws")
|
||||
|
||||
/client/proc/update_mob_sprite(mob/living/carbon/human/H as mob)
|
||||
set name = "Update Mob Sprite"
|
||||
set name = "\[Admin\] Update Mob Sprite"
|
||||
set desc = "Should fix any mob sprite update errors."
|
||||
set category = null
|
||||
|
||||
|
||||
@@ -137,7 +137,9 @@ GLOBAL_LIST_INIT(admin_verbs_server, list(
|
||||
/client/proc/toggle_antagHUD_restrictions,
|
||||
/client/proc/set_ooc,
|
||||
/client/proc/reset_ooc,
|
||||
/client/proc/set_next_map
|
||||
/client/proc/set_next_map,
|
||||
/client/proc/manage_queue,
|
||||
/client/proc/add_queue_server_bypass
|
||||
))
|
||||
GLOBAL_LIST_INIT(admin_verbs_debug, list(
|
||||
/client/proc/cmd_admin_list_open_jobs,
|
||||
@@ -611,7 +613,7 @@ GLOBAL_LIST_INIT(admin_verbs_ticket, list(
|
||||
|
||||
/client/proc/make_sound(obj/O in view()) // -- TLE
|
||||
set category = "Event"
|
||||
set name = "Make Sound"
|
||||
set name = "\[Admin\] Make Sound"
|
||||
set desc = "Display a message to everyone who can hear the target"
|
||||
|
||||
if(!check_rights(R_EVENT))
|
||||
@@ -797,7 +799,7 @@ GLOBAL_LIST_INIT(admin_verbs_ticket, list(
|
||||
SSblackbox.record_feedback("tally", "admin_verb", 1, "Manage Silicon Laws") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/client/proc/change_human_appearance_admin(mob/living/carbon/human/H in GLOB.mob_list)
|
||||
set name = "C.M.A. - Admin"
|
||||
set name = "\[Admin\] C.M.A. - Admin"
|
||||
set desc = "Allows you to change the mob appearance"
|
||||
set category = null
|
||||
|
||||
@@ -823,7 +825,7 @@ GLOBAL_LIST_INIT(admin_verbs_ticket, list(
|
||||
SSblackbox.record_feedback("tally", "admin_verb", 1, "CMA - Admin") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/client/proc/change_human_appearance_self(mob/living/carbon/human/H in GLOB.mob_list)
|
||||
set name = "C.M.A. - Self"
|
||||
set name = "\[Admin\] C.M.A. - Self"
|
||||
set desc = "Allows the mob to change its appearance"
|
||||
set category = null
|
||||
|
||||
@@ -963,7 +965,7 @@ GLOBAL_LIST_INIT(admin_verbs_ticket, list(
|
||||
|
||||
/client/proc/man_up(mob/T as mob in GLOB.player_list)
|
||||
set category = null
|
||||
set name = "Man Up"
|
||||
set name = "\[Admin\] Man Up"
|
||||
set desc = "Tells mob to man up and deal with it."
|
||||
|
||||
if(!check_rights(R_ADMIN))
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/proc/machine_upgrade(obj/machinery/M in world)
|
||||
set name = "Tweak Component Ratings"
|
||||
set name = "\[Admin\] Tweak Component Ratings"
|
||||
set category = null
|
||||
|
||||
if(!check_rights(R_DEBUG))
|
||||
|
||||
@@ -66,7 +66,7 @@
|
||||
SSblackbox.record_feedback("tally", "admin_verb", 1, "Jump To Area") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/client/proc/jumptoturf(turf/T in world)
|
||||
set name = "Jump to Turf"
|
||||
set name = "\[Admin\] Jump to Turf"
|
||||
set category = null
|
||||
|
||||
if(!check_rights(R_ADMIN))
|
||||
@@ -135,7 +135,7 @@
|
||||
|
||||
/client/proc/Getmob(mob/M in GLOB.mob_list)
|
||||
set category = null
|
||||
set name = "Get Mob"
|
||||
set name = "\[Admin\] Get Mob"
|
||||
set desc = "Mob to teleport"
|
||||
|
||||
if(!check_rights(R_ADMIN))
|
||||
@@ -152,7 +152,7 @@
|
||||
|
||||
/client/proc/Getkey()
|
||||
set category = null
|
||||
set name = "Get Key"
|
||||
set name = "\[Admin\] Get Key"
|
||||
set desc = "Key to teleport"
|
||||
|
||||
if(!check_rights(R_ADMIN))
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
//allows right clicking mobs to send an admin PM to their client, forwards the selected mob's client to cmd_admin_pm
|
||||
/client/proc/cmd_admin_pm_context(mob/M as mob in GLOB.mob_list)
|
||||
set category = null
|
||||
set name = "Admin PM Mob"
|
||||
set name = "\[Admin\] Admin PM Mob"
|
||||
if(!check_rights(R_ADMIN|R_MENTOR))
|
||||
return
|
||||
if(!ismob(M) || !M.client)
|
||||
|
||||
@@ -173,7 +173,7 @@ GLOBAL_PROTECT(AdminProcCallSpamPrevention)
|
||||
|
||||
/client/proc/callproc_datum(A as null|area|mob|obj|turf)
|
||||
set category = null
|
||||
set name = "Atom ProcCall"
|
||||
set name = "\[Admin\] Atom ProcCall"
|
||||
|
||||
if(!check_rights(R_PROCCALL))
|
||||
return
|
||||
@@ -630,7 +630,7 @@ GLOBAL_PROTECT(AdminProcCallSpamPrevention)
|
||||
|
||||
/client/proc/cmd_admin_dress(mob/living/carbon/human/M in GLOB.human_list)
|
||||
set category = "Event"
|
||||
set name = "Select equipment"
|
||||
set name = "\[Admin\] Select equipment"
|
||||
|
||||
if(!check_rights(R_EVENT))
|
||||
return
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
GLOBAL_LIST_EMPTY(frozen_atom_list) // A list of admin-frozen atoms.
|
||||
|
||||
/client/proc/freeze(atom/movable/M)
|
||||
set name = "Freeze"
|
||||
set name = "\[Admin\] Freeze"
|
||||
set category = null
|
||||
|
||||
if(!check_rights(R_ADMIN))
|
||||
|
||||
@@ -0,0 +1,61 @@
|
||||
/client/proc/manage_queue()
|
||||
set name = "Manage Queue Server"
|
||||
set desc = "Manage the queue server and its settings"
|
||||
set category = "Server"
|
||||
|
||||
if(!check_rights(R_SERVER))
|
||||
return
|
||||
|
||||
var/list/choices = list("Show Status", "Toggle Queue Server", "Set Threshold", "Toggle Setting Persistence")
|
||||
var/choice = input(usr, "Please, select an option", "Queue Server Manipulation") as null|anything in choices
|
||||
|
||||
switch(choice)
|
||||
if("Show Status")
|
||||
to_chat(usr, "<b>Queue Server Status</b>")
|
||||
to_chat(usr, "Enabled: <b>[SSqueue.queue_enabled ? "<font color='green'>Yes</font>" : "<font color='red'>No</font>"]</b>")
|
||||
to_chat(usr, "Queue Threshold: <b>[SSqueue.queue_threshold]</b>")
|
||||
to_chat(usr, "Setting Persistence: <b>[SSqueue.persist_queue ? "<font color='green'>Yes</font>" : "<font color='red'>No</font>"]</b>")
|
||||
if("Toggle Queue Server")
|
||||
SSqueue.queue_enabled = !SSqueue.queue_enabled
|
||||
to_chat(usr, "Queue server is now <b>[SSqueue.queue_enabled ? "<font color='green'>Enabled</font>" : "<font color='red'>Disabled</font>"]</b>")
|
||||
message_admins("[key_name_admin(usr)] has [SSqueue.queue_enabled ? "enabled" : "disabled"] the server queue.")
|
||||
log_admin("[key_name(usr)] has [SSqueue.queue_enabled ? "enabled" : "disabled"] the server queue.")
|
||||
SSdiscord.send2discord_simple(DISCORD_WEBHOOK_ADMIN, "**\[Queue Server]** `[usr.ckey]` has now **[SSqueue.queue_enabled ? "enabled" : "disabled"]** the queue server.")
|
||||
if("Set Threshold")
|
||||
var/new_threshold = input(usr, "Enter new threshold", "Queue Server Manipulation", SSqueue.queue_threshold) as num|null
|
||||
if(!new_threshold)
|
||||
return
|
||||
SSqueue.queue_threshold = new_threshold
|
||||
to_chat(usr, "Queue threshold is now <b>[SSqueue.queue_threshold]</b>")
|
||||
message_admins("[key_name_admin(usr)] has set the queue threshold to [SSqueue.queue_threshold].")
|
||||
log_admin("[key_name(usr)] has set the queue threshold to [SSqueue.queue_threshold].")
|
||||
SSdiscord.send2discord_simple(DISCORD_WEBHOOK_ADMIN, "**\[Queue Server]** `[usr.ckey]` has set the queue threshold to **[SSqueue.queue_threshold]**.")
|
||||
if("Toggle Setting Persistence")
|
||||
SSqueue.persist_queue = !SSqueue.persist_queue
|
||||
to_chat(usr, "Queue server setting persistence is now <b>[SSqueue.persist_queue ? "<font color='green'>Enabled</font>" : "<font color='red'>Disabled</font>"]</b>")
|
||||
message_admins("[key_name_admin(usr)] has [SSqueue.persist_queue ? "enabled" : "disabled"] the server queue settings persistence.")
|
||||
log_admin("[key_name(usr)] has [SSqueue.persist_queue ? "enabled" : "disabled"] the server queue settings persistence.")
|
||||
SSdiscord.send2discord_simple(DISCORD_WEBHOOK_ADMIN, "**\[Queue Server]** `[usr.ckey]` has now **[SSqueue.persist_queue ? "enabled" : "disabled"]** server queue settings persistence.")
|
||||
|
||||
/client/proc/add_queue_server_bypass()
|
||||
set name = "Add Queue Server Bypass"
|
||||
set desc = "Allow a ckey to bypass the server queue"
|
||||
set category = "Server"
|
||||
|
||||
if(!check_rights(R_SERVER))
|
||||
return
|
||||
|
||||
var/bypass_ckey = input(usr, "Please, enter a ckey", "Queue Server Bypass")
|
||||
|
||||
if(!bypass_ckey)
|
||||
return
|
||||
|
||||
var/clean_ckey = ckey(bypass_ckey)
|
||||
|
||||
if(!clean_ckey)
|
||||
to_chat(usr, "Invalid ckey supplied")
|
||||
return
|
||||
|
||||
SSqueue.queue_bypass_list.Add(clean_ckey)
|
||||
message_admins("[key_name_admin(usr)] has added the ckey [clean_ckey] to the queue bypass list.")
|
||||
log_admin("[key_name(usr)] has added the ckey [clean_ckey] to the queue bypass list.")
|
||||
@@ -1,5 +1,5 @@
|
||||
/proc/possess(obj/O as obj in world)
|
||||
set name = "Possess Obj"
|
||||
set name = "\[Admin\] Possess Obj"
|
||||
set category = null
|
||||
|
||||
if(!check_rights(R_POSSESS))
|
||||
@@ -34,7 +34,7 @@
|
||||
SSblackbox.record_feedback("tally", "admin_verb", 1, "Possess Object") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/proc/release(obj/O as obj in world)
|
||||
set name = "Release Obj"
|
||||
set name = "\[Admin\] Release Obj"
|
||||
set category = null
|
||||
//usr.loc = get_turf(usr)
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/client/proc/cmd_admin_drop_everything(mob/M as mob in GLOB.mob_list)
|
||||
set category = null
|
||||
set name = "Drop Everything"
|
||||
set name = "\[Admin\] Drop Everything"
|
||||
|
||||
if(!check_rights(R_DEBUG|R_ADMIN))
|
||||
return
|
||||
@@ -46,7 +46,7 @@
|
||||
|
||||
/client/proc/cmd_admin_subtle_message(mob/M as mob in GLOB.mob_list)
|
||||
set category = "Event"
|
||||
set name = "Subtle Message"
|
||||
set name = "\[Admin\] Subtle Message"
|
||||
|
||||
if(!ismob(M))
|
||||
return
|
||||
@@ -124,7 +124,7 @@
|
||||
|
||||
/client/proc/cmd_admin_direct_narrate(mob/M) // Targetted narrate -- TLE
|
||||
set category = null
|
||||
set name = "Direct Narrate"
|
||||
set name = "\[Admin\] Direct Narrate"
|
||||
|
||||
if(!check_rights(R_SERVER|R_EVENT))
|
||||
return
|
||||
@@ -151,7 +151,7 @@
|
||||
|
||||
/client/proc/cmd_admin_headset_message(mob/M in GLOB.mob_list)
|
||||
set category = "Event"
|
||||
set name = "Headset Message"
|
||||
set name = "\[Admin\] Headset Message"
|
||||
|
||||
admin_headset_message(M)
|
||||
|
||||
@@ -575,7 +575,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
||||
|
||||
/client/proc/cmd_admin_rejuvenate(mob/living/M as mob in GLOB.mob_list)
|
||||
set category = null
|
||||
set name = "Rejuvenate"
|
||||
set name = "\[Admin\] Rejuvenate"
|
||||
|
||||
if(!check_rights(R_REJUVINATE))
|
||||
return
|
||||
@@ -641,7 +641,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
||||
|
||||
/client/proc/cmd_admin_delete(atom/A as obj|mob|turf in view())
|
||||
set category = null
|
||||
set name = "Delete"
|
||||
set name = "\[Admin\] Delete"
|
||||
|
||||
if(!check_rights(R_ADMIN))
|
||||
return
|
||||
@@ -780,7 +780,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
|
||||
SSblackbox.record_feedback("tally", "admin_verb", 1, "Gibself") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
/client/proc/cmd_admin_check_contents(mob/living/M as mob in GLOB.mob_list)
|
||||
set name = "Check Contents"
|
||||
set name = "\[Admin\] Check Contents"
|
||||
set category = null
|
||||
|
||||
if(!check_rights(R_ADMIN))
|
||||
|
||||
@@ -65,7 +65,6 @@
|
||||
|
||||
switch(page)
|
||||
if(HUB_PAGE_CONTRACTS)
|
||||
var/contract_target
|
||||
var/list/contracts_out = list()
|
||||
data["contracts"] = contracts_out
|
||||
for(var/c in contracts)
|
||||
@@ -100,7 +99,6 @@
|
||||
contract_data["fail_reason"] = C.fail_reason
|
||||
|
||||
if(C.contract.extraction_zone)
|
||||
contract_target = C.contract.target?.current
|
||||
var/area/A = get_area(user)
|
||||
contract_data["objective"] = list(
|
||||
extraction_name = C.contract.extraction_zone.map_name,
|
||||
@@ -114,9 +112,7 @@
|
||||
)
|
||||
contracts_out += list(contract_data)
|
||||
|
||||
data["can_extract"] = FALSE
|
||||
if(contract_target)
|
||||
data["can_extract"] = current_contract?.contract.can_start_extraction_process(user, contract_target)
|
||||
data["can_extract"] = current_contract?.contract.can_start_extraction_process(user) || FALSE
|
||||
|
||||
if(HUB_PAGE_SHOP)
|
||||
var/list/buyables = list()
|
||||
|
||||
@@ -237,8 +237,7 @@
|
||||
* Returns whether the extraction process can be started.
|
||||
*
|
||||
* Arguments:
|
||||
* * M - The contractor.
|
||||
* * target - The target.
|
||||
* * caller - The person trying to call the extraction.
|
||||
*/
|
||||
/datum/objective/contract/proc/can_start_extraction_process(mob/living/carbon/human/M, mob/living/carbon/human/target)
|
||||
return get_area(M) == extraction_zone && get_area(target) == extraction_zone
|
||||
/datum/objective/contract/proc/can_start_extraction_process(mob/living/carbon/human/caller)
|
||||
return get_area(caller) == extraction_zone && get_area(target.current) == extraction_zone
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/obj/screen/buildmode
|
||||
icon = 'icons/misc/buildmode.dmi'
|
||||
var/datum/click_intercept/buildmode/bd
|
||||
layer = HUD_LAYER_BUILDMODE
|
||||
plane = HUD_PLANE_BUILDMODE
|
||||
|
||||
/obj/screen/buildmode/New(bld)
|
||||
bd = bld
|
||||
|
||||
@@ -379,23 +379,15 @@
|
||||
if(M.client)
|
||||
playercount += 1
|
||||
|
||||
// Update the state of the panic bunker based on current playercount
|
||||
var/threshold = GLOB.configuration.general.panic_bunker_threshold
|
||||
|
||||
if((playercount > threshold) && (GLOB.panic_bunker_enabled == FALSE))
|
||||
GLOB.panic_bunker_enabled = TRUE
|
||||
message_admins("Panic bunker has been automatically enabled due to playercount rising above [threshold]")
|
||||
|
||||
if((playercount < threshold) && (GLOB.panic_bunker_enabled == TRUE))
|
||||
GLOB.panic_bunker_enabled = FALSE
|
||||
message_admins("Panic bunker has been automatically disabled due to playercount dropping below [threshold]")
|
||||
|
||||
// Tell clients about active testmerges
|
||||
if(world.TgsAvailable() && length(GLOB.revision_info.testmerges))
|
||||
to_chat(src, GLOB.revision_info.get_testmerge_chatmessage(TRUE))
|
||||
|
||||
INVOKE_ASYNC(src, .proc/cid_count_check)
|
||||
|
||||
if(check_rights(R_ADMIN, FALSE, mob)) // Mob is required. Dont even try without it.
|
||||
to_chat(src, "The queue server is currently [SSqueue.queue_enabled ? "<font color='green'>enabled</font>" : "<font color='disabled'>disabled</font>"], with a threshold of <b>[SSqueue.queue_threshold]</b>. This <b>[SSqueue.persist_queue ? "will" : "will not"]</b> persist through rounds.")
|
||||
|
||||
|
||||
/client/proc/is_connecting_from_localhost()
|
||||
var/localhost_addresses = list("127.0.0.1", "::1") // Adresses
|
||||
|
||||
@@ -232,7 +232,7 @@
|
||||
armor = list("melee" = 10, "bullet" = 10, "laser" = 10, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50)
|
||||
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/suit.dmi'
|
||||
"Vox" = 'icons/mob/clothing/species/vox/suit.dmi'
|
||||
)
|
||||
|
||||
var/datum/action/item_action/chameleon/change/chameleon_action
|
||||
@@ -267,9 +267,9 @@
|
||||
armor = list("melee" = 10, "bullet" = 10, "laser" = 10, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50)
|
||||
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/eyes.dmi',
|
||||
"Drask" = 'icons/mob/species/drask/eyes.dmi',
|
||||
"Grey" = 'icons/mob/species/grey/eyes.dmi'
|
||||
"Vox" = 'icons/mob/clothing/species/vox/eyes.dmi',
|
||||
"Drask" = 'icons/mob/clothing/species/drask/eyes.dmi',
|
||||
"Grey" = 'icons/mob/clothing/species/grey/eyes.dmi'
|
||||
)
|
||||
|
||||
var/datum/action/item_action/chameleon/change/chameleon_action
|
||||
@@ -367,7 +367,7 @@
|
||||
armor = list("melee" = 5, "bullet" = 5, "laser" = 5, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50)
|
||||
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/head.dmi'
|
||||
"Vox" = 'icons/mob/clothing/species/vox/head.dmi'
|
||||
)
|
||||
|
||||
var/datum/action/item_action/chameleon/change/chameleon_action
|
||||
@@ -406,12 +406,12 @@
|
||||
flags_cover = MASKCOVERSEYES | MASKCOVERSMOUTH
|
||||
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/mask.dmi',
|
||||
"Unathi" = 'icons/mob/species/unathi/mask.dmi',
|
||||
"Tajaran" = 'icons/mob/species/tajaran/mask.dmi',
|
||||
"Vulpkanin" = 'icons/mob/species/vulpkanin/mask.dmi',
|
||||
"Drask" = 'icons/mob/species/drask/mask.dmi',
|
||||
"Grey" = 'icons/mob/species/grey/mask.dmi'
|
||||
"Vox" = 'icons/mob/clothing/species/vox/mask.dmi',
|
||||
"Unathi" = 'icons/mob/clothing/species/unathi/mask.dmi',
|
||||
"Tajaran" = 'icons/mob/clothing/species/tajaran/mask.dmi',
|
||||
"Vulpkanin" = 'icons/mob/clothing/species/vulpkanin/mask.dmi',
|
||||
"Drask" = 'icons/mob/clothing/species/drask/mask.dmi',
|
||||
"Grey" = 'icons/mob/clothing/species/grey/mask.dmi'
|
||||
)
|
||||
|
||||
var/obj/item/voice_changer/voice_changer
|
||||
@@ -484,7 +484,7 @@
|
||||
name = "backpack"
|
||||
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/back.dmi'
|
||||
"Vox" = 'icons/mob/clothing/species/vox/back.dmi'
|
||||
)
|
||||
|
||||
var/datum/action/item_action/chameleon/change/chameleon_action
|
||||
|
||||
@@ -134,8 +134,8 @@
|
||||
slot_flags = SLOT_EARS
|
||||
resistance_flags = NONE
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/ears.dmi',
|
||||
"Vox Armalis" = 'icons/mob/species/armalis/ears.dmi'
|
||||
"Vox" = 'icons/mob/clothing/species/vox/ears.dmi',
|
||||
"Vox Armalis" = 'icons/mob/clothing/species/armalis/ears.dmi'
|
||||
) //We read you loud and skree-er.
|
||||
|
||||
/obj/item/clothing/ears/attack_hand(mob/user)
|
||||
@@ -262,8 +262,8 @@ BLIND // can't see anything
|
||||
put_on_delay = 40
|
||||
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/gloves.dmi',
|
||||
"Drask" = 'icons/mob/species/drask/gloves.dmi'
|
||||
"Vox" = 'icons/mob/clothing/species/vox/gloves.dmi',
|
||||
"Drask" = 'icons/mob/clothing/species/drask/gloves.dmi'
|
||||
)
|
||||
|
||||
// Called just before an attack_hand(), in mob/UnarmedAttack()
|
||||
@@ -447,8 +447,8 @@ BLIND // can't see anything
|
||||
slowdown = SHOES_SLOWDOWN
|
||||
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/shoes.dmi',
|
||||
"Drask" = 'icons/mob/species/drask/shoes.dmi'
|
||||
"Vox" = 'icons/mob/clothing/species/vox/shoes.dmi',
|
||||
"Drask" = 'icons/mob/clothing/species/drask/shoes.dmi'
|
||||
)
|
||||
|
||||
/obj/item/clothing/shoes/attackby(obj/item/I, mob/user, params)
|
||||
@@ -617,7 +617,7 @@ BLIND // can't see anything
|
||||
hide_tail_by_species = null
|
||||
species_restricted = list("exclude","Wryn")
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/suit.dmi'
|
||||
"Vox" = 'icons/mob/clothing/species/vox/suit.dmi'
|
||||
)
|
||||
|
||||
//Under clothing
|
||||
@@ -633,9 +633,9 @@ BLIND // can't see anything
|
||||
pickup_sound = 'sound/items/handling/cloth_pickup.ogg'
|
||||
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/uniform.dmi',
|
||||
"Drask" = 'icons/mob/species/drask/uniform.dmi',
|
||||
"Grey" = 'icons/mob/species/grey/uniform.dmi'
|
||||
"Vox" = 'icons/mob/clothing/species/vox/uniform.dmi',
|
||||
"Drask" = 'icons/mob/clothing/species/drask/uniform.dmi',
|
||||
"Grey" = 'icons/mob/clothing/species/grey/uniform.dmi'
|
||||
)
|
||||
|
||||
var/has_sensor = TRUE//For the crew computer 2 = unable to change mode
|
||||
@@ -728,7 +728,7 @@ BLIND // can't see anything
|
||||
if(!usr.incapacitated())
|
||||
if(copytext(item_color,-2) != "_d")
|
||||
basecolor = item_color
|
||||
if((basecolor + "_d_s") in icon_states('icons/mob/uniform.dmi'))
|
||||
if((basecolor + "_d_s") in icon_states('icons/mob/clothing/uniform.dmi'))
|
||||
item_color = item_color == "[basecolor]" ? "[basecolor]_d" : "[basecolor]"
|
||||
usr.update_inv_w_uniform()
|
||||
else
|
||||
|
||||
@@ -71,10 +71,10 @@
|
||||
prescription_upgradable = 1
|
||||
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/eyes.dmi',
|
||||
"Drask" = 'icons/mob/species/drask/eyes.dmi',
|
||||
"Grey" = 'icons/mob/species/grey/eyes.dmi',
|
||||
"Drask" = 'icons/mob/species/drask/eyes.dmi'
|
||||
"Vox" = 'icons/mob/clothing/species/vox/eyes.dmi',
|
||||
"Drask" = 'icons/mob/clothing/species/drask/eyes.dmi',
|
||||
"Grey" = 'icons/mob/clothing/species/grey/eyes.dmi',
|
||||
"Drask" = 'icons/mob/clothing/species/drask/eyes.dmi'
|
||||
)
|
||||
|
||||
/obj/item/clothing/glasses/meson/night
|
||||
@@ -121,9 +121,9 @@
|
||||
resistance_flags = ACID_PROOF
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 100)
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/eyes.dmi',
|
||||
"Grey" = 'icons/mob/species/grey/eyes.dmi',
|
||||
"Drask" = 'icons/mob/species/drask/eyes.dmi'
|
||||
"Vox" = 'icons/mob/clothing/species/vox/eyes.dmi',
|
||||
"Grey" = 'icons/mob/clothing/species/grey/eyes.dmi',
|
||||
"Drask" = 'icons/mob/clothing/species/drask/eyes.dmi'
|
||||
)
|
||||
actions_types = list(/datum/action/item_action/toggle_research_scanner)
|
||||
|
||||
@@ -147,7 +147,7 @@
|
||||
item_state = "glasses"
|
||||
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/eyes.dmi'
|
||||
"Vox" = 'icons/mob/clothing/species/vox/eyes.dmi'
|
||||
)
|
||||
|
||||
/obj/item/clothing/glasses/night
|
||||
@@ -160,9 +160,9 @@
|
||||
lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE //don't render darkness while wearing these
|
||||
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/eyes.dmi',
|
||||
"Drask" = 'icons/mob/species/drask/eyes.dmi',
|
||||
"Grey" = 'icons/mob/species/grey/eyes.dmi'
|
||||
"Vox" = 'icons/mob/clothing/species/vox/eyes.dmi',
|
||||
"Drask" = 'icons/mob/clothing/species/drask/eyes.dmi',
|
||||
"Grey" = 'icons/mob/clothing/species/grey/eyes.dmi'
|
||||
)
|
||||
|
||||
/obj/item/clothing/glasses/eyepatch
|
||||
@@ -172,9 +172,9 @@
|
||||
item_state = "eyepatch"
|
||||
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/eyes.dmi',
|
||||
"Grey" = 'icons/mob/species/grey/eyes.dmi',
|
||||
"Drask" = 'icons/mob/species/drask/eyes.dmi'
|
||||
"Vox" = 'icons/mob/clothing/species/vox/eyes.dmi',
|
||||
"Grey" = 'icons/mob/clothing/species/grey/eyes.dmi',
|
||||
"Drask" = 'icons/mob/clothing/species/drask/eyes.dmi'
|
||||
)
|
||||
|
||||
/obj/item/clothing/glasses/monocle
|
||||
@@ -185,9 +185,9 @@
|
||||
prescription_upgradable = 1
|
||||
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/eyes.dmi',
|
||||
"Drask" = 'icons/mob/species/drask/eyes.dmi',
|
||||
"Grey" = 'icons/mob/species/grey/eyes.dmi'
|
||||
"Vox" = 'icons/mob/clothing/species/vox/eyes.dmi',
|
||||
"Drask" = 'icons/mob/clothing/species/drask/eyes.dmi',
|
||||
"Grey" = 'icons/mob/clothing/species/grey/eyes.dmi'
|
||||
)
|
||||
|
||||
/obj/item/clothing/glasses/material
|
||||
@@ -199,9 +199,9 @@
|
||||
vision_flags = SEE_OBJS
|
||||
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/eyes.dmi',
|
||||
"Drask" = 'icons/mob/species/drask/eyes.dmi',
|
||||
"Grey" = 'icons/mob/species/grey/eyes.dmi'
|
||||
"Vox" = 'icons/mob/clothing/species/vox/eyes.dmi',
|
||||
"Drask" = 'icons/mob/clothing/species/drask/eyes.dmi',
|
||||
"Grey" = 'icons/mob/clothing/species/grey/eyes.dmi'
|
||||
)
|
||||
|
||||
/obj/item/clothing/glasses/material/cyber
|
||||
@@ -229,9 +229,9 @@
|
||||
prescription = 1
|
||||
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/eyes.dmi',
|
||||
"Grey" = 'icons/mob/species/grey/eyes.dmi',
|
||||
"Drask" = 'icons/mob/species/drask/eyes.dmi'
|
||||
"Vox" = 'icons/mob/clothing/species/vox/eyes.dmi',
|
||||
"Grey" = 'icons/mob/clothing/species/grey/eyes.dmi',
|
||||
"Drask" = 'icons/mob/clothing/species/drask/eyes.dmi'
|
||||
)
|
||||
|
||||
/obj/item/clothing/glasses/regular/hipster
|
||||
@@ -247,9 +247,9 @@
|
||||
item_state = "3d"
|
||||
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/eyes.dmi',
|
||||
"Grey" = 'icons/mob/species/grey/eyes.dmi',
|
||||
"Drask" = 'icons/mob/species/drask/eyes.dmi'
|
||||
"Vox" = 'icons/mob/clothing/species/vox/eyes.dmi',
|
||||
"Grey" = 'icons/mob/clothing/species/grey/eyes.dmi',
|
||||
"Drask" = 'icons/mob/clothing/species/drask/eyes.dmi'
|
||||
)
|
||||
|
||||
/obj/item/clothing/glasses/gglasses
|
||||
@@ -259,9 +259,9 @@
|
||||
item_state = "gglasses"
|
||||
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/eyes.dmi',
|
||||
"Grey" = 'icons/mob/species/grey/eyes.dmi',
|
||||
"Drask" = 'icons/mob/species/drask/eyes.dmi'
|
||||
"Vox" = 'icons/mob/clothing/species/vox/eyes.dmi',
|
||||
"Grey" = 'icons/mob/clothing/species/grey/eyes.dmi',
|
||||
"Drask" = 'icons/mob/clothing/species/drask/eyes.dmi'
|
||||
)
|
||||
prescription_upgradable = 1
|
||||
|
||||
@@ -276,9 +276,9 @@
|
||||
prescription_upgradable = 1
|
||||
dog_fashion = /datum/dog_fashion/head
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/eyes.dmi',
|
||||
"Drask" = 'icons/mob/species/drask/eyes.dmi',
|
||||
"Grey" = 'icons/mob/species/grey/eyes.dmi'
|
||||
"Vox" = 'icons/mob/clothing/species/vox/eyes.dmi',
|
||||
"Drask" = 'icons/mob/clothing/species/drask/eyes.dmi',
|
||||
"Grey" = 'icons/mob/clothing/species/grey/eyes.dmi'
|
||||
)
|
||||
|
||||
/obj/item/clothing/glasses/sunglasses_fake
|
||||
@@ -290,9 +290,9 @@
|
||||
flash_protect = 0
|
||||
tint = 0
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/eyes.dmi',
|
||||
"Drask" = 'icons/mob/species/drask/eyes.dmi',
|
||||
"Grey" = 'icons/mob/species/grey/eyes.dmi'
|
||||
"Vox" = 'icons/mob/clothing/species/vox/eyes.dmi',
|
||||
"Drask" = 'icons/mob/clothing/species/drask/eyes.dmi',
|
||||
"Grey" = 'icons/mob/clothing/species/grey/eyes.dmi'
|
||||
)
|
||||
|
||||
/obj/item/clothing/glasses/sunglasses/noir
|
||||
@@ -344,9 +344,9 @@
|
||||
tint = 1
|
||||
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/eyes.dmi',
|
||||
"Drask" = 'icons/mob/species/drask/eyes.dmi',
|
||||
"Grey" = 'icons/mob/species/grey/eyes.dmi'
|
||||
"Vox" = 'icons/mob/clothing/species/vox/eyes.dmi',
|
||||
"Drask" = 'icons/mob/clothing/species/drask/eyes.dmi',
|
||||
"Grey" = 'icons/mob/clothing/species/grey/eyes.dmi'
|
||||
)
|
||||
|
||||
/obj/item/clothing/glasses/sunglasses/lasers
|
||||
@@ -370,9 +370,9 @@
|
||||
tint = 2
|
||||
visor_vars_to_toggle = VISOR_FLASHPROTECT | VISOR_TINT
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/eyes.dmi',
|
||||
"Drask" = 'icons/mob/species/drask/eyes.dmi',
|
||||
"Grey" = 'icons/mob/species/grey/eyes.dmi'
|
||||
"Vox" = 'icons/mob/clothing/species/vox/eyes.dmi',
|
||||
"Drask" = 'icons/mob/clothing/species/drask/eyes.dmi',
|
||||
"Grey" = 'icons/mob/clothing/species/grey/eyes.dmi'
|
||||
)
|
||||
|
||||
/obj/item/clothing/glasses/welding/attack_self(mob/user)
|
||||
@@ -395,6 +395,12 @@
|
||||
tint = 3 //to make them blind
|
||||
prescription_upgradable = 0
|
||||
|
||||
/obj/item/clothing/glasses/sunglasses/blindfold/fake
|
||||
name = "tattered blindfold"
|
||||
desc = "A see-through blindfold perfect for cheating at games like pin the stunbaton on the clown."
|
||||
flash_protect = 0
|
||||
tint = 0
|
||||
|
||||
/obj/item/clothing/glasses/sunglasses/prescription
|
||||
prescription = 1
|
||||
|
||||
@@ -414,9 +420,9 @@
|
||||
flash_protect = -1
|
||||
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/eyes.dmi',
|
||||
"Grey" = 'icons/mob/species/grey/eyes.dmi',
|
||||
"Drask" = 'icons/mob/species/drask/eyes.dmi'
|
||||
"Vox" = 'icons/mob/clothing/species/vox/eyes.dmi',
|
||||
"Grey" = 'icons/mob/clothing/species/grey/eyes.dmi',
|
||||
"Drask" = 'icons/mob/clothing/species/drask/eyes.dmi'
|
||||
)
|
||||
|
||||
/obj/item/clothing/glasses/thermal/emp_act(severity)
|
||||
@@ -463,9 +469,9 @@
|
||||
lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE
|
||||
resistance_flags = LAVA_PROOF | FIRE_PROOF
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/eyes.dmi',
|
||||
"Grey" = 'icons/mob/species/grey/eyes.dmi',
|
||||
"Drask" = 'icons/mob/species/drask/eyes.dmi'
|
||||
"Vox" = 'icons/mob/clothing/species/vox/eyes.dmi',
|
||||
"Grey" = 'icons/mob/clothing/species/grey/eyes.dmi',
|
||||
"Drask" = 'icons/mob/clothing/species/drask/eyes.dmi'
|
||||
)
|
||||
|
||||
/obj/item/clothing/glasses/godeye/attackby(obj/item/W as obj, mob/user as mob, params)
|
||||
@@ -493,9 +499,9 @@
|
||||
tint = 0
|
||||
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/eyes.dmi',
|
||||
"Grey" = 'icons/mob/species/grey/eyes.dmi',
|
||||
"Drask" = 'icons/mob/species/drask/eyes.dmi'
|
||||
"Vox" = 'icons/mob/clothing/species/vox/eyes.dmi',
|
||||
"Grey" = 'icons/mob/clothing/species/grey/eyes.dmi',
|
||||
"Drask" = 'icons/mob/clothing/species/drask/eyes.dmi'
|
||||
)
|
||||
|
||||
/obj/item/clothing/glasses/tajblind/eng
|
||||
|
||||
@@ -36,9 +36,9 @@
|
||||
examine_extensions = list(EXAMINE_HUD_MEDICAL)
|
||||
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/eyes.dmi',
|
||||
"Drask" = 'icons/mob/species/drask/eyes.dmi',
|
||||
"Grey" = 'icons/mob/species/grey/eyes.dmi'
|
||||
"Vox" = 'icons/mob/clothing/species/vox/eyes.dmi',
|
||||
"Drask" = 'icons/mob/clothing/species/drask/eyes.dmi',
|
||||
"Grey" = 'icons/mob/clothing/species/grey/eyes.dmi'
|
||||
)
|
||||
|
||||
/obj/item/clothing/glasses/hud/health/night
|
||||
@@ -67,9 +67,9 @@
|
||||
HUDType = DATA_HUD_DIAGNOSTIC
|
||||
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/eyes.dmi',
|
||||
"Drask" = 'icons/mob/species/drask/eyes.dmi',
|
||||
"Grey" = 'icons/mob/species/grey/eyes.dmi'
|
||||
"Vox" = 'icons/mob/clothing/species/vox/eyes.dmi',
|
||||
"Drask" = 'icons/mob/clothing/species/drask/eyes.dmi',
|
||||
"Grey" = 'icons/mob/clothing/species/grey/eyes.dmi'
|
||||
)
|
||||
|
||||
/obj/item/clothing/glasses/hud/diagnostic/night
|
||||
@@ -100,9 +100,9 @@
|
||||
examine_extensions = list(EXAMINE_HUD_SECURITY_READ, EXAMINE_HUD_SECURITY_WRITE)
|
||||
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/eyes.dmi',
|
||||
"Drask" = 'icons/mob/species/drask/eyes.dmi',
|
||||
"Grey" = 'icons/mob/species/grey/eyes.dmi'
|
||||
"Vox" = 'icons/mob/clothing/species/vox/eyes.dmi',
|
||||
"Drask" = 'icons/mob/clothing/species/drask/eyes.dmi',
|
||||
"Grey" = 'icons/mob/clothing/species/grey/eyes.dmi'
|
||||
)
|
||||
|
||||
|
||||
@@ -137,9 +137,9 @@
|
||||
prescription_upgradable = 1
|
||||
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/eyes.dmi',
|
||||
"Drask" = 'icons/mob/species/drask/eyes.dmi',
|
||||
"Grey" = 'icons/mob/species/grey/eyes.dmi'
|
||||
"Vox" = 'icons/mob/clothing/species/vox/eyes.dmi',
|
||||
"Drask" = 'icons/mob/clothing/species/drask/eyes.dmi',
|
||||
"Grey" = 'icons/mob/clothing/species/grey/eyes.dmi'
|
||||
)
|
||||
|
||||
/obj/item/clothing/glasses/hud/security/sunglasses/prescription
|
||||
@@ -152,9 +152,9 @@
|
||||
HUDType = DATA_HUD_HYDROPONIC
|
||||
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/eyes.dmi',
|
||||
"Drask" = 'icons/mob/species/drask/eyes.dmi',
|
||||
"Grey" = 'icons/mob/species/grey/eyes.dmi'
|
||||
"Vox" = 'icons/mob/clothing/species/vox/eyes.dmi',
|
||||
"Drask" = 'icons/mob/clothing/species/drask/eyes.dmi',
|
||||
"Grey" = 'icons/mob/clothing/species/grey/eyes.dmi'
|
||||
)
|
||||
|
||||
/obj/item/clothing/glasses/hud/hydroponic/night
|
||||
@@ -177,7 +177,7 @@
|
||||
up = 0
|
||||
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/eyes.dmi'
|
||||
"Vox" = 'icons/mob/clothing/species/vox/eyes.dmi'
|
||||
)
|
||||
|
||||
/obj/item/clothing/glasses/hud/security/tajblind/attack_self()
|
||||
@@ -193,9 +193,9 @@
|
||||
up = 0
|
||||
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/eyes.dmi',
|
||||
"Grey" = 'icons/mob/species/grey/eyes.dmi',
|
||||
"Drask" = 'icons/mob/species/drask/eyes.dmi'
|
||||
"Vox" = 'icons/mob/clothing/species/vox/eyes.dmi',
|
||||
"Grey" = 'icons/mob/clothing/species/grey/eyes.dmi',
|
||||
"Drask" = 'icons/mob/clothing/species/drask/eyes.dmi'
|
||||
)
|
||||
|
||||
/obj/item/clothing/glasses/hud/health/tajblind/attack_self()
|
||||
@@ -209,9 +209,9 @@
|
||||
HUDType = DATA_HUD_SECURITY_BASIC
|
||||
examine_extensions = list(EXAMINE_HUD_SKILLS)
|
||||
sprite_sheets = list(
|
||||
"Drask" = 'icons/mob/species/drask/eyes.dmi',
|
||||
"Grey" = 'icons/mob/species/grey/eyes.dmi',
|
||||
"Vox" = 'icons/mob/species/vox/eyes.dmi'
|
||||
"Drask" = 'icons/mob/clothing/species/drask/eyes.dmi',
|
||||
"Grey" = 'icons/mob/clothing/species/grey/eyes.dmi',
|
||||
"Vox" = 'icons/mob/clothing/species/vox/eyes.dmi'
|
||||
)
|
||||
|
||||
/obj/item/clothing/glasses/hud/skills/sunglasses
|
||||
@@ -223,7 +223,7 @@
|
||||
tint = 1
|
||||
prescription_upgradable = TRUE
|
||||
sprite_sheets = list(
|
||||
"Drask" = 'icons/mob/species/drask/eyes.dmi',
|
||||
"Grey" = 'icons/mob/species/grey/eyes.dmi',
|
||||
"Vox" = 'icons/mob/species/vox/eyes.dmi'
|
||||
"Drask" = 'icons/mob/clothing/species/drask/eyes.dmi',
|
||||
"Grey" = 'icons/mob/clothing/species/grey/eyes.dmi',
|
||||
"Vox" = 'icons/mob/clothing/species/vox/eyes.dmi'
|
||||
)
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
icon_state = "beanie" //Default white
|
||||
item_color = "beanie"
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/head.dmi',
|
||||
"Vox" = 'icons/mob/clothing/species/vox/head.dmi',
|
||||
)
|
||||
|
||||
/obj/item/clothing/head/beanie/black
|
||||
|
||||
@@ -66,10 +66,10 @@
|
||||
item_state = "welding"
|
||||
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/helmet.dmi',
|
||||
"Unathi" = 'icons/mob/species/unathi/mask.dmi',
|
||||
"Tajaran" = 'icons/mob/species/tajaran/mask.dmi',
|
||||
"Vulpkanin" = 'icons/mob/species/vulpkanin/mask.dmi'
|
||||
"Vox" = 'icons/mob/clothing/species/vox/helmet.dmi',
|
||||
"Unathi" = 'icons/mob/clothing/species/unathi/mask.dmi',
|
||||
"Tajaran" = 'icons/mob/clothing/species/tajaran/mask.dmi',
|
||||
"Vulpkanin" = 'icons/mob/clothing/species/vulpkanin/mask.dmi'
|
||||
)
|
||||
|
||||
/obj/item/clothing/head/collectable/slime
|
||||
@@ -116,7 +116,7 @@
|
||||
desc = "WARNING! Offers no real protection, or luminosity, but it is damn fancy!"
|
||||
icon_state = "hardhat0_yellow"
|
||||
item_state = "hardhat0_yellow"
|
||||
dog_fashion = /datum/dog_fashion/head
|
||||
dog_fashion = /datum/dog_fashion/head/hardhat
|
||||
|
||||
/obj/item/clothing/head/collectable/HoS
|
||||
name = "collectable HoS hat"
|
||||
@@ -142,5 +142,5 @@
|
||||
item_state = "swat"
|
||||
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/helmet.dmi'
|
||||
"Vox" = 'icons/mob/clothing/species/vox/helmet.dmi'
|
||||
)
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
resistance_flags = FIRE_PROOF
|
||||
dog_fashion = /datum/dog_fashion/head/hardhat
|
||||
sprite_sheets = list(
|
||||
"Grey" = 'icons/mob/species/grey/head.dmi'
|
||||
"Grey" = 'icons/mob/clothing/species/grey/head.dmi'
|
||||
)
|
||||
|
||||
/obj/item/clothing/head/hardhat/attack_self(mob/living/user)
|
||||
@@ -67,6 +67,7 @@
|
||||
max_heat_protection_temperature = FIRE_HELM_MAX_TEMP_PROTECT
|
||||
cold_protection = HEAD
|
||||
min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT
|
||||
dog_fashion = /datum/dog_fashion/head/hardhat/red
|
||||
|
||||
/obj/item/clothing/head/hardhat/white
|
||||
name = "white hard hat"
|
||||
@@ -78,7 +79,7 @@
|
||||
max_heat_protection_temperature = FIRE_HELM_MAX_TEMP_PROTECT
|
||||
cold_protection = HEAD
|
||||
min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT
|
||||
dog_fashion = /datum/dog_fashion/head/hardhat
|
||||
dog_fashion = /datum/dog_fashion/head/hardhat/white
|
||||
|
||||
/obj/item/clothing/head/hardhat/dblue
|
||||
name = "blue hard hat"
|
||||
@@ -100,5 +101,5 @@
|
||||
min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT
|
||||
dog_fashion = null
|
||||
sprite_sheets = list(
|
||||
"Grey" = 'icons/mob/species/grey/helmet.dmi'
|
||||
"Grey" = 'icons/mob/clothing/species/grey/helmet.dmi'
|
||||
)
|
||||
|
||||
@@ -15,9 +15,9 @@
|
||||
strip_delay = 60
|
||||
dog_fashion = /datum/dog_fashion/head/helmet
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/helmet.dmi',
|
||||
"Drask" = 'icons/mob/species/drask/helmet.dmi',
|
||||
"Grey" = 'icons/mob/species/grey/helmet.dmi'
|
||||
"Vox" = 'icons/mob/clothing/species/vox/helmet.dmi',
|
||||
"Drask" = 'icons/mob/clothing/species/drask/helmet.dmi',
|
||||
"Grey" = 'icons/mob/clothing/species/grey/helmet.dmi'
|
||||
)
|
||||
|
||||
/obj/item/clothing/head/helmet/attack_self(mob/user)
|
||||
@@ -224,7 +224,7 @@
|
||||
flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH
|
||||
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/helmet.dmi'
|
||||
"Vox" = 'icons/mob/clothing/species/vox/helmet.dmi'
|
||||
)
|
||||
|
||||
/obj/item/clothing/head/helmet/riot/knight/blue
|
||||
|
||||
@@ -82,7 +82,7 @@
|
||||
dog_fashion = /datum/dog_fashion/head/detective
|
||||
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/head.dmi'
|
||||
"Vox" = 'icons/mob/clothing/species/vox/head.dmi'
|
||||
)
|
||||
|
||||
//Mime
|
||||
@@ -176,7 +176,7 @@
|
||||
icon_state = "surgcap_blue"
|
||||
flags = BLOCKHEADHAIR
|
||||
sprite_sheets = list(
|
||||
"Drask" = 'icons/mob/species/drask/head.dmi'
|
||||
"Drask" = 'icons/mob/clothing/species/drask/head.dmi'
|
||||
)
|
||||
|
||||
/obj/item/clothing/head/surgery/purple
|
||||
|
||||
@@ -81,7 +81,7 @@
|
||||
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE
|
||||
|
||||
sprite_sheets = list(
|
||||
"Grey" = 'icons/mob/species/grey/helmet.dmi'
|
||||
"Grey" = 'icons/mob/clothing/species/grey/helmet.dmi'
|
||||
)
|
||||
|
||||
|
||||
@@ -95,7 +95,7 @@
|
||||
flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH
|
||||
|
||||
sprite_sheets = list(
|
||||
"Grey" = 'icons/mob/species/grey/head.dmi'
|
||||
"Grey" = 'icons/mob/clothing/species/grey/head.dmi'
|
||||
)
|
||||
|
||||
/obj/item/clothing/head/snowman
|
||||
@@ -108,7 +108,7 @@
|
||||
flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH
|
||||
|
||||
sprite_sheets = list(
|
||||
"Grey" = 'icons/mob/species/grey/head.dmi'
|
||||
"Grey" = 'icons/mob/clothing/species/grey/head.dmi'
|
||||
)
|
||||
|
||||
/obj/item/clothing/head/that
|
||||
@@ -273,7 +273,7 @@
|
||||
flags = BLOCKHAIR
|
||||
|
||||
sprite_sheets = list(
|
||||
"Grey" = 'icons/mob/species/grey/head.dmi'
|
||||
"Grey" = 'icons/mob/clothing/species/grey/head.dmi'
|
||||
)
|
||||
|
||||
/obj/item/clothing/head/corgi
|
||||
@@ -313,7 +313,7 @@
|
||||
icon_state = "fedora"
|
||||
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/head.dmi'
|
||||
"Vox" = 'icons/mob/clothing/species/vox/head.dmi'
|
||||
)
|
||||
|
||||
/obj/item/clothing/head/fedora/whitefedora
|
||||
@@ -321,7 +321,7 @@
|
||||
icon_state = "wfedora"
|
||||
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/head.dmi'
|
||||
"Vox" = 'icons/mob/clothing/species/vox/head.dmi'
|
||||
)
|
||||
|
||||
/obj/item/clothing/head/fedora/brownfedora
|
||||
@@ -329,7 +329,7 @@
|
||||
icon_state = "bfedora"
|
||||
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/head.dmi'
|
||||
"Vox" = 'icons/mob/clothing/species/vox/head.dmi'
|
||||
)
|
||||
|
||||
/obj/item/clothing/head/stalhelm //Why do these exist
|
||||
@@ -436,7 +436,7 @@
|
||||
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE
|
||||
|
||||
sprite_sheets = list(
|
||||
"Grey" = 'icons/mob/species/grey/head.dmi'
|
||||
"Grey" = 'icons/mob/clothing/species/grey/head.dmi'
|
||||
)
|
||||
actions_types = list(/datum/action/item_action/caw)
|
||||
|
||||
@@ -469,7 +469,7 @@
|
||||
flags_inv = HIDEFACE|HIDEEARS
|
||||
|
||||
sprite_sheets = list(
|
||||
"Grey" = 'icons/mob/species/grey/head.dmi'
|
||||
"Grey" = 'icons/mob/clothing/species/grey/head.dmi'
|
||||
)
|
||||
|
||||
/obj/item/clothing/head/papersack/smiley
|
||||
@@ -480,7 +480,7 @@
|
||||
flags_inv = HIDEFACE|HIDEEARS
|
||||
|
||||
sprite_sheets = list(
|
||||
"Grey" = 'icons/mob/species/grey/head.dmi'
|
||||
"Grey" = 'icons/mob/clothing/species/grey/head.dmi'
|
||||
)
|
||||
|
||||
/obj/item/clothing/head/crown
|
||||
|
||||
@@ -28,11 +28,11 @@
|
||||
resistance_flags = FIRE_PROOF
|
||||
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/head.dmi',
|
||||
"Unathi" = 'icons/mob/species/unathi/helmet.dmi',
|
||||
"Tajaran" = 'icons/mob/species/tajaran/helmet.dmi',
|
||||
"Vulpkanin" = 'icons/mob/species/vulpkanin/helmet.dmi',
|
||||
"Grey" = 'icons/mob/species/grey/helmet.dmi'
|
||||
"Vox" = 'icons/mob/clothing/species/vox/head.dmi',
|
||||
"Unathi" = 'icons/mob/clothing/species/unathi/helmet.dmi',
|
||||
"Tajaran" = 'icons/mob/clothing/species/tajaran/helmet.dmi',
|
||||
"Vulpkanin" = 'icons/mob/clothing/species/vulpkanin/helmet.dmi',
|
||||
"Grey" = 'icons/mob/clothing/species/grey/helmet.dmi'
|
||||
)
|
||||
|
||||
/obj/item/clothing/head/welding/attack_self(mob/user)
|
||||
@@ -141,7 +141,7 @@
|
||||
min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT
|
||||
dog_fashion = /datum/dog_fashion/head/ushanka
|
||||
sprite_sheets = list(
|
||||
"Grey" = 'icons/mob/species/grey/head.dmi'
|
||||
"Grey" = 'icons/mob/clothing/species/grey/head.dmi'
|
||||
)
|
||||
|
||||
/obj/item/clothing/head/ushanka/attack_self(mob/user as mob)
|
||||
@@ -166,10 +166,10 @@
|
||||
flags = BLOCKHAIR
|
||||
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE
|
||||
flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH
|
||||
|
||||
dog_fashion = null
|
||||
|
||||
sprite_sheets = list(
|
||||
"Grey" = 'icons/mob/species/grey/head.dmi'
|
||||
"Grey" = 'icons/mob/clothing/species/grey/head.dmi'
|
||||
)
|
||||
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
|
||||
@@ -202,10 +202,10 @@
|
||||
if(!istype(user)) return
|
||||
var/obj/item/organ/external/head/head_organ = user.get_organ("head")
|
||||
|
||||
mob = new/icon("icon" = 'icons/mob/head.dmi', "icon_state" = "kitty")
|
||||
mob = new/icon("icon" = 'icons/mob/clothing/head.dmi', "icon_state" = "kitty")
|
||||
mob.Blend(head_organ.hair_colour, ICON_ADD)
|
||||
|
||||
var/icon/earbit = new/icon("icon" = 'icons/mob/head.dmi', "icon_state" = "kittyinner")
|
||||
var/icon/earbit = new/icon("icon" = 'icons/mob/clothing/head.dmi', "icon_state" = "kittyinner")
|
||||
mob.Blend(earbit, ICON_OVERLAY)
|
||||
|
||||
icon_override = mob
|
||||
@@ -224,10 +224,10 @@
|
||||
/obj/item/clothing/head/kitty/mouse/update_icon(mob/living/carbon/human/user)
|
||||
if(!istype(user)) return
|
||||
var/obj/item/organ/external/head/head_organ = user.get_organ("head")
|
||||
mob = new/icon("icon" = 'icons/mob/head.dmi', "icon_state" = "mousey")
|
||||
mob = new/icon("icon" = 'icons/mob/clothing/head.dmi', "icon_state" = "mousey")
|
||||
mob.Blend(head_organ.hair_colour, ICON_ADD)
|
||||
|
||||
var/icon/earbit = new/icon("icon" = 'icons/mob/head.dmi', "icon_state" = "mouseyinner")
|
||||
var/icon/earbit = new/icon("icon" = 'icons/mob/clothing/head.dmi', "icon_state" = "mouseyinner")
|
||||
mob.Blend(earbit, ICON_OVERLAY)
|
||||
|
||||
icon_override = mob
|
||||
@@ -242,7 +242,7 @@
|
||||
species_disguise = "High-tech robot"
|
||||
dog_fashion = /datum/dog_fashion/head/cardborg
|
||||
sprite_sheets = list(
|
||||
"Grey" = 'icons/mob/species/grey/head.dmi'
|
||||
"Grey" = 'icons/mob/clothing/species/grey/head.dmi'
|
||||
)
|
||||
|
||||
|
||||
@@ -268,8 +268,8 @@
|
||||
item_state = "head_mirror"
|
||||
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/head.dmi',
|
||||
"Drask" = 'icons/mob/species/drask/head.dmi',
|
||||
"Grey" = 'icons/mob/species/grey/head.dmi'
|
||||
"Vox" = 'icons/mob/clothing/species/vox/head.dmi',
|
||||
"Drask" = 'icons/mob/clothing/species/drask/head.dmi',
|
||||
"Grey" = 'icons/mob/clothing/species/grey/head.dmi'
|
||||
)
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
actions_types = list(/datum/action/item_action/flip_cap)
|
||||
dog_fashion = /datum/dog_fashion/head/cargo_tech
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/head.dmi'
|
||||
"Vox" = 'icons/mob/clothing/species/vox/head.dmi'
|
||||
)
|
||||
|
||||
/obj/item/clothing/head/soft/dropped()
|
||||
|
||||
@@ -10,12 +10,12 @@
|
||||
adjusted_flags = SLOT_HEAD
|
||||
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/mask.dmi',
|
||||
"Unathi" = 'icons/mob/species/unathi/mask.dmi',
|
||||
"Tajaran" = 'icons/mob/species/tajaran/mask.dmi',
|
||||
"Vulpkanin" = 'icons/mob/species/vulpkanin/mask.dmi',
|
||||
"Grey" = 'icons/mob/species/grey/mask.dmi',
|
||||
"Drask" = 'icons/mob/species/drask/mask.dmi'
|
||||
"Vox" = 'icons/mob/clothing/species/vox/mask.dmi',
|
||||
"Unathi" = 'icons/mob/clothing/species/unathi/mask.dmi',
|
||||
"Tajaran" = 'icons/mob/clothing/species/tajaran/mask.dmi',
|
||||
"Vulpkanin" = 'icons/mob/clothing/species/vulpkanin/mask.dmi',
|
||||
"Grey" = 'icons/mob/clothing/species/grey/mask.dmi',
|
||||
"Drask" = 'icons/mob/clothing/species/drask/mask.dmi'
|
||||
)
|
||||
|
||||
/obj/item/clothing/mask/balaclava/attack_self(mob/user)
|
||||
@@ -31,12 +31,12 @@
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/mask.dmi',
|
||||
"Unathi" = 'icons/mob/species/unathi/mask.dmi',
|
||||
"Tajaran" = 'icons/mob/species/tajaran/mask.dmi',
|
||||
"Vulpkanin" = 'icons/mob/species/vulpkanin/mask.dmi',
|
||||
"Grey" = 'icons/mob/species/grey/mask.dmi',
|
||||
"Drask" = 'icons/mob/species/drask/mask.dmi'
|
||||
"Vox" = 'icons/mob/clothing/species/vox/mask.dmi',
|
||||
"Unathi" = 'icons/mob/clothing/species/unathi/mask.dmi',
|
||||
"Tajaran" = 'icons/mob/clothing/species/tajaran/mask.dmi',
|
||||
"Vulpkanin" = 'icons/mob/clothing/species/vulpkanin/mask.dmi',
|
||||
"Grey" = 'icons/mob/clothing/species/grey/mask.dmi',
|
||||
"Drask" = 'icons/mob/clothing/species/drask/mask.dmi'
|
||||
)
|
||||
|
||||
/obj/item/clothing/mask/luchador/tecnicos
|
||||
|
||||
@@ -11,14 +11,14 @@
|
||||
actions_types = list(/datum/action/item_action/adjust)
|
||||
resistance_flags = NONE
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/mask.dmi',
|
||||
"Vox Armalis" = 'icons/mob/species/armalis/mask.dmi',
|
||||
"Unathi" = 'icons/mob/species/unathi/mask.dmi',
|
||||
"Tajaran" = 'icons/mob/species/tajaran/mask.dmi',
|
||||
"Vulpkanin" = 'icons/mob/species/vulpkanin/mask.dmi',
|
||||
"Grey" = 'icons/mob/species/grey/mask.dmi',
|
||||
"Drask" = 'icons/mob/species/drask/mask.dmi',
|
||||
"Plasmaman" = 'icons/mob/species/plasmaman/mask.dmi'
|
||||
"Vox" = 'icons/mob/clothing/species/vox/mask.dmi',
|
||||
"Vox Armalis" = 'icons/mob/clothing/species/armalis/mask.dmi',
|
||||
"Unathi" = 'icons/mob/clothing/species/unathi/mask.dmi',
|
||||
"Tajaran" = 'icons/mob/clothing/species/tajaran/mask.dmi',
|
||||
"Vulpkanin" = 'icons/mob/clothing/species/vulpkanin/mask.dmi',
|
||||
"Grey" = 'icons/mob/clothing/species/grey/mask.dmi',
|
||||
"Drask" = 'icons/mob/clothing/species/drask/mask.dmi',
|
||||
"Plasmaman" = 'icons/mob/clothing/species/plasmaman/mask.dmi'
|
||||
)
|
||||
|
||||
/obj/item/clothing/mask/breath/attack_self(mob/user)
|
||||
|
||||
@@ -11,13 +11,13 @@
|
||||
permeability_coefficient = 0.01
|
||||
resistance_flags = NONE
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/mask.dmi',
|
||||
"Unathi" = 'icons/mob/species/unathi/mask.dmi',
|
||||
"Tajaran" = 'icons/mob/species/tajaran/mask.dmi',
|
||||
"Vulpkanin" = 'icons/mob/species/vulpkanin/mask.dmi',
|
||||
"Drask" = 'icons/mob/species/drask/mask.dmi',
|
||||
"Grey" = 'icons/mob/species/grey/mask.dmi',
|
||||
"Plasmaman" = 'icons/mob/species/plasmaman/mask.dmi'
|
||||
"Vox" = 'icons/mob/clothing/species/vox/mask.dmi',
|
||||
"Unathi" = 'icons/mob/clothing/species/unathi/mask.dmi',
|
||||
"Tajaran" = 'icons/mob/clothing/species/tajaran/mask.dmi',
|
||||
"Vulpkanin" = 'icons/mob/clothing/species/vulpkanin/mask.dmi',
|
||||
"Drask" = 'icons/mob/clothing/species/drask/mask.dmi',
|
||||
"Grey" = 'icons/mob/clothing/species/grey/mask.dmi',
|
||||
"Plasmaman" = 'icons/mob/clothing/species/plasmaman/mask.dmi'
|
||||
)
|
||||
|
||||
// **** Welding gas mask ****
|
||||
@@ -50,12 +50,12 @@
|
||||
resistance_flags = FIRE_PROOF
|
||||
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/mask.dmi',
|
||||
"Unathi" = 'icons/mob/species/unathi/mask.dmi',
|
||||
"Tajaran" = 'icons/mob/species/tajaran/mask.dmi',
|
||||
"Vulpkanin" = 'icons/mob/species/vulpkanin/mask.dmi',
|
||||
"Drask" = 'icons/mob/species/drask/mask.dmi',
|
||||
"Grey" = 'icons/mob/species/grey/mask.dmi'
|
||||
"Vox" = 'icons/mob/clothing/species/vox/mask.dmi',
|
||||
"Unathi" = 'icons/mob/clothing/species/unathi/mask.dmi',
|
||||
"Tajaran" = 'icons/mob/clothing/species/tajaran/mask.dmi',
|
||||
"Vulpkanin" = 'icons/mob/clothing/species/vulpkanin/mask.dmi',
|
||||
"Drask" = 'icons/mob/clothing/species/drask/mask.dmi',
|
||||
"Grey" = 'icons/mob/clothing/species/grey/mask.dmi'
|
||||
)
|
||||
|
||||
/obj/item/clothing/mask/gas/explorer/marines
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
var/locked = FALSE //Indicates if a mask is locked, should always start as 0.
|
||||
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/mask.dmi'
|
||||
"Vox" = 'icons/mob/clothing/species/vox/mask.dmi'
|
||||
)
|
||||
|
||||
// Clumsy folks can't take the mask off themselves.
|
||||
@@ -91,11 +91,11 @@
|
||||
flags = DROPDEL
|
||||
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/mask.dmi',
|
||||
"Unathi" = 'icons/mob/species/unathi/mask.dmi',
|
||||
"Tajaran" = 'icons/mob/species/tajaran/mask.dmi',
|
||||
"Vulpkanin" = 'icons/mob/species/vulpkanin/mask.dmi',
|
||||
"Grey" = 'icons/mob/species/grey/mask.dmi'
|
||||
"Vox" = 'icons/mob/clothing/species/vox/mask.dmi',
|
||||
"Unathi" = 'icons/mob/clothing/species/unathi/mask.dmi',
|
||||
"Tajaran" = 'icons/mob/clothing/species/tajaran/mask.dmi',
|
||||
"Vulpkanin" = 'icons/mob/clothing/species/vulpkanin/mask.dmi',
|
||||
"Grey" = 'icons/mob/clothing/species/grey/mask.dmi'
|
||||
)
|
||||
|
||||
/obj/item/clothing/mask/muzzle/tapegag/dropped(mob/user)
|
||||
@@ -119,12 +119,12 @@
|
||||
materials = list(MAT_METAL=500, MAT_GLASS=50)
|
||||
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/mask.dmi',
|
||||
"Unathi" = 'icons/mob/species/unathi/mask.dmi',
|
||||
"Tajaran" = 'icons/mob/species/tajaran/mask.dmi',
|
||||
"Vulpkanin" = 'icons/mob/species/vulpkanin/mask.dmi',
|
||||
"Grey" = 'icons/mob/species/grey/mask.dmi',
|
||||
"Drask" = 'icons/mob/species/drask/mask.dmi'
|
||||
"Vox" = 'icons/mob/clothing/species/vox/mask.dmi',
|
||||
"Unathi" = 'icons/mob/clothing/species/unathi/mask.dmi',
|
||||
"Tajaran" = 'icons/mob/clothing/species/tajaran/mask.dmi',
|
||||
"Vulpkanin" = 'icons/mob/clothing/species/vulpkanin/mask.dmi',
|
||||
"Grey" = 'icons/mob/clothing/species/grey/mask.dmi',
|
||||
"Drask" = 'icons/mob/clothing/species/drask/mask.dmi'
|
||||
)
|
||||
|
||||
/obj/item/clothing/mask/muzzle/safety/shock
|
||||
@@ -216,12 +216,12 @@
|
||||
actions_types = list(/datum/action/item_action/adjust)
|
||||
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/mask.dmi',
|
||||
"Unathi" = 'icons/mob/species/unathi/mask.dmi',
|
||||
"Tajaran" = 'icons/mob/species/tajaran/mask.dmi',
|
||||
"Vulpkanin" = 'icons/mob/species/vulpkanin/mask.dmi',
|
||||
"Grey" = 'icons/mob/species/grey/mask.dmi',
|
||||
"Drask" = 'icons/mob/species/drask/mask.dmi'
|
||||
"Vox" = 'icons/mob/clothing/species/vox/mask.dmi',
|
||||
"Unathi" = 'icons/mob/clothing/species/unathi/mask.dmi',
|
||||
"Tajaran" = 'icons/mob/clothing/species/tajaran/mask.dmi',
|
||||
"Vulpkanin" = 'icons/mob/clothing/species/vulpkanin/mask.dmi',
|
||||
"Grey" = 'icons/mob/clothing/species/grey/mask.dmi',
|
||||
"Drask" = 'icons/mob/clothing/species/drask/mask.dmi'
|
||||
)
|
||||
|
||||
|
||||
@@ -237,12 +237,12 @@
|
||||
dog_fashion = /datum/dog_fashion/head/not_ian
|
||||
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/mask.dmi',
|
||||
"Unathi" = 'icons/mob/species/unathi/mask.dmi',
|
||||
"Tajaran" = 'icons/mob/species/tajaran/mask.dmi',
|
||||
"Vulpkanin" = 'icons/mob/species/vulpkanin/mask.dmi',
|
||||
"Grey" = 'icons/mob/species/grey/mask.dmi',
|
||||
"Drask" = 'icons/mob/species/drask/mask.dmi'
|
||||
"Vox" = 'icons/mob/clothing/species/vox/mask.dmi',
|
||||
"Unathi" = 'icons/mob/clothing/species/unathi/mask.dmi',
|
||||
"Tajaran" = 'icons/mob/clothing/species/tajaran/mask.dmi',
|
||||
"Vulpkanin" = 'icons/mob/clothing/species/vulpkanin/mask.dmi',
|
||||
"Grey" = 'icons/mob/clothing/species/grey/mask.dmi',
|
||||
"Drask" = 'icons/mob/clothing/species/drask/mask.dmi'
|
||||
)
|
||||
|
||||
/obj/item/clothing/mask/fakemoustache/attack_self(mob/user)
|
||||
@@ -318,8 +318,8 @@
|
||||
var/originalname = ""
|
||||
|
||||
sprite_sheets = list(
|
||||
"Grey" = 'icons/mob/species/grey/mask.dmi',
|
||||
"Drask" = 'icons/mob/species/drask/mask.dmi'
|
||||
"Grey" = 'icons/mob/clothing/species/grey/mask.dmi',
|
||||
"Drask" = 'icons/mob/clothing/species/drask/mask.dmi'
|
||||
)
|
||||
|
||||
/obj/item/clothing/mask/horsehead/equipped(mob/user, slot)
|
||||
@@ -427,12 +427,12 @@
|
||||
icon_state = "bandbotany"
|
||||
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/mask.dmi',
|
||||
"Unathi" = 'icons/mob/species/unathi/mask.dmi',
|
||||
"Tajaran" = 'icons/mob/species/tajaran/mask.dmi',
|
||||
"Vulpkanin" = 'icons/mob/species/vulpkanin/mask.dmi',
|
||||
"Grey" = 'icons/mob/species/grey/mask.dmi',
|
||||
"Drask" = 'icons/mob/species/drask/mask.dmi'
|
||||
"Vox" = 'icons/mob/clothing/species/vox/mask.dmi',
|
||||
"Unathi" = 'icons/mob/clothing/species/unathi/mask.dmi',
|
||||
"Tajaran" = 'icons/mob/clothing/species/tajaran/mask.dmi',
|
||||
"Vulpkanin" = 'icons/mob/clothing/species/vulpkanin/mask.dmi',
|
||||
"Grey" = 'icons/mob/clothing/species/grey/mask.dmi',
|
||||
"Drask" = 'icons/mob/clothing/species/drask/mask.dmi'
|
||||
)
|
||||
actions_types = list(/datum/action/item_action/adjust)
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
item_state = "gar"
|
||||
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/species/vox/eyes.dmi'
|
||||
"Vox" = 'icons/mob/clothing/species/vox/eyes.dmi'
|
||||
)
|
||||
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user