Merge remote-tracking branch 'upstream/master' into departmental-clothing-vendors

This commit is contained in:
E-MonaRhg
2021-09-06 19:32:39 +02:00
299 changed files with 4627 additions and 4762 deletions
+1 -1
View File
@@ -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.
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" = (
+2
View File
@@ -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
+3
View File
@@ -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"
+2 -1
View File
@@ -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
+2 -1
View File
@@ -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
+2 -1
View File
@@ -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"))
-2
View File
@@ -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))
+13
View File
@@ -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)
+3 -1
View File
@@ -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
+9 -1
View File
@@ -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
-5
View File
@@ -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"])
+16
View File
@@ -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
+5
View File
@@ -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)
+6
View File
@@ -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
+6
View File
@@ -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()
+16
View File
@@ -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()
+8
View File
@@ -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)
+6
View File
@@ -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)
+1 -1
View File
@@ -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
+47
View File
@@ -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")
*/
+6
View File
@@ -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)
+5
View 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)
+7
View File
@@ -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()
+6
View File
@@ -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>",
+6
View File
@@ -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)
+7 -1
View File
@@ -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
View File
@@ -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)
+1 -1
View File
@@ -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.
+11 -3
View File
@@ -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()
+12
View File
@@ -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."
+9 -8
View File
@@ -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
+1 -2
View File
@@ -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
+8
View File
@@ -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!"
+2 -2
View File
@@ -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
+7 -7
View File
@@ -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
+9 -9
View File
@@ -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"
+1 -1
View File
@@ -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>")
+2 -2
View File
@@ -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
+1 -1
View File
@@ -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()
+21 -9
View File
@@ -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))
+1
View File
@@ -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)
+5 -3
View File
@@ -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
+96 -7
View File
@@ -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)
+3 -3
View File
@@ -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
+5 -5
View File
@@ -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()
+1 -1
View File
@@ -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)
+2
View File
@@ -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.")
+2 -3
View File
@@ -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)
+2 -2
View File
@@ -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
+7 -5
View File
@@ -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 -1
View File
@@ -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))
+3 -3
View File
@@ -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 -1
View File
@@ -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)
+2 -2
View File
@@ -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
+1 -1
View File
@@ -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))
+61
View File
@@ -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.")
+2 -2
View File
@@ -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)
+7 -7
View File
@@ -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 -1
View File
@@ -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
+3 -11
View File
@@ -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
+12 -12
View File
@@ -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
+11 -11
View File
@@ -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
+56 -50
View File
@@ -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
+25 -25
View File
@@ -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'
)
+1 -1
View File
@@ -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
+6 -6
View File
@@ -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'
)
+4 -3
View File
@@ -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'
)
+4 -4
View File
@@ -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
+2 -2
View File
@@ -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
+10 -10
View File
@@ -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
+16 -16
View File
@@ -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'
)
+1 -1
View File
@@ -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()
+12 -12
View File
@@ -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
+8 -8
View File
@@ -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)
+13 -13
View File
@@ -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
+32 -32
View File
@@ -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)
+1 -1
View File
@@ -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