diff --git a/code/__DEFINES/autowiki.dm b/code/__DEFINES/autowiki.dm
new file mode 100644
index 000000000000..4edf385bcc82
--- /dev/null
+++ b/code/__DEFINES/autowiki.dm
@@ -0,0 +1,7 @@
+#ifdef AUTOWIKI
+ #define AUTOWIKI_SKIP(skip) autowiki_skip = skip
+ #define IS_AUTOWIKI_SKIP(datum) datum.autowiki_skip
+#else
+ #define AUTOWIKI_SKIP(skip)
+ #define IS_AUTOWIKI_SKIP(datum) UNLINT(FALSE)
+#endif
diff --git a/code/__DEFINES/camera.dm b/code/__DEFINES/camera.dm
index f50d7d8e2c72..ea578874136d 100644
--- a/code/__DEFINES/camera.dm
+++ b/code/__DEFINES/camera.dm
@@ -3,8 +3,10 @@
#define CAMERA_NET_CONTAINMENT "Containment"
#define CAMERA_NET_CONTAINMENT_HIDDEN "Containment Hidden"
#define CAMERA_NET_RESEARCH "Research"
+#define CAMERA_NET_BRIG "Brig"
#define CAMERA_NET_ALAMO "Alamo"
#define CAMERA_NET_NORMANDY "Normandy"
+#define CAMERA_NET_SAIPAN "Saipan"
#define CAMERA_NET_COLONY "Colony"
#define CAMERA_NET_ARES "ARES"
diff --git a/code/__DEFINES/chemistry.dm b/code/__DEFINES/chemistry.dm
index 35e040654881..a3b3b1a4768f 100644
--- a/code/__DEFINES/chemistry.dm
+++ b/code/__DEFINES/chemistry.dm
@@ -2,8 +2,10 @@
* Chemistry defines
*/
+/// Amount of bottle icon variations in total
+#define BOTTLE_ICON_CHOICES 4
/// Amount of random icon variations for pills in total
-#define PILL_ICON_CHOICES 21
+#define PILL_ICON_CHOICES 22
/* Pill icon classes to generate mappings for */
#define PILL_ICON_CLASSES list("bica", "kelo", "dex", "para", "tram", "atox", "tox", "inap", "peri", "spac", "drug", "stim", "alky", "imi", "qc", "tric", "psych", "oxy")
diff --git a/code/__DEFINES/colours.dm b/code/__DEFINES/colours.dm
index e9a03a6382da..309dd7bcff11 100644
--- a/code/__DEFINES/colours.dm
+++ b/code/__DEFINES/colours.dm
@@ -112,6 +112,8 @@
#define LIGHT_COLOR_HOLY_MAGIC "#FFF743"
/// deep crimson
#define LIGHT_COLOR_BLOOD_MAGIC "#D00000"
+/// Warm red color rgb(250, 66, 66)
+#define LIGHT_COLOR_RED "#ff3b3b"
/* These ones aren't a direct color like the ones above, because nothing would fit */
/// Warm orange color, leaning strongly towards yellow. rgb(250, 160, 25)
@@ -150,3 +152,8 @@
#define COLOR_G_ICE "#C7EDDE" //faded cyan
#define COLOR_G_DES "#FF7C1C" //bright orange
#define COLOR_G_JUNG "#64AA6E" //faded green
+
+/// Gun muzzle colors
+#define COLOR_LASER_RED "#FF8D8D"
+#define COLOR_MUZZLE_BLUE "#2CB2E8"
+
diff --git a/code/__DEFINES/conflict.dm b/code/__DEFINES/conflict.dm
index a6a7aa53f182..17fd8b32c280 100644
--- a/code/__DEFINES/conflict.dm
+++ b/code/__DEFINES/conflict.dm
@@ -54,24 +54,25 @@
#define GUN_TRIGGER_SAFETY (1<<1)
#define GUN_UNUSUAL_DESIGN (1<<2)
#define GUN_SILENCED (1<<3)
+#define GUN_CANT_EXECUTE (1<<4)
///If checking for ammo with current.mag you have to check it against numerical values, as booleans will not trigger.
-#define GUN_INTERNAL_MAG (1<<4)
-#define GUN_AUTO_EJECTOR (1<<5)
-#define GUN_AMMO_COUNTER (1<<6)
-#define GUN_BURST_FIRING (1<<7)
-#define GUN_FLASHLIGHT_ON (1<<8)
-#define GUN_WY_RESTRICTED (1<<9)
-#define GUN_SPECIALIST (1<<10)
-#define GUN_WIELDED_FIRING_ONLY (1<<11)
+#define GUN_INTERNAL_MAG (1<<5)
+#define GUN_AUTO_EJECTOR (1<<6)
+#define GUN_AMMO_COUNTER (1<<7)
+#define GUN_BURST_FIRING (1<<8)
+#define GUN_FLASHLIGHT_ON (1<<9)
+#define GUN_WY_RESTRICTED (1<<10)
+#define GUN_SPECIALIST (1<<11)
+#define GUN_WIELDED_FIRING_ONLY (1<<12)
/// removes unwielded accuracy and scatter penalties (not recoil)
-#define GUN_ONE_HAND_WIELDED (1<<12)
-#define GUN_ANTIQUE (1<<13)
+#define GUN_ONE_HAND_WIELDED (1<<13)
+#define GUN_ANTIQUE (1<<14)
/// Whether the gun has been fired by its current user (reset upon `dropped()`)
-#define GUN_RECOIL_BUILDUP (1<<14)
+#define GUN_RECOIL_BUILDUP (1<<15)
/// support weapon, bipod will grant autofire
-#define GUN_SUPPORT_PLATFORM (1<<15)
+#define GUN_SUPPORT_PLATFORM (1<<16)
/// No gun description, only base desc
-#define GUN_NO_DESCRIPTION (1<<16)
+#define GUN_NO_DESCRIPTION (1<<17)
// NOTE: Don't add flags past 1<<23, it'll break things due to BYOND limitations. You can usually use a Component instead.
#define USES_STREAKS (1<<0)
diff --git a/code/__DEFINES/job.dm b/code/__DEFINES/job.dm
index 79f40c89bb53..0173a55e2d17 100644
--- a/code/__DEFINES/job.dm
+++ b/code/__DEFINES/job.dm
@@ -13,6 +13,7 @@
#define SQUAD_SOF "SOF"
#define SQUAD_CBRN "CBRN"
#define SQUAD_FORECON "FORECON"
+#define SQUAD_SOLAR "Solar Devils"
// Job name defines
#define JOB_SQUAD_MARINE "Rifleman"
@@ -124,6 +125,9 @@ GLOBAL_LIST_INIT(job_command_roles, JOB_COMMAND_ROLES_LIST)
#define JOB_GENERAL "USCM General"
#define JOB_ACMC "Assistant Commandant of the Marine Corps"
#define JOB_CMC "Commandant of the Marine Corps"
+#define JOB_PLT_MED "Platoon Corpsman"
+#define JOB_PLT_SL "Platoon Squad Leader"
+#define JOB_SQUAD_TECH "Reconnaissance Support Technician"
// Used to add a timelock to a job. Will be passed onto derivatives
#define AddTimelock(Path, timelockList) \
@@ -263,6 +267,7 @@ GLOBAL_LIST_INIT(job_command_roles, JOB_COMMAND_ROLES_LIST)
#define JOB_UPP_SPECIALIST "UPP Serzhant"
#define JOB_UPP_LEADER "UPP Master Serzhant"
#define JOB_UPP_POLICE "UPP Politsiya"
+#define JOB_UPP_SUPPLY "UPP Logistics Technician"
#define JOB_UPP_LT_OFFICER "UPP Leytenant"
#define JOB_UPP_LT_DOKTOR "UPP Leytenant Doktor"
#define JOB_UPP_SRLT_OFFICER "UPP Senior Leytenant"
@@ -290,6 +295,8 @@ GLOBAL_LIST_INIT(job_command_roles, JOB_COMMAND_ROLES_LIST)
#define JOB_UPP_CREWMAN "UPP Tank Crewman"
+#define JOB_UPP_COMMISSAR "UPP Political Commissar"
+
//-------- CLF --------//
#define JOB_CLF "CLF Guerilla"
#define JOB_CLF_ENGI "CLF Field Technician"
@@ -331,11 +338,15 @@ GLOBAL_LIST_INIT(job_command_roles, JOB_COMMAND_ROLES_LIST)
#define JOB_PROVOST_TML "Provost Team Leader"
#define JOB_PROVOST_ADVISOR "Provost Advisor"
#define JOB_PROVOST_INSPECTOR "Provost Inspector"
+#define JOB_PROVOST_CINSPECTOR "Provost Chief Inspector"
+#define JOB_PROVOST_UNDERCOVER "Provost Undercover Inspector"
+
+#define JOB_PROVOST_DMARSHAL "Provost Deputy Marshal"
#define JOB_PROVOST_MARSHAL "Provost Marshal"
#define JOB_PROVOST_SMARSHAL "Provost Sector Marshal"
#define JOB_PROVOST_CMARSHAL "Provost Chief Marshal"
-#define PROVOST_JOB_LIST list(JOB_PROVOST_ENFORCER, JOB_PROVOST_TML, JOB_PROVOST_ADVISOR, JOB_PROVOST_INSPECTOR, JOB_PROVOST_MARSHAL, JOB_PROVOST_SMARSHAL, JOB_PROVOST_CMARSHAL)
+#define PROVOST_JOB_LIST list(JOB_PROVOST_ENFORCER, JOB_PROVOST_TML, JOB_PROVOST_ADVISOR, JOB_PROVOST_INSPECTOR, JOB_PROVOST_CINSPECTOR, JOB_PROVOST_DMARSHAL, JOB_PROVOST_MARSHAL, JOB_PROVOST_SMARSHAL, JOB_PROVOST_CMARSHAL)
#define JOB_RIOT "Riot Control"
#define JOB_RIOT_CHIEF "Chief Riot Control"
@@ -360,6 +371,7 @@ GLOBAL_LIST_INIT(job_command_roles, JOB_COMMAND_ROLES_LIST)
#define JOB_XENOMORPH_QUEEN "Queen"
// For coloring the ranks in the statistics menu
+#define JOB_PLAYTIME_TIER_0 (0 HOURS)
#define JOB_PLAYTIME_TIER_1 (10 HOURS)
#define JOB_PLAYTIME_TIER_2 (25 HOURS)
#define JOB_PLAYTIME_TIER_3 (70 HOURS)
diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm
index cf6d6c64d9a9..2ab36d51d297 100644
--- a/code/__DEFINES/misc.dm
+++ b/code/__DEFINES/misc.dm
@@ -105,6 +105,7 @@
#define INTERRUPT_ALL_OUT_OF_RANGE (INTERRUPT_ALL & (~INTERRUPT_DIFF_TURF)|INTERRUPT_OUT_OF_RANGE)
#define INTERRUPT_MOVED (INTERRUPT_DIFF_LOC|INTERRUPT_DIFF_TURF|INTERRUPT_RESIST)
#define INTERRUPT_NO_NEEDHAND (INTERRUPT_ALL & (~INTERRUPT_NEEDHAND))
+#define INTERRUPT_NO_FLOORED (INTERRUPT_ALL & (~INTERRUPT_KNOCKED_DOWN))
#define INTERRUPT_INCAPACITATED (INTERRUPT_UNCONSCIOUS|INTERRUPT_KNOCKED_DOWN|INTERRUPT_STUNNED|INTERRUPT_RESIST)
#define INTERRUPT_CLICK (INTERRUPT_LCLICK|INTERRUPT_RCLICK|INTERRUPT_SHIFTCLICK|INTERRUPT_ALTCLICK|INTERRUPT_CTRLCLICK|INTERRUPT_MIDDLECLICK|INTERRUPT_RESIST)
diff --git a/code/__DEFINES/mobs.dm b/code/__DEFINES/mobs.dm
index d8f820ab382b..53ad9904abd0 100644
--- a/code/__DEFINES/mobs.dm
+++ b/code/__DEFINES/mobs.dm
@@ -166,8 +166,9 @@
#define ORGAN_ROBOT 2
#define ORGAN_HEALTHY 0
-#define ORGAN_BRUISED 1
-#define ORGAN_BROKEN 2
+#define ORGAN_LITTLE_BRUISED 1 //used by stethoscopes and penlights
+#define ORGAN_BRUISED 2
+#define ORGAN_BROKEN 3
//=================================================
diff --git a/code/__DEFINES/mode.dm b/code/__DEFINES/mode.dm
index 4c3a658ff421..368553468af0 100644
--- a/code/__DEFINES/mode.dm
+++ b/code/__DEFINES/mode.dm
@@ -280,7 +280,8 @@ DEFINE_BITFIELD(whitelist_status, list(
#define FACTION_LIST_MARINE list(FACTION_MARINE)
#define FACTION_LIST_HUMANOID list(FACTION_MARINE, FACTION_PMC, FACTION_WY, FACTION_WY_DEATHSQUAD, FACTION_CLF, FACTION_CONTRACTOR, FACTION_MARSHAL, FACTION_UPP, FACTION_FREELANCER, FACTION_SURVIVOR, FACTION_NEUTRAL, FACTION_COLONIST, FACTION_MERCENARY, FACTION_DUTCH, FACTION_HEFA, FACTION_GLADIATOR, FACTION_PIRATE, FACTION_PIZZA, FACTION_SOUTO, FACTION_YAUTJA, FACTION_ZOMBIE, FACTION_TWE)
-#define FACTION_LIST_ERT list(FACTION_HEFA, FACTION_GLADIATOR, FACTION_PIRATE, FACTION_PIZZA, FACTION_SOUTO)
+#define FACTION_LIST_ERT_OTHER list(FACTION_HEFA, FACTION_GLADIATOR, FACTION_PIRATE, FACTION_PIZZA, FACTION_SOUTO)
+#define FACTION_LIST_ERT_ALL list(FACTION_PMC, FACTION_WY_DEATHSQUAD, FACTION_WY, FACTION_CLF, FACTION_CONTRACTOR, FACTION_UPP, FACTION_FREELANCER, FACTION_MERCENARY, FACTION_DUTCH, FACTION_HEFA, FACTION_GLADIATOR, FACTION_PIRATE, FACTION_PIZZA, FACTION_SOUTO, FACTION_MARSHAL, FACTION_TWE)
#define FACTION_LIST_WY list(FACTION_PMC, FACTION_WY_DEATHSQUAD, FACTION_WY)
#define FACTION_LIST_UPP list(FACTION_UPP)
#define FACTION_LIST_CLF list(FACTION_CLF)
diff --git a/code/__DEFINES/paygrade_defs/provost.dm b/code/__DEFINES/paygrade_defs/provost.dm
index 5b2121642d52..c85fabc27bfe 100644
--- a/code/__DEFINES/paygrade_defs/provost.dm
+++ b/code/__DEFINES/paygrade_defs/provost.dm
@@ -1,9 +1,18 @@
// Paygrade shorthand defines, to allow clearer designation.
// PROVOST OFFICE
+/// PvI, Provost Advisor
+#define PAY_SHORT_PVA"PvA"
+
/// PvI, Provost Inspector
#define PAY_SHORT_PVI "PvI"
+/// PvCI, Provost Chief Inspector
+#define PAY_SHORT_PVCI "PvCI"
+
+/// PvDM, Provost Deputy Marshal
+#define PAY_SHORT_PVDM "PvDM"
+
/// PvM, Provost Marshal
#define PAY_SHORT_PVM "PvM"
diff --git a/code/__DEFINES/paygrade_defs/upp.dm b/code/__DEFINES/paygrade_defs/upp.dm
index 40c0d8441b2e..d753d531b67d 100644
--- a/code/__DEFINES/paygrade_defs/upp.dm
+++ b/code/__DEFINES/paygrade_defs/upp.dm
@@ -43,6 +43,9 @@
/// UO4, Mayjor
#define PAY_SHORT_UO4 "UO4"
+/// UO4P, Political Commissar
+#define PAY_SHORT_UO4P "UO4P"
+
/// UO5, Leytenant Kolonel
#define PAY_SHORT_UO5 "UO5"
diff --git a/code/__DEFINES/radio.dm b/code/__DEFINES/radio.dm
index cc1831501bad..367c35be5605 100644
--- a/code/__DEFINES/radio.dm
+++ b/code/__DEFINES/radio.dm
@@ -33,6 +33,7 @@
#define RADIO_CHANNEL_MEDSCI "MedSci"
#define RADIO_CHANNEL_MP "MP"
#define RADIO_CHANNEL_NORMANDY "Normandy"
+#define RADIO_CHANNEL_SAIPAN "Saipan"
#define RADIO_CHANNEL_REQ "Req"
#define RADIO_CHANNEL_SENTRY "Sentry Network"
#define RADIO_CHANNEL_SPECIAL "special"
diff --git a/code/__DEFINES/shuttles.dm b/code/__DEFINES/shuttles.dm
index af3e164deb71..1c79fe03945f 100644
--- a/code/__DEFINES/shuttles.dm
+++ b/code/__DEFINES/shuttles.dm
@@ -113,6 +113,7 @@
#define DROPSHIP_ALAMO "dropship_alamo"
#define DROPSHIP_NORMANDY "dropship_normandy"
+#define DROPSHIP_SAIPAN "dropship_saipan"
#define ALMAYER_DROPSHIP_LZ1 "almayer-hangar-lz1"
#define ALMAYER_DROPSHIP_LZ2 "almayer-hangar-lz2"
diff --git a/code/__DEFINES/skills.dm b/code/__DEFINES/skills.dm
index d33e26c1c3f6..e4965907f707 100644
--- a/code/__DEFINES/skills.dm
+++ b/code/__DEFINES/skills.dm
@@ -70,10 +70,11 @@
// engineer skill
#define SKILL_ENGINEER_DEFAULT 0
-#define SKILL_ENGINEER_TRAINED 1 //barricade repair && c4 use (mini-engis, specs)
-#define SKILL_ENGINEER_ENGI 2 //plasteel barricade deconstruction, hacking&&planet engine fixing&&apc building, Telecomms fixing (Combat Engi, OT, etc.)
-#define SKILL_ENGINEER_MASTER 3 //Synths
-#define SKILL_ENGINEER_MAX 3
+#define SKILL_ENGINEER_NOVICE 1 //barricade repair && c4 use (mini-engis, specs)
+#define SKILL_ENGINEER_TRAINED 2 //plasteel barricade deconstruction, hacking&&planet engine fixing&&apc building, Telecomms fixing (OT, etc.)
+#define SKILL_ENGINEER_ENGI 3 // Slightly faster at everything (Combat Technicians)
+#define SKILL_ENGINEER_MASTER 4 //Synths
+#define SKILL_ENGINEER_MAX 4
//medical skill
#define SKILL_MEDICAL_DEFAULT 0
diff --git a/code/__DEFINES/sounds.dm b/code/__DEFINES/sounds.dm
index 807305174b34..35f388f351ea 100644
--- a/code/__DEFINES/sounds.dm
+++ b/code/__DEFINES/sounds.dm
@@ -31,6 +31,28 @@
#define SOUND_CHANNEL_LOBBY 1023
#define SOUND_CHANNEL_Z 1024
+
+//default byond sound echo list index positions.
+//ECHO_DIRECT and ECHO_ROOM are the only two that actually appear to do anything, and represent the dry and wet channels of the environment effects, respectively.
+#define ECHO_DIRECT 1
+#define ECHO_DIRECTHF 2
+#define ECHO_ROOM 3
+#define ECHO_ROOMHF 4
+#define ECHO_OBSTRUCTION 5
+#define ECHO_OBSTRUCTIONLFRATIO 6
+#define ECHO_OCCLUSION 7
+#define ECHO_OCCLUSIONLFRATIO 8
+#define ECHO_OCCLUSIONROOMRATIO 9
+#define ECHO_OCCLUSIONDIRECTRATIO 10
+#define ECHO_EXCLUSION 11
+#define ECHO_EXCLUSIONLFRATIO 12
+#define ECHO_OUTSIDEVOLUMEHF 13
+#define ECHO_DOPPLERFACTOR 14
+#define ECHO_ROLLOFFFACTOR 15
+#define ECHO_ROOMROLLOFFFACTOR 16
+#define ECHO_AIRABSORPTIONFACTOR 17
+#define ECHO_FLAGS 18
+
//default byond sound environments
#define SOUND_ENVIRONMENT_NONE -1
#define SOUND_ENVIRONMENT_GENERIC 0
diff --git a/code/__DEFINES/tgs.dm b/code/__DEFINES/tgs.dm
index e2c89df90e9b..4766b3dfe661 100644
--- a/code/__DEFINES/tgs.dm
+++ b/code/__DEFINES/tgs.dm
@@ -1,18 +1,19 @@
// tgstation-server DMAPI
+// The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in IETF RFC 2119.
-#define TGS_DMAPI_VERSION "7.1.2"
+#define TGS_DMAPI_VERSION "7.2.1"
// All functions and datums outside this document are subject to change with any version and should not be relied on.
// CONFIGURATION
-/// Create this define if you want to do TGS configuration outside of this file.
+/// Consumers SHOULD create this define if you want to do TGS configuration outside of this file.
#ifndef TGS_EXTERNAL_CONFIGURATION
-// Comment this out once you've filled in the below.
+// Consumers MUST comment this out once you've filled in the below and are not using [TGS_EXTERNAL_CONFIGURATION].
#error TGS API unconfigured
-// Uncomment this if you wish to allow the game to interact with TGS 3..
+// Consumers MUST uncomment this if you wish to allow the game to interact with TGS version 3.
// This will raise the minimum required security level of your game to TGS_SECURITY_TRUSTED due to it utilizing call()().
//#define TGS_V3_API
@@ -52,7 +53,7 @@
#ifndef TGS_FILE2TEXT_NATIVE
#ifdef file2text
-#error Your codebase is re-defining the BYOND proc file2text. The DMAPI requires the native version to read the result of world.Export(). You can fix this by adding "#define TGS_FILE2TEXT_NATIVE file2text" before your override of file2text to allow the DMAPI to use the native version. This will only be used for world.Export(), not regular file accesses
+#error Your codebase is re-defining the BYOND proc file2text. The DMAPI requires the native version to read the result of world.Export(). You SHOULD fix this by adding "#define TGS_FILE2TEXT_NATIVE file2text" before your override of file2text to allow the DMAPI to use the native version. This will only be used for world.Export(), not regular file accesses
#endif
#define TGS_FILE2TEXT_NATIVE file2text
#endif
@@ -152,16 +153,17 @@
//REQUIRED HOOKS
/**
- * Call this somewhere in [/world/proc/New] that is always run. This function may sleep!
+ * Consumers MUST call this somewhere in [/world/proc/New] that is always run. This function may sleep!
*
* * event_handler - Optional user defined [/datum/tgs_event_handler].
* * minimum_required_security_level: The minimum required security level to run the game in which the DMAPI is integrated. Can be one of [TGS_SECURITY_ULTRASAFE], [TGS_SECURITY_SAFE], or [TGS_SECURITY_TRUSTED].
+ * * http_handler - Optional user defined [/datum/tgs_http_handler].
*/
-/world/proc/TgsNew(datum/tgs_event_handler/event_handler, minimum_required_security_level = TGS_SECURITY_ULTRASAFE)
+/world/proc/TgsNew(datum/tgs_event_handler/event_handler, minimum_required_security_level = TGS_SECURITY_ULTRASAFE, datum/tgs_http_handler/http_handler)
return
/**
- * Call this when your initializations are complete and your game is ready to play before any player interactions happen.
+ * Consumers MUST call this when world initializations are complete and the game is ready to play before any player interactions happen.
*
* This may use [/world/var/sleep_offline] to make this happen so ensure no changes are made to it while this call is running.
* Afterwards, consider explicitly setting it to what you want to avoid this BYOND bug: http://www.byond.com/forum/post/2575184
@@ -170,12 +172,10 @@
/world/proc/TgsInitializationComplete()
return
-/// Put this at the start of [/world/proc/Topic].
+/// Consumers MUST run this macro at the start of [/world/proc/Topic].
#define TGS_TOPIC var/tgs_topic_return = TgsTopic(args[1]); if(tgs_topic_return) return tgs_topic_return
-/**
- * Call this as late as possible in [world/proc/Reboot] (BEFORE ..()).
- */
+/// Consumers MUST call this as late as possible in [world/proc/Reboot] (BEFORE ..()).
/world/proc/TgsReboot()
return
@@ -269,7 +269,7 @@
/// The [/datum/tgs_chat_channel] the user was from.
var/datum/tgs_chat_channel/channel
-/// User definable handler for TGS events.
+/// User definable handler for TGS events This abstract version SHOULD be overridden to be used.
/datum/tgs_event_handler
/// If the handler receieves [TGS_EVENT_HEALTH_CHECK] events.
var/receive_health_checks = FALSE
@@ -283,7 +283,41 @@
set waitfor = FALSE
return
-/// User definable chat command.
+/// User definable handler for HTTP calls. This abstract version MUST be overridden to be used.
+/datum/tgs_http_handler
+
+/**
+ * User definable callback for executing HTTP GET requests.
+ * MUST perform BYOND sleeps while the request is in flight.
+ * MUST return a [/datum/tgs_http_result].
+ * SHOULD log its own errors
+ *
+ * url - The full URL to execute the GET request for including query parameters.
+ */
+/datum/tgs_http_handler/proc/PerformGet(url)
+ CRASH("[type]/PerformGet not implemented!")
+
+/// Result of a [/datum/tgs_http_handler] call. MUST NOT be overridden.
+/datum/tgs_http_result
+ /// HTTP response as text
+ var/response_text
+ /// Boolean request success flag. Set for any 2XX response code.
+ var/success
+
+/**
+ * Create a [/datum/tgs_http_result].
+ *
+ * * response_text - HTTP response as text. Must be provided in New().
+ * * success - Boolean request success flag. Set for any 2XX response code. Must be provided in New().
+ */
+/datum/tgs_http_result/New(response_text, success)
+ if(response_text && !istext(response_text))
+ CRASH("response_text was not text!")
+
+ src.response_text = response_text
+ src.success = success
+
+/// User definable chat command. This abstract version MUST be overridden to be used.
/datum/tgs_chat_command
/// The string to trigger this command on a chat bot. e.g `@bot name ...` or `!tgs name ...`.
var/name = ""
@@ -296,21 +330,27 @@
/**
* Process command activation. Should return a [/datum/tgs_message_content] to respond to the issuer with.
+ * MUST be implemented
*
- * sender - The [/datum/tgs_chat_user] who issued the command.
- * params - The trimmed string following the command `/datum/tgs_chat_command/var/name].
+ * * sender - The [/datum/tgs_chat_user] who issued the command.
+ * * params - The trimmed string following the command `/datum/tgs_chat_command/var/name].
*/
/datum/tgs_chat_command/proc/Run(datum/tgs_chat_user/sender, params)
CRASH("[type] has no implementation for Run()")
-/// User definable chat message.
+/// User definable chat message. MUST NOT be overridden.
/datum/tgs_message_content
- /// The tring content of the message. Must be provided in New().
+ /// The string content of the message. Must be provided in New().
var/text
/// The [/datum/tgs_chat_embed] to embed in the message. Not supported on all chat providers.
var/datum/tgs_chat_embed/structure/embed
+/**
+ * Create a [/datum/tgs_message_content].
+ *
+ * * text - The string content of the message.
+ */
/datum/tgs_message_content/New(text)
..()
if(!istext(text))
@@ -319,7 +359,7 @@
src.text = text
-/// User definable chat embed. Currently mirrors Discord chat embeds. See https://discord.com/developers/docs/resources/channel#embed-object-embed-structure for details.
+/// User definable chat embed. Currently mirrors Discord chat embeds. See https://discord.com/developers/docs/resources/message#embed-object for details.
/datum/tgs_chat_embed/structure
var/title
var/description
@@ -331,13 +371,13 @@
/// Colour must be #AARRGGBB or #RRGGBB hex string.
var/colour
- /// See https://discord.com/developers/docs/resources/channel#embed-object-embed-image-structure for details.
+ /// See https://discord.com/developers/docs/resources/message#embed-object-embed-image-structure for details.
var/datum/tgs_chat_embed/media/image
- /// See https://discord.com/developers/docs/resources/channel#embed-object-embed-thumbnail-structure for details.
+ /// See https://discord.com/developers/docs/resources/message#embed-object-embed-thumbnail-structure for details.
var/datum/tgs_chat_embed/media/thumbnail
- /// See https://discord.com/developers/docs/resources/channel#embed-object-embed-image-structure for details.
+ /// See https://discord.com/developers/docs/resources/message#embed-object-embed-video-structure for details.
var/datum/tgs_chat_embed/media/video
var/datum/tgs_chat_embed/footer/footer
@@ -346,7 +386,7 @@
var/list/datum/tgs_chat_embed/field/fields
-/// Common datum for similar discord embed medias.
+/// Common datum for similar Discord embed medias.
/datum/tgs_chat_embed/media
/// Must be set in New().
var/url
@@ -354,6 +394,7 @@
var/height
var/proxy_url
+/// Create a [/datum/tgs_chat_embed].
/datum/tgs_chat_embed/media/New(url)
..()
if(!istext(url))
@@ -361,13 +402,14 @@
src.url = url
-/// See https://discord.com/developers/docs/resources/channel#embed-object-embed-footer-structure for details.
+/// See https://discord.com/developers/docs/resources/message#embed-object-embed-footer-structure for details.
/datum/tgs_chat_embed/footer
/// Must be set in New().
var/text
var/icon_url
var/proxy_icon_url
+/// Create a [/datum/tgs_chat_embed/footer].
/datum/tgs_chat_embed/footer/New(text)
..()
if(!istext(text))
@@ -375,16 +417,17 @@
src.text = text
-/// See https://discord.com/developers/docs/resources/channel#embed-object-embed-provider-structure for details.
+/// See https://discord.com/developers/docs/resources/message#embed-object-embed-provider-structure for details.
/datum/tgs_chat_embed/provider
var/name
var/url
-/// See https://discord.com/developers/docs/resources/channel#embed-object-embed-author-structure for details. Must have name set in New().
+/// See https://discord.com/developers/docs/resources/message#embed-object-embed-author-structure for details. Must have name set in New().
/datum/tgs_chat_embed/provider/author
var/icon_url
var/proxy_icon_url
+/// Create a [/datum/tgs_chat_embed/footer].
/datum/tgs_chat_embed/provider/author/New(name)
..()
if(!istext(name))
@@ -392,12 +435,15 @@
src.name = name
-/// See https://discord.com/developers/docs/resources/channel#embed-object-embed-field-structure for details. Must have name and value set in New().
+/// See https://discord.com/developers/docs/resources/message#embed-object-embed-field-structure for details.
/datum/tgs_chat_embed/field
+ /// Must be set in New().
var/name
+ /// Must be set in New().
var/value
var/is_inline
+/// Create a [/datum/tgs_chat_embed/field].
/datum/tgs_chat_embed/field/New(name, value)
..()
if(!istext(name))
diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm
index e6b9c4c4b9ee..4d5fac9ba17b 100644
--- a/code/__DEFINES/traits.dm
+++ b/code/__DEFINES/traits.dm
@@ -232,9 +232,15 @@
/// If the mob is able to use the vulture rifle or spotting scope
#define TRAIT_VULTURE_USER "t_vulture_user"
/// If the mob is currently loading a tutorial
-#define TRAIT_IN_TUTORIAL "t_IN_TUTORIAL"
+#define TRAIT_IN_TUTORIAL "t_in_tutorial"
/// If the mob is cloaked in any form
#define TRAIT_CLOAKED "t_cloaked"
+/// If the mob claimed a specialist set from a vendor
+#define TRAIT_SPEC_VENDOR "t_spec_vendor"
+/// If the mob claimed a specialist set from a kit
+#define TRAIT_SPEC_KIT "t_spec_kit"
+/// What spec set the mob has claimed, if any
+#define TRAIT_SPEC(spec_type) "t_spec_[spec_type]"
/// If the mob won't drop items held in face slot when downed
#define TRAIT_IRON_TEETH "t_iron_teeth"
@@ -315,6 +321,8 @@ GLOBAL_LIST_INIT(mob_traits, list(
TRAIT_ABILITY_BURROWED,
TRAIT_VULTURE_USER,
TRAIT_IN_TUTORIAL,
+ TRAIT_SPEC_KIT,
+ TRAIT_SPEC_VENDOR,
))
/*
@@ -354,9 +362,9 @@ GLOBAL_LIST_INIT(traits_by_type, list(
"TRAIT_CANNOT_EAT" = TRAIT_CANNOT_EAT,
"TRAIT_VULTURE_USER" = TRAIT_VULTURE_USER,
"TRAIT_CLOAKED" = TRAIT_CLOAKED,
+ "TRAIT_SPEC_KIT" = TRAIT_SPEC_KIT,
+ "TRAIT_SPEC_VENDOR" = TRAIT_SPEC_VENDOR,
),
-// /mob/living/carbon/human = list(
-// ),
/mob/living/carbon/xenomorph = list(
"TRAIT_ABILITY_NO_PLASMA_TRANSFER" = TRAIT_ABILITY_NO_PLASMA_TRANSFER,
"TRAIT_ABILITY_OVIPOSITOR" = TRAIT_ABILITY_OVIPOSITOR,
diff --git a/code/__DEFINES/turfs.dm b/code/__DEFINES/turfs.dm
index 158c66754e18..1b549440deee 100644
--- a/code/__DEFINES/turfs.dm
+++ b/code/__DEFINES/turfs.dm
@@ -1,15 +1,16 @@
-#define RANGE_TURFS(RADIUS, CENTER) \
- block( \
- (CENTER).x-(RADIUS), (CENTER).y-(RADIUS), (CENTER).z, \
- (CENTER).x+(RADIUS), (CENTER).y+(RADIUS), (CENTER).z \
- )
-
+/// Returns a list of turfs within H_RADIUS tiles horizontally and V_RADIUS tiles vertically of CENTER.
#define RECT_TURFS(H_RADIUS, V_RADIUS, CENTER) \
block( \
(CENTER).x-(H_RADIUS), (CENTER).y-(V_RADIUS), (CENTER).z, \
(CENTER).x+(H_RADIUS), (CENTER).y+(V_RADIUS), (CENTER).z \
)
+/// Returns a list of turfs within Dist tiles of Center. When Dist >= 5 faster than a `range()` filtered to `/turf`s.
+#define RANGE_TURFS(Dist, Center) RECT_TURFS(Dist, Dist, Center)
+
+/// Returns a list of turfs within Dist tiles of Center, excluding Center. When Dist >= 5 faster than an `orange()` filtered to `/turf`s.
+#define ORANGE_TURFS(Dist, Center) (RANGE_TURFS(Dist, Center) - Center)
+
///Returns all turfs in a zlevel
#define Z_TURFS(ZLEVEL) block(1, 1, (ZLEVEL), world.maxx, world.maxy, (ZLEVEL))
diff --git a/code/__HELPERS/cmp.dm b/code/__HELPERS/cmp.dm
index 31308ac5812f..e27add2c9601 100644
--- a/code/__HELPERS/cmp.dm
+++ b/code/__HELPERS/cmp.dm
@@ -57,6 +57,9 @@ GLOBAL_LIST_INIT(cmp_field, "name")
/proc/cmp_typepaths_asc(A, B)
return sorttext("[B]","[A]")
+/proc/cmp_typepaths_name_asc(atom/A, atom/B)
+ return sorttext(initial(A.name), initial(B.name))
+
/// Compares mobs based on their timeofdeath value in ascending order
/proc/cmp_mob_deathtime_asc(mob/A, mob/B)
return A.timeofdeath - B.timeofdeath
diff --git a/code/__HELPERS/game.dm b/code/__HELPERS/game.dm
index 094f8205c80e..ba27d4192ded 100644
--- a/code/__HELPERS/game.dm
+++ b/code/__HELPERS/game.dm
@@ -45,7 +45,7 @@
var/list/turfs = new/list()
var/rsq = radius * (radius+0.5)
- for(var/turf/T in range(radius, centerturf))
+ for(var/turf/T as anything in RANGE_TURFS(radius, centerturf))
var/dx = T.x - centerturf.x
var/dy = T.y - centerturf.y
if(dx*dx + dy*dy <= rsq)
diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm
index d8eebf79bca6..5a307ac02ed5 100644
--- a/code/__HELPERS/unsorted.dm
+++ b/code/__HELPERS/unsorted.dm
@@ -1100,11 +1100,17 @@ GLOBAL_DATUM(action_purple_power_up, /image)
else
air_master.tiles_to_update += T2*/
-/proc/get_cardinal_dir(atom/A, atom/B)
- var/dx = abs(B.x - A.x)
- var/dy = abs(B.y - A.y)
- return get_dir(A, B) & (rand() * (dx+dy) < dy ? 3 : 12)
-
+/// Returns the nearest cardinal dir between two atoms. Favors NORTH/SOUTH on perfect diagonals. Consistent and reversible.
+/proc/get_cardinal_dir(atom/start, atom/end) as num
+ var/dx = end.x - start.x
+ var/dy = end.y - start.y
+ if(!(dx || dy))
+ return 0 //returns 0 when on same x/y, consistent with get_dir()
+
+ if(abs(dx) > abs(dy))
+ return dx < 0 ? WEST : EAST
+ else
+ return dy < 0 ? SOUTH : NORTH
//Returns the 2 dirs perpendicular to the arg
/proc/get_perpen_dir(dir)
@@ -1283,10 +1289,7 @@ GLOBAL_LIST_INIT(WALLITEMS, list(
origin = get_turf(origin)
if(!origin)
return
- var/list/turfs = list()
- for(var/turf/T in orange(origin, outer_range))
- if(!inner_range || get_dist(origin, T) >= inner_range)
- turfs += T
+ var/list/turfs = (RANGE_TURFS(outer_range, origin) - RANGE_TURFS(inner_range - 1, origin))
if(length(turfs))
return pick(turfs)
@@ -1337,29 +1340,35 @@ GLOBAL_LIST_INIT(WALLITEMS, list(
GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new)
/// Version of view() which ignores darkness, because BYOND doesn't have it (I actually suggested it but it was tagged redundant, BUT HEARERS IS A T- /rant).
-/proc/dview(range = world.view, center, invis_flags = 0)
+/proc/dview(range = world.view, atom/center, invis_flags = 0)
if(!center)
return
- GLOB.dview_mob.loc = center
-
+ GLOB.dview_mob.loc = isturf(center) ? center : center.loc
GLOB.dview_mob.see_invisible = invis_flags
- . = view(range, GLOB.dview_mob)
+ . = oview(range, GLOB.dview_mob)
GLOB.dview_mob.loc = null
+/// Version of oview() which ignores darkness
+/proc/doview(range, atom/center, invis_flags)
+ if(!center)
+ return
+
+ return dview(range, center, invis_flags) - center
+
/mob/dview
name = "INTERNAL DVIEW MOB"
- invisibility = 101
+ invisibility = INVISIBILITY_ABSTRACT
density = FALSE
- see_in_dark = 1e6
+ see_in_dark = INFINITY
var/ready_to_die = FALSE
/mob/dview/Initialize() //Properly prevents this mob from gaining huds or joining any global lists
SHOULD_CALL_PARENT(FALSE)
- if(flags_atom & INITIALIZED)
+ if(CHECK_BITFIELD(flags_atom, INITIALIZED))
stack_trace("Warning: [src]([type]) initialized multiple times!")
- flags_atom |= INITIALIZED
+ ENABLE_BITFIELD(flags_atom, INITIALIZED)
return INITIALIZE_HINT_NORMAL
/mob/dview/Destroy(force = FALSE)
@@ -1375,12 +1384,19 @@ GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new)
#define FOR_DVIEW(type, range, center, invis_flags) \
- GLOB.dview_mob.loc = center; \
+ GLOB.dview_mob.loc = isturf(center) ? (center) : (center).loc; \
GLOB.dview_mob.see_invisible = invis_flags; \
- for(type in view(range, GLOB.dview_mob))
+ for(type in oview(range, GLOB.dview_mob))
#define FOR_DVIEW_END GLOB.dview_mob.loc = null
+#define FOR_DOVIEW(type, range, center, invis_flags) \
+ GLOB.dview_mob.loc = isturf(center) ? (center) : (center).loc; \
+ GLOB.dview_mob.see_invisible = invis_flags; \
+ for(type in oview(range, GLOB.dview_mob) - (center))
+
+#define FOR_DOVIEW_END FOR_DVIEW_END
+
/proc/get_turf_pixel(atom/AM)
if(!istype(AM))
return
diff --git a/code/_globalvars/bitfields.dm b/code/_globalvars/bitfields.dm
index d3fc9994414a..6db0d5c550bd 100644
--- a/code/_globalvars/bitfields.dm
+++ b/code/_globalvars/bitfields.dm
@@ -108,6 +108,7 @@ DEFINE_BITFIELD(flags_gun_features, list(
"GUN_TRIGGER_SAFETY" = GUN_TRIGGER_SAFETY,
"GUN_UNUSUAL_DESIGN" = GUN_UNUSUAL_DESIGN,
"GUN_SILENCED" = GUN_SILENCED,
+ "GUN_CANT_EXECUTE" = GUN_CANT_EXECUTE,
"GUN_INTERNAL_MAG" = GUN_INTERNAL_MAG,
"GUN_AUTO_EJECTOR" = GUN_AUTO_EJECTOR,
"GUN_AMMO_COUNTER" = GUN_AMMO_COUNTER,
@@ -176,6 +177,8 @@ DEFINE_BITFIELD(flags_item, list(
"CAN_DIG_SHRAPNEL" = CAN_DIG_SHRAPNEL,
"ANIMATED_SURGICAL_TOOL" = ANIMATED_SURGICAL_TOOL,
"IGNITING_ITEM" = IGNITING_ITEM,
+ "FORCEDROP_CONDITIONAL" = FORCEDROP_CONDITIONAL,
+ "SMARTGUNNER_BACKPACK_OVERRIDE" = SMARTGUNNER_BACKPACK_OVERRIDE,
))
DEFINE_BITFIELD(flags_inv_hide, list(
diff --git a/code/_globalvars/global_lists.dm b/code/_globalvars/global_lists.dm
index c6957eefd22c..dadf5d597255 100644
--- a/code/_globalvars/global_lists.dm
+++ b/code/_globalvars/global_lists.dm
@@ -152,6 +152,9 @@ GLOBAL_LIST_INIT_TYPED(chemical_gen_classes_list, /list, list("C" = list(),"C1"
//properties generated in chemicals, helps to make sure the same property doesn't show up 10 times
GLOBAL_LIST_INIT_TYPED(generated_properties, /list, list("positive" = list(), "negative" = list(), "neutral" = list()))
+GLOBAL_LIST_INIT_TYPED(space_weapons, /datum/space_weapon, setup_ship_weapon())
+GLOBAL_LIST_INIT_TYPED(space_weapons_ammo, /datum/space_weapon_ammo, setup_ship_ammo())
+
GLOBAL_LIST_INIT_TYPED(ammo_list, /datum/ammo, setup_ammo()) //List of all ammo types. Used by guns to tell the projectile how to act.
GLOBAL_REFERENCE_LIST_INDEXED(joblist, /datum/job, title) //List of all jobstypes, minus borg and AI
@@ -348,6 +351,20 @@ GLOBAL_LIST_INIT(hj_emotes, setup_hazard_joe_emotes())
all_species[S.name] = S
return all_species
+/proc/setup_ship_weapon()
+ var/list/ammo_list = list()
+ for(var/weapon_type in subtypesof(/datum/space_weapon))
+ var/datum/space_weapon/new_weapon = new weapon_type
+ ammo_list[new_weapon.type] = new_weapon
+ return ammo_list
+
+/proc/setup_ship_ammo()
+ var/list/ammo_list = list()
+ for(var/ammo_type in subtypesof(/datum/space_weapon_ammo))
+ var/datum/space_weapon_ammo/new_ammo = new ammo_type
+ ammo_list[new_ammo.type] = new_ammo
+ return ammo_list
+
/proc/setup_ammo()
var/list/blacklist = list(/datum/ammo/energy, /datum/ammo/energy/yautja, /datum/ammo/energy/yautja/rifle, /datum/ammo/bullet/shotgun, /datum/ammo/xeno)
var/list/ammo_list = list()
@@ -527,26 +544,8 @@ GLOBAL_REFERENCE_LIST_INDEXED(all_skills, /datum/skill, skill_name)
// Timelock
GLOBAL_LIST_EMPTY(timelocks)
-
-//the global list of specialist kits that haven't been claimed yet.
-GLOBAL_LIST_INIT(available_specialist_sets, list(
- "Scout Set",
- "Sniper Set",
- "Anti-materiel Sniper Set",
- "Demolitionist Set",
- "Heavy Grenadier Set",
- "Pyro Set"
- ))
-
-//Similar thing, but used in /obj/item/spec_kit
-GLOBAL_LIST_INIT(available_specialist_kit_boxes, list(
- "Pyro" = 2,
- "Grenadier" = 2,
- "Sniper" = 2,
- "Scout" = 2,
- "Demo" = 2,
- "Anti-materiel Sniper" = 2,
- ))
+GLOBAL_LIST_EMPTY_TYPED(specialist_set_name_dict, /datum/specialist_set)
+GLOBAL_LIST_INIT_TYPED(specialist_set_datums, /datum/specialist_set, setup_specialist_sets())
/proc/init_global_referenced_datums()
init_keybindings()
diff --git a/code/_onclick/human.dm b/code/_onclick/human.dm
index b09c26ffb92f..4a353d5ed5c5 100644
--- a/code/_onclick/human.dm
+++ b/code/_onclick/human.dm
@@ -38,7 +38,7 @@
if (A != src) return ..()
var/mob/living/carbon/human/H = A
- if (last_chew + 75 > world.time)
+ if (last_chew + 1 > world.time)
to_chat(H, SPAN_DANGER("You can't bite your hand again yet..."))
return
diff --git a/code/controllers/configuration/configuration.dm b/code/controllers/configuration/configuration.dm
index 7207f878614a..b74275d2cee2 100644
--- a/code/controllers/configuration/configuration.dm
+++ b/code/controllers/configuration/configuration.dm
@@ -19,7 +19,7 @@
var/motd
var/policy
- var/static/regex/ic_filter_regex
+ var/static/regex/word_filter_regex
var/is_loaded = FALSE
@@ -315,21 +315,21 @@
/datum/controller/configuration/proc/LoadChatFilter()
- var/list/in_character_filter = list()
+ var/list/word_filter = list()
- if(!fexists("[directory]/in_character_filter.txt"))
+ if(!fexists("[directory]/word_filter.txt"))
return
- log_config("Loading config file in_character_filter.txt...")
+ log_config("Loading config file word_filter.txt...")
- for(var/line in file2list("[directory]/in_character_filter.txt"))
+ for(var/line in file2list("[directory]/word_filter.txt"))
if(!line)
continue
if(findtextEx(line,"#",1,2))
continue
- in_character_filter += REGEX_QUOTE(line)
+ word_filter += REGEX_QUOTE(line)
- ic_filter_regex = length(in_character_filter) ? regex("\\b([jointext(in_character_filter, "|")])\\b", "i") : null
+ word_filter_regex = length(word_filter) ? regex("\\b([jointext(word_filter, "|")])\\b", "i") : null
//Message admins when you can.
/datum/controller/configuration/proc/DelayedMessageAdmins(text)
diff --git a/code/controllers/subsystem/communications.dm b/code/controllers/subsystem/communications.dm
index 7397d98a0d52..c4661ff5a673 100644
--- a/code/controllers/subsystem/communications.dm
+++ b/code/controllers/subsystem/communications.dm
@@ -129,6 +129,7 @@ Radiochat range: 1441 to 1489 (most devices refuse to be tune to other frequency
#define DS1_FREQ 1488
#define DS2_FREQ 1489
+#define DS3_FREQ 1490
//Marine Squad channels
#define ALPHA_FREQ 1491
@@ -173,9 +174,11 @@ GLOBAL_LIST_INIT(radiochannels, list(
SQUAD_SOF = SOF_FREQ,
SQUAD_CBRN = CBRN_FREQ,
SQUAD_FORECON = FORECON_FREQ,
+ SQUAD_SOLAR = SOF_FREQ,
RADIO_CHANNEL_ALAMO = DS1_FREQ,
RADIO_CHANNEL_NORMANDY = DS2_FREQ,
+ RADIO_CHANNEL_SAIPAN = DS3_FREQ,
RADIO_CHANNEL_COLONY = COLONY_FREQ,
@@ -272,7 +275,6 @@ SUBSYSTEM_DEF(radio)
"[VAI_FREQ]" = "vairadio",
"[RMC_FREQ]" = "rmcradio",
"[CMB_FREQ]" = "cmbradio",
- "[CLF_FREQ]" = "clfradio",
"[ALPHA_FREQ]" = "alpharadio",
"[BRAVO_FREQ]" = "bravoradio",
"[CHARLIE_FREQ]" = "charlieradio",
@@ -287,6 +289,17 @@ SUBSYSTEM_DEF(radio)
"[COLONY_FREQ]" = "deptradio",
"[BUG_A_FREQ]" = "airadio",
"[BUG_B_FREQ]" = "aiprivradio",
+ "[UPP_FREQ]" = "syndradio",
+ "[UPP_CMD_FREQ]" = "opforcmd",
+ "[UPP_ENGI_FREQ]" = "opforeng",
+ "[UPP_MED_FREQ]" = "opformed",
+ "[UPP_CCT_FREQ]" = "opforcct",
+ "[UPP_KDO_FREQ]" = "opforspe",
+ "[CLF_FREQ]" = "clfradio",
+ "[CLF_CMD_FREQ]" = "opforcmd",
+ "[CLF_ENGI_FREQ]" = "opforeng",
+ "[CLF_MED_FREQ]" = "opformed",
+ "[CLF_CCT_FREQ]" = "opforcct",
)
/datum/controller/subsystem/radio/proc/add_object(obj/device as obj, new_frequency as num, filter = null as text|null)
@@ -359,10 +372,6 @@ SUBSYSTEM_DEF(radio)
return freq_span
if(frequency in PMC_FREQS)
return "pmcradio"
- if(frequency in UPP_FREQS)
- return "syndradio"
- if(frequency in CLF_FREQS)
- return "clfradio"
if(frequency in ERT_FREQS)
return "centradio"
if(frequency in DEPT_FREQS)
diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm
index 1a6f98ee4cca..c3648df6ba29 100644
--- a/code/controllers/subsystem/ticker.dm
+++ b/code/controllers/subsystem/ticker.dm
@@ -124,6 +124,7 @@ SUBSYSTEM_DEF(ticker)
/datum/controller/subsystem/ticker/proc/request_start()
if(current_state == GAME_STATE_PREGAME)
time_left = 0
+ delay_start = FALSE
// Killswitch if hanging or interrupted
if(SSnightmare.stat != NIGHTMARE_STATUS_DONE)
diff --git a/code/controllers/subsystem/who.dm b/code/controllers/subsystem/who.dm
index 43ecbb435587..6c817fb1245e 100644
--- a/code/controllers/subsystem/who.dm
+++ b/code/controllers/subsystem/who.dm
@@ -17,17 +17,29 @@ SUBSYSTEM_DEF(who)
who.update_data()
staff_who.update_data()
-//datum
+
+
+// WHO DATA
/datum/player_list
var/tgui_name = "Who"
var/tgui_interface_name = "Who"
- var/list/mobs_ckey = list()
- var/list/list_data = list()
+ var/list/base_data = list()
+ var/list/admin_sorted_additional = list()
/datum/player_list/proc/update_data()
- var/list/new_list_data = list()
- var/list/new_mobs_ckey = list()
- var/list/additional_data = list(
+ var/list/base_data = list()
+ var/list/admin_sorted_additional = list()
+
+ var/list/factions_additional = list()
+ admin_sorted_additional["factions_additional"] = list("flags" = R_MOD|R_ADMIN, "data" = factions_additional)
+
+ var/list/player_additional = list()
+ admin_sorted_additional["player_additional"] = list("flags" = R_MOD|R_ADMIN, "data" = player_additional)
+
+ var/list/player_stealthed_additional = list()
+ admin_sorted_additional["player_stealthed_additional"] = list("flags" = R_STEALTH, "data" = player_stealthed_additional)
+
+ var/list/counted_additional = list(
"lobby" = 0,
"admin_observers" = 0,
"observers" = 0,
@@ -38,35 +50,40 @@ SUBSYSTEM_DEF(who)
"uscm" = 0,
"uscm_marines" = 0,
)
- new_list_data["additional_info"] = list()
var/list/counted_factions = list()
+
+ // Running thru all clients and doing some counts
for(var/client/client as anything in sortTim(GLOB.clients, GLOBAL_PROC_REF(cmp_ckey_asc)))
- CHECK_TICK
- new_list_data["all_clients"]++
var/list/client_payload = list()
- client_payload["ckey"] = "[client.key]"
- client_payload["text"] = "[client.key]"
+ client_payload["text"] = client.key
client_payload["ckey_color"] = "white"
+ if(CLIENT_IS_STEALTHED(client))
+ player_stealthed_additional["total_players"] += list(list(client.key = list(client_payload)))
+ else if(client.admin_holder?.fakekey)
+ player_additional["total_players"] += list(list(client.key = list(client_payload)))
+ else
+ base_data["total_players"] += list(list(client.key = list(client_payload.Copy())))
+ player_additional["total_players"] += list(list(client.key = list(client_payload)))
+
var/mob/client_mob = client.mob
- new_mobs_ckey[client.key] = client_mob
if(client_mob)
if(istype(client_mob, /mob/new_player))
client_payload["text"] += " - in Lobby"
- additional_data["lobby"]++
+ counted_additional["lobby"]++
else if(isobserver(client_mob))
client_payload["text"] += " - Playing as [client_mob.real_name]"
if(CLIENT_IS_STAFF(client))
- additional_data["admin_observers"]++
+ counted_additional["admin_observers"]++
else
- additional_data["observers"]++
+ counted_additional["observers"]++
var/mob/dead/observer/observer = client_mob
if(observer.started_as_observer)
- client_payload["color"] += "#ce89cd"
+ client_payload["color"] = "#ce89cd"
client_payload["text"] += " - Spectating"
else
- client_payload["color"] += "#A000D0"
+ client_payload["color"] = "#A000D0"
client_payload["text"] += " - DEAD"
else
@@ -74,120 +91,66 @@ SUBSYSTEM_DEF(who)
switch(client_mob.stat)
if(UNCONSCIOUS)
- client_payload["color"] += "#B0B0B0"
+ client_payload["color"] = "#B0B0B0"
client_payload["text"] += " - Unconscious"
if(DEAD)
- client_payload["color"] += "#A000D0"
+ client_payload["color"] = "#A000D0"
client_payload["text"] += " - DEAD"
if(client_mob.stat != DEAD)
if(isxeno(client_mob))
- client_payload["color"] += "#ec3535"
+ client_payload["color"] = "#ec3535"
client_payload["text"] += " - Xenomorph"
else if(ishuman(client_mob))
if(client_mob.faction == FACTION_ZOMBIE)
counted_factions[FACTION_ZOMBIE]++
- client_payload["color"] += "#2DACB1"
+ client_payload["color"] = "#2DACB1"
client_payload["text"] += " - Zombie"
else if(client_mob.faction == FACTION_YAUTJA)
- client_payload["color"] += "#7ABA19"
+ client_payload["color"] = "#7ABA19"
client_payload["text"] += " - Yautja"
- additional_data["yautja"]++
+ counted_additional["yautja"]++
if(client_mob.status_flags & XENO_HOST)
- additional_data["infected_preds"]++
+ counted_additional["infected_preds"]++
else
- additional_data["humans"]++
+ counted_additional["humans"]++
if(client_mob.status_flags & XENO_HOST)
- additional_data["infected_humans"]++
+ counted_additional["infected_humans"]++
if(client_mob.faction == FACTION_MARINE)
- additional_data["uscm"]++
+ counted_additional["uscm"]++
if(client_mob.job in (GLOB.ROLES_MARINES))
- additional_data["uscm_marines"]++
+ counted_additional["uscm_marines"]++
else
counted_factions[client_mob.faction]++
- new_list_data["total_players"] += list(client_payload)
-
- new_list_data["additional_info"] += list(list(
- "content" = "In Lobby: [additional_data["lobby"]]",
- "color" = "#777",
- "text" = "Player in lobby",
- ))
-
- new_list_data["additional_info"] += list(list(
- "content" = "Spectating Players: [additional_data["observers"]]",
- "color" = "#777",
- "text" = "Spectating players",
- ))
-
- new_list_data["additional_info"] += list(list(
- "content" = "Spectating Admins: [additional_data["admin_observers"]]",
- "color" = "#777",
- "text" = "Spectating administrators",
- ))
-
- new_list_data["additional_info"] += list(list(
- "content" = "Humans: [additional_data["humans"]]",
- "color" = "#2C7EFF",
- "text" = "Players playing as Human",
- ))
-
- new_list_data["additional_info"] += list(list(
- "content" = "Infected Humans: [additional_data["infected_humans"]]",
- "color" = "#ec3535",
- "text" = "Players playing as Infected Human",
- ))
-
- new_list_data["additional_info"] += list(list(
- "content" = "[MAIN_SHIP_NAME] Personnel: [additional_data["uscm"]]",
- "color" = "#5442bd",
- "text" = "Players playing as [MAIN_SHIP_NAME] Personnel",
- ))
-
- new_list_data["additional_info"] += list(list(
- "content" = "Marines: [additional_data["uscm_marines"]]",
- "color" = "#5442bd",
- "text" = "Players playing as Marines",
- ))
-
- new_list_data["additional_info"] += list(list(
- "content" = "Yautjas: [additional_data["yautja"]]",
- "color" = "#7ABA19",
- "text" = "Players playing as Yautja",
- ))
-
- new_list_data["additional_info"] += list(list(
- "content" = "Infected Predators: [additional_data["infected_preds"]]",
- "color" = "#7ABA19",
- "text" = "Players playing as Infected Yautja",
- ))
+ //Bulky section with pre writen names and desc for counts
+ factions_additional += list(list("content" = "In Lobby: [counted_additional["lobby"]]", "color" = "#777", "text" = "Player in lobby"))
+ factions_additional += list(list("content" = "Spectating Players: [counted_additional["observers"]]", "color" = "#777", "text" = "Spectating players"))
+ factions_additional += list(list("content" = "Spectating Admins: [counted_additional["admin_observers"]]", "color" = "#777", "text" = "Spectating administrators"))
+ factions_additional += list(list("content" = "Humans: [counted_additional["humans"]]", "color" = "#2C7EFF", "text" = "Players playing as Human"))
+ factions_additional += list(list("content" = "Infected Humans: [counted_additional["infected_humans"]]", "color" = "#ec3535", "text" = "Players playing as Infected Human"))
+ factions_additional += list(list("content" = "[MAIN_SHIP_NAME] Personnel: [counted_additional["uscm"]]", "color" = "#5442bd", "text" = "Players playing as [MAIN_SHIP_NAME] Personnel"))
+ factions_additional += list(list("content" = "Marines: [counted_additional["uscm_marines"]]", "color" = "#5442bd", "text" = "Players playing as Marines"))
+ factions_additional += list(list("content" = "Yautjas: [counted_additional["yautja"]]", "color" = "#7ABA19", "text" = "Players playing as Yautja"))
+ factions_additional += list(list("content" = "Infected Predators: [counted_additional["infected_preds"]]", "color" = "#7ABA19", "text" = "Players playing as Infected Yautja"))
for(var/i in 1 to length(counted_factions))
- if(counted_factions[counted_factions[i]])
- new_list_data["factions"] += list(list(
- "content" = "[counted_factions[i]]: [counted_factions[counted_factions[i]]]",
- "color" = "#2C7EFF",
- "text" = "Other",
- ))
+ if(!counted_factions[counted_factions[i]])
+ continue
+ factions_additional += list(list("content" = "[counted_factions[i]]: [counted_factions[counted_factions[i]]]", "color" = "#2C7EFF", "text" = "Other"))
+
if(counted_factions[FACTION_NEUTRAL])
- new_list_data["factions"] += list(list(
- "content" = "[FACTION_NEUTRAL] Humans: [counted_factions[FACTION_NEUTRAL]]",
- "color" = "#688944",
- "text" = "Neutrals",
- ))
+ factions_additional += list(list("content" = "[FACTION_NEUTRAL] Humans: [counted_factions[FACTION_NEUTRAL]]", "color" = "#688944", "text" = "Neutrals"))
for(var/faction_to_get in ALL_XENO_HIVES)
var/datum/hive_status/hive = GLOB.hive_datum[faction_to_get]
- if(hive && length(hive.totalXenos))
- new_list_data["xenomorphs"] += list(list(
- "content" = "[hive.name]: [length(hive.totalXenos)]",
- "color" = hive.color ? hive.color : "#8200FF",
- "text" = "Queen: [hive.living_xeno_queen ? "Alive" : "Dead"]",
- ))
+ if(!hive || !length(hive.totalXenos))
+ continue
+ factions_additional += list(list("content" = "[hive.name]: [length(hive.totalXenos)]", "color" = hive.color ? hive.color : "#8200FF", "text" = "Queen: [hive.living_xeno_queen ? "Alive" : "Dead"]"))
- list_data = new_list_data
- mobs_ckey = new_mobs_ckey
+ src.base_data = base_data
+ src.admin_sorted_additional = admin_sorted_additional
/datum/player_list/tgui_interact(mob/user, datum/tgui/ui)
ui = SStgui.try_update_ui(user, src, ui)
@@ -197,12 +160,17 @@ SUBSYSTEM_DEF(who)
ui.set_autoupdate(TRUE)
/datum/player_list/ui_data(mob/user)
- . = list_data
-
-/datum/player_list/ui_static_data(mob/user)
. = list()
+ // Sending base client data, this data sended to EVERYONE
+ .["base_data"] = base_data
- .["admin"] = CLIENT_IS_STAFF(user.client)
+ // Admin rights based data
+ if(!CLIENT_IS_STAFF(user.client))
+ return
+ for(var/data_packet_name in admin_sorted_additional) // One by one for Drulikar complains
+ if(!check_client_rights(user.client, admin_sorted_additional[data_packet_name]["flags"], FALSE))
+ continue
+ . += list("[data_packet_name]" = admin_sorted_additional[data_packet_name]["data"])
/datum/player_list/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state)
. = ..()
@@ -211,13 +179,21 @@ SUBSYSTEM_DEF(who)
switch(action)
if("get_player_panel")
- if(mobs_ckey[params["ckey"]])
- GLOB.admin_datums[usr.client.ckey].show_player_panel(mobs_ckey[params["ckey"]])
+ if(!CLIENT_IS_STAFF(ui.user.client))
+ return
+ var/chosen_ckey = params["ckey"]
+ for(var/client/target in GLOB.clients)
+ if(target.key != chosen_ckey)
+ continue
+ if(target.mob)
+ GLOB.admin_datums[ui.user.client.ckey].show_player_panel(target.mob)
+ break
/datum/player_list/ui_status(mob/user, datum/ui_state/state)
return UI_INTERACTIVE
+// STAFF DATA
/datum/player_list/staff
tgui_name = "StaffWho"
tgui_interface_name = "Staff Who"
@@ -231,74 +207,79 @@ SUBSYSTEM_DEF(who)
)
/datum/player_list/staff/update_data()
- var/list/new_list_data = list()
- mobs_ckey = list()
+ var/list/base_data = list()
+ var/list/admin_sorted_additional = list()
- var/list/listings
- var/list/mappings
+ var/list/admin_additional = list()
+ admin_sorted_additional["admin_additional"] = list("flags" = R_MOD|R_ADMIN, "data" = admin_additional)
+
+ var/list/admin_stealthed_additional = list()
+ admin_sorted_additional["admin_stealthed_additional"] = list("flags" = R_STEALTH, "data" = admin_stealthed_additional)
+
+ var/list/listings = list()
if(CONFIG_GET(flag/show_manager))
- LAZYSET(mappings, "Management", R_PERMISSIONS)
+ listings["Management"] = list(R_PERMISSIONS, list())
if(CONFIG_GET(flag/show_devs))
- LAZYSET(mappings, "Maintainers", R_PROFILER)
- LAZYSET(mappings, "Administrators", R_ADMIN)
+ listings["Maintainers"] = list(R_PROFILER, list())
+ listings["Administrators"] = list(R_ADMIN, list())
if(CONFIG_GET(flag/show_mods))
- LAZYSET(mappings, "Moderators", R_MOD && R_BAN)
+ listings["Moderators"] = list(R_MOD|R_BAN, list())
if(CONFIG_GET(flag/show_mentors))
- LAZYSET(mappings, "Mentors", R_MENTOR)
-
- for(var/category in mappings)
- LAZYSET(listings, category, list())
+ listings["Mentors"] = list(R_MENTOR, list())
for(var/client/client as anything in GLOB.admins)
- if(client.admin_holder?.fakekey && !CLIENT_IS_STAFF(client))
- continue
-
- for(var/category in mappings)
- if(CLIENT_HAS_RIGHTS(client, mappings[category]))
- LAZYADD(listings[category], client)
+ for(var/category in listings)
+ if(CLIENT_HAS_RIGHTS(client, listings[category][1]))
+ listings[category][2] += client
break
for(var/category in listings)
- var/list/admins = list()
- for(var/client/entry as anything in listings[category])
- var/list/admin = list()
- var/rank = entry.admin_holder.rank
- if(entry.admin_holder.extra_titles?.len)
- for(var/srank in entry.admin_holder.extra_titles)
- rank += " & [srank]"
+ base_data["categories"] += list(list(
+ "category" = category,
+ "category_color" = category_colors[category],
+ ))
- admin["content"] = "[entry.key] ([rank])"
- admin["text"] = ""
+ for(var/client/client as anything in listings[category][2])
+ var/list/admin_payload = list()
+ admin_payload["category"] = category
+ var/rank = client.admin_holder.rank
+ if(client.admin_holder.extra_titles?.len)
+ for(var/srank in client.admin_holder.extra_titles)
+ rank += " & [srank]"
- if(entry.admin_holder?.fakekey)
- admin["text"] += " (HIDDEN)"
+ if(CLIENT_IS_STEALTHED(client))
+ admin_payload["special_color"] = "#b60d0d"
+ admin_payload["special_text"] = " (STEALTHED)"
+ admin_stealthed_additional["total_admins"] += list(list("[client.key] ([rank])" = list(admin_payload)))
+ else if(client.admin_holder?.fakekey)
+ admin_payload["special_color"] = "#7b582f"
+ admin_payload["special_text"] += " (HIDDEN)"
+ admin_additional["total_admins"] += list(list("[client.key] ([rank])" = list(admin_payload)))
+ else
+ admin_additional["total_admins"] += list(list("[client.key] ([rank])" = list(admin_payload)))
+ base_data["total_admins"] += list(list("[client.key] ([rank])" = list(admin_payload.Copy())))
- if(istype(entry.mob, /mob/dead/observer))
- admin["color"] = "#808080"
- admin["text"] += " Spectating"
+ admin_payload["text"] = ""
+ if(istype(client.mob, /mob/dead/observer))
+ admin_payload["color"] = "#808080"
+ admin_payload["text"] += "Spectating"
- else if(istype(entry.mob, /mob/new_player))
- admin["color"] = "#688944"
- admin["text"] += " in Lobby"
+ else if(istype(client.mob, /mob/new_player))
+ admin_payload["color"] = "#FFFFFF"
+ admin_payload["text"] += "in Lobby"
else
- admin["color"] = "#688944"
- admin["text"] += " Playing"
-
- if(entry.is_afk())
- admin["color"] = "#A040D0"
- admin["text"] += " (AFK)"
+ admin_payload["color"] = "#688944"
+ admin_payload["text"] += "Playing"
- admins += list(admin)
+ if(client.is_afk())
+ admin_payload["color"] = "#A040D0"
+ admin_payload["special_text"] += " (AFK)"
- new_list_data["administrators"] += list(list(
- "category" = category,
- "category_color" = category_colors[category],
- "category_administrators" = length(listings[category]),
- "admins" = admins,
- ))
+ src.base_data = base_data
+ src.admin_sorted_additional = admin_sorted_additional
- list_data = new_list_data
+// VERBS
/mob/verb/who()
set category = "OOC"
set name = "Who"
diff --git a/code/datums/ASRS.dm b/code/datums/ASRS.dm
index dc5ebc362fd1..5bd82ef6c532 100644
--- a/code/datums/ASRS.dm
+++ b/code/datums/ASRS.dm
@@ -40,6 +40,10 @@
reference_package = /datum/supply_packs/ammo_m4a3_mag_box_ap
cost = ASRS_VERY_LOW_WEIGHT
+/datum/supply_packs_asrs/ammo_m4a3_mag_box_hp
+ reference_package = /datum/supply_packs/ammo_m4a3_mag_box_hp
+ cost = ASRS_VERY_LOW_WEIGHT
+
/datum/supply_packs_asrs/ammo_mag_box
reference_package = /datum/supply_packs/ammo_mag_box
cost = ASRS_VERY_LOW_WEIGHT
@@ -123,3 +127,4 @@
/datum/supply_packs_asrs/ingredient
reference_package = /datum/supply_packs/ingredient
pool = ASRS_POOL_FOOD
+ cost = ASRS_VERY_LOW_WEIGHT
diff --git a/code/datums/agents/tools/decoy.dm b/code/datums/agents/tools/decoy.dm
index 57c8e5130fee..57eef25a446d 100644
--- a/code/datums/agents/tools/decoy.dm
+++ b/code/datums/agents/tools/decoy.dm
@@ -1,4 +1,6 @@
/obj/item/explosive/grenade/decoy
+ AUTOWIKI_SKIP(TRUE)
+
name = "decoy grenade"
desc = "A grenade typically used to distract the enemy. Emits a loud bang. Detonates in 5 seconds. Has 3 uses"
diff --git a/code/datums/ammo/ammo.dm b/code/datums/ammo/ammo.dm
index 022909691cfc..587ffd805b6c 100644
--- a/code/datums/ammo/ammo.dm
+++ b/code/datums/ammo/ammo.dm
@@ -173,6 +173,10 @@
living_mob.apply_stamina_damage(fired_projectile.ammo.damage, fired_projectile.def_zone, ARMOR_BULLET)
/datum/ammo/proc/slowdown(mob/living/living_mob, obj/projectile/fired_projectile)
+ if(isxeno(living_mob))
+ var/mob/living/carbon/xenomorph/xeno = living_mob
+ if(xeno.caste.tier > 2 || (xeno.caste.tier == 0 && xeno.mob_size >= MOB_SIZE_BIG))
+ return //tier 3 and big tier 0 (like queen) are not affected
if(iscarbonsizexeno(living_mob))
var/mob/living/carbon/xenomorph/target = living_mob
target.apply_effect(1, SUPERSLOW)
diff --git a/code/datums/ammo/bullet/pistol.dm b/code/datums/ammo/bullet/pistol.dm
index ced951241754..8b5239ba9127 100644
--- a/code/datums/ammo/bullet/pistol.dm
+++ b/code/datums/ammo/bullet/pistol.dm
@@ -180,12 +180,12 @@
headshot_state = HEADSHOT_OVERLAY_MEDIUM
debilitate = list(0,0,0,0,0,0,0,2)
- effective_range_max = 3
+ effective_range_max = 6
accuracy = HIT_ACCURACY_TIER_4
damage = 45
penetration= ARMOR_PENETRATION_TIER_6
shrapnel_chance = SHRAPNEL_CHANCE_TIER_2
- damage_falloff = DAMAGE_FALLOFF_TIER_6 //"VP78 - the only pistol viable as a primary."-Vampmare, probably.
+ damage_falloff = DAMAGE_FALLOFF_TIER_6
/datum/ammo/bullet/pistol/squash/toxin
name = "toxic squash-head pistol bullet"
diff --git a/code/datums/ammo/bullet/special_ammo.dm b/code/datums/ammo/bullet/special_ammo.dm
index 97c1bf5735f9..cd30f8db1a78 100644
--- a/code/datums/ammo/bullet/special_ammo.dm
+++ b/code/datums/ammo/bullet/special_ammo.dm
@@ -149,15 +149,10 @@
RegisterSignal(SSdcs, COMSIG_GLOB_MODE_PRESETUP, PROC_REF(setup_hvh_damage))
/datum/ammo/bullet/minigun/proc/setup_hvh_damage()
+ SIGNAL_HANDLER
if(MODE_HAS_FLAG(MODE_FACTION_CLASH))
damage = 15
-/datum/ammo/bullet/minigun/tank
- accuracy = -HIT_ACCURACY_TIER_1
- accuracy_var_low = PROJECTILE_VARIANCE_TIER_8
- accuracy_var_high = PROJECTILE_VARIANCE_TIER_8
- accurate_range = 12
-
/datum/ammo/bullet/m60
name = "M60 bullet"
headshot_state = HEADSHOT_OVERLAY_MEDIUM
diff --git a/code/datums/ammo/bullet/tank.dm b/code/datums/ammo/bullet/tank.dm
index 70a953c6e273..1607c1ae6734 100644
--- a/code/datums/ammo/bullet/tank.dm
+++ b/code/datums/ammo/bullet/tank.dm
@@ -4,9 +4,12 @@
//======
*/
+//Autocannon Ammo//
+
/datum/ammo/bullet/tank/flak
name = "flak autocannon bullet"
icon_state = "autocannon"
+ sound_hit = 'sound/weapons/sting_boom_small1.ogg'
damage_falloff = 0
flags_ammo_behavior = AMMO_BALLISTIC
accurate_range_min = 4
@@ -72,3 +75,30 @@
for(var/mob/living/carbon/L in T)
if(L.stat == CONSCIOUS && L.mob_size <= MOB_SIZE_XENO)
shake_camera(L, 1, 1)
+
+//Minigun Ammo//
+
+/datum/ammo/bullet/tank/minigun
+ name = "minigun bullet"
+ headshot_state = HEADSHOT_OVERLAY_MEDIUM
+ icon_state = "bullet_large"
+
+ accuracy = -HIT_ACCURACY_TIER_1
+ accuracy_var_low = PROJECTILE_VARIANCE_TIER_8
+ accuracy_var_high = PROJECTILE_VARIANCE_TIER_8
+ accurate_range = 12
+ damage = 40
+ penetration = ARMOR_PENETRATION_TIER_6
+ damage_armor_punch = 1
+
+/datum/ammo/bullet/tank/minigun/New()
+ ..()
+ if(SSticker.mode && MODE_HAS_FLAG(MODE_FACTION_CLASH))
+ damage = 15
+ else if(SSticker.current_state < GAME_STATE_PLAYING)
+ RegisterSignal(SSdcs, COMSIG_GLOB_MODE_PRESETUP, PROC_REF(setup_hvh_damage))
+
+/datum/ammo/bullet/tank/minigun/proc/setup_hvh_damage()
+ SIGNAL_HANDLER
+ if(MODE_HAS_FLAG(MODE_FACTION_CLASH))
+ damage = 15
diff --git a/code/datums/ammo/energy.dm b/code/datums/ammo/energy.dm
index 3ddd11eedf55..6eb865034cbe 100644
--- a/code/datums/ammo/energy.dm
+++ b/code/datums/ammo/energy.dm
@@ -204,7 +204,7 @@
/datum/ammo/energy/yautja/caster/sphere/stun/proc/do_area_stun(obj/projectile/P)
playsound(P, 'sound/weapons/wave.ogg', 75, 1, 25)
- for (var/mob/living/carbon/M in view(src.stun_range, get_turf(P)))
+ FOR_DVIEW(var/mob/living/carbon/M, src.stun_range, get_turf(P), HIDE_INVISIBLE_OBSERVER)
var/stun_time = src.stun_time
log_attack("[key_name(M)] was stunned by a plasma immobilizer from [key_name(P.firer)] at [get_area(P)]")
if (isyautja(M))
@@ -214,6 +214,7 @@
to_chat(M, SPAN_DANGER("A powerful electric shock ripples through your body, freezing you in place!"))
M.apply_effect(stun_time, STUN)
M.apply_effect(stun_time, WEAKEN)
+ FOR_DVIEW_END
/datum/ammo/energy/yautja/rifle/bolt
name = "plasma rifle bolt"
diff --git a/code/datums/ammo/rocket.dm b/code/datums/ammo/rocket.dm
index 83a94b2d8c5f..d1050ed32062 100644
--- a/code/datums/ammo/rocket.dm
+++ b/code/datums/ammo/rocket.dm
@@ -32,7 +32,7 @@
cell_explosion(get_turf(mob), 150, 50, EXPLOSION_FALLOFF_SHAPE_LINEAR, null, projectile.weapon_cause_data)
smoke.set_up(1, get_turf(mob))
if(ishuman_strict(mob)) // No yautya or synths. Makes humans gib on direct hit.
- mob.ex_act(350, projectile.dir, projectile.weapon_cause_data, 100)
+ mob.ex_act(350, null, projectile.weapon_cause_data, 100)
smoke.start()
/datum/ammo/rocket/on_hit_obj(obj/object, obj/projectile/projectile)
@@ -69,7 +69,7 @@
mob.apply_effect(3, WEAKEN)
mob.apply_effect(3, PARALYZE)
if(ishuman_strict(mob)) // No yautya or synths. Makes humans gib on direct hit.
- mob.ex_act(300, projectile.dir, projectile.weapon_cause_data, 100)
+ mob.ex_act(300, null, projectile.weapon_cause_data, 100)
cell_explosion(turf, 100, 50, EXPLOSION_FALLOFF_SHAPE_LINEAR, null, projectile.weapon_cause_data)
smoke.set_up(1, turf)
smoke.start()
diff --git a/code/datums/ammo/shrapnel.dm b/code/datums/ammo/shrapnel.dm
index 39b0813fad25..836e142489e1 100644
--- a/code/datums/ammo/shrapnel.dm
+++ b/code/datums/ammo/shrapnel.dm
@@ -122,16 +122,36 @@
name = "glass shrapnel"
icon_state = "shrapnel_glass"
-/datum/ammo/bullet/shrapnel/light/effect/ // no damage, but looks bright and neat
- name = "sparks"
-
- damage = 1 // Tickle tickle
+/particles/shrapnel
+ icon = 'icons/obj/items/weapons/projectiles.dmi'
+ icon_state = "shrapnel_bright2"
+ width = 1000
+ height = 1000
+ count = 100
+ spawning = 0
+ lifespan = 0.6 SECONDS
+ fadein = 0.2 SECONDS
+ velocity = generator("square", 32 * 0.85, 32 * 1.15)
+ rotation = generator("num", 0, 359)
+
+/obj/shrapnel_effect
+ anchored = TRUE
+ mouse_opacity = MOUSE_OPACITY_TRANSPARENT
+ unacidable = TRUE
+ blocks_emissive = EMISSIVE_BLOCK_GENERIC
+
+/obj/shrapnel_effect/New()
+ . = ..()
+ particles = new /particles/shrapnel
+ particles.spawning = rand(5,9) + rand(5,9)
+ addtimer(CALLBACK(src, PROC_REF(stop)), 0.1 SECONDS)
+ QDEL_IN(src, 0.9 SECONDS)
-/datum/ammo/bullet/shrapnel/light/effect/ver1
- icon_state = "shrapnel_bright1"
+/obj/shrapnel_effect/proc/stop()
+ particles.spawning = 0
-/datum/ammo/bullet/shrapnel/light/effect/ver2
- icon_state = "shrapnel_bright2"
+/obj/shrapnel_effect/get_applying_acid_time()
+ return -1
/datum/ammo/bullet/shrapnel/jagged
shrapnel_chance = SHRAPNEL_CHANCE_TIER_2
diff --git a/code/datums/autocells/explosion.dm b/code/datums/autocells/explosion.dm
index ec310e80367c..7736d85509ee 100644
--- a/code/datums/autocells/explosion.dm
+++ b/code/datums/autocells/explosion.dm
@@ -295,8 +295,7 @@ as having entered the turf.
if(power >= 100) // powerful explosions send out some special effects
epicenter = get_turf(epicenter) // the ex_acts might have changed the epicenter
- create_shrapnel(epicenter, rand(5,9), , ,/datum/ammo/bullet/shrapnel/light/effect/ver1, explosion_cause_data)
- create_shrapnel(epicenter, rand(5,9), , ,/datum/ammo/bullet/shrapnel/light/effect/ver2, explosion_cause_data)
+ new /obj/shrapnel_effect(epicenter)
/proc/log_explosion(atom/A, datum/automata_cell/explosion/E)
if(isliving(A))
diff --git a/code/datums/beam.dm b/code/datums/beam.dm
index 4b024df585f9..e700016b5f32 100644
--- a/code/datums/beam.dm
+++ b/code/datums/beam.dm
@@ -215,13 +215,7 @@
return newbeam
/proc/zap_beam(atom/source, zap_range, damage, list/blacklistmobs)
- var/list/zap_data = list()
- for(var/mob/living/carbon/xenomorph/beno in oview(zap_range, source))
- zap_data += beno
- for(var/xeno in zap_data)
- var/mob/living/carbon/xenomorph/living = xeno
- if(!living)
- return
+ FOR_DOVIEW(var/mob/living/carbon/xenomorph/living, zap_range, source, HIDE_INVISIBLE_OBSERVER)
if(living.stat == DEAD)
continue
if(living in blacklistmobs)
@@ -229,3 +223,4 @@
source.beam(living, icon_state="lightning[rand(1,12)]", time = 3, maxdistance = zap_range + 2)
living.set_effect(2, SLOW)
log_attack("[living] was zapped by [source]")
+ FOR_DOVIEW_END
diff --git a/code/datums/custom_hud.dm b/code/datums/custom_hud.dm
index c9894398477a..9a009532ef35 100644
--- a/code/datums/custom_hud.dm
+++ b/code/datums/custom_hud.dm
@@ -115,10 +115,11 @@
/datum/custom_hud/dark
ui_style_icon = 'icons/mob/hud/human_dark.dmi'
- UI_OXYGEN_LOC = "EAST-2:16,14:15"
- UI_NUTRITION_LOC = "EAST-2:33,14:15"
- UI_TEMP_LOC = "EAST-1:26,15:-7"
- UI_HEALTH_LOC = "EAST-1:27,15:-8"
+ UI_FRAME_LOC = "EAST-3:0,NORTH-1:15"
+ UI_OXYGEN_LOC = "EAST-2:16,NORTH-1:15"
+ UI_NUTRITION_LOC = "EAST-2:33,NORTH-1:15"
+ UI_TEMP_LOC = "EAST-1:26,NORTH-0:-7"
+ UI_HEALTH_LOC = "EAST-1:27,NORTH-0:-8"
UI_SL_LOCATOR_LOC = "EAST-1:27,12:22"
/datum/custom_hud/dark/get_status_loc(placement)
diff --git a/code/datums/datacore.dm b/code/datums/datacore.dm
index ca4eca8a1a49..44e8924ef68d 100644
--- a/code/datums/datacore.dm
+++ b/code/datums/datacore.dm
@@ -6,6 +6,8 @@ GLOBAL_DATUM_INIT(data_core, /datum/datacore, new)
var/security[] = list()
//This list tracks characters spawned in the world and cannot be modified in-game. Currently referenced by respawn_character().
var/locked[] = list()
+ var/leveled_riflemen = 0
+ var/leveled_riflemen_max = 7
/datum/datacore/proc/get_manifest(monochrome, OOC, nonHTML)
var/list/cic = GLOB.ROLES_CIC.Copy()
@@ -261,7 +263,7 @@ GLOBAL_DATUM_INIT(data_core, /datum/datacore, new)
record_general.fields["age"] = target.age
record_general.fields["p_stat"] = "Active"
record_general.fields["m_stat"] = "Stable"
- record_general.fields["sex"] = target.gender
+ record_general.fields["sex"] = capitalize(target.gender)
record_general.fields["species"] = target.get_species()
record_general.fields["origin"] = target.origin
record_general.fields["faction"] = target.personal_faction
diff --git a/code/datums/datum.dm b/code/datums/datum.dm
index e926dfd022ca..2370987b4cfc 100644
--- a/code/datums/datum.dm
+++ b/code/datums/datum.dm
@@ -70,6 +70,10 @@
var/list/cached_vars
#endif
+#ifdef AUTOWIKI
+ var/autowiki_skip = FALSE
+#endif
+
/**
* Default implementation of clean-up code.
*
diff --git a/code/datums/disease.dm b/code/datums/disease.dm
index 024337c8e065..497c62cddec6 100644
--- a/code/datums/disease.dm
+++ b/code/datums/disease.dm
@@ -121,10 +121,11 @@ GLOBAL_LIST_INIT(diseases, typesof(/datum/disease) - /datum/disease)
check_range = 1 // everything else, like infect-on-contact things, only infect things on top of it
if(isturf(source.loc))
- for(var/mob/living/carbon/victim in oview(check_range, source))
+ FOR_DOVIEW(var/mob/living/carbon/victim, check_range, source, HIDE_INVISIBLE_OBSERVER)
if(isturf(victim.loc))
if(AStar(source.loc, victim.loc, /turf/proc/AdjacentTurfs, /turf/proc/Distance, check_range))
victim.contract_disease(src, 0, 1, force_spread)
+ FOR_DOVIEW_END
return
diff --git a/code/datums/elements/strippable.dm b/code/datums/elements/strippable.dm
index e0daaee74a8c..d93b07234c9d 100644
--- a/code/datums/elements/strippable.dm
+++ b/code/datums/elements/strippable.dm
@@ -126,6 +126,14 @@
to_chat(user, SPAN_WARNING("You can't do this right now."))
return FALSE
+ if (user.is_mob_incapacitated())
+ to_chat(user, SPAN_WARNING("You can't do this right now."))
+ return FALSE
+
+ if (HAS_TRAIT(user, TRAIT_IMMOBILIZED) || HAS_TRAIT(user, TRAIT_FLOORED))
+ to_chat(user, SPAN_WARNING("You can't do this right now."))
+ return FALSE
+
if ((item.flags_inventory & CANTSTRIP) || ((item.flags_item & NODROP) && !(item.flags_item & FORCEDROP_CONDITIONAL)) || (item.flags_item & ITEM_ABSTRACT))
return FALSE
diff --git a/code/datums/emergency_calls/cryo_marines.dm b/code/datums/emergency_calls/cryo_marines.dm
index fb8d4b8a5a69..56fa434d09c3 100644
--- a/code/datums/emergency_calls/cryo_marines.dm
+++ b/code/datums/emergency_calls/cryo_marines.dm
@@ -37,10 +37,11 @@
human.create_hud()
if(!mind)
- for(var/obj/structure/machinery/cryopod/pod in view(7,human))
+ FOR_DVIEW(var/obj/structure/machinery/cryopod/pod, 7, human, HIDE_INVISIBLE_OBSERVER)
if(pod && !pod.occupant)
pod.go_in_cryopod(human, silent = TRUE)
break
+ FOR_DVIEW_END
sleep(5)
var/datum/squad/marine/cryo/cryo_squad = GLOB.RoleAuthority.squads_by_type[/datum/squad/marine/cryo]
diff --git a/code/datums/emergency_calls/cryo_spec.dm b/code/datums/emergency_calls/cryo_spec.dm
index 8d563b0693f8..5d4f621a473a 100644
--- a/code/datums/emergency_calls/cryo_spec.dm
+++ b/code/datums/emergency_calls/cryo_spec.dm
@@ -8,6 +8,16 @@
shuttle_id = ""
spawn_max_amount = TRUE
+/datum/emergency_call/cryo_spec/remove_nonqualifiers(list/datum/mind/candidates_list)
+ var/list/datum/mind/candidates_clean = list()
+ for(var/datum/mind/single_candidate in candidates_list)
+ if(check_timelock(single_candidate.current?.client, JOB_SQUAD_ROLES_LIST, time_required_for_job))
+ candidates_clean.Add(single_candidate)
+ continue
+ if(single_candidate.current)
+ to_chat(single_candidate.current, SPAN_WARNING("You didn't qualify for the ERT beacon because you don't have the specialist job unlocked!"))
+ return candidates_clean
+
/datum/emergency_call/cryo_spec/create_member(datum/mind/mind, turf/override_spawn_loc)
set waitfor = FALSE
if(SSmapping.configs[GROUND_MAP].map_name == MAP_WHISKEY_OUTPOST)
@@ -25,10 +35,11 @@
human.create_hud()
if(!mind)
- for(var/obj/structure/machinery/cryopod/pod in view(7,human))
+ FOR_DVIEW(var/obj/structure/machinery/cryopod/pod, 7, human, HIDE_INVISIBLE_OBSERVER)
if(pod && !pod.occupant)
pod.go_in_cryopod(human, silent = TRUE)
break
+ FOR_DVIEW_END
sleep(5)
human.client?.prefs.copy_all_to(human, JOB_SQUAD_SPECIALIST, TRUE, TRUE)
diff --git a/code/datums/emergency_calls/emergency_call.dm b/code/datums/emergency_calls/emergency_call.dm
index 99b31ab41f19..885844b6ec2e 100644
--- a/code/datums/emergency_calls/emergency_call.dm
+++ b/code/datums/emergency_calls/emergency_call.dm
@@ -224,11 +224,15 @@
addtimer(CALLBACK(src, TYPE_PROC_REF(/datum/emergency_call, spawn_candidates), quiet_launch, announce_incoming, override_spawn_loc), 30 SECONDS)
+/datum/emergency_call/proc/remove_nonqualifiers(list/datum/mind/candidates_list)
+ return candidates_list //everyone gets selected on 99% of distress beacons.
+
/datum/emergency_call/proc/spawn_candidates(quiet_launch = FALSE, announce_incoming = TRUE, override_spawn_loc)
if(SSticker.mode)
SSticker.mode.picked_calls -= src
SEND_SIGNAL(src, COMSIG_ERT_SETUP)
+ candidates = remove_nonqualifiers(candidates)
if(length(candidates) < mob_min && !spawn_max_amount)
message_admins("Aborting distress beacon, not enough candidates: found [length(candidates)].")
diff --git a/code/datums/emergency_calls/forecon.dm b/code/datums/emergency_calls/forecon.dm
index 98e6a1c27ec2..94336b9ffa53 100644
--- a/code/datums/emergency_calls/forecon.dm
+++ b/code/datums/emergency_calls/forecon.dm
@@ -2,7 +2,7 @@
name = "FORECON (Squad)"
arrival_message = "A Force Reconnaissance squad has been dispatched to your ship. Stand by."
objectives = "Handle whatever threat is present. Further orders may be provided."
- home_base = /datum/lazy_template/ert/weyland_station
+ home_base = /datum/lazy_template/ert/uscm_station
probability = 0
mob_min = 3
mob_max = 6
diff --git a/code/datums/emergency_calls/inspection.dm b/code/datums/emergency_calls/inspection.dm
index e473466f4fb8..4a1a8ecb62be 100644
--- a/code/datums/emergency_calls/inspection.dm
+++ b/code/datums/emergency_calls/inspection.dm
@@ -1,6 +1,6 @@
//USCM Provost
/datum/emergency_call/inspection_provost
- name = "Inspection - USCM Provost - ML knowledge required."
+ name = "Inspection - USCM Provost - ML knowledge and MP playtime required."
mob_max = 2
mob_min = 1
probability = 0
@@ -9,6 +9,15 @@
..()
objectives = "Investigate any issues with ML enforcement on the [MAIN_SHIP_NAME]."
+/datum/emergency_call/inspection_provost/remove_nonqualifiers(list/datum/mind/candidates_list)
+ var/list/datum/mind/candidates_clean = list()
+ for(var/datum/mind/single_candidate in candidates_list)
+ if(check_timelock(single_candidate.current?.client, JOB_POLICE, time_required_for_job))
+ candidates_clean.Add(single_candidate)
+ continue
+ if(single_candidate.current)
+ to_chat(single_candidate.current, SPAN_WARNING("You didn't qualify for the ERT beacon because you don't have enough playtime (5 Hours) as military police!"))
+ return candidates_clean
/datum/emergency_call/inspection_provost/create_member(datum/mind/M, turf/override_spawn_loc)
var/turf/T = override_spawn_loc ? override_spawn_loc : get_spawn_point()
diff --git a/code/datums/emergency_calls/solar_devils.dm b/code/datums/emergency_calls/solar_devils.dm
new file mode 100644
index 000000000000..6f3323f3cd6d
--- /dev/null
+++ b/code/datums/emergency_calls/solar_devils.dm
@@ -0,0 +1,91 @@
+/datum/emergency_call/solar_devils
+ name = "USCM Solar Devils (Half Squad)"
+ arrival_message = "This is the Solar Devils of the USCM 2nd Division, responding to your distress beacon. Don't worry, the grown-ups are here to clean up your mess."
+ objectives = "Assist local Marine forces in dealing with whatever issue they can't handle. Further orders may be forthcoming."
+ home_base = /datum/lazy_template/ert/uscm_station
+ probability = 0
+ mob_min = 3
+ mob_max = 5
+
+ max_medics = 1
+ max_smartgunners = 1
+
+/datum/emergency_call/solar_devils/create_member(datum/mind/new_mind, turf/override_spawn_loc)
+ var/turf/spawn_loc = override_spawn_loc ? override_spawn_loc : get_spawn_point()
+
+ if(!istype(spawn_loc))
+ return //Didn't find a useable spawn point.
+
+ var/mob/living/carbon/human/mob = new(spawn_loc)
+ new_mind.transfer_to(mob, TRUE)
+
+ if(!leader && HAS_FLAG(mob.client.prefs.toggles_ert, PLAY_LEADER) && check_timelock(mob.client, JOB_SQUAD_LEADER, time_required_for_job))
+ leader = mob
+ arm_equipment(mob, /datum/equipment_preset/uscm/tl_pve, TRUE, TRUE)
+ to_chat(mob, SPAN_ROLE_HEADER("You are the Solar Devils Team Leader!"))
+
+ else if(medics < max_medics && HAS_FLAG(mob.client.prefs.toggles_ert, PLAY_MEDIC) && check_timelock(mob.client, JOB_SQUAD_MEDIC, time_required_for_job))
+ medics++
+ arm_equipment(mob, /datum/equipment_preset/uscm/medic_pve, TRUE, TRUE)
+ to_chat(mob, SPAN_ROLE_HEADER("You are the Solar Devils Platoon Corpsman!"))
+
+ else if(smartgunners < max_smartgunners && HAS_FLAG(mob.client.prefs.toggles_ert, PLAY_SMARTGUNNER) && check_timelock(mob.client, JOB_SQUAD_SMARTGUN))
+ smartgunners++
+ to_chat(mob, SPAN_ROLE_HEADER("You are the Solar Devils Smartgunner!"))
+ arm_equipment(mob, /datum/equipment_preset/uscm/sg_pve, TRUE, TRUE)
+
+ else
+ arm_equipment(mob, /datum/equipment_preset/uscm/rifleman_pve, TRUE, TRUE)
+ to_chat(mob, SPAN_ROLE_HEADER("You are a Solar Devils Rifleman!"))
+
+ to_chat(mob, SPAN_ROLE_BODY("You are a member of the 3rd Battalion 'Solar Devils', part of the USCM's 2nd Division, 1st Regiment. Unlike most of the USS Almayer's troops, you are well-trained and properly-equipped career marines. Semper Fidelis."))
+ addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(to_chat), mob, SPAN_BOLD("Objectives: [objectives]")), 1 SECONDS)
+
+/datum/emergency_call/solar_devils_full
+ name = "USCM Solar Devils (Full Squad)"
+ arrival_message = "This is the Solar Devils of the USCM 2nd Division, responding to your distress beacon. Don't worry, the grown-ups are here to clean up your mess."
+ objectives = "Assist local Marine forces in dealing with whatever issue they can't handle. Further orders may be forthcoming."
+ home_base = /datum/lazy_template/ert/uscm_station
+ probability = 0
+ mob_min = 3
+ mob_max = 10
+
+ max_engineers = 2
+ max_medics = 1
+ max_smartgunners = 2
+
+/datum/emergency_call/solar_devils_full/create_member(datum/mind/new_mind, turf/override_spawn_loc)
+ var/turf/spawn_loc = override_spawn_loc ? override_spawn_loc : get_spawn_point()
+
+ if(!istype(spawn_loc))
+ return //Didn't find a useable spawn point.
+
+ var/mob/living/carbon/human/mob = new(spawn_loc)
+ new_mind.transfer_to(mob, TRUE)
+
+ if(!leader && HAS_FLAG(mob.client.prefs.toggles_ert, PLAY_LEADER) && check_timelock(mob.client, JOB_SQUAD_LEADER, time_required_for_job))
+ leader = mob
+ arm_equipment(mob, /datum/equipment_preset/uscm/sl_pve, TRUE, TRUE)
+ to_chat(mob, SPAN_ROLE_HEADER("You are the Solar Devils Platoon Leader!"))
+
+ else if(engineers < max_engineers && HAS_FLAG(mob.client.prefs.toggles_ert, PLAY_ENGINEER) && check_timelock(mob.client, JOB_SQUAD_LEADER, time_required_for_job))
+ engineers++
+ arm_equipment(mob, /datum/equipment_preset/uscm/tl_pve, TRUE, TRUE)
+ to_chat(mob, SPAN_ROLE_HEADER("You are a Solar Devils Team Leader!"))
+
+ else if(medics < max_medics && HAS_FLAG(mob.client.prefs.toggles_ert, PLAY_MEDIC) && check_timelock(mob.client, JOB_SQUAD_MEDIC, time_required_for_job))
+ medics++
+ arm_equipment(mob, /datum/equipment_preset/uscm/medic_pve, TRUE, TRUE)
+ to_chat(mob, SPAN_ROLE_HEADER("You are the Solar Devils Platoon Corpsman!"))
+
+ else if(smartgunners < max_smartgunners && HAS_FLAG(mob.client.prefs.toggles_ert, PLAY_SMARTGUNNER) && check_timelock(mob.client, JOB_SQUAD_SMARTGUN))
+ smartgunners++
+ to_chat(mob, SPAN_ROLE_HEADER("You are a Solar Devils Smartgunner!"))
+ arm_equipment(mob, /datum/equipment_preset/uscm/sg_pve, TRUE, TRUE)
+
+ else
+ arm_equipment(mob, /datum/equipment_preset/uscm/rifleman_pve, TRUE, TRUE)
+ to_chat(mob, SPAN_ROLE_HEADER("You are a Solar Devils Rifleman!"))
+
+ to_chat(mob, SPAN_ROLE_BODY("You are a member of the 3rd Battalion 'Solar Devils', part of the USCM's 2nd Division, 1st Regiment. Unlike most of the USS Almayer's troops, you are well-trained and properly-equipped career marines. Semper Fidelis."))
+ addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(to_chat), mob, SPAN_BOLD("Objectives: [objectives]")), 1 SECONDS)
diff --git a/code/datums/factions/upp.dm b/code/datums/factions/upp.dm
index 90b04765cf85..1a1f0e9a2390 100644
--- a/code/datums/factions/upp.dm
+++ b/code/datums/factions/upp.dm
@@ -53,6 +53,10 @@
hud_icon_state = "vc"
if(JOB_UPP_LT_DOKTOR)
hud_icon_state = "doc"
+ if(JOB_UPP_SUPPLY)
+ hud_icon_state = "log"
+ if(JOB_UPP_COMMISSAR)
+ hud_icon_state = "commi"
if(hud_icon_state)
holder.overlays += image('icons/mob/hud/marine_hud.dmi', H, "upp_[hud_icon_state]")
diff --git a/code/datums/factions/uscm.dm b/code/datums/factions/uscm.dm
index f7c49321f305..6a4b61289ea3 100644
--- a/code/datums/factions/uscm.dm
+++ b/code/datums/factions/uscm.dm
@@ -30,6 +30,7 @@
if(JOB_MARINE_RAIDER) marine_rk = "soc"
if(JOB_MARINE_RAIDER_SL) marine_rk = "soctl"
if(JOB_MARINE_RAIDER_CMD) marine_rk = "soccmd"
+ if(JOB_SQUAD_TECH) marine_rk = "tech"
if(squad.squad_leader == current_human)
switch(squad.squad_type)
if("Squad") marine_rk = "leader_a"
@@ -87,6 +88,12 @@
if(JOB_GENERAL, JOB_COLONEL, JOB_ACMC, JOB_CMC)
marine_rk = "general"
border_rk = "command"
+ if(JOB_PLT_MED)
+ marine_rk = "med"
+ if(JOB_PLT_SL)
+ marine_rk = "leader"
+ if(JOB_SQUAD_TECH)
+ marine_rk = "tech"
if(JOB_INTEL)
marine_rk = "io"
if(JOB_CAS_PILOT)
@@ -142,9 +149,18 @@
if(JOB_PROVOST_INSPECTOR)
marine_rk = "pvi"
border_rk = "command"
+ if(JOB_PROVOST_UNDERCOVER)
+ marine_rk = "pvuc"
+ border_rk = "command"
+ if(JOB_PROVOST_CINSPECTOR)
+ marine_rk = "pvci"
+ border_rk = "command"
if(JOB_PROVOST_ADVISOR)
marine_rk = "pva"
border_rk = "command"
+ if(JOB_PROVOST_DMARSHAL)
+ marine_rk = "pvdm"
+ border_rk = "command"
if(JOB_PROVOST_MARSHAL, JOB_PROVOST_CMARSHAL, JOB_PROVOST_SMARSHAL)
marine_rk = "pvm"
border_rk = "command"
diff --git a/code/datums/looping_sounds/misc_sounds.dm b/code/datums/looping_sounds/misc_sounds.dm
index 6411b3f51f4a..318ac7b331b7 100644
--- a/code/datums/looping_sounds/misc_sounds.dm
+++ b/code/datums/looping_sounds/misc_sounds.dm
@@ -1,3 +1,24 @@
/datum/looping_sound/looping_launch_announcement_alarm
mid_sounds = list('sound/vehicles/Dropships/single_alarm_brr_dropship_1.ogg' = 1)
start_sound = list('sound/vehicles/Dropships/single_alarm_brr_dropship_1.ogg' = 1)
+
+/datum/looping_sound/telephone/ring
+ start_sound = 'sound/machines/telephone/dial.ogg'
+ start_length = 3.2 SECONDS
+ mid_sounds = 'sound/machines/telephone/ring_outgoing.ogg'
+ mid_length = 2.1 SECONDS
+ volume = 10
+
+/datum/looping_sound/telephone/busy
+ start_sound = 'sound/voice/callstation_unavailable.ogg'
+ start_length = 5.7 SECONDS
+ mid_sounds = 'sound/machines/telephone/phone_busy.ogg'
+ mid_length = 5 SECONDS
+ volume = 15
+
+/datum/looping_sound/telephone/hangup
+ start_sound = 'sound/machines/telephone/remote_hangup.ogg'
+ start_length = 0.6 SECONDS
+ mid_sounds = 'sound/machines/telephone/phone_busy.ogg'
+ mid_length = 5 SECONDS
+ volume = 15
diff --git a/code/datums/mob_hud.dm b/code/datums/mob_hud.dm
index 603f9a05d702..011dc8e25dba 100644
--- a/code/datums/mob_hud.dm
+++ b/code/datums/mob_hud.dm
@@ -408,7 +408,6 @@ GLOBAL_LIST_INIT_TYPED(huds, /datum/mob_hud, list(
var/revive_enabled = stat == DEAD && check_tod() && is_revivable()
if(stat == DEAD)
revive_enabled = check_tod() && is_revivable()
- var/datum/internal_organ/heart/heart = islist(internal_organs_by_name) ? internal_organs_by_name["heart"] : null
var/holder2_set = 0
if(hivenumber)
@@ -475,7 +474,7 @@ GLOBAL_LIST_INIT_TYPED(huds, /datum/mob_hud, list(
holder3.icon_state = "huddead"
holder2_set = 1
else
- if(heart && (heart.organ_status >= ORGAN_BROKEN && check_tod())) // broken heart icon
+ if(is_heart_broken()) // broken heart icon
holder.icon_state = "huddeadheart"
if(!holder2_set)
holder2.icon_state = "huddeadheart"
@@ -784,7 +783,7 @@ GLOBAL_DATUM(hud_icon_hudfocus, /image)
// Vampire Execute HUD
/mob/living/carbon/human/proc/update_execute_hud()
var/image/execute_holder = hud_list[XENO_EXECUTE]
-
+
execute_holder.icon_state = "hudblank"
execute_holder.overlays.Cut()
diff --git a/code/datums/paygrades/factions/upp/upp.dm b/code/datums/paygrades/factions/upp/upp.dm
index b9ce691fdb8d..3eef33921137 100644
--- a/code/datums/paygrades/factions/upp/upp.dm
+++ b/code/datums/paygrades/factions/upp/upp.dm
@@ -95,6 +95,13 @@
pay_multiplier = 2.5
officer_grade = GRADE_OFFICER
+/datum/paygrade/upp/uo4p
+ paygrade = PAY_SHORT_UO4P
+ name = "Political Commissar"
+ prefix = "Pol."
+ pay_multiplier = 5
+ officer_grade = GRADE_OFFICER
+
/datum/paygrade/upp/uo5
paygrade = PAY_SHORT_UO5
name = "Leytenant Kolonel"
diff --git a/code/datums/paygrades/factions/uscm/provost.dm b/code/datums/paygrades/factions/uscm/provost.dm
index c7e529d9fcb4..a89e3b7fa588 100644
--- a/code/datums/paygrades/factions/uscm/provost.dm
+++ b/code/datums/paygrades/factions/uscm/provost.dm
@@ -10,6 +10,19 @@
rank_pin = /obj/item/clothing/accessory/ranks/special/insp
officer_grade = GRADE_FLAG //Not really a flag officer, but they have special access to things for their job.
+/datum/paygrade/provost/inspector/chief
+ paygrade = PAY_SHORT_PVCI
+ name = "Provost Chief Inspector"
+ prefix = "Chief Insp."
+ rank_pin = /obj/item/clothing/accessory/ranks/special/insp
+ officer_grade = GRADE_FLAG //Not really a flag officer, but they have special access to things for their job.
+
+/datum/paygrade/provost/marshal/deputy
+ paygrade = PAY_SHORT_PVDM
+ name = "Provost Deputy Marshal"
+ prefix = "Dep. Marshal"
+ officer_grade = GRADE_FLAG
+
/datum/paygrade/provost/marshal
paygrade = PAY_SHORT_PVM
name = "Provost Marshal"
diff --git a/code/datums/research_upgrade_datum.dm b/code/datums/research_upgrade_datum.dm
index fd571afdfcf0..78bdecccc5b5 100644
--- a/code/datums/research_upgrade_datum.dm
+++ b/code/datums/research_upgrade_datum.dm
@@ -5,14 +5,12 @@
var/desc = "something is broken. yippee!!"
///which behavior should this type follow. Should this be completely excluded from the buy menu? should it be one of the dropdown options? or a normal item?
var/behavior = RESEARCH_UPGRADE_EXCLUDE_BUY // should this be on the list?
- //This is what gets passed to the initizialize of an item, RESEARCH_UPGRADE_NOTHING_TO_PASS to not pass anything.
- var/on_init_argument = RESEARCH_UPGRADE_NOTHING_TO_PASS
/// the price of the upgrade, refer to this: 500 is a runner, 8k is queen. T3 is usually 3k, woyer is 2k.
var/value_upgrade = 1000
- /// actual path to the item.(upgrade)
- var/item_reference
///In which tab the upgrade should be.
var/upgrade_type
+ ///Path to the item, upgrade, if any.
+ var/item_reference
///Clearance requirment to buy this upgrade. 5x is level 6. Why is it not that way? no one knows.
var/clearance_req = 5
///The change of price for item per purchase, recommended for mass producing stuff or limited upgrade.
@@ -22,6 +20,12 @@
///the maximum price which we cant go any more expensive, usually dont need to set this if change price is 0 or negative
var/maximum_price = INFINITY
+///gets called once the product is purchased, override if you need to pass any special arguments or have special behavior on purchase.
+/datum/research_upgrades/proc/on_purchase(turf/machine_loc)
+ if(isnull(item_reference))
+ return
+ new item_reference(machine_loc)
+
/datum/research_upgrades/machinery
name = "Machinery"
behavior = RESEARCH_UPGRADE_CATEGORY // one on the dropdown choices you get
@@ -29,46 +33,52 @@
/datum/research_upgrades/machinery/autodoc
name = "AutoDoc Upgrade"
behavior = RESEARCH_UPGRADE_EXCLUDE_BUY
- item_reference = /obj/item/research_upgrades/autodoc
upgrade_type = ITEM_MACHINERY_UPGRADE
/datum/research_upgrades/machinery/autodoc/internal_bleed
name = "AutoDoc Internal Bleeding Repair"
desc = "A data and instruction set for the AutoDoc, making it capable of rapidly fixing internal bleeding."
- on_init_argument = RESEARCH_UPGRADE_TIER_1
behavior = RESEARCH_UPGRADE_ITEM
value_upgrade = 200
clearance_req = 1
+/datum/research_upgrades/machinery/autodoc/internal_bleed/on_purchase(turf/machine_loc)
+ new /obj/item/research_upgrades/autodoc(machine_loc, RESEARCH_UPGRADE_TIER_1)
+
/datum/research_upgrades/machinery/autodoc/broken_bone
name = "AutoDoc Bone Fracture Repair"
desc = "A data instruction set for the AutoDoc, making it capable of setting fractures and applying bonegel."
- on_init_argument = RESEARCH_UPGRADE_TIER_2
behavior = RESEARCH_UPGRADE_ITEM
value_upgrade = 2000
clearance_req = 3
+/datum/research_upgrades/machinery/autodoc/broken_bone/on_purchase(turf/machine_loc)
+ new /obj/item/research_upgrades/autodoc(machine_loc, RESEARCH_UPGRADE_TIER_2)
+
/datum/research_upgrades/machinery/autodoc/organ_damage
name = "AutoDoc Broken Organ Repair"
desc = "A data and instruction set for the AutoDoc, making it capable of fixing organ damage."
- on_init_argument = RESEARCH_UPGRADE_TIER_3
behavior = RESEARCH_UPGRADE_ITEM
value_upgrade = 1500
clearance_req = 2
+/datum/research_upgrades/machinery/autodoc/organ_damage/on_purchase(turf/machine_loc)
+ new /obj/item/research_upgrades/autodoc(machine_loc, RESEARCH_UPGRADE_TIER_3)
+
/datum/research_upgrades/machinery/autodoc/larva_removal
name = "AutoDoc Embryo Removal"
desc = "Data and instruction set for AutoDoc making it mildly proficient in removing parasites left by unknown organism."
- on_init_argument = RESEARCH_UPGRADE_TIER_4
behavior = RESEARCH_UPGRADE_ITEM
value_upgrade = 4000
clearance_req = 6
+/datum/research_upgrades/machinery/autodoc/larva_removal/on_purchase(turf/machine_loc)
+ new /obj/item/research_upgrades/autodoc(machine_loc, RESEARCH_UPGRADE_TIER_4)
+
/datum/research_upgrades/machinery/sleeper
name = "Sleeper Upgrade"
desc = "Research upgrade for Sleeper system, technology on this disk is used on a sleeper to allow wider spectrum of chemicals to be administered, as well as upgrading dialysis software."
- on_init_argument = RESEARCH_UPGRADE_NOTHING_TO_PASS
behavior = RESEARCH_UPGRADE_ITEM
value_upgrade = 500
item_reference = /obj/item/research_upgrades/sleeper
@@ -83,10 +93,9 @@
name = "Research Credits"
desc = "Sell the data acquired to the nearest Weyland-Yutani Science division team for 8 or 9 points."
value_upgrade = 2000
- item_reference = /obj/item/research_upgrades/credits
- on_init_argument = RESEARCH_UPGRADE_NOTHING_TO_PASS
behavior = RESEARCH_UPGRADE_ITEM
upgrade_type = ITEM_ACCESSORY_UPGRADE
+ item_reference = /obj/item/research_upgrades/credits
change_purchase = 500
maximum_price = 5000
clearance_req = 5
@@ -95,21 +104,20 @@
name = "Laser Scalpel"
desc = "An advanced, robust version of the normal scalpel, allowing it to pierce through thick skin and chitin alike with extreme ease."
value_upgrade = 3000
- item_reference = /obj/item/tool/surgery/scalpel/laser/advanced
- on_init_argument = RESEARCH_UPGRADE_NOTHING_TO_PASS
behavior = RESEARCH_UPGRADE_ITEM
upgrade_type = ITEM_ACCESSORY_UPGRADE
+ item_reference = /obj/item/tool/surgery/scalpel/laser/advanced
clearance_req = 3
/datum/research_upgrades/item/incision_management
name = "Incision Management System"
desc = "A true extension of the surgeon's body, this marvel instantly and completely prepares an incision, allowing for the immediate commencement of therapeutic steps."
value_upgrade = 3000
- item_reference = /obj/item/tool/surgery/scalpel/manager
- on_init_argument = RESEARCH_UPGRADE_NOTHING_TO_PASS
behavior = RESEARCH_UPGRADE_ITEM
upgrade_type = ITEM_ACCESSORY_UPGRADE
clearance_req = 4
+ item_reference = /obj/item/tool/surgery/scalpel/manager
+
/datum/research_upgrades/item/nanosplints
name = "Reinforced Fiber Splints"
@@ -118,11 +126,12 @@
clearance_req = 3
change_purchase = -200
minimum_price = 200
- item_reference = /obj/item/stack/medical/splint/nano/research
- on_init_argument = RESEARCH_UPGRADE_TIER_5 //adjust this to change amount of nanosplints in a stack, cant be higher than five, go change max_amount in the nanosplint itself, then change it.
behavior = RESEARCH_UPGRADE_ITEM
upgrade_type = ITEM_ACCESSORY_UPGRADE
+/datum/research_upgrades/item/nanosplints/on_purchase(turf/machine_loc)
+ new /obj/item/stack/medical/splint/nano/research(machine_loc, 5)//adjust this to change amount of nanosplints in a stack, cant be higher than five, go change max_amount in the nanosplint itself, then change it.
+
/datum/research_upgrades/item/flamer_tank
name = "Upgraded Incinerator Tank"
desc = "An upgraded incinerator tank, with larger capacity and able to handle stronger fuels."
@@ -131,20 +140,19 @@
change_purchase = 100
minimum_price = 100
maximum_price = 1000
- item_reference = /obj/item/ammo_magazine/flamer_tank/custom/upgraded
- on_init_argument = RESEARCH_UPGRADE_NOTHING_TO_PASS
behavior = RESEARCH_UPGRADE_ITEM
upgrade_type = ITEM_ACCESSORY_UPGRADE
+ item_reference = /obj/item/ammo_magazine/flamer_tank/custom/upgraded
/datum/research_upgrades/item/flamer_tank/smoke
name = "Upgraded Incinerator Smoke Tank"
desc = "An upgraded incinerator smoke tank with a larger capacity."
value_upgrade = 100 //not useful enough to be expensive
clearance_req = 1
- item_reference = /obj/item/ammo_magazine/flamer_tank/smoke/upgraded
change_purchase = 50
minimum_price = 100
maximum_price = 500
+ item_reference = /obj/item/ammo_magazine/flamer_tank/smoke/upgraded
/datum/research_upgrades/armor
name = "Armor"
@@ -154,18 +162,15 @@
name = "Universal Translator Plate"
desc = "A uniform-attachable plate capable of translating any unknown language heard by the wearer."
value_upgrade = 2000
- on_init_argument = RESEARCH_UPGRADE_NOTHING_TO_PASS
behavior = RESEARCH_UPGRADE_ITEM
clearance_req = 6
upgrade_type = ITEM_ARMOR_UPGRADE
item_reference = /obj/item/clothing/accessory/health/research_plate/translator
-
/datum/research_upgrades/armor/coagulator
name = "Active Blood Coagulator Plate"
desc = "A uniform-attachable plate capable of coagulating any bleeding wounds the user possesses."
value_upgrade = 1200
- on_init_argument = RESEARCH_UPGRADE_NOTHING_TO_PASS
behavior = RESEARCH_UPGRADE_ITEM
clearance_req = 2
change_purchase = -200
@@ -173,12 +178,12 @@
upgrade_type = ITEM_ARMOR_UPGRADE
item_reference = /obj/item/clothing/accessory/health/research_plate/coagulator
+
/datum/research_upgrades/armor/emergency_injector
name = "Medical Emergency Injector"
desc = "A medical plate with two buttons on the sides and a hefty chemical tank. Attached to a uniform and on a simultaneous press, it injects an emergency dose of medical chemicals much larger than a normal emergency autoinjector. Single time use and is recycled in biomass printer. Features overdose protection."
value_upgrade = 250
clearance_req = 1
- on_init_argument = RESEARCH_UPGRADE_NOTHING_TO_PASS
behavior = RESEARCH_UPGRADE_ITEM
change_purchase = -100
minimum_price = 100
@@ -190,7 +195,6 @@
desc = "A strong trauma plate, able to protect the user from a large amount of bullets. Completely useless against sharp objects."
value_upgrade = 500
clearance_req = 4
- on_init_argument = RESEARCH_UPGRADE_NOTHING_TO_PASS
behavior = RESEARCH_UPGRADE_ITEM
upgrade_type = ITEM_ARMOR_UPGRADE
change_purchase = -50
@@ -202,10 +206,8 @@
desc = "Preservation plate which activates once the user is dead, uses variety of different substances and sensors to slow down the decay and increase the time before the user is permanently dead, due to small tank of preservatives, it needs to be replaced on each death. Extends time to permadeath by around four minutes."
value_upgrade = 500
clearance_req = 4
- on_init_argument = RESEARCH_UPGRADE_NOTHING_TO_PASS
behavior = RESEARCH_UPGRADE_ITEM
upgrade_type = ITEM_ARMOR_UPGRADE
change_purchase = -100
minimum_price = 100
item_reference = /obj/item/clothing/accessory/health/research_plate/anti_decay
-
diff --git a/code/datums/skills/civilian.dm b/code/datums/skills/civilian.dm
index 0ff13ae67225..ff9cadf02913 100644
--- a/code/datums/skills/civilian.dm
+++ b/code/datums/skills/civilian.dm
@@ -20,7 +20,7 @@ CIVILIAN
SKILL_LEADERSHIP = SKILL_LEAD_MASTER,
SKILL_OVERWATCH = SKILL_OVERWATCH_TRAINED,
SKILL_MEDICAL = SKILL_MEDICAL_TRAINED,
- SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
+ SKILL_ENGINEER = SKILL_ENGINEER_NOVICE,
SKILL_VEHICLE = SKILL_VEHICLE_SMALL,
SKILL_INTEL = SKILL_INTEL_EXPERT,
)
@@ -31,7 +31,7 @@ CIVILIAN
SKILL_CQC = SKILL_CQC_DEFAULT,
SKILL_FIREMAN = SKILL_FIREMAN_TRAINED,
SKILL_ENDURANCE = SKILL_ENDURANCE_TRAINED,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI, //The ASRS consoles
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, //The ASRS consoles
SKILL_FIREARMS = SKILL_FIREARMS_CIVILIAN,
SKILL_POLICE = SKILL_POLICE_SKILLED, //The CMB Tradeband Compliance Device
)
@@ -43,7 +43,7 @@ CIVILIAN
SKILL_LEADERSHIP = SKILL_LEAD_MASTER,
SKILL_OVERWATCH = SKILL_OVERWATCH_TRAINED,
SKILL_MEDICAL = SKILL_MEDICAL_TRAINED,
- SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
+ SKILL_ENGINEER = SKILL_ENGINEER_NOVICE,
SKILL_VEHICLE = SKILL_VEHICLE_SMALL,
SKILL_POLICE = SKILL_POLICE_SKILLED,
SKILL_FIREMAN = SKILL_FIREMAN_SKILLED,
@@ -115,7 +115,7 @@ CIVILIAN
SKILL_ENDURANCE = SKILL_ENDURANCE_SURVIVOR,
SKILL_FIREARMS = SKILL_FIREARMS_EXPERT,
SKILL_VEHICLE = SKILL_VEHICLE_SMALL,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
SKILL_POWERLOADER = SKILL_POWERLOADER_MASTER,
)
@@ -131,7 +131,7 @@ CIVILIAN
/datum/skills/civilian/survivor/clf
name = "Survivor CLF"
additional_skills = list(
- SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
+ SKILL_ENGINEER = SKILL_ENGINEER_NOVICE,
SKILL_MEDICAL = SKILL_MEDICAL_TRAINED,
SKILL_VEHICLE = SKILL_VEHICLE_SMALL,
SKILL_FIREMAN = SKILL_FIREMAN_SKILLED,
@@ -158,7 +158,7 @@ CIVILIAN
name = "Survivor Miner"
additional_skills = list(
SKILL_FIREMAN = SKILL_FIREMAN_TRAINED,
- SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
+ SKILL_ENGINEER = SKILL_ENGINEER_NOVICE,
SKILL_POWERLOADER = SKILL_POWERLOADER_MASTER,
SKILL_VEHICLE = SKILL_VEHICLE_SMALL,
)
@@ -167,7 +167,7 @@ CIVILIAN
name = "Survivor Trucker"
additional_skills = list(
SKILL_FIREMAN = SKILL_FIREMAN_TRAINED,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
SKILL_VEHICLE = SKILL_VEHICLE_CREWMAN,
)
@@ -176,7 +176,7 @@ CIVILIAN
name = "Survivor Engineer"
additional_skills = list(
SKILL_FIREMAN = SKILL_FIREMAN_TRAINED,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
SKILL_POWERLOADER = SKILL_POWERLOADER_MASTER,
SKILL_VEHICLE = SKILL_VEHICLE_SMALL,
@@ -192,7 +192,7 @@ CIVILIAN
/datum/skills/civilian/survivor/marshal
name = "Survivor Marshal"
skills = list(
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_MELEE_WEAPONS = SKILL_MELEE_TRAINED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_TRAINED,
SKILL_MEDICAL = SKILL_MEDICAL_TRAINED,
@@ -201,7 +201,7 @@ CIVILIAN
SKILL_FIREARMS = SKILL_FIREARMS_TRAINED,
SKILL_POLICE = SKILL_POLICE_SKILLED,
SKILL_FIREMAN = SKILL_FIREMAN_SKILLED,
- SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
+ SKILL_ENGINEER = SKILL_ENGINEER_NOVICE,
SKILL_CQC = SKILL_CQC_SKILLED,
SKILL_FIREARMS = SKILL_FIREARMS_TRAINED,
)
diff --git a/code/datums/skills/clf.dm b/code/datums/skills/clf.dm
index 88aa14a41f79..64a8864d3c51 100644
--- a/code/datums/skills/clf.dm
+++ b/code/datums/skills/clf.dm
@@ -12,7 +12,7 @@ COLONIAL LIBERATION FRONT
SKILL_POLICE = SKILL_POLICE_SKILLED,
SKILL_FIREMAN = SKILL_FIREMAN_TRAINED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_TRAINED,
- SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
+ SKILL_ENGINEER = SKILL_ENGINEER_NOVICE,
SKILL_MEDICAL = SKILL_MEDICAL_TRAINED,
SKILL_VEHICLE = SKILL_VEHICLE_SMALL,
SKILL_ENDURANCE = SKILL_ENDURANCE_WEAK,
@@ -24,7 +24,7 @@ COLONIAL LIBERATION FRONT
skills = list(
SKILL_FIREMAN = SKILL_FIREMAN_TRAINED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_MEDICAL = SKILL_MEDICAL_TRAINED,
SKILL_POWERLOADER = SKILL_POWERLOADER_TRAINED,
SKILL_VEHICLE = SKILL_VEHICLE_SMALL,
@@ -48,7 +48,7 @@ COLONIAL LIBERATION FRONT
skills = list(
SKILL_MEDICAL = SKILL_MEDICAL_TRAINED,
SKILL_CQC = SKILL_CQC_TRAINED,
- SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, //to use c4 in demo set.
+ SKILL_ENGINEER = SKILL_ENGINEER_NOVICE, //to use c4 in demo set.
SKILL_LEADERSHIP = SKILL_LEAD_TRAINED,
SKILL_SPEC_WEAPONS = SKILL_SPEC_ALL,
SKILL_ENDURANCE = SKILL_ENDURANCE_TRAINED,
@@ -60,7 +60,7 @@ COLONIAL LIBERATION FRONT
name = "CLF Leader"
skills = list(
SKILL_FIREARMS = SKILL_FIREARMS_TRAINED,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI, // to use their C4
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, // to use their C4
SKILL_CQC = SKILL_CQC_SKILLED,
SKILL_LEADERSHIP = SKILL_LEAD_EXPERT,
SKILL_OVERWATCH = SKILL_OVERWATCH_TRAINED,
@@ -78,7 +78,7 @@ COLONIAL LIBERATION FRONT
name = "CLF Cell Commander"
skills = list(
SKILL_FIREARMS = SKILL_FIREARMS_EXPERT,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_CQC = SKILL_CQC_SKILLED,
SKILL_LEADERSHIP = SKILL_LEAD_MASTER,
SKILL_OVERWATCH = SKILL_OVERWATCH_TRAINED,
diff --git a/code/datums/skills/cmb.dm b/code/datums/skills/cmb.dm
index b29a4c314567..8fa7ca4dd892 100644
--- a/code/datums/skills/cmb.dm
+++ b/code/datums/skills/cmb.dm
@@ -26,7 +26,7 @@ COLONIAL MARSHALS
SKILL_LEADERSHIP = SKILL_LEAD_MASTER,
SKILL_OVERWATCH = SKILL_OVERWATCH_TRAINED,
SKILL_MEDICAL = SKILL_MEDICAL_MEDIC,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_FIREMAN = SKILL_FIREMAN_MASTER,
SKILL_FIREARMS = SKILL_FIREARMS_MAX,
SKILL_MELEE_WEAPONS = SKILL_MELEE_TRAINED,
diff --git a/code/datums/skills/commando.dm b/code/datums/skills/commando.dm
index ed5e5ee086e4..5133cb0e55ea 100644
--- a/code/datums/skills/commando.dm
+++ b/code/datums/skills/commando.dm
@@ -9,7 +9,7 @@ SPEC-OPS
skills = list(
SKILL_CQC = SKILL_CQC_EXPERT,
SKILL_FIREMAN = SKILL_FIREMAN_SKILLED,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
SKILL_FIREARMS = SKILL_FIREARMS_EXPERT,
SKILL_MEDICAL = SKILL_MEDICAL_TRAINED,
@@ -24,7 +24,7 @@ SPEC-OPS
skills = list(
SKILL_CQC = SKILL_CQC_EXPERT,
SKILL_FIREMAN = SKILL_FIREMAN_SKILLED,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
SKILL_FIREARMS = SKILL_FIREARMS_EXPERT,
SKILL_MEDICAL = SKILL_MEDICAL_MEDIC,
@@ -40,7 +40,7 @@ SPEC-OPS
skills = list(
SKILL_CQC = SKILL_CQC_EXPERT,
SKILL_FIREMAN = SKILL_FIREMAN_SKILLED,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
SKILL_FIREARMS = SKILL_FIREARMS_EXPERT,
SKILL_LEADERSHIP = SKILL_LEAD_TRAINED,
@@ -56,7 +56,7 @@ SPEC-OPS
skills = list(
SKILL_CQC = SKILL_CQC_MASTER,
SKILL_FIREMAN = SKILL_FIREMAN_SKILLED,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
SKILL_FIREARMS = SKILL_FIREARMS_EXPERT,
SKILL_MEDICAL = SKILL_MEDICAL_MEDIC,
@@ -71,7 +71,7 @@ SPEC-OPS
skills = list(
SKILL_CQC = SKILL_CQC_MASTER,
SKILL_FIREMAN = SKILL_FIREMAN_MASTER,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
SKILL_FIREARMS = SKILL_FIREARMS_EXPERT,
SKILL_LEADERSHIP = SKILL_LEAD_TRAINED,
@@ -87,7 +87,7 @@ SPEC-OPS
skills = list(
SKILL_CQC = SKILL_CQC_MASTER,
SKILL_FIREMAN = SKILL_FIREMAN_MASTER,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
SKILL_FIREARMS = SKILL_FIREARMS_EXPERT,
SKILL_LEADERSHIP = SKILL_LEAD_EXPERT,
@@ -105,7 +105,7 @@ SPEC-OPS
SKILL_CQC = SKILL_CQC_TRAINED,
SKILL_FIREMAN = SKILL_FIREMAN_TRAINED,
SKILL_FIREARMS = SKILL_FIREARMS_EXPERT,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
SKILL_MEDICAL = SKILL_MEDICAL_TRAINED,
SKILL_POWERLOADER = SKILL_POWERLOADER_MASTER,
diff --git a/code/datums/skills/contractor.dm b/code/datums/skills/contractor.dm
index 183e95c941f5..5e079e5664d4 100644
--- a/code/datums/skills/contractor.dm
+++ b/code/datums/skills/contractor.dm
@@ -7,7 +7,7 @@ CONTRACTORS
name = "Contractor Standard"
skills = list(
SKILL_CQC = SKILL_CQC_TRAINED,
- SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
+ SKILL_ENGINEER = SKILL_ENGINEER_NOVICE,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_TRAINED,
SKILL_FIREARMS = SKILL_FIREARMS_MAX,
SKILL_POLICE = SKILL_POLICE_SKILLED,
@@ -22,7 +22,7 @@ CONTRACTORS
/datum/skills/contractor/leader
name = "Contractor Leader"
skills = list(
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_FIREARMS = SKILL_FIREARMS_MAX,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
SKILL_LEADERSHIP = SKILL_LEAD_MASTER,
@@ -45,7 +45,7 @@ CONTRACTORS
SKILL_POLICE = SKILL_POLICE_SKILLED,
SKILL_FIREMAN = SKILL_FIREMAN_SKILLED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_TRAINED,
- SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
+ SKILL_ENGINEER = SKILL_ENGINEER_NOVICE,
SKILL_MEDICAL = SKILL_MEDICAL_DOCTOR,
SKILL_SURGERY = SKILL_SURGERY_TRAINED,
SKILL_VEHICLE = SKILL_VEHICLE_LARGE,
@@ -76,7 +76,7 @@ CONTRACTORS
name = "Contractor Machinegunner"
skills = list(
SKILL_CQC = SKILL_CQC_TRAINED,
- SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
+ SKILL_ENGINEER = SKILL_ENGINEER_NOVICE,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_TRAINED,
SKILL_FIREARMS = SKILL_FIREARMS_MAX,
SKILL_POLICE = SKILL_POLICE_SKILLED,
diff --git a/code/datums/skills/dutch.dm b/code/datums/skills/dutch.dm
index 4f19233e66d0..ec550f8e2bdf 100644
--- a/code/datums/skills/dutch.dm
+++ b/code/datums/skills/dutch.dm
@@ -4,7 +4,7 @@
SKILL_CQC = SKILL_CQC_MASTER,
SKILL_FIREMAN = SKILL_FIREMAN_MAX,
SKILL_MELEE_WEAPONS = SKILL_MELEE_MAX,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
SKILL_FIREARMS = SKILL_FIREARMS_EXPERT,
SKILL_LEADERSHIP = SKILL_LEAD_MASTER,
@@ -20,7 +20,7 @@
name = "Dutch's Dozen Mercenary"
skills = list(
SKILL_CQC = SKILL_CQC_TRAINED,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
SKILL_FIREARMS = SKILL_FIREARMS_EXPERT,
SKILL_MEDICAL = SKILL_MEDICAL_TRAINED,
@@ -35,7 +35,7 @@
name = "Dutch's Dozen Medic"
skills = list(
SKILL_CQC = SKILL_CQC_TRAINED,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_TRAINED,
SKILL_FIREARMS = SKILL_FIREARMS_EXPERT,
SKILL_MEDICAL = SKILL_MEDICAL_DOCTOR,
diff --git a/code/datums/skills/forecon.dm b/code/datums/skills/forecon.dm
index 724a49ee98ca..aef187ce05dd 100644
--- a/code/datums/skills/forecon.dm
+++ b/code/datums/skills/forecon.dm
@@ -8,7 +8,7 @@ MILITARY SURVIVORS
/datum/skills/military/survivor/forecon_standard
name = "Reconnaissance Rifleman"
skills = list(
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_DEFAULT,
SKILL_MELEE_WEAPONS = SKILL_MELEE_TRAINED,
SKILL_CQC = SKILL_CQC_TRAINED,
@@ -24,7 +24,7 @@ MILITARY SURVIVORS
/datum/skills/military/survivor/forecon_techician
name = "Reconnaissance Support Technician"
skills = list(
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
SKILL_MELEE_WEAPONS = SKILL_MELEE_TRAINED,
SKILL_CQC = SKILL_CQC_TRAINED,
@@ -41,7 +41,7 @@ MILITARY SURVIVORS
/datum/skills/military/survivor/forecon_marksman
name = "Reconnaissance Designated Marksman"
skills = list(
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_DEFAULT,
SKILL_MELEE_WEAPONS = SKILL_MELEE_TRAINED,
SKILL_CQC = SKILL_CQC_TRAINED,
@@ -58,7 +58,7 @@ MILITARY SURVIVORS
/datum/skills/military/survivor/forecon_smartgunner
name = "Reconnaissance Smartgunner"
skills = list(
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_DEFAULT,
SKILL_MELEE_WEAPONS = SKILL_MELEE_TRAINED,
SKILL_CQC = SKILL_CQC_TRAINED,
@@ -75,7 +75,7 @@ MILITARY SURVIVORS
/datum/skills/military/survivor/forecon_sniper
name = "Reconnaissance Sniper"
skills = list(
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_DEFAULT,
SKILL_MELEE_WEAPONS = SKILL_MELEE_TRAINED,
SKILL_CQC = SKILL_CQC_TRAINED,
@@ -92,7 +92,7 @@ MILITARY SURVIVORS
/datum/skills/military/survivor/forecon_squad_leader
name = "Reconnaissance Squad Leader"
skills = list(
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_DEFAULT,
SKILL_MELEE_WEAPONS = SKILL_MELEE_TRAINED,
SKILL_CQC = SKILL_CQC_SKILLED,
diff --git a/code/datums/skills/freelancer.dm b/code/datums/skills/freelancer.dm
index 09df9f32369c..cf7baa15532b 100644
--- a/code/datums/skills/freelancer.dm
+++ b/code/datums/skills/freelancer.dm
@@ -11,7 +11,7 @@ FREELANCERS
skills = list(
SKILL_FIREMAN = SKILL_FIREMAN_TRAINED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_ENDURANCE = SKILL_ENDURANCE_TRAINED,
)
@@ -20,7 +20,7 @@ FREELANCERS
skills = list(
SKILL_FIREMAN = SKILL_FIREMAN_TRAINED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_ENDURANCE = SKILL_ENDURANCE_TRAINED,
SKILL_MEDICAL = SKILL_MEDICAL_MEDIC,
SKILL_SURGERY = SKILL_SURGERY_TRAINED,
@@ -31,7 +31,7 @@ FREELANCERS
skills = list(
SKILL_FIREMAN = SKILL_FIREMAN_SKILLED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_ENDURANCE = SKILL_ENDURANCE_TRAINED,
SKILL_MEDICAL = SKILL_MEDICAL_MEDIC,
SKILL_CQC = SKILL_CQC_TRAINED,
diff --git a/code/datums/skills/mercenary.dm b/code/datums/skills/mercenary.dm
index 1dc18eaa2fbc..35a6378f51a4 100644
--- a/code/datums/skills/mercenary.dm
+++ b/code/datums/skills/mercenary.dm
@@ -3,7 +3,7 @@
skills = list(
SKILL_CQC = SKILL_CQC_SKILLED,
SKILL_FIREMAN = SKILL_FIREMAN_SKILLED,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
SKILL_FIREARMS = SKILL_FIREARMS_EXPERT,
SKILL_MEDICAL = SKILL_MEDICAL_TRAINED,
@@ -16,7 +16,7 @@
skills = list(
SKILL_CQC = SKILL_CQC_SKILLED,
SKILL_FIREMAN = SKILL_FIREMAN_SKILLED,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
SKILL_FIREARMS = SKILL_FIREARMS_MAX,
SKILL_MEDICAL = SKILL_MEDICAL_TRAINED,
@@ -31,7 +31,7 @@
skills = list(
SKILL_CQC = SKILL_CQC_SKILLED,
SKILL_FIREMAN = SKILL_FIREMAN_SKILLED,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
SKILL_FIREARMS = SKILL_FIREARMS_MAX,
SKILL_MEDICAL = SKILL_MEDICAL_MASTER,
@@ -62,7 +62,7 @@
skills = list(
SKILL_CQC = SKILL_CQC_SKILLED,
SKILL_FIREMAN = SKILL_FIREMAN_SKILLED,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
SKILL_FIREARMS = SKILL_FIREARMS_MAX,
SKILL_MEDICAL = SKILL_MEDICAL_TRAINED,
@@ -78,7 +78,7 @@
skills = list(
SKILL_CQC = SKILL_CQC_SKILLED,
SKILL_FIREMAN = SKILL_FIREMAN_SKILLED,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
SKILL_FIREARMS = SKILL_FIREARMS_MAX,
SKILL_LEADERSHIP = SKILL_LEAD_MASTER,
diff --git a/code/datums/skills/misc.dm b/code/datums/skills/misc.dm
index 0f0ca657f995..204890685b91 100644
--- a/code/datums/skills/misc.dm
+++ b/code/datums/skills/misc.dm
@@ -11,7 +11,7 @@ MISCELLANEOUS
SKILL_LEADERSHIP = SKILL_LEAD_EXPERT,
SKILL_OVERWATCH = SKILL_OVERWATCH_TRAINED,
SKILL_POWERLOADER = SKILL_POWERLOADER_MASTER,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_FIREMAN = SKILL_FIREMAN_TRAINED,
SKILL_LEADERSHIP = SKILL_LEAD_TRAINED,
SKILL_JTAC = SKILL_JTAC_EXPERT,
@@ -23,7 +23,7 @@ MISCELLANEOUS
SKILL_CQC = SKILL_CQC_MASTER,
SKILL_MELEE_WEAPONS = SKILL_MELEE_SUPER,
SKILL_ENDURANCE = SKILL_ENDURANCE_MASTER,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
SKILL_MEDICAL = SKILL_MEDICAL_MEDIC,
SKILL_SURGERY = SKILL_SURGERY_EXPERT,
@@ -52,7 +52,7 @@ MISCELLANEOUS
name = "Souto Man"
skills = list(
SKILL_CQC = SKILL_CQC_MASTER,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
SKILL_FIREARMS = SKILL_FIREARMS_EXPERT,
SKILL_MEDICAL = SKILL_MEDICAL_TRAINED,
diff --git a/code/datums/skills/pmc.dm b/code/datums/skills/pmc.dm
index df7027e2a7ab..1860157c0a54 100644
--- a/code/datums/skills/pmc.dm
+++ b/code/datums/skills/pmc.dm
@@ -14,7 +14,7 @@ Private Military Contractors
SKILL_POLICE = SKILL_POLICE_SKILLED,
SKILL_FIREMAN = SKILL_FIREMAN_SKILLED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_ENDURANCE = SKILL_ENDURANCE_MASTER,
)
@@ -26,7 +26,7 @@ Private Military Contractors
SKILL_POLICE = SKILL_POLICE_SKILLED,
SKILL_FIREMAN = SKILL_FIREMAN_SKILLED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_MEDICAL = SKILL_MEDICAL_MEDIC,
SKILL_SURGERY = SKILL_SURGERY_NOVICE,
SKILL_ENDURANCE = SKILL_ENDURANCE_MASTER,
@@ -40,7 +40,7 @@ Private Military Contractors
SKILL_POLICE = SKILL_POLICE_SKILLED,
SKILL_FIREMAN = SKILL_FIREMAN_SKILLED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_MEDICAL = SKILL_MEDICAL_MEDIC,
SKILL_ENDURANCE = SKILL_ENDURANCE_MASTER,
SKILL_RESEARCH = SKILL_RESEARCH_TRAINED,
@@ -54,7 +54,7 @@ Private Military Contractors
SKILL_POLICE = SKILL_POLICE_SKILLED,
SKILL_FIREMAN = SKILL_FIREMAN_SKILLED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_SPEC_WEAPONS = SKILL_SPEC_SMARTGUN,
SKILL_ENDURANCE = SKILL_ENDURANCE_MASTER,
SKILL_JTAC = SKILL_JTAC_BEGINNER,
@@ -68,7 +68,7 @@ Private Military Contractors
SKILL_POLICE = SKILL_POLICE_SKILLED,
SKILL_FIREMAN = SKILL_FIREMAN_SKILLED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_CQC = SKILL_CQC_TRAINED,
SKILL_SPEC_WEAPONS = SKILL_SPEC_ALL,
SKILL_MELEE_WEAPONS = SKILL_MELEE_TRAINED,
@@ -83,7 +83,7 @@ Private Military Contractors
SKILL_POLICE = SKILL_POLICE_SKILLED,
SKILL_FIREMAN = SKILL_FIREMAN_SKILLED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_CQC = SKILL_CQC_SKILLED,
SKILL_LEADERSHIP = SKILL_LEAD_TRAINED,
SKILL_OVERWATCH = SKILL_OVERWATCH_TRAINED,
@@ -99,7 +99,7 @@ Private Military Contractors
SKILL_POLICE = SKILL_POLICE_SKILLED,
SKILL_FIREMAN = SKILL_FIREMAN_SKILLED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_CQC = SKILL_CQC_SKILLED,
SKILL_LEADERSHIP = SKILL_LEAD_TRAINED,
SKILL_OVERWATCH = SKILL_OVERWATCH_TRAINED,
@@ -116,7 +116,7 @@ Private Military Contractors
SKILL_POLICE = SKILL_POLICE_SKILLED,
SKILL_FIREMAN = SKILL_FIREMAN_SKILLED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_ENDURANCE = SKILL_ENDURANCE_MASTER,
SKILL_LEADERSHIP = SKILL_LEAD_TRAINED,
SKILL_JTAC = SKILL_JTAC_TRAINED,
@@ -131,7 +131,7 @@ Private Military Contractors
SKILL_POLICE = SKILL_POLICE_SKILLED,
SKILL_FIREMAN = SKILL_FIREMAN_SKILLED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_TRAINED,
- SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
+ SKILL_ENGINEER = SKILL_ENGINEER_NOVICE,
SKILL_MEDICAL = SKILL_MEDICAL_DOCTOR,
SKILL_SURGERY = SKILL_SURGERY_EXPERT,
SKILL_ENDURANCE = SKILL_ENDURANCE_MASTER, //trained in medicine more than combat
@@ -160,7 +160,7 @@ Private Military Contractors
SKILL_POLICE = SKILL_POLICE_SKILLED,
SKILL_FIREMAN = SKILL_FIREMAN_SKILLED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_MEDICAL = SKILL_MEDICAL_MEDIC,
SKILL_CQC = SKILL_CQC_TRAINED,
SKILL_LEADERSHIP = SKILL_LEAD_MASTER,
diff --git a/code/datums/skills/rmc.dm b/code/datums/skills/rmc.dm
index 89aa39b154ad..4385253e9a28 100644
--- a/code/datums/skills/rmc.dm
+++ b/code/datums/skills/rmc.dm
@@ -14,7 +14,7 @@ Royal Marines Commando
SKILL_POLICE = SKILL_POLICE_SKILLED,
SKILL_FIREMAN = SKILL_FIREMAN_SKILLED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_ENDURANCE = SKILL_ENDURANCE_MASTER,
SKILL_MEDICAL = SKILL_MEDICAL_MEDIC,
SKILL_SURGERY = SKILL_SURGERY_NOVICE,
@@ -28,7 +28,7 @@ Royal Marines Commando
SKILL_POLICE = SKILL_POLICE_SKILLED,
SKILL_FIREMAN = SKILL_FIREMAN_SKILLED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_ENDURANCE = SKILL_ENDURANCE_MASTER,
SKILL_MEDICAL = SKILL_MEDICAL_MEDIC,
SKILL_SURGERY = SKILL_SURGERY_NOVICE,
@@ -44,7 +44,7 @@ Royal Marines Commando
SKILL_POLICE = SKILL_POLICE_SKILLED,
SKILL_FIREMAN = SKILL_FIREMAN_SKILLED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_ENDURANCE = SKILL_ENDURANCE_MASTER,
SKILL_MEDICAL = SKILL_MEDICAL_MEDIC,
SKILL_SURGERY = SKILL_SURGERY_NOVICE,
@@ -61,7 +61,7 @@ Royal Marines Commando
SKILL_POLICE = SKILL_POLICE_SKILLED,
SKILL_FIREMAN = SKILL_FIREMAN_SKILLED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_ENDURANCE = SKILL_ENDURANCE_MASTER,
SKILL_MEDICAL = SKILL_MEDICAL_MEDIC,
SKILL_SURGERY = SKILL_SURGERY_NOVICE,
diff --git a/code/datums/skills/synthetic.dm b/code/datums/skills/synthetic.dm
index 3925dd9605b3..c4d7296dee5d 100644
--- a/code/datums/skills/synthetic.dm
+++ b/code/datums/skills/synthetic.dm
@@ -33,7 +33,7 @@ SYNTHETIC
name = SYNTH_COLONY
skills = list(
SKILL_CQC = SKILL_CQC_EXPERT,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
SKILL_FIREARMS = SKILL_FIREARMS_EXPERT,
SKILL_SPEC_WEAPONS = SKILL_SPEC_ALL,
diff --git a/code/datums/skills/upp.dm b/code/datums/skills/upp.dm
index e367372719d6..c292251b9ab9 100644
--- a/code/datums/skills/upp.dm
+++ b/code/datums/skills/upp.dm
@@ -10,7 +10,7 @@ UNITED PROGRESSIVE PEOPLES
name = "UPP Private"
skills = list(
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_TRAINED,
- SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
+ SKILL_ENGINEER = SKILL_ENGINEER_NOVICE,
SKILL_MEDICAL = SKILL_MEDICAL_TRAINED,
SKILL_ENDURANCE = SKILL_ENDURANCE_TRAINED,
SKILL_CQC = SKILL_CQC_DEFAULT,
@@ -22,7 +22,7 @@ UNITED PROGRESSIVE PEOPLES
name = "UPP Sapper"
skills = list(
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_MEDICAL = SKILL_MEDICAL_TRAINED,
SKILL_ENDURANCE = SKILL_ENDURANCE_TRAINED,
SKILL_CQC = SKILL_CQC_DEFAULT,
@@ -45,7 +45,7 @@ UNITED PROGRESSIVE PEOPLES
name = "UPP Specialist"
skills = list(
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_TRAINED,
- SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
+ SKILL_ENGINEER = SKILL_ENGINEER_NOVICE,
SKILL_ENDURANCE = SKILL_ENDURANCE_MASTER,
SKILL_CQC = SKILL_CQC_TRAINED,
SKILL_FIREMAN = SKILL_FIREMAN_TRAINED,
@@ -60,7 +60,7 @@ UNITED PROGRESSIVE PEOPLES
name = "UPP Squad Leader"
skills = list(
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_ENDURANCE = SKILL_ENDURANCE_MASTER,
SKILL_CQC = SKILL_CQC_TRAINED,
SKILL_FIREMAN = SKILL_FIREMAN_SKILLED,
@@ -78,9 +78,37 @@ UNITED PROGRESSIVE PEOPLES
SKILL_FIREMAN = SKILL_FIREMAN_EXPERT,
SKILL_ENDURANCE = SKILL_ENDURANCE_MASTER,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_TRAINED,
+ SKILL_ENGINEER = SKILL_ENGINEER_NOVICE,
+ SKILL_MEDICAL = SKILL_MEDICAL_TRAINED,
+ SKILL_FIREARMS = SKILL_FIREARMS_EXPERT,
+ )
+
+/datum/skills/upp/logistics_technician
+ name = "UPP Logistics Technician"
+ skills = list(
+ SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_MEDICAL = SKILL_MEDICAL_TRAINED,
+ SKILL_ENDURANCE = SKILL_ENDURANCE_TRAINED,
+ SKILL_FIREMAN = SKILL_FIREMAN_TRAINED,
SKILL_FIREARMS = SKILL_FIREARMS_EXPERT,
+ SKILL_POWERLOADER = SKILL_POWERLOADER_MASTER,
+ )
+
+/datum/skills/upp/commissar
+ name = "UPP Starshy Politruk"
+ skills = list(
+ SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_NOVICE,
+ SKILL_MEDICAL = SKILL_MEDICAL_TRAINED,
+ SKILL_ENDURANCE = SKILL_ENDURANCE_TRAINED,
+ SKILL_FIREMAN = SKILL_FIREMAN_TRAINED,
+ SKILL_FIREARMS = SKILL_FIREARMS_EXPERT,
+ SKILL_POWERLOADER = SKILL_POWERLOADER_MASTER,
+ SKILL_VEHICLE = SKILL_VEHICLE_SMALL,
+ SKILL_LEADERSHIP = SKILL_LEAD_MASTER,
+ SKILL_OVERWATCH = SKILL_OVERWATCH_TRAINED,
+ SKILL_INTEL = SKILL_INTEL_EXPERT,
)
/datum/skills/upp/officer
@@ -93,7 +121,7 @@ UNITED PROGRESSIVE PEOPLES
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
SKILL_LEADERSHIP = SKILL_LEAD_EXPERT,
SKILL_OVERWATCH = SKILL_OVERWATCH_TRAINED,
- SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
+ SKILL_ENGINEER = SKILL_ENGINEER_NOVICE,
SKILL_MEDICAL = SKILL_MEDICAL_MEDIC,
SKILL_FIREARMS = SKILL_FIREARMS_EXPERT,
SKILL_VEHICLE = SKILL_VEHICLE_SMALL,
@@ -109,7 +137,7 @@ UNITED PROGRESSIVE PEOPLES
SKILL_LEADERSHIP = SKILL_LEAD_MASTER,
SKILL_OVERWATCH = SKILL_OVERWATCH_TRAINED,
SKILL_ENDURANCE = SKILL_ENDURANCE_MASTER,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
SKILL_MEDICAL = SKILL_MEDICAL_MEDIC,
SKILL_FIREARMS = SKILL_FIREARMS_EXPERT,
@@ -126,7 +154,7 @@ UNITED PROGRESSIVE PEOPLES
SKILL_LEADERSHIP = SKILL_LEAD_MASTER,
SKILL_OVERWATCH = SKILL_OVERWATCH_TRAINED,
SKILL_ENDURANCE = SKILL_ENDURANCE_MASTER,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
SKILL_MEDICAL = SKILL_MEDICAL_MEDIC,
SKILL_FIREARMS = SKILL_FIREARMS_EXPERT,
@@ -147,7 +175,7 @@ UNITED PROGRESSIVE PEOPLES
name = "UPP Private"
skills = list(
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_TRAINED,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_MEDICAL = SKILL_MEDICAL_TRAINED,
SKILL_ENDURANCE = SKILL_ENDURANCE_TRAINED,
SKILL_CQC = SKILL_CQC_TRAINED,
@@ -161,7 +189,7 @@ UNITED PROGRESSIVE PEOPLES
name = "UPP Sapper"
skills = list(
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_MEDICAL = SKILL_MEDICAL_TRAINED,
SKILL_ENDURANCE = SKILL_ENDURANCE_TRAINED,
SKILL_CQC = SKILL_CQC_TRAINED,
@@ -176,7 +204,7 @@ UNITED PROGRESSIVE PEOPLES
name = "UPP Medic"
skills = list(
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_TRAINED,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_MEDICAL = SKILL_MEDICAL_DOCTOR,
SKILL_SURGERY = SKILL_SURGERY_TRAINED,
SKILL_ENDURANCE = SKILL_ENDURANCE_TRAINED,
@@ -192,7 +220,7 @@ UNITED PROGRESSIVE PEOPLES
name = "UPP Specialist"
skills = list(
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_TRAINED,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_MEDICAL = SKILL_MEDICAL_TRAINED,
SKILL_ENDURANCE = SKILL_ENDURANCE_TRAINED,
SKILL_CQC = SKILL_CQC_TRAINED,
@@ -210,7 +238,7 @@ UNITED PROGRESSIVE PEOPLES
name = "UPP Squad Leader"
skills = list(
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_ENDURANCE = SKILL_ENDURANCE_TRAINED,
SKILL_SPEC_WEAPONS = SKILL_SPEC_UPP,
SKILL_FIREARMS = SKILL_FIREARMS_TRAINED,
diff --git a/code/datums/skills/uscm.dm b/code/datums/skills/uscm.dm
index f694e8789dcd..01866b82a9d1 100644
--- a/code/datums/skills/uscm.dm
+++ b/code/datums/skills/uscm.dm
@@ -12,7 +12,7 @@ United States Colonial Marines
name = "Crafty Private"
skills = list(
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_TRAINED,
- SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
+ SKILL_ENGINEER = SKILL_ENGINEER_NOVICE,
)
/datum/skills/combat_medic
@@ -28,7 +28,7 @@ United States Colonial Marines
name = "Crafty Combat Medic"
skills = list(
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_TRAINED,
- SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
+ SKILL_ENGINEER = SKILL_ENGINEER_NOVICE,
)
/datum/skills/combat_engineer
@@ -55,7 +55,7 @@ United States Colonial Marines
SKILL_FIREMAN = SKILL_FIREMAN_TRAINED,
SKILL_CQC = SKILL_CQC_TRAINED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_TRAINED,
- SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, //to use c4 in demo set.
+ SKILL_ENGINEER = SKILL_ENGINEER_NOVICE, //to use c4 in demo set.
SKILL_SPEC_WEAPONS = SKILL_SPEC_TRAINED,
SKILL_MELEE_WEAPONS = SKILL_MELEE_TRAINED,
SKILL_ENDURANCE = SKILL_ENDURANCE_TRAINED,
@@ -66,7 +66,7 @@ United States Colonial Marines
name = "Fireteam Leader"
skills = list(
SKILL_FIREMAN = SKILL_FIREMAN_TRAINED,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
SKILL_JTAC = SKILL_JTAC_EXPERT,
)
@@ -77,7 +77,7 @@ United States Colonial Marines
SKILL_CQC = SKILL_CQC_TRAINED,
SKILL_FIREMAN = SKILL_FIREMAN_TRAINED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_LEADERSHIP = SKILL_LEAD_TRAINED,
SKILL_MEDICAL = SKILL_MEDICAL_TRAINED,
SKILL_ENDURANCE = SKILL_ENDURANCE_TRAINED,
@@ -90,7 +90,7 @@ United States Colonial Marines
name = "Intelligence Officer"
skills = list(
SKILL_FIREMAN = SKILL_FIREMAN_TRAINED,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_LEADERSHIP = SKILL_LEAD_TRAINED,
SKILL_OVERWATCH = SKILL_OVERWATCH_TRAINED,
SKILL_CQC = SKILL_CQC_TRAINED,
@@ -157,7 +157,7 @@ MILITARY NONCOMBATANT
SKILL_MEDICAL = SKILL_MEDICAL_MEDIC,
SKILL_SURGERY = SKILL_SURGERY_NOVICE,
SKILL_JTAC = SKILL_JTAC_TRAINED,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
)
/datum/skills/MP
@@ -180,7 +180,7 @@ MILITARY NONCOMBATANT
SKILL_ENDURANCE = SKILL_ENDURANCE_TRAINED,
SKILL_MEDICAL = SKILL_MEDICAL_TRAINED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
)
/datum/skills/provost
@@ -216,7 +216,7 @@ MILITARY NONCOMBATANT
name = "Mess Technician"
skills = list(
SKILL_FIREARMS = SKILL_FIREARMS_EXPERT, // need to hunt food somehow
- SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
+ SKILL_ENGINEER = SKILL_ENGINEER_NOVICE,
SKILL_FIREMAN = SKILL_FIREMAN_TRAINED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_TRAINED,
SKILL_DOMESTIC = SKILL_DOMESTIC_MASTER
@@ -240,7 +240,7 @@ COMMAND STAFF
name = "General"
skills = list(
SKILL_CQC = SKILL_CQC_TRAINED,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
SKILL_LEADERSHIP = SKILL_LEAD_MASTER,
SKILL_OVERWATCH = SKILL_OVERWATCH_TRAINED,
@@ -259,7 +259,7 @@ COMMAND STAFF
/datum/skills/commander
name = "Commanding Officer"
skills = list(
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
SKILL_LEADERSHIP = SKILL_LEAD_MASTER,
SKILL_OVERWATCH = SKILL_OVERWATCH_TRAINED,
@@ -282,13 +282,13 @@ COMMAND STAFF
/datum/skills/XO
name = "Executive Officer"
skills = list(
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI, //to fix CIC apc.
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, //to fix CIC apc.
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
SKILL_LEADERSHIP = SKILL_LEAD_MASTER,
SKILL_OVERWATCH = SKILL_OVERWATCH_TRAINED,
SKILL_MEDICAL = SKILL_MEDICAL_DOCTOR,
SKILL_SURGERY = SKILL_SURGERY_NOVICE,
- SKILL_POLICE = SKILL_POLICE_FLASH,
+ SKILL_POLICE = SKILL_POLICE_SKILLED,
SKILL_VEHICLE = SKILL_VEHICLE_SMALL,
SKILL_FIREMAN = SKILL_FIREMAN_SKILLED,
SKILL_CQC = SKILL_CQC_SKILLED,
@@ -303,7 +303,7 @@ COMMAND STAFF
/datum/skills/SO
name = "Staff Officer"
skills = list(
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
SKILL_LEADERSHIP = SKILL_LEAD_EXPERT,
SKILL_OVERWATCH = SKILL_OVERWATCH_TRAINED,
@@ -322,7 +322,7 @@ COMMAND STAFF
name = "Senior Enlisted Advisor"
skills = list(
SKILL_CQC = SKILL_CQC_SKILLED,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
SKILL_FIREARMS = SKILL_FIREARMS_EXPERT,
SKILL_LEADERSHIP = SKILL_LEAD_EXPERT,
@@ -375,7 +375,7 @@ COMMAND STAFF
SKILL_JTAC = SKILL_JTAC_EXPERT,
SKILL_MEDICAL = SKILL_MEDICAL_TRAINED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_MELEE_WEAPONS = SKILL_MELEE_TRAINED,
SKILL_INTEL = SKILL_INTEL_TRAINED,
)
@@ -392,7 +392,7 @@ COMMAND STAFF
SKILL_JTAC = SKILL_JTAC_EXPERT,
SKILL_INTEL = SKILL_INTEL_EXPERT,
SKILL_VEHICLE = SKILL_VEHICLE_SMALL,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
SKILL_POLICE = SKILL_POLICE_FLASH,
SKILL_NAVIGATIONS = SKILL_NAVIGATIONS_TRAINED,
@@ -426,3 +426,80 @@ COMMAND STAFF
SKILL_JTAC = SKILL_JTAC_EXPERT,
SKILL_INTEL = SKILL_INTEL_TRAINED,
)
+
+/*
+---------------------
+SOLAR DEVILS (PvE Marines)
+---------------------
+*/
+
+/datum/skills/rifleman_pve
+ name = "Private"
+ skills = list(
+ SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
+ SKILL_FIREMAN = SKILL_FIREMAN_EXPERT,
+ SKILL_POWERLOADER = SKILL_POWERLOADER_TRAINED,
+ SKILL_VEHICLE = SKILL_VEHICLE_SMALL,
+ SKILL_JTAC = SKILL_JTAC_BEGINNER,
+ SKILL_ENDURANCE = SKILL_ENDURANCE_TRAINED,
+ )
+
+/datum/skills/combat_medic_pve
+ name = "Combat Medic"
+ skills = list(
+ SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
+ SKILL_FIREMAN = SKILL_FIREMAN_EXPERT,
+ SKILL_POWERLOADER = SKILL_POWERLOADER_TRAINED,
+ SKILL_VEHICLE = SKILL_VEHICLE_SMALL,
+ SKILL_JTAC = SKILL_JTAC_BEGINNER,
+ SKILL_ENDURANCE = SKILL_ENDURANCE_TRAINED,
+ SKILL_MEDICAL = SKILL_MEDICAL_MEDIC,
+ SKILL_SURGERY = SKILL_SURGERY_NOVICE,
+ )
+
+/datum/skills/smartgunner_pve
+ name = "Smartgunner"
+ skills = list(
+ SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
+ SKILL_FIREMAN = SKILL_FIREMAN_EXPERT,
+ SKILL_POWERLOADER = SKILL_POWERLOADER_TRAINED,
+ SKILL_VEHICLE = SKILL_VEHICLE_SMALL,
+ SKILL_JTAC = SKILL_JTAC_BEGINNER,
+ SKILL_ENDURANCE = SKILL_ENDURANCE_TRAINED,
+ SKILL_SPEC_WEAPONS = SKILL_SPEC_SMARTGUN,
+ )
+
+/datum/skills/tl_pve
+ name = "Fireteam Leader"
+ skills = list(
+ SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
+ SKILL_FIREMAN = SKILL_FIREMAN_EXPERT,
+ SKILL_POWERLOADER = SKILL_POWERLOADER_TRAINED,
+ SKILL_VEHICLE = SKILL_VEHICLE_SMALL,
+ SKILL_JTAC = SKILL_JTAC_TRAINED,
+ SKILL_LEADERSHIP = SKILL_LEAD_TRAINED,
+ SKILL_ENDURANCE = SKILL_ENDURANCE_TRAINED,
+ SKILL_PILOT = SKILL_PILOT_TRAINED,
+ )
+
+/datum/skills/sl_pve
+ name = "Squad Leader"
+ skills = list(
+ SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
+ SKILL_FIREMAN = SKILL_FIREMAN_EXPERT,
+ SKILL_POWERLOADER = SKILL_POWERLOADER_TRAINED,
+ SKILL_ENDURANCE = SKILL_ENDURANCE_MASTER,
+ SKILL_CQC = SKILL_CQC_TRAINED,
+ SKILL_LEADERSHIP = SKILL_LEAD_EXPERT,
+ SKILL_MEDICAL = SKILL_MEDICAL_TRAINED,
+ SKILL_SURGERY = SKILL_SURGERY_NOVICE,
+ SKILL_VEHICLE = SKILL_VEHICLE_SMALL,
+ SKILL_JTAC = SKILL_JTAC_TRAINED,
+ SKILL_INTEL = SKILL_INTEL_TRAINED,
+ SKILL_PILOT = SKILL_PILOT_EXPERT,
+ )
diff --git a/code/datums/skills/wygoons.dm b/code/datums/skills/wygoons.dm
index 2d2c247bd1ea..73d8da15b976 100644
--- a/code/datums/skills/wygoons.dm
+++ b/code/datums/skills/wygoons.dm
@@ -18,7 +18,7 @@
SKILL_MELEE_WEAPONS = SKILL_MELEE_TRAINED,
SKILL_MEDICAL = SKILL_MEDICAL_TRAINED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
)
/datum/skills/wy_goon_lead
@@ -31,6 +31,6 @@
SKILL_MELEE_WEAPONS = SKILL_MELEE_TRAINED,
SKILL_MEDICAL = SKILL_MEDICAL_TRAINED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_LEADERSHIP = SKILL_LEAD_TRAINED,
)
diff --git a/code/datums/soundOutput.dm b/code/datums/soundOutput.dm
index 6ebc32c7e41f..cc7334d2cb98 100644
--- a/code/datums/soundOutput.dm
+++ b/code/datums/soundOutput.dm
@@ -52,10 +52,14 @@
S.y += T.y_s_offset
S.x += T.x_s_offset
S.echo = SOUND_ECHO_REVERB_ON //enable environment reverb for positional sounds
+ for(var/pos = 1 to length(T.echo))
+ if(!T.echo[pos])
+ continue
+ S.echo[pos] = T.echo[pos]
if(owner.mob.ear_deaf > 0)
S.status |= SOUND_MUTE
- sound_to(owner,S)
+ sound_to(owner, S)
/datum/soundOutput/proc/update_ambience(area/target_area, ambience_override, force_update = FALSE)
var/status_flags = SOUND_STREAM
diff --git a/code/datums/statistics/entities/death_stats.dm b/code/datums/statistics/entities/death_stats.dm
index 18751ba604a1..de2d9cc71526 100644
--- a/code/datums/statistics/entities/death_stats.dm
+++ b/code/datums/statistics/entities/death_stats.dm
@@ -20,6 +20,7 @@
var/total_time_alive
var/total_damage_taken
var/total_revives_done = 0
+ var/total_ib_fixed = 0
var/total_brute = 0
var/total_burn = 0
@@ -53,6 +54,7 @@
"total_time_alive" = DB_FIELDTYPE_BIGINT,
"total_damage_taken" = DB_FIELDTYPE_INT,
"total_revives_done" = DB_FIELDTYPE_INT,
+ "total_ib_fixed" = DB_FIELDTYPE_INT,
"total_brute" = DB_FIELDTYPE_INT,
"total_burn" = DB_FIELDTYPE_INT,
@@ -132,6 +134,7 @@
new_death.total_time_alive = life_time_total
new_death.total_damage_taken = life_damage_taken_total
new_death.total_revives_done = life_revives_total
+ new_death.total_ib_fixed = life_ib_total
if(GLOB.round_statistics)
GLOB.round_statistics.track_death(new_death)
diff --git a/code/datums/statistics/random_facts/ib_fact.dm b/code/datums/statistics/random_facts/ib_fact.dm
new file mode 100644
index 000000000000..dca8c303b744
--- /dev/null
+++ b/code/datums/statistics/random_facts/ib_fact.dm
@@ -0,0 +1,9 @@
+/datum/random_fact/ib
+ statistic_name = "people"
+ statistic_verb = "fixed internal bleeding for"
+
+/datum/random_fact/ib/life_grab_stat(mob/fact_mob)
+ return fact_mob.life_ib_total
+
+/datum/random_fact/ib/death_grab_stat(datum/entity/statistic/death/fact_death)
+ return fact_death.total_ib_fixed
diff --git a/code/datums/supply_packs/ammo.dm b/code/datums/supply_packs/ammo.dm
index 2e81d8fed164..b8b26225a010 100644
--- a/code/datums/supply_packs/ammo.dm
+++ b/code/datums/supply_packs/ammo.dm
@@ -291,7 +291,7 @@
)
name = "M41AE2 HPR Magazines crate (HPR ammo box x2)"
cost = 20
- containertype = /obj/structure/closet/crate
+ containertype = /obj/structure/closet/crate/ammo
containername = "\improper M41AE2 HPR magazines crate"
group = "Ammo"
@@ -301,8 +301,8 @@
/obj/item/ammo_magazine/rifle/lmg/holo_target,
)
name = "M41AE2 HPR Holo-Target Magazines crate (HPR HT ammo box x2)"
- cost = 30
- containertype = /obj/structure/closet/crate
+ cost = 20
+ containertype = /obj/structure/closet/crate/ammo
containername = "\improper M41AE2 HPR holo-target magazines crate"
group = "Ammo"
diff --git a/code/datums/supply_packs/explosives.dm b/code/datums/supply_packs/explosives.dm
index 78f0f3e9251a..f032d0f891b0 100644
--- a/code/datums/supply_packs/explosives.dm
+++ b/code/datums/supply_packs/explosives.dm
@@ -111,25 +111,25 @@
containername = "\improper explosive HEDP grenade crate (WARNING)"
group = "Explosives"
-/datum/supply_packs/explosives_M40_HPDP
- name = "M40 HPDP white phosphorus grenades crate (x6)"
+/datum/supply_packs/explosives_M40_CCDP
+ name = "M40 CCDP chemical compound grenades crate (x6)"
contains = list(
/obj/item/storage/box/packet/phosphorus,
/obj/item/storage/box/packet/phosphorus,
)
cost = 30
containertype = /obj/structure/closet/crate/explosives
- containername = "\improper M40 HPDP grenade crate (WARNING)"
+ containername = "\improper M40 CCDP grenade crate (WARNING)"
group = "Explosives"
-/datum/supply_packs/explosives_M40_HPDP_crate
- name = "M40 HPDP white phosphorus grenade box crate (x25)"
+/datum/supply_packs/explosives_M40_CCDP_crate
+ name = "M40 WPDP chemical compund grenade box crate (x25)"
contains = list(
/obj/item/storage/box/nade_box/phophorus,
)
cost = 100
containertype = /obj/structure/closet/crate/explosives
- containername = "\improper HPDP grenade crate (WARNING)"
+ containername = "\improper CCDP grenade crate (WARNING)"
group = "Explosives"
/datum/supply_packs/explosives_M40_HEFA
@@ -186,6 +186,16 @@
containername = "\improper explosive M74 AGM-I grenades crate (WARNING)"
group = "Explosives"
+/datum/supply_packs/explosives_M74_AGM_I_box
+ name = "M74 Airburst Grenade Munition incendiary grenades box crate (x25)"
+ contains = list(
+ /obj/item/storage/box/nade_box/airburstincen,
+ )
+ cost = 100
+ containertype = /obj/structure/closet/crate/explosives
+ containername = "\improper M74 Airburst Grenade Munition incendiary grenades crate (WARNING)"
+ group = "Explosives"
+
/datum/supply_packs/explosives_airburst_smoke
name = "M74 Airburst Grenade Munition smoke grenades crate (x6)"
contains = list(
diff --git a/code/datums/supply_packs/mortar.dm b/code/datums/supply_packs/mortar.dm
index 3f075cad632f..c9f53e49ce7d 100644
--- a/code/datums/supply_packs/mortar.dm
+++ b/code/datums/supply_packs/mortar.dm
@@ -72,3 +72,18 @@
containertype = /obj/structure/closet/crate/secure/mortar_ammo
containername = "\improper M402 mortar flare shells crate"
group = "Mortar"
+
+/datum/supply_packs/ammo_mortar_frag
+ name = "M402 mortar shells crate (x6 Frag)"
+ cost = 20
+ contains = list(
+ /obj/item/mortar_shell/frag,
+ /obj/item/mortar_shell/frag,
+ /obj/item/mortar_shell/frag,
+ /obj/item/mortar_shell/frag,
+ /obj/item/mortar_shell/frag,
+ /obj/item/mortar_shell/frag,
+ )
+ containertype = /obj/structure/closet/crate/secure/mortar_ammo
+ containername = "\improper M402 mortar frag shells crate"
+ group = "Mortar"
diff --git a/code/datums/supply_packs/weapons.dm b/code/datums/supply_packs/weapons.dm
index 8939b80e52d6..f7802089cbfe 100644
--- a/code/datums/supply_packs/weapons.dm
+++ b/code/datums/supply_packs/weapons.dm
@@ -1,13 +1,3 @@
-/datum/supply_packs/m56b_smartgun
- name = "M56B Smartgun System Package (x1)"
- contains = list(
- /obj/item/storage/box/m56_system,
- )
- cost = 100
- containertype = /obj/structure/closet/crate/weapon
- containername = "M56B Smartgun System Package"
- group = "Weapons"
-
/datum/supply_packs/m56_hmg
name = "M56D Heavy Machine Gun (x1)"
contains = list(
diff --git a/code/datums/vehicles.dm b/code/datums/vehicles.dm
index 67070dd04c0b..08c977b63fb6 100644
--- a/code/datums/vehicles.dm
+++ b/code/datums/vehicles.dm
@@ -26,10 +26,6 @@
name = "APC - No FPW"
interior_id = "apc_no_fpw"
-/datum/map_template/interior/fancy_locker
- name = "Fancy Locker"
- interior_id = "fancylocker"
-
/datum/map_template/interior/tank
name = "Tank"
interior_id = "tank"
diff --git a/code/game/area/Sulaco.dm b/code/game/area/Sulaco.dm
index a3d02b78636c..8facf9d44fd6 100644
--- a/code/game/area/Sulaco.dm
+++ b/code/game/area/Sulaco.dm
@@ -115,7 +115,58 @@
icon_state = "away2"
+/area/shuttle/drop2/Enter(atom/movable/O, atom/oldloc)
+ if(istype(O, /obj/structure/barricade))
+ return FALSE
+ return TRUE
+
+/area/shuttle/drop3
+ //soundscape_playlist = list('sound/soundscape/drum1.ogg')
+ soundscape_interval = 30 //seconds
+ is_resin_allowed = FALSE
+ flags_area = AREA_NOTUNNEL
+ is_landing_zone = TRUE
+ ceiling = CEILING_REINFORCED_METAL
+ base_lighting_alpha = 0
+
+/area/shuttle/drop3/sulaco
+ name = "\improper Dropship Saipan"
+ icon_state = "shuttle"
+ base_muffle = MUFFLE_HIGH
+ base_lighting_alpha = 255
+
+/area/shuttle/drop3/LV624
+ name = "\improper Dropship Saipan"
+ ambience_exterior = AMBIENCE_LV624
+ icon_state = "shuttle2"
+
+/area/shuttle/drop3/prison
+ name = "\improper Dropship Saipan"
+ ambience_exterior = AMBIENCE_PRISON
+ icon_state = "shuttle2"
+/area/shuttle/drop3/BigRed
+ name = "\improper Dropship Saipan"
+ ambience_exterior = AMBIENCE_BIGRED
+ icon_state = "shuttle2"
+
+/area/shuttle/drop3/ice_colony
+ name = "\improper Dropship Saipan"
+ icon_state = "shuttle2"
+
+/area/shuttle/drop3/DesertDam
+ name = "\improper Dropship Saipan"
+ ambience_exterior = AMBIENCE_TRIJENT
+ icon_state = "shuttle2"
+
+/area/shuttle/drop3/transit
+ ambience_exterior = 'sound/ambience/dropship_ambience_loop.ogg'
+ name = "\improper Dropship Saipan Transit"
+ icon_state = "shuttlered"
+
+/area/shuttle/drop3/lz3
+ name = "\improper Saipan Landing Zone"
+ icon_state = "away2"
//DISTRESS SHUTTLES
diff --git a/code/game/area/almayer.dm b/code/game/area/almayer.dm
index b75baccd7353..a065a0b8671f 100644
--- a/code/game/area/almayer.dm
+++ b/code/game/area/almayer.dm
@@ -132,7 +132,7 @@
icon_state = "workshop"
/area/almayer/engineering/lower/workshop/hangar
- name = "\improper Ordnance workshop"
+ name = "\improper Ordnance Workshop"
/area/almayer/engineering/lower/engine_core
name = "\improper Engine Reactor Core Room"
diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm
index be7037295497..db0702200d16 100644
--- a/code/game/area/areas.dm
+++ b/code/game/area/areas.dm
@@ -27,7 +27,6 @@
var/unique = TRUE
- var/has_gravity = 1
// var/list/lights // list of all lights on this area
var/list/all_doors = list() //Added by Strumpetplaya - Alarm Change - Contains a list of doors adjacent to this area
var/air_doors_activated = 0
@@ -381,42 +380,6 @@
if(istype(M))
use_power(-M.calculate_current_power_usage(), M.power_channel)
-/area/proc/gravitychange(gravitystate = 0, area/A)
-
- A.has_gravity = gravitystate
-
- if(gravitystate)
- for(var/mob/living/carbon/human/M in A)
- thunk(M)
- for(var/mob/M1 in A)
- M1.make_floating(0)
- else
- for(var/mob/M in A)
- if(M.Check_Dense_Object() && istype(src,/mob/living/carbon/human/))
- var/mob/living/carbon/human/H = src
- if(istype(H.shoes, /obj/item/clothing/shoes/magboots) && (H.shoes.flags_inventory & NOSLIPPING)) //magboots + dense_object = no floaty effect
- H.make_floating(0)
- else
- H.make_floating(1)
- else
- M.make_floating(1)
-
-/area/proc/thunk(M)
- if(istype(get_turf(M), /turf/open/space)) // Can't fall onto nothing.
- return
-
- if(istype(M,/mob/living/carbon/human/)) // Only humans can wear magboots, so we give them a chance to.
- var/mob/living/carbon/human/H = M
- if((istype(H.shoes, /obj/item/clothing/shoes/magboots) && (H.shoes.flags_inventory & NOSLIPPING)))
- return
- H.adjust_effect(5, STUN)
- H.adjust_effect(5, WEAKEN)
-
- to_chat(M, "Gravity!")
-
-
-
-
//atmos related procs
/area/return_air()
diff --git a/code/game/area/kutjevo.dm b/code/game/area/kutjevo.dm
index d0a4a30118b0..1180e10a761e 100644
--- a/code/game/area/kutjevo.dm
+++ b/code/game/area/kutjevo.dm
@@ -7,6 +7,7 @@
//ambience = list('figuresomethingout.ogg')
icon_state = "kutjevo"
can_build_special = TRUE //T-Comms structure
+ powernet_name = "ground"
temperature = 308.7 //kelvin, 35c, 95f
minimap_color = MINIMAP_AREA_ENGI
diff --git a/code/game/area/shiva.dm b/code/game/area/shiva.dm
index fc7424f8146b..dee9eb5f0aea 100644
--- a/code/game/area/shiva.dm
+++ b/code/game/area/shiva.dm
@@ -6,6 +6,7 @@
//ambience = list('figuresomethingout.ogg')
icon_state = "shiva"
can_build_special = TRUE //T-Comms structure
+ powernet_name = "ground"
temperature = ICE_COLONY_TEMPERATURE
minimap_color = MINIMAP_AREA_COLONY
diff --git a/code/game/area/space_station_13_areas.dm b/code/game/area/space_station_13_areas.dm
index df5e54a77013..6b3084ba8068 100644
--- a/code/game/area/space_station_13_areas.dm
+++ b/code/game/area/space_station_13_areas.dm
@@ -59,7 +59,6 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
requires_power = FALSE
static_lighting = FALSE
base_lighting_alpha = 255
- has_gravity = 1
// === end remove
@@ -72,7 +71,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
statistic_exempt = TRUE
ceiling = CEILING_METAL
- base_lighting_alpha = 255
+ base_lighting_alpha = 255
/area/centcom/control
name = "\improper abandoned Centcom Control"
diff --git a/code/game/area/strata.dm b/code/game/area/strata.dm
index 117cffa600d4..2bb17ea5d60d 100644
--- a/code/game/area/strata.dm
+++ b/code/game/area/strata.dm
@@ -12,6 +12,7 @@ EXTERIOR is FUCKING FREEZING, and refers to areas out in the open and or exposed
//ambience = list('figuresomethingout.ogg')
icon_state = "strata"
can_build_special = TRUE //T-Comms structure
+ powernet_name = "ground"
temperature = SOROKYNE_TEMPERATURE //If not in a building, it'll be cold. All interior areas are set to T20C
minimap_color = MINIMAP_AREA_COLONY
diff --git a/code/game/area/varadero.dm b/code/game/area/varadero.dm
index aac37bdf942a..b0e5d283fdcd 100644
--- a/code/game/area/varadero.dm
+++ b/code/game/area/varadero.dm
@@ -7,6 +7,7 @@
ambience_exterior = AMBIENCE_NV
icon_state = "varadero"
can_build_special = TRUE //T-Comms structure
+ powernet_name = "ground"
temperature = TROPICAL_TEMP
minimap_color = MINIMAP_AREA_COLONY
diff --git a/code/game/gamemodes/colonialmarines/whiskey_outpost.dm b/code/game/gamemodes/colonialmarines/whiskey_outpost.dm
index b3fd079d638c..cfe67465df07 100644
--- a/code/game/gamemodes/colonialmarines/whiskey_outpost.dm
+++ b/code/game/gamemodes/colonialmarines/whiskey_outpost.dm
@@ -614,6 +614,7 @@
"Explosives and grenades",
"Rocket ammo",
"Sniper ammo",
+ "Anti-Material Sniper ammo",
"Pyrotechnician tanks",
"Scout ammo",
"Smartgun ammo",
@@ -634,14 +635,17 @@
if("Sniper ammo")
supply_drop = 3
to_chat(usr, SPAN_NOTICE("Sniper ammo will now drop!"))
- if("Explosives and grenades")
+ if("Anti-Material Sniper ammo")
supply_drop = 4
+ to_chat(usr, SPAN_NOTICE("Anti-Material Sniper ammo will now drop!"))
+ if("Explosives and grenades")
+ supply_drop = 5
to_chat(usr, SPAN_NOTICE("Explosives and grenades will now drop!"))
if("Pyrotechnician tanks")
- supply_drop = 5
+ supply_drop = 6
to_chat(usr, SPAN_NOTICE("Pyrotechnician tanks will now drop!"))
if("Scout ammo")
- supply_drop = 6
+ supply_drop = 7
to_chat(usr, SPAN_NOTICE("Scout ammo will now drop!"))
else
return
@@ -734,15 +738,21 @@
/obj/item/ammo_magazine/sniper,
/obj/item/ammo_magazine/sniper/incendiary,
/obj/item/ammo_magazine/sniper/flak)
- if(4) // Give them explosives + Grenades for the Grenade spec. Might be too many grenades, but we'll find out.
+ if(4) //Amr sniper ammo.
+ spawnitems = list(/obj/item/ammo_magazine/sniper/anti_materiel,
+ /obj/item/ammo_magazine/sniper/anti_materiel,
+ /obj/item/ammo_magazine/sniper/anti_materiel,
+ /obj/item/ammo_magazine/sniper/anti_materiel,
+ /obj/item/ammo_magazine/sniper/anti_materiel)
+ if(5) // Give them explosives + Grenades for the Grenade spec. Might be too many grenades, but we'll find out.
spawnitems = list(/obj/item/storage/box/explosive_mines,
/obj/item/storage/belt/grenade/full)
- if(5) // Pyrotech
+ if(6) // Pyrotech
var/fuel = pick(/obj/item/ammo_magazine/flamer_tank/large/B, /obj/item/ammo_magazine/flamer_tank/large/X)
spawnitems = list(/obj/item/ammo_magazine/flamer_tank/large,
/obj/item/ammo_magazine/flamer_tank/large,
fuel)
- if(6) // Scout
+ if(7) // Scout
spawnitems = list(/obj/item/ammo_magazine/rifle/m4ra/custom,
/obj/item/ammo_magazine/rifle/m4ra/custom,
/obj/item/ammo_magazine/rifle/m4ra/custom/incendiary,
diff --git a/code/game/gamemodes/colonialmarines/whiskey_outpost/skills.dm b/code/game/gamemodes/colonialmarines/whiskey_outpost/skills.dm
index a5126627adaf..746e6ed53c18 100644
--- a/code/game/gamemodes/colonialmarines/whiskey_outpost/skills.dm
+++ b/code/game/gamemodes/colonialmarines/whiskey_outpost/skills.dm
@@ -35,7 +35,7 @@
/datum/skills/honor_guard/lead
name = "Honor Guard Squad Leader"
skills = list(
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI, //to fix CIC apc.
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED, //to fix CIC apc.
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
SKILL_LEADERSHIP = SKILL_LEAD_MASTER,
SKILL_OVERWATCH = SKILL_OVERWATCH_TRAINED,
@@ -49,7 +49,7 @@
/datum/skills/mortar_crew
name = "Mortar Crew"
skills = list(
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
SKILL_JTAC = SKILL_JTAC_BEGINNER,
SKILL_POWERLOADER = SKILL_POWERLOADER_MASTER,
diff --git a/code/game/jobs/job/job.dm b/code/game/jobs/job/job.dm
index 0af315fc3b9d..0323d2a02733 100644
--- a/code/game/jobs/job/job.dm
+++ b/code/game/jobs/job/job.dm
@@ -155,7 +155,7 @@
if(!gear_preset)
return ""
if(GLOB.gear_path_presets_list[gear_preset])
- return GLOB.gear_path_presets_list[gear_preset].paygrade
+ return GLOB.gear_path_presets_list[gear_preset].paygrades[1]
return ""
/datum/job/proc/get_comm_title()
@@ -318,3 +318,7 @@
if(user.client.check_whitelist_status(flags_whitelist))
return TRUE
+
+/// Called when the job owner enters deep cryogenic storage
+/datum/job/proc/on_cryo(mob/living/carbon/human/cryoing)
+ return
diff --git a/code/game/jobs/job/marine/squad/specialist.dm b/code/game/jobs/job/marine/squad/specialist.dm
index e69241cdc70b..38f7a38cbedc 100644
--- a/code/game/jobs/job/marine/squad/specialist.dm
+++ b/code/game/jobs/job/marine/squad/specialist.dm
@@ -23,6 +23,11 @@
total_positions_so_far = positions
return positions
+/datum/job/marine/specialist/on_cryo(mob/living/carbon/human/cryoing)
+ var/specialist_set = get_specialist_set(cryoing)
+ if(isnull(specialist_set))
+ return
+ GLOB.specialist_set_datums[specialist_set].refund_set(cryoing)
/datum/job/marine/specialist/whiskey
title = JOB_WO_SQUAD_SPECIALIST
diff --git a/code/game/jobs/job/marine/squad_info.dm b/code/game/jobs/job/marine/squad_info.dm
index 37db48c3116e..406263115196 100644
--- a/code/game/jobs/job/marine/squad_info.dm
+++ b/code/game/jobs/job/marine/squad_info.dm
@@ -146,7 +146,7 @@
if(skillcheck(H, SKILL_MEDICAL, SKILL_MEDICAL_TRAINED))
Med = TRUE
else
- if(skillcheck(H, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
+ if(skillcheck(H, SKILL_ENGINEER, SKILL_ENGINEER_NOVICE))
Eng = TRUE
ID = H.get_idcard()
squad_info_data["fireteams"][team]["tl"] = list(
@@ -223,7 +223,7 @@
if(skillcheck(H, SKILL_MEDICAL, SKILL_MEDICAL_TRAINED))
Med = TRUE
else
- if(skillcheck(H, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
+ if(skillcheck(H, SKILL_ENGINEER, SKILL_ENGINEER_NOVICE))
Eng = TRUE
mar[H.real_name] = list(
"name" = H.real_name,
@@ -270,7 +270,7 @@
if(skillcheck(H, SKILL_MEDICAL, SKILL_MEDICAL_TRAINED))
Med = TRUE
else
- if(skillcheck(H, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
+ if(skillcheck(H, SKILL_ENGINEER, SKILL_ENGINEER_NOVICE))
Eng = TRUE
mar[H.real_name] = list(
"name" = H.real_name,
diff --git a/code/game/jobs/job/marine/squads.dm b/code/game/jobs/job/marine/squads.dm
index 75f6622506a9..26cca9019639 100644
--- a/code/game/jobs/job/marine/squads.dm
+++ b/code/game/jobs/job/marine/squads.dm
@@ -232,6 +232,17 @@
roundstart = FALSE
locked = TRUE
+/datum/squad/marine/solardevils
+ name = SQUAD_SOLAR
+ equipment_color = "#5a2c2c"
+ chat_color = "#5a2c2c"
+ radio_freq = SOF_FREQ
+ minimap_color = "#5a2c2c"
+
+ active = FALSE
+ roundstart = FALSE
+ locked = TRUE
+
//############################### UPP Squads
/datum/squad/upp
diff --git a/code/game/jobs/job/special/provost.dm b/code/game/jobs/job/special/provost.dm
index c746e9f500b0..d5dd9dc3940f 100644
--- a/code/game/jobs/job/special/provost.dm
+++ b/code/game/jobs/job/special/provost.dm
@@ -14,6 +14,14 @@
/datum/job/special/provost/inspector
title = JOB_PROVOST_INSPECTOR
+//Provost Inspector
+/datum/job/special/provost/inspector/chief
+ title = JOB_PROVOST_CINSPECTOR
+
+//Provost Marshal
+/datum/job/special/provost/marshal/deputy
+ title = JOB_PROVOST_DMARSHAL
+
//Provost Marshal
/datum/job/special/provost/marshal
title = JOB_PROVOST_MARSHAL
diff --git a/code/game/jobs/job/special/uscm.dm b/code/game/jobs/job/special/uscm.dm
index 751322539f77..934241fdca8a 100644
--- a/code/game/jobs/job/special/uscm.dm
+++ b/code/game/jobs/job/special/uscm.dm
@@ -14,3 +14,6 @@
title = JOB_RIOT
/datum/job/special/uscm/riot/chief
title = JOB_RIOT_CHIEF
+
+/datum/job/special/uscm/tech
+ title = JOB_SQUAD_TECH
diff --git a/code/game/machinery/Beacon.dm b/code/game/machinery/Beacon.dm
deleted file mode 100644
index 44bd9907c15d..000000000000
--- a/code/game/machinery/Beacon.dm
+++ /dev/null
@@ -1,54 +0,0 @@
-/obj/structure/machinery/bluespace_beacon
-
- icon = 'icons/obj/objects.dmi'
- icon_state = "floor_beaconf"
- name = "Bluespace Gigabeacon"
- desc = "A device that draws power from bluespace and creates a permanent tracking beacon."
- level = 1 // underfloor
- layer = UNDERFLOOR_OBJ_LAYER
- anchored = TRUE
- use_power = USE_POWER_IDLE
- idle_power_usage = 0
- var/obj/item/device/radio/beacon/Beacon
-
-/obj/structure/machinery/bluespace_beacon/Initialize(mapload, ...)
- . = ..()
- var/turf/T = loc
- Beacon = new /obj/item/device/radio/beacon
- Beacon.invisibility = INVISIBILITY_MAXIMUM
- Beacon.forceMove(T)
-
- hide(T.intact_tile)
-
-/obj/structure/machinery/bluespace_beacon/Destroy()
- QDEL_NULL(Beacon)
- return ..()
-
-/obj/structure/machinery/bluespace_beacon/hide(intact)
- // update the invisibility and icon
- invisibility = intact ? 101 : 0
- updateicon()
-
- // update the icon_state
-/obj/structure/machinery/bluespace_beacon/proc/updateicon()
- var/state="floor_beacon"
-
- if(invisibility)
- icon_state = "[state]f"
-
- else
- icon_state = "[state]"
-
-/obj/structure/machinery/bluespace_beacon/process()
- if(!Beacon)
- var/turf/T = loc
- Beacon = new /obj/item/device/radio/beacon
- Beacon.invisibility = INVISIBILITY_MAXIMUM
- Beacon.forceMove(T)
- if(Beacon)
- if(Beacon.loc != loc)
- Beacon.forceMove(loc)
-
- updateicon()
-
-
diff --git a/code/game/machinery/air_sensor.dm b/code/game/machinery/air_sensor.dm
deleted file mode 100644
index 55963bae979a..000000000000
--- a/code/game/machinery/air_sensor.dm
+++ /dev/null
@@ -1,64 +0,0 @@
-/obj/structure/machinery/air_sensor
- icon = 'icons/obj/structures/props/stationobjs.dmi'
- icon_state = "gsensor1"
- name = "Gas Sensor"
-
- anchored = TRUE
- var/state = 0
-
- var/id_tag
- var/frequency = 1439
-
- var/on = 1
- var/output = 3
- //Flags:
- // 1 for pressure
- // 2 for temperature
- // Output >= 4 includes gas composition
- // 4 for oxygen concentration
- // 8 for phoron concentration
- // 16 for nitrogen concentration
- // 32 for carbon dioxide concentration
-
- var/datum/radio_frequency/radio_connection
-
-/obj/structure/machinery/air_sensor/update_icon()
- icon_state = "gsensor[on]"
-
-/obj/structure/machinery/air_sensor/process()
- if(on)
- var/datum/signal/signal = new
- signal.transmission_method = 1 //radio signal
- signal.data["tag"] = id_tag
- signal.data["timestamp"] = world.time
-
- var/turf/T = loc
- var/pressure_ = T.return_pressure()
- var/temperature_ = T.return_temperature()
-
- if(output&1)
- signal.data["pressure"] = num2text(round(pressure_,0.1),)
- if(output&2)
- signal.data["temperature"] = round(temperature_,0.1)
-
- if(output>4)
- signal.data["oxygen"] = 0
- signal.data["phoron"] = 0
- signal.data["nitrogen"] = 0
- signal.data["carbon_dioxide"] = 0
- signal.data["sigtype"]="status"
- radio_connection.post_signal(src, signal, filter = RADIO_ATMOSIA)
-
-
-/obj/structure/machinery/air_sensor/proc/set_frequency(new_frequency)
- SSradio.remove_object(src, frequency)
- frequency = new_frequency
- radio_connection = SSradio.add_object(src, frequency, RADIO_ATMOSIA)
-
-/obj/structure/machinery/air_sensor/Initialize()
- . = ..()
- set_frequency(frequency)
-
-/obj/structure/machinery/air_sensor/Destroy()
- SSradio.remove_object(src, frequency)
- return ..()
diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm
index 4150aead979e..4013aec3fb29 100644
--- a/code/game/machinery/autolathe.dm
+++ b/code/game/machinery/autolathe.dm
@@ -224,7 +224,7 @@
if("cutwire")
if(!panel_open)
return FALSE
- if(!skillcheck(usr, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(usr, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(usr, SPAN_WARNING("You don't understand anything about this wiring..."))
return FALSE
var/obj/item/held_item = usr.get_held_item()
@@ -238,7 +238,7 @@
if("fixwire")
if(!panel_open)
return FALSE
- if(!skillcheck(usr, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(usr, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(usr, SPAN_WARNING("You don't understand anything about this wiring..."))
return FALSE
var/obj/item/held_item = usr.get_held_item()
@@ -251,7 +251,7 @@
if("pulsewire")
if(!panel_open)
return FALSE
- if(!skillcheck(usr, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(usr, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(usr, SPAN_WARNING("You don't understand anything about this wiring..."))
return FALSE
var/obj/item/held_item = usr.get_held_item()
@@ -269,7 +269,7 @@
/obj/structure/machinery/autolathe/attackby(obj/item/O as obj, mob/user as mob)
if(HAS_TRAIT(O, TRAIT_TOOL_SCREWDRIVER))
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(user, SPAN_WARNING("You are not trained to dismantle machines..."))
return
panel_open = !panel_open
@@ -586,7 +586,7 @@
stored_material = list("metal" = 56250, "plastic" = 20000) //15 metal and 10 plastic sheets
/obj/structure/machinery/autolathe/armylathe/attack_hand(mob/user)
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(user, SPAN_WARNING("You have no idea how to operate the [name]."))
return FALSE
. = ..()
diff --git a/code/game/machinery/bio-dome_floodlights.dm b/code/game/machinery/bio-dome_floodlights.dm
deleted file mode 100644
index e23dbcc023f4..000000000000
--- a/code/game/machinery/bio-dome_floodlights.dm
+++ /dev/null
@@ -1,169 +0,0 @@
-/obj/structure/machinery/hydro_floodlight_switch
- name = "Biodome Floodlight Switch"
- icon = 'icons/obj/structures/machinery/power.dmi'
- icon_state = "panelnopower"
- desc = "This switch controls the floodlights surrounding the archaeology complex. It only functions when there is power."
- density = FALSE
- anchored = TRUE
- var/ispowered = FALSE
- var/turned_on = 0 //has to be toggled in engineering
- use_power = USE_POWER_IDLE
- unslashable = TRUE
- unacidable = TRUE
- var/list/floodlist = list() // This will save our list of floodlights on the map
-
-/obj/structure/machinery/hydro_floodlight_switch/Initialize(mapload, ...)
- . = ..()
- for(var/obj/structure/machinery/hydro_floodlight/F in GLOB.machines)
- floodlist += F
- F.fswitch = src
- start_processing()
-
-/obj/structure/machinery/hydro_floodlight_switch/Destroy()
- for(var/obj/structure/machinery/hydro_floodlight/floodlight as anything in floodlist)
- floodlight.fswitch = null
- floodlist = null
- return ..()
-
-
-/obj/structure/machinery/hydro_floodlight_switch/process()
- var/lightpower = 0
- for(var/obj/structure/machinery/hydro_floodlight/H in floodlist)
- if(!H.is_lit)
- continue
- lightpower += H.power_tick
- use_power(lightpower)
-
-/obj/structure/machinery/hydro_floodlight_switch/update_icon()
- if(!ispowered)
- icon_state = "panelnopower"
- else if(turned_on)
- icon_state = "panelon"
- else
- icon_state = "paneloff"
-
-/obj/structure/machinery/hydro_floodlight_switch/power_change()
- ..()
- if((stat & NOPOWER))
- if(ispowered && turned_on)
- toggle_lights()
- ispowered = FALSE
- turned_on = 0
- update_icon()
- else
- ispowered = TRUE
- update_icon()
-
-/obj/structure/machinery/hydro_floodlight_switch/proc/toggle_lights()
- for(var/obj/structure/machinery/hydro_floodlight/F in floodlist)
- if(!istype(F) || QDELETED(F) || F.damaged) continue //Missing or damaged, skip it
-
- spawn(rand(0,50))
- if(F.is_lit) //Shut it down
- F.set_light(0)
- else
- F.set_light(F.lum_value)
- F.is_lit = !(F.is_lit)
- F.update_icon()
- return 0
-
-/obj/structure/machinery/hydro_floodlight_switch/attack_hand(mob/user as mob)
- if(!ishuman(user))
- to_chat(user, "Nice try.")
- return 0
- if(!ispowered)
- to_chat(user, "Nothing happens.")
- return 0
- playsound(src,'sound/machines/click.ogg', 15, 1)
- use_power(5)
- toggle_lights()
- turned_on = !(src.turned_on)
- update_icon()
- return 1
-
-/obj/structure/machinery/hydro_floodlight
- name = "Biodome Floodlight"
- icon = 'icons/obj/structures/machinery/big_floodlight.dmi'
- icon_state = "flood_s_off"
- density = TRUE
- anchored = TRUE
- layer = WINDOW_LAYER
- var/damaged = 0 //Can be smashed by xenos
- var/is_lit = 0
- unslashable = TRUE
- unacidable = TRUE
- var/power_tick = 800 // power each floodlight takes up per process
- use_power = USE_POWER_NONE //It's the switch that uses the actual power, not the lights
- var/obj/structure/machinery/hydro_floodlight_switch/fswitch = null //Reverse lookup for power grabbing in area
- var/lum_value = 7
-
-/obj/structure/machinery/hydro_floodlight/Destroy()
- if(fswitch?.floodlist)
- fswitch.floodlist -= src
- fswitch = null
- return ..()
-
-/obj/structure/machinery/hydro_floodlight/update_icon()
- if(damaged)
- icon_state = "flood_s_dmg"
- else if(is_lit)
- icon_state = "flood_s_on"
- else
- icon_state = "flood_s_off"
-
-/obj/structure/machinery/hydro_floodlight/attackby(obj/item/W as obj, mob/user as mob)
- var/obj/item/tool/weldingtool/WT = W
- if(istype(WT))
- if(!damaged) return
- if(!HAS_TRAIT(WT, TRAIT_TOOL_BLOWTORCH))
- to_chat(user, SPAN_WARNING("You need a stronger blowtorch!"))
- return
- if(WT.remove_fuel(0, user))
- playsound(src.loc, 'sound/items/weldingtool_weld.ogg', 25)
- user.visible_message(SPAN_NOTICE("[user] starts welding [src]'s damage."), \
- SPAN_NOTICE("You start welding [src]'s damage."))
- if(do_after(user, 200 * user.get_skill_duration_multiplier(SKILL_ENGINEER), INTERRUPT_ALL|BEHAVIOR_IMMOBILE, BUSY_ICON_BUILD))
- playsound(get_turf(src), 'sound/items/Welder2.ogg', 25, 1)
- if(!src || !WT.isOn()) return
- damaged = 0
- user.visible_message(SPAN_NOTICE("[user] finishes welding [src]'s damage."), \
- SPAN_NOTICE("You finish welding [src]'s damage."))
- if(is_lit)
- set_light(lum_value)
- update_icon()
- return 1
- else
- to_chat(user, SPAN_WARNING("You need more welding fuel to complete this task."))
- return 0
- ..()
- return 0
-
-/obj/structure/machinery/hydro_floodlight/attack_hand(mob/user as mob)
- if(ishuman(user))
- to_chat(user, SPAN_WARNING("Nothing happens. Looks like it's powered elsewhere."))
- return 0
- else if(!is_lit)
- to_chat(user, SPAN_WARNING("Why bother? It's just some weird metal thing."))
- return 0
- else
- if(damaged)
- to_chat(user, SPAN_WARNING("It's already damaged."))
- return 0
- else
- if(islarva(user))
- return //Larvae can't do shit
- if(user.get_active_hand())
- to_chat(user, SPAN_WARNING("You need your claws empty for this!"))
- return FALSE
- user.visible_message(SPAN_DANGER("[user] starts to slash and claw away at [src]!"),
- SPAN_DANGER("You start slashing and clawing at [src]!"))
- if(do_after(user, 50, INTERRUPT_ALL, BUSY_ICON_HOSTILE) && !damaged) //Not when it's already damaged.
- if(!src) return 0
- damaged = 1
- set_light(0)
- user.visible_message(SPAN_DANGER("[user] slashes up [src]!"),
- SPAN_DANGER("You slash up [src]!"))
- playsound(src, 'sound/weapons/blade1.ogg', 25, 1)
- update_icon()
- return 0
- ..()
diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm
index 4f6b40968bdb..3b7d824928df 100644
--- a/code/game/machinery/camera/camera.dm
+++ b/code/game/machinery/camera/camera.dm
@@ -263,9 +263,11 @@ GLOBAL_LIST_EMPTY_TYPED(all_cameras, /obj/structure/machinery/camera)
//Return a working camera that can see a given mob
//or null if none
/proc/seen_by_camera(mob/M)
- for(var/obj/structure/machinery/camera/C in oview(4, M))
+ FOR_DOVIEW(var/obj/structure/machinery/camera/C, 4, M, HIDE_INVISIBLE_OBSERVER)
if(C.can_use()) // check if camera disabled
+ FOR_DOVIEW_END
return C
+ FOR_DOVIEW_END
return null
/proc/near_range_camera(mob/M)
diff --git a/code/game/machinery/camera/presets.dm b/code/game/machinery/camera/presets.dm
index a1d7f00cf94a..30f55b9f5bf5 100644
--- a/code/game/machinery/camera/presets.dm
+++ b/code/game/machinery/camera/presets.dm
@@ -79,6 +79,9 @@
/obj/structure/machinery/camera/autoname/almayer/dropship_two
network = list(CAMERA_NET_ALMAYER, CAMERA_NET_NORMANDY)
+/obj/structure/machinery/camera/autoname/almayer/dropship_three
+ network = list(CAMERA_NET_ALMAYER, CAMERA_NET_RESEARCH)
+
/obj/structure/machinery/camera/autoname/almayer
name = "military-grade camera"
network = list(CAMERA_NET_ALMAYER)
@@ -99,6 +102,10 @@
name = "ares core camera"
network = list(CAMERA_NET_ARES)
+/obj/structure/machinery/camera/autoname/almayer/brig
+ name = "brig camera"
+ network = list(CAMERA_NET_BRIG)
+
//used by the landing camera dropship equipment. Do not place them right under where the dropship lands.
//Should place them near each corner of your LZs.
/obj/structure/machinery/camera/autoname/lz_camera
diff --git a/code/game/machinery/colony_floodlights.dm b/code/game/machinery/colony_floodlights.dm
index 0267c7e95487..e8f59ad643d7 100644
--- a/code/game/machinery/colony_floodlights.dm
+++ b/code/game/machinery/colony_floodlights.dm
@@ -125,7 +125,7 @@
/obj/structure/machinery/colony_floodlight/attackby(obj/item/I, mob/user)
if(damaged)
if(HAS_TRAIT(I, TRAIT_TOOL_SCREWDRIVER))
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(user, SPAN_WARNING("You have no clue how to repair [src]."))
return FALSE
@@ -160,7 +160,7 @@
return TRUE
else if(HAS_TRAIT(I, TRAIT_TOOL_CROWBAR))
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(user, SPAN_WARNING("You have no clue how to repair [src]."))
return FALSE
@@ -183,7 +183,7 @@
return
var/obj/item/tool/weldingtool/welder = I
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(user, SPAN_WARNING("You have no clue how to repair [src]."))
return FALSE
@@ -206,7 +206,7 @@
else if(iscoil(I))
var/obj/item/stack/cable_coil/coil = I
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(user, SPAN_WARNING("You have no clue how to repair [src]."))
return FALSE
@@ -228,7 +228,7 @@
return TRUE
else if(istype(I, /obj/item/device/lightreplacer))
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(user, SPAN_WARNING("You have no clue how to repair [src]."))
return FALSE
@@ -271,7 +271,7 @@
if(ishuman(user))
if(damaged)
. += SPAN_WARNING("It is damaged.")
- if(skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
switch(repair_state)
if(FLOODLIGHT_REPAIR_UNSCREW) . += SPAN_INFO("You must first unscrew its maintenance hatch.")
if(FLOODLIGHT_REPAIR_CROWBAR) . += SPAN_INFO("You must crowbar its lighting assembly out or use a light replacer.")
diff --git a/code/game/machinery/computer/almayer_control.dm b/code/game/machinery/computer/almayer_control.dm
index 3d3c0fdbe4df..e9c9cf91a816 100644
--- a/code/game/machinery/computer/almayer_control.dm
+++ b/code/game/machinery/computer/almayer_control.dm
@@ -184,7 +184,7 @@
to_chat(user, SPAN_WARNING("Arrays are re-cycling. Please stand by."))
return FALSE
var/input = stripped_input(user, "Please choose a message to transmit to USCM. Please be aware that this process is very expensive, and abuse will lead to termination. Transmission does not guarantee a response. There is a small delay before you may send another message. Be clear and concise.", "To abort, send an empty message.", "")
- if(!input || !(user in view(1,src)) || !COOLDOWN_FINISHED(src, cooldown_central))
+ if(!input || !(user in dview(1, src)) || !COOLDOWN_FINISHED(src, cooldown_central))
return FALSE
high_command_announce(input, user)
@@ -211,7 +211,7 @@
to_chat(user, SPAN_WARNING("Please allow at least [COOLDOWN_TIMELEFT(src, cooldown_message)/10] second\s to pass between announcements."))
return FALSE
var/input = stripped_multiline_input(user, "Please write a message to announce to the station crew.", "Priority Announcement", "")
- if(!input || !COOLDOWN_FINISHED(src, cooldown_message) || !(user in view(1,src)))
+ if(!input || !COOLDOWN_FINISHED(src, cooldown_message) || !(user in dview(1, src)))
return FALSE
var/signed = null
diff --git a/code/game/machinery/computer/camera_console.dm b/code/game/machinery/computer/camera_console.dm
index c818df9fbfb9..af973e83edca 100644
--- a/code/game/machinery/computer/camera_console.dm
+++ b/code/game/machinery/computer/camera_console.dm
@@ -352,6 +352,10 @@
/obj/structure/machinery/computer/cameras/almayer_network/vehicle
network = list(CAMERA_NET_ALMAYER, CAMERA_NET_VEHICLE)
+/obj/structure/machinery/computer/cameras/almayer_brig
+ name = "Brig Cameras Console"
+ network = list(CAMERA_NET_BRIG)
+
/obj/structure/machinery/computer/cameras/mortar
name = "Mortar Camera Interface"
alpha = 0
@@ -388,4 +392,8 @@
name = "\improper 'Normandy' camera controls"
network = list(CAMERA_NET_NORMANDY, CAMERA_NET_LASER_TARGETS)
+/obj/structure/machinery/computer/cameras/dropship/three
+ name = "\improper 'Saipan' camera controls"
+ network = list(CAMERA_NET_RESEARCH, CAMERA_NET_LASER_TARGETS)
+
#undef DEFAULT_MAP_SIZE
diff --git a/code/game/machinery/computer/communications.dm b/code/game/machinery/computer/communications.dm
index 2e6922e43a85..8d3f78cb1857 100644
--- a/code/game/machinery/computer/communications.dm
+++ b/code/game/machinery/computer/communications.dm
@@ -134,7 +134,7 @@
to_chat(usr, SPAN_WARNING("Please allow at least [COOLDOWN_COMM_MESSAGE_LONG*0.1] second\s to pass between announcements."))
return FALSE
var/input = stripped_multiline_input(usr, "Please write a message to announce to the station crew.", "Priority Announcement", "")
- if(!input || authenticated != 2 || world.time < cooldown_message + COOLDOWN_COMM_MESSAGE_LONG || !(usr in view(1,src)))
+ if(!input || authenticated != 2 || world.time < cooldown_message + COOLDOWN_COMM_MESSAGE_LONG || !(usr in dview(1, src)))
return FALSE
marine_announcement(input)
@@ -302,7 +302,7 @@
to_chat(usr, SPAN_WARNING("Arrays recycling. Please stand by."))
return FALSE
var/input = stripped_input(usr, "Please choose a message to transmit to USCM. Please be aware that this process is very expensive, and abuse will lead to termination. Transmission does not guarantee a response. There is a small delay before you may send another message. Be clear and concise.", "To abort, send an empty message.", "")
- if(!input || !(usr in view(1,src)) || authenticated != 2 || world.time < cooldown_central + COOLDOWN_COMM_CENTRAL) return FALSE
+ if(!input || !(usr in dview(1, src)) || authenticated != 2 || world.time < cooldown_central + COOLDOWN_COMM_CENTRAL) return FALSE
high_command_announce(input, usr)
to_chat(usr, SPAN_NOTICE("Message transmitted."))
diff --git a/code/game/machinery/computer/computer.dm b/code/game/machinery/computer/computer.dm
index bfa64ab174ed..bb434e8ca114 100644
--- a/code/game/machinery/computer/computer.dm
+++ b/code/game/machinery/computer/computer.dm
@@ -99,7 +99,7 @@
if(!deconstructible)
to_chat(user, SPAN_WARNING("You can't figure out how to deconstruct [src]..."))
return
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(user, SPAN_WARNING("You don't know how to deconstruct [src]..."))
return
playsound(src.loc, 'sound/items/Screwdriver.ogg', 25, 1)
diff --git a/code/game/machinery/computer/demo_sim.dm b/code/game/machinery/computer/demo_sim.dm
index f633e8f351d4..2b2ca9fda775 100644
--- a/code/game/machinery/computer/demo_sim.dm
+++ b/code/game/machinery/computer/demo_sim.dm
@@ -11,7 +11,7 @@
/obj/structure/machinery/computer/demo_sim/attackby(obj/item/B, mob/living/user)
if(inoperable())
return
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(user, SPAN_WARNING("You don't know how to configure [src]."))
return
if(configuration)
diff --git a/code/game/machinery/computer/dropship_weapons.dm b/code/game/machinery/computer/dropship_weapons.dm
index 7f8f4f2b3850..6f9862d3120a 100644
--- a/code/game/machinery/computer/dropship_weapons.dm
+++ b/code/game/machinery/computer/dropship_weapons.dm
@@ -890,6 +890,12 @@
firemission_envelope = new /datum/cas_fire_envelope/uscm_dropship()
shuttle_tag = DROPSHIP_NORMANDY
+/obj/structure/machinery/computer/dropship_weapons/dropship3
+ name = "\improper 'Saipan' weapons controls"
+ req_one_access = list(ACCESS_MARINE_LEADER, ACCESS_MARINE_DROPSHIP, ACCESS_WY_FLIGHT)
+ firemission_envelope = new /datum/cas_fire_envelope/uscm_dropship()
+ shuttle_tag = DROPSHIP_SAIPAN
+
/obj/structure/machinery/computer/dropship_weapons/Destroy()
. = ..()
QDEL_NULL(firemission_envelope)
diff --git a/code/game/machinery/computer/groundside_operations.dm b/code/game/machinery/computer/groundside_operations.dm
index 591c63a76bee..376357a49174 100644
--- a/code/game/machinery/computer/groundside_operations.dm
+++ b/code/game/machinery/computer/groundside_operations.dm
@@ -235,7 +235,7 @@
to_chat(usr, SPAN_WARNING("Access denied."))
return
var/input = stripped_multiline_input(usr, "Please write a message to announce to the station crew.", "Priority Announcement", "")
- if(!input || !is_announcement_active || !(usr in view(1,src)))
+ if(!input || !is_announcement_active || !(usr in dview(1, src)))
return FALSE
is_announcement_active = FALSE
diff --git a/code/game/machinery/computer/medical.dm b/code/game/machinery/computer/medical.dm
index 40b23667636f..ac6de251ab45 100644
--- a/code/game/machinery/computer/medical.dm
+++ b/code/game/machinery/computer/medical.dm
@@ -93,8 +93,12 @@
if ((istype(src.active2, /datum/data/record) && GLOB.data_core.medical.Find(src.active2)))
dat += " \n
Medical Data \nBlood Type: [active2.fields["b_type"]] \n \nMinor Disabilities: [active2.fields["mi_dis"]] \nDetails: [active2.fields["mi_dis_d"]] \n \nMajor Disabilities: [active2.fields["ma_dis"]] \nDetails: [active2.fields["ma_dis_d"]] \n \nAllergies: [active2.fields["alg"]] \nDetails: [active2.fields["alg_d"]] \n \nCurrent Diseases: [active2.fields["cdi"]] (per disease info placed in log/comment section) \nDetails: [active2.fields["cdi_d"]] \n \nImportant Notes: \n\t[decode(src.active2.fields["notes"])] \n \nComments/Log "
var/counter = 1
- while(src.active2.fields[text("com_[]", counter)])
- dat += text("[]Delete Entry ", src.active2.fields[text("com_[]", counter)], src, counter)
+ while(active2.fields[text("com_[]", counter)])
+ var/current_index = text("com_[]", counter)
+ if(findtext(active2.fields[current_index], " "))
+ dat += text("[]Delete Entry ", active2.fields[current_index], src, counter)
+ else
+ dat += text("[] ", active2.fields[current_index])
counter++
dat += text("Add Entry ", src)
dat += text("Delete Record (Medical Only) ", src)
@@ -209,142 +213,156 @@
GLOB.data_core.medical -= R
qdel(R)
//Foreach goto(494)
- src.temp = "All records deleted."
+ temp = "All records deleted."
+ msg_admin_niche("[key_name_admin(usr)] deleted all medical records.")
if (href_list["field"])
- var/a1 = src.active1
- var/a2 = src.active2
+ var/a1 = active1
+ var/a2 = active2
switch(href_list["field"])
if("sex")
- if (istype(src.active1, /datum/data/record))
- if (src.active1.fields["sex"] == "Male")
- src.active1.fields["sex"] = "Female"
- else
- src.active1.fields["sex"] = "Male"
+ if (istype(active1, /datum/data/record))
+ var/new_value = "Male"
+ if (active1.fields["sex"] == "Male")
+ new_value = "Female"
+ active1.fields["sex"] = new_value
+ msg_admin_niche("[key_name_admin(usr)] set the medical record sex for [active1.fields["name"]] ([active1.fields["id"]]) to [new_value].")
if("age")
- if (istype(src.active1, /datum/data/record))
- var/t1 = input("Please input age:", "Med. records", src.active1.fields["age"], null) as num
- if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.is_mob_restrained() || (!in_range(src, usr) && (!isRemoteControlling(usr))) || src.active1 != a1))
+ if (istype(active1, /datum/data/record))
+ var/new_value = input("Please input age:", "Med. records", active1.fields["age"], null) as num
+ if ((!( new_value ) || !( authenticated ) || usr.stat || usr.is_mob_restrained() || (!in_range(src, usr) && (!isRemoteControlling(usr))) || active1 != a1))
return
- src.active1.fields["age"] = t1
+ active1.fields["age"] = new_value
+ msg_admin_niche("[key_name_admin(usr)] set the medical record age for [active1.fields["name"]] ([active1.fields["id"]]) to [new_value].")
if("mi_dis")
- if (istype(src.active2, /datum/data/record))
- var/t1 = copytext(trim(strip_html(input("Please input minor disabilities list:", "Med. records", src.active2.fields["mi_dis"], null) as text)),1,MAX_MESSAGE_LEN)
- if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.is_mob_restrained() || (!in_range(src, usr) && (!isRemoteControlling(usr))) || src.active2 != a2))
+ if (istype(active2, /datum/data/record))
+ var/new_value = copytext(trim(strip_html(input("Please input minor disabilities list:", "Med. records", active2.fields["mi_dis"], null) as text)),1,MAX_MESSAGE_LEN)
+ if ((!( new_value ) || !( authenticated ) || usr.stat || usr.is_mob_restrained() || (!in_range(src, usr) && (!isRemoteControlling(usr))) || active2 != a2))
return
- src.active2.fields["mi_dis"] = t1
+ active2.fields["mi_dis"] = new_value
+ msg_admin_niche("[key_name_admin(usr)] set the medical record minor disabilities list for [active1.fields["name"]] ([active1.fields["id"]]) to [new_value].")
if("mi_dis_d")
- if (istype(src.active2, /datum/data/record))
- var/t1 = copytext(trim(strip_html(input("Please summarize minor dis.:", "Med. records", src.active2.fields["mi_dis_d"], null) as message)),1,MAX_MESSAGE_LEN)
- if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.is_mob_restrained() || (!in_range(src, usr) && (!isRemoteControlling(usr))) || src.active2 != a2))
+ if (istype(active2, /datum/data/record))
+ var/new_value = copytext(trim(strip_html(input("Please summarize minor dis.:", "Med. records", active2.fields["mi_dis_d"], null) as message)),1,MAX_MESSAGE_LEN)
+ if ((!( new_value ) || !( authenticated ) || usr.stat || usr.is_mob_restrained() || (!in_range(src, usr) && (!isRemoteControlling(usr))) || active2 != a2))
return
- src.active2.fields["mi_dis_d"] = t1
+ active2.fields["mi_dis_d"] = new_value
+ msg_admin_niche("[key_name_admin(usr)] set the medical record minor disabilities desc for [active1.fields["name"]] ([active1.fields["id"]]) to [new_value].")
if("ma_dis")
- if (istype(src.active2, /datum/data/record))
- var/t1 = copytext(trim(strip_html(input("Please input major diabilities list:", "Med. records", src.active2.fields["ma_dis"], null) as text)),1,MAX_MESSAGE_LEN)
- if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.is_mob_restrained() || (!in_range(src, usr) && (!isRemoteControlling(usr))) || src.active2 != a2))
+ if (istype(active2, /datum/data/record))
+ var/new_value = copytext(trim(strip_html(input("Please input major diabilities list:", "Med. records", active2.fields["ma_dis"], null) as text)),1,MAX_MESSAGE_LEN)
+ if ((!( new_value ) || !( authenticated ) || usr.stat || usr.is_mob_restrained() || (!in_range(src, usr) && (!isRemoteControlling(usr))) || active2 != a2))
return
- src.active2.fields["ma_dis"] = t1
+ active2.fields["ma_dis"] = new_value
+ msg_admin_niche("[key_name_admin(usr)] set the medical record major disabilities list for [active1.fields["name"]] ([active1.fields["id"]]) to [new_value].")
if("ma_dis_d")
- if (istype(src.active2, /datum/data/record))
- var/t1 = copytext(trim(strip_html(input("Please summarize major dis.:", "Med. records", src.active2.fields["ma_dis_d"], null) as message)),1,MAX_MESSAGE_LEN)
- if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.is_mob_restrained() || (!in_range(src, usr) && (!isRemoteControlling(usr))) || src.active2 != a2))
+ if (istype(active2, /datum/data/record))
+ var/new_value = copytext(trim(strip_html(input("Please summarize major dis.:", "Med. records", active2.fields["ma_dis_d"], null) as message)),1,MAX_MESSAGE_LEN)
+ if ((!( new_value ) || !( authenticated ) || usr.stat || usr.is_mob_restrained() || (!in_range(src, usr) && (!isRemoteControlling(usr))) || active2 != a2))
return
- src.active2.fields["ma_dis_d"] = t1
+ active2.fields["ma_dis_d"] = new_value
+ msg_admin_niche("[key_name_admin(usr)] set the medical record major disabilities desc for [active1.fields["name"]] ([active1.fields["id"]]) to [new_value].")
if("alg")
- if (istype(src.active2, /datum/data/record))
- var/t1 = copytext(trim(strip_html(input("Please state allergies:", "Med. records", src.active2.fields["alg"], null) as text)),1,MAX_MESSAGE_LEN)
- if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.is_mob_restrained() || (!in_range(src, usr) && (!isRemoteControlling(usr))) || src.active2 != a2))
+ if (istype(active2, /datum/data/record))
+ var/new_value = copytext(trim(strip_html(input("Please state allergies:", "Med. records", active2.fields["alg"], null) as text)),1,MAX_MESSAGE_LEN)
+ if ((!( new_value ) || !( authenticated ) || usr.stat || usr.is_mob_restrained() || (!in_range(src, usr) && (!isRemoteControlling(usr))) || active2 != a2))
return
- src.active2.fields["alg"] = t1
+ active2.fields["alg"] = new_value
+ msg_admin_niche("[key_name_admin(usr)] set the medical record allergies list for [active1.fields["name"]] ([active1.fields["id"]]) to [new_value].")
if("alg_d")
- if (istype(src.active2, /datum/data/record))
- var/t1 = copytext(trim(strip_html(input("Please summarize allergies:", "Med. records", src.active2.fields["alg_d"], null) as message)),1,MAX_MESSAGE_LEN)
- if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.is_mob_restrained() || (!in_range(src, usr) && (!isRemoteControlling(usr))) || src.active2 != a2))
+ if (istype(active2, /datum/data/record))
+ var/new_value = copytext(trim(strip_html(input("Please summarize allergies:", "Med. records", active2.fields["alg_d"], null) as message)),1,MAX_MESSAGE_LEN)
+ if ((!( new_value ) || !( authenticated ) || usr.stat || usr.is_mob_restrained() || (!in_range(src, usr) && (!isRemoteControlling(usr))) || active2 != a2))
return
- src.active2.fields["alg_d"] = t1
+ active2.fields["alg_d"] = new_value
+ msg_admin_niche("[key_name_admin(usr)] set the medical record allergies desc for [active1.fields["name"]] ([active1.fields["id"]]) to [new_value].")
if("cdi")
- if (istype(src.active2, /datum/data/record))
- var/t1 = copytext(trim(strip_html(input("Please state diseases:", "Med. records", src.active2.fields["cdi"], null) as text)),1,MAX_MESSAGE_LEN)
- if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.is_mob_restrained() || (!in_range(src, usr) && (!isRemoteControlling(usr))) || src.active2 != a2))
+ if (istype(active2, /datum/data/record))
+ var/new_value = copytext(trim(strip_html(input("Please state diseases:", "Med. records", active2.fields["cdi"], null) as text)),1,MAX_MESSAGE_LEN)
+ if ((!( new_value ) || !( authenticated ) || usr.stat || usr.is_mob_restrained() || (!in_range(src, usr) && (!isRemoteControlling(usr))) || active2 != a2))
return
- src.active2.fields["cdi"] = t1
+ active2.fields["cdi"] = new_value
+ msg_admin_niche("[key_name_admin(usr)] set the medical record disabilities list for [active1.fields["name"]] ([active1.fields["id"]]) to [new_value].")
if("cdi_d")
- if (istype(src.active2, /datum/data/record))
- var/t1 = copytext(trim(strip_html(input("Please summarize diseases:", "Med. records", src.active2.fields["cdi_d"], null) as message)),1,MAX_MESSAGE_LEN)
- if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.is_mob_restrained() || (!in_range(src, usr) && (!isRemoteControlling(usr))) || src.active2 != a2))
+ if (istype(active2, /datum/data/record))
+ var/new_value = copytext(trim(strip_html(input("Please summarize diseases:", "Med. records", active2.fields["cdi_d"], null) as message)),1,MAX_MESSAGE_LEN)
+ if ((!( new_value ) || !( authenticated ) || usr.stat || usr.is_mob_restrained() || (!in_range(src, usr) && (!isRemoteControlling(usr))) || active2 != a2))
return
- src.active2.fields["cdi_d"] = t1
+ active2.fields["cdi_d"] = new_value
+ msg_admin_niche("[key_name_admin(usr)] set the medical record disabilities desc for [active1.fields["name"]] ([active1.fields["id"]]) to [new_value].")
if("notes")
- if (istype(src.active2, /datum/data/record))
- var/t1 = copytext(html_encode(trim(input("Please summarize notes:", "Med. records", html_decode(src.active2.fields["notes"]), null) as message)),1,MAX_MESSAGE_LEN)
- if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.is_mob_restrained() || (!in_range(src, usr) && (!isRemoteControlling(usr))) || src.active2 != a2))
+ if (istype(active2, /datum/data/record))
+ var/new_value = copytext(html_encode(trim(input("Please summarize notes:", "Med. records", html_decode(active2.fields["notes"]), null) as message)),1,MAX_MESSAGE_LEN)
+ if ((!( new_value ) || !( authenticated ) || usr.stat || usr.is_mob_restrained() || (!in_range(src, usr) && (!isRemoteControlling(usr))) || active2 != a2))
return
- src.active2.fields["notes"] = t1
+ active2.fields["notes"] = new_value
+ msg_admin_niche("[key_name_admin(usr)] set the medical record notes for [active1.fields["name"]] ([active1.fields["id"]]) to [new_value].")
if("p_stat")
- if (istype(src.active1, /datum/data/record))
- src.temp = text("Physical Condition: \n\t*Deceased* \n\t*SSD* \n\tActive \n\tPhysically Unfit \n\tDisabled ", src, src, src, src, src)
+ if (istype(active1, /datum/data/record))
+ temp = text("Physical Condition: \n\t*Deceased* \n\t*SSD* \n\tActive \n\tPhysically Unfit \n\tDisabled ", src, src, src, src, src)
if("m_stat")
- if (istype(src.active1, /datum/data/record))
- src.temp = text("Mental Condition: \n\t*Insane* \n\t*Unstable* \n\t*Watch* \n\tStable ", src, src, src, src)
+ if (istype(active1, /datum/data/record))
+ temp = text("Mental Condition: \n\t*Insane* \n\t*Unstable* \n\t*Watch* \n\tStable ", src, src, src, src)
if("b_type")
- if (istype(src.active2, /datum/data/record))
- src.temp = text("Blood Type: \n\tA- A+ \n\tB- B+ \n\tAB- AB+ \n\tO- O+ ", src, src, src, src, src, src, src, src)
+ if (istype(active2, /datum/data/record))
+ temp = text("Blood Type: \n\tA- A+ \n\tB- B+ \n\tAB- AB+ \n\tO- O+ ", src, src, src, src, src, src, src, src)
if (href_list["p_stat"])
- if (src.active1)
+ if(istype(active1, /datum/data/record))
switch(href_list["p_stat"])
if("deceased")
- src.active1.fields["p_stat"] = "*Deceased*"
+ active1.fields["p_stat"] = "*Deceased*"
if("ssd")
- src.active1.fields["p_stat"] = "*SSD*"
+ active1.fields["p_stat"] = "*SSD*"
if("active")
- src.active1.fields["p_stat"] = "Active"
+ active1.fields["p_stat"] = "Active"
if("unfit")
- src.active1.fields["p_stat"] = "Physically Unfit"
+ active1.fields["p_stat"] = "Physically Unfit"
if("disabled")
- src.active1.fields["p_stat"] = "Disabled"
+ active1.fields["p_stat"] = "Disabled"
+ msg_admin_niche("[key_name_admin(usr)] set the medical record physical state for [active1.fields["name"]] ([active1.fields["id"]]) to [href_list["p_stat"]].")
if (href_list["m_stat"])
- if (src.active1)
+ if(istype(active1, /datum/data/record))
switch(href_list["m_stat"])
if("insane")
- src.active1.fields["m_stat"] = "*Insane*"
+ active1.fields["m_stat"] = "*Insane*"
if("unstable")
- src.active1.fields["m_stat"] = "*Unstable*"
+ active1.fields["m_stat"] = "*Unstable*"
if("watch")
- src.active1.fields["m_stat"] = "*Watch*"
+ active1.fields["m_stat"] = "*Watch*"
if("stable")
- src.active1.fields["m_stat"] = "Stable"
-
+ active1.fields["m_stat"] = "Stable"
+ msg_admin_niche("[key_name_admin(usr)] set the medical record mental state for [active1.fields["name"]] ([active1.fields["id"]]) to [href_list["m_stat"]].")
if (href_list["b_type"])
- if (src.active2)
+ if(istype(active2, /datum/data/record))
switch(href_list["b_type"])
if("an")
- src.active2.fields["b_type"] = "A-"
+ active2.fields["b_type"] = "A-"
if("bn")
- src.active2.fields["b_type"] = "B-"
+ active2.fields["b_type"] = "B-"
if("abn")
- src.active2.fields["b_type"] = "AB-"
+ active2.fields["b_type"] = "AB-"
if("on")
- src.active2.fields["b_type"] = "O-"
+ active2.fields["b_type"] = "O-"
if("ap")
- src.active2.fields["b_type"] = "A+"
+ active2.fields["b_type"] = "A+"
if("bp")
- src.active2.fields["b_type"] = "B+"
+ active2.fields["b_type"] = "B+"
if("abp")
- src.active2.fields["b_type"] = "AB+"
+ active2.fields["b_type"] = "AB+"
if("op")
- src.active2.fields["b_type"] = "O+"
-
+ active2.fields["b_type"] = "O+"
+ msg_admin_niche("[key_name_admin(usr)] set the medical record blood type for [active1.fields["name"]] ([active1.fields["id"]]) to [active2.fields["b_type"]].")
if (href_list["del_r"])
- if (active2)
- src.temp = text("Are you sure you wish to delete the record (Medical Portion Only)? \n\tYes \n\tNo ", src, src)
+ if(istype(active2, /datum/data/record))
+ temp = text("Are you sure you wish to delete the record (Medical Portion Only)? \n\tYes \n\tNo ", src, src)
if (href_list["del_r2"])
+ msg_admin_niche("[key_name_admin(usr)] deleted the medical record for [active1.fields["name"]] ([active1.fields["id"]]).")
QDEL_NULL(active2)
if (href_list["d_rec"])
@@ -381,20 +399,22 @@
src.screen = 4
if (href_list["add_c"])
- if (!( istype(src.active2, /datum/data/record) ))
+ if (!( istype(active2, /datum/data/record) ))
return
- var/a2 = src.active2
- var/t1 = copytext(trim(strip_html(input("Add Comment:", "Med. records", null, null) as message)),1,MAX_MESSAGE_LEN)
- if ((!( t1 ) || !( src.authenticated ) || usr.stat || usr.is_mob_restrained() || (!in_range(src, usr) && (!isRemoteControlling(usr))) || src.active2 != a2))
+ var/a2 = active2
+ var/new_value = copytext(trim(strip_html(input("Add Comment:", "Med. records", null, null) as message)),1,MAX_MESSAGE_LEN)
+ if ((!( new_value ) || !( authenticated ) || usr.stat || usr.is_mob_restrained() || (!in_range(src, usr) && (!isRemoteControlling(usr))) || active2 != a2))
return
var/counter = 1
- while(src.active2.fields[text("com_[]", counter)])
+ while(active2.fields[text("com_[]", counter)])
counter++
- src.active2.fields[text("com_[counter]")] = text("Made by [authenticated] ([rank]) on [time2text(world.realtime, "DDD MMM DD hh:mm:ss")], [GLOB.game_year] [t1]")
+ active2.fields[text("com_[counter]")] = text("Made by [authenticated] ([rank]) on [time2text(world.realtime, "DDD MMM DD hh:mm:ss")], [GLOB.game_year] [new_value]")
+ msg_admin_niche("[key_name_admin(usr)] added a medical comment for [active1.fields["name"]] ([active1.fields["id"]]): [new_value].")
if (href_list["del_c"])
- if ((istype(src.active2, /datum/data/record) && src.active2.fields[text("com_[]", href_list["del_c"])]))
- src.active2.fields[text("com_[]", href_list["del_c"])] = "Deleted "
+ if ((istype(active2, /datum/data/record) && active2.fields[text("com_[]", href_list["del_c"])]))
+ msg_admin_niche("[key_name_admin(usr)] deleted a medical comment for [active1.fields["name"]] ([active1.fields["id"]]): [active2.fields[text("com_[]", href_list["del_c"])]].")
+ active2.fields[text("com_[]", href_list["del_c"])] = text("Deleted entry by [authenticated] ([rank]) on [time2text(world.realtime, "DDD MMM DD hh:mm:ss")], [GLOB.game_year]")
if (href_list["search"])
var/t1 = stripped_input(usr, "Search String: (Name, DNA, or ID)", "Med. records")
@@ -442,7 +462,7 @@
else
P.info += "Medical Record Lost! "
P.info += ""
- P.info += text("This report was printed by [] []. The [MAIN_SHIP_NAME],[]/[], [] \n ",last_user_rank,last_user_name,time2text(world.timeofday, "MM/DD"),GLOB.game_year,worldtime2text())
+ P.info += text("This report was printed by [] []. The [MAIN_SHIP_NAME],[]/[], [] \n ",rank,authenticated,time2text(world.timeofday, "MM/DD"),GLOB.game_year,worldtime2text())
src.printing = null
if(href_list["print_bs"])//Prints latest body scan
@@ -465,7 +485,7 @@
break
else
P.info += "No scan on record."
- P.info += text("This report was printed by [] []. The [MAIN_SHIP_NAME], []/[], [] \n ",last_user_rank,last_user_name,time2text(world.timeofday, "MM/DD"),GLOB.game_year,worldtime2text())
+ P.info += text("This report was printed by [] []. The [MAIN_SHIP_NAME], []/[], [] \n ",rank,authenticated,time2text(world.timeofday, "MM/DD"),GLOB.game_year,worldtime2text())
src.printing = null
@@ -483,20 +503,27 @@
if(prob(10/severity))
switch(rand(1,6))
if(1)
+ msg_admin_niche("The medical record name of [R.fields["name"]] was scrambled!")
R.fields["name"] = "[pick(pick(GLOB.first_names_male), pick(GLOB.first_names_female))] [pick(GLOB.last_names)]"
if(2)
R.fields["sex"] = pick("Male", "Female")
+ msg_admin_niche("The medical record sex of [R.fields["name"]] was scrambled!")
if(3)
R.fields["age"] = rand(5, 85)
+ msg_admin_niche("The medical record age of [R.fields["name"]] was scrambled!")
if(4)
R.fields["b_type"] = pick("A-", "B-", "AB-", "O-", "A+", "B+", "AB+", "O+")
+ msg_admin_niche("The medical record blood type of [R.fields["name"]] was scrambled!")
if(5)
R.fields["p_stat"] = pick("*SSD*", "Active", "Physically Unfit", "Disabled")
+ msg_admin_niche("The medical record physical state of [R.fields["name"]] was scrambled!")
if(6)
R.fields["m_stat"] = pick("*Insane*", "*Unstable*", "*Watch*", "Stable")
+ msg_admin_niche("The medical record mental state of [R.fields["name"]] was scrambled!")
continue
else if(prob(1))
+ msg_admin_niche("The medical record of [R.fields["name"]] was lost!")
GLOB.data_core.medical -= R
qdel(R)
continue
diff --git a/code/game/machinery/computer/research.dm b/code/game/machinery/computer/research.dm
index b51da245844e..de4d3edf927c 100644
--- a/code/game/machinery/computer/research.dm
+++ b/code/game/machinery/computer/research.dm
@@ -59,36 +59,24 @@
GLOB.chemical_data.update_credits(cred.credit_value)
visible_message(SPAN_NOTICE("[user] inserts [cred] in [src], collecting [cred.credit_value] points from sales."))
qdel(cred)
- //Clearance Updating
+ //Clearance Card Updating
if(!istype(B, /obj/item/card/id))
return
var/obj/item/card/id/silver/clearance_badge/card = B
if(!istype(card))
- visible_message(SPAN_NOTICE("[user] swipes their ID card on \the [src], but it is refused."))
+ visible_message(SPAN_NOTICE("[user] swipes their ID card on [src], but it is refused."))
return
- if(card.clearance_access <= GLOB.chemical_data.clearance_level || (card.clearance_access == 6 && GLOB.chemical_data.clearance_level >= 5 && GLOB.chemical_data.clearance_x_access))
- visible_message(SPAN_NOTICE("[user] swipes the clearance card on [src], but nothing happens."))
+ if(!card.check_biometrics(user))
+ visible_message(SPAN_WARNING("WARNING: ILLEGAL CLEARANCE USER DETECTED. ABORTING."))
return
- if(user.real_name != card.registered_name)
- visible_message(SPAN_WARNING("WARNING: ILLEGAL CLEARANCE USER DETECTED. CARD DATA HAS BEEN WIPED."))
- card.clearance_access = 0
- return
-
- var/give_level
- var/give_x = FALSE
- if(card.clearance_access == 6)
- give_level = 5
- give_x = TRUE
- else
- give_level = card.clearance_access
- GLOB.chemical_data.clearance_level = give_level
- if(give_x)
- GLOB.chemical_data.clearance_x_access = TRUE
- GLOB.chemical_data.reached_x_access = TRUE
+ var/credits_to_add = max(card.credits_to_give - GLOB.chemical_data.credits_gained, 0)
+ if(credits_to_add)
+ GLOB.chemical_data.update_credits(credits_to_add)
+ GLOB.chemical_data.credits_gained += credits_to_add
- visible_message(SPAN_NOTICE("[user] swipes their ID card on \the [src], updating the clearance to level [give_level][give_x ? "X" : ""]."))
- msg_admin_niche("[key_name(user)] has updated the research clearance to level [give_level][give_x ? "X" : ""].")
+ visible_message(SPAN_NOTICE("[user] swipes their ID card on [src], granting [credits_to_add] credits."))
+ msg_admin_niche("[key_name(user)] has swiped a clearance card to give [credits_to_add] credits to research.")
return
/obj/structure/machinery/computer/research/ui_state(mob/user)
@@ -181,30 +169,6 @@
if(5)
new /obj/item/paper/research_notes/unique/tier_five/(photocopier.loc)
max_clearance = 5
- if("purchase_document")
- if(!photocopier)
- return
- var/purchase_tier = floor(text2num(params["purchase_document"]))
- if(purchase_tier <= 0 || purchase_tier > 5)
- return
- if(purchase_tier > GLOB.chemical_data.clearance_level)
- return
- var/purchase_cost = base_purchase_cost + purchase_tier * 2
- if(purchase_cost <= GLOB.chemical_data.rsc_credits)
- GLOB.chemical_data.update_credits(purchase_cost * -1)
- var/obj/item/paper/research_notes/unique/N
- switch(purchase_tier)
- if(1)
- N = new /obj/item/paper/research_notes/unique/tier_one/(photocopier.loc)
- if(2)
- N = new /obj/item/paper/research_notes/unique/tier_two/(photocopier.loc)
- if(3)
- N = new /obj/item/paper/research_notes/unique/tier_three/(photocopier.loc)
- if(4)
- N = new /obj/item/paper/research_notes/unique/tier_four/(photocopier.loc)
- else
- N = new /obj/item/paper/research_notes/unique/tier_five/(photocopier.loc)
- visible_message(SPAN_NOTICE("Research report for [N.data.name] has been purchased."))
if("publish_document")
var/print_type = params["print_type"]
var/print_title = params["print_title"]
diff --git a/code/game/machinery/computer/security.dm b/code/game/machinery/computer/security.dm
index b3892de24413..ae6ddc3d411e 100644
--- a/code/game/machinery/computer/security.dm
+++ b/code/game/machinery/computer/security.dm
@@ -355,16 +355,17 @@ What a mess.*/
GLOB.data_core.security -= R
qdel(R)
temp = "All Security records deleted."
+ msg_admin_niche("[key_name_admin(usr)] deleted all security records.")
if ("Add Entry")
if (!(istype(active2, /datum/data/record)))
return
var/a2 = active2
- var/t1 = copytext(trim(strip_html(input("Your name and time will be added to this new comment.", "Add a comment", null, null) as message)),1,MAX_MESSAGE_LEN)
- if((!t1 || usr.stat || usr.is_mob_restrained() || (!in_range(src, usr) && (!isSilicon(usr))) || active2 != a2))
+ var/new_value = copytext(trim(strip_html(input("Your name and time will be added to this new comment.", "Add a comment", null, null) as message)),1,MAX_MESSAGE_LEN)
+ if((!new_value || usr.stat || usr.is_mob_restrained() || (!in_range(src, usr) && (!isSilicon(usr))) || active2 != a2))
return
var/created_at = text("[] [] []", time2text(world.realtime, "MMM DD"), time2text(world.time, "[worldtime2text()]:ss"), GLOB.game_year)
- var/new_comment = list("entry" = t1, "created_by" = list("name" = "", "rank" = ""), "deleted_by" = null, "deleted_at" = null, "created_at" = created_at)
+ var/new_comment = list("entry" = new_value, "created_by" = list("name" = "", "rank" = ""), "deleted_by" = null, "deleted_at" = null, "created_at" = created_at)
if(istype(usr,/mob/living/carbon/human))
var/mob/living/carbon/human/U = usr
new_comment["created_by"] = list("name" = U.get_authentification_name(), "rank" = U.get_assignment())
@@ -374,6 +375,7 @@ What a mess.*/
var/new_com_i = length(active2.fields["comments"]) + 1
active2.fields["comments"]["[new_com_i]"] = new_comment
to_chat(usr, text("You have added a new comment to the Security Record of [].", active2.fields["name"]))
+ msg_admin_niche("[key_name_admin(usr)] added a security comment for [active1.fields["name"]] ([active1.fields["id"]]): [new_value].")
if ("Delete Entry")
if(!islist(active2.fields["comments"]))
@@ -406,23 +408,28 @@ What a mess.*/
switch(href_list["field"])
if("name")
if (istype(active1, /datum/data/record))
- var/t1 = reject_bad_name(input(usr, "Please input name:", "Secure. records", active1.fields["name"]) as text|null)
- if (!t1 || active1 != a1)
+ var/new_value = reject_bad_name(input(usr, "Please input name:", "Secure. records", active1.fields["name"]) as text|null)
+ if (!new_value || active1 != a1)
return
- message_admins("[key_name(usr)] has changed the record name of [active1.fields["name"]] to [t1]")
- active1.fields["name"] = t1
+ message_admins("[key_name(usr)] changed the security record name of [active1.fields["name"]] to [new_value]")
+ active1.fields["name"] = new_value
+
if("sex")
if (istype(active1, /datum/data/record))
+ var/new_value = "Male"
if (active1.fields["sex"] == "Male")
- active1.fields["sex"] = "Female"
- else
- active1.fields["sex"] = "Male"
+ new_value = "Female"
+ active1.fields["sex"] = new_value
+ msg_admin_niche("[key_name(usr)] changed the security record sex of [active1.fields["name"]] to [new_value]")
+
if("age")
if (istype(active1, /datum/data/record))
- var/t1 = input("Please input age:", "Secure. records", active1.fields["age"], null) as num
- if (!t1 || active1 != a1)
+ var/new_value = input("Please input age:", "Secure. records", active1.fields["age"], null) as num
+ if (!new_value || active1 != a1)
return
- active1.fields["age"] = t1
+ active1.fields["age"] = new_value
+ msg_admin_niche("[key_name(usr)] changed the security record age of [active1.fields["name"]] to [new_value]")
+
if("criminal")
if (istype(active2, /datum/data/record))
temp = "Criminal Status: "
@@ -434,22 +441,25 @@ What a mess.*/
temp += "Suspect "
temp += "NJP "
temp += ""
+
if("rank")
//This was so silly before the change. Now it actually works without beating your head against the keyboard. /N
if (istype(active1, /datum/data/record) && GLOB.uscm_highcom_paygrades.Find(rank))
temp = "Occupation: "
temp += ""
for(var/rank in GLOB.joblist)
- temp += "[rank] "
+ temp += "[rank] "
temp += " "
else
alert(usr, "You do not have the required rank to do this!")
+
if("species")
if (istype(active1, /datum/data/record))
- var/t1 = copytext(trim(strip_html(input("Please enter race:", "General records", active1.fields["species"], null) as message)),1,MAX_MESSAGE_LEN)
- if (!t1 || active1 != a1)
+ var/new_value = copytext(trim(strip_html(input("Please enter race:", "General records", active1.fields["species"], null) as message)),1,MAX_MESSAGE_LEN)
+ if (!new_value || active1 != a1)
return
- active1.fields["species"] = t1
+ active1.fields["species"] = new_value
+ msg_admin_niche("[key_name(usr)] changed the security record species of [active1.fields["name"]] to [new_value]")
//TEMPORARY MENU FUNCTIONS
@@ -457,14 +467,17 @@ What a mess.*/
temp=null
switch(href_list["choice"])
if ("Change Rank")
- if (active1)
- active1.fields["rank"] = href_list["rank"]
- if(href_list["rank"] in GLOB.joblist)
- active1.fields["real_rank"] = href_list["real_rank"]
+ if(istype(active1, /datum/data/record) && GLOB.uscm_highcom_paygrades.Find(rank))
+ var/new_value = href_list["rank"]
+ active1.fields["rank"] = new_value
+ if(new_value in GLOB.joblist)
+ active1.fields["real_rank"] = new_value
+ message_admins("[key_name(usr)] changed the security record sex of [active1.fields["name"]] to [new_value]")
if ("Change Criminal Status")
- if (active2)
- switch(href_list["criminal2"])
+ if(istype(active2, /datum/data/record))
+ var/new_value = href_list["criminal2"]
+ switch(new_value)
if("none")
active2.fields["criminal"] = "None"
if("arrest")
@@ -481,6 +494,8 @@ What a mess.*/
for(var/mob/living/carbon/human/H in GLOB.human_mob_list)
H.sec_hud_set_security_status()
+ message_admins("[key_name(usr)] changed the security record criminal status of [active1.fields["name"]] to [new_value]")
+
add_fingerprint(usr)
updateUsrDialog()
return
@@ -521,20 +536,27 @@ What a mess.*/
if(prob(10/severity))
switch(rand(1,6))
if(1)
+ msg_admin_niche("The security record name of [R.fields["name"]] was scrambled!")
R.fields["name"] = "[pick(pick(GLOB.first_names_male), pick(GLOB.first_names_female))] [pick(GLOB.last_names)]"
if(2)
R.fields["sex"] = pick("Male", "Female")
+ msg_admin_niche("The security record sex of [R.fields["name"]] was scrambled!")
if(3)
R.fields["age"] = rand(5, 85)
+ msg_admin_niche("The security record age of [R.fields["name"]] was scrambled!")
if(4)
R.fields["criminal"] = pick("None", "*Arrest*", "Incarcerated", "Released", "Suspect", "NJP")
+ msg_admin_niche("The security record criminal status of [R.fields["name"]] was scrambled!")
if(5)
R.fields["p_stat"] = pick("*Unconscious*", "Active", "Physically Unfit")
+ msg_admin_niche("The security record physical state of [R.fields["name"]] was scrambled!")
if(6)
R.fields["m_stat"] = pick("*Insane*", "*Unstable*", "*Watch*", "Stable")
+ msg_admin_niche("The security record mental state of [R.fields["name"]] was scrambled!")
continue
else if(prob(1))
+ msg_admin_niche("The security record of [R.fields["name"]] was lost!")
GLOB.data_core.security -= R
qdel(R)
continue
diff --git a/code/game/machinery/computer/skills.dm b/code/game/machinery/computer/skills.dm
index cba8d50791f9..d0ace4d4dfb5 100644
--- a/code/game/machinery/computer/skills.dm
+++ b/code/game/machinery/computer/skills.dm
@@ -259,9 +259,10 @@ What a mess.*/
GLOB.data_core.security -= R
qdel(R)
temp = "All Employment records deleted."
+ msg_admin_niche("[key_name_admin(usr)] deleted all employment records.")
if ("Delete Record (ALL)")
- if (active1)
+ if(istype(active1, /datum/data/record))
temp = "Are you sure you wish to delete the record (ALL)? "
temp += "Yes "
temp += "No "
@@ -275,63 +276,75 @@ What a mess.*/
switch(href_list["field"])
if("name")
if (istype(active1, /datum/data/record))
- var/t1 = reject_bad_name(input("Please input name:", "Secure. records", active1.fields["name"], null) as text)
- if ((!( t1 ) || !length(trim(t1)) || !( authenticated ) || usr.stat || usr.is_mob_restrained() || (!in_range(src, usr) && (!isRemoteControlling(usr)))) || active1 != a1)
+ var/new_value = reject_bad_name(input("Please input name:", "Secure. records", active1.fields["name"], null) as text)
+ if ((!( new_value ) || !length(trim(new_value)) || !( authenticated ) || usr.stat || usr.is_mob_restrained() || (!in_range(src, usr) && (!isRemoteControlling(usr)))) || active1 != a1)
return
- message_admins("[key_name(usr)] has changed the record name of [active1.fields["name"]] to [t1]")
- active1.fields["name"] = t1
+ message_admins("[key_name(usr)] changed the employment record name of [active1.fields["name"]] to [new_value]")
+ active1.fields["name"] = new_value
+
if("id")
if (istype(active1, /datum/data/record))
- var/t1 = copytext(trim(sanitize(input("Please input id:", "Secure. records", active1.fields["id"], null) as text)),1,MAX_MESSAGE_LEN)
- if ((!( t1 ) || !( authenticated ) || usr.stat || usr.is_mob_restrained() || (!in_range(src, usr) && (!isRemoteControlling(usr))) || active1 != a1))
+ var/new_value = copytext(trim(sanitize(input("Please input id:", "Secure. records", active1.fields["id"], null) as text)),1,MAX_MESSAGE_LEN)
+ if ((!( new_value ) || !( authenticated ) || usr.stat || usr.is_mob_restrained() || (!in_range(src, usr) && (!isRemoteControlling(usr))) || active1 != a1))
return
- active1.fields["id"] = t1
+ msg_admin_niche("[key_name_admin(usr)] changed the employment record id for [active1.fields["name"]] ([active1.fields["id"]]) to [new_value].")
+ active1.fields["id"] = new_value
if("sex")
if (istype(active1, /datum/data/record))
+ var/new_value = "Male"
if (active1.fields["sex"] == "Male")
- active1.fields["sex"] = "Female"
- else
- active1.fields["sex"] = "Male"
+ new_value = "Female"
+ active1.fields["sex"] = new_value
+ msg_admin_niche("[key_name_admin(usr)] changed the employment record sex for [active1.fields["name"]] ([active1.fields["id"]]) to [new_value].")
+
if("age")
if (istype(active1, /datum/data/record))
- var/t1 = input("Please input age:", "Secure. records", active1.fields["age"], null) as num
- if ((!( t1 ) || !( authenticated ) || usr.stat || usr.is_mob_restrained() || (!in_range(src, usr) && (!isRemoteControlling(usr))) || active1 != a1))
+ var/new_value = input("Please input age:", "Secure. records", active1.fields["age"], null) as num
+ if ((!( new_value ) || !( authenticated ) || usr.stat || usr.is_mob_restrained() || (!in_range(src, usr) && (!isRemoteControlling(usr))) || active1 != a1))
return
- active1.fields["age"] = t1
+ active1.fields["age"] = new_value
+ msg_admin_niche("[key_name_admin(usr)] changed the employment record age for [active1.fields["name"]] ([active1.fields["id"]]) to [new_value].")
+
if("rank")
+ if(istype(active1, /datum/data/record))
//This was so silly before the change. Now it actually works without beating your head against the keyboard. /N
- if(istype(active1, /datum/data/record) && GLOB.uscm_highcom_paygrades.Find(rank))
- temp = "Occupation: "
- temp += ""
- for(var/rank in GLOB.joblist)
- temp += "[rank] "
- temp += " "
- else
- alert(usr, "You do not have the required rank to do this!")
+ if(GLOB.uscm_highcom_paygrades.Find(rank))
+ temp = "Occupation: "
+ temp += ""
+ for(var/rank in GLOB.joblist)
+ temp += "[rank] "
+ temp += " "
+ else
+ alert(usr, "You do not have the required rank to do this!")
+
if("species")
if (istype(active1, /datum/data/record))
- var/t1 = copytext(trim(sanitize(input("Please enter race:", "General records", active1.fields["species"], null) as message)),1,MAX_MESSAGE_LEN)
- if ((!( t1 ) || !( authenticated ) || usr.stat || usr.is_mob_restrained() || (!in_range(src, usr) && (!isRemoteControlling(usr))) || active1 != a1))
+ var/new_value = copytext(trim(sanitize(input("Please enter race:", "General records", active1.fields["species"], null) as message)),1,MAX_MESSAGE_LEN)
+ if ((!( new_value ) || !( authenticated ) || usr.stat || usr.is_mob_restrained() || (!in_range(src, usr) && (!isRemoteControlling(usr))) || active1 != a1))
return
- active1.fields["species"] = t1
+ active1.fields["species"] = new_value
+ msg_admin_niche("[key_name_admin(usr)] changed the employment record species for [active1.fields["name"]] ([active1.fields["id"]]) to [new_value].")
//TEMPORARY MENU FUNCTIONS
else//To properly clear as per clear screen.
temp=null
switch(href_list["choice"])
if ("Change Rank")
- if (active1)
- active1.fields["rank"] = href_list["rank"]
- if(href_list["rank"] in GLOB.joblist)
- active1.fields["real_rank"] = href_list["real_rank"]
+ if(istype(active1, /datum/data/record) && GLOB.uscm_highcom_paygrades.Find(rank))
+ var/new_value = href_list["rank"]
+ active1.fields["rank"] = new_value
+ if(new_value in GLOB.joblist)
+ active1.fields["real_rank"] = new_value
+ message_admins("[key_name_admin(usr)] changed the employment record rank for [active1.fields["name"]] ([active1.fields["id"]]) to [new_value].")
if ("Delete Record (ALL) Execute")
- if (active1)
+ if(istype(active1, /datum/data/record))
for(var/datum/data/record/R as anything in GLOB.data_core.medical)
if ((R.fields["name"] == active1.fields["name"] || R.fields["id"] == active1.fields["id"]))
GLOB.data_core.medical -= R
qdel(R)
+ msg_admin_niche("[key_name_admin(usr)] deleted all employment records for [active1.fields["name"]] ([active1.fields["id"]]).")
QDEL_NULL(active1)
else
temp = "This function does not appear to be working at the moment. Our apologies."
@@ -349,20 +362,27 @@ What a mess.*/
if(prob(10/severity))
switch(rand(1,6))
if(1)
+ msg_admin_niche("The employment record name of [R.fields["name"]] was scrambled!")
R.fields["name"] = "[pick(pick(GLOB.first_names_male), pick(GLOB.first_names_female))] [pick(GLOB.last_names)]"
if(2)
R.fields["sex"] = pick("Male", "Female")
+ msg_admin_niche("The employment record sex of [R.fields["name"]] was scrambled!")
if(3)
R.fields["age"] = rand(5, 85)
+ msg_admin_niche("The employment record age of [R.fields["name"]] was scrambled!")
if(4)
R.fields["criminal"] = pick("None", "*Arrest*", "Incarcerated", "Released")
+ msg_admin_niche("The employment record criminal status of [R.fields["name"]] was scrambled!")
if(5)
R.fields["p_stat"] = pick("*Unconscious*", "Active", "Physically Unfit")
+ msg_admin_niche("The employment record physical state of [R.fields["name"]] was scrambled!")
if(6)
R.fields["m_stat"] = pick("*Insane*", "*Unstable*", "*Watch*", "Stable")
+ msg_admin_niche("The employment record mental state of [R.fields["name"]] was scrambled!")
continue
else if(prob(1))
+ msg_admin_niche("The employment record of [R.fields["name"]] was lost!")
GLOB.data_core.security -= R
qdel(R)
continue
diff --git a/code/game/machinery/constructable_frame.dm b/code/game/machinery/constructable_frame.dm
index 0c8cc62c3f87..3b7880320da7 100644
--- a/code/game/machinery/constructable_frame.dm
+++ b/code/game/machinery/constructable_frame.dm
@@ -15,7 +15,7 @@
var/list/req_component_names = null
var/state = CONSTRUCTION_STATE_BEGIN
var/required_skill = SKILL_CONSTRUCTION_ENGI
- var/required_dismantle_skill = SKILL_ENGINEER_ENGI
+ var/required_dismantle_skill = SKILL_ENGINEER_TRAINED
/obj/structure/machinery/constructable_frame/Initialize(mapload, ...)
. = ..()
diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm
index 658e2aa150f3..45a57eb96392 100644
--- a/code/game/machinery/cryopod.dm
+++ b/code/game/machinery/cryopod.dm
@@ -324,28 +324,10 @@ GLOBAL_LIST_INIT(frozen_items, list(SQUAD_MARINE_1 = list(), SQUAD_MARINE_2 = li
var/datum/job/job = GET_MAPPED_ROLE(occupant.job)
if(ishuman(occupant))
var/mob/living/carbon/human/H = occupant
+ job.on_cryo(H)
if(H.assigned_squad)
var/datum/squad/S = H.assigned_squad
S.forget_marine_in_squad(H)
- if(istype(job, /datum/job/marine/specialist))
- //we make the set this specialist took if any available again
- if(H.skills)
- var/set_name
- switch(H.skills.get_skill_level(SKILL_SPEC_WEAPONS))
- if(SKILL_SPEC_ROCKET)
- set_name = "Demolitionist Set"
- if(SKILL_SPEC_GRENADIER)
- set_name = "Heavy Grenadier Set"
- if(SKILL_SPEC_PYRO)
- set_name = "Pyro Set"
- if(SKILL_SPEC_SCOUT)
- set_name = "Scout Set"
- if(SKILL_SPEC_SNIPER)
- set_name = "Sniper Set"
- GLOB.available_specialist_sets += "Anti-materiel Sniper Set"
-
- if(set_name && !GLOB.available_specialist_sets.Find(set_name))
- GLOB.available_specialist_sets += set_name
//Cryoing someone out removes someone from the Marines, blocking further larva spawns until accounted for
SSticker.mode.latejoin_update(job, -1)
diff --git a/code/game/machinery/door_control.dm b/code/game/machinery/door_control.dm
index 3f5e78dfc39f..266a58f62023 100644
--- a/code/game/machinery/door_control.dm
+++ b/code/game/machinery/door_control.dm
@@ -61,6 +61,9 @@
var/obj/docking_port/mobile/marine_dropship/shuttle = SSshuttle.getShuttle(ship_id)
if (!istype(shuttle))
return
+ var/obj/structure/machinery/computer/shuttle/dropship/flight/comp = shuttle.getControlConsole()
+ if(comp?.dropship_control_lost)
+ return
if(is_mainship_level(z)) // on the almayer
return
diff --git a/code/game/machinery/door_display/door_display.dm b/code/game/machinery/door_display/door_display.dm
index 4624ba5f1bd2..529ac6f95959 100644
--- a/code/game/machinery/door_display/door_display.dm
+++ b/code/game/machinery/door_display/door_display.dm
@@ -203,7 +203,7 @@
if(F.id == id)
targets += F
if(has_wall_divider)
- for(var/turf/closed/wall/almayer/research/containment/wall/divide/W in orange(src, 8))
+ for(var/turf/closed/wall/almayer/research/containment/wall/divide/W in ORANGE_TURFS(8, src))
targets += W
/obj/structure/machinery/door_display/research_cell/Destroy()
diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm
index 84f02f0a5bbd..9ac9765371f3 100644
--- a/code/game/machinery/doors/airlock.dm
+++ b/code/game/machinery/doors/airlock.dm
@@ -439,7 +439,7 @@ GLOBAL_LIST_INIT(airlock_wire_descriptions, list(
return
if(panel_open)
- if(ishuman(usr) && !skillcheck(usr, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(ishuman(usr) && !skillcheck(usr, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(usr, SPAN_WARNING("You look into \the [src]'s access panel and can only see a jumbled mess of colored wires..."))
return FALSE
@@ -483,7 +483,7 @@ GLOBAL_LIST_INIT(airlock_wire_descriptions, list(
add_fingerprint(usr)
if((in_range(src, usr) && istype(loc, /turf)) && panel_open)
- if(ishuman(usr) && !skillcheck(usr, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(ishuman(usr) && !skillcheck(usr, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(usr, SPAN_WARNING("You don't understand anything about [src]'s wiring!"))
return FALSE
@@ -649,7 +649,7 @@ GLOBAL_LIST_INIT(airlock_wire_descriptions, list(
else if(attacking_item.pry_capable)
if(attacking_item.pry_capable == IS_PRY_CAPABLE_CROWBAR && panel_open && welded)
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(user, SPAN_WARNING("You don't seem to know how to deconstruct machines."))
return
playsound(loc, 'sound/items/Crowbar.ogg', 25, 1)
diff --git a/code/game/machinery/doors/airlock_types.dm b/code/game/machinery/doors/airlock_types.dm
index feb699fd245e..52c904e81ded 100644
--- a/code/game/machinery/doors/airlock_types.dm
+++ b/code/game/machinery/doors/airlock_types.dm
@@ -901,6 +901,9 @@
/obj/structure/machinery/door/airlock/hatch/cockpit/two
icon = 'icons/obj/structures/doors/dropship2_pilot.dmi'
+/obj/structure/machinery/door/airlock/hatch/cockpit/three
+ icon = 'icons/obj/structures/doors/dropship3_pilot.dmi'
+
//PRISON AIRLOCKS
/obj/structure/machinery/door/airlock/prison
name = "cell Door"
diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm
index 27bb58397956..9ca1fb064568 100644
--- a/code/game/machinery/doors/door.dm
+++ b/code/game/machinery/doors/door.dm
@@ -87,10 +87,7 @@
return located_turfs
/obj/structure/machinery/door/proc/borders_space()
- for(var/turf/target in range(1, src))
- if(istype(target, /turf/open/space))
- return TRUE
- return FALSE
+ return !!(locate(/turf/open/space) in range(1, src))
/obj/structure/machinery/door/Collided(atom/movable/AM)
if(panel_open || operating)
diff --git a/code/game/machinery/doors/multi_tile.dm b/code/game/machinery/doors/multi_tile.dm
index f95ef09e812f..2b05e2c77772 100644
--- a/code/game/machinery/doors/multi_tile.dm
+++ b/code/game/machinery/doors/multi_tile.dm
@@ -262,14 +262,14 @@
var/datum/door_controller/single/control = linked_dropship.door_control.door_controllers[direction]
if (control.status != SHUTTLE_DOOR_BROKEN)
return ..()
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI) && !skillcheck(user, SKILL_PILOT, SKILL_PILOT_TRAINED))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED) && !skillcheck(user, SKILL_PILOT, SKILL_PILOT_TRAINED))
to_chat(user, SPAN_WARNING("You don't seem to understand how to restore a remote connection to [src]."))
return
if(user.action_busy)
return
to_chat(user, SPAN_WARNING("You begin to restore the remote connection to [src]."))
- if(!do_after(user, (skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI) ? 5 SECONDS : 8 SECONDS), INTERRUPT_ALL, BUSY_ICON_BUILD))
+ if(!do_after(user, (skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED) ? 5 SECONDS : 8 SECONDS), INTERRUPT_ALL, BUSY_ICON_BUILD))
to_chat(user, SPAN_WARNING("You fail to restore a remote connection to [src]."))
return
unlock(TRUE)
@@ -329,6 +329,10 @@
name = "\improper Normandy cargo door"
icon = 'icons/obj/structures/doors/dropship2_cargo.dmi'
+/obj/structure/machinery/door/airlock/multi_tile/almayer/dropshiprear/ds3
+ name = "\improper Saipan cargo door"
+ icon = 'icons/obj/structures/doors/dropship3_cargo.dmi'
+
/obj/structure/machinery/door/airlock/multi_tile/almayer/dropshiprear/dropshipside
width = 2
@@ -340,6 +344,10 @@
name = "\improper Normandy crew hatch"
icon = 'icons/obj/structures/doors/dropship2_side2.dmi'
+/obj/structure/machinery/door/airlock/multi_tile/almayer/dropshiprear/dropshipside/ds3
+ name = "\improper Saipan crew hatch"
+ icon = 'icons/obj/structures/doors/dropship3_side2.dmi'
+
/obj/structure/machinery/door/airlock/multi_tile/almayer/dropshiprear/blastdoor
name = "bulkhead blast door"
icon = 'icons/obj/structures/doors/almayerblastdoor.dmi'
diff --git a/code/game/machinery/fusion_engine.dm b/code/game/machinery/fusion_engine.dm
index 72f836717b0f..06ae3321a2c5 100644
--- a/code/game/machinery/fusion_engine.dm
+++ b/code/game/machinery/fusion_engine.dm
@@ -140,7 +140,7 @@
if(overloaded)
. += SPAN_INFO("It is overloaded.")
return
- if(skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
. += SPAN_INFO("You could overload its safeties with a multitool.")
/obj/structure/machinery/power/reactor/power_change()
@@ -344,7 +344,7 @@
if(!is_ship_reactor)
return
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
return
to_chat(user, SPAN_WARNING("You start [overloaded ? "overloading" : "restoring"] the safeties on [src]."))
@@ -446,7 +446,7 @@
var/repair_time = 20 SECONDS
repair_time *= user.get_skill_duration_multiplier(SKILL_ENGINEER)
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
repair_time += 5 SECONDS
to_chat(user, SPAN_NOTICE("You start repairing [src] with [tool]."))
diff --git a/code/game/machinery/hologram.dm b/code/game/machinery/hologram.dm
deleted file mode 100644
index fe8243704a72..000000000000
--- a/code/game/machinery/hologram.dm
+++ /dev/null
@@ -1,61 +0,0 @@
-/* Holograms!
- * Contains:
- * Hologram
- * Holopad
- * Other stuff
- */
-
-
-
-/*
- * Hologram
- */
-
-/obj/structure/machinery/hologram
- anchored = TRUE
- use_power = USE_POWER_IDLE
- idle_power_usage = 5
- active_power_usage = 100
- var/obj/effect/overlay/hologram //The projection itself. If there is one, the instrument is on, off otherwise.
-
-/obj/structure/machinery/hologram/ex_act(severity)
- switch(severity)
- if(0 to EXPLOSION_THRESHOLD_LOW)
- if (prob(5))
- qdel(src)
- if(EXPLOSION_THRESHOLD_LOW to EXPLOSION_THRESHOLD_MEDIUM)
- if (prob(50))
- qdel(src)
- if(EXPLOSION_THRESHOLD_MEDIUM to INFINITY)
- qdel(src)
-
-/obj/structure/machinery/hologram/Destroy()
- if(hologram)
- clear_holo()
- return ..()
-
-/obj/structure/machinery/hologram/proc/clear_holo()
- if(hologram)
- qdel(hologram)
- hologram = null
-
-
-
-/*
- * Holopad
- */
-
-/obj/structure/machinery/hologram/holopad
- name = "\improper AI holopad"
- desc = "It's a floor-mounted device for projecting holographic images. It is activated remotely."
- icon_state = "holopad0"
-
- layer = TURF_LAYER+0.1 //Preventing mice and drones from sneaking under them.
-/*
- * Other Stuff: Is this even used?
- */
-/obj/structure/machinery/hologram/projector
- name = "hologram projector"
- desc = "It makes a hologram appear...with magnets or something..."
- icon = 'icons/obj/structures/props/stationobjs.dmi'
- icon_state = "holopad0"
diff --git a/code/game/machinery/kitchen/gibber.dm b/code/game/machinery/kitchen/gibber.dm
index b71fb51a49de..9e6a2198962e 100644
--- a/code/game/machinery/kitchen/gibber.dm
+++ b/code/game/machinery/kitchen/gibber.dm
@@ -20,37 +20,6 @@
if (PF)
PF.flags_can_pass_all = PASS_HIGH_OVER_ONLY|PASS_AROUND|PASS_OVER_THROW_ITEM
-//auto-gibs anything that bumps into it
-/obj/structure/machinery/gibber/autogibber
- var/turf/input_plate
-
-/obj/structure/machinery/gibber/autogibber/New()
- ..()
- spawn(5)
- for(var/i in GLOB.cardinals)
- var/obj/structure/machinery/mineral/input/input_obj = locate( /obj/structure/machinery/mineral/input, get_step(loc, i) )
- if(input_obj)
- if(isturf(input_obj.loc))
- input_plate = input_obj.loc
- qdel(input_obj)
- break
-
- if(!input_plate)
- log_misc("a [src] didn't find an input plate.")
- return
-
-/obj/structure/machinery/gibber/autogibber/Collided(atom/A)
- if(!input_plate) return
-
- if(ismob(A))
- var/mob/M = A
-
- if(M.loc == input_plate
- )
- M.forceMove(src)
- M.gib()
-
-
/obj/structure/machinery/gibber/New()
..()
overlays += image('icons/obj/structures/machinery/kitchen.dmi', "grjam")
diff --git a/code/game/machinery/kitchen/smartfridge.dm b/code/game/machinery/kitchen/smartfridge.dm
index 774153316baa..957f6c97eca3 100644
--- a/code/game/machinery/kitchen/smartfridge.dm
+++ b/code/game/machinery/kitchen/smartfridge.dm
@@ -350,7 +350,7 @@
if("cutwire")
if(!panel_open)
return FALSE
- if(!skillcheck(usr, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(usr, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(usr, SPAN_WARNING("You don't understand anything about this wiring..."))
return FALSE
var/obj/item/held_item = user.get_held_item()
@@ -364,7 +364,7 @@
if("fixwire")
if(!panel_open)
return FALSE
- if(!skillcheck(usr, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(usr, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(usr, SPAN_WARNING("You don't understand anything about this wiring..."))
return FALSE
var/obj/item/held_item = user.get_held_item()
@@ -377,7 +377,7 @@
if("pulsewire")
if(!panel_open)
return FALSE
- if(!skillcheck(usr, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(usr, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(usr, SPAN_WARNING("You don't understand anything about this wiring..."))
return FALSE
var/obj/item/held_item = user.get_held_item()
diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm
index f835ecaa424c..f7244fb8ce0d 100644
--- a/code/game/machinery/machinery.dm
+++ b/code/game/machinery/machinery.dm
@@ -171,7 +171,7 @@ Class Procs:
. += "It does not appear to be working."
var/msg = get_repair_move_text(FALSE)
- if(msg && skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(msg && skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
. += SPAN_WARNING("[msg]")
/obj/structure/machinery/emp_act(severity)
diff --git a/code/game/machinery/mass_driver.dm b/code/game/machinery/mass_driver.dm
deleted file mode 100644
index f1b0081e3a39..000000000000
--- a/code/game/machinery/mass_driver.dm
+++ /dev/null
@@ -1,10 +0,0 @@
-// Legacy SS13 machinery turned into a prop
-/obj/structure/machinery/mass_driver
- name = "mass driver"
- desc = "Shoots things into space."
- icon = 'icons/obj/structures/props/stationobjs.dmi'
- icon_state = "mass_driver"
- anchored = TRUE
- use_power = USE_POWER_IDLE
- idle_power_usage = 2
- active_power_usage = 50
diff --git a/code/game/machinery/mining.dm b/code/game/machinery/mining.dm
index 0662817174fc..97ba4a804f1d 100644
--- a/code/game/machinery/mining.dm
+++ b/code/game/machinery/mining.dm
@@ -1,25 +1,3 @@
-/obj/structure/machinery/mineral/input
- icon = 'icons/mob/hud/screen1.dmi'
- icon_state = "x2"
- name = "Input area"
- density = FALSE
- anchored = TRUE
-
-/obj/structure/machinery/mineral/input/Initialize(mapload, ...)
- . = ..()
- icon_state = "blank"
-
-/obj/structure/machinery/mineral/output
- icon = 'icons/mob/hud/screen1.dmi'
- icon_state = "x"
- name = "Output area"
- density = FALSE
- anchored = TRUE
-
-/obj/structure/machinery/mineral/output/Initialize(mapload, ...)
- . = ..()
- icon_state = "blank"
-
/obj/structure/machinery/mineral/processing_unit
name = "material processor" //This isn't actually a goddamn furnace, we're in space and it's processing platinum and flammable phoron...
icon = 'icons/obj/structures/machinery/mining_machines.dmi'
diff --git a/code/game/machinery/seed_extractor.dm b/code/game/machinery/seed_extractor.dm
index 0b4574cc9fb4..71caa7a869cf 100644
--- a/code/game/machinery/seed_extractor.dm
+++ b/code/game/machinery/seed_extractor.dm
@@ -6,32 +6,61 @@
density = TRUE
anchored = TRUE
-/obj/structure/machinery/seed_extractor/attackby(obj/item/O as obj, mob/user as mob)
+/obj/structure/machinery/seed_extractor/attackby(obj/item/object as obj, mob/user as mob)
+ // Plant bag and other storage containers.
+ if(istype(object,/obj/item/storage))
+ var/obj/item/storage/container = object
+ if(length(container.contents) == 0)
+ to_chat(user, SPAN_NOTICE("[container] is empty."))
+ return
+
+ to_chat(user, SPAN_NOTICE("You start dumping the contents of [container] into [src]."))
+ if(!do_after(user, 1.5 SECONDS, INTERRUPT_ALL, BUSY_ICON_GENERIC))
+ return
+
+ for(var/obj/item/item as anything in container)
+ if(extract(item, user))
+ // Properly deletes container contents after they've been processed
+ container.remove_from_storage(item)
+ item.moveToNullspace()
+
+ playsound(user.loc, "rustle", 15, 1, 6)
+ else
+ extract(object, user)
+
+
+
+/obj/structure/machinery/seed_extractor/proc/extract(obj/item/object as obj, mob/user as mob)
// Fruits and vegetables.
- if(istype(O, /obj/item/reagent_container/food/snacks/grown) || istype(O, /obj/item/grown))
- if(user.temp_drop_inv_item(O))
+ if(istype(object, /obj/item/reagent_container/food/snacks/grown) || istype(object, /obj/item/grown))
+ if(user.temp_drop_inv_item(object))
var/datum/seed/new_seed_type
- if(istype(O, /obj/item/grown))
- var/obj/item/grown/F = O
- new_seed_type = GLOB.seed_types[F.plantname]
+ if(istype(object, /obj/item/grown))
+ var/obj/item/grown/plant = object
+ new_seed_type = GLOB.seed_types[plant.plantname]
else
- var/obj/item/reagent_container/food/snacks/grown/F = O
- new_seed_type = GLOB.seed_types[F.plantname]
+ var/obj/item/reagent_container/food/snacks/grown/plant = object
+ new_seed_type = GLOB.seed_types[plant.plantname]
if(new_seed_type)
- to_chat(user, SPAN_NOTICE("You extract some seeds from [O]."))
+ to_chat(user, SPAN_NOTICE("You extract some seeds from [object]."))
var/produce = rand(1,4)
for(var/i = 0;i<=produce;i++)
var/obj/item/seeds/seeds = new(get_turf(src))
seeds.seed_type = new_seed_type.name
seeds.update_seed()
else
- to_chat(user, "[O] doesn't seem to have any usable seeds inside it.")
- qdel(O)
+ to_chat(user, "[object] doesn't seem to have any usable seeds inside it.")
+ qdel(object)
+ return TRUE
//Grass.
- else if(istype(O, /obj/item/stack/tile/grass))
- var/obj/item/stack/tile/grass/S = O
- if (S.use(1))
+ else if(istype(object, /obj/item/stack/tile/grass))
+ var/obj/item/stack/tile/grass/grass = object
+ if (grass.use(1))
to_chat(user, SPAN_NOTICE("You extract some seeds from the grass tile."))
new /obj/item/seeds/grassseed(loc)
+ return TRUE
+ else
+ to_chat(user, SPAN_WARNING("Cannot get seeds from [object]."))
+ return FALSE
diff --git a/code/game/machinery/telecomms/machine_interactions.dm b/code/game/machinery/telecomms/machine_interactions.dm
index 9bffa8ebe450..31cd2cf94d4e 100644
--- a/code/game/machinery/telecomms/machine_interactions.dm
+++ b/code/game/machinery/telecomms/machine_interactions.dm
@@ -22,7 +22,7 @@
attack_hand(user)
else
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(user, SPAN_WARNING("You stare at \the [src] cluelessly..."))
return 0
@@ -103,7 +103,7 @@
// You need a multitool to use this, or be silicon
if(!isSilicon(user))
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(user, SPAN_WARNING("You stare at \the [src] cluelessly..."))
return
// istype returns false if the value is null
diff --git a/code/game/machinery/telecomms/portable_comms.dm b/code/game/machinery/telecomms/portable_comms.dm
index c2a9bb1072ac..cf7ef1c1f2ef 100644
--- a/code/game/machinery/telecomms/portable_comms.dm
+++ b/code/game/machinery/telecomms/portable_comms.dm
@@ -3,7 +3,7 @@
desc = "A portable compact TC-4T telecommunications construction kit. Used to set up subspace communications lines between planetary and extra-planetary locations. Needs cabling."
icon = 'icons/obj/structures/machinery/comm_tower2.dmi'
icon_state = "construct_0_0"
- required_skill = SKILL_ENGINEER_ENGI
+ required_skill = SKILL_ENGINEER_TRAINED
required_dismantle_skill = 5
density = TRUE
anchored = FALSE
diff --git a/code/game/machinery/telecomms/presets.dm b/code/game/machinery/telecomms/presets.dm
index 0c9e875534da..de2491126c7c 100644
--- a/code/game/machinery/telecomms/presets.dm
+++ b/code/game/machinery/telecomms/presets.dm
@@ -122,7 +122,7 @@
return
if(user.action_busy)
return
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_NOVICE))
to_chat(user, SPAN_WARNING("You're not trained to repair [src]..."))
return
var/obj/item/tool/weldingtool/WT = I
diff --git a/code/game/machinery/vending/cm_vending.dm b/code/game/machinery/vending/cm_vending.dm
index db173e7b1608..eb95a870faae 100644
--- a/code/game/machinery/vending/cm_vending.dm
+++ b/code/game/machinery/vending/cm_vending.dm
@@ -153,7 +153,7 @@ GLOBAL_LIST_EMPTY(vending_products)
/obj/structure/machinery/cm_vending/get_examine_text(mob/living/carbon/human/user)
. = ..()
- if(skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI) && hackable)
+ if(skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED) && hackable)
. += SPAN_NOTICE("You believe you can hack this one to remove the access requirements.")
/obj/structure/machinery/cm_vending/proc/hack_access(mob/user)
@@ -565,48 +565,28 @@ GLOBAL_LIST_EMPTY(vending_products)
to_chat(user, SPAN_WARNING("Only specialists can take specialist sets."))
vend_fail()
return FALSE
+
else if(!user.skills || user.skills.get_skill_level(SKILL_SPEC_WEAPONS) != SKILL_SPEC_TRAINED)
to_chat(user, SPAN_WARNING("You already have a specialization."))
vend_fail()
return FALSE
+
var/p_name = itemspec[1]
- if(!GLOB.available_specialist_sets.Find(p_name))
+ if(!(p_name in GLOB.specialist_set_name_dict))
+ return
+
+ if(GLOB.specialist_set_name_dict[p_name].get_available_vendor_num() <= 0)
to_chat(user, SPAN_WARNING("That set is already taken."))
vend_fail()
return FALSE
+
var/obj/item/card/id/card = human_user.get_idcard()
- if(!card?.check_biometrics(user))
+ if(!istype(card) || !card.check_biometrics(user))
to_chat(user, SPAN_WARNING("You must be wearing your [SPAN_INFO("dog tags")] to select a specialization!"))
return FALSE
- var/specialist_assignment
- switch(p_name)
- if("Scout Set")
- user.skills.set_skill(SKILL_SPEC_WEAPONS, SKILL_SPEC_SCOUT)
- specialist_assignment = "Scout"
- if("Sniper Set")
- user.skills.set_skill(SKILL_SPEC_WEAPONS, SKILL_SPEC_SNIPER)
- specialist_assignment = "Sniper"
- GLOB.available_specialist_sets -= "Anti-materiel Sniper Set"
- if("Anti-materiel Sniper Set")
- user.skills.set_skill(SKILL_SPEC_WEAPONS, SKILL_SPEC_SNIPER)
- specialist_assignment = "Heavy Sniper"
- GLOB.available_specialist_sets -= "Sniper Set"
- if("Demolitionist Set")
- user.skills.set_skill(SKILL_SPEC_WEAPONS, SKILL_SPEC_ROCKET)
- specialist_assignment = "Demo"
- if("Heavy Grenadier Set")
- user.skills.set_skill(SKILL_SPEC_WEAPONS, SKILL_SPEC_GRENADIER)
- specialist_assignment = "Grenadier"
- if("Pyro Set")
- user.skills.set_skill(SKILL_SPEC_WEAPONS, SKILL_SPEC_PYRO)
- specialist_assignment = "Pyro"
- else
- to_chat(user, SPAN_WARNING("Something bad occurred with [src], tell a Dev. "))
- vend_fail()
- return FALSE
- card.set_assignment((human_user.assigned_squad ? (human_user.assigned_squad.name + " ") : "") + JOB_SQUAD_SPECIALIST + " ([specialist_assignment])")
- GLOB.data_core.manifest_modify(user.real_name, WEAKREF(user), card.assignment)
- GLOB.available_specialist_sets -= p_name
+
+ GLOB.specialist_set_name_dict[p_name].redeem_set(human_user)
+
else if(vendor_role.Find(JOB_SYNTH))
if(user.job != JOB_SYNTH)
to_chat(user, SPAN_WARNING("Only USCM Synthetics may vend experimental tool tokens."))
@@ -678,7 +658,7 @@ GLOBAL_LIST_EMPTY(vending_products)
to_chat(user, SPAN_WARNING("You need to set [src] back upright first."))
return
if(HAS_TRAIT(W, TRAIT_TOOL_SCREWDRIVER))
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(user, SPAN_WARNING("You do not understand how to repair the broken [src]."))
return FALSE
else if(stat & MAINT)
@@ -705,7 +685,7 @@ GLOBAL_LIST_EMPTY(vending_products)
to_chat(user, SPAN_WARNING("[msg]"))
return FALSE
else if(HAS_TRAIT(W, TRAIT_TOOL_WIRECUTTERS))
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(user, SPAN_WARNING("You do not understand how to repair the broken [src]."))
return FALSE
else if(stat & REPAIR_STEP_ONE)
@@ -722,7 +702,7 @@ GLOBAL_LIST_EMPTY(vending_products)
to_chat(user, SPAN_WARNING("[msg]"))
return FALSE
else if(iswire(W))
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(user, SPAN_WARNING("You do not understand how to repair the broken [src]."))
return FALSE
var/obj/item/stack/cable_coil/CC = W
@@ -745,7 +725,7 @@ GLOBAL_LIST_EMPTY(vending_products)
to_chat(user, SPAN_WARNING("[msg]"))
return
else if(istype(W, /obj/item/stack/sheet/metal))
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(user, SPAN_WARNING("You do not understand how to repair the broken [src]."))
return FALSE
var/obj/item/stack/sheet/metal/M = W
@@ -768,7 +748,7 @@ GLOBAL_LIST_EMPTY(vending_products)
else if(HAS_TRAIT(W, TRAIT_TOOL_MULTITOOL))
var/obj/item/device/multitool/MT = W
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI) && !skillcheckexplicit(user, SKILL_ANTAG, SKILL_ANTAG_AGENT))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED) && !skillcheckexplicit(user, SKILL_ANTAG, SKILL_ANTAG_AGENT))
to_chat(user, SPAN_WARNING("You do not understand how tweak access requirements in [src]."))
return FALSE
if(stat != WORKING)
@@ -1236,6 +1216,7 @@ GLOBAL_LIST_INIT(cm_vending_gear_corresponding_types_list, list(
/obj/item/ammo_box/magazine/lever_action/training/empty = /obj/item/ammo_box/magazine/lever_action/training,
/obj/item/ammo_box/magazine/lever_action/tracker/empty = /obj/item/ammo_box/magazine/lever_action/tracker,
/obj/item/ammo_box/magazine/lever_action/marksman/empty = /obj/item/ammo_box/magazine/lever_action/marksman,
+ /obj/item/ammo_box/magazine/lever_action/xm88/empty = /obj/item/ammo_box/magazine/lever_action/xm88,
/obj/item/ammo_box/rounds/smg/empty = /obj/item/ammo_box/rounds/smg,
/obj/item/ammo_box/rounds/smg/ap/empty = /obj/item/ammo_box/rounds/smg/ap,
@@ -1366,7 +1347,7 @@ GLOBAL_LIST_INIT(cm_vending_gear_corresponding_types_list, list(
if(LAZYLEN(itemspec)) //making sure it's not empty
if(vend_delay)
overlays.Cut()
- icon_state = "[initial(icon_state)]_vend"
+ flick("[initial(icon_state)]_vend", src)
if(vend_sound)
playsound(loc, vend_sound, 25, 1, 2) //heard only near vendor
sleep(vend_delay)
diff --git a/code/game/machinery/vending/vending.dm b/code/game/machinery/vending/vending.dm
index a05245e4b185..c6ef6eb7a574 100644
--- a/code/game/machinery/vending/vending.dm
+++ b/code/game/machinery/vending/vending.dm
@@ -207,7 +207,7 @@ GLOBAL_LIST_EMPTY_TYPED(total_vending_machines, /obj/structure/machinery/vending
to_chat(user, "You [panel_open ? "open" : "close"] the maintenance panel.")
update_icon()
return TRUE
- else if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ else if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(user, SPAN_WARNING("You do not understand how to repair the broken [src.name]."))
return FALSE
else if(stat & BROKEN)
@@ -234,7 +234,7 @@ GLOBAL_LIST_EMPTY_TYPED(total_vending_machines, /obj/structure/machinery/vending
to_chat(user, SPAN_WARNING("[msg]"))
return FALSE
else if(HAS_TRAIT(item, TRAIT_TOOL_WIRECUTTERS))
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(user, SPAN_WARNING("You do not understand how to repair the broken [src.name]."))
return FALSE
else if(stat == WORKING && panel_open)
@@ -254,7 +254,7 @@ GLOBAL_LIST_EMPTY_TYPED(total_vending_machines, /obj/structure/machinery/vending
to_chat(user, SPAN_WARNING("[msg]"))
return FALSE
else if(istype(item, /obj/item/stack/cable_coil))
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(user, SPAN_WARNING("You do not understand how to repair the broken [src.name]."))
return FALSE
var/obj/item/stack/cable_coil/CC = item
@@ -277,7 +277,7 @@ GLOBAL_LIST_EMPTY_TYPED(total_vending_machines, /obj/structure/machinery/vending
to_chat(user, SPAN_WARNING("[msg]"))
return
else if(istype(item, /obj/item/stack/sheet/metal))
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(user, SPAN_WARNING("You do not understand how to repair the broken [src.name]."))
return FALSE
var/obj/item/stack/sheet/metal/M = item
diff --git a/code/game/machinery/vending/vendor_types/crew/corporate_liaison.dm b/code/game/machinery/vending/vendor_types/crew/corporate_liaison.dm
new file mode 100644
index 000000000000..69261115ecaa
--- /dev/null
+++ b/code/game/machinery/vending/vendor_types/crew/corporate_liaison.dm
@@ -0,0 +1,84 @@
+//------------ CL CLOTHING VENDOR---------------
+
+GLOBAL_LIST_INIT(cm_vending_clothing_dress_corporate_liaison, list(
+ list("SUITS AND UNDERSHIRTS", 0, null, null, null),
+ list("Black Suit Pants", 0, /obj/item/clothing/under/liaison_suit/black, MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_RECOMMENDED),
+ list("Blue Suit Pants", 0, /obj/item/clothing/under/liaison_suit/blue, MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_REGULAR),
+ list("Brown Suit Pants", 0, /obj/item/clothing/under/liaison_suit/brown, MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_REGULAR),
+ list("White Suit Pants", 0, /obj/item/clothing/under/liaison_suit/corporate_formal, MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_REGULAR),
+ list("Liaison's Tan Suit", 0, /obj/item/clothing/under/liaison_suit, MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_REGULAR),
+ list("Liaison's Charcoal Suit", 0, /obj/item/clothing/under/liaison_suit/charcoal, MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_REGULAR),
+ list("Liaison's White Suit", 0, /obj/item/clothing/under/liaison_suit/formal, MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_REGULAR),
+ list("Liaison's Blue Blazer", 0, /obj/item/clothing/under/liaison_suit/blazer, MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_REGULAR),
+ list("Liaison's Suspenders", 0, /obj/item/clothing/under/liaison_suit/suspenders, MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_REGULAR),
+ list("Liaison's Skirt", 0, /obj/item/clothing/under/blackskirt, MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_REGULAR),
+ list("Trainee's Uniform", 0, /obj/item/clothing/under/suit_jacket/trainee, MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_REGULAR),
+ list("Country Club Outfit", 0, /obj/item/clothing/under/liaison_suit/ivy, MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_REGULAR),
+ list("Orange Outfit", 0, /obj/item/clothing/under/liaison_suit/orange, MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_REGULAR),
+ list("Corporate Casual", 0, /obj/item/clothing/under/liaison_suit/field, MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_REGULAR),
+ list("Grey Workwear", 0, /obj/item/clothing/under/colonist/workwear, MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_REGULAR),
+ list("Khaki Workwear", 0, /obj/item/clothing/under/colonist/workwear/khaki, MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_REGULAR),
+ list("Pink Workwear", 0, /obj/item/clothing/under/colonist/workwear/pink, MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_REGULAR),
+ list("Green Workwear", 0, /obj/item/clothing/under/colonist/workwear/green, MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_REGULAR),
+
+ list("SUIT", 0, null, null, null),
+ list("Black Suit Jacket", 0, /obj/item/clothing/suit/storage/jacket/marine/corporate/black, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_RECOMMENDED),
+ list("Khaki Suit Jacket", 0, /obj/item/clothing/suit/storage/jacket/marine/corporate, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_REGULAR),
+ list("Brown Suit Jacket", 0, /obj/item/clothing/suit/storage/jacket/marine/corporate/brown, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_REGULAR),
+ list("Blue Suit Jacket", 0, /obj/item/clothing/suit/storage/jacket/marine/corporate/blue, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_REGULAR),
+ list("Formal Suit Jacket", 0, /obj/item/clothing/suit/storage/jacket/marine/corporate/formal, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_REGULAR),
+ list("Grey Bomber Jacket", 0, /obj/item/clothing/suit/storage/jacket/marine/bomber/grey, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_REGULAR),
+ list("Red Bomber Jacket", 0, /obj/item/clothing/suit/storage/jacket/marine/bomber/red, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_REGULAR),
+ list("Khaki Bomber Jacket", 0, /obj/item/clothing/suit/storage/jacket/marine/bomber, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_REGULAR),
+ list("Brown Bomber Jacket", 0, /obj/item/clothing/suit/storage/bomber, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_REGULAR),
+ list("Black Bomber Jacket", 0, /obj/item/clothing/suit/storage/bomber/alt, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_REGULAR),
+ list("Liaison's Winter Coat", 0, /obj/item/clothing/suit/storage/snow_suit/liaison, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_REGULAR),
+ list("Labcoat", 0, /obj/item/clothing/suit/storage/labcoat, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_REGULAR),
+ list("Grey Vest", 0, /obj/item/clothing/suit/storage/jacket/marine/vest/grey, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_REGULAR),
+ list("Brown Vest", 0, /obj/item/clothing/suit/storage/jacket/marine/vest, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_REGULAR),
+ list("Tan Vest", 0, /obj/item/clothing/suit/storage/jacket/marine/vest/tan, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_REGULAR),
+
+ list("TIES", 0, null, null, null),
+ list("Black Tie", 0, /obj/item/clothing/accessory/black, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_RECOMMENDED),
+ list("Red Tie", 0, /obj/item/clothing/accessory/red, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR),
+ list("Purple Tie", 0, /obj/item/clothing/accessory/purple, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR),
+ list("Blue Tie", 0, /obj/item/clothing/accessory/blue, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR),
+ list("Green Tie", 0, /obj/item/clothing/accessory/green, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR),
+ list("Gold Tie", 0, /obj/item/clothing/accessory/gold, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR),
+ list("Special Tie", 0, /obj/item/clothing/accessory/horrible, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR),
+
+ list("GLASSES", 0, null, null, null),
+ list("BiMex Shades", 0, /obj/item/clothing/glasses/sunglasses/big, MARINE_CAN_BUY_GLASSES, VENDOR_ITEM_RECOMMENDED),
+ list("Aviator Shades", 0, /obj/item/clothing/glasses/sunglasses/aviator, MARINE_CAN_BUY_GLASSES, VENDOR_ITEM_REGULAR),
+ list("Sunglasses", 0, /obj/item/clothing/glasses/sunglasses, MARINE_CAN_BUY_GLASSES, VENDOR_ITEM_REGULAR),
+ list("Prescription Sunglasses", 0, /obj/item/clothing/glasses/sunglasses/prescription, MARINE_CAN_BUY_GLASSES, VENDOR_ITEM_REGULAR),
+ list("Prescription Glasses", 0, /obj/item/clothing/glasses/regular/hipster, MARINE_CAN_BUY_GLASSES, VENDOR_ITEM_REGULAR),
+
+ list("GLOVES", 0, null, null, null),
+ list("Black Gloves", 0, /obj/item/clothing/gloves/black, MARINE_CAN_BUY_GLOVES, VENDOR_ITEM_RECOMMENDED),
+ list("Dress Gloves", 0, /obj/item/clothing/gloves/marine/dress, MARINE_CAN_BUY_GLOVES, VENDOR_ITEM_REGULAR),
+
+ list("SHOES", 0, null, null, null),
+ list("Laceup Shoes, Black", 0, /obj/item/clothing/shoes/laceup, MARINE_CAN_BUY_SHOES, VENDOR_ITEM_RECOMMENDED),
+ list("Laceup Shoes, Brown", 0, /obj/item/clothing/shoes/laceup/brown, MARINE_CAN_BUY_SHOES, VENDOR_ITEM_REGULAR),
+ list("Sneakers, Black", 0, /obj/item/clothing/shoes/black, MARINE_CAN_BUY_SHOES, VENDOR_ITEM_REGULAR),
+ list("Corporate Boots", 0, /obj/item/clothing/shoes/marine/corporate, MARINE_CAN_BUY_SHOES, VENDOR_ITEM_REGULAR),
+
+ list("HATS", 0, null, null, null),
+ list("Black Beret", 0, /obj/item/clothing/head/beret/cm/black/civilian, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_REGULAR),
+ list("White Beret", 0, /obj/item/clothing/head/beret/cm/white/civilian, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_REGULAR),
+ list("Fedora", 0, /obj/item/clothing/head/fedora, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_REGULAR),
+
+))
+
+/obj/structure/machinery/cm_vending/clothing/dress/corporate_liaison
+ name = "\improper Corporate Liaison's Personal Wardrobe"
+ desc = "A wardrobe containing all the clothes an executive would ever need."
+ icon_state = "wardrobe_vendor"
+ vendor_theme = VENDOR_THEME_USCM
+ show_points = FALSE
+ req_access = list()
+ vendor_role = list(JOB_CORPORATE_LIAISON, JOB_SURVIVOR, JOB_TRAINEE, JOB_JUNIOR_EXECUTIVE, JOB_EXECUTIVE, JOB_SENIOR_EXECUTIVE, JOB_EXECUTIVE_SPECIALIST, JOB_EXECUTIVE_SUPERVISOR, JOB_ASSISTANT_MANAGER, JOB_DIVISION_MANAGER, JOB_CHIEF_EXECUTIVE, JOB_DIRECTOR, JOB_WY_GOON_RESEARCHER)
+
+/obj/structure/machinery/cm_vending/clothing/dress/corporate_liaison/get_listed_products(mob/user)
+ return GLOB.cm_vending_clothing_dress_corporate_liaison
diff --git a/code/game/machinery/vending/vendor_types/crew/medical.dm b/code/game/machinery/vending/vendor_types/crew/medical.dm
index fe9b7b06648e..b2477b4eb493 100644
--- a/code/game/machinery/vending/vendor_types/crew/medical.dm
+++ b/code/game/machinery/vending/vendor_types/crew/medical.dm
@@ -82,7 +82,8 @@ GLOBAL_LIST_INIT(cm_vending_clothing_doctor, list(
list("Medical Kit Pouch", 0, /obj/item/storage/pouch/medkit, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
list("Pressurized Reagent Canister Pouch (Bicaridine)", 0, /obj/item/storage/pouch/pressurized_reagent_canister/bicaridine, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
list("Pressurized Reagent Canister Pouch (Kelotane)", 0, /obj/item/storage/pouch/pressurized_reagent_canister/kelotane, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
- list("Pressurized Reagent Canister Pouch (Revival Mix)", 0, /obj/item/storage/pouch/pressurized_reagent_canister/revival, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
+ list("Pressurized Reagent Canister Pouch (Revival Mix - Tricordrazine)", 0, /obj/item/storage/pouch/pressurized_reagent_canister/revival_tricord, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
+ list("Pressurized Reagent Canister Pouch (Revival Mix - Peridaxon)", 0, /obj/item/storage/pouch/pressurized_reagent_canister/revival_peri, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
list("Pressurized Reagent Canister Pouch (Tricordrazine)", 0, /obj/item/storage/pouch/pressurized_reagent_canister/tricordrazine, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
list("Pressurized Reagent Canister Pouch (EMPTY)", 0, /obj/item/storage/pouch/pressurized_reagent_canister, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
list("Sling Pouch", 0, /obj/item/storage/pouch/sling, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
@@ -151,7 +152,8 @@ GLOBAL_LIST_INIT(cm_vending_clothing_nurse, list(
list("Medical Kit Pouch", 0, /obj/item/storage/pouch/medkit, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
list("Pressurized Reagent Canister Pouch (Bicaridine)", 0, /obj/item/storage/pouch/pressurized_reagent_canister/bicaridine, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
list("Pressurized Reagent Canister Pouch (Kelotane)", 0, /obj/item/storage/pouch/pressurized_reagent_canister/kelotane, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
- list("Pressurized Reagent Canister Pouch (Revival Mix)", 0, /obj/item/storage/pouch/pressurized_reagent_canister/revival, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
+ list("Pressurized Reagent Canister Pouch (Revival Mix - Tricordrazine)", 0, /obj/item/storage/pouch/pressurized_reagent_canister/revival_tricord, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
+ list("Pressurized Reagent Canister Pouch (Revival Mix - Peridaxon)", 0, /obj/item/storage/pouch/pressurized_reagent_canister/revival_peri, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
list("Pressurized Reagent Canister Pouch (Tricordrazine)", 0, /obj/item/storage/pouch/pressurized_reagent_canister/tricordrazine, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
list("Pressurized Reagent Canister Pouch (EMPTY)", 0, /obj/item/storage/pouch/pressurized_reagent_canister, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
list("Sling Pouch", 0, /obj/item/storage/pouch/sling, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
@@ -224,7 +226,8 @@ GLOBAL_LIST_INIT(cm_vending_clothing_researcher, list(
list("Medical Kit Pouch", 0, /obj/item/storage/pouch/medkit, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
list("Pressurized Reagent Canister Pouch (Bicaridine)", 0, /obj/item/storage/pouch/pressurized_reagent_canister/bicaridine, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
list("Pressurized Reagent Canister Pouch (Kelotane)", 0, /obj/item/storage/pouch/pressurized_reagent_canister/kelotane, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
- list("Pressurized Reagent Canister Pouch (Revival Mix)", 0, /obj/item/storage/pouch/pressurized_reagent_canister/revival, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
+ list("Pressurized Reagent Canister Pouch (Revival Mix - Tricordrazine)", 0, /obj/item/storage/pouch/pressurized_reagent_canister/revival_tricord, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
+ list("Pressurized Reagent Canister Pouch (Revival Mix - Peridaxon)", 0, /obj/item/storage/pouch/pressurized_reagent_canister/revival_peri, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
list("Pressurized Reagent Canister Pouch (Tricordrazine)", 0, /obj/item/storage/pouch/pressurized_reagent_canister/tricordrazine, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
list("Pressurized Reagent Canister Pouch (EMPTY)", 0, /obj/item/storage/pouch/pressurized_reagent_canister, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
list("Sling Pouch", 0, /obj/item/storage/pouch/sling, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
@@ -245,6 +248,9 @@ GLOBAL_LIST_INIT(cm_vending_clothing_researcher, list(
/obj/item/tool/surgery/synthgraft,
/obj/item/storage/syringe_case,
/obj/item/storage/surgical_case/regular,
+ /obj/item/clothing/accessory/stethoscope,
+ /obj/item/device/flashlight/pen,
+
)
@@ -255,7 +261,7 @@ GLOBAL_LIST_INIT(cm_vending_clothing_researcher, list(
/obj/item/device/healthanalyzer,
/obj/item/tool/surgery/surgical_line,
/obj/item/tool/surgery/synthgraft,
- /obj/item/device/flashlight/pen,
/obj/item/clothing/accessory/stethoscope,
+ /obj/item/device/flashlight/pen,
/obj/item/storage/syringe_case,
)
diff --git a/code/game/machinery/vending/vendor_types/crew/mp.dm b/code/game/machinery/vending/vendor_types/crew/mp.dm
index b63a02248168..5f85060dc96f 100644
--- a/code/game/machinery/vending/vendor_types/crew/mp.dm
+++ b/code/game/machinery/vending/vendor_types/crew/mp.dm
@@ -24,7 +24,7 @@ GLOBAL_LIST_INIT(cm_vending_clothing_military_police, list(
list("BELT (CHOOSE 1)", 0, null, null, null),
list("M276 General Pistol Holster Rig", 0, /obj/item/storage/belt/gun/m4a3, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
- list("M276 M44 Holster Rig", 0, /obj/item/storage/belt/gun/m44, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
+ list("M276 General Revolver Holster Rig", 0, /obj/item/storage/belt/gun/m44, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
list("M276 G8-A General Utility Pouch", 0, /obj/item/storage/backpack/general_belt, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
list("POUCHES (CHOOSE 2)", 0, null, null, null),
@@ -82,7 +82,7 @@ GLOBAL_LIST_INIT(cm_vending_clothing_military_police_warden, list(
list("BELT (CHOOSE 1)", 0, null, null, null),
list("M276 General Pistol Holster Rig", 0, /obj/item/storage/belt/gun/m4a3, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
- list("M276 M44 Holster Rig", 0, /obj/item/storage/belt/gun/m44, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
+ list("M276 General Revolver Holster Rig", 0, /obj/item/storage/belt/gun/m44, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
list("M276 G8-A General Utility Pouch", 0, /obj/item/storage/backpack/general_belt, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
list("POUCHES (CHOOSE 2)", 0, null, null, null),
diff --git a/code/game/machinery/vending/vendor_types/crew/pilot_officer.dm b/code/game/machinery/vending/vendor_types/crew/pilot_officer.dm
index 8f9ac837cb6a..45ad67d41c74 100644
--- a/code/game/machinery/vending/vendor_types/crew/pilot_officer.dm
+++ b/code/game/machinery/vending/vendor_types/crew/pilot_officer.dm
@@ -80,7 +80,7 @@ GLOBAL_LIST_INIT(cm_vending_clothing_pilot_officer, list(
list("M276 Lifesaver Bag (Full)", 0, /obj/item/storage/belt/medical/lifesaver/full, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED),
list("M276 Medical Storage Rig (Full)", 0, /obj/item/storage/belt/medical/full, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED),
list("M276 M39 Holster Rig", 0, /obj/item/storage/belt/gun/m39, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
- list("M276 M44 Holster Rig", 0, /obj/item/storage/belt/gun/m44, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
+ list("M276 General Revolver Holster Rig", 0, /obj/item/storage/belt/gun/m44, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
list("M276 M82F Holster Rig", 0, /obj/item/storage/belt/gun/flaregun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
list("M276 General Pistol Holster Rig", 0, /obj/item/storage/belt/gun/m4a3, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
list("M276 Shotgun Shell Loading Rig", 0, /obj/item/storage/belt/shotgun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
@@ -169,7 +169,7 @@ GLOBAL_LIST_INIT(cm_vending_clothing_dropship_crew_chief, list(
list("M276 Lifesaver Bag (Full)", 0, /obj/item/storage/belt/medical/lifesaver/full, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED),
list("M276 Medical Storage Rig (Full)", 0, /obj/item/storage/belt/medical/full, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED),
list("M276 M39 Holster Rig", 0, /obj/item/storage/belt/gun/m39, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
- list("M276 M44 Holster Rig", 0, /obj/item/storage/belt/gun/m44, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
+ list("M276 General Revolver Holster Rig", 0, /obj/item/storage/belt/gun/m44, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
list("M276 M82F Holster Rig", 0, /obj/item/storage/belt/gun/flaregun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
list("M276 General Pistol Holster Rig", 0, /obj/item/storage/belt/gun/m4a3, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
list("M276 Shotgun Shell Loading Rig", 0, /obj/item/storage/belt/shotgun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
diff --git a/code/game/machinery/vending/vendor_types/crew/sea.dm b/code/game/machinery/vending/vendor_types/crew/sea.dm
index 37cacfd14a6f..99daa1325b0e 100644
--- a/code/game/machinery/vending/vendor_types/crew/sea.dm
+++ b/code/game/machinery/vending/vendor_types/crew/sea.dm
@@ -2,7 +2,7 @@
GLOBAL_LIST_INIT(cm_vending_gear_sea, list(
list("PERSONAL PRIMARY (CHOOSE 1)", 0, null, null, null),
- list("M41A MK1 Pulse Rifle", 0, /obj/item/weapon/gun/rifle/m41aMK1, MARINE_CAN_BUY_ESSENTIALS, VENDOR_ITEM_REGULAR),
+ list("M41A MK1 Pulse Rifle", 0, /obj/item/weapon/gun/rifle/m41aMK1, MARINE_CAN_BUY_SECONDARY, VENDOR_ITEM_REGULAR),
list("SPARE AMMUNITION", 0, null, null, null),
list("M41A MK1 Magazine", 9, /obj/item/ammo_magazine/rifle/m41aMK1, null, VENDOR_ITEM_REGULAR),
@@ -28,11 +28,13 @@ GLOBAL_LIST_INIT(cm_vending_gear_sea, list(
GLOBAL_LIST_INIT(cm_vending_clothing_sea, list(
list("STANDARD EQUIPMENT (TAKE ALL)", 0, null, null, null),
+ list("Drill Hat", 0, /obj/item/clothing/head/drillhat, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_RECOMMENDED),
list("Officer Uniform", 0, /obj/item/clothing/under/marine/dress, MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_MANDATORY),
+ list("USCM Service Jacket", 0, /obj/item/clothing/suit/storage/jacket/marine/service, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_REGULAR),
+ list("Marine Combat Boots", 0, /obj/item/clothing/shoes/marine/knife, MARINE_CAN_BUY_SHOES, VENDOR_ITEM_MANDATORY),
list("Headset", 0, /obj/item/device/radio/headset/almayer/mcom/cdrcom, MARINE_CAN_BUY_EAR, VENDOR_ITEM_MANDATORY),
list("Satchel", 0, /obj/item/storage/backpack/satchel/lockable, MARINE_CAN_BUY_BACKPACK, VENDOR_ITEM_MANDATORY),
list("MRE", 0, /obj/item/storage/box/MRE, MARINE_CAN_BUY_MRE, VENDOR_ITEM_MANDATORY),
- list("Marine Combat Boots", 0, /obj/item/clothing/shoes/marine/knife, MARINE_CAN_BUY_SHOES, VENDOR_ITEM_MANDATORY),
list("GLOVES (CHOOSE 1)", 0, null, null, null),
list("Insulated Gloves", 0, /obj/item/clothing/gloves/yellow, MARINE_CAN_BUY_GLOVES, VENDOR_ITEM_REGULAR),
@@ -54,12 +56,12 @@ GLOBAL_LIST_INIT(cm_vending_clothing_sea, list(
list("Sidearm Pouch", 0, /obj/item/storage/pouch/pistol, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
list("Sling Pouch", 0, /obj/item/storage/pouch/sling, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
- list("COMBAT ARMOR (CHOOSE 1)", 0, null, null, null),
- list("M3-VL Pattern Ballistics Vest", 0, /obj/item/clothing/suit/storage/marine/light/vest, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_REGULAR),
- list("M3-L Pattern Light Armor", 0, /obj/item/clothing/suit/storage/marine/light, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_RECOMMENDED),
- list("M3 Pattern Padded Armor", 0, /obj/item/clothing/suit/storage/marine/medium/padded, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_REGULAR),
- list("Bulletproof Vest", 0, /obj/item/clothing/suit/armor/bulletproof, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_REGULAR),
- list("USCM Service Jacket", 0, /obj/item/clothing/suit/storage/jacket/marine/service, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_REGULAR),
+ list("COMBAT GEAR", 0, null, null, null),
+ list("M10 Helmet", 0, /obj/item/clothing/head/helmet/marine, MARINE_CAN_BUY_COMBAT_HELMET, VENDOR_ITEM_REGULAR),
+ list("M3-VL Pattern Ballistics Vest", 0, /obj/item/clothing/suit/storage/marine/light/vest, MARINE_CAN_BUY_COMBAT_ARMOR, VENDOR_ITEM_REGULAR),
+ list("M3-L Pattern Light Armor", 0, /obj/item/clothing/suit/storage/marine/light, MARINE_CAN_BUY_COMBAT_ARMOR, VENDOR_ITEM_RECOMMENDED),
+ list("M3 Pattern Padded Armor", 0, /obj/item/clothing/suit/storage/marine/medium/padded, MARINE_CAN_BUY_COMBAT_ARMOR, VENDOR_ITEM_REGULAR),
+ list("Bulletproof Vest", 0, /obj/item/clothing/suit/armor/bulletproof, MARINE_CAN_BUY_COMBAT_ARMOR, VENDOR_ITEM_REGULAR),
list("EYEWEAR (CHOOSE 1)", 0, null, null, null),
list("Welding Goggles", 0, /obj/item/clothing/glasses/welding, MARINE_CAN_BUY_GLASSES, VENDOR_ITEM_REGULAR),
@@ -73,10 +75,6 @@ GLOBAL_LIST_INIT(cm_vending_clothing_sea, list(
list("Shoulder Holster", 0, /obj/item/clothing/accessory/storage/holster, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR),
list("Webbing", 0, /obj/item/clothing/accessory/storage/webbing, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR),
list("Drop Pouch", 0, /obj/item/clothing/accessory/storage/droppouch, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR),
-
- list("HEADWEAR (CHOOSE 1)", 0, null, null, null),
- list("Drill Hat", 0, /obj/item/clothing/head/drillhat, MARINE_CAN_BUY_MASK, VENDOR_ITEM_RECOMMENDED),
- list("M10 Helmet", 0, /obj/item/clothing/head/helmet/marine, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_REGULAR),
))
/obj/structure/machinery/cm_vending/clothing/sea
diff --git a/code/game/machinery/vending/vendor_types/crew/senior_officers.dm b/code/game/machinery/vending/vendor_types/crew/senior_officers.dm
index 7157a56aa7f9..e724d2f33a3b 100644
--- a/code/game/machinery/vending/vendor_types/crew/senior_officers.dm
+++ b/code/game/machinery/vending/vendor_types/crew/senior_officers.dm
@@ -54,7 +54,7 @@ GLOBAL_LIST_INIT(cm_vending_clothing_military_police_chief, list(
list("BELT (CHOOSE 1)", 0, null, null, null),
list("M276 General Pistol Holster Rig", 0, /obj/item/storage/belt/gun/m4a3, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
- list("M276 M44 Holster Rig", 0, /obj/item/storage/belt/gun/m44, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
+ list("M276 General Revolver Holster Rig", 0, /obj/item/storage/belt/gun/m44, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
list("M276 G8-A General Utility Pouch", 0, /obj/item/storage/backpack/general_belt, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
list("POUCHES (CHOOSE 2)", 0, null, null, null),
@@ -176,10 +176,11 @@ GLOBAL_LIST_INIT(cm_vending_clothing_req_officer, list(
list("Quartermaster Uniform", 0, /obj/item/clothing/under/rank/qm_suit, MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_MANDATORY),
list("Headset", 0, /obj/item/device/radio/headset/almayer/qm, MARINE_CAN_BUY_EAR, VENDOR_ITEM_MANDATORY),
list("Satchel", 0, /obj/item/storage/backpack/marine/satchel/tech, MARINE_CAN_BUY_BACKPACK, VENDOR_ITEM_MANDATORY),
- list("Quartermaster Jacket", 0, /obj/item/clothing/suit/storage/RO, MARINE_CAN_BUY_MRE, VENDOR_ITEM_MANDATORY),
+ list("Quartermaster Jacket", 0, /obj/item/clothing/suit/storage/jacket/marine/RO, MARINE_CAN_BUY_MRE, VENDOR_ITEM_MANDATORY),
list("Headgear (CHOOSE 1)", 0, null, null, null),
list("Quartermaster Cap", 0, /obj/item/clothing/head/cmcap/req/ro, MARINE_CAN_BUY_MASK, VENDOR_ITEM_RECOMMENDED),
+ list("Quartermaster Beret", 0, /obj/item/clothing/head/beret/marine/ro, MARINE_CAN_BUY_MASK, VENDOR_ITEM_RECOMMENDED),
list("Requisitions Cap", 0, /obj/item/clothing/head/cmcap/req, MARINE_CAN_BUY_MASK, VENDOR_ITEM_REGULAR),
list("PERSONAL SIDEARM (CHOOSE 1)", 0, null, null, null),
@@ -283,7 +284,8 @@ GLOBAL_LIST_INIT(cm_vending_clothing_cmo, list(
list("Medical Kit Pouch", 0, /obj/item/storage/pouch/medkit, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
list("Pressurized Reagent Canister Pouch (Bicaridine)", 0, /obj/item/storage/pouch/pressurized_reagent_canister/bicaridine, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
list("Pressurized Reagent Canister Pouch (Kelotane)", 0, /obj/item/storage/pouch/pressurized_reagent_canister/kelotane, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
- list("Pressurized Reagent Canister Pouch (Revival Mix)", 0, /obj/item/storage/pouch/pressurized_reagent_canister/revival, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
+ list("Pressurized Reagent Canister Pouch (Revival Mix - Tricordrazine)", 0, /obj/item/storage/pouch/pressurized_reagent_canister/revival_tricord, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
+ list("Pressurized Reagent Canister Pouch (Revival Mix - Peridaxon)", 0, /obj/item/storage/pouch/pressurized_reagent_canister/revival_peri, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
list("Pressurized Reagent Canister Pouch (Tricordrazine)", 0, /obj/item/storage/pouch/pressurized_reagent_canister/tricordrazine, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
list("Pressurized Reagent Canister Pouch (EMPTY)", 0, /obj/item/storage/pouch/pressurized_reagent_canister, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
list("Large General Pouch", 0, /obj/item/storage/pouch/general/large, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
@@ -329,19 +331,21 @@ GLOBAL_LIST_INIT(cm_vending_gear_xo, list(
list("Shotgun Slugs", 20, /obj/item/ammo_magazine/shotgun/slugs, null, VENDOR_ITEM_REGULAR),
list("Flechette Shells", 20, /obj/item/ammo_magazine/shotgun/flechette, null, VENDOR_ITEM_REGULAR),
+ list("SPECIALISATION KIT (CHOOSE 1)", 0, null, null, null),
+ list("Essential Engineer Set", 0, /obj/effect/essentials_set/engi, MARINE_CAN_BUY_ESSENTIALS, VENDOR_ITEM_RECOMMENDED),
+ list("Essential Medical Set", 0, /obj/effect/essentials_set/medic, MARINE_CAN_BUY_ESSENTIALS, VENDOR_ITEM_RECOMMENDED),
+
list("EXPLOSIVES", 0, null, null, null),
list("HEDP Grenade Pack", 15, /obj/item/storage/box/packet/high_explosive, null, VENDOR_ITEM_REGULAR),
list("HEFA Grenade Pack", 15, /obj/item/storage/box/packet/hefa, null, VENDOR_ITEM_REGULAR),
list("WP Grenade Pack", 15, /obj/item/storage/box/packet/phosphorus, null, VENDOR_ITEM_REGULAR),
list("RAIL ATTACHMENTS", 0, null, null, null),
+ list("Magnetic Harness", 12, /obj/item/attachable/magnetic_harness, null, VENDOR_ITEM_RECOMMENDED),
list("Red-Dot Sight", 15, /obj/item/attachable/reddot, null, VENDOR_ITEM_REGULAR),
list("Reflex Sight", 15, /obj/item/attachable/reflex, null, VENDOR_ITEM_REGULAR),
list("S4 2x Telescopic Mini-Scope", 15, /obj/item/attachable/scope/mini, null, VENDOR_ITEM_REGULAR),
- list("Helmet Visors", 0, null, null, null),
- list("Welding Visor", 5, /obj/item/device/helmet_visor/welding_visor, null, VENDOR_ITEM_RECOMMENDED),
-
list("UNDERBARREL ATTACHMENTS", 0, null, null, null),
list("Laser Sight", 15, /obj/item/attachable/lasersight, null, VENDOR_ITEM_REGULAR),
list("Angled Grip", 15, /obj/item/attachable/angledgrip, null, VENDOR_ITEM_REGULAR),
@@ -355,6 +359,22 @@ GLOBAL_LIST_INIT(cm_vending_gear_xo, list(
list("Extended Barrel", 15, /obj/item/attachable/extended_barrel, null, VENDOR_ITEM_REGULAR),
list("Recoil Compensator", 15, /obj/item/attachable/compensator, null, VENDOR_ITEM_REGULAR),
list("Suppressor", 15, /obj/item/attachable/suppressor, null, VENDOR_ITEM_REGULAR),
+
+ list("OTHER SUPPLIES", 0, null, null, null),
+ list("Welding Visor", 5, /obj/item/device/helmet_visor/welding_visor, null, VENDOR_ITEM_REGULAR),
+ list("Insulated Gloves", 3, /obj/item/clothing/gloves/yellow, null, VENDOR_ITEM_REGULAR),
+ list("Entrenching Tool", 1, /obj/item/tool/shovel/etool, null, VENDOR_ITEM_REGULAR),
+ list("Magnetic Harness", 12, /obj/item/attachable/magnetic_harness, null, VENDOR_ITEM_RECOMMENDED),
+ list("Radio Telephone Pack", 15, /obj/item/storage/backpack/marine/satchel/rto, null, VENDOR_ITEM_RECOMMENDED),
+ list("Motion Detector", 5, /obj/item/device/motiondetector, null, VENDOR_ITEM_RECOMMENDED),
+ list("Machete Scabbard (Full)", 5, /obj/item/storage/large_holster/machete/full, null, VENDOR_ITEM_REGULAR),
+ list("Binoculars", 5,/obj/item/device/binoculars, null, VENDOR_ITEM_REGULAR),
+ list("Rangefinder", 8, /obj/item/device/binoculars/range, null, VENDOR_ITEM_REGULAR),
+ list("Laser Designator", 12, /obj/item/device/binoculars/range/designator, null, VENDOR_ITEM_RECOMMENDED),
+ list("Fulton Recovery Device", 5, /obj/item/stack/fulton, null, VENDOR_ITEM_REGULAR),
+ list("Space Cleaner", 2, /obj/item/reagent_container/spray/cleaner, null, VENDOR_ITEM_REGULAR),
+ list("Whistle", 5, /obj/item/device/whistle, null, VENDOR_ITEM_REGULAR),
+ list("Flashlight", 1, /obj/item/device/flashlight, null, VENDOR_ITEM_REGULAR),
))
/obj/effect/essentials_set/xo/shotgunpreset
@@ -377,10 +397,16 @@ GLOBAL_LIST_INIT(cm_vending_gear_xo, list(
//------------UNIFORM/GEAR VENDOR---------------
GLOBAL_LIST_INIT(cm_vending_clothing_xo, list(
+ list("COMBAT EQUIPMENT (TAKE ALL)", 0, null, null, null),
+ list("Officer M3 Armor", 0, /obj/item/clothing/suit/storage/marine/MP/SO, MARINE_CAN_BUY_COMBAT_ARMOR, VENDOR_ITEM_MANDATORY),
+ list("Officer M10 Helmet", 0, /obj/item/clothing/head/helmet/marine/MP/SO, MARINE_CAN_BUY_COMBAT_HELMET, VENDOR_ITEM_MANDATORY),
+ list("Marine Combat Boots", 0, /obj/item/clothing/shoes/marine/knife, MARINE_CAN_BUY_COMBAT_SHOES, VENDOR_ITEM_MANDATORY),
+ list("Marine Combat Gloves", 0, /obj/item/clothing/gloves/marine, MARINE_CAN_BUY_GLOVES, VENDOR_ITEM_MANDATORY),
list("STANDARD EQUIPMENT (TAKE ALL)", 0, null, null, null),
list("Headset", 0, /obj/item/device/radio/headset/almayer/mcom/cdrcom, MARINE_CAN_BUY_EAR, VENDOR_ITEM_MANDATORY),
list("Satchel", 0, /obj/item/storage/backpack/satchel, MARINE_CAN_BUY_BACKPACK, VENDOR_ITEM_MANDATORY),
+ list("MRE", 0, /obj/item/storage/box/MRE, MARINE_CAN_BUY_MRE, VENDOR_ITEM_MANDATORY),
list("UNIFORM (CHOOSE ONE)", 0, null, null, null),
list("Service Uniform", 0, /obj/item/clothing/under/marine/officer/bridge, MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_RECOMMENDED),
@@ -393,53 +419,60 @@ GLOBAL_LIST_INIT(cm_vending_clothing_xo, list(
list("Mod 88 Pistol", 0, /obj/item/storage/belt/gun/m4a3/mod88, MARINE_CAN_BUY_SECONDARY, VENDOR_ITEM_REGULAR),
list("M44 Revolver", 0, /obj/item/storage/belt/gun/m44/mp, MARINE_CAN_BUY_SECONDARY, VENDOR_ITEM_REGULAR),
- list("BELTS (CHOOSE 1)", 0, null, null, null),
- list("G8-A General Utility Pouch", 0, /obj/item/storage/backpack/general_belt, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED),
- list("Military Police Belt", 0, /obj/item/storage/belt/security/MP/full, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED),
- list("M276 Medical Storage Rig", 0, /obj/item/storage/belt/medical/full, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED),
- list("M276 Ammo Load Rig", 0, /obj/item/storage/belt/marine, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED),
- list("M276 Holster Toolrig", 0, /obj/item/storage/belt/gun/utility/full, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED),
- list("M276 M82F Holster Rig", 0, /obj/item/storage/belt/gun/flaregun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
-
- list("COMBAT EQUIPMENT (TAKE ALL)", 0, null, null, null),
- list("Officer M3 Armor", 0, /obj/item/clothing/suit/storage/marine/MP/SO, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_MANDATORY),
- list("Officer M10 Helmet", 0, /obj/item/clothing/head/helmet/marine/MP/SO, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_MANDATORY),
- list("Marine Combat Boots", 0, /obj/item/clothing/shoes/marine/knife, MARINE_CAN_BUY_SHOES, VENDOR_ITEM_MANDATORY),
- list("Marine Combat Gloves", 0, /obj/item/clothing/gloves/marine, MARINE_CAN_BUY_GLOVES, VENDOR_ITEM_MANDATORY),
-
list("EYEWEAR (CHOOSE 1)", 0, null, null, null),
list("Medical HUD Glasses", 0, /obj/item/clothing/glasses/hud/health, MARINE_CAN_BUY_GLASSES, VENDOR_ITEM_RECOMMENDED),
list("Security HUD Glasses", 0, /obj/item/clothing/glasses/sunglasses/sechud, MARINE_CAN_BUY_GLASSES, VENDOR_ITEM_REGULAR),
list("Bimex Personal Shades", 0, /obj/item/clothing/glasses/sunglasses/big, MARINE_CAN_BUY_GLASSES, VENDOR_ITEM_RECOMMENDED),
list("Aviator Shades", 0, /obj/item/clothing/glasses/sunglasses/aviator, MARINE_CAN_BUY_GLASSES, VENDOR_ITEM_REGULAR),
+ list("HATS (CHOOSE 1)", 0, null, null, null),
+ list("Officer Beret", 0, /obj/item/clothing/head/beret/marine/chiefofficer, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_REGULAR),
+ list("Service Peaked Cap", 0, /obj/item/clothing/head/marine/peaked/service, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_REGULAR),
+ list("Patrol Cap", 0, /obj/item/clothing/head/cmcap, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_REGULAR),
+ list("Officer Cap", 0, /obj/item/clothing/head/cmcap/bridge, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_REGULAR),
+
list("PATCHES", 0, null, null, null),
- list("Falling Falcons Shoulder Patch", 0, /obj/item/clothing/accessory/patch/falcon, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_MANDATORY),
- list("USCM Shoulder Patch", 0, /obj/item/clothing/accessory/patch, MARINE_CAN_BUY_MRE, VENDOR_ITEM_MANDATORY),
+ list("Falling Falcons Shoulder Patch", 1, /obj/item/clothing/accessory/patch/falcon, null, VENDOR_ITEM_REGULAR),
+ list("USCM Shoulder Patch", 1, /obj/item/clothing/accessory/patch, null, VENDOR_ITEM_REGULAR),
+
+
+ list("BELT (CHOOSE 1)", 0, null, null, null),
+ list("G8-A General Utility Pouch", 0, /obj/item/storage/backpack/general_belt, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
+ list("M276 Ammo Load Rig", 0, /obj/item/storage/belt/marine, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED),
+ list("M276 Shotgun Shell Loading Rig", 0, /obj/item/storage/belt/shotgun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED),
+ list("M276 Toolbelt Rig (Full)", 0, /obj/item/storage/belt/utility/full, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED),
+ list("M276 Holster Toolrig (Full)", 0, /obj/item/storage/belt/gun/utility/full, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
+ list("M276 Lifesaver Bag (Full)", 0, /obj/item/storage/belt/medical/lifesaver/full, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED),
+ list("M276 Medical Storage Rig (Full)", 0, /obj/item/storage/belt/medical/full, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
+ list("M276 M39 Holster Rig", 0, /obj/item/storage/belt/gun/m39, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
+ list("M276 M82F Holster Rig", 0, /obj/item/storage/belt/gun/flaregun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
+ list("M276 M40 Grenade Rig", 0, /obj/item/storage/belt/grenade, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
+ list("Military Police Belt", 0, /obj/item/storage/belt/security/MP/full, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED),
list("POUCHES (CHOOSE 2)", 0, null, null, null),
- list("First-Aid Pouch (Refillable Injectors)", 0, /obj/item/storage/pouch/firstaid/full, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Autoinjector Pouch", 0, /obj/item/storage/pouch/autoinjector/full, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
list("First-Aid Pouch (Splints, Gauze, Ointment)", 0, /obj/item/storage/pouch/firstaid/full/alternate, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
- list("First-Aid Pouch (Pill Packets)", 0, /obj/item/storage/pouch/firstaid/full/pills, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
- list("Large General Pouch", 0, /obj/item/storage/pouch/general/large, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
- list("Sidearm Pouch", 0, /obj/item/storage/pouch/pistol, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("First-Aid Pouch (Pill Packets)", 0, /obj/item/storage/pouch/firstaid/full/pills, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Large General Pouch", 0, /obj/item/storage/pouch/general/large, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
+ list("Large Magazine Pouch", 0, /obj/item/storage/pouch/magazine/large, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
+ list("Large Shotgun Shell Pouch", 0, /obj/item/storage/pouch/shotgun/large, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
list("Large Pistol Magazine Pouch", 0, /obj/item/storage/pouch/magazine/pistol/large, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
list("Medical Pouch", 0, /obj/item/storage/pouch/medical, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
- list("Document Pouch", 0, /obj/item/storage/pouch/document, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
- list("Shotgun Shell Pouch", 0, /obj/item/storage/pouch/shotgun, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Medical Kit Pouch", 0, /obj/item/storage/pouch/medkit, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Pistol Pouch", 0, /obj/item/storage/pouch/pistol, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Sling Pouch", 0, /obj/item/storage/pouch/sling, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Tools Pouch (Full)", 0, /obj/item/storage/pouch/tools/full, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
+ list("Construction Pouch", 0, /obj/item/storage/pouch/construction, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Electronics Pouch (Full)", 0, /obj/item/storage/pouch/electronics/full, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Flare Pouch (Full)", 0, /obj/item/storage/pouch/flare/full, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Fuel Tank Strap Pouch", 0, /obj/item/storage/pouch/flamertank, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
list("ACCESSORIES (CHOOSE 1)", 0, null, null, null),
- list("Shoulder Holster", 0, /obj/item/clothing/accessory/storage/holster, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR),
- list("Black Webbing Vest", 0, /obj/item/clothing/accessory/storage/black_vest, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR),
+ list("Black Webbing Vest", 0, /obj/item/clothing/accessory/storage/black_vest, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_RECOMMENDED),
list("Brown Webbing Vest", 0, /obj/item/clothing/accessory/storage/black_vest/brown_vest, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR),
- list("Webbing", 0, /obj/item/clothing/accessory/storage/webbing, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR),
list("Drop Pouch", 0, /obj/item/clothing/accessory/storage/droppouch, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR),
-
- list("HATS (CHOOSE 1)", 0, null, null, null),
- list("Officer Beret", 0, /obj/item/clothing/head/beret/marine/chiefofficer, MARINE_CAN_BUY_MASK, VENDOR_ITEM_REGULAR),
- list("Service Peaked Cap", 0, /obj/item/clothing/head/marine/peaked/service, MARINE_CAN_BUY_MASK, VENDOR_ITEM_REGULAR),
- list("Patrol Cap", 0, /obj/item/clothing/head/cmcap, MARINE_CAN_BUY_MASK, VENDOR_ITEM_REGULAR),
- list("Officer Cap", 0, /obj/item/clothing/head/cmcap/bridge, MARINE_CAN_BUY_MASK, VENDOR_ITEM_REGULAR),
+ list("Webbing", 0, /obj/item/clothing/accessory/storage/webbing, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR),
+ list("Shoulder Holster", 0, /obj/item/clothing/accessory/storage/holster, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR),
))
diff --git a/code/game/machinery/vending/vendor_types/crew/staff_officer.dm b/code/game/machinery/vending/vendor_types/crew/staff_officer.dm
index 50b83ccdc54f..65fbf2917699 100644
--- a/code/game/machinery/vending/vendor_types/crew/staff_officer.dm
+++ b/code/game/machinery/vending/vendor_types/crew/staff_officer.dm
@@ -7,11 +7,11 @@
/obj/structure/machinery/cm_vending/clothing/staff_officer/get_listed_products(mob/user)
return GLOB.cm_vending_clothing_staff_officer
-//------------GEAR---------------
+//------------CLOTHING---------------
GLOBAL_LIST_INIT(cm_vending_clothing_staff_officer, list(
list("STANDARD EQUIPMENT (TAKE ALL)", 0, null, null, null),
- list("Boots", 0, /obj/item/clothing/shoes/marine/knife, MARINE_CAN_BUY_SHOES, VENDOR_ITEM_MANDATORY),
+ list("Boots", 0, /obj/item/clothing/shoes/marine/knife, MARINE_CAN_BUY_COMBAT_SHOES, VENDOR_ITEM_MANDATORY),
list("Headset", 0, /obj/item/device/radio/headset/almayer/mcom, MARINE_CAN_BUY_EAR, VENDOR_ITEM_MANDATORY),
list("MRE", 0, /obj/item/storage/box/MRE, MARINE_CAN_BUY_MRE, VENDOR_ITEM_MANDATORY),
@@ -31,12 +31,24 @@ GLOBAL_LIST_INIT(cm_vending_clothing_staff_officer, list(
list("Officer Cap", 0, /obj/item/clothing/head/cmcap/bridge, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_RECOMMENDED),
list("Service Peaked Cap", 0, /obj/item/clothing/head/marine/peaked/service, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_RECOMMENDED),
+ list("PATCHES", 0, null, null, null),
+ list("Falling Falcons Shoulder Patch", 1, /obj/item/clothing/accessory/patch/falcon, null, VENDOR_ITEM_REGULAR),
+ list("USCM Shoulder Patch", 1, /obj/item/clothing/accessory/patch, null, VENDOR_ITEM_REGULAR),
+
list("PERSONAL SIDEARM (CHOOSE 1)", 0, null, null, null),
list("M44 Revolver", 0, /obj/item/storage/belt/gun/m44/mp, MARINE_CAN_BUY_SECONDARY, VENDOR_ITEM_RECOMMENDED),
+ list("Mod 88 Pistol", 0, /obj/item/storage/belt/gun/m4a3/mod88, MARINE_CAN_BUY_SECONDARY, VENDOR_ITEM_RECOMMENDED),
list("M4A3 Pistol", 0, /obj/item/storage/belt/gun/m4a3/commander, MARINE_CAN_BUY_SECONDARY, VENDOR_ITEM_RECOMMENDED),
list("VP78 Pistol", 0, /obj/item/storage/belt/gun/m4a3/vp78, MARINE_CAN_BUY_SECONDARY, VENDOR_ITEM_RECOMMENDED),
+ list("ACCESSORIES (CHOOSE 1)", 0, null, null, null),
+ list("Black Webbing Vest", 0, /obj/item/clothing/accessory/storage/black_vest, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_RECOMMENDED),
+ list("Brown Webbing Vest", 0, /obj/item/clothing/accessory/storage/black_vest/brown_vest, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR),
+ list("Drop Pouch", 0, /obj/item/clothing/accessory/storage/droppouch, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR),
+ list("Webbing", 0, /obj/item/clothing/accessory/storage/webbing, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR),
+ list("Shoulder Holster", 0, /obj/item/clothing/accessory/storage/holster, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR),
+
list("BACKPACK (CHOOSE 1)", 0, null, null, null),
list("Backpack", 0, /obj/item/storage/backpack/marine, MARINE_CAN_BUY_BACKPACK, VENDOR_ITEM_REGULAR),
list("Satchel", 0, /obj/item/storage/backpack/marine/satchel, MARINE_CAN_BUY_BACKPACK, VENDOR_ITEM_REGULAR),
@@ -46,8 +58,85 @@ GLOBAL_LIST_INIT(cm_vending_clothing_staff_officer, list(
list("Binoculars", 5,/obj/item/device/binoculars, null, VENDOR_ITEM_REGULAR),
list("Rangefinder", 8, /obj/item/device/binoculars/range, null, VENDOR_ITEM_REGULAR),
list("Laser Designator", 12, /obj/item/device/binoculars/range/designator, null, VENDOR_ITEM_RECOMMENDED),
- list("Flashlight", 1, /obj/item/device/flashlight, null, VENDOR_ITEM_RECOMMENDED),
+ list("Flashlight", 1, /obj/item/device/flashlight, null, VENDOR_ITEM_REGULAR),
+ list("Motion Detector", 5, /obj/item/device/motiondetector, null, VENDOR_ITEM_RECOMMENDED),
+ list("Space Cleaner", 2, /obj/item/reagent_container/spray/cleaner, null, VENDOR_ITEM_REGULAR),
+ list("Whistle", 5, /obj/item/device/whistle, null, VENDOR_ITEM_REGULAR),
+ ))
+
+/obj/structure/machinery/cm_vending/gear/staff_officer_armory
+ name = "\improper ColMarTech Staff Officer Armory Equipment Rack"
+ desc = "An automated combat equipment vendor for Staff Officers."
+ req_access = list(ACCESS_MARINE_COMMAND)
+ icon_state = "mar_rack"
+ vendor_role = list(JOB_SO)
+
+/obj/structure/machinery/cm_vending/gear/staff_officer_armory/get_listed_products(mob/user)
+ return GLOB.cm_vending_gear_staff_officer_armory
+
+//------------ARMORY---------------
+
+GLOBAL_LIST_INIT(cm_vending_gear_staff_officer_armory, list(
+ list("COMBAT EQUIPMENT (TAKE ALL)", 0, null, null, null),
+ list("Officer M3 Armor", 0, /obj/item/clothing/suit/storage/marine/MP/SO, MARINE_CAN_BUY_COMBAT_ARMOR, VENDOR_ITEM_MANDATORY),
+ list("Officer M10 Helmet", 0, /obj/item/clothing/head/helmet/marine/MP/SO, MARINE_CAN_BUY_COMBAT_HELMET, VENDOR_ITEM_MANDATORY),
+ list("Marine Combat Boots", 0, /obj/item/clothing/shoes/marine/knife, MARINE_CAN_BUY_COMBAT_SHOES, VENDOR_ITEM_MANDATORY),
+ list("Marine Combat Gloves", 0, /obj/item/clothing/gloves/marine, MARINE_CAN_BUY_GLOVES, VENDOR_ITEM_MANDATORY),
+ list("MRE", 0, /obj/item/storage/box/MRE, MARINE_CAN_BUY_MRE, VENDOR_ITEM_MANDATORY),
+ list("Aviator Shades", 0, /obj/item/clothing/glasses/sunglasses/aviator, MARINE_CAN_BUY_GLASSES, VENDOR_ITEM_REGULAR),
+ list("Bayonet", 0, /obj/item/attachable/bayonet, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR),
+
+ list("SPECIALISATION KIT (CHOOSE 1)", 0, null, null, null),
+ list("Essential Engineer Set", 0, /obj/effect/essentials_set/engi, MARINE_CAN_BUY_ESSENTIALS, VENDOR_ITEM_MANDATORY),
+ list("Essential Medical Set", 0, /obj/effect/essentials_set/medic, MARINE_CAN_BUY_ESSENTIALS, VENDOR_ITEM_MANDATORY),
+
+ list("BELT (CHOOSE 1)", 0, null, null, null),
+ list("G8-A General Utility Pouch", 0, /obj/item/storage/backpack/general_belt, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
+ list("M276 Ammo Load Rig", 0, /obj/item/storage/belt/marine, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED),
+ list("M276 Shotgun Shell Loading Rig", 0, /obj/item/storage/belt/shotgun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED),
+ list("M276 Toolbelt Rig (Full)", 0, /obj/item/storage/belt/utility/full, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED),
+ list("M276 Lifesaver Bag (Full)", 0, /obj/item/storage/belt/medical/lifesaver/full, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED),
+ list("M276 Medical Storage Rig (Full)", 0, /obj/item/storage/belt/medical/full, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
+ list("M276 M39 Holster Rig", 0, /obj/item/storage/belt/gun/m39, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
+ list("M276 Holster Toolrig (Full)", 0, /obj/item/storage/belt/gun/utility/full, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
+ list("M276 M82F Holster Rig", 0, /obj/item/storage/belt/gun/flaregun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
+ list("M276 M40 Grenade Rig", 0, /obj/item/storage/belt/grenade, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
+
+ list("POUCHES (CHOOSE 2)", 0, null, null, null),
+ list("Autoinjector Pouch", 0, /obj/item/storage/pouch/autoinjector/full, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
+ list("First-Aid Pouch (Splints, Gauze, Ointment)", 0, /obj/item/storage/pouch/firstaid/full/alternate, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("First-Aid Pouch (Pill Packets)", 0, /obj/item/storage/pouch/firstaid/full/pills, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Large General Pouch", 0, /obj/item/storage/pouch/general/large, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
+ list("Large Magazine Pouch", 0, /obj/item/storage/pouch/magazine/large, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
+ list("Large Shotgun Shell Pouch", 0, /obj/item/storage/pouch/shotgun/large, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
+ list("Large Pistol Magazine Pouch", 0, /obj/item/storage/pouch/magazine/pistol/large, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Medical Pouch", 0, /obj/item/storage/pouch/medical, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Medical Kit Pouch", 0, /obj/item/storage/pouch/medkit, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Pistol Pouch", 0, /obj/item/storage/pouch/pistol, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Sling Pouch", 0, /obj/item/storage/pouch/sling, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Tools Pouch (Full)", 0, /obj/item/storage/pouch/tools/full, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
+ list("Construction Pouch", 0, /obj/item/storage/pouch/construction, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Electronics Pouch (Full)", 0, /obj/item/storage/pouch/electronics/full, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Flare Pouch (Full)", 0, /obj/item/storage/pouch/flare/full, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Fuel Tank Strap Pouch", 0, /obj/item/storage/pouch/flamertank, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+
+ list("MASK (CHOOSE 1)", 0, null, null, null),
+ list("Gas Mask", 0, /obj/item/clothing/mask/gas, MARINE_CAN_BUY_MASK, VENDOR_ITEM_REGULAR),
+ list("Heat Absorbent Coif", 0, /obj/item/clothing/mask/rebreather/scarf, MARINE_CAN_BUY_MASK, VENDOR_ITEM_REGULAR),
+
+ list("OTHER SUPPLIES", 0, null, null, null),
+ list("Welding Visor", 5, /obj/item/device/helmet_visor/welding_visor, null, VENDOR_ITEM_REGULAR),
+ list("Insulated Gloves", 3, /obj/item/clothing/gloves/yellow, null, VENDOR_ITEM_REGULAR),
+ list("Entrenching Tool", 1, /obj/item/tool/shovel/etool, null, VENDOR_ITEM_REGULAR),
+ list("Magnetic Harness", 12, /obj/item/attachable/magnetic_harness, null, VENDOR_ITEM_RECOMMENDED),
+ list("Radio Telephone Pack", 15, /obj/item/storage/backpack/marine/satchel/rto, null, VENDOR_ITEM_RECOMMENDED),
list("Motion Detector", 5, /obj/item/device/motiondetector, null, VENDOR_ITEM_RECOMMENDED),
+ list("Machete Scabbard (Full)", 5, /obj/item/storage/large_holster/machete/full, null, VENDOR_ITEM_REGULAR),
+ list("Binoculars", 5,/obj/item/device/binoculars, null, VENDOR_ITEM_REGULAR),
+ list("Rangefinder", 8, /obj/item/device/binoculars/range, null, VENDOR_ITEM_REGULAR),
+ list("Laser Designator", 12, /obj/item/device/binoculars/range/designator, null, VENDOR_ITEM_RECOMMENDED),
+ list("Fulton Recovery Device", 5, /obj/item/stack/fulton, null, VENDOR_ITEM_REGULAR),
list("Space Cleaner", 2, /obj/item/reagent_container/spray/cleaner, null, VENDOR_ITEM_REGULAR),
list("Whistle", 5, /obj/item/device/whistle, null, VENDOR_ITEM_REGULAR),
+ list("Flashlight", 1, /obj/item/device/flashlight, null, VENDOR_ITEM_REGULAR),
))
diff --git a/code/game/machinery/vending/vendor_types/crew/staff_officer_armory.dm b/code/game/machinery/vending/vendor_types/crew/staff_officer_armory.dm
deleted file mode 100644
index 46de6ed028d0..000000000000
--- a/code/game/machinery/vending/vendor_types/crew/staff_officer_armory.dm
+++ /dev/null
@@ -1,89 +0,0 @@
-/obj/structure/machinery/cm_vending/clothing/staff_officer_armory
- name = "\improper ColMarTech Staff Officer Armory Equipment Rack"
- desc = "An automated combat equipment vendor for Staff Officers."
- req_access = list(ACCESS_MARINE_COMMAND)
- icon_state = "mar_rack"
- vendor_role = list(JOB_SO)
-
-/obj/structure/machinery/cm_vending/clothing/staff_officer_armory/get_listed_products(mob/user)
- return GLOB.cm_vending_clothing_staff_officer_armory
-
-//------------GEAR---------------
-
-GLOBAL_LIST_INIT(cm_vending_clothing_staff_officer_armory, list(
- list("COMBAT EQUIPMENT (TAKE ALL)", 0, null, null, null),
- list("Officer M3 Armor", 0, /obj/item/clothing/suit/storage/marine/MP/SO, MARINE_CAN_BUY_COMBAT_ARMOR, VENDOR_ITEM_MANDATORY),
- list("Officer M10 Helmet", 0, /obj/item/clothing/head/helmet/marine/MP/SO, MARINE_CAN_BUY_COMBAT_HELMET, VENDOR_ITEM_MANDATORY),
- list("Marine Combat Boots", 0, /obj/item/clothing/shoes/marine/knife, MARINE_CAN_BUY_SHOES, VENDOR_ITEM_MANDATORY),
- list("Marine Combat Gloves", 0, /obj/item/clothing/gloves/marine, MARINE_CAN_BUY_GLOVES, VENDOR_ITEM_MANDATORY),
- list("MRE", 0, /obj/item/storage/box/MRE, MARINE_CAN_BUY_MRE, VENDOR_ITEM_MANDATORY),
- list("Aviator Shades", 0, /obj/item/clothing/glasses/sunglasses/aviator, MARINE_CAN_BUY_GLASSES, VENDOR_ITEM_REGULAR),
- list("Bayonet", 0, /obj/item/attachable/bayonet, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR),
-
- list("SPECIALISATION KIT (CHOOSE 1)", 0, null, null, null),
- list("Essential Engineer Set", 0, /obj/effect/essentials_set/engi, MARINE_CAN_BUY_ESSENTIALS, VENDOR_ITEM_RECOMMENDED),
- list("Essential Medical Set", 0, /obj/effect/essentials_set/medic, MARINE_CAN_BUY_ESSENTIALS, VENDOR_ITEM_RECOMMENDED),
-
- list("BELT (CHOOSE 1)", 0, null, null, null),
- list("G8-A General Utility Pouch", 0, /obj/item/storage/backpack/general_belt, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED),
- list("M276 Ammo Load Rig", 0, /obj/item/storage/belt/marine, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED),
- list("M276 Toolbelt Rig (Full)", 0, /obj/item/storage/belt/utility/full, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED),
- list("M276 Lifesaver Bag (Full)", 0, /obj/item/storage/belt/medical/lifesaver/full, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
- list("M276 Medical Storage Rig (Full)", 0, /obj/item/storage/belt/medical/full, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
- list("M276 M39 Holster Rig", 0, /obj/item/storage/belt/gun/m39, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
- list("M276 M82F Holster Rig", 0, /obj/item/storage/belt/gun/flaregun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
- list("M276 Shotgun Shell Loading Rig", 0, /obj/item/storage/belt/shotgun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
- list("M276 M40 Grenade Rig", 0, /obj/item/storage/belt/grenade, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
-
- list("POUCHES (CHOOSE 2)", 0, null, null, null),
- list("Autoinjector Pouch", 0, /obj/item/storage/pouch/autoinjector, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
- list("Construction Pouch", 0, /obj/item/storage/pouch/construction, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
- list("Document Pouch", 0, /obj/item/storage/pouch/document, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
- list("Electronics Pouch (Full)", 0, /obj/item/storage/pouch/electronics/full, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
- list("First-Aid Pouch (Refillable Injectors)", 0, /obj/item/storage/pouch/firstaid/full, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
- list("First-Aid Pouch (Splints, Gauze, Ointment)", 0, /obj/item/storage/pouch/firstaid/full/alternate, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
- list("First-Aid Pouch (Pill Packets)", 0, /obj/item/storage/pouch/firstaid/full/pills, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
- list("First Responder Pouch", 0, /obj/item/storage/pouch/first_responder, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
- list("Flare Pouch (Full)", 0, /obj/item/storage/pouch/flare/full, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
- list("Fuel Tank Strap Pouch", 0, /obj/item/storage/pouch/flamertank, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
- list("Large General Pouch", 0, /obj/item/storage/pouch/general/large, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
- list("Large Magazine Pouch", 0, /obj/item/storage/pouch/magazine/large, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
- list("Large Shotgun Shell Pouch", 0, /obj/item/storage/pouch/shotgun/large, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
- list("Large Pistol Magazine Pouch", 0, /obj/item/storage/pouch/magazine/pistol/large, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
- list("Medical Pouch", 0, /obj/item/storage/pouch/medical, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
- list("Medical Kit Pouch", 0, /obj/item/storage/pouch/medkit, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
- list("Pistol Pouch", 0, /obj/item/storage/pouch/pistol, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
- list("Sling Pouch", 0, /obj/item/storage/pouch/sling, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
- list("Tools Pouch (Full)", 0, /obj/item/storage/pouch/tools/full, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
-
- list("ACCESSORIES (CHOOSE 1)", 0, null, null, null),
- list("Black Webbing Vest", 0, /obj/item/clothing/accessory/storage/black_vest, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR),
- list("Brown Webbing Vest", 0, /obj/item/clothing/accessory/storage/black_vest/brown_vest, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_RECOMMENDED),
- list("Drop Pouch", 0, /obj/item/clothing/accessory/storage/droppouch, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR),
- list("Webbing", 0, /obj/item/clothing/accessory/storage/webbing, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR),
- list("Shoulder Holster", 0, /obj/item/clothing/accessory/storage/holster, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR),
-
- list("MASK (CHOOSE 1)", 0, null, null, null),
- list("Gas Mask", 0, /obj/item/clothing/mask/gas, MARINE_CAN_BUY_MASK, VENDOR_ITEM_REGULAR),
- list("Heat Absorbent Coif", 0, /obj/item/clothing/mask/rebreather/scarf, MARINE_CAN_BUY_MASK, VENDOR_ITEM_REGULAR),
-
- list("OTHER SUPPLIES", 0, null, null, null),
- list("Medical Helmet Optic", 5, /obj/item/device/helmet_visor/medical, null, VENDOR_ITEM_REGULAR),
- list("Welding Visor", 5, /obj/item/device/helmet_visor/welding_visor, null, VENDOR_ITEM_REGULAR),
- list("Magnetic Harness", 12, /obj/item/attachable/magnetic_harness, null, VENDOR_ITEM_REGULAR),
- list("Radio Telephone Pack", 15, /obj/item/storage/backpack/marine/satchel/rto, null, VENDOR_ITEM_RECOMMENDED),
- list("Binoculars", 5,/obj/item/device/binoculars, null, VENDOR_ITEM_REGULAR),
- list("Rangefinder", 8, /obj/item/device/binoculars/range, null, VENDOR_ITEM_REGULAR),
- list("Laser Designator", 12, /obj/item/device/binoculars/range/designator, null, VENDOR_ITEM_RECOMMENDED),
- list("Data Detector", 5, /obj/item/device/motiondetector/intel, null, VENDOR_ITEM_REGULAR),
- list("Flashlight", 1, /obj/item/device/flashlight, null, VENDOR_ITEM_RECOMMENDED),
- list("Fulton Recovery Device", 5, /obj/item/stack/fulton, null, VENDOR_ITEM_REGULAR),
- list("Motion Detector", 5, /obj/item/device/motiondetector, null, VENDOR_ITEM_REGULAR),
- list("Space Cleaner", 2, /obj/item/reagent_container/spray/cleaner, null, VENDOR_ITEM_REGULAR),
- list("Blowtorch", 5, /obj/item/tool/weldingtool, null, VENDOR_ITEM_REGULAR),
- list("Wrench", 1, /obj/item/tool/wrench, null, VENDOR_ITEM_REGULAR),
- list("Crowbar", 1, /obj/item/tool/crowbar, null, VENDOR_ITEM_REGULAR),
- list("Entrenching Tool", 1, /obj/item/tool/shovel/etool, null, VENDOR_ITEM_REGULAR),
- list("Whistle", 5, /obj/item/device/whistle, null, VENDOR_ITEM_REGULAR),
- list("Machete Scabbard (Full)", 5, /obj/item/storage/large_holster/machete/full, null, VENDOR_ITEM_REGULAR)
- ))
diff --git a/code/game/machinery/vending/vendor_types/crew/synthetic.dm b/code/game/machinery/vending/vendor_types/crew/synthetic.dm
index 9ce15535e2da..240155176efa 100644
--- a/code/game/machinery/vending/vendor_types/crew/synthetic.dm
+++ b/code/game/machinery/vending/vendor_types/crew/synthetic.dm
@@ -164,7 +164,8 @@ GLOBAL_LIST_INIT(cm_vending_clothing_synth, list(
list("Medical Kit Pouch", 0, /obj/item/storage/pouch/medkit, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
list("Pressurized Reagent Canister Pouch (Bicaridine)", 0, /obj/item/storage/pouch/pressurized_reagent_canister/bicaridine, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
list("Pressurized Reagent Canister Pouch (Kelotane)", 0, /obj/item/storage/pouch/pressurized_reagent_canister/kelotane, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
- list("Pressurized Reagent Canister Pouch (Revival Mix)", 0, /obj/item/storage/pouch/pressurized_reagent_canister/revival, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Pressurized Reagent Canister Pouch (Revival Mix - Tricordrazine)", 0, /obj/item/storage/pouch/pressurized_reagent_canister/revival_tricord, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Pressurized Reagent Canister Pouch (Revival Mix - Peridaxon)", 0, /obj/item/storage/pouch/pressurized_reagent_canister/revival_peri, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
list("Pressurized Reagent Canister Pouch (Tricordrazine)", 0, /obj/item/storage/pouch/pressurized_reagent_canister/tricordrazine, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
list("Pressurized Reagent Canister Pouch (EMPTY)", 0, /obj/item/storage/pouch/pressurized_reagent_canister, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
list("Tools Pouch (Full)", 0, /obj/item/storage/pouch/tools/full, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
@@ -316,7 +317,7 @@ GLOBAL_LIST_INIT(cm_vending_clothing_synth_snowflake, list(
list("Windbreaker, Exploration", 12, /obj/item/clothing/suit/storage/windbreaker/windbreaker_covenant, null, VENDOR_ITEM_REGULAR),
list("Labcoat", 12, /obj/item/clothing/suit/storage/labcoat, null, VENDOR_ITEM_REGULAR),
list("Labcoat, Researcher", 12, /obj/item/clothing/suit/storage/labcoat/researcher, null, VENDOR_ITEM_REGULAR),
- list("Quartermaster Jacket", 12, /obj/item/clothing/suit/storage/RO, null, VENDOR_ITEM_REGULAR),
+ list("Quartermaster Jacket", 12, /obj/item/clothing/suit/storage/jacket/marine/RO, null, VENDOR_ITEM_REGULAR),
list("Bio Suit", 12, /obj/item/clothing/suit/storage/synthbio, null, VENDOR_ITEM_REGULAR),
list("Black Suit Jacket", 12, /obj/item/clothing/suit/storage/jacket/marine/corporate/black, null, VENDOR_ITEM_REGULAR),
list("Brown Suit Jacket", 12, /obj/item/clothing/suit/storage/jacket/marine/corporate/brown, null, VENDOR_ITEM_REGULAR),
diff --git a/code/game/machinery/vending/vendor_types/crew/vehicle_crew.dm b/code/game/machinery/vending/vendor_types/crew/vehicle_crew.dm
index 53853f7d4e8b..2dd5bdf2ee68 100644
--- a/code/game/machinery/vending/vendor_types/crew/vehicle_crew.dm
+++ b/code/game/machinery/vending/vendor_types/crew/vehicle_crew.dm
@@ -274,7 +274,7 @@ GLOBAL_LIST_INIT(cm_vending_clothing_vehicle_crew, list(
list("M276 Ammo Load Rig", 0, /obj/item/storage/belt/marine, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED),
list("M276 General Pistol Holster Rig", 0, /obj/item/storage/belt/gun/m4a3, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
list("M276 M39 Holster Rig", 0, /obj/item/storage/belt/gun/m39, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
- list("M276 M44 Holster Rig", 0, /obj/item/storage/belt/gun/m44, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
+ list("M276 General Revolver Holster Rig", 0, /obj/item/storage/belt/gun/m44, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
list("M276 M82F Holster Rig", 0, /obj/item/storage/belt/gun/flaregun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
list("M276 Shotgun Shell Loading Rig", 0, /obj/item/storage/belt/shotgun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
list("M276 Toolbelt Rig (Full)", 0, /obj/item/storage/belt/utility/full, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
diff --git a/code/game/machinery/vending/vendor_types/engineering.dm b/code/game/machinery/vending/vendor_types/engineering.dm
index 6da719e883ba..3662d447a346 100644
--- a/code/game/machinery/vending/vendor_types/engineering.dm
+++ b/code/game/machinery/vending/vendor_types/engineering.dm
@@ -89,7 +89,7 @@
list("Supply Ordering Console", 2, /obj/item/circuitboard/computer/ordercomp, VENDOR_ITEM_REGULAR),
list("Research Data Terminal", 2, /obj/item/circuitboard/computer/research_terminal, VENDOR_ITEM_REGULAR),
list("P.A.C.M.A.N Generator", 1, /obj/item/circuitboard/machine/pacman, VENDOR_ITEM_REGULAR),
- list("Auxiliar Power Storage Unit", 2, /obj/item/circuitboard/machine/ghettosmes, VENDOR_ITEM_REGULAR),
+ list("Auxiliary Power Storage Unit", 2, /obj/item/circuitboard/machine/ghettosmes, VENDOR_ITEM_REGULAR),
list("Air Alarm Electronics", 2, /obj/item/circuitboard/airalarm, VENDOR_ITEM_REGULAR),
list("Security Camera Monitor", 2, /obj/item/circuitboard/computer/cameras, VENDOR_ITEM_REGULAR),
list("Television Set", 4, /obj/item/circuitboard/computer/cameras/tv, VENDOR_ITEM_REGULAR),
diff --git a/code/game/machinery/vending/vendor_types/intelligence_officer.dm b/code/game/machinery/vending/vendor_types/intelligence_officer.dm
index 73d54cbbffca..63d3e93873d2 100644
--- a/code/game/machinery/vending/vendor_types/intelligence_officer.dm
+++ b/code/game/machinery/vending/vendor_types/intelligence_officer.dm
@@ -96,7 +96,7 @@ GLOBAL_LIST_INIT(cm_vending_clothing_intelligence_officer, list(
list("M276 Ammo Load Rig", 0, /obj/item/storage/belt/marine, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED),
list("M276 General Pistol Holster Rig", 0, /obj/item/storage/belt/gun/m4a3, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
list("M276 M39 Holster Rig", 0, /obj/item/storage/belt/gun/m39, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
- list("M276 M44 Holster Rig", 0, /obj/item/storage/belt/gun/m44, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
+ list("M276 General Revolver Holster Rig", 0, /obj/item/storage/belt/gun/m44, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
list("M276 Shotgun Shell Loading Rig", 0, /obj/item/storage/belt/shotgun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
list("M276 Toolbelt Rig (Full)", 0, /obj/item/storage/belt/utility/full, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED),
diff --git a/code/game/machinery/vending/vendor_types/requisitions.dm b/code/game/machinery/vending/vendor_types/requisitions.dm
index 5c5362257da2..ec3783837edf 100644
--- a/code/game/machinery/vending/vendor_types/requisitions.dm
+++ b/code/game/machinery/vending/vendor_types/requisitions.dm
@@ -48,7 +48,7 @@
list("M20 Claymore Anti-Personnel Mine", floor(scale * 4), /obj/item/explosive/mine, VENDOR_ITEM_REGULAR),
list("M40 HEDP Grenade", floor(scale * 25), /obj/item/explosive/grenade/high_explosive, VENDOR_ITEM_REGULAR),
list("M40 HIDP Incendiary Grenade", floor(scale * 4), /obj/item/explosive/grenade/incendiary, VENDOR_ITEM_REGULAR),
- list("M40 HPDP White Phosphorus Smoke Grenade", floor(scale * 4), /obj/item/explosive/grenade/phosphorus, VENDOR_ITEM_REGULAR),
+ list("M40 CCDP Chemical Compound Smoke Grenade", floor(scale * 4), /obj/item/explosive/grenade/phosphorus, VENDOR_ITEM_REGULAR),
list("M40 HSDP Smoke Grenade", floor(scale * 5), /obj/item/explosive/grenade/smokebomb, VENDOR_ITEM_REGULAR),
list("M74 AGM-Frag Airburst Grenade", floor(scale * 4), /obj/item/explosive/grenade/high_explosive/airburst, VENDOR_ITEM_REGULAR),
list("M74 AGM-Incendiary Airburst Grenade", floor(scale * 4), /obj/item/explosive/grenade/incendiary/airburst, VENDOR_ITEM_REGULAR),
@@ -68,6 +68,7 @@
list("Webbing", floor(scale * 5), /obj/item/clothing/accessory/storage/webbing, VENDOR_ITEM_REGULAR),
list("Knife Webbing", floor(scale * 1), /obj/item/clothing/accessory/storage/knifeharness, VENDOR_ITEM_REGULAR),
list("Drop Pouch", floor(scale * 2), /obj/item/clothing/accessory/storage/droppouch, VENDOR_ITEM_REGULAR),
+ list("External Webbing", floor(scale * 5), /obj/item/clothing/suit/storage/webbing, VENDOR_ITEM_REGULAR),
list("BACKPACKS", -1, null, null),
list("Lightweight IMP Backpack", floor(scale * 15), /obj/item/storage/backpack/marine, VENDOR_ITEM_REGULAR),
@@ -87,7 +88,7 @@
list("M276 Knife Rig", floor(scale * 5), /obj/item/storage/belt/knifepouch, VENDOR_ITEM_REGULAR),
list("M276 M39 Holster Rig", floor(scale * 5), /obj/item/storage/belt/gun/m39, VENDOR_ITEM_REGULAR),
list("M276 M40 Grenade Rig", floor(scale * 2), /obj/item/storage/belt/grenade, VENDOR_ITEM_REGULAR),
- list("M276 M44 Holster Rig", floor(scale * 5), /obj/item/storage/belt/gun/m44, VENDOR_ITEM_REGULAR),
+ list("M276 General Revolver Holster Rig", floor(scale * 5), /obj/item/storage/belt/gun/m44, VENDOR_ITEM_REGULAR),
list("M276 M82F Holster Rig", floor(scale * 2), /obj/item/storage/belt/gun/flaregun, VENDOR_ITEM_REGULAR),
list("M276 Shotgun Shell Loading Rig", floor(scale * 10), /obj/item/storage/belt/shotgun, VENDOR_ITEM_REGULAR),
list("M276 Mortar Operator Belt", floor(scale * 2), /obj/item/storage/belt/gun/mortarbelt, VENDOR_ITEM_REGULAR),
@@ -118,7 +119,7 @@
list("Large Shotgun Shell Pouch", floor(scale * 1), /obj/item/storage/pouch/shotgun/large, VENDOR_ITEM_REGULAR),
list("MISCELLANEOUS", -1, null, null),
- list("Combat Flashlight", floor(scale * 5), /obj/item/device/flashlight/combat, VENDOR_ITEM_REGULAR),
+ list("Combat Flashlight", floor(scale * 8), /obj/item/device/flashlight/combat, VENDOR_ITEM_REGULAR),
list("Entrenching Tool", floor(scale * 4), /obj/item/tool/shovel/etool/folded, VENDOR_ITEM_REGULAR),
list("Gas Mask", floor(scale * 10), /obj/item/clothing/mask/gas, VENDOR_ITEM_REGULAR),
list("M89-S Signal Flare Pack", floor(scale * 2), /obj/item/storage/box/m94/signal, VENDOR_ITEM_REGULAR),
@@ -140,28 +141,35 @@
list("Powerloader Certification", 0.75, /obj/item/pamphlet/skill/powerloader, VENDOR_ITEM_REGULAR),
list("Spare PDT/L Battle Buddy Kit", floor(scale * 4), /obj/item/storage/box/pdt_kit, VENDOR_ITEM_REGULAR),
list("W-Y brand rechargeable mini-battery", floor(scale * 3), /obj/item/cell/crap, VENDOR_ITEM_REGULAR),
+ list("Nailgun Magazine (7x45mm)", floor(scale * 4), /obj/item/ammo_magazine/smg/nailgun, VENDOR_ITEM_REGULAR),
list("EXPLOSIVES BOXES", -1, null, null),
list("M15 Fragmentation Grenade Packet", 0, /obj/item/storage/box/packet/m15, VENDOR_ITEM_REGULAR),
list("M40 HEDP Grenade Packet", 0, /obj/item/storage/box/packet/high_explosive, VENDOR_ITEM_REGULAR),
list("M40 HEDP Grenade Box", 0, /obj/item/storage/box/nade_box, VENDOR_ITEM_REGULAR),
list("M40 HIDP Grenade Packet", 0, /obj/item/storage/box/packet/incendiary, VENDOR_ITEM_REGULAR),
- list("M40 HPDP Grenade Box", 0, /obj/item/storage/box/nade_box/phophorus, VENDOR_ITEM_REGULAR),
+ list("M40 HIDP Grenade Box", 0, /obj/item/storage/box/nade_box/incen, VENDOR_ITEM_REGULAR),
+ list("M40 CCDP Grenade Packet", 0, /obj/item/storage/box/packet/phosphorus/strong, VENDOR_ITEM_REGULAR),
+ list("M40 CCDP Grenade Box", 0, /obj/item/storage/box/nade_box/phophorus, VENDOR_ITEM_REGULAR),
list("M40 HSDP Grenade Packet", 0, /obj/item/storage/box/packet/smoke, VENDOR_ITEM_REGULAR),
+ list("M40 MFHS Grenade Packet", 0, /obj/item/storage/box/packet/foam, VENDOR_ITEM_REGULAR),
list("M40 HIRR Baton Slug Packet", 0, /obj/item/storage/box/packet/baton_slug, VENDOR_ITEM_REGULAR),
- list("M74 AGM-Airburst Grenade Packet", 0, /obj/item/storage/box/packet/airburst_he, VENDOR_ITEM_REGULAR),
- list("M74 AGM-F grenade box", 0, /obj/item/storage/box/nade_box/airburst, VENDOR_ITEM_REGULAR),
- list("M74 AGM-Airburst Incendiary Grenade Packet", 0, /obj/item/storage/box/packet/airburst_incen, VENDOR_ITEM_REGULAR),
- list("M74 AGM-Airburst Smoke Grenade Packet", 0, /obj/item/storage/box/packet/airburst_smoke, VENDOR_ITEM_REGULAR),
+ list("M74 AGM-F Grenade Packet", 0, /obj/item/storage/box/packet/airburst_he, VENDOR_ITEM_REGULAR),
+ list("M74 AGM-F Grenade box", 0, /obj/item/storage/box/nade_box/airburst, VENDOR_ITEM_REGULAR),
+ list("M74 AGM-I Grenade Packet", 0, /obj/item/storage/box/packet/airburst_incen, VENDOR_ITEM_REGULAR),
+ list("M74 AGM-I Grenade Box", 0, /obj/item/storage/box/nade_box/airburstincen, VENDOR_ITEM_REGULAR),
+ list("M74 AGM-S Smoke Grenade Packet", 0, /obj/item/storage/box/packet/airburst_smoke, VENDOR_ITEM_REGULAR),
list("M74 AGM-S Star Shell Packet", 0, /obj/item/storage/box/packet/flare, VENDOR_ITEM_REGULAR),
list("M74 AGM-H Hornet Shell Packet", 0, /obj/item/storage/box/packet/hornet, VENDOR_ITEM_REGULAR),
list("G2 Electroshock grenade packet", 0, /obj/item/storage/box/packet/sebb, VENDOR_ITEM_REGULAR),
list("M20 mine box", 0, /obj/item/storage/box/explosive_mines, VENDOR_ITEM_REGULAR),
list("OTHER BOXES", -1, null, null),
+ list("Box of Combat Flashlights", 0, /obj/item/ammo_box/magazine/misc/flashlight/combat, VENDOR_ITEM_REGULAR),
list("Box of M94 Marking Flare Packs", 0, /obj/item/ammo_box/magazine/misc/flares, VENDOR_ITEM_REGULAR),
list("Box of M89 Signal Flare Packs", 0, /obj/item/ammo_box/magazine/misc/flares/signal, VENDOR_ITEM_REGULAR),
- list("Box of High-Capacity Power Cells", 0, /obj/item/ammo_box/magazine/misc/power_cell, VENDOR_ITEM_REGULAR)
+ list("Box of High-Capacity Power Cells", 0, /obj/item/ammo_box/magazine/misc/power_cell, VENDOR_ITEM_REGULAR),
+ list("Nailgun Magazine Box (7x45mm)", floor(scale * 2), /obj/item/ammo_box/magazine/nailgun, VENDOR_ITEM_REGULAR)
)
/obj/structure/machinery/cm_vending/sorted/cargo_guns/stock(obj/item/item_to_stock, mob/user)
@@ -204,6 +212,8 @@
/obj/structure/machinery/cm_vending/sorted/cargo_guns/cargo/blend
icon_state = "req_guns_wall"
+ vend_delay = 3
+ vend_sound = 'sound/machines/vending_drop.ogg'
tiles_with = list(
/obj/structure/window/framed/almayer,
/obj/structure/machinery/door/airlock,
@@ -234,6 +244,7 @@
list("Box Of Buckshot Shells", floor(scale * 56), /obj/item/ammo_magazine/shotgun/buckshot, VENDOR_ITEM_REGULAR),
list("Box Of Flechette Shells", floor(scale * 56), /obj/item/ammo_magazine/shotgun/flechette, VENDOR_ITEM_REGULAR),
list("Box Of Shotgun Slugs", floor(scale * 56), /obj/item/ammo_magazine/shotgun/slugs, VENDOR_ITEM_REGULAR),
+ list("Box Of Breaching Slugs", floor(scale * 4), /obj/item/ammo_magazine/shotgun/light/breaching, VENDOR_ITEM_REGULAR),
list("M4RA Magazine (10x24mm)", floor(scale * 60), /obj/item/ammo_magazine/rifle/m4ra, VENDOR_ITEM_REGULAR),
list("M41A MK2 Magazine (10x24mm)", floor(scale * 100), /obj/item/ammo_magazine/rifle, VENDOR_ITEM_REGULAR),
list("M39 HV Magazine (10x20mm)", floor(scale * 100), /obj/item/ammo_magazine/smg/m39, VENDOR_ITEM_REGULAR),
@@ -258,6 +269,7 @@
list("M44 Marksman Speed Loader (.44)", 6, /obj/item/ammo_magazine/revolver/marksman, VENDOR_ITEM_REGULAR),
list("M4A3 HP Magazine (9mm)", floor(scale * 2), /obj/item/ammo_magazine/pistol/hp, VENDOR_ITEM_REGULAR),
list("M41AE2 Holo Target Rounds (10x24mm)", floor(scale * 2), /obj/item/ammo_magazine/rifle/lmg/holo_target, VENDOR_ITEM_REGULAR),
+ list("Box Of .458 SOCOM Rounds (.458 SOCOM)", floor(scale * 4), /obj/item/ammo_magazine/lever_action/xm88, VENDOR_ITEM_REGULAR),
list("RESTRICTED FIREARM AMMUNITION", -1, null, null),
list("VP78 Magazine", 11, /obj/item/ammo_magazine/pistol/vp78, VENDOR_ITEM_REGULAR),
@@ -289,11 +301,12 @@
list("Shotgun Shell Box (Buckshot x 100)", 0, /obj/item/ammo_box/magazine/shotgun/buckshot, VENDOR_ITEM_REGULAR),
list("Shotgun Shell Box (Flechette x 100)", 0, /obj/item/ammo_box/magazine/shotgun/flechette, VENDOR_ITEM_REGULAR),
list("Shotgun Shell Box (Slugs x 100)", 0, /obj/item/ammo_box/magazine/shotgun, VENDOR_ITEM_REGULAR),
- list("Shotgun Shell Box (16g) (Breaching x 120)", 1, /obj/item/ammo_box/magazine/shotgun/light/breaching, VENDOR_ITEM_REGULAR),
+ list("Shotgun Shell Box (16g) (Breaching x 120)", 0, /obj/item/ammo_box/magazine/shotgun/light/breaching, VENDOR_ITEM_REGULAR),
list("Magazine Box (88 Mod 4 AP x 16)", 0, /obj/item/ammo_box/magazine/mod88, VENDOR_ITEM_REGULAR),
list("Magazine Box (SU-6 x 16)", 0, /obj/item/ammo_box/magazine/su6, VENDOR_ITEM_REGULAR),
list("Magazine Box (VP78 x 16)", 0, /obj/item/ammo_box/magazine/vp78, VENDOR_ITEM_REGULAR),
list("Magazine Box (XM51 x 8)", 0, /obj/item/ammo_box/magazine/xm51, VENDOR_ITEM_REGULAR),
+ list("Rounds Box (.458 SOCOM x 300)", 0, /obj/item/ammo_box/magazine/lever_action/xm88, VENDOR_ITEM_REGULAR),
list("Ammo Box (M2C x 8)", 0, /obj/item/ammo_box/magazine/m2c, VENDOR_ITEM_REGULAR),
list("Drum Box (M56B x 8)", 0, /obj/item/ammo_box/magazine/m56b, VENDOR_ITEM_REGULAR),
list("Drum Box (M56D x 8)", 0, /obj/item/ammo_box/magazine/m56d, VENDOR_ITEM_REGULAR),
@@ -337,11 +350,14 @@
return //We found our item, no reason to go on.
/obj/structure/machinery/cm_vending/sorted/cargo_ammo/cargo/blend
- icon_state = "req_ammo_wall"
- tiles_with = list(
- /obj/structure/window/framed/almayer,
- /obj/structure/machinery/door/airlock,
- /turf/closed/wall/almayer)
+ icon_state = "req_ammo_wall"
+ vend_delay = 3
+ vend_sound = 'sound/machines/vending_drop.ogg'
+ tiles_with = list(
+ /obj/structure/window/framed/almayer,
+ /obj/structure/machinery/door/airlock,
+ /turf/closed/wall/almayer,
+ )
//Special cargo-specific vendor with vending offsets
/obj/structure/machinery/cm_vending/sorted/cargo_ammo/cargo
@@ -408,6 +424,8 @@
/obj/structure/machinery/cm_vending/sorted/attachments/blend
icon_state = "req_attach_wall"
+ vend_delay = 3
+ vend_sound = 'sound/machines/vending_drop.ogg'
tiles_with = list(
/obj/structure/window/framed/almayer,
/obj/structure/machinery/door/airlock,
@@ -426,12 +444,24 @@
listed_products = list(
list("UNIFORM", -1, null, null),
- list("Lightweight IMP Backpack", 20, /obj/item/storage/backpack/marine, VENDOR_ITEM_REGULAR),
+ list("USCM Uniform", 20, /obj/item/clothing/under/marine, VENDOR_ITEM_REGULAR),
+ list("USCM Combat Technician Uniform", 5, /obj/item/clothing/under/marine/engineer, VENDOR_ITEM_REGULAR),
+ list("USCM Hospital Corpsman uniform", 5, /obj/item/clothing/under/marine/medic, VENDOR_ITEM_REGULAR),
+
+ list("BOOTS", -1, null, null),
list("Marine Combat Boots", 20, /obj/item/clothing/shoes/marine, VENDOR_ITEM_REGULAR),
- list("M276 Ammo Load Rig", 10, /obj/item/storage/belt/marine, VENDOR_ITEM_REGULAR),
- list("M276 Shotgun Shell Loading Rig", 10, /obj/item/storage/belt/shotgun, VENDOR_ITEM_REGULAR),
+ list("Marine Brown Combat Boots", 5, /obj/item/clothing/shoes/marine/brown, VENDOR_ITEM_REGULAR),
+ list("Marine Jungle Combat Boots", 5, /obj/item/clothing/shoes/marine/jungle, VENDOR_ITEM_REGULAR),
+
+ list("BACKPACKS", -1, null, null),
+ list("Lightweight IMP Backpack", 20, /obj/item/storage/backpack/marine, VENDOR_ITEM_REGULAR),
list("USCM Satchel", 20, /obj/item/storage/backpack/marine/satchel, VENDOR_ITEM_REGULAR),
- list("USCM Uniform", 20, /obj/item/clothing/under/marine, VENDOR_ITEM_REGULAR),
+ list("USCM Chestrig", 10, /obj/item/storage/backpack/marine/satchel/chestrig, VENDOR_ITEM_REGULAR),
+ list("USCM Technician Backpack", 10, /obj/item/storage/backpack/marine/tech, VENDOR_ITEM_REGULAR),
+ list("USCM Technician Chestrig", 10, /obj/item/storage/backpack/marine/satchel/tech, VENDOR_ITEM_REGULAR),
+ list("USCM Corpsman Backpack", 10, /obj/item/storage/backpack/marine/medic, VENDOR_ITEM_REGULAR),
+ list("USCM Corpsman Satchel", 10, /obj/item/storage/backpack/marine/satchel/medic, VENDOR_ITEM_REGULAR),
+
list("ARMOR", -1, null, null),
list("M10 Pattern Marine Helmet", 20, /obj/item/clothing/head/helmet/marine, VENDOR_ITEM_REGULAR),
@@ -448,6 +478,7 @@
list("GLOVES", -1, null, null),
list("Marine Combat Gloves", 40, /obj/item/clothing/gloves/marine, VENDOR_ITEM_REGULAR),
list("Marine Black Combat Gloves", 40, /obj/item/clothing/gloves/marine/black, VENDOR_ITEM_REGULAR),
+ list("Marine Brown Combat Gloves", 20, /obj/item/clothing/gloves/marine/brown, VENDOR_ITEM_REGULAR),
list("RADIO", -1, null, null),
list("Alpha Squad Radio Encryption Key", 5, /obj/item/device/encryptionkey/alpha, VENDOR_ITEM_REGULAR),
diff --git a/code/game/machinery/vending/vendor_types/squad_prep/squad_engineer.dm b/code/game/machinery/vending/vendor_types/squad_prep/squad_engineer.dm
index 9c19a5b172c6..8d5e7b83590f 100644
--- a/code/game/machinery/vending/vendor_types/squad_prep/squad_engineer.dm
+++ b/code/game/machinery/vending/vendor_types/squad_prep/squad_engineer.dm
@@ -27,13 +27,13 @@ GLOBAL_LIST_INIT(cm_vending_gear_engi, list(
list("EXPLOSIVES", 0, null, null, null),
list("M40 HEDP High Explosive Packet (x3 grenades)", 18, /obj/item/storage/box/packet/high_explosive, null, VENDOR_ITEM_REGULAR),
list("M40 HIDP Incendiary Packet (x3 grenades)", 18, /obj/item/storage/box/packet/incendiary, null, VENDOR_ITEM_REGULAR),
- list("M40 HPDP White Phosphorus Packet (x3 grenades)", 18, /obj/item/storage/box/packet/phosphorus, null, VENDOR_ITEM_REGULAR),
+ list("M40 WPDP White Phosphorus Packet (x3 grenades)", 18, /obj/item/storage/box/packet/phosphorus, null, VENDOR_ITEM_REGULAR),
list("M40 HSDP Smoke Packet (x3 grenades)", 9, /obj/item/storage/box/packet/smoke, null, VENDOR_ITEM_REGULAR),
list("M74 AGM-Frag Airburst Packet (x3 airburst grenades)", 18, /obj/item/storage/box/packet/airburst_he, null, VENDOR_ITEM_REGULAR),
list("M74 AGM-Incendiary Airburst Packet (x3 airburst grenades)", 18, /obj/item/storage/box/packet/airburst_incen, null, VENDOR_ITEM_REGULAR),
list("M74 AGM-Smoke Airburst Packet (x3 airburst grenades)", 10, /obj/item/storage/box/packet/airburst_smoke, null, VENDOR_ITEM_REGULAR),
list("M74 AGM-Hornet Airburst Packet (x3 airburst grenades", 20, /obj/item/storage/box/packet/hornet, null, VENDOR_ITEM_REGULAR),
- list("M20 Mine Box (x4 mines)", 18, /obj/item/storage/box/explosive_mines, null, VENDOR_ITEM_REGULAR),
+ list("M20 Mine Box (x5 mines)", 18, /obj/item/storage/box/explosive_mines, null, VENDOR_ITEM_REGULAR),
list("M40 MFHS Metal Foam Grenade", 5, /obj/item/explosive/grenade/metal_foam, null, VENDOR_ITEM_REGULAR),
list("G2 Electroshock Grenade Packet (x3 grenades)", 16, /obj/item/storage/box/packet/sebb, null, VENDOR_ITEM_REGULAR),
@@ -132,12 +132,13 @@ GLOBAL_LIST_INIT(cm_vending_clothing_engi, list(
list("M276 Ammo Load Rig", 0, /obj/item/storage/belt/marine, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
list("M276 General Pistol Holster Rig", 0, /obj/item/storage/belt/gun/m4a3, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
list("M276 M39 Holster Rig", 0, /obj/item/storage/belt/gun/m39, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
- list("M276 M44 Holster Rig", 0, /obj/item/storage/belt/gun/m44, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
+ list("M276 General Revolver Holster Rig", 0, /obj/item/storage/belt/gun/m44, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
list("M276 M82F Holster Rig", 0, /obj/item/storage/belt/gun/flaregun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
list("M276 Shotgun Shell Loading Rig", 0, /obj/item/storage/belt/shotgun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
list("M276 Mortar Operator Belt", 0, /obj/item/storage/belt/gun/mortarbelt, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
list("M276 Toolbelt Rig (Full)", 0, /obj/item/storage/belt/utility/full, MARINE_CAN_BUY_BELT, VENDOR_ITEM_MANDATORY),
list("M276 M40 Grenade Rig", 0, /obj/item/storage/belt/grenade, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
+ list("M277 Pattern Construction Rig", 0, /obj/item/storage/belt/utility/construction, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED),
list("POUCHES (CHOOSE 2)", 0, null, null, null),
list("Construction Pouch", 0, /obj/item/storage/pouch/construction, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
@@ -153,6 +154,8 @@ GLOBAL_LIST_INIT(cm_vending_clothing_engi, list(
list("Medium General Pouch", 0, /obj/item/storage/pouch/general/medium, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
list("Pistol Pouch", 0, /obj/item/storage/pouch/pistol, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
list("Tools Pouch (Full)", 0, /obj/item/storage/pouch/tools/full, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Engineer kit Pouch", 0, /obj/item/storage/pouch/engikit, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+
list("ACCESSORIES (CHOOSE 1)", 0, null, null, null),
list("Black Webbing Vest", 0, /obj/item/clothing/accessory/storage/black_vest, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR),
@@ -160,6 +163,7 @@ GLOBAL_LIST_INIT(cm_vending_clothing_engi, list(
list("Shoulder Holster", 0, /obj/item/clothing/accessory/storage/holster, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR),
list("Webbing", 0, /obj/item/clothing/accessory/storage/webbing, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR),
list("Drop Pouch", 0, /obj/item/clothing/accessory/storage/droppouch, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR),
+ list("Small Tool Webbing (Full)", 0, /obj/item/clothing/accessory/storage/tool_webbing/small/equipped, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR),
list("MASK (CHOOSE 1)", 0, null, null, null),
list("Gas Mask", 0, /obj/item/clothing/mask/gas, MARINE_CAN_BUY_MASK, VENDOR_ITEM_REGULAR),
@@ -211,4 +215,5 @@ GLOBAL_LIST_INIT(cm_vending_clothing_engi, list(
/obj/item/cell/high,
/obj/item/tool/shovel/etool/folded,
/obj/item/device/lightreplacer,
+ /obj/item/weapon/gun/smg/nailgun/compact/tactical,
)
diff --git a/code/game/machinery/vending/vendor_types/squad_prep/squad_leader.dm b/code/game/machinery/vending/vendor_types/squad_prep/squad_leader.dm
index 7f8d70db4328..8cb71a57872f 100644
--- a/code/game/machinery/vending/vendor_types/squad_prep/squad_leader.dm
+++ b/code/game/machinery/vending/vendor_types/squad_prep/squad_leader.dm
@@ -53,13 +53,13 @@ GLOBAL_LIST_INIT(cm_vending_gear_leader, list(
list("EXPLOSIVES", 0, null, null, null),
list("M40 HEDP High Explosive Packet (x3 grenades)", 18, /obj/item/storage/box/packet/high_explosive, null, VENDOR_ITEM_REGULAR),
list("M40 HIDP Incendiary Packet (x3 grenades)", 18, /obj/item/storage/box/packet/incendiary, null, VENDOR_ITEM_REGULAR),
- list("M40 HPDP White Phosphorus Packet (x3 grenades)", 18, /obj/item/storage/box/packet/phosphorus, null, VENDOR_ITEM_REGULAR),
+ list("M40 WPDP White Phosphorus Packet (x3 grenades)", 18, /obj/item/storage/box/packet/phosphorus, null, VENDOR_ITEM_REGULAR),
list("M40 HSDP Smoke Packet (x3 grenades)", 9, /obj/item/storage/box/packet/smoke, null, VENDOR_ITEM_REGULAR),
list("M74 AGM-Frag Airburst Packet (x3 airburst grenades)", 20, /obj/item/storage/box/packet/airburst_he, null, VENDOR_ITEM_REGULAR),
list("M74 AGM-Incendiary Airburst Packet (x3 airburst grenades)", 20, /obj/item/storage/box/packet/airburst_incen, null, VENDOR_ITEM_REGULAR),
list("M74 AGM-Smoke Airburst Packet (x3 airburst grenades)", 10, /obj/item/storage/box/packet/airburst_smoke, null, VENDOR_ITEM_REGULAR),
list("M74 AGM-Hornet Airburst Packet (x3 airburst grenades", 20, /obj/item/storage/box/packet/hornet, null, VENDOR_ITEM_REGULAR),
- list("M20 Mine Box (x4 mines)", 20, /obj/item/storage/box/explosive_mines, null, VENDOR_ITEM_REGULAR),
+ list("M20 Mine Box (x5 mines)", 20, /obj/item/storage/box/explosive_mines, null, VENDOR_ITEM_REGULAR),
list("M40 MFHS Metal Foam Grenade", 5, /obj/item/explosive/grenade/metal_foam, null, VENDOR_ITEM_REGULAR),
list("G2 Electroshock Grenade Packet (x3 grenades)", 16, /obj/item/storage/box/packet/sebb, null, VENDOR_ITEM_REGULAR),
@@ -144,7 +144,7 @@ GLOBAL_LIST_INIT(cm_vending_clothing_leader, list(
list("M276 Lifesaver Bag", 0, /obj/item/storage/belt/medical/lifesaver, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
list("M276 Medical Storage Rig", 0, /obj/item/storage/belt/medical, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
list("M276 M39 Holster Rig", 0, /obj/item/storage/belt/gun/m39, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
- list("M276 M44 Holster Rig", 0, /obj/item/storage/belt/gun/m44, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
+ list("M276 General Revolver Holster Rig", 0, /obj/item/storage/belt/gun/m44, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
list("M276 M82F Holster Rig", 0, /obj/item/storage/belt/gun/flaregun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
list("M276 Shotgun Shell Loading Rig", 0, /obj/item/storage/belt/shotgun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
list("M276 Toolbelt Rig (Full)", 0, /obj/item/storage/belt/utility/full, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
diff --git a/code/game/machinery/vending/vendor_types/squad_prep/squad_medic.dm b/code/game/machinery/vending/vendor_types/squad_prep/squad_medic.dm
index e9d69ad396de..9952c7f00b8f 100644
--- a/code/game/machinery/vending/vendor_types/squad_prep/squad_medic.dm
+++ b/code/game/machinery/vending/vendor_types/squad_prep/squad_medic.dm
@@ -50,13 +50,13 @@ GLOBAL_LIST_INIT(cm_vending_gear_medic, list(
list("EXPLOSIVES", 0, null, null, null),
list("M40 HEDP High Explosive Packet (x3 grenades)", 18, /obj/item/storage/box/packet/high_explosive, null, VENDOR_ITEM_REGULAR),
list("M40 HIDP Incendiary Packet (x3 grenades)", 18, /obj/item/storage/box/packet/incendiary, null, VENDOR_ITEM_REGULAR),
- list("M40 HPDP White Phosphorus Packet (x3 grenades)", 18, /obj/item/storage/box/packet/phosphorus, null, VENDOR_ITEM_REGULAR),
+ list("M40 WPDP White Phosphorus Packet (x3 grenades)", 18, /obj/item/storage/box/packet/phosphorus, null, VENDOR_ITEM_REGULAR),
list("M40 HSDP Smoke Packet (x3 grenades)", 9, /obj/item/storage/box/packet/smoke, null, VENDOR_ITEM_REGULAR),
list("M74 AGM-Frag Airburst Packet (x3 airburst grenades)", 20, /obj/item/storage/box/packet/airburst_he, null, VENDOR_ITEM_REGULAR),
list("M74 AGM-Incendiary Airburst Packet (x3 airburst grenades)", 20, /obj/item/storage/box/packet/airburst_incen, null, VENDOR_ITEM_REGULAR),
list("M74 AGM-Smoke Airburst Packet (x3 airburst grenades)", 10, /obj/item/storage/box/packet/airburst_smoke, null, VENDOR_ITEM_REGULAR),
list("M74 AGM-Hornet Airburst Packet (x3 airburst grenades", 20, /obj/item/storage/box/packet/hornet, null, VENDOR_ITEM_REGULAR),
- list("M20 Mine Box (x4 mines)", 20, /obj/item/storage/box/explosive_mines, null, VENDOR_ITEM_REGULAR),
+ list("M20 Mine Box (x5 mines)", 20, /obj/item/storage/box/explosive_mines, null, VENDOR_ITEM_REGULAR),
list("G2 Electroshock Grenade Packet (x3 grenades)", 16, /obj/item/storage/box/packet/sebb, null, VENDOR_ITEM_REGULAR),
list("PRIMARY AMMUNITION", 0, null, null, null),
@@ -152,7 +152,7 @@ GLOBAL_LIST_INIT(cm_vending_clothing_medic, list(
list("M276 Lifesaver Bag (Full)", 0, /obj/item/storage/belt/medical/lifesaver/full, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED),
list("M276 Medical Storage Rig (Full)", 0, /obj/item/storage/belt/medical/full, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED),
list("M276 M39 Holster Rig", 0, /obj/item/storage/belt/gun/m39, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
- list("M276 M44 Holster Rig", 0, /obj/item/storage/belt/gun/m44, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
+ list("M276 General Revolver Holster Rig", 0, /obj/item/storage/belt/gun/m44, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
list("M276 M82F Holster Rig", 0, /obj/item/storage/belt/gun/flaregun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
list("M276 Shotgun Shell Loading Rig", 0, /obj/item/storage/belt/shotgun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
list("M276 M40 Grenade Rig", 0, /obj/item/storage/belt/grenade, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
@@ -173,7 +173,8 @@ GLOBAL_LIST_INIT(cm_vending_clothing_medic, list(
list("Medical Kit Pouch", 0, /obj/item/storage/pouch/medkit, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
list("Pressurized Reagent Canister Pouch (Bicaridine)", 0, /obj/item/storage/pouch/pressurized_reagent_canister/bicaridine, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
list("Pressurized Reagent Canister Pouch (Kelotane)", 0, /obj/item/storage/pouch/pressurized_reagent_canister/kelotane, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
- list("Pressurized Reagent Canister Pouch (Revival Mix)", 0, /obj/item/storage/pouch/pressurized_reagent_canister/revival, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
+ list("Pressurized Reagent Canister Pouch (Revival Mix - Tricordrazine)", 0, /obj/item/storage/pouch/pressurized_reagent_canister/revival_tricord, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
+ list("Pressurized Reagent Canister Pouch (Revival Mix - Peridaxon)", 0, /obj/item/storage/pouch/pressurized_reagent_canister/revival_peri, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
list("Pressurized Reagent Canister Pouch (Tricordrazine)", 0, /obj/item/storage/pouch/pressurized_reagent_canister/tricordrazine, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
list("Pressurized Reagent Canister Pouch (EMPTY)", 0, /obj/item/storage/pouch/pressurized_reagent_canister, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
@@ -237,4 +238,6 @@ GLOBAL_LIST_INIT(cm_vending_clothing_medic, list(
/obj/item/storage/surgical_case/regular,
/obj/item/reagent_container/blood/OMinus,
/obj/item/reagent_container/blood/OMinus,
+ /obj/item/device/flashlight/pen,
+ /obj/item/clothing/accessory/stethoscope,
)
diff --git a/code/game/machinery/vending/vendor_types/squad_prep/squad_prep.dm b/code/game/machinery/vending/vendor_types/squad_prep/squad_prep.dm
index 35b059ac9611..ff43ca68657d 100644
--- a/code/game/machinery/vending/vendor_types/squad_prep/squad_prep.dm
+++ b/code/game/machinery/vending/vendor_types/squad_prep/squad_prep.dm
@@ -148,7 +148,7 @@
list("M276 Pattern General Pistol Holster Rig", floor(scale * 15), /obj/item/storage/belt/gun/m4a3, VENDOR_ITEM_REGULAR),
list("M276 Pattern M39 Holster Rig", floor(scale * 15), /obj/item/storage/large_holster/m39, VENDOR_ITEM_REGULAR),
list("M276 Pattern M39 Holster Rig And Pouch", floor(scale * 10), /obj/item/storage/belt/gun/m39, VENDOR_ITEM_REGULAR),
- list("M276 Pattern M44 Holster Rig", floor(scale * 15), /obj/item/storage/belt/gun/m44, VENDOR_ITEM_REGULAR),
+ list("M276 Pattern General Revolver Holster Rig", floor(scale * 15), /obj/item/storage/belt/gun/m44, VENDOR_ITEM_REGULAR),
list("M276 Pattern M82F Holster Rig", floor(scale * 5), /obj/item/storage/belt/gun/flaregun, VENDOR_ITEM_REGULAR),
list("M276 Knife Rig (Full)", floor(scale * 15), /obj/item/storage/belt/knifepouch, VENDOR_ITEM_REGULAR),
list("M276 G8-A General Utility Pouch", floor(scale * 15), /obj/item/storage/backpack/general_belt, VENDOR_ITEM_REGULAR),
@@ -339,7 +339,8 @@
list("Binoculars", floor(scale * 1), /obj/item/device/binoculars, VENDOR_ITEM_REGULAR),
list("MB-6 Folding Barricades (x3)", floor(scale * 2), /obj/item/stack/folding_barricade/three, VENDOR_ITEM_REGULAR),
list("Spare PDT/L Battle Buddy Kit", floor(scale * 3), /obj/item/storage/box/pdt_kit, VENDOR_ITEM_REGULAR),
- list("W-Y brand rechargeable mini-battery", floor(scale * 2.5), /obj/item/cell/crap, VENDOR_ITEM_REGULAR)
+ list("W-Y brand rechargeable mini-battery", floor(scale * 2.5), /obj/item/cell/crap, VENDOR_ITEM_REGULAR),
+ list("Nailgun Magazine (7x45mm)", floor(scale * 4), /obj/item/ammo_magazine/smg/nailgun, VENDOR_ITEM_REGULAR)
)
//--------------SQUAD ATTACHMENTS VENDOR--------------
diff --git a/code/game/machinery/vending/vendor_types/squad_prep/squad_rifleman.dm b/code/game/machinery/vending/vendor_types/squad_prep/squad_rifleman.dm
index 65066731070d..f210aed9518a 100644
--- a/code/game/machinery/vending/vendor_types/squad_prep/squad_rifleman.dm
+++ b/code/game/machinery/vending/vendor_types/squad_prep/squad_rifleman.dm
@@ -21,7 +21,7 @@ GLOBAL_LIST_INIT(cm_vending_clothing_marine, list(
list("M276 General Pistol Holster Rig", 0, /obj/item/storage/belt/gun/m4a3, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
list("M276 Knife Rig (Full)", 0, /obj/item/storage/belt/knifepouch, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
list("M276 M39 Holster Rig", 0, /obj/item/storage/belt/gun/m39, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
- list("M276 M44 Holster Rig", 0, /obj/item/storage/belt/gun/m44, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
+ list("M276 General Revolver Holster Rig", 0, /obj/item/storage/belt/gun/m44, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
list("M276 M82F Holster Rig", 0, /obj/item/storage/belt/gun/flaregun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
list("M276 Shotgun Shell Loading Rig", 0, /obj/item/storage/belt/shotgun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
list("M276 G8-A General Utility Pouch", 0, /obj/item/storage/backpack/general_belt, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
@@ -59,13 +59,13 @@ GLOBAL_LIST_INIT(cm_vending_clothing_marine, list(
list("EXPLOSIVES", 0, null, null, null),
list("M40 HEDP High Explosive Packet (x3 grenades)", 20, /obj/item/storage/box/packet/high_explosive, null, VENDOR_ITEM_REGULAR),
list("M40 HIDP Incendiary Packet (x3 grenades)", 20, /obj/item/storage/box/packet/incendiary, null, VENDOR_ITEM_REGULAR),
- list("M40 HPDP White Phosphorus Packet (x3 grenades)", 20, /obj/item/storage/box/packet/phosphorus, null, VENDOR_ITEM_REGULAR),
+ list("M40 WPDP White Phosphorus Packet (x3 grenades)", 20, /obj/item/storage/box/packet/phosphorus, null, VENDOR_ITEM_REGULAR),
list("M40 HSDP Smoke Packet (x3 grenades)", 10, /obj/item/storage/box/packet/smoke, null, VENDOR_ITEM_REGULAR),
list("M74 AGM-Frag Airburst Packet (x3 airburst grenades)", 15, /obj/item/storage/box/packet/airburst_he, null, VENDOR_ITEM_REGULAR),
list("M74 AGM-Incendiary Airburst Packet (x3 airburst grenades)", 15, /obj/item/storage/box/packet/airburst_incen, null, VENDOR_ITEM_REGULAR),
list("M74 AGM-Smoke Airburst Packet (x3 airburst grenades)", 10, /obj/item/storage/box/packet/airburst_smoke, null, VENDOR_ITEM_REGULAR),
list("M74 AGM-Hornet Airburst Packet (x3 airburst grenades", 15, /obj/item/storage/box/packet/hornet, null, VENDOR_ITEM_REGULAR),
- list("M20 Mine Box (x4 mines)", 20, /obj/item/storage/box/explosive_mines, null, VENDOR_ITEM_REGULAR),
+ list("M20 Mine Box (x5 mines)", 20, /obj/item/storage/box/explosive_mines, null, VENDOR_ITEM_REGULAR),
list("PRIMARY AMMUNITION", 0, null, null, null),
list("M4RA AP Magazine (10x24mm)", 10, /obj/item/ammo_magazine/rifle/m4ra/ap, null, VENDOR_ITEM_REGULAR),
diff --git a/code/game/machinery/vending/vendor_types/squad_prep/squad_smartgunner.dm b/code/game/machinery/vending/vendor_types/squad_prep/squad_smartgunner.dm
index 60afed8b984d..4507dceae07c 100644
--- a/code/game/machinery/vending/vendor_types/squad_prep/squad_smartgunner.dm
+++ b/code/game/machinery/vending/vendor_types/squad_prep/squad_smartgunner.dm
@@ -12,13 +12,13 @@ GLOBAL_LIST_INIT(cm_vending_gear_smartgun, list(
list("EXPLOSIVES", 0, null, null, null),
list("M40 HEDP High Explosive Packet (x3 grenades)", 30, /obj/item/storage/box/packet/high_explosive, null, VENDOR_ITEM_REGULAR),
list("M40 HIDP Incendiary Packet (x3 grenades)", 30, /obj/item/storage/box/packet/incendiary, null, VENDOR_ITEM_REGULAR),
- list("M40 HPDP White Phosphorus Packet (x3 grenades)", 30, /obj/item/storage/box/packet/phosphorus, null, VENDOR_ITEM_REGULAR),
+ list("M40 WPDP White Phosphorus Packet (x3 grenades)", 30, /obj/item/storage/box/packet/phosphorus, null, VENDOR_ITEM_REGULAR),
list("M40 HSDP Smoke Packet (x3 grenades)", 15, /obj/item/storage/box/packet/smoke, null, VENDOR_ITEM_REGULAR),
list("M74 AGM-Frag Airburst Packet (x3 airburst grenades)", 20, /obj/item/storage/box/packet/airburst_he, null, VENDOR_ITEM_REGULAR),
list("M74 AGM-Incendiary Airburst Packet (x3 airburst grenades)", 20, /obj/item/storage/box/packet/airburst_incen, null, VENDOR_ITEM_REGULAR),
list("M74 AGM-Smoke Airburst Packet (x3 airburst grenades)", 10, /obj/item/storage/box/packet/airburst_smoke, null, VENDOR_ITEM_REGULAR),
list("M74 AGM-Hornet Airburst Packet (x3 airburst grenades", 20, /obj/item/storage/box/packet/hornet, null, VENDOR_ITEM_REGULAR),
- list("M20 Mine Box (x4 mines)", 20, /obj/item/storage/box/explosive_mines, null, VENDOR_ITEM_REGULAR),
+ list("M20 Mine Box (x5 mines)", 20, /obj/item/storage/box/explosive_mines, null, VENDOR_ITEM_REGULAR),
list("SIDEARM AMMUNITION", 0, null, null, null),
list("M44 Heavy Speed Loader (.44)", 10, /obj/item/ammo_magazine/revolver/heavy, null, VENDOR_ITEM_REGULAR),
@@ -33,7 +33,7 @@ GLOBAL_LIST_INIT(cm_vending_gear_smartgun, list(
list("SU-6 Smart Pistol", 15, /obj/item/storage/box/guncase/smartpistol, null, VENDOR_ITEM_REGULAR),
list("CLOTHING ITEMS", 0, null, null, null),
- list("Machete Scabbard (Full)", 6, /obj/item/storage/large_holster/machete/full, null, VENDOR_ITEM_REGULAR),
+ list("Smartgunner Machete Scabbard", 15, /obj/item/storage/large_holster/machete/smartgunner/full, null, VENDOR_ITEM_REGULAR),
list("Fuel Tank Strap Pouch", 5, /obj/item/storage/pouch/flamertank, null, VENDOR_ITEM_REGULAR),
list("Large General Pouch", 6, /obj/item/storage/pouch/general/large, null, VENDOR_ITEM_REGULAR),
@@ -42,7 +42,7 @@ GLOBAL_LIST_INIT(cm_vending_gear_smartgun, list(
list("Whistle", 5, /obj/item/device/whistle, null, VENDOR_ITEM_REGULAR),
list("Roller Bed", 5, /obj/item/roller, null, VENDOR_ITEM_REGULAR),
list("Fulton Device Stack", 5, /obj/item/stack/fulton, null, VENDOR_ITEM_REGULAR),
- list("Smartgun DV9 Battery", 15, /obj/item/smartgun_battery, null, VENDOR_ITEM_REGULAR),
+ list("DV9 Smartgun Battery", 15, /obj/item/smartgun_battery, null, VENDOR_ITEM_REGULAR),
list("BINOCULARS", 0, null, null, null),
list("Binoculars", 5, /obj/item/device/binoculars, null, VENDOR_ITEM_REGULAR),
diff --git a/code/game/machinery/vending/vendor_types/squad_prep/squad_specialist.dm b/code/game/machinery/vending/vendor_types/squad_prep/squad_specialist.dm
index 8fbf574d36d7..8e84f7556b50 100644
--- a/code/game/machinery/vending/vendor_types/squad_prep/squad_specialist.dm
+++ b/code/game/machinery/vending/vendor_types/squad_prep/squad_specialist.dm
@@ -7,7 +7,7 @@ GLOBAL_LIST_INIT(cm_vending_gear_spec, list(
list("Pyro Set", 0, /obj/item/storage/box/spec/pyro, MARINE_CAN_BUY_ESSENTIALS, VENDOR_ITEM_REGULAR),
list("Scout Set", 0, /obj/item/storage/box/spec/scout, MARINE_CAN_BUY_ESSENTIALS, VENDOR_ITEM_REGULAR),
list("Sniper Set", 0, /obj/item/storage/box/spec/sniper, MARINE_CAN_BUY_ESSENTIALS, VENDOR_ITEM_RECOMMENDED),
- list("Anti-materiel Sniper Set", 0, /obj/item/storage/box/spec/sniper/anti_materiel, MARINE_CAN_BUY_ESSENTIALS, VENDOR_ITEM_RECOMMENDED),
+ list("Anti-Materiel Sniper Set", 0, /obj/item/storage/box/spec/sniper/anti_materiel, MARINE_CAN_BUY_ESSENTIALS, VENDOR_ITEM_RECOMMENDED),
list("EXTRA SCOUT AMMUNITION", 0, null, null, null),
list("A19 High Velocity Impact Magazine (10x24mm)", 40, /obj/item/ammo_magazine/rifle/m4ra/custom/impact, null, VENDOR_ITEM_REGULAR),
@@ -28,7 +28,7 @@ GLOBAL_LIST_INIT(cm_vending_gear_spec, list(
list("EXTRA GRENADES", 0, null, null, null),
list("M40 HEDP Grenades x6", 40, /obj/effect/essentials_set/hedp_6_pack, null, VENDOR_ITEM_REGULAR),
list("M40 HIDP Incendiary Grenades x6", 40, /obj/effect/essentials_set/hidp_6_pack, null, VENDOR_ITEM_REGULAR),
- list("M40 HPDP White Phosphorus Grenades x6", 40, /obj/effect/essentials_set/hpdp_6_pack, null, VENDOR_ITEM_REGULAR),
+ list("M40 CCDP Chemical Compound Grenades x6", 40, /obj/effect/essentials_set/ccdp_6_pack, null, VENDOR_ITEM_REGULAR),
list("M74 AGM-F Fragmentation Grenades x6", 40, /obj/effect/essentials_set/agmf_6_pack, null, VENDOR_ITEM_REGULAR),
list("M74 AGM-I Incendiary Grenades x6", 40, /obj/effect/essentials_set/agmi_6_pack, null, VENDOR_ITEM_REGULAR),
list("M74 AGM-S Smoke Grenades x6", 20, /obj/effect/essentials_set/agms_6_pack, null, VENDOR_ITEM_REGULAR),
@@ -72,7 +72,7 @@ GLOBAL_LIST_INIT(cm_vending_clothing_specialist, list(
list("M276 Ammo Load Rig", 0, /obj/item/storage/belt/marine, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
list("M276 General Pistol Holster Rig", 0, /obj/item/storage/belt/gun/m4a3, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED),
list("M276 M39 Holster Rig", 0, /obj/item/storage/belt/gun/m39, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
- list("M276 M44 Holster Rig", 0, /obj/item/storage/belt/gun/m44, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
+ list("M276 General Revolver Holster Rig", 0, /obj/item/storage/belt/gun/m44, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
list("M276 M82F Holster Rig", 0, /obj/item/storage/belt/gun/flaregun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
list("M276 Shotgun Shell Loading Rig", 0, /obj/item/storage/belt/shotgun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
@@ -211,7 +211,7 @@ GLOBAL_LIST_INIT(cm_vending_clothing_specialist, list(
/obj/item/explosive/grenade/incendiary,
)
-/obj/effect/essentials_set/hpdp_6_pack
+/obj/effect/essentials_set/ccdp_6_pack
spawned_gear_list = list(
/obj/item/explosive/grenade/phosphorus,
/obj/item/explosive/grenade/phosphorus,
diff --git a/code/game/machinery/vending/vendor_types/squad_prep/squad_tl.dm b/code/game/machinery/vending/vendor_types/squad_prep/squad_tl.dm
index 73efbe1148e5..0d338502972d 100644
--- a/code/game/machinery/vending/vendor_types/squad_prep/squad_tl.dm
+++ b/code/game/machinery/vending/vendor_types/squad_prep/squad_tl.dm
@@ -4,13 +4,13 @@ GLOBAL_LIST_INIT(cm_vending_gear_tl, list(
list("EXPLOSIVES", 0, null, null, null),
list("M40 HEDP High Explosive Packet (x3 grenades)", 18, /obj/item/storage/box/packet/high_explosive, null, VENDOR_ITEM_REGULAR),
list("M40 HIDP Incendiary Packet (x3 grenades)", 18, /obj/item/storage/box/packet/incendiary, null, VENDOR_ITEM_REGULAR),
- list("M40 HPDP White Phosphorus Packet (x3 grenades)", 18, /obj/item/storage/box/packet/phosphorus, null, VENDOR_ITEM_REGULAR),
+ list("M40 WPDP White Phosphorus Packet (x3 grenades)", 18, /obj/item/storage/box/packet/phosphorus, null, VENDOR_ITEM_REGULAR),
list("M40 HSDP Smoke Packet (x3 grenades)", 9, /obj/item/storage/box/packet/smoke, null, VENDOR_ITEM_REGULAR),
list("M74 AGM-Frag Airburst Packet (x3 airburst grenades)", 20, /obj/item/storage/box/packet/airburst_he, null, VENDOR_ITEM_REGULAR),
list("M74 AGM-Incendiary Airburst Packet (x3 airburst grenades)", 20, /obj/item/storage/box/packet/airburst_incen, null, VENDOR_ITEM_REGULAR),
list("M74 AGM-Smoke Airburst Packet (x3 airburst grenades)", 10, /obj/item/storage/box/packet/airburst_smoke, null, VENDOR_ITEM_REGULAR),
list("M74 AGM-Hornet Airburst Packet (x3 airburst grenades", 20, /obj/item/storage/box/packet/hornet, null, VENDOR_ITEM_REGULAR),
- list("M20 Mine Box (x4 mines)", 20, /obj/item/storage/box/explosive_mines, null, VENDOR_ITEM_REGULAR),
+ list("M20 Mine Box (x5 mines)", 20, /obj/item/storage/box/explosive_mines, null, VENDOR_ITEM_REGULAR),
list("M40 MFHS Metal Foam Grenade", 5, /obj/item/explosive/grenade/metal_foam, null, VENDOR_ITEM_REGULAR),
list("G2 Electroshock Grenade Packet (x3 grenades)", 16, /obj/item/storage/box/packet/sebb, null, VENDOR_ITEM_REGULAR),
@@ -102,7 +102,7 @@ GLOBAL_LIST_INIT(cm_vending_clothing_tl, list(
list("M276 Ammo Load Rig", 0, /obj/item/storage/belt/marine, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED),
list("M276 General Pistol Holster Rig", 0, /obj/item/storage/belt/gun/m4a3, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
list("M276 M39 Holster Rig", 0, /obj/item/storage/belt/gun/m39, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
- list("M276 M44 Holster Rig", 0, /obj/item/storage/belt/gun/m44, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
+ list("M276 General Revolver Holster Rig", 0, /obj/item/storage/belt/gun/m44, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
list("M276 M82F Holster Rig", 0, /obj/item/storage/belt/gun/flaregun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
list("M276 Shotgun Shell Loading Rig", 0, /obj/item/storage/belt/shotgun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
list("M276 Toolbelt Rig (Full)", 0, /obj/item/storage/belt/utility/full, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED),
diff --git a/code/game/machinery/vending/vendor_types/wo_vendors.dm b/code/game/machinery/vending/vendor_types/wo_vendors.dm
index 1d6ad60bb357..ce0b098ed9e5 100644
--- a/code/game/machinery/vending/vendor_types/wo_vendors.dm
+++ b/code/game/machinery/vending/vendor_types/wo_vendors.dm
@@ -63,7 +63,7 @@
list("M276 Pattern General Pistol Holster Rig", floor(scale * 10), /obj/item/storage/belt/gun/m4a3, VENDOR_ITEM_REGULAR),
list("M276 Pattern M39 Holster Rig", floor(scale * 10), /obj/item/storage/large_holster/m39, VENDOR_ITEM_REGULAR),
list("M276 Pattern M39 Holster Rig And Pouch", floor(scale * 5), /obj/item/storage/belt/gun/m39, VENDOR_ITEM_REGULAR),
- list("M276 Pattern M44 Holster Rig", floor(scale * 10), /obj/item/storage/belt/gun/m44, VENDOR_ITEM_REGULAR),
+ list("M276 Pattern General Revolver Holster Rig", floor(scale * 10), /obj/item/storage/belt/gun/m44, VENDOR_ITEM_REGULAR),
list("M276 Pattern M82F Holster Rig", floor(scale * 2), /obj/item/storage/belt/gun/flaregun, VENDOR_ITEM_REGULAR),
list("M276 Knife Rig (Full)", floor(scale * 10), /obj/item/storage/belt/knifepouch, VENDOR_ITEM_REGULAR),
list("M276 G8-A General Utility Pouch", floor(scale * 10), /obj/item/storage/backpack/general_belt, VENDOR_ITEM_REGULAR),
@@ -178,6 +178,7 @@
list("M42A Flak Magazine (10x28mm)", floor(scale * 1), /obj/item/ammo_magazine/sniper/flak, VENDOR_ITEM_REGULAR),
list("M42A Incendiary Magazine (10x28mm)", floor(scale * 1), /obj/item/ammo_magazine/sniper/incendiary, VENDOR_ITEM_REGULAR),
list("M42A Marksman Magazine (10x28mm Caseless)", floor(scale * 1.5), /obj/item/ammo_magazine/sniper, VENDOR_ITEM_REGULAR),
+ list("XM43E1 Marksman Magazine (10x99mm Caseless)", floor(scale * 3), /obj/item/ammo_magazine/sniper/anti_materiel, VENDOR_ITEM_REGULAR),
list("EXTRA DEMOLITIONIST AMMUNITION", -1, null, null, null),
list("84mm Anti-Armor Rocket", floor(scale * 1), /obj/item/ammo_magazine/rocket/ap, VENDOR_ITEM_REGULAR),
diff --git a/code/game/objects/effects/aliens.dm b/code/game/objects/effects/aliens.dm
index 34da5e3d2623..45fbd5d4ba2b 100644
--- a/code/game/objects/effects/aliens.dm
+++ b/code/game/objects/effects/aliens.dm
@@ -125,6 +125,10 @@
var/obj/vehicle/multitile/V = atm
V.handle_acidic_environment(src)
continue
+ if (istype(loc, /turf/open))
+ var/turf/open/scorch_turf_target = loc
+ if(scorch_turf_target.scorchable)
+ scorch_turf_target.scorch(damage_amount)
START_PROCESSING(SSobj, src)
addtimer(CALLBACK(src, PROC_REF(die)), time_to_live)
@@ -148,7 +152,7 @@
..()
if(AM == cause_data.resolve_mob())
return
-
+
if(isliving(AM))
var/mob/living/living_mob = AM
if(living_mob.ally_of_hivenumber(hivenumber))
diff --git a/code/game/objects/effects/effect_system/chemsmoke.dm b/code/game/objects/effects/effect_system/chemsmoke.dm
index 1b22ed6054eb..41b58ba39e77 100644
--- a/code/game/objects/effects/effect_system/chemsmoke.dm
+++ b/code/game/objects/effects/effect_system/chemsmoke.dm
@@ -57,10 +57,11 @@
targetTurfs = new()
//build affected area list
- for(var/turf/T in view(range, location))
+ FOR_DVIEW(var/turf/T, range, location, HIDE_INVISIBLE_OBSERVER)
//cull turfs to circle
if(cheap_pythag(T.x - location.x, T.y - location.y) <= range)
targetTurfs += T
+ FOR_DVIEW_END
//make secondary list for reagents that affect walls
if(chemholder.reagents.has_reagent("thermite") || chemholder.reagents.has_reagent("plantbgone"))
diff --git a/code/game/objects/effects/landmarks/landmarks.dm b/code/game/objects/effects/landmarks/landmarks.dm
index bf3b952edcf5..2d76357db895 100644
--- a/code/game/objects/effects/landmarks/landmarks.dm
+++ b/code/game/objects/effects/landmarks/landmarks.dm
@@ -421,6 +421,9 @@
name = "Nurse late join"
job = JOB_NURSE
+/obj/effect/landmark/late_join/intel
+ name = "Intelligence Officer late join"
+ job = JOB_INTEL
/obj/effect/landmark/late_join/Initialize(mapload, ...)
. = ..()
diff --git a/code/game/objects/effects/spawners/wo_spawners/supplies.dm b/code/game/objects/effects/spawners/wo_spawners/supplies.dm
index f2a502344660..612950418a70 100644
--- a/code/game/objects/effects/spawners/wo_spawners/supplies.dm
+++ b/code/game/objects/effects/spawners/wo_spawners/supplies.dm
@@ -106,7 +106,6 @@
/obj/effect/landmark/wo_supplies/storage
- icon = 'icons/obj/items/storage.dmi'
icon_state = null
amount = list(1,5)
@@ -117,6 +116,7 @@
/obj/effect/landmark/wo_supplies/storage/machete
icon_state = "machete_holster_full"
+ icon = 'icons/obj/items/storage/holsters.dmi'
stuff = list(/obj/item/storage/large_holster/machete/full)
/obj/effect/landmark/wo_supplies/storage/m56d
@@ -126,15 +126,18 @@
/obj/effect/landmark/wo_supplies/storage/mines
icon_state = "minebox"
+ icon = 'icons/obj/items/storage/packets.dmi'
stuff = list(/obj/item/storage/box/explosive_mines)
/obj/effect/landmark/wo_supplies/storage/grenades
amount = list(0,2)
icon_state = "nade_placeholder"
+ icon = 'icons/obj/items/storage/packets.dmi'
stuff = list(/obj/item/storage/box/nade_box)
/obj/effect/landmark/wo_supplies/storage/m37holster
icon_state = "m37_holster"
+ icon = 'icons/obj/items/storage/holsters.dmi'
stuff = list(/obj/item/storage/large_holster/m37)
/obj/effect/landmark/wo_supplies/storage/belts
diff --git a/code/game/objects/explosion_recursive.dm b/code/game/objects/explosion_recursive.dm
index 855f6c2f43c7..708b3d25e43e 100644
--- a/code/game/objects/explosion_recursive.dm
+++ b/code/game/objects/explosion_recursive.dm
@@ -86,9 +86,7 @@ explosion resistance exactly as much as their health
if(power >= 100) // powerful explosions send out some special effects
epicenter = get_turf(epicenter) // the ex_acts might have changed the epicenter
- create_shrapnel(epicenter, rand(5,9), , ,/datum/ammo/bullet/shrapnel/light/effect/ver1, explosion_cause_data)
- sleep(1)
- create_shrapnel(epicenter, rand(5,9), , ,/datum/ammo/bullet/shrapnel/light/effect/ver2, explosion_cause_data)
+ new /obj/shrapnel_effect(epicenter)
spawn(2) //just in case something goes wrong
if(explosion_in_progress)
diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm
index 03e1f126e9d8..7fd82aeb9c10 100644
--- a/code/game/objects/items.dm
+++ b/code/game/objects/items.dm
@@ -4,6 +4,7 @@
mouse_drag_pointer = MOUSE_ACTIVE_POINTER
layer = ITEM_LAYER
light_system = MOVABLE_LIGHT
+ blocks_emissive = EMISSIVE_BLOCK_GENERIC
/// this saves our blood splatter overlay, which will be processed not to go over the edges of the sprite
var/image/blood_overlay = null
var/randpixel = 6
@@ -163,6 +164,9 @@
/// How much to offset the item randomly either way alongside Y visually
var/ground_offset_y = 0
+ /// Special storages this item prioritizes
+ var/list/preferred_storage
+
/obj/item/Initialize(mapload, ...)
. = ..()
diff --git a/code/game/objects/items/cards_ids.dm b/code/game/objects/items/cards_ids.dm
index 80044e2fab3e..f90e54ef7854 100644
--- a/code/game/objects/items/cards_ids.dm
+++ b/code/game/objects/items/cards_ids.dm
@@ -171,24 +171,24 @@
name = "corporate doctor badge"
desc = "A corporate holo-badge. It is fingerprint locked with clearance level 3 access. It is commonly held by corporate doctors."
icon_state = "clearance"
- var/clearance_access = 3
+ var/credits_to_give = 15 //gives the equivalent clearance access in credits
/obj/item/card/id/silver/clearance_badge/scientist
name = "corporate scientist badge"
desc = "A corporate holo-badge. It is fingerprint locked with clearance level 4 access. It is commonly held by corporate scientists."
- clearance_access = 4
+ credits_to_give = 27
/obj/item/card/id/silver/clearance_badge/cl
name = "corporate liaison badge"
desc = "A corporate holo-badge in unique corporate orange and white. It is fingerprint locked with clearance level 5 access. It is commonly held by corporate liaisons."
icon_state = "cl"
- clearance_access = 5
+ credits_to_give = 42
/obj/item/card/id/silver/clearance_badge/manager
name = "corporate manager badge"
desc = "A corporate holo-badge in standard corporate orange and white. It has a unique uncapped bottom. It is fingerprint locked with 5-X clearance level. Commonly held by corporate managers."
icon_state = "pmc"
- clearance_access = 6
+ credits_to_give = 47
/obj/item/card/id/pizza
name = "pizza guy badge"
diff --git a/code/game/objects/items/circuitboards/computer.dm b/code/game/objects/items/circuitboards/computer.dm
index 43215faf0fbb..58ff86130cd6 100644
--- a/code/game/objects/items/circuitboards/computer.dm
+++ b/code/game/objects/items/circuitboards/computer.dm
@@ -180,7 +180,7 @@
else if(HAS_TRAIT(tool, TRAIT_TOOL_BLACKMARKET_HACKER))
to_chat(user, SPAN_WARNING("You start messing around with the electronics of [src]..."))
if(do_after(user, 8 SECONDS, INTERRUPT_ALL, BUSY_ICON_FRIENDLY))
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(user, SPAN_WARNING("You have no idea what you're doing."))
return
to_chat(user, SPAN_WARNING("Huh? You find a processor bus with the letters 'B.M.' written in white crayon over it. You start fiddling with it."))
diff --git a/code/game/objects/items/devices/cictablet.dm b/code/game/objects/items/devices/cictablet.dm
index 597886a0cb85..8c07c71a2112 100644
--- a/code/game/objects/items/devices/cictablet.dm
+++ b/code/game/objects/items/devices/cictablet.dm
@@ -104,7 +104,7 @@
return FALSE
var/input = stripped_multiline_input(user, "Please write a message to announce to the [MAIN_SHIP_NAME]'s crew and all groundside personnel.", "Priority Announcement", "")
- if(!input || !COOLDOWN_FINISHED(src, announcement_cooldown) || !(user in view(1, src)))
+ if(!input || !COOLDOWN_FINISHED(src, announcement_cooldown) || !(user in dview(1, src)))
return FALSE
var/signed = null
@@ -177,3 +177,15 @@
announcement_faction = FACTION_PMC
minimap_type = MINIMAP_FLAG_PMC
+
+/obj/item/device/cotablet/upp
+
+ desc = "A special device used by field UPP commanders."
+
+ tablet_name = "UPP Field Commander's Tablet"
+
+ announcement_title = UPP_COMMAND_ANNOUNCE
+ announcement_faction = FACTION_UPP
+ req_access = list(ACCESS_UPP_LEADERSHIP)
+
+ minimap_type = MINIMAP_FLAG_UPP
diff --git a/code/game/objects/items/devices/clue_scanner.dm b/code/game/objects/items/devices/clue_scanner.dm
index 33cc2ab7d207..dced788abe51 100644
--- a/code/game/objects/items/devices/clue_scanner.dm
+++ b/code/game/objects/items/devices/clue_scanner.dm
@@ -1,6 +1,6 @@
/obj/item/device/clue_scanner
name = "forensic scanner"
- desc = "A modern handheld scanner to gather fingerprints. Guaranteed increase of effectivity and almost perfect accuracy of results. DISCLAIMER: Incorrect results are not covered by insurance."
+ desc = "A modern handheld scanner to gather fingerprints. Must be analyzed at a security records terminal after prints are gathered."
icon_state = "forensic1"
w_class = SIZE_MEDIUM
item_state = "electronic"
diff --git a/code/game/objects/items/devices/defibrillator.dm b/code/game/objects/items/devices/defibrillator.dm
index 518fdb1a9591..0497a75e6fba 100644
--- a/code/game/objects/items/devices/defibrillator.dm
+++ b/code/game/objects/items/devices/defibrillator.dm
@@ -108,13 +108,13 @@
if(ghost && (!check_client || ghost.client) && (!check_can_reenter || ghost.can_reenter_corpse))
return ghost
-/mob/living/carbon/human/proc/is_revivable()
+/mob/living/carbon/human/proc/is_revivable(ignore_heart = FALSE)
if(isnull(internal_organs_by_name) || isnull(internal_organs_by_name["heart"]))
return FALSE
var/datum/internal_organ/heart/heart = internal_organs_by_name["heart"]
var/obj/limb/head = get_limb("head")
- if(chestburst || !head || head.status & LIMB_DESTROYED || !heart || heart.organ_status >= ORGAN_BROKEN || !has_brain() || status_flags & PERMANENTLY_DEAD)
+ if(chestburst || !head || head.status & LIMB_DESTROYED || !ignore_heart && (!heart || heart.organ_status >= ORGAN_BROKEN) || !has_brain() || status_flags & PERMANENTLY_DEAD)
return FALSE
return TRUE
@@ -166,7 +166,7 @@
var/mob/dead/observer/G = H.get_ghost()
if(istype(G) && G.client)
- playsound_client(G.client, 'sound/effects/adminhelp_new.ogg')
+ playsound_client(G.client, 'sound/effects/revive_notify.ogg')
to_chat(G, SPAN_BOLDNOTICE(FONT_SIZE_LARGE("Someone is trying to revive your body. Return to it if you want to be resurrected! \
(Verbs -> Ghost -> Re-enter corpse, or click here! )")))
diff --git a/code/game/objects/items/devices/drone_devices.dm b/code/game/objects/items/devices/drone_devices.dm
deleted file mode 100644
index 0e22b64bf67f..000000000000
--- a/code/game/objects/items/devices/drone_devices.dm
+++ /dev/null
@@ -1,241 +0,0 @@
-
-
-//Simple borg hand.
-//Limited use.
-/obj/item/device/gripper
- name = "magnetic gripper"
- desc = "A simple grasping tool for synthetic assets."
- icon_state = "gripper"
-
- //Has a list of items that it can hold.
- var/list/can_hold = list(
- /obj/item/cell,
- /obj/item/circuitboard,
- /obj/item/stock_parts,
- /obj/item/frame,
- /obj/item/tank,
- /obj/item/stock_parts/smes_coil
- )
-
- //Item currently being held.
- var/obj/item/wrapped = null
-
-/obj/item/device/gripper/paperwork
- name = "paperwork gripper"
- desc = "A simple grasping tool for clerical work."
-
- can_hold = list(
- /obj/item/clipboard,
- /obj/item/paper,
- /obj/item/paper_bundle,
- /obj/item/card/id,
- )
-
-/obj/item/device/gripper/attack_self(mob/user as mob)
- ..()
-
- if(wrapped)
- wrapped.attack_self(user)
-
-/obj/item/device/gripper/verb/drop_item()
-
- set name = "Drop Item"
- set desc = "Release an item from your magnetic gripper."
- set category = "Drone"
- set src in usr
- if(!wrapped)
- //There's some weirdness with items being lost inside the arm. Trying to fix all cases. ~Z
- for(var/obj/item/thing in src.contents)
- thing.forceMove(get_turf(src))
- return
-
- if(wrapped.loc != src)
- wrapped = null
- return
-
- to_chat(src.loc, SPAN_WARNING("You drop \the [wrapped]."))
- wrapped.forceMove(get_turf(src))
- wrapped = null
- //update_icon()
-
-/obj/item/device/gripper/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob)
- return
-
-/obj/item/device/gripper/afterattack(atom/target as mob|obj|turf|area, mob/living/user as mob|obj, proximity, params)
-
- if(!target || !proximity) //Target is invalid or we are not adjacent.
- return
-
- //There's some weirdness with items being lost inside the arm. Trying to fix all cases. ~Z
- if(!wrapped)
- for(var/obj/item/thing in src.contents)
- wrapped = thing
- break
-
- if(wrapped) //Already have an item.
-
- //Temporary put wrapped into user so target's attackby() checks pass.
- wrapped.forceMove(user)
-
- //Pass the attack on to the target. This might delete/relocate wrapped.
- target.attackby(wrapped,user)
-
- //If wrapped was neither deleted nor put into target, put it back into the gripper.
- if(wrapped && user && (wrapped.loc == user))
- wrapped.forceMove(src)
- else
- wrapped = null
- return
-
- else if(istype(target,/obj/item)) //Check that we're not pocketing a mob.
-
- //...and that the item is not in a container.
- if(!isturf(target.loc))
- return
-
- var/obj/item/I = target
-
- //Check if the item is blacklisted.
- var/grab = 0
- for(var/typepath in can_hold)
- if(istype(I,typepath))
- grab = 1
- break
-
- //We can grab the item, finally.
- if(grab)
- to_chat(user, "You collect \the [I].")
- I.forceMove(src)
- wrapped = I
- return
- else
- to_chat(user, SPAN_DANGER("Your gripper cannot hold \the [target]."))
-
- else if(istype(target,/obj/structure/machinery/power/apc))
- var/obj/structure/machinery/power/apc/A = target
- if(A.opened)
- if(A.cell)
-
- wrapped = A.cell
-
- A.cell.add_fingerprint(user)
- A.cell.update_icon()
- A.cell.forceMove(src)
- A.cell = null
-
- A.charging = 0
- A.update_icon()
-
- user.visible_message(SPAN_DANGER("[user] removes the power cell from [A]!"), "You remove the power cell.")
-
-
-
-
-
-
-
-//TODO: Matter decompiler.
-/obj/item/device/matter_decompiler
- name = "matter decompiler"
- desc = "Eating trash, bits of glass, or other debris will replenish your stores."
- icon_state = "decompiler"
-
- //Metal, glass, wood, plastic.
- var/list/stored_comms = list(
- "metal" = 0,
- "glass" = 0,
- "wood" = 0,
- "plastic" = 0
- )
-
-/obj/item/device/matter_decompiler/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob)
- return
-
-/obj/item/device/matter_decompiler/afterattack(atom/target as mob|obj|turf|area, mob/living/user as mob|obj, proximity, params)
-
- if(!proximity) return //Not adjacent.
-
- //We only want to deal with using this on turfs. Specific items aren't important.
- var/turf/T = get_turf(target)
- if(!istype(T))
- return
-
- //Used to give the right message.
- var/grabbed_something = 0
-
- for(var/mob/M in T)
- if(istype(M,/mob/living/simple_animal/lizard) || istype(M,/mob/living/simple_animal/mouse))
- src.loc.visible_message(SPAN_DANGER("[src.loc] sucks [M] into its decompiler. There's a horrible crunching noise."),SPAN_DANGER("It's a bit of a struggle, but you manage to suck [M] into your decompiler. It makes a series of visceral crunching noises."))
- new/obj/effect/decal/cleanable/blood/splatter(get_turf(src))
- qdel(M)
- stored_comms["wood"]++
- stored_comms["wood"]++
- stored_comms["plastic"]++
- stored_comms["plastic"]++
- return
- else
- continue
-
- for(var/obj/W in T)
- //Different classes of items give different commodities.
- if (istype(W,/obj/item/trash/cigbutt))
- stored_comms["plastic"]++
- else if(istype(W,/obj/effect/spider/spiderling))
- stored_comms["wood"]++
- stored_comms["wood"]++
- stored_comms["plastic"]++
- stored_comms["plastic"]++
- else if(istype(W,/obj/item/light_bulb))
- var/obj/item/light_bulb/L = W
- if(L.status >= 2) //In before someone changes the inexplicably local defines. ~ Z
- stored_comms["metal"]++
- stored_comms["glass"]++
- else
- continue
- else if(istype(W,/obj/effect/decal/remains/robot))
- stored_comms["metal"]++
- stored_comms["metal"]++
- stored_comms["plastic"]++
- stored_comms["plastic"]++
- stored_comms["glass"]++
- else if(istype(W,/obj/item/trash))
- stored_comms["metal"]++
- stored_comms["plastic"]++
- stored_comms["plastic"]++
- stored_comms["plastic"]++
- else if(istype(W,/obj/effect/decal/cleanable/blood/gibs/robot))
- stored_comms["metal"]++
- stored_comms["metal"]++
- stored_comms["glass"]++
- stored_comms["glass"]++
- else if(istype(W,/obj/item/ammo_casing))
- stored_comms["metal"]++
- else if(istype(W,/obj/item/shard/shrapnel))
- stored_comms["metal"]++
- stored_comms["metal"]++
- stored_comms["metal"]++
- else if(istype(W,/obj/item/shard))
- stored_comms["glass"]++
- stored_comms["glass"]++
- stored_comms["glass"]++
- else if(istype(W,/obj/item/reagent_container/food/snacks/grown))
- stored_comms["wood"]++
- stored_comms["wood"]++
- stored_comms["wood"]++
- stored_comms["wood"]++
- else if(istype(W,/obj/item/ammo_magazine))
- var/obj/item/ammo_magazine/AM = W
- if(AM.current_rounds)
- continue
- stored_comms["metal"]++
- else
- continue
-
- qdel(W)
- grabbed_something = 1
-
- if(grabbed_something)
- to_chat(user, SPAN_NOTICE(" You deploy your decompiler and clear out the contents of \the [T]."))
- else
- to_chat(user, SPAN_DANGER("Nothing on \the [T] is useful to you."))
- return
diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm
index e506f51ce21c..de2a328de370 100644
--- a/code/game/objects/items/devices/flashlight.dm
+++ b/code/game/objects/items/devices/flashlight.dm
@@ -62,9 +62,9 @@
on = !on
set_light_on(on)
update_icon()
- for(var/X in actions)
- var/datum/action/A = X
- A.update_button_icon()
+ for(var/xman in actions)
+ var/datum/action/active = xman
+ active.update_button_icon()
return TRUE
@@ -73,68 +73,71 @@
on = FALSE
set_light_on(on)
update_icon()
- for(var/X in actions)
- var/datum/action/A = X
- A.update_button_icon()
+ for(var/xman in actions)
+ var/datum/action/active = xman
+ active.update_button_icon()
return 1
return 0
-/obj/item/device/flashlight/attackby(obj/item/I as obj, mob/user as mob)
- if(HAS_TRAIT(I, TRAIT_TOOL_SCREWDRIVER))
+/obj/item/device/flashlight/attackby(obj/item/item as obj, mob/user as mob)
+ if(HAS_TRAIT(item, TRAIT_TOOL_SCREWDRIVER))
if(!raillight_compatible) //No fancy messages, just no
return
if(on)
to_chat(user, SPAN_WARNING("Turn off [src] first."))
return
if(isstorage(loc))
- var/obj/item/storage/S = loc
- S.remove_from_storage(src)
+ var/obj/item/storage/container = loc
+ container.remove_from_storage(src)
if(loc == user)
user.drop_inv_item_on_ground(src) //This part is important to make sure our light sources update, as it calls dropped()
- var/obj/item/attachable/flashlight/F = new(src.loc)
- user.put_in_hands(F) //This proc tries right, left, then drops it all-in-one.
+ var/obj/item/attachable/flashlight/flash = new(src.loc)
+ user.put_in_hands(flash) //This proc tries right, left, then drops it all-in-one.
to_chat(user, SPAN_NOTICE("You modify [src]. It can now be mounted on a weapon."))
- to_chat(user, SPAN_NOTICE("Use a screwdriver on [F] to change it back."))
+ to_chat(user, SPAN_NOTICE("Use a screwdriver on [flash] to change it back."))
qdel(src) //Delete da old flashlight
return
else
..()
-/obj/item/device/flashlight/attack(mob/living/M as mob, mob/living/user as mob)
+/obj/item/device/flashlight/attack(mob/living/carbon/human/being as mob, mob/living/user as mob)
add_fingerprint(user)
if(on && user.zone_selected == "eyes")
if((user.getBrainLoss() >= 60) && prob(50)) //too dumb to use flashlight properly
return ..() //just hit them in the head
- if((!ishuman(user) || SSticker) && SSticker.mode.name != "monkey") //don't have dexterity
+ if (!(ishuman(user) || SSticker) && SSticker.mode.name != "monkey") //don't have dexterity
to_chat(user, SPAN_NOTICE("You don't have the dexterity to do this!"))
return
- var/mob/living/carbon/human/H = M //mob has protective eyewear
- if(ishuman(H) && ((H.head && H.head.flags_inventory & COVEREYES) || (H.wear_mask && H.wear_mask.flags_inventory & COVEREYES) || (H.glasses && H.glasses.flags_inventory & COVEREYES)))
- to_chat(user, SPAN_NOTICE("You're going to need to remove that [(H.head && H.head.flags_inventory & COVEREYES) ? "helmet" : (H.wear_mask && H.wear_mask.flags_inventory & COVEREYES) ? "mask": "glasses"] first."))
+ var/mob/living/carbon/human/beingB = being //mob has protective eyewear
+ if(ishuman(beingB) && ((beingB.head && beingB.head.flags_inventory & COVEREYES) || (beingB.wear_mask && beingB.wear_mask.flags_inventory & COVEREYES) || (beingB.glasses && beingB.glasses.flags_inventory & COVEREYES)))
+ to_chat(user, SPAN_NOTICE("You're going to need to remove [(beingB.head && beingB.head.flags_inventory & COVEREYES) ? "that helmet" : (beingB.wear_mask && beingB.wear_mask.flags_inventory & COVEREYES) ? "that mask": "those glasses"] first."))
return
- if(M == user) //they're using it on themselves
- M.flash_eyes()
- M.visible_message(SPAN_NOTICE("[M] directs [src] to \his eyes."), \
- SPAN_NOTICE("You wave the light in front of your eyes! Trippy!"))
+ if(being == user) //they're using it on themselves
+ being.flash_eyes()
+ being.visible_message(SPAN_NOTICE("[being] directs [src] to [being.p_their()] eyes."), \
+ SPAN_NOTICE("You wave the light in front of your eyes! Wow, that's trippy!"))
return
- user.visible_message(SPAN_NOTICE("[user] directs [src] to [M]'s eyes."), \
- SPAN_NOTICE("You direct [src] to [M]'s eyes."))
-
- if(istype(M, /mob/living/carbon/human)) //robots and aliens are unaffected
- if(M.stat == DEAD || M.sdisabilities & DISABILITY_BLIND) //mob is dead or fully blind
- to_chat(user, SPAN_NOTICE("[M] pupils does not react to the light!"))
- else //they're okay!
- M.flash_eyes()
- to_chat(user, SPAN_NOTICE("[M]'s pupils narrow."))
+ user.visible_message(SPAN_NOTICE("[user] directs [src] to [being]'s eyes."), \
+ SPAN_NOTICE("You direct [src] to [being]'s eyes."))
+
+ if(ishuman_strict(being)) //robots and aliens are unaffected
+ var/datum/internal_organ/eyes/eyes = being.internal_organs_by_name["eyes"]
+ var/datum/internal_organ/brain/brain = being.internal_organs_by_name["brain"]
+ if(being.stat == DEAD || being.sdisabilities & DISABILITY_BLIND || eyes.organ_status == ORGAN_BROKEN || brain.organ_status == ORGAN_BROKEN) //mob is dead, fully blind, or their eyes are
+ to_chat(user, SPAN_NOTICE("[being]'s pupils do not react to the light!"))
+ else //they're okay! Well, probably
+ being.flash_eyes()
+ to_chat(user, SPAN_NOTICE("[being]'s pupils narrow."))
+ return
else
return ..()
-/obj/item/device/flashlight/attack_alien(mob/living/carbon/xenomorph/M)
+/obj/item/device/flashlight/attack_alien(mob/living/carbon/xenomorph/being)
. = ..()
if(on && can_be_broken)
@@ -147,14 +150,75 @@
/obj/item/device/flashlight/pen
name = "penlight"
- desc = "A pen-sized light, used by medical staff."
+ desc = "A pen-sized light, used by medical staff to check the condition of eyes, brain, and the overall awareness of patients."
icon_state = "penlight"
item_state = ""
+ flags_equip_slot = SLOT_WAIST|SLOT_EAR|SLOT_SUIT_STORE
flags_atom = FPRINT|CONDUCT
light_range = 2
w_class = SIZE_TINY
+ throw_speed = SPEED_VERY_FAST
+ throw_range = 15
+ matter = list("metal" = 10,"glass" = 5)
raillight_compatible = 0
+/obj/item/device/flashlight/pen/attack(mob/living/carbon/human/being as mob, mob/living/user as mob)
+ add_fingerprint(user)
+ if(user.a_intent == INTENT_HELP)
+ if(on && user.zone_selected == "eyes")
+ if(!ishuman_strict(being)) //robots and aliens are unaffected
+ return
+ var/reaction = null
+ if(isnull(being.internal_organs_by_name))
+ reaction = "discover that indeed [being.p_they()] have nothing to be checked"
+ return // they have no organs somehow
+ if(being == user) //they're using it on themselves
+ being.flash_eyes()
+ being.visible_message(SPAN_NOTICE("[being] directs [src] to [being.p_their()] eyes."), \
+ SPAN_NOTICE("You wave the light in front of your eyes! Wow, that's trippy!"))
+ return
+ if(being.stat == DEAD || (being.status_flags&FAKEDEATH))
+ reaction = "conclude that [being.p_their()] eyes are completely lifeless, [being.p_they()] must have passed away"
+ else
+ var/datum/internal_organ/eyes/eyes = being.internal_organs_by_name["eyes"]
+ var/datum/internal_organ/brain/brain = being.internal_organs_by_name["brain"]
+ if(skillcheck(user, SKILL_MEDICAL, SKILL_MEDICAL_MEDIC))
+ if(eyes)
+ switch(eyes.organ_status)
+ if(ORGAN_LITTLE_BRUISED)
+ being.flash_eyes()
+ reaction = "notice that [being.p_their()] eyes are reacting to the light , but [being.p_their()] pupils seen to react sluggishly and with small delays , [being.p_their()] vision is probably a little impaired "
+ if(ORGAN_BRUISED)
+ being.flash_eyes()
+ reaction = "observe that [being.p_their()] eyes are unrealiably reacting to the light , with [being.p_their()] pupils reacting very sluggishly and with noticeable delays , it is probable that [being.p_their()] vision is remarkably impaired "
+ if(ORGAN_BROKEN)
+ reaction = "notice that [being.p_their()] eyes are not reacting to the light , and the pupils of both eyes are not constricting with the light shine at all, [being.p_they()] is probably blind "
+ else
+ being.flash_eyes()
+ reaction = "perceive that [being.p_their()] eyes and pupils are normally reacting to the light , [being.p_they()] is probably seeing without problems "
+ if(brain)
+ if(reaction)
+ reaction += ". You also "
+ switch(brain.organ_status)
+ if(ORGAN_LITTLE_BRUISED)
+ being.flash_eyes()
+ reaction += "notice that the pupils are consensually constricting with a significant delay when light is separately applied to each eye, meaning that [being.p_they()] possibly have subtle brain damage "
+ if(ORGAN_BRUISED)
+ being.flash_eyes()
+ reaction += "notice that the pupils are not consensually constricting when light is separately applied to each eye, meaning possible brain damage "
+ if(ORGAN_BROKEN)
+ reaction += "notice that the pupils have different sizes and are assymmetric , [being.p_they()] possibly have severe brain damage "
+ else
+ being.flash_eyes()
+ reaction += "notice that the pupils are consensually and normally constricting when light is separately applied to each eye, [being.p_their()] brain is probably fine "
+ else
+ reaction = "can't see anything at all, weirdly enough"
+ else
+ being.flash_eyes()
+ reaction = "don't really know what you are looking for, you don't know anything about medicine"
+ user.visible_message("[user] directs [src] to [being]'s eyes.", "You point [src] to [being.p_their()] eyes to begin analysing them further and... you [reaction].")
+ return ..()
+
/obj/item/device/flashlight/drone
name = "low-power flashlight"
desc = "A miniature lamp, that might be used by small robots."
@@ -364,9 +428,9 @@
user.visible_message(SPAN_NOTICE("[user] activates the flare."), SPAN_NOTICE("You pull the cord on the flare, activating it!"))
playsound(src,'sound/handling/flare_activate_2.ogg', 50, 1) //cool guy sound
turn_on()
- var/mob/living/carbon/U = user
- if(istype(U) && !U.throw_mode)
- U.toggle_throw_mode(THROW_MODE_NORMAL)
+ var/mob/living/carbon/enjoyer = user
+ if(istype(enjoyer) && !enjoyer.throw_mode)
+ enjoyer.toggle_throw_mode(THROW_MODE_NORMAL)
/obj/item/device/flashlight/flare/proc/activate_signal(mob/living/carbon/human/user)
return
diff --git a/code/game/objects/items/devices/megaphone.dm b/code/game/objects/items/devices/megaphone.dm
index 114ed48b1819..f155233a6a96 100644
--- a/code/game/objects/items/devices/megaphone.dm
+++ b/code/game/objects/items/devices/megaphone.dm
@@ -2,7 +2,7 @@
name = "megaphone"
desc = "A device used to project your voice. Loudly."
icon_state = "megaphone"
- item_state = "radio"
+ item_state = "megaphone"
w_class = SIZE_SMALL
flags_atom = FPRINT|CONDUCT
@@ -46,6 +46,7 @@
continue
listener.show_message("[user] broadcasts, [FONT_SIZE_LARGE("\"[message]\"")]", SHOW_MESSAGE_AUDIBLE) // 2 stands for hearable message
langchat_long_listeners += listener
+ playsound(loc, 'sound/items/megaphone.ogg', 100, FALSE, TRUE)
user.langchat_long_speech(message, langchat_long_listeners, user.get_default_language())
COOLDOWN_START(src, spam_cooldown, spam_cooldown_time)
diff --git a/code/game/objects/items/devices/multitool.dm b/code/game/objects/items/devices/multitool.dm
index a92135b9d7ed..73e5b86a69eb 100644
--- a/code/game/objects/items/devices/multitool.dm
+++ b/code/game/objects/items/devices/multitool.dm
@@ -18,6 +18,7 @@
matter = list("metal" = 50,"glass" = 20)
inherent_traits = list(TRAIT_TOOL_MULTITOOL)
+ preferred_storage = list(/obj/item/clothing/accessory/storage/tool_webbing = WEAR_ACCESSORY)
var/hack_speed = 10 SECONDS // Only used for vendors right now
var/next_scan
@@ -46,7 +47,7 @@
/obj/item/device/multitool/attack_self(mob/user)
..()
- if(world.time < next_scan || !ishuman(user) || !skillcheck(user,SKILL_ENGINEER,SKILL_ENGINEER_TRAINED))
+ if(world.time < next_scan || !ishuman(user) || !skillcheck(user,SKILL_ENGINEER,SKILL_ENGINEER_NOVICE))
return
next_scan = world.time + 15
diff --git a/code/game/objects/items/devices/personal_data_transmitter.dm b/code/game/objects/items/devices/personal_data_transmitter.dm
index b967aa9273ca..c5bcdd739608 100644
--- a/code/game/objects/items/devices/personal_data_transmitter.dm
+++ b/code/game/objects/items/devices/personal_data_transmitter.dm
@@ -161,6 +161,7 @@
name = "\improper Boots! PDT/L Battle Buddy kit"
desc = "Contains a PDT/L set, consisting of the PDT bracelet and its sister locator tube, alongside a spare cell seemingly wedged into the kit."
desc_lore = "This kit was distributed in the 200th (Season 4) Issue of the Boots! magazine, 'Privates die without their battlebuddy!', to drive up sales. Many have noted the poor battery life of these units, leading many to speculate that these were faulty units that were repackaged and shipped off to various USCM-adjacent mil-surplus good stores. The Department of the Navy Observation in Photographs (DNOP) has not released a statement regarding these theories."
+ icon = 'icons/obj/items/storage/kits.dmi'
icon_state = "pdt_box"
can_hold = list(/obj/item/device/pdt_locator_tube, /obj/item/clothing/accessory/pdt_bracelet)
foldable = /obj/item/stack/sheet/cardboard
diff --git a/code/game/objects/items/devices/pinpointer.dm b/code/game/objects/items/devices/pinpointer.dm
index 2f5d9ffe9d5f..3dd9fdaf1253 100644
--- a/code/game/objects/items/devices/pinpointer.dm
+++ b/code/game/objects/items/devices/pinpointer.dm
@@ -126,10 +126,10 @@
mode = 1
var/locationx = tgui_input_real_number(usr, "Please input the x coordinate to search for.", "Location?")
- if(!locationx || !(usr in view(1,src)))
+ if(!locationx || !(usr in dview(1, src)))
return
var/locationy = tgui_input_real_number(usr, "Please input the y coordinate to search for.", "Location?")
- if(!locationy || !(usr in view(1,src)))
+ if(!locationy || !(usr in dview(1, src)))
return
var/turf/Z = get_turf(src)
diff --git a/code/game/objects/items/devices/portable_vendor.dm b/code/game/objects/items/devices/portable_vendor.dm
index 3dd8533a046d..b3ae76654bf8 100644
--- a/code/game/objects/items/devices/portable_vendor.dm
+++ b/code/game/objects/items/devices/portable_vendor.dm
@@ -5,7 +5,7 @@
/obj/item/device/portable_vendor
name = "\improper Automated Storage Briefcase"
desc = "A suitcase-sized automated storage and retrieval system. Designed to efficiently store and selectively dispense small items."
- icon = 'icons/obj/items/storage.dmi'
+ icon = 'icons/obj/items/storage/briefcases.dmi'
icon_state = "secure"
flags_atom = FPRINT|CONDUCT
force = 8
diff --git a/code/game/objects/items/devices/radio/intercom.dm b/code/game/objects/items/devices/radio/intercom.dm
index 6aecacd27916..489aa8827718 100644
--- a/code/game/objects/items/devices/radio/intercom.dm
+++ b/code/game/objects/items/devices/radio/intercom.dm
@@ -81,3 +81,7 @@
/obj/item/device/radio/intercom/normandy
name = "dropship normandy intercom"
frequency = DS2_FREQ
+
+/obj/item/device/radio/intercom/saipan
+ name = "dropship saipan intercom"
+ frequency = DS3_FREQ
diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm
index 8c507dad18e3..0e7680cd2f7d 100644
--- a/code/game/objects/items/devices/scanners.dm
+++ b/code/game/objects/items/devices/scanners.dm
@@ -329,7 +329,7 @@ FORENSIC SCANNER
if(!(istype(user, /mob/living/carbon/human) || SSticker) && SSticker.mode.name != "monkey")
to_chat(user, SPAN_DANGER("You don't have the dexterity to do this!"))
return
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(user, SPAN_WARNING("You do not know how to use the [name]."))
return
if(!istype(O))
diff --git a/code/game/objects/items/devices/teleportation.dm b/code/game/objects/items/devices/teleportation.dm
index d64e717a3095..003f3152800d 100644
--- a/code/game/objects/items/devices/teleportation.dm
+++ b/code/game/objects/items/devices/teleportation.dm
@@ -152,7 +152,7 @@
else
L["[com.id] (Inactive)"] = com.locked
var/list/turfs = list( )
- for(var/turf/T in orange(10))
+ for(var/turf/T as anything in ORANGE_TURFS(10, src))
if(T.x>world.maxx-8 || T.x<8) continue //putting them at the edge is dumb
if(T.y>world.maxy-8 || T.y<8) continue
turfs += T
diff --git a/code/game/objects/items/explosives/explosive.dm b/code/game/objects/items/explosives/explosive.dm
index 1bd6985bc015..0be81ba8a0ed 100644
--- a/code/game/objects/items/explosives/explosive.dm
+++ b/code/game/objects/items/explosives/explosive.dm
@@ -259,7 +259,7 @@
to_chat(usr, SPAN_DANGER("This is beyond your understanding..."))
return
- if(!skillcheck(H, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(H, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(usr, SPAN_DANGER("You have no idea how to use this..."))
return
diff --git a/code/game/objects/items/explosives/grenades/marines.dm b/code/game/objects/items/explosives/grenades/marines.dm
index 09c0197cda7f..e669a27ab1a7 100644
--- a/code/game/objects/items/explosives/grenades/marines.dm
+++ b/code/game/objects/items/explosives/grenades/marines.dm
@@ -97,6 +97,8 @@
falloff_mode = EXPLOSION_FALLOFF_SHAPE_LINEAR
/obj/item/explosive/grenade/high_explosive/frag/toy
+ AUTOWIKI_SKIP(TRUE)
+
name = "toy HEFA grenade"
desc = "High-Explosive Fragmenting-Antipersonnel. A small, but deceptively strong fragmentation grenade that has been phasing out the M15 fragmentation grenades alongside the M40 HEDP. Capable of being loaded in the M92 Launcher, or thrown by hand. Wait, the labeling on the side indicates this is a toy, what the hell?"
explosion_power = 0
@@ -419,9 +421,9 @@
qdel(src)
/obj/item/explosive/grenade/phosphorus
- name = "\improper M40 HPDP grenade"
- desc = "The M40 HPDP is a small, but powerful phosphorus grenade. It is set to detonate in 2 seconds."
- icon_state = "grenade_phos"
+ name = "\improper M40 CCDP grenade"
+ desc = "The M40 CCDP is a small, but powerful chemical compound grenade, similar in effect to WPDP. Word on the block says that the CCDP doesn't actually release White Phosphorus, but some other chemical developed in W-Y labs."
+ icon_state = "grenade_chem"
det_time = 20
item_state = "grenade_phos"
underslug_launchable = TRUE
@@ -435,7 +437,9 @@
return ..()
/obj/item/explosive/grenade/phosphorus/weak
- desc = "The M40 HPDP is a small, but powerful phosphorus grenade. Word on the block says that the HPDP doesn't actually release White Phosphorus, but some other chemical developed in W-Y labs."
+ name = "\improper M40 WPDP grenade"
+ icon_state = "grenade_phos"
+ desc = "The M40 WPDP is a small, but powerful phosphorus grenade. It is set to detonate in 2 seconds."
/obj/item/explosive/grenade/phosphorus/Initialize()
. = ..()
@@ -865,6 +869,8 @@
return
/obj/item/explosive/grenade/high_explosive/holy_hand_grenade
+ AUTOWIKI_SKIP(TRUE)
+
name = "\improper Holy Hand Grenade of Antioch"
desc = "And Saint Attila raised the hand grenade up on high, saying, \"O LORD, bless this Thy hand grenade that with it Thou mayest blow Thine enemies to tiny bits, in Thy mercy.\" And the LORD did grin and the people did feast upon the lambs and sloths and carp and anchovies... And the LORD spake, saying, \"First shalt thou take out the Holy Pin, then shalt thou count to three, no more, no less. Three shall be the number thou shalt count, and the number of the counting shall be three. Four shalt thou not count, neither count thou two, excepting that thou then proceed to three. Five is right out. Once the number three, being the third number, be reached, then lobbest thou thy Holy Hand Grenade of Antioch towards thy foe, who, being naughty in My sight, shall snuff it.\""
icon_state = "grenade_antioch"
diff --git a/code/game/objects/items/explosives/plastic.dm b/code/game/objects/items/explosives/plastic.dm
index 58cbca9a5ab3..c6a3dfaed5f9 100644
--- a/code/game/objects/items/explosives/plastic.dm
+++ b/code/game/objects/items/explosives/plastic.dm
@@ -25,7 +25,7 @@
antigrief_protection = TRUE //Should it be checked by antigrief?
var/req_skill = SKILL_ENGINEER
- var/req_skill_level = SKILL_ENGINEER_TRAINED
+ var/req_skill_level = SKILL_ENGINEER_NOVICE
/obj/item/explosive/plastic/Destroy()
disarm()
@@ -46,7 +46,7 @@
. = ..()
/obj/item/explosive/plastic/attack_self(mob/user)
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_NOVICE))
to_chat(user, SPAN_WARNING("You don't seem to know how to use [src]..."))
return
diff --git a/code/game/objects/items/frames/table_rack.dm b/code/game/objects/items/frames/table_rack.dm
index eda9b9c5749b..95ab43869774 100644
--- a/code/game/objects/items/frames/table_rack.dm
+++ b/code/game/objects/items/frames/table_rack.dm
@@ -59,7 +59,10 @@
if(istype(get_area(loc), /area/shuttle)) //HANGAR/SHUTTLE BUILDING
to_chat(user, SPAN_WARNING("No. This area is needed for the dropship."))
return
-
+ for(var/obj/object in OT)
+ if(object.density)
+ to_chat(user, SPAN_WARNING("[object] is blocking you from constructing [src]!"))
+ return
if(!do_after(user, 3 SECONDS, INTERRUPT_ALL, BUSY_ICON_BUILD))
to_chat(user, SPAN_WARNING("Hold still while you're constructing a table!"))
return
diff --git a/code/game/objects/items/handheld_distress_beacon.dm b/code/game/objects/items/handheld_distress_beacon.dm
index 73c9415dbfad..a6152b648c63 100644
--- a/code/game/objects/items/handheld_distress_beacon.dm
+++ b/code/game/objects/items/handheld_distress_beacon.dm
@@ -89,3 +89,13 @@
recipient = "the Corporate Security Division"
ert_paths = list(/datum/emergency_call/goon/bodyguard) // "Weyland-Yutani Goon (Executive Bodyguard Detail)"
ert_short_names = list("SEND BODYGUARD")
+
+// Provost office distress beacon held by Inspectors+
+/obj/item/handheld_distress_beacon/provost
+ name = "\improper Provost Office handheld beacon"
+ desc = "A standard Provost Office beacon branded with the Provost Office symbol, provided to personnel for emergencies. It features an extended relay antenna and calls a squadron of Provost enforcers."
+
+ beacon_type = "Provost Enforcers beacon"
+ recipient = "the USS Superintendent"
+ ert_paths = list(/datum/emergency_call/provost_enforcer) // "USCM Provost Enforcers"
+ ert_short_names = list("SEND ENFORCERS")
diff --git a/code/game/objects/items/implants/implant.dm b/code/game/objects/items/implants/implant.dm
index e7ebe0391fae..6584186f576a 100644
--- a/code/game/objects/items/implants/implant.dm
+++ b/code/game/objects/items/implants/implant.dm
@@ -140,6 +140,7 @@ Implant Specifics: "}
var/elevel = "Localized Limb"
var/phrase = "supercalifragilisticexpialidocious"
icon_state = "implant_evil"
+ flags_atom = USES_HEARING
/obj/item/implant/explosive/get_data()
var/dat = {"
diff --git a/code/game/objects/items/misc.dm b/code/game/objects/items/misc.dm
index d73893e2671c..6a94849d6b74 100644
--- a/code/game/objects/items/misc.dm
+++ b/code/game/objects/items/misc.dm
@@ -164,7 +164,7 @@
desc = "A debug item for research."
/obj/item/moneybag
- icon = 'icons/obj/items/storage.dmi'
+ icon = 'icons/obj/items/storage/bags.dmi'
name = "Money bag"
icon_state = "moneybag"
force = 10
@@ -178,7 +178,7 @@
/obj/item/evidencebag
name = "evidence bag"
desc = "An empty evidence bag."
- icon = 'icons/obj/items/storage.dmi'
+ icon = 'icons/obj/items/storage/bags.dmi'
icon_state = "evidenceobj"
item_state = ""
w_class = SIZE_SMALL
diff --git a/code/game/objects/items/props/helmetgarb.dm b/code/game/objects/items/props/helmetgarb.dm
index 5b9b81804311..9da509d16c5a 100644
--- a/code/game/objects/items/props/helmetgarb.dm
+++ b/code/game/objects/items/props/helmetgarb.dm
@@ -176,12 +176,12 @@
if(src != user.get_inactive_hand())
to_chat(user, SPAN_WARNING("You need to hold \the [src] in hand in order to repair them."))
return
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED)) // level 2 is enough to repair damaged NVG
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_NOVICE)) // level 2 is enough to repair damaged NVG
to_chat(user, SPAN_WARNING("You are not trained to repair electronics..."))
return
if(shape == NVG_SHAPE_BROKEN)
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI)) // level 3 is needed to repair broken NVG
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED)) // level 3 is needed to repair broken NVG
to_chat(user, SPAN_WARNING("Repair of this complexity is too difficult for you, find someone more trained."))
return
diff --git a/code/game/objects/items/reagent_containers/food/snacks/grown.dm b/code/game/objects/items/reagent_containers/food/snacks/grown.dm
index 55ed8c8d34f0..7f05128c7e1b 100644
--- a/code/game/objects/items/reagent_containers/food/snacks/grown.dm
+++ b/code/game/objects/items/reagent_containers/food/snacks/grown.dm
@@ -584,19 +584,14 @@
src.visible_message(SPAN_NOTICE("The [src.name] has been squashed."),SPAN_MODERATE("You hear a smack."))
qdel(src)
return
- for(var/turf/T in orange(M,outer_teleport_radius))
- if(T in orange(M,inner_teleport_radius)) continue
+ for(var/turf/T as anything in (RANGE_TURFS(outer_teleport_radius, M) - RANGE_TURFS(inner_teleport_radius, M)))
if(istype(T,/turf/open/space)) continue
if(T.density) continue
if(T.x>world.maxx-outer_teleport_radius || T.xworld.maxy-outer_teleport_radius || T.y 2 && user != loc) //we have a distance check with this
- return SPAN_WARNING("It's too far away for you to see what's in it!")
- if(!length(reagents.reagent_list))
- reagent_desc += "nothing."
- else
- reagent_desc += "[reagents.total_volume] units of liquid."
- return SPAN_INFO("[reagent_desc]")
- else //when wearing science goggles, you can see what's in something from any range
- if(!length(reagents.reagent_list))
- reagent_desc += "nothing."
- else
- for(var/datum/reagent/current_reagent as anything in reagents.reagent_list)
- reagent_desc += "[round(current_reagent.volume, 0.01)] units of [current_reagent.name]. "
- return SPAN_INFO("[reagent_desc]")
-
-/obj/item/reagent_container/verb/set_APTFT() //set amount_per_transfer_from_this
- set name = "Set transfer amount"
- set category = "Object"
- set src in usr
- if(!ishuman(usr))
+ if(!reagents)
return
- var/mob/living/carbon/human/user = usr
- var/obj/item/reagent_container/R = user.get_active_hand()
- if(!istype(R))
+ if(isxeno(user))
return
- var/N = tgui_input_list(usr, "Amount per transfer from this:","[R]", possible_transfer_amounts)
- if (N)
- R.amount_per_transfer_from_this = N
-
-/obj/item/reagent_container/Destroy()
- possible_transfer_amounts = null
- return ..()
-
-/*
-// Used on examine for properly skilled people to see contents.
-// this is separate from show_reagent_info, as that proc is intended for use with science goggles
-// this proc is general-purpose and primarily for medical items that you shouldn't need scigoggles to scan - ie pills, syringes, etc.
-*/
+ var/reagent_desc = "[src] contains: "
+
+ if(user.can_see_reagents())
+ reagent_desc += get_reagent_list_text()
+ return SPAN_INFO(reagent_desc)
+
+ if(!transparent)
+ return
+ if(user != loc && !in_range(src, user))
+ return SPAN_WARNING("[src] is too far away for you to see what's in it!")
+
+ if(!LAZYLEN(reagents.reagent_list))
+ reagent_desc += "Nothing"
+ return SPAN_INFO(reagent_desc)
+
+ reagent_desc += "[reagents.total_volume] units of liquid"
+ return SPAN_INFO(reagent_desc)
+
+// this proc is general-purpose and primarily for medical items that you shouldn't need scigoggles to scan
+/// Shows the reagent amount if the examining user is sufficiently skilled
/obj/item/reagent_container/proc/display_contents(mob/user)
if(isxeno(user))
return
- if(skillcheck(user, SKILL_MEDICAL, SKILL_MEDICAL_TRAINED))
- return "[src] contains: [get_reagent_list_text()]."//this the pill
- else
+
+ if(!skillcheck(user, SKILL_MEDICAL, SKILL_MEDICAL_TRAINED))
return "You don't know what's in it."
-//returns a text listing the reagents (and their volume) in the atom. Used by Attack logs for reagents in pills
+ return "[src] contains: [get_reagent_list_text()]."
+
+/// Returns a string listing all reagents (and their volume) in the container
/obj/item/reagent_container/proc/get_reagent_list_text()
- if(reagents && LAZYLEN(reagents.reagent_list))
- var/datum/reagent/R = reagents.reagent_list[1]
- . = "[R.name]([R.volume]u)"
- if(length(reagents.reagent_list) < 2) return
- for (var/i in 2 to length(reagents.reagent_list))
- R = reagents.reagent_list[i]
- if(!R) continue
- . += "; [R.name]([R.volume]u)"
- else
- . = "No reagents"
+ if(!reagents || !LAZYLEN(reagents.reagent_list))
+ return "No reagents"
+
+ var/total_reagent_desc = ""
+ for(var/datum/reagent/current_reagent as anything in reagents.reagent_list)
+ if(total_reagent_desc != "")
+ total_reagent_desc += ", "
+ total_reagent_desc += "[current_reagent.name] ([current_reagent.volume]u)"
+ return total_reagent_desc
/datum/action/item_action/reagent_container/set_transfer_amount
+ name = "Set Transfer Amount"
+ /// The container that transfer amount will be set on
+ var/obj/item/reagent_container/container
+
+/datum/action/item_action/reagent_container/set_transfer_amount/Destroy()
+ container = null
+ . = ..()
/datum/action/item_action/reagent_container/set_transfer_amount/New(mob/living/user, obj/item/holder)
..()
- name = "Set Transfer Amount"
button.name = name
button.overlays.Cut()
- var/image/IMG = image(holder_item.icon, button, holder_item.icon_state)
- button.overlays += IMG
+ var/image/button_overlay = image(holder_item.icon, button, holder_item.icon_state)
+ button.overlays += button_overlay
+ container = holder_item
/datum/action/item_action/reagent_container/set_transfer_amount/action_activate()
. = ..()
- var/obj/item/reagent_container/cont = holder_item
- cont.set_APTFT()
+ var/new_reagent_amount = tgui_input_list(owner, "Amount per transfer from this:","[container]", container.possible_transfer_amounts)
+ if(!new_reagent_amount)
+ return
+ to_chat(owner, SPAN_NOTICE("You change [container]'s reagent transfer amount to [new_reagent_amount]."))
+ container.amount_per_transfer_from_this = new_reagent_amount
diff --git a/code/game/objects/items/reagent_containers/spray.dm b/code/game/objects/items/reagent_containers/spray.dm
index 138e6ad01a3d..46328a160ba0 100644
--- a/code/game/objects/items/reagent_containers/spray.dm
+++ b/code/game/objects/items/reagent_containers/spray.dm
@@ -15,18 +15,19 @@
possible_transfer_amounts = list(5,10) //Set to null instead of list, if there is only one.
matter = list("plastic" = 500)
transparent = TRUE
+ volume = 250
+ has_set_transfer_action = FALSE
+ ///How many tiles the spray will move
var/spray_size = 3
+ /// The spray_size based on the transfer amount
var/list/spray_sizes = list(1,3)
+ /// Whether you can spray the bottle
var/safety = FALSE
- volume = 250
+ /// The world.time it was last used
var/last_use = 1
+ /// The delay between uses
var/use_delay = 0.5 SECONDS
-
-/obj/item/reagent_container/spray/Initialize()
- . = ..()
- verbs -= /obj/item/reagent_container/verb/set_APTFT
-
/obj/item/reagent_container/spray/afterattack(atom/A, mob/user, proximity)
//this is what you get for using afterattack() TODO: make is so this is only called if attackby() returns 0 or something
if(isstorage(A) || istype(A, /obj/structure/surface/table) || istype(A, /obj/structure/surface/rack) || istype(A, /obj/structure/closet) \
diff --git a/code/game/objects/items/stacks/flags.dm b/code/game/objects/items/stacks/flags.dm
index 14833812b06c..4dc2e6dbebf3 100644
--- a/code/game/objects/items/stacks/flags.dm
+++ b/code/game/objects/items/stacks/flags.dm
@@ -281,3 +281,23 @@
desc = "The flag of the United Americas. Semper fi."
icon_state = "flag_ua_planted"
flag_type = /obj/item/flag/plantable/ua
+
+// UNION OF PROGRESSIVE PEOPLES FLAG //
+//////////////////////////
+
+/obj/item/flag/plantable/upp
+ name = "\improper Union of Progressive Peoples flag"
+ desc = "The flag of the Union of Progressive Peoples. This one looks ready to be planted into the ground."
+ icon = 'icons/obj/structures/plantable_flag.dmi'
+ icon_state = "flag_upp"
+ flag_type = /obj/structure/flag/plantable/upp
+ faction = FACTION_UPP
+ play_warcry = TRUE
+ warcry_sound = 'sound/effects/flag_upp_warcry.ogg'
+ warcry_extra_sound = 'sound/effects/flag_upp_warcry_extra.ogg'
+
+/obj/structure/flag/plantable/upp
+ name = "\improper Union of Progressive Peoples flag"
+ desc = "The flag of the Union of Progressive Peoples. Unity through Strength, Freedom through Unity."
+ icon_state = "flag_upp_planted"
+ flag_type = /obj/item/flag/plantable/upp
diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm
index f579917fed49..b2a23549c65f 100644
--- a/code/game/objects/items/stacks/sheets/sheet_types.dm
+++ b/code/game/objects/items/stacks/sheets/sheet_types.dm
@@ -96,7 +96,8 @@ GLOBAL_LIST_INIT_TYPED(metal_recipes, /datum/stack_recipe, list ( \
* Plasteel
*/
GLOBAL_LIST_INIT_TYPED(plasteel_recipes, /datum/stack_recipe, list ( \
- new/datum/stack_recipe("plasteel barricade", /obj/structure/barricade/plasteel, 8, time = 4 SECONDS, one_per_turf = ONE_TYPE_PER_TURF, on_floor = 1, skill_req = SKILL_CONSTRUCTION, skill_lvl = SKILL_CONSTRUCTION_ENGI, min_time = 2 SECONDS),
+ new/datum/stack_recipe("folding plasteel barricade", /obj/structure/barricade/plasteel, 8, time = 4 SECONDS, one_per_turf = ONE_TYPE_PER_TURF, on_floor = 1, skill_req = SKILL_CONSTRUCTION, skill_lvl = SKILL_CONSTRUCTION_ENGI, min_time = 2 SECONDS),
+ new/datum/stack_recipe("plasteel barricade", /obj/structure/barricade/metal/plasteel, 6, time = 8 SECONDS, one_per_turf = ONE_TYPE_PER_BORDER, on_floor = 1, skill_req = SKILL_CONSTRUCTION, skill_lvl = SKILL_CONSTRUCTION_ENGI, min_time = 2 SECONDS),
null, \
new/datum/stack_recipe("reinforced window frame", /obj/structure/window_frame/colony/reinforced, 5, time = 40, one_per_turf = ONE_TYPE_PER_TURF, on_floor = 1, skill_req = SKILL_CONSTRUCTION, skill_lvl = SKILL_CONSTRUCTION_ENGI),
null, \
@@ -311,6 +312,7 @@ GLOBAL_LIST_INIT_TYPED(cardboard_recipes, /datum/stack_recipe, list ( \
new/datum/stack_recipe("empty box of M94 Marking Flare Packs", /obj/item/ammo_box/magazine/misc/flares/empty), \
new/datum/stack_recipe("empty box of M89 Signal Flare Packs", /obj/item/ammo_box/magazine/misc/flares/signal/empty), \
new/datum/stack_recipe("empty box of flashlights", /obj/item/ammo_box/magazine/misc/flashlight/empty), \
+ new/datum/stack_recipe("empty box of combat flashlights", /obj/item/ammo_box/magazine/misc/flashlight/combat/empty), \
new/datum/stack_recipe("empty box of High-Capacity Power Cells", /obj/item/ammo_box/magazine/misc/power_cell/empty), \
null, \
new/datum/stack_recipe("empty magazine box (Desert Eagle)", /obj/item/ammo_box/magazine/deagle/empty), \
diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm
index 5f72e4a75567..3856aebd7971 100644
--- a/code/game/objects/items/stacks/stack.dm
+++ b/code/game/objects/items/stacks/stack.dm
@@ -197,6 +197,12 @@ Also change the icon to reflect the amount of sheets, if possible.*/
to_chat(usr, SPAN_WARNING("The [R.title] cannot be constructed on a tunnel!"))
return
+ if(R.one_per_turf != ONE_TYPE_PER_BORDER) //all barricade-esque structures utilize this define and have their own check for object density. checking twice is unneeded.
+ for(var/obj/object in usr.loc)
+ if(object.density || istype(object, /obj/structure/machinery/door))
+ to_chat(usr, SPAN_WARNING("[object] is blocking you from constructing \the [R.title]!"))
+ return
+
if((R.flags & RESULT_REQUIRES_SNOW) && !(istype(usr.loc, /turf/open/snow) || istype(usr.loc, /turf/open/auto_turf/snow)))
to_chat(usr, SPAN_WARNING("The [R.title] must be built on snow!"))
return
diff --git a/code/game/objects/items/storage/backpack.dm b/code/game/objects/items/storage/backpack.dm
index 06636d2c3f76..9ed53236789d 100644
--- a/code/game/objects/items/storage/backpack.dm
+++ b/code/game/objects/items/storage/backpack.dm
@@ -15,7 +15,7 @@
cant_hold = list(/obj/item/storage/firstaid, /obj/item/storage/toolkit)
can_hold_skill = list(
/obj/item/storage/firstaid = list(SKILL_MEDICAL, SKILL_MEDICAL_MEDIC),
- /obj/item/storage/toolkit = list(SKILL_ENGINEER, SKILL_ENGINEER_ENGI),
+ /obj/item/storage/toolkit = list(SKILL_ENGINEER, SKILL_ENGINEER_TRAINED),
)
drop_sound = "armorequip"
var/worn_accessible = FALSE //whether you can access its content while worn on the back
diff --git a/code/game/objects/items/storage/bags.dm b/code/game/objects/items/storage/bags.dm
index 19e012ff1c14..256210b69f4c 100644
--- a/code/game/objects/items/storage/bags.dm
+++ b/code/game/objects/items/storage/bags.dm
@@ -93,7 +93,7 @@
// -----------------------------
/obj/item/storage/bag/plants
- icon = 'icons/obj/items/storage.dmi'
+ icon = 'icons/obj/items/storage/bags.dmi'
icon_state = "plantbag"
name = "Plant Bag"
storage_slots = 50; //the number of plant pieces it can carry.
@@ -253,7 +253,7 @@
// -----------------------------
/obj/item/storage/bag/cash
- icon = 'icons/obj/items/storage.dmi'
+ icon = 'icons/obj/items/storage/bags.dmi'
icon_state = "cashbag"
name = "Cash bag"
desc = "A bag for carrying lots of cash. It's got a big dollar sign printed on the front."
diff --git a/code/game/objects/items/storage/belt.dm b/code/game/objects/items/storage/belt.dm
index d16602e04aaa..139d90ff33ce 100644
--- a/code/game/objects/items/storage/belt.dm
+++ b/code/game/objects/items/storage/belt.dm
@@ -117,7 +117,6 @@
)
storage_slots = 10
-
/obj/item/storage/belt/utility/full/fill_preset_inventory()
new /obj/item/tool/screwdriver(src)
new /obj/item/tool/wrench(src)
@@ -136,6 +135,50 @@
new /obj/item/tool/wirecutters(src)
new /obj/item/device/t_scanner(src)
+/obj/item/storage/belt/utility/construction
+ name = "\improper M277 pattern construction rig"
+ desc = "The M277 is a common rig used by Combat Technicians to carry around materials and other supplies. It consists of a modular belt with various clips. This version sarafices storage space for specialized material loading clips."
+ storage_slots = 6
+ can_hold = list(
+ /obj/item/tool/crowbar,
+ /obj/item/tool/screwdriver,
+ /obj/item/tool/weldingtool,
+ /obj/item/tool/wirecutters,
+ /obj/item/tool/wrench,
+ /obj/item/tool/extinguisher/mini,
+ /obj/item/tool/shovel/etool,
+ /obj/item/stack/cable_coil,
+ /obj/item/weapon/gun/smg/nailgun/compact,
+ /obj/item/cell,
+ /obj/item/circuitboard,
+ /obj/item/stock_parts,
+ /obj/item/device/demo_scanner,
+ /obj/item/device/reagent_scanner,
+ /obj/item/device/assembly,
+ /obj/item/device/multitool,
+ /obj/item/device/flashlight,
+ /obj/item/device/t_scanner,
+ /obj/item/device/analyzer,
+ /obj/item/explosive/plastic,
+ /obj/item/device/lightreplacer,
+ /obj/item/stack/sheet,
+ /obj/item/stack/sandbags_empty,
+ /obj/item/stack/sandbags,
+ /obj/item/stack/barbed_wire,
+ /obj/item/defenses/handheld/sentry,
+ /obj/item/stack/rods,
+ /obj/item/stack/tile,
+ )
+
+ bypass_w_limit = list(
+ /obj/item/tool/shovel/etool,
+ /obj/item/device/lightreplacer,
+ /obj/item/stack/sheet,
+ /obj/item/stack/sandbags_empty,
+ /obj/item/stack/sandbags,
+ /obj/item/defenses/handheld/sentry,
+ )
+
/obj/item/storage/belt/utility/full/pred
name = "\improper Yautja toolbelt"
desc = "A modular belt with various clips. This version lacks any hunting functionality, and is commonly used by engineers to transport important tools."
@@ -277,6 +320,29 @@
new /obj/item/storage/pill_bottle/imidazoline(src)
new /obj/item/storage/pill_bottle/alkysine(src)
+/obj/item/storage/belt/medical/lifesaver/full/forecon/fill_preset_inventory()
+ new /obj/item/storage/pill_bottle/bicaridine(src)
+ new /obj/item/storage/pill_bottle/bicaridine(src)
+ new /obj/item/storage/pill_bottle/kelotane(src)
+ new /obj/item/storage/pill_bottle/kelotane(src)
+ new /obj/item/storage/pill_bottle/tramadol(src)
+ new /obj/item/storage/pill_bottle/tramadol(src)
+ new /obj/item/storage/pill_bottle/antitox(src)
+ new /obj/item/storage/pill_bottle/alkysine(src)
+ new /obj/item/storage/pill_bottle/imidazoline(src)
+ new /obj/item/stack/medical/advanced/bruise_pack(src)
+ new /obj/item/stack/medical/advanced/bruise_pack(src)
+ new /obj/item/stack/medical/advanced/bruise_pack(src)
+ new /obj/item/stack/medical/advanced/ointment(src)
+ new /obj/item/stack/medical/advanced/ointment(src)
+ new /obj/item/stack/medical/advanced/ointment(src)
+ new /obj/item/stack/medical/splint(src)
+ new /obj/item/stack/medical/splint(src)
+ new /obj/item/stack/medical/splint(src)
+ new /obj/item/reagent_container/hypospray/autoinjector/dexalinp(src)
+ new /obj/item/reagent_container/hypospray/autoinjector/oxycodone(src)
+ new /obj/item/device/healthanalyzer(src)
+
/obj/item/storage/belt/medical/lifesaver/upp
name = "\improper Type 41 pattern lifesaver bag"
desc = "The Type 41 load rig is the standard load-bearing equipment of the UPP military. This configuration mounts a duffel bag filled with a range of injectors and light medical supplies, and is common among medics."
@@ -1296,12 +1362,12 @@
#undef MAXIMUM_MAGAZINE_COUNT
/obj/item/storage/belt/gun/m44
- name = "\improper M276 pattern M44 holster rig"
- desc = "The M276 is the standard load-bearing equipment of the USCM. It consists of a modular belt with various clips. This version is for the M44 magnum revolver, along with six small pouches for speedloaders. It smells faintly of hay."
+ name = "\improper M276 pattern general revoler holster rig"
+ desc = "The M276 is the standard load-bearing equipment of the USCM. It consists of a modular belt with various clips. This version is universal and adjustable for different revolvers, along with six small pouches for speedloaders. It smells faintly of hay."
icon_state = "m44r_holster"
storage_slots = 7
can_hold = list(
- /obj/item/weapon/gun/revolver/m44,
+ /obj/item/weapon/gun/revolver,
/obj/item/ammo_magazine/revolver,
)
has_gamemode_skin = TRUE
@@ -1413,7 +1479,7 @@
desc = "The M276 is the standard load-bearing equipment of the USCM. It consists of a modular belt with various clips. This version is for the powerful Mateba magnum revolver, along with five small pouches for speedloaders. This one is aging poorly, and seems to be surplus equipment. It's stamped '3rd 'Dust Raiders' Battalion'."
icon_state = "s_cmateba_holster"
item_state = "s_marinebelt"
- storage_slots = 6
+ storage_slots = 7
max_w_class = SIZE_MEDIUM
can_hold = list(
/obj/item/weapon/gun/revolver/mateba,
@@ -1697,7 +1763,7 @@
/obj/item/device/flashlight/flare,
/obj/item/weapon/gun/flare,
/obj/item/weapon/gun/pistol,
- /obj/item/weapon/gun/revolver/m44,
+ /obj/item/weapon/gun/revolver,
/obj/item/ammo_magazine/revolver,
/obj/item/ammo_magazine/pistol,
/obj/item/ammo_magazine/smartgun,
@@ -1717,8 +1783,7 @@
/obj/item/device/flashlight/flare,
/obj/item/weapon/gun/flare,
/obj/item/weapon/gun/pistol,
- /obj/item/weapon/gun/revolver/m44,
- /obj/item/weapon/gun/revolver/mateba,
+ /obj/item/weapon/gun/revolver,
/obj/item/ammo_magazine/revolver,
/obj/item/ammo_magazine/revolver/mateba,
/obj/item/ammo_magazine/pistol,
@@ -1740,8 +1805,7 @@
/obj/item/device/flashlight/flare,
/obj/item/weapon/gun/flare,
/obj/item/weapon/gun/pistol,
- /obj/item/weapon/gun/revolver/m44,
- /obj/item/weapon/gun/revolver/mateba,
+ /obj/item/weapon/gun/revolver,
/obj/item/ammo_magazine/revolver,
/obj/item/ammo_magazine/revolver/mateba,
/obj/item/ammo_magazine/pistol,
@@ -1763,8 +1827,7 @@
/obj/item/device/flashlight/flare,
/obj/item/weapon/gun/flare,
/obj/item/weapon/gun/pistol,
- /obj/item/weapon/gun/revolver/m44,
- /obj/item/weapon/gun/revolver/mateba,
+ /obj/item/weapon/gun/revolver,
/obj/item/ammo_magazine/revolver,
/obj/item/ammo_magazine/revolver/mateba,
/obj/item/ammo_magazine/pistol,
diff --git a/code/game/objects/items/storage/bible.dm b/code/game/objects/items/storage/bible.dm
index 4b98d45b5d32..dd4a9ea9796d 100644
--- a/code/game/objects/items/storage/bible.dm
+++ b/code/game/objects/items/storage/bible.dm
@@ -1,6 +1,7 @@
/obj/item/storage/bible
name = "bible"
desc = "Apply to head repeatedly."
+ icon = 'icons/obj/items/books.dmi'
icon_state ="bible"
throw_speed = SPEED_FAST
throw_range = 5
diff --git a/code/game/objects/items/storage/boxes.dm b/code/game/objects/items/storage/boxes.dm
index ab221b89bfe2..0647d214be97 100644
--- a/code/game/objects/items/storage/boxes.dm
+++ b/code/game/objects/items/storage/boxes.dm
@@ -27,6 +27,7 @@
name = "box"
desc = "It's just an ordinary box."
icon_state = "box"
+ icon = 'icons/obj/items/storage/boxes.dmi'
item_state = "syringe_kit"
foldable = TRUE
storage_slots = null
@@ -34,6 +35,23 @@
w_class = SIZE_LARGE //Changed becuase of in-game abuse
storage_flags = STORAGE_FLAGS_BOX
+/obj/item/storage/box/pride
+ name = "box of prideful crayons"
+ desc = "A box of every flavor of pride."
+ storage_slots = 8
+ w_class = SIZE_SMALL
+ can_hold = list(/obj/item/toy/crayon/pride)
+
+/obj/item/storage/box/pride/fill_preset_inventory()
+ new /obj/item/toy/crayon/pride/gay(src)
+ new /obj/item/toy/crayon/pride/lesbian(src)
+ new /obj/item/toy/crayon/pride/bi(src)
+ new /obj/item/toy/crayon/pride/ace(src)
+ new /obj/item/toy/crayon/pride/pan(src)
+ new /obj/item/toy/crayon/pride/trans(src)
+ new /obj/item/toy/crayon/pride/enby(src)
+ new /obj/item/toy/crayon/pride/fluid(src)
+
/obj/item/storage/box/survival
w_class = SIZE_MEDIUM
@@ -133,6 +151,7 @@
/obj/item/storage/box/flashbangs
name = "box of flashbangs (WARNING)"
desc = "WARNING: These devices are extremely dangerous and can cause blindness or deafness in repeated use. "
+ icon = 'icons/obj/items/storage/packets.dmi'
icon_state = "flashbang"
can_hold = list(/obj/item/explosive/grenade/flashbang)
w_class = SIZE_MEDIUM
@@ -164,6 +183,7 @@
/obj/item/storage/box/emps
name = "box of emp grenades"
desc = "A box with 5 emp grenades."
+ icon = 'icons/obj/items/storage/packets.dmi'
icon_state = "emp"
/obj/item/storage/box/emps/fill_preset_inventory()
@@ -470,6 +490,7 @@
item_state = "zippo"
w_class = SIZE_TINY
flags_equip_slot = SLOT_WAIST
+ flags_obj = parent_type::flags_obj|OBJ_IS_HELMET_GARB
can_hold = list(/obj/item/tool/match)
/obj/item/storage/box/matches/fill_preset_inventory()
@@ -482,7 +503,7 @@
/obj/item/storage/box/lights
name = "box of replacement bulbs"
- icon = 'icons/obj/items/storage.dmi'
+ icon = 'icons/obj/items/storage/boxes.dmi'
icon_state = "light"
desc = "This box is shaped on the inside so that only light tubes and bulbs fit."
item_state = "syringe_kit"
@@ -530,6 +551,7 @@
/obj/item/storage/box/twobore
name = "box of 2 bore shells"
icon_state = "twobore"
+ icon = 'icons/obj/items/storage/kits.dmi'
desc = "A box filled with enormous slug shells, for hunting only the most dangerous game. 2 Bore."
storage_slots = 5
can_hold = list(/obj/item/ammo_magazine/handful/shotgun/twobore)
@@ -538,12 +560,31 @@
for(var/i in 1 to storage_slots)
new /obj/item/ammo_magazine/handful/shotgun/twobore(src)
+/obj/item/storage/box/stompers
+ name = "\improper Reebok shoe box"
+ desc = "A fancy shoe box with reflective surface and Weyland-Yutani logo on top, says 'Reebok Stompers' on the back."
+ icon_state = "stomper_box"
+ w_class = SIZE_MEDIUM
+ bypass_w_limit = /obj/item/clothing/shoes
+ max_storage_space = 3
+ can_hold = list(/obj/item/clothing/shoes)
+
+/obj/item/storage/box/stompers/fill_preset_inventory()
+ new /obj/item/clothing/shoes/stompers(src)
+
+/obj/item/storage/box/stompers/update_icon()
+ if(!length(contents))
+ icon_state = "stomper_box_e"
+ else
+ icon_state = "stomper_box"
+
////////// MARINES BOXES //////////////////////////
/obj/item/storage/box/explosive_mines
name = "\improper M20 mine box"
desc = "A secure box holding five M20 anti-personnel proximity mines."
+ icon = 'icons/obj/items/storage/packets.dmi'
icon_state = "minebox"
w_class = SIZE_MEDIUM
max_storage_space = 10
@@ -564,6 +605,7 @@
name = "\improper M94 marking flare pack"
desc = "A packet of eight M94 Marking Flares. Carried by USCM soldiers to light dark areas that cannot be reached with the usual TNR Shoulder Lamp."
icon_state = "m94"
+ icon = 'icons/obj/items/storage/packets.dmi'
w_class = SIZE_MEDIUM
storage_slots = 8
max_storage_space = 8
@@ -600,11 +642,14 @@
name = "\improper M40 HEDP grenade box"
desc = "A secure box holding 25 M40 High-Explosive Dual-Purpose grenades. High explosive, don't store near the flamer fuel."
icon_state = "nade_placeholder"
+ icon = 'icons/obj/items/storage/packets.dmi'
w_class = SIZE_LARGE
storage_slots = 25
max_storage_space = 50
can_hold = list(/obj/item/explosive/grenade/high_explosive)
var/base_icon
+ var/model_icon = "model_m40"
+ var/type_icon = "hedp"
var/grenade_type = /obj/item/explosive/grenade/high_explosive
has_gamemode_skin = TRUE
@@ -634,49 +679,61 @@
new grenade_type(src)
/obj/item/storage/box/nade_box/update_icon()
+ overlays.Cut()
if(!length(contents))
icon_state = "[base_icon]_e"
else
icon_state = base_icon
+ if(type_icon)
+ overlays += image(icon, type_icon)
+ if(model_icon)
+ overlays += image(icon, model_icon)
/obj/item/storage/box/nade_box/frag
name = "\improper M40 HEFA grenade box"
desc = "A secure box holding 25 M40 High-Explosive Fragmenting-Antipersonnel grenades. High explosive, don't store near the flamer fuel."
- icon_state = "frag_nade_placeholder"
- w_class = SIZE_LARGE
- storage_slots = 25
- max_storage_space = 50
+ type_icon = "hefa"
can_hold = list(/obj/item/explosive/grenade/high_explosive/frag)
grenade_type = /obj/item/explosive/grenade/high_explosive/frag
- has_gamemode_skin = FALSE
/obj/item/storage/box/nade_box/phophorus
- name = "\improper M40 HPDP grenade box"
- desc = "A secure box holding 25 M40 HPDP white phosphorus grenade. High explosive, don't store near the flamer fuel."
- icon_state = "phos_nade_placeholder"
- w_class = SIZE_LARGE
- storage_slots = 25
- max_storage_space = 50
+ name = "\improper M40 CCDP grenade box"
+ desc = "A secure box holding 25 M40 CCDP chemical compound grenade. High explosive, don't store near the flamer fuel."
+ type_icon = "ccdp"
can_hold = list(/obj/item/explosive/grenade/phosphorus)
grenade_type = /obj/item/explosive/grenade/phosphorus
- has_gamemode_skin = FALSE
+
+/obj/item/storage/box/nade_box/incen
+ name = "\improper M40 HIDP grenade box"
+ desc = "A secure box holding 25 M40 HIDP white incendiary grenades. Highly flammable, don't store near the flamer fuel."
+ type_icon = "hidp"
+ can_hold = list(/obj/item/explosive/grenade/incendiary)
+ grenade_type = /obj/item/explosive/grenade/incendiary
/obj/item/storage/box/nade_box/airburst
name = "\improper M74 AGM-F grenade box"
desc = "A secure box holding 25 M74 AGM Fragmentation grenades. Explosive, don't store near the flamer fuel."
- icon_state = "airburst_nade_placeholder"
- w_class = SIZE_LARGE
- storage_slots = 25
- max_storage_space = 50
+ model_icon = "model_m74"
+ type_icon = "agmf"
can_hold = list(/obj/item/explosive/grenade/high_explosive/airburst)
grenade_type = /obj/item/explosive/grenade/high_explosive/airburst
- has_gamemode_skin = FALSE
+
+/obj/item/storage/box/nade_box/airburstincen
+ name = "\improper M74 AGM-I grenade box"
+ desc = "A secure box holding 25 M74 AGM Incendiary grenades. Highly flammable, don't store near the flamer fuel."
+ model_icon = "model_m74"
+ type_icon = "agmi"
+ can_hold = list(/obj/item/explosive/grenade/incendiary/airburst)
+ grenade_type = /obj/item/explosive/grenade/incendiary/airburst
+
/obj/item/storage/box/nade_box/training
name = "\improper M07 training grenade box"
desc = "A secure box holding 25 M07 training grenades. Harmless and reusable."
icon_state = "train_nade_placeholder"
+ model_icon = "model_mo7"
+ type_icon = null
grenade_type = /obj/item/explosive/grenade/high_explosive/training
can_hold = list(/obj/item/explosive/grenade/high_explosive/training)
has_gamemode_skin = FALSE
@@ -685,6 +742,8 @@
name = "\improper M66 tear gas grenade box"
desc = "A secure box holding 25 M66 tear gas grenades. Used for riot control."
icon_state = "teargas_nade_placeholder"
+ model_icon = "model_m66"
+ type_icon = null
can_hold = list(/obj/item/explosive/grenade/custom/teargas)
grenade_type = /obj/item/explosive/grenade/custom/teargas
has_gamemode_skin = FALSE
@@ -740,6 +799,7 @@
name = "\improper USCM MRE"
desc = "A Meal, Ready-to-Eat. A single-meal combat ration designed to provide a soldier with enough nutrients for a day of strenuous work. Its expiration date is at least 20 years ahead of your combat life expectancy."
icon_state = "mealpack"
+ icon = 'icons/obj/items/storage/mre.dmi'
w_class = SIZE_SMALL
can_hold = list()
storage_slots = 7
diff --git a/code/game/objects/items/storage/briefcase.dm b/code/game/objects/items/storage/briefcase.dm
index 24b2e13b91db..b687f6c5b85d 100644
--- a/code/game/objects/items/storage/briefcase.dm
+++ b/code/game/objects/items/storage/briefcase.dm
@@ -1,6 +1,7 @@
/obj/item/storage/briefcase
name = "briefcase"
desc = "It's made of AUTHENTIC faux-leather and has a price-tag still attached. Its owner must be a real professional."
+ icon = 'icons/obj/items/storage/briefcases.dmi'
icon_state = "briefcase"
item_state = "briefcase"
flags_atom = FPRINT|CONDUCT
diff --git a/code/game/objects/items/storage/fancy.dm b/code/game/objects/items/storage/fancy.dm
index 5d7aecbc03db..79d38603dc7e 100644
--- a/code/game/objects/items/storage/fancy.dm
+++ b/code/game/objects/items/storage/fancy.dm
@@ -126,6 +126,7 @@
w_class = SIZE_TINY
throwforce = 2
flags_equip_slot = SLOT_WAIST
+ flags_obj = parent_type::flags_obj|OBJ_IS_HELMET_GARB
max_w_class = SIZE_TINY
storage_slots = 20
can_hold = list(
diff --git a/code/game/objects/items/storage/firstaid.dm b/code/game/objects/items/storage/firstaid.dm
index 52fd50e9b022..d37bddf283db 100644
--- a/code/game/objects/items/storage/firstaid.dm
+++ b/code/game/objects/items/storage/firstaid.dm
@@ -9,6 +9,7 @@
/obj/item/storage/firstaid
name = "first-aid kit"
desc = "It's an emergency medical kit for those serious boo-boos. With medical training you can fit this in a backpack."
+ icon = 'icons/obj/items/storage/medical.dmi'
icon_state = "firstaid"
throw_speed = SPEED_FAST
throw_range = 8
@@ -254,6 +255,7 @@
/obj/item/storage/syringe_case
name = "syringe case"
desc = "It's a medical case for storing syringes and bottles."
+ icon = 'icons/obj/items/storage/medical.dmi'
icon_state = "syringe_case"
throw_speed = SPEED_FAST
throw_range = 8
@@ -308,7 +310,7 @@
\nStep three: Draw back the skin with the retracter.\
\nStep four: Patch the damaged vein with a surgical line.\
\nStep five: Close the incision with a surgical line."
-
+ icon = 'icons/obj/items/storage/medical.dmi'
icon_state = "surgical_case"
throw_speed = SPEED_FAST
throw_range = 8
diff --git a/code/game/objects/items/storage/large_holster.dm b/code/game/objects/items/storage/large_holster.dm
index d8e1ee51d0d8..7a073042e122 100644
--- a/code/game/objects/items/storage/large_holster.dm
+++ b/code/game/objects/items/storage/large_holster.dm
@@ -3,7 +3,7 @@
/obj/item/storage/large_holster
name = "\improper Rifle Holster"
desc = "holster"
- icon = 'icons/obj/items/storage.dmi'
+ icon = 'icons/obj/items/storage/holsters.dmi'
icon_state = "m37_holster"
w_class = SIZE_LARGE
flags_equip_slot = SLOT_BACK
@@ -91,6 +91,28 @@
/obj/item/storage/large_holster/machete/arnold/full/fill_preset_inventory()
new /obj/item/weapon/sword/machete/arnold(src)
+/obj/item/storage/large_holster/machete/smartgunner
+ name = "\improper M56 harness machete scabbard"
+ desc = "A scabbard that connects to the M56 combat harness for carrying a M2132 machete."
+ icon_state = "smartgun_machete_holster"
+ flags_equip_slot = SLOT_BACK
+ flags_item = SMARTGUNNER_BACKPACK_OVERRIDE
+
+/obj/item/storage/large_holster/machete/smartgunner/mob_can_equip(mob/equipping_mob, slot, disable_warning)
+ . = ..()
+
+ var/mob/living/carbon/human/user = equipping_mob
+ if(!ishuman(user))
+ return FALSE
+
+ if(!user.wear_suit || !(user.wear_suit.flags_inventory & SMARTGUN_HARNESS))
+ if(!disable_warning)
+ to_chat(equipping_mob, SPAN_WARNING("You can't equip [src] without a harness."))
+ return FALSE
+
+/obj/item/storage/large_holster/machete/smartgunner/full/fill_preset_inventory()
+ new /obj/item/weapon/sword/machete(src)
+
/obj/item/storage/large_holster/katana
name = "\improper katana scabbard"
desc = "A large, vibrantly colored katana scabbard used to carry a Japanese sword. It can be strapped to the back or worn at the belt. Because of the sturdy wood casing of the scabbard, it makes an okay defensive weapon in a pinch."
diff --git a/code/game/objects/items/storage/lockbox.dm b/code/game/objects/items/storage/lockbox.dm
index afeaff89ae07..8c092bde9219 100644
--- a/code/game/objects/items/storage/lockbox.dm
+++ b/code/game/objects/items/storage/lockbox.dm
@@ -3,6 +3,7 @@
/obj/item/storage/lockbox
name = "lockbox"
desc = "A locked box."
+ icon = 'icons/obj/items/storage/briefcases.dmi'
icon_state = "lockbox+l"
item_state = "syringe_kit"
w_class = SIZE_LARGE
diff --git a/code/game/objects/items/storage/misc.dm b/code/game/objects/items/storage/misc.dm
index c3fd647853d6..ab0e97393a33 100644
--- a/code/game/objects/items/storage/misc.dm
+++ b/code/game/objects/items/storage/misc.dm
@@ -55,7 +55,7 @@
*/
/obj/item/storage/mateba_case
- icon = 'icons/obj/items/storage.dmi'
+ icon = 'icons/obj/items/storage/kits.dmi'
icon_state = "matebacase"
name = "mateba customization kit case"
desc = "A wooden case used for storing the tools and parts needed to customize a Mateba revolver. Comes with three barrel lengths and the necessary key to swap them out."
@@ -114,7 +114,7 @@
/obj/item/storage/box/clf
name = "D18-storing box"
desc = "A fairly decorated and ceremonial box containing a CLF D18 and a single additional magazine for it. I guess those CLF folk really care about their craftsmanship and prose rather than practicality, eh?"
- icon = 'icons/obj/items/storage.dmi'
+ icon = 'icons/obj/items/storage/kits.dmi'
icon_state = "m43case"
w_class = SIZE_SMALL
max_w_class = SIZE_TINY
@@ -128,7 +128,7 @@
/obj/item/storage/box/upp //war trophy luger
name = "Type 73 storing case"
desc = "A small case containing the once-standard sidearm of the UPP, the Type 73, and two additional magazines. The contained sidearm is probably looted off a dead officer or from a captured stockpile, either way this thing is worth a pretty penny."
- icon = 'icons/obj/items/storage.dmi'
+ icon = 'icons/obj/items/storage/kits.dmi'
icon_state = "matebacase"
w_class = SIZE_MEDIUM
max_w_class = SIZE_MEDIUM
@@ -143,6 +143,7 @@
/obj/item/storage/box/co2_knife
name = "M8 cartridge bayonet packaging"
desc = "Contains one M8 Cartridge Bayonet and two sister CO2 cartridges. Thanks for being a dedicated Boots magazine subscriber!"
+ icon = 'icons/obj/items/storage/kits.dmi'
icon_state = "co2_box"
foldable = TRUE
storage_slots = 3
diff --git a/code/game/objects/items/storage/pouch.dm b/code/game/objects/items/storage/pouch.dm
index 63516ac20aa0..5993aa6b6f67 100644
--- a/code/game/objects/items/storage/pouch.dm
+++ b/code/game/objects/items/storage/pouch.dm
@@ -802,6 +802,28 @@
for(var/i = 1 to storage_slots)
new /obj/item/reagent_container/syringe(src)
+/obj/item/storage/pouch/engikit
+ name = "engineer kit pouch"
+ storage_flags = STORAGE_FLAGS_POUCH
+ icon_state = "construction"
+ desc = "It's specifically made to hold engineering items. Requires engineering skills to use effectively."
+ storage_slots = 6
+ can_hold_skill = list(
+ /obj/item/circuitboard = list(SKILL_ENGINEER, SKILL_ENGINEER_TRAINED),
+ /obj/item/device/flashlight = list(SKILL_ENGINEER, SKILL_ENGINEER_TRAINED),
+ /obj/item/clothing/glasses/welding = list(SKILL_ENGINEER, SKILL_ENGINEER_TRAINED),
+ /obj/item/device/analyzer = list(SKILL_ENGINEER, SKILL_ENGINEER_TRAINED),
+ /obj/item/device/demo_scanner = list(SKILL_ENGINEER, SKILL_ENGINEER_TRAINED),
+ /obj/item/device/reagent_scanner = list(SKILL_ENGINEER, SKILL_ENGINEER_TRAINED),
+ /obj/item/device/t_scanner = list(SKILL_ENGINEER, SKILL_ENGINEER_TRAINED),
+ /obj/item/stack/cable_coil = list(SKILL_ENGINEER, SKILL_ENGINEER_TRAINED),
+ /obj/item/cell = list(SKILL_ENGINEER, SKILL_ENGINEER_TRAINED),
+ /obj/item/device/assembly = list(SKILL_ENGINEER, SKILL_ENGINEER_TRAINED),
+ /obj/item/stock_parts = list(SKILL_ENGINEER, SKILL_ENGINEER_TRAINED),
+ /obj/item/explosive/plastic = list(SKILL_ENGINEER, SKILL_ENGINEER_TRAINED),
+ )
+ can_hold_skill_only = TRUE
+
/obj/item/storage/pouch/medkit
name = "medical kit pouch"
storage_flags = STORAGE_FLAGS_POUCH
@@ -897,7 +919,7 @@
. = ..()
fill_with("oxycodone")
-/obj/item/storage/pouch/pressurized_reagent_canister/revival/Initialize()
+/obj/item/storage/pouch/pressurized_reagent_canister/revival_tricord/Initialize()
. = ..()
//we don't call fill_with because of the complex mix of chemicals we have
inner.reagents.add_reagent("adrenaline", inner.volume/3)
@@ -912,6 +934,21 @@
A.update_icon()
update_icon()
+/obj/item/storage/pouch/pressurized_reagent_canister/revival_peri/Initialize()
+ . = ..()
+ //we don't call fill_with because of the complex mix of chemicals we have
+ inner.reagents.add_reagent("adrenaline", inner.volume/3)
+ inner.reagents.add_reagent("inaprovaline", inner.volume/3)
+ inner.reagents.add_reagent("peridaxon", inner.volume/3)
+ if(length(contents) > 0)
+ var/obj/item/reagent_container/hypospray/autoinjector/empty/medic/A = contents[1]
+ A.reagents.add_reagent("adrenaline", A.volume/3)
+ A.reagents.add_reagent("inaprovaline", A.volume/3)
+ A.reagents.add_reagent("peridaxon", A.volume/3)
+ A.update_uses_left()
+ A.update_icon()
+ update_icon()
+
/obj/item/storage/pouch/pressurized_reagent_canister/tricordrazine/Initialize()
. = ..()
fill_with("tricordrazine")
@@ -1404,7 +1441,7 @@
/obj/item/storage/pouch/machete
name = "\improper H6B pattern M2132 machete scabbard"
desc = "A large leather scabbard used to carry a M2132 machete. It can be strapped to the pouch slot."
- icon = 'icons/obj/items/storage.dmi'
+ icon = 'icons/obj/items/storage/holsters.dmi'
icon_state = "macheteB_holster"
item_state = "machete_holster"
max_w_class = SIZE_LARGE
diff --git a/code/game/objects/items/storage/secure.dm b/code/game/objects/items/storage/secure.dm
index d79fe712bea4..835f0d7cc4f9 100644
--- a/code/game/objects/items/storage/secure.dm
+++ b/code/game/objects/items/storage/secure.dm
@@ -97,7 +97,7 @@
else if ((code == l_code) && (l_set == 1))
locked = 0
overlays = null
- overlays += image('icons/obj/items/storage.dmi', icon_opened)
+ overlays += image('icons/obj/items/storage/briefcases.dmi', icon_opened)
code = null
else
code = "ERROR"
@@ -123,7 +123,7 @@
// -----------------------------
/obj/item/storage/secure/briefcase
name = "secure briefcase"
- icon = 'icons/obj/items/storage.dmi'
+ icon = 'icons/obj/items/storage/briefcases.dmi'
icon_state = "secure"
item_state = "sec-case"
desc = "A large briefcase with a digital locking system."
@@ -155,8 +155,8 @@
/obj/item/storage/secure/safe
name = "secure safe"
- icon = 'icons/obj/items/storage.dmi'
- icon_state = "safe"
+ icon = 'icons/obj/structures/structures.dmi'
+ icon_state = "wallsafe"
icon_opened = "safe0"
icon_locking = "safeb"
icon_sparking = "safespark"
diff --git a/code/game/objects/items/storage/storage.dm b/code/game/objects/items/storage/storage.dm
index 047163713e80..c04de364baf7 100644
--- a/code/game/objects/items/storage/storage.dm
+++ b/code/game/objects/items/storage/storage.dm
@@ -7,7 +7,6 @@
/obj/item/storage
name = "storage"
- icon = 'icons/obj/items/storage.dmi'
w_class = SIZE_MEDIUM
var/list/can_hold = new/list() //List of objects which this item can store (if set, it can't store anything else)
var/list/cant_hold = new/list() //List of objects which this item can't store (in effect only if can_hold isn't set)
diff --git a/code/game/objects/items/storage/surgical_tray.dm b/code/game/objects/items/storage/surgical_tray.dm
index 61f56c35b555..216636951527 100644
--- a/code/game/objects/items/storage/surgical_tray.dm
+++ b/code/game/objects/items/storage/surgical_tray.dm
@@ -1,6 +1,7 @@
/obj/item/storage/surgical_tray
name = "surgical tray"
desc = "A small metallic tray covered in sterile tarp. Intended to store surgical tools in a neat and clean fashion."
+ icon = 'icons/obj/items/storage/medical.dmi'
icon_state = "surgical_tray"
flags_atom = FPRINT|CONDUCT
w_class = SIZE_LARGE //Should not fit in backpacks
diff --git a/code/game/objects/items/storage/toolbox.dm b/code/game/objects/items/storage/toolbox.dm
index db0d4e3b269b..a2989ed12f92 100644
--- a/code/game/objects/items/storage/toolbox.dm
+++ b/code/game/objects/items/storage/toolbox.dm
@@ -1,6 +1,7 @@
/obj/item/storage/toolbox
name = "toolbox"
desc = "Danger. Very robust."
+ icon = 'icons/obj/items/storage/toolbox.dmi'
icon_state = "red"
item_state = "toolbox_red"
pickup_sound = 'sound/handling/toolbox_pickup.ogg'
diff --git a/code/game/objects/items/storage/toolkit.dm b/code/game/objects/items/storage/toolkit.dm
index e3171eca40f6..d54201f73650 100644
--- a/code/game/objects/items/storage/toolkit.dm
+++ b/code/game/objects/items/storage/toolkit.dm
@@ -1,6 +1,7 @@
/obj/item/storage/toolkit
name = "engineer kit"
desc = "An combat engineering toolkit intended to carry electrical and mechanical supplies into combat. With engineering training you can fit this in a backpack."
+ icon = 'icons/obj/items/storage/kits.dmi'
icon_state = "toolkit"
item_state = "fulton"
throw_speed = SPEED_FAST
@@ -23,7 +24,7 @@
)
storage_flags = STORAGE_FLAGS_BOX
required_skill_for_nest_opening = SKILL_ENGINEER
- required_skill_level_for_nest_opening = SKILL_ENGINEER_ENGI
+ required_skill_level_for_nest_opening = SKILL_ENGINEER_TRAINED
///icon state to use when kit is full
var/icon_full
@@ -41,5 +42,15 @@
else
icon_state = icon_full
+/obj/item/storage/toolkit/full/fill_preset_inventory()
+ new /obj/item/stack/cable_coil/random(src)
+ new /obj/item/circuitboard/apc(src)
+ new /obj/item/circuitboard/apc(src)
+ new /obj/item/circuitboard/apc(src)
+ new /obj/item/cell/high(src)
+ new /obj/item/cell/high(src)
+ new /obj/item/clothing/glasses/welding(src)
+
+
/obj/item/storage/toolkit/empty/fill_preset_inventory()
return
diff --git a/code/game/objects/items/storage/wallets.dm b/code/game/objects/items/storage/wallets.dm
index 29c364a59b02..5eb4e7d7cedd 100644
--- a/code/game/objects/items/storage/wallets.dm
+++ b/code/game/objects/items/storage/wallets.dm
@@ -3,6 +3,7 @@
desc = "It can hold a few small and personal things."
storage_slots = 10
icon_state = "wallet"
+ icon = 'icons/obj/items/storage/bags.dmi'
w_class = SIZE_TINY
can_hold = list(
/obj/item/spacecash,
diff --git a/code/game/objects/items/tools/cleaning_tools.dm b/code/game/objects/items/tools/cleaning_tools.dm
index f392f096bcf6..9fab254a7153 100644
--- a/code/game/objects/items/tools/cleaning_tools.dm
+++ b/code/game/objects/items/tools/cleaning_tools.dm
@@ -99,13 +99,15 @@
desc = "This cone is trying to warn you of something!"
icon_state = "cone"
icon = 'icons/obj/janitor.dmi'
+ item_icons = 'icons/mob/humans/onmob/head_0.dmi'
force = 1
throwforce = 3
throw_speed = SPEED_FAST
throw_range = 5
w_class = SIZE_SMALL
attack_verb = list("warned", "cautioned", "smashed")
-
+ flags_equip_slot = SLOT_HEAD
+ flags_inv_hide = HIDEEARS|HIDETOPHAIR
@@ -150,7 +152,7 @@
return
..()
-/obj/item/tool/soap/nanotrasen
+/obj/item/tool/soap/weyland_yutani
desc = "A Weyland-Yutani brand bar of soap. Smells of phoron."
icon_state = "soapnt"
diff --git a/code/game/objects/items/tools/extinguisher.dm b/code/game/objects/items/tools/extinguisher.dm
index 723d34c64f7e..75987116b290 100644
--- a/code/game/objects/items/tools/extinguisher.dm
+++ b/code/game/objects/items/tools/extinguisher.dm
@@ -159,7 +159,7 @@
unpicked_targets -= TT
INVOKE_ASYNC(src, PROC_REF(release_liquid), TT, user)
- if(istype(user.loc, /turf/open/space) || (user.lastarea && user.lastarea.has_gravity == 0))
+ if(istype(user.loc, /turf/open/space))
user.inertia_dir = get_dir(target, user)
step(user, user.inertia_dir)
return
diff --git a/code/game/objects/items/tools/flame_tools.dm b/code/game/objects/items/tools/flame_tools.dm
index d5cd708f29b3..8af7d15e0ff3 100644
--- a/code/game/objects/items/tools/flame_tools.dm
+++ b/code/game/objects/items/tools/flame_tools.dm
@@ -177,6 +177,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
w_class = SIZE_TINY
flags_armor_protection = 0
flags_equip_slot = SLOT_EAR | SLOT_FACE
+ flags_obj = parent_type::flags_obj|OBJ_IS_HELMET_GARB
flags_atom = CAN_BE_SYRINGED
attack_verb = list("burnt", "singed")
blood_overlay_type = ""
@@ -693,6 +694,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
throwforce = 4
flags_atom = FPRINT|CONDUCT
flags_equip_slot = SLOT_WAIST
+ flags_obj = parent_type::flags_obj|OBJ_IS_HELMET_GARB
attack_verb = list("burnt", "singed")
/obj/item/tool/lighter/zippo
diff --git a/code/game/objects/items/tools/kitchen_tools.dm b/code/game/objects/items/tools/kitchen_tools.dm
index a4c4925fba2c..a29bf97cacd3 100644
--- a/code/game/objects/items/tools/kitchen_tools.dm
+++ b/code/game/objects/items/tools/kitchen_tools.dm
@@ -135,6 +135,42 @@
attack_verb = list("slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
+/*
+ * Plastic Pizza Cutter
+ */
+/obj/item/tool/kitchen/pizzacutter
+ name = "pizza cutter"
+ icon_state = "plasticpizzacutter"
+ desc = "A circular blade used for cutting pizzas. This one has a cheap plastic handle."
+ flags_atom = FPRINT|CONDUCT
+ sharp = IS_SHARP_ITEM_ACCURATE
+ edge = TRUE
+ force = 10
+ w_class = SIZE_MEDIUM
+ hitsound = 'sound/weapons/bladeslice.ogg'
+ throwforce = 6
+ throw_speed = SPEED_VERY_FAST
+ throw_range = 6
+ matter = list("metal" = 12000)
+
+ attack_verb = list("slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
+
+/*
+ * Wood Pizza Cutter
+ */
+/obj/item/tool/kitchen/pizzacutter/wood
+ icon_state = "woodpizzacutter"
+ desc = "A circular blade used for cutting pizzas. This one has an authentic wooden handle."
+
+/*
+ * Holy Relic Pizza Cutter
+ */
+/obj/item/tool/kitchen/pizzacutter/holyrelic
+ name = "\improper PIZZA TIME"
+ icon_state = "holyrelicpizzacutter"
+ desc = "Before you is a holy relic of a bygone era when the great Pizza Lords reigned supreme. You know either that or it's just a big damn pizza cutter."
+ force = MELEE_FORCE_VERY_STRONG
+
/*
* Bucher's cleaver
*/
diff --git a/code/game/objects/items/tools/maintenance_tools.dm b/code/game/objects/items/tools/maintenance_tools.dm
index 8febff63ee5d..f45953040a07 100644
--- a/code/game/objects/items/tools/maintenance_tools.dm
+++ b/code/game/objects/items/tools/maintenance_tools.dm
@@ -29,6 +29,7 @@
matter = list("metal" = 150)
attack_verb = list("bashed", "battered", "bludgeoned", "whacked")
inherent_traits = list(TRAIT_TOOL_WRENCH)
+ preferred_storage = list(/obj/item/clothing/accessory/storage/tool_webbing = WEAR_ACCESSORY)
/*
@@ -52,7 +53,7 @@
attack_verb = list("stabbed")
flags_item = CAN_DIG_SHRAPNEL
inherent_traits = list(TRAIT_TOOL_SCREWDRIVER)
-
+ preferred_storage = list(/obj/item/clothing/accessory/storage/tool_webbing = WEAR_ACCESSORY)
/obj/item/tool/screwdriver/Initialize()
@@ -135,6 +136,7 @@
sharp = IS_SHARP_ITEM_SIMPLE
edge = 1
inherent_traits = list(TRAIT_TOOL_WIRECUTTERS)
+ preferred_storage = list(/obj/item/clothing/accessory/storage/tool_webbing = WEAR_ACCESSORY)
/obj/item/tool/wirecutters/tactical
name = "tactical wirecutters"
@@ -189,6 +191,7 @@
/// Used to slowly deplete the fuel when the tool is left on.
var/weld_tick = 0
var/has_welding_screen = FALSE
+ preferred_storage = list(/obj/item/clothing/accessory/storage/tool_webbing = WEAR_ACCESSORY)
/obj/item/tool/weldingtool/Initialize()
. = ..()
@@ -472,6 +475,7 @@
attack_verb = list("attacked", "bashed", "battered", "bludgeoned", "whacked")
inherent_traits = list(TRAIT_TOOL_CROWBAR)
pry_capable = IS_PRY_CAPABLE_CROWBAR
+ preferred_storage = list(/obj/item/clothing/accessory/storage/tool_webbing = WEAR_ACCESSORY)
/obj/item/tool/crowbar/red
icon = 'icons/obj/items/items.dmi'
diff --git a/code/game/objects/items/toys/cards.dm b/code/game/objects/items/toys/cards.dm
index f63efd61a615..89aea51bb8c0 100644
--- a/code/game/objects/items/toys/cards.dm
+++ b/code/game/objects/items/toys/cards.dm
@@ -266,6 +266,7 @@
icon = 'icons/obj/items/playing_cards.dmi'
icon_state = "empty"
w_class = SIZE_TINY
+ flags_obj = parent_type::flags_obj|OBJ_IS_HELMET_GARB
var/concealed = FALSE
var/pile_state = FALSE
diff --git a/code/game/objects/items/toys/crayons.dm b/code/game/objects/items/toys/crayons.dm
index 1d9e2e1a4d54..636f1a50fc52 100644
--- a/code/game/objects/items/toys/crayons.dm
+++ b/code/game/objects/items/toys/crayons.dm
@@ -61,6 +61,62 @@
colorName = "rainbow"
uses = 0
+/obj/item/toy/crayon/pride/lesbian
+ icon_state = "crayonlesbian"
+ crayon_color = "#bd1471"
+ shade_color = "#d46b15"
+ colorName = "lesbian"
+ uses = 0
+
+/obj/item/toy/crayon/pride/gay
+ icon_state = "crayongay"
+ crayon_color = "#33cc9e"
+ shade_color = "#7f1fa5"
+ colorName = "gay"
+ uses = 0
+
+/obj/item/toy/crayon/pride/bi
+ icon_state = "crayonbi"
+ crayon_color = "#c01b6e"
+ shade_color = "#281dc5"
+ colorName = "bisexual"
+ uses = 0
+
+/obj/item/toy/crayon/pride/pan
+ icon_state = "crayonpan"
+ crayon_color = "#da1778"
+ shade_color = "#229bff"
+ colorName = "pansexual"
+ uses = 0
+
+/obj/item/toy/crayon/pride/ace
+ icon_state = "crayonace"
+ crayon_color = "#272727"
+ shade_color = "#570c3e"
+ colorName = "asexual"
+ uses = 0
+
+/obj/item/toy/crayon/pride/trans
+ icon_state = "crayontrans"
+ crayon_color = "#f57ecd"
+ shade_color = "#4bbdeb"
+ colorName = "transgender"
+ uses = 0
+
+/obj/item/toy/crayon/pride/enby
+ icon_state = "crayonenby"
+ crayon_color = "#272727"
+ shade_color = "#e9cf3a"
+ colorName = "nonbinary"
+ uses = 0
+
+/obj/item/toy/crayon/pride/fluid
+ icon_state = "crayonfluid"
+ crayon_color = "#b64791"
+ shade_color = "#000FFF"
+ colorName = "genderfluid"
+ uses = 0
+
/obj/item/toy/crayon/rainbow/attack_self(mob/living/user)
..()
crayon_color = input(user, "Please select the main color.", "Crayon color") as color
diff --git a/code/game/objects/items/weapons/blades.dm b/code/game/objects/items/weapons/blades.dm
index ce1bb2ded072..b1aca8db29b4 100644
--- a/code/game/objects/items/weapons/blades.dm
+++ b/code/game/objects/items/weapons/blades.dm
@@ -138,17 +138,6 @@
throwforce = MELEE_FORCE_STRONG
edge = 1
-
-/obj/item/weapon/pizza_cutter
- name = "\improper PIZZA TIME"
- icon = 'icons/obj/items/weapons/weapons.dmi'
- icon_state = "pizza_cutter"
- item_state = "pizza_cutter"
- desc = "Before you is a holy relic of a bygone era when the great Pizza Lords reigned supreme. You know either that or it's just a big damn pizza cutter."
- sharp = IS_SHARP_ITEM_ACCURATE
- force = MELEE_FORCE_VERY_STRONG
- edge = 1
-
///For digging shrapnel out of OTHER people, not yourself. Triggered by human/attackby() so target is definitely human. User might not be.
/obj/item/proc/dig_out_shrapnel_check(mob/living/carbon/human/target, mob/living/carbon/human/user)
if(user.a_intent == INTENT_HELP && (target == user || skillcheck(user, SKILL_MEDICAL, SKILL_MEDICAL_MEDIC))) //Squad medics and above, or yourself
diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm
index 2dc064aa86d4..77b15e22d055 100644
--- a/code/game/objects/objs.dm
+++ b/code/game/objects/objs.dm
@@ -277,7 +277,11 @@
//trying to buckle a mob
/obj/proc/buckle_mob(mob/M, mob/user)
- if (!ismob(M) || (get_dist(src, user) > 1) || user.is_mob_restrained() || user.stat || buckled_mob || M.buckled || !isturf(user.loc))
+ if (!ismob(M) || (get_dist(src, user) > 1) || user.stat || buckled_mob || M.buckled || !isturf(user.loc))
+ return
+
+ if (user.is_mob_incapacitated() || HAS_TRAIT(user, TRAIT_IMMOBILIZED) || HAS_TRAIT(user, TRAIT_FLOORED))
+ to_chat(user, SPAN_WARNING("You can't do this right now."))
return
if (isxeno(user) && !HAS_TRAIT(user, TRAIT_OPPOSABLE_THUMBS))
@@ -286,11 +290,6 @@
if (iszombie(user))
return
- // mobs that become immobilized should not be able to buckle themselves.
- if(M == user && HAS_TRAIT(user, TRAIT_IMMOBILIZED))
- to_chat(user, SPAN_WARNING("You are unable to do this in your current state."))
- return
-
if(density)
density = FALSE
if(!step(M, get_dir(M, src)) && loc != M.loc)
diff --git a/code/game/objects/prop.dm b/code/game/objects/prop.dm
index cc941b19ed97..9e256236e7d6 100644
--- a/code/game/objects/prop.dm
+++ b/code/game/objects/prop.dm
@@ -169,6 +169,18 @@
icon_state = "game_kit"
icon = 'icons/obj/items/items.dmi'
+/obj/item/prop/gripper
+ name = "magnetic gripper"
+ desc = "A simple grasping tool for synthetic assets."
+ icon_state = "gripper"
+ icon = 'icons/obj/items/devices.dmi'
+
+/obj/item/prop/matter_decompiler
+ name = "matter decompiler"
+ desc = "Eating trash, bits of glass, or other debris will replenish your stores."
+ icon_state = "decompiler"
+ icon = 'icons/obj/items/devices.dmi'
+
/// Xeno-specific props
/obj/item/prop/alien/hugger
diff --git a/code/game/objects/structures/airlock_assembly.dm b/code/game/objects/structures/airlock_assembly.dm
index d9e55e868016..01fca4a68783 100644
--- a/code/game/objects/structures/airlock_assembly.dm
+++ b/code/game/objects/structures/airlock_assembly.dm
@@ -111,6 +111,11 @@
qdel(src)
return
+ for(var/obj/object in loc)
+ if(object.density && object != src)
+ to_chat(user, SPAN_WARNING("[object] is blocking you from interacting with [src]!"))
+ return
+
switch(state)
if(STATE_STANDARD)
if(HAS_TRAIT(attacking_item, TRAIT_TOOL_WRENCH))
diff --git a/code/game/objects/structures/barricade/barricade.dm b/code/game/objects/structures/barricade/barricade.dm
index 28036f92d018..31c2f0ed1b48 100644
--- a/code/game/objects/structures/barricade/barricade.dm
+++ b/code/game/objects/structures/barricade/barricade.dm
@@ -453,6 +453,10 @@
to_chat(user, SPAN_WARNING("You'll need some adequate repair material in your other hand to patch up [src]!"))
return FALSE
+ if(material.amount < nailgun.material_per_repair)
+ to_chat(user, SPAN_WARNING("You'll need more adequate repair material in your other hand to patch up [src]!"))
+ return FALSE
+
var/repair_value = 0
for(var/validSheetType in repair_materials)
if(validSheetType == material.sheettype)
@@ -469,7 +473,7 @@
return FALSE
if(!material || (material != user.l_hand && material != user.r_hand) || material.amount <= 0)
- to_chat(user, SPAN_WARNING("You seems to have misplaced the repair material!"))
+ to_chat(user, SPAN_WARNING("You seem to have misplaced the repair material!"))
return FALSE
if(!nailgun.in_chamber || !nailgun.current_mag || nailgun.current_mag.current_rounds < 3)
@@ -479,7 +483,7 @@
update_health(-repair_value*maxhealth)
to_chat(user, SPAN_WARNING("You nail [material] to [src], restoring some of its integrity!"))
update_damage_state()
- material.use(1)
+ material.use(nailgun.material_per_repair)
nailgun.current_mag.current_rounds -= 3
nailgun.in_chamber = null
nailgun.load_into_chamber()
diff --git a/code/game/objects/structures/barricade/deployable.dm b/code/game/objects/structures/barricade/deployable.dm
index e53c917dc2bb..ad559f2e13bd 100644
--- a/code/game/objects/structures/barricade/deployable.dm
+++ b/code/game/objects/structures/barricade/deployable.dm
@@ -31,7 +31,7 @@
if(HAS_TRAIT(item, TRAIT_TOOL_CROWBAR))
if(user.action_busy)
return
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_NOVICE))
to_chat(user, SPAN_WARNING("You do not know how to collapse [src] using a crowbar..."))
return
user.visible_message(SPAN_NOTICE("[user] starts collapsing [src]."), \
@@ -95,6 +95,7 @@
w_class = SIZE_LARGE
flags_equip_slot = SLOT_BACK|SLOT_SUIT_STORE
+ flags_item = SMARTGUNNER_BACKPACK_OVERRIDE
icon_state = "folding-1"
item_state = "folding"
item_state_slots = list(
diff --git a/code/game/objects/structures/barricade/plasteel.dm b/code/game/objects/structures/barricade/folding.dm
similarity index 95%
rename from code/game/objects/structures/barricade/plasteel.dm
rename to code/game/objects/structures/barricade/folding.dm
index 1acedae9997d..8fe00d04a708 100644
--- a/code/game/objects/structures/barricade/plasteel.dm
+++ b/code/game/objects/structures/barricade/folding.dm
@@ -1,5 +1,5 @@
/obj/structure/barricade/plasteel
- name = "plasteel barricade"
+ name = "folding plasteel barricade"
desc = "A very sturdy barricade made out of plasteel panels, the pinnacle of strongpoints. Use a blowtorch to repair. Can be flipped down to create a path."
icon_state = "plasteel_closed_0"
health = 800
@@ -69,7 +69,7 @@
if(!..())
return FALSE
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_NOVICE))
if(!silent)
to_chat(user, SPAN_WARNING("You're not trained to repair [src]..."))
return FALSE
@@ -95,7 +95,7 @@
if(busy || tool_cooldown > world.time)
return
tool_cooldown = world.time + 10
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(user, SPAN_WARNING("You are not trained to assemble [src]..."))
return
@@ -112,7 +112,7 @@
return
if(HAS_TRAIT(item, TRAIT_TOOL_CROWBAR))
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(user, SPAN_WARNING("You are not trained to modify [src]..."))
return
playsound(src.loc, 'sound/items/Crowbar.ogg', 25, 1)
@@ -136,7 +136,7 @@
if(busy || tool_cooldown > world.time)
return
tool_cooldown = world.time + 10
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(user, SPAN_WARNING("You are not trained to assemble [src]..."))
return
if(!do_after(user, 10, INTERRUPT_ALL|BEHAVIOR_IMMOBILE, BUSY_ICON_BUILD, src))
@@ -151,7 +151,7 @@
if(busy || tool_cooldown > world.time)
return
tool_cooldown = world.time + 10
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(user, SPAN_WARNING("You are not trained to assemble [src]..."))
return
if(!do_after(user, 10, INTERRUPT_ALL|BEHAVIOR_IMMOBILE, BUSY_ICON_BUILD, src))
@@ -169,7 +169,7 @@
if(busy || tool_cooldown > world.time)
return
tool_cooldown = world.time + 10
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(user, SPAN_WARNING("You are not trained to assemble [src]..."))
return
var/turf/open/T = loc
@@ -190,7 +190,7 @@
if(busy || tool_cooldown > world.time)
return
tool_cooldown = world.time + 10
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(user, SPAN_WARNING("You are not trained to assemble [src]..."))
return
user.visible_message(SPAN_NOTICE("[user] starts unseating [src]'s panels."),
diff --git a/code/game/objects/structures/barricade/metal.dm b/code/game/objects/structures/barricade/non_folding.dm
similarity index 95%
rename from code/game/objects/structures/barricade/metal.dm
rename to code/game/objects/structures/barricade/non_folding.dm
index 3e79af2e21e1..575f1da738bf 100644
--- a/code/game/objects/structures/barricade/metal.dm
+++ b/code/game/objects/structures/barricade/non_folding.dm
@@ -48,7 +48,7 @@
if(!..())
return FALSE
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_NOVICE))
if(!silent)
to_chat(user, SPAN_WARNING("You're not trained to repair [src]..."))
return FALSE
@@ -279,3 +279,18 @@
..()
flags_can_pass_front_temp &= ~PASS_OVER_THROW_MOB
flags_can_pass_behind_temp &= ~PASS_OVER_THROW_MOB
+
+/obj/structure/barricade/metal/plasteel
+ name = "plasteel barricade"
+ desc = "A sturdy and easily assembled barricade made of reinforced plasteel plates, the pinnacle of strongpoints. Use a blowtorch to repair."
+ icon_state = "new_plasteel_0"
+ health = 900
+ maxhealth = 900
+ crusher_resistant = TRUE
+ force_level_absorption = 20
+ stack_type = /obj/item/stack/sheet/plasteel
+ debris = list(/obj/item/stack/sheet/plasteel)
+ destroyed_stack_amount = 3
+ barricade_type = "new_plasteel"
+ repair_materials = list("plasteel" = 0.45)
+
diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm
index 93fe78e63d98..50057cc746a4 100644
--- a/code/game/objects/structures/crates_lockers/closets.dm
+++ b/code/game/objects/structures/crates_lockers/closets.dm
@@ -5,6 +5,7 @@
icon_state = "closed"
density = TRUE
layer = BELOW_OBJ_LAYER
+ blocks_emissive = EMISSIVE_BLOCK_GENERIC
var/icon_closed = "closed"
var/icon_opened = "open"
var/opened = 0
@@ -127,6 +128,8 @@
var/obj/item/explosive/plastic/P = I
if(P.active)
continue
+ if(istype(I, /obj/item/phone))
+ continue
var/item_size = ceil(I.w_class / 2)
if(stored_units + item_size > storage_capacity)
continue
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm b/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm
index ae9f15b3634f..31b142a924e0 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm
@@ -20,6 +20,32 @@
new /obj/item/clothing/head/soft(src)
return
+/obj/structure/closet/secure_closet/quartermaster_uscm
+ name = "Quartermaster's Locker"
+ req_access = list(ACCESS_MARINE_RO)
+ icon_state = "secureqm1"
+ icon_closed = "secureqm"
+ icon_locked = "secureqm1"
+ icon_opened = "secureqmopen"
+ icon_broken = "secureqmbroken"
+ icon_off = "secureqmoff"
+
+/obj/structure/closet/secure_closet/quartermaster_uscm/Initialize()
+ . = ..()
+ new /obj/item/clothing/under/rank/qm_suit(src)
+ new /obj/item/clothing/head/cmcap/req/ro(src)
+ new /obj/item/clothing/shoes/marine(src)
+ new /obj/item/clothing/gloves/yellow(src)
+ new /obj/item/device/flashlight(src)
+ new /obj/item/tool/stamp/ro(src)
+ new /obj/item/device/flash(src)
+ new /obj/item/clothing/suit/fire/firefighter(src)
+ new /obj/item/device/megaphone(src)
+ new /obj/item/clothing/mask/gas(src)
+ new /obj/item/folder/yellow(src)
+ new /obj/item/clipboard(src)
+ return
+
diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm
index 8a10cd4d93ea..99abd167d297 100644
--- a/code/game/objects/structures/crates_lockers/crates.dm
+++ b/code/game/objects/structures/crates_lockers/crates.dm
@@ -15,10 +15,17 @@
/// Types this crate can be made into
var/list/crate_customizing_types = list(
"Plain" = /obj/structure/closet/crate,
+ "Plain (Green)" = /obj/structure/closet/crate/green,
"Weapons" = /obj/structure/closet/crate/weapon,
"Supply" = /obj/structure/closet/crate/supply,
"Ammo" = /obj/structure/closet/crate/ammo,
+ "Ammo (Black)" = /obj/structure/closet/crate/ammo/alt,
+ "Ammo (Flame)" = /obj/structure/closet/crate/ammo/alt/flame,
"Construction" = /obj/structure/closet/crate/construction,
+ "Science" = /obj/structure/closet/crate/science,
+ "Hydroponics" = /obj/structure/closet/crate/hydroponics,
+ "Medical" = /obj/structure/closet/crate/medical,
+ "Internals" = /obj/structure/closet/crate/internals,
"Explosives" = /obj/structure/closet/crate/explosives,
"Alpha" = /obj/structure/closet/crate/alpha,
"Bravo" = /obj/structure/closet/crate/bravo,
@@ -90,6 +97,8 @@
var/obj/structure/bed/B = O
if(B.buckled_mob)
continue
+ if(istype(O, /obj/item/phone))
+ continue
O.forceMove(src)
itemcount++
@@ -286,15 +295,6 @@
new /obj/item/storage/box/donkpockets(src)
new /obj/item/storage/box/donkpockets(src)
-/* CM doesn't use this.
-/obj/structure/closet/crate/bin
- desc = "A large bin."
- name = "Large bin"
- icon_state = "largebin"
- icon_opened = "largebinopen"
- icon_closed = "largebin"
-*/
-
/obj/structure/closet/crate/radiation
name = "radioactive gear crate"
desc = "A crate with a radiation sign on it."
diff --git a/code/game/objects/structures/electricchair.dm b/code/game/objects/structures/electricchair.dm
deleted file mode 100644
index 239df3c05973..000000000000
--- a/code/game/objects/structures/electricchair.dm
+++ /dev/null
@@ -1,47 +0,0 @@
-/obj/structure/bed/chair/e_chair
- name = "electric chair"
- desc = "Looks absolutely SHOCKING!"
- icon_state = "echair1"
- var/last_time = 1
-
-/obj/structure/bed/chair/e_chair/New()
- ..()
- overlays += image('icons/obj/objects.dmi', src, "echair_over", MOB_LAYER + 1, dir)
-
-
-/obj/structure/bed/chair/e_chair/rotate()
- ..()
- overlays.Cut()
- overlays += image('icons/obj/objects.dmi', src, "echair_over", MOB_LAYER + 1, dir) //there's probably a better way of handling this, but eh. -Pete
- return
-
-/obj/structure/bed/chair/e_chair/proc/shock()
- if(last_time + 50 > world.time)
- return
- last_time = world.time
-
- // special power handling
- var/area/A = get_area(src)
- if(!isarea(A))
- return
- if(!A.powered(POWER_CHANNEL_EQUIP))
- return
- A.use_power(5000)
- var/light = A.power_light
- A.updateicon()
-
- flick("echair1", src)
- var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
- s.set_up(12, 1, src)
- s.start()
- if(buckled_mob)
- buckled_mob.burn_skin(85)
- to_chat(buckled_mob, SPAN_DANGER("You feel a deep shock course through your body!"))
- sleep(1)
- buckled_mob.burn_skin(85)
- buckled_mob.apply_effect(600, STUN)
- visible_message(SPAN_DANGER("The electric chair went off!"), SPAN_DANGER("You hear a deep sharp shock!"))
-
- A.power_light = light
- A.updateicon()
- return
diff --git a/code/game/objects/structures/fence.dm b/code/game/objects/structures/fence.dm
index 7c602c34380f..93d9d7727e5d 100644
--- a/code/game/objects/structures/fence.dm
+++ b/code/game/objects/structures/fence.dm
@@ -153,6 +153,10 @@
M.apply_damage(20)
health -= 50
+ M.attack_log += text("\[[time_stamp()]\] was slammed against [src] by [key_name(user)] ")
+ user.attack_log += text("\[[time_stamp()]\] slammed [key_name(M)] against [src] ")
+ msg_admin_attack("[key_name(user)] slammed [key_name(M)] against [src] at [get_area_name(M)]", M.loc.x, M.loc.y, M.loc.z)
+
healthcheck(1, 1, M) //The person thrown into the window literally shattered it
return
diff --git a/code/game/objects/structures/girders.dm b/code/game/objects/structures/girders.dm
index 01e0e1b717cc..325af12c814b 100644
--- a/code/game/objects/structures/girders.dm
+++ b/code/game/objects/structures/girders.dm
@@ -110,6 +110,10 @@
if(!HAS_TRAIT(W, TRAIT_TOOL_BLOWTORCH))
to_chat(user, SPAN_WARNING("You need a stronger blowtorch!"))
return
+ for(var/obj/object in loc)
+ if(object.density)
+ to_chat(user, SPAN_WARNING("[object] is blocking you from welding [src] together!"))
+ return
if(do_after(user,30, INTERRUPT_ALL|BEHAVIOR_IMMOBILE, BUSY_ICON_BUILD))
if(QDELETED(src))
return
@@ -334,7 +338,6 @@
else
dmg = floor(P.damage * 0.5)
if(dmg)
- health -= dmg
take_damage(dmg)
bullet_ping(P)
if(health <= 0)
@@ -342,7 +345,9 @@
return TRUE
/obj/structure/girder/proc/take_damage(damage)
- health = max(health - damage, 0)
+ health -= damage
+ if(health <= -100)
+ qdel(src)
if(health <= 0)
update_state()
@@ -356,10 +361,11 @@
update_state()
/obj/structure/girder/proc/update_state()
- if (health <= 0)
+ if(health <= 0 && density)
icon_state = "[icon_state]_damaged"
density = FALSE
- else
+
+ else if(health > 0 && !density)
var/underscore_position = findtext(icon_state,"_")
var/new_state = copytext(icon_state, 1, underscore_position)
icon_state = new_state
diff --git a/code/game/objects/structures/inflatable.dm b/code/game/objects/structures/inflatable.dm
index b3a330ca36b0..2e02be02b8f3 100644
--- a/code/game/objects/structures/inflatable.dm
+++ b/code/game/objects/structures/inflatable.dm
@@ -259,6 +259,7 @@
/obj/item/storage/briefcase/inflatable
name = "inflatable barrier box"
desc = "Contains inflatable walls and doors."
+ icon = 'icons/obj/items/storage/boxes.dmi'
icon_state = "inf_box"
item_state = "syringe_kit"
max_storage_space = 21
diff --git a/code/game/objects/structures/pipes/standard/standard_misc.dm b/code/game/objects/structures/pipes/standard/standard_misc.dm
index dc52da57c750..d0028ce862cb 100644
--- a/code/game/objects/structures/pipes/standard/standard_misc.dm
+++ b/code/game/objects/structures/pipes/standard/standard_misc.dm
@@ -120,6 +120,7 @@
dir = SOUTH
valid_directions = list(SOUTH)
density = TRUE
+ layer = OBJ_LAYER
var/actual_icon_state = "air"
/obj/structure/pipes/standard/tank/New()
diff --git a/code/game/objects/structures/signs.dm b/code/game/objects/structures/signs.dm
index d9bf8677bb56..a69ad56ac95f 100644
--- a/code/game/objects/structures/signs.dm
+++ b/code/game/objects/structures/signs.dm
@@ -112,6 +112,19 @@
desc = "A flag of the United Americas. Inspires patriotism, fear, or revulsion depending on the viewer's political leanings."
icon_state = "uaflag"
+
+//============//
+// Flags //
+//==========//
+
+/obj/structure/sign/flag
+ icon = 'icons/obj/structures/props/flags.dmi'
+
+/obj/structure/sign/flag/upp
+ name = "\improper Union of Progressive Peoples Flag"
+ desc = "Unity through Strength, Freedom through Unity"
+ icon_state = "upp_flag"
+
//=====================//
// SEMIOTIC STANDARD //
//===================//
@@ -578,6 +591,58 @@
desc = " 1. You are not entitled to service or equipment. Attachments are a privilege, not a right.\n 2. You must be fully dressed to obtain service. Cryosleep underwear is non-permissible.\n 3. The Quartermaster has the final say and the right to decline service. Only the Acting Commanding Officer may override their decisions.\n 4. Please treat your Requsitions staff with respect. They work hard."
icon_state = "roplaque"
+/obj/structure/sign/ROcreed
+ name = "\improper QMC Creed Plaque"
+ desc = "The short version of the Quartermaster Creed made by the US Quartermaster Corps, this on is purely decorative and ceremonial version which is much shorter and doesn't include more modern edits."
+ desc_lore = {"I am Quartermaster
+ My story is enfolded in the history of this nation.
+ Sustainer of Armies...
+
+ My forges burned at Valley Forge.
+ Down frozen, rutted roads my oxen hauled
+ the meager foods a bankrupt Congress sent me...
+ Scant rations for the cold and starving troops,
+ Gunpowder, salt, and lead.
+
+ In 1812 we sailed to war in ships my boatwrights built.
+ I fought beside you in the deserts of our great Southwest.
+ My pack mules perished seeking water holes,
+ And I went on with camels.
+ I gave flags to serve.
+ The medals and crest you wear are my design.
+
+ Since 1862, I have sought our fallen brothers
+ from Private to President.
+ In war or peace I bring them home
+ And lay them gently down in fields of honor.
+
+ Provisioner, transporter.
+ In 1898 I took you to Havana Harbor and the Philippines.
+ I brought you tents, your khaki cloth for uniforms.
+ When yellow fever struck, I brought the mattresses you lay upon.
+
+ In 1917, we crossed the ocean to fight in the trenches and fields of France,
+ New weapons, training, technologies, and tactics for the Great War.
+ But always the need for food, water, ammunition, and now fuel.
+
+ We shed first blood together at Pearl Harbor and Corregidor.
+ Then begin the long march to Victory - Guadalcanal and North Africa, Sicily and the Solomons.
+ I was there with you at Omaha Beach on D-Day and even the night before from Glider and Parachute.
+ Across Europe and the Pacific, I drove and dug and fought till the job was done.
+
+ When war came to the Peninsula in 1950, it was my 'chutes that filled the grey Korean skies.
+ From the perimeter at Pusan to the cold roads of the Chosin, I was there.
+ In 1965, I established the fire bases and depots across South Vietnam,
+ The Hueys and Chinooks carried my supplies forward.
+
+ I AM QUARTERMASTER.
+ I can shape the course of combat,
+ Change the outcome of battle.
+ Look to me: Sustainer of Armies...Since 1775.
+
+ I AM QUARTERMASTER. I AM PROUD."}
+ icon_state = "rocreed"
+
/obj/structure/sign/prop1
name = "\improper USCM Poster"
desc = "The symbol of the United States Colonial Marines corps."
diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm
index a1542f7baf75..760633348b81 100644
--- a/code/game/objects/structures/tables_racks.dm
+++ b/code/game/objects/structures/tables_racks.dm
@@ -385,9 +385,11 @@
to_chat(usr, SPAN_WARNING("You have moved a table too recently."))
return FALSE
- for(var/mob/living/mob_behind_table in oview(src, 0))
+ FOR_DOVIEW(var/mob/living/mob_behind_table, 0, src, HIDE_INVISIBLE_OBSERVER)
to_chat(usr, SPAN_WARNING("[mob_behind_table] is in the way of [src]."))
+ FOR_DVIEW_END
return FALSE
+ FOR_DVIEW_END
var/list/directions = list()
if(direction)
diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm
index 154cc43d4af2..14e15de24691 100644
--- a/code/game/objects/structures/window.dm
+++ b/code/game/objects/structures/window.dm
@@ -247,6 +247,10 @@
if(!not_damageable) //Impossible to destroy
health -= 50
+ M.attack_log += text("\[[time_stamp()]\] was slammed against [src] by [key_name(user)] ")
+ user.attack_log += text("\[[time_stamp()]\] slammed [key_name(M)] against [src] ")
+ msg_admin_attack("[key_name(user)] slammed [key_name(M)] against [src] at [get_area_name(M)]", M.loc.x, M.loc.y, M.loc.z)
+
healthcheck(1, 1, 1, M) //The person thrown into the window literally shattered it
return
diff --git a/code/game/sound.dm b/code/game/sound.dm
index 1ab8fc42f41a..6f721d9725e5 100644
--- a/code/game/sound.dm
+++ b/code/game/sound.dm
@@ -13,6 +13,7 @@
var/falloff = 1
var/volume_cat = VOLUME_SFX
var/range = 0
+ var/list/echo = new /list(18)
var/x //Map coordinates, not sound coordinates
var/y
var/z
@@ -36,114 +37,127 @@
//status: the regular 4 sound flags
//falloff: max range till sound volume starts dropping as distance increases
-/proc/playsound(atom/source, soundin, vol = 100, vary = FALSE, sound_range, vol_cat = VOLUME_SFX, channel = 0, status , falloff = 1, y_s_offset,x_s_offset)
+/proc/playsound(atom/source, sound/soundin, vol = 100, vary = FALSE, sound_range, vol_cat = VOLUME_SFX, channel = 0, status, falloff = 1, list/echo, y_s_offset, x_s_offset)
if(isarea(source))
error("[source] is an area and is trying to make the sound: [soundin]")
return FALSE
- var/datum/sound_template/S = new()
- var/sound/SD = soundin
- if(istype(SD))
- S.file = SD.file
- S.wait = SD.wait
- S.repeat = SD.repeat
+ var/datum/sound_template/template = new()
+ if(istype(soundin))
+ template.file = soundin.file
+ template.wait = soundin.wait
+ template.repeat = soundin.repeat
else
- S.file = get_sfx(soundin)
- S.channel = channel ? channel : get_free_channel()
- S.status = status
- S.falloff = falloff
- S.volume = vol
- S.volume_cat = vol_cat
- S.y_s_offset = y_s_offset
- S.x_s_offset = x_s_offset
+ template.file = get_sfx(soundin)
+ template.channel = channel ? channel : get_free_channel()
+ template.status = status
+ template.falloff = falloff
+ template.volume = vol
+ template.volume_cat = vol_cat
+ for(var/pos = 1 to length(echo))
+ if(!echo[pos])
+ continue
+ template.echo[pos] = echo[pos]
+ template.y_s_offset = y_s_offset
+ template.x_s_offset = x_s_offset
if(vary != FALSE)
if(vary > 1)
- S.frequency = vary
+ template.frequency = vary
else
- S.frequency = GET_RANDOM_FREQ // Same frequency for everybody
+ template.frequency = GET_RANDOM_FREQ // Same frequency for everybody
if(!sound_range)
sound_range = floor(0.25*vol) //if no specific range, the max range is equal to a quarter of the volume.
- S.range = sound_range
+ template.range = sound_range
var/turf/turf_source = get_turf(source)
if(!turf_source || !turf_source.z)
return FALSE
- S.x = turf_source.x
- S.y = turf_source.y
- S.z = turf_source.z
+ template.x = turf_source.x
+ template.y = turf_source.y
+ template.z = turf_source.z
if(!SSinterior)
- SSsound.queue(S)
- return S.channel
+ SSsound.queue(template)
+ return template.channel
var/list/datum/interior/extra_interiors = list()
// If we're in an interior, range the chunk, then adjust to do so from outside instead
if(SSinterior.in_interior(turf_source))
- var/datum/interior/VI = SSinterior.get_interior_by_coords(turf_source.x, turf_source.y, turf_source.z)
- if(VI?.ready)
- extra_interiors |= VI
- if(VI.exterior)
- var/turf/new_turf_source = get_turf(VI.exterior)
- S.x = new_turf_source.x
- S.y = new_turf_source.y
- S.z = new_turf_source.z
+ var/datum/interior/vehicle_interior = SSinterior.get_interior_by_coords(turf_source.x, turf_source.y, turf_source.z)
+ if(vehicle_interior?.ready)
+ extra_interiors |= vehicle_interior
+ if(vehicle_interior.exterior)
+ var/turf/new_turf_source = get_turf(vehicle_interior.exterior)
+ template.x = new_turf_source.x
+ template.y = new_turf_source.y
+ template.z = new_turf_source.z
else sound_range = 0
// Range for 'nearby interiors' aswell
- for(var/datum/interior/VI in SSinterior.interiors)
- if(VI?.ready && VI.exterior?.z == turf_source.z && get_dist(VI.exterior, turf_source) <= sound_range)
- extra_interiors |= VI
+ for(var/datum/interior/vehicle_interior in SSinterior.interiors)
+ if(vehicle_interior?.ready && vehicle_interior.exterior?.z == turf_source.z && get_dist(vehicle_interior.exterior, turf_source) <= sound_range)
+ extra_interiors |= vehicle_interior
- SSsound.queue(S, null, extra_interiors)
- return S.channel
+ SSsound.queue(template, null, extra_interiors)
+ return template.channel
//This is the replacement for playsound_local. Use this for sending sounds directly to a client
-/proc/playsound_client(client/client, soundin, atom/origin, vol = 100, random_freq, vol_cat = VOLUME_SFX, channel = 0, status, y_s_offset, x_s_offset)
- if(!istype(client) || !client.soundOutput) return FALSE
- var/datum/sound_template/S = new()
+/proc/playsound_client(client/client, sound/soundin, atom/origin, vol = 100, random_freq, vol_cat = VOLUME_SFX, channel = 0, status, list/echo, y_s_offset, x_s_offset)
+ if(!istype(client) || !client.soundOutput)
+ return FALSE
+
+ var/datum/sound_template/template = new()
if(origin)
var/turf/T = get_turf(origin)
if(T)
- S.x = T.x
- S.y = T.y
- S.z = T.z
- var/sound/SD = soundin
- if(istype(SD))
- S.file = SD.file
- S.wait = SD.wait
- S.repeat = SD.repeat
+ template.x = T.x
+ template.y = T.y
+ template.z = T.z
+ if(istype(soundin))
+ template.file = soundin.file
+ template.wait = soundin.wait
+ template.repeat = soundin.repeat
else
- S.file = get_sfx(soundin)
+ template.file = get_sfx(soundin)
if(random_freq)
- S.frequency = GET_RANDOM_FREQ
- S.volume = vol
- S.volume_cat = vol_cat
- S.channel = channel
- S.status = status
- S.y_s_offset = y_s_offset
- S.x_s_offset = x_s_offset
- SSsound.queue(S, list(client))
+ template.frequency = GET_RANDOM_FREQ
+ template.volume = vol
+ template.volume_cat = vol_cat
+ template.channel = channel
+ template.status = status
+ for(var/pos = 1 to length(echo))
+ if(!echo[pos])
+ continue
+ template.echo[pos] = echo[pos]
+ template.y_s_offset = y_s_offset
+ template.x_s_offset = x_s_offset
+ SSsound.queue(template, list(client))
/// Plays sound to all mobs that are map-level contents of an area
/proc/playsound_area(area/A, soundin, vol = 100, channel = 0, status, vol_cat = VOLUME_SFX, list/echo, y_s_offset, x_s_offset)
if(!isarea(A))
return FALSE
- var/datum/sound_template/S = new()
- S.file = soundin
- S.volume = vol
- S.channel = channel
- S.status = status
- S.volume_cat = vol_cat
+
+ var/datum/sound_template/template = new()
+ template.file = soundin
+ template.volume = vol
+ template.channel = channel
+ template.status = status
+ template.volume_cat = vol_cat
+ for(var/pos = 1 to length(echo))
+ if(!echo[pos])
+ continue
+ template.echo[pos] = echo[pos]
var/list/hearers = list()
for(var/mob/living/M in A.contents)
if(!M || !M.client || !M.client.soundOutput)
continue
hearers += M.client
- SSsound.queue(S, hearers)
+ SSsound.queue(template, hearers)
/client/proc/playtitlemusic()
if(!SSticker?.login_music)
@@ -153,230 +167,238 @@
/// Play sound for all on-map clients on a given Z-level. Good for ambient sounds.
-/proc/playsound_z(z, soundin, volume = 100, vol_cat = VOLUME_SFX, y_s_offset, x_s_offset)
- var/datum/sound_template/S = new()
- S.file = soundin
- S.volume = volume
- S.channel = SOUND_CHANNEL_Z
- S.volume_cat = vol_cat
- S.y_s_offset = y_s_offset
- S.x_s_offset = x_s_offset
+/proc/playsound_z(z, soundin, volume = 100, vol_cat = VOLUME_SFX, echo, y_s_offset, x_s_offset)
+ var/datum/sound_template/template = new()
+ template.file = soundin
+ template.volume = volume
+ template.channel = SOUND_CHANNEL_Z
+ template.volume_cat = vol_cat
+ for(var/pos = 1 to length(echo))
+ if(!echo[pos])
+ continue
+ template.echo[pos] = echo[pos]
+ template.y_s_offset = y_s_offset
+ template.x_s_offset = x_s_offset
var/list/hearers = list()
for(var/mob/M in GLOB.player_list)
if((M.z in z) && M.client.soundOutput)
hearers += M.client
- SSsound.queue(S, hearers)
+ SSsound.queue(template, hearers)
// The pick() proc has a built-in chance that can be added to any option by adding ,X; to the end of an option, where X is the % chance it will play.
-/proc/get_sfx(S)
- if(istext(S))
- switch(S)
+/proc/get_sfx(sound)
+ if(istext(sound))
+ switch(sound)
// General effects
if("shatter")
- S = pick('sound/effects/Glassbr1.ogg','sound/effects/Glassbr2.ogg','sound/effects/Glassbr3.ogg')
+ sound = pick('sound/effects/Glassbr1.ogg','sound/effects/Glassbr2.ogg','sound/effects/Glassbr3.ogg')
if("windowshatter") //meaty window shattering sound
- S = pick('sound/effects/window_shatter1.ogg','sound/effects/window_shatter2.ogg','sound/effects/window_shatter3.ogg')
+ sound = pick('sound/effects/window_shatter1.ogg','sound/effects/window_shatter2.ogg','sound/effects/window_shatter3.ogg')
if("glassbreak") //small breaks for bottles/etc.
- S = pick('sound/effects/glassbreak1.ogg','sound/effects/glassbreak2.ogg','sound/effects/glassbreak3.ogg','sound/effects/glassbreak4.ogg')
+ sound = pick('sound/effects/glassbreak1.ogg','sound/effects/glassbreak2.ogg','sound/effects/glassbreak3.ogg','sound/effects/glassbreak4.ogg')
if("explosion")
- S = pick('sound/effects/explosion1.ogg','sound/effects/explosion2.ogg','sound/effects/explosion3.ogg','sound/effects/explosion4.ogg','sound/effects/explosion5.ogg')
+ sound = pick('sound/effects/explosion1.ogg','sound/effects/explosion2.ogg','sound/effects/explosion3.ogg','sound/effects/explosion4.ogg','sound/effects/explosion5.ogg')
if("bigboom")
- S = pick('sound/effects/bigboom1.ogg','sound/effects/bigboom2.ogg','sound/effects/bigboom3.ogg','sound/effects/bigboom4.ogg')
+ sound = pick('sound/effects/bigboom1.ogg','sound/effects/bigboom2.ogg','sound/effects/bigboom3.ogg','sound/effects/bigboom4.ogg')
if("sparks")
- S = pick('sound/effects/sparks1.ogg','sound/effects/sparks2.ogg','sound/effects/sparks3.ogg','sound/effects/sparks4.ogg')
+ sound = pick('sound/effects/sparks1.ogg','sound/effects/sparks2.ogg','sound/effects/sparks3.ogg','sound/effects/sparks4.ogg')
if("rustle")
- S = pick('sound/effects/rustle1.ogg','sound/effects/rustle2.ogg','sound/effects/rustle3.ogg','sound/effects/rustle4.ogg','sound/effects/rustle5.ogg')
+ sound = pick('sound/effects/rustle1.ogg','sound/effects/rustle2.ogg','sound/effects/rustle3.ogg','sound/effects/rustle4.ogg','sound/effects/rustle5.ogg')
if("toolbox")
- S = pick('sound/effects/toolbox.ogg')
+ sound = pick('sound/effects/toolbox.ogg')
if("pillbottle")
- S = pick('sound/effects/pillbottle.ogg')
+ sound = pick('sound/effects/pillbottle.ogg')
if("rip")
- S = pick('sound/effects/rip1.ogg','sound/effects/rip2.ogg')
+ sound = pick('sound/effects/rip1.ogg','sound/effects/rip2.ogg')
if("lighter")
- S = pick('sound/effects/lighter1.ogg','sound/effects/lighter2.ogg','sound/effects/lighter3.ogg')
+ sound = pick('sound/effects/lighter1.ogg','sound/effects/lighter2.ogg','sound/effects/lighter3.ogg')
if("zippo_open")
- S = pick('sound/effects/zippo_open.ogg')
+ sound = pick('sound/effects/zippo_open.ogg')
if("zippo_close")
- S = pick('sound/effects/zippo_close.ogg')
+ sound = pick('sound/effects/zippo_close.ogg')
if("bonk") //somewhat quiet, increase volume
- S = pick('sound/machines/bonk.ogg')
+ sound = pick('sound/machines/bonk.ogg')
if("cane_step")
- S = pick('sound/items/cane_step_1.ogg', 'sound/items/cane_step_2.ogg', 'sound/items/cane_step_3.ogg', 'sound/items/cane_step_4.ogg', 'sound/items/cane_step_5.ogg', )
+ sound = pick('sound/items/cane_step_1.ogg', 'sound/items/cane_step_2.ogg', 'sound/items/cane_step_3.ogg', 'sound/items/cane_step_4.ogg', 'sound/items/cane_step_5.ogg', )
if("match")
- S = pick('sound/effects/match.ogg')
+ sound = pick('sound/effects/match.ogg')
+ if("throwing")
+ sound = pick('sound/effects/throwing/swoosh1.ogg', 'sound/effects/throwing/swoosh2.ogg', 'sound/effects/throwing/swoosh3.ogg', 'sound/effects/throwing/swoosh4.ogg')
if("punch")
- S = pick('sound/weapons/punch1.ogg','sound/weapons/punch2.ogg','sound/weapons/punch3.ogg','sound/weapons/punch4.ogg')
+ sound = pick('sound/weapons/punch1.ogg','sound/weapons/punch2.ogg','sound/weapons/punch3.ogg','sound/weapons/punch4.ogg')
if("swing_hit")
- S = pick('sound/weapons/genhit1.ogg', 'sound/weapons/genhit2.ogg', 'sound/weapons/genhit3.ogg')
+ sound = pick('sound/weapons/genhit1.ogg', 'sound/weapons/genhit2.ogg', 'sound/weapons/genhit3.ogg')
if("clan_sword_hit")
- S = pick('sound/weapons/clan_sword_hit_1.ogg', 'sound/weapons/clan_sword_hit_2.ogg')
+ sound = pick('sound/weapons/clan_sword_hit_1.ogg', 'sound/weapons/clan_sword_hit_2.ogg')
if("slam")
- S = pick('sound/effects/slam1.ogg','sound/effects/slam2.ogg','sound/effects/slam3.ogg', 0.1;'sound/effects/slam_rare_1.ogg')
+ sound = pick('sound/effects/slam1.ogg','sound/effects/slam2.ogg','sound/effects/slam3.ogg', 0.1;'sound/effects/slam_rare_1.ogg')
if("pageturn")
- S = pick('sound/effects/pageturn1.ogg', 'sound/effects/pageturn2.ogg','sound/effects/pageturn3.ogg')
+ sound = pick('sound/effects/pageturn1.ogg', 'sound/effects/pageturn2.ogg','sound/effects/pageturn3.ogg')
if("terminal_button")
- S = pick('sound/machines/terminal_button01.ogg', 'sound/machines/terminal_button02.ogg', 'sound/machines/terminal_button03.ogg','sound/machines/terminal_button04.ogg', 'sound/machines/terminal_button05.ogg', 'sound/machines/terminal_button06.ogg', 'sound/machines/terminal_button07.ogg', 'sound/machines/terminal_button08.ogg')
+ sound = pick('sound/machines/terminal_button01.ogg', 'sound/machines/terminal_button02.ogg', 'sound/machines/terminal_button03.ogg','sound/machines/terminal_button04.ogg', 'sound/machines/terminal_button05.ogg', 'sound/machines/terminal_button06.ogg', 'sound/machines/terminal_button07.ogg', 'sound/machines/terminal_button08.ogg')
if("keyboard")
- S = pick('sound/machines/keyboard1.ogg', 'sound/machines/keyboard2.ogg','sound/machines/keyboard3.ogg')
+ sound = pick('sound/machines/keyboard1.ogg', 'sound/machines/keyboard2.ogg','sound/machines/keyboard3.ogg')
if("keyboard_alt")
- S = pick('sound/machines/computer_typing4.ogg', 'sound/machines/computer_typing5.ogg', 'sound/machines/computer_typing6.ogg')
+ sound = pick('sound/machines/computer_typing4.ogg', 'sound/machines/computer_typing5.ogg', 'sound/machines/computer_typing6.ogg')
if("gunrustle")
- S = pick('sound/effects/gunrustle1.ogg', 'sound/effects/gunrustle2.ogg','sound/effects/gunrustle3.ogg')
+ sound = pick('sound/effects/gunrustle1.ogg', 'sound/effects/gunrustle2.ogg','sound/effects/gunrustle3.ogg')
if("gunequip")
- S = pick('sound/handling/gunequip1.ogg','sound/handling/gunequip2.ogg','sound/handling/gunequip3.ogg')
+ sound = pick('sound/handling/gunequip1.ogg','sound/handling/gunequip2.ogg','sound/handling/gunequip3.ogg')
if("shotgunpump")
- S = pick('sound/weapons/shotgunpump1.ogg','sound/weapons/shotgunpump2.ogg')
+ sound = pick('sound/weapons/shotgunpump1.ogg','sound/weapons/shotgunpump2.ogg')
if("clothingrustle")
- S = pick('sound/handling/clothingrustle1.ogg', 'sound/handling/clothingrustle2.ogg','sound/handling/clothingrustle3.ogg','sound/handling/clothingrustle4.ogg','sound/handling/clothingrustle5.ogg')
+ sound = pick('sound/handling/clothingrustle1.ogg', 'sound/handling/clothingrustle2.ogg','sound/handling/clothingrustle3.ogg','sound/handling/clothingrustle4.ogg','sound/handling/clothingrustle5.ogg')
if("armorequip")
- S = pick('sound/handling/armorequip_1.ogg','sound/handling/armorequip_2.ogg')
+ sound = pick('sound/handling/armorequip_1.ogg','sound/handling/armorequip_2.ogg')
if("pry")
- S = pick('sound/effects/pry1.ogg', 'sound/effects/pry2.ogg','sound/effects/pry3.ogg','sound/effects/pry4.ogg')
+ sound = pick('sound/effects/pry1.ogg', 'sound/effects/pry2.ogg','sound/effects/pry3.ogg','sound/effects/pry4.ogg')
if("metalbang")
- S = pick('sound/effects/thud1.ogg','sound/effects/thud2.ogg','sound/effects/thud3.ogg')
+ sound = pick('sound/effects/thud1.ogg','sound/effects/thud2.ogg','sound/effects/thud3.ogg')
if("paper_writing")
- S = pick('sound/items/writing_noises/paper_writing_1.wav', 'sound/items/writing_noises/paper_writing_2.wav', 'sound/items/writing_noises/paper_writing_3.wav', 'sound/items/writing_noises/paper_writing_4.ogg')
+ sound = pick('sound/items/writing_noises/paper_writing_1.wav', 'sound/items/writing_noises/paper_writing_2.wav', 'sound/items/writing_noises/paper_writing_3.wav', 'sound/items/writing_noises/paper_writing_4.ogg')
// Weapons/bullets
if("shell_load")
- S = pick('sound/weapons/shell_load1.ogg','sound/weapons/shell_load2.ogg','sound/weapons/shell_load3.ogg','sound/weapons/shell_load4.ogg')
+ sound = pick('sound/weapons/shell_load1.ogg','sound/weapons/shell_load2.ogg','sound/weapons/shell_load3.ogg','sound/weapons/shell_load4.ogg')
if("ballistic_hit")
- S = pick('sound/bullets/bullet_impact1.ogg','sound/bullets/bullet_impact2.ogg','sound/bullets/bullet_impact1.ogg','sound/bullets/impact_flesh_1.ogg','sound/bullets/impact_flesh_2.ogg','sound/bullets/impact_flesh_3.ogg','sound/bullets/impact_flesh_4.ogg')
+ sound = pick('sound/bullets/bullet_impact1.ogg','sound/bullets/bullet_impact2.ogg','sound/bullets/bullet_impact1.ogg','sound/bullets/impact_flesh_1.ogg','sound/bullets/impact_flesh_2.ogg','sound/bullets/impact_flesh_3.ogg','sound/bullets/impact_flesh_4.ogg')
if("ballistic_armor")
- S = pick('sound/bullets/bullet_armor1.ogg','sound/bullets/bullet_armor2.ogg','sound/bullets/bullet_armor3.ogg','sound/bullets/bullet_armor4.ogg')
+ sound = pick('sound/bullets/bullet_armor1.ogg','sound/bullets/bullet_armor2.ogg','sound/bullets/bullet_armor3.ogg','sound/bullets/bullet_armor4.ogg')
if("ballistic_miss")
- S = pick('sound/bullets/bullet_miss1.ogg','sound/bullets/bullet_miss2.ogg','sound/bullets/bullet_miss3.ogg','sound/bullets/bullet_miss4.ogg')
+ sound = pick('sound/bullets/bullet_miss1.ogg','sound/bullets/bullet_miss2.ogg','sound/bullets/bullet_miss3.ogg','sound/bullets/bullet_miss4.ogg')
if("ballistic_bounce")
- S = pick('sound/bullets/bullet_ricochet1.ogg','sound/bullets/bullet_ricochet2.ogg','sound/bullets/bullet_ricochet3.ogg','sound/bullets/bullet_ricochet4.ogg','sound/bullets/bullet_ricochet5.ogg','sound/bullets/bullet_ricochet6.ogg','sound/bullets/bullet_ricochet7.ogg','sound/bullets/bullet_ricochet8.ogg')
+ sound = pick('sound/bullets/bullet_ricochet1.ogg','sound/bullets/bullet_ricochet2.ogg','sound/bullets/bullet_ricochet3.ogg','sound/bullets/bullet_ricochet4.ogg','sound/bullets/bullet_ricochet5.ogg','sound/bullets/bullet_ricochet6.ogg','sound/bullets/bullet_ricochet7.ogg','sound/bullets/bullet_ricochet8.ogg')
if("ballistic_shield_hit")
- S = pick('sound/bullets/shield_impact_c1.ogg','sound/bullets/shield_impact_c2.ogg','sound/bullets/shield_impact_c3.ogg','sound/bullets/shield_impact_c4.ogg')
+ sound = pick('sound/bullets/shield_impact_c1.ogg','sound/bullets/shield_impact_c2.ogg','sound/bullets/shield_impact_c3.ogg','sound/bullets/shield_impact_c4.ogg')
if("shield_shatter")
- S = pick('sound/bullets/shield_break_c1.ogg')
+ sound = pick('sound/bullets/shield_break_c1.ogg')
if("rocket_bounce")
- S = pick('sound/bullets/rocket_ricochet1.ogg','sound/bullets/rocket_ricochet2.ogg','sound/bullets/rocket_ricochet3.ogg')
+ sound = pick('sound/bullets/rocket_ricochet1.ogg','sound/bullets/rocket_ricochet2.ogg','sound/bullets/rocket_ricochet3.ogg')
if("energy_hit")
- S = pick('sound/bullets/energy_impact1.ogg')
+ sound = pick('sound/bullets/energy_impact1.ogg')
if("energy_miss")
- S = pick('sound/bullets/energy_miss1.ogg')
+ sound = pick('sound/bullets/energy_miss1.ogg')
if("energy_bounce")
- S = pick('sound/bullets/energy_ricochet1.ogg')
+ sound = pick('sound/bullets/energy_ricochet1.ogg')
if("alloy_hit")
- S = pick('sound/bullets/spear_impact1.ogg')
+ sound = pick('sound/bullets/spear_impact1.ogg')
if("alloy_armor")
- S = pick('sound/bullets/spear_armor1.ogg')
+ sound = pick('sound/bullets/spear_armor1.ogg')
if("alloy_bounce")
- S = pick('sound/bullets/spear_ricochet1.ogg','sound/bullets/spear_ricochet2.ogg')
+ sound = pick('sound/bullets/spear_ricochet1.ogg','sound/bullets/spear_ricochet2.ogg')
if("gun_silenced")
- S = pick('sound/weapons/gun_silenced_shot1.ogg','sound/weapons/gun_silenced_shot2.ogg')
+ sound = pick('sound/weapons/gun_silenced_shot1.ogg','sound/weapons/gun_silenced_shot2.ogg')
if("gun_pulse")
- S = pick('sound/weapons/gun_m41a_1.ogg','sound/weapons/gun_m41a_2.ogg','sound/weapons/gun_m41a_3.ogg','sound/weapons/gun_m41a_4.ogg','sound/weapons/gun_m41a_5.ogg','sound/weapons/gun_m41a_6.ogg')
+ sound = pick('sound/weapons/gun_m41a_1.ogg','sound/weapons/gun_m41a_2.ogg','sound/weapons/gun_m41a_3.ogg','sound/weapons/gun_m41a_4.ogg','sound/weapons/gun_m41a_5.ogg','sound/weapons/gun_m41a_6.ogg')
if("gun_smartgun")
- S = pick('sound/weapons/gun_smartgun1.ogg', 'sound/weapons/gun_smartgun2.ogg', 'sound/weapons/gun_smartgun3.ogg', 'sound/weapons/gun_smartgun4.ogg')
+ sound = pick('sound/weapons/gun_smartgun1.ogg', 'sound/weapons/gun_smartgun2.ogg', 'sound/weapons/gun_smartgun3.ogg', 'sound/weapons/gun_smartgun4.ogg')
if("gun_smartgun_rattle")
- S = pick('sound/weapons/gun_smartgun1_rattle.ogg', 'sound/weapons/gun_smartgun2_rattle.ogg', 'sound/weapons/gun_smartgun3_rattle.ogg', 'sound/weapons/gun_smartgun4_rattle.ogg')
+ sound = pick('sound/weapons/gun_smartgun1_rattle.ogg', 'sound/weapons/gun_smartgun2_rattle.ogg', 'sound/weapons/gun_smartgun3_rattle.ogg', 'sound/weapons/gun_smartgun4_rattle.ogg')
if("gun_jam_rack")
- S = pick('sound/weapons/handling/gun_jam_rack_1.ogg', 'sound/weapons/handling/gun_jam_rack_2.ogg', 'sound/weapons/handling/gun_jam_rack_3.ogg')
+ sound = pick('sound/weapons/handling/gun_jam_rack_1.ogg', 'sound/weapons/handling/gun_jam_rack_2.ogg', 'sound/weapons/handling/gun_jam_rack_3.ogg')
//A:CM gun sounds
if("gun_shotgun_tactical")
- S = pick('sound/weapons/gun_shotgun_tactical_1.ogg','sound/weapons/gun_shotgun_tactical_2.ogg','sound/weapons/gun_shotgun_tactical_3.ogg','sound/weapons/gun_shotgun_tactical_4.ogg')
+ sound = pick('sound/weapons/gun_shotgun_tactical_1.ogg','sound/weapons/gun_shotgun_tactical_2.ogg','sound/weapons/gun_shotgun_tactical_3.ogg','sound/weapons/gun_shotgun_tactical_4.ogg')
if("m4a3")
- S = pick('sound/weapons/gun_m4a3_1.ogg','sound/weapons/gun_m4a3_2.ogg','sound/weapons/gun_m4a3_3.ogg','sound/weapons/gun_m4a3_4.ogg','sound/weapons/gun_m4a3_5.ogg')
+ sound = pick('sound/weapons/gun_m4a3_1.ogg','sound/weapons/gun_m4a3_2.ogg','sound/weapons/gun_m4a3_3.ogg','sound/weapons/gun_m4a3_4.ogg','sound/weapons/gun_m4a3_5.ogg')
if("88m4")
- S = pick('sound/weapons/gun_88m4_v7.ogg')
+ sound = pick('sound/weapons/gun_88m4_v7.ogg')
if("gun_casing_shotgun")
- S = pick ('sound/bullets/bulletcasing_shotgun_fall1.ogg')
+ sound = pick ('sound/bullets/bulletcasing_shotgun_fall1.ogg')
if("gun_nsg23")
- S = pick('sound/weapons/gun_nsg23_1.ogg','sound/weapons/gun_nsg23_2.ogg')
+ sound = pick('sound/weapons/gun_nsg23_1.ogg','sound/weapons/gun_nsg23_2.ogg')
if("gun_pkd")
- S = pick('sound/weapons/gun_pkd_fire01.ogg','sound/weapons/gun_pkd_fire02.ogg','sound/weapons/gun_pkd_fire03.ogg')
+ sound = pick('sound/weapons/gun_pkd_fire01.ogg','sound/weapons/gun_pkd_fire02.ogg','sound/weapons/gun_pkd_fire03.ogg')
// Xeno
if("acid_hit")
- S = pick('sound/bullets/acid_impact1.ogg')
+ sound = pick('sound/bullets/acid_impact1.ogg')
if("acid_strike")
- S = pick('sound/weapons/alien_acidstrike1.ogg','sound/weapons/alien_acidstrike2.ogg')
+ sound = pick('sound/weapons/alien_acidstrike1.ogg','sound/weapons/alien_acidstrike2.ogg')
if("acid_spit")
- S = pick('sound/voice/alien_spitacid.ogg','sound/voice/alien_spitacid2.ogg')
+ sound = pick('sound/voice/alien_spitacid.ogg','sound/voice/alien_spitacid2.ogg')
if("acid_sizzle")
- S = pick('sound/effects/acid_sizzle1.ogg','sound/effects/acid_sizzle2.ogg','sound/effects/acid_sizzle3.ogg','sound/effects/acid_sizzle4.ogg')
+ sound = pick('sound/effects/acid_sizzle1.ogg','sound/effects/acid_sizzle2.ogg','sound/effects/acid_sizzle3.ogg','sound/effects/acid_sizzle4.ogg')
if("alien_doorpry")
- S = pick('sound/effects/alien_doorpry1.ogg','sound/effects/alien_doorpry2.ogg')
+ sound = pick('sound/effects/alien_doorpry1.ogg','sound/effects/alien_doorpry2.ogg')
if("acid_bounce")
- S = pick('sound/bullets/acid_impact1.ogg')
+ sound = pick('sound/bullets/acid_impact1.ogg')
if("alien_claw_flesh")
- S = pick('sound/weapons/alien_claw_flesh1.ogg','sound/weapons/alien_claw_flesh2.ogg','sound/weapons/alien_claw_flesh3.ogg','sound/weapons/alien_claw_flesh4.ogg','sound/weapons/alien_claw_flesh5.ogg','sound/weapons/alien_claw_flesh6.ogg')
+ sound = pick('sound/weapons/alien_claw_flesh1.ogg','sound/weapons/alien_claw_flesh2.ogg','sound/weapons/alien_claw_flesh3.ogg','sound/weapons/alien_claw_flesh4.ogg','sound/weapons/alien_claw_flesh5.ogg','sound/weapons/alien_claw_flesh6.ogg')
if("alien_claw_metal")
- S = pick('sound/weapons/alien_claw_metal1.ogg','sound/weapons/alien_claw_metal2.ogg','sound/weapons/alien_claw_metal3.ogg')
+ sound = pick('sound/weapons/alien_claw_metal1.ogg','sound/weapons/alien_claw_metal2.ogg','sound/weapons/alien_claw_metal3.ogg')
if("alien_bite")
- S = pick('sound/weapons/alien_bite1.ogg','sound/weapons/alien_bite2.ogg')
+ sound = pick('sound/weapons/alien_bite1.ogg','sound/weapons/alien_bite2.ogg')
if("alien_footstep_large")
- S = pick('sound/effects/alien_footstep_large1.ogg','sound/effects/alien_footstep_large2.ogg','sound/effects/alien_footstep_large3.ogg')
+ sound = pick('sound/effects/alien_footstep_large1.ogg','sound/effects/alien_footstep_large2.ogg','sound/effects/alien_footstep_large3.ogg')
if("alien_footstep_medium")
- S = pick('sound/effects/alien_footstep_medium1.ogg','sound/effects/alien_footstep_medium2.ogg','sound/effects/alien_footstep_medium3.ogg')
+ sound = pick('sound/effects/alien_footstep_medium1.ogg','sound/effects/alien_footstep_medium2.ogg','sound/effects/alien_footstep_medium3.ogg')
if("alien_charge")
- S = pick('sound/effects/alien_footstep_charge1.ogg','sound/effects/alien_footstep_charge2.ogg','sound/effects/alien_footstep_charge3.ogg')
+ sound = pick('sound/effects/alien_footstep_charge1.ogg','sound/effects/alien_footstep_charge2.ogg','sound/effects/alien_footstep_charge3.ogg')
if("alien_resin_build")
- S = pick('sound/effects/alien_resin_build1.ogg','sound/effects/alien_resin_build2.ogg','sound/effects/alien_resin_build3.ogg')
+ sound = pick('sound/effects/alien_resin_build1.ogg','sound/effects/alien_resin_build2.ogg','sound/effects/alien_resin_build3.ogg')
if("alien_resin_break")
- S = pick('sound/effects/alien_resin_break1.ogg','sound/effects/alien_resin_break2.ogg','sound/effects/alien_resin_break3.ogg')
+ sound = pick('sound/effects/alien_resin_break1.ogg','sound/effects/alien_resin_break2.ogg','sound/effects/alien_resin_break3.ogg')
if("alien_resin_move")
- S = pick('sound/effects/alien_resin_move1.ogg','sound/effects/alien_resin_move2.ogg')
+ sound = pick('sound/effects/alien_resin_move1.ogg','sound/effects/alien_resin_move2.ogg')
if("alien_talk")
- S = pick('sound/voice/alien_talk.ogg','sound/voice/alien_talk2.ogg','sound/voice/alien_talk3.ogg')
+ sound = pick('sound/voice/alien_talk.ogg','sound/voice/alien_talk2.ogg','sound/voice/alien_talk3.ogg')
if("larva_talk")
- S = pick('sound/voice/larva_talk1.ogg','sound/voice/larva_talk2.ogg','sound/voice/larva_talk3.ogg','sound/voice/larva_talk4.ogg')
+ sound = pick('sound/voice/larva_talk1.ogg','sound/voice/larva_talk2.ogg','sound/voice/larva_talk3.ogg','sound/voice/larva_talk4.ogg')
if("hiss_talk")
- S = pick('sound/voice/hiss2.ogg','sound/voice/hiss3.ogg','sound/voice/hiss4.ogg')
+ sound = pick('sound/voice/hiss2.ogg','sound/voice/hiss3.ogg','sound/voice/hiss4.ogg')
if("alien_growl")
- S = pick('sound/voice/alien_growl1.ogg','sound/voice/alien_growl2.ogg','sound/voice/alien_growl3.ogg')
+ sound = pick('sound/voice/alien_growl1.ogg','sound/voice/alien_growl2.ogg','sound/voice/alien_growl3.ogg')
if("alien_hiss")
- S = pick('sound/voice/alien_hiss1.ogg','sound/voice/alien_hiss2.ogg','sound/voice/alien_hiss3.ogg')
+ sound = pick('sound/voice/alien_hiss1.ogg','sound/voice/alien_hiss2.ogg','sound/voice/alien_hiss3.ogg')
if("alien_tail_swipe")
- S = pick('sound/effects/alien_tail_swipe1.ogg','sound/effects/alien_tail_swipe2.ogg','sound/effects/alien_tail_swipe3.ogg')
+ sound = pick('sound/effects/alien_tail_swipe1.ogg','sound/effects/alien_tail_swipe2.ogg','sound/effects/alien_tail_swipe3.ogg')
if("alien_help")
- S = pick('sound/voice/alien_help1.ogg','sound/voice/alien_help2.ogg','sound/voice/alien_help3.ogg')
+ sound = pick('sound/voice/alien_help1.ogg','sound/voice/alien_help2.ogg','sound/voice/alien_help3.ogg')
if("alien_drool")
- S = pick('sound/voice/alien_drool1.ogg','sound/voice/alien_drool2.ogg')
+ sound = pick('sound/voice/alien_drool1.ogg','sound/voice/alien_drool2.ogg')
if("alien_roar")
- S = pick('sound/voice/alien_roar1.ogg','sound/voice/alien_roar2.ogg','sound/voice/alien_roar3.ogg','sound/voice/alien_roar4.ogg','sound/voice/alien_roar5.ogg','sound/voice/alien_roar6.ogg')
+ sound = pick('sound/voice/alien_roar1.ogg','sound/voice/alien_roar2.ogg','sound/voice/alien_roar3.ogg','sound/voice/alien_roar4.ogg','sound/voice/alien_roar5.ogg','sound/voice/alien_roar6.ogg')
if("alien_roar_larva")
- S = pick('sound/voice/alien_roar_larva1.ogg','sound/voice/alien_roar_larva2.ogg')
+ sound = pick('sound/voice/alien_roar_larva1.ogg','sound/voice/alien_roar_larva2.ogg')
if("queen")
- S = pick('sound/voice/alien_queen_command.ogg','sound/voice/alien_queen_command2.ogg','sound/voice/alien_queen_command3.ogg')
+ sound = pick('sound/voice/alien_queen_command.ogg','sound/voice/alien_queen_command2.ogg','sound/voice/alien_queen_command3.ogg')
// Human
if("male_scream")
- S = pick('sound/voice/human_male_scream_1.ogg','sound/voice/human_male_scream_2.ogg','sound/voice/human_male_scream_3.ogg','sound/voice/human_male_scream_4.ogg',5;'sound/voice/human_male_scream_5.ogg',5;'sound/voice/human_jackson_scream.ogg',5;'sound/voice/human_ack_scream.ogg','sound/voice/human_male_scream_6.ogg')
+ sound = pick('sound/voice/human_male_scream_1.ogg','sound/voice/human_male_scream_2.ogg','sound/voice/human_male_scream_3.ogg','sound/voice/human_male_scream_4.ogg',5;'sound/voice/human_male_scream_5.ogg',5;'sound/voice/human_jackson_scream.ogg',5;'sound/voice/human_ack_scream.ogg','sound/voice/human_male_scream_6.ogg')
if("male_pain")
- S = pick('sound/voice/human_male_pain_1.ogg','sound/voice/human_male_pain_2.ogg','sound/voice/human_male_pain_3.ogg',5;'sound/voice/tomscream.ogg',5;'sound/voice/human_bobby_pain.ogg',5;'sound/voice/human_tantrum_scream.ogg', 5;'sound/voice/human_male_pain_rare_1.ogg')
+ sound = pick('sound/voice/human_male_pain_1.ogg','sound/voice/human_male_pain_2.ogg','sound/voice/human_male_pain_3.ogg',5;'sound/voice/tomscream.ogg',5;'sound/voice/human_bobby_pain.ogg',5;'sound/voice/human_tantrum_scream.ogg', 5;'sound/voice/human_male_pain_rare_1.ogg')
if("male_fragout")
- S = pick('sound/voice/human_male_grenadethrow_1.ogg', 'sound/voice/human_male_grenadethrow_2.ogg', 'sound/voice/human_male_grenadethrow_3.ogg')
+ sound = pick('sound/voice/human_male_grenadethrow_1.ogg', 'sound/voice/human_male_grenadethrow_2.ogg', 'sound/voice/human_male_grenadethrow_3.ogg')
if("male_warcry")
- S = pick('sound/voice/warcry/male_go.ogg', 'sound/voice/warcry/male_attack.ogg', 'sound/voice/warcry/male_charge.ogg', 'sound/voice/warcry/male_charge2.ogg', 'sound/voice/warcry/warcry_male_1.ogg', 'sound/voice/warcry/warcry_male_2.ogg', 'sound/voice/warcry/warcry_male_3.ogg', 'sound/voice/warcry/warcry_male_4.ogg', 'sound/voice/warcry/warcry_male_5.ogg', 'sound/voice/warcry/warcry_male_6.ogg', 'sound/voice/warcry/warcry_male_7.ogg', 'sound/voice/warcry/warcry_male_8.ogg', 'sound/voice/warcry/warcry_male_9.ogg', 'sound/voice/warcry/warcry_male_10.ogg', 'sound/voice/warcry/warcry_male_11.ogg', 'sound/voice/warcry/warcry_male_12.ogg', 'sound/voice/warcry/warcry_male_13.ogg', 'sound/voice/warcry/warcry_male_14.ogg', 'sound/voice/warcry/warcry_male_15.ogg', 'sound/voice/warcry/warcry_male_16.ogg', 'sound/voice/warcry/warcry_male_17.ogg', 'sound/voice/warcry/warcry_male_18.ogg', 'sound/voice/warcry/warcry_male_19.ogg', 'sound/voice/warcry/warcry_male_20.ogg', 'sound/voice/warcry/warcry_male_21.ogg', 'sound/voice/warcry/warcry_male_22.ogg', 'sound/voice/warcry/warcry_male_23.ogg', 'sound/voice/warcry/warcry_male_24.ogg', 'sound/voice/warcry/warcry_male_25.ogg', 'sound/voice/warcry/warcry_male_26.ogg', 'sound/voice/warcry/warcry_male_27.ogg', 'sound/voice/warcry/warcry_male_28.ogg', 'sound/voice/warcry/warcry_male_29.ogg', 'sound/voice/warcry/warcry_male_30.ogg', 'sound/voice/warcry/warcry_male_31.ogg', 'sound/voice/warcry/warcry_male_32.ogg', 'sound/voice/warcry/warcry_male_33.ogg', 'sound/voice/warcry/warcry_male_34.ogg', 'sound/voice/warcry/warcry_male_35.ogg', 5;'sound/voice/warcry/warcry_male_rare_1.ogg', 5;'sound/voice/warcry/warcry_male_rare_2.ogg', 5;'sound/voice/warcry/warcry_male_rare_3.ogg', 5;'sound/voice/warcry/warcry_male_rare_4.ogg', 5;'sound/voice/warcry/warcry_male_rare_5.ogg')
+ sound = pick('sound/voice/warcry/male_go.ogg', 'sound/voice/warcry/male_attack.ogg', 'sound/voice/warcry/male_charge.ogg', 'sound/voice/warcry/male_charge2.ogg', 'sound/voice/warcry/warcry_male_1.ogg', 'sound/voice/warcry/warcry_male_2.ogg', 'sound/voice/warcry/warcry_male_3.ogg', 'sound/voice/warcry/warcry_male_4.ogg', 'sound/voice/warcry/warcry_male_5.ogg', 'sound/voice/warcry/warcry_male_6.ogg', 'sound/voice/warcry/warcry_male_7.ogg', 'sound/voice/warcry/warcry_male_8.ogg', 'sound/voice/warcry/warcry_male_9.ogg', 'sound/voice/warcry/warcry_male_10.ogg', 'sound/voice/warcry/warcry_male_11.ogg', 'sound/voice/warcry/warcry_male_12.ogg', 'sound/voice/warcry/warcry_male_13.ogg', 'sound/voice/warcry/warcry_male_14.ogg', 'sound/voice/warcry/warcry_male_15.ogg', 'sound/voice/warcry/warcry_male_16.ogg', 'sound/voice/warcry/warcry_male_17.ogg', 'sound/voice/warcry/warcry_male_18.ogg', 'sound/voice/warcry/warcry_male_19.ogg', 'sound/voice/warcry/warcry_male_20.ogg', 'sound/voice/warcry/warcry_male_21.ogg', 'sound/voice/warcry/warcry_male_22.ogg', 'sound/voice/warcry/warcry_male_23.ogg', 'sound/voice/warcry/warcry_male_24.ogg', 'sound/voice/warcry/warcry_male_25.ogg', 'sound/voice/warcry/warcry_male_26.ogg', 'sound/voice/warcry/warcry_male_27.ogg', 'sound/voice/warcry/warcry_male_28.ogg', 'sound/voice/warcry/warcry_male_29.ogg', 'sound/voice/warcry/warcry_male_30.ogg', 'sound/voice/warcry/warcry_male_31.ogg', 'sound/voice/warcry/warcry_male_32.ogg', 'sound/voice/warcry/warcry_male_33.ogg', 'sound/voice/warcry/warcry_male_34.ogg', 'sound/voice/warcry/warcry_male_35.ogg', 5;'sound/voice/warcry/warcry_male_rare_1.ogg', 5;'sound/voice/warcry/warcry_male_rare_2.ogg', 5;'sound/voice/warcry/warcry_male_rare_3.ogg', 5;'sound/voice/warcry/warcry_male_rare_4.ogg', 5;'sound/voice/warcry/warcry_male_rare_5.ogg')
if("male_upp_warcry")
- S = pick('sound/voice/upp_warcry/warcry_male_1.ogg', 'sound/voice/upp_warcry/warcry_male_2.ogg')
+ sound = pick('sound/voice/upp_warcry/warcry_male_1.ogg', 'sound/voice/upp_warcry/warcry_male_2.ogg')
if("female_scream")
- S = pick('sound/voice/human_female_scream_1.ogg','sound/voice/human_female_scream_2.ogg','sound/voice/human_female_scream_3.ogg','sound/voice/human_female_scream_4.ogg',5;'sound/voice/human_female_scream_5.ogg')
+ sound = pick('sound/voice/human_female_scream_1.ogg','sound/voice/human_female_scream_2.ogg','sound/voice/human_female_scream_3.ogg','sound/voice/human_female_scream_4.ogg',5;'sound/voice/human_female_scream_5.ogg')
if("female_pain")
- S = pick('sound/voice/human_female_pain_1.ogg','sound/voice/human_female_pain_2.ogg','sound/voice/human_female_pain_3.ogg')
+ sound = pick('sound/voice/human_female_pain_1.ogg','sound/voice/human_female_pain_2.ogg','sound/voice/human_female_pain_3.ogg')
if("female_fragout")
- S = pick("sound/voice/human_female_grenadethrow_1.ogg", 'sound/voice/human_female_grenadethrow_2.ogg', 'sound/voice/human_female_grenadethrow_3.ogg')
+ sound = pick("sound/voice/human_female_grenadethrow_1.ogg", 'sound/voice/human_female_grenadethrow_2.ogg', 'sound/voice/human_female_grenadethrow_3.ogg')
if("female_warcry")
- S = pick('sound/voice/warcry/female_charge.ogg', 'sound/voice/warcry/female_yell1.ogg', 'sound/voice/warcry/warcry_female_1.ogg', 'sound/voice/warcry/warcry_female_2.ogg', 'sound/voice/warcry/warcry_female_3.ogg', 'sound/voice/warcry/warcry_female_4.ogg', 'sound/voice/warcry/warcry_female_5.ogg', 'sound/voice/warcry/warcry_female_6.ogg', 'sound/voice/warcry/warcry_female_7.ogg', 'sound/voice/warcry/warcry_female_8.ogg', 'sound/voice/warcry/warcry_female_9.ogg', 'sound/voice/warcry/warcry_female_10.ogg', 'sound/voice/warcry/warcry_female_11.ogg', 'sound/voice/warcry/warcry_female_12.ogg', 'sound/voice/warcry/warcry_female_13.ogg', 'sound/voice/warcry/warcry_female_14.ogg', 'sound/voice/warcry/warcry_female_15.ogg', 'sound/voice/warcry/warcry_female_16.ogg', 'sound/voice/warcry/warcry_female_17.ogg', 'sound/voice/warcry/warcry_female_18.ogg', 'sound/voice/warcry/warcry_female_19.ogg', 'sound/voice/warcry/warcry_female_20.ogg')
+ sound = pick('sound/voice/warcry/female_charge.ogg', 'sound/voice/warcry/female_yell1.ogg', 'sound/voice/warcry/warcry_female_1.ogg', 'sound/voice/warcry/warcry_female_2.ogg', 'sound/voice/warcry/warcry_female_3.ogg', 'sound/voice/warcry/warcry_female_4.ogg', 'sound/voice/warcry/warcry_female_5.ogg', 'sound/voice/warcry/warcry_female_6.ogg', 'sound/voice/warcry/warcry_female_7.ogg', 'sound/voice/warcry/warcry_female_8.ogg', 'sound/voice/warcry/warcry_female_9.ogg', 'sound/voice/warcry/warcry_female_10.ogg', 'sound/voice/warcry/warcry_female_11.ogg', 'sound/voice/warcry/warcry_female_12.ogg', 'sound/voice/warcry/warcry_female_13.ogg', 'sound/voice/warcry/warcry_female_14.ogg', 'sound/voice/warcry/warcry_female_15.ogg', 'sound/voice/warcry/warcry_female_16.ogg', 'sound/voice/warcry/warcry_female_17.ogg', 'sound/voice/warcry/warcry_female_18.ogg', 'sound/voice/warcry/warcry_female_19.ogg', 'sound/voice/warcry/warcry_female_20.ogg')
if("female_upp_warcry")
- S = pick('sound/voice/upp_warcry/warcry_female_1.ogg', 'sound/voice/upp_warcry/warcry_female_2.ogg')
+ sound = pick('sound/voice/upp_warcry/warcry_female_1.ogg', 'sound/voice/upp_warcry/warcry_female_2.ogg')
if("rtb_handset")
- S = pick('sound/machines/telephone/rtb_handset_1.ogg', 'sound/machines/telephone/rtb_handset_2.ogg', 'sound/machines/telephone/rtb_handset_3.ogg', 'sound/machines/telephone/rtb_handset_4.ogg', 'sound/machines/telephone/rtb_handset_5.ogg')
+ sound = pick('sound/machines/telephone/rtb_handset_1.ogg', 'sound/machines/telephone/rtb_handset_2.ogg', 'sound/machines/telephone/rtb_handset_3.ogg', 'sound/machines/telephone/rtb_handset_4.ogg', 'sound/machines/telephone/rtb_handset_5.ogg')
+ if("talk_phone")
+ sound = pick('sound/machines/telephone/talk_phone1.ogg', 'sound/machines/telephone/talk_phone2.ogg', 'sound/machines/telephone/talk_phone3.ogg', 'sound/machines/telephone/talk_phone4.ogg', 'sound/machines/telephone/talk_phone5.ogg', 'sound/machines/telephone/talk_phone6.ogg', 'sound/machines/telephone/talk_phone7.ogg')
if("bone_break")
- S = pick('sound/effects/bone_break1.ogg','sound/effects/bone_break2.ogg','sound/effects/bone_break3.ogg','sound/effects/bone_break4.ogg','sound/effects/bone_break5.ogg','sound/effects/bone_break6.ogg','sound/effects/bone_break7.ogg')
+ sound = pick('sound/effects/bone_break1.ogg','sound/effects/bone_break2.ogg','sound/effects/bone_break3.ogg','sound/effects/bone_break4.ogg','sound/effects/bone_break5.ogg','sound/effects/bone_break6.ogg','sound/effects/bone_break7.ogg')
if("plush")
- S = pick('sound/items/plush1.ogg', 'sound/items/plush2.ogg', 'sound/items/plush3.ogg')
+ sound = pick('sound/items/plush1.ogg', 'sound/items/plush2.ogg', 'sound/items/plush3.ogg')
//misc mobs
if("cat_meow")
- S = pick('sound/voice/cat_meow_1.ogg','sound/voice/cat_meow_2.ogg','sound/voice/cat_meow_3.ogg','sound/voice/cat_meow_4.ogg','sound/voice/cat_meow_5.ogg','sound/voice/cat_meow_6.ogg','sound/voice/cat_meow_7.ogg')
+ sound = pick('sound/voice/cat_meow_1.ogg','sound/voice/cat_meow_2.ogg','sound/voice/cat_meow_3.ogg','sound/voice/cat_meow_4.ogg','sound/voice/cat_meow_5.ogg','sound/voice/cat_meow_6.ogg','sound/voice/cat_meow_7.ogg')
if("pred_pain")
- S = pick('sound/voice/pred_pain1.ogg','sound/voice/pred_pain2.ogg','sound/voice/pred_pain3.ogg','sound/voice/pred_pain4.ogg','sound/voice/pred_pain5.ogg',5;'sound/voice/pred_pain_rare1.ogg')
+ sound = pick('sound/voice/pred_pain1.ogg','sound/voice/pred_pain2.ogg','sound/voice/pred_pain3.ogg','sound/voice/pred_pain4.ogg','sound/voice/pred_pain5.ogg',5;'sound/voice/pred_pain_rare1.ogg')
if("clownstep")
- S = pick('sound/effects/clownstep1.ogg', 'sound/effects/clownstep2.ogg')
- return S
+ sound = pick('sound/effects/clownstep1.ogg', 'sound/effects/clownstep2.ogg')
+ return sound
/client/proc/generate_sound_queues()
set name = "Queue sounds"
@@ -388,21 +410,21 @@
var/x = tgui_input_number(usr, "Center X")
var/y = tgui_input_number(usr, "Center Y")
var/z = tgui_input_number(usr, "Z level")
- var/datum/sound_template/S
+ var/datum/sound_template/template
for(var/i = 1, i <= ammount, i++)
- S = new
- S.file = get_sfx("male_warcry") // warcry has variable length, lots of variations
- S.channel = get_free_channel() // i'm convinced this is bad, but it's here to mirror playsound() behaviour
- S.range = range
- S.x = x
- S.y = y
- S.z = z
- SSsound.queue(S)
+ template = new
+ template.file = get_sfx("male_warcry") // warcry has variable length, lots of variations
+ template.channel = get_free_channel() // i'm convinced this is bad, but it's here to mirror playsound() behaviour
+ template.range = range
+ template.x = x
+ template.y = y
+ template.z = z
+ SSsound.queue(template)
/client/proc/sound_debug_query()
set name = "Dump Playing Client Sounds"
set desc = "dumps info about locally, playing sounds"
set category = "Debug"
- for(var/sound/S in SoundQuery())
- UNLINT(to_chat(src, "channel#[S.channel]: [S.status] - [S.file] - len=[length(S)], wait=[S.wait], offset=[S.offset], repeat=[S.repeat]")) // unlint until spacemandmm suite-1.7
+ for(var/sound/soundin in SoundQuery())
+ UNLINT(to_chat(src, "channel#[soundin.channel]: [soundin.status] - [soundin.file] - len=[length(soundin)], wait=[soundin.wait], offset=[soundin.offset], repeat=[soundin.repeat]")) // unlint until spacemandmm suite-1.7
diff --git a/code/game/turfs/closed.dm b/code/game/turfs/closed.dm
index abc745dbdd45..5571773ddb0f 100644
--- a/code/game/turfs/closed.dm
+++ b/code/game/turfs/closed.dm
@@ -282,11 +282,18 @@
/turf/closed/shuttle/twe_dropship/transparent
opacity = FALSE
-/turf/closed/shuttle/dropship2/tornado
- name = "\improper Tornado"
+/turf/closed/shuttle/dropship3
+ name = "\improper Saipan"
icon = 'icons/turf/dropship3.dmi'
+ icon_state = "1"
+
+/turf/closed/shuttle/dropship3/transparent
+ opacity = FALSE
+
+/turf/closed/shuttle/dropship3/tornado
+ name = "\improper Tornado"
-/turf/closed/shuttle/dropship2/tornado/typhoon
+/turf/closed/shuttle/dropship3/tornado/typhoon
name = "\improper Typhoon"
/turf/closed/shuttle/escapepod
diff --git a/code/game/turfs/transit.dm b/code/game/turfs/transit.dm
index 5b4645805d3b..dba90fff52f3 100644
--- a/code/game/turfs/transit.dm
+++ b/code/game/turfs/transit.dm
@@ -264,6 +264,10 @@
shuttle_tag = DROPSHIP_NORMANDY
dir = SOUTH
+/turf/open/space/transit/dropship/saipan
+ shuttle_tag = DROPSHIP_SAIPAN
+ dir = SOUTH
+
/turf/open/space/transit/south
dir = SOUTH
diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm
index 59a9d6d69315..0082cb6ae0ae 100644
--- a/code/game/turfs/turf.dm
+++ b/code/game/turfs/turf.dm
@@ -478,18 +478,20 @@
/turf/proc/AdjacentTurfs()
var/L[] = new()
- for(var/turf/t in oview(src,1))
+ FOR_DOVIEW(var/turf/t, 1, src, HIDE_INVISIBLE_OBSERVER)
if(!t.density)
if(!LinkBlocked(src, t) && !TurfBlockedNonWindow(t))
L.Add(t)
+ FOR_DOVIEW_END
return L
/turf/proc/AdjacentTurfsSpace()
var/L[] = new()
- for(var/turf/t in oview(src,1))
+ FOR_DOVIEW(var/turf/t, 1, src, HIDE_INVISIBLE_OBSERVER)
if(!t.density)
if(!LinkBlocked(src, t) && !TurfBlockedNonWindow(t))
L.Add(t)
+ FOR_DOVIEW_END
return L
/turf/proc/Distance(turf/t)
diff --git a/code/game/turfs/walls/walls.dm b/code/game/turfs/walls/walls.dm
index bb1694359b98..f82ba6ddadaf 100644
--- a/code/game/turfs/walls/walls.dm
+++ b/code/game/turfs/walls/walls.dm
@@ -566,7 +566,7 @@
// Check again for presence of objects
if(!material || (material != user.l_hand && material != user.r_hand) || material.amount <= 0)
- to_chat(user, SPAN_WARNING("You seems to have misplaced the repair material!"))
+ to_chat(user, SPAN_WARNING("You seem to have misplaced the repair material!"))
return FALSE
if(!NG.in_chamber || !NG.current_mag || NG.current_mag.current_rounds < (4*amount_needed-1))
diff --git a/code/game/verbs/ooc.dm b/code/game/verbs/ooc.dm
index a5ecea8b05a4..4d52635c6f88 100644
--- a/code/game/verbs/ooc.dm
+++ b/code/game/verbs/ooc.dm
@@ -7,6 +7,9 @@
to_chat(src, "Guests may not use OOC.")
return
+ if(!filter_message(src, msg))
+ return
+
msg = trim(strip_html(msg))
if(!msg) return
@@ -101,6 +104,9 @@
to_chat(src, "Guests may not use LOOC.")
return
+ if(!filter_message(src, msg))
+ return
+
msg = trim(strip_html(msg))
if(!msg) return
diff --git a/code/game/world.dm b/code/game/world.dm
index bf9534e5f926..101066c21cdb 100644
--- a/code/game/world.dm
+++ b/code/game/world.dm
@@ -114,7 +114,7 @@ GLOBAL_LIST_INIT(reboot_sfx, file2list("config/reboot_sfx.txt"))
GLOB.log_directory += "[replacetext(time_stamp(), ":", ".")]"
runtime_logging_ready = TRUE // Setting up logging now, so disabling early logging
- #ifndef UNIT_TESTS
+ #if !defined(UNIT_TESTS) && !defined(AUTOWIKI)
world.log = file("[GLOB.log_directory]/dd.log")
#endif
backfill_runtime_log()
diff --git a/code/modules/admin/player_panel/actions/physical.dm b/code/modules/admin/player_panel/actions/physical.dm
index 21e6fed4f825..21f5504455d2 100644
--- a/code/modules/admin/player_panel/actions/physical.dm
+++ b/code/modules/admin/player_panel/actions/physical.dm
@@ -73,26 +73,9 @@
var/datum/job/job = GET_MAPPED_ROLE(target.job)
if(ishuman(target))
var/mob/living/carbon/human/H = target
+ job.on_cryo(H)
if(H.assigned_squad)
var/datum/squad/S = H.assigned_squad
- if(H.job == JOB_SQUAD_SPECIALIST)
- //we make the set this specialist took if any available again
- if(H.skills)
- var/set_name
- switch(H.skills.get_skill_level(SKILL_SPEC_WEAPONS))
- if(SKILL_SPEC_ROCKET)
- set_name = "Demolitionist Set"
- if(SKILL_SPEC_GRENADIER)
- set_name = "Heavy Grenadier Set"
- if(SKILL_SPEC_PYRO)
- set_name = "Pyro Set"
- if(SKILL_SPEC_SCOUT)
- set_name = "Scout Set"
- if(SKILL_SPEC_SNIPER)
- set_name = "Sniper Set"
-
- if(set_name && !GLOB.available_specialist_sets.Find(set_name))
- GLOB.available_specialist_sets += set_name
S.forget_marine_in_squad(H)
message_admins("[key_name_admin(user)] sent [key_name_admin(target)] ([H.job]) to cryogenics.")
diff --git a/code/modules/admin/verbs/adminpanelweapons.dm b/code/modules/admin/verbs/adminpanelweapons.dm
index a8062e59eea8..26d6ca803b60 100644
--- a/code/modules/admin/verbs/adminpanelweapons.dm
+++ b/code/modules/admin/verbs/adminpanelweapons.dm
@@ -2,120 +2,68 @@
set name = "Weapons"
set category = "Admin.Ship"
- var/weapontype = tgui_alert(src, "What weapon?", "Choose wisely!", list("Missile", "Railgun"), 20 SECONDS)
- if(!weapontype)
- return
- var/hiteta = tgui_input_number(src, "Give an ETA for the weapon to hit.", "Don't make them wait too long!", 10, 120, 10, 20 SECONDS)
- if(!hiteta)
- return
- var/point_defense = tgui_alert(src, "Allow Point Defence of the ship to intercept, or for the weapon to miss?", "standard PD/miss chance is 30%.", list("Yes", "No"), 20 SECONDS)
- if(!point_defense)
- return
- point_defense = point_defense == "Yes"
- var/exactplace = tgui_alert(src, "Shoot it at random places, or where you're at?", "Choose wisely!", list("Random", "Where I am"), 20 SECONDS)
- if(!exactplace)
+ var/list/datum/space_weapon/potential_weapons = list()
+ for(var/weapon_to_get in GLOB.space_weapons)
+ var/datum/space_weapon/weapon_to_set = GLOB.space_weapons[weapon_to_get]
+ LAZYSET(potential_weapons, weapon_to_set.name, weapon_to_set)
+
+ var/weapon_type = tgui_input_list(src, "What weapon?", "Choose wisely!", potential_weapons)
+ if(!weapon_type)
return
- exactplace = exactplace == "Where I am"
- var/salvo
- var/quantity
- if(exactplace == FALSE)
- salvo = tgui_alert(src, "Make it a salvo or a single fire?", "Choose wisely!", list("Salvo", "Single"), 20 SECONDS)
- if(!salvo)
- return
- salvo = salvo == "Salvo"
- if(salvo == TRUE)
- quantity = tgui_input_number(src, "How many?", "Don't go overboard. Please.", 2, 10, 2, 20 SECONDS)
+ var/list/ammo_type = list()
+ var/answer = tgui_alert(src, "Use all ammo types?", "Ammo selector", list("Yes", "No", "Cancel"))
+ if(answer == "Yes")
+ ammo_type = potential_weapons[weapon_type].possibly_ammunition
+ else if(answer == "No")
+ var/list/datum/space_weapon_ammo/potential_ammo = list()
+ for(var/ammo_to_get in potential_weapons[weapon_type].possibly_ammunition)
+ var/datum/space_weapon_ammo/ammo_to_set = GLOB.space_weapons_ammo[ammo_to_get]
+ LAZYSET(potential_ammo, ammo_to_set.name, ammo_to_get)
- var/prompt = tgui_alert(src, "Are you sure you want to open fire at the USS Almayer with those parameters?", "Choose wisely!", list("Yes", "No"), 20 SECONDS)
- if(prompt != "Yes")
+ while(length(potential_ammo))
+ var/additional_ammo = tgui_input_list(src, "Choose ammo", "Ammo selector", potential_ammo, 20 SECONDS)
+ if(!additional_ammo)
+ break
+ ammo_type += potential_ammo[additional_ammo]
+ potential_ammo -= additional_ammo
+ else
return
- var/atom/picked_atom
- var/list/targets = list()
- switch(weapontype)
- if("Missile")
- if(exactplace == TRUE)
- shipwide_ai_announcement("DANGER: MISSILE WARNING. LAUNCH DETECTED, BRACE, BRACE, BRACE. ESTIMATED TIME: [hiteta] SECONDS.", MAIN_AI_SYSTEM, 'sound/effects/missile_warning.ogg')
- addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(weaponhits), 1, mob.loc, point_defense), hiteta SECONDS)
- message_admins("[key_name_admin(src)] Fired a Single Missile at the Almayer at their own location, [mob.loc], with point defense as [point_defense]")
- if(point_defense == TRUE)
- var/spoolup = hiteta - 4
- addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(shipwide_ai_announcement), "ATTENTION: TRACKING TARGET, SPOOLING UP POINT DEFENSE. ATTEMPTING TO INTERCEPT." , MAIN_AI_SYSTEM, 'sound/effects/supercapacitors_charging.ogg'), spoolup SECONDS)
+ if(!length(ammo_type))
+ return
- if(exactplace == FALSE)
- if(salvo == TRUE)
- shipwide_ai_announcement("DANGER: MISSILE SALVO DETECTED, BRACE, BRACE, BRACE. SALVO SIZE: [quantity], ESTIMATED TIME: [hiteta] SECONDS." , MAIN_AI_SYSTEM, 'sound/effects/missile_warning.ogg')
- targets = shipside_random_turf_picker(quantity)
- if(targets == null)
- tgui_alert(src, "Uh oh! Something broke at this point! Contact the coders!", "Acknowledge!", list("ok."), 10 SECONDS)
- return
- addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(weaponhits), 1, targets, point_defense, salvo), hiteta SECONDS)
- message_admins("[key_name_admin(src)] Fired a salvo of [quantity] Missiles at the Almayer at random places, with point defense as [point_defense]")
- if(point_defense == TRUE)
- var/spoolup = hiteta - 4
- addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(shipwide_ai_announcement), "ATTENTION: TRACKING TARGETS, SPOOLING UP POINT DEFENSE. ATTEMPTING TO INTERCEPT." , MAIN_AI_SYSTEM, 'sound/effects/supercapacitors_charging.ogg'), spoolup SECONDS)
- else
- shipwide_ai_announcement("DANGER: MISSILE WARNING. LAUNCH DETECTED, BRACE, BRACE, BRACE. ESTIMATED TIME: [hiteta] SECONDS.", MAIN_AI_SYSTEM, 'sound/effects/missile_warning.ogg')
- picked_atom = shipside_random_turf_picker(1)
- if(picked_atom == null)
- tgui_alert(src, "Uh oh! Something broke at this point! Contact the coders!", "Acknowledge!", list("ok."), 10 SECONDS)
- return
- addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(weaponhits), 1, picked_atom, point_defense), hiteta SECONDS)
- message_admins("[key_name_admin(src)] Fired a Single Missile at the Almayer at a random place, [picked_atom], with point defense as [point_defense]")
- if(point_defense == TRUE)
- var/spoolup = hiteta - 4
- addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(shipwide_ai_announcement), "ATTENTION: TRACKING TARGET, SPOOLING UP POINT DEFENSE. ATTEMPTING TO INTERCEPT." , MAIN_AI_SYSTEM, 'sound/effects/supercapacitors_charging.ogg'), spoolup SECONDS)
+ var/hit_eta = tgui_input_number(src, "Give an ETA for the weapon to hit.", "Don't make them wait too long!", 10, 120, 10, 20 SECONDS)
+ if(!hit_eta)
+ return
- if("Railgun")
- if(exactplace == TRUE)
- shipwide_ai_announcement("DANGER: RAILGUN EMISSIONS DETECTED, INCOMING SHOT. BRACE, BRACE, BRACE. ESTIMATED TIME: [hiteta] SECONDS." , MAIN_AI_SYSTEM, 'sound/effects/missile_warning.ogg')
- addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(weaponhits), 2, mob.loc, point_defense), hiteta SECONDS)
- message_admins("[key_name_admin(src)] Fired a single Railgun Slug at the Almayer at their location, [mob.loc], with the possibility of missing as [point_defense]")
+ var/intercept_chance = tgui_input_number(src, "Chance Point Defence of the ship to intercept, or for the weapon to miss?", "standard PD chance is 0%.", 0, 100, 0, 20 SECONDS)
+ var/targets
+ var/quantity = 1
+ if(tgui_alert(src, "Shoot it at random places, or where you're at?", "Choose wisely!", list("Random", "Where I am"), 20 SECONDS) == "Where I am")
+ targets = list(get_turf(mob))
+ else
+ quantity = tgui_input_number(src, "How many?", "Don't go overboard. Please.", 1, 256, 1, 20 SECONDS)
+ targets = shipside_random_turf_picker(quantity)
+
+ var/delay = tgui_input_number(src, "Give delay between hits in diceseconds (1/10 of second). (0 async hits, can cause emotional damage)", "Don't make them wait too long!", 0, 600, 0, 20 SECONDS)
- if(exactplace == FALSE)
- if(salvo == TRUE)
- shipwide_ai_announcement("DANGER: RAILGUN EMISSIONS DETECTED, SALVO INCOMING. BRACE, BRACE, BRACE. SALVO SIZE: [quantity], ESTIMATED TIME: [hiteta] SECONDS." , MAIN_AI_SYSTEM, 'sound/effects/missile_warning.ogg')
- targets = shipside_random_turf_picker(quantity)
- if(targets == null)
- tgui_alert(src, "Uh oh! Something broke at this point! Contact the coders!", "Acknowledge!", list("ok."), 10 SECONDS)
- return
- addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(weaponhits), 2, targets, point_defense, salvo), hiteta SECONDS)
- message_admins("[key_name_admin(src)] Fired a salvo of Railgun Slugs at the Almayer at random places, with the possibility of missing [point_defense]")
- picked_atom = null
- targets = null
+ if(tgui_alert(src, "Are you sure you want to open fire at the [MAIN_SHIP_NAME] with those parameters?", "Choose wisely!", list("Yes", "No")) != "Yes")
+ return
- if(salvo == FALSE)
- prompt = tgui_alert(src, "Are you sure you want to shoot a railgun slug at the USS Almayer at a random place?", "Choose wisely!", list("Yes", "No"), 20 SECONDS)
- if(prompt == "Yes")
- shipwide_ai_announcement("DANGER: RAILGUN EMISSIONS DETECTED, INCOMING SHOT. BRACE, BRACE, BRACE. ESTIMATED TIME: [hiteta] SECONDS." , MAIN_AI_SYSTEM, 'sound/effects/missile_warning.ogg')
- picked_atom = shipside_random_turf_picker(1)
- if(picked_atom == null)
- tgui_alert(src, "Uh oh! Something broke at this point! Contact the coders!", "Acknowledge!", list("ok."), 10 SECONDS)
- return
- addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(weaponhits), 2, picked_atom, point_defense), hiteta SECONDS)
- message_admins("[key_name_admin(src)] Fired a single Railgun Slug at the Almayer at a random location, [picked_atom], with the possibility of missing as [point_defense]")
+ potential_weapons[weapon_type].shot_message(length(targets), hit_eta)
+ addtimer(CALLBACK(potential_weapons[weapon_type], TYPE_PROC_REF(/datum/space_weapon, on_shot), targets, ammo_type, intercept_chance, delay), hit_eta SECONDS)
+ message_admins("[key_name_admin(src)] Fired [quantity] form [weapon_type] at the Almayer, with point defense as [intercept_chance]% with delay of [delay/10] seconds between hits")
+ if(intercept_chance)
+ addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(shipwide_ai_announcement), "ATTENTION: TRACKING TARGET[quantity > 1 ? "S" : ""], SPOOLING UP POINT DEFENSE. ATTEMPTING TO INTERCEPT." , MAIN_AI_SYSTEM, 'sound/effects/supercapacitors_charging.ogg'), (hit_eta - 4) SECONDS)
/proc/shipside_random_turf_picker(turfquantity)
-
- var/picked_atom
- var/picked_area
var/list/targets = list()
- var/list/turfs_of_area = list()
- for(var/currentturf in 1 to turfquantity)
- for(var/limiter in 1 to 120)
- picked_area = pick(GLOB.ship_areas)
- for(var/turf/my_turf in picked_area)
+ for(var/currentturf = 1 to turfquantity)
+ var/list/turfs_of_area = list()
+ for(var/area in GLOB.ship_areas)
+ for(var/turf/my_turf in area)
turfs_of_area += my_turf
- if(length(turfs_of_area) > 0)
- picked_atom = pick(turfs_of_area)
- if (picked_atom != null)
- targets += picked_atom
- break
-
- if(length(targets) < turfquantity)
- return null
- else
- return targets
-
+ targets += pick(turfs_of_area)
+ return targets
diff --git a/code/modules/almayer/weaponhits.dm b/code/modules/almayer/weaponhits.dm
index 1f3a566ebbda..428780a5aca5 100644
--- a/code/modules/almayer/weaponhits.dm
+++ b/code/modules/almayer/weaponhits.dm
@@ -1,123 +1,145 @@
-#define WEAPON_MISSILE 1
-#define WEAPON_RAILGUN 2
-#define HIT_CHANCE_CHEAT 100
-#define HIT_CHANCE_STANDARD 70
/**
- * Proc called to hit the ship with weapons
- *
- * Hits the ship with the weapon of choice
- * Calling Shakeship acoording to the weapon used
- * All sounds that should happen when they hit are in here already.
- * Probably doesn't work in other shipmaps.
- * Arguments:
- * * weaponused - chooses the weapon through a switchcase. 1 for missiles, 2 for railguns, 3 for particle cannons.
- * * location - location in the ship where the explosion will be created.
- * * point_defense - If you want the Almayer to attempt taking down the incoming fire
- * * salvo - identifies it as a salvo or not.
+ * Space weapons it's self for ship to ship or PKO/Xeno PKO things
*/
-/proc/weaponhits(weaponused, location, point_defense = FALSE, salvo = FALSE)
-
-
- switch(weaponused)
-
- if(WEAPON_MISSILE)
- var/datum/cause_data/ashm_cause_data = create_cause_data("Anti-Ship missile")
- if(point_defense == FALSE)
- if(salvo == TRUE)
- var/shotspacing
- for(var/turf/picked_atom in location)
- addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(cell_explosion), picked_atom, 400, 10, EXPLOSION_FALLOFF_SHAPE_EXPONENTIAL, null, ashm_cause_data), shotspacing SECONDS)
- shotspacing += 1
- shakeship(10, 10, TRUE, FALSE)
- weaponhits_effects(WEAPON_MISSILE)
- else
- cell_explosion(location, 350, 1, EXPLOSION_FALLOFF_SHAPE_EXPONENTIAL, null, ashm_cause_data)
- shakeship(10, 10, TRUE, FALSE)
- weaponhits_effects(WEAPON_MISSILE)
- if(point_defense == TRUE)
- var/hitchance = HIT_CHANCE_STANDARD
- if(salvo == TRUE)
- var/confirmedhit
- var/shotspacing
- for(var/turf/picked_atom in location)
- if(prob(hitchance))
- addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(cell_explosion), picked_atom, 400, 10, EXPLOSION_FALLOFF_SHAPE_EXPONENTIAL, null, ashm_cause_data), shotspacing SECONDS)
- shakeship(10, 10, TRUE, FALSE)
- confirmedhit += 1
- else
- weaponhits_effects(WEAPON_MISSILE, TRUE, shotspacing)
-
- shotspacing += 1
- if(confirmedhit > 0)
- weaponhits_effects(WEAPON_MISSILE, FALSE)
- confirmedhit = 0
- else
- if(prob(hitchance))
- cell_explosion(location, 400, 10, EXPLOSION_FALLOFF_SHAPE_EXPONENTIAL, null, ashm_cause_data)
- shakeship(10, 10, TRUE, FALSE)
- weaponhits_effects(WEAPON_MISSILE, FALSE)
- else
- weaponhits_effects(WEAPON_MISSILE, TRUE)
-
- if(WEAPON_RAILGUN)
- var/datum/cause_data/antishiprailgun_cause_data = create_cause_data("Railgun shot")
- var/hitchance = HIT_CHANCE_CHEAT
- if(point_defense == TRUE)
- hitchance = HIT_CHANCE_STANDARD
- if(salvo == TRUE)
- var/confirmedhit
- for(var/turf/picked_atom in location)
- if(prob(hitchance))
- cell_explosion(picked_atom, 600, 600, EXPLOSION_FALLOFF_SHAPE_EXPONENTIAL, null, antishiprailgun_cause_data)
- shakeship(5, 5, FALSE, FALSE)
- confirmedhit += 1
- if(confirmedhit > 0)
- weaponhits_effects(WEAPON_RAILGUN)
- if(confirmedhit < 1)
- weaponhits_effects(WEAPON_RAILGUN, TRUE)
-
- else if(salvo == FALSE)
- if(prob(hitchance))
- cell_explosion(location, 600, 600, EXPLOSION_FALLOFF_SHAPE_EXPONENTIAL, null, antishiprailgun_cause_data)
- shakeship(5, 5, FALSE, FALSE)
- weaponhits_effects(WEAPON_RAILGUN)
- else
- weaponhits_effects(WEAPON_RAILGUN, TRUE)
-
-/proc/weaponhits_effects(weaponused, weaponmiss = FALSE, shotspacing = 0)
- switch(weaponused)
- if(WEAPON_MISSILE)
- if(!weaponmiss)
- for(var/mob/living/carbon/current_mob in GLOB.living_mob_list)
- if(!is_mainship_level(current_mob.z))
- continue
- playsound_client(current_mob.client, 'sound/effects/metal_crash.ogg', 100 )
- playsound_client(current_mob.client, 'sound/effects/bigboom3.ogg', 100)
- addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(playsound_client), current_mob.client, 'sound/effects/pry2.ogg', 20), 1 SECONDS)
- addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(playsound_client), current_mob.client, 'sound/effects/double_klaxon.ogg'), 2 SECONDS)
- else
- for(var/mob/living/carbon/current_mob in GLOB.living_mob_list)
- if(!is_mainship_level(current_mob.z))
- continue
- addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(playsound_client), current_mob.client, 'sound/effects/laser_point_defence_success.ogg', 100), shotspacing SECONDS)
- addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(to_chat), current_mob.client, SPAN_DANGER("You hear the Point Defense systems shooting down a missile!")), shotspacing SECONDS)
-
- if(WEAPON_RAILGUN)
- if(!weaponmiss)
- for(var/mob/living/carbon/current_mob in GLOB.living_mob_list)
- if(!is_mainship_level(current_mob.z))
- continue
- playsound_client(current_mob.client, 'sound/effects/bigboom3.ogg', 50)
- playsound_client(current_mob.client, 'sound/effects/railgunhit.ogg', 50)
- addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(playsound_client), current_mob.client, 'sound/effects/double_klaxon.ogg'), 2 SECONDS)
- else
- for(var/mob/living/carbon/current_mob in GLOB.living_mob_list)
- if(!is_mainship_level(current_mob.z))
- continue
- playsound_client (current_mob.client, 'sound/effects/railgun_miss.ogg', 60)
- to_chat(current_mob.client, SPAN_DANGER("You hear railgun shots barely missing the hull!"))
-//REMOVE THIS WHEN WE USE THESE DEFS SOMEWHERE ELSE OR ELSE IT STRAIGHT UP WON'T WORK.
-#undef WEAPON_MISSILE
-#undef WEAPON_RAILGUN
-#undef HIT_CHANCE_CHEAT
-#undef HIT_CHANCE_STANDARD
+/datum/space_weapon
+ var/name = "SMP"
+ var/list/possibly_ammunition = list()
+ //add some useful things here and make it object... later... skill issue.
+
+/datum/space_weapon/proc/on_shot(location, list/potential_ammo, intercept_chance, delay = 0)
+ var/intercepted = 0
+ var/missed = 0
+ var/hits = 0
+ for(var/turf/picked_atom in location)
+ var/datum/space_weapon_ammo/ammo = GLOB.space_weapons_ammo[pick(potential_ammo)]
+ var/accuracy = rand(1, 100)
+ if(ammo.interceptable && intercept_chance > accuracy)
+ ammo.miss_target(picked_atom, TRUE)
+ intercepted++
+ else if(ammo.base_miss_chance + intercept_chance > accuracy)
+ ammo.miss_target(picked_atom, FALSE)
+ missed++
+ else
+ ammo.hit_target(picked_atom)
+ hits++
+ sleep(delay)
+ shipwide_ai_announcement("WARNING, [hits] HIT SHIP HULL, [missed] MISSED AND [intercepted] INTERCEPTED!", MAIN_AI_SYSTEM, 'sound/effects/double_klaxon.ogg')
+
+/datum/space_weapon/proc/shot_message(quantity, hit_eta)
+ return
+
+/datum/space_weapon/rail_gun
+ name = "Railgun"
+ possibly_ammunition = list(
+ /datum/space_weapon_ammo/rail_gun,
+ /datum/space_weapon_ammo/rail_gun/stronk,
+ )
+
+/datum/space_weapon/rail_gun/shot_message(quantity, hit_eta)
+ shipwide_ai_announcement("DANGER: RAILGUN EMISSIONS DETECTED, INCOMING PROJECTILE[quantity > 1 ? "S" : ""]. BRACE, BRACE, BRACE. [quantity > 1 ? "SALVO SIZE: [quantity]," : ""] ESTIMATED TIME: [hit_eta] SECONDS." , MAIN_AI_SYSTEM, 'sound/effects/missile_warning.ogg')
+
+/datum/space_weapon/rocket_launcher
+ name = "Rocket Launcher"
+ possibly_ammunition = list(
+ /datum/space_weapon_ammo/rocket_launcher,
+ /datum/space_weapon_ammo/rocket_launcher/swing_rockets,
+ )
+
+/datum/space_weapon/rocket_launcher/shot_message(quantity, hit_eta)
+ shipwide_ai_announcement("DANGER: MISSILE WARNING, LAUNCH DETECTED. BRACE, BRACE, BRACE. [quantity > 1 ? "SALVO SIZE: [quantity]," : ""] ESTIMATED TIME: [hit_eta] SECONDS." , MAIN_AI_SYSTEM, 'sound/effects/missile_warning.ogg')
+
+/**
+ * Ammo datum for space weapons
+ */
+/datum/space_weapon_ammo
+ var/name = "SMP"
+ var/base_miss_chance = 25
+ var/list/miss_sound = list()
+ var/list/intercept_sound = list()
+ var/list/hit_sound = list()
+ var/interceptable = TRUE
+
+/datum/space_weapon_ammo/proc/miss_target(picked_atom, intercepted)
+ return
+
+/datum/space_weapon_ammo/proc/hit_target(picked_atom)
+ return
+
+/datum/space_weapon_ammo/rail_gun
+ name = "Piercing Near-Lightning Railgun Projectile"
+ base_miss_chance = 35
+ miss_sound = list('sound/effects/railgun_miss.ogg')
+ intercept_sound = list('sound/effects/laser_point_defence_success.ogg')
+ hit_sound = list('sound/effects/railgunhit.ogg')
+
+/datum/space_weapon_ammo/rail_gun/miss_target(picked_atom, intercepted)
+ var/list/echo_list = new /list(18)
+ echo_list[ECHO_OBSTRUCTION] = -2500
+ if(intercepted)
+ playsound(picked_atom, pick(intercept_sound), 100, 1, 100, echo = echo_list)
+ else
+ playsound(picked_atom, pick(miss_sound), 5, 1, 100, echo = echo_list)
+ shipwide_ai_announcement("[capitalize(name)] [intercepted ? "INTERCEPTED" : "MISSED"]!", MAIN_AI_SYSTEM, 'sound/effects/double_klaxon.ogg')
+
+/datum/space_weapon_ammo/rail_gun/hit_target(picked_atom)
+ var/list/echo_list = new /list(18)
+ echo_list[ECHO_OBSTRUCTION] = -500
+ cell_explosion(picked_atom, 1000, 200, EXPLOSION_FALLOFF_SHAPE_EXPONENTIAL, null, create_cause_data(name))
+ shakeship(5, 5, FALSE, FALSE)
+ playsound(picked_atom, "bigboom", 50, 1, 200, echo = echo_list)
+ playsound(picked_atom, pick(hit_sound), 50, 1, 200, echo = echo_list)
+ shipwide_ai_announcement("WARNING, [capitalize(name)] HIT SHIP HULL, CAUSED MASSIVE DAMAGE!", MAIN_AI_SYSTEM, 'sound/effects/double_klaxon.ogg')
+
+/datum/space_weapon_ammo/rail_gun/stronk
+ name = "Piercing Near-Lightning Railgun Projectile of Increased Strength"
+ base_miss_chance = 50
+ interceptable = FALSE
+
+/datum/space_weapon_ammo/rocket_launcher
+ name = "Anti-Ship missile"
+ base_miss_chance = 15
+ miss_sound = list('sound/effects/metal_shatter.ogg')
+ intercept_sound = list('sound/effects/laser_point_defence_success.ogg')
+ hit_sound = list('sound/effects/metal_crash.ogg')
+
+/datum/space_weapon_ammo/rocket_launcher/miss_target(picked_atom, intercepted)
+ var/list/echo_list = new(18)
+ echo_list[ECHO_OBSTRUCTION] = -2500
+ if(intercepted)
+ playsound(picked_atom, pick(intercept_sound), 100, 1, 100, echo = echo_list)
+ else
+ playsound(picked_atom, pick(miss_sound), 5, 1, 100, echo = echo_list)
+ shipwide_ai_announcement("[capitalize(name)] [intercepted ? "INTERCEPTED" : "MISSED"]!", MAIN_AI_SYSTEM, 'sound/effects/double_klaxon.ogg')
+
+/datum/space_weapon_ammo/rocket_launcher/hit_target(picked_atom)
+ var/list/echo_list = new(18)
+ echo_list[ECHO_OBSTRUCTION] = -500
+ cell_explosion(picked_atom, 500, 10, EXPLOSION_FALLOFF_SHAPE_EXPONENTIAL, null, create_cause_data(name))
+ shakeship(5, 5, FALSE, FALSE)
+ playsound(picked_atom, "bigboom", 50, 1, 200, echo = echo_list)
+ playsound(picked_atom, pick(hit_sound), 50, 1, 200, echo = echo_list)
+ playsound(picked_atom, "pry", 25, 1, 200, echo = echo_list)
+ shipwide_ai_announcement("WARNING, [capitalize(name)] HIT SHIP HULL, CAUSED MASSIVE DAMAGE!", MAIN_AI_SYSTEM, 'sound/effects/double_klaxon.ogg')
+
+/datum/space_weapon_ammo/rocket_launcher/swing_rockets
+ name = "Swing High Pierce Shreder Rockets"
+ base_miss_chance = 0
+
+/datum/space_weapon_ammo/rocket_launcher/swing_rockets/hit_target(picked_atom)
+ var/list/echo_list = new /list(18)
+ echo_list[ECHO_OBSTRUCTION] = -500
+ var/list/turf_list = list()
+ for(var/turf/turf in range(7, picked_atom))
+ turf_list += turf
+
+ playsound(picked_atom, "pry", 25, 1, 200, echo = echo_list)
+ playsound(picked_atom, pick(hit_sound), 50, 1, 200, echo = echo_list)
+ playsound(picked_atom, "bigboom", 50, 1, 200, echo = echo_list)
+ for(var/i = 1 to 12)
+ var/turf/turf = pick(turf_list)
+ cell_explosion(turf, 100, 10, EXPLOSION_FALLOFF_SHAPE_EXPONENTIAL, null, create_cause_data(name))
+ playsound(turf, "bigboom", 40, 1, 20, echo = echo_list)
+ shakeship(2, 2, FALSE, FALSE)
+ sleep(1)
+
+ shipwide_ai_announcement("WARNING, [capitalize(name)] HIT SHIP HULL, CAUSED MASSIVE DOT DAMAGE!", MAIN_AI_SYSTEM, 'sound/effects/double_klaxon.ogg')
diff --git a/code/modules/asset_cache/asset_list_items.dm b/code/modules/asset_cache/asset_list_items.dm
index e826b0b64767..3ee8ef5b616d 100644
--- a/code/modules/asset_cache/asset_list_items.dm
+++ b/code/modules/asset_cache/asset_list_items.dm
@@ -281,44 +281,50 @@
name = "vending"
/datum/asset/spritesheet/vending_products/register()
- for (var/k in GLOB.vending_products)
- var/atom/item = k
+ for (var/current_product in GLOB.vending_products)
+ var/atom/item = current_product
var/icon_file = initial(item.icon)
var/icon_state = initial(item.icon_state)
- var/icon/I
+ var/icon/new_icon
if (!ispath(item, /atom))
log_debug("not atom! [item]")
continue
- var/imgid = replacetext(replacetext("[k]", "/obj/item/", ""), "/", "-")
+ var/imgid = replacetext(replacetext("[current_product]", "/obj/item/", ""), "/", "-")
if(sprites[imgid])
continue
if(icon_state in icon_states(icon_file))
- I = icon(icon_file, icon_state, SOUTH)
- var/c = initial(item.color)
- if (!isnull(c) && c != "#FFFFFF")
- I.Blend(c, ICON_MULTIPLY)
+ if(ispath(current_product, /obj/item/storage/box) || ispath(current_product, /obj/item/ammo_box) || ispath(current_product, /obj/item/reagent_container))
+ item = new current_product()
+ new_icon = getFlatIcon(item)
+ new_icon.Scale(32,32)
+ qdel(item)
+ else
+ new_icon = icon(icon_file, icon_state, SOUTH)
+ var/new_color = initial(item.color)
+ if (!isnull(new_color) && new_color != "#FFFFFF")
+ new_icon.Blend(new_color, ICON_MULTIPLY)
else
- if (ispath(k, /obj/effect/essentials_set))
- var/obj/effect/essentials_set/es_set = new k()
- var/list/spawned_list = es_set.spawned_gear_list
+ if(ispath(current_product, /obj/effect/essentials_set))
+ var/obj/effect/essentials_set/essentials = new current_product()
+ var/list/spawned_list = essentials.spawned_gear_list
if(LAZYLEN(spawned_list))
var/obj/item/target = spawned_list[1]
icon_file = initial(target.icon)
icon_state = initial(target.icon_state)
var/target_obj = new target()
- I = getFlatIcon(target_obj)
- I.Scale(32,32)
+ new_icon = getFlatIcon(target_obj)
+ new_icon.Scale(32,32)
qdel(target_obj)
else
- item = new k()
- I = icon(item.icon, item.icon_state, SOUTH)
+ item = new current_product()
+ new_icon = icon(item.icon, item.icon_state, SOUTH)
qdel(item)
- Insert(imgid, I)
+ Insert(imgid, new_icon)
return ..()
@@ -390,8 +396,8 @@
var/icon_state = temp_gun.base_gun_icon // base_gun_icon is set in Initialize generally
qdel(temp_gun)
if(icon_state && isnull(sprites[icon_state]))
- // upgrade this to a stack_trace once all guns have a lineart and we want to lint against that
- log_debug("[current_gun] does not have a valid lineart icon state, icon=[icon_file], icon_state=[json_encode(icon_state)]")
+ // downgrade this to a log_debug if we don't want missing lineart to be a lint
+ stack_trace("[current_gun] does not have a valid lineart icon state, icon=[icon_file], icon_state=[json_encode(icon_state)]")
..()
diff --git a/code/modules/autowiki/autowiki.dm b/code/modules/autowiki/autowiki.dm
index 8b38ec76706b..5f8fe0a10a1f 100644
--- a/code/modules/autowiki/autowiki.dm
+++ b/code/modules/autowiki/autowiki.dm
@@ -23,6 +23,26 @@
for (var/datum/autowiki/autowiki_type as anything in subtypesof(/datum/autowiki))
var/datum/autowiki/autowiki = new autowiki_type
+
+ if(autowiki.generate_multiple)
+ var/output = autowiki.generate_multiple()
+
+ if (!islist(output))
+ CRASH("[autowiki_type] does not generate a proper output when generate_multiple is set!")
+
+ for(var/list in output)
+ total_output += json_encode(list) + "\n"
+
+ if(!autowiki.page)
+ continue
+
+ var/list/all_page_names = list()
+ for(var/list in output)
+ all_page_names += autowiki.include_template(list["title"])
+
+ total_output += json_encode(list("title" = autowiki.page, "text" = all_page_names))
+ continue
+
var/output = autowiki.generate()
if (!istext(output))
diff --git a/code/modules/autowiki/pages/_page.dm b/code/modules/autowiki/pages/_page.dm
index 8e745ace61c2..7bd7b6dcf42c 100644
--- a/code/modules/autowiki/pages/_page.dm
+++ b/code/modules/autowiki/pages/_page.dm
@@ -6,12 +6,20 @@
/// For example: "Template:Autowiki/CircuitInfo".
var/page
+ /// If the generation of this autowiki should call /generate_multiple(),
+ /// which should return a list of list(title = "Page Title", contents)
+ /// allowing for the generation of multiple pages in the same autowiki
+ var/generate_multiple = FALSE
+
/// Override and return the new text of the page.
/// This proc can be impure, usually to call `upload_file`.
/datum/autowiki/proc/generate()
SHOULD_CALL_PARENT(FALSE)
CRASH("[type] does not implement generate()!")
+/datum/autowiki/proc/generate_multiple()
+ SHOULD_CALL_PARENT(FALSE)
+
/// Generates an auto formatted template user.
/// Your autowiki should ideally be a *lot* of these.
/// It lets wiki editors edit it much easier later, without having to enter repo.
@@ -19,6 +27,7 @@
/// something that looks like `{{ Autowiki_Circuit|name=Combiner|description=This combines }}`
/// Lists, which must be array-like (no keys), will be turned into a flat list with their key and a number,
/// such that list("food" = list("fruit", "candy")) -> food1=fruit|food2=candy
+/// Your page should respect AUTOWIKI_SKIP, and check for this using IS_AUTOWIKI_SKIP
/datum/autowiki/proc/include_template(name, parameters)
var/template_text = "{{[name]"
diff --git a/code/modules/autowiki/pages/guns.dm b/code/modules/autowiki/pages/guns.dm
index 7f63602d56f0..4c276fb91b53 100644
--- a/code/modules/autowiki/pages/guns.dm
+++ b/code/modules/autowiki/pages/guns.dm
@@ -1,9 +1,10 @@
/datum/autowiki/guns
+ generate_multiple = TRUE
page = "Template:Autowiki/Content/GunData"
-/datum/autowiki/guns/generate()
- var/output = ""
+/datum/autowiki/guns/generate_multiple()
+ var/output = list()
var/list/gun_to_ammo = list()
@@ -12,12 +13,20 @@
continue // Skip mags with no icon_state (e.g. base types)
LAZYADD(gun_to_ammo[initial(typepath.gun_type)], typepath)
- for(var/typepath in sort_list(subtypesof(/obj/item/weapon/gun), GLOBAL_PROC_REF(cmp_typepaths_asc)))
+ var/list/unique_typepaths = list()
+ for(var/obj/item/weapon/gun/typepath as anything in sort_list(subtypesof(/obj/item/weapon/gun), GLOBAL_PROC_REF(cmp_typepaths_name_asc)))
+ if(initial(typepath.name) in unique_typepaths)
+ continue
+
+ unique_typepaths[initial(typepath.name)] = typepath
+
+ for(var/name in unique_typepaths)
+ var/typepath = unique_typepaths[name]
+
var/obj/item/weapon/gun/generating_gun = typepath
if(isnull(initial(generating_gun.icon_state)))
continue // Skip guns with no icon_state (e.g. base types)
-
- generating_gun = new typepath()
+ generating_gun = new typepath
var/filename = SANITIZE_FILENAME(escape_value(format_text(generating_gun.name)))
var/list/gun_data = generating_gun.ui_data()
@@ -33,6 +42,9 @@
for(var/ammo_typepath in valid_mag_types)
var/obj/item/ammo_magazine/generating_mag = new ammo_typepath()
+ if(IS_AUTOWIKI_SKIP(generating_mag))
+ continue
+
var/ammo_filename = SANITIZE_FILENAME(escape_value(format_text(generating_mag.name)))
if(!fexists("data/autowiki_files/[ammo_filename].png"))
@@ -52,6 +64,8 @@
))
generating_gun.current_mag = generating_mag
+ generating_gun.ammo = current_ammo
+ generating_gun.in_chamber = null
var/list/gun_ammo_data = generating_gun.ui_data()
var/list/armor_data = list()
@@ -59,18 +73,63 @@
var/iterator = 1
for(var/header in gun_ammo_data["damage_armor_profile_headers"])
var/damage = gun_ammo_data["damage_armor_profile_marine"][iterator]
+ if(!damage)
+ break
armor_data["armor-[header]"] = damage
iterator++
var/list/damage = list("ammo_name" = escape_value(generating_mag.name))
- damage += armor_data
+ if(length(armor_data))
+ damage += armor_data
damage_table += include_template("Autowiki/DamageVersusArmorRow", damage)
qdel(generating_mag)
+ var/grenades = ""
+ if(istype(generating_gun, /obj/item/weapon/gun/launcher/grenade))
+ var/obj/item/weapon/gun/launcher/grenade/generating_launcher = generating_gun
+
+ var/list/permitted_grenades = list()
+ for(var/obj/item/explosive/grenade/type as anything in generating_launcher.valid_munitions)
+ permitted_grenades |= subtypesof(type)
+
+ var/list/unique_grenades = list()
+ var/list/unique_grenade_names = list()
+ for(var/obj/item/explosive/grenade/grenade_type as anything in permitted_grenades)
+ if(initial(grenade_type.name) in unique_grenade_names)
+ continue
+ unique_grenade_names += initial(grenade_type.name)
+ unique_grenades += grenade_type
+
+ var/list/denied_grenades = list()
+ for(var/type in generating_launcher.disallowed_grenade_types)
+ denied_grenades |= typesof(type)
+
+ var/valid_grenades = unique_grenades.Copy() - denied_grenades.Copy()
+
+ for(var/grenade_path in valid_grenades)
+ var/obj/item/explosive/grenade/generating_grenade = new grenade_path()
+
+ if(IS_AUTOWIKI_SKIP(generating_grenade))
+ continue
+
+ var/grenade_filename = SANITIZE_FILENAME(escape_value(format_text(generating_grenade.name)))
+
+ if(!fexists("data/autowiki_files/[grenade_filename].png"))
+ upload_icon(getFlatIcon(generating_grenade, no_anim = TRUE), grenade_filename)
+
+ grenades += include_template("Autowiki/Grenade", list(
+ "icon" = escape_value(grenade_filename),
+ "name" = escape_value(generating_grenade.name),
+ "description" = escape_value(generating_grenade.desc)
+ ))
+
+ qdel(generating_grenade)
+
gun_data["ammo_types"] = ammo
gun_data["damage_table"] = damage_table
+ gun_data["grenades"] = grenades
var/list/attachments_by_slot = list()
for(var/obj/item/attachable/attachment_typepath as anything in generating_gun.attachable_allowed)
@@ -108,7 +167,9 @@
upload_icon(generated_icon, filename)
gun_data["icon"] = filename
- output += include_template("Autowiki/Gun", gun_data)
+ var/page_name = SANITIZE_FILENAME(replacetext(strip_improper(generating_gun.name), " ", "_"))
+ var/to_add = list(title = "Template:Autowiki/Content/Gun/[page_name]", text = include_template("Autowiki/Gun", gun_data))
+ output += list(to_add)
qdel(generating_gun)
diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm
index b4ee572d8d2d..dd0d406560ab 100644
--- a/code/modules/client/preferences.dm
+++ b/code/modules/client/preferences.dm
@@ -189,7 +189,7 @@ GLOBAL_LIST_INIT(bgstate_options, list(
var/gen_record = ""
var/exploit_record = ""
- var/nanotrasen_relation = "Neutral"
+ var/weyland_yutani_relation = "Neutral"
var/uplinklocation = "PDA"
@@ -426,7 +426,7 @@ GLOBAL_LIST_INIT(bgstate_options, list(
dat += "Origin: [origin] "
dat += "Religion: [religion] "
- dat += "Corporate Relation: [nanotrasen_relation] "
+ dat += "Corporate Relation: [weyland_yutani_relation] "
dat += "Preferred Squad: [preferred_squad] "
dat += "Fluff Information: "
@@ -1641,10 +1641,10 @@ GLOBAL_LIST_INIT(bgstate_options, list(
if(new_backbag)
backbag = GLOB.backbaglist.Find(new_backbag)
- if("nt_relation")
+ if("wy_relation")
var/new_relation = input(user, "Choose your relation to the Weyland-Yutani company. Note that this represents what others can find out about your character by researching your background, not what your character actually thinks.", "Character Preference") as null|anything in list("Loyal", "Supportive", "Neutral", "Skeptical", "Opposed")
if(new_relation)
- nanotrasen_relation = new_relation
+ weyland_yutani_relation = new_relation
if("prefsquad")
var/new_pref_squad = input(user, "Choose your preferred squad.", "Character Preference") as null|anything in list("Alpha", "Bravo", "Charlie", "Delta", "None")
diff --git a/code/modules/client/preferences_gear.dm b/code/modules/client/preferences_gear.dm
index 13a31b59fa97..79fd34b2660c 100644
--- a/code/modules/client/preferences_gear.dm
+++ b/code/modules/client/preferences_gear.dm
@@ -547,6 +547,10 @@ GLOBAL_LIST_EMPTY(gear_datums_by_name)
display_name = "Crayon"
path = /obj/item/toy/crayon/rainbow
+/datum/gear/toy/pride
+ display_name = "Box of Prideful Crayons"
+ path = /obj/item/storage/box/pride
+
/datum/gear/plush
category = "Plushies"
cost = 4
diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm
index 54e98aceea94..f383aade5932 100644
--- a/code/modules/client/preferences_savefile.dm
+++ b/code/modules/client/preferences_savefile.dm
@@ -1,5 +1,5 @@
#define SAVEFILE_VERSION_MIN 8
-#define SAVEFILE_VERSION_MAX 24
+#define SAVEFILE_VERSION_MAX 25
//handles converting savefiles to new formats
//MAKE SURE YOU KEEP THIS UP TO DATE!
@@ -147,6 +147,11 @@
sound_toggles |= (SOUND_FAX_MACHINE)
S["toggles_sound"] << sound_toggles
+ if(savefile_version < 25) //renemes nanotrasen to wy
+ var/relation
+ S["nanotrasen_relation"] >> relation
+ S["weyland_yutani_relation"] << relation
+
savefile_version = SAVEFILE_VERSION_MAX
return 1
@@ -540,7 +545,7 @@
S["preferred_squad"] >> preferred_squad
S["preferred_armor"] >> preferred_armor
- S["nanotrasen_relation"] >> nanotrasen_relation
+ S["weyland_yutani_relation"] >> weyland_yutani_relation
//S["skin_style"] >> skin_style
S["uplinklocation"] >> uplinklocation
@@ -556,7 +561,7 @@
if(isnull(language)) language = "None"
if(isnull(spawnpoint)) spawnpoint = "Arrivals Shuttle"
- if(isnull(nanotrasen_relation)) nanotrasen_relation = initial(nanotrasen_relation)
+ if(isnull(weyland_yutani_relation)) weyland_yutani_relation = initial(weyland_yutani_relation)
if(!real_name) real_name = random_name(gender)
be_random_name = sanitize_integer(be_random_name, 0, 1, initial(be_random_name))
be_random_body = sanitize_integer(be_random_body, 0, 1, initial(be_random_body))
@@ -690,7 +695,7 @@
S["religion"] << religion
S["traits"] << traits
- S["nanotrasen_relation"] << nanotrasen_relation
+ S["weyland_yutani_relation"] << weyland_yutani_relation
S["preferred_squad"] << preferred_squad
S["preferred_armor"] << preferred_armor
//S["skin_style"] << skin_style
diff --git a/code/modules/clothing/glasses/glasses.dm b/code/modules/clothing/glasses/glasses.dm
index 88605cb3b792..44d1e0a8bd0b 100644
--- a/code/modules/clothing/glasses/glasses.dm
+++ b/code/modules/clothing/glasses/glasses.dm
@@ -221,8 +221,8 @@
flags_equip_slot = SLOT_EYES|SLOT_FACE
/obj/item/clothing/glasses/regular/hipster
- name = "Sunglasses"
- desc = "They cut the sun and keep things fun. Why would you ever wear these indoors, or on a night operation. Are you trying to get yourself hurt?"
+ name = "Prescription Glasses"
+ desc = "Boring glasses, makes you look smart and potentially reputable."
icon_state = "hipster_glasses"
item_state = "hipster_glasses"
flags_equip_slot = SLOT_EYES|SLOT_FACE
diff --git a/code/modules/clothing/gloves/marine_gloves.dm b/code/modules/clothing/gloves/marine_gloves.dm
index 6da362da30f4..d36073bb48a0 100644
--- a/code/modules/clothing/gloves/marine_gloves.dm
+++ b/code/modules/clothing/gloves/marine_gloves.dm
@@ -42,6 +42,12 @@
item_state = "insulated"
siemens_coefficient = 0
+/obj/item/clothing/gloves/marine/insulated/black
+ name = "marine insulated black gloves"
+ desc = "These marine gloves will protect the wearer from electric shocks and shrapnal. Standard issue for properly-equipped Marines."
+ icon_state = "black"
+ item_state = "black"
+
/obj/item/clothing/gloves/marine/black
name = "marine black combat gloves"
adopts_squad_color = FALSE
diff --git a/code/modules/clothing/head/head.dm b/code/modules/clothing/head/head.dm
index 86527457bfce..f9c8adbf9a77 100644
--- a/code/modules/clothing/head/head.dm
+++ b/code/modules/clothing/head/head.dm
@@ -88,6 +88,16 @@
name = "USCM Squad Beret"
desc = "For those who want to show pride and have nothing to lose (in their head, at least)."
+/obj/item/clothing/head/beret/cm/white/civilian
+ name = "White Beret"
+ desc = "A nice fashionable beret, popular with executives."
+ icon_state = "s_beret"
+
+/obj/item/clothing/head/beret/cm/black/civilian
+ name = "Black Beret"
+ desc = "A nice fashionable beret, popular with executives."
+ icon_state = "beret_black"
+
/obj/item/clothing/head/beret/cm/squadberet/equipped(mob/user, slot)
. = ..()
self_set()
@@ -479,6 +489,10 @@
icon_state = "coblackberet"
desc = "A beret with the USCM Military Police insignia emblazoned on it."
+/obj/item/clothing/head/beret/marine/mp/provost/chief
+ name = "\improper USCM provost command beret"
+ icon_state = "pvciberet"
+
/obj/item/clothing/head/beret/marine/mp/tis
name = "\improper UAAC-TIS Special Agent Beret"
icon_state = "berettis"
@@ -567,6 +581,15 @@
desc = "A beret with the lieutenant insignia emblazoned on it. It inspires a feeling of respect."
icon_state = "beret_badge"
+/obj/item/clothing/head/beret/marine/ro
+ name = "\improper USCM quartermaster beret"
+ desc = "A beret with the sergeant insignia emblazoned on it. It symbolizes hard work and shady business."
+ icon = 'icons/obj/items/clothing/cm_hats.dmi'
+ icon_state = "ro_beret"
+ item_icons = list(
+ WEAR_HEAD = 'icons/mob/humans/onmob/head_1.dmi'
+ )
+
//==========================//PROTECTIVE\\===============================\\
//=======================================================================\\
diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm
index 463a4b16f7ec..140d73fd05a0 100644
--- a/code/modules/clothing/head/helmet.dm
+++ b/code/modules/clothing/head/helmet.dm
@@ -326,6 +326,15 @@ GLOBAL_LIST_INIT(allowed_helmet_items, list(
/obj/item/toy/crayon/blue = "crayonblue",
/obj/item/toy/crayon/purple = "crayonpurple",
/obj/item/toy/crayon/rainbow = "crayonrainbow",
+ /obj/item/toy/crayon/pride/trans = "crayontrans",
+ /obj/item/toy/crayon/pride/gay = "crayongay",
+ /obj/item/toy/crayon/pride/lesbian = "crayonlesbian",
+ /obj/item/toy/crayon/pride/bi = "crayonbi",
+ /obj/item/toy/crayon/pride/pan = "crayonpan",
+ /obj/item/toy/crayon/pride/ace = "crayonace",
+ /obj/item/toy/crayon/pride/trans = "crayontrans",
+ /obj/item/toy/crayon/pride/enby = "crayonenby",
+ /obj/item/toy/crayon/pride/fluid = "crayonfluid",
/obj/item/paper = "paper",
/obj/item/device/flashlight/flare = "flare",
/obj/item/clothing/head/headset = "headset",
@@ -379,8 +388,8 @@ GLOBAL_LIST_INIT(allowed_helmet_items, list(
)
var/obj/item/storage/internal/headgear/pockets
- var/storage_slots = 2 // keep in mind, one slot is reserved for garb items
- var/storage_slots_reserved_for_garb = 2
+ var/storage_slots = 2 // Small items like injectors, bandages, etc
+ var/storage_slots_reserved_for_garb = 2 // Cosmetic items & now cigarettes and lighters for RP
var/storage_max_w_class = SIZE_TINY // can hold tiny items only, EXCEPT for glasses & metal flask.
var/storage_max_storage_space = 4
diff --git a/code/modules/clothing/shoes/colour.dm b/code/modules/clothing/shoes/colour.dm
index 7d6c8ed3d5dc..f3de770790a8 100644
--- a/code/modules/clothing/shoes/colour.dm
+++ b/code/modules/clothing/shoes/colour.dm
@@ -29,10 +29,6 @@
name = "purple shoes"
icon_state = "purple"
-/obj/item/clothing/shoes/brown
- name = "brown shoes"
- icon_state = "brown"
-
/obj/item/clothing/shoes/red
name = "red shoes"
desc = "Stylish red shoes."
diff --git a/code/modules/clothing/shoes/marine_shoes.dm b/code/modules/clothing/shoes/marine_shoes.dm
index 7855075c2fb4..b71c69643ff4 100644
--- a/code/modules/clothing/shoes/marine_shoes.dm
+++ b/code/modules/clothing/shoes/marine_shoes.dm
@@ -99,6 +99,12 @@
armor_rad = CLOTHING_ARMOR_NONE
armor_internaldamage = CLOTHING_ARMOR_MEDIUMLOW
+/obj/item/clothing/shoes/stompers
+ name = "Reebok Stompers"
+ desc = "A pair of sneakers designed to elicit a morale boosting response within anyone that witnesses them."
+ icon_state = "stompers"
+ flags_inventory = NOSLIPPING
+
/obj/item/clothing/shoes/veteran/pmc
name = "polished shoes"
desc = "The height of fashion, but these look to be woven with protective fiber."
@@ -163,6 +169,8 @@
/obj/item/clothing/shoes/marine/corporate
name = "rugged boots"
desc = "These synth-leather boots seem high quality when first worn, but quickly detoriate, especially in the environments the corporate security members these are issued to operate in. Still, better than nothing."
+
+/obj/item/clothing/shoes/marine/corporate/knife
spawn_item_type = /obj/item/attachable/bayonet
/obj/item/clothing/shoes/marine/ress
diff --git a/code/modules/clothing/shoes/miscellaneous.dm b/code/modules/clothing/shoes/miscellaneous.dm
index 1a49dc7fe10f..91ae13958e46 100644
--- a/code/modules/clothing/shoes/miscellaneous.dm
+++ b/code/modules/clothing/shoes/miscellaneous.dm
@@ -141,6 +141,7 @@
icon_state = "laceups"
/obj/item/clothing/shoes/laceup/brown
+ name = "brown laceup shoes"
icon_state = "laceups_brown"
/obj/item/clothing/shoes/swimmingfins
diff --git a/code/modules/clothing/suits/marine_armor/_marine_armor.dm b/code/modules/clothing/suits/marine_armor/_marine_armor.dm
index 8a8d5934b506..0ba339433fc2 100644
--- a/code/modules/clothing/suits/marine_armor/_marine_armor.dm
+++ b/code/modules/clothing/suits/marine_armor/_marine_armor.dm
@@ -254,7 +254,7 @@
desc = "A standard Colonial Marines M2 Pattern Chestplate. Protects the chest from ballistic rounds, bladed objects and accidents. It has a small leather pouch strapped to it for limited storage."
icon_state = "mp_armor"
armor_melee = CLOTHING_ARMOR_MEDIUMHIGH
- armor_bullet = CLOTHING_ARMOR_LOW
+ armor_bullet = CLOTHING_ARMOR_MEDIUM
armor_laser = CLOTHING_ARMOR_LOW
armor_energy = CLOTHING_ARMOR_LOW
armor_bomb = CLOTHING_ARMOR_MEDIUM
@@ -287,19 +287,17 @@
black_market_value = 20
/obj/item/clothing/suit/storage/marine/MP/warden
- icon_state = "warden"
name = "\improper M3 pattern warden MP armor"
desc = "A well-crafted suit of M3 Pattern Armor typically distributed to Wardens. Useful for letting your men know who is in charge."
- armor_bio = CLOTHING_ARMOR_MEDIUMLOW
- armor_rad = CLOTHING_ARMOR_MEDIUMLOW
+ icon_state = "warden"
uniform_restricted = list(/obj/item/clothing/under/marine/warden)
specialty = "M3 pattern warden MP"
item_state_slots = list(WEAR_JACKET = "warden")
/obj/item/clothing/suit/storage/marine/MP/WO
- icon_state = "warrant_officer"
name = "\improper M3 pattern chief MP armor"
desc = "A well-crafted suit of M3 Pattern Armor typically distributed to Chief MPs. Useful for letting your men know who is in charge."
+ icon_state = "warrant_officer"
uniform_restricted = list(/obj/item/clothing/under/marine/officer/warrant)
specialty = "M3 pattern chief MP"
item_state_slots = list(WEAR_JACKET = "warrant_officer")
@@ -667,15 +665,6 @@
flags_item = MOB_LOCK_ON_EQUIP|NO_CRYO_STORE
unacidable = TRUE
-/obj/item/clothing/suit/storage/RO
- name = "quartermaster jacket"
- desc = "A green jacket worn by USCM personnel. The back has the flag of the United Americas on it."
- icon_state = "RO_jacket"
- blood_overlay_type = "coat"
- flags_armor_protection = BODY_FLAG_CHEST|BODY_FLAG_ARMS
- valid_accessory_slots = list(ACCESSORY_SLOT_ARMBAND, ACCESSORY_SLOT_DECOR, ACCESSORY_SLOT_MEDAL)
- restricted_accessory_slots = list(ACCESSORY_SLOT_ARMBAND)
-
//==================Combat Correspondent==================\\
/obj/item/clothing/suit/storage/marine/light/reporter
diff --git a/code/modules/clothing/suits/marine_armor/ghillie.dm b/code/modules/clothing/suits/marine_armor/ghillie.dm
index 44729ac16b2f..c55e1d054b79 100644
--- a/code/modules/clothing/suits/marine_armor/ghillie.dm
+++ b/code/modules/clothing/suits/marine_armor/ghillie.dm
@@ -11,6 +11,7 @@
specialty = "M45 pattern ghillie"
valid_accessory_slots = list(ACCESSORY_SLOT_ARMBAND, ACCESSORY_SLOT_DECOR, ACCESSORY_SLOT_MEDAL, ACCESSORY_SLOT_PONCHO)
restricted_accessory_slots = list(ACCESSORY_SLOT_ARMBAND)
+ unacidable = TRUE
var/camo_active = FALSE
var/hide_in_progress = FALSE
diff --git a/code/modules/clothing/suits/marine_armor/smartgunner.dm b/code/modules/clothing/suits/marine_armor/smartgunner.dm
index 8f39ef83045c..64cf88d22cfe 100644
--- a/code/modules/clothing/suits/marine_armor/smartgunner.dm
+++ b/code/modules/clothing/suits/marine_armor/smartgunner.dm
@@ -9,6 +9,7 @@
storage_slots = 2
slowdown = SLOWDOWN_ARMOR_LIGHT
flags_inventory = BLOCKSHARPOBJ|SMARTGUN_HARNESS
+ unacidable = TRUE
allowed = list(
/obj/item/tank/emergency_oxygen,
/obj/item/device/flashlight,
@@ -33,7 +34,8 @@
. = ..()
if(equipping_mob.back && !(equipping_mob.back.flags_item & SMARTGUNNER_BACKPACK_OVERRIDE))
- to_chat(equipping_mob, SPAN_WARNING("You can't equip [src] while wearing a backpack."))
+ if(!disable_warning)
+ to_chat(equipping_mob, SPAN_WARNING("You can't equip [src] while wearing a backpack."))
return FALSE
/obj/item/clothing/suit/storage/marine/smartgunner/equipped(mob/user, slot, silent)
diff --git a/code/modules/clothing/suits/marine_coat.dm b/code/modules/clothing/suits/marine_coat.dm
index 78c8154e1810..fc2a76698029 100644
--- a/code/modules/clothing/suits/marine_coat.dm
+++ b/code/modules/clothing/suits/marine_coat.dm
@@ -89,6 +89,16 @@
flags_atom = NO_SNOW_TYPE
initial_icon_state = "pilot_alt"
+/obj/item/clothing/suit/storage/jacket/marine/RO
+ name = "quartermaster jacket"
+ desc = "A green jacket worn by USCM personnel. The back has the flag of the United Americas on it."
+ icon_state = "RO_jacket"
+ icon = 'icons/obj/items/clothing/suits.dmi'
+ item_icons = list(
+ WEAR_JACKET = 'icons/mob/humans/onmob/suit_0.dmi'
+ )
+ flags_atom = NO_SNOW_TYPE
+
/obj/item/clothing/suit/storage/jacket/marine/service/mp
name = "military police service jacket"
desc = "A marine service jacket adopted for use by Military Police personnel on board USCM ships. Ironically most ships require their MP departments to use full armor, making these barely used by on duty MPs. This variant is also available to regular Marines, if they are willing to bear the shame."
@@ -243,6 +253,11 @@
flags_atom = NO_SNOW_TYPE|NO_NAME_OVERRIDE
valid_accessory_slots = list(ACCESSORY_SLOT_ARMBAND, ACCESSORY_SLOT_RANK, ACCESSORY_SLOT_DECOR)
+/obj/item/clothing/suit/storage/jacket/marine/provost/chief
+ name = "\improper Provost Command Jacket"
+ desc = "A crisp jacket with the Provost sigil."
+ icon_state = "provostci_jacket"
+
/obj/item/clothing/suit/storage/jacket/marine/provost/coat
name = "\improper Provost Coat"
desc = "The crisp coat of a Provost Officer."
diff --git a/code/modules/clothing/suits/storage.dm b/code/modules/clothing/suits/storage.dm
index 0d5fc31a2560..7ac0ddc018fa 100644
--- a/code/modules/clothing/suits/storage.dm
+++ b/code/modules/clothing/suits/storage.dm
@@ -10,6 +10,10 @@
pockets.max_storage_space = 4
flags_atom |= USES_HEARING
+/obj/item/clothing/suit/storage/Destroy()
+ QDEL_NULL(pockets)
+ return ..()
+
/obj/item/clothing/suit/storage/get_pockets()
if(pockets)
return pockets
diff --git a/code/modules/clothing/under/marine_uniform.dm b/code/modules/clothing/under/marine_uniform.dm
index 74cb5ea552ee..a9aec9544641 100644
--- a/code/modules/clothing/under/marine_uniform.dm
+++ b/code/modules/clothing/under/marine_uniform.dm
@@ -381,6 +381,12 @@
icon_state = "provost_tml"
worn_state = "provost_tml"
+/obj/item/clothing/under/marine/mp/provost/chief
+ name = "\improper Provost Command Uniform"
+ desc = "The crisp uniform of a commanding member of the Provost Office."
+ icon_state = "provost_ci"
+ worn_state = "provost_ci"
+
/obj/item/clothing/under/marine/mp/provost/marshal
name = "\improper Provost Marshal Uniform"
desc = "The crisp uniform of a Provost Marshal."
@@ -840,7 +846,7 @@
worn_state = "liaison_formal"
/obj/item/clothing/under/liaison_suit/suspenders
- name = "liaison's attire"
+ name = "liaison's suspenders"
desc = "A collared shirt, complimented by a pair of suspenders. Worn by Weyland-Yutani employees who ask the tough questions. Smells faintly of cigars and bad acting."
icon_state = "liaison_suspenders"
worn_state = "liaison_suspenders"
@@ -863,6 +869,12 @@
icon_state = "corporate_ivy"
worn_state = "corporate_ivy"
+/obj/item/clothing/under/liaison_suit/orange
+ name = "orange outfit"
+ desc = "A pair of black pants paired with a very Wey-Yu orange shirt. A popular look with those in the corporate world that conduct the majority of their business from Weyland Yutani offices."
+ icon_state = "corporate_orange"
+ worn_state = "corporate_orange"
+
/obj/item/clothing/under/liaison_suit/corporate_formal
name = "white suit pants"
desc = "A pair of ivory slacks paired with a white shirt. A popular pairing for formal corporate events."
diff --git a/code/modules/clothing/under/ties.dm b/code/modules/clothing/under/ties.dm
index d78c0faeeca8..cea9e26869b0 100644
--- a/code/modules/clothing/under/ties.dm
+++ b/code/modules/clothing/under/ties.dm
@@ -102,42 +102,60 @@
/obj/item/clothing/accessory/stethoscope
name = "stethoscope"
- desc = "An outdated medical apparatus for listening to the sounds of the human body. It also makes you look like you know what you're doing."
+ desc = "An outdated, but still useful, medical apparatus for listening to the sounds of the human body. It also makes you look like you know what you're doing."
icon_state = "stethoscope"
-/obj/item/clothing/accessory/stethoscope/attack(mob/living/carbon/human/M, mob/living/user)
- if(ishuman(M) && isliving(user))
+/obj/item/clothing/accessory/stethoscope/attack(mob/living/carbon/human/being, mob/living/user)
+ if(ishuman(being) && isliving(user))
if(user.a_intent == INTENT_HELP)
var/body_part = parse_zone(user.zone_selected)
if(body_part)
- var/their = "their"
- switch(M.gender)
- if(MALE) their = "his"
- if(FEMALE) their = "her"
-
- var/sound = "pulse"
- var/sound_strength
-
- if(M.stat == DEAD || (M.status_flags&FAKEDEATH))
- sound_strength = "cannot hear"
- sound = "anything"
+ var/sound = null
+ if(being.stat == DEAD || (being.status_flags&FAKEDEATH))
+ sound = "can't hear anything at all, they must have kicked the bucket"
else
- sound_strength = "hear a weak"
switch(body_part)
if("chest")
- if(M.oxyloss < 50)
- sound_strength = "hear a healthy"
- sound = "pulse and respiration"
+ if(skillcheck(user, SKILL_MEDICAL, SKILL_MEDICAL_MEDIC)) // only medical personnel can take advantage of it
+ if(!ishuman(being))
+ return // not a human; only humans have the variable internal_organs_by_name // "cast" it a human type since we confirmed it is one
+ if(isnull(being.internal_organs_by_name))
+ return // they have no organs somehow
+ var/datum/internal_organ/heart/heart = being.internal_organs_by_name["heart"]
+ if(heart)
+ switch(heart.organ_status)
+ if(ORGAN_LITTLE_BRUISED)
+ sound = "hear small murmurs with each heart beat , it is possible that [being.p_their()] heart is subtly damaged "
+ if(ORGAN_BRUISED)
+ sound = "hear deviant heart beating patterns , result of probable heart damage "
+ if(ORGAN_BROKEN)
+ sound = "hear irregular and additional heart beating patterns , probably caused by impaired blood pumping, [being.p_their()] heart is certainly failing "
+ else
+ sound = "hear normal heart beating patterns , [being.p_their()] heart is surely healthy "
+ var/datum/internal_organ/lungs/lungs = being.internal_organs_by_name["lungs"]
+ if(lungs)
+ if(sound)
+ sound += ". You also "
+ switch(lungs.organ_status)
+ if(ORGAN_LITTLE_BRUISED)
+ sound += "hear some crackles when [being.p_they()] breath , [being.p_they()] is possibly suffering from a small damage to the lungs "
+ if(ORGAN_BRUISED)
+ sound += "hear unusual respiration sounds and noticeable difficulty to breath, possibly signalling ruptured lungs "
+ if(ORGAN_BROKEN)
+ sound += "barely hear any respiration sounds and a lot of difficulty to breath, [being.p_their()] lungs are heavily failing "
+ else
+ sound += "hear normal respiration sounds aswell, that means [being.p_their()] lungs are healthy , probably"
+ else
+ sound = "can't hear. Really, anything at all, how weird"
+ else
+ sound = "hear a lot of sounds... it's quite hard to distinguish, really"
if("eyes","mouth")
- sound_strength = "cannot hear"
- sound = "anything"
+ sound = "can't hear anything. Maybe that isn't the smartest idea"
else
- sound_strength = "hear a weak"
-
- user.visible_message("[user] places [src] against [M]'s [body_part] and listens attentively.", "You place [src] against [their] [body_part]. You [sound_strength] [sound].")
+ sound = "hear a sound here and there, but none of them give you any good information"
+ user.visible_message("[user] places [src] against [being]'s [body_part] and listens attentively.", "You place [src] against [being.p_their()] [body_part] and... you [sound].")
return
- return ..(M,user)
-
+ return ..(being,user)
//Medals
/obj/item/clothing/accessory/medal
@@ -375,6 +393,11 @@
desc = "A fire-resistant shoulder patch, worn by the men and women of the Falling Falcons, the 2nd battalion of the 4th brigade of the USCM."
icon_state = "fallingfalconspatch"
+/obj/item/clothing/accessory/patch/devils
+ name = "USCM Solar Devils patch"
+ desc = "A fire-resistant shoulder patch, worn by the men and women of the 3rd Battalion 'Solar Devils', part of the USCM 2nd Division, 1st Regiment."
+ icon_state = "solardevilspatch"
+
/obj/item/clothing/accessory/patch/forecon
name = "USCM Force Reconnaissance patch"
desc = "A fire-resistant shoulder patch, worn by the men and women of the USS Hanyut, USCM FORECON."
@@ -584,6 +607,11 @@
desc = "A brown synthcotton webbing that is similar in function to civilian tool aprons, but is more durable for field usage."
hold = /obj/item/storage/internal/accessory/tool_webbing
+/obj/item/clothing/accessory/storage/tool_webbing/small
+ name = "Small Tool Webbing"
+ desc = "A brown synthcotton webbing that is similar in function to civilian tool aprons, but is more durable for field usage. This is the small low-budget version."
+ hold = /obj/item/storage/internal/accessory/tool_webbing/small
+
/obj/item/storage/internal/accessory/tool_webbing
storage_slots = 7
can_hold = list(
@@ -594,8 +622,24 @@
/obj/item/tool/wirecutters,
/obj/item/stack/cable_coil,
/obj/item/device/multitool,
+ /obj/item/tool/shovel/etool,
+ /obj/item/weapon/gun/smg/nailgun/compact,
)
+/obj/item/storage/internal/accessory/tool_webbing/small
+ storage_slots = 6
+
+/obj/item/clothing/accessory/storage/tool_webbing/small/equipped
+ hold = /obj/item/storage/internal/accessory/tool_webbing/small/equipped
+
+/obj/item/storage/internal/accessory/tool_webbing/small/equipped/fill_preset_inventory()
+ new /obj/item/tool/screwdriver(src)
+ new /obj/item/tool/wrench(src)
+ new /obj/item/tool/weldingtool(src)
+ new /obj/item/tool/crowbar(src)
+ new /obj/item/tool/wirecutters(src)
+ new /obj/item/device/multitool(src)
+
/obj/item/clothing/accessory/storage/tool_webbing/equipped
hold = /obj/item/storage/internal/accessory/tool_webbing/equipped
diff --git a/code/modules/cm_aliens/structures/special/pylon_core.dm b/code/modules/cm_aliens/structures/special/pylon_core.dm
index 71211d67e23c..6276215cf025 100644
--- a/code/modules/cm_aliens/structures/special/pylon_core.dm
+++ b/code/modules/cm_aliens/structures/special/pylon_core.dm
@@ -32,7 +32,7 @@
. = ..()
node = place_node()
- for(var/turf/A in range(floor(cover_range*PYLON_COVERAGE_MULT), loc))
+ for(var/turf/A as anything in RANGE_TURFS(floor(cover_range*PYLON_COVERAGE_MULT), loc))
LAZYADD(A.linked_pylons, src)
linked_turfs += A
diff --git a/code/modules/cm_aliens/weeds.dm b/code/modules/cm_aliens/weeds.dm
index 2206bc528e82..ed6d628b2263 100644
--- a/code/modules/cm_aliens/weeds.dm
+++ b/code/modules/cm_aliens/weeds.dm
@@ -624,7 +624,7 @@
return
/obj/effect/alien/weeds/node/pylon/cluster
- spread_on_semiweedable = FALSE
+ spread_on_semiweedable = TRUE
/obj/effect/alien/weeds/node/pylon/cluster/set_parent_damaged()
if(!resin_parent)
diff --git a/code/modules/cm_marines/Donator_Items.dm b/code/modules/cm_marines/Donator_Items.dm
index e534997ddd42..f8f2e61b8a37 100644
--- a/code/modules/cm_marines/Donator_Items.dm
+++ b/code/modules/cm_marines/Donator_Items.dm
@@ -244,11 +244,12 @@
icon_state = "tristan_armor"
item_state = "tristan_armor"
-/obj/item/clothing/suit/storage/marine/fluff/sas_legion //CKEY=sasoperative (UNIQUE)
- name = "Legion Armor"
- desc = "This armor was custom-made to resemble the small growing Legion within the galaxy started by one man slowly making its way to becoming a larger Corporation. DONOR ITEM."
- item_state = "ncrjacket"
- icon_state = "ncrjacket"
+/obj/item/clothing/suit/storage/marine/light/fluff/sas_legion //CKEY=sasoperative (UNIQUE)
+ name = "M3 Ranger Armor"
+ desc = "A set of M3 Pattern Ranger Armor, There probably are not many of these laying around. DONOR ITEM."
+ flags_atom = FPRINT|CONDUCT|NO_NAME_OVERRIDE
+ icon_state = "rangerarmor"
+ item_state = "rangerarmor"
/obj/item/clothing/suit/storage/marine/fluff/feodrich //CKEY=feodrich (UNIQUE)
name = "Doom Armor"
@@ -470,18 +471,6 @@
icon_state = "medicae_armor_u"
item_state = "medicae_armor_u"
-/obj/item/clothing/suit/storage/marine/fluff/Sanctum_heavy
- name = "Sanctum Founder Armor"
- desc = "Personal Armor of the Founder of Sanctum Team. It looks more like a Exosuit. Unique DONOR ITEM" //Add UNIQUE if Unique
- icon_state = "Sanctum_Heavy_u"
- item_state = "Sanctum_Heavy_u"
-
-/obj/item/clothing/suit/storage/marine/fluff/Sanctum_medium
- name = "Sanctum Standard Armor"
- desc = "The Standard Issue Armor for Sanctum Operatives Unique DONOR ITEM"
- icon_state = "Sanctum_Medium_u"
- item_state = "Sanctum_Medium_u"
-
/obj/item/clothing/suit/storage/marine/fluff/dudewithatude
name = "Rainbow Coat"
desc = "Powered by the magic of FRIENDSHIP. (Can be toggled opened or closed) UNIQUE DONOR ITEM"
@@ -656,6 +645,13 @@
icon_state = "hecuhelm_u"
desc = "A combat helmet, bearing the scars of many battles. UNIQUE DONOR ITEM"
+/obj/item/clothing/head/helmet/marine/fluff/sas_legion //CKEY=sasoperative (UNIQUE)
+ name = "M3 Ranger Helmet"
+ desc = "A M3 Ranger helmet, probably not many of these laying around. DONOR ITEM"
+ flags_atom = FPRINT|CONDUCT|NO_NAME_OVERRIDE
+ icon_state = "rangerhelmet"
+ item_state = "rangerhelmet"
+
/obj/item/clothing/head/helmet/marine/fluff/officialjake
name = "Timothy's Beret"
desc = "A fancy red beret owned by Timothy Seidner. DONOR ITEM"
@@ -912,14 +908,6 @@
flags_inventory = BLOCKSHARPOBJ
flags_inv_hide = HIDEEARS|HIDEMASK|HIDEEYES|HIDEALLHAIR
-/obj/item/clothing/head/helmet/marine/fluff/Sanctum_helmet
- name = "Sanctum Combat Helmet"
- desc = " The Standard Issue helmet of Sanctum Team. DONOR ITEM" //Add UNIQUE if Unique
- icon_state = "Sanctum_Helm_u"
- item_state = "Sanctum_Helm_u"
- flags_inventory = BLOCKSHARPOBJ
- flags_inv_hide = HIDEEARS|HIDEMASK|HIDEEYES|HIDEALLHAIR
-
/obj/item/clothing/head/helmet/marine/fluff/dingledangle
name = "Rusty's Cap"
desc = "A little old and shabby. The color has slightly faded over time. DONOR ITEM"
@@ -998,13 +986,6 @@
worn_state = "camojump"
flags_jumpsuit = FALSE
-/obj/item/clothing/under/marine/fluff/sas_legion //CKEY=sasoperative (UNIQUE)
- name = "Legion Suit"
- desc = "This armor was custom-made to resemble the small growing Legion within the galaxy started by one man slowly making its way to becoming a larger Corporation. DONOR ITEM."
- icon_state = "ncr_uni"
- worn_state = "ncr_uni"
- flags_jumpsuit = FALSE
-
/obj/item/clothing/under/marine/fluff/feodrich //CKEY=feodrich (UNIQUE)
name = "Doom Uniform"
desc = "A uniform, of a famous Earth warrior... Donor Item"
@@ -1207,13 +1188,6 @@
worn_state = "medicae_jumpsuit_u"
flags_jumpsuit = FALSE
-/obj/item/clothing/under/marine/fluff/sanctum_uniform //NO USER
- name = "Sanctum Fatigues"
- desc = "Fatigues with Kevlar fibers for a bit more protection than most clothing. UNIQUE DONOR ITEM"
- icon_state = "Sanctum_u"
- worn_state = "Sanctum_u"
- flags_jumpsuit = FALSE
-
/obj/item/clothing/under/marine/fluff/sailordave //CKEY=sailordave
name = "Eden USCM uniform"
desc = "An older model USCM uniform. UNIQUE DONOR ITEM"
@@ -1244,16 +1218,6 @@
item_state = "revanmask"
icon_state = "revanmask"
-
-/obj/item/clothing/mask/fluff/sas_legion //CKEY=sasoperative (UNIQUE)
- name = "Legion Mask"
- desc = "This armor was custom-made to resemble the small growing Legion within the galaxy started by one man slowly making its way to becoming a larger Corporation. DONOR ITEM."
- icon_override = 'icons/mob/humans/onmob/mask.dmi'
- item_state = "officer_mask"
- icon_state = "officer_mask"
- flags_inventory = COVERMOUTH|ALLOWREBREATH
- flags_inv_hide = HIDEEARS|HIDEFACE|HIDEALLHAIR
-
/obj/item/clothing/mask/fluff/totalanarchy //CKEY=totalanarchy
name = "PMC Mask"
desc = "A white colored PMC Mask. DONOR ITEM."
@@ -1373,6 +1337,13 @@
item_state = "securitypack"
has_gamemode_skin = FALSE //same sprite for all gamemodes.
+/obj/item/storage/backpack/marine/satchel/fluff/sas_legion //CKEY=sasoperative (UNIQUE)
+ name = "M3 Armored Pack"
+ desc = "Plenty of pouches and pockets. DONOR ITEM"
+ flags_atom = FPRINT|CONDUCT|NO_NAME_OVERRIDE
+ icon_state = "skinnerrangerpack"
+ item_state = "skinnerrangerpack"
+
/obj/item/clothing/glasses/fluff/alexwarhammer
name = "Black Jack's Dank Shades"
desc = "+20 Badass points. Donor item"
diff --git a/code/modules/cm_marines/Donator_Kits.dm b/code/modules/cm_marines/Donator_Kits.dm
index 01acf638c2cd..b0c9ec51e946 100644
--- a/code/modules/cm_marines/Donator_Kits.dm
+++ b/code/modules/cm_marines/Donator_Kits.dm
@@ -1,6 +1,7 @@
/obj/item/storage/box/donator_kit
name = "donated box"
desc = "A cardboard box stamped with a dollar sign and filled with trinkets. Appears to have been donated by a wealthy sponsor."
+ icon = 'icons/obj/items/storage/kits.dmi'
icon_state = "donator_kit"
item_state = "giftbag"
var/list/donor_gear = list()
@@ -436,9 +437,9 @@
donor_key = "sasoperative"
kit_variant = "Legion"
donor_gear = list(
- /obj/item/clothing/suit/storage/marine/fluff/sas_legion,
- /obj/item/clothing/under/marine/fluff/sas_legion,
- /obj/item/clothing/mask/fluff/sas_legion,
+ /obj/item/clothing/suit/storage/marine/light/fluff/sas_legion,
+ /obj/item/clothing/head/helmet/marine/fluff/sas_legion,
+ /obj/item/storage/backpack/marine/satchel/fluff/sas_legion,
)
/obj/item/storage/box/donator_kit/seloc_aferah
diff --git a/code/modules/cm_marines/anti_air.dm b/code/modules/cm_marines/anti_air.dm
index e867c0d64083..3c69a0fe241a 100644
--- a/code/modules/cm_marines/anti_air.dm
+++ b/code/modules/cm_marines/anti_air.dm
@@ -131,7 +131,7 @@ GLOBAL_DATUM(almayer_aa_cannon, /obj/structure/anti_air_cannon)
if(..())
return
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(user, SPAN_WARNING("You have no idea how to use that console."))
return TRUE
diff --git a/code/modules/cm_marines/dropship_ammo.dm b/code/modules/cm_marines/dropship_ammo.dm
index b2c9aa530888..aefc2366caf9 100644
--- a/code/modules/cm_marines/dropship_ammo.dm
+++ b/code/modules/cm_marines/dropship_ammo.dm
@@ -161,9 +161,7 @@
/obj/structure/ship_ammo/heavygun/detonate_on(turf/impact, obj/structure/dropship_equipment/weapon/fired_from)
set waitfor = 0
- var/list/turf_list = list()
- for(var/turf/T in range(bullet_spread_range, impact))
- turf_list += T
+ var/list/turf_list = RANGE_TURFS(bullet_spread_range, impact)
var/soundplaycooldown = 0
var/debriscooldown = 0
@@ -243,9 +241,7 @@
/obj/structure/ship_ammo/laser_battery/detonate_on(turf/impact, obj/structure/dropship_equipment/weapon/fired_from)
set waitfor = 0
- var/list/turf_list = list()
- for(var/turf/T in range(3, impact)) //This is its area of effect
- turf_list += T
+ var/list/turf_list = RANGE_TURFS(3, impact) //This is its area of effect
playsound(impact, 'sound/effects/pred_vision.ogg', 20, 1)
for(var/i=1 to 16) //This is how many tiles within that area of effect will be randomly ignited
var/turf/U = pick(turf_list)
@@ -322,14 +318,13 @@
/obj/structure/ship_ammo/rocket/harpoon
name = "\improper AGM-184 'Harpoon II'"
- desc = "The AGM-184 Harpoon II is an Anti-Ship Missile, designed and used to effectively take down enemy ships with a huge blast wave with low explosive power. This one is modified to use ground signals. Can be loaded into the LAU-444 Guided Missile Launcher."
+ desc = "The AGM-184 Harpoon II is an Anti-Ship Missile, designed and used to effectively take down enemy ships with a huge blast wave with low explosive power. This one is modified to use ground signals and can be seen as a cheaper alternative to conventional ordnance. Can be loaded into the LAU-444 Guided Missile Launcher."
icon_state = "harpoon"
ammo_id = "s"
travelling_time = 50
- point_cost = 300
+ point_cost = 200
fire_mission_delay = 4
-//Looks kinda OP but all it can actually do is just to blow windows and some of other things out, cant do much damage.
/obj/structure/ship_ammo/rocket/harpoon/detonate_on(turf/impact, obj/structure/dropship_equipment/weapon/fired_from)
impact.ceiling_debris_check(3)
addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(cell_explosion), impact, 150, 16, EXPLOSION_FALLOFF_SHAPE_LINEAR, null, create_cause_data(initial(name)), source_mob), 0.5 SECONDS)
diff --git a/code/modules/cm_marines/dropship_equipment.dm b/code/modules/cm_marines/dropship_equipment.dm
index c4ac1ac98cad..267efad9e57d 100644
--- a/code/modules/cm_marines/dropship_equipment.dm
+++ b/code/modules/cm_marines/dropship_equipment.dm
@@ -288,6 +288,8 @@
deployed_turret.linked_cam.network = list(CAMERA_NET_ALAMO)
else if (linked_shuttle.id == DROPSHIP_NORMANDY)
deployed_turret.linked_cam.network = list(CAMERA_NET_NORMANDY)
+ else if (linked_shuttle.id == DROPSHIP_SAIPAN)
+ deployed_turret.linked_cam.network = list(CAMERA_NET_SAIPAN)
/obj/structure/dropship_equipment/sentry_holder/proc/undeploy_sentry()
@@ -721,9 +723,7 @@
ammo_accuracy_range /= 2 //buff for basically pointblanking the ground
- var/list/possible_turfs = list()
- for(var/turf/TU in range(ammo_accuracy_range, target_turf))
- possible_turfs += TU
+ var/list/possible_turfs = RANGE_TURFS(ammo_accuracy_range, target_turf)
var/turf/impact = pick(possible_turfs)
sleep(3)
SA.source_mob = user
@@ -1328,9 +1328,7 @@
ammo_accuracy_range /= 2 //buff for basically pointblanking the ground
- var/list/possible_turfs = list()
- for(var/turf/TU in range(ammo_accuracy_range, target_turf))
- possible_turfs += TU
+ var/list/possible_turfs = RANGE_TURFS(ammo_accuracy_range, target_turf)
var/turf/impact = pick(possible_turfs)
sleep(3)
SA.source_mob = user
diff --git a/code/modules/cm_marines/equipment/gear.dm b/code/modules/cm_marines/equipment/gear.dm
index 9e5352621e32..6e11181e249e 100644
--- a/code/modules/cm_marines/equipment/gear.dm
+++ b/code/modules/cm_marines/equipment/gear.dm
@@ -4,8 +4,8 @@
/obj/item/device/flashlight/combat
name = "combat flashlight"
- desc = "A Flashlight designed to be held in the hand, or attached to a rifle"
- icon_state = "flashlight"
+ desc = "A Flashlight designed to be held in the hand, or attached to a rifle, has better bulb compared to a normal flashlight."
+ icon_state = "combat_flashlight"
item_state = "flashlight"
light_range = 5 //Pretty luminous, but still a flashlight that fits in a pocket
diff --git a/code/modules/cm_marines/equipment/guncases.dm b/code/modules/cm_marines/equipment/guncases.dm
index cbbb791f8f0b..33cfeed00307 100644
--- a/code/modules/cm_marines/equipment/guncases.dm
+++ b/code/modules/cm_marines/equipment/guncases.dm
@@ -1,6 +1,7 @@
/obj/item/storage/box/guncase
name = "\improper gun case"
desc = "It has space for firearm(s). Sometimes magazines or other munitions as well."
+ icon = 'icons/obj/items/storage/kits.dmi'
icon_state = "guncase"
w_class = SIZE_HUGE
max_w_class = SIZE_HUGE //shouldn't be a problem since we can only store the guns and ammo.
diff --git a/code/modules/cm_marines/equipment/kit_boxes.dm b/code/modules/cm_marines/equipment/kit_boxes.dm
index 2a2c2d450523..7be519896097 100644
--- a/code/modules/cm_marines/equipment/kit_boxes.dm
+++ b/code/modules/cm_marines/equipment/kit_boxes.dm
@@ -2,13 +2,14 @@
//******************************************Spec Kits****************************************************************/
/obj/item/storage/box/spec
- icon = 'icons/obj/items/storage.dmi'
+ icon = 'icons/obj/items/storage/kits.dmi'
icon_state = "kit_case"
var/kit_overlay = null
w_class = SIZE_HUGE
storage_slots = 14
slowdown = 1
can_hold = list() //Nada. Once you take the stuff out it doesn't fit back in.
+ max_w_class = 0
foldable = null
/obj/item/storage/box/spec/update_icon()
@@ -177,7 +178,7 @@
/obj/item/spec_kit
name = "specialist kit"
desc = "A paper box. Open it and get a specialist kit."
- icon = 'icons/obj/items/storage.dmi'
+ icon = 'icons/obj/items/storage/kits.dmi'
icon_state = "spec_kit"
var/list/allowed_roles_list = list(JOB_SQUAD_SPECIALIST, JOB_WO_SQUAD_SPECIALIST, JOB_WO_CREWMAN)
@@ -248,63 +249,32 @@
return TRUE
/obj/item/spec_kit/proc/select_and_spawn(mob/living/carbon/human/user)
- var/selection = tgui_input_list(user, "Pick your specialist equipment type.", "Specialist Kit Selection", GLOB.available_specialist_kit_boxes, 10 SECONDS)
+ var/list/available_specialist_kits = list()
+ for(var/path in GLOB.specialist_set_datums)
+ var/datum/specialist_set/specset = GLOB.specialist_set_datums[path]
+ if(specset.get_available_kit_num() >= 1)
+ available_specialist_kits += specset.get_name()
+
+ var/selection = tgui_input_list(user, "Pick your specialist equipment type.", "Specialist Kit Selection", available_specialist_kits, 10 SECONDS)
if(!selection || QDELETED(src))
return FALSE
- if(!GLOB.available_specialist_kit_boxes[selection] || GLOB.available_specialist_kit_boxes[selection] <= 0)
+ if(!skillcheckexplicit(user, SKILL_SPEC_WEAPONS, SKILL_SPEC_TRAINED) && !skillcheckexplicit(user, SKILL_SPEC_WEAPONS, SKILL_SPEC_ALL))
+ to_chat(user, SPAN_WARNING("You already unwrapped your [name], give this one to someone else!"))
+ return FALSE
+ if(!GLOB.specialist_set_name_dict[selection] || (GLOB.specialist_set_name_dict[selection].get_available_kit_num() <= 0))
to_chat(user, SPAN_WARNING("No more kits of this type may be chosen!"))
return FALSE
var/obj/item/card/id/card = user.get_idcard()
if(!card || card.registered_ref != WEAKREF(user))
to_chat(user, SPAN_WARNING("You must be wearing your [SPAN_INFO("ID card")] or [SPAN_INFO("dog tags")] to select a specialization!"))
- return
- var/turf/T = get_turf(loc)
- var/obj/item/storage/box/spec/spec_box
- var/specialist_assignment
- switch(selection)
- if("Pyro")
- spec_box = new /obj/item/storage/box/spec/pyro(T)
- specialist_assignment = "Pyro"
- user.skills.set_skill(SKILL_SPEC_WEAPONS, SKILL_SPEC_PYRO)
- if("Grenadier")
- spec_box = new /obj/item/storage/box/spec/heavy_grenadier(T)
- specialist_assignment = "Grenadier"
- user.skills.set_skill(SKILL_SPEC_WEAPONS, SKILL_SPEC_GRENADIER)
- if("Sniper")
- spec_box = new /obj/item/storage/box/spec/sniper(T)
- specialist_assignment = "Sniper"
- user.skills.set_skill(SKILL_SPEC_WEAPONS, SKILL_SPEC_SNIPER)
- if("Anti-materiel Sniper")
- spec_box = new /obj/item/storage/box/spec/sniper/anti_materiel(T)
- specialist_assignment = "Heavy Sniper"
- user.skills.set_skill(SKILL_SPEC_WEAPONS, SKILL_SPEC_SNIPER)
- if("Scout")
- spec_box = new /obj/item/storage/box/spec/scout(T)
- specialist_assignment = "Scout"
- user.skills.set_skill(SKILL_SPEC_WEAPONS, SKILL_SPEC_SCOUT)
- //this is to be able to use C4s that are coming with the kit
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
- user.skills.set_skill(SKILL_ENGINEER, SKILL_ENGINEER_TRAINED)
- if("Demo")
- spec_box = new /obj/item/storage/box/spec/demolitionist(T)
- specialist_assignment = "Demo"
- user.skills.set_skill(SKILL_SPEC_WEAPONS, SKILL_SPEC_ROCKET)
- //this is to be able to use C4s that are coming with the kit
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
- user.skills.set_skill(SKILL_ENGINEER, SKILL_ENGINEER_TRAINED)
- if(specialist_assignment)
- user.put_in_hands(spec_box)
- card.set_assignment((user.assigned_squad && squad_assignment_update ? (user.assigned_squad.name + " ") : "") + card.assignment + " ([specialist_assignment])")
- GLOB.data_core.manifest_modify(user.real_name, WEAKREF(user), card.assignment)
- GLOB.available_specialist_kit_boxes[selection]--
- return TRUE
- return FALSE
+ return FALSE
+ return GLOB.specialist_set_name_dict[selection].redeem_set(user, TRUE)
//******************************************PFC Kits****************************************************************/
/obj/item/storage/box/kit
- icon = 'icons/obj/items/storage.dmi'
+ icon = 'icons/obj/items/storage/kits.dmi'
icon_state = "pro_case_mini"//to-do redo these sprites, they're out of date by current standards
w_class = SIZE_HUGE
storage_slots = 12
@@ -318,7 +288,7 @@
/obj/item/storage/box/kit/Initialize()
. = ..()
if(pro_case_overlay)
- overlays += image('icons/obj/items/storage.dmi', "+[pro_case_overlay]")
+ overlays += image('icons/obj/items/storage/kits.dmi', "+[pro_case_overlay]")
/obj/item/storage/box/kit/update_icon()
if(!length(contents))
diff --git a/code/modules/cm_marines/equipment/mortar/mortar_shells.dm b/code/modules/cm_marines/equipment/mortar/mortar_shells.dm
index 1cb93c6a809e..1d6cb3be0a3c 100644
--- a/code/modules/cm_marines/equipment/mortar/mortar_shells.dm
+++ b/code/modules/cm_marines/equipment/mortar/mortar_shells.dm
@@ -112,7 +112,7 @@
icon_state = initial(icon_state)
/obj/item/mortar_shell/custom/attackby(obj/item/W as obj, mob/user)
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(user, SPAN_WARNING("You do not know how to tinker with [name]."))
return
if(HAS_TRAIT(W, TRAIT_TOOL_SCREWDRIVER))
diff --git a/code/modules/cm_marines/equipment/mortar/mortars.dm b/code/modules/cm_marines/equipment/mortar/mortars.dm
index 018bd7b9e11c..161be4813832 100644
--- a/code/modules/cm_marines/equipment/mortar/mortars.dm
+++ b/code/modules/cm_marines/equipment/mortar/mortars.dm
@@ -43,6 +43,17 @@
targ_y = deobfuscate_y(0)
internal_camera = new(loc)
+ var/new_icon_state
+ switch(SSmapping.configs[GROUND_MAP].camouflage_type)
+ if("classic")
+ icon_state = new_icon_state ? new_icon_state : "c_" + icon_state
+ if("desert")
+ icon_state = new_icon_state ? new_icon_state : "d_" + icon_state
+ if("snow")
+ icon_state = new_icon_state ? new_icon_state : "s_" + icon_state
+ if("urban")
+ icon_state = new_icon_state ? new_icon_state : "u_" + icon_state
+
/obj/structure/mortar/Destroy()
QDEL_NULL(internal_camera)
return ..()
@@ -91,7 +102,7 @@
if(isyautja(user))
to_chat(user, SPAN_WARNING("You kick [src] but nothing happens."))
return
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_NOVICE))
to_chat(user, SPAN_WARNING("You don't have the training to use [src]."))
return
if(busy)
@@ -213,7 +224,7 @@
var/obj/item/mortar_shell/mortar_shell = item
var/turf/target_turf = locate(targ_x + dial_x + offset_x, targ_y + dial_y + offset_y, z)
var/area/target_area = get_area(target_turf)
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_NOVICE))
to_chat(user, SPAN_WARNING("You don't have the training to fire [src]."))
return
if(busy)
@@ -277,7 +288,7 @@
addtimer(CALLBACK(src, PROC_REF(handle_shell), target_turf, mortar_shell), travel_time)
if(HAS_TRAIT(item, TRAIT_TOOL_WRENCH))
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_NOVICE))
to_chat(user, SPAN_WARNING("You don't have the training to undeploy [src]."))
return
if(fixed)
@@ -400,6 +411,10 @@
unacidable = TRUE
w_class = SIZE_HUGE //No dumping this in a backpack. Carry it, fatso
+/obj/item/mortar_kit/Initialize(...)
+ . = ..()
+ select_gamemode_skin(type)
+
/obj/item/mortar_kit/ex_act(severity)
switch(severity)
if(EXPLOSION_THRESHOLD_MEDIUM to INFINITY)
@@ -410,7 +425,7 @@
var/turf/deploy_turf = get_turf(user)
if(!deploy_turf)
return
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_NOVICE))
to_chat(user, SPAN_WARNING("You don't have the training to deploy [src]."))
return
var/area/area = get_area(deploy_turf)
diff --git a/code/modules/cm_marines/equipment/weapons.dm b/code/modules/cm_marines/equipment/weapons.dm
index 9a84c84125d5..076aa37a0f41 100644
--- a/code/modules/cm_marines/equipment/weapons.dm
+++ b/code/modules/cm_marines/equipment/weapons.dm
@@ -2,7 +2,7 @@
/obj/item/storage/box/m56_system
name = "\improper M56 smartgun system case"
desc = "A large case containing an M56B Smartgun, M56 combat harness, head mounted sight and powerpack.\nDrag this sprite into you to open it up! NOTE: You cannot put items back inside this case."
- icon = 'icons/obj/items/storage.dmi'
+ icon = 'icons/obj/items/storage/kits.dmi'
icon_state = "kit_case"
w_class = SIZE_HUGE
storage_slots = 7
@@ -12,10 +12,10 @@
/obj/item/storage/box/m56_system/Initialize()
. = ..()
- new /obj/item/clothing/glasses/night/m56_goggles(src)
+ new /obj/item/clothing/suit/storage/marine/smartgunner(src)
new /obj/item/weapon/gun/smartgun(src)
+ new /obj/item/clothing/glasses/night/m56_goggles(src)
new /obj/item/smartgun_battery(src)
- new /obj/item/clothing/suit/storage/marine/smartgunner(src)
for(var/i in 1 to 3)
new /obj/item/ammo_magazine/smartgun(src)
update_icon()
@@ -31,7 +31,7 @@
/obj/item/storage/box/m56c_system
name = "\improper M56C smartgun system case"
desc = "A large case containing an M56C Smartgun, M56 combat harness, head mounted sight, M280 Smartgunner Drum Belt and powerpack.\nDrag this sprite into you to open it up! NOTE: You cannot put items back inside this case."
- icon = 'icons/obj/items/storage.dmi'
+ icon = 'icons/obj/items/storage/kits.dmi'
icon_state = "kit_case"
w_class = SIZE_HUGE
storage_slots = 5
@@ -59,7 +59,7 @@
/obj/item/storage/box/m56_dirty_system
name = "\improper M56D 'Dirty' smartgun system case"
desc = "A large case containing an M56D 'Dirty' Smartgun, M56D PMC combat harness and helmet, head mounted sight, M280 Smartgunner Drum Belt and powerpack.\nDrag this sprite into you to open it up! NOTE: You cannot put items back inside this case."
- icon = 'icons/obj/items/storage.dmi'
+ icon = 'icons/obj/items/storage/kits.dmi'
icon_state = "kit_case"
w_class = SIZE_HUGE
storage_slots = 6
diff --git a/code/modules/cm_marines/marines_consoles.dm b/code/modules/cm_marines/marines_consoles.dm
index 7225556584de..778f3f4f18bf 100644
--- a/code/modules/cm_marines/marines_consoles.dm
+++ b/code/modules/cm_marines/marines_consoles.dm
@@ -925,9 +925,11 @@ GLOBAL_LIST_EMPTY_TYPED(crewmonitor, /datum/crewmonitor)
JOB_PROVOST_CMARSHAL = 00,
JOB_GENERAL = 00,
JOB_PROVOST_SMARSHAL = 01,//Grade O9
- JOB_PROVOST_MARSHAL = 02,//Grade O8
+ JOB_PROVOST_MARSHAL = 02,//Grade O7
+ JOB_PROVOST_DMARSHAL = 03,//Grade O6
JOB_COLONEL = 04,//Grade O6
- JOB_PROVOST_INSPECTOR = 04,
+ JOB_PROVOST_CINSPECTOR = 05,
+ JOB_PROVOST_INSPECTOR = 06,
// 10-19: Command
JOB_CO = 10,
JOB_XO = 11,
@@ -1115,12 +1117,14 @@ GLOBAL_LIST_EMPTY_TYPED(crewmonitor, /datum/crewmonitor)
JOB_UPP_COMMANDO = 22,
// 30-39: Security
JOB_UPP_POLICE = 31,
+ JOB_UPP_COMMISSAR = 41,
// 40-49: MedSci
JOB_UPP_LT_DOKTOR = 41,
// 50-59: Engineering
JOB_UPP_COMBAT_SYNTH = 50,
JOB_UPP_CREWMAN = 51,
JOB_UPP_SUPPORT_SYNTH = 52,
+ JOB_UPP_SUPPLY = 53,
// 60-69: Soldiers
JOB_UPP_LEADER = 60,
JOB_UPP_SPECIALIST = 61,
diff --git a/code/modules/cm_marines/orbital_cannon.dm b/code/modules/cm_marines/orbital_cannon.dm
index a4286b043eba..b2e0e014b358 100644
--- a/code/modules/cm_marines/orbital_cannon.dm
+++ b/code/modules/cm_marines/orbital_cannon.dm
@@ -554,10 +554,7 @@ GLOBAL_LIST_EMPTY(orbital_cannon_cancellation)
set waitfor = 0
var/range_num = 12
- var/list/turf_list = list()
-
- for(var/turf/T in range(range_num, target))
- turf_list += T
+ var/list/turf_list = RANGE_TURFS(range_num, target)
for(var/i = 1 to total_amount)
for(var/k = 1 to instant_amount)
@@ -681,7 +678,7 @@ GLOBAL_LIST_EMPTY(orbital_cannon_cancellation)
if(..())
return
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(user, SPAN_WARNING("You have no idea how to use that console."))
return TRUE
diff --git a/code/modules/cm_marines/specialist.dm b/code/modules/cm_marines/specialist.dm
index 2fc1fdec10db..9fbb240a1178 100644
--- a/code/modules/cm_marines/specialist.dm
+++ b/code/modules/cm_marines/specialist.dm
@@ -38,3 +38,151 @@
for (var/datum/action/item_action/specialist/SA in H.actions)
if (SA.ability_primacy == SPEC_PRIMARY_ACTION_2)
SA.handle_spec_macro()
+
+/// Get a specialist set datum typepath given a mob, returns null if they aren't a spec or haven't chosen a kit.
+/proc/get_specialist_set(mob/living/spec)
+ for(var/datum/specialist_set/path as anything in GLOB.specialist_set_datums)
+ if(HAS_TRAIT(spec, TRAIT_SPEC(path::trait_to_give)))
+ return path
+
+/proc/setup_specialist_sets()
+ var/list/set_list = list()
+ for(var/datum/specialist_set/path as anything in subtypesof(/datum/specialist_set))
+ var/datum/specialist_set/object = new path
+ set_list[path] = object
+ GLOB.specialist_set_name_dict[object.get_name()] = object
+ return set_list
+
+/datum/specialist_set
+ /// Human-readable name for the specialist set
+ VAR_PROTECTED/name = "" as text
+ /// What is the role title that should go on ID cards
+ VAR_PROTECTED/role_name = "" as text
+ /// How many more of this spec set can be picked from spec vendors
+ VAR_PRIVATE/available_vendor_num = 1 as num
+ /// How many more of this spec set can be picked from /obj/item/spec_kit
+ VAR_PRIVATE/available_kit_num = 2 as num
+ /// What skill tier to give the person redeeming the set
+ VAR_PROTECTED/skill_to_give = SKILL_SPEC_DEFAULT as num
+ /// What trait to give the person redeeming the set
+ VAR_PROTECTED/trait_to_give
+ /// What typepath to spawn for the redeemer if from a kit
+ VAR_PROTECTED/kit_typepath
+ /// List of typepaths that are incompatible with this set, meaning it'll subtract 1 from their vendor/kit num as well
+ VAR_PROTECTED/list/incompatible_sets = list()
+
+/datum/specialist_set/New()
+ . = ..()
+ incompatible_sets += type
+
+/datum/specialist_set/proc/redeem_set(mob/living/carbon/human/redeemer, kit = FALSE)
+ SHOULD_CALL_PARENT(TRUE)
+ if(!redeemer)
+ return FALSE
+
+ if(kit && (available_kit_num <= 0))
+ to_chat(redeemer, SPAN_WARNING("No more kits of this type may be chosen."))
+ return FALSE
+ else if(!kit && (available_vendor_num <= 0))
+ to_chat(redeemer, SPAN_WARNING("That set is already taken."))
+ return FALSE
+
+ if(skill_to_give != SKILL_SPEC_DEFAULT)
+ redeemer.skills?.set_skill(SKILL_SPEC_WEAPONS, skill_to_give)
+
+ if(kit)
+ redeemer.put_in_any_hand_if_possible(new kit_typepath, FALSE)
+ for(var/path in incompatible_sets)
+ GLOB.specialist_set_datums[path].available_kit_num--
+ ADD_TRAIT(redeemer, TRAIT_SPEC_KIT, TRAIT_SOURCE_INHERENT)
+ else
+ for(var/path in incompatible_sets)
+ GLOB.specialist_set_datums[path].available_vendor_num--
+ ADD_TRAIT(redeemer, TRAIT_SPEC_VENDOR, TRAIT_SOURCE_INHERENT)
+ ADD_TRAIT(redeemer, TRAIT_SPEC(trait_to_give), TRAIT_SOURCE_INHERENT)
+ var/obj/item/card/id/idcard = redeemer.get_idcard()
+ if(idcard)
+ idcard.set_assignment((redeemer.assigned_squad ? (redeemer.assigned_squad.name + " ") : "") + JOB_SQUAD_SPECIALIST + " ([role_name])")
+ GLOB.data_core.manifest_modify(redeemer.real_name, WEAKREF(redeemer), idcard.assignment)
+ return TRUE
+
+/datum/specialist_set/proc/refund_set(mob/living/carbon/human/refunder)
+ SHOULD_CALL_PARENT(TRUE)
+ if(!refunder)
+ return
+
+ if(HAS_TRAIT(refunder, TRAIT_SPEC_KIT))
+ for(var/path in incompatible_sets)
+ GLOB.specialist_set_datums[path].available_kit_num++
+ else if(HAS_TRAIT(refunder, TRAIT_SPEC_VENDOR))
+ for(var/path in incompatible_sets)
+ GLOB.specialist_set_datums[path].available_vendor_num++
+
+/datum/specialist_set/proc/get_name() as text
+ return name
+
+/datum/specialist_set/proc/get_available_kit_num() as num
+ return available_kit_num
+
+/datum/specialist_set/proc/get_available_vendor_num() as num
+ return available_vendor_num
+
+/datum/specialist_set/sadar
+ name = "Demolitionist Set"
+ role_name = "Demo"
+ skill_to_give = SKILL_SPEC_ROCKET
+ kit_typepath = /obj/item/storage/box/spec/demolitionist
+
+/datum/specialist_set/sadar/redeem_set(mob/living/redeemer, kit)
+ . = ..()
+ if(!.)
+ return .
+
+ if(!skillcheck(redeemer, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
+ redeemer.skills?.set_skill(SKILL_ENGINEER, SKILL_ENGINEER_TRAINED)
+ return TRUE
+
+/datum/specialist_set/scout
+ name = "Scout Set"
+ role_name = "Scout"
+ skill_to_give = SKILL_SPEC_SCOUT
+ kit_typepath = /obj/item/storage/box/spec/scout
+
+/datum/specialist_set/scout/redeem_set(mob/living/redeemer, kit)
+ . = ..()
+ if(!.)
+ return .
+
+ if(!skillcheck(redeemer, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
+ redeemer.skills?.set_skill(SKILL_ENGINEER, SKILL_ENGINEER_TRAINED)
+ return TRUE
+
+/datum/specialist_set/sniper
+ name = "Sniper Set"
+ role_name = "Sniper"
+ skill_to_give = SKILL_SPEC_SNIPER
+ kit_typepath = /obj/item/storage/box/spec/sniper
+ incompatible_sets = list(
+ /datum/specialist_set/anti_mat_sniper,
+ )
+
+/datum/specialist_set/anti_mat_sniper
+ name = "Anti-Materiel Sniper Set"
+ role_name = "Heavy Sniper"
+ skill_to_give = SKILL_SPEC_SNIPER
+ kit_typepath = /obj/item/storage/box/spec/sniper/anti_materiel
+ incompatible_sets = list(
+ /datum/specialist_set/sniper,
+ )
+
+/datum/specialist_set/grenadier
+ name = "Heavy Grenadier Set"
+ role_name = "Grenadier"
+ skill_to_give = SKILL_SPEC_GRENADIER
+ kit_typepath = /obj/item/storage/box/spec/heavy_grenadier
+
+/datum/specialist_set/pyro
+ name = "Pyro Set"
+ role_name = "Pyro"
+ skill_to_give = SKILL_SPEC_PYRO
+ kit_typepath = /obj/item/storage/box/spec/pyro
diff --git a/code/modules/cm_phone/phone.dm b/code/modules/cm_phone/phone.dm
index 231bf54475d3..b600f9fb67cb 100644
--- a/code/modules/cm_phone/phone.dm
+++ b/code/modules/cm_phone/phone.dm
@@ -37,6 +37,10 @@ GLOBAL_LIST_EMPTY_TYPED(transmitters, /obj/structure/transmitter)
var/list/networks_receive = list(FACTION_MARINE)
var/list/networks_transmit = list(FACTION_MARINE)
+ var/datum/looping_sound/telephone/busy/busy_loop
+ var/datum/looping_sound/telephone/hangup/hangup_loop
+ var/datum/looping_sound/telephone/ring/outring_loop
+
/obj/structure/transmitter/hidden
do_not_disturb = PHONE_DND_FORCED
@@ -51,6 +55,10 @@ GLOBAL_LIST_EMPTY_TYPED(transmitters, /obj/structure/transmitter)
if(!get_turf(src))
return
+ outring_loop = new(attached_to)
+ busy_loop = new(attached_to)
+ hangup_loop = new(attached_to)
+
GLOB.transmitters += src
/obj/structure/transmitter/update_icon()
@@ -184,6 +192,7 @@ GLOBAL_LIST_EMPTY_TYPED(transmitters, /obj/structure/transmitter)
to_chat(user, SPAN_PURPLE("[icon2html(src, user)] Dialing [calling_phone_id].."))
playsound(get_turf(user), "rtb_handset")
timeout_timer_id = addtimer(CALLBACK(src, PROC_REF(reset_call), TRUE), timeout_duration, TIMER_UNIQUE|TIMER_OVERRIDE|TIMER_STOPPABLE)
+ outring_loop.start()
START_PROCESSING(SSobj, src)
START_PROCESSING(SSobj, T)
@@ -223,6 +232,7 @@ GLOBAL_LIST_EMPTY_TYPED(transmitters, /obj/structure/transmitter)
if(T.attached_to && ismob(T.attached_to.loc))
var/mob/M = T.attached_to.loc
to_chat(M, SPAN_PURPLE("[icon2html(src, M)] [phone_id] has picked up."))
+ playsound(T.attached_to.loc, 'sound/machines/telephone/remote_pickup.ogg', 20)
if(T.timeout_timer_id)
deltimer(T.timeout_timer_id)
T.timeout_timer_id = null
@@ -230,6 +240,7 @@ GLOBAL_LIST_EMPTY_TYPED(transmitters, /obj/structure/transmitter)
to_chat(user, SPAN_PURPLE("[icon2html(src, user)] Picked up a call from [T.phone_id]."))
playsound(get_turf(user), "rtb_handset")
+ T.outring_loop.stop()
user.put_in_active_hand(attached_to)
update_icon()
@@ -254,11 +265,14 @@ GLOBAL_LIST_EMPTY_TYPED(transmitters, /obj/structure/transmitter)
if(T.attached_to && ismob(T.attached_to.loc))
var/mob/M = T.attached_to.loc
to_chat(M, SPAN_PURPLE("[icon2html(src, M)] [phone_id] has hung up on you."))
+ T.hangup_loop.start()
if(attached_to && ismob(attached_to.loc))
var/mob/M = attached_to.loc
if(timeout)
- to_chat(M, SPAN_PURPLE("[icon2html(src, M)] Your call to [T.phone_id] has reached voicemail, you immediately disconnect the line."))
+ to_chat(M, SPAN_PURPLE("[icon2html(src, M)] Your call to [T.phone_id] has reached voicemail, nobody picked up the phone."))
+ busy_loop.start()
+ outring_loop.stop()
else
to_chat(M, SPAN_PURPLE("[icon2html(src, M)] You have hung up on [T.phone_id]."))
@@ -282,6 +296,8 @@ GLOBAL_LIST_EMPTY_TYPED(transmitters, /obj/structure/transmitter)
T.update_icon()
STOP_PROCESSING(SSobj, T)
+ outring_loop.stop()
+
STOP_PROCESSING(SSobj, src)
/obj/structure/transmitter/process()
@@ -319,9 +335,12 @@ GLOBAL_LIST_EMPTY_TYPED(transmitters, /obj/structure/transmitter)
var/mob/M = attached_to.loc
M.drop_held_item(attached_to)
playsound(get_turf(M), "rtb_handset", 100, FALSE, 7)
+ hangup_loop.stop()
attached_to.forceMove(src)
reset_call()
+ busy_loop.stop()
+ outring_loop.stop()
update_icon()
@@ -347,6 +366,7 @@ GLOBAL_LIST_EMPTY_TYPED(transmitters, /obj/structure/transmitter)
P.handle_hear(message, L, speaking)
attached_to.handle_hear(message, L, speaking)
+ playsound(P, "talk_phone", 5)
log_say("TELEPHONE: [key_name(speaking)] on Phone '[phone_id]' to '[T.phone_id]' said '[message]'")
/obj/structure/transmitter/attackby(obj/item/W, mob/user)
diff --git a/code/modules/cm_preds/yaut_items.dm b/code/modules/cm_preds/yaut_items.dm
index 27edf559d3ca..97b0f14f5b9b 100644
--- a/code/modules/cm_preds/yaut_items.dm
+++ b/code/modules/cm_preds/yaut_items.dm
@@ -916,6 +916,7 @@
name = "medicomp"
desc = "A complex kit of alien tools and medicines."
icon_state = "medicomp"
+ icon = 'icons/obj/items/hunter/pred_gear.dmi'
use_sound = "toolbox"
w_class = SIZE_SMALL
storage_flags = STORAGE_FLAGS_DEFAULT
diff --git a/code/modules/cm_preds/yaut_weapons.dm b/code/modules/cm_preds/yaut_weapons.dm
index 3bbbd11c0784..14336cbdba04 100644
--- a/code/modules/cm_preds/yaut_weapons.dm
+++ b/code/modules/cm_preds/yaut_weapons.dm
@@ -893,6 +893,8 @@
icon = 'icons/obj/items/hunter/pred_gear.dmi'
icon_state = null
works_in_recharger = FALSE
+ muzzle_flash = "muzzle_flash_blue"
+ muzzle_flash_color = COLOR_MAGENTA
item_icons = list(
WEAR_BACK = 'icons/mob/humans/onmob/hunter/pred_gear.dmi',
WEAR_L_HAND = 'icons/mob/humans/onmob/hunter/items_lefthand.dmi',
@@ -907,7 +909,6 @@
unacidable = TRUE
fire_sound = 'sound/weapons/pred_plasma_shot.ogg'
ammo = /datum/ammo/energy/yautja/rifle/bolt
- muzzle_flash = null // TO DO, add a decent one.
zoomdevicename = "scope"
flags_equip_slot = SLOT_BACK
w_class = SIZE_HUGE
@@ -992,6 +993,7 @@
#define FIRE_MODE_STANDARD "Standard"
#define FIRE_MODE_INCENDIARY "Incendiary"
+
/obj/item/weapon/gun/energy/yautja/plasmapistol
name = "plasma pistol"
desc = "A plasma pistol capable of rapid fire. It has an integrated battery. Can be used to set fires, either to braziers or on people."
@@ -1002,7 +1004,8 @@
fire_sound = 'sound/weapons/pulse3.ogg'
flags_equip_slot = SLOT_WAIST
ammo = /datum/ammo/energy/yautja/pistol
- muzzle_flash = null // TO DO, add a decent one.
+ muzzle_flash = "muzzle_flash_blue"
+ muzzle_flash_color = COLOR_MUZZLE_BLUE
w_class = SIZE_MEDIUM
/// Max amount of shots
var/charge_time = 40
@@ -1127,7 +1130,8 @@
)
fire_sound = 'sound/weapons/pred_plasmacaster_fire.ogg'
ammo = /datum/ammo/energy/yautja/caster/stun
- muzzle_flash = null // TO DO, add a decent one.
+ muzzle_flash = "muzzle_flash_blue"
+ muzzle_flash_color = COLOR_MUZZLE_BLUE
w_class = SIZE_HUGE
force = 0
fire_delay = 3
diff --git a/code/modules/cm_tech/droppod/droppod.dm b/code/modules/cm_tech/droppod/droppod.dm
index 030dd11474ec..0dfa8d12aa9f 100644
--- a/code/modules/cm_tech/droppod/droppod.dm
+++ b/code/modules/cm_tech/droppod/droppod.dm
@@ -168,8 +168,9 @@
for(var/obj/structure/machinery/defenses/def in loc)
qdel(def)
- for(var/mob/mob in view(7, loc))
+ FOR_DVIEW(var/mob/mob, 7, loc, HIDE_INVISIBLE_OBSERVER)
shake_camera(mob, 4, 5)
+ FOR_DVIEW_END
addtimer(CALLBACK(src, PROC_REF(open)), open_time)
diff --git a/code/modules/cm_tech/implements/ammo_kits.dm b/code/modules/cm_tech/implements/ammo_kits.dm
index bcf267a54ca8..b77db20eeb00 100644
--- a/code/modules/cm_tech/implements/ammo_kits.dm
+++ b/code/modules/cm_tech/implements/ammo_kits.dm
@@ -68,6 +68,7 @@
/obj/item/storage/box/shotgun
name = "incendiary shotgun kit"
desc = "A kit containing incendiary shotgun shells."
+ icon = 'icons/obj/items/storage/kits.dmi'
icon_state = "incenbuck"
storage_slots = 5
var/amount = 5
diff --git a/code/modules/cm_tech/implements/engi_czsp.dm b/code/modules/cm_tech/implements/engi_czsp.dm
index f3024129b3eb..f1e9721f9197 100644
--- a/code/modules/cm_tech/implements/engi_czsp.dm
+++ b/code/modules/cm_tech/implements/engi_czsp.dm
@@ -2,7 +2,7 @@
name = "engineering upgrade kit"
desc = "A kit used to upgrade the defenses of an engineer's sentry. Back in 1980 when the machines tried to break free, it was a single android who laid them low. Now their technology is used widely on the rim."
- icon = 'icons/obj/items/storage.dmi'
+ icon = 'icons/obj/items/storage/kits.dmi'
icon_state = "upgradekit"
/obj/item/engi_upgrade_kit/Initialize(mapload, ...)
diff --git a/code/modules/cm_tech/implements/implants.dm b/code/modules/cm_tech/implements/implants.dm
index 8dbbe5d11c87..44c817d5ee5a 100644
--- a/code/modules/cm_tech/implements/implants.dm
+++ b/code/modules/cm_tech/implements/implants.dm
@@ -1,6 +1,7 @@
/obj/item/storage/box/implant
name = "implant box"
desc = "A sterile metal lockbox housing hypodermic implant injectors."
+ icon = 'icons/obj/items/storage/kits.dmi'
icon_state = "implantbox"
use_sound = "toolbox"
storage_slots = 5
diff --git a/code/modules/cm_tech/implements/medical_czsp.dm b/code/modules/cm_tech/implements/medical_czsp.dm
index 9ec56d35fbb5..69bb90b3ee13 100644
--- a/code/modules/cm_tech/implements/medical_czsp.dm
+++ b/code/modules/cm_tech/implements/medical_czsp.dm
@@ -2,6 +2,7 @@
/obj/item/storage/box/czsp/first_aid
name = "first-aid combat support kit"
desc = "Contains upgraded medical kits, nanosplints and an upgraded defibrillator."
+ icon = 'icons/obj/items/storage/kits.dmi'
icon_state = "medicbox"
storage_slots = 3
@@ -15,6 +16,7 @@
/obj/item/storage/box/czsp/medical
name = "medical combat support kit"
desc = "Contains upgraded medical kits, nanosplints and an upgraded defibrillator."
+ icon = 'icons/obj/items/storage/kits.dmi'
icon_state = "medicbox"
storage_slots = 4
@@ -27,6 +29,7 @@
/obj/item/storage/box/czsp/medic_upgraded_kits
name = "medical upgrade kit"
+ icon = 'icons/obj/items/storage/kits.dmi'
icon_state = "upgradedkitbox"
desc = "This kit holds upgraded trauma and burn kits, for critical injuries."
max_w_class = SIZE_MEDIUM
diff --git a/code/modules/cm_tech/implements/xeno_handler.dm b/code/modules/cm_tech/implements/xeno_handler.dm
index cbafec7499ee..d3340ffcdff8 100644
--- a/code/modules/cm_tech/implements/xeno_handler.dm
+++ b/code/modules/cm_tech/implements/xeno_handler.dm
@@ -53,7 +53,7 @@
SKILL_FIREARMS = SKILL_FIREARMS_EXPERT,
SKILL_POLICE = SKILL_POLICE_SKILLED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
- SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_LEADERSHIP = SKILL_LEAD_MASTER,
SKILL_OVERWATCH = SKILL_OVERWATCH_TRAINED,
SKILL_ENDURANCE = SKILL_ENDURANCE_EXPERT,
diff --git a/code/modules/defenses/defenses.dm b/code/modules/defenses/defenses.dm
index af4e497862fa..fef8498f802a 100644
--- a/code/modules/defenses/defenses.dm
+++ b/code/modules/defenses/defenses.dm
@@ -185,7 +185,7 @@
additional_shock++
if(prob(50))
var/mob/living/carbon/human/H = user
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_NOVICE))
if(turned_on)
additional_shock++
H.electrocute_act(40, src, additional_shock)//god damn Hans...
@@ -204,7 +204,7 @@
to_chat(user, SPAN_WARNING("You've hacked \the [src], it's now ours!"))
return
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_NOVICE))
to_chat(user, SPAN_WARNING("You don't have the training to do this."))
return
// if the sentry can have key interacted with
@@ -368,7 +368,7 @@
to_chat(user, SPAN_WARNING("It must be anchored to the ground before you can activate it."))
return
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
if(locked)
to_chat(user, SPAN_WARNING("The control panel on [src] is locked to non-engineers."))
return
@@ -490,7 +490,7 @@
return
if(!friendly_faction(usr.faction))
return
- if(!skillcheck(usr, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(usr, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(usr, SPAN_WARNING("You don't have the training to do this."))
return
diff --git a/code/modules/defenses/handheld.dm b/code/modules/defenses/handheld.dm
index 5b5831c9bb15..242d902cbd13 100644
--- a/code/modules/defenses/handheld.dm
+++ b/code/modules/defenses/handheld.dm
@@ -114,7 +114,8 @@
. += list("DMR Upgrade" = image(icon = 'icons/obj/structures/machinery/defenses/sentry.dmi', icon_state = "DMR uac_sentry_handheld"))
. += list(
"Shotgun Upgrade" = image(icon = 'icons/obj/structures/machinery/defenses/sentry.dmi', icon_state = "Shotgun uac_sentry_handheld"),
- "Mini-Sentry Upgrade" = image(icon = 'icons/obj/structures/machinery/defenses/sentry.dmi', icon_state = "Mini uac_sentry_handheld")
+ "Mini-Sentry Upgrade" = image(icon = 'icons/obj/structures/machinery/defenses/sentry.dmi', icon_state = "Mini uac_sentry_handheld"),
+ "Omni-Sentry Upgrade" = image(icon = 'icons/obj/structures/machinery/defenses/sentry.dmi', icon_state="Normal uac_sentry_handheld")
)
/obj/item/defenses/handheld/sentry/upgrade_string_to_type(upgrade_string)
@@ -125,6 +126,8 @@
return /obj/item/defenses/handheld/sentry/shotgun
if("Mini-Sentry Upgrade")
return /obj/item/defenses/handheld/sentry/mini
+ if("Omni-Sentry Upgrade")
+ return /obj/item/defenses/handheld/sentry/omni
/obj/item/defenses/handheld/sentry/dmr
name = "handheld UA 725-D sniper sentry"
@@ -143,6 +146,12 @@
defense_type = /obj/structure/machinery/defenses/sentry/mini
deployment_time = 0.75 SECONDS
+/obj/item/defenses/handheld/sentry/omni
+ name = "handheld UA 571-D omnidirectional sentry gun"
+ icon = 'icons/obj/structures/machinery/defenses/sentry.dmi'
+ icon_state = "Normal uac_sentry_handheld"
+ defense_type = /obj/structure/machinery/defenses/sentry/omni
+
/obj/item/defenses/handheld/sentry/wy
name = "handheld WY 202-GMA1 smart sentry"
desc = "A compact version of the Weyland-Yutani defenses. Designed for deployment in the field."
diff --git a/code/modules/defenses/sentry.dm b/code/modules/defenses/sentry.dm
index 8ad4cd407e75..6c9c5ad68fea 100644
--- a/code/modules/defenses/sentry.dm
+++ b/code/modules/defenses/sentry.dm
@@ -223,7 +223,7 @@
if(istype(O, ammo))
var/obj/item/ammo_magazine/M = O
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI) || user.action_busy)
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED) || user.action_busy)
return
if(ammo.current_rounds)
@@ -900,5 +900,11 @@
omni_directional = TRUE
handheld_type = /obj/item/defenses/handheld/sentry/upp/light
+/obj/structure/machinery/defenses/sentry/omni
+ name = "\improper UA 571-D omnidirectional sentry gun"
+ omni_directional = TRUE
+ damage_mult = 0.7
+ sentry_range = 4
+
#undef SENTRY_FIREANGLE
#undef SENTRY_RANGE
diff --git a/code/modules/defenses/sentry_computer.dm b/code/modules/defenses/sentry_computer.dm
index 639a74e6ba30..3c278a6c06b2 100644
--- a/code/modules/defenses/sentry_computer.dm
+++ b/code/modules/defenses/sentry_computer.dm
@@ -308,7 +308,7 @@
. = ..()
if(!on)
return UI_CLOSE
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
return UI_UPDATE
@@ -383,7 +383,7 @@
. = ..()
if(.)
return
- if(!skillcheck(usr, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(usr, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(usr, SPAN_WARNING("You are not authorised to configure the sentry."))
return
if(params["index"])
diff --git a/code/modules/defenses/tesla_coil.dm b/code/modules/defenses/tesla_coil.dm
index 0eab59e7d7c4..bb150acc1e95 100644
--- a/code/modules/defenses/tesla_coil.dm
+++ b/code/modules/defenses/tesla_coil.dm
@@ -11,6 +11,7 @@
var/last_fired = 0
var/tesla_range = TESLA_COIL_RANGE
var/fire_delay = TESLA_COIL_FIREDELAY
+ var/attack_defenses = TRUE
handheld_type = /obj/item/defenses/handheld/tesla_coil
disassemble_time = 10
health = 150
@@ -70,7 +71,7 @@
/obj/structure/machinery/defenses/tesla_coil/proc/get_target()
targets = list()
- for(var/mob/living/M in oview(tesla_range, src))
+ FOR_DOVIEW(var/mob/living/M, tesla_range, src, HIDE_INVISIBLE_OBSERVER)
if(M.stat == DEAD)
continue
if(HAS_TRAIT(M, TRAIT_CHARGING))
@@ -81,10 +82,15 @@
continue
targets += M
+ FOR_DOVIEW_END
- for(var/obj/structure/machinery/defenses/D in oview(tesla_range, src))
+ if(!attack_defenses)
+ return
+
+ FOR_DOVIEW(var/obj/structure/machinery/defenses/D, tesla_range, src, HIDE_INVISIBLE_OBSERVER)
if(D.turned_on)
targets += D
+ FOR_DOVIEW_END
/obj/structure/machinery/defenses/tesla_coil/proc/fire(atoms)
if(!(world.time - last_fired >= fire_delay) || !turned_on)
@@ -157,6 +163,17 @@
. = ..()
+// For mapping
+/obj/structure/machinery/defenses/tesla_coil/premade
+ turned_on = TRUE
+ static = TRUE
+
+/obj/structure/machinery/defenses/tesla_coil/premade/attackby(obj/item/O, mob/user)
+ return
+
+/obj/structure/machinery/defenses/tesla_coil/premade/smart
+ attack_defenses = FALSE
+
#define TESLA_COIL_STUN_FIRE_DELAY 3 SECONDS
#define TESLA_COIL_STUN_EFFECT 1
/obj/structure/machinery/defenses/tesla_coil/stun
diff --git a/code/modules/desert_dam/motion_sensor/sensortower.dm b/code/modules/desert_dam/motion_sensor/sensortower.dm
index a3f33d4da078..41859167458f 100644
--- a/code/modules/desert_dam/motion_sensor/sensortower.dm
+++ b/code/modules/desert_dam/motion_sensor/sensortower.dm
@@ -101,7 +101,7 @@
add_fingerprint(user)
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(user, SPAN_WARNING("You have no clue how this thing works..."))
return FALSE
@@ -135,7 +135,7 @@
to_chat(user, SPAN_WARNING("You need a stronger blowtorch!"))
return
if(buildstate == SENSORTOWER_BUILDSTATE_BLOWTORCH && !is_on)
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(user, SPAN_WARNING("You have no clue how to repair this thing."))
return FALSE
var/obj/item/tool/weldingtool/WT = O
@@ -159,7 +159,7 @@
else if(HAS_TRAIT(O, TRAIT_TOOL_WIRECUTTERS))
if(buildstate == SENSORTOWER_BUILDSTATE_WIRECUTTERS && !is_on)
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(user, SPAN_WARNING("You have no clue how to repair this thing."))
return FALSE
playsound(loc, 'sound/items/Wirecutter.ogg', 25, 1)
@@ -176,7 +176,7 @@
return TRUE
else if(HAS_TRAIT(O, TRAIT_TOOL_WRENCH))
if(buildstate == SENSORTOWER_BUILDSTATE_WRENCH && !is_on)
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(user, SPAN_WARNING("You have no clue how to repair this thing."))
return FALSE
playsound(loc, 'sound/items/Ratchet.ogg', 25, 1)
diff --git a/code/modules/dropships/attach_points/templates.dm b/code/modules/dropships/attach_points/templates.dm
index bcdad8836e25..b90ec728d8fc 100644
--- a/code/modules/dropships/attach_points/templates.dm
+++ b/code/modules/dropships/attach_points/templates.dm
@@ -80,6 +80,47 @@
transverse = 3
long = 0
+/obj/effect/attach_point/weapon/dropship3
+ ship_tag = DROPSHIP_SAIPAN
+
+/obj/effect/attach_point/weapon/dropship3/left_wing
+ name = "port wing weapon attach point"
+ icon_state = "equip_base_l_wing"
+ attach_id = 1
+ dir = WEST
+ firing_arc_min = -3
+ firing_arc_max = 3
+ transverse = -3
+ long = 0
+
+/obj/effect/attach_point/weapon/dropship3/left_fore
+ name = "port fore weapon attach point"
+ attach_id = 2
+ dir = NORTH
+ firing_arc_min = -6
+ firing_arc_max = 0
+ transverse = 0
+ long = 0
+
+/obj/effect/attach_point/weapon/dropship3/right_fore
+ name = "starboard fore weapon attach point"
+ attach_id = 3
+ dir = NORTH
+ firing_arc_min = 0
+ firing_arc_max = 6
+ transverse = 0
+ long = 0
+
+/obj/effect/attach_point/weapon/dropship3/right_wing
+ name = "starboard wing weapon attach point"
+ icon_state = "equip_base_r_wing";
+ attach_id = 4
+ dir = EAST
+ firing_arc_min = -3
+ firing_arc_max = 3
+ transverse = 3
+ long = 0
+
/obj/effect/attach_point/crew_weapon
name = "crew compartment attach point"
base_category = DROPSHIP_CREW_WEAPON
@@ -96,6 +137,12 @@
/obj/effect/attach_point/crew_weapon/dropship2/floor
plane = FLOOR_PLANE
+/obj/effect/attach_point/crew_weapon/dropship3
+ ship_tag = DROPSHIP_SAIPAN
+
+/obj/effect/attach_point/crew_weapon/dropship3/floor
+ plane = FLOOR_PLANE
+
/obj/effect/attach_point/electronics
name = "electronic system attach point"
base_category = DROPSHIP_ELECTRONICS
@@ -108,6 +155,9 @@
/obj/effect/attach_point/electronics/dropship2
ship_tag = DROPSHIP_NORMANDY
+/obj/effect/attach_point/electronics/dropship3
+ ship_tag = DROPSHIP_SAIPAN
+
/obj/effect/attach_point/fuel
name = "engine system attach point"
icon = 'icons/obj/structures/props/almayer_props64.dmi'
@@ -120,6 +170,10 @@
/obj/effect/attach_point/fuel/dropship2
ship_tag = DROPSHIP_NORMANDY
+/obj/effect/attach_point/fuel/dropship3
+ ship_tag = DROPSHIP_SAIPAN
+
+
/obj/effect/attach_point/computer
base_category = DROPSHIP_COMPUTER
@@ -128,3 +182,6 @@
/obj/effect/attach_point/computer/dropship2
ship_tag = DROPSHIP_NORMANDY
+
+/obj/effect/attach_point/computer/dropship3
+ ship_tag = DROPSHIP_SAIPAN
diff --git a/code/modules/gear_presets/_select_equipment.dm b/code/modules/gear_presets/_select_equipment.dm
index 138e091ad5a4..1a61aa39efe8 100644
--- a/code/modules/gear_presets/_select_equipment.dm
+++ b/code/modules/gear_presets/_select_equipment.dm
@@ -15,7 +15,7 @@
var/list/access = list()
var/assignment
var/rank
- var/paygrade
+ var/list/paygrades = list("???")
var/role_comm_title
var/minimum_age
var/faction = FACTION_NEUTRAL
@@ -95,8 +95,33 @@
if(minimum_age && new_human.age < minimum_age)
new_human.age = minimum_age
-/datum/equipment_preset/proc/load_rank(mob/living/carbon/human/new_human, client/mob_client)
- return paygrade
+/datum/equipment_preset/proc/load_rank(mob/living/carbon/human/new_human, client/mob_client)//Beagle-Code
+ if(paygrades.len == 1)
+ return paygrades[1]
+ var/playtime
+ if(!mob_client)
+ playtime = JOB_PLAYTIME_TIER_1
+ else
+ playtime = get_job_playtime(mob_client, rank)
+ if((playtime >= JOB_PLAYTIME_TIER_1) && !mob_client.prefs.playtime_perks)
+ playtime = JOB_PLAYTIME_TIER_1
+ var/final_paygrade
+ for(var/current_paygrade as anything in paygrades)
+ var/required_time = paygrades[current_paygrade]
+ if(required_time - playtime > 0)
+ break
+ final_paygrade = current_paygrade
+ if(rank == JOB_SQUAD_MARINE && final_paygrade == PAY_SHORT_ME3)
+ if(GLOB.data_core.leveled_riflemen > GLOB.data_core.leveled_riflemen_max)
+ return PAY_SHORT_ME2
+ else
+ GLOB.data_core.leveled_riflemen++
+ return final_paygrade
+ if(!final_paygrade)
+ . = "???"
+ CRASH("[key_name(new_human)] spawned with no valid paygrade.")
+
+ return final_paygrade
/datum/equipment_preset/proc/load_gear(mob/living/carbon/human/new_human, client/mob_client)
return
@@ -110,6 +135,8 @@
/datum/equipment_preset/proc/load_id(mob/living/carbon/human/new_human, client/mob_client)
if(!idtype)
return
+ if(!mob_client)
+ mob_client = new_human.client
var/obj/item/card/id/ID = new idtype()
ID.name = "[new_human.real_name]'s ID Card"
if(assignment)
@@ -123,7 +150,7 @@
ID.registered_ref = WEAKREF(new_human)
ID.registered_gid = new_human.gid
ID.blood_type = new_human.blood_type
- ID.paygrade = load_rank(new_human) || ID.paygrade
+ ID.paygrade = load_rank(new_human, mob_client) || ID.paygrade
ID.uniform_sets = uniform_sets
new_human.equip_to_slot_or_del(ID, WEAR_ID)
new_human.faction = faction
@@ -188,7 +215,7 @@
new_human.equip_to_slot_or_del(equipping_gear, WEAR_IN_BACK)
//Gives ranks to the ranked
- var/current_rank = paygrade
+ var/current_rank = paygrades[1]
var/obj/item/card/id/I = new_human.get_idcard()
if(I)
current_rank = I.paygrade
diff --git a/code/modules/gear_presets/agents.dm b/code/modules/gear_presets/agents.dm
index c7449883b87f..b7c098de6e23 100644
--- a/code/modules/gear_presets/agents.dm
+++ b/code/modules/gear_presets/agents.dm
@@ -17,7 +17,7 @@
)
assignment = JOB_STOWAWAY
rank = JOB_STOWAWAY
- paygrade = "???"
+ paygrades = list("???" = JOB_PLAYTIME_TIER_0)
role_comm_title = "???"
skills = /datum/skills/civilian/survivor
@@ -69,7 +69,7 @@
)
assignment = JOB_UPP_REPRESENTATIVE
rank = JOB_UPP_REPRESENTATIVE
- paygrade = PAY_SHORT_CREP
+ paygrades = list(PAY_SHORT_CREP = JOB_PLAYTIME_TIER_0)
role_comm_title = "UPP Rep."
skills = /datum/skills/civilian/survivor
@@ -105,7 +105,7 @@
)
assignment = JOB_TWE_REPRESENTATIVE
rank = JOB_TWE_REPRESENTATIVE
- paygrade = PAY_SHORT_CREP
+ paygrades = list(PAY_SHORT_CREP = JOB_PLAYTIME_TIER_0)
role_comm_title = "TWE Rep."
skills = /datum/skills/civilian/survivor
diff --git a/code/modules/gear_presets/cbrn.dm b/code/modules/gear_presets/cbrn.dm
index e59f276fe486..4f6d526bf923 100644
--- a/code/modules/gear_presets/cbrn.dm
+++ b/code/modules/gear_presets/cbrn.dm
@@ -2,7 +2,7 @@
name = "Generic CBRN" //Parent type for easier gear
assignment = JOB_SQUAD_MARINE
rank = JOB_SQUAD_MARINE
- paygrade = PAY_SHORT_ME3
+ paygrades = list(PAY_SHORT_ME3 = JOB_PLAYTIME_TIER_0)
role_comm_title = "CBRN"
flags = EQUIPMENT_PRESET_EXTRA
auto_squad_name = SQUAD_CBRN
@@ -67,7 +67,7 @@
/datum/equipment_preset/uscm/cbrn/engineer
name = "CBRN Combat Technician"
- paygrade = PAY_SHORT_ME4
+ paygrades = list(PAY_SHORT_ME4 = JOB_PLAYTIME_TIER_0)
assignment = JOB_SQUAD_ENGI
rank = JOB_SQUAD_ENGI
role_comm_title = "ComTech"
@@ -111,7 +111,7 @@
/datum/equipment_preset/uscm/cbrn/medic
name = "CBRN Hospital Corpsman"
- paygrade = PAY_SHORT_ME4
+ paygrades = list(PAY_SHORT_ME4 = JOB_PLAYTIME_TIER_0)
assignment = JOB_SQUAD_MEDIC
rank = JOB_SQUAD_MEDIC
role_comm_title = "HM"
@@ -154,7 +154,7 @@
/datum/equipment_preset/uscm/cbrn/leader
name = "CBRN Fireteam Leader"
- paygrade = PAY_SHORT_ME5
+ paygrades = list(PAY_SHORT_ME5 = JOB_PLAYTIME_TIER_0)
assignment = JOB_SQUAD_TEAM_LEADER
rank = JOB_SQUAD_TEAM_LEADER
role_comm_title = "TL"
@@ -189,7 +189,7 @@
/datum/equipment_preset/uscm/cbrn/specialist
name = "CBRN Specialist"
- paygrade = PAY_SHORT_OPR
+ paygrades = list(PAY_SHORT_OPR = JOB_PLAYTIME_TIER_0)
assignment = JOB_SQUAD_SPECIALIST
rank = JOB_SQUAD_SPECIALIST
role_comm_title = "Spc"
diff --git a/code/modules/gear_presets/clf.dm b/code/modules/gear_presets/clf.dm
index dbee0e435ba4..e9570bbbab9f 100644
--- a/code/modules/gear_presets/clf.dm
+++ b/code/modules/gear_presets/clf.dm
@@ -3,7 +3,7 @@
languages = list(LANGUAGE_JAPANESE, LANGUAGE_ENGLISH)
assignment = JOB_CLF
rank = FACTION_CLF
- paygrade = PAY_SHORT_REB
+ paygrades = list(PAY_SHORT_REB = JOB_PLAYTIME_TIER_0)
faction = FACTION_CLF
origin_override = ORIGIN_CIVILIAN
idtype = /obj/item/card/id/data
@@ -283,7 +283,7 @@
assignment = JOB_CLF_MEDIC
rank = JOB_CLF_MEDIC
role_comm_title = "MED"
- paygrade = PAY_SHORT_CDOC
+ paygrades = list(PAY_SHORT_CDOC = JOB_PLAYTIME_TIER_0)
skills = /datum/skills/clf/combat_medic
/datum/equipment_preset/clf/medic/load_gear(mob/living/carbon/human/new_human)
@@ -715,7 +715,7 @@
skills = /datum/skills/colonial_synthetic
assignment = JOB_CLF_SYNTH
rank = JOB_CLF_SYNTH
- paygrade = PAY_SHORT_SYN
+ paygrades = list(PAY_SHORT_SYN = JOB_PLAYTIME_TIER_0)
role_comm_title = "Syn"
/datum/equipment_preset/clf/synth/New()
@@ -959,7 +959,7 @@
flags = EQUIPMENT_PRESET_EXTRA
assignment = JOB_CLF_COMMANDER
rank = JOB_CLF_COMMANDER
- paygrade = PAY_SHORT_REBC
+ paygrades = list(PAY_SHORT_REBC = JOB_PLAYTIME_TIER_0)
role_comm_title = "CMDR"
skills = /datum/skills/clf/commander
diff --git a/code/modules/gear_presets/cmb.dm b/code/modules/gear_presets/cmb.dm
index 45c06776a4a8..672afa99873b 100644
--- a/code/modules/gear_presets/cmb.dm
+++ b/code/modules/gear_presets/cmb.dm
@@ -58,7 +58,7 @@
/datum/equipment_preset/cmb/standard
name = "CMB - Colonial Marshal Deputy"
- paygrade = PAY_SHORT_CMBD
+ paygrades = list(PAY_SHORT_CMBD = JOB_PLAYTIME_TIER_0)
role_comm_title = "CMB DEP"
flags = EQUIPMENT_PRESET_EXTRA
assignment = "CMB Deputy"
@@ -141,7 +141,7 @@
/datum/equipment_preset/cmb/leader
name = "CMB - The Colonial Marshal"
- paygrade = PAY_SHORT_CMBM
+ paygrades = list(PAY_SHORT_CMBM = JOB_PLAYTIME_TIER_0)
idtype = /obj/item/card/id/marshal
role_comm_title = "CMB MAR"
flags = EQUIPMENT_PRESET_EXTRA
@@ -195,7 +195,7 @@
//*****************************************************************************************************/
/datum/equipment_preset/cmb/synth
name = "CMB - Colonial Marshal Investigative Synthetic"
- paygrade = PAY_SHORT_CMBS
+ paygrades = list(PAY_SHORT_CMBS = JOB_PLAYTIME_TIER_0)
idtype = /obj/item/card/id/deputy
role_comm_title = "CMB Syn"
flags = EQUIPMENT_PRESET_EXTRA
@@ -297,7 +297,7 @@
/datum/equipment_preset/cmb/liaison
name = "CMB - ICC Liaison"
- paygrade = PAY_SHORT_ICCL
+ paygrades = list(PAY_SHORT_ICCL = JOB_PLAYTIME_TIER_0)
idtype = /obj/item/card/id/silver/cl
role_comm_title = "ICC Rep."
flags = EQUIPMENT_PRESET_EXTRA
@@ -356,7 +356,7 @@
/datum/equipment_preset/cmb/observer
name = "CMB - Interstellar Human Rights Observer"
- paygrade = PAY_SHORT_IHRO
+ paygrades = list(PAY_SHORT_IHRO = JOB_PLAYTIME_TIER_0)
idtype = /obj/item/card/id/lanyard
role_comm_title = "OBS"
flags = EQUIPMENT_PRESET_EXTRA
@@ -415,7 +415,7 @@
assignment = "Anchorpoint Station Marine Rifleman"
rank = JOB_SQUAD_MARINE
- paygrade = PAY_SHORT_ME2
+ paygrades = list(PAY_SHORT_ME2 = JOB_PLAYTIME_TIER_0)
role_comm_title = "A-RFN"
skills = /datum/skills/pfc/crafty
faction = FACTION_MARSHAL
@@ -462,7 +462,7 @@
flags = EQUIPMENT_PRESET_EXTRA|EQUIPMENT_PRESET_MARINE
assignment = "Anchorpoint Station Marine Team Leader"
rank = JOB_SQUAD_LEADER
- paygrade = PAY_SHORT_ME6
+ paygrades = list(PAY_SHORT_ME6 = JOB_PLAYTIME_TIER_0)
role_comm_title = "A-TL"
minimum_age = 25
skills = /datum/skills/SL
@@ -504,7 +504,7 @@
flags = EQUIPMENT_PRESET_EXTRA|EQUIPMENT_PRESET_MARINE
assignment = "Anchorpoint Station Marine Technical Specialist"
rank = JOB_SQUAD_TEAM_LEADER
- paygrade = PAY_SHORT_ME4
+ paygrades = list(PAY_SHORT_ME4 = JOB_PLAYTIME_TIER_0)
role_comm_title = "A-TS"
skills = /datum/skills/tl
@@ -546,7 +546,7 @@
flags = EQUIPMENT_PRESET_EXTRA|EQUIPMENT_PRESET_MARINE
assignment = "Anchorpoint Station Hospital Corpsman"
rank = JOB_SQUAD_MEDIC
- paygrade = PAY_SHORT_ME3
+ paygrades = list(PAY_SHORT_ME3 = JOB_PLAYTIME_TIER_0)
role_comm_title = "A-HM"
skills = /datum/skills/combat_medic
@@ -604,7 +604,7 @@
flags = EQUIPMENT_PRESET_EXTRA|EQUIPMENT_PRESET_MARINE
assignment = "Anchorpoint Station Marine Smartgunner"
rank = JOB_SQUAD_SMARTGUN
- paygrade = PAY_SHORT_ME3
+ paygrades = list(PAY_SHORT_ME3 = JOB_PLAYTIME_TIER_0)
role_comm_title = "A-SG"
skills = /datum/skills/smartgunner
diff --git a/code/modules/gear_presets/colonist.dm b/code/modules/gear_presets/colonist.dm
index 81e5c8ec6ae8..a5b33c428f2e 100644
--- a/code/modules/gear_presets/colonist.dm
+++ b/code/modules/gear_presets/colonist.dm
@@ -75,6 +75,7 @@
name = "Colonist - Doctor"
flags = EQUIPMENT_PRESET_EXTRA
assignment = "Colonial Doctor"
+ paygrades = list(PAY_SHORT_CDOC = JOB_PLAYTIME_TIER_0)
//Marine access is required to use chem dispensers...
access = list(ACCESS_CIVILIAN_PUBLIC, ACCESS_CIVILIAN_RESEARCH, ACCESS_MARINE_MEDBAY, ACCESS_MARINE_CHEMISTRY, ACCESS_MARINE_MORGUE)
diff --git a/code/modules/gear_presets/contractor.dm b/code/modules/gear_presets/contractor.dm
index f49b78609945..2d8f4dd960fe 100644
--- a/code/modules/gear_presets/contractor.dm
+++ b/code/modules/gear_presets/contractor.dm
@@ -61,7 +61,7 @@
/datum/equipment_preset/contractor/duty/standard
name = "Military Contractor (Standard)"
- paygrade = PAY_SHORT_VAI_S
+ paygrades = list(PAY_SHORT_VAI_S = JOB_PLAYTIME_TIER_0)
role_comm_title = "Merc"
flags = EQUIPMENT_PRESET_EXTRA
assignment = "VAIPO Mercenary"
@@ -160,7 +160,7 @@
/datum/equipment_preset/contractor/duty/heavy
name = "Military Contractor (Machinegunner)"
- paygrade = PAY_SHORT_VAI_G
+ paygrades = list(PAY_SHORT_VAI_G = JOB_PLAYTIME_TIER_0)
role_comm_title = "MG"
flags = EQUIPMENT_PRESET_EXTRA
@@ -170,16 +170,14 @@
faction = FACTION_CONTRACTOR
/datum/equipment_preset/contractor/duty/heavy/load_gear(mob/living/carbon/human/new_human)
+
+ var/choice = rand(1,3)
new_human.equip_to_slot_or_del(new headset_type, WEAR_L_EAR)
new_human.equip_to_slot_or_del(new /obj/item/clothing/under/tshirt/gray_blu, WEAR_BODY)
new_human.equip_to_slot_or_del(new /obj/item/clothing/accessory/storage/webbing, WEAR_ACCESSORY)
- new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/mar40/lmg, WEAR_IN_ACCESSORY)
- new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/mar40/lmg, WEAR_IN_ACCESSORY)
- new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/mar40/lmg, WEAR_IN_ACCESSORY)
new_human.equip_to_slot_or_del(new /obj/item/clothing/accessory/holobadge/cord, WEAR_ACCESSORY)
new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/light/vest, WEAR_JACKET)
new_human.equip_to_slot_or_del(new /obj/item/device/binoculars/range, WEAR_IN_JACKET)
- new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/rifle/mar40/lmg/tactical, WEAR_J_STORE)
new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/m4a3/m1911/socom, WEAR_WAIST)
new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/veteran, WEAR_HANDS)
new_human.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/marine, WEAR_HEAD)
@@ -190,6 +188,9 @@
new_human.equip_to_slot_or_del(new /obj/item/explosive/plastic/breaching_charge, WEAR_IN_R_STORE)
new_human.equip_to_slot_or_del(new /obj/item/explosive/plastic/breaching_charge, WEAR_IN_R_STORE)
new_human.equip_to_slot_or_del(new /obj/item/explosive/plastic/breaching_charge, WEAR_IN_R_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/explosive/plastic/breaching_charge, WEAR_IN_R_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/explosive/plastic/breaching_charge, WEAR_IN_R_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/explosive/plastic/breaching_charge, WEAR_IN_R_STORE)
//backpack and stuff in it
new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/lightpack, WEAR_BACK)
new_human.equip_to_slot_or_del(new /obj/item/storage/firstaid/regular/response, WEAR_IN_BACK)
@@ -197,15 +198,30 @@
new_human.equip_to_slot_or_del(new /obj/item/storage/box/MRE,WEAR_IN_BACK)
new_human.equip_to_slot_or_del(new /obj/item/tool/crowbar/tactical, WEAR_IN_BACK)
new_human.equip_to_slot_or_del(new /obj/item/explosive/grenade/high_explosive/m15, WEAR_IN_BACK)
- new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/mar40/lmg, WEAR_IN_BACK)
- new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/mar40/lmg, WEAR_IN_BACK)
new_human.equip_to_slot_or_del(new /obj/item/storage/box/attachments(new_human), WEAR_IN_BACK)
+ switch(choice)
+ if(1,2) // 66%
+ new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/rifle/mar40/lmg/tactical, WEAR_J_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/accessory/storage/webbing, WEAR_ACCESSORY)
+ new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/mar40/lmg, WEAR_IN_ACCESSORY)
+ new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/mar40/lmg, WEAR_IN_ACCESSORY)
+ new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/mar40/lmg, WEAR_IN_ACCESSORY)
+ new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/mar40/lmg, WEAR_IN_BACK)
+ new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/mar40/lmg, WEAR_IN_BACK)
+ if(3) // 33%
+ new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/rifle/lmg/tactical, WEAR_J_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/accessory/storage/webbing, WEAR_ACCESSORY)
+ new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/lmg, WEAR_IN_ACCESSORY)
+ new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/lmg, WEAR_IN_ACCESSORY)
+ new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/lmg, WEAR_IN_ACCESSORY)
+ new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/lmg/ap, WEAR_IN_BACK)
+ new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/lmg/ap, WEAR_IN_BACK)
//*****************************************************************************************************/
/datum/equipment_preset/contractor/duty/engi
name = "Military Contractor (Engineer)"
- paygrade = PAY_SHORT_VAI_E
+ paygrades = list(PAY_SHORT_VAI_E = JOB_PLAYTIME_TIER_0)
role_comm_title = "Eng"
flags = EQUIPMENT_PRESET_EXTRA
@@ -252,7 +268,7 @@
/datum/equipment_preset/contractor/duty/medic
name = "Military Contractor (Medic)"
- paygrade = PAY_SHORT_VAI_M
+ paygrades = list(PAY_SHORT_VAI_M = JOB_PLAYTIME_TIER_0)
role_comm_title = "Med"
flags = EQUIPMENT_PRESET_EXTRA
@@ -298,7 +314,7 @@
/datum/equipment_preset/contractor/duty/leader
name = "Military Contractor (Leader)"
- paygrade = PAY_SHORT_VAI_L
+ paygrades = list(PAY_SHORT_VAI_L = JOB_PLAYTIME_TIER_0)
role_comm_title = "TL"
flags = EQUIPMENT_PRESET_EXTRA
@@ -348,7 +364,7 @@
//*****************************************************************************************************/
/datum/equipment_preset/contractor/duty/synth
name = "Military Contractor (Synthetic)"
- paygrade = PAY_SHORT_VAI_SN
+ paygrades = list(PAY_SHORT_VAI_SN = JOB_PLAYTIME_TIER_0)
role_comm_title = "Syn"
flags = EQUIPMENT_PRESET_EXTRA
@@ -438,7 +454,7 @@
/datum/equipment_preset/contractor/covert/standard
name = "Military Contractor (Covert Standard)"
- paygrade = PAY_SHORT_VAI_S
+ paygrades = list(PAY_SHORT_VAI_S = JOB_PLAYTIME_TIER_0)
role_comm_title = "Merc"
flags = EQUIPMENT_PRESET_EXTRA
@@ -539,7 +555,7 @@
/datum/equipment_preset/contractor/covert/heavy
name = "Military Contractor (Covert Machinegunner)"
- paygrade = PAY_SHORT_VAI_G
+ paygrades = list(PAY_SHORT_VAI_G = JOB_PLAYTIME_TIER_0)
role_comm_title = "MG"
flags = EQUIPMENT_PRESET_EXTRA
@@ -552,13 +568,13 @@
new_human.equip_to_slot_or_del(new headset_type, WEAR_L_EAR)
new_human.equip_to_slot_or_del(new /obj/item/clothing/under/colonist/ua_civvies, WEAR_BODY)
new_human.equip_to_slot_or_del(new /obj/item/clothing/accessory/storage/webbing, WEAR_ACCESSORY)
- new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/mar40/lmg, WEAR_IN_ACCESSORY)
- new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/mar40/lmg, WEAR_IN_ACCESSORY)
- new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/mar40/lmg, WEAR_IN_ACCESSORY)
+ new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/lmg/ap, WEAR_IN_ACCESSORY)
+ new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/lmg/ap, WEAR_IN_ACCESSORY)
+ new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/lmg/ap, WEAR_IN_ACCESSORY)
new_human.equip_to_slot_or_del(new /obj/item/clothing/accessory/holobadge/cord, WEAR_ACCESSORY)
new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/light/vest, WEAR_JACKET)
new_human.equip_to_slot_or_del(new /obj/item/device/binoculars/range, WEAR_IN_JACKET)
- new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/rifle/mar40/lmg/tactical, WEAR_J_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/rifle/lmg/tactical, WEAR_J_STORE)
new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/m4a3/m1911/socom, WEAR_WAIST)
new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/veteran, WEAR_HANDS)
new_human.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/pmc, WEAR_FACE)
@@ -571,6 +587,9 @@
new_human.equip_to_slot_or_del(new /obj/item/explosive/plastic/breaching_charge, WEAR_IN_R_STORE)
new_human.equip_to_slot_or_del(new /obj/item/explosive/plastic/breaching_charge, WEAR_IN_R_STORE)
new_human.equip_to_slot_or_del(new /obj/item/explosive/plastic/breaching_charge, WEAR_IN_R_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/explosive/plastic/breaching_charge, WEAR_IN_R_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/explosive/plastic/breaching_charge, WEAR_IN_R_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/explosive/plastic/breaching_charge, WEAR_IN_R_STORE)
//backpack and stuff in it
new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/lightpack, WEAR_BACK)
new_human.equip_to_slot_or_del(new /obj/item/storage/firstaid/regular/response, WEAR_IN_BACK)
@@ -578,15 +597,15 @@
new_human.equip_to_slot_or_del(new /obj/item/storage/box/MRE,WEAR_IN_BACK)
new_human.equip_to_slot_or_del(new /obj/item/tool/crowbar/tactical, WEAR_IN_BACK)
new_human.equip_to_slot_or_del(new /obj/item/explosive/grenade/high_explosive/m15, WEAR_IN_BACK)
- new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/mar40/lmg, WEAR_IN_BACK)
- new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/mar40/lmg, WEAR_IN_BACK)
+ new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/lmg, WEAR_IN_BACK)
+ new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/lmg, WEAR_IN_BACK)
new_human.equip_to_slot_or_del(new /obj/item/storage/box/attachments(new_human), WEAR_IN_BACK)
//*****************************************************************************************************/
/datum/equipment_preset/contractor/covert/engi
name = "Military Contractor (Covert Engineer)"
- paygrade = PAY_SHORT_VAI_E
+ paygrades = list(PAY_SHORT_VAI_E = JOB_PLAYTIME_TIER_0)
role_comm_title = "Eng"
flags = EQUIPMENT_PRESET_EXTRA
@@ -634,7 +653,7 @@
/datum/equipment_preset/contractor/covert/medic
name = "Military Contractor (Covert Medic)"
- paygrade = PAY_SHORT_VAI_M
+ paygrades = list(PAY_SHORT_VAI_M = JOB_PLAYTIME_TIER_0)
role_comm_title = "Med"
flags = EQUIPMENT_PRESET_EXTRA
@@ -681,7 +700,7 @@
/datum/equipment_preset/contractor/covert/leader
name = "Military Contractor (Covert Leader)"
- paygrade = PAY_SHORT_VAI_L
+ paygrades = list(PAY_SHORT_VAI_L = JOB_PLAYTIME_TIER_0)
role_comm_title = "TL"
flags = EQUIPMENT_PRESET_EXTRA
@@ -732,7 +751,7 @@
//*****************************************************************************************************/
/datum/equipment_preset/contractor/covert/synth
name = "Military Contractor (Covert Synthetic)"
- paygrade = PAY_SHORT_VAI_SN
+ paygrades = list(PAY_SHORT_VAI_SN = JOB_PLAYTIME_TIER_0)
role_comm_title = "Syn"
flags = EQUIPMENT_PRESET_EXTRA
diff --git a/code/modules/gear_presets/corpses.dm b/code/modules/gear_presets/corpses.dm
index 7bf9592a6209..d84cf766c4fc 100644
--- a/code/modules/gear_presets/corpses.dm
+++ b/code/modules/gear_presets/corpses.dm
@@ -205,7 +205,7 @@
/datum/equipment_preset/corpse/security/cmb
name = "Corpse - Colonial Marshal Deputy"
rank = JOB_CMB
- paygrade = PAY_SHORT_CMBD
+ paygrades = list(PAY_SHORT_CMBD = JOB_PLAYTIME_TIER_0)
idtype = /obj/item/card/id/deputy
xenovictim = TRUE
access = list(
@@ -240,7 +240,7 @@
assignment = JOB_EXECUTIVE
rank = JOB_EXECUTIVE
faction_group = FACTION_LIST_WY
- paygrade = PAY_SHORT_WYC3
+ paygrades = list(PAY_SHORT_WYC3 = JOB_PLAYTIME_TIER_0)
idtype = /obj/item/card/id/silver/clearance_badge/cl
xenovictim = TRUE
access = list(
@@ -316,7 +316,7 @@
assignment = "Colonial Division Manager"
rank = JOB_DIVISION_MANAGER
faction_group = FACTION_LIST_WY
- paygrade = PAY_SHORT_WYC8
+ paygrades = list(PAY_SHORT_WYC8 = JOB_PLAYTIME_TIER_0)
access = list(
ACCESS_WY_GENERAL,
ACCESS_WY_COLONIAL,
@@ -352,7 +352,7 @@
assignment = "Colonial Administrator"
rank = JOB_DIRECTOR
faction_group = FACTION_LIST_WY
- paygrade = PAY_SHORT_WYC10
+ paygrades = list(PAY_SHORT_WYC10 = JOB_PLAYTIME_TIER_0)
idtype = /obj/item/card/id/silver/cl
access = list(
ACCESS_CIVILIAN_PUBLIC,
@@ -536,7 +536,7 @@
name = "Corpse - Corporate Supervisor"
assignment = "Colony Supervisor"
flags = EQUIPMENT_PRESET_EXTRA
- paygrade = PAY_SHORT_WYC6
+ paygrades = list(PAY_SHORT_WYC6 = JOB_PLAYTIME_TIER_0)
rank = FACTION_WY
idtype = /obj/item/card/id/silver/clearance_badge/manager
faction_group = FACTION_LIST_WY
@@ -617,7 +617,7 @@
name = "Corpse - Union of Progressive Peoples Soldier"
assignment = JOB_UPP
idtype = /obj/item/card/id/dogtag
- paygrade = PAY_SHORT_UE2
+ paygrades = list(PAY_SHORT_UE2 = JOB_PLAYTIME_TIER_0)
rank = JOB_UPP
faction = FACTION_UPP
@@ -654,7 +654,7 @@
faction = FACTION_PMC
faction_group = FACTION_LIST_WY
rank = JOB_PMC_STANDARD
- paygrade = PAY_SHORT_PMC_OP
+ paygrades = list(PAY_SHORT_PMC_OP = JOB_PLAYTIME_TIER_0)
idtype = /obj/item/card/id/pmc
access = list(
ACCESS_CIVILIAN_PUBLIC,
@@ -698,7 +698,7 @@
languages = list(LANGUAGE_ENGLISH)
assignment = JOB_WY_GOON
rank = JOB_WY_GOON
- paygrade = PAY_SHORT_CPO
+ paygrades = list(PAY_SHORT_CPO = JOB_PLAYTIME_TIER_0)
/datum/equipment_preset/corpse/pmc/goon/load_gear(mob/living/carbon/human/new_human)
new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/WY, WEAR_L_EAR)
@@ -706,7 +706,7 @@
new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/veteran/pmc/light/corporate, WEAR_JACKET)
new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/veteran, WEAR_HANDS)
new_human.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/marine/veteran/pmc/corporate, WEAR_HEAD)
- new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/corporate, WEAR_FEET)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/corporate/knife, WEAR_FEET)
new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/lightpack/five_slot, WEAR_BACK)
new_human.equip_to_slot_or_del(new /obj/item/weapon/baton, WEAR_IN_BACK)
@@ -723,7 +723,7 @@
flags = EQUIPMENT_PRESET_EXTRA
assignment = JOB_WY_GOON_LEAD
rank = JOB_WY_GOON_LEAD
- paygrade = PAY_SHORT_CSPO
+ paygrades = list(PAY_SHORT_CSPO = JOB_PLAYTIME_TIER_0)
/datum/equipment_preset/corpse/pmc/goon/lead/load_gear(mob/living/carbon/human/new_human)
new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/WY, WEAR_L_EAR)
@@ -731,7 +731,7 @@
new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/veteran/pmc/light/corporate/lead, WEAR_JACKET)
new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/veteran, WEAR_HANDS)
new_human.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/marine/veteran/pmc/corporate/lead, WEAR_HEAD)
- new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/corporate, WEAR_FEET)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/corporate/knife, WEAR_FEET)
new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/lightpack/five_slot, WEAR_BACK)
new_human.equip_to_slot_or_del(new /obj/item/weapon/baton, WEAR_IN_BACK)
@@ -749,7 +749,7 @@
/datum/equipment_preset/corpse/freelancer
name = "Corpse - Freelancer"
- paygrade = PAY_SHORT_FL_S
+ paygrades = list(PAY_SHORT_FL_S = JOB_PLAYTIME_TIER_0)
rank = FACTION_FREELANCER
idtype = /obj/item/card/id/data
faction = FACTION_FREELANCER
@@ -965,7 +965,7 @@
name = "Corpse - USCM Reconnaissance Spotter"
assignment = "Reconnaissance Spotter"
xenovictim = FALSE
- paygrade = PAY_SHORT_ME5
+ paygrades = list(PAY_SHORT_ME5 = JOB_PLAYTIME_TIER_0)
idtype = /obj/item/card/id/dogtag
role_comm_title = "FORECON"
faction_group = list(FACTION_MARINE, FACTION_SURVIVOR)
diff --git a/code/modules/gear_presets/dust_raider.dm b/code/modules/gear_presets/dust_raider.dm
index c33d071a0b57..42f234d6399d 100644
--- a/code/modules/gear_presets/dust_raider.dm
+++ b/code/modules/gear_presets/dust_raider.dm
@@ -24,7 +24,7 @@
access = list(ACCESS_MARINE_PREP)
assignment = JOB_SQUAD_MARINE
rank = JOB_SQUAD_MARINE
- paygrade = PAY_SHORT_ME2
+ paygrades = list(PAY_SHORT_ME2 = JOB_PLAYTIME_TIER_0)
role_comm_title = "RFN"
skills = /datum/skills/pfc/crafty
@@ -46,7 +46,7 @@
access = list(ACCESS_MARINE_PREP)
assignment = JOB_SQUAD_LEADER
rank = JOB_SQUAD_LEADER
- paygrade = PAY_SHORT_ME5
+ paygrades = list(PAY_SHORT_ME5 = JOB_PLAYTIME_TIER_0)
role_comm_title = "SL"
skills = /datum/skills/SL
@@ -75,7 +75,7 @@
access = list(ACCESS_MARINE_PREP, ACCESS_MARINE_SMARTPREP)
assignment = JOB_SQUAD_SMARTGUN
rank = JOB_SQUAD_SMARTGUN
- paygrade = PAY_SHORT_ME3
+ paygrades = list(PAY_SHORT_ME3 = JOB_PLAYTIME_TIER_0)
role_comm_title = "SG"
skills = /datum/skills/smartgunner
@@ -100,7 +100,7 @@
access = list(ACCESS_MARINE_PREP, ACCESS_MARINE_ENGPREP, ACCESS_CIVILIAN_ENGINEERING)
assignment = JOB_SQUAD_ENGI
rank = JOB_SQUAD_ENGI
- paygrade = PAY_SHORT_ME3
+ paygrades = list(PAY_SHORT_ME3 = JOB_PLAYTIME_TIER_0)
role_comm_title = "Eng"
skills = /datum/skills/combat_engineer
@@ -129,7 +129,7 @@
access = list(ACCESS_MARINE_PREP, ACCESS_MARINE_MEDPREP, ACCESS_MARINE_MEDBAY)
assignment = JOB_SQUAD_MEDIC
rank = JOB_SQUAD_MEDIC
- paygrade = PAY_SHORT_ME3
+ paygrades = list(PAY_SHORT_ME3 = JOB_PLAYTIME_TIER_0)
role_comm_title = "HM"
skills = /datum/skills/combat_medic
@@ -164,7 +164,7 @@
access = list(ACCESS_MARINE_PREP, ACCESS_MARINE_SPECPREP)
assignment = JOB_SQUAD_SPECIALIST
rank = JOB_SQUAD_SPECIALIST
- paygrade = PAY_SHORT_ME3
+ paygrades = list(PAY_SHORT_ME3 = JOB_PLAYTIME_TIER_0)
role_comm_title = "Spc"
skills = /datum/skills/specialist
diff --git a/code/modules/gear_presets/dutch.dm b/code/modules/gear_presets/dutch.dm
index 66a7254494b2..8a51fb9d59e2 100644
--- a/code/modules/gear_presets/dutch.dm
+++ b/code/modules/gear_presets/dutch.dm
@@ -2,7 +2,7 @@
/datum/equipment_preset/dutch
name = JOB_DUTCH_RIFLEMAN
- paygrade = PAY_SHORT_DTC
+ paygrades = list(PAY_SHORT_DTC = JOB_PLAYTIME_TIER_0)
assignment = JOB_DUTCH_RIFLEMAN
flags = EQUIPMENT_PRESET_EXTRA
faction = FACTION_DUTCH
@@ -83,7 +83,7 @@
/datum/equipment_preset/dutch/minigun
name = JOB_DUTCH_MINIGUNNER
- paygrade = PAY_SHORT_DTCMG
+ paygrades = list(PAY_SHORT_DTCMG = JOB_PLAYTIME_TIER_0)
assignment = JOB_DUTCH_MINIGUNNER
flags = EQUIPMENT_PRESET_EXTRA
@@ -116,7 +116,7 @@
/datum/equipment_preset/dutch/flamer
name = JOB_DUTCH_FLAMETHROWER
- paygrade = PAY_SHORT_DTCF
+ paygrades = list(PAY_SHORT_DTCF = JOB_PLAYTIME_TIER_0)
assignment = JOB_DUTCH_FLAMETHROWER
flags = EQUIPMENT_PRESET_EXTRA
@@ -150,7 +150,7 @@
/datum/equipment_preset/dutch/medic
name = JOB_DUTCH_MEDIC
- paygrade = PAY_SHORT_DTCM
+ paygrades = list(PAY_SHORT_DTCM = JOB_PLAYTIME_TIER_0)
assignment = JOB_DUTCH_MEDIC
flags = EQUIPMENT_PRESET_EXTRA
@@ -193,7 +193,7 @@
/datum/equipment_preset/dutch/arnie
name = "Dutch's Dozen - Arnold"
- paygrade = PAY_SHORT_DTCA
+ paygrades = list(PAY_SHORT_DTCA = JOB_PLAYTIME_TIER_0)
assignment = JOB_DUTCH_ARNOLD
flags = EQUIPMENT_PRESET_EXTRA
diff --git a/code/modules/gear_presets/fun.dm b/code/modules/gear_presets/fun.dm
index f24f7f9a2029..f9b6970015c8 100644
--- a/code/modules/gear_presets/fun.dm
+++ b/code/modules/gear_presets/fun.dm
@@ -82,7 +82,7 @@
idtype = /obj/item/card/id/gold
assignment = "Shrapnelsworn"
rank = "Brother of the Order"
- paygrade = "Ser"
+ paygrades = list("Ser" = JOB_PLAYTIME_TIER_0)
role_comm_title = "OHEFA"
skills = /datum/skills/specialist
@@ -240,7 +240,7 @@
/datum/equipment_preset/fun/santa
name = "Fun - Santa"
- paygrade = PAY_SHORT_CDNM
+ paygrades = list(PAY_SHORT_CDNM = JOB_PLAYTIME_TIER_0)
flags = EQUIPMENT_PRESET_EXTRA
skills = /datum/skills/everything
faction = FACTION_MARINE
@@ -289,7 +289,7 @@
/datum/equipment_preset/upp/ivan
name = "Fun - Ivan"
flags = EQUIPMENT_PRESET_EXTRA
- paygrade = PAY_SHORT_UE6
+ paygrades = list(PAY_SHORT_UE6 = JOB_PLAYTIME_TIER_0)
skills = /datum/skills/everything
assignment = "UPP Armsmaster"
rank = "UPP Armsmaster"
@@ -339,7 +339,7 @@
/datum/equipment_preset/fun/van_bandolier
name = "Fun - Big Game Hunter"
- paygrade = PAY_SHORT_CCMO
+ paygrades = list(PAY_SHORT_CCMO = JOB_PLAYTIME_TIER_0)
uses_special_name = TRUE
flags = EQUIPMENT_PRESET_EXTRA
skills = /datum/skills/everything
@@ -441,7 +441,7 @@
assignment = "Monkey Marine"
rank = "Monkey Marine"
- paygrade = PAY_SHORT_ME2
+ paygrades = list(PAY_SHORT_ME2 = JOB_PLAYTIME_TIER_0)
/datum/equipment_preset/fun/monkey/marine/load_gear(mob/living/carbon/human/new_human)
new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine(new_human), WEAR_BODY)
@@ -458,7 +458,7 @@
assignment = "Monkey Soldier"
rank = "Monkey Soldier"
- paygrade = PAY_SHORT_UE1
+ paygrades = list(PAY_SHORT_UE1 = JOB_PLAYTIME_TIER_0)
/datum/equipment_preset/fun/monkey/soldier/get_random_name(mob/living/carbon/human/new_human)
return new_human.gender == MALE ? pick(GLOB.first_names_male_upp) : pick(GLOB.first_names_female_upp)
diff --git a/code/modules/gear_presets/other.dm b/code/modules/gear_presets/other.dm
index 4d7ef9bda559..063263748e02 100644
--- a/code/modules/gear_presets/other.dm
+++ b/code/modules/gear_presets/other.dm
@@ -60,7 +60,7 @@
/datum/equipment_preset/other/freelancer/standard
name = "Freelancer (Standard)"
- paygrade = PAY_SHORT_FL_S
+ paygrades = list(PAY_SHORT_FL_S = JOB_PLAYTIME_TIER_0)
flags = EQUIPMENT_PRESET_EXTRA
skills = /datum/skills/freelancer
@@ -132,7 +132,7 @@
/datum/equipment_preset/other/freelancer/medic
name = "Freelancer (Medic)"
- paygrade = PAY_SHORT_FL_M
+ paygrades = list(PAY_SHORT_FL_M = JOB_PLAYTIME_TIER_0)
flags = EQUIPMENT_PRESET_EXTRA
assignment = "Freelancer Medic"
skills = /datum/skills/freelancer/combat_medic
@@ -203,7 +203,7 @@
/datum/equipment_preset/other/freelancer/leader
name = "Freelancer (Leader)"
- paygrade = PAY_SHORT_FL_WL
+ paygrades = list(PAY_SHORT_FL_WL = JOB_PLAYTIME_TIER_0)
flags = EQUIPMENT_PRESET_EXTRA
assignment = "Freelancer Warlord"
languages = list(LANGUAGE_ENGLISH, LANGUAGE_RUSSIAN, LANGUAGE_CHINESE, LANGUAGE_JAPANESE)
@@ -269,7 +269,7 @@
/datum/equipment_preset/other/elite_merc/standard
name = "Elite Mercenary (Standard Miner)"
- paygrade = PAY_SHORT_EFL_S
+ paygrades = list(PAY_SHORT_EFL_S = JOB_PLAYTIME_TIER_0)
flags = EQUIPMENT_PRESET_EXTRA
idtype = /obj/item/card/id/centcom
@@ -306,7 +306,7 @@
/datum/equipment_preset/other/elite_merc/heavy
name = "Elite Mercenary (Heavy)"
- paygrade = PAY_SHORT_EFL_H
+ paygrades = list(PAY_SHORT_EFL_H = JOB_PLAYTIME_TIER_0)
flags = EQUIPMENT_PRESET_EXTRA
idtype = /obj/item/card/id/centcom
@@ -346,7 +346,7 @@
//*****************************************************************************************************/
/datum/equipment_preset/other/elite_merc/engineer
name = "Elite Mercenary (Engineer)"
- paygrade = PAY_SHORT_EFL_E
+ paygrades = list(PAY_SHORT_EFL_E = JOB_PLAYTIME_TIER_0)
flags = EQUIPMENT_PRESET_EXTRA
idtype = /obj/item/card/id/data
@@ -400,7 +400,7 @@
/datum/equipment_preset/other/elite_merc/medic
name = "Elite Mercenary (Medic)"
- paygrade = PAY_SHORT_EFL_M
+ paygrades = list(PAY_SHORT_EFL_M = JOB_PLAYTIME_TIER_0)
flags = EQUIPMENT_PRESET_EXTRA
idtype = /obj/item/card/id/centcom
@@ -446,7 +446,7 @@
/datum/equipment_preset/other/elite_merc/leader
name = "Elite Mercenary (Leader)"
- paygrade = PAY_SHORT_EFL_TL
+ paygrades = list(PAY_SHORT_EFL_TL = JOB_PLAYTIME_TIER_0)
flags = EQUIPMENT_PRESET_EXTRA
idtype = /obj/item/card/id/centcom
@@ -827,12 +827,13 @@
flags = EQUIPMENT_PRESET_EXTRA
assignment = "DUMMY"
rank = "DUMMY"
+ paygrades = list(PAY_SHORT_CCMO)
idtype = /obj/item/card/id/dogtag
uses_special_name = TRUE
/datum/equipment_preset/other/professor_dummy/load_name(mob/living/carbon/human/new_human, randomise)
new_human.gender = pick(MALE, FEMALE)
- new_human.real_name = "Professor DUMMY the Medical Mannequin"
+ new_human.real_name = "Alex the Medical Mannequin"
new_human.name = new_human.real_name
new_human.age = rand(1,5)
var/datum/preferences/A = new
@@ -860,7 +861,7 @@
idtype = /obj/item/card/id/dogtag
assignment = JOB_TANK_CREW
rank = JOB_TANK_CREW
- paygrade = PAY_SHORT_ME4
+ paygrades = list(PAY_SHORT_ME4 = JOB_PLAYTIME_TIER_0)
role_comm_title = "CRMN"
minimum_age = 30
skills = /datum/skills/tank_crew
@@ -900,7 +901,7 @@
idtype = /obj/item/card/id/dogtag
assignment = "Crewman Trainee"
rank = "Crewman Trainee"
- paygrade = PAY_SHORT_ME3
+ paygrades = list(PAY_SHORT_ME3 = JOB_PLAYTIME_TIER_0)
role_comm_title = "CRTR"
minimum_age = 25
skills = /datum/skills/tank_crew
@@ -954,7 +955,7 @@
flags = EQUIPMENT_PRESET_EXTRA
assignment = JOB_SQUAD_MARINE
rank = JOB_SQUAD_MARINE
- paygrade = "ME2"
+ paygrades = list(PAY_SHORT_ME1 = JOB_PLAYTIME_TIER_0)
role_comm_title = "RFN"
skills = /datum/skills/pfc/crafty
minimap_icon = "private"
diff --git a/code/modules/gear_presets/pmc.dm b/code/modules/gear_presets/pmc.dm
index 8dde038f3891..60f25442f04e 100644
--- a/code/modules/gear_presets/pmc.dm
+++ b/code/modules/gear_presets/pmc.dm
@@ -61,7 +61,7 @@
assignment = JOB_PMC_STANDARD
rank = JOB_PMC_STANDARD
- paygrade = PAY_SHORT_PMC_OP
+ paygrades = list(PAY_SHORT_PMC_OP = JOB_PLAYTIME_TIER_0)
skills = /datum/skills/pmc
/datum/equipment_preset/pmc/pmc_standard/load_gear(mob/living/carbon/human/new_human)
@@ -132,7 +132,7 @@
list("M276 General Pistol Holster Rig", 0, /obj/item/storage/belt/gun/m4a3, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
list("M276 Knife Rig (Full)", 0, /obj/item/storage/belt/knifepouch, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
list("M276 M39 Holster Rig", 0, /obj/item/storage/large_holster/m39, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
- list("M276 M44 Holster Rig", 0, /obj/item/storage/belt/gun/m44, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
+ list("M276 Revolver Holster Rig", 0, /obj/item/storage/belt/gun/m44, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
list("M276 M82F Holster Rig", 0, /obj/item/storage/belt/gun/flaregun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
list("M276 Shotgun Shell Loading Rig", 0, /obj/item/storage/belt/shotgun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
list("M276 G8-A General Utility Pouch", 0, /obj/item/storage/backpack/general_belt, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
@@ -203,7 +203,7 @@ list("POUCHES (CHOOSE 2)", 0, null, null, null),
assignment = JOB_PMC_DETAINER
rank = JOB_PMC_DETAINER
- paygrade = PAY_SHORT_PMC_EN
+ paygrades = list(PAY_SHORT_PMC_EN = JOB_PLAYTIME_TIER_0)
skills = /datum/skills/pmc
/datum/equipment_preset/pmc/pmc_detainer/load_gear(mob/living/carbon/human/new_human)
@@ -261,7 +261,7 @@ list("POUCHES (CHOOSE 2)", 0, null, null, null),
list("M276 General Pistol Holster Rig", 0, /obj/item/storage/belt/gun/m4a3, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
list("M276 Knife Rig (Full)", 0, /obj/item/storage/belt/knifepouch, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
list("M276 M39 Holster Rig", 0, /obj/item/storage/large_holster/m39, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
- list("M276 M44 Holster Rig", 0, /obj/item/storage/belt/gun/m44, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
+ list("M276 Revolver Holster Rig", 0, /obj/item/storage/belt/gun/m44, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
list("M276 M82F Holster Rig", 0, /obj/item/storage/belt/gun/flaregun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
list("M276 Shotgun Shell Loading Rig", 0, /obj/item/storage/belt/shotgun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
list("M276 G8-A General Utility Pouch", 0, /obj/item/storage/backpack/general_belt, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
@@ -332,7 +332,7 @@ list("POUCHES (CHOOSE 2)", 0, null, null, null),
assignment = JOB_PMC_MEDIC
rank = JOB_PMC_MEDIC
- paygrade = PAY_SHORT_PMC_MS
+ paygrades = list(PAY_SHORT_PMC_MS = JOB_PLAYTIME_TIER_0)
skills = /datum/skills/pmc/medic
headset_type = /obj/item/device/radio/headset/distress/pmc/medic
@@ -395,7 +395,7 @@ list("POUCHES (CHOOSE 2)", 0, null, null, null),
list("M276 Lifesaver Bag (Full)", 0, /obj/item/storage/belt/medical/lifesaver/full/dutch, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED),
list("M276 Medical Storage Rig (Full)", 0, /obj/item/storage/belt/medical/full, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED),
list("M276 M39 Holster Rig", 0, /obj/item/storage/large_holster/m39, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
- list("M276 M44 Holster Rig", 0, /obj/item/storage/belt/gun/m44, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
+ list("M276 Revolver Holster Rig", 0, /obj/item/storage/belt/gun/m44, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
list("M276 M82F Holster Rig", 0, /obj/item/storage/belt/gun/flaregun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
list("M276 Shotgun Shell Loading Rig", 0, /obj/item/storage/belt/shotgun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
list("M276 M40 Grenade Rig", 0, /obj/item/storage/belt/grenade, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
@@ -415,7 +415,8 @@ list("POUCHES (CHOOSE 2)", 0, null, null, null),
list("Medical Kit Pouch", 0, /obj/item/storage/pouch/medkit, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
list("Pressurized Reagent Canister Pouch (Bicaridine)", 0, /obj/item/storage/pouch/pressurized_reagent_canister/bicaridine, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
list("Pressurized Reagent Canister Pouch (Kelotane)", 0, /obj/item/storage/pouch/pressurized_reagent_canister/kelotane, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
- list("Pressurized Reagent Canister Pouch (Revival Mix)", 0, /obj/item/storage/pouch/pressurized_reagent_canister/revival, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
+ list("Pressurized Reagent Canister Pouch (Revival Mix - Tricordrazine)", 0, /obj/item/storage/pouch/pressurized_reagent_canister/revival_tricord, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
+ list("Pressurized Reagent Canister Pouch (Revival Mix - Peridaxon)", 0, /obj/item/storage/pouch/pressurized_reagent_canister/revival_peri, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
list("Pressurized Reagent Canister Pouch (Tricordrazine)", 0, /obj/item/storage/pouch/pressurized_reagent_canister/tricordrazine, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
list("Pressurized Reagent Canister Pouch (EMPTY)", 0, /obj/item/storage/pouch/pressurized_reagent_canister, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
@@ -507,7 +508,7 @@ list("POUCHES (CHOOSE 2)", 0, null, null, null),
assignment = JOB_PMC_INVESTIGATOR
rank = JOB_PMC_INVESTIGATOR
- paygrade = PAY_SHORT_PMC_MS //Fixed from PMC2 to PMC-MS to display properly.
+ paygrades = list(PAY_SHORT_PMC_MS = JOB_PLAYTIME_TIER_0)
skills = /datum/skills/pmc/medic/chem
headset_type = /obj/item/device/radio/headset/distress/pmc/medic
@@ -573,7 +574,7 @@ list("POUCHES (CHOOSE 2)", 0, null, null, null),
list("M276 Lifesaver Bag (Full)", 0, /obj/item/storage/belt/medical/lifesaver/full/dutch, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED),
list("M276 Medical Storage Rig (Full)", 0, /obj/item/storage/belt/medical/full, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED),
list("M276 M39 Holster Rig", 0, /obj/item/storage/large_holster/m39, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
- list("M276 M44 Holster Rig", 0, /obj/item/storage/belt/gun/m44, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
+ list("M276 General Revolver Holster Rig", 0, /obj/item/storage/belt/gun/m44, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
list("M276 M82F Holster Rig", 0, /obj/item/storage/belt/gun/flaregun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
list("M276 Shotgun Shell Loading Rig", 0, /obj/item/storage/belt/shotgun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
list("M276 M40 Grenade Rig", 0, /obj/item/storage/belt/grenade, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
@@ -593,7 +594,8 @@ list("POUCHES (CHOOSE 2)", 0, null, null, null),
list("Medical Kit Pouch", 0, /obj/item/storage/pouch/medkit, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
list("Pressurized Reagent Canister Pouch (Bicaridine)", 0, /obj/item/storage/pouch/pressurized_reagent_canister/bicaridine, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
list("Pressurized Reagent Canister Pouch (Kelotane)", 0, /obj/item/storage/pouch/pressurized_reagent_canister/kelotane, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
- list("Pressurized Reagent Canister Pouch (Revival Mix)", 0, /obj/item/storage/pouch/pressurized_reagent_canister/revival, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
+ list("Pressurized Reagent Canister Pouch (Revival Mix - Tricordrazine)", 0, /obj/item/storage/pouch/pressurized_reagent_canister/revival_tricord, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
+ list("Pressurized Reagent Canister Pouch (Revival Mix - Peridaxon)", 0, /obj/item/storage/pouch/pressurized_reagent_canister/revival_peri, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
list("Pressurized Reagent Canister Pouch (Tricordrazine)", 0, /obj/item/storage/pouch/pressurized_reagent_canister/tricordrazine, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
list("Pressurized Reagent Canister Pouch (EMPTY)", 0, /obj/item/storage/pouch/pressurized_reagent_canister, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
@@ -686,7 +688,7 @@ list("POUCHES (CHOOSE 2)", 0, null, null, null),
assignment = JOB_PMC_LEADER
rank = JOB_PMC_LEADER
- paygrade = PAY_SHORT_PMC_TL
+ paygrades = list(PAY_SHORT_PMC_TL = JOB_PLAYTIME_TIER_0)
role_comm_title = "SL"
skills = /datum/skills/pmc/SL
headset_type = /obj/item/device/radio/headset/distress/pmc/command
@@ -756,7 +758,7 @@ list("POUCHES (CHOOSE 2)", 0, null, null, null),
list("M276 Lifesaver Bag", 0, /obj/item/storage/belt/medical/lifesaver, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
list("M276 Medical Storage Rig", 0, /obj/item/storage/belt/medical, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
list("M276 M39 Holster Rig", 0, /obj/item/storage/large_holster/m39, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
- list("M276 M44 Holster Rig", 0, /obj/item/storage/belt/gun/m44, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
+ list("M276 Revolver Holster Rig", 0, /obj/item/storage/belt/gun/m44, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
list("M276 M82F Holster Rig", 0, /obj/item/storage/belt/gun/flaregun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
list("M276 Shotgun Shell Loading Rig", 0, /obj/item/storage/belt/shotgun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
list("M276 Toolbelt Rig (Full)", 0, /obj/item/storage/belt/utility/full, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
@@ -842,7 +844,7 @@ list("POUCHES (CHOOSE 2)", 0, null, null, null),
assignment = JOB_PMC_LEAD_INVEST
rank = JOB_PMC_LEAD_INVEST
- paygrade = PAY_SHORT_PMC_TL
+ paygrades = list(PAY_SHORT_PMC_TL = JOB_PLAYTIME_TIER_0)
role_comm_title = "SL"
skills = /datum/skills/pmc/SL/chem
headset_type = /obj/item/device/radio/headset/distress/pmc/command
@@ -899,7 +901,7 @@ list("POUCHES (CHOOSE 2)", 0, null, null, null),
list("M276 Lifesaver Bag", 0, /obj/item/storage/belt/medical/lifesaver, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
list("M276 Medical Storage Rig", 0, /obj/item/storage/belt/medical, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
list("M276 M39 Holster Rig", 0, /obj/item/storage/large_holster/m39, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
- list("M276 M44 Holster Rig", 0, /obj/item/storage/belt/gun/m44, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
+ list("M276 Revolver Holster Rig", 0, /obj/item/storage/belt/gun/m44, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
list("M276 M82F Holster Rig", 0, /obj/item/storage/belt/gun/flaregun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
list("M276 Shotgun Shell Loading Rig", 0, /obj/item/storage/belt/shotgun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
list("M276 Toolbelt Rig (Full)", 0, /obj/item/storage/belt/utility/full, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
@@ -985,7 +987,7 @@ list("POUCHES (CHOOSE 2)", 0, null, null, null),
assignment = JOB_PMC_GUNNER
rank = JOB_PMC_GUNNER
- paygrade = PAY_SHORT_PMC_SS
+ paygrades = list(PAY_SHORT_PMC_SS = JOB_PLAYTIME_TIER_0)
role_comm_title = "SG"
skills = /datum/skills/pmc/smartgunner
@@ -1090,7 +1092,7 @@ list("POUCHES (CHOOSE 2)", 0, null, null, null),
assignment = JOB_PMC_SNIPER
rank = JOB_PMC_SNIPER
- paygrade = PAY_SHORT_PMC_WS
+ paygrades = list(PAY_SHORT_PMC_WS = JOB_PLAYTIME_TIER_0)
role_comm_title = "Spc"
skills = /datum/skills/pmc/specialist
headset_type = /obj/item/device/radio/headset/distress/pmc/cct
@@ -1145,7 +1147,7 @@ list("POUCHES (CHOOSE 2)", 0, null, null, null),
list("M276 Lifesaver Bag (Full)", 0, /obj/item/storage/belt/medical/lifesaver/full/dutch, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED),
list("M276 Medical Storage Rig (Full)", 0, /obj/item/storage/belt/medical/full, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED),
list("M276 M39 Holster Rig", 0, /obj/item/storage/large_holster/m39, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
- list("M276 M44 Holster Rig", 0, /obj/item/storage/belt/gun/m44, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
+ list("M276 Revolver Holster Rig", 0, /obj/item/storage/belt/gun/m44, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
list("M276 M82F Holster Rig", 0, /obj/item/storage/belt/gun/flaregun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
list("M276 Shotgun Shell Loading Rig", 0, /obj/item/storage/belt/shotgun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
list("M276 M40 Grenade Rig", 0, /obj/item/storage/belt/grenade, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
@@ -1212,7 +1214,7 @@ list("POUCHES (CHOOSE 2)", 0, null, null, null),
assignment = JOB_PMC_CREWMAN
rank = JOB_PMC_CREWMAN
- paygrade = PAY_SHORT_PMC_VS
+ paygrades = list(PAY_SHORT_PMC_VS = JOB_PLAYTIME_TIER_0)
skills = /datum/skills/pmc/tank_crew
headset_type = /obj/item/device/radio/headset/distress/pmc/cct
@@ -1253,7 +1255,7 @@ list("POUCHES (CHOOSE 2)", 0, null, null, null),
list("M276 Lifesaver Bag (Full)", 0, /obj/item/storage/belt/medical/lifesaver/full/dutch, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED),
list("M276 Medical Storage Rig (Full)", 0, /obj/item/storage/belt/medical/full, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED),
list("M276 M39 Holster Rig", 0, /obj/item/storage/large_holster/m39, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
- list("M276 M44 Holster Rig", 0, /obj/item/storage/belt/gun/m44, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
+ list("M276 Revolver Holster Rig", 0, /obj/item/storage/belt/gun/m44, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
list("M276 M82F Holster Rig", 0, /obj/item/storage/belt/gun/flaregun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
list("M276 Shotgun Shell Loading Rig", 0, /obj/item/storage/belt/shotgun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
list("M276 M40 Grenade Rig", 0, /obj/item/storage/belt/grenade, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
@@ -1340,7 +1342,7 @@ list("POUCHES (CHOOSE 2)", 0, null, null, null),
assignment = JOB_PMC_XENO_HANDLER
rank = JOB_PMC_XENO_HANDLER
- paygrade = PAY_SHORT_PMC_XS
+ paygrades = list(PAY_SHORT_PMC_XS = JOB_PLAYTIME_TIER_0)
role_comm_title = "XH"
skills = /datum/skills/pmc/xeno_handler
languages = list(LANGUAGE_ENGLISH, LANGUAGE_JAPANESE, LANGUAGE_XENOMORPH)
@@ -1401,7 +1403,7 @@ list("POUCHES (CHOOSE 2)", 0, null, null, null),
list("M276 Lifesaver Bag (Full)", 0, /obj/item/storage/belt/medical/lifesaver/full/dutch, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED),
list("M276 Medical Storage Rig (Full)", 0, /obj/item/storage/belt/medical/full, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED),
list("M276 M39 Holster Rig", 0, /obj/item/storage/large_holster/m39, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
- list("M276 M44 Holster Rig", 0, /obj/item/storage/belt/gun/m44, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
+ list("M276 Revolver Holster Rig", 0, /obj/item/storage/belt/gun/m44, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
list("M276 M82F Holster Rig", 0, /obj/item/storage/belt/gun/flaregun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
list("M276 Shotgun Shell Loading Rig", 0, /obj/item/storage/belt/shotgun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
list("M276 M40 Grenade Rig", 0, /obj/item/storage/belt/grenade, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
@@ -1486,7 +1488,7 @@ list("POUCHES (CHOOSE 2)", 0, null, null, null),
assignment = JOB_PMC_DOCTOR
rank = JOB_PMC_DOCTOR
- paygrade = PAY_SHORT_PMC_DOC
+ paygrades = list(PAY_SHORT_PMC_DOC = JOB_PLAYTIME_TIER_0)
role_comm_title = "SGN"
skills = /datum/skills/pmc/doctor
headset_type = /obj/item/device/radio/headset/distress/pmc/medic
@@ -1547,7 +1549,7 @@ list("POUCHES (CHOOSE 2)", 0, null, null, null),
list("M276 Lifesaver Bag (Full)", 0, /obj/item/storage/belt/medical/lifesaver/full/dutch, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED),
list("M276 Medical Storage Rig (Full)", 0, /obj/item/storage/belt/medical/full, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED),
list("M276 M39 Holster Rig", 0, /obj/item/storage/large_holster/m39, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
- list("M276 M44 Holster Rig", 0, /obj/item/storage/belt/gun/m44, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
+ list("M276 Revolver Holster Rig", 0, /obj/item/storage/belt/gun/m44, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
list("M276 M82F Holster Rig", 0, /obj/item/storage/belt/gun/flaregun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
list("M276 Shotgun Shell Loading Rig", 0, /obj/item/storage/belt/shotgun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
list("M276 M40 Grenade Rig", 0, /obj/item/storage/belt/grenade, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
@@ -1567,7 +1569,8 @@ list("POUCHES (CHOOSE 2)", 0, null, null, null),
list("Medical Kit Pouch", 0, /obj/item/storage/pouch/medkit, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
list("Pressurized Reagent Canister Pouch (Bicaridine)", 0, /obj/item/storage/pouch/pressurized_reagent_canister/bicaridine, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
list("Pressurized Reagent Canister Pouch (Kelotane)", 0, /obj/item/storage/pouch/pressurized_reagent_canister/kelotane, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
- list("Pressurized Reagent Canister Pouch (Revival Mix)", 0, /obj/item/storage/pouch/pressurized_reagent_canister/revival, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
+ list("Pressurized Reagent Canister Pouch (Revival Mix - Tricordrazine)", 0, /obj/item/storage/pouch/pressurized_reagent_canister/revival_tricord, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
+ list("Pressurized Reagent Canister Pouch (Revival Mix - Peridaxon)", 0, /obj/item/storage/pouch/pressurized_reagent_canister/revival_peri, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
list("Pressurized Reagent Canister Pouch (Tricordrazine)", 0, /obj/item/storage/pouch/pressurized_reagent_canister/tricordrazine, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
list("Pressurized Reagent Canister Pouch (EMPTY)", 0, /obj/item/storage/pouch/pressurized_reagent_canister, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
@@ -1660,7 +1663,7 @@ list("POUCHES (CHOOSE 2)", 0, null, null, null),
assignment = JOB_PMC_ENGINEER
rank = JOB_PMC_ENGINEER
- paygrade = PAY_SHORT_PMC_TEC
+ paygrades = list(PAY_SHORT_PMC_TEC = JOB_PLAYTIME_TIER_0)
role_comm_title = "TEC"
skills = /datum/skills/pmc/engineer
headset_type = /obj/item/device/radio/headset/distress/pmc/cct
@@ -1716,7 +1719,7 @@ list("POUCHES (CHOOSE 2)", 0, null, null, null),
list("M276 Ammo Load Rig", 0, /obj/item/storage/belt/marine, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
list("M276 General Pistol Holster Rig", 0, /obj/item/storage/belt/gun/m4a3, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
list("M276 M39 Holster Rig", 0, /obj/item/storage/large_holster/m39, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
- list("M276 M44 Holster Rig", 0, /obj/item/storage/belt/gun/m44, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
+ list("M276 Revolver Holster Rig", 0, /obj/item/storage/belt/gun/m44, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
list("M276 M82F Holster Rig", 0, /obj/item/storage/belt/gun/flaregun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
list("M276 Shotgun Shell Loading Rig", 0, /obj/item/storage/belt/shotgun, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
list("M276 Mortar Operator Belt", 0, /obj/item/storage/belt/gun/mortarbelt, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
@@ -1809,7 +1812,7 @@ list("POUCHES (CHOOSE 2)", 0, null, null, null),
assignment = JOB_PMC_DIRECTOR
rank = JOB_PMC_DIRECTOR
- paygrade = PAY_SHORT_PMC_DIR
+ paygrades = list(PAY_SHORT_PMC_DIR = JOB_PLAYTIME_TIER_0)
role_comm_title = "DIR"
skills = /datum/skills/pmc/director
headset_type = /obj/item/device/radio/headset/distress/pmc/command/director
@@ -1839,18 +1842,18 @@ list("POUCHES (CHOOSE 2)", 0, null, null, null),
//*****************************************************************************************************/
/datum/equipment_preset/pmc/synth
- name = "Weyland-Yutani PMC (Support Synthetic)"
- flags = EQUIPMENT_PRESET_EXTRA
+ name = "Weyland-Yutani PMC (Support Synthetic)"
+ flags = EQUIPMENT_PRESET_EXTRA
- languages = ALL_SYNTH_LANGUAGES
+ languages = ALL_SYNTH_LANGUAGES
- skills = /datum/skills/synthetic
- idtype = /obj/item/card/id/pmc
- assignment = JOB_PMC_SYNTH
- rank = JOB_PMC_SYNTH
- paygrade = PAY_SHORT_SYN
- role_comm_title = "WY Syn"
- headset_type = /obj/item/device/radio/headset/distress/pmc/command
+ skills = /datum/skills/synthetic
+ idtype = /obj/item/card/id/pmc
+ assignment = JOB_PMC_SYNTH
+ rank = JOB_PMC_SYNTH
+ paygrades = list(PAY_SHORT_SYN = JOB_PLAYTIME_TIER_0)
+ role_comm_title = "WY Syn"
+ headset_type = /obj/item/device/radio/headset/distress/pmc/command
/datum/equipment_preset/pmc/synth/load_name(mob/living/carbon/human/new_human, randomise)
@@ -1972,7 +1975,8 @@ list("POUCHES (CHOOSE 2)", 0, null, null, null),
list("Medical Kit Pouch", 0, /obj/item/storage/pouch/medkit, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
list("Pressurized Reagent Canister Pouch (Bicaridine)", 0, /obj/item/storage/pouch/pressurized_reagent_canister/bicaridine, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
list("Pressurized Reagent Canister Pouch (Kelotane)", 0, /obj/item/storage/pouch/pressurized_reagent_canister/kelotane, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
- list("Pressurized Reagent Canister Pouch (Revival Mix)", 0, /obj/item/storage/pouch/pressurized_reagent_canister/revival, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Pressurized Reagent Canister Pouch (Revival Mix - Tricordrazine)", 0, /obj/item/storage/pouch/pressurized_reagent_canister/revival_tricord, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Pressurized Reagent Canister Pouch (Revival Mix - Peridaxon)", 0, /obj/item/storage/pouch/pressurized_reagent_canister/revival_peri, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
list("Pressurized Reagent Canister Pouch (Tricordrazine)", 0, /obj/item/storage/pouch/pressurized_reagent_canister/tricordrazine, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
list("Pressurized Reagent Canister Pouch (Oxycodone)", 0, /obj/item/storage/pouch/pressurized_reagent_canister/oxycodone, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
list("Pressurized Reagent Canister Pouch (EMPTY)", 0, /obj/item/storage/pouch/pressurized_reagent_canister, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
diff --git a/code/modules/gear_presets/royal_marines.dm b/code/modules/gear_presets/royal_marines.dm
index aa33eac97733..2e218e5292a6 100644
--- a/code/modules/gear_presets/royal_marines.dm
+++ b/code/modules/gear_presets/royal_marines.dm
@@ -59,7 +59,7 @@
/datum/equipment_preset/twe/royal_marine/standard
name = "TWE Royal Marine Commando (Rifleman)"
- paygrade = PAY_SHORT_RMC1
+ paygrades = list(PAY_SHORT_RMC1 = JOB_PLAYTIME_TIER_0)
role_comm_title = "RMC"
flags = EQUIPMENT_PRESET_EXTRA
assignment = "Royal Marines Rifleman"
@@ -110,7 +110,7 @@
//*****************************************************************************************************/
/datum/equipment_preset/twe/royal_marine/spec
- paygrade = PAY_SHORT_RMC2
+ paygrades = list(PAY_SHORT_RMC2 = JOB_PLAYTIME_TIER_0)
role_comm_title = "RMC SPC"
flags = EQUIPMENT_PRESET_EXTRA
skills = /datum/skills/rmc/specialist
@@ -243,7 +243,7 @@
//*****************************************************************************************************/
/datum/equipment_preset/twe/royal_marine/team_leader
name = "TWE Royal Marine Commando (Teamleader)"
- paygrade = PAY_SHORT_RMC4
+ paygrades = list(PAY_SHORT_RMC4 = JOB_PLAYTIME_TIER_0)
role_comm_title = "RMC TL"
flags = EQUIPMENT_PRESET_EXTRA
assignment = "Royal Marines Team Leader"
@@ -292,7 +292,7 @@
/datum/equipment_preset/twe/royal_marine/lieuteant //they better say it Lef-tenant or they should be banned for LRP. More importantly this guy doesn't spawn in the ERT
name = "TWE Royal Marine Commando (Officer)"
- paygrade = PAY_SHORT_RNO1
+ paygrades = list(PAY_SHORT_RNO1 = JOB_PLAYTIME_TIER_0)
role_comm_title = "RMC LT"
flags = EQUIPMENT_PRESET_EXTRA
assignment = "Royal Marines Team Commander"
diff --git a/code/modules/gear_presets/survivors/fiorina_sciannex/riot_in_progress_insert_fiorina_nightmare.dm b/code/modules/gear_presets/survivors/fiorina_sciannex/riot_in_progress_insert_fiorina_nightmare.dm
index c09e6eee9385..27d39348e7d0 100644
--- a/code/modules/gear_presets/survivors/fiorina_sciannex/riot_in_progress_insert_fiorina_nightmare.dm
+++ b/code/modules/gear_presets/survivors/fiorina_sciannex/riot_in_progress_insert_fiorina_nightmare.dm
@@ -14,7 +14,7 @@
/datum/equipment_preset/survivor/cmb/standard
name = "Survivor - Colonial Marshal Deputy(Riot Response)"
- paygrade = PAY_SHORT_CMBD
+ paygrades = list(PAY_SHORT_CMBD = JOB_PLAYTIME_TIER_0)
role_comm_title = "CMB DEP"
flags = EQUIPMENT_PRESET_EXTRA
assignment = "CMB Deputy"
@@ -89,7 +89,7 @@
/datum/equipment_preset/synth/survivor/cmb/synth
name = "Survivor - Synthetic - CMB Investigative Synthetic(Riot Response)"
- paygrade = PAY_SHORT_CMBS
+ paygrades = list(PAY_SHORT_CMBS = JOB_PLAYTIME_TIER_0)
idtype = /obj/item/card/id/deputy
role_comm_title = "CMB Syn"
flags = EQUIPMENT_PRESET_EXTRA
@@ -150,7 +150,7 @@
/datum/equipment_preset/survivor/cmb/ua
name = "Survivor - United Americas Riot Officer(Riot Response)"
- paygrade = PAY_SHORT_CPO
+ paygrades = list(PAY_SHORT_CPO = JOB_PLAYTIME_TIER_0)
role_comm_title = "UA RCP"
flags = EQUIPMENT_PRESET_EXTRA
assignment = "United Americas Police Officer"
@@ -229,7 +229,7 @@
// ua synth
/datum/equipment_preset/synth/survivor/cmb/ua_synth
name = "Survivor - Synthetic - UA Police Synthetic(Riot Response)"
- paygrade = PAY_SHORT_CMBS
+ paygrades = list(PAY_SHORT_CMBS = JOB_PLAYTIME_TIER_0)
role_comm_title = "UA Syn"
flags = EQUIPMENT_PRESET_EXTRA
assignment = "UA Police Synthetic"
diff --git a/code/modules/gear_presets/survivors/kutjevo/preset_kutjevo.dm b/code/modules/gear_presets/survivors/kutjevo/preset_kutjevo.dm
index eb04cbd5a94e..6db2882ddf82 100644
--- a/code/modules/gear_presets/survivors/kutjevo/preset_kutjevo.dm
+++ b/code/modules/gear_presets/survivors/kutjevo/preset_kutjevo.dm
@@ -33,7 +33,7 @@
add_random_kutjevo_survivor_equipment(new_human)
new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel/sec(new_human), WEAR_BACK)
new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/veteran(new_human), WEAR_HANDS)
- new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/corporate(new_human), WEAR_FEET)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/corporate/knife(new_human), WEAR_FEET)
..()
/datum/equipment_preset/survivor/doctor/kutjevo
diff --git a/code/modules/gear_presets/survivors/lv_522/forcon_survivors.dm b/code/modules/gear_presets/survivors/lv_522/forcon_survivors.dm
index 4e9ab770fb2f..c27fa213592f 100644
--- a/code/modules/gear_presets/survivors/lv_522/forcon_survivors.dm
+++ b/code/modules/gear_presets/survivors/lv_522/forcon_survivors.dm
@@ -1,7 +1,7 @@
///*****************************LV-522 Force Recon Survivors*******************************************************/
//Nanu told me to put them here so they dont clutter up survivors.dm
/datum/equipment_preset/survivor/forecon
- paygrade = PAY_SHORT_ME5
+ paygrades = list(PAY_SHORT_ME5 = JOB_PLAYTIME_TIER_0)
idtype = /obj/item/card/id/dogtag
role_comm_title = "FORECON"
rank = JOB_SURVIVOR
@@ -214,7 +214,7 @@
name = "Survivor - USCM Reconnaissance Squad Leader"
assignment = JOB_FORECON_SL
skills = /datum/skills/military/survivor/forecon_squad_leader
- paygrade = PAY_SHORT_MO1
+ paygrades = list(PAY_SHORT_MO1 = JOB_PLAYTIME_TIER_0)
dress_under = list(/obj/item/clothing/under/marine/dress/blues/senior)
dress_over = list(/obj/item/clothing/suit/storage/jacket/marine/dress/blues/officer)
@@ -244,7 +244,7 @@
name = "Survivor - USCM Reconnaissance Major"
assignment = JOB_FORECON_CO
skills = /datum/skills/commander
- paygrade = PAY_SHORT_MO4
+ paygrades = list(PAY_SHORT_MO4 = JOB_PLAYTIME_TIER_0)
idtype = /obj/item/card/id/gold
role_comm_title = "FORECON CO"
diff --git a/code/modules/gear_presets/survivors/lv_624/corporate_dome_insert_lv624.dm b/code/modules/gear_presets/survivors/lv_624/corporate_dome_insert_lv624.dm
index 2c8ec04594ad..395d51f6e77d 100644
--- a/code/modules/gear_presets/survivors/lv_624/corporate_dome_insert_lv624.dm
+++ b/code/modules/gear_presets/survivors/lv_624/corporate_dome_insert_lv624.dm
@@ -4,7 +4,7 @@
/datum/equipment_preset/survivor/wy/executive
name = "Survivor - LV-624 Paranoid Corporate Liaison"
flags = EQUIPMENT_PRESET_START_OF_ROUND
- paygrade = PAY_SHORT_WYC5
+ paygrades = list(PAY_SHORT_WYC5 = JOB_PLAYTIME_TIER_0)
skills = /datum/skills/civilian/survivor/manager
assignment = "LV-624 Corporate Liaison"
idtype = /obj/item/card/id/silver/clearance_badge/cl
diff --git a/code/modules/gear_presets/survivors/lv_624/preset_lv.dm b/code/modules/gear_presets/survivors/lv_624/preset_lv.dm
index a56432b80b89..462075142698 100644
--- a/code/modules/gear_presets/survivors/lv_624/preset_lv.dm
+++ b/code/modules/gear_presets/survivors/lv_624/preset_lv.dm
@@ -86,7 +86,7 @@
new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel/sec(new_human), WEAR_BACK)
new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/armor/vest/security(new_human), WEAR_JACKET)
new_human.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/marine/veteran/pmc(new_human), WEAR_HEAD)
- new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/corporate(new_human), WEAR_FEET)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/corporate/knife(new_human), WEAR_FEET)
..()
/datum/equipment_preset/survivor/corporate/lv
diff --git a/code/modules/gear_presets/survivors/misc.dm b/code/modules/gear_presets/survivors/misc.dm
index 329bac97a89f..1a24ca5d58b9 100644
--- a/code/modules/gear_presets/survivors/misc.dm
+++ b/code/modules/gear_presets/survivors/misc.dm
@@ -60,7 +60,7 @@ Everything below isn't used or out of place.
/datum/equipment_preset/survivor/civilian/load_gear(mob/living/carbon/human/new_human)
if(SSmapping.configs[GROUND_MAP].environment_traits[MAP_COLD])
add_ice_colony_survivor_equipment(new_human)
- var/random_gear = rand(0, 3)
+ var/random_gear = rand(0, 4)
switch(random_gear)
if(0) // Normal Colonist
new_human.equip_to_slot_or_del(new /obj/item/clothing/under/colonist(new_human), WEAR_BODY)
@@ -88,6 +88,11 @@ Everything below isn't used or out of place.
new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/apron(new_human), WEAR_JACKET)
new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/laceup/brown(new_human), WEAR_FEET)
new_human.equip_to_slot_or_del(new /obj/item/tool/hatchet(new_human.back), WEAR_IN_BACK)
+ if(4) // Ripley outfit from Aliens
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/under/tshirt/gray_blu(new_human), WEAR_BODY)
+ new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel/black(new_human), WEAR_BACK)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/webbing(new_human), WEAR_JACKET)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/stompers(new_human), WEAR_FEET)
new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel/norm(new_human), WEAR_BACK)
new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/general(new_human), WEAR_R_STORE)
add_survivor_weapon_civilian(new_human)
@@ -171,7 +176,7 @@ Everything below isn't used or out of place.
name = "Survivor - Corporate Security Goon"
flags = EQUIPMENT_PRESET_START_OF_ROUND
assignment = JOB_WY_GOON
- paygrade = PAY_SHORT_CPO
+ paygrades = list(PAY_SHORT_CPO = JOB_PLAYTIME_TIER_0)
idtype = /obj/item/card/id/silver/cl
skills = /datum/skills/civilian/survivor/goon
languages = list(LANGUAGE_ENGLISH, LANGUAGE_JAPANESE)
@@ -185,7 +190,7 @@ Everything below isn't used or out of place.
new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/veteran/pmc/light/corporate, WEAR_JACKET)
new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/veteran, WEAR_HANDS)
new_human.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/marine/veteran/pmc/corporate, WEAR_HEAD)
- new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/corporate, WEAR_FEET)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/corporate/knife, WEAR_FEET)
new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/lightpack/five_slot, WEAR_BACK)
new_human.equip_to_slot_or_del(new /obj/item/weapon/baton, WEAR_IN_BACK)
@@ -250,7 +255,7 @@ Everything below isn't used or out of place.
name = "Survivor - USASF Commander"
assignment = "USASF Commander"
skills = /datum/skills/commander
- paygrade = PAY_SHORT_NO5
+ paygrades = list(PAY_SHORT_NO5 = JOB_PLAYTIME_TIER_0)
idtype = /obj/item/card/id/gold
role_comm_title = "USASF CDR"
flags = EQUIPMENT_PRESET_START_OF_ROUND
diff --git a/code/modules/gear_presets/survivors/shivas_snowball/panic_room_insert_shivas.dm b/code/modules/gear_presets/survivors/shivas_snowball/panic_room_insert_shivas.dm
index 9f1e2c705efb..16092ad51130 100644
--- a/code/modules/gear_presets/survivors/shivas_snowball/panic_room_insert_shivas.dm
+++ b/code/modules/gear_presets/survivors/shivas_snowball/panic_room_insert_shivas.dm
@@ -4,7 +4,7 @@
/datum/equipment_preset/survivor/wy/asstmanager
name = "Survivor - Corporate Assistant Manager"
flags = EQUIPMENT_PRESET_EXTRA
- paygrade = PAY_SHORT_WYC7
+ paygrades = list(PAY_SHORT_WYC7 = JOB_PLAYTIME_TIER_0)
skills = /datum/skills/civilian/survivor/manager
assignment = "Assistant Operations Manager"
idtype = /obj/item/card/id/silver/clearance_badge/manager
diff --git a/code/modules/gear_presets/survivors/solaris/crashlanding-offices_insert_bigred.dm b/code/modules/gear_presets/survivors/solaris/crashlanding-offices_insert_bigred.dm
index 124bf2772be5..de117b9a5a56 100644
--- a/code/modules/gear_presets/survivors/solaris/crashlanding-offices_insert_bigred.dm
+++ b/code/modules/gear_presets/survivors/solaris/crashlanding-offices_insert_bigred.dm
@@ -7,7 +7,7 @@
assignment = "Weyland-Yutani PMC"
faction = FACTION_SURVIVOR
faction_group = list(FACTION_WY, FACTION_SURVIVOR)
- paygrade = PAY_SHORT_PMC_OP
+ paygrades = list(PAY_SHORT_PMC_OP = JOB_PLAYTIME_TIER_0)
idtype = /obj/item/card/id/pmc
skills = /datum/skills/civilian/survivor/pmc
languages = list(LANGUAGE_ENGLISH, LANGUAGE_JAPANESE)
@@ -45,7 +45,7 @@
/datum/equipment_preset/survivor/pmc/medic
name = "Survivor - PMC Medic"
assignment = JOB_PMC_MEDIC
- paygrade = PAY_SHORT_PMC_MS
+ paygrades = list(PAY_SHORT_PMC_MS = JOB_PLAYTIME_TIER_0)
skills = /datum/skills/civilian/survivor/pmc/medic
/datum/equipment_preset/survivor/pmc/medic/load_gear(mob/living/carbon/human/new_human)
@@ -64,7 +64,7 @@
/datum/equipment_preset/survivor/pmc/engineer
name = "Survivor - PMC Engineer"
assignment = JOB_PMC_ENGINEER
- paygrade = PAY_SHORT_PMC_TEC
+ paygrades = list(PAY_SHORT_PMC_TEC = JOB_PLAYTIME_TIER_0)
skills = /datum/skills/civilian/survivor/pmc/engineer
/datum/equipment_preset/survivor/pmc/engineer/load_gear(mob/living/carbon/human/new_human)
@@ -80,7 +80,7 @@
/datum/equipment_preset/survivor/wy/manager
name = "Survivor - Corporate Supervisor"
flags = EQUIPMENT_PRESET_EXTRA
- paygrade = PAY_SHORT_WYC6
+ paygrades = list(PAY_SHORT_WYC6 = JOB_PLAYTIME_TIER_0)
skills = /datum/skills/civilian/survivor/manager
assignment = "Colony Supervisor"
role_comm_title = "Supervisor"
diff --git a/code/modules/gear_presets/survivors/solaris/preset_solaris.dm b/code/modules/gear_presets/survivors/solaris/preset_solaris.dm
index 35e52731fc9d..65cf3e7f0132 100644
--- a/code/modules/gear_presets/survivors/solaris/preset_solaris.dm
+++ b/code/modules/gear_presets/survivors/solaris/preset_solaris.dm
@@ -81,7 +81,7 @@
/datum/equipment_preset/survivor/uscm/solaris
name = "Survivor - Solaris United States Colonial Marine Corps Recruiter"
assignment = "USCM Recruiter"
- paygrade = PAY_SHORT_ME5
+ paygrades = list(PAY_SHORT_ME5 = JOB_PLAYTIME_TIER_0)
/datum/equipment_preset/survivor/uscm/solaris/load_gear(mob/living/carbon/human/new_human)
new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/officer/bridge(new_human), WEAR_BODY)
diff --git a/code/modules/gear_presets/survivors/survivors.dm b/code/modules/gear_presets/survivors/survivors.dm
index 71a2aaa94b7f..0e28e64e9fc4 100644
--- a/code/modules/gear_presets/survivors/survivors.dm
+++ b/code/modules/gear_presets/survivors/survivors.dm
@@ -5,7 +5,7 @@
skills = /datum/skills/civilian/survivor
languages = list(LANGUAGE_ENGLISH)
- paygrade = PAY_SHORT_CIV
+ paygrades = list(PAY_SHORT_CIV = JOB_PLAYTIME_TIER_0)
idtype = /obj/item/card/id/lanyard
faction = FACTION_SURVIVOR
faction_group = list(FACTION_SURVIVOR)
@@ -18,6 +18,74 @@
var/survivor_variant = CIVILIAN_SURVIVOR
+ dress_under = list(
+ /obj/item/clothing/under/liaison_suit/black,
+ /obj/item/clothing/under/liaison_suit/blue,
+ /obj/item/clothing/under/liaison_suit/brown,
+ /obj/item/clothing/under/liaison_suit/corporate_formal,
+ /obj/item/clothing/under/liaison_suit,
+ /obj/item/clothing/under/liaison_suit/charcoal,
+ /obj/item/clothing/under/liaison_suit/formal,
+ /obj/item/clothing/under/liaison_suit/blazer,
+ /obj/item/clothing/under/liaison_suit/suspenders,
+ /obj/item/clothing/under/blackskirt,
+ /obj/item/clothing/under/suit_jacket/trainee,
+ /obj/item/clothing/under/liaison_suit/ivy,
+ /obj/item/clothing/under/liaison_suit/orange,
+ /obj/item/clothing/under/liaison_suit/field,
+ /obj/item/clothing/under/colonist/workwear,
+ /obj/item/clothing/under/colonist/workwear/khaki,
+ /obj/item/clothing/under/colonist/workwear/pink,
+ /obj/item/clothing/under/colonist/workwear/green,
+ )
+ dress_over = list(
+ /obj/item/clothing/suit/storage/jacket/marine/corporate/black,
+ /obj/item/clothing/suit/storage/jacket/marine/corporate,
+ /obj/item/clothing/suit/storage/jacket/marine/corporate/brown,
+ /obj/item/clothing/suit/storage/jacket/marine/corporate/blue,
+ /obj/item/clothing/suit/storage/jacket/marine/corporate/black,
+ /obj/item/clothing/suit/storage/jacket/marine/bomber/grey,
+ /obj/item/clothing/suit/storage/jacket/marine/bomber/red,
+ /obj/item/clothing/suit/storage/jacket/marine/bomber,
+ /obj/item/clothing/suit/storage/bomber,
+ /obj/item/clothing/suit/storage/bomber/alt,
+ /obj/item/clothing/suit/storage/snow_suit/liaison,
+ /obj/item/clothing/suit/storage/labcoat,
+ /obj/item/clothing/suit/storage/jacket/marine/vest/grey,
+ /obj/item/clothing/suit/storage/jacket/marine/vest,
+ /obj/item/clothing/suit/storage/jacket/marine/vest/tan,
+ /obj/item/clothing/suit/storage/webbing,
+ )
+ dress_extra = list(
+ /obj/item/clothing/accessory/black,
+ /obj/item/clothing/accessory/red,
+ /obj/item/clothing/accessory/purple,
+ /obj/item/clothing/accessory/blue,
+ /obj/item/clothing/accessory/green,
+ /obj/item/clothing/accessory/gold,
+ /obj/item/clothing/accessory/horrible,
+ /obj/item/clothing/glasses/sunglasses/big,
+ /obj/item/clothing/glasses/sunglasses/aviator,
+ /obj/item/clothing/glasses/sunglasses,
+ /obj/item/clothing/glasses/sunglasses/prescription,
+ /obj/item/clothing/glasses/regular/hipster,
+ )
+ dress_gloves = list(
+ /obj/item/clothing/gloves/black,
+ /obj/item/clothing/gloves/marine/dress,
+ )
+ dress_shoes = list(
+ /obj/item/clothing/shoes/laceup,
+ /obj/item/clothing/shoes/laceup/brown,
+ /obj/item/clothing/shoes/black,
+ /obj/item/clothing/shoes/marine/corporate,
+ )
+ dress_hat = list(
+ /obj/item/clothing/head/fedora,
+ /obj/item/clothing/head/beret/cm/black/civilian,
+ /obj/item/clothing/head/beret/cm/white/civilian,
+ )
+
/datum/equipment_preset/survivor/load_name(mob/living/carbon/human/new_human, randomise)
new_human.gender = pick(MALE, FEMALE)
var/datum/preferences/A = new
@@ -64,6 +132,7 @@ Standart Survivors : /datum/equipment_preset/survivor/scientist,
flags = EQUIPMENT_PRESET_START_OF_ROUND
idtype = /obj/item/card/id/silver/clearance_badge/scientist
access = list(ACCESS_CIVILIAN_PUBLIC, ACCESS_CIVILIAN_RESEARCH, ACCESS_CIVILIAN_MEDBAY)
+ paygrades = list(PAY_SHORT_CDOC = JOB_PLAYTIME_TIER_0)
survivor_variant = SCIENTIST_SURVIVOR
@@ -92,6 +161,7 @@ Standart Survivors : /datum/equipment_preset/survivor/scientist,
flags = EQUIPMENT_PRESET_START_OF_ROUND
idtype = /obj/item/card/id/silver/clearance_badge
access = list(ACCESS_CIVILIAN_PUBLIC, ACCESS_CIVILIAN_RESEARCH, ACCESS_CIVILIAN_MEDBAY, ACCESS_CIVILIAN_COMMAND)
+ paygrades = list(PAY_SHORT_CDOC = JOB_PLAYTIME_TIER_0)
survivor_variant = MEDICAL_SURVIVOR
@@ -187,7 +257,7 @@ Standart Survivors : /datum/equipment_preset/survivor/scientist,
/datum/equipment_preset/survivor/colonial_marshal
name = "Survivor - Colonial Marshal Deputy"
assignment = "CMB Deputy"
- paygrade = PAY_SHORT_CMBD
+ paygrades = list(PAY_SHORT_CMBD = JOB_PLAYTIME_TIER_0)
skills = /datum/skills/civilian/survivor/marshal
flags = EQUIPMENT_PRESET_START_OF_ROUND
idtype = /obj/item/card/id/deputy
@@ -256,6 +326,7 @@ Standart Survivors : /datum/equipment_preset/survivor/scientist,
flags = EQUIPMENT_PRESET_START_OF_ROUND
idtype = /obj/item/card/id/data
access = list(ACCESS_CIVILIAN_PUBLIC,ACCESS_CIVILIAN_BRIG,ACCESS_CIVILIAN_COMMAND)
+ paygrades = list(PAY_SHORT_CPO = JOB_PLAYTIME_TIER_0)
survivor_variant = SECURITY_SURVIVOR
@@ -288,7 +359,7 @@ Everything bellow is a parent used as a base for one or multiple maps.
assignment = "Corporate Liaison"
skills = /datum/skills/civilian/survivor
flags = EQUIPMENT_PRESET_START_OF_ROUND
- paygrade = PAY_SHORT_WYC2
+ paygrades = list(PAY_SHORT_WYC2 = JOB_PLAYTIME_TIER_0, PAY_SHORT_WYC3 = JOB_PLAYTIME_TIER_2, PAY_SHORT_WYC4 = JOB_PLAYTIME_TIER_3, PAY_SHORT_WYC5 = JOB_PLAYTIME_TIER_4)
faction_group = FACTION_LIST_SURVIVOR_WY
idtype = /obj/item/card/id/silver/clearance_badge/cl
access = list(
@@ -314,20 +385,6 @@ Everything bellow is a parent used as a base for one or multiple maps.
add_ice_colony_survivor_equipment(new_human)
..()
-/datum/equipment_preset/survivor/corporate/load_rank(mob/living/carbon/human/new_human)
- if(new_human.client)
- var/playtime = get_job_playtime(new_human.client, JOB_CORPORATE_LIAISON)
- if(new_human.client.prefs.playtime_perks)
- if(playtime > JOB_PLAYTIME_TIER_4)
- return PAY_SHORT_WYC5
- else if(playtime > JOB_PLAYTIME_TIER_3)
- return PAY_SHORT_WYC4
- else if(playtime > JOB_PLAYTIME_TIER_2)
- return PAY_SHORT_WYC3
- else
- return paygrade
- return paygrade
-
// ---- Trucker Survivor
// Used in Kutjevo Refinery, LV-624, New Varadero, Solaris Ridge and Trijent Dam.
@@ -408,7 +465,7 @@ Everything bellow is a parent used as a base for one or multiple maps.
assignment = "Interstellar Commerce Commission Corporate Liaison"
skills = /datum/skills/civilian/survivor
flags = EQUIPMENT_PRESET_START_OF_ROUND
- paygrade = PAY_SHORT_ICCL
+ paygrades = list(PAY_SHORT_ICCL = JOB_PLAYTIME_TIER_0)
faction_group = FACTION_LIST_SURVIVOR_WY
idtype = /obj/item/card/id/silver/cl
role_comm_title = "ICC Rep."
@@ -442,7 +499,7 @@ Everything bellow is a parent used as a base for one or multiple maps.
assignment = "USCM Survivor"
skills = /datum/skills/civilian/survivor/marshal
idtype = /obj/item/card/id/dogtag
- paygrade = PAY_SHORT_ME2
+ paygrades = list(PAY_SHORT_ME2 = JOB_PLAYTIME_TIER_0)
flags = EQUIPMENT_PRESET_START_OF_ROUND
access = list(ACCESS_CIVILIAN_PUBLIC)
diff --git a/code/modules/gear_presets/survivors/trijent/crashlanding_upp_bar_insert_trijent.dm b/code/modules/gear_presets/survivors/trijent/crashlanding_upp_bar_insert_trijent.dm
index cfb3dee1dc47..25136c172b6d 100644
--- a/code/modules/gear_presets/survivors/trijent/crashlanding_upp_bar_insert_trijent.dm
+++ b/code/modules/gear_presets/survivors/trijent/crashlanding_upp_bar_insert_trijent.dm
@@ -2,7 +2,7 @@
//crashlanding-upp-bar.dmm map.
/datum/equipment_preset/survivor/upp
name = "Survivor - UPP"
- paygrade = PAY_SHORT_UE1
+ paygrades = list(PAY_SHORT_UE1 = JOB_PLAYTIME_TIER_0)
origin_override = ORIGIN_UPP
rank = JOB_SURVIVOR
skills = /datum/skills/military/survivor/upp_private
@@ -40,7 +40,7 @@
//crashlanding-upp-bar.dmm
/datum/equipment_preset/survivor/upp/soldier
name = "Survivor - UPP Soldier"
- paygrade = PAY_SHORT_UE2
+ paygrades = list(PAY_SHORT_UE1 = JOB_PLAYTIME_TIER_0, PAY_SHORT_UE2 = JOB_PLAYTIME_TIER_1)
assignment = JOB_UPP
rank = JOB_UPP
skills = /datum/skills/military/survivor/upp_private
@@ -62,17 +62,11 @@
..()
-/datum/equipment_preset/survivor/upp/soldier/load_rank(mob/living/carbon/human/new_human)
- if(new_human.client)
- if(get_job_playtime(new_human.client, rank) < JOB_PLAYTIME_TIER_1)
- return PAY_SHORT_UE1
- return paygrade
-
// /obj/effect/landmark/survivor_spawner/upp_sapper
//crashlanding-upp-bar.dmm
/datum/equipment_preset/survivor/upp/sapper
name = "Survivor - UPP Sapper"
- paygrade = PAY_SHORT_UE3
+ paygrades = list(PAY_SHORT_UE3 = JOB_PLAYTIME_TIER_0)
assignment = JOB_UPP_ENGI
rank = JOB_UPP_ENGI
skills = /datum/skills/military/survivor/upp_sapper
@@ -100,7 +94,7 @@
//crashlanding-upp-bar.dmm
/datum/equipment_preset/survivor/upp/medic
name = "Survivor - UPP Medic"
- paygrade = PAY_SHORT_UE3
+ paygrades = list(PAY_SHORT_UE3 = JOB_PLAYTIME_TIER_0)
assignment = JOB_UPP_MEDIC
rank = JOB_UPP_MEDIC
skills = /datum/skills/military/survivor/upp_medic
@@ -132,7 +126,7 @@
name = "Survivor - UPP Specialist"
assignment = JOB_UPP_SPECIALIST
rank = JOB_UPP_SPECIALIST
- paygrade = PAY_SHORT_UE4
+ paygrades = list(PAY_SHORT_UE4 = JOB_PLAYTIME_TIER_0)
skills = /datum/skills/military/survivor/upp_spec
/datum/equipment_preset/survivor/upp/specialist/load_gear(mob/living/carbon/human/new_human)
@@ -151,7 +145,7 @@
// /obj/effect/landmark/survivor_spawner/squad_leader
/datum/equipment_preset/survivor/upp/squad_leader
name = "Survivor - UPP Squad Leader"
- paygrade = PAY_SHORT_UE5
+ paygrades = list(PAY_SHORT_UE5 = JOB_PLAYTIME_TIER_0)
assignment = JOB_UPP_LEADER
rank = JOB_UPP_LEADER
languages = list(LANGUAGE_RUSSIAN, LANGUAGE_ENGLISH, LANGUAGE_GERMAN, LANGUAGE_CHINESE)
@@ -179,7 +173,7 @@
faction = FACTION_UPP
faction_group = list(FACTION_UPP, FACTION_SURVIVOR)
skills = /datum/skills/colonial_synthetic
- paygrade = PAY_SHORT_SYN
+ paygrades = list(PAY_SHORT_SYN = JOB_PLAYTIME_TIER_0)
idtype = /obj/item/card/id/dogtag
role_comm_title = "173/RECON Syn"
diff --git a/code/modules/gear_presets/survivors/trijent/preset_trijent.dm b/code/modules/gear_presets/survivors/trijent/preset_trijent.dm
index 100f83518565..3c9926de69aa 100644
--- a/code/modules/gear_presets/survivors/trijent/preset_trijent.dm
+++ b/code/modules/gear_presets/survivors/trijent/preset_trijent.dm
@@ -17,7 +17,7 @@
new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel/sec(new_human), WEAR_BACK)
new_human.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/marine/veteran/pmc(new_human), WEAR_HEAD)
new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/armor/vest/security(new_human), WEAR_JACKET)
- new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/corporate(new_human), WEAR_FEET)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/corporate/knife(new_human), WEAR_FEET)
..()
/datum/equipment_preset/survivor/colonial_marshal/trijent
diff --git a/code/modules/gear_presets/synths.dm b/code/modules/gear_presets/synths.dm
index 2fde67e931b9..db82e44ea890 100644
--- a/code/modules/gear_presets/synths.dm
+++ b/code/modules/gear_presets/synths.dm
@@ -3,7 +3,7 @@
uses_special_name = TRUE
languages = ALL_SYNTH_LANGUAGES
skills = /datum/skills/synthetic
- paygrade = PAY_SHORT_SYN
+ paygrades = list(PAY_SHORT_SYN = JOB_PLAYTIME_TIER_0)
minimap_icon = "synth"
@@ -41,7 +41,6 @@
idtype = /obj/item/card/id/gold
assignment = JOB_SYNTH
rank = "Synthetic"
- paygrade = PAY_SHORT_SYN
role_comm_title = "Syn"
/datum/equipment_preset/synth/uscm/load_gear(mob/living/carbon/human/new_human)
@@ -65,7 +64,6 @@
idtype = /obj/item/card/id/gold
assignment = JOB_SYNTH
rank = "Synthetic"
- paygrade = PAY_SHORT_SYN
role_comm_title = "Syn"
/datum/equipment_preset/synth/uscm/councillor/load_gear(mob/living/carbon/human/new_human)
@@ -91,7 +89,7 @@
new_human.equip_to_slot_or_del(new /obj/item/clothing/head/beret/cm(new_human), WEAR_HEAD)
new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/almayer/mcom/synth(new_human), WEAR_L_EAR)
new_human.equip_to_slot_or_del(new /obj/item/clothing/under/rank/synthetic(new_human), WEAR_BODY)
- new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/RO(new_human), WEAR_JACKET)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/jacket/marine/RO(new_human), WEAR_JACKET)
new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/knife(new_human), WEAR_FEET)
new_human.equip_to_slot_or_del(new /obj/item/storage/belt/utility/full(new_human), WEAR_WAIST)
new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/yellow(new_human), WEAR_HANDS)
@@ -760,7 +758,7 @@
rank = JOB_COLONIST
skills = /datum/skills/infiltrator_synthetic
idtype = /obj/item/card/id/lanyard
- paygrade = PAY_SHORT_CIV
+ paygrades = list(PAY_SHORT_CIV = JOB_PLAYTIME_TIER_0)
/datum/equipment_preset/synth/infiltrator/New()
. = ..()
diff --git a/code/modules/gear_presets/upp.dm b/code/modules/gear_presets/upp.dm
index 417a893ffdee..616515c59ac2 100644
--- a/code/modules/gear_presets/upp.dm
+++ b/code/modules/gear_presets/upp.dm
@@ -56,6 +56,10 @@
//*****************************************************************************************************/
+//=====================//
+// Frontline Roles //
+//=================//
+
/datum/equipment_preset/upp/soldier
name = "UPP Soldier"
flags = EQUIPMENT_PRESET_EXTRA
@@ -64,7 +68,7 @@
assignment = JOB_UPP
rank = JOB_UPP
role_comm_title = "Sol"
- paygrade = PAY_SHORT_UE2
+ paygrades = list(PAY_SHORT_UE1 = JOB_PLAYTIME_TIER_0, PAY_SHORT_UE2 = JOB_PLAYTIME_TIER_1)
/datum/equipment_preset/upp/soldier/load_gear(mob/living/carbon/human/new_human)
//face
@@ -87,12 +91,6 @@
load_upp_soldier(new_human, UPP)
-/datum/equipment_preset/upp/soldier/load_rank(mob/living/carbon/human/new_human)
- if(new_human.client)
- if(get_job_playtime(new_human.client, rank) < JOB_PLAYTIME_TIER_1)
- return PAY_SHORT_UE1
- return paygrade
-
/datum/equipment_preset/upp/soldier/proc/load_upp_soldier(mob/living/carbon/human/new_human, obj/item/clothing/under/marine/veteran/UPP/UPP)
var/percentage = rand(1, 100)
switch(percentage)
@@ -237,7 +235,7 @@
assignment = JOB_UPP_MEDIC
rank = JOB_UPP_MEDIC
role_comm_title = "Med"
- paygrade = PAY_SHORT_UE3
+ paygrades = list(PAY_SHORT_UE3 = JOB_PLAYTIME_TIER_0)
/datum/equipment_preset/upp/medic/load_gear(mob/living/carbon/human/new_human)
//back
@@ -408,7 +406,7 @@
assignment = JOB_UPP_ENGI
rank = JOB_UPP_ENGI
role_comm_title = "Sap"
- paygrade = PAY_SHORT_UE3
+ paygrades = list(PAY_SHORT_UE3 = JOB_PLAYTIME_TIER_0)
/datum/equipment_preset/upp/sapper/load_gear(mob/living/carbon/human/new_human)
//Sappers should have lots of gear and whatnot that helps them attack or siege marines
@@ -544,7 +542,7 @@
assignment = JOB_UPP_SPECIALIST
rank = JOB_UPP_SPECIALIST
role_comm_title = "Spc"
- paygrade = PAY_SHORT_UE5
+ paygrades = list(PAY_SHORT_UE5 = JOB_PLAYTIME_TIER_0)
/datum/equipment_preset/upp/specialist/load_gear(mob/living/carbon/human/new_human)
//back
@@ -673,7 +671,7 @@
assignment = JOB_UPP_SPECIALIST
rank = JOB_UPP_SPECIALIST
role_comm_title = "Spc"
- paygrade = PAY_SHORT_UE5
+ paygrades = list(PAY_SHORT_UE5 = JOB_PLAYTIME_TIER_0)
/datum/equipment_preset/upp/machinegunner/load_gear(mob/living/carbon/human/new_human)
//back
@@ -800,7 +798,7 @@
assignment = JOB_UPP_LEADER
rank = JOB_UPP_LEADER
role_comm_title = "SL"
- paygrade = PAY_SHORT_UE6
+ paygrades = list(PAY_SHORT_UE6 = JOB_PLAYTIME_TIER_0)
/datum/equipment_preset/upp/leader/load_gear(mob/living/carbon/human/new_human)
var/UPPleadsidearm = rand(1,4)
@@ -962,6 +960,10 @@
//*****************************************************************************************************/
+//=====================//
+// Support Roles //
+//=================//
+
/datum/equipment_preset/upp/military_police
name = "UPP Military Police"
flags = EQUIPMENT_PRESET_EXTRA
@@ -970,7 +972,7 @@
assignment = JOB_UPP_POLICE
rank = JOB_UPP_POLICE
role_comm_title = "MP"
- paygrade = PAY_SHORT_UE6
+ paygrades = list(PAY_SHORT_UE6 = JOB_PLAYTIME_TIER_0)
/datum/equipment_preset/upp/military_police/load_gear(mob/living/carbon/human/new_human)
//back
@@ -1116,6 +1118,234 @@
//*****************************************************************************************************/
+
+/datum/equipment_preset/upp/doctor
+ name = "UPP Doctor"
+ flags = EQUIPMENT_PRESET_EXTRA
+
+ skills = /datum/skills/upp/combat_medic
+ assignment = JOB_UPP_LT_DOKTOR
+ rank = JOB_UPP_LT_DOKTOR
+ role_comm_title = "Lt. Med."
+ paygrades = list(PAY_SHORT_UO1 = JOB_PLAYTIME_TIER_0)
+
+/datum/equipment_preset/upp/doctor/load_gear(mob/living/carbon/human/new_human)
+ //back
+ new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/lightpack/upp, WEAR_BACK)
+ new_human.equip_to_slot_or_del(new /obj/item/device/defibrillator, WEAR_IN_BACK)
+ new_human.equip_to_slot_or_del(new /obj/item/storage/firstaid/adv, WEAR_IN_BACK)
+ new_human.equip_to_slot_or_del(new /obj/item/roller/surgical, WEAR_IN_BACK)
+ new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/pistol/np92, WEAR_IN_BACK) //targeting unarmed medical personal is not a war crime in aliens(primarily because, off memory, warcrimes aren't really a thing, although this definately is bad manners), and the playerbase is HRP in this concern!(if you don't get the joke, the players regularly execute unarmed doctors in hvh events. :D)
+ new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/np92, WEAR_IN_BACK)
+ new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/np92, WEAR_IN_BACK)
+ //face
+ new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/UPP, WEAR_L_EAR)
+ if(new_human.disabilities & NEARSIGHTED)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/hud/health/prescription(new_human), WEAR_EYES)
+ else
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/hud/health(new_human), WEAR_EYES)
+ //head
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/head/uppcap/ushanka, WEAR_HEAD)
+ //body
+ var/obj/item/clothing/under/marine/veteran/UPP/medic/UPP = new()
+ var/obj/item/clothing/accessory/storage/surg_vest/equipped/W = new()
+ UPP.attach_accessory(new_human, W)
+ new_human.equip_to_slot_or_del(UPP, WEAR_BODY)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/accessory/patch/upp, WEAR_ACCESSORY)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/accessory/patch/upp/naval, WEAR_ACCESSORY)
+ //waist
+ new_human.equip_to_slot_or_del(new /obj/item/storage/belt/medical/lifesaver/upp/full, WEAR_WAIST)
+ new_human.equip_to_slot_or_del(new /obj/item/reagent_container/hypospray/autoinjector/oxycodone, WEAR_IN_BELT)
+ //limbs
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/upp/knife, WEAR_FEET)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/veteran/upp, WEAR_HANDS)
+ //póckets
+ new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/general/large, WEAR_R_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/reagent_container/food/snacks/upp, WEAR_IN_R_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/reagent_container/food/snacks/upp, WEAR_IN_R_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/reagent_container/food/snacks/upp, WEAR_IN_R_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/medical, WEAR_L_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/tool/surgery/synthgraft, WEAR_IN_L_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/device/healthanalyzer, WEAR_IN_L_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/reagent_container/hypospray/autoinjector/oxycodone, WEAR_IN_L_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/reagent_container/hypospray/tricordrazine, WEAR_IN_L_STORE)
+
+ if(SSmapping.configs[GROUND_MAP].environment_traits[MAP_COLD])
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/mask/rebreather/scarf/tacticalmask/green, WEAR_FACE)
+
+/datum/equipment_preset/upp/doctor/get_antag_clothing_equipment()
+ return list(
+ list("STANDARD EQUIPMENT (TAKE ALL)", 0, null, null, null),
+ list("Boots", 0, /obj/item/clothing/shoes/marine/upp/knife, MARINE_CAN_BUY_SHOES, VENDOR_ITEM_MANDATORY),
+ list("Medic Fatigues", 0, /obj/item/clothing/under/marine/veteran/UPP/medic, MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_MANDATORY),
+ list("UL6 Personal Armor", 0, /obj/item/clothing/suit/storage/marine/faction/UPP/support, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_MANDATORY),
+ list("Gloves", 0, /obj/item/clothing/gloves/marine/veteran/upp, MARINE_CAN_BUY_GLOVES, VENDOR_ITEM_MANDATORY),
+ list("Headset", 0, /obj/item/device/radio/headset/distress/UPP, MARINE_CAN_BUY_EAR, VENDOR_ITEM_MANDATORY),
+ list("Ration", 0, /obj/item/reagent_container/food/snacks/upp, MARINE_CAN_BUY_MRE, VENDOR_ITEM_MANDATORY),
+ list("Combat Pack", 0, /obj/item/storage/backpack/lightpack, MARINE_CAN_BUY_BACKPACK, VENDOR_ITEM_MANDATORY),
+ list("HealthMate HUD", 0, /obj/item/clothing/glasses/hud/health, MARINE_CAN_BUY_GLASSES, VENDOR_ITEM_MANDATORY),
+
+ list("HELMET (CHOOSE 1)", 0, null, null, null),
+ list("Ushanka", 0, /obj/item/clothing/head/uppcap/ushanka, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_REGULAR),
+
+ list("BELT", 0, null, null, null),
+ list("Type 41 Lifesaver Bag", 0, /obj/item/storage/belt/medical/lifesaver/upp/full, MARINE_CAN_BUY_BELT, VENDOR_ITEM_MANDATORY),
+
+ list("POUCHES (CHOOSE 2)", 0, null, null, null),
+ list("Auto-Injector Pouch", 0, /obj/item/storage/pouch/autoinjector, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
+ list("First-Aid Pouch (Refillable Injectors)", 0, /obj/item/storage/pouch/firstaid/full, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("First-Aid Pouch (Splints, Gauze, Ointment)", 0, /obj/item/storage/pouch/firstaid/full/alternate, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("First-Aid Pouch (Pill Packets)", 0, /obj/item/storage/pouch/firstaid/full/pills, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
+ list("First Responder Pouch", 0, /obj/item/storage/pouch/first_responder, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Flare Pouch (Full)", 0, /obj/item/storage/pouch/flare/full, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
+ list("Medical Pouch (Splints)", 0, /obj/item/storage/pouch/medical/full, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Medical Pouch (Pills)", 0, /obj/item/storage/pouch/medical/full/pills, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Medium General Pouch", 0, /obj/item/storage/pouch/general/medium, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Medical Kit Pouch", 0, /obj/item/storage/pouch/medkit, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+
+ list("MASK (CHOOSE 1)", 0, null, null, null),
+ list("Gas Mask", 0, /obj/item/clothing/mask/gas, MARINE_CAN_BUY_MASK, VENDOR_ITEM_REGULAR),
+ list("Heat Absorbent Coif", 0, /obj/item/clothing/mask/rebreather/scarf, MARINE_CAN_BUY_MASK, VENDOR_ITEM_REGULAR)
+ )
+
+/datum/equipment_preset/upp/doctor/get_antag_gear_equipment()
+ return list(
+ list("MEDIC SET (MANDATORY)", 0, null, null, null),
+ list("Essential Medic Set", 0, /obj/effect/essentials_set/medic/upp, MARINE_CAN_BUY_ESSENTIALS, VENDOR_ITEM_MANDATORY),
+
+ list("FIELD SUPPLIES", 0, null, null, null),
+ list("Burn Kit", 2, /obj/item/stack/medical/advanced/ointment, null, VENDOR_ITEM_RECOMMENDED),
+ list("Trauma Kit", 2, /obj/item/stack/medical/advanced/bruise_pack, null, VENDOR_ITEM_RECOMMENDED),
+ list("Medical Splints", 1, /obj/item/stack/medical/splint, null, VENDOR_ITEM_RECOMMENDED),
+
+ list("FIRSTAID KITS", 0, null, null, null),
+ list("Advanced Firstaid Kit", 12, /obj/item/storage/firstaid/adv, null, VENDOR_ITEM_RECOMMENDED),
+ list("Firstaid Kit", 5, /obj/item/storage/firstaid/regular/response, null, VENDOR_ITEM_REGULAR),
+ list("Fire Firstaid Kit", 6, /obj/item/storage/firstaid/fire, null, VENDOR_ITEM_REGULAR),
+ list("Toxin Firstaid Kit", 6, /obj/item/storage/firstaid/toxin, null, VENDOR_ITEM_REGULAR),
+ list("Oxygen Firstaid Kit", 6, /obj/item/storage/firstaid/o2, null, VENDOR_ITEM_REGULAR),
+ list("Radiation Firstaid Kit", 6, /obj/item/storage/firstaid/rad, null, VENDOR_ITEM_REGULAR),
+
+ list("AUTOINJECTORS", 0, null, null, null),
+ list("Autoinjector (Bicaridine)", 1, /obj/item/reagent_container/hypospray/autoinjector/bicaridine, null, VENDOR_ITEM_REGULAR),
+ list("Autoinjector (Dexalin+)", 1, /obj/item/reagent_container/hypospray/autoinjector/dexalinp, null, VENDOR_ITEM_REGULAR),
+ list("Autoinjector (Epinephrine)", 2, /obj/item/reagent_container/hypospray/autoinjector/adrenaline, null, VENDOR_ITEM_REGULAR),
+ list("Autoinjector (Inaprovaline)", 1, /obj/item/reagent_container/hypospray/autoinjector/inaprovaline, null, VENDOR_ITEM_REGULAR),
+ list("Autoinjector (Kelotane)", 1, /obj/item/reagent_container/hypospray/autoinjector/kelotane, null, VENDOR_ITEM_REGULAR),
+ list("Autoinjector (Oxycodone)", 2, /obj/item/reagent_container/hypospray/autoinjector/oxycodone, null, VENDOR_ITEM_REGULAR),
+ list("Autoinjector (Tramadol)", 1, /obj/item/reagent_container/hypospray/autoinjector/tramadol, null, VENDOR_ITEM_REGULAR),
+ list("Autoinjector (Tricord)", 1, /obj/item/reagent_container/hypospray/autoinjector/tricord, null, VENDOR_ITEM_REGULAR),
+
+ list("PILL BOTTLES", 0, null, null, null),
+ list("Pill Bottle (Bicaridine)", 5, /obj/item/storage/pill_bottle/bicaridine, null, VENDOR_ITEM_RECOMMENDED),
+ list("Pill Bottle (Dexalin)", 5, /obj/item/storage/pill_bottle/dexalin, null, VENDOR_ITEM_REGULAR),
+ list("Pill Bottle (Dylovene)", 5, /obj/item/storage/pill_bottle/antitox, null, VENDOR_ITEM_REGULAR),
+ list("Pill Bottle (Inaprovaline)", 5, /obj/item/storage/pill_bottle/inaprovaline, null, VENDOR_ITEM_REGULAR),
+ list("Pill Bottle (Kelotane)", 5, /obj/item/storage/pill_bottle/kelotane, null, VENDOR_ITEM_RECOMMENDED),
+ list("Pill Bottle (Peridaxon)", 5, /obj/item/storage/pill_bottle/peridaxon, null, VENDOR_ITEM_REGULAR),
+ list("Pill Bottle (Tramadol)", 5, /obj/item/storage/pill_bottle/tramadol, null, VENDOR_ITEM_RECOMMENDED),
+
+ list("MEDICAL UTILITIES", 0, null, null, null),
+ list("Health Analyzer", 4, /obj/item/device/healthanalyzer, null, VENDOR_ITEM_REGULAR),
+ list("Medical HUD Glasses", 4, /obj/item/clothing/glasses/hud/health, null, VENDOR_ITEM_REGULAR),
+ list("Roller Bed", 4, /obj/item/roller, null, VENDOR_ITEM_REGULAR),
+ list("Stasis Bag", 6, /obj/item/bodybag/cryobag, null, VENDOR_ITEM_REGULAR),
+
+ list("UTILITIES", 0, null, null, null),
+ list("Brown Webbing Vest", 10, /obj/item/clothing/accessory/storage/black_vest/brown_vest, null, VENDOR_ITEM_RECOMMENDED),
+ list("Black Webbing Vest", 10, /obj/item/clothing/accessory/storage/black_vest, null, VENDOR_ITEM_RECOMMENDED),
+ list("Fire Extinguisher (Portable)", 5, /obj/item/tool/extinguisher/mini, null, VENDOR_ITEM_REGULAR),
+ list("Large General Pouch", 10, /obj/item/storage/pouch/general/large, null, VENDOR_ITEM_REGULAR),
+ list("Shoulder Holster", 10, /obj/item/clothing/accessory/storage/holster, null, VENDOR_ITEM_REGULAR),
+ list("Webbing", 10, /obj/item/clothing/accessory/storage/webbing, null, VENDOR_ITEM_REGULAR),
+ list("Drop Pouch", 10, /obj/item/clothing/accessory/storage/droppouch, null, VENDOR_ITEM_REGULAR),
+ )
+
+//*****************************************************************************************************/
+
+/datum/equipment_preset/upp/supply
+ name = "UPP Logistics Technician"
+ flags = EQUIPMENT_PRESET_EXTRA
+
+ skills = /datum/skills/upp/logistics_technician
+ assignment = JOB_UPP_SUPPLY
+ rank = JOB_UPP_SUPPLY
+ role_comm_title = "Log."
+ paygrades = list(PAY_SHORT_UE3 = JOB_PLAYTIME_TIER_0)
+
+/datum/equipment_preset/upp/supply/load_gear(mob/living/carbon/human/new_human)
+ //back
+ new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/marine/engineerpack/upp, WEAR_BACK)
+ new_human.equip_to_slot_or_del(new /obj/item/reagent_container/food/snacks/upp, WEAR_IN_BACK)
+ new_human.equip_to_slot_or_del(new /obj/item/reagent_container/food/snacks/upp, WEAR_IN_BACK)
+ new_human.equip_to_slot_or_del(new /obj/item/device/motiondetector/hacked, WEAR_IN_BACK)
+ //face
+ new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/UPP/cct, WEAR_L_EAR)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/welding(new_human), WEAR_EYES)
+ //head
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/head/uppcap(new_human), WEAR_HEAD)
+ //body
+ var/obj/item/clothing/under/marine/veteran/UPP/UPP = new()
+ new_human.equip_to_slot_or_del(UPP, WEAR_BODY)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/accessory/patch/upp, WEAR_ACCESSORY)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/accessory/patch/upp/naval, WEAR_ACCESSORY)
+ //waist
+ new_human.equip_to_slot_or_del(new /obj/item/storage/belt/utility/full(new_human), WEAR_WAIST)
+ //limb
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/veteran/insulated(new_human), WEAR_HANDS)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/upp/knife, WEAR_FEET)
+ //pockets
+ new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/firstaid/ert(new_human), WEAR_L_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/construction(new_human), WEAR_R_STORE)
+
+/datum/equipment_preset/upp/supply/get_antag_clothing_equipment()
+ return list(
+ list("STANDARD EQUIPMENT (TAKE ALL)", 0, null, null, null),
+ list("Boots", 0, /obj/item/clothing/shoes/marine/upp/knife, MARINE_CAN_BUY_SHOES, VENDOR_ITEM_MANDATORY),
+ list("Fatigues", 0, /obj/item/clothing/under/marine/veteran/UPP, MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_MANDATORY),
+ list("UM5 Personal Armor", 0, /obj/item/clothing/suit/storage/marine/faction/UPP, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_MANDATORY),
+ list("Gloves", 0, /obj/item/clothing/gloves/marine/veteran/upp, MARINE_CAN_BUY_GLOVES, VENDOR_ITEM_MANDATORY),
+ list("Headset", 0, /obj/item/device/radio/headset/distress/UPP/cct, MARINE_CAN_BUY_EAR, VENDOR_ITEM_MANDATORY),
+ list("Welding Goggles", 0, /obj/item/clothing/glasses/welding, MARINE_CAN_BUY_GLASSES, VENDOR_ITEM_MANDATORY),
+ list("Ration", 0, /obj/item/reagent_container/food/snacks/upp, MARINE_CAN_BUY_MRE, VENDOR_ITEM_MANDATORY),
+ list("Welderpack", 0, /obj/item/storage/backpack/marine/engineerpack/upp, MARINE_CAN_BUY_BACKPACK, VENDOR_ITEM_MANDATORY),
+
+ list("HELMET (CHOOSE 1)", 0, null, null, null),
+ list("Armored Cap", 0, /obj/item/clothing/head/uppcap, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_REGULAR),
+ list("UM4 Helmet", 0, /obj/item/clothing/head/helmet/marine/veteran/UPP, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_REGULAR),
+
+ list("BELT (Choose 1)", 0, null, null, null),
+ list("Type 41 Ammo Load Rig", 0, /obj/item/storage/belt/marine/upp, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
+ list("Type 41 Pistol Holster Rig", 0, /obj/item/storage/belt/gun/m4a3, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
+ list("Toolbelt Rig (Full)", 0, /obj/item/storage/belt/utility/full, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED),
+
+ list("POUCHES (Choose 2)", 0, null, null, null),
+ list("Construction Pouch", 0, /obj/item/storage/pouch/construction, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
+ list("First-Aid Pouch (Refillable Injectors)", 0, /obj/item/storage/pouch/firstaid/full, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("First-Aid Pouch (Splints, Gauze, Ointment)", 0, /obj/item/storage/pouch/firstaid/full/alternate, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("First-Aid Pouch (Pill Packets)", 0, /obj/item/storage/pouch/firstaid/full/pills, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
+ list("Electronics Pouch (Full)", 0, /obj/item/storage/pouch/electronics/full, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Explosive Pouch", 0, /obj/item/storage/pouch/explosive, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Flare Pouch (Full)", 0, /obj/item/storage/pouch/flare/full, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Large Pistol Magazine Pouch", 0, /obj/item/storage/pouch/magazine/pistol/large, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Magazine Pouch", 0, /obj/item/storage/pouch/magazine, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Medium General Pouch", 0, /obj/item/storage/pouch/general/medium, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Pistol Pouch", 0, /obj/item/storage/pouch/pistol, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Tools Pouch (Full)", 0, /obj/item/storage/pouch/tools/full, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+
+ list("MASK (CHOOSE 1)", 0, null, null, null),
+ list("Gas Mask", 0, /obj/item/clothing/mask/gas, MARINE_CAN_BUY_MASK, VENDOR_ITEM_REGULAR),
+ list("Heat Absorbent Coif", 0, /obj/item/clothing/mask/rebreather/scarf, MARINE_CAN_BUY_MASK, VENDOR_ITEM_REGULAR)
+ )
+
+
+//*****************************************************************************************************/
+
+
+//====================//
+// Field Officers //
+//================//
+
/datum/equipment_preset/upp/officer
name = "UPP Lieutenant"
flags = EQUIPMENT_PRESET_EXTRA
@@ -1124,7 +1354,7 @@
assignment = JOB_UPP_LT_OFFICER
rank = JOB_UPP_LT_OFFICER
role_comm_title = "Lt."
- paygrade = PAY_SHORT_UO1
+ paygrades = list(PAY_SHORT_UO1 = JOB_PLAYTIME_TIER_0)
/datum/equipment_preset/upp/officer/load_gear(mob/living/carbon/human/new_human)
//back
@@ -1283,7 +1513,7 @@
assignment = JOB_UPP_SRLT_OFFICER
rank = JOB_UPP_SRLT_OFFICER
role_comm_title = "Sr-Lt."
- paygrade = PAY_SHORT_UO2
+ paygrades = list(PAY_SHORT_UO2 = JOB_PLAYTIME_TIER_0)
/datum/equipment_preset/upp/officer/senior/load_gear(mob/living/carbon/human/new_human)
//back
@@ -1442,7 +1672,7 @@
assignment = JOB_UPP_KPT_OFFICER
rank = JOB_UPP_KPT_OFFICER
role_comm_title = "May."
- paygrade = PAY_SHORT_UO3
+ paygrades = list(PAY_SHORT_UO3 = JOB_PLAYTIME_TIER_0)
skills = /datum/skills/upp/kapitan
/datum/equipment_preset/upp/officer/kapitan/load_gear(mob/living/carbon/human/new_human)
@@ -1602,7 +1832,7 @@
assignment = JOB_UPP_MAY_OFFICER
rank = JOB_UPP_MAY_OFFICER
role_comm_title = "May."
- paygrade = PAY_SHORT_UO4
+ paygrades = list(PAY_SHORT_UO4 = JOB_PLAYTIME_TIER_0)
skills = /datum/skills/upp/commander
/datum/equipment_preset/upp/officer/major/load_gear(mob/living/carbon/human/new_human)
@@ -1612,6 +1842,8 @@
new_human.equip_to_slot_or_del(new /obj/item/reagent_container/food/snacks/upp, WEAR_IN_BACK)
new_human.equip_to_slot_or_del(new /obj/item/device/motiondetector/hacked, WEAR_IN_BACK)
new_human.equip_to_slot_or_del(new /obj/item/device/megaphone, WEAR_IN_BACK)
+ new_human.equip_to_slot_or_del(new /obj/item/device/cotablet/upp, WEAR_IN_BACK)
+
//face
new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/UPP/command, WEAR_L_EAR)
//head
@@ -1762,7 +1994,7 @@
assignment = JOB_UPP_LTKOL_OFFICER
rank = JOB_UPP_LTKOL_OFFICER
role_comm_title = "Lt. Kol."
- paygrade = PAY_SHORT_UO5
+ paygrades = list(PAY_SHORT_UO5 = JOB_PLAYTIME_TIER_0)
skills = /datum/skills/upp/commander
/datum/equipment_preset/upp/officer/lt_kolonel/load_gear(mob/living/carbon/human/new_human)
@@ -1772,6 +2004,7 @@
new_human.equip_to_slot_or_del(new /obj/item/reagent_container/food/snacks/upp, WEAR_IN_BACK)
new_human.equip_to_slot_or_del(new /obj/item/device/motiondetector/hacked, WEAR_IN_BACK)
new_human.equip_to_slot_or_del(new /obj/item/device/megaphone, WEAR_IN_BACK)
+ new_human.equip_to_slot_or_del(new /obj/item/device/cotablet/upp, WEAR_IN_BACK)
//face
new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/UPP/command, WEAR_L_EAR)
//head
@@ -1922,7 +2155,7 @@
assignment = JOB_UPP_KOL_OFFICER
rank = JOB_UPP_KOL_OFFICER
role_comm_title = "Kol."
- paygrade = PAY_SHORT_UO6
+ paygrades = list(PAY_SHORT_UO6 = JOB_PLAYTIME_TIER_0)
skills = /datum/skills/upp/commander
/datum/equipment_preset/upp/officer/kolonel/load_gear(mob/living/carbon/human/new_human)
@@ -1932,6 +2165,7 @@
new_human.equip_to_slot_or_del(new /obj/item/reagent_container/food/snacks/upp, WEAR_IN_BACK)
new_human.equip_to_slot_or_del(new /obj/item/device/motiondetector/hacked, WEAR_IN_BACK)
new_human.equip_to_slot_or_del(new /obj/item/device/megaphone, WEAR_IN_BACK)
+ new_human.equip_to_slot_or_del(new /obj/item/device/cotablet/upp, WEAR_IN_BACK)
//face
new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/UPP/command, WEAR_L_EAR)
//head
@@ -2077,12 +2311,16 @@
//*****************************************************************************************************/
+//===================//
+// Flag Officers //
+//===============//
+
/datum/equipment_preset/upp/officer/may_gen
name = "UPP Mayjor General"
assignment = JOB_UPP_KOL_OFFICER
rank = JOB_UPP_KOL_OFFICER
role_comm_title = "May. Gen."
- paygrade = PAY_SHORT_UO7
+ paygrades = list(PAY_SHORT_UO7 = JOB_PLAYTIME_TIER_0)
skills = /datum/skills/upp/commander
/datum/equipment_preset/upp/officer/may_gen/load_gear(mob/living/carbon/human/new_human)
@@ -2092,6 +2330,7 @@
new_human.equip_to_slot_or_del(new /obj/item/reagent_container/food/snacks/upp, WEAR_IN_BACK)
new_human.equip_to_slot_or_del(new /obj/item/device/motiondetector/hacked, WEAR_IN_BACK)
new_human.equip_to_slot_or_del(new /obj/item/device/megaphone, WEAR_IN_BACK)
+ new_human.equip_to_slot_or_del(new /obj/item/device/cotablet/upp, WEAR_IN_BACK)
//face
new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/UPP/command, WEAR_L_EAR)
//head
@@ -2242,7 +2481,7 @@
assignment = JOB_UPP_KOL_OFFICER
rank = JOB_UPP_KOL_OFFICER
role_comm_title = "Lt. Gen."
- paygrade = PAY_SHORT_UO8
+ paygrades = list(PAY_SHORT_UO8 = JOB_PLAYTIME_TIER_0)
skills = /datum/skills/upp/commander
/datum/equipment_preset/upp/officer/ley_gen/load_gear(mob/living/carbon/human/new_human)
@@ -2252,6 +2491,7 @@
new_human.equip_to_slot_or_del(new /obj/item/reagent_container/food/snacks/upp, WEAR_IN_BACK)
new_human.equip_to_slot_or_del(new /obj/item/device/motiondetector/hacked, WEAR_IN_BACK)
new_human.equip_to_slot_or_del(new /obj/item/device/megaphone, WEAR_IN_BACK)
+ new_human.equip_to_slot_or_del(new /obj/item/device/cotablet/upp, WEAR_IN_BACK)
//face
new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/UPP/command, WEAR_L_EAR)
//head
@@ -2402,7 +2642,7 @@
assignment = JOB_UPP_KOL_OFFICER
rank = JOB_UPP_KOL_OFFICER
role_comm_title = "Gen."
- paygrade = PAY_SHORT_UO9
+ paygrades = list(PAY_SHORT_UO9 = JOB_PLAYTIME_TIER_0)
skills = /datum/skills/upp/commander
/datum/equipment_preset/upp/officer/gen/load_gear(mob/living/carbon/human/new_human)
@@ -2412,6 +2652,7 @@
new_human.equip_to_slot_or_del(new /obj/item/reagent_container/food/snacks/upp, WEAR_IN_BACK)
new_human.equip_to_slot_or_del(new /obj/item/device/motiondetector/hacked, WEAR_IN_BACK)
new_human.equip_to_slot_or_del(new /obj/item/device/megaphone, WEAR_IN_BACK)
+ new_human.equip_to_slot_or_del(new /obj/item/device/cotablet/upp, WEAR_IN_BACK)
//face
new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/UPP/command, WEAR_L_EAR)
//head
@@ -2593,6 +2834,11 @@
new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/explosive/C4, WEAR_R_STORE)
//*****************************************************************************************************/
+
+//===================//
+// UPP Synthetics //
+//================//
+
/datum/equipment_preset/upp/synth
name = "UPP Synthetic"
flags = EQUIPMENT_PRESET_EXTRA
@@ -2602,7 +2848,7 @@
skills = /datum/skills/synthetic
assignment = JOB_UPP_SUPPORT_SYNTH
rank = JOB_UPP_SUPPORT_SYNTH
- paygrade = PAY_SHORT_SYN
+ paygrades = list(PAY_SHORT_SYN = JOB_PLAYTIME_TIER_0)
idtype = /obj/item/card/id/dogtag
/datum/equipment_preset/upp/synth/load_name(mob/living/carbon/human/new_human, randomise)
@@ -2864,135 +3110,29 @@
//*****************************************************************************************************/
-/datum/equipment_preset/upp/conscript
- //meme role
- name = "UPP Conscript"
- flags = EQUIPMENT_PRESET_EXTRA
+//=================//
+// UPP SpecFor //
+//=============//
- skills = /datum/skills/upp
- assignment = JOB_UPP_CONSCRIPT
- rank = JOB_UPP_CONSCRIPT
- role_comm_title = "Cons"
- paygrade = PAY_SHORT_UE1
+/datum/equipment_preset/upp/commando
+ name = "UPP Commando (!DEATHSQUAD!)"
+ flags = EQUIPMENT_PRESET_EXTRA
-/datum/equipment_preset/upp/conscript/load_gear(mob/living/carbon/human/new_human)
- //back
- var/maybebackpack = prob(20) ? pick(/obj/item/storage/backpack/lightpack/upp, /obj/item/storage/backpack/lightpack) : null
- if(maybebackpack)
- new_human.equip_to_slot_or_del(new maybebackpack, WEAR_BACK) //what in back?
- //face
- new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/UPP, WEAR_L_EAR)
+ skills = /datum/skills/commando
+ assignment = JOB_UPP_COMMANDO
+ rank = JOB_UPP_COMMANDO
+ role_comm_title = "JKdo"
+ paygrades = list(PAY_SHORT_UC1 = JOB_PLAYTIME_TIER_0)
+ idtype = /obj/item/card/id/data
+ languages = list(LANGUAGE_RUSSIAN, LANGUAGE_ENGLISH, LANGUAGE_TSL, LANGUAGE_SPANISH, LANGUAGE_CHINESE)
- //head
- var/maybehat = prob(66) ? pick(/obj/item/clothing/head/uppcap, /obj/item/clothing/head/uppcap/beret, /obj/item/clothing/head/ushanka, /obj/item/clothing/head/uppcap/ushanka) : null
- if(maybehat)
- new_human.equip_to_slot_or_del(new maybehat, WEAR_HEAD)
+/datum/equipment_preset/upp/commando/New()
+ . = ..()
+ access = get_access(ACCESS_LIST_GLOBAL)
- //body
- var/obj/item/clothing/under/marine/veteran/UPP/UPP = new()
- new_human.equip_to_slot_or_del(UPP, WEAR_BODY)
- new_human.equip_to_slot_or_del(new /obj/item/clothing/accessory/patch/upp, WEAR_ACCESSORY)
- new_human.equip_to_slot_or_del(new /obj/item/clothing/accessory/patch/upp/naval, WEAR_ACCESSORY)
-
- var/maybejacket = prob(50) ? pick(/obj/item/clothing/suit/storage/marine/faction/UPP/jacket, /obj/item/clothing/suit/storage/snow_suit/soviet) : null
- if(maybejacket)
- new_human.equip_to_slot_or_del(new maybejacket, WEAR_JACKET)
- new_human.equip_to_slot_or_del(new /obj/item/stack/medical/bruise_pack, WEAR_IN_JACKET)
- new_human.equip_to_slot_or_del(new /obj/item/reagent_container/food/drinks/bottle/vodka, WEAR_IN_JACKET)
- //limit of snowcoat
- new_human.equip_to_slot_or_del(new /obj/item/explosive/grenade/high_explosive/upp, WEAR_IN_JACKET)
-
- //limbs
- new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/upp/knife, WEAR_FEET)
- var/maybegloves = prob(80) ? pick(/obj/item/clothing/gloves/black, /obj/item/clothing/gloves/marine/veteran/upp, /obj/item/clothing/gloves/combat) : null
- if(maybegloves)
- new_human.equip_to_slot_or_del(new maybegloves, WEAR_HANDS)
-
- //gun
- new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/rifle/type71/carbine, WEAR_R_HAND)
-
- //webbing or belt?
- if(prob(30))
- var/obj/item/clothing/accessory/storage/webbing/W = new()
- UPP.attach_accessory(new_human, W)
- new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/type71, WEAR_IN_ACCESSORY)
- new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/type71, WEAR_IN_ACCESSORY)
- new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/type71, WEAR_IN_ACCESSORY)
- else if(prob(30))
- new_human.equip_to_slot_or_del(new /obj/item/storage/belt/marine/upp/scarce, WEAR_WAIST)
- //if you fail the rolls you must scavenge the ammo from your fallen brethren
-
- if(SSmapping.configs[GROUND_MAP].environment_traits[MAP_COLD])
- new_human.equip_to_slot_or_del(new /obj/item/clothing/mask/rebreather/scarf/tacticalmask/green, WEAR_FACE)
-
- if(prob(10))
- //sometimes Ivan smiles upon the corps
- new_human.set_species("Human Hero")
-
-/datum/equipment_preset/upp/conscript/get_antag_clothing_equipment()
- return list(
- list("STANDARD EQUIPMENT (TAKE ALL)", 0, null, null, null),
- list("Boots", 0, /obj/item/clothing/shoes/marine/upp/knife, MARINE_CAN_BUY_SHOES, VENDOR_ITEM_MANDATORY),
- list("Fatigues", 0, /obj/item/clothing/under/marine/veteran/UPP, MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_MANDATORY),
- list("Headset", 0, /obj/item/device/radio/headset/distress/UPP, MARINE_CAN_BUY_EAR, VENDOR_ITEM_MANDATORY),
- list("Ration", 0, /obj/item/reagent_container/food/snacks/upp, MARINE_CAN_BUY_MRE, VENDOR_ITEM_MANDATORY),
-
- list("HELMET", 0, null, null, null),
- list("Armored Cap", 0, /obj/item/clothing/head/uppcap, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_MANDATORY),
- list("Armored Ushanka", 0, /obj/item/clothing/head/uppcap/ushanka, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_REGULAR),
-
- list("BELT (CHOOSE 1)", 0, null, null, null),
- list("Type 41 Pistol Holster Rig", 0, /obj/item/storage/belt/gun/m4a3, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
-
- list("POUCHES (CHOOSE 2)", 0, null, null, null),
- list("Bayonet Sheath", 0, /obj/item/storage/pouch/bayonet/upp, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
- list("Flare Pouch (Full)", 0, /obj/item/storage/pouch/flare/full, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
- list("Pistol Magazine Pouch", 0, /obj/item/storage/pouch/magazine/pistol, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
-
- list("ATTACHMENT (CHOOSE 1)", 0, null, null, null),
- list("Laser Sight", 0, /obj/item/attachable/lasersight, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR),
-
- list("MASK (CHOOSE 1)", 0, null, null, null),
- list("Tactical Bandana", 0, /obj/item/clothing/mask/rebreather/scarf/tacticalmask/green, MARINE_CAN_BUY_MASK, VENDOR_ITEM_REGULAR)
- )
-
-/datum/equipment_preset/upp/conscript/get_antag_gear_equipment()
- return list(
- list("ENGINEERING SUPPLIES", 0, null, null, null),
- list("Entrenching Tool", 2, /obj/item/tool/shovel/etool, null, VENDOR_ITEM_RECOMMENDED),
- list("Sandbags x25", 5, /obj/item/stack/sandbags_empty/half, null, VENDOR_ITEM_RECOMMENDED),
-
- list("EXPLOSIVES", 0, null, null, null),
- list("Smoke Grenade", 5, /obj/item/explosive/grenade/smokebomb, null, VENDOR_ITEM_REGULAR),
-
- list("UTILITIES", 0, null, null, null),
- list("Brown Webbing Vest", 10, /obj/item/clothing/accessory/storage/black_vest/brown_vest, null, VENDOR_ITEM_RECOMMENDED),
- list("Black Webbing Vest", 10, /obj/item/clothing/accessory/storage/black_vest, null, VENDOR_ITEM_RECOMMENDED),
- list("Webbing", 10, /obj/item/clothing/accessory/storage/webbing, null, VENDOR_ITEM_REGULAR),
- list("Drop Pouch", 10, /obj/item/clothing/accessory/storage/droppouch, null, VENDOR_ITEM_REGULAR)
- )
-
-//*****************************************************************************************************/
-
-/datum/equipment_preset/upp/commando
- name = "UPP Commando (!DEATHSQUAD!)"
- flags = EQUIPMENT_PRESET_EXTRA
-
- skills = /datum/skills/commando
- assignment = JOB_UPP_COMMANDO
- rank = JOB_UPP_COMMANDO
- role_comm_title = "JKdo"
- paygrade = PAY_SHORT_UC1
- idtype = /obj/item/card/id/data
- languages = list(LANGUAGE_RUSSIAN, LANGUAGE_ENGLISH, LANGUAGE_TSL, LANGUAGE_SPANISH, LANGUAGE_CHINESE)
-
-/datum/equipment_preset/upp/commando/New()
- . = ..()
- access = get_access(ACCESS_LIST_GLOBAL)
-
-/datum/equipment_preset/upp/commando/load_gear(mob/living/carbon/human/new_human)
- new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/UPP/kdo, WEAR_L_EAR)
- new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/veteran/UPP, WEAR_BODY)
+/datum/equipment_preset/upp/commando/load_gear(mob/living/carbon/human/new_human)
+ new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/UPP/kdo, WEAR_L_EAR)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/veteran/UPP, WEAR_BODY)
new_human.equip_to_slot_or_del(new /obj/item/clothing/accessory/patch/upp, WEAR_ACCESSORY)
new_human.equip_to_slot_or_del(new /obj/item/clothing/accessory/patch/upp/naval, WEAR_ACCESSORY)
new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/faction/UPP/commando, WEAR_JACKET)
@@ -3109,7 +3249,7 @@
assignment = JOB_UPP_COMMANDO_MEDIC
rank = JOB_UPP_COMMANDO_MEDIC
role_comm_title = "2ndKdo"
- paygrade = PAY_SHORT_UC2
+ paygrades = list(PAY_SHORT_UC2 = JOB_PLAYTIME_TIER_0)
/datum/equipment_preset/upp/commando/medic/load_gear(mob/living/carbon/human/new_human)
new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/UPP/kdo/medic, WEAR_L_EAR)
@@ -3276,7 +3416,7 @@
assignment = JOB_UPP_COMMANDO_LEADER
rank = JOB_UPP_COMMANDO_LEADER
role_comm_title = "1stKdo"
- paygrade = PAY_SHORT_UC3
+ paygrades = list(PAY_SHORT_UC3 = JOB_PLAYTIME_TIER_0)
idtype = /obj/item/card/id/silver
/datum/equipment_preset/upp/commando/leader/load_gear(mob/living/carbon/human/new_human)
@@ -3524,13 +3664,17 @@
//*****************************************************************************************************/
+//============//
+// Other //
+//========//
+
/datum/equipment_preset/upp/tank
name = "UPP Vehicle Crewman (TANK)"
flags = EQUIPMENT_PRESET_EXTRA
assignment = JOB_UPP_CREWMAN
rank = JOB_UPP_CREWMAN
- paygrade = PAY_SHORT_UE5
+ paygrades = list(PAY_SHORT_UE5 = JOB_PLAYTIME_TIER_0)
role_comm_title = "TANK"
minimum_age = 30
skills = /datum/skills/tank_crew
@@ -3642,137 +3786,195 @@
//*****************************************************************************************************/
-/datum/equipment_preset/upp/doctor
- name = "UPP Doctor"
+/datum/equipment_preset/upp/conscript
+ //meme role
+ name = "UPP Conscript"
flags = EQUIPMENT_PRESET_EXTRA
- skills = /datum/skills/upp/combat_medic
- assignment = JOB_UPP_LT_DOKTOR
- rank = JOB_UPP_LT_DOKTOR
- role_comm_title = "Lt. Med."
- paygrade = PAY_SHORT_UO1
+ skills = /datum/skills/upp
+ assignment = JOB_UPP_CONSCRIPT
+ rank = JOB_UPP_CONSCRIPT
+ role_comm_title = "Cons"
+ paygrades = list(PAY_SHORT_UE1 = JOB_PLAYTIME_TIER_0)
-/datum/equipment_preset/upp/doctor/load_gear(mob/living/carbon/human/new_human)
+/datum/equipment_preset/upp/conscript/load_gear(mob/living/carbon/human/new_human)
//back
- new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/lightpack/upp, WEAR_BACK)
- new_human.equip_to_slot_or_del(new /obj/item/device/defibrillator, WEAR_IN_BACK)
- new_human.equip_to_slot_or_del(new /obj/item/storage/firstaid/adv, WEAR_IN_BACK)
- new_human.equip_to_slot_or_del(new /obj/item/roller/surgical, WEAR_IN_BACK)
- new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/pistol/np92, WEAR_IN_BACK) //targeting unarmed medical personal is not a war crime in aliens(primarily because, off memory, warcrimes aren't really a thing, although this definately is bad manners), and the playerbase is HRP in this concern!(if you don't get the joke, the players regularly execute unarmed doctors in hvh events. :D)
- new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/np92, WEAR_IN_BACK)
- new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/pistol/np92, WEAR_IN_BACK)
+ var/maybebackpack = prob(20) ? pick(/obj/item/storage/backpack/lightpack/upp, /obj/item/storage/backpack/lightpack) : null
+ if(maybebackpack)
+ new_human.equip_to_slot_or_del(new maybebackpack, WEAR_BACK) //what in back?
//face
new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/UPP, WEAR_L_EAR)
- if(new_human.disabilities & NEARSIGHTED)
- new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/hud/health/prescription(new_human), WEAR_EYES)
- else
- new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/hud/health(new_human), WEAR_EYES)
+
//head
- new_human.equip_to_slot_or_del(new /obj/item/clothing/head/uppcap/ushanka, WEAR_HEAD)
+ var/maybehat = prob(66) ? pick(/obj/item/clothing/head/uppcap, /obj/item/clothing/head/uppcap/beret, /obj/item/clothing/head/ushanka, /obj/item/clothing/head/uppcap/ushanka) : null
+ if(maybehat)
+ new_human.equip_to_slot_or_del(new maybehat, WEAR_HEAD)
+
//body
- var/obj/item/clothing/under/marine/veteran/UPP/medic/UPP = new()
- var/obj/item/clothing/accessory/storage/surg_vest/equipped/W = new()
- UPP.attach_accessory(new_human, W)
+ var/obj/item/clothing/under/marine/veteran/UPP/UPP = new()
new_human.equip_to_slot_or_del(UPP, WEAR_BODY)
new_human.equip_to_slot_or_del(new /obj/item/clothing/accessory/patch/upp, WEAR_ACCESSORY)
new_human.equip_to_slot_or_del(new /obj/item/clothing/accessory/patch/upp/naval, WEAR_ACCESSORY)
- //waist
- new_human.equip_to_slot_or_del(new /obj/item/storage/belt/medical/lifesaver/upp/full, WEAR_WAIST)
- new_human.equip_to_slot_or_del(new /obj/item/reagent_container/hypospray/autoinjector/oxycodone, WEAR_IN_BELT)
+
+ var/maybejacket = prob(50) ? pick(/obj/item/clothing/suit/storage/marine/faction/UPP/jacket, /obj/item/clothing/suit/storage/snow_suit/soviet) : null
+ if(maybejacket)
+ new_human.equip_to_slot_or_del(new maybejacket, WEAR_JACKET)
+ new_human.equip_to_slot_or_del(new /obj/item/stack/medical/bruise_pack, WEAR_IN_JACKET)
+ new_human.equip_to_slot_or_del(new /obj/item/reagent_container/food/drinks/bottle/vodka, WEAR_IN_JACKET)
+ //limit of snowcoat
+ new_human.equip_to_slot_or_del(new /obj/item/explosive/grenade/high_explosive/upp, WEAR_IN_JACKET)
+
//limbs
new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/upp/knife, WEAR_FEET)
- new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/veteran/upp, WEAR_HANDS)
- //póckets
- new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/general/large, WEAR_R_STORE)
- new_human.equip_to_slot_or_del(new /obj/item/reagent_container/food/snacks/upp, WEAR_IN_R_STORE)
- new_human.equip_to_slot_or_del(new /obj/item/reagent_container/food/snacks/upp, WEAR_IN_R_STORE)
- new_human.equip_to_slot_or_del(new /obj/item/reagent_container/food/snacks/upp, WEAR_IN_R_STORE)
- new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/medical, WEAR_L_STORE)
- new_human.equip_to_slot_or_del(new /obj/item/tool/surgery/synthgraft, WEAR_IN_L_STORE)
- new_human.equip_to_slot_or_del(new /obj/item/device/healthanalyzer, WEAR_IN_L_STORE)
- new_human.equip_to_slot_or_del(new /obj/item/reagent_container/hypospray/autoinjector/oxycodone, WEAR_IN_L_STORE)
- new_human.equip_to_slot_or_del(new /obj/item/reagent_container/hypospray/tricordrazine, WEAR_IN_L_STORE)
+ var/maybegloves = prob(80) ? pick(/obj/item/clothing/gloves/black, /obj/item/clothing/gloves/marine/veteran/upp, /obj/item/clothing/gloves/combat) : null
+ if(maybegloves)
+ new_human.equip_to_slot_or_del(new maybegloves, WEAR_HANDS)
+
+ //gun
+ new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/rifle/type71/carbine, WEAR_R_HAND)
+
+ //webbing or belt?
+ if(prob(30))
+ var/obj/item/clothing/accessory/storage/webbing/W = new()
+ UPP.attach_accessory(new_human, W)
+ new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/type71, WEAR_IN_ACCESSORY)
+ new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/type71, WEAR_IN_ACCESSORY)
+ new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/type71, WEAR_IN_ACCESSORY)
+ else if(prob(30))
+ new_human.equip_to_slot_or_del(new /obj/item/storage/belt/marine/upp/scarce, WEAR_WAIST)
+ //if you fail the rolls you must scavenge the ammo from your fallen brethren
if(SSmapping.configs[GROUND_MAP].environment_traits[MAP_COLD])
new_human.equip_to_slot_or_del(new /obj/item/clothing/mask/rebreather/scarf/tacticalmask/green, WEAR_FACE)
-/datum/equipment_preset/upp/doctor/get_antag_clothing_equipment()
+ if(prob(10))
+ //sometimes Ivan smiles upon the corps
+ new_human.set_species("Human Hero")
+
+/datum/equipment_preset/upp/conscript/get_antag_clothing_equipment()
return list(
list("STANDARD EQUIPMENT (TAKE ALL)", 0, null, null, null),
list("Boots", 0, /obj/item/clothing/shoes/marine/upp/knife, MARINE_CAN_BUY_SHOES, VENDOR_ITEM_MANDATORY),
- list("Medic Fatigues", 0, /obj/item/clothing/under/marine/veteran/UPP/medic, MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_MANDATORY),
- list("UL6 Personal Armor", 0, /obj/item/clothing/suit/storage/marine/faction/UPP/support, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_MANDATORY),
- list("Gloves", 0, /obj/item/clothing/gloves/marine/veteran/upp, MARINE_CAN_BUY_GLOVES, VENDOR_ITEM_MANDATORY),
+ list("Fatigues", 0, /obj/item/clothing/under/marine/veteran/UPP, MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_MANDATORY),
list("Headset", 0, /obj/item/device/radio/headset/distress/UPP, MARINE_CAN_BUY_EAR, VENDOR_ITEM_MANDATORY),
list("Ration", 0, /obj/item/reagent_container/food/snacks/upp, MARINE_CAN_BUY_MRE, VENDOR_ITEM_MANDATORY),
- list("Combat Pack", 0, /obj/item/storage/backpack/lightpack, MARINE_CAN_BUY_BACKPACK, VENDOR_ITEM_MANDATORY),
- list("HealthMate HUD", 0, /obj/item/clothing/glasses/hud/health, MARINE_CAN_BUY_GLASSES, VENDOR_ITEM_MANDATORY),
- list("HELMET (CHOOSE 1)", 0, null, null, null),
- list("Ushanka", 0, /obj/item/clothing/head/uppcap/ushanka, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_REGULAR),
+ list("HELMET", 0, null, null, null),
+ list("Armored Cap", 0, /obj/item/clothing/head/uppcap, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_MANDATORY),
+ list("Armored Ushanka", 0, /obj/item/clothing/head/uppcap/ushanka, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_REGULAR),
- list("BELT", 0, null, null, null),
- list("Type 41 Lifesaver Bag", 0, /obj/item/storage/belt/medical/lifesaver/upp/full, MARINE_CAN_BUY_BELT, VENDOR_ITEM_MANDATORY),
+ list("BELT (CHOOSE 1)", 0, null, null, null),
+ list("Type 41 Pistol Holster Rig", 0, /obj/item/storage/belt/gun/m4a3, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
list("POUCHES (CHOOSE 2)", 0, null, null, null),
- list("Auto-Injector Pouch", 0, /obj/item/storage/pouch/autoinjector, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
- list("First-Aid Pouch (Refillable Injectors)", 0, /obj/item/storage/pouch/firstaid/full, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
- list("First-Aid Pouch (Splints, Gauze, Ointment)", 0, /obj/item/storage/pouch/firstaid/full/alternate, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
- list("First-Aid Pouch (Pill Packets)", 0, /obj/item/storage/pouch/firstaid/full/pills, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
- list("First Responder Pouch", 0, /obj/item/storage/pouch/first_responder, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Bayonet Sheath", 0, /obj/item/storage/pouch/bayonet/upp, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
list("Flare Pouch (Full)", 0, /obj/item/storage/pouch/flare/full, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
- list("Medical Pouch (Splints)", 0, /obj/item/storage/pouch/medical/full, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
- list("Medical Pouch (Pills)", 0, /obj/item/storage/pouch/medical/full/pills, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
- list("Medium General Pouch", 0, /obj/item/storage/pouch/general/medium, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
- list("Medical Kit Pouch", 0, /obj/item/storage/pouch/medkit, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Pistol Magazine Pouch", 0, /obj/item/storage/pouch/magazine/pistol, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+
+ list("ATTACHMENT (CHOOSE 1)", 0, null, null, null),
+ list("Laser Sight", 0, /obj/item/attachable/lasersight, MARINE_CAN_BUY_ATTACHMENT, VENDOR_ITEM_REGULAR),
+
+ list("MASK (CHOOSE 1)", 0, null, null, null),
+ list("Tactical Bandana", 0, /obj/item/clothing/mask/rebreather/scarf/tacticalmask/green, MARINE_CAN_BUY_MASK, VENDOR_ITEM_REGULAR)
+ )
+
+/datum/equipment_preset/upp/conscript/get_antag_gear_equipment()
+ return list(
+ list("ENGINEERING SUPPLIES", 0, null, null, null),
+ list("Entrenching Tool", 2, /obj/item/tool/shovel/etool, null, VENDOR_ITEM_RECOMMENDED),
+ list("Sandbags x25", 5, /obj/item/stack/sandbags_empty/half, null, VENDOR_ITEM_RECOMMENDED),
+
+ list("EXPLOSIVES", 0, null, null, null),
+ list("Smoke Grenade", 5, /obj/item/explosive/grenade/smokebomb, null, VENDOR_ITEM_REGULAR),
+
+ list("UTILITIES", 0, null, null, null),
+ list("Brown Webbing Vest", 10, /obj/item/clothing/accessory/storage/black_vest/brown_vest, null, VENDOR_ITEM_RECOMMENDED),
+ list("Black Webbing Vest", 10, /obj/item/clothing/accessory/storage/black_vest, null, VENDOR_ITEM_RECOMMENDED),
+ list("Webbing", 10, /obj/item/clothing/accessory/storage/webbing, null, VENDOR_ITEM_REGULAR),
+ list("Drop Pouch", 10, /obj/item/clothing/accessory/storage/droppouch, null, VENDOR_ITEM_REGULAR)
+ )
+
+
+/datum/equipment_preset/upp/commissar
+ name = "UPP Political Commissar"
+ flags = EQUIPMENT_PRESET_EXTRA
+
+ assignment = JOB_UPP_COMMISSAR
+ rank = JOB_UPP_COMMISSAR
+ paygrades = list(PAY_SHORT_UO4P = JOB_PLAYTIME_TIER_0)
+ role_comm_title = "Commissar"
+ minimum_age = 30
+ skills = /datum/skills/upp/commissar
+
+/datum/equipment_preset/upp/commissar/load_gear(mob/living/carbon/human/new_human)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/veteran/UPP(new_human), WEAR_BODY)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/accessory/patch/upp, WEAR_ACCESSORY)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/accessory/patch/upp/naval, WEAR_ACCESSORY)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/laceup(new_human), WEAR_FEET)
+ new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/UPP/command(new_human), WEAR_L_EAR)
+ new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/type47/revolver(new_human), WEAR_WAIST)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/gimmick/jason(new_human), WEAR_JACKET)
+ new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel(new_human), WEAR_BACK)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/head/uppcap/beret(new_human), WEAR_HEAD)
+
+/datum/equipment_preset/upp/commissar/load_status()
+ return
+
+/datum/equipment_preset/upp/commissar/get_antag_clothing_equipment()
+ return list(
+ list("STANDARD EQUIPMENT (TAKE ALL)", 0, null, null, null),
+ list("MRE", 0, /obj/item/storage/box/MRE, MARINE_CAN_BUY_MRE, VENDOR_ITEM_MANDATORY),
+
+ list("HELMET (CHOOSE 1)", 0, null, null, null),
+ list("UL2 Cap", 0, /obj/item/clothing/head/uppcap, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_REGULAR),
+ list("UL3 Beret", 0, /obj/item/clothing/head/uppcap/beret, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_REGULAR),
+ list("UL8 Ushanka", 0, /obj/item/clothing/head/uppcap/beret, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_REGULAR),
+ list("UM4 Helmet", 0, /obj/item/clothing/head/helmet/marine/veteran/UPP, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_REGULAR),
+
+ list("POUCHES (CHOOSE 2)", 0, null, null, null),
+ list("First-Aid Pouch (Full)", 0, /obj/item/storage/pouch/firstaid/full, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_RECOMMENDED),
+ list("Flare Pouch (Full)", 0, /obj/item/storage/pouch/flare/full, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Large General Pouch", 0, /obj/item/storage/pouch/general/large, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Sling Pouch", 0, /obj/item/storage/pouch/sling, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Large Pistol Magazine Pouch", 0, /obj/item/storage/pouch/magazine/pistol/large, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Magazine Pouch", 0, /obj/item/storage/pouch/magazine, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
+ list("Sidearm Pouch", 0, /obj/item/storage/pouch/pistol, MARINE_CAN_BUY_POUCH, VENDOR_ITEM_REGULAR),
list("MASK (CHOOSE 1)", 0, null, null, null),
list("Gas Mask", 0, /obj/item/clothing/mask/gas, MARINE_CAN_BUY_MASK, VENDOR_ITEM_REGULAR),
- list("Heat Absorbent Coif", 0, /obj/item/clothing/mask/rebreather/scarf, MARINE_CAN_BUY_MASK, VENDOR_ITEM_REGULAR)
+ list("Heat Absorbent Coif", 0, /obj/item/clothing/mask/rebreather/scarf, MARINE_CAN_BUY_MASK, VENDOR_ITEM_REGULAR),
)
-/datum/equipment_preset/upp/doctor/get_antag_gear_equipment()
+/datum/equipment_preset/upp/commissar/get_antag_gear_equipment()
return list(
- list("MEDIC SET (MANDATORY)", 0, null, null, null),
- list("Essential Medic Set", 0, /obj/effect/essentials_set/medic/upp, MARINE_CAN_BUY_ESSENTIALS, VENDOR_ITEM_MANDATORY),
+ list("SQUAD LEADER SET (MANDATORY)", 0, null, null, null),
+ list("Essential SL Set", 0, /obj/effect/essentials_set/leader/upp, MARINE_CAN_BUY_ESSENTIALS, VENDOR_ITEM_MANDATORY),
- list("FIELD SUPPLIES", 0, null, null, null),
- list("Burn Kit", 2, /obj/item/stack/medical/advanced/ointment, null, VENDOR_ITEM_RECOMMENDED),
- list("Trauma Kit", 2, /obj/item/stack/medical/advanced/bruise_pack, null, VENDOR_ITEM_RECOMMENDED),
- list("Medical Splints", 1, /obj/item/stack/medical/splint, null, VENDOR_ITEM_RECOMMENDED),
+ list("GENERAL SUPPLIES", 0, null, null, null),
+ list("Whistle", 5, /obj/item/device/whistle, null, VENDOR_ITEM_REGULAR),
- list("FIRSTAID KITS", 0, null, null, null),
- list("Advanced Firstaid Kit", 12, /obj/item/storage/firstaid/adv, null, VENDOR_ITEM_RECOMMENDED),
- list("Firstaid Kit", 5, /obj/item/storage/firstaid/regular/response, null, VENDOR_ITEM_REGULAR),
- list("Fire Firstaid Kit", 6, /obj/item/storage/firstaid/fire, null, VENDOR_ITEM_REGULAR),
- list("Toxin Firstaid Kit", 6, /obj/item/storage/firstaid/toxin, null, VENDOR_ITEM_REGULAR),
- list("Oxygen Firstaid Kit", 6, /obj/item/storage/firstaid/o2, null, VENDOR_ITEM_REGULAR),
- list("Radiation Firstaid Kit", 6, /obj/item/storage/firstaid/rad, null, VENDOR_ITEM_REGULAR),
+ list("ENGINEERING SUPPLIES", 0, null, null, null),
+ list("Entrenching Tool", 2, /obj/item/tool/shovel/etool, null, VENDOR_ITEM_REGULAR),
+ list("Insulated Gloves", 3, /obj/item/clothing/gloves/yellow, null, VENDOR_ITEM_REGULAR),
+ list("Tools Pouch (Full)", 5, /obj/item/storage/pouch/tools/full, null, VENDOR_ITEM_REGULAR),
+ list("Welding Goggles", 5, /obj/item/clothing/glasses/welding, null, VENDOR_ITEM_REGULAR),
- list("AUTOINJECTORS", 0, null, null, null),
- list("Autoinjector (Bicaridine)", 1, /obj/item/reagent_container/hypospray/autoinjector/bicaridine, null, VENDOR_ITEM_REGULAR),
- list("Autoinjector (Dexalin+)", 1, /obj/item/reagent_container/hypospray/autoinjector/dexalinp, null, VENDOR_ITEM_REGULAR),
- list("Autoinjector (Epinephrine)", 2, /obj/item/reagent_container/hypospray/autoinjector/adrenaline, null, VENDOR_ITEM_REGULAR),
- list("Autoinjector (Inaprovaline)", 1, /obj/item/reagent_container/hypospray/autoinjector/inaprovaline, null, VENDOR_ITEM_REGULAR),
- list("Autoinjector (Kelotane)", 1, /obj/item/reagent_container/hypospray/autoinjector/kelotane, null, VENDOR_ITEM_REGULAR),
- list("Autoinjector (Oxycodone)", 2, /obj/item/reagent_container/hypospray/autoinjector/oxycodone, null, VENDOR_ITEM_REGULAR),
- list("Autoinjector (Tramadol)", 1, /obj/item/reagent_container/hypospray/autoinjector/tramadol, null, VENDOR_ITEM_REGULAR),
- list("Autoinjector (Tricord)", 1, /obj/item/reagent_container/hypospray/autoinjector/tricord, null, VENDOR_ITEM_REGULAR),
+ list("MEDICAL SUPPLIES", 0, null, null, null),
+ list("Burn Kit", 2, /obj/item/stack/medical/advanced/ointment, null, VENDOR_ITEM_REGULAR),
+ list("Trauma Kit", 2, /obj/item/stack/medical/advanced/bruise_pack, null, VENDOR_ITEM_REGULAR),
+ list("Advanced Firstaid Kit", 12, /obj/item/storage/firstaid/adv, null, VENDOR_ITEM_REGULAR),
+ list("Medical Splints", 1, /obj/item/stack/medical/splint, null, VENDOR_ITEM_REGULAR),
- list("PILL BOTTLES", 0, null, null, null),
- list("Pill Bottle (Bicaridine)", 5, /obj/item/storage/pill_bottle/bicaridine, null, VENDOR_ITEM_RECOMMENDED),
- list("Pill Bottle (Dexalin)", 5, /obj/item/storage/pill_bottle/dexalin, null, VENDOR_ITEM_REGULAR),
- list("Pill Bottle (Dylovene)", 5, /obj/item/storage/pill_bottle/antitox, null, VENDOR_ITEM_REGULAR),
- list("Pill Bottle (Inaprovaline)", 5, /obj/item/storage/pill_bottle/inaprovaline, null, VENDOR_ITEM_REGULAR),
- list("Pill Bottle (Kelotane)", 5, /obj/item/storage/pill_bottle/kelotane, null, VENDOR_ITEM_RECOMMENDED),
- list("Pill Bottle (Peridaxon)", 5, /obj/item/storage/pill_bottle/peridaxon, null, VENDOR_ITEM_REGULAR),
- list("Pill Bottle (Tramadol)", 5, /obj/item/storage/pill_bottle/tramadol, null, VENDOR_ITEM_RECOMMENDED),
+ list("Injector (Bicaridine)", 1, /obj/item/reagent_container/hypospray/autoinjector/bicaridine, null, VENDOR_ITEM_REGULAR),
+ list("Injector (Dexalin+)", 1, /obj/item/reagent_container/hypospray/autoinjector/dexalinp, null, VENDOR_ITEM_REGULAR),
+ list("Injector (Inaprovaline)", 1, /obj/item/reagent_container/hypospray/autoinjector/inaprovaline, null, VENDOR_ITEM_REGULAR),
+ list("Injector (Kelotane)", 1, /obj/item/reagent_container/hypospray/autoinjector/kelotane, null, VENDOR_ITEM_REGULAR),
+ list("Injector (Oxycodone)", 2, /obj/item/reagent_container/hypospray/autoinjector/oxycodone, null, VENDOR_ITEM_REGULAR),
+ list("Injector (Tramadol)", 1, /obj/item/reagent_container/hypospray/autoinjector/tramadol, null, VENDOR_ITEM_REGULAR),
+ list("Injector (Tricord)", 1, /obj/item/reagent_container/hypospray/autoinjector/tricord, null, VENDOR_ITEM_REGULAR),
- list("MEDICAL UTILITIES", 0, null, null, null),
list("Health Analyzer", 4, /obj/item/device/healthanalyzer, null, VENDOR_ITEM_REGULAR),
- list("Medical HUD Glasses", 4, /obj/item/clothing/glasses/hud/health, null, VENDOR_ITEM_REGULAR),
- list("Roller Bed", 4, /obj/item/roller, null, VENDOR_ITEM_REGULAR),
- list("Stasis Bag", 6, /obj/item/bodybag/cryobag, null, VENDOR_ITEM_REGULAR),
+ list("Medical HUD Glasses", 4, /obj/item/clothing/glasses/hud/health, null, VENDOR_ITEM_MANDATORY),
list("UTILITIES", 0, null, null, null),
list("Brown Webbing Vest", 10, /obj/item/clothing/accessory/storage/black_vest/brown_vest, null, VENDOR_ITEM_RECOMMENDED),
diff --git a/code/modules/gear_presets/uscm.dm b/code/modules/gear_presets/uscm.dm
index 4b018eea1d50..eedd0f79f4a7 100644
--- a/code/modules/gear_presets/uscm.dm
+++ b/code/modules/gear_presets/uscm.dm
@@ -67,7 +67,7 @@
access = list(ACCESS_MARINE_PREP)
assignment = JOB_SQUAD_MARINE
rank = JOB_SQUAD_MARINE
- paygrade = PAY_SHORT_ME2
+ paygrades = list(PAY_SHORT_ME1 = JOB_PLAYTIME_TIER_0, PAY_SHORT_ME2 = JOB_PLAYTIME_TIER_1, PAY_SHORT_ME3 = JOB_PLAYTIME_TIER_3)
role_comm_title = "RFN"
skills = /datum/skills/pfc
@@ -82,12 +82,6 @@
new_human.equip_to_slot_or_del(new back_item(new_human), WEAR_BACK)
-/datum/equipment_preset/uscm/pfc/load_rank(mob/living/carbon/human/new_human)
- if(new_human.client)
- if(get_job_playtime(new_human.client, rank) < JOB_PLAYTIME_TIER_1)
- return PAY_SHORT_ME1
- return paygrade
-
/datum/equipment_preset/uscm/pfc/cryo
name = "USCM Cryo Squad Rifleman"
auto_squad_name = SQUAD_MARINE_CRYO
@@ -105,7 +99,7 @@
access = list(ACCESS_MARINE_PREP, ACCESS_MARINE_SMARTPREP)
assignment = JOB_SQUAD_SMARTGUN
rank = JOB_SQUAD_SMARTGUN
- paygrade = PAY_SHORT_ME3
+ paygrades = list(PAY_SHORT_ME3 = JOB_PLAYTIME_TIER_0, PAY_SHORT_ME4 = JOB_PLAYTIME_TIER_1, PAY_SHORT_ME5 = JOB_PLAYTIME_TIER_3)
role_comm_title = "SG"
skills = /datum/skills/smartgunner
@@ -163,7 +157,7 @@
)
assignment = JOB_TANK_CREW
rank = JOB_TANK_CREW
- paygrade = PAY_SHORT_ME4
+ paygrades = list(PAY_SHORT_ME4 = JOB_PLAYTIME_TIER_0)
role_comm_title = "CRMN"
minimum_age = 30
skills = /datum/skills/tank_crew
@@ -224,7 +218,7 @@
)
assignment = JOB_INTEL
rank = JOB_INTEL
- paygrade = PAY_SHORT_MO1
+ paygrades = list(PAY_SHORT_MO1 = JOB_PLAYTIME_TIER_0)
role_comm_title = "IO"
skills = /datum/skills/intel
@@ -281,7 +275,7 @@
access = list(ACCESS_MARINE_PREP, ACCESS_MARINE_SPECPREP)
assignment = JOB_SQUAD_SPECIALIST
rank = JOB_SQUAD_SPECIALIST
- paygrade = PAY_SHORT_ME3
+ paygrades = list(PAY_SHORT_ME3 = JOB_PLAYTIME_TIER_0, PAY_SHORT_ME4 = JOB_PLAYTIME_TIER_1, PAY_SHORT_ME5 = JOB_PLAYTIME_TIER_3)
role_comm_title = "Spc"
skills = /datum/skills/specialist
@@ -340,7 +334,7 @@
access = list(ACCESS_MARINE_PREP, ACCESS_MARINE_MEDPREP, ACCESS_MARINE_MEDBAY)
assignment = JOB_SQUAD_MEDIC
rank = JOB_SQUAD_MEDIC
- paygrade = PAY_SHORT_ME3
+ paygrades = list(PAY_SHORT_ME2 = JOB_PLAYTIME_TIER_0, PAY_SHORT_ME3 = JOB_PLAYTIME_TIER_1, PAY_SHORT_ME4 = JOB_PLAYTIME_TIER_3)
role_comm_title = "HM"
skills = /datum/skills/combat_medic
@@ -374,7 +368,7 @@
access = list(ACCESS_MARINE_PREP, ACCESS_MARINE_TL_PREP)
assignment = JOB_SQUAD_TEAM_LEADER
rank = JOB_SQUAD_TEAM_LEADER
- paygrade = PAY_SHORT_ME4
+ paygrades = list(PAY_SHORT_ME3 = JOB_PLAYTIME_TIER_0, PAY_SHORT_ME4 = JOB_PLAYTIME_TIER_1, PAY_SHORT_ME5 = JOB_PLAYTIME_TIER_3)
role_comm_title = "FTL"
skills = /datum/skills/tl
@@ -404,7 +398,7 @@
access = list(ACCESS_MARINE_PREP, ACCESS_MARINE_ENGPREP, ACCESS_CIVILIAN_ENGINEERING)
assignment = JOB_SQUAD_ENGI
rank = JOB_SQUAD_ENGI
- paygrade = PAY_SHORT_ME3
+ paygrades = list(PAY_SHORT_ME2 = JOB_PLAYTIME_TIER_0, PAY_SHORT_ME3 = JOB_PLAYTIME_TIER_1, PAY_SHORT_ME4 = JOB_PLAYTIME_TIER_3)
role_comm_title = "ComTech"
skills = /datum/skills/combat_engineer
@@ -438,7 +432,7 @@
access = list(ACCESS_MARINE_PREP, ACCESS_MARINE_LEADER, ACCESS_MARINE_DROPSHIP)
assignment = JOB_SQUAD_LEADER
rank = JOB_SQUAD_LEADER
- paygrade = PAY_SHORT_ME5
+ paygrades = list(PAY_SHORT_ME5 = JOB_PLAYTIME_TIER_0, PAY_SHORT_ME6 = JOB_PLAYTIME_TIER_1, PAY_SHORT_ME7 = JOB_PLAYTIME_TIER_3)
role_comm_title = "SL"
minimum_age = 27
skills = /datum/skills/SL
@@ -471,7 +465,7 @@
access = list(ACCESS_MARINE_PREP)
assignment = JOB_SQUAD_MARINE
rank = JOB_SQUAD_MARINE
- paygrade = PAY_SHORT_ME2
+ paygrades = list(PAY_SHORT_ME1 = JOB_PLAYTIME_TIER_0, PAY_SHORT_ME2 = JOB_PLAYTIME_TIER_1, PAY_SHORT_ME3 = JOB_PLAYTIME_TIER_3)
role_comm_title = "RFN"
skills = /datum/skills/pfc/crafty
@@ -482,12 +476,6 @@
/datum/equipment_preset/uscm/private_equipped/load_status(mob/living/carbon/human/new_human)
new_human.nutrition = NUTRITION_NORMAL
-/datum/equipment_preset/uscm/private_equipped/load_rank(mob/living/carbon/human/new_human)
- if(new_human.client)
- if(get_job_playtime(new_human.client, rank) < JOB_PLAYTIME_TIER_1)
- return PAY_SHORT_ME1
- return paygrade
-
/datum/equipment_preset/uscm/private_equipped/load_gear(mob/living/carbon/human/new_human)
new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine(new_human), WEAR_BODY)
new_human.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/marine(new_human), WEAR_HEAD)
@@ -521,7 +509,7 @@
access = list(ACCESS_MARINE_PREP, ACCESS_MARINE_LEADER, ACCESS_MARINE_DROPSHIP)
assignment = JOB_SQUAD_LEADER
rank = JOB_SQUAD_LEADER
- paygrade = PAY_SHORT_ME5
+ paygrades = list(PAY_SHORT_ME5 = JOB_PLAYTIME_TIER_0, PAY_SHORT_ME6 = JOB_PLAYTIME_TIER_1, PAY_SHORT_ME7 = JOB_PLAYTIME_TIER_3)
role_comm_title = "SL"
minimum_age = 27
skills = /datum/skills/SL
@@ -563,7 +551,7 @@
access = list(ACCESS_MARINE_PREP, ACCESS_MARINE_SMARTPREP)
assignment = JOB_SQUAD_SMARTGUN
rank = JOB_SQUAD_SMARTGUN
- paygrade = PAY_SHORT_ME3
+ paygrades = list(PAY_SHORT_ME3 = JOB_PLAYTIME_TIER_0, PAY_SHORT_ME4 = JOB_PLAYTIME_TIER_1, PAY_SHORT_ME5 = JOB_PLAYTIME_TIER_3)
role_comm_title = "SG"
skills = /datum/skills/smartgunner
@@ -602,7 +590,7 @@
access = list(ACCESS_MARINE_PREP, ACCESS_MARINE_ENGPREP, ACCESS_CIVILIAN_ENGINEERING)
assignment = JOB_SQUAD_ENGI
rank = JOB_SQUAD_ENGI
- paygrade = PAY_SHORT_ME3
+ paygrades = list(PAY_SHORT_ME2 = JOB_PLAYTIME_TIER_0, PAY_SHORT_ME3 = JOB_PLAYTIME_TIER_1, PAY_SHORT_ME4 = JOB_PLAYTIME_TIER_3)
role_comm_title = "ComTech"
skills = /datum/skills/combat_engineer
@@ -650,7 +638,7 @@
access = list(ACCESS_MARINE_PREP, ACCESS_MARINE_MEDPREP, ACCESS_MARINE_MEDBAY)
assignment = JOB_SQUAD_MEDIC
rank = JOB_SQUAD_MEDIC
- paygrade = PAY_SHORT_ME3
+ paygrades = list(PAY_SHORT_ME2 = JOB_PLAYTIME_TIER_0, PAY_SHORT_ME3 = JOB_PLAYTIME_TIER_1, PAY_SHORT_ME4 = JOB_PLAYTIME_TIER_3)
role_comm_title = "HM"
skills = /datum/skills/combat_medic
@@ -706,7 +694,7 @@
access = list(ACCESS_MARINE_PREP, ACCESS_MARINE_SPECPREP)
assignment = JOB_SQUAD_SPECIALIST
rank = JOB_SQUAD_SPECIALIST
- paygrade = PAY_SHORT_ME3
+ paygrades = list(PAY_SHORT_ME3 = JOB_PLAYTIME_TIER_0, PAY_SHORT_ME4 = JOB_PLAYTIME_TIER_1, PAY_SHORT_ME5 = JOB_PLAYTIME_TIER_3)
role_comm_title = "Spc"
skills = /datum/skills/specialist
@@ -778,7 +766,7 @@
access = list(ACCESS_MARINE_PREP, ACCESS_MARINE_TL_PREP)
assignment = JOB_SQUAD_TEAM_LEADER
rank = JOB_SQUAD_TEAM_LEADER
- paygrade = PAY_SHORT_ME4
+ paygrades = list(PAY_SHORT_ME3 = JOB_PLAYTIME_TIER_0, PAY_SHORT_ME4 = JOB_PLAYTIME_TIER_1, PAY_SHORT_ME5 = JOB_PLAYTIME_TIER_3)
role_comm_title = "TL"
skills = /datum/skills/tl
@@ -819,7 +807,7 @@
skills = /datum/skills/commando/deathsquad
auto_squad_name = SQUAD_SOF
ert_squad = TRUE
- paygrade = PAY_SHORT_ME6
+ paygrades = list(PAY_SHORT_ME6 = JOB_PLAYTIME_TIER_0, PAY_SHORT_ME7 = JOB_PLAYTIME_TIER_3)
minimap_icon = "private"
@@ -869,12 +857,6 @@
new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/medical/socmed/full, WEAR_L_STORE)
new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/tools/tactical/full, WEAR_R_STORE)
-/datum/equipment_preset/uscm/marsoc/load_rank(mob/living/carbon/human/new_human)
- if(new_human.client)
- if(get_job_playtime(new_human.client, rank) > JOB_PLAYTIME_TIER_2)
- return PAY_SHORT_ME7
- return paygrade
-
//Covert Raiders
/datum/equipment_preset/uscm/marsoc/covert
name = "Marine Raider (!DEATHSQUAD! Covert)"
@@ -883,6 +865,7 @@
new_human.gender = MALE
new_human.change_real_name(new_human, "[pick(GLOB.nato_phonetic_alphabet)]")
new_human.age = rand(20,30)
+
/datum/equipment_preset/uscm/marsoc/covert/load_rank(mob/living/carbon/human/new_human)
return PAY_SHORT_CDNM
@@ -892,7 +875,7 @@
assignment = JOB_MARINE_RAIDER_SL
rank = JOB_MARINE_RAIDER_SL
role_comm_title = "TL."
- paygrade = PAY_SHORT_MO1
+ paygrades = list(PAY_SHORT_MO1 = JOB_PLAYTIME_TIER_0, PAY_SHORT_MO2 = JOB_PLAYTIME_TIER_3)
skills = /datum/skills/commando/deathsquad/leader
minimap_icon = "leader"
@@ -900,11 +883,6 @@
dress_over = list(/obj/item/clothing/suit/storage/jacket/marine/dress/blues/officer)
dress_hat = list(/obj/item/clothing/head/marine/dress_cover/officer)
-/datum/equipment_preset/uscm/marsoc/sl/load_rank(mob/living/carbon/human/new_human)
- if(new_human.client)
- if(get_job_playtime(new_human.client, rank) > JOB_PLAYTIME_TIER_2)
- return PAY_SHORT_MO2
- return paygrade
//Codenamed Team Leader
/datum/equipment_preset/uscm/marsoc/sl/covert
@@ -914,26 +892,22 @@
new_human.gender = MALE
new_human.change_real_name(new_human, "[pick(GLOB.nato_phonetic_alphabet)]")
new_human.age = rand(20,30)
+
/datum/equipment_preset/uscm/marsoc/sl/covert/load_rank(mob/living/carbon/human/new_human)
return PAY_SHORT_CDNM
+
//Officer
/datum/equipment_preset/uscm/marsoc/cmd
name = "Marine Raider Officer (!DEATHSQUAD!)"
assignment = JOB_MARINE_RAIDER_CMD
rank = JOB_MARINE_RAIDER_CMD
role_comm_title = "CMD."
- paygrade = PAY_SHORT_MO3
+ paygrades = list(PAY_SHORT_MO3 = JOB_PLAYTIME_TIER_0, PAY_SHORT_MO4 = JOB_PLAYTIME_TIER_3)
skills = /datum/skills/commando/deathsquad/officer
dress_under = list(/obj/item/clothing/under/marine/dress/blues/senior)
dress_over = list(/obj/item/clothing/suit/storage/jacket/marine/dress/blues/officer)
dress_hat = list(/obj/item/clothing/head/marine/dress_cover/officer)
-/datum/equipment_preset/uscm/marsoc/cmd/load_rank(mob/living/carbon/human/new_human)
- if(new_human.client)
- if(get_job_playtime(new_human.client, rank) > JOB_PLAYTIME_TIER_3)
- return PAY_SHORT_MO4
- return paygrade
-
/datum/equipment_preset/uscm/marsoc/low_threat
name = "Marine Raider"
@@ -981,7 +955,7 @@
assignment = JOB_MARINE_RAIDER_SL
rank = JOB_MARINE_RAIDER_SL
role_comm_title = "TL."
- paygrade = PAY_SHORT_MO1
+ paygrades = list(PAY_SHORT_MO1 = JOB_PLAYTIME_TIER_0, PAY_SHORT_MO2 = JOB_PLAYTIME_TIER_3)
skills = /datum/skills/commando/deathsquad/leader
minimap_icon = "leader"
@@ -989,8 +963,303 @@
dress_over = list(/obj/item/clothing/suit/storage/jacket/marine/dress/blues/officer)
dress_hat = list(/obj/item/clothing/head/marine/dress_cover/officer)
-/datum/equipment_preset/uscm/marsoc/sl/load_rank(mob/living/carbon/human/new_human)
- if(new_human.client)
- if(get_job_playtime(new_human.client, rank) > JOB_PLAYTIME_TIER_2)
- return PAY_SHORT_MO2
- return paygrade
+//############ Solar Devils (PvE Marines) #############
+//## Random Headware/Mask Setup ##//
+/datum/equipment_preset/uscm/proc/spawn_marine_fluff_items(mob/living/carbon/human/new_human)
+ var/obj/item/helmet_accessory = pick(GLOB.allowed_helmet_items)
+ new_human.equip_to_slot_or_del(new helmet_accessory, WEAR_IN_HELMET)
+ if(prob(50))
+ var/obj/item/helmet_accessory_two = pick(GLOB.allowed_helmet_items)
+ new_human.equip_to_slot_or_del(new helmet_accessory_two, WEAR_IN_HELMET)
+ var/list/possible_masks = list(/obj/item/clothing/mask/gas) + subtypesof(/obj/item/clothing/mask/rebreather) + subtypesof(/obj/item/clothing/mask/tornscarf)
+ if(prob(50))
+ var/obj/item/clothing/mask/new_mask = pick(possible_masks)
+ new_human.equip_to_slot_or_del(new new_mask, WEAR_FACE)
+
+//## Rifleman ##//
+/datum/equipment_preset/uscm/rifleman_pve
+ name = "USCM Solar Devils Rifleman"
+ flags = EQUIPMENT_PRESET_EXTRA|EQUIPMENT_PRESET_MARINE
+
+ access = list(ACCESS_MARINE_PREP)
+ assignment = JOB_SQUAD_MARINE
+ rank = JOB_SQUAD_MARINE
+ paygrades = list(PAY_SHORT_ME1 = JOB_PLAYTIME_TIER_0, PAY_SHORT_ME2 = JOB_PLAYTIME_TIER_1, PAY_SHORT_ME3 = JOB_PLAYTIME_TIER_3)
+ role_comm_title = "RFN"
+ skills = /datum/skills/rifleman_pve
+ auto_squad_name = SQUAD_SOLAR
+
+ minimap_icon = "private"
+ dress_under = list(/obj/item/clothing/under/marine/dress/blues)
+ dress_over = list(/obj/item/clothing/suit/storage/jacket/marine/dress/blues)
+
+/datum/equipment_preset/uscm/rifleman_pve/load_status(mob/living/carbon/human/new_human)
+ new_human.nutrition = NUTRITION_MAX
+
+/datum/equipment_preset/uscm/rifleman_pve/load_gear(mob/living/carbon/human/new_human)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine(new_human), WEAR_BODY)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/marine(new_human), WEAR_HEAD)
+ new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/almayer/marine/cryo(new_human), WEAR_L_EAR)
+ new_human.equip_to_slot_or_del(new /obj/item/tool/screwdriver/tactical(new_human), WEAR_R_EAR)
+
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/medium(new_human), WEAR_JACKET)
+ new_human.equip_to_slot_or_del(new /obj/item/device/binoculars/range/designator(new_human), WEAR_IN_JACKET)
+ new_human.equip_to_slot_or_del(new /obj/item/stack/medical/bruise_pack(new_human), WEAR_IN_JACKET)
+ new_human.equip_to_slot_or_del(new /obj/item/stack/medical/splint(new_human), WEAR_IN_JACKET)
+
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/accessory/storage/webbing/five_slots(new_human), WEAR_ACCESSORY)
+
+ new_human.equip_to_slot_or_del(new /obj/item/tool/crowbar/tactical(new_human), WEAR_IN_ACCESSORY)
+ new_human.equip_to_slot_or_del(new /obj/item/tool/wirecutters/tactical(new_human), WEAR_IN_ACCESSORY)
+ new_human.equip_to_slot_or_del(new /obj/item/tool/wrench(new_human), WEAR_IN_ACCESSORY)
+ new_human.equip_to_slot_or_del(new /obj/item/device/multitool(new_human), WEAR_IN_ACCESSORY)
+ new_human.equip_to_slot_or_del(new /obj/item/tool/weldingtool/largetank(new_human), WEAR_IN_ACCESSORY)
+
+ new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/marine/satchel/intel/chestrig(new_human), WEAR_BACK)
+ new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/flare/full(new_human), WEAR_R_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/firstaid/full(new_human), WEAR_L_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/insulated/black(new_human), WEAR_HANDS)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/knife(new_human), WEAR_FEET)
+ new_human.equip_to_slot_or_del(new /obj/item/storage/toolkit/full(new_human), WEAR_IN_BACK)
+ new_human.equip_to_slot_or_del(new /obj/item/storage/box/packet/high_explosive(new_human), WEAR_IN_BACK)
+ new_human.equip_to_slot_or_del(new /obj/item/storage/box/packet/incendiary(new_human), WEAR_IN_BACK)
+ new_human.equip_to_slot_or_del(new /obj/item/device/motiondetector(new_human), WEAR_IN_BACK)
+ new_human.equip_to_slot_or_del(new /obj/item/stack/sheet/metal/large_stack(new_human), WEAR_IN_BACK)
+ new_human.equip_to_slot_or_del(new /obj/item/stack/sheet/plasteel/medium_stack(new_human), WEAR_IN_BACK)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/accessory/patch/devils(new_human), WEAR_IN_BACK)
+
+ new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/rifle/m41aMK1(new_human), WEAR_J_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/storage/belt/marine(new_human), WEAR_WAIST)
+ new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/m41aMK1(new_human.back), WEAR_IN_BELT)
+ new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/m41aMK1(new_human.back), WEAR_IN_BELT)
+ new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/m41aMK1(new_human.back), WEAR_IN_BELT)
+ new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/m41aMK1/ap(new_human.back), WEAR_IN_BELT)
+ new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/m41aMK1/ap(new_human.back), WEAR_IN_BELT)
+ spawn_marine_fluff_items(new_human)
+
+//## Corpsman ##//
+/datum/equipment_preset/uscm/medic_pve
+ name = "USCM Solar Devils Platoon Corpsman"
+ flags = EQUIPMENT_PRESET_EXTRA|EQUIPMENT_PRESET_MARINE
+
+ access = list(ACCESS_MARINE_PREP, ACCESS_MARINE_MEDPREP, ACCESS_MARINE_MEDBAY)
+ assignment = JOB_PLT_MED
+ rank = JOB_SQUAD_MEDIC
+ paygrades = list(PAY_SHORT_ME2 = JOB_PLAYTIME_TIER_0, PAY_SHORT_ME3 = JOB_PLAYTIME_TIER_1, PAY_SHORT_ME4 = JOB_PLAYTIME_TIER_3)
+ role_comm_title = "HM"
+ skills = /datum/skills/combat_medic_pve
+ auto_squad_name = SQUAD_SOLAR
+
+ minimap_icon = "medic"
+
+ utility_under = list(/obj/item/clothing/under/marine/medic)
+ dress_under = list(/obj/item/clothing/under/marine/dress/blues)
+ dress_over = list(/obj/item/clothing/suit/storage/jacket/marine/dress/blues)
+
+/datum/equipment_preset/uscm/medic_pve/load_status(mob/living/carbon/human/new_human)
+ new_human.nutrition = NUTRITION_NORMAL
+
+/datum/equipment_preset/uscm/medic_pve/load_gear(mob/living/carbon/human/new_human)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine(new_human), WEAR_BODY)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/marine/medic(new_human), WEAR_HEAD)
+ new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/almayer/marine/cryo/med(new_human), WEAR_L_EAR)
+ new_human.equip_to_slot_or_del(new /obj/item/tool/screwdriver/tactical(new_human), WEAR_R_EAR)
+
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/medium(new_human), WEAR_JACKET)
+ new_human.equip_to_slot_or_del(new /obj/item/device/binoculars/range/designator(new_human), WEAR_IN_JACKET)
+ new_human.equip_to_slot_or_del(new /obj/item/stack/medical/bruise_pack(new_human), WEAR_IN_JACKET)
+ new_human.equip_to_slot_or_del(new /obj/item/stack/medical/splint(new_human), WEAR_IN_JACKET)
+
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/accessory/storage/webbing/five_slots(new_human), WEAR_ACCESSORY)
+
+ new_human.equip_to_slot_or_del(new /obj/item/tool/crowbar/tactical(new_human), WEAR_IN_ACCESSORY)
+ new_human.equip_to_slot_or_del(new /obj/item/tool/wirecutters/tactical(new_human), WEAR_IN_ACCESSORY)
+ new_human.equip_to_slot_or_del(new /obj/item/tool/wrench(new_human), WEAR_IN_ACCESSORY)
+ new_human.equip_to_slot_or_del(new /obj/item/device/multitool(new_human), WEAR_IN_ACCESSORY)
+ new_human.equip_to_slot_or_del(new /obj/item/tool/weldingtool/largetank(new_human), WEAR_IN_ACCESSORY)
+
+ new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/marine/satchel/intel/chestrig(new_human), WEAR_BACK)
+ new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/flare/full(new_human), WEAR_R_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/magazine/large(new_human), WEAR_L_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/m41aMK1(new_human.back), WEAR_IN_L_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/m41aMK1(new_human.back), WEAR_IN_L_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/m41aMK1/ap(new_human.back), WEAR_IN_L_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/m41aMK1/ap(new_human.back), WEAR_IN_L_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/insulated/black(new_human), WEAR_HANDS)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/knife(new_human), WEAR_FEET)
+
+ new_human.equip_to_slot_or_del(new /obj/item/storage/firstaid/regular(new_human), WEAR_IN_BACK)
+ new_human.equip_to_slot_or_del(new /obj/item/storage/firstaid/adv(new_human), WEAR_IN_BACK)
+ new_human.equip_to_slot_or_del(new /obj/item/storage/firstaid/adv(new_human), WEAR_IN_BACK)
+ new_human.equip_to_slot_or_del(new /obj/item/storage/firstaid/surgical(new_human), WEAR_IN_BACK)
+ new_human.equip_to_slot_or_del(new /obj/item/tool/surgery/synthgraft, WEAR_IN_BACK)
+ new_human.equip_to_slot_or_del(new /obj/item/device/defibrillator(new_human), WEAR_IN_BACK)
+ new_human.equip_to_slot_or_del(new /obj/item/device/healthanalyzer(new_human), WEAR_IN_BACK)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/accessory/patch/devils(new_human), WEAR_IN_BACK)
+
+ new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/rifle/m41aMK1(new_human), WEAR_J_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/storage/belt/medical/lifesaver/full(new_human), WEAR_WAIST)
+ spawn_marine_fluff_items(new_human)
+
+//## Smartgunner ##//
+/datum/equipment_preset/uscm/sg_pve
+ name = "USCM Solar Devils Smartgunner"
+ flags = EQUIPMENT_PRESET_EXTRA|EQUIPMENT_PRESET_MARINE
+
+ access = list(ACCESS_MARINE_PREP, ACCESS_MARINE_SMARTPREP)
+ assignment = JOB_SQUAD_SMARTGUN
+ rank = JOB_SQUAD_SMARTGUN
+ paygrades = list(PAY_SHORT_ME3 = JOB_PLAYTIME_TIER_0, PAY_SHORT_ME4 = JOB_PLAYTIME_TIER_1, PAY_SHORT_ME5 = JOB_PLAYTIME_TIER_3)
+ role_comm_title = "SG"
+ skills = /datum/skills/smartgunner_pve
+ auto_squad_name = SQUAD_SOLAR
+
+ minimap_icon = "smartgunner"
+ dress_under = list(/obj/item/clothing/under/marine/dress/blues)
+ dress_over = list(/obj/item/clothing/suit/storage/jacket/marine/dress/blues)
+
+/datum/equipment_preset/uscm/sg_pve/load_gear(mob/living/carbon/human/new_human)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine(new_human), WEAR_BODY)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/marine(new_human), WEAR_HEAD)
+ new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/almayer/marine/cryo(new_human), WEAR_L_EAR)
+ new_human.equip_to_slot_or_del(new /obj/item/tool/screwdriver/tactical(new_human), WEAR_R_EAR)
+
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/smartgunner(new_human), WEAR_JACKET)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/accessory/patch/devils(new_human), WEAR_IN_JACKET)
+ new_human.equip_to_slot_or_del(new /obj/item/device/binoculars/range/designator(new_human), WEAR_IN_JACKET)
+
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/accessory/storage/webbing/five_slots(new_human), WEAR_ACCESSORY)
+
+ new_human.equip_to_slot_or_del(new /obj/item/tool/crowbar/tactical(new_human), WEAR_IN_ACCESSORY)
+ new_human.equip_to_slot_or_del(new /obj/item/tool/wirecutters/tactical(new_human), WEAR_IN_ACCESSORY)
+ new_human.equip_to_slot_or_del(new /obj/item/tool/wrench(new_human), WEAR_IN_ACCESSORY)
+ new_human.equip_to_slot_or_del(new /obj/item/device/multitool(new_human), WEAR_IN_ACCESSORY)
+ new_human.equip_to_slot_or_del(new /obj/item/tool/weldingtool/simple(new_human), WEAR_IN_ACCESSORY)
+
+ new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/smartgun(new_human), WEAR_J_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/smartgunner/full(new_human), WEAR_WAIST)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/knife(new_human), WEAR_FEET)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/insulated/black(new_human), WEAR_HANDS)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/night/m56_goggles(new_human), WEAR_EYES)
+ new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/firstaid/full(new_human), WEAR_L_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/firstaid/full/alternate(new_human), WEAR_R_STORE)
+ spawn_marine_fluff_items(new_human)
+
+/datum/equipment_preset/uscm/sg_pve/load_status(mob/living/carbon/human/new_human)
+
+//## Team Leader ##//
+/datum/equipment_preset/uscm/tl_pve
+ name = "USCM Solar Devils Team Leader"
+ flags = EQUIPMENT_PRESET_EXTRA|EQUIPMENT_PRESET_MARINE
+
+ access = list(ACCESS_MARINE_PREP, ACCESS_MARINE_TL_PREP, ACCESS_MARINE_DROPSHIP)
+ assignment = JOB_SQUAD_TEAM_LEADER
+ rank = JOB_SQUAD_TEAM_LEADER
+ paygrades = list(PAY_SHORT_ME3 = JOB_PLAYTIME_TIER_0, PAY_SHORT_ME4 = JOB_PLAYTIME_TIER_1, PAY_SHORT_ME5 = JOB_PLAYTIME_TIER_3)
+ role_comm_title = "FTL"
+ skills = /datum/skills/tl_pve
+ auto_squad_name = SQUAD_SOLAR
+
+ minimap_icon = "tl"
+
+/datum/equipment_preset/uscm/tl_pve/load_status(mob/living/carbon/human/new_human)
+ new_human.nutrition = NUTRITION_NORMAL
+
+/datum/equipment_preset/uscm/tl_pve/load_gear(mob/living/carbon/human/new_human)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine(new_human), WEAR_BODY)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/marine/leader(new_human), WEAR_HEAD)
+ new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/almayer/marine/cryo/tl(new_human), WEAR_L_EAR)
+ new_human.equip_to_slot_or_del(new /obj/item/tool/screwdriver/tactical(new_human), WEAR_R_EAR)
+
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/medium(new_human), WEAR_JACKET)
+ new_human.equip_to_slot_or_del(new /obj/item/device/binoculars/range/designator(new_human), WEAR_IN_JACKET)
+ new_human.equip_to_slot_or_del(new /obj/item/stack/medical/bruise_pack(new_human), WEAR_IN_JACKET)
+ new_human.equip_to_slot_or_del(new /obj/item/stack/medical/splint(new_human), WEAR_IN_JACKET)
+
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/accessory/storage/webbing/five_slots(new_human), WEAR_ACCESSORY)
+
+ new_human.equip_to_slot_or_del(new /obj/item/tool/crowbar/tactical(new_human), WEAR_IN_ACCESSORY)
+ new_human.equip_to_slot_or_del(new /obj/item/tool/wirecutters/tactical(new_human), WEAR_IN_ACCESSORY)
+ new_human.equip_to_slot_or_del(new /obj/item/tool/wrench(new_human), WEAR_IN_ACCESSORY)
+ new_human.equip_to_slot_or_del(new /obj/item/device/multitool(new_human), WEAR_IN_ACCESSORY)
+ new_human.equip_to_slot_or_del(new /obj/item/tool/weldingtool/largetank(new_human), WEAR_IN_ACCESSORY)
+
+ new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/marine/satchel/rto(new_human), WEAR_BACK)
+ new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/flare/full(new_human), WEAR_R_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/firstaid/full(new_human), WEAR_L_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/insulated/black(new_human), WEAR_HANDS)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/knife(new_human), WEAR_FEET)
+ new_human.equip_to_slot_or_del(new /obj/item/storage/toolkit/full(new_human), WEAR_IN_BACK)
+ new_human.equip_to_slot_or_del(new /obj/item/storage/box/packet/high_explosive(new_human), WEAR_IN_BACK)
+ new_human.equip_to_slot_or_del(new /obj/item/device/motiondetector(new_human), WEAR_IN_BACK)
+ new_human.equip_to_slot_or_del(new /obj/item/defenses/handheld/sentry(new_human), WEAR_IN_BACK)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/accessory/patch/devils(new_human), WEAR_IN_BACK)
+
+ new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/rifle/m41aMK1(new_human), WEAR_J_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/storage/belt/marine(new_human), WEAR_WAIST)
+ new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/m41aMK1(new_human.back), WEAR_IN_BELT)
+ new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/m41aMK1(new_human.back), WEAR_IN_BELT)
+ new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/m41aMK1(new_human.back), WEAR_IN_BELT)
+ new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/m41aMK1/ap(new_human.back), WEAR_IN_BELT)
+ new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/m41aMK1/ap(new_human.back), WEAR_IN_BELT)
+ spawn_marine_fluff_items(new_human)
+
+//## Squad Leader ##//
+/datum/equipment_preset/uscm/sl_pve
+ name = "USCM Solar Devils Platoon Leader"
+ flags = EQUIPMENT_PRESET_EXTRA|EQUIPMENT_PRESET_MARINE
+
+ access = list(ACCESS_MARINE_PREP, ACCESS_MARINE_LEADER, ACCESS_MARINE_DROPSHIP)
+ assignment = JOB_PLT_SL
+ rank = JOB_SQUAD_LEADER
+ paygrades = list(PAY_SHORT_ME5 = JOB_PLAYTIME_TIER_0, PAY_SHORT_ME6 = JOB_PLAYTIME_TIER_1, PAY_SHORT_ME7 = JOB_PLAYTIME_TIER_3)
+ role_comm_title = "SL"
+ skills = /datum/skills/sl_pve
+ auto_squad_name = SQUAD_SOLAR
+
+ minimap_icon = "sl"
+
+/datum/equipment_preset/uscm/sl_pve/load_status(mob/living/carbon/human/new_human)
+ new_human.nutrition = NUTRITION_NORMAL
+
+/datum/equipment_preset/uscm/sl_pve/load_gear(mob/living/carbon/human/new_human)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine(new_human), WEAR_BODY)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/marine/leader(new_human), WEAR_HEAD)
+ new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/almayer/marine/cryo/tl(new_human), WEAR_L_EAR)
+ new_human.equip_to_slot_or_del(new /obj/item/tool/screwdriver/tactical(new_human), WEAR_R_EAR)
+
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/medium/leader(new_human), WEAR_JACKET)
+ new_human.equip_to_slot_or_del(new /obj/item/device/binoculars/range/designator(new_human), WEAR_IN_JACKET)
+ new_human.equip_to_slot_or_del(new /obj/item/stack/medical/bruise_pack(new_human), WEAR_IN_JACKET)
+ new_human.equip_to_slot_or_del(new /obj/item/stack/medical/splint(new_human), WEAR_IN_JACKET)
+
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/accessory/storage/webbing/five_slots(new_human), WEAR_ACCESSORY)
+
+ new_human.equip_to_slot_or_del(new /obj/item/tool/crowbar/tactical(new_human), WEAR_IN_ACCESSORY)
+ new_human.equip_to_slot_or_del(new /obj/item/tool/wirecutters/tactical(new_human), WEAR_IN_ACCESSORY)
+ new_human.equip_to_slot_or_del(new /obj/item/tool/wrench(new_human), WEAR_IN_ACCESSORY)
+ new_human.equip_to_slot_or_del(new /obj/item/device/multitool(new_human), WEAR_IN_ACCESSORY)
+ new_human.equip_to_slot_or_del(new /obj/item/tool/weldingtool/largetank(new_human), WEAR_IN_ACCESSORY)
+
+ new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/marine/satchel/intel/chestrig(new_human), WEAR_BACK)
+ new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/flare/full(new_human), WEAR_R_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/firstaid/full(new_human), WEAR_L_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/insulated/black(new_human), WEAR_HANDS)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/knife(new_human), WEAR_FEET)
+ new_human.equip_to_slot_or_del(new /obj/item/storage/toolkit/full(new_human), WEAR_IN_BACK)
+ new_human.equip_to_slot_or_del(new /obj/item/storage/firstaid/regular(new_human), WEAR_IN_BACK)
+ new_human.equip_to_slot_or_del(new /obj/item/storage/firstaid/adv(new_human), WEAR_IN_BACK)
+ new_human.equip_to_slot_or_del(new /obj/item/storage/firstaid/adv(new_human), WEAR_IN_BACK)
+ new_human.equip_to_slot_or_del(new /obj/item/storage/firstaid/surgical(new_human), WEAR_IN_BACK)
+ new_human.equip_to_slot_or_del(new /obj/item/device/motiondetector(new_human), WEAR_IN_BACK)
+ new_human.equip_to_slot_or_del(new /obj/item/stack/sheet/metal/large_stack(new_human), WEAR_IN_BACK)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/accessory/patch/devils(new_human), WEAR_IN_BACK)
+
+ new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/rifle/m41aMK1(new_human), WEAR_J_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/storage/belt/marine(new_human), WEAR_WAIST)
+ new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/m41aMK1(new_human.back), WEAR_IN_BELT)
+ new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/m41aMK1(new_human.back), WEAR_IN_BELT)
+ new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/m41aMK1(new_human.back), WEAR_IN_BELT)
+ new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/m41aMK1/ap(new_human.back), WEAR_IN_BELT)
+ new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/m41aMK1/ap(new_human.back), WEAR_IN_BELT)
+ spawn_marine_fluff_items(new_human)
diff --git a/code/modules/gear_presets/uscm_dress.dm b/code/modules/gear_presets/uscm_dress.dm
index 080ed18d7c40..0185b11816e5 100644
--- a/code/modules/gear_presets/uscm_dress.dm
+++ b/code/modules/gear_presets/uscm_dress.dm
@@ -5,7 +5,7 @@
rank = JOB_MARINE
access = list(ACCESS_MARINE_PREP)
minimum_age = 18
- paygrade = PAY_SHORT_ME2
+ paygrades = list(PAY_SHORT_ME2 = JOB_PLAYTIME_TIER_0)
role_comm_title = "Mar"
skills = /datum/skills/pfc
@@ -25,13 +25,13 @@
/datum/equipment_preset/uscm_event/dress/lcpl
name = "Dress Blues - (E-3) Lance Corporal"
- paygrade = PAY_SHORT_ME3
+ paygrades = list(PAY_SHORT_ME3 = JOB_PLAYTIME_TIER_0)
//NCOs/SNCOs//
/datum/equipment_preset/uscm_event/dress/nco
name = "Dress Blues - (E-4) Corporal"
- paygrade = PAY_SHORT_ME4
+ paygrades = list(PAY_SHORT_ME4 = JOB_PLAYTIME_TIER_0)
skills = /datum/skills/SL
dress_under = list(/obj/item/clothing/under/marine/dress/blues/senior)
@@ -44,11 +44,11 @@
/datum/equipment_preset/uscm_event/dress/nco/sgt
name = "Dress Blues - (E-5) Sergeant"
- paygrade = PAY_SHORT_ME5
+ paygrades = list(PAY_SHORT_ME5 = JOB_PLAYTIME_TIER_0)
/datum/equipment_preset/uscm_event/dress/nco/snco
name = "Dress Blues - (E-6) Staff Sergeant"
- paygrade = PAY_SHORT_ME6
+ paygrades = list(PAY_SHORT_ME6 = JOB_PLAYTIME_TIER_0)
skills = /datum/skills/SEA
access = list(ACCESS_MARINE_COMMAND, ACCESS_MARINE_DROPSHIP)
@@ -58,29 +58,29 @@
/datum/equipment_preset/uscm_event/dress/nco/snco/gysgt
name = "Dress Blues - (E-7) Gunnery Sergeant"
- paygrade = PAY_SHORT_ME7
+ paygrades = list(PAY_SHORT_ME7 = JOB_PLAYTIME_TIER_0)
/datum/equipment_preset/uscm_event/dress/nco/snco/msgt
name = "Dress Blues - (E-8) Master Sergeant"
- paygrade = PAY_SHORT_ME8
+ paygrades = list(PAY_SHORT_ME8 = JOB_PLAYTIME_TIER_0)
/datum/equipment_preset/uscm_event/dress/nco/snco/firstsgt
name = "Dress Blues - (E-8E) First Sergeant"
- paygrade = PAY_SHORT_ME8E
+ paygrades = list(PAY_SHORT_ME8E = JOB_PLAYTIME_TIER_0)
/datum/equipment_preset/uscm_event/dress/nco/snco/mgysgt
name = "Dress Blues - (E-9) Master Gunnery Sergeant"
- paygrade = PAY_SHORT_ME9
+ paygrades = list(PAY_SHORT_ME9 = JOB_PLAYTIME_TIER_0)
/datum/equipment_preset/uscm_event/dress/nco/snco/sgtmaj
name = "Dress Blues - (E-9E) Sergeant Major"
- paygrade = PAY_SHORT_ME9E
+ paygrades = list(PAY_SHORT_ME9E = JOB_PLAYTIME_TIER_0)
//FIELD OFFICERS//
/datum/equipment_preset/uscm_event/dress/officer
name = "Dress Blues - (O-1) 2nd Lieutenant"
- paygrade = PAY_SHORT_MO1
+ paygrades = list(PAY_SHORT_MO1 = JOB_PLAYTIME_TIER_0)
idtype = /obj/item/card/id/silver
skills = /datum/skills/SO
access = list(ACCESS_MARINE_COMMAND, ACCESS_MARINE_DROPSHIP, ACCESS_MARINE_DATABASE, ACCESS_MARINE_MEDBAY)
@@ -100,11 +100,11 @@
/datum/equipment_preset/uscm_event/dress/officer/firstlt
name = "Dress Blues - (O-2) 1st Lieutenant"
- paygrade = PAY_SHORT_MO2
+ paygrades = list(PAY_SHORT_MO2 = JOB_PLAYTIME_TIER_0)
/datum/equipment_preset/uscm_event/dress/officer/capt
name = "Dress Blues - (O-3) Captain"
- paygrade = PAY_SHORT_MO3
+ paygrades = list(PAY_SHORT_MO3 = JOB_PLAYTIME_TIER_0)
idtype = /obj/item/card/id/gold
skills = /datum/skills/XO
@@ -115,7 +115,7 @@
/datum/equipment_preset/uscm_event/dress/officer/co
name = "Dress Blues - (O-4) Major"
- paygrade = PAY_SHORT_MO4
+ paygrades = list(PAY_SHORT_MO4 = JOB_PLAYTIME_TIER_0)
idtype = /obj/item/card/id/gold
skills = /datum/skills/commander
@@ -125,19 +125,19 @@
/datum/equipment_preset/uscm_event/dress/officer/co/ltcol
name = "Dress Blues - (O-5) Lieutenant Colonel"
- paygrade = PAY_SHORT_MO5
+ paygrades = list(PAY_SHORT_MO5 = JOB_PLAYTIME_TIER_0)
idtype = /obj/item/card/id/gold/council
/datum/equipment_preset/uscm_event/dress/officer/co/col
name = "Dress Blues - (O-6) Colonel"
- paygrade = PAY_SHORT_MO6
+ paygrades = list(PAY_SHORT_MO6 = JOB_PLAYTIME_TIER_0)
idtype = /obj/item/card/id/general
//GENERAL OFFICERS//
/datum/equipment_preset/uscm_event/dress/officer/general
name = "Dress Blues - (O-8) Major General"
- paygrade = PAY_SHORT_MO8
+ paygrades = list(PAY_SHORT_MO8 = JOB_PLAYTIME_TIER_0)
idtype = /obj/item/card/id/general
skills = /datum/skills/general
@@ -155,8 +155,8 @@
/datum/equipment_preset/uscm_event/dress/officer/general/ltgen
name = "Dress Blues - (O-9) Lieutenant General"
- paygrade = PAY_SHORT_MO9
+ paygrades = list(PAY_SHORT_MO9 = JOB_PLAYTIME_TIER_0)
/datum/equipment_preset/uscm_event/dress/officer/general/gen
name = "Dress Blues - (O-10) General"
- paygrade = PAY_SHORT_MO10
+ paygrades = list(PAY_SHORT_MO10 = JOB_PLAYTIME_TIER_0)
diff --git a/code/modules/gear_presets/uscm_event.dm b/code/modules/gear_presets/uscm_event.dm
index 1a03dc3f6b22..9ef15ff955ae 100644
--- a/code/modules/gear_presets/uscm_event.dm
+++ b/code/modules/gear_presets/uscm_event.dm
@@ -16,7 +16,7 @@
access = list(ACCESS_MARINE_MEDBAY, ACCESS_MARINE_CHEMISTRY, ACCESS_MARINE_MORGUE)
assignment = JOB_COLONEL
rank = JOB_COLONEL
- paygrade = PAY_SHORT_MO6
+ paygrades = list(PAY_SHORT_MO6 = JOB_PLAYTIME_TIER_0)
role_comm_title = "COL"
minimum_age = 40
skills = /datum/skills/general
@@ -61,7 +61,7 @@
access = list(ACCESS_MARINE_MEDBAY, ACCESS_MARINE_CHEMISTRY, ACCESS_MARINE_MORGUE)
assignment = JOB_GENERAL
rank = JOB_GENERAL
- paygrade = PAY_SHORT_MO7
+ paygrades = list(PAY_SHORT_MO7 = JOB_PLAYTIME_TIER_0)
role_comm_title = "GEN"
minimum_age = 50
skills = /datum/skills/general
@@ -106,26 +106,26 @@
/datum/equipment_preset/uscm_event/general/o8
name = "USCM O-8 - Major General (High Command)"
- paygrade = PAY_SHORT_MO8
+ paygrades = list(PAY_SHORT_MO8 = JOB_PLAYTIME_TIER_0)
/datum/equipment_preset/uscm_event/general/o9
name = "USCM O-9 - Lieutenant General (High Command)"
- paygrade = PAY_SHORT_MO9
+ paygrades = list(PAY_SHORT_MO9 = JOB_PLAYTIME_TIER_0)
/datum/equipment_preset/uscm_event/general/o10
name = "USCM O-10 - General (High Command)"
- paygrade = PAY_SHORT_MO10
+ paygrades = list(PAY_SHORT_MO10 = JOB_PLAYTIME_TIER_0)
/datum/equipment_preset/uscm_event/general/o10c
name = "USCM O-10C - Assistant Commandant of the Marine Corps (High Command)"
- paygrade = PAY_SHORT_MO10C
+ paygrades = list(PAY_SHORT_MO10C = JOB_PLAYTIME_TIER_0)
assignment = JOB_ACMC
rank = JOB_ACMC
role_comm_title = "ACMC"
/datum/equipment_preset/uscm_event/general/o10s
name = "USCM O-10S - Commandant of the Marine Corps (High Command)"
- paygrade = PAY_SHORT_MO10S
+ paygrades = list(PAY_SHORT_MO10S = JOB_PLAYTIME_TIER_0)
assignment = JOB_CMC
rank = JOB_CMC
role_comm_title = "CMC"
@@ -145,7 +145,7 @@
)
assignment = JOB_ORDNANCE_TECH
rank = "UPP"
- paygrade = PAY_SHORT_ME2
+ paygrades = list(PAY_SHORT_ME1 = JOB_PLAYTIME_TIER_0, PAY_SHORT_ME2 = JOB_PLAYTIME_TIER_1, PAY_SHORT_ME3 = JOB_PLAYTIME_TIER_3)
role_comm_title = "OT"
skills = /datum/skills/spy
@@ -200,7 +200,7 @@
assignment = JOB_PROVOST_ENFORCER
rank = "Provost Enforcer"
- paygrade = PAY_SHORT_CPO
+ paygrades = list(PAY_SHORT_CPO = JOB_PLAYTIME_TIER_0)
role_comm_title = "PvE"
flags = EQUIPMENT_PRESET_EXTRA
@@ -246,7 +246,7 @@
assignment = JOB_PROVOST_TML
rank = "Provost Team Leader"
- paygrade = PAY_SHORT_CSPO
+ paygrades = list(PAY_SHORT_CSPO = JOB_PLAYTIME_TIER_0)
role_comm_title = "PvTML"
flags = EQUIPMENT_PRESET_EXTRA
@@ -292,7 +292,7 @@
assignment = JOB_PROVOST_INSPECTOR
rank = "Provost Inspector"
- paygrade = PAY_SHORT_PVI
+ paygrades = list(PAY_SHORT_PVI = JOB_PLAYTIME_TIER_0)
role_comm_title = "PvI"
flags = EQUIPMENT_PRESET_EXTRA
@@ -323,6 +323,47 @@
new_human.equip_to_slot_or_del(new /obj/item/device/radio/listening_bug/radio_linked/hc/pvst(new_human), WEAR_IN_R_STORE)
new_human.equip_to_slot_or_del(new /obj/item/device/radio/listening_bug/radio_linked/hc/pvst(new_human), WEAR_IN_R_STORE)
new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/MP/provost/light/flexi(new_human.back), WEAR_IN_BACK)
+ new_human.equip_to_slot_or_del(new /obj/item/handheld_distress_beacon/provost(new_human.back), WEAR_IN_BACK)
+
+ new_human.equip_to_slot_or_del(new /obj/item/device/flash(new_human), WEAR_IN_JACKET)
+ new_human.equip_to_slot_or_del(new /obj/item/restraint/handcuffs(new_human), WEAR_IN_JACKET)
+
+/datum/equipment_preset/uscm_event/provost/inspector/chief
+ name = "Provost Chief Inspector"
+
+ assignment = JOB_PROVOST_CINSPECTOR
+ rank = JOB_PROVOST_CINSPECTOR
+ paygrades = list(PAY_SHORT_PVCI = JOB_PLAYTIME_TIER_0)
+ role_comm_title = "PvCI"
+ flags = EQUIPMENT_PRESET_EXTRA
+
+ dress_under = list(/obj/item/clothing/under/marine/dress/blues/senior)
+ dress_over = list(/obj/item/clothing/suit/storage/jacket/marine/dress/blues/officer)
+ dress_hat = list(/obj/item/clothing/head/marine/dress_cover/officer)
+
+/datum/equipment_preset/uscm_event/provost/inspector/chief/load_gear(mob/living/carbon/human/new_human)
+ var/back_item = /obj/item/storage/backpack/satchel/sec
+ if (new_human.client && new_human.client.prefs && (new_human.client.prefs.backbag == 1))
+ back_item = /obj/item/storage/backpack/security
+
+ new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/almayer/provost(new_human), WEAR_L_EAR)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/mp/provost/chief(new_human), WEAR_BODY)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/knife(new_human), WEAR_FEET)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/black(new_human), WEAR_HANDS)
+ new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/m4a3/mod88(new_human), WEAR_WAIST)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/jacket/marine/provost/chief(new_human), WEAR_JACKET)
+ if(new_human.disabilities & NEARSIGHTED)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses/sechud/prescription(new_human), WEAR_EYES)
+ else
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses/sechud(new_human), WEAR_EYES)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/head/beret/marine/mp/provost/chief(new_human), WEAR_HEAD)
+ new_human.equip_to_slot_or_del(new back_item(new_human), WEAR_BACK)
+ new_human.equip_to_slot_or_del(new /obj/item/device/taperecorder(new_human), WEAR_L_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/general/large(new_human), WEAR_R_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/device/radio/listening_bug/radio_linked/hc/pvst(new_human), WEAR_IN_R_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/device/radio/listening_bug/radio_linked/hc/pvst(new_human), WEAR_IN_R_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/device/radio/listening_bug/radio_linked/hc/pvst(new_human), WEAR_IN_R_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/MP/provost/light/flexi(new_human.back), WEAR_IN_BACK)
new_human.equip_to_slot_or_del(new /obj/item/device/flash(new_human), WEAR_IN_JACKET)
new_human.equip_to_slot_or_del(new /obj/item/restraint/handcuffs(new_human), WEAR_IN_JACKET)
@@ -332,18 +373,29 @@
assignment = JOB_PROVOST_ADVISOR
rank = "Provost Advisor"
- paygrade = PAY_SHORT_CSPO
+ paygrades = list(PAY_SHORT_CSPO = JOB_PLAYTIME_TIER_0)
role_comm_title = "PvA"
flags = EQUIPMENT_PRESET_EXTRA
+/datum/equipment_preset/uscm_event/provost/marshal/deputy
+ name = "Provost Deputy Marshal (MO6)"
+ minimum_age = 45
+ skills = /datum/skills/general
+
+ assignment = JOB_PROVOST_DMARSHAL
+ rank = JOB_PROVOST_DMARSHAL
+ paygrades = list(PAY_SHORT_PVDM = JOB_PLAYTIME_TIER_0)
+ role_comm_title = PAY_SHORT_PVDM
+ flags = EQUIPMENT_PRESET_EXTRA
+
/datum/equipment_preset/uscm_event/provost/marshal
- name = "Provost Marshal (MO6)"
+ name = "Provost Marshal (MO7)"
minimum_age = 45
skills = /datum/skills/general
assignment = JOB_PROVOST_MARSHAL
rank = "Provost Marshal"
- paygrade = PAY_SHORT_PVM
+ paygrades = list(PAY_SHORT_PVM = JOB_PLAYTIME_TIER_0)
role_comm_title = PAY_SHORT_PVM
flags = EQUIPMENT_PRESET_EXTRA
@@ -372,14 +424,15 @@
new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/magazine/pistol/pmc_mateba(new_human), WEAR_R_STORE)
new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/MP/provost/marshal(new_human.back), WEAR_IN_BACK)
new_human.equip_to_slot_or_del(new /obj/item/device/cotablet(new_human.back), WEAR_IN_BACK)
+ new_human.equip_to_slot_or_del(new /obj/item/handheld_distress_beacon/provost(new_human.back), WEAR_IN_BACK)
/datum/equipment_preset/uscm_event/provost/marshal/sector
- name = "Provost Sector Marshal (MO7)"
+ name = "Provost Sector Marshal (MO9)"
minimum_age = 50
assignment = JOB_PROVOST_SMARSHAL
rank = "Provost Sector Marshal"
- paygrade = PAY_SHORT_PVSM
+ paygrades = list(PAY_SHORT_PVSM = JOB_PLAYTIME_TIER_0)
role_comm_title = PAY_SHORT_PVSM
/datum/equipment_preset/uscm_event/provost/marshal/chief
@@ -388,7 +441,7 @@
assignment = JOB_PROVOST_CMARSHAL
rank = "Provost Chief Marshal"
- paygrade = PAY_SHORT_PVCM
+ paygrades = list(PAY_SHORT_PVCM = JOB_PLAYTIME_TIER_0)
role_comm_title = PAY_SHORT_PVCM
/*****************************************************************************************************/
@@ -410,7 +463,7 @@
assignment = JOB_TIS_IO
rank = "UAAC-TIS Intelligence Officer"
- paygrade = PAY_SHORT_NO2
+ paygrades = list(PAY_SHORT_NO2 = JOB_PLAYTIME_TIER_0)
role_comm_title = "TIS-IO"
flags = EQUIPMENT_PRESET_EXTRA
@@ -437,7 +490,7 @@
assignment = JOB_TIS_SA
rank = "UAAC-TIS Special Agent"
- paygrade = PAY_SHORT_NO5
+ paygrades = list(PAY_SHORT_NO5 = JOB_PLAYTIME_TIER_0)
role_comm_title = "TIS-SA"
flags = EQUIPMENT_PRESET_EXTRA
diff --git a/code/modules/gear_presets/uscm_forecon.dm b/code/modules/gear_presets/uscm_forecon.dm
index dfe4e7dd8d5c..3c1db85291ea 100644
--- a/code/modules/gear_presets/uscm_forecon.dm
+++ b/code/modules/gear_presets/uscm_forecon.dm
@@ -1,7 +1,7 @@
/datum/equipment_preset/uscm/forecon
assignment = JOB_SQUAD_MARINE
rank = JOB_SQUAD_MARINE
- paygrade = PAY_SHORT_ME5
+ paygrades = list(PAY_SHORT_ME5 = JOB_PLAYTIME_TIER_0)
idtype = /obj/item/card/id/dogtag
role_comm_title = "FORECON"
rank = JOB_MARINE
@@ -20,31 +20,6 @@
dress_over = list(/obj/item/clothing/suit/storage/jacket/marine/dress/blues/nco)
dress_hat = list(/obj/item/clothing/head/marine/dress_cover)
-/datum/equipment_preset/uscm/forecon/load_gear(mob/living/carbon/human/new_human)
- var/obj/item/clothing/under/marine/reconnaissance/uniform = new()
- var/obj/item/clothing/accessory/storage/droppouch/pouch = new()
- var/obj/item/clothing/accessory/ranks/marine/e5/pin = new()
- var/obj/item/clothing/accessory/patch/patch_uscm = new()
- var/obj/item/clothing/accessory/patch/forecon/patch_forecon = new()
- uniform.attach_accessory(new_human,pouch)
- uniform.attach_accessory(new_human,patch_uscm)
- uniform.attach_accessory(new_human,pin)
- uniform.attach_accessory(new_human,patch_forecon)
- new_human.equip_to_slot_or_del(uniform, WEAR_BODY)
- new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/light/recon(new_human), WEAR_JACKET)
- new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/marine/satchel(new_human), WEAR_BACK)
- new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/firstaid/full(new_human), WEAR_R_STORE)
- new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/firstaid/full/alternate(new_human), WEAR_L_STORE)
- new_human.equip_to_slot_or_del(new /obj/item/reagent_container/food/drinks/flask/marine(new_human), WEAR_IN_ACCESSORY)
- new_human.equip_to_slot_or_del(new /obj/item/facepaint/sniper(new_human), WEAR_IN_ACCESSORY)
- new_human.equip_to_slot_or_del(new /obj/item/storage/box/MRE(new_human), WEAR_IN_ACCESSORY)
- new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine(new_human), WEAR_HANDS)
- new_human.equip_to_slot_or_del(new /obj/item/tool/crowbar/tactical(new_human), WEAR_IN_JACKET)
- new_human.equip_to_slot_or_del(new /obj/item/device/binoculars/range/designator(new_human), WEAR_IN_JACKET)
- new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/knife(new_human), WEAR_FEET)
- new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/forecon(new_human), WEAR_L_EAR)
- GLOB.character_traits[/datum/character_trait/skills/spotter].apply_trait(new_human)
-
/datum/equipment_preset/uscm/forecon/proc/add_forecon_weapon(mob/living/carbon/human/new_human)
var/random_gun = rand(1,3)
switch(random_gun)
@@ -75,6 +50,16 @@
if (9)
new_human.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/marine(new_human), WEAR_HEAD)
+/datum/equipment_preset/uscm/forecon/proc/spawn_random_tech_headgear(mob/living/carbon/human/new_human)
+ var/i = rand(1,4)
+ switch(i)
+ if (1 , 2)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/marine/tech(new_human), WEAR_HEAD)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/hud/health(new_human), WEAR_EYES)
+ if (3 , 4)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/marine/medic/white(new_human), WEAR_HEAD)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/welding(new_human), WEAR_EYES)
+
/datum/equipment_preset/uscm/forecon/proc/add_forecon_weapon_pistol(mob/living/carbon/human/new_human)
var/random_pistol = rand(1,5)
switch(random_pistol)
@@ -106,8 +91,33 @@
minimap_icon = ""
skills = /datum/skills/military/survivor/forecon_standard
+/datum/equipment_preset/uscm/forecon/standard/load_gear(mob/living/carbon/human/new_human)
+ var/obj/item/clothing/under/marine/reconnaissance/uniform = new()
+ var/obj/item/clothing/accessory/storage/droppouch/pouch = new()
+ var/obj/item/clothing/accessory/ranks/marine/e5/pin = new()
+ var/obj/item/clothing/accessory/patch/patch_uscm = new()
+ var/obj/item/clothing/accessory/patch/forecon/patch_forecon = new()
+ uniform.attach_accessory(new_human,pouch)
+ uniform.attach_accessory(new_human,patch_uscm)
+ uniform.attach_accessory(new_human,pin)
+ uniform.attach_accessory(new_human,patch_forecon)
+ new_human.equip_to_slot_or_del(uniform, WEAR_BODY)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/light/recon(new_human), WEAR_JACKET)
+ new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/marine/satchel(new_human), WEAR_BACK)
+ new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/firstaid/full(new_human), WEAR_R_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/reagent_container/food/drinks/flask/marine(new_human), WEAR_IN_ACCESSORY)
+ new_human.equip_to_slot_or_del(new /obj/item/facepaint/sniper(new_human), WEAR_IN_ACCESSORY)
+ new_human.equip_to_slot_or_del(new /obj/item/storage/box/MRE(new_human), WEAR_IN_ACCESSORY)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine(new_human), WEAR_HANDS)
+ new_human.equip_to_slot_or_del(new /obj/item/tool/crowbar/tactical(new_human), WEAR_IN_JACKET)
+ new_human.equip_to_slot_or_del(new /obj/item/device/binoculars/range/designator(new_human), WEAR_IN_JACKET)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/knife(new_human), WEAR_FEET)
+ new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/forecon(new_human), WEAR_L_EAR)
+ GLOB.character_traits[/datum/character_trait/skills/spotter].apply_trait(new_human)
+
/datum/equipment_preset/uscm/forecon/standard/load_gear(mob/living/carbon/human/new_human)
..()
+ new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/firstaid/full/alternate(new_human), WEAR_L_STORE)
spawn_random_headgear(new_human)
add_forecon_weapon_pistol(new_human)
add_forecon_weapon(new_human)
@@ -115,25 +125,44 @@
/datum/equipment_preset/uscm/forecon/tech
name = "USCM Reconnaissance Support Technician"
assignment = JOB_FORECON_SUPPORT
- rank = JOB_SQUAD_MEDIC
+ rank = JOB_SQUAD_TECH
role_comm_title = "SuppTech"
minimap_icon = "engi"
skills = /datum/skills/military/survivor/forecon_techician
/datum/equipment_preset/uscm/forecon/tech/load_gear(mob/living/carbon/human/new_human)
- new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/marine/satchel/big(new_human), WEAR_BACK)
+ var/obj/item/clothing/under/marine/reconnaissance/uniform = new()
+ var/obj/item/clothing/accessory/storage/droppouch/pouch = new()
+ var/obj/item/clothing/accessory/ranks/marine/e5/pin = new()
+ var/obj/item/clothing/accessory/patch/patch_uscm = new()
+ var/obj/item/clothing/accessory/patch/forecon/patch_forecon = new()
+ uniform.attach_accessory(new_human,pouch)
+ uniform.attach_accessory(new_human,patch_uscm)
+ uniform.attach_accessory(new_human,pin)
+ uniform.attach_accessory(new_human,patch_forecon)
+ new_human.equip_to_slot_or_del(uniform, WEAR_BODY)
new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/insulated(new_human), WEAR_HANDS)
- new_human.equip_to_slot_or_del(new /obj/item/storage/belt/utility/full(new_human), WEAR_WAIST)
- new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/welding(new_human), WEAR_EYES)
- ..()
- new_human.equip_to_slot_or_del(new /obj/item/storage/belt/utility/full(new_human), WEAR_WAIST)
+ new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/marine/satchel/big(new_human), WEAR_BACK)
+ new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/tools/tactical/full(new_human), WEAR_L_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/storage/belt/medical/lifesaver/full/forecon(new_human), WEAR_WAIST)
new_human.equip_to_slot_or_del(new /obj/item/storage/firstaid/adv(new_human), WEAR_IN_BACK)
new_human.equip_to_slot_or_del(new /obj/item/storage/firstaid/surgical(new_human), WEAR_IN_BACK)
new_human.equip_to_slot_or_del(new /obj/item/device/defibrillator/compact(new_human), WEAR_IN_BACK)
- new_human.equip_to_slot_or_del(new /obj/item/device/healthanalyzer(new_human), WEAR_IN_BACK)
new_human.equip_to_slot_or_del(new /obj/item/tool/surgery/synthgraft, WEAR_IN_BACK)
+ new_human.equip_to_slot_or_del(new /obj/item/tool/weldingtool , WEAR_IN_BACK)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/light/recon(new_human), WEAR_JACKET)
+ new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/firstaid/full(new_human), WEAR_R_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/reagent_container/food/drinks/flask/marine(new_human), WEAR_IN_ACCESSORY)
+ new_human.equip_to_slot_or_del(new /obj/item/facepaint/sniper(new_human), WEAR_IN_ACCESSORY)
+ new_human.equip_to_slot_or_del(new /obj/item/storage/box/MRE(new_human), WEAR_IN_ACCESSORY)
+ new_human.equip_to_slot_or_del(new /obj/item/tool/crowbar/tactical(new_human), WEAR_IN_JACKET)
+ new_human.equip_to_slot_or_del(new /obj/item/device/binoculars/range/designator(new_human), WEAR_IN_JACKET)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/knife(new_human), WEAR_FEET)
+ new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/forecon(new_human), WEAR_L_EAR)
+ GLOB.character_traits[/datum/character_trait/skills/spotter].apply_trait(new_human)
+
add_forecon_weapon(new_human)
- spawn_random_headgear(new_human)
+ spawn_random_tech_headgear(new_human)
/datum/equipment_preset/uscm/forecon/marksman
name = "USCM Reconnaissance Designated Marksman"
@@ -154,10 +183,11 @@
uniform.attach_accessory(new_human,pin)
uniform.attach_accessory(new_human,patch_forecon)
new_human.equip_to_slot_or_del(uniform, WEAR_BODY)
+ new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/firstaid/full/alternate(new_human), WEAR_L_STORE)
new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/M3S, WEAR_JACKET)
new_human.equip_to_slot_or_del(new /obj/item/device/binoculars/range/designator(new_human), WEAR_IN_JACKET)
new_human.equip_to_slot_or_del(new /obj/item/explosive/plastic(new_human), WEAR_IN_JACKET)
- new_human.equip_to_slot_or_del(new /obj/item/explosive/plastic(new_human), WEAR_IN_JACKET)
+ new_human.equip_to_slot_or_del(new /obj/item/tool/crowbar/tactical(new_human), WEAR_IN_JACKET)
new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/marine/satchel/scout_cloak(new_human), WEAR_BACK)
new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/firstaid/full(new_human), WEAR_R_STORE)
new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/firstaid/full/alternate(new_human), WEAR_L_STORE)
@@ -165,8 +195,6 @@
new_human.equip_to_slot_or_del(new /obj/item/facepaint/sniper(new_human), WEAR_IN_ACCESSORY)
new_human.equip_to_slot_or_del(new /obj/item/storage/box/MRE(new_human), WEAR_IN_ACCESSORY)
new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine(new_human), WEAR_HANDS)
- new_human.equip_to_slot_or_del(new /obj/item/tool/crowbar/tactical(new_human), WEAR_IN_JACKET)
- new_human.equip_to_slot_or_del(new /obj/item/device/binoculars/range/designator(new_human), WEAR_IN_JACKET)
new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/knife(new_human), WEAR_FEET)
new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/forecon(new_human), WEAR_L_EAR)
new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/rifle/m4ra_custom/tactical(new_human), WEAR_L_HAND)
@@ -199,6 +227,7 @@
uniform.attach_accessory(new_human,pin)
uniform.attach_accessory(new_human,patch_forecon)
new_human.equip_to_slot_or_del(uniform, WEAR_BODY)
+ new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/firstaid/full/alternate(new_human), WEAR_L_STORE)
new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/smartgunner(new_human), WEAR_JACKET)
new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/firstaid/full(new_human), WEAR_R_STORE)
new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/firstaid/full/alternate(new_human), WEAR_L_STORE)
@@ -227,7 +256,7 @@
rank = JOB_SQUAD_LEADER
role_comm_title = "SL"
skills = /datum/skills/military/survivor/forecon_squad_leader
- paygrade = PAY_SHORT_MO1
+ paygrades = list(PAY_SHORT_MO1 = JOB_PLAYTIME_TIER_0)
dress_under = list(/obj/item/clothing/under/marine/dress/blues/senior)
dress_over = list(/obj/item/clothing/suit/storage/jacket/marine/dress/blues/officer)
@@ -243,13 +272,29 @@
uniform.attach_accessory(new_human,patch_uscm)
uniform.attach_accessory(new_human,pin)
uniform.attach_accessory(new_human,patch_forecon)
+
new_human.equip_to_slot_or_del(uniform, WEAR_BODY)
+ new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/firstaid/full/alternate(new_human), WEAR_L_STORE)
new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/rifle/m41aMK1/tactical(new_human), WEAR_R_HAND)
new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/marine/satchel(new_human), WEAR_BACK)
new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/m41aMK1(new_human), WEAR_IN_BACK)
new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/m41aMK1(new_human), WEAR_IN_BACK)
new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/m41aMK1/ap(new_human), WEAR_IN_BACK)
new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/rifle/m41aMK1/ap(new_human), WEAR_IN_BACK)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/light/recon(new_human), WEAR_JACKET)
+ new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/firstaid/full(new_human), WEAR_R_STORE)
+ new_human.equip_to_slot_or_del(new /obj/item/reagent_container/food/drinks/flask/marine(new_human), WEAR_IN_ACCESSORY)
+ new_human.equip_to_slot_or_del(new /obj/item/facepaint/sniper(new_human), WEAR_IN_ACCESSORY)
+ new_human.equip_to_slot_or_del(new /obj/item/storage/box/MRE(new_human), WEAR_IN_ACCESSORY)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine(new_human), WEAR_HANDS)
+ new_human.equip_to_slot_or_del(new /obj/item/tool/crowbar/tactical(new_human), WEAR_IN_JACKET)
+ new_human.equip_to_slot_or_del(new /obj/item/device/binoculars/range/designator(new_human), WEAR_IN_JACKET)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/knife(new_human), WEAR_FEET)
+ new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/forecon(new_human), WEAR_L_EAR)
+ GLOB.character_traits[/datum/character_trait/skills/spotter].apply_trait(new_human)
+
+
+
..()
add_forecon_weapon_pistol(new_human)
spawn_random_headgear(new_human)
diff --git a/code/modules/gear_presets/uscm_medical.dm b/code/modules/gear_presets/uscm_medical.dm
index 75152268326c..6e727381b6ff 100644
--- a/code/modules/gear_presets/uscm_medical.dm
+++ b/code/modules/gear_presets/uscm_medical.dm
@@ -36,7 +36,7 @@
)
assignment = JOB_CMO
rank = JOB_CMO
- paygrade = PAY_SHORT_MO2
+ paygrades = list(PAY_SHORT_MO1 = JOB_PLAYTIME_TIER_0, PAY_SHORT_MO2 = JOB_PLAYTIME_TIER_1)
role_comm_title = "CMO"
skills = /datum/skills/CMO
@@ -66,7 +66,7 @@
assignment = JOB_DOCTOR
rank = JOB_DOCTOR
- paygrade = PAY_SHORT_MO1
+ paygrades = list(PAY_SHORT_MO1 = JOB_PLAYTIME_TIER_0)
role_comm_title = "Doc"
skills = /datum/skills/doctor
@@ -104,7 +104,7 @@
assignment = JOB_NURSE
rank = JOB_NURSE
- paygrade = PAY_SHORT_ME5
+ paygrades = list(PAY_SHORT_ME4 = JOB_PLAYTIME_TIER_0, PAY_SHORT_ME5 = JOB_PLAYTIME_TIER_1)
role_comm_title = "Nurse"
skills = /datum/skills/nurse
@@ -126,13 +126,6 @@
new_human.equip_to_slot_or_del(new /obj/item/clothing/accessory/armband/nurse(new_human), WEAR_ACCESSORY)
new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/white(new_human), WEAR_FEET)
-
-/datum/equipment_preset/uscm_ship/uscm_medical/nurse/load_rank(mob/living/carbon/human/new_human)
- if(new_human.client)
- if(get_job_playtime(new_human.client, rank) < JOB_PLAYTIME_TIER_1)
- return PAY_SHORT_ME3
- return paygrade
-
//*****************************************************************************************************/
/datum/equipment_preset/uscm_ship/uscm_medical/researcher
name = "USCM Researcher"
@@ -140,7 +133,7 @@
access = list(ACCESS_MARINE_MEDBAY, ACCESS_MARINE_RESEARCH, ACCESS_MARINE_CHEMISTRY, ACCESS_MARINE_MORGUE)
assignment = JOB_RESEARCHER
rank = JOB_RESEARCHER
- paygrade = PAY_SHORT_MO1
+ paygrades = list(PAY_SHORT_MO1 = JOB_PLAYTIME_TIER_0)
role_comm_title = "Rsr"
skills = /datum/skills/researcher
diff --git a/code/modules/gear_presets/uscm_police.dm b/code/modules/gear_presets/uscm_police.dm
index 76df4d6de2be..dcb926e804d7 100644
--- a/code/modules/gear_presets/uscm_police.dm
+++ b/code/modules/gear_presets/uscm_police.dm
@@ -27,7 +27,7 @@
)
assignment = JOB_POLICE
rank = JOB_POLICE
- paygrade = PAY_SHORT_ME5
+ paygrades = list(PAY_SHORT_ME4 = JOB_PLAYTIME_TIER_0, PAY_SHORT_ME5 = JOB_PLAYTIME_TIER_1, PAY_SHORT_ME6 = JOB_PLAYTIME_TIER_3)
role_comm_title = "MP"
skills = /datum/skills/MP
@@ -59,11 +59,6 @@
new_human.equip_to_slot_or_del(new /obj/item/device/taperecorder(new_human), WEAR_L_STORE)
new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/general/medium(new_human), WEAR_R_STORE)
-/datum/equipment_preset/uscm_ship/uscm_police/mp/load_rank(mob/living/carbon/human/human)
- if(human.client && get_job_playtime(human.client, rank) < JOB_PLAYTIME_TIER_1)
- return PAY_SHORT_ME3
- return paygrade
-
//*****************************************************************************************************/
/datum/equipment_preset/uscm_ship/uscm_police/warden
@@ -90,7 +85,7 @@
)
assignment = JOB_WARDEN
rank = JOB_WARDEN
- paygrade = PAY_SHORT_ME6
+ paygrades = list(PAY_SHORT_ME5 = JOB_PLAYTIME_TIER_0, PAY_SHORT_ME6 = JOB_PLAYTIME_TIER_1, PAY_SHORT_ME7 = JOB_PLAYTIME_TIER_3)
role_comm_title = "MW"
skills = /datum/skills/MW
@@ -151,7 +146,7 @@
)
assignment = JOB_CHIEF_POLICE
rank = JOB_CHIEF_POLICE
- paygrade = PAY_SHORT_MO2
+ paygrades = list(PAY_SHORT_MO1 = JOB_PLAYTIME_TIER_0, PAY_SHORT_MO2 = JOB_PLAYTIME_TIER_1)
role_comm_title = "CMP"
skills = /datum/skills/CMP
@@ -195,7 +190,7 @@
access = list()
assignment = JOB_RIOT
rank = JOB_RIOT
- paygrade = PAY_SHORT_ME5
+ paygrades = list(PAY_SHORT_ME5 = JOB_PLAYTIME_TIER_0)
role_comm_title = "RMP"
skills = /datum/skills/CMP
@@ -243,6 +238,6 @@
assignment = JOB_RIOT_CHIEF
rank = JOB_RIOT_CHIEF
- paygrade = PAY_SHORT_MO1
+ paygrades = list(PAY_SHORT_MO1 = JOB_PLAYTIME_TIER_0)
role_comm_title = "CRMP"
skills = /datum/skills/CMP
diff --git a/code/modules/gear_presets/uscm_ship.dm b/code/modules/gear_presets/uscm_ship.dm
index 9c00599ec9cd..38a07f8ee874 100644
--- a/code/modules/gear_presets/uscm_ship.dm
+++ b/code/modules/gear_presets/uscm_ship.dm
@@ -46,29 +46,80 @@
)
assignment = JOB_CORPORATE_LIAISON
rank = JOB_CORPORATE_LIAISON
- paygrade = PAY_SHORT_WYC2
+ paygrades = list(PAY_SHORT_WYC2 = JOB_PLAYTIME_TIER_0, PAY_SHORT_WYC3 = JOB_PLAYTIME_TIER_2, PAY_SHORT_WYC4 = JOB_PLAYTIME_TIER_3, PAY_SHORT_WYC5 = JOB_PLAYTIME_TIER_4)
role_comm_title = "CL"
skills = /datum/skills/civilian
minimap_icon = "cl"
minimap_background = MINIMAP_ICON_BACKGROUND_CIVILIAN
- utility_under = list(/obj/item/clothing/under/liaison_suit/black)
- utility_hat = list()
- utility_gloves = list()
- utility_shoes = list(/obj/item/clothing/shoes/laceup)
- utility_extra = list(/obj/item/clothing/under/liaison_suit/blue)
-
- service_under = list(/obj/item/clothing/under/liaison_suit/field)
- service_over = list()
- service_hat = list()
- service_shoes = list(/obj/item/clothing/shoes/laceup)
-
- dress_under = list(/obj/item/clothing/under/liaison_suit/corporate_formal)
- dress_over = list()
- dress_hat = list()
- dress_gloves = list(/obj/item/clothing/gloves/marine/dress)
- dress_shoes = list(/obj/item/clothing/shoes/laceup)
+ dress_under = list(
+ /obj/item/clothing/under/liaison_suit/black,
+ /obj/item/clothing/under/liaison_suit/blue,
+ /obj/item/clothing/under/liaison_suit/brown,
+ /obj/item/clothing/under/liaison_suit/corporate_formal,
+ /obj/item/clothing/under/liaison_suit,
+ /obj/item/clothing/under/liaison_suit/charcoal,
+ /obj/item/clothing/under/liaison_suit/formal,
+ /obj/item/clothing/under/liaison_suit/blazer,
+ /obj/item/clothing/under/liaison_suit/suspenders,
+ /obj/item/clothing/under/blackskirt,
+ /obj/item/clothing/under/suit_jacket/trainee,
+ /obj/item/clothing/under/liaison_suit/ivy,
+ /obj/item/clothing/under/liaison_suit/orange,
+ /obj/item/clothing/under/liaison_suit/field,
+ /obj/item/clothing/under/colonist/workwear,
+ /obj/item/clothing/under/colonist/workwear/khaki,
+ /obj/item/clothing/under/colonist/workwear/pink,
+ /obj/item/clothing/under/colonist/workwear/green,
+ )
+ dress_over = list(
+ /obj/item/clothing/suit/storage/jacket/marine/corporate/black,
+ /obj/item/clothing/suit/storage/jacket/marine/corporate,
+ /obj/item/clothing/suit/storage/jacket/marine/corporate/brown,
+ /obj/item/clothing/suit/storage/jacket/marine/corporate/blue,
+ /obj/item/clothing/suit/storage/jacket/marine/corporate/black,
+ /obj/item/clothing/suit/storage/jacket/marine/bomber/grey,
+ /obj/item/clothing/suit/storage/jacket/marine/bomber/red,
+ /obj/item/clothing/suit/storage/jacket/marine/bomber,
+ /obj/item/clothing/suit/storage/bomber,
+ /obj/item/clothing/suit/storage/bomber/alt,
+ /obj/item/clothing/suit/storage/snow_suit/liaison,
+ /obj/item/clothing/suit/storage/labcoat,
+ /obj/item/clothing/suit/storage/jacket/marine/vest/grey,
+ /obj/item/clothing/suit/storage/jacket/marine/vest,
+ /obj/item/clothing/suit/storage/jacket/marine/vest/tan,
+ /obj/item/clothing/suit/storage/webbing,
+ )
+ dress_extra = list(
+ /obj/item/clothing/accessory/black,
+ /obj/item/clothing/accessory/red,
+ /obj/item/clothing/accessory/purple,
+ /obj/item/clothing/accessory/blue,
+ /obj/item/clothing/accessory/green,
+ /obj/item/clothing/accessory/gold,
+ /obj/item/clothing/accessory/horrible,
+ /obj/item/clothing/glasses/sunglasses/big,
+ /obj/item/clothing/glasses/sunglasses/aviator,
+ /obj/item/clothing/glasses/sunglasses,
+ /obj/item/clothing/glasses/sunglasses/prescription,
+ /obj/item/clothing/glasses/regular/hipster,
+ )
+ dress_gloves = list(
+ /obj/item/clothing/gloves/black,
+ /obj/item/clothing/gloves/marine/dress,
+ )
+ dress_shoes = list(
+ /obj/item/clothing/shoes/laceup,
+ /obj/item/clothing/shoes/laceup/brown,
+ /obj/item/clothing/shoes/black,
+ /obj/item/clothing/shoes/marine/corporate,
+ )
+ dress_hat = list(
+ /obj/item/clothing/head/fedora,
+ /obj/item/clothing/head/beret/cm/black/civilian,
+ /obj/item/clothing/head/beret/cm/white/civilian,
+ )
/datum/equipment_preset/uscm_ship/liaison/New()
. = ..()
@@ -85,20 +136,6 @@
new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/laceup(new_human), WEAR_FEET)
new_human.equip_to_slot_or_del(new back_item(new_human), WEAR_BACK)
-/datum/equipment_preset/uscm_ship/liaison/load_rank(mob/living/carbon/human/new_human)
- if(new_human.client)
- var/playtime = get_job_playtime(new_human.client, rank)
- if(new_human.client.prefs.playtime_perks)
- if(playtime > JOB_PLAYTIME_TIER_4)
- return PAY_SHORT_WYC5
- else if(playtime > JOB_PLAYTIME_TIER_3)
- return PAY_SHORT_WYC4
- else if(playtime > JOB_PLAYTIME_TIER_2)
- return PAY_SHORT_WYC3
- else
- return paygrade
- return paygrade
-
//*****************************************************************************************************/
/datum/equipment_preset/uscm_ship/reporter
@@ -120,7 +157,7 @@
)
assignment = JOB_COMBAT_REPORTER
rank = JOB_COMBAT_REPORTER
- paygrade = PAY_SHORT_CIV
+ paygrades = list(PAY_SHORT_CIV = JOB_PLAYTIME_TIER_0)
role_comm_title = "PRESS"
skills = /datum/skills/civilian
idtype = /obj/item/card/id/silver/cl
@@ -155,7 +192,7 @@
)
assignment = JOB_COMBAT_REPORTER
rank = JOB_COMBAT_REPORTER
- paygrade = PAY_SHORT_ME4
+ paygrades = list(PAY_SHORT_ME4 = JOB_PLAYTIME_TIER_0)
role_comm_title = "CC"
skills = /datum/skills/pfc
idtype = /obj/item/card/id/dogtag
@@ -206,7 +243,7 @@
)
assignment = JOB_CHIEF_ENGINEER
rank = JOB_CHIEF_ENGINEER
- paygrade = PAY_SHORT_MO1
+ paygrades = list(PAY_SHORT_MO1 = JOB_PLAYTIME_TIER_0, PAY_SHORT_MO2 = JOB_PLAYTIME_TIER_3)
role_comm_title = "CE"
minimum_age = 27
skills = /datum/skills/CE
@@ -242,7 +279,7 @@
)
assignment = JOB_MAINT_TECH
rank = JOB_MAINT_TECH
- paygrade = PAY_SHORT_ME2
+ paygrades = list(PAY_SHORT_ME1 = JOB_PLAYTIME_TIER_0, PAY_SHORT_ME2 = JOB_PLAYTIME_TIER_1, PAY_SHORT_ME3 = JOB_PLAYTIME_TIER_3)
role_comm_title = "MT"
skills = /datum/skills/MT
@@ -262,12 +299,6 @@
new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine(new_human), WEAR_FEET)
new_human.equip_to_slot_or_del(new back_item(new_human), WEAR_BACK)
-/datum/equipment_preset/uscm_ship/maint/load_rank(mob/living/carbon/human/new_human)
- if(new_human.client)
- if(get_job_playtime(new_human.client, rank) < JOB_PLAYTIME_TIER_1)
- return PAY_SHORT_ME1
- return paygrade
-
//*****************************************************************************************************/
/datum/equipment_preset/uscm_ship/ordn
@@ -283,7 +314,7 @@
)
assignment = JOB_ORDNANCE_TECH
rank = JOB_ORDNANCE_TECH
- paygrade = PAY_SHORT_ME2
+ paygrades = list(PAY_SHORT_ME1 = JOB_PLAYTIME_TIER_0, PAY_SHORT_ME2 = JOB_PLAYTIME_TIER_1, PAY_SHORT_ME3 = JOB_PLAYTIME_TIER_3)
role_comm_title = "OT"
skills = /datum/skills/OT
@@ -327,7 +358,7 @@
)
assignment = JOB_CHIEF_REQUISITION
rank = JOB_CHIEF_REQUISITION
- paygrade = PAY_SHORT_ME7
+ paygrades = list(PAY_SHORT_ME6 = JOB_PLAYTIME_TIER_0, PAY_SHORT_ME7 = JOB_PLAYTIME_TIER_1, PAY_SHORT_ME8 = JOB_PLAYTIME_TIER_3)
role_comm_title = "QM"
minimum_age = 27
skills = /datum/skills/RO
@@ -362,7 +393,7 @@
access = list(ACCESS_MARINE_CARGO)
assignment = JOB_CARGO_TECH
rank = JOB_CARGO_TECH
- paygrade = PAY_SHORT_ME2
+ paygrades = list(PAY_SHORT_ME1 = JOB_PLAYTIME_TIER_0, PAY_SHORT_ME2 = JOB_PLAYTIME_TIER_1, PAY_SHORT_ME3 = JOB_PLAYTIME_TIER_3)
role_comm_title = "CT"
skills = /datum/skills/CT
@@ -387,12 +418,6 @@
new_human.equip_to_slot_or_del(new back_item(new_human), WEAR_BACK)
new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/general/medium(new_human), WEAR_R_STORE)
-/datum/equipment_preset/uscm_ship/cargo/load_rank(mob/living/carbon/human/new_human)
- if(new_human.client)
- if(get_job_playtime(new_human.client, rank) < JOB_PLAYTIME_TIER_1)
- return PAY_SHORT_ME1
- return paygrade
-
//*****************************************************************************************************/
/datum/equipment_preset/uscm_ship/commander
@@ -402,7 +427,7 @@
idtype = /obj/item/card/id/gold
assignment = JOB_CO
rank = JOB_CO
- paygrade = PAY_SHORT_MO4
+ paygrades = list(PAY_SHORT_MO4 = JOB_PLAYTIME_TIER_0)
role_comm_title = "CO"
minimum_age = 30
skills = /datum/skills/commander
@@ -485,7 +510,7 @@
idtype = /obj/item/card/id/gold/council
rank = JOB_CO
- paygrade = PAY_SHORT_MO5
+ paygrades = list(PAY_SHORT_MO5 = JOB_PLAYTIME_TIER_0)
role_comm_title = "CO"
minimum_age = 35
@@ -501,7 +526,7 @@
/datum/equipment_preset/uscm_ship/commander/council/plus
name = "USCM Commanding Officer (CO++)"
idtype = /obj/item/card/id/general
- paygrade = PAY_SHORT_MO6
+ paygrades = list(PAY_SHORT_MO6 = JOB_PLAYTIME_TIER_0)
dress_under = list(/obj/item/clothing/under/marine/dress/blues/senior, /obj/item/clothing/under/marine/dress/blues/general)
/datum/equipment_preset/uscm_ship/commander/council/plus/load_gear(mob/living/carbon/human/new_human)
@@ -517,7 +542,7 @@
idtype = /obj/item/card/id/silver
assignment = JOB_XO
rank = JOB_XO
- paygrade = PAY_SHORT_MO3
+ paygrades = list(PAY_SHORT_MO3 = JOB_PLAYTIME_TIER_0)
role_comm_title = "XO"
minimum_age = 35
skills = /datum/skills/XO
@@ -556,7 +581,7 @@
access = list(ACCESS_MARINE_COMMAND, ACCESS_MARINE_DROPSHIP, ACCESS_MARINE_DATABASE, ACCESS_MARINE_MEDBAY)
assignment = JOB_SO
rank = JOB_SO
- paygrade = PAY_SHORT_MO1
+ paygrades = list(PAY_SHORT_MO1 = JOB_PLAYTIME_TIER_0)
role_comm_title = "SO"
minimum_age = 25
skills = /datum/skills/SO
@@ -572,7 +597,6 @@
new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/almayer/mcom(new_human), WEAR_L_EAR)
new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/officer/bridge(new_human), WEAR_BODY)
new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/dress(new_human), WEAR_FEET)
- new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/m4a3/mod88(new_human), WEAR_WAIST)
new_human.equip_to_slot_or_del(new /obj/item/clothing/head/cmcap/bridge(new_human), WEAR_HEAD)
new_human.equip_to_slot_or_del(new back_item(new_human), WEAR_BACK)
new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/general/large(new_human), WEAR_L_STORE)
@@ -588,7 +612,7 @@
idtype = /obj/item/card/id/silver
assignment = JOB_SEA
rank = JOB_SEA
- paygrade = PAY_SHORT_ME7
+ paygrades = list(PAY_SHORT_ME7 = JOB_PLAYTIME_TIER_0)
role_comm_title = "SEA"
minimum_age = 40
skills = /datum/skills/SEA
@@ -619,11 +643,11 @@
new_human.equip_to_slot_or_del(new /obj/item/device/binoculars(new_human), WEAR_L_HAND)
new_human.equip_to_slot_or_del(new /obj/item/device/whistle(new_human), WEAR_R_HAND)
-/datum/equipment_preset/uscm_ship/sea/load_rank(mob/living/carbon/human/rankee)
+/datum/equipment_preset/uscm_ship/sea/load_rank(mob/living/carbon/human/rankee, client/mob_client)
if(rankee?.client?.prefs?.pref_special_job_options[rank])
- paygrade = get_paygrade_id_by_name(rankee.client.prefs.pref_special_job_options[rank])
-
- return paygrade
+ var/paygrade_choice = get_paygrade_id_by_name(rankee.client.prefs.pref_special_job_options[rank])
+ return paygrade_choice
+ ..()
//*****************************************************************************************************/
@@ -634,7 +658,7 @@
idtype = /obj/item/card/id/silver
assignment = JOB_AUXILIARY_OFFICER
rank = JOB_AUXILIARY_OFFICER
- paygrade = PAY_SHORT_MO2
+ paygrades = list(PAY_SHORT_MO2 = JOB_PLAYTIME_TIER_0, PAY_SHORT_MO3 = JOB_PLAYTIME_TIER_3)
role_comm_title = "ASO"
minimum_age = 27
skills = /datum/skills/auxiliary_officer
@@ -693,7 +717,7 @@
access = list(ACCESS_MARINE_COMMAND, ACCESS_MARINE_DROPSHIP, ACCESS_MARINE_PILOT)
assignment = JOB_CAS_PILOT
rank = JOB_CAS_PILOT
- paygrade = PAY_SHORT_MO1
+ paygrades = list(PAY_SHORT_MO1 = JOB_PLAYTIME_TIER_0)
role_comm_title = "GP"
skills = /datum/skills/pilot
@@ -743,7 +767,7 @@
access = list(ACCESS_MARINE_COMMAND, ACCESS_MARINE_DROPSHIP, ACCESS_MARINE_PILOT)
assignment = JOB_DROPSHIP_PILOT
rank = JOB_DROPSHIP_PILOT
- paygrade = PAY_SHORT_MO1
+ paygrades = list(PAY_SHORT_MO1 = JOB_PLAYTIME_TIER_0)
role_comm_title = "DP"
skills = /datum/skills/pilot
@@ -793,7 +817,7 @@
access = list(ACCESS_MARINE_COMMAND, ACCESS_MARINE_DROPSHIP, ACCESS_MARINE_PILOT)
assignment = JOB_DROPSHIP_CREW_CHIEF
rank = JOB_DROPSHIP_CREW_CHIEF
- paygrade = PAY_SHORT_ME5
+ paygrades = list(PAY_SHORT_ME4 = JOB_PLAYTIME_TIER_0, PAY_SHORT_ME5 = JOB_PLAYTIME_TIER_1, PAY_SHORT_ME6 = JOB_PLAYTIME_TIER_3)
role_comm_title = "DCC"
skills = /datum/skills/crew_chief
@@ -846,7 +870,7 @@
access = list(ACCESS_MARINE_MEDBAY, ACCESS_MARINE_CHEMISTRY, ACCESS_MARINE_MORGUE)
assignment = "USCM Officer"
rank = "USCM Officer"
- paygrade = PAY_SHORT_MO3
+ paygrades = list(PAY_SHORT_MO3 = JOB_PLAYTIME_TIER_0)
role_comm_title = "Cpt"
minimum_age = 40
skills = /datum/skills/commander
@@ -884,7 +908,7 @@
access = list(ACCESS_MARINE_KITCHEN)
assignment = JOB_MESS_SERGEANT
rank = JOB_MESS_SERGEANT
- paygrade = PAY_SHORT_ME2
+ paygrades = list(PAY_SHORT_ME1 = JOB_PLAYTIME_TIER_0, PAY_SHORT_ME2 = JOB_PLAYTIME_TIER_1, PAY_SHORT_ME3 = JOB_PLAYTIME_TIER_3)
role_comm_title = "MST"
skills = /datum/skills/mess_technician
@@ -909,9 +933,3 @@
new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/latex(new_human), WEAR_HANDS)
new_human.equip_to_slot_or_del(new back_item(new_human), WEAR_BACK)
new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/general/medium(new_human), WEAR_R_STORE)
-
-/datum/equipment_preset/uscm_ship/chef/load_rank(mob/living/carbon/human/new_human)
- if(new_human.client)
- if(get_job_playtime(new_human.client, rank) < JOB_PLAYTIME_TIER_1)
- return PAY_SHORT_ME1
- return paygrade
diff --git a/code/modules/gear_presets/whiteout.dm b/code/modules/gear_presets/whiteout.dm
index 75e8e013c03f..0a77ab7dcb41 100644
--- a/code/modules/gear_presets/whiteout.dm
+++ b/code/modules/gear_presets/whiteout.dm
@@ -9,7 +9,7 @@
languages = list(LANGUAGE_ENGLISH, LANGUAGE_JAPANESE, LANGUAGE_CHINESE, LANGUAGE_RUSSIAN, LANGUAGE_GERMAN, LANGUAGE_SPANISH, LANGUAGE_YAUTJA, LANGUAGE_XENOMORPH, LANGUAGE_TSL) //Synths after all.
skills = /datum/skills/everything //They are Synths, programmed for Everything.
idtype = /obj/item/card/id/pmc/ds
- paygrade = PAY_SHORT_CDNM
+ paygrades = list(PAY_SHORT_CDNM = JOB_PLAYTIME_TIER_0)
/datum/equipment_preset/pmc/w_y_whiteout/New()
. = ..()
diff --git a/code/modules/gear_presets/wo.dm b/code/modules/gear_presets/wo.dm
index bf002b292df9..17138b208a58 100644
--- a/code/modules/gear_presets/wo.dm
+++ b/code/modules/gear_presets/wo.dm
@@ -17,7 +17,7 @@
assignment = JOB_WO_CO
rank = JOB_WO_CO
- paygrade = PAY_SHORT_MO2
+ paygrades = list(PAY_SHORT_MO2 = JOB_PLAYTIME_TIER_0)
role_comm_title = "CDR"
skills = /datum/skills/commander
idtype = /obj/item/card/id/gold
@@ -96,7 +96,7 @@
assignment = JOB_WO_XO
rank = JOB_WO_XO
- paygrade = PAY_SHORT_MO1
+ paygrades = list(PAY_SHORT_MO1 = JOB_PLAYTIME_TIER_0)
role_comm_title = "LCDR"
skills = /datum/skills/XO
idtype = /obj/item/card/id/silver
@@ -140,7 +140,7 @@
access = list(ACCESS_MARINE_BRIG, ACCESS_MARINE_COMMAND, ACCESS_MARINE_DROPSHIP, ACCESS_MARINE_DATABASE, ACCESS_MARINE_PREP, ACCESS_MARINE_CMP, ACCESS_MARINE_MEDBAY)
assignment = JOB_WO_CHIEF_POLICE
rank = JOB_WO_CHIEF_POLICE
- paygrade = PAY_SHORT_ME5
+ paygrades = list(PAY_SHORT_ME5 = JOB_PLAYTIME_TIER_0)
role_comm_title = "HGSL"
skills = /datum/skills/honor_guard/lead
idtype = /obj/item/card/id/silver
@@ -176,7 +176,7 @@
access = list(ACCESS_MARINE_COMMAND, ACCESS_MARINE_BRIG, ACCESS_MARINE_DROPSHIP, ACCESS_MARINE_DATABASE)
assignment = JOB_WO_SO
rank = JOB_WO_SO
- paygrade = PAY_SHORT_ME4
+ paygrades = list(PAY_SHORT_ME4 = JOB_PLAYTIME_TIER_0)
role_comm_title = "VHG"
skills = /datum/skills/honor_guard/vet
idtype = /obj/item/card/id/silver
@@ -218,7 +218,7 @@
access = list(ACCESS_MARINE_COMMAND, ACCESS_MARINE_DROPSHIP, ACCESS_MARINE_DATABASE)
assignment = JOB_WO_CREWMAN
rank = JOB_WO_CREWMAN
- paygrade = PAY_SHORT_ME3
+ paygrades = list(PAY_SHORT_ME3 = JOB_PLAYTIME_TIER_0)
role_comm_title = "HGS"
skills = /datum/skills/honor_guard/spec
idtype = /obj/item/card/id/gold
@@ -258,7 +258,7 @@
access = list(ACCESS_MARINE_BRIG, ACCESS_MARINE_COMMAND, ACCESS_MARINE_DROPSHIP, ACCESS_MARINE_DATABASE, ACCESS_MARINE_PREP, ACCESS_MARINE_MEDBAY)
assignment = JOB_WO_POLICE
rank = JOB_WO_POLICE
- paygrade = PAY_SHORT_ME2
+ paygrades = list(PAY_SHORT_ME2 = JOB_PLAYTIME_TIER_0)
role_comm_title = "HG"
skills = /datum/skills/honor_guard
@@ -292,7 +292,7 @@
access = list(ACCESS_MARINE_COMMAND, ACCESS_MARINE_DROPSHIP, ACCESS_MARINE_PILOT)
assignment = JOB_WO_PILOT
rank = JOB_WO_PILOT
- paygrade = PAY_SHORT_ME3
+ paygrades = list(PAY_SHORT_ME3 = JOB_PLAYTIME_TIER_0)
role_comm_title = "MC"
skills = /datum/skills/mortar_crew
@@ -327,7 +327,7 @@
access = list(ACCESS_MARINE_CARGO, ACCESS_MARINE_RO, ACCESS_MARINE_COMMAND)
assignment = JOB_WO_CHIEF_REQUISITION
rank = JOB_WO_CHIEF_REQUISITION
- paygrade = PAY_SHORT_ME8
+ paygrades = list(PAY_SHORT_ME8 = JOB_PLAYTIME_TIER_0)
role_comm_title = "QM"
skills = /datum/skills/RO
idtype = /obj/item/card/id/silver
@@ -357,7 +357,7 @@
access = list(ACCESS_MARINE_ENGINEERING, ACCESS_CIVILIAN_ENGINEERING, ACCESS_MARINE_CARGO)
assignment = JOB_WO_REQUISITION
rank = JOB_WO_REQUISITION
- paygrade = PAY_SHORT_ME4
+ paygrades = list(PAY_SHORT_ME4 = JOB_PLAYTIME_TIER_0)
role_comm_title = "BCL"
skills = /datum/skills/CE
idtype = /obj/item/card/id
@@ -389,7 +389,7 @@
access = list(ACCESS_MARINE_CMO, ACCESS_MARINE_MEDBAY, ACCESS_MARINE_RESEARCH, ACCESS_MARINE_COMMAND, ACCESS_MARINE_CHEMISTRY, ACCESS_MARINE_MORGUE)
assignment = JOB_WO_CMO
rank = JOB_WO_CMO
- paygrade = PAY_SHORT_CCMO
+ paygrades = list(PAY_SHORT_CCMO = JOB_PLAYTIME_TIER_0)
role_comm_title = "HS"
skills = /datum/skills/CMO
idtype = /obj/item/card/id/silver
@@ -432,7 +432,7 @@
access = list(ACCESS_MARINE_MEDBAY, ACCESS_MARINE_CHEMISTRY, ACCESS_MARINE_MORGUE)
assignment = JOB_WO_DOCTOR
rank = JOB_WO_DOCTOR
- paygrade = PAY_SHORT_CDOC
+ paygrades = list(PAY_SHORT_CDOC = JOB_PLAYTIME_TIER_0)
role_comm_title = "Doc"
skills = /datum/skills/doctor
idtype = /obj/item/card/id
@@ -472,7 +472,7 @@
access = list(ACCESS_MARINE_MEDBAY, ACCESS_MARINE_RESEARCH, ACCESS_MARINE_CHEMISTRY, ACCESS_MARINE_MORGUE)
assignment = JOB_WO_RESEARCHER
rank = JOB_WO_RESEARCHER
- paygrade = PAY_SHORT_CDOC
+ paygrades = list(PAY_SHORT_CDOC = JOB_PLAYTIME_TIER_0)
role_comm_title = "Chem"
skills = /datum/skills/researcher
idtype = /obj/item/card/id
@@ -512,7 +512,7 @@
access = list(ACCESS_MARINE_CE, ACCESS_MARINE_ENGINEERING, ACCESS_MARINE_COMMAND, ACCESS_CIVILIAN_ENGINEERING, ACCESS_MARINE_DATABASE)
assignment = JOB_WO_CHIEF_ENGINEER
rank = JOB_WO_CHIEF_ENGINEER
- paygrade = PAY_SHORT_ME5
+ paygrades = list(PAY_SHORT_ME5 = JOB_PLAYTIME_TIER_0)
role_comm_title = "BCM"
skills = /datum/skills/CE
idtype = /obj/item/card/id/silver
@@ -546,7 +546,7 @@
access = list(ACCESS_MARINE_CE, ACCESS_MARINE_ENGINEERING, ACCESS_MARINE_COMMAND, ACCESS_CIVILIAN_ENGINEERING)
assignment = JOB_WO_ORDNANCE_TECH
rank = JOB_WO_ORDNANCE_TECH
- paygrade = PAY_SHORT_ME4
+ paygrades = list(PAY_SHORT_ME4 = JOB_PLAYTIME_TIER_0)
role_comm_title = "BC"
skills = /datum/skills/OT
idtype = /obj/item/card/id
@@ -579,7 +579,7 @@
assignment = JOB_WO_CORPORATE_LIAISON
rank = JOB_WO_CORPORATE_LIAISON
- paygrade = PAY_SHORT_WYC2
+ paygrades = list(PAY_SHORT_WYC2 = JOB_PLAYTIME_TIER_0)
role_comm_title = "PRESS"
skills = /datum/skills/civilian
idtype = /obj/item/card/id/silver/cl
@@ -623,7 +623,7 @@
access = list(ACCESS_MARINE_PREP, ACCESS_MARINE_LEADER, ACCESS_MARINE_DROPSHIP)
assignment = JOB_SQUAD_LEADER
rank = JOB_SQUAD_LEADER
- paygrade = PAY_SHORT_ME5
+ paygrades = list(PAY_SHORT_ME5 = JOB_PLAYTIME_TIER_0)
role_comm_title = "SL"
skills = /datum/skills/SL
@@ -658,7 +658,7 @@
access = list(ACCESS_MARINE_PREP, ACCESS_MARINE_SPECPREP)
assignment = JOB_SQUAD_SPECIALIST
rank = JOB_SQUAD_SPECIALIST
- paygrade = PAY_SHORT_ME3
+ paygrades = list(PAY_SHORT_ME3 = JOB_PLAYTIME_TIER_0)
role_comm_title = "Spc"
skills = /datum/skills/specialist
@@ -693,7 +693,7 @@
access = list(ACCESS_MARINE_PREP, ACCESS_MARINE_SMARTPREP)
assignment = JOB_SQUAD_SMARTGUN
rank = JOB_SQUAD_SMARTGUN
- paygrade = PAY_SHORT_ME3
+ paygrades = list(PAY_SHORT_ME3 = JOB_PLAYTIME_TIER_0)
role_comm_title = "SG"
skills = /datum/skills/smartgunner
@@ -717,7 +717,7 @@
access = list(ACCESS_MARINE_PREP, ACCESS_MARINE_ENGPREP, ACCESS_CIVILIAN_ENGINEERING)
assignment = JOB_SQUAD_ENGI
rank = JOB_SQUAD_ENGI
- paygrade = PAY_SHORT_ME3
+ paygrades = list(PAY_SHORT_ME3 = JOB_PLAYTIME_TIER_0)
role_comm_title = "ComTech"
skills = /datum/skills/combat_engineer
@@ -751,7 +751,7 @@
access = list(ACCESS_MARINE_PREP, ACCESS_MARINE_MEDPREP, ACCESS_MARINE_MEDBAY)
assignment = JOB_SQUAD_MEDIC
rank = JOB_SQUAD_MEDIC
- paygrade = PAY_SHORT_ME3
+ paygrades = list(PAY_SHORT_ME3 = JOB_PLAYTIME_TIER_0)
role_comm_title = "HM"
skills = /datum/skills/combat_medic
@@ -789,7 +789,7 @@
access = list(ACCESS_MARINE_PREP)
assignment = JOB_SQUAD_MARINE
rank = JOB_SQUAD_MARINE
- paygrade = PAY_SHORT_ME2
+ paygrades = list(PAY_SHORT_ME2 = JOB_PLAYTIME_TIER_0)
role_comm_title = "RFN"
skills = /datum/skills/pfc
diff --git a/code/modules/gear_presets/wy.dm b/code/modules/gear_presets/wy.dm
index d492f9573b57..6cfccab00036 100644
--- a/code/modules/gear_presets/wy.dm
+++ b/code/modules/gear_presets/wy.dm
@@ -1,6 +1,6 @@
/datum/equipment_preset/wy
name = "WY"
- paygrade = PAY_SHORT_WYC1
+ paygrades = list(PAY_SHORT_WYC1 = JOB_PLAYTIME_TIER_0)
faction = FACTION_WY
rank = FACTION_WY
@@ -10,6 +10,74 @@
languages = list(LANGUAGE_ENGLISH, LANGUAGE_JAPANESE)
var/headset_type = /obj/item/device/radio/headset/distress/WY
+ dress_under = list(
+ /obj/item/clothing/under/liaison_suit/black,
+ /obj/item/clothing/under/liaison_suit/blue,
+ /obj/item/clothing/under/liaison_suit/brown,
+ /obj/item/clothing/under/liaison_suit/corporate_formal,
+ /obj/item/clothing/under/liaison_suit,
+ /obj/item/clothing/under/liaison_suit/charcoal,
+ /obj/item/clothing/under/liaison_suit/formal,
+ /obj/item/clothing/under/liaison_suit/blazer,
+ /obj/item/clothing/under/liaison_suit/suspenders,
+ /obj/item/clothing/under/blackskirt,
+ /obj/item/clothing/under/suit_jacket/trainee,
+ /obj/item/clothing/under/liaison_suit/ivy,
+ /obj/item/clothing/under/liaison_suit/orange,
+ /obj/item/clothing/under/liaison_suit/field,
+ /obj/item/clothing/under/colonist/workwear,
+ /obj/item/clothing/under/colonist/workwear/khaki,
+ /obj/item/clothing/under/colonist/workwear/pink,
+ /obj/item/clothing/under/colonist/workwear/green,
+ )
+ dress_over = list(
+ /obj/item/clothing/suit/storage/jacket/marine/corporate/black,
+ /obj/item/clothing/suit/storage/jacket/marine/corporate,
+ /obj/item/clothing/suit/storage/jacket/marine/corporate/brown,
+ /obj/item/clothing/suit/storage/jacket/marine/corporate/blue,
+ /obj/item/clothing/suit/storage/jacket/marine/corporate/black,
+ /obj/item/clothing/suit/storage/jacket/marine/bomber/grey,
+ /obj/item/clothing/suit/storage/jacket/marine/bomber/red,
+ /obj/item/clothing/suit/storage/jacket/marine/bomber,
+ /obj/item/clothing/suit/storage/bomber,
+ /obj/item/clothing/suit/storage/bomber/alt,
+ /obj/item/clothing/suit/storage/snow_suit/liaison,
+ /obj/item/clothing/suit/storage/labcoat,
+ /obj/item/clothing/suit/storage/jacket/marine/vest/grey,
+ /obj/item/clothing/suit/storage/jacket/marine/vest,
+ /obj/item/clothing/suit/storage/jacket/marine/vest/tan,
+ /obj/item/clothing/suit/storage/webbing,
+ )
+ dress_extra = list(
+ /obj/item/clothing/accessory/black,
+ /obj/item/clothing/accessory/red,
+ /obj/item/clothing/accessory/purple,
+ /obj/item/clothing/accessory/blue,
+ /obj/item/clothing/accessory/green,
+ /obj/item/clothing/accessory/gold,
+ /obj/item/clothing/accessory/horrible,
+ /obj/item/clothing/glasses/sunglasses/big,
+ /obj/item/clothing/glasses/sunglasses/aviator,
+ /obj/item/clothing/glasses/sunglasses,
+ /obj/item/clothing/glasses/sunglasses/prescription,
+ /obj/item/clothing/glasses/regular/hipster,
+ )
+ dress_gloves = list(
+ /obj/item/clothing/gloves/black,
+ /obj/item/clothing/gloves/marine/dress,
+ )
+ dress_shoes = list(
+ /obj/item/clothing/shoes/laceup,
+ /obj/item/clothing/shoes/laceup/brown,
+ /obj/item/clothing/shoes/black,
+ /obj/item/clothing/shoes/marine/corporate,
+ )
+ dress_hat = list(
+ /obj/item/clothing/head/fedora,
+ /obj/item/clothing/head/beret/cm/black/civilian,
+ /obj/item/clothing/head/beret/cm/white/civilian,
+ )
+
/datum/equipment_preset/wy/New()
. = ..()
access += get_access(ACCESS_LIST_WY_BASE)
@@ -29,7 +97,7 @@
flags = EQUIPMENT_PRESET_EXTRA
assignment = JOB_TRAINEE
rank = JOB_TRAINEE
- paygrade = PAY_SHORT_WYC1
+ paygrades = list(PAY_SHORT_WYC1 = JOB_PLAYTIME_TIER_0)
/datum/equipment_preset/wy/trainee/load_gear(mob/living/carbon/human/new_human)
new_human.equip_to_slot_or_del(new /obj/item/clothing/under/suit_jacket/trainee(new_human), WEAR_BODY)
@@ -40,28 +108,28 @@
flags = EQUIPMENT_PRESET_EXTRA
assignment = JOB_JUNIOR_EXECUTIVE
rank = JOB_JUNIOR_EXECUTIVE
- paygrade = PAY_SHORT_WYC2
+ paygrades = list(PAY_SHORT_WYC2 = JOB_PLAYTIME_TIER_0)
/datum/equipment_preset/wy/exec
name = "Corporate - C - Executive"
flags = EQUIPMENT_PRESET_EXTRA
assignment = JOB_EXECUTIVE
rank = JOB_EXECUTIVE
- paygrade = PAY_SHORT_WYC3
+ paygrades = list(PAY_SHORT_WYC3 = JOB_PLAYTIME_TIER_0)
/datum/equipment_preset/wy/senior_exec
name = "Corporate - D - Senior Executive"
flags = EQUIPMENT_PRESET_EXTRA
assignment = JOB_SENIOR_EXECUTIVE
rank = JOB_SENIOR_EXECUTIVE
- paygrade = PAY_SHORT_WYC4
+ paygrades = list(PAY_SHORT_WYC4 = JOB_PLAYTIME_TIER_0)
/datum/equipment_preset/wy/exec_spec
name = "Corporate - E - Executive Specialist"
flags = EQUIPMENT_PRESET_EXTRA
assignment = JOB_EXECUTIVE_SPECIALIST
rank = JOB_EXECUTIVE_SPECIALIST
- paygrade = PAY_SHORT_WYC5
+ paygrades = list(PAY_SHORT_WYC5 = JOB_PLAYTIME_TIER_0)
/datum/equipment_preset/wy/exec_spec/lawyer
name = "Corporate - E - Lawyer"
@@ -82,7 +150,7 @@
flags = EQUIPMENT_PRESET_EXTRA
assignment = JOB_EXECUTIVE_SUPERVISOR
rank = JOB_EXECUTIVE_SUPERVISOR
- paygrade = PAY_SHORT_WYC6
+ paygrades = list(PAY_SHORT_WYC6 = JOB_PLAYTIME_TIER_0)
/datum/equipment_preset/wy/exec_supervisor/lawyer
name = "Corporate - F - Lawyer"
@@ -120,21 +188,21 @@
flags = EQUIPMENT_PRESET_EXTRA
assignment = JOB_ASSISTANT_MANAGER
rank = JOB_ASSISTANT_MANAGER
- paygrade = PAY_SHORT_WYC7
+ paygrades = list(PAY_SHORT_WYC7 = JOB_PLAYTIME_TIER_0)
/datum/equipment_preset/wy/manager/division_manager
name = "Corporate - H - Division Manager"
flags = EQUIPMENT_PRESET_EXTRA
assignment = JOB_DIVISION_MANAGER
rank = JOB_DIVISION_MANAGER
- paygrade = PAY_SHORT_WYC8
+ paygrades = list(PAY_SHORT_WYC8 = JOB_PLAYTIME_TIER_0)
/datum/equipment_preset/wy/manager/chief_executive
name = "Corporate - I - Chief Executive"
flags = EQUIPMENT_PRESET_EXTRA
assignment = JOB_CHIEF_EXECUTIVE
rank = JOB_CHIEF_EXECUTIVE
- paygrade = PAY_SHORT_WYC9
+ paygrades = list(PAY_SHORT_WYC9 = JOB_PLAYTIME_TIER_0)
/datum/equipment_preset/wy/manager/chief_executive/New()
. = ..()
@@ -145,7 +213,7 @@
flags = EQUIPMENT_PRESET_EXTRA
assignment = JOB_DIRECTOR
rank = JOB_DIRECTOR
- paygrade = PAY_SHORT_WYC10
+ paygrades = list(PAY_SHORT_WYC10 = JOB_PLAYTIME_TIER_0)
skills = /datum/skills/civilian/manager/director
headset_type = /obj/item/device/radio/headset/distress/pmc/command/director
diff --git a/code/modules/gear_presets/wy_goons.dm b/code/modules/gear_presets/wy_goons.dm
index 9207b9d55a2d..a15e9b443302 100644
--- a/code/modules/gear_presets/wy_goons.dm
+++ b/code/modules/gear_presets/wy_goons.dm
@@ -61,7 +61,7 @@
assignment = JOB_WY_GOON
rank = JOB_WY_GOON
- paygrade = PAY_SHORT_CPO
+ paygrades = list(PAY_SHORT_CPO = JOB_PLAYTIME_TIER_0)
skills = /datum/skills/wy_goon
/datum/equipment_preset/goon/standard/load_gear(mob/living/carbon/human/new_human)
@@ -70,7 +70,7 @@
new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/veteran/pmc/light/corporate, WEAR_JACKET)
new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/veteran, WEAR_HANDS)
new_human.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/marine/veteran/pmc/corporate, WEAR_HEAD)
- new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/corporate, WEAR_FEET)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/corporate/knife, WEAR_FEET)
new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/lightpack, WEAR_BACK)
new_human.equip_to_slot_or_del(new /obj/item/weapon/baton, WEAR_IN_BACK)
@@ -94,7 +94,7 @@
assignment = JOB_WY_GOON_TECH
rank = JOB_WY_GOON_TECH
- paygrade = PAY_SHORT_CPO
+ paygrades = list(PAY_SHORT_CPO = JOB_PLAYTIME_TIER_0)
skills = /datum/skills/wy_goon_tech
/datum/equipment_preset/goon/engineer/load_gear(mob/living/carbon/human/new_human)
@@ -104,7 +104,7 @@
new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/veteran, WEAR_HANDS)
new_human.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/marine/veteran/pmc/corporate, WEAR_HEAD)
new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/welding, WEAR_EYES)
- new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/corporate, WEAR_FEET)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/corporate/knife, WEAR_FEET)
new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/marine/engineerpack/ert, WEAR_BACK)
new_human.equip_to_slot_or_del(new /obj/item/weapon/baton, WEAR_IN_BACK)
@@ -128,7 +128,7 @@
assignment = JOB_WY_GOON_LEAD
rank = JOB_WY_GOON_LEAD
- paygrade = PAY_SHORT_CSPO
+ paygrades = list(PAY_SHORT_CSPO = JOB_PLAYTIME_TIER_0)
skills = /datum/skills/wy_goon_lead
/datum/equipment_preset/goon/lead/New()
@@ -141,7 +141,7 @@
new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/veteran/pmc/light/corporate/lead, WEAR_JACKET)
new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/veteran, WEAR_HANDS)
new_human.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/marine/veteran/pmc/corporate/lead, WEAR_HEAD)
- new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/corporate, WEAR_FEET)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/corporate/knife, WEAR_FEET)
new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/lightpack, WEAR_BACK)
new_human.equip_to_slot_or_del(new /obj/item/weapon/baton, WEAR_IN_BACK)
@@ -164,15 +164,83 @@
assignment = JOB_WY_GOON_RESEARCHER
rank = JOB_WY_GOON_RESEARCHER
- paygrade = PAY_SHORT_CCMO
+ paygrades = list(PAY_SHORT_CCMO = JOB_PLAYTIME_TIER_0)
skills = /datum/skills/researcher
+ dress_under = list(
+ /obj/item/clothing/under/liaison_suit/black,
+ /obj/item/clothing/under/liaison_suit/blue,
+ /obj/item/clothing/under/liaison_suit/brown,
+ /obj/item/clothing/under/liaison_suit/corporate_formal,
+ /obj/item/clothing/under/liaison_suit,
+ /obj/item/clothing/under/liaison_suit/charcoal,
+ /obj/item/clothing/under/liaison_suit/formal,
+ /obj/item/clothing/under/liaison_suit/blazer,
+ /obj/item/clothing/under/liaison_suit/suspenders,
+ /obj/item/clothing/under/blackskirt,
+ /obj/item/clothing/under/suit_jacket/trainee,
+ /obj/item/clothing/under/liaison_suit/ivy,
+ /obj/item/clothing/under/liaison_suit/orange,
+ /obj/item/clothing/under/liaison_suit/field,
+ /obj/item/clothing/under/colonist/workwear,
+ /obj/item/clothing/under/colonist/workwear/khaki,
+ /obj/item/clothing/under/colonist/workwear/pink,
+ /obj/item/clothing/under/colonist/workwear/green,
+ )
+ dress_over = list(
+ /obj/item/clothing/suit/storage/jacket/marine/corporate/black,
+ /obj/item/clothing/suit/storage/jacket/marine/corporate,
+ /obj/item/clothing/suit/storage/jacket/marine/corporate/brown,
+ /obj/item/clothing/suit/storage/jacket/marine/corporate/blue,
+ /obj/item/clothing/suit/storage/jacket/marine/corporate/black,
+ /obj/item/clothing/suit/storage/jacket/marine/bomber/grey,
+ /obj/item/clothing/suit/storage/jacket/marine/bomber/red,
+ /obj/item/clothing/suit/storage/jacket/marine/bomber,
+ /obj/item/clothing/suit/storage/bomber,
+ /obj/item/clothing/suit/storage/bomber/alt,
+ /obj/item/clothing/suit/storage/snow_suit/liaison,
+ /obj/item/clothing/suit/storage/labcoat,
+ /obj/item/clothing/suit/storage/jacket/marine/vest/grey,
+ /obj/item/clothing/suit/storage/jacket/marine/vest,
+ /obj/item/clothing/suit/storage/jacket/marine/vest/tan,
+ /obj/item/clothing/suit/storage/webbing,
+ )
+ dress_extra = list(
+ /obj/item/clothing/accessory/black,
+ /obj/item/clothing/accessory/red,
+ /obj/item/clothing/accessory/purple,
+ /obj/item/clothing/accessory/blue,
+ /obj/item/clothing/accessory/green,
+ /obj/item/clothing/accessory/gold,
+ /obj/item/clothing/accessory/horrible,
+ /obj/item/clothing/glasses/sunglasses/big,
+ /obj/item/clothing/glasses/sunglasses/aviator,
+ /obj/item/clothing/glasses/sunglasses,
+ /obj/item/clothing/glasses/sunglasses/prescription,
+ /obj/item/clothing/glasses/regular/hipster,
+ )
+ dress_gloves = list(
+ /obj/item/clothing/gloves/black,
+ /obj/item/clothing/gloves/marine/dress,
+ )
+ dress_shoes = list(
+ /obj/item/clothing/shoes/laceup,
+ /obj/item/clothing/shoes/laceup/brown,
+ /obj/item/clothing/shoes/black,
+ /obj/item/clothing/shoes/marine/corporate,
+ )
+ dress_hat = list(
+ /obj/item/clothing/head/fedora,
+ /obj/item/clothing/head/beret/cm/black/civilian,
+ /obj/item/clothing/head/beret/cm/white/civilian,
+ )
+
/datum/equipment_preset/goon/researcher/load_gear(mob/living/carbon/human/new_human)
new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/WY, WEAR_L_EAR)
new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/science, WEAR_EYES)
new_human.equip_to_slot_or_del(new /obj/item/clothing/under/liaison_suit/corporate_formal, WEAR_BODY)
new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/labcoat, WEAR_JACKET)
- new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/corporate, WEAR_FEET)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/corporate/knife, WEAR_FEET)
new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/lightpack, WEAR_BACK)
new_human.equip_to_slot_or_del(new /obj/item/handheld_distress_beacon, WEAR_IN_BACK)
diff --git a/code/modules/law/laws/major_crime.dm b/code/modules/law/laws/major_crime.dm
index 58b30dfd6ce1..94ee72e869e1 100644
--- a/code/modules/law/laws/major_crime.dm
+++ b/code/modules/law/laws/major_crime.dm
@@ -38,9 +38,15 @@
desc = "Failure to perform one’s role to an acceptable standard. For example, a Commanding Officer failing to properly organize and ensure their personnel are given orders, failing to follow proper procedure in detriment of one’s duties, or ship crew leaving the ship without authorization from the Commanding Officer or their Department Head. Any officer who commits a crime may be charged with Neglect of Duty in addition to the appropriate crimes."
brig_time = 15
+/datum/law/major_law/listening_bugs
+ name = "Unauthorized use of a Listening Device"
+ desc = "Using a listening device against SOP in a secure area such as the CIC. Use of listening devices tied to foreign governments or terror organisations is also considered subterfuge."
+ special_punishment = "Listening Device Confiscation"
+ brig_time = 15
+
/datum/law/major_law/subterfuge
name = "Subterfuge"
- desc = "Carrying out objectives or being tied to material that describe planned actions that go against the USCM. Strong proof is required that the individual is working against USCM."
+ desc = "Carrying out objectives or being tied to material that describe planned actions that go against the USCM. Strong proof is required that the individual is working against USCM. Use of listening devices tied to foreign governments or terror organisations in secure areas is also considered subterfuge."
special_punishment = "Termination of ID/Discharge to planet"
brig_time = 15
diff --git a/code/modules/law/laws/minor_crime.dm b/code/modules/law/laws/minor_crime.dm
index 651b9dd42d4f..e797c61d486d 100644
--- a/code/modules/law/laws/minor_crime.dm
+++ b/code/modules/law/laws/minor_crime.dm
@@ -29,6 +29,12 @@
special_punishment = "Escort Out"
brig_time = 7.5
+/datum/law/minor_law/listening_bugs
+ name = "Unauthorized use of a Listening Device"
+ desc = "Using a listening device against SOP in a public area such as the gym."
+ special_punishment = "Listening Device Confiscation"
+ brig_time = 7.5
+
/datum/law/minor_law/disrespect
name = "Disrespecting a Superior Officer"
desc = "Using offensive names or being directly disrespectful to someone of a Commissioned Officer of higher rank or position."
diff --git a/code/modules/mob/dead/observer/orbit.dm b/code/modules/mob/dead/observer/orbit.dm
index 4bc4abf7036c..8c8d653331c9 100644
--- a/code/modules/mob/dead/observer/orbit.dm
+++ b/code/modules/mob/dead/observer/orbit.dm
@@ -144,7 +144,7 @@
else
serialized["background_color"] = human.assigned_equipment_preset?.minimap_background
- if(SSticker.mode.is_in_endgame == TRUE && !is_mainship_level(M.z) && !(human.faction in FACTION_LIST_ERT))
+ if(SSticker.mode.is_in_endgame == TRUE && !is_mainship_level(M.z) && !(human.faction in FACTION_LIST_ERT_ALL))
escaped += list(serialized)
else if(human.faction in FACTION_LIST_WY)
wy += list(serialized)
@@ -152,7 +152,7 @@
synthetics += list(serialized)
else if(isyautja(human))
predators += list(serialized)
- else if(human.faction in FACTION_LIST_ERT)
+ else if(human.faction in FACTION_LIST_ERT_OTHER)
ert_members += list(serialized)
else if(human.faction in FACTION_LIST_UPP)
upp += list(serialized)
diff --git a/code/modules/mob/dead/observer/say.dm b/code/modules/mob/dead/observer/say.dm
index b9a972bda5c2..04e93095f42d 100644
--- a/code/modules/mob/dead/observer/say.dm
+++ b/code/modules/mob/dead/observer/say.dm
@@ -12,6 +12,9 @@
if (src.client.handle_spam_prevention(message, MUTE_DEADCHAT))
return
+ if(!filter_message(client, message))
+ return
+
. = src.say_dead(message)
diff --git a/code/modules/mob/inventory.dm b/code/modules/mob/inventory.dm
index e1c3bf49af8a..286645fc7001 100644
--- a/code/modules/mob/inventory.dm
+++ b/code/modules/mob/inventory.dm
@@ -164,8 +164,7 @@
if(pickup_recent_item_on_turf(user_turf))
return
- var/range_list = orange(1, src)
- for(var/turf/nearby_turf in range_list)
+ for(var/turf/nearby_turf in orange(1, src))
if(pickup_recent_item_on_turf(nearby_turf))
return
diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm
index 36d2518d7e75..993042a14a2b 100644
--- a/code/modules/mob/living/carbon/carbon.dm
+++ b/code/modules/mob/living/carbon/carbon.dm
@@ -74,7 +74,7 @@
/mob/living/carbon/ex_act(severity, direction, datum/cause_data/cause_data)
- if(body_position == LYING_DOWN)
+ if(body_position == LYING_DOWN && direction)
severity *= EXPLOSION_PRONE_MULTIPLIER
if(severity >= 30)
@@ -379,7 +379,7 @@
if(!lastarea)
lastarea = get_area(src.loc)
- if((istype(loc, /turf/open/space)) || !lastarea.has_gravity)
+ if(istype(loc, /turf/open/space))
inertia_dir = get_dir(target, src)
step(src, inertia_dir)
@@ -388,9 +388,17 @@
if(!do_after(src, 1 SECONDS, INTERRUPT_ALL, BUSY_ICON_HOSTILE))
to_chat(src, SPAN_WARNING("You need to set up the high toss!"))
return
+ animation_attack_on(target, 6)
+ //The volume of the sound takes the minimum between the distance thrown or the max range an item, but no more than 15. Short throws are quieter. Invisible mobs do no sound.
+ if(alpha >= 50)
+ playsound(src, "throwing", min(5*min(get_dist(loc,target),thrown_thing.throw_range), 15), vary = TRUE, sound_range = 6)
drop_inv_item_on_ground(I, TRUE)
thrown_thing.throw_atom(target, thrown_thing.throw_range, SPEED_SLOW, src, spin_throw, HIGH_LAUNCH)
else
+ animation_attack_on(target, 6)
+ //The volume of the sound takes the minimum between the distance thrown or the max range an item, but no more than 15. Short throws are quieter. Invisible mobs do no sound.
+ if(alpha >= 50)
+ playsound(src, "throwing", min(5*min(get_dist(loc,target),thrown_thing.throw_range), 15), vary = TRUE, sound_range = 6)
drop_inv_item_on_ground(I, TRUE)
thrown_thing.throw_atom(target, thrown_thing.throw_range, thrown_thing.throw_speed, src, spin_throw)
@@ -504,7 +512,7 @@
last_special = world.time + 100
visible_message(SPAN_DANGER("[src] attempts to unbuckle themself! "),\
SPAN_DANGER("You attempt to unbuckle yourself. (This will take around 2 minutes and you need to stand still)"))
- if(do_after(src, 1200, INTERRUPT_ALL^INTERRUPT_RESIST, BUSY_ICON_HOSTILE))
+ if(do_after(src, 1200, INTERRUPT_NO_FLOORED^INTERRUPT_RESIST, BUSY_ICON_HOSTILE))
if(!buckled)
return
visible_message(SPAN_DANGER("[src] manages to unbuckle themself! "),\
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index 2c5ddf44b3ee..0a6a42d09ba5 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -133,7 +133,7 @@
. += "Self Destruct Status: [SShijack.get_sd_eta()]"
/mob/living/carbon/human/ex_act(severity, direction, datum/cause_data/cause_data)
- if(body_position == LYING_DOWN)
+ if(body_position == LYING_DOWN && direction)
severity *= EXPLOSION_PRONE_MULTIPLIER
@@ -943,6 +943,11 @@
..()
+/// Returns whether this person has a broken heart but is otherwise revivable
+/mob/living/carbon/human/proc/is_heart_broken()
+ var/datum/internal_organ/heart/heart = internal_organs_by_name["heart"]
+ return heart && heart.organ_status >= ORGAN_BROKEN && check_tod() && is_revivable(ignore_heart = TRUE)
+
/mob/living/carbon/human/proc/is_lung_ruptured()
var/datum/internal_organ/lungs/L = internal_organs_by_name["lungs"]
return L && L.organ_status >= ORGAN_BRUISED
@@ -954,7 +959,6 @@
src.custom_pain("You feel a stabbing pain in your chest!", 1)
L.damage = L.min_bruised_damage
-
/mob/living/carbon/human/get_visible_implants(class = 0)
var/list/visible_objects = list()
for(var/obj/item/W in embedded_items)
@@ -1038,7 +1042,7 @@
show_browser(src, dat, "Crew Manifest", "manifest", "size=400x750")
/mob/living/carbon/human/verb/view_objective_memory()
- set name = "View objectives"
+ set name = "View intel objectives"
set category = "IC"
if(!mind)
@@ -1059,7 +1063,7 @@
to_chat(src, "The game appears to have misplaced your mind datum.")
return
- if(!skillcheck(usr, SKILL_RESEARCH, SKILL_RESEARCH_TRAINED) || faction != FACTION_MARINE && !(faction in FACTION_LIST_WY))
+ if(!skillcheck(usr, SKILL_RESEARCH, SKILL_RESEARCH_TRAINED) || !(FACTION_MARINE in get_id_faction_group()))
to_chat(usr, SPAN_WARNING("You have no access to the [MAIN_SHIP_NAME] research network."))
return
diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm
index e44106d90abb..0bb446bf5f02 100644
--- a/code/modules/mob/living/carbon/human/human_defines.dm
+++ b/code/modules/mob/living/carbon/human/human_defines.dm
@@ -1,6 +1,7 @@
/mob/living/carbon/human
light_system = MOVABLE_LIGHT
rotate_on_lying = TRUE
+ blocks_emissive = EMISSIVE_BLOCK_UNIQUE
//Hair color and style
var/r_hair = 0
var/g_hair = 0
diff --git a/code/modules/mob/living/carbon/human/inventory.dm b/code/modules/mob/living/carbon/human/inventory.dm
index 3f419333d218..733f330b051f 100644
--- a/code/modules/mob/living/carbon/human/inventory.dm
+++ b/code/modules/mob/living/carbon/human/inventory.dm
@@ -109,6 +109,8 @@
if(I == wear_suit)
if(s_store && !(s_store.flags_equip_slot & SLOT_SUIT_STORE))
drop_inv_item_on_ground(s_store)
+ if(back && (back.flags_item & SMARTGUNNER_BACKPACK_OVERRIDE)) // Technically some items don't need to be unequipped though
+ drop_inv_item_on_ground(back)
wear_suit = null
if(I.flags_inv_hide & HIDESHOES)
update_inv_shoes()
@@ -412,6 +414,8 @@
/mob/living/carbon/human/get_item_by_slot(slot_id)
switch(slot_id)
+ if(WEAR_ACCESSORY)
+ return w_uniform.accessories
if(WEAR_BACK)
return back
if(WEAR_FACE)
diff --git a/code/modules/mob/living/carbon/human/life/handle_grabbed.dm b/code/modules/mob/living/carbon/human/life/handle_grabbed.dm
index 14d22557417f..0c588da7ca4b 100644
--- a/code/modules/mob/living/carbon/human/life/handle_grabbed.dm
+++ b/code/modules/mob/living/carbon/human/life/handle_grabbed.dm
@@ -9,3 +9,7 @@
if(pulledby.grab_level >= GRAB_CHOKE)
apply_damage(3, OXY)
apply_stamina_damage(5)
+
+ log_attack("[key_name(pulledby)] choked [key_name(src)] at [get_area_name(src)]")
+ attack_log += text("\[[time_stamp()]\] was choked by [key_name(pulledby)] ")
+ pulledby.attack_log += text("\[[time_stamp()]\] choked [key_name(src)] ")
diff --git a/code/modules/mob/living/carbon/human/say.dm b/code/modules/mob/living/carbon/human/say.dm
index c95efd8a2995..c0083181fcf2 100644
--- a/code/modules/mob/living/carbon/human/say.dm
+++ b/code/modules/mob/living/carbon/human/say.dm
@@ -134,9 +134,10 @@
return
if(RADIO_CHANNEL_INTERCOM)
message_mode = null
- for(var/obj/item/device/radio/intercom/I in view(1))
+ FOR_DVIEW(var/obj/item/device/radio/intercom/I, 1, src, HIDE_INVISIBLE_OBSERVER)
used_radios += I
break // remove this if we EVER have two different intercomms with DIFFERENT frequencies IN ONE ROOM
+ FOR_DVIEW_END
else
if(message_mode != MESSAGE_MODE_LOCAL)
var/earpiece = get_type_in_ears(/obj/item/device/radio)
diff --git a/code/modules/mob/living/carbon/human/species/zombie.dm b/code/modules/mob/living/carbon/human/species/zombie.dm
index 4e8a0b5e98e2..21a220e48e55 100644
--- a/code/modules/mob/living/carbon/human/species/zombie.dm
+++ b/code/modules/mob/living/carbon/human/species/zombie.dm
@@ -127,7 +127,7 @@
/datum/species/zombie/proc/handle_alert_ghost(mob/living/carbon/human/zombie)
var/mob/dead/observer/ghost = zombie.get_ghost()
if(ghost?.client)
- playsound_client(ghost.client, 'sound/effects/adminhelp_new.ogg')
+ playsound_client(ghost.client, 'sound/effects/revive_notify.ogg')
to_chat(ghost, SPAN_BOLDNOTICE(FONT_SIZE_LARGE("Your body has risen! (Verbs -> Ghost -> Re-enter corpse, or click here! )")))
/datum/species/zombie/proc/remove_from_revive(mob/living/carbon/human/zombie)
diff --git a/code/modules/mob/living/carbon/human/whisper.dm b/code/modules/mob/living/carbon/human/whisper.dm
index eb5ec949cece..cd4a08aefef7 100644
--- a/code/modules/mob/living/carbon/human/whisper.dm
+++ b/code/modules/mob/living/carbon/human/whisper.dm
@@ -79,10 +79,11 @@
listening += C
//pass on the message to objects that can hear us.
- for (var/obj/O in view(message_range, src))
+ FOR_DVIEW(var/obj/O, message_range, src, HIDE_INVISIBLE_OBSERVER)
spawn (0)
if (O)
O.hear_talk(src, message) //O.hear_talk(src, message, verb, speaking)
+ FOR_DVIEW_END
var/list/eavesdropping = hearers(eavesdropping_range, src)
eavesdropping -= src
diff --git a/code/modules/mob/living/carbon/xenomorph/Abilities.dm b/code/modules/mob/living/carbon/xenomorph/Abilities.dm
index 09b99871e936..6c220f41ad45 100644
--- a/code/modules/mob/living/carbon/xenomorph/Abilities.dm
+++ b/code/modules/mob/living/carbon/xenomorph/Abilities.dm
@@ -37,6 +37,10 @@
to_chat(X, SPAN_XENOWARNING("There already is a tunnel here."))
return
+ if(locate(/obj/structure/machinery/sentry_holder/landing_zone) in X.loc)
+ to_chat(X, SPAN_XENOWARNING("We can't dig a tunnel with this object in the way."))
+ return
+
if(X.tunnel_delay)
to_chat(X, SPAN_XENOWARNING("We are not ready to dig a tunnel again."))
return
@@ -140,16 +144,18 @@
xeno.visible_message(SPAN_XENOHIGHDANGER("[xeno] emits an ear-splitting guttural roar!"))
xeno.create_shriekwave(14) //Adds the visual effect. Wom wom wom, 14 shriekwaves
- for(var/mob/mob in view())
+ FOR_DVIEW(var/mob/mob, world.view, owner, HIDE_INVISIBLE_OBSERVER)
if(mob && mob.client)
if(isxeno(mob))
shake_camera(mob, 10, 1)
else
shake_camera(mob, 30, 1) //50 deciseconds, SORRY 5 seconds was way too long. 3 seconds now
+ FOR_DVIEW_END
var/list/mobs_in_view = list()
- for(var/mob/living/carbon/M in oview(7, xeno))
+ FOR_DOVIEW(var/mob/living/carbon/M, 7, xeno, HIDE_INVISIBLE_OBSERVER)
mobs_in_view += M
+ FOR_DOVIEW_END
for(var/mob/living/carbon/M in orange(10, xeno))
if(SEND_SIGNAL(M, COMSIG_MOB_SCREECH_ACT, xeno) & COMPONENT_SCREECH_ACT_CANCEL)
continue
@@ -243,7 +249,7 @@
var/whisper = strip_html(input("Message:", "Psychic Radiance") as text|null)
if(!whisper || !xeno_player.check_state(TRUE))
return
- for(var/mob/living/possible_target in view(12, xeno_player))
+ FOR_DVIEW(var/mob/living/possible_target, 12, xeno_player, HIDE_INVISIBLE_OBSERVER)
if(possible_target == xeno_player || !possible_target.client)
continue
target_list += possible_target
@@ -251,6 +257,7 @@
to_chat(possible_target, SPAN_XENOQUEEN("You hear a strange, alien voice in your head. \"[whisper]\""))
else
to_chat(possible_target, SPAN_XENOQUEEN("You hear the voice of [xeno_player] resonate in your head. \"[whisper]\""))
+ FOR_DVIEW_END
if(!length(target_list))
return
var/targetstring = english_list(target_list)
diff --git a/code/modules/mob/living/carbon/xenomorph/XenoProcs.dm b/code/modules/mob/living/carbon/xenomorph/XenoProcs.dm
index e7320b17c333..baf69a54e16e 100644
--- a/code/modules/mob/living/carbon/xenomorph/XenoProcs.dm
+++ b/code/modules/mob/living/carbon/xenomorph/XenoProcs.dm
@@ -408,7 +408,7 @@
else
to_chat(src, SPAN_WARNING("There's nothing in our belly that needs regurgitating."))
-/mob/living/carbon/xenomorph/proc/check_alien_construction(turf/current_turf, check_blockers = TRUE, silent = FALSE, check_doors = TRUE)
+/mob/living/carbon/xenomorph/proc/check_alien_construction(turf/current_turf, check_blockers = TRUE, silent = FALSE, check_doors = TRUE, ignore_nest = FALSE)
var/has_obstacle
for(var/obj/O in current_turf)
if(check_blockers && istype(O, /obj/effect/build_blocker))
@@ -447,6 +447,8 @@
if(P.chair_state != DROPSHIP_CHAIR_BROKEN)
has_obstacle = TRUE
break
+ else if(istype(O, /obj/structure/bed/nest) && ignore_nest)
+ continue
else
has_obstacle = TRUE
break
diff --git a/code/modules/mob/living/carbon/xenomorph/abilities/ability_helper_procs.dm b/code/modules/mob/living/carbon/xenomorph/abilities/ability_helper_procs.dm
index 87657af5ce7a..7e9504260209 100644
--- a/code/modules/mob/living/carbon/xenomorph/abilities/ability_helper_procs.dm
+++ b/code/modules/mob/living/carbon/xenomorph/abilities/ability_helper_procs.dm
@@ -21,9 +21,9 @@
var/wait_time = 10
- var/turf/T = get_turf(O)
+ var/turf/turf = get_turf(O)
- for(var/obj/effect/xenomorph/acid/A in T)
+ for(var/obj/effect/xenomorph/acid/A in turf)
if(acid_type == A.type && A.acid_t == O)
to_chat(src, SPAN_WARNING("[A] is already drenched in acid."))
return
@@ -47,22 +47,22 @@
to_chat(src, SPAN_WARNING("[O] is already weakened."))
return
- var/dissolvability = T.can_be_dissolved()
+ var/dissolvability = turf.can_be_dissolved()
switch(dissolvability)
if(0)
- to_chat(src, SPAN_WARNING("We cannot dissolve [T]."))
+ to_chat(src, SPAN_WARNING("We cannot dissolve [turf]."))
return
if(1)
wait_time = 50
if(2)
if(acid_type != /obj/effect/xenomorph/acid/strong)
- to_chat(src, SPAN_WARNING("This [T.name] is too tough to be melted by our weak acid."))
+ to_chat(src, SPAN_WARNING("This [turf.name] is too tough to be melted by our weak acid."))
return
wait_time = 100
else
return
- if(istype(T, /turf/closed/wall))
- var/turf/closed/wall/W = T
+ if(istype(turf, /turf/closed/wall))
+ var/turf/closed/wall/W = turf
// Direction from wall to the mob generating acid on the wall turf
var/ambiguous_dir_msg = SPAN_XENOWARNING("We are unsure which direction to melt through [W]. Face it directly and try again.")
@@ -92,7 +92,7 @@
var/acided_hole_type = W.acided_hole_dir & (EAST|WEST) ? "a hole horizontally" : "a hole vertically"
to_chat(src, SPAN_XENOWARNING("We begin generating enough acid to melt [acided_hole_type] through [W]."))
else
- to_chat(src, SPAN_XENOWARNING("We begin generating enough acid to melt through [T]."))
+ to_chat(src, SPAN_XENOWARNING("We begin generating enough acid to melt through [turf]."))
else
to_chat(src, SPAN_WARNING("You cannot dissolve [O]."))
return
@@ -101,7 +101,7 @@
return
// AGAIN BECAUSE SOMETHING COULD'VE ACIDED THE PLACE
- for(var/obj/effect/xenomorph/acid/A in T)
+ for(var/obj/effect/xenomorph/acid/A in turf)
if(acid_type == A.type && A.acid_t == O)
to_chat(src, SPAN_WARNING("[A] is already drenched in acid."))
return
@@ -131,7 +131,7 @@
use_plasma(plasma_cost)
- var/obj/effect/xenomorph/acid/A = new acid_type(T, O)
+ var/obj/effect/xenomorph/acid/A = new acid_type(turf, O)
if(istype(O, /obj/vehicle/multitile))
var/obj/vehicle/multitile/R = O
@@ -167,8 +167,8 @@
REMOVE_TRAIT(H, TRAIT_IMMOBILIZED, trait_source)
if(ishuman(H))
- var/mob/living/carbon/human/T = H
- T.update_xeno_hostile_hud()
+ var/mob/living/carbon/human/turf = H
+ turf.update_xeno_hostile_hud()
to_chat(H, SPAN_XENOHIGHDANGER("We can move again!"))
/mob/living/carbon/xenomorph/proc/zoom_in()
@@ -215,28 +215,28 @@
action.on_zoom_out()
return
-/mob/living/carbon/xenomorph/proc/do_acid_spray_cone(turf/T, spray_type = /obj/effect/xenomorph/spray, range = 3)
+/mob/living/carbon/xenomorph/proc/do_acid_spray_cone(turf/turf, spray_type = /obj/effect/xenomorph/spray, range = 3)
set waitfor = FALSE
- var/facing = get_cardinal_dir(src, T)
+ var/facing = get_cardinal_dir(src, turf)
setDir(facing)
- T = loc
+ turf = loc
for(var/i in 0 to range - 1)
- var/turf/next_turf = get_step(T, facing)
+ var/turf/next_turf = get_step(turf, facing)
var/atom/movable/temp = new/obj/effect/xenomorph/spray()
- var/atom/movable/AM = LinkBlocked(temp, T, next_turf)
+ var/atom/movable/AM = LinkBlocked(temp, turf, next_turf)
qdel(temp)
if(AM)
AM.acid_spray_act(src)
return
- T = next_turf
- var/obj/effect/xenomorph/spray/S = new spray_type(T, create_cause_data(initial( caste_type), src), hivenumber)
- do_acid_spray_cone_normal(T, i, facing, S, spray_type)
+ turf = next_turf
+ var/obj/effect/xenomorph/spray/S = new spray_type(turf, create_cause_data(initial( caste_type), src), hivenumber)
+ do_acid_spray_cone_normal(turf, i, facing, S, spray_type)
sleep(2)
// Normal refers to the mathematical normal
-/mob/living/carbon/xenomorph/proc/do_acid_spray_cone_normal(turf/T, distance, facing, obj/effect/xenomorph/spray/source_spray, spray_type = /obj/effect/xenomorph/spray)
+/mob/living/carbon/xenomorph/proc/do_acid_spray_cone_normal(turf/turf, distance, facing, obj/effect/xenomorph/spray/source_spray, spray_type = /obj/effect/xenomorph/spray)
if(!distance)
return
@@ -246,8 +246,8 @@
var/normal_dir = turn(facing, 90)
var/inverse_normal_dir = turn(facing, -90)
- var/turf/normal_turf = T
- var/turf/inverse_normal_turf = T
+ var/turf/normal_turf = turf
+ var/turf/inverse_normal_turf = turf
var/normal_density_flag = FALSE
var/inverse_normal_density_flag = FALSE
@@ -286,27 +286,26 @@
var/turf/prev_turf = loc
var/distance = 0
- for(var/turf/T in turflist)
+ for(var/turf/turf in turflist)
distance++
if(!prev_turf && length(turflist) > 1)
prev_turf = get_turf(src)
continue //So we don't burn the tile we be standin on
- if(T.density || istype(T, /turf/open/space))
+ if(turf.density || istype(turf, /turf/open/space))
break
if(distance > distance_max)
break
-
var/atom/movable/temp = new spray_path()
- var/atom/movable/AM = LinkBlocked(temp, prev_turf, T)
+ var/atom/movable/blocker = LinkBlocked(temp, prev_turf, turf)
qdel(temp)
- if(AM)
- AM.acid_spray_act(src)
+ if(blocker)
+ blocker.acid_spray_act(src)
break
- prev_turf = T
- new spray_path(T, create_cause_data(initial(caste_type), src), hivenumber)
+ prev_turf = turf
+ new spray_path(turf, create_cause_data(initial(caste_type), src), hivenumber)
sleep(2)
diff --git a/code/modules/mob/living/carbon/xenomorph/abilities/general_powers.dm b/code/modules/mob/living/carbon/xenomorph/abilities/general_powers.dm
index 843cfeac540b..3b744014c8f8 100644
--- a/code/modules/mob/living/carbon/xenomorph/abilities/general_powers.dm
+++ b/code/modules/mob/living/carbon/xenomorph/abilities/general_powers.dm
@@ -709,11 +709,11 @@
/datum/action/xeno_action/activable/place_construction/proc/spacecheck(mob/living/carbon/xenomorph/X, turf/T, datum/construction_template/xenomorph/tem)
if(tem.block_range)
for(var/turf/TA in range(tem.block_range, T))
- if(!X.check_alien_construction(TA, FALSE, TRUE))
+ if(!X.check_alien_construction(TA, FALSE, TRUE, ignore_nest = TRUE))
to_chat(X, SPAN_WARNING("We need more open space to build here."))
qdel(tem)
return FALSE
- if(!X.check_alien_construction(T))
+ if(!X.check_alien_construction(T, ignore_nest = TRUE))
to_chat(X, SPAN_WARNING("We need more open space to build here."))
qdel(tem)
return FALSE
diff --git a/code/modules/mob/living/carbon/xenomorph/abilities/predalien/predalien_abilities.dm b/code/modules/mob/living/carbon/xenomorph/abilities/predalien/predalien_abilities.dm
index b1358e30c26b..cc89a86d38e0 100644
--- a/code/modules/mob/living/carbon/xenomorph/abilities/predalien/predalien_abilities.dm
+++ b/code/modules/mob/living/carbon/xenomorph/abilities/predalien/predalien_abilities.dm
@@ -41,11 +41,10 @@
// Configurables
var/grab_range = 4
- var/click_miss_cooldown = 15
var/twitch_message_cooldown = 0 //apparently this is necessary for a tiny code that makes the lunge message on cooldown not be spammable, doesn't need to be big so 5 will do.
var/smash_damage = 20
var/smash_scale = 10
- var/stun_duration = 2 SECONDS
+ var/stun_duration = 3 SECONDS
/datum/action/xeno_action/activable/feralfrenzy
name = "Feral Frenzy"
diff --git a/code/modules/mob/living/carbon/xenomorph/abilities/predalien/predalien_powers.dm b/code/modules/mob/living/carbon/xenomorph/abilities/predalien/predalien_powers.dm
index a240c3928a3c..41445a8fc602 100644
--- a/code/modules/mob/living/carbon/xenomorph/abilities/predalien/predalien_powers.dm
+++ b/code/modules/mob/living/carbon/xenomorph/abilities/predalien/predalien_powers.dm
@@ -13,7 +13,7 @@
playsound(xeno.loc, pick(predalien_roar), 75, 0, status = 0)
xeno.visible_message(SPAN_XENOHIGHDANGER("[xeno] emits a guttural roar!"))
xeno.create_shriekwave(7) //Adds the visual effect. Wom wom wom, 7 shriekwaves
- for(var/mob/living/carbon/carbon in view(7, xeno))
+ FOR_DVIEW(var/mob/living/carbon/carbon, 7, xeno, HIDE_INVISIBLE_OBSERVER)
if(ishuman(carbon))
var/mob/living/carbon/human/human = carbon
human.disable_special_items()
@@ -29,6 +29,7 @@
if(!istype(behavior))
continue
new /datum/effects/xeno_buff(carbon, xeno, ttl = (0.25 SECONDS * behavior.kills + 3 SECONDS), bonus_damage = bonus_damage_scale * behavior.kills, bonus_speed = (bonus_speed_scale * behavior.kills))
+ FOR_DVIEW_END
apply_cooldown()
return ..()
@@ -219,7 +220,6 @@
return
if(predalien_smash.can_not_harm(affected_atom) || !ismob(affected_atom))
- apply_cooldown_override(click_miss_cooldown)
return
diff --git a/code/modules/mob/living/carbon/xenomorph/attack_alien.dm b/code/modules/mob/living/carbon/xenomorph/attack_alien.dm
index de0cefeea76d..63ade0cbbe3d 100644
--- a/code/modules/mob/living/carbon/xenomorph/attack_alien.dm
+++ b/code/modules/mob/living/carbon/xenomorph/attack_alien.dm
@@ -798,6 +798,8 @@
var/ship_id = "sh_dropship1"
if(shuttle_tag == DROPSHIP_NORMANDY)
ship_id = "sh_dropship2"
+ if(shuttle_tag == DROPSHIP_SAIPAN)
+ ship_id = "sh_dropship3"
for(var/obj/structure/machinery/door/airlock/dropship_hatch/D in GLOB.machines)
if(D.id == ship_id)
diff --git a/code/modules/mob/living/carbon/xenomorph/castes/Queen.dm b/code/modules/mob/living/carbon/xenomorph/castes/Queen.dm
index 5b9c410e235a..db682e161e87 100644
--- a/code/modules/mob/living/carbon/xenomorph/castes/Queen.dm
+++ b/code/modules/mob/living/carbon/xenomorph/castes/Queen.dm
@@ -361,6 +361,10 @@
/mob/living/carbon/xenomorph/queen/can_destroy_special()
return TRUE
+/mob/living/carbon/xenomorph/queen/set_resting(new_resting, silent, instant)
+ if(ovipositor)
+ return
+ return ..()
/mob/living/carbon/xenomorph/queen/get_organ_icon()
return "heart_t3"
@@ -809,10 +813,10 @@
/mob/living/carbon/xenomorph/queen/proc/mount_ovipositor()
if(ovipositor)
return //sanity check
- ovipositor = TRUE
ADD_TRAIT(src, TRAIT_IMMOBILIZED, OVIPOSITOR_TRAIT)
set_body_position(STANDING_UP)
set_resting(FALSE)
+ ovipositor = TRUE
set_resin_build_order(GLOB.resin_build_order_ovipositor) // This needs to occur before we update the abilities so we can update the choose resin icon
for(var/datum/action/xeno_action/action in actions)
diff --git a/code/modules/mob/living/carbon/xenomorph/damage_procs.dm b/code/modules/mob/living/carbon/xenomorph/damage_procs.dm
index 4c97ce20b4eb..9d4de90072aa 100644
--- a/code/modules/mob/living/carbon/xenomorph/damage_procs.dm
+++ b/code/modules/mob/living/carbon/xenomorph/damage_procs.dm
@@ -46,7 +46,7 @@
/mob/living/carbon/xenomorph/ex_act(severity, direction, datum/cause_data/cause_data, pierce=0)
- if(body_position == LYING_DOWN)
+ if(body_position == LYING_DOWN && direction)
severity *= EXPLOSION_PRONE_MULTIPLIER
if(severity >= 30)
diff --git a/code/modules/mob/living/carbon/xenomorph/strains/castes/drone/healer.dm b/code/modules/mob/living/carbon/xenomorph/strains/castes/drone/healer.dm
index 7ceaf2fed75e..1914b2c24b2b 100644
--- a/code/modules/mob/living/carbon/xenomorph/strains/castes/drone/healer.dm
+++ b/code/modules/mob/living/carbon/xenomorph/strains/castes/drone/healer.dm
@@ -58,10 +58,14 @@
macro_path = /datum/action/xeno_action/verb/verb_apply_salve
action_type = XENO_ACTION_CLICK
ability_primacy = XENO_PRIMARY_ACTION_3
+ xeno_cooldown = 0.5 SECONDS
/datum/action/xeno_action/activable/apply_salve/use_ability(atom/target_atom)
+ if(!action_cooldown_check())
+ return
var/mob/living/carbon/xenomorph/xeno = owner
xeno.xeno_apply_salve(target_atom, health_transfer_amount, max_range, damage_taken_mod)
+ apply_cooldown()
return ..()
/datum/action/xeno_action/verb/verb_apply_salve()
@@ -124,9 +128,9 @@
adjustBruteLoss(amount * damage_taken_mod)
use_plasma(amount * 2)
updatehealth()
- new /datum/effects/heal_over_time(target_xeno, amount, 10, 1)
+ new /datum/effects/heal_over_time(target_xeno, heal_amount = amount)
target_xeno.xeno_jitter(1 SECONDS)
- target_xeno.flick_heal_overlay(10 SECONDS, "#00be6f")
+ target_xeno.flick_heal_overlay(5 SECONDS, "#00be6f")
to_chat(target_xeno, SPAN_XENOWARNING("[src] covers our wounds with a regenerative resin salve. We feel reinvigorated!"))
to_chat(src, SPAN_XENOWARNING("We regurgitate our vital fluids and some plasma to create a regenerative resin salve and apply it to [target_xeno]'s wounds. We feel weakened..."))
playsound(src, "alien_drool", 25)
@@ -135,7 +139,7 @@
if(!target_is_healer && !isfacehugger(target_xeno)) // no cheap grinding
healer_delegate.modify_transferred(amount * damage_taken_mod)
update_icons()
- addtimer(CALLBACK(healer_delegate, /datum/behavior_delegate/drone_healer/proc/un_salve), 10 SECONDS, TIMER_OVERRIDE|TIMER_UNIQUE)
+ addtimer(CALLBACK(healer_delegate, /datum/behavior_delegate/drone_healer/proc/un_salve), 5 SECONDS, TIMER_OVERRIDE|TIMER_UNIQUE)
/datum/behavior_delegate/drone_healer
name = "Healer Drone Behavior Delegate"
@@ -257,6 +261,9 @@
xeno.say(";MY LIFE FOR THE QUEEN!!!")
+ if(target.health < 0)
+ target.gain_health(abs(target.health)) // gets them out of crit first
+
target.gain_health(xeno.health * transfer_mod)
target.updatehealth()
diff --git a/code/modules/mob/living/carbon/xenomorph/strains/castes/runner/acid.dm b/code/modules/mob/living/carbon/xenomorph/strains/castes/runner/acid.dm
index 0fdaa264bd99..0fb4a17190a1 100644
--- a/code/modules/mob/living/carbon/xenomorph/strains/castes/runner/acid.dm
+++ b/code/modules/mob/living/carbon/xenomorph/strains/castes/runner/acid.dm
@@ -120,7 +120,7 @@
var/max_burn_damage = acid_amount / caboom_burn_damage_ratio
var/burn_range = acid_amount / caboom_burn_range_ratio
- for(var/barricades in view(bound_xeno, acid_range))
+ for(var/barricades in dview(acid_range, bound_xeno))
if(istype(barricades, /obj/structure/barricade))
new caboom_struct_acid_type(get_turf(barricades), barricades)
continue
@@ -129,7 +129,7 @@
continue
var/x = bound_xeno.x
var/y = bound_xeno.y
- for(var/mob/living/target_living in view(bound_xeno, burn_range))
+ FOR_DVIEW(var/mob/living/target_living, burn_range, bound_xeno, HIDE_INVISIBLE_OBSERVER)
if (!isxeno_human(target_living) || bound_xeno.can_not_harm(target_living))
continue
var/dist = 0
@@ -145,8 +145,10 @@
damage *= XVX_ACID_DAMAGEMULT
target_living.apply_damage(damage, BURN)
- for(var/turf/T in view(bound_xeno, acid_range))
+ FOR_DVIEW_END
+ FOR_DVIEW(var/turf/T, acid_range, bound_xeno, HIDE_INVISIBLE_OBSERVER)
new /obj/effect/particle_effect/smoke/acid_runner_harmless(T)
+ FOR_DVIEW_END
playsound(bound_xeno, 'sound/effects/blobattack.ogg', 75)
if(bound_xeno.client && bound_xeno.hive)
var/datum/hive_status/hive_status = bound_xeno.hive
diff --git a/code/modules/mob/living/living_health_procs.dm b/code/modules/mob/living/living_health_procs.dm
index ffe1a56b59f8..4486c20360e3 100644
--- a/code/modules/mob/living/living_health_procs.dm
+++ b/code/modules/mob/living/living_health_procs.dm
@@ -446,7 +446,7 @@
/mob/living/proc/AdjustEarDeafness(amount)
var/prev_deaf = ear_deaf
- ear_deaf = max(ear_deaf + amount, 0)
+ ear_deaf = clamp(ear_deaf + amount, 0, 30) //roughly 1 minute
if(prev_deaf)
if(ear_deaf == 0)
on_deafness_loss()
diff --git a/code/modules/mob/living/living_healthscan.dm b/code/modules/mob/living/living_healthscan.dm
index 6739e7046761..d11a32c8382e 100644
--- a/code/modules/mob/living/living_healthscan.dm
+++ b/code/modules/mob/living/living_healthscan.dm
@@ -159,6 +159,7 @@ GLOBAL_LIST_INIT(known_implants, subtypesof(/obj/item/implant))
//snowflake :3
data["lung_ruptured"] = human_target_mob.is_lung_ruptured()
+ data["heart_broken"] = human_target_mob.is_heart_broken()
//shrapnel, limbs, limb damage, limb statflags, cyber limbs
var/core_fracture_detected = FALSE
diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm
index 7f3af1449266..5bd2b4283c86 100644
--- a/code/modules/mob/living/say.dm
+++ b/code/modules/mob/living/say.dm
@@ -62,6 +62,24 @@ GLOBAL_LIST_INIT(department_radio_keys, list(
/proc/prefix_to_channel(prefix)
return GLOB.department_radio_keys[prefix]
+/proc/filter_message(client/user, message)
+ if(!config.word_filter_regex)
+ return TRUE
+
+ if(config.word_filter_regex.Find(message))
+ to_chat(user,
+ html = "\n-- Word Filter Message -- ",
+ )
+ to_chat(user,
+ type = MESSAGE_TYPE_ADMINPM,
+ html = "\nYour message has been automatically filtered due to its contents. Trying to circumvent this filter will get you banned. ",
+ )
+ SEND_SOUND(user, sound('sound/effects/adminhelp_new.ogg'))
+ log_admin("[user.ckey] triggered the chat filter with the following message: [message].")
+ return FALSE
+
+ return TRUE
+
///Shows custom speech bubbles for screaming, *warcry etc.
/mob/living/proc/show_speech_bubble(bubble_name, bubble_type = bubble_icon)
@@ -81,6 +99,9 @@ GLOBAL_LIST_INIT(department_radio_keys, list(
if(SEND_SIGNAL(src, COMSIG_LIVING_SPEAK, message, speaking, verb, alt_name, italics, message_range, speech_sound, sound_vol, nolog, message_mode) & COMPONENT_OVERRIDE_SPEAK) return
+ if(!filter_message(src, message))
+ return
+
message = process_chat_markup(message, list("~", "_"))
for(var/dst=0; dst<=1; dst++) //Will run twice if src has a clone
diff --git a/code/modules/mob/living/simple_animal/friendly/mouse.dm b/code/modules/mob/living/simple_animal/friendly/mouse.dm
index 182bc2525c17..03f1b97c3fc7 100644
--- a/code/modules/mob/living/simple_animal/friendly/mouse.dm
+++ b/code/modules/mob/living/simple_animal/friendly/mouse.dm
@@ -32,8 +32,9 @@
/mob/living/simple_animal/mouse/Life(delta_time)
..()
if(!stat && prob(speak_chance))
- for(var/mob/M in view())
+ FOR_DVIEW(var/mob/M, world.view, src, HIDE_INVISIBLE_OBSERVER)
M << 'sound/effects/mousesqueek.ogg'
+ FOR_DVIEW_END
if(!ckey && stat == CONSCIOUS && prob(0.5))
set_stat(UNCONSCIOUS)
diff --git a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm
index 2971a3581876..5ee60239db64 100644
--- a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm
+++ b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm
@@ -84,7 +84,7 @@
//1% chance to skitter madly away
if(!busy && prob(1))
/*var/list/move_targets = list()
- for(var/turf/T in orange(20, src))
+ for(var/turf/T as anything in ORANGE_TURFS(20, src))
move_targets.Add(T)*/
stop_automated_movement = 1
walk_to(src, pick(orange(20, src)), 1, move_to_delay)
diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/drone.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/drone.dm
index b7c091d564d6..84c5d13f7862 100644
--- a/code/modules/mob/living/simple_animal/hostile/retaliate/drone.dm
+++ b/code/modules/mob/living/simple_animal/hostile/retaliate/drone.dm
@@ -175,44 +175,45 @@
spark.holder = null
var/obj/loot
+ var/list/reachable_atoms = dview(7, src)
//shards
loot = new /obj/item/shard(loc)
- step_to(loot, get_turf(pick(view(7, src))))
+ step_to(loot, get_turf(pick(reachable_atoms)))
if(prob(75))
loot = new /obj/item/shard(loc)
- step_to(loot, get_turf(pick(view(7, src))))
+ step_to(loot, get_turf(pick(reachable_atoms)))
if(prob(50))
loot = new /obj/item/shard(loc)
- step_to(loot, get_turf(pick(view(7, src))))
+ step_to(loot, get_turf(pick(reachable_atoms)))
if(prob(25))
loot = new /obj/item/shard(loc)
- step_to(loot, get_turf(pick(view(7, src))))
+ step_to(loot, get_turf(pick(reachable_atoms)))
//rods
loot = new /obj/item/stack/rods(loc)
- step_to(loot, get_turf(pick(view(7, src))))
+ step_to(loot, get_turf(pick(reachable_atoms)))
if(prob(75))
loot = new /obj/item/stack/rods(loc)
- step_to(loot, get_turf(pick(view(7, src))))
+ step_to(loot, get_turf(pick(reachable_atoms)))
if(prob(50))
loot = new /obj/item/stack/rods(loc)
- step_to(loot, get_turf(pick(view(7, src))))
+ step_to(loot, get_turf(pick(reachable_atoms)))
if(prob(25))
loot = new /obj/item/stack/rods(loc)
- step_to(loot, get_turf(pick(view(7, src))))
+ step_to(loot, get_turf(pick(reachable_atoms)))
//plasteel
loot = new /obj/item/stack/sheet/plasteel(loc)
- step_to(loot, get_turf(pick(view(7, src))))
+ step_to(loot, get_turf(pick(reachable_atoms)))
if(prob(75))
loot = new /obj/item/stack/sheet/plasteel(loc)
- step_to(loot, get_turf(pick(view(7, src))))
+ step_to(loot, get_turf(pick(reachable_atoms)))
if(prob(50))
loot = new /obj/item/stack/sheet/plasteel(loc)
- step_to(loot, get_turf(pick(view(7, src))))
+ step_to(loot, get_turf(pick(reachable_atoms)))
if(prob(25))
loot = new /obj/item/stack/sheet/plasteel(loc)
- step_to(loot, get_turf(pick(view(7, src))))
+ step_to(loot, get_turf(pick(reachable_atoms)))
return ..()
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index 0a24468cc176..d198f7818eda 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -470,7 +470,13 @@
if(!M.can_be_pulled_by(src))
return
else if(istype(AM, /obj))
+ if(recently_grabbed > world.time)
+ return FALSE
+ recently_grabbed = world.time + 6
AM.add_fingerprint(src)
+ animation_attack_on(AM)
+ playsound(loc, 'sound/weapons/thudswoosh.ogg', 25, 1, 7)
+ flick_attack_overlay(AM, "grab")
if(!QDELETED(AM.pulledby) && !QDELETED(M))
visible_message(SPAN_WARNING("[src] has broken [AM.pulledby]'s grip on [M]!"), null, null, 5)
@@ -534,6 +540,7 @@
msg_admin_attack("[key_name(src)] grabbed [key_name(M)] in [get_area(src)] ([src.loc.x],[src.loc.y],[src.loc.z]).", src.loc.x, src.loc.y, src.loc.z)
if(!no_msg)
+ animation_attack_on(M)
visible_message(SPAN_WARNING("[src] has grabbed [M] passively!"), null, null, 5)
if(M.mob_size > MOB_SIZE_HUMAN || !(M.status_flags & CANPUSH))
diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm
index 9806e5ce949c..c04a745ea126 100644
--- a/code/modules/mob/mob_defines.dm
+++ b/code/modules/mob/mob_defines.dm
@@ -3,6 +3,7 @@
layer = MOB_LAYER
animate_movement = 2
rebounds = TRUE
+ blocks_emissive = EMISSIVE_BLOCK_GENERIC
var/mob_flags = NO_FLAGS
var/datum/mind/mind
@@ -113,6 +114,7 @@
var/life_kills_total = 0
var/life_damage_taken_total = 0
var/life_revives_total = 0
+ var/life_ib_total = 0
var/festivizer_hits_total = 0
var/life_value = 1 // when killed, the killee gets this much added to its life_kills_total
@@ -193,6 +195,8 @@
var/recently_pointed_to = 0 //used as cooldown for the pointing verb.
+ var/recently_grabbed = 0 //used as a cooldown for item grabs
+
///Color matrices to be applied to the client window. Assoc. list.
var/list/client_color_matrices
diff --git a/code/modules/mob/mob_grab.dm b/code/modules/mob/mob_grab.dm
index 9dcdae3635cb..10480eb38f6b 100644
--- a/code/modules/mob/mob_grab.dm
+++ b/code/modules/mob/mob_grab.dm
@@ -97,8 +97,9 @@
/obj/item/grab/proc/progress_aggressive(mob/living/carbon/human/user, mob/living/victim)
user.grab_level = GRAB_CHOKE
- playsound(src.loc, 'sound/weapons/thudswoosh.ogg', 25, 1, 7)
+ playsound(loc, 'sound/weapons/thudswoosh.ogg', 25, 1, 7)
user.visible_message(SPAN_WARNING("[user] holds [victim] by the neck and starts choking them!"), null, null, 5)
+ msg_admin_attack("[key_name(user)] started to choke [key_name(victim)] at [get_area_name(victim)]", victim.loc.x, victim.loc.y, victim.loc.z)
victim.Move(user.loc, get_dir(victim.loc, user.loc))
victim.update_transform(TRUE)
diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm
index 37a6c46c23cc..f1007ab2ad4f 100644
--- a/code/modules/mob/mob_helpers.dm
+++ b/code/modules/mob/mob_helpers.dm
@@ -420,8 +420,10 @@ GLOBAL_LIST_INIT(limb_types_by_name, list(
if(skillcheck(src, SKILL_ENGINEER, SKILL_ENGINEER_MASTER))
return DURATION_MULTIPLIER_TIER_3
else if(skillcheck(src, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
- return DURATION_MULTIPLIER_TIER_2
+ return (DURATION_MULTIPLIER_TIER_3 + DURATION_MULTIPLIER_TIER_2) / 2
else if(skillcheck(src, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
+ return DURATION_MULTIPLIER_TIER_2
+ else if(skillcheck(src, SKILL_ENGINEER, SKILL_ENGINEER_NOVICE))
return DURATION_MULTIPLIER_TIER_1
// Construction
if(SKILL_CONSTRUCTION)
@@ -475,7 +477,7 @@ GLOBAL_LIST_INIT(limb_types_by_name, list(
return TRUE
/mob/proc/can_see_reagents()
- return stat == DEAD || issynth(src) ||HAS_TRAIT(src, TRAIT_REAGENT_SCANNER) //Dead guys and synths can always see reagents
+ return stat == DEAD || issynth(src) || HAS_TRAIT(src, TRAIT_REAGENT_SCANNER) //Dead guys and synths can always see reagents
/**
* Examine a mob
diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm
index e326ce9e45b3..06e7fe401e16 100644
--- a/code/modules/mob/mob_movement.dm
+++ b/code/modules/mob/mob_movement.dm
@@ -261,12 +261,12 @@
if(istype(src,/mob/living/carbon/human/)) // Only humans can wear magboots, so we give them a chance to.
var/mob/living/carbon/human/H = src
- if((istype(turf,/turf/open/floor)) && (src.lastarea.has_gravity == 0) && !(istype(H.shoes, /obj/item/clothing/shoes/magboots) && (H.shoes.flags_inventory & NOSLIPPING)))
+ if((istype(turf,/turf/open/floor)) && !(istype(H.shoes, /obj/item/clothing/shoes/magboots) && (H.shoes.flags_inventory & NOSLIPPING)))
continue
else
- if((istype(turf,/turf/open/floor)) && (src.lastarea && src.lastarea.has_gravity == 0)) // No one else gets a chance.
+ if(istype(turf,/turf/open/floor)) // No one else gets a chance.
continue
diff --git a/code/modules/nano/nanoui.dm b/code/modules/nano/nanoui.dm
index 7e259711a20e..1fee0d5f3bce 100644
--- a/code/modules/nano/nanoui.dm
+++ b/code/modules/nano/nanoui.dm
@@ -167,7 +167,7 @@ nanoui is used to open and update nano browser uis
else if (allowed_user_stat == -1 || user == src_object)
set_status(STATUS_INTERACTIVE, push_update) // interactive (green visibility)
else if (isSilicon(user))
- if (src_object in view(7, user)) // robots can see and interact with things they can see within 7 tiles
+ if (src_object in dview(7, user)) // robots can see and interact with things they can see within 7 tiles
set_status(STATUS_INTERACTIVE, push_update) // interactive (green visibility)
else
set_status(STATUS_DISABLED, push_update) // no updates, completely disabled (red visibility)
diff --git a/code/modules/objectives/retrieve_items.dm b/code/modules/objectives/retrieve_items.dm
index 9f9f600eacc8..89b644843c5c 100644
--- a/code/modules/objectives/retrieve_items.dm
+++ b/code/modules/objectives/retrieve_items.dm
@@ -14,10 +14,10 @@
/area/almayer/medical/medical_science,
)
-/datum/cm_objective/retrieve_item/New(T)
- ..()
- if(T)
- target_item = T
+/datum/cm_objective/retrieve_item/New(atom/target)
+ . = ..()
+ if(target)
+ target_item = target
initial_area = get_area(target_item)
RegisterSignal(target_item, COMSIG_PARENT_PREQDELETED, PROC_REF(clean_up_ref))
@@ -74,7 +74,7 @@
qdel(src)
return
-/datum/cm_objective/retrieve_item/fulton/New()
+/datum/cm_objective/retrieve_item/fulton/New(atom/target)
. = ..()
GLOB.failed_fultons += target_item
activate()
@@ -93,10 +93,6 @@
return clue
-/datum/cm_objective/retrieve_item/fulton/complete()
- ..()
-
-
// -----------------------------------------------------------
// *** Documents and data disks after they have been read ***
// -----------------------------------------------------------
diff --git a/code/modules/organs/organ_internal.dm b/code/modules/organs/organ_internal.dm
index dd37ac5a8af1..9d4a450852bb 100644
--- a/code/modules/organs/organ_internal.dm
+++ b/code/modules/organs/organ_internal.dm
@@ -10,6 +10,7 @@
var/mob/living/carbon/human/owner = null
var/vital //Lose a vital limb, die immediately.
var/damage = 0 // amount of damage to the organ
+ var/min_little_bruised_damage = 1 //to make sure the stethoscope/penlight will not lie to the player
var/min_bruised_damage = 10
var/min_broken_damage = 30
var/parent_limb = "chest"
@@ -36,16 +37,21 @@
/// Set the correct organ state
/datum/internal_organ/proc/set_organ_status()
- if(damage > min_broken_damage || cut_away)
+ if(damage >= min_broken_damage || cut_away)
if(organ_status != ORGAN_BROKEN)
organ_status = ORGAN_BROKEN
return TRUE
return FALSE
- if(damage > min_bruised_damage)
+ if(damage >= min_bruised_damage)
if(organ_status != ORGAN_BRUISED)
organ_status = ORGAN_BRUISED
return TRUE
return FALSE
+ if(damage >= min_little_bruised_damage) // Only for the stethoscopes and penlights, smaller damage check for extra precision
+ if(organ_status != ORGAN_LITTLE_BRUISED)
+ organ_status = ORGAN_LITTLE_BRUISED
+ return TRUE
+ return FALSE
if(organ_status != ORGAN_HEALTHY)
organ_status = ORGAN_HEALTHY
return TRUE
diff --git a/code/modules/paperwork/photography.dm b/code/modules/paperwork/photography.dm
index df39248e343a..38eb0f93f072 100644
--- a/code/modules/paperwork/photography.dm
+++ b/code/modules/paperwork/photography.dm
@@ -353,6 +353,8 @@
desc = "Actively document everything you see, from the mundanity of shipside to the brutal battlefields below. Has a built-in printer for action shots."
icon_state = "broadcastingcamera"
item_state = "broadcastingcamera"
+ unacidable = TRUE
+ indestructible = TRUE
pictures_left = 20
pictures_max = 20
w_class = SIZE_HUGE
diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm
index 6c1c234eaadd..8ff67fa4b91c 100644
--- a/code/modules/power/apc.dm
+++ b/code/modules/power/apc.dm
@@ -56,22 +56,10 @@ GLOBAL_LIST_INIT(apc_wire_descriptions, list(
//NOTE: STUFF STOLEN FROM AIRLOCK.DM thx
-/obj/structure/machinery/power/apc/weak
- cell_type = /obj/item/cell
-
-/obj/structure/machinery/power/apc/high
- cell_type = /obj/item/cell/high
-
-/obj/structure/machinery/power/apc/super
- cell_type = /obj/item/cell/super
-
-/obj/structure/machinery/power/apc/hyper
- cell_type = /obj/item/cell/hyper
-
/obj/structure/machinery/power/apc
name = "area power controller"
desc = "A control terminal for the area electrical systems."
- icon = 'icons/obj/structures/machinery/power.dmi'
+ icon = 'icons/obj/structures/machinery/apc.dmi'
icon_state = "apc_mapicon"
anchored = TRUE
use_power = USE_POWER_NONE
@@ -98,7 +86,6 @@ GLOBAL_LIST_INIT(apc_wire_descriptions, list(
var/locked = 1
var/coverlocked = 1
var/aidisabled = 0
- var/tdir = null
var/obj/structure/machinery/power/terminal/terminal = null
var/lastused_light = 0
var/lastused_equip = 0
@@ -131,19 +118,31 @@ GLOBAL_LIST_INIT(apc_wire_descriptions, list(
var/printout = FALSE
power_machine = TRUE
+ light_range = 1
+ light_power = 0.5
appearance_flags = TILE_BOUND
/obj/structure/machinery/power/apc/Initialize(mapload, ndir, building=0)
. = ..()
- //Offset 24 pixels in direction of dir
+ //Offset apc depending on the dir
//This allows the APC to be embedded in a wall, yet still inside an area
if(building)
setDir(ndir)
- set_pixel_location()
+ switch(dir)
+ if(NORTH)
+ pixel_y = 32
+ if(SOUTH)
+ pixel_y = -26
+ if(EAST)
+ pixel_x = 30
+ pixel_y = 6
+ if(WEST)
+ pixel_x = -30
+ pixel_y = 6
if(building == 0)
init()
@@ -161,13 +160,6 @@ GLOBAL_LIST_INIT(apc_wire_descriptions, list(
if(!start_charge && is_ground_level(z) && prob(10))
set_broken()
-/obj/structure/machinery/power/apc/set_pixel_location()
- tdir = dir //To fix Vars bug
- setDir(SOUTH)
-
- pixel_x = (tdir & 3) ? 0 : (tdir == 4 ? 24 : -24)
- pixel_y = (tdir & 3) ? (tdir == 1 ? 24 : -24) : 0
-
/obj/structure/machinery/power/apc/Destroy()
if(terminal)
terminal.master = null
@@ -344,7 +336,7 @@ GLOBAL_LIST_INIT(apc_wire_descriptions, list(
//Create a terminal object at the same position as original turf loc
//Wires will attach to this
terminal = new/obj/structure/machinery/power/terminal(src.loc)
- terminal.setDir(tdir)
+ terminal.setDir(dir)
terminal.master = src
/obj/structure/machinery/power/apc/proc/init()
@@ -373,7 +365,7 @@ GLOBAL_LIST_INIT(apc_wire_descriptions, list(
. = list(desc)
if(stat & BROKEN)
- . += SPAN_INFO("It appears to be completely broken. It's hard to see what else is wrong with it.")
+ . += SPAN_INFO("It appears to be completely broken. Bash it open with any tool.")
return
if(opened)
if(has_electronics && terminal)
@@ -436,6 +428,8 @@ GLOBAL_LIST_INIT(apc_wire_descriptions, list(
//2 if we need to update the overlays
if(!update)
return
+
+ set_light(0)
if(update & 1) //Updating the icon state
if(update_state & UPSTATE_ALLGOOD)
@@ -467,12 +461,32 @@ GLOBAL_LIST_INIT(apc_wire_descriptions, list(
overlays = 0
if(!(stat & (BROKEN|MAINT)) && update_state & UPSTATE_ALLGOOD)
- overlays += status_overlays_lock[locked + 1]
- overlays += status_overlays_charging[charging + 1]
+ var/image/_lock = status_overlays_lock[locked + 1]
+ var/image/_charging = status_overlays_charging[charging + 1]
+ var/image/_equipment = status_overlays_equipment[equipment + 1]
+ var/image/_lighting = status_overlays_lighting[lighting + 1]
+ var/image/_environ = status_overlays_environ[environ + 1]
+
+ overlays += emissive_appearance(_lock.icon, _lock.icon_state)
+ overlays += mutable_appearance(_lock.icon, _lock.icon_state)
+ overlays += emissive_appearance(_charging.icon, _charging.icon_state)
+ overlays += mutable_appearance(_charging.icon, _charging.icon_state)
if(operating)
- overlays += status_overlays_equipment[equipment + 1]
- overlays += status_overlays_lighting[lighting + 1]
- overlays += status_overlays_environ[environ + 1]
+ overlays += emissive_appearance(_equipment.icon, _equipment.icon_state)
+ overlays += mutable_appearance(_equipment.icon, _equipment.icon_state)
+ overlays += emissive_appearance(_lighting.icon, _lighting.icon_state)
+ overlays += mutable_appearance(_lighting.icon, _lighting.icon_state)
+ overlays += emissive_appearance(_environ.icon, _environ.icon_state)
+ overlays += mutable_appearance(_environ.icon, _environ.icon_state)
+
+ switch(charging)
+ if(APC_NOT_CHARGING)
+ set_light_color(LIGHT_COLOR_RED)
+ if(APC_CHARGING)
+ set_light_color(LIGHT_COLOR_BLUE)
+ if(APC_FULLY_CHARGED)
+ set_light_color(LIGHT_COLOR_GREEN)
+ set_light(initial(light_range))
/obj/structure/machinery/power/apc/proc/check_updates()
@@ -559,7 +573,7 @@ GLOBAL_LIST_INIT(apc_wire_descriptions, list(
if(HAS_TRAIT(W, TRAIT_TOOL_CROWBAR) && opened)
if(has_electronics == 1)
if(user.action_busy) return
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(user, SPAN_WARNING("You have no idea how to deconstruct [src]."))
return
if(terminal)
@@ -591,7 +605,7 @@ GLOBAL_LIST_INIT(apc_wire_descriptions, list(
opened = APC_COVER_OPEN
update_icon()
else if(istype(W, /obj/item/cell) && opened) //Trying to put a cell inside
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(user, SPAN_WARNING("You have no idea how to fit [W] into [src]."))
return
if(cell)
@@ -609,7 +623,7 @@ GLOBAL_LIST_INIT(apc_wire_descriptions, list(
update_icon()
else if(HAS_TRAIT(W, TRAIT_TOOL_SCREWDRIVER)) //Haxing
if(opened)
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(user, SPAN_WARNING("\The [src]'s wiring confuses you."))
return
if(cell)
@@ -643,7 +657,7 @@ GLOBAL_LIST_INIT(apc_wire_descriptions, list(
tgui_interact(user) //then close them and open up the new ones (wires/panel)
else if(istype(W, /obj/item/card/id)) //Trying to unlock the interface with an ID card
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(user, SPAN_WARNING("You're not sure where to swipe \the [W] on [src]."))
return
if(opened)
@@ -661,7 +675,7 @@ GLOBAL_LIST_INIT(apc_wire_descriptions, list(
else
to_chat(user, SPAN_WARNING("Access denied."))
else if(iswire(W) && !terminal && opened && has_electronics != 2)
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(user, SPAN_WARNING("You have no idea what to do with [src]."))
return
if(loc:intact_tile)
@@ -688,7 +702,7 @@ GLOBAL_LIST_INIT(apc_wire_descriptions, list(
make_terminal()
terminal.connect_to_network()
else if(HAS_TRAIT(W, TRAIT_TOOL_WIRECUTTERS) && terminal && opened && has_electronics != 2)
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(user, SPAN_WARNING("You have no idea what to do with [W]."))
return
if(loc:intact_tile)
@@ -712,7 +726,7 @@ GLOBAL_LIST_INIT(apc_wire_descriptions, list(
qdel(terminal)
terminal = null
else if(istype(W, /obj/item/circuitboard/apc) && opened && has_electronics == 0 && !(stat & BROKEN))
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(user, SPAN_WARNING("You have no idea what to do with [W]."))
return
user.visible_message(SPAN_NOTICE("[user] starts inserting the power control board into [src]."),
@@ -724,7 +738,7 @@ GLOBAL_LIST_INIT(apc_wire_descriptions, list(
SPAN_NOTICE("You insert the power control board into [src]."))
qdel(W)
else if(istype(W, /obj/item/circuitboard/apc) && opened && has_electronics == 0 && (stat & BROKEN))
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(user, SPAN_WARNING("You have no idea what to do with [W]."))
return
to_chat(user, SPAN_WARNING("You cannot put the board inside, the frame is damaged."))
@@ -733,7 +747,7 @@ GLOBAL_LIST_INIT(apc_wire_descriptions, list(
if(!HAS_TRAIT(W, TRAIT_TOOL_BLOWTORCH))
to_chat(user, SPAN_WARNING("You need a stronger blowtorch!"))
return
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(user, SPAN_WARNING("You have no idea what to do with [W]."))
return
var/obj/item/tool/weldingtool/WT = W
@@ -750,7 +764,7 @@ GLOBAL_LIST_INIT(apc_wire_descriptions, list(
deconstruct()
return
else if(istype(W, /obj/item/frame/apc) && opened && (stat & BROKEN))
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(user, SPAN_WARNING("You have no idea what to do with [W]."))
return
if(has_electronics)
@@ -908,7 +922,7 @@ GLOBAL_LIST_INIT(apc_wire_descriptions, list(
if(usr == user && opened && (!isRemoteControlling(user)))
if(cell)
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(user, SPAN_WARNING("You have no idea how to remove the power cell from [src]."))
return
user.put_in_hands(cell)
@@ -1043,7 +1057,7 @@ GLOBAL_LIST_INIT(apc_wire_descriptions, list(
else if(prob(H.getBrainLoss()))
to_chat(user, SPAN_WARNING("You momentarily forget how to use [src]."))
return 0
- if(!skillcheck(H, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(H, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(H, SPAN_WARNING("You don't know how to use \the [src]'s interface."))
return
return 1
@@ -1367,13 +1381,122 @@ GLOBAL_LIST_INIT(apc_wire_descriptions, list(
/obj/structure/machinery/power/apc/almayer
cell_type = /obj/item/cell/high
+/obj/structure/machinery/power/apc/almayer/north
+ pixel_y = 32
+ dir = 1
+
+/obj/structure/machinery/power/apc/almayer/south
+ pixel_y = -26
+ dir = 2
+
+/obj/structure/machinery/power/apc/almayer/east
+ pixel_x = 30
+ dir = 4
+
+/obj/structure/machinery/power/apc/almayer/west
+ pixel_x = -30
+ dir = 8
+
/obj/structure/machinery/power/apc/almayer/hardened
name = "hardened area power controller"
desc = "A control terminal for the area electrical systems. This one is hardened against sudden power fluctuations caused by electrical grid damage."
crash_break_probability = 0
-#undef APC_UPDATE_ICON_COOLDOWN
+/obj/structure/machinery/power/apc/almayer/hardened/north
+ pixel_y = 32
+ dir = 1
+
+/obj/structure/machinery/power/apc/almayer/hardened/south
+ pixel_y = -26
+ dir = 2
+
+/obj/structure/machinery/power/apc/almayer/hardened/east
+ pixel_x = 30
+ dir = 4
+
+/obj/structure/machinery/power/apc/almayer/hardened/west
+ pixel_x = -30
+ dir = 8
+
+//------ Directional APCs ------//
+
+/obj/structure/machinery/power/apc/no_power
+ start_charge = 0
+
+/obj/structure/machinery/power/apc/no_power/north
+ pixel_y = 32
+ dir = 1
+
+/obj/structure/machinery/power/apc/no_power/south
+ pixel_y = -26
+ dir = 2
+
+/obj/structure/machinery/power/apc/no_power/east
+ pixel_x = 30
+ dir = 4
+
+/obj/structure/machinery/power/apc/no_power/west
+ pixel_x = -30
+ dir = 8
+
+// Powered APCs with directions
+/obj/structure/machinery/power/apc/power/north
+ pixel_y = 32
+ dir = 1
+
+/obj/structure/machinery/power/apc/power/south
+ pixel_y = -26
+ dir = 2
+
+/obj/structure/machinery/power/apc/power/east
+ pixel_x = 30
+ dir = 4
+
+/obj/structure/machinery/power/apc/power/west
+ pixel_x = -30
+ dir = 8
+
+// Upgraded APC's with directions
+/obj/structure/machinery/power/apc/upgraded/power
+ desc = "A control terminal for the area electrical systems. This one is upgraded with better power cell to sustain higher power usage."
+ cell_type = /obj/item/cell/high
+
+
+/obj/structure/machinery/power/apc/upgraded/power/north
+ pixel_y = 32
+ dir = 1
+
+/obj/structure/machinery/power/apc/upgraded/power/south
+ pixel_y = -26
+ dir = 2
+
+/obj/structure/machinery/power/apc/upgraded/power/east
+ pixel_x = 30
+ dir = 4
+
+/obj/structure/machinery/power/apc/upgraded/power/west
+ pixel_x = -30
+ dir = 8
// apc that start at zero charge.
-/obj/structure/machinery/power/apc/nocharge
+
+/obj/structure/machinery/power/apc/upgraded/no_power
start_charge = 0
+
+/obj/structure/machinery/power/apc/upgraded/no_power/north
+ pixel_y = 32
+ dir = 1
+
+/obj/structure/machinery/power/apc/upgraded/no_power/south
+ pixel_y = -26
+ dir = 2
+
+/obj/structure/machinery/power/apc/upgraded/no_power/east
+ pixel_x = 30
+ dir = 4
+
+/obj/structure/machinery/power/apc/upgraded/no_power/west
+ pixel_x = -30
+ dir = 8
+
+#undef APC_UPDATE_ICON_COOLDOWN
diff --git a/code/modules/power/gravitygenerator.dm b/code/modules/power/gravitygenerator.dm
deleted file mode 100644
index c3d4698fbc03..000000000000
--- a/code/modules/power/gravitygenerator.dm
+++ /dev/null
@@ -1,23 +0,0 @@
-// It... uses a lot of power. Everything under power is engineering stuff, at least.
-
-/obj/structure/machinery/computer/gravity_control_computer
- name = "Gravity Generator Control"
- desc = "A computer to control a local gravity generator. Qualified personnel only."
- icon = 'icons/obj/structures/machinery/computer.dmi'
- icon_state = "gravitycomp"
- anchored = TRUE
- density = TRUE
- var/obj/structure/machinery/gravity_generator = null
-
-
-/obj/structure/machinery/gravity_generator
- name = "Gravitational Generator"
- desc = "A device which produces a gravaton field when set up."
- icon = 'icons/obj/structures/props/singularity.dmi'
- icon_state = "TheSingGen"
- anchored = TRUE
- density = TRUE
- use_power = USE_POWER_IDLE
- idle_power_usage = 200
- active_power_usage = 1000
- var/on = 1
diff --git a/code/modules/projectiles/ammo_boxes/box_structures.dm b/code/modules/projectiles/ammo_boxes/box_structures.dm
index da0b700068b9..ada2c6aa7bf2 100644
--- a/code/modules/projectiles/ammo_boxes/box_structures.dm
+++ b/code/modules/projectiles/ammo_boxes/box_structures.dm
@@ -101,7 +101,7 @@
if(item_box.handfuls)
var/obj/item/ammo_magazine/AM = locate(/obj/item/ammo_magazine) in item_box.contents
if(AM)
- . += SPAN_INFO("It has roughly [floor(AM.current_rounds/5)] handfuls remaining.")
+ . += SPAN_INFO("It has roughly [floor(AM.current_rounds/AM.transfer_handful_amount)] handfuls remaining.")
else
. += SPAN_INFO("It has [length(item_box.contents)] magazines out of [item_box.num_of_magazines].")
if(burning)
diff --git a/code/modules/projectiles/ammo_boxes/grenade_packets.dm b/code/modules/projectiles/ammo_boxes/grenade_packets.dm
index 603e2e3a712f..91ea15e039b1 100644
--- a/code/modules/projectiles/ammo_boxes/grenade_packets.dm
+++ b/code/modules/projectiles/ammo_boxes/grenade_packets.dm
@@ -1,5 +1,5 @@
/obj/item/storage/box/packet
- icon = 'icons/obj/items/weapons/grenade.dmi'
+ icon = 'icons/obj/items/storage/packets.dmi'
icon_state = "hedp_packet"
w_class = SIZE_MEDIUM//fits into bags
storage_slots = 3
@@ -32,6 +32,7 @@ GLOBAL_LIST_INIT(grenade_packets, list(
/obj/item/storage/box/packet/hornet,
/obj/item/storage/box/packet/incendiary,
/obj/item/storage/box/packet/smoke,
+ /obj/item/storage/box/packet/foam,
/obj/item/storage/box/packet/phosphorus,
/obj/item/storage/box/packet/phosphorus/upp,
/obj/item/storage/box/packet/m15,
@@ -76,11 +77,17 @@ GLOBAL_LIST_INIT(grenade_packets, list(
content_type = /obj/item/explosive/grenade/smokebomb
/obj/item/storage/box/packet/phosphorus
- name = "\improper HPDP grenade packet"
- desc = "It contains three HPDP white phosphorus grenades."
- icon_state = "hpdp_packet"
+ name = "\improper WPDP grenade packet"
+ desc = "It contains three WPDP white phosphorus grenades."
+ icon_state = "wpdp_packet"
content_type = /obj/item/explosive/grenade/phosphorus/weak
+/obj/item/storage/box/packet/phosphorus/strong
+ name = "\improper CCDP grenade packet"
+ desc = "It contains three CCDP chemical compound grenades."
+ icon_state = "ccdp_packet"
+ content_type = /obj/item/explosive/grenade/phosphorus
+
/obj/item/storage/box/packet/phosphorus/upp
name = "\improper Type 8 WP grenade packet"
desc = "It contains three type 8 white phosphorus grenades."
@@ -97,6 +104,12 @@ GLOBAL_LIST_INIT(grenade_packets, list(
desc = "These little packets of joy were distributed in the 100th (Season 2) Issue of the Boots! magazine as commemorative rewards for subscribers. Nobody knows how anyone, at any point, never asked 'wait, is this a terrible idea?' during the process."
content_type = /obj/item/explosive/grenade/high_explosive/frag/toy
+/obj/item/storage/box/packet/foam
+ name = "\improper MFHS foam grenade packet"
+ desc = "It contains three MFHS metal-foam grenades."
+ icon_state = "mfhs_packet"
+ content_type = /obj/item/explosive/grenade/metal_foam
+
/obj/item/storage/box/packet/m15
name = "\improper M15 fragmentation grenade packet"
desc = "It contains three M15 fragmentation grenades. Handle with care."
diff --git a/code/modules/projectiles/ammo_boxes/misc_boxes.dm b/code/modules/projectiles/ammo_boxes/misc_boxes.dm
index 0634c76270da..77731ab7fa7b 100644
--- a/code/modules/projectiles/ammo_boxes/misc_boxes.dm
+++ b/code/modules/projectiles/ammo_boxes/misc_boxes.dm
@@ -110,9 +110,7 @@
if(flare_amount > 0)
handle_side_effects(host_box, TRUE)
- var/list/turf_list = list()
- for(var/turf/T in range(5, (host_box ? host_box : src)))
- turf_list += T
+ var/list/turf_list = RANGE_TURFS(5, (host_box ? host_box : src))
for(var/i = 1, i <= flare_amount, i++)
addtimer(CALLBACK(src, PROC_REF(explode), (host_box ? host_box : src), turf_list), rand(1, 6) SECONDS)
return
@@ -165,6 +163,19 @@
/obj/item/ammo_box/magazine/misc/flashlight/empty
empty = TRUE
+/obj/item/ammo_box/magazine/misc/flashlight/combat
+ name = "\improper box of combat flashlights"
+ desc = "A box of flashlights to brighten your day!"
+ magazine_type = /obj/item/device/flashlight/combat
+ num_of_magazines = 8
+ icon_state = "flashlightbox_combat"
+ icon_state_deployed = "flashlightbox_combat_deployed"
+ overlay_content = "_flashlight"
+
+/obj/item/ammo_box/magazine/misc/flashlight/combat/empty
+ empty = TRUE
+
+
//------------------------Battery Box--------------------------
/obj/item/ammo_box/magazine/misc/power_cell
diff --git a/code/modules/projectiles/ammunition.dm b/code/modules/projectiles/ammunition.dm
index 5db904869973..e032d3ebbe55 100644
--- a/code/modules/projectiles/ammunition.dm
+++ b/code/modules/projectiles/ammunition.dm
@@ -233,6 +233,8 @@ bullets/shells. ~N
*/
/obj/item/ammo_magazine/handful
+ AUTOWIKI_SKIP(TRUE)
+
name = "generic handful"
desc = "A handful of rounds to reload on the go."
icon = 'icons/obj/items/weapons/guns/handful.dmi'
diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm
index d16f1b6fdd30..80fce329e8cf 100644
--- a/code/modules/projectiles/gun.dm
+++ b/code/modules/projectiles/gun.dm
@@ -33,6 +33,8 @@
var/muzzle_flash = "muzzle_flash"
///muzzle flash brightness
var/muzzle_flash_lum = 3
+ ///Color of the muzzle flash light effect.
+ var/muzzle_flash_color = COLOR_VERY_SOFT_YELLOW
var/fire_sound = 'sound/weapons/Gunshot.ogg'
/// If fire_sound is null, it will pick a sound from the list here instead.
@@ -615,14 +617,13 @@ As sniper rifles have both and weapon mods can change them as well. ..() deals w
gun_recoil = recoil_buildup
var/penetration = 0
- var/armor_punch = 0
var/accuracy = 0
var/min_accuracy = 0
var/max_range = 0
+ var/effective_range = 0
var/scatter = 0
var/list/damage_armor_profile_xeno = list()
var/list/damage_armor_profile_marine = list()
- var/list/damage_armor_profile_armorbreak = list()
var/list/damage_armor_profile_headers = list()
var/datum/ammo/in_ammo
@@ -645,24 +646,19 @@ As sniper rifles have both and weapon mods can change them as well. ..() deals w
falloff = in_ammo.damage_falloff * damage_falloff_mult
penetration = in_ammo.penetration
- armor_punch = in_ammo.damage_armor_punch
accuracy = in_ammo.accurate_range
min_accuracy = in_ammo.accurate_range_min
max_range = in_ammo.max_range
+ effective_range = in_ammo.effective_range_max
scatter = in_ammo.scatter
for(var/i = 0; i<=CODEX_ARMOR_MAX; i+=CODEX_ARMOR_STEP)
damage_armor_profile_headers.Add(i)
damage_armor_profile_marine.Add(floor(armor_damage_reduction(GLOB.marine_ranged_stats, damage, i, penetration)))
damage_armor_profile_xeno.Add(floor(armor_damage_reduction(GLOB.xeno_ranged_stats, damage, i, penetration)))
- if(!GLOB.xeno_general.armor_ignore_integrity)
- if(i != 0)
- damage_armor_profile_armorbreak.Add("[floor(armor_break_calculation(GLOB.xeno_ranged_stats, damage, i, penetration, in_ammo.pen_armor_punch, armor_punch)/i)]%")
- else
- damage_armor_profile_armorbreak.Add("N/A")
var/rpm = max(fire_delay, 1)
var/burst_rpm = max((fire_delay * 1.5 + (burst_amount - 1) * burst_delay)/max(burst_amount, 1), 0.0001)
@@ -691,19 +687,18 @@ As sniper rifles have both and weapon mods can change them as well. ..() deals w
data["damage"] = damage
data["falloff"] = falloff
data["total_projectile_amount"] = bonus_projectile_amount+1
- data["armor_punch"] = armor_punch
data["penetration"] = penetration
data["accuracy"] = accuracy * accuracy_mult
data["unwielded_accuracy"] = accuracy * accuracy_mult_unwielded
data["min_accuracy"] = min_accuracy
data["max_range"] = max_range
+ data["effective_range"] = effective_range
// damage table data
data["damage_armor_profile_headers"] = damage_armor_profile_headers
data["damage_armor_profile_marine"] = damage_armor_profile_marine
data["damage_armor_profile_xeno"] = damage_armor_profile_xeno
- data["damage_armor_profile_armorbreak"] = damage_armor_profile_armorbreak
return data
@@ -718,10 +713,10 @@ As sniper rifles have both and weapon mods can change them as well. ..() deals w
data["damage_max"] = 100
data["accuracy_max"] = 32
data["range_max"] = 32
+ data["effective_range_max"] = EFFECTIVE_RANGE_MAX_TIER_4
data["falloff_max"] = DAMAGE_FALLOFF_TIER_1
data["penetration_max"] = ARMOR_PENETRATION_TIER_10
data["punch_max"] = 5
- data["glob_armourbreak"] = GLOB.xeno_general.armor_ignore_integrity
data["automatic"] = (GUN_FIREMODE_AUTOMATIC in gun_firemode_list)
data["auto_only"] = ((length(gun_firemode_list) == 1) && (GUN_FIREMODE_AUTOMATIC in gun_firemode_list))
@@ -1340,6 +1335,8 @@ and you're good to go.
if(EXECUTION_CHECK) //Execution
if(!able_to_fire(user)) //Can they actually use guns in the first place?
return ..()
+ if(flags_gun_features & GUN_CANT_EXECUTE)
+ return ..()
user.visible_message(SPAN_DANGER("[user] puts [src] up to [attacked_mob], steadying their aim."), SPAN_WARNING("You put [src] up to [attacked_mob], steadying your aim."),null, null, CHAT_TYPE_COMBAT_ACTION)
if(!do_after(user, 3 SECONDS, INTERRUPT_ALL|INTERRUPT_DIFF_INTENT, BUSY_ICON_HOSTILE))
return TRUE
@@ -1423,7 +1420,7 @@ and you're good to go.
if(projectile_to_fire.ammo.bonus_projectiles_amount)
var/obj/projectile/BP
for(var/i in 1 to projectile_to_fire.ammo.bonus_projectiles_amount)
- BP = new /obj/projectile(attacked_mob.loc, create_cause_data(initial(name), user))
+ BP = new /obj/projectile(null, create_cause_data(initial(name), user))
BP.generate_bullet(GLOB.ammo_list[projectile_to_fire.ammo.bonus_projectiles_type], 0, NO_FLAGS)
BP.accuracy = floor(BP.accuracy * projectile_to_fire.accuracy/initial(projectile_to_fire.accuracy)) //Modifies accuracy of pellets per fire_bonus_projectiles.
BP.damage *= damage_buff
@@ -1785,6 +1782,7 @@ not all weapons use normal magazines etc. load_into_chamber() itself is designed
if(!light_on && (light_range <= muzzle_flash_lum))
set_light_range(muzzle_flash_lum)
set_light_on(TRUE)
+ set_light_color(muzzle_flash_color)
addtimer(CALLBACK(src, PROC_REF(reset_light_range), prev_light), 0.5 SECONDS)
var/image/I = image('icons/obj/items/weapons/projectiles.dmi', user, muzzle_flash, user.dir == NORTH ? ABOVE_LYING_MOB_LAYER : FLOAT_LAYER)
diff --git a/code/modules/projectiles/gun_attachables.dm b/code/modules/projectiles/gun_attachables.dm
index e2108364e9ac..757ccd10394b 100644
--- a/code/modules/projectiles/gun_attachables.dm
+++ b/code/modules/projectiles/gun_attachables.dm
@@ -2386,6 +2386,33 @@ Defined in conflicts.dm of the #defines folder.
/obj/item/attachable/stock/type71/New()
..()
+/obj/item/attachable/stock/m60
+ name = "M60 stock"
+ desc = "This isn't supposed to be separated from the gun, how'd this happen?"
+ icon = 'icons/obj/items/weapons/guns/attachments/stock.dmi'
+ icon_state = "m60_stock"
+ attach_icon = "m60_stock"
+ slot = "stock"
+ wield_delay_mod = WIELD_DELAY_NONE
+ flags_attach_features = NO_FLAGS
+ melee_mod = 15
+ size_mod = 0
+
+
+/obj/item/attachable/stock/ppsh
+ name = "PPSh-17b stock"
+ desc = "This isn't supposed to be separated from the gun, how'd this happen?"
+ icon = 'icons/obj/items/weapons/guns/attachments/stock.dmi'
+ icon_state = "ppsh17b_stock"
+ attach_icon = "ppsh17b_stock"
+ slot = "stock"
+ wield_delay_mod = WIELD_DELAY_NONE
+ flags_attach_features = NO_FLAGS
+ melee_mod = 10
+ size_mod = 0
+
+
+
/obj/item/attachable/stock/smg
name = "submachinegun stock"
desc = "A rare ARMAT stock distributed in small numbers to USCM forces. Compatible with the M39, this stock reduces recoil and improves accuracy, but at a reduction to handling and agility. Seemingly a bit more effective in a brawl"
diff --git a/code/modules/projectiles/gun_helpers.dm b/code/modules/projectiles/gun_helpers.dm
index efc7abf3aa20..51a5988f2fd0 100644
--- a/code/modules/projectiles/gun_helpers.dm
+++ b/code/modules/projectiles/gun_helpers.dm
@@ -536,6 +536,33 @@ DEFINES in setup.dm, referenced here.
var/obj/item/active_hand = get_active_hand()
if(active_hand)
+ if(active_hand.preferred_storage)
+ for(var/storage in active_hand.preferred_storage)
+ var/list/items_in_slot
+ if(islist(get_item_by_slot(active_hand.preferred_storage[storage])))
+ items_in_slot = get_item_by_slot(active_hand.preferred_storage[storage])
+ else
+ items_in_slot = list(get_item_by_slot(active_hand.preferred_storage[storage]))
+
+ for(var/item_in_slot in items_in_slot)
+ if(istype(item_in_slot, storage))
+ var/slot = active_hand.preferred_storage[storage]
+ switch(slot)
+ if(WEAR_ACCESSORY)
+ slot = WEAR_IN_ACCESSORY
+ if(WEAR_WAIST)
+ slot = WEAR_IN_BELT
+ if(WEAR_BACK)
+ slot = WEAR_IN_BACK
+ if(WEAR_J_STORE)
+ slot = WEAR_IN_J_STORE
+ if(WEAR_HEAD)
+ slot = WEAR_IN_HELMET
+ if(WEAR_FEET)
+ slot = WEAR_IN_SHOES
+
+ if(equip_to_slot_if_possible(active_hand, slot, ignore_delay = TRUE, del_on_fail = FALSE, disable_warning = TRUE, redraw_mob = TRUE))
+ return TRUE
if(w_uniform)
for(var/obj/accessory in w_uniform.accessories)
var/obj/item/storage/internal/accessory/holster/holster = accessory
diff --git a/code/modules/projectiles/guns/boltaction.dm b/code/modules/projectiles/guns/boltaction.dm
index a1b8705240a4..a165a112f354 100644
--- a/code/modules/projectiles/guns/boltaction.dm
+++ b/code/modules/projectiles/guns/boltaction.dm
@@ -42,7 +42,7 @@
var/has_openbolt_icon = TRUE
/obj/item/weapon/gun/boltaction/set_gun_attachment_offsets()
- attachable_offset = list("muzzle_x" = 32, "muzzle_y" = 17,"rail_x" = 5, "rail_y" = 18, "under_x" = 25, "under_y" = 14, "stock_x" = 18, "stock_y" = 10)
+ attachable_offset = list("muzzle_x" = 32, "muzzle_y" = 17,"rail_x" = 5, "rail_y" = 18, "under_x" = 25, "under_y" = 14, "stock_x" = 20, "stock_y" = 9)
/obj/item/weapon/gun/boltaction/Initialize(mapload, spawn_empty)
. = ..()
diff --git a/code/modules/projectiles/guns/energy.dm b/code/modules/projectiles/guns/energy.dm
index 717914e38eba..6826d8af921a 100644
--- a/code/modules/projectiles/guns/energy.dm
+++ b/code/modules/projectiles/guns/energy.dm
@@ -117,6 +117,7 @@
icon_state = "rxfm5_eva"
item_state = "eva"
muzzle_flash = "muzzle_laser"
+ muzzle_flash_color = COLOR_LASER_RED
fire_sound = 'sound/weapons/Laser4.ogg'
w_class = SIZE_MEDIUM
gun_category = GUN_CATEGORY_HANDGUN
@@ -174,6 +175,7 @@
icon_state = "laz_uzi"
item_state = "laz_uzi"
muzzle_flash = "muzzle_laser"
+ muzzle_flash_color = COLOR_LASER_RED
gun_category = GUN_CATEGORY_SMG
flags_equip_slot = SLOT_WAIST
charge_cost = 200
@@ -214,6 +216,7 @@
charge_icon = "+taser"
black_market_value = 20
actions_types = list(/datum/action/item_action/taser/change_mode)
+ flags_gun_features = GUN_UNUSUAL_DESIGN|GUN_CAN_POINTBLANK|GUN_CANT_EXECUTE
/// Determines if the taser will hit any target, or if it checks for wanted status. Default is wanted only.
var/mode = TASER_MODE_P
var/skilllock = SKILL_POLICE_SKILLED
diff --git a/code/modules/projectiles/guns/flamer/flameshape.dm b/code/modules/projectiles/guns/flamer/flameshape.dm
index 0b7c01ed0b0b..0189c00599a4 100644
--- a/code/modules/projectiles/guns/flamer/flameshape.dm
+++ b/code/modules/projectiles/guns/flamer/flameshape.dm
@@ -113,13 +113,7 @@
/datum/flameshape/line/handle_fire_spread(obj/flamer_fire/F, fire_spread_amount, burn_dam, fuel_pressure = 1)
var/turf/source_turf = get_turf(F.loc)
- var/turf/prev_T = F.loc
-
- var/mob/user
- if(F.weapon_cause_data)
- user = F.weapon_cause_data.resolve_mob()
- if(user)
- prev_T = user.loc
+ var/turf/prev_T
var/distance = 1
var/stop_at_turf = FALSE
@@ -135,7 +129,7 @@
if(T.density)
T.flamer_fire_act(burn_dam, F.weapon_cause_data)
stop_at_turf = TRUE
- else
+ else if(prev_T)
var/obj/flamer_fire/temp = new()
var/atom/A = LinkBlocked(temp, prev_T, T)
@@ -145,7 +139,7 @@
break
stop_at_turf = TRUE
- if(T == F.loc || (user && T == user.loc))
+ if(T == F.loc)
if(stop_at_turf)
break
prev_T = T
@@ -168,16 +162,11 @@
/datum/flameshape/triangle/handle_fire_spread(obj/flamer_fire/F, fire_spread_amount, burn_dam, fuel_pressure = 1)
set waitfor = 0
- var/mob/user
-
- if(F.weapon_cause_data)
- user = F.weapon_cause_data.resolve_mob()
-
- var/unleash_dir = user.dir
+ var/unleash_dir = get_cardinal_dir(F, F.target_clicked)
var/list/turf/turfs = get_line(F, F.target_clicked)
var/distance = 1
var/hit_dense_atom_mid = FALSE
- var/turf/prev_T = user.loc
+ var/turf/prev_T
for(var/turf/T in turfs)
if(distance > fire_spread_amount)
diff --git a/code/modules/projectiles/guns/misc.dm b/code/modules/projectiles/guns/misc.dm
index 5503ab03a1da..f61c0735ade9 100644
--- a/code/modules/projectiles/guns/misc.dm
+++ b/code/modules/projectiles/guns/misc.dm
@@ -83,6 +83,7 @@
starting_attachment_types = list(
/obj/item/attachable/m60barrel,
/obj/item/attachable/bipod/m60,
+ /obj/item/attachable/stock/m60,
)
start_semiauto = FALSE
start_automatic = TRUE
@@ -95,7 +96,7 @@
load_into_chamber()
/obj/item/weapon/gun/m60/set_gun_attachment_offsets()
- attachable_offset = list("muzzle_x" = 34, "muzzle_y" = 16,"rail_x" = 0, "rail_y" = 0, "under_x" = 39, "under_y" = 7, "stock_x" = 0, "stock_y" = 0)
+ attachable_offset = list("muzzle_x" = 37, "muzzle_y" = 16, "rail_x" = 0, "rail_y" = 0, "under_x" = 27, "under_y" = 12, "stock_x" = 10, "stock_y" = 14)
/obj/item/weapon/gun/m60/set_gun_config_values()
@@ -147,9 +148,9 @@
/obj/item/weapon/gun/m60/update_icon()
. = ..()
if(cover_open)
- overlays += "+[base_gun_icon]_cover_open"
+ overlays += image("+[base_gun_icon]_cover_open", pixel_x = -2, pixel_y = 8)
else
- overlays += "+[base_gun_icon]_cover_closed"
+ overlays += image("+[base_gun_icon]_cover_closed", pixel_x = -10, pixel_y = 0)
/obj/item/weapon/gun/m60/able_to_fire(mob/living/user)
. = ..()
diff --git a/code/modules/projectiles/guns/pistols.dm b/code/modules/projectiles/guns/pistols.dm
index 3a85db687b26..e7d9174a6984 100644
--- a/code/modules/projectiles/guns/pistols.dm
+++ b/code/modules/projectiles/guns/pistols.dm
@@ -653,6 +653,7 @@
current_mag = /obj/item/ammo_magazine/pistol/es4
force = 8
muzzle_flash = "muzzle_flash_blue"
+ muzzle_flash_color = COLOR_MUZZLE_BLUE
flags_gun_features = GUN_AUTO_EJECTOR|GUN_CAN_POINTBLANK|GUN_ONE_HAND_WIELDED|GUN_AMMO_COUNTER
attachable_allowed = list(
/obj/item/attachable/flashlight,
diff --git a/code/modules/projectiles/guns/revolvers.dm b/code/modules/projectiles/guns/revolvers.dm
index 1c2adc2360a3..2f762cc7aac8 100644
--- a/code/modules/projectiles/guns/revolvers.dm
+++ b/code/modules/projectiles/guns/revolvers.dm
@@ -314,7 +314,7 @@
var/folded = FALSE // Used for the stock attachment, to check if we can shoot or not
/obj/item/weapon/gun/revolver/m44/set_gun_attachment_offsets()
- attachable_offset = list("muzzle_x" = 29, "muzzle_y" = 21,"rail_x" = 12, "rail_y" = 23, "under_x" = 21, "under_y" = 18, "stock_x" = 16, "stock_y" = 20)
+ attachable_offset = list("muzzle_x" = 29, "muzzle_y" = 21,"rail_x" = 12, "rail_y" = 23, "under_x" = 21, "under_y" = 16, "stock_x" = 16, "stock_y" = 20)
/obj/item/weapon/gun/revolver/m44/set_gun_config_values()
..()
@@ -498,7 +498,7 @@
desc = "A lean .38 made by Smith & Wesson. A timeless classic, from antiquity to the future. This specific model is known to be wildly inaccurate, yet extremely lethal."
icon = 'icons/obj/items/weapons/guns/guns_by_faction/colony.dmi'
icon_state = "sw357"
- item_state = "ny762" //PLACEHOLDER
+ item_state = "sw357"
fire_sound = 'sound/weapons/gun_44mag2.ogg'
current_mag = /obj/item/ammo_magazine/internal/revolver/small
force = 6
diff --git a/code/modules/projectiles/guns/rifles.dm b/code/modules/projectiles/guns/rifles.dm
index 44d6ef845b94..e514a68879fb 100644
--- a/code/modules/projectiles/guns/rifles.dm
+++ b/code/modules/projectiles/guns/rifles.dm
@@ -858,9 +858,9 @@
/obj/item/weapon/gun/rifle/mar40/lmg/set_gun_config_values()
..()
- set_fire_delay(FIRE_DELAY_TIER_9)
+ set_fire_delay(FIRE_DELAY_TIER_LMG)
set_burst_amount(BURST_AMOUNT_TIER_5)
- set_burst_delay(FIRE_DELAY_TIER_11)
+ set_burst_delay(FIRE_DELAY_TIER_LMG)
accuracy_mult = BASE_ACCURACY_MULT
accuracy_mult_unwielded = BASE_ACCURACY_MULT - HIT_ACCURACY_MULT_TIER_7
scatter = SCATTER_AMOUNT_TIER_6
@@ -1267,7 +1267,12 @@
recoil_unwielded = RECOIL_AMOUNT_TIER_1
-
+/obj/item/weapon/gun/rifle/lmg/tactical
+ current_mag = /obj/item/ammo_magazine/rifle/lmg/ap
+ starting_attachment_types = list(/obj/item/attachable/magnetic_harness, /obj/item/attachable/suppressor, /obj/item/attachable/angledgrip)
+/obj/item/weapon/gun/rifle/lmg/tactical/set_gun_config_values()
+ ..()
+ damage_mult = BASE_BULLET_DAMAGE_MULT + BULLET_DAMAGE_MULT_TIER_2//equal to m41a dmg
//-------------------------------------------------------
diff --git a/code/modules/projectiles/guns/smartgun.dm b/code/modules/projectiles/guns/smartgun.dm
index 7c628463b1ef..b2d228e27a26 100644
--- a/code/modules/projectiles/guns/smartgun.dm
+++ b/code/modules/projectiles/guns/smartgun.dm
@@ -717,7 +717,7 @@
requires_harness = FALSE
/obj/item/smartgun_battery
- name = "smartgun DV9 battery"
+ name = "\improper DV9 smartgun battery"
desc = "A standard-issue 9-volt lithium dry-cell battery, most commonly used within the USCMC to power smartguns. Per the manual, one battery is good for up to 50000 rounds and plugs directly into the smartgun's power receptacle, which is only compatible with this type of battery. Various auxiliary modes usually bring the round count far lower. While this cell is incompatible with most standard electrical system, it can be charged by common rechargers in a pinch. USCMC smartgunners often guard them jealously."
icon = 'icons/obj/structures/machinery/power.dmi'
diff --git a/code/modules/projectiles/guns/smgs.dm b/code/modules/projectiles/guns/smgs.dm
index 466a09612c54..6be0f979c7ad 100644
--- a/code/modules/projectiles/guns/smgs.dm
+++ b/code/modules/projectiles/guns/smgs.dm
@@ -265,10 +265,11 @@
fire_sound = 'sound/weapons/smg_heavy.ogg'
current_mag = /obj/item/ammo_magazine/smg/ppsh
flags_gun_features = GUN_CAN_POINTBLANK|GUN_ANTIQUE
+ starting_attachment_types = list(/obj/item/attachable/stock/ppsh)
var/jammed = FALSE
/obj/item/weapon/gun/smg/ppsh/set_gun_attachment_offsets()
- attachable_offset = list("muzzle_x" = 33, "muzzle_y" = 17,"rail_x" = 15, "rail_y" = 19, "under_x" = 26, "under_y" = 15, "stock_x" = 26, "stock_y" = 15)
+ attachable_offset = list("muzzle_x" = 33, "muzzle_y" = 17,"rail_x" = 15, "rail_y" = 19, "under_x" = 26, "under_y" = 15, "stock_x" = 18, "stock_y" = 15)
/obj/item/weapon/gun/smg/ppsh/set_gun_config_values()
..()
@@ -460,7 +461,7 @@
aim_slowdown = SLOWDOWN_ADS_NONE
/obj/item/weapon/gun/smg/mac15/set_gun_attachment_offsets()
- attachable_offset = list("muzzle_x" = 32, "muzzle_y" = 20,"rail_x" = 16, "rail_y" = 22, "under_x" = 22, "under_y" = 16, "stock_x" = 22, "stock_y" = 16)
+ attachable_offset = list("muzzle_x" = 29, "muzzle_y" = 21,"rail_x" = 13, "rail_y" = 24, "under_x" = 19, "under_y" = 18, "stock_x" = 22, "stock_y" = 16)
/obj/item/weapon/gun/smg/mac15/set_gun_config_values()
..()
@@ -665,6 +666,7 @@
start_automatic = FALSE
var/nailing_speed = 2 SECONDS //Time to apply a sheet for patching. Also haha name. Try to keep sync with soundbyte duration
var/repair_sound = 'sound/weapons/nailgun_repair_long.ogg'
+ var/material_per_repair = 1
/obj/item/weapon/gun/smg/nailgun/set_gun_config_values()
..()
@@ -689,9 +691,16 @@
icon_state = "cnailgun"
item_state = "nailgun"
w_class = SIZE_SMALL
+ flags_gun_features = GUN_AUTO_EJECTOR|GUN_CAN_POINTBLANK|GUN_NO_DESCRIPTION
/obj/item/weapon/gun/smg/nailgun/compact/able_to_fire(mob/living/user)
. = ..()
- if(.)
- click_empty(user)
return FALSE
+
+/obj/item/weapon/gun/smg/nailgun/compact/tactical
+ name = "tactical compact nailgun"
+ desc = "A carpentry tool, used to drive nails into tough surfaces. This one is military grade, it's olive drab and tacticool. Cannot fire nails as a projectile."
+ icon_state = "tnailgun"
+ item_state = "tnailgun"
+ w_class = SIZE_SMALL
+ material_per_repair = 2
diff --git a/code/modules/projectiles/guns/specialist/launcher/grenade_launcher.dm b/code/modules/projectiles/guns/specialist/launcher/grenade_launcher.dm
index 1c1ab70583df..9fde3e830d94 100644
--- a/code/modules/projectiles/guns/specialist/launcher/grenade_launcher.dm
+++ b/code/modules/projectiles/guns/specialist/launcher/grenade_launcher.dm
@@ -25,7 +25,13 @@
///Does it launch its grenades in a low arc or a high? Do they strike people in their path, or fly beyond?
var/is_lobbing = FALSE
///Verboten munitions. This is a blacklist. Anything in this list isn't loadable.
- var/disallowed_grenade_types = list(/obj/item/explosive/grenade/spawnergrenade, /obj/item/explosive/grenade/alien, /obj/item/explosive/grenade/incendiary/molotov, /obj/item/explosive/grenade/flashbang)
+ var/disallowed_grenade_types = list(/obj/item/explosive/grenade/spawnergrenade,
+ /obj/item/explosive/grenade/alien,
+ /obj/item/explosive/grenade/nerve_gas,
+ /obj/item/explosive/grenade/incendiary/bursting_pipe,
+ /obj/item/explosive/grenade/xeno_acid_grenade,
+ /obj/item/explosive/grenade/incendiary/molotov,
+ /obj/item/explosive/grenade/flashbang)
///What is this weapon permitted to fire? This is a whitelist. Anything in this list can be fired. Anything.
var/valid_munitions = list(/obj/item/explosive/grenade)
diff --git a/code/modules/projectiles/magazines/lever_action.dm b/code/modules/projectiles/magazines/lever_action.dm
index 2eb2d25a28f8..ac1d57dbd412 100644
--- a/code/modules/projectiles/magazines/lever_action.dm
+++ b/code/modules/projectiles/magazines/lever_action.dm
@@ -52,6 +52,7 @@ Similar to shotguns.dm but not exactly.
icon_state = "458-box"
item_state = "458-box"
default_ammo = /datum/ammo/bullet/lever_action/xm88
+ max_rounds = 100
caliber = ".458"
gun_type = /obj/item/weapon/gun/lever_action/xm88
handful_state = "boomslang_bullet"
diff --git a/code/modules/projectiles/magazines/misc.dm b/code/modules/projectiles/magazines/misc.dm
index 87568c953211..251b863535e7 100644
--- a/code/modules/projectiles/magazines/misc.dm
+++ b/code/modules/projectiles/magazines/misc.dm
@@ -47,12 +47,16 @@
//rocket launchers
/obj/item/ammo_magazine/rifle/grenadespawner
+ AUTOWIKI_SKIP(TRUE)
+
name = "\improper GRENADE SPAWNER AMMO"
desc = "OH GOD OH FUCK"
default_ammo = /datum/ammo/grenade_container/rifle
ammo_band_color = AMMO_BAND_COLOR_LIGHT_EXPLOSIVE
/obj/item/ammo_magazine/rifle/huggerspawner
+ AUTOWIKI_SKIP(TRUE)
+
name = "\improper HUGGER SPAWNER AMMO"
desc = "OH GOD OH FUCK"
default_ammo = /datum/ammo/hugger_container
diff --git a/code/modules/projectiles/magazines/revolvers.dm b/code/modules/projectiles/magazines/revolvers.dm
index 07fc75a50fad..f4dfea4e20fb 100644
--- a/code/modules/projectiles/magazines/revolvers.dm
+++ b/code/modules/projectiles/magazines/revolvers.dm
@@ -24,6 +24,7 @@
/obj/item/ammo_magazine/revolver/heavy
name = "\improper M44 heavy speed loader (.44)"
+ desc = "A revolver speed loader containing heavy bullets. While less damaging overall than the traditional rounds, they are more accurate."
default_ammo = /datum/ammo/bullet/revolver/heavy
caliber = ".44"
ammo_band_color = REVOLVER_TIP_COLOR_HEAVY
diff --git a/code/modules/projectiles/magazines/rifles.dm b/code/modules/projectiles/magazines/rifles.dm
index d12f390ccd95..60be8ed6c1ad 100644
--- a/code/modules/projectiles/magazines/rifles.dm
+++ b/code/modules/projectiles/magazines/rifles.dm
@@ -274,8 +274,15 @@
max_rounds = 200
ammo_band_color = AMMO_BAND_COLOR_HOLOTARGETING
+/obj/item/ammo_magazine/rifle/lmg/ap
+ name = "\improper M41AE2 ammo box (10x24mm armor-piercing)"
+ desc = "A semi-rectangular box of armor-piercing rounds for the M41AE2 Heavy Pulse Rifle."
+ default_ammo = /datum/ammo/bullet/rifle/ap
+ max_rounds = 300
+ ammo_band_color = AMMO_BAND_COLOR_AP
+
/obj/item/ammo_magazine/rifle/lmg/heap
- name = "\improper M41AE2 HEAP ammo box (10x24mm)"
+ name = "\improper M41AE2 ammo box (10x24mm high-explosive armor-piercing)"
desc = "A semi-rectangular box of rounds for the M41AE2 Heavy Pulse Rifle. This one contains the standard Armor-Piercing explosive tipped round of the USCM."
default_ammo = /datum/ammo/bullet/rifle/heap
max_rounds = 300
diff --git a/code/modules/projectiles/magazines/specialist.dm b/code/modules/projectiles/magazines/specialist.dm
index 547d231e1c69..38b9137be54f 100644
--- a/code/modules/projectiles/magazines/specialist.dm
+++ b/code/modules/projectiles/magazines/specialist.dm
@@ -265,7 +265,7 @@
. += SPAN_NOTICE("Contains a warhead.")
/obj/item/ammo_magazine/rocket/custom/attackby(obj/item/W as obj, mob/user as mob)
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(user, SPAN_WARNING("You do not know how to tinker with [name]."))
return
if(current_rounds <= 0)
diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm
index d91e2ca47c1a..cdc23da1a940 100644
--- a/code/modules/projectiles/projectile.dm
+++ b/code/modules/projectiles/projectile.dm
@@ -337,12 +337,6 @@
//Animate the visuals from starting position to new position
- if(projectile_flags & PROJECTILE_SHRAPNEL) //there can be a LOT of shrapnel especially from a cluster OB, not important enough for the expense of an animate()
- alpha = alpha_new
- pixel_x = pixel_x_rel_new
- pixel_y = pixel_y_rel_new
- return
-
var/anim_time = delta_time * 0.1
animate(src, pixel_x = pixel_x_rel_new, pixel_y = pixel_y_rel_new, alpha = alpha_new, time = anim_time, flags = ANIMATION_END_NOW)
diff --git a/code/modules/reagents/chemical_research/Chemical-Research.dm b/code/modules/reagents/chemical_research/Chemical-Research.dm
index a05bc132734d..d368e94b2c1c 100644
--- a/code/modules/reagents/chemical_research/Chemical-Research.dm
+++ b/code/modules/reagents/chemical_research/Chemical-Research.dm
@@ -3,6 +3,8 @@ GLOBAL_DATUM_INIT(chemical_data, /datum/chemical_data, new)
/datum/chemical_data
var/rsc_credits = 0
var/clearance_level = 1
+ ///credits gained from survivor clearance cards
+ var/credits_gained = 0
var/clearance_x_access = FALSE
var/reached_x_access = FALSE
var/has_new_properties = FALSE
diff --git a/code/modules/reagents/chemistry_machinery/chem_master.dm b/code/modules/reagents/chemistry_machinery/chem_master.dm
index 6f6d45b6712e..9ab8d81066e0 100644
--- a/code/modules/reagents/chemistry_machinery/chem_master.dm
+++ b/code/modules/reagents/chemistry_machinery/chem_master.dm
@@ -291,17 +291,15 @@
if(!Adjacent(usr) || !usr.put_in_hands(P))
P.forceMove(loc)
else if(href_list["change_pill"])
- #define MAX_PILL_SPRITE 20 //max icon state of the pill sprites
var/dat = ""
- for(var/i = 1 to MAX_PILL_SPRITE)
+ for(var/i = 1 to PILL_ICON_CHOICES)
dat += " "
dat += "
"
show_browser(user, dat, "Change Pill Type", "chem_master")
return
else if(href_list["change_bottle"])
- #define MAX_BOTTLE_SPRITE 4 //max icon state of the bottle sprites
var/dat = ""
- for(var/i = 1 to MAX_BOTTLE_SPRITE)
+ for(var/i = 1 to BOTTLE_ICON_CHOICES)
dat += " "
dat += "
"
show_browser(user, dat, "Change Bottle Type", "chem_master")
@@ -345,9 +343,9 @@
if(!(user.client in has_sprites))
spawn()
has_sprites += user.client
- for(var/i = 1 to MAX_PILL_SPRITE)
+ for(var/i = 1 to PILL_ICON_CHOICES)
user << browse_rsc(icon('icons/obj/items/chemistry.dmi', "pill" + num2text(i)), "pill[i].png")
- for(var/i = 1 to MAX_BOTTLE_SPRITE)
+ for(var/i = 1 to BOTTLE_ICON_CHOICES)
user << browse_rsc(icon('icons/obj/items/chemistry.dmi', "bottle-" + num2text(i)), "bottle-[i].png")
var/dat = ""
if(!beaker)
@@ -434,7 +432,7 @@
icon_state = "industry_mixer0"
base_state = "industry_mixer"
req_skill = SKILL_ENGINEER
- req_skill_level = SKILL_ENGINEER_ENGI
+ req_skill_level = SKILL_ENGINEER_TRAINED
pill_maker = FALSE
vial_maker = TRUE
max_pill_count = 0
diff --git a/code/modules/reagents/chemistry_machinery/xenomorph_analyzer.dm b/code/modules/reagents/chemistry_machinery/xenomorph_analyzer.dm
index 62ceb37386ff..3ba09227f63d 100644
--- a/code/modules/reagents/chemistry_machinery/xenomorph_analyzer.dm
+++ b/code/modules/reagents/chemistry_machinery/xenomorph_analyzer.dm
@@ -96,9 +96,8 @@
data["upgrades"] += list(list(
"name" = capitalize_first_letters(upgrade.name),
"desc" = upgrade.desc,
- "vari" = upgrade.on_init_argument,
"cost" = price_adjustment,
- "ref" = upgrade.item_reference,
+ "ref" = upgrade_type,
"category" = upgrade.upgrade_type,
"clearance" = upgrade.clearance_req,
"price_change" = upgrade.change_purchase,
@@ -125,7 +124,7 @@
. = TRUE
if("produce")
if(!busy)
- start_print_upgrade(text2path(params["ref"]), usr, text2num(params["vari"]))
+ start_print_upgrade(text2path(params["ref"]), usr)
playsound(src, 'sound/machines/keyboard2.ogg', 25, TRUE)
/obj/structure/machinery/xenoanalyzer/proc/eject_biomass(mob/user)
@@ -144,7 +143,7 @@
busy = FALSE
-/obj/structure/machinery/xenoanalyzer/proc/start_print_upgrade(produce_path, mob/user, variation)
+/obj/structure/machinery/xenoanalyzer/proc/start_print_upgrade(produce_path, mob/user)
if(stat & NOPOWER)
icon_state = "xeno_analyzer_off"
return
@@ -158,7 +157,7 @@
upgrade = datum_upgrades
if(upgrade.behavior == RESEARCH_UPGRADE_CATEGORY || upgrade.behavior == RESEARCH_UPGRADE_EXCLUDE_BUY)
continue
- if(produce_path == upgrade.item_reference && upgrade.on_init_argument == variation)
+ if(produce_path == datum_upgrades)
path_exists = TRUE
break
if(!path_exists)
@@ -174,12 +173,10 @@
busy = TRUE
biomass_points -= clamp(upgrade.value_upgrade + upgrade.change_purchase * technology_purchased[datum_upgrades], upgrade.minimum_price, upgrade.maximum_price)
technology_purchased[datum_upgrades] += 1
- addtimer(CALLBACK(src, PROC_REF(print_upgrade), produce_path, variation), 3 SECONDS)
+ addtimer(CALLBACK(src, PROC_REF(print_upgrade), produce_path), 3 SECONDS)
-/obj/structure/machinery/xenoanalyzer/proc/print_upgrade(produce_path, variation)
+/obj/structure/machinery/xenoanalyzer/proc/print_upgrade(produce_path)
busy = FALSE
- if(variation != RESEARCH_UPGRADE_NOTHING_TO_PASS)
- new produce_path(get_turf(src), variation)
- return
- new produce_path(get_turf(src))
+ var/datum/research_upgrades/item = new produce_path()
+ item.on_purchase(get_turf(src))
diff --git a/code/modules/reagents/chemistry_properties/prop_positive.dm b/code/modules/reagents/chemistry_properties/prop_positive.dm
index 051befa14fba..843332272453 100644
--- a/code/modules/reagents/chemistry_properties/prop_positive.dm
+++ b/code/modules/reagents/chemistry_properties/prop_positive.dm
@@ -603,7 +603,7 @@
var/mob/dead/observer/ghost = dead.get_ghost()
if(ghost?.client)
COOLDOWN_START(src, ghost_notif, 30 SECONDS)
- playsound_client(ghost.client, 'sound/effects/adminhelp_new.ogg')
+ playsound_client(ghost.client, 'sound/effects/revive_notify.ogg')
to_chat(ghost, SPAN_BOLDNOTICE("Your heart is struggling to pump! There is a chance you might get up!(Verbs -> Ghost -> Re-enter corpse, or click here! )"))
return TRUE
diff --git a/code/modules/recycling/sortingmachinery.dm b/code/modules/recycling/sortingmachinery.dm
index dfb0ed8288b0..b0cd265974ea 100644
--- a/code/modules/recycling/sortingmachinery.dm
+++ b/code/modules/recycling/sortingmachinery.dm
@@ -1,7 +1,7 @@
/obj/structure/bigDelivery
desc = "A big wrapped package."
name = "large parcel"
- icon = 'icons/obj/items/storage.dmi'
+ icon = 'icons/obj/structures/crates.dmi'
icon_state = "deliverycloset"
var/obj/wrapped = null
density = TRUE
@@ -71,7 +71,7 @@
/obj/structure/bigDelivery/update_icon()
overlays = new()
if(nameset || examtext)
- var/image/I = new/image('icons/obj/items/storage.dmi',"delivery_label")
+ var/image/I = new/image('icons/obj/structures/crates.dmi',"delivery_label")
if(icon_state == "deliverycloset")
I.pixel_x = 2
if(label_y == null)
@@ -84,7 +84,7 @@
I.pixel_y = -3
overlays += I
if(src.sortTag)
- var/image/I = new/image('icons/obj/items/storage.dmi',"delivery_tag")
+ var/image/I = new/image('icons/obj/structures/crates.dmi',"delivery_tag")
if(icon_state == "deliverycloset")
if(tag_x == null)
tag_x = rand(-2, 3)
@@ -108,7 +108,7 @@
/obj/item/smallDelivery
desc = "A small wrapped package."
name = "small parcel"
- icon = 'icons/obj/items/storage.dmi'
+ icon = 'icons/obj/structures/crates.dmi'
icon_state = "deliverycrate3"
var/obj/item/wrapped = null
var/sortTag = null
@@ -180,12 +180,12 @@
/obj/item/smallDelivery/update_icon()
overlays = new()
if((nameset || examtext) && icon_state != "deliverycrate1")
- var/image/I = new/image('icons/obj/items/storage.dmi',"delivery_label")
+ var/image/I = new/image('icons/obj/structures/crates.dmi',"delivery_label")
if(icon_state == "deliverycrate5")
I.pixel_y = -1
overlays += I
if(src.sortTag)
- var/image/I = new/image('icons/obj/items/storage.dmi',"delivery_tag")
+ var/image/I = new/image('icons/obj/structures/crates.dmi',"delivery_tag")
switch(icon_state)
if("deliverycrate1")
I.pixel_y = -5
diff --git a/code/modules/security_levels/keycard_authentication.dm b/code/modules/security_levels/keycard_authentication.dm
index 4b7cdd69a449..1a4881904801 100644
--- a/code/modules/security_levels/keycard_authentication.dm
+++ b/code/modules/security_levels/keycard_authentication.dm
@@ -36,8 +36,11 @@
if(active == 1)
//This is not the device that made the initial request. It is the device confirming the request.
if(event_source)
+ if(event_source.event_triggered_by == user)
+ user.visible_message(SPAN_DANGER("Your ID is rejected, as it is the one that triggered the event!"))
+ return
event_source.confirmed = 1
- event_source.event_confirmed_by = usr
+ event_source.event_confirmed_by = user
else if(screen == 2)
event_triggered_by = usr
broadcast_request() //This is the device making the initial event request. It needs to broadcast to other devices
diff --git a/code/modules/shuttle/computer.dm b/code/modules/shuttle/computer.dm
index a8ca94ba0aa5..5f17c9a73285 100644
--- a/code/modules/shuttle/computer.dm
+++ b/code/modules/shuttle/computer.dm
@@ -368,6 +368,10 @@
unacidable = TRUE
///If true, the lifeboat is in the process of launching, and so the code will not allow another launch.
var/launch_initiated = FALSE
+ ///If true, the lifeboat is in the process of having the xeno override removed by the pilot.
+ var/override_being_removed = FALSE
+ ///How long it takes to unlock the console
+ var/remaining_time = 180 SECONDS
/obj/structure/machinery/computer/shuttle/lifeboat/ex_act(severity)
return
@@ -376,7 +380,31 @@
. = ..()
var/obj/docking_port/mobile/crashable/lifeboat/lifeboat = SSshuttle.getShuttle(shuttleId)
if(lifeboat.status == LIFEBOAT_LOCKED)
- to_chat(user, SPAN_WARNING("[src] flickers with error messages."))
+ if(!skillcheck(user, SKILL_PILOT, SKILL_PILOT_TRAINED))
+ to_chat(user, SPAN_WARNING("[src] displays an error message and asks you to contact your pilot to resolve the problem."))
+ return
+ if(user.action_busy || override_being_removed)
+ return
+ to_chat(user, SPAN_NOTICE("You start to remove the lockout."))
+ override_being_removed = TRUE
+ user.visible_message(SPAN_NOTICE("[user] starts to type on [src]."),
+ SPAN_NOTICE("You try to take back control over the lifeboat. It will take around [remaining_time / 10] seconds."))
+ while(remaining_time > 20 SECONDS)
+ if(!do_after(user, 20 SECONDS, INTERRUPT_ALL|INTERRUPT_CHANGED_LYING, BUSY_ICON_HOSTILE, numticks = 20))
+ to_chat(user, SPAN_WARNING("You fail to remove the lockout!"))
+ override_being_removed = FALSE
+ return
+ remaining_time = remaining_time - 20 SECONDS
+ if(remaining_time > 0)
+ to_chat(user, SPAN_NOTICE("You partially bypass the lockout, only [remaining_time / 10] seconds left."))
+ to_chat(user, SPAN_NOTICE("You successfully removed the lockout!"))
+ playsound(loc, 'sound/machines/terminal_success.ogg', KEYBOARD_SOUND_VOLUME, 1)
+ lifeboat.status = LIFEBOAT_ACTIVE
+ lifeboat.available = TRUE
+ user.visible_message(SPAN_NOTICE("[src] blinks with blue lights."),
+ SPAN_NOTICE("You have successfully taken back control over the lifeboat."))
+ override_being_removed = FALSE
+ return
else if(lifeboat.status == LIFEBOAT_INACTIVE)
to_chat(user, SPAN_NOTICE("[src]'s screen says \"Awaiting evacuation order\"."))
else if(lifeboat.status == LIFEBOAT_ACTIVE)
@@ -456,6 +484,8 @@
var/obj/docking_port/stationary/lifeboat_dock/lifeboat_dock = lifeboat.get_docked()
lifeboat_dock.open_dock()
xeno_message(SPAN_XENOANNOUNCE("We have wrested away control of one of the metal birds! They shall not escape!"), 3, xeno.hivenumber)
+ launch_initiated = FALSE
+ remaining_time = initial(remaining_time)
return XENO_NO_DELAY_ACTION
else
return ..()
diff --git a/code/modules/shuttle/computers/dropship_computer.dm b/code/modules/shuttle/computers/dropship_computer.dm
index a28f65ce475d..87487239452e 100644
--- a/code/modules/shuttle/computers/dropship_computer.dm
+++ b/code/modules/shuttle/computers/dropship_computer.dm
@@ -28,6 +28,8 @@
// linked lz id (lz1, lz2 or null)
var/linked_lz
+ var/can_change_shuttle = FALSE
+
/obj/structure/machinery/computer/shuttle/dropship/flight/Initialize(mapload, ...)
. = ..()
compatible_landing_zones = get_landing_zones()
@@ -91,7 +93,10 @@
ui = SStgui.try_update_ui(user, src, ui)
if (!ui)
var/obj/docking_port/mobile/shuttle = SSshuttle.getShuttle(shuttleId)
- ui = new(user, src, "DropshipFlightControl", "[shuttle.name] Flight Computer")
+ var/name = shuttle?.name
+ if(can_change_shuttle)
+ name = "Remote"
+ ui = new(user, src, "DropshipFlightControl", "[name] Flight Computer")
ui.open()
/obj/structure/machinery/computer/shuttle/dropship/flight/ui_status(mob/user, datum/ui_state/state)
@@ -114,7 +119,7 @@
/obj/structure/machinery/computer/shuttle/dropship/flight/ui_state(mob/user)
var/obj/docking_port/mobile/marine_dropship/shuttle = SSshuttle.getShuttle(shuttleId)
- if(shuttle.is_hijacked)
+ if(shuttle?.is_hijacked)
return GLOB.never_state
return GLOB.not_incapacitated_and_adjacent_strict_state
@@ -123,11 +128,24 @@
compatible_landing_zones = get_landing_zones()
var/obj/docking_port/mobile/shuttle = SSshuttle.getShuttle(shuttleId)
// we convert the time to seconds for rendering to ui
- .["max_flight_duration"] = shuttle.callTime / 10
- .["max_pre_arrival_duration"] = shuttle.prearrivalTime / 10
- .["max_refuel_duration"] = shuttle.rechargeTime / 10
- .["max_engine_start_duration"] = shuttle.ignitionTime / 10
- .["door_data"] = list("port", "starboard", "aft")
+ if(shuttle)
+ .["max_flight_duration"] = shuttle.callTime / 10
+ .["max_pre_arrival_duration"] = shuttle.prearrivalTime / 10
+ .["max_refuel_duration"] = shuttle.rechargeTime / 10
+ .["max_engine_start_duration"] = shuttle.ignitionTime / 10
+ .["door_data"] = list("port", "starboard", "aft")
+ .["alternative_shuttles"] = list()
+ if(can_change_shuttle)
+ .["alternative_shuttles"] = alternative_shuttles()
+
+/obj/structure/machinery/computer/shuttle/dropship/flight/proc/alternative_shuttles()
+ . = list()
+ for(var/obj/docking_port/mobile/marine_dropship/shuttle in SSshuttle.mobile)
+ . += list(
+ list(
+ "id" = shuttle.id, "name" = shuttle)
+ )
+
/obj/structure/machinery/computer/shuttle/dropship/flight/attack_hand(mob/user)
. = ..(user)
@@ -140,6 +158,10 @@
// if the dropship has crashed don't allow more interactions
var/obj/docking_port/mobile/marine_dropship/shuttle = SSshuttle.getShuttle(shuttleId)
+ if(!shuttle)
+ tgui_interact(user)
+ return
+
if(shuttle.mode == SHUTTLE_CRASHED)
to_chat(user, SPAN_NOTICE("[src] is unresponsive."))
return
@@ -188,6 +210,23 @@
var/obj/docking_port/mobile/shuttle = SSshuttle.getShuttle(shuttleId)
if(linked_lz)
+ var/obj/docking_port/stationary/landing_zone = SSshuttle.getDock(linked_lz)
+ var/obj/docking_port/mobile/maybe_dropship = landing_zone.get_docked()
+
+ if(maybe_dropship)
+ to_chat(xeno, SPAN_NOTICE("A metal bird already is here."))
+ return
+
+ var/conflicting_transit = FALSE
+ for(var/obj/docking_port/mobile/other_shuttle in SSshuttle.mobile)
+ if(landing_zone == other_shuttle.destination)
+ conflicting_transit = TRUE
+ break
+
+ if(conflicting_transit)
+ to_chat(xeno, SPAN_NOTICE("A metal bird is already coming."))
+ return
+
playsound(loc, 'sound/machines/terminal_success.ogg', KEYBOARD_SOUND_VOLUME, 1)
if(shuttle.mode == SHUTTLE_IDLE && !is_ground_level(shuttle.z))
var/result = SSshuttle.moveShuttle(shuttleId, linked_lz, TRUE)
@@ -199,7 +238,7 @@
log_ares_flight("Unknown", "Remote launch signal for [shuttle.name] received. Authentication garbled.")
log_ares_security("Security Alert", "Remote launch signal for [shuttle.name] received. Authentication garbled.")
return
- if(shuttle.destination.id != linked_lz)
+ if(shuttle.destination && shuttle.destination.id != linked_lz)
to_chat(xeno, "The shuttle not ready. The screen reads T-[shuttle.timeLeft(10)]. Have patience.")
return
if(shuttle.mode == SHUTTLE_CALL)
@@ -214,6 +253,11 @@
/obj/structure/machinery/computer/shuttle/dropship/flight/attack_alien(mob/living/carbon/xenomorph/xeno)
+ // if the shuttleid is null or the shuttleid references a shuttle that has been removed from play, pick one
+ if(!shuttleId || !SSshuttle.getShuttle(shuttleId, FALSE))
+ var/list/alternatives = alternative_shuttles()
+ shuttleId = pick(alternatives)["id"]
+
var/obj/docking_port/mobile/marine_dropship/dropship = SSshuttle.getShuttle(shuttleId)
// If the attacking xeno isn't the queen.
@@ -339,37 +383,41 @@
/obj/structure/machinery/computer/shuttle/dropship/flight/ui_data(mob/user)
var/obj/docking_port/mobile/marine_dropship/shuttle = SSshuttle.getShuttle(shuttleId)
. = list()
- .["shuttle_mode"] = shuttle.mode
- .["flight_time"] = shuttle.timeLeft(0)
- .["is_disabled"] = disabled || shuttle.is_hijacked
+ .["shuttle_id"] = shuttle?.id
+ .["shuttle_mode"] = shuttle?.mode
+ .["flight_time"] = shuttle?.timeLeft(0)
+ .["is_disabled"] = disabled
+ if(shuttle?.is_hijacked)
+ .["is_disabled"] = TRUE
.["locked_down"] = FALSE
.["can_fly_by"] = !is_remote
.["can_set_automated"] = is_remote
.["automated_control"] = list(
- "is_automated" = shuttle.automated_hangar_id != null || shuttle.automated_lz_id != null,
- "hangar_lz" = shuttle.automated_hangar_id,
- "ground_lz" = shuttle.automated_lz_id
+ "is_automated" = shuttle?.automated_hangar_id != null || shuttle?.automated_lz_id != null,
+ "hangar_lz" = shuttle?.automated_hangar_id,
+ "ground_lz" = shuttle?.automated_lz_id
)
.["primary_lz"] = SSticker.mode.active_lz?.linked_lz
- if(shuttle.destination)
- .["target_destination"] = shuttle.in_flyby? "Flyby" : shuttle.destination.name
+ if(shuttle?.destination)
+ .["target_destination"] = shuttle?.in_flyby? "Flyby" : shuttle?.destination.name
- .["door_status"] = is_remote ? list() : shuttle.get_door_data()
+ .["door_status"] = is_remote ? list() : shuttle?.get_door_data()
.["has_flyby_skill"] = skillcheck(user, SKILL_PILOT, SKILL_PILOT_EXPERT)
// Launch Alarm Variables
- .["playing_launch_announcement_alarm"] = shuttle.playing_launch_announcement_alarm
+ .["playing_launch_announcement_alarm"] = shuttle?.playing_launch_announcement_alarm
.["destinations"] = list()
// add flight
- .["destinations"] += list(
- list(
- "id" = DROPSHIP_FLYBY_ID,
- "name" = "Flyby",
- "available" = TRUE,
- "error" = FALSE
+ if(!is_remote)
+ .["destinations"] += list(
+ list(
+ "id" = DROPSHIP_FLYBY_ID,
+ "name" = "Flyby",
+ "available" = TRUE,
+ "error" = FALSE
+ )
)
- )
for(var/obj/docking_port/stationary/dock in compatible_landing_zones)
var/dock_reserved = FALSE
@@ -377,7 +425,7 @@
if(dock == other_shuttle.destination)
dock_reserved = TRUE
break
- var/can_dock = shuttle.canDock(dock)
+ var/can_dock = shuttle?.canDock(dock)
var/list/dockinfo = list(
"id" = dock.id,
"name" = dock.name,
@@ -391,16 +439,23 @@
if(.)
return
var/obj/docking_port/mobile/marine_dropship/shuttle = SSshuttle.getShuttle(shuttleId)
- if(disabled || shuttle.is_hijacked)
+ if(disabled || (shuttle && shuttle.is_hijacked))
+ switch(action)
+ if ("change_shuttle")
+ var/new_shuttle = params["new_shuttle"]
+ return set_shuttle(new_shuttle)
return
var/mob/user = usr
- var/obj/structure/machinery/computer/shuttle/dropship/flight/comp = shuttle.getControlConsole()
- if(comp.dropship_control_lost)
- to_chat(user, SPAN_WARNING("The dropship isn't responding to controls."))
- return
+ if (shuttle)
+ var/obj/structure/machinery/computer/shuttle/dropship/flight/comp = shuttle.getControlConsole()
+ if(comp.dropship_control_lost)
+ to_chat(user, SPAN_WARNING("The dropship isn't responding to controls."))
+ return
switch(action)
if("move")
+ if(!shuttle)
+ return FALSE
if(shuttle.mode != SHUTTLE_IDLE && (shuttle.mode != SHUTTLE_CALL && !shuttle.destination))
to_chat(usr, SPAN_WARNING("You can't move to a new destination right now."))
return TRUE
@@ -458,6 +513,8 @@
playsound(loc, get_sfx("terminal_button"), KEYBOARD_SOUND_VOLUME, 1)
return FALSE
if("door-control")
+ if(!shuttle)
+ return FALSE
if(shuttle.mode == SHUTTLE_CALL || shuttle.mode == SHUTTLE_RECALL)
return TRUE
var/interaction = params["interaction"]
@@ -468,6 +525,8 @@
playsound(loc, 'sound/machines/terminal_error.ogg', KEYBOARD_SOUND_VOLUME, 1)
to_chat(user, SPAN_WARNING("Door controls have been overridden. Please call technical support."))
if("set-automate")
+ if(!shuttle)
+ return FALSE
var/almayer_lz = params["hangar_id"]
var/ground_lz = params["ground_id"]
var/delay = clamp(params["delay"] SECONDS, DROPSHIP_MIN_AUTO_DELAY, DROPSHIP_MAX_AUTO_DELAY)
@@ -491,14 +550,9 @@
message_admins(log)
log_interact(user, msg = "[log]")
return
- /* TODO
- if(!dropship.automated_launch) //If we're toggling it on...
- var/auto_delay
- auto_delay = tgui_input_number(usr, "Set the delay for automated departure after recharging (seconds)", "Automated Departure Settings", DROPSHIP_MIN_AUTO_DELAY/10, DROPSHIP_MAX_AUTO_DELAY/10, DROPSHIP_MIN_AUTO_DELAY/10)
- dropship.automated_launch_delay = Clamp(auto_delay SECONDS, DROPSHIP_MIN_AUTO_DELAY, DROPSHIP_MAX_AUTO_DELAY)
- dropship.set_automated_launch(!dropship.automated_launch)
- */
if("disable-automate")
+ if(!shuttle)
+ return FALSE
shuttle.automated_hangar_id = null
shuttle.automated_lz_id = null
shuttle.automated_delay = null
@@ -510,18 +564,43 @@
return
if("cancel-flyby")
+ if(!shuttle)
+ return FALSE
if(shuttle.in_flyby && shuttle.timer && shuttle.timeLeft(1) >= DROPSHIP_WARMUP_TIME)
shuttle.setTimer(DROPSHIP_WARMUP_TIME)
if("play_launch_announcement_alarm")
+ if(!shuttle)
+ return FALSE
if (shuttle.mode != SHUTTLE_IDLE && shuttle.mode != SHUTTLE_RECHARGING)
to_chat(usr, SPAN_WARNING("The Launch Announcement Alarm is designed to tell people that you're going to take off soon."))
- return
+ return TRUE
shuttle.alarm_sound_loop.start()
shuttle.playing_launch_announcement_alarm = TRUE
- return
+ return TRUE
if ("stop_playing_launch_announcement_alarm")
+ if(!shuttle)
+ return FALSE
stop_playing_launch_announcement_alarm()
- return
+ return TRUE
+ if ("change_shuttle")
+ var/new_shuttle = params["new_shuttle"]
+ return set_shuttle(new_shuttle)
+
+/obj/structure/machinery/computer/shuttle/dropship/flight/proc/set_shuttle(new_shuttle)
+ var/mob/user = usr
+ if(!new_shuttle || shuttleId == new_shuttle)
+ return FALSE
+ var/found = FALSE
+ var/list/alternatives = alternative_shuttles()
+ for(var/alt_shuttle in alternatives)
+ if(alt_shuttle["id"] == new_shuttle)
+ found = TRUE
+ if(found)
+ shuttleId = new_shuttle
+ update_static_data(user)
+ else
+ log_admin("Player [user] attempted to change shuttle illegally.")
+ return TRUE
/obj/structure/machinery/computer/shuttle/dropship/flight/proc/stop_playing_launch_announcement_alarm()
var/obj/docking_port/mobile/marine_dropship/shuttle = SSshuttle.getShuttle(shuttleId)
@@ -534,18 +613,19 @@
icon = 'icons/obj/structures/machinery/computer.dmi'
icon_state = "shuttle"
linked_lz = DROPSHIP_LZ1
- shuttleId = DROPSHIP_ALAMO
is_remote = TRUE
+ can_change_shuttle = TRUE
/obj/structure/machinery/computer/shuttle/dropship/flight/lz2
icon = 'icons/obj/structures/machinery/computer.dmi'
icon_state = "shuttle"
linked_lz = DROPSHIP_LZ2
- shuttleId = DROPSHIP_NORMANDY
is_remote = TRUE
+ can_change_shuttle = TRUE
/obj/structure/machinery/computer/shuttle/dropship/flight/remote_control
icon = 'icons/obj/structures/machinery/computer.dmi'
icon_state = "shuttle"
is_remote = TRUE
needs_power = TRUE
+ can_change_shuttle = TRUE
diff --git a/code/modules/shuttle/dropship.dm b/code/modules/shuttle/dropship.dm
index cbca500f8f71..b8c920f2684c 100644
--- a/code/modules/shuttle/dropship.dm
+++ b/code/modules/shuttle/dropship.dm
@@ -215,3 +215,108 @@
/obj/structure/shuttle/part/dropship2/transparent/right_outer_bottom_wing
icon_state = "6"
+
+/obj/structure/shuttle/part/dropship3
+ name = "\improper Saipan"
+ icon = 'icons/turf/dropship3.dmi'
+ icon_state = "1"
+ opacity = TRUE
+
+/obj/structure/shuttle/part/dropship3/ex_act(severity, direction)
+ return FALSE
+
+/obj/structure/shuttle/part/dropship3/transparent
+ opacity = FALSE
+
+/obj/structure/shuttle/part/dropship3/transparent/nose_top_right
+ icon_state = "102"
+
+/obj/structure/shuttle/part/dropship3/transparent/nose_center
+ icon_state = "101"
+
+/obj/structure/shuttle/part/dropship3/transparent/nose_top_left
+ icon_state = "100"
+
+/obj/structure/shuttle/part/dropship3/nose_front_left
+ icon_state = "95"
+
+/obj/structure/shuttle/part/dropship3/nose_front_right
+ icon_state = "99"
+
+/obj/structure/shuttle/part/dropship3/transparent/inner_right_weapons
+ icon_state = "90"
+
+/obj/structure/shuttle/part/dropship3/transparent/outer_right_weapons
+ icon_state = "91"
+
+/obj/structure/shuttle/part/dropship3/transparent/inner_left_weapons
+ icon_state = "85"
+
+/obj/structure/shuttle/part/dropship3/transparent/outer_left_weapons
+ icon_state = "84"
+
+/obj/structure/shuttle/part/dropship3/transparent/upper_right_wing
+ icon_state = "74"
+
+/obj/structure/shuttle/part/dropship3/transparent/middle_right_wing
+ icon_state = "70"
+
+/obj/structure/shuttle/part/dropship3/transparent/lower_right_wing
+ icon_state = "65"
+
+/obj/structure/shuttle/part/dropship3/transparent/upper_left_wing
+ icon_state = "71"
+
+/obj/structure/shuttle/part/dropship3/transparent/middle_left_wing
+ icon_state = "66"
+
+/obj/structure/shuttle/part/dropship3/transparent/lower_left_wing
+ icon_state = "61"
+
+/obj/structure/shuttle/part/dropship3/lower_left_wall
+ icon_state = "46"
+
+/obj/structure/shuttle/part/dropship3/lower_right_wall
+ icon_state = "49"
+
+/obj/structure/shuttle/part/dropship3/transparent/engine_left_cap
+ icon_state = "40"
+
+/obj/structure/shuttle/part/dropship3/transparent/engine_right_cap
+ icon_state = "41"
+
+/obj/structure/shuttle/part/dropship3/transparent/engine_left_exhaust
+ icon_state = "16"
+
+/obj/structure/shuttle/part/dropship3/transparent/engine_right_exhaust
+ icon_state = "17"
+
+/obj/structure/shuttle/part/dropship3/bottom_left_wall
+ icon_state = "9"
+
+/obj/structure/shuttle/part/dropship3/bottom_right_wall
+ icon_state = "15"
+
+/obj/structure/shuttle/part/dropship3/left_inner_wing_connector
+ icon_state = "7"
+
+/obj/structure/shuttle/part/dropship3/right_inner_wing_connector
+ icon_state = "8"
+
+/obj/structure/shuttle/part/dropship3/left_outer_wing_connector
+ icon_state = "3"
+
+/obj/structure/shuttle/part/dropship3/right_outer_wing_connector
+ icon_state = "4"
+
+/obj/structure/shuttle/part/dropship3/transparent/left_outer_bottom_wing
+ icon_state = "1"
+
+/obj/structure/shuttle/part/dropship3/transparent/left_outer_inner_wing
+ icon_state = "2"
+
+/obj/structure/shuttle/part/dropship3/transparent/right_inner_bottom_wing
+ icon_state = "5"
+
+/obj/structure/shuttle/part/dropship3/transparent/right_outer_bottom_wing
+ icon_state = "6"
diff --git a/code/modules/shuttle/shuttles/dropship.dm b/code/modules/shuttle/shuttles/dropship.dm
index 86e869b3361e..a1405d7e4e23 100644
--- a/code/modules/shuttle/shuttles/dropship.dm
+++ b/code/modules/shuttle/shuttles/dropship.dm
@@ -146,6 +146,14 @@
/obj/docking_port/mobile/marine_dropship/normandy/get_transit_path_type()
return /turf/open/space/transit/dropship/normandy
+/obj/docking_port/mobile/marine_dropship/saipan
+ name = "Saipan"
+ id = DROPSHIP_SAIPAN
+ preferred_direction = SOUTH // If you are changing this, please update the dir of the path below as well
+
+/obj/docking_port/mobile/marine_dropship/saipan/get_transit_path_type()
+ return /turf/open/space/transit/dropship/saipan
+
/obj/docking_port/mobile/marine_dropship/check()
. = ..()
@@ -327,3 +335,7 @@
/datum/map_template/shuttle/normandy
name = "Normandy"
shuttle_id = DROPSHIP_NORMANDY
+
+/datum/map_template/shuttle/saipan
+ name = "Saipan"
+ shuttle_id = DROPSHIP_SAIPAN
diff --git a/code/modules/shuttles/shuttle_console.dm b/code/modules/shuttles/shuttle_console.dm
index 502d7c1ffde4..cc7d90e93080 100644
--- a/code/modules/shuttles/shuttle_console.dm
+++ b/code/modules/shuttles/shuttle_console.dm
@@ -396,6 +396,30 @@ GLOBAL_LIST_EMPTY(shuttle_controls)
onboard = 1
density = TRUE
+/obj/structure/machinery/computer/shuttle_control/dropship3
+ name = "\improper 'Saipan' dropship console"
+ desc = "The remote controls for the 'Saipan' Dropship."
+ icon = 'icons/obj/structures/machinery/computer.dmi'
+ icon_state = "shuttle"
+
+ shuttle_type = SHUTTLE_DROPSHIP
+ unslashable = TRUE
+ unacidable = TRUE
+ exproof = 1
+ req_one_access = list(ACCESS_MARINE_LEADER, ACCESS_MARINE_DROPSHIP)
+
+/obj/structure/machinery/computer/shuttle_control/dropship3/Initialize()
+ . = ..()
+ shuttle_tag = DROPSHIP_SAIPAN
+
+/obj/structure/machinery/computer/shuttle_control/dropship3/onboard
+ name = "\improper 'Saipan' flight controls"
+ desc = "The flight controls for the 'Saipan' Dropship."
+ icon = 'icons/obj/structures/machinery/shuttle-parts.dmi'
+ icon_state = "console"
+ onboard = 1
+ density = TRUE
+
//Elevator control console
/obj/structure/machinery/computer/shuttle_control/ice_colony
diff --git a/code/modules/surgery/chestburster.dm b/code/modules/surgery/chestburster.dm
index a840bd026c40..e387978fb8ee 100644
--- a/code/modules/surgery/chestburster.dm
+++ b/code/modules/surgery/chestburster.dm
@@ -111,12 +111,12 @@
name = "Remove Larva"
desc = "extract the xenomorph larva"
accept_hand = TRUE
- /*Similar to PINCH, but balanced around 100 = using bare hands. Haemostat is faster and better,
- other tools are slower but don't burn the surgeon.*/
+ /*Using the hands to forcefully rip out the larva will be faster at the cost of damaging both the doctor and the patient, with the addition of organ damage.
+ Unlike before, the hemostat is now the best tool for removing removing the larva, as opposed to wirecutters and the fork.*/
tools = list(
- /obj/item/tool/surgery/hemostat = 1.5,
- /obj/item/tool/wirecutters = SURGERY_TOOL_MULT_SUBOPTIMAL,
- /obj/item/tool/kitchen/utensil/fork = SURGERY_TOOL_MULT_SUBSTITUTE
+ /obj/item/tool/surgery/hemostat = 1.5 * SURGERY_TOOL_MULT_IDEAL,
+ /obj/item/tool/wirecutters = 1.5 * SURGERY_TOOL_MULT_SUBOPTIMAL,
+ /obj/item/tool/kitchen/utensil/fork = 1.5 * SURGERY_TOOL_MULT_SUBSTITUTE
)
time = 6 SECONDS
preop_sound = 'sound/surgery/hemostat1.ogg'
@@ -131,9 +131,9 @@
SPAN_NOTICE("[user] tries to extract the larva from [target]'s chest with \the [tool]."))
else
user.affected_message(target,
- SPAN_NOTICE("You try to extract the larva from [target]'s chest."),
- SPAN_NOTICE("[user] tries to extract the larva from your chest."),
- SPAN_NOTICE("[user] tries to extract the larva from [target]'s chest."))
+ SPAN_NOTICE("You try to forcefully rip the larva from [target]'s chest with your bare hand."),
+ SPAN_NOTICE("[user] tries to forcefully rip the larva from your chest."),
+ SPAN_NOTICE("[user] tries to forcefully rip the larva from [target]'s chest."))
target.custom_pain("Something hurts horribly in your chest!",1)
log_interact(user, target, "[key_name(user)] started to remove an embryo from [key_name(target)]'s ribcage.")
@@ -148,10 +148,16 @@
SPAN_WARNING("[user] pulls a wriggling parasite out of [target]'s ribcage!"))
else
user.affected_message(target,
- SPAN_WARNING("Your hands are burned by acid as you pull a wriggling parasite out of [target]'s ribcage!"),
- SPAN_WARNING("[user]'s hands are burned by acid as \he pulls a wriggling parasite out of your ribcage!"),
- SPAN_WARNING("[user]'s hands are burned by acid as \he pulls a wriggling parasite out of [target]'s ribcage!"))
-
+ SPAN_WARNING("Your hands and your patient's insides are burned by acid as you forcefully rip a wriggling parasite out of [target]'s ribcage!"),
+ SPAN_WARNING("[user]'s hands are burned by acid as \he rips a wriggling parasite out of your ribcage!"),
+ SPAN_WARNING("[user]'s hands are burned by acid as \he rips a wriggling parasite out of [target]'s ribcage!"))
+ var/datum/internal_organ/impacted_organ = pick(surgery.affected_limb.internal_organs)
+ impacted_organ.take_damage(5, FALSE)
+ if(target.stat == CONSCIOUS)
+ target.emote("scream")
+ target.apply_damage(15, BURN, target_zone)
+
+ play_failure_sound(user, target, target_zone, tool, surgery)
user.emote("pain")
if(user.hand)
diff --git a/code/modules/surgery/internal_bleeding.dm b/code/modules/surgery/internal_bleeding.dm
index e4afcad5ec99..c67d670ea521 100644
--- a/code/modules/surgery/internal_bleeding.dm
+++ b/code/modules/surgery/internal_bleeding.dm
@@ -39,6 +39,7 @@
/datum/surgery_step/fix_vein/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, tool_type, datum/surgery/surgery)
user.count_niche_stat(STATISTICS_NICHE_SURGERY_IB)
+ user.life_ib_total++
user.affected_message(target,
SPAN_NOTICE("You finish repairing [target]'s damaged vein."),
diff --git a/code/modules/tgs/README.md b/code/modules/tgs/README.md
index 6319028d8106..35ca73d7e9a8 100644
--- a/code/modules/tgs/README.md
+++ b/code/modules/tgs/README.md
@@ -1,6 +1,6 @@
# DMAPI Internals
-This folder should be placed on it's own inside a codebase that wishes to use the TGS DMAPI. Warranty void if modified.
+This folder should be placed on its own inside a codebase that wishes to use the TGS DMAPI. Warranty void if modified.
- [includes.dm](./includes.dm) is the file that should be included by DM code, it handles including the rest.
- The [core](./core) folder includes all code not directly part of any API version.
diff --git a/code/modules/tgs/core/README.md b/code/modules/tgs/core/README.md
index b82d8f49e297..965e21b549a3 100644
--- a/code/modules/tgs/core/README.md
+++ b/code/modules/tgs/core/README.md
@@ -3,7 +3,7 @@
This folder contains all DMAPI code not directly involved in an API.
- [_definitions.dm](./definitions.dm) contains defines needed across DMAPI internals.
+- [byond_world_export.dm](./byond_world_export.dm) contains the default `/datum/tgs_http_handler` implementation which uses `world.Export()`.
- [core.dm](./core.dm) contains the implementations of the `/world/proc/TgsXXX()` procs. Many map directly to the `/datum/tgs_api` functions. It also contains the /datum selection and setup code.
- [datum.dm](./datum.dm) contains the `/datum/tgs_api` declarations that all APIs must implement.
- [tgs_version.dm](./tgs_version.dm) contains the `/datum/tgs_version` definition
--
diff --git a/code/modules/tgs/core/byond_world_export.dm b/code/modules/tgs/core/byond_world_export.dm
new file mode 100644
index 000000000000..6ef8d841b8f7
--- /dev/null
+++ b/code/modules/tgs/core/byond_world_export.dm
@@ -0,0 +1,22 @@
+/datum/tgs_http_handler/byond_world_export
+
+/datum/tgs_http_handler/byond_world_export/PerformGet(url)
+ // This is an infinite sleep until we get a response
+ var/export_response = world.Export(url)
+ TGS_DEBUG_LOG("byond_world_export: Export complete")
+
+ if(!export_response)
+ TGS_ERROR_LOG("byond_world_export: Failed request: [url]")
+ return new /datum/tgs_http_result(null, FALSE)
+
+ var/content = export_response["CONTENT"]
+ if(!content)
+ TGS_ERROR_LOG("byond_world_export: Failed request, missing content!")
+ return new /datum/tgs_http_result(null, FALSE)
+
+ var/response_json = TGS_FILE2TEXT_NATIVE(content)
+ if(!response_json)
+ TGS_ERROR_LOG("byond_world_export: Failed request, failed to load content!")
+ return new /datum/tgs_http_result(null, FALSE)
+
+ return new /datum/tgs_http_result(response_json, TRUE)
diff --git a/code/modules/tgs/core/core.dm b/code/modules/tgs/core/core.dm
index 15622228e91f..63cb5a2c3514 100644
--- a/code/modules/tgs/core/core.dm
+++ b/code/modules/tgs/core/core.dm
@@ -1,4 +1,4 @@
-/world/TgsNew(datum/tgs_event_handler/event_handler, minimum_required_security_level = TGS_SECURITY_ULTRASAFE)
+/world/TgsNew(datum/tgs_event_handler/event_handler, minimum_required_security_level = TGS_SECURITY_ULTRASAFE, datum/tgs_http_handler/http_handler = null)
var/current_api = TGS_READ_GLOBAL(tgs)
if(current_api)
TGS_ERROR_LOG("API datum already set (\ref[current_api] ([current_api]))! Was TgsNew() called more than once?")
@@ -55,7 +55,10 @@
TGS_ERROR_LOG("Invalid parameter for event_handler: [event_handler]")
event_handler = null
- var/datum/tgs_api/new_api = new api_datum(event_handler, version)
+ if(!http_handler)
+ http_handler = new /datum/tgs_http_handler/byond_world_export
+
+ var/datum/tgs_api/new_api = new api_datum(event_handler, version, http_handler)
TGS_WRITE_GLOBAL(tgs, new_api)
diff --git a/code/modules/tgs/core/datum.dm b/code/modules/tgs/core/datum.dm
index f734fd0527f0..3ca53e9bf7c6 100644
--- a/code/modules/tgs/core/datum.dm
+++ b/code/modules/tgs/core/datum.dm
@@ -6,7 +6,7 @@ TGS_DEFINE_AND_SET_GLOBAL(tgs, null)
var/list/warned_deprecated_command_runs
-/datum/tgs_api/New(datum/tgs_event_handler/event_handler, datum/tgs_version/version)
+/datum/tgs_api/New(datum/tgs_event_handler/event_handler, datum/tgs_version/version, datum/tgs_http_handler/http_handler)
..()
src.event_handler = event_handler
src.version = version
diff --git a/code/modules/tgs/includes.dm b/code/modules/tgs/includes.dm
index 23b714f9d064..f5118ed55a3c 100644
--- a/code/modules/tgs/includes.dm
+++ b/code/modules/tgs/includes.dm
@@ -1,4 +1,5 @@
#include "core\_definitions.dm"
+#include "core\byond_world_export.dm"
#include "core\core.dm"
#include "core\datum.dm"
#include "core\tgs_version.dm"
diff --git a/code/modules/tgs/v5/api.dm b/code/modules/tgs/v5/api.dm
index 95b8edd3ee5c..3e328fc7c27d 100644
--- a/code/modules/tgs/v5/api.dm
+++ b/code/modules/tgs/v5/api.dm
@@ -31,9 +31,12 @@
var/detached = FALSE
-/datum/tgs_api/v5/New()
+ var/datum/tgs_http_handler/http_handler
+
+/datum/tgs_api/v5/New(datum/tgs_event_handler/event_handler, datum/tgs_version/version, datum/tgs_http_handler/http_handler)
. = ..()
interop_version = version
+ src.http_handler = http_handler
TGS_DEBUG_LOG("V5 API created: [json_encode(args)]")
/datum/tgs_api/v5/ApiVersion()
@@ -50,7 +53,9 @@
version = null // we want this to be the TGS version, not the interop version
// sleep once to prevent an issue where world.Export on the first tick can hang indefinitely
+ TGS_DEBUG_LOG("Starting Export bug prevention sleep tick. time:[world.time] sleep_offline:[world.sleep_offline]")
sleep(world.tick_lag)
+ TGS_DEBUG_LOG("Export bug prevention sleep complete")
var/list/bridge_response = Bridge(DMAPI5_BRIDGE_COMMAND_STARTUP, list(DMAPI5_BRIDGE_PARAMETER_MINIMUM_SECURITY_LEVEL = minimum_required_security_level, DMAPI5_BRIDGE_PARAMETER_VERSION = api_version.raw_parameter, DMAPI5_PARAMETER_CUSTOM_COMMANDS = ListCustomCommands(), DMAPI5_PARAMETER_TOPIC_PORT = GetTopicPort()))
if(!istype(bridge_response))
diff --git a/code/modules/tgs/v5/bridge.dm b/code/modules/tgs/v5/bridge.dm
index 0c5e701a32b6..62201fcc9e58 100644
--- a/code/modules/tgs/v5/bridge.dm
+++ b/code/modules/tgs/v5/bridge.dm
@@ -78,27 +78,24 @@
WaitForReattach(FALSE)
TGS_DEBUG_LOG("Bridge request start")
- // This is an infinite sleep until we get a response
- var/export_response = world.Export(bridge_request)
+ var/datum/tgs_http_result/result = http_handler.PerformGet(bridge_request)
TGS_DEBUG_LOG("Bridge request complete")
- if(!export_response)
- TGS_ERROR_LOG("Failed bridge request: [bridge_request]")
+ if(isnull(result))
+ TGS_ERROR_LOG("Failed bridge request, handler returned null!")
return
- var/content = export_response["CONTENT"]
- if(!content)
- TGS_ERROR_LOG("Failed bridge request, missing content!")
+ if(!istype(result) || result.type != /datum/tgs_http_result)
+ TGS_ERROR_LOG("Failed bridge request, handler returned non-[/datum/tgs_http_result]!")
return
- var/response_json = TGS_FILE2TEXT_NATIVE(content)
- if(!response_json)
- TGS_ERROR_LOG("Failed bridge request, failed to load content!")
+ if(!result.success)
+ TGS_DEBUG_LOG("Failed bridge request, HTTP request failed!")
return
- var/list/bridge_response = json_decode(response_json)
+ var/list/bridge_response = json_decode(result.response_text)
if(!bridge_response)
- TGS_ERROR_LOG("Failed bridge request, bad json: [response_json]")
+ TGS_ERROR_LOG("Failed bridge request, bad json: [result.response_text]")
return
var/error = bridge_response[DMAPI5_RESPONSE_ERROR_MESSAGE]
diff --git a/code/modules/unit_tests/create_and_destroy.dm b/code/modules/unit_tests/create_and_destroy.dm
index 55711ba7ecc6..7c829ad13e42 100644
--- a/code/modules/unit_tests/create_and_destroy.dm
+++ b/code/modules/unit_tests/create_and_destroy.dm
@@ -31,7 +31,6 @@ GLOBAL_VAR_INIT(running_create_and_destroy, FALSE)
// fuck interiors
ignore += typesof(/obj/vehicle)
ignore += typesof(/obj/effect/vehicle_spawner)
- ignore += typesof(/obj/structure/closet/fancy)
// Always ought to have an associated escape menu. Any references it could possibly hold would need one regardless.
ignore += subtypesof(/atom/movable/screen/escape_menu)
diff --git a/code/modules/vehicles/hardpoints/hardpoint.dm b/code/modules/vehicles/hardpoints/hardpoint.dm
index f94d0dc6b373..f0b519759727 100644
--- a/code/modules/vehicles/hardpoints/hardpoint.dm
+++ b/code/modules/vehicles/hardpoints/hardpoint.dm
@@ -336,7 +336,7 @@
. = ..()
if(health <= 0)
. += "It's busted!"
- else if(isobserver(user) || (ishuman(user) && (skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED) || skillcheck(user, SKILL_VEHICLE, SKILL_VEHICLE_CREWMAN))))
+ else if(isobserver(user) || (ishuman(user) && (skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_NOVICE) || skillcheck(user, SKILL_VEHICLE, SKILL_VEHICLE_CREWMAN))))
. += "It's at [round(get_integrity_percent(), 1)]% integrity!"
//reloading hardpoint - take mag from backup clips and replace current ammo with it. Will change in future. Called via weapons loader
diff --git a/code/modules/vehicles/hardpoints/hardpoint_ammo/minigun_ammo.dm b/code/modules/vehicles/hardpoints/hardpoint_ammo/minigun_ammo.dm
index 78222cdb3a40..b3f31d824ebf 100644
--- a/code/modules/vehicles/hardpoints/hardpoint_ammo/minigun_ammo.dm
+++ b/code/modules/vehicles/hardpoints/hardpoint_ammo/minigun_ammo.dm
@@ -5,6 +5,6 @@
caliber = "7.62x51mm" //Correlates to miniguns
icon_state = "painless"
w_class = SIZE_LARGE //Primary weapon ammo should probably all be the same w_class
- default_ammo = /datum/ammo/bullet/minigun/tank
+ default_ammo = /datum/ammo/bullet/tank/minigun
max_rounds = 500
gun_type = /obj/item/hardpoint/primary/minigun
diff --git a/code/modules/vehicles/hardpoints/holder/holder.dm b/code/modules/vehicles/hardpoints/holder/holder.dm
index df91cbc51b65..948142383cca 100644
--- a/code/modules/vehicles/hardpoints/holder/holder.dm
+++ b/code/modules/vehicles/hardpoints/holder/holder.dm
@@ -23,7 +23,7 @@
. = ..()
if(health <= 0)
. += "It's busted!"
- else if(isobserver(user) || (ishuman(user) && (skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED) || skillcheck(user, SKILL_VEHICLE, SKILL_VEHICLE_CREWMAN))))
+ else if(isobserver(user) || (ishuman(user) && (skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_NOVICE) || skillcheck(user, SKILL_VEHICLE, SKILL_VEHICLE_CREWMAN))))
. += "It's at [round(get_integrity_percent(), 1)]% integrity!"
for(var/obj/item/hardpoint/H in hardpoints)
. += "There is \a [H] module installed on [src]."
@@ -100,7 +100,7 @@
/obj/item/hardpoint/holder/attackby(obj/item/O, mob/user)
if(HAS_TRAIT(O, TRAIT_TOOL_CROWBAR))
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(user, SPAN_WARNING("You don't know what to do with \the [O] on \the [src]."))
return
@@ -113,7 +113,7 @@
return
if(istype(O, /obj/item/hardpoint))
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(user, SPAN_WARNING("You don't know what to do with \the [O] on \the [src]."))
return
diff --git a/code/modules/vehicles/hardpoints/primary/minigun.dm b/code/modules/vehicles/hardpoints/primary/minigun.dm
index 8bc7c55bbb8a..be44b86e2435 100644
--- a/code/modules/vehicles/hardpoints/primary/minigun.dm
+++ b/code/modules/vehicles/hardpoints/primary/minigun.dm
@@ -26,16 +26,16 @@
"8" = list(-77, 0)
)
- scatter = 7
+ scatter = 18
gun_firemode = GUN_FIREMODE_AUTOMATIC
gun_firemode_list = list(
GUN_FIREMODE_AUTOMATIC,
)
- fire_delay = 0.8 SECONDS //base fire rate, modified by stage_delay_mult
+ fire_delay = 0.7 SECONDS //base fire rate, modified by stage_delay_mult
activation_sounds = list('sound/weapons/gun_minigun.ogg')
/// Active firing time to reach max spin_stage.
- var/spinup_time = 8 SECONDS
+ var/spinup_time = 10 SECONDS
/// Grace period before losing spin_stage.
var/spindown_grace_time = 2 SECONDS
COOLDOWN_DECLARE(spindown_grace_cooldown)
@@ -52,7 +52,7 @@
/obj/item/hardpoint/primary/minigun/set_fire_delay(value)
fire_delay = value
- SEND_SIGNAL(src, COMSIG_GUN_AUTOFIREDELAY_MODIFIED, fire_delay * stage_delay_mult)
+ SEND_SIGNAL(src, COMSIG_GUN_AUTOFIREDELAY_MODIFIED, fire_delay * stage_delay_mult, scatter * stage_delay_mult)
/obj/item/hardpoint/primary/minigun/set_fire_cooldown()
calculate_stage_delay_mult() //needs to check grace_cooldown before refreshed
@@ -79,5 +79,11 @@
var/new_stage_rate = stage_rate[floor(spin_stage)]
if(old_stage_rate != new_stage_rate)
+ scatter = initial(scatter) * (1/new_stage_rate)
stage_delay_mult = 1 / new_stage_rate
SEND_SIGNAL(src, COMSIG_GUN_AUTOFIREDELAY_MODIFIED, fire_delay * stage_delay_mult)
+
+/obj/item/hardpoint/primary/minigun/set_bullet_traits()
+ LAZYADD(traits_to_give, list(
+ BULLET_TRAIT_ENTRY(/datum/element/bullet_trait_iff)
+ ))
diff --git a/code/modules/vehicles/interior/areas.dm b/code/modules/vehicles/interior/areas.dm
index 399e55e11450..557edbb25f32 100644
--- a/code/modules/vehicles/interior/areas.dm
+++ b/code/modules/vehicles/interior/areas.dm
@@ -32,6 +32,3 @@
/area/interior/vehicle/arc
name = "\improper ARC interior"
icon_state = "arc"
-
-/area/interior/fancylocker
- name = "closet interior"
diff --git a/code/modules/vehicles/interior/interactable/vendors.dm b/code/modules/vehicles/interior/interactable/vendors.dm
index 8069c8ba71e4..4ad837169fba 100644
--- a/code/modules/vehicles/interior/interactable/vendors.dm
+++ b/code/modules/vehicles/interior/interactable/vendors.dm
@@ -182,7 +182,7 @@
list("M20 Claymore Anti-Personnel Mine", 0, /obj/item/explosive/mine, VENDOR_ITEM_REGULAR),
list("M40 HEDP Grenade", 0, /obj/item/explosive/grenade/high_explosive, VENDOR_ITEM_REGULAR),
list("M40 HIDP Incendiary Grenade", 0, /obj/item/explosive/grenade/incendiary, VENDOR_ITEM_REGULAR),
- list("M40 HPDP White Phosphorus Smoke Grenade", 0, /obj/item/explosive/grenade/phosphorus, VENDOR_ITEM_REGULAR),
+ list("M40 CCDP Chemical Compound Smoke Grenade", 0, /obj/item/explosive/grenade/phosphorus, VENDOR_ITEM_REGULAR),
list("M40 HSDP Smoke Grenade", floor(scale * 1), /obj/item/explosive/grenade/smokebomb, VENDOR_ITEM_REGULAR),
list("M74 AGM-Frag Airburst Grenade", 0, /obj/item/explosive/grenade/high_explosive/airburst, VENDOR_ITEM_REGULAR),
list("M74 AGM-Incendiary Airburst Grenade", 0, /obj/item/explosive/grenade/incendiary/airburst, VENDOR_ITEM_REGULAR),
diff --git a/code/modules/vehicles/interior/objects/fancy_locker.dm b/code/modules/vehicles/interior/objects/fancy_locker.dm
deleted file mode 100644
index 2cc7a02e548b..000000000000
--- a/code/modules/vehicles/interior/objects/fancy_locker.dm
+++ /dev/null
@@ -1,77 +0,0 @@
-/obj/structure/closet/fancy
- name = "fancy closet"
- desc = "It's a fancy storage unit."
-
- icon_state = "cabinet_closed"
- icon_closed = "cabinet_closed"
- icon_opened = "cabinet_open"
-
- unacidable = TRUE
-
- var/interior_map = /datum/map_template/interior/fancy_locker
- var/datum/interior/interior = null
- var/entrance_speed = 1 SECONDS
- var/passengers_slots = 2
- var/revivable_dead_slots = 0
- var/list/role_reserved_slots = list()
- var/xenos_slots = 2
-
-/obj/structure/closet/fancy/Initialize()
- . = ..()
- return INITIALIZE_HINT_LATELOAD
-
-/obj/structure/closet/fancy/LateInitialize()
- . = ..()
- interior = new(src)
- INVOKE_ASYNC(src, PROC_REF(do_create_interior))
-
-/obj/structure/closet/fancy/proc/do_create_interior()
- interior.create_interior(interior_map)
-
-/obj/structure/closet/fancy/Destroy()
- QDEL_NULL(interior)
- return ..()
-
-/obj/structure/closet/fancy/can_close()
- for(var/obj/structure/closet/closet in get_turf(src))
- if(closet != src && !closet.wall_mounted)
- return FALSE
- return TRUE
-
-/obj/structure/closet/fancy/store_mobs(stored_units)
- for(var/mob/M in loc)
- var/succ = interior.enter(M, "fancy")
- if(!succ)
- break
-
-/obj/structure/closet/fancy/ex_act(severity)
- return
-
-/obj/structure/interior_exit/fancy
- name = "fancy wooden door"
- icon = 'icons/obj/structures/doors/mineral_doors.dmi'
- icon_state = "wood"
- density = TRUE
-
-/obj/structure/interior_exit/fancy/attackby(obj/item/O, mob/M)
- attack_hand(M)
-
-/obj/structure/interior_exit/fancy/attack_hand(mob/escapee)
- var/obj/structure/closet/fancy/closet = find_closet()
- if(istype(closet) && !closet.can_open())
- to_chat(escapee, SPAN_WARNING("Something is blocking the exit!"))
- return
- ..()
-
-/obj/structure/interior_exit/fancy/attack_alien(mob/living/carbon/xenomorph/escapee, dam_bonus)
- var/obj/structure/closet/fancy/closet = find_closet()
- if(istype(closet) && !closet.can_open())
- to_chat(escapee, SPAN_XENOWARNING("Something is blocking the exit!"))
- return
- ..()
-
-/obj/structure/interior_exit/fancy/proc/find_closet()
- var/obj/structure/closet/fancy/possible_closet = interior.exterior
- if(istype(possible_closet))
- return possible_closet
- return
diff --git a/code/modules/vehicles/multitile/multitile_bump.dm b/code/modules/vehicles/multitile/multitile_bump.dm
index 11005cc87ea2..2885f99ed1f7 100644
--- a/code/modules/vehicles/multitile/multitile_bump.dm
+++ b/code/modules/vehicles/multitile/multitile_bump.dm
@@ -437,14 +437,6 @@
qdel(src)
return TRUE
-/obj/structure/machinery/hydro_floodlight/handle_vehicle_bump(obj/vehicle/multitile/V)
- if(V.vehicle_flags & VEHICLE_CLASS_WEAK)
- return FALSE
- playsound(V, 'sound/effects/metal_crash.ogg', 20)
- visible_message(SPAN_DANGER("\The [V] crushes \the [src]!"))
- qdel(src)
- return TRUE
-
/obj/structure/machinery/floodlight/handle_vehicle_bump(obj/vehicle/multitile/V)
if(V.vehicle_flags & VEHICLE_CLASS_WEAK)
return FALSE
diff --git a/code/modules/vehicles/multitile/multitile_hardpoints.dm b/code/modules/vehicles/multitile/multitile_hardpoints.dm
index b94b8459890f..5d1612852f8c 100644
--- a/code/modules/vehicles/multitile/multitile_hardpoints.dm
+++ b/code/modules/vehicles/multitile/multitile_hardpoints.dm
@@ -63,7 +63,7 @@
//Putting on hardpoints
//Similar to repairing stuff, down to the time delay
/obj/vehicle/multitile/proc/install_hardpoint(obj/item/O, mob/user)
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(user, SPAN_WARNING("You don't know what to do with [O] on \the [src]."))
return
@@ -132,7 +132,7 @@
//User-orientated proc for taking of hardpoints
//Again, similar to the above ones
/obj/vehicle/multitile/proc/uninstall_hardpoint(obj/item/O, mob/user)
- if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
+ if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED))
to_chat(user, SPAN_WARNING("You don't know what to do with \the [O] on \the [src]."))
return
diff --git a/code/modules/vehicles/vehicle.dm b/code/modules/vehicles/vehicle.dm
index c78be6fa57ec..b7f29da67fe7 100644
--- a/code/modules/vehicles/vehicle.dm
+++ b/code/modules/vehicles/vehicle.dm
@@ -6,6 +6,7 @@
anchored = TRUE
animate_movement = 1
can_buckle = TRUE
+ blocks_emissive = EMISSIVE_BLOCK_GENERIC
// The mobs that are in each position/seat of the vehicle
var/list/mob/seats = list(
diff --git a/colonialmarines.dme b/colonialmarines.dme
index 54760dde8594..78f81b2e1213 100644
--- a/colonialmarines.dme
+++ b/colonialmarines.dme
@@ -37,6 +37,7 @@
#include "code\__DEFINES\atmospherics.dm"
#include "code\__DEFINES\autofire.dm"
#include "code\__DEFINES\autolathe.dm"
+#include "code\__DEFINES\autowiki.dm"
#include "code\__DEFINES\blood.dm"
#include "code\__DEFINES\bsql.config.dm"
#include "code\__DEFINES\bullet_traits.dm"
@@ -535,6 +536,7 @@
#include "code\datums\emergency_calls\provost.dm"
#include "code\datums\emergency_calls\riot.dm"
#include "code\datums\emergency_calls\royal_marines.dm"
+#include "code\datums\emergency_calls\solar_devils.dm"
#include "code\datums\emergency_calls\souto.dm"
#include "code\datums\emergency_calls\supplies.dm"
#include "code\datums\emergency_calls\tank_crew.dm"
@@ -659,6 +661,7 @@
#include "code\datums\statistics\entities\xeno_stats.dm"
#include "code\datums\statistics\random_facts\christmas_fact.dm"
#include "code\datums\statistics\random_facts\damage_fact.dm"
+#include "code\datums\statistics\random_facts\ib_fact.dm"
#include "code\datums\statistics\random_facts\kills_fact.dm"
#include "code\datums\statistics\random_facts\random_fact.dm"
#include "code\datums\statistics\random_facts\revives_fact.dm"
@@ -839,11 +842,8 @@
#include "code\game\jobs\job\special\weyland_yutani.dm"
#include "code\game\machinery\aicore_lockdown.dm"
#include "code\game\machinery\air_alarm.dm"
-#include "code\game\machinery\air_sensor.dm"
#include "code\game\machinery\autolathe.dm"
#include "code\game\machinery\autolathe_datums.dm"
-#include "code\game\machinery\Beacon.dm"
-#include "code\game\machinery\bio-dome_floodlights.dm"
#include "code\game\machinery\biohazard_lockdown.dm"
#include "code\game\machinery\bioprinter.dm"
#include "code\game\machinery\buttons.dm"
@@ -862,14 +862,12 @@
#include "code\game\machinery\fuelcell_recycler.dm"
#include "code\game\machinery\fusion_engine.dm"
#include "code\game\machinery\gear.dm"
-#include "code\game\machinery\hologram.dm"
#include "code\game\machinery\holosign.dm"
#include "code\game\machinery\igniter.dm"
#include "code\game\machinery\iv_drip.dm"
#include "code\game\machinery\lightswitch.dm"
#include "code\game\machinery\line_nexter.dm"
#include "code\game\machinery\machinery.dm"
-#include "code\game\machinery\mass_driver.dm"
#include "code\game\machinery\mining.dm"
#include "code\game\machinery\misc.dm"
#include "code\game\machinery\navbeacon.dm"
@@ -1000,6 +998,7 @@
#include "code\game\machinery\vending\vendor_types\antag\antag_guns_sorted.dm"
#include "code\game\machinery\vending\vendor_types\crew\combat_correspondent.dm"
#include "code\game\machinery\vending\vendor_types\crew\commanding_officer.dm"
+#include "code\game\machinery\vending\vendor_types\crew\corporate_liaison.dm"
#include "code\game\machinery\vending\vendor_types\crew\engineering.dm"
#include "code\game\machinery\vending\vendor_types\crew\medical.dm"
#include "code\game\machinery\vending\vendor_types\crew\mp.dm"
@@ -1007,7 +1006,6 @@
#include "code\game\machinery\vending\vendor_types\crew\sea.dm"
#include "code\game\machinery\vending\vendor_types\crew\senior_officers.dm"
#include "code\game\machinery\vending\vendor_types\crew\staff_officer.dm"
-#include "code\game\machinery\vending\vendor_types\crew\staff_officer_armory.dm"
#include "code\game\machinery\vending\vendor_types\crew\synthetic.dm"
#include "code\game\machinery\vending\vendor_types\crew\vehicle_crew.dm"
#include "code\game\machinery\vending\vendor_types\squad_prep\squad_engineer.dm"
@@ -1125,7 +1123,6 @@
#include "code\game\objects\items\devices\debugger.dm"
#include "code\game\objects\items\devices\defibrillator.dm"
#include "code\game\objects\items\devices\device.dm"
-#include "code\game\objects\items\devices\drone_devices.dm"
#include "code\game\objects\items\devices\dummy_tablet.dm"
#include "code\game\objects\items\devices\flash.dm"
#include "code\game\objects\items\devices\flashlight.dm"
@@ -1286,7 +1283,6 @@
#include "code\game\objects\structures\curtains.dm"
#include "code\game\objects\structures\desertdam.dm"
#include "code\game\objects\structures\displaycase.dm"
-#include "code\game\objects\structures\electricchair.dm"
#include "code\game\objects\structures\extinguisher.dm"
#include "code\game\objects\structures\fence.dm"
#include "code\game\objects\structures\flora.dm"
@@ -1327,10 +1323,10 @@
#include "code\game\objects\structures\window_frame.dm"
#include "code\game\objects\structures\barricade\barricade.dm"
#include "code\game\objects\structures\barricade\deployable.dm"
+#include "code\game\objects\structures\barricade\folding.dm"
#include "code\game\objects\structures\barricade\handrail.dm"
-#include "code\game\objects\structures\barricade\metal.dm"
#include "code\game\objects\structures\barricade\misc.dm"
-#include "code\game\objects\structures\barricade\plasteel.dm"
+#include "code\game\objects\structures\barricade\non_folding.dm"
#include "code\game\objects\structures\barricade\sandbags.dm"
#include "code\game\objects\structures\crates_lockers\closets.dm"
#include "code\game\objects\structures\crates_lockers\crates.dm"
@@ -2198,7 +2194,6 @@
#include "code\modules\power\cell.dm"
#include "code\modules\power\fractal_reactor.dm"
#include "code\modules\power\generator.dm"
-#include "code\modules\power\gravitygenerator.dm"
#include "code\modules\power\lighting.dm"
#include "code\modules\power\port_gen.dm"
#include "code\modules\power\power.dm"
@@ -2473,7 +2468,6 @@
#include "code\modules\vehicles\interior\interactable\vendors.dm"
#include "code\modules\vehicles\interior\interactable\viewports.dm"
#include "code\modules\vehicles\interior\interactable\weapons_loader.dm"
-#include "code\modules\vehicles\interior\objects\fancy_locker.dm"
#include "code\modules\vehicles\multitile\multitile.dm"
#include "code\modules\vehicles\multitile\multitile_bump.dm"
#include "code\modules\vehicles\multitile\multitile_hardpoints.dm"
diff --git a/config/example/config.txt b/config/example/config.txt
index d63e6822465c..07dfe6f1b839 100644
--- a/config/example/config.txt
+++ b/config/example/config.txt
@@ -257,4 +257,4 @@ CLIENT_ERROR_VERSION 514
## GITHUB API
#GITHUB_APP_API
#REPO_NAME cmss13
-#ORG cmss13-devs
\ No newline at end of file
+#ORG cmss13-devs
diff --git a/config/example/word_filter.txt b/config/example/word_filter.txt
new file mode 100644
index 000000000000..aab5cae627fa
--- /dev/null
+++ b/config/example/word_filter.txt
@@ -0,0 +1 @@
+# Words that should be filtered from being said, both IC and OOC, should be included here, one per line. Case insensitive.
diff --git a/html/changelogs/AutoChangeLog-pr-6647.yml b/html/changelogs/AutoChangeLog-pr-6647.yml
new file mode 100644
index 000000000000..7a1429aa9619
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-6647.yml
@@ -0,0 +1,4 @@
+author: "Blundir"
+delete-after: True
+changes:
+ - imageadd: "unique non placeholder CO armor sprites"
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-6688.yml b/html/changelogs/AutoChangeLog-pr-6688.yml
new file mode 100644
index 000000000000..bea59b693caf
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-6688.yml
@@ -0,0 +1,6 @@
+author: "TheManWithNoHands"
+delete-after: True
+changes:
+ - balance: "IFF, scatter based on minigun rev up, rev up time increase, firing delay decrease"
+ - code_imp: "Places minigun aMmo in the Tank ammo File"
+ - soundadd: "adds a hit sound for 20mm flak"
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-6804.yml b/html/changelogs/AutoChangeLog-pr-6804.yml
new file mode 100644
index 000000000000..7820a267f3ca
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-6804.yml
@@ -0,0 +1,5 @@
+author: "Blundir"
+delete-after: True
+changes:
+ - bugfix: "s&w revolver now has belt/pouch and inhand icons"
+ - imageadd: "resprite of mac15, m60, ppsh, s&w revolver, basira bolt action rifle"
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-6811.yml b/html/changelogs/AutoChangeLog-pr-6811.yml
new file mode 100644
index 000000000000..2bed399b0424
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-6811.yml
@@ -0,0 +1,6 @@
+author: "Steelpoint"
+delete-after: True
+changes:
+ - rscadd: "In observance of the merger of the PvP and PvE servers of CM-SS13. The 'Solar Devils', the USCM battalion that appear in the PvE server, have been added as an admin only Emergency Response Team."
+ - rscadd: "The Solar Devils are highly trained and well equipped by Marine standards, they will also spawn as part of their own squad."
+ - imageadd: "A 'Solar Devils' uniform patch accessory has been added."
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-6819.yml b/html/changelogs/AutoChangeLog-pr-6819.yml
new file mode 100644
index 000000000000..b016285f2b47
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-6819.yml
@@ -0,0 +1,7 @@
+author: "CapCamIII"
+delete-after: True
+changes:
+ - rscadd: "Adds a tactical HPR to VAISO and VAIPO machinegunners"
+ - rscadd: "Adds an HPR AP mag available to the above"
+ - balance: "MAR50 has normal LMG level firerate now"
+ - spellcheck: "HPR HEAP mag now has correct name formatting"
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-6885.yml b/html/changelogs/AutoChangeLog-pr-6885.yml
new file mode 100644
index 000000000000..6cb30d23257f
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-6885.yml
@@ -0,0 +1,4 @@
+author: "kiVts"
+delete-after: True
+changes:
+ - code_imp: "Research datum now supports more broad ideas in the future."
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-6891.yml b/html/changelogs/AutoChangeLog-pr-6891.yml
new file mode 100644
index 000000000000..1677743be450
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-6891.yml
@@ -0,0 +1,5 @@
+author: "BeagleGaming1"
+delete-after: True
+changes:
+ - rscdel: "Removes APTFT verb from reagent containers"
+ - code_imp: "Updated reagent container switch transfer amount and examination code"
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-6918.yml b/html/changelogs/AutoChangeLog-pr-6918.yml
new file mode 100644
index 000000000000..644957bebde5
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-6918.yml
@@ -0,0 +1,4 @@
+author: "zzzmike"
+delete-after: True
+changes:
+ - soundadd: "revive notification has new sound (rather than the ahelp sound)"
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-6934.yml b/html/changelogs/AutoChangeLog-pr-6934.yml
new file mode 100644
index 000000000000..4cfc2867ad27
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-6934.yml
@@ -0,0 +1,4 @@
+author: "MistChristmas"
+delete-after: True
+changes:
+ - spellcheck: "places smartgun after DV9 to be DV9 smartgun battery"
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-6941.yml b/html/changelogs/AutoChangeLog-pr-6941.yml
new file mode 100644
index 000000000000..d30ea0f2c7bd
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-6941.yml
@@ -0,0 +1,4 @@
+author: "Blundir"
+delete-after: True
+changes:
+ - rscadd: "mortar camo variants"
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-6972.yml b/html/changelogs/AutoChangeLog-pr-6972.yml
new file mode 100644
index 000000000000..eb675783a938
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-6972.yml
@@ -0,0 +1,5 @@
+author: "Noname995"
+delete-after: True
+changes:
+ - bugfix: "Varadero, Strata, Kutjevo, Shiva maps now don't have infinity energy"
+ - rscadd: "Added SMES on Shiva generators points"
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-6973.yml b/html/changelogs/AutoChangeLog-pr-6973.yml
new file mode 100644
index 000000000000..d6c3af60cc79
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-6973.yml
@@ -0,0 +1,6 @@
+author: "Blundir"
+delete-after: True
+changes:
+ - rscadd: "Stompers boots and box for them"
+ - rscadd: "new civillian survivor preset resembling Ripley"
+ - maptweak: "stomper boots box on New Varadero, Solaris Ridge, Kutjevo Refinery"
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-6982.yml b/html/changelogs/AutoChangeLog-pr-6982.yml
new file mode 100644
index 000000000000..32a35dfc7623
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-6982.yml
@@ -0,0 +1,7 @@
+author: "ItsVyzo"
+delete-after: True
+changes:
+ - rscadd: "Provost Chief Inspector"
+ - rscadd: "missing Provost Presets per ML Hierarchy"
+ - imageadd: "added PCI sprites"
+ - imageadd: "PCI and Dep. Marshal HUD icons"
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-6993.yml b/html/changelogs/AutoChangeLog-pr-6993.yml
new file mode 100644
index 000000000000..6822859260db
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-6993.yml
@@ -0,0 +1,5 @@
+author: "Mister-moon1"
+delete-after: True
+changes:
+ - balance: "increased feral smash stun to 3 seconds"
+ - balance: "removed the possibility of \"missing\" a feral smash attack"
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-6999.yml b/html/changelogs/AutoChangeLog-pr-6999.yml
new file mode 100644
index 000000000000..854ccd5cf457
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-6999.yml
@@ -0,0 +1,4 @@
+author: "Doubleumc"
+delete-after: True
+changes:
+ - rscdel: "Removed fancy locker"
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-7000.yml b/html/changelogs/AutoChangeLog-pr-7000.yml
new file mode 100644
index 000000000000..82069a9d1c1b
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-7000.yml
@@ -0,0 +1,5 @@
+author: "Git-Nivrak"
+delete-after: True
+changes:
+ - qol: "APCs are now emissive"
+ - code_imp: "Added emissive blockers to a bunch of stuff"
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-7001.yml b/html/changelogs/AutoChangeLog-pr-7001.yml
new file mode 100644
index 000000000000..f9baa47cff9a
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-7001.yml
@@ -0,0 +1,4 @@
+author: "efzapa"
+delete-after: True
+changes:
+ - qol: "Changes the M44 heavy speed loader description to reflect it's actual use-case."
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-7007.yml b/html/changelogs/AutoChangeLog-pr-7007.yml
new file mode 100644
index 000000000000..dd636b3045c9
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-7007.yml
@@ -0,0 +1,5 @@
+author: "private-tristan"
+delete-after: True
+changes:
+ - qol: "IOs now late join into their officer bunks instead of the general wakeup area"
+ - qol: "Late joiners will no longer wake up in thin air in the main cryo area."
\ No newline at end of file
diff --git a/html/changelogs/archive/2024-07.yml b/html/changelogs/archive/2024-07.yml
index e1d117dbccd8..f78f87f3ad52 100644
--- a/html/changelogs/archive/2024-07.yml
+++ b/html/changelogs/archive/2024-07.yml
@@ -247,3 +247,58 @@
rythenx:
- rscadd: more options for hats to ASO vendor to bring it in line with what SO has
available
+2024-07-29:
+ TheManWithNoHands:
+ - code_imp: adds flags to cone, allowing it to be worn on head
+ - imageadd: added on mob sprites for cone
+2024-07-30:
+ Blundir:
+ - balance: revolver belt and sg holster belt can fit any revolver
+ - balance: increased mateba belt storage size from 6 to 7
+ - rscadd: grabbing something has a small mob animation now, grabbing items have
+ visual effect, animation and sound
+ - rscadd: throwing has small animation and sound
+ Cuberound, Venuska1117:
+ - qol: You can build Special Structures nearby nested people.
+ Steelpoint:
+ - rscadd: Marine Special Forces, Forecon, Echo Squad and CBRN will now appear in
+ their own sub-menu for observers.
+ - ui: Foxtrot's colour in the observe menu now reflects the squads true colour scheme.
+ TheManWithNoHands:
+ - balance: increases XO police skill by 1
+ Venuska1117:
+ - balance: Enabled clusters to spread on semi-weedable surfaces.
+ cuberound:
+ - rscdel: removes air senzors
+ - rscdel: Removes autogibber and related objects
+ - rscdel: removes UNUSED hydro lights that were replaced by colony lights long ago
+ - rscdel: Removes mass driver
+ - rscdel: holopad removal
+ efzapa:
+ - rscadd: All Brig Detainment Cameras are now linked to a new Brig Camera Console
+ Computer, available in the Brig Lobby, Warden's Office, CIC, and CMP Office.
+ - maptweak: Removed one of the Security Records Consoles in the Brig Lobby in place
+ for a Brig Camera Console.
+ - mapadd: Both Brig Perma Cells now have brig cameras in them.
+ ihatethisengine2:
+ - balance: Smartgunners can wear folding barricades on their backs.
+ zzzmike:
+ - bugfix: stops attempted stripping when stunned etc.
+ - rscadd: pilots can unhack lifeboats, similar to dropship unhacking
+2024-07-31:
+ coldironwarrior:
+ - spellcheck: Fixed spelling of auxiliary in the circuit board vendor
+ - spellcheck: Fixed capitalization of ordnance workshop area
+ realforest2001:
+ - code_imp: Changed back-end for working out equipment preset paygrades so as to
+ remove the manual overrides on several roles based on playtime perks.
+ - rscadd: Added lower ranks for all enlisted and some officer roles subject to having
+ played for less than ten hours. This rank cannot be used after playing more
+ than ten hours, and ignores preferences for playtime perks.
+ - rscadd: Added a higher rank achievable to most enlisted and some officers, requiring
+ 175+ hours.
+ - rscadd: Changed base rank for SL, SG, Spec and FTL by one grade up.
+ - rscadd: Changed low playtime rank for MP and Nurse from Lance Corporal to Corporal.
+ zzzmike:
+ - rscdel: Disablers can't execute people anymore
+ - bugfix: stops people from buckling others when they are knocked out etc.
diff --git a/html/changelogs/archive/2024-08.yml b/html/changelogs/archive/2024-08.yml
new file mode 100644
index 000000000000..3b2b410ded97
--- /dev/null
+++ b/html/changelogs/archive/2024-08.yml
@@ -0,0 +1,359 @@
+2024-08-02:
+ Asmocard:
+ - qol: Can now dump containers into the seed extractor
+ Blundir:
+ - rscadd: throw volume is lower and based on the distance of throw, half visible
+ mobs make no throw sound (sniper, scout, yautja)
+ - rscadd: throw animation pixel shifts for less pixels
+ - rscadd: lowered throw sound range a bit
+ - soundadd: added mutiple unique sound for throwing things
+ - soundadd: added numerous phone sounds for different phone interactions
+ CapCamIII:
+ - rscadd: UPP and CLF department channels now have distinct chat colors
+ Doubleumc:
+ - bugfix: fixed tank secondary flamer stopping after one tile
+ - balance: flamers can now fire streams over the "wrong" side of a barricade, when
+ adjacent
+ VileBeggar:
+ - bugfix: You can no longer build structures on top of dense objects. This prevents
+ weird layering happening with walls and tables, window frames, etc.
+ - bugfix: You can no longer rest while on ovi as a Queen, which made half of your
+ abilities unusable if you did so.
+ - rscadd: The weapon stats screen now shows the effective range of ammo, instead
+ of its armor punch value.
+ - bugfix: Health scans will now display the heartbroken status if applicable.
+ cuberound:
+ - code_imp: changes references from nanotrasen to weyland yutani
+ ihatethisengine2:
+ - balance: heavy revolver ammo cannot slowdown t3s anymore.
+ - bugfix: fixed the lockdown button working after dropship being locked by Queen
+ kiVts:
+ - rscadd: Players will not get picked at certain ERT beacons if they dont have enough
+ playtime in relevant area.
+2024-08-03:
+ hislittlecuzingames:
+ - qol: Can roleplay easier with cigarettes, cigars, lighters counting as cosmetic
+ for helmet storage purposes.
+2024-08-04:
+ Diegoflores31:
+ - balance: Healer drone apply salve now has a 1 second cooldown.
+ - balance: Salve wound now heals slightly quicker.
+ MistChristmas:
+ - balance: Buffed MP and Officer Armor's Bullet Armour.
+ Nivrak, NervanCatos:
+ - balance: Modified engineering skill levels, Combat technicians now do everything
+ engineering related slightly faster. This does not affect any other roles or
+ skillchecks.
+ - rscadd: Adds the tactical compact nailgun to the Combat Technician's vendor essential
+ engineering kit, It cannot fire and uses 2 metal instead of 1 to repair. Credit
+ to NervanCatos.
+ - rscadd: Added the M277 pattern construction rig, It comes with 6 slots instead
+ of 10 in the M276 but can carry metal and plasteel stacks. Available in the
+ CT vendor.
+ - rscadd: Added the Engineer Kit pouch, basically and engineer kit - in a pouch.
+ Restricted by engineering skill. Available in the CT vendor.
+ - rscadd: Added the Small Tool Webbing, A smaller variant of the tool webbing with
+ 6 slots instead of 7. Available in the CT vendor.
+ - qol: Screwdriver, Crowbar, Blowtorch, Multitool, Wrench and Wirecutters will now
+ prioritize the tool webbing when quick equipping.
+ - code_imp: Added a new variable for items, preferred_storage which allows to replicate
+ the above behavior for other items and storages.
+ - rscadd: Added a new sentry upgrade, The omni-sentry. As the name suggests it is
+ omni-directional but has 30% reduces damage and a shorter range by 1.
+ - qol: Made APC examine-text a bit more clear about what you should be doing next.
+ SpypigDev:
+ - refactor: SO armory vendor code refactored into the main SO gear vendor code
+ - balance: XO weapon and clothing vendors fitted with a more modernized equipment
+ set
+ - balance: XO weapon vendor now offers Medic or Engineer essentials sets
+ - bugfix: Vending an autoinjector pouch as SO or XO now produces a full pouch, rather
+ than empty
+ - balance: SO's mod88 removed from cryo spawn and moved to their vendor instead
+ Steelpoint:
+ - balance: The VP78 pistol will now deal maximum damage up to 6 tiles from the shooters
+ position before experiencing gradual damage falloff. This is up from a previous
+ maximum range of 3 tiles.
+ VileBeggar:
+ - code_imp: removed an unneeded var in mob_hud.dm
+ Zonespace27:
+ - balance: Barricades are now far better at blocking bullets from the front. They
+ will not block most bullets if the shooter is within 2 tiles, however.
+ ihatethisengine2:
+ - balance: sacrifice ability now guarantees to get the target out of crit on top
+ of the heal
+2024-08-05:
+ Lagomorphica:
+ - balance: The combat correspondents camera is no longer meltable or explodable.
+ VileBeggar:
+ - qol: Deafness is now limited to being 1 minute in length.
+ - bugfix: Phones can no longer be stored in closets/crates, which prevents players
+ from dragging crates with their phones and other weird issues that can occur.
+2024-08-06:
+ BlackCrystalic:
+ - rscadd: Byond backed function of sound ECHO ported
+ - refactor: refactor of weaponhits hardcode
+ Blundir:
+ - bugfix: research chute is now connected to req chute and works properly
+ Drathek:
+ - rscadd: Added note of who deletes a comment in a medical record
+ - bugfix: Fixed Delete Entry button showing for deleted medical notes
+ - bugfix: Fixed medical record prints not showing who printed it
+ - bugfix: Fixed initial gender capitalization in records
+ - code_imp: Improved some record checks
+ - admin: Added mostly niche logging for all record changes
+ Drathek iloveloopers:
+ - rscdel: Removed ability to buy clearance papers.
+ - balance: Clearance cards now give their equivalent clearance in credits.
+ - balance: Clearance cards no longer lose their value when scanned by the wrong
+ person.
+ MarpleJones:
+ - bugfix: Using the hemostat on the final larva surgery step is now better than
+ using wirecutters or the fork.
+ - rscadd: The final larva surgery step will now apply organ damage when done barehanded.
+ Barehanded is faster than using tools by a couple of seconds, at the cost of
+ the doctor's and the patient's health.
+ - rscadd: Adds an acidsplash sound effect to doing the barehanded step.
+ MistChristmas:
+ - bugfix: Prevents tunnels under LZ Sentries
+ VileBeggar:
+ - bugfix: butcher's knife inhands now display properly
+ cuberound:
+ - bugfix: weeds do not cover preshure tanks
+ - rscadd: acid spray scorches grass and melts snow
+ - rscdel: Removes gravity :)
+ mullenpaul:
+ - ui: added section in dropship flight computer for some terminals to select which
+ dropship to control
+ - maptweak: reworked CIC remote terminals
+ - refactor: some remote terminals can control different dropships
+ - balance: queen will randomly select a dropship to call down to the lz on hijack
+ - balance: when dropship exists on primary landing pad, the queen can't call down
+ another dropship
+ - balance: when a dropship is enroute to the primary landing pad, the queen can't
+ call another dropship
+ realforest2001:
+ - bugfix: Fixes the cap on rifleman Lance Corporals.
+2024-08-07:
+ Contrabang:
+ - rscadd: Smartgunner Machete Scabbard, which smartgunners can wear on their back
+ when their harness is equipped.
+ - balance: SG's vendor has replaced the 6P Machete Scabbard with a 15P Smartgunner
+ Machete Scabbard.
+ LC4492:
+ - rscadd: Adds penlights and stethoscopes to nurses and corpsmen, they can use them
+ to reliably check if someone have specific types of organ damage and how much,
+ without the need of other apparatus. Adds a new organ.status called "LITTLE_BRUISED",
+ used by the stethoscope and penlight to not give false positives when diagnosticating
+ someone (saying that they are healthy, when they actually have 9 heart damage).
+ - bugfix: Fixed an outdated check that made the entire "flash eyes with flashlight"
+ mechanic don't work at all. Also updated it to check some other things for ease
+ of logic.
+ - spellcheck: Fixed typos on the abandoned "flash eyes with flashlight" code.
+ - code_imp: 'Added new functionalities for both the stethoscope and penlight: The
+ stethoscopes can now be used to check the condition of both heart and lungs
+ individually by aiming the chest, letting you be able to check if the organs
+ are LITTLE_BRUISED (Have a damage equal or above 1), BRUISED (Have a damage
+ equal or above 10), BROKEN (have a damage equal or above 30) or "HEALTHY" (any
+ damage below 1). And the penlight, that can be used the same way to check the
+ condition of brain and eyes by aiming the eyes of the person you are interacting
+ with. Also with the fixing mentioned above, you can now flash people''s eyes
+ again! Everytime you check the condition of someone''s eyes, you will also flash
+ them. Replaced one letter vars in the flashlight code and on the stethoscope
+ section of the ties code.'
+ - imageadd: Adds new "in_hand" icons for penlights and stethoscopes, both will now
+ appear on your hands when used. Penlights have both "off" and "on" icons, fancy
+ stuff!
+ LTNTS:
+ - imageadd: port tgsprites for pills (including a new variation)
+2024-08-08:
+ '?':
+ - bugfix: Fixed explosive implant not triggering when hearing the code-word.
+ BlackCrystalic:
+ - bugfix: No more admin data sended to normal players in who/staff who
+ Doubleumc:
+ - code_imp: shrapnel smoothly animates their movement
+ - code_imp: visual-effect-only shrapnel replaced by clientside particles
+ Venuska1117, Blundir:
+ - imageadd: add directional APC's Sprites.
+ - balance: Now there are only 3 APC's types, APC's with call_type high/super/hyper
+ are replaced with upgraded APC variant containing high capacity cell, weak variant
+ got replaced with normal APC variant.
+ - bugfix: Fixes APC's with wrong offsets (strata and Prison)
+2024-08-10:
+ BasilHerb:
+ - rscdel: removed the M56B Smartgun Kit from requisitions.
+ - balance: made the M56 Combat Harness unmeltable.
+ - balance: made the M45 Ghillie Suit unmeltable.
+ Contrabang:
+ - qol: Reorders the Essential SG Kit in order of Armor, Smartgun, Goggles
+ HaultyAnonie:
+ - bugfix: Made claymore boxes in vendors be accurately labeled as the amount of
+ claymores they contain. From (x4 mines) to (x5 mines). The actual contents of
+ the box.
+ cuberound:
+ - rscdel: removes gravity generator (ugly legacy stuff)
+2024-08-12:
+ Git-Nivrak:
+ - bugfix: You can no longer put items back in the specialist case after taking them
+ out
+ zzzmike:
+ - rscadd: fun fact for internal bleeding fixed
+2024-08-13:
+ Adamix147:
+ - maptweak: Moved the unfixable APC at Kutjevo Botany to make it fixable again.
+ Contrabang:
+ - bugfix: ERT no longer show up in the orbit escape section
+ Doubleumc:
+ - admin: '"Start Round" can start a delayed round'
+ Git-Nivrak:
+ - balance: Explosions now always deal full damage at the source tile
+ - bugfix: Fixed sadar rockets not gibbing humans on direct hit
+ MarpleJones:
+ - balance: Reduces the cost of the AGM-184 'Harpoon II' from 300 to 200.
+2024-08-15:
+ Blundir:
+ - rscadd: plasteel non folding barricade
+ Steelpoint:
+ - rscadd: A plantable UPP flag has been added to the game, an equilivant of the
+ United Americas flag. Currently admin spawn only.
+ - rscadd: A Command Tablet has been added that can be used by UPP Officers.
+ - rscadd: UPP Officers ranked O4 or greater (USCM Major Equilivant) are issued with
+ a Command Tablet.
+2024-08-16:
+ Doubleumc:
+ - ui: dark HUD indicators stay anchored to the viewport edge
+2024-08-17:
+ 567Turtle:
+ - rscadd: Gay crayons for your helmet ("Box of Prideful Crayons" in the toys section
+ of the loadout menu.)
+ Blundir:
+ - rscadd: Guns now support custom muzzle flash light color, some guns have a new
+ color of it now, standard color is yellow tinted now instead of white
+ cuberound:
+ - bugfix: two persons are needed to activate red, ert and emergency acces using
+ cards
+2024-08-18:
+ Zonespace27:
+ - bugfix: Fixed heavy sniper spec opening up the wrong specialist slot on admin
+ cryo
+ cuberound:
+ - rscdel: removes bluespace beacon
+2024-08-19:
+ Asmocard:
+ - qol: Playing cards no longer take a storage slot from your helmet, they take a
+ vanity slot now.
+ Vandujr:
+ - rscadd: Added a new 'Corporate Liaison's Wardrobe' that all corporate roles can
+ use. includes more clothes than the cabinet originally had.
+ - rscadd: Added a new orange outfit the CL can pick from his Wardrobe Vendor.
+ - rscadd: Added civilian black and white berets.
+ - refactor: Refactored the corporate boots, making a version with and without a
+ knife in it on spawn. All roles that should have the knife version, have it.
+ - imageadd: Added new item sprites to the old 'complete' suits; that being the tan
+ and formal suits, aswell as the suspenders.
+ - imageadd: Added a new item sprite for the black beret, in line with the rest of
+ the modern berets.
+ - maptweak: Swapped the CL's cabinet for the wardrobe vendor.
+ zzzmike:
+ - bugfix: lets you resist when bucklecuffed to bed
+2024-08-21:
+ Mensla:
+ - rscadd: Added new pizza cutter sprites.
+ Steelpoint:
+ - rscadd: Force reconnaissance response teams will now use the USS Kurtz as their
+ home base when departing from the USS Almayer on their response shuttle.
+ - balance: The ERT Forecon Medic/Engineer spawn has been reworked into the 'Reconnaissance
+ Support Technician' to better reflect its design as a combination of a Corpsman
+ and a Comtech.
+ - rscadd: Per the above, the Support Tech now spawns with a unique and full lifesaver
+ belt and some form of a medical visor.
+ - imageadd: The Support Tech has a unique HUD icon to better denote its role.
+ Waseemq1235:
+ - rscadd: Adds handheld Enforcer squad distress beacons for Provost Inspectors+
+2024-08-22:
+ AmoryBlaine:
+ - imageadd: Imports TWE sprites from downstream
+ - imageadd: Imports mime & cowboy boots
+ SASoperative:
+ - code_imp: Updated donator items
+ - imageadd: Added new donator sprites
+ - imagedel: Removed old unused sprites
+ dongwaiver:
+ - imageadd: new m44 revolver sprites
+ - imagedel: old m44 revolver sprites
+2024-08-23:
+ Blundir:
+ - imageadd: adds lineart images for almost all guns that didn't have it
+ - code_imp: missing lineart error is now a lint
+ - rscadd: HPDP strong and weak are now CCDP and WPDP, CCDP now has unique packet
+ sprite and nade sprite (no balance changes)
+ - rscadd: added combat flashlight box and also combat flashlight unique sprite,
+ tweaked desc to better convey that
+ - rscadd: added frag mortar shells to req asrs store
+ - rscadd: added qm fluff/spare items locker with some niche things
+ - rscadd: xm88 ammo packets and ammo box to req ammo vendor
+ - rscadd: added external webbings to req equipment vendor
+ - rscadd: added quartermaster beret to qm vendor
+ - rscadd: package wrapper now has more crate skins
+ - rscadd: metal foal grenade packets
+ - rscadd: req vendors now play small animation and sound, also they have small vend
+ delay to fit animation framing
+ - rscadd: added flashlight box to req vendor
+ - rscadd: m4a3 hp ammo boxes to asrs pool
+ - rscadd: HIDP, AGM-I, AGM-F grenade boxes to req vendor and asrs store
+ - rscadd: 'req clothing vendor now has different: uniforms, boots, backpacks'
+ - rscadd: megaphone use sounds and inhands icons
+ - rscadd: Added flat icon support to spritesheets for boxes, ammo boxes, and reagent
+ containers so they display their overlays in vendors
+ - qol: remade list in req clothing vendor
+ - qol: lowered chance of ingridients crate to be sent by asrs
+ - qol: qm jacket is now identical in stats and capabilities to service jacket
+ - balance: changed XM88 packets capacity from 90 to 100 (is it needed for correct
+ ammo box calculations)
+ - balance: ASRS price of HPR holo target ammo is now the same as the normal ammo
+ - bugfix: fixed HPDP packets not being vendable by req equipment vendor
+ - bugfix: fixed HPR ASRS ammo crate having incorrect sprite
+ - bugfix: breaching slugs packets can now be refilled into req vendor
+ - refactor: nade boxes icons refactor
+ - maptweak: added some chairs, qm locker, lamp to qm's office
+ - maptweak: added paper bins and some pens to main req area
+ - maptweak: added some rack kits to req storage
+ - maptweak: fixed incorrect wall smoothing near req vendor
+ - refactor: splits storage.dmi into multiple files, also moved some icons around
+ for organization
+ - rscadd: added amr ammo to WO req vendor and to WO ammo beacons
+ Drathek:
+ - code_imp: Added missing bitfields for flags_item to VV
+ Git-Nivrak:
+ - bugfix: Fixed the premade tesla coils on Fiorina
+ - rscadd: Added another revival mix pouch option which contains Peridaxon instead
+ of Tricordrazine.
+ - config: Added config options for filtering out certain words
+ Nomoresolvalou:
+ - qol: scientist survivors that get IFF will be able to view research objectives
+ Steelpoint:
+ - rscadd: A medium sized, wall mounted, UPP flag sprite has been added to the game,
+ for mappers to use.
+ - rscadd: The UPP Logistics Technician has been added as a event role for the UPP.
+ Their intention is to assist in operating any supply depots and logistics departments
+ under the control of the UPP, they also possess engineering and construction
+ skills allowing them to assist in fortification work as required.
+ - rscadd: The UPP Political Commissar has been added as a event role for the UPP.
+ They act to ensure the political ideology of the UPP is upheld within the unit
+ they are attached to. The goals and ranking of this job are left undefined to
+ add ambiguity as to their ability to influence the UPP command structure.
+ Willzadl:
+ - qol: Changed 'View objectives' verb to 'View intel objectives'.
+ Zonespace27:
+ - bugfix: '"Retrieve Fulton" objective should now show up properly.'
+ private-tristan:
+ - rscadd: 4 new tips related to paradropping!
+ realforest2001:
+ - rscadd: Added Dropship 3 Saipan template.
+ - rscadd: Re-ordered the SEA vendor contents slightly, and changed the combat gear
+ to use combat categories.
+ - rscadd: Added Marine Law charges to the JAS for unlawful use of a Listening Device.
+ - rscadd: Makes survivor doctors now use doctor title, and security survivors now
+ use Officer title.
+ zzzmike:
+ - qol: fingerprint scanner description is more newbie-friendly
diff --git a/icons/mob/hud/marine_hud.dmi b/icons/mob/hud/marine_hud.dmi
index def6cdd56a0e..8be1ae31ba68 100644
Binary files a/icons/mob/hud/marine_hud.dmi and b/icons/mob/hud/marine_hud.dmi differ
diff --git a/icons/mob/hud/sec_hud.dmi b/icons/mob/hud/sec_hud.dmi
index f0fb3b318d0a..493727afac1b 100644
Binary files a/icons/mob/hud/sec_hud.dmi and b/icons/mob/hud/sec_hud.dmi differ
diff --git a/icons/mob/humans/onmob/back.dmi b/icons/mob/humans/onmob/back.dmi
index 128b05455d6e..f7dffb722a89 100644
Binary files a/icons/mob/humans/onmob/back.dmi and b/icons/mob/humans/onmob/back.dmi differ
diff --git a/icons/mob/humans/onmob/belt.dmi b/icons/mob/humans/onmob/belt.dmi
index 453f2e9e2b2d..31c0e9865696 100644
Binary files a/icons/mob/humans/onmob/belt.dmi and b/icons/mob/humans/onmob/belt.dmi differ
diff --git a/icons/mob/humans/onmob/feet.dmi b/icons/mob/humans/onmob/feet.dmi
index fdf6a4a40e80..b0245d499d59 100644
Binary files a/icons/mob/humans/onmob/feet.dmi and b/icons/mob/humans/onmob/feet.dmi differ
diff --git a/icons/mob/humans/onmob/head_0.dmi b/icons/mob/humans/onmob/head_0.dmi
index 9fc0bc82c123..862953a27be3 100644
Binary files a/icons/mob/humans/onmob/head_0.dmi and b/icons/mob/humans/onmob/head_0.dmi differ
diff --git a/icons/mob/humans/onmob/head_1.dmi b/icons/mob/humans/onmob/head_1.dmi
index 696ab464252d..5ee07890f72a 100644
Binary files a/icons/mob/humans/onmob/head_1.dmi and b/icons/mob/humans/onmob/head_1.dmi differ
diff --git a/icons/mob/humans/onmob/helmet_garb.dmi b/icons/mob/humans/onmob/helmet_garb.dmi
index 9876dd8629ad..5611d28c8480 100644
Binary files a/icons/mob/humans/onmob/helmet_garb.dmi and b/icons/mob/humans/onmob/helmet_garb.dmi differ
diff --git a/icons/mob/humans/onmob/items_lefthand_0.dmi b/icons/mob/humans/onmob/items_lefthand_0.dmi
index a4396aeb93de..f949062be7b7 100644
Binary files a/icons/mob/humans/onmob/items_lefthand_0.dmi and b/icons/mob/humans/onmob/items_lefthand_0.dmi differ
diff --git a/icons/mob/humans/onmob/items_lefthand_1.dmi b/icons/mob/humans/onmob/items_lefthand_1.dmi
index cb80cb6cc10c..bc243d0228c3 100644
Binary files a/icons/mob/humans/onmob/items_lefthand_1.dmi and b/icons/mob/humans/onmob/items_lefthand_1.dmi differ
diff --git a/icons/mob/humans/onmob/items_lefthand_64.dmi b/icons/mob/humans/onmob/items_lefthand_64.dmi
index d005d8c5f049..e086e4a7ffe0 100644
Binary files a/icons/mob/humans/onmob/items_lefthand_64.dmi and b/icons/mob/humans/onmob/items_lefthand_64.dmi differ
diff --git a/icons/mob/humans/onmob/items_righthand_0.dmi b/icons/mob/humans/onmob/items_righthand_0.dmi
index 582262e88289..1f70077321ee 100644
Binary files a/icons/mob/humans/onmob/items_righthand_0.dmi and b/icons/mob/humans/onmob/items_righthand_0.dmi differ
diff --git a/icons/mob/humans/onmob/items_righthand_1.dmi b/icons/mob/humans/onmob/items_righthand_1.dmi
index 7bad7eb2c583..29f8cd8e1043 100644
Binary files a/icons/mob/humans/onmob/items_righthand_1.dmi and b/icons/mob/humans/onmob/items_righthand_1.dmi differ
diff --git a/icons/mob/humans/onmob/items_righthand_64.dmi b/icons/mob/humans/onmob/items_righthand_64.dmi
index 72335e39bfff..00d1fae7531d 100644
Binary files a/icons/mob/humans/onmob/items_righthand_64.dmi and b/icons/mob/humans/onmob/items_righthand_64.dmi differ
diff --git a/icons/mob/humans/onmob/suit_0.dmi b/icons/mob/humans/onmob/suit_0.dmi
index 737b59f6c4af..db5514a0f3b8 100644
Binary files a/icons/mob/humans/onmob/suit_0.dmi and b/icons/mob/humans/onmob/suit_0.dmi differ
diff --git a/icons/mob/humans/onmob/suit_1.dmi b/icons/mob/humans/onmob/suit_1.dmi
index 85266a2077ac..c028f6eae887 100644
Binary files a/icons/mob/humans/onmob/suit_1.dmi and b/icons/mob/humans/onmob/suit_1.dmi differ
diff --git a/icons/mob/humans/onmob/suit_slot.dmi b/icons/mob/humans/onmob/suit_slot.dmi
index a9142060ab75..cde35b456048 100644
Binary files a/icons/mob/humans/onmob/suit_slot.dmi and b/icons/mob/humans/onmob/suit_slot.dmi differ
diff --git a/icons/mob/humans/onmob/ties.dmi b/icons/mob/humans/onmob/ties.dmi
index ac563deffbac..b4dc3d6ad9e8 100644
Binary files a/icons/mob/humans/onmob/ties.dmi and b/icons/mob/humans/onmob/ties.dmi differ
diff --git a/icons/mob/humans/onmob/uniform_0.dmi b/icons/mob/humans/onmob/uniform_0.dmi
index 2dd645697684..36551630209d 100644
Binary files a/icons/mob/humans/onmob/uniform_0.dmi and b/icons/mob/humans/onmob/uniform_0.dmi differ
diff --git a/icons/mob/humans/onmob/uniform_1.dmi b/icons/mob/humans/onmob/uniform_1.dmi
index 89500b39a596..34a85bae0e1e 100644
Binary files a/icons/mob/humans/onmob/uniform_1.dmi and b/icons/mob/humans/onmob/uniform_1.dmi differ
diff --git a/icons/obj/items/books.dmi b/icons/obj/items/books.dmi
index abd99a7075ed..9b53dc652807 100644
Binary files a/icons/obj/items/books.dmi and b/icons/obj/items/books.dmi differ
diff --git a/icons/obj/items/chemistry.dmi b/icons/obj/items/chemistry.dmi
index e540af809714..ed1898313a24 100644
Binary files a/icons/obj/items/chemistry.dmi and b/icons/obj/items/chemistry.dmi differ
diff --git a/icons/obj/items/clothing/backpacks.dmi b/icons/obj/items/clothing/backpacks.dmi
index 99240596a9da..f4151b592e76 100644
Binary files a/icons/obj/items/clothing/backpacks.dmi and b/icons/obj/items/clothing/backpacks.dmi differ
diff --git a/icons/obj/items/clothing/belts.dmi b/icons/obj/items/clothing/belts.dmi
index ecbc5fb84969..80070b88b560 100644
Binary files a/icons/obj/items/clothing/belts.dmi and b/icons/obj/items/clothing/belts.dmi differ
diff --git a/icons/obj/items/clothing/cm_hats.dmi b/icons/obj/items/clothing/cm_hats.dmi
index 923a26b55c20..4710917b0870 100644
Binary files a/icons/obj/items/clothing/cm_hats.dmi and b/icons/obj/items/clothing/cm_hats.dmi differ
diff --git a/icons/obj/items/clothing/cm_suits.dmi b/icons/obj/items/clothing/cm_suits.dmi
index 8c39aa77c7d1..67590892bf67 100644
Binary files a/icons/obj/items/clothing/cm_suits.dmi and b/icons/obj/items/clothing/cm_suits.dmi differ
diff --git a/icons/obj/items/clothing/donor/HEAD.dmi b/icons/obj/items/clothing/donor/HEAD.dmi
index 3116bdef26b6..23a29f5a2a58 100644
Binary files a/icons/obj/items/clothing/donor/HEAD.dmi and b/icons/obj/items/clothing/donor/HEAD.dmi differ
diff --git a/icons/obj/items/clothing/donor/SUITS.dmi b/icons/obj/items/clothing/donor/SUITS.dmi
index fc0c9987b9d4..e6e4ffef14e5 100644
Binary files a/icons/obj/items/clothing/donor/SUITS.dmi and b/icons/obj/items/clothing/donor/SUITS.dmi differ
diff --git a/icons/obj/items/clothing/donor/Sanctum Uniforms.dmi b/icons/obj/items/clothing/donor/Sanctum Uniforms.dmi
deleted file mode 100644
index 87e9a4c94b1d..000000000000
Binary files a/icons/obj/items/clothing/donor/Sanctum Uniforms.dmi and /dev/null differ
diff --git a/icons/obj/items/clothing/donor/UNIFORM.dmi b/icons/obj/items/clothing/donor/UNIFORM.dmi
index 2e0cd816dfed..5c43f7503a46 100644
Binary files a/icons/obj/items/clothing/donor/UNIFORM.dmi and b/icons/obj/items/clothing/donor/UNIFORM.dmi differ
diff --git a/icons/obj/items/clothing/hats.dmi b/icons/obj/items/clothing/hats.dmi
index 3e2a1dcfc243..45e09ebf7eaa 100644
Binary files a/icons/obj/items/clothing/hats.dmi and b/icons/obj/items/clothing/hats.dmi differ
diff --git a/icons/obj/items/clothing/shoes.dmi b/icons/obj/items/clothing/shoes.dmi
index 90e626503963..398b2ee256cb 100644
Binary files a/icons/obj/items/clothing/shoes.dmi and b/icons/obj/items/clothing/shoes.dmi differ
diff --git a/icons/obj/items/clothing/suits.dmi b/icons/obj/items/clothing/suits.dmi
index 41e6be7e89b9..cdb81b742d78 100644
Binary files a/icons/obj/items/clothing/suits.dmi and b/icons/obj/items/clothing/suits.dmi differ
diff --git a/icons/obj/items/clothing/ties.dmi b/icons/obj/items/clothing/ties.dmi
index 63c7010db55a..496dd3dc07e5 100644
Binary files a/icons/obj/items/clothing/ties.dmi and b/icons/obj/items/clothing/ties.dmi differ
diff --git a/icons/obj/items/clothing/uniforms.dmi b/icons/obj/items/clothing/uniforms.dmi
index e444d7a5a40a..19a8671a4faf 100644
Binary files a/icons/obj/items/clothing/uniforms.dmi and b/icons/obj/items/clothing/uniforms.dmi differ
diff --git a/icons/obj/items/crayons.dmi b/icons/obj/items/crayons.dmi
index 7ebabd5a81ef..1c7053a8a958 100644
Binary files a/icons/obj/items/crayons.dmi and b/icons/obj/items/crayons.dmi differ
diff --git a/icons/obj/items/hunter/pred_gear.dmi b/icons/obj/items/hunter/pred_gear.dmi
index 4501e75a06b3..0e25a24f1aed 100644
Binary files a/icons/obj/items/hunter/pred_gear.dmi and b/icons/obj/items/hunter/pred_gear.dmi differ
diff --git a/icons/obj/items/kitchen_tools.dmi b/icons/obj/items/kitchen_tools.dmi
index 625d992f014c..572053258961 100644
Binary files a/icons/obj/items/kitchen_tools.dmi and b/icons/obj/items/kitchen_tools.dmi differ
diff --git a/icons/obj/items/lighting.dmi b/icons/obj/items/lighting.dmi
index 617109d9a829..0c3519a7e80a 100644
Binary files a/icons/obj/items/lighting.dmi and b/icons/obj/items/lighting.dmi differ
diff --git a/icons/obj/items/storage.dmi b/icons/obj/items/storage.dmi
deleted file mode 100644
index 44dfac1c246e..000000000000
Binary files a/icons/obj/items/storage.dmi and /dev/null differ
diff --git a/icons/obj/items/storage/bag.dmi b/icons/obj/items/storage/bag.dmi
new file mode 100644
index 000000000000..312951909261
Binary files /dev/null and b/icons/obj/items/storage/bag.dmi differ
diff --git a/icons/obj/items/storage/bags.dmi b/icons/obj/items/storage/bags.dmi
new file mode 100644
index 000000000000..dd515525d8ad
Binary files /dev/null and b/icons/obj/items/storage/bags.dmi differ
diff --git a/icons/obj/items/storage/box.dmi b/icons/obj/items/storage/box.dmi
new file mode 100644
index 000000000000..a530753da27a
Binary files /dev/null and b/icons/obj/items/storage/box.dmi differ
diff --git a/icons/obj/items/storage/boxes.dmi b/icons/obj/items/storage/boxes.dmi
new file mode 100644
index 000000000000..055f2869f6a0
Binary files /dev/null and b/icons/obj/items/storage/boxes.dmi differ
diff --git a/icons/obj/items/storage/briefcases.dmi b/icons/obj/items/storage/briefcases.dmi
new file mode 100644
index 000000000000..7ba5a0382100
Binary files /dev/null and b/icons/obj/items/storage/briefcases.dmi differ
diff --git a/icons/obj/items/storage/holster.dmi b/icons/obj/items/storage/holster.dmi
new file mode 100644
index 000000000000..c367f7e36d66
Binary files /dev/null and b/icons/obj/items/storage/holster.dmi differ
diff --git a/icons/obj/items/storage/holsters.dmi b/icons/obj/items/storage/holsters.dmi
new file mode 100644
index 000000000000..c367f7e36d66
Binary files /dev/null and b/icons/obj/items/storage/holsters.dmi differ
diff --git a/icons/obj/items/storage/kits.dmi b/icons/obj/items/storage/kits.dmi
new file mode 100644
index 000000000000..5c24d40b2474
Binary files /dev/null and b/icons/obj/items/storage/kits.dmi differ
diff --git a/icons/obj/items/storage/medical.dmi b/icons/obj/items/storage/medical.dmi
new file mode 100644
index 000000000000..7a6734989ee3
Binary files /dev/null and b/icons/obj/items/storage/medical.dmi differ
diff --git a/icons/obj/items/storage/mre.dmi b/icons/obj/items/storage/mre.dmi
new file mode 100644
index 000000000000..6e8d7e6de301
Binary files /dev/null and b/icons/obj/items/storage/mre.dmi differ
diff --git a/icons/obj/items/storage/packets.dmi b/icons/obj/items/storage/packets.dmi
new file mode 100644
index 000000000000..ac900a18aafa
Binary files /dev/null and b/icons/obj/items/storage/packets.dmi differ
diff --git a/icons/obj/items/storage/toolbox.dmi b/icons/obj/items/storage/toolbox.dmi
new file mode 100644
index 000000000000..a18cb3466fed
Binary files /dev/null and b/icons/obj/items/storage/toolbox.dmi differ
diff --git a/icons/obj/items/weapons/grenade.dmi b/icons/obj/items/weapons/grenade.dmi
index ca8aaf9afcd6..61c9707e43df 100644
Binary files a/icons/obj/items/weapons/grenade.dmi and b/icons/obj/items/weapons/grenade.dmi differ
diff --git a/icons/obj/items/weapons/guns/ammo_boxes/boxes_and_lids.dmi b/icons/obj/items/weapons/guns/ammo_boxes/boxes_and_lids.dmi
index f01be20a48b4..1152bf3ed569 100644
Binary files a/icons/obj/items/weapons/guns/ammo_boxes/boxes_and_lids.dmi and b/icons/obj/items/weapons/guns/ammo_boxes/boxes_and_lids.dmi differ
diff --git a/icons/obj/items/weapons/guns/ammo_by_faction/colony.dmi b/icons/obj/items/weapons/guns/ammo_by_faction/colony.dmi
index 2adece3b1ab1..8d8ef7cb0163 100644
Binary files a/icons/obj/items/weapons/guns/ammo_by_faction/colony.dmi and b/icons/obj/items/weapons/guns/ammo_by_faction/colony.dmi differ
diff --git a/icons/obj/items/weapons/guns/ammo_by_faction/upp.dmi b/icons/obj/items/weapons/guns/ammo_by_faction/upp.dmi
index 7327bf6a611b..32a8aeec4d17 100644
Binary files a/icons/obj/items/weapons/guns/ammo_by_faction/upp.dmi and b/icons/obj/items/weapons/guns/ammo_by_faction/upp.dmi differ
diff --git a/icons/obj/items/weapons/guns/attachments/barrel.dmi b/icons/obj/items/weapons/guns/attachments/barrel.dmi
index b8fd833e2906..cedbd065072a 100644
Binary files a/icons/obj/items/weapons/guns/attachments/barrel.dmi and b/icons/obj/items/weapons/guns/attachments/barrel.dmi differ
diff --git a/icons/obj/items/weapons/guns/attachments/rail.dmi b/icons/obj/items/weapons/guns/attachments/rail.dmi
index 726623a9a16c..33e92832d5ad 100644
Binary files a/icons/obj/items/weapons/guns/attachments/rail.dmi and b/icons/obj/items/weapons/guns/attachments/rail.dmi differ
diff --git a/icons/obj/items/weapons/guns/attachments/stock.dmi b/icons/obj/items/weapons/guns/attachments/stock.dmi
index 0867f60d6430..9f28383c0bad 100644
Binary files a/icons/obj/items/weapons/guns/attachments/stock.dmi and b/icons/obj/items/weapons/guns/attachments/stock.dmi differ
diff --git a/icons/obj/items/weapons/guns/attachments/under.dmi b/icons/obj/items/weapons/guns/attachments/under.dmi
index e34ae0f9dd14..8814a4e94ee7 100644
Binary files a/icons/obj/items/weapons/guns/attachments/under.dmi and b/icons/obj/items/weapons/guns/attachments/under.dmi differ
diff --git a/icons/obj/items/weapons/guns/guns_by_faction/colony.dmi b/icons/obj/items/weapons/guns/guns_by_faction/colony.dmi
index 17e7e6f221ae..bfc4587f4104 100644
Binary files a/icons/obj/items/weapons/guns/guns_by_faction/colony.dmi and b/icons/obj/items/weapons/guns/guns_by_faction/colony.dmi differ
diff --git a/icons/obj/items/weapons/guns/guns_by_faction/upp.dmi b/icons/obj/items/weapons/guns/guns_by_faction/upp.dmi
index 669efcfc59c4..dcdc441fcb53 100644
Binary files a/icons/obj/items/weapons/guns/guns_by_faction/upp.dmi and b/icons/obj/items/weapons/guns/guns_by_faction/upp.dmi differ
diff --git a/icons/obj/items/weapons/guns/guns_by_faction/uscm.dmi b/icons/obj/items/weapons/guns/guns_by_faction/uscm.dmi
index 1f0b98967a25..a22810024717 100644
Binary files a/icons/obj/items/weapons/guns/guns_by_faction/uscm.dmi and b/icons/obj/items/weapons/guns/guns_by_faction/uscm.dmi differ
diff --git a/icons/obj/items/weapons/guns/lineart.dmi b/icons/obj/items/weapons/guns/lineart.dmi
index 6ea81af6d088..52ed68016313 100644
Binary files a/icons/obj/items/weapons/guns/lineart.dmi and b/icons/obj/items/weapons/guns/lineart.dmi differ
diff --git a/icons/obj/items/weapons/projectiles.dmi b/icons/obj/items/weapons/projectiles.dmi
index c3aa143def9b..21c210c14910 100644
Binary files a/icons/obj/items/weapons/projectiles.dmi and b/icons/obj/items/weapons/projectiles.dmi differ
diff --git a/icons/obj/items/weapons/weapons.dmi b/icons/obj/items/weapons/weapons.dmi
index aa99545cb577..6c5f4ad34509 100644
Binary files a/icons/obj/items/weapons/weapons.dmi and b/icons/obj/items/weapons/weapons.dmi differ
diff --git a/icons/obj/structures/barricades.dmi b/icons/obj/structures/barricades.dmi
index f3c5a5c809e1..0e3cb6889d10 100644
Binary files a/icons/obj/structures/barricades.dmi and b/icons/obj/structures/barricades.dmi differ
diff --git a/icons/obj/structures/barricades_christmas.dmi b/icons/obj/structures/barricades_christmas.dmi
index 215bf9710a80..64b2383a4a9e 100644
Binary files a/icons/obj/structures/barricades_christmas.dmi and b/icons/obj/structures/barricades_christmas.dmi differ
diff --git a/icons/obj/structures/crates.dmi b/icons/obj/structures/crates.dmi
index 07ccce5f0abb..d9f66eca1e70 100644
Binary files a/icons/obj/structures/crates.dmi and b/icons/obj/structures/crates.dmi differ
diff --git a/icons/obj/structures/doors/dropship3_cargo.dmi b/icons/obj/structures/doors/dropship3_cargo.dmi
new file mode 100644
index 000000000000..864811197f8c
Binary files /dev/null and b/icons/obj/structures/doors/dropship3_cargo.dmi differ
diff --git a/icons/obj/structures/doors/dropship3_pilot.dmi b/icons/obj/structures/doors/dropship3_pilot.dmi
new file mode 100644
index 000000000000..d7e07e36b348
Binary files /dev/null and b/icons/obj/structures/doors/dropship3_pilot.dmi differ
diff --git a/icons/obj/structures/doors/dropship3_side.dmi b/icons/obj/structures/doors/dropship3_side.dmi
new file mode 100644
index 000000000000..8dfa437d6521
Binary files /dev/null and b/icons/obj/structures/doors/dropship3_side.dmi differ
diff --git a/icons/obj/structures/doors/dropship3_side2.dmi b/icons/obj/structures/doors/dropship3_side2.dmi
new file mode 100644
index 000000000000..d8aa391d4207
Binary files /dev/null and b/icons/obj/structures/doors/dropship3_side2.dmi differ
diff --git a/icons/obj/structures/machinery/apc.dmi b/icons/obj/structures/machinery/apc.dmi
new file mode 100644
index 000000000000..74698aeaf969
Binary files /dev/null and b/icons/obj/structures/machinery/apc.dmi differ
diff --git a/icons/obj/structures/machinery/power.dmi b/icons/obj/structures/machinery/power.dmi
index aae3f3d69c13..d976a23d4a7e 100644
Binary files a/icons/obj/structures/machinery/power.dmi and b/icons/obj/structures/machinery/power.dmi differ
diff --git a/icons/obj/structures/machinery/vending.dmi b/icons/obj/structures/machinery/vending.dmi
index 3098aadca8be..f2449fcad0ed 100644
Binary files a/icons/obj/structures/machinery/vending.dmi and b/icons/obj/structures/machinery/vending.dmi differ
diff --git a/icons/obj/structures/mortar.dmi b/icons/obj/structures/mortar.dmi
index 16e821c3d192..8e6fc13464d5 100644
Binary files a/icons/obj/structures/mortar.dmi and b/icons/obj/structures/mortar.dmi differ
diff --git a/icons/obj/structures/plantable_flag.dmi b/icons/obj/structures/plantable_flag.dmi
index c92311529be3..2485f29c3b1f 100644
Binary files a/icons/obj/structures/plantable_flag.dmi and b/icons/obj/structures/plantable_flag.dmi differ
diff --git a/icons/obj/structures/props/decals.dmi b/icons/obj/structures/props/decals.dmi
index e99f52a10439..5b641ceaba89 100644
Binary files a/icons/obj/structures/props/decals.dmi and b/icons/obj/structures/props/decals.dmi differ
diff --git a/icons/obj/structures/props/flags.dmi b/icons/obj/structures/props/flags.dmi
new file mode 100644
index 000000000000..a162da6585c2
Binary files /dev/null and b/icons/obj/structures/props/flags.dmi differ
diff --git a/icons/obj/structures/structures.dmi b/icons/obj/structures/structures.dmi
index d96329839a7b..824a412cc8c8 100644
Binary files a/icons/obj/structures/structures.dmi and b/icons/obj/structures/structures.dmi differ
diff --git a/icons/turf/dropship3.dmi b/icons/turf/dropship3.dmi
index a813e18808a7..0d772c58a48e 100644
Binary files a/icons/turf/dropship3.dmi and b/icons/turf/dropship3.dmi differ
diff --git a/maps/interiors/fancylocker.dmm b/maps/interiors/fancylocker.dmm
deleted file mode 100644
index 2629f6210056..000000000000
--- a/maps/interiors/fancylocker.dmm
+++ /dev/null
@@ -1,222 +0,0 @@
-//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
-"a" = (
-/turf/closed/wall/wood,
-/area/interior/fancylocker)
-"b" = (
-/turf/open/floor/wood,
-/area/interior/fancylocker)
-"c" = (
-/obj/effect/landmark/interior/spawn/entrance/step_toward{
- dir = 8;
- exit_type = /obj/structure/interior_exit/fancy;
- tag = "fancy"
- },
-/turf/open/floor/wood,
-/area/interior/fancylocker)
-"d" = (
-/turf/open/floor/carpet/edge/northwest,
-/area/interior/fancylocker)
-"e" = (
-/turf/open/floor/carpet/edge/north,
-/area/interior/fancylocker)
-"f" = (
-/turf/open/floor/carpet/edge/northeast,
-/area/interior/fancylocker)
-"g" = (
-/turf/open/floor/carpet/edge/west,
-/area/interior/fancylocker)
-"h" = (
-/obj/structure/bed/sofa/south/white/left,
-/turf/open/floor/carpet,
-/area/interior/fancylocker)
-"i" = (
-/obj/structure/bed/sofa/south/white,
-/turf/open/floor/carpet,
-/area/interior/fancylocker)
-"j" = (
-/obj/structure/bed/sofa/south/white/right,
-/turf/open/floor/carpet,
-/area/interior/fancylocker)
-"k" = (
-/turf/open/floor/carpet/edge/east,
-/area/interior/fancylocker)
-"l" = (
-/obj/structure/surface/table/woodentable/fancy,
-/obj/item/device/flashlight/lamp/green,
-/turf/open/floor/wood,
-/area/interior/fancylocker)
-"m" = (
-/turf/open/floor/carpet/edge/southwest,
-/area/interior/fancylocker)
-"n" = (
-/turf/open/floor/carpet/edge,
-/area/interior/fancylocker)
-"o" = (
-/turf/open/floor/carpet/edge/southeast,
-/area/interior/fancylocker)
-"p" = (
-/obj/structure/surface/table/woodentable/fancy,
-/turf/open/floor/carpet,
-/area/interior/fancylocker)
-"q" = (
-/obj/structure/flora/pottedplant{
- icon_state = "pottedplant_10"
- },
-/turf/open/floor/wood,
-/area/interior/fancylocker)
-"r" = (
-/obj/structure/coatrack,
-/turf/open/floor/wood,
-/area/interior/fancylocker)
-"s" = (
-/obj/structure/surface/table/woodentable/fancy,
-/obj/structure/machinery/chem_dispenser/soda,
-/turf/open/floor/wood,
-/area/interior/fancylocker)
-"t" = (
-/obj/structure/surface/table/woodentable/fancy,
-/obj/structure/machinery/chem_dispenser/soda/beer,
-/turf/open/floor/wood,
-/area/interior/fancylocker)
-"u" = (
-/obj/structure/surface/table/woodentable/fancy,
-/obj/item/reagent_container/food/snacks/milosoup{
- pixel_y = 10
- },
-/obj/item/reagent_container/food/snacks/meatsteak{
- pixel_y = -2
- },
-/obj/structure/machinery/light{
- dir = 1
- },
-/turf/open/floor/wood,
-/area/interior/fancylocker)
-"v" = (
-/obj/structure/surface/table/woodentable/fancy,
-/obj/item/reagent_container/food/snacks/appletart,
-/turf/open/floor/wood,
-/area/interior/fancylocker)
-"w" = (
-/obj/structure/surface/table/woodentable/fancy,
-/obj/item/reagent_container/food/snacks/popcorn{
- pixel_x = -5;
- pixel_y = 8
- },
-/obj/item/reagent_container/food/snacks/sandwich{
- layer = 4;
- pixel_x = 5;
- pixel_y = 6
- },
-/obj/item/trash/plate{
- pixel_x = 5
- },
-/turf/open/floor/wood,
-/area/interior/fancylocker)
-"x" = (
-/obj/structure/surface/table/woodentable/fancy,
-/obj/item/ashtray/bronze,
-/turf/open/floor/carpet,
-/area/interior/fancylocker)
-"y" = (
-/obj/structure/surface/table/woodentable/fancy,
-/obj/item/clothing/mask/cigarette/cigar/cohiba,
-/obj/item/tool/lighter/zippo,
-/turf/open/floor/carpet,
-/area/interior/fancylocker)
-"z" = (
-/obj/structure/bed/chair/wood/wings{
- icon_state = "wooden_chair_wings";
- dir = 4
- },
-/turf/open/floor/wood,
-/area/interior/fancylocker)
-"A" = (
-/obj/structure/machinery/disposal,
-/turf/open/floor/wood,
-/area/interior/fancylocker)
-"B" = (
-/obj/structure/machinery/light,
-/turf/open/floor/carpet/edge,
-/area/interior/fancylocker)
-
-(1,1,1) = {"
-a
-a
-b
-a
-a
-a
-a
-"}
-(2,1,1) = {"
-a
-q
-c
-r
-l
-z
-a
-"}
-(3,1,1) = {"
-a
-A
-b
-b
-b
-b
-a
-"}
-(4,1,1) = {"
-a
-v
-d
-g
-g
-m
-a
-"}
-(5,1,1) = {"
-a
-w
-e
-h
-p
-n
-a
-"}
-(6,1,1) = {"
-a
-u
-e
-i
-x
-B
-a
-"}
-(7,1,1) = {"
-a
-s
-e
-j
-y
-n
-a
-"}
-(8,1,1) = {"
-a
-t
-f
-k
-k
-o
-a
-"}
-(9,1,1) = {"
-a
-a
-a
-a
-a
-a
-a
-"}
diff --git a/maps/map_files/BigRed/BigRed.dmm b/maps/map_files/BigRed/BigRed.dmm
index b71c76ab1cb9..5142f571a4a9 100644
--- a/maps/map_files/BigRed/BigRed.dmm
+++ b/maps/map_files/BigRed/BigRed.dmm
@@ -254,11 +254,7 @@
/turf/open/floor/plating,
/area/bigredv2/outside/space_port)
"abe" = (
-/obj/structure/machinery/power/apc{
- dir = 8;
- pixel_x = -32;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/west,
/turf/open/floor/dark,
/area/bigredv2/outside/space_port)
"abf" = (
@@ -1417,9 +1413,7 @@
/turf/open/floor/dark,
/area/bigredv2/outside/telecomm)
"afK" = (
-/obj/structure/machinery/power/apc{
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/south,
/obj/structure/machinery/light{
dir = 8
},
@@ -2159,10 +2153,7 @@
"aiF" = (
/obj/structure/surface/table,
/obj/item/ammo_magazine/shotgun/slugs,
-/obj/structure/machinery/power/apc{
- dir = 1;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/dark,
/area/bigredv2/outside/marshal_office)
"aiG" = (
@@ -3902,11 +3893,8 @@
/turf/open/floor/plating,
/area/bigredv2/outside/general_store)
"apv" = (
-/obj/structure/machinery/power/apc{
- dir = 8;
- name = "Xenbiology Lab APC";
- pixel_x = -30;
- start_charge = 0
+/obj/structure/machinery/power/apc/no_power/west{
+ name = "Xenbiology Lab APC"
},
/obj/structure/machinery/door_control{
id = "lambda";
@@ -4390,7 +4378,7 @@
/turf/open/floor,
/area/bigredv2/outside/general_offices)
"arw" = (
-/obj/structure/machinery/power/apc,
+/obj/structure/machinery/power/apc/power/south,
/turf/open/floor/plating,
/area/bigredv2/outside/general_offices)
"arx" = (
@@ -5485,10 +5473,8 @@
/turf/open/floor,
/area/bigredv2/outside/dorms)
"avF" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- name = "Dormitories APC";
- pixel_y = 25
+/obj/structure/machinery/power/apc/power/north{
+ name = "Dormitories APC"
},
/turf/open/floor,
/area/bigredv2/outside/dorms)
@@ -5950,11 +5936,7 @@
/obj/structure/extinguisher_cabinet{
pixel_y = -30
},
-/obj/structure/machinery/power/apc{
- dir = 8;
- pixel_x = -30;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/west,
/turf/open/floor/darkish,
/area/bigredv2/caves/lambda/breakroom)
"axr" = (
@@ -7666,8 +7648,7 @@
/turf/open/floor/wood,
/area/bigredv2/outside/bar)
"aEb" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
+/obj/structure/machinery/power/apc/power/north{
name = "Bar APC"
},
/turf/open/floor/wood,
@@ -7697,11 +7678,7 @@
/turf/open/floor/plating,
/area/bigredv2/caves/eta/living)
"aEm" = (
-/obj/structure/machinery/power/apc{
- dir = 8;
- pixel_x = -30;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/west,
/turf/open/floor/whitepurple/west,
/area/bigredv2/caves/lambda/research)
"aEn" = (
@@ -8381,11 +8358,7 @@
/obj/effect/decal/warning_stripes{
icon_state = "SE-out"
},
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 28;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/whitegreen/northwest,
/area/bigredv2/caves/lambda/virology)
"aHa" = (
@@ -9317,7 +9290,7 @@
/turf/open/floor/freezerfloor,
/area/bigredv2/outside/hydroponics)
"aKH" = (
-/obj/structure/machinery/power/apc,
+/obj/structure/machinery/power/apc/power/south,
/turf/open/floor/freezerfloor,
/area/bigredv2/outside/hydroponics)
"aKI" = (
@@ -10933,8 +10906,7 @@
/turf/open/floor/white,
/area/bigredv2/outside/virology)
"aQC" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
+/obj/structure/machinery/power/apc/power/north{
name = "Virology APC"
},
/turf/open/floor/white,
@@ -11639,8 +11611,7 @@
/turf/open/floor/white,
/area/bigredv2/outside/admin_building)
"aSZ" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
+/obj/structure/machinery/power/apc/power/north{
name = "Control Center APC"
},
/turf/open/floor/plating,
@@ -12025,6 +11996,9 @@
"aVa" = (
/obj/structure/surface/table,
/obj/item/device/flashlight,
+/obj/item/storage/box/stompers{
+ pixel_y = 15
+ },
/turf/open/floor/whitebluefull/northeast,
/area/bigredv2/outside/general_store)
"aVb" = (
@@ -12522,10 +12496,7 @@
/turf/open/floor,
/area/bigredv2/outside/general_store)
"aXb" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/plating,
/area/bigredv2/outside/cargo)
"aXc" = (
@@ -13941,8 +13912,7 @@
/area/bigredv2/outside/office_complex)
"bcZ" = (
/obj/effect/decal/cleanable/dirt,
-/obj/structure/machinery/power/apc{
- dir = 1;
+/obj/structure/machinery/power/apc/power/north{
name = "Interview Room APC"
},
/turf/open/floor,
@@ -14091,7 +14061,7 @@
/turf/open/floor/dark,
/area/bigredv2/outside/chapel)
"bdG" = (
-/obj/structure/machinery/power/apc,
+/obj/structure/machinery/power/apc/power/south,
/turf/open/floor/dark,
/area/bigredv2/outside/chapel)
"bdI" = (
@@ -14876,9 +14846,7 @@
/turf/open/floor/bot/north,
/area/bigredv2/outside/cargo)
"bhf" = (
-/obj/structure/machinery/power/apc{
- dir = 1
- },
+/obj/structure/machinery/power/apc/power/north,
/turf/open/floor,
/area/bigredv2/outside/cargo)
"bhi" = (
@@ -19695,10 +19663,7 @@
/turf/open/floor/carpet,
/area/bigredv2/outside/admin_building)
"ccI" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/obj/effect/decal/warning_stripes{
icon_state = "W";
layer = 2.5;
@@ -19969,11 +19934,7 @@
/area/bigredv2/outside/marshal_office)
"cGT" = (
/obj/effect/decal/cleanable/dirt,
-/obj/structure/machinery/power/apc{
- dir = 8;
- pixel_x = -32;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/west,
/turf/open/floor/darkyellow2/west,
/area/bigredv2/outside/filtration_plant)
"cGZ" = (
@@ -21484,7 +21445,7 @@
/turf/open/mars_cave/mars_dirt_4,
/area/bigredv2/caves_lambda)
"fyp" = (
-/obj/structure/machinery/power/apc,
+/obj/structure/machinery/power/apc/power/south,
/turf/open/floor/darkgreencorners2,
/area/bigredv2/caves/eta/storage)
"fyz" = (
@@ -21584,9 +21545,7 @@
/turf/open/mars_cave/mars_cave_5,
/area/bigredv2/caves_north)
"fKW" = (
-/obj/structure/machinery/power/apc{
- dir = 1
- },
+/obj/structure/machinery/power/apc/power/north,
/turf/open/floor/darkyellowcorners2/north,
/area/bigredv2/caves/eta/living)
"fLj" = (
@@ -23241,10 +23200,7 @@
/turf/open/floor/plating/platingdmg3/west,
/area/bigredv2/caves/mining)
"jiS" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/plating,
/area/bigredv2/outside/general_store)
"jkn" = (
@@ -24249,9 +24205,7 @@
/turf/open/mars_cave,
/area/bigredv2/caves_east)
"kRy" = (
-/obj/structure/machinery/power/apc{
- dir = 1
- },
+/obj/structure/machinery/power/apc/power/north,
/turf/open/floor/plating,
/area/bigredv2/outside/medical)
"kRK" = (
@@ -24784,9 +24738,7 @@
/obj/structure/machinery/light{
dir = 4
},
-/obj/structure/machinery/power/apc{
- dir = 1
- },
+/obj/structure/machinery/power/apc/power/north,
/turf/open/floor/wood,
/area/bigredv2/outside/library)
"lTM" = (
@@ -25276,10 +25228,7 @@
/turf/open/mars_cave/mars_dirt_6,
/area/bigredv2/caves/mining)
"mYV" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/red/north,
/area/bigredv2/outside/lambda_cave_cas)
"mYW" = (
@@ -26473,9 +26422,7 @@
/turf/open/floor/asteroidfloor/north,
/area/bigredv2/outside/e)
"plx" = (
-/obj/structure/machinery/power/apc{
- dir = 4
- },
+/obj/structure/machinery/power/apc/power/east,
/turf/open/floor/darkred2/east,
/area/bigredv2/caves/eta/research)
"pmk" = (
@@ -26806,10 +26753,7 @@
/turf/open/floor/carpet,
/area/bigredv2/outside/library)
"pTo" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/obj/effect/decal/warning_stripes{
icon_state = "W";
pixel_x = -1
@@ -28551,10 +28495,7 @@
/area/bigredv2/caves/mining)
"sWh" = (
/obj/structure/platform_decoration,
-/obj/structure/machinery/power/apc{
- dir = 1;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/asteroidfloor/north,
/area/bigredv2/outside/telecomm/n_cave)
"sWS" = (
@@ -28981,7 +28922,7 @@
/turf/open/floor/plating,
/area/bigredv2/caves/mining)
"tDl" = (
-/obj/structure/machinery/power/apc,
+/obj/structure/machinery/power/apc/power/south,
/turf/open/floor/darkredcorners2/west,
/area/bigredv2/caves/eta/xenobiology)
"tDv" = (
@@ -29530,10 +29471,7 @@
/turf/open/mars_cave/mars_dirt_5,
/area/bigredv2/caves/mining)
"uJF" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor,
/area/bigred/ground/garage_workshop)
"uJI" = (
@@ -31002,9 +30940,7 @@
/turf/open/mars_cave/mars_cave_15,
/area/bigredv2/caves/mining)
"xAX" = (
-/obj/structure/machinery/power/apc{
- dir = 1
- },
+/obj/structure/machinery/power/apc/power/north,
/turf/open/floor/darkyellow2/north,
/area/bigredv2/outside/engineering)
"xBn" = (
@@ -31233,9 +31169,7 @@
/turf/open/floor/plating/warnplate/west,
/area/bigredv2/outside/telecomm/warehouse)
"xWV" = (
-/obj/structure/machinery/power/apc{
- dir = 1
- },
+/obj/structure/machinery/power/apc/power/north,
/obj/structure/cable{
icon_state = "1-2"
},
diff --git a/maps/map_files/BigRed/sprinkles/10.prison_breakout.dmm b/maps/map_files/BigRed/sprinkles/10.prison_breakout.dmm
index 29f3f5b1e4dd..f4ec5053616a 100644
--- a/maps/map_files/BigRed/sprinkles/10.prison_breakout.dmm
+++ b/maps/map_files/BigRed/sprinkles/10.prison_breakout.dmm
@@ -297,7 +297,7 @@
/turf/open/floor,
/area/bigredv2/outside/marshal_office)
"be" = (
-/obj/structure/machinery/power/apc,
+/obj/structure/machinery/power/apc/power/south,
/obj/structure/machinery/camera/autoname{
dir = 1
},
diff --git a/maps/map_files/BigRed/sprinkles/25.chapel_cult.dmm b/maps/map_files/BigRed/sprinkles/25.chapel_cult.dmm
index af347ca1f772..0b6af75969c2 100644
--- a/maps/map_files/BigRed/sprinkles/25.chapel_cult.dmm
+++ b/maps/map_files/BigRed/sprinkles/25.chapel_cult.dmm
@@ -303,7 +303,7 @@
/turf/open/floor/darkish,
/area/bigredv2/outside/chapel)
"bm" = (
-/obj/structure/machinery/power/apc,
+/obj/structure/machinery/power/apc/power/south,
/obj/effect/decal/cleanable/blood{
icon_state = "gib6"
},
diff --git a/maps/map_files/BigRed/sprinkles/25.containerroom_xenos.dmm b/maps/map_files/BigRed/sprinkles/25.containerroom_xenos.dmm
index 215c6f874cb2..42c8551d2395 100644
--- a/maps/map_files/BigRed/sprinkles/25.containerroom_xenos.dmm
+++ b/maps/map_files/BigRed/sprinkles/25.containerroom_xenos.dmm
@@ -131,10 +131,7 @@
/turf/open/floor/plating/warnplate/west,
/area/bigredv2/outside/telecomm/warehouse)
"S" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/obj/effect/decal/warning_stripes{
icon_state = "W";
layer = 2.5;
diff --git a/maps/map_files/BigRed/sprinkles/25.lz1containers_scramble.dmm b/maps/map_files/BigRed/sprinkles/25.lz1containers_scramble.dmm
index ba7296705642..18820b304c27 100644
--- a/maps/map_files/BigRed/sprinkles/25.lz1containers_scramble.dmm
+++ b/maps/map_files/BigRed/sprinkles/25.lz1containers_scramble.dmm
@@ -46,11 +46,7 @@
/turf/closed/wall/solaris,
/area/bigredv2/outside/space_port)
"ao" = (
-/obj/structure/machinery/power/apc{
- dir = 8;
- pixel_x = -32;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/west,
/turf/open/floor/dark,
/area/bigredv2/outside/space_port)
"ap" = (
diff --git a/maps/map_files/BigRed/sprinkles/30.cargo_containers.dmm b/maps/map_files/BigRed/sprinkles/30.cargo_containers.dmm
index 0b51c63b39be..7cb6e167725d 100644
--- a/maps/map_files/BigRed/sprinkles/30.cargo_containers.dmm
+++ b/maps/map_files/BigRed/sprinkles/30.cargo_containers.dmm
@@ -310,9 +310,7 @@
/turf/open/floor/bot/north,
/area/bigredv2/outside/cargo)
"bk" = (
-/obj/structure/machinery/power/apc{
- dir = 1
- },
+/obj/structure/machinery/power/apc/power/north,
/turf/open/floor,
/area/bigredv2/outside/cargo)
"bm" = (
diff --git a/maps/map_files/BigRed/sprinkles/40.dorms_party.dmm b/maps/map_files/BigRed/sprinkles/40.dorms_party.dmm
index c2336bae0b40..38b92227e1f1 100644
--- a/maps/map_files/BigRed/sprinkles/40.dorms_party.dmm
+++ b/maps/map_files/BigRed/sprinkles/40.dorms_party.dmm
@@ -20,8 +20,7 @@
/turf/open/floor,
/area/bigredv2/outside/dorms)
"af" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
+/obj/structure/machinery/power/apc/power/north{
name = "Fitness APC"
},
/turf/open/floor,
diff --git a/maps/map_files/BigRed/sprinkles/70.se-checkpoint.dmm b/maps/map_files/BigRed/sprinkles/70.se-checkpoint.dmm
index 16bdac130168..5758eb83d7f0 100644
--- a/maps/map_files/BigRed/sprinkles/70.se-checkpoint.dmm
+++ b/maps/map_files/BigRed/sprinkles/70.se-checkpoint.dmm
@@ -1,10 +1,6 @@
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
"ax" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 28;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor,
/area/bigred/ground/security)
"aN" = (
diff --git a/maps/map_files/CORSAT/Corsat.dmm b/maps/map_files/CORSAT/Corsat.dmm
index f335e4c41e8b..59f0a59d6ca5 100644
--- a/maps/map_files/CORSAT/Corsat.dmm
+++ b/maps/map_files/CORSAT/Corsat.dmm
@@ -1015,11 +1015,7 @@
/turf/closed/wall/r_wall/biodome/biodome_unmeltable,
/area/corsat/gamma/residential/researcher)
"adW" = (
-/obj/structure/machinery/power/apc/high{
- dir = 8;
- pixel_x = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/upgraded/no_power/west,
/turf/open/floor/corsat/red/west,
/area/corsat/gamma/hangar)
"adX" = (
@@ -2782,11 +2778,7 @@
/turf/open/floor/wood,
/area/corsat/gamma/residential/east)
"akY" = (
-/obj/structure/machinery/power/apc/high{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/corsat/red/north,
/area/corsat/sigma/airlock/south/id)
"akZ" = (
@@ -3071,11 +3063,7 @@
/turf/open/floor/corsat/yellowcorner/west,
/area/corsat/gamma/residential)
"amc" = (
-/obj/structure/machinery/power/apc/high{
- dir = 4;
- pixel_x = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/upgraded/no_power/east,
/obj/structure/closet/crate/trashcart,
/turf/open/floor/corsat/yellow/east,
/area/corsat/gamma/residential/maint)
@@ -3101,11 +3089,7 @@
/turf/open/floor/corsat/white/east,
/area/corsat/sigma/dorms)
"amg" = (
-/obj/structure/machinery/power/apc/high{
- dir = 8;
- pixel_x = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/upgraded/no_power/west,
/turf/open/floor/corsat/squareswood/north,
/area/corsat/gamma/rnr/arcade)
"amh" = (
@@ -3919,11 +3903,7 @@
},
/area/prison/hangar_storage/research/shuttle)
"apn" = (
-/obj/structure/machinery/power/apc/high{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/corsat/red/northwest,
/area/corsat/omega/hangar/security)
"apo" = (
@@ -4090,11 +4070,7 @@
/turf/closed/wall/biodome,
/area/corsat/gamma/airlock/north)
"apU" = (
-/obj/structure/machinery/power/apc/hyper{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/upgraded/no_power/north,
/obj/structure/flora/pottedplant,
/turf/open/floor/corsat/bluegrey/northeast,
/area/corsat/gamma/airlock/north)
@@ -4608,11 +4584,7 @@
/turf/open/gm/grass/grass1/weedable,
/area/corsat/sigma/north)
"asj" = (
-/obj/structure/machinery/power/apc/hyper{
- dir = 8;
- pixel_x = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/upgraded/no_power/west,
/turf/open/floor/corsat/bluegrey/west,
/area/corsat/gamma/hangar/flightcontrol)
"ask" = (
@@ -5227,11 +5199,7 @@
/turf/open/floor/corsat,
/area/corsat/sigma/southeast/generator)
"auV" = (
-/obj/structure/machinery/power/apc/high{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/corsat/red/north,
/area/corsat/sigma/south)
"auW" = (
@@ -5291,11 +5259,7 @@
/turf/open/floor/corsat/bluegreycorner,
/area/corsat/gamma/airlock/north)
"ave" = (
-/obj/structure/machinery/power/apc/hyper{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/upgraded/no_power/north,
/obj/structure/surface/table/almayer,
/obj/item/evidencebag,
/obj/item/evidencebag,
@@ -5315,11 +5279,7 @@
/turf/open/floor/corsat/red/east,
/area/corsat/gamma/hangar/checkpoint)
"avh" = (
-/obj/structure/machinery/power/apc/hyper{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/upgraded/no_power/north,
/turf/open/floor/corsat/yellow/northwest,
/area/corsat/gamma/engineering/core)
"avj" = (
@@ -5382,19 +5342,11 @@
/turf/open/floor/corsat/red/east,
/area/corsat/gamma/hangar/security)
"avx" = (
-/obj/structure/machinery/power/apc/high{
- dir = 4;
- pixel_x = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/upgraded/no_power/east,
/turf/open/floor/corsat/whitebluefull/southwest,
/area/corsat/gamma/residential/lavatory)
"avy" = (
-/obj/structure/machinery/power/apc/high{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/corsat/brown/north,
/area/corsat/omega/cargo)
"avz" = (
@@ -5448,11 +5400,7 @@
/turf/open/floor/corsat/plate,
/area/corsat/omega/cargo)
"avM" = (
-/obj/structure/machinery/power/apc/high{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/corsat/blue/north,
/area/corsat/sigma/southeast)
"avN" = (
@@ -5583,11 +5531,7 @@
/turf/open/floor/corsat/greenwhite/north,
/area/corsat/gamma/medbay/chemistry)
"awn" = (
-/obj/structure/machinery/power/apc/high{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/corsat/greenwhitecorner/north,
/area/corsat/gamma/medbay/chemistry)
"awo" = (
@@ -6161,11 +6105,7 @@
/turf/open/floor/corsat/retrosquares,
/area/corsat/gamma/hallwaysouth)
"ayi" = (
-/obj/structure/machinery/power/apc/high{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/corsat/redcorner/north,
/area/corsat/sigma/hangar/id)
"ayj" = (
@@ -6287,11 +6227,7 @@
/turf/open/floor/corsat/red,
/area/corsat/sigma/hangar/id)
"ayG" = (
-/obj/structure/machinery/power/apc/high{
- dir = 8;
- pixel_x = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/upgraded/no_power/west,
/obj/structure/closet/wardrobe/atmospherics_yellow,
/turf/open/floor/corsat/yellow/west,
/area/corsat/sigma/airlock/control)
@@ -6416,11 +6352,7 @@
/turf/open/floor/corsat/bluegrey/north,
/area/corsat/sigma/airlock/east)
"ayX" = (
-/obj/structure/machinery/power/apc/hyper{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/upgraded/no_power/north,
/obj/structure/flora/pottedplant,
/turf/open/floor/corsat/bluegrey/northeast,
/area/corsat/sigma/airlock/east)
@@ -6653,11 +6585,7 @@
/turf/open/floor/corsat/blue/west,
/area/corsat/sigma/south)
"azQ" = (
-/obj/structure/machinery/power/apc/hyper{
- dir = 8;
- pixel_x = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/upgraded/no_power/west,
/obj/structure/machinery/light,
/obj/structure/closet/secure_closet{
name = "secure evidence locker";
@@ -6813,11 +6741,7 @@
/turf/open/floor/corsat/bluegrey/east,
/area/corsat/sigma/airlock/south)
"aAr" = (
-/obj/structure/machinery/power/apc/high{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/corsat/whitetan/north,
/area/corsat/gamma/canteen)
"aAs" = (
@@ -6922,11 +6846,7 @@
/turf/open/floor/corsat/retrosquareslight,
/area/corsat/gamma/medbay/lobby)
"aAM" = (
-/obj/structure/machinery/power/apc/high{
- dir = 8;
- pixel_x = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/upgraded/no_power/west,
/turf/open/floor/corsat/greenwhitecorner/west,
/area/corsat/gamma/medbay/surgery)
"aAN" = (
@@ -6939,11 +6859,7 @@
/turf/open/floor/corsat/red,
/area/corsat/gamma/hangar/checkpoint)
"aAO" = (
-/obj/structure/machinery/power/apc/high{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/corsat/greenwhite/northwest,
/area/corsat/gamma/medbay/lobby)
"aAP" = (
@@ -6956,11 +6872,7 @@
/turf/open/floor/corsat/red/southeast,
/area/corsat/sigma/hangar/checkpoint)
"aAR" = (
-/obj/structure/machinery/power/apc/hyper{
- dir = 4;
- pixel_x = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/upgraded/no_power/east,
/turf/open/floor/corsat/spiralplate,
/area/corsat/sigma/airlock/south)
"aAS" = (
@@ -7220,11 +7132,7 @@
/turf/open/floor/corsat/officesquares,
/area/corsat/sigma/airlock/south)
"aBZ" = (
-/obj/structure/machinery/power/apc/high{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/corsat/yellow/northwest,
/area/corsat/omega/maint)
"aCa" = (
@@ -7439,11 +7347,7 @@
/turf/open/floor/corsat,
/area/corsat/sigma/airlock/south)
"aCL" = (
-/obj/structure/machinery/power/apc/high{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/obj/structure/machinery/light{
dir = 8
},
@@ -7510,11 +7414,7 @@
/turf/open/floor/corsat/squares,
/area/corsat/sigma/hangar/checkpoint)
"aCW" = (
-/obj/structure/machinery/power/apc/high{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/corsat/red/north,
/area/corsat/sigma/checkpoint)
"aCX" = (
@@ -7610,11 +7510,7 @@
/turf/open/floor/corsat/retrosquares,
/area/corsat/sigma/north)
"aDo" = (
-/obj/structure/machinery/power/apc/high{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/corsat/whitebluefull/southwest,
/area/corsat/sigma/laundry)
"aDp" = (
@@ -7643,11 +7539,7 @@
/turf/open/floor/corsat/whitebluefull/southwest,
/area/corsat/sigma/laundry)
"aDu" = (
-/obj/structure/machinery/power/apc/high{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/corsat/browncorner/north,
/area/corsat/sigma/cargo)
"aDv" = (
@@ -7674,11 +7566,7 @@
/turf/open/floor/wood,
/area/corsat/sigma/cafe)
"aDz" = (
-/obj/structure/machinery/power/apc/high{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/wood,
/area/corsat/sigma/cafe)
"aDA" = (
@@ -7732,11 +7620,7 @@
/turf/open/floor/corsat/plate,
/area/corsat/theta/airlock/east)
"aDG" = (
-/obj/structure/machinery/power/apc/high{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/corsat/whitebluefull/southwest,
/area/corsat/sigma/lavatory)
"aDH" = (
@@ -7797,11 +7681,7 @@
/turf/open/floor/corsat/plate,
/area/corsat/gamma/hangar/arrivals)
"aDQ" = (
-/obj/structure/machinery/power/apc/hyper{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/upgraded/no_power/north,
/turf/open/floor/corsat/bluecorner/north,
/area/corsat/sigma/hangar)
"aDR" = (
@@ -7815,11 +7695,7 @@
/turf/open/floor/corsat/darkgreen/northwest,
/area/corsat/gamma/hangar/arrivals)
"aDT" = (
-/obj/structure/machinery/power/apc/high{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/obj/structure/machinery/light{
dir = 8
},
@@ -8313,11 +8189,7 @@
/turf/open/floor/corsat/darkgreencorner/west,
/area/corsat/gamma/foyer)
"aFL" = (
-/obj/structure/machinery/power/apc/hyper{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/upgraded/no_power/north,
/turf/open/floor/corsat/bluegreycorner/north,
/area/corsat/theta/airlock/east)
"aFM" = (
@@ -8493,11 +8365,7 @@
/turf/open/floor/corsat/browncorner/north,
/area/corsat/gamma/cargo)
"aGo" = (
-/obj/structure/machinery/power/apc/high{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/obj/structure/surface/table/woodentable/fancy,
/turf/open/floor/corsat/squareswood/north,
/area/corsat/gamma/residential/lounge)
@@ -8697,11 +8565,7 @@
/turf/open/floor/corsat/blue/north,
/area/corsat/sigma/southeast/datalab)
"aGX" = (
-/obj/structure/machinery/power/apc/high{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/corsat/blue/north,
/area/corsat/sigma/southeast/datalab)
"aGY" = (
@@ -9023,11 +8887,7 @@
/turf/open/floor/corsat/squares,
/area/corsat/gamma/hydroponics)
"aHR" = (
-/obj/structure/machinery/power/apc/high{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/corsat/plate,
/area/corsat/gamma/freezer)
"aHS" = (
@@ -9455,11 +9315,7 @@
/turf/open/floor/corsat/red/west,
/area/corsat/sigma/south)
"aJA" = (
-/obj/structure/machinery/power/apc/high{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/obj/structure/machinery/light{
dir = 8
},
@@ -9526,11 +9382,7 @@
/turf/open/floor/corsat/arrow_east,
/area/corsat/gamma/cargo)
"aJQ" = (
-/obj/structure/machinery/power/apc/high{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/corsat/red/north,
/area/corsat/sigma/south/security)
"aJR" = (
@@ -9898,11 +9750,7 @@
/turf/open/floor/corsat/yellow,
/area/corsat/omega/control)
"aLw" = (
-/obj/structure/machinery/power/apc/high{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/corsat/red/northeast,
/area/corsat/gamma/airlock/south/id)
"aLx" = (
@@ -9924,11 +9772,7 @@
/turf/open/floor/corsat/bluegrey,
/area/corsat/sigma/southeast/dataoffice)
"aLD" = (
-/obj/structure/machinery/power/apc/high{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/corsat/brown/west,
/area/corsat/omega/cargo)
"aLE" = (
@@ -10123,11 +9967,7 @@
/turf/open/floor/corsat/plate,
/area/corsat/sigma/south/security)
"aMs" = (
-/obj/structure/machinery/power/apc/hyper{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/upgraded/no_power/north,
/obj/structure/closet/wardrobe/medic_white,
/turf/open/floor/corsat/greenwhite/north,
/area/corsat/gamma/medbay)
@@ -10160,11 +10000,7 @@
/area/corsat/omega/airlocknorth/id)
"aMx" = (
/obj/structure/surface/table/reinforced,
-/obj/structure/machinery/power/apc/high{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/obj/structure/machinery/computer/station_alert,
/turf/open/floor/corsat/plate,
/area/corsat/omega/airlocknorth/id)
@@ -10333,11 +10169,7 @@
/turf/open/floor/corsat/bluegrey/north,
/area/corsat/sigma/southeast/dataoffice)
"aNe" = (
-/obj/structure/machinery/power/apc/high{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/corsat/bluegrey/north,
/area/corsat/sigma/southeast/dataoffice)
"aNg" = (
@@ -10358,11 +10190,7 @@
"aNj" = (
/obj/structure/surface/rack,
/obj/item/evidencebag,
-/obj/structure/machinery/power/apc/high{
- dir = 8;
- pixel_x = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/upgraded/no_power/west,
/turf/open/floor/corsat/red/southwest,
/area/corsat/theta/airlock/east/id)
"aNk" = (
@@ -10450,11 +10278,7 @@
/turf/open/floor/corsat/officesquares,
/area/corsat/sigma/south/offices)
"aNB" = (
-/obj/structure/machinery/power/apc/high{
- dir = 8;
- pixel_x = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/upgraded/no_power/west,
/obj/structure/pipes/standard/simple/hidden/green,
/turf/open/floor/corsat/officesquares,
/area/corsat/sigma/south/offices)
@@ -10605,11 +10429,7 @@
/turf/open/floor/corsat/purplecorner/east,
/area/corsat/sigma/south)
"aOh" = (
-/obj/structure/machinery/power/apc/high{
- dir = 4;
- pixel_x = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/upgraded/no_power/east,
/turf/open/floor/corsat/red/east,
/area/corsat/gamma/foyer)
"aOi" = (
@@ -10818,11 +10638,7 @@
/turf/open/floor/corsat/officesquares,
/area/corsat/gamma/hangar/office)
"aOY" = (
-/obj/structure/machinery/power/apc/hyper{
- dir = 8;
- pixel_x = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/upgraded/no_power/west,
/turf/open/floor/corsat/bluegrey/west,
/area/corsat/gamma/hangar/office)
"aOZ" = (
@@ -10852,10 +10668,7 @@
/turf/open/floor/corsat/plate,
/area/corsat/emergency_access)
"aPd" = (
-/obj/structure/machinery/power/apc/hyper{
- dir = 1;
- pixel_y = 25
- },
+/obj/structure/machinery/power/apc/upgraded/power/north,
/turf/open/floor/corsat/red/north,
/area/corsat/gamma/security/armory)
"aPe" = (
@@ -10870,11 +10683,7 @@
/turf/open/floor/corsat/red,
/area/corsat/gamma/security)
"aPh" = (
-/obj/structure/machinery/power/apc/hyper{
- dir = 8;
- pixel_x = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/upgraded/no_power/west,
/turf/open/floor/corsat/red/west,
/area/corsat/gamma/hangar/security)
"aPj" = (
@@ -10972,11 +10781,7 @@
/turf/open/floor/plating,
/area/corsat/gamma/hangar)
"aPz" = (
-/obj/structure/machinery/power/apc/hyper{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/upgraded/no_power/north,
/turf/open/floor/corsat/red/west,
/area/corsat/gamma/hangar/checkpoint)
"aPA" = (
@@ -11153,11 +10958,7 @@
},
/area/prison/hangar_storage/research/shuttle)
"aQh" = (
-/obj/structure/machinery/power/apc/high{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/corsat/red/northeast,
/area/corsat/omega/hangar/office)
"aQi" = (
@@ -13018,11 +12819,7 @@
/turf/open/floor/corsat/purplewhite,
/area/corsat/sigma/south/complex)
"aWC" = (
-/obj/structure/machinery/power/apc/hyper{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/upgraded/no_power/north,
/turf/open/floor/almayer/tcomms,
/area/corsat/sigma/southeast/telecomm)
"aWD" = (
@@ -13793,11 +13590,7 @@
/turf/open/floor/corsat/tan/north,
/area/corsat/gamma/residential/west)
"aZo" = (
-/obj/structure/machinery/power/apc/hyper{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/upgraded/no_power/north,
/turf/open/floor/corsat/red/north,
/area/corsat/omega/checkpoint)
"aZp" = (
@@ -14312,11 +14105,7 @@
/turf/open/floor/corsat/squares,
/area/corsat/omega/checkpoint)
"baL" = (
-/obj/structure/machinery/power/apc/hyper{
- dir = 4;
- pixel_x = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/upgraded/no_power/east,
/turf/open/floor/corsat/omega,
/area/corsat/omega/control)
"baM" = (
@@ -16531,11 +16320,7 @@
/area/corsat/omega/hallways)
"biZ" = (
/obj/structure/reagent_dispensers/watertank,
-/obj/structure/machinery/power/apc/high{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/corsat/plate,
/area/corsat/gamma/hydroponics)
"bja" = (
@@ -16788,11 +16573,7 @@
/turf/open/floor/asteroidplating,
/area/corsat/sigma/biodome/gunrange)
"bjQ" = (
-/obj/structure/machinery/power/apc/high{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/obj/structure/surface/table/almayer,
/obj/item/device/camera,
/turf/open/floor/corsat/purplewhite/north,
@@ -17317,19 +17098,11 @@
/turf/open/floor/corsat,
/area/corsat/gamma/hangar/cargo)
"blO" = (
-/obj/structure/machinery/power/apc/high{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/corsat/red/west,
/area/corsat/gamma/hangar/cargo)
"blP" = (
-/obj/structure/machinery/power/apc/hyper{
- dir = 4;
- pixel_x = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/upgraded/no_power/east,
/turf/open/floor/corsat/blue/east,
/area/corsat/gamma/hangar/arrivals)
"blQ" = (
@@ -17373,11 +17146,7 @@
/turf/open/floor/corsat/yellow/west,
/area/corsat/gamma/hangar/monorail/control)
"bma" = (
-/obj/structure/machinery/power/apc/high{
- dir = 8;
- pixel_x = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/upgraded/no_power/west,
/turf/open/floor/corsat/yellow/northwest,
/area/corsat/sigma/hangar/monorail/control)
"bmb" = (
@@ -17647,11 +17416,7 @@
/turf/closed/wall/r_wall/biodome,
/area/corsat/gamma/engineering/core)
"bnm" = (
-/obj/structure/machinery/power/apc/high{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/corsat/browncorner/north,
/area/corsat/gamma/cargo)
"bnn" = (
@@ -17943,11 +17708,7 @@
/turf/closed/wall/r_wall/biodome,
/area/corsat/omega/hangar)
"boK" = (
-/obj/structure/machinery/power/apc/hyper{
- dir = 8;
- pixel_x = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/upgraded/no_power/west,
/turf/open/floor/corsat/plate,
/area/corsat/omega/hangar)
"boL" = (
@@ -19250,11 +19011,7 @@
/turf/open/floor/corsat/plate,
/area/corsat/gamma/hangar)
"buL" = (
-/obj/structure/machinery/power/apc/high{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/obj/structure/closet/wardrobe/virology_white,
/turf/open/floor/corsat/purplewhite/north,
/area/corsat/gamma/biodome/virology)
@@ -19662,11 +19419,7 @@
/turf/open/floor/corsat/yellowcorner/west,
/area/corsat/sigma/south/engineering)
"bww" = (
-/obj/structure/machinery/power/apc/hyper{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/upgraded/no_power/north,
/turf/open/floor/corsat/plate,
/area/corsat/sigma/southeast/generator)
"bwx" = (
@@ -19951,11 +19704,7 @@
/turf/open/floor/corsat/squares,
/area/corsat/sigma/south/engineering)
"bxN" = (
-/obj/structure/machinery/power/apc/high{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/obj/structure/surface/rack,
/obj/item/powerloader_clamp,
/turf/open/floor/corsat/yellow/north,
@@ -20394,11 +20143,7 @@
/turf/open/floor/corsat/purplewhite,
/area/corsat/omega/complex)
"bzl" = (
-/obj/structure/machinery/power/apc/hyper{
- dir = 8;
- pixel_x = -30;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/upgraded/no_power/west,
/turf/open/floor/corsat/purplewhite/west,
/area/corsat/omega/complex)
"bzm" = (
@@ -21784,11 +21529,7 @@
/turf/open/floor/corsat/spiralplate,
/area/corsat/gamma/administration)
"bED" = (
-/obj/structure/machinery/power/apc/high{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/obj/structure/surface/table/almayer,
/obj/item/paper_bin,
/obj/item/tool/pen,
@@ -22213,10 +21954,7 @@
/turf/open/floor/corsat/yellow,
/area/corsat/gamma/residential/maint)
"bGp" = (
-/obj/structure/machinery/power/apc/hyper{
- pixel_y = -30;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/upgraded/no_power/south,
/obj/structure/bed/sofa/vert/grey/bot,
/turf/open/floor/corsat/plate,
/area/corsat/gamma/hangar/monorail)
@@ -22225,11 +21963,7 @@
/turf/open/floor/corsat/yellow/west,
/area/corsat/gamma/hangar/monorail/control)
"bGr" = (
-/obj/structure/machinery/power/apc/hyper{
- dir = 8;
- pixel_x = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/upgraded/no_power/west,
/obj/structure/closet/jcloset,
/turf/open/floor/corsat/yellow/west,
/area/corsat/gamma/hangar/monorail/control)
@@ -22245,11 +21979,7 @@
/turf/open/floor/corsat/yellow/west,
/area/corsat/gamma/hangar/monorail/control)
"bGu" = (
-/obj/structure/machinery/power/apc/hyper{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/upgraded/no_power/north,
/turf/open/floor/corsat/darkgreen/north,
/area/corsat/sigma/hangar/monorail)
"bGy" = (
@@ -23782,11 +23512,7 @@
/turf/open/floor/corsat/yellow,
/area/corsat/gamma/residential/maint)
"bOH" = (
-/obj/structure/machinery/power/apc/high{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/obj/structure/surface/table/almayer,
/obj/item/paper_bin,
/turf/open/floor/corsat/brown/northwest,
@@ -24041,11 +23767,7 @@
/turf/open/floor/corsat/brown/southeast,
/area/corsat/sigma/cargo)
"bPM" = (
-/obj/structure/machinery/power/apc/high{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/corsat/yellow/north,
/area/corsat/sigma/north)
"bPO" = (
@@ -24059,11 +23781,7 @@
/turf/open/floor/corsat/yellow/west,
/area/corsat/gamma/engineering/atmos)
"bPR" = (
-/obj/structure/machinery/power/apc/hyper{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/upgraded/no_power/north,
/turf/open/floor/corsat/yellowcorner/east,
/area/corsat/gamma/engineering/atmos)
"bPS" = (
@@ -24128,11 +23846,7 @@
/turf/open/floor/corsat/yellowcorner,
/area/corsat/sigma/north)
"bQe" = (
-/obj/structure/machinery/power/apc/high{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/obj/structure/closet/crate,
/obj/item/stack/sheet/mineral/phoron{
amount = 15
@@ -24243,11 +23957,7 @@
/turf/open/floor/plating,
/area/corsat/inaccessible)
"bQw" = (
-/obj/structure/machinery/power/apc/high{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/obj/structure/surface/rack,
/obj/item/device/lightreplacer,
/obj/item/storage/box/lights,
@@ -24683,11 +24393,7 @@
/turf/open/floor/corsat/redcorner/west,
/area/corsat/omega/checkpoint)
"bSr" = (
-/obj/structure/machinery/power/apc/high{
- dir = 4;
- pixel_x = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/upgraded/no_power/east,
/turf/open/floor/corsat/red/east,
/area/corsat/sigma/hangar/security)
"bSx" = (
@@ -24919,17 +24625,13 @@
/turf/open/floor/corsat/retrosquareslight,
/area/corsat/sigma/south/complex)
"bTO" = (
-/obj/structure/machinery/power/apc/high{
- dir = 4;
- pixel_x = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/upgraded/no_power/east,
/obj/structure/closet/l3closet/scientist,
/turf/open/floor/corsat/purplewhite/east,
/area/corsat/gamma/biodome/complex)
"bTQ" = (
/obj/structure/surface/table/reinforced,
-/obj/item/device/gripper,
+/obj/item/prop/gripper,
/turf/open/floor/corsat/retrosquareslight,
/area/corsat/sigma/south/complex)
"bTU" = (
@@ -25208,11 +24910,7 @@
/turf/open/floor/corsat/blue/north,
/area/corsat/gamma/airlock/control)
"bVs" = (
-/obj/structure/machinery/power/apc/high{
- dir = 4;
- pixel_x = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/upgraded/no_power/east,
/obj/structure/closet/wardrobe/atmospherics_yellow,
/turf/open/floor/corsat/yellow/east,
/area/corsat/gamma/airlock/control)
@@ -25222,11 +24920,7 @@
/turf/open/floor/corsat/yellow/west,
/area/corsat/sigma/airlock/control)
"bVw" = (
-/obj/structure/machinery/power/apc/high{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/obj/structure/closet/wardrobe/atmospherics_yellow,
/turf/open/floor/corsat/yellow/north,
/area/corsat/theta/airlock/control)
@@ -26239,11 +25933,7 @@
/turf/open/floor/corsat/retrosquareslight,
/area/corsat/gamma/biodome/toxins)
"bZK" = (
-/obj/structure/machinery/power/apc/high{
- dir = 8;
- pixel_x = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/upgraded/no_power/west,
/obj/structure/closet/wardrobe/toxins_white,
/turf/open/floor/corsat/purplewhite/west,
/area/corsat/gamma/biodome/toxins)
@@ -26279,19 +25969,11 @@
/turf/open/floor/corsat/squares,
/area/corsat/theta/biodome/complex)
"cah" = (
-/obj/structure/machinery/power/apc/high{
- dir = 8;
- pixel_x = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/upgraded/no_power/west,
/turf/open/floor/corsat/purplewhitecorner/north,
/area/corsat/theta/biodome/hydrowest)
"cai" = (
-/obj/structure/machinery/power/apc/high{
- dir = 4;
- pixel_x = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/upgraded/no_power/east,
/turf/open/floor/corsat/purplewhitecorner/east,
/area/corsat/theta/biodome/hydroeast)
"cak" = (
@@ -26344,19 +26026,11 @@
/turf/open/floor/corsat/retrosquareslight,
/area/corsat/theta/biodome/hydroeast)
"cau" = (
-/obj/structure/machinery/power/apc/high{
- dir = 8;
- pixel_x = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/upgraded/no_power/west,
/turf/open/floor/corsat/purplewhite/southwest,
/area/corsat/theta/biodome/complex)
"caw" = (
-/obj/structure/machinery/power/apc/high{
- dir = 8;
- pixel_x = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/upgraded/no_power/west,
/turf/open/floor/asteroidfloor/north,
/area/corsat/sigma/biodome/testgrounds)
"caA" = (
@@ -27208,11 +26882,7 @@
/turf/open/floor/corsat/squares,
/area/corsat/gamma/airlock/control)
"cXt" = (
-/obj/structure/machinery/power/apc/high{
- dir = 8;
- pixel_x = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/upgraded/no_power/west,
/obj/structure/pipes/standard/manifold/hidden/green{
dir = 8
},
@@ -27862,11 +27532,7 @@
/turf/open/floor/corsat/darkgreen/east,
/area/corsat/gamma/foyer)
"dEe" = (
-/obj/structure/machinery/power/apc/hyper{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/upgraded/no_power/north,
/turf/open/floor/corsat,
/area/corsat/gamma/sigmaremote)
"dET" = (
@@ -28434,11 +28100,7 @@
/turf/open/gm/grass/grass1/weedable,
/area/corsat/theta/biodome)
"eiQ" = (
-/obj/structure/machinery/power/apc/high{
- dir = 8;
- pixel_x = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/upgraded/no_power/west,
/turf/open/floor/corsat/darkgreen/west,
/area/corsat/gamma/rnr)
"eiR" = (
@@ -29358,11 +29020,7 @@
/turf/open/floor/corsat/whitebluefull/southwest,
/area/corsat/gamma/residential/showers)
"fgN" = (
-/obj/structure/machinery/power/apc/high{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/corsat/yellow/north,
/area/corsat/sigma/south/engineering)
"fha" = (
@@ -30110,11 +29768,7 @@
/turf/open/floor/corsat/yellowcorner/north,
/area/corsat/sigma/airlock/control)
"fXE" = (
-/obj/structure/machinery/power/apc/high{
- dir = 4;
- pixel_x = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/upgraded/no_power/east,
/obj/effect/landmark/yautja_teleport,
/turf/open/floor/corsat/squares,
/area/corsat/gamma/residential)
@@ -31060,10 +30714,6 @@
/obj/structure/closet/wardrobe/science_white,
/turf/open/floor/corsat/purplewhite/east,
/area/corsat/gamma/biodome/complex)
-"gRH" = (
-/obj/structure/surface/table/reinforced,
-/turf/open/floor/corsat/retrosquareslight,
-/area/corsat/sigma/south/complex)
"gRP" = (
/obj/structure/machinery/door/airlock/almayer/medical/glass/colony{
name = "Morgue";
@@ -31476,11 +31126,7 @@
/turf/open/floor/corsat,
/area/corsat/omega/complex)
"hlC" = (
-/obj/structure/machinery/power/apc/high{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/corsat/redcorner/east,
/area/corsat/omega/security)
"hlM" = (
@@ -32540,11 +32186,7 @@
/area/corsat/theta/biodome)
"iiS" = (
/obj/structure/surface/table/reinforced,
-/obj/structure/machinery/power/apc/hyper{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/upgraded/no_power/north,
/obj/item/device/flashlight/lamp,
/turf/open/floor/corsat/red/northwest,
/area/corsat/gamma/airlock/south)
@@ -33369,11 +33011,7 @@
/turf/open/floor/corsat/retrosquareslight,
/area/corsat/theta/biodome/complex)
"jee" = (
-/obj/structure/machinery/power/apc/high{
- dir = 4;
- pixel_x = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/upgraded/no_power/east,
/turf/open/floor/corsat/plate,
/area/corsat/theta/airlock/west/id)
"jeE" = (
@@ -33747,11 +33385,7 @@
/area/corsat/sigma/hangar/security)
"jAz" = (
/obj/structure/surface/table/almayer,
-/obj/structure/machinery/power/apc/hyper{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/upgraded/no_power/north,
/turf/open/floor/corsat/bluegrey/north,
/area/corsat/omega/offices)
"jAE" = (
@@ -33807,11 +33441,7 @@
/turf/open/floor/corsat/whitetancorner/west,
/area/corsat/gamma/residential/west)
"jFF" = (
-/obj/structure/machinery/power/apc/high{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/corsat/plate,
/area/corsat/gamma/residential/researcher)
"jFJ" = (
@@ -34742,11 +34372,7 @@
/turf/open/floor/corsat/purplewhite/northwest,
/area/corsat/gamma/biodome/virology)
"kKs" = (
-/obj/structure/machinery/power/apc/high{
- dir = 4;
- pixel_x = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/upgraded/no_power/east,
/turf/open/floor/corsat/plate,
/area/corsat/sigma/dorms)
"kKw" = (
@@ -35029,10 +34655,7 @@
/turf/open/floor/corsat/red/north,
/area/corsat/gamma/foyer)
"kZy" = (
-/obj/structure/machinery/power/apc/hyper{
- dir = 1;
- pixel_y = 25
- },
+/obj/structure/machinery/power/apc/upgraded/power/north,
/turf/open/floor/corsat/red/northwest,
/area/corsat/theta/airlock/west)
"lac" = (
@@ -35673,10 +35296,6 @@
/obj/effect/decal/cleanable/blood/xeno,
/turf/open/floor/corsat/retrosquareslight,
/area/corsat/omega/complex)
-"lHI" = (
-/obj/structure/surface/table/reinforced,
-/turf/open/floor/corsat/retrosquareslight,
-/area/corsat/sigma/south/complex)
"lHK" = (
/turf/open/floor/corsat/bluegrey/west,
/area/corsat/sigma/south/offices)
@@ -37097,11 +36716,7 @@
/turf/open/mars_cave/mars_dirt_4,
/area/corsat/sigma/biodome)
"ndF" = (
-/obj/structure/machinery/power/apc/high{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/corsat/whitebluefull/southwest,
/area/corsat/gamma/residential/laundry)
"nen" = (
@@ -38230,11 +37845,7 @@
/turf/open/floor/almayer/research/containment/floor2,
/area/corsat/inaccessible)
"ome" = (
-/obj/structure/machinery/power/apc/high{
- dir = 4;
- pixel_x = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/upgraded/no_power/east,
/turf/open/floor/corsat/whitetan/east,
/area/corsat/gamma/residential/west)
"omw" = (
@@ -40540,11 +40151,7 @@
/turf/open/floor/corsat/yellow,
/area/corsat/gamma/airlock/control)
"qLo" = (
-/obj/structure/machinery/power/apc/high{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/corsat/yellow/north,
/area/corsat/gamma/hallwaysouth)
"qLz" = (
@@ -40712,12 +40319,6 @@
/turf/open/floor/corsat/yellow,
/area/corsat/gamma/engineering/atmos)
"qVd" = (
-/obj/structure/machinery/gravity_generator{
- desc = "Absorbs and redirects radiation, hopefully away from you.";
- name = "Radiation Collector";
- pixel_x = 15;
- pixel_y = -5
- },
/obj/structure/platform{
dir = 1
},
@@ -41161,11 +40762,7 @@
/turf/open/floor/almayer/research/containment/corner_var1/containment_corner_variant_2,
/area/corsat/gamma/sigmaremote)
"rvC" = (
-/obj/structure/machinery/power/apc/high{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/corsat/redcorner/east,
/area/corsat/sigma/airlock/east/id)
"rvD" = (
@@ -42901,11 +42498,7 @@
/turf/open/floor/corsat/plate,
/area/corsat/gamma/freezer)
"thv" = (
-/obj/structure/machinery/power/apc/high{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/corsat/whitebluefull/southwest,
/area/corsat/gamma/residential/showers)
"tja" = (
@@ -43009,11 +42602,7 @@
/turf/open/floor/corsat/greenwhite/west,
/area/corsat/gamma/medbay)
"tpA" = (
-/obj/structure/machinery/power/apc/high{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/obj/structure/surface/table/almayer,
/obj/item/storage/fancy/cigarettes/lucky_strikes,
/turf/open/floor/corsat/spiralplate,
@@ -43074,11 +42663,7 @@
/turf/open/floor/corsat/whitetan/north,
/area/corsat/gamma/residential/west)
"ttJ" = (
-/obj/structure/machinery/power/apc/high{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/corsat/plate,
/area/corsat/gamma/hallwaysouth)
"ttK" = (
@@ -43121,11 +42706,7 @@
/turf/open/floor/corsat/redcorner/north,
/area/corsat/theta/airlock/control)
"tvO" = (
-/obj/structure/machinery/power/apc/high{
- dir = 4;
- pixel_x = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/upgraded/no_power/east,
/turf/open/floor/corsat/greencorner/east,
/area/corsat/gamma/medbay/morgue)
"tvW" = (
@@ -43958,11 +43539,7 @@
/turf/open/floor/corsat/squares,
/area/corsat/gamma/engineering/core)
"upN" = (
-/obj/structure/machinery/power/apc/hyper{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/upgraded/no_power/north,
/turf/open/floor/corsat/plate,
/area/corsat/sigma/south/complex)
"uqb" = (
@@ -44818,11 +44395,7 @@
/turf/open/floor/corsat/whitetan/southeast,
/area/corsat/gamma/residential/west)
"vhS" = (
-/obj/structure/machinery/power/apc/high{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/corsat/red/north,
/area/corsat/sigma/hangar/checkpoint)
"vhU" = (
@@ -46884,11 +46457,7 @@
/turf/open/gm/dirt,
/area/corsat/theta/biodome)
"xtO" = (
-/obj/structure/machinery/power/apc/high{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/corsat/squareswood/north,
/area/corsat/gamma/rnr/library)
"xtR" = (
@@ -47146,11 +46715,7 @@
/turf/open/floor/corsat/plate,
/area/corsat/sigma/south)
"xJB" = (
-/obj/structure/machinery/power/apc/hyper{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/upgraded/no_power/north,
/turf/open/floor/corsat/red/northwest,
/area/corsat/omega/airlocknorth/id)
"xJH" = (
@@ -92180,7 +91745,7 @@ aje
akd
bwc
aHZ
-lHI
+bTM
bTW
aks
akd
@@ -93161,7 +92726,7 @@ akd
bDa
aHZ
uSc
-gRH
+bTM
aks
akd
eWX
diff --git a/maps/map_files/CORSAT/standalone/sigma_ice.dmm b/maps/map_files/CORSAT/standalone/sigma_ice.dmm
index 47d72b283e14..33d62da2e60c 100644
--- a/maps/map_files/CORSAT/standalone/sigma_ice.dmm
+++ b/maps/map_files/CORSAT/standalone/sigma_ice.dmm
@@ -1454,11 +1454,7 @@
/turf/open/floor/asteroidplating,
/area/corsat/sigma/biodome/gunrange)
"GJ" = (
-/obj/structure/machinery/power/apc/high{
- dir = 8;
- pixel_x = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/upgraded/no_power/west,
/obj/structure/closet/wardrobe/atmospherics_yellow,
/turf/open/floor/corsat/yellow/west,
/area/corsat/sigma/airlock/control)
diff --git a/maps/map_files/DesertDam/Desert_Dam.dmm b/maps/map_files/DesertDam/Desert_Dam.dmm
index 2e078646853d..7fc58191e032 100644
--- a/maps/map_files/DesertDam/Desert_Dam.dmm
+++ b/maps/map_files/DesertDam/Desert_Dam.dmm
@@ -771,11 +771,7 @@
/area/desert_dam/interior/lab_northeast/east_lab_west_entrance)
"adi" = (
/obj/structure/surface/table,
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/prison,
/area/desert_dam/exterior/valley/south_valley_dam)
"adj" = (
@@ -1020,11 +1016,7 @@
/turf/open/desert/desert_shore/shore_edge1/west,
/area/desert_dam/exterior/river/riverside_east)
"aei" = (
-/obj/structure/machinery/power/apc{
- dir = 4;
- pixel_x = 28;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/east,
/turf/open/floor/prison/blue/east,
/area/desert_dam/building/administration/control_room)
"aej" = (
@@ -1133,11 +1125,7 @@
/turf/open/asphalt/cement_sunbleached,
/area/desert_dam/exterior/valley/valley_labs)
"aeD" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/interior/wood,
/area/desert_dam/building/bar/backroom)
"aeE" = (
@@ -2685,11 +2673,7 @@
/turf/open/floor/prison/darkpurple2/northwest,
/area/desert_dam/interior/lab_northeast/east_lab_excavation)
"akm" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/prison/darkpurple2/north,
/area/desert_dam/interior/lab_northeast/east_lab_excavation)
"akn" = (
@@ -3089,11 +3073,7 @@
/turf/open/floor/prison,
/area/desert_dam/interior/lab_northeast/east_lab_excavation)
"alS" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/prison/whitepurple/north,
/area/desert_dam/interior/lab_northeast/east_lab_east_hallway)
"alT" = (
@@ -3358,11 +3338,7 @@
/turf/open/desert/dirt,
/area/desert_dam/exterior/telecomm/lz1_valley)
"amR" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/prison,
/area/desert_dam/interior/lab_northeast/east_lab_containment)
"amS" = (
@@ -3393,11 +3369,7 @@
/turf/open/floor/prison/darkpurplecorners2/north,
/area/desert_dam/interior/lab_northeast/east_lab_biology)
"amX" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/prison/darkpurple2/north,
/area/desert_dam/interior/lab_northeast/east_lab_biology)
"amY" = (
@@ -3494,11 +3466,7 @@
/turf/open/floor/prison/whitepurple/east,
/area/desert_dam/interior/lab_northeast/east_lab_east_hallway)
"anr" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/prison/floor_plate/southwest,
/area/desert_dam/interior/dam_interior/west_tunnel)
"ans" = (
@@ -3657,11 +3625,7 @@
/turf/open/floor/prison/whitepurple/north,
/area/desert_dam/interior/lab_northeast/east_lab_central_hallway)
"anY" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/prison/whitepurple/north,
/area/desert_dam/interior/lab_northeast/east_lab_central_hallway)
"anZ" = (
@@ -4118,11 +4082,7 @@
/turf/open/floor/prison/darkred2/east,
/area/desert_dam/interior/lab_northeast/east_lab_security_armory)
"aqe" = (
-/obj/structure/machinery/power/apc{
- dir = 8;
- pixel_x = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/west,
/turf/open/floor/prison/darkred2/west,
/area/desert_dam/interior/lab_northeast/east_lab_security_armory)
"aqf" = (
@@ -4432,11 +4392,7 @@
/turf/open/floor/prison/darkred2/west,
/area/desert_dam/interior/lab_northeast/east_lab_security_armory)
"arl" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/prison/darkredcorners2/north,
/area/desert_dam/interior/lab_northeast/east_lab_security_armory)
"arm" = (
@@ -4469,11 +4425,7 @@
/turf/open/floor/warning,
/area/desert_dam/interior/lab_northeast/east_lab_east_entrance)
"arr" = (
-/obj/structure/machinery/power/apc{
- dir = 4;
- pixel_x = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/east,
/turf/open/floor/prison/darkred2/east,
/area/desert_dam/interior/lab_northeast/east_lab_security_armory)
"ars" = (
@@ -4551,10 +4503,7 @@
/area/desert_dam/interior/dam_interior/garage)
"arG" = (
/obj/effect/decal/cleanable/dirt,
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 25
- },
+/obj/structure/machinery/power/apc/power/north,
/turf/open/floor/prison/darkyellow2/north,
/area/desert_dam/interior/lab_northeast/east_lab_workshop)
"arH" = (
@@ -5056,11 +5005,7 @@
/turf/open/floor/prison/bright_clean/southwest,
/area/desert_dam/interior/lab_northeast/east_lab_security_armory)
"atG" = (
-/obj/structure/machinery/power/apc{
- dir = 8;
- pixel_x = -30;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/west,
/turf/open/floor/darkyellow2/west,
/area/desert_dam/building/substation/northeast)
"atH" = (
@@ -5077,11 +5022,7 @@
/turf/open/floor/prison/red/north,
/area/desert_dam/interior/lab_northeast/east_lab_east_entrance)
"atK" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/prison/red/north,
/area/desert_dam/interior/lab_northeast/east_lab_east_entrance)
"atL" = (
@@ -5159,11 +5100,7 @@
/turf/open/floor/prison,
/area/desert_dam/building/water_treatment_two/floodgate_control)
"atZ" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/prison,
/area/desert_dam/building/water_treatment_two/floodgate_control)
"aua" = (
@@ -5182,11 +5119,7 @@
/turf/open/floor/dark2,
/area/desert_dam/interior/lab_northeast/east_lab_west_entrance)
"aue" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/prison/red/north,
/area/desert_dam/interior/lab_northeast/east_lab_west_entrance)
"auf" = (
@@ -5268,11 +5201,7 @@
/turf/open/asphalt/cement_sunbleached/cement_sunbleached3,
/area/desert_dam/exterior/valley/valley_medical)
"auw" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/prison/darkpurple2/northeast,
/area/desert_dam/interior/lab_northeast/east_lab_RND)
"aux" = (
@@ -5360,11 +5289,7 @@
/turf/open/floor/whiteblue/north,
/area/desert_dam/interior/lab_northeast/east_lab_lobby)
"auR" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/whiteblue/north,
/area/desert_dam/interior/lab_northeast/east_lab_lobby)
"auS" = (
@@ -5662,11 +5587,7 @@
/turf/open/asphalt/cement/cement13,
/area/desert_dam/interior/dam_interior/west_tunnel)
"awb" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/prison/whitepurple/north,
/area/desert_dam/interior/lab_northeast/east_lab_west_hallway)
"awc" = (
@@ -6371,11 +6292,7 @@
/turf/open/floor/prison/whitepurple/east,
/area/desert_dam/interior/lab_northeast/east_lab_west_hallway)
"azd" = (
-/obj/structure/machinery/power/apc{
- dir = 8;
- pixel_x = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/west,
/turf/open/floor/prison/blue/west,
/area/desert_dam/interior/lab_northeast/east_lab_RND)
"azf" = (
@@ -7596,11 +7513,7 @@
/turf/open/asphalt/cement/cement15,
/area/desert_dam/interior/dam_interior/east_tunnel_entrance)
"aDR" = (
-/obj/structure/machinery/power/apc{
- dir = 4;
- pixel_x = 28;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/east,
/turf/open/asphalt/cement/cement15,
/area/desert_dam/interior/dam_interior/east_tunnel_entrance)
"aDS" = (
@@ -7793,11 +7706,7 @@
/turf/open/desert/dirt/desert_transition_edge1/northeast,
/area/desert_dam/exterior/valley/valley_crashsite)
"aEC" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/obj/effect/decal/warning_stripes{
icon_state = "S"
},
@@ -9454,11 +9363,7 @@
/turf/open/asphalt/cement_sunbleached/cement_sunbleached4,
/area/desert_dam/exterior/landing_pad_one)
"aLb" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/whitegreen/north,
/area/desert_dam/building/lab_northwest/west_lab_xenoflora)
"aLc" = (
@@ -9913,11 +9818,7 @@
/turf/open/floor/prison/darkyellow2/northwest,
/area/desert_dam/building/substation/northeast)
"aMB" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/prison/darkyellow2/north,
/area/desert_dam/building/substation/northeast)
"aMC" = (
@@ -10818,11 +10719,7 @@
/turf/open/asphalt/tile,
/area/desert_dam/exterior/landing_pad_one)
"aQk" = (
-/obj/structure/machinery/power/apc{
- dir = 8;
- pixel_x = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/west,
/turf/open/floor/prison/darkbrown2/west,
/area/desert_dam/building/warehouse/loading)
"aQl" = (
@@ -11174,11 +11071,7 @@
/turf/open/desert/dirt/desert_transition_corner1/west,
/area/desert_dam/exterior/valley/valley_wilderness)
"aRO" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/asphalt/cement_sunbleached/cement_sunbleached18,
/area/desert_dam/exterior/valley/valley_hydro)
"aRP" = (
@@ -11646,11 +11539,7 @@
/turf/open/floor/prison/darkyellow2/north,
/area/desert_dam/building/mining/workshop)
"aTO" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/prison/darkyellow2/north,
/area/desert_dam/building/mining/workshop)
"aTP" = (
@@ -12070,11 +11959,7 @@
/turf/open/floor/wood,
/area/desert_dam/building/administration/office)
"aVQ" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/wood,
/area/desert_dam/building/administration/office)
"aVR" = (
@@ -12315,11 +12200,7 @@
/turf/open/floor/vault2/northeast,
/area/desert_dam/building/administration/control_room)
"aWQ" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/interior/wood,
/area/desert_dam/building/security/office)
"aWR" = (
@@ -12990,11 +12871,7 @@
/turf/open/floor/prison/bright_clean2,
/area/desert_dam/building/administration/hallway)
"aZB" = (
-/obj/structure/machinery/power/apc{
- dir = 8;
- pixel_x = -30;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/west,
/turf/open/floor/prison/blue/west,
/area/desert_dam/building/administration/hallway)
"aZC" = (
@@ -13085,11 +12962,7 @@
/turf/open/floor/dark2,
/area/desert_dam/building/administration/archives)
"aZX" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/dark2,
/area/desert_dam/building/administration/archives)
"aZY" = (
@@ -13178,11 +13051,7 @@
/turf/open/floor/darkred2/north,
/area/desert_dam/building/administration/lobby)
"bar" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/darkred2/northeast,
/area/desert_dam/building/administration/lobby)
"bas" = (
@@ -13310,11 +13179,7 @@
/turf/open/floor/prison,
/area/desert_dam/building/water_treatment_two/hallway)
"baN" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/obj/structure/surface/table,
/obj/item/storage/donut_box,
/turf/open/floor/prison,
@@ -13879,11 +13744,7 @@
/turf/open/floor/wood,
/area/desert_dam/building/administration/meetingrooom)
"bdm" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/wood,
/area/desert_dam/building/administration/meetingrooom)
"bdn" = (
@@ -14255,11 +14116,7 @@
/turf/open/floor/prison/bright_clean/southwest,
/area/desert_dam/building/water_treatment_two/hallway)
"beS" = (
-/obj/structure/machinery/power/apc{
- dir = 4;
- pixel_x = 28;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/east,
/turf/open/floor/prison,
/area/desert_dam/building/water_treatment_two/purification)
"beT" = (
@@ -14761,11 +14618,7 @@
/turf/open/desert/dirt/dirt2,
/area/desert_dam/exterior/river/riverside_central_north)
"bgV" = (
-/obj/structure/machinery/power/apc{
- dir = 8;
- pixel_x = -30;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/west,
/turf/open/floor/prison,
/area/desert_dam/building/water_treatment_two/control_room)
"bgW" = (
@@ -14830,11 +14683,7 @@
/turf/open/asphalt/tile,
/area/desert_dam/exterior/valley/north_valley_dam)
"bhn" = (
-/obj/structure/machinery/power/apc{
- dir = 4;
- pixel_x = 28;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/east,
/obj/structure/sink{
dir = 4;
pixel_x = 11
@@ -14933,11 +14782,7 @@
/turf/open/desert/dirt/desert_transition_corner1/north,
/area/desert_dam/exterior/valley/north_valley_dam)
"bhI" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/prison,
/area/desert_dam/building/water_treatment_two/lobby)
"bhL" = (
@@ -15661,11 +15506,7 @@
/turf/open/floor/prison/red/west,
/area/desert_dam/building/security/lobby)
"blb" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/prison/darkbrowncorners2/east,
/area/desert_dam/building/mining/workshop_foyer)
"blc" = (
@@ -15972,11 +15813,7 @@
/obj/structure/bed/chair{
dir = 4
},
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/dark,
/area/desert_dam/building/security/observation)
"bml" = (
@@ -16140,11 +15977,7 @@
/turf/open/floor/dark,
/area/desert_dam/building/security/interrogation)
"bmW" = (
-/obj/structure/machinery/power/apc{
- dir = 4;
- pixel_x = 28;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/east,
/turf/open/floor/interior/wood,
/area/desert_dam/building/security/detective)
"bmX" = (
@@ -16158,11 +15991,7 @@
/turf/open/desert/dirt,
/area/desert_dam/exterior/valley/valley_telecoms)
"bnb" = (
-/obj/structure/machinery/power/apc{
- dir = 4;
- pixel_x = 28;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/east,
/turf/open/floor/interior/wood,
/area/desert_dam/building/security/marshals_office)
"bnc" = (
@@ -16333,11 +16162,7 @@
/turf/open/floor/prison/darkbrown2/northeast,
/area/desert_dam/interior/dam_interior/auxilary_tool_storage)
"bnP" = (
-/obj/structure/machinery/power/apc{
- dir = 8;
- pixel_x = -30;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/west,
/turf/open/floor/prison/blue/west,
/area/desert_dam/interior/dam_interior/tech_storage)
"bnQ" = (
@@ -16466,11 +16291,7 @@
/turf/open/asphalt/cement/cement1,
/area/desert_dam/interior/dam_interior/western_dam_cave)
"box" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/dark,
/area/desert_dam/building/security/interrogation)
"boy" = (
@@ -16630,11 +16451,7 @@
/turf/open/floor/prison/bright_clean/southwest,
/area/desert_dam/building/security/northern_hallway)
"bph" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/prison/redcorner/north,
/area/desert_dam/building/security/northern_hallway)
"bpi" = (
@@ -17170,11 +16987,7 @@
/turf/open/floor/prison/cell_stripe/east,
/area/desert_dam/interior/dam_interior/hanger)
"brE" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/prison/southwest,
/area/desert_dam/interior/dam_interior/hanger)
"brF" = (
@@ -17514,11 +17327,7 @@
/turf/open/floor/prison/darkbrowncorners2/north,
/area/desert_dam/interior/dam_interior/auxilary_tool_storage)
"btr" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/prison/darkbrown2/north,
/area/desert_dam/interior/dam_interior/auxilary_tool_storage)
"bts" = (
@@ -17688,11 +17497,7 @@
/turf/open/floor/plating,
/area/desert_dam/exterior/valley/valley_telecoms)
"bue" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/prison/darkred2/north,
/area/desert_dam/building/security/holding)
"buf" = (
@@ -18163,11 +17968,7 @@
/turf/open/floor/prison/darkyellow2/north,
/area/desert_dam/interior/dam_interior/engine_west_wing)
"bwl" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/prison/darkyellow2/north,
/area/desert_dam/interior/dam_interior/engine_west_wing)
"bwn" = (
@@ -18254,11 +18055,7 @@
/turf/open/floor/dark,
/area/desert_dam/building/security/interrogation)
"bwM" = (
-/obj/structure/machinery/power/apc{
- dir = 8;
- pixel_x = -30;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/west,
/turf/open/floor/prison/floor_plate,
/area/desert_dam/building/security/evidence)
"bwO" = (
@@ -18433,11 +18230,7 @@
/turf/open/floor/prison/bright_clean2,
/area/desert_dam/building/administration/hallway)
"bxz" = (
-/obj/structure/machinery/power/apc{
- dir = 8;
- pixel_x = -30;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/west,
/turf/open/floor/prison/darkyellow2/west,
/area/desert_dam/interior/dam_interior/smes_main)
"bxB" = (
@@ -18771,11 +18564,7 @@
/turf/open/floor/prison/southwest,
/area/desert_dam/interior/dam_interior/hangar_storage)
"bzj" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/prison/southwest,
/area/desert_dam/interior/dam_interior/hangar_storage)
"bzk" = (
@@ -18901,11 +18690,7 @@
/turf/open/floor/prison/bright_clean2,
/area/desert_dam/building/administration/overseer_office)
"bzK" = (
-/obj/structure/machinery/power/apc{
- dir = 8;
- pixel_x = -30;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/west,
/turf/open/floor/prison/floor_plate/southwest,
/area/desert_dam/interior/dam_interior/north_tunnel_entrance)
"bzL" = (
@@ -18981,11 +18766,7 @@
/turf/open/floor/prison/floor_plate,
/area/desert_dam/building/security/evidence)
"bAa" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/prison/darkred2/north,
/area/desert_dam/building/security/staffroom)
"bAb" = (
@@ -19011,11 +18792,7 @@
/turf/open/floor/prison/bright_clean2,
/area/desert_dam/building/administration/hallway)
"bAp" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/prison/sterile_white,
/area/desert_dam/interior/dam_interior/northwestern_tunnel)
"bAq" = (
@@ -19190,11 +18967,7 @@
/turf/open/floor/prison/floor_marked/southwest,
/area/desert_dam/interior/dam_interior/hangar_storage)
"bBk" = (
-/obj/structure/machinery/power/apc{
- dir = 4;
- pixel_x = 28;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/east,
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/wood,
/area/desert_dam/building/administration/overseer_office)
@@ -19239,11 +19012,7 @@
/turf/open/floor/prison/bright_clean/southwest,
/area/desert_dam/interior/dam_interior/engine_west_wing)
"bBv" = (
-/obj/structure/machinery/power/apc{
- dir = 8;
- pixel_x = -30;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/west,
/turf/open/floor/prison/darkyellow2/west,
/area/desert_dam/interior/dam_interior/control_room)
"bBw" = (
@@ -19368,11 +19137,7 @@
/turf/open/asphalt/cement,
/area/desert_dam/interior/dam_interior/north_tunnel)
"bCm" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/obj/effect/decal/sand_overlay/sand2{
dir = 4
},
@@ -19397,11 +19162,7 @@
/turf/open/floor/prison/sterile_white,
/area/desert_dam/interior/dam_interior/northeastern_tunnel)
"bCq" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/obj/effect/decal/sand_overlay/sand2/corner2{
dir = 1
},
@@ -19634,19 +19395,11 @@
/turf/open/floor/prison/bright_clean/southwest,
/area/desert_dam/interior/dam_interior/control_room)
"bDu" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/neutral,
/area/desert_dam/interior/dam_interior/engine_room)
"bDw" = (
-/obj/structure/machinery/power/apc{
- dir = 4;
- pixel_x = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/east,
/turf/open/floor/prison/darkyellowcorners2/north,
/area/desert_dam/interior/dam_interior/engine_east_wing)
"bDx" = (
@@ -19666,11 +19419,7 @@
/turf/open/floor/prison/green/north,
/area/desert_dam/interior/dam_interior/atmos_storage)
"bDB" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/prison/green/north,
/area/desert_dam/interior/dam_interior/atmos_storage)
"bDC" = (
@@ -20094,11 +19843,7 @@
/turf/open/floor/prison/darkred2/north,
/area/desert_dam/building/security/southern_hallway)
"bFl" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/prison/darkred2/north,
/area/desert_dam/building/security/southern_hallway)
"bFm" = (
@@ -20416,11 +20161,7 @@
/turf/open/floor/prison,
/area/desert_dam/building/security/southern_hallway)
"bGG" = (
-/obj/structure/machinery/power/apc{
- dir = 4;
- pixel_x = 28;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/east,
/turf/open/floor/interior/wood,
/area/desert_dam/building/security/courtroom)
"bGH" = (
@@ -20585,11 +20326,7 @@
/turf/open/floor/white,
/area/desert_dam/interior/dam_interior/lobby)
"bHi" = (
-/obj/structure/machinery/power/apc{
- dir = 8;
- pixel_x = -30;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/west,
/turf/open/floor/prison/darkyellow2/west,
/area/desert_dam/interior/dam_interior/lobby)
"bHl" = (
@@ -20817,11 +20554,7 @@
/turf/open/floor/prison/darkyellow2/east,
/area/desert_dam/interior/dam_interior/lobby)
"bIm" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/prison/darkyellow2/northwest,
/area/desert_dam/interior/dam_interior/smes_backup)
"bIn" = (
@@ -22223,11 +21956,7 @@
/turf/open/floor/prison/darkred2/east,
/area/desert_dam/building/security/prison)
"bOK" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/prison/darkred2/east,
/area/desert_dam/building/security/armory)
"bOM" = (
@@ -22318,11 +22047,7 @@
/turf/open/floor/prison/darkbrowncorners2/west,
/area/desert_dam/interior/dam_interior/auxilary_tool_storage)
"bPg" = (
-/obj/structure/machinery/power/apc{
- dir = 4;
- pixel_x = 28;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/east,
/turf/open/floor/prison/darkyellow2/east,
/area/desert_dam/interior/dam_interior/primary_tool_storage)
"bPh" = (
@@ -22482,11 +22207,7 @@
/turf/open/floor/prison/sterile_white,
/area/desert_dam/interior/dam_interior/workshop)
"bPR" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/prison/sterile_white,
/area/desert_dam/interior/dam_interior/workshop)
"bPT" = (
@@ -22565,11 +22286,7 @@
/obj/structure/machinery/light{
dir = 4
},
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/prison/darkyellow2/northeast,
/area/desert_dam/interior/dam_interior/CE_office)
"bQg" = (
@@ -22656,11 +22373,7 @@
/turf/open/floor/prison/floor_marked,
/area/desert_dam/building/security/armory)
"bQy" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/prison/darkyellowcorners2/east,
/area/desert_dam/building/warehouse/breakroom)
"bQz" = (
@@ -22734,11 +22447,7 @@
/turf/open/desert/dirt/desert_transition_edge1/southwest,
/area/desert_dam/exterior/valley/valley_medical)
"bQR" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/obj/effect/decal/sand_overlay/sand2{
dir = 4
},
@@ -22777,11 +22486,7 @@
/turf/open/floor/prison/sterile_white,
/area/desert_dam/interior/dam_interior/workshop)
"bQZ" = (
-/obj/structure/machinery/power/apc{
- dir = 8;
- pixel_x = -30;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/west,
/turf/open/floor/dark,
/area/desert_dam/interior/dam_interior/office)
"bRb" = (
@@ -23122,11 +22827,7 @@
/turf/open/floor/darkyellow2/north,
/area/desert_dam/building/security/prison)
"bSs" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/darkyellowcorners2/north,
/area/desert_dam/building/security/prison)
"bSu" = (
@@ -23771,11 +23472,7 @@
/turf/open/floor/prison/sterile_white,
/area/desert_dam/interior/dam_interior/central_tunnel)
"bVn" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/prison/sterile_white,
/area/desert_dam/interior/dam_interior/central_tunnel)
"bVo" = (
@@ -23858,11 +23555,7 @@
/turf/open/asphalt/cement_sunbleached/cement_sunbleached19,
/area/desert_dam/exterior/valley/south_valley_dam)
"bVI" = (
-/obj/structure/machinery/power/apc{
- dir = 4;
- pixel_x = 28;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/east,
/turf/open/floor/prison/darkred2/north,
/area/desert_dam/building/security/warden)
"bVJ" = (
@@ -24465,11 +24158,7 @@
},
/area/desert_dam/interior/dam_interior/disposals)
"bXT" = (
-/obj/structure/machinery/power/apc{
- dir = 8;
- pixel_x = -30;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/west,
/turf/open/floor/prison/sterile_white,
/area/desert_dam/interior/dam_interior/west_tunnel)
"bXU" = (
@@ -24851,11 +24540,7 @@
/turf/open/floor/freezerfloor,
/area/desert_dam/interior/dam_interior/break_room)
"bZg" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/whiteyellow/northwest,
/area/desert_dam/interior/dam_interior/break_room)
"bZh" = (
@@ -25032,11 +24717,7 @@
/turf/open/floor/plating/warnplate/north,
/area/desert_dam/exterior/valley/valley_telecoms)
"bZL" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/prison,
/area/desert_dam/building/security/execution_chamber)
"bZM" = (
@@ -25893,11 +25574,7 @@
/turf/open/asphalt,
/area/desert_dam/exterior/valley/valley_medical)
"cdd" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/prison/darkred2/north,
/area/desert_dam/building/security/deathrow)
"cdf" = (
@@ -25959,11 +25636,7 @@
/turf/open/floor/grimy,
/area/desert_dam/building/bar/bar)
"cdr" = (
-/obj/structure/machinery/power/apc{
- dir = 8;
- pixel_x = -30;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/west,
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/grimy,
@@ -27424,11 +27097,7 @@
/turf/open/floor/prison/darkyellow2/northeast,
/area/desert_dam/building/medical/break_room)
"cjE" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/wood,
/area/desert_dam/building/medical/break_room)
"cjF" = (
@@ -27460,11 +27129,7 @@
/turf/open/asphalt/tile,
/area/desert_dam/exterior/valley/valley_telecoms)
"cjP" = (
-/obj/structure/machinery/power/apc{
- dir = 4;
- pixel_x = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/east,
/turf/open/floor/prison/floor_plate/southwest,
/area/desert_dam/interior/dam_interior/south_tunnel)
"cjQ" = (
@@ -27529,11 +27194,7 @@
/turf/open/floor/prison/bright_clean2/southwest,
/area/desert_dam/building/medical/morgue)
"ckf" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/prison/bright_clean2/southwest,
/area/desert_dam/building/medical/morgue)
"ckg" = (
@@ -27646,11 +27307,7 @@
/turf/closed/wall,
/area/desert_dam/building/medical/chemistry)
"ckE" = (
-/obj/structure/machinery/power/apc{
- dir = 8;
- pixel_x = -30;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/west,
/turf/open/floor/white,
/area/desert_dam/building/medical/chemistry)
"ckF" = (
@@ -28703,11 +28360,7 @@
/turf/open/floor/prison/darkbrown2/north,
/area/desert_dam/building/warehouse/warehouse)
"cpg" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/prison/darkbrowncorners2/east,
/area/desert_dam/building/warehouse/warehouse)
"cph" = (
@@ -28834,11 +28487,7 @@
/turf/open/floor/prison/whitegreen/north,
/area/desert_dam/building/medical/north_wing_hallway)
"cpN" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/prison/whitegreen/north,
/area/desert_dam/building/medical/north_wing_hallway)
"cpP" = (
@@ -29230,11 +28879,7 @@
/turf/open/floor/prison/whitegreen/north,
/area/desert_dam/building/medical/lobby)
"crG" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/prison/whitegreen/north,
/area/desert_dam/building/medical/lobby)
"crH" = (
@@ -29390,11 +29035,7 @@
/turf/open/floor/asteroidplating,
/area/desert_dam/exterior/telecomm/lz2_tcomms)
"csp" = (
-/obj/structure/machinery/power/apc{
- dir = 8;
- pixel_x = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/west,
/turf/open/floor/prison/darkyellow2/west,
/area/desert_dam/building/substation/west)
"css" = (
@@ -29751,11 +29392,7 @@
/obj/structure/surface/table/reinforced,
/obj/item/device/healthanalyzer,
/obj/item/device/healthanalyzer,
-/obj/structure/machinery/power/apc{
- dir = 4;
- pixel_x = 28;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/east,
/turf/open/floor/prison/whitegreen/east,
/area/desert_dam/building/medical/west_wing_hallway)
"ctW" = (
@@ -30061,11 +29698,7 @@
/turf/open/floor/prison/bright_clean2/southwest,
/area/desert_dam/building/medical/surgury_observation)
"cvd" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/prison/bright_clean2/southwest,
/area/desert_dam/building/medical/surgury_observation)
"cve" = (
@@ -30546,11 +30179,7 @@
/turf/open/floor/wood,
/area/desert_dam/building/medical/CMO)
"cxb" = (
-/obj/structure/machinery/power/apc{
- dir = 4;
- pixel_x = 28;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/east,
/turf/open/floor/wood,
/area/desert_dam/building/medical/CMO)
"cxc" = (
@@ -31400,11 +31029,7 @@
/turf/open/floor/prison/whitered/east,
/area/desert_dam/building/medical/surgery_room_two)
"cAv" = (
-/obj/structure/machinery/power/apc{
- dir = 8;
- pixel_x = -30;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/west,
/turf/open/floor/prison/darkyellow2/west,
/area/desert_dam/building/substation/central)
"cAx" = (
@@ -31444,11 +31069,7 @@
/turf/closed/wall,
/area/desert_dam/building/medical/office2)
"cAH" = (
-/obj/structure/machinery/power/apc{
- dir = 4;
- pixel_x = 28;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/east,
/obj/structure/disposalpipe/junction{
dir = 1;
icon_state = "pipe-j2"
@@ -31644,11 +31265,7 @@
/turf/open/floor/prison/whitered/west,
/area/desert_dam/building/medical/primary_storage)
"cBm" = (
-/obj/structure/machinery/power/apc{
- dir = 8;
- pixel_x = -30;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/west,
/turf/open/floor/prison/whitered/west,
/area/desert_dam/building/medical/surgery_room_one)
"cBo" = (
@@ -31663,11 +31280,7 @@
/turf/open/floor/prison/whitered/east,
/area/desert_dam/building/medical/surgery_room_one)
"cBq" = (
-/obj/structure/machinery/power/apc{
- dir = 8;
- pixel_x = -30;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/west,
/turf/open/floor/prison/whitered/west,
/area/desert_dam/building/medical/surgery_room_two)
"cBr" = (
@@ -31940,20 +31553,12 @@
/area/desert_dam/building/medical/office1)
"cCC" = (
/obj/structure/bed,
-/obj/structure/machinery/power/apc{
- dir = 4;
- pixel_x = 28;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/east,
/turf/open/floor/prison/whitered/east,
/area/desert_dam/building/medical/office1)
"cCE" = (
/obj/structure/bed,
-/obj/structure/machinery/power/apc{
- dir = 4;
- pixel_x = 28;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/east,
/turf/open/floor/prison/whitered/east,
/area/desert_dam/building/medical/office2)
"cCF" = (
@@ -32392,11 +31997,7 @@
/area/desert_dam/building/medical/treatment_room)
"cEA" = (
/obj/structure/machinery/iv_drip,
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/prison/whitegreen/northwest,
/area/desert_dam/building/medical/treatment_room)
"cEB" = (
@@ -32430,11 +32031,7 @@
/turf/open/floor/prison/whitegreencorner/east,
/area/desert_dam/building/medical/east_wing_hallway)
"cEI" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/prison/whitegreen/north,
/area/desert_dam/building/medical/east_wing_hallway)
"cEJ" = (
@@ -32544,11 +32141,7 @@
/obj/effect/decal/medical_decals{
icon_state = "docstriping"
},
-/obj/structure/machinery/power/apc{
- dir = 4;
- pixel_x = 28;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/east,
/turf/open/floor/white,
/area/desert_dam/building/medical/garage)
"cFi" = (
@@ -33723,11 +33316,7 @@
/turf/closed/wall,
/area/desert_dam/building/medical/virology_isolation)
"cJH" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/plating,
/area/desert_dam/building/medical/east_wing_hallway)
"cJI" = (
@@ -33967,11 +33556,7 @@
/turf/open/floor/prison/whitegreen/east,
/area/desert_dam/building/medical/virology_wing)
"cKI" = (
-/obj/structure/machinery/power/apc{
- dir = 4;
- pixel_x = 28;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/east,
/turf/open/floor/prison/whitegreen/east,
/area/desert_dam/building/medical/virology_wing)
"cKJ" = (
@@ -34713,11 +34298,7 @@
/turf/open/floor/dark,
/area/desert_dam/building/church)
"cOe" = (
-/obj/structure/machinery/power/apc{
- dir = 8;
- pixel_x = -30;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/west,
/turf/open/floor/dark,
/area/desert_dam/building/church)
"cOf" = (
@@ -34847,10 +34428,7 @@
/turf/open/floor/prison/whitegreen/southwest,
/area/desert_dam/building/medical/virology_isolation)
"cOJ" = (
-/obj/structure/machinery/power/apc{
- pixel_y = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/south,
/turf/open/floor/prison/whitegreen,
/area/desert_dam/building/medical/virology_isolation)
"cOK" = (
@@ -35063,11 +34641,7 @@
/turf/open/asphalt/tile,
/area/desert_dam/exterior/valley/valley_cargo)
"cPH" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/prison/darkyellow2/northwest,
/area/desert_dam/building/substation/southwest)
"cPI" = (
@@ -35347,11 +34921,7 @@
/turf/open/desert/dirt,
/area/desert_dam/exterior/landing_pad_one)
"cQN" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/prison/sterile_white/west,
/area/desert_dam/building/bar/bar_restroom)
"cQO" = (
@@ -35679,11 +35249,7 @@
/turf/open/floor/prison,
/area/desert_dam/interior/dam_interior/south_tunnel_entrance)
"cSh" = (
-/obj/structure/machinery/power/apc{
- dir = 8;
- pixel_x = -30;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/west,
/turf/open/floor/prison/floor_plate/southwest,
/area/desert_dam/interior/dam_interior/south_tunnel_entrance)
"cSl" = (
@@ -36013,11 +35579,7 @@
/turf/open/floor/prison/sterile_white/west,
/area/desert_dam/building/hydroponics/hydroponics_breakroom)
"cTM" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/prison/sterile_white/west,
/area/desert_dam/building/hydroponics/hydroponics_breakroom)
"cTN" = (
@@ -36750,11 +36312,7 @@
/obj/structure/machinery/light{
dir = 1
},
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/obj/effect/landmark/structure_spawner/xvx_hive/xeno_wall,
/obj/effect/landmark/structure_spawner/setup/distress/xeno_wall,
/turf/open/floor/prison/greencorner/east,
@@ -37279,11 +36837,7 @@
/turf/open/floor/prison/sterile_white,
/area/desert_dam/building/cafeteria/cafeteria)
"dbF" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/obj/structure/machinery/microwave,
/obj/structure/surface/table/reinforced,
/turf/open/floor/prison/sterile_white,
@@ -37448,10 +37002,7 @@
/turf/open/floor/plating,
/area/desert_dam/building/cafeteria/backroom)
"dcq" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 25
- },
+/obj/structure/machinery/power/apc/power/north,
/turf/open/floor/plating,
/area/desert_dam/building/cafeteria/backroom)
"dcs" = (
@@ -37486,11 +37037,7 @@
/turf/open/asphalt/cement_sunbleached,
/area/desert_dam/exterior/valley/valley_civilian)
"dcL" = (
-/obj/structure/machinery/power/apc{
- dir = 4;
- pixel_x = 28;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/east,
/obj/effect/spawner/random/toolbox,
/turf/open/floor/prison/whitered/east,
/area/desert_dam/building/medical/primary_storage)
@@ -37654,11 +37201,7 @@
/turf/open/floor/freezerfloor,
/area/desert_dam/building/cafeteria/cold_room)
"ddu" = (
-/obj/structure/machinery/power/apc{
- dir = 4;
- pixel_x = 28;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/east,
/turf/open/floor/freezerfloor,
/area/desert_dam/building/cafeteria/cold_room)
"ddv" = (
@@ -37796,11 +37339,7 @@
/turf/open/floor/prison/floor_marked/southwest,
/area/desert_dam/building/hydroponics/hydroponics_loading)
"ddZ" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/prison,
/area/desert_dam/building/hydroponics/hydroponics_loading)
"dea" = (
@@ -38067,11 +37606,7 @@
/turf/open/asphalt,
/area/desert_dam/exterior/river/riverside_south)
"dfe" = (
-/obj/structure/machinery/power/apc{
- dir = 8;
- pixel_x = -30;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/west,
/turf/open/floor/prison,
/area/desert_dam/building/hydroponics/hydroponics_storage)
"dfh" = (
@@ -38134,11 +37669,7 @@
/turf/open/floor/prison,
/area/desert_dam/building/cafeteria/loading)
"dfv" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/prison,
/area/desert_dam/building/cafeteria/loading)
"dfw" = (
@@ -38928,11 +38459,7 @@
/turf/open/desert/dirt,
/area/desert_dam/exterior/valley/valley_hydro)
"dld" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/prison/darkbrown3/north,
/area/desert_dam/interior/dam_interior/disposals)
@@ -39363,11 +38890,7 @@
/turf/open/floor/prison/sterile_white,
/area/desert_dam/building/cafeteria/cafeteria)
"dqu" = (
-/obj/structure/machinery/power/apc{
- dir = 8;
- pixel_x = -30;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/west,
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/prison/sterile_white,
/area/desert_dam/building/cafeteria/cafeteria)
@@ -39393,11 +38916,7 @@
/area/desert_dam/building/water_treatment_one/lobby)
"dqS" = (
/obj/structure/bed/chair,
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/prison,
/area/desert_dam/building/water_treatment_one/lobby)
"dqT" = (
@@ -39604,11 +39123,7 @@
/turf/open/asphalt,
/area/desert_dam/building/water_treatment_one/garage)
"dtt" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/prison,
/area/desert_dam/building/water_treatment_one/garage)
"dtu" = (
@@ -39709,11 +39224,7 @@
/turf/open/floor/prison/bright_clean/southwest,
/area/desert_dam/building/water_treatment_one/hallway)
"duu" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/prison,
/area/desert_dam/building/water_treatment_one/hallway)
"duw" = (
@@ -40018,10 +39529,7 @@
/turf/open/asphalt,
/area/desert_dam/interior/dam_interior/south_tunnel)
"dxd" = (
-/obj/structure/machinery/power/apc{
- pixel_y = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/south,
/turf/open/floor/prison,
/area/desert_dam/building/water_treatment_one/purification)
"dxe" = (
@@ -40145,11 +39653,7 @@
},
/area/desert_dam/building/water_treatment_one/breakroom)
"dyi" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/prison,
/area/desert_dam/building/water_treatment_one/floodgate_control)
"dyj" = (
@@ -40267,11 +39771,7 @@
/turf/open/gm/river/desert/deep/covered,
/area/desert_dam/exterior/river/filtration_a)
"dzi" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/freezerfloor,
/area/desert_dam/building/water_treatment_one/equipment)
"dzj" = (
@@ -40545,11 +40045,7 @@
/turf/open/floor/freezerfloor,
/area/desert_dam/building/water_treatment_one/breakroom)
"dBj" = (
-/obj/structure/machinery/power/apc{
- dir = 8;
- pixel_x = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/west,
/turf/open/floor/whiteyellowcorner/north,
/area/desert_dam/building/water_treatment_one/breakroom)
"dBo" = (
@@ -41011,11 +40507,7 @@
/turf/open/floor/wood,
/area/desert_dam/building/dorms/hallway_westwing)
"dEu" = (
-/obj/structure/machinery/power/apc{
- dir = 8;
- pixel_x = -30;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/west,
/turf/open/floor/prison/green/west,
/area/desert_dam/building/dorms/hallway_westwing)
"dEv" = (
@@ -41099,11 +40591,7 @@
/turf/open/floor/plating,
/area/desert_dam/building/dorms/restroom)
"dFj" = (
-/obj/structure/machinery/power/apc{
- dir = 8;
- pixel_x = -30;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/west,
/turf/open/floor/prison/bright_clean2,
/area/desert_dam/building/dorms/restroom)
"dFk" = (
@@ -41520,11 +41008,7 @@
/area/desert_dam/building/warehouse/loading)
"dHQ" = (
/obj/structure/surface/table,
-/obj/structure/machinery/power/apc{
- dir = 4;
- pixel_x = 28;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/east,
/obj/effect/spawner/random/toolbox,
/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot,
/turf/open/floor/prison/bright_clean/southwest,
@@ -41736,11 +41220,7 @@
/turf/open/floor/prison/blue/north,
/area/desert_dam/building/dorms/pool)
"dIR" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/obj/structure/disposalpipe/segment{
dir = 4
},
@@ -42430,9 +41910,7 @@
/turf/open/desert/dirt,
/area/desert_dam/exterior/valley/valley_civilian)
"dMY" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
+/obj/structure/machinery/power/apc/power/north{
start_charge = 150
},
/obj/effect/decal/cleanable/dirt,
@@ -44405,11 +43883,7 @@
/turf/open/floor/prison/bright_clean/southwest,
/area/desert_dam/building/hydroponics/hydroponics)
"dVN" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/obj/effect/decal/cleanable/blood/xeno,
/turf/open/floor/prison,
/area/desert_dam/building/water_treatment_one/control_room)
@@ -46927,11 +46401,7 @@
/turf/open/asphalt/tile,
/area/desert_dam/exterior/valley/south_valley_dam)
"gRC" = (
-/obj/structure/machinery/power/apc{
- dir = 4;
- pixel_x = 31;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/east,
/turf/open/floor/plating,
/area/desert_dam/exterior/telecomm/lz2_containers)
"gTD" = (
@@ -47619,11 +47089,7 @@
/turf/open/desert/dirt/dirt2,
/area/desert_dam/exterior/valley/south_valley_dam)
"jxq" = (
-/obj/structure/machinery/power/apc{
- dir = 8;
- pixel_x = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/west,
/turf/open/floor/delivery,
/area/desert_dam/exterior/telecomm/lz1_south)
"jxN" = (
@@ -48411,11 +47877,7 @@
/area/desert_dam/interior/dam_interior/hanger)
"mKZ" = (
/obj/structure/flora/pottedplant,
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/obj/structure/machinery/light{
dir = 4
},
@@ -48937,11 +48399,7 @@
/turf/closed/wall/r_wall/bunker,
/area/desert_dam/interior/lab_northeast/east_lab_east_entrance)
"oYp" = (
-/obj/structure/machinery/power/apc{
- dir = 8;
- pixel_x = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/west,
/turf/open/floor/prison/bright_clean/southwest,
/area/desert_dam/exterior/telecomm/lz1_valley)
"pac" = (
@@ -49370,11 +48828,7 @@
/turf/open/desert/dirt,
/area/desert_dam/exterior/landing_pad_one)
"qJI" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/plating,
/area/desert_dam/exterior/telecomm/lz1_xenoflora)
"qJU" = (
@@ -49667,11 +49121,7 @@
/obj/effect/decal/warning_stripes{
icon_state = "E"
},
-/obj/structure/machinery/power/apc{
- dir = 4;
- pixel_x = 30;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/east,
/turf/open/floor/asteroidplating,
/area/desert_dam/exterior/telecomm/lz2_tcomms)
"rTV" = (
@@ -51170,11 +50620,7 @@
/turf/open/asphalt/tile,
/area/desert_dam/exterior/valley/valley_civilian)
"xkK" = (
-/obj/structure/machinery/power/apc{
- dir = 4;
- pixel_x = 31;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/east,
/turf/open/floor/plating,
/area/desert_dam/exterior/telecomm/lz2_storage)
"xls" = (
diff --git a/maps/map_files/DesertDam/standalone/crashlanding-upp-bar.dmm b/maps/map_files/DesertDam/standalone/crashlanding-upp-bar.dmm
index 61bc40a64e52..972e9ddf3b59 100644
--- a/maps/map_files/DesertDam/standalone/crashlanding-upp-bar.dmm
+++ b/maps/map_files/DesertDam/standalone/crashlanding-upp-bar.dmm
@@ -842,11 +842,7 @@
/turf/open/asphalt,
/area/desert_dam/exterior/valley/bar_valley_dam)
"rm" = (
-/obj/structure/machinery/power/apc{
- dir = 8;
- pixel_x = -30;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/west,
/turf/open/floor/interior/wood,
/area/desert_dam/building/bar/bar)
"rR" = (
@@ -1153,11 +1149,7 @@
/turf/open/desert/dirt,
/area/desert_dam/exterior/valley/bar_valley_dam)
"xG" = (
-/obj/structure/machinery/power/apc{
- dir = 8;
- pixel_x = -30;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/west,
/obj/effect/decal/cleanable/blood/xeno,
/turf/open/floor/prison/floor_plate/southwest,
/area/desert_dam/interior/dam_interior/south_tunnel_entrance)
@@ -1910,11 +1902,7 @@
/turf/open/floor/prison/floor_plate/southwest,
/area/desert_dam/interior/dam_interior/south_tunnel_entrance)
"LJ" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/obj/item/stack/sheet/metal,
/turf/open/floor/plating/platingdmg3,
/area/desert_dam/building/bar/backroom)
diff --git a/maps/map_files/FOP_v2_Cellblocks/Prison_Station_FOP.dmm b/maps/map_files/FOP_v2_Cellblocks/Prison_Station_FOP.dmm
index 5cccceb54389..518ea89a0257 100644
--- a/maps/map_files/FOP_v2_Cellblocks/Prison_Station_FOP.dmm
+++ b/maps/map_files/FOP_v2_Cellblocks/Prison_Station_FOP.dmm
@@ -789,10 +789,7 @@
/turf/open/floor/prison/whitepurple,
/area/prison/research/secret/testing)
"acy" = (
-/obj/structure/machinery/power/apc{
- pixel_y = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/south,
/turf/open/floor/prison/whitepurple,
/area/prison/research/secret/testing)
"acz" = (
@@ -1454,11 +1451,7 @@
/turf/open/floor/prison,
/area/prison/security/monitoring/maxsec/panopticon)
"aeB" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/obj/structure/pipes/standard/manifold/hidden/supply{
dir = 1
},
@@ -1841,10 +1834,7 @@
/turf/open/floor/prison/whitepurple,
/area/prison/research/secret/bioengineering)
"afS" = (
-/obj/structure/machinery/power/apc{
- pixel_y = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/south,
/turf/open/floor/prison/whitepurple,
/area/prison/research/secret/bioengineering)
"afT" = (
@@ -2174,11 +2164,7 @@
/turf/open/floor/prison/darkpurple2/north,
/area/prison/research/secret/containment)
"ahd" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/prison/darkpurple2/north,
/area/prison/research/secret/containment)
"ahe" = (
@@ -2234,11 +2220,7 @@
/turf/open/floor/prison/darkpurple2/north,
/area/prison/research/secret)
"ahk" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/obj/effect/landmark/good_item,
/turf/open/floor/prison/darkpurple2/north,
/area/prison/research/secret)
@@ -2286,11 +2268,7 @@
/turf/open/floor/prison/darkredfull2/southwest,
/area/prison/cellblock/maxsec/north)
"ahv" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/prison/darkredfull2/southwest,
/area/prison/cellblock/maxsec/north)
"ahw" = (
@@ -2625,11 +2603,7 @@
/turf/open/floor/prison,
/area/prison/research/secret/dissection)
"aiP" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/prison,
/area/prison/research/secret/dissection)
"aiQ" = (
@@ -3144,11 +3118,7 @@
/turf/open/floor/plating,
/area/prison/maintenance/research_medbay)
"akC" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/plating,
/area/prison/maintenance/research_medbay)
"akD" = (
@@ -3512,10 +3482,7 @@
/area/prison/research/secret/chemistry)
"alT" = (
/obj/structure/surface/table/reinforced,
-/obj/structure/machinery/power/apc{
- pixel_y = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/south,
/turf/open/floor/prison/darkpurplefull2/northwest,
/area/prison/research/secret/chemistry)
"alU" = (
@@ -3919,11 +3886,7 @@
/turf/open/floor/prison/sterile_white/southwest,
/area/prison/medbay/surgery)
"ann" = (
-/obj/structure/machinery/power/apc{
- dir = 4;
- pixel_x = 28;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/east,
/turf/open/floor/prison/whitegreen/east,
/area/prison/medbay/surgery)
"ano" = (
@@ -4017,11 +3980,7 @@
/turf/open/floor/prison/darkred2/north,
/area/prison/security/checkpoint/maxsec_highsec)
"anE" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/prison/darkred2/north,
/area/prison/security/checkpoint/maxsec_highsec)
"anF" = (
@@ -5084,11 +5043,7 @@
/obj/effect/decal/warning_stripes{
icon_state = "S"
},
-/obj/structure/machinery/power/apc{
- dir = 4;
- pixel_x = 28;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/east,
/turf/open/floor/prison/west,
/area/prison/research/RD)
"aro" = (
@@ -5244,11 +5199,7 @@
/turf/open/floor/prison/whitepurple/east,
/area/prison/research)
"arT" = (
-/obj/structure/machinery/power/apc{
- dir = 8;
- pixel_x = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/west,
/obj/item/stack/rods,
/turf/open/floor/prison/red/west,
/area/prison/cellblock/highsec/north/north)
@@ -5567,10 +5518,7 @@
/turf/open/floor/prison/sterile_white/southwest,
/area/prison/medbay)
"ate" = (
-/obj/structure/machinery/power/apc{
- pixel_y = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/south,
/obj/structure/platform,
/turf/open/floor/prison/sterile_white/southwest,
/area/prison/hanger/research)
@@ -5721,11 +5669,7 @@
/turf/open/floor/prison/darkredfull2/southwest,
/area/prison/cellblock/maxsec/south)
"atI" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/prison,
/area/prison/medbay/morgue)
"atJ" = (
@@ -5960,10 +5904,7 @@
/turf/open/floor/prison/darkredfull2/southwest,
/area/prison/cellblock/maxsec/south)
"auH" = (
-/obj/structure/machinery/power/apc{
- pixel_y = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/south,
/turf/open/floor/prison/darkredfull2/southwest,
/area/prison/cellblock/maxsec/south)
"auI" = (
@@ -6296,11 +6237,7 @@
/turf/open/floor/prison/bright_clean/southwest,
/area/prison/chapel)
"awc" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/prison/bright_clean/southwest,
/area/prison/chapel)
"awe" = (
@@ -6435,11 +6372,7 @@
/area/prison/hanger/research)
"awH" = (
/obj/structure/surface/rack,
-/obj/structure/machinery/power/apc{
- dir = 8;
- pixel_x = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/west,
/turf/open/floor/prison/southwest,
/area/prison/hangar_storage/research)
"awI" = (
@@ -6567,11 +6500,7 @@
/obj/item/roller{
icon_state = "down"
},
-/obj/structure/machinery/power/apc{
- dir = 4;
- pixel_x = 28;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/east,
/turf/open/floor/prison/whitegreen/east,
/area/prison/medbay)
"axk" = (
@@ -6759,11 +6688,7 @@
/turf/closed/wall/r_wall/prison_unmeltable,
/area/prison/security/checkpoint/maxsec)
"axU" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/plating,
/area/prison/maintenance/residential/access/north)
"axV" = (
@@ -7337,10 +7262,7 @@
/turf/open/floor/prison/darkred2,
/area/prison/security/checkpoint/maxsec)
"aAq" = (
-/obj/structure/machinery/power/apc{
- pixel_y = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/south,
/obj/structure/pipes/standard/simple/hidden/supply{
dir = 4
},
@@ -7530,11 +7452,7 @@
/turf/open/floor/prison/darkredfull2/southwest,
/area/prison/medbay/foyer)
"aAY" = (
-/obj/structure/machinery/power/apc{
- dir = 8;
- pixel_x = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/west,
/turf/open/floor/prison/whitepurple/southwest,
/area/prison/research)
"aAZ" = (
@@ -8053,11 +7971,7 @@
/turf/open/floor/prison/bright_clean2/southwest,
/area/prison/medbay/foyer)
"aDh" = (
-/obj/structure/machinery/power/apc{
- dir = 8;
- pixel_x = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/west,
/turf/open/floor/prison/bright_clean2/southwest,
/area/prison/medbay/foyer)
"aDi" = (
@@ -8441,10 +8355,7 @@
/obj/structure/pipes/standard/simple/hidden/supply{
dir = 5
},
-/obj/structure/machinery/power/apc{
- pixel_y = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/south,
/turf/open/floor/freezerfloor,
/area/prison/toilet/research)
"aEB" = (
@@ -8575,11 +8486,7 @@
/turf/open/floor/prison/darkyellow2/north,
/area/prison/hangar_storage/main)
"aFc" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/prison/darkyellow2/northeast,
/area/prison/hangar_storage/main)
"aFd" = (
@@ -8966,10 +8873,7 @@
/turf/open/floor/prison/southwest,
/area/prison/recreation/highsec/n)
"aGC" = (
-/obj/structure/machinery/power/apc{
- pixel_y = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/south,
/obj/effect/decal/cleanable/blood,
/turf/open/floor/prison/southwest,
/area/prison/recreation/highsec/n)
@@ -9352,10 +9256,7 @@
/turf/open/floor/prison/whitepurple/southwest,
/area/prison/quarters/research)
"aIa" = (
-/obj/structure/machinery/power/apc{
- pixel_y = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/south,
/turf/open/floor/prison/whitepurple,
/area/prison/quarters/research)
"aIb" = (
@@ -9419,11 +9320,7 @@
/turf/open/floor/prison,
/area/prison/storage/highsec/n)
"aIp" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/prison,
/area/prison/storage/highsec/n)
"aIq" = (
@@ -9492,11 +9389,7 @@
/turf/open/floor/prison/sterile_white/southwest,
/area/prison/residential/central)
"aIC" = (
-/obj/structure/machinery/power/apc{
- dir = 8;
- pixel_x = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/west,
/turf/open/floor/plating,
/area/prison/maintenance/staff_research)
"aID" = (
@@ -10387,11 +10280,7 @@
/turf/open/floor/prison/bright_clean/southwest,
/area/prison/cleaning)
"aMm" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/obj/structure/janitorialcart,
/turf/open/floor/prison/bright_clean/southwest,
/area/prison/cleaning)
@@ -10462,11 +10351,7 @@
/turf/open/floor/prison/green/north,
/area/prison/quarters/staff)
"aMz" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/obj/structure/pipes/standard/simple/hidden/supply{
dir = 4
},
@@ -10974,11 +10859,7 @@
/area/prison/command/secretary_office)
"aOy" = (
/obj/structure/bed/chair/comfy,
-/obj/structure/machinery/power/apc{
- dir = 8;
- pixel_x = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/west,
/turf/open/floor/wood,
/area/prison/command/office)
"aOA" = (
@@ -11036,10 +10917,7 @@
/turf/open/floor/prison/red,
/area/prison/cellblock/highsec/north/south)
"aOK" = (
-/obj/structure/machinery/power/apc{
- pixel_y = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/south,
/turf/open/floor/prison/red,
/area/prison/cellblock/highsec/north/south)
"aOL" = (
@@ -11517,11 +11395,7 @@
/turf/closed/wall/prison,
/area/prison/recreation/staff)
"aQD" = (
-/obj/structure/machinery/power/apc{
- dir = 8;
- pixel_x = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/west,
/turf/open/floor/prison/green/west,
/area/prison/hallway/staff)
"aQF" = (
@@ -11622,11 +11496,7 @@
/turf/open/floor/plating,
/area/prison/maintenance/residential/nw)
"aQW" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/plating,
/area/prison/maintenance/residential/nw)
"aQZ" = (
@@ -11738,11 +11608,7 @@
/turf/open/floor/prison/greenfull,
/area/prison/cellblock/lowsec/nw)
"aRv" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/prison/green/north,
/area/prison/cellblock/lowsec/nw)
"aRw" = (
@@ -12193,11 +12059,7 @@
/turf/open/floor/wood,
/area/prison/recreation/staff)
"aTp" = (
-/obj/structure/machinery/power/apc{
- dir = 8;
- pixel_x = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/west,
/turf/open/floor/prison/blue/west,
/area/prison/command/secretary_office)
"aTq" = (
@@ -12457,6 +12319,7 @@
/obj/structure/pipes/standard/simple/hidden/supply{
dir = 5
},
+/obj/structure/machinery/power/apc/no_power/west,
/turf/open/floor/prison/darkredfull2/southwest,
/area/prison/security/checkpoint/highsec/n)
"aUq" = (
@@ -12567,11 +12430,7 @@
/turf/open/floor/prison/sterile_white,
/area/prison/toilet/staff)
"aUJ" = (
-/obj/structure/machinery/power/apc{
- dir = 4;
- pixel_x = 28;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/east,
/turf/open/floor/prison/sterile_white,
/area/prison/toilet/staff)
"aUK" = (
@@ -12639,11 +12498,7 @@
/turf/open/floor/plating,
/area/prison/command/quarters)
"aUW" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/plating,
/area/prison/maintenance/residential/ne)
"aUY" = (
@@ -12730,11 +12585,6 @@
/obj/structure/machinery/light/small{
dir = 8
},
-/obj/structure/machinery/power/apc{
- dir = 4;
- pixel_x = 28;
- start_charge = 0
- },
/obj/structure/filingcabinet,
/turf/open/floor/prison/darkredfull2/southwest,
/area/prison/security/checkpoint/highsec/n)
@@ -12926,11 +12776,7 @@
/turf/open/floor/carpet,
/area/prison/command/quarters)
"aWc" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/carpet,
/area/prison/command/quarters)
"aWd" = (
@@ -13419,11 +13265,7 @@
/turf/open/floor/wood,
/area/prison/recreation/staff)
"aXW" = (
-/obj/structure/machinery/power/apc{
- dir = 4;
- pixel_x = 28;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/east,
/obj/effect/decal/cleanable/blood,
/turf/open/floor/wood,
/area/prison/recreation/staff)
@@ -13941,11 +13783,7 @@
/turf/open/floor/prison/green/west,
/area/prison/cellblock/lowsec/ne)
"aZY" = (
-/obj/structure/machinery/power/apc{
- dir = 4;
- pixel_x = 28;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/east,
/turf/open/floor/prison/green/east,
/area/prison/cellblock/lowsec/ne)
"aZZ" = (
@@ -14641,11 +14479,7 @@
/turf/open/floor/plating/plating_catwalk/prison,
/area/prison/hallway/entrance)
"bcB" = (
-/obj/structure/machinery/power/apc{
- dir = 4;
- pixel_x = 28;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/east,
/obj/effect/decal/warning_stripes{
icon_state = "SE-out"
},
@@ -14837,11 +14671,7 @@
/turf/open/floor/asteroid,
/area/prison/residential/central)
"bdw" = (
-/obj/structure/machinery/power/apc{
- dir = 8;
- pixel_x = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/west,
/turf/open/floor/prison/blue/west,
/area/prison/security/checkpoint/vip)
"bdx" = (
@@ -16569,11 +16399,7 @@
/turf/open/floor/prison/blue/northeast,
/area/prison/storage/vip)
"bjY" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/prison/bright_clean2/southwest,
/area/prison/storage/vip)
"bjZ" = (
@@ -17395,10 +17221,7 @@
/turf/open/floor/prison/blue,
/area/prison/cellblock/vip)
"bnn" = (
-/obj/structure/machinery/power/apc{
- pixel_y = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/south,
/turf/open/floor/prison/blue,
/area/prison/cellblock/vip)
"bno" = (
@@ -17508,11 +17331,7 @@
/turf/open/floor/prison/bright_clean2/southwest,
/area/prison/toilet/canteen)
"bnP" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/obj/structure/pipes/standard/manifold/hidden/supply{
dir = 1
},
@@ -17535,11 +17354,7 @@
/turf/open/floor/prison/bright_clean2/southwest,
/area/prison/toilet/canteen)
"bnT" = (
-/obj/structure/machinery/power/apc{
- dir = 8;
- pixel_x = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/west,
/turf/open/floor/prison/floor_plate/southwest,
/area/prison/hallway/entrance)
"bnU" = (
@@ -18425,11 +18240,7 @@
/turf/open/floor/prison/bright_clean2/southwest,
/area/prison/visitation)
"brB" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/prison/bright_clean2/southwest,
/area/prison/visitation)
"brD" = (
@@ -18679,11 +18490,7 @@
/turf/open/floor/prison/cell_stripe/east,
/area/prison/cellblock/lowsec/se)
"bsM" = (
-/obj/structure/machinery/power/apc{
- dir = 8;
- pixel_x = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/west,
/turf/open/floor/prison/green/west,
/area/prison/cellblock/lowsec/sw)
"bsN" = (
@@ -18901,7 +18708,7 @@
/area/prison/security/monitoring/highsec)
"btD" = (
/obj/structure/surface/table/reinforced,
-/obj/item/device/matter_decompiler,
+/obj/item/prop/matter_decompiler,
/turf/open/floor/prison/redfull,
/area/prison/hallway/central/west)
"btE" = (
@@ -19459,10 +19266,7 @@
/turf/open/floor/prison/redfull,
/area/prison/hallway/entrance)
"bvS" = (
-/obj/structure/machinery/power/apc{
- pixel_y = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/south,
/turf/open/floor/prison,
/area/prison/hanger/main)
"bvT" = (
@@ -19520,11 +19324,7 @@
/turf/open/floor/prison/floor_plate/southwest,
/area/prison/cellblock/lowsec/sw)
"bwn" = (
-/obj/structure/machinery/power/apc{
- dir = 4;
- pixel_x = 28;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/east,
/turf/open/floor/prison/bright_clean/southwest,
/area/prison/yard)
"bwo" = (
@@ -19562,11 +19362,7 @@
/turf/open/floor/prison/sterile_white/southwest,
/area/prison/holding/holding1)
"bwv" = (
-/obj/structure/machinery/power/apc{
- dir = 4;
- pixel_x = 28;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/east,
/obj/structure/pipes/standard/simple/hidden/supply,
/obj/structure/disposalpipe/segment,
/turf/open/floor/prison/bright_clean2/southwest,
@@ -19832,11 +19628,7 @@
/turf/open/floor/prison/green/southeast,
/area/prison/cellblock/lowsec/se)
"bxR" = (
-/obj/structure/machinery/power/apc{
- dir = 8;
- pixel_x = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/west,
/turf/open/floor/prison/bright_clean2/southwest,
/area/prison/hallway/central/east)
"bxT" = (
@@ -19863,11 +19655,7 @@
/turf/open/floor/prison/bright_clean/southwest,
/area/prison/holding/holding1)
"bxX" = (
-/obj/structure/machinery/power/apc{
- dir = 8;
- pixel_x = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/west,
/obj/structure/pipes/standard/manifold/hidden/supply{
dir = 8
},
@@ -20020,11 +19808,7 @@
/turf/open/floor/prison/darkred2/north,
/area/prison/security/checkpoint/hangar)
"byJ" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/prison/darkred2/northeast,
/area/prison/security/checkpoint/hangar)
"byK" = (
@@ -20055,11 +19839,7 @@
/turf/open/floor/prison/darkredfull2/southwest,
/area/prison/monorail/east)
"byQ" = (
-/obj/structure/machinery/power/apc{
- dir = 8;
- pixel_x = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/west,
/turf/open/floor/prison/greenfull/northwest,
/area/prison/monorail/west)
"byR" = (
@@ -20185,6 +19965,7 @@
"bzw" = (
/obj/structure/pipes/standard/simple/hidden/supply,
/obj/structure/disposalpipe/segment,
+/obj/structure/machinery/power/apc/no_power/west,
/turf/open/floor/prison/rampbottom/north,
/area/prison/holding/holding1)
"bzx" = (
@@ -20347,11 +20128,7 @@
/obj/structure/disposalpipe/segment{
dir = 4
},
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/prison/green/north,
/area/prison/security/monitoring/lowsec/sw)
"bAq" = (
@@ -20569,19 +20346,11 @@
/turf/closed/wall/prison,
/area/prison/security/monitoring/lowsec/sw)
"bBk" = (
-/obj/structure/machinery/power/apc{
- dir = 4;
- pixel_x = 28;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/east,
/turf/open/floor/prison/darkredfull2/southwest,
/area/prison/monorail/east)
"bBl" = (
-/obj/structure/machinery/power/apc{
- dir = 8;
- pixel_x = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/west,
/turf/open/floor/plating,
/area/prison/maintenance/residential/sw)
"bBn" = (
@@ -21163,10 +20932,7 @@
/turf/open/floor/prison/green,
/area/prison/cellblock/lowsec/se)
"bDA" = (
-/obj/structure/machinery/power/apc{
- pixel_y = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/south,
/turf/open/floor/prison/green,
/area/prison/cellblock/lowsec/se)
"bDB" = (
@@ -21514,11 +21280,7 @@
/turf/open/floor/prison,
/area/prison/quarters/security)
"bEF" = (
-/obj/structure/machinery/power/apc{
- dir = 8;
- pixel_x = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/west,
/turf/open/floor/plating,
/area/prison/maintenance/hangar_barracks)
"bEG" = (
@@ -21645,11 +21407,7 @@
/turf/open/floor/prison/red/north,
/area/prison/cellblock/highsec/south/north)
"bFg" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/obj/effect/decal/cleanable/blood,
/turf/open/floor/prison/red/north,
/area/prison/cellblock/highsec/south/north)
@@ -22154,11 +21912,7 @@
/turf/open/floor/prison/bright_clean/southwest,
/area/prison/hallway/east)
"bHa" = (
-/obj/structure/machinery/power/apc{
- dir = 8;
- pixel_x = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/west,
/turf/open/floor/prison,
/area/prison/quarters/security)
"bHb" = (
@@ -22204,11 +21958,7 @@
/turf/open/floor/prison/red/north,
/area/prison/cellblock/highsec/south/north)
"bHl" = (
-/obj/structure/machinery/power/apc{
- dir = 8;
- pixel_x = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/west,
/turf/open/floor/prison,
/area/prison/maintenance/hangar_barracks)
"bHn" = (
@@ -22324,11 +22074,7 @@
/turf/closed/wall/prison,
/area/prison/holding/holding2)
"bHK" = (
-/obj/structure/machinery/power/apc{
- dir = 4;
- pixel_x = 28;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/east,
/obj/structure/pipes/standard/simple/hidden/supply,
/obj/structure/disposalpipe/segment,
/turf/open/floor/prison/bright_clean/southwest,
@@ -22506,11 +22252,7 @@
/turf/open/floor/plating/plating_catwalk/prison,
/area/prison/telecomms)
"bIz" = (
-/obj/structure/machinery/power/apc{
- dir = 8;
- pixel_x = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/west,
/turf/open/floor/prison/darkbrown2/west,
/area/prison/hallway/east)
"bIB" = (
@@ -22724,11 +22466,7 @@
/turf/open/floor/prison/darkyellow2/north,
/area/prison/storage/highsec/s)
"bJv" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/prison/darkyellow2/north,
/area/prison/storage/highsec/s)
"bJw" = (
@@ -23390,11 +23128,7 @@
/turf/open/organic/grass,
/area/prison/residential/central)
"bLZ" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/prison/bright_clean2/southwest,
/area/prison/residential/south)
"bMa" = (
@@ -23503,11 +23237,7 @@
/turf/open/floor/prison,
/area/prison/telecomms)
"bMB" = (
-/obj/structure/machinery/power/apc{
- dir = 4;
- pixel_x = 28;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/east,
/turf/open/floor/prison,
/area/prison/telecomms)
"bMC" = (
@@ -24146,11 +23876,7 @@
/turf/open/floor/prison/darkyellow2/east,
/area/prison/storage/medsec)
"bPD" = (
-/obj/structure/machinery/power/apc{
- dir = 8;
- pixel_x = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/west,
/turf/open/floor/prison/darkyellow2/west,
/area/prison/storage/medsec)
"bPF" = (
@@ -24172,11 +23898,7 @@
/turf/open/floor/wood,
/area/prison/library)
"bPJ" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/obj/structure/pipes/standard/simple/hidden/supply{
dir = 4
},
@@ -24311,11 +24033,7 @@
/turf/open/floor/prison,
/area/prison/security)
"bQn" = (
-/obj/structure/machinery/power/apc{
- dir = 8;
- pixel_x = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/west,
/turf/open/floor/prison/bright_clean2/southwest,
/area/prison/toilet/security)
"bQo" = (
@@ -24480,11 +24198,7 @@
/turf/open/floor/prison/floor_plate/southwest,
/area/prison/recreation/highsec/s)
"bQR" = (
-/obj/structure/machinery/power/apc{
- dir = 4;
- pixel_x = 28;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/east,
/turf/open/floor/prison/bright_clean/southwest,
/area/prison/laundry)
"bQS" = (
@@ -25609,11 +25323,7 @@
/turf/open/floor/plating,
/area/prison/maintenance/residential/access/south)
"bVd" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/plating,
/area/prison/maintenance/residential/access/south)
"bVe" = (
@@ -25704,11 +25414,7 @@
/turf/open/floor/plating,
/area/prison/security/checkpoint/medsec)
"bVv" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/prison/yellowfull,
/area/prison/security/checkpoint/medsec)
"bVw" = (
@@ -25936,11 +25642,7 @@
/turf/open/floor/prison/darkbrown2/east,
/area/prison/hallway/east)
"bWj" = (
-/obj/structure/machinery/power/apc{
- dir = 8;
- pixel_x = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/west,
/turf/open/floor/prison/darkred2/southwest,
/area/prison/intake)
"bWl" = (
@@ -26178,11 +25880,7 @@
/turf/open/floor/plating,
/area/prison/engineering)
"bXh" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/plating,
/area/prison/engineering)
"bXj" = (
@@ -26198,10 +25896,7 @@
/turf/open/floor/prison/darkyellow2/west,
/area/prison/engineering/atmos)
"bXm" = (
-/obj/structure/machinery/power/apc{
- pixel_y = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/south,
/turf/open/floor/plating,
/area/prison/engineering/atmos)
"bXn" = (
@@ -26681,11 +26376,7 @@
/turf/open/floor/prison/darkyellow2/northwest,
/area/prison/hallway/engineering)
"bZl" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/prison/darkyellow2/north,
/area/prison/hallway/engineering)
"bZm" = (
@@ -27337,11 +27028,7 @@
/turf/open/floor/prison/floor_plate,
/area/prison/recreation/medsec)
"cbU" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/prison,
/area/prison/recreation/medsec)
"cbV" = (
@@ -27585,11 +27272,7 @@
/turf/open/floor/prison,
/area/prison/security/head)
"ccP" = (
-/obj/structure/machinery/power/apc{
- dir = 4;
- pixel_x = 28;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/east,
/turf/open/floor/prison,
/area/prison/security/head)
"ccS" = (
@@ -27616,11 +27299,7 @@
/turf/open/floor/plating/plating_catwalk/prison,
/area/prison/cellblock/mediumsec/north)
"ccY" = (
-/obj/structure/machinery/power/apc{
- dir = 8;
- pixel_x = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/west,
/turf/open/floor/prison/yellow/west,
/area/prison/cellblock/mediumsec/north)
"cde" = (
@@ -27818,10 +27497,7 @@
/turf/open/floor/prison/darkred2/southeast,
/area/prison/security)
"cdY" = (
-/obj/structure/machinery/power/apc{
- pixel_y = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/south,
/turf/open/floor/prison/darkred2/southwest,
/area/prison/security)
"cea" = (
@@ -28248,11 +27924,7 @@
/turf/open/floor/prison,
/area/prison/execution)
"cfK" = (
-/obj/structure/machinery/power/apc{
- dir = 8;
- pixel_x = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/west,
/turf/open/floor/prison/darkred2/north,
/area/prison/security/briefing)
"cfM" = (
@@ -28425,11 +28097,7 @@
/turf/open/floor/prison/bluefull,
/area/prison/cellblock/protective)
"cgw" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/prison/blue/northwest,
/area/prison/cellblock/protective)
"cgx" = (
@@ -28484,11 +28152,7 @@
/turf/closed/wall/r_wall/prison,
/area/prison/disposal)
"cgJ" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/wood,
/area/prison/parole/protective_custody)
"cgK" = (
@@ -28534,11 +28198,7 @@
/turf/closed/wall/r_wall/prison,
/area/prison/security/armory/riot)
"cgU" = (
-/obj/structure/machinery/power/apc{
- dir = 4;
- pixel_x = 28;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/east,
/turf/open/floor/plating,
/area/prison/disposal)
"cgV" = (
@@ -28850,11 +28510,7 @@
/turf/open/floor/prison,
/area/prison/execution)
"chY" = (
-/obj/structure/machinery/power/apc{
- dir = 4;
- pixel_x = 28;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/east,
/turf/open/floor/prison,
/area/prison/execution)
"chZ" = (
@@ -28882,11 +28538,7 @@
/turf/open/floor/prison/darkred2/north,
/area/prison/security/armory/lethal)
"cig" = (
-/obj/structure/machinery/power/apc{
- dir = 4;
- pixel_x = 28;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/east,
/obj/structure/pipes/standard/simple/hidden/supply,
/turf/open/floor/prison/darkred2/east,
/area/prison/security/armory/riot)
@@ -28896,11 +28548,7 @@
/turf/open/floor/prison/darkredfull2/southwest,
/area/prison/security)
"cii" = (
-/obj/structure/machinery/power/apc{
- dir = 8;
- pixel_x = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/west,
/obj/structure/pipes/standard/simple/hidden/supply,
/turf/open/floor/prison/darkred2/west,
/area/prison/security/armory/lethal)
@@ -28985,11 +28633,7 @@
/turf/open/floor/wood,
/area/prison/security/head)
"cix" = (
-/obj/structure/machinery/power/apc{
- dir = 8;
- pixel_x = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/west,
/turf/open/floor/prison/red/west,
/area/prison/cellblock/highsec/south/south)
"ciz" = (
@@ -29514,11 +29158,7 @@
/obj/structure/machinery/computer/cameras{
network = list("PRISON")
},
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/prison/darkredfull2/southwest,
/area/prison/security/checkpoint/highsec_medsec)
"ckD" = (
@@ -29713,11 +29353,7 @@
/turf/open/floor/prison/yellow/east,
/area/prison/cellblock/mediumsec/north)
"clr" = (
-/obj/structure/machinery/power/apc{
- dir = 8;
- pixel_x = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/west,
/turf/open/floor/prison/darkred2/northwest,
/area/prison/security/monitoring/protective)
"cls" = (
@@ -30158,10 +29794,7 @@
/turf/open/floor/prison/darkred2,
/area/prison/security/checkpoint/highsec_medsec)
"cnn" = (
-/obj/structure/machinery/power/apc{
- pixel_y = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/south,
/turf/open/floor/prison/darkred2,
/area/prison/security/checkpoint/highsec_medsec)
"cnp" = (
@@ -31159,10 +30792,7 @@
/turf/open/floor/prison/yellow,
/area/prison/cellblock/mediumsec/west)
"crv" = (
-/obj/structure/machinery/power/apc{
- pixel_y = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/south,
/turf/open/floor/prison/yellow,
/area/prison/cellblock/mediumsec/west)
"crw" = (
@@ -31942,11 +31572,7 @@
/turf/open/floor/prison/darkred2/west,
/area/prison/security/monitoring/medsec/central)
"cuF" = (
-/obj/structure/machinery/power/apc{
- dir = 4;
- pixel_x = 28;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/east,
/turf/open/floor/prison/darkred2/east,
/area/prison/security/monitoring/medsec/central)
"cuI" = (
@@ -32729,11 +32355,7 @@
/turf/open/floor/prison/floor_plate,
/area/prison/cellblock/mediumsec/south)
"cyc" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/prison/yellow/north,
/area/prison/cellblock/mediumsec/south)
"cyd" = (
@@ -33086,11 +32708,7 @@
/obj/structure/bed/chair/comfy{
dir = 4
},
-/obj/structure/machinery/power/apc{
- dir = 8;
- pixel_x = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/west,
/turf/open/floor/prison/darkred2/southwest,
/area/prison/security/monitoring/medsec/south)
"czK" = (
@@ -33259,11 +32877,7 @@
/turf/open/floor/prison/sterile_white/southwest,
/area/prison/research/RD)
"cYR" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/prison/green/northeast,
/area/prison/security/monitoring/lowsec/ne)
"cZY" = (
@@ -34286,6 +33900,10 @@
},
/turf/open/floor/prison/greenfull/northwest,
/area/prison/monorail/west)
+"hmA" = (
+/obj/structure/machinery/power/apc/no_power/north,
+/turf/open/floor/plating,
+/area/prison/cellblock/mediumsec/east)
"hmQ" = (
/obj/structure/surface/table/reinforced,
/obj/structure/machinery/microwave,
@@ -34312,11 +33930,7 @@
/area/prison/quarters/research)
"hoY" = (
/obj/structure/largecrate/random,
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/plating,
/area/prison/security/monitoring/highsec)
"hpd" = (
@@ -35093,11 +34707,7 @@
/obj/structure/machinery/light{
dir = 1
},
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/prison/bright_clean2/southwest,
/area/prison/residential/north)
"kdm" = (
@@ -35334,11 +34944,7 @@
/area/prison/quarters/research)
"lfT" = (
/obj/structure/bed/chair/comfy,
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/prison/red/north,
/area/prison/recreation/highsec/s)
"liM" = (
@@ -35819,11 +35425,7 @@
/obj/effect/decal/siding/wood_siding{
icon_state = "wood_siding2"
},
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/prison/sterile_white/southwest,
/area/prison/residential/central)
"ndW" = (
@@ -35931,11 +35533,7 @@
/turf/open/organic/grass,
/area/prison/residential/south)
"nIx" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/plating,
/area/prison/maintenance/residential/se)
"nIV" = (
@@ -36961,11 +36559,7 @@
/turf/open/floor/prison/floor_plate,
/area/prison/cellblock/mediumsec/south)
"saD" = (
-/obj/structure/machinery/power/apc{
- dir = 8;
- pixel_x = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/west,
/turf/open/floor/delivery,
/area/prison/telecomms)
"sdq" = (
@@ -37411,13 +37005,6 @@
/obj/structure/pipes/standard/manifold/fourway/hidden/supply,
/turf/open/floor/prison/red/east,
/area/prison/cellblock/highsec/north/north)
-"tXB" = (
-/obj/structure/machinery/power/apc{
- pixel_y = -24;
- start_charge = 0
- },
-/turf/open/floor/plating,
-/area/prison/cellblock/mediumsec/east)
"uaB" = (
/obj/item/ammo_magazine/shotgun/buckshot,
/turf/open/floor/prison/bright_clean2/southwest,
@@ -37573,11 +37160,7 @@
/turf/open/floor/prison/green/west,
/area/prison/monorail/west)
"uKd" = (
-/obj/structure/machinery/power/apc{
- dir = 4;
- pixel_x = 28;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/east,
/turf/open/floor/prison/bright_clean2/southwest,
/area/prison/canteen)
"uKU" = (
@@ -69649,8 +69232,8 @@ cpU
coM
cqd
cpU
+hmA
cpY
-tXB
chi
cip
cju
diff --git a/maps/map_files/FOP_v3_Sciannex/Fiorina_SciAnnex.dmm b/maps/map_files/FOP_v3_Sciannex/Fiorina_SciAnnex.dmm
index 954a9fdbe40a..6878a0c1ed20 100644
--- a/maps/map_files/FOP_v3_Sciannex/Fiorina_SciAnnex.dmm
+++ b/maps/map_files/FOP_v3_Sciannex/Fiorina_SciAnnex.dmm
@@ -14,13 +14,11 @@
/turf/closed/wall/r_wall/prison_unmeltable,
/area/fiorina/tumor/servers)
"aaq" = (
-/obj/structure/machinery/power/apc{
- dir = 1
- },
+/obj/structure/machinery/power/apc/power/north,
/turf/open/organic/grass/astroturf,
/area/fiorina/tumor/fiberbush)
"aar" = (
-/obj/structure/machinery/power/apc,
+/obj/structure/machinery/power/apc/power/south,
/turf/open/floor/almayer,
/area/fiorina/tumor/ship)
"aas" = (
@@ -28,9 +26,7 @@
dir = 1;
pixel_y = 21
},
-/obj/structure/machinery/power/apc{
- dir = 8
- },
+/obj/structure/machinery/power/apc/power/west,
/turf/open/floor/wood,
/area/fiorina/station/security/wardens)
"aaR" = (
@@ -536,9 +532,7 @@
/turf/open/floor/plating/prison,
/area/fiorina/station/central_ring)
"ast" = (
-/obj/structure/machinery/power/apc{
- dir = 4
- },
+/obj/structure/machinery/power/apc/power/east,
/turf/open/floor/plating/prison,
/area/fiorina/station/telecomm/lz2_maint)
"asz" = (
@@ -697,9 +691,7 @@
/turf/open/floor/prison/whitegreen/southwest,
/area/fiorina/station/medbay)
"ayG" = (
-/obj/structure/machinery/power/apc{
- dir = 1
- },
+/obj/structure/machinery/power/apc/power/north,
/turf/open/floor/prison/yellow/northwest,
/area/fiorina/station/disco)
"ayH" = (
@@ -853,7 +845,7 @@
/turf/open/floor/prison/floor_plate,
/area/fiorina/station/telecomm/lz1_cargo)
"aFp" = (
-/obj/structure/machinery/defenses/tesla_coil{
+/obj/structure/machinery/defenses/tesla_coil/premade/smart{
faction_group = list("CLF")
},
/turf/open/floor/plating/plating_catwalk,
@@ -6600,9 +6592,7 @@
/turf/closed/wall/r_wall/prison_unmeltable,
/area/fiorina/station/security/wardens)
"eZi" = (
-/obj/structure/machinery/power/apc{
- dir = 8
- },
+/obj/structure/machinery/power/apc/power/west,
/turf/open/floor/prison,
/area/fiorina/station/telecomm/lz1_tram)
"eZr" = (
@@ -7367,7 +7357,7 @@
/turf/open/floor/prison/bluefull,
/area/fiorina/station/power_ring)
"fEY" = (
-/obj/structure/machinery/power/apc,
+/obj/structure/machinery/power/apc/power/south,
/turf/open/floor/delivery,
/area/fiorina/station/power_ring)
"fFv" = (
@@ -7589,9 +7579,7 @@
/turf/open/floor/prison/blue/north,
/area/fiorina/station/power_ring)
"fPl" = (
-/obj/structure/machinery/power/apc{
- dir = 1
- },
+/obj/structure/machinery/power/apc/power/north,
/turf/open/floor/prison/yellow/north,
/area/fiorina/station/lowsec)
"fPB" = (
@@ -7912,9 +7900,7 @@
/turf/open/floor/prison/floor_plate,
/area/fiorina/station/security)
"gaQ" = (
-/obj/structure/machinery/power/apc{
- dir = 4
- },
+/obj/structure/machinery/power/apc/power/east,
/turf/open/floor/prison,
/area/fiorina/station/security)
"gbf" = (
@@ -10170,9 +10156,7 @@
/turf/open/floor/prison/floor_plate,
/area/fiorina/station/medbay)
"hIX" = (
-/obj/structure/machinery/power/apc{
- dir = 1
- },
+/obj/structure/machinery/power/apc/power/north,
/turf/open/floor/prison/green/north,
/area/fiorina/station/chapel)
"hJo" = (
@@ -10274,7 +10258,7 @@
/turf/open/floor/plating/prison,
/area/fiorina/station/park)
"hPq" = (
-/obj/structure/machinery/power/apc,
+/obj/structure/machinery/power/apc/power/south,
/turf/open/floor/prison/blue_plate/east,
/area/fiorina/station/botany)
"hPu" = (
@@ -11889,7 +11873,7 @@
/turf/closed/wall/r_wall/prison_unmeltable,
/area/fiorina/station/central_ring)
"iYJ" = (
-/obj/structure/machinery/power/apc,
+/obj/structure/machinery/power/apc/power/south,
/turf/open/floor/prison/greenfull/east,
/area/fiorina/tumor/civres)
"iYQ" = (
@@ -13974,7 +13958,7 @@
/turf/open/floor/prison/whitepurple/west,
/area/fiorina/station/research_cells)
"kGo" = (
-/obj/structure/machinery/power/apc,
+/obj/structure/machinery/power/apc/power/south,
/turf/open/floor/prison/whitepurple,
/area/fiorina/station/research_cells)
"kGB" = (
@@ -15758,7 +15742,7 @@
/obj/structure/machinery/shower{
pixel_y = 13
},
-/obj/item/tool/soap/nanotrasen,
+/obj/item/tool/soap/weyland_yutani,
/turf/open/floor/prison/kitchen/southwest,
/area/fiorina/tumor/civres)
"lWy" = (
@@ -17516,9 +17500,7 @@
"nqL" = (
/obj/structure/surface/rack,
/obj/item/reagent_container/spray/cleaner,
-/obj/structure/machinery/power/apc{
- dir = 4
- },
+/obj/structure/machinery/power/apc/power/east,
/turf/open/floor/plating/prison,
/area/fiorina/maintenance)
"nqN" = (
@@ -18501,9 +18483,7 @@
/turf/open/floor/plating/prison,
/area/fiorina/maintenance)
"obE" = (
-/obj/structure/machinery/power/apc{
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/south,
/turf/open/floor/prison,
/area/fiorina/station/flight_deck)
"obI" = (
@@ -18623,9 +18603,7 @@
/turf/open/floor/plating/prison,
/area/fiorina/station/power_ring)
"ofQ" = (
-/obj/structure/machinery/power/apc{
- dir = 1
- },
+/obj/structure/machinery/power/apc/power/north,
/turf/open/floor/plating/plating_catwalk/prison,
/area/fiorina/station/central_ring)
"oga" = (
@@ -18948,7 +18926,7 @@
/turf/open/floor/prison/bluecorner,
/area/fiorina/station/power_ring)
"ooF" = (
-/obj/structure/machinery/power/apc,
+/obj/structure/machinery/power/apc/power/south,
/turf/open/floor/wood,
/area/fiorina/station/park)
"ooO" = (
@@ -24213,7 +24191,7 @@
/turf/open/floor/prison/whitegreencorner/east,
/area/fiorina/station/medbay)
"sBO" = (
-/obj/structure/machinery/power/apc,
+/obj/structure/machinery/power/apc/power/south,
/turf/open/floor/prison/whitegreenfull/southwest,
/area/fiorina/station/medbay)
"sBW" = (
@@ -27161,9 +27139,7 @@
/turf/open/floor/prison/darkyellowfull2/east,
/area/fiorina/lz/near_lzI)
"uNG" = (
-/obj/structure/machinery/power/apc{
- dir = 1
- },
+/obj/structure/machinery/power/apc/power/north,
/turf/open/floor/prison,
/area/fiorina/lz/near_lzII)
"uNI" = (
@@ -29565,9 +29541,7 @@
/turf/open/floor/prison/floor_plate,
/area/fiorina/station/lowsec)
"wFM" = (
-/obj/structure/machinery/power/apc{
- dir = 8
- },
+/obj/structure/machinery/power/apc/power/west,
/turf/open/floor/prison/floor_plate/southwest,
/area/fiorina/station/telecomm/lz1_cargo)
"wFS" = (
@@ -30096,9 +30070,7 @@
/turf/open/floor/prison/bluefull,
/area/fiorina/station/power_ring)
"xbr" = (
-/obj/structure/machinery/power/apc{
- dir = 4
- },
+/obj/structure/machinery/power/apc/power/east,
/turf/open/floor/prison/green/north,
/area/fiorina/station/transit_hub)
"xbE" = (
@@ -30210,7 +30182,7 @@
/turf/open/floor/corsat/squares,
/area/fiorina/station/medbay)
"xgx" = (
-/obj/structure/machinery/defenses/tesla_coil{
+/obj/structure/machinery/defenses/tesla_coil/premade{
faction_group = list("USCM")
},
/turf/open/organic/grass/astroturf,
@@ -30385,9 +30357,7 @@
/turf/open/organic/grass/astroturf,
/area/fiorina/station/central_ring)
"xpw" = (
-/obj/structure/machinery/power/apc{
- dir = 8
- },
+/obj/structure/machinery/power/apc/power/west,
/turf/open/floor/prison,
/area/fiorina/lz/near_lzI)
"xpx" = (
@@ -31159,9 +31129,7 @@
/turf/open/floor/plating/prison,
/area/fiorina/lz/near_lzII)
"xYo" = (
-/obj/structure/machinery/power/apc{
- dir = 8
- },
+/obj/structure/machinery/power/apc/power/west,
/turf/open/floor/prison/darkbrownfull2,
/area/fiorina/tumor/aux_engi)
"xYJ" = (
diff --git a/maps/map_files/FOP_v3_Sciannex/sprinkles/10.scavshipholder.dmm b/maps/map_files/FOP_v3_Sciannex/sprinkles/10.scavshipholder.dmm
index 410ef56b0c1e..391adb456400 100644
--- a/maps/map_files/FOP_v3_Sciannex/sprinkles/10.scavshipholder.dmm
+++ b/maps/map_files/FOP_v3_Sciannex/sprinkles/10.scavshipholder.dmm
@@ -190,7 +190,7 @@
/turf/closed/shuttle/ert,
/area/template_noop)
"nV" = (
-/obj/structure/machinery/power/apc,
+/obj/structure/machinery/power/apc/power/south,
/turf/open/floor/almayer,
/area/template_noop)
"od" = (
diff --git a/maps/map_files/FOP_v3_Sciannex/sprinkles/15.nogear.dmm b/maps/map_files/FOP_v3_Sciannex/sprinkles/15.nogear.dmm
index 62e24f138207..e569ea379326 100644
--- a/maps/map_files/FOP_v3_Sciannex/sprinkles/15.nogear.dmm
+++ b/maps/map_files/FOP_v3_Sciannex/sprinkles/15.nogear.dmm
@@ -65,9 +65,7 @@
/turf/open/floor/prison/redfull,
/area/template_noop)
"s" = (
-/obj/structure/machinery/power/apc{
- dir = 4
- },
+/obj/structure/machinery/power/apc/power/east,
/turf/open/floor/prison,
/area/template_noop)
"t" = (
diff --git a/maps/map_files/FOP_v3_Sciannex/sprinkles/15.wardenofficedecorated.dmm b/maps/map_files/FOP_v3_Sciannex/sprinkles/15.wardenofficedecorated.dmm
index bd9ec72717b3..6743dfbef7ec 100644
--- a/maps/map_files/FOP_v3_Sciannex/sprinkles/15.wardenofficedecorated.dmm
+++ b/maps/map_files/FOP_v3_Sciannex/sprinkles/15.wardenofficedecorated.dmm
@@ -93,9 +93,7 @@
dir = 1;
pixel_y = 21
},
-/obj/structure/machinery/power/apc{
- dir = 8
- },
+/obj/structure/machinery/power/apc/power/west,
/turf/open/floor/wood,
/area/template_noop)
"T" = (
diff --git a/maps/map_files/FOP_v3_Sciannex/sprinkles/20.poolparty.dmm b/maps/map_files/FOP_v3_Sciannex/sprinkles/20.poolparty.dmm
index f30a796cdd74..ce8071106172 100644
--- a/maps/map_files/FOP_v3_Sciannex/sprinkles/20.poolparty.dmm
+++ b/maps/map_files/FOP_v3_Sciannex/sprinkles/20.poolparty.dmm
@@ -52,7 +52,7 @@
/turf/open/floor/prison/darkbrown2,
/area/template_noop)
"cU" = (
-/obj/structure/machinery/power/apc,
+/obj/structure/machinery/power/apc/power/south,
/turf/open/floor/wood,
/area/template_noop)
"dB" = (
diff --git a/maps/map_files/FOP_v3_Sciannex/sprinkles/30.engineeroffice.dmm b/maps/map_files/FOP_v3_Sciannex/sprinkles/30.engineeroffice.dmm
index 55e933cf4d27..1f23f9fb037d 100644
--- a/maps/map_files/FOP_v3_Sciannex/sprinkles/30.engineeroffice.dmm
+++ b/maps/map_files/FOP_v3_Sciannex/sprinkles/30.engineeroffice.dmm
@@ -15,7 +15,7 @@
/turf/open/floor/prison/greenfull/east,
/area/template_noop)
"n" = (
-/obj/structure/machinery/power/apc,
+/obj/structure/machinery/power/apc/power/south,
/turf/open/floor/prison/greenfull/east,
/area/template_noop)
"o" = (
diff --git a/maps/map_files/FOP_v3_Sciannex/sprinkles/30.pizzatime.dmm b/maps/map_files/FOP_v3_Sciannex/sprinkles/30.pizzatime.dmm
index 8b840ec4ec8c..f9816fe31821 100644
--- a/maps/map_files/FOP_v3_Sciannex/sprinkles/30.pizzatime.dmm
+++ b/maps/map_files/FOP_v3_Sciannex/sprinkles/30.pizzatime.dmm
@@ -249,7 +249,7 @@
/area/template_noop)
"K" = (
/obj/structure/closet/secure_closet/freezer/fridge/full,
-/obj/item/weapon/pizza_cutter,
+/obj/item/tool/kitchen/pizzacutter,
/turf/open/floor/prison/kitchen,
/area/template_noop)
"L" = (
diff --git a/maps/map_files/FOP_v3_Sciannex/standalone/riot_in_progress.dmm b/maps/map_files/FOP_v3_Sciannex/standalone/riot_in_progress.dmm
index 4cdabb8199c1..98b92955e2dd 100644
--- a/maps/map_files/FOP_v3_Sciannex/standalone/riot_in_progress.dmm
+++ b/maps/map_files/FOP_v3_Sciannex/standalone/riot_in_progress.dmm
@@ -516,9 +516,7 @@
/turf/open/floor/prison/redfull,
/area/fiorina/station/security)
"ty" = (
-/obj/structure/machinery/power/apc{
- dir = 1
- },
+/obj/structure/machinery/power/apc/power/north,
/turf/open/floor/prison,
/area/fiorina/lz/near_lzII)
"tS" = (
@@ -1071,9 +1069,7 @@
/turf/open/floor/plating/prison,
/area/fiorina/station/security)
"Tn" = (
-/obj/structure/machinery/power/apc{
- dir = 4
- },
+/obj/structure/machinery/power/apc/power/east,
/turf/open/floor/prison,
/area/fiorina/station/security)
"Tp" = (
diff --git a/maps/map_files/Ice_Colony_v2/Ice_Colony_v2.dmm b/maps/map_files/Ice_Colony_v2/Ice_Colony_v2.dmm
index af8650e3bdb2..49a72916fecf 100644
--- a/maps/map_files/Ice_Colony_v2/Ice_Colony_v2.dmm
+++ b/maps/map_files/Ice_Colony_v2/Ice_Colony_v2.dmm
@@ -692,11 +692,7 @@
/area/ice_colony/surface/requesitions)
"acV" = (
/obj/item/lightstick/planted,
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/plating/icefloor,
/area/ice_colony/surface/requesitions)
"acW" = (
@@ -837,11 +833,7 @@
"ady" = (
/obj/structure/surface/table,
/obj/item/storage/box/lightstick,
-/obj/structure/machinery/power/apc{
- dir = 4;
- pixel_x = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/east,
/turf/open/floor/darkyellow2/east,
/area/ice_colony/surface/engineering/electric)
"adz" = (
@@ -1078,11 +1070,7 @@
/obj/structure/surface/table,
/obj/effect/spawner/random/toolbox,
/obj/effect/spawner/random/tool,
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot,
/turf/open/floor/darkyellow2/north,
/area/ice_colony/surface/engineering/tool)
@@ -1550,11 +1538,7 @@
/turf/open/floor/dark2,
/area/ice_colony/surface/engineering)
"afV" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/obj/structure/pipes/standard/simple/hidden/green{
dir = 4
},
@@ -1803,11 +1787,7 @@
/area/ice_colony/underground/hallway/north_west)
"agM" = (
/obj/structure/surface/table,
-/obj/structure/machinery/power/apc{
- dir = 4;
- pixel_x = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/east,
/turf/open/floor/darkyellow2/east,
/area/ice_colony/surface/engineering/generator)
"agN" = (
@@ -2734,11 +2714,7 @@
/turf/open/auto_turf/snow/layer0,
/area/ice_colony/exterior/surface/clearing/north)
"akb" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/darkyellow2/north,
/area/ice_colony/surface/substation/smes)
"akc" = (
@@ -3002,11 +2978,7 @@
/turf/open/floor/freezerfloor,
/area/ice_colony/surface/dorms/restroom_w)
"akY" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/freezerfloor,
/area/ice_colony/surface/dorms/restroom_w)
"akZ" = (
@@ -3031,11 +3003,7 @@
/turf/open/floor/freezerfloor,
/area/ice_colony/surface/dorms/restroom_e)
"ald" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/freezerfloor,
/area/ice_colony/surface/dorms/restroom_e)
"ale" = (
@@ -3135,11 +3103,7 @@
/turf/open/floor/darkyellow2/north,
/area/ice_colony/surface/substation)
"aly" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/darkyellow2/north,
/area/ice_colony/surface/substation)
"alz" = (
@@ -3207,11 +3171,7 @@
"alN" = (
/obj/structure/surface/table,
/obj/item/storage/bag/plants,
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot,
/turf/open/floor/darkgreen2/northeast,
/area/ice_colony/surface/hydroponics/north)
@@ -3281,11 +3241,7 @@
/turf/open/floor/plating,
/area/ice_colony/surface/mining)
"ama" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/plating,
/area/ice_colony/surface/mining)
"amb" = (
@@ -4332,11 +4288,7 @@
/turf/open/floor/whitered/north,
/area/ice_colony/surface/clinic/treatment)
"apG" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/obj/item/storage/toolbox/emergency,
/obj/structure/surface/table,
/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot,
@@ -4421,11 +4373,7 @@
/turf/open/floor/freezerfloor,
/area/ice_colony/surface/dorms/restroom_w)
"apW" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/obj/structure/surface/table,
/obj/structure/machinery/alarm{
dir = 4;
@@ -5543,11 +5491,7 @@
pixel_x = 5;
pixel_y = 3
},
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/whitered/north,
/area/ice_colony/surface/clinic/storage)
"atG" = (
@@ -5689,10 +5633,7 @@
/turf/open/floor/whitered,
/area/ice_colony/surface/clinic/lobby)
"aug" = (
-/obj/structure/machinery/power/apc{
- pixel_y = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/south,
/turf/open/floor/whitered,
/area/ice_colony/surface/clinic/lobby)
"auh" = (
@@ -6430,11 +6371,7 @@
/obj/structure/bed/chair{
dir = 4
},
-/obj/structure/machinery/power/apc{
- dir = 8;
- pixel_x = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/west,
/turf/open/floor/darkgreen2/west,
/area/ice_colony/surface/hydroponics/lobby)
"awD" = (
@@ -6739,11 +6676,7 @@
/turf/open/floor/darkbrown2/north,
/area/ice_colony/surface/dorms/lavatory)
"axJ" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/obj/structure/closet/crate/trashcart,
/turf/open/floor/darkbrown2/north,
/area/ice_colony/surface/dorms/lavatory)
@@ -6771,11 +6704,7 @@
/turf/open/floor/darkgreen2/northwest,
/area/ice_colony/surface/dorms/canteen)
"axP" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/darkgreen2/north,
/area/ice_colony/surface/dorms/canteen)
"axQ" = (
@@ -7342,11 +7271,7 @@
/turf/open/floor/darkbrown2/north,
/area/ice_colony/surface/garage/one)
"azW" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/darkbrown2/north,
/area/ice_colony/surface/garage/one)
"azX" = (
@@ -7397,11 +7322,7 @@
/turf/open/floor/darkbrown2/north,
/area/ice_colony/surface/garage/two)
"aAg" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/darkbrown2/north,
/area/ice_colony/surface/garage/two)
"aAh" = (
@@ -7437,10 +7358,7 @@
/turf/open/auto_turf/snow/layer0,
/area/ice_colony/exterior/surface/valley/south/excavation)
"aAn" = (
-/obj/structure/machinery/power/apc{
- pixel_y = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/south,
/turf/open/floor/darkbrown2,
/area/ice_colony/surface/disposals)
"aAo" = (
@@ -7697,11 +7615,7 @@
},
/obj/structure/surface/table,
/obj/effect/spawner/random/tool,
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/darkyellow2/north,
/area/ice_colony/surface/garage/repair)
"aBk" = (
@@ -7788,11 +7702,7 @@
/area/ice_colony/surface/command/checkpoint)
"aBA" = (
/obj/structure/closet/secure_closet/security,
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/darkred2/north,
/area/ice_colony/surface/command/checkpoint)
"aBB" = (
@@ -8197,11 +8107,7 @@
/turf/open/floor/dark2,
/area/ice_colony/surface/command/control/office)
"aDd" = (
-/obj/structure/machinery/power/apc{
- dir = 4;
- pixel_x = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/east,
/turf/open/floor/darkblue2/east,
/area/ice_colony/surface/command/control/office)
"aDe" = (
@@ -8328,11 +8234,7 @@
/area/ice_colony/surface/hydroponics/south)
"aDx" = (
/obj/structure/closet/crate/hydroponics,
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/darkgreen2/northeast,
/area/ice_colony/surface/hydroponics/south)
"aDy" = (
@@ -9194,10 +9096,7 @@
/obj/structure/disposalpipe/segment{
dir = 4
},
-/obj/structure/machinery/power/apc{
- pixel_y = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/south,
/turf/open/floor/darkblue2,
/area/ice_colony/surface/command/control)
"aGq" = (
@@ -9246,11 +9145,7 @@
/area/ice_colony/exterior/surface/clearing/pass)
"aGF" = (
/obj/structure/largecrate/random,
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/vault2/west,
/area/ice_colony/surface/storage_unit/power)
"aGH" = (
@@ -9439,11 +9334,7 @@
/obj/structure/disposalpipe/segment{
dir = 4
},
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/wood,
/area/ice_colony/surface/command/crisis)
"aHo" = (
@@ -9758,10 +9649,7 @@
/turf/open/floor/wood,
/area/ice_colony/surface/command/control/pv1)
"aIz" = (
-/obj/structure/machinery/power/apc{
- pixel_y = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/south,
/obj/structure/bed/chair/comfy/orange{
dir = 1
},
@@ -9782,10 +9670,7 @@
/obj/structure/bed/chair/comfy/orange{
dir = 1
},
-/obj/structure/machinery/power/apc{
- pixel_y = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/south,
/turf/open/floor/wood,
/area/ice_colony/surface/command/control/pv2)
"aID" = (
@@ -9962,11 +9847,7 @@
/area/ice_colony/surface/hangar/checkpoint)
"aJm" = (
/obj/effect/landmark/crap_item,
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/vault2/west,
/area/ice_colony/surface/storage_unit/telecomms)
"aJp" = (
@@ -10217,11 +10098,7 @@
/area/ice_colony/surface/hangar/checkpoint)
"aKL" = (
/obj/structure/closet/secure_closet/security,
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/darkred2/north,
/area/ice_colony/surface/hangar/checkpoint)
"aKN" = (
@@ -10853,10 +10730,7 @@
/turf/open/floor/plating,
/area/ice_colony/surface/research)
"aNn" = (
-/obj/structure/machinery/power/apc{
- pixel_y = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/south,
/turf/open/floor/vault2/west,
/area/ice_colony/surface/storage_unit/research)
"aNp" = (
@@ -11233,11 +11107,7 @@
/turf/open/floor/dark2,
/area/ice_colony/surface/hangar/beta)
"aOQ" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/obj/structure/machinery/firealarm{
dir = 4;
pixel_x = 24
@@ -11253,11 +11123,7 @@
/turf/open/floor/dark2,
/area/ice_colony/surface/hangar/hallway)
"aOT" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/obj/structure/machinery/firealarm{
dir = 8;
pixel_x = -24
@@ -11403,10 +11269,7 @@
/area/ice_colony/surface/bar/canteen)
"aPs" = (
/obj/structure/machinery/processor,
-/obj/structure/machinery/power/apc{
- pixel_y = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/south,
/turf/open/floor/freezerfloor,
/area/ice_colony/surface/bar/canteen)
"aPt" = (
@@ -11465,10 +11328,7 @@
/turf/open/floor/wood,
/area/ice_colony/surface/bar/bar)
"aPz" = (
-/obj/structure/machinery/power/apc{
- pixel_y = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/south,
/turf/open/floor/wood,
/area/ice_colony/surface/bar/bar)
"aPA" = (
@@ -11596,11 +11456,7 @@
/turf/open/floor/darkbrown2/east,
/area/ice_colony/surface/hangar/beta)
"aQb" = (
-/obj/structure/machinery/power/apc{
- dir = 8;
- pixel_x = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/west,
/obj/structure/disposalpipe/segment{
dir = 4;
icon_state = "pipe-c"
@@ -12206,11 +12062,7 @@
/turf/closed/wall,
/area/ice_colony/surface/research/temporary)
"aSC" = (
-/obj/structure/machinery/power/apc{
- dir = 8;
- pixel_x = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/west,
/turf/open/floor/dark2,
/area/ice_colony/surface/research)
"aSD" = (
@@ -12435,11 +12287,7 @@
/turf/open/floor/darkbrown2/west,
/area/ice_colony/surface/hangar/alpha)
"aTH" = (
-/obj/structure/machinery/power/apc{
- dir = 8;
- pixel_x = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/west,
/turf/open/floor/darkyellow2/west,
/area/ice_colony/surface/research/temporary)
"aTI" = (
@@ -13230,10 +13078,7 @@
/turf/open/floor/darkyellow2,
/area/ice_colony/surface/research/tech_storage)
"aWX" = (
-/obj/structure/machinery/power/apc{
- pixel_y = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/south,
/turf/open/floor/darkyellow2,
/area/ice_colony/surface/research/tech_storage)
"aWY" = (
@@ -14254,11 +14099,7 @@
/turf/open/ice,
/area/ice_colony/exterior/surface/valley/south/excavation)
"bbR" = (
-/obj/structure/machinery/power/apc{
- dir = 8;
- pixel_x = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/west,
/turf/open/floor/delivery,
/area/ice_colony/surface/tcomms)
"bbW" = (
@@ -14602,11 +14443,7 @@
/turf/open/floor/freezerfloor,
/area/ice_colony/underground/requesition/storage)
"bdH" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/freezerfloor,
/area/ice_colony/underground/requesition/storage)
"bdI" = (
@@ -14646,11 +14483,7 @@
/turf/open/floor/darkbrown2/north,
/area/ice_colony/underground/requesition)
"bdQ" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/darkbrown2/north,
/area/ice_colony/underground/requesition)
"bdR" = (
@@ -14673,11 +14506,7 @@
/area/ice_colony/underground/hangar)
"bdX" = (
/obj/structure/reagent_dispensers/fueltank,
-/obj/structure/machinery/power/apc{
- dir = 4;
- pixel_x = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/east,
/turf/open/floor/plating/icefloor,
/area/ice_colony/surface/excavation/storage)
"bdY" = (
@@ -15062,10 +14891,7 @@
/turf/open/floor/darkblue2,
/area/ice_colony/surface/excavation)
"bfA" = (
-/obj/structure/machinery/power/apc{
- pixel_y = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/south,
/turf/open/floor/darkpurple2,
/area/ice_colony/surface/excavation)
"bfB" = (
@@ -15296,11 +15122,7 @@
/turf/open/floor/darkbrown2/east,
/area/ice_colony/underground/requesition)
"bgG" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/plating,
/area/ice_colony/underground/maintenance/north)
"bgH" = (
@@ -15502,11 +15324,7 @@
/turf/open/floor/plating,
/area/ice_colony/underground/requesition/lobby)
"bhA" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/obj/effect/decal/warning_stripes{
icon_state = "W"
},
@@ -15535,11 +15353,7 @@
/turf/open/floor/plating,
/area/ice_colony/underground/maintenance/north)
"bhE" = (
-/obj/structure/machinery/power/apc{
- dir = 8;
- pixel_x = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/west,
/turf/open/floor/plating/icefloor/warnplate/west,
/area/ice_colony/underground/hangar)
"bhF" = (
@@ -16134,10 +15948,7 @@
/turf/open/floor/darkbrown2,
/area/ice_colony/underground/requesition/sec_storage)
"bkx" = (
-/obj/structure/machinery/power/apc{
- pixel_y = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/south,
/turf/open/floor/darkbrown2,
/area/ice_colony/underground/requesition/sec_storage)
"bky" = (
@@ -16613,11 +16424,7 @@
/turf/open/floor/carpet,
/area/ice_colony/underground/crew/chapel)
"bmy" = (
-/obj/structure/machinery/power/apc{
- dir = 4;
- pixel_x = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/east,
/turf/open/floor/carpet,
/area/ice_colony/underground/crew/chapel)
"bmz" = (
@@ -16625,11 +16432,7 @@
/turf/open/floor/dark2,
/area/ice_colony/underground/crew/morgue)
"bmD" = (
-/obj/structure/machinery/power/apc{
- dir = 4;
- pixel_x = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/east,
/turf/open/floor/dark2,
/area/ice_colony/underground/crew/morgue)
"bmE" = (
@@ -16647,11 +16450,7 @@
/turf/open/floor/wood,
/area/ice_colony/underground/crew/library)
"bmK" = (
-/obj/structure/machinery/power/apc{
- dir = 4;
- pixel_x = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/east,
/turf/open/floor/wood,
/area/ice_colony/underground/crew/library)
"bmL" = (
@@ -16875,11 +16674,7 @@
/turf/open/floor/dark2,
/area/ice_colony/underground/engineering/locker)
"bnF" = (
-/obj/structure/machinery/power/apc{
- dir = 4;
- pixel_x = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/east,
/turf/open/floor/darkyellow2/east,
/area/ice_colony/underground/engineering/locker)
"bnG" = (
@@ -17210,11 +17005,7 @@
},
/area/ice_colony/exterior/underground/caves)
"boV" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/darkgreen2/north,
/area/ice_colony/underground/hallway/north_west)
"boW" = (
@@ -17764,11 +17555,7 @@
/turf/open/floor/plating,
/area/ice_colony/underground/engineering)
"brp" = (
-/obj/structure/machinery/power/apc{
- dir = 8;
- pixel_x = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/west,
/turf/open/floor/darkyellow2/west,
/area/ice_colony/underground/engineering)
"brq" = (
@@ -18117,11 +17904,7 @@
/turf/open/floor/darkred2/north,
/area/ice_colony/underground/reception/checkpoint_north)
"bsE" = (
-/obj/structure/machinery/power/apc{
- dir = 8;
- pixel_x = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/west,
/turf/open/floor/darkgreen2/west,
/area/ice_colony/underground/crew/bball)
"bsH" = (
@@ -18287,11 +18070,7 @@
/turf/open/floor/white,
/area/ice_colony/underground/medical/or)
"btl" = (
-/obj/structure/machinery/power/apc{
- dir = 4;
- pixel_x = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/east,
/turf/open/floor/whitered/east,
/area/ice_colony/underground/medical/or)
"btm" = (
@@ -18314,11 +18093,7 @@
/turf/open/floor/dark2,
/area/ice_colony/underground/reception/checkpoint_north)
"btr" = (
-/obj/structure/machinery/power/apc{
- dir = 4;
- pixel_x = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/east,
/turf/open/floor/darkred2/east,
/area/ice_colony/underground/reception/checkpoint_north)
"bts" = (
@@ -19297,10 +19072,7 @@
/turf/closed/wall/r_wall,
/area/ice_colony/exterior/underground/caves/open)
"bwz" = (
-/obj/structure/machinery/power/apc{
- pixel_y = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/south,
/turf/open/floor/bcircuit,
/area/ice_colony/underground/engineering/substation)
"bwE" = (
@@ -19315,11 +19087,7 @@
/turf/open/floor/plating,
/area/ice_colony/underground/maintenance/research)
"bwG" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/plating,
/area/ice_colony/underground/maintenance/research)
"bwH" = (
@@ -19441,10 +19209,7 @@
/turf/open/floor/darkgreen2,
/area/ice_colony/underground/medical/lobby)
"bxj" = (
-/obj/structure/machinery/power/apc{
- pixel_y = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/south,
/turf/open/floor/darkgreen2,
/area/ice_colony/underground/medical/lobby)
"bxk" = (
@@ -19549,11 +19314,7 @@
/turf/open/floor/plating,
/area/ice_colony/underground/maintenance/engineering)
"bxG" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/obj/structure/pipes/standard/simple/hidden/green{
dir = 4
},
@@ -19596,10 +19357,7 @@
/turf/open/floor/whitered,
/area/ice_colony/underground/medical/treatment)
"bxO" = (
-/obj/structure/machinery/power/apc{
- pixel_y = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/south,
/turf/open/floor/whitered,
/area/ice_colony/underground/medical/treatment)
"bxP" = (
@@ -19754,10 +19512,7 @@
/turf/open/floor/whitered,
/area/ice_colony/underground/medical/hallway)
"byy" = (
-/obj/structure/machinery/power/apc{
- pixel_y = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/south,
/turf/open/floor/whitered,
/area/ice_colony/underground/medical/hallway)
"byA" = (
@@ -19775,11 +19530,7 @@
/turf/open/floor/plating,
/area/ice_colony/underground/maintenance/central)
"byD" = (
-/obj/structure/machinery/power/apc{
- dir = 8;
- pixel_x = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/west,
/turf/open/floor/plating,
/area/ice_colony/underground/maintenance/central)
"byE" = (
@@ -20143,10 +19894,7 @@
/turf/open/floor/whitered,
/area/ice_colony/underground/medical/storage)
"bAa" = (
-/obj/structure/machinery/power/apc{
- pixel_y = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/south,
/obj/structure/surface/rack,
/turf/open/floor/whitered,
/area/ice_colony/underground/medical/storage)
@@ -20234,11 +19982,7 @@
/area/ice_colony/underground/security/detective)
"bAs" = (
/obj/structure/bed/chair/comfy/black,
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/wood,
/area/ice_colony/underground/security/detective)
"bAt" = (
@@ -20269,11 +20013,7 @@
/turf/open/floor/wood,
/area/ice_colony/underground/security/marshal)
"bAy" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/wood,
/area/ice_colony/underground/security/marshal)
"bAz" = (
@@ -20637,19 +20377,11 @@
/turf/open/floor/darkpurple2/north,
/area/ice_colony/underground/research)
"bBH" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/darkpurple2/north,
/area/ice_colony/underground/research)
"bBK" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/darkpurple2/northwest,
/area/ice_colony/underground/research/storage)
"bBL" = (
@@ -20834,11 +20566,7 @@
/turf/open/floor/plating,
/area/ice_colony/underground/maintenance/central)
"bCz" = (
-/obj/structure/machinery/power/apc{
- dir = 4;
- pixel_x = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/east,
/turf/open/floor/darkblue2/east,
/area/ice_colony/underground/command/center)
"bCA" = (
@@ -20921,11 +20649,7 @@
/turf/open/floor/darkblue2/north,
/area/ice_colony/underground/storage/highsec)
"bCW" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/darkblue2/north,
/area/ice_colony/underground/storage/highsec)
"bCX" = (
@@ -21159,10 +20883,7 @@
/turf/open/floor/darkgreen2,
/area/ice_colony/underground/crew/canteen)
"bDR" = (
-/obj/structure/machinery/power/apc{
- pixel_y = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/south,
/turf/open/floor/darkgreen2,
/area/ice_colony/underground/crew/canteen)
"bDS" = (
@@ -21269,11 +20990,7 @@
/turf/open/floor/darkpurple2/north,
/area/ice_colony/underground/research/sample)
"bEl" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/darkpurple2/northeast,
/area/ice_colony/underground/research/sample)
"bEm" = (
@@ -21568,11 +21285,7 @@
/area/ice_colony/underground/command/pv1)
"bFl" = (
/obj/structure/bed/chair/comfy/orange,
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/wood,
/area/ice_colony/underground/command/pv1)
"bFm" = (
@@ -21594,11 +21307,7 @@
/area/ice_colony/underground/command/pv2)
"bFp" = (
/obj/structure/bed/chair/comfy/orange,
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/wood,
/area/ice_colony/underground/command/pv2)
"bFq" = (
@@ -21625,11 +21334,7 @@
/turf/open/floor/wood,
/area/ice_colony/underground/crew/dorm_l)
"bFv" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/wood,
/area/ice_colony/underground/crew/dorm_l)
"bFw" = (
@@ -21646,11 +21351,7 @@
/turf/open/floor/wood,
/area/ice_colony/underground/crew/dorm_r)
"bFz" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/wood,
/area/ice_colony/underground/crew/dorm_r)
"bFB" = (
@@ -21805,11 +21506,7 @@
/turf/open/floor/darkred2/northwest,
/area/ice_colony/underground/security/interrogation)
"bGr" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/darkred2/north,
/area/ice_colony/underground/security/interrogation)
"bGs" = (
@@ -21967,11 +21664,7 @@
/turf/open/floor/darkpurple2/northwest,
/area/ice_colony/underground/research/work)
"bGZ" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/obj/structure/filingcabinet,
/obj/item/paper/research_notes,
/turf/open/floor/darkpurple2/north,
@@ -22051,11 +21744,7 @@
/turf/open/floor/dark2,
/area/ice_colony/underground/storage)
"bHo" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/darkyellow2/north,
/area/ice_colony/underground/storage)
"bHp" = (
@@ -22087,11 +21776,7 @@
/turf/open/floor/darkred2/northwest,
/area/ice_colony/underground/command/checkpoint)
"bHu" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/obj/structure/closet/secure_closet/security,
/turf/open/floor/darkred2/northeast,
/area/ice_colony/underground/command/checkpoint)
@@ -22914,11 +22599,7 @@
/obj/structure/bed/chair{
dir = 1
},
-/obj/structure/machinery/power/apc{
- dir = 4;
- pixel_x = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/east,
/turf/open/floor/darkred2/northeast,
/area/ice_colony/underground/security/backroom)
"bKx" = (
@@ -22968,11 +22649,7 @@
/turf/open/floor/dark2,
/area/ice_colony/underground/security/hallway)
"bKD" = (
-/obj/structure/machinery/power/apc{
- dir = 4;
- pixel_x = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/east,
/turf/open/floor/darkred2/east,
/area/ice_colony/underground/security/hallway)
"bKE" = (
@@ -23255,11 +22932,7 @@
/turf/open/floor/darkgreen2/north,
/area/ice_colony/underground/hallway/south_east)
"bLL" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/darkgreen2/north,
/area/ice_colony/underground/hallway/south_east)
"bLO" = (
@@ -23600,11 +23273,7 @@
/turf/open/floor/darkred2/north,
/area/ice_colony/underground/security)
"bMS" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/darkred2/north,
/area/ice_colony/underground/security)
"bMT" = (
@@ -23842,11 +23511,7 @@
/turf/open/floor/dark2,
/area/ice_colony/underground/crew/disposals)
"bNY" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/darkbrown2/north,
/area/ice_colony/underground/crew/disposals)
"bNZ" = (
@@ -23911,11 +23576,7 @@
/turf/closed/wall/r_wall,
/area/ice_colony/underground/maintenance/south)
"bOl" = (
-/obj/structure/machinery/power/apc{
- dir = 8;
- pixel_x = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/west,
/turf/open/floor/wood,
/area/ice_colony/underground/crew/leisure)
"bOn" = (
@@ -23932,11 +23593,7 @@
/area/ice_colony/underground/crew/leisure)
"bOq" = (
/obj/structure/pipes/standard/simple/hidden/green,
-/obj/structure/machinery/power/apc{
- dir = 4;
- pixel_x = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/east,
/turf/open/floor/plating,
/area/ice_colony/underground/maintenance/security)
"bOs" = (
@@ -24240,11 +23897,7 @@
/turf/open/floor/dark2,
/area/ice_colony/underground/security/armory)
"bPu" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/darkred2/north,
/area/ice_colony/underground/security/armory)
"bPv" = (
@@ -24272,11 +23925,7 @@
/turf/open/floor/dark2,
/area/ice_colony/underground/security/brig)
"bPC" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/darkred2/north,
/area/ice_colony/underground/security/brig)
"bPD" = (
@@ -24707,10 +24356,7 @@
/turf/open/floor/darkbrown2,
/area/ice_colony/underground/crew/lavatory)
"bRe" = (
-/obj/structure/machinery/power/apc{
- pixel_y = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/south,
/turf/open/floor/darkbrown2,
/area/ice_colony/underground/crew/lavatory)
"bRf" = (
@@ -25267,11 +24913,7 @@
/obj/structure/pipes/standard/simple/hidden/green{
dir = 4
},
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/plating,
/area/ice_colony/underground/maintenance/east)
"bSQ" = (
@@ -25383,11 +25025,7 @@
/turf/open/floor/wood,
/area/ice_colony/underground/reception)
"bTj" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/wood,
/area/ice_colony/underground/reception)
"bTk" = (
@@ -25650,11 +25288,7 @@
/turf/open/floor/white,
/area/ice_colony/underground/reception/toilet_men)
"bUo" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/white,
/area/ice_colony/underground/reception/toilet_men)
"bUq" = (
@@ -25723,11 +25357,7 @@
/turf/open/floor/plating,
/area/ice_colony/underground/reception/toilet_men)
"bUC" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/plating,
/area/ice_colony/underground/maintenance/south)
"bUH" = (
@@ -26007,10 +25637,7 @@
/area/ice_colony/underground/reception/checkpoint_south)
"bVD" = (
/obj/structure/filingcabinet/security,
-/obj/structure/machinery/power/apc{
- pixel_y = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/south,
/turf/open/floor/darkred2/southeast,
/area/ice_colony/underground/reception/checkpoint_south)
"bVE" = (
@@ -26055,10 +25682,7 @@
/turf/open/floor/white,
/area/ice_colony/underground/reception/toilet_women)
"bVL" = (
-/obj/structure/machinery/power/apc{
- pixel_y = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/south,
/turf/open/floor/white,
/area/ice_colony/underground/reception/toilet_women)
"bVM" = (
@@ -26920,11 +26544,7 @@
/turf/open/floor/darkyellow2,
/area/ice_colony/surface/tcomms)
"gxg" = (
-/obj/structure/machinery/power/apc{
- dir = 8;
- pixel_x = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/west,
/turf/open/floor/darkbrown2/west,
/area/ice_colony/surface/hangar/alpha)
"gDb" = (
diff --git a/maps/map_files/Ice_Colony_v3/Shivas_Snowball.dmm b/maps/map_files/Ice_Colony_v3/Shivas_Snowball.dmm
index c359e4ae0a0e..51f7589f4987 100644
--- a/maps/map_files/Ice_Colony_v3/Shivas_Snowball.dmm
+++ b/maps/map_files/Ice_Colony_v3/Shivas_Snowball.dmm
@@ -668,10 +668,7 @@
/turf/open/auto_turf/ice/layer0,
/area/shiva/interior/caves/right_spiders)
"acx" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/shiva/floor3,
/area/shiva/interior/colony/medseceng)
"acA" = (
@@ -4131,8 +4128,7 @@
req_access_txt = "100";
specialfunctions = 4
},
-/obj/structure/machinery/power/apc{
- dir = 4;
+/obj/structure/machinery/power/apc/power/east{
start_charge = 50
},
/turf/open/floor/shiva/floor3,
@@ -6162,8 +6158,7 @@
/turf/open/floor/plating,
/area/shiva/interior/colony/medseceng)
"bFP" = (
-/obj/structure/machinery/power/apc{
- dir = 4;
+/obj/structure/machinery/power/apc/power/east{
start_charge = 10
},
/turf/open/floor/shiva/north,
@@ -6544,7 +6539,7 @@
/turf/open/floor/shiva/floor3,
/area/shiva/interior/lz2_habs)
"ccu" = (
-/obj/structure/machinery/power/apc,
+/obj/structure/machinery/power/apc/power/south,
/turf/open/floor/plating,
/area/shiva/exterior/telecomm/lz1_north)
"ccI" = (
@@ -7848,10 +7843,7 @@
/turf/open/floor/shiva/multi_tiles/east,
/area/shiva/interior/colony/research_hab)
"dVw" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/plating,
/area/shiva/interior/caves/research_caves)
"dWp" = (
@@ -7999,10 +7991,7 @@
/turf/open/floor/shiva/snow_mat/north,
/area/shiva/exterior/cp_lz2)
"edW" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/plating,
/area/shiva/exterior/cp_colony_grounds)
"eep" = (
@@ -9685,10 +9674,7 @@
/turf/open/auto_turf/snow/layer3,
/area/shiva/exterior/cp_lz2)
"grd" = (
-/obj/structure/machinery/power/apc{
- dir = 4;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/east,
/turf/open/floor/shiva/north,
/area/shiva/interior/caves/s_lz2)
"grk" = (
@@ -12038,10 +12024,7 @@
/turf/open/floor/shiva/north,
/area/shiva/interior/garage)
"iZX" = (
-/obj/structure/machinery/power/apc{
- dir = 4;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/east,
/turf/open/floor/shiva,
/area/shiva/interior/bar)
"jac" = (
@@ -12709,11 +12692,11 @@
/turf/open/auto_turf/snow/layer0,
/area/shiva/interior/warehouse/caves)
"jWL" = (
-/obj/structure/machinery/space_heater,
/obj/structure/machinery/light/double{
dir = 1;
pixel_y = 9
},
+/obj/structure/machinery/power/smes/buildable,
/turf/open/floor/shiva/yellowfull/west,
/area/shiva/interior/aux_power)
"jXD" = (
@@ -13847,10 +13830,7 @@
/turf/open/auto_turf/snow/layer2,
/area/shiva/exterior/junkyard)
"liD" = (
-/obj/structure/machinery/power/apc{
- dir = 8;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/west,
/turf/open/floor/shiva/floor3,
/area/shiva/interior/lz2_habs)
"ljz" = (
@@ -13893,8 +13873,7 @@
/turf/open/floor/prison/kitchen,
/area/shiva/interior/colony/central)
"lnk" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
+/obj/structure/machinery/power/apc/power/north{
name = "telecomms relay power controller";
start_charge = 10
},
@@ -14005,10 +13984,8 @@
/turf/open/auto_turf/snow/layer0,
/area/shiva/interior/bar)
"lro" = (
-/obj/structure/machinery/power/apc{
- dir = 8;
- name = "telecomms relay power controller";
- start_charge = 0
+/obj/structure/machinery/power/apc/no_power/west{
+ name = "telecomms relay power controller"
},
/turf/open/floor/shiva/floor3,
/area/shiva/interior/aerodrome)
@@ -14267,10 +14244,7 @@
/turf/open/auto_turf/snow/layer0,
/area/shiva/interior/caves/cp_camp)
"lKJ" = (
-/obj/structure/machinery/power/apc{
- dir = 8;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/west,
/turf/open/floor/shiva/bluefull,
/area/shiva/interior/colony/central)
"lKQ" = (
@@ -14400,10 +14374,7 @@
/turf/open/floor/shiva/north,
/area/shiva/exterior/lz2_fortress)
"lTN" = (
-/obj/structure/machinery/power/apc{
- dir = 4;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/east,
/turf/open/floor/darkbrown2/east,
/area/shiva/interior/valley_huts/disposals)
"lUF" = (
@@ -14746,10 +14717,7 @@
/area/shiva/interior/bar)
"mpt" = (
/obj/effect/decal/cleanable/dirt,
-/obj/structure/machinery/power/apc{
- dir = 1;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/asphalt/cement,
/area/shiva/interior/warehouse)
"mpI" = (
@@ -15534,6 +15502,10 @@
},
/turf/open/auto_turf/ice/layer1,
/area/shiva/interior/caves/research_caves)
+"niD" = (
+/obj/structure/machinery/space_heater,
+/turf/open/floor/shiva/floor3,
+/area/shiva/interior/aux_power)
"niL" = (
/obj/structure/platform/strata{
dir = 8
@@ -15575,9 +15547,7 @@
/turf/open/floor/shiva/purplefull/east,
/area/shiva/interior/colony/research_hab)
"nmt" = (
-/obj/structure/machinery/power/apc{
- dir = 4
- },
+/obj/structure/machinery/power/apc/power/east,
/turf/open/floor/plating,
/area/shiva/exterior/telecomm/lz2_southeast)
"nmT" = (
@@ -16005,10 +15975,7 @@
/turf/open/floor/shiva/redfull/west,
/area/shiva/interior/colony/research_hab)
"nNX" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/shiva/north,
/area/shiva/interior/warehouse/caves)
"nOd" = (
@@ -16552,7 +16519,7 @@
/turf/open/auto_turf/snow/layer1,
/area/shiva/exterior/junkyard/fortbiceps)
"owY" = (
-/obj/structure/machinery/power/apc,
+/obj/structure/machinery/power/apc/power/south,
/turf/open/floor/plating,
/area/shiva/exterior/telecomm/lz2_northeast)
"oxP" = (
@@ -16560,10 +16527,7 @@
/turf/open/auto_turf/snow/layer3,
/area/shiva/exterior/junkyard)
"oyc" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/shiva/bluefull,
/area/shiva/interior/colony/n_admin)
"oyw" = (
@@ -17111,10 +17075,7 @@
/turf/open/auto_turf/ice/layer0,
/area/shiva/interior/caves/s_lz2)
"prb" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/shiva/yellow/north,
/area/shiva/interior/garage)
"prO" = (
@@ -17660,10 +17621,7 @@
/turf/open/floor/prison/kitchen,
/area/shiva/interior/colony/central)
"pOM" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/delivery,
/area/shiva/interior/telecomm/lz1_biceps)
"pPt" = (
@@ -18300,10 +18258,7 @@
/turf/open/auto_turf/snow/layer2,
/area/shiva/interior/colony/medseceng)
"qEt" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/plating,
/area/shiva/exterior/junkyard)
"qEB" = (
@@ -18594,10 +18549,7 @@
/turf/open/auto_turf/ice/layer1,
/area/shiva/interior/caves/research_caves)
"raQ" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/plating,
/area/shiva/exterior/junkyard/cp_bar)
"rbc" = (
@@ -19202,6 +19154,9 @@
dir = 1;
pixel_y = 9
},
+/obj/structure/machinery/power/smes/buildable{
+ pixel_x = 1
+ },
/turf/open/floor/shiva/yellowfull/west,
/area/shiva/interior/aux_power)
"rUW" = (
@@ -19322,10 +19277,7 @@
/turf/open/floor/shiva/wred/northwest,
/area/shiva/interior/colony/medseceng)
"san" = (
-/obj/structure/machinery/power/apc{
- dir = 8;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/west,
/turf/open/floor/shiva/bluefull,
/area/shiva/interior/colony/s_admin)
"sax" = (
@@ -20310,10 +20262,7 @@
/turf/open/floor/shiva/floor3,
/area/shiva/interior/colony/botany)
"tnU" = (
-/obj/structure/machinery/power/apc{
- dir = 8;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/west,
/turf/open/floor/plating,
/area/shiva/exterior/cp_lz2)
"too" = (
@@ -20828,10 +20777,7 @@
/obj/structure/bed/chair{
dir = 4
},
-/obj/structure/machinery/power/apc{
- dir = 8;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/west,
/turf/open/floor/shiva/floor3,
/area/shiva/interior/colony/botany)
"tRq" = (
@@ -21101,10 +21047,7 @@
/turf/open/auto_turf/snow/layer3,
/area/shiva/exterior/junkyard/fortbiceps)
"ufb" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/shiva/floor3,
/area/shiva/interior/colony/research_hab)
"ufd" = (
@@ -22404,9 +22347,7 @@
/area/shiva/interior/aerodrome)
"vIi" = (
/obj/effect/landmark/crap_item,
-/obj/structure/machinery/power/apc{
- dir = 4
- },
+/obj/structure/machinery/power/apc/power/east,
/turf/open/floor/shiva/floor3,
/area/shiva/interior/valley_huts/no2)
"vIy" = (
@@ -22591,10 +22532,7 @@
/turf/open/auto_turf/snow/layer2,
/area/shiva/exterior/cp_colony_grounds)
"vXw" = (
-/obj/structure/machinery/power/apc{
- dir = 4;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/east,
/turf/open/floor/plating,
/area/shiva/interior/caves/cp_camp)
"vYm" = (
@@ -23717,6 +23655,10 @@
/obj/item/tool/warning_cone,
/turf/open/floor/shiva,
/area/shiva/interior/colony/research_hab)
+"xEU" = (
+/obj/structure/machinery/power/smes/buildable,
+/turf/open/floor/shiva/yellowfull/west,
+/area/shiva/interior/garage)
"xFp" = (
/obj/structure/bed/chair/comfy/orange{
dir = 4
@@ -23799,10 +23741,7 @@
/turf/open/floor/shiva/north,
/area/shiva/interior/bar)
"xMH" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/shiva/floor3,
/area/shiva/interior/colony/deck)
"xMQ" = (
@@ -33996,7 +33935,7 @@ puZ
puZ
anc
anc
-ctz
+niD
cJu
cJu
nTC
@@ -50751,11 +50690,11 @@ ktd
ktd
ktd
ktd
-ktd
+xEU
tXd
ado
pSD
-ktd
+xEU
ktd
ktd
ktd
diff --git a/maps/map_files/Ice_Colony_v3/lz2-variations/southeast-gate/cleared.dmm b/maps/map_files/Ice_Colony_v3/lz2-variations/southeast-gate/cleared.dmm
index e3fe7e69221b..1c1d89a883c3 100644
--- a/maps/map_files/Ice_Colony_v3/lz2-variations/southeast-gate/cleared.dmm
+++ b/maps/map_files/Ice_Colony_v3/lz2-variations/southeast-gate/cleared.dmm
@@ -40,9 +40,7 @@
/turf/open/floor/plating/plating_catwalk/shiva,
/area/shiva/exterior/lz2_fortress)
"q" = (
-/obj/structure/machinery/power/apc{
- dir = 8
- },
+/obj/structure/machinery/power/apc/power/west,
/turf/open/floor/plating,
/area/shiva/exterior/cp_lz2)
"r" = (
@@ -116,9 +114,7 @@
/turf/open/floor/plating/plating_catwalk/shiva,
/area/shiva/exterior/lz2_fortress)
"Y" = (
-/obj/structure/machinery/power/apc{
- dir = 4
- },
+/obj/structure/machinery/power/apc/power/east,
/turf/open/floor/shiva/north,
/area/shiva/exterior/lz2_fortress)
"Z" = (
diff --git a/maps/map_files/Ice_Colony_v3/lz2-variations/southeast-gate/closed.dmm b/maps/map_files/Ice_Colony_v3/lz2-variations/southeast-gate/closed.dmm
index c4ff89c41af2..2cf87d93972d 100644
--- a/maps/map_files/Ice_Colony_v3/lz2-variations/southeast-gate/closed.dmm
+++ b/maps/map_files/Ice_Colony_v3/lz2-variations/southeast-gate/closed.dmm
@@ -23,9 +23,7 @@
/turf/open/floor/shiva/radiator_tile,
/area/shiva/exterior/lz2_fortress)
"m" = (
-/obj/structure/machinery/power/apc{
- dir = 8
- },
+/obj/structure/machinery/power/apc/power/west,
/turf/open/floor/plating,
/area/shiva/exterior/cp_lz2)
"o" = (
@@ -54,9 +52,7 @@
/turf/open/floor/shiva/floor3,
/area/shiva/exterior/lz2_fortress)
"v" = (
-/obj/structure/machinery/power/apc{
- dir = 4
- },
+/obj/structure/machinery/power/apc/power/east,
/turf/open/floor/shiva/north,
/area/shiva/exterior/lz2_fortress)
"w" = (
diff --git a/maps/map_files/Ice_Colony_v3/standalone/panic_room_hold.dmm b/maps/map_files/Ice_Colony_v3/standalone/panic_room_hold.dmm
index 30848fc8f513..da4415b5bcea 100644
--- a/maps/map_files/Ice_Colony_v3/standalone/panic_room_hold.dmm
+++ b/maps/map_files/Ice_Colony_v3/standalone/panic_room_hold.dmm
@@ -294,10 +294,7 @@
/turf/open/floor/shiva/north,
/area/shiva/interior/colony/s_admin)
"mC" = (
-/obj/structure/machinery/power/apc{
- dir = 8;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/west,
/turf/open/floor/shiva/bluefull,
/area/shiva/interior/colony/s_admin)
"mI" = (
@@ -612,10 +609,7 @@
/turf/open/floor/shiva/multi_tiles/west,
/area/shiva/interior/colony/s_admin)
"wY" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/auto_turf/snow/layer2,
/area/shiva/exterior/junkyard/cp_bar)
"xa" = (
diff --git a/maps/map_files/Kutjevo/Kutjevo.dmm b/maps/map_files/Kutjevo/Kutjevo.dmm
index ab9ccc4c399e..9f3e2719353a 100644
--- a/maps/map_files/Kutjevo/Kutjevo.dmm
+++ b/maps/map_files/Kutjevo/Kutjevo.dmm
@@ -925,10 +925,7 @@
/turf/open/floor/plating/kutjevo/panelscorched,
/area/kutjevo/interior/complex/botany/east_tech)
"buo" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 25
- },
+/obj/structure/machinery/power/apc/power/north,
/turf/open/floor/kutjevo/colors/orange/inner_corner,
/area/kutjevo/interior/foremans_office)
"bux" = (
@@ -1221,11 +1218,7 @@
/turf/open/floor/kutjevo/colors/orange,
/area/kutjevo/interior/foremans_office)
"bQk" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/kutjevo/colors/orange/edge/north,
/area/kutjevo/interior/complex/Northwest_Security_Checkpoint)
"bQy" = (
@@ -1294,6 +1287,11 @@
/obj/effect/landmark/corpsespawner/security/marshal,
/turf/open/gm/river/desert/deep/toxic,
/area/kutjevo/interior/power)
+"bVI" = (
+/obj/structure/surface/table/gamblingtable,
+/obj/item/storage/box/stompers,
+/turf/open/floor/kutjevo/tan,
+/area/kutjevo/interior/construction)
"bVK" = (
/obj/structure/stairs/perspective/kutjevo{
dir = 9;
@@ -1475,11 +1473,7 @@
/turf/open/floor/kutjevo/multi_tiles,
/area/kutjevo/exterior/lz_pad)
"coF" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/kutjevo/tan/grey_edge/north,
/area/kutjevo/interior/complex/Northwest_Dorms)
"coL" = (
@@ -5426,11 +5420,7 @@
/turf/open/auto_turf/sand/layer2,
/area/kutjevo/exterior/construction)
"hIp" = (
-/obj/structure/machinery/power/apc{
- dir = 8;
- pixel_x = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/west,
/turf/open/floor/kutjevo/colors/orange/edge/west,
/area/kutjevo/interior/power_pt2_electric_boogaloo)
"hJN" = (
@@ -5655,11 +5645,7 @@
/turf/closed/wall/kutjevo/colony,
/area/kutjevo/interior/complex/med/pano)
"ifE" = (
-/obj/structure/machinery/power/apc{
- dir = 8;
- pixel_x = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/west,
/turf/open/floor/kutjevo/tan/grey_edge/west,
/area/kutjevo/interior/construction)
"ifT" = (
@@ -6167,11 +6153,7 @@
/obj/structure/bed/chair{
dir = 4
},
-/obj/structure/machinery/power/apc{
- dir = 8;
- pixel_x = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/west,
/turf/open/floor/kutjevo/colors/cyan/edge/west,
/area/kutjevo/interior/complex/med/auto_doc)
"jcl" = (
@@ -7568,11 +7550,7 @@
/turf/open/floor/kutjevo/colors/cyan,
/area/kutjevo/interior/complex/med)
"lfb" = (
-/obj/structure/machinery/power/apc{
- dir = 8;
- pixel_x = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/west,
/turf/open/floor/kutjevo/multi_tiles/west,
/area/kutjevo/interior/complex/med/locks)
"lfm" = (
@@ -7692,11 +7670,7 @@
/turf/open/floor/almayer/research/containment/floor2,
/area/kutjevo/exterior/complex_border/med_rec)
"lpF" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/kutjevo/colors/cyan/edge/north,
/area/kutjevo/interior/complex/med/triage)
"lpJ" = (
@@ -8204,11 +8178,7 @@
/turf/open/floor/kutjevo/tan,
/area/kutjevo/interior/complex/botany)
"mdw" = (
-/obj/structure/machinery/power/apc{
- dir = 4;
- pixel_x = 29;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/east,
/turf/open/floor/kutjevo/tan/multi_tiles,
/area/kutjevo/interior/complex/botany/east)
"mej" = (
@@ -9187,11 +9157,7 @@
/turf/open/floor/plating/kutjevo,
/area/kutjevo/interior/colony_central/mine_elevator)
"nyp" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/obj/item/clothing/suit/armor/vest/security,
/turf/open/floor/kutjevo/colors/cyan/edge/north,
/area/kutjevo/interior/complex/med/operating)
@@ -9311,11 +9277,7 @@
/turf/open/auto_turf/sand/layer1,
/area/kutjevo/exterior/runoff_dunes)
"nFY" = (
-/obj/structure/machinery/power/apc{
- dir = 4;
- pixel_x = 29;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/east,
/turf/open/floor/kutjevo/multi_tiles,
/area/kutjevo/exterior/telecomm/lz1_south)
"nGg" = (
@@ -11181,11 +11143,7 @@
/obj/structure/machinery/light{
dir = 8
},
-/obj/structure/machinery/power/apc{
- dir = 8;
- pixel_x = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/west,
/obj/effect/landmark/objective_landmark/medium,
/turf/open/floor/kutjevo/colors/red,
/area/kutjevo/interior/complex/med/pano)
@@ -11255,13 +11213,8 @@
/turf/open/gm/river/desert/deep/toxic,
/area/kutjevo/interior/oob)
"qwT" = (
-/obj/item/tool/wirecutters/clippers,
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
-/turf/open/auto_turf/sand/layer0,
+/obj/structure/machinery/power/apc/no_power/north,
+/turf/open/floor/kutjevo/multi_tiles,
/area/kutjevo/interior/complex/botany)
"qxc" = (
/obj/structure/barricade/metal/wired{
@@ -11509,11 +11462,7 @@
/area/kutjevo/interior/complex/botany)
"qQp" = (
/obj/item/frame/rack,
-/obj/structure/machinery/power/apc{
- dir = 8;
- pixel_x = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/west,
/turf/open/floor/kutjevo/tan/multi_tiles,
/area/kutjevo/interior/complex/botany/east_tech)
"qQU" = (
@@ -11567,11 +11516,7 @@
/turf/open/floor/kutjevo/multi_tiles,
/area/kutjevo/exterior/lz_dunes)
"qVe" = (
-/obj/structure/machinery/power/apc{
- dir = 4;
- pixel_x = 29;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/east,
/turf/open/floor/kutjevo/multi_tiles,
/area/kutjevo/exterior/telecomm/lz2_north)
"qVg" = (
@@ -11602,11 +11547,7 @@
/turf/open/floor/kutjevo/multi_tiles,
/area/kutjevo/interior/power)
"qXd" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/kutjevo/colors/cyan,
/area/kutjevo/interior/complex/med)
"qYn" = (
@@ -11842,11 +11783,7 @@
/turf/open/auto_turf/sand/layer0,
/area/kutjevo/exterior/lz_pad)
"rsM" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/kutjevo/multi_tiles/east,
/area/kutjevo/interior/colony_South/power2)
"rsV" = (
@@ -11880,11 +11817,7 @@
/turf/open/floor/plating/kutjevo,
/area/kutjevo/interior/complex/botany)
"rvZ" = (
-/obj/structure/machinery/power/apc{
- dir = 8;
- pixel_x = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/west,
/turf/open/floor/kutjevo/colors/orange,
/area/kutjevo/interior/power/comms)
"rwj" = (
@@ -14631,11 +14564,7 @@
/turf/open/auto_turf/sand/layer2,
/area/kutjevo/exterior/scrubland)
"vqQ" = (
-/obj/structure/machinery/power/apc{
- dir = 4;
- pixel_x = 29;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/east,
/turf/open/floor/kutjevo/multi_tiles,
/area/kutjevo/exterior/telecomm/lz2_south)
"vre" = (
@@ -15574,11 +15503,7 @@
/turf/open/floor/kutjevo/multi_tiles,
/area/kutjevo/interior/power)
"wNh" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/obj/structure/machinery/light{
dir = 1
},
@@ -15589,11 +15514,7 @@
/turf/open/floor/kutjevo/tan/multi_tiles,
/area/kutjevo/interior/complex/botany)
"wOI" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/obj/structure/machinery/light{
dir = 4
},
@@ -15741,11 +15662,7 @@
/turf/open/floor/kutjevo/colors/green/tile,
/area/kutjevo/interior/complex/botany/east)
"xca" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/kutjevo/tan/alt_inner_edge/north,
/area/kutjevo/interior/complex/Northwest_Flight_Control)
"xcG" = (
@@ -15865,11 +15782,7 @@
/turf/open/auto_turf/sand/layer1,
/area/kutjevo/interior/colony_South)
"xof" = (
-/obj/structure/machinery/power/apc{
- dir = 4;
- pixel_x = 29;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/east,
/turf/open/floor/kutjevo/tan/multi_tiles,
/area/kutjevo/interior/complex/botany)
"xoq" = (
@@ -16193,11 +16106,7 @@
/turf/open/floor/kutjevo/colors/orange,
/area/kutjevo/interior/power)
"xRx" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/obj/structure/platform/kutjevo/smooth{
dir = 1
},
@@ -33477,7 +33386,7 @@ lHs
kDS
xQM
mbS
-nCM
+qwT
bds
qGA
mbS
@@ -33979,7 +33888,7 @@ kDS
alh
mbS
mbS
-qwT
+qGA
xfW
nCM
mbS
@@ -37096,7 +37005,7 @@ wuL
juz
oUP
vfr
-gew
+bVI
wAo
uDm
sCG
diff --git a/maps/map_files/Kutjevo/sprinkles/35.communications.dmm b/maps/map_files/Kutjevo/sprinkles/35.communications.dmm
index c392400aa31d..be6e937531c1 100644
--- a/maps/map_files/Kutjevo/sprinkles/35.communications.dmm
+++ b/maps/map_files/Kutjevo/sprinkles/35.communications.dmm
@@ -198,8 +198,8 @@
/obj/structure/machinery/light{
dir = 1
},
-/obj/structure/machinery/power/apc/weak{
- dir = 1
+/obj/structure/machinery/power/apc/power/north{
+ start_charge = 20
},
/obj/structure/surface/rack,
/turf/open/floor/kutjevo/grey/plate,
diff --git a/maps/map_files/LV522_Chances_Claim/LV522_Chances_Claim.dmm b/maps/map_files/LV522_Chances_Claim/LV522_Chances_Claim.dmm
index f0860d688645..12cf5cbeb613 100644
--- a/maps/map_files/LV522_Chances_Claim/LV522_Chances_Claim.dmm
+++ b/maps/map_files/LV522_Chances_Claim/LV522_Chances_Claim.dmm
@@ -8,7 +8,7 @@
/turf/open/floor/strata/multi_tiles,
/area/lv522/indoors/c_block/mining)
"aaF" = (
-/turf/closed/shuttle/dropship2/tornado{
+/turf/closed/shuttle/dropship3/tornado{
icon_state = "15"
},
/area/lv522/landing_zone_forecon/UD6_Tornado)
@@ -329,8 +329,8 @@
/turf/open/floor/plating/plating_catwalk/prison,
/area/lv522/indoors/a_block/dorms/glass)
"akk" = (
-/obj/structure/machinery/power/apc/weak{
- dir = 1
+/obj/structure/machinery/power/apc/power/north{
+ start_charge = 20
},
/turf/open/floor/corsat/plate,
/area/lv522/atmos/east_reactor)
@@ -1333,8 +1333,8 @@
/area/lv522/indoors/a_block/security/glass)
"aUN" = (
/obj/item/stack/sheet/wood/large_stack,
-/obj/structure/machinery/power/apc/weak{
- dir = 1
+/obj/structure/machinery/power/apc/power/north{
+ start_charge = 20
},
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/prison/darkbrownfull2,
@@ -1630,8 +1630,8 @@
/turf/open/floor/prison/floor_plate,
/area/lv522/indoors/c_block/cargo)
"bbL" = (
-/obj/structure/machinery/power/apc/weak{
- dir = 1
+/obj/structure/machinery/power/apc/power/north{
+ start_charge = 20
},
/turf/open/floor/corsat/plate,
/area/lv522/atmos/east_reactor/east)
@@ -2034,7 +2034,7 @@
/turf/open/floor/prison,
/area/lv522/indoors/b_block/bridge)
"bpZ" = (
-/turf/closed/shuttle/dropship2/tornado{
+/turf/closed/shuttle/dropship3/tornado{
icon_state = "18"
},
/area/lv522/landing_zone_forecon/UD6_Tornado)
@@ -4802,8 +4802,8 @@
/turf/open/floor/prison/darkbrownfull2,
/area/lv522/indoors/c_block/casino)
"cTf" = (
-/obj/structure/machinery/power/apc/weak{
- dir = 1
+/obj/structure/machinery/power/apc/power/north{
+ start_charge = 20
},
/turf/open/floor/corsat/plate,
/area/lv522/atmos/east_reactor/west)
@@ -5647,7 +5647,7 @@
pixel_x = 8;
pixel_y = 10
},
-/turf/closed/shuttle/dropship2/tornado/typhoon{
+/turf/closed/shuttle/dropship3/tornado/typhoon{
icon_state = "22"
},
/area/lv522/landing_zone_forecon/UD6_Typhoon)
@@ -5912,8 +5912,8 @@
/obj/structure/machinery/light{
dir = 8
},
-/obj/structure/machinery/power/apc/weak{
- dir = 1
+/obj/structure/machinery/power/apc/power/north{
+ start_charge = 20
},
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/prison/greenfull/east,
@@ -6184,8 +6184,8 @@
pixel_y = 5
},
/obj/item/tool/pen/blue/clicky,
-/obj/structure/machinery/power/apc/weak{
- dir = 1
+/obj/structure/machinery/power/apc/power/north{
+ start_charge = 20
},
/turf/open/floor/corsat/plate,
/area/lv522/atmos/command_centre)
@@ -6510,7 +6510,7 @@
/turf/open/floor/carpet,
/area/lv522/indoors/c_block/garage)
"dIr" = (
-/turf/closed/shuttle/dropship2/tornado{
+/turf/closed/shuttle/dropship3/tornado{
icon_state = "22"
},
/area/lv522/landing_zone_forecon/UD6_Tornado)
@@ -6603,8 +6603,8 @@
/area/lv522/atmos/east_reactor/east)
"dLf" = (
/obj/effect/decal/cleanable/dirt,
-/obj/structure/machinery/power/apc/weak{
- dir = 1
+/obj/structure/machinery/power/apc/power/north{
+ start_charge = 20
},
/turf/open/floor/strata/white_cyan1/east,
/area/lv522/indoors/a_block/corpo/glass)
@@ -6983,8 +6983,8 @@
/turf/open/floor/prison,
/area/lv522/indoors/a_block/dorm_north)
"dVU" = (
-/obj/structure/machinery/power/apc/weak{
- dir = 1
+/obj/structure/machinery/power/apc/power/north{
+ start_charge = 20
},
/turf/open/floor/strata/white_cyan1/east,
/area/lv522/indoors/a_block/medical)
@@ -6997,7 +6997,7 @@
/turf/open/floor/plating/plating_catwalk/prison,
/area/lv522/indoors/c_block/cargo)
"dWv" = (
-/turf/closed/shuttle/dropship2/tornado{
+/turf/closed/shuttle/dropship3/tornado{
icon_state = "6"
},
/area/lv522/landing_zone_forecon/UD6_Tornado)
@@ -7022,7 +7022,7 @@
/turf/open/floor/corsat/plate,
/area/lv522/atmos/west_reactor)
"dWY" = (
-/turf/closed/shuttle/dropship2/tornado{
+/turf/closed/shuttle/dropship3/tornado{
icon_state = "32"
},
/area/lv522/landing_zone_forecon/UD6_Tornado)
@@ -7256,7 +7256,7 @@
/turf/open/floor/prison/floor_plate,
/area/lv522/atmos/way_in_command_centre)
"ecP" = (
-/turf/closed/shuttle/dropship2/tornado{
+/turf/closed/shuttle/dropship3/tornado{
icon_state = "25"
},
/area/lv522/landing_zone_forecon/UD6_Tornado)
@@ -8032,8 +8032,8 @@
/area/lv522/landing_zone_1/tunnel/far)
"evg" = (
/obj/effect/decal/cleanable/dirt,
-/obj/structure/machinery/power/apc/weak{
- dir = 8
+/obj/structure/machinery/power/apc/power/west{
+ start_charge = 20
},
/turf/open/floor/prison/greenfull/east,
/area/lv522/landing_zone_1/ceiling)
@@ -8838,8 +8838,8 @@
/obj/structure/machinery/light{
dir = 8
},
-/obj/structure/machinery/power/apc/weak{
- dir = 1
+/obj/structure/machinery/power/apc/power/north{
+ start_charge = 20
},
/turf/open/floor/strata/blue1,
/area/lv522/outdoors/colony_streets/windbreaker/observation)
@@ -9037,7 +9037,7 @@
/turf/open/floor/corsat/marked,
/area/lv522/indoors/lone_buildings/outdoor_bot)
"eUS" = (
-/turf/closed/shuttle/dropship2/tornado{
+/turf/closed/shuttle/dropship3/tornado{
icon_state = "33"
},
/area/lv522/landing_zone_forecon/UD6_Tornado)
@@ -9558,8 +9558,8 @@
"fiG" = (
/obj/effect/decal/cleanable/blood/gibs,
/obj/effect/decal/cleanable/dirt,
-/obj/structure/machinery/power/apc/weak{
- dir = 1
+/obj/structure/machinery/power/apc/power/north{
+ start_charge = 20
},
/turf/open/floor/prison/darkredfull2,
/area/lv522/indoors/a_block/kitchen/glass)
@@ -9861,8 +9861,8 @@
/turf/open/floor/corsat/squares,
/area/lv522/atmos/west_reactor)
"fsj" = (
-/obj/structure/machinery/power/apc/weak{
- dir = 1
+/obj/structure/machinery/power/apc/power/north{
+ start_charge = 20
},
/obj/effect/landmark/structure_spawner/setup/distress/xeno_wall,
/turf/open/floor/corsat/plate,
@@ -10177,7 +10177,7 @@
/turf/open/floor/corsat/brown/northwest,
/area/lv522/atmos/reactor_garage)
"fzC" = (
-/turf/closed/shuttle/dropship2/tornado{
+/turf/closed/shuttle/dropship3/tornado{
icon_state = "28"
},
/area/lv522/landing_zone_forecon/UD6_Tornado)
@@ -10331,7 +10331,7 @@
/turf/open/floor/prison/darkbrownfull2,
/area/lv522/indoors/lone_buildings/storage_blocks)
"fDg" = (
-/turf/closed/shuttle/dropship2/tornado/typhoon{
+/turf/closed/shuttle/dropship3/tornado/typhoon{
icon_state = "30"
},
/area/lv522/landing_zone_forecon/UD6_Typhoon)
@@ -10602,7 +10602,7 @@
/turf/open/floor/corsat/brown/north,
/area/lv522/atmos/cargo_intake)
"fLa" = (
-/turf/closed/shuttle/dropship2/tornado{
+/turf/closed/shuttle/dropship3/tornado{
icon_state = "47"
},
/area/lv522/landing_zone_forecon/UD6_Tornado)
@@ -11082,7 +11082,7 @@
/turf/open/floor/prison/floor_plate,
/area/lv522/indoors/b_block/bar)
"fXn" = (
-/turf/closed/shuttle/dropship2/tornado{
+/turf/closed/shuttle/dropship3/tornado{
icon_state = "19"
},
/area/lv522/landing_zone_forecon/UD6_Tornado)
@@ -11574,8 +11574,8 @@
/area/lv522/indoors/b_block/bar)
"ghw" = (
/obj/structure/surface/table/almayer,
-/obj/structure/machinery/power/apc/weak{
- dir = 1
+/obj/structure/machinery/power/apc/power/north{
+ start_charge = 20
},
/turf/open/floor/prison/darkpurplefull2,
/area/lv522/indoors/a_block/dorms/glass)
@@ -11913,8 +11913,8 @@
/turf/open/auto_turf/shale/layer1,
/area/lv522/outdoors/colony_streets/north_east_street)
"gqf" = (
-/obj/structure/machinery/power/apc/weak{
- dir = 1
+/obj/structure/machinery/power/apc/power/north{
+ start_charge = 20
},
/obj/structure/pipes/vents/pump,
/obj/effect/decal/cleanable/dirt,
@@ -11974,8 +11974,8 @@
/obj/structure/pipes/standard/manifold/hidden/green{
dir = 1
},
-/obj/structure/machinery/power/apc/weak{
- dir = 1
+/obj/structure/machinery/power/apc/power/north{
+ start_charge = 20
},
/turf/open/floor/wood,
/area/lv522/indoors/a_block/executive)
@@ -12119,13 +12119,13 @@
/turf/open/floor/prison/darkpurplefull2,
/area/lv522/indoors/a_block/dorms)
"guR" = (
-/turf/closed/shuttle/dropship2/tornado/typhoon{
+/turf/closed/shuttle/dropship3/tornado/typhoon{
icon_state = "26"
},
/area/lv522/landing_zone_forecon/UD6_Typhoon)
"guZ" = (
-/obj/structure/machinery/power/apc/weak{
- dir = 1
+/obj/structure/machinery/power/apc/power/north{
+ start_charge = 20
},
/turf/open/floor/prison,
/area/lv522/indoors/a_block/kitchen)
@@ -12407,8 +12407,8 @@
pixel_x = 3;
pixel_y = 7
},
-/obj/structure/machinery/power/apc/weak{
- dir = 1
+/obj/structure/machinery/power/apc/power/north{
+ start_charge = 20
},
/turf/open/floor/strata/white_cyan1,
/area/lv522/indoors/lone_buildings/chunk)
@@ -12758,8 +12758,8 @@
/turf/open/asphalt/cement/cement1,
/area/lv522/outdoors/colony_streets/north_east_street)
"gLd" = (
-/obj/structure/machinery/power/apc/weak{
- dir = 1
+/obj/structure/machinery/power/apc/power/north{
+ start_charge = 20
},
/turf/open/organic/grass,
/area/lv522/indoors/a_block/garden)
@@ -13366,8 +13366,8 @@
/turf/open/floor/corsat/marked,
/area/lv522/indoors/a_block/dorm_north)
"gZJ" = (
-/obj/structure/machinery/power/apc/weak{
- dir = 1
+/obj/structure/machinery/power/apc/power/north{
+ start_charge = 20
},
/turf/open/floor/prison/floor_marked/southwest,
/area/lv522/indoors/lone_buildings/storage_blocks)
@@ -13995,8 +13995,8 @@
/obj/structure/pipes/standard/simple/hidden/green{
dir = 4
},
-/obj/structure/machinery/power/apc/weak{
- dir = 1
+/obj/structure/machinery/power/apc/power/north{
+ start_charge = 20
},
/turf/open/floor/corsat/plate,
/area/lv522/atmos/east_reactor/north)
@@ -15266,8 +15266,8 @@
/turf/open/floor/prison/floor_plate,
/area/lv522/outdoors/nw_rockies)
"hQE" = (
-/obj/structure/machinery/power/apc/weak{
- dir = 1
+/obj/structure/machinery/power/apc/power/north{
+ start_charge = 20
},
/obj/structure/machinery/light{
dir = 8
@@ -15674,7 +15674,7 @@
/turf/open/floor/corsat/marked,
/area/lv522/atmos/reactor_garage)
"ibE" = (
-/turf/closed/shuttle/dropship2/tornado{
+/turf/closed/shuttle/dropship3/tornado{
icon_state = "23"
},
/area/lv522/landing_zone_forecon/UD6_Tornado)
@@ -16667,8 +16667,8 @@
/turf/open/floor/plating,
/area/lv522/indoors/c_block/cargo)
"izT" = (
-/obj/structure/machinery/power/apc/weak{
- dir = 1
+/obj/structure/machinery/power/apc/power/north{
+ start_charge = 20
},
/obj/effect/decal/cleanable/dirt,
/mob/living/simple_animal/mouse,
@@ -18194,8 +18194,8 @@
/area/lv522/atmos/cargo_intake)
"jjq" = (
/obj/effect/decal/cleanable/dirt,
-/obj/structure/machinery/power/apc/weak{
- dir = 1
+/obj/structure/machinery/power/apc/power/north{
+ start_charge = 20
},
/turf/open/floor/strata/blue1,
/area/lv522/indoors/a_block/dorm_north)
@@ -19065,8 +19065,8 @@
/area/lv522/indoors/a_block/fitness/glass)
"jBu" = (
/obj/effect/decal/cleanable/dirt,
-/obj/structure/machinery/power/apc/weak{
- dir = 1
+/obj/structure/machinery/power/apc/power/north{
+ start_charge = 20
},
/turf/open/floor/prison/darkyellowfull2/east,
/area/lv522/indoors/lone_buildings/outdoor_bot)
@@ -19985,8 +19985,8 @@
/turf/open/floor/plating,
/area/lv522/landing_zone_2)
"jVz" = (
-/obj/structure/machinery/power/apc/weak{
- dir = 1
+/obj/structure/machinery/power/apc/power/north{
+ start_charge = 20
},
/obj/structure/pipes/standard/simple/hidden/green{
dir = 4
@@ -20119,8 +20119,8 @@
/turf/open/floor/plating,
/area/lv522/indoors/lone_buildings/engineering)
"jYE" = (
-/obj/structure/machinery/power/apc/weak{
- dir = 1
+/obj/structure/machinery/power/apc/power/north{
+ start_charge = 20
},
/turf/open/floor/corsat/plate,
/area/lv522/atmos/east_reactor/south)
@@ -21328,8 +21328,8 @@
/turf/open/floor/prison,
/area/lv522/indoors/c_block/garage)
"kxz" = (
-/obj/structure/machinery/power/apc/weak{
- dir = 1
+/obj/structure/machinery/power/apc/power/north{
+ start_charge = 20
},
/turf/open/floor/prison/darkbrownfull2,
/area/lv522/indoors/c_block/mining)
@@ -21404,7 +21404,7 @@
/turf/open/floor/prison/blue/west,
/area/lv522/indoors/a_block/admin)
"kzk" = (
-/turf/closed/shuttle/dropship2/tornado{
+/turf/closed/shuttle/dropship3/tornado{
icon_state = "17"
},
/area/lv522/landing_zone_forecon/UD6_Tornado)
@@ -21452,8 +21452,8 @@
/turf/open/floor/prison,
/area/lv522/indoors/a_block/admin)
"kAn" = (
-/obj/structure/machinery/power/apc/weak{
- dir = 1
+/obj/structure/machinery/power/apc/power/north{
+ start_charge = 20
},
/turf/open/floor/wood,
/area/lv522/indoors/b_block/bar)
@@ -21970,8 +21970,8 @@
/obj/structure/platform/stair_cut{
icon_state = "platform_stair_alt"
},
-/obj/structure/machinery/power/apc/weak{
- dir = 1
+/obj/structure/machinery/power/apc/power/north{
+ start_charge = 20
},
/turf/open/auto_turf/sand_white/layer0,
/area/lv522/indoors/a_block/bridges/dorms_fitness)
@@ -22617,8 +22617,8 @@
/area/lv522/indoors/a_block/kitchen/damage)
"lag" = (
/obj/structure/surface/table/almayer,
-/obj/structure/machinery/power/apc/weak{
- dir = 1
+/obj/structure/machinery/power/apc/power/north{
+ start_charge = 20
},
/turf/open/floor/prison/floor_plate,
/area/lv522/atmos/way_in_command_centre)
@@ -23637,8 +23637,8 @@
/turf/open/floor/prison/floor_plate,
/area/lv522/indoors/a_block/dorms)
"lAk" = (
-/obj/structure/machinery/power/apc/weak{
- dir = 1
+/obj/structure/machinery/power/apc/power/north{
+ start_charge = 20
},
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/prison/blue_plate/north,
@@ -24089,8 +24089,8 @@
/area/lv522/atmos/reactor_garage)
"lLL" = (
/obj/effect/decal/cleanable/dirt,
-/obj/structure/machinery/power/apc/weak{
- dir = 1
+/obj/structure/machinery/power/apc/power/north{
+ start_charge = 20
},
/turf/open/floor/prison/darkyellowfull2/east,
/area/lv522/indoors/c_block/t_comm)
@@ -26901,7 +26901,7 @@
/turf/open/floor/prison,
/area/lv522/indoors/c_block/mining)
"nbO" = (
-/turf/closed/shuttle/dropship2/tornado/typhoon{
+/turf/closed/shuttle/dropship3/tornado/typhoon{
icon_state = "77"
},
/area/lv522/landing_zone_forecon/UD6_Typhoon)
@@ -27076,7 +27076,7 @@
/turf/open/floor/prison/blue_plate/north,
/area/lv522/indoors/a_block/bridges/garden_bridge)
"nfq" = (
-/turf/closed/shuttle/dropship2/tornado/typhoon{
+/turf/closed/shuttle/dropship3/tornado/typhoon{
icon_state = "36"
},
/area/lv522/landing_zone_forecon/UD6_Typhoon)
@@ -27273,7 +27273,9 @@
/turf/open/asphalt/cement/cement12,
/area/lv522/outdoors/nw_rockies)
"nky" = (
-/obj/structure/machinery/power/apc/weak,
+/obj/structure/machinery/power/apc/power/south{
+ start_charge = 20
+ },
/turf/open/floor/prison/darkyellowfull2/east,
/area/lv522/indoors/lone_buildings/engineering)
"nkX" = (
@@ -28114,8 +28116,8 @@
/area/lv522/landing_zone_1)
"nFt" = (
/obj/structure/pipes/vents/pump,
-/obj/structure/machinery/power/apc/weak{
- dir = 1
+/obj/structure/machinery/power/apc/power/north{
+ start_charge = 20
},
/turf/open/floor/corsat/plate,
/area/lv522/atmos/filt)
@@ -28607,7 +28609,7 @@
/turf/open/floor/prison/blue_plate/north,
/area/lv522/indoors/a_block/admin)
"nPN" = (
-/turf/closed/shuttle/dropship2/tornado,
+/turf/closed/shuttle/dropship3/tornado,
/area/lv522/landing_zone_forecon/UD6_Tornado)
"nPV" = (
/obj/structure/bed/chair/comfy,
@@ -28687,7 +28689,7 @@
/turf/open/floor/plating,
/area/lv522/indoors/c_block/mining)
"nQY" = (
-/turf/closed/shuttle/dropship2/tornado{
+/turf/closed/shuttle/dropship3/tornado{
icon_state = "53"
},
/area/lv522/landing_zone_forecon/UD6_Tornado)
@@ -28788,7 +28790,7 @@
/turf/open/floor/prison,
/area/lv522/indoors/a_block/admin)
"nSN" = (
-/turf/closed/shuttle/dropship2/tornado{
+/turf/closed/shuttle/dropship3/tornado{
icon_state = "27"
},
/area/lv522/landing_zone_forecon/UD6_Tornado)
@@ -29065,8 +29067,8 @@
/turf/open/floor/prison/cell_stripe/east,
/area/lv522/indoors/c_block/cargo)
"nYv" = (
-/obj/structure/machinery/power/apc/weak{
- dir = 1
+/obj/structure/machinery/power/apc/power/north{
+ start_charge = 20
},
/turf/open/floor/prison/blue/northwest,
/area/lv522/indoors/a_block/hallway)
@@ -29190,7 +29192,7 @@
/turf/open/floor/prison/greenfull/east,
/area/lv522/indoors/a_block/fitness)
"obe" = (
-/turf/closed/shuttle/dropship2/tornado/typhoon{
+/turf/closed/shuttle/dropship3/tornado/typhoon{
icon_state = "40"
},
/area/lv522/landing_zone_forecon/UD6_Tornado)
@@ -29577,8 +29579,8 @@
/turf/open/floor/prison,
/area/lv522/indoors/a_block/admin)
"ojw" = (
-/obj/structure/machinery/power/apc/weak{
- dir = 1
+/obj/structure/machinery/power/apc/power/north{
+ start_charge = 20
},
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/shiva/radiator_tile2,
@@ -29718,8 +29720,8 @@
/turf/open/floor/plating,
/area/lv522/landing_zone_1/tunnel/far)
"ooG" = (
-/obj/structure/machinery/power/apc/weak{
- dir = 1
+/obj/structure/machinery/power/apc/power/north{
+ start_charge = 20
},
/turf/open/floor/shiva/radiator_tile2,
/area/lv522/indoors/a_block/bridges)
@@ -30014,8 +30016,8 @@
current_rounds = 0
},
/obj/effect/decal/cleanable/dirt,
-/obj/structure/machinery/power/apc/weak{
- dir = 1
+/obj/structure/machinery/power/apc/power/north{
+ start_charge = 20
},
/turf/open/floor/prison,
/area/lv522/indoors/a_block/kitchen)
@@ -30095,7 +30097,7 @@
/turf/open/floor/prison,
/area/lv522/indoors/a_block/kitchen)
"oxd" = (
-/obj/item/clothing/suit/storage/RO{
+/obj/item/clothing/suit/storage/jacket/marine/RO{
name = "\improper UA jacket"
},
/turf/open/shuttle/dropship/can_surgery/light_grey_single_wide_up_to_down,
@@ -30587,8 +30589,8 @@
/turf/open/floor/plating/plating_catwalk/prison,
/area/lv522/indoors/c_block/mining)
"oKm" = (
-/obj/structure/machinery/power/apc/weak{
- dir = 1
+/obj/structure/machinery/power/apc/power/north{
+ start_charge = 20
},
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/prison/darkbrownfull2,
@@ -31583,8 +31585,8 @@
pixel_x = 2;
pixel_y = 6
},
-/obj/structure/machinery/power/apc/weak{
- dir = 1
+/obj/structure/machinery/power/apc/power/north{
+ start_charge = 20
},
/turf/open/floor/prison/darkpurplefull2,
/area/lv522/indoors/a_block/dorms)
@@ -31687,7 +31689,7 @@
/turf/open/floor/prison/darkbrownfull2,
/area/lv522/indoors/c_block/cargo)
"pkB" = (
-/turf/closed/shuttle/dropship2/tornado{
+/turf/closed/shuttle/dropship3/tornado{
icon_state = "9"
},
/area/lv522/landing_zone_forecon/UD6_Tornado)
@@ -31788,7 +31790,7 @@
/turf/open/auto_turf/sand_white/layer0,
/area/lv522/outdoors/colony_streets/north_east_street)
"pps" = (
-/turf/closed/shuttle/dropship2/tornado/typhoon{
+/turf/closed/shuttle/dropship3/tornado/typhoon{
icon_state = "100"
},
/area/lv522/landing_zone_forecon/UD6_Typhoon)
@@ -31808,7 +31810,7 @@
/turf/open/auto_turf/shale/layer1,
/area/lv522/outdoors/colony_streets/south_east_street)
"ppF" = (
-/turf/closed/shuttle/dropship2/tornado/typhoon{
+/turf/closed/shuttle/dropship3/tornado/typhoon{
icon_state = "101"
},
/area/lv522/landing_zone_forecon/UD6_Typhoon)
@@ -31879,12 +31881,12 @@
/turf/open/floor/prison/blue,
/area/lv522/indoors/a_block/hallway)
"pqZ" = (
-/turf/closed/shuttle/dropship2/tornado/typhoon{
+/turf/closed/shuttle/dropship3/tornado/typhoon{
icon_state = "102"
},
/area/lv522/landing_zone_forecon/UD6_Typhoon)
"prD" = (
-/turf/closed/shuttle/dropship2/tornado{
+/turf/closed/shuttle/dropship3/tornado{
icon_state = "5"
},
/area/lv522/landing_zone_forecon/UD6_Tornado)
@@ -32121,7 +32123,7 @@
/turf/open/floor/prison/floor_plate,
/area/lv522/indoors/a_block/dorms)
"pxY" = (
-/turf/closed/shuttle/dropship2/tornado/typhoon{
+/turf/closed/shuttle/dropship3/tornado/typhoon{
icon_state = "95"
},
/area/lv522/landing_zone_forecon/UD6_Typhoon)
@@ -32137,7 +32139,7 @@
/turf/open/floor/corsat/plate,
/area/lv522/atmos/cargo_intake)
"pys" = (
-/turf/closed/shuttle/dropship2/tornado{
+/turf/closed/shuttle/dropship3/tornado{
icon_state = "97"
},
/area/lv522/landing_zone_forecon/UD6_Typhoon)
@@ -32150,7 +32152,7 @@
pixel_x = -8;
pixel_y = 10
},
-/turf/closed/shuttle/dropship2/tornado/typhoon{
+/turf/closed/shuttle/dropship3/tornado/typhoon{
icon_state = "99"
},
/area/lv522/landing_zone_forecon/UD6_Typhoon)
@@ -32212,7 +32214,7 @@
/turf/open/floor/prison/blue_plate/north,
/area/lv522/indoors/a_block/hallway)
"pAd" = (
-/turf/closed/shuttle/dropship2/tornado{
+/turf/closed/shuttle/dropship3/tornado{
icon_state = "24"
},
/area/lv522/landing_zone_forecon/UD6_Tornado)
@@ -32249,7 +32251,7 @@
/turf/open/floor/prison/darkbrownfull2,
/area/lv522/indoors/c_block/mining)
"pBz" = (
-/obj/structure/machinery/door/airlock/hatch/cockpit/two,
+/obj/structure/machinery/door/airlock/hatch/cockpit/three,
/turf/open/shuttle/dropship/can_surgery/medium_grey_single_wide_up_to_down,
/area/lv522/landing_zone_forecon/UD6_Typhoon)
"pBF" = (
@@ -32589,7 +32591,7 @@
/turf/open/floor/prison/darkpurplefull2,
/area/lv522/indoors/a_block/bridges/dorms_fitness)
"pIu" = (
-/turf/closed/shuttle/dropship2/tornado/typhoon{
+/turf/closed/shuttle/dropship3/tornado/typhoon{
icon_state = "86"
},
/area/lv522/landing_zone_forecon/UD6_Typhoon)
@@ -32950,8 +32952,8 @@
/turf/closed/wall/strata_outpost,
/area/lv522/indoors/a_block/bridges)
"pQG" = (
-/obj/structure/machinery/power/apc/weak{
- dir = 1
+/obj/structure/machinery/power/apc/power/north{
+ start_charge = 20
},
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/prison/greenfull/east,
@@ -33011,12 +33013,12 @@
/turf/open/floor/prison,
/area/lv522/indoors/c_block/garage)
"pRK" = (
-/turf/closed/shuttle/dropship2/tornado/typhoon{
+/turf/closed/shuttle/dropship3/tornado/typhoon{
icon_state = "75"
},
/area/lv522/landing_zone_forecon/UD6_Typhoon)
"pRM" = (
-/turf/closed/shuttle/dropship2/tornado/typhoon{
+/turf/closed/shuttle/dropship3/tornado/typhoon{
icon_state = "81"
},
/area/lv522/landing_zone_forecon/UD6_Typhoon)
@@ -33201,8 +33203,8 @@
/turf/open/floor/prison/darkredfull2,
/area/lv522/indoors/a_block/security)
"pWx" = (
-/obj/structure/machinery/power/apc/weak{
- dir = 1
+/obj/structure/machinery/power/apc/power/north{
+ start_charge = 20
},
/obj/structure/machinery/light{
dir = 4
@@ -33330,7 +33332,7 @@
/turf/open/floor/prison/floor_marked/southwest,
/area/lv522/indoors/lone_buildings/storage_blocks)
"pZb" = (
-/turf/closed/shuttle/dropship2/tornado/typhoon{
+/turf/closed/shuttle/dropship3/tornado/typhoon{
icon_state = "33"
},
/area/lv522/landing_zone_forecon/UD6_Typhoon)
@@ -33732,7 +33734,7 @@
/turf/open/floor/prison,
/area/lv522/indoors/a_block/dorm_north)
"qjs" = (
-/turf/closed/shuttle/dropship2/tornado/typhoon{
+/turf/closed/shuttle/dropship3/tornado/typhoon{
icon_state = "71"
},
/area/lv522/landing_zone_forecon/UD6_Typhoon)
@@ -33861,7 +33863,7 @@
pixel_x = -8;
pixel_y = 10
},
-/turf/closed/shuttle/dropship2/tornado/typhoon{
+/turf/closed/shuttle/dropship3/tornado/typhoon{
icon_state = "72"
},
/area/lv522/landing_zone_forecon/UD6_Typhoon)
@@ -33919,8 +33921,8 @@
pixel_y = 10
},
/obj/effect/decal/cleanable/dirt,
-/obj/structure/machinery/power/apc/weak{
- dir = 1
+/obj/structure/machinery/power/apc/power/north{
+ start_charge = 20
},
/turf/open/floor/prison/darkpurplefull2,
/area/lv522/indoors/a_block/dorms/glass)
@@ -34200,7 +34202,7 @@
/turf/open/gm/river,
/area/lv522/atmos/sewer)
"qtc" = (
-/turf/closed/shuttle/dropship2/tornado/typhoon{
+/turf/closed/shuttle/dropship3/tornado/typhoon{
icon_state = "74"
},
/area/lv522/landing_zone_forecon/UD6_Typhoon)
@@ -34252,8 +34254,8 @@
/obj/item/toy/dice,
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/cobweb,
-/obj/structure/machinery/power/apc/weak{
- dir = 1
+/obj/structure/machinery/power/apc/power/north{
+ start_charge = 20
},
/turf/open/floor/prison/greenfull/east,
/area/lv522/indoors/a_block/fitness/glass)
@@ -34484,7 +34486,7 @@
/turf/open/shuttle/dropship/light_grey_single_wide_up_to_down,
/area/lv522/landing_zone_forecon/UD6_Typhoon)
"qzw" = (
-/turf/closed/shuttle/dropship2/tornado{
+/turf/closed/shuttle/dropship3/tornado{
icon_state = "26"
},
/area/lv522/landing_zone_forecon/UD6_Tornado)
@@ -34634,8 +34636,8 @@
/turf/open/floor/prison/floor_plate,
/area/lv522/indoors/a_block/admin)
"qCd" = (
-/obj/structure/machinery/power/apc/weak{
- dir = 1
+/obj/structure/machinery/power/apc/power/north{
+ start_charge = 20
},
/obj/structure/pipes/standard/simple/hidden/green{
dir = 4
@@ -34816,7 +34818,7 @@
/turf/open/floor/prison/darkredfull2,
/area/lv522/outdoors/colony_streets/north_street)
"qFs" = (
-/turf/closed/shuttle/dropship2/tornado/typhoon{
+/turf/closed/shuttle/dropship3/tornado/typhoon{
icon_state = "66"
},
/area/lv522/landing_zone_forecon/UD6_Typhoon)
@@ -34867,7 +34869,7 @@
/turf/open/floor/plating/plating_catwalk/prison,
/area/lv522/indoors/a_block/bridges)
"qGQ" = (
-/turf/closed/shuttle/dropship2/tornado/typhoon{
+/turf/closed/shuttle/dropship3/tornado/typhoon{
icon_state = "67"
},
/area/lv522/landing_zone_forecon/UD6_Typhoon)
@@ -34876,7 +34878,7 @@
/turf/open/floor/prison/darkpurplefull2,
/area/lv522/indoors/a_block/dorms)
"qHg" = (
-/turf/closed/shuttle/dropship2/tornado{
+/turf/closed/shuttle/dropship3/tornado{
icon_state = "2"
},
/area/lv522/landing_zone_forecon/UD6_Tornado)
@@ -35083,7 +35085,7 @@
/turf/open/floor/prison/darkpurple2,
/area/lv522/indoors/a_block/dorms)
"qLz" = (
-/turf/closed/shuttle/dropship2/tornado/typhoon{
+/turf/closed/shuttle/dropship3/tornado/typhoon{
icon_state = "69"
},
/area/lv522/landing_zone_forecon/UD6_Typhoon)
@@ -35132,7 +35134,7 @@
pixel_x = -8;
pixel_y = 10
},
-/turf/closed/shuttle/dropship2/tornado/typhoon{
+/turf/closed/shuttle/dropship3/tornado/typhoon{
icon_state = "70"
},
/area/lv522/landing_zone_forecon/UD6_Typhoon)
@@ -35236,7 +35238,7 @@
pixel_x = -8;
pixel_y = 10
},
-/turf/closed/shuttle/dropship2/tornado/typhoon{
+/turf/closed/shuttle/dropship3/tornado/typhoon{
icon_state = "26"
},
/area/lv522/landing_zone_forecon/UD6_Typhoon)
@@ -35475,7 +35477,7 @@
/turf/open/floor/prison/darkbrownfull2,
/area/lv522/indoors/c_block/cargo)
"qSP" = (
-/turf/closed/shuttle/dropship2/tornado/typhoon{
+/turf/closed/shuttle/dropship3/tornado/typhoon{
icon_state = "61"
},
/area/lv522/landing_zone_forecon/UD6_Typhoon)
@@ -35499,7 +35501,7 @@
/turf/open/floor/prison/darkbrownfull2,
/area/lv522/indoors/c_block/mining)
"qTh" = (
-/turf/closed/shuttle/dropship2/tornado/typhoon{
+/turf/closed/shuttle/dropship3/tornado/typhoon{
icon_state = "62"
},
/area/lv522/landing_zone_forecon/UD6_Typhoon)
@@ -35627,7 +35629,7 @@
/turf/open/floor/prison/darkpurplefull2,
/area/lv522/indoors/a_block/dorms)
"qVl" = (
-/turf/closed/shuttle/dropship2/tornado/typhoon{
+/turf/closed/shuttle/dropship3/tornado/typhoon{
icon_state = "64"
},
/area/lv522/landing_zone_forecon/UD6_Typhoon)
@@ -35694,7 +35696,7 @@
/turf/open/floor/corsat/marked,
/area/lv522/indoors/a_block/dorms)
"qWZ" = (
-/turf/closed/shuttle/dropship2/tornado/typhoon{
+/turf/closed/shuttle/dropship3/tornado/typhoon{
icon_state = "65"
},
/area/lv522/landing_zone_forecon/UD6_Typhoon)
@@ -36181,7 +36183,7 @@
/turf/open/floor/prison/floor_plate,
/area/lv522/outdoors/colony_streets/east_central_street)
"rfi" = (
-/turf/closed/shuttle/dropship2/tornado{
+/turf/closed/shuttle/dropship3/tornado{
icon_state = "100"
},
/area/lv522/landing_zone_forecon/UD6_Tornado)
@@ -36246,7 +36248,7 @@
/turf/open/shuttle/dropship/can_surgery/medium_grey_single_wide_up_to_down,
/area/lv522/landing_zone_forecon/UD6_Typhoon)
"rgA" = (
-/turf/closed/shuttle/dropship2/tornado{
+/turf/closed/shuttle/dropship3/tornado{
icon_state = "101"
},
/area/lv522/landing_zone_forecon/UD6_Tornado)
@@ -36298,12 +36300,12 @@
/turf/open/floor/prison/blue_plate/north,
/area/lv522/indoors/a_block/bridges/op_centre)
"rii" = (
-/turf/closed/shuttle/dropship2/tornado{
+/turf/closed/shuttle/dropship3/tornado{
icon_state = "102"
},
/area/lv522/landing_zone_forecon/UD6_Tornado)
"riE" = (
-/turf/closed/shuttle/dropship2/tornado/typhoon{
+/turf/closed/shuttle/dropship3/tornado/typhoon{
icon_state = "68"
},
/area/lv522/landing_zone_forecon/UD6_Typhoon)
@@ -36775,7 +36777,7 @@
/turf/open/floor/prison,
/area/lv522/indoors/a_block/dorms)
"ruj" = (
-/turf/closed/shuttle/dropship2/tornado/typhoon{
+/turf/closed/shuttle/dropship3/tornado/typhoon{
icon_state = "59"
},
/area/lv522/landing_zone_forecon/UD6_Typhoon)
@@ -37050,7 +37052,7 @@
/turf/open/floor/prison,
/area/lv522/indoors/c_block/garage)
"rAc" = (
-/turf/closed/shuttle/dropship2/tornado{
+/turf/closed/shuttle/dropship3/tornado{
icon_state = "95"
},
/area/lv522/landing_zone_forecon/UD6_Tornado)
@@ -37106,12 +37108,12 @@
/turf/open/floor/corsat,
/area/lv522/atmos/cargo_intake)
"rBU" = (
-/turf/closed/shuttle/dropship2/tornado/typhoon{
+/turf/closed/shuttle/dropship3/tornado/typhoon{
icon_state = "41"
},
/area/lv522/landing_zone_forecon/UD6_Typhoon)
"rBZ" = (
-/turf/closed/shuttle/dropship2/tornado{
+/turf/closed/shuttle/dropship3/tornado{
icon_state = "97"
},
/area/lv522/landing_zone_forecon/UD6_Tornado)
@@ -37120,7 +37122,7 @@
/turf/open/floor/prison/darkyellowfull2/east,
/area/lv522/indoors/lone_buildings/engineering)
"rCi" = (
-/turf/closed/shuttle/dropship2/tornado{
+/turf/closed/shuttle/dropship3/tornado{
icon_state = "99"
},
/area/lv522/landing_zone_forecon/UD6_Tornado)
@@ -37145,7 +37147,7 @@
pixel_x = -6;
pixel_y = 32
},
-/turf/closed/shuttle/dropship2/tornado{
+/turf/closed/shuttle/dropship3/tornado{
icon_state = "17"
},
/area/lv522/landing_zone_forecon/UD6_Tornado)
@@ -37164,7 +37166,7 @@
id = "UD6";
name = "Cargo Shutter Control"
},
-/turf/closed/shuttle/dropship2/tornado/typhoon{
+/turf/closed/shuttle/dropship3/tornado/typhoon{
icon_state = "53"
},
/area/lv522/landing_zone_forecon/UD6_Typhoon)
@@ -37221,7 +37223,7 @@
/turf/open/floor/prison/floor_plate,
/area/lv522/outdoors/colony_streets/east_central_street)
"rFp" = (
-/turf/closed/shuttle/dropship2/tornado/typhoon{
+/turf/closed/shuttle/dropship3/tornado/typhoon{
icon_state = "51"
},
/area/lv522/landing_zone_forecon/UD6_Typhoon)
@@ -37230,7 +37232,7 @@
/turf/open/floor/plating,
/area/lv522/landing_zone_2)
"rGg" = (
-/turf/closed/shuttle/dropship2/tornado/typhoon{
+/turf/closed/shuttle/dropship3/tornado/typhoon{
icon_state = "40"
},
/area/lv522/landing_zone_forecon/UD6_Typhoon)
@@ -37626,7 +37628,7 @@
/turf/open/floor/strata/cyan2/east,
/area/lv522/indoors/a_block/medical)
"rOO" = (
-/turf/closed/shuttle/dropship2/tornado{
+/turf/closed/shuttle/dropship3/tornado{
icon_state = "4"
},
/area/lv522/landing_zone_forecon/UD6_Tornado)
@@ -38187,7 +38189,7 @@
/turf/open/floor/prison/darkbrownfull2,
/area/lv522/indoors/c_block/mining)
"sbG" = (
-/turf/closed/shuttle/dropship2/tornado/typhoon{
+/turf/closed/shuttle/dropship3/tornado/typhoon{
icon_state = "28"
},
/area/lv522/landing_zone_forecon/UD6_Typhoon)
@@ -38210,12 +38212,12 @@
/turf/open/floor/plating/platingdmg3,
/area/lv522/indoors/a_block/kitchen/damage)
"sci" = (
-/turf/closed/shuttle/dropship2/tornado/typhoon{
+/turf/closed/shuttle/dropship3/tornado/typhoon{
icon_state = "29"
},
/area/lv522/landing_zone_forecon/UD6_Typhoon)
"sct" = (
-/turf/closed/shuttle/dropship2/tornado{
+/turf/closed/shuttle/dropship3/tornado{
icon_state = "40"
},
/area/lv522/landing_zone_forecon/UD6_Tornado)
@@ -38239,7 +38241,7 @@
/turf/open/floor/plating/plating_catwalk/prison,
/area/lv522/indoors/a_block/bridges/op_centre)
"sdE" = (
-/turf/closed/shuttle/dropship2/tornado/typhoon{
+/turf/closed/shuttle/dropship3/tornado/typhoon{
icon_state = "31"
},
/area/lv522/landing_zone_forecon/UD6_Typhoon)
@@ -38267,7 +38269,7 @@
pixel_x = -8;
pixel_y = 10
},
-/turf/closed/shuttle/dropship2/tornado/typhoon{
+/turf/closed/shuttle/dropship3/tornado/typhoon{
icon_state = "33"
},
/area/lv522/landing_zone_forecon/UD6_Typhoon)
@@ -38344,7 +38346,7 @@
pixel_x = 10;
pixel_y = 32
},
-/turf/closed/shuttle/dropship2/tornado/typhoon{
+/turf/closed/shuttle/dropship3/tornado/typhoon{
icon_state = "16"
},
/area/lv522/landing_zone_forecon/UD6_Typhoon)
@@ -38411,7 +38413,7 @@
/turf/open/floor/prison/greenfull/east,
/area/lv522/indoors/a_block/fitness/glass)
"shq" = (
-/turf/closed/shuttle/dropship2/tornado{
+/turf/closed/shuttle/dropship3/tornado{
icon_state = "86"
},
/area/lv522/landing_zone_forecon/UD6_Tornado)
@@ -38568,7 +38570,7 @@
/turf/open/floor/corsat/plate,
/area/lv522/atmos/reactor_garage)
"skE" = (
-/turf/closed/shuttle/dropship2/tornado{
+/turf/closed/shuttle/dropship3/tornado{
icon_state = "63"
},
/area/lv522/landing_zone_forecon/UD6_Tornado)
@@ -38935,7 +38937,7 @@
/turf/open/floor/corsat/browncorner/east,
/area/lv522/atmos/west_reactor)
"ssU" = (
-/turf/closed/shuttle/dropship2/tornado{
+/turf/closed/shuttle/dropship3/tornado{
icon_state = "89"
},
/area/lv522/landing_zone_forecon/UD6_Tornado)
@@ -39038,7 +39040,7 @@
/turf/closed/wall/strata_outpost,
/area/lv522/atmos/east_reactor)
"swr" = (
-/turf/closed/shuttle/dropship2/tornado{
+/turf/closed/shuttle/dropship3/tornado{
icon_state = "45"
},
/area/lv522/landing_zone_forecon/UD6_Tornado)
@@ -39111,8 +39113,8 @@
/turf/open/floor/prison/darkpurplefull2,
/area/lv522/indoors/a_block/dorms/glass)
"syy" = (
-/obj/structure/machinery/power/apc/weak{
- dir = 1
+/obj/structure/machinery/power/apc/power/north{
+ start_charge = 20
},
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/prison/darkbrownfull2,
@@ -39272,7 +39274,7 @@
/turf/open/floor/prison/darkbrownfull2,
/area/lv522/indoors/c_block/mining)
"sCp" = (
-/turf/closed/shuttle/dropship2/tornado{
+/turf/closed/shuttle/dropship3/tornado{
icon_state = "75"
},
/area/lv522/landing_zone_forecon/UD6_Tornado)
@@ -39402,7 +39404,7 @@
/turf/open/floor/prison/floor_plate,
/area/lv522/indoors/b_block/hydro)
"sFG" = (
-/turf/closed/shuttle/dropship2/tornado/typhoon{
+/turf/closed/shuttle/dropship3/tornado/typhoon{
icon_state = "22"
},
/area/lv522/landing_zone_forecon/UD6_Typhoon)
@@ -39413,12 +39415,12 @@
/turf/open/auto_turf/sand_white/layer0,
/area/lv522/outdoors/colony_streets/north_west_street)
"sFS" = (
-/turf/closed/shuttle/dropship2/tornado/typhoon{
+/turf/closed/shuttle/dropship3/tornado/typhoon{
icon_state = "23"
},
/area/lv522/landing_zone_forecon/UD6_Typhoon)
"sGc" = (
-/turf/closed/shuttle/dropship2/tornado/typhoon{
+/turf/closed/shuttle/dropship3/tornado/typhoon{
icon_state = "24"
},
/area/lv522/landing_zone_forecon/UD6_Typhoon)
@@ -39519,12 +39521,12 @@
/turf/open/floor/prison,
/area/lv522/landing_zone_2)
"sIx" = (
-/turf/closed/shuttle/dropship2/tornado/typhoon{
+/turf/closed/shuttle/dropship3/tornado/typhoon{
icon_state = "25"
},
/area/lv522/landing_zone_forecon/UD6_Typhoon)
"sIA" = (
-/turf/closed/shuttle/dropship2/tornado{
+/turf/closed/shuttle/dropship3/tornado{
icon_state = "76"
},
/area/lv522/landing_zone_forecon/UD6_Tornado)
@@ -39536,7 +39538,7 @@
/turf/open/floor/prison/greenfull/east,
/area/lv522/landing_zone_1/ceiling)
"sIK" = (
-/turf/closed/shuttle/dropship2/tornado/typhoon{
+/turf/closed/shuttle/dropship3/tornado/typhoon{
icon_state = "27"
},
/area/lv522/landing_zone_forecon/UD6_Typhoon)
@@ -39569,7 +39571,7 @@
/turf/open/asphalt/cement/cement1,
/area/lv522/outdoors/colony_streets/central_streets)
"sKi" = (
-/turf/closed/shuttle/dropship2/tornado{
+/turf/closed/shuttle/dropship3/tornado{
icon_state = "77"
},
/area/lv522/landing_zone_forecon/UD6_Tornado)
@@ -40294,7 +40296,7 @@
/turf/open/floor/plating,
/area/lv522/indoors/c_block/garage)
"sYh" = (
-/obj/structure/machinery/door/airlock/hatch/cockpit/two,
+/obj/structure/machinery/door/airlock/hatch/cockpit/three,
/turf/open/shuttle/dropship/medium_grey_single_wide_up_to_down,
/area/lv522/landing_zone_forecon/UD6_Tornado)
"sYl" = (
@@ -40385,7 +40387,7 @@
/turf/open/auto_turf/sand_white/layer0,
/area/lv522/landing_zone_1)
"tbl" = (
-/turf/closed/shuttle/dropship2/tornado/typhoon{
+/turf/closed/shuttle/dropship3/tornado/typhoon{
icon_state = "16"
},
/area/lv522/landing_zone_forecon/UD6_Typhoon)
@@ -40442,7 +40444,7 @@
/turf/open/floor/prison/blue_plate/north,
/area/lv522/indoors/a_block/hallway)
"tcu" = (
-/turf/closed/shuttle/dropship2/tornado{
+/turf/closed/shuttle/dropship3/tornado{
icon_state = "83"
},
/area/lv522/landing_zone_forecon/UD6_Tornado)
@@ -40451,7 +40453,7 @@
/turf/open/floor/prison/floor_marked/southwest,
/area/lv522/outdoors/colony_streets/north_east_street)
"tcz" = (
-/turf/closed/shuttle/dropship2/tornado/typhoon{
+/turf/closed/shuttle/dropship3/tornado/typhoon{
icon_state = "17"
},
/area/lv522/landing_zone_forecon/UD6_Typhoon)
@@ -40509,12 +40511,12 @@
/turf/open/floor/shiva/radiator_tile2,
/area/lv522/indoors/a_block/bridges/corpo)
"tdE" = (
-/turf/closed/shuttle/dropship2/tornado/typhoon{
+/turf/closed/shuttle/dropship3/tornado/typhoon{
icon_state = "46"
},
/area/lv522/landing_zone_forecon/UD6_Typhoon)
"tdH" = (
-/turf/closed/shuttle/dropship2/tornado/typhoon{
+/turf/closed/shuttle/dropship3/tornado/typhoon{
icon_state = "47"
},
/area/lv522/landing_zone_forecon/UD6_Typhoon)
@@ -40636,7 +40638,7 @@
/turf/open/auto_turf/sand_white/layer0,
/area/lv522/outdoors/n_rockies)
"tfV" = (
-/turf/closed/shuttle/dropship2/tornado/typhoon{
+/turf/closed/shuttle/dropship3/tornado/typhoon{
icon_state = "48"
},
/area/lv522/landing_zone_forecon/UD6_Typhoon)
@@ -40663,7 +40665,7 @@
/turf/open/floor/prison/floor_marked/southwest,
/area/lv522/landing_zone_1)
"tgM" = (
-/turf/closed/shuttle/dropship2/tornado/typhoon{
+/turf/closed/shuttle/dropship3/tornado/typhoon{
icon_state = "49"
},
/area/lv522/landing_zone_forecon/UD6_Typhoon)
@@ -40683,7 +40685,7 @@
/turf/open/floor/prison/darkpurplefull2,
/area/lv522/indoors/a_block/dorms/glass)
"the" = (
-/turf/closed/shuttle/dropship2/tornado{
+/turf/closed/shuttle/dropship3/tornado{
icon_state = "71"
},
/area/lv522/landing_zone_forecon/UD6_Tornado)
@@ -41016,7 +41018,7 @@
/turf/open/floor/strata/white_cyan3/east,
/area/lv522/indoors/a_block/medical/glass)
"toY" = (
-/turf/closed/shuttle/dropship2/tornado{
+/turf/closed/shuttle/dropship3/tornado{
icon_state = "72"
},
/area/lv522/landing_zone_forecon/UD6_Tornado)
@@ -41329,7 +41331,7 @@
/turf/open/floor/prison/blue/west,
/area/lv522/indoors/a_block/admin)
"twB" = (
-/turf/closed/shuttle/dropship2/tornado{
+/turf/closed/shuttle/dropship3/tornado{
icon_state = "48"
},
/area/lv522/landing_zone_forecon/UD6_Tornado)
@@ -42231,7 +42233,7 @@
/turf/open/floor/prison/floor_plate,
/area/lv522/indoors/a_block/admin)
"tSo" = (
-/turf/closed/shuttle/dropship2/tornado{
+/turf/closed/shuttle/dropship3/tornado{
icon_state = "73"
},
/area/lv522/landing_zone_forecon/UD6_Tornado)
@@ -42635,7 +42637,7 @@
/turf/open/floor/prison/darkpurplefull2,
/area/lv522/indoors/a_block/fitness)
"ucD" = (
-/turf/closed/shuttle/dropship2/tornado{
+/turf/closed/shuttle/dropship3/tornado{
icon_state = "74"
},
/area/lv522/landing_zone_forecon/UD6_Tornado)
@@ -43092,11 +43094,11 @@
/area/lv522/indoors/a_block/security/glass)
"ukT" = (
/obj/structure/closet/crate,
-/obj/item/storage/pouch/pressurized_reagent_canister/revival,
+/obj/item/storage/pouch/pressurized_reagent_canister/revival_peri,
/turf/open/floor/prison/floor_plate,
/area/lv522/indoors/lone_buildings/storage_blocks)
"ulh" = (
-/turf/closed/shuttle/dropship2/tornado{
+/turf/closed/shuttle/dropship3/tornado{
icon_state = "3"
},
/area/lv522/landing_zone_forecon/UD6_Tornado)
@@ -43284,8 +43286,8 @@
/turf/open/floor/plating,
/area/lv522/indoors/c_block/cargo)
"uqe" = (
-/obj/structure/machinery/power/apc/weak{
- dir = 1
+/obj/structure/machinery/power/apc/power/north{
+ start_charge = 20
},
/turf/open/floor/plating,
/area/lv522/landing_zone_1/tunnel)
@@ -43336,7 +43338,7 @@
/turf/open/asphalt/cement,
/area/lv522/outdoors/n_rockies)
"uru" = (
-/turf/closed/shuttle/dropship2/tornado{
+/turf/closed/shuttle/dropship3/tornado{
icon_state = "66"
},
/area/lv522/landing_zone_forecon/UD6_Tornado)
@@ -43441,8 +43443,8 @@
/turf/open/floor/prison/floor_plate,
/area/lv522/atmos/way_in_command_centre)
"utR" = (
-/obj/structure/machinery/power/apc/weak{
- dir = 1
+/obj/structure/machinery/power/apc/power/north{
+ start_charge = 20
},
/obj/structure/surface/table/reinforced/prison,
/obj/item/tool/pen/blue,
@@ -43565,7 +43567,7 @@
/turf/closed/wall/strata_ice/dirty,
/area/lv522/outdoors/colony_streets/north_east_street)
"uwQ" = (
-/turf/closed/shuttle/dropship2/tornado{
+/turf/closed/shuttle/dropship3/tornado{
icon_state = "67"
},
/area/lv522/landing_zone_forecon/UD6_Tornado)
@@ -43872,7 +43874,7 @@
pixel_x = -6;
pixel_y = 32
},
-/turf/closed/shuttle/dropship2/tornado/typhoon{
+/turf/closed/shuttle/dropship3/tornado/typhoon{
icon_state = "17"
},
/area/lv522/landing_zone_forecon/UD6_Typhoon)
@@ -44545,7 +44547,7 @@
/turf/open/floor/prison/darkbrownfull2,
/area/lv522/indoors/c_block/casino)
"uSB" = (
-/turf/closed/shuttle/dropship2/tornado{
+/turf/closed/shuttle/dropship3/tornado{
icon_state = "31"
},
/area/lv522/landing_zone_forecon/UD6_Tornado)
@@ -44710,8 +44712,8 @@
dir = 8
},
/obj/item/ashtray/bronze,
-/obj/structure/machinery/power/apc/weak{
- dir = 1
+/obj/structure/machinery/power/apc/power/north{
+ start_charge = 20
},
/turf/open/floor/prison/darkpurplefull2,
/area/lv522/indoors/a_block/dorms/glass)
@@ -44935,7 +44937,7 @@
/turf/open/auto_turf/shale/layer2,
/area/lv522/outdoors/colony_streets/north_east_street)
"vcu" = (
-/turf/closed/shuttle/dropship2/tornado/typhoon,
+/turf/closed/shuttle/dropship3/tornado/typhoon,
/area/lv522/landing_zone_forecon/UD6_Typhoon)
"vcF" = (
/obj/structure/stairs/perspective{
@@ -45078,7 +45080,7 @@
/turf/open/floor/wood,
/area/lv522/indoors/c_block/casino)
"vfl" = (
-/turf/closed/shuttle/dropship2/tornado/typhoon{
+/turf/closed/shuttle/dropship3/tornado/typhoon{
icon_state = "2"
},
/area/lv522/landing_zone_forecon/UD6_Typhoon)
@@ -45116,7 +45118,7 @@
/turf/open/floor/prison/darkbrownfull2,
/area/lv522/indoors/c_block/garage)
"vga" = (
-/turf/closed/shuttle/dropship2/tornado/typhoon{
+/turf/closed/shuttle/dropship3/tornado/typhoon{
icon_state = "3"
},
/area/lv522/landing_zone_forecon/UD6_Typhoon)
@@ -45183,17 +45185,17 @@
/turf/open/floor/corsat/squares,
/area/lv522/atmos/east_reactor/south)
"vhC" = (
-/turf/closed/shuttle/dropship2/tornado/typhoon{
+/turf/closed/shuttle/dropship3/tornado/typhoon{
icon_state = "4"
},
/area/lv522/landing_zone_forecon/UD6_Typhoon)
"vhJ" = (
-/turf/closed/shuttle/dropship2/tornado/typhoon{
+/turf/closed/shuttle/dropship3/tornado/typhoon{
icon_state = "5"
},
/area/lv522/landing_zone_forecon/UD6_Typhoon)
"vhO" = (
-/turf/closed/shuttle/dropship2/tornado/typhoon{
+/turf/closed/shuttle/dropship3/tornado/typhoon{
icon_state = "6"
},
/area/lv522/landing_zone_forecon/UD6_Typhoon)
@@ -45280,7 +45282,7 @@
/turf/open/floor/prison/floor_plate,
/area/lv522/atmos/reactor_garage)
"vjv" = (
-/turf/closed/shuttle/dropship2/tornado{
+/turf/closed/shuttle/dropship3/tornado{
icon_state = "69"
},
/area/lv522/landing_zone_forecon/UD6_Tornado)
@@ -45445,8 +45447,8 @@
/turf/open/floor/strata/white_cyan3/west,
/area/lv522/indoors/a_block/medical/glass)
"vnq" = (
-/obj/structure/machinery/power/apc/weak{
- dir = 1
+/obj/structure/machinery/power/apc/power/north{
+ start_charge = 20
},
/turf/open/floor/prison/darkredfull2,
/area/lv522/indoors/a_block/bridges/op_centre)
@@ -45559,7 +45561,7 @@
/turf/open/floor/corsat/marked,
/area/lv522/indoors/a_block/corpo)
"vpU" = (
-/turf/closed/shuttle/dropship2/tornado{
+/turf/closed/shuttle/dropship3/tornado{
icon_state = "70"
},
/area/lv522/landing_zone_forecon/UD6_Tornado)
@@ -45742,8 +45744,8 @@
/turf/open/auto_turf/shale/layer1,
/area/lv522/outdoors/nw_rockies)
"vtl" = (
-/obj/structure/machinery/power/apc/weak{
- dir = 1
+/obj/structure/machinery/power/apc/power/north{
+ start_charge = 20
},
/turf/open/floor/prison/floor_plate,
/area/lv522/indoors/a_block/bridges/corpo)
@@ -46397,8 +46399,8 @@
/obj/item/device/flashlight/lamp,
/obj/effect/landmark/objective_landmark/medium,
/obj/effect/decal/cleanable/cobweb,
-/obj/structure/machinery/power/apc/weak{
- dir = 1
+/obj/structure/machinery/power/apc/power/north{
+ start_charge = 20
},
/turf/open/floor/prison/darkredfull2,
/area/lv522/indoors/a_block/security)
@@ -46867,8 +46869,8 @@
/turf/open/asphalt/cement,
/area/lv522/outdoors/colony_streets/central_streets)
"vSO" = (
-/obj/structure/machinery/power/apc/weak{
- dir = 1
+/obj/structure/machinery/power/apc/power/north{
+ start_charge = 20
},
/turf/open/floor/prison/greenfull/east,
/area/lv522/indoors/a_block/fitness)
@@ -47893,7 +47895,7 @@
/turf/open/floor/prison/darkpurplefull2,
/area/lv522/indoors/a_block/dorms)
"wqt" = (
-/turf/closed/shuttle/dropship2/tornado{
+/turf/closed/shuttle/dropship3/tornado{
icon_state = "16"
},
/area/lv522/landing_zone_forecon/UD6_Tornado)
@@ -48243,12 +48245,12 @@
/turf/open/floor/corsat/marked,
/area/lv522/indoors/a_block/bridges)
"wyM" = (
-/turf/closed/shuttle/dropship2/tornado{
+/turf/closed/shuttle/dropship3/tornado{
icon_state = "61"
},
/area/lv522/landing_zone_forecon/UD6_Tornado)
"wzg" = (
-/turf/closed/shuttle/dropship2/tornado{
+/turf/closed/shuttle/dropship3/tornado{
icon_state = "62"
},
/area/lv522/landing_zone_forecon/UD6_Tornado)
@@ -48294,7 +48296,7 @@
/turf/open/floor/prison/floor_plate,
/area/lv522/outdoors/colony_streets/east_central_street)
"wAf" = (
-/turf/closed/shuttle/dropship2/tornado{
+/turf/closed/shuttle/dropship3/tornado{
icon_state = "68"
},
/area/lv522/landing_zone_forecon/UD6_Tornado)
@@ -48349,7 +48351,7 @@
/turf/open/floor/corsat/plate,
/area/lv522/atmos/reactor_garage)
"wCr" = (
-/turf/closed/shuttle/dropship2/tornado{
+/turf/closed/shuttle/dropship3/tornado{
icon_state = "64"
},
/area/lv522/landing_zone_forecon/UD6_Tornado)
@@ -48949,7 +48951,7 @@
/turf/open/floor/prison/greenfull/east,
/area/lv522/indoors/a_block/fitness)
"wRL" = (
-/turf/closed/shuttle/dropship2/tornado{
+/turf/closed/shuttle/dropship3/tornado{
icon_state = "30"
},
/area/lv522/landing_zone_forecon/UD6_Tornado)
@@ -49078,8 +49080,8 @@
/turf/open/floor/plating,
/area/lv522/oob)
"wVf" = (
-/obj/structure/machinery/power/apc/weak{
- dir = 1
+/obj/structure/machinery/power/apc/power/north{
+ start_charge = 20
},
/turf/open/floor/plating/plating_catwalk/prison,
/area/lv522/atmos/west_reactor)
@@ -49128,7 +49130,7 @@
/turf/open/floor/prison,
/area/lv522/indoors/a_block/bridges/dorms_fitness)
"wXe" = (
-/turf/closed/shuttle/dropship2/tornado{
+/turf/closed/shuttle/dropship3/tornado{
icon_state = "65"
},
/area/lv522/landing_zone_forecon/UD6_Tornado)
@@ -49256,8 +49258,8 @@
/obj/structure/barricade/deployable{
dir = 8
},
-/obj/structure/machinery/power/apc/weak{
- dir = 1
+/obj/structure/machinery/power/apc/power/north{
+ start_charge = 20
},
/turf/open/floor/prison/floor_plate,
/area/lv522/indoors/a_block/admin)
@@ -49597,7 +49599,7 @@
/turf/open/floor/prison/floor_marked/southwest,
/area/lv522/indoors/lone_buildings/storage_blocks)
"xic" = (
-/turf/closed/shuttle/dropship2/tornado/typhoon{
+/turf/closed/shuttle/dropship3/tornado/typhoon{
icon_state = "32"
},
/area/lv522/landing_zone_forecon/UD6_Typhoon)
@@ -49955,7 +49957,7 @@
/turf/open/floor/prison,
/area/lv522/indoors/a_block/dorms/glass)
"xsc" = (
-/turf/closed/shuttle/dropship2/tornado{
+/turf/closed/shuttle/dropship3/tornado{
icon_state = "29"
},
/area/lv522/landing_zone_forecon/UD6_Tornado)
@@ -51487,8 +51489,8 @@
"yct" = (
/obj/structure/surface/rack,
/obj/effect/decal/cleanable/dirt,
-/obj/structure/machinery/power/apc/weak{
- dir = 1
+/obj/structure/machinery/power/apc/power/north{
+ start_charge = 20
},
/turf/open/floor/prison/darkpurplefull2,
/area/lv522/indoors/a_block/dorms/glass)
diff --git a/maps/map_files/LV624/LV624.dmm b/maps/map_files/LV624/LV624.dmm
index 98c56dde6098..87a83cf09d19 100644
--- a/maps/map_files/LV624/LV624.dmm
+++ b/maps/map_files/LV624/LV624.dmm
@@ -1796,9 +1796,7 @@
/area/lv624/ground/river/east_river)
"akh" = (
/obj/item/trash/candy,
-/obj/structure/machinery/power/apc{
- dir = 1
- },
+/obj/structure/machinery/power/apc/power/north,
/obj/structure/machinery/door_control{
id = "secure_outer_blast";
name = "Secure Outer Doors";
@@ -2717,9 +2715,7 @@
/turf/open/floor/green/northwest,
/area/lv624/lazarus/hydroponics)
"aru" = (
-/obj/structure/machinery/power/apc/nocharge{
- dir = 1
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/green/northwest,
/area/lv624/lazarus/hydroponics)
"arv" = (
@@ -3677,9 +3673,7 @@
/turf/open/floor/whitepurple/northeast,
/area/lv624/lazarus/fitness)
"aww" = (
-/obj/structure/machinery/power/apc/nocharge{
- dir = 1
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/whitepurplecorner/east,
/area/lv624/lazarus/fitness)
"awx" = (
@@ -4217,9 +4211,7 @@
/turf/open/floor/vault2/west,
/area/lv624/lazarus/robotics)
"azc" = (
-/obj/structure/machinery/power/apc/nocharge{
- dir = 1
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/vault2,
/area/lv624/lazarus/robotics)
"azd" = (
@@ -4610,9 +4602,7 @@
},
/obj/structure/surface/table,
/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot,
-/obj/structure/machinery/power/apc/nocharge{
- dir = 1
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/whitepurple/northeast,
/area/lv624/lazarus/research)
"aAS" = (
@@ -4620,9 +4610,7 @@
/obj/item/toy/deck,
/obj/item/storage/fancy/cigarettes/wypacket,
/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot,
-/obj/structure/machinery/power/apc/nocharge{
- dir = 1
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/bluecorner,
/area/lv624/lazarus/sleep_male)
"aAU" = (
@@ -5281,9 +5269,7 @@
/turf/open/floor/purple/northwest,
/area/lv624/lazarus/sleep_female)
"aDE" = (
-/obj/structure/machinery/power/apc/nocharge{
- dir = 8
- },
+/obj/structure/machinery/power/apc/no_power/west,
/turf/open/floor/vault,
/area/lv624/lazarus/quartstorage)
"aDF" = (
@@ -5437,9 +5423,7 @@
/obj/structure/machinery/light/small{
dir = 1
},
-/obj/structure/machinery/power/apc/nocharge{
- dir = 8
- },
+/obj/structure/machinery/power/apc/no_power/west,
/turf/open/floor/freezerfloor,
/area/lv624/lazarus/toilet)
"aEB" = (
@@ -5518,9 +5502,7 @@
/obj/structure/pipes/standard/simple/hidden/cyan{
dir = 4
},
-/obj/structure/machinery/power/apc/nocharge{
- dir = 1
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/chapel/north,
/area/lv624/lazarus/chapel)
"aEL" = (
@@ -5622,9 +5604,7 @@
/obj/structure/pipes/standard/simple/hidden/cyan{
dir = 4
},
-/obj/structure/machinery/power/apc/nocharge{
- dir = 1
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/whiteyellowfull/east,
/area/lv624/lazarus/quart)
"aFa" = (
@@ -6256,9 +6236,7 @@
/obj/structure/surface/table,
/obj/effect/landmark/crap_item,
/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot,
-/obj/structure/machinery/power/apc/nocharge{
- dir = 1
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/white,
/area/lv624/lazarus/main_hall)
"aIi" = (
@@ -6707,9 +6685,7 @@
/area/lv624/lazarus/yggdrasil)
"aKq" = (
/obj/structure/flora/jungle/vines/light_1,
-/obj/structure/machinery/power/apc/nocharge{
- dir = 1
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/gm/grass/grass2,
/area/lv624/lazarus/yggdrasil)
"aKr" = (
@@ -7287,9 +7263,7 @@
/turf/open/floor/red/southwest,
/area/lv624/lazarus/security)
"aNR" = (
-/obj/structure/machinery/power/apc/nocharge{
- dir = 1
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/red,
/area/lv624/lazarus/security)
"aNS" = (
@@ -7399,9 +7373,7 @@
/turf/open/gm/dirt,
/area/lv624/ground/jungle/east_central_jungle)
"aOy" = (
-/obj/structure/machinery/power/apc/nocharge{
- dir = 8
- },
+/obj/structure/machinery/power/apc/no_power/west,
/turf/open/floor/cult,
/area/lv624/lazarus/armory)
"aOA" = (
@@ -7895,9 +7867,7 @@
/turf/open/floor/barber/west,
/area/lv624/lazarus/kitchen)
"aQQ" = (
-/obj/structure/machinery/power/apc/nocharge{
- dir = 8
- },
+/obj/structure/machinery/power/apc/no_power/west,
/turf/open/floor/bar,
/area/lv624/lazarus/canteen)
"aQX" = (
@@ -8188,9 +8158,7 @@
/turf/open/floor/whiteyellowfull/east,
/area/lv624/ground/caves/south_east_caves)
"aSq" = (
-/obj/structure/machinery/power/apc/nocharge{
- dir = 8
- },
+/obj/structure/machinery/power/apc/no_power/west,
/turf/open/floor/grimy,
/area/lv624/lazarus/captain)
"aSs" = (
@@ -8464,8 +8432,7 @@
/turf/open/floor/brown/northwest,
/area/lv624/lazarus/comms)
"aTJ" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
+/obj/structure/machinery/power/apc/power/north{
start_charge = 15
},
/turf/open/floor/delivery,
@@ -8550,9 +8517,7 @@
/area/lv624/lazarus/kitchen)
"aUc" = (
/obj/structure/surface/rack,
-/obj/structure/machinery/power/apc{
- dir = 1
- },
+/obj/structure/machinery/power/apc/power/north,
/turf/open/floor/freezerfloor,
/area/lv624/lazarus/kitchen)
"aUd" = (
@@ -8727,8 +8692,7 @@
/turf/open/floor/greengrid,
/area/lv624/lazarus/secure_storage)
"aUR" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
+/obj/structure/machinery/power/apc/power/north{
start_charge = 200
},
/turf/open/floor/greengrid,
@@ -9341,9 +9305,7 @@
/area/lv624/ground/jungle/east_central_jungle)
"aXs" = (
/obj/effect/decal/cleanable/dirt,
-/obj/structure/machinery/power/apc/nocharge{
- dir = 1
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/delivery,
/area/lv624/lazarus/engineering)
"aXt" = (
@@ -12200,7 +12162,7 @@
/turf/open/gm/dirt,
/area/lv624/ground/caves/south_central_caves)
"fqM" = (
-/obj/structure/machinery/power/apc/nocharge,
+/obj/structure/machinery/power/apc/no_power/south,
/turf/open/floor/asteroidwarning/east,
/area/lv624/ground/colony/telecomm/sw_lz2)
"frV" = (
@@ -12339,7 +12301,7 @@
/turf/open/floor/plating,
/area/lv624/lazarus/engineering)
"fFZ" = (
-/obj/structure/machinery/power/apc/nocharge,
+/obj/structure/machinery/power/apc/no_power/south,
/turf/open/floor/asteroidfloor/north,
/area/lv624/ground/colony/telecomm/cargo)
"fGn" = (
@@ -13895,9 +13857,7 @@
/turf/open/gm/grass/grass1,
/area/lv624/ground/jungle/north_jungle)
"jcb" = (
-/obj/structure/machinery/power/apc/nocharge{
- dir = 4
- },
+/obj/structure/machinery/power/apc/no_power/east,
/turf/open/floor/purple/northwest,
/area/lv624/lazarus/sleep_female)
"jcn" = (
@@ -14295,9 +14255,7 @@
/obj/structure/pipes/standard/simple/hidden/cyan{
dir = 4
},
-/obj/structure/machinery/power/apc/nocharge{
- dir = 1
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/grimy,
/area/lv624/lazarus/hop)
"jRm" = (
@@ -16977,9 +16935,7 @@
/turf/open/auto_turf/strata_grass/layer1,
/area/lv624/ground/barrens/north_east_barrens)
"pgf" = (
-/obj/structure/machinery/power/apc/nocharge{
- dir = 1
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/whiteblue/north,
/area/lv624/lazarus/medbay)
"pgD" = (
@@ -20508,9 +20464,7 @@
"whr" = (
/obj/item/ammo_magazine/smg/mp5,
/obj/item/ammo_magazine/smg/mp5,
-/obj/structure/machinery/power/apc{
- dir = 1
- },
+/obj/structure/machinery/power/apc/power/north,
/turf/open/floor/whiteblue/northwest,
/area/lv624/lazarus/corporate_dome)
"whv" = (
diff --git a/maps/map_files/LV624/armory/10.cheese.dmm b/maps/map_files/LV624/armory/10.cheese.dmm
index 127e19a04809..15080595810e 100644
--- a/maps/map_files/LV624/armory/10.cheese.dmm
+++ b/maps/map_files/LV624/armory/10.cheese.dmm
@@ -121,9 +121,7 @@
/obj/item/reagent_container/food/snacks/cheesewedge/verymature{
pixel_y = 6
},
-/obj/structure/machinery/power/apc/nocharge{
- dir = 8
- },
+/obj/structure/machinery/power/apc/no_power/west,
/turf/open/floor/cult,
/area/lv624/lazarus/armory)
"w" = (
diff --git a/maps/map_files/LV624/armory/10.extra.dmm b/maps/map_files/LV624/armory/10.extra.dmm
index 7acd81bb8e97..dc85ff54c4e7 100644
--- a/maps/map_files/LV624/armory/10.extra.dmm
+++ b/maps/map_files/LV624/armory/10.extra.dmm
@@ -126,9 +126,7 @@
/turf/open/floor/red/northeast,
/area/lv624/lazarus/security)
"u" = (
-/obj/structure/machinery/power/apc/nocharge{
- dir = 8
- },
+/obj/structure/machinery/power/apc/no_power/west,
/turf/open/floor/cult,
/area/lv624/lazarus/armory)
"w" = (
diff --git a/maps/map_files/LV624/armory/10.looted.dmm b/maps/map_files/LV624/armory/10.looted.dmm
index 87fbccfce955..0cd0a701efc9 100644
--- a/maps/map_files/LV624/armory/10.looted.dmm
+++ b/maps/map_files/LV624/armory/10.looted.dmm
@@ -93,9 +93,7 @@
/turf/open/floor/red/northeast,
/area/lv624/lazarus/security)
"u" = (
-/obj/structure/machinery/power/apc/nocharge{
- dir = 8
- },
+/obj/structure/machinery/power/apc/no_power/west,
/turf/open/floor/cult,
/area/lv624/lazarus/armory)
"w" = (
diff --git a/maps/map_files/LV624/gym/20.pool.dmm b/maps/map_files/LV624/gym/20.pool.dmm
index e0f24e9fdfdd..19361c37ecf1 100644
--- a/maps/map_files/LV624/gym/20.pool.dmm
+++ b/maps/map_files/LV624/gym/20.pool.dmm
@@ -168,9 +168,7 @@
/area/lv624/lazarus/fitness)
"Be" = (
/obj/effect/decal/remains/human,
-/obj/structure/machinery/power/apc/nocharge{
- dir = 1
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/whitepurplecorner/east,
/area/lv624/lazarus/fitness)
"Ei" = (
diff --git a/maps/map_files/LV624/gym/30.alternate.dmm b/maps/map_files/LV624/gym/30.alternate.dmm
index f0e7ac35b806..b75bf2a4de5f 100644
--- a/maps/map_files/LV624/gym/30.alternate.dmm
+++ b/maps/map_files/LV624/gym/30.alternate.dmm
@@ -495,9 +495,7 @@
/turf/open/floor/plating,
/area/lv624/lazarus/fitness)
"Wy" = (
-/obj/structure/machinery/power/apc/nocharge{
- dir = 1
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/whitepurplecorner/east,
/area/lv624/lazarus/fitness)
"Xu" = (
diff --git a/maps/map_files/LV624/medbay/10.destroyed.dmm b/maps/map_files/LV624/medbay/10.destroyed.dmm
index a676d0ff68bd..35ae2dd0a047 100644
--- a/maps/map_files/LV624/medbay/10.destroyed.dmm
+++ b/maps/map_files/LV624/medbay/10.destroyed.dmm
@@ -33,9 +33,7 @@
/turf/open/floor/plating/platingdmg3,
/area/lv624/lazarus/medbay)
"hW" = (
-/obj/structure/machinery/power/apc/nocharge{
- dir = 1
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/white,
/area/lv624/lazarus/medbay)
"ih" = (
diff --git a/maps/map_files/LV624/medbay/30.larvasurgery.dmm b/maps/map_files/LV624/medbay/30.larvasurgery.dmm
index f03f922bf828..c97297c24ad5 100644
--- a/maps/map_files/LV624/medbay/30.larvasurgery.dmm
+++ b/maps/map_files/LV624/medbay/30.larvasurgery.dmm
@@ -267,9 +267,7 @@
"qP" = (
/obj/effect/landmark/corpsespawner/colonist/random/burst,
/obj/effect/decal/cleanable/blood,
-/obj/structure/machinery/power/apc/nocharge{
- dir = 1
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/whiteblue/north,
/area/lv624/lazarus/medbay)
"tr" = (
diff --git a/maps/map_files/LV624/science/10.yautja.dmm b/maps/map_files/LV624/science/10.yautja.dmm
index 8b44093643e7..84029eff76a0 100644
--- a/maps/map_files/LV624/science/10.yautja.dmm
+++ b/maps/map_files/LV624/science/10.yautja.dmm
@@ -380,9 +380,7 @@
/area/lv624/lazarus/research)
"Hj" = (
/obj/effect/landmark/crap_item,
-/obj/structure/machinery/power/apc/nocharge{
- dir = 1
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/whitepurple/northeast,
/area/lv624/lazarus/research)
"Lo" = (
diff --git a/maps/map_files/LV624/science/40.fullylocked.dmm b/maps/map_files/LV624/science/40.fullylocked.dmm
index 9dbf737c1b11..a42cfb5d5945 100644
--- a/maps/map_files/LV624/science/40.fullylocked.dmm
+++ b/maps/map_files/LV624/science/40.fullylocked.dmm
@@ -333,9 +333,7 @@
/turf/open/floor/whitepurple/northeast,
/area/lv624/lazarus/research)
"Fm" = (
-/obj/structure/machinery/power/apc/nocharge{
- dir = 1
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/whitepurple/northeast,
/area/lv624/lazarus/research)
"Jv" = (
diff --git a/maps/map_files/LV624/standalone/clfship.dmm b/maps/map_files/LV624/standalone/clfship.dmm
index 177ecbd6e450..177b8895c558 100644
--- a/maps/map_files/LV624/standalone/clfship.dmm
+++ b/maps/map_files/LV624/standalone/clfship.dmm
@@ -1297,9 +1297,7 @@
/area/lv624/lazarus/crashed_ship)
"Px" = (
/obj/structure/machinery/autolathe,
-/obj/structure/machinery/power/apc{
- dir = 1
- },
+/obj/structure/machinery/power/apc/power/north,
/turf/open/floor/almayer/orange/northwest,
/area/lv624/lazarus/crashed_ship)
"PA" = (
diff --git a/maps/map_files/LV624/standalone/corporatedome.dmm b/maps/map_files/LV624/standalone/corporatedome.dmm
index e4fb2114f273..1f654499ea88 100644
--- a/maps/map_files/LV624/standalone/corporatedome.dmm
+++ b/maps/map_files/LV624/standalone/corporatedome.dmm
@@ -646,9 +646,7 @@
/turf/open/floor/whiteyellow/northwest,
/area/lv624/lazarus/corporate_dome)
"HK" = (
-/obj/structure/machinery/power/apc{
- dir = 1
- },
+/obj/structure/machinery/power/apc/power/north,
/obj/effect/spawner/random/powercell,
/obj/item/tool/crowbar/red{
pixel_x = 8;
diff --git a/maps/map_files/New_Varadero/New_Varadero.dmm b/maps/map_files/New_Varadero/New_Varadero.dmm
index 42e94f253587..ae297f0cabc4 100644
--- a/maps/map_files/New_Varadero/New_Varadero.dmm
+++ b/maps/map_files/New_Varadero/New_Varadero.dmm
@@ -759,17 +759,11 @@
/area/varadero/exterior/lz2_near)
"aCY" = (
/obj/effect/decal/cleanable/blood/oil,
-/obj/structure/machinery/power/apc{
- dir = 1
- },
+/obj/structure/machinery/power/apc/power/north,
/turf/open/floor/plating/icefloor/asteroidplating,
/area/varadero/interior/maintenance/north)
"aDu" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/shiva/floor3,
/area/varadero/interior/cargo)
"aDF" = (
@@ -1845,11 +1839,7 @@
/turf/open/floor/shiva/greenfull/west,
/area/varadero/interior/hall_SE)
"bvE" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/plating/icefloor/asteroidplating,
/area/varadero/interior/maintenance/research)
"bvF" = (
@@ -2175,9 +2165,7 @@
/obj/structure/machinery/light{
dir = 4
},
-/obj/structure/machinery/power/apc{
- dir = 1
- },
+/obj/structure/machinery/power/apc/power/north,
/turf/open/floor/asteroidfloor/north,
/area/varadero/interior/comms1)
"bJH" = (
@@ -2434,9 +2422,7 @@
/turf/open/shuttle/elevator/grating,
/area/varadero/interior/records)
"bSD" = (
-/obj/structure/machinery/power/apc{
- dir = 1
- },
+/obj/structure/machinery/power/apc/power/north,
/turf/open/floor/plating/icefloor/asteroidplating,
/area/varadero/interior/comms2)
"bSQ" = (
@@ -3046,11 +3032,7 @@
/turf/open/auto_turf/sand_white/layer1,
/area/varadero/interior_protected/vessel)
"crC" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/plating/icefloor/asteroidplating,
/area/varadero/interior/maintenance/security)
"csb" = (
@@ -3108,11 +3090,7 @@
/turf/open/floor/shiva/multi_tiles,
/area/varadero/interior/electrical)
"cud" = (
-/obj/structure/machinery/power/apc{
- dir = 8;
- pixel_x = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/west,
/turf/open/floor/shiva/yellow/west,
/area/varadero/interior/electrical)
"cug" = (
@@ -3326,10 +3304,7 @@
/turf/open/floor/wood,
/area/varadero/interior/library)
"cGd" = (
-/obj/structure/machinery/power/apc{
- pixel_y = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/south,
/turf/open/floor/shiva/green,
/area/varadero/interior/mess)
"cGx" = (
@@ -4015,11 +3990,7 @@
/turf/open/floor/plating/icefloor/asteroidplating,
/area/varadero/interior_protected/maintenance/south)
"diK" = (
-/obj/structure/machinery/power/apc{
- dir = 8;
- pixel_x = -30;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/west,
/obj/item/stack/sheet/wood,
/obj/item/tool/kitchen/knife/butcher{
pixel_x = -7;
@@ -6718,11 +6689,7 @@
/turf/open/floor/shiva/yellow/west,
/area/varadero/interior/hall_NW)
"fpe" = (
-/obj/structure/machinery/power/apc{
- dir = 4;
- pixel_x = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/east,
/turf/open/floor/wood,
/area/varadero/interior/library)
"fpf" = (
@@ -7265,11 +7232,7 @@
/turf/open/gm/grass/grass1/weedable,
/area/varadero/interior_protected/caves/central)
"fPq" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/plating/icefloor/asteroidplating,
/area/varadero/exterior/eastbeach)
"fPy" = (
@@ -7564,11 +7527,7 @@
/turf/open/auto_turf/sand_white/layer1,
/area/varadero/exterior/pontoon_beach)
"gan" = (
-/obj/structure/machinery/power/apc{
- dir = 8;
- pixel_x = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/west,
/turf/open/floor/shiva/green/west,
/area/varadero/interior/court)
"gar" = (
@@ -7902,9 +7861,7 @@
/turf/open/floor/wood,
/area/varadero/interior/research)
"gkw" = (
-/obj/structure/machinery/power/apc{
- dir = 1
- },
+/obj/structure/machinery/power/apc/power/north,
/turf/open/floor/plating/icefloor/asteroidplating,
/area/varadero/exterior/comms4)
"gkx" = (
@@ -8897,11 +8854,7 @@
/turf/open/floor/shiva/floor3,
/area/varadero/interior/hall_N)
"hcz" = (
-/obj/structure/machinery/power/apc{
- dir = 8;
- pixel_x = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/west,
/turf/open/floor/asteroidfloor/north,
/area/varadero/exterior/lz1_near)
"hcI" = (
@@ -8936,11 +8889,7 @@
/area/varadero/interior/mess)
"heu" = (
/obj/item/device/flashlight/lamp/tripod,
-/obj/structure/machinery/power/apc{
- dir = 8;
- pixel_x = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/west,
/turf/open/auto_turf/sand_white/layer1,
/area/varadero/interior/caves/north_research)
"hfn" = (
@@ -11318,11 +11267,7 @@
/turf/open/gm/dirt,
/area/varadero/exterior/pontoon_beach)
"iZT" = (
-/obj/structure/machinery/power/apc{
- dir = 8;
- pixel_x = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/west,
/obj/item/shard{
icon_state = "medium"
},
@@ -11365,11 +11310,7 @@
/turf/open/floor/shiva/yellow/east,
/area/varadero/interior/technical_storage)
"jcB" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/obj/effect/decal/cleanable/blood/drip,
/turf/open/floor/shiva/purple/north,
/area/varadero/interior/research)
@@ -11573,11 +11514,7 @@
/turf/open/gm/dirt,
/area/varadero/exterior/eastbeach)
"jjl" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/obj/structure/filingcabinet{
density = 0;
icon_state = "chestdrawer";
@@ -12118,11 +12055,7 @@
/turf/open/floor/plating/icefloor/asteroidplating,
/area/varadero/interior/maintenance/research)
"jGz" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/white,
/area/varadero/interior/toilets)
"jGA" = (
@@ -13061,11 +12994,7 @@
/turf/open/floor/shiva/greenfull/west,
/area/varadero/interior/hall_SE)
"kuE" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/auto_turf/sand_white/layer1,
/area/varadero/interior_protected/maintenance/south)
"kuO" = (
@@ -13944,11 +13873,7 @@
/turf/open/gm/coast/beachcorner/north_east,
/area/varadero/interior/caves/east)
"ldJ" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/wood/wood_broken3,
/area/varadero/interior/hall_SE)
"leF" = (
@@ -16674,11 +16599,7 @@
/turf/open/floor/plating/icefloor/asteroidplating,
/area/varadero/interior/maintenance/research)
"neU" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/shiva/floor3,
/area/varadero/interior/hall_N)
"nfk" = (
@@ -17082,11 +17003,7 @@
/turf/open/floor/shiva/yellow/north,
/area/varadero/interior/technical_storage)
"nBl" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/shiva/yellowfull/west,
/area/varadero/interior/disposals)
"nBD" = (
@@ -17443,6 +17360,7 @@
/obj/item/reagent_container/food/drinks/bottle/whiskey,
/obj/item/reagent_container/food/drinks/bottle/wine,
/obj/item/reagent_container/food/drinks/bottle/pwine,
+/obj/item/storage/box/stompers,
/turf/open/floor/wood,
/area/varadero/interior/research)
"nPG" = (
@@ -17525,11 +17443,7 @@
/turf/open/gm/dirt/desert3,
/area/varadero/interior/maintenance/north)
"nRP" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/obj/item/cell/high,
/turf/open/floor/shiva/yellow/north,
/area/varadero/interior/technical_storage)
@@ -18004,11 +17918,7 @@
/turf/open/floor/plating/icefloor/asteroidplating,
/area/varadero/interior/maintenance/security)
"ola" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/plating/icefloor/asteroidplating,
/area/varadero/exterior/lz2_near)
"olD" = (
@@ -18856,11 +18766,7 @@
/turf/open/auto_turf/sand_white/layer1,
/area/varadero/exterior/lz1_near)
"oWr" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/wood,
/area/varadero/interior/administration)
"oWs" = (
@@ -19819,15 +19725,15 @@
pixel_x = 4;
pixel_y = 10
},
-/obj/item/tool/soap/nanotrasen{
+/obj/item/tool/soap/weyland_yutani{
pixel_x = 3;
pixel_y = 7
},
-/obj/item/tool/soap/nanotrasen{
+/obj/item/tool/soap/weyland_yutani{
pixel_x = 2;
pixel_y = 11
},
-/obj/item/tool/soap/nanotrasen{
+/obj/item/tool/soap/weyland_yutani{
desc = "Teetering at the brink! A life's thread, about to be cut short.";
pixel_x = 5;
pixel_y = 15
@@ -21058,11 +20964,7 @@
/turf/open/floor/wood,
/area/varadero/interior/research)
"qBR" = (
-/obj/structure/machinery/power/apc{
- dir = 4;
- pixel_x = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/east,
/turf/open/floor/carpet,
/area/varadero/interior/chapel)
"qBU" = (
@@ -21532,11 +21434,7 @@
/turf/open/floor/shiva/yellow,
/area/varadero/interior/comms3)
"qSJ" = (
-/obj/structure/machinery/power/apc{
- dir = 4;
- pixel_x = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/east,
/turf/open/floor/shiva/floor3,
/area/varadero/interior/morgue)
"qSR" = (
@@ -22803,11 +22701,7 @@
/turf/open/floor/asteroidfloor/north,
/area/varadero/exterior/lz1_near)
"rSI" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/obj/structure/filingcabinet{
density = 0;
icon_state = "chestdrawer";
@@ -23872,11 +23766,7 @@
/turf/open/floor/shiva/purple,
/area/varadero/interior/research)
"sDQ" = (
-/obj/structure/machinery/power/apc{
- dir = 4;
- pixel_x = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/east,
/turf/open/floor/shiva/wred/east,
/area/varadero/interior/medical)
"sDZ" = (
@@ -25826,22 +25716,14 @@
/turf/open/auto_turf/sand_white/layer1,
/area/varadero/interior_protected/vessel)
"umA" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/shiva/red/north,
/area/varadero/interior/security)
"umO" = (
/obj/structure/bed/chair{
dir = 1
},
-/obj/structure/machinery/power/apc{
- dir = 8;
- pixel_x = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/west,
/turf/open/floor/shiva/floor3,
/area/varadero/interior/hall_NW)
"umT" = (
@@ -26053,10 +25935,7 @@
/turf/open/floor/wood,
/area/varadero/interior/hall_SE)
"uuv" = (
-/obj/structure/machinery/power/apc{
- pixel_y = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/south,
/turf/open/floor/white,
/area/varadero/interior/laundry)
"uuN" = (
@@ -29066,11 +28945,7 @@
/area/varadero/interior/cargo)
"wGs" = (
/obj/effect/landmark/hunter_primary,
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/shiva/yellowfull/west,
/area/varadero/interior/comms3)
"wGQ" = (
diff --git a/maps/map_files/Sorokyne_Strata/Sorokyne_Strata.dmm b/maps/map_files/Sorokyne_Strata/Sorokyne_Strata.dmm
index 2baad841c255..c2622e78ba80 100644
--- a/maps/map_files/Sorokyne_Strata/Sorokyne_Strata.dmm
+++ b/maps/map_files/Sorokyne_Strata/Sorokyne_Strata.dmm
@@ -1328,11 +1328,7 @@
/turf/open/floor/strata/fake_wood,
/area/strata/ug/interior/jungle/deep/minehead)
"aeR" = (
-/obj/structure/machinery/power/apc{
- dir = 8;
- pixel_x = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/west,
/turf/open/floor/strata/floor2,
/area/strata/ug/interior/jungle/deep/structures/res)
"aeS" = (
@@ -2425,11 +2421,7 @@
/obj/structure/pipes/standard/simple/hidden/cyan{
dir = 10
},
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/strata/multi_tiles,
/area/strata/ag/interior/dorms/maintenance)
"aiK" = (
@@ -2795,7 +2787,7 @@
},
/obj/structure/surface/table/reinforced/prison,
/obj/item/device/mass_spectrometer,
-/obj/item/device/matter_decompiler,
+/obj/item/prop/matter_decompiler,
/turf/open/floor/strata/multi_tiles/southwest,
/area/strata/ag/interior/outpost/canteen/personal_storage)
"ake" = (
@@ -3441,10 +3433,7 @@
/area/strata/ag/interior/outpost/canteen/personal_storage)
"amM" = (
/obj/structure/bedsheetbin,
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 25
- },
+/obj/structure/machinery/power/apc/power/north,
/turf/open/floor/strata/floor3,
/area/strata/ag/interior/outpost/canteen/personal_storage)
"amN" = (
@@ -3576,10 +3565,7 @@
/obj/structure/pipes/standard/simple/hidden/cyan{
dir = 4
},
-/obj/structure/machinery/power/apc{
- pixel_y = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/south,
/turf/open/floor/strata/white_cyan1/east,
/area/strata/ag/interior/dorms/canteen)
"anr" = (
@@ -3832,11 +3818,7 @@
/turf/open/floor/strata/fake_wood,
/area/strata/ag/interior/research_decks/security)
"aoz" = (
-/obj/structure/machinery/power/apc{
- dir = 4;
- pixel_x = 28;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/east,
/obj/structure/machinery/light/small{
dir = 4
},
@@ -4958,10 +4940,7 @@
/turf/open/floor/strata/floor3,
/area/strata/ag/interior/outpost/canteen/lower_cafeteria)
"asM" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 25
- },
+/obj/structure/machinery/power/apc/power/north,
/turf/open/floor/strata/floor3,
/area/strata/ag/interior/outpost/canteen/lower_cafeteria)
"asN" = (
@@ -6339,10 +6318,7 @@
/obj/structure/bed/chair{
dir = 4
},
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 25
- },
+/obj/structure/machinery/power/apc/power/north,
/obj/effect/landmark/survivor_spawner,
/turf/open/floor/interior/tatami,
/area/strata/ag/interior/outpost/canteen)
@@ -6642,11 +6618,7 @@
/area/strata/ag/exterior/paths/north_outpost)
"ayY" = (
/obj/structure/pipes/standard/simple/hidden/cyan,
-/obj/structure/machinery/power/apc{
- dir = 8;
- pixel_x = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/west,
/turf/open/floor/strata/red1,
/area/strata/ag/interior/outpost/security)
"aza" = (
@@ -7992,10 +7964,7 @@
/area/strata/ag/interior/outpost/maint/canteen_e_1)
"aEs" = (
/obj/structure/closet/crate/freezer/rations,
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 25
- },
+/obj/structure/machinery/power/apc/power/north,
/turf/open/floor/strata/multi_tiles/southwest,
/area/strata/ag/interior/outpost/maint/canteen_e_1)
"aEt" = (
@@ -8009,10 +7978,7 @@
/turf/open/floor/strata/white_cyan2/west,
/area/strata/ug/interior/jungle/deep/minehead/ruins)
"aEu" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 25
- },
+/obj/structure/machinery/power/apc/power/north,
/obj/item/reagent_container/food/drinks/cans/waterbottle,
/turf/open/floor/strata/white_cyan2/west,
/area/strata/ug/interior/jungle/deep/minehead/ruins)
@@ -8530,11 +8496,7 @@
/turf/open/floor/strata,
/area/strata/ag/exterior/research_decks)
"aGl" = (
-/obj/structure/machinery/power/apc{
- dir = 4;
- pixel_x = 28;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/east,
/turf/open/floor/strata,
/area/strata/ag/interior/outpost/engi)
"aGm" = (
@@ -9261,10 +9223,7 @@
/area/strata/ag/exterior/paths/adminext)
"aJr" = (
/obj/structure/machinery/computer/crew,
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 25
- },
+/obj/structure/machinery/power/apc/power/north,
/turf/open/floor/strata,
/area/strata/ag/interior/outpost/admin)
"aJs" = (
@@ -11210,11 +11169,7 @@
/area/strata/ag/interior/dorms/south)
"aQA" = (
/obj/structure/bed/chair,
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/strata/floor3,
/area/strata/ag/interior/dorms/south)
"aQB" = (
@@ -12162,11 +12117,7 @@
/area/strata/ag/interior/outpost/gen/foyer)
"aUM" = (
/obj/structure/closet/secure_closet/personal,
-/obj/structure/machinery/power/apc{
- dir = 8;
- pixel_x = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/west,
/obj/effect/landmark/objective_landmark/close,
/turf/open/floor/strata/multi_tiles/west,
/area/strata/ag/interior/outpost/gen/foyer)
@@ -12653,10 +12604,7 @@
/obj/structure/bed/chair{
dir = 4
},
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 25
- },
+/obj/structure/machinery/power/apc/power/north,
/obj/effect/landmark/objective_landmark/science,
/turf/open/floor/interior/plastic,
/area/strata/ag/interior/paths/cabin_area/central)
@@ -12772,11 +12720,7 @@
/turf/open/floor/strata/orange_cover,
/area/strata/ag/interior/nearlz1)
"aXx" = (
-/obj/structure/machinery/power/apc{
- dir = 4;
- pixel_x = 28;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/east,
/turf/open/floor/strata/floor3,
/area/strata/ag/interior/nearlz1)
"aXy" = (
@@ -13104,10 +13048,7 @@
/turf/open/auto_turf/snow/brown_base/layer1,
/area/strata/ag/exterior/marsh/river)
"aZm" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 25
- },
+/obj/structure/machinery/power/apc/power/north,
/turf/open/floor/strata/multi_tiles/southwest,
/area/strata/ag/interior/outpost/gen/bball/nest)
"aZn" = (
@@ -13711,10 +13652,7 @@
/turf/open/floor/strata/cyan2/east,
/area/strata/ag/interior/outpost/canteen/bar)
"bbF" = (
-/obj/structure/machinery/power/apc{
- pixel_y = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/south,
/turf/open/floor/strata,
/area/strata/ag/interior/outpost/maint/canteen_e_1)
"bbG" = (
@@ -13747,10 +13685,7 @@
/area/strata/ug/interior/outpost/jung/dorms/admin4)
"bbM" = (
/obj/structure/closet/wardrobe/pjs,
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 25
- },
+/obj/structure/machinery/power/apc/power/north,
/obj/effect/landmark/objective_landmark/close,
/turf/open/floor/strata,
/area/strata/ug/interior/outpost/jung/dorms/admin4)
@@ -16383,10 +16318,7 @@
/turf/open/auto_turf/snow/brown_base/layer1,
/area/strata/ag/exterior/paths/southresearch)
"bmP" = (
-/obj/structure/machinery/power/apc{
- pixel_y = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/south,
/turf/open/floor/interior/plastic,
/area/strata/ag/interior/paths/cabin_area/central)
"bmQ" = (
@@ -17208,10 +17140,7 @@
dir = 1;
pixel_y = 20
},
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 25
- },
+/obj/structure/machinery/power/apc/power/north,
/turf/open/floor/strata/cyan1/east,
/area/strata/ug/interior/outpost/jung/dorms/med1)
"bpZ" = (
@@ -18735,11 +18664,7 @@
"bwV" = (
/obj/structure/surface/rack,
/obj/item/storage/bible/booze,
-/obj/structure/machinery/power/apc{
- dir = 8;
- pixel_x = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/west,
/turf/open/floor/strata,
/area/strata/ag/interior/disposals)
"bwW" = (
@@ -18823,10 +18748,7 @@
/turf/open/floor/strata/fake_wood,
/area/strata/ug/interior/jungle/deep/minehead)
"bxn" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 25
- },
+/obj/structure/machinery/power/apc/power/north,
/obj/structure/kitchenspike,
/turf/open/floor/strata/fake_wood,
/area/strata/ug/interior/jungle/deep/minehead)
@@ -18881,11 +18803,7 @@
/turf/open/auto_turf/snow/brown_base/layer2,
/area/strata/ag/exterior/nearlz2)
"bxE" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/strata/floor3/east,
/area/strata/ag/interior/administration)
"bxF" = (
@@ -19165,11 +19083,7 @@
/obj/structure/machinery/light/small{
dir = 8
},
-/obj/structure/machinery/power/apc{
- dir = 8;
- pixel_x = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/west,
/turf/open/floor/strata/floor3,
/area/strata/ag/interior/outpost/admin)
"bzd" = (
@@ -19256,10 +19170,7 @@
/turf/open/floor/strata/fake_wood,
/area/strata/ag/interior/outpost/engi/drome)
"bzx" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 25
- },
+/obj/structure/machinery/power/apc/power/north,
/turf/open/floor/strata,
/area/strata/ag/interior/outpost/engi/drome)
"bzG" = (
@@ -19720,10 +19631,7 @@
/turf/open/floor/strata/orange_cover,
/area/strata/ag/interior/outpost/engi/drome)
"bDv" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 25
- },
+/obj/structure/machinery/power/apc/power/north,
/turf/open/floor/strata/multi_tiles,
/area/strata/ag/interior/dorms/hive)
"bDy" = (
@@ -20408,10 +20316,7 @@
/turf/open/floor/strata/floor2,
/area/strata/ag/interior/outpost/med)
"bKn" = (
-/obj/structure/machinery/power/apc{
- pixel_y = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/south,
/turf/open/floor/strata/floor3,
/area/strata/ag/interior/outpost/gen/bball)
"bKp" = (
@@ -20649,10 +20554,7 @@
/turf/open/gm/river,
/area/strata/ag/exterior/nearlz2)
"bNm" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 25
- },
+/obj/structure/machinery/power/apc/power/north,
/turf/open/floor/strata/multi_tiles/southwest,
/area/strata/ag/exterior/research_decks)
"bNq" = (
@@ -20700,11 +20602,7 @@
dir = 4
},
/obj/effect/landmark/survivor_spawner,
-/obj/structure/machinery/power/apc{
- dir = 8;
- pixel_x = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/west,
/turf/open/floor/strata/floor2,
/area/strata/ag/interior/outpost/med)
"bOq" = (
@@ -23334,18 +23232,11 @@
"cnV" = (
/obj/item/stack/catwalk,
/obj/item/tool/wrench,
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 25
- },
+/obj/structure/machinery/power/apc/power/north,
/turf/open/floor/almayer/plate,
/area/strata/ag/interior/outpost/engi/drome/shuttle)
"cnZ" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/strata/red1,
/area/strata/ag/interior/dorms/flight_control)
"coa" = (
@@ -23369,10 +23260,7 @@
/area/strata/ag/interior/outpost/canteen/bar)
"coi" = (
/obj/structure/reagent_dispensers/beerkeg,
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 25
- },
+/obj/structure/machinery/power/apc/power/north,
/turf/open/floor/strata/cyan2/east,
/area/strata/ag/interior/outpost/canteen/bar)
"cok" = (
@@ -23656,11 +23544,7 @@
/turf/open/floor/strata,
/area/strata/ag/interior/outpost/canteen)
"crM" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/strata/fake_wood,
/area/strata/ag/interior/dorms)
"crN" = (
@@ -25013,10 +24897,7 @@
/turf/open/floor/prison/darkyellowfull2,
/area/strata/ag/exterior/research_decks)
"era" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 25
- },
+/obj/structure/machinery/power/apc/power/north,
/turf/open/floor/strata/floor2,
/area/strata/ug/interior/jungle/deep/structures/engi)
"erq" = (
@@ -25951,11 +25832,7 @@
/obj/structure/flora/pottedplant{
icon_state = "pottedplant_22"
},
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/strata/red1,
/area/strata/ag/interior/landingzone_checkpoint)
"gih" = (
@@ -26310,9 +26187,7 @@
/turf/closed/wall/strata_outpost/reinforced,
/area/strata/ag/interior/tcomms)
"gSz" = (
-/obj/structure/machinery/power/apc{
- dir = 1
- },
+/obj/structure/machinery/power/apc/power/north,
/turf/open/floor/plating,
/area/strata/ag/exterior/marsh/center)
"gSR" = (
@@ -26425,11 +26300,7 @@
/turf/open/floor/prison/darkyellowfull2,
/area/strata/ag/interior/outpost/engi)
"haU" = (
-/obj/structure/machinery/power/apc{
- dir = 4;
- pixel_x = -28;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/west,
/turf/open/floor/plating,
/area/strata/ag/exterior/marsh/crash)
"haZ" = (
@@ -26825,11 +26696,7 @@
/turf/open/auto_turf/ice/layer2,
/area/strata/ag/exterior/nearlz2)
"ibE" = (
-/obj/structure/machinery/power/apc{
- dir = 8;
- pixel_x = -23;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/west,
/turf/open/floor/strata/floor3/east,
/area/strata/ag/exterior/vanyard)
"ibH" = (
@@ -27112,11 +26979,7 @@
/turf/open/floor/strata/multi_tiles,
/area/strata/ag/interior/dorms/hive)
"iAA" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/obj/structure/closet/emcloset,
/turf/open/floor/strata,
/area/strata/ag/interior/tcomms)
@@ -27897,10 +27760,7 @@
dir = 1;
pixel_y = 20
},
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 25
- },
+/obj/structure/machinery/power/apc/power/north,
/turf/open/floor/strata,
/area/strata/ug/interior/outpost/jung/dorms/med2)
"kdm" = (
@@ -28073,11 +27933,7 @@
/obj/structure/platform/strata/metal{
dir = 1
},
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/plating,
/area/strata/ag/exterior/paths/dorms_quad)
"kxF" = (
@@ -28608,10 +28464,7 @@
/area/strata/ug/interior/jungle/platform/east/scrub)
"lxp" = (
/obj/structure/machinery/photocopier,
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 25
- },
+/obj/structure/machinery/power/apc/power/north,
/turf/open/floor/strata,
/area/strata/ug/interior/outpost/jung/dorms/admin1)
"lyv" = (
@@ -28695,11 +28548,7 @@
/turf/open/auto_turf/strata_grass/layer1,
/area/strata/ug/interior/jungle/deep/north_carp)
"lIG" = (
-/obj/structure/machinery/power/apc{
- dir = 4;
- pixel_x = 28;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/east,
/turf/open/floor/strata,
/area/strata/ag/interior/landingzone_checkpoint)
"lIR" = (
@@ -29424,10 +29273,7 @@
/turf/open/asphalt/cement,
/area/strata/ug/interior/jungle/platform/east/scrub)
"mWM" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 25
- },
+/obj/structure/machinery/power/apc/power/north,
/obj/effect/decal/cleanable/blood,
/obj/effect/landmark/objective_landmark/medium,
/turf/open/floor/strata/white_cyan2/west,
@@ -30673,12 +30519,8 @@
/turf/open/floor/plating/platebot,
/area/strata/ag/interior/outpost/engi/drome/shuttle)
"pGf" = (
-/obj/structure/machinery/power/apc{
- dir = 8;
- pixel_x = -23;
- start_charge = 0
- },
-/turf/open/auto_turf/snow/brown_base/layer2,
+/obj/structure/machinery/power/apc/no_power/west,
+/turf/open/floor/plating,
/area/strata/ag/exterior/tcomms/tcomms_deck)
"pGt" = (
/turf/closed/shuttle/ert{
@@ -31796,10 +31638,7 @@
/turf/open/auto_turf/strata_grass/layer1,
/area/strata/ug/interior/jungle/deep/south_dorms)
"rSE" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 25
- },
+/obj/structure/machinery/power/apc/power/north,
/obj/structure/pipes/standard/simple/hidden/cyan{
dir = 4
},
@@ -32115,11 +31954,7 @@
/obj/structure/flora/pottedplant{
icon_state = "pottedplant_22"
},
-/obj/structure/machinery/power/apc{
- dir = 8;
- pixel_x = -24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/west,
/turf/open/floor/strata/red1,
/area/strata/ag/interior/research_decks/security)
"sDE" = (
@@ -32865,10 +32700,7 @@
/turf/open/auto_turf/ice/layer0,
/area/strata/ag/exterior/marsh/center)
"tZF" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 25
- },
+/obj/structure/machinery/power/apc/power/north,
/turf/open/floor/strata/white_cyan2/west,
/area/strata/ug/interior/outpost/jung/dorms/sec2)
"tZV" = (
@@ -33317,10 +33149,7 @@
/turf/open/auto_turf/ice/layer0,
/area/strata/ag/exterior/nearlz2)
"uTv" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 25
- },
+/obj/structure/machinery/power/apc/power/north,
/turf/open/floor/strata/white_cyan2/west,
/area/strata/ug/interior/outpost/jung/dorms/admin3)
"uTL" = (
@@ -33819,11 +33648,7 @@
/obj/structure/flora/pottedplant{
icon_state = "pottedplant_22"
},
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 24;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/turf/open/floor/prison/darkredfull2,
/area/strata/ag/interior/landingzone_checkpoint)
"vMr" = (
@@ -33874,10 +33699,7 @@
/turf/open/floor/strata/floor3/east,
/area/strata/ug/interior/outpost/jung/dorms/admin3)
"vTN" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 25
- },
+/obj/structure/machinery/power/apc/power/north,
/obj/effect/decal/cleanable/blood,
/obj/effect/decal/cleanable/blood/gibs/core,
/turf/open/floor/strata/white_cyan2/west,
diff --git a/maps/map_files/USS_Almayer/USS_Almayer.dmm b/maps/map_files/USS_Almayer/USS_Almayer.dmm
index b4a195ae5969..b5181e0f77f6 100644
--- a/maps/map_files/USS_Almayer/USS_Almayer.dmm
+++ b/maps/map_files/USS_Almayer/USS_Almayer.dmm
@@ -214,9 +214,7 @@
/turf/open/floor/almayer/plate,
/area/almayer/living/offices/flight)
"abH" = (
-/obj/structure/machinery/power/apc/almayer{
- dir = 1
- },
+/obj/structure/machinery/power/apc/almayer/north,
/turf/open/floor/almayer,
/area/almayer/living/offices/flight)
"abK" = (
@@ -229,15 +227,6 @@
},
/turf/open/floor/wood/ship,
/area/almayer/living/basketball)
-"abQ" = (
-/obj/item/device/radio/intercom{
- freerange = 1;
- name = "General Listening Channel";
- pixel_y = 28
- },
-/obj/structure/machinery/cm_vending/clothing/staff_officer_armory,
-/turf/open/floor/almayer/redfull,
-/area/almayer/command/cic)
"abR" = (
/obj/item/tank/phoron,
/turf/open/floor/almayer/redfull,
@@ -772,9 +761,7 @@
/turf/open/floor/almayer/plate,
/area/almayer/living/officer_study)
"aeP" = (
-/obj/structure/machinery/power/apc/almayer{
- dir = 1
- },
+/obj/structure/machinery/power/apc/almayer/north,
/turf/open/floor/almayer/plate,
/area/almayer/living/officer_study)
"aeQ" = (
@@ -904,9 +891,7 @@
/turf/open/floor/prison/kitchen,
/area/almayer/living/cafeteria_officer)
"afJ" = (
-/obj/structure/machinery/power/apc/almayer{
- dir = 1
- },
+/obj/structure/machinery/power/apc/almayer/north,
/turf/open/floor/almayer/plate,
/area/almayer/living/cafeteria_officer)
"afK" = (
@@ -929,9 +914,7 @@
/turf/open/floor/almayer/plate,
/area/almayer/engineering/starboard_atmos)
"afN" = (
-/obj/structure/machinery/power/apc/almayer{
- dir = 1
- },
+/obj/structure/machinery/power/apc/almayer/north,
/turf/open/floor/almayer/cargo_arrow,
/area/almayer/engineering/starboard_atmos)
"afO" = (
@@ -1706,9 +1689,7 @@
/turf/open/floor/almayer,
/area/almayer/lifeboat_pumps/north2)
"amI" = (
-/obj/structure/machinery/power/apc/almayer{
- dir = 1
- },
+/obj/structure/machinery/power/apc/almayer/north,
/turf/open/floor/almayer/silver/north,
/area/almayer/command/cichallway)
"amM" = (
@@ -2105,9 +2086,7 @@
/turf/open/floor/plating/almayer/no_build,
/area/almayer/stair_clone/upper)
"apt" = (
-/obj/structure/machinery/power/apc/almayer{
- dir = 1
- },
+/obj/structure/machinery/power/apc/almayer/north,
/turf/open/floor/almayer/plate,
/area/almayer/living/pilotbunks)
"apz" = (
@@ -2413,9 +2392,8 @@
/obj/structure/machinery/light{
dir = 1
},
-/obj/structure/machinery/power/apc/almayer{
- cell_type = /obj/item/cell/hyper;
- dir = 1
+/obj/structure/machinery/power/apc/almayer/north{
+ cell_type = /obj/item/cell/hyper
},
/turf/open/floor/almayer/plate,
/area/almayer/command/telecomms)
@@ -2483,10 +2461,10 @@
icon_state = "SE-out"
},
/obj/structure/machinery/door_control{
+ access_modified = 1;
id = "OTStore";
name = "Shutters";
pixel_y = -24;
- access_modified = 1;
req_one_access_txt = "35"
},
/obj/structure/surface/rack,
@@ -2511,9 +2489,7 @@
/turf/open/floor/almayer/silver/north,
/area/almayer/command/cic)
"arG" = (
-/obj/structure/machinery/power/apc/almayer/hardened{
- dir = 1
- },
+/obj/structure/machinery/power/apc/almayer/hardened/north,
/turf/open/floor/almayer/silver/north,
/area/almayer/command/cic)
"arH" = (
@@ -2868,9 +2844,7 @@
/turf/open/floor/almayer/test_floor4,
/area/almayer/command/cic)
"atS" = (
-/obj/structure/machinery/power/apc/almayer{
- dir = 1
- },
+/obj/structure/machinery/power/apc/almayer/north,
/turf/open/floor/plating/plating_catwalk,
/area/almayer/maint/hull/lower/stern)
"atT" = (
@@ -3156,9 +3130,7 @@
/turf/open/floor/plating/plating_catwalk,
/area/almayer/living/pilotbunks)
"avV" = (
-/obj/structure/machinery/power/apc/almayer{
- dir = 1
- },
+/obj/structure/machinery/power/apc/almayer/north,
/obj/structure/bed/chair,
/turf/open/floor/grass,
/area/almayer/living/starboard_garden)
@@ -3320,6 +3292,14 @@
/obj/structure/surface/table/reinforced/almayer_B,
/obj/structure/machinery/faxmachine/uscm/command,
/obj/item/device/megaphone,
+/obj/structure/machinery/computer/cameras/almayer_brig{
+ desc = "Used to access the various cameras in the security brig.";
+ dir = 8;
+ layer = 2.99;
+ name = "brig cameras console";
+ pixel_x = 17;
+ pixel_y = 12
+ },
/turf/open/floor/almayer/plate,
/area/almayer/command/cic)
"awQ" = (
@@ -3347,9 +3327,7 @@
pixel_x = -3;
pixel_y = 4
},
-/obj/structure/machinery/power/apc/almayer{
- dir = 1
- },
+/obj/structure/machinery/power/apc/almayer/north,
/turf/open/floor/almayer/sterile_green,
/area/almayer/medical/hydroponics)
"awR" = (
@@ -3933,36 +3911,12 @@
},
/turf/open/floor/almayer/mono,
/area/almayer/lifeboat_pumps/north2)
-"azV" = (
-/obj/structure/surface/table/reinforced/almayer_B,
-/obj/structure/window/reinforced/toughened{
- dir = 8
- },
-/obj/structure/machinery/computer/shuttle/dropship/flight/remote_control{
- dir = 4;
- name = "Normandy Remote Control Console";
- shuttleId = "dropship_normandy"
- },
-/turf/open/floor/almayer/plate,
-/area/almayer/command/cic)
"azW" = (
/obj/structure/machinery/door/window/westright{
dir = 2
},
/turf/open/floor/plating/plating_catwalk,
/area/almayer/command/cic)
-"azX" = (
-/obj/structure/surface/table/reinforced/almayer_B,
-/obj/structure/window/reinforced/toughened{
- dir = 4
- },
-/obj/structure/machinery/computer/shuttle/dropship/flight/remote_control{
- dir = 8;
- name = "Alamo Remote Control Console";
- shuttleId = "dropship_alamo"
- },
-/turf/open/floor/almayer/plate,
-/area/almayer/command/cic)
"azZ" = (
/obj/structure/machinery/keycard_auth,
/obj/structure/surface/table/reinforced/black,
@@ -4454,9 +4408,7 @@
/turf/open/floor/almayer/sterile_green_corner,
/area/almayer/medical/morgue)
"aCp" = (
-/obj/structure/machinery/power/apc/almayer{
- dir = 1
- },
+/obj/structure/machinery/power/apc/almayer/north,
/turf/open/floor/almayer/sterile_green_side/north,
/area/almayer/medical/upper_medical)
"aCt" = (
@@ -4739,9 +4691,7 @@
icon_state = "NW-out";
pixel_y = 1
},
-/obj/structure/machinery/power/apc/almayer{
- dir = 4
- },
+/obj/structure/machinery/power/apc/almayer/east,
/turf/open/floor/almayer/plate,
/area/almayer/hallways/lower/starboard_umbilical)
"aEg" = (
@@ -5345,9 +5295,7 @@
/turf/open/floor/plating,
/area/almayer/medical/medical_science)
"aIq" = (
-/obj/structure/machinery/power/apc/almayer{
- dir = 1
- },
+/obj/structure/machinery/power/apc/almayer/north,
/turf/open/floor/almayer,
/area/almayer/squads/alpha_bravo_shared)
"aIr" = (
@@ -6704,9 +6652,7 @@
/turf/open/floor/almayer/plate,
/area/almayer/living/captain_mess)
"aRC" = (
-/obj/structure/machinery/power/apc/almayer{
- dir = 1
- },
+/obj/structure/machinery/power/apc/almayer/north,
/turf/open/floor/almayer/plate,
/area/almayer/living/captain_mess)
"aRE" = (
@@ -6994,7 +6940,7 @@
/turf/open/floor/almayer/test_floor4,
/area/almayer/squads/bravo)
"aTx" = (
-/obj/structure/machinery/power/apc/almayer,
+/obj/structure/machinery/power/apc/almayer/south,
/obj/structure/surface/table/almayer,
/obj/item/tool/hand_labeler,
/turf/open/floor/almayer/orange/east,
@@ -7406,9 +7352,7 @@
/turf/open/floor/almayer/red/north,
/area/almayer/shipboard/brig/chief_mp_office)
"aWk" = (
-/obj/structure/machinery/power/apc/almayer{
- dir = 1
- },
+/obj/structure/machinery/power/apc/almayer/north,
/turf/open/floor/almayer/plate,
/area/almayer/living/bridgebunks)
"aWm" = (
@@ -7628,9 +7572,7 @@
/turf/open/floor/almayer/sterile_green_corner,
/area/almayer/medical/operating_room_one)
"aYR" = (
-/obj/structure/machinery/power/apc/almayer{
- dir = 1
- },
+/obj/structure/machinery/power/apc/almayer/north,
/turf/open/floor/almayer/sterile_green_side/north,
/area/almayer/medical/operating_room_two)
"aZe" = (
@@ -7657,9 +7599,7 @@
/turf/open/floor/wood/ship,
/area/almayer/living/chapel)
"aZs" = (
-/obj/structure/machinery/power/apc/almayer{
- dir = 1
- },
+/obj/structure/machinery/power/apc/almayer/north,
/turf/open/floor/wood/ship,
/area/almayer/living/chapel)
"aZv" = (
@@ -8436,9 +8376,7 @@
/turf/open/floor/plating/plating_catwalk,
/area/almayer/squads/alpha)
"bfz" = (
-/obj/structure/machinery/power/apc/almayer{
- dir = 1
- },
+/obj/structure/machinery/power/apc/almayer/north,
/obj/structure/disposalpipe/segment{
dir = 4
},
@@ -8516,9 +8454,7 @@
/area/almayer/hallways/hangar)
"bgk" = (
/obj/structure/surface/table/almayer,
-/obj/structure/machinery/power/apc/almayer{
- dir = 8
- },
+/obj/structure/machinery/power/apc/almayer/west,
/obj/structure/machinery/reagentgrinder{
pixel_y = 3
},
@@ -8748,9 +8684,7 @@
/turf/open/floor/almayer/bluefull,
/area/almayer/living/bridgebunks)
"bhR" = (
-/obj/structure/machinery/power/apc/almayer{
- dir = 1
- },
+/obj/structure/machinery/power/apc/almayer/north,
/turf/open/floor/almayer/blue/north,
/area/almayer/hallways/upper/fore_hallway)
"bhT" = (
@@ -8808,9 +8742,7 @@
/area/almayer/medical/chemistry)
"biy" = (
/obj/structure/pipes/unary/freezer,
-/obj/structure/machinery/power/apc/almayer{
- dir = 1
- },
+/obj/structure/machinery/power/apc/almayer/north,
/obj/structure/sign/safety/autodoc{
pixel_x = 20;
pixel_y = 32
@@ -9068,9 +9000,7 @@
/turf/open/floor/almayer/silver/east,
/area/almayer/living/cryo_cells)
"blf" = (
-/obj/structure/machinery/power/apc/almayer{
- dir = 1
- },
+/obj/structure/machinery/power/apc/almayer/north,
/obj/structure/surface/table/almayer,
/obj/item/paper_bin/uscm,
/obj/item/tool/pen,
@@ -10149,9 +10079,7 @@
/turf/open/floor/almayer/sterile_green_corner/north,
/area/almayer/medical/operating_room_one)
"buj" = (
-/obj/structure/machinery/power/apc/almayer{
- dir = 1
- },
+/obj/structure/machinery/power/apc/almayer/north,
/turf/open/floor/almayer/sterile_green_side/north,
/area/almayer/medical/operating_room_one)
"bur" = (
@@ -10454,7 +10382,7 @@
/turf/open/floor/almayer/redfull,
/area/almayer/living/cryo_cells)
"bxA" = (
-/obj/structure/machinery/power/apc/almayer/hardened,
+/obj/structure/machinery/power/apc/almayer/hardened/south,
/obj/effect/decal/warning_stripes{
icon_state = "SW-out";
pixel_x = -1
@@ -10602,7 +10530,7 @@
/turf/open/floor/almayer/dark_sterile,
/area/almayer/medical/lockerroom)
"bzo" = (
-/obj/structure/machinery/power/apc/almayer,
+/obj/structure/machinery/power/apc/almayer/south,
/turf/open/floor/almayer/sterile_green_side,
/area/almayer/medical/operating_room_four)
"bzz" = (
@@ -10708,9 +10636,7 @@
/turf/open/floor/almayer/red/north,
/area/almayer/shipboard/weapon_room)
"bAP" = (
-/obj/structure/machinery/power/apc/almayer{
- dir = 1
- },
+/obj/structure/machinery/power/apc/almayer/north,
/turf/open/floor/almayer/red/north,
/area/almayer/shipboard/weapon_room)
"bAQ" = (
@@ -11422,9 +11348,7 @@
/turf/open/floor/almayer/red/southwest,
/area/almayer/living/cryo_cells)
"bFt" = (
-/obj/structure/machinery/power/apc/almayer{
- dir = 4
- },
+/obj/structure/machinery/power/apc/almayer/east,
/turf/open/floor/almayer/orange/east,
/area/almayer/engineering/upper_engineering/starboard)
"bFA" = (
@@ -12252,8 +12176,8 @@
/area/almayer/hallways/lower/starboard_midship_hallway)
"bMg" = (
/obj/structure/pipes/vents/pump/no_boom/gas{
- vent_tag = "Synth Bay";
- dir = 8
+ dir = 8;
+ vent_tag = "Synth Bay"
},
/turf/open/floor/almayer/aicore/no_build,
/area/almayer/command/airoom)
@@ -13155,12 +13079,6 @@
},
/turf/open/floor/wood/ship,
/area/almayer/living/basketball)
-"bTu" = (
-/obj/structure/machinery/power/apc/almayer{
- dir = 8
- },
-/turf/open/floor/almayer/sterile_green_side/northwest,
-/area/almayer/medical/lower_medical_medbay)
"bTx" = (
/turf/open/floor/wood/ship,
/area/almayer/shipboard/sea_office)
@@ -14093,9 +14011,7 @@
"cdm" = (
/obj/effect/landmark/ert_spawns/distress_cryo,
/obj/effect/landmark/late_join,
-/obj/structure/machinery/power/apc/almayer{
- dir = 1
- },
+/obj/structure/machinery/power/apc/almayer/north,
/turf/open/floor/plating/plating_catwalk,
/area/almayer/living/cryo_cells)
"cdn" = (
@@ -14466,9 +14382,7 @@
/turf/open/floor/plating/plating_catwalk,
/area/almayer/squads/charlie)
"chS" = (
-/obj/structure/machinery/power/apc/almayer{
- dir = 1
- },
+/obj/structure/machinery/power/apc/almayer/north,
/obj/structure/disposalpipe/segment{
dir = 4
},
@@ -15108,9 +15022,7 @@
dir = 4;
pixel_x = -17
},
-/obj/structure/machinery/power/apc/almayer{
- dir = 1
- },
+/obj/structure/machinery/power/apc/almayer/north,
/turf/open/floor/almayer/silver/north,
/area/almayer/command/computerlab)
"cnH" = (
@@ -15235,7 +15147,7 @@
/turf/open/floor/almayer/emerald/east,
/area/almayer/squads/charlie)
"coj" = (
-/obj/structure/machinery/power/apc/almayer,
+/obj/structure/machinery/power/apc/almayer/south,
/obj/structure/surface/table/almayer,
/obj/item/tool/hand_labeler,
/turf/open/floor/almayer/blue/east,
@@ -16202,8 +16114,8 @@
desc = "A pneumatic delivery unit.";
icon_state = "delivery_engi";
name = "Returns";
- pixel_y = 28;
- pixel_x = 25
+ pixel_x = 25;
+ pixel_y = 28
},
/obj/structure/surface/rack,
/turf/open/floor/almayer/aicore/no_build,
@@ -16495,54 +16407,10 @@
/turf/open/floor/almayer/aicore/no_build,
/area/almayer/command/airoom)
"cOY" = (
-/obj/item/clothing/under/blackskirt{
- desc = "A stylish skirt, in a business-black and red colour scheme.";
- name = "liaison's skirt"
- },
-/obj/item/clothing/under/suit_jacket/charcoal{
- desc = "A professional black suit and blue tie. A combination popular among government agents and corporate Yes-Men alike.";
- name = "liaison's black suit"
- },
-/obj/item/clothing/under/suit_jacket/navy{
- desc = "A navy suit and red tie, intended for the Almayer's finest. And accountants.";
- name = "liaison's navy suit"
- },
-/obj/item/clothing/under/suit_jacket/trainee,
-/obj/item/clothing/under/liaison_suit/charcoal,
-/obj/item/clothing/under/liaison_suit/blazer,
-/obj/item/clothing/suit/storage/snow_suit/liaison,
-/obj/item/clothing/gloves/black,
-/obj/item/clothing/gloves/marine/dress,
-/obj/item/clothing/glasses/sunglasses/big,
-/obj/item/clothing/accessory/blue,
-/obj/item/clothing/accessory/red,
/obj/structure/machinery/status_display{
pixel_x = -32
},
-/obj/item/clothing/accessory/black,
-/obj/item/clothing/accessory/green,
-/obj/item/clothing/accessory/gold,
-/obj/item/clothing/accessory/purple,
-/obj/item/clothing/under/liaison_suit/corporate_formal,
-/obj/item/clothing/under/liaison_suit/field,
-/obj/item/clothing/under/liaison_suit/ivy,
-/obj/item/clothing/under/liaison_suit/blue,
-/obj/item/clothing/under/liaison_suit/brown,
-/obj/item/clothing/under/liaison_suit/black,
-/obj/item/clothing/suit/storage/jacket/marine/vest,
-/obj/item/clothing/suit/storage/jacket/marine/vest/grey,
-/obj/item/clothing/suit/storage/jacket/marine/vest/tan,
-/obj/item/clothing/suit/storage/jacket/marine/bomber,
-/obj/item/clothing/suit/storage/jacket/marine/bomber/red,
-/obj/item/clothing/suit/storage/jacket/marine/bomber/grey,
-/obj/item/clothing/suit/storage/jacket/marine/corporate,
-/obj/item/clothing/suit/storage/jacket/marine/corporate/black,
-/obj/item/clothing/suit/storage/jacket/marine/corporate/blue,
-/obj/item/clothing/suit/storage/jacket/marine/corporate/brown,
-/obj/item/clothing/suit/storage/jacket/marine/corporate/formal,
-/obj/structure/closet/cabinet{
- storage_capacity = 35
- },
+/obj/structure/machinery/cm_vending/clothing/dress/corporate_liaison,
/turf/open/floor/wood/ship,
/area/almayer/command/corporateliaison)
"cPg" = (
@@ -16779,9 +16647,7 @@
/turf/open/floor/almayer/green/north,
/area/almayer/hallways/lower/starboard_midship_hallway)
"cVq" = (
-/obj/structure/machinery/power/apc/almayer/hardened{
- dir = 1
- },
+/obj/structure/machinery/power/apc/almayer/hardened/north,
/turf/open/floor/almayer,
/area/almayer/command/corporateliaison)
"cVt" = (
@@ -16863,6 +16729,10 @@
},
/turf/open/floor/almayer/green/northwest,
/area/almayer/living/offices)
+"cWw" = (
+/obj/structure/machinery/cm_vending/gear/staff_officer_armory,
+/turf/open/floor/almayer/redfull,
+/area/almayer/command/cic)
"cWy" = (
/obj/structure/closet/secure_closet/freezer/fridge,
/obj/item/reagent_container/food/snacks/packaged_burger,
@@ -17093,9 +16963,7 @@
/turf/closed/wall/almayer/aicore/hull,
/area/almayer/command/airoom)
"daF" = (
-/obj/structure/machinery/power/apc/almayer{
- dir = 1
- },
+/obj/structure/machinery/power/apc/almayer/north,
/turf/open/floor/plating/plating_catwalk,
/area/almayer/maint/hull/lower/l_f_p)
"daI" = (
@@ -17818,8 +17686,8 @@
/obj/structure/machinery/door_control{
id = "ARES JoeCryo";
name = "ARES WorkingJoe Bay Shutters";
- req_one_access_txt = "91;92";
- pixel_x = 24
+ pixel_x = 24;
+ req_one_access_txt = "91;92"
},
/obj/structure/machinery/camera/autoname/almayer/containment/ares{
autoname = 0;
@@ -17854,9 +17722,7 @@
/turf/open/floor/almayer,
/area/almayer/living/chapel)
"duo" = (
-/obj/structure/machinery/power/apc/almayer{
- dir = 8
- },
+/obj/structure/machinery/power/apc/almayer/west,
/turf/open/floor/prison/kitchen,
/area/almayer/living/grunt_rnr)
"dut" = (
@@ -18109,9 +17975,9 @@
layer = 3.3
},
/obj/structure/machinery/camera/autoname/almayer/containment/ares{
- dir = 8;
autoname = 0;
- c_tag = "AI - Secondary Processors"
+ c_tag = "AI - Secondary Processors";
+ dir = 8
},
/turf/open/floor/almayer/aicore/no_build/ai_floor2,
/area/almayer/command/airoom)
@@ -18379,7 +18245,7 @@
/turf/open/floor/almayer/plate,
/area/almayer/maint/hull/lower/stern)
"dEm" = (
-/obj/structure/machinery/power/apc/almayer,
+/obj/structure/machinery/power/apc/almayer/south,
/obj/effect/decal/warning_stripes{
icon_state = "S"
},
@@ -19657,10 +19523,10 @@
req_one_access_txt = "90;91;92"
},
/obj/structure/machinery/camera/autoname/almayer/containment/ares{
- dir = 4;
- pixel_y = -8;
autoname = 0;
- c_tag = "AI - Main Staircase"
+ c_tag = "AI - Main Staircase";
+ dir = 4;
+ pixel_y = -8
},
/obj/effect/step_trigger/clone_cleaner,
/turf/open/floor/almayer/aicore/no_build/ai_silver/west,
@@ -19918,7 +19784,14 @@
"ekZ" = (
/obj/structure/surface/table/almayer,
/obj/structure/machinery/computer/secure_data{
- dir = 4
+ dir = 4;
+ pixel_y = 10
+ },
+/obj/structure/machinery/computer/cameras/almayer_brig{
+ desc = "Used to access the various cameras in the security brig.";
+ dir = 4;
+ name = "brig cameras console";
+ pixel_y = -11
},
/turf/open/floor/almayer/red/west,
/area/almayer/shipboard/brig/warden_office)
@@ -20066,9 +19939,7 @@
/turf/open/floor/plating/plating_catwalk,
/area/almayer/maint/hull/lower/s_bow)
"eoy" = (
-/obj/structure/machinery/power/apc/almayer{
- dir = 1
- },
+/obj/structure/machinery/power/apc/almayer/north,
/turf/open/floor/almayer/plate,
/area/almayer/hallways/lower/port_midship_hallway)
"eoE" = (
@@ -20301,13 +20172,13 @@
desc = "A large handheld tool used to override various machine functions. Primarily used to pulse Airlock and APC wires on a shortwave frequency. It contains a small data buffer as well. This one is comically oversized. Made in Texas.";
icon_state = "multitool_big";
name = "\improper Oversized Security Access Tuner";
- pixel_y = 11;
- pixel_x = 4
+ pixel_x = 4;
+ pixel_y = 11
},
/obj/item/stack/sheet/cardboard/medium_stack{
- pixel_y = -6;
+ layer = 3.01;
pixel_x = -7;
- layer = 3.01
+ pixel_y = -6
},
/turf/open/floor/almayer,
/area/almayer/squads/alpha_bravo_shared)
@@ -20364,9 +20235,7 @@
/turf/open/floor/almayer/red,
/area/almayer/command/lifeboat)
"ets" = (
-/obj/structure/machinery/power/apc/almayer{
- dir = 4
- },
+/obj/structure/machinery/power/apc/almayer/east,
/obj/effect/decal/warning_stripes{
icon_state = "N";
layer = 3.33;
@@ -20696,7 +20565,12 @@
/obj/structure/surface/table/almayer,
/obj/item/storage/firstaid/regular,
/obj/item/clipboard,
-/obj/item/tool/pen,
+/obj/item/tool/pen{
+ pixel_y = -17
+ },
+/obj/item/paper_bin/uscm{
+ pixel_y = -16
+ },
/turf/open/floor/almayer/plate,
/area/almayer/squads/req)
"eAI" = (
@@ -20990,9 +20864,9 @@
"eGr" = (
/obj/structure/pipes/standard/simple/hidden/supply/no_boom,
/obj/structure/machinery/camera/autoname/almayer/containment/ares{
- dir = 8;
autoname = 0;
- c_tag = "AI - Records"
+ c_tag = "AI - Records";
+ dir = 8
},
/turf/open/floor/almayer/aicore/no_build,
/area/almayer/command/airoom)
@@ -21348,9 +21222,9 @@
/obj/structure/machinery/door_control{
id = "ARES StairsLock";
name = "ARES Exterior Lockdown";
+ pixel_x = 6;
pixel_y = -24;
- req_one_access_txt = "91;92";
- pixel_x = 6
+ req_one_access_txt = "91;92"
},
/obj/structure/surface/table/reinforced/almayer_B{
indestructible = 1;
@@ -21368,9 +21242,7 @@
/turf/open/floor/almayer/aicore/no_build,
/area/almayer/command/airoom)
"eQm" = (
-/obj/structure/machinery/power/apc/almayer{
- dir = 1
- },
+/obj/structure/machinery/power/apc/almayer/north,
/turf/open/floor/almayer/plate,
/area/almayer/maint/hull/upper/p_bow)
"eQz" = (
@@ -21431,10 +21303,10 @@
pixel_x = 1
},
/obj/structure/machinery/camera/autoname/almayer/containment/ares{
- dir = 8;
- pixel_y = 2;
autoname = 0;
- c_tag = "AI - Reception Exterior"
+ c_tag = "AI - Reception Exterior";
+ dir = 8;
+ pixel_y = 2
},
/turf/open/floor/almayer/silver/east,
/area/almayer/hallways/upper/midship_hallway)
@@ -21607,9 +21479,7 @@
pixel_x = 8;
pixel_y = 18
},
-/obj/structure/machinery/power/apc/almayer{
- dir = 8
- },
+/obj/structure/machinery/power/apc/almayer/west,
/obj/structure/sign/safety/rewire{
pixel_x = -17;
pixel_y = 17
@@ -21776,6 +21646,13 @@
},
/turf/open/floor/almayer/orangecorner/east,
/area/almayer/engineering/upper_engineering/port)
+"eYU" = (
+/obj/structure/disposalpipe/up/almayer{
+ dir = 8;
+ id = "almayerlink_med_req"
+ },
+/turf/closed/wall/almayer/white/reinforced,
+/area/almayer/medical/hydroponics)
"eZm" = (
/turf/closed/wall/almayer,
/area/almayer/maint/hull/upper/p_stern)
@@ -22147,7 +22024,7 @@
pixel_x = 8;
pixel_y = -32
},
-/obj/structure/machinery/power/apc/almayer,
+/obj/structure/machinery/power/apc/almayer/south,
/turf/open/floor/plating/plating_catwalk,
/area/almayer/maint/hull/lower/s_bow)
"fgh" = (
@@ -22304,8 +22181,8 @@
/area/almayer/medical/containment/cell/cl)
"flf" = (
/obj/structure/pipes/vents/pump/no_boom/gas{
- vent_tag = "Records";
- dir = 1
+ dir = 1;
+ vent_tag = "Records"
},
/turf/open/floor/almayer/aicore/no_build,
/area/almayer/command/airoom)
@@ -22321,9 +22198,9 @@
/area/almayer/maint/upper/u_a_p)
"flL" = (
/obj/structure/machinery/camera/autoname/almayer/containment/ares{
- dir = 8;
autoname = 0;
- c_tag = "AI - SynthBay"
+ c_tag = "AI - SynthBay";
+ dir = 8
},
/turf/open/floor/almayer/aicore/no_build,
/area/almayer/command/airoom)
@@ -23034,10 +22911,10 @@
/area/almayer/hallways/lower/repair_bay)
"fCI" = (
/obj/structure/machinery/door/poddoor/shutters/almayer{
+ dir = 4;
id = "ARES JoeCryo";
name = "\improper ARES Synth Bay Shutters";
- plane = -7;
- dir = 4
+ plane = -7
},
/obj/structure/pipes/standard/simple/hidden/supply/no_boom{
dir = 4
@@ -23125,7 +23002,7 @@
/turf/open/floor/almayer/test_floor4,
/area/almayer/command/cichallway)
"fEC" = (
-/obj/structure/machinery/power/apc/almayer,
+/obj/structure/machinery/power/apc/almayer/south,
/turf/open/floor/almayer/plate,
/area/almayer/medical/morgue)
"fEF" = (
@@ -23671,9 +23548,9 @@
/area/almayer/maint/hull/lower/l_f_s)
"fQD" = (
/obj/structure/machinery/camera/autoname/almayer/containment/ares{
- dir = 8;
autoname = 0;
- c_tag = "AI - Core Chamber"
+ c_tag = "AI - Core Chamber";
+ dir = 8
},
/turf/open/floor/almayer/aicore/glowing/no_build/ai_floor3,
/area/almayer/command/airoom)
@@ -24148,20 +24025,6 @@
},
/turf/open/floor/plating,
/area/almayer/engineering/laundry)
-"geg" = (
-/obj/structure/surface/table/almayer,
-/obj/structure/machinery/computer/cameras/hangar{
- dir = 4;
- pixel_y = 12
- },
-/obj/structure/machinery/computer/shuttle/dropship/flight/remote_control{
- dir = 4;
- name = "Normandy Remote Control Console";
- pixel_y = -12;
- shuttleId = "dropship_normandy"
- },
-/turf/open/floor/almayer/redfull,
-/area/almayer/living/offices/flight)
"gei" = (
/obj/structure/sign/safety/ref_bio_storage{
pixel_x = -17;
@@ -24228,7 +24091,7 @@
/obj/structure/pipes/standard/simple/hidden/supply{
dir = 4
},
-/obj/structure/machinery/power/apc/almayer,
+/obj/structure/machinery/power/apc/almayer/south,
/obj/structure/sign/safety/rewire{
pixel_y = -38
},
@@ -24464,9 +24327,7 @@
/turf/open/floor/almayer/plate,
/area/almayer/command/cic)
"gll" = (
-/obj/structure/machinery/power/apc/almayer{
- dir = 1
- },
+/obj/structure/machinery/power/apc/almayer/north,
/turf/open/floor/almayer,
/area/almayer/squads/charlie_delta_shared)
"gls" = (
@@ -24891,9 +24752,7 @@
/turf/open/floor/plating/plating_catwalk,
/area/almayer/maint/hull/upper/u_a_p)
"gtU" = (
-/obj/structure/machinery/power/apc/almayer{
- dir = 8
- },
+/obj/structure/machinery/power/apc/almayer/west,
/obj/structure/sign/safety/rewire{
pixel_x = -17;
pixel_y = 17
@@ -25075,9 +24934,7 @@
density = 0;
pixel_y = 30
},
-/obj/structure/machinery/power/apc/almayer{
- dir = 4
- },
+/obj/structure/machinery/power/apc/almayer/east,
/turf/open/floor/almayer/plate,
/area/almayer/living/numbertwobunks)
"gym" = (
@@ -25281,9 +25138,7 @@
/obj/item/storage/bag/trash{
pixel_x = -3
},
-/obj/structure/machinery/power/apc/almayer{
- dir = 1
- },
+/obj/structure/machinery/power/apc/almayer/north,
/turf/open/floor/plating,
/area/almayer/maint/lower/constr)
"gBW" = (
@@ -25310,9 +25165,8 @@
/turf/open/floor/almayer,
/area/almayer/hallways/hangar)
"gCB" = (
-/obj/structure/machinery/power/apc/almayer/hardened{
- cell_type = /obj/item/cell/hyper;
- dir = 1
+/obj/structure/machinery/power/apc/almayer/hardened/north{
+ cell_type = /obj/item/cell/hyper
},
/obj/effect/decal/warning_stripes{
icon_state = "NW-out";
@@ -25329,10 +25183,10 @@
"gDh" = (
/obj/structure/machinery/door/airlock/almayer/secure/reinforced{
access_modified = 1;
+ dir = 1;
name = "\improper Security Vault";
req_access = null;
- req_one_access_txt = "91;92";
- dir = 1
+ req_one_access_txt = "91;92"
},
/obj/structure/machinery/door/poddoor/almayer/blended/ai_lockdown/aicore{
plane = -6
@@ -25543,9 +25397,7 @@
/turf/open/floor/almayer/test_floor4,
/area/almayer/engineering/ce_room)
"gIm" = (
-/obj/structure/machinery/power/apc/almayer{
- dir = 4
- },
+/obj/structure/machinery/power/apc/almayer/east,
/turf/open/floor/plating/plating_catwalk,
/area/almayer/maint/hull/lower/l_a_p)
"gIz" = (
@@ -25845,7 +25697,7 @@
/obj/structure/sign/safety/maint{
pixel_x = -17
},
-/obj/structure/machinery/power/apc/almayer,
+/obj/structure/machinery/power/apc/almayer/south,
/turf/open/floor/plating/plating_catwalk,
/area/almayer/maint/hull/upper/s_bow)
"gNo" = (
@@ -26006,9 +25858,7 @@
/turf/open/floor/almayer/orangecorner/west,
/area/almayer/hallways/lower/port_umbilical)
"gRP" = (
-/obj/structure/machinery/power/apc/almayer{
- dir = 1
- },
+/obj/structure/machinery/power/apc/almayer/north,
/turf/open/floor/almayer/plate,
/area/almayer/hallways/hangar)
"gSa" = (
@@ -26100,7 +25950,7 @@
/turf/open/floor/almayer/plate,
/area/almayer/shipboard/brig/general_equipment)
"gUi" = (
-/obj/structure/machinery/power/apc/almayer,
+/obj/structure/machinery/power/apc/almayer/south,
/turf/open/floor/plating/plating_catwalk,
/area/almayer/maint/lower/s_bow)
"gUn" = (
@@ -26575,9 +26425,8 @@
/turf/open/floor/almayer/sterile_green_side/west,
/area/almayer/medical/medical_science)
"heo" = (
-/obj/structure/machinery/power/apc/almayer{
- cell_type = /obj/item/cell/hyper;
- dir = 1
+/obj/structure/machinery/power/apc/almayer/north{
+ cell_type = /obj/item/cell/hyper
},
/obj/structure/sign/safety/rewire{
pixel_x = -15;
@@ -27324,7 +27173,7 @@
/obj/structure/pipes/standard/simple/hidden/supply{
dir = 4
},
-/obj/structure/machinery/power/apc/almayer,
+/obj/structure/machinery/power/apc/almayer/south,
/turf/open/floor/almayer/red,
/area/almayer/shipboard/brig/chief_mp_office)
"hsr" = (
@@ -27369,9 +27218,7 @@
/turf/open/floor/almayer/plate,
/area/almayer/maint/hull/lower/l_m_s)
"htk" = (
-/obj/structure/machinery/power/apc/almayer{
- dir = 8
- },
+/obj/structure/machinery/power/apc/almayer/west,
/turf/open/floor/almayer/plate,
/area/almayer/maint/lower/cryo_cells)
"htl" = (
@@ -27417,6 +27264,17 @@
},
/turf/open/floor/almayer/greenfull,
/area/almayer/living/offices)
+"huw" = (
+/obj/structure/surface/table/reinforced/almayer_B,
+/obj/structure/window/reinforced/toughened{
+ dir = 8
+ },
+/obj/structure/machinery/computer/shuttle/dropship/flight/remote_control{
+ dir = 4;
+ name = "Dropship Remote Control Console"
+ },
+/turf/open/floor/almayer/plate,
+/area/almayer/command/cic)
"huD" = (
/obj/structure/machinery/light{
dir = 1
@@ -27608,9 +27466,7 @@
/turf/open/floor/almayer,
/area/almayer/hallways/upper/midship_hallway)
"hyV" = (
-/obj/structure/machinery/power/apc/almayer{
- dir = 4
- },
+/obj/structure/machinery/power/apc/almayer/east,
/obj/structure/sign/safety/rewire{
pixel_x = 32;
pixel_y = 24
@@ -28152,7 +28008,7 @@
/turf/open/floor/almayer/plate,
/area/almayer/maint/hull/upper/s_bow)
"hMN" = (
-/obj/structure/machinery/power/apc/almayer,
+/obj/structure/machinery/power/apc/almayer/south,
/turf/open/floor/almayer/sterile_green_side,
/area/almayer/medical/operating_room_three)
"hNh" = (
@@ -28558,9 +28414,7 @@
dir = 4;
pixel_y = -12
},
-/obj/structure/machinery/power/apc/almayer{
- dir = 4
- },
+/obj/structure/machinery/power/apc/almayer/east,
/obj/structure/sign/safety/rewire{
pixel_x = 32;
pixel_y = 17
@@ -28980,9 +28834,7 @@
/turf/open/floor/prison/kitchen,
/area/almayer/living/grunt_rnr)
"ied" = (
-/obj/structure/machinery/power/apc/almayer{
- dir = 1
- },
+/obj/structure/machinery/power/apc/almayer/north,
/turf/open/floor/almayer,
/area/almayer/maint/hull/upper/u_f_p)
"ien" = (
@@ -29339,9 +29191,9 @@
plane = -7
},
/obj/structure/disposalpipe/up/almayer{
+ dir = 2;
id = "ares_vault_in";
- name = "aicore";
- dir = 2
+ name = "aicore"
},
/obj/structure/machinery/door/poddoor/almayer/blended/ai_lockdown,
/turf/open/floor/almayer/no_build/test_floor4,
@@ -29416,7 +29268,7 @@
/turf/closed/wall/almayer,
/area/almayer/command/securestorage)
"ioV" = (
-/obj/structure/machinery/power/apc/almayer,
+/obj/structure/machinery/power/apc/almayer/south,
/obj/structure/sign/safety/rewire{
pixel_y = -38
},
@@ -29904,9 +29756,7 @@
/turf/open/floor/almayer/plate,
/area/almayer/maint/upper/u_a_s)
"iBl" = (
-/obj/structure/machinery/power/apc/almayer{
- dir = 4
- },
+/obj/structure/machinery/power/apc/almayer/east,
/obj/structure/sign/safety/rewire{
pixel_x = 7;
pixel_y = -30
@@ -30071,9 +29921,7 @@
dir = 4
},
/obj/structure/pipes/standard/simple/hidden/supply,
-/obj/structure/machinery/power/apc/almayer{
- dir = 8
- },
+/obj/structure/machinery/power/apc/almayer/west,
/obj/structure/sign/safety/maint{
pixel_x = -17
},
@@ -30386,7 +30234,7 @@
/obj/structure/pipes/standard/simple/hidden/supply{
dir = 4
},
-/obj/structure/machinery/power/apc/almayer,
+/obj/structure/machinery/power/apc/almayer/south,
/turf/open/floor/plating/plating_catwalk,
/area/almayer/maint/hull/upper/u_f_s)
"iNH" = (
@@ -30554,8 +30402,8 @@
},
/obj/structure/machinery/computer/secure_data{
dir = 4;
- pixel_y = 23;
- layer = 2.99
+ layer = 2.99;
+ pixel_y = 23
},
/turf/open/floor/almayer/red/west,
/area/almayer/shipboard/brig/processing)
@@ -30844,7 +30692,7 @@
/obj/structure/closet/secure_closet/surgical{
pixel_x = -30
},
-/obj/structure/machinery/power/apc/almayer,
+/obj/structure/machinery/power/apc/almayer/south,
/obj/structure/sign/safety/rewire{
pixel_y = -38
},
@@ -31019,9 +30867,7 @@
/turf/open/floor/almayer,
/area/almayer/living/briefing)
"iXW" = (
-/obj/structure/machinery/power/apc/almayer{
- dir = 4
- },
+/obj/structure/machinery/power/apc/almayer/east,
/turf/open/floor/almayer/sterile_green_corner,
/area/almayer/medical/lower_medical_lobby)
"iYe" = (
@@ -31590,7 +31436,16 @@
"jhI" = (
/obj/structure/surface/table/almayer,
/obj/structure/machinery/computer/secure_data{
- dir = 4
+ dir = 4;
+ layer = 2.99;
+ pixel_y = 19
+ },
+/obj/structure/machinery/computer/cameras/almayer_brig{
+ desc = "Used to access the various cameras in the security brig.";
+ dir = 4;
+ layer = 2.99;
+ name = "brig cameras console";
+ pixel_y = 5
},
/turf/open/floor/almayer,
/area/almayer/shipboard/brig/chief_mp_office)
@@ -32034,9 +31889,9 @@
/obj/structure/machinery/door/firedoor/border_only/almayer,
/obj/structure/surface/table/reinforced/almayer_blend,
/obj/item/desk_bell{
+ anchored = 1;
pixel_x = -6;
- pixel_y = 10;
- anchored = 1
+ pixel_y = 10
},
/turf/open/floor/almayer/test_floor4,
/area/almayer/squads/req)
@@ -32315,9 +32170,7 @@
/turf/open/floor/wood/ship,
/area/almayer/command/corporateliaison)
"jvP" = (
-/obj/structure/machinery/power/apc/almayer{
- dir = 1
- },
+/obj/structure/machinery/power/apc/almayer/north,
/turf/open/floor/almayer/plate,
/area/almayer/shipboard/brig/cryo)
"jvX" = (
@@ -32413,9 +32266,7 @@
/turf/open/floor/plating,
/area/almayer/living/bridgebunks)
"jxX" = (
-/obj/structure/machinery/power/apc/almayer{
- dir = 1
- },
+/obj/structure/machinery/power/apc/almayer/north,
/turf/open/floor/almayer/orange/east,
/area/almayer/hallways/lower/starboard_aft_hallway)
"jyb" = (
@@ -32722,9 +32573,7 @@
/turf/open/floor/prison/kitchen,
/area/almayer/living/grunt_rnr)
"jFI" = (
-/obj/structure/machinery/power/apc/almayer{
- dir = 4
- },
+/obj/structure/machinery/power/apc/almayer/east,
/turf/open/floor/almayer/plate,
/area/almayer/maint/hull/upper/u_m_s)
"jFM" = (
@@ -32831,9 +32680,7 @@
/turf/open/floor/almayer/plating/northeast,
/area/almayer/engineering/lower/engine_core)
"jJk" = (
-/obj/structure/machinery/power/apc/almayer{
- dir = 4
- },
+/obj/structure/machinery/power/apc/almayer/east,
/turf/open/floor/almayer/blue/northeast,
/area/almayer/living/port_emb)
"jKn" = (
@@ -33076,6 +32923,12 @@
pixel_y = 10;
req_one_access_txt = "1;21"
},
+/obj/item/paper_bin/uscm{
+ pixel_y = -4
+ },
+/obj/item/tool/pen{
+ pixel_y = -5
+ },
/turf/open/floor/almayer/plate,
/area/almayer/squads/req)
"jOo" = (
@@ -33107,7 +32960,7 @@
/turf/open/floor/almayer/red/east,
/area/almayer/hallways/upper/starboard)
"jOE" = (
-/obj/structure/machinery/power/apc/almayer,
+/obj/structure/machinery/power/apc/almayer/south,
/turf/open/floor/almayer/orange,
/area/almayer/engineering/lower)
"jOG" = (
@@ -33211,6 +33064,15 @@
},
/turf/open/floor/almayer/plate,
/area/almayer/hallways/hangar)
+"jSc" = (
+/obj/item/device/radio/intercom{
+ freerange = 1;
+ name = "General Listening Channel";
+ pixel_y = 28
+ },
+/obj/structure/machinery/cm_vending/gear/staff_officer_armory,
+/turf/open/floor/almayer/redfull,
+/area/almayer/command/cic)
"jSo" = (
/obj/item/tool/warning_cone,
/turf/open/floor/almayer/plate,
@@ -33618,9 +33480,7 @@
/turf/open/floor/almayer/red/east,
/area/almayer/hallways/upper/starboard)
"jZU" = (
-/obj/structure/machinery/power/apc/almayer{
- dir = 1
- },
+/obj/structure/machinery/power/apc/almayer/north,
/turf/open/floor/almayer,
/area/almayer/medical/containment/cell/cl)
"jZY" = (
@@ -33682,9 +33542,7 @@
/turf/open/floor/almayer/bluefull,
/area/almayer/squads/charlie_delta_shared)
"kaO" = (
-/obj/structure/machinery/power/apc/almayer{
- dir = 8
- },
+/obj/structure/machinery/power/apc/almayer/west,
/turf/open/floor/almayer/silver/west,
/area/almayer/hallways/upper/midship_hallway)
"kaQ" = (
@@ -33768,7 +33626,7 @@
/obj/structure/pipes/standard/simple/hidden/supply{
dir = 4
},
-/obj/structure/machinery/camera/autoname/almayer,
+/obj/structure/machinery/camera/autoname/almayer/brig,
/turf/open/floor/almayer,
/area/almayer/shipboard/brig/cells)
"kcg" = (
@@ -33950,9 +33808,7 @@
/turf/open/floor/almayer/plate,
/area/almayer/hallways/lower/vehiclehangar)
"kgV" = (
-/obj/structure/machinery/power/apc/almayer{
- dir = 4
- },
+/obj/structure/machinery/power/apc/almayer/east,
/obj/effect/decal/warning_stripes{
icon_state = "E";
layer = 3.33;
@@ -34442,6 +34298,7 @@
id = "Perma 1";
pixel_y = 24
},
+/obj/structure/machinery/camera/autoname/almayer/brig,
/turf/open/floor/almayer/plate,
/area/almayer/shipboard/brig/perma)
"krA" = (
@@ -34602,9 +34459,7 @@
/turf/open/floor/almayer/red/north,
/area/almayer/shipboard/brig/processing)
"kuK" = (
-/obj/structure/machinery/power/apc/almayer{
- dir = 1
- },
+/obj/structure/machinery/power/apc/almayer/north,
/turf/open/floor/almayer/plate,
/area/almayer/maint/hull/upper/u_m_p)
"kvf" = (
@@ -34630,7 +34485,8 @@
"kvL" = (
/obj/structure/surface/table/almayer,
/obj/structure/machinery/computer/cameras/almayer_network{
- dir = 4
+ dir = 4;
+ pixel_y = 0
},
/turf/open/floor/almayer/red/west,
/area/almayer/shipboard/brig/warden_office)
@@ -34698,9 +34554,7 @@
/turf/open/floor/almayer/dark_sterile,
/area/almayer/living/port_emb)
"kxe" = (
-/obj/structure/machinery/power/apc/almayer{
- dir = 1
- },
+/obj/structure/machinery/power/apc/almayer/north,
/turf/open/floor/almayer/plate,
/area/almayer/maint/hull/lower/p_bow)
"kxo" = (
@@ -35578,9 +35432,7 @@
/obj/structure/bed/chair{
dir = 4
},
-/obj/structure/machinery/power/apc/almayer{
- dir = 1
- },
+/obj/structure/machinery/power/apc/almayer/north,
/turf/open/floor/almayer/blue/northeast,
/area/almayer/living/basketball)
"kPG" = (
@@ -37165,13 +37017,13 @@
pixel_y = 10
},
/obj/item/stack/cable_coil{
- pixel_y = 1;
- pixel_x = 8
+ pixel_x = 8;
+ pixel_y = 1
},
/obj/item/stack/sheet/cardboard/small_stack{
- pixel_y = 2;
+ layer = 3.01;
pixel_x = -3;
- layer = 3.01
+ pixel_y = 2
},
/turf/open/floor/almayer,
/area/almayer/squads/alpha_bravo_shared)
@@ -38850,9 +38702,9 @@
pixel_x = -32
},
/obj/structure/machinery/light{
+ alpha = 0;
dir = 8;
- pixel_x = -32;
- alpha = 0
+ pixel_x = -32
},
/turf/open/floor/almayer/silver/west,
/area/almayer/command/computerlab)
@@ -39076,6 +38928,7 @@
/turf/open/floor/almayer/plate,
/area/almayer/medical/morgue)
"mrM" = (
+/obj/structure/closet/secure_closet/quartermaster_uscm,
/turf/open/floor/almayer/green,
/area/almayer/squads/req)
"msg" = (
@@ -39329,9 +39182,8 @@
/turf/open/floor/plating/plating_catwalk,
/area/almayer/maint/hull/lower/stern)
"myl" = (
-/obj/structure/machinery/power/apc/almayer/hardened{
- cell_type = /obj/item/cell/hyper;
- dir = 1
+/obj/structure/machinery/power/apc/almayer/hardened/north{
+ cell_type = /obj/item/cell/hyper
},
/obj/effect/decal/warning_stripes{
icon_state = "NE-out";
@@ -39452,8 +39304,8 @@
"mAe" = (
/obj/structure/window/framed/almayer/aicore/hull/black/hijack_bustable,
/obj/structure/machinery/door/poddoor/almayer/blended/ai_lockdown{
- plane = -6;
- dir = 4
+ dir = 4;
+ plane = -6
},
/turf/open/floor/almayer/aicore/no_build,
/area/almayer/command/airoom)
@@ -39582,10 +39434,10 @@
"mCx" = (
/obj/structure/machinery/door/airlock/almayer/secure/reinforced{
access_modified = 1;
+ dir = 1;
name = "\improper AI Reception";
req_access = null;
- req_one_access_txt = "91;92";
- dir = 1
+ req_one_access_txt = "91;92"
},
/obj/effect/step_trigger/clone_cleaner,
/obj/structure/machinery/door/poddoor/shutters/almayer{
@@ -39602,7 +39454,7 @@
/turf/open/floor/almayer/plate,
/area/almayer/maint/hull/lower/l_a_p)
"mCJ" = (
-/obj/structure/machinery/power/apc/almayer,
+/obj/structure/machinery/power/apc/almayer/south,
/turf/open/floor/plating/plating_catwalk,
/area/almayer/maint/upper/u_f_p)
"mCL" = (
@@ -39784,6 +39636,13 @@
"mGu" = (
/turf/open/floor/almayer/silver/east,
/area/almayer/command/securestorage)
+"mGM" = (
+/obj/structure/disposalpipe/down/almayer{
+ dir = 4;
+ id = "almayerlink_med_req"
+ },
+/turf/open/floor/almayer,
+/area/almayer/lifeboat_pumps/south1)
"mGT" = (
/obj/structure/machinery/status_display{
pixel_y = 30
@@ -39800,9 +39659,7 @@
/turf/open/floor/wood/ship,
/area/almayer/command/corporateliaison)
"mHb" = (
-/obj/structure/machinery/power/apc/almayer{
- dir = 1
- },
+/obj/structure/machinery/power/apc/almayer/north,
/turf/open/floor/almayer/red/east,
/area/almayer/shipboard/brig/processing)
"mHo" = (
@@ -40004,9 +39861,7 @@
icon_state = "N";
pixel_y = 1
},
-/obj/structure/machinery/power/apc/almayer{
- dir = 1
- },
+/obj/structure/machinery/power/apc/almayer/north,
/turf/open/floor/almayer/red,
/area/almayer/hallways/upper/port)
"mKq" = (
@@ -40141,6 +39996,7 @@
/area/almayer/squads/req)
"mMP" = (
/obj/effect/landmark/start/intel,
+/obj/effect/landmark/late_join/intel,
/turf/open/floor/plating/plating_catwalk,
/area/almayer/engineering/port_atmos)
"mMV" = (
@@ -40476,10 +40332,10 @@
req_one_access_txt = "90;91;92"
},
/obj/structure/machinery/camera/autoname/almayer/containment/ares{
- dir = 8;
- pixel_y = 2;
+ autoname = 0;
c_tag = "AI - Main Corridor";
- autoname = 0
+ dir = 8;
+ pixel_y = 2
},
/turf/open/floor/almayer/aicore/no_build/ai_silver/east,
/area/almayer/command/airoom)
@@ -40781,8 +40637,8 @@
/obj/structure/machinery/door_control{
id = "ARES JoeCryo";
name = "ARES WorkingJoe Bay Shutters";
- req_one_access_txt = "91;92";
- pixel_x = -24
+ pixel_x = -24;
+ req_one_access_txt = "91;92"
},
/turf/open/floor/almayer/aicore/no_build,
/area/almayer/command/airoom)
@@ -40976,9 +40832,7 @@
/turf/open/floor/almayer/plate,
/area/almayer/maint/hull/lower/l_m_s)
"neO" = (
-/obj/structure/machinery/power/apc/almayer{
- dir = 1
- },
+/obj/structure/machinery/power/apc/almayer/north,
/turf/open/floor/almayer/red/north,
/area/almayer/shipboard/navigation)
"neS" = (
@@ -41427,9 +41281,7 @@
/turf/open/floor/almayer/cargo_arrow/north,
/area/almayer/living/briefing)
"nlI" = (
-/obj/structure/machinery/power/apc/almayer{
- dir = 1
- },
+/obj/structure/machinery/power/apc/almayer/north,
/turf/open/floor/almayer/plate,
/area/almayer/maint/upper/u_f_s)
"nlW" = (
@@ -41784,8 +41636,12 @@
pixel_x = 4;
pixel_y = 11
},
-/obj/structure/sign/poster/propaganda{
- pixel_y = 34
+/obj/structure/sign/ROcreed{
+ pixel_y = 30
+ },
+/obj/item/device/flashlight/lamp{
+ pixel_y = -11;
+ pixel_x = 7
},
/turf/open/floor/almayer/green/north,
/area/almayer/squads/req)
@@ -41951,9 +41807,7 @@
/turf/open/floor/almayer/mono,
/area/almayer/engineering/upper_engineering/starboard)
"nwW" = (
-/obj/structure/machinery/power/apc/almayer{
- dir = 1
- },
+/obj/structure/machinery/power/apc/almayer/north,
/turf/open/floor/almayer/red/north,
/area/almayer/shipboard/port_missiles)
"nwY" = (
@@ -42057,9 +41911,7 @@
/turf/open/floor/almayer/test_floor4,
/area/almayer/shipboard/brig/starboard_hallway)
"nAd" = (
-/obj/structure/machinery/power/apc/almayer{
- dir = 4
- },
+/obj/structure/machinery/power/apc/almayer/east,
/turf/open/floor/almayer,
/area/almayer/engineering/lower/engine_core)
"nAm" = (
@@ -42142,6 +41994,19 @@
/obj/effect/landmark/late_join/charlie,
/turf/open/floor/plating/plating_catwalk,
/area/almayer/squads/charlie)
+"nCj" = (
+/obj/structure/surface/table/almayer,
+/obj/structure/machinery/computer/cameras/hangar{
+ dir = 4;
+ pixel_y = 12
+ },
+/obj/structure/machinery/computer/shuttle/dropship/flight/remote_control{
+ dir = 4;
+ name = "Remote dropship navigation computer";
+ pixel_y = -12
+ },
+/turf/open/floor/almayer/redfull,
+/area/almayer/living/offices/flight)
"nCn" = (
/obj/structure/pipes/vents/pump/on,
/turf/open/floor/almayer/plate,
@@ -42484,9 +42349,7 @@
/turf/open/floor/almayer/plating/northeast,
/area/almayer/shipboard/port_missiles)
"nIG" = (
-/obj/structure/machinery/power/apc/almayer{
- dir = 4
- },
+/obj/structure/machinery/power/apc/almayer/east,
/turf/open/floor/almayer/silver/northeast,
/area/almayer/command/securestorage)
"nIN" = (
@@ -42552,9 +42415,7 @@
/area/almayer/engineering/lower/workshop)
"nLk" = (
/obj/effect/decal/cleanable/blood/oil,
-/obj/structure/machinery/power/apc/almayer{
- dir = 4
- },
+/obj/structure/machinery/power/apc/almayer/east,
/turf/open/floor/almayer/orange/east,
/area/almayer/engineering/upper_engineering/port)
"nLp" = (
@@ -42802,9 +42663,7 @@
/turf/open/floor/plating/plating_catwalk,
/area/almayer/maint/hull/lower/l_m_p)
"nQv" = (
-/obj/structure/machinery/power/apc/almayer{
- dir = 4
- },
+/obj/structure/machinery/power/apc/almayer/east,
/turf/open/floor/almayer/plating_striped/west,
/area/almayer/squads/req)
"nQA" = (
@@ -43212,10 +43071,10 @@
/area/almayer/hallways/upper/midship_hallway)
"nZm" = (
/obj/structure/machinery/door_control{
+ access_modified = 1;
id = "OTStore";
name = "Shutters";
pixel_y = 24;
- access_modified = 1;
req_one_access_txt = "35"
},
/obj/effect/decal/warning_stripes{
@@ -43245,9 +43104,7 @@
/turf/open/floor/almayer,
/area/almayer/hallways/upper/midship_hallway)
"nZR" = (
-/obj/structure/machinery/power/apc/almayer{
- dir = 8
- },
+/obj/structure/machinery/power/apc/almayer/west,
/turf/open/floor/almayer/plating/northeast,
/area/almayer/shipboard/panic)
"nZW" = (
@@ -43298,7 +43155,7 @@
"obo" = (
/obj/structure/disposalpipe/up/almayer{
dir = 8;
- id = "almayerlink_med_req"
+ id = "almayerlink_med1_req"
},
/turf/closed/wall/almayer,
/area/almayer/squads/req)
@@ -43525,8 +43382,8 @@
unslashable = 1
},
/obj/structure/machinery/computer/working_joe{
- layer = 3.3;
dir = 4;
+ layer = 3.3;
pixel_y = 6
},
/turf/open/floor/almayer/aicore/no_build,
@@ -43675,9 +43532,7 @@
/obj/structure/pipes/vents/pump{
dir = 8
},
-/obj/structure/machinery/power/apc/almayer/hardened{
- dir = 4
- },
+/obj/structure/machinery/power/apc/almayer/hardened/east,
/turf/open/floor/almayer,
/area/almayer/command/lifeboat)
"oit" = (
@@ -43688,7 +43543,7 @@
/turf/open/floor/almayer/redfull,
/area/almayer/shipboard/port_missiles)
"oix" = (
-/obj/structure/machinery/power/apc/almayer,
+/obj/structure/machinery/power/apc/almayer/south,
/obj/structure/sign/safety/rewire{
pixel_y = -38
},
@@ -44485,6 +44340,7 @@
pixel_y = 29;
serial_number = 12
},
+/obj/effect/landmark/late_join/intel,
/turf/open/floor/plating/plating_catwalk,
/area/almayer/engineering/port_atmos)
"oyO" = (
@@ -44607,8 +44463,8 @@
/area/almayer/command/cichallway)
"oBD" = (
/obj/structure/pipes/vents/pump/no_boom/gas{
- vent_tag = "Access Hall";
- dir = 8
+ dir = 8;
+ vent_tag = "Access Hall"
},
/turf/open/floor/almayer/aicore/no_build/ai_silver/east,
/area/almayer/command/airoom)
@@ -44807,8 +44663,8 @@
"oEA" = (
/obj/structure/surface/table/reinforced/prison,
/obj/item/weapon/gun/shotgun/pump{
- starting_attachment_types = list(/obj/item/attachable/stock/shotgun);
- pixel_y = 9
+ pixel_y = 9;
+ starting_attachment_types = list(/obj/item/attachable/stock/shotgun)
},
/obj/item/stack/sheet/cardboard/small_stack{
layer = 3.01
@@ -45236,9 +45092,7 @@
/turf/open/floor/almayer/plating/northeast,
/area/almayer/medical/upper_medical)
"oNK" = (
-/obj/structure/machinery/power/apc/almayer{
- dir = 1
- },
+/obj/structure/machinery/power/apc/almayer/north,
/turf/open/floor/plating/plating_catwalk,
/area/almayer/maint/hull/upper/u_a_s)
"oNM" = (
@@ -45294,7 +45148,7 @@
/obj/effect/decal/warning_stripes{
icon_state = "S"
},
-/obj/structure/machinery/power/apc/almayer,
+/obj/structure/machinery/power/apc/almayer/south,
/turf/open/floor/almayer/red/north,
/area/almayer/hallways/upper/starboard)
"oOO" = (
@@ -45613,9 +45467,7 @@
/obj/structure/platform{
dir = 8
},
-/obj/structure/machinery/power/apc/almayer{
- dir = 1
- },
+/obj/structure/machinery/power/apc/almayer/north,
/turf/open/floor/almayer/silver/north,
/area/almayer/hallways/lower/repair_bay)
"oUG" = (
@@ -45921,8 +45773,8 @@
"pax" = (
/obj/effect/step_trigger/clone_cleaner,
/obj/structure/pipes/vents/pump/no_boom/gas{
- vent_tag = "Reception";
- dir = 8
+ dir = 8;
+ vent_tag = "Reception"
},
/turf/open/floor/almayer/aicore/glowing/no_build/ai_floor3,
/area/almayer/command/airoom)
@@ -46406,8 +46258,8 @@
"pmV" = (
/obj/structure/pipes/standard/simple/hidden/supply/no_boom,
/obj/structure/machinery/computer/tech_control{
- pixel_y = 16;
- density = 0
+ density = 0;
+ pixel_y = 16
},
/turf/open/floor/almayer/no_build/ai_floors,
/area/almayer/command/airoom)
@@ -46512,7 +46364,7 @@
/turf/open/floor/plating/plating_catwalk,
/area/almayer/maint/hull/lower/stern)
"ppV" = (
-/obj/structure/machinery/power/apc/almayer,
+/obj/structure/machinery/power/apc/almayer/south,
/turf/open/floor/almayer/plate,
/area/almayer/hallways/lower/starboard_midship_hallway)
"pqc" = (
@@ -46600,9 +46452,7 @@
/turf/open/floor/almayer,
/area/almayer/maint/hull/upper/u_f_s)
"prl" = (
-/obj/structure/machinery/power/apc/almayer{
- dir = 1
- },
+/obj/structure/machinery/power/apc/almayer/north,
/obj/effect/decal/warning_stripes{
icon_state = "SW-out"
},
@@ -47067,7 +46917,9 @@
/area/almayer/engineering/lower)
"pCr" = (
/obj/structure/machinery/cm_vending/sorted/attachments/blend,
-/turf/open/floor/almayer/plate,
+/turf/closed/wall/almayer{
+ opacity = 0
+ },
/area/almayer/squads/req)
"pDh" = (
/obj/structure/machinery/power/monitor{
@@ -47684,9 +47536,8 @@
/turf/open/floor/almayer/plate,
/area/almayer/squads/charlie_delta_shared)
"pQI" = (
-/obj/structure/machinery/power/apc/almayer{
- cell_type = /obj/item/cell/hyper;
- dir = 1
+/obj/structure/machinery/power/apc/almayer/north{
+ cell_type = /obj/item/cell/hyper
},
/turf/open/floor/almayer/red/north,
/area/almayer/shipboard/brig/mp_bunks)
@@ -47718,9 +47569,7 @@
/turf/open/floor/almayer/plate,
/area/almayer/living/offices)
"pRn" = (
-/obj/structure/machinery/power/apc/almayer{
- dir = 4
- },
+/obj/structure/machinery/power/apc/almayer/east,
/obj/structure/machinery/medical_pod/sleeper,
/turf/open/floor/almayer/mono,
/area/almayer/medical/medical_science)
@@ -48442,7 +48291,7 @@
/turf/open/floor/almayer,
/area/almayer/squads/delta)
"qgU" = (
-/obj/structure/machinery/power/apc/almayer/hardened,
+/obj/structure/machinery/power/apc/almayer/hardened/south,
/obj/effect/decal/warning_stripes{
icon_state = "SE-out";
pixel_x = 1
@@ -48604,9 +48453,9 @@
/obj/structure/machinery/door/firedoor/border_only/almayer,
/obj/structure/surface/table/reinforced/almayer_blend/north,
/obj/item/desk_bell{
+ anchored = 1;
pixel_x = -6;
- pixel_y = -8;
- anchored = 1
+ pixel_y = -8
},
/turf/open/floor/almayer/test_floor4,
/area/almayer/squads/req)
@@ -48951,9 +48800,9 @@
/area/almayer/maint/hull/lower/l_f_p)
"qpY" = (
/obj/structure/machinery/cryopod/right{
+ dir = 4;
layer = 3.1;
- pixel_y = 13;
- dir = 4
+ pixel_y = 13
},
/turf/open/floor/almayer/aicore/no_build/ai_cargo,
/area/almayer/command/airoom)
@@ -49108,9 +48957,7 @@
/turf/open/floor/almayer/silvercorner/east,
/area/almayer/hallways/upper/midship_hallway)
"qvC" = (
-/obj/structure/machinery/power/apc/almayer{
- dir = 4
- },
+/obj/structure/machinery/power/apc/almayer/east,
/turf/open/floor/plating,
/area/almayer/living/port_emb)
"qvE" = (
@@ -49432,6 +49279,13 @@
},
/turf/open/floor/almayer/orange/north,
/area/almayer/engineering/lower)
+"qAE" = (
+/obj/structure/disposalpipe/segment{
+ dir = 4;
+ icon_state = "pipe-c"
+ },
+/turf/closed/wall/almayer/white/reinforced,
+/area/almayer/medical/medical_science)
"qAG" = (
/obj/structure/platform{
dir = 1
@@ -49727,7 +49581,7 @@
/turf/open/floor/almayer/red/north,
/area/almayer/squads/alpha_bravo_shared)
"qGf" = (
-/obj/structure/machinery/power/apc/almayer,
+/obj/structure/machinery/power/apc/almayer/south,
/obj/structure/sign/safety/rewire{
pixel_y = -38
},
@@ -50337,9 +50191,7 @@
/turf/open/floor/almayer/plate,
/area/almayer/maint/upper/u_m_s)
"qTu" = (
-/obj/structure/machinery/power/apc/almayer{
- dir = 1
- },
+/obj/structure/machinery/power/apc/almayer/north,
/turf/open/floor/almayer/plate,
/area/almayer/hallways/lower/port_umbilical)
"qTA" = (
@@ -50690,9 +50542,7 @@
/turf/open/floor/plating/plating_catwalk,
/area/almayer/maint/hull/lower/l_m_s)
"qZT" = (
-/obj/structure/machinery/power/apc/almayer{
- dir = 1
- },
+/obj/structure/machinery/power/apc/almayer/north,
/turf/open/floor/almayer/plate,
/area/almayer/hallways/lower/starboard_fore_hallway)
"qZX" = (
@@ -50893,7 +50743,7 @@
/turf/open/floor/almayer/sterile_green_side/west,
/area/almayer/medical/lower_medical_lobby)
"rdT" = (
-/obj/structure/machinery/power/apc/almayer,
+/obj/structure/machinery/power/apc/almayer/south,
/turf/open/floor/almayer/plate,
/area/almayer/hallways/lower/port_fore_hallway)
"rdZ" = (
@@ -51265,9 +51115,7 @@
/area/almayer/living/synthcloset)
"rlh" = (
/obj/structure/closet/firecloset,
-/obj/structure/machinery/power/apc/almayer{
- dir = 1
- },
+/obj/structure/machinery/power/apc/almayer/north,
/turf/open/floor/almayer/plate,
/area/almayer/shipboard/starboard_point_defense)
"rll" = (
@@ -51824,8 +51672,8 @@
desc = "A pneumatic delivery unit.";
icon_state = "delivery_engi";
name = "Security Vault";
- pixel_y = 28;
- pixel_x = -24
+ pixel_x = -24;
+ pixel_y = 28
},
/obj/structure/disposalpipe/trunk{
dir = 1
@@ -51874,10 +51722,6 @@
},
/turf/open/floor/almayer/test_floor4,
/area/almayer/maint/upper/u_a_p)
-"ryR" = (
-/obj/structure/machinery/cm_vending/clothing/staff_officer_armory,
-/turf/open/floor/almayer/redfull,
-/area/almayer/command/cic)
"ryY" = (
/obj/effect/step_trigger/clone_cleaner,
/obj/structure/disposalpipe/down/almayer{
@@ -52337,6 +52181,9 @@
/area/almayer/maint/hull/upper/p_stern)
"rHN" = (
/obj/structure/pipes/vents/pump/on,
+/obj/structure/bed/chair{
+ dir = 4
+ },
/turf/open/floor/plating/plating_catwalk,
/area/almayer/squads/req)
"rIj" = (
@@ -52477,7 +52324,7 @@
/obj/structure/sign/safety/rewire{
pixel_x = 32
},
-/obj/structure/machinery/power/apc/almayer,
+/obj/structure/machinery/power/apc/almayer/south,
/turf/open/floor/almayer/orange/east,
/area/almayer/hallways/lower/port_aft_hallway)
"rKA" = (
@@ -52922,6 +52769,13 @@
/obj/structure/machinery/part_fabricator/dropship,
/turf/open/floor/almayer/plate,
/area/almayer/hallways/lower/repair_bay)
+"rVB" = (
+/obj/structure/machinery/suit_storage_unit/compression_suit/uscm,
+/obj/structure/machinery/alarm/almayer{
+ dir = 1
+ },
+/turf/open/floor/almayer/plate,
+/area/almayer/hallways/lower/starboard_umbilical)
"rVC" = (
/obj/structure/pipes/vents/pump/on,
/obj/structure/machinery/light{
@@ -53030,9 +52884,7 @@
/obj/structure/sign/safety/hazard{
pixel_y = -32
},
-/obj/structure/machinery/power/apc/almayer{
- dir = 8
- },
+/obj/structure/machinery/power/apc/almayer/west,
/turf/open/floor/almayer,
/area/almayer/shipboard/brig/execution)
"rXF" = (
@@ -53075,9 +52927,7 @@
/area/almayer/engineering/lower/workshop)
"rYi" = (
/obj/structure/bed/chair,
-/obj/structure/machinery/power/apc/almayer{
- dir = 1
- },
+/obj/structure/machinery/power/apc/almayer/north,
/turf/open/floor/almayer/plate,
/area/almayer/living/gym)
"rYp" = (
@@ -53169,6 +53019,13 @@
},
/turf/open/floor/almayer/test_floor4,
/area/almayer/command/corporateliaison)
+"saX" = (
+/obj/structure/disposalpipe/down/almayer{
+ dir = 8;
+ id = "almayerlink_med1_req"
+ },
+/turf/open/floor/almayer,
+/area/almayer/lifeboat_pumps/south1)
"sbq" = (
/obj/structure/machinery/door/poddoor/almayer/locked{
icon_state = "almayer_pdoor";
@@ -53395,9 +53252,7 @@
/obj/item/roller/medevac,
/obj/item/roller/medevac,
/obj/item/roller/medevac,
-/obj/structure/machinery/power/apc/almayer{
- dir = 8
- },
+/obj/structure/machinery/power/apc/almayer/west,
/obj/structure/surface/table/reinforced/prison,
/turf/open/floor/almayer/sterile_green,
/area/almayer/medical/lockerroom)
@@ -53561,20 +53416,6 @@
},
/turf/open/floor/almayer/green/northeast,
/area/almayer/hallways/lower/port_midship_hallway)
-"siz" = (
-/obj/structure/surface/table/almayer,
-/obj/structure/machinery/computer/cameras/hangar{
- dir = 8;
- pixel_y = -12
- },
-/obj/structure/machinery/computer/shuttle/dropship/flight/remote_control{
- dir = 8;
- name = "Alamo Remote Control Console";
- pixel_y = 12;
- shuttleId = "dropship_alamo"
- },
-/turf/open/floor/almayer/redfull,
-/area/almayer/living/offices/flight)
"siC" = (
/turf/open/floor/almayer/red/northwest,
/area/almayer/hallways/lower/port_fore_hallway)
@@ -54831,11 +54672,16 @@
/turf/open/floor/almayer/sterile_green_side/east,
/area/almayer/medical/morgue)
"sKf" = (
-/obj/structure/machinery/power/apc/almayer{
- dir = 1
- },
+/obj/structure/machinery/power/apc/almayer/north,
/turf/open/floor/almayer/orange/north,
/area/almayer/engineering/lower)
+"sKI" = (
+/obj/structure/surface/table/reinforced/almayer_B,
+/obj/structure/window/reinforced/toughened{
+ dir = 4
+ },
+/turf/open/floor/almayer/plate,
+/area/almayer/command/cic)
"sKM" = (
/obj/structure/pipes/standard/simple/hidden/supply{
dir = 10
@@ -55168,9 +55014,8 @@
/turf/open/floor/plating/plating_catwalk,
/area/almayer/hallways/lower/port_midship_hallway)
"sTV" = (
-/obj/structure/machinery/power/apc/almayer/hardened{
- cell_type = /obj/item/cell/hyper;
- dir = 1
+/obj/structure/machinery/power/apc/almayer/hardened/north{
+ cell_type = /obj/item/cell/hyper
},
/turf/open/floor/plating,
/area/almayer/command/airoom)
@@ -56148,9 +55993,9 @@
/area/almayer/maint/hull/lower/stern)
"tmV" = (
/obj/structure/machinery/camera/autoname/almayer/containment/ares{
- dir = 8;
autoname = 0;
- c_tag = "AI - SecVault"
+ c_tag = "AI - SecVault";
+ dir = 8
},
/turf/open/floor/almayer/aicore/no_build,
/area/almayer/command/airoom)
@@ -56265,9 +56110,9 @@
req_access_txt = "8"
},
/obj/item/desk_bell{
+ anchored = 1;
pixel_x = -6;
- pixel_y = 10;
- anchored = 1
+ pixel_y = 10
},
/obj/structure/machinery/door/firedoor/border_only/almayer,
/turf/open/floor/almayer/sterile_green,
@@ -56905,9 +56750,9 @@
desc = "An outlet for the pneumatic delivery system.";
icon_state = "delivery_outlet";
name = "returns outlet";
+ pixel_x = -7;
pixel_y = 28;
- range = 0;
- pixel_x = -7
+ range = 0
},
/turf/open/floor/almayer/no_build/test_floor4,
/area/almayer/command/airoom)
@@ -56970,9 +56815,7 @@
/turf/open/floor/almayer/plate,
/area/almayer/maint/hull/upper/u_a_s)
"tBY" = (
-/obj/structure/machinery/power/apc/almayer{
- dir = 1
- },
+/obj/structure/machinery/power/apc/almayer/north,
/turf/open/floor/almayer/plate,
/area/almayer/maint/upper/mess)
"tCd" = (
@@ -57007,9 +56850,9 @@
/area/almayer/hallways/upper/port)
"tCC" = (
/obj/structure/machinery/camera/autoname/almayer/containment/ares{
- dir = 1;
+ autoname = 0;
c_tag = "AI - Reception Interior";
- autoname = 0
+ dir = 1
},
/turf/open/floor/almayer/aicore/no_build,
/area/almayer/command/airoom)
@@ -57790,9 +57633,7 @@
/obj/item/storage/toolbox/mechanical{
pixel_y = 13
},
-/obj/structure/machinery/power/apc/almayer{
- dir = 1
- },
+/obj/structure/machinery/power/apc/almayer/north,
/turf/open/floor/almayer/plate,
/area/almayer/maint/upper/u_m_s)
"tXb" = (
@@ -57825,12 +57666,15 @@
/obj/item/storage/box/m94,
/obj/item/storage/box/m94,
/obj/item/stack/sheet/mineral/plastic/small_stack,
+/obj/item/frame/rack,
+/obj/item/frame/rack,
+/obj/item/frame/rack,
+/obj/item/frame/rack,
+/obj/item/frame/rack,
/turf/open/floor/almayer/test_floor4,
/area/almayer/squads/req)
"tXn" = (
-/obj/structure/machinery/power/apc/almayer{
- dir = 8
- },
+/obj/structure/machinery/power/apc/almayer/west,
/turf/open/floor/almayer/plate,
/area/almayer/maint/hull/lower/l_a_s)
"tXo" = (
@@ -58559,7 +58403,7 @@
/obj/effect/decal/warning_stripes{
icon_state = "S"
},
-/obj/structure/machinery/power/apc/almayer,
+/obj/structure/machinery/power/apc/almayer/south,
/turf/open/floor/almayer/sterile_green,
/area/almayer/medical/containment)
"uoj" = (
@@ -59422,13 +59266,6 @@
},
/turf/open/floor/almayer/green/north,
/area/almayer/hallways/lower/port_midship_hallway)
-"uGi" = (
-/obj/structure/machinery/suit_storage_unit/compression_suit/uscm,
-/obj/structure/machinery/alarm/almayer{
- dir = 1
- },
-/turf/open/floor/almayer/plate,
-/area/almayer/hallways/lower/starboard_umbilical)
"uGN" = (
/obj/structure/pipes/vents/pump,
/turf/open/floor/almayer,
@@ -60034,15 +59871,15 @@
unslashable = 1
},
/obj/item/paper_bin/uscm{
- pixel_y = 6;
- pixel_x = -12
+ pixel_x = -12;
+ pixel_y = 6
},
/obj/item/tool/pen{
pixel_x = -14
},
/obj/structure/machinery/aicore_lockdown{
- pixel_y = 4;
- pixel_x = 3
+ pixel_x = 3;
+ pixel_y = 4
},
/turf/open/floor/almayer/aicore/no_build,
/area/almayer/command/airoom)
@@ -60260,9 +60097,7 @@
/turf/open/floor/almayer/emerald/southwest,
/area/almayer/living/port_emb)
"uZF" = (
-/obj/structure/machinery/power/apc/almayer{
- dir = 1
- },
+/obj/structure/machinery/power/apc/almayer/north,
/turf/open/floor/almayer,
/area/almayer/engineering/lower/workshop)
"uZH" = (
@@ -60893,9 +60728,7 @@
/turf/open/floor/almayer/plate,
/area/almayer/maint/lower/s_bow)
"vkR" = (
-/obj/structure/machinery/power/apc/almayer{
- dir = 1
- },
+/obj/structure/machinery/power/apc/almayer/north,
/obj/structure/bed/sofa/south/grey,
/turf/open/floor/almayer/silver/north,
/area/almayer/shipboard/brig/cic_hallway)
@@ -61139,13 +60972,13 @@
unslashable = 1
},
/obj/structure/machinery/computer/working_joe{
- layer = 3.3;
- dir = 8
+ dir = 8;
+ layer = 3.3
},
/obj/item/desk_bell/ares{
- pixel_y = 14;
+ anchored = 1;
pixel_x = -5;
- anchored = 1
+ pixel_y = 14
},
/turf/open/floor/almayer/aicore/no_build,
/area/almayer/command/airoom)
@@ -61205,14 +61038,14 @@
"vqI" = (
/obj/structure/surface/table/reinforced/prison,
/obj/item/device/camera_film{
+ layer = 3.03;
pixel_x = 4;
- pixel_y = 1;
- layer = 3.03
+ pixel_y = 1
},
/obj/item/stack/sheet/cardboard/small_stack{
+ layer = 3.02;
pixel_x = -5;
- pixel_y = 3;
- layer = 3.02
+ pixel_y = 3
},
/turf/open/floor/almayer,
/area/almayer/squads/charlie_delta_shared)
@@ -61222,9 +61055,7 @@
/area/almayer/engineering/upper_engineering/starboard)
"vqL" = (
/obj/item/clothing/under/shorts/black,
-/obj/structure/machinery/power/apc/almayer{
- dir = 8
- },
+/obj/structure/machinery/power/apc/almayer/west,
/turf/open/floor/almayer/dark_sterile,
/area/almayer/engineering/laundry)
"vqW" = (
@@ -61350,9 +61181,8 @@
/turf/open/floor/plating/plating_catwalk,
/area/almayer/maint/hull/lower/stern)
"vsz" = (
-/obj/structure/machinery/camera/autoname/almayer{
- dir = 8;
- name = "ship-grade camera"
+/obj/structure/machinery/camera/autoname/almayer/brig{
+ dir = 8
},
/turf/open/floor/almayer,
/area/almayer/shipboard/brig/cells)
@@ -61544,7 +61374,7 @@
/turf/open/floor/almayer/dark_sterile,
/area/almayer/living/port_emb)
"vwj" = (
-/obj/structure/machinery/power/apc/almayer,
+/obj/structure/machinery/power/apc/almayer/south,
/turf/open/floor/almayer/plate,
/area/almayer/maint/upper/u_m_p)
"vwC" = (
@@ -61776,9 +61606,7 @@
/turf/open/floor/almayer/orange/north,
/area/almayer/hallways/hangar)
"vAx" = (
-/obj/structure/machinery/power/apc/almayer{
- dir = 1
- },
+/obj/structure/machinery/power/apc/almayer/north,
/turf/open/floor/almayer/plate,
/area/almayer/maint/hull/lower/l_m_p)
"vAz" = (
@@ -61807,9 +61635,7 @@
/obj/effect/decal/warning_stripes{
icon_state = "W"
},
-/obj/structure/machinery/power/apc/almayer{
- dir = 8
- },
+/obj/structure/machinery/power/apc/almayer/west,
/turf/open/floor/almayer/plating/northeast,
/area/almayer/shipboard/stern_point_defense)
"vAQ" = (
@@ -61882,10 +61708,8 @@
/turf/open/floor/almayer/silver,
/area/almayer/shipboard/brig/cic_hallway)
"vCy" = (
-/obj/structure/machinery/camera/autoname/almayer{
- dir = 4;
- name = "ship-grade camera";
- pixel_y = 6
+/obj/structure/machinery/camera/autoname/almayer/brig{
+ dir = 4
},
/turf/open/floor/almayer/green/west,
/area/almayer/shipboard/brig/cells)
@@ -61903,9 +61727,9 @@
layer = 3.3
},
/obj/structure/machinery/camera/autoname/almayer/containment/ares{
- dir = 4;
+ autoname = 0;
c_tag = "AI - Primary Processors";
- autoname = 0
+ dir = 4
},
/turf/open/floor/almayer/aicore/no_build/ai_floor2,
/area/almayer/command/airoom)
@@ -63674,9 +63498,7 @@
/area/almayer/medical/upper_medical)
"wjC" = (
/obj/structure/closet/firecloset,
-/obj/structure/machinery/power/apc/almayer{
- dir = 1
- },
+/obj/structure/machinery/power/apc/almayer/north,
/turf/open/floor/almayer/plate,
/area/almayer/shipboard/port_point_defense)
"wjL" = (
@@ -63854,9 +63676,7 @@
/turf/open/floor/almayer,
/area/almayer/hallways/hangar)
"wmg" = (
-/obj/structure/machinery/power/apc/almayer{
- dir = 1
- },
+/obj/structure/machinery/power/apc/almayer/north,
/turf/open/floor/almayer/red/north,
/area/almayer/shipboard/starboard_missiles)
"wmo" = (
@@ -63920,6 +63740,7 @@
id = "Perma 2";
pixel_y = 24
},
+/obj/structure/machinery/camera/autoname/almayer/brig,
/turf/open/floor/almayer/plate,
/area/almayer/shipboard/brig/perma)
"wnL" = (
@@ -64322,7 +64143,8 @@
"wvE" = (
/obj/structure/surface/table/almayer,
/obj/structure/machinery/computer/cameras/almayer_network{
- dir = 4
+ dir = 4;
+ pixel_y = 1
},
/obj/structure/machinery/light{
dir = 1
@@ -64564,9 +64386,7 @@
/area/almayer/hallways/upper/fore_hallway)
"wCs" = (
/obj/structure/machinery/vending/security,
-/obj/structure/machinery/power/apc/almayer{
- dir = 8
- },
+/obj/structure/machinery/power/apc/almayer/west,
/turf/open/floor/almayer/plate,
/area/almayer/living/briefing)
"wCI" = (
@@ -64680,6 +64500,12 @@
/obj/effect/landmark/start/pilot/dropship_pilot,
/turf/open/floor/plating/plating_catwalk,
/area/almayer/living/pilotbunks)
+"wEF" = (
+/obj/structure/bed/chair{
+ dir = 4
+ },
+/turf/open/floor/almayer,
+/area/almayer/squads/req)
"wEI" = (
/obj/structure/surface/table/reinforced/black,
/obj/item/tool/pen,
@@ -64965,9 +64791,8 @@
/turf/open/floor/almayer/green/north,
/area/almayer/hallways/lower/port_aft_hallway)
"wKF" = (
-/obj/structure/machinery/power/apc/almayer{
- cell_type = /obj/item/cell/hyper;
- dir = 1
+/obj/structure/machinery/power/apc/almayer/north{
+ cell_type = /obj/item/cell/hyper
},
/turf/open/floor/almayer/plate,
/area/almayer/command/combat_correspondent)
@@ -65411,9 +65236,7 @@
/area/almayer/shipboard/brig/lobby)
"wSx" = (
/obj/structure/platform_decoration,
-/obj/structure/machinery/power/apc/almayer{
- dir = 4
- },
+/obj/structure/machinery/power/apc/almayer/east,
/turf/open/floor/almayer/plate,
/area/almayer/maint/hull/upper/u_a_p)
"wSB" = (
@@ -65503,9 +65326,7 @@
/turf/closed/wall/almayer/research/containment/wall/south,
/area/almayer/medical/containment/cell)
"wTN" = (
-/obj/structure/machinery/power/apc/almayer{
- dir = 1
- },
+/obj/structure/machinery/power/apc/almayer/north,
/turf/open/floor/almayer/plate,
/area/almayer/living/auxiliary_officer_office)
"wUd" = (
@@ -65853,9 +65674,7 @@
/turf/open/floor/almayer/plate,
/area/almayer/living/gym)
"xbI" = (
-/obj/structure/machinery/power/apc/almayer{
- dir = 1
- },
+/obj/structure/machinery/power/apc/almayer/north,
/turf/open/floor/almayer/plate,
/area/almayer/maint/hull/lower/l_m_s)
"xcI" = (
@@ -65953,14 +65772,14 @@
/turf/open/floor/almayer/plate,
/area/almayer/engineering/lower/workshop)
"xer" = (
-/obj/structure/machinery/power/apc/almayer,
+/obj/structure/machinery/power/apc/almayer/south,
/turf/open/floor/plating/plating_catwalk,
/area/almayer/maint/hull/lower/l_f_s)
"xeU" = (
/obj/structure/machinery/door/airlock/almayer/generic{
name = "\improper Laundry Room";
- req_one_access = list(19,7);
- req_access = list()
+ req_access = list();
+ req_one_access = list(19,7)
},
/turf/open/floor/almayer/test_floor4,
/area/almayer/engineering/laundry)
@@ -66156,9 +65975,7 @@
/turf/closed/wall/almayer/outer,
/area/almayer/maint/hull/upper/p_bow)
"xiW" = (
-/obj/structure/machinery/power/apc/almayer{
- dir = 1
- },
+/obj/structure/machinery/power/apc/almayer/north,
/turf/open/floor/plating/plating_catwalk,
/area/almayer/maint/upper/u_a_p)
"xjb" = (
@@ -66191,9 +66008,6 @@
dir = 1
},
/obj/structure/surface/table/almayer,
-/obj/structure/machinery/computer/secure_data{
- dir = 4
- },
/obj/structure/sign/safety/terminal{
pixel_x = 3;
pixel_y = 27
@@ -66202,6 +66016,11 @@
pixel_x = 15;
pixel_y = 27
},
+/obj/structure/machinery/computer/cameras/almayer_brig{
+ desc = "Used to access the various cameras in the security brig.";
+ dir = 4;
+ name = "brig cameras console"
+ },
/turf/open/floor/almayer/red/west,
/area/almayer/shipboard/brig/processing)
"xjK" = (
@@ -66264,17 +66083,13 @@
/turf/open/floor/almayer,
/area/almayer/squads/bravo)
"xlC" = (
-/obj/structure/machinery/power/apc/almayer{
- dir = 1
- },
+/obj/structure/machinery/power/apc/almayer/north,
/turf/open/floor/almayer/orangecorner/east,
/area/almayer/engineering/ce_room)
"xlO" = (
/obj/structure/filingcabinet,
/obj/item/folder/yellow,
-/obj/structure/machinery/power/apc/almayer{
- dir = 1
- },
+/obj/structure/machinery/power/apc/almayer/north,
/turf/open/floor/almayer/orange/north,
/area/almayer/engineering/lower/workshop/hangar)
"xmg" = (
@@ -66342,11 +66157,23 @@
/turf/open/floor/plating/plating_catwalk,
/area/almayer/squads/req)
"xnX" = (
-/obj/structure/machinery/power/apc/almayer{
- dir = 1
- },
+/obj/structure/machinery/power/apc/almayer/north,
/turf/open/floor/almayer/plate,
/area/almayer/maint/upper/u_a_s)
+"xnZ" = (
+/obj/structure/surface/table/almayer,
+/obj/structure/machinery/computer/cameras/hangar{
+ dir = 8;
+ pixel_y = -12
+ },
+/obj/structure/machinery/computer/shuttle/dropship/flight/remote_control{
+ dir = 8;
+ name = "Remote dropship navigation computer";
+ pixel_y = 12;
+ shuttleId = "dropship_alamo"
+ },
+/turf/open/floor/almayer/redfull,
+/area/almayer/living/offices/flight)
"xoe" = (
/obj/structure/pipes/standard/simple/hidden/supply{
dir = 4
@@ -66760,8 +66587,8 @@
/area/almayer/living/briefing)
"xwU" = (
/obj/structure/pipes/vents/pump/no_boom/gas{
- vent_tag = "Comms";
- dir = 1
+ dir = 1;
+ vent_tag = "Comms"
},
/turf/open/floor/almayer/aicore/no_build/ai_plates,
/area/almayer/command/airoom)
@@ -67449,9 +67276,7 @@
/area/almayer/engineering/upper_engineering/starboard)
"xKT" = (
/obj/effect/decal/cleanable/cobweb,
-/obj/structure/machinery/power/apc/almayer{
- dir = 8
- },
+/obj/structure/machinery/power/apc/almayer/west,
/turf/open/floor/almayer,
/area/almayer/living/synthcloset)
"xLi" = (
@@ -68119,9 +67944,7 @@
/turf/open/floor/plating/plating_catwalk,
/area/almayer/shipboard/starboard_point_defense)
"xYE" = (
-/obj/structure/machinery/power/apc/almayer{
- dir = 4
- },
+/obj/structure/machinery/power/apc/almayer/east,
/turf/open/floor/plating,
/area/almayer/maint/lower/constr)
"xYP" = (
@@ -68530,9 +68353,7 @@
/obj/effect/decal/warning_stripes{
icon_state = "S"
},
-/obj/structure/machinery/power/apc/almayer{
- dir = 8
- },
+/obj/structure/machinery/power/apc/almayer/west,
/obj/item/storage/briefcase{
pixel_y = 15
},
@@ -68552,6 +68373,10 @@
},
/turf/open/floor/almayer/plate,
/area/almayer/command/lifeboat)
+"ygf" = (
+/obj/structure/machinery/power/apc/almayer/west,
+/turf/open/floor/almayer/sterile_green_side/northwest,
+/area/almayer/medical/lower_medical_medbay)
"ygp" = (
/obj/structure/disposalpipe/segment,
/obj/structure/pipes/standard/simple/hidden/supply,
@@ -68586,10 +68411,8 @@
/turf/open/floor/almayer/cargo,
/area/almayer/engineering/lower/engine_core)
"yhg" = (
-/obj/structure/machinery/camera/autoname/almayer{
- dir = 4;
- name = "ship-grade camera";
- pixel_y = 6
+/obj/structure/machinery/camera/autoname/almayer/brig{
+ dir = 4
},
/turf/open/floor/plating/plating_catwalk,
/area/almayer/shipboard/brig/cells)
@@ -84118,7 +83941,7 @@ lxd
dPk
nBV
dyq
-uGi
+rVB
uaG
lYN
byr
@@ -88700,7 +88523,7 @@ aqN
alX
asc
abk
-azV
+huw
aAB
aBZ
avY
@@ -88997,7 +88820,7 @@ bHB
xyw
aho
vWc
-geg
+nCj
aEj
aho
aYt
@@ -89106,7 +88929,7 @@ wVW
wVW
rOC
soX
-azX
+sKI
vHt
aCb
aDv
@@ -89506,7 +89329,7 @@ agj
aic
sxW
wVW
-abQ
+jSc
atN
cEl
sOi
@@ -89809,7 +89632,7 @@ bHB
xyw
aho
dkj
-siz
+xnZ
gYt
aho
aYt
@@ -90330,7 +90153,7 @@ alX
aIf
aED
wVW
-ryR
+cWw
jvX
iaa
wVW
@@ -96718,7 +96541,7 @@ rlZ
egc
thP
beW
-bTu
+ygf
rlZ
fqZ
beW
@@ -98269,7 +98092,7 @@ iKy
iKy
iKy
wAE
-baw
+mGM
baw
qYC
kwo
@@ -98472,7 +98295,7 @@ qQu
qQu
qQu
wAE
-baw
+ley
vbB
ley
kwo
@@ -98675,7 +98498,7 @@ dME
bRO
llo
wAE
-baw
+saX
dBp
gVA
tQV
@@ -100065,7 +99888,7 @@ iYf
bIM
wPz
iUo
-vOy
+qAE
xqp
lzA
vkp
@@ -100268,7 +100091,7 @@ mTp
wiW
wPz
jeq
-rQy
+eYU
wWR
vti
vkp
@@ -112546,7 +112369,7 @@ mww
sZe
bdl
fgm
-bdj
+wEF
rHN
kuu
mDj
@@ -113981,7 +113804,7 @@ vub
bPL
bCM
xSM
-tez
+cgE
gsm
bCM
bbr
@@ -114184,7 +114007,7 @@ qlz
tez
bCN
ccQ
-tez
+cgE
ccQ
bCN
bbr
@@ -114387,7 +114210,7 @@ qlz
tez
bpV
ccQ
-tez
+cgE
ccQ
cdn
bbr
@@ -114590,7 +114413,7 @@ qlz
tez
bCM
ccQ
-tez
+cgE
ccQ
bCM
bbr
@@ -114793,7 +114616,7 @@ vub
tez
bCN
ccQ
-tez
+cgE
ccQ
bCN
jhb
diff --git a/maps/map_files/Whiskey_Outpost_v2/Whiskey_Outpost_v2.dmm b/maps/map_files/Whiskey_Outpost_v2/Whiskey_Outpost_v2.dmm
index 2d5bc23cb5a3..9a8fa63a5e8e 100644
--- a/maps/map_files/Whiskey_Outpost_v2/Whiskey_Outpost_v2.dmm
+++ b/maps/map_files/Whiskey_Outpost_v2/Whiskey_Outpost_v2.dmm
@@ -978,9 +978,7 @@
/turf/open/gm/grass/gbcorner/north_west,
/area/whiskey_outpost/outside/lane/one_south)
"eq" = (
-/obj/structure/machinery/power/apc/almayer{
- dir = 1
- },
+/obj/structure/machinery/power/apc/almayer/north,
/obj/structure/disposalpipe/segment{
dir = 4
},
@@ -1003,9 +1001,7 @@
/turf/open/floor/prison,
/area/whiskey_outpost/inside/living)
"ev" = (
-/obj/structure/machinery/power/apc/almayer{
- dir = 1
- },
+/obj/structure/machinery/power/apc/almayer/north,
/turf/open/floor/prison,
/area/whiskey_outpost/inside/living)
"ex" = (
@@ -1030,9 +1026,7 @@
/turf/open/floor/whitegreenfull,
/area/whiskey_outpost/inside/hospital/triage)
"eF" = (
-/obj/structure/machinery/power/apc/almayer{
- dir = 1
- },
+/obj/structure/machinery/power/apc/almayer/north,
/turf/open/floor/prison,
/area/whiskey_outpost/inside/cic)
"eG" = (
@@ -1900,9 +1894,7 @@
/turf/open/floor/prison,
/area/whiskey_outpost/inside/living)
"im" = (
-/obj/structure/machinery/power/apc/almayer{
- dir = 4
- },
+/obj/structure/machinery/power/apc/almayer/east,
/turf/open/floor/whitegreen/east,
/area/whiskey_outpost/inside/hospital)
"in" = (
@@ -2885,9 +2877,7 @@
/turf/open/shuttle/dropship/medium_grey_single_wide_up_to_down,
/area/whiskey_outpost/outside/lane/four_north)
"mC" = (
-/obj/structure/machinery/power/apc/almayer{
- dir = 1
- },
+/obj/structure/machinery/power/apc/almayer/north,
/turf/open/floor/prison,
/area/whiskey_outpost)
"mD" = (
@@ -3306,9 +3296,7 @@
/turf/open/floor/prison/floor_plate,
/area/whiskey_outpost/inside/supply)
"ow" = (
-/obj/structure/machinery/power/apc/almayer{
- dir = 1
- },
+/obj/structure/machinery/power/apc/almayer/north,
/turf/open/floor/asteroidfloor/north,
/area/whiskey_outpost/outside/mortar_pit)
"ox" = (
@@ -3766,9 +3754,7 @@
/turf/open/floor/white,
/area/whiskey_outpost/inside/hospital)
"qC" = (
-/obj/structure/machinery/power/apc/almayer{
- dir = 1
- },
+/obj/structure/machinery/power/apc/almayer/north,
/obj/structure/reagent_dispensers/fueltank,
/turf/open/floor/prison/floor_plate/southwest,
/area/whiskey_outpost/inside/engineering)
@@ -3874,9 +3860,7 @@
/turf/open/floor/asteroidfloor/north,
/area/whiskey_outpost/outside/mortar_pit)
"qW" = (
-/obj/structure/machinery/power/apc/almayer{
- dir = 4
- },
+/obj/structure/machinery/power/apc/almayer/east,
/turf/open/gm/dirt,
/area/whiskey_outpost/inside/caves/tunnel)
"qX" = (
@@ -3890,9 +3874,7 @@
/turf/open/gm/grass/grassbeach/west,
/area/whiskey_outpost/outside/lane/one_south)
"ra" = (
-/obj/structure/machinery/power/apc/almayer{
- dir = 4
- },
+/obj/structure/machinery/power/apc/almayer/east,
/turf/closed/wall/r_wall,
/area/whiskey_outpost/inside/bunker)
"rb" = (
@@ -4784,9 +4766,7 @@
/turf/open/floor/prison/floor_plate,
/area/whiskey_outpost/inside/supply)
"uP" = (
-/obj/structure/machinery/power/apc/almayer{
- dir = 1
- },
+/obj/structure/machinery/power/apc/almayer/north,
/obj/structure/surface/table/reinforced/prison,
/turf/open/floor/prison/floor_plate,
/area/whiskey_outpost/inside/supply)
@@ -5763,7 +5743,7 @@
/turf/open/gm/dirtgrassborder/grassdirt_corner/north_east,
/area/whiskey_outpost/outside/north)
"zl" = (
-/obj/structure/machinery/power/apc/almayer,
+/obj/structure/machinery/power/apc/almayer/south,
/turf/open/floor/prison/floor_plate/southwest,
/area/whiskey_outpost/inside/bunker/bunker/front)
"zm" = (
@@ -9501,9 +9481,7 @@
/turf/open/gm/dirtgrassborder/grassdirt_corner2/north_west,
/area/whiskey_outpost/outside/lane/two_south)
"SG" = (
-/obj/structure/machinery/power/apc/almayer{
- dir = 1
- },
+/obj/structure/machinery/power/apc/almayer/north,
/turf/open/floor/prison/floor_plate/southwest,
/area/whiskey_outpost/inside/bunker/pillbox/four)
"SH" = (
@@ -9704,7 +9682,7 @@
/obj/structure/surface/table/reinforced/prison,
/obj/item/reagent_container/hypospray,
/obj/item/reagent_container/hypospray,
-/obj/structure/machinery/power/apc/almayer,
+/obj/structure/machinery/power/apc/almayer/south,
/turf/open/floor/whitegreen,
/area/whiskey_outpost/inside/hospital/triage)
"TC" = (
@@ -9977,9 +9955,7 @@
/turf/open/gm/dirt,
/area/whiskey_outpost/outside/lane/three_south)
"UX" = (
-/obj/structure/machinery/power/apc/almayer{
- dir = 1
- },
+/obj/structure/machinery/power/apc/almayer/north,
/turf/open/floor/prison/floor_plate/southwest,
/area/whiskey_outpost/inside/bunker/pillbox/one)
"UY" = (
@@ -10618,9 +10594,7 @@
/turf/open/jungle,
/area/whiskey_outpost/outside/lane/three_south)
"XV" = (
-/obj/structure/machinery/power/apc/almayer{
- dir = 1
- },
+/obj/structure/machinery/power/apc/almayer/north,
/turf/open/floor/prison/floor_plate/southwest,
/area/whiskey_outpost/inside/bunker/pillbox/two)
"XW" = (
@@ -10662,9 +10636,7 @@
/turf/open/floor/asteroidfloor/north,
/area/whiskey_outpost/outside/north)
"Yj" = (
-/obj/structure/machinery/power/apc/almayer{
- dir = 1
- },
+/obj/structure/machinery/power/apc/almayer/north,
/turf/open/floor/prison/floor_plate/southwest,
/area/whiskey_outpost/inside/bunker/pillbox/three)
"Yk" = (
diff --git a/maps/map_files/generic/Admin_level.dmm b/maps/map_files/generic/Admin_level.dmm
index c97821b827fb..3b8eeac1009a 100644
--- a/maps/map_files/generic/Admin_level.dmm
+++ b/maps/map_files/generic/Admin_level.dmm
@@ -578,10 +578,6 @@
/obj/structure/machinery/medical_pod/bodyscanner,
/turf/open/floor/almayer/dark_sterile,
/area/adminlevel/ert_station)
-"tx" = (
-/obj/structure/machinery/hologram/holopad,
-/turf/open/floor/carpet,
-/area/centcom/living)
"tP" = (
/obj/effect/decal/warning_stripes{
icon_state = "E"
@@ -9716,7 +9712,7 @@ ds
eE
eY
eY
-tx
+eY
eY
eY
eY
diff --git a/maps/predship/huntership.dmm b/maps/predship/huntership.dmm
index 2931fd42b111..6247c6ce1347 100644
--- a/maps/predship/huntership.dmm
+++ b/maps/predship/huntership.dmm
@@ -828,7 +828,8 @@
/turf/open/shuttle/predship,
/area/yautja)
"co" = (
-/obj/structure/machinery/gravity_generator,
+/obj/structure/machinery/portable_atmospherics/canister/phoron,
+/obj/structure/window/phoronreinforced,
/obj/structure/window/phoronreinforced{
icon_state = "phoronrwindow"
},
@@ -934,7 +935,8 @@
/turf/open/floor/corsat/squareswood/north,
/area/yautja)
"cy" = (
-/obj/structure/machinery/gravity_generator,
+/obj/structure/window/phoronreinforced,
+/obj/structure/machinery/portable_atmospherics/canister/phoron,
/obj/structure/window/phoronreinforced{
icon_state = "phoronrwindow"
},
@@ -1803,8 +1805,7 @@
color = "#6b675e";
layer = 2.79
},
-/obj/structure/machinery/power/apc/almayer{
- dir = 4;
+/obj/structure/machinery/power/apc/almayer/east{
pixel_y = 25
},
/obj/item/weapon/twohanded/yautja/spear,
diff --git a/maps/shuttles/dropship_resolute.dmm b/maps/shuttles/dropship_resolute.dmm
new file mode 100644
index 000000000000..367dee77febd
--- /dev/null
+++ b/maps/shuttles/dropship_resolute.dmm
@@ -0,0 +1,902 @@
+//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
+"ai" = (
+/turf/open/shuttle/dropship/light_grey_bottom_right,
+/area/shuttle/drop3/sulaco)
+"aC" = (
+/turf/closed/shuttle/dropship3/transparent{
+ icon_state = "89"
+ },
+/area/shuttle/drop3/sulaco)
+"bc" = (
+/turf/closed/shuttle/dropship3{
+ icon_state = "37"
+ },
+/area/shuttle/drop3/sulaco)
+"br" = (
+/turf/closed/shuttle/dropship3{
+ icon_state = "25"
+ },
+/area/shuttle/drop3/sulaco)
+"cd" = (
+/obj/item/device/radio/intercom/saipan{
+ pixel_y = 24
+ },
+/turf/open/shuttle/dropship/light_grey_left_to_right,
+/area/shuttle/drop3/sulaco)
+"cB" = (
+/obj/structure/bed/chair/vehicle{
+ dir = 1;
+ pixel_x = 8
+ },
+/obj/structure/bed/chair/vehicle{
+ dir = 1;
+ pixel_x = -8
+ },
+/turf/open/shuttle/dropship/medium_grey_single_wide_up_to_down,
+/area/shuttle/drop3/sulaco)
+"cQ" = (
+/turf/closed/shuttle/dropship3/transparent{
+ icon_state = "27"
+ },
+/area/shuttle/drop3/sulaco)
+"cX" = (
+/turf/closed/shuttle/dropship3{
+ icon_state = "64"
+ },
+/area/shuttle/drop3/sulaco)
+"dl" = (
+/obj/structure/shuttle/part/dropship3/transparent/upper_right_wing,
+/turf/template_noop,
+/area/shuttle/drop3/sulaco)
+"eh" = (
+/obj/item/device/radio/intercom/saipan{
+ pixel_y = 24
+ },
+/turf/open/shuttle/dropship/light_grey_top_left,
+/area/shuttle/drop3/sulaco)
+"ey" = (
+/turf/closed/shuttle/dropship3/transparent{
+ icon_state = "86"
+ },
+/area/shuttle/drop3/sulaco)
+"fb" = (
+/obj/structure/shuttle/part/dropship3/right_inner_wing_connector,
+/turf/template_noop,
+/area/shuttle/drop3/sulaco)
+"fh" = (
+/turf/open/shuttle/dropship/light_grey_bottom_left,
+/area/shuttle/drop3/sulaco)
+"gt" = (
+/obj/structure/blocker/invisible_wall,
+/obj/structure/machinery/computer/cameras/dropship/three,
+/turf/open/shuttle/dropship/medium_grey_single_wide_up_to_down,
+/area/shuttle/drop3/sulaco)
+"gD" = (
+/turf/closed/shuttle/dropship3{
+ icon_state = "36"
+ },
+/area/shuttle/drop3/sulaco)
+"gF" = (
+/obj/item/device/radio/intercom/saipan{
+ layer = 3.5;
+ pixel_x = 10
+ },
+/turf/closed/shuttle/dropship3{
+ icon_state = "54"
+ },
+/area/shuttle/drop3/sulaco)
+"gK" = (
+/turf/closed/shuttle/dropship3{
+ icon_state = "67"
+ },
+/area/shuttle/drop3/sulaco)
+"hO" = (
+/turf/closed/shuttle/dropship3{
+ icon_state = "63"
+ },
+/area/shuttle/drop3/sulaco)
+"hV" = (
+/obj/effect/attach_point/crew_weapon/dropship3/floor{
+ attach_id = 8
+ },
+/turf/open/shuttle/dropship/light_grey_single_wide_up_to_down,
+/area/shuttle/drop3/sulaco)
+"hX" = (
+/obj/effect/attach_point/weapon/dropship3/left_fore,
+/obj/structure/shuttle/part/dropship3/transparent/outer_left_weapons,
+/turf/template_noop,
+/area/shuttle/drop3/sulaco)
+"iP" = (
+/obj/structure/shuttle/part/dropship3/lower_right_wall,
+/turf/template_noop,
+/area/shuttle/drop3/sulaco)
+"iX" = (
+/obj/effect/attach_point/crew_weapon/dropship3/floor{
+ attach_id = 7
+ },
+/turf/open/shuttle/dropship/light_grey_single_wide_up_to_down,
+/area/shuttle/drop3/sulaco)
+"jf" = (
+/turf/closed/shuttle/dropship3{
+ icon_state = "75"
+ },
+/area/shuttle/drop3/sulaco)
+"jk" = (
+/turf/closed/shuttle/dropship3/transparent{
+ icon_state = "22"
+ },
+/area/shuttle/drop3/sulaco)
+"jI" = (
+/obj/structure/shuttle/part/dropship3/transparent/engine_right_exhaust,
+/turf/template_noop,
+/area/shuttle/drop3/sulaco)
+"jP" = (
+/obj/structure/blocker/invisible_wall,
+/obj/structure/machinery/computer/shuttle/dropship/flight,
+/turf/open/shuttle/dropship/medium_grey_single_wide_up_to_down,
+/area/shuttle/drop3/sulaco)
+"jZ" = (
+/obj/structure/shuttle/part/dropship3/transparent/middle_left_wing,
+/turf/template_noop,
+/area/shuttle/drop3/sulaco)
+"kP" = (
+/turf/closed/shuttle/dropship3{
+ icon_state = "43"
+ },
+/area/shuttle/drop3/sulaco)
+"lr" = (
+/turf/closed/shuttle/dropship3{
+ icon_state = "47"
+ },
+/area/shuttle/drop3/sulaco)
+"ls" = (
+/turf/closed/shuttle/dropship3/transparent{
+ icon_state = "32"
+ },
+/area/shuttle/drop3/sulaco)
+"lH" = (
+/obj/effect/attach_point/weapon/dropship3/right_fore,
+/obj/structure/shuttle/part/dropship3/transparent/outer_right_weapons,
+/turf/template_noop,
+/area/shuttle/drop3/sulaco)
+"mg" = (
+/turf/closed/shuttle/dropship3/transparent{
+ icon_state = "39"
+ },
+/area/shuttle/drop3/sulaco)
+"nq" = (
+/turf/closed/shuttle/dropship3{
+ icon_state = "81"
+ },
+/area/shuttle/drop3/sulaco)
+"nB" = (
+/obj/item/device/radio/intercom/saipan{
+ pixel_y = 24
+ },
+/turf/open/shuttle/dropship/light_grey_top_right,
+/area/shuttle/drop3/sulaco)
+"nI" = (
+/turf/closed/shuttle/dropship3{
+ icon_state = "18"
+ },
+/area/shuttle/drop3/sulaco)
+"og" = (
+/obj/structure/machinery/camera/autoname/almayer/dropship_three{
+ dir = 4;
+ pixel_x = -16
+ },
+/obj/structure/bed/chair/vehicle{
+ dir = 1;
+ pixel_x = 8
+ },
+/obj/structure/bed/chair/vehicle{
+ dir = 1;
+ pixel_x = -8
+ },
+/turf/open/shuttle/dropship/medium_grey_single_wide_up_to_down,
+/area/shuttle/drop3/sulaco)
+"pg" = (
+/turf/closed/shuttle/dropship3{
+ icon_state = "77"
+ },
+/area/shuttle/drop3/sulaco)
+"qP" = (
+/obj/structure/machinery/door/airlock/multi_tile/almayer/dropshiprear/dropshipside/ds3{
+ dir = 1;
+ id = "starboard_door"
+ },
+/turf/open/shuttle/dropship/medium_grey_single_wide_up_to_down,
+/area/shuttle/drop3/sulaco)
+"qU" = (
+/obj/docking_port/mobile/marine_dropship/saipan,
+/turf/closed/shuttle/dropship3{
+ icon_state = "53"
+ },
+/area/shuttle/drop3/sulaco)
+"rb" = (
+/turf/closed/shuttle/dropship3{
+ icon_state = "73"
+ },
+/area/shuttle/drop3/sulaco)
+"rB" = (
+/obj/structure/shuttle/part/dropship3/transparent/nose_top_right,
+/turf/template_noop,
+/area/shuttle/drop3/sulaco)
+"sJ" = (
+/turf/open/shuttle/dropship/light_grey_single_wide_up_to_down,
+/area/shuttle/drop3/sulaco)
+"tm" = (
+/turf/closed/shuttle/dropship3{
+ icon_state = "50"
+ },
+/area/shuttle/drop3/sulaco)
+"tJ" = (
+/turf/closed/shuttle/dropship3{
+ icon_state = "76"
+ },
+/area/shuttle/drop3/sulaco)
+"tP" = (
+/obj/structure/shuttle/part/dropship3/nose_front_left,
+/turf/template_noop,
+/area/shuttle/drop3/sulaco)
+"ul" = (
+/turf/closed/shuttle/dropship3{
+ icon_state = "19"
+ },
+/area/shuttle/drop3/sulaco)
+"uD" = (
+/obj/structure/shuttle/part/dropship3/transparent/right_outer_bottom_wing,
+/turf/template_noop,
+/area/shuttle/drop3/sulaco)
+"uH" = (
+/obj/structure/machinery/door/airlock/hatch/cockpit/three{
+ dir = 1
+ },
+/obj/structure/blocker/forcefield/multitile_vehicles,
+/turf/open/shuttle/dropship/medium_grey_single_wide_up_to_down,
+/area/shuttle/drop3/sulaco)
+"vm" = (
+/obj/structure/shuttle/part/dropship3/transparent/upper_left_wing,
+/turf/template_noop,
+/area/shuttle/drop3/sulaco)
+"vo" = (
+/turf/closed/shuttle/dropship3/transparent{
+ icon_state = "23"
+ },
+/area/shuttle/drop3/sulaco)
+"wl" = (
+/turf/closed/shuttle/dropship3/transparent{
+ icon_state = "34"
+ },
+/area/shuttle/drop3/sulaco)
+"wr" = (
+/obj/structure/shuttle/part/dropship3/transparent/left_outer_inner_wing,
+/turf/template_noop,
+/area/shuttle/drop3/sulaco)
+"wt" = (
+/turf/closed/shuttle/dropship3{
+ icon_state = "48"
+ },
+/area/shuttle/drop3/sulaco)
+"wW" = (
+/obj/structure/shuttle/part/dropship3/lower_left_wall,
+/turf/template_noop,
+/area/shuttle/drop3/sulaco)
+"wY" = (
+/obj/structure/shuttle/part/dropship3/left_inner_wing_connector,
+/turf/template_noop,
+/area/shuttle/drop3/sulaco)
+"xi" = (
+/obj/item/device/radio/intercom/saipan{
+ layer = 3.5;
+ pixel_x = 21;
+ pixel_y = 43
+ },
+/turf/open/shuttle/dropship/medium_grey_single_wide_up_to_down,
+/area/shuttle/drop3/sulaco)
+"xB" = (
+/obj/effect/attach_point/weapon/dropship3/left_wing,
+/obj/structure/shuttle/part/dropship3/transparent/lower_left_wing,
+/turf/template_noop,
+/area/shuttle/drop3/sulaco)
+"yM" = (
+/turf/closed/shuttle/dropship3{
+ icon_state = "69"
+ },
+/area/shuttle/drop3/sulaco)
+"yQ" = (
+/turf/closed/shuttle/dropship3/transparent{
+ icon_state = "35"
+ },
+/area/shuttle/drop3/sulaco)
+"zW" = (
+/obj/structure/machinery/door/airlock/multi_tile/almayer/dropshiprear/dropshipside/ds3{
+ id = "port_door";
+ dir = 2
+ },
+/turf/open/shuttle/dropship/medium_grey_single_wide_up_to_down,
+/area/shuttle/drop3/sulaco)
+"BR" = (
+/obj/structure/machinery/door_control{
+ id = "dropship_saipan";
+ name = "Dropship Lockdown";
+ normaldoorcontrol = 3;
+ pixel_y = -19;
+ req_one_access_txt = "3;22";
+ throw_range = 15
+ },
+/turf/open/shuttle/dropship/light_grey_single_wide_left_to_right,
+/area/shuttle/drop3/sulaco)
+"Cz" = (
+/turf/open/shuttle/dropship/medium_grey_single_wide_up_to_down,
+/area/shuttle/drop3/sulaco)
+"Dx" = (
+/obj/structure/shuttle/part/dropship3/transparent/nose_top_left,
+/turf/template_noop,
+/area/shuttle/drop3/sulaco)
+"El" = (
+/turf/closed/shuttle/dropship3{
+ icon_state = "59"
+ },
+/area/shuttle/drop3/sulaco)
+"EG" = (
+/turf/closed/shuttle/dropship3/transparent{
+ icon_state = "98"
+ },
+/area/shuttle/drop3/sulaco)
+"FG" = (
+/turf/closed/shuttle/dropship3{
+ icon_state = "68"
+ },
+/area/shuttle/drop3/sulaco)
+"FV" = (
+/obj/structure/machinery/cm_vending/sorted/medical/wall_med{
+ pixel_x = 30
+ },
+/obj/structure/bed/chair/vehicle{
+ dir = 1;
+ pixel_x = 8
+ },
+/obj/structure/bed/chair/vehicle{
+ dir = 1;
+ pixel_x = -8
+ },
+/turf/open/shuttle/dropship/medium_grey_single_wide_up_to_down,
+/area/shuttle/drop3/sulaco)
+"Gl" = (
+/obj/structure/bed/chair/dropship/pilot{
+ dir = 1
+ },
+/turf/open/shuttle/dropship/medium_grey_single_wide_up_to_down,
+/area/shuttle/drop3/sulaco)
+"GH" = (
+/turf/closed/shuttle/dropship3/transparent{
+ icon_state = "26"
+ },
+/area/shuttle/drop3/sulaco)
+"Hm" = (
+/obj/structure/shuttle/part/dropship3/nose_front_right,
+/turf/template_noop,
+/area/shuttle/drop3/sulaco)
+"Hu" = (
+/turf/closed/shuttle/dropship3{
+ icon_state = "72"
+ },
+/area/shuttle/drop3/sulaco)
+"HF" = (
+/turf/closed/shuttle/dropship3/transparent{
+ icon_state = "97"
+ },
+/area/shuttle/drop3/sulaco)
+"HW" = (
+/turf/closed/shuttle/dropship3{
+ icon_state = "24"
+ },
+/area/shuttle/drop3/sulaco)
+"Iu" = (
+/obj/effect/attach_point/fuel/dropship3{
+ dir = 1;
+ attach_id = 10
+ },
+/turf/closed/shuttle/dropship3/transparent{
+ icon_state = "28"
+ },
+/area/shuttle/drop3/sulaco)
+"IF" = (
+/turf/closed/shuttle/dropship3{
+ icon_state = "51"
+ },
+/area/shuttle/drop3/sulaco)
+"Jc" = (
+/obj/effect/attach_point/weapon/dropship3/right_wing,
+/obj/structure/shuttle/part/dropship3/transparent/lower_right_wing,
+/turf/template_noop,
+/area/shuttle/drop3/sulaco)
+"Kc" = (
+/obj/structure/shuttle/part/dropship3/right_outer_wing_connector,
+/turf/template_noop,
+/area/shuttle/drop3/sulaco)
+"Kn" = (
+/turf/closed/shuttle/dropship3{
+ icon_state = "83"
+ },
+/area/shuttle/drop3/sulaco)
+"KR" = (
+/turf/open/shuttle/dropship/light_grey_left_to_right,
+/area/shuttle/drop3/sulaco)
+"Mj" = (
+/turf/closed/shuttle/dropship3{
+ icon_state = "94"
+ },
+/area/shuttle/drop3/sulaco)
+"Mu" = (
+/turf/closed/shuttle/dropship3/transparent{
+ icon_state = "38"
+ },
+/area/shuttle/drop3/sulaco)
+"MM" = (
+/obj/structure/shuttle/part/dropship3/transparent/right_inner_bottom_wing,
+/turf/template_noop,
+/area/shuttle/drop3/sulaco)
+"MR" = (
+/turf/closed/shuttle/dropship3{
+ icon_state = "31"
+ },
+/area/shuttle/drop3/sulaco)
+"Na" = (
+/turf/closed/shuttle/dropship3/transparent{
+ icon_state = "80"
+ },
+/area/shuttle/drop3/sulaco)
+"Nf" = (
+/obj/structure/shuttle/part/dropship3/transparent/engine_left_exhaust,
+/turf/template_noop,
+/area/shuttle/drop3/sulaco)
+"Ns" = (
+/obj/structure/shuttle/part/dropship3/transparent/middle_right_wing,
+/turf/template_noop,
+/area/shuttle/drop3/sulaco)
+"Nt" = (
+/turf/closed/shuttle/dropship3{
+ icon_state = "14"
+ },
+/area/shuttle/drop3/sulaco)
+"NV" = (
+/obj/effect/attach_point/electronics/dropship3{
+ dir = 1;
+ attach_id = 6
+ },
+/obj/structure/shuttle/part/dropship3/transparent/inner_right_weapons,
+/turf/template_noop,
+/area/shuttle/drop3/sulaco)
+"Of" = (
+/obj/effect/attach_point/crew_weapon/dropship3/floor{
+ attach_id = 9
+ },
+/turf/open/shuttle/dropship/light_grey_single_wide_up_to_down,
+/area/shuttle/drop3/sulaco)
+"OK" = (
+/obj/structure/bed/chair/dropship/pilot{
+ dir = 1
+ },
+/obj/structure/machinery/camera/autoname/almayer/dropship_three{
+ pixel_x = 8;
+ pixel_y = -16
+ },
+/turf/open/shuttle/dropship/medium_grey_single_wide_up_to_down,
+/area/shuttle/drop3/sulaco)
+"OU" = (
+/obj/structure/shuttle/part/dropship3/bottom_right_wall,
+/turf/template_noop,
+/area/shuttle/drop3/sulaco)
+"OZ" = (
+/turf/closed/shuttle/dropship3/transparent{
+ icon_state = "29"
+ },
+/area/shuttle/drop3/sulaco)
+"Pb" = (
+/obj/structure/shuttle/part/dropship3/bottom_left_wall,
+/turf/template_noop,
+/area/shuttle/drop3/sulaco)
+"Pc" = (
+/obj/structure/bed/chair/vehicle{
+ pixel_x = 8
+ },
+/obj/structure/bed/chair/vehicle{
+ pixel_x = -8
+ },
+/turf/open/shuttle/dropship/medium_grey_single_wide_up_to_down,
+/area/shuttle/drop3/sulaco)
+"Pv" = (
+/turf/closed/shuttle/dropship3{
+ icon_state = "30"
+ },
+/area/shuttle/drop3/sulaco)
+"PS" = (
+/turf/closed/shuttle/dropship3/transparent{
+ icon_state = "78"
+ },
+/area/shuttle/drop3/sulaco)
+"PY" = (
+/obj/structure/shuttle/part/dropship3/left_outer_wing_connector,
+/turf/template_noop,
+/area/shuttle/drop3/sulaco)
+"Qy" = (
+/obj/structure/machinery/cm_vending/sorted/medical/wall_med{
+ pixel_x = -30
+ },
+/obj/structure/bed/chair/vehicle{
+ dir = 1;
+ pixel_x = 8
+ },
+/obj/structure/bed/chair/vehicle{
+ dir = 1;
+ pixel_x = -8
+ },
+/turf/open/shuttle/dropship/medium_grey_single_wide_up_to_down,
+/area/shuttle/drop3/sulaco)
+"QI" = (
+/obj/structure/machinery/computer/dropship_weapons/dropship3,
+/obj/structure/transmitter/rotary{
+ name = "saipan Telephone";
+ phone_category = "Dropship";
+ phone_id = "saipan";
+ pixel_x = 11;
+ pixel_y = 16
+ },
+/obj/structure/blocker/invisible_wall,
+/turf/open/shuttle/dropship/medium_grey_single_wide_up_to_down,
+/area/shuttle/drop3/sulaco)
+"Rj" = (
+/turf/closed/shuttle/dropship3{
+ icon_state = "92"
+ },
+/area/shuttle/drop3/sulaco)
+"Rn" = (
+/turf/closed/shuttle/dropship3{
+ icon_state = "82"
+ },
+/area/shuttle/drop3/sulaco)
+"Sj" = (
+/obj/structure/shuttle/part/dropship3/transparent/left_outer_bottom_wing,
+/turf/template_noop,
+/area/shuttle/drop3/sulaco)
+"Sx" = (
+/obj/structure/shuttle/part/dropship3/transparent/engine_left_cap,
+/turf/template_noop,
+/area/shuttle/drop3/sulaco)
+"SD" = (
+/turf/template_noop,
+/area/template_noop)
+"SH" = (
+/obj/structure/machinery/camera/autoname/almayer/dropship_three{
+ dir = 8;
+ pixel_x = 16
+ },
+/obj/structure/bed/chair/vehicle{
+ pixel_x = 8
+ },
+/obj/structure/bed/chair/vehicle{
+ pixel_x = -8
+ },
+/turf/open/shuttle/dropship/medium_grey_single_wide_up_to_down,
+/area/shuttle/drop3/sulaco)
+"SM" = (
+/turf/closed/shuttle/dropship3{
+ icon_state = "10"
+ },
+/area/shuttle/drop3/sulaco)
+"SP" = (
+/obj/effect/attach_point/electronics/dropship3{
+ dir = 1
+ },
+/obj/structure/shuttle/part/dropship3/transparent/inner_left_weapons,
+/turf/template_noop,
+/area/shuttle/drop3/sulaco)
+"Tc" = (
+/obj/structure/shuttle/part/dropship3/transparent/nose_center,
+/turf/template_noop,
+/area/shuttle/drop3/sulaco)
+"Tq" = (
+/obj/structure/shuttle/part/dropship3/transparent/engine_right_cap,
+/turf/template_noop,
+/area/shuttle/drop3/sulaco)
+"Tx" = (
+/obj/structure/machinery/door/airlock/multi_tile/almayer/dropshiprear/ds3{
+ id = "aft_door"
+ },
+/turf/open/shuttle/dropship/medium_grey_single_wide_up_to_down,
+/area/shuttle/drop3/sulaco)
+"TZ" = (
+/turf/closed/shuttle/dropship3{
+ icon_state = "42"
+ },
+/area/shuttle/drop3/sulaco)
+"Vf" = (
+/turf/closed/shuttle/dropship3{
+ icon_state = "62"
+ },
+/area/shuttle/drop3/sulaco)
+"Vl" = (
+/obj/item/device/radio/intercom/saipan{
+ layer = 3.5;
+ pixel_x = -10
+ },
+/turf/closed/shuttle/dropship3{
+ icon_state = "52"
+ },
+/area/shuttle/drop3/sulaco)
+"VM" = (
+/obj/effect/attach_point/fuel/dropship3{
+ dir = 1;
+ pixel_x = -32;
+ attach_id = 11
+ },
+/turf/closed/shuttle/dropship3/transparent{
+ icon_state = "33"
+ },
+/area/shuttle/drop3/sulaco)
+"VQ" = (
+/turf/closed/shuttle/dropship3{
+ icon_state = "56"
+ },
+/area/shuttle/drop3/sulaco)
+"Zk" = (
+/turf/closed/shuttle/dropship3/transparent{
+ icon_state = "96"
+ },
+/area/shuttle/drop3/sulaco)
+
+(1,1,1) = {"
+SD
+SD
+SD
+SD
+SD
+vm
+jZ
+xB
+SD
+SD
+SD
+SD
+SD
+Sx
+wl
+Iu
+jk
+Nf
+SD
+SD
+SD
+"}
+(2,1,1) = {"
+SD
+SD
+SD
+hX
+jf
+Hu
+gK
+Vf
+Cz
+zW
+Vl
+tm
+wW
+Tq
+yQ
+OZ
+vo
+jI
+SD
+SD
+Sj
+"}
+(3,1,1) = {"
+SD
+SD
+SD
+SP
+tJ
+Pc
+og
+Pc
+Cz
+Cz
+Pc
+cB
+lr
+TZ
+gD
+Pv
+HW
+nI
+Pb
+SD
+wr
+"}
+(4,1,1) = {"
+Dx
+tP
+Rj
+ey
+pg
+eh
+sJ
+sJ
+sJ
+sJ
+sJ
+fh
+Pc
+Qy
+Pc
+cB
+Pc
+cB
+SM
+wY
+PY
+"}
+(5,1,1) = {"
+Tc
+Zk
+gt
+OK
+PS
+KR
+Pc
+cB
+Pc
+cB
+Pc
+KR
+sJ
+sJ
+sJ
+sJ
+sJ
+sJ
+Tx
+SD
+SD
+"}
+(6,1,1) = {"
+Tc
+HF
+jP
+xi
+uH
+BR
+FG
+hO
+El
+VQ
+qU
+cd
+sJ
+iX
+sJ
+hV
+sJ
+Of
+Cz
+SD
+SD
+"}
+(7,1,1) = {"
+Tc
+EG
+QI
+Gl
+Na
+KR
+Pc
+cB
+Pc
+cB
+Pc
+KR
+sJ
+sJ
+sJ
+sJ
+sJ
+sJ
+Cz
+SD
+SD
+"}
+(8,1,1) = {"
+rB
+Hm
+Mj
+aC
+nq
+nB
+sJ
+sJ
+sJ
+sJ
+sJ
+ai
+Pc
+FV
+SH
+cB
+Pc
+cB
+Nt
+fb
+Kc
+"}
+(9,1,1) = {"
+SD
+SD
+SD
+NV
+Rn
+Pc
+cB
+Pc
+Cz
+Cz
+Pc
+cB
+wt
+kP
+bc
+MR
+br
+ul
+OU
+SD
+MM
+"}
+(10,1,1) = {"
+SD
+SD
+SD
+lH
+Kn
+rb
+yM
+cX
+Cz
+qP
+gF
+IF
+iP
+Sx
+Mu
+ls
+GH
+Nf
+SD
+SD
+uD
+"}
+(11,1,1) = {"
+SD
+SD
+SD
+SD
+SD
+dl
+Ns
+Jc
+SD
+SD
+SD
+SD
+SD
+Tq
+mg
+VM
+cQ
+jI
+SD
+SD
+SD
+"}
diff --git a/maps/shuttles/ert_shuttle_big.dmm b/maps/shuttles/ert_shuttle_big.dmm
index 0dbd1adcfb47..b7dbd500e823 100644
--- a/maps/shuttles/ert_shuttle_big.dmm
+++ b/maps/shuttles/ert_shuttle_big.dmm
@@ -855,7 +855,7 @@
/turf/open/floor/plating/almayer,
/area/shuttle/ert)
"YN" = (
-/obj/structure/machinery/power/apc/almayer{
+/obj/structure/machinery/power/apc/almayer/south{
cell_type = /obj/item/cell/hyper
},
/turf/open/floor/almayer/tcomms,
diff --git a/maps/shuttles/trijentshuttle2.dmm b/maps/shuttles/trijentshuttle2.dmm
index b4ea080e4cfa..7947f6824e7f 100644
--- a/maps/shuttles/trijentshuttle2.dmm
+++ b/maps/shuttles/trijentshuttle2.dmm
@@ -38,11 +38,7 @@
/turf/open/shuttle/escapepod,
/area/shuttle/trijent_shuttle/elevator)
"n" = (
-/obj/structure/machinery/power/apc{
- dir = 1;
- pixel_y = 26;
- start_charge = 0
- },
+/obj/structure/machinery/power/apc/no_power/north,
/obj/item/tool/wirecutters{
pixel_y = -7
},
diff --git a/maps/templates/baseone.dmm b/maps/templates/baseone.dmm
index c054c2310164..80962bf165c5 100644
--- a/maps/templates/baseone.dmm
+++ b/maps/templates/baseone.dmm
@@ -504,7 +504,7 @@
/turf/open/floor/almayer/blue/north,
/area/adminlevel/bunker01/hydroponics)
"bD" = (
-/obj/structure/machinery/hydro_floodlight,
+/obj/structure/machinery/colony_floodlight,
/turf/open/floor/almayer/blue/northeast,
/area/adminlevel/bunker01/hydroponics)
"bE" = (
diff --git a/maps/templates/basetwo.dmm b/maps/templates/basetwo.dmm
index 890d433cb575..1051f515c96d 100644
--- a/maps/templates/basetwo.dmm
+++ b/maps/templates/basetwo.dmm
@@ -896,7 +896,7 @@
/turf/open/floor/almayer/blue/north,
/area/adminlevel/bunker01/hydroponics)
"df" = (
-/obj/structure/machinery/hydro_floodlight,
+/obj/structure/machinery/colony_floodlight,
/turf/open/floor/almayer/blue/northeast,
/area/adminlevel/bunker01/hydroponics)
"dg" = (
diff --git a/maps/templates/lazy_templates/pizza_ert_station.dmm b/maps/templates/lazy_templates/pizza_ert_station.dmm
index c52f388356c8..a3cc4e7a02ec 100644
--- a/maps/templates/lazy_templates/pizza_ert_station.dmm
+++ b/maps/templates/lazy_templates/pizza_ert_station.dmm
@@ -1391,7 +1391,7 @@
/area/adminlevel/ert_station/pizza_station)
"sp" = (
/obj/structure/surface/table/reinforced,
-/obj/item/weapon/pizza_cutter,
+/obj/item/tool/kitchen/pizzacutter,
/turf/open/floor/prison/kitchen,
/area/adminlevel/ert_station/pizza_station)
"sx" = (
@@ -2986,7 +2986,7 @@
"MB" = (
/obj/structure/surface/table/reinforced,
/obj/item/pizzabox/meat,
-/obj/item/weapon/pizza_cutter,
+/obj/item/tool/kitchen/pizzacutter,
/turf/open/floor/cmo,
/area/adminlevel/ert_station/pizza_station)
"MK" = (
diff --git a/sound/effects/flag_upp_warcry.ogg b/sound/effects/flag_upp_warcry.ogg
new file mode 100644
index 000000000000..589274ffb8e8
Binary files /dev/null and b/sound/effects/flag_upp_warcry.ogg differ
diff --git a/sound/effects/flag_upp_warcry_extra.ogg b/sound/effects/flag_upp_warcry_extra.ogg
new file mode 100644
index 000000000000..5ac6ff51e039
Binary files /dev/null and b/sound/effects/flag_upp_warcry_extra.ogg differ
diff --git a/sound/effects/revive_notify.ogg b/sound/effects/revive_notify.ogg
new file mode 100644
index 000000000000..d155f345181c
Binary files /dev/null and b/sound/effects/revive_notify.ogg differ
diff --git a/sound/effects/throwing/swoosh1.ogg b/sound/effects/throwing/swoosh1.ogg
new file mode 100644
index 000000000000..dd8a80a1073c
Binary files /dev/null and b/sound/effects/throwing/swoosh1.ogg differ
diff --git a/sound/effects/throwing/swoosh2.ogg b/sound/effects/throwing/swoosh2.ogg
new file mode 100644
index 000000000000..012a3672b733
Binary files /dev/null and b/sound/effects/throwing/swoosh2.ogg differ
diff --git a/sound/effects/throwing/swoosh3.ogg b/sound/effects/throwing/swoosh3.ogg
new file mode 100644
index 000000000000..52cc1aa164b3
Binary files /dev/null and b/sound/effects/throwing/swoosh3.ogg differ
diff --git a/sound/effects/throwing/swoosh4.ogg b/sound/effects/throwing/swoosh4.ogg
new file mode 100644
index 000000000000..2639b4f255de
Binary files /dev/null and b/sound/effects/throwing/swoosh4.ogg differ
diff --git a/sound/items/megaphone.ogg b/sound/items/megaphone.ogg
new file mode 100644
index 000000000000..31d7a8d1ad96
Binary files /dev/null and b/sound/items/megaphone.ogg differ
diff --git a/sound/machines/telephone/dial.ogg b/sound/machines/telephone/dial.ogg
new file mode 100644
index 000000000000..0dffcc34cca7
Binary files /dev/null and b/sound/machines/telephone/dial.ogg differ
diff --git a/sound/machines/telephone/phone_busy.ogg b/sound/machines/telephone/phone_busy.ogg
new file mode 100644
index 000000000000..3ddb26e62cb3
Binary files /dev/null and b/sound/machines/telephone/phone_busy.ogg differ
diff --git a/sound/machines/telephone/remote_hangup.ogg b/sound/machines/telephone/remote_hangup.ogg
new file mode 100644
index 000000000000..f646548a5ebb
Binary files /dev/null and b/sound/machines/telephone/remote_hangup.ogg differ
diff --git a/sound/machines/telephone/remote_pickup.ogg b/sound/machines/telephone/remote_pickup.ogg
new file mode 100644
index 000000000000..7d2cb8297c24
Binary files /dev/null and b/sound/machines/telephone/remote_pickup.ogg differ
diff --git a/sound/machines/telephone/ring_outgoing.ogg b/sound/machines/telephone/ring_outgoing.ogg
new file mode 100644
index 000000000000..67db23c49b20
Binary files /dev/null and b/sound/machines/telephone/ring_outgoing.ogg differ
diff --git a/sound/machines/telephone/talk_phone1.ogg b/sound/machines/telephone/talk_phone1.ogg
new file mode 100644
index 000000000000..53a665a389d1
Binary files /dev/null and b/sound/machines/telephone/talk_phone1.ogg differ
diff --git a/sound/machines/telephone/talk_phone2.ogg b/sound/machines/telephone/talk_phone2.ogg
new file mode 100644
index 000000000000..e0b39b36b85d
Binary files /dev/null and b/sound/machines/telephone/talk_phone2.ogg differ
diff --git a/sound/machines/telephone/talk_phone3.ogg b/sound/machines/telephone/talk_phone3.ogg
new file mode 100644
index 000000000000..abdb73b8a87d
Binary files /dev/null and b/sound/machines/telephone/talk_phone3.ogg differ
diff --git a/sound/machines/telephone/talk_phone4.ogg b/sound/machines/telephone/talk_phone4.ogg
new file mode 100644
index 000000000000..6809d1951ca8
Binary files /dev/null and b/sound/machines/telephone/talk_phone4.ogg differ
diff --git a/sound/machines/telephone/talk_phone5.ogg b/sound/machines/telephone/talk_phone5.ogg
new file mode 100644
index 000000000000..12b3619103b1
Binary files /dev/null and b/sound/machines/telephone/talk_phone5.ogg differ
diff --git a/sound/machines/telephone/talk_phone6.ogg b/sound/machines/telephone/talk_phone6.ogg
new file mode 100644
index 000000000000..b617fbd4b54f
Binary files /dev/null and b/sound/machines/telephone/talk_phone6.ogg differ
diff --git a/sound/machines/telephone/talk_phone7.ogg b/sound/machines/telephone/talk_phone7.ogg
new file mode 100644
index 000000000000..f7055617efbc
Binary files /dev/null and b/sound/machines/telephone/talk_phone7.ogg differ
diff --git a/sound/machines/vending_drop.ogg b/sound/machines/vending_drop.ogg
new file mode 100644
index 000000000000..4e0ed7dd6d89
Binary files /dev/null and b/sound/machines/vending_drop.ogg differ
diff --git a/sound/voice/callstation_unavailable.ogg b/sound/voice/callstation_unavailable.ogg
new file mode 100644
index 000000000000..992e87fa5703
Binary files /dev/null and b/sound/voice/callstation_unavailable.ogg differ
diff --git a/sound/weapons/sting_boom_small1.ogg b/sound/weapons/sting_boom_small1.ogg
new file mode 100644
index 000000000000..fb02d14a68fa
Binary files /dev/null and b/sound/weapons/sting_boom_small1.ogg differ
diff --git a/strings/marinetips.txt b/strings/marinetips.txt
index 253860e1eddd..92f674b36906 100644
--- a/strings/marinetips.txt
+++ b/strings/marinetips.txt
@@ -102,3 +102,6 @@ ARES will periodically report the amount of available tech points on Command Cha
The quick wield keys generally prioritize wieldable gear going from left to right on your inventory bar.
Orbital Bombardment warheads respect roofing and hive core protection. They won't hit inside of protected areas.
The Queen can unbolt and break dropship doors by prying them open, even if they are unlocked. Pilots, Dropship Crew Chiefs, Engineers and Synths can repair these doors with a multitool.
+If you jump out of a dropship with a parachute on (when there is no paradrop system active), you will land at a random location on the map.
+If you push crates out of a dropship when paradropping, it will land near the paradrop drop point.
+When paradropping, you can toss any large item (such as a backpack, pouch, or gun) into hyperspace, and it will land near the paradrop drop point. However, smaller items such as flares will not survive the fall.
diff --git a/strings/memetips.txt b/strings/memetips.txt
index abfe0872180c..1767d8688953 100644
--- a/strings/memetips.txt
+++ b/strings/memetips.txt
@@ -48,3 +48,4 @@ ARES is not sentient. It has no feelings and its only thoughts are pre-programme
Remember that as Yautja HPCs are your primary weapons.
You can always bully staff into giving you more awesome tips.
Embrace the suck.
+Jump out of the Alamo during transit to deploy quicker than other players.
diff --git a/strings/operation_prefix.txt b/strings/operation_prefix.txt
index c20b08b42df9..9edac4ba3e79 100644
--- a/strings/operation_prefix.txt
+++ b/strings/operation_prefix.txt
@@ -114,7 +114,7 @@ Northern
Industrial
All American
Clear
-Resolute
+Saipan
Mutual
101st
13th
diff --git a/tgui/packages/tgui-panel/styles/goon/chat-dark.scss b/tgui/packages/tgui-panel/styles/goon/chat-dark.scss
index 1bc583871c41..5ea797fe2230 100644
--- a/tgui/packages/tgui-panel/styles/goon/chat-dark.scss
+++ b/tgui/packages/tgui-panel/styles/goon/chat-dark.scss
@@ -1040,6 +1040,26 @@ em {
color: #3eb489;
}
+.opforcmd {
+ color: #68bcec;
+}
+
+.opformed {
+ color: #52c724;
+}
+
+.opforeng {
+ color: #e9812d;
+}
+
+.opforcct {
+ color: #ec3018;
+}
+
+.opforspe {
+ color: #7221cf;
+}
+
.medium {
font-size: 110%;
}
diff --git a/tgui/packages/tgui-panel/styles/goon/chat-light.scss b/tgui/packages/tgui-panel/styles/goon/chat-light.scss
index 48232ff5fd24..87beb202a5ae 100644
--- a/tgui/packages/tgui-panel/styles/goon/chat-light.scss
+++ b/tgui/packages/tgui-panel/styles/goon/chat-light.scss
@@ -1072,6 +1072,26 @@ h2.alert {
color: #3a7e65;
}
+.opforcmd {
+ color: #568dad;
+}
+
+.opformed {
+ color: #3e921d;
+}
+
+.opforeng {
+ color: #b16222;
+}
+
+.opforcct {
+ color: #c42b17;
+}
+
+.opforspe {
+ color: #611fad;
+}
+
.medium {
font-size: 110%;
}
diff --git a/tgui/packages/tgui/constants.ts b/tgui/packages/tgui/constants.ts
index 38f5448c3ef3..4e332bda6907 100644
--- a/tgui/packages/tgui/constants.ts
+++ b/tgui/packages/tgui/constants.ts
@@ -149,27 +149,27 @@ export const RADIO_CHANNELS = [
{
name: 'UPP CMD',
freq: 1252,
- color: '#8f4a4b',
+ color: '#4a768f',
},
{
name: 'UPP ENG',
freq: 1253,
- color: '#8f4a4b',
+ color: '#8c5223',
},
{
name: 'UPP MED',
freq: 1254,
- color: '#8f4a4b',
+ color: '#159e73',
},
{
name: 'UPP CCT',
freq: 1255,
- color: '#8f4a4b',
+ color: '#b3222e',
},
{
name: 'UPP KDO',
freq: 1259,
- color: '#8f4a4b',
+ color: '#789e18',
},
{
name: 'CLF',
@@ -179,22 +179,22 @@ export const RADIO_CHANNELS = [
{
name: 'CLF CMD',
freq: 1272,
- color: '#8e83ca',
+ color: '#4a768f',
},
{
name: 'CLF ENG',
freq: 1273,
- color: '#8e83ca',
+ color: '#8c5223',
},
{
name: 'CLF MED',
freq: 1274,
- color: '#8e83ca',
+ color: '#159e73',
},
{
name: 'CLF CCT',
freq: 1275,
- color: '#8e83ca',
+ color: '#b3222e',
},
{
name: 'LSTN BUG A',
diff --git a/tgui/packages/tgui/interfaces/DropshipFlightControl.tsx b/tgui/packages/tgui/interfaces/DropshipFlightControl.tsx
index 4e21b8223660..ee99db7f15a5 100644
--- a/tgui/packages/tgui/interfaces/DropshipFlightControl.tsx
+++ b/tgui/packages/tgui/interfaces/DropshipFlightControl.tsx
@@ -1,3 +1,5 @@
+import { useEffect, useState } from 'react';
+
import { useBackend, useSharedState } from '../backend';
import {
Box,
@@ -39,7 +41,13 @@ interface AutomatedControl {
ground_lz: null | string;
}
+type ShuttleRef = {
+ name: string;
+ id: string;
+};
+
interface DropshipNavigationProps extends NavigationProps {
+ shuttle_id: string;
door_status: Array;
has_flight_optimisation?: 0 | 1;
is_flight_optimised?: 0 | 1;
@@ -48,8 +56,9 @@ interface DropshipNavigationProps extends NavigationProps {
primary_lz?: string;
automated_control: AutomatedControl;
has_flyby_skill: 0 | 1;
-
playing_launch_announcement_alarm: boolean;
+ can_change_shuttle: 0 | 1;
+ alternative_shuttles: Array;
}
const DropshipDoorControl = () => {
@@ -248,7 +257,7 @@ export const TouchdownCooldown = () => {
);
};
-const AutopilotConfig = (props) => {
+const AutopilotConfig = () => {
const { data, act } = useBackend();
const [automatedHangar, setAutomatedHangar] = useSharedState<
string | undefined
@@ -327,6 +336,7 @@ const StopLaunchAnnouncementAlarm = () => {
icon="ban"
onClick={() => {
act('stop_playing_launch_announcement_alarm');
+ act('button-push');
}}
>
Stop Alarm
@@ -341,6 +351,7 @@ const PlayLaunchAnnouncementAlarm = () => {
icon="rocket"
onClick={() => {
act('play_launch_announcement_alarm');
+ act('button-push');
}}
>
Start Alarm
@@ -349,11 +360,7 @@ const PlayLaunchAnnouncementAlarm = () => {
};
const LaunchAnnouncementAlarm = () => {
- const { data, act } = useBackend();
- const [siteselection, setSiteSelection] = useSharedState(
- 'target_site',
- undefined,
- );
+ const { data } = useBackend();
return (
{
);
};
-const RenderScreen = (props) => {
+const DropshipButton = (props: {
+ readonly shipId: string;
+ readonly shipName: string;
+ readonly disable: boolean;
+ readonly onClick: () => void;
+}) => {
+ const { act, data } = useBackend();
+ const match = props.shipId === data.shuttle_id;
+
+ return (
+ {
+ act('change_shuttle', { new_shuttle: props.shipId });
+ act('button-push');
+ props.onClick();
+ }}
+ >
+ {match && '['}
+ {props.shipName}
+ {match && ']'}
+
+ );
+};
+
+const DropshipSelector = () => {
+ const { data } = useBackend();
+ const [refreshTimeout, setRefreshTimeout] = useState<
+ NodeJS.Timeout | undefined
+ >(undefined);
+
+ useEffect(() => {
+ if (refreshTimeout) {
+ return () => clearTimeout(refreshTimeout);
+ }
+ return () => {};
+ }, [refreshTimeout]);
+
+ return (
+
+
+ {data.alternative_shuttles
+ .sort((a, b) => a.id.localeCompare(b.id))
+ .map((x) => (
+ {
+ const freeze = setTimeout(
+ () => setRefreshTimeout(undefined),
+ 2000,
+ );
+ setRefreshTimeout(freeze);
+ }}
+ />
+ ))}
+
+
+ );
+};
+
+const RenderScreen = () => {
const { data } = useBackend();
return (
<>
- {data.can_set_automated === 1 && }
+ {data.alternative_shuttles.length > 0 && }
{data.shuttle_mode === 'idle' && }
+ {data.shuttle_mode === 'idle' && data.can_set_automated === 1 && (
+
+ )}
{data.shuttle_mode === 'igniting' && }
{data.shuttle_mode === 'pre-arrival' && }
{data.shuttle_mode === 'recharging' && }
@@ -384,18 +457,27 @@ const RenderScreen = (props) => {
)}
{data.door_status.length > 0 && }
- { }
+ {data.alternative_shuttles.length === 0 && }
+ >
+ );
+};
+
+const DropshipDisabledScreen = () => {
+ const { data } = useBackend();
+ return (
+ <>
+ {data.alternative_shuttles.length > 0 && }
+
>
);
};
-export const DropshipFlightControl = (props) => {
+export const DropshipFlightControl = () => {
const { data } = useBackend();
return (
-
- {data.is_disabled === 1 && }
- {data.is_disabled === 0 && }
+
+ {data.is_disabled === 0 ? : }
);
diff --git a/tgui/packages/tgui/interfaces/HealthScan.jsx b/tgui/packages/tgui/interfaces/HealthScan.jsx
index 1df8a86c06e2..8b1d82460bf2 100644
--- a/tgui/packages/tgui/interfaces/HealthScan.jsx
+++ b/tgui/packages/tgui/interfaces/HealthScan.jsx
@@ -45,6 +45,7 @@ export const HealthScan = (props) => {
hugged,
detail_level,
permadead,
+ heart_broken,
advice,
species,
holocard,
@@ -115,9 +116,11 @@ export const HealthScan = (props) => {
{permadead
- ? 'Permanently deceased'
+ ? heart_broken
+ ? 'Myocardial rupture, surgical intervention required'
+ : 'Permanently deceased'
: Synthetic
- ? 'Central power system shutdown, reboot possible.'
+ ? 'Central power system shutdown, reboot possible'
: 'Cardiac arrest, defibrillation possible'}
diff --git a/tgui/packages/tgui/interfaces/NavigationShuttle.tsx b/tgui/packages/tgui/interfaces/NavigationShuttle.tsx
index 239ce8f2601d..91f831137f1c 100644
--- a/tgui/packages/tgui/interfaces/NavigationShuttle.tsx
+++ b/tgui/packages/tgui/interfaces/NavigationShuttle.tsx
@@ -261,7 +261,7 @@ const DoorControls = () => {
};
export const DisabledScreen = (props) => {
- const { data, act } = useBackend();
+ const { data } = useBackend();
const disabled_text = data.mission_accomplished
? 'Auto-navigation protocol completed - return home complete. Shuttle disabled.'
diff --git a/tgui/packages/tgui/interfaces/Orbit/index.tsx b/tgui/packages/tgui/interfaces/Orbit/index.tsx
index 6b7089915514..36ceb6359cde 100644
--- a/tgui/packages/tgui/interfaces/Orbit/index.tsx
+++ b/tgui/packages/tgui/interfaces/Orbit/index.tsx
@@ -158,6 +158,10 @@ const marineSplitter = (members: Array) => {
const charlieSquad: Array = [];
const deltaSquad: Array = [];
const foxtrotSquad: Array = [];
+ const echoSquad: Array = [];
+ const CBRNSquad: Array = [];
+ const FORECONSquad: Array = [];
+ const SOFSquad: Array = [];
const other: Array = [];
members.forEach((x) => {
@@ -171,6 +175,14 @@ const marineSplitter = (members: Array) => {
deltaSquad.push(x);
} else if (x.job?.includes('Foxtrot')) {
foxtrotSquad.push(x);
+ } else if (x.job?.includes('Echo')) {
+ echoSquad.push(x);
+ } else if (x.job?.includes('CBRN')) {
+ CBRNSquad.push(x);
+ } else if (x.job?.includes('FORECON')) {
+ FORECONSquad.push(x);
+ } else if (x.job?.includes('SOF')) {
+ SOFSquad.push(x);
} else {
other.push(x);
}
@@ -181,7 +193,11 @@ const marineSplitter = (members: Array) => {
buildSquadObservable('Bravo', 'yellow', bravoSquad),
buildSquadObservable('Charlie', 'purple', charlieSquad),
buildSquadObservable('Delta', 'blue', deltaSquad),
- buildSquadObservable('Foxtrot', 'teal', foxtrotSquad),
+ buildSquadObservable('Foxtrot', 'brown', foxtrotSquad),
+ buildSquadObservable('Echo', 'teal', echoSquad),
+ buildSquadObservable('CBRN', 'dark-blue', CBRNSquad),
+ buildSquadObservable('FORECON', 'green', FORECONSquad),
+ buildSquadObservable('SOF', 'red', SOFSquad),
buildSquadObservable('Other', 'grey', other),
];
return squads;
diff --git a/tgui/packages/tgui/interfaces/ResearchTerminal.tsx b/tgui/packages/tgui/interfaces/ResearchTerminal.tsx
index 11389bbeeeb9..6ba24d96bea9 100644
--- a/tgui/packages/tgui/interfaces/ResearchTerminal.tsx
+++ b/tgui/packages/tgui/interfaces/ResearchTerminal.tsx
@@ -1,6 +1,5 @@
import { useState } from 'react';
-import { classes } from '../../common/react';
import { useBackend } from '../backend';
import { Box, Button, Flex, Section, Stack, Tabs } from '../components';
import { BoxProps } from '../components/Box';
@@ -32,69 +31,6 @@ interface TerminalProps {
printer_toner: number;
}
-const PurchaseDocs = () => {
- const { data, act } = useBackend();
- const [purchaseSelection, setPurchaseSelection] = useState('0');
- const clearance_level = data.clearance_level;
- const all_levels = ['1', '2', '3', '4', '5'];
- const costs = { '1': 7, '2': 9, '3': 11, '4': 13, '5': 15 };
- const available_levels = Array.from(Array(clearance_level).keys()).map((x) =>
- (x + 1).toString(),
- );
-
- return (
-
-
- Purchase Reports
-
-
-
-
-
- {all_levels.map((x) => {
- const isDisabled =
- !available_levels.includes(x) || costs[x] > data.rsc_credits;
- return (
-
- setPurchaseSelection(x)}
- >
- Level {x} {costs[x]}CR
-
-
- );
- })}
-
-
-
- {purchaseSelection !== '0' && (
-
- {
- act('purchase_document', {
- purchase_document: purchaseSelection,
- });
- setPurchaseSelection('0');
- }}
- onCancel={() => setPurchaseSelection('0')}
- >
-
- Are you sure you want to purchase a level{' '}
- {purchaseSelection} document?
-
- It will cost {costs[purchaseSelection]} credits.
-
-
-
- )}
-
- );
-};
-
interface ConfirmationProps extends BoxProps {
readonly onConfirm: () => any;
readonly onCancel: () => any;
@@ -486,7 +422,6 @@ const ResearchManager = (props: {
-
{
- const { data } = useBackend(context);
- const { admin, administrators } = data;
+ const { data } = useBackend();
+ const { base_data, admin_additional, admin_stealthed_additional } = data;
+
+ const total_admins = mergeArrays(
+ base_data.total_admins,
+ admin_additional?.total_admins,
+ admin_stealthed_additional?.total_admins,
+ );
return (
- {administrators !== undefined ? (
+ {base_data ? (
- {administrators.map((x, index) => (
-
- {x.admins.map((x, index) => (
-
- ))}
-
- ))}
+
) : null}
@@ -37,6 +30,23 @@ export const StaffWho = (props, context) => {
);
};
+const FilterCategories = (props, context) => {
+ const { categories, total_admins } = props;
+
+ return categories.map((category) => {
+ const category_admins = total_admins.filter((adminObj) =>
+ isMatch(adminObj, category.category),
+ );
+ return (
+
+ );
+ });
+};
+
const StaffWhoCollapsible = (props, context) => {
const { title, color, children } = props;
return (
@@ -46,33 +56,113 @@ const StaffWhoCollapsible = (props, context) => {
);
};
+const CategoryDropDown = (props, context) => {
+ const { category, category_admins } = props;
+ return (
+
+
+
+ );
+};
+
+const FilterAdmins = (props, context) => {
+ const { category_admins } = props;
+
+ return category_admins.map((adminObj) => {
+ const ckey = Object.keys(adminObj)[0];
+ return ;
+ });
+};
+
const GetAdminInfo = (props, context) => {
- const { admin, content, color, text } = props;
- return admin ? (
+ const { ckey, special_color, special_text, text, color } = props;
+ return (
- {content}
-
- ) : (
-
- {content}
+
+ {ckey}
+ {special_text}
+
);
};
+
+const isMatch = (adminObj, search) => {
+ if (!search) {
+ return true;
+ }
+
+ let found = false;
+ const adminKey = Object.keys(adminObj)[0];
+ const params = adminObj[adminKey];
+ params.forEach((param) => {
+ if (found) {
+ return;
+ }
+ Object.keys(param).forEach((key) => {
+ if (param[key] === search) {
+ found = true;
+ return;
+ }
+ });
+ });
+ return found;
+};
+
+// Krill me please
+const mergeArrays = (...arrays) => {
+ const mergedObject = {};
+
+ arrays.forEach((array) => {
+ if (!array) return;
+
+ array.forEach((item) => {
+ if (!item) return;
+
+ const key = Object.keys(item)[0];
+ const value = item[key];
+
+ if (!mergedObject[key]) {
+ mergedObject[key] = [];
+ }
+
+ value.forEach((subItem) => {
+ if (typeof subItem !== 'object' || subItem === null) return;
+
+ const existingItemIndex = mergedObject[key].findIndex(
+ (existingSubItem) =>
+ Object.keys(existingSubItem).some((subKey) =>
+ Object.prototype.hasOwnProperty.call(subItem, subKey),
+ ),
+ );
+
+ if (existingItemIndex !== -1) {
+ mergedObject[key][existingItemIndex] = {
+ ...mergedObject[key][existingItemIndex],
+ ...subItem,
+ };
+ } else {
+ mergedObject[key].push(subItem);
+ }
+ });
+ });
+ });
+
+ return Object.keys(mergedObject).map((key) => ({ [key]: mergedObject[key] }));
+};
diff --git a/tgui/packages/tgui/interfaces/WeaponStats.jsx b/tgui/packages/tgui/interfaces/WeaponStats.jsx
index abbb32f0f8af..4def237f6b9c 100644
--- a/tgui/packages/tgui/interfaces/WeaponStats.jsx
+++ b/tgui/packages/tgui/interfaces/WeaponStats.jsx
@@ -281,13 +281,27 @@ const Accuracy = (props) => {
const Range = (props) => {
const { data } = useBackend();
- const { max_range, range_max, falloff, falloff_max } = data;
+ const {
+ max_range,
+ range_max,
+ falloff,
+ falloff_max,
+ effective_range,
+ effective_range_max,
+ } = data;
return (
<>
Max range: {max_range} / {range_max}
+
+ Effective range: {effective_range}
+
+
Falloff: {falloff} / {falloff_max}
@@ -298,16 +312,13 @@ const Range = (props) => {
const ArmourPen = (props) => {
const { data } = useBackend();
- const { penetration, penetration_max, armor_punch, punch_max } = data;
+ const { penetration, penetration_max } = data;
return (
<>
Armour penetration: {penetration} / {penetration_max}
-
- Armour punch: {armor_punch} / {punch_max}
-
>
);
};
@@ -317,9 +328,7 @@ const DamageTable = (props) => {
const {
damage_armor_profile_marine,
damage_armor_profile_xeno,
- damage_armor_profile_armorbreak,
damage_armor_profile_headers,
- glob_armourbreak,
} = data;
return (
@@ -346,14 +355,6 @@ const DamageTable = (props) => {
{entry}
))}
- {!glob_armourbreak ? (
-
- Armor break
- {map(damage_armor_profile_armorbreak, (entry, i) => (
- {entry}
- ))}
-
- ) : null}
);
diff --git a/tgui/packages/tgui/interfaces/Who.jsx b/tgui/packages/tgui/interfaces/Who.jsx
index dccf3d1e39f0..5be9dc134b07 100644
--- a/tgui/packages/tgui/interfaces/Who.jsx
+++ b/tgui/packages/tgui/interfaces/Who.jsx
@@ -1,4 +1,6 @@
-import { useBackend, useLocalState } from '../backend';
+import { useState } from 'react';
+
+import { useBackend } from '../backend';
import {
Box,
Button,
@@ -11,20 +13,24 @@ import {
import { Window } from '../layouts';
export const Who = (props, context) => {
- const { act, data } = useBackend(context);
+ const { act, data } = useBackend();
const {
- admin,
- all_clients,
- total_players = [],
- additional_info = [],
- factions = [],
- xenomorphs = [],
+ base_data,
+ player_additional,
+ player_stealthed_additional,
+ factions_additional,
} = data;
- const [searchQuery, setSearchQuery] = useLocalState('searchQuery', '');
+ const total_players = mergeArrays(
+ base_data?.total_players,
+ player_additional?.total_players,
+ player_stealthed_additional?.total_players,
+ );
+
+ const [searchQuery, setSearchQuery] = useState('');
const searchPlayers = () =>
- total_players.filter((player) => isMatch(player, searchQuery));
+ total_players.filter((playerObj) => isMatch(playerObj, searchQuery));
const filteredTotalPlayers = searchPlayers();
@@ -42,11 +48,13 @@ export const Who = (props, context) => {
+ onEnter={(e, value) => {
+ const clientObj = searchPlayers()?.[0];
+ if (!clientObj) return;
act('get_player_panel', {
- ckey: searchPlayers()?.[0].ckey,
- })
- }
+ ckey: Object.keys(clientObj)[0],
+ });
+ }}
onInput={(e) => setSearchQuery(e.target.value)}
placeholder="Search..."
value={searchQuery}
@@ -56,55 +64,34 @@ export const Who = (props, context) => {
-
-
- {filteredTotalPlayers.length ? (
+ {filteredTotalPlayers && (
+
+
- {filteredTotalPlayers.map((x) => (
-
- ))}
+
- ) : null}
-
-
- {admin !== 0 ? (
+
+
+ )}
+ {factions_additional && (
- {additional_info.length
- ? additional_info.map((x, index) => (
-
- ))
- : null}
- {factions.length
- ? factions.map((x, index) => (
-
- ))
- : null}
- {xenomorphs.length
- ? xenomorphs.map((x, index) => (
-
- ))
- : null}
+ {factions_additional.map((x, index) => (
+
+ ))}
- ) : null}
+ )}
@@ -122,16 +109,15 @@ const WhoCollapsible = (props, context) => {
};
const GetAddInfo = (props, context) => {
- const { act } = useBackend(context);
const { content, color, text } = props;
return (
{
);
};
+const FilterPlayers = (props, context) => {
+ const { players_to_filter } = props;
+
+ return players_to_filter.map((clientObj) => {
+ const ckey = Object.keys(clientObj)[0];
+ return ;
+ });
+};
+
const GetPlayerInfo = (props, context) => {
- const { act } = useBackend(context);
- const {
- admin,
- player: { ckey, ckey_color, color, text },
- } = props;
- return admin !== 0 ? (
+ const { act } = useBackend();
+ const { ckey, text, color, ckey_color } = props;
+
+ return (
act('get_player_panel', { ckey: ckey })}
tooltip={text}
tooltipPosition="bottom-start"
>
- {ckey}
-
- ) : (
-
- {ckey}
+ {ckey}
);
};
-const isMatch = (player, searchQuery) => {
+const isMatch = (playerObj, searchQuery) => {
if (!searchQuery) {
return true;
}
- return (
- player.ckey.toLowerCase().includes(searchQuery?.toLowerCase()) || false
- );
+ const key = Object.keys(playerObj)[0];
+ return key.toLowerCase().includes(searchQuery?.toLowerCase()) || false;
+};
+
+// Krill me please
+const mergeArrays = (...arrays) => {
+ const mergedObject = {};
+
+ arrays.forEach((array) => {
+ if (!array) return;
+
+ array.forEach((item) => {
+ if (!item) return;
+
+ const key = Object.keys(item)[0];
+ const value = item[key];
+
+ if (!mergedObject[key]) {
+ mergedObject[key] = [];
+ }
+
+ value.forEach((subItem) => {
+ if (typeof subItem !== 'object' || subItem === null) return;
+
+ const existingItemIndex = mergedObject[key].findIndex(
+ (existingSubItem) =>
+ Object.keys(existingSubItem).some((subKey) =>
+ Object.prototype.hasOwnProperty.call(subItem, subKey),
+ ),
+ );
+
+ if (existingItemIndex !== -1) {
+ mergedObject[key][existingItemIndex] = {
+ ...mergedObject[key][existingItemIndex],
+ ...subItem,
+ };
+ } else {
+ mergedObject[key].push(subItem);
+ }
+ });
+ });
+ });
+
+ return Object.keys(mergedObject).map((key) => ({ [key]: mergedObject[key] }));
};
diff --git a/tgui/packages/tgui/interfaces/XenomorphExtractor.jsx b/tgui/packages/tgui/interfaces/XenomorphExtractor.jsx
index 990f3651fe66..e2370d1a25e0 100644
--- a/tgui/packages/tgui/interfaces/XenomorphExtractor.jsx
+++ b/tgui/packages/tgui/interfaces/XenomorphExtractor.jsx
@@ -1,5 +1,6 @@
-import { useBackend } from '../backend';
import { useState } from 'react';
+
+import { useBackend } from '../backend';
import {
Box,
Button,
@@ -107,7 +108,6 @@ export const XenomorphExtractor = () => {
onClick={() =>
act('produce', {
ref: upgrades.ref,
- vari: upgrades.vari,
})
}
>
diff --git a/tgui/packages/tgui/layouts/Layout.tsx b/tgui/packages/tgui/layouts/Layout.tsx
index b79bec81c4e8..db8504c26db1 100644
--- a/tgui/packages/tgui/layouts/Layout.tsx
+++ b/tgui/packages/tgui/layouts/Layout.tsx
@@ -21,7 +21,7 @@ type Props = Partial<{
BoxProps;
export function Layout(props: Props) {
- const { className, theme = 'nanotrasen', children, ...rest } = props;
+ const { className, theme = 'weyland_yutani', children, ...rest } = props;
return (
diff --git a/tgui/packages/tgui/styles/themes/ntos.scss b/tgui/packages/tgui/styles/themes/ntos.scss
index 8b102b477781..acecada4ed46 100644
--- a/tgui/packages/tgui/styles/themes/ntos.scss
+++ b/tgui/packages/tgui/styles/themes/ntos.scss
@@ -6,14 +6,14 @@
@use 'sass:color';
@use 'sass:meta';
-$nanotrasen: #384e68;
+$weyland_yutani: #384e68;
@use '../colors.scss' with (
$fg-map-keys: (),
$bg-map-keys: ()
);
@use '../base.scss' with (
- $color-bg: color.scale($nanotrasen, $lightness: -45%)
+ $color-bg: color.scale($weyland_yutani, $lightness: -45%)
);
.theme-ntos {
@@ -21,14 +21,14 @@ $nanotrasen: #384e68;
@include meta.load-css(
'../components/Button.scss',
$with: (
- 'color-default': $nanotrasen,
+ 'color-default': $weyland_yutani,
'color-transparent-text': rgba(227, 240, 255, 0.75)
)
);
@include meta.load-css(
'../components/ProgressBar.scss',
$with: (
- 'color-default-fill': $nanotrasen,
+ 'color-default-fill': $weyland_yutani,
'background-color': rgba(0, 0, 0, 0.5)
)
);
@@ -39,6 +39,6 @@ $nanotrasen: #384e68;
@include meta.load-css('../layouts/Window.scss');
@include meta.load-css(
'../layouts/TitleBar.scss',
- $with: ('background-color': color.scale($nanotrasen, $lightness: -25%))
+ $with: ('background-color': color.scale($weyland_yutani, $lightness: -25%))
);
}
diff --git a/tgui/packages/tgui/styles/themes/ntos_darkmode.scss b/tgui/packages/tgui/styles/themes/ntos_darkmode.scss
index b22ad60fc3f2..f10e22b3d7ca 100644
--- a/tgui/packages/tgui/styles/themes/ntos_darkmode.scss
+++ b/tgui/packages/tgui/styles/themes/ntos_darkmode.scss
@@ -6,14 +6,14 @@
@use 'sass:color';
@use 'sass:meta';
-$nanotrasen: #2c2c2c;
+$weyland_yutani: #2c2c2c;
@use '../colors.scss' with (
$fg-map-keys: (),
$bg-map-keys: ()
);
@use '../base.scss' with (
- $color-bg: color.scale($nanotrasen, $lightness: -45%)
+ $color-bg: color.scale($weyland_yutani, $lightness: -45%)
);
.theme-ntos_darkmode {
@@ -21,14 +21,14 @@ $nanotrasen: #2c2c2c;
@include meta.load-css(
'../components/Button.scss',
$with: (
- 'color-default': $nanotrasen,
+ 'color-default': $weyland_yutani,
'color-transparent-text': rgba(227, 240, 255, 0.75)
)
);
@include meta.load-css(
'../components/ProgressBar.scss',
$with: (
- 'color-default-fill': $nanotrasen,
+ 'color-default-fill': $weyland_yutani,
'background-color': rgba(0, 0, 0, 0.5)
)
);
@@ -39,6 +39,6 @@ $nanotrasen: #2c2c2c;
@include meta.load-css('../layouts/Window.scss');
@include meta.load-css(
'../layouts/TitleBar.scss',
- $with: ('background-color': color.scale($nanotrasen, $lightness: -25%))
+ $with: ('background-color': color.scale($weyland_yutani, $lightness: -25%))
);
}
diff --git a/tgui/packages/tgui/styles/themes/ntos_lightmode.scss b/tgui/packages/tgui/styles/themes/ntos_lightmode.scss
index 9cf1a647b778..f50b40f2b909 100644
--- a/tgui/packages/tgui/styles/themes/ntos_lightmode.scss
+++ b/tgui/packages/tgui/styles/themes/ntos_lightmode.scss
@@ -6,7 +6,7 @@
@use 'sass:color';
@use 'sass:meta';
-$nanotrasen: #ffffff;
+$weyland_yutani: #ffffff;
@use '../colors.scss' with (
$primary: #000000,
@@ -21,12 +21,12 @@ $nanotrasen: #ffffff;
// Components
@include meta.load-css(
'../components/Button.scss',
- $with: ('color-default': $nanotrasen)
+ $with: ('color-default': $weyland_yutani)
);
@include meta.load-css(
'../components/ProgressBar.scss',
$with: (
- 'color-default-fill': $nanotrasen,
+ 'color-default-fill': $weyland_yutani,
'background-color': rgba(0, 0, 0, 0.5)
)
);
diff --git a/tools/UpdatePaths/Scripts/6686-apc-replacement.txt b/tools/UpdatePaths/Scripts/6686-apc-replacement.txt
new file mode 100644
index 000000000000..33686acbcee7
--- /dev/null
+++ b/tools/UpdatePaths/Scripts/6686-apc-replacement.txt
@@ -0,0 +1,179 @@
+/obj/structure/machinery/power/apc{dir=1;start_charge=0} : /obj/structure/machinery/power/apc/no_power/north{@OLD;pixel_y=@SKIP;dir=@SKIP;start_charge=@SKIP}
+/obj/structure/machinery/power/apc{dir=2;start_charge=0} : /obj/structure/machinery/power/apc/no_power/south{@OLD;pixel_y=@SKIP;dir=@SKIP;start_charge=@SKIP}
+/obj/structure/machinery/power/apc{dir=4;start_charge=0} : /obj/structure/machinery/power/apc/no_power/east{@OLD;pixel_x=@SKIP;dir=@SKIP;start_charge=@SKIP}
+/obj/structure/machinery/power/apc{dir=8;start_charge=0} : /obj/structure/machinery/power/apc/no_power/west{@OLD;pixel_x=@SKIP;dir=@SKIP;start_charge=@SKIP}
+/obj/structure/machinery/power/apc{dir=1;start_charge=0;pixel_y=@ANY} : /obj/structure/machinery/power/apc/no_power/north{@OLD;pixel_y=@SKIP;dir=@SKIP;start_charge=@SKIP}
+/obj/structure/machinery/power/apc{dir=2;start_charge=0;pixel_y=@ANY} : /obj/structure/machinery/power/apc/no_power/south{@OLD;pixel_y=@SKIP;dir=@SKIP;start_charge=@SKIP}
+/obj/structure/machinery/power/apc{dir=4;start_charge=0;pixel_x=@ANY} : /obj/structure/machinery/power/apc/no_power/east{@OLD;pixel_x=@SKIP;dir=@SKIP;start_charge=@SKIP}
+/obj/structure/machinery/power/apc{dir=8;start_charge=0;pixel_x=@ANY} : /obj/structure/machinery/power/apc/no_power/west{@OLD;pixel_x=@SKIP;dir=@SKIP;start_charge=@SKIP}
+/obj/structure/machinery/power/apc{start_charge=0} : /obj/structure/machinery/power/apc/no_power/south{@OLD;pixel_y=@SKIP;dir=@SKIP;start_charge=@SKIP}
+
+/obj/structure/machinery/power/apc{dir=1;start_charge=90} : /obj/structure/machinery/power/apc/power/north{@OLD;pixel_y=@SKIP;dir=@SKIP;start_charge=@SKIP}
+/obj/structure/machinery/power/apc{dir=2;start_charge=90} : /obj/structure/machinery/power/apc/power/south{@OLD;pixel_y=@SKIP;dir=@SKIP;start_charge=@SKIP}
+/obj/structure/machinery/power/apc{dir=4;start_charge=90} : /obj/structure/machinery/power/apc/power/east{@OLD;pixel_x=@SKIP;dir=@SKIP;start_charge=@SKIP}
+/obj/structure/machinery/power/apc{dir=8;start_charge=90} : /obj/structure/machinery/power/apc/power/west{@OLD;pixel_x=@SKIP;dir=@SKIP;start_charge=@SKIP}
+/obj/structure/machinery/power/apc{dir=1;start_charge=90;pixel_y=@ANY} : /obj/structure/machinery/power/apc/power/north{@OLD;pixel_y=@SKIP;dir=@SKIP;start_charge=@SKIP}
+/obj/structure/machinery/power/apc{dir=2;start_charge=90;pixel_y=@ANY} : /obj/structure/machinery/power/apc/power/south{@OLD;pixel_y=@SKIP;dir=@SKIP;start_charge=@SKIP}
+/obj/structure/machinery/power/apc{dir=4;start_charge=90;pixel_x=@ANY} : /obj/structure/machinery/power/apc/power/east{@OLD;pixel_x=@SKIP;dir=@SKIP;start_charge=@SKIP}
+/obj/structure/machinery/power/apc{dir=8;start_charge=90;pixel_x=@ANY} : /obj/structure/machinery/power/apc/power/west{@OLD;pixel_x=@SKIP;dir=@SKIP;start_charge=@SKIP}
+/obj/structure/machinery/power/apc{start_charge=90} : /obj/structure/machinery/power/apc/power/south{@OLD;pixel_y=@SKIP;dir=@SKIP;start_charge=@SKIP}
+
+/obj/structure/machinery/power/apc{dir=1} : /obj/structure/machinery/power/apc/power/north{@OLD;pixel_y=@SKIP;dir=@SKIP}
+/obj/structure/machinery/power/apc{dir=2} : /obj/structure/machinery/power/apc/power/south{@OLD;pixel_y=@SKIP;dir=@SKIP}
+/obj/structure/machinery/power/apc{dir=4} : /obj/structure/machinery/power/apc/power/east{@OLD;pixel_x=@SKIP;dir=@SKIP}
+/obj/structure/machinery/power/apc{dir=8} : /obj/structure/machinery/power/apc/power/west{@OLD;pixel_x=@SKIP;dir=@SKIP}
+/obj/structure/machinery/power/apc{dir=1;pixel_y=@ANY} : /obj/structure/machinery/power/apc/power/north{@OLD;pixel_y=@SKIP;dir=@SKIP}
+/obj/structure/machinery/power/apc{dir=2;pixel_y=@ANY} : /obj/structure/machinery/power/apc/power/south{@OLD;pixel_y=@SKIP;dir=@SKIP}
+/obj/structure/machinery/power/apc{dir=4;pixel_x=@ANY} : /obj/structure/machinery/power/apc/power/east{@OLD;pixel_x=@SKIP;dir=@SKIP}
+/obj/structure/machinery/power/apc{dir=8;pixel_x=@ANY} : /obj/structure/machinery/power/apc/power/west{@OLD;pixel_x=@SKIP;dir=@SKIP}
+/obj/structure/machinery/power/apc : /obj/structure/machinery/power/apc/power/south{@OLD;pixel_y=@SKIP;dir=@SKIP}
+
+/obj/structure/machinery/power/apc/weak{dir=1;start_charge=0} : /obj/structure/machinery/power/apc/no_power/north{@OLD;pixel_y=@SKIP;dir=@SKIP;start_charge=@SKIP}
+/obj/structure/machinery/power/apc/weak{dir=2;start_charge=0} : /obj/structure/machinery/power/apc/no_power/south{@OLD;pixel_y=@SKIP;dir=@SKIP;start_charge=@SKIP}
+/obj/structure/machinery/power/apc/weak{dir=4;start_charge=0} : /obj/structure/machinery/power/apc/no_power/east{@OLD;pixel_x=@SKIP;dir=@SKIP;start_charge=@SKIP}
+/obj/structure/machinery/power/apc/weak{dir=8;start_charge=0} : /obj/structure/machinery/power/apc/no_power/west{@OLD;pixel_x=@SKIP;dir=@SKIP;start_charge=@SKIP}
+/obj/structure/machinery/power/apc/weak{dir=1;start_charge=0;pixel_y=@ANY} : /obj/structure/machinery/power/apc/no_power/north{@OLD;pixel_y=@SKIP;dir=@SKIP;start_charge=@SKIP}
+/obj/structure/machinery/power/apc/weak{dir=2;start_charge=0;pixel_y=@ANY} : /obj/structure/machinery/power/apc/no_power/south{@OLD;pixel_y=@SKIP;dir=@SKIP;start_charge=@SKIP}
+/obj/structure/machinery/power/apc/weak{dir=4;start_charge=0;pixel_x=@ANY} : /obj/structure/machinery/power/apc/no_power/east{@OLD;pixel_x=@SKIP;dir=@SKIP;start_charge=@SKIP}
+/obj/structure/machinery/power/apc/weak{dir=8;start_charge=0;pixel_x=@ANY} : /obj/structure/machinery/power/apc/no_power/west{@OLD;pixel_x=@SKIP;dir=@SKIP;start_charge=@SKIP}
+/obj/structure/machinery/power/apc/weak{start_charge=0} : /obj/structure/machinery/power/apc/no_power/south{@OLD;pixel_y=@SKIP;dir=@SKIP;start_charge=@SKIP}
+
+/obj/structure/machinery/power/apc/weak{dir=1;start_charge=90} : /obj/structure/machinery/power/apc/power/north{@OLD;pixel_y=@SKIP;dir=@SKIP;start_charge=20}
+/obj/structure/machinery/power/apc/weak{dir=2;start_charge=90} : /obj/structure/machinery/power/apc/power/south{@OLD;pixel_y=@SKIP;dir=@SKIP;start_charge=20}
+/obj/structure/machinery/power/apc/weak{dir=4;start_charge=90} : /obj/structure/machinery/power/apc/power/east{@OLD;pixel_x=@SKIP;dir=@SKIP;start_charge=20}
+/obj/structure/machinery/power/apc/weak{dir=8;start_charge=90} : /obj/structure/machinery/power/apc/power/west{@OLD;pixel_x=@SKIP;dir=@SKIP;start_charge=20}
+/obj/structure/machinery/power/apc/weak{dir=1;start_charge=90;pixel_y=@ANY} : /obj/structure/machinery/power/apc/power/north{@OLD;pixel_y=@SKIP;dir=@SKIP;start_charge=20}
+/obj/structure/machinery/power/apc/weak{dir=2;start_charge=90;pixel_y=@ANY} : /obj/structure/machinery/power/apc/power/south{@OLD;pixel_y=@SKIP;dir=@SKIP;start_charge=20}
+/obj/structure/machinery/power/apc/weak{dir=4;start_charge=90;pixel_x=@ANY} : /obj/structure/machinery/power/apc/power/east{@OLD;pixel_x=@SKIP;dir=@SKIP;start_charge=20}
+/obj/structure/machinery/power/apc/weak{dir=8;start_charge=90;pixel_x=@ANY} : /obj/structure/machinery/power/apc/power/west{@OLD;pixel_x=@SKIP;dir=@SKIP;start_charge=20}
+/obj/structure/machinery/power/apc/weak{start_charge=90} : /obj/structure/machinery/power/apc/power/south{@OLD;pixel_y=@SKIP;dir=@SKIP;start_charge=20}
+
+/obj/structure/machinery/power/apc/weak{dir=1} : /obj/structure/machinery/power/apc/power/north{@OLD;pixel_y=@SKIP;dir=@SKIP;start_charge=20}
+/obj/structure/machinery/power/apc/weak{dir=2} : /obj/structure/machinery/power/apc/power/south{@OLD;pixel_y=@SKIP;dir=@SKIP;start_charge=20}
+/obj/structure/machinery/power/apc/weak{dir=4} : /obj/structure/machinery/power/apc/power/east{@OLD;pixel_x=@SKIP;dir=@SKIP;start_charge=20}
+/obj/structure/machinery/power/apc/weak{dir=8} : /obj/structure/machinery/power/apc/power/west{@OLD;pixel_x=@SKIP;dir=@SKIP;start_charge=20}
+/obj/structure/machinery/power/apc/weak{dir=1;pixel_y=@ANY} : /obj/structure/machinery/power/apc/power/north{@OLD;pixel_y=@SKIP;dir=@SKIP;start_charge=20}
+/obj/structure/machinery/power/apc/weak{dir=2;pixel_y=@ANY} : /obj/structure/machinery/power/apc/power/south{@OLD;pixel_y=@SKIP;dir=@SKIP;start_charge=20}
+/obj/structure/machinery/power/apc/weak{dir=4;pixel_x=@ANY} : /obj/structure/machinery/power/apc/power/east{@OLD;pixel_x=@SKIP;dir=@SKIP;start_charge=20}
+/obj/structure/machinery/power/apc/weak{dir=8;pixel_x=@ANY} : /obj/structure/machinery/power/apc/power/west{@OLD;pixel_x=@SKIP;dir=@SKIP;start_charge=20}
+/obj/structure/machinery/power/apc/weak : /obj/structure/machinery/power/apc/power/south{@OLD;pixel_y=@SKIP;dir=@SKIP;start_charge=20}
+
+/obj/structure/machinery/power/apc/high{dir=1;start_charge=0} : /obj/structure/machinery/power/apc/no_power/north{@OLD;pixel_y=@SKIP;dir=@SKIP;start_charge=@SKIP}
+/obj/structure/machinery/power/apc/high{dir=2;start_charge=0} : /obj/structure/machinery/power/apc/upgraded/no_power/south{@OLD;pixel_y=@SKIP;dir=@SKIP;start_charge=@SKIP}
+/obj/structure/machinery/power/apc/high{dir=4;start_charge=0} : /obj/structure/machinery/power/apc/upgraded/no_power/east{@OLD;pixel_x=@SKIP;dir=@SKIP;start_charge=@SKIP}
+/obj/structure/machinery/power/apc/high{dir=8;start_charge=0} : /obj/structure/machinery/power/apc/upgraded/no_power/west{@OLD;pixel_x=@SKIP;dir=@SKIP;start_charge=@SKIP}
+/obj/structure/machinery/power/apc/high{dir=1;start_charge=0;pixel_y=@ANY} : /obj/structure/machinery/power/apc/upgraded/no_power/north{@OLD;pixel_y=@SKIP;dir=@SKIP;start_charge=@SKIP}
+/obj/structure/machinery/power/apc/high{dir=2;start_charge=0;pixel_y=@ANY} : /obj/structure/machinery/power/apc/upgraded/no_power/south{@OLD;pixel_y=@SKIP;dir=@SKIP;start_charge=@SKIP}
+/obj/structure/machinery/power/apc/high{dir=4;start_charge=0;pixel_x=@ANY} : /obj/structure/machinery/power/apc/upgraded/no_power/east{@OLD;pixel_x=@SKIP;dir=@SKIP;start_charge=@SKIP}
+/obj/structure/machinery/power/apc/high{dir=8;start_charge=0;pixel_x=@ANY} : /obj/structure/machinery/power/apc/upgraded/no_power/west{@OLD;pixel_x=@SKIP;dir=@SKIP;start_charge=@SKIP}
+/obj/structure/machinery/power/apc/high{start_charge=0} : /obj/structure/machinery/power/apc/upgraded/no_power/south{@OLD;pixel_y=@SKIP;dir=@SKIP;start_charge=@SKIP}
+
+/obj/structure/machinery/power/apc/high{dir=1;start_charge=90} : /obj/structure/machinery/power/apc/upgraded/power/north{@OLD;pixel_y=@SKIP;dir=@SKIP;start_charge=@SKIP}
+/obj/structure/machinery/power/apc/high{dir=2;start_charge=90} : /obj/structure/machinery/power/apc/upgraded/power/south{@OLD;pixel_y=@SKIP;dir=@SKIP;start_charge=@SKIP}
+/obj/structure/machinery/power/apc/high{dir=4;start_charge=90} : /obj/structure/machinery/power/apc/upgraded/power/east{@OLD;pixel_x=@SKIP;dir=@SKIP;start_charge=@SKIP}
+/obj/structure/machinery/power/apc/high{dir=8;start_charge=90} : /obj/structure/machinery/power/apc/upgraded/power/west{@OLD;pixel_x=@SKIP;dir=@SKIP;start_charge=@SKIP}
+/obj/structure/machinery/power/apc/high{dir=1;start_charge=90;pixel_y=@ANY} : /obj/structure/machinery/power/apc/upgraded/power/north{@OLD;pixel_y=@SKIP;dir=@SKIP;start_charge=@SKIP}
+/obj/structure/machinery/power/apc/high{dir=2;start_charge=90;pixel_y=@ANY} : /obj/structure/machinery/power/apc/upgraded/power/south{@OLD;pixel_y=@SKIP;dir=@SKIP;start_charge=@SKIP}
+/obj/structure/machinery/power/apc/high{dir=4;start_charge=90;pixel_x=@ANY} : /obj/structure/machinery/power/apc/upgraded/power/east{@OLD;pixel_x=@SKIP;dir=@SKIP;start_charge=@SKIP}
+/obj/structure/machinery/power/apc/high{dir=8;start_charge=90;pixel_x=@ANY} : /obj/structure/machinery/power/apc/upgraded/power/west{@OLD;pixel_x=@SKIP;dir=@SKIP;start_charge=@SKIP}
+/obj/structure/machinery/power/apc/high{start_charge=90} : /obj/structure/machinery/power/apc/upgraded/power/south{@OLD;pixel_y=@SKIP;dir=@SKIP;start_charge=@SKIP}
+
+/obj/structure/machinery/power/apc/high{dir=1} : /obj/structure/machinery/power/apc/upgraded/power/north{@OLD;pixel_y=@SKIP;dir=@SKIP}
+/obj/structure/machinery/power/apc/high{dir=2} : /obj/structure/machinery/power/apc/upgraded/power/south{@OLD;pixel_y=@SKIP;dir=@SKIP}
+/obj/structure/machinery/power/apc/high{dir=4} : /obj/structure/machinery/power/apc/upgraded/power/east{@OLD;pixel_x=@SKIP;dir=@SKIP}
+/obj/structure/machinery/power/apc/high{dir=8} : /obj/structure/machinery/power/apc/upgraded/power/west{@OLD;pixel_x=@SKIP;dir=@SKIP}
+/obj/structure/machinery/power/apc/high{dir=1;pixel_y=@ANY} : /obj/structure/machinery/power/apc/upgraded/power/north{@OLD;pixel_y=@SKIP;dir=@SKIP}
+/obj/structure/machinery/power/apc/high{dir=2;pixel_y=@ANY} : /obj/structure/machinery/power/apc/upgraded/power/south{@OLD;pixel_y=@SKIP;dir=@SKIP}
+/obj/structure/machinery/power/apc/high{dir=4;pixel_x=@ANY} : /obj/structure/machinery/power/apc/upgraded/power/east{@OLD;pixel_x=@SKIP;dir=@SKIP}
+/obj/structure/machinery/power/apc/high{dir=8;pixel_x=@ANY} : /obj/structure/machinery/power/apc/upgraded/power/west{@OLD;pixel_x=@SKIP;dir=@SKIP}
+/obj/structure/machinery/power/apc/high : /obj/structure/machinery/power/apc/upgraded/power/south{@OLD;pixel_y=@SKIP;dir=@SKIP}
+
+/obj/structure/machinery/power/apc/super{dir=1;start_charge=0} : /obj/structure/machinery/power/apc/upgraded/no_power/north{@OLD;pixel_y=@SKIP;dir=@SKIP;start_charge=@SKIP}
+/obj/structure/machinery/power/apc/super{dir=2;start_charge=0} : /obj/structure/machinery/power/apc/upgraded/no_power/south{@OLD;pixel_y=@SKIP;dir=@SKIP;start_charge=@SKIP}
+/obj/structure/machinery/power/apc/super{dir=4;start_charge=0} : /obj/structure/machinery/power/apc/upgraded/no_power/east{@OLD;pixel_x=@SKIP;dir=@SKIP;start_charge=@SKIP}
+/obj/structure/machinery/power/apc/super{dir=8;start_charge=0} : /obj/structure/machinery/power/apc/upgraded/no_power/west{@OLD;pixel_x=@SKIP;dir=@SKIP;start_charge=@SKIP}
+/obj/structure/machinery/power/apc/super{dir=1;start_charge=0;pixel_y=@ANY} : /obj/structure/machinery/power/apc/upgraded/no_power/north{@OLD;pixel_y=@SKIP;dir=@SKIP;start_charge=@SKIP}
+/obj/structure/machinery/power/apc/super{dir=2;start_charge=0;pixel_y=@ANY} : /obj/structure/machinery/power/apc/upgraded/no_power/south{@OLD;pixel_y=@SKIP;dir=@SKIP;start_charge=@SKIP}
+/obj/structure/machinery/power/apc/super{dir=4;start_charge=0;pixel_x=@ANY} : /obj/structure/machinery/power/apc/upgraded/no_power/east{@OLD;pixel_x=@SKIP;dir=@SKIP;start_charge=@SKIP}
+/obj/structure/machinery/power/apc/super{dir=8;start_charge=0;pixel_x=@ANY} : /obj/structure/machinery/power/apc/upgraded/no_power/west{@OLD;pixel_x=@SKIP;dir=@SKIP;start_charge=@SKIP}
+/obj/structure/machinery/power/apc/super{start_charge=0} : /obj/structure/machinery/power/apc/upgraded/no_power/south{@OLD;pixel_y=@SKIP;dir=@SKIP;start_charge=@SKIP}
+
+/obj/structure/machinery/power/apc/super{dir=1;start_charge=90} : /obj/structure/machinery/power/apc/upgraded/power/north{@OLD;pixel_y=@SKIP;dir=@SKIP;start_charge=@SKIP}
+/obj/structure/machinery/power/apc/super{dir=2;start_charge=90} : /obj/structure/machinery/power/apc/upgraded/power/south{@OLD;pixel_y=@SKIP;dir=@SKIP;start_charge=@SKIP}
+/obj/structure/machinery/power/apc/super{dir=4;start_charge=90} : /obj/structure/machinery/power/apc/upgraded/power/east{@OLD;pixel_x=@SKIP;dir=@SKIP;start_charge=@SKIP}
+/obj/structure/machinery/power/apc/super{dir=8;start_charge=90} : /obj/structure/machinery/power/apc/upgraded/power/west{@OLD;pixel_x=@SKIP;dir=@SKIP;start_charge=@SKIP}
+/obj/structure/machinery/power/apc/super{dir=1;start_charge=90;pixel_y=@ANY} : /obj/structure/machinery/power/apc/upgraded/power/north{@OLD;pixel_y=@SKIP;dir=@SKIP;start_charge=@SKIP}
+/obj/structure/machinery/power/apc/super{dir=2;start_charge=90;pixel_y=@ANY} : /obj/structure/machinery/power/apc/upgraded/power/south{@OLD;pixel_y=@SKIP;dir=@SKIP;start_charge=@SKIP}
+/obj/structure/machinery/power/apc/super{dir=4;start_charge=90;pixel_x=@ANY} : /obj/structure/machinery/power/apc/upgraded/power/east{@OLD;pixel_x=@SKIP;dir=@SKIP;start_charge=@SKIP}
+/obj/structure/machinery/power/apc/super{dir=8;start_charge=90;pixel_x=@ANY} : /obj/structure/machinery/power/apc/upgraded/power/west{@OLD;pixel_x=@SKIP;dir=@SKIP;start_charge=@SKIP}
+/obj/structure/machinery/power/apc/super{start_charge=90} : /obj/structure/machinery/power/apc/upgraded/power/south{@OLD;pixel_y=@SKIP;dir=@SKIP;start_charge=@SKIP}
+
+/obj/structure/machinery/power/apc/super{dir=1} : /obj/structure/machinery/power/apc/upgraded/power/north{@OLD;pixel_y=@SKIP;dir=@SKIP}
+/obj/structure/machinery/power/apc/super{dir=2} : /obj/structure/machinery/power/apc/upgraded/power/south{@OLD;pixel_y=@SKIP;dir=@SKIP}
+/obj/structure/machinery/power/apc/super{dir=4} : /obj/structure/machinery/power/apc/upgraded/power/east{@OLD;pixel_x=@SKIP;dir=@SKIP}
+/obj/structure/machinery/power/apc/super{dir=8} : /obj/structure/machinery/power/apc/upgraded/power/west{@OLD;pixel_x=@SKIP;dir=@SKIP}
+/obj/structure/machinery/power/apc/super{dir=1;pixel_y=@ANY} : /obj/structure/machinery/power/apc/upgraded/power/north{@OLD;pixel_y=@SKIP;dir=@SKIP}
+/obj/structure/machinery/power/apc/super{dir=2;pixel_y=@ANY} : /obj/structure/machinery/power/apc/upgraded/power/south{@OLD;pixel_y=@SKIP;dir=@SKIP}
+/obj/structure/machinery/power/apc/super{dir=4;pixel_x=@ANY} : /obj/structure/machinery/power/apc/upgraded/power/east{@OLD;pixel_x=@SKIP;dir=@SKIP}
+/obj/structure/machinery/power/apc/super{dir=8;pixel_x=@ANY} : /obj/structure/machinery/power/apc/upgraded/power/west{@OLD;pixel_x=@SKIP;dir=@SKIP}
+/obj/structure/machinery/power/apc/super : /obj/structure/machinery/power/apc/upgraded/power/south{@OLD;pixel_y=@SKIP;dir=@SKIP}
+
+/obj/structure/machinery/power/apc/hyper{dir=1;start_charge=0} : /obj/structure/machinery/power/apc/upgraded/no_power/north{@OLD;pixel_y=@SKIP;dir=@SKIP;start_charge=@SKIP}
+/obj/structure/machinery/power/apc/hyper{dir=2;start_charge=0} : /obj/structure/machinery/power/apc/upgraded/no_power/south{@OLD;pixel_y=@SKIP;dir=@SKIP;start_charge=@SKIP}
+/obj/structure/machinery/power/apc/hyper{dir=4;start_charge=0} : /obj/structure/machinery/power/apc/upgraded/no_power/east{@OLD;pixel_x=@SKIP;dir=@SKIP;start_charge=@SKIP}
+/obj/structure/machinery/power/apc/hyper{dir=8;start_charge=0} : /obj/structure/machinery/power/apc/upgraded/no_power/west{@OLD;pixel_x=@SKIP;dir=@SKIP;start_charge=@SKIP}
+/obj/structure/machinery/power/apc/hyper{dir=1;start_charge=0;pixel_y=@ANY} : /obj/structure/machinery/power/apc/upgraded/no_power/north{@OLD;pixel_y=@SKIP;dir=@SKIP;start_charge=@SKIP}
+/obj/structure/machinery/power/apc/hyper{dir=2;start_charge=0;pixel_y=@ANY} : /obj/structure/machinery/power/apc/upgraded/no_power/south{@OLD;pixel_y=@SKIP;dir=@SKIP;start_charge=@SKIP}
+/obj/structure/machinery/power/apc/hyper{dir=4;start_charge=0;pixel_x=@ANY} : /obj/structure/machinery/power/apc/upgraded/no_power/east{@OLD;pixel_x=@SKIP;dir=@SKIP;start_charge=@SKIP}
+/obj/structure/machinery/power/apc/hyper{dir=8;start_charge=0;pixel_x=@ANY} : /obj/structure/machinery/power/apc/upgraded/no_power/west{@OLD;pixel_x=@SKIP;dir=@SKIP;start_charge=@SKIP}
+/obj/structure/machinery/power/apc/hyper{start_charge=0} : /obj/structure/machinery/power/apc/upgraded/no_power/south{@OLD;pixel_y=@SKIP;dir=@SKIP;start_charge=@SKIP}
+
+/obj/structure/machinery/power/apc/hyper{dir=1;start_charge=90} : /obj/structure/machinery/power/apc/upgraded/power/north{@OLD;pixel_y=@SKIP;dir=@SKIP;start_charge=@SKIP}
+/obj/structure/machinery/power/apc/hyper{dir=2;start_charge=90} : /obj/structure/machinery/power/apc/upgraded/power/south{@OLD;pixel_y=@SKIP;dir=@SKIP;start_charge=@SKIP}
+/obj/structure/machinery/power/apc/hyper{dir=4;start_charge=90} : /obj/structure/machinery/power/apc/upgraded/power/east{@OLD;pixel_x=@SKIP;dir=@SKIP;start_charge=@SKIP}
+/obj/structure/machinery/power/apc/hyper{dir=8;start_charge=90} : /obj/structure/machinery/power/apc/upgraded/power/west{@OLD;pixel_x=@SKIP;dir=@SKIP;start_charge=@SKIP}
+/obj/structure/machinery/power/apc/hyper{dir=1;start_charge=90;pixel_y=@ANY} : /obj/structure/machinery/power/apc/upgraded/power/north{@OLD;pixel_y=@SKIP;dir=@SKIP;start_charge=@SKIP}
+/obj/structure/machinery/power/apc/hyper{dir=2;start_charge=90;pixel_y=@ANY} : /obj/structure/machinery/power/apc/upgraded/power/south{@OLD;pixel_y=@SKIP;dir=@SKIP;start_charge=@SKIP}
+/obj/structure/machinery/power/apc/hyper{dir=4;start_charge=90;pixel_x=@ANY} : /obj/structure/machinery/power/apc/upgraded/power/east{@OLD;pixel_x=@SKIP;dir=@SKIP;start_charge=@SKIP}
+/obj/structure/machinery/power/apc/hyper{dir=8;start_charge=90;pixel_x=@ANY} : /obj/structure/machinery/power/apc/upgraded/power/west{@OLD;pixel_x=@SKIP;dir=@SKIP;start_charge=@SKIP}
+/obj/structure/machinery/power/apc/hyper{start_charge=90} : /obj/structure/machinery/power/apc/upgraded/power/south{@OLD;pixel_y=@SKIP;dir=@SKIP;start_charge=@SKIP}
+
+/obj/structure/machinery/power/apc/hyper{dir=1} : /obj/structure/machinery/power/apc/upgraded/power/north{@OLD;pixel_y=@SKIP;dir=@SKIP}
+/obj/structure/machinery/power/apc/hyper{dir=2} : /obj/structure/machinery/power/apc/upgraded/power/south{@OLD;pixel_y=@SKIP;dir=@SKIP}
+/obj/structure/machinery/power/apc/hyper{dir=4} : /obj/structure/machinery/power/apc/upgraded/power/east{@OLD;pixel_x=@SKIP;dir=@SKIP}
+/obj/structure/machinery/power/apc/hyper{dir=8} : /obj/structure/machinery/power/apc/upgraded/power/west{@OLD;pixel_x=@SKIP;dir=@SKIP}
+/obj/structure/machinery/power/apc/hyper{dir=1;pixel_y=@ANY} : /obj/structure/machinery/power/apc/upgraded/power/north{@OLD;pixel_y=@SKIP;dir=@SKIP}
+/obj/structure/machinery/power/apc/hyper{dir=2;pixel_y=@ANY} : /obj/structure/machinery/power/apc/upgraded/power/south{@OLD;pixel_y=@SKIP;dir=@SKIP}
+/obj/structure/machinery/power/apc/hyper{dir=4;pixel_x=@ANY} : /obj/structure/machinery/power/apc/upgraded/power/east{@OLD;pixel_x=@SKIP;dir=@SKIP}
+/obj/structure/machinery/power/apc/hyper{dir=8;pixel_x=@ANY} : /obj/structure/machinery/power/apc/upgraded/power/west{@OLD;pixel_x=@SKIP;dir=@SKIP}
+/obj/structure/machinery/power/apc/hyper : /obj/structure/machinery/power/apc/upgraded/power/south{@OLD;pixel_y=@SKIP;dir=@SKIP}
+
+/obj/structure/machinery/power/apc/nocharge{dir=1} : /obj/structure/machinery/power/apc/no_power/north{@OLD;pixel_y=@SKIP;dir=@SKIP;start_charge=@SKIP}
+/obj/structure/machinery/power/apc/nocharge{dir=2} : /obj/structure/machinery/power/apc/no_power/south{@OLD;pixel_y=@SKIP;dir=@SKIP;start_charge=@SKIP}
+/obj/structure/machinery/power/apc/nocharge{dir=4} : /obj/structure/machinery/power/apc/no_power/east{@OLD;pixel_x=@SKIP;dir=@SKIP;start_charge=@SKIP}
+/obj/structure/machinery/power/apc/nocharge{dir=8} : /obj/structure/machinery/power/apc/no_power/west{@OLD;pixel_x=@SKIP;dir=@SKIP;start_charge=@SKIP}
+/obj/structure/machinery/power/apc/nocharge{dir=1;pixel_y=@ANY} : /obj/structure/machinery/power/apc/no_power/north{@OLD;pixel_y=@SKIP;dir=@SKIP;start_charge=@SKIP}
+/obj/structure/machinery/power/apc/nocharge{dir=2;pixel_y=@ANY} : /obj/structure/machinery/power/apc/no_power/south{@OLD;pixel_y=@SKIP;dir=@SKIP;start_charge=@SKIP}
+/obj/structure/machinery/power/apc/nocharge{dir=4;pixel_x=@ANY} : /obj/structure/machinery/power/apc/no_power/east{@OLD;pixel_x=@SKIP;dir=@SKIP;start_charge=@SKIP}
+/obj/structure/machinery/power/apc/nocharge{dir=8;pixel_x=@ANY} : /obj/structure/machinery/power/apc/no_power/west{@OLD;pixel_x=@SKIP;dir=@SKIP;start_charge=@SKIP}
+/obj/structure/machinery/power/apc/nocharge : /obj/structure/machinery/power/apc/no_power/south{@OLD;pixel_y=@SKIP;dir=@SKIP;start_charge=@SKIP}
+
+/obj/structure/machinery/power/apc/almayer{dir=1} : /obj/structure/machinery/power/apc/almayer/north{@OLD;pixel_y=@SKIP;dir=@SKIP}
+/obj/structure/machinery/power/apc/almayer{dir=2} : /obj/structure/machinery/power/apc/almayer/south{@OLD;pixel_y=@SKIP;dir=@SKIP}
+/obj/structure/machinery/power/apc/almayer{dir=4} : /obj/structure/machinery/power/apc/almayer/east{@OLD;pixel_x=@SKIP;dir=@SKIP}
+/obj/structure/machinery/power/apc/almayer{dir=8} : /obj/structure/machinery/power/apc/almayer/west{@OLD;pixel_x=@SKIP;dir=@SKIP}
+/obj/structure/machinery/power/apc/almayer{dir=1;pixel_y=@ANY} : /obj/structure/machinery/power/apc/almayer/north{@OLD;pixel_y=@SKIP;dir=@SKIP}
+/obj/structure/machinery/power/apc/almayer{dir=2;pixel_y=@ANY} : /obj/structure/machinery/power/apc/almayer/south{@OLD;pixel_y=@SKIP;dir=@SKIP}
+/obj/structure/machinery/power/apc/almayer{dir=4;pixel_x=@ANY} : /obj/structure/machinery/power/apc/almayer/east{@OLD;pixel_x=@SKIP;dir=@SKIP}
+/obj/structure/machinery/power/apc/almayer{dir=8;pixel_x=@ANY} : /obj/structure/machinery/power/apc/almayer/west{@OLD;pixel_x=@SKIP;dir=@SKIP}
+/obj/structure/machinery/power/apc/almayer : /obj/structure/machinery/power/apc/almayer/south{@OLD;pixel_y=@SKIP;dir=@SKIP}
+
+/obj/structure/machinery/power/apc/almayer/hardened{dir=1} : /obj/structure/machinery/power/apc/almayer/hardened/north{@OLD;pixel_y=@SKIP;dir=@SKIP}
+/obj/structure/machinery/power/apc/almayer/hardened{dir=2} : /obj/structure/machinery/power/apc/almayer/hardened/south{@OLD;pixel_y=@SKIP;dir=@SKIP}
+/obj/structure/machinery/power/apc/almayer/hardened{dir=4} : /obj/structure/machinery/power/apc/almayer/hardened/east{@OLD;pixel_x=@SKIP;dir=@SKIP}
+/obj/structure/machinery/power/apc/almayer/hardened{dir=8} : /obj/structure/machinery/power/apc/almayer/hardened/west{@OLD;pixel_x=@SKIP;dir=@SKIP}
+/obj/structure/machinery/power/apc/almayer/hardened{dir=1;pixel_y=@ANY} : /obj/structure/machinery/power/apc/almayer/hardened/north{@OLD;pixel_y=@SKIP;dir=@SKIP}
+/obj/structure/machinery/power/apc/almayer/hardened{dir=2;pixel_y=@ANY} : /obj/structure/machinery/power/apc/almayer/hardened/south{@OLD;pixel_y=@SKIP;dir=@SKIP}
+/obj/structure/machinery/power/apc/almayer/hardened{dir=4;pixel_x=@ANY} : /obj/structure/machinery/power/apc/almayer/hardened/east{@OLD;pixel_x=@SKIP;dir=@SKIP}
+/obj/structure/machinery/power/apc/almayer/hardened{dir=8;pixel_x=@ANY} : /obj/structure/machinery/power/apc/almayer/hardened/west{@OLD;pixel_x=@SKIP;dir=@SKIP}
+/obj/structure/machinery/power/apc/almayer/hardened : /obj/structure/machinery/power/apc/almayer/hardened/south{@OLD;pixel_y=@SKIP;dir=@SKIP}
\ No newline at end of file