diff --git a/code/__DEFINES/paygrade_defs/civilian.dm b/code/__DEFINES/paygrade_defs/civilian.dm
new file mode 100644
index 000000000000..ed99a363dedd
--- /dev/null
+++ b/code/__DEFINES/paygrade_defs/civilian.dm
@@ -0,0 +1,35 @@
+// Paygrade shorthand defines, to allow clearer designation.
+
+// Civilians
+/// CIV, Civilian
+#define PAY_SHORT_CIV "CIV"
+
+/// CNUR, Nurse
+#define PAY_SHORT_CNUR "CNUR"
+
+/// CDOC, Doctor
+#define PAY_SHORT_CDOC "CDOC"
+
+/// CCMO, Professor
+#define PAY_SHORT_CCMO "CCMO"
+
+/// CREP, Representative
+#define PAY_SHORT_CREP "CREP"
+
+/// SYN, Synthetic
+#define PAY_SHORT_SYN "SYN"
+
+/// OPR, Operative
+#define PAY_SHORT_OPR "OPR"
+
+/// CPO, Officer
+#define PAY_SHORT_CPO "CPO"
+
+/// CSPO, Senior Officer
+#define PAY_SHORT_CSPO "CSPO"
+
+/// REB, Rebel
+#define PAY_SHORT_REB "REB"
+
+/// REBC, Rebel Commander "REBC"
+#define PAY_SHORT_REBC "REBC"
diff --git a/code/__DEFINES/paygrade_defs/cmb.dm b/code/__DEFINES/paygrade_defs/cmb.dm
new file mode 100644
index 000000000000..8ebd7902dbf8
--- /dev/null
+++ b/code/__DEFINES/paygrade_defs/cmb.dm
@@ -0,0 +1,20 @@
+// Paygrade shorthand defines, to allow clearer designation.
+
+// Colonial Marshal Bureau
+/// IHRO, Interstellar Human Rights Observer
+#define PAY_SHORT_IHRO "IHRO"
+
+/// ICCL, Interstellar Commerce Commission Corporate Liaison
+#define PAY_SHORT_ICCL "ICCL"
+
+/// ICCA, Interstellar Commerce Commission Agent
+#define PAY_SHORT_ICCA "ICCA"
+
+/// CMBM, CMB Marshal
+#define PAY_SHORT_CMBM "CMBM"
+
+/// CMBD, CMB Deputy
+#define PAY_SHORT_CMBD "CMBD"
+
+/// CMBS, CMB Synthetic
+#define PAY_SHORT_CMBS "CMBS"
diff --git a/code/__DEFINES/paygrade_defs/dutch.dm b/code/__DEFINES/paygrade_defs/dutch.dm
new file mode 100644
index 000000000000..299096060f3f
--- /dev/null
+++ b/code/__DEFINES/paygrade_defs/dutch.dm
@@ -0,0 +1,17 @@
+// Paygrade shorthand defines, to allow clearer designation.
+
+// Dutches Dozen
+/// DTC, Dutch's Dozen Standard Mercenary
+#define PAY_SHORT_DTC "DTC"
+
+/// DTCM, Dutch's Dozen Medic
+#define PAY_SHORT_DTCM "DTCM"
+
+/// DTCF, Dutch's Dozen Flamethrower Specialist
+#define PAY_SHORT_DTCF "DTCF"
+
+/// DTCMG, Dutch's Dozen Machinegunner
+#define PAY_SHORT_DTCMG "DTCMG"
+
+/// DTCA, Arnold
+#define PAY_SHORT_DTCA "DTCA"
diff --git a/code/__DEFINES/paygrade_defs/marines.dm b/code/__DEFINES/paygrade_defs/marines.dm
new file mode 100644
index 000000000000..74b659630820
--- /dev/null
+++ b/code/__DEFINES/paygrade_defs/marines.dm
@@ -0,0 +1,80 @@
+// Paygrade shorthand defines, to allow clearer designation.
+
+// USCM MARINES
+/// ME1, Private
+#define PAY_SHORT_ME1 "ME1"
+
+/// ME2, Private First Class
+#define PAY_SHORT_ME2 "ME2"
+
+/// ME3, Lance Corporal
+#define PAY_SHORT_ME3 "ME3"
+
+/// ME4, Corporal
+#define PAY_SHORT_ME4 "ME4"
+
+/// ME5, Sergeant
+#define PAY_SHORT_ME5 "ME5"
+
+/// ME6, Staff Sergeant
+#define PAY_SHORT_ME6 "ME6"
+
+/// ME7, Gunnery Sergeant
+#define PAY_SHORT_ME7 "ME7"
+
+/// ME8, Master Sergeant
+#define PAY_SHORT_ME8 "ME8"
+
+/// ME8E, First Sergeant
+#define PAY_SHORT_ME8E "ME8E"
+
+/// ME9, Master Gunnery Sergeant
+#define PAY_SHORT_ME9 "ME9"
+
+/// ME9E, Sergeant Major
+#define PAY_SHORT_ME9E "ME9E"
+
+/// ME9C, Sergeant Major of the Colonial Marine Corps
+#define PAY_SHORT_ME9C "ME9C"
+
+/// MO1, Second Lieutenant
+#define PAY_SHORT_MO1 "MO1"
+
+/// MO2, First Lieutenant
+#define PAY_SHORT_MO2 "MO2"
+/// MO3, Captain
+
+#define PAY_SHORT_MO3 "MO3"
+/// MO4, Major
+
+#define PAY_SHORT_MO4 "MO4"
+/// MO5, Lieutenant Colonel
+
+#define PAY_SHORT_MO5 "MO5"
+/// MO6, Colonel
+
+#define PAY_SHORT_MO6 "MO6"
+/// MO6E, Senior Colonel
+
+#define PAY_SHORT_MO6E "MO6E"
+/// MO6C, Division Colonel
+
+#define PAY_SHORT_MO6C "MO6C"
+/// MO7, Brigadier General
+
+#define PAY_SHORT_MO7 "MO7"
+/// MO8, Major General
+
+#define PAY_SHORT_MO8 "MO8"
+/// MO9, Lieutenant General
+
+#define PAY_SHORT_MO9 "MO9"
+/// MO10, General
+
+#define PAY_SHORT_MO10 "MO10"
+
+/// MO10C, Assistant Commandant of the Marine Corps
+#define PAY_SHORT_MO10C "MO10C"
+
+/// MO10S, Commandant of the Marine Corps
+#define PAY_SHORT_MO10S "MO10S"
diff --git a/code/__DEFINES/paygrade_defs/navy.dm b/code/__DEFINES/paygrade_defs/navy.dm
new file mode 100644
index 000000000000..d51cccb8fe97
--- /dev/null
+++ b/code/__DEFINES/paygrade_defs/navy.dm
@@ -0,0 +1,74 @@
+// Paygrade shorthand defines, to allow clearer designation.
+
+// USCM NAVY
+/// NE1, Seaman Recruit
+#define PAY_SHORT_NE1 "NE1"
+
+/// NE2M, Seaman Apprentice
+#define PAY_SHORT_NE2 "NE2"
+
+/// NE3, Seaman
+#define PAY_SHORT_NE3 "NE3"
+
+/// NE4, Petty Officer 3rd Class
+#define PAY_SHORT_NE4 "NE4"
+
+/// NE5, Petty Officer 2nd Class
+#define PAY_SHORT_NE5 "NE5"
+
+/// NE6, Petty Officer 1st Class
+#define PAY_SHORT_NE6 "N36"
+
+/// NE7, Chief Petty Officer
+#define PAY_SHORT_NE7 "NE7"
+
+/// NE8, Senior Chief Petty Officer
+#define PAY_SHORT_NE8 "NE8"
+
+/// NE8C, Command Senior Chief Petty Officer
+#define PAY_SHORT_NE8C "NE8C"
+
+/// NE9, Master Chief Petty Officer
+#define PAY_SHORT_NE9 "NE9"
+
+/// NE9C, Command Master Chief Petty Officer
+#define PAY_SHORT_NE9C "NE9C"
+
+/// NO1, Ensign
+#define PAY_SHORT_NO1 "NO1"
+
+/// NO2, Lieutenant Junior Grade
+#define PAY_SHORT_NO2 "NO2"
+
+/// NO3, Lieutenant
+#define PAY_SHORT_NO3 "NO3"
+
+/// NO4, Lieutenant Commander
+#define PAY_SHORT_NO4 "NO4"
+
+/// NO5, Commander
+#define PAY_SHORT_NO5 "NO5"
+
+/// NO6, Captain
+#define PAY_SHORT_NO6 "NO6"
+
+/// NO6E, Commodore
+#define PAY_SHORT_NO6E "NO6E"
+
+/// NO6C, Senior Commodore
+#define PAY_SHORT_NO6C "NO6C"
+
+/// NO7, Rear Admiral (Lower Half)
+#define PAY_SHORT_NO7 "NO7"
+
+/// NO8, Rear Admiral (Upper Half)
+#define PAY_SHORT_NO8 "NO8"
+
+/// NO9, Vice Admiral
+#define PAY_SHORT_NO9 "NO9"
+
+/// NO10, Admiral
+#define PAY_SHORT_NO10 "NO10"
+
+/// NO10C, Chief of Naval Operations
+#define PAY_SHORT_NO10C "NO10C"
diff --git a/code/__DEFINES/paygrade_defs/provost.dm b/code/__DEFINES/paygrade_defs/provost.dm
new file mode 100644
index 000000000000..5b2121642d52
--- /dev/null
+++ b/code/__DEFINES/paygrade_defs/provost.dm
@@ -0,0 +1,14 @@
+// Paygrade shorthand defines, to allow clearer designation.
+
+// PROVOST OFFICE
+/// PvI, Provost Inspector
+#define PAY_SHORT_PVI "PvI"
+
+/// PvM, Provost Marshal
+#define PAY_SHORT_PVM "PvM"
+
+/// PvSM, Provost Sector Marshal
+#define PAY_SHORT_PVSM "PvSM"
+
+/// PvCM, Provost Chief Marshal
+#define PAY_SHORT_PVCM "PvCM"
diff --git a/code/__DEFINES/paygrade_defs/upp.dm b/code/__DEFINES/paygrade_defs/upp.dm
new file mode 100644
index 000000000000..40c0d8441b2e
--- /dev/null
+++ b/code/__DEFINES/paygrade_defs/upp.dm
@@ -0,0 +1,59 @@
+// Paygrade shorthand defines, to allow clearer designation.
+
+// Union of Progressive Peoples
+/// UE,
+#define PAY_SHORT_UEC "UEC"
+
+/// UE1, Private
+#define PAY_SHORT_UE1 "UE1"
+
+/// UE2, Private First Class
+#define PAY_SHORT_UE2 "UE2"
+
+/// UE3, Korporal
+#define PAY_SHORT_UE3 "UE3"
+
+/// UE4, unior Serzhant
+#define PAY_SHORT_UE4 "UE4"
+
+/// UE5, Serzhant
+#define PAY_SHORT_UE5 "UE5"
+
+/// UE6, Master Serzhant
+#define PAY_SHORT_UE6 "UE6"
+
+/// UC1, Junior Kommando
+#define PAY_SHORT_UC1 "UC1"
+
+/// UC2, 2nd Kommando
+#define PAY_SHORT_UC2 "UC2"
+
+/// UC3, 1st Kommando
+#define PAY_SHORT_UC3 "UC3"
+
+/// UO1, Leytenant
+#define PAY_SHORT_UO1 "UO1"
+
+/// UO2, Senior Leytenant
+#define PAY_SHORT_UO2 "UO2"
+
+/// UO3, Kapitan
+#define PAY_SHORT_UO3 "UO3"
+
+/// UO4, Mayjor
+#define PAY_SHORT_UO4 "UO4"
+
+/// UO5, Leytenant Kolonel
+#define PAY_SHORT_UO5 "UO5"
+
+/// UO6, Kolonel
+#define PAY_SHORT_UO6 "UO6"
+
+/// UO7, Mayjor General
+#define PAY_SHORT_UO7 "UO7"
+
+/// UO8, Leytenant General
+#define PAY_SHORT_UO8 "UO8"
+
+/// UO9, Army General
+#define PAY_SHORT_UO9 "UO9"
diff --git a/code/__DEFINES/paygrade_defs/weyland.dm b/code/__DEFINES/paygrade_defs/weyland.dm
new file mode 100644
index 000000000000..1b6c168e9b6e
--- /dev/null
+++ b/code/__DEFINES/paygrade_defs/weyland.dm
@@ -0,0 +1,32 @@
+// Paygrade shorthand defines, to allow clearer designation.
+
+// Weyland Yutani
+/// WYC1, Trainee
+#define PAY_SHORT_WYC1 "WYC1"
+
+/// WYC2, Junior Executive
+#define PAY_SHORT_WYC2 "WYC2"
+
+/// WYC3, Executive
+#define PAY_SHORT_WYC3 "WYC3"
+
+/// WYC4, Senior Executive
+#define PAY_SHORT_WYC4 "WYC4"
+
+/// WYC5, Executive Specialist
+#define PAY_SHORT_WYC5 "WYC5"
+
+/// WYC6, Executive Supervisor
+#define PAY_SHORT_WYC6 "WYC6"
+
+/// WYC7, Assistant Manager
+#define PAY_SHORT_WYC7 "WYC7"
+
+/// WYC8, Division Manager
+#define PAY_SHORT_WYC8 "WYC8"
+
+/// WYC9, Chief Executive
+#define PAY_SHORT_WYC9 "WYC9"
+
+/// WYC10, Director
+#define PAY_SHORT_WYC10 "WYC10"
diff --git a/code/__DEFINES/radio.dm b/code/__DEFINES/radio.dm
index e2bd155fcb0d..cc1831501bad 100644
--- a/code/__DEFINES/radio.dm
+++ b/code/__DEFINES/radio.dm
@@ -61,6 +61,10 @@
#define RADIO_CHANNEL_PMC_CCT "PMC CCT"
#define RADIO_CHANNEL_WY_WO "SpecOps"
+//Listening Devices
+#define RADIO_CHANNEL_BUG_A "Listening Device A"
+#define RADIO_CHANNEL_BUG_B "Listening Device B"
+
//1-Channel ERTs
#define RADIO_CHANNEL_DUTCH_DOZEN "DD"
#define RADIO_CHANNEL_VAI "VAI"
diff --git a/code/__DEFINES/skills.dm b/code/__DEFINES/skills.dm
index 5dabb4545a32..d33e26c1c3f6 100644
--- a/code/__DEFINES/skills.dm
+++ b/code/__DEFINES/skills.dm
@@ -42,6 +42,8 @@
#define SKILL_SPEC_DEFAULT 0
/// Is trained to use specialist gear, but hasn't picked a kit.
#define SKILL_SPEC_TRAINED 1
+/// Is trained to use specialist gear & HAS picked a kit. (Functionally same as SPEC_ROCKET)
+#define SKILL_SPEC_KITTED 2
/// Can use RPG
#define SKILL_SPEC_ROCKET 2
/// Can use thermal cloaks and custom M4RA rifle
diff --git a/code/__DEFINES/vendors.dm b/code/__DEFINES/vendors.dm
index 04ee5ffef2b6..eeec210a56c3 100644
--- a/code/__DEFINES/vendors.dm
+++ b/code/__DEFINES/vendors.dm
@@ -67,3 +67,10 @@
//Whether or not to load ammo boxes depending on ammo loaded into the vendor
//Only relevant in big vendors, like Requisitions or Squad Prep
#define VEND_LOAD_AMMO_BOXES (1<<9)
+
+// Redemption Tokens
+#define VEND_TOKEN_ENGINEER "Engineer"
+#define VEND_TOKEN_SPEC "Specialist"
+#define VEND_TOKEN_SYNTH "Synthetic"
+/// Token invalid/unrecognised.
+#define VEND_TOKEN_VOID "Void"
diff --git a/code/__HELPERS/text.dm b/code/__HELPERS/text.dm
index 36dcfed6cfea..967967790b28 100644
--- a/code/__HELPERS/text.dm
+++ b/code/__HELPERS/text.dm
@@ -30,6 +30,11 @@
text = replacetext(text, char, repl_chars[char])
return text
+///Helper for only alphanumeric characters plus common punctuation, spaces, underscore and hyphen _ -.
+/proc/replace_non_alphanumeric_plus(text)
+ var/regex/alphanumeric = regex(@{"[^a-z0-9 ,.?!\-_&]"}, "gi")
+ return alphanumeric.Replace(text, "")
+
/proc/readd_quotes(text)
var/list/repl_chars = list(""" = "\"", "'" = "'")
for(var/char in repl_chars)
diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm
index a7af9d7f6324..0782826a4dc9 100644
--- a/code/__HELPERS/unsorted.dm
+++ b/code/__HELPERS/unsorted.dm
@@ -281,9 +281,10 @@
//update the datacore records! This is goig to be a bit costly.
var/mob_ref = WEAKREF(src)
for(var/list/L in list(GLOB.data_core.general, GLOB.data_core.medical, GLOB.data_core.security, GLOB.data_core.locked))
- for(var/datum/data/record/R in L)
- if(R.fields["ref"] == mob_ref)
- R.fields["name"] = newname
+ for(var/datum/data/record/record_entry in L)
+ if(record_entry.fields["ref"] == mob_ref)
+ record_entry.fields["name"] = newname
+ record_entry.name = newname
break
//update our pda and id if we have them on our person
diff --git a/code/controllers/configuration/entries/game_options.dm b/code/controllers/configuration/entries/game_options.dm
index 743f9be9fec0..741862b5d65d 100644
--- a/code/controllers/configuration/entries/game_options.dm
+++ b/code/controllers/configuration/entries/game_options.dm
@@ -127,3 +127,8 @@
min_val = 1
config_entry_value = 450
integer = TRUE
+
+/datum/config_entry/number/whiskey_required_players
+ min_val = 0
+ config_entry_value = 140
+ integer = TRUE
diff --git a/code/controllers/subsystem/communications.dm b/code/controllers/subsystem/communications.dm
index 95839b726151..b8b037c33381 100644
--- a/code/controllers/subsystem/communications.dm
+++ b/code/controllers/subsystem/communications.dm
@@ -71,9 +71,9 @@ Radiochat range: 1441 to 1489 (most devices refuse to be tune to other frequency
//Misc channels
#define YAUT_FREQ 1205
#define DUT_FREQ 1210
-#define CMB_FREQ 1220
#define VAI_FREQ 1215
#define RMC_FREQ 1216
+#define CMB_FREQ 1220
//WY Channels (1230-1249)
#define WY_FREQ 1231
@@ -99,6 +99,11 @@ Radiochat range: 1441 to 1489 (most devices refuse to be tune to other frequency
#define CLF_MED_FREQ 1274
#define CLF_CCT_FREQ 1275
+//Listening Bugs (1290-1291)
+#define BUG_A_FREQ 1290
+#define BUG_B_FREQ 1291
+
+//General Radio
#define MIN_FREQ 1460 // ------------------------------------------------------
#define PUB_FREQ 1461
#define MAX_FREQ 1468 // ------------------------------------------------------
@@ -191,6 +196,9 @@ GLOBAL_LIST_INIT(radiochannels, list(
RADIO_CHANNEL_CLF_ENGI = CLF_ENGI_FREQ,
RADIO_CHANNEL_CLF_MED = CLF_MED_FREQ,
RADIO_CHANNEL_CLF_CCT = CLF_CCT_FREQ,
+
+ RADIO_CHANNEL_BUG_A = BUG_A_FREQ,
+ RADIO_CHANNEL_BUG_B = BUG_B_FREQ,
))
// Response Teams
@@ -205,6 +213,9 @@ GLOBAL_LIST_INIT(radiochannels, list(
// PMC Frequencies
#define PMC_FREQS list(PMC_FREQ, PMC_CMD_FREQ, PMC_ENGI_FREQ, PMC_MED_FREQ, PMC_CCT_FREQ, WY_WO_FREQ, WY_FREQ)
+//Listening Device Frequencies
+#define BUG_FREQS list(BUG_A_FREQ, BUG_B_FREQ)
+
//Depts - used for colors in headset.dm, as well as deciding what the marine comms tower can listen into
#define DEPT_FREQS list(COMM_FREQ, MED_FREQ, ENG_FREQ, SEC_FREQ, SENTRY_FREQ, ALPHA_FREQ, BRAVO_FREQ, CHARLIE_FREQ, DELTA_FREQ, ECHO_FREQ, CRYO_FREQ, REQ_FREQ, JTAC_FREQ, INTEL_FREQ, WY_FREQ)
@@ -269,6 +280,8 @@ SUBSYSTEM_DEF(radio)
"[HC_FREQ]" = "hcradio",
"[PVST_FREQ]" = "pvstradio",
"[COLONY_FREQ]" = "deptradio",
+ "[BUG_A_FREQ]" = "airadio",
+ "[BUG_B_FREQ]" = "aiprivradio",
)
/datum/controller/subsystem/radio/proc/add_object(obj/device as obj, new_frequency as num, filter = null as text|null)
diff --git a/code/controllers/subsystem/nanoui.dm b/code/controllers/subsystem/nanoui.dm
index d89474dd50f1..85ad0d32aaf4 100644
--- a/code/controllers/subsystem/nanoui.dm
+++ b/code/controllers/subsystem/nanoui.dm
@@ -1,5 +1,6 @@
SUBSYSTEM_DEF(nano)
name = "Nano UI"
+ flags = SS_NO_INIT
wait = 2 SECONDS
priority = SS_PRIORITY_NANOUI
runlevels = RUNLEVELS_DEFAULT|RUNLEVEL_LOBBY
diff --git a/code/controllers/subsystem/vote.dm b/code/controllers/subsystem/vote.dm
index a56e10636a1e..79bd10c65736 100644
--- a/code/controllers/subsystem/vote.dm
+++ b/code/controllers/subsystem/vote.dm
@@ -276,7 +276,8 @@ SUBSYSTEM_DEF(vote)
var/datum/game_mode/M = mode_type
if(initial(M.config_tag))
var/vote_cycle_met = !initial(M.vote_cycle) || (text2num(SSperf_logging?.round?.id) % initial(M.vote_cycle) == 0)
- if(initial(M.votable) && vote_cycle_met)
+ var/min_players_met = length(GLOB.clients) >= M.required_players
+ if(initial(M.votable) && vote_cycle_met && min_players_met)
choices += initial(M.config_tag)
if("groundmap")
question = "Ground map vote"
diff --git a/code/datums/ammo/misc.dm b/code/datums/ammo/misc.dm
index 1d04692c0360..607a6e517a7c 100644
--- a/code/datums/ammo/misc.dm
+++ b/code/datums/ammo/misc.dm
@@ -191,7 +191,7 @@
for(var/obj/item/reagent_container/food/drinks/cans/souto/S in P.contents)
M.put_in_active_hand(S)
for(var/mob/O in viewers(GLOB.world_view_size, P)) //find all people in view.
- O.show_message(SPAN_DANGER("[M] catches the [S]!"), SHOW_MESSAGE_VISIBLE) //Tell them the can was caught.
+ O.show_message(SPAN_DANGER("[M] catches [S]!"), SHOW_MESSAGE_VISIBLE) //Tell them the can was caught.
return //Can was caught.
if(ishuman(M))
var/mob/living/carbon/human/H = M
diff --git a/code/datums/components/healing_reduction.dm b/code/datums/components/healing_reduction.dm
index b98d52cab251..54ea02dc6b73 100644
--- a/code/datums/components/healing_reduction.dm
+++ b/code/datums/components/healing_reduction.dm
@@ -21,33 +21,36 @@ Humans will take continuous damage instead.
src.healing_reduction_dissipation = healing_reduction_dissipation
src.max_buildup = max_buildup
-/datum/component/healing_reduction/InheritComponent(datum/component/healing_reduction/C, i_am_original, healing_reduction)
+/datum/component/healing_reduction/InheritComponent(datum/component/healing_reduction/inherit_component, i_am_original, healing_reduction)
. = ..()
- if(!C)
+ if(!inherit_component)
src.healing_reduction += healing_reduction
else
- src.healing_reduction += C.healing_reduction
+ src.healing_reduction += inherit_component.healing_reduction
src.healing_reduction = min(src.healing_reduction, max_buildup)
/datum/component/healing_reduction/process(delta_time)
if(!parent)
qdel(src)
- healing_reduction = max(healing_reduction - healing_reduction_dissipation * delta_time, 0)
+ return
- if(ishuman(parent)) //deals brute to humans
- var/mob/living/carbon/human/H = parent
- H.apply_damage(healing_reduction_dissipation * delta_time, BRUTE)
+ healing_reduction = max(healing_reduction - healing_reduction_dissipation * delta_time, 0)
if(healing_reduction <= 0)
qdel(src)
+ return
+
+ if(ishuman(parent)) //deals brute to humans
+ var/mob/living/carbon/human/human_parent = parent
+ human_parent.apply_damage(healing_reduction_dissipation * delta_time, BRUTE)
var/color = GLOW_COLOR
var/intensity = healing_reduction/max_buildup
color += num2text(MAX_ALPHA*intensity, 2, 16)
- var/atom/A = parent
- A.add_filter("healing_reduction", 2, list("type" = "outline", "color" = color, "size" = 1))
+ var/atom/parent_atom = parent
+ parent_atom.add_filter("healing_reduction", 2, list("type" = "outline", "color" = color, "size" = 1))
/datum/component/healing_reduction/RegisterWithParent()
START_PROCESSING(SSdcs, src)
@@ -64,14 +67,14 @@ Humans will take continuous damage instead.
COMSIG_XENO_ON_HEAL_WOUNDS,
COMSIG_XENO_APPEND_TO_STAT
))
- var/atom/A = parent
- A.remove_filter("healing_reduction")
+ var/atom/parent_atom = parent
+ parent_atom.remove_filter("healing_reduction")
-/datum/component/healing_reduction/proc/stat_append(mob/M, list/L)
+/datum/component/healing_reduction/proc/stat_append(mob/target_mob, list/stat_list)
SIGNAL_HANDLER
- L += "Healing Reduction: [healing_reduction]/[max_buildup]"
+ stat_list += "Healing Reduction: [healing_reduction]/[max_buildup]"
-/datum/component/healing_reduction/proc/apply_healing_reduction(mob/living/carbon/xenomorph/X, list/healing)
+/datum/component/healing_reduction/proc/apply_healing_reduction(mob/living/carbon/xenomorph/xeno, list/healing)
SIGNAL_HANDLER
healing["healing"] -= healing_reduction
diff --git a/code/datums/datacore.dm b/code/datums/datacore.dm
index 02cbc5b2d019..933b547aa1f2 100644
--- a/code/datums/datacore.dm
+++ b/code/datums/datacore.dm
@@ -32,12 +32,12 @@ GLOBAL_DATUM_INIT(data_core, /datum/datacore, new)
)
departments += marines_by_squad
var/list/manifest_out = list()
- for(var/datum/data/record/t in GLOB.data_core.general)
- if(t.fields["mob_faction"] != FACTION_MARINE) //we process only USCM humans
+ for(var/datum/data/record/record_entry in GLOB.data_core.general)
+ if(record_entry.fields["mob_faction"] != FACTION_MARINE) //we process only USCM humans
continue
- var/name = t.fields["name"]
- var/rank = t.fields["rank"]
- var/squad = t.fields["squad"]
+ var/name = record_entry.fields["name"]
+ var/rank = record_entry.fields["rank"]
+ var/squad = record_entry.fields["squad"]
if(isnull(name) || isnull(rank))
continue
var/has_department = FALSE
@@ -85,14 +85,14 @@ GLOBAL_DATUM_INIT(data_core, /datum/datacore, new)
var/dept_flags = NO_FLAGS //Is there anybody in the department?.
var/list/squad_sublists = GLOB.ROLES_SQUAD_ALL.Copy() //Are there any marines in the squad?
- for(var/datum/data/record/t in GLOB.data_core.general)
- if(t.fields["mob_faction"] != FACTION_MARINE) //we process only USCM humans
+ for(var/datum/data/record/record_entry in GLOB.data_core.general)
+ if(record_entry.fields["mob_faction"] != FACTION_MARINE) //we process only USCM humans
continue
- var/name = t.fields["name"]
- var/rank = t.fields["rank"]
- var/real_rank = t.fields["real_rank"]
- var/squad_name = t.fields["squad"]
+ var/name = record_entry.fields["name"]
+ var/rank = record_entry.fields["rank"]
+ var/real_rank = record_entry.fields["real_rank"]
+ var/squad_name = record_entry.fields["squad"]
if(isnull(name) || isnull(rank) || isnull(real_rank))
continue
@@ -104,7 +104,7 @@ GLOBAL_DATUM_INIT(data_core, /datum/datacore, new)
break
isactive[name] = active ? "Active" : "Inactive"
else
- isactive[name] = t.fields["p_stat"]
+ isactive[name] = record_entry.fields["p_stat"]
//cael - to prevent multiple appearances of a player/job combination, add a continue after each line
if(real_rank in GLOB.ROLES_CIC)
@@ -216,14 +216,14 @@ GLOBAL_DATUM_INIT(data_core, /datum/datacore, new)
var/datum/data/record/foundrecord
var/use_name = isnull(ref)
- for(var/datum/data/record/t in GLOB.data_core.general)
+ for(var/datum/data/record/record_entry in GLOB.data_core.general)
if(use_name)
- if(t.fields["name"] == name)
- foundrecord = t
+ if(record_entry.fields["name"] == name)
+ foundrecord = record_entry
break
else
- if(t.fields["ref"] == ref)
- foundrecord = t
+ if(record_entry.fields["ref"] == ref)
+ foundrecord = record_entry
break
if(foundrecord)
@@ -239,102 +239,106 @@ GLOBAL_DATUM_INIT(data_core, /datum/datacore, new)
return TRUE
return FALSE
-/datum/datacore/proc/manifest_inject(mob/living/carbon/human/H)
+/datum/datacore/proc/manifest_inject(mob/living/carbon/human/target)
var/assignment
- if(H.job)
- assignment = H.job
+ if(target.job)
+ assignment = target.job
else
assignment = "Unassigned"
- var/id = add_zero(num2hex(H.gid), 6) //this was the best they could come up with? A large random number? *sigh*
+ var/id = add_zero(num2hex(target.gid), 6) //this was the best they could come up with? A large random number? *sigh*
//var/icon/front = new(get_id_photo(H), dir = SOUTH)
//var/icon/side = new(get_id_photo(H), dir = WEST)
//General Record
- var/datum/data/record/G = new()
- G.fields["id"] = id
- G.fields["name"] = H.real_name
- G.fields["real_rank"] = H.job
- G.fields["rank"] = assignment
- G.fields["squad"] = H.assigned_squad ? H.assigned_squad.name : null
- G.fields["age"] = H.age
- G.fields["p_stat"] = "Active"
- G.fields["m_stat"] = "Stable"
- G.fields["sex"] = H.gender
- G.fields["species"] = H.get_species()
- G.fields["origin"] = H.origin
- G.fields["faction"] = H.personal_faction
- G.fields["mob_faction"] = H.faction
- G.fields["religion"] = H.religion
- G.fields["ref"] = WEAKREF(H)
- //G.fields["photo_front"] = front
- //G.fields["photo_side"] = side
-
- if(H.gen_record && !jobban_isbanned(H, "Records"))
- G.fields["notes"] = H.gen_record
+ var/datum/data/record/record_general = new()
+ record_general.fields["id"] = id
+ record_general.fields["name"] = target.real_name
+ record_general.name = target.real_name
+ record_general.fields["real_rank"] = target.job
+ record_general.fields["rank"] = assignment
+ record_general.fields["squad"] = target.assigned_squad ? target.assigned_squad.name : null
+ record_general.fields["age"] = target.age
+ record_general.fields["p_stat"] = "Active"
+ record_general.fields["m_stat"] = "Stable"
+ record_general.fields["sex"] = target.gender
+ record_general.fields["species"] = target.get_species()
+ record_general.fields["origin"] = target.origin
+ record_general.fields["faction"] = target.personal_faction
+ record_general.fields["mob_faction"] = target.faction
+ record_general.fields["religion"] = target.religion
+ record_general.fields["ref"] = WEAKREF(target)
+ //record_general.fields["photo_front"] = front
+ //record_general.fields["photo_side"] = side
+
+ if(target.gen_record && !jobban_isbanned(target, "Records"))
+ record_general.fields["notes"] = target.gen_record
else
- G.fields["notes"] = "No notes found."
- general += G
+ record_general.fields["notes"] = "No notes found."
+ general += record_general
//Medical Record
- var/datum/data/record/M = new()
- M.fields["id"] = id
- M.fields["name"] = H.real_name
- M.fields["b_type"] = H.blood_type
- M.fields["mi_dis"] = "None"
- M.fields["mi_dis_d"] = "No minor disabilities have been declared."
- M.fields["ma_dis"] = "None"
- M.fields["ma_dis_d"] = "No major disabilities have been diagnosed."
- M.fields["alg"] = "None"
- M.fields["alg_d"] = "No allergies have been detected in this patient."
- M.fields["cdi"] = "None"
- M.fields["cdi_d"] = "No diseases have been diagnosed at the moment."
- M.fields["last_scan_time"] = null
- M.fields["last_scan_result"] = "No scan data on record" // body scanner results
- M.fields["autodoc_data"] = list()
- M.fields["autodoc_manual"] = list()
- M.fields["ref"] = WEAKREF(H)
-
- if(H.med_record && !jobban_isbanned(H, "Records"))
- M.fields["notes"] = H.med_record
+ var/datum/data/record/record_medical = new()
+ record_medical.fields["id"] = id
+ record_medical.fields["name"] = target.real_name
+ record_medical.name = target.name
+ record_medical.fields["b_type"] = target.blood_type
+ record_medical.fields["mi_dis"] = "None"
+ record_medical.fields["mi_dis_d"] = "No minor disabilities have been declared."
+ record_medical.fields["ma_dis"] = "None"
+ record_medical.fields["ma_dis_d"] = "No major disabilities have been diagnosed."
+ record_medical.fields["alg"] = "None"
+ record_medical.fields["alg_d"] = "No allergies have been detected in this patient."
+ record_medical.fields["cdi"] = "None"
+ record_medical.fields["cdi_d"] = "No diseases have been diagnosed at the moment."
+ record_medical.fields["last_scan_time"] = null
+ record_medical.fields["last_scan_result"] = "No scan data on record" // body scanner results
+ record_medical.fields["autodoc_data"] = list()
+ record_medical.fields["autodoc_manual"] = list()
+ record_medical.fields["ref"] = WEAKREF(target)
+
+ if(target.med_record && !jobban_isbanned(target, "Records"))
+ record_medical.fields["notes"] = target.med_record
else
- M.fields["notes"] = "No notes found."
- medical += M
+ record_medical.fields["notes"] = "No notes found."
+ medical += record_medical
//Security Record
- var/datum/data/record/S = new()
- S.fields["id"] = id
- S.fields["name"] = H.real_name
- S.fields["criminal"] = "None"
- S.fields["incident"] = ""
- S.fields["ref"] = WEAKREF(H)
+ var/datum/data/record/record_security = new()
+ record_security.fields["id"] = id
+ record_security.fields["name"] = target.real_name
+ record_security.name = target.real_name
+ record_security.fields["criminal"] = "None"
+ record_security.fields["incident"] = ""
+ record_security.fields["ref"] = WEAKREF(target)
- if(H.sec_record && !jobban_isbanned(H, "Records"))
- var/new_comment = list("entry" = H.sec_record, "created_by" = list("name" = "\[REDACTED\]", "rank" = "Military Police"), "deleted_by" = null, "deleted_at" = null, "created_at" = "Pre-Deployment")
- S.fields["comments"] = list("1" = new_comment)
- S.fields["notes"] = H.sec_record
- security += S
+ if(target.sec_record && !jobban_isbanned(target, "Records"))
+ var/new_comment = list("entry" = target.sec_record, "created_by" = list("name" = "\[REDACTED\]", "rank" = "Military Police"), "deleted_by" = null, "deleted_at" = null, "created_at" = "Pre-Deployment")
+ record_security.fields["comments"] = list("1" = new_comment)
+ record_security.fields["notes"] = target.sec_record
+ security += record_security
//Locked Record
- var/datum/data/record/L = new()
- L.fields["id"] = md5("[H.real_name][H.job]")
- L.fields["name"] = H.real_name
- L.fields["rank"] = H.job
- L.fields["age"] = H.age
- L.fields["sex"] = H.gender
- L.fields["b_type"] = H.b_type
- L.fields["species"] = H.get_species()
- L.fields["origin"] = H.origin
- L.fields["faction"] = H.personal_faction
- L.fields["religion"] = H.religion
- L.fields["ref"] = WEAKREF(H)
-
- if(H.exploit_record && !jobban_isbanned(H, "Records"))
- L.fields["exploit_record"] = H.exploit_record
+ var/datum/data/record/record_locked = new()
+ record_locked.fields["id"] = md5("[target.real_name][target.job]")
+ record_locked.fields["name"] = target.real_name
+ record_locked.name = target.real_name
+ record_locked.fields["rank"] = target.job
+ record_locked.fields["age"] = target.age
+ record_locked.fields["sex"] = target.gender
+ record_locked.fields["b_type"] = target.b_type
+ record_locked.fields["species"] = target.get_species()
+ record_locked.fields["origin"] = target.origin
+ record_locked.fields["faction"] = target.personal_faction
+ record_locked.fields["religion"] = target.religion
+ record_locked.fields["ref"] = WEAKREF(target)
+
+ if(target.exploit_record && !jobban_isbanned(target, "Records"))
+ record_locked.fields["exploit_record"] = target.exploit_record
else
- L.fields["exploit_record"] = "No additional information acquired."
- locked += L
+ record_locked.fields["exploit_record"] = "No additional information acquired."
+ locked += record_locked
/proc/get_id_photo(mob/living/carbon/human/H)
diff --git a/code/datums/emergency_calls/cryo_marines.dm b/code/datums/emergency_calls/cryo_marines.dm
index 4e997292f74d..fb8d4b8a5a69 100644
--- a/code/datums/emergency_calls/cryo_marines.dm
+++ b/code/datums/emergency_calls/cryo_marines.dm
@@ -50,34 +50,34 @@
human.client?.prefs.copy_all_to(human, JOB_SQUAD_LEADER, TRUE, TRUE)
arm_equipment(human, /datum/equipment_preset/uscm/leader/cryo, mind == null, TRUE)
to_chat(human, SPAN_ROLE_HEADER("You are a Squad Leader in the USCM"))
- to_chat(human, SPAN_ROLE_BODY("You are here to assist in the defence of the [SSmapping.configs[GROUND_MAP].map_name]. Listen to the chain of command."))
+ to_chat(human, SPAN_ROLE_BODY("You are here to assist in the defence of [SSmapping.configs[GROUND_MAP].map_name]. Listen to the chain of command."))
to_chat(human, SPAN_BOLDWARNING("If you wish to cryo or ghost upon spawning in, you must ahelp and inform staff so you can be replaced."))
else if (heavies < max_heavies && (!mind || (HAS_FLAG(human.client.prefs.toggles_ert, PLAY_HEAVY) && check_timelock(human.client, JOB_SQUAD_SPECIALIST, time_required_for_job))))
heavies++
human.client?.prefs.copy_all_to(human, JOB_SQUAD_SPECIALIST, TRUE, TRUE)
arm_equipment(human, /datum/equipment_preset/uscm/spec/cryo, mind == null, TRUE)
to_chat(human, SPAN_ROLE_HEADER("You are a Weapons Specialist in the USCM"))
- to_chat(human, SPAN_ROLE_BODY("Your squad is here to assist in the defence of the [SSmapping.configs[GROUND_MAP].map_name]. Listen to the chain of command."))
+ to_chat(human, SPAN_ROLE_BODY("Your squad is here to assist in the defence of [SSmapping.configs[GROUND_MAP].map_name]. Listen to the chain of command."))
to_chat(human, SPAN_BOLDWARNING("If you wish to cryo or ghost upon spawning in, you must ahelp and inform staff so you can be replaced."))
else if (medics < max_medics && (!mind || (HAS_FLAG(human.client.prefs.toggles_ert, PLAY_MEDIC) && check_timelock(human.client, JOB_SQUAD_MEDIC, time_required_for_job))))
medics++
human.client?.prefs.copy_all_to(human, JOB_SQUAD_MEDIC, TRUE, TRUE)
arm_equipment(human, /datum/equipment_preset/uscm/medic/cryo, mind == null, TRUE)
to_chat(human, SPAN_ROLE_HEADER("You are a Hospital Corpsman in the USCM"))
- to_chat(human, SPAN_ROLE_BODY("You are here to assist in the defence of the [SSmapping.configs[GROUND_MAP].map_name]. Listen to the chain of command."))
+ to_chat(human, SPAN_ROLE_BODY("You are here to assist in the defence of [SSmapping.configs[GROUND_MAP].map_name]. Listen to the chain of command."))
to_chat(human, SPAN_BOLDWARNING("If you wish to cryo or ghost upon spawning in, you must ahelp and inform staff so you can be replaced."))
else if (engineers < max_engineers && (!mind || (HAS_FLAG(human.client.prefs.toggles_ert, PLAY_ENGINEER) && check_timelock(human.client, JOB_SQUAD_ENGI, time_required_for_job))))
engineers++
human.client?.prefs.copy_all_to(human, JOB_SQUAD_ENGI, TRUE, TRUE)
arm_equipment(human, /datum/equipment_preset/uscm/engineer/cryo, mind == null, TRUE)
to_chat(human, SPAN_ROLE_HEADER("You are an Engineer in the USCM"))
- to_chat(human, SPAN_ROLE_BODY("You are here to assist in the defence of the [SSmapping.configs[GROUND_MAP].map_name]. Listen to the chain of command."))
+ to_chat(human, SPAN_ROLE_BODY("You are here to assist in the defence of [SSmapping.configs[GROUND_MAP].map_name]. Listen to the chain of command."))
to_chat(human, SPAN_BOLDWARNING("If you wish to cryo or ghost upon spawning in, you must ahelp and inform staff so you can be replaced."))
else
human.client?.prefs.copy_all_to(human, JOB_SQUAD_MARINE, TRUE, TRUE)
arm_equipment(human, /datum/equipment_preset/uscm/pfc/cryo, mind == null, TRUE)
to_chat(human, SPAN_ROLE_HEADER("You are a Rifleman in the USCM"))
- to_chat(human, SPAN_ROLE_BODY("You are here to assist in the defence of the [SSmapping.configs[GROUND_MAP].map_name]. Listen to the chain of command."))
+ to_chat(human, SPAN_ROLE_BODY("You are here to assist in the defence of [SSmapping.configs[GROUND_MAP].map_name]. Listen to the chain of command."))
to_chat(human, SPAN_BOLDWARNING("If you wish to cryo or ghost upon spawning in, you must ahelp and inform staff so you can be replaced."))
sleep(10)
diff --git a/code/datums/emergency_calls/cryo_marines_heavy.dm b/code/datums/emergency_calls/cryo_marines_heavy.dm
index 2081d9564c50..42f25a461254 100644
--- a/code/datums/emergency_calls/cryo_marines_heavy.dm
+++ b/code/datums/emergency_calls/cryo_marines_heavy.dm
@@ -41,31 +41,31 @@
leaders++
arm_equipment(H, /datum/equipment_preset/uscm/leader_equipped/cryo, TRUE, TRUE)
to_chat(H, SPAN_ROLE_HEADER("You are a Squad Leader in the USCM"))
- to_chat(H, SPAN_ROLE_BODY("Your squad is here to assist in the defence of the [SSmapping.configs[GROUND_MAP].map_name]."))
+ to_chat(H, SPAN_ROLE_BODY("Your squad is here to assist in the defence of [SSmapping.configs[GROUND_MAP].map_name]."))
else if (heavies < max_heavies && HAS_FLAG(H.client.prefs.toggles_ert, PLAY_HEAVY) && check_timelock(H.client, JOB_SQUAD_SPECIALIST, time_required_for_job))
heavies++
arm_equipment(H, /datum/equipment_preset/uscm/specialist_equipped/cryo, TRUE, TRUE)
to_chat(H, SPAN_ROLE_HEADER("You are a Weapons Specialist in the USCM"))
- to_chat(H, SPAN_ROLE_BODY("Your squad is here to assist in the defence of the [SSmapping.configs[GROUND_MAP].map_name]."))
+ to_chat(H, SPAN_ROLE_BODY("Your squad is here to assist in the defence of [SSmapping.configs[GROUND_MAP].map_name]."))
else if(smartgunners < max_smartgunners && HAS_FLAG(H.client.prefs.toggles_ert, PLAY_SMARTGUNNER) && check_timelock(H.client, JOB_SQUAD_SMARTGUN, time_required_for_job))
smartgunners++
arm_equipment(H, /datum/equipment_preset/uscm/smartgunner_equipped/cryo, TRUE, TRUE)
to_chat(H, SPAN_ROLE_HEADER("You are a Smartgunner in the USCM"))
- to_chat(H, SPAN_ROLE_BODY("Your squad is here to assist in the defence of the [SSmapping.configs[GROUND_MAP].map_name]."))
+ to_chat(H, SPAN_ROLE_BODY("Your squad is here to assist in the defence of [SSmapping.configs[GROUND_MAP].map_name]."))
else if(engineers < max_engineers && HAS_FLAG(H.client.prefs.toggles_ert, PLAY_ENGINEER) && check_timelock(H.client, JOB_SQUAD_ENGI, time_required_for_job))
engineers++
arm_equipment(H, /datum/equipment_preset/uscm/engineer_equipped/cryo, TRUE, TRUE)
to_chat(H, SPAN_ROLE_HEADER("You are an Engineer in the USCM"))
- to_chat(H, SPAN_ROLE_BODY("Your squad is here to assist in the defence of the [SSmapping.configs[GROUND_MAP].map_name]."))
+ to_chat(H, SPAN_ROLE_BODY("Your squad is here to assist in the defence of [SSmapping.configs[GROUND_MAP].map_name]."))
else if (medics < max_medics && HAS_FLAG(H.client.prefs.toggles_ert, PLAY_MEDIC) && check_timelock(H.client, JOB_SQUAD_MEDIC, time_required_for_job))
medics++
arm_equipment(H, /datum/equipment_preset/uscm/medic_equipped/cryo, TRUE, TRUE)
to_chat(H, SPAN_ROLE_HEADER("You are a Hospital Corpsman in the USCM"))
- to_chat(H, SPAN_ROLE_BODY("Your squad is here to assist in the defence of the [SSmapping.configs[GROUND_MAP].map_name]."))
+ to_chat(H, SPAN_ROLE_BODY("Your squad is here to assist in the defence of [SSmapping.configs[GROUND_MAP].map_name]."))
else
arm_equipment(H, /datum/equipment_preset/uscm/private_equipped/cryo, TRUE, TRUE)
to_chat(H, SPAN_ROLE_HEADER("You are a Rifleman in the USCM"))
- to_chat(H, SPAN_ROLE_BODY("Your squad is here to assist in the defence of the [SSmapping.configs[GROUND_MAP].map_name]."))
+ to_chat(H, SPAN_ROLE_BODY("Your squad is here to assist in the defence of [SSmapping.configs[GROUND_MAP].map_name]."))
sleep(10)
to_chat(H, SPAN_BOLD("Objectives: [objectives]"))
diff --git a/code/datums/emergency_calls/cryo_spec.dm b/code/datums/emergency_calls/cryo_spec.dm
index 6cc7c905efbc..8d563b0693f8 100644
--- a/code/datums/emergency_calls/cryo_spec.dm
+++ b/code/datums/emergency_calls/cryo_spec.dm
@@ -34,7 +34,7 @@
human.client?.prefs.copy_all_to(human, JOB_SQUAD_SPECIALIST, TRUE, TRUE)
arm_equipment(human, /datum/equipment_preset/uscm/spec/cryo, mind == null, TRUE)
to_chat(human, SPAN_ROLE_HEADER("You are a Weapons Specialist in the USCM"))
- to_chat(human, SPAN_ROLE_BODY("Your squad is here to assist in the defence of the [SSmapping.configs[GROUND_MAP].map_name]. Listen to the chain of command."))
+ to_chat(human, SPAN_ROLE_BODY("Your squad is here to assist in the defence of [SSmapping.configs[GROUND_MAP].map_name]. Listen to the chain of command."))
to_chat(human, SPAN_BOLDWARNING("If you wish to cryo or ghost upon spawning in, you must ahelp and inform staff so you can be replaced."))
sleep(10)
diff --git a/code/datums/emergency_calls/emergency_call.dm b/code/datums/emergency_calls/emergency_call.dm
index 9db46955a5ea..c6f71382b877 100644
--- a/code/datums/emergency_calls/emergency_call.dm
+++ b/code/datums/emergency_calls/emergency_call.dm
@@ -200,7 +200,7 @@
SSticker.mode.picked_calls += src
show_join_message() //Show our potential candidates the message to let them join.
- message_admins("Distress beacon: '[name]' activated [src.hostility? "[SPAN_WARNING("(THEY ARE HOSTILE)")]":"(they are friendly)"]. Looking for candidates.")
+ message_admins("Distress beacon: '[name]' activated [hostility? "[SPAN_WARNING("(THEY ARE HOSTILE)")]":"(they are friendly)"]. Looking for candidates.")
if(!quiet_launch)
marine_announcement("A distress beacon has been launched from the [MAIN_SHIP_NAME].", "Priority Alert", 'sound/AI/distressbeacon.ogg', logging = ARES_LOG_SECURITY)
diff --git a/code/datums/emergency_calls/tank_crew.dm b/code/datums/emergency_calls/tank_crew.dm
index fb437c179e48..f8d20051c244 100644
--- a/code/datums/emergency_calls/tank_crew.dm
+++ b/code/datums/emergency_calls/tank_crew.dm
@@ -24,11 +24,10 @@
sleep(5)
arm_equipment(H, /datum/equipment_preset/uscm/tank/full, TRUE, TRUE)
to_chat(H, SPAN_ROLE_HEADER("You are a Vehicle Crewman in the USCM"))
- to_chat(H, SPAN_ROLE_BODY("You are here to assist in the defence of the [SSmapping.configs[GROUND_MAP].map_name]. Listen to the chain of command."))
+ to_chat(H, SPAN_ROLE_BODY("You are here to assist in the defence of [SSmapping.configs[GROUND_MAP].map_name]. Listen to the chain of command."))
to_chat(H, SPAN_BOLDWARNING("If you wish to cryo or ghost upon spawning in, you must ahelp and inform staff so you can be replaced."))
sleep(10)
to_chat(H, SPAN_BOLD("Objectives: [objectives]"))
GLOB.data_core.manifest_inject(H) //Put people in crew manifest
-
diff --git a/code/datums/emergency_calls/whiskey_outpost.dm b/code/datums/emergency_calls/whiskey_outpost.dm
index 5c46ace04d6c..c6a7e4947756 100644
--- a/code/datums/emergency_calls/whiskey_outpost.dm
+++ b/code/datums/emergency_calls/whiskey_outpost.dm
@@ -28,23 +28,23 @@
if(!leader && HAS_FLAG(mob.client.prefs.toggles_ert, PLAY_LEADER) && check_timelock(mob.client, JOB_SQUAD_LEADER, time_required_for_job))
leader = mob
arm_equipment(mob, /datum/equipment_preset/dust_raider/leader, TRUE, TRUE)
- to_chat(mob, SPAN_BOLDNOTICE("You are a Squad Leader in the USCM, your squad is here to assist in the defence of the [SSmapping.configs[GROUND_MAP].map_name]."))
+ to_chat(mob, SPAN_BOLDNOTICE("You are a Squad Leader in the USCM, your squad is here to assist in the defence of [SSmapping.configs[GROUND_MAP].map_name]."))
else if (heavies < max_heavies && HAS_FLAG(mob.client.prefs.toggles_ert, PLAY_HEAVY) && check_timelock(mob.client, JOB_SQUAD_SPECIALIST, time_required_for_job))
heavies++
arm_equipment(mob, /datum/equipment_preset/dust_raider/specialist, TRUE, TRUE)
- to_chat(mob, SPAN_BOLDNOTICE("You are a Specialist in the USCM, your squad is here to assist in the defence of the [SSmapping.configs[GROUND_MAP].map_name]."))
+ to_chat(mob, SPAN_BOLDNOTICE("You are a Specialist in the USCM, your squad is here to assist in the defence of [SSmapping.configs[GROUND_MAP].map_name]."))
else if(smartgunners < max_smartgunners && HAS_FLAG(mob.client.prefs.toggles_ert, PLAY_SMARTGUNNER) && check_timelock(mob.client, JOB_SQUAD_SMARTGUN, time_required_for_job))
smartgunners++
arm_equipment(mob, /datum/equipment_preset/dust_raider/smartgunner, TRUE, TRUE)
- to_chat(mob, SPAN_BOLDNOTICE("You are a Smartgunner in the USCM, your squad is here to assist in the defence of the [SSmapping.configs[GROUND_MAP].map_name]."))
+ to_chat(mob, SPAN_BOLDNOTICE("You are a Smartgunner in the USCM, your squad is here to assist in the defence of [SSmapping.configs[GROUND_MAP].map_name]."))
else if(engineers < max_engineers && HAS_FLAG(mob.client.prefs.toggles_ert, PLAY_ENGINEER) && check_timelock(mob.client, JOB_SQUAD_ENGI, time_required_for_job))
engineers++
arm_equipment(mob, /datum/equipment_preset/dust_raider/engineer, TRUE, TRUE)
- to_chat(mob, SPAN_BOLDNOTICE("You are an Engineer in the USCM, your squad is here to assist in the defence of the [SSmapping.configs[GROUND_MAP].map_name]."))
+ to_chat(mob, SPAN_BOLDNOTICE("You are an Engineer in the USCM, your squad is here to assist in the defence of [SSmapping.configs[GROUND_MAP].map_name]."))
else if (medics < max_medics && HAS_FLAG(mob.client.prefs.toggles_ert, PLAY_MEDIC) && check_timelock(mob.client, JOB_SQUAD_MEDIC, time_required_for_job))
medics++
arm_equipment(mob, /datum/equipment_preset/dust_raider/medic, TRUE, TRUE)
- to_chat(mob, SPAN_BOLDNOTICE("You are a Hospital Corpsman in the USCM, your squad is here to assist in the defence of the [SSmapping.configs[GROUND_MAP].map_name]."))
+ to_chat(mob, SPAN_BOLDNOTICE("You are a Hospital Corpsman in the USCM, your squad is here to assist in the defence of [SSmapping.configs[GROUND_MAP].map_name]."))
else
arm_equipment(mob, /datum/equipment_preset/dust_raider/private, TRUE, TRUE)
to_chat(mob, SPAN_BOLDNOTICE("You are a Rifleman in the USCM, your squad is here to assist in the defence of [SSmapping.configs[GROUND_MAP].map_name]."))
diff --git a/code/datums/helper_datums/teleport.dm b/code/datums/helper_datums/teleport.dm
index 16825ab8a7ba..207310ac34c5 100644
--- a/code/datums/helper_datums/teleport.dm
+++ b/code/datums/helper_datums/teleport.dm
@@ -166,15 +166,15 @@
/datum/teleport/instant/science/teleportChecks()
if(istype(teleatom, /obj/item/disk/nuclear)) // Don't let nuke disks get teleported --NeoFite
- teleatom.visible_message(SPAN_DANGER("The [teleatom] bounces off of the portal!"))
+ teleatom.visible_message(SPAN_DANGER("[teleatom] bounces off of the portal!"))
return 0
if(length(teleatom.search_contents_for(/obj/item/disk/nuclear)))
if(istype(teleatom, /mob/living))
var/mob/living/MM = teleatom
- MM.visible_message(SPAN_DANGER("The [MM] bounces off of the portal!"),SPAN_DANGER("Something you are carrying seems to be unable to pass through the portal. Better drop it if you want to go through."))
+ MM.visible_message(SPAN_DANGER("[MM] bounces off of the portal!"),SPAN_DANGER("Something you are carrying seems to be unable to pass through the portal. Better drop it if you want to go through."))
else
- teleatom.visible_message(SPAN_DANGER("The [teleatom] bounces off of the portal!"))
+ teleatom.visible_message(SPAN_DANGER("[teleatom] bounces off of the portal!"))
return 0
if(is_admin_level(destination.z))
diff --git a/code/datums/paygrades/factions/civillian/civilian.dm b/code/datums/paygrades/factions/civillian/civilian.dm
deleted file mode 100644
index 2c2aa5feac1c..000000000000
--- a/code/datums/paygrades/factions/civillian/civilian.dm
+++ /dev/null
@@ -1,30 +0,0 @@
-/datum/paygrade/civilian
- name = "Civilian Paygrade"
- pay_multiplier = 0.5 // civvies are poor
-
-/datum/paygrade/civilian/civilian
- paygrade = "C"
- name = "Civilian"
-
-/datum/paygrade/civilian/nurse
- paygrade = "CN"
- name = "Nurse"
- prefix = "Nrs."
-
-/datum/paygrade/civilian/doctor
- paygrade = "CD"
- name = "Doctor"
- prefix = "Dr."
- pay_multiplier = 0.75
-
-/datum/paygrade/civilian/professor
- paygrade = "CCMO"
- name = "Professor"
- prefix = "Prof."
- pay_multiplier = 1
-
-/datum/paygrade/civillian/representative
- paygrade = "CR"
- name = "Representative"
- prefix = "Rep."
- pay_multiplier = 1
diff --git a/code/datums/paygrades/factions/other/civilian.dm b/code/datums/paygrades/factions/other/civilian.dm
new file mode 100644
index 000000000000..6587a82a54d6
--- /dev/null
+++ b/code/datums/paygrades/factions/other/civilian.dm
@@ -0,0 +1,52 @@
+/datum/paygrade/civilian
+ name = "Civilian Paygrade"
+ pay_multiplier = 0.5 // civvies are poor
+
+/datum/paygrade/civilian/civilian
+ paygrade = PAY_SHORT_CIV
+ name = "Civilian"
+ prefix = "C"
+
+/datum/paygrade/civilian/nurse
+ paygrade = PAY_SHORT_CNUR
+ name = "Nurse"
+ prefix = "Nrs."
+
+/datum/paygrade/civilian/doctor
+ paygrade = PAY_SHORT_CDOC
+ name = "Doctor"
+ prefix = "Dr."
+ pay_multiplier = 0.75
+
+/datum/paygrade/civilian/professor
+ paygrade = PAY_SHORT_CCMO
+ name = "Professor"
+ prefix = "Prof."
+ pay_multiplier = 1
+
+/datum/paygrade/civillian/representative
+ paygrade = PAY_SHORT_CREP
+ name = "Representative"
+ prefix = "Rep."
+ pay_multiplier = 1
+
+/datum/paygrade/civillian/officer
+ paygrade = PAY_SHORT_CPO
+ name = "Officer"
+ prefix = "Off."
+ pay_multiplier = 0.66
+
+/datum/paygrade/civillian/officer/senior
+ paygrade = PAY_SHORT_CSPO
+ name = "Senior Officer"
+ prefix = "Sr. Off."
+ pay_multiplier = 0.8
+
+/datum/paygrade/civilian/rebel
+ paygrade = PAY_SHORT_REB
+ name = "Rebel"
+
+/datum/paygrade/civilian/rebel/leader
+ paygrade = PAY_SHORT_REBC
+ name = "Rebel Commander"
+ prefix = "CMDR."
diff --git a/code/datums/paygrades/factions/other/cmb.dm b/code/datums/paygrades/factions/other/cmb.dm
index a4b656d8692d..eeeb061ea335 100644
--- a/code/datums/paygrades/factions/other/cmb.dm
+++ b/code/datums/paygrades/factions/other/cmb.dm
@@ -3,78 +3,29 @@
pay_multiplier = 1.4 // Government work. Nice benefits.
/datum/paygrade/cmb/standard
- paygrade = "GS-9"
+ paygrade = PAY_SHORT_CMBD
name = "CMB Deputy"
prefix = "Dep."
/datum/paygrade/cmb/leader
- paygrade = "GS-13"
+ paygrade = PAY_SHORT_CMBM
name = "CMB Marshal"
prefix = "Marshal"
/datum/paygrade/cmb/syn
- paygrade = "GS-C.9"
+ paygrade = PAY_SHORT_CMBS
name = "CMB Investigative Synthetic"
-/datum/paygrade/cmb/liaison
- paygrade = "GS-6"
+/datum/paygrade/cmb/icc
+ paygrade = PAY_SHORT_ICCA
+ name = "Interstellar Commerce Commission Agent"
+ prefix = "Agent"
+
+/datum/paygrade/cmb/icc/liaison
+ paygrade = PAY_SHORT_ICCL
name = "Interstellar Commerce Commission Corporate Liaison"
prefix = "Exec."
/datum/paygrade/cmb/observer
- paygrade = "GS-3"
+ paygrade = PAY_SHORT_IHRO
name = "Interstellar Human Rights Observer"
-/datum/paygrade/marine
- name = "Marine Paygrade"
- rank_pin = /obj/item/clothing/accessory/ranks/marine
- pay_multiplier = 1
-
-// ENLISTED PAYGRADES
-
-/datum/paygrade/marine/e1
- paygrade = "ME1"
- name = "Private"
- prefix = "PVT"
- rank_pin = /obj/item/clothing/accessory/ranks/marine/e1
- ranking = 0
- pay_multiplier = 0.8
-
-/datum/paygrade/marine/e2
- paygrade = "ME2"
- name = "Private First Class"
- prefix = "PFC"
- rank_pin = /obj/item/clothing/accessory/ranks/marine/e2
- ranking = 1
- pay_multiplier = 1 // the default.
-
-/datum/paygrade/marine/e3
- paygrade = "ME3"
- name = "Lance Corporal"
- prefix = "LCpl"
- rank_pin = /obj/item/clothing/accessory/ranks/marine/e3
- ranking = 2
- pay_multiplier = 1.4
-
-/datum/paygrade/marine/e4
- paygrade = "ME4"
- name = "Corporal"
- prefix = "Cpl"
- rank_pin = /obj/item/clothing/accessory/ranks/marine/e4
- ranking = 3
- pay_multiplier = 1.6
-
-/datum/paygrade/marine/e5
- paygrade = "ME5"
- name = "Sergeant"
- prefix = "Sgt"
- rank_pin = /obj/item/clothing/accessory/ranks/marine/e5
- ranking = 4
- pay_multiplier = 1.8
-
-/datum/paygrade/marine/e6
- paygrade = "ME6"
- name = "Staff Sergeant"
- prefix = "SSgt"
- rank_pin = /obj/item/clothing/accessory/ranks/marine/e6
- ranking = 5
- pay_multiplier = 2
diff --git a/code/datums/paygrades/factions/other/dutch_dozen.dm b/code/datums/paygrades/factions/other/dutch_dozen.dm
index 9b8bd7e4f8c4..8877bd11afbb 100644
--- a/code/datums/paygrades/factions/other/dutch_dozen.dm
+++ b/code/datums/paygrades/factions/other/dutch_dozen.dm
@@ -1,33 +1,33 @@
/datum/paygrade/dutch
name = "Dutch Paygrade"
pay_multiplier = 5
+ fprefix = "DTC."
/datum/paygrade/dutch/standard
- paygrade = "DTC"
+ paygrade = PAY_SHORT_DTC
name = "Dutch's Dozen Standard Mercenary"
- prefix = "DTC."
/datum/paygrade/dutch/medic
- paygrade = "DTCM"
+ paygrade = PAY_SHORT_DTCM
name = "Dutch's Dozen Medic"
- prefix = "DTC MED."
+ prefix = "MED."
pay_multiplier = 6
/datum/paygrade/dutch/specialist_flamer
- paygrade = "DTCF"
+ paygrade = PAY_SHORT_DTCF
name = "Dutch's Dozen Flamethrower Specialist"
- prefix = "DTC SPC."
+ prefix = "SPC."
pay_multiplier = 6
/datum/paygrade/dutch/specialist_minigunner
- paygrade = "DTCMG"
- name = "Dutch's Dozen Medic"
- prefix = "DTC SPC."
+ paygrade = PAY_SHORT_DTCMG
+ name = "Dutch's Dozen Machinegunner"
+ prefix = "SPC."
pay_multiplier = 6
/datum/paygrade/dutch/arnold
- paygrade = "ARN"
- name = "Arnold"
- prefix = "DTC LDR."
+ paygrade = PAY_SHORT_DTCA
+ name = "Major"
+ prefix = "LDR."
pay_multiplier = 9
diff --git a/code/datums/paygrades/factions/other/misc.dm b/code/datums/paygrades/factions/other/misc.dm
index 30865228d3af..04e522580b50 100644
--- a/code/datums/paygrades/factions/other/misc.dm
+++ b/code/datums/paygrades/factions/other/misc.dm
@@ -1,9 +1,9 @@
-/datum/paygrade/misc/operator
+/datum/paygrade/misc/operative
name = "Operative"
- paygrade = "O"
+ paygrade = PAY_SHORT_OPR
pay_multiplier = 1 //????
/datum/paygrade/misc/synth
name = "Synthetic"
- paygrade = "SYN"
+ paygrade = PAY_SHORT_SYN
pay_multiplier = 1
diff --git a/code/datums/paygrades/factions/upp/upp.dm b/code/datums/paygrades/factions/upp/upp.dm
index a1363383ad55..8670f99269dc 100644
--- a/code/datums/paygrades/factions/upp/upp.dm
+++ b/code/datums/paygrades/factions/upp/upp.dm
@@ -5,115 +5,115 @@
//UPP Enlisted
/datum/paygrade/upp/ue0
- paygrade = "UE0"
+ paygrade = PAY_SHORT_UEC
name = "Conscript"
pay_multiplier = 0.05
/datum/paygrade/upp/ue1
- paygrade = "UE1"
+ paygrade = PAY_SHORT_UE1
name = "Private"
prefix = "PVT."
/datum/paygrade/upp/ue2
- paygrade = "UE2"
+ paygrade = PAY_SHORT_UE2
name = "Private First Class"
prefix = "PFC."
pay_multiplier = 0.2
/datum/paygrade/upp/ue3
- paygrade = "UE3"
+ paygrade = PAY_SHORT_UE3
name = "Korporal"
prefix = "Kpl."
pay_multiplier = 0.3
/datum/paygrade/upp/ue4
- paygrade = "UE4"
+ paygrade = PAY_SHORT_UE4
name = "Junior Serzhant"
prefix = "JrSzh."
pay_multiplier = 0.5
/datum/paygrade/upp/ue5
- paygrade = "UE5"
+ paygrade = PAY_SHORT_UE5
name = "Serzhant"
prefix = "Szh."
pay_multiplier = 0.7
/datum/paygrade/upp/ue6
- paygrade = "UE6"
+ paygrade = PAY_SHORT_UE6
name = "Master Serzhant"
prefix = "MSzh."
pay_multiplier = 0.9
//UPP Commandos
/datum/paygrade/upp/uc1
- paygrade = "UC1"
+ paygrade = PAY_SHORT_UC1
name = "Junior Kommando"
prefix = "JKdo."
pay_multiplier = 1.5
/datum/paygrade/upp/uc2
- paygrade = "UC2"
+ paygrade = PAY_SHORT_UC2
name = "2nd Kommando"
prefix = "2ndKdo."
pay_multiplier = 2
/datum/paygrade/upp/uc3
- paygrade = "UC3"
+ paygrade = PAY_SHORT_UC3
name = "1st Kommando"
prefix = "1stKdo."
pay_multiplier = 2.5
//UPP Officers
/datum/paygrade/upp/uo1
- paygrade = "UO1"
+ paygrade = PAY_SHORT_UO1
name = "Leytenant"
prefix = "Lt."
pay_multiplier = 1.25
/datum/paygrade/upp/uo2
- paygrade = "UO2"
+ paygrade = PAY_SHORT_UO2
name = "Senior Leytenant"
prefix = "Sr. LT."
pay_multiplier = 1.5
/datum/paygrade/upp/uo3
- paygrade = "UO3"
+ paygrade = PAY_SHORT_UO3
name = "Kapitan"
prefix = "Kpt."
pay_multiplier = 2
/datum/paygrade/upp/uo4
- paygrade = "UO4"
- name = "Mayjor."
+ paygrade = PAY_SHORT_UO4
+ name = "Mayjor"
prefix = "May."
pay_multiplier = 2.5
/datum/paygrade/upp/uo5
- paygrade = "UO5"
+ paygrade = PAY_SHORT_UO5
name = "Leytenant Kolonel"
prefix = "Lt. Kol."
pay_multiplier = 3
/datum/paygrade/upp/uo6
- paygrade = "UO6"
+ paygrade = PAY_SHORT_UO6
name = "Kolonel"
prefix = "Kol."
pay_multiplier = 4
/datum/paygrade/upp/uo7
- paygrade = "UO7"
+ paygrade = PAY_SHORT_UO7
name = "Mayjor General"
prefix = "May. Gen."
pay_multiplier = 5
/datum/paygrade/upp/uo8
- paygrade = "UO8"
+ paygrade = PAY_SHORT_UO8
name = "Leytenant General"
prefix = "Lt. Gen."
pay_multiplier = 6
/datum/paygrade/upp/uo9
- paygrade = "UO9"
+ paygrade = PAY_SHORT_UO9
name = "Army General"
prefix = "Gen."
pay_multiplier = 7
diff --git a/code/datums/paygrades/factions/uscm/marine.dm b/code/datums/paygrades/factions/uscm/marine.dm
index e351311e65ee..7d315f364025 100644
--- a/code/datums/paygrades/factions/uscm/marine.dm
+++ b/code/datums/paygrades/factions/uscm/marine.dm
@@ -6,7 +6,7 @@
// ENLISTED PAYGRADES
/datum/paygrade/marine/e1
- paygrade = "ME1"
+ paygrade = PAY_SHORT_ME1
name = "Private"
prefix = "PVT"
rank_pin = /obj/item/clothing/accessory/ranks/marine/e1
@@ -14,7 +14,7 @@
pay_multiplier = 1.6
/datum/paygrade/marine/e2
- paygrade = "ME2"
+ paygrade = PAY_SHORT_ME2
name = "Private First Class"
prefix = "PFC"
rank_pin = /obj/item/clothing/accessory/ranks/marine/e2
@@ -22,7 +22,7 @@
pay_multiplier = 1.7
/datum/paygrade/marine/e3
- paygrade = "ME3"
+ paygrade = PAY_SHORT_ME3
name = "Lance Corporal"
prefix = "LCpl"
rank_pin = /obj/item/clothing/accessory/ranks/marine/e3
@@ -30,7 +30,7 @@
pay_multiplier = 1.9
/datum/paygrade/marine/e4
- paygrade = "ME4"
+ paygrade = PAY_SHORT_ME4
name = "Corporal"
prefix = "Cpl"
rank_pin = /obj/item/clothing/accessory/ranks/marine/e4
@@ -38,7 +38,7 @@
pay_multiplier = 2.1
/datum/paygrade/marine/e5
- paygrade = "ME5"
+ paygrade = PAY_SHORT_ME5
name = "Sergeant"
prefix = "Sgt"
rank_pin = /obj/item/clothing/accessory/ranks/marine/e5
@@ -46,7 +46,7 @@
pay_multiplier = 2.2
/datum/paygrade/marine/e6
- paygrade = "ME6"
+ paygrade = PAY_SHORT_ME6
name = "Staff Sergeant"
prefix = "SSgt"
rank_pin = /obj/item/clothing/accessory/ranks/marine/e6
@@ -54,7 +54,7 @@
pay_multiplier = 2.4
/datum/paygrade/marine/e7
- paygrade = "ME7"
+ paygrade = PAY_SHORT_ME7
name = "Gunnery Sergeant"
prefix = "GySgt"
rank_pin = /obj/item/clothing/accessory/ranks/marine/e7
@@ -62,7 +62,7 @@
pay_multiplier = 2.75
/datum/paygrade/marine/e8
- paygrade = "ME8"
+ paygrade = PAY_SHORT_ME8
name = "Master Sergeant"
prefix = "MSgt"
rank_pin = /obj/item/clothing/accessory/ranks/marine/e8
@@ -70,7 +70,7 @@
pay_multiplier = 2.75
/datum/paygrade/marine/e8e
- paygrade = "ME8E"
+ paygrade = PAY_SHORT_ME8E
name = "First Sergeant"
prefix = "1Sgt"
rank_pin = /obj/item/clothing/accessory/ranks/marine/e8e
@@ -78,7 +78,7 @@
pay_multiplier = 2.75
/datum/paygrade/marine/e9
- paygrade = "ME9"
+ paygrade = PAY_SHORT_ME9
name = "Master Gunnery Sergeant"
prefix = "MGySgt"
rank_pin = /obj/item/clothing/accessory/ranks/marine/e9
@@ -86,7 +86,7 @@
pay_multiplier = 3
/datum/paygrade/marine/e9e
- paygrade = "ME9E"
+ paygrade = PAY_SHORT_ME9E
name = "Sergeant Major"
prefix = "SgtMaj"
rank_pin = /obj/item/clothing/accessory/ranks/marine/e9e
@@ -94,7 +94,7 @@
pay_multiplier = 3
/datum/paygrade/marine/e9c
- paygrade = "ME9C"
+ paygrade = PAY_SHORT_ME9C
name = "Sergeant Major of the Colonial Marine Corps"
prefix = "SMCMC"
rank_pin = /obj/item/clothing/accessory/ranks/marine/e9c
@@ -104,7 +104,7 @@
// COMMISSIONED PAYGRADES
/datum/paygrade/marine/o1
- paygrade = "MO1"
+ paygrade = PAY_SHORT_MO1
name = "Second Lieutenant"
prefix = "2ndLt"
rank_pin = /obj/item/clothing/accessory/ranks/marine/o1
@@ -112,7 +112,7 @@
pay_multiplier = 3
/datum/paygrade/marine/o2
- paygrade = "MO2"
+ paygrade = PAY_SHORT_MO2
name = "First Lieutenant"
prefix = "1stLt"
rank_pin = /obj/item/clothing/accessory/ranks/marine/o2
@@ -120,7 +120,7 @@
pay_multiplier = 3.2
/datum/paygrade/marine/o3
- paygrade = "MO3"
+ paygrade = PAY_SHORT_MO3
name = "Captain"
prefix = "Capt"
rank_pin = /obj/item/clothing/accessory/ranks/marine/o3
@@ -128,7 +128,7 @@
pay_multiplier = 4
/datum/paygrade/marine/o4
- paygrade = "MO4"
+ paygrade = PAY_SHORT_MO4
name = "Major"
prefix = "Maj"
rank_pin = /obj/item/clothing/accessory/ranks/marine/o4
@@ -136,7 +136,7 @@
pay_multiplier = 4
/datum/paygrade/marine/o5
- paygrade = "MO5"
+ paygrade = PAY_SHORT_MO5
name = "Lieutenant Colonel"
prefix = "LtCol"
rank_pin = /obj/item/clothing/accessory/ranks/marine/o5
@@ -145,7 +145,7 @@
//Platoon Commander
/datum/paygrade/marine/o6
- paygrade = "MO6"
+ paygrade = PAY_SHORT_MO6
name = "Colonel"
prefix = "Col"
rank_pin = /obj/item/clothing/accessory/ranks/marine/o6
@@ -153,7 +153,7 @@
pay_multiplier = 4.4
/datum/paygrade/marine/o6e
- paygrade = "MO6E"
+ paygrade = PAY_SHORT_MO6E
name = "Senior Colonel"
prefix = "Snr Col."
rank_pin = /obj/item/clothing/accessory/ranks/marine/o6e
@@ -161,7 +161,7 @@
pay_multiplier = 4.6
/datum/paygrade/marine/o6c
- paygrade = "MO6C"
+ paygrade = PAY_SHORT_MO6C
name = "Division Colonel"
prefix = "Div Col."
rank_pin = /obj/item/clothing/accessory/ranks/marine/o6c
@@ -170,7 +170,7 @@
//High Command
/datum/paygrade/marine/o7
- paygrade = "MO7"
+ paygrade = PAY_SHORT_MO7
name = "Brigadier General"
prefix = "BGen"
rank_pin = /obj/item/clothing/accessory/ranks/marine/o7
@@ -178,7 +178,7 @@
pay_multiplier = 6
/datum/paygrade/marine/o8
- paygrade = "MO8"
+ paygrade = PAY_SHORT_MO8
name = "Major General"
prefix = "MajGen"
rank_pin = /obj/item/clothing/accessory/ranks/marine/o8
@@ -186,7 +186,7 @@
pay_multiplier = 6.2
/datum/paygrade/marine/o9
- paygrade = "MO9"
+ paygrade = PAY_SHORT_MO9
name = "Lieutenant General"
prefix = "LtGen"
rank_pin = /obj/item/clothing/accessory/ranks/marine/o9
@@ -194,7 +194,7 @@
pay_multiplier = 6.4
/datum/paygrade/marine/o10
- paygrade = "MO10"
+ paygrade = PAY_SHORT_MO10
name = "General"
prefix = "Gen"
rank_pin = /obj/item/clothing/accessory/ranks/marine/o10
@@ -202,7 +202,7 @@
pay_multiplier = 6.6
/datum/paygrade/marine/o10c
- paygrade = "MO10C"
+ paygrade = PAY_SHORT_MO10C
name = "Assistant Commandant of the Marine Corps"
prefix = "ACMC"
rank_pin = /obj/item/clothing/accessory/ranks/marine/o10c
@@ -210,7 +210,7 @@
pay_multiplier = 6.8
/datum/paygrade/marine/o10s
- paygrade = "MO10S"
+ paygrade = PAY_SHORT_MO10S
name = "Commandant of the Marine Corps"
prefix = "CMC"
rank_pin = /obj/item/clothing/accessory/ranks/marine/o10c
diff --git a/code/datums/paygrades/factions/uscm/navy.dm b/code/datums/paygrades/factions/uscm/navy.dm
index 7e648a75bac2..9e22c72fe566 100644
--- a/code/datums/paygrades/factions/uscm/navy.dm
+++ b/code/datums/paygrades/factions/uscm/navy.dm
@@ -6,77 +6,77 @@
// ENLISTED PAYGRADES
/datum/paygrade/navy/e1
- paygrade = "NE1"
+ paygrade = PAY_SHORT_NE1
name = "Seaman Recruit"
prefix = "SR."
rank_pin = /obj/item/clothing/accessory/ranks/navy/e1
ranking = 0
/datum/paygrade/navy/e2
- paygrade = "NE2"
+ paygrade = PAY_SHORT_NE2
name = "Seaman Apprentice"
prefix = "SA."
rank_pin = /obj/item/clothing/accessory/ranks/navy/e2
ranking = 1
/datum/paygrade/navy/e3
- paygrade = "NE3"
+ paygrade = PAY_SHORT_NE3
name = "Seaman"
prefix = "SN."
rank_pin = /obj/item/clothing/accessory/ranks/navy/e3
ranking = 2
/datum/paygrade/navy/e4
- paygrade = "NE4"
+ paygrade = PAY_SHORT_NE4
name = "Petty Officer 3rd Class"
prefix = "PO1."
rank_pin = /obj/item/clothing/accessory/ranks/navy/e4
ranking = 3
/datum/paygrade/navy/e5
- paygrade = "NE5"
+ paygrade = PAY_SHORT_NE5
name = "Petty Officer 2nd Class"
prefix = "PO2."
rank_pin = /obj/item/clothing/accessory/ranks/navy/e5
ranking = 4
/datum/paygrade/navy/e6
- paygrade = "NE6"
+ paygrade = PAY_SHORT_NE6
name = "Petty Officer 1st Class"
prefix = "PO1."
rank_pin = /obj/item/clothing/accessory/ranks/navy/e6
ranking = 5
/datum/paygrade/navy/e7
- paygrade = "NE7"
+ paygrade = PAY_SHORT_NE7
name = "Chief Petty Officer"
prefix = "CPO."
rank_pin = /obj/item/clothing/accessory/ranks/navy/e7
ranking = 6
/datum/paygrade/navy/e8
- paygrade = "NE8"
+ paygrade = PAY_SHORT_NE8
name = "Senior Chief Petty Officer"
prefix = "SCPO."
rank_pin = /obj/item/clothing/accessory/ranks/navy/e8
ranking = 7
/datum/paygrade/navy/e8c
- paygrade = "NE8C"
+ paygrade = PAY_SHORT_NE8C
name = "Command Senior Chief Petty Officer"
prefix = "CSCPO."
rank_pin = /obj/item/clothing/accessory/ranks/navy/e8c
ranking = 8
/datum/paygrade/navy/e9
- paygrade = "NE9"
+ paygrade = PAY_SHORT_NE9
name = "Master Chief Petty Officer"
prefix = "MCPO."
rank_pin = /obj/item/clothing/accessory/ranks/navy/e9
ranking = 9
/datum/paygrade/navy/e9c
- paygrade = "NE9C"
+ paygrade = PAY_SHORT_NE9C
name = "Command Master Chief Petty Officer"
prefix = "CMCPO."
rank_pin = /obj/item/clothing/accessory/ranks/navy/e9c
@@ -85,91 +85,91 @@
// COMMISSIONED PAYGRADES
/datum/paygrade/navy/o1
- paygrade = "NO1"
+ paygrade = PAY_SHORT_NO1
name = "Ensign"
prefix = "ENS."
rank_pin = /obj/item/clothing/accessory/ranks/navy/o1
ranking = 11
/datum/paygrade/navy/o2
- paygrade = "NO2"
+ paygrade = PAY_SHORT_NO2
name = "Lieutenant Junior Grade"
prefix = "LTJG."
rank_pin = /obj/item/clothing/accessory/ranks/navy/o2
ranking = 12
/datum/paygrade/navy/o3
- paygrade = "NO3"
+ paygrade = PAY_SHORT_NO3
name = "Lieutenant"
prefix = "LT."
rank_pin = /obj/item/clothing/accessory/ranks/navy/o3
ranking = 13
/datum/paygrade/navy/o4
- paygrade = "NO4"
+ paygrade = PAY_SHORT_NO4
name = "Lieutenant Commander"
prefix = "LCDR."
rank_pin = /obj/item/clothing/accessory/ranks/navy/o4
ranking = 14
/datum/paygrade/navy/o5
- paygrade = "NO5"
+ paygrade = PAY_SHORT_NO5
name = "Commander"
prefix = "CDR."
rank_pin = /obj/item/clothing/accessory/ranks/navy/o5
ranking = 15
/datum/paygrade/navy/o6
- paygrade = "NO6"
+ paygrade = PAY_SHORT_NO6
name = "Captain"
prefix = "CAPT."
rank_pin = /obj/item/clothing/accessory/ranks/navy/o6
ranking = 16
/datum/paygrade/navy/o6e
- paygrade = "NO6E"
+ paygrade = PAY_SHORT_NO6E
name = "Commodore"
prefix = "CDRE."
rank_pin = /obj/item/clothing/accessory/ranks/navy/o6e
ranking = 17
/datum/paygrade/navy/o6c
- paygrade = "NO6C"
+ paygrade = PAY_SHORT_NO6C
name = "Senior Commodore"
prefix = "Snr CDRE."
rank_pin = /obj/item/clothing/accessory/ranks/navy/o6e
ranking = 18
/datum/paygrade/navy/o7
- paygrade = "NO7"
+ paygrade = PAY_SHORT_NO7
name = "Rear Admiral (Lower Half)"
prefix = "RDML."
rank_pin = /obj/item/clothing/accessory/ranks/navy/o7
ranking = 19
/datum/paygrade/navy/o8
- paygrade = "NO8"
+ paygrade = PAY_SHORT_NO8
name = "Rear Admiral (Upper Half)"
prefix = "RADM."
rank_pin = /obj/item/clothing/accessory/ranks/navy/o8
ranking = 20
/datum/paygrade/navy/o9
- paygrade = "NO9"
+ paygrade = PAY_SHORT_NO9
name = "Vice Admiral"
prefix = "VADM."
rank_pin = /obj/item/clothing/accessory/ranks/navy/o9
ranking = 21
/datum/paygrade/navy/o10
- paygrade = "NO10"
+ paygrade = PAY_SHORT_NO10
name = "Admiral"
prefix = "ADM."
rank_pin = /obj/item/clothing/accessory/ranks/navy/o10
ranking = 22
/datum/paygrade/navy/o10c
- paygrade = "NO10C"
+ paygrade = PAY_SHORT_NO10C
name = "Chief of Naval Operations"
prefix = "CNO."
rank_pin = /obj/item/clothing/accessory/ranks/navy/o10c
diff --git a/code/datums/paygrades/factions/uscm/provost.dm b/code/datums/paygrades/factions/uscm/provost.dm
index b27c8f7f721f..e378bd7beb61 100644
--- a/code/datums/paygrades/factions/uscm/provost.dm
+++ b/code/datums/paygrades/factions/uscm/provost.dm
@@ -2,44 +2,23 @@
name = "Provost Paygrade"
pay_multiplier = 2
-/datum/paygrade/provost/officer
- paygrade = "PvE7"
- name = "Chief Petty Officer"
- prefix = "CPO."
- rank_pin = /obj/item/clothing/accessory/ranks/navy/e7/pvst
-
-/datum/paygrade/provost/enforcer
- paygrade = "PvE8"
- name = "Senior Chief Petty Officer"
- prefix = "SCPO."
- rank_pin = /obj/item/clothing/accessory/ranks/navy/e8/pvst
-
-/datum/paygrade/provost/tml
- paygrade = "PvE9"
- name = "Master Chief Petty Officer"
- prefix = "MCPO."
- rank_pin = /obj/item/clothing/accessory/ranks/navy/e9/pvst
-
/datum/paygrade/provost/inspector
- paygrade = "PvI"
- name = "Inspector"
+ paygrade = PAY_SHORT_PVI
+ name = "Provost Inspector"
prefix = "Insp."
rank_pin = /obj/item/clothing/accessory/ranks/special/insp
/datum/paygrade/provost/marshal
- paygrade = "PvO8"
- name = "Rear Admiral"
- prefix = "RADM."
- rank_pin = /obj/item/clothing/accessory/ranks/navy/o8/pvst
+ paygrade = PAY_SHORT_PVM
+ name = "Provost Marshal"
+ prefix = "Marshal"
/datum/paygrade/provost/sectormarshal
- paygrade = "PvO9"
- name = "Vice Admiral"
- prefix = "VADM."
- rank_pin = /obj/item/clothing/accessory/ranks/navy/o9/pvst
+ paygrade = PAY_SHORT_PVSM
+ name = "Provost Sector Marshal"
+ prefix = "S. Marshal"
/datum/paygrade/provost/chiefmarshal
- paygrade = "PvCM"
+ paygrade = PAY_SHORT_PVCM
name = "Provost Chief Marshal"
- prefix = "PCM."
- rank_pin = /obj/item/clothing/accessory/ranks/navy/o10c/pvst
+ prefix = "Chief Marshal"
diff --git a/code/datums/paygrades/factions/wy/goons.dm b/code/datums/paygrades/factions/wy/goons.dm
deleted file mode 100644
index 679bb42e7f76..000000000000
--- a/code/datums/paygrades/factions/wy/goons.dm
+++ /dev/null
@@ -1,15 +0,0 @@
-/datum/paygrade/goon
- name = "WY Goon Paygrade"
- pay_multiplier = 0.66 // better than colonists. barely.
-
-//Standard PMCs
-/datum/paygrade/goon/standard
- paygrade = "WEY-GOON"
- name = "Officer"
- prefix = "Off."
-
-/datum/paygrade/goon/lead
- paygrade = "WEY-GOON-L"
- name = "Senior Officer"
- prefix = "Sr. Off."
- pay_multiplier = 0.8
diff --git a/code/datums/paygrades/factions/wy/wy.dm b/code/datums/paygrades/factions/wy/wy.dm
index 03d54cbd3cda..58ec9eb3f197 100644
--- a/code/datums/paygrades/factions/wy/wy.dm
+++ b/code/datums/paygrades/factions/wy/wy.dm
@@ -3,69 +3,69 @@
pay_multiplier = 1
/datum/paygrade/wy_ranks/wyc1
- paygrade = "WYC1"
+ paygrade = PAY_SHORT_WYC1
name = "Trainee"
prefix = "Trn."
ranking = 0
/datum/paygrade/wy_ranks/wyc2
- paygrade = "WYC2"
+ paygrade = PAY_SHORT_WYC2
name = "Junior Executive"
prefix = "Jr. Exec."
ranking = 1
pay_multiplier = 2
/datum/paygrade/wy_ranks/wyc3
- paygrade = "WYC3"
+ paygrade = PAY_SHORT_WYC3
name = "Executive"
prefix = "Exec."
ranking = 2
pay_multiplier = 3
/datum/paygrade/wy_ranks/wyc4
- paygrade = "WYC4"
+ paygrade = PAY_SHORT_WYC4
name = "Senior Executive"
prefix = "Sr. Exec."
ranking = 3
pay_multiplier = 4
/datum/paygrade/wy_ranks/wyc5
- paygrade = "WYC5"
+ paygrade = PAY_SHORT_WYC5
name = "Executive Specialist"
prefix = "Exec. Spc."
ranking = 4
pay_multiplier = 5
/datum/paygrade/wy_ranks/wyc6
- paygrade = "WYC6"
+ paygrade = PAY_SHORT_WYC6
name = "Executive Supervisor"
prefix = "Exec. Suvp."
ranking = 5
pay_multiplier = 6
/datum/paygrade/wy_ranks/wyc7
- paygrade = "WYC7"
+ paygrade = PAY_SHORT_WYC7
name = "Assistant Manager"
prefix = "Assis. Mng."
ranking = 6
pay_multiplier = 7
/datum/paygrade/wy_ranks/wyc8
- paygrade = "WYC8"
+ paygrade = PAY_SHORT_WYC8
name = "Division Manager"
prefix = "Div. Mng."
ranking = 7
pay_multiplier = 8
/datum/paygrade/wy_ranks/wyc9
- paygrade = "WYC9"
+ paygrade = PAY_SHORT_WYC9
name = "Chief Executive"
prefix = "Chief. Exec."
ranking = 8
pay_multiplier = 9
/datum/paygrade/wy_ranks/wyc10
- paygrade = "WYC10"
+ paygrade = PAY_SHORT_WYC10
name = "Director"
prefix = "Director"
ranking = 9
diff --git a/code/datums/paygrades/paygrade.dm b/code/datums/paygrades/paygrade.dm
index bb0a3aa84bfa..cc336319278a 100644
--- a/code/datums/paygrades/paygrade.dm
+++ b/code/datums/paygrades/paygrade.dm
@@ -26,36 +26,36 @@ GLOBAL_LIST_INIT_TYPED(paygrades, /datum/paygrade, setup_paygrades())
GLOBAL_LIST_INIT(highcom_paygrades, list(
"PvI",
- "NO7",
- "MO7",
- "NO8",
- "MO8",
- "NO9",
- "MO9",
- "NO10",
- "MO10",
- "NO10C",
- "MO10C",
+ PAY_SHORT_NO7,
+ PAY_SHORT_MO7,
+ PAY_SHORT_NO8,
+ PAY_SHORT_MO8,
+ PAY_SHORT_NO9,
+ PAY_SHORT_MO9,
+ PAY_SHORT_NO10,
+ PAY_SHORT_MO10,
+ PAY_SHORT_NO10C,
+ PAY_SHORT_MO10C,
"PvO8",
"PvO9",
"PvCM"
))
GLOBAL_LIST_INIT(co_paygrades, list(
- "NO6",
- "NO6E",
- "NO6C",
- "NO5",
- "NO4",
- "MO6",
- "MO6E",
- "MO6C",
- "MO5",
- "MO4"
+ PAY_SHORT_NO6,
+ PAY_SHORT_NO6E,
+ PAY_SHORT_NO6C,
+ PAY_SHORT_NO5,
+ PAY_SHORT_NO4,
+ PAY_SHORT_MO6,
+ PAY_SHORT_MO6E,
+ PAY_SHORT_MO6C,
+ PAY_SHORT_MO5,
+ PAY_SHORT_MO4
))
GLOBAL_LIST_INIT(wy_paygrades, list(
- "WYC8",
- "WYC9",
- "WYC10"
+ PAY_SHORT_WYC8,
+ PAY_SHORT_WYC9,
+ PAY_SHORT_WYC10
))
diff --git a/code/datums/supply_packs/operations.dm b/code/datums/supply_packs/operations.dm
index 707d4c9cf4db..e5525504716a 100644
--- a/code/datums/supply_packs/operations.dm
+++ b/code/datums/supply_packs/operations.dm
@@ -107,10 +107,10 @@
/datum/supply_packs/spec_kits
name = "Weapons Specialist Kits"
contains = list(
- /obj/item/spec_kit/asrs,
- /obj/item/spec_kit/asrs,
- /obj/item/spec_kit/asrs,
- /obj/item/spec_kit/asrs,
+ /obj/item/spec_kit/rifleman,
+ /obj/item/spec_kit/rifleman,
+ /obj/item/spec_kit/rifleman,
+ /obj/item/spec_kit/rifleman,
)
cost = 0
containertype = /obj/structure/closet/crate/supply
diff --git a/code/defines/procs/records.dm b/code/defines/procs/records.dm
index a1e2ade2b709..a9d40f993629 100644
--- a/code/defines/procs/records.dm
+++ b/code/defines/procs/records.dm
@@ -1,48 +1,50 @@
/proc/CreateGeneralRecord()
- var/datum/data/record/G = new /datum/data/record()
- G.fields["name"] = "New Record"
- G.fields["id"] = text("[]", add_zero(num2hex(rand(1, 1.6777215E7)), 6))
- G.fields["rank"] = "Unassigned"
- G.fields["real_rank"] = "Unassigned"
- G.fields["sex"] = "Male"
- G.fields["age"] = "Unknown"
- G.fields["ethnicity"] = "Unknown"
- G.fields["p_stat"] = "Active"
- G.fields["m_stat"] = "Stable"
- G.fields["species"] = "Human"
- G.fields["origin"] = "Unknown"
- G.fields["faction"] = "Unknown"
- G.fields["mob_faction"] = "Unknown"
- G.fields["religion"] = "Unknown"
- GLOB.data_core.general += G
- return G
+ var/datum/data/record/general_record = new /datum/data/record()
+ general_record.fields["name"] = "New Record"
+ general_record.name = "New Record"
+ general_record.fields["id"] = text("[]", add_zero(num2hex(rand(1, 1.6777215E7)), 6))
+ general_record.fields["rank"] = "Unassigned"
+ general_record.fields["real_rank"] = "Unassigned"
+ general_record.fields["sex"] = "Male"
+ general_record.fields["age"] = "Unknown"
+ general_record.fields["ethnicity"] = "Unknown"
+ general_record.fields["p_stat"] = "Active"
+ general_record.fields["m_stat"] = "Stable"
+ general_record.fields["species"] = "Human"
+ general_record.fields["origin"] = "Unknown"
+ general_record.fields["faction"] = "Unknown"
+ general_record.fields["mob_faction"] = "Unknown"
+ general_record.fields["religion"] = "Unknown"
+ GLOB.data_core.general += general_record
+ return general_record
/proc/CreateSecurityRecord(name as text, id as text)
- var/datum/data/record/R = new /datum/data/record()
- R.fields["name"] = name
- R.fields["id"] = id
- R.name = text("Security Record #[id]")
- R.fields["incidents"] = "None"
- GLOB.data_core.security += R
- return R
+ var/datum/data/record/security_record = new /datum/data/record()
+ security_record.fields["name"] = name
+ security_record.fields["id"] = id
+ security_record.name = text("Security Record #[id]")
+ security_record.fields["incidents"] = "None"
+ GLOB.data_core.security += security_record
+ return security_record
-/proc/create_medical_record(mob/living/carbon/human/H)
- var/datum/data/record/M = new /datum/data/record()
- M.fields["id"] = null
- M.fields["name"] = H.real_name
- M.fields["b_type"] = H.b_type
- M.fields["mi_dis"] = "None"
- M.fields["mi_dis_d"] = "No minor disabilities have been declared."
- M.fields["ma_dis"] = "None"
- M.fields["ma_dis_d"] = "No major disabilities have been diagnosed."
- M.fields["alg"] = "None"
- M.fields["alg_d"] = "No allergies have been detected in this patient."
- M.fields["cdi"] = "None"
- M.fields["cdi_d"] = "No diseases have been diagnosed at the moment."
- M.fields["last_scan_time"] = null
- M.fields["last_scan_result"] = "No scan data on record"
- M.fields["autodoc_data"] = list()
- M.fields["autodoc_manual"] = list()
- M.fields["ref"] = WEAKREF(H)
- GLOB.data_core.medical += M
- return M
+/proc/create_medical_record(mob/living/carbon/human/person)
+ var/datum/data/record/medical_record = new /datum/data/record()
+ medical_record.fields["id"] = null
+ medical_record.fields["name"] = person.real_name
+ medical_record.name = person.real_name
+ medical_record.fields["b_type"] = person.b_type
+ medical_record.fields["mi_dis"] = "None"
+ medical_record.fields["mi_dis_d"] = "No minor disabilities have been declared."
+ medical_record.fields["ma_dis"] = "None"
+ medical_record.fields["ma_dis_d"] = "No major disabilities have been diagnosed."
+ medical_record.fields["alg"] = "None"
+ medical_record.fields["alg_d"] = "No allergies have been detected in this patient."
+ medical_record.fields["cdi"] = "None"
+ medical_record.fields["cdi_d"] = "No diseases have been diagnosed at the moment."
+ medical_record.fields["last_scan_time"] = null
+ medical_record.fields["last_scan_result"] = "No scan data on record"
+ medical_record.fields["autodoc_data"] = list()
+ medical_record.fields["autodoc_manual"] = list()
+ medical_record.fields["ref"] = WEAKREF(person)
+ GLOB.data_core.medical += medical_record
+ return medical_record
diff --git a/code/game/gamemodes/colonialmarines/whiskey_outpost.dm b/code/game/gamemodes/colonialmarines/whiskey_outpost.dm
index 3bc56728a7b9..6ebda633a19b 100644
--- a/code/game/gamemodes/colonialmarines/whiskey_outpost.dm
+++ b/code/game/gamemodes/colonialmarines/whiskey_outpost.dm
@@ -9,7 +9,7 @@
/datum/game_mode/whiskey_outpost
name = GAMEMODE_WHISKEY_OUTPOST
config_tag = GAMEMODE_WHISKEY_OUTPOST
- required_players = 0
+ required_players = 140
xeno_bypass_timer = 1
flags_round_type = MODE_NEW_SPAWN
role_mappings = list(
@@ -76,10 +76,14 @@
hardcore = TRUE
votable = TRUE
- vote_cycle = 25 // approx. once every 5 days, if it wins the vote
+ vote_cycle = 75 // approx. once every 5 days, if it wins the vote
taskbar_icon = 'icons/taskbar/gml_wo.png'
+/datum/game_mode/whiskey_outpost/New()
+ . = ..()
+ required_players = CONFIG_GET(number/whiskey_required_players)
+
/datum/game_mode/whiskey_outpost/get_roles_list()
return GLOB.ROLES_WO
diff --git a/code/game/machinery/atmoalter/canister.dm b/code/game/machinery/atmoalter/canister.dm
index 32cb026a0b25..d62d688fcfc5 100644
--- a/code/game/machinery/atmoalter/canister.dm
+++ b/code/game/machinery/atmoalter/canister.dm
@@ -98,7 +98,7 @@ update_flag
/obj/structure/machinery/portable_atmospherics/canister/attackby(obj/item/W as obj, mob/user as mob)
if(!HAS_TRAIT(W, TRAIT_TOOL_WRENCH) && !istype(W, /obj/item/tank) && !istype(W, /obj/item/device/analyzer))
- visible_message(SPAN_DANGER("[user] hits the [src] with a [W]!"))
+ visible_message(SPAN_DANGER("[user] hits [src] with [W]!"))
update_health(W.force)
src.add_fingerprint(user)
..()
diff --git a/code/game/machinery/computer/HolodeckControl.dm b/code/game/machinery/computer/HolodeckControl.dm
index 715e9c2a86e5..55df45c70ccc 100644
--- a/code/game/machinery/computer/HolodeckControl.dm
+++ b/code/game/machinery/computer/HolodeckControl.dm
@@ -152,7 +152,7 @@
if(X.id == id)
X.score(side, 3)// 3 points for dunking a mob
// no break, to update multiple scoreboards
- visible_message(SPAN_DANGER("[user] dunks [M] into the [src]!"))
+ visible_message(SPAN_DANGER("[user] dunks [M] into [src]!"))
return
else if (istype(W, /obj/item) && get_dist(src,user)<2)
user.drop_inv_item_to_loc(W, loc)
@@ -160,7 +160,7 @@
if(X.id == id)
X.score(side)
// no break, to update multiple scoreboards
- visible_message(SPAN_NOTICE("[user] dunks [W] into the [src]!"))
+ visible_message(SPAN_NOTICE("[user] dunks [W] into [src]!"))
return
/obj/structure/holohoop/BlockedPassDirs(atom/movable/mover, target_dir)
diff --git a/code/game/machinery/computer/dropship_weapons.dm b/code/game/machinery/computer/dropship_weapons.dm
index fdab92ee4c13..d86b9fc28a28 100644
--- a/code/game/machinery/computer/dropship_weapons.dm
+++ b/code/game/machinery/computer/dropship_weapons.dm
@@ -64,7 +64,7 @@
power = MATRIX.power
else
- to_chat(user, SPAN_WARNING("matrix is not complete!"))
+ to_chat(user, SPAN_WARNING("Matrix is not complete!"))
/obj/structure/machinery/computer/dropship_weapons/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 0)
var/data[0]
diff --git a/code/game/machinery/computer/research.dm b/code/game/machinery/computer/research.dm
index 2c8a5689b495..1ba696eeee9c 100644
--- a/code/game/machinery/computer/research.dm
+++ b/code/game/machinery/computer/research.dm
@@ -29,7 +29,7 @@
if(!N.grant)
return
GLOB.chemical_data.update_credits(N.grant)
- visible_message(SPAN_NOTICE("[user] scans the [N.name] on the [src], collecting the [N.grant] research credits."))
+ visible_message(SPAN_NOTICE("[user] scans the [N.name] on [src], collecting the [N.grant] research credits."))
N.grant = 0
qdel(N)
return
@@ -61,7 +61,7 @@
visible_message(SPAN_NOTICE("[user] swipes their ID card on \the [src], but it is refused."))
return
if(card.clearance_access <= GLOB.chemical_data.clearance_level || (card.clearance_access == 6 && GLOB.chemical_data.clearance_level >= 5 && GLOB.chemical_data.clearance_x_access))
- visible_message(SPAN_NOTICE("[user] swipes the clearance card on the [src], but nothing happens."))
+ visible_message(SPAN_NOTICE("[user] swipes the clearance card on [src], but nothing happens."))
return
if(user.real_name != card.registered_name)
visible_message(SPAN_WARNING("WARNING: ILLEGAL CLEARANCE USER DETECTED. CARD DATA HAS BEEN WIPED."))
@@ -220,4 +220,3 @@
GLOB.chemical_data.update_credits(purchase_cost * -1)
visible_message(SPAN_NOTICE("Clearance Level X Acquired."))
playsound(loc, pick('sound/machines/computer_typing1.ogg','sound/machines/computer_typing2.ogg','sound/machines/computer_typing3.ogg'), 5, 1)
-
diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm
index 4e362ef12fac..b03ba1e8e195 100644
--- a/code/game/machinery/doors/airlock.dm
+++ b/code/game/machinery/doors/airlock.dm
@@ -557,7 +557,7 @@ GLOBAL_LIST_INIT(airlock_wire_descriptions, list(
if(istype(attacking_item, /obj/item/clothing/mask/cigarette))
if(isElectrified())
var/obj/item/clothing/mask/cigarette/L = attacking_item
- L.light(SPAN_NOTICE("[user] lights their [L] on an electrical arc from the [src]"))
+ L.light(SPAN_NOTICE("[user] lights their [L] on an electrical arc from [src]"))
return
if(!isRemoteControlling(user))
@@ -568,7 +568,7 @@ GLOBAL_LIST_INIT(airlock_wire_descriptions, list(
add_fingerprint(user)
if(istype(attacking_item, /obj/item/weapon/zombie_claws) && (welded || locked))
- user.visible_message(SPAN_NOTICE("[user] starts tearing into the door on the [src]!"), \
+ user.visible_message(SPAN_NOTICE("[user] starts tearing into the door on [src]!"), \
SPAN_NOTICE("You start prying your hand into the gaps of the door with your fingers... This will take about 30 seconds."), \
SPAN_NOTICE("You hear tearing noises!"))
@@ -845,7 +845,7 @@ GLOBAL_LIST_INIT(airlock_wire_descriptions, list(
for(var/i in resin_door_shmushereds)
if(istype(x,i)) //I would like to just use a if(locate() in ) here but Im not gonna add every child to GLOB.resin_door_shmushereds so it works
playsound(loc, "alien_resin_break", 25)
- visible_message(SPAN_WARNING("The [src.name] closes on the [x], shmushing it!"))
+ visible_message(SPAN_WARNING("The [src.name] closes on [x], shmushing it!"))
if(isturf(x))
var/turf/closed/wall/resin_wall_to_destroy = x
resin_wall_to_destroy.dismantle_wall()
diff --git a/code/game/machinery/fusion_engine.dm b/code/game/machinery/fusion_engine.dm
index 8e3097ef52d1..d7c7cc4c7d18 100644
--- a/code/game/machinery/fusion_engine.dm
+++ b/code/game/machinery/fusion_engine.dm
@@ -156,13 +156,13 @@
/obj/structure/machinery/power/fusion_engine/attackby(obj/item/O, mob/user)
if(istype(O, /obj/item/fuelCell))
if(is_on)
- to_chat(user, SPAN_WARNING("The [src] needs to be turned off first."))
+ to_chat(user, SPAN_WARNING("[src] needs to be turned off first."))
return TRUE
if(!fusion_cell)
if(user.drop_inv_item_to_loc(O, src))
fusion_cell = O
update_icon()
- to_chat(user, SPAN_NOTICE("You load the [src] with the [O]."))
+ to_chat(user, SPAN_NOTICE("You load [src] with [O]."))
return TRUE
else
to_chat(user, SPAN_WARNING("You need to remove the fuel cell from [src] first."))
diff --git a/code/game/machinery/iv_drip.dm b/code/game/machinery/iv_drip.dm
index 4b863bec043d..e16d2cacf63b 100644
--- a/code/game/machinery/iv_drip.dm
+++ b/code/game/machinery/iv_drip.dm
@@ -101,7 +101,7 @@
for(var/datum/reagent/chem in beaker.reagents.reagent_list)
reagentnames += ";[chem.name]"
- log_admin("[key_name(user)] put a [beaker] into [src], containing [reagentnames] at ([src.loc.x],[src.loc.y],[src.loc.z]).")
+ log_admin("[key_name(user)] put \a [beaker] into [src], containing [reagentnames] at ([src.loc.x],[src.loc.y],[src.loc.z]).")
to_chat(user, "You attach \the [container] to \the [src].")
update_beam()
diff --git a/code/game/machinery/kitchen/processor.dm b/code/game/machinery/kitchen/processor.dm
index 0c4b8a973e83..a18f5db8af43 100644
--- a/code/game/machinery/kitchen/processor.dm
+++ b/code/game/machinery/kitchen/processor.dm
@@ -89,7 +89,7 @@
to_chat(user, SPAN_DANGER("That probably won't blend."))
return 1
user.visible_message("[user] put [what] into [src].", \
- "You put the [what] into [src].")
+ "You put [what] into [src].")
user.drop_held_item()
what.forceMove(src)
@@ -118,4 +118,3 @@
src.processing = 0
src.visible_message(SPAN_NOTICE("\the [src] finished processing."), \
"You hear the food processor stopping/")
-
diff --git a/code/game/machinery/pipe/construction.dm b/code/game/machinery/pipe/construction.dm
index 33e6e9749e48..a886b59f501f 100644
--- a/code/game/machinery/pipe/construction.dm
+++ b/code/game/machinery/pipe/construction.dm
@@ -620,8 +620,8 @@ Buildable meters
playsound(src.loc, 'sound/items/Ratchet.ogg', 25, 1)
user.visible_message( \
- "[user] fastens the [src].", \
- SPAN_NOTICE("You have fastened the [src]."), \
+ "[user] fastens [src].", \
+ SPAN_NOTICE("You have fastened [src]."), \
"You hear ratchet.")
qdel(src) // remove the pipe item
diff --git a/code/game/machinery/spaceheater.dm b/code/game/machinery/spaceheater.dm
index dd45ad597800..69b21964a4f4 100644
--- a/code/game/machinery/spaceheater.dm
+++ b/code/game/machinery/spaceheater.dm
@@ -66,7 +66,7 @@
return
else if(HAS_TRAIT(I, TRAIT_TOOL_SCREWDRIVER))
open = !open
- user.visible_message(SPAN_NOTICE("[user] [open ? "opens" : "closes"] the hatch on the [src]."), SPAN_NOTICE("You [open ? "open" : "close"] the hatch on the [src]."))
+ user.visible_message(SPAN_NOTICE("[user] [open ? "opens" : "closes"] the hatch on [src]."), SPAN_NOTICE("You [open ? "open" : "close"] the hatch on [src]."))
update_icon()
if(!open && user.interactee == src)
close_browser(user, "spaceheater")
@@ -107,7 +107,7 @@
start_processing()
else
stop_processing()
- user.visible_message(SPAN_NOTICE("[user] switches [on ? "on" : "off"] the [src]."),SPAN_NOTICE("You switch [on ? "on" : "off"] the [src]."))
+ user.visible_message(SPAN_NOTICE("[user] switches [on ? "on" : "off"] [src]."),SPAN_NOTICE("You switch [on ? "on" : "off"] [src]."))
update_icon()
return
@@ -186,4 +186,3 @@
name = "radiator"
desc = "It's a radiator. It heats the room through convection with hot water. This one has a red handle."
icon_state = "radiator-r"
-
diff --git a/code/game/machinery/vending/cm_vending.dm b/code/game/machinery/vending/cm_vending.dm
index 6205f24c8e05..0745f05ab2d1 100644
--- a/code/game/machinery/vending/cm_vending.dm
+++ b/code/game/machinery/vending/cm_vending.dm
@@ -440,6 +440,27 @@ GLOBAL_LIST_EMPTY(vending_products)
user.set_interaction(src)
tgui_interact(user)
+/// Handles redeeming coin tokens.
+/obj/structure/machinery/cm_vending/proc/redeem_token(obj/item/coin/marine/token, mob/user)
+ var/reward_typepath
+ switch(token.token_type)
+ if(VEND_TOKEN_VOID)
+ to_chat(user, SPAN_WARNING("ERROR: TOKEN NOT RECOGNISED."))
+ return FALSE
+ if(VEND_TOKEN_SPEC)
+ reward_typepath = /obj/item/spec_kit/rifleman
+ else
+ to_chat(user, SPAN_WARNING("ERROR: INCORRECT TOKEN."))
+ return FALSE
+
+ if(reward_typepath && user.drop_inv_item_to_loc(token, src))
+ to_chat(user, SPAN_NOTICE("You insert \the [token] into \the [src]."))
+ var/obj/new_item = new reward_typepath(get_turf(src))
+ user.put_in_any_hand_if_possible(new_item)
+ return TRUE
+ return FALSE
+
+
//------------TGUI PROCS---------------
/obj/structure/machinery/cm_vending/ui_data(mob/user)
@@ -738,13 +759,20 @@ GLOBAL_LIST_EMPTY(vending_products)
hack_access(user)
return TRUE
+ ///If we want to redeem a token
+ else if(istype(W, /obj/item/coin/marine))
+ if(!can_access_to_vend(user, ignore_hack = TRUE))
+ return FALSE
+ . = redeem_token(W, user)
+ return
+
..()
/obj/structure/machinery/cm_vending/proc/get_listed_products(mob/user)
return listed_products
-/obj/structure/machinery/cm_vending/proc/can_access_to_vend(mob/user, display=TRUE)
- if(!hacked)
+/obj/structure/machinery/cm_vending/proc/can_access_to_vend(mob/user, display = TRUE, ignore_hack = FALSE)
+ if(!hacked || ignore_hack)
if(!allowed(user))
if(display)
to_chat(user, SPAN_WARNING("Access denied."))
diff --git a/code/game/machinery/vending/vending.dm b/code/game/machinery/vending/vending.dm
index b6c4da03640c..8629ce2bb2be 100644
--- a/code/game/machinery/vending/vending.dm
+++ b/code/game/machinery/vending/vending.dm
@@ -208,23 +208,23 @@ GLOBAL_LIST_EMPTY_TYPED(total_vending_machines, /obj/structure/machinery/vending
update_icon()
return TRUE
else if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
- to_chat(user, SPAN_WARNING("You do not understand how to repair the broken [src]."))
+ to_chat(user, SPAN_WARNING("You do not understand how to repair the broken [src.name]."))
return FALSE
else if(stat & BROKEN)
- to_chat(user, SPAN_NOTICE("You start to unscrew the [src]'s broken panel."))
+ to_chat(user, SPAN_NOTICE("You start to unscrew [src]'s broken panel."))
if(!do_after(user, 3 SECONDS, INTERRUPT_ALL|BEHAVIOR_IMMOBILE, BUSY_ICON_BUILD, numticks = 3))
- to_chat(user, SPAN_WARNING("You stop unscrewing the [src]'s broken panel."))
+ to_chat(user, SPAN_WARNING("You stop unscrewing [src]'s broken panel."))
return FALSE
- to_chat(user, SPAN_NOTICE("You unscrew the [src]'s broken panel and remove it, exposing many broken wires."))
+ to_chat(user, SPAN_NOTICE("You unscrew [src]'s broken panel and remove it, exposing many broken wires."))
stat &= ~BROKEN
stat |= REPAIR_STEP_ONE
return TRUE
else if(stat & REPAIR_STEP_FOUR)
- to_chat(user, SPAN_NOTICE("You start to fasten the [src]'s new panel."))
+ to_chat(user, SPAN_NOTICE("You start to fasten [src]'s new panel."))
if(!do_after(user, 3 SECONDS, INTERRUPT_ALL|BEHAVIOR_IMMOBILE, BUSY_ICON_BUILD, numticks = 3))
- to_chat(user, SPAN_WARNING("You stop fastening the [src]'s new panel."))
+ to_chat(user, SPAN_WARNING("You stop fastening [src]'s new panel."))
return FALSE
- to_chat(user, SPAN_NOTICE("You fasten the [src]'s new panel, fully repairing the vendor."))
+ to_chat(user, SPAN_NOTICE("You fasten [src]'s new panel, fully repairing the vendor."))
stat &= ~REPAIR_STEP_FOUR
stat |= FULLY_REPAIRED
update_icon()
@@ -235,17 +235,17 @@ GLOBAL_LIST_EMPTY_TYPED(total_vending_machines, /obj/structure/machinery/vending
return FALSE
else if(HAS_TRAIT(item, TRAIT_TOOL_WIRECUTTERS))
if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
- to_chat(user, SPAN_WARNING("You do not understand how to repair the broken [src]."))
+ to_chat(user, SPAN_WARNING("You do not understand how to repair the broken [src.name]."))
return FALSE
else if(stat == WORKING && panel_open)
attack_hand(user)
return
else if(stat & REPAIR_STEP_ONE)
- to_chat(user, SPAN_NOTICE("You start to remove the [src]'s broken wires."))
+ to_chat(user, SPAN_NOTICE("You start to remove [src]'s broken wires."))
if(!do_after(user, 3 SECONDS, INTERRUPT_ALL|BEHAVIOR_IMMOBILE, BUSY_ICON_BUILD, numticks = 3))
- to_chat(user, SPAN_WARNING("You stop removing the [src]'s broken wires."))
+ to_chat(user, SPAN_WARNING("You stop removing [src]'s broken wires."))
return FALSE
- to_chat(user, SPAN_NOTICE("You remove the [src]'s broken broken wires."))
+ to_chat(user, SPAN_NOTICE("You remove [src]'s broken broken wires."))
stat &= ~REPAIR_STEP_ONE
stat |= REPAIR_STEP_TWO
return TRUE
@@ -255,20 +255,20 @@ GLOBAL_LIST_EMPTY_TYPED(total_vending_machines, /obj/structure/machinery/vending
return FALSE
else if(istype(item, /obj/item/stack/cable_coil))
if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
- to_chat(user, SPAN_WARNING("You do not understand how to repair the broken [src]."))
+ to_chat(user, SPAN_WARNING("You do not understand how to repair the broken [src.name]."))
return FALSE
var/obj/item/stack/cable_coil/CC = item
if(stat & REPAIR_STEP_TWO)
if(CC.amount < 5)
to_chat(user, SPAN_WARNING("You need more cable coil to replace the removed wires."))
- to_chat(user, SPAN_NOTICE("You start to replace the [src]'s removed wires."))
+ to_chat(user, SPAN_NOTICE("You start to replace [src]'s removed wires."))
if(!do_after(user, 3 SECONDS, INTERRUPT_ALL|BEHAVIOR_IMMOBILE, BUSY_ICON_BUILD, numticks = 3))
- to_chat(user, SPAN_WARNING("You stop replacing the [src]'s removed wires."))
+ to_chat(user, SPAN_WARNING("You stop replacing [src]'s removed wires."))
return FALSE
if(!CC || !CC.use(5))
to_chat(user, SPAN_WARNING("You need more cable coil to replace the removed wires."))
return FALSE
- to_chat(user, SPAN_NOTICE("You remove the [src]'s broken broken wires."))
+ to_chat(user, SPAN_NOTICE("You remove [src]'s broken broken wires."))
stat &= ~REPAIR_STEP_TWO
stat |= REPAIR_STEP_THREE
return TRUE
@@ -278,18 +278,18 @@ GLOBAL_LIST_EMPTY_TYPED(total_vending_machines, /obj/structure/machinery/vending
return
else if(istype(item, /obj/item/stack/sheet/metal))
if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_ENGI))
- to_chat(user, SPAN_WARNING("You do not understand how to repair the broken [src]."))
+ to_chat(user, SPAN_WARNING("You do not understand how to repair the broken [src.name]."))
return FALSE
var/obj/item/stack/sheet/metal/M = item
if(stat & REPAIR_STEP_THREE)
- to_chat(user, SPAN_NOTICE("You start to construct a new panel for the [src]."))
+ to_chat(user, SPAN_NOTICE("You start to construct a new panel for [src]."))
if(!do_after(user, 3 SECONDS, INTERRUPT_ALL|BEHAVIOR_IMMOBILE, BUSY_ICON_BUILD, numticks = 3))
- to_chat(user, SPAN_WARNING("You stop constructing a new panel for the [src]."))
+ to_chat(user, SPAN_WARNING("You stop constructing a new panel for [src]."))
return FALSE
if(!M || !M.use(1))
to_chat(user, SPAN_WARNING("You a sheet of metal to construct a new panel."))
return FALSE
- to_chat(user, SPAN_NOTICE("You construct a new panel for the [src]."))
+ to_chat(user, SPAN_NOTICE("You construct a new panel for [src]."))
stat &= ~REPAIR_STEP_THREE
stat |= REPAIR_STEP_FOUR
return TRUE
@@ -306,9 +306,9 @@ GLOBAL_LIST_EMPTY_TYPED(total_vending_machines, /obj/structure/machinery/vending
switch (anchored)
if (0)
anchored = TRUE
- user.visible_message("[user] tightens the bolts securing the [src] to the floor.", "You tighten the bolts securing the [src] to the floor.")
+ user.visible_message("[user] tightens the bolts securing [src] to the floor.", "You tighten the bolts securing [src] to the floor.")
if (1)
- user.visible_message("[user] unfastens the bolts securing the [src] to the floor.", "You unfasten the bolts securing the [src] to the floor.")
+ user.visible_message("[user] unfastens the bolts securing [src] to the floor.", "You unfasten the bolts securing [src] to the floor.")
anchored = FALSE
return
else if(HAS_TRAIT(item, TRAIT_TOOL_MULTITOOL) || HAS_TRAIT(item, TRAIT_TOOL_WIRECUTTERS))
@@ -321,7 +321,7 @@ GLOBAL_LIST_EMPTY_TYPED(total_vending_machines, /obj/structure/machinery/vending
return
if(user.drop_inv_item_to_loc(item, src))
coin = item
- to_chat(user, SPAN_NOTICE(" You insert the [item] into the [src]"))
+ to_chat(user, SPAN_NOTICE("You insert [item] into [src]"))
tgui_interact(user)
return
else if(istype(item, /obj/item/spacecash))
@@ -422,9 +422,9 @@ GLOBAL_LIST_EMPTY_TYPED(total_vending_machines, /obj/structure/machinery/vending
if(is_tipped_over)
if(user.action_busy)
return
- user.visible_message(SPAN_NOTICE("[user] begins to heave the [src] back into place!"), SPAN_NOTICE("You start heaving the [src] back into place..."))
+ user.visible_message(SPAN_NOTICE("[user] begins to heave [src] back into place!"), SPAN_NOTICE("You start heaving [src] back into place..."))
if(do_after(user, 80, INTERRUPT_NO_NEEDHAND, BUSY_ICON_FRIENDLY))
- user.visible_message(SPAN_NOTICE("[user] rights the [src]!"), SPAN_NOTICE("You right the [src]!"))
+ user.visible_message(SPAN_NOTICE("[user] rights [src]!"), SPAN_NOTICE("You right [src]!"))
flip_back()
return
@@ -534,7 +534,7 @@ GLOBAL_LIST_EMPTY_TYPED(total_vending_machines, /obj/structure/machinery/vending
return
if(coin.string_attached)
if(prob(50))
- to_chat(user, SPAN_NOTICE("You successfully pull the coin out before the [src] could swallow it."))
+ to_chat(user, SPAN_NOTICE("You successfully pull the coin out before [src] could swallow it."))
user.put_in_hands(coin)
else
to_chat(user, SPAN_NOTICE("You weren't able to pull the coin out fast enough, the machine ate it, string and all."))
@@ -882,8 +882,8 @@ GLOBAL_LIST_EMPTY_TYPED(total_vending_machines, /obj/structure/machinery/vending
S.remove_from_storage(item_to_stock, user.loc)
qdel(item_to_stock)
- user.visible_message(SPAN_NOTICE("[user] stocks the [src] with \a [product.product_name]."),
- SPAN_NOTICE("You stock the [src] with \a [product.product_name]."))
+ user.visible_message(SPAN_NOTICE("[user] stocks [src] with \a [product.product_name]."),
+ SPAN_NOTICE("You stock [src] with \a [product.product_name]."))
product.amount++
return //We found our item, no reason to go on.
@@ -967,7 +967,7 @@ GLOBAL_LIST_EMPTY_TYPED(total_vending_machines, /obj/structure/machinery/vending
if (!throw_item)
return 0
INVOKE_ASYNC(throw_item, /atom/movable/proc/throw_atom, target, 16, SPEED_AVERAGE, src)
- visible_message(SPAN_WARNING("The [src] launches \the [throw_item] at [target]!"))
+ visible_message(SPAN_WARNING("[src] launches [throw_item] at [target]!"))
playsound(src, "sound/machines/vending.ogg", 40, TRUE)
return 1
@@ -988,14 +988,14 @@ GLOBAL_LIST_EMPTY_TYPED(total_vending_machines, /obj/structure/machinery/vending
switch(wire)
if(VENDING_WIRE_EXTEND)
extended_inventory = TRUE
- visible_message(SPAN_NOTICE("A weak yellow light turns off underneath the [src]."))
+ visible_message(SPAN_NOTICE("A weak yellow light turns off underneath [src]."))
if(VENDING_WIRE_SHOCK)
seconds_electrified = -1
- visible_message(SPAN_DANGER("Electric arcs shoot off from the [src]!"))
+ visible_message(SPAN_DANGER("Electric arcs shoot off from [src]!"))
if (VENDING_WIRE_SHOOT_INV)
if(!shoot_inventory)
shoot_inventory = TRUE
- visible_message(SPAN_WARNING("The [src] begins whirring noisily."))
+ visible_message(SPAN_WARNING("[src] begins whirring noisily."))
/obj/structure/machinery/vending/proc/mend(wire)
wires |= getWireFlag(wire)
@@ -1003,24 +1003,24 @@ GLOBAL_LIST_EMPTY_TYPED(total_vending_machines, /obj/structure/machinery/vending
switch(wire)
if(VENDING_WIRE_EXTEND)
extended_inventory = FALSE
- visible_message(SPAN_NOTICE("A weak yellow light turns on underneath the [src]."))
+ visible_message(SPAN_NOTICE("A weak yellow light turns on underneath [src]."))
if(VENDING_WIRE_SHOCK)
seconds_electrified = 0
if (VENDING_WIRE_SHOOT_INV)
shoot_inventory = FALSE
- visible_message(SPAN_NOTICE("The [src] stops whirring."))
+ visible_message(SPAN_NOTICE("[src] stops whirring."))
/obj/structure/machinery/vending/proc/pulse(wire)
switch(wire)
if(VENDING_WIRE_EXTEND)
extended_inventory = !extended_inventory
- visible_message(SPAN_NOTICE("A weak yellow light turns [extended_inventory ? "on" : "off"] underneath the [src]."))
+ visible_message(SPAN_NOTICE("A weak yellow light turns [extended_inventory ? "on" : "off"] underneath [src]."))
if (VENDING_WIRE_SHOCK)
seconds_electrified = 30
- visible_message(SPAN_DANGER("Electric arcs shoot off from the [src]!"))
+ visible_message(SPAN_DANGER("Electric arcs shoot off from [src]!"))
if (VENDING_WIRE_SHOOT_INV)
shoot_inventory = !shoot_inventory
if(shoot_inventory)
- visible_message(SPAN_WARNING("The [src] begins whirring noisily."))
+ visible_message(SPAN_WARNING("[src] begins whirring noisily."))
else
- visible_message(SPAN_NOTICE("The [src] stops whirring."))
+ visible_message(SPAN_NOTICE("[src] stops whirring."))
diff --git a/code/game/machinery/vending/vendor_types/crew/synthetic.dm b/code/game/machinery/vending/vendor_types/crew/synthetic.dm
index b489dbab16a4..ecef3ed622d9 100644
--- a/code/game/machinery/vending/vendor_types/crew/synthetic.dm
+++ b/code/game/machinery/vending/vendor_types/crew/synthetic.dm
@@ -335,13 +335,13 @@ GLOBAL_LIST_INIT(cm_vending_clothing_synth_snowflake, list(
req_access = list(ACCESS_MARINE_SYNTH)
vendor_role = list(JOB_SYNTH)
-/obj/structure/machinery/cm_vending/own_points/experimental_tools/attackby(obj/item/W, mob/user)
- if(istype(W, /obj/item/coin/marine/synth))
- if(user.drop_inv_item_to_loc(W, src))
+/obj/structure/machinery/cm_vending/own_points/experimental_tools/redeem_token(obj/item/coin/marine/token, mob/user)
+ if(token.token_type == VEND_TOKEN_SYNTH)
+ if(user.drop_inv_item_to_loc(token, src))
available_points = 30
available_points_to_display = available_points
- to_chat(user, SPAN_NOTICE("You insert \the [W] into \the [src]."))
- return
+ to_chat(user, SPAN_NOTICE("You insert \the [token] into \the [src]."))
+ return TRUE
return ..()
/obj/structure/machinery/cm_vending/own_points/experimental_tools/get_listed_products(mob/user)
diff --git a/code/game/machinery/vending/vendor_types/intelligence_officer.dm b/code/game/machinery/vending/vendor_types/intelligence_officer.dm
index ad10037ccfe1..93d31fe13253 100644
--- a/code/game/machinery/vending/vendor_types/intelligence_officer.dm
+++ b/code/game/machinery/vending/vendor_types/intelligence_officer.dm
@@ -4,26 +4,11 @@ GLOBAL_LIST_INIT(cm_vending_gear_intelligence_officer, list(
list("INTELLIGENCE SET (MANDATORY)", 0, null, null, null),
list("Essential Intelligence Set", 0, /obj/effect/essentials_set/intelligence_officer, MARINE_CAN_BUY_ESSENTIALS, VENDOR_ITEM_MANDATORY),
- list("SUPPLIES", 0, null, null, null),
+ list("ENGINEERING SUPPLIES", 0, null, null, null),
list("Power Control Module", 5, /obj/item/circuitboard/apc, null, VENDOR_ITEM_REGULAR),
- list("Binoculars", 5, /obj/item/device/binoculars, null, VENDOR_ITEM_REGULAR),
- list("Night Vision Optic", 25, /obj/item/device/helmet_visor/night_vision, null, VENDOR_ITEM_RECOMMENDED),
- list("Data Detector", 5, /obj/item/device/motiondetector/intel, null, VENDOR_ITEM_REGULAR),
- list("Intel Radio Encryption Key", 5, /obj/item/device/encryptionkey/intel, null, VENDOR_ITEM_REGULAR),
- list("Fire Extinguisher (Portable)", 5, /obj/item/tool/extinguisher/mini, null, VENDOR_ITEM_REGULAR),
- list("Fulton Recovery Device", 10, /obj/item/stack/fulton, null, VENDOR_ITEM_REGULAR),
- list("Motion Detector", 15, /obj/item/device/motiondetector, null, VENDOR_ITEM_RECOMMENDED),
list("Plastic Explosive", 10, /obj/item/explosive/plastic, null, VENDOR_ITEM_REGULAR),
- list("Welding Visor", 5, /obj/item/device/helmet_visor/welding_visor, null, VENDOR_ITEM_REGULAR),
- list("Medical Helmet Optic", 5, /obj/item/device/helmet_visor/medical, null, VENDOR_ITEM_REGULAR),
list("Welding Goggles", 5, /obj/item/clothing/glasses/welding, null, VENDOR_ITEM_REGULAR),
- list("POUCHES", 0, null, null, null),
- list("Large Magazine Pouch", 10, /obj/item/storage/pouch/magazine/large, null, VENDOR_ITEM_REGULAR),
- list("Large Shotgun Shell Pouch", 10, /obj/item/storage/pouch/shotgun/large, null, VENDOR_ITEM_REGULAR),
- list("Autoinjector Pouch (Full)", 15, /obj/item/storage/pouch/autoinjector/full, null, VENDOR_ITEM_RECOMMENDED),
- list("Machete Pouch (Full)", 10, /obj/item/storage/pouch/machete/full, null, VENDOR_ITEM_REGULAR),
-
list("PRIMARY AMMUNITION", 0, null, null, null),
list("M4RA AP Magazine (10x24mm)", 10, /obj/item/ammo_magazine/rifle/m4ra/ap, null, VENDOR_ITEM_REGULAR),
list("M39 AP Magazine (10x20mm)", 10, /obj/item/ammo_magazine/smg/m39/ap , null, VENDOR_ITEM_REGULAR),
@@ -35,7 +20,30 @@ GLOBAL_LIST_INIT(cm_vending_gear_intelligence_officer, list(
list("M44 Heavy Speed Loader (.44)", 10, /obj/item/ammo_magazine/revolver/heavy, null, VENDOR_ITEM_REGULAR),
list("M4A3 HP Magazine", 5, /obj/item/ammo_magazine/pistol/hp, null, VENDOR_ITEM_REGULAR),
list("M4A3 AP Magazine", 5, /obj/item/ammo_magazine/pistol/ap, null, VENDOR_ITEM_REGULAR),
- list("VP78 Magazine", 5, /obj/item/ammo_magazine/pistol/vp78, null, VENDOR_ITEM_REGULAR)
+ list("VP78 Magazine", 5, /obj/item/ammo_magazine/pistol/vp78, null, VENDOR_ITEM_REGULAR),
+
+ list("POUCHES", 0, null, null, null),
+ list("Large Magazine Pouch", 10, /obj/item/storage/pouch/magazine/large, null, VENDOR_ITEM_REGULAR),
+ list("Large Shotgun Shell Pouch", 10, /obj/item/storage/pouch/shotgun/large, null, VENDOR_ITEM_REGULAR),
+ list("Autoinjector Pouch (Full)", 15, /obj/item/storage/pouch/autoinjector/full, null, VENDOR_ITEM_RECOMMENDED),
+ list("Machete Pouch (Full)", 10, /obj/item/storage/pouch/machete/full, null, VENDOR_ITEM_REGULAR),
+
+ list("UTILITIES", 0, null, null, null),
+ list("Fire Extinguisher (Portable)", 5, /obj/item/tool/extinguisher/mini, null, VENDOR_ITEM_REGULAR),
+ list("Fulton Device Stack", 10, /obj/item/stack/fulton, null, VENDOR_ITEM_REGULAR),
+ list("Motion Detector", 15, /obj/item/device/motiondetector, null, VENDOR_ITEM_RECOMMENDED),
+ list("Data Detector", 5, /obj/item/device/motiondetector/intel, null, VENDOR_ITEM_REGULAR),
+
+ list("BINOCULARS", 0, null, null, null),
+ list("Binoculars", 5, /obj/item/device/binoculars, null, VENDOR_ITEM_REGULAR),
+
+ list("HELMET OPTICS", 0, null, null, null),
+ list("Medical Helmet Optic", 5, /obj/item/device/helmet_visor/medical, null, VENDOR_ITEM_REGULAR),
+ list("Welding Visor", 5, /obj/item/device/helmet_visor/welding_visor, null, VENDOR_ITEM_REGULAR),
+ list("Night Vision Optic", 25, /obj/item/device/helmet_visor/night_vision, null, VENDOR_ITEM_RECOMMENDED),
+
+ list("RADIO KEYS", 0, null, null, null),
+ list("Intel Radio Encryption Key", 5, /obj/item/device/encryptionkey/intel, null, VENDOR_ITEM_REGULAR),
))
/obj/structure/machinery/cm_vending/gear/intelligence_officer
diff --git a/code/game/machinery/vending/vendor_types/squad_prep/squad_prep.dm b/code/game/machinery/vending/vendor_types/squad_prep/squad_prep.dm
index 52418fb8940c..505ef81a1277 100644
--- a/code/game/machinery/vending/vendor_types/squad_prep/squad_prep.dm
+++ b/code/game/machinery/vending/vendor_types/squad_prep/squad_prep.dm
@@ -71,8 +71,10 @@
listed_products = list(
list("STANDARD EQUIPMENT", -1, null, null, null),
list("Marine Combat Boots", round(scale * 15), /obj/item/clothing/shoes/marine, VENDOR_ITEM_REGULAR),
+ list("Marine Brown Combat Boots", round(scale * 15), /obj/item/clothing/shoes/marine/brown, VENDOR_ITEM_REGULAR),
list("USCM Uniform", round(scale * 15), /obj/item/clothing/under/marine, VENDOR_ITEM_REGULAR),
list("Marine Combat Gloves", round(scale * 15), /obj/item/clothing/gloves/marine, VENDOR_ITEM_REGULAR),
+ list("Marine Brown Combat Gloves", round(scale * 15), /obj/item/clothing/gloves/marine/brown, VENDOR_ITEM_REGULAR),
list("Marine Black Combat Gloves", round(scale * 15), /obj/item/clothing/gloves/marine/black, VENDOR_ITEM_REGULAR),
list("Marine Radio Headset", round(scale * 15), /obj/item/device/radio/headset/almayer, VENDOR_ITEM_REGULAR),
list("M10 Pattern Marine Helmet", round(scale * 15), /obj/item/clothing/head/helmet/marine, VENDOR_ITEM_REGULAR),
diff --git a/code/game/objects/effects/spiders.dm b/code/game/objects/effects/spiders.dm
index f9b5ddb42f68..69eababfe000 100644
--- a/code/game/objects/effects/spiders.dm
+++ b/code/game/objects/effects/spiders.dm
@@ -21,7 +21,7 @@
return
/obj/effect/spider/attackby(obj/item/W, mob/user)
- if(W.attack_verb.len)
+ if(LAZYLEN(W.attack_verb))
visible_message(SPAN_DANGER("\The [src] have been [pick(W.attack_verb)] with \the [W][(user ? "by [user]." : ".")]"))
else
visible_message(SPAN_DANGER("\The [src] have been attacked with \the [W][(user ? "by [user]." : ".")]"))
diff --git a/code/game/objects/items/cards_ids.dm b/code/game/objects/items/cards_ids.dm
index f6af3c0ca237..ac5136b07a4a 100644
--- a/code/game/objects/items/cards_ids.dm
+++ b/code/game/objects/items/cards_ids.dm
@@ -80,7 +80,7 @@
/// actual job
var/rank = null
/// Marine's paygrade
- var/paygrade = "ME1"
+ var/paygrade = PAY_SHORT_CIV
/// For medics and engineers to 'claim' a locker
var/claimedgear = 1
diff --git a/code/game/objects/items/circuitboards/computer.dm b/code/game/objects/items/circuitboards/computer.dm
index 40c66bc0fa6a..08dcfc6964a6 100644
--- a/code/game/objects/items/circuitboards/computer.dm
+++ b/code/game/objects/items/circuitboards/computer.dm
@@ -287,14 +287,12 @@
/obj/item/circuitboard/computer/rdconsole/attackby(obj/item/I as obj, mob/user as mob)
if(HAS_TRAIT(I, TRAIT_TOOL_SCREWDRIVER))
- user.visible_message(SPAN_NOTICE("\the [user] adjusts the jumper on the [src]'s access protocol pins."), SPAN_NOTICE("You adjust the jumper on the access protocol pins."))
+ user.visible_message(SPAN_NOTICE("[user] adjusts the jumper on [src]'s access protocol pins."), SPAN_NOTICE("You adjust the jumper on the access protocol pins."))
if(src.build_path == /obj/structure/machinery/computer/rdconsole/core)
src.name = "Circuit Board (RD Console - Robotics)"
src.build_path = /obj/structure/machinery/computer/rdconsole/robotics
- to_chat(user, SPAN_NOTICE(" Access protocols set to robotics."))
+ to_chat(user, SPAN_NOTICE("Access protocols set to robotics."))
else
src.name = "Circuit Board (RD Console)"
src.build_path = /obj/structure/machinery/computer/rdconsole/core
- to_chat(user, SPAN_NOTICE(" Access protocols set to default."))
-
-
+ to_chat(user, SPAN_NOTICE("Access protocols set to default."))
diff --git a/code/game/objects/items/circuitboards/machine.dm b/code/game/objects/items/circuitboards/machine.dm
index ad4c31cb11e9..248d0d5c8885 100644
--- a/code/game/objects/items/circuitboards/machine.dm
+++ b/code/game/objects/items/circuitboards/machine.dm
@@ -141,7 +141,7 @@ to destroy them and players will be able to make replacements.
if(HAS_TRAIT(I, TRAIT_TOOL_SCREWDRIVER))
machine_dir = turn(machine_dir, 90)
init_dirs = machine_dir
- user.visible_message(SPAN_NOTICE("\The [user] adjusts the jumper on the [src]'s port configuration pins."), SPAN_NOTICE("You adjust the jumper on the port configuration pins. Now set to [dir2text(machine_dir)]."))
+ user.visible_message(SPAN_NOTICE("[user] adjusts the jumper on [src]'s port configuration pins."), SPAN_NOTICE("You adjust the jumper on the port configuration pins. Now set to [dir2text(machine_dir)]."))
return
/obj/item/circuitboard/machine/unary_atmos/get_examine_text(mob/user)
@@ -300,5 +300,3 @@ to destroy them and players will be able to make replacements.
// Board itself is high tech. Coils have to be ordered from cargo or salvaged from existing SMESs.
frame_desc = "Requires 1 superconducting magnetic coil and 30 wires."
req_components = list(/obj/item/stock_parts/smes_coil = 1, /obj/item/stack/cable_coil = 30)
-
-
diff --git a/code/game/objects/items/devices/cloaking.dm b/code/game/objects/items/devices/cloaking.dm
index 05e7786744e2..b0c5ed799977 100644
--- a/code/game/objects/items/devices/cloaking.dm
+++ b/code/game/objects/items/devices/cloaking.dm
@@ -47,12 +47,12 @@
src.add_fingerprint(user)
if(chameleon_on)
user.alpha = 25
- to_chat(user, SPAN_NOTICE("You activate the [src]."))
+ to_chat(user, SPAN_NOTICE("You activate [src]."))
spark_system.start()
src.icon_state = "shield1"
else
user.alpha = initial(user.alpha)
- to_chat(user, SPAN_NOTICE("You deactivate the [src]."))
+ to_chat(user, SPAN_NOTICE("You deactivate [src]."))
src.icon_state = "shield0"
spark_system.start()
diff --git a/code/game/objects/items/devices/coins.dm b/code/game/objects/items/devices/coins.dm
index 139ea1cbac8c..6c00364642da 100644
--- a/code/game/objects/items/devices/coins.dm
+++ b/code/game/objects/items/devices/coins.dm
@@ -67,12 +67,6 @@
icon_state = "coin_platinum"
black_market_value = 35
-/obj/item/coin/marine/synth
- name = "synthetic experimental tool redemption token"
- desc = "Insert this into a synthetic experimental tools vendor in order to access a variety of experimental support tools."
- icon_state = "coin_synth"
- black_market_value = 0
-
/obj/item/coin/chitin
name = "chitin coin"
desc = "Durable alien chitin pressed into a coin. There are much better uses for chitin..."
@@ -121,3 +115,33 @@
comment = "heads"
user.visible_message(SPAN_NOTICE("[user] has thrown \the [src]. It lands on [comment]! "), \
SPAN_NOTICE("You throw \the [src]. It lands on [comment]! "))
+
+
+/obj/item/coin/marine
+ name = "marine equipment token"
+ desc = "I wonder what it does?"
+ icon_state = "coin_copper"
+ black_market_value = 0
+ /// What is the token for?
+ var/token_type = VEND_TOKEN_VOID
+
+/obj/item/coin/marine/attackby(obj/item/W as obj, mob/user as mob) //To remove attaching a string functionality
+ return
+
+/obj/item/coin/marine/engineer
+ name = "marine engineer support token"
+ desc = "Insert this into an engineer vendor in order to access a support weapon."
+ icon_state = "coin_gold"
+ token_type = VEND_TOKEN_ENGINEER
+
+/obj/item/coin/marine/specialist
+ name = "marine specialist weapon token"
+ desc = "Insert this into a USCM equipment vendor in order to access a single highly dangerous weapon."
+ icon_state = "coin_diamond"
+ token_type = VEND_TOKEN_SPEC
+
+/obj/item/coin/marine/synth
+ name = "synthetic experimental tool redemption token"
+ desc = "Insert this into a synthetic experimental tools vendor in order to access a variety of experimental support tools."
+ icon_state = "coin_synth"
+ token_type = VEND_TOKEN_SYNTH
diff --git a/code/game/objects/items/devices/lightreplacer.dm b/code/game/objects/items/devices/lightreplacer.dm
index 40ef8792aedb..3f285b358fb2 100644
--- a/code/game/objects/items/devices/lightreplacer.dm
+++ b/code/game/objects/items/devices/lightreplacer.dm
@@ -121,7 +121,7 @@
if(target.status != LIGHT_OK)
if(CanUse(U))
if(!Use(U)) return
- to_chat(U, SPAN_NOTICE("You replace the [target.fitting] with the [src]."))
+ to_chat(U, SPAN_NOTICE("You replace the [target.fitting] with [src]."))
if(target.status != LIGHT_EMPTY)
diff --git a/code/game/objects/items/devices/radio/listening_bugs.dm b/code/game/objects/items/devices/radio/listening_bugs.dm
new file mode 100644
index 000000000000..4a84df071c60
--- /dev/null
+++ b/code/game/objects/items/devices/radio/listening_bugs.dm
@@ -0,0 +1,276 @@
+#define DISGUISE_REMOVE "remove disguise"
+#define DISGUISE_RADIO "radio"
+#define DISGUISE_PEN "pen"
+#define DISGUISE_FOUNTAIN_PEN "fountain pen"
+#define DISGUISE_ACCESS_TUNER "access tuner"
+#define DISGUISE_WHISTLE "whistle"
+#define DISGUISE_MASS_SPEC "mass-spectrometer"
+#define DISGUISE_CAMERA "camera"
+#define DISGUISE_ZIPPO "zippo lighter"
+#define DISGUISE_TAPE_RECORDER "tape recorder"
+
+/obj/item/device/radio/listening_bug
+ name = "listening device"
+ desc = "A small, and disguisable, listening device."
+
+ icon = 'icons/obj/items/devices.dmi'
+ icon_state = "voice0"
+ item_state = "analyzer"
+
+ w_class = SIZE_TINY
+ volume = RADIO_VOLUME_RAISED
+
+ broadcasting = FALSE
+ listening = FALSE
+ frequency = BUG_A_FREQ
+ canhear_range = 2
+ freqlock = TRUE
+ /// If the bug is disguised or not.
+ var/ready_to_disguise = FALSE
+ var/disguised = FALSE
+ /// Whether or not the bug can be used to listen to its own channel.
+ var/prevent_snooping = FALSE
+ /// The ID tag of the device, for identification.
+ var/nametag = "Device"
+
+/obj/item/device/radio/listening_bug/ui_data(mob/user)
+ var/list/data = list()
+
+ data["broadcasting"] = broadcasting
+ data["listening"] = listening
+ data["frequency"] = frequency
+ data["freqlock"] = freqlock
+
+ var/list/radio_channels = list()
+
+ for(var/channel in channels)
+ var/channel_key = channel_to_prefix(channel)
+ radio_channels += list(list(
+ "name" = channel,
+ "status" = channels[channel] & FREQ_LISTENING,
+ "hotkey" = channel_key))
+
+ data["channels"] = radio_channels
+
+ data["command"] = volume
+ data["useCommand"] = use_volume
+ data["subspace"] = subspace_transmission
+ data["subspaceSwitchable"] = subspace_switchable
+ data["headset"] = FALSE
+
+ return data
+
+/obj/item/device/radio/listening_bug/ui_act(action, params, datum/tgui/ui, datum/ui_state/state)
+ switch(action)
+ if("listen")
+ if(prevent_snooping)
+ to_chat(usr, SPAN_WARNING("This device cannot receive transmissions!"))
+ return
+ listening = !listening
+ return
+ if("subspace")
+ if(!ishuman(usr))
+ return
+ var/mob/living/carbon/human/user = usr
+ if(!check_access(user.wear_id) && !check_access(user.get_active_hand()))
+ to_chat(user, SPAN_WARNING("You need an authenticated ID card to change this function!"))
+ return
+ if(subspace_switchable)
+ subspace_transmission = !subspace_transmission
+ var/initial_prevent = initial(prevent_snooping)
+ if(initial_prevent)
+ prevent_snooping = TRUE
+ if(!subspace_transmission)
+ prevent_snooping = FALSE
+ channels = list()
+ return
+ ..()
+
+/obj/item/device/radio/listening_bug/hear_talk(mob/M as mob, msg, verb = "says", datum/language/speaking = null)
+ var/processed_verb = "[SPAN_RED("\[LSTN [nametag]\]")] [verb]"
+ if(broadcasting)
+ if(get_dist(src, M) <= 7)
+ talk_into(M, msg,null,processed_verb,speaking)
+
+/obj/item/device/radio/listening_bug/afterattack(atom/target_atom, mob/user as mob, proximity)
+ if(!ready_to_disguise)
+ return ..()
+
+ var/obj/item/target_item = target_atom
+ if(!istype(target_item) || target_item.anchored || target_item.w_class >= SIZE_LARGE)
+ to_chat(user, SPAN_WARNING("You cannot disguise the listening device as this object."))
+ return FALSE
+
+ var/confirm = tgui_alert(user, "Are you sure you wish to disguise the listening device as '[target_item]'?", "Confirm Choice", list("Yes","No"), 20 SECONDS)
+ if(confirm != "Yes")
+ return FALSE
+
+ icon = target_item.icon
+ name = target_item.name
+ desc = target_item.desc
+ icon_state = target_item.icon_state
+ item_state = target_item.item_state
+ flags_equip_slot = target_item.flags_equip_slot
+ w_class = target_item.w_class
+ ready_to_disguise = FALSE
+ disguised = TRUE
+
+/obj/item/device/radio/listening_bug/get_examine_text(mob/user)
+ if(disguised)
+ . = list()
+ var/size
+ switch(w_class)
+ if(SIZE_TINY)
+ size = "tiny"
+ if(SIZE_SMALL)
+ size = "small"
+ if(SIZE_MEDIUM)
+ size = "normal-sized"
+ . += "This is a [blood_color ? blood_color != "#030303" ? "bloody " : "oil-stained " : ""][icon2html(src, user)][src.name]. It is a [size] item."
+ if(desc)
+ . += desc
+ if(desc_lore)
+ . += SPAN_NOTICE("This has an extended lore description.")
+ else
+ . = ..()
+ . += SPAN_INFO("[src] is set to frequency [get_bug_letter()].")
+ if(nametag != initial(nametag))
+ . += SPAN_INFO("[src]'s nametag is set to '[nametag]'")
+
+/obj/item/device/radio/listening_bug/verb/change_disguise()
+ set name = "Change Disguise"
+ set category = "Object"
+ set src in usr
+
+ if(usr.is_mob_incapacitated())
+ to_chat(usr, SPAN_WARNING("You cannot do this while incapacitated!"))
+ return FALSE
+
+ var/check = tgui_alert(usr, "Do you wish to change the disguise of this listening bug?", "Change Disguise?", list("Yes", "No"))
+ if(check != "Yes")
+ return FALSE
+ if(disguised)
+ var/remove_check = tgui_alert(usr, "Do you wish to remove the current disguise?", "Remove Disguise?", list("Yes","No"))
+ if(remove_check == "Yes")
+ icon = initial(icon)
+ name = initial(name)
+ desc = initial(desc)
+ icon_state = initial(icon_state)
+ item_state = initial(item_state)
+ flags_equip_slot = initial(flags_equip_slot)
+ w_class = initial(w_class)
+ disguised = FALSE
+ return TRUE
+
+ to_chat(usr, SPAN_HELPFUL("You can now change the disguise of the device by selecting a normal, or smaller, sized object."))
+ ready_to_disguise = TRUE
+ return TRUE
+
+/obj/item/device/radio/listening_bug/proc/get_bug_letter()
+ switch(frequency)
+ if(BUG_A_FREQ)
+ return "A"
+ if(BUG_B_FREQ)
+ return "B"
+ if(SEC_FREQ)
+ return "MP"
+ if(PVST_FREQ)
+ return "PVST"
+ if(HC_FREQ)
+ return "HC"
+ if(WY_FREQ, PMC_CCT_FREQ)
+ return "WY"
+ if(PMC_CMD_FREQ)
+ return "WYC"
+ if(UPP_CCT_FREQ, UPP_KDO_FREQ)
+ return "UPP"
+ else
+ return "X"
+
+#define OPTION_REMOVE "Remove Tag"
+#define OPTION_NEW "New Tag"
+
+/obj/item/device/radio/listening_bug/verb/set_nametag()
+ set name = "Set Nametag"
+ set category = "Object"
+ set src in usr
+
+ if(usr.is_mob_incapacitated())
+ to_chat(usr, SPAN_WARNING("You cannot do this while incapacitated!"))
+ return FALSE
+
+ var/check = tgui_alert(usr, "Do you wish to change the name tag of this listening bug?", "Change Name tag?", list("Yes", "No"))
+ if(check != "Yes")
+ return FALSE
+
+
+ var/new_nametag
+ var/remove
+ if(nametag != initial(nametag))
+ remove = tgui_alert(usr, "Do you wish to remove the current nametag?", "Remove Nametag", list("Yes", "No"))
+ if(remove == "Yes")
+ new_nametag = initial(nametag)
+ else
+ new_nametag = tgui_input_text(usr, "What new name tag do you wish to use?", "New Name", initial(nametag), 6)
+
+ if(!new_nametag || (new_nametag == nametag))
+ return FALSE
+
+ nametag = new_nametag
+ log_game("[key_name(usr)] set a listening device nametag to [new_nametag].")
+ return TRUE
+
+#undef OPTION_REMOVE
+#undef OPTION_NEW
+
+/obj/item/device/radio/listening_bug/freq_a
+ frequency = BUG_A_FREQ
+
+/obj/item/device/radio/listening_bug/freq_b
+ frequency = BUG_B_FREQ
+
+/obj/item/device/radio/listening_bug/radio_linked
+ prevent_snooping = TRUE
+ subspace_transmission = TRUE
+ subspace_switchable = TRUE
+
+/obj/item/device/radio/listening_bug/radio_linked/mp
+ frequency = SEC_FREQ
+ req_one_access = list(ACCESS_MARINE_BRIG)
+
+/obj/item/device/radio/listening_bug/radio_linked/hc
+ frequency = HC_FREQ
+ req_one_access = list(ACCESS_MARINE_CO)
+/obj/item/device/radio/listening_bug/radio_linked/hc/pvst
+ frequency = PVST_FREQ
+
+/obj/item/device/radio/listening_bug/radio_linked/wy
+ frequency = WY_FREQ
+ req_one_access = list(ACCESS_WY_EXEC, ACCESS_WY_SECURITY)
+
+/obj/item/device/radio/listening_bug/radio_linked/wy/pmc
+ frequency = PMC_CCT_FREQ
+ req_one_access = list(ACCESS_WY_EXEC, ACCESS_WY_SECURITY)
+
+/obj/item/device/radio/listening_bug/radio_linked/upp
+ frequency = UPP_CCT_FREQ
+ req_one_access = list(ACCESS_UPP_COMMANDO, ACCESS_UPP_SECURITY)
+
+/obj/item/device/radio/listening_bug/radio_linked/upp/commando
+ frequency = UPP_KDO_FREQ
+ req_one_access = list(ACCESS_UPP_COMMANDO)
+
+
+// ENCRYPTION KEYS FOR LISTENING IN!
+//REQURIES SUBSPACE ACTIVATION ON THE BUGS FIRST!
+/obj/item/device/encryptionkey/listening_bug
+ desc = "A small encryption key for listening to a secret broadcasting device! Unlikely to work if the device is not using subspace communications!"
+ icon_state = "stripped_key"
+
+/obj/item/device/encryptionkey/listening_bug/freq_a
+ name = "Listening Bug Encryption Key (A)"
+ channels = list(RADIO_CHANNEL_BUG_A = TRUE)
+
+/obj/item/device/encryptionkey/listening_bug/freq_b
+ name = "Listening Bug Encryption Key (B)"
+ channels = list(RADIO_CHANNEL_BUG_B = TRUE)
diff --git a/code/game/objects/items/devices/suit_cooling.dm b/code/game/objects/items/devices/suit_cooling.dm
index d388e06b9fa7..e0f65a4b31ec 100644
--- a/code/game/objects/items/devices/suit_cooling.dm
+++ b/code/game/objects/items/devices/suit_cooling.dm
@@ -110,7 +110,7 @@
cell.add_fingerprint(user)
cell.update_icon()
- to_chat(user, "You remove the [src.cell].")
+ to_chat(user, "You remove [cell].")
src.cell = null
updateicon()
return
@@ -121,7 +121,7 @@
else
turn_on()
if (on)
- to_chat(user, "You switch on the [src].")
+ to_chat(user, "You switch on [src].")
/obj/item/device/suit_cooling_unit/attackby(obj/item/W as obj, mob/user as mob)
if (HAS_TRAIT(W, TRAIT_TOOL_SCREWDRIVER))
@@ -137,12 +137,12 @@
if (istype(W, /obj/item/cell))
if(cover_open)
if(cell)
- to_chat(user, "There is a [cell] already installed here.")
+ to_chat(user, "There is \a [cell] already installed here.")
else
if(user.drop_held_item())
W.forceMove(src)
cell = W
- to_chat(user, "You insert the [cell].")
+ to_chat(user, "You insert [cell].")
updateicon()
return
@@ -169,7 +169,7 @@
if (cover_open)
if(cell)
- . += "The panel is open, exposing the [cell]."
+ . += "The panel is open, exposing [cell]."
else
. += "The panel is open."
diff --git a/code/game/objects/items/devices/teleportation.dm b/code/game/objects/items/devices/teleportation.dm
index c65286969786..793f399ecdf0 100644
--- a/code/game/objects/items/devices/teleportation.dm
+++ b/code/game/objects/items/devices/teleportation.dm
@@ -49,7 +49,7 @@
return
var/turf/current_location = get_turf(usr)//What turf is the user on?
if(!current_location || is_admin_level(current_location.z))//If turf was not found or they're on z level 2.
- to_chat(usr, "The [src] is malfunctioning.")
+ to_chat(usr, "[src] is malfunctioning.")
return
if ((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf))))
usr.set_interaction(src)
@@ -177,4 +177,3 @@
P.creator = src
src.add_fingerprint(user)
return
-
diff --git a/code/game/objects/items/devices/transfer_valve.dm b/code/game/objects/items/devices/transfer_valve.dm
index b3d433727946..6fc526936809 100644
--- a/code/game/objects/items/devices/transfer_valve.dm
+++ b/code/game/objects/items/devices/transfer_valve.dm
@@ -47,7 +47,7 @@
user.temp_drop_inv_item(A)
attached_device = A
A.forceMove(src)
- to_chat(user, SPAN_NOTICE("You attach the [item] to the valve controls and secure it."))
+ to_chat(user, SPAN_NOTICE("You attach [item] to the valve controls and secure it."))
A.holder = src
A.toggle_secure() //this calls update_icon(), which calls update_icon() on the holder (i.e. the bomb).
diff --git a/code/game/objects/items/explosives/explosive.dm b/code/game/objects/items/explosives/explosive.dm
index 0c482e8db9e7..4483372c9b85 100644
--- a/code/game/objects/items/explosives/explosive.dm
+++ b/code/game/objects/items/explosives/explosive.dm
@@ -262,8 +262,8 @@
if(falloff_mode == EXPLOSION_FALLOFF_SHAPE_LINEAR)
falloff_mode = EXPLOSION_FALLOFF_SHAPE_EXPONENTIAL
- to_chat(usr, SPAN_NOTICE("You enable the [src]'s blast wave dampener, limiting the blast radius."))
+ to_chat(usr, SPAN_NOTICE("You enable [src]'s blast wave dampener, limiting the blast radius."))
else
falloff_mode = EXPLOSION_FALLOFF_SHAPE_LINEAR
- to_chat(usr, SPAN_NOTICE("You disable the [src]'s blast wave dampener, restoring the blast radius to full."))
+ to_chat(usr, SPAN_NOTICE("You disable [src]'s blast wave dampener, restoring the blast radius to full."))
playsound(loc, 'sound/items/Screwdriver2.ogg', 25, 0, 6)
diff --git a/code/game/objects/items/explosives/grenades/chem_grenade.dm b/code/game/objects/items/explosives/grenades/chem_grenade.dm
index e975603d45d8..48430aacecc9 100644
--- a/code/game/objects/items/explosives/grenades/chem_grenade.dm
+++ b/code/game/objects/items/explosives/grenades/chem_grenade.dm
@@ -1,5 +1,5 @@
/obj/item/explosive/grenade/custom
- name = "Custom grenade"
+ name = "custom grenade"
icon_state = "grenade_custom"
desc = "A custom chemical grenade with an M40 casing. This one is made to fit into underslung grenade launchers, but can also be thrown by hand."
w_class = SIZE_SMALL
@@ -17,7 +17,7 @@
..()
/obj/item/explosive/grenade/custom/large
- name = "Large Custom Grenade"
+ name = "large custom grenade"
desc = "A custom chemical grenade with an M15 casing. This casing has a higher explosive capacity than the M40 variant."
icon_state = "large_grenade_custom"
allowed_containers = list(/obj/item/reagent_container/glass)
@@ -33,7 +33,7 @@
/obj/item/explosive/grenade/custom/metal_foam
- name = "Metal-Foam Grenade"
+ name = "metal-foam grenade"
desc = "Used for emergency sealing of air breaches."
assembly_stage = ASSEMBLY_LOCKED
harmful = FALSE
@@ -56,7 +56,7 @@
update_icon()
/obj/item/explosive/grenade/custom/incendiary
- name = "Incendiary Grenade"
+ name = "incendiary grenade"
desc = "Used for clearing rooms of living things."
assembly_stage = ASSEMBLY_LOCKED
has_blast_wave_dampener = FALSE
@@ -79,7 +79,7 @@
update_icon()
/obj/item/explosive/grenade/custom/flare
- name = "M40-F flare grenade"
+ name = "\improper M40-F flare grenade"
desc = "Chemical flare in a grenade form, designed for compatibility with most standard issue launchers."
assembly_stage = ASSEMBLY_LOCKED
has_blast_wave_dampener = FALSE
@@ -103,7 +103,7 @@
update_icon()
/obj/item/explosive/grenade/custom/large/flare
- name = "M15-F flare grenade"
+ name = "\improper M15-F flare grenade"
desc = "Chemical flare in a grenade form, expanded variant. The casing is too large to fit most launchers."
assembly_stage = ASSEMBLY_LOCKED
has_blast_wave_dampener = FALSE
diff --git a/code/game/objects/items/explosives/mine.dm b/code/game/objects/items/explosives/mine.dm
index 45478f2828f4..768a32c003fa 100644
--- a/code/game/objects/items/explosives/mine.dm
+++ b/code/game/objects/items/explosives/mine.dm
@@ -309,7 +309,7 @@
map_deployed = TRUE
/obj/item/explosive/mine/custom
- name = "Custom mine"
+ name = "custom mine"
desc = "A custom chemical mine built from an M20 casing."
icon_state = "m20_custom"
customizable = TRUE
diff --git a/code/game/objects/items/explosives/plastic.dm b/code/game/objects/items/explosives/plastic.dm
index ac0a2263cd5c..071ff3458a91 100644
--- a/code/game/objects/items/explosives/plastic.dm
+++ b/code/game/objects/items/explosives/plastic.dm
@@ -184,7 +184,7 @@
//vehicle interior stuff checks
if(SSinterior.in_interior(target))
- to_chat(user, SPAN_WARNING("It's too cramped in here to deploy \the [src]."))
+ to_chat(user, SPAN_WARNING("It's too cramped in here to deploy [src]."))
return FALSE
if(istype(target, /obj/effect) || istype(target, /obj/structure/machinery))
@@ -195,7 +195,7 @@
if(istype(target, /turf/closed/wall))
var/turf/closed/wall/W = target
if(W.hull)
- to_chat(user, SPAN_WARNING("You are unable to stick \the [src] to the [W]!"))
+ to_chat(user, SPAN_WARNING("You are unable to stick [src] to [W]!"))
return FALSE
if(istype(target, /obj/structure/window))
@@ -301,7 +301,7 @@
prime(TRUE)
/obj/item/explosive/plastic/custom
- name = "Custom plastic explosive"
+ name = "custom plastic explosive"
desc = "A custom plastic explosive."
icon_state = "custom_plastic_explosive"
overlay_image = "custom_plastic_explosive_sensing"
diff --git a/code/game/objects/items/frames/camera.dm b/code/game/objects/items/frames/camera.dm
index 59bc2844868e..efe697c3944b 100644
--- a/code/game/objects/items/frames/camera.dm
+++ b/code/game/objects/items/frames/camera.dm
@@ -167,7 +167,7 @@
to_chat(user, SPAN_WARNING("\The [WT] needs to be on!"))
return 0
- to_chat(user, SPAN_NOTICE("You start to weld the [src].."))
+ to_chat(user, SPAN_NOTICE("You start to weld [src].."))
playsound(src.loc, 'sound/items/Welder.ogg', 25, 1)
WT.eyecheck(user)
if(do_after(user, 20, INTERRUPT_ALL|BEHAVIOR_IMMOBILE, BUSY_ICON_BUILD))
diff --git a/code/game/objects/items/lightstick.dm b/code/game/objects/items/lightstick.dm
index 70418049994b..89ce2c00762e 100644
--- a/code/game/objects/items/lightstick.dm
+++ b/code/game/objects/items/lightstick.dm
@@ -22,7 +22,7 @@
/obj/item/lightstick/Crossed(mob/living/O)
if(anchored && prob(trample_chance) && can_trample)
if(!istype(O,/mob/living/carbon/xenomorph/larva))
- visible_message(SPAN_DANGER("[O] tramples the [src]!"))
+ visible_message(SPAN_DANGER("[O] tramples [src]!"))
playsound(src, 'sound/weapons/Genhit.ogg', 25, 1)
if(istype(O,/mob/living/carbon/xenomorph))
if(prob(40))
@@ -46,17 +46,17 @@
if(!anchored)//If planted
return
- to_chat(user, "You start pulling out \the [src].")
- if(!do_after(user,20, INTERRUPT_ALL|BEHAVIOR_IMMOBILE, BUSY_ICON_BUILD))
+ to_chat(user, "You start pulling out [src].")
+ if(!do_after(user, 2 SECONDS, INTERRUPT_ALL|BEHAVIOR_IMMOBILE, BUSY_ICON_BUILD))
return
anchored = FALSE
- user.visible_message("[user.name] removes \the [src] from the ground.","You remove the [src] from the ground.")
+ user.visible_message("[user.name] removes [src] from the ground.", "You remove [src] from the ground.")
icon_state = "lightstick_[s_color][anchored]"
set_light(0)
pixel_x = 0
pixel_y = 0
- playsound(user, 'sound/weapons/Genhit.ogg', 25, 1)
+ playsound(user, 'sound/weapons/Genhit.ogg', 25, TRUE)
//Red
/obj/item/lightstick/planted
diff --git a/code/game/objects/items/misc.dm b/code/game/objects/items/misc.dm
index 50c5cd75551b..1699cb24ef39 100644
--- a/code/game/objects/items/misc.dm
+++ b/code/game/objects/items/misc.dm
@@ -134,7 +134,7 @@
return
stored_item = object
mobber.drop_inv_item_to_loc(object, src)
- to_chat(mobber, SPAN_NOTICE("You slide the [object] into [src]."))
+ to_chat(mobber, SPAN_NOTICE("You slide [object] into [src]."))
playsound(mobber, 'sound/weapons/gun_shotgun_shell_insert.ogg', 15, TRUE)
update_icon()
break
diff --git a/code/game/objects/items/props/helmetgarb.dm b/code/game/objects/items/props/helmetgarb.dm
index 7860236d5d51..d8e65f1a3cd3 100644
--- a/code/game/objects/items/props/helmetgarb.dm
+++ b/code/game/objects/items/props/helmetgarb.dm
@@ -204,7 +204,7 @@
to_chat(user, SPAN_WARNING("Nothing to fix."))
else if(shape == NVG_SHAPE_COSMETIC)
- to_chat(user, SPAN_WARNING("it's nothing but a husk of what it used to be."))
+ to_chat(user, SPAN_WARNING("It's nothing but a husk of what it used to be."))
else
to_chat(user, "You begin to repair \the [src].")
@@ -496,6 +496,30 @@
desc = "The USCM had its funding pulled for these when it became apparent that not every deployed enlisted was wearing a helmet 24/7; much to the bafflement of UA High Command."
icon_state = "helmet_gasmask"
+/obj/item/prop/helmetgarb/helmet_gasmask/on_enter_storage(obj/item/storage/internal/helmet_internal_inventory)
+ ..()
+ if(!istype(helmet_internal_inventory))
+ return
+ var/obj/item/clothing/head/helmet/helmet_item = helmet_internal_inventory.master_object
+
+ if(!istype(helmet_item))
+ return
+
+ helmet_item.flags_inventory |= BLOCKGASEFFECT
+ helmet_item.flags_inv_hide |= HIDEFACE
+
+/obj/item/prop/helmetgarb/helmet_gasmask/on_exit_storage(obj/item/storage/internal/helmet_internal_inventory)
+ ..()
+ if(!istype(helmet_internal_inventory))
+ return
+ var/obj/item/clothing/head/helmet/helmet_item = helmet_internal_inventory.master_object
+
+ if(!istype(helmet_item))
+ return
+
+ helmet_item.flags_inventory &= ~(BLOCKGASEFFECT)
+ helmet_item.flags_inv_hide &= ~(HIDEFACE)
+
/obj/item/prop/helmetgarb/trimmed_wire
name = "trimmed barbed wire"
desc = "It is a length of barbed wire that's had most of the sharp points filed down so that it is safe to handle."
diff --git a/code/game/objects/items/reagent_containers/food/condiment.dm b/code/game/objects/items/reagent_containers/food/condiment.dm
index a13489f0af1e..35944e4422c4 100644
--- a/code/game/objects/items/reagent_containers/food/condiment.dm
+++ b/code/game/objects/items/reagent_containers/food/condiment.dm
@@ -23,7 +23,7 @@
return FALSE
if(M == user)
- to_chat(M, SPAN_NOTICE(" You swallow some of contents of the [src]."))
+ to_chat(M, SPAN_NOTICE("You swallow some of contents of [src]."))
else if(istype(M, /mob/living/carbon/human))
user.affected_message(M,
@@ -80,7 +80,7 @@
to_chat(user, SPAN_DANGER("[src] is empty."))
return
if(target.reagents.total_volume >= target.reagents.maximum_volume)
- to_chat(user, SPAN_DANGER("you can't add anymore to [target]."))
+ to_chat(user, SPAN_DANGER("You can't add any more to [target]."))
return
var/trans = src.reagents.trans_to(target, amount_per_transfer_from_this)
to_chat(user, SPAN_NOTICE(" You transfer [trans] units of the condiment to [target]."))
@@ -202,7 +202,7 @@
/obj/item/reagent_container/food/condiment/hotsauce/franks
name = "\improper Frank's Red Hot bottle"
desc = "A bottle of Weyland-Yutani brand Frank's Red Hot hot sauce."
- desc_lore = "Supposedly designed as a middle-ground flavor between ketchup and cayenne, this brand of spicy goodness achieved critical acclaim throughout UA space within both colonies and vessels alike. The sudden and widespread adoption was curiously timed with the near-simultaneous shelving of the original Frank's 'ULTRA' hot sauce."
+ desc_lore = "Supposedly designed as a middle-ground flavor between ketchup and cayenne, this brand of spicy goodness achieved critical acclaim throughout UA space within both colonies and vessels alike. The sudden and widespread adoption was curiously timed with the near-simultaneous shelving of the original Frank's 'ULTRA' hot sauce."
icon_state = "hotsauce_franks"
item_state = "hotsauce_franks"
diff --git a/code/game/objects/items/reagent_containers/food/fortunecookie.dm b/code/game/objects/items/reagent_containers/food/fortunecookie.dm
index 270bd4d7c44a..6077541acd84 100644
--- a/code/game/objects/items/reagent_containers/food/fortunecookie.dm
+++ b/code/game/objects/items/reagent_containers/food/fortunecookie.dm
@@ -75,7 +75,7 @@
to_chat(user,SPAN_WARNING("[src] is cracked open! How are you gonna slip something in that?"))
else
if(!cookiefortune)
- to_chat(user, SPAN_NOTICE("You slip the paper into the [src]."))
+ to_chat(user, SPAN_NOTICE("You slip the paper into [src]."))
cookiefortune = W
user.drop_inv_item_to_loc(W, src)
else
diff --git a/code/game/objects/items/reagent_containers/food/sandwich.dm b/code/game/objects/items/reagent_containers/food/sandwich.dm
index 1b7d61eaddad..511c0c042be1 100644
--- a/code/game/objects/items/reagent_containers/food/sandwich.dm
+++ b/code/game/objects/items/reagent_containers/food/sandwich.dm
@@ -18,7 +18,7 @@
/obj/item/reagent_container/food/snacks/csandwich/attackby(obj/item/W as obj, mob/user as mob)
if(istype(W, /obj/item/reagent_container/food/snacks/csandwich))
//No sandwitch inception, it causes some bugs...
- to_chat(user, SPAN_NOTICE(" You can't put a [W] in the [src]."))
+ to_chat(user, SPAN_NOTICE("You can't put \a [W] in [src]."))
return
var/sandwich_limit = 4
diff --git a/code/game/objects/items/reagent_containers/food/snacks.dm b/code/game/objects/items/reagent_containers/food/snacks.dm
index 2892eb1113e7..eb33ca6b1d0f 100644
--- a/code/game/objects/items/reagent_containers/food/snacks.dm
+++ b/code/game/objects/items/reagent_containers/food/snacks.dm
@@ -217,10 +217,10 @@
if(isanimal(M))
if(iscorgi(M))
if(bitecount == 0 || prob(50))
- M.emote("nibbles away at the [src]")
+ M.emote("nibbles away at [src]")
bitecount++
if(bitecount >= 5)
- var/sattisfaction_text = pick("burps from enjoyment", "yaps for more", "woofs twice", "looks at the area where the [src] was")
+ var/sattisfaction_text = pick("burps from enjoyment", "yaps for more", "woofs twice", "looks at the area where [src] was")
if(sattisfaction_text)
M.emote("[sattisfaction_text]")
qdel(src)
@@ -2801,7 +2801,7 @@
if( open && pizza )
user.put_in_hands( pizza )
- to_chat(user, SPAN_DANGER("You take the [src.pizza] out of the [src]."))
+ to_chat(user, SPAN_DANGER("You take the [src.pizza] out of [src]."))
src.pizza = null
update_icon()
return
@@ -2852,11 +2852,11 @@
box.update_icon()
update_icon()
- to_chat(user, SPAN_DANGER("You put the [box] ontop of the [src]!"))
+ to_chat(user, SPAN_DANGER("You put [box] ontop of [src]!"))
else
to_chat(user, SPAN_DANGER("The stack is too high!"))
else
- to_chat(user, SPAN_DANGER("Close the [box] first!"))
+ to_chat(user, SPAN_DANGER("Close [box] first!"))
return
@@ -2868,9 +2868,9 @@
update_icon()
- to_chat(user, SPAN_DANGER("You put the [I] in the [src]!"))
+ to_chat(user, SPAN_DANGER("You put [I] in [src]!"))
else
- to_chat(user, SPAN_DANGER("You try to push the [I] through the lid but it doesn't work!"))
+ to_chat(user, SPAN_DANGER("You try to push [I] through the lid but it doesn't work!"))
return
if( istype(I, /obj/item/tool/pen/) )
diff --git a/code/game/objects/items/reagent_containers/glass.dm b/code/game/objects/items/reagent_containers/glass.dm
index e2a9ba537b0d..2a7bde748fba 100644
--- a/code/game/objects/items/reagent_containers/glass.dm
+++ b/code/game/objects/items/reagent_containers/glass.dm
@@ -237,7 +237,7 @@
overlays += lid
/obj/item/reagent_container/glass/minitank
- name = "MS-11 Smart Refill Tank"
+ name = "\improper MS-11 Smart Refill Tank"
desc = "A robust little tank capable of refilling autoinjectors that previously required a nanomed system to refill. Using the wonders of microchips, it automatically sorts the correct chemicals into most single reagent autoinjectors. It is unable to partially fill them however. A valve exists on the top to transfer reagents to another container or to flush it entirely."
icon = 'icons/obj/items/tank.dmi'
icon_state = "mini_reagent_tank"
@@ -277,7 +277,7 @@
if(istype(W, /obj/item/reagent_container/hypospray/autoinjector))
var/obj/item/reagent_container/hypospray/autoinjector/A = W
if(A.mixed_chem)
- to_chat(user, SPAN_WARNING("The autoinjector doesn't fit into the [src]'s valve. It's probably not compatible."))
+ to_chat(user, SPAN_WARNING("The autoinjector doesn't fit into [src]'s valve. It's probably not compatible."))
return
if(reagents.has_reagent(A.chemname, A.volume))
reagents.trans_id_to(A, A.chemname, A.volume)
@@ -285,10 +285,10 @@
A.update_icon()
playsound(src.loc, 'sound/effects/refill.ogg', 25, 1, 3)
else
- to_chat(user, SPAN_WARNING("A small LED on \the [src] blinks. The tank can't refill \the [A] - it's either incompatible or out of chemicals to fill it with!"))
+ to_chat(user, SPAN_WARNING("A small LED on [src] blinks. The tank can't refill [A] - it's either incompatible or out of chemicals to fill it with!"))
. = ..()
return
- to_chat(user,SPAN_INFO("You successfully refill \the [W.name] with \the [src]!"))
+ to_chat(user, SPAN_INFO("You successfully refill [A] with [src]!"))
/obj/item/reagent_container/glass/minitank/verb/flush_tank(mob/user)
set category = "Object"
@@ -299,7 +299,7 @@
to_chat(user, SPAN_WARNING("It's already empty!"))
return
playsound(src.loc, 'sound/effects/slosh.ogg', 25, 1, 3)
- to_chat(user, SPAN_WARNING("You work the flush valve and successfully flush \the [src]'s contents!"))
+ to_chat(user, SPAN_WARNING("You work the flush valve and successfully flush [src]'s contents!"))
reagents.clear_reagents()
update_icon() // just to be sure
return
@@ -672,5 +672,5 @@
if(istype(AM) && (src in user))
user.visible_message("[user] starts to wipe down [AM] with [src]!")
if(do_after(user,30, INTERRUPT_ALL, BUSY_ICON_GENERIC))
- user.visible_message("[user] finishes wiping off the [AM]!")
+ user.visible_message("[user] finishes wiping off [AM]!")
AM.clean_blood()
diff --git a/code/game/objects/items/robot/robot_upgrades.dm b/code/game/objects/items/robot/robot_upgrades.dm
index 34debd7c60cf..de2daa9a3009 100644
--- a/code/game/objects/items/robot/robot_upgrades.dm
+++ b/code/game/objects/items/robot/robot_upgrades.dm
@@ -12,7 +12,7 @@
/obj/item/robot/upgrade/proc/action(mob/living/silicon/robot/R)
if(R.stat == DEAD)
- to_chat(usr, SPAN_DANGER("The [src] will not function on a deceased robot."))
+ to_chat(usr, SPAN_DANGER("[src] will not function on a deceased robot."))
return 1
return 0
diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm
index 2f4dd0f532ca..a0814290ca40 100644
--- a/code/game/objects/items/stacks/sheets/sheet_types.dm
+++ b/code/game/objects/items/stacks/sheets/sheet_types.dm
@@ -223,11 +223,13 @@ GLOBAL_LIST_INIT_TYPED(cardboard_recipes, /datum/stack_recipe, list ( \
null, \
new/datum/stack_recipe_list("empty ammo boxes",list( \
new/datum/stack_recipe("empty magazine box (88 Mod 4 AP)", /obj/item/ammo_box/magazine/mod88/empty), \
+ new/datum/stack_recipe("empty magazine box (SU-6)", /obj/item/ammo_box/magazine/su6/empty), \
+ new/datum/stack_recipe("empty magazine box (VP78)", /obj/item/ammo_box/magazine/vp78/empty), \
+ null, \
new/datum/stack_recipe("empty magazine box (M4A3)", /obj/item/ammo_box/magazine/m4a3/empty), \
new/datum/stack_recipe("empty magazine box (M4A3 AP)", /obj/item/ammo_box/magazine/m4a3/ap/empty), \
new/datum/stack_recipe("empty magazine box (M4A3 HP)", /obj/item/ammo_box/magazine/m4a3/hp/empty), \
- new/datum/stack_recipe("empty magazine box (SU-6)", /obj/item/ammo_box/magazine/su6/empty), \
- new/datum/stack_recipe("empty magazine box (VP78)", /obj/item/ammo_box/magazine/vp78/empty), \
+ new/datum/stack_recipe("empty magazine box (M4A3 Incen)", /obj/item/ammo_box/magazine/m4a3/incen/empty), \
null, \
new/datum/stack_recipe("empty speed loader box (M44)", /obj/item/ammo_box/magazine/m44/empty), \
new/datum/stack_recipe("empty speed loader box (M44 Heavy)", /obj/item/ammo_box/magazine/m44/heavy/empty), \
@@ -256,10 +258,27 @@ GLOBAL_LIST_INIT_TYPED(cardboard_recipes, /datum/stack_recipe, list ( \
new/datum/stack_recipe("empty magazine box (M41A Incen)", /obj/item/ammo_box/magazine/incen/empty), \
new/datum/stack_recipe("empty magazine box (M41A LE)", /obj/item/ammo_box/magazine/le/empty), \
null, \
+ new/datum/stack_recipe("empty magazine box (M41A MK1)", /obj/item/ammo_box/magazine/mk1/empty), \
+ new/datum/stack_recipe("empty magazine box (M41A MK1 AP)", /obj/item/ammo_box/magazine/mk1/ap/empty), \
+ null, \
+ new/datum/stack_recipe("empty drum box (M56B)", /obj/item/ammo_box/magazine/m56b/empty), \
+ new/datum/stack_recipe("empty drum box (M56B Irradiated)", /obj/item/ammo_box/magazine/m56b/dirty/empty), \
+ new/datum/stack_recipe("empty drum box (M56D)", /obj/item/ammo_box/magazine/m56d/empty), \
+ null, \
+ new/datum/stack_recipe("empty drum box (M2C)", /obj/item/ammo_box/magazine/m2c/empty), \
+ null, \
+ new/datum/stack_recipe("empty magazine box (M41AE2)", /obj/item/ammo_box/magazine/m41ae2/empty), \
+ new/datum/stack_recipe("empty magazine box (M41AE2 Holo-Target)", /obj/item/ammo_box/magazine/m41ae2/holo/empty), \
+ new/datum/stack_recipe("empty magazine box (M41AE2 HEAP)", /obj/item/ammo_box/magazine/m41ae2/heap/empty), \
+ null, \
+ new/datum/stack_recipe("empty flamer tank box (UT-Napthal)", /obj/item/ammo_box/magazine/flamer/empty), \
+ new/datum/stack_recipe("empty flamer tank box (Napalm B-Gel)", /obj/item/ammo_box/magazine/flamer/bgel/empty), \
+ null, \
new/datum/stack_recipe("empty shotgun shell box (Beanbag)", /obj/item/ammo_box/magazine/shotgun/beanbag/empty), \
new/datum/stack_recipe("empty shotgun shell box (Buckshot)", /obj/item/ammo_box/magazine/shotgun/buckshot/empty), \
new/datum/stack_recipe("empty shotgun shell box (Flechette)", /obj/item/ammo_box/magazine/shotgun/flechette/empty), \
new/datum/stack_recipe("empty shotgun shell box (Incendiary)", /obj/item/ammo_box/magazine/shotgun/incendiary/empty), \
+ new/datum/stack_recipe("empty shotgun shell box (Incendiary Buckshot)", /obj/item/ammo_box/magazine/shotgun/incendiarybuck/empty), \
new/datum/stack_recipe("empty shotgun shell box (Slugs)", /obj/item/ammo_box/magazine/shotgun/empty), \
null, \
new/datum/stack_recipe("empty 45-70 bullets box", /obj/item/ammo_box/magazine/lever_action/empty), \
@@ -279,17 +298,42 @@ GLOBAL_LIST_INIT_TYPED(cardboard_recipes, /datum/stack_recipe, list ( \
new/datum/stack_recipe("empty rifle ammo box (10x24mm Incen)", /obj/item/ammo_box/rounds/incen/empty), \
new/datum/stack_recipe("empty rifle ammo box (10x24mm LE)", /obj/item/ammo_box/rounds/le/empty), \
null, \
+ new/datum/stack_recipe("empty rifle ammo box (9mm)", /obj/item/ammo_box/rounds/pistol/empty), \
+ new/datum/stack_recipe("empty rifle ammo box (9mm AP)", /obj/item/ammo_box/rounds/pistol/ap/empty), \
+ new/datum/stack_recipe("empty rifle ammo box (9mm HP)", /obj/item/ammo_box/rounds/pistol/hp/empty), \
+ new/datum/stack_recipe("empty rifle ammo box (9mm Incen)", /obj/item/ammo_box/rounds/pistol/incen/empty), \
+ null, \
new/datum/stack_recipe("empty box of MREs", /obj/item/ammo_box/magazine/misc/mre/empty), \
new/datum/stack_recipe("empty box of M94 Marking Flare Packs", /obj/item/ammo_box/magazine/misc/flares/empty), \
+ new/datum/stack_recipe("empty box of M89 Signal Flare Packs", /obj/item/ammo_box/magazine/misc/flares/signal/empty), \
new/datum/stack_recipe("empty box of flashlights", /obj/item/ammo_box/magazine/misc/flashlight/empty), \
new/datum/stack_recipe("empty box of High-Capacity Power Cells", /obj/item/ammo_box/magazine/misc/power_cell/empty), \
null, \
+ new/datum/stack_recipe("empty magazine box (Desert Eagle)", /obj/item/ammo_box/magazine/deagle/empty), \
+ new/datum/stack_recipe("empty magazine box (Desert Eagle Heavy)", /obj/item/ammo_box/magazine/deagle/super/empty), \
+ new/datum/stack_recipe("empty magazine box (Desert Eagle High-Impact)", /obj/item/ammo_box/magazine/deagle/super/highimpact/empty), \
+ new/datum/stack_recipe("empty magazine box (Desert Eagle AP)", /obj/item/ammo_box/magazine/deagle/super/highimpact/ap/empty), \
+ null, \
+ new/datum/stack_recipe("empty magazine box (Spearhead HP)", /obj/item/ammo_box/magazine/spearhead/empty), \
+ new/datum/stack_recipe("empty magazine box (Spearhead)", /obj/item/ammo_box/magazine/spearhead/normalpoint/empty), \
+ null, \
new/datum/stack_recipe("empty magazine box (M16)", /obj/item/ammo_box/magazine/M16/empty), \
new/datum/stack_recipe("empty magazine box (M16 AP)", /obj/item/ammo_box/magazine/M16/ap/empty), \
null, \
+ new/datum/stack_recipe("empty magazine box (AR10)", /obj/item/ammo_box/magazine/ar10/empty), \
+ null, \
+ new/datum/stack_recipe("empty magazine box (MP5)", /obj/item/ammo_box/magazine/mp5/empty), \
+ null, \
+ new/datum/stack_recipe("empty magazine box (NSG 23)", /obj/item/ammo_box/magazine/nsg23/empty), \
+ new/datum/stack_recipe("empty magazine box (NSG 23 AP)", /obj/item/ammo_box/magazine/nsg23/ap/empty), \
+ new/datum/stack_recipe("empty magazine box (NSG 23 EX)", /obj/item/ammo_box/magazine/nsg23/ex/empty), \
+ null, \
new/datum/stack_recipe("empty magazine box (Type71)", /obj/item/ammo_box/magazine/type71/empty), \
new/datum/stack_recipe("empty magazine box (Type71 AP)", /obj/item/ammo_box/magazine/type71/ap/empty), \
null, \
+ new/datum/stack_recipe("empty magazine box (Type73)", /obj/item/ammo_box/magazine/type73/empty), \
+ new/datum/stack_recipe("empty magazine box (Type73 High-Impact)", /obj/item/ammo_box/magazine/type73/impact/empty), \
+ null, \
new/datum/stack_recipe("empty rifle ammo box (5.45x39mm)", /obj/item/ammo_box/rounds/type71/empty), \
new/datum/stack_recipe("empty rifle ammo box (5.45x39mm AP)", /obj/item/ammo_box/rounds/type71/ap/empty), \
diff --git a/code/game/objects/items/storage/large_holster.dm b/code/game/objects/items/storage/large_holster.dm
index 76f98c423974..b02dff1bdbcc 100644
--- a/code/game/objects/items/storage/large_holster.dm
+++ b/code/game/objects/items/storage/large_holster.dm
@@ -250,12 +250,12 @@
return FALSE
if(user.back != src)
- to_chat(user, "The [src] must be equipped before you can switch types")
+ to_chat(user, SPAN_WARNING("[src] must be equipped before you can switch types."))
return
var/obj/item/weapon/gun/flamer/M240T/flamer = user.get_active_hand()
if(!istype(flamer))
- to_chat(user, "You must be holding the M240-T incinerator unit to use [src]")
+ to_chat(user, SPAN_WARNING("You must be holding [flamer] to use [src]."))
return
if(!active_fuel)
diff --git a/code/game/objects/items/tools/flame_tools.dm b/code/game/objects/items/tools/flame_tools.dm
index 7681e74a1d88..82870f7ed8d1 100644
--- a/code/game/objects/items/tools/flame_tools.dm
+++ b/code/game/objects/items/tools/flame_tools.dm
@@ -233,12 +233,12 @@ CIGARETTE PACKETS ARE IN FANCY.DM
light(SPAN_NOTICE("[user] fiddles with [W], and manages to light their [name]."))
else if(istype(W, /obj/item/attachable/attached_gun/flamer))
- light(SPAN_NOTICE("[user] lights their [src] with the [W]."))
+ light(SPAN_NOTICE("[user] lights their [name] with [W]."))
else if(istype(W, /obj/item/weapon/gun/flamer))
var/obj/item/weapon/gun/flamer/F = W
if(!(F.flags_gun_features & GUN_TRIGGER_SAFETY))
- light(SPAN_NOTICE("[user] lights their [src] with the pilot light of the [F]."))
+ light(SPAN_NOTICE("[user] lights their [name] with the pilot light of [F]."))
else
to_chat(user, SPAN_WARNING("Turn on the pilot light first!"))
@@ -246,20 +246,20 @@ CIGARETTE PACKETS ARE IN FANCY.DM
var/obj/item/weapon/gun/G = W
for(var/slot in G.attachments)
if(istype(G.attachments[slot], /obj/item/attachable/attached_gun/flamer))
- light(SPAN_NOTICE("[user] lights their [src] with [G.attachments[slot]]."))
+ light(SPAN_NOTICE("[user] lights their [name] with [G.attachments[slot]]."))
break
else if(istype(W, /obj/item/tool/surgery/cautery))
- light(SPAN_NOTICE("[user] lights their [src] with the [W]."))
+ light(SPAN_NOTICE("[user] lights their [name] with [W]."))
else if(istype(W, /obj/item/clothing/mask/cigarette))
var/obj/item/clothing/mask/cigarette/C = W
if(C.item_state == icon_on)
- light(SPAN_NOTICE("[user] lights their [src] with the [C] after a few attempts."))
+ light(SPAN_NOTICE("[user] lights their [name] with [C] after a few attempts."))
else if(istype(W, /obj/item/tool/candle))
if(W.heat_source > 200)
- light(SPAN_NOTICE("[user] lights their [src] with the [W] after a few attempts."))
+ light(SPAN_NOTICE("[user] lights their [name] with [W] after a few attempts."))
return
@@ -529,12 +529,12 @@ CIGARETTE PACKETS ARE IN FANCY.DM
light(SPAN_NOTICE("[user] fiddles with [W], and manages to light their [name] with the power of science."))
else if(istype(W, /obj/item/attachable/attached_gun/flamer))
- light(SPAN_NOTICE("[user] lights their [src] with the [W], bet that would have looked cooler if it was attached to something first!"))
+ light(SPAN_NOTICE("[user] lights their [name] with [W], bet that would have looked cooler if it was attached to something first!"))
else if(istype(W, /obj/item/weapon/gun/flamer))
var/obj/item/weapon/gun/flamer/F = W
if(!(F.flags_gun_features & GUN_TRIGGER_SAFETY))
- light(SPAN_NOTICE("[user] lights their [src] with the pilot light of the [F], the glint of pyromania in their eye."))
+ light(SPAN_NOTICE("[user] lights their [name] with the pilot light of [F], the glint of pyromania in their eye."))
else
to_chat(user, SPAN_WARNING("Turn on the pilot light first!"))
@@ -546,16 +546,16 @@ CIGARETTE PACKETS ARE IN FANCY.DM
break
else if(istype(W, /obj/item/tool/surgery/cautery))
- light(SPAN_NOTICE("[user] lights their [src] with the [W], that can't be sterile!"))
+ light(SPAN_NOTICE("[user] lights their [name] with [W], that can't be sterile!"))
else if(istype(W, /obj/item/clothing/mask/cigarette))
var/obj/item/clothing/mask/cigarette/C = W
if(C.item_state == icon_on)
- light(SPAN_NOTICE("[user] lights their [src] with the [C] after a few attempts."))
+ light(SPAN_NOTICE("[user] lights their [name] with [C] after a few attempts."))
else if(istype(W, /obj/item/tool/candle))
if(W.heat_source > 200)
- light(SPAN_NOTICE("[user] lights their [src] with the [W] after a few attempts."))
+ light(SPAN_NOTICE("[user] lights their [name] with [W] after a few attempts."))
/////////////////
//SMOKING PIPES//
@@ -751,7 +751,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
else
playsound(src.loc,"lighter",10, 1, 3)
if(prob(95))
- user.visible_message(SPAN_NOTICE("After a few attempts, [user] manages to light the [src]."))
+ user.visible_message(SPAN_NOTICE("After a few attempts, [user] manages to light [src]."))
else
to_chat(user, SPAN_WARNING("You burn yourself while lighting the lighter."))
@@ -759,7 +759,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
user.apply_damage(2,BURN,"l_hand")
else
user.apply_damage(2,BURN,"r_hand")
- user.visible_message(SPAN_NOTICE("After a few attempts, [user] manages to light the [src], they however burn their finger in the process."))
+ user.visible_message(SPAN_NOTICE("After a few attempts, [user] manages to light [src], they however burn their finger in the process."))
set_light_range(2)
set_light_on(TRUE)
@@ -777,10 +777,10 @@ CIGARETTE PACKETS ARE IN FANCY.DM
item_state = icon_off
if(!silent)
if(istype(src, /obj/item/tool/lighter/zippo) )
- bearer.visible_message("You hear a quiet click, as [bearer] shuts off [src] without even looking at what they're doing.")
+ bearer.visible_message(SPAN_ROSE("You hear a quiet click, as [bearer] shuts off [src] without even looking at what they're doing."))
playsound(src.loc,"zippo_close",10, 1, 3)
else
- bearer.visible_message(SPAN_NOTICE("[bearer] quietly shuts off the [src]."))
+ bearer.visible_message(SPAN_NOTICE("[bearer] quietly shuts off [src]."))
set_light_on(FALSE)
STOP_PROCESSING(SSobj, src)
@@ -805,4 +805,3 @@ CIGARETTE PACKETS ARE IN FANCY.DM
cig.light(SPAN_NOTICE("[user] holds the [name] out for [M], and lights the [cig.name]."))
else
..()
-
diff --git a/code/game/objects/items/tools/kitchen_tools.dm b/code/game/objects/items/tools/kitchen_tools.dm
index bb763ada9911..2cff941be8d6 100644
--- a/code/game/objects/items/tools/kitchen_tools.dm
+++ b/code/game/objects/items/tools/kitchen_tools.dm
@@ -218,7 +218,7 @@
var/cooldown = 0
/obj/item/tool/kitchen/tray/attack(mob/living/carbon/M, mob/living/carbon/user)
- to_chat(user, SPAN_WARNING("You accidentally slam yourself with the [src]!"))
+ to_chat(user, SPAN_WARNING("You accidentally slam yourself with [src]!"))
user.apply_effect(1, WEAKEN)
user.take_limb_damage(2)
diff --git a/code/game/objects/items/tools/maintenance_tools.dm b/code/game/objects/items/tools/maintenance_tools.dm
index a326808bf491..a02536800f15 100644
--- a/code/game/objects/items/tools/maintenance_tools.dm
+++ b/code/game/objects/items/tools/maintenance_tools.dm
@@ -96,8 +96,8 @@
if(E)
var/safety = H.get_eye_protection()
if(!safety)
- to_chat(user, SPAN_DANGER("You stab [H] in the eyes with the [src]!"))
- visible_message(SPAN_DANGER("[user] stabs [H] in the eyes with the [src]!"))
+ user.visible_message(SPAN_DANGER("[user] stabs [H] in the eyes with [src]!"),
+ SPAN_DANGER("You stab [H] in the eyes with [src]!"))
E.take_damage(rand(8,20))
return ..()
/obj/item/tool/screwdriver/tactical
diff --git a/code/game/objects/items/tools/misc_tools.dm b/code/game/objects/items/tools/misc_tools.dm
index f70f93497021..44aaab771db8 100644
--- a/code/game/objects/items/tools/misc_tools.dm
+++ b/code/game/objects/items/tools/misc_tools.dm
@@ -132,7 +132,7 @@
qdel(I) //delete the paper item
labels_left = initial(labels_left)
else
- to_chat(user, SPAN_NOTICE("The [src] is already full."))
+ to_chat(user, SPAN_NOTICE("[src] is already full."))
/*
Instead of updating labels_left to user every label used,
diff --git a/code/game/objects/items/tools/shovel_tools.dm b/code/game/objects/items/tools/shovel_tools.dm
index 008b37705fe3..ad74dca54e88 100644
--- a/code/game/objects/items/tools/shovel_tools.dm
+++ b/code/game/objects/items/tools/shovel_tools.dm
@@ -151,7 +151,7 @@
/obj/item/tool/shovel/proc/dump_shovel(atom/target, mob/user)
var/turf/T = target
- to_chat(user, SPAN_NOTICE("you dump the [dirt_type_to_name(dirt_type)]!"))
+ to_chat(user, SPAN_NOTICE("You dump the [dirt_type_to_name(dirt_type)]!"))
playsound(user.loc, "rustle", 30, 1, 6)
if(dirt_type == DIRT_TYPE_SNOW)
var/obj/item/stack/snow/S = locate() in T
diff --git a/code/game/objects/items/toys/toys.dm b/code/game/objects/items/toys/toys.dm
index 88946f5fa446..65234c59b89b 100644
--- a/code/game/objects/items/toys/toys.dm
+++ b/code/game/objects/items/toys/toys.dm
@@ -44,7 +44,7 @@
if(!proximity) return
if (istype(A, /obj/structure/reagent_dispensers/watertank) && get_dist(src,A) <= 1)
A.reagents.trans_to(src, 10)
- to_chat(user, SPAN_NOTICE(" You fill the balloon with the contents of [A]."))
+ to_chat(user, SPAN_NOTICE("You fill the balloon with the contents of [A]."))
src.desc = "A translucent balloon with some form of liquid sloshing around in it."
src.update_icon()
return
@@ -53,22 +53,22 @@
if(istype(O, /obj/item/reagent_container/glass))
if(O.reagents)
if(O.reagents.total_volume < 1)
- to_chat(user, "The [O] is empty.")
+ to_chat(user, SPAN_WARNING("[O] is empty."))
else if(O.reagents.total_volume >= 1)
if(O.reagents.has_reagent("pacid", 1))
- to_chat(user, "The acid chews through the balloon!")
+ to_chat(user, SPAN_WARNING("The acid chews through the balloon!"))
O.reagents.reaction(user)
qdel(src)
else
src.desc = "A translucent balloon with some form of liquid sloshing around in it."
- to_chat(user, SPAN_NOTICE(" You fill the balloon with the contents of [O]."))
+ to_chat(user, SPAN_NOTICE("You fill the balloon with the contents of [O]."))
O.reagents.trans_to(src, 10)
src.update_icon()
return
/obj/item/toy/balloon/launch_impact(atom/hit_atom)
if(src.reagents.total_volume >= 1)
- src.visible_message(SPAN_DANGER("The [src] bursts!"),"You hear a pop and a splash.")
+ src.visible_message(SPAN_DANGER("[src] bursts!"),"You hear a pop and a splash.")
src.reagents.reaction(get_turf(hit_atom))
for(var/atom/A in get_turf(hit_atom))
src.reagents.reaction(A)
diff --git a/code/game/objects/items/weapons/stunbaton.dm b/code/game/objects/items/weapons/stunbaton.dm
index 82fdf30f0fc4..310c53dd5d0f 100644
--- a/code/game/objects/items/weapons/stunbaton.dm
+++ b/code/game/objects/items/weapons/stunbaton.dm
@@ -106,7 +106,7 @@
bcell.update_icon()
bcell.forceMove(get_turf(src.loc))
bcell = null
- to_chat(user, SPAN_NOTICE("You remove the cell from the [src]."))
+ to_chat(user, SPAN_NOTICE("You remove the cell from [src]."))
status = 0
update_icon()
return
@@ -183,10 +183,10 @@
// Logging
if(user == L)
- user.attack_log += "\[[time_stamp()]\] [key_name(user)] stunned themselves with the [src] in [get_area(user)]"
+ user.attack_log += "\[[time_stamp()]\] [key_name(user)] stunned themselves with [src] in [get_area(user)]"
else
- msg_admin_attack("[key_name(user)] stunned [key_name(L)] with the [src] in [get_area(user)] ([user.loc.x],[user.loc.y],[user.loc.z]).", user.loc.x, user.loc.y, user.loc.z)
- var/logentry = "\[[time_stamp()]\] [key_name(user)] stunned [key_name(L)] with the [src] in [get_area(user)]"
+ msg_admin_attack("[key_name(user)] stunned [key_name(L)] with [src] in [get_area(user)] ([user.loc.x],[user.loc.y],[user.loc.z]).", user.loc.x, user.loc.y, user.loc.z)
+ var/logentry = "\[[time_stamp()]\] [key_name(user)] stunned [key_name(L)] with [src] in [get_area(user)]"
L.attack_log += logentry
user.attack_log += logentry
diff --git a/code/game/objects/items/weapons/weaponry.dm b/code/game/objects/items/weapons/weaponry.dm
index 0baa83f8e791..f3c76bcff638 100644
--- a/code/game/objects/items/weapons/weaponry.dm
+++ b/code/game/objects/items/weapons/weaponry.dm
@@ -113,7 +113,7 @@
w_class = SIZE_MEDIUM
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
else
- to_chat(user, SPAN_NOTICE("The [src] can now be concealed."))
+ to_chat(user, SPAN_NOTICE("[src] can now be concealed."))
force = initial(force)
edge = 0
sharp = 0
diff --git a/code/game/objects/structures.dm b/code/game/objects/structures.dm
index 95998d5de79a..2519ed2940d5 100644
--- a/code/game/objects/structures.dm
+++ b/code/game/objects/structures.dm
@@ -209,7 +209,7 @@
/obj/structure/proc/toggle_anchored(obj/item/W, mob/user)
if(!wrenchable)
- to_chat(user, SPAN_WARNING("The [src] cannot be [anchored ? "un" : ""]anchored."))
+ to_chat(user, SPAN_WARNING("[src] cannot be [anchored ? "un" : ""]anchored."))
return FALSE
else
// Wrenching is faster if we are better at engineering
diff --git a/code/game/objects/structures/barricade/metal.dm b/code/game/objects/structures/barricade/metal.dm
index 4056ac9021f8..4f250eed50e9 100644
--- a/code/game/objects/structures/barricade/metal.dm
+++ b/code/game/objects/structures/barricade/metal.dm
@@ -110,7 +110,7 @@
to_chat(user, SPAN_NOTICE("You lack the required metal."))
return
if((usr.get_active_hand()) != metal)
- to_chat(user, SPAN_WARNING("You must be holding the [metal] to upgrade \the [src]!"))
+ to_chat(user, SPAN_WARNING("You must be holding [metal] to upgrade [src]!"))
return
switch(choice)
@@ -150,7 +150,7 @@
to_chat(user, SPAN_NOTICE("You lack the required metal."))
return
if((usr.get_active_hand()) != metal)
- to_chat(user, SPAN_WARNING("You must be holding the [metal] to upgrade \the [src]!"))
+ to_chat(user, SPAN_WARNING("You must be holding [metal] to upgrade [src]!"))
return
switch(choice)
diff --git a/code/game/objects/structures/barricade/plasteel.dm b/code/game/objects/structures/barricade/plasteel.dm
index 85057f9a0596..dd95aa3f1baf 100644
--- a/code/game/objects/structures/barricade/plasteel.dm
+++ b/code/game/objects/structures/barricade/plasteel.dm
@@ -125,7 +125,7 @@
user.visible_message(SPAN_NOTICE("[user] sets up [src] for linking."),
SPAN_NOTICE("You set up [src] for linking."))
else
- to_chat(user, SPAN_WARNING("The [src] has no linking points..."))
+ to_chat(user, SPAN_WARNING("[src] has no linking points..."))
return
linked = !linked
for(var/direction in GLOB.cardinals)
@@ -210,7 +210,7 @@
if(closed)
if(recentlyflipped)
- to_chat(user, SPAN_NOTICE("The [src] has been flipped too recently!"))
+ to_chat(user, SPAN_NOTICE("[src] has been flipped too recently!"))
return
user.visible_message(SPAN_NOTICE("[user] flips [src] open."),
SPAN_NOTICE("You flip [src] open."))
@@ -222,7 +222,7 @@
else
if(recentlyflipped)
- to_chat(user, SPAN_NOTICE("The [src] has been flipped too recently!"))
+ to_chat(user, SPAN_NOTICE("[src] has been flipped too recently!"))
return
user.visible_message(SPAN_NOTICE("[user] flips [src] closed."),
SPAN_NOTICE("You flip [src] closed."))
diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm
index 2efd8e4e81e9..fa87cd6b2b71 100644
--- a/code/game/objects/structures/crates_lockers/closets.dm
+++ b/code/game/objects/structures/crates_lockers/closets.dm
@@ -200,7 +200,7 @@
/obj/structure/closet/attack_animal(mob/living/user)
if(user.wall_smash)
- visible_message(SPAN_DANGER("[user] destroys the [src]. "))
+ visible_message(SPAN_DANGER("[user] destroys [src]."))
for(var/atom/movable/A as mob|obj in src)
A.forceMove(src.loc)
qdel(src)
diff --git a/code/game/objects/structures/flora.dm b/code/game/objects/structures/flora.dm
index f1c9daa514c1..0e4a20cf989a 100644
--- a/code/game/objects/structures/flora.dm
+++ b/code/game/objects/structures/flora.dm
@@ -725,7 +725,7 @@ ICEY GRASS. IT LOOKS LIKE IT'S MADE OF ICE.
//this bush marks the edge of the map, you can't destroy it
to_chat(user, SPAN_DANGER("You flail away at the undergrowth, but it's too thick here."))
else
- user.visible_message(SPAN_DANGER("[user] flails away at the [src] with [I]."),SPAN_DANGER("You flail away at the [src] with [I]."))
+ user.visible_message(SPAN_DANGER("[user] flails away at [src] with [I]."), SPAN_DANGER("You flail away at [src] with [I]."))
playsound(src.loc, 'sound/effects/vegetation_hit.ogg', 25, 1)
health -= damage
if(health < 0)
@@ -758,4 +758,3 @@ ICEY GRASS. IT LOOKS LIKE IT'S MADE OF ICE.
desc = "Looks like some of that fruit might be edible."
icon_tag = "plant"
variations = 7
-
diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm
index 0f864ee2f116..063f6a337290 100644
--- a/code/game/objects/structures/grille.dm
+++ b/code/game/objects/structures/grille.dm
@@ -166,7 +166,7 @@
if (ST.use(1))
var/obj/structure/window/WD = new wtype(loc)
WD.set_constructed_window(dir_to_set)
- to_chat(user, SPAN_NOTICE("You place the [WD] on [src]."))
+ to_chat(user, SPAN_NOTICE("You place [WD] on [src]."))
return
//window placing end
diff --git a/code/game/objects/structures/props.dm b/code/game/objects/structures/props.dm
index 6e6f6d5f8247..e14eee13b1dd 100644
--- a/code/game/objects/structures/props.dm
+++ b/code/game/objects/structures/props.dm
@@ -1187,7 +1187,7 @@
var/obj/item/dogtag/dog = W
if(!tagged)
tagged = TRUE
- user.visible_message(SPAN_NOTICE("[user] drapes the [W] around the [src]."))
+ user.visible_message(SPAN_NOTICE("[user] drapes [W] around [src]."))
dogtag_name = popleft(dog.fallen_names)
dogtag_assign = popleft(dog.fallen_assgns)
dogtag_blood = popleft(dog.fallen_blood_types)
@@ -1198,7 +1198,7 @@
else
return
else
- to_chat(user, SPAN_WARNING("There's already a dog tag on the [src]!"))
+ to_chat(user, SPAN_WARNING("There's already a dog tag on [src]!"))
balloon_alert(user, "already a tag here!")
if(istype(W, /obj/item/clothing/head))
@@ -1372,4 +1372,3 @@
if(initial(emote.sound))
playsound(loc, initial(emote.sound), 50, FALSE)
return TRUE
-
diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm
index 60c37fcdc607..daf4a47a8ef6 100644
--- a/code/game/objects/structures/watercloset.dm
+++ b/code/game/objects/structures/watercloset.dm
@@ -151,7 +151,7 @@
GM.apply_damage(5, OXY)
swirlie = null
else
- user.visible_message(SPAN_DANGER("[user] slams [GM.name] into the [src]!"), SPAN_NOTICE("You slam [GM.name] into the [src]!"))
+ user.visible_message(SPAN_DANGER("[user] slams [GM.name] into [src]!"), SPAN_NOTICE("You slam [GM.name] into [src]!"))
GM.apply_damage(8, BRUTE)
else
to_chat(user, SPAN_NOTICE("You need a tighter grip."))
@@ -189,7 +189,7 @@
if(!GM.loc == get_turf(src))
to_chat(user, SPAN_NOTICE("[GM.name] needs to be on the urinal."))
return
- user.visible_message(SPAN_DANGER("[user] slams [GM.name] into the [src]!"), SPAN_NOTICE("You slam [GM.name] into the [src]!"))
+ user.visible_message(SPAN_DANGER("[user] slams [GM.name] into [src]!"), SPAN_NOTICE("You slam [GM.name] into [src]!"))
GM.apply_damage(8, BRUTE)
else
to_chat(user, SPAN_NOTICE("You need a tighter grip."))
diff --git a/code/game/turfs/auto_turf.dm b/code/game/turfs/auto_turf.dm
index 75501a1a7ecd..e07f7324bcc2 100644
--- a/code/game/turfs/auto_turf.dm
+++ b/code/game/turfs/auto_turf.dm
@@ -169,7 +169,7 @@
if(istype(I, /obj/item/lightstick))
var/obj/item/lightstick/L = I
if(locate(/obj/item/lightstick) in get_turf(src))
- to_chat(user, "There's already a [L] at this position!")
+ to_chat(user, "There's already \a [L] at this position!")
return
to_chat(user, "Now planting \the [L].")
diff --git a/code/game/turfs/open.dm b/code/game/turfs/open.dm
index 72624aff99c8..7d9dd6303c64 100644
--- a/code/game/turfs/open.dm
+++ b/code/game/turfs/open.dm
@@ -292,7 +292,7 @@
if(istype(I, /obj/item/lightstick))
var/obj/item/lightstick/L = I
if(locate(/obj/item/lightstick) in get_turf(src))
- to_chat(user, "There's already a [L] at this position!")
+ to_chat(user, "There's already \a [L] at this position!")
return
to_chat(user, "Now planting \the [L].")
@@ -787,7 +787,7 @@
if(istype(I, /obj/item/lightstick))
var/obj/item/lightstick/L = I
if(locate(/obj/item/lightstick) in get_turf(src))
- to_chat(user, "There's already a [L] at this position!")
+ to_chat(user, "There's already \a [L] at this position!")
return
to_chat(user, "Now planting \the [L].")
diff --git a/code/game/turfs/snow.dm b/code/game/turfs/snow.dm
index 42cc9bd544c5..f7fb746cfbbc 100644
--- a/code/game/turfs/snow.dm
+++ b/code/game/turfs/snow.dm
@@ -16,7 +16,7 @@
if(istype(I, /obj/item/lightstick))
var/obj/item/lightstick/L = I
if(locate(/obj/item/lightstick) in get_turf(src))
- to_chat(user, "There's already a [L] at this position!")
+ to_chat(user, "There's already \a [L] at this position!")
return
to_chat(user, "Now planting \the [L].")
@@ -148,6 +148,3 @@
/turf/open/snow/layer3
icon_state = "snow_3"
bleed_layer = 3
-
-
-
diff --git a/code/game/turfs/walls/walls.dm b/code/game/turfs/walls/walls.dm
index 437f203c5fbb..303a9a7655e8 100644
--- a/code/game/turfs/walls/walls.dm
+++ b/code/game/turfs/walls/walls.dm
@@ -88,8 +88,6 @@
if(istype(found_object, /obj/structure/sign/poster))
var/obj/structure/sign/poster/found_poster = found_object
found_poster.roll_and_drop(src)
- if(istype(found_object, /obj/effect/alien/weeds))
- qdel(found_object)
var/list/turf/cardinal_neighbors = list(get_step(src, NORTH), get_step(src, SOUTH), get_step(src, EAST), get_step(src, WEST))
for(var/turf/cardinal_turf as anything in cardinal_neighbors)
diff --git a/code/game/verbs/who.dm b/code/game/verbs/who.dm
index 45590c3fa006..9cad56cdabe8 100644
--- a/code/game/verbs/who.dm
+++ b/code/game/verbs/who.dm
@@ -182,7 +182,7 @@
for(var/category in listings)
dat += "
Current [category] ([length(listings[category])]):
\n"
for(var/client/entry in listings[category])
- dat += "\t[entry.key] is a [entry.admin_holder.rank]"
+ dat += "\t[entry.key] is \a [entry.admin_holder.rank]"
if(entry.admin_holder.extra_titles?.len)
for(var/srank in entry.admin_holder.extra_titles)
dat += " & [srank]"
diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm
index 9833505ee346..07d7d4e89623 100644
--- a/code/modules/admin/admin_verbs.dm
+++ b/code/modules/admin/admin_verbs.dm
@@ -36,6 +36,7 @@ GLOBAL_LIST_INIT(admin_verbs_default, list(
/client/proc/togglenichelogs,
/datum/admins/proc/display_tags,
/datum/admins/proc/player_notes_show,
+ /datum/admins/proc/check_ckey,
/datum/admins/proc/toggleooc, /*toggles ooc on/off for everyone*/
/datum/admins/proc/togglelooc, /*toggles ooc on/off for everyone*/
/datum/admins/proc/toggledsay, /*toggles dsay on/off for everyone*/
diff --git a/code/modules/admin/create_mob.dm b/code/modules/admin/create_mob.dm
index 9ac4c5f807ea..910bafd50a9b 100644
--- a/code/modules/admin/create_mob.dm
+++ b/code/modules/admin/create_mob.dm
@@ -8,4 +8,4 @@
create_mob_html = replacetext(create_mob_html, "null /* object types */", "\"[mobjs]\"")
create_mob_html = replacetext(create_mob_html, "/* href token */", RawHrefToken(forceGlobal = TRUE))
- show_browser(user, replacetext(create_mob_html, "/* ref src */", "\ref[src]"), "Create Mob", "create_mob", "size=425x475")
+ show_browser(user, replacetext(create_mob_html, "/* ref src */", "\ref[src]"), "Create Mob", "create_mob", "size=450x525")
diff --git a/code/modules/admin/create_object.dm b/code/modules/admin/create_object.dm
index 3b1f978dd50a..054fc20aef5e 100644
--- a/code/modules/admin/create_object.dm
+++ b/code/modules/admin/create_object.dm
@@ -8,7 +8,7 @@
create_object_html = replacetext(create_object_html, "null /* object types */", "\"[objectjs]\"")
create_object_html = replacetext(create_object_html, "/* href token */", RawHrefToken(forceGlobal = TRUE))
- show_browser(user, replacetext(create_object_html, "/* ref src */", "\ref[src]"), "Create Object", "create_object", "size=425x475")
+ show_browser(user, replacetext(create_object_html, "/* ref src */", "\ref[src]"), "Create Object", "create_object", "size=450x525")
/datum/admins/proc/quick_create_object(mob/user)
@@ -46,4 +46,4 @@
quick_create_object_html = replacetext(quick_create_object_html, "null /* object types */", "\"[objectjs]\"")
quick_create_object_html = replacetext(quick_create_object_html, "/* href token */", RawHrefToken(forceGlobal = TRUE))
- show_browser(user, replacetext(quick_create_object_html, "/* ref src */", "\ref[src]"), "Quick Create Object", "quick_create_object", "size=425x475")
+ show_browser(user, replacetext(quick_create_object_html, "/* ref src */", "\ref[src]"), "Quick Create Object", "quick_create_object", "size=450x525")
diff --git a/code/modules/admin/create_turf.dm b/code/modules/admin/create_turf.dm
index 1535c303bcd9..cc8bd1a5ec77 100644
--- a/code/modules/admin/create_turf.dm
+++ b/code/modules/admin/create_turf.dm
@@ -8,4 +8,4 @@
create_turf_html = replacetext(create_turf_html, "null /* object types */", "\"[turfjs]\"")
create_turf_html = replacetext(create_turf_html, "/* href token */", RawHrefToken(forceGlobal = TRUE))
- show_browser(usr, replacetext(create_turf_html, "/* ref src */", "\ref[src]"), "Create Turf", "create_turf", "size=425x475")
+ show_browser(usr, replacetext(create_turf_html, "/* ref src */", "\ref[src]"), "Create Turf", "create_turf", "size=450x525")
diff --git a/code/modules/admin/tabs/admin_tab.dm b/code/modules/admin/tabs/admin_tab.dm
index cc927a62d3b0..8dce41ac8235 100644
--- a/code/modules/admin/tabs/admin_tab.dm
+++ b/code/modules/admin/tabs/admin_tab.dm
@@ -185,6 +185,29 @@
dat += "