diff --git a/README.md b/README.md
index b364589d7ce1..80f166648aa1 100644
--- a/README.md
+++ b/README.md
@@ -64,10 +64,10 @@ This guide will get you set up with a Visual Studio Code development environment
- ## [Contributing Rules](.github/CONTRIBUTING.md)
This is our canonical, maintainer-maintained contributing guide, which contains information on our maintainer team structure and pull request rules.
-- ## [Code Standards](github/guides/STANDARDS.md)
+- ## [Code Standards](.github/guides/STANDARDS.md)
Our standards documents details how to structure your code to comply with CM-SS13 code standards, and provides some information on DreamMaker quirks.
-- ## [Code Style](github/guides/STYLES.md)
+- ## [Code Style](.github/guides/STYLES.md)
The styles document tells you how to style your code to match the rest of the code in our codebase.
- ## [tgui README](tgui/README.md)
diff --git a/code/__DEFINES/access.dm b/code/__DEFINES/access.dm
index be96a2e32b85..71b2b6f4b6ac 100644
--- a/code/__DEFINES/access.dm
+++ b/code/__DEFINES/access.dm
@@ -88,7 +88,7 @@ most of them are tied into map-placed objects. This should be reworked in the fu
#define ACCESS_WY_ARMORY 212
///Secret research or other projects with highly restricted access
#define ACCESS_WY_SECRETS 213
-
+#define ACCESS_WY_DATABASE 214
#define ACCESS_WY_LEADERSHIP 215
///Senior leadership, the highest ranks
#define ACCESS_WY_SENIOR_LEAD 216
diff --git a/code/__DEFINES/job.dm b/code/__DEFINES/job.dm
index f869357efd1b..5b295e68069f 100644
--- a/code/__DEFINES/job.dm
+++ b/code/__DEFINES/job.dm
@@ -119,6 +119,7 @@ GLOBAL_LIST_INIT(job_command_roles, JOB_COMMAND_ROLES_LIST)
#define JOB_MARINE "USCM Marine" //generic marine
#define JOB_COLONEL "USCM Colonel"
+#define JOB_USCM_OBSV "USCM Observer"
#define JOB_GENERAL "USCM General"
#define JOB_ACMC "Assistant Commandant of the Marine Corps"
#define JOB_CMC "Commandant of the Marine Corps"
@@ -171,25 +172,25 @@ GLOBAL_LIST_INIT(job_command_roles, JOB_COMMAND_ROLES_LIST)
//------------------------------------
//-------- PMC --------//
-#define JOB_PMC_STANDARD "Weyland-Yutani PMC (Standard)"
+#define JOB_PMC_STANDARD "PMC Operator"
#define JOB_PMC_ENGINEER "PMC Corporate Technician"
#define JOB_PMC_MEDIC "PMC Corporate Medic"
#define JOB_PMC_DOCTOR "PMC Trauma Surgeon"
#define JOB_PMC_INVESTIGATOR "PMC Medical Investigator"
-#define JOB_PMC_DETAINER "Weyland-Yutani PMC (Detainer)"
-#define JOB_PMC_ELITE "PMC Elite"
+#define JOB_PMC_DETAINER "PMC Security Enforcer"
#define JOB_PMC_GUNNER "PMC Support Weapons Specialist" //Renamed from Specialist to Support Specialist as it only has SG skills.
#define JOB_PMC_SNIPER "PMC Weapons Specialist" //Renamed from Sharpshooter to specialist as it uses specialist skills.
-#define JOB_PMC_CREWMAN "Weyland-Yutani PMC (Crewman)"
-#define JOB_PMC_NINJA "PMC Ninja"
+#define JOB_PMC_CREWMAN "PMC Vehicle Crewman"
#define JOB_PMC_XENO_HANDLER "PMC Xeno Handler"
-#define JOB_PMC_COMMANDO "PMC Commando"
#define JOB_PMC_LEADER "PMC Leader"
#define JOB_PMC_LEAD_INVEST "PMC Lead Investigator"
#define JOB_PMC_DIRECTOR "PMC Site Director"
#define JOB_PMC_SYNTH "PMC Support Synthetic"
-#define JOB_PMC_GRUNT_LIST list(JOB_PMC_STANDARD, JOB_PMC_ENGINEER, JOB_PMC_MEDIC, JOB_PMC_INVESTIGATOR, JOB_PMC_DETAINER, JOB_PMC_ELITE, JOB_PMC_GUNNER, JOB_PMC_SNIPER, JOB_PMC_CREWMAN, JOB_PMC_NINJA, JOB_PMC_XENO_HANDLER, JOB_PMC_COMMANDO, JOB_PMC_LEADER, JOB_PMC_LEAD_INVEST)
+#define ROLES_WY_PMC list(JOB_PMC_LEADER, JOB_PMC_SNIPER, JOB_PMC_GUNNER, JOB_PMC_ENGINEER, JOB_PMC_MEDIC, JOB_PMC_STANDARD)
+#define ROLES_WY_PMC_AUX list(JOB_PMC_SYNTH, JOB_PMC_CREWMAN, JOB_PMC_XENO_HANDLER, JOB_PMC_DOCTOR)
+#define ROLES_WY_PMC_INSPEC list(JOB_PMC_LEAD_INVEST, JOB_PMC_INVESTIGATOR, JOB_PMC_DETAINER)
+#define ROLES_WY_PMC_ALL ROLES_WY_PMC + ROLES_WY_PMC_AUX + ROLES_WY_PMC_INSPEC
//-------- WY --------//
@@ -204,13 +205,16 @@ GLOBAL_LIST_INIT(job_command_roles, JOB_COMMAND_ROLES_LIST)
#define JOB_CHIEF_EXECUTIVE "Corporate Chief Executive"
#define JOB_DIRECTOR "W-Y Director"
+#define ROLES_WY_CORPORATE list(JOB_EXECUTIVE_SUPERVISOR, JOB_EXECUTIVE_SPECIALIST, JOB_SENIOR_EXECUTIVE, JOB_EXECUTIVE, JOB_JUNIOR_EXECUTIVE, JOB_TRAINEE)
+#define ROLES_WY_LEADERSHIP list(JOB_DIRECTOR, JOB_PMC_DIRECTOR, JOB_CHIEF_EXECUTIVE, JOB_DIVISION_MANAGER, JOB_ASSISTANT_MANAGER)
+
//-------- WY Goons --------//
#define JOB_WY_GOON "WY Corporate Security"
#define JOB_WY_GOON_TECH "WY Corporate Security Technician"
#define JOB_WY_GOON_LEAD "WY Corporate Security Lead"
#define JOB_WY_GOON_RESEARCHER "WY Research Consultant"
-#define JOB_WY_GOON_LIST list(JOB_WY_GOON, JOB_WY_GOON_LEAD)
+#define ROLES_WY_GOONS list(JOB_WY_GOON_LEAD, JOB_WY_GOON_TECH, JOB_WY_GOON)
//---- Contractors ----//
#define JOB_CONTRACTOR "VAIPO Mercenary"
@@ -385,4 +389,4 @@ GLOBAL_LIST_INIT(job_command_roles, JOB_COMMAND_ROLES_LIST)
///For denying certain traits being applied to people. ie. bad leg
///'Grunt' lists are for people who wouldn't logically get the bad leg trait, ie. UPP marine counterparts.
-#define JOB_ERT_GRUNT_LIST list(DUTCH_JOB_LIST, RIOT_JOB_LIST, PROVOST_JOB_LIST, CMB_GRUNT_LIST, CLF_JOB_LIST, UPP_JOB_GRUNT_LIST, UPP_COMMANDO_JOB_LIST, CONTRACTOR_JOB_LIST, JOB_WY_GOON_LIST, JOB_PMC_GRUNT_LIST)
+#define JOB_ERT_GRUNT_LIST list(DUTCH_JOB_LIST, RIOT_JOB_LIST, PROVOST_JOB_LIST, CMB_GRUNT_LIST, CLF_JOB_LIST, UPP_JOB_GRUNT_LIST, UPP_COMMANDO_JOB_LIST, CONTRACTOR_JOB_LIST, ROLES_WY_GOONS, ROLES_WY_PMC_ALL)
diff --git a/code/__DEFINES/objects.dm b/code/__DEFINES/objects.dm
index d839789d1664..26db2f3d2254 100644
--- a/code/__DEFINES/objects.dm
+++ b/code/__DEFINES/objects.dm
@@ -86,6 +86,7 @@ GLOBAL_LIST_INIT(RESTRICTED_CAMERA_NETWORKS, list( //Those networks can only be
CAMERA_NET_LADDER,
CAMERA_NET_COLONY,
CAMERA_NET_OVERWATCH,
+ CAMERA_NET_ARES,
))
#define STASIS_IN_BAG 1
diff --git a/code/__DEFINES/sentry_laptop_configurations.dm b/code/__DEFINES/sentry_laptop_configurations.dm
index 6f4e2bec14ca..86c7e646c38a 100644
--- a/code/__DEFINES/sentry_laptop_configurations.dm
+++ b/code/__DEFINES/sentry_laptop_configurations.dm
@@ -1,6 +1,6 @@
-#define FACTION_WEYLAND "WY"
-#define FACTION_HUMAN "HUMAN"
-#define FACTION_COLONY "COLONY"
+#define SENTRY_FACTION_WEYLAND "WY"
+#define SENTRY_FACTION_HUMAN "HUMAN"
+#define SENTRY_FACTION_COLONY "COLONY"
#define ROF_SINGLE "SINGLE"
#define ROF_BURST "BURST"
diff --git a/code/__HELPERS/lists.dm b/code/__HELPERS/lists.dm
index a1b38b48f754..856a0a492cbb 100644
--- a/code/__HELPERS/lists.dm
+++ b/code/__HELPERS/lists.dm
@@ -35,7 +35,7 @@
/proc/listgetindex(list/list,index)
if(istype(list) && list.len)
if(isnum(index))
- if(InRange(index,1,list.len))
+ if(ISINRANGE(index,1,list.len))
return list[index]
else if(list[index])
return list[index]
diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm
index 88bc3e8af9f5..cea6353699ad 100644
--- a/code/__HELPERS/unsorted.dm
+++ b/code/__HELPERS/unsorted.dm
@@ -3,8 +3,6 @@
*/
// GLOBAL DEFINES //
-#define is_hot(I) (I?:heat_source)
-
//Whether or not the given item counts as sharp in terms of dealing damage
#define is_sharp(I) (isitem(I) && I?:sharp && I?:edge)
@@ -17,9 +15,6 @@
HAS_TRAIT(W, TRAIT_TOOL_SCREWDRIVER) || istype(W, /obj/item/tool/pen ) || istype(W, /obj/item/tool/shovel)) \
)
-//Makes sure MIDDLE is between LOW and HIGH. If not, it adjusts it. Returns the adjusted value.
-#define between(low, middle, high) (max(min(middle, high), low))
-
//Offuscate x for coord system
#define obfuscate_x(x) ((x) + GLOB.obfs_x)
@@ -61,16 +56,6 @@
// GLOBAL PROCS //
-//Returns the middle-most value
-/proc/dd_range(low, high, num)
- return max(low,min(high,num))
-
-//Returns whether or not A is the middle most value
-/proc/InRange(A, lower, upper)
- if(A < lower) return 0
- if(A > upper) return 0
- return 1
-
/// Gives X position on pixel grid of an object, accounting for offsets
/proc/get_pixel_position_x(atom/subject, relative = FALSE)
. = subject.pixel_x + subject.base_pixel_x
@@ -245,9 +230,6 @@
-/proc/sign(x)
- return x!=0?x/abs(x):0
-
//Returns whether or not a player is a guest using their ckey as an input
/proc/IsGuestKey(key)
if (findtext(key, "Guest-", 1, 7) != 1) //was findtextEx
@@ -295,61 +277,6 @@
search_id = 0
return 1
-
-
-//Generalised helper proc for letting mobs rename themselves. Used to be clname() and ainame()
-//Last modified by Carn
-/mob/proc/rename_self(role, allow_numbers=0)
- var/oldname = real_name
- var/time_passed = world.time
-
- var/newname
- for(var/i=1,i<=3,i++) //we get 3 attempts to pick a suitable name.
- newname = input(src,"You are a [role]. Would you like to change your name to something else?", "Name change",oldname) as text
- if((world.time-time_passed)>300)
- return //took too long
- newname = reject_bad_name(newname,allow_numbers) //returns null if the name doesn't meet some basic requirements. Tidies up a few other things like bad-characters.
- for(var/mob/living/M in GLOB.alive_mob_list)
- if(M == src)
- continue
-
- if(!newname || M.real_name == newname)
- newname = null
- break
-
- if(newname)
- break //That's a suitable name!
- to_chat(src, "Sorry, that [role]-name wasn't appropriate, please try another. It's possibly too long/short, has bad characters or is already taken.")
-
- if(!newname) //we'll stick with the oldname then
- return
-
- fully_replace_character_name(oldname,newname)
-
-/proc/get_sorted_mobs()
- var/list/old_list = getmobs()
- var/list/Dead_list = list()
- var/list/keyclient_list = list()
- var/list/key_list = list()
- var/list/logged_list = list()
- for(var/named in old_list)
- var/mob/M = old_list[named]
- if(isobserver(M) || M.stat == 2)
- Dead_list |= M
- else if(M.key && M.client)
- keyclient_list |= M
- else if(M.key)
- key_list |= M
- else
- logged_list |= M
- old_list.Remove(named)
- var/list/new_list = list()
- new_list += keyclient_list
- new_list += key_list
- new_list += logged_list
- new_list += Dead_list
- return new_list
-
//Returns a list of all mobs with their name
/proc/getmobs()
var/list/mobs = sortmobs()
@@ -378,150 +305,6 @@
return creatures
-/proc/getxenos()
- var/list/mobs = sortxenos()
- var/list/names = list()
- var/list/creatures = list()
- var/list/namecounts = list()
- for(var/mob/M in mobs)
- var/name = M.name
- if (name in names)
- namecounts[name]++
- name = "[name] ([namecounts[name]])"
- else
- names.Add(name)
- namecounts[name] = 1
- if(isobserver(M))
- name += " \[ghost\]"
- else if(M.stat == DEAD)
- name += " \[dead\]"
- creatures[name] = M
- return creatures
-
-/proc/getpreds()
- var/list/mobs = sortpreds()
- var/list/names = list()
- var/list/creatures = list()
- var/list/namecounts = list()
- for(var/mob/M in mobs)
- if(!isyautja(M)) continue
- var/name = M.name
- if (name in names)
- namecounts[name]++
- name = "[name] ([namecounts[name]])"
- else
- names.Add(name)
- namecounts[name] = 1
- if (M.real_name && M.real_name != M.name)
- name += " \[[M.real_name]\]"
- if (M.stat == 2)
- name += " \[dead\]"
- if(istype(M, /mob/dead/observer/))
- name += " \[ghost\]"
- creatures[name] = M
-
- return creatures
-
-/proc/gethumans()
- var/list/mobs = sorthumans()
- var/list/names = list()
- var/list/creatures = list()
- var/list/namecounts = list()
- for(var/mob/M in mobs)
- if(isyautja(M)) continue
- if(iszombie(M)) continue
- var/name = M.name
- if (name in names)
- namecounts[name]++
- name = "[name] ([namecounts[name]])"
- else
- names.Add(name)
- namecounts[name] = 1
- if (M.real_name && M.real_name != M.name)
- name += " \[[M.real_name]\]"
- if (M.stat == 2)
- name += " \[dead\]"
- if(istype(M, /mob/dead/observer/))
- name += " \[ghost\]"
- creatures[name] = M
-
- return creatures
-
-/proc/getsurvivors()
- var/list/mobs = sortsurvivors()
- var/list/names = list()
- var/list/creatures = list()
- var/list/namecounts = list()
- for(var/mob/M in mobs)
- if(isyautja(M)) continue
- if(iszombie(M)) continue
- var/name = M.name
- if (name in names)
- namecounts[name]++
- name = "[name] ([namecounts[name]])"
- else
- names.Add(name)
- namecounts[name] = 1
- if (M.real_name && M.real_name != M.name)
- name += " \[[M.real_name]\]"
- if (M.stat == 2)
- name += " \[dead\]"
- if(istype(M, /mob/dead/observer/))
- name += " \[ghost\]"
- creatures[name] = M
-
- return creatures
-
-/proc/getertmembers()
- var/list/mobs = sortertmembers()
- var/list/names = list()
- var/list/creatures = list()
- var/list/namecounts = list()
- for(var/mob/M in mobs)
- if(isyautja(M)) continue
- if(iszombie(M)) continue
- var/name = M.name
- if (name in names)
- namecounts[name]++
- name = "[name] ([namecounts[name]])"
- else
- names.Add(name)
- namecounts[name] = 1
- if (M.real_name && M.real_name != M.name)
- name += " \[[M.real_name]\]"
- if (M.stat == 2)
- name += " \[dead\]"
- if(istype(M, /mob/dead/observer/))
- name += " \[ghost\]"
- creatures[name] = M
-
- return creatures
-
-/proc/getsynths()
- var/list/mobs = sortsynths()
- var/list/names = list()
- var/list/creatures = list()
- var/list/namecounts = list()
- for(var/mob/M in mobs)
- if(isyautja(M)) continue
- if(iszombie(M)) continue
- var/name = M.name
- if (name in names)
- namecounts[name]++
- name = "[name] ([namecounts[name]])"
- else
- names.Add(name)
- namecounts[name] = 1
- if (M.real_name && M.real_name != M.name)
- name += " \[[M.real_name]\]"
- if (M.stat == 2)
- name += " \[dead\]"
- if(istype(M, /mob/dead/observer/))
- name += " \[ghost\]"
- creatures[name] = M
-
- return creatures
-
/proc/get_multi_vehicles()
var/list/multi_vehicles = GLOB.all_multi_vehicles.Copy()
var/list/names = list()
@@ -548,22 +331,6 @@
return vehicles
-/proc/get_holograms()
- var/list/holograms = list()
- var/list/namecounts = list()
- for(var/i in GLOB.hologram_list)
- var/mob/hologram/H = i
- var/name = H.name
- if(name in namecounts)
- namecounts[name]++
- name = "[name] #([namecounts[name]])"
- else
- namecounts[name] = 1
-
- holograms[name] = H
-
- return holograms
-
//Orders mobs by type then by name
/proc/sortmobs()
var/list/moblist = list()
@@ -590,62 +357,6 @@
moblist += friend
return moblist
-/proc/sortxenos()
- var/list/xenolist = list()
- var/list/sortmob = sortAtom(GLOB.xeno_mob_list)
- for(var/mob/living/carbon/xenomorph/M in sortmob)
- if(!M.client)
- continue
- xenolist.Add(M)
- return xenolist
-
-/proc/sortpreds()
- var/list/predlist = list()
- var/list/sortmob = sortAtom(GLOB.human_mob_list)
- for(var/mob/living/carbon/human/M in sortmob)
- if(!M.client || !M.species.name == "Yautja")
- continue
- predlist.Add(M)
- return predlist
-
-/proc/sorthumans()
- var/list/humanlist = list()
- var/list/sortmob = sortAtom(GLOB.human_mob_list)
- for(var/mob/living/carbon/human/M in sortmob)
- if(!M.client || M.species.name == "Yautja")
- continue
- humanlist.Add(M)
- return humanlist
-
-/proc/sortsurvivors()
- var/list/survivorlist = list()
- var/list/sortmob = sortAtom(GLOB.human_mob_list)
- for(var/mob/living/carbon/human/M in sortmob)
- if(!M.client || M.species.name == "Yautja")
- continue
- if(M.faction == FACTION_SURVIVOR)
- survivorlist.Add(M)
- return survivorlist
-
-/proc/sortertmembers()
- var/list/ertmemberlist = list()
- var/list/sortmob = sortAtom(GLOB.human_mob_list)
- for(var/mob/living/carbon/human/M in sortmob)
- if(!M.client)
- continue
- if(M.faction in FACTION_LIST_ERT)
- ertmemberlist.Add(M)
- return ertmemberlist
-
-/proc/sortsynths()
- var/list/synthlist = list()
- var/list/sortmob = sortAtom(GLOB.human_mob_list)
- for(var/mob/living/carbon/human/M in sortmob)
- if(!M.client || !issynth(M))
- continue
- synthlist.Add(M)
- return synthlist
-
/proc/key_name(whom, include_link = null, include_name = 1, highlight_special_characters = 1)
var/mob/M
var/client/C
@@ -1601,22 +1312,6 @@ GLOBAL_LIST_INIT(WALLITEMS, list(
return TRUE
return FALSE
-// Returns only the perimeter of the block given by the min and max turfs
-/proc/blockhollow(turf/min, turf/max)
- var/list/perimeter_turfs = list()
-
- // Upper/lower perimeters
- for(var/x_coord = min.x to max.x)
- perimeter_turfs += locate(x_coord, min.y, min.z)
- perimeter_turfs += locate(x_coord, max.y, min.z)
-
- // Left/right perimeters
- for(var/y_coord = min.y + 1 to max.y - 1)
- perimeter_turfs += locate(min.x, y_coord, min.z)
- perimeter_turfs += locate(max.x, y_coord, min.z)
-
- return perimeter_turfs
-
/proc/flick_overlay(atom/target, overlay, time)
target.overlays += overlay
addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(remove_timed_overlay), target, overlay), time)
@@ -1624,67 +1319,6 @@ GLOBAL_LIST_INIT(WALLITEMS, list(
/proc/remove_timed_overlay(atom/target, overlay)
target.overlays -= overlay
-/*
- Returns a list of random-looking, zero-sum variances.
-
- Imagine a straight line divided up into n segments,
- then divide each segment into 2 subsegments again, so each original segment gets "its own point" that divides the subsegments
- Then displace the first segment's dividing point by e.g. 5.
- Then displace the second segment's dividing point by -5.
- Then displace the third segment's dividing point by 5, and so on, alternating between a displacement of 5 and -5
- (If there's an odd number of segments just don't displace the last point at all)
-
- At the end, you'll have a zig-zaggy line. You then go through each segment end and
- take away/add some random amount of displacement from its point. If you keep track of how much
- net displacement has been added/removed, you can distribute it among other points
- and end up with net 0 displacement (i.e. 0 total variance)
-
- Basically, this is what happens: https://i.imgur.com/AuY7HHd.png
-*/
-/proc/get_random_zero_sum_variances(amount, max_variance)
- // Displace each "point" to max variance
- var/list/variances[amount]
- for(var/i in 1 to variances.len)
- if(i == variances.len && (variances.len % 2))
- variances[i] = 0
- else
- variances[i] = (i % 2 ? 1 : -1) * max_variance
-
- // Jiggle each variance a random amount towards the "center line"/0 variance
- var/net_displacement = 0
- for(var/i in 1 to variances.len)
- var/to_redistribute = (i % 2 ? -1 : 1) * rand(0, max_variance/2)
-
- net_displacement += to_redistribute
- variances[i] += to_redistribute
-
- // Lucky! Everything jiggled towards 0 in a way that left 0 net displacement
- if(!net_displacement)
- return variances
-
- // Redistribute the net displacement evenly on the side of the center line that needs it
- // Only half the points are gonna be affected.
- var/to_redistribute = abs(ceil(net_displacement / (variances.len/2)))
- for(var/i in 1 to variances.len)
- if(!net_displacement)
- break
-
- // Positive net displacement, only distribute to points that were given negative variance to begin with
- if(net_displacement > 0 && !(i % 2))
- variances[i] -= min(abs(net_displacement), to_redistribute)
- net_displacement -= to_redistribute
- // Negative net displacement, only distribute to points that were given positive variance to begin with
- else if(net_displacement < 0 && i % 2)
- variances[i] += min(abs(net_displacement), to_redistribute)
- net_displacement += to_redistribute
-
- return variances
-
-/proc/check_bitflag(flag, bit)
- if(flag & bit)
- return TRUE
- return FALSE
-
// A proc purely for a callback that returns TRUE (and does nothing else)
/proc/_callback_true()
return TRUE
@@ -1867,11 +1501,6 @@ GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new)
#define UNTIL(X) while(!(X)) stoplag()
-/proc/IsValidSrc(datum/D)
- if(istype(D))
- return !QDELETED(D)
- return FALSE
-
//Repopulates sortedAreas list
/proc/repopulate_sorted_areas()
GLOB.sorted_areas = list()
@@ -1950,12 +1579,6 @@ GLOBAL_LIST_INIT(duplicate_forbidden_vars,list(
M.regenerate_icons()
return O
-/proc/convert_to_json_text(json_file_string)
- var/json_file = file(json_file_string)
- json_file = file2text(json_file)
- json_file = json_decode(json_file)
- return json_file
-
///Returns a list of all items of interest with their name
/proc/getpois(mobs_only = FALSE, skip_mindless = FALSE, specify_dead_role = TRUE)
var/list/mobs = sortmobs()
diff --git a/code/datums/medal_awards.dm b/code/datums/medal_awards.dm
index 818d623033d2..37b21bd2bb49 100644
--- a/code/datums/medal_awards.dm
+++ b/code/datums/medal_awards.dm
@@ -479,6 +479,10 @@ GLOBAL_LIST_INIT(xeno_medals, list(XENO_SLAUGHTER_MEDAL, XENO_RESILIENCE_MEDAL,
continue
recipient_ranks[recipient_name] = record.fields["rank"]
possible_recipients += recipient_name
+ if(length(possible_recipients) == 0)
+ to_chat(recommendation_giver, SPAN_WARNING("It's not possible to give medals when the ship is empty. Tough luck, partner..."))
+ return FALSE
+
var/chosen_recipient = tgui_input_list(recommendation_giver, "Who do you want to recommend a medal for?", "Medal Recommendation", possible_recipients)
if(!chosen_recipient)
return FALSE
diff --git a/code/datums/paygrades/factions/wy/wy.dm b/code/datums/paygrades/factions/wy/wy.dm
index b3ff70830603..17b46ff5790e 100644
--- a/code/datums/paygrades/factions/wy/wy.dm
+++ b/code/datums/paygrades/factions/wy/wy.dm
@@ -1,7 +1,7 @@
/datum/paygrade/wy_ranks
name = "WYC Paygrade"
pay_multiplier = 1
- default_faction = FACTION_WEYLAND
+ default_faction = FACTION_WY
/datum/paygrade/wy_ranks/wyc1
paygrade = PAY_SHORT_WYC1
diff --git a/code/datums/paygrades/paygrade.dm b/code/datums/paygrades/paygrade.dm
index 862dce0dfb0c..3befc979f2d2 100644
--- a/code/datums/paygrades/paygrade.dm
+++ b/code/datums/paygrades/paygrade.dm
@@ -42,7 +42,7 @@ GLOBAL_LIST_INIT(co_paygrades, list(
GLOB.uscm_officer_paygrades += paygrade
if(officer_grade >= GRADE_FLAG)
GLOB.uscm_highcom_paygrades += paygrade
- if(FACTION_WEYLAND,FACTION_PMC)
+ if(FACTION_WY,FACTION_PMC)
if(officer_grade >= GRADE_FLAG)
GLOB.wy_highcom_paygrades += paygrade
diff --git a/code/datums/skills/civilian.dm b/code/datums/skills/civilian.dm
index 9dc4afd78826..0ff13ae67225 100644
--- a/code/datums/skills/civilian.dm
+++ b/code/datums/skills/civilian.dm
@@ -29,6 +29,7 @@ CIVILIAN
name = "ICC CL - Black Market ERT"
skills = list(
SKILL_CQC = SKILL_CQC_DEFAULT,
+ SKILL_FIREMAN = SKILL_FIREMAN_TRAINED,
SKILL_ENDURANCE = SKILL_ENDURANCE_TRAINED,
SKILL_ENGINEER = SKILL_ENGINEER_ENGI, //The ASRS consoles
SKILL_FIREARMS = SKILL_FIREARMS_CIVILIAN,
@@ -57,11 +58,13 @@ CIVILIAN
skills = list(
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_TRAINED,
SKILL_ENDURANCE = SKILL_ENDURANCE_SURVIVOR,
+ SKILL_FIREMAN = SKILL_FIREMAN_TRAINED,
)
/datum/skills/civilian/survivor/manager
name = "Weyland-Yutani Manager"
skills = list(
+ SKILL_FIREMAN = SKILL_FIREMAN_TRAINED,
SKILL_LEADERSHIP = SKILL_LEAD_MASTER,
SKILL_OVERWATCH = SKILL_OVERWATCH_TRAINED,
SKILL_MEDICAL = SKILL_MEDICAL_TRAINED,
@@ -120,6 +123,7 @@ CIVILIAN
/datum/skills/civilian/survivor/doctor
name = "Survivor Doctor"
additional_skills = list(
+ SKILL_FIREMAN = SKILL_FIREMAN_TRAINED,
SKILL_MEDICAL = SKILL_MEDICAL_DOCTOR,
SKILL_SURGERY = SKILL_SURGERY_TRAINED,
)
@@ -136,6 +140,7 @@ CIVILIAN
/datum/skills/civilian/survivor/scientist
name = "Survivor Scientist"
additional_skills = list(
+ SKILL_FIREMAN = SKILL_FIREMAN_TRAINED,
SKILL_MEDICAL = SKILL_MEDICAL_DOCTOR,
SKILL_SURGERY = SKILL_SURGERY_TRAINED,
SKILL_RESEARCH = SKILL_RESEARCH_TRAINED,
@@ -144,6 +149,7 @@ CIVILIAN
/datum/skills/civilian/survivor/chef
name = "Survivor Chef"
additional_skills = list(
+ SKILL_FIREMAN = SKILL_FIREMAN_TRAINED,
SKILL_MELEE_WEAPONS = SKILL_MELEE_SUPER,
SKILL_DOMESTIC = SKILL_DOMESTIC_TRAINED,
)
@@ -151,6 +157,7 @@ CIVILIAN
/datum/skills/civilian/survivor/miner
name = "Survivor Miner"
additional_skills = list(
+ SKILL_FIREMAN = SKILL_FIREMAN_TRAINED,
SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_POWERLOADER = SKILL_POWERLOADER_MASTER,
SKILL_VEHICLE = SKILL_VEHICLE_SMALL,
@@ -159,6 +166,7 @@ CIVILIAN
/datum/skills/civilian/survivor/trucker
name = "Survivor Trucker"
additional_skills = list(
+ SKILL_FIREMAN = SKILL_FIREMAN_TRAINED,
SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
SKILL_VEHICLE = SKILL_VEHICLE_CREWMAN,
@@ -167,6 +175,7 @@ CIVILIAN
/datum/skills/civilian/survivor/engineer
name = "Survivor Engineer"
additional_skills = list(
+ SKILL_FIREMAN = SKILL_FIREMAN_TRAINED,
SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
SKILL_POWERLOADER = SKILL_POWERLOADER_MASTER,
@@ -176,6 +185,7 @@ CIVILIAN
/datum/skills/civilian/survivor/chaplain
name = "Survivor Chaplain"
additional_skills = list(
+ SKILL_FIREMAN = SKILL_FIREMAN_TRAINED,
SKILL_LEADERSHIP = SKILL_LEAD_TRAINED,
)
@@ -199,6 +209,7 @@ CIVILIAN
/datum/skills/civilian/survivor/prisoner
name = "Survivor Prisoner"
additional_skills = list(
+ SKILL_FIREMAN = SKILL_FIREMAN_TRAINED,
SKILL_CQC = SKILL_CQC_SKILLED,
SKILL_FIREARMS = SKILL_FIREARMS_TRAINED,
SKILL_MELEE_WEAPONS = SKILL_MELEE_TRAINED,
@@ -208,6 +219,7 @@ CIVILIAN
/datum/skills/civilian/survivor/gangleader
name = "Survivor Gang Leader"
additional_skills = list(
+ SKILL_FIREMAN = SKILL_FIREMAN_TRAINED,
SKILL_CQC = SKILL_CQC_SKILLED,
SKILL_FIREARMS = SKILL_FIREARMS_TRAINED,
SKILL_LEADERSHIP = SKILL_LEAD_TRAINED,
diff --git a/code/datums/skills/clf.dm b/code/datums/skills/clf.dm
index 6042febb6b48..88aa14a41f79 100644
--- a/code/datums/skills/clf.dm
+++ b/code/datums/skills/clf.dm
@@ -10,7 +10,7 @@ COLONIAL LIBERATION FRONT
SKILL_FIREARMS = SKILL_FIREARMS_TRAINED,
SKILL_MELEE_WEAPONS = SKILL_MELEE_TRAINED,
SKILL_POLICE = SKILL_POLICE_SKILLED,
- SKILL_FIREMAN = SKILL_FIREMAN_SKILLED,
+ SKILL_FIREMAN = SKILL_FIREMAN_TRAINED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_TRAINED,
SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_MEDICAL = SKILL_MEDICAL_TRAINED,
@@ -22,6 +22,7 @@ COLONIAL LIBERATION FRONT
/datum/skills/clf/combat_engineer
name = "CLF Engineer"
skills = list(
+ SKILL_FIREMAN = SKILL_FIREMAN_TRAINED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
SKILL_MEDICAL = SKILL_MEDICAL_TRAINED,
@@ -34,6 +35,7 @@ COLONIAL LIBERATION FRONT
/datum/skills/clf/combat_medic
name = "CLF Medic"
skills = list(
+ SKILL_FIREMAN = SKILL_FIREMAN_TRAINED,
SKILL_MEDICAL = SKILL_MEDICAL_MEDIC,
SKILL_SURGERY = SKILL_SURGERY_TRAINED,
SKILL_VEHICLE = SKILL_VEHICLE_SMALL,
diff --git a/code/datums/skills/commando.dm b/code/datums/skills/commando.dm
index dabae682bd0b..ed5e5ee086e4 100644
--- a/code/datums/skills/commando.dm
+++ b/code/datums/skills/commando.dm
@@ -8,6 +8,7 @@ SPEC-OPS
name = "Commando"
skills = list(
SKILL_CQC = SKILL_CQC_EXPERT,
+ SKILL_FIREMAN = SKILL_FIREMAN_SKILLED,
SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
SKILL_FIREARMS = SKILL_FIREARMS_EXPERT,
@@ -22,6 +23,7 @@ SPEC-OPS
name = "Commando Medic"
skills = list(
SKILL_CQC = SKILL_CQC_EXPERT,
+ SKILL_FIREMAN = SKILL_FIREMAN_SKILLED,
SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
SKILL_FIREARMS = SKILL_FIREARMS_EXPERT,
@@ -37,6 +39,7 @@ SPEC-OPS
name = "Commando Leader"
skills = list(
SKILL_CQC = SKILL_CQC_EXPERT,
+ SKILL_FIREMAN = SKILL_FIREMAN_SKILLED,
SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
SKILL_FIREARMS = SKILL_FIREARMS_EXPERT,
@@ -52,6 +55,7 @@ SPEC-OPS
name = "Deathsquad"
skills = list(
SKILL_CQC = SKILL_CQC_MASTER,
+ SKILL_FIREMAN = SKILL_FIREMAN_SKILLED,
SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
SKILL_FIREARMS = SKILL_FIREARMS_EXPERT,
@@ -66,6 +70,7 @@ SPEC-OPS
name = "Deathsquad Leader"
skills = list(
SKILL_CQC = SKILL_CQC_MASTER,
+ SKILL_FIREMAN = SKILL_FIREMAN_MASTER,
SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
SKILL_FIREARMS = SKILL_FIREARMS_EXPERT,
@@ -81,6 +86,7 @@ SPEC-OPS
name = "Deathsquad Officer"
skills = list(
SKILL_CQC = SKILL_CQC_MASTER,
+ SKILL_FIREMAN = SKILL_FIREMAN_MASTER,
SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
SKILL_FIREARMS = SKILL_FIREARMS_EXPERT,
@@ -97,6 +103,7 @@ SPEC-OPS
name = "Spy"
skills = list(
SKILL_CQC = SKILL_CQC_TRAINED,
+ SKILL_FIREMAN = SKILL_FIREMAN_TRAINED,
SKILL_FIREARMS = SKILL_FIREARMS_EXPERT,
SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
@@ -109,6 +116,7 @@ SPEC-OPS
name = "Ninja"
skills = list(
SKILL_CQC = SKILL_CQC_MASTER,
+ SKILL_FIREMAN = SKILL_FIREMAN_TRAINED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_TRAINED,
SKILL_MEDICAL = SKILL_MEDICAL_TRAINED,
SKILL_MELEE_WEAPONS = SKILL_MELEE_SUPER,
diff --git a/code/datums/skills/dutch.dm b/code/datums/skills/dutch.dm
index 5c2c63a8c463..4f19233e66d0 100644
--- a/code/datums/skills/dutch.dm
+++ b/code/datums/skills/dutch.dm
@@ -2,6 +2,7 @@
name = "Dutch"
skills = list(
SKILL_CQC = SKILL_CQC_MASTER,
+ SKILL_FIREMAN = SKILL_FIREMAN_MAX,
SKILL_MELEE_WEAPONS = SKILL_MELEE_MAX,
SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
diff --git a/code/datums/skills/forecon.dm b/code/datums/skills/forecon.dm
index 4799dd68d617..724a49ee98ca 100644
--- a/code/datums/skills/forecon.dm
+++ b/code/datums/skills/forecon.dm
@@ -12,6 +12,7 @@ MILITARY SURVIVORS
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_DEFAULT,
SKILL_MELEE_WEAPONS = SKILL_MELEE_TRAINED,
SKILL_CQC = SKILL_CQC_TRAINED,
+ SKILL_FIREMAN = SKILL_FIREMAN_TRAINED,
SKILL_FIREARMS = SKILL_FIREARMS_TRAINED,
SKILL_MEDICAL = SKILL_MEDICAL_TRAINED,
SKILL_ENDURANCE = SKILL_ENDURANCE_SURVIVOR,
@@ -27,6 +28,7 @@ MILITARY SURVIVORS
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
SKILL_MELEE_WEAPONS = SKILL_MELEE_TRAINED,
SKILL_CQC = SKILL_CQC_TRAINED,
+ SKILL_FIREMAN = SKILL_FIREMAN_TRAINED,
SKILL_FIREARMS = SKILL_FIREARMS_TRAINED,
SKILL_MEDICAL = SKILL_MEDICAL_MEDIC,
SKILL_SURGERY = SKILL_SURGERY_NOVICE,
@@ -43,6 +45,7 @@ MILITARY SURVIVORS
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_DEFAULT,
SKILL_MELEE_WEAPONS = SKILL_MELEE_TRAINED,
SKILL_CQC = SKILL_CQC_TRAINED,
+ SKILL_FIREMAN = SKILL_FIREMAN_TRAINED,
SKILL_FIREARMS = SKILL_FIREARMS_TRAINED,
SKILL_SPEC_WEAPONS = SKILL_SPEC_SCOUT,
SKILL_MEDICAL = SKILL_MEDICAL_TRAINED,
@@ -59,6 +62,7 @@ MILITARY SURVIVORS
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_DEFAULT,
SKILL_MELEE_WEAPONS = SKILL_MELEE_TRAINED,
SKILL_CQC = SKILL_CQC_TRAINED,
+ SKILL_FIREMAN = SKILL_FIREMAN_TRAINED,
SKILL_FIREARMS = SKILL_FIREARMS_TRAINED,
SKILL_SPEC_WEAPONS = SKILL_SPEC_SMARTGUN,
SKILL_MEDICAL = SKILL_MEDICAL_TRAINED,
@@ -75,6 +79,7 @@ MILITARY SURVIVORS
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_DEFAULT,
SKILL_MELEE_WEAPONS = SKILL_MELEE_TRAINED,
SKILL_CQC = SKILL_CQC_TRAINED,
+ SKILL_FIREMAN = SKILL_FIREMAN_TRAINED,
SKILL_FIREARMS = SKILL_FIREARMS_TRAINED,
SKILL_SPEC_WEAPONS = SKILL_SPEC_SNIPER,
SKILL_MEDICAL = SKILL_MEDICAL_TRAINED,
@@ -91,6 +96,7 @@ MILITARY SURVIVORS
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_DEFAULT,
SKILL_MELEE_WEAPONS = SKILL_MELEE_TRAINED,
SKILL_CQC = SKILL_CQC_SKILLED,
+ SKILL_FIREMAN = SKILL_FIREMAN_SKILLED,
SKILL_FIREARMS = SKILL_FIREARMS_TRAINED,
SKILL_POLICE = SKILL_POLICE_SKILLED,
SKILL_JTAC = SKILL_JTAC_TRAINED,
diff --git a/code/datums/skills/freelancer.dm b/code/datums/skills/freelancer.dm
index 7f7256318edb..09df9f32369c 100644
--- a/code/datums/skills/freelancer.dm
+++ b/code/datums/skills/freelancer.dm
@@ -9,6 +9,7 @@ FREELANCERS
/datum/skills/freelancer
name = "Freelancer Private"
skills = list(
+ SKILL_FIREMAN = SKILL_FIREMAN_TRAINED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
SKILL_ENDURANCE = SKILL_ENDURANCE_TRAINED,
@@ -17,6 +18,7 @@ FREELANCERS
/datum/skills/freelancer/combat_medic
name = "Freelancer Medic"
skills = list(
+ SKILL_FIREMAN = SKILL_FIREMAN_TRAINED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
SKILL_ENDURANCE = SKILL_ENDURANCE_TRAINED,
@@ -27,6 +29,7 @@ FREELANCERS
/datum/skills/freelancer/SL
name = "Freelancer Leader"
skills = list(
+ SKILL_FIREMAN = SKILL_FIREMAN_SKILLED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
SKILL_ENDURANCE = SKILL_ENDURANCE_TRAINED,
diff --git a/code/datums/skills/gladiator.dm b/code/datums/skills/gladiator.dm
index 7ba2c9eff455..7757fd928972 100644
--- a/code/datums/skills/gladiator.dm
+++ b/code/datums/skills/gladiator.dm
@@ -2,6 +2,7 @@
name = "Gladiator"
skills = list(
SKILL_CQC = SKILL_CQC_SKILLED,
+ SKILL_FIREMAN = SKILL_FIREMAN_SKILLED,
SKILL_MELEE_WEAPONS = SKILL_MELEE_TRAINED,
SKILL_FIREARMS = SKILL_FIREARMS_CIVILIAN,
SKILL_LEADERSHIP = SKILL_LEAD_NOVICE,
@@ -13,6 +14,7 @@
name = "Gladiator Champion"
skills = list(
SKILL_CQC = SKILL_CQC_MASTER,
+ SKILL_FIREMAN = SKILL_FIREMAN_MAX,
SKILL_MELEE_WEAPONS = SKILL_MELEE_SUPER,
SKILL_LEADERSHIP = SKILL_LEAD_TRAINED,
SKILL_MEDICAL = SKILL_MEDICAL_MEDIC,
@@ -24,6 +26,7 @@
name = "Gladiator Leader"
skills = list(
SKILL_CQC = SKILL_CQC_MASTER,
+ SKILL_FIREMAN = SKILL_FIREMAN_MAX,
SKILL_MELEE_WEAPONS = SKILL_MELEE_SUPER,
SKILL_MEDICAL = SKILL_MEDICAL_MEDIC,
SKILL_LEADERSHIP = SKILL_LEAD_MASTER, //Spartacus!
diff --git a/code/datums/skills/mercenary.dm b/code/datums/skills/mercenary.dm
index 8d842ea30dd2..1dc18eaa2fbc 100644
--- a/code/datums/skills/mercenary.dm
+++ b/code/datums/skills/mercenary.dm
@@ -2,6 +2,7 @@
name = "Mercenary"
skills = list(
SKILL_CQC = SKILL_CQC_SKILLED,
+ SKILL_FIREMAN = SKILL_FIREMAN_SKILLED,
SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
SKILL_FIREARMS = SKILL_FIREARMS_EXPERT,
@@ -14,6 +15,7 @@
name = "Elite Mercenary"
skills = list(
SKILL_CQC = SKILL_CQC_SKILLED,
+ SKILL_FIREMAN = SKILL_FIREMAN_SKILLED,
SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
SKILL_FIREARMS = SKILL_FIREARMS_MAX,
@@ -28,6 +30,7 @@
name = "Elite Mercenary Medic"
skills = list(
SKILL_CQC = SKILL_CQC_SKILLED,
+ SKILL_FIREMAN = SKILL_FIREMAN_SKILLED,
SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
SKILL_FIREARMS = SKILL_FIREARMS_MAX,
@@ -42,6 +45,7 @@
name = "Elite Mercenary Engineer"
skills = list(
SKILL_CQC = SKILL_CQC_SKILLED,
+ SKILL_FIREMAN = SKILL_FIREMAN_SKILLED,
SKILL_ENGINEER = SKILL_ENGINEER_MASTER,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_MASTER,
SKILL_FIREARMS = SKILL_FIREARMS_MAX,
@@ -57,6 +61,7 @@
name = "Elite Mercenary Heavy"
skills = list(
SKILL_CQC = SKILL_CQC_SKILLED,
+ SKILL_FIREMAN = SKILL_FIREMAN_SKILLED,
SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
SKILL_FIREARMS = SKILL_FIREARMS_MAX,
@@ -72,6 +77,7 @@
name = "Elite Mercenary Leader"
skills = list(
SKILL_CQC = SKILL_CQC_SKILLED,
+ SKILL_FIREMAN = SKILL_FIREMAN_SKILLED,
SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
SKILL_FIREARMS = SKILL_FIREARMS_MAX,
diff --git a/code/datums/skills/misc.dm b/code/datums/skills/misc.dm
index e4f78219b5c6..0f0ca657f995 100644
--- a/code/datums/skills/misc.dm
+++ b/code/datums/skills/misc.dm
@@ -12,6 +12,7 @@ MISCELLANEOUS
SKILL_OVERWATCH = SKILL_OVERWATCH_TRAINED,
SKILL_POWERLOADER = SKILL_POWERLOADER_MASTER,
SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
+ SKILL_FIREMAN = SKILL_FIREMAN_TRAINED,
SKILL_LEADERSHIP = SKILL_LEAD_TRAINED,
SKILL_JTAC = SKILL_JTAC_EXPERT,
)
@@ -36,6 +37,7 @@ MISCELLANEOUS
skills = list(
SKILL_FIREARMS = SKILL_FIREARMS_CIVILIAN,
SKILL_CQC = SKILL_CQC_MASTER,
+ SKILL_FIREMAN = SKILL_FIREMAN_TRAINED,
SKILL_MELEE_WEAPONS = SKILL_MELEE_SUPER,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_MASTER,
SKILL_ENGINEER = SKILL_ENGINEER_MASTER,
diff --git a/code/datums/skills/upp.dm b/code/datums/skills/upp.dm
index 77401ab62878..e367372719d6 100644
--- a/code/datums/skills/upp.dm
+++ b/code/datums/skills/upp.dm
@@ -37,6 +37,7 @@ UNITED PROGRESSIVE PEOPLES
SKILL_SURGERY = SKILL_SURGERY_TRAINED,
SKILL_ENDURANCE = SKILL_ENDURANCE_TRAINED,
SKILL_CQC = SKILL_CQC_DEFAULT,
+ SKILL_FIREMAN = SKILL_FIREMAN_TRAINED,
SKILL_FIREARMS = SKILL_FIREARMS_TRAINED,
)
@@ -47,6 +48,7 @@ UNITED PROGRESSIVE PEOPLES
SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
SKILL_ENDURANCE = SKILL_ENDURANCE_MASTER,
SKILL_CQC = SKILL_CQC_TRAINED,
+ SKILL_FIREMAN = SKILL_FIREMAN_TRAINED,
SKILL_LEADERSHIP = SKILL_LEAD_TRAINED,
SKILL_JTAC = SKILL_JTAC_TRAINED,
SKILL_SPEC_WEAPONS = SKILL_SPEC_UPP,
@@ -61,6 +63,7 @@ UNITED PROGRESSIVE PEOPLES
SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
SKILL_ENDURANCE = SKILL_ENDURANCE_MASTER,
SKILL_CQC = SKILL_CQC_TRAINED,
+ SKILL_FIREMAN = SKILL_FIREMAN_SKILLED,
SKILL_LEADERSHIP = SKILL_LEAD_EXPERT,
SKILL_OVERWATCH = SKILL_OVERWATCH_TRAINED,
SKILL_MEDICAL = SKILL_MEDICAL_MEDIC,
@@ -162,6 +165,7 @@ UNITED PROGRESSIVE PEOPLES
SKILL_MEDICAL = SKILL_MEDICAL_TRAINED,
SKILL_ENDURANCE = SKILL_ENDURANCE_TRAINED,
SKILL_CQC = SKILL_CQC_TRAINED,
+ SKILL_FIREMAN = SKILL_FIREMAN_TRAINED,
SKILL_FIREARMS = SKILL_FIREARMS_TRAINED,
SKILL_MELEE_WEAPONS = SKILL_MELEE_TRAINED,
SKILL_VEHICLE = SKILL_VEHICLE_DEFAULT,
@@ -178,6 +182,7 @@ UNITED PROGRESSIVE PEOPLES
SKILL_ENDURANCE = SKILL_ENDURANCE_TRAINED,
SKILL_FIREARMS = SKILL_FIREARMS_TRAINED,
SKILL_CQC = SKILL_CQC_TRAINED,
+ SKILL_FIREMAN = SKILL_FIREMAN_TRAINED,
SKILL_MELEE_WEAPONS = SKILL_MELEE_TRAINED,
SKILL_VEHICLE = SKILL_VEHICLE_DEFAULT,
SKILL_JTAC = SKILL_JTAC_TRAINED,
@@ -197,6 +202,7 @@ UNITED PROGRESSIVE PEOPLES
SKILL_FIREARMS = SKILL_FIREARMS_TRAINED,
SKILL_MELEE_WEAPONS = SKILL_MELEE_TRAINED,
SKILL_CQC = SKILL_CQC_TRAINED,
+ SKILL_FIREMAN = SKILL_FIREMAN_TRAINED,
SKILL_VEHICLE = SKILL_VEHICLE_LARGE,
)
@@ -209,6 +215,7 @@ UNITED PROGRESSIVE PEOPLES
SKILL_SPEC_WEAPONS = SKILL_SPEC_UPP,
SKILL_FIREARMS = SKILL_FIREARMS_TRAINED,
SKILL_CQC = SKILL_CQC_TRAINED,
+ SKILL_FIREMAN = SKILL_FIREMAN_SKILLED,
SKILL_MELEE_WEAPONS = SKILL_MELEE_TRAINED,
SKILL_LEADERSHIP = SKILL_LEAD_EXPERT,
SKILL_OVERWATCH = SKILL_OVERWATCH_TRAINED,
diff --git a/code/datums/skills/uscm.dm b/code/datums/skills/uscm.dm
index 9c56e7f62a88..f694e8789dcd 100644
--- a/code/datums/skills/uscm.dm
+++ b/code/datums/skills/uscm.dm
@@ -18,6 +18,7 @@ United States Colonial Marines
/datum/skills/combat_medic
name = "Combat Medic"
skills = list(
+ SKILL_FIREMAN = SKILL_FIREMAN_TRAINED,
SKILL_MEDICAL = SKILL_MEDICAL_MEDIC,
SKILL_SURGERY = SKILL_SURGERY_NOVICE,
SKILL_JTAC = SKILL_JTAC_BEGINNER,
@@ -33,6 +34,7 @@ United States Colonial Marines
/datum/skills/combat_engineer
name = "Combat Engineer"
skills = list(
+ SKILL_FIREMAN = SKILL_FIREMAN_TRAINED,
SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
SKILL_VEHICLE = SKILL_VEHICLE_SMALL,
@@ -42,6 +44,7 @@ United States Colonial Marines
/datum/skills/smartgunner
name = "Squad Smartgunner"
skills = list(
+ SKILL_FIREMAN = SKILL_FIREMAN_TRAINED,
SKILL_SPEC_WEAPONS = SKILL_SPEC_SMARTGUN,
SKILL_JTAC = SKILL_JTAC_BEGINNER,
)
@@ -49,6 +52,7 @@ United States Colonial Marines
/datum/skills/specialist
name = "Squad Weapons Specialist"
skills = list(
+ 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.
@@ -61,6 +65,7 @@ United States Colonial Marines
/datum/skills/tl
name = "Fireteam Leader"
skills = list(
+ SKILL_FIREMAN = SKILL_FIREMAN_TRAINED,
SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_ENGI,
SKILL_JTAC = SKILL_JTAC_EXPERT,
@@ -84,6 +89,7 @@ United States Colonial Marines
/datum/skills/intel
name = "Intelligence Officer"
skills = list(
+ SKILL_FIREMAN = SKILL_FIREMAN_TRAINED,
SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
SKILL_LEADERSHIP = SKILL_LEAD_TRAINED,
SKILL_OVERWATCH = SKILL_OVERWATCH_TRAINED,
@@ -103,6 +109,7 @@ MILITARY NONCOMBATANT
/datum/skills/doctor
name = "Doctor"
skills = list(
+ SKILL_FIREMAN = SKILL_FIREMAN_TRAINED,
SKILL_FIREARMS = SKILL_FIREARMS_CIVILIAN,
SKILL_MEDICAL = SKILL_MEDICAL_DOCTOR,
SKILL_SURGERY = SKILL_SURGERY_TRAINED,
@@ -133,6 +140,7 @@ MILITARY NONCOMBATANT
SKILL_POWERLOADER = SKILL_POWERLOADER_MASTER,
SKILL_LEADERSHIP = SKILL_LEAD_TRAINED,
SKILL_OVERWATCH = SKILL_OVERWATCH_TRAINED,
+ SKILL_FIREMAN = SKILL_FIREMAN_TRAINED,
SKILL_MEDICAL = SKILL_MEDICAL_MEDIC,
SKILL_SURGERY = SKILL_SURGERY_NOVICE,
SKILL_JTAC = SKILL_JTAC_TRAINED,
@@ -145,6 +153,7 @@ MILITARY NONCOMBATANT
SKILL_PILOT = SKILL_PILOT_TRAINED,
SKILL_POWERLOADER = SKILL_POWERLOADER_MASTER,
SKILL_LEADERSHIP = SKILL_LEAD_TRAINED,
+ SKILL_FIREMAN = SKILL_FIREMAN_TRAINED,
SKILL_MEDICAL = SKILL_MEDICAL_MEDIC,
SKILL_SURGERY = SKILL_SURGERY_NOVICE,
SKILL_JTAC = SKILL_JTAC_TRAINED,
@@ -187,6 +196,7 @@ MILITARY NONCOMBATANT
/datum/skills/OT
name = "Ordnance Technician"
skills = list(
+ SKILL_FIREMAN = SKILL_FIREMAN_TRAINED,
SKILL_ENGINEER = SKILL_ENGINEER_MASTER,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_MASTER,
SKILL_POWERLOADER = SKILL_POWERLOADER_MASTER,
@@ -195,6 +205,7 @@ MILITARY NONCOMBATANT
/datum/skills/MT
name = "Maintenance Technician"
skills = list(
+ SKILL_FIREMAN = SKILL_FIREMAN_TRAINED,
SKILL_ENGINEER = SKILL_ENGINEER_MASTER,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_MASTER,
SKILL_POWERLOADER = SKILL_POWERLOADER_MASTER,
@@ -206,6 +217,7 @@ MILITARY NONCOMBATANT
skills = list(
SKILL_FIREARMS = SKILL_FIREARMS_EXPERT, // need to hunt food somehow
SKILL_ENGINEER = SKILL_ENGINEER_TRAINED,
+ SKILL_FIREMAN = SKILL_FIREMAN_TRAINED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_TRAINED,
SKILL_DOMESTIC = SKILL_DOMESTIC_MASTER
)
@@ -213,6 +225,7 @@ MILITARY NONCOMBATANT
/datum/skills/CT
name = "Cargo Technician"
skills = list(
+ SKILL_FIREMAN = SKILL_FIREMAN_TRAINED,
SKILL_CONSTRUCTION = SKILL_CONSTRUCTION_TRAINED,
SKILL_POWERLOADER = SKILL_POWERLOADER_MASTER,
)
diff --git a/code/game/camera_manager/camera_manager.dm b/code/game/camera_manager/camera_manager.dm
index 95292830d49b..9f111b0f8ec6 100644
--- a/code/game/camera_manager/camera_manager.dm
+++ b/code/game/camera_manager/camera_manager.dm
@@ -188,9 +188,9 @@
var/cam_location = current
if(isliving(current.loc) || isVehicle(current.loc))
cam_location = current.loc
- else if(istype(current.loc, /obj/item/clothing/head/helmet/marine))
- var/obj/item/clothing/head/helmet/marine/helmet = current.loc
- cam_location = helmet.loc
+ else if(istype(current.loc, /obj/item/clothing))
+ var/obj/item/clothing/clothing = current.loc
+ cam_location = clothing.loc
// If we're not forcing an update for some reason and the cameras are in the same location,
// we don't need to update anything.
diff --git a/code/game/jobs/access.dm b/code/game/jobs/access.dm
index 0d10b06d5fef..94e59cbd93ef 100644
--- a/code/game/jobs/access.dm
+++ b/code/game/jobs/access.dm
@@ -212,6 +212,7 @@
ACCESS_WY_PMC_TL,
ACCESS_WY_ARMORY,
ACCESS_WY_SECRETS,
+ ACCESS_WY_DATABASE,
ACCESS_WY_LEADERSHIP,
ACCESS_WY_SENIOR_LEAD,
) + get_access(ACCESS_LIST_COLONIAL_ALL)
@@ -236,6 +237,7 @@
ACCESS_WY_PMC,
ACCESS_WY_PMC_TL,
ACCESS_WY_ARMORY,
+ ACCESS_WY_DATABASE,
ACCESS_WY_LEADERSHIP,
ACCESS_WY_SENIOR_LEAD,
) + get_access(ACCESS_LIST_COLONIAL_ALL)
@@ -446,6 +448,40 @@
if(ACCESS_ARES_DEBUG)
return "AI Debug"
+/proc/get_region_accesses_wy(code)
+ switch(code)
+ if(0)//Everything
+ return get_access(ACCESS_LIST_WY_ALL)
+ if(1)//Corporate General
+ return list(ACCESS_WY_GENERAL, ACCESS_WY_COLONIAL, ACCESS_WY_EXEC)
+ if(2)//Corporate Security
+ return list(ACCESS_WY_SECURITY, ACCESS_WY_ARMORY)
+ if(3)//Corporate Departments
+ return list(ACCESS_WY_MEDICAL, ACCESS_WY_ENGINEERING, ACCESS_WY_FLIGHT, ACCESS_WY_RESEARCH)
+ if(4)//Corporate Leadership
+ return list(ACCESS_WY_LEADERSHIP, ACCESS_WY_SENIOR_LEAD, ACCESS_WY_SECRETS, ACCESS_WY_DATABASE)
+ if(5)//PMCs
+ return list(ACCESS_WY_PMC, ACCESS_WY_PMC_TL, ACCESS_WY_ARMORY)
+ if(6)//Civilian
+ return get_access(ACCESS_LIST_COLONIAL_ALL)
+
+/proc/get_region_accesses_name_wy(code)
+ switch(code)
+ if(0)
+ return "All"
+ if(1)
+ return "Corporate" // Security
+ if(2)
+ return "Corporate Security" // Medbay
+ if(3)
+ return "Corporate Departments" // Research
+ if(4)
+ return "Corporate Leadership" // Engineering
+ if(5)
+ return "Corporate PMCs" // Command
+ if(6)
+ return "Civilian" // Civilian
+
/proc/get_weyland_access_desc(A)
switch(A)
if(ACCESS_WY_GENERAL)
@@ -463,7 +499,7 @@
if(ACCESS_WY_RESEARCH)
return "Wey-Yu Research"
if(ACCESS_WY_EXEC)
- return "Wey-Yu Corporate"
+ return "Wey-Yu Executive"
if(ACCESS_WY_PMC)
return "Wey-Yu PMC"
if(ACCESS_WY_PMC_TL)
@@ -472,7 +508,23 @@
return "Wey-Yu Armory"
if(ACCESS_WY_SECRETS)
return "Wey-Yu HighSec"
+ if(ACCESS_WY_DATABASE)
+ return "Wey-Yu Database"
if(ACCESS_WY_LEADERSHIP)
return "Wey-Yu Leadership"
if(ACCESS_WY_SENIOR_LEAD)
return "Wey-Yu Senior Leadership"
+ if(ACCESS_CIVILIAN_RESEARCH)
+ return "Civilian Research"
+ if(ACCESS_CIVILIAN_COMMAND)
+ return "Civilian Command"
+ if(ACCESS_CIVILIAN_MEDBAY)
+ return "Civilian Medbay"
+ if(ACCESS_CIVILIAN_LOGISTICS)
+ return "Civilian Logistics"
+ if(ACCESS_CIVILIAN_ENGINEERING)
+ return "Civilian Engineering"
+ if(ACCESS_CIVILIAN_BRIG)
+ return "Civilian Brig"
+ if(ACCESS_CIVILIAN_PUBLIC)
+ return "Civilian"
diff --git a/code/game/jobs/job/special/uscm.dm b/code/game/jobs/job/special/uscm.dm
index 2308c5af2961..751322539f77 100644
--- a/code/game/jobs/job/special/uscm.dm
+++ b/code/game/jobs/job/special/uscm.dm
@@ -1,5 +1,7 @@
/datum/job/special/uscm/colonel
title = JOB_COLONEL
+/datum/job/special/uscm/observer
+ title = JOB_USCM_OBSV
/datum/job/special/uscm/general
title = JOB_GENERAL
/datum/job/special/uscm/acmc
diff --git a/code/game/jobs/job/special/weyland_yutani.dm b/code/game/jobs/job/special/weyland_yutani.dm
new file mode 100644
index 000000000000..d5f47331ca29
--- /dev/null
+++ b/code/game/jobs/job/special/weyland_yutani.dm
@@ -0,0 +1,110 @@
+/datum/job/special/wey_yu
+ supervisors = "Weyland-Yutani Corporate Office"
+ title = "Weyland-Yutani Representative"
+ selection_class = "job_cl"
+ flags_startup_parameters = ROLE_CUSTOM_SPAWN
+ gear_preset = /datum/equipment_preset/wy/trainee
+
+/datum/job/special/wey_yu/corporate/trainee
+ title = JOB_TRAINEE
+ gear_preset = /datum/equipment_preset/wy/trainee
+
+/datum/job/special/wey_yu/corporate/junior_exec
+ title = JOB_JUNIOR_EXECUTIVE
+ gear_preset = /datum/equipment_preset/wy/junior_exec
+
+/datum/job/special/wey_yu/corporate/exec
+ title = JOB_EXECUTIVE
+ gear_preset = /datum/equipment_preset/wy/exec
+
+/datum/job/special/wey_yu/corporate/senior_exec
+ title = JOB_SENIOR_EXECUTIVE
+ gear_preset = /datum/equipment_preset/wy/senior_exec
+
+/datum/job/special/wey_yu/corporate/exec_spec
+ title = JOB_EXECUTIVE_SPECIALIST
+ gear_preset = /datum/equipment_preset/wy/exec_spec
+
+/datum/job/special/wey_yu/corporate/exec_supr
+ title = JOB_EXECUTIVE_SUPERVISOR
+ gear_preset = /datum/equipment_preset/wy/exec_supervisor
+
+/datum/job/special/wey_yu/corporate/assist_man
+ title = JOB_ASSISTANT_MANAGER
+ gear_preset = /datum/equipment_preset/wy/manager/assistant_manager
+
+/datum/job/special/wey_yu/corporate/div_man
+ title = JOB_DIVISION_MANAGER
+ gear_preset = /datum/equipment_preset/wy/manager/division_manager
+ supervisors = "Weyland-Yutani Directorate"
+
+/datum/job/special/wey_yu/corporate/chief_exec
+ title = JOB_CHIEF_EXECUTIVE
+ gear_preset = /datum/equipment_preset/wy/manager/chief_executive
+ supervisors = "Weyland-Yutani Directorate"
+
+/datum/job/special/wey_yu/corporate/director
+ title = JOB_DIRECTOR
+ gear_preset = /datum/equipment_preset/wy/manager/director
+ supervisors = "Weyland-Yutani Directorate"
+
+
+// PMCS //
+/datum/job/special/wey_yu/pmc
+ supervisors = "Weyland-Yutani PMC Dispatch"
+
+/datum/job/special/wey_yu/pmc/standard
+ title = JOB_PMC_STANDARD
+ gear_preset = /datum/equipment_preset/pmc/pmc_standard
+
+/datum/job/special/wey_yu/pmc/medic
+ title = JOB_PMC_MEDIC
+ gear_preset = /datum/equipment_preset/pmc/pmc_medic
+
+/datum/job/special/wey_yu/pmc/engineer
+ title = JOB_PMC_ENGINEER
+ gear_preset = /datum/equipment_preset/pmc/technician
+
+/datum/job/special/wey_yu/pmc/gunner
+ title = JOB_PMC_GUNNER
+ gear_preset = /datum/equipment_preset/pmc/pmc_gunner
+
+/datum/job/special/wey_yu/pmc/sniper
+ title = JOB_PMC_SNIPER
+ gear_preset = /datum/equipment_preset/pmc/pmc_sniper
+
+/datum/job/special/wey_yu/pmc/leader
+ title = JOB_PMC_LEADER
+ gear_preset = /datum/equipment_preset/pmc/pmc_leader
+
+/datum/job/special/wey_yu/pmc/investigator
+ title = JOB_PMC_INVESTIGATOR
+ gear_preset = /datum/equipment_preset/pmc/pmc_med_investigator
+
+/datum/job/special/wey_yu/pmc/lead_invest
+ title = JOB_PMC_LEAD_INVEST
+ gear_preset = /datum/equipment_preset/pmc/pmc_lead_investigator
+
+/datum/job/special/wey_yu/pmc/detainer
+ title = JOB_PMC_DETAINER
+ gear_preset = /datum/equipment_preset/pmc/pmc_detainer
+
+/datum/job/special/wey_yu/pmc/crewman
+ title = JOB_PMC_CREWMAN
+ gear_preset = /datum/equipment_preset/pmc/pmc_crewman
+
+/datum/job/special/wey_yu/pmc/doctor
+ title = JOB_PMC_DOCTOR
+ gear_preset = /datum/equipment_preset/pmc/doctor
+
+/datum/job/special/wey_yu/pmc/handler
+ title = JOB_PMC_XENO_HANDLER
+ gear_preset = /datum/equipment_preset/pmc/xeno_handler
+
+/datum/job/special/wey_yu/pmc/synth
+ title = JOB_PMC_SYNTH
+ gear_preset = /datum/equipment_preset/pmc/synth
+
+/datum/job/special/wey_yu/pmc/director
+ title = JOB_PMC_DIRECTOR
+ gear_preset = /datum/equipment_preset/pmc/director
diff --git a/code/game/machinery/ARES/ARES_interface.dm b/code/game/machinery/ARES/ARES_interface.dm
index 04547d079664..02695e2e6d4b 100644
--- a/code/game/machinery/ARES/ARES_interface.dm
+++ b/code/game/machinery/ARES/ARES_interface.dm
@@ -24,6 +24,8 @@
/// The datacore storing all the information.
var/datum/ares_datacore/datacore
+ COOLDOWN_DECLARE(printer_cooldown)
+
/obj/structure/machinery/computer/ares_console/proc/link_systems(datum/ares_link/new_link = GLOB.ares_link, override)
if(link && !override)
return FALSE
@@ -94,6 +96,8 @@
data["nuketimelock"] = NUCLEAR_TIME_LOCK
data["nuke_available"] = datacore.nuke_available
+ data["printer_cooldown"] = !COOLDOWN_FINISHED(src, printer_cooldown)
+
var/list/logged_announcements = list()
for(var/datum/ares_record/announcement/broadcast as anything in datacore.records_announcement)
var/list/current_broadcast = list()
@@ -337,6 +341,72 @@
last_menu = current_menu
current_menu = "core_security"
+ // -- Print ASRS Audit Log -- //
+ if("print_req")
+ playsound = FALSE
+ if(!COOLDOWN_FINISHED(src, printer_cooldown))
+ playsound(src, 'sound/machines/buzz-two.ogg', 15, 1)
+ return FALSE
+ if(!length(datacore.records_asrs))
+ to_chat(user, SPAN_WARNING("There are no records to print!"))
+ playsound(src, 'sound/machines/buzz-two.ogg', 15, 1)
+ return FALSE
+ COOLDOWN_START(src, printer_cooldown, 20 SECONDS)
+ playsound(src, 'sound/machines/fax.ogg', 15, 1)
+ sleep(3.4 SECONDS)
+ var/contents = {"
+
\
+
+
Printed By: [last_login]
+
Print Time: [worldtime2text()]
+
+
+
+
+
+ Time |
+ User |
+ Source |
+ Order |
+
+
+
+ "}
+
+ for(var/datum/ares_record/requisition_log/req_order as anything in datacore.records_asrs)
+
+ contents += {"
+
+ [req_order.time] |
+ [req_order.user] |
+ [req_order.title] |
+ [req_order.details] |
+
+ "}
+
+ contents += "
"
+
+ var/obj/item/paper/log = new(loc)
+ log.name = "ASRS Audit Log"
+ log.info += contents
+ log.icon_state = "paper_uscm_words"
+ visible_message(SPAN_NOTICE("[src] prints out a paper."))
+
// -- Delete Button -- //
if("delete_record")
var/datum/ares_record/record = locate(params["record"])
diff --git a/code/game/machinery/rechargestation.dm b/code/game/machinery/rechargestation.dm
index 4b5e02dc8b8b..2e98eb7e88e9 100644
--- a/code/game/machinery/rechargestation.dm
+++ b/code/game/machinery/rechargestation.dm
@@ -73,9 +73,9 @@
var/charge_diff = max_internal_charge - current_internal_charge // OK we have charge differences
charge_diff = charge_diff / CELLRATE // Deconvert from Charge to Joules
if(chargemode) // Decide if use passive or active power
- charge_diff = between(0, charge_diff, charging_cap_active) // Trim the values to limits
+ charge_diff = clamp(charge_diff, 0, charging_cap_active) // Trim the values to limits
else // We should have load for this tick in Watts
- charge_diff = between(0, charge_diff, charging_cap_passive)
+ charge_diff = clamp(charge_diff, 0, charging_cap_passive)
charge_diff += 50 // 50W for circuitry
diff --git a/code/game/machinery/spaceheater.dm b/code/game/machinery/spaceheater.dm
index b4d5b7dece20..64c0023e6a09 100644
--- a/code/game/machinery/spaceheater.dm
+++ b/code/game/machinery/spaceheater.dm
@@ -127,7 +127,7 @@
var/value = text2num(href_list["val"])
// limit to 0-90 degC
- set_temperature = dd_range(T0C, T0C + 90, set_temperature + value)
+ set_temperature = clamp(set_temperature + value, T0C, T0C + 90)
if("cellremove")
if(open && cell && !usr.get_active_hand())
diff --git a/code/game/machinery/vending/vendor_types/wo_vendors.dm b/code/game/machinery/vending/vendor_types/wo_vendors.dm
index 4cb6c689ef35..1d6ad60bb357 100644
--- a/code/game/machinery/vending/vendor_types/wo_vendors.dm
+++ b/code/game/machinery/vending/vendor_types/wo_vendors.dm
@@ -8,57 +8,108 @@
/obj/structure/machinery/cm_vending/sorted/uniform_supply/squad_prep/wo/populate_product_list(scale)
listed_products = list(
- list("UNIFORM", -1, null, null),
- list("Lightweight IMP Backpack", 10, /obj/item/storage/backpack/marine, VENDOR_ITEM_REGULAR),
- list("M276 Ammo Load Rig", 10, /obj/item/storage/belt/marine, VENDOR_ITEM_REGULAR),
- list("M276 General Pistol Holster Rig", 10, /obj/item/storage/belt/gun/m4a3, VENDOR_ITEM_REGULAR),
- list("M276 M39 Holster Rig", 10, /obj/item/storage/belt/gun/m39, VENDOR_ITEM_REGULAR),
- list("M276 M44 Holster Rig", 10, /obj/item/storage/belt/gun/m44, VENDOR_ITEM_REGULAR),
- list("M276 M82F Holster Rig", 10, /obj/item/storage/belt/gun/flaregun, VENDOR_ITEM_REGULAR),
- list("M276 Shotgun Shell Loading Rig", 10, /obj/item/storage/belt/shotgun, VENDOR_ITEM_REGULAR),
- list("Marine Combat Boots", 20, /obj/item/clothing/shoes/marine, VENDOR_ITEM_REGULAR),
- list("USCM Satchel", 10, /obj/item/storage/backpack/marine/satchel, VENDOR_ITEM_REGULAR),
- list("USCM Uniform", 20, /obj/item/clothing/under/marine, VENDOR_ITEM_REGULAR),
- list("Technician Welder-Satchel", 10, /obj/item/storage/backpack/marine/engineerpack/satchel, VENDOR_ITEM_REGULAR),
-
- list("POUCHES", -1, null, null),
- list("Construction Pouch", floor(scale * 2), /obj/item/storage/pouch/construction, VENDOR_ITEM_REGULAR),
- list("Explosive Pouch", floor(scale * 2), /obj/item/storage/pouch/explosive, VENDOR_ITEM_REGULAR),
- list("First-Aid Pouch (Full)", floor(scale * 5), /obj/item/storage/pouch/firstaid/full, VENDOR_ITEM_REGULAR),
- list("First Responder Pouch", floor(scale * 2), /obj/item/storage/pouch/first_responder, VENDOR_ITEM_REGULAR),
- list("Flare Pouch", floor(scale * 5), /obj/item/storage/pouch/flare/full, VENDOR_ITEM_REGULAR),
- list("Large Pistol Magazine Pouch", floor(scale * 3), /obj/item/storage/pouch/magazine/pistol/large, VENDOR_ITEM_REGULAR),
- list("Magazine Pouch", floor(scale * 5), /obj/item/storage/pouch/magazine, VENDOR_ITEM_REGULAR),
- list("Medical Pouch", floor(scale * 2), /obj/item/storage/pouch/medical, VENDOR_ITEM_REGULAR),
- list("Medium General Pouch", floor(scale * 2), /obj/item/storage/pouch/general/medium, VENDOR_ITEM_REGULAR),
- list("Medkit Pouch", floor(scale * 2), /obj/item/storage/pouch/medkit, VENDOR_ITEM_REGULAR),
- list("Sidearm Pouch", floor(scale * 15), /obj/item/storage/pouch/pistol, VENDOR_ITEM_REGULAR),
- list("Syringe Pouch", floor(scale * 2), /obj/item/storage/pouch/syringe, VENDOR_ITEM_REGULAR),
- list("Tools Pouch", floor(scale * 2), /obj/item/storage/pouch/tools, VENDOR_ITEM_REGULAR),
+ list("STANDARD EQUIPMENT", -1, null, null, null),
+ list("Marine Combat Boots", floor(scale * 10), /obj/item/clothing/shoes/marine, VENDOR_ITEM_REGULAR),
+ list("Marine Brown Combat Boots", floor(scale * 2), /obj/item/clothing/shoes/marine/brown, VENDOR_ITEM_REGULAR),
+ list("USCM Uniform", floor(scale * 10), /obj/item/clothing/under/marine, VENDOR_ITEM_REGULAR),
+ list("Marine Combat Gloves", floor(scale * 10), /obj/item/clothing/gloves/marine, VENDOR_ITEM_REGULAR),
+ list("Marine Brown Combat Gloves", floor(scale * 2), /obj/item/clothing/gloves/marine/brown, VENDOR_ITEM_REGULAR),
+ list("Marine Black Combat Gloves", floor(scale * 2), /obj/item/clothing/gloves/marine/black, VENDOR_ITEM_REGULAR),
+ list("M10 Pattern Marine Helmet", floor(scale * 10), /obj/item/clothing/head/helmet/marine, VENDOR_ITEM_REGULAR),
list("RADIO HEADSETS", -1, null, null),
- list("Marine Alpha Radio Headset", 10, /obj/item/device/radio/headset/almayer/marine/alpha, VENDOR_ITEM_REGULAR),
- list("Marine Bravo Radio Headset", 10, /obj/item/device/radio/headset/almayer/marine/bravo, VENDOR_ITEM_REGULAR),
- list("Marine Charlie Radio Headset", 10, /obj/item/device/radio/headset/almayer/marine/charlie, VENDOR_ITEM_REGULAR),
- list("Marine Delta Radio Headset", 10, /obj/item/device/radio/headset/almayer/marine/delta, VENDOR_ITEM_REGULAR),
-
- list("GLOVES", -1, null, null),
- list("Marine Combat Gloves", 40, /obj/item/clothing/gloves/marine, VENDOR_ITEM_REGULAR),
+ list("Marine Alpha Radio Headset", floor(scale * 5), /obj/item/device/radio/headset/almayer/marine/alpha, VENDOR_ITEM_REGULAR),
+ list("Marine Bravo Radio Headset", floor(scale * 5), /obj/item/device/radio/headset/almayer/marine/bravo, VENDOR_ITEM_REGULAR),
+ list("Marine Charlie Radio Headset", floor(scale * 5), /obj/item/device/radio/headset/almayer/marine/charlie, VENDOR_ITEM_REGULAR),
+ list("Marine Delta Radio Headset", floor(scale * 5), /obj/item/device/radio/headset/almayer/marine/delta, VENDOR_ITEM_REGULAR),
+ list("Marine Radio Headset", floor(scale * 5), /obj/item/device/radio/headset/almayer, VENDOR_ITEM_REGULAR),
+
+ list("WEBBINGS", -1, null, null),
+ list("Brown Webbing Vest", floor(scale * 1), /obj/item/clothing/accessory/storage/black_vest/brown_vest, VENDOR_ITEM_REGULAR),
+ list("Black Webbing Vest", floor(scale * 1), /obj/item/clothing/accessory/storage/black_vest, VENDOR_ITEM_REGULAR),
+ list("Webbing", floor(scale * 2), /obj/item/clothing/accessory/storage/webbing, VENDOR_ITEM_REGULAR),
+ list("Drop Pouch", floor(scale * 1), /obj/item/clothing/accessory/storage/droppouch, VENDOR_ITEM_REGULAR),
+ list("Shoulder Holster", floor(scale * 1), /obj/item/clothing/accessory/storage/holster, VENDOR_ITEM_REGULAR),
list("ARMOR", -1, null, null),
- list("M10 Pattern Marine Helmet", 20, /obj/item/clothing/head/helmet/marine, VENDOR_ITEM_REGULAR),
- list("M3 Pattern Carrier Marine Armor", 20, /obj/item/clothing/suit/storage/marine/medium/carrier, VENDOR_ITEM_REGULAR),
- list("M3 Pattern Padded Marine Armor", 20, /obj/item/clothing/suit/storage/marine/medium/padded, VENDOR_ITEM_REGULAR),
- list("M3 Pattern Padless Marine Armor", 20, /obj/item/clothing/suit/storage/marine/medium/padless, VENDOR_ITEM_REGULAR),
- list("M3 Pattern Ridged Marine Armor", 20, /obj/item/clothing/suit/storage/marine/medium/padless_lines, VENDOR_ITEM_REGULAR),
- list("M3 Pattern Skull Marine Armor", 20, /obj/item/clothing/suit/storage/marine/medium/skull, VENDOR_ITEM_REGULAR),
- list("M3 Pattern Smooth Marine Armor", 20, /obj/item/clothing/suit/storage/marine/medium/smooth, VENDOR_ITEM_REGULAR),
- list("M3-EOD Pattern Heavy Armor", 10, /obj/item/clothing/suit/storage/marine/heavy, VENDOR_ITEM_REGULAR),
- list("M3-L Pattern Light Armor", 10, /obj/item/clothing/suit/storage/marine/light, VENDOR_ITEM_REGULAR),
-
- list("MASKS", -1, null, null, null),
- list("Gas Mask", 20, /obj/item/clothing/mask/gas, VENDOR_ITEM_REGULAR),
- list("Heat Absorbent Coif", 10, /obj/item/clothing/mask/rebreather/scarf, VENDOR_ITEM_REGULAR),
+ list("M3 Pattern Carrier Marine Armor", floor(scale * 10), /obj/item/clothing/suit/storage/marine/medium/carrier, VENDOR_ITEM_REGULAR),
+ list("M3 Pattern Padded Marine Armor", floor(scale * 10), /obj/item/clothing/suit/storage/marine/medium/padded, VENDOR_ITEM_REGULAR),
+ list("M3 Pattern Padless Marine Armor", floor(scale * 10), /obj/item/clothing/suit/storage/marine/medium/padless, VENDOR_ITEM_REGULAR),
+ list("M3 Pattern Ridged Marine Armor", floor(scale * 10), /obj/item/clothing/suit/storage/marine/medium/padless_lines, VENDOR_ITEM_REGULAR),
+ list("M3 Pattern Skull Marine Armor", floor(scale * 10), /obj/item/clothing/suit/storage/marine/medium/skull, VENDOR_ITEM_REGULAR),
+ list("M3 Pattern Smooth Marine Armor", floor(scale * 10), /obj/item/clothing/suit/storage/marine/medium/smooth, VENDOR_ITEM_REGULAR),
+ list("M3-EOD Pattern Heavy Armor", floor(scale * 5), /obj/item/clothing/suit/storage/marine/heavy, VENDOR_ITEM_REGULAR),
+ list("M3-L Pattern Light Armor", floor(scale * 5), /obj/item/clothing/suit/storage/marine/light, VENDOR_ITEM_REGULAR),
+
+ list("BACKPACK", -1, null, null, null),
+ list("Lightweight IMP Backpack", floor(scale * 10), /obj/item/storage/backpack/marine, VENDOR_ITEM_REGULAR),
+ list("Technician Backpack", floor(scale * 10), /obj/item/storage/backpack/marine/tech, VENDOR_ITEM_REGULAR),
+ list("Medical Backpack", floor(scale * 10), /obj/item/storage/backpack/marine/medic, VENDOR_ITEM_REGULAR),
+ list("USCM Satchel", floor(scale * 10), /obj/item/storage/backpack/marine/satchel, VENDOR_ITEM_REGULAR),
+ list("USCM Chestrig", floor(scale * 10), /obj/item/storage/backpack/marine/satchel/chestrig, VENDOR_ITEM_REGULAR),
+ list("USCM Technical Satchel", floor(scale * 10), /obj/item/storage/backpack/marine/satchel/tech, VENDOR_ITEM_REGULAR),
+ list("USCM Technical Chestrig", floor(scale * 10), /obj/item/storage/backpack/marine/engineerpack/welder_chestrig, VENDOR_ITEM_REGULAR),
+ list("Medical Satchel", floor(scale * 10), /obj/item/storage/backpack/marine/satchel/medic, VENDOR_ITEM_REGULAR),
+ list("Shotgun Scabbard", floor(scale * 10), /obj/item/storage/large_holster/m37, VENDOR_ITEM_REGULAR),
+
+ list("RESTRICTED BACKPACKS", -1, null, null),
+ list("USCM Technician Welderpack", floor(scale * 1), /obj/item/storage/backpack/marine/engineerpack, VENDOR_ITEM_REGULAR),
+ list("Technician Welder-Satchel", floor(scale * 2), /obj/item/storage/backpack/marine/engineerpack/satchel, VENDOR_ITEM_REGULAR),
+
+ list("BELTS", -1, null, null),
+ list("M276 Pattern Ammo Load Rig", floor(scale * 10), /obj/item/storage/belt/marine, VENDOR_ITEM_REGULAR),
+ list("M276 Pattern M40 Grenade Rig", floor(scale * 5), /obj/item/storage/belt/grenade, VENDOR_ITEM_REGULAR),
+ list("M276 Pattern Shotgun Shell Loading Rig", floor(scale * 10), /obj/item/storage/belt/shotgun, VENDOR_ITEM_REGULAR),
+ 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 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),
+
+ list("POUCHES", -1, null, null, null),
+ list("Bayonet Sheath (Full)",floor(scale * 10), /obj/item/storage/pouch/bayonet, VENDOR_ITEM_REGULAR),
+ list("First-Aid Pouch (Splints, Gauze, Ointment)", floor(scale * 10), /obj/item/storage/pouch/firstaid/full/alternate, VENDOR_ITEM_REGULAR),
+ list("First-Aid Pouch (Pill Packets)", floor(scale * 10), /obj/item/storage/pouch/firstaid/full/pills, VENDOR_ITEM_REGULAR),
+ list("Flare Pouch (Full)", floor(scale * 10), /obj/item/storage/pouch/flare/full, VENDOR_ITEM_REGULAR),
+ list("Small Document Pouch", floor(scale * 10), /obj/item/storage/pouch/document/small, VENDOR_ITEM_REGULAR),
+ list("Magazine Pouch", floor(scale * 10), /obj/item/storage/pouch/magazine, VENDOR_ITEM_REGULAR),
+ list("Shotgun Shell Pouch", floor(scale * 10), /obj/item/storage/pouch/shotgun, VENDOR_ITEM_REGULAR),
+ list("Medium General Pouch", floor(scale * 10), /obj/item/storage/pouch/general/medium, VENDOR_ITEM_REGULAR),
+ list("Pistol Magazine Pouch", floor(scale * 10), /obj/item/storage/pouch/magazine/pistol, VENDOR_ITEM_REGULAR),
+ list("Pistol Pouch", floor(scale * 10), /obj/item/storage/pouch/pistol, VENDOR_ITEM_REGULAR),
+
+ list("RESTRICTED POUCHES", -1, null, null, null),
+ list("Construction Pouch", floor(scale * 1), /obj/item/storage/pouch/construction, VENDOR_ITEM_REGULAR),
+ list("Explosive Pouch", floor(scale * 1), /obj/item/storage/pouch/explosive, VENDOR_ITEM_REGULAR),
+ list("First Responder Pouch (Empty)", floor(scale * 2), /obj/item/storage/pouch/first_responder, VENDOR_ITEM_REGULAR),
+ list("Large Pistol Magazine Pouch", floor(scale * 2), /obj/item/storage/pouch/magazine/pistol/large, VENDOR_ITEM_REGULAR),
+ list("Tools Pouch", floor(scale * 1), /obj/item/storage/pouch/tools, VENDOR_ITEM_REGULAR),
+ list("Sling Pouch", floor(scale * 1), /obj/item/storage/pouch/sling, VENDOR_ITEM_REGULAR),
+
+ list("MASK", -1, null, null, null),
+ list("Gas Mask", floor(scale * 10), /obj/item/clothing/mask/gas, VENDOR_ITEM_REGULAR),
+ list("Heat Absorbent Coif", floor(scale * 5), /obj/item/clothing/mask/rebreather/scarf, VENDOR_ITEM_REGULAR),
+ list("Rebreather", floor(scale * 5), /obj/item/clothing/mask/rebreather, MARINE_CAN_BUY_MASK, VENDOR_ITEM_REGULAR),
+
+ list("MISCELLANEOUS", -1, null, null, null),
+ list("Ballistic goggles", floor(scale * 5), /obj/item/clothing/glasses/mgoggles, VENDOR_ITEM_REGULAR),
+ list("M1A1 Ballistic goggles", floor(scale * 5), /obj/item/clothing/glasses/mgoggles/v2, VENDOR_ITEM_REGULAR),
+ list("Prescription ballistic goggles", floor(scale * 5), /obj/item/clothing/glasses/mgoggles/prescription, VENDOR_ITEM_REGULAR),
+ list("Marine RPG glasses", floor(scale * 5), /obj/item/clothing/glasses/regular, VENDOR_ITEM_REGULAR),
+ list("M5 Integrated Gas Mask", floor(scale * 5), /obj/item/prop/helmetgarb/helmet_gasmask, VENDOR_ITEM_REGULAR),
+ list("M10 Helmet Netting", floor(scale * 5), /obj/item/prop/helmetgarb/netting, VENDOR_ITEM_REGULAR),
+ list("M10 Helmet Rain Cover", floor(scale * 5), /obj/item/prop/helmetgarb/raincover, VENDOR_ITEM_REGULAR),
+ list("Firearm Lubricant", floor(scale * 10), /obj/item/prop/helmetgarb/gunoil, VENDOR_ITEM_REGULAR),
+ list("USCM Flair", floor(scale * 10), /obj/item/prop/helmetgarb/flair_uscm, VENDOR_ITEM_REGULAR),
+ list("Falling Falcons Shoulder Patch", floor(scale * 10), /obj/item/clothing/accessory/patch/falcon, VENDOR_ITEM_REGULAR),
+ list("USCM Shoulder Patch", floor(scale * 10), /obj/item/clothing/accessory/patch, VENDOR_ITEM_REGULAR),
+ list("Bedroll", floor(scale * 10), /obj/item/roller/bedroll, VENDOR_ITEM_REGULAR),
+
+ list("OPTICS", -1, null, null, null),
+ list("Advanced Medical Optic (CORPSMAN ONLY)", floor(scale * 2), /obj/item/device/helmet_visor/medical/advanced, VENDOR_ITEM_REGULAR),
+ list("Squad Optic", floor(scale * 10), /obj/item/device/helmet_visor, VENDOR_ITEM_REGULAR),
)
//------------WEAPON RACKS---------------
@@ -106,7 +157,8 @@
list("UTILITIES", -1, null, null),
list("M5 Bayonet", floor(scale * 25), /obj/item/attachable/bayonet, VENDOR_ITEM_REGULAR),
list("M11 Throwing Knife", floor(scale * 10), /obj/item/weapon/throwing_knife, VENDOR_ITEM_REGULAR),
- list("M94 Marking Flare Pack", floor(scale * 10), /obj/item/storage/box/m94, VENDOR_ITEM_REGULAR)
+ list("M94 Marking Flare Pack", floor(scale * 10), /obj/item/storage/box/m94, VENDOR_ITEM_REGULAR),
+ list("Plastic Explosive", floor(scale * 2), /obj/item/explosive/plastic, VENDOR_ITEM_REGULAR),
)
//------------REQ AMMUNITION VENDOR---------------
diff --git a/code/game/objects/items/devices/radio/headset.dm b/code/game/objects/items/devices/radio/headset.dm
index 00f0ad16220c..52f8bd76e894 100644
--- a/code/game/objects/items/devices/radio/headset.dm
+++ b/code/game/objects/items/devices/radio/headset.dm
@@ -417,8 +417,14 @@
var/obj/item/card/id/id_card = wearer.wear_id?.GetID()
if(!istype(id_card))
return
- if(!(id_card.rank in list(JOB_SO, JOB_XO, JOB_SQUAD_LEADER)))
- to_chat(wearer, SPAN_WARNING("Only Staff Officers, Executive Officers and Squad Leaders are permitted to give medal recommendations!"))
+
+ var/datum/paygrade/paygrade_actual = GLOB.paygrades[id_card.paygrade]
+ if(!paygrade_actual)
+ return
+ if(!istype(paygrade_actual, /datum/paygrade/marine)) //We only want marines to be able to recommend for medals
+ return
+ if(paygrade_actual.ranking < 3) //E1 starts at 0, so anyone above Corporal (ranking = 3) can recommend for medals
+ to_chat(wearer, SPAN_WARNING("Only officers or NCO's (ME4+) can recommend medals!"))
return
if(add_medal_recommendation(usr))
to_chat(usr, SPAN_NOTICE("Recommendation successfully submitted."))
diff --git a/code/game/supplyshuttle.dm b/code/game/supplyshuttle.dm
index d6b637366f55..f5ae552ea1df 100644
--- a/code/game/supplyshuttle.dm
+++ b/code/game/supplyshuttle.dm
@@ -1069,7 +1069,7 @@ GLOBAL_DATUM_INIT(supply_controller, /datum/controller/supply, new())
temp = "Thank you for your order.
"
temp += "
Back Main Menu"
supply_order.approvedby = usr.name
- msg_admin_niche("[usr] confirmed supply order of [supply_pack.name].")
+ msg_admin_niche("[key_name(usr)] confirmed supply order of [supply_pack.name].")
if(GLOB.supply_controller.black_market_heat == 100)
GLOB.supply_controller.black_market_investigation()
var/pack_source = "Cargo Hold"
diff --git a/code/modules/admin/topic/topic.dm b/code/modules/admin/topic/topic.dm
index ecef2627ed3c..000d94e70866 100644
--- a/code/modules/admin/topic/topic.dm
+++ b/code/modules/admin/topic/topic.dm
@@ -1950,7 +1950,7 @@
alert("Removed:\n" + jointext(removed_paths, "\n"))
var/list/offset = splittext(href_list["offset"],",")
- var/number = dd_range(1, 100, text2num(href_list["object_count"]))
+ var/number = clamp(text2num(href_list["object_count"]), 1, 100)
var/X = offset.len > 0 ? text2num(offset[1]) : 0
var/Y = offset.len > 1 ? text2num(offset[2]) : 0
var/Z = offset.len > 2 ? text2num(offset[3]) : 0
diff --git a/code/modules/admin/topic/topic_events.dm b/code/modules/admin/topic/topic_events.dm
index 7d7c5ed89057..264b91d982de 100644
--- a/code/modules/admin/topic/topic_events.dm
+++ b/code/modules/admin/topic/topic_events.dm
@@ -165,8 +165,8 @@
alert("Select fewer paths, (max 1)")
return
- var/humans_to_spawn = dd_range(1, 100, text2num(href_list["object_count"]))
- var/range_to_spawn_on = dd_range(0, 10, text2num(href_list["object_range"]))
+ var/humans_to_spawn = clamp(text2num(href_list["object_count"]), 1, 100)
+ var/range_to_spawn_on = clamp(text2num(href_list["object_range"]), 0, 10)
var/free_the_humans = FALSE
var/offer_as_ert = FALSE
@@ -299,8 +299,8 @@
alert("Select fewer xeno paths, (max 1)")
return
- var/xenos_to_spawn = dd_range(1, 100, text2num(href_list["object_count"]))
- var/range_to_spawn_on = dd_range(0, 10, text2num(href_list["object_range"]))
+ var/xenos_to_spawn = clamp(text2num(href_list["object_count"]), 1, 100)
+ var/range_to_spawn_on = clamp(text2num(href_list["object_range"]), 0, 10)
var/free_the_xenos = FALSE
var/offer_as_ert = FALSE
diff --git a/code/modules/admin/verbs/mooc.dm b/code/modules/admin/verbs/mooc.dm
index 22d9d2530924..dc9f39205566 100644
--- a/code/modules/admin/verbs/mooc.dm
+++ b/code/modules/admin/verbs/mooc.dm
@@ -20,9 +20,8 @@
if(M.client && (!M.client.admin_holder || !(M.client.admin_holder.rights & R_MOD))) // Send to marines who are non-staff
to_chat_spaced(M, margin_top = 0.5, margin_bottom = 0.5, html = SPAN_MOOC("MOOC: [src.key]([src.admin_holder.rank]): [msg]"))
- var/list/synthetics = getsynths()
- for(var/mob/M in synthetics)
- if(M.client && !M.client.admin_holder)
+ for(var/mob/M in GLOB.human_mob_list)
+ if(issynth(M) && M.client && !M.client.admin_holder)
to_chat_spaced(M, margin_top = 0.5, margin_bottom = 0.5, html = SPAN_MOOC("MOOC: [src.key]([src.admin_holder.rank]): [msg]"))
for(var/mob/dead/observer/M in GLOB.observer_list)
diff --git a/code/modules/clothing/clothing_accessories.dm b/code/modules/clothing/clothing_accessories.dm
index a07e83db7381..9c253fcb0371 100644
--- a/code/modules/clothing/clothing_accessories.dm
+++ b/code/modules/clothing/clothing_accessories.dm
@@ -118,34 +118,52 @@
A.on_removed(user, src)
LAZYREMOVE(accessories, A)
+
+ var/any_removable = FALSE
+ for(var/obj/item/clothing/accessory/accessory in accessories)
+ if(accessory.removable)
+ any_removable = TRUE
+ break
+ if(!any_removable)
+ verbs -= /obj/item/clothing/proc/removetie_verb
+
update_clothing_icon()
/obj/item/clothing/proc/removetie_verb()
set name = "Remove Accessory"
set category = "Object"
set src in usr
- if(!isliving(usr))
+
+ remove_accessory(usr, pick_accessory_to_remove(usr, usr))
+
+/obj/item/clothing/proc/pick_accessory_to_remove(mob/user, mob/targetmob)
+ if(!isliving(user))
return
- if(usr.stat)
+ if(user.stat)
return
if(!LAZYLEN(accessories))
return
- var/obj/item/clothing/accessory/A
+ var/obj/item/clothing/accessory/accessory
var/list/removables = list()
+ var/list/choice_to_accessory = list()
for(var/obj/item/clothing/accessory/ass in accessories)
- if(ass.removable)
- removables |= ass
- if(LAZYLEN(accessories) > 1)
- A = tgui_input_list(usr, "Select an accessory to remove from [src]", "Remove accessory", removables)
+ if(!ass.removable)
+ continue
+ var/capitalized_name = capitalize_first_letters(ass.name)
+ removables[capitalized_name] = image(icon = ass.icon, icon_state = ass.icon_state)
+ choice_to_accessory[capitalized_name] = ass
+
+ if(LAZYLEN(removables) > 1)
+ var/use_radials = user.client.prefs?.no_radials_preference ? FALSE : TRUE
+ var/choice = use_radials ? show_radial_menu(user, targetmob, removables, require_near = FALSE) : tgui_input_list(user, "Select an accessory to remove from [src]", "Remove accessory", removables)
+ accessory = choice_to_accessory[choice]
else
- A = LAZYACCESS(accessories, 1)
- if(!usr.Adjacent(src))
- to_chat(usr, SPAN_WARNING("You're too far away!"))
+ accessory = choice_to_accessory[removables[1]]
+ if(!user.Adjacent(src))
+ to_chat(user, SPAN_WARNING("You're too far away!"))
return
- src.remove_accessory(usr,A)
- removables -= A
- if(!removables.len)
- verbs -= /obj/item/clothing/proc/removetie_verb
+
+ return accessory
/obj/item/clothing/emp_act(severity)
. = ..()
diff --git a/code/modules/clothing/under/marine_uniform.dm b/code/modules/clothing/under/marine_uniform.dm
index 92eeea638fae..c7353840d439 100644
--- a/code/modules/clothing/under/marine_uniform.dm
+++ b/code/modules/clothing/under/marine_uniform.dm
@@ -998,6 +998,31 @@
desc = "A cheap uniform made for Synthetic labor. Tomorrow, Together."
icon_state = "working_joe"
worn_state = "working_joe"
+ flags_item = NO_CRYO_STORE
+ var/obj/structure/machinery/camera/camera
+
+/obj/item/clothing/under/rank/synthetic/joe/Initialize()
+ . = ..()
+ camera = new /obj/structure/machinery/camera/autoname/almayer/containment/ares(src)
+
+/obj/item/clothing/under/rank/synthetic/joe/Destroy()
+ QDEL_NULL(camera)
+ return ..()
+
+/obj/item/clothing/under/rank/synthetic/joe/equipped(mob/living/carbon/human/mob, slot)
+ if(camera)
+ camera.c_tag = mob.name
+ ..()
+
+/obj/item/clothing/under/rank/synthetic/joe/dropped(mob/living/carbon/human/mob)
+ if(camera)
+ camera.c_tag = "3RR0R"
+ ..()
+
+/obj/item/clothing/under/rank/synthetic/joe/get_examine_text(mob/user)
+ . = ..()
+ if(camera)
+ . += SPAN_ORANGE("There is a small camera mounted to the front.")
/obj/item/clothing/under/rank/synthetic/joe/engi
name = "\improper Working Joe Hazardous Uniform"
diff --git a/code/modules/cm_marines/marines_consoles.dm b/code/modules/cm_marines/marines_consoles.dm
index e02bb930d416..6d1aba4aca70 100644
--- a/code/modules/cm_marines/marines_consoles.dm
+++ b/code/modules/cm_marines/marines_consoles.dm
@@ -8,6 +8,14 @@
#define CARDCON_DEPARTMENT_ENGINEERING "Engineering"
#define CARDCON_DEPARTMENT_COMMAND "Command"
+// Weyland Yutani Categories
+#define CARDCON_DEPARTMENT_CORP_LEAD "Corporate Leadership"
+#define CARDCON_DEPARTMENT_CORP_SECURITY "Corporate Security"
+#define CARDCON_DEPARTMENT_CORPORATE "Corporate Employees"
+#define CARDCON_DEPARTMENT_PMC "PMC Combat Ops"
+#define CARDCON_DEPARTMENT_INSPECTION "PMC Investigations"
+#define CARDCON_DEPARTMENT_SPECIALTY "PMC Specialists"
+
/obj/structure/machinery/computer/card
name = "Identification Computer"
desc = "Terminal for programming USCM employee ID card access."
@@ -20,9 +28,14 @@
var/list/factions = list(FACTION_MARINE)
var/printing
- var/is_centcom = FALSE
+ var/is_weyland = FALSE
var/authenticated = FALSE
+/obj/structure/machinery/computer/card/wey_yu
+ is_weyland = TRUE
+ req_access = list(ACCESS_WY_DATABASE)
+ factions = list(FACTION_WY, FACTION_PMC)
+
/obj/structure/machinery/computer/card/proc/authenticate(mob/user, obj/item/card/id/id_card)
if(!id_card)
visible_message("[SPAN_BOLD("[src]")] states, \"AUTH ERROR: Authority confirmation card is missing!\"")
@@ -192,7 +205,7 @@
target_id_card.assignment = custom_name
else
var/list/new_access = list()
- if(is_centcom)
+ if(is_weyland)
new_access = get_access(ACCESS_LIST_WY_ALL)
else
var/datum/job/job = GLOB.RoleAuthority.roles_for_mode[target]
@@ -223,7 +236,7 @@
log_idmod(target_id_card, " [user.real_name] granted [access_type] IFF. ", key_name_admin(user))
return TRUE
access_type = text2num(params["access_target"])
- if(access_type in (is_centcom ? get_access(ACCESS_LIST_WY_ALL) : get_access(ACCESS_LIST_MARINE_MAIN)))
+ if(access_type in (is_weyland ? get_access(ACCESS_LIST_WY_ALL) : get_access(ACCESS_LIST_MARINE_MAIN)))
if(access_type in target_id_card.access)
target_id_card.access -= access_type
log_idmod(target_id_card, " [user.real_name] revoked access '[get_access_desc(access_type)]'. ", key_name_admin(user))
@@ -235,7 +248,7 @@
if(!authenticated || !target_id_card)
return
- target_id_card.access |= (is_centcom ? get_access(ACCESS_LIST_WY_ALL) : get_access(ACCESS_LIST_MARINE_MAIN))
+ target_id_card.access |= (is_weyland ? get_access(ACCESS_LIST_WY_ALL) : get_access(ACCESS_LIST_MARINE_MAIN))
target_id_card.faction_group |= factions
log_idmod(target_id_card, " [user.real_name] granted the ID all access and USCM IFF. ", key_name_admin(user))
return TRUE
@@ -290,12 +303,19 @@
/obj/structure/machinery/computer/card/ui_static_data(mob/user)
var/list/data = list()
data["station_name"] = MAIN_SHIP_NAME
- data["centcom_access"] = is_centcom
+ data["weyland_access"] = is_weyland
data["manifest"] = GLOB.data_core.get_manifest(FALSE, FALSE, TRUE)
var/list/departments
- if(is_centcom)
- departments = list("CentCom" = get_all_centcom_jobs())
+ if(is_weyland)
+ departments = list(
+ CARDCON_DEPARTMENT_CORP_LEAD = ROLES_WY_LEADERSHIP,
+ CARDCON_DEPARTMENT_CORP_SECURITY = ROLES_WY_GOONS,
+ CARDCON_DEPARTMENT_CORPORATE = ROLES_WY_CORPORATE,
+ CARDCON_DEPARTMENT_PMC = ROLES_WY_PMC,
+ CARDCON_DEPARTMENT_SPECIALTY = ROLES_WY_PMC_AUX,
+ CARDCON_DEPARTMENT_INSPECTION = ROLES_WY_PMC_INSPEC,
+ )
else if(Check_WO())
// I am not sure about WOs departments so it may need adjustment
departments = list(
@@ -332,18 +352,26 @@
data["jobs"][department] = department_jobs
var/list/regions = list()
- for(var/i in 1 to 7)
+ for(var/i in 1 to is_weyland ? 6 : 7)
var/list/accesses = list()
- for(var/access in get_region_accesses(i))
- if (get_access_desc(access))
- accesses += list(list(
- "desc" = replacetext(get_access_desc(access), " ", " "),
- "ref" = access,
- ))
+ if(!is_weyland)
+ for(var/access in get_region_accesses(i))
+ if(get_access_desc(access))
+ accesses += list(list(
+ "desc" = replacetext(get_access_desc(access), " ", " "),
+ "ref" = access,
+ ))
+ else
+ for(var/access in get_region_accesses_wy(i))
+ if(get_weyland_access_desc(access))
+ accesses += list(list(
+ "desc" = replacetext(get_weyland_access_desc(access), " ", " "),
+ "ref" = access,
+ ))
regions += list(list(
- "name" = get_region_accesses_name(i),
+ "name" = is_weyland ? get_region_accesses_name_wy(i) : get_region_accesses_name(i),
"regid" = i,
"accesses" = accesses
))
@@ -475,6 +503,13 @@
#undef CARDCON_DEPARTMENT_ENGINEERING
#undef CARDCON_DEPARTMENT_COMMAND
+#undef CARDCON_DEPARTMENT_CORP_LEAD
+#undef CARDCON_DEPARTMENT_CORP_SECURITY
+#undef CARDCON_DEPARTMENT_CORPORATE
+#undef CARDCON_DEPARTMENT_PMC
+#undef CARDCON_DEPARTMENT_INSPECTION
+#undef CARDCON_DEPARTMENT_SPECIALTY
+
//This console changes a marine's squad. It's very simple.
//It also does not: change or increment the squad count (used in the login randomizer), nor does it check for jobs.
//Which means you could get sillyiness like "Alpha Sulaco Chief Medical Officer" or "Delta Logistics Officer".
@@ -724,7 +759,10 @@
/obj/structure/machinery/computer/crew/clf
faction = FACTION_CLF
-/obj/structure/machinery/computer/crew/pmc
+/obj/structure/machinery/computer/crew/wey_yu
+ faction = FACTION_WY
+
+/obj/structure/machinery/computer/crew/wey_yu/pmc
faction = FACTION_PMC
/obj/structure/machinery/computer/crew/colony
@@ -1029,7 +1067,8 @@ GLOBAL_LIST_EMPTY_TYPED(crewmonitor, /datum/crewmonitor)
JOB_JUNIOR_EXECUTIVE = 24,
// 30-39: Security
JOB_WY_GOON_LEAD = 30,
- JOB_WY_GOON = 31,
+ JOB_WY_GOON_TECH = 32,
+ JOB_WY_GOON = 32,
// 40-49: MedSci
JOB_PMC_SYNTH = 40,
JOB_PMC_XENO_HANDLER = 41,
diff --git a/code/modules/defenses/bell_tower.dm b/code/modules/defenses/bell_tower.dm
index b4741734e0f4..68d58f02b481 100644
--- a/code/modules/defenses/bell_tower.dm
+++ b/code/modules/defenses/bell_tower.dm
@@ -18,7 +18,7 @@
can_be_near_defense = TRUE
choice_categories = list(
- SENTRY_CATEGORY_IFF = list(FACTION_MARINE, FACTION_WEYLAND, FACTION_HUMAN),
+ SENTRY_CATEGORY_IFF = list(FACTION_MARINE, SENTRY_FACTION_WEYLAND, SENTRY_FACTION_HUMAN),
)
selected_categories = list(
diff --git a/code/modules/defenses/defenses.dm b/code/modules/defenses/defenses.dm
index b5e5cdf55766..a29941fd0c6c 100644
--- a/code/modules/defenses/defenses.dm
+++ b/code/modules/defenses/defenses.dm
@@ -138,11 +138,11 @@
switch(selection)
if(FACTION_MARINE)
faction_group = FACTION_LIST_MARINE
- if(FACTION_WEYLAND)
+ if(SENTRY_FACTION_WEYLAND)
faction_group = FACTION_LIST_MARINE_WY
- if(FACTION_HUMAN)
+ if(SENTRY_FACTION_HUMAN)
faction_group = FACTION_LIST_HUMANOID
- if(FACTION_COLONY)
+ if(SENTRY_FACTION_COLONY)
faction_group = list(FACTION_MARINE, FACTION_COLONIST)
diff --git a/code/modules/defenses/planted_flag.dm b/code/modules/defenses/planted_flag.dm
index 12bcab9b0475..fc50b6ba53f0 100644
--- a/code/modules/defenses/planted_flag.dm
+++ b/code/modules/defenses/planted_flag.dm
@@ -16,7 +16,7 @@
can_be_near_defense = TRUE
choice_categories = list(
- SENTRY_CATEGORY_IFF = list(FACTION_MARINE, FACTION_WEYLAND, FACTION_HUMAN),
+ SENTRY_CATEGORY_IFF = list(FACTION_MARINE, SENTRY_FACTION_WEYLAND, SENTRY_FACTION_HUMAN),
)
selected_categories = list(
diff --git a/code/modules/defenses/sentry.dm b/code/modules/defenses/sentry.dm
index 543dfcefe5bc..3a8a50b5eed7 100644
--- a/code/modules/defenses/sentry.dm
+++ b/code/modules/defenses/sentry.dm
@@ -45,7 +45,7 @@
/// action list is configurable for all subtypes, this is just an example
choice_categories = list(
// SENTRY_CATEGORY_ROF = list(ROF_SINGLE, ROF_BURST, ROF_FULL_AUTO),
- SENTRY_CATEGORY_IFF = list(FACTION_MARINE, FACTION_WEYLAND, FACTION_HUMAN),
+ SENTRY_CATEGORY_IFF = list(FACTION_MARINE, SENTRY_FACTION_WEYLAND, SENTRY_FACTION_HUMAN),
)
selected_categories = list(
@@ -523,8 +523,8 @@
/obj/structure/machinery/defenses/sentry/premade/deployable/colony/Initialize()
. = ..()
- choice_categories[SENTRY_CATEGORY_IFF] = list(FACTION_COLONY, FACTION_WEYLAND)
- selected_categories[SENTRY_CATEGORY_IFF] = FACTION_COLONY
+ choice_categories[SENTRY_CATEGORY_IFF] = list(SENTRY_FACTION_COLONY, SENTRY_FACTION_WEYLAND)
+ selected_categories[SENTRY_CATEGORY_IFF] = SENTRY_FACTION_COLONY
/obj/structure/machinery/defenses/sentry/premade/deployable/almayer
name = "UA-635C Static Gauss Turret"
@@ -579,7 +579,7 @@
handheld_type = /obj/item/defenses/handheld/sentry/dmr
choice_categories = list(
- SENTRY_CATEGORY_IFF = list(FACTION_MARINE, FACTION_WEYLAND, FACTION_HUMAN),
+ SENTRY_CATEGORY_IFF = list(FACTION_MARINE, SENTRY_FACTION_WEYLAND, SENTRY_FACTION_HUMAN),
)
selected_categories = list(
diff --git a/code/modules/defenses/sentry_flamer.dm b/code/modules/defenses/sentry_flamer.dm
index f884b4ec5d14..711bdaa54857 100644
--- a/code/modules/defenses/sentry_flamer.dm
+++ b/code/modules/defenses/sentry_flamer.dm
@@ -11,7 +11,7 @@
choice_categories = list(
// SENTRY_CATEGORY_ROF = list(ROF_SINGLE, ROF_FULL_AUTO),
- SENTRY_CATEGORY_IFF = list(FACTION_MARINE, FACTION_WEYLAND, FACTION_HUMAN),
+ SENTRY_CATEGORY_IFF = list(FACTION_MARINE, SENTRY_FACTION_WEYLAND, SENTRY_FACTION_HUMAN),
)
selected_categories = list(
diff --git a/code/modules/defenses/tesla_coil.dm b/code/modules/defenses/tesla_coil.dm
index cb0646b29775..0eab59e7d7c4 100644
--- a/code/modules/defenses/tesla_coil.dm
+++ b/code/modules/defenses/tesla_coil.dm
@@ -20,7 +20,7 @@
has_camera = FALSE
choice_categories = list(
- SENTRY_CATEGORY_IFF = list(FACTION_MARINE, FACTION_WEYLAND, FACTION_HUMAN),
+ SENTRY_CATEGORY_IFF = list(FACTION_MARINE, SENTRY_FACTION_WEYLAND, SENTRY_FACTION_HUMAN),
)
selected_categories = list(
diff --git a/code/modules/gear_presets/uscm_medical.dm b/code/modules/gear_presets/uscm_medical.dm
index 14db97b35229..019095f9ce38 100644
--- a/code/modules/gear_presets/uscm_medical.dm
+++ b/code/modules/gear_presets/uscm_medical.dm
@@ -78,7 +78,7 @@
back_item = /obj/item/storage/backpack/marine
new_human.equip_to_slot_or_del(new back_item(new_human), WEAR_BACK)
- new_human.equip_to_slot_or_del(new /obj/item/clothing/under/rank/medical/green(new_human), WEAR_BODY)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/under/rank/medical/blue(new_human), WEAR_BODY)
new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/white(new_human), WEAR_FEET)
@@ -88,6 +88,15 @@
assignment = JOB_SURGEON
+/datum/equipment_preset/uscm_ship/uscm_medical/doctor/surgeon/load_gear(mob/living/carbon/human/new_human)
+ var/back_item = /obj/item/storage/backpack/marine/satchel
+ if (new_human.client?.prefs && new_human.client.prefs.backbag == 1)
+ back_item = /obj/item/storage/backpack/marine
+
+ new_human.equip_to_slot_or_del(new back_item(new_human), WEAR_BACK)
+ new_human.equip_to_slot_or_del(new /obj/item/clothing/under/rank/medical/green(new_human), WEAR_BODY)
+ 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
diff --git a/code/modules/gear_presets/uscm_ship.dm b/code/modules/gear_presets/uscm_ship.dm
index cda77b4dd4f4..9bccf2a2ec78 100644
--- a/code/modules/gear_presets/uscm_ship.dm
+++ b/code/modules/gear_presets/uscm_ship.dm
@@ -469,6 +469,16 @@
//*****************************************************************************************************/
+/datum/equipment_preset/uscm_ship/commander/visitor
+ name = "USCM Observer (Major) (VO)"
+ flags = EQUIPMENT_PRESET_EXTRA
+
+ assignment = JOB_USCM_OBSV
+ rank = JOB_USCM_OBSV
+ role_comm_title = "VO"
+
+//*****************************************************************************************************/
+
/datum/equipment_preset/uscm_ship/commander/council
name = "USCM Commanding Officer (CO+)"
flags = EQUIPMENT_PRESET_START_OF_ROUND|EQUIPMENT_PRESET_MARINE
diff --git a/code/modules/mob/dead/observer/orbit.dm b/code/modules/mob/dead/observer/orbit.dm
index d6b104398f99..1cb301e96c07 100644
--- a/code/modules/mob/dead/observer/orbit.dm
+++ b/code/modules/mob/dead/observer/orbit.dm
@@ -118,6 +118,7 @@
var/datum/caste_datum/caste = xeno.caste
serialized["caste"] = caste.caste_type
serialized["icon"] = caste.minimap_icon
+ serialized["hivenumber"] = xeno.hivenumber
xenos += list(serialized)
continue
diff --git a/code/modules/mob/living/carbon/human/human_stripping.dm b/code/modules/mob/living/carbon/human/human_stripping.dm
index e346a0a7368b..210e5f266fe0 100644
--- a/code/modules/mob/living/carbon/human/human_stripping.dm
+++ b/code/modules/mob/living/carbon/human/human_stripping.dm
@@ -129,13 +129,12 @@ GLOBAL_LIST_INIT(strippable_human_items, create_strippable_list(list(
return
var/obj/item/clothing/under/uniform = sourcemob.w_uniform
- if(!LAZYLEN(uniform.accessories))
- return FALSE
- var/obj/item/clothing/accessory/accessory = LAZYACCESS(uniform.accessories, 1)
- if(LAZYLEN(uniform.accessories) > 1)
- accessory = tgui_input_list(user, "Select an accessory to remove from [uniform]", "Remove accessory", uniform.accessories)
- if(!istype(accessory))
+
+ var/obj/item/clothing/accessory/accessory = uniform.pick_accessory_to_remove(user, sourcemob)
+
+ if(!accessory)
return
+
sourcemob.attack_log += text("\[[time_stamp()]\] Has had their accessory ([accessory]) removed by [key_name(user)]")
user.attack_log += text("\[[time_stamp()]\] Attempted to remove [key_name(sourcemob)]'s' accessory ([accessory])")
if(istype(accessory, /obj/item/clothing/accessory/holobadge) || istype(accessory, /obj/item/clothing/accessory/medal))
@@ -231,11 +230,11 @@ GLOBAL_LIST_INIT(strippable_human_items, create_strippable_list(list(
if(tag.dogtag_taken)
to_chat(user, SPAN_WARNING("Someone's already taken [sourcemob]'s information tag."))
return
-
+
if(sourcemob.stat != DEAD)
to_chat(user, SPAN_WARNING("You can't take a dogtag's information tag while its owner is alive."))
return
-
+
to_chat(user, SPAN_NOTICE("You take [sourcemob]'s information tag, leaving the ID tag"))
tag.dogtag_taken = TRUE
tag.icon_state = "dogtag_taken"
@@ -244,7 +243,7 @@ GLOBAL_LIST_INIT(strippable_human_items, create_strippable_list(list(
newtag.fallen_assgns = list(tag.assignment)
newtag.fallen_blood_types = list(tag.blood_type)
user.put_in_hands(newtag)
-
+
/datum/strippable_item/mob_item_slot/belt
diff --git a/code/modules/mob/living/carbon/xenomorph/Abilities.dm b/code/modules/mob/living/carbon/xenomorph/Abilities.dm
index ec024c3b5605..09b99871e936 100644
--- a/code/modules/mob/living/carbon/xenomorph/Abilities.dm
+++ b/code/modules/mob/living/carbon/xenomorph/Abilities.dm
@@ -29,10 +29,6 @@
to_chat(X, SPAN_XENOWARNING("We can't do that from there."))
return
- if(SSticker?.mode?.hardcore)
- to_chat(X, SPAN_XENOWARNING("A certain presence is preventing us from digging tunnels here."))
- return
-
if(!T.can_dig_xeno_tunnel() || !is_ground_level(T.z))
to_chat(X, SPAN_XENOWARNING("We scrape around, but we can't seem to dig through that kind of floor."))
return
diff --git a/code/modules/mob/living/carbon/xenomorph/abilities/burrower/burrower_abilities.dm b/code/modules/mob/living/carbon/xenomorph/abilities/burrower/burrower_abilities.dm
index 747a3f90a691..09c6006536b0 100644
--- a/code/modules/mob/living/carbon/xenomorph/abilities/burrower/burrower_abilities.dm
+++ b/code/modules/mob/living/carbon/xenomorph/abilities/burrower/burrower_abilities.dm
@@ -11,6 +11,11 @@
/datum/action/xeno_action/activable/burrow/use_ability(atom/A)
var/mob/living/carbon/xenomorph/X = owner
+
+ if(SSticker?.mode?.hardcore)
+ to_chat(X, SPAN_XENOWARNING("A certain presence is preventing us from burrowing here."))
+ return
+
if(HAS_TRAIT(X, TRAIT_ABILITY_BURROWED))
X.tunnel(get_turf(A))
else
diff --git a/code/modules/power/smes_construction.dm b/code/modules/power/smes_construction.dm
index fdfc18390dbe..e3324efbbc1a 100644
--- a/code/modules/power/smes_construction.dm
+++ b/code/modules/power/smes_construction.dm
@@ -39,7 +39,7 @@
capacity += C.ChargeCapacity
input_level_max += C.IOCapacity
output_level_max += C.IOCapacity
- charge = between(0, charge, capacity)
+ charge = clamp(charge, 0, capacity)
return 1
else
return 0
diff --git a/code/modules/reagents/chemistry_machinery/acid_harness.dm b/code/modules/reagents/chemistry_machinery/acid_harness.dm
index 4fa087efc54f..874737ebef33 100644
--- a/code/modules/reagents/chemistry_machinery/acid_harness.dm
+++ b/code/modules/reagents/chemistry_machinery/acid_harness.dm
@@ -107,41 +107,41 @@
// damage
- damagelist["Brute"] = list("flag" = check_bitflag(acid_core.inject_damage_types, ACID_SCAN_DAMAGE_BRUTE), "value" = ACID_SCAN_DAMAGE_BRUTE)
- damagelist["Burn"] = list("flag" = check_bitflag(acid_core.inject_damage_types, ACID_SCAN_DAMAGE_BURN), "value" = ACID_SCAN_DAMAGE_BURN)
- damagelist["Toxin"] = list("flag" = check_bitflag(acid_core.inject_damage_types, ACID_SCAN_DAMAGE_TOXIN), "value" = ACID_SCAN_DAMAGE_TOXIN)
- damagelist["Oxygen"] = list("flag" = check_bitflag(acid_core.inject_damage_types, ACID_SCAN_DAMAGE_OXYGEN), "value" = ACID_SCAN_DAMAGE_OXYGEN)
- damagelist["Genetic"] = list("flag" = check_bitflag(acid_core.inject_damage_types, ACID_SCAN_DAMAGE_CLONE), "value" = ACID_SCAN_DAMAGE_CLONE)
- damagelist["Heart"] = list("flag" = check_bitflag(acid_core.inject_damage_types, ACID_SCAN_DAMAGE_HEART), "value" = ACID_SCAN_DAMAGE_HEART)
- damagelist["Liver"] = list("flag" = check_bitflag(acid_core.inject_damage_types, ACID_SCAN_DAMAGE_LIVER), "value" = ACID_SCAN_DAMAGE_LIVER)
- damagelist["Lungs"] = list("flag" = check_bitflag(acid_core.inject_damage_types, ACID_SCAN_DAMAGE_LUNGS), "value" = ACID_SCAN_DAMAGE_LUNGS)
- damagelist["Kidneys"] = list("flag" = check_bitflag(acid_core.inject_damage_types, ACID_SCAN_DAMAGE_KIDNEYS), "value" = ACID_SCAN_DAMAGE_KIDNEYS)
- damagelist["Brain"] = list("flag" = check_bitflag(acid_core.inject_damage_types, ACID_SCAN_DAMAGE_BRAIN), "value" = ACID_SCAN_DAMAGE_BRAIN)
+ damagelist["Brute"] = list("flag" = HAS_FLAG(acid_core.inject_damage_types, ACID_SCAN_DAMAGE_BRUTE), "value" = ACID_SCAN_DAMAGE_BRUTE)
+ damagelist["Burn"] = list("flag" = HAS_FLAG(acid_core.inject_damage_types, ACID_SCAN_DAMAGE_BURN), "value" = ACID_SCAN_DAMAGE_BURN)
+ damagelist["Toxin"] = list("flag" = HAS_FLAG(acid_core.inject_damage_types, ACID_SCAN_DAMAGE_TOXIN), "value" = ACID_SCAN_DAMAGE_TOXIN)
+ damagelist["Oxygen"] = list("flag" = HAS_FLAG(acid_core.inject_damage_types, ACID_SCAN_DAMAGE_OXYGEN), "value" = ACID_SCAN_DAMAGE_OXYGEN)
+ damagelist["Genetic"] = list("flag" = HAS_FLAG(acid_core.inject_damage_types, ACID_SCAN_DAMAGE_CLONE), "value" = ACID_SCAN_DAMAGE_CLONE)
+ damagelist["Heart"] = list("flag" = HAS_FLAG(acid_core.inject_damage_types, ACID_SCAN_DAMAGE_HEART), "value" = ACID_SCAN_DAMAGE_HEART)
+ damagelist["Liver"] = list("flag" = HAS_FLAG(acid_core.inject_damage_types, ACID_SCAN_DAMAGE_LIVER), "value" = ACID_SCAN_DAMAGE_LIVER)
+ damagelist["Lungs"] = list("flag" = HAS_FLAG(acid_core.inject_damage_types, ACID_SCAN_DAMAGE_LUNGS), "value" = ACID_SCAN_DAMAGE_LUNGS)
+ damagelist["Kidneys"] = list("flag" = HAS_FLAG(acid_core.inject_damage_types, ACID_SCAN_DAMAGE_KIDNEYS), "value" = ACID_SCAN_DAMAGE_KIDNEYS)
+ damagelist["Brain"] = list("flag" = HAS_FLAG(acid_core.inject_damage_types, ACID_SCAN_DAMAGE_BRAIN), "value" = ACID_SCAN_DAMAGE_BRAIN)
// conditions
- conditionslist["Vitals Level"] = list("flag" = check_bitflag(acid_core.inject_conditions, ACID_SCAN_CONDITION_VITALS), "value" = ACID_SCAN_CONDITION_VITALS)
- conditionslist["Bleeding"] = list("flag" = check_bitflag(acid_core.inject_conditions, ACID_SCAN_CONDITION_BLEEDING), "value" = ACID_SCAN_CONDITION_BLEEDING)
- conditionslist["Internal"] = list("flag" = check_bitflag(acid_core.inject_conditions, ACID_SCAN_CONDITION_BLEEDING_INTERNAL), "value" = ACID_SCAN_CONDITION_BLEEDING_INTERNAL)
- conditionslist["Bloodloss"] = list("flag" = check_bitflag(acid_core.inject_conditions, ACID_SCAN_CONDITION_BLOODLOSS_HIGH), "value" = ACID_SCAN_CONDITION_BLOODLOSS_HIGH)
- conditionslist["Fracture"] = list("flag" = check_bitflag(acid_core.inject_conditions, ACID_SCAN_CONDITION_FRACTURE), "value" = ACID_SCAN_CONDITION_FRACTURE)
- conditionslist["Splinted"] = list("flag" = check_bitflag(acid_core.inject_conditions, ACID_SCAN_CONDITION_SPLINT), "value" = ACID_SCAN_CONDITION_SPLINT)
- conditionslist["Organ Damage"] = list("flag" = check_bitflag(acid_core.inject_conditions, ACID_SCAN_CONDITION_ORGAN_DAMAGED), "value" = ACID_SCAN_CONDITION_ORGAN_DAMAGED)
- conditionslist["Organ Failure"] = list("flag" = check_bitflag(acid_core.inject_conditions, ACID_SCAN_CONDITION_ORGAN_FAILURE), "value" = ACID_SCAN_CONDITION_ORGAN_FAILURE)
- conditionslist["Death"] = list("flag" = check_bitflag(acid_core.inject_conditions, ACID_SCAN_CONDITION_DEATH), "value" = ACID_SCAN_CONDITION_DEATH)
- conditionslist["Defibrillation"] = list("flag" = check_bitflag(acid_core.inject_conditions, ACID_SCAN_CONDITION_DEFIB), "value" = ACID_SCAN_CONDITION_DEFIB)
- conditionslist["Concussion"] = list("flag" = check_bitflag(acid_core.inject_conditions, ACID_SCAN_CONDITION_CONCUSSION), "value" = ACID_SCAN_CONDITION_CONCUSSION)
- conditionslist["Intoxication"] = list("flag" = check_bitflag(acid_core.inject_conditions, ACID_SCAN_CONDITION_INTOXICATION), "value" = ACID_SCAN_CONDITION_INTOXICATION)
- conditionslist["Foreign Object"] = list("flag" = check_bitflag(acid_core.inject_conditions, ACID_SCAN_CONDITION_FOREIGN_OBJECT), "value" = ACID_SCAN_CONDITION_FOREIGN_OBJECT)
+ conditionslist["Vitals Level"] = list("flag" = HAS_FLAG(acid_core.inject_conditions, ACID_SCAN_CONDITION_VITALS), "value" = ACID_SCAN_CONDITION_VITALS)
+ conditionslist["Bleeding"] = list("flag" = HAS_FLAG(acid_core.inject_conditions, ACID_SCAN_CONDITION_BLEEDING), "value" = ACID_SCAN_CONDITION_BLEEDING)
+ conditionslist["Internal"] = list("flag" = HAS_FLAG(acid_core.inject_conditions, ACID_SCAN_CONDITION_BLEEDING_INTERNAL), "value" = ACID_SCAN_CONDITION_BLEEDING_INTERNAL)
+ conditionslist["Bloodloss"] = list("flag" = HAS_FLAG(acid_core.inject_conditions, ACID_SCAN_CONDITION_BLOODLOSS_HIGH), "value" = ACID_SCAN_CONDITION_BLOODLOSS_HIGH)
+ conditionslist["Fracture"] = list("flag" = HAS_FLAG(acid_core.inject_conditions, ACID_SCAN_CONDITION_FRACTURE), "value" = ACID_SCAN_CONDITION_FRACTURE)
+ conditionslist["Splinted"] = list("flag" = HAS_FLAG(acid_core.inject_conditions, ACID_SCAN_CONDITION_SPLINT), "value" = ACID_SCAN_CONDITION_SPLINT)
+ conditionslist["Organ Damage"] = list("flag" = HAS_FLAG(acid_core.inject_conditions, ACID_SCAN_CONDITION_ORGAN_DAMAGED), "value" = ACID_SCAN_CONDITION_ORGAN_DAMAGED)
+ conditionslist["Organ Failure"] = list("flag" = HAS_FLAG(acid_core.inject_conditions, ACID_SCAN_CONDITION_ORGAN_FAILURE), "value" = ACID_SCAN_CONDITION_ORGAN_FAILURE)
+ conditionslist["Death"] = list("flag" = HAS_FLAG(acid_core.inject_conditions, ACID_SCAN_CONDITION_DEATH), "value" = ACID_SCAN_CONDITION_DEATH)
+ conditionslist["Defibrillation"] = list("flag" = HAS_FLAG(acid_core.inject_conditions, ACID_SCAN_CONDITION_DEFIB), "value" = ACID_SCAN_CONDITION_DEFIB)
+ conditionslist["Concussion"] = list("flag" = HAS_FLAG(acid_core.inject_conditions, ACID_SCAN_CONDITION_CONCUSSION), "value" = ACID_SCAN_CONDITION_CONCUSSION)
+ conditionslist["Intoxication"] = list("flag" = HAS_FLAG(acid_core.inject_conditions, ACID_SCAN_CONDITION_INTOXICATION), "value" = ACID_SCAN_CONDITION_INTOXICATION)
+ conditionslist["Foreign Object"] = list("flag" = HAS_FLAG(acid_core.inject_conditions, ACID_SCAN_CONDITION_FOREIGN_OBJECT), "value" = ACID_SCAN_CONDITION_FOREIGN_OBJECT)
// vitals
- vitalslist["Optimal"] = list("flag" = check_bitflag(acid_core.inject_vitals, ACID_VITALS_OPTIMAL), "value" = ACID_VITALS_OPTIMAL)
- vitalslist["Nominal"] = list("flag" = check_bitflag(acid_core.inject_vitals, ACID_VITALS_NOMINAL), "value" = ACID_VITALS_NOMINAL)
- vitalslist["Low"] = list("flag" = check_bitflag(acid_core.inject_vitals, ACID_VITALS_DROPPING), "value" = ACID_VITALS_DROPPING)
- vitalslist["Very low"] = list("flag" = check_bitflag(acid_core.inject_vitals, ACID_VITALS_LOW), "value" = ACID_VITALS_LOW)
- vitalslist["Critical"] = list("flag" = check_bitflag(acid_core.inject_vitals, ACID_VITALS_CRITICAL), "value" = ACID_VITALS_CRITICAL)
- vitalslist["Emergency"] = list("flag" = check_bitflag(acid_core.inject_vitals, ACID_VITALS_EMERGENCY), "value" = ACID_VITALS_EMERGENCY)
+ vitalslist["Optimal"] = list("flag" = HAS_FLAG(acid_core.inject_vitals, ACID_VITALS_OPTIMAL), "value" = ACID_VITALS_OPTIMAL)
+ vitalslist["Nominal"] = list("flag" = HAS_FLAG(acid_core.inject_vitals, ACID_VITALS_NOMINAL), "value" = ACID_VITALS_NOMINAL)
+ vitalslist["Low"] = list("flag" = HAS_FLAG(acid_core.inject_vitals, ACID_VITALS_DROPPING), "value" = ACID_VITALS_DROPPING)
+ vitalslist["Very low"] = list("flag" = HAS_FLAG(acid_core.inject_vitals, ACID_VITALS_LOW), "value" = ACID_VITALS_LOW)
+ vitalslist["Critical"] = list("flag" = HAS_FLAG(acid_core.inject_vitals, ACID_VITALS_CRITICAL), "value" = ACID_VITALS_CRITICAL)
+ vitalslist["Emergency"] = list("flag" = HAS_FLAG(acid_core.inject_vitals, ACID_VITALS_EMERGENCY), "value" = ACID_VITALS_EMERGENCY)
// compile above lists into config list
diff --git a/code/modules/reagents/chemistry_machinery/chem_simulator.dm b/code/modules/reagents/chemistry_machinery/chem_simulator.dm
index 3c096568e0c8..fd14698619ad 100644
--- a/code/modules/reagents/chemistry_machinery/chem_simulator.dm
+++ b/code/modules/reagents/chemistry_machinery/chem_simulator.dm
@@ -136,7 +136,7 @@
data["property_data_list"] = list()
for(var/datum/chem_property/P in GLOB.chemical_data.research_property_data)
data["property_codings"][P.name] = P.code
- if(template_filter && !check_bitflag(P.category, template_filter))
+ if(template_filter && !HAS_FLAG(P.category, template_filter))
continue
data["property_data_list"][P.name] = P.level
data["property_data_list"] = sortAssoc(data["property_data_list"])
@@ -144,18 +144,18 @@
data["target_property_list"] = list()
for(var/datum/chem_property/P in creation_template)
data["target_property_list"][P.name] = P.level
- if(template_filter && !check_bitflag(P.category, template_filter))
+ if(template_filter && !HAS_FLAG(P.category, template_filter))
continue
//Override the editor level with the enabled property level
data["property_data_list"][P.name] = P.level
data["template_filter"] = list(
- "MED" = list(check_bitflag(template_filter, PROPERTY_TYPE_MEDICINE), PROPERTY_TYPE_MEDICINE),
- "TOX" = list(check_bitflag(template_filter, PROPERTY_TYPE_TOXICANT), PROPERTY_TYPE_TOXICANT),
- "STI" = list(check_bitflag(template_filter, PROPERTY_TYPE_STIMULANT), PROPERTY_TYPE_STIMULANT),
- "REA" = list(check_bitflag(template_filter, PROPERTY_TYPE_REACTANT), PROPERTY_TYPE_REACTANT),
- "IRR" = list(check_bitflag(template_filter, PROPERTY_TYPE_IRRITANT), PROPERTY_TYPE_IRRITANT),
- "MET" = list(check_bitflag(template_filter, PROPERTY_TYPE_METABOLITE), PROPERTY_TYPE_METABOLITE)
+ "MED" = list(HAS_FLAG(template_filter, PROPERTY_TYPE_MEDICINE), PROPERTY_TYPE_MEDICINE),
+ "TOX" = list(HAS_FLAG(template_filter, PROPERTY_TYPE_TOXICANT), PROPERTY_TYPE_TOXICANT),
+ "STI" = list(HAS_FLAG(template_filter, PROPERTY_TYPE_STIMULANT), PROPERTY_TYPE_STIMULANT),
+ "REA" = list(HAS_FLAG(template_filter, PROPERTY_TYPE_REACTANT), PROPERTY_TYPE_REACTANT),
+ "IRR" = list(HAS_FLAG(template_filter, PROPERTY_TYPE_IRRITANT), PROPERTY_TYPE_IRRITANT),
+ "MET" = list(HAS_FLAG(template_filter, PROPERTY_TYPE_METABOLITE), PROPERTY_TYPE_METABOLITE)
)
else if(target && target.data && target.completed)
diff --git a/colonialmarines.dme b/colonialmarines.dme
index e7f280cd99df..e97ca229b9d8 100644
--- a/colonialmarines.dme
+++ b/colonialmarines.dme
@@ -829,6 +829,7 @@
#include "code\game\jobs\job\special\provost.dm"
#include "code\game\jobs\job\special\uaac.dm"
#include "code\game\jobs\job\special\uscm.dm"
+#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"
diff --git a/dependencies.sh b/dependencies.sh
index e558b0087f91..1fd24f763c6c 100644
--- a/dependencies.sh
+++ b/dependencies.sh
@@ -8,7 +8,7 @@ export BYOND_MAJOR=515
export BYOND_MINOR=1627
#rust_g git tag
-export RUST_G_VERSION=2.1.0
+export RUST_G_VERSION=3.3.0
#node version
export NODE_VERSION=20
diff --git a/html/changelogs/AutoChangeLog-pr-6330.yml b/html/changelogs/AutoChangeLog-pr-6330.yml
new file mode 100644
index 000000000000..bbc7333cfcc1
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-6330.yml
@@ -0,0 +1,4 @@
+author: "realforest2001"
+delete-after: True
+changes:
+ - rscadd: "Adds USCM Observer preset, a copy of CO with a different name."
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-6333.yml b/html/changelogs/AutoChangeLog-pr-6333.yml
new file mode 100644
index 000000000000..626edf61ef08
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-6333.yml
@@ -0,0 +1,4 @@
+author: "realforest2001"
+delete-after: True
+changes:
+ - rscadd: "Added a print button to the ASRS audit log."
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-6343.yml b/html/changelogs/AutoChangeLog-pr-6343.yml
new file mode 100644
index 000000000000..9491814ce471
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-6343.yml
@@ -0,0 +1,4 @@
+author: "TheGamerdk"
+delete-after: True
+changes:
+ - rscadd: "All officers and NCO's can now recommend people for medals."
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-6344.yml b/html/changelogs/AutoChangeLog-pr-6344.yml
new file mode 100644
index 000000000000..03b8d2a783ff
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-6344.yml
@@ -0,0 +1,4 @@
+author: "realforest2001"
+delete-after: True
+changes:
+ - rscadd: "Added cameras to Working Joe uniforms."
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-6354.yml b/html/changelogs/AutoChangeLog-pr-6354.yml
new file mode 100644
index 000000000000..c41ed529f741
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-6354.yml
@@ -0,0 +1,4 @@
+author: "coldironwarrior"
+delete-after: True
+changes:
+ - rscadd: "Doctors will spawn in dark blue scrubs by default; Setting your preferred job title to \"Surgeon\" for doctor roles will now spawn you in green scrubs"
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-6365.yml b/html/changelogs/AutoChangeLog-pr-6365.yml
new file mode 100644
index 000000000000..6c8802948832
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-6365.yml
@@ -0,0 +1,5 @@
+author: "Huffie56"
+delete-after: True
+changes:
+ - maptweak: "remove emergency shutter that aren't on the frontier between two areas."
+ - maptweak: "added emergency shutter that are missing on the frontier between two areas."
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-6370.yml b/html/changelogs/AutoChangeLog-pr-6370.yml
new file mode 100644
index 000000000000..a47243cfe740
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-6370.yml
@@ -0,0 +1,5 @@
+author: "vero5123"
+delete-after: True
+changes:
+ - bugfix: "Fixes overwatch console coordinate comment UI crash"
+ - bugfix: "Fixes chat UI crash after entering a custom font"
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-6372.yml b/html/changelogs/AutoChangeLog-pr-6372.yml
new file mode 100644
index 000000000000..d8ac05744dd9
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-6372.yml
@@ -0,0 +1,9 @@
+author: "realforest2001"
+delete-after: True
+changes:
+ - bugfix: "Changing an Identification Computer to is_weyland (formerly is_centcom) now works correctly and allows assignment of corporate accesses or presets."
+ - code_imp: "Added two procs for interpreting WY access information in the UI."
+ - code_imp: "Added separate role groups for PMC and Corporate job defines."
+ - rscadd: "Added ACCESS_WY_DATABASE as a requirement to use the WY subtype console."
+ - rscadd: "Added a WY subtype for crew monitor."
+ - code_imp: "Renamed the faction defines explicitly relating to static defences due to confusion over FACTION_WY and FACTION_WEYLAND."
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-6373.yml b/html/changelogs/AutoChangeLog-pr-6373.yml
new file mode 100644
index 000000000000..82d336973515
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-6373.yml
@@ -0,0 +1,5 @@
+author: "realforest2001"
+delete-after: True
+changes:
+ - rscadd: "Added Forsaken sub category to orbit menu. Also adds an \"Other\" sub category for xeno hives, to split the main hive on its own."
+ - code_imp: "Changed xenoSplitter to pull the hivenumber rather than base things on the name."
\ No newline at end of file
diff --git a/html/changelogs/archive/2024-06.yml b/html/changelogs/archive/2024-06.yml
index a1711354b286..605fab9328f6 100644
--- a/html/changelogs/archive/2024-06.yml
+++ b/html/changelogs/archive/2024-06.yml
@@ -1,3 +1,14 @@
2024-06-01:
Zonespace27:
- balance: Lifeboats now support surgery.
+2024-06-04:
+ AndroBetel:
+ - qol: Added radial menu to accessory removal
+ Huffie56:
+ - balance: for burrower in whiskey outpost add the ability to make tunnel but remove
+ the ability to burrow.
+ - balance: add C4 to the wo weapon vendor.
+ - balance: updating the clothing surplus vendor on to be as close as main mode as
+ possible.
+ realforest2001:
+ - admin: Added ckey log to ordering ASRS.
diff --git a/icons/mob/hud/marine_hud.dmi b/icons/mob/hud/marine_hud.dmi
index 8eefce871099..def6cdd56a0e 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 9cc3e66c3e0b..f0fb3b318d0a 100644
Binary files a/icons/mob/hud/sec_hud.dmi and b/icons/mob/hud/sec_hud.dmi differ
diff --git a/librust_g.so b/librust_g.so
index 56625573d004..382d50e27fe2 100644
Binary files a/librust_g.so and b/librust_g.so differ
diff --git a/maps/map_files/USS_Almayer/USS_Almayer.dmm b/maps/map_files/USS_Almayer/USS_Almayer.dmm
index efe69b1b9cfb..7ee4592d8342 100644
--- a/maps/map_files/USS_Almayer/USS_Almayer.dmm
+++ b/maps/map_files/USS_Almayer/USS_Almayer.dmm
@@ -161,7 +161,6 @@
req_access = null;
req_one_access_txt = "1;3"
},
-/obj/structure/machinery/door/firedoor/border_only/almayer,
/obj/structure/disposalpipe/segment{
dir = 4
},
@@ -715,9 +714,6 @@
name = "\improper Pilot's Office";
req_one_access_txt = "3;22;19"
},
-/obj/structure/machinery/door/firedoor/border_only/almayer{
- dir = 8
- },
/obj/structure/pipes/standard/simple/hidden/supply{
dir = 4
},
@@ -1232,7 +1228,6 @@
/obj/structure/pipes/standard/simple/hidden/supply{
dir = 4
},
-/obj/structure/machinery/door/firedoor/border_only/almayer,
/obj/structure/disposalpipe/segment{
dir = 4
},
@@ -2069,6 +2064,16 @@
icon_state = "silver"
},
/area/almayer/command/cichallway)
+"amM" = (
+/obj/structure/window/framed/almayer,
+/obj/structure/curtain/open/shower{
+ name = "cryo curtain"
+ },
+/obj/structure/machinery/door/firedoor/border_only/almayer{
+ dir = 2
+ },
+/turf/open/floor/plating,
+/area/almayer/engineering/port_atmos)
"amX" = (
/turf/open/floor/almayer{
dir = 1;
@@ -3326,9 +3331,6 @@
/area/almayer/command/lifeboat)
"atk" = (
/obj/structure/machinery/door/airlock/almayer/secure/reinforced,
-/obj/structure/machinery/door/firedoor/border_only/almayer{
- dir = 8
- },
/obj/structure/machinery/door/poddoor/almayer{
dir = 4;
id = "tcomms_apc";
@@ -3591,9 +3593,6 @@
name = "Telecommuncation Power";
pixel_x = -25
},
-/obj/structure/machinery/door/firedoor/border_only/almayer{
- dir = 2
- },
/obj/structure/machinery/door/airlock/almayer/secure/reinforced{
access_modified = 1;
dir = 2;
@@ -4110,6 +4109,9 @@
id = "officers_mess";
name = "\improper Privacy Shutters"
},
+/obj/structure/machinery/door/firedoor/border_only/almayer{
+ dir = 2
+ },
/turf/open/floor/plating,
/area/almayer/living/captain_mess)
"awW" = (
@@ -4720,12 +4722,6 @@
icon_state = "bluecorner"
},
/area/almayer/living/offices/flight)
-"azn" = (
-/obj/structure/machinery/door/firedoor/border_only/almayer,
-/turf/open/floor/almayer{
- icon_state = "plate"
- },
-/area/almayer/engineering/upper_engineering)
"azo" = (
/obj/effect/decal/warning_stripes{
icon_state = "W"
@@ -4951,9 +4947,6 @@
/area/almayer/medical/hydroponics)
"aAy" = (
/obj/structure/machinery/door/airlock/almayer/secure/reinforced,
-/obj/structure/machinery/door/firedoor/border_only/almayer{
- dir = 8
- },
/turf/open/floor/almayer{
icon_state = "test_floor4"
},
@@ -5010,9 +5003,6 @@
req_access_txt = "25";
req_one_access = null
},
-/obj/structure/machinery/door/firedoor/border_only/almayer{
- dir = 2
- },
/turf/open/floor/almayer{
icon_state = "test_floor4"
},
@@ -5158,7 +5148,6 @@
/obj/item/folder/yellow,
/obj/item/folder/yellow,
/obj/item/tool/pen,
-/obj/structure/machinery/door/firedoor/border_only/almayer,
/obj/structure/surface/table/almayer,
/obj/structure/window/reinforced{
dir = 8;
@@ -5416,7 +5405,6 @@
/area/almayer/command/airoom)
"aCf" = (
/obj/structure/window/framed/almayer/hull/hijack_bustable,
-/obj/structure/machinery/door/firedoor/border_only/almayer,
/obj/structure/machinery/door/poddoor/almayer/open{
dir = 4;
id = "CIC Lockdown";
@@ -5481,7 +5469,6 @@
/area/almayer/hallways/lower/port_midship_hallway)
"aCw" = (
/obj/structure/window/framed/almayer/white,
-/obj/structure/machinery/door/firedoor/border_only/almayer,
/turf/open/floor/plating,
/area/almayer/medical/morgue)
"aCA" = (
@@ -5578,7 +5565,6 @@
"aDi" = (
/obj/structure/surface/table/almayer,
/obj/structure/machinery/door/window/westright,
-/obj/structure/machinery/door/firedoor/border_only/almayer,
/turf/open/floor/almayer{
icon_state = "plate"
},
@@ -5637,13 +5623,12 @@
/obj/structure/pipes/standard/simple/hidden/supply{
dir = 4
},
-/obj/structure/machinery/door/firedoor/border_only/almayer,
/obj/structure/sign/safety/ladder{
pixel_x = 8;
pixel_y = -32
},
/turf/open/floor/almayer{
- icon_state = "plate"
+ icon_state = "orange"
},
/area/almayer/engineering/upper_engineering)
"aDt" = (
@@ -6018,9 +6003,6 @@
/turf/open/floor/plating/plating_catwalk,
/area/almayer/command/telecomms)
"aFl" = (
-/obj/structure/machinery/door/firedoor/border_only/almayer{
- dir = 2
- },
/turf/open/floor/almayer{
icon_state = "test_floor4"
},
@@ -6278,6 +6260,7 @@
/obj/structure/curtain/open/shower{
name = "cryo curtain"
},
+/obj/structure/machinery/door/firedoor/border_only/almayer,
/turf/open/floor/plating,
/area/almayer/engineering/port_atmos)
"aGA" = (
@@ -6564,7 +6547,6 @@
/area/almayer/command/cichallway)
"aIo" = (
/obj/structure/window/framed/almayer/white,
-/obj/structure/machinery/door/firedoor/border_only/almayer,
/obj/structure/machinery/door/poddoor/shutters/almayer/open{
dir = 8;
id = "researchlockdownext_windoor";
@@ -6687,9 +6669,6 @@
},
/area/almayer/living/numbertwobunks)
"aIT" = (
-/obj/structure/machinery/door/firedoor/border_only/almayer{
- dir = 2
- },
/obj/structure/machinery/door/airlock/almayer/secure/reinforced{
access_modified = 1;
dir = 2;
@@ -8035,6 +8014,9 @@
/obj/structure/curtain/open/shower{
name = "hypersleep curtain"
},
+/obj/structure/machinery/door/firedoor/border_only/almayer{
+ dir = 2
+ },
/turf/open/floor/plating,
/area/almayer/maint/upper/u_m_p)
"aQy" = (
@@ -8142,7 +8124,6 @@
"aRd" = (
/obj/structure/surface/table/reinforced/prison,
/obj/structure/machinery/door/window/westright,
-/obj/structure/machinery/door/firedoor/border_only/almayer,
/obj/structure/machinery/door/window/westright{
dir = 4;
req_access_txt = "28"
@@ -8717,6 +8698,9 @@
name = "\improper Officer's Bunks";
req_access = null
},
+/obj/structure/machinery/door/firedoor/border_only/almayer{
+ dir = 2
+ },
/turf/open/floor/almayer{
icon_state = "test_floor4"
},
@@ -9066,6 +9050,7 @@
dir = 1;
name = "\improper Officer's Quarters"
},
+/obj/structure/machinery/door/firedoor/border_only/almayer,
/turf/open/floor/almayer{
icon_state = "test_floor4"
},
@@ -9190,6 +9175,9 @@
/area/almayer/lifeboat_pumps/north1)
"aWw" = (
/obj/structure/window/framed/almayer,
+/obj/structure/machinery/door/firedoor/border_only/almayer{
+ dir = 2
+ },
/turf/open/floor/plating,
/area/almayer/living/gym)
"aWz" = (
@@ -9889,6 +9877,7 @@
/area/almayer/squads/alpha)
"bcK" = (
/obj/structure/machinery/smartfridge/chemistry,
+/obj/structure/machinery/door/firedoor/border_only/almayer,
/turf/open/floor/almayer{
icon_state = "sterile_green"
},
@@ -10670,10 +10659,6 @@
icon_state = "sterile_green_side"
},
/area/almayer/medical/operating_room_one)
-"bgG" = (
-/obj/structure/window/framed/almayer/white,
-/turf/open/floor/plating,
-/area/almayer/medical/chemistry)
"bgK" = (
/obj/structure/machinery/door/firedoor/border_only/almayer{
dir = 2
@@ -10891,6 +10876,9 @@
},
/obj/structure/disposalpipe/segment,
/obj/structure/pipes/standard/simple/hidden/supply,
+/obj/structure/machinery/door/firedoor/border_only/almayer{
+ dir = 2
+ },
/turf/open/floor/almayer{
icon_state = "test_floor4"
},
@@ -12414,6 +12402,9 @@
/area/almayer/squads/bravo)
"btb" = (
/obj/structure/window/framed/almayer,
+/obj/structure/machinery/door/firedoor/border_only/almayer{
+ dir = 1
+ },
/turf/open/floor/plating,
/area/almayer/maint/upper/u_a_s)
"btc" = (
@@ -13199,9 +13190,6 @@
/turf/closed/wall/almayer/outer,
/area/almayer/shipboard/weapon_room)
"bAu" = (
-/obj/structure/machinery/door/firedoor/border_only/almayer{
- dir = 2
- },
/obj/structure/machinery/door/airlock/almayer/secure/reinforced{
dir = 1;
name = "\improper High Security Storage"
@@ -14761,9 +14749,6 @@
},
/area/almayer/shipboard/navigation)
"bKb" = (
-/obj/structure/machinery/door/firedoor/border_only/almayer{
- dir = 2
- },
/obj/structure/pipes/standard/simple/hidden/supply,
/obj/structure/machinery/door/airlock/almayer/security/glass/reinforced{
access_modified = 1;
@@ -16960,7 +16945,6 @@
/obj/structure/machinery/door/airlock/almayer/marine/requisitions{
name = "\improper Requisitions Storage"
},
-/obj/structure/machinery/door/firedoor/border_only/almayer,
/obj/structure/disposalpipe/segment{
dir = 8
},
@@ -18783,7 +18767,6 @@
/obj/structure/machinery/door/airlock/almayer/secure/reinforced{
name = "\improper Computer Lab"
},
-/obj/structure/machinery/door/firedoor/border_only/almayer,
/obj/structure/pipes/standard/simple/hidden/supply{
dir = 4
},
@@ -19453,6 +19436,7 @@
/obj/structure/machinery/door/airlock/almayer/generic/glass{
name = "\improper Passenger Cryogenics Bay"
},
+/obj/structure/machinery/door/firedoor/border_only/almayer,
/turf/open/floor/almayer{
icon_state = "test_floor4"
},
@@ -19936,13 +19920,13 @@
/turf/open/floor/plating/plating_catwalk,
/area/almayer/maint/hull/lower/l_m_s)
"cHc" = (
-/obj/structure/machinery/door/firedoor/border_only/almayer,
/obj/structure/sign/safety/ladder{
pixel_x = 8;
pixel_y = 32
},
/turf/open/floor/almayer{
- icon_state = "plate"
+ dir = 1;
+ icon_state = "orange"
},
/area/almayer/engineering/upper_engineering)
"cHk" = (
@@ -21213,6 +21197,24 @@
icon_state = "plating_striped"
},
/area/almayer/engineering/upper_engineering/port)
+"dbs" = (
+/obj/structure/machinery/door/poddoor/almayer/open{
+ id = "Brig Lockdown Shutters";
+ name = "\improper Brig Lockdown Shutter"
+ },
+/obj/structure/machinery/door/airlock/almayer/security/glass/reinforced{
+ closeOtherId = "brigmaint_s";
+ dir = 1;
+ name = "\improper Brig Maintenance"
+ },
+/obj/structure/machinery/door/poddoor/almayer/open{
+ id = "perma_lockdown_2";
+ name = "\improper Perma Lockdown Shutter"
+ },
+/turf/open/floor/almayer{
+ icon_state = "test_floor4"
+ },
+/area/almayer/shipboard/brig/perma)
"dbv" = (
/obj/structure/surface/table/reinforced/almayer_B,
/obj/structure/machinery/prop/almayer/computer{
@@ -22238,6 +22240,9 @@
name = "\improper Engineering North Hall"
},
/obj/structure/pipes/standard/simple/hidden/supply,
+/obj/structure/machinery/door/firedoor/border_only/almayer{
+ dir = 1
+ },
/turf/open/floor/almayer{
icon_state = "test_floor4"
},
@@ -22744,6 +22749,9 @@
name = "\improper Engineering South Hall"
},
/obj/structure/pipes/standard/simple/hidden/supply,
+/obj/structure/machinery/door/firedoor/border_only/almayer{
+ dir = 1
+ },
/turf/open/floor/almayer{
icon_state = "test_floor4"
},
@@ -24502,10 +24510,6 @@
dir = 4
},
/area/almayer/command/lifeboat)
-"ejw" = (
-/obj/structure/window/framed/almayer,
-/turf/open/floor/plating,
-/area/almayer/living/grunt_rnr)
"ejx" = (
/obj/structure/pipes/standard/simple/hidden/supply,
/turf/open/floor/almayer{
@@ -28709,6 +28713,9 @@
"fKh" = (
/obj/structure/window/framed/almayer,
/obj/structure/machinery/door/poddoor/shutters/almayer/cl/quarter/window,
+/obj/structure/machinery/door/firedoor/border_only/almayer{
+ dir = 2
+ },
/turf/open/floor/plating,
/area/almayer/command/corporateliaison)
"fKi" = (
@@ -29068,9 +29075,6 @@
name = "\improper CMO Office Shutters"
},
/obj/structure/window/framed/almayer/white,
-/obj/structure/machinery/door/firedoor/border_only/almayer{
- dir = 1
- },
/turf/open/floor/plating,
/area/almayer/medical/upper_medical)
"fQy" = (
@@ -29207,6 +29211,9 @@
dir = 2;
name = "\improper Laundry Room"
},
+/obj/structure/machinery/door/firedoor/border_only/almayer{
+ dir = 1
+ },
/turf/open/floor/almayer{
icon_state = "test_floor4"
},
@@ -29653,6 +29660,9 @@
/area/almayer/engineering/lower)
"gdS" = (
/obj/structure/window/framed/almayer,
+/obj/structure/machinery/door/firedoor/border_only/almayer{
+ dir = 1
+ },
/turf/open/floor/plating,
/area/almayer/engineering/laundry)
"geg" = (
@@ -30106,9 +30116,6 @@
},
/area/almayer/shipboard/brig/execution_storage)
"gmb" = (
-/obj/structure/machinery/door/firedoor/border_only/almayer{
- dir = 1
- },
/obj/structure/machinery/door/airlock/almayer/generic{
access_modified = 1;
dir = 1;
@@ -30246,6 +30253,9 @@
dir = 1;
name = "\improper Engineering North Hall"
},
+/obj/structure/machinery/door/firedoor/border_only/almayer{
+ dir = 1
+ },
/turf/open/floor/almayer{
icon_state = "test_floor4"
},
@@ -30771,9 +30781,6 @@
/obj/structure/machinery/door/airlock/almayer/security/glass/reinforced{
name = "\improper Warden's Office"
},
-/obj/structure/machinery/door/firedoor/border_only/almayer{
- dir = 8
- },
/turf/open/floor/almayer{
icon_state = "test_floor4"
},
@@ -32957,7 +32964,6 @@
name = "Kitchen";
req_one_access_txt = "30;19"
},
-/obj/structure/machinery/door/firedoor/border_only/almayer,
/turf/open/floor/almayer{
icon_state = "test_floor4"
},
@@ -33574,12 +33580,6 @@
icon_state = "orange"
},
/area/almayer/squads/bravo)
-"htb" = (
-/obj/structure/machinery/door/firedoor/border_only/almayer,
-/turf/open/floor/almayer{
- icon_state = "test_floor4"
- },
-/area/almayer/engineering/upper_engineering/starboard)
"hte" = (
/obj/structure/sign/safety/security{
pixel_x = 15;
@@ -34273,6 +34273,11 @@
icon_state = "orangecorner"
},
/area/almayer/hallways/upper/aft_hallway)
+"hGh" = (
+/obj/structure/window/framed/almayer/white,
+/obj/structure/machinery/door/firedoor/border_only/almayer,
+/turf/open/floor/plating,
+/area/almayer/medical/chemistry)
"hGG" = (
/obj/effect/step_trigger/clone_cleaner,
/obj/effect/decal/warning_stripes{
@@ -34874,6 +34879,9 @@
req_one_access = null
},
/obj/structure/disposalpipe/segment,
+/obj/structure/machinery/door/firedoor/border_only/almayer{
+ dir = 2
+ },
/turf/open/floor/almayer{
icon_state = "test_floor4"
},
@@ -36450,14 +36458,13 @@
},
/area/almayer/engineering/laundry)
"iwI" = (
-/obj/structure/machinery/door/firedoor/border_only/almayer,
/obj/structure/machinery/door/airlock/almayer/generic{
access_modified = 1;
name = "Storage";
req_one_access_txt = "19;21"
},
/turf/open/floor/almayer{
- icon_state = "plate"
+ icon_state = "test_floor4"
},
/area/almayer/squads/req)
"iwJ" = (
@@ -36609,21 +36616,6 @@
icon_state = "plate"
},
/area/almayer/living/offices)
-"izG" = (
-/obj/structure/disposalpipe/segment,
-/obj/structure/pipes/standard/simple/hidden/supply,
-/obj/effect/decal/warning_stripes{
- icon_state = "E";
- pixel_x = 1
- },
-/obj/effect/decal/warning_stripes{
- icon_state = "W";
- pixel_x = -1
- },
-/turf/open/floor/almayer{
- icon_state = "plate"
- },
-/area/almayer/squads/alpha)
"izY" = (
/obj/structure/machinery/autodoc_console,
/turf/open/floor/almayer{
@@ -39781,7 +39773,6 @@
},
/area/almayer/squads/req)
"jAJ" = (
-/obj/structure/machinery/door/firedoor/border_only/almayer,
/obj/structure/pipes/standard/simple/hidden/supply{
dir = 4
},
@@ -41308,7 +41299,6 @@
/turf/open/floor/plating/plating_catwalk,
/area/almayer/maint/hull/upper/u_f_p)
"kcx" = (
-/obj/structure/machinery/door/firedoor/border_only/almayer,
/obj/structure/machinery/door/poddoor/almayer/open{
dir = 4;
id = "CIC Lockdown";
@@ -42013,6 +42003,7 @@
id = "CIC Lockdown";
name = "\improper Combat Information Center Blast Door"
},
+/obj/structure/machinery/door/firedoor/border_only/almayer,
/turf/open/floor/almayer{
icon_state = "test_floor4"
},
@@ -42109,6 +42100,15 @@
icon_state = "plate"
},
/area/almayer/shipboard/brig/perma)
+"krA" = (
+/obj/structure/window/framed/almayer,
+/obj/structure/machinery/door/poddoor/shutters/almayer/open{
+ dir = 4;
+ id = "Firing_Range_1";
+ name = "range shutters"
+ },
+/turf/open/floor/plating,
+/area/almayer/living/cryo_cells)
"krG" = (
/obj/structure/closet/firecloset,
/turf/open/floor/almayer{
@@ -42546,7 +42546,6 @@
/area/almayer/maint/hull/upper/u_f_p)
"kzk" = (
/obj/structure/window/framed/almayer,
-/obj/structure/machinery/door/firedoor/border_only/almayer,
/turf/open/floor/plating,
/area/almayer/command/computerlab)
"kzr" = (
@@ -44113,9 +44112,6 @@
/turf/open/floor/plating/plating_catwalk,
/area/almayer/shipboard/brig/cic_hallway)
"laQ" = (
-/obj/structure/machinery/door/firedoor/border_only/almayer{
- dir = 2
- },
/obj/structure/machinery/door/airlock/multi_tile/almayer/engidoor/glass{
name = "\improper Engineering Reception"
},
@@ -44633,9 +44629,6 @@
/area/almayer/maint/hull/lower/l_m_s)
"lkd" = (
/obj/structure/window/framed/almayer,
-/obj/structure/machinery/door/firedoor/border_only/almayer{
- dir = 2
- },
/obj/structure/machinery/door/poddoor/shutters/almayer{
dir = 2;
id = "kitchen2";
@@ -45227,7 +45220,6 @@
},
/area/almayer/command/combat_correspondent)
"lul" = (
-/obj/structure/machinery/door/firedoor/border_only/almayer,
/obj/structure/machinery/door/airlock/almayer/command/reinforced{
name = "\improper Commanding Officer's Quarters";
req_access = null;
@@ -45542,7 +45534,6 @@
},
/area/almayer/squads/bravo)
"lAu" = (
-/obj/structure/machinery/door/firedoor/border_only/almayer,
/obj/structure/machinery/door/airlock/multi_tile/almayer/engidoor{
dir = 1
},
@@ -45729,7 +45720,7 @@
pixel_y = 26
},
/turf/open/floor/plating/plating_catwalk,
-/area/almayer/squads/alpha)
+/area/almayer/squads/bravo)
"lEe" = (
/obj/structure/pipes/standard/manifold/hidden/supply{
dir = 1
@@ -46000,9 +45991,6 @@
/area/almayer/living/cryo_cells)
"lJv" = (
/obj/structure/window/framed/almayer/white,
-/obj/structure/machinery/door/firedoor/border_only/almayer{
- dir = 1
- },
/obj/structure/machinery/door/poddoor/shutters/almayer/open{
id = "researchlockdownext";
name = "\improper Research Window Shutter"
@@ -46285,7 +46273,6 @@
/area/almayer/hallways/upper/aft_hallway)
"lOr" = (
/obj/structure/window/framed/almayer,
-/obj/structure/machinery/door/firedoor/border_only/almayer,
/obj/structure/machinery/door/poddoor/shutters/almayer{
dir = 4;
id = "crate_room";
@@ -48396,6 +48383,13 @@
icon_state = "green"
},
/area/almayer/squads/req)
+"mDG" = (
+/obj/structure/window/framed/almayer,
+/obj/structure/machinery/door/firedoor/border_only/almayer{
+ dir = 1
+ },
+/turf/open/floor/plating,
+/area/almayer/engineering/upper_engineering/port)
"mDJ" = (
/turf/open/floor/almayer,
/area/almayer/engineering/upper_engineering/starboard)
@@ -49106,6 +49100,9 @@
dir = 2;
name = "\improper Engineering South Hall"
},
+/obj/structure/machinery/door/firedoor/border_only/almayer{
+ dir = 1
+ },
/turf/open/floor/almayer{
icon_state = "test_floor4"
},
@@ -51641,7 +51638,6 @@
id = "kitchen";
name = "\improper Kitchen Shutters"
},
-/obj/structure/machinery/door/firedoor/border_only/almayer,
/obj/item/storage/box/drinkingglasses,
/obj/item/storage/box/drinkingglasses,
/obj/structure/sign/poster{
@@ -52596,9 +52592,6 @@
dir = 1;
name = "\improper Requisitions Storage"
},
-/obj/structure/machinery/door/firedoor/border_only/almayer{
- dir = 1
- },
/obj/structure/disposalpipe/up/almayer{
dir = 4;
id = "almayerlink_OT1_req"
@@ -53203,6 +53196,7 @@
/obj/structure/machinery/door/airlock/almayer/generic{
name = "\improper Bathroom"
},
+/obj/structure/machinery/door/firedoor/border_only/almayer,
/turf/open/floor/almayer{
icon_state = "test_floor4"
},
@@ -53495,6 +53489,7 @@
/area/almayer/maint/hull/upper/p_bow)
"omo" = (
/obj/structure/window/framed/almayer/white,
+/obj/structure/machinery/door/firedoor/border_only/almayer,
/turf/open/floor/plating,
/area/almayer/medical/lockerroom)
"omt" = (
@@ -54990,11 +54985,6 @@
icon_state = "plate"
},
/area/almayer/maint/hull/upper/p_bow)
-"oLi" = (
-/obj/effect/landmark/start/marine/medic/bravo,
-/obj/effect/landmark/late_join/bravo,
-/turf/open/floor/plating/plating_catwalk,
-/area/almayer/squads/alpha)
"oLj" = (
/obj/effect/projector{
name = "Almayer_Up2";
@@ -55277,6 +55267,15 @@
icon_state = "plate"
},
/area/almayer/maint/hull/lower/l_a_s)
+"oPH" = (
+/obj/structure/window/framed/almayer,
+/obj/structure/machinery/door/poddoor/shutters/almayer/open{
+ dir = 4;
+ id = "Firing_Range_2";
+ name = "range shutters"
+ },
+/turf/open/floor/plating,
+/area/almayer/living/cryo_cells)
"oQn" = (
/turf/open/floor/almayer{
dir = 1;
@@ -56195,7 +56194,6 @@
/turf/open/floor/plating/plating_catwalk,
/area/almayer/shipboard/navigation)
"pfc" = (
-/obj/structure/machinery/door/firedoor/border_only/almayer,
/obj/structure/machinery/door/airlock/multi_tile/almayer/engidoor{
dir = 1
},
@@ -56868,6 +56866,10 @@
icon_state = "sterile_green_corner"
},
/area/almayer/medical/lower_medical_medbay)
+"ptf" = (
+/obj/structure/window/framed/almayer,
+/turf/open/floor/plating,
+/area/almayer/engineering/upper_engineering)
"pth" = (
/obj/structure/surface/table/almayer,
/obj/item/folder/blue,
@@ -58045,6 +58047,10 @@
icon_state = "plating"
},
/area/almayer/hallways/lower/vehiclehangar)
+"pQc" = (
+/obj/structure/window/framed/almayer,
+/turf/open/floor/plating,
+/area/almayer/living/offices)
"pQr" = (
/obj/structure/bed,
/turf/open/floor/almayer{
@@ -58055,6 +58061,18 @@
/obj/structure/window/framed/almayer,
/turf/open/floor/plating,
/area/almayer/living/bridgebunks)
+"pQz" = (
+/obj/structure/machinery/door/airlock/almayer/security/reinforced{
+ access_modified = 1;
+ closeOtherId = "astroladder_s";
+ name = "\improper Astronavigational Deck";
+ req_access = null;
+ req_one_access_txt = "3;19"
+ },
+/turf/open/floor/almayer{
+ icon_state = "test_floor4"
+ },
+/area/almayer/shipboard/navigation)
"pQF" = (
/obj/structure/machinery/cm_vending/sorted/cargo_guns/squad{
req_access = null;
@@ -58710,7 +58728,6 @@
/obj/structure/disposalpipe/segment{
dir = 4
},
-/obj/structure/machinery/door/firedoor/border_only/almayer,
/turf/open/floor/almayer{
icon_state = "plate"
},
@@ -58967,6 +58984,9 @@
dir = 1;
name = "\improper Combat Correspondent Room"
},
+/obj/structure/machinery/door/firedoor/border_only/almayer{
+ dir = 1
+ },
/turf/open/floor/almayer{
icon_state = "test_floor4"
},
@@ -60238,9 +60258,6 @@
dir = 2;
name = "\improper Bathroom"
},
-/obj/structure/machinery/door/firedoor/border_only/almayer{
- dir = 1
- },
/turf/open/floor/almayer{
icon_state = "test_floor4"
},
@@ -60405,6 +60422,9 @@
name = "\improper Research Hydroponics Workshop"
},
/obj/structure/machinery/door/poddoor/almayer/biohazard/white,
+/obj/structure/machinery/door/firedoor/border_only/almayer{
+ dir = 2
+ },
/turf/open/floor/almayer{
icon_state = "test_floor4"
},
@@ -61819,9 +61839,6 @@
/area/almayer/shipboard/brig/execution)
"rbY" = (
/obj/structure/window/framed/almayer,
-/obj/structure/machinery/door/firedoor/border_only/almayer{
- dir = 1
- },
/obj/structure/machinery/door/poddoor/shutters/almayer{
id = "crate_room";
name = "\improper Storage Shutters"
@@ -62875,12 +62892,6 @@
"rth" = (
/turf/open/floor/almayer,
/area/almayer/squads/alpha_bravo_shared)
-"rtj" = (
-/obj/structure/machinery/door/firedoor/border_only/almayer,
-/turf/open/floor/almayer{
- icon_state = "test_floor4"
- },
-/area/almayer/squads/req)
"rtA" = (
/obj/structure/surface/table/reinforced/prison,
/obj/item/device/flashlight/pen{
@@ -64426,6 +64437,17 @@
},
/turf/open/floor/almayer,
/area/almayer/hallways/lower/starboard_fore_hallway)
+"rWy" = (
+/obj/structure/machinery/door/airlock/almayer/maint{
+ dir = 1
+ },
+/obj/structure/machinery/door/firedoor/border_only/almayer{
+ dir = 1
+ },
+/turf/open/floor/almayer{
+ icon_state = "test_floor4"
+ },
+/area/almayer/maint/upper/u_a_s)
"rWz" = (
/turf/open/floor/plating,
/area/almayer/maint/upper/u_m_s)
@@ -65843,7 +65865,6 @@
/obj/structure/machinery/door/airlock/almayer/maint{
name = "\improper Core Hatch"
},
-/obj/structure/machinery/door/firedoor/border_only/almayer,
/obj/structure/pipes/standard/simple/hidden/supply{
dir = 4
},
@@ -66036,7 +66057,6 @@
/obj/structure/pipes/standard/simple/hidden/supply{
dir = 4
},
-/obj/structure/machinery/door/firedoor/border_only/almayer,
/obj/structure/machinery/door/airlock/almayer/security/reinforced{
access_modified = 1;
closeOtherId = "astroladder_n";
@@ -67400,7 +67420,6 @@
name = "\improper CMO Office Shutters"
},
/obj/structure/window/framed/almayer/white,
-/obj/structure/machinery/door/firedoor/border_only/almayer,
/turf/open/floor/plating,
/area/almayer/medical/upper_medical)
"sYU" = (
@@ -68008,7 +68027,6 @@
/area/almayer/engineering/upper_engineering/port)
"tiE" = (
/obj/structure/window/framed/almayer,
-/obj/structure/machinery/door/firedoor/border_only/almayer,
/turf/open/floor/plating,
/area/almayer/squads/req)
"tiF" = (
@@ -68432,6 +68450,7 @@
pixel_y = 10;
anchored = 1
},
+/obj/structure/machinery/door/firedoor/border_only/almayer,
/turf/open/floor/almayer{
icon_state = "sterile_green"
},
@@ -69317,7 +69336,6 @@
/turf/open/floor/almayer/aicore/no_build,
/area/almayer/command/airoom)
"tCH" = (
-/obj/structure/machinery/door/firedoor/border_only/almayer,
/obj/structure/disposalpipe/segment{
dir = 4
},
@@ -69917,8 +69935,6 @@
/obj/structure/pipes/standard/simple/hidden/supply{
dir = 4
},
-/obj/structure/machinery/door/firedoor/border_only/almayer,
-/obj/structure/machinery/door/firedoor/border_only/almayer,
/obj/structure/disposalpipe/segment{
dir = 8
},
@@ -70252,7 +70268,6 @@
req_one_access = null;
req_one_access_txt = "1;5"
},
-/obj/structure/machinery/door/firedoor/border_only/almayer,
/turf/open/floor/almayer{
icon_state = "test_floor4"
},
@@ -70891,7 +70906,6 @@
},
/area/almayer/hallways/lower/starboard_midship_hallway)
"uhA" = (
-/obj/structure/machinery/door/firedoor/border_only/almayer,
/turf/open/floor/almayer{
icon_state = "test_floor4"
},
@@ -72142,6 +72156,7 @@
/obj/structure/machinery/door/window/eastleft{
req_access_txt = "8"
},
+/obj/structure/machinery/door/firedoor/border_only/almayer,
/turf/open/floor/almayer{
icon_state = "sterile_green"
},
@@ -73111,6 +73126,16 @@
icon_state = "test_floor4"
},
/area/almayer/shipboard/brig/interrogation)
+"uXy" = (
+/obj/structure/window/framed/almayer/hull/hijack_bustable,
+/obj/structure/machinery/door/poddoor/shutters/almayer/open{
+ dir = 4;
+ id = "Firing_Range_2";
+ name = "range shutters"
+ },
+/obj/structure/machinery/door/firedoor/border_only/almayer,
+/turf/open/floor/plating,
+/area/almayer/living/cryo_cells)
"uXE" = (
/obj/structure/disposalpipe/segment,
/obj/structure/pipes/standard/simple/hidden/supply,
@@ -74940,9 +74965,6 @@
/turf/open/floor/almayer,
/area/almayer/hallways/lower/starboard_midship_hallway)
"vzj" = (
-/obj/structure/machinery/door/firedoor/border_only/almayer{
- dir = 8
- },
/obj/structure/machinery/door/airlock/almayer/security/reinforced{
name = "\improper Chief MP's Bedroom"
},
@@ -75004,7 +75026,6 @@
id = "kitchen";
name = "\improper Kitchen Shutters"
},
-/obj/structure/machinery/door/firedoor/border_only/almayer,
/turf/open/floor/almayer{
icon_state = "plate"
},
@@ -75207,6 +75228,16 @@
icon_state = "sterile_green_side"
},
/area/almayer/medical/hydroponics)
+"vDd" = (
+/obj/structure/window/framed/almayer/hull/hijack_bustable,
+/obj/structure/machinery/door/poddoor/shutters/almayer/open{
+ dir = 4;
+ id = "Firing_Range_1";
+ name = "range shutters"
+ },
+/obj/structure/machinery/door/firedoor/border_only/almayer,
+/turf/open/floor/plating,
+/area/almayer/living/cryo_cells)
"vDh" = (
/obj/structure/largecrate/random,
/turf/open/floor/almayer{
@@ -76548,6 +76579,9 @@
id = "engidorm";
name = "\improper Privacy Shutters"
},
+/obj/structure/machinery/door/firedoor/border_only/almayer{
+ dir = 1
+ },
/turf/open/floor/plating,
/area/almayer/engineering/upper_engineering/port)
"vXf" = (
@@ -76946,7 +76980,6 @@
/obj/structure/pipes/standard/simple/hidden/supply{
dir = 4
},
-/obj/structure/machinery/door/firedoor/border_only/almayer,
/turf/open/floor/almayer{
icon_state = "test_floor4"
},
@@ -77017,6 +77050,9 @@
pixel_x = 1
},
/obj/structure/machinery/door/poddoor/almayer/biohazard/white,
+/obj/structure/machinery/door/firedoor/border_only/almayer{
+ dir = 2
+ },
/turf/open/floor/almayer{
icon_state = "test_floor4"
},
@@ -77347,6 +77383,7 @@
/obj/structure/machinery/door/window/eastleft{
req_access_txt = "8"
},
+/obj/structure/machinery/door/firedoor/border_only/almayer,
/turf/open/floor/almayer{
icon_state = "sterile_green"
},
@@ -77367,6 +77404,7 @@
/obj/structure/machinery/door/poddoor/almayer/biohazard/white{
dir = 4
},
+/obj/structure/machinery/door/firedoor/border_only/almayer,
/turf/open/floor/almayer{
icon_state = "test_floor4"
},
@@ -77645,7 +77683,6 @@
},
/area/almayer/powered/agent)
"wpt" = (
-/obj/structure/machinery/door/firedoor/border_only/almayer,
/obj/structure/machinery/door/poddoor/almayer/open{
dir = 4;
id = "CIC Lockdown";
@@ -78333,6 +78370,13 @@
icon_state = "orangecorner"
},
/area/almayer/hallways/upper/aft_hallway)
+"wCi" = (
+/obj/structure/window/framed/almayer/white,
+/obj/structure/machinery/door/firedoor/border_only/almayer{
+ dir = 2
+ },
+/turf/open/floor/plating,
+/area/almayer/medical/lockerroom)
"wCk" = (
/obj/structure/surface/table/almayer,
/obj/structure/machinery/computer/cameras/wooden_tv/ot{
@@ -79086,6 +79130,7 @@
/obj/structure/machinery/door/poddoor/almayer/biohazard/white{
dir = 4
},
+/obj/structure/machinery/door/firedoor/border_only/almayer,
/turf/open/floor/almayer{
icon_state = "test_floor4"
},
@@ -82879,12 +82924,6 @@
},
/turf/open/floor/plating/plating_catwalk,
/area/almayer/shipboard/brig/cells)
-"ycp" = (
-/obj/structure/window/framed/almayer,
-/obj/structure/machinery/door/firedoor/border_only/almayer,
-/obj/structure/machinery/door/firedoor/border_only/almayer,
-/turf/open/floor/plating,
-/area/almayer/squads/req)
"ycx" = (
/obj/structure/bed/chair/comfy/delta{
dir = 8
@@ -91761,7 +91800,7 @@ qPD
qPD
quJ
rdA
-jyY
+dbs
sql
jyY
rwe
@@ -95919,7 +95958,7 @@ alU
alU
syg
alU
-noo
+pQz
alU
alU
alU
@@ -108297,7 +108336,7 @@ kPx
bgk
biq
dvg
-bgG
+nvM
bnI
qjN
qjN
@@ -109117,7 +109156,7 @@ ham
ham
qjN
oDY
-omo
+wCi
eTC
fdZ
ixj
@@ -109320,7 +109359,7 @@ ham
qjN
qjN
qyD
-omo
+wCi
blZ
bqN
nTo
@@ -109510,11 +109549,11 @@ gtD
uRD
wru
bkA
-nvM
-bgG
+hGh
+hGh
bcK
-bgG
-nvM
+hGh
+hGh
bkA
vwF
nEJ
@@ -113964,7 +114003,7 @@ rUq
sab
sab
izk
-aWD
+pQc
cWr
jSU
lXO
@@ -114167,7 +114206,7 @@ sab
rDv
bmW
jWu
-aWD
+pQc
aqo
aRy
aRy
@@ -114573,7 +114612,7 @@ aQF
aPH
xIQ
tmX
-aWD
+pQc
rrK
aRy
feI
@@ -115791,7 +115830,7 @@ aQF
sPc
xIQ
sab
-aWD
+pQc
olM
aRy
aRy
@@ -116197,7 +116236,7 @@ iWQ
uFd
mUq
qwt
-aWD
+pQc
bng
bmX
bmX
@@ -116400,7 +116439,7 @@ iWQ
sab
aNr
pQY
-aWD
+pQc
bll
bll
bpo
@@ -117044,7 +117083,7 @@ bCh
mPM
esd
mPM
-ejw
+yfS
xML
iMm
jSy
@@ -123233,7 +123272,7 @@ aHq
vcG
qdJ
xIj
-aGz
+amM
ckd
mQC
aHM
@@ -123436,7 +123475,7 @@ aHq
upW
qdJ
xIj
-aGz
+amM
drk
mQC
mkG
@@ -123639,7 +123678,7 @@ aHq
sgH
qdJ
xIj
-aGz
+amM
eqB
obC
hcf
@@ -123733,7 +123772,7 @@ bYa
bPD
jOk
bNB
-mCo
+tiE
xGo
bYu
nmK
@@ -123936,7 +123975,7 @@ bQS
bCA
bKA
bEc
-mCo
+tiE
tjl
rIH
tUh
@@ -126766,14 +126805,14 @@ dpA
ggo
lhs
bdl
-ycp
-ycp
+tiE
+tiE
tPj
-ycp
-ycp
+tiE
+tiE
bdl
bdl
-rtj
+fnI
agv
bdl
bdl
@@ -127889,8 +127928,8 @@ qHM
emn
rdI
alO
-aqY
-aqY
+ptf
+ptf
aBi
aDi
alO
@@ -128083,7 +128122,7 @@ qbw
vTE
qbw
qbw
-vTE
+rWy
kGS
lOn
wCe
@@ -128096,7 +128135,7 @@ axx
amw
anO
aDj
-inw
+ptf
aye
mpZ
amx
@@ -128299,7 +128338,7 @@ axy
azh
aBk
aoT
-inw
+ptf
aye
mpZ
amx
@@ -130000,7 +130039,7 @@ bwg
bCP
bdC
aLT
-bBg
+pqK
uAW
pqK
uAW
@@ -130013,10 +130052,10 @@ pjP
qIf
lfz
bbs
-cdp
-cdp
-cdp
-cdp
+oPH
+oPH
+oPH
+oPH
bbs
bJf
bJf
@@ -130028,10 +130067,10 @@ dNt
dNt
dNt
bbs
-fJO
-fJO
-fJO
-fJO
+krA
+krA
+krA
+krA
bbs
wMI
ekM
@@ -130203,7 +130242,7 @@ bwh
uMl
bdC
dII
-oLi
+fZZ
fZZ
viS
sXw
@@ -130406,7 +130445,7 @@ bxB
uWY
wEd
jvp
-izG
+gBc
gBc
gBc
gBc
@@ -130744,7 +130783,7 @@ alR
sHI
cNC
qhT
-jlQ
+mDG
tst
uUe
hSk
@@ -130812,7 +130851,7 @@ meY
iPS
vAE
aLT
-iPS
+iMr
wDK
iMr
wDK
@@ -130936,7 +130975,7 @@ swN
alO
alO
cHc
-azn
+atq
aDs
alO
alO
@@ -130947,7 +130986,7 @@ alR
sHI
cNC
qhT
-jlQ
+mDG
tZZ
gLz
hSk
@@ -131015,7 +131054,7 @@ meY
meY
meY
meY
-aLT
+aQL
aQL
aQL
aQL
@@ -131353,7 +131392,7 @@ alR
sHI
cNC
qhT
-jlQ
+mDG
snE
sGL
hSk
@@ -131556,7 +131595,7 @@ alR
sHI
cNC
qhT
-jlQ
+mDG
tZZ
cBj
hSk
@@ -131642,15 +131681,15 @@ cdp
jks
cdp
bbs
-bJf
-bJf
-bJf
-bJf
+uXy
+uXy
+uXy
+uXy
xba
-dNt
-dNt
-dNt
-dNt
+vDd
+vDd
+vDd
+vDd
bbs
fJO
fJO
@@ -133354,7 +133393,7 @@ bdH
aac
aag
cuC
-htb
+blJ
pfc
ptK
ptK
@@ -134976,7 +135015,7 @@ bdH
bdH
bdH
cuC
-htb
+blJ
pfc
fLl
fLl
diff --git a/rust_g.dll b/rust_g.dll
index 72a27df14403..d3aebf712170 100644
Binary files a/rust_g.dll and b/rust_g.dll differ
diff --git a/tgui/packages/tgui-panel/settings/SettingsPanel.jsx b/tgui/packages/tgui-panel/settings/SettingsPanel.jsx
index 1073598f2d4b..feda48665589 100644
--- a/tgui/packages/tgui-panel/settings/SettingsPanel.jsx
+++ b/tgui/packages/tgui-panel/settings/SettingsPanel.jsx
@@ -115,7 +115,7 @@ export const SettingsGeneral = (props) => {
+ onChange={(e, value) =>
dispatch(
updateSettings({
fontFamily: value,
diff --git a/tgui/packages/tgui/interfaces/AresInterface.jsx b/tgui/packages/tgui/interfaces/AresInterface.jsx
index d5b393c7f409..e8b565fdafec 100644
--- a/tgui/packages/tgui/interfaces/AresInterface.jsx
+++ b/tgui/packages/tgui/interfaces/AresInterface.jsx
@@ -1193,6 +1193,7 @@ const Requisitions = (props) => {
last_page,
current_menu,
records_requisition,
+ printer_cooldown,
} = data;
return (
@@ -1235,6 +1236,19 @@ const Requisitions = (props) => {
ASRS Audit Log
+
+
+
+
{!!records_requisition.length && (
{
const xenoSplitter = (members: Array) => {
const primeHive: Array = [];
const corruptedHive: Array = [];
+ const forsakenHive: Array = [];
+ const otherHives: Array = [];
members.forEach((x) => {
- if (x.full_name?.includes('Corrupted')) {
+ if (x.hivenumber?.includes('normal')) {
+ primeHive.push(x);
+ } else if (x.hivenumber?.includes('corrupted')) {
corruptedHive.push(x);
+ } else if (x.hivenumber?.includes('forsaken')) {
+ forsakenHive.push(x);
} else {
- primeHive.push(x);
+ otherHives.push(x);
}
});
const squads = [
buildSquadObservable('Prime', 'xeno', primeHive),
buildSquadObservable('Corrupted', 'green', corruptedHive),
+ buildSquadObservable('Forsaken', 'grey', forsakenHive),
+ buildSquadObservable('Other', 'light-grey', otherHives),
];
return squads;
};
diff --git a/tgui/packages/tgui/interfaces/Orbit/types.ts b/tgui/packages/tgui/interfaces/Orbit/types.ts
index 8318a91f1c89..ca21898287d0 100644
--- a/tgui/packages/tgui/interfaces/Orbit/types.ts
+++ b/tgui/packages/tgui/interfaces/Orbit/types.ts
@@ -38,6 +38,7 @@ export type Observable = {
nickname?: string;
orbiters?: number;
ref: string;
+ hivenumber: string;
};
export type SquadObservable = {
diff --git a/tgui/packages/tgui/interfaces/OverwatchConsole.jsx b/tgui/packages/tgui/interfaces/OverwatchConsole.jsx
index 613e976aee5e..6f21c11c125f 100644
--- a/tgui/packages/tgui/interfaces/OverwatchConsole.jsx
+++ b/tgui/packages/tgui/interfaces/OverwatchConsole.jsx
@@ -763,7 +763,7 @@ const SavedCoordinates = (props) => {
+ onChange={(e, value) =>
act('change_coordinate_comment', {
comment: value,
index: coords.index,