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 += "" show_browser(usr, dat, "Admin record for [key]", "adminplayerinfo", "size=480x480") +/datum/admins/proc/check_ckey(target_key as text) + set name = "Check CKey" + set category = "Admin" + + var/mob/user = usr + if (!istype(src, /datum/admins)) + src = user.client.admin_holder + if (!istype(src, /datum/admins) || !(rights & R_MOD)) + to_chat(user, "Error: you are not an admin!") + return + target_key = ckey(target_key) + if(!target_key) + to_chat(user, "Error: No key detected!") + return + to_chat(user, SPAN_WARNING("Checking Ckey: [target_key]")) + var/list/keys = analyze_ckey(target_key) + if(!keys) + to_chat(user, SPAN_WARNING("No results for [target_key].")) + return + to_chat(user, SPAN_WARNING("Check CKey Results: [keys.Join(", ")]")) + + log_admin("[key_name(user)] analyzed ckey '[target_key]'") + /datum/admins/proc/sleepall() set name = "Sleep All" set category = "Admin.InView" diff --git a/code/modules/admin/tabs/event_tab.dm b/code/modules/admin/tabs/event_tab.dm index 380cf56fef82..830717ef91b9 100644 --- a/code/modules/admin/tabs/event_tab.dm +++ b/code/modules/admin/tabs/event_tab.dm @@ -217,18 +217,15 @@ if(!istype(chosen_ert)) return - - var/launch_broadcast = tgui_alert(usr, "Would you like to broadcast the beacon launch? This will reveal the distress beacon to all players.", "Announce distress beacon?", list("Yes", "No"), 20 SECONDS) - if(launch_broadcast == "Yes") - launch_broadcast = TRUE - else - launch_broadcast = FALSE - - var/announce_receipt = tgui_alert(usr, "Would you like to announce the beacon received message? This will reveal the distress beacon to all players.", "Announce beacon received?", list("Yes", "No"), 20 SECONDS) - if(announce_receipt == "Yes") + var/quiet_launch = TRUE + var/ql_prompt = tgui_alert(usr, "Would you like to broadcast the beacon launch? This will reveal the distress beacon to all players.", "Announce distress beacon?", list("Yes", "No"), 20 SECONDS) + if(ql_prompt == "Yes") + quiet_launch = FALSE + + var/announce_receipt = FALSE + var/ar_prompt = tgui_alert(usr, "Would you like to announce the beacon received message? This will reveal the distress beacon to all players.", "Announce beacon received?", list("Yes", "No"), 20 SECONDS) + if(ar_prompt == "Yes") announce_receipt = TRUE - else - announce_receipt = FALSE var/turf/override_spawn_loc var/prompt = tgui_alert(usr, "Spawn at their assigned spawn, or at your location?", "Spawnpoint Selection", list("Spawn", "Current Location"), 0) @@ -238,7 +235,7 @@ if(prompt == "Current Location") override_spawn_loc = get_turf(usr) - chosen_ert.activate(quiet_launch = launch_broadcast, announce_incoming = announce_receipt, override_spawn_loc = override_spawn_loc) + chosen_ert.activate(quiet_launch, announce_receipt, override_spawn_loc) message_admins("[key_name_admin(usr)] admin-called a [choice == "Randomize" ? "randomized ":""]distress beacon: [chosen_ert.name]") @@ -442,8 +439,8 @@ GLOB.supply_controller.shoppinglist += new_order marine_announcement("A nuclear device has been supplied and will be delivered to requisitions via ASRS.", "NUCLEAR ARSENAL ACQUIRED", 'sound/misc/notice2.ogg') - message_admins("[key_name_admin(usr)] admin-spawned a [encrypt] nuke.") - log_game("[key_name_admin(usr)] admin-spawned a [encrypt] nuke.") + message_admins("[key_name_admin(usr)] admin-spawned \a [encrypt] nuke.") + log_game("[key_name_admin(usr)] admin-spawned \a [encrypt] nuke.") /client/proc/turn_everyone_into_primitives() var/random_names = FALSE @@ -525,7 +522,7 @@ else marine_announcement(input, customname, 'sound/AI/commandreport.ogg', faction) - message_admins("[key_name_admin(src)] has created a [faction] command report") + message_admins("[key_name_admin(src)] has created \a [faction] command report") log_admin("[key_name_admin(src)] [faction] command report: [input]") /client/proc/cmd_admin_xeno_report() diff --git a/code/modules/admin/topic/topic.dm b/code/modules/admin/topic/topic.dm index 005157421517..fa814ca16b7c 100644 --- a/code/modules/admin/topic/topic.dm +++ b/code/modules/admin/topic/topic.dm @@ -590,7 +590,7 @@ var/mob/M = locate(href_list["forcespeech"]) if(!ismob(M)) - to_chat(usr, "this can only be used on instances of type /mob") + to_chat(usr, "This can only be used on instances of type /mob") return var/speech = input("What will [key_name(M)] say?.", "Force speech", "")// Don't need to sanitize, since it does that in say(), we also trust our admins. @@ -603,7 +603,7 @@ if(!check_rights(R_ADMIN)) return var/mob/living/carbon/human/H = locate(href_list["zombieinfect"]) if(!istype(H)) - to_chat(usr, "this can only be used on instances of type /human") + to_chat(usr, "This can only be used on instances of type /human") return if(alert(usr, "Are you sure you want to infect them with a ZOMBIE VIRUS? This can trigger a major event!", "Message", "Yes", "No") != "Yes") @@ -622,7 +622,7 @@ if(!check_rights(R_ADMIN)) return var/mob/living/carbon/human/H = locate(href_list["larvainfect"]) if(!istype(H)) - to_chat(usr, "this can only be used on instances of type /human") + to_chat(usr, "This can only be used on instances of type /human") return if(alert(usr, "Are you sure you want to infect them with a xeno larva?", "Message", "Yes", "No") != "Yes") @@ -704,7 +704,7 @@ var/mob/M = locate(href_list["forceemote"]) if(!ismob(M)) - to_chat(usr, "this can only be used on instances of type /mob") + to_chat(usr, "This can only be used on instances of type /mob") var/speech = input("What will [key_name(M)] emote?.", "Force emote", "")// Don't need to sanitize, since it does that in say(), we also trust our admins. if(!speech) return @@ -1786,7 +1786,7 @@ var/prompt = tgui_alert(usr, "Do you want the nuke to be Encrypted?", "Nuke Type", list("Encrypted", "Decrypted"), 20 SECONDS) if(prompt == "Decrypted") nukename = "Decrypted Operational Nuke" - prompt = tgui_alert(usr, "Are you sure you want to authorize a '[nukename]' to the marines? This will greatly affect the round!", "DEFCON 1", list("No", "Yes")) + prompt = tgui_alert(usr, "Are you sure you want to authorize '[nukename]' to the marines? This will greatly affect the round!", "DEFCON 1", list("No", "Yes")) if(prompt != "Yes") return @@ -1803,8 +1803,8 @@ GLOB.ares_datacore.nuke_available = FALSE marine_announcement("A nuclear device has been authorized by High Command and will be delivered to requisitions via ASRS.", "NUCLEAR ORDNANCE AUTHORIZED", 'sound/misc/notice2.ogg', logging = ARES_LOG_MAIN) - log_game("[key_name_admin(usr)] has authorized a [nuketype], requested by [key_name_admin(ref_person)]") - message_admins("[key_name_admin(usr)] has authorized a [nuketype], requested by [key_name_admin(ref_person)]") + log_game("[key_name_admin(usr)] has authorized \a [nuketype], requested by [key_name_admin(ref_person)]") + message_admins("[key_name_admin(usr)] has authorized \a [nuketype], requested by [key_name_admin(ref_person)]") if(href_list["nukedeny"]) var/mob/ref_person = locate(href_list["nukedeny"]) diff --git a/code/modules/admin/topic/topic_events.dm b/code/modules/admin/topic/topic_events.dm index 5e59ba4835f5..0c37e81f2641 100644 --- a/code/modules/admin/topic/topic_events.dm +++ b/code/modules/admin/topic/topic_events.dm @@ -205,20 +205,17 @@ em_call.mob_max = humans.len em_call.players_to_offer = humans em_call.owner = owner - - var/launch_broadcast = tgui_alert(usr, "Would you like to broadcast the beacon launch? This will reveal the distress beacon to all players.", "Announce distress beacon?", list("Yes", "No"), 20 SECONDS) - if(launch_broadcast == "Yes") - launch_broadcast = TRUE - else - launch_broadcast = FALSE - - var/announce_receipt = tgui_alert(usr, "Would you like to announce the beacon received message? This will reveal the distress beacon to all players.", "Announce beacon received?", list("Yes", "No"), 20 SECONDS) - if(announce_receipt == "Yes") + var/quiet_launch = TRUE + var/ql_prompt = tgui_alert(usr, "Would you like to broadcast the beacon launch? This will reveal the distress beacon to all players.", "Announce distress beacon?", list("Yes", "No"), 20 SECONDS) + if(ql_prompt == "Yes") + quiet_launch = FALSE + + var/announce_receipt = FALSE + var/ar_prompt = tgui_alert(usr, "Would you like to announce the beacon received message? This will reveal the distress beacon to all players.", "Announce beacon received?", list("Yes", "No"), 20 SECONDS) + if(ar_prompt == "Yes") announce_receipt = TRUE - else - announce_receipt = FALSE - - em_call.activate(launch_broadcast, announce_receipt) + log_debug("ERT DEBUG (CUSTOM SET): [quiet_launch] - [announce_receipt]") + em_call.activate(quiet_launch, announce_receipt) message_admins("[key_name_admin(usr)] created [humans_to_spawn] humans as [job_name] at [get_area(initial_spot)]") diff --git a/code/modules/admin/verbs/pray.dm b/code/modules/admin/verbs/pray.dm index e0210e4577a0..66ed690a0e80 100644 --- a/code/modules/admin/verbs/pray.dm +++ b/code/modules/admin/verbs/pray.dm @@ -17,13 +17,14 @@ liaison = 1 if(liaison) - msg = SPAN_STAFF_IC("LIAISON: [key_name(src, 1)] [CC_MARK(src)] [ADMIN_PP(src)] [ADMIN_VV(src)] [ADMIN_SM(src)] [ADMIN_JMP_USER(src)] [ADMIN_SC(src)]: [msg]") + msg = "[SPAN_STAFF_IC("LIAISON:")][key_name(src, 1)] [CC_MARK(src)] [ADMIN_PP(src)] [ADMIN_VV(src)] [ADMIN_SM(src)] [ADMIN_JMP_USER(src)] [ADMIN_SC(src)]: [msg]" else - msg = SPAN_STAFF_IC("PRAY: [key_name(src, 1)] [CC_MARK(src)] [ADMIN_PP(src)] [ADMIN_VV(src)] [ADMIN_SM(src)] [ADMIN_JMP_USER(src)] [ADMIN_SC(src)]: [msg]") + msg = "[SPAN_STAFF_IC("PRAY: ")][key_name(src, 1)] [CC_MARK(src)] [ADMIN_PP(src)] [ADMIN_VV(src)] [ADMIN_SM(src)] [ADMIN_JMP_USER(src)] [ADMIN_SC(src)]: [msg]" log_admin(msg) for(var/client/C in GLOB.admins) if(AHOLD_IS_MOD(C.admin_holder) && C.prefs.toggles_chat & CHAT_PRAYER) to_chat(C, msg) + C << 'sound/machines/terminal_alert.ogg' if(liaison) to_chat(usr, "Your corporate overlords at Weyland-Yutani have received your message.") else @@ -31,7 +32,7 @@ /proc/high_command_announce(text , mob/Sender , iamessage) var/msg = copytext(sanitize(text), 1, MAX_MESSAGE_LEN) - msg = "[SPAN_STAFF_IC("USCM[iamessage ? "IA" : ""]:")][key_name(Sender, 1)] [CC_MARK(Sender)] [ADMIN_PP(Sender)] [ADMIN_VV(Sender)] [ADMIN_SM(Sender)] [ADMIN_JMP_USER(Sender)] [CC_REPLY(Sender)]: [msg]" + msg = "[SPAN_STAFF_IC("USCM[iamessage ? "IA" : ""]:")][key_name(Sender, 1)] [CC_MARK(Sender)] [ADMIN_PP(Sender)] [ADMIN_VV(Sender)] [ADMIN_SM(Sender)] [ADMIN_JMP_USER(Sender)] [CC_REPLY(Sender)]: [msg]" log_admin(msg) for(var/client/C in GLOB.admins) if((R_ADMIN|R_MOD) & C.admin_holder.rights) diff --git a/code/modules/asset_cache/asset_list_items.dm b/code/modules/asset_cache/asset_list_items.dm index cb9bb98d339d..300c999b885b 100644 --- a/code/modules/asset_cache/asset_list_items.dm +++ b/code/modules/asset_cache/asset_list_items.dm @@ -315,7 +315,9 @@ log_debug("not atom! [item]") continue - if (sprites[icon_file]) + var/imgid = replacetext(replacetext("[k]", "/obj/item/", ""), "/", "-") + + if(sprites[imgid]) continue if(icon_state in icon_states(icon_file)) @@ -339,7 +341,6 @@ item = new k() I = icon(item.icon, item.icon_state, SOUTH) qdel(item) - var/imgid = replacetext(replacetext("[k]", "/obj/item/", ""), "/", "-") Insert(imgid, I) return ..() diff --git a/code/modules/client/preferences_gear.dm b/code/modules/client/preferences_gear.dm index 8a46e60956db..a71f7dbcb3e9 100644 --- a/code/modules/client/preferences_gear.dm +++ b/code/modules/client/preferences_gear.dm @@ -161,14 +161,14 @@ GLOBAL_LIST_EMPTY(gear_datums_by_name) display_name = "USCM balaclava, tan" path = /obj/item/clothing/mask/rebreather/scarf/tan -/datum/gear/skull_balaclava_blue - display_name = "Blue Skull Balaclava" +/datum/gear/mask/uscm/skull_balaclava_blue + display_name = "USCM balaclava, blue skull" path = /obj/item/clothing/mask/rebreather/skull cost = 4 //same as skull facepaint slot = WEAR_FACE -/datum/gear/skull_balaclava_black - display_name = "Black Skull Balaclava" +/datum/gear/mask/uscm/skull_balaclava_black + display_name = "USCM balaclava, black skull" path = /obj/item/clothing/mask/rebreather/skull/black cost = 4 slot = WEAR_FACE @@ -888,8 +888,8 @@ GLOBAL_LIST_EMPTY(gear_datums_by_name) display_name = "Facepaint, black" path = /obj/item/facepaint/black -/datum/gear/skullfacepaint - display_name = "Skull Facepaint" +/datum/gear/misc/facepaint_skull + display_name = "Facepaint, skull" path = /obj/item/facepaint/skull cost = 3 diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index e80e5bd8c5ba..c67effe90eb1 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -188,11 +188,6 @@ S["co_affiliation"] >> affiliation S["yautja_status"] >> yautja_status S["synth_status"] >> synth_status - S["key_bindings"] >> key_bindings - check_keybindings() - - var/list/remembered_key_bindings - S["remembered_key_bindings"] >> remembered_key_bindings S["lang_chat_disabled"] >> lang_chat_disabled S["show_permission_errors"] >> show_permission_errors @@ -206,6 +201,10 @@ S["autofit_viewport"] >> auto_fit_viewport S["adaptive_zoom"] >> adaptive_zoom S["tooltips"] >> tooltips + S["key_bindings"] >> key_bindings + + var/list/remembered_key_bindings + S["remembered_key_bindings"] >> remembered_key_bindings //Sanitize ooccolor = sanitize_hexcolor(ooccolor, CONFIG_GET(string/ooc_color_default)) @@ -274,6 +273,9 @@ pref_job_slots = sanitize_islist(pref_job_slots, list()) vars["fps"] = fps + check_keybindings() + S["key_bindings"] << key_bindings + if(remembered_key_bindings) for(var/i in GLOB.keybindings_by_name) if(!(i in remembered_key_bindings)) @@ -651,7 +653,7 @@ addedbind = TRUE if(!addedbind) notadded += kb - save_preferences() + if(length(notadded)) addtimer(CALLBACK(src, PROC_REF(announce_conflict), notadded), 5 SECONDS) diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index 4eafeed6c378..d6596474885c 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -48,6 +48,11 @@ return ..() +/obj/item/clothing/hear_talk(mob/M, msg) + for(var/obj/item/clothing/accessory/attached in accessories) + attached.hear_talk(M, msg) + ..() + /obj/item/clothing/proc/get_armor(armortype) var/armor_total = 0 var/armor_count = 0 diff --git a/code/modules/clothing/head/misc_special.dm b/code/modules/clothing/head/misc_special.dm index afc8e0a7cbba..edc4a81b364a 100644 --- a/code/modules/clothing/head/misc_special.dm +++ b/code/modules/clothing/head/misc_special.dm @@ -54,14 +54,14 @@ flags_inv_hide |= HIDEEARS|HIDEEYES|HIDEFACE icon_state = initial(icon_state) eye_protection = initial(eye_protection) - to_chat(usr, "You flip the [src] down to protect your eyes.") + to_chat(usr, SPAN_NOTICE("You flip [src] down to protect your eyes.")) else vision_impair = VISION_IMPAIR_NONE flags_inventory &= ~(COVEREYES|COVERMOUTH|BLOCKSHARPOBJ) flags_inv_hide &= ~(HIDEEARS|HIDEEYES|HIDEFACE) icon_state = "[initial(icon_state)]up" eye_protection = EYE_PROTECTION_NONE - to_chat(usr, "You push the [src] up out of your face.") + to_chat(usr, SPAN_NOTICE("You push [src] up out of your face.")) up = !up if(ishuman(loc)) diff --git a/code/modules/clothing/suits/labcoat.dm b/code/modules/clothing/suits/labcoat.dm index 1c2fb2a9f29d..54e9d91576f1 100644 --- a/code/modules/clothing/suits/labcoat.dm +++ b/code/modules/clothing/suits/labcoat.dm @@ -299,3 +299,21 @@ name = "liaison's winter coat" desc = "A Weyland-Yutani winter coat. Only the best comfort for the liaison in a cold environment." icon_state = "snowsuit_liaison" + +/obj/item/clothing/suit/storage/snow_suit/liaison/modified + name = "modified liaison's winter coat" + desc = "A Weyland-Yutani winter coat. This one has been modified to holster guns and other objects. Only the best comfort and utility for the liaison surviving in a cold, hostile environment." + allowed = list( + /obj/item/weapon/gun, + /obj/item/tank/emergency_oxygen, + /obj/item/device/flashlight, + /obj/item/ammo_magazine, + /obj/item/explosive/grenade, + /obj/item/device/binoculars, + /obj/item/attachable/bayonet, + /obj/item/storage/large_holster/machete, + /obj/item/weapon/baseballbat, + /obj/item/weapon/baseballbat/metal, + /obj/item/device/motiondetector, + /obj/item/device/walkman, + ) diff --git a/code/modules/clothing/under/rank_pins.dm b/code/modules/clothing/under/rank_pins.dm index bcadaec52090..894ff6d879b7 100644 --- a/code/modules/clothing/under/rank_pins.dm +++ b/code/modules/clothing/under/rank_pins.dm @@ -5,7 +5,7 @@ desc = "A set of rank pins, used to denote the paygrade of someone within the military." icon_state = "ranks_enlisted" var/rank = "Private" - var/rank_short = "ME1" + var/rank_short = PAY_SHORT_ME1 slot = ACCESSORY_SLOT_RANK high_visibility = TRUE gender = PLURAL @@ -23,116 +23,116 @@ /obj/item/clothing/accessory/ranks/marine/e1 /obj/item/clothing/accessory/ranks/marine/e2 - rank_short = "ME2" + rank_short = PAY_SHORT_ME2 /obj/item/clothing/accessory/ranks/marine/e3 - rank_short = "ME3" + rank_short = PAY_SHORT_ME3 /obj/item/clothing/accessory/ranks/marine/e4 - rank_short = "ME4" + rank_short = PAY_SHORT_ME4 icon_state = "ranks_nco" /obj/item/clothing/accessory/ranks/marine/e5 - rank_short = "ME5" + rank_short = PAY_SHORT_ME5 icon_state = "ranks_nco" /obj/item/clothing/accessory/ranks/marine/e6 - rank_short = "ME6" + rank_short = PAY_SHORT_ME6 icon_state = "ranks_snco" /obj/item/clothing/accessory/ranks/marine/e7 - rank_short = "ME7" + rank_short = PAY_SHORT_ME7 icon_state = "ranks_snco" /obj/item/clothing/accessory/ranks/marine/e8 - rank_short = "ME8" + rank_short = PAY_SHORT_ME8 icon_state = "ranks_snco" /obj/item/clothing/accessory/ranks/marine/e8e - rank_short = "ME8E" + rank_short = PAY_SHORT_ME8E icon_state = "ranks_snco" /obj/item/clothing/accessory/ranks/marine/e9 - rank_short = "ME9" + rank_short = PAY_SHORT_ME9 icon_state = "ranks_snco" /obj/item/clothing/accessory/ranks/marine/e9e - rank_short = "ME9E" + rank_short = PAY_SHORT_ME9E icon_state = "ranks_snco" /obj/item/clothing/accessory/ranks/marine/e9c - rank_short = "ME9C" + rank_short = PAY_SHORT_ME9C icon_state = "ranks_snco" //OFFICERS /obj/item/clothing/accessory/ranks/marine/o1 name = "rank boards" - rank_short = "MO1" + rank_short = PAY_SHORT_MO1 icon_state = "ranks_officer" /obj/item/clothing/accessory/ranks/marine/o2 name = "rank boards" - rank_short = "MO2" + rank_short = PAY_SHORT_MO2 icon_state = "ranks_officer" /obj/item/clothing/accessory/ranks/marine/o3 name = "rank boards" - rank_short = "MO3" + rank_short = PAY_SHORT_MO3 icon_state = "ranks_officer" /obj/item/clothing/accessory/ranks/marine/o4 name = "rank boards" - rank_short = "MO4" + rank_short = PAY_SHORT_MO4 icon_state = "ranks_seniorofficer" /obj/item/clothing/accessory/ranks/marine/o5 name = "rank boards" - rank_short = "MO5" + rank_short = PAY_SHORT_MO5 icon_state = "ranks_seniorofficer" /obj/item/clothing/accessory/ranks/marine/o6 name = "rank boards" - rank_short = "MO6" + rank_short = PAY_SHORT_MO6 icon_state = "ranks_seniorofficer" /obj/item/clothing/accessory/ranks/marine/o6e name = "rank boards" - rank_short = "MO6E" + rank_short = PAY_SHORT_MO6E icon_state = "ranks_seniorofficer" /obj/item/clothing/accessory/ranks/marine/o6c name = "rank boards" - rank_short = "MO6C" + rank_short = PAY_SHORT_MO6C icon_state = "ranks_flagofficer" /obj/item/clothing/accessory/ranks/marine/o7 name = "rank boards" - rank_short = "MO7" + rank_short = PAY_SHORT_MO7 icon_state = "ranks_flagofficer" /obj/item/clothing/accessory/ranks/marine/o8 name = "rank boards" - rank_short = "MO8" + rank_short = PAY_SHORT_MO8 icon_state = "ranks_flagofficer" /obj/item/clothing/accessory/ranks/marine/o9 name = "rank boards" - rank_short = "MO9" + rank_short = PAY_SHORT_MO9 icon_state = "ranks_flagofficer" /obj/item/clothing/accessory/ranks/marine/o10 name = "rank boards" - rank_short = "MO10" + rank_short = PAY_SHORT_MO10 icon_state = "ranks_flagofficer" /obj/item/clothing/accessory/ranks/marine/o10c name = "rank boards" - rank_short = "MO10C" + rank_short = PAY_SHORT_MO10C icon_state = "ranks_flagofficer" /obj/item/clothing/accessory/ranks/marine/o10s name = "rank boards" - rank_short = "MO10S" + rank_short = PAY_SHORT_MO10S icon_state = "ranks_flagofficer" /*################################################ @@ -140,134 +140,112 @@ ################################################*/ //ENLISTED /obj/item/clothing/accessory/ranks/navy/e1 - rank_short = "NE1" + rank_short = PAY_SHORT_NE1 /obj/item/clothing/accessory/ranks/navy/e2 - rank_short = "NE2" + rank_short = PAY_SHORT_NE2 /obj/item/clothing/accessory/ranks/navy/e3 - rank_short = "NE3" + rank_short = PAY_SHORT_NE3 /obj/item/clothing/accessory/ranks/navy/e4 - rank_short = "NE4" + rank_short = PAY_SHORT_NE4 icon_state = "ranks_nco" /obj/item/clothing/accessory/ranks/navy/e5 - rank_short = "NE5" + rank_short = PAY_SHORT_NE5 icon_state = "ranks_nco" /obj/item/clothing/accessory/ranks/navy/e6 - rank_short = "NE6" + rank_short = PAY_SHORT_NE6 icon_state = "ranks_nco" /obj/item/clothing/accessory/ranks/navy/e7 - rank_short = "NE7" + rank_short = PAY_SHORT_NE7 icon_state = "ranks_snco" -/obj/item/clothing/accessory/ranks/navy/e7/pvst - icon_state = "ranks_pvst" - /obj/item/clothing/accessory/ranks/navy/e8 - rank_short = "NE8" + rank_short = PAY_SHORT_NE8 icon_state = "ranks_snco" -/obj/item/clothing/accessory/ranks/navy/e8/pvst - icon_state = "ranks_pvst" - /obj/item/clothing/accessory/ranks/navy/e8c - rank_short = "NE8C" + rank_short = PAY_SHORT_NE8C icon_state = "ranks_snco" /obj/item/clothing/accessory/ranks/navy/e9 - rank_short = "NE9" + rank_short = PAY_SHORT_NE9 icon_state = "ranks_snco" -/obj/item/clothing/accessory/ranks/navy/e9/pvst - icon_state = "ranks_pvst" - /obj/item/clothing/accessory/ranks/navy/e9c - rank_short = "NE9C" + rank_short = PAY_SHORT_NE9C icon_state = "ranks_snco" //OFFICERS /obj/item/clothing/accessory/ranks/navy/o1 name = "rank boards" - rank_short = "NO1" + rank_short = PAY_SHORT_NO1 icon_state = "ranks_officer" /obj/item/clothing/accessory/ranks/navy/o2 name = "rank boards" - rank_short = "NO2" + rank_short = PAY_SHORT_NO2 icon_state = "ranks_officer" /obj/item/clothing/accessory/ranks/navy/o3 name = "rank boards" - rank_short = "NO3" + rank_short = PAY_SHORT_NO3 icon_state = "ranks_officer" /obj/item/clothing/accessory/ranks/navy/o4 name = "rank boards" - rank_short = "NO4" + rank_short = PAY_SHORT_NO4 icon_state = "ranks_seniorofficer" /obj/item/clothing/accessory/ranks/navy/o5 name = "rank boards" - rank_short = "NO5" + rank_short = PAY_SHORT_NO5 icon_state = "ranks_seniorofficer" /obj/item/clothing/accessory/ranks/navy/o6 name = "rank boards" - rank_short = "NO6" + rank_short = PAY_SHORT_NO6 icon_state = "ranks_seniorofficer" /obj/item/clothing/accessory/ranks/navy/o6e name = "rank boards" - rank_short = "NO6E" + rank_short = PAY_SHORT_NO6E icon_state = "ranks_seniorofficer" /obj/item/clothing/accessory/ranks/navy/o6c name = "rank boards" - rank_short = "NO6C" + rank_short = PAY_SHORT_NO6C icon_state = "ranks_seniorofficer" /obj/item/clothing/accessory/ranks/navy/o7 name = "rank boards" - rank_short = "NO7" + rank_short = PAY_SHORT_NO7 icon_state = "ranks_flagofficer" /obj/item/clothing/accessory/ranks/navy/o8 name = "rank boards" - rank_short = "NO8" + rank_short = PAY_SHORT_NO8 icon_state = "ranks_flagofficer" -/obj/item/clothing/accessory/ranks/navy/o8/pvst - icon_state = "ranks_pvstofficer" - /obj/item/clothing/accessory/ranks/navy/o9 name = "rank boards" - rank_short = "NO9" + rank_short = PAY_SHORT_NO9 icon_state = "ranks_flagofficer" -/obj/item/clothing/accessory/ranks/navy/o9/pvst - icon_state = "ranks_pvstofficer" - /obj/item/clothing/accessory/ranks/navy/o10 name = "rank boards" - rank_short = "NO10" + rank_short = PAY_SHORT_NO10 icon_state = "ranks_flagofficer" -/obj/item/clothing/accessory/ranks/navy/o10/pvst - icon_state = "ranks_pvstofficer" - /obj/item/clothing/accessory/ranks/navy/o10c name = "rank boards" - rank_short = "NO10C" + rank_short = PAY_SHORT_NO10C icon_state = "ranks_flagofficer" -/obj/item/clothing/accessory/ranks/navy/o10c/pvst - rank_short = "PvCM" - icon_state = "ranks_pvstofficer" - /*################################################ ################# SPECIAL ################# ################################################*/ diff --git a/code/modules/clothing/under/under.dm b/code/modules/clothing/under/under.dm index ebfac5216330..a48967d88538 100644 --- a/code/modules/clothing/under/under.dm +++ b/code/modules/clothing/under/under.dm @@ -326,7 +326,7 @@ return update_rollsuit_status() //we need the _d version of the sprite anyways. In the future we might need to make a different version of the sprite to accomodate for rolling sleeves and hoods. if(user.head && !istype(user.head, hood_state)) - to_chat(user, SPAN_WARNING("You can't wear a hood while also wearing the [user.head]!")) + to_chat(user, SPAN_WARNING("You can't wear a hood while also wearing [user.head]!")) return if(!HAS_TRAIT(src, TRAIT_CLOTHING_HOOD)) diff --git a/code/modules/cm_aliens/XenoStructures.dm b/code/modules/cm_aliens/XenoStructures.dm index 340fabdf1973..81978bb01ba0 100644 --- a/code/modules/cm_aliens/XenoStructures.dm +++ b/code/modules/cm_aliens/XenoStructures.dm @@ -781,7 +781,7 @@ /obj/effect/alien/resin/resin_pillar/proc/brittle() //playsound(granite cracking) - visible_message(SPAN_DANGER("You hear cracking sounds from the [src] as splinters start falling off from the structure! It seems brittle now.")) + visible_message(SPAN_DANGER("You hear cracking sounds from [src] as splinters start falling off from the structure! It seems brittle now.")) health = vulnerable_health for(var/i in walls) var/turf/closed/wall/T = i @@ -814,7 +814,7 @@ /obj/effect/alien/resin/resin_pillar/hitby(atom/movable/AM) if(!brittle) - visible_message(SPAN_DANGER("[AM] harmlessly bounces off the [src]!")) + visible_message(SPAN_DANGER("[AM] harmlessly bounces off [src]!")) return return ..() diff --git a/code/modules/cm_aliens/structures/egg.dm b/code/modules/cm_aliens/structures/egg.dm index ce0be7c0c8a1..eda9803c8784 100644 --- a/code/modules/cm_aliens/structures/egg.dm +++ b/code/modules/cm_aliens/structures/egg.dm @@ -355,4 +355,8 @@ SPECIAL EGG USED BY EGG CARRIER /obj/effect/alien/egg/carrier_egg/Burst(kill, instant_trigger, mob/living/carbon/xenomorph/X, is_hugger_player_controlled) . = ..() - owner = null + if(owner) + var/datum/behavior_delegate/carrier_eggsac/behavior = owner.behavior_delegate + behavior.remove_egg_owner(src) + if(life_timer) + deltimer(life_timer) diff --git a/code/modules/cm_marines/NonLethalRestraints.dm b/code/modules/cm_marines/NonLethalRestraints.dm index a7f0277c8aaa..3b2439a22a82 100644 --- a/code/modules/cm_marines/NonLethalRestraints.dm +++ b/code/modules/cm_marines/NonLethalRestraints.dm @@ -45,7 +45,7 @@ if(status) M.apply_effect(6, WEAKEN) charges -= 2 - M.visible_message(SPAN_DANGER("[M] has been prodded with the [src] by [user]!")) + M.visible_message(SPAN_DANGER("[M] has been prodded with [src] by [user]!")) user.attack_log += "\[[time_stamp()]\] Stunned [key_name(M)] with [src.name]" M.attack_log += "\[[time_stamp()]\] Stunned by [key_name(user)] with [src.name]" diff --git a/code/modules/cm_marines/equipment/gear.dm b/code/modules/cm_marines/equipment/gear.dm index b3ec6c800c68..00f956fdd4ed 100644 --- a/code/modules/cm_marines/equipment/gear.dm +++ b/code/modules/cm_marines/equipment/gear.dm @@ -149,15 +149,6 @@ return FALSE . = ..() handle_cloaking() - -/obj/item/coin/marine - name = "marine specialist weapon token" - desc = "Insert this into a specialist vendor in order to access a single highly dangerous weapon." - icon_state = "coin_platinum" - -/obj/item/coin/marine/attackby(obj/item/W as obj, mob/user as mob) //To remove attaching a string functionality - return - /obj/structure/broken_apc name = "\improper M577 armored personnel carrier" desc = "A large, armored behemoth capable of ferrying marines around. \nThis one is sitting nonfunctional." diff --git a/code/modules/cm_marines/equipment/kit_boxes.dm b/code/modules/cm_marines/equipment/kit_boxes.dm index 342f9a775718..d99da8f59f2c 100644 --- a/code/modules/cm_marines/equipment/kit_boxes.dm +++ b/code/modules/cm_marines/equipment/kit_boxes.dm @@ -165,9 +165,13 @@ var/squad_assignment_update = TRUE //this one is delivered via ASRS as a reward for DEFCON/techwebs/whatever else we will have -/obj/item/spec_kit/asrs +/obj/item/spec_kit/rifleman + squad_assignment_update = FALSE allowed_roles_list = list(JOB_SQUAD_MARINE, JOB_WO_SQUAD_MARINE) +/obj/item/spec_kit/rifleman/jobless + allowed_roles_list = list() + /obj/item/spec_kit/cryo squad_assignment_update = FALSE @@ -212,6 +216,17 @@ return FALSE return TRUE +/obj/item/spec_kit/rifleman/can_use(mob/living/carbon/human/user) + if(!length(allowed_roles_list)) + return TRUE + + for(var/allowed_role in allowed_roles_list) + if(user.job == allowed_role)//Alternate check to normal kit as this is distributed to people without SKILL_SPEC_TRAINED. + if(skillcheck(user, SKILL_SPEC_WEAPONS, SKILL_SPEC_KITTED) && !skillcheckexplicit(user, SKILL_SPEC_WEAPONS, SKILL_SPEC_ALL)) + to_chat(user, SPAN_WARNING("You already have specialization, give this kit to someone else!")) + return FALSE + return TRUE + /obj/item/spec_kit/proc/select_and_spawn(mob/living/carbon/human/user) var/selection = tgui_input_list(user, "Pick your specialist equipment type.", "Specialist Kit Selection", GLOB.available_specialist_kit_boxes) if(!selection || QDELETED(src)) diff --git a/code/modules/cm_marines/orbital_cannon.dm b/code/modules/cm_marines/orbital_cannon.dm index c9ec4190ce90..b003237f68ee 100644 --- a/code/modules/cm_marines/orbital_cannon.dm +++ b/code/modules/cm_marines/orbital_cannon.dm @@ -82,15 +82,15 @@ GLOBAL_LIST(ob_type_fuel_requirements) if(!tray.warhead) if(user) - to_chat(user, "no warhead in the tray, loading operation cancelled.") + to_chat(user, SPAN_WARNING("No warhead in the tray, loading operation cancelled.")) return if(tray.fuel_amt < 1) - to_chat(user, "no solid fuel in the tray, loading operation cancelled.") + to_chat(user, SPAN_WARNING("No solid fuel in the tray, loading operation cancelled.")) return if(loaded_tray) - to_chat(user, "Tray is already loaded.") + to_chat(user, SPAN_WARNING("Tray is already loaded.")) return tray.forceMove(src) @@ -685,4 +685,3 @@ GLOBAL_LIST_EMPTY(orbital_cannon_cancellation) return TRUE tgui_interact(user) - diff --git a/code/modules/cm_marines/smartgun_mount.dm b/code/modules/cm_marines/smartgun_mount.dm index 8b6dde5527e2..01183ebceca5 100644 --- a/code/modules/cm_marines/smartgun_mount.dm +++ b/code/modules/cm_marines/smartgun_mount.dm @@ -1,12 +1,6 @@ ////////////////////////////////////////////////////////////// //Mounted MG, Replacment for the current jury rig code. -//Adds a coin for engi vendors -/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_platinum" - // First thing we need is the ammo drum for this thing. /obj/item/ammo_magazine/m56d name = "M56D drum magazine (10x28mm Caseless)" diff --git a/code/modules/cm_preds/yaut_bracers.dm b/code/modules/cm_preds/yaut_bracers.dm index 111a95d1089c..df8ab136ea18 100644 --- a/code/modules/cm_preds/yaut_bracers.dm +++ b/code/modules/cm_preds/yaut_bracers.dm @@ -928,7 +928,7 @@ addtimer(VARSET_CALLBACK(src, disc_timer, FALSE), 10 SECONDS) for(var/mob/living/simple_animal/hostile/smartdisc/S in range(7)) - to_chat(caller, SPAN_WARNING("The [S] skips back towards you!")) + to_chat(caller, SPAN_WARNING("[S] skips back towards you!")) new /obj/item/explosive/grenade/spawnergrenade/smartdisc(S.loc) qdel(S) diff --git a/code/modules/cm_tech/implements/engi_czsp.dm b/code/modules/cm_tech/implements/engi_czsp.dm index 8e1ab8248c19..f3024129b3eb 100644 --- a/code/modules/cm_tech/implements/engi_czsp.dm +++ b/code/modules/cm_tech/implements/engi_czsp.dm @@ -35,7 +35,7 @@ return if((user.get_active_hand()) != src) - to_chat(user, SPAN_WARNING("You must be holding the [src] to upgrade \the [D]!")) + to_chat(user, SPAN_WARNING("You must be holding [src] to upgrade [D]!")) return var/type_to_change_to = D.upgrade_string_to_type(chosen_upgrade) diff --git a/code/modules/gear_presets/agents.dm b/code/modules/gear_presets/agents.dm index b51e623a198c..c7449883b87f 100644 --- a/code/modules/gear_presets/agents.dm +++ b/code/modules/gear_presets/agents.dm @@ -69,7 +69,7 @@ ) assignment = JOB_UPP_REPRESENTATIVE rank = JOB_UPP_REPRESENTATIVE - paygrade = "CR" + paygrade = PAY_SHORT_CREP role_comm_title = "UPP Rep." skills = /datum/skills/civilian/survivor @@ -105,7 +105,7 @@ ) assignment = JOB_TWE_REPRESENTATIVE rank = JOB_TWE_REPRESENTATIVE - paygrade = "CR" + paygrade = PAY_SHORT_CREP role_comm_title = "TWE Rep." skills = /datum/skills/civilian/survivor diff --git a/code/modules/gear_presets/cbrn.dm b/code/modules/gear_presets/cbrn.dm index 00934bc94fc7..e59f276fe486 100644 --- a/code/modules/gear_presets/cbrn.dm +++ b/code/modules/gear_presets/cbrn.dm @@ -2,7 +2,7 @@ name = "Generic CBRN" //Parent type for easier gear assignment = JOB_SQUAD_MARINE rank = JOB_SQUAD_MARINE - paygrade = "ME3" + paygrade = PAY_SHORT_ME3 role_comm_title = "CBRN" flags = EQUIPMENT_PRESET_EXTRA auto_squad_name = SQUAD_CBRN @@ -67,7 +67,7 @@ /datum/equipment_preset/uscm/cbrn/engineer name = "CBRN Combat Technician" - paygrade = "ME4" + paygrade = PAY_SHORT_ME4 assignment = JOB_SQUAD_ENGI rank = JOB_SQUAD_ENGI role_comm_title = "ComTech" @@ -111,7 +111,7 @@ /datum/equipment_preset/uscm/cbrn/medic name = "CBRN Hospital Corpsman" - paygrade = "ME4" + paygrade = PAY_SHORT_ME4 assignment = JOB_SQUAD_MEDIC rank = JOB_SQUAD_MEDIC role_comm_title = "HM" @@ -154,7 +154,7 @@ /datum/equipment_preset/uscm/cbrn/leader name = "CBRN Fireteam Leader" - paygrade = "ME5" + paygrade = PAY_SHORT_ME5 assignment = JOB_SQUAD_TEAM_LEADER rank = JOB_SQUAD_TEAM_LEADER role_comm_title = "TL" @@ -189,7 +189,7 @@ /datum/equipment_preset/uscm/cbrn/specialist name = "CBRN Specialist" - paygrade = "O" + paygrade = PAY_SHORT_OPR assignment = JOB_SQUAD_SPECIALIST rank = JOB_SQUAD_SPECIALIST role_comm_title = "Spc" diff --git a/code/modules/gear_presets/clf.dm b/code/modules/gear_presets/clf.dm index 62cbeb9edd29..d89e349a62c1 100644 --- a/code/modules/gear_presets/clf.dm +++ b/code/modules/gear_presets/clf.dm @@ -3,6 +3,7 @@ languages = list(LANGUAGE_JAPANESE, LANGUAGE_ENGLISH) assignment = JOB_CLF rank = FACTION_CLF + paygrade = PAY_SHORT_REB faction = FACTION_CLF origin_override = ORIGIN_CIVILIAN idtype = /obj/item/card/id/data @@ -281,6 +282,7 @@ assignment = JOB_CLF_MEDIC rank = JOB_CLF_MEDIC role_comm_title = "MED" + paygrade = PAY_SHORT_CDOC skills = /datum/skills/clf/combat_medic /datum/equipment_preset/clf/medic/load_gear(mob/living/carbon/human/new_human) @@ -709,6 +711,7 @@ skills = /datum/skills/colonial_synthetic assignment = JOB_CLF_SYNTH rank = JOB_CLF_SYNTH + paygrade = PAY_SHORT_SYN role_comm_title = "Syn" /datum/equipment_preset/clf/synth/New() @@ -897,6 +900,7 @@ flags = EQUIPMENT_PRESET_EXTRA assignment = JOB_CLF_COMMANDER rank = JOB_CLF_COMMANDER + paygrade = PAY_SHORT_REBC role_comm_title = "CMDR" skills = /datum/skills/clf/commander diff --git a/code/modules/gear_presets/cmb.dm b/code/modules/gear_presets/cmb.dm index 2dd2c531d787..aa2c7438ba75 100644 --- a/code/modules/gear_presets/cmb.dm +++ b/code/modules/gear_presets/cmb.dm @@ -58,7 +58,7 @@ /datum/equipment_preset/cmb/standard name = "CMB - Colonial Marshal Deputy" - paygrade = "GS-9" + paygrade = PAY_SHORT_CMBD role_comm_title = "CMB DEP" flags = EQUIPMENT_PRESET_EXTRA assignment = "CMB Deputy" @@ -141,7 +141,7 @@ /datum/equipment_preset/cmb/leader name = "CMB - The Colonial Marshal" - paygrade = "GS-13" + paygrade = PAY_SHORT_CMBM idtype = /obj/item/card/id/marshal role_comm_title = "CMB MAR" flags = EQUIPMENT_PRESET_EXTRA @@ -195,7 +195,7 @@ //*****************************************************************************************************/ /datum/equipment_preset/cmb/synth name = "CMB - Colonial Marshal Investigative Synthetic" - paygrade = "GS-C.9" + paygrade = PAY_SHORT_CMBS idtype = /obj/item/card/id/deputy role_comm_title = "CMB Syn" flags = EQUIPMENT_PRESET_EXTRA @@ -298,7 +298,7 @@ /datum/equipment_preset/cmb/liaison name = "CMB - ICC Liaison" - paygrade = "GS-6" + paygrade = PAY_SHORT_ICCL idtype = /obj/item/card/id/silver/cl role_comm_title = "ICC Rep." flags = EQUIPMENT_PRESET_EXTRA @@ -357,7 +357,7 @@ /datum/equipment_preset/cmb/observer name = "CMB - Interstellar Human Rights Observer" - paygrade = "GS-3" + paygrade = PAY_SHORT_IHRO idtype = /obj/item/card/id/lanyard role_comm_title = "OBS" flags = EQUIPMENT_PRESET_EXTRA @@ -416,7 +416,7 @@ assignment = "Anchorpoint Station Marine Rifleman" rank = JOB_SQUAD_MARINE - paygrade = "ME2" + paygrade = PAY_SHORT_ME2 role_comm_title = "A-RFN" skills = /datum/skills/pfc/crafty faction = FACTION_MARSHAL @@ -466,7 +466,7 @@ assignment = "Anchorpoint Station Marine Team Leader" rank = JOB_SQUAD_LEADER - paygrade = "ME6" + paygrade = PAY_SHORT_ME6 role_comm_title = "A-TL" minimum_age = 25 skills = /datum/skills/SL @@ -511,7 +511,7 @@ assignment = "Anchorpoint Station Marine Technical Specialist" rank = JOB_SQUAD_TEAM_LEADER - paygrade = "ME4" + paygrade = PAY_SHORT_ME4 role_comm_title = "A-TS" skills = /datum/skills/tl @@ -556,7 +556,7 @@ assignment = "Anchorpoint Station Hospital Corpsman" rank = JOB_SQUAD_MEDIC - paygrade = "ME3" + paygrade = PAY_SHORT_ME3 role_comm_title = "A-HM" skills = /datum/skills/combat_medic @@ -617,7 +617,7 @@ assignment = "Anchorpoint Station Marine Smartgunner" rank = JOB_SQUAD_SMARTGUN - paygrade = "ME3" + paygrade = PAY_SHORT_ME3 role_comm_title = "A-SG" skills = /datum/skills/smartgunner diff --git a/code/modules/gear_presets/corpses.dm b/code/modules/gear_presets/corpses.dm index de24f1f84ff3..ca2b2e2ab52d 100644 --- a/code/modules/gear_presets/corpses.dm +++ b/code/modules/gear_presets/corpses.dm @@ -338,7 +338,7 @@ name = "Corpse - Corporate Liaison" assignment = "Corporate Liaison" xenovictim = TRUE - paygrade = "WYC2" + paygrade = PAY_SHORT_WYC2 access = list( ACCESS_CIVILIAN_PUBLIC, ACCESS_CIVILIAN_LOGISTICS, @@ -430,7 +430,7 @@ idtype = /obj/item/card/id/general assignment = "Bridge Officer" uses_special_name = TRUE - paygrade = "WYC2" + paygrade = PAY_SHORT_WYC2 access = list( ACCESS_CIVILIAN_PUBLIC, ACCESS_CIVILIAN_LOGISTICS, @@ -637,7 +637,7 @@ /datum/equipment_preset/corpse/wy/manager name = "Corpse - Corporate Supervisor" flags = EQUIPMENT_PRESET_EXTRA - paygrade = "WYC7" + paygrade = PAY_SHORT_WYC6 assignment = "Colony Supervisor" role_comm_title = "Supervisor" rank = FACTION_WY @@ -800,7 +800,7 @@ languages = list(LANGUAGE_ENGLISH) assignment = JOB_WY_GOON rank = JOB_WY_GOON - paygrade = "WEY-GOON" + paygrade = PAY_SHORT_CPO skills = /datum/skills/MP /datum/equipment_preset/corpse/pmc/goon/load_gear(mob/living/carbon/human/new_human) @@ -822,7 +822,7 @@ flags = EQUIPMENT_PRESET_EXTRA assignment = JOB_WY_GOON_LEAD rank = JOB_WY_GOON_LEAD - paygrade = "WEY-GOON-L" + paygrade = PAY_SHORT_CSPO /datum/equipment_preset/corpse/pmc/goon/lead/load_gear(mob/living/carbon/human/new_human) new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress, WEAR_L_EAR) @@ -985,7 +985,7 @@ name = "Corpse - USCM Reconnaissance Spotter" assignment = "Reconnaissance Spotter" xenovictim = FALSE - paygrade = "ME5" + paygrade = PAY_SHORT_ME5 idtype = /obj/item/card/id/dogtag role_comm_title = "FORECON" faction_group = list(FACTION_USCM, FACTION_SURVIVOR) diff --git a/code/modules/gear_presets/dust_raider.dm b/code/modules/gear_presets/dust_raider.dm index 1d979ed66a5f..27a3ce086c85 100644 --- a/code/modules/gear_presets/dust_raider.dm +++ b/code/modules/gear_presets/dust_raider.dm @@ -24,7 +24,7 @@ access = list(ACCESS_MARINE_PREP) assignment = JOB_SQUAD_MARINE rank = JOB_SQUAD_MARINE - paygrade = "ME2" + paygrade = PAY_SHORT_ME2 role_comm_title = "RFN" skills = /datum/skills/pfc/crafty @@ -46,7 +46,7 @@ access = list(ACCESS_MARINE_PREP) assignment = JOB_SQUAD_LEADER rank = JOB_SQUAD_LEADER - paygrade = "ME5" + paygrade = PAY_SHORT_ME5 role_comm_title = "SL" skills = /datum/skills/SL @@ -75,7 +75,7 @@ access = list(ACCESS_MARINE_PREP, ACCESS_MARINE_SMARTPREP) assignment = JOB_SQUAD_SMARTGUN rank = JOB_SQUAD_SMARTGUN - paygrade = "ME3" + paygrade = PAY_SHORT_ME3 role_comm_title = "SG" skills = /datum/skills/smartgunner @@ -100,7 +100,7 @@ access = list(ACCESS_MARINE_PREP, ACCESS_MARINE_ENGPREP, ACCESS_CIVILIAN_ENGINEERING) assignment = JOB_SQUAD_ENGI rank = JOB_SQUAD_ENGI - paygrade = "ME3" + paygrade = PAY_SHORT_ME3 role_comm_title = "Eng" skills = /datum/skills/combat_engineer @@ -129,7 +129,7 @@ access = list(ACCESS_MARINE_PREP, ACCESS_MARINE_MEDPREP, ACCESS_MARINE_MEDBAY) assignment = JOB_SQUAD_MEDIC rank = JOB_SQUAD_MEDIC - paygrade = "ME3" + paygrade = PAY_SHORT_ME3 role_comm_title = "HM" skills = /datum/skills/combat_medic @@ -164,7 +164,7 @@ access = list(ACCESS_MARINE_PREP, ACCESS_MARINE_SPECPREP) assignment = JOB_SQUAD_SPECIALIST rank = JOB_SQUAD_SPECIALIST - paygrade = "ME3" + paygrade = PAY_SHORT_ME3 role_comm_title = "Spc" skills = /datum/skills/specialist diff --git a/code/modules/gear_presets/dutch.dm b/code/modules/gear_presets/dutch.dm index 2844eef68a96..66a7254494b2 100644 --- a/code/modules/gear_presets/dutch.dm +++ b/code/modules/gear_presets/dutch.dm @@ -2,7 +2,7 @@ /datum/equipment_preset/dutch name = JOB_DUTCH_RIFLEMAN - paygrade = "DTC" + paygrade = PAY_SHORT_DTC assignment = JOB_DUTCH_RIFLEMAN flags = EQUIPMENT_PRESET_EXTRA faction = FACTION_DUTCH @@ -83,7 +83,7 @@ /datum/equipment_preset/dutch/minigun name = JOB_DUTCH_MINIGUNNER - paygrade = "DTCMG" + paygrade = PAY_SHORT_DTCMG assignment = JOB_DUTCH_MINIGUNNER flags = EQUIPMENT_PRESET_EXTRA @@ -116,7 +116,7 @@ /datum/equipment_preset/dutch/flamer name = JOB_DUTCH_FLAMETHROWER - paygrade = "DTCF" + paygrade = PAY_SHORT_DTCF assignment = JOB_DUTCH_FLAMETHROWER flags = EQUIPMENT_PRESET_EXTRA @@ -150,7 +150,7 @@ /datum/equipment_preset/dutch/medic name = JOB_DUTCH_MEDIC - paygrade = "DTCM" + paygrade = PAY_SHORT_DTCM assignment = JOB_DUTCH_MEDIC flags = EQUIPMENT_PRESET_EXTRA @@ -193,7 +193,7 @@ /datum/equipment_preset/dutch/arnie name = "Dutch's Dozen - Arnold" - paygrade = "ARN" + paygrade = PAY_SHORT_DTCA assignment = JOB_DUTCH_ARNOLD flags = EQUIPMENT_PRESET_EXTRA diff --git a/code/modules/gear_presets/fun.dm b/code/modules/gear_presets/fun.dm index 8bbe686b5cea..68253afbf90a 100644 --- a/code/modules/gear_presets/fun.dm +++ b/code/modules/gear_presets/fun.dm @@ -240,7 +240,7 @@ /datum/equipment_preset/fun/santa name = "Fun - Santa" - paygrade = "C" + paygrade = PAY_SHORT_CIV flags = EQUIPMENT_PRESET_EXTRA skills = /datum/skills/everything faction = FACTION_MARINE @@ -338,7 +338,7 @@ /datum/equipment_preset/fun/van_bandolier name = "Fun - Big Game Hunter" - paygrade = "CCMO" + paygrade = PAY_SHORT_CCMO uses_special_name = TRUE flags = EQUIPMENT_PRESET_EXTRA skills = /datum/skills/everything @@ -440,7 +440,7 @@ assignment = "Monkey Marine" rank = "Monkey Marine" - paygrade = "ME2" + paygrade = PAY_SHORT_ME2 /datum/equipment_preset/fun/monkey/marine/load_gear(mob/living/carbon/human/new_human) new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine(new_human), WEAR_BODY) @@ -457,7 +457,7 @@ assignment = "Monkey Soldier" rank = "Monkey Soldier" - paygrade = "UE1" + paygrade = PAY_SHORT_UE1 /datum/equipment_preset/fun/monkey/soldier/get_random_name(mob/living/carbon/human/new_human) return new_human.gender == MALE ? pick(GLOB.first_names_male_upp) : pick(GLOB.first_names_female_upp) diff --git a/code/modules/gear_presets/survivors/lv_522/forcon_survivors.dm b/code/modules/gear_presets/survivors/lv_522/forcon_survivors.dm index 825228f29735..34cbc8e0ab9c 100644 --- a/code/modules/gear_presets/survivors/lv_522/forcon_survivors.dm +++ b/code/modules/gear_presets/survivors/lv_522/forcon_survivors.dm @@ -1,7 +1,7 @@ ///*****************************LV-522 Force Recon Survivors*******************************************************/ //Nanu told me to put them here so they dont clutter up survivors.dm /datum/equipment_preset/survivor/forecon - paygrade = "ME5" + paygrade = PAY_SHORT_ME5 idtype = /obj/item/card/id/dogtag role_comm_title = "FORECON" rank = JOB_SURVIVOR @@ -208,7 +208,7 @@ name = "Survivor - USCM Reconnaissance Squad Leader" assignment = JOB_FORECON_SL skills = /datum/skills/military/survivor/forecon_squad_leader - paygrade = "MO1" + paygrade = PAY_SHORT_MO1 /datum/equipment_preset/survivor/forecon/squad_leader/load_gear(mob/living/carbon/human/new_human) var/obj/item/clothing/under/marine/reconnaissance/uniform = new() @@ -234,7 +234,7 @@ name = "Survivor - USCM Reconnaissance Major" assignment = JOB_FORECON_CO skills = /datum/skills/commander - paygrade = "MO4" + paygrade = PAY_SHORT_MO4 idtype = /obj/item/card/id/gold role_comm_title = "FORECON CO" diff --git a/code/modules/gear_presets/survivors/misc.dm b/code/modules/gear_presets/survivors/misc.dm index 3beba6a31b06..15eae8dfe5d4 100644 --- a/code/modules/gear_presets/survivors/misc.dm +++ b/code/modules/gear_presets/survivors/misc.dm @@ -178,7 +178,7 @@ everything bellow isn't used or out of place. name = "Survivor - Corporate Security Goon" flags = EQUIPMENT_PRESET_START_OF_ROUND assignment = JOB_WY_GOON - paygrade = "WEY-GOON" + paygrade = PAY_SHORT_CPO idtype = /obj/item/card/id/silver/cl skills = /datum/skills/civilian/survivor/goon languages = list(LANGUAGE_ENGLISH, LANGUAGE_JAPANESE) @@ -257,7 +257,7 @@ everything bellow isn't used or out of place. name = "Survivor - USASF Commander" assignment = "USASF Commander" skills = /datum/skills/commander - paygrade = "NO5" + paygrade = PAY_SHORT_NO5 idtype = /obj/item/card/id/gold role_comm_title = "USASF CDR" flags = EQUIPMENT_PRESET_START_OF_ROUND diff --git a/code/modules/gear_presets/survivors/solaris/crashlanding-offices_insert_bigred.dm b/code/modules/gear_presets/survivors/solaris/crashlanding-offices_insert_bigred.dm index 35a9b8e5eaba..cbc777ad6852 100644 --- a/code/modules/gear_presets/survivors/solaris/crashlanding-offices_insert_bigred.dm +++ b/code/modules/gear_presets/survivors/solaris/crashlanding-offices_insert_bigred.dm @@ -82,7 +82,7 @@ /datum/equipment_preset/survivor/wy/manager name = "Survivor - Corporate Supervisor" flags = EQUIPMENT_PRESET_EXTRA - paygrade = "WYC7" + paygrade = PAY_SHORT_WYC6 skills = /datum/skills/civilian/survivor/manager assignment = "Colony Supervisor" role_comm_title = "Supervisor" diff --git a/code/modules/gear_presets/survivors/sorokyne_strata/preset_sorokyne_strata.dm b/code/modules/gear_presets/survivors/sorokyne_strata/preset_sorokyne_strata.dm index 532b422a13a9..f53f25326b69 100644 --- a/code/modules/gear_presets/survivors/sorokyne_strata/preset_sorokyne_strata.dm +++ b/code/modules/gear_presets/survivors/sorokyne_strata/preset_sorokyne_strata.dm @@ -1,6 +1,6 @@ /datum/equipment_preset/survivor/engineer/soro - name = "Survivor - Sorokyne Strata Political Prisioner" - assignment = "Sorokyne Strata Political Prisioner" + name = "Survivor - Sorokyne Strata Political Prisoner" + assignment = "Sorokyne Strata Political Prisoner" /datum/equipment_preset/survivor/engineer/soro/load_gear(mob/living/carbon/human/new_human) new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/veteran/UPP(new_human), WEAR_BODY) @@ -58,3 +58,17 @@ new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/snow_suit/survivor(new_human), WEAR_JACKET) new_human.equip_to_slot_or_del(new /obj/item/clothing/head/ushanka(new_human), WEAR_HEAD) ..() + +/datum/equipment_preset/survivor/corporate/soro + name = "Survivor - Sorokyne Strata Corporate Liaison" + assignment = "Sorokyne Strata Corporate Liaison" + +/datum/equipment_preset/survivor/corporate/soro/load_gear(mob/living/carbon/human/new_human) + new_human.equip_to_slot_or_del(new /obj/item/clothing/under/liaison_suit/charcoal(new_human), WEAR_BODY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/head/ushanka(new_human), WEAR_HEAD) + new_human.equip_to_slot_or_del(new /obj/item/clothing/mask/rebreather/scarf(new_human), WEAR_FACE) + new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/snow_suit/liaison/modified(new_human), WEAR_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel/lockable/liaison, WEAR_BACK) + new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/knife(new_human), WEAR_FEET) + ..() + diff --git a/code/modules/gear_presets/survivors/survivors.dm b/code/modules/gear_presets/survivors/survivors.dm index 7a346fe1edd6..ae26fc40938b 100644 --- a/code/modules/gear_presets/survivors/survivors.dm +++ b/code/modules/gear_presets/survivors/survivors.dm @@ -5,7 +5,7 @@ skills = /datum/skills/civilian/survivor languages = list(LANGUAGE_ENGLISH) - paygrade = "C" + paygrade = PAY_SHORT_CIV idtype = /obj/item/card/id/lanyard faction = FACTION_SURVIVOR faction_group = list(FACTION_SURVIVOR) @@ -195,7 +195,7 @@ Standart Survivors : /datum/equipment_preset/survivor/scientist, /datum/equipment_preset/survivor/colonial_marshal name = "Survivor - Colonial Marshal Deputy" assignment = "CMB Deputy" - paygrade = "GS-9" + paygrade = PAY_SHORT_CMBD skills = /datum/skills/civilian/survivor/marshal flags = EQUIPMENT_PRESET_START_OF_ROUND idtype = /obj/item/card/id/deputy @@ -293,7 +293,7 @@ Everything bellow is a parent used as a base for one or multiple maps. assignment = "Corporate Liaison" skills = /datum/skills/civilian/survivor flags = EQUIPMENT_PRESET_START_OF_ROUND - paygrade = "WYC2" + paygrade = PAY_SHORT_WYC2 idtype = /obj/item/card/id/silver/clearance_badge/cl access = list( ACCESS_CIVILIAN_PUBLIC, @@ -325,11 +325,11 @@ Everything bellow is a parent used as a base for one or multiple maps. var/playtime = get_job_playtime(new_human.client, JOB_CORPORATE_LIAISON) if(new_human.client.prefs.playtime_perks) if(playtime > JOB_PLAYTIME_TIER_4) - return "WYC5" + return PAY_SHORT_WYC5 else if(playtime > JOB_PLAYTIME_TIER_3) - return "WYC4" + return PAY_SHORT_WYC4 else if(playtime > JOB_PLAYTIME_TIER_2) - return "WYC3" + return PAY_SHORT_WYC3 else return paygrade return paygrade @@ -411,7 +411,7 @@ and is used as a base for all of the maps. assignment = "Interstellar Commerce Commission Corporate Liaison" skills = /datum/skills/civilian/survivor idtype = /obj/item/card/id/silver/cl - paygrade = "WYC2" + paygrade = PAY_SHORT_ICCL role_comm_title = "ICC Rep." flags = EQUIPMENT_PRESET_START_OF_ROUND diff --git a/code/modules/gear_presets/survivors/trijent/crashlanding_upp_bar_insert_trijent.dm b/code/modules/gear_presets/survivors/trijent/crashlanding_upp_bar_insert_trijent.dm index c1ca81683c4b..324cfbe3bf7a 100644 --- a/code/modules/gear_presets/survivors/trijent/crashlanding_upp_bar_insert_trijent.dm +++ b/code/modules/gear_presets/survivors/trijent/crashlanding_upp_bar_insert_trijent.dm @@ -2,7 +2,7 @@ //crashlanding-upp-bar.dmm map. /datum/equipment_preset/survivor/upp name = "Survivor - UPP" - paygrade = "UE1" + paygrade = PAY_SHORT_UE1 origin_override = ORIGIN_UPP rank = JOB_SURVIVOR skills = /datum/skills/military/survivor/upp_private @@ -39,7 +39,7 @@ //crashlanding-upp-bar.dmm /datum/equipment_preset/survivor/upp/soldier name = "Survivor - UPP Soldier" - paygrade = "UE2" + paygrade = PAY_SHORT_UE2 assignment = JOB_UPP rank = JOB_UPP skills = /datum/skills/military/survivor/upp_private @@ -60,11 +60,18 @@ spawn_random_upp_belt(new_human) ..() + +/datum/equipment_preset/survivor/upp/soldier/load_rank(mob/living/carbon/human/new_human) + if(new_human.client) + if(get_job_playtime(new_human.client, rank) < JOB_PLAYTIME_TIER_1) + return PAY_SHORT_UE1 + return paygrade + // /obj/effect/landmark/survivor_spawner/upp_sapper //crashlanding-upp-bar.dmm /datum/equipment_preset/survivor/upp/sapper name = "Survivor - UPP Sapper" - paygrade = "UE3" + paygrade = PAY_SHORT_UE3 assignment = JOB_UPP_ENGI rank = JOB_UPP_ENGI skills = /datum/skills/military/survivor/upp_sapper @@ -92,7 +99,7 @@ //crashlanding-upp-bar.dmm /datum/equipment_preset/survivor/upp/medic name = "Survivor - UPP Medic" - paygrade = "UE3" + paygrade = PAY_SHORT_UE3 assignment = JOB_UPP_MEDIC rank = JOB_UPP_MEDIC skills = /datum/skills/military/survivor/upp_medic @@ -124,7 +131,7 @@ name = "Survivor - UPP Specialist" assignment = JOB_UPP_SPECIALIST rank = JOB_UPP_SPECIALIST - paygrade = "UE4" + paygrade = PAY_SHORT_UE4 skills = /datum/skills/military/survivor/upp_spec /datum/equipment_preset/survivor/upp/specialist/load_gear(mob/living/carbon/human/new_human) @@ -143,7 +150,7 @@ // /obj/effect/landmark/survivor_spawner/squad_leader /datum/equipment_preset/survivor/upp/squad_leader name = "Survivor - UPP Squad Leader" - paygrade = "UE5" + paygrade = PAY_SHORT_UE5 assignment = JOB_UPP_LEADER rank = JOB_UPP_LEADER languages = list(LANGUAGE_RUSSIAN, LANGUAGE_ENGLISH, LANGUAGE_GERMAN, LANGUAGE_CHINESE) @@ -171,7 +178,7 @@ faction = FACTION_UPP faction_group = list(FACTION_UPP, FACTION_SURVIVOR) skills = /datum/skills/colonial_synthetic - paygrade = "SYN" + paygrade = PAY_SHORT_SYN idtype = /obj/item/card/id/dogtag role_comm_title = "173/RECON Syn" diff --git a/code/modules/gear_presets/synths.dm b/code/modules/gear_presets/synths.dm index 651a324003bc..3b2efd8c22be 100644 --- a/code/modules/gear_presets/synths.dm +++ b/code/modules/gear_presets/synths.dm @@ -3,7 +3,7 @@ uses_special_name = TRUE languages = ALL_SYNTH_LANGUAGES skills = /datum/skills/synthetic - paygrade = "SYN" + paygrade = PAY_SHORT_SYN minimap_icon = "synth" @@ -41,7 +41,7 @@ idtype = /obj/item/card/id/gold assignment = JOB_SYNTH rank = "Synthetic" - paygrade = "SYN" + paygrade = PAY_SHORT_SYN role_comm_title = "Syn" /datum/equipment_preset/synth/uscm/load_gear(mob/living/carbon/human/new_human) @@ -65,7 +65,7 @@ idtype = /obj/item/card/id/gold assignment = JOB_SYNTH rank = "Synthetic" - paygrade = "SYN" + paygrade = PAY_SHORT_SYN role_comm_title = "Syn" /datum/equipment_preset/synth/uscm/councillor/load_gear(mob/living/carbon/human/new_human) @@ -654,7 +654,7 @@ rank = JOB_COLONIST skills = /datum/skills/infiltrator_synthetic idtype = /obj/item/card/id/lanyard - paygrade = "C" + paygrade = PAY_SHORT_CIV /datum/equipment_preset/synth/infiltrator/New() . = ..() diff --git a/code/modules/gear_presets/upp.dm b/code/modules/gear_presets/upp.dm index 5a2c09b63b85..dc79f87c5135 100644 --- a/code/modules/gear_presets/upp.dm +++ b/code/modules/gear_presets/upp.dm @@ -64,7 +64,7 @@ assignment = JOB_UPP rank = JOB_UPP role_comm_title = "Sol" - paygrade = "UE2" + paygrade = PAY_SHORT_UE2 /datum/equipment_preset/upp/soldier/load_gear(mob/living/carbon/human/new_human) //TODO: add backpacks and satchels @@ -86,6 +86,12 @@ load_upp_soldier(new_human, UPP) +/datum/equipment_preset/upp/soldier/load_rank(mob/living/carbon/human/new_human) + if(new_human.client) + if(get_job_playtime(new_human.client, rank) < JOB_PLAYTIME_TIER_1) + return PAY_SHORT_UE1 + return paygrade + /datum/equipment_preset/upp/soldier/proc/load_upp_soldier(mob/living/carbon/human/new_human, obj/item/clothing/under/marine/veteran/UPP/UPP) var/percentage = rand(1, 100) switch(percentage) @@ -230,7 +236,7 @@ assignment = JOB_UPP_MEDIC rank = JOB_UPP_MEDIC role_comm_title = "Med" - paygrade = "UE3" + paygrade = PAY_SHORT_UE3 /datum/equipment_preset/upp/medic/load_gear(mob/living/carbon/human/new_human) //back @@ -399,7 +405,7 @@ assignment = JOB_UPP_ENGI rank = JOB_UPP_ENGI role_comm_title = "Sap" - paygrade = "UE3" + paygrade = PAY_SHORT_UE3 /datum/equipment_preset/upp/sapper/load_gear(mob/living/carbon/human/new_human) //Sappers should have lots of gear and whatnot that helps them attack or siege marines @@ -533,7 +539,7 @@ assignment = JOB_UPP_SPECIALIST rank = JOB_UPP_SPECIALIST role_comm_title = "Spc" - paygrade = "UE5" + paygrade = PAY_SHORT_UE5 /datum/equipment_preset/upp/specialist/load_gear(mob/living/carbon/human/new_human) //back @@ -660,7 +666,7 @@ assignment = JOB_UPP_SPECIALIST rank = JOB_UPP_SPECIALIST role_comm_title = "Spc" - paygrade = "UE5" + paygrade = PAY_SHORT_UE5 /datum/equipment_preset/upp/machinegunner/load_gear(mob/living/carbon/human/new_human) //back @@ -785,7 +791,7 @@ assignment = JOB_UPP_LEADER rank = JOB_UPP_LEADER role_comm_title = "SL" - paygrade = "UE6" + paygrade = PAY_SHORT_UE6 /datum/equipment_preset/upp/leader/load_gear(mob/living/carbon/human/new_human) var/UPPleadsidearm = rand(1,4) @@ -953,7 +959,7 @@ assignment = JOB_UPP_POLICE rank = JOB_UPP_POLICE role_comm_title = "MP" - paygrade = "UE6" + paygrade = PAY_SHORT_UE6 /datum/equipment_preset/upp/military_police/load_gear(mob/living/carbon/human/new_human) //back @@ -1105,7 +1111,7 @@ assignment = JOB_UPP_LT_OFFICER rank = JOB_UPP_LT_OFFICER role_comm_title = "Lt." - paygrade = "UO1" + paygrade = PAY_SHORT_UO1 /datum/equipment_preset/upp/officer/load_gear(mob/living/carbon/human/new_human) //back @@ -1265,7 +1271,7 @@ assignment = JOB_UPP_SRLT_OFFICER rank = JOB_UPP_SRLT_OFFICER role_comm_title = "Sr-Lt." - paygrade = "UO2" + paygrade = PAY_SHORT_UO2 /datum/equipment_preset/upp/officer/senior/load_gear(mob/living/carbon/human/new_human) //back @@ -1425,7 +1431,7 @@ assignment = JOB_UPP_KPT_OFFICER rank = JOB_UPP_KPT_OFFICER role_comm_title = "May." - paygrade = "UO3" + paygrade = PAY_SHORT_UO3 skills = /datum/skills/upp/kapitan /datum/equipment_preset/upp/officer/kapitan/load_gear(mob/living/carbon/human/new_human) @@ -1586,7 +1592,7 @@ assignment = JOB_UPP_MAY_OFFICER rank = JOB_UPP_MAY_OFFICER role_comm_title = "May." - paygrade = "UO4" + paygrade = PAY_SHORT_UO4 skills = /datum/skills/upp/commander /datum/equipment_preset/upp/officer/major/load_gear(mob/living/carbon/human/new_human) @@ -1747,7 +1753,7 @@ assignment = JOB_UPP_LTKOL_OFFICER rank = JOB_UPP_LTKOL_OFFICER role_comm_title = "Lt. Kol." - paygrade = "UO5" + paygrade = PAY_SHORT_UO5 skills = /datum/skills/upp/commander /datum/equipment_preset/upp/officer/lt_kolonel/load_gear(mob/living/carbon/human/new_human) @@ -1908,7 +1914,7 @@ assignment = JOB_UPP_KOL_OFFICER rank = JOB_UPP_KOL_OFFICER role_comm_title = "Kol." - paygrade = "UO6" + paygrade = PAY_SHORT_UO6 skills = /datum/skills/upp/commander /datum/equipment_preset/upp/officer/kolonel/load_gear(mob/living/carbon/human/new_human) @@ -2069,7 +2075,7 @@ assignment = JOB_UPP_KOL_OFFICER rank = JOB_UPP_KOL_OFFICER role_comm_title = "May. Gen." - paygrade = "UO7" + paygrade = PAY_SHORT_UO7 skills = /datum/skills/upp/commander /datum/equipment_preset/upp/officer/may_gen/load_gear(mob/living/carbon/human/new_human) @@ -2230,7 +2236,7 @@ assignment = JOB_UPP_KOL_OFFICER rank = JOB_UPP_KOL_OFFICER role_comm_title = "Lt. Gen." - paygrade = "UO8" + paygrade = PAY_SHORT_UO8 skills = /datum/skills/upp/commander /datum/equipment_preset/upp/officer/ley_gen/load_gear(mob/living/carbon/human/new_human) @@ -2391,7 +2397,7 @@ assignment = JOB_UPP_KOL_OFFICER rank = JOB_UPP_KOL_OFFICER role_comm_title = "Gen." - paygrade = "UO9" + paygrade = PAY_SHORT_UO9 skills = /datum/skills/upp/commander /datum/equipment_preset/upp/officer/gen/load_gear(mob/living/carbon/human/new_human) @@ -2592,7 +2598,7 @@ skills = /datum/skills/synthetic assignment = JOB_UPP_COMBAT_SYNTH rank = JOB_UPP_COMBAT_SYNTH - paygrade = "SYN" + paygrade = PAY_SHORT_SYN idtype = /obj/item/card/id/gold /datum/equipment_preset/upp/synth/load_name(mob/living/carbon/human/new_human, randomise) @@ -2801,7 +2807,7 @@ assignment = JOB_UPP_CONSCRIPT rank = JOB_UPP_CONSCRIPT role_comm_title = "Cons" - paygrade = "UE1" + paygrade = PAY_SHORT_UE1 /datum/equipment_preset/upp/conscript/load_gear(mob/living/carbon/human/new_human) //TODO: add backpacks and satchels @@ -2909,7 +2915,7 @@ assignment = JOB_UPP_COMMANDO rank = JOB_UPP_COMMANDO role_comm_title = "JKdo" - paygrade = "UC1" + paygrade = PAY_SHORT_UC1 idtype = /obj/item/card/id/data languages = list(LANGUAGE_RUSSIAN, LANGUAGE_ENGLISH, LANGUAGE_TSL, LANGUAGE_SPANISH, LANGUAGE_CHINESE) @@ -3038,7 +3044,7 @@ assignment = JOB_UPP_COMMANDO_MEDIC rank = JOB_UPP_COMMANDO_MEDIC role_comm_title = "2ndKdo" - paygrade = "UC2" + paygrade = PAY_SHORT_UC2 /datum/equipment_preset/upp/commando/medic/load_gear(mob/living/carbon/human/new_human) //TODO: add backpacks and satchels @@ -3207,7 +3213,7 @@ assignment = JOB_UPP_COMMANDO_LEADER rank = JOB_UPP_COMMANDO_LEADER role_comm_title = "1stKdo" - paygrade = "UC3" + paygrade = PAY_SHORT_UC3 idtype = /obj/item/card/id/silver /datum/equipment_preset/upp/commando/leader/load_gear(mob/living/carbon/human/new_human) @@ -3459,7 +3465,7 @@ assignment = JOB_UPP_CREWMAN rank = JOB_UPP_CREWMAN - paygrade = "UE5" + paygrade = PAY_SHORT_UE5 role_comm_title = "TANK" minimum_age = 30 skills = /datum/skills/tank_crew @@ -3577,7 +3583,7 @@ assignment = JOB_UPP_LT_DOKTOR rank = JOB_UPP_LT_DOKTOR role_comm_title = "Lt. Med." - paygrade = "UO1" + paygrade = PAY_SHORT_UO1 /datum/equipment_preset/upp/doctor/load_gear(mob/living/carbon/human/new_human) //back diff --git a/code/modules/gear_presets/uscm.dm b/code/modules/gear_presets/uscm.dm index bb3cf26e2dee..8677b372159b 100644 --- a/code/modules/gear_presets/uscm.dm +++ b/code/modules/gear_presets/uscm.dm @@ -67,7 +67,7 @@ access = list(ACCESS_MARINE_PREP) assignment = JOB_SQUAD_MARINE rank = JOB_SQUAD_MARINE - paygrade = "ME2" + paygrade = PAY_SHORT_ME2 role_comm_title = "RFN" skills = /datum/skills/pfc @@ -83,7 +83,7 @@ /datum/equipment_preset/uscm/pfc/load_rank(mob/living/carbon/human/new_human) if(new_human.client) if(get_job_playtime(new_human.client, rank) < JOB_PLAYTIME_TIER_1) - return "ME1" + return PAY_SHORT_ME1 return paygrade /datum/equipment_preset/uscm/pfc/cryo @@ -103,7 +103,7 @@ access = list(ACCESS_MARINE_PREP, ACCESS_MARINE_SMARTPREP) assignment = JOB_SQUAD_SMARTGUN rank = JOB_SQUAD_SMARTGUN - paygrade = "ME3" + paygrade = PAY_SHORT_ME3 role_comm_title = "SG" skills = /datum/skills/smartgunner @@ -159,7 +159,7 @@ ) assignment = JOB_CREWMAN rank = JOB_CREWMAN - paygrade = "ME4" + paygrade = PAY_SHORT_ME4 role_comm_title = "CRMN" minimum_age = 30 skills = /datum/skills/tank_crew @@ -220,7 +220,7 @@ ) assignment = JOB_INTEL rank = JOB_INTEL - paygrade = "MO1" + paygrade = PAY_SHORT_MO1 role_comm_title = "IO" skills = /datum/skills/intel @@ -276,7 +276,7 @@ access = list(ACCESS_MARINE_PREP, ACCESS_MARINE_SPECPREP) assignment = JOB_SQUAD_SPECIALIST rank = JOB_SQUAD_SPECIALIST - paygrade = "ME3" + paygrade = PAY_SHORT_ME3 role_comm_title = "Spc" skills = /datum/skills/specialist @@ -333,7 +333,7 @@ access = list(ACCESS_MARINE_PREP, ACCESS_MARINE_MEDPREP, ACCESS_MARINE_MEDBAY) assignment = JOB_SQUAD_MEDIC rank = JOB_SQUAD_MEDIC - paygrade = "ME3" + paygrade = PAY_SHORT_ME3 role_comm_title = "HM" skills = /datum/skills/combat_medic @@ -365,7 +365,7 @@ access = list(ACCESS_MARINE_PREP, ACCESS_MARINE_TL_PREP) assignment = JOB_SQUAD_TEAM_LEADER rank = JOB_SQUAD_TEAM_LEADER - paygrade = "ME4" + paygrade = PAY_SHORT_ME4 role_comm_title = "FTL" skills = /datum/skills/tl @@ -395,7 +395,7 @@ access = list(ACCESS_MARINE_PREP, ACCESS_MARINE_ENGPREP, ACCESS_CIVILIAN_ENGINEERING) assignment = JOB_SQUAD_ENGI rank = JOB_SQUAD_ENGI - paygrade = "ME3" + paygrade = PAY_SHORT_ME3 role_comm_title = "ComTech" skills = /datum/skills/combat_engineer @@ -427,7 +427,7 @@ access = list(ACCESS_MARINE_PREP, ACCESS_MARINE_LEADER, ACCESS_MARINE_DROPSHIP) assignment = JOB_SQUAD_LEADER rank = JOB_SQUAD_LEADER - paygrade = "ME5" + paygrade = PAY_SHORT_ME5 role_comm_title = "SL" minimum_age = 27 skills = /datum/skills/SL @@ -460,7 +460,7 @@ access = list(ACCESS_MARINE_PREP) assignment = JOB_SQUAD_MARINE rank = JOB_SQUAD_MARINE - paygrade = "ME2" + paygrade = PAY_SHORT_ME2 role_comm_title = "RFN" skills = /datum/skills/pfc/crafty @@ -472,7 +472,7 @@ /datum/equipment_preset/uscm/private_equipped/load_rank(mob/living/carbon/human/new_human) if(new_human.client) if(get_job_playtime(new_human.client, rank) < JOB_PLAYTIME_TIER_1) - return "ME1" + return PAY_SHORT_ME1 return paygrade /datum/equipment_preset/uscm/private_equipped/load_gear(mob/living/carbon/human/new_human) @@ -508,7 +508,7 @@ access = list(ACCESS_MARINE_PREP, ACCESS_MARINE_LEADER, ACCESS_MARINE_DROPSHIP) assignment = JOB_SQUAD_LEADER rank = JOB_SQUAD_LEADER - paygrade = "ME5" + paygrade = PAY_SHORT_ME5 role_comm_title = "SL" minimum_age = 27 skills = /datum/skills/SL @@ -550,7 +550,7 @@ access = list(ACCESS_MARINE_PREP, ACCESS_MARINE_SMARTPREP) assignment = JOB_SQUAD_SMARTGUN rank = JOB_SQUAD_SMARTGUN - paygrade = "ME3" + paygrade = PAY_SHORT_ME3 role_comm_title = "SG" skills = /datum/skills/smartgunner @@ -587,7 +587,7 @@ access = list(ACCESS_MARINE_PREP, ACCESS_MARINE_ENGPREP, ACCESS_CIVILIAN_ENGINEERING) assignment = JOB_SQUAD_ENGI rank = JOB_SQUAD_ENGI - paygrade = "ME3" + paygrade = PAY_SHORT_ME3 role_comm_title = "ComTech" skills = /datum/skills/combat_engineer @@ -633,7 +633,7 @@ access = list(ACCESS_MARINE_PREP, ACCESS_MARINE_MEDPREP, ACCESS_MARINE_MEDBAY) assignment = JOB_SQUAD_MEDIC rank = JOB_SQUAD_MEDIC - paygrade = "ME3" + paygrade = PAY_SHORT_ME3 role_comm_title = "HM" skills = /datum/skills/combat_medic @@ -687,7 +687,7 @@ access = list(ACCESS_MARINE_PREP, ACCESS_MARINE_SPECPREP) assignment = JOB_SQUAD_SPECIALIST rank = JOB_SQUAD_SPECIALIST - paygrade = "ME3" + paygrade = PAY_SHORT_ME3 role_comm_title = "Spc" skills = /datum/skills/specialist @@ -757,7 +757,7 @@ access = list(ACCESS_MARINE_PREP, ACCESS_MARINE_TL_PREP) assignment = JOB_SQUAD_TEAM_LEADER rank = JOB_SQUAD_TEAM_LEADER - paygrade = "ME4" + paygrade = PAY_SHORT_ME4 role_comm_title = "TL" skills = /datum/skills/tl @@ -798,7 +798,7 @@ skills = /datum/skills/commando/deathsquad auto_squad_name = SQUAD_SOF ert_squad = TRUE - paygrade = "ME6" + paygrade = PAY_SHORT_ME6 minimap_icon = "private" @@ -851,7 +851,7 @@ /datum/equipment_preset/uscm/marsoc/load_rank(mob/living/carbon/human/new_human) if(new_human.client) if(get_job_playtime(new_human.client, rank) > JOB_PLAYTIME_TIER_2) - return "ME7" + return PAY_SHORT_ME7 return paygrade //Covert Raiders @@ -871,7 +871,7 @@ assignment = JOB_MARINE_RAIDER_SL rank = JOB_MARINE_RAIDER_SL role_comm_title = "TL." - paygrade = "MO1" + paygrade = PAY_SHORT_MO1 skills = /datum/skills/commando/deathsquad/leader minimap_icon = "leader" @@ -879,7 +879,7 @@ /datum/equipment_preset/uscm/marsoc/sl/load_rank(mob/living/carbon/human/new_human) if(new_human.client) if(get_job_playtime(new_human.client, rank) > JOB_PLAYTIME_TIER_2) - return "MO2" + return PAY_SHORT_MO2 return paygrade //Codenamed Team Leader @@ -898,13 +898,13 @@ assignment = JOB_MARINE_RAIDER_CMD rank = JOB_MARINE_RAIDER_CMD role_comm_title = "CMD." - paygrade = "MO3" + paygrade = PAY_SHORT_MO3 skills = /datum/skills/commando/deathsquad/officer /datum/equipment_preset/uscm/marsoc/cmd/load_rank(mob/living/carbon/human/new_human) if(new_human.client) if(get_job_playtime(new_human.client, rank) > JOB_PLAYTIME_TIER_3) - return "MO4" + return PAY_SHORT_MO4 return paygrade /datum/equipment_preset/uscm/marsoc/low_threat @@ -954,7 +954,7 @@ assignment = JOB_MARINE_RAIDER_SL rank = JOB_MARINE_RAIDER_SL role_comm_title = "TL." - paygrade = "MO1" + paygrade = PAY_SHORT_MO1 skills = /datum/skills/commando/deathsquad/leader minimap_icon = "leader" @@ -962,5 +962,5 @@ /datum/equipment_preset/uscm/marsoc/sl/load_rank(mob/living/carbon/human/new_human) if(new_human.client) if(get_job_playtime(new_human.client, rank) > JOB_PLAYTIME_TIER_2) - return "MO2" + return PAY_SHORT_MO2 return paygrade diff --git a/code/modules/gear_presets/uscm_dress.dm b/code/modules/gear_presets/uscm_dress.dm index 393cc5b41a66..080ed18d7c40 100644 --- a/code/modules/gear_presets/uscm_dress.dm +++ b/code/modules/gear_presets/uscm_dress.dm @@ -5,7 +5,7 @@ rank = JOB_MARINE access = list(ACCESS_MARINE_PREP) minimum_age = 18 - paygrade = "ME2" + paygrade = PAY_SHORT_ME2 role_comm_title = "Mar" skills = /datum/skills/pfc @@ -25,13 +25,13 @@ /datum/equipment_preset/uscm_event/dress/lcpl name = "Dress Blues - (E-3) Lance Corporal" - paygrade = "ME3" + paygrade = PAY_SHORT_ME3 //NCOs/SNCOs// /datum/equipment_preset/uscm_event/dress/nco name = "Dress Blues - (E-4) Corporal" - paygrade = "ME4" + paygrade = PAY_SHORT_ME4 skills = /datum/skills/SL dress_under = list(/obj/item/clothing/under/marine/dress/blues/senior) @@ -44,11 +44,11 @@ /datum/equipment_preset/uscm_event/dress/nco/sgt name = "Dress Blues - (E-5) Sergeant" - paygrade = "ME5" + paygrade = PAY_SHORT_ME5 /datum/equipment_preset/uscm_event/dress/nco/snco name = "Dress Blues - (E-6) Staff Sergeant" - paygrade = "ME6" + paygrade = PAY_SHORT_ME6 skills = /datum/skills/SEA access = list(ACCESS_MARINE_COMMAND, ACCESS_MARINE_DROPSHIP) @@ -58,29 +58,29 @@ /datum/equipment_preset/uscm_event/dress/nco/snco/gysgt name = "Dress Blues - (E-7) Gunnery Sergeant" - paygrade = "ME7" + paygrade = PAY_SHORT_ME7 /datum/equipment_preset/uscm_event/dress/nco/snco/msgt name = "Dress Blues - (E-8) Master Sergeant" - paygrade = "ME8" + paygrade = PAY_SHORT_ME8 /datum/equipment_preset/uscm_event/dress/nco/snco/firstsgt name = "Dress Blues - (E-8E) First Sergeant" - paygrade = "ME8E" + paygrade = PAY_SHORT_ME8E /datum/equipment_preset/uscm_event/dress/nco/snco/mgysgt name = "Dress Blues - (E-9) Master Gunnery Sergeant" - paygrade = "ME9" + paygrade = PAY_SHORT_ME9 /datum/equipment_preset/uscm_event/dress/nco/snco/sgtmaj name = "Dress Blues - (E-9E) Sergeant Major" - paygrade = "ME9E" + paygrade = PAY_SHORT_ME9E //FIELD OFFICERS// /datum/equipment_preset/uscm_event/dress/officer name = "Dress Blues - (O-1) 2nd Lieutenant" - paygrade = "MO1" + paygrade = PAY_SHORT_MO1 idtype = /obj/item/card/id/silver skills = /datum/skills/SO access = list(ACCESS_MARINE_COMMAND, ACCESS_MARINE_DROPSHIP, ACCESS_MARINE_DATABASE, ACCESS_MARINE_MEDBAY) @@ -100,11 +100,11 @@ /datum/equipment_preset/uscm_event/dress/officer/firstlt name = "Dress Blues - (O-2) 1st Lieutenant" - paygrade = "MO2" + paygrade = PAY_SHORT_MO2 /datum/equipment_preset/uscm_event/dress/officer/capt name = "Dress Blues - (O-3) Captain" - paygrade = "MO3" + paygrade = PAY_SHORT_MO3 idtype = /obj/item/card/id/gold skills = /datum/skills/XO @@ -115,7 +115,7 @@ /datum/equipment_preset/uscm_event/dress/officer/co name = "Dress Blues - (O-4) Major" - paygrade = "MO4" + paygrade = PAY_SHORT_MO4 idtype = /obj/item/card/id/gold skills = /datum/skills/commander @@ -125,19 +125,19 @@ /datum/equipment_preset/uscm_event/dress/officer/co/ltcol name = "Dress Blues - (O-5) Lieutenant Colonel" - paygrade = "MO5" + paygrade = PAY_SHORT_MO5 idtype = /obj/item/card/id/gold/council /datum/equipment_preset/uscm_event/dress/officer/co/col name = "Dress Blues - (O-6) Colonel" - paygrade = "MO6" + paygrade = PAY_SHORT_MO6 idtype = /obj/item/card/id/general //GENERAL OFFICERS// /datum/equipment_preset/uscm_event/dress/officer/general name = "Dress Blues - (O-8) Major General" - paygrade = "MO8" + paygrade = PAY_SHORT_MO8 idtype = /obj/item/card/id/general skills = /datum/skills/general @@ -155,8 +155,8 @@ /datum/equipment_preset/uscm_event/dress/officer/general/ltgen name = "Dress Blues - (O-9) Lieutenant General" - paygrade = "MO9" + paygrade = PAY_SHORT_MO9 /datum/equipment_preset/uscm_event/dress/officer/general/gen name = "Dress Blues - (O-10) General" - paygrade = "MO10" + paygrade = PAY_SHORT_MO10 diff --git a/code/modules/gear_presets/uscm_event.dm b/code/modules/gear_presets/uscm_event.dm index 5f7c40c016e0..ce36f1fd807f 100644 --- a/code/modules/gear_presets/uscm_event.dm +++ b/code/modules/gear_presets/uscm_event.dm @@ -16,7 +16,7 @@ access = list(ACCESS_MARINE_MEDBAY, ACCESS_MARINE_CHEMISTRY, ACCESS_MARINE_MORGUE) assignment = JOB_COLONEL rank = JOB_COLONEL - paygrade = "MO6" + paygrade = PAY_SHORT_MO6 role_comm_title = "COL" minimum_age = 40 skills = /datum/skills/general @@ -61,7 +61,7 @@ access = list(ACCESS_MARINE_MEDBAY, ACCESS_MARINE_CHEMISTRY, ACCESS_MARINE_MORGUE) assignment = JOB_GENERAL rank = JOB_GENERAL - paygrade = "MO7" + paygrade = PAY_SHORT_MO7 role_comm_title = "GEN" minimum_age = 50 skills = /datum/skills/general @@ -102,30 +102,30 @@ /datum/equipment_preset/uscm_event/general/o7 name = "USCM O-7 - Brigadier General (High Command)" - paygrade = "MO7" + paygrade = PAY_SHORT_MO7 /datum/equipment_preset/uscm_event/general/o8 name = "USCM O-8 - Major General (High Command)" - paygrade = "MO8" + paygrade = PAY_SHORT_MO8 /datum/equipment_preset/uscm_event/general/o9 name = "USCM O-9 - Lieutenant General (High Command)" - paygrade = "MO9" + paygrade = PAY_SHORT_MO9 /datum/equipment_preset/uscm_event/general/o10 name = "USCM O-10 - General (High Command)" - paygrade = "MO10" + paygrade = PAY_SHORT_MO10 /datum/equipment_preset/uscm_event/general/o10c name = "USCM O-10C - Assistant Commandant of the Marine Corps (High Command)" - paygrade = "MO10C" + paygrade = PAY_SHORT_MO10C assignment = JOB_ACMC rank = JOB_ACMC role_comm_title = "ACMC" /datum/equipment_preset/uscm_event/general/o10s name = "USCM O-10S - Commandant of the Marine Corps (High Command)" - paygrade = "MO10S" + paygrade = PAY_SHORT_MO10S assignment = JOB_CMC rank = JOB_CMC role_comm_title = "CMC" @@ -145,7 +145,7 @@ ) assignment = JOB_ORDNANCE_TECH rank = "UPP" - paygrade = "ME2" + paygrade = PAY_SHORT_ME2 role_comm_title = "OT" skills = /datum/skills/spy @@ -192,11 +192,11 @@ access = get_access(ACCESS_LIST_MARINE_ALL) /datum/equipment_preset/uscm_event/provost/enforcer - name = "Provost Enforcer (ME5)" + name = "Provost Enforcer" assignment = JOB_PROVOST_ENFORCER rank = "Provost Enforcer" - paygrade = "ME5" + paygrade = PAY_SHORT_CPO role_comm_title = "PvE" flags = EQUIPMENT_PRESET_EXTRA @@ -233,12 +233,12 @@ new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/shotgun/combat(new_human), WEAR_J_STORE) /datum/equipment_preset/uscm_event/provost/tml - name = "Provost Team Leader (ME6)" + name = "Provost Team Leader" skills = /datum/skills/CMP assignment = JOB_PROVOST_TML rank = "Provost Team Leader" - paygrade = "ME6" + paygrade = PAY_SHORT_CSPO role_comm_title = "PvTML" flags = EQUIPMENT_PRESET_EXTRA @@ -276,11 +276,11 @@ new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/shotgun/combat(new_human), WEAR_J_STORE) /datum/equipment_preset/uscm_event/provost/inspector - name = "Provost Inspector (PvI)" + name = "Provost Inspector" assignment = JOB_PROVOST_INSPECTOR rank = "Provost Inspector" - paygrade = "PvI" + paygrade = PAY_SHORT_PVI role_comm_title = "PvI" flags = EQUIPMENT_PRESET_EXTRA @@ -303,17 +303,20 @@ new_human.equip_to_slot_or_del(new back_item(new_human), WEAR_BACK) new_human.equip_to_slot_or_del(new /obj/item/device/taperecorder(new_human), WEAR_L_STORE) new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/general/large(new_human), WEAR_R_STORE) + new_human.equip_to_slot_or_del(new /obj/item/device/radio/listening_bug/radio_linked/hc/pvst(new_human), WEAR_IN_R_STORE) + new_human.equip_to_slot_or_del(new /obj/item/device/radio/listening_bug/radio_linked/hc/pvst(new_human), WEAR_IN_R_STORE) + new_human.equip_to_slot_or_del(new /obj/item/device/radio/listening_bug/radio_linked/hc/pvst(new_human), WEAR_IN_R_STORE) new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/MP/provost/light/flexi(new_human.back), WEAR_IN_BACK) new_human.equip_to_slot_or_del(new /obj/item/device/flash(new_human), WEAR_IN_JACKET) new_human.equip_to_slot_or_del(new /obj/item/handcuffs(new_human), WEAR_IN_JACKET) /datum/equipment_preset/uscm_event/provost/inspector/advisor - name = "Provost Advisor (ME6)" + name = "Provost Advisor" assignment = JOB_PROVOST_ADVISOR rank = "Provost Advisor" - paygrade = "ME6" + paygrade = PAY_SHORT_CSPO role_comm_title = "PvA" flags = EQUIPMENT_PRESET_EXTRA @@ -324,8 +327,8 @@ assignment = JOB_PROVOST_MARSHAL rank = "Provost Marshal" - paygrade = "MO6" - role_comm_title = "PvM" + paygrade = PAY_SHORT_PVM + role_comm_title = PAY_SHORT_PVM flags = EQUIPMENT_PRESET_EXTRA /datum/equipment_preset/uscm_event/provost/marshal/load_gear(mob/living/carbon/human/new_human) @@ -355,8 +358,8 @@ assignment = JOB_PROVOST_SMARSHAL rank = "Provost Sector Marshal" - paygrade = "MO7" - role_comm_title = "PvSM" + paygrade = PAY_SHORT_PVSM + role_comm_title = PAY_SHORT_PVSM /datum/equipment_preset/uscm_event/provost/marshal/chief name = "Provost Chief Marshal (PvCM)" @@ -364,8 +367,8 @@ assignment = JOB_PROVOST_CMARSHAL rank = "Provost Chief Marshal" - paygrade = "PvCM" - role_comm_title = "PvCM" + paygrade = PAY_SHORT_PVCM + role_comm_title = PAY_SHORT_PVCM /*****************************************************************************************************/ @@ -386,7 +389,7 @@ assignment = JOB_TIS_IO rank = "UAAC-TIS Intelligence Officer" - paygrade = "NO2" + paygrade = PAY_SHORT_NO2 role_comm_title = "TIS-IO" flags = EQUIPMENT_PRESET_EXTRA @@ -413,7 +416,7 @@ assignment = JOB_TIS_SA rank = "UAAC-TIS Special Agent" - paygrade = "NO5" + paygrade = PAY_SHORT_NO5 role_comm_title = "TIS-SA" flags = EQUIPMENT_PRESET_EXTRA diff --git a/code/modules/gear_presets/uscm_medical.dm b/code/modules/gear_presets/uscm_medical.dm index 47d5ee19c9b4..be599755bacf 100644 --- a/code/modules/gear_presets/uscm_medical.dm +++ b/code/modules/gear_presets/uscm_medical.dm @@ -36,7 +36,7 @@ ) assignment = JOB_CMO rank = JOB_CMO - paygrade = "MO2" + paygrade = PAY_SHORT_MO2 role_comm_title = "CMO" skills = /datum/skills/CMO @@ -80,7 +80,7 @@ assignment = JOB_DOCTOR rank = JOB_DOCTOR - paygrade = "MO1" + paygrade = PAY_SHORT_MO1 role_comm_title = "Doc" skills = /datum/skills/doctor @@ -114,7 +114,7 @@ assignment = JOB_NURSE rank = JOB_NURSE - paygrade = "ME5" + paygrade = PAY_SHORT_ME5 role_comm_title = "Nurse" skills = /datum/skills/nurse @@ -139,7 +139,7 @@ /datum/equipment_preset/uscm_ship/uscm_medical/nurse/load_rank(mob/living/carbon/human/new_human) if(new_human.client) if(get_job_playtime(new_human.client, rank) < JOB_PLAYTIME_TIER_1) - return "ME3" + return PAY_SHORT_ME3 return paygrade //*****************************************************************************************************/ @@ -149,7 +149,7 @@ access = list(ACCESS_MARINE_MEDBAY, ACCESS_MARINE_RESEARCH, ACCESS_MARINE_CHEMISTRY, ACCESS_MARINE_MORGUE) assignment = JOB_RESEARCHER rank = JOB_RESEARCHER - paygrade = "MO1" + paygrade = PAY_SHORT_MO1 role_comm_title = "Rsr" skills = /datum/skills/researcher diff --git a/code/modules/gear_presets/uscm_police.dm b/code/modules/gear_presets/uscm_police.dm index 0ead4f713c23..14e35d990348 100644 --- a/code/modules/gear_presets/uscm_police.dm +++ b/code/modules/gear_presets/uscm_police.dm @@ -27,7 +27,7 @@ ) assignment = JOB_POLICE rank = JOB_POLICE - paygrade = "ME5" + paygrade = PAY_SHORT_ME5 role_comm_title = "MP" skills = /datum/skills/MP @@ -61,7 +61,7 @@ /datum/equipment_preset/uscm_ship/uscm_police/mp/load_rank(mob/living/carbon/human/human) if(human.client && get_job_playtime(human.client, rank) < JOB_PLAYTIME_TIER_1) - return "ME3" + return PAY_SHORT_ME3 return paygrade //*****************************************************************************************************/ @@ -90,7 +90,7 @@ ) assignment = JOB_WARDEN rank = JOB_WARDEN - paygrade = "ME6" + paygrade = PAY_SHORT_ME6 role_comm_title = "MW" skills = /datum/skills/MW @@ -151,7 +151,7 @@ ) assignment = JOB_CHIEF_POLICE rank = JOB_CHIEF_POLICE - paygrade = "MO2" + paygrade = PAY_SHORT_MO2 role_comm_title = "CMP" skills = /datum/skills/CMP @@ -195,7 +195,7 @@ access = list() assignment = JOB_RIOT rank = JOB_RIOT - paygrade = "ME5" + paygrade = PAY_SHORT_ME5 role_comm_title = "RMP" skills = /datum/skills/CMP @@ -243,6 +243,6 @@ assignment = JOB_RIOT_CHIEF rank = JOB_RIOT_CHIEF - paygrade = "MO1" + paygrade = PAY_SHORT_MO1 role_comm_title = "CRMP" skills = /datum/skills/CMP diff --git a/code/modules/gear_presets/uscm_ship.dm b/code/modules/gear_presets/uscm_ship.dm index d34137a1c36b..b5ef13f35b2b 100644 --- a/code/modules/gear_presets/uscm_ship.dm +++ b/code/modules/gear_presets/uscm_ship.dm @@ -45,7 +45,7 @@ ) assignment = JOB_CORPORATE_LIAISON rank = JOB_CORPORATE_LIAISON - paygrade = "WYC2" + paygrade = PAY_SHORT_WYC2 role_comm_title = "CL" skills = /datum/skills/civilian @@ -89,11 +89,11 @@ var/playtime = get_job_playtime(new_human.client, rank) if(new_human.client.prefs.playtime_perks) if(playtime > JOB_PLAYTIME_TIER_4) - return "WYC5" + return PAY_SHORT_WYC5 else if(playtime > JOB_PLAYTIME_TIER_3) - return "WYC4" + return PAY_SHORT_WYC4 else if(playtime > JOB_PLAYTIME_TIER_2) - return "WYC3" + return PAY_SHORT_WYC3 else return paygrade return paygrade @@ -119,7 +119,7 @@ ) assignment = JOB_COMBAT_REPORTER rank = JOB_COMBAT_REPORTER - paygrade = "C" + paygrade = PAY_SHORT_CIV role_comm_title = "PRESS" skills = /datum/skills/civilian idtype = /obj/item/card/id/silver/cl @@ -151,7 +151,7 @@ ) assignment = JOB_COMBAT_REPORTER rank = JOB_COMBAT_REPORTER - paygrade = "ME4" + paygrade = PAY_SHORT_ME4 role_comm_title = "CC" skills = /datum/skills/pfc idtype = /obj/item/card/id/dogtag @@ -203,7 +203,7 @@ ) assignment = JOB_CHIEF_ENGINEER rank = JOB_CHIEF_ENGINEER - paygrade = "MO1" + paygrade = PAY_SHORT_MO1 role_comm_title = "CE" minimum_age = 27 skills = /datum/skills/CE @@ -239,7 +239,7 @@ ) assignment = JOB_MAINT_TECH rank = JOB_MAINT_TECH - paygrade = "ME2" + paygrade = PAY_SHORT_ME2 role_comm_title = "MT" skills = /datum/skills/MT @@ -267,7 +267,7 @@ /datum/equipment_preset/uscm_ship/maint/load_rank(mob/living/carbon/human/new_human) if(new_human.client) if(get_job_playtime(new_human.client, rank) < JOB_PLAYTIME_TIER_1) - return "ME1" + return PAY_SHORT_ME1 return paygrade //*****************************************************************************************************/ @@ -285,7 +285,7 @@ ) assignment = JOB_ORDNANCE_TECH rank = JOB_ORDNANCE_TECH - paygrade = "ME2" + paygrade = PAY_SHORT_ME2 role_comm_title = "OT" skills = /datum/skills/OT @@ -326,7 +326,7 @@ ) assignment = JOB_CHIEF_REQUISITION rank = JOB_CHIEF_REQUISITION - paygrade = "ME7" + paygrade = PAY_SHORT_ME7 role_comm_title = "QM" minimum_age = 27 skills = /datum/skills/RO @@ -359,7 +359,7 @@ access = list(ACCESS_MARINE_CARGO, ACCESS_MARINE_PREP) assignment = JOB_CARGO_TECH rank = JOB_CARGO_TECH - paygrade = "ME2" + paygrade = PAY_SHORT_ME2 role_comm_title = "CT" skills = /datum/skills/CT @@ -384,7 +384,7 @@ /datum/equipment_preset/uscm_ship/cargo/load_rank(mob/living/carbon/human/new_human) if(new_human.client) if(get_job_playtime(new_human.client, rank) < JOB_PLAYTIME_TIER_1) - return "ME1" + return PAY_SHORT_ME1 return paygrade //*****************************************************************************************************/ @@ -396,7 +396,7 @@ idtype = /obj/item/card/id/gold assignment = JOB_CO rank = JOB_CO - paygrade = "MO4" + paygrade = PAY_SHORT_MO4 role_comm_title = "CO" minimum_age = 30 skills = /datum/skills/commander @@ -469,7 +469,7 @@ idtype = /obj/item/card/id/gold/council rank = JOB_CO - paygrade = "MO5" + paygrade = PAY_SHORT_MO5 role_comm_title = "CO" minimum_age = 35 @@ -488,7 +488,7 @@ /datum/equipment_preset/uscm_ship/commander/council/plus name = "USCM Commanding Officer (CO++)" idtype = /obj/item/card/id/general - paygrade = "MO6" + paygrade = PAY_SHORT_MO6 /datum/equipment_preset/uscm_ship/commander/council/plus/load_gear(mob/living/carbon/human/new_human) new_human.equip_to_slot_or_del(new /obj/item/clothing/head/beret/marine/commander/councilchief(new_human), WEAR_HEAD) @@ -503,7 +503,7 @@ idtype = /obj/item/card/id/silver assignment = JOB_XO rank = JOB_XO - paygrade = "MO3" + paygrade = PAY_SHORT_MO3 role_comm_title = "XO" minimum_age = 35 skills = /datum/skills/XO @@ -542,7 +542,7 @@ access = list(ACCESS_MARINE_COMMAND, ACCESS_MARINE_DROPSHIP, ACCESS_MARINE_DATABASE, ACCESS_MARINE_MEDBAY) assignment = JOB_SO rank = JOB_SO - paygrade = "MO1" + paygrade = PAY_SHORT_MO1 role_comm_title = "SO" minimum_age = 25 skills = /datum/skills/SO @@ -575,7 +575,7 @@ access assignment = JOB_SEA rank = JOB_SEA - paygrade = "ME7" + paygrade = PAY_SHORT_ME7 role_comm_title = "SEA" minimum_age = 40 skills = /datum/skills/SEA @@ -619,7 +619,7 @@ idtype = /obj/item/card/id/silver assignment = JOB_AUXILIARY_OFFICER rank = JOB_AUXILIARY_OFFICER - paygrade = "MO2" + paygrade = PAY_SHORT_MO2 role_comm_title = "ASO" minimum_age = 27 skills = /datum/skills/auxiliary_officer @@ -678,7 +678,7 @@ access = list(ACCESS_MARINE_COMMAND, ACCESS_MARINE_DROPSHIP, ACCESS_MARINE_PILOT) assignment = JOB_PILOT rank = JOB_PILOT - paygrade = "MO1" + paygrade = PAY_SHORT_MO1 role_comm_title = "DP" skills = /datum/skills/pilot @@ -728,7 +728,7 @@ access = list(ACCESS_MARINE_COMMAND, ACCESS_MARINE_DROPSHIP, ACCESS_MARINE_PILOT) assignment = JOB_DROPSHIP_CREW_CHIEF rank = JOB_DROPSHIP_CREW_CHIEF - paygrade = "ME5" + paygrade = PAY_SHORT_ME5 role_comm_title = "DCC" skills = /datum/skills/crew_chief @@ -778,7 +778,7 @@ access = list(ACCESS_MARINE_MEDBAY, ACCESS_MARINE_CHEMISTRY, ACCESS_MARINE_MORGUE) assignment = "USCM Officer" rank = "USCM Officer" - paygrade = "MO3" + paygrade = PAY_SHORT_MO3 role_comm_title = "Cpt" minimum_age = 40 skills = /datum/skills/commander @@ -818,7 +818,7 @@ access = list(ACCESS_MARINE_KITCHEN) assignment = JOB_MESS_SERGEANT rank = JOB_MESS_SERGEANT - paygrade = "ME2" + paygrade = PAY_SHORT_ME2 role_comm_title = "MST" skills = /datum/skills/mess_technician @@ -844,5 +844,5 @@ /datum/equipment_preset/uscm_ship/chef/load_rank(mob/living/carbon/human/new_human) if(new_human.client) if(get_job_playtime(new_human.client, rank) < JOB_PLAYTIME_TIER_1) - return "ME1" + return PAY_SHORT_ME1 return paygrade diff --git a/code/modules/gear_presets/whiteout.dm b/code/modules/gear_presets/whiteout.dm index 0f367b57e9e2..62b6d5db8008 100644 --- a/code/modules/gear_presets/whiteout.dm +++ b/code/modules/gear_presets/whiteout.dm @@ -9,7 +9,7 @@ languages = list(LANGUAGE_ENGLISH, LANGUAGE_JAPANESE, LANGUAGE_CHINESE, LANGUAGE_RUSSIAN, LANGUAGE_GERMAN, LANGUAGE_SPANISH, LANGUAGE_YAUTJA, LANGUAGE_XENOMORPH, LANGUAGE_TSL) //Synths after all. skills = /datum/skills/everything //They are Synths, programmed for Everything. idtype = /obj/item/card/id/pmc/ds - paygrade = "O" + paygrade = PAY_SHORT_OPR /datum/equipment_preset/pmc/w_y_whiteout/New() . = ..() diff --git a/code/modules/gear_presets/wo.dm b/code/modules/gear_presets/wo.dm index acc795dc6882..884b865bce11 100644 --- a/code/modules/gear_presets/wo.dm +++ b/code/modules/gear_presets/wo.dm @@ -17,7 +17,7 @@ assignment = JOB_WO_CO rank = JOB_WO_CO - paygrade = "MO2" + paygrade = PAY_SHORT_MO2 role_comm_title = "CDR" skills = /datum/skills/commander idtype = /obj/item/card/id/gold @@ -96,7 +96,7 @@ assignment = JOB_WO_XO rank = JOB_WO_XO - paygrade = "MO1" + paygrade = PAY_SHORT_MO1 role_comm_title = "LCDR" skills = /datum/skills/XO idtype = /obj/item/card/id/silver @@ -140,7 +140,7 @@ access = list(ACCESS_MARINE_BRIG, ACCESS_MARINE_COMMAND, ACCESS_MARINE_DROPSHIP, ACCESS_MARINE_DATABASE, ACCESS_MARINE_PREP, ACCESS_MARINE_CMP, ACCESS_MARINE_MEDBAY) assignment = JOB_WO_CHIEF_POLICE rank = JOB_WO_CHIEF_POLICE - paygrade = "ME5" + paygrade = PAY_SHORT_ME5 role_comm_title = "HGSL" skills = /datum/skills/honor_guard/lead idtype = /obj/item/card/id/silver @@ -176,7 +176,7 @@ access = list(ACCESS_MARINE_COMMAND, ACCESS_MARINE_BRIG, ACCESS_MARINE_DROPSHIP, ACCESS_MARINE_DATABASE) assignment = JOB_WO_SO rank = JOB_WO_SO - paygrade = "ME4" + paygrade = PAY_SHORT_ME4 role_comm_title = "VHG" skills = /datum/skills/honor_guard/vet idtype = /obj/item/card/id/silver @@ -218,7 +218,7 @@ access = list(ACCESS_MARINE_COMMAND, ACCESS_MARINE_DROPSHIP, ACCESS_MARINE_DATABASE) assignment = JOB_WO_CREWMAN rank = JOB_WO_CREWMAN - paygrade = "ME3" + paygrade = PAY_SHORT_ME3 role_comm_title = "HGS" skills = /datum/skills/honor_guard/spec idtype = /obj/item/card/id/gold @@ -258,7 +258,7 @@ access = list(ACCESS_MARINE_BRIG, ACCESS_MARINE_COMMAND, ACCESS_MARINE_DROPSHIP, ACCESS_MARINE_DATABASE, ACCESS_MARINE_PREP, ACCESS_MARINE_MEDBAY) assignment = JOB_WO_POLICE rank = JOB_WO_POLICE - paygrade = "ME2" + paygrade = PAY_SHORT_ME2 role_comm_title = "HG" skills = /datum/skills/honor_guard @@ -292,7 +292,7 @@ access = list(ACCESS_MARINE_COMMAND, ACCESS_MARINE_DROPSHIP, ACCESS_MARINE_PILOT) assignment = JOB_WO_PILOT rank = JOB_WO_PILOT - paygrade = "ME3" + paygrade = PAY_SHORT_ME3 role_comm_title = "MC" skills = /datum/skills/mortar_crew @@ -327,7 +327,7 @@ access = list(ACCESS_MARINE_CARGO, ACCESS_MARINE_RO, ACCESS_MARINE_COMMAND) assignment = JOB_WO_CHIEF_REQUISITION rank = JOB_WO_CHIEF_REQUISITION - paygrade = "ME8" + paygrade = PAY_SHORT_ME8 role_comm_title = "QM" skills = /datum/skills/RO idtype = /obj/item/card/id/silver @@ -357,7 +357,7 @@ access = list(ACCESS_MARINE_ENGINEERING, ACCESS_CIVILIAN_ENGINEERING, ACCESS_MARINE_CARGO) assignment = JOB_WO_REQUISITION rank = JOB_WO_REQUISITION - paygrade = "ME4" + paygrade = PAY_SHORT_ME4 role_comm_title = "BCL" skills = /datum/skills/CE idtype = /obj/item/card/id @@ -389,7 +389,7 @@ access = list(ACCESS_MARINE_CMO, ACCESS_MARINE_MEDBAY, ACCESS_MARINE_RESEARCH, ACCESS_MARINE_COMMAND, ACCESS_MARINE_CHEMISTRY, ACCESS_MARINE_MORGUE) assignment = JOB_WO_CMO rank = JOB_WO_CMO - paygrade = "CCMO" + paygrade = PAY_SHORT_CCMO role_comm_title = "HS" skills = /datum/skills/CMO idtype = /obj/item/card/id/silver @@ -432,7 +432,7 @@ access = list(ACCESS_MARINE_MEDBAY, ACCESS_MARINE_CHEMISTRY, ACCESS_MARINE_MORGUE) assignment = JOB_WO_DOCTOR rank = JOB_WO_DOCTOR - paygrade = "CD" + paygrade = PAY_SHORT_CDOC role_comm_title = "Doc" skills = /datum/skills/doctor idtype = /obj/item/card/id @@ -472,7 +472,7 @@ access = list(ACCESS_MARINE_MEDBAY, ACCESS_MARINE_RESEARCH, ACCESS_MARINE_CHEMISTRY, ACCESS_MARINE_MORGUE) assignment = JOB_WO_RESEARCHER rank = JOB_WO_RESEARCHER - paygrade = "CD" + paygrade = PAY_SHORT_CDOC role_comm_title = "Chem" skills = /datum/skills/researcher idtype = /obj/item/card/id @@ -512,7 +512,7 @@ access = list(ACCESS_MARINE_CE, ACCESS_MARINE_ENGINEERING, ACCESS_MARINE_COMMAND, ACCESS_CIVILIAN_ENGINEERING, ACCESS_MARINE_DATABASE) assignment = JOB_WO_CHIEF_ENGINEER rank = JOB_WO_CHIEF_ENGINEER - paygrade = "ME5" + paygrade = PAY_SHORT_ME5 role_comm_title = "BCM" skills = /datum/skills/CE idtype = /obj/item/card/id/silver @@ -546,7 +546,7 @@ access = list(ACCESS_MARINE_CE, ACCESS_MARINE_ENGINEERING, ACCESS_MARINE_COMMAND, ACCESS_CIVILIAN_ENGINEERING) assignment = JOB_WO_ORDNANCE_TECH rank = JOB_WO_ORDNANCE_TECH - paygrade = "ME4" + paygrade = PAY_SHORT_ME4 role_comm_title = "BC" skills = /datum/skills/OT idtype = /obj/item/card/id @@ -579,7 +579,7 @@ assignment = JOB_WO_CORPORATE_LIAISON rank = JOB_WO_CORPORATE_LIAISON - paygrade = "WYC2" + paygrade = PAY_SHORT_WYC2 role_comm_title = "PRESS" skills = /datum/skills/civilian idtype = /obj/item/card/id/silver/cl @@ -623,7 +623,7 @@ access = list(ACCESS_MARINE_PREP, ACCESS_MARINE_LEADER, ACCESS_MARINE_DROPSHIP) assignment = JOB_SQUAD_LEADER rank = JOB_SQUAD_LEADER - paygrade = "ME5" + paygrade = PAY_SHORT_ME5 role_comm_title = "SL" skills = /datum/skills/SL @@ -658,7 +658,7 @@ access = list(ACCESS_MARINE_PREP, ACCESS_MARINE_SPECPREP) assignment = JOB_SQUAD_SPECIALIST rank = JOB_SQUAD_SPECIALIST - paygrade = "ME3" + paygrade = PAY_SHORT_ME3 role_comm_title = "Spc" skills = /datum/skills/specialist @@ -693,7 +693,7 @@ access = list(ACCESS_MARINE_PREP, ACCESS_MARINE_SMARTPREP) assignment = JOB_SQUAD_SMARTGUN rank = JOB_SQUAD_SMARTGUN - paygrade = "ME3" + paygrade = PAY_SHORT_ME3 role_comm_title = "SG" skills = /datum/skills/smartgunner @@ -717,7 +717,7 @@ access = list(ACCESS_MARINE_PREP, ACCESS_MARINE_ENGPREP, ACCESS_CIVILIAN_ENGINEERING) assignment = JOB_SQUAD_ENGI rank = JOB_SQUAD_ENGI - paygrade = "ME3" + paygrade = PAY_SHORT_ME3 role_comm_title = "ComTech" skills = /datum/skills/combat_engineer @@ -751,7 +751,7 @@ access = list(ACCESS_MARINE_PREP, ACCESS_MARINE_MEDPREP, ACCESS_MARINE_MEDBAY) assignment = JOB_SQUAD_MEDIC rank = JOB_SQUAD_MEDIC - paygrade = "ME3" + paygrade = PAY_SHORT_ME3 role_comm_title = "HM" skills = /datum/skills/combat_medic @@ -789,7 +789,7 @@ access = list(ACCESS_MARINE_PREP) assignment = JOB_SQUAD_MARINE rank = JOB_SQUAD_MARINE - paygrade = "ME2" + paygrade = PAY_SHORT_ME2 role_comm_title = "RFN" skills = /datum/skills/pfc diff --git a/code/modules/gear_presets/wy.dm b/code/modules/gear_presets/wy.dm index d5b5194401bd..0b63c76b59d0 100644 --- a/code/modules/gear_presets/wy.dm +++ b/code/modules/gear_presets/wy.dm @@ -1,6 +1,6 @@ /datum/equipment_preset/wy name = "WY" - paygrade = "WYC1" + paygrade = PAY_SHORT_WYC1 faction = FACTION_WY rank = FACTION_WY @@ -29,7 +29,7 @@ flags = EQUIPMENT_PRESET_EXTRA assignment = JOB_TRAINEE rank = JOB_TRAINEE - paygrade = "WYC1" + paygrade = PAY_SHORT_WYC1 /datum/equipment_preset/wy/trainee/load_gear(mob/living/carbon/human/new_human) new_human.equip_to_slot_or_del(new /obj/item/clothing/under/suit_jacket/trainee(new_human), WEAR_BODY) @@ -40,35 +40,35 @@ flags = EQUIPMENT_PRESET_EXTRA assignment = JOB_JUNIOR_EXECUTIVE rank = JOB_JUNIOR_EXECUTIVE - paygrade = "WYC2" + paygrade = PAY_SHORT_WYC2 /datum/equipment_preset/wy/exec name = "Corporate - C - Executive" flags = EQUIPMENT_PRESET_EXTRA assignment = JOB_EXECUTIVE rank = JOB_EXECUTIVE - paygrade = "WYC3" + paygrade = PAY_SHORT_WYC3 /datum/equipment_preset/wy/senior_exec name = "Corporate - D - Senior Executive" flags = EQUIPMENT_PRESET_EXTRA assignment = JOB_SENIOR_EXECUTIVE rank = JOB_SENIOR_EXECUTIVE - paygrade = "WYC4" + paygrade = PAY_SHORT_WYC4 /datum/equipment_preset/wy/exec_spec name = "Corporate - E - Executive Specialist" flags = EQUIPMENT_PRESET_EXTRA assignment = JOB_EXECUTIVE_SPECIALIST rank = JOB_EXECUTIVE_SPECIALIST - paygrade = "WYC5" + paygrade = PAY_SHORT_WYC5 /datum/equipment_preset/wy/exec_supervisor name = "Corporate - F - Executive Supervisor" flags = EQUIPMENT_PRESET_EXTRA assignment = JOB_EXECUTIVE_SUPERVISOR rank = JOB_EXECUTIVE_SUPERVISOR - paygrade = "WYC6" + paygrade = PAY_SHORT_WYC6 /datum/equipment_preset/wy/manager skills = /datum/skills/civilian/manager @@ -91,21 +91,21 @@ flags = EQUIPMENT_PRESET_EXTRA assignment = JOB_ASSISTANT_MANAGER rank = JOB_ASSISTANT_MANAGER - paygrade = "WYC7" + paygrade = PAY_SHORT_WYC7 /datum/equipment_preset/wy/manager/division_manager name = "Corporate - H - Division Manager" flags = EQUIPMENT_PRESET_EXTRA assignment = JOB_DIVISION_MANAGER rank = JOB_DIVISION_MANAGER - paygrade = "WYC8" + paygrade = PAY_SHORT_WYC8 /datum/equipment_preset/wy/manager/chief_executive name = "Corporate - I - Chief Executive" flags = EQUIPMENT_PRESET_EXTRA assignment = JOB_CHIEF_EXECUTIVE rank = JOB_CHIEF_EXECUTIVE - paygrade = "WYC9" + paygrade = PAY_SHORT_WYC9 /datum/equipment_preset/wy/manager/chief_executive/New() . = ..() @@ -116,7 +116,7 @@ flags = EQUIPMENT_PRESET_EXTRA assignment = JOB_DIRECTOR rank = JOB_DIRECTOR - paygrade = "WYC10" + paygrade = PAY_SHORT_WYC10 skills = /datum/skills/civilian/manager/director headset_type = /obj/item/device/radio/headset/distress/pmc/command/director diff --git a/code/modules/gear_presets/wy_goons.dm b/code/modules/gear_presets/wy_goons.dm index 1be8cb990255..a7c0dad679ee 100644 --- a/code/modules/gear_presets/wy_goons.dm +++ b/code/modules/gear_presets/wy_goons.dm @@ -61,7 +61,7 @@ assignment = JOB_WY_GOON rank = JOB_WY_GOON - paygrade = "WEY-GOON" + paygrade = PAY_SHORT_CPO skills = /datum/skills/MP /datum/equipment_preset/goon/standard/load_gear(mob/living/carbon/human/new_human) @@ -94,7 +94,7 @@ assignment = JOB_WY_GOON_LEAD rank = JOB_WY_GOON_LEAD - paygrade = "WEY-GOON-L" + paygrade = PAY_SHORT_CSPO skills = /datum/skills/MP /datum/equipment_preset/goon/lead/New() @@ -130,7 +130,7 @@ assignment = JOB_WY_GOON_RESEARCHER rank = JOB_WY_GOON_RESEARCHER - paygrade = "CCMO" + paygrade = PAY_SHORT_CCMO skills = /datum/skills/researcher /datum/equipment_preset/goon/researcher/load_gear(mob/living/carbon/human/new_human) diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index 887313eb4db9..430f959a7718 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -758,12 +758,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp if(!tx || !ty || !tz) return following = null - spawn(0) - // To stop the ghost flickering. - x = tx - y = ty - z = tz - sleep(15) + forceMove(locate(tx, ty, tz)) /mob/dead/observer/verb/dead_teleport_mob() //Moves the ghost instead of just changing the ghosts's eye -Nodrak set category = "Ghost" diff --git a/code/modules/mob/living/carbon/human/human_attackhand.dm b/code/modules/mob/living/carbon/human/human_attackhand.dm index 2bb113d67739..354d9c759f23 100644 --- a/code/modules/mob/living/carbon/human/human_attackhand.dm +++ b/code/modules/mob/living/carbon/human/human_attackhand.dm @@ -155,7 +155,7 @@ return held_weapon.afterattack(target,src) var/disarm_chance = rand(1, 100) - var/attacker_skill_level = skills && attacking_mob.skills ? skills.get_skill_level(SKILL_CQC) : SKILL_CQC_MAX // No skills, so assume max + var/attacker_skill_level = attacking_mob.skills ? attacking_mob.skills.get_skill_level(SKILL_CQC) : SKILL_CQC_MAX // No skills, so assume max var/defender_skill_level = skills ? skills.get_skill_level(SKILL_CQC) : SKILL_CQC_MAX // No skills, so assume max disarm_chance -= 5 * attacker_skill_level disarm_chance += 5 * defender_skill_level diff --git a/code/modules/mob/living/carbon/human/inventory.dm b/code/modules/mob/living/carbon/human/inventory.dm index b86a6a625f57..b54f03e2ce7d 100644 --- a/code/modules/mob/living/carbon/human/inventory.dm +++ b/code/modules/mob/living/carbon/human/inventory.dm @@ -550,6 +550,7 @@ to_chat(src, SPAN_WARNING("You can't put \the [interact_item.name] on [target_mob]!")) return visible_message(SPAN_NOTICE("[src] tries to put \the [interact_item.name] on [target_mob]."), null, null, 5) + log_interact(src, target_mob, "[key_name(src)] attempted to put [interact_item.name] on [key_name(target_mob)]'s ([slot_to_process]).") if(do_after(src, get_strip_delay(src, target_mob), INTERRUPT_ALL, BUSY_ICON_GENERIC, target_mob, INTERRUPT_MOVED, BUSY_ICON_GENERIC)) if(interact_item == get_active_hand() && !target_mob.get_item_by_slot(slot_to_process) && Adjacent(target_mob)) if(interact_item.flags_item & WIELDED) //to prevent re-wielding it during the do_after @@ -558,6 +559,7 @@ drop_inv_item_on_ground(interact_item) if(interact_item && !QDELETED(interact_item)) //Might be self-deleted? target_mob.equip_to_slot_if_possible(interact_item, slot_to_process, 1, 0, 1, 1) + log_interact(src, target_mob, "[key_name(src)] put [interact_item.name] on [key_name(target_mob)]'s ([slot_to_process]) successfully.") if(ishuman(target_mob) && target_mob.stat == DEAD) var/mob/living/carbon/human/human_target = target_mob human_target.disable_lights() // take that powergamers -spookydonut diff --git a/code/modules/mob/living/carbon/xenomorph/Abilities.dm b/code/modules/mob/living/carbon/xenomorph/Abilities.dm index 0a6e0ff2ca26..cb46b3c6cc26 100644 --- a/code/modules/mob/living/carbon/xenomorph/Abilities.dm +++ b/code/modules/mob/living/carbon/xenomorph/Abilities.dm @@ -75,6 +75,7 @@ X.tunnel_delay = 1 addtimer(CALLBACK(src, PROC_REF(cooldown_end)), 4 MINUTES) var/msg = strip_html(input("Add a description to the tunnel:", "Tunnel Description") as text|null) + msg = replace_non_alphanumeric_plus(msg) var/description if(msg) description = msg diff --git a/code/modules/mob/living/carbon/xenomorph/Evolution.dm b/code/modules/mob/living/carbon/xenomorph/Evolution.dm index 63aa7b09a633..af6be8265cc0 100644 --- a/code/modules/mob/living/carbon/xenomorph/Evolution.dm +++ b/code/modules/mob/living/carbon/xenomorph/Evolution.dm @@ -26,8 +26,15 @@ if(!length(castes_available)) to_chat(src, SPAN_WARNING("The Hive is not capable of supporting any castes you can evolve to yet.")) return + var/castepick + if((client.prefs && client.prefs.no_radials_preference) || !hive.evolution_menu_images) + castepick = tgui_input_list(usr, "You are growing into a beautiful alien! It is time to choose a caste.", "Evolve", castes_available, theme="hive_status") + else + var/list/fancy_caste_list = list() + for(var/caste in castes_available) + fancy_caste_list[caste] = hive.evolution_menu_images[caste] - var/castepick = tgui_input_list(usr, "You are growing into a beautiful alien! It is time to choose a caste.", "Evolve", castes_available, theme="hive_status") + castepick = show_radial_menu(src, src.client?.eye, fancy_caste_list) if(!castepick) //Changed my mind return diff --git a/code/modules/mob/living/carbon/xenomorph/XenoProcs.dm b/code/modules/mob/living/carbon/xenomorph/XenoProcs.dm index 84eceb028349..225a5ac91184 100644 --- a/code/modules/mob/living/carbon/xenomorph/XenoProcs.dm +++ b/code/modules/mob/living/carbon/xenomorph/XenoProcs.dm @@ -622,7 +622,7 @@ target.xenos_tracking |= src tracked_marker = target to_chat(src, SPAN_XENONOTICE("You start tracking the [target.mark_meaning.name] resin mark.")) - to_chat(src, SPAN_INFO("shift click the compass to watch the mark, alt click to stop tracking")) + to_chat(src, SPAN_INFO("Shift click the compass to watch the mark, alt click to stop tracking")) /mob/living/carbon/xenomorph/proc/stop_tracking_resin_mark(destroyed, silent = FALSE) //tracked_marker shouldnt be nulled outside this PROC!! >:C if(QDELETED(src)) diff --git a/code/modules/mob/living/carbon/xenomorph/Xenomorph.dm b/code/modules/mob/living/carbon/xenomorph/Xenomorph.dm index 645ade04ea4f..cc0065733e21 100644 --- a/code/modules/mob/living/carbon/xenomorph/Xenomorph.dm +++ b/code/modules/mob/living/carbon/xenomorph/Xenomorph.dm @@ -552,22 +552,16 @@ if(caste.fire_immunity & FIRE_IMMUNITY_XENO_FRENZY) . |= COMPONENT_XENO_FRENZY +//Off-load this proc so it can be called freely +//Since Xenos change names like they change shoes, we need somewhere to hammer in all those legos +//We set their name first, then update their real_name AND their mind name //Off-load this proc so it can be called freely //Since Xenos change names like they change shoes, we need somewhere to hammer in all those legos //We set their name first, then update their real_name AND their mind name /mob/living/carbon/xenomorph/proc/generate_name() //We don't have a nicknumber yet, assign one to stick with us if(!nicknumber) - var/tempnumber = rand(1, 999) - var/list/numberlist = list() - for(var/mob/living/carbon/xenomorph/X in GLOB.xeno_mob_list) - numberlist += X.nicknumber - - while(tempnumber in numberlist) - tempnumber = rand(1, 999) - - nicknumber = tempnumber - + generate_and_set_nicknumber() // Even if we don't have the hive datum we usually still have the hive number var/datum/hive_status/in_hive = hive if(!in_hive) @@ -576,12 +570,10 @@ //Im putting this in here, because this proc gets called when a player inhabits a SSD xeno and it needs to go somewhere (sorry) hud_set_marks() - handle_name(in_hive) - -/mob/living/carbon/xenomorph/proc/handle_name(datum/hive_status/in_hive) var/name_prefix = in_hive.prefix var/name_client_prefix = "" var/name_client_postfix = "" + var/number_decorator = "" if(client) name_client_prefix = "[(client.xeno_prefix||client.xeno_postfix) ? client.xeno_prefix : "XX"]-" name_client_postfix = client.xeno_postfix ? ("-"+client.xeno_postfix) : "" @@ -592,9 +584,12 @@ var/age_display = show_age_prefix ? age_prefix : "" var/name_display = "" + // Rare easter egg + if(nicknumber == 666) + number_decorator = "Infernal " if(show_name_numbers) name_display = show_only_numbers ? " ([nicknumber])" : " ([name_client_prefix][nicknumber][name_client_postfix])" - name = "[name_prefix][age_display][caste.display_name || caste.caste_type][name_display]" + name = "[name_prefix][number_decorator][age_display][caste.display_name || caste.caste_type][name_display]" //Update linked data so they show up properly change_real_name(src, name) @@ -814,23 +809,17 @@ /mob/living/carbon/xenomorph/proc/set_hive_and_update(new_hivenumber = XENO_HIVE_NORMAL) var/datum/hive_status/new_hive = GLOB.hive_datum[new_hivenumber] if(!new_hive) - return + return FALSE - for(var/T in _status_traits) // They can't keep getting away with this!!! - REMOVE_TRAIT(src, T, TRAIT_SOURCE_HIVE) + for(var/trait in _status_traits) // They can't keep getting away with this!!! + REMOVE_TRAIT(src, trait, TRAIT_SOURCE_HIVE) new_hive.add_xeno(src) - for(var/T in new_hive.hive_inherant_traits) - ADD_TRAIT(src, T, TRAIT_SOURCE_HIVE) + for(var/trait in new_hive.hive_inherant_traits) + ADD_TRAIT(src, trait, TRAIT_SOURCE_HIVE) - if(istype(src, /mob/living/carbon/xenomorph/larva)) - var/mob/living/carbon/xenomorph/larva/L = src - L.update_icons() // larva renaming done differently - else - generate_name() - if(istype(src, /mob/living/carbon/xenomorph/queen)) - update_living_queens() + generate_name() lock_evolve = FALSE banished = FALSE @@ -841,6 +830,9 @@ // Update the hive status UI new_hive.hive_ui.update_all_xeno_data() + return TRUE + + //*********************************************************// //********************Mutator functions********************// //*********************************************************// @@ -1113,3 +1105,16 @@ . = ..() if(!resting) // !resting because we dont wanna prematurely update wounds if they're just trying to rest update_wounds() + +///Generate a new unused nicknumber for the current hive, if hive doesn't exist return 0 +/mob/living/carbon/xenomorph/proc/generate_and_set_nicknumber() + if(!hive) + //If hive doesn't exist make it 0 + nicknumber = 0 + return + var/datum/hive_status/hive_status = hive + if(length(hive_status.available_nicknumbers)) + nicknumber = pick_n_take(hive_status.available_nicknumbers) + else + //If we somehow use all 999 numbers fallback on 0 + nicknumber = 0 diff --git a/code/modules/mob/living/carbon/xenomorph/abilities/burrower/burrower_powers.dm b/code/modules/mob/living/carbon/xenomorph/abilities/burrower/burrower_powers.dm index 6a2071fafc3b..3276705ce9b7 100644 --- a/code/modules/mob/living/carbon/xenomorph/abilities/burrower/burrower_powers.dm +++ b/code/modules/mob/living/carbon/xenomorph/abilities/burrower/burrower_powers.dm @@ -177,6 +177,7 @@ return var/new_name = strip_html(input("Change the description of the tunnel:", "Tunnel Description") as text|null) + new_name = replace_non_alphanumeric_plus(new_name) if(new_name) new_name = "[new_name] ([get_area_name(T)])" log_admin("[key_name(src)] has renamed the tunnel \"[T.tunnel_desc]\" as \"[new_name]\".") diff --git a/code/modules/mob/living/carbon/xenomorph/castes/Larva.dm b/code/modules/mob/living/carbon/xenomorph/castes/Larva.dm index 816e6020c30f..6d5c6699b929 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/Larva.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/Larva.dm @@ -50,15 +50,22 @@ var/burrowable = TRUE //Can it be safely burrowed if it has no player? var/state_override + var/is_bloody = TRUE //We're still "bloody" icon_xeno = 'icons/mob/xenos/larva.dmi' icon_xenonid = 'icons/mob/xenonids/larva.dmi' -/mob/living/carbon/xenomorph/larva/initialize_pass_flags(datum/pass_flags_container/PF) +/mob/living/carbon/xenomorph/larva/Life() + if(is_bloody && (evolution_stored >= evolution_threshold / 2)) //We're no longer bloody so update our name... + generate_name() + is_bloody = FALSE + return ..() + +/mob/living/carbon/xenomorph/larva/initialize_pass_flags(datum/pass_flags_container/pass_flags) ..() - if (PF) - PF.flags_pass = PASS_MOB_THRU|PASS_FLAGS_CRAWLER - PF.flags_can_pass_all = PASS_ALL^PASS_OVER_THROW_ITEM + if (pass_flags) + pass_flags.flags_pass = PASS_MOB_THRU|PASS_FLAGS_CRAWLER + pass_flags.flags_can_pass_all = PASS_ALL^PASS_OVER_THROW_ITEM /mob/living/carbon/xenomorph/larva/corrupted hivenumber = XENO_HIVE_CORRUPTED @@ -101,29 +108,10 @@ //Larva code is just a mess, so let's get it over with /mob/living/carbon/xenomorph/larva/update_icons() - var/progress = "" //Naming convention, three different names var/state = "" //Icon convention, two different sprite sets - var/name_prefix = "" - - if(hive) - name_prefix = hive.prefix - color = hive.color - - if(evolution_stored >= evolution_threshold) - progress = "Mature " - else if(evolution_stored < evolution_threshold / 2) //We're still bloody - progress = "Bloody " + if(evolution_stored < evolution_threshold / 2) //We're still bloody state = "Bloody " - else - progress = "" - - name = "[name_prefix][progress]Larva ([nicknumber])" - - if(istype(src,/mob/living/carbon/xenomorph/larva/predalien)) state = "Predalien " //Sort of a hack. - - //Update linked data so they show up properly - change_real_name(src, name) if(stat == DEAD) icon_state = "[state_override || state]Larva Dead" @@ -141,16 +129,13 @@ /mob/living/carbon/xenomorph/larva/alter_ghost(mob/dead/observer/ghost) ghost.icon_state = "[caste.caste_type]" -/mob/living/carbon/xenomorph/larva/handle_name() - return - /mob/living/carbon/xenomorph/larva/start_pulling(atom/movable/AM) return /mob/living/carbon/xenomorph/larva/pull_response(mob/puller) return TRUE -/mob/living/carbon/xenomorph/larva/UnarmedAttack(atom/A, proximity, click_parameters, tile_attack, ignores_resin = FALSE) +/mob/living/carbon/xenomorph/larva/UnarmedAttack(atom/atom, proximity, click_parameters, tile_attack, ignores_resin = FALSE) a_intent = INTENT_HELP //Forces help intent for all interactions. if(!caste) return FALSE @@ -158,21 +143,50 @@ if(body_position) //No attacks while laying down return FALSE - A.attack_larva(src) + atom.attack_larva(src) xeno_attack_delay(src) //Adds some lag to the 'attack' -/proc/spawn_hivenumber_larva(atom/A, hivenumber) - if(!GLOB.hive_datum[hivenumber] || isnull(A)) +/proc/spawn_hivenumber_larva(atom/atom, hivenumber) + if(!GLOB.hive_datum[hivenumber] || isnull(atom)) return - var/mob/living/carbon/xenomorph/larva/L = new /mob/living/carbon/xenomorph/larva(A) + var/mob/living/carbon/xenomorph/larva/larva = new /mob/living/carbon/xenomorph/larva(atom) - L.set_hive_and_update(hivenumber) + larva.set_hive_and_update(hivenumber) - return L + return larva /mob/living/carbon/xenomorph/larva/emote(act, m_type, message, intentional, force_silence) playsound(loc, "alien_roar_larva", 15) /mob/living/carbon/xenomorph/larva/is_xeno_grabbable() return TRUE + +/* +Larva name generation, set nicknumber = (number between 1 & 999) which isn't taken by any other xenos in GLOB.xeno_mob_list if doesn't already exist. +Also handles the "Mature / Bloody naming convention. Call this to update the name." +*/ +/mob/living/carbon/xenomorph/larva/generate_name() + if(!nicknumber) + generate_and_set_nicknumber() + + var/progress = "" //Naming convention, three different names + var/name_prefix = "" // Prefix for hive + + if(hive) + name_prefix = hive.prefix + color = hive.color + + if(evolution_stored >= evolution_threshold) + progress = "Mature " + else if(evolution_stored < evolution_threshold / 2) //We're still bloody + progress = "Bloody " + + name = "[name_prefix][progress]Larva ([nicknumber])" + + //Update linked data so they show up properly + change_real_name(src, name) + //Update the hive status UI + if(hive) + var/datum/hive_status/hive_status = hive + hive_status.hive_ui.update_xeno_info() diff --git a/code/modules/mob/living/carbon/xenomorph/castes/Queen.dm b/code/modules/mob/living/carbon/xenomorph/castes/Queen.dm index ceedff03f2aa..63802d5023c2 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/Queen.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/Queen.dm @@ -410,8 +410,10 @@ AddComponent(/datum/component/footstep, 2 , 35, 11, 4, "alien_footstep_large") -/mob/living/carbon/xenomorph/queen/handle_name(datum/hive_status/in_hive) - var/name_prefix = in_hive.prefix +/mob/living/carbon/xenomorph/queen/generate_name() + if(!nicknumber) + generate_and_set_nicknumber() + var/name_prefix = hive.prefix if(queen_aged) age_xeno() switch(age) @@ -440,11 +442,16 @@ name_client_prefix = "[(client.xeno_prefix||client.xeno_postfix) ? client.xeno_prefix : "XX"]-" name_client_postfix = client.xeno_postfix ? ("-"+client.xeno_postfix) : "" full_designation = "[name_client_prefix][nicknumber][name_client_postfix]" - color = in_hive.color + color = hive.color //Update linked data so they show up properly change_real_name(src, name) +/mob/living/carbon/xenomorph/queen/set_hive_and_update(new_hivenumber) + if(!..()) + return FALSE + update_living_queens() + /mob/living/carbon/xenomorph/queen/proc/make_combat_effective() queen_aged = TRUE diff --git a/code/modules/mob/living/carbon/xenomorph/mutators/strains/carrier/eggsac.dm b/code/modules/mob/living/carbon/xenomorph/mutators/strains/carrier/eggsac.dm index 3d032da2fe36..3b321ca259c9 100644 --- a/code/modules/mob/living/carbon/xenomorph/mutators/strains/carrier/eggsac.dm +++ b/code/modules/mob/living/carbon/xenomorph/mutators/strains/carrier/eggsac.dm @@ -63,9 +63,10 @@ /datum/behavior_delegate/carrier_eggsac/on_life() if(length(eggs_sustained) > egg_sustain_cap) var/obj/effect/alien/egg/carrier_egg/my_egg = eggs_sustained[1] - remove_egg_owner(my_egg) - my_egg.start_unstoppable_decay() - to_chat(bound_xeno, SPAN_XENOWARNING("You can only sustain [egg_sustain_cap] eggs off hive weeds! Your oldest placed egg is decaying rapidly.")) + if(my_egg) + remove_egg_owner(my_egg) + my_egg.start_unstoppable_decay() + to_chat(bound_xeno, SPAN_XENOWARNING("You can only sustain [egg_sustain_cap] eggs off hive weeds! Your oldest placed egg is decaying rapidly.")) for(var/obj/effect/alien/egg/carrier_egg/my_egg as anything in eggs_sustained) //Get the distance from us to our sustained egg diff --git a/code/modules/mob/living/carbon/xenomorph/xeno_defines.dm b/code/modules/mob/living/carbon/xenomorph/xeno_defines.dm index 810c8f58666b..a5da9763047d 100644 --- a/code/modules/mob/living/carbon/xenomorph/xeno_defines.dm +++ b/code/modules/mob/living/carbon/xenomorph/xeno_defines.dm @@ -365,6 +365,15 @@ var/datum/tacmap/drawing/xeno/tacmap var/minimap_type = MINIMAP_FLAG_XENO + var/list/available_nicknumbers = list() + + /*Stores the image()'s for the xeno evolution radial menu + To add an image for your caste - add an icon to icons/mob/xenos/radial_xenos.dmi + Icon size should be 32x32, to make them fit within the radial menu border size your icon 22x22 and leave 10px transparent border. + The name of the icon should be the same as the XENO_CASTE_ define for that caste eg. #define XENO_CASTE_DRONE "Drone" + */ + var/static/list/evolution_menu_images + /datum/hive_status/New() mutators.hive = src hive_ui = new(src) @@ -374,11 +383,22 @@ tacmap = new(src, minimap_type) if(!internal_faction) internal_faction = name + for(var/number in 1 to 999) + available_nicknumbers += number if(hivenumber != XENO_HIVE_NORMAL) return + if(!evolution_menu_images) + evolution_menu_images = list() + generate_evo_menu_images() + RegisterSignal(SSdcs, COMSIG_GLOB_POST_SETUP, PROC_REF(post_setup)) +///Generate the image()'s requried for the evolution radial menu. +/datum/hive_status/proc/generate_evo_menu_images() + for(var/datum/caste_datum/caste as anything in subtypesof(/datum/caste_datum)) + evolution_menu_images[initial(caste.caste_type)] = image('icons/mob/xenos/radial_xenos.dmi', initial(caste.caste_type)) + /datum/hive_status/proc/post_setup() SIGNAL_HANDLER diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm index 36ae23587a28..9fa38d1ecb43 100644 --- a/code/modules/mob/living/say.dm +++ b/code/modules/mob/living/say.dm @@ -118,6 +118,13 @@ GLOBAL_LIST_INIT(department_radio_keys, list( listening += M hearturfs += M.locs[1] for(var/obj/O in M.contents) + var/obj/item/clothing/worn_item = O + if((O.flags_atom & USES_HEARING) || ((istype(worn_item) && worn_item.accessories))) + listening_obj |= O + else if(istype(I, /obj/structure/surface)) + var/obj/structure/surface/table = I + hearturfs += table.locs[1] + for(var/obj/O in table.contents) if(O.flags_atom & USES_HEARING) listening_obj |= O else if(istype(I, /obj/)) diff --git a/code/modules/mob/mob_transformation_simple.dm b/code/modules/mob/mob_transformation_simple.dm index 92e46454cc5e..cd76618f3243 100644 --- a/code/modules/mob/mob_transformation_simple.dm +++ b/code/modules/mob/mob_transformation_simple.dm @@ -4,7 +4,7 @@ //Note that this proc does NOT do MMI related stuff! /mob/proc/change_mob_type(new_type = null, turf/location = null, new_name = null as text, delete_old_mob = 0 as num, subspecies) if(istype(src,/mob/new_player)) - to_chat(usr, SPAN_DANGER("cannot convert players who have not entered yet.")) + to_chat(usr, SPAN_DANGER("Cannot convert players who have not entered yet.")) return if(!new_type) @@ -18,7 +18,7 @@ return if( new_type == /mob/new_player ) - to_chat(usr, SPAN_DANGER("cannot convert into a new_player mob type.")) + to_chat(usr, SPAN_DANGER("Cannot convert into a new_player mob type.")) return var/mob/M diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index 2034202144b2..ee99f6836473 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -63,7 +63,7 @@ output += "" if (refresh) close_browser(src, "playersetup") - show_browser(src, output, null, "playersetup", "size=240x[round_start ? 330 : 460];can_close=0;can_minimize=0") + show_browser(src, output, null, "playersetup", "size=240x[round_start ? 360 : 460];can_close=0;can_minimize=0") return /mob/new_player/Topic(href, href_list[]) diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index 258132a112e1..b572b5d9e87b 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -569,6 +569,10 @@ name = "crumpled note" info = "there is cotten candy in the walls" +/obj/item/paper/bigred/lambda + name = "ripped diary entry" + info = "Director Smith's Diary\nEntry Date: 15 December 2181\nToday, I've felt true progress! The XX-121 reproduction program is in full effect, and Administrator Cooper have given us the all clear to continue producing specimens. To think that all this is coming from just that first specimen, a single 'Queen' form... It's grown to almost 5 meters tall and shows no signs of ceasing egg production! These creatures will be the next Synthetic of our time, we'll show those Seegson bastards." + /obj/item/paper/bigred/union name = "Shaft miners union" info = "Today we have had enough of being underpaid and treated like shit for not reaching the higher up's unreasonable quotas of ore. They say this place has a \"sea of valuable ores,\" yet we have been mining for years and are yet to find a single diamond. We have had it, enough is enough. They think they can control everything we do, they thought wrong! We, the oppressed workers, shall rise up against the capitalist dogs in a mutiny and take back our pay by force. \n If they send their dogs here to bust us, we will kill each and every single one of them." diff --git a/code/modules/projectiles/ammo_boxes/handful_boxes.dm b/code/modules/projectiles/ammo_boxes/handful_boxes.dm index 28eab8463011..9ac2aeea8870 100644 --- a/code/modules/projectiles/ammo_boxes/handful_boxes.dm +++ b/code/modules/projectiles/ammo_boxes/handful_boxes.dm @@ -48,6 +48,15 @@ /obj/item/ammo_box/magazine/shotgun/incendiary/empty empty = TRUE +/obj/item/ammo_box/magazine/shotgun/incendiarybuck + name = "\improper shotgun shell box (Incendiary buckshot x 100)" + icon_state = "base_incbuck" + overlay_content = "_incenbuck" + magazine_type = /obj/item/ammo_magazine/shotgun/incendiarybuck + +/obj/item/ammo_box/magazine/shotgun/incendiarybuck/empty + empty = TRUE + /obj/item/ammo_box/magazine/shotgun/beanbag name = "\improper shotgun shell box (Beanbag x 100)" icon_state = "base_bean" diff --git a/code/modules/projectiles/ammo_boxes/magazine_boxes.dm b/code/modules/projectiles/ammo_boxes/magazine_boxes.dm index ff90a6659fb2..6d20dcc75949 100644 --- a/code/modules/projectiles/ammo_boxes/magazine_boxes.dm +++ b/code/modules/projectiles/ammo_boxes/magazine_boxes.dm @@ -286,6 +286,15 @@ /obj/item/ammo_box/magazine/m4a3/hp/empty empty = TRUE +/obj/item/ammo_box/magazine/m4a3/incen + name = "\improper magazine box (Incen M4A3 x 16)" + overlay_ammo_type = "_incen" + overlay_content = "_incen" + magazine_type = /obj/item/ammo_magazine/pistol/incendiary + +/obj/item/ammo_box/magazine/m4a3/incen/empty + empty = TRUE + //-----------------------M44 Revolver Speed Loaders Box----------------------- /obj/item/ammo_box/magazine/m44 @@ -410,3 +419,306 @@ /obj/item/ammo_box/magazine/nailgun/empty empty = TRUE + +//-----------------------M56B Drum Box----------------------- + +/obj/item/ammo_box/magazine/m56b + name = "\improper drum box (M56B x 8)" + icon_state = "base_m56b" + overlay_ammo_type = "_reg_heavy" + overlay_gun_type = "_sg" + overlay_content = "_sg" + magazine_type = /obj/item/ammo_magazine/smartgun + num_of_magazines = 8 + +/obj/item/ammo_box/magazine/m56b/empty + empty = TRUE + +/obj/item/ammo_box/magazine/m56b/dirty + name = "\improper drum box (M56B 'Dirty' x 8)" + overlay_ammo_type = "_red_heavy" + overlay_content = "_sgdirty" + magazine_type = /obj/item/ammo_magazine/smartgun/dirty + +/obj/item/ammo_box/magazine/m56b/dirty/empty + empty = TRUE + +//-----------------------M56D Drum Box----------------------- + +/obj/item/ammo_box/magazine/m56d + name = "\improper drum box (M56D x 8)" + icon_state = "base_m56d" + overlay_ammo_type = "" + overlay_gun_type = "_m56d" + overlay_content = "_m56d" + magazine_type = /obj/item/ammo_magazine/m56d + num_of_magazines = 8 + +/obj/item/ammo_box/magazine/m56d/update_icon() + if(overlays) + overlays.Cut() + overlays += image(icon, icon_state = "[icon_state]_lid") //adding lid + overlays += image(text_markings_icon, icon_state = "text[overlay_gun_type]") //adding text + +/obj/item/ammo_box/magazine/m56d/empty + empty = TRUE + + +//-----------------------M2C Ammo Box----------------------- + +/obj/item/ammo_box/magazine/m2c + name = "\improper ammo box (M2C x 8)" + icon_state = "base_m2c" + overlay_ammo_type = "" + overlay_gun_type = "_m2c" + overlay_content = "_m2c" + magazine_type = /obj/item/ammo_magazine/m2c + num_of_magazines = 8 + +/obj/item/ammo_box/magazine/m2c/update_icon() + if(overlays) + overlays.Cut() + overlays += image(icon, icon_state = "[icon_state]_lid") //adding lid + overlays += image(text_markings_icon, icon_state = "text[overlay_gun_type]") //adding text + +/obj/item/ammo_box/magazine/m2c/empty + empty = TRUE + +//-----------------------M41AE2 Ammo Box----------------------- + +/obj/item/ammo_box/magazine/m41ae2 + name = "\improper magazine (M41AE2 x 8)" + icon_state = "base_m41ae2" + overlay_ammo_type = "_reg_heavy" + overlay_gun_type = "_m41ae2" + overlay_content = "_m41ae2" + magazine_type = /obj/item/ammo_magazine/rifle/lmg + num_of_magazines = 8 + +/obj/item/ammo_box/magazine/m41ae2/empty + empty = TRUE + +/obj/item/ammo_box/magazine/m41ae2/holo + name = "\improper magazine box (M41AE2 Holo-Target x 8)" + overlay_ammo_type = "_holo_heavy" + overlay_content = "_m41ae2_holo" + magazine_type = /obj/item/ammo_magazine/rifle/lmg/holo_target + +/obj/item/ammo_box/magazine/m41ae2/holo/empty + empty = TRUE + +/obj/item/ammo_box/magazine/m41ae2/heap + name = "\improper magazine box (M41AE2 HEAP x 8)" + overlay_ammo_type = "_heap_heavy" + overlay_content = "_m41ae2_heap" + magazine_type = /obj/item/ammo_magazine/rifle/lmg/heap + +/obj/item/ammo_box/magazine/m41ae2/heap/empty + empty = TRUE + +//-----------------------Flamer Fuel Tank Box----------------------- + +/obj/item/ammo_box/magazine/flamer + name = "\improper flamer tank box (UT-Napthal Fuel x 8)" + icon_state = "base_flamer" + overlay_ammo_type = "_flamer" + overlay_gun_type = "_blank" + overlay_content = "_flamer" + magazine_type = /obj/item/ammo_magazine/flamer_tank + num_of_magazines = 8 + +/obj/item/ammo_box/magazine/flamer/empty + empty = TRUE + +/obj/item/ammo_box/magazine/flamer/bgel + name = "\improper flamer fuel box (Napalm B-Gel x 8)" + overlay_ammo_type = "_flamer_bgel" + overlay_content = "_flamer_bgel" + magazine_type = /obj/item/ammo_magazine/flamer_tank/gellied + +/obj/item/ammo_box/magazine/flamer/bgel/empty + empty = TRUE + +//-----------------------M41A MK1 Rifle Mag Boxes----------------------- + +/obj/item/ammo_box/magazine/mk1 + name = "\improper magazine box (M41A MK1 x 8)" + overlay_ammo_type = "_reg_mk1" + overlay_gun_type = "_mk1" + overlay_content = "_reg" + magazine_type = /obj/item/ammo_magazine/rifle/m41aMK1 + num_of_magazines = 8 + +/obj/item/ammo_box/magazine/mk1/empty + empty = TRUE + +/obj/item/ammo_box/magazine/mk1/ap + name = "\improper magazine box (M41A MK1 AP x 8)" + flags_equip_slot = SLOT_BACK + overlay_ammo_type = "_ap_mk1" + overlay_content = "_ap" + magazine_type = /obj/item/ammo_magazine/rifle/m41aMK1/ap + +/obj/item/ammo_box/magazine/mk1/ap/empty + empty = TRUE + +//-----------------------NSG 23 Rifle Mag Boxes----------------------- + +/obj/item/ammo_box/magazine/nsg23 + name = "\improper magazine box (NSG 23 x 16)" + icon_state = "base_nsg23" + overlay_gun_type = "_nsg23" + overlay_content = "_reg" + magazine_type = /obj/item/ammo_magazine/rifle/nsg23 + num_of_magazines = 16 + +/obj/item/ammo_box/magazine/nsg23/empty + empty = TRUE + +/obj/item/ammo_box/magazine/nsg23/ap + name = "\improper magazine box (NSG 23 AP x 12)" + overlay_ammo_type = "_ap" + overlay_content = "_ap" + magazine_type = /obj/item/ammo_magazine/rifle/nsg23/ap + num_of_magazines = 12 + +/obj/item/ammo_box/magazine/nsg23/ap/empty + empty = TRUE + +/obj/item/ammo_box/magazine/nsg23/ex + name = "\improper magazine box (NSG 23 Extended x 8)" + overlay_ammo_type = "_ext" + magazine_type = /obj/item/ammo_magazine/rifle/nsg23/extended + num_of_magazines = 8 + +/obj/item/ammo_box/magazine/nsg23/ex/empty + empty = TRUE + +/obj/item/ammo_box/magazine/nsg23/heap + name = "\improper magazine box (NSG 23 HEAP x 16)" + overlay_ammo_type = "_heap" + overlay_content = "_heap" + magazine_type = /obj/item/ammo_magazine/rifle/nsg23/heap + +/obj/item/ammo_box/magazine/nsg23/heap/empty + empty = TRUE + +//-----------------------Spearhead Autorevolver Speed Loaders Box----------------------- + +/obj/item/ammo_box/magazine/spearhead + name = "\improper speed loaders box (Spearhead HP x 12)" + icon_state = "base_cmb" + overlay_ammo_type = "_357_hp" + overlay_gun_type = "_357" + overlay_content = "_speed" + num_of_magazines = 12 + magazine_type = /obj/item/ammo_magazine/revolver/cmb + +/obj/item/ammo_box/magazine/spearhead/empty + empty = TRUE + +/obj/item/ammo_box/magazine/spearhead/normalpoint + name = "\improper speed loaders box (Spearhead x 12)" + overlay_ammo_type = "_357_reg" + magazine_type = /obj/item/ammo_magazine/revolver/cmb/normalpoint + +/obj/item/ammo_box/magazine/spearhead/normalpoint/empty + empty = TRUE + +//-----------------------Type 73 Pistol Mag Box----------------------- + +/obj/item/ammo_box/magazine/type73 + name = "\improper magazine box (Type 73 x 16)" + icon_state = "base_type73" + flags_equip_slot = SLOT_BACK + overlay_ammo_type = "_type71_reg" + overlay_gun_type = "_type73" + overlay_content = "_type71_reg" + num_of_magazines = 16 + magazine_type = /obj/item/ammo_magazine/pistol/t73 + +/obj/item/ammo_box/magazine/type73/empty + empty = TRUE + +/obj/item/ammo_box/magazine/type73/impact + name = "\improper magazine box (Type 73 High-Impact x 10)" + overlay_ammo_type = "_type73_impact" + overlay_content = "_type73_impact" + num_of_magazines = 10 + magazine_type = /obj/item/ammo_magazine/pistol/t73_impact + +/obj/item/ammo_box/magazine/type73/impact/empty + empty = TRUE + + +//-----------------------AR10 Rifle Mag Box----------------------- + +/obj/item/ammo_box/magazine/ar10 + name = "\improper magazine box (AR10 x 12)" + icon_state = "base_ar10" + flags_equip_slot = SLOT_BACK + overlay_gun_type = "_ar10" + overlay_content = "_reg" + num_of_magazines = 12 + magazine_type = /obj/item/ammo_magazine/rifle/ar10 + +/obj/item/ammo_box/magazine/ar10/empty + empty = TRUE + +//-----------------------MP5 Smg Mag Box----------------------- + +/obj/item/ammo_box/magazine/mp5 + name = "\improper magazine box (MP5 x 12)" + icon_state = "base_m16" + flags_equip_slot = SLOT_BACK + overlay_gun_type = "_mp5" + overlay_content = "_reg" + num_of_magazines = 12 + magazine_type = /obj/item/ammo_magazine/smg/mp5 + +/obj/item/ammo_box/magazine/mp5/empty + empty = TRUE + + +//-----------------------Desert Eagle Pistol Mag Box----------------------- + +/obj/item/ammo_box/magazine/deagle + name = "\improper magazine box (Desert Eagle x 12)" + icon_state = "base_deagle" + flags_equip_slot = SLOT_BACK + overlay_ammo_type = "_reg" + overlay_gun_type = "_deagle" + overlay_content = "_reg" + num_of_magazines = 16 + magazine_type = /obj/item/ammo_magazine/pistol/heavy + +/obj/item/ammo_box/magazine/deagle/empty + empty = TRUE + +/obj/item/ammo_box/magazine/deagle/super + name = "\improper magazine box (Heavy Desert Eagle x 8)" + overlay_ammo_type = "_hp" + overlay_content = "_hp" + num_of_magazines = 8 + magazine_type = /obj/item/ammo_magazine/pistol/heavy/super + +/obj/item/ammo_box/magazine/deagle/super/empty + empty = TRUE + +/obj/item/ammo_box/magazine/deagle/super/highimpact + name = "\improper magazine box (High Impact Desert Eagle x 8)" + overlay_ammo_type = "_impact" + overlay_content = "_impact" + magazine_type = /obj/item/ammo_magazine/pistol/heavy/super/highimpact + +/obj/item/ammo_box/magazine/deagle/super/highimpact/empty + empty = TRUE + +/obj/item/ammo_box/magazine/deagle/super/highimpact/ap + name = "\improper magazine box (High Impact Armor-Piercing Desert Eagle x 8)" + overlay_ammo_type = "_ap" + overlay_content = "_ap" + magazine_type = /obj/item/ammo_magazine/pistol/heavy/super/highimpact/ap + +/obj/item/ammo_box/magazine/deagle/super/highimpact/ap/empty + empty = TRUE diff --git a/code/modules/projectiles/ammo_boxes/misc_boxes.dm b/code/modules/projectiles/ammo_boxes/misc_boxes.dm index d09a69e5bb50..7b19555f4de5 100644 --- a/code/modules/projectiles/ammo_boxes/misc_boxes.dm +++ b/code/modules/projectiles/ammo_boxes/misc_boxes.dm @@ -75,6 +75,15 @@ overlay_gun_type = "_m94" overlay_content = "_flares" +//------------------------M89 Signal Flare Packs Box-------------------------- + +/obj/item/ammo_box/magazine/misc/flares/signal + name = "\improper box of M89 signal flare packs" + desc = "A box of M89 signal flare packs, to mark up the way." + magazine_type = /obj/item/storage/box/m94/signal + overlay_gun_type = "_m89" + overlay_content = "_flares_signal" + //---------------------FIRE HANDLING PROCS //flare box has unique stuff @@ -139,6 +148,9 @@ /obj/item/ammo_box/magazine/misc/flares/empty empty = TRUE +/obj/item/ammo_box/magazine/misc/flares/signal/empty + empty = TRUE + //------------------------Flashlight Box-------------------------- /obj/item/ammo_box/magazine/misc/flashlight diff --git a/code/modules/projectiles/ammo_boxes/round_boxes.dm b/code/modules/projectiles/ammo_boxes/round_boxes.dm index 95115b76df43..ab1d1667c15f 100644 --- a/code/modules/projectiles/ammo_boxes/round_boxes.dm +++ b/code/modules/projectiles/ammo_boxes/round_boxes.dm @@ -130,3 +130,43 @@ /obj/item/ammo_box/rounds/type71/heap/empty empty = TRUE + +//----------------9mm Pistol Ammunition Boxes (for mod88, M4A3 pistols)------------------ + +/obj/item/ammo_box/rounds/pistol + name = "\improper pistol ammunition box (9mm)" + desc = "A 9mm ammunition box. Used to refill M4A3 magazines. It comes with a leather strap allowing to wear it on the back." + caliber = "9mm" + icon_state = "base_m4a3" + overlay_content = "_reg" + default_ammo = /datum/ammo/bullet/pistol + +/obj/item/ammo_box/rounds/pistol/empty + empty = TRUE + +/obj/item/ammo_box/rounds/pistol/ap + name = "\improper pistol ammunition box (9mm AP)" + desc = "A 9mm armor-piercing ammunition box. Used to refill mod88 and M4A3 magazines. It comes with a leather strap allowing to wear it on the back." + overlay_content = "_ap" + default_ammo = /datum/ammo/bullet/pistol/ap + +/obj/item/ammo_box/rounds/pistol/ap/empty + empty = TRUE + +/obj/item/ammo_box/rounds/pistol/hp + name = "\improper pistol ammunition box (9mm HP)" + desc = "A 9mm hollow-point ammunition box. Used to refill M4A3 magazines. It comes with a leather strap allowing to wear it on the back." + overlay_content = "_hp" + default_ammo = /datum/ammo/bullet/pistol/hollow + +/obj/item/ammo_box/rounds/pistol/hp/empty + empty = TRUE + +/obj/item/ammo_box/rounds/pistol/incen + name = "\improper pistol ammunition box (9mm Incendiary)" + desc = "A 9mm incendiary ammunition box. Used to refill M4A3 magazines. It comes with a leather strap allowing to wear it on the back." + overlay_content = "_incen" + default_ammo = /datum/ammo/bullet/pistol/incendiary + +/obj/item/ammo_box/rounds/pistol/incen/empty + empty = TRUE diff --git a/code/modules/projectiles/guns/lever_action.dm b/code/modules/projectiles/guns/lever_action.dm index d93796fbb15f..849844f4f044 100644 --- a/code/modules/projectiles/guns/lever_action.dm +++ b/code/modules/projectiles/guns/lever_action.dm @@ -373,6 +373,7 @@ their unique feature is that a direct hit will buff your damage and firerate hit_buff_reset_cooldown = 2 SECONDS //how much time after a direct hit until streaks reset var/floating_penetration = FLOATING_PENETRATION_TIER_0 //holder var var/floating_penetration_upper_limit = FLOATING_PENETRATION_TIER_4 + var/direct_hit_sound = 'sound/weapons/gun_xm88_directhit_low.ogg' attachable_allowed = list( /obj/item/attachable/bayonet/upp, // Barrel /obj/item/attachable/bayonet, @@ -499,12 +500,16 @@ their unique feature is that a direct hit will buff your damage and firerate switch(floating_penetration) if(FLOATING_PENETRATION_TIER_1) P.ammo = GLOB.ammo_list[/datum/ammo/bullet/lever_action/xm88/pen20] + direct_hit_sound = "sound/weapons/gun_xm88_directhit_low.ogg" if(FLOATING_PENETRATION_TIER_2) P.ammo = GLOB.ammo_list[/datum/ammo/bullet/lever_action/xm88/pen30] + direct_hit_sound = "sound/weapons/gun_xm88_directhit_medium.ogg" if(FLOATING_PENETRATION_TIER_3) P.ammo = GLOB.ammo_list[/datum/ammo/bullet/lever_action/xm88/pen40] + direct_hit_sound = "sound/weapons/gun_xm88_directhit_medium.ogg" if(FLOATING_PENETRATION_TIER_4) P.ammo = GLOB.ammo_list[/datum/ammo/bullet/lever_action/xm88/pen50] + direct_hit_sound = "sound/weapons/gun_xm88_directhit_high.ogg" return ..() /obj/item/weapon/gun/lever_action/xm88/unload(mob/user) @@ -524,6 +529,7 @@ their unique feature is that a direct hit will buff your damage and firerate lever_message = initial(lever_message) wield_delay = initial(wield_delay) cur_onehand_chance = initial(cur_onehand_chance) + direct_hit_sound = "sound/weapons/gun_xm88_directhit_low.ogg" if(in_chamber) var/obj/projectile/P = in_chamber P.ammo = GLOB.ammo_list[/datum/ammo/bullet/lever_action/xm88] @@ -536,6 +542,10 @@ their unique feature is that a direct hit will buff your damage and firerate if(one_hand_lever) addtimer(VARSET_CALLBACK(src, cur_onehand_chance, reset_onehand_chance), 4 SECONDS, TIMER_OVERRIDE|TIMER_UNIQUE) +/obj/item/weapon/gun/lever_action/xm88/direct_hit_buff(mob/user, mob/target, one_hand_lever = FALSE) + . = ..() + playsound(target, direct_hit_sound, 75) + #undef FLOATING_PENETRATION_TIER_0 #undef FLOATING_PENETRATION_TIER_1 #undef FLOATING_PENETRATION_TIER_2 diff --git a/code/modules/projectiles/magazines/shotguns.dm b/code/modules/projectiles/magazines/shotguns.dm index 9f137b1c2316..6c103aaa9677 100644 --- a/code/modules/projectiles/magazines/shotguns.dm +++ b/code/modules/projectiles/magazines/shotguns.dm @@ -46,6 +46,14 @@ GLOBAL_LIST_INIT(shotgun_boxes_12g, list( default_ammo = /datum/ammo/bullet/shotgun/incendiary handful_state = "incendiary_slug" +/obj/item/ammo_magazine/shotgun/incendiarybuck + name = "box of incendiary buckshots" + desc = "A box filled with self-detonating buckshot incendiary shotgun rounds. 12 Gauge." + icon_state = "incendiarybuck" + item_state = "incendiarybuck" + default_ammo = /datum/ammo/bullet/shotgun/buckshot/incendiary + handful_state = "incen_buckshot" + /obj/item/ammo_magazine/shotgun/buckshot name = "box of buckshot shells" desc = "A box filled with buckshot spread shotgun shells. 12 Gauge." diff --git a/code/modules/shuttle/computer.dm b/code/modules/shuttle/computer.dm index 3d0c8fca142d..4d94ae05f8c9 100644 --- a/code/modules/shuttle/computer.dm +++ b/code/modules/shuttle/computer.dm @@ -281,6 +281,8 @@ icon_state = "terminal" req_access = list() breakable = FALSE + ///If true, the lifeboat is in the process of launching, and so the code will not allow another launch. + var/launch_initiated = FALSE /obj/structure/machinery/computer/shuttle/lifeboat/attack_hand(mob/user) . = ..() @@ -293,23 +295,40 @@ switch(lifeboat.mode) if(SHUTTLE_IDLE) if(!istype(user, /mob/living/carbon/human)) - to_chat(user, SPAN_NOTICE("[src]'s screen says \"Awaiting confirmation of the evacuation order\".")) + to_chat(user, SPAN_NOTICE("[src]'s screen says \"Unauthorized access. Please inform your supervisor\".")) return var/mob/living/carbon/human/human_user = user - if(!(ACCESS_MARINE_COMMAND in human_user.wear_id?.access)) - to_chat(user, SPAN_NOTICE("[src]'s screen says \"Awaiting confirmation of the evacuation order\".")) + if(!(ACCESS_MARINE_SENIOR in human_user.wear_id?.access) && !(ACCESS_MARINE_DROPSHIP in human_user.wear_id?.access)) + to_chat(user, SPAN_NOTICE("[src]'s screen says \"Unauthorized access. Please inform your supervisor\".")) return if(SShijack.current_progress < SShijack.early_launch_required_progress) to_chat(user, SPAN_NOTICE("[src]'s screen says \"Unable to launch, fuel insufficient\".")) return - if(tgui_alert(user, "Early launch the lifeboat?", "Confirm", list("Yes", "No"), 10 SECONDS) == "Yes") - to_chat(user, SPAN_NOTICE("[src]'s screen blinks and says \"Early launch accepted\".")) - lifeboat.evac_launch() + if(launch_initiated) + to_chat(user, SPAN_NOTICE("[src]'s screen blinks and says \"Launch sequence already initiated\".")) return + var/response = tgui_alert(user, "Launch the lifeboat?", "Confirm", list("Yes", "No", "Emergency Launch"), 10 SECONDS) + if(launch_initiated) + to_chat(user, SPAN_NOTICE("[src]'s screen blinks and says \"Launch sequence already initiated\".")) + return + switch(response) + if ("Yes") + launch_initiated = TRUE + to_chat(user, "[src]'s screen blinks and says \"Launch command accepted\".") + shipwide_ai_announcement("Launch command received. [lifeboat.id == MOBILE_SHUTTLE_LIFEBOAT_PORT ? "Port" : "Starboard"] Lifeboat doors will close in 10 seconds.") + addtimer(CALLBACK(lifeboat, TYPE_PROC_REF(/obj/docking_port/mobile/crashable/lifeboat, evac_launch)), 10 SECONDS) + return + if ("Emergency Launch") + launch_initiated = TRUE + to_chat(user, "[src]'s screen blinks and says \"Emergency Launch command accepted\".") + lifeboat.evac_launch() + shipwide_ai_announcement("Emergency Launch command received. Launching [lifeboat.id == MOBILE_SHUTTLE_LIFEBOAT_PORT ? "Port" : "Starboard"] Lifeboat.") + return + if(SHUTTLE_IGNITING) to_chat(user, SPAN_NOTICE("[src]'s screen says \"Engines firing\".")) if(SHUTTLE_CALL) diff --git a/code/modules/vehicles/hardpoints/hardpoint.dm b/code/modules/vehicles/hardpoints/hardpoint.dm index 5963b0b4e36b..acdefca18fd2 100644 --- a/code/modules/vehicles/hardpoints/hardpoint.dm +++ b/code/modules/vehicles/hardpoints/hardpoint.dm @@ -1,22 +1,20 @@ -/* - Hardpoints are any items that attach to a base vehicle, such as wheels/treads, support systems and guns -*/ - +/** + * Hardpoints are any items that attach to a base vehicle, such as wheels/treads, support systems and guns + */ /obj/item/hardpoint //------MAIN VARS---------- - // Which slot is this hardpoint in - // Purely to check for conflicting hardpoints + /// Which slot is this hardpoint in. Purely to check for conflicting hardpoints. var/slot - // The vehicle this hardpoint is installed on + /// The vehicle this hardpoint is installed on. var/obj/vehicle/multitile/owner health = 100 w_class = SIZE_LARGE - // Determines how much of any incoming damage is actually taken + /// Determines how much of any incoming damage is actually taken. var/damage_multiplier = 1 - // Origin coords of the hardpoint relative to the vehicle + /// Origin coords of the hardpoint relative to the vehicle. var/list/origins = list(0, 0) var/list/buff_multipliers @@ -32,13 +30,13 @@ var/disp_icon //This also differentiates tank vs apc vs other var/disp_icon_state - // List of pixel offsets for each direction + /// List of pixel offsets for each direction. var/list/px_offsets - //visual layer of hardpoint when on vehicle + /// Visual layer of hardpoint when on vehicle. var/hdpt_layer = HDPT_LAYER_WHEELS - // List of offsets for where to place the muzzle flash for each direction + /// List of offsets for where to place the muzzle flash for each direction. var/list/muzzle_flash_pos = list( "1" = list(0, 0), "2" = list(0, 0), @@ -54,33 +52,23 @@ var/const_mz_offset_y = 0 //------SOUNDS VARS---------- - // Sounds to play when the module activated/fired + /// Sounds to play when the module activated/fired. var/list/activation_sounds //------INTERACTION VARS---------- - //which seat can use this module + /// Which seat can use this module. var/allowed_seat = VEHICLE_GUNNER - //Cooldown on use of the hardpoint - var/cooldown = 100 - var/next_use = 0 - - //whether hardpoint has activatable ability like shooting or zooming + /// Whether hardpoint has activatable ability like shooting or zooming. var/activatable = 0 - //used to prevent welder click spam + /// Used to prevent welder click spam. var/being_repaired = FALSE - //current user. We can have only one user at a time. Better never change that - var/user - - //Accuracy of the hardpoint. (which is, in fact, a scatter. Need to change this system) - var/accuracy = 1 - - // The firing arc of this hardpoint + /// The firing arc of this hardpoint. var/firing_arc = 0 //in degrees. 0 skips whole arc of fire check // Muzzleflash @@ -91,17 +79,53 @@ //------AMMUNITION VARS---------- - //Currently loaded ammo that we shoot from + /// Currently loaded ammo that we shoot from. var/obj/item/ammo_magazine/hardpoint/ammo - //spare magazines that we can reload from + /// Spare magazines that we can reload from. var/list/backup_clips - //maximum amount of spare mags + /// Maximum amount of spare mags. var/max_clips = 0 /// An assoc list in the format list(/datum/element/bullet_trait_to_give = list(...args)) - /// that will be given to a projectile fired from the hardpoint + /// that will be given to a projectile fired from the hardpoint. var/list/list/traits_to_give + /// How much the bullet scatters when fired, in degrees. + var/scatter = 0 + /// How many bullets the gun fired while burst firing/auto firing. + var/shots_fired = 0 + /// Delay before a new firing sequence can start. + COOLDOWN_DECLARE(fire_cooldown) + + // Firemodes. + /// Current selected firemode of the gun. + var/gun_firemode = GUN_FIREMODE_SEMIAUTO + /// List of allowed firemodes. + var/list/gun_firemode_list = list( + GUN_FIREMODE_SEMIAUTO, + ) + + // Semi-auto and full-auto. + /// For regular shots, how long to wait before firing again. Use modify_fire_delay and set_fire_delay instead of modifying this on the fly + var/fire_delay = 0 + /// The multiplier for how much slower this should fire in automatic mode. 1 is normal, 1.2 is 20% slower, 2 is 100% slower, etc. Protected due to it never needing to be edited. + var/autofire_slow_mult = 1 + /// If the gun is currently auto firing. + var/auto_firing = FALSE + + // Burst fire. + /// How many shots can the weapon shoot in burst? Anything less than 2 and you cannot toggle burst. Use modify_burst_amount and set_burst_amount instead of modifying this + var/burst_amount = 1 + /// The delay in between shots. Lower = less delay = faster. Use modify_burst_delay and set_burst_delay instead of modifying this + var/burst_delay = 1 + /// When burst-firing, this number is extra time before the weapon can fire again. + var/extra_delay = 0 + /// If the gun is currently burst firing. + var/burst_firing = FALSE + + /// Currently selected target to fire at. Set with set_target(). + var/atom/target + //----------------------------- //------GENERAL PROCS---------- //----------------------------- @@ -109,6 +133,7 @@ /obj/item/hardpoint/Initialize() . = ..() set_bullet_traits() + AddComponent(/datum/component/automatedfire/autofire, fire_delay, burst_delay, burst_amount, gun_firemode, autofire_slow_mult, CALLBACK(src, PROC_REF(set_burst_firing)), CALLBACK(src, PROC_REF(reset_fire)), CALLBACK(src, PROC_REF(fire_wrapper)), callback_set_firing = CALLBACK(src, PROC_REF(set_auto_firing))) /obj/item/hardpoint/Destroy() if(owner) @@ -117,7 +142,7 @@ owner = null QDEL_NULL_LIST(backup_clips) QDEL_NULL(ammo) - + set_target(null) return ..() /obj/item/hardpoint/ex_act(severity) @@ -166,37 +191,64 @@ /obj/item/hardpoint/proc/get_integrity_percent() return 100.0*health/initial(health) -/obj/item/hardpoint/proc/on_install(obj/vehicle/multitile/V) - apply_buff(V) - return +/// Apply hardpoint effects to vehicle and self. +/obj/item/hardpoint/proc/on_install(obj/vehicle/multitile/vehicle) + if(!vehicle) //in loose holder + return + RegisterSignal(vehicle, COMSIG_GUN_RECALCULATE_ATTACHMENT_BONUSES, PROC_REF(recalculate_hardpoint_bonuses)) + apply_buff(vehicle) -/obj/item/hardpoint/proc/on_uninstall(obj/vehicle/multitile/V) - remove_buff(V) - return +/// Remove hardpoint effects from vehicle and self. +/obj/item/hardpoint/proc/on_uninstall(obj/vehicle/multitile/vehicle) + if(!vehicle) //in loose holder + return + UnregisterSignal(vehicle, COMSIG_GUN_RECALCULATE_ATTACHMENT_BONUSES) + remove_buff(vehicle) + //resetting values like set_gun_config_values() would be tidy, but unnecessary as it gets recalc'd on install anyway -//applying passive buffs like damage type resistance, speed, accuracy, cooldowns -/obj/item/hardpoint/proc/apply_buff(obj/vehicle/multitile/V) +/// Applying passive buffs like damage type resistance, speed, accuracy, cooldowns. +/obj/item/hardpoint/proc/apply_buff(obj/vehicle/multitile/vehicle) if(buff_applied) return if(LAZYLEN(type_multipliers)) for(var/type in type_multipliers) - V.dmg_multipliers[type] *= LAZYACCESS(type_multipliers, type) + vehicle.dmg_multipliers[type] *= LAZYACCESS(type_multipliers, type) if(LAZYLEN(buff_multipliers)) for(var/type in buff_multipliers) - V.misc_multipliers[type] *= LAZYACCESS(buff_multipliers, type) + vehicle.misc_multipliers[type] *= LAZYACCESS(buff_multipliers, type) buff_applied = TRUE + SEND_SIGNAL(vehicle, COMSIG_GUN_RECALCULATE_ATTACHMENT_BONUSES) -//removing buffs -/obj/item/hardpoint/proc/remove_buff(obj/vehicle/multitile/V) +/// Removing passive buffs like damage type resistance, speed, accuracy, cooldowns. +/obj/item/hardpoint/proc/remove_buff(obj/vehicle/multitile/vehicle) if(!buff_applied) return if(LAZYLEN(type_multipliers)) for(var/type in type_multipliers) - V.dmg_multipliers[type] *= 1 / LAZYACCESS(type_multipliers, type) + vehicle.dmg_multipliers[type] *= 1 / LAZYACCESS(type_multipliers, type) if(LAZYLEN(buff_multipliers)) for(var/type in buff_multipliers) - V.misc_multipliers[type] *= 1 / LAZYACCESS(buff_multipliers, type) + vehicle.misc_multipliers[type] *= 1 / LAZYACCESS(buff_multipliers, type) buff_applied = FALSE + SEND_SIGNAL(vehicle, COMSIG_GUN_RECALCULATE_ATTACHMENT_BONUSES) + +/// Recalculates hardpoint values based on vehicle modifiers. +/obj/item/hardpoint/proc/recalculate_hardpoint_bonuses() + scatter = initial(scatter) / owner.misc_multipliers["accuracy"] + var/cooldown_mult = owner.misc_multipliers["cooldown"] + set_fire_delay(initial(fire_delay) * cooldown_mult) + set_burst_delay(initial(burst_delay) * cooldown_mult) + extra_delay = initial(extra_delay) * cooldown_mult + +/// Setter for fire_delay. +/obj/item/hardpoint/proc/set_fire_delay(value) + fire_delay = value + SEND_SIGNAL(src, COMSIG_GUN_AUTOFIREDELAY_MODIFIED, fire_delay) + +/// Setter for burst_delay. +/obj/item/hardpoint/proc/set_burst_delay(value) + burst_delay = value + SEND_SIGNAL(src, COMSIG_GUN_BURST_SHOT_DELAY_MODIFIED, burst_delay) //this proc called on each move of vehicle /obj/item/hardpoint/proc/on_move(turf/old, turf/new_turf, move_dir) @@ -253,13 +305,12 @@ return data -// Traces backwards from the gun origin to the vehicle to check for obstacles between the vehicle and the muzzle -/obj/item/hardpoint/proc/clear_los(atom/A) - +/// Traces backwards from the gun origin to the vehicle to check for obstacles between the vehicle and the muzzle. +/obj/item/hardpoint/proc/clear_los() if(origins[1] == 0 && origins[2] == 0) //skipping check for modules we don't need this return TRUE - var/turf/muzzle_turf = locate(owner.x + origins[1], owner.y + origins[2], owner.z) + var/turf/muzzle_turf = get_origin_turf() var/turf/checking_turf = muzzle_turf while(!(owner in checking_turf)) @@ -268,24 +319,24 @@ return FALSE // Ensure that we can pass over all objects in the turf - for(var/obj/O in checking_turf) + for(var/obj/object in checking_turf) // Since vehicles are multitile the - if(O == owner) + if(object == owner) continue // Non-dense objects are irrelevant - if(!O.density) + if(!object.density) continue // Make sure we can pass object from all directions - if(!(O.pass_flags.flags_can_pass_all & PASS_OVER_THROW_ITEM)) - if(!(O.flags_atom & ON_BORDER)) + if(!HAS_FLAG(object.pass_flags.flags_can_pass_all, PASS_OVER_THROW_ITEM)) + if(!HAS_FLAG(object.flags_atom, ON_BORDER)) return FALSE //If we're behind the object, check the behind pass flags - else if(dir == O.dir && !(O.pass_flags.flags_can_pass_behind & PASS_OVER_THROW_ITEM)) + else if(dir == object.dir && !HAS_FLAG(object.pass_flags.flags_can_pass_behind, PASS_OVER_THROW_ITEM)) return FALSE //If we're in front, check front pass flags - else if(dir == turn(O.dir, 180) && !(O.pass_flags.flags_can_pass_front & PASS_OVER_THROW_ITEM)) + else if(dir == turn(object.dir, 180) && !HAS_FLAG(object.pass_flags.flags_can_pass_front, PASS_OVER_THROW_ITEM)) return FALSE // Trace back towards the vehicle @@ -297,47 +348,6 @@ //------INTERACTION PROCS---------- //----------------------------- -//If the hardpoint can be activated by current user -/obj/item/hardpoint/proc/can_activate(mob/user, atom/A) - if(!owner) - return - - var/seat = owner.get_mob_seat(user) - if(!seat) - return - - if(seat != allowed_seat) - to_chat(user, SPAN_WARNING("Only [allowed_seat] can use [name].")) - return - - if(health <= 0) - to_chat(user, SPAN_WARNING("\The [name] is broken!")) - return FALSE - - if(world.time < next_use) - if(cooldown >= 20) //filter out guns with high firerate to prevent message spam. - to_chat(user, SPAN_WARNING("You need to wait [SPAN_HELPFUL((next_use - world.time) / 10)] seconds before [name] can be used again.")) - return FALSE - - if(ammo && ammo.current_rounds <= 0) - to_chat(user, SPAN_WARNING("\The [name] is out of ammo! Magazines: [SPAN_HELPFUL(LAZYLEN(backup_clips))]/[SPAN_HELPFUL(max_clips)]")) - return FALSE - - if(!in_firing_arc(A)) - to_chat(user, SPAN_WARNING("The target is not within your firing arc!")) - return FALSE - - if(!clear_los(A)) - to_chat(user, SPAN_WARNING("You don't have a clear line of sight to the target!")) - return FALSE - - return TRUE - -//Called when you want to activate the hardpoint, by default firing a gun -//This can also be used for some type of temporary buff or toggling mode, up to you -/obj/item/hardpoint/proc/activate(mob/user, atom/A) - fire(user, A) - /obj/item/hardpoint/proc/deactivate() return @@ -490,76 +500,201 @@ user.visible_message(SPAN_NOTICE("[user] stops repairing \the [name]."), SPAN_NOTICE("You stop repairing \the [name]. The integrity of the module is at [SPAN_HELPFUL(round(get_integrity_percent()))]%.")) return -//determines whether something is in firing arc of a hardpoint -/obj/item/hardpoint/proc/in_firing_arc(atom/A) - if(!owner) - return FALSE +/// Setter proc for the automatic firing flag. +/obj/item/hardpoint/proc/set_auto_firing(auto = FALSE) + if(auto_firing != auto) + auto_firing = auto + if(!auto_firing) //end-of-fire, show changed ammo + display_ammo() + +/// Setter proc for the burst firing flag. +/obj/item/hardpoint/proc/set_burst_firing(burst = FALSE) + if(burst_firing != burst) + burst_firing = burst + if(!burst_firing) //end-of-fire, show changed ammo + display_ammo() + +/// Clean all firing references. +/obj/item/hardpoint/proc/reset_fire() + shots_fired = 0 + set_target(null) + set_auto_firing(FALSE) //on abnormal exits automatic fire doesn't call set_auto_firing() + +/// Set the target and take care of hard delete. +/obj/item/hardpoint/proc/set_target(atom/object) + if(object == target || object == loc) + return + if(target) + UnregisterSignal(target, COMSIG_PARENT_QDELETING) + target = object + if(target) + RegisterSignal(target, COMSIG_PARENT_QDELETING, PROC_REF(clean_target)) + +/// Set the target to its turf, so we keep shooting even when it was qdeled. +/obj/item/hardpoint/proc/clean_target() + SIGNAL_HANDLER + target = get_turf(target) + +/// Print how much ammo is left to chat. +/obj/item/hardpoint/proc/display_ammo(mob/user) + if(!user) + user = owner.get_seat_mob(allowed_seat) + if(!user) + return - if(!firing_arc) - return TRUE + if(ammo) + to_chat(user, SPAN_WARNING("[name] Ammo: [SPAN_HELPFUL(ammo ? ammo.current_rounds : 0)]/[SPAN_HELPFUL(ammo ? ammo.max_rounds : 0)] | Mags: [SPAN_HELPFUL(LAZYLEN(backup_clips))]/[SPAN_HELPFUL(max_clips)]")) - var/turf/T = get_turf(A) - if(!T) - return FALSE +/// Reset variables used in firing and remove the gun from the autofire system. +/obj/item/hardpoint/proc/stop_fire(datum/source, atom/object, turf/location, control, params) + SEND_SIGNAL(src, COMSIG_GUN_STOP_FIRE) + if(auto_firing) + reset_fire() //automatic fire doesn't reset itself from COMSIG_GUN_STOP_FIRE - var/dx = T.x - (owner.x + origins[1]/2) - var/dy = T.y - (owner.y + origins[2]/2) - - var/deg = 0 - switch(dir) - if(EAST) - deg = 0 - if(NORTH) - deg = -90 - if(WEST) - deg = 180 - if(SOUTH) - deg = 90 - - var/nx = dx * cos(deg) - dy * sin(deg) - var/ny = dx * sin(deg) + dy * cos(deg) - if(nx == 0) - return firing_arc >= 90 - - var/angle = arctan(ny/nx) - if(nx < 0) - angle += 180 - - return abs(angle) <= (firing_arc/2) - -//doing last preparation before actually firing gun -/obj/item/hardpoint/proc/fire(mob/user, atom/A) - if(!ammo) //Prevents a runtime +/// Update the target if you dragged your mouse. +/obj/item/hardpoint/proc/change_target(datum/source, atom/src_object, atom/over_object, turf/src_location, turf/over_location, src_control, over_control, params) + set_target(get_turf_on_clickcatcher(over_object, source, params)) + +/// Check if the gun can fire and add it to bucket autofire system if needed, or just fire the gun if not. +/obj/item/hardpoint/proc/start_fire(datum/source, atom/object, turf/location, control, params) + if(istype(object, /atom/movable/screen)) return - if(ammo.current_rounds <= 0) + + if(QDELETED(object)) return - next_use = world.time + cooldown * owner.misc_multipliers["cooldown"] - if(!prob((accuracy * 100) / owner.misc_multipliers["accuracy"])) - A = get_step(get_turf(A), pick(GLOB.cardinals)) + if(!auto_firing && !burst_firing && !COOLDOWN_FINISHED(src, fire_cooldown)) + if(max(fire_delay, burst_delay + extra_delay) >= 2.0 SECONDS) //filter out guns with high firerate to prevent message spam. + to_chat(source, SPAN_WARNING("You need to wait [SPAN_HELPFUL(COOLDOWN_SECONDSLEFT(src, fire_cooldown))] seconds before [name] can be used again.")) + return - if(LAZYLEN(activation_sounds)) - playsound(get_turf(src), pick(activation_sounds), 60, 1) + set_target(get_turf_on_clickcatcher(object, source, params)) - fire_projectile(user, A) + if(gun_firemode == GUN_FIREMODE_SEMIAUTO) + var/fire_return = try_fire(object, source, params) + //end-of-fire, show ammo (if changed) + if(fire_return == AUTOFIRE_CONTINUE) + reset_fire() + display_ammo(source) + else + SEND_SIGNAL(src, COMSIG_GUN_FIRE) + +/// Wrapper proc for the autofire system to ensure the important args aren't null. +/obj/item/hardpoint/proc/fire_wrapper(atom/target, mob/living/user, params) + SHOULD_NOT_OVERRIDE(TRUE) + if(!target) + target = src.target + if(!user) + user = owner.get_seat_mob(allowed_seat) + if(!target || !user) + return NONE + + return try_fire(target, user, params) + +/// Tests if firing should be interrupted, otherwise fires. +/obj/item/hardpoint/proc/try_fire(atom/target, mob/living/user, params) + if(health <= 0) + to_chat(user, SPAN_WARNING("\The [name] is broken!")) + return NONE - to_chat(user, SPAN_WARNING("[name] Ammo: [SPAN_HELPFUL(ammo ? ammo.current_rounds : 0)]/[SPAN_HELPFUL(ammo ? ammo.max_rounds : 0)] | Mags: [SPAN_HELPFUL(LAZYLEN(backup_clips))]/[SPAN_HELPFUL(max_clips)]")) + if(ammo && ammo.current_rounds <= 0) + click_empty(user) + return NONE -//finally firing the gun -/obj/item/hardpoint/proc/fire_projectile(mob/user, atom/A) - set waitfor = 0 + if(!in_firing_arc(target)) + to_chat(user, SPAN_WARNING("The target is not within your firing arc!")) + return NONE - var/turf/origin_turf = get_turf(src) - origin_turf = locate(origin_turf.x + origins[1], origin_turf.y + origins[2], origin_turf.z) + if(!clear_los()) + to_chat(user, SPAN_WARNING("The muzzle is obstructed!")) + return NONE - var/obj/projectile/P = generate_bullet(user, origin_turf) - SEND_SIGNAL(P, COMSIG_BULLET_USER_EFFECTS, user) - P.fire_at(A, user, src, P.ammo.max_range, P.ammo.shell_speed) + return handle_fire(target, user, params) - if(use_muzzle_flash) - muzzle_flash(Get_Angle(origin_turf, A)) +/// Actually fires the gun, sets up the projectile and fires it. +/obj/item/hardpoint/proc/handle_fire(atom/target, mob/living/user, params) + var/turf/origin_turf = get_origin_turf() + var/obj/projectile/projectile_to_fire = generate_bullet(user, origin_turf) ammo.current_rounds-- + SEND_SIGNAL(projectile_to_fire, COMSIG_BULLET_USER_EFFECTS, user) + + // turf-targeted projectiles are fired without scatter, because proc would raytrace them further away + var/ammo_flags = projectile_to_fire.ammo.flags_ammo_behavior | projectile_to_fire.projectile_override_flags + if(!HAS_FLAG(ammo_flags, AMMO_HITS_TARGET_TURF) && !HAS_FLAG(ammo_flags, AMMO_EXPLOSIVE)) //AMMO_EXPLOSIVE is also a turf-targeted projectile + projectile_to_fire.scatter = scatter + target = simulate_scatter(projectile_to_fire, target, origin_turf, get_turf(target), user) + + INVOKE_ASYNC(projectile_to_fire, TYPE_PROC_REF(/obj/projectile, fire_at), target, user, src, projectile_to_fire.ammo.max_range, projectile_to_fire.ammo.shell_speed) + projectile_to_fire = null + + shots_fired++ + play_firing_sounds() + if(use_muzzle_flash) + muzzle_flash(Get_Angle(origin_turf, target)) + + set_fire_cooldown(gun_firemode) + + return AUTOFIRE_CONTINUE + +/// Start cooldown to respect delay of firemode. +/obj/item/hardpoint/proc/set_fire_cooldown(firemode) + var/cooldown_time = 0 + switch(firemode) + if(GUN_FIREMODE_SEMIAUTO) + cooldown_time = fire_delay + if(GUN_FIREMODE_BURSTFIRE) + cooldown_time = burst_delay + extra_delay + if(GUN_FIREMODE_AUTOMATIC) + cooldown_time = fire_delay + COOLDOWN_START(src, fire_cooldown, cooldown_time) + +/// Adjust target based on random scatter angle. +/obj/item/hardpoint/proc/simulate_scatter(obj/projectile/projectile_to_fire, atom/target, turf/curloc, turf/targloc) + var/fire_angle = Get_Angle(curloc, targloc) + var/total_scatter_angle = projectile_to_fire.scatter + + //Not if the gun doesn't scatter at all, or negative scatter. + if(total_scatter_angle > 0) + fire_angle += rand(-total_scatter_angle, total_scatter_angle) + target = get_angle_target_turf(curloc, fire_angle, 30) + + return target + +/// Get turf at hardpoint origin offset, used as the muzzle. +/obj/item/hardpoint/proc/get_origin_turf() + return get_offset_target_turf(get_turf(src), origins[1], origins[2]) + +/// Plays 'click' noise and announced to chat. Usually called when weapon empty. +/obj/item/hardpoint/proc/click_empty(mob/user) + playsound(src, 'sound/weapons/gun_empty.ogg', 25, 1, 5) + if(user) + to_chat(user, SPAN_WARNING("*click*")) + +/// Selects and plays a firing sound from the list. +/obj/item/hardpoint/proc/play_firing_sounds() + if(LAZYLEN(activation_sounds)) + playsound(get_turf(src), pick(activation_sounds), 60, 1) + +/// Determines whether something is in firing arc of a hardpoint. +/obj/item/hardpoint/proc/in_firing_arc(atom/target) + if(!firing_arc || !ISINRANGE_EX(firing_arc, 0, 360)) + return TRUE + + var/turf/muzzle_turf = get_origin_turf() + var/turf/target_turf = get_turf(target) + + //same tile angle returns EAST, returning FALSE to ensure consistency + if(muzzle_turf == target_turf) + return FALSE + + var/angle_diff = SIMPLIFY_DEGREES(dir2angle(dir) - get_angle(muzzle_turf, target_turf)) + if(angle_diff < -180) + angle_diff += 360 + else if(angle_diff > 180) + angle_diff -= 360 + + return abs(angle_diff) <= (firing_arc * 0.5) //----------------------------- //------ICON PROCS---------- diff --git a/code/modules/vehicles/hardpoints/holder/holder.dm b/code/modules/vehicles/hardpoints/holder/holder.dm index b14e078a3997..fc8e849d105c 100644 --- a/code/modules/vehicles/hardpoints/holder/holder.dm +++ b/code/modules/vehicles/hardpoints/holder/holder.dm @@ -43,10 +43,21 @@ for(var/obj/item/hardpoint/H in hardpoints) H.take_damage(damage) -/obj/item/hardpoint/holder/on_install(obj/vehicle/multitile/V) - for(var/obj/item/hardpoint/HP in hardpoints) - HP.owner = V - return +/obj/item/hardpoint/holder/on_install(obj/vehicle/multitile/vehicle) + ..() + if(!vehicle) //in loose holder + return + for(var/obj/item/hardpoint/hardpoint in hardpoints) + hardpoint.owner = vehicle + hardpoint.on_install(vehicle) + +/obj/item/hardpoint/holder/on_uninstall(obj/vehicle/multitile/vehicle) + if(!vehicle) //in loose holder + return + for(var/obj/item/hardpoint/hardpoint in hardpoints) + hardpoint.on_uninstall(vehicle) + hardpoint.owner = null + ..() /obj/item/hardpoint/holder/proc/can_install(obj/item/hardpoint/H) // Can only have 1 hardpoint of each slot type @@ -121,16 +132,17 @@ H.forceMove(src) LAZYADD(hardpoints, H) + H.on_install(owner) H.rotate(turning_angle(H.dir, dir)) /obj/item/hardpoint/holder/proc/remove_hardpoint(obj/item/hardpoint/H, turf/uninstall_to) if(!hardpoints) return - hardpoints -= H H.forceMove(uninstall_to ? uninstall_to : get_turf(src)) + H.on_uninstall(owner) H.reset_rotation() - + hardpoints -= H H.owner = null if(H.health <= 0) diff --git a/code/modules/vehicles/hardpoints/holder/tank_turret.dm b/code/modules/vehicles/hardpoints/holder/tank_turret.dm index 27ab6c95404c..896628e609bb 100644 --- a/code/modules/vehicles/hardpoints/holder/tank_turret.dm +++ b/code/modules/vehicles/hardpoints/holder/tank_turret.dm @@ -13,8 +13,6 @@ density = TRUE //come on, it's huge activatable = TRUE - cooldown = 150 - accuracy = 0.8 ammo = new /obj/item/ammo_magazine/hardpoint/turret_smoke max_clips = 2 @@ -60,6 +58,15 @@ // Used during the windup var/rotating = FALSE + scatter = 4 + gun_firemode = GUN_FIREMODE_BURSTFIRE + gun_firemode_list = list( + GUN_FIREMODE_BURSTFIRE, + ) + burst_amount = 2 + burst_delay = 1.0 SECONDS + extra_delay = 13.0 SECONDS + /obj/item/hardpoint/holder/tank_turret/update_icon() var/broken = (health <= 0) icon_state = "tank_turret_[broken]" @@ -182,12 +189,7 @@ user.client.pixel_x = -1 * AM.view_tile_offset * 32 user.client.pixel_y = 0 -/obj/item/hardpoint/holder/tank_turret/fire(mob/user, atom/A) - if(ammo.current_rounds <= 0) - return - - next_use = world.time + cooldown - +/obj/item/hardpoint/holder/tank_turret/try_fire(atom/target, mob/living/user, params) var/turf/L var/turf/R switch(owner.dir) @@ -204,26 +206,14 @@ L = locate(owner.x - 4, owner.y + 2, owner.z) R = locate(owner.x - 4, owner.y - 2, owner.z) - if(LAZYLEN(activation_sounds)) - playsound(get_turf(src), pick(activation_sounds), 60, 1) - fire_projectile(user, L) + if(shots_fired) + target = R + else + target = L - sleep(10) + return ..() - if(LAZYLEN(activation_sounds)) - playsound(get_turf(src), pick(activation_sounds), 60, 1) - fire_projectile(user, R) - - to_chat(user, SPAN_WARNING("Smoke Screen uses left: [SPAN_HELPFUL(ammo ? ammo.current_rounds / 2 : 0)]/[SPAN_HELPFUL(ammo ? ammo.max_rounds / 2 : 0)] | Mags: [SPAN_HELPFUL(LAZYLEN(backup_clips))]/[SPAN_HELPFUL(max_clips)]")) - -/obj/item/hardpoint/holder/tank_turret/fire_projectile(mob/user, atom/A) - set waitfor = 0 - - var/turf/origin_turf = get_turf(src) - origin_turf = locate(origin_turf.x + origins[1], origin_turf.y + origins[2], origin_turf.z) +/obj/item/hardpoint/holder/tank_turret/get_origin_turf() + var/origin_turf = ..() origin_turf = get_step(get_step(origin_turf, owner.dir), owner.dir) //this should get us tile in front of tank to prevent grenade being stuck under us. - - var/obj/projectile/P = generate_bullet(user, origin_turf) - SEND_SIGNAL(P, COMSIG_BULLET_USER_EFFECTS, owner.seats[VEHICLE_GUNNER]) - P.fire_at(A, owner.seats[VEHICLE_GUNNER], src, get_dist(origin_turf, A) + 1, P.ammo.shell_speed) - ammo.current_rounds-- + return origin_turf diff --git a/code/modules/vehicles/hardpoints/primary/autocannon.dm b/code/modules/vehicles/hardpoints/primary/autocannon.dm index df9224011b32..b6dc2cedc674 100644 --- a/code/modules/vehicles/hardpoints/primary/autocannon.dm +++ b/code/modules/vehicles/hardpoints/primary/autocannon.dm @@ -8,8 +8,6 @@ activation_sounds = list('sound/weapons/vehicles/autocannon_fire.ogg') health = 500 - cooldown = 7 - accuracy = 0.98 firing_arc = 60 origins = list(0, -3) @@ -23,3 +21,10 @@ "4" = list(32, 0), "8" = list(-32, 0) ) + + scatter = 1 + gun_firemode = GUN_FIREMODE_AUTOMATIC + gun_firemode_list = list( + GUN_FIREMODE_AUTOMATIC, + ) + fire_delay = 0.7 SECONDS diff --git a/code/modules/vehicles/hardpoints/primary/dual_cannon.dm b/code/modules/vehicles/hardpoints/primary/dual_cannon.dm index ad57e20e8456..4033a4bffb2a 100644 --- a/code/modules/vehicles/hardpoints/primary/dual_cannon.dm +++ b/code/modules/vehicles/hardpoints/primary/dual_cannon.dm @@ -12,10 +12,7 @@ damage_multiplier = 0.2 health = 500 - cooldown = 7 - accuracy = 0.98 firing_arc = 60 - var/burst_amount = 2 origins = list(0, -2) @@ -33,27 +30,15 @@ "8" = list(14, 9) ) + scatter = 1 + gun_firemode = GUN_FIREMODE_AUTOMATIC + gun_firemode_list = list( + GUN_FIREMODE_AUTOMATIC, + ) + fire_delay = 0.3 SECONDS + /obj/item/hardpoint/primary/dualcannon/set_bullet_traits() ..() LAZYADD(traits_to_give, list( BULLET_TRAIT_ENTRY(/datum/element/bullet_trait_iff) )) - -/obj/item/hardpoint/primary/dualcannon/fire(mob/user, atom/A) - if(ammo.current_rounds <= 0) - return - - next_use = world.time + cooldown * owner.misc_multipliers["cooldown"] - - for(var/bullets_fired = 1, bullets_fired <= burst_amount, bullets_fired++) - var/atom/T = A - if(!prob((accuracy * 100) / owner.misc_multipliers["accuracy"])) - T = get_step(get_turf(A), pick(GLOB.cardinals)) - if(LAZYLEN(activation_sounds)) - playsound(get_turf(src), pick(activation_sounds), 60, 1) - fire_projectile(user, T) - if(ammo.current_rounds <= 0) - break - if(bullets_fired < burst_amount) //we need to sleep only if there are more bullets to shoot in the burst - sleep(3) - to_chat(user, SPAN_WARNING("[src] Ammo: [SPAN_HELPFUL(ammo ? ammo.current_rounds : 0)]/[SPAN_HELPFUL(ammo ? ammo.max_rounds : 0)] | Mags: [SPAN_HELPFUL(LAZYLEN(backup_clips))]/[SPAN_HELPFUL(max_clips)]")) diff --git a/code/modules/vehicles/hardpoints/primary/flamer.dm b/code/modules/vehicles/hardpoints/primary/flamer.dm index 929842df2307..13beee9dd2c2 100644 --- a/code/modules/vehicles/hardpoints/primary/flamer.dm +++ b/code/modules/vehicles/hardpoints/primary/flamer.dm @@ -8,8 +8,6 @@ activation_sounds = list('sound/weapons/vehicles/flamethrower.ogg') health = 400 - cooldown = 20 - accuracy = 0.75 firing_arc = 90 origins = list(0, -3) @@ -26,36 +24,19 @@ use_muzzle_flash = FALSE + scatter = 5 + fire_delay = 2.0 SECONDS + /obj/item/hardpoint/primary/flamer/set_bullet_traits() ..() LAZYADD(traits_to_give, list( BULLET_TRAIT_ENTRY(/datum/element/bullet_trait_iff) )) -/obj/item/hardpoint/primary/flamer/can_activate(mob/user, atom/A) - if(!..()) - return FALSE - - var/turf/origin_turf = get_turf(src) - origin_turf = locate(origin_turf.x + origins[1], origin_turf.y + origins[2], origin_turf.z) - if(origin_turf == get_turf(A)) - return FALSE - - return TRUE - -/obj/item/hardpoint/primary/flamer/fire_projectile(mob/user, atom/A) - set waitfor = 0 - - var/turf/origin_turf = get_turf(src) - origin_turf = locate(origin_turf.x + origins[1], origin_turf.y + origins[2], origin_turf.z) - - var/range = get_dist(origin_turf, A) + 1 - - var/obj/projectile/P = generate_bullet(user, origin_turf) - SEND_SIGNAL(P, COMSIG_BULLET_USER_EFFECTS, owner.seats[VEHICLE_GUNNER]) - P.fire_at(A, owner.seats[VEHICLE_GUNNER], src, range < P.ammo.max_range ? range : P.ammo.max_range, P.ammo.shell_speed) - - if(use_muzzle_flash) - muzzle_flash(Get_Angle(owner, A)) +/obj/item/hardpoint/primary/flamer/try_fire(target, user, params) + var/turf/origin_turf = get_origin_turf() + if(origin_turf == get_turf(target)) + to_chat(user, SPAN_WARNING("The target is too close.")) + return NONE - ammo.current_rounds-- + return ..() diff --git a/code/modules/vehicles/hardpoints/primary/ltb.dm b/code/modules/vehicles/hardpoints/primary/ltb.dm index 7c663dc27fbc..19b5c7e7b9b4 100644 --- a/code/modules/vehicles/hardpoints/primary/ltb.dm +++ b/code/modules/vehicles/hardpoints/primary/ltb.dm @@ -8,8 +8,6 @@ activation_sounds = list('sound/weapons/vehicles/cannon_fire1.ogg', 'sound/weapons/vehicles/cannon_fire2.ogg') health = 500 - cooldown = 200 - accuracy = 0.97 firing_arc = 60 origins = list(0, -3) @@ -30,3 +28,6 @@ "4" = list(89, -4), "8" = list(-89, -4) ) + + scatter = 2 + fire_delay = 20.0 SECONDS diff --git a/code/modules/vehicles/hardpoints/primary/minigun.dm b/code/modules/vehicles/hardpoints/primary/minigun.dm index a6e44d2dbf2c..3acf37eec268 100644 --- a/code/modules/vehicles/hardpoints/primary/minigun.dm +++ b/code/modules/vehicles/hardpoints/primary/minigun.dm @@ -7,8 +7,6 @@ disp_icon_state = "ltaaap_minigun" health = 350 - cooldown = 8 - accuracy = 0.6 firing_arc = 90 origins = list(0, -3) @@ -30,46 +28,58 @@ "8" = list(-77, 0) ) - //changed minigun mechanic so instead of having lowered cooldown with each shot it now has increased burst size. - //While it's still spammy, user doesn't have to click as fast as possible anymore and has margin of 2 seconds before minigun will start slowing down - - var/chained_shots = 1 //how many quick succession shots we've fired, 1 by default - var/last_shot_time = 0 //when was last shot fired, after 3 seconds we stop barrel - var/list/chain_bursts = list(1, 1, 2, 2, 3, 3, 3, 4, 4, 4) //how many shots per click we do + scatter = 7 + gun_firemode = GUN_FIREMODE_AUTOMATIC + gun_firemode_list = list( + GUN_FIREMODE_AUTOMATIC, + ) + fire_delay = 0.8 SECONDS //base fire rate, modified by stage_delay_mult + activation_sounds = list('sound/weapons/gun_minigun.ogg') + /// Active firing time to reach max spin_stage. + var/spinup_time = 8 SECONDS + /// Grace period before losing spin_stage. + var/spindown_grace_time = 2 SECONDS + COOLDOWN_DECLARE(spindown_grace_cooldown) + /// Cooldown time to reach min spin_stage. + var/spindown_time = 3 SECONDS + /// Index of stage_rate. + var/spin_stage = 1 + /// Shots fired per fire_delay at a particular spin_stage. + var/list/stage_rate = list(1, 1, 2, 2, 3, 3, 3, 4, 4, 4, 5) + /// Fire delay multiplier for current spin_stage. + var/stage_delay_mult = 1 + /// When it was last fired, related to world.time. + var/last_fired = 0 -/obj/item/hardpoint/primary/minigun/fire(mob/user, atom/A) +/obj/item/hardpoint/primary/minigun/set_fire_delay(value) + fire_delay = value + SEND_SIGNAL(src, COMSIG_GUN_AUTOFIREDELAY_MODIFIED, fire_delay * stage_delay_mult) - var/S = 'sound/weapons/vehicles/minigun_stop.ogg' - //check how much time since last shot. 2 seconds are grace period before minigun starts to lose rotation momentum - var/t = world.time - last_shot_time - 2 SECONDS - t = round(t / 10) - if(t > 0) - chained_shots = max(chained_shots - t * 3, 1) //we lose 3 chained_shots per second - else - if(chained_shots < 11) - chained_shots++ - S = 'sound/weapons/vehicles/minigun_loop.ogg' +/obj/item/hardpoint/primary/minigun/set_fire_cooldown() + calculate_stage_delay_mult() //needs to check grace_cooldown before refreshed + last_fired = world.time + COOLDOWN_START(src, spindown_grace_cooldown, spindown_grace_time) + COOLDOWN_START(src, fire_cooldown, fire_delay * stage_delay_mult) - if(chained_shots == 1) - playsound(get_turf(src), 'sound/weapons/vehicles/minigun_start.ogg', 40, 1) +/obj/item/hardpoint/primary/minigun/proc/calculate_stage_delay_mult() + var/stage_rate_len = stage_rate.len + var/delta_time = world.time - last_fired - next_use = world.time + cooldown * owner.misc_multipliers["cooldown"] - - //how many rounds we will shoot in this burst - if(chained_shots > LAZYLEN(chain_bursts)) //5 shots at maximum rotation - t = 5 + var/old_spin_stage = spin_stage + if(auto_firing || burst_firing) //spinup if continuing fire + var/delta_stage = delta_time * (stage_rate_len - 1) + spin_stage += delta_stage / spinup_time + else if(COOLDOWN_FINISHED(src, spindown_grace_cooldown)) //spindown if initiating fire after grace + var/delta_stage = (delta_time - spindown_grace_time) * (stage_rate_len - 1) + spin_stage -= delta_stage / spindown_time else - t = LAZYACCESS(chain_bursts, chained_shots) - for(var/i = 1; i <= t; i++) - var/atom/T = A - if(!prob((accuracy * 100) / owner.misc_multipliers["accuracy"])) - T = get_step(get_turf(T), pick(GLOB.cardinals)) - fire_projectile(user, T) - if(ammo.current_rounds <= 0) - break - sleep(2) - to_chat(user, SPAN_WARNING("[src] Ammo: [SPAN_HELPFUL(ammo ? ammo.current_rounds : 0)]/[SPAN_HELPFUL(ammo ? ammo.max_rounds : 0)] | Mags: [SPAN_HELPFUL(LAZYLEN(backup_clips))]/[SPAN_HELPFUL(max_clips)]")) + return + spin_stage = Clamp(spin_stage, 1, stage_rate_len) + + var/old_stage_rate = stage_rate[Floor(old_spin_stage)] + var/new_stage_rate = stage_rate[Floor(spin_stage)] - playsound(get_turf(src), S, 40, 1) - last_shot_time = world.time + if(old_stage_rate != new_stage_rate) + stage_delay_mult = 1 / new_stage_rate + SEND_SIGNAL(src, COMSIG_GUN_AUTOFIREDELAY_MODIFIED, fire_delay * stage_delay_mult) diff --git a/code/modules/vehicles/hardpoints/secondary/cupola.dm b/code/modules/vehicles/hardpoints/secondary/cupola.dm index 3c329e135855..f259d6ea2623 100644 --- a/code/modules/vehicles/hardpoints/secondary/cupola.dm +++ b/code/modules/vehicles/hardpoints/secondary/cupola.dm @@ -8,10 +8,7 @@ activation_sounds = list('sound/weapons/gun_smartgun1.ogg', 'sound/weapons/gun_smartgun2.ogg', 'sound/weapons/gun_smartgun3.ogg', 'sound/weapons/gun_smartgun4.ogg') health = 350 - cooldown = 15 - accuracy = 0.9 firing_arc = 120 - var/burst_amount = 3 origins = list(0, -2) @@ -25,27 +22,17 @@ "8" = list(-5, 7) ) + scatter = 3 + gun_firemode = GUN_FIREMODE_BURSTFIRE + gun_firemode_list = list( + GUN_FIREMODE_BURSTFIRE, + ) + burst_amount = 3 + burst_delay = 0.3 SECONDS + extra_delay = 0.6 SECONDS + /obj/item/hardpoint/secondary/m56cupola/set_bullet_traits() ..() LAZYADD(traits_to_give, list( BULLET_TRAIT_ENTRY(/datum/element/bullet_trait_iff) )) - -/obj/item/hardpoint/secondary/m56cupola/fire(mob/user, atom/A) - if(ammo.current_rounds <= 0) - return - - next_use = world.time + cooldown * owner.misc_multipliers["cooldown"] - - for(var/bullets_fired = 1, bullets_fired <= burst_amount, bullets_fired++) - var/atom/T = A - if(!prob((accuracy * 100) / owner.misc_multipliers["accuracy"])) - T = get_step(get_turf(A), pick(GLOB.cardinals)) - if(LAZYLEN(activation_sounds)) - playsound(get_turf(src), pick(activation_sounds), 60, 1) - fire_projectile(user, T) - if(ammo.current_rounds <= 0) - break - if(bullets_fired < burst_amount) //we need to sleep only if there are more bullets to shoot in the burst - sleep(3) - to_chat(user, SPAN_WARNING("[src] Ammo: [SPAN_HELPFUL(ammo ? ammo.current_rounds : 0)]/[SPAN_HELPFUL(ammo ? ammo.max_rounds : 0)] | Mags: [SPAN_HELPFUL(LAZYLEN(backup_clips))]/[SPAN_HELPFUL(max_clips)]")) diff --git a/code/modules/vehicles/hardpoints/secondary/flamer.dm b/code/modules/vehicles/hardpoints/secondary/flamer.dm index 10f7453d8c95..5557cfb24e17 100644 --- a/code/modules/vehicles/hardpoints/secondary/flamer.dm +++ b/code/modules/vehicles/hardpoints/secondary/flamer.dm @@ -8,8 +8,6 @@ activation_sounds = list('sound/weapons/vehicles/flamethrower.ogg') health = 300 - cooldown = 30 - accuracy = 0.68 firing_arc = 120 origins = list(0, -2) @@ -28,31 +26,20 @@ "8" = list(-3, 18) ) -/obj/item/hardpoint/secondary/small_flamer/fire_projectile(mob/user, atom/A) - set waitfor = 0 - - var/turf/origin_turf = get_turf(src) - origin_turf = locate(origin_turf.x + origins[1], origin_turf.y + origins[2], origin_turf.z) - var/list/turf/turfs = getline2(origin_turf, A) - var/distance = 0 - var/turf/prev_T - - for(var/turf/T in turfs) - if(T == loc) - prev_T = T - continue - if(!ammo.current_rounds) break - if(distance >= max_range) break - if(prev_T && LinkBlocked(prev_T, T)) - break - ammo.current_rounds-- - flame_turf(T, user) - distance++ - prev_T = T - sleep(1) - -/obj/item/hardpoint/secondary/small_flamer/proc/flame_turf(turf/T, mob/user) - if(!istype(T)) return - - if(!locate(/obj/flamer_fire) in T) // No stacking flames! - new/obj/flamer_fire(T, create_cause_data(initial(name), user)) + scatter = 6 + fire_delay = 3.0 SECONDS + +/obj/item/hardpoint/secondary/small_flamer/handle_fire(atom/target, mob/living/user, params) + var/turf/origin_turf = get_origin_turf() + + var/distance = get_dist(origin_turf, get_turf(target)) + var/fire_amount = min(ammo.current_rounds, distance+1, max_range) + ammo.current_rounds -= fire_amount + + new /obj/flamer_fire(origin_turf, create_cause_data(initial(name), user), null, fire_amount, null, FLAMESHAPE_LINE, target, CALLBACK(src, PROC_REF(display_ammo), user)) + + play_firing_sounds() + + COOLDOWN_START(src, fire_cooldown, fire_delay) + + return AUTOFIRE_CONTINUE diff --git a/code/modules/vehicles/hardpoints/secondary/frontal_cannon.dm b/code/modules/vehicles/hardpoints/secondary/frontal_cannon.dm index a4d7370935fe..536b5742cfcd 100644 --- a/code/modules/vehicles/hardpoints/secondary/frontal_cannon.dm +++ b/code/modules/vehicles/hardpoints/secondary/frontal_cannon.dm @@ -11,10 +11,7 @@ damage_multiplier = 0.11 health = 350 - cooldown = 16 - accuracy = 0.8 firing_arc = 120 - var/burst_amount = 4 origins = list(0, -2) @@ -32,27 +29,15 @@ "8" = list(-62, -26) ) + scatter = 4 + gun_firemode = GUN_FIREMODE_AUTOMATIC + gun_firemode_list = list( + GUN_FIREMODE_AUTOMATIC, + ) + fire_delay = 0.3 SECONDS + /obj/item/hardpoint/secondary/frontalcannon/set_bullet_traits() ..() LAZYADD(traits_to_give, list( BULLET_TRAIT_ENTRY(/datum/element/bullet_trait_iff) )) - -/obj/item/hardpoint/secondary/frontalcannon/fire(mob/user, atom/A) - if(ammo.current_rounds <= 0) - return - - next_use = world.time + cooldown * owner.misc_multipliers["cooldown"] - - for(var/bullets_fired = 1, bullets_fired <= burst_amount, bullets_fired++) - var/atom/T = A - if(!prob((accuracy * 100) / owner.misc_multipliers["accuracy"])) - T = get_step(get_turf(A), pick(GLOB.cardinals)) - if(LAZYLEN(activation_sounds)) - playsound(get_turf(src), pick(activation_sounds), 60, 1) - fire_projectile(user, T) - if(ammo.current_rounds <= 0) - break - if(bullets_fired < burst_amount) //we need to sleep only if there are more bullets to shoot in the burst - sleep(3) - to_chat(user, SPAN_WARNING("[src] Ammo: [SPAN_HELPFUL(ammo ? ammo.current_rounds : 0)]/[SPAN_HELPFUL(ammo ? ammo.max_rounds : 0)] | Mags: [SPAN_HELPFUL(LAZYLEN(backup_clips))]/[SPAN_HELPFUL(max_clips)]")) diff --git a/code/modules/vehicles/hardpoints/secondary/grenade_launcher.dm b/code/modules/vehicles/hardpoints/secondary/grenade_launcher.dm index 8151a1ee50c1..efd151e93cb3 100644 --- a/code/modules/vehicles/hardpoints/secondary/grenade_launcher.dm +++ b/code/modules/vehicles/hardpoints/secondary/grenade_launcher.dm @@ -8,8 +8,6 @@ activation_sounds = list('sound/weapons/gun_m92_attachable.ogg') health = 500 - cooldown = 30 - accuracy = 0.4 firing_arc = 90 var/max_range = 7 @@ -27,40 +25,19 @@ "8" = list(-6, 17) ) + scatter = 10 + fire_delay = 3.0 SECONDS + /obj/item/hardpoint/secondary/grenade_launcher/set_bullet_traits() ..() LAZYADD(traits_to_give, list( BULLET_TRAIT_ENTRY(/datum/element/bullet_trait_iff) )) -/obj/item/hardpoint/secondary/grenade_launcher/can_activate(mob/user, atom/A) - if(!..()) - return FALSE - - var/turf/origin_turf = get_turf(src) - origin_turf = locate(origin_turf.x + origins[1], origin_turf.y + origins[2], origin_turf.z) - if(get_dist(origin_turf, A) < 1) - to_chat(usr, SPAN_WARNING("The target is too close.")) - return FALSE - - return TRUE - -/obj/item/hardpoint/secondary/grenade_launcher/fire_projectile(mob/user, atom/A) - set waitfor = 0 - - var/turf/origin_turf = get_turf(src) - origin_turf = locate(origin_turf.x + origins[1], origin_turf.y + origins[2], origin_turf.z) - - //getting distance between supposed target and tank center. - var/range = get_dist(origin_turf, A) + 1 //otherwise nade falls one tile shorter - if(range > max_range) - range = max_range - - var/obj/projectile/P = generate_bullet(user, origin_turf) - SEND_SIGNAL(P, COMSIG_BULLET_USER_EFFECTS, owner.seats[VEHICLE_GUNNER]) - P.fire_at(A, owner.seats[VEHICLE_GUNNER], src, P.ammo.max_range, P.ammo.shell_speed) - - if(use_muzzle_flash) - muzzle_flash(Get_Angle(owner, A)) +/obj/item/hardpoint/secondary/grenade_launcher/try_fire(mob/user, atom/A) + var/turf/origin_turf = get_origin_turf() + if(origin_turf == get_turf(A)) + to_chat(user, SPAN_WARNING("The target is too close.")) + return NONE - ammo.current_rounds-- + return ..() diff --git a/code/modules/vehicles/hardpoints/secondary/tow.dm b/code/modules/vehicles/hardpoints/secondary/tow.dm index 4bdbc6f417fb..7c58f7970c7b 100644 --- a/code/modules/vehicles/hardpoints/secondary/tow.dm +++ b/code/modules/vehicles/hardpoints/secondary/tow.dm @@ -7,8 +7,6 @@ disp_icon_state = "towlauncher" health = 500 - cooldown = 150 - accuracy = 0.8 firing_arc = 60 origins = list(0, -2) @@ -29,3 +27,7 @@ "4" = list(5, -8), "8" = list(-5, 10) ) + + scatter = 4 + fire_delay = 15.0 SECONDS + diff --git a/code/modules/vehicles/hardpoints/special/firing_port_weapon.dm b/code/modules/vehicles/hardpoints/special/firing_port_weapon.dm index b6f3daed9f4e..780c195f00be 100644 --- a/code/modules/vehicles/hardpoints/special/firing_port_weapon.dm +++ b/code/modules/vehicles/hardpoints/special/firing_port_weapon.dm @@ -10,10 +10,7 @@ activation_sounds = list('sound/weapons/gun_smartgun1.ogg', 'sound/weapons/gun_smartgun2.ogg', 'sound/weapons/gun_smartgun3.ogg', 'sound/weapons/gun_smartgun4.ogg') health = 100 - cooldown = 10 - accuracy = 0.9 firing_arc = 120 - var/burst_amount = 3 //FPWs reload automatically var/reloading = FALSE var/reload_time = 10 SECONDS @@ -30,6 +27,13 @@ underlayer_north_muzzleflash = TRUE + scatter = 3 + gun_firemode = GUN_FIREMODE_AUTOMATIC + gun_firemode_list = list( + GUN_FIREMODE_AUTOMATIC, + ) + fire_delay = 0.3 SECONDS + /obj/item/hardpoint/special/firing_port_weapon/set_bullet_traits() ..() LAZYADD(traits_to_give, list( @@ -49,46 +53,6 @@ return data - -/obj/item/hardpoint/special/firing_port_weapon/can_activate(mob/user, atom/A) - if(!owner) - return FALSE - - var/seat = owner.get_mob_seat(user) - if(!seat) - return FALSE - - if(seat != allowed_seat) - to_chat(user, SPAN_WARNING("Only [allowed_seat] can use [name].")) - return FALSE - - //FPW stop working at 50% hull - if(owner.health < initial(owner.health) * 0.5) - to_chat(user, SPAN_WARNING("\The [owner]'s hull is too damaged!")) - return FALSE - - if(world.time < next_use) - if(cooldown >= 20) //filter out guns with high firerate to prevent message spam. - to_chat(user, SPAN_WARNING("You need to wait [SPAN_HELPFUL((next_use - world.time) / 10)] seconds before [name] can be used again.")) - return FALSE - - if(reloading) - to_chat(user, SPAN_NOTICE("\The [name] is reloading. Wait [SPAN_HELPFUL("[((reload_time_started + reload_time - world.time) / 10)]")] seconds.")) - return FALSE - - if(ammo && ammo.current_rounds <= 0) - if(reloading) - to_chat(user, SPAN_WARNING("\The [name] is out of ammo! You have to wait [(reload_time_started + reload_time - world.time) / 10] seconds before it reloads!")) - else - start_auto_reload(user) - return FALSE - - if(!in_firing_arc(A)) - to_chat(user, SPAN_WARNING("The target is not within your firing arc!")) - return FALSE - - return TRUE - /obj/item/hardpoint/special/firing_port_weapon/reload(mob/user) if(!ammo) ammo = new /obj/item/ammo_magazine/hardpoint/firing_port_weapon @@ -116,27 +80,32 @@ to_chat(user, SPAN_NOTICE("\The [name] reloads automatically.")) return FALSE +/obj/item/hardpoint/special/firing_port_weapon/try_fire(atom/target, mob/living/user, params) + if(!owner) + return NONE + + //FPW stop working at 50% hull + if(owner.health < initial(owner.health) * 0.5) + to_chat(user, SPAN_WARNING("\The [owner]'s hull is too damaged!")) + return NONE -/obj/item/hardpoint/special/firing_port_weapon/fire(mob/user, atom/A) if(user.get_active_hand()) to_chat(user, SPAN_WARNING("You need a free hand to use \the [name].")) - return + return NONE - if(ammo.current_rounds <= 0) - start_auto_reload(user) - return + if(reloading) + to_chat(user, SPAN_NOTICE("\The [name] is reloading. Wait [SPAN_HELPFUL("[((reload_time_started + reload_time - world.time) / 10)]")] seconds.")) + return NONE + + if(ammo && ammo.current_rounds <= 0) + if(reloading) + to_chat(user, SPAN_WARNING("\The [name] is out of ammo! You have to wait [(reload_time_started + reload_time - world.time) / 10] seconds before it reloads!")) + else + start_auto_reload(user) + return NONE + + if(!in_firing_arc(target)) + to_chat(user, SPAN_WARNING("The target is not within your firing arc!")) + return NONE - next_use = world.time + cooldown * owner.misc_multipliers["cooldown"] - - for(var/bullets_fired = 1, bullets_fired <= burst_amount, bullets_fired++) - var/atom/T = A - if(!prob((accuracy * 100) / owner.misc_multipliers["accuracy"])) - T = get_step(get_turf(A), pick(GLOB.cardinals)) - if(LAZYLEN(activation_sounds)) - playsound(get_turf(src), pick(activation_sounds), 60, 1) - fire_projectile(user, T) - if(ammo.current_rounds <= 0) - break - if(bullets_fired < burst_amount) //we need to sleep only if there are more bullets to shoot in the burst - sleep(3) - to_chat(user, SPAN_WARNING("[src] Ammo: [SPAN_HELPFUL(ammo ? ammo.current_rounds : 0)]/[SPAN_HELPFUL(ammo ? ammo.max_rounds : 0)]")) + return handle_fire(target, user, params) diff --git a/code/modules/vehicles/hardpoints/support/artillery.dm b/code/modules/vehicles/hardpoints/support/artillery.dm index aacb83fcf383..dfcdcaf73f74 100644 --- a/code/modules/vehicles/hardpoints/support/artillery.dm +++ b/code/modules/vehicles/hardpoints/support/artillery.dm @@ -14,7 +14,7 @@ var/view_buff = 10 //This way you can VV for more or less fun var/view_tile_offset = 7 -/obj/item/hardpoint/support/artillery_module/activate(mob/user, atom/A) +/obj/item/hardpoint/support/artillery_module/handle_fire(atom/target, mob/living/user, params) if(!user.client) return @@ -62,8 +62,9 @@ user.client.pixel_y = 0 is_active = FALSE -/obj/item/hardpoint/support/artillery_module/can_activate() +/obj/item/hardpoint/support/artillery_module/try_fire(target, user, params) if(health <= 0) to_chat(usr, SPAN_WARNING("\The [src] is broken!")) - return FALSE - return TRUE + return NONE + + return handle_fire(target, user, params) diff --git a/code/modules/vehicles/hardpoints/support/flare.dm b/code/modules/vehicles/hardpoints/support/flare.dm index 00dcd3ac1886..432c9636dadd 100644 --- a/code/modules/vehicles/hardpoints/support/flare.dm +++ b/code/modules/vehicles/hardpoints/support/flare.dm @@ -13,8 +13,6 @@ activatable = TRUE health = 500 - cooldown = 30 - accuracy = 0.7 firing_arc = 120 origins = list(0, -2) @@ -33,6 +31,9 @@ "8" = list(14, -6) ) + scatter = 6 + fire_delay = 3.0 SECONDS + /obj/item/hardpoint/support/flare_launcher/set_bullet_traits() ..() LAZYADD(traits_to_give, list( diff --git a/code/modules/vehicles/interior/interactable/seats.dm b/code/modules/vehicles/interior/interactable/seats.dm index ea961bc72593..253b4a066b4f 100644 --- a/code/modules/vehicles/interior/interactable/seats.dm +++ b/code/modules/vehicles/interior/interactable/seats.dm @@ -40,8 +40,8 @@ return if(QDELETED(buckled_mob)) - vehicle.set_seated_mob(seat, null) M.unset_interaction() + vehicle.set_seated_mob(seat, null) if(M.client) M.client.change_view(GLOB.world_view_size, vehicle) M.client.pixel_x = 0 @@ -174,8 +174,8 @@ return if(QDELETED(buckled_mob)) - vehicle.set_seated_mob(seat, null) M.unset_interaction() + vehicle.set_seated_mob(seat, null) if(M.client) M.client.change_view(GLOB.world_view_size, vehicle) M.client.pixel_x = 0 @@ -252,8 +252,8 @@ return if(QDELETED(buckled_mob)) - vehicle.set_seated_mob(seat, null) M.unset_interaction() + vehicle.set_seated_mob(seat, null) if(M.client) M.client.change_view(GLOB.world_view_size, vehicle) M.client.pixel_x = 0 diff --git a/code/modules/vehicles/multitile/multitile.dm b/code/modules/vehicles/multitile/multitile.dm index c8138c5b8f86..f3b7be510b08 100644 --- a/code/modules/vehicles/multitile/multitile.dm +++ b/code/modules/vehicles/multitile/multitile.dm @@ -340,15 +340,24 @@ M.reset_view(src) give_action(M, /datum/action/human_action/vehicle_unbuckle) +/// Get crewmember of seat. /obj/vehicle/multitile/proc/get_seat_mob(seat) return seats[seat] +/// Get seat of crewmember. /obj/vehicle/multitile/proc/get_mob_seat(mob/M) for(var/seat in seats) if(seats[seat] == M) return seat return null +/// Get active hardpoint of crewmember. +/obj/vehicle/multitile/proc/get_mob_hp(mob/crew) + var/seat = get_mob_seat(crew) + if(seat) + return active_hp[seat] + return null + /obj/vehicle/multitile/proc/get_passengers() if(interior) return interior.get_passengers() diff --git a/code/modules/vehicles/multitile/multitile_hardpoints.dm b/code/modules/vehicles/multitile/multitile_hardpoints.dm index 2c5a343b802a..a6014c6cf2cd 100644 --- a/code/modules/vehicles/multitile/multitile_hardpoints.dm +++ b/code/modules/vehicles/multitile/multitile_hardpoints.dm @@ -230,47 +230,3 @@ qdel(old) update_icon() - -//proc that fires non selected weaponry -/obj/vehicle/multitile/proc/shoot_other_weapon(mob/living/carbon/human/M, seat, atom/A) - - if(!istype(M)) - return - - var/list/usable_hps = get_hardpoints_with_ammo(seat) - for(var/obj/item/hardpoint/HP in usable_hps) - if(HP == active_hp[seat] || HP.slot != HDPT_PRIMARY && HP.slot != HDPT_SECONDARY) - usable_hps.Remove(HP) - - if(!LAZYLEN(usable_hps)) - to_chat(M, SPAN_WARNING("No other working weapons detected.")) - return - - for(var/obj/item/hardpoint/HP in usable_hps) - if(!HP.can_activate(M, A)) - return - HP.activate(M, A) - break - return - -//proc that activates support module if it can be activated and you meet requirements -/obj/vehicle/multitile/proc/activate_support_module(mob/living/carbon/human/M, seat, atom/A) - - if(!istype(M)) - return - - var/list/usable_hps = get_activatable_hardpoints(seat) - for(var/obj/item/hardpoint/HP in usable_hps) - if(HP.slot != HDPT_SUPPORT) - usable_hps.Remove(HP) - - if(!LAZYLEN(usable_hps)) - to_chat(M, SPAN_WARNING("No activatable support modules detected.")) - return - - for(var/obj/item/hardpoint/HP in usable_hps) - if(!HP.can_activate(M, A)) - return - HP.activate(M, A) - break - return diff --git a/code/modules/vehicles/multitile/multitile_interaction.dm b/code/modules/vehicles/multitile/multitile_interaction.dm index 42b141327bd8..aa2025d151b5 100644 --- a/code/modules/vehicles/multitile/multitile_interaction.dm +++ b/code/modules/vehicles/multitile/multitile_interaction.dm @@ -330,80 +330,61 @@ healthcheck() -/obj/vehicle/multitile/handle_click(mob/living/user, atom/A, list/mods) - - var/seat - for(var/vehicle_seat in seats) - if(seats[vehicle_seat] == user) - seat = vehicle_seat - break - - if(istype(A, /atom/movable/screen) || !seat) +/obj/vehicle/multitile/on_set_interaction(mob/user) + RegisterSignal(user, COMSIG_MOB_MOUSEDOWN, PROC_REF(crew_mousedown)) + RegisterSignal(user, COMSIG_MOB_MOUSEDRAG, PROC_REF(crew_mousedrag)) + RegisterSignal(user, COMSIG_MOB_MOUSEUP, PROC_REF(crew_mouseup)) + +/obj/vehicle/multitile/on_unset_interaction(mob/user) + UnregisterSignal(user, list(COMSIG_MOB_MOUSEUP, COMSIG_MOB_MOUSEDOWN, COMSIG_MOB_MOUSEDRAG)) + + var/obj/item/hardpoint/hardpoint = get_mob_hp(user) + if(hardpoint) + SEND_SIGNAL(hardpoint, COMSIG_GUN_INTERRUPT_FIRE) //abort fire when crew leaves + +/// Relays crew mouse release to active hardpoint. +/obj/vehicle/multitile/proc/crew_mouseup(datum/source, atom/object, turf/location, control, params) + SIGNAL_HANDLER + var/obj/item/hardpoint/hardpoint = get_mob_hp(source) + if(!hardpoint) return - if(seat == VEHICLE_DRIVER) - if(mods["shift"] && !mods["alt"]) - A.examine(user) - return - - if(mods["ctrl"] && !mods["alt"]) - activate_horn() - return - - var/obj/item/hardpoint/HP = active_hp[seat] - if(!HP) - to_chat(user, SPAN_WARNING("Please select an active hardpoint first.")) - return - - if(!HP.can_activate(user, A)) - return - - HP.activate(user, A) - - if(seat == VEHICLE_GUNNER) - if(mods["shift"] && !mods["middle"]) - if(vehicle_flags & VEHICLE_TOGGLE_SHIFT_CLICK_GUNNER) - shoot_other_weapon(user, seat, A) - else - A.examine(user) - return - if(mods["middle"] && !mods["shift"]) - if(!(vehicle_flags & VEHICLE_TOGGLE_SHIFT_CLICK_GUNNER)) - shoot_other_weapon(user, seat, A) - return - if(mods["alt"]) - toggle_gyrostabilizer() - return - if(mods["ctrl"]) - activate_support_module(user, seat, A) - return + hardpoint.stop_fire(source, object, location, control, params) - var/obj/item/hardpoint/HP = active_hp[seat] - if(!HP) - to_chat(user, SPAN_WARNING("Please select an active hardpoint first.")) - return +/// Relays crew mouse movement to active hardpoint. +/obj/vehicle/multitile/proc/crew_mousedrag(datum/source, atom/src_object, atom/over_object, turf/src_location, turf/over_location, src_control, over_control, params) + SIGNAL_HANDLER + var/obj/item/hardpoint/hardpoint = get_mob_hp(source) + if(!hardpoint) + return - if(!HP.can_activate(user, A)) - return + hardpoint.change_target(source, src_object, over_object, src_location, over_location, src_control, over_control, params) - HP.activate(user, A) +/// Checks for special control keybinds, else relays crew mouse press to active hardpoint. +/obj/vehicle/multitile/proc/crew_mousedown(datum/source, atom/object, turf/location, control, params) + SIGNAL_HANDLER - if(seat == VEHICLE_SUPPORT_GUNNER_ONE || seat == VEHICLE_SUPPORT_GUNNER_TWO) - if(mods["shift"]) - A.examine(user) - return - if(mods["middle"] || mods["alt"] || mods["ctrl"]) - return + var/list/modifiers = params2list(params) + if(modifiers[SHIFT_CLICK] || modifiers[MIDDLE_CLICK] || modifiers[RIGHT_CLICK]) //don't step on examine, point, etc + return - var/obj/item/hardpoint/HP = active_hp[seat] - if(!HP) - to_chat(user, SPAN_WARNING("Please select an active hardpoint first.")) - return + var/seat = get_mob_seat(source) + switch(seat) + if(VEHICLE_DRIVER) + if(modifiers[LEFT_CLICK] && modifiers[CTRL_CLICK]) + activate_horn() + return + if(VEHICLE_GUNNER) + if(modifiers[LEFT_CLICK] && modifiers[ALT_CLICK]) + toggle_gyrostabilizer() + return - if(!HP.can_activate(user, A)) - return + var/obj/item/hardpoint/hardpoint = get_mob_hp(source) + if(!hardpoint) + to_chat(source, SPAN_WARNING("Please select an active hardpoint first.")) + return - HP.activate(user, A) + hardpoint.start_fire(source, object, location, control, params) /obj/vehicle/multitile/proc/handle_player_entrance(mob/M) if(!M || M.client == null) return diff --git a/code/modules/vehicles/multitile/multitile_verbs.dm b/code/modules/vehicles/multitile/multitile_verbs.dm index c7dd29bbf0a9..3801cd2e176c 100644 --- a/code/modules/vehicles/multitile/multitile_verbs.dm +++ b/code/modules/vehicles/multitile/multitile_verbs.dm @@ -30,6 +30,10 @@ if(!HP) return + var/obj/item/hardpoint/old_HP = V.active_hp[seat] + if(old_HP) + SEND_SIGNAL(old_HP, COMSIG_GUN_INTERRUPT_FIRE) //stop fire when switching away from HP + V.active_hp[seat] = HP var/msg = "You select \the [HP]." if(HP.ammo) @@ -66,6 +70,10 @@ if(!HP) return + var/obj/item/hardpoint/old_HP = V.active_hp[seat] + if(old_HP) + SEND_SIGNAL(old_HP, COMSIG_GUN_INTERRUPT_FIRE) //stop fire when switching away from HP + V.active_hp[seat] = HP var/msg = "You select \the [HP]." if(HP.ammo) @@ -225,10 +233,7 @@ 3. \"G: Toggle Turret Gyrostabilizer\" - toggles Turret Gyrostabilizer allowing it to keep current direction ignoring hull turning. (Exists only on vehicles with rotating turret, e.g. M34A2 Longstreet Light Tank)
\ Support Gunner verbs:
1. \"Reload Firing Port Weapon\" - initiates automated reloading process for M56 FPW. Requires a confirmation.
\ Driver shortcuts:
1. \"CTRL + Click\" - activates vehicle horn.
\ - Gunner shortcuts:
1. \"ALT + Click\" - toggles Turret Gyrostabilizer. (Exists only on vehicles with rotating turret, e.g. M34A2 Longstreet Light Tank)
\ - 2. \"CTRL + Click\" - activates not destroyed activatable support module.
\ - 3. \"Middle Mouse Button Click (MMB)\" - default shortcut to shoot currently not selected weapon if possible. Won't work if SHIFT + Click firing is toggled ON.
\ - 4. \"SHIFT + Click\" - examines target as usual, unless \"G: Toggle Middle/Shift Clicking\" verb was used to toggle SHIFT + Click firing ON. In this case, it will fire currently not selected weapon if possible.
" + Gunner shortcuts:
1. \"ALT + Click\" - toggles Turret Gyrostabilizer. (Exists only on vehicles with rotating turret, e.g. M34A2 Longstreet Light Tank)
" show_browser(user, dat, "Vehicle Controls Guide", "vehicle_help", "size=900x500") onclose(user, "vehicle_help") diff --git a/colonialmarines.dme b/colonialmarines.dme index b3a8972b8e9d..b296555640b7 100644 --- a/colonialmarines.dme +++ b/colonialmarines.dme @@ -135,6 +135,14 @@ #include "code\__DEFINES\dcs\signals\atom\mob\living\signals_human.dm" #include "code\__DEFINES\dcs\signals\atom\mob\living\signals_living.dm" #include "code\__DEFINES\dcs\signals\atom\mob\living\signals_xeno.dm" +#include "code\__DEFINES\paygrade_defs\civilian.dm" +#include "code\__DEFINES\paygrade_defs\cmb.dm" +#include "code\__DEFINES\paygrade_defs\dutch.dm" +#include "code\__DEFINES\paygrade_defs\marines.dm" +#include "code\__DEFINES\paygrade_defs\navy.dm" +#include "code\__DEFINES\paygrade_defs\provost.dm" +#include "code\__DEFINES\paygrade_defs\upp.dm" +#include "code\__DEFINES\paygrade_defs\weyland.dm" #include "code\__DEFINES\typecheck\assemblers.dm" #include "code\__DEFINES\typecheck\datums.dm" #include "code\__DEFINES\typecheck\generic_types.dm" @@ -572,7 +580,7 @@ #include "code\datums\pain\pain_zombie.dm" #include "code\datums\paygrades\helper.dm" #include "code\datums\paygrades\paygrade.dm" -#include "code\datums\paygrades\factions\civillian\civilian.dm" +#include "code\datums\paygrades\factions\other\civilian.dm" #include "code\datums\paygrades\factions\other\cmb.dm" #include "code\datums\paygrades\factions\other\contractors.dm" #include "code\datums\paygrades\factions\other\dutch_dozen.dm" @@ -583,7 +591,6 @@ #include "code\datums\paygrades\factions\uscm\marine.dm" #include "code\datums\paygrades\factions\uscm\navy.dm" #include "code\datums\paygrades\factions\uscm\provost.dm" -#include "code\datums\paygrades\factions\wy\goons.dm" #include "code\datums\paygrades\factions\wy\pmc.dm" #include "code\datums\paygrades\factions\wy\wy.dm" #include "code\datums\redis\redis_message.dm" @@ -1091,6 +1098,7 @@ #include "code\game\objects\items\devices\radio\encryptionkey.dm" #include "code\game\objects\items\devices\radio\headset.dm" #include "code\game\objects\items\devices\radio\intercom.dm" +#include "code\game\objects\items\devices\radio\listening_bugs.dm" #include "code\game\objects\items\devices\radio\radio.dm" #include "code\game\objects\items\explosives\explosive.dm" #include "code\game\objects\items\explosives\mine.dm" diff --git a/html/changelogs/AutoChangeLog-pr-4959.yml b/html/changelogs/AutoChangeLog-pr-4959.yml new file mode 100644 index 000000000000..353ab3f02880 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4959.yml @@ -0,0 +1,5 @@ +author: "Doubleumc" +delete-after: True +changes: + - refactor: "vehicle weapons can fire full-auto" + - rscdel: "no more controls for firing vehicle non-selected weapons" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-4976.yml b/html/changelogs/AutoChangeLog-pr-4976.yml new file mode 100644 index 000000000000..2a0de1ec20d0 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4976.yml @@ -0,0 +1,4 @@ +author: "zzzmike, drathek, ihatethisengine2" +delete-after: True +changes: + - rscadd: "Lifeboat launch now has an ARES announcement followed by a 10 second delay before doors close. The current launch functionality is preserved as Emergency Launch." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-5053.yml b/html/changelogs/AutoChangeLog-pr-5053.yml deleted file mode 100644 index f2bd438fd8e4..000000000000 --- a/html/changelogs/AutoChangeLog-pr-5053.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Birdtalon" -delete-after: True -changes: - - bugfix: "Eggsac fragile eggs can be placed on hardy weeds." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-5055.yml b/html/changelogs/AutoChangeLog-pr-5055.yml deleted file mode 100644 index 91dff8947a9c..000000000000 --- a/html/changelogs/AutoChangeLog-pr-5055.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Morrow" -delete-after: True -changes: - - rscdel: "Removed flame particles. Possibly increases performance for some players." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-5056.yml b/html/changelogs/AutoChangeLog-pr-5056.yml deleted file mode 100644 index dd78bc76f2d0..000000000000 --- a/html/changelogs/AutoChangeLog-pr-5056.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Zonespace27" -delete-after: True -changes: - - bugfix: "Resin holes can no longer be planted below stairs" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-5073.yml b/html/changelogs/AutoChangeLog-pr-5073.yml new file mode 100644 index 000000000000..6eb992e2759c --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-5073.yml @@ -0,0 +1,4 @@ +author: "realforest2001" +delete-after: True +changes: + - admin: "Added a Check Ckey verb to analyze for multikey. We're watching you Wazowski. Always watching." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-5083.yml b/html/changelogs/AutoChangeLog-pr-5083.yml new file mode 100644 index 000000000000..8688793c2ffb --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-5083.yml @@ -0,0 +1,4 @@ +author: "Ediblebomb" +delete-after: True +changes: + - rscadd: "M5 Helmet Gasmask now functions as a gasmask when in a marine helmet (and yes, gasmasks do still have some functionality)" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-5099.yml b/html/changelogs/AutoChangeLog-pr-5099.yml new file mode 100644 index 000000000000..bbdd8c2954be --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-5099.yml @@ -0,0 +1,4 @@ +author: "realforest2001" +delete-after: True +changes: + - code_imp: "Cleaned up 1 letter vars in the global datacore. Also made the entry names reflect the real name of who they relate to, for VV purposes." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-5111.yml b/html/changelogs/AutoChangeLog-pr-5111.yml new file mode 100644 index 000000000000..61bab6e59ca9 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-5111.yml @@ -0,0 +1,4 @@ +author: "zzzmike" +delete-after: True +changes: + - bugfix: "disarm chance wasn't calculating properly" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-5117.yml b/html/changelogs/AutoChangeLog-pr-5117.yml new file mode 100644 index 000000000000..7c87e5dfa082 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-5117.yml @@ -0,0 +1,4 @@ +author: "VileBeggar" +delete-after: True +changes: + - soundadd: "The XM88 now has a scaling hit sound for every direct hit you manage to land with it." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-5119.yml b/html/changelogs/AutoChangeLog-pr-5119.yml new file mode 100644 index 000000000000..5ec2e0a33e33 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-5119.yml @@ -0,0 +1,4 @@ +author: "Drathek" +delete-after: True +changes: + - bugfix: "Fix some errors regarding the nano subystem" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-5120.yml b/html/changelogs/AutoChangeLog-pr-5120.yml new file mode 100644 index 000000000000..eb9c6fc96e9a --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-5120.yml @@ -0,0 +1,4 @@ +author: "Drathek" +delete-after: True +changes: + - code_imp: "Reduced most preference re-saving when preferences are initially loaded" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-5121.yml b/html/changelogs/AutoChangeLog-pr-5121.yml new file mode 100644 index 000000000000..5daa315b8e9f --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-5121.yml @@ -0,0 +1,4 @@ +author: "SabreML" +delete-after: True +changes: + - spellcheck: "Fixed instances of \"The the\" and \"A the\" in chat messages so that they're just \"The\" instead. (Part 2)" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-5125.yml b/html/changelogs/AutoChangeLog-pr-5125.yml new file mode 100644 index 000000000000..236ad26c2f8d --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-5125.yml @@ -0,0 +1,5 @@ +author: "SabreML" +delete-after: True +changes: + - admin: "Fixed a freeze when opening the the 'Create Object' interface." + - admin: "Adjusted the size and positioning of the 'Create Object/Mob/Turf' panels so that everything fits into the window." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-5127.yml b/html/changelogs/AutoChangeLog-pr-5127.yml new file mode 100644 index 000000000000..6aa332377bce --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-5127.yml @@ -0,0 +1,5 @@ +author: "realforest2001" +delete-after: True +changes: + - bugfix: "Fixes custom sent ERTs broadcasting when they shouldn't." + - bugfix: "Fixes UPP friendly ERT telling staff it's hostile." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-5128.yml b/html/changelogs/AutoChangeLog-pr-5128.yml new file mode 100644 index 000000000000..572e5b13f457 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-5128.yml @@ -0,0 +1,6 @@ +author: "realforest2001" +delete-after: True +changes: + - code_imp: "Paygrade shorthands now use defines." + - bugfix: "CLF and Survivors are no longer privates." + - bugfix: "Civillian Mr/Ms/Mx prefix now works correctly, and is the default for new ID cards." \ No newline at end of file diff --git a/html/changelogs/archive/2023-12.yml b/html/changelogs/archive/2023-12.yml new file mode 100644 index 000000000000..f6213027ce92 --- /dev/null +++ b/html/changelogs/archive/2023-12.yml @@ -0,0 +1,85 @@ +2023-12-01: + Birdtalon: + - bugfix: Eggsac fragile eggs can be placed on hardy weeds. + Morrow: + - rscdel: Removed flame particles. Possibly increases performance for some players. + Zonespace27: + - bugfix: Resin holes can no longer be planted below stairs +2023-12-02: + 567Turtle: + - rscadd: Brown boots and gloves are now vendable from the surplus vendors. + Birdtalon: + - rscadd: '"Infernal" name prefix for xeno who rolls number 666' + - code_imp: Refactors xeno name generation. Larva name generation and removes some + istype(src) + - bugfix: 'Restricts burrower tunnels to alphanumeric characters as some other characters + break the tunnel. + + code; Adds new proc to replace non alphanumeric or space characters.' + Morrow: + - code_imp: Corrected a check to avoid repeat work in /datum/asset/spritesheet/vending_products/register() + realforest2001: + - rscadd: Added disguisable listening bugs/devices. MPs have two outside CMP office, + the CL has two in their bedroom. + - bugfix: Fixes incorrect frequencies being used to display channel names on radios. + - bugfix: Radios and tape recorders placed on tables or placed inside webbing can + now hear speech again. +2023-12-03: + BadAtThisGame302: + - rscadd: Added a flavor diary entry from the Director of Lambda + - mapadd: added back the old vault nightmare insert on Solaris which was removed + due to the creation of static comms where it spawned + - maptweak: tweaked the Lambda Director's Office + - maptweak: tweaked the Lambda Administration Office + - maptweak: tweaked the Lambda Relaxation Room + SpartanBobby: + - maptweak: Redetails Almayer Squad briefing rooms + blackdragonTOW: + - maptweak: Standardized the names of LZs to include the name of the LZ. + stalkerino: + - bugfix: fixes the skull facepaint, black mask, blue mask +2023-12-04: + Birdtalon: + - bugfix: "Upgraded resin walls can now nest hosts.\n/\U0001F191" + - rscadd: Radial Menu for xeno Evolve + IowaPotatoFarmer: + - rscadd: Added a Corporate Liaison survivor to Sorokyne. + - rscadd: Added a modified version of the liaison's winter coat that allows it to + holster guns and a few other things. Only available to the Sorokyne Strata Corporate + Liaison for now. + - spellcheck: Fixed a typo in the Sorokyne Strata Political Prisoner's ID tag. + MrDas: + - bugfix: Observer minimap should no longer occasionally show wrong / no map. + SabreML: + - ui: Removed the scrollbar from the 'Player setup' menu. + cuberound: + - bugfix: fixed a runtime in /datum/component/healing_reduction/process(delta_time) + ihatethisengine: + - rscadd: Whiskey outpost is voteable less often and requires 140 players. + realforest2001: + - bugfix: Fixes /spec_kit/asrs (now /spec_kit/rifleman) not allowing use. + - code_imp: Adds back-end functionality for token redeeming on cm_vending vendors, + and moves synth experimental tools token to use it. + - rscadd: Spec tokens are real. +2023-12-05: + Birdtalon: + - bugfix: "Fixes a runtime in vendors\n/\U0001F191" + Huffie56: + - rscadd: added new sections(Binoculars, Utilities, Helmet Optics, Radio keys, and + fill them with items already in the vendor. + - qol: move the section called pouches just above utilities section. + - qol: changed the section called "Supplies" to "engineering supplies" and fill + it with C4 and APC circuit board . + SabreML: + - spellcheck: Fixed instances of "The the" and "A the" in chat messages so that + they're just "The" instead. (Part 1) + Tsurupeta: + - bugfix: fixed saving of certain preferences. + silencer_pl: + - admin: Recieving prayers now makes a sound + - admin: Prayers and USCM emergency messages are now better highlighted for mods/admins +2023-12-06: + Birdtalon: + - bugfix: "Fixes runtime in spiders.dm\n/\U0001F191" + Blundir: + - rscadd: added new ammo boxes for various weapons and ammo diff --git a/html/create_object.html b/html/create_object.html index a4c3085a9ac6..8e67b99aebca 100644 --- a/html/create_object.html +++ b/html/create_object.html @@ -9,16 +9,17 @@
- Type
- Offset: + Offset: A R
Number: Dir: - Name:
+ Name:
+ Where:

+
@@ -37,13 +39,11 @@ var objects = object_paths == null ? new Array() : object_paths.split(";"); document.spawner.filter.focus(); - populateList(objects); function populateList(from_list) { object_list.options.length = 0; - var i; - for (i in from_list) { + for (var i in from_list) { var new_option = document.createElement("option"); new_option.value = from_list[i]; new_option.text = from_list[i]; @@ -71,6 +71,7 @@ return false; } + // Carriage return if (event.keyCode == 13 || event.which == 13) { object_list.options[0].selected = 'true'; } diff --git a/icons/mob/xenos/radial_xenos.dmi b/icons/mob/xenos/radial_xenos.dmi new file mode 100644 index 000000000000..2832f42fda33 Binary files /dev/null and b/icons/mob/xenos/radial_xenos.dmi differ diff --git a/icons/obj/items/food.dmi b/icons/obj/items/food.dmi index 3c2e963e3804..54de858ffc9c 100644 Binary files a/icons/obj/items/food.dmi and b/icons/obj/items/food.dmi differ diff --git a/icons/obj/items/food_ingredients.dmi b/icons/obj/items/food_ingredients.dmi index 3e30f51153c0..c0a0213e6db4 100644 Binary files a/icons/obj/items/food_ingredients.dmi and b/icons/obj/items/food_ingredients.dmi differ diff --git a/icons/obj/items/weapons/guns/ammo_boxes/boxes_and_lids.dmi b/icons/obj/items/weapons/guns/ammo_boxes/boxes_and_lids.dmi index 6c5d741ef9b8..42e7c54bbd2b 100644 Binary files a/icons/obj/items/weapons/guns/ammo_boxes/boxes_and_lids.dmi and b/icons/obj/items/weapons/guns/ammo_boxes/boxes_and_lids.dmi differ diff --git a/icons/obj/items/weapons/guns/ammo_boxes/handfuls.dmi b/icons/obj/items/weapons/guns/ammo_boxes/handfuls.dmi index 3355358f72f9..eeef3f91412d 100644 Binary files a/icons/obj/items/weapons/guns/ammo_boxes/handfuls.dmi and b/icons/obj/items/weapons/guns/ammo_boxes/handfuls.dmi differ diff --git a/icons/obj/items/weapons/guns/ammo_boxes/magazines.dmi b/icons/obj/items/weapons/guns/ammo_boxes/magazines.dmi index c56cb4deea9c..ff0c6d60d4ac 100644 Binary files a/icons/obj/items/weapons/guns/ammo_boxes/magazines.dmi and b/icons/obj/items/weapons/guns/ammo_boxes/magazines.dmi differ diff --git a/icons/obj/items/weapons/guns/ammo_boxes/text.dmi b/icons/obj/items/weapons/guns/ammo_boxes/text.dmi index dd08bf7e69b1..911b727ba5f6 100644 Binary files a/icons/obj/items/weapons/guns/ammo_boxes/text.dmi and b/icons/obj/items/weapons/guns/ammo_boxes/text.dmi differ diff --git a/icons/obj/items/weapons/guns/ammo_by_faction/uscm.dmi b/icons/obj/items/weapons/guns/ammo_by_faction/uscm.dmi index 51bc441aefaa..f6bddae9b090 100644 Binary files a/icons/obj/items/weapons/guns/ammo_by_faction/uscm.dmi and b/icons/obj/items/weapons/guns/ammo_by_faction/uscm.dmi differ diff --git a/icons/rebase_icons.dmi b/icons/rebase_icons.dmi index 6b0a25a1f7e6..14c19d8b27e6 100644 Binary files a/icons/rebase_icons.dmi and b/icons/rebase_icons.dmi differ diff --git a/maps/map_files/BigRed/BigRed.dmm b/maps/map_files/BigRed/BigRed.dmm index 2cdf06d411c7..6a90f35e4de3 100644 --- a/maps/map_files/BigRed/BigRed.dmm +++ b/maps/map_files/BigRed/BigRed.dmm @@ -119,7 +119,7 @@ /area/bigredv2/outside/space_port) "aau" = ( /obj/docking_port/stationary/marine_dropship/lz1{ - name = "Communications Landing Zone" + name = "LZ1: Communications Landing Zone" }, /turf/open/floor/plating, /area/bigredv2/outside/space_port) @@ -2548,7 +2548,8 @@ "ahv" = ( /obj/structure/surface/table/holotable/wood, /obj/item/paper_bin, -/turf/open/floor/wood, +/obj/item/tool/pen/clicky, +/turf/open/floor/carpet, /area/bigredv2/caves/lambda/breakroom) "ahw" = ( /obj/effect/landmark/structure_spawner/setup/distress/xeno_weed_node, @@ -3147,6 +3148,15 @@ /area/bigredv2/outside/marshal_office) "ajd" = ( /obj/structure/surface/table/holotable/wood, +/obj/structure/transmitter/colony_net/rotary{ + phone_category = "Lambda Labs"; + phone_color = "blue"; + phone_id = "Administration" + }, +/obj/item/clothing/mask/cigarette{ + pixel_x = 5; + pixel_y = 6 + }, /turf/open/floor/carpet, /area/bigredv2/caves/lambda/breakroom) "aje" = ( @@ -3198,7 +3208,8 @@ /area/bigredv2/outside/dorms) "ajm" = ( /obj/structure/filingcabinet, -/obj/effect/landmark/objective_landmark/science, +/obj/effect/landmark/objective_landmark/close, +/obj/effect/landmark/objective_landmark/medium, /turf/open/floor/wood, /area/bigredv2/caves/lambda/breakroom) "ajn" = ( @@ -3410,8 +3421,8 @@ /turf/open/floor, /area/bigredv2/outside/marshal_office) "ajO" = ( -/obj/structure/surface/table/holotable/wood, -/obj/item/tool/pen, +/obj/structure/machinery/prop/almayer/computer/PC, +/obj/structure/surface/table/woodentable/fancy, /turf/open/floor/carpet, /area/bigredv2/caves/lambda/breakroom) "ajP" = ( @@ -3501,8 +3512,8 @@ }, /area/bigredv2/outside/nw) "aka" = ( -/obj/structure/filingcabinet/chestdrawer, -/obj/effect/landmark/objective_landmark/close, +/obj/structure/machinery/faxmachine, +/obj/structure/surface/table/woodentable/fancy, /turf/open/floor/wood, /area/bigredv2/caves/lambda/breakroom) "akc" = ( @@ -4484,16 +4495,14 @@ /turf/open/floor/plating, /area/bigredv2/outside/dorms) "amW" = ( -/obj/structure/machinery/door_control{ - id = "safe_room"; - layer = 4; - name = "Door Bolt Control"; - normaldoorcontrol = 1; - pixel_y = -5; - req_access_txt = "7"; - specialfunctions = 4 +/obj/structure/machinery/light{ + dir = 1 + }, +/obj/structure/closet/crate/freezer/rations, +/turf/open/floor{ + dir = 1; + icon_state = "elevatorshaft" }, -/turf/closed/wall/solaris/reinforced, /area/bigredv2/caves/lambda/breakroom) "amX" = ( /obj/structure/window/framed/solaris/reinforced, @@ -5896,9 +5905,13 @@ }, /area/bigredv2/outside/general_offices) "aqX" = ( -/obj/structure/closet/crate/freezer/rations, /obj/item/storage/toolbox/mechanical, /obj/item/device/multitool, +/obj/structure/window/reinforced{ + dir = 4; + health = 80 + }, +/obj/structure/surface/rack, /turf/open/floor{ dir = 1; icon_state = "elevatorshaft" @@ -5914,8 +5927,15 @@ }, /area/bigredv2/caves/lambda/breakroom) "aqZ" = ( -/obj/structure/closet/fireaxecabinet{ - pixel_y = 32 +/obj/structure/noticeboard{ + dir = 1; + pixel_y = 30; + desc = "A board for pinning important items upon."; + name = "trophy board" + }, +/obj/item/XenoBio/Chitin{ + pixel_y = 27; + anchored = 1 }, /turf/open/floor{ dir = 1; @@ -5923,8 +5943,11 @@ }, /area/bigredv2/caves/lambda/breakroom) "ara" = ( -/obj/structure/surface/table/holotable/wood, -/obj/item/device/flashlight/lamp, +/obj/structure/surface/table/woodentable/fancy, +/obj/item/device/flashlight/lamp{ + pixel_y = 15 + }, +/obj/item/paper/bigred/lambda, /turf/open/floor{ dir = 1; icon_state = "elevatorshaft" @@ -6141,9 +6164,7 @@ /obj/item/ammo_magazine/shotgun/incendiary, /obj/item/ammo_magazine/shotgun/incendiary, /obj/item/weapon/gun/shotgun/combat, -/obj/structure/window/reinforced{ - dir = 1 - }, +/obj/structure/machinery/door/window/eastleft, /turf/open/floor{ dir = 1; icon_state = "elevatorshaft" @@ -6157,7 +6178,7 @@ /area/bigredv2/caves/lambda/breakroom) "arG" = ( /obj/structure/bed, -/obj/item/bedsheet/captain, +/obj/item/bedsheet/rd, /turf/open/floor{ dir = 1; icon_state = "elevatorshaft" @@ -6387,8 +6408,9 @@ /area/bigredv2/outside/ne) "asn" = ( /obj/structure/surface/rack, -/obj/structure/window/reinforced, /obj/item/clothing/suit/armor/vest, +/obj/structure/machinery/door/window/eastright, +/obj/structure/window/reinforced, /turf/open/floor{ dir = 1; icon_state = "elevatorshaft" @@ -6405,9 +6427,7 @@ }, /area/bigredv2/caves/lambda/breakroom) "asp" = ( -/obj/structure/bed/chair/office/light{ - dir = 4 - }, +/obj/structure/bed/chair/comfy/black, /turf/open/floor/wood, /area/bigredv2/caves/lambda/breakroom) "asq" = ( @@ -6417,7 +6437,7 @@ }, /area/bigredv2/outside/medical) "asr" = ( -/obj/structure/bed/chair{ +/obj/structure/bed/chair/comfy{ dir = 8 }, /turf/open/floor/carpet, @@ -6690,9 +6710,12 @@ /area/bigredv2/outside/chapel) "ate" = ( /obj/structure/machinery/door_control{ - id = "safe_blast"; - name = "Blast Door"; - pixel_y = -25 + id = "safe_room"; + name = "Door Bolt Control"; + normaldoorcontrol = 1; + pixel_y = -28; + req_access_txt = "106"; + specialfunctions = 4 }, /turf/open/floor{ dir = 1; @@ -6700,12 +6723,8 @@ }, /area/bigredv2/caves/lambda/breakroom) "atf" = ( -/obj/structure/closet/crate/medical, -/obj/item/storage/firstaid/adv, -/obj/item/storage/firstaid/o2, -/obj/item/storage/firstaid/toxin, -/obj/item/storage/firstaid/rad, -/obj/effect/landmark/objective_landmark/medium, +/obj/structure/closet/secure_closet/RD, +/obj/effect/landmark/objective_landmark/science, /turf/open/floor{ dir = 1; icon_state = "elevatorshaft" @@ -6918,7 +6937,7 @@ dir = 1; icon_state = "door_locked"; id = "safe_room"; - name = "\improper Lambda Lab Secure Storage" + name = "\improper Lambda Lab Director's Safe Room" }, /turf/open/floor{ icon_state = "delivery" @@ -7145,7 +7164,7 @@ /area/bigredv2/outside/office_complex) "aum" = ( /obj/structure/machinery/door/airlock/almayer/research/glass/colony{ - name = "\improper Lambda Lab Administration Office" + name = "\improper Lambda Lab Director's Office" }, /turf/open/floor{ icon_state = "delivery" @@ -7718,7 +7737,6 @@ /turf/open/floor/wood, /area/bigredv2/caves/lambda/breakroom) "avN" = ( -/obj/structure/bed/chair, /obj/effect/landmark/structure_spawner/setup/distress/xeno_weed_node, /turf/open/floor/carpet, /area/bigredv2/caves/lambda/breakroom) @@ -7982,8 +8000,19 @@ /turf/open/mars, /area/bigredv2/outside/ne) "awz" = ( -/obj/structure/surface/table/holotable/wood, -/obj/item/XenoBio/Chitin, +/obj/item/ashtray/bronze{ + pixel_x = -7 + }, +/obj/item/trash/cigbutt, +/obj/item/trash/cigbutt{ + pixel_x = 7; + pixel_y = 7 + }, +/obj/item/trash/cigbutt{ + pixel_x = -10; + pixel_y = 14 + }, +/obj/structure/surface/table/woodentable/fancy, /turf/open/floor/carpet, /area/bigredv2/caves/lambda/breakroom) "awA" = ( @@ -7998,13 +8027,12 @@ }, /area/bigredv2/caves/lambda/research) "awB" = ( -/obj/structure/surface/table/holotable/wood, -/obj/item/reagent_container/food/drinks/coffee, /obj/structure/transmitter/colony_net/rotary{ phone_category = "Lambda Labs"; phone_color = "blue"; - phone_id = "Administration" + phone_id = "Director" }, +/obj/structure/surface/table/woodentable/fancy, /turf/open/floor/carpet, /area/bigredv2/caves/lambda/breakroom) "awC" = ( @@ -8253,10 +8281,10 @@ }, /area/bigredv2/caves/lambda/virology) "axo" = ( -/obj/structure/bed/chair/office/light{ +/obj/effect/landmark/structure_spawner/setup/distress/xeno_weed_node, +/obj/structure/bed/chair/comfy/black{ dir = 8 }, -/obj/effect/landmark/structure_spawner/setup/distress/xeno_weed_node, /turf/open/floor/wood, /area/bigredv2/caves/lambda/breakroom) "axp" = ( @@ -8711,6 +8739,12 @@ /area/bigredv2/caves/lambda/breakroom) "ayB" = ( /obj/structure/machinery/light, +/obj/structure/surface/table/woodentable, +/obj/item/storage/fancy/cigarettes/wypacket{ + pixel_x = -5; + pixel_y = 4 + }, +/obj/item/tool/lighter/zippo, /turf/open/floor/carpet, /area/bigredv2/caves/lambda/breakroom) "ayC" = ( @@ -10831,8 +10865,10 @@ }, /area/bigredv2/caves/lambda/research) "aEs" = ( -/obj/structure/surface/table/holotable/wood, -/turf/open/floor/wood, +/obj/structure/bed/chair/comfy/lime{ + dir = 8 + }, +/turf/open/floor/carpet, /area/bigredv2/caves/lambda/breakroom) "aEt" = ( /obj/effect/landmark/structure_spawner/setup/distress/xeno_weed_node, @@ -11491,9 +11527,7 @@ }, /area/bigredv2/caves/lambda/research) "aGh" = ( -/obj/structure/bed/chair/office/light{ - dir = 1 - }, +/obj/structure/filingcabinet/filingcabinet, /turf/open/floor/wood, /area/bigredv2/caves/lambda/breakroom) "aGi" = ( @@ -19537,7 +19571,7 @@ /turf/open/floor, /area/bigredv2/outside/cargo) "bcy" = ( -/obj/structure/machinery/vending/cigarette, +/obj/structure/machinery/vending/cigarette/colony, /turf/open/floor, /area/bigredv2/outside/cargo) "bcz" = ( @@ -21454,7 +21488,7 @@ /area/bigredv2/outside/space_port_lz2) "biI" = ( /obj/docking_port/stationary/marine_dropship/lz2{ - name = "Engineering Landing Zone" + name = "LZ2: Engineering Landing Zone" }, /turf/open/floor/plating, /area/bigredv2/outside/space_port_lz2) @@ -29670,6 +29704,10 @@ icon_state = "darkyellowcorners2" }, /area/bigredv2/caves/eta/living) +"fnv" = ( +/obj/structure/bed/chair/comfy, +/turf/open/floor/carpet, +/area/bigredv2/caves/lambda/breakroom) "fnO" = ( /turf/open/mars_cave{ icon_state = "mars_cave_13" @@ -30300,7 +30338,7 @@ do_not_disturb = 1; phone_category = "Lambda Labs"; phone_color = "red"; - phone_id = "Secure Storage"; + phone_id = "Director's Safe Room"; pixel_x = -18 }, /turf/open/floor{ @@ -30986,7 +31024,7 @@ }, /area/bigredv2/outside/lambda_cave_cas) "hSP" = ( -/obj/structure/machinery/vending/cigarette, +/obj/structure/machinery/vending/cigarette/colony, /turf/open/mars_cave{ icon_state = "mars_dirt_6" }, @@ -32672,6 +32710,12 @@ icon_state = "wood" }, /area/bigredv2/outside/admin_building) +"kIF" = ( +/obj/structure/bed/chair/comfy/orange{ + dir = 1 + }, +/turf/open/floor/carpet, +/area/bigredv2/caves/lambda/breakroom) "kIW" = ( /obj/structure/fence, /turf/open/floor{ @@ -33067,6 +33111,12 @@ /obj/structure/blocker/forcefield/multitile_vehicles, /turf/closed/wall/solaris/reinforced, /area/bigredv2/caves) +"lAF" = ( +/obj/item/paper_bin, +/obj/item/tool/pen, +/obj/structure/surface/table/woodentable/fancy, +/turf/open/floor/wood, +/area/bigredv2/caves/lambda/breakroom) "lAK" = ( /obj/effect/landmark/static_comms/net_two, /turf/open/floor{ @@ -34629,6 +34679,10 @@ icon_state = "dark" }, /area/bigredv2/caves/eta/research) +"orT" = ( +/obj/structure/machinery/vending/coffee, +/turf/open/floor/carpet, +/area/bigredv2/caves/lambda/breakroom) "orZ" = ( /obj/structure/closet/secure_closet/atmos_personal, /obj/effect/landmark/objective_landmark/medium, @@ -36192,6 +36246,12 @@ icon_state = "mars_cave_13" }, /area/bigredv2/caves/mining) +"reL" = ( +/obj/effect/landmark/nightmare{ + insert_tag = "vault_v2" + }, +/turf/closed/wall/solaris/rock, +/area/bigredv2/caves) "rfe" = ( /obj/structure/platform/kutjevo/rock{ dir = 8 @@ -36653,6 +36713,17 @@ }, /turf/open/floor/plating, /area/bigredv2/caves/mining) +"rUs" = ( +/obj/structure/machinery/door_control{ + id = "safe_room"; + name = "Door Bolt Control"; + normaldoorcontrol = 1; + pixel_y = 28; + req_access_txt = "106"; + specialfunctions = 4 + }, +/turf/open/floor/wood, +/area/bigredv2/caves/lambda/breakroom) "rUN" = ( /obj/structure/platform{ dir = 4 @@ -37316,6 +37387,10 @@ icon_state = "mars_cave_19" }, /area/bigredv2/outside/lz2_south_cas) +"sUQ" = ( +/obj/structure/machinery/photocopier, +/turf/open/floor/wood, +/area/bigredv2/caves/lambda/breakroom) "sWa" = ( /obj/item/ore{ pixel_x = 12; @@ -39478,6 +39553,10 @@ icon_state = "mars_dirt_4" }, /area/bigredv2/caves/mining) +"wCs" = ( +/obj/structure/machinery/vending/cigarette/colony, +/turf/open/floor/carpet, +/area/bigredv2/caves/lambda/breakroom) "wDa" = ( /obj/effect/decal/cleanable/blood/drip{ pixel_x = 6 @@ -76696,9 +76775,9 @@ asn gvI amk ajm -aqc +sUQ avM -aqc +lAF aka amk tQw @@ -76914,9 +76993,9 @@ atc amk auj auY -auY +fnv awz -ahv +aqc amk aao tQw @@ -77341,14 +77420,14 @@ adZ afd afd adZ -aqY +amW arF arF ate -amW -aqc -auY +amk +rUs auY +fnv awB aqc amk @@ -78001,7 +78080,7 @@ agd agd amX awC -axp +kIF axp ayA amk @@ -78220,7 +78299,7 @@ avO auY aqc axT -auY +wCs amk anI aAM @@ -78437,7 +78516,7 @@ auy auY aqc aqc -auY +orT amk anI aAN @@ -78652,8 +78731,8 @@ agd agd amX awD -auY -auY +aEs +aEs ayB amk anI @@ -78859,8 +78938,8 @@ adZ anQ amK adZ -aEs -aGh +sUQ +aqc aqc asp aqc @@ -79077,7 +79156,7 @@ anR amM adZ adZ -aqc +aGh ahv ajd aqc @@ -79295,7 +79374,7 @@ anS apv adZ adZ -aqc +auY asr aqc amX @@ -82127,7 +82206,7 @@ aao aao jgW aig -aao +reL aao anI anI diff --git a/maps/map_files/BigRed/sprinkles/25.vault_v2.dmm b/maps/map_files/BigRed/sprinkles/25.vault_v2.dmm index 566f892d6fdd..f62f085e7ea2 100644 --- a/maps/map_files/BigRed/sprinkles/25.vault_v2.dmm +++ b/maps/map_files/BigRed/sprinkles/25.vault_v2.dmm @@ -1,508 +1,652 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE "aa" = ( -/turf/open/mars, -/area/bigredv2/outside/c) +/obj/structure/inflatable/popped/door, +/obj/effect/decal/cleanable/blood/drip{ + pixel_x = -11; + pixel_y = 10 + }, +/turf/open/floor{ + icon_state = "darkpurplecorners2" + }, +/area/bigredv2/caves/lambda/breakroom) "ab" = ( -/turf/open/mars{ - icon_state = "mars_dirt_8" +/obj/effect/decal/cleanable/blood/drip{ + pixel_y = 6 }, -/area/bigredv2/outside/c) +/turf/open/floor{ + dir = 4; + icon_state = "darkpurplecorners2" + }, +/area/bigredv2/caves/lambda/breakroom) "ac" = ( +/obj/item/tool/pickaxe/drill, +/obj/effect/landmark/structure_spawner/setup/distress/xeno_weed_node, /turf/open/mars_cave{ - icon_state = "mars_dirt_4" + icon_state = "mars_cave_2" }, -/area/bigredv2/outside/c) +/area/bigredv2/caves_lambda) "ad" = ( -/obj/effect/decal/cleanable/blood, -/turf/open/mars_cave{ - icon_state = "mars_dirt_4" - }, -/area/bigredv2/outside/c) +/obj/effect/glowshroom, +/turf/open/mars_cave, +/area/bigredv2/caves_lambda) "ae" = ( -/turf/open/mars{ - icon_state = "mars_dirt_3" +/obj/effect/glowshroom, +/turf/open/mars_cave{ + icon_state = "mars_cave_7" }, -/area/bigredv2/outside/c) +/area/bigredv2/caves_lambda) "af" = ( -/obj/effect/landmark/crap_item, -/turf/open/mars, -/area/bigredv2/outside/c) +/obj/effect/decal/cleanable/blood/xeno, +/turf/open/mars_cave{ + icon_state = "mars_cave_7" + }, +/area/bigredv2/caves_lambda) "ag" = ( -/turf/open/mars{ - icon_state = "mars_dirt_9" +/obj/structure/barricade/wooden, +/turf/open/floor{ + dir = 4; + icon_state = "darkpurplecorners2" }, -/area/bigredv2/outside/c) +/area/bigredv2/caves/lambda/breakroom) "ah" = ( -/turf/open/mars{ - icon_state = "mars_dirt_13" +/obj/effect/glowshroom, +/turf/open/mars_cave{ + icon_state = "mars_cave_10" }, -/area/bigredv2/outside/c) +/area/bigredv2/caves_lambda) "ai" = ( -/turf/open/mars{ - icon_state = "mars_dirt_10" +/turf/open/mars_cave{ + icon_state = "mars_cave_6" }, -/area/bigredv2/outside/c) +/area/bigredv2/caves_lambda) "aj" = ( -/turf/open/mars{ - icon_state = "mars_dirt_14" +/obj/effect/landmark/structure_spawner/setup/distress/xeno_weed_node, +/turf/open/mars_cave{ + icon_state = "mars_cave_11" }, -/area/bigredv2/outside/c) +/area/bigredv2/caves_lambda) "ak" = ( +/turf/closed/wall/solaris/rock, +/area/bigredv2/caves) +"al" = ( +/obj/structure/sign/safety/restrictedarea{ + pixel_x = 8; + pixel_y = -32 + }, +/obj/effect/landmark/structure_spawner/setup/distress/xeno_weed_node, /turf/open/floor{ - dir = 1; - icon_state = "asteroidwarning" + dir = 4; + icon_state = "darkpurplecorners2" }, -/area/bigredv2/outside/c) -"al" = ( -/turf/closed/wall/solaris/reinforced, -/area/bigredv2/outside/storage) +/area/bigredv2/caves/lambda/breakroom) "am" = ( -/obj/structure/largecrate/hunter_games_guns/mediocre, -/turf/open/floor, -/area/bigredv2/outside/storage) +/obj/structure/machinery/door_control{ + id = "sci_br"; + name = "Observation Shutters"; + pixel_y = 28 + }, +/obj/effect/decal/cleanable/blood/gibs/xeno, +/turf/open/floor{ + icon_state = "darkpurplecorners2" + }, +/area/bigredv2/caves/lambda/breakroom) "an" = ( -/obj/structure/largecrate/supply/floodlights, -/turf/open/floor, -/area/bigredv2/outside/storage) +/obj/effect/decal/cleanable/mucus, +/obj/structure/machinery/door_control{ + id = "sci_br"; + name = "Observation Shutters"; + pixel_y = 28 + }, +/obj/effect/landmark/corpsespawner/pmc, +/obj/effect/decal/cleanable/vomit, +/turf/open/floor{ + icon_state = "darkpurplecorners2" + }, +/area/bigredv2/caves/lambda/breakroom) "ao" = ( -/turf/open/floor, -/area/bigredv2/outside/storage) +/obj/effect/decal/cleanable/blood/drip{ + pixel_x = -8; + pixel_y = 6 + }, +/turf/open/floor{ + icon_state = "darkpurplecorners2" + }, +/area/bigredv2/caves/lambda/breakroom) "ap" = ( -/obj/structure/surface/table, -/obj/effect/spawner/random/technology_scanner, -/turf/open/floor, -/area/bigredv2/outside/storage) +/obj/structure/sign/safety/bulkhead_door, +/turf/closed/wall/solaris/reinforced, +/area/bigredv2/caves/lambda/breakroom) "aq" = ( -/obj/structure/surface/table, -/obj/structure/machinery/power/apc{ - dir = 1 +/turf/open/floor/almayer{ + dir = 1; + icon_state = "w-y0" }, -/obj/effect/spawner/random/powercell, -/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot, -/turf/open/floor, -/area/bigredv2/outside/storage) +/area/bigredv2/caves/lambda/breakroom) "ar" = ( -/obj/structure/surface/table, -/obj/structure/machinery/light{ - dir = 1 +/obj/structure/filingcabinet{ + density = 0; + layer = 3.1; + pixel_x = 8; + pixel_y = 18 + }, +/obj/structure/filingcabinet{ + density = 0; + pixel_x = -8; + pixel_y = 20 + }, +/turf/open/floor/strata{ + dir = 4; + icon_state = "white_cyan1" }, -/obj/effect/spawner/random/tech_supply, -/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot, -/turf/open/floor, -/area/bigredv2/outside/storage) +/area/bigredv2/caves/lambda/breakroom) "as" = ( -/obj/structure/surface/table, -/obj/effect/spawner/random/tool, -/turf/open/floor, -/area/bigredv2/outside/storage) +/obj/structure/filingcabinet{ + pixel_x = 7 + }, +/obj/structure/filingcabinet{ + density = 0; + pixel_x = -7; + pixel_y = 19 + }, +/obj/structure/filingcabinet{ + pixel_x = -9 + }, +/turf/open/floor/strata{ + dir = 4; + icon_state = "white_cyan1" + }, +/area/bigredv2/caves/lambda/breakroom) "at" = ( -/obj/structure/surface/table, -/obj/effect/spawner/random/tech_supply, -/turf/open/floor, -/area/bigredv2/outside/storage) +/turf/open/floor/plating/almayer, +/area/bigredv2/caves/lambda/breakroom) "au" = ( -/obj/structure/surface/table, -/obj/effect/spawner/random/toolbox, -/turf/open/floor, -/area/bigredv2/outside/storage) +/turf/open/floor/strata{ + dir = 4; + icon_state = "white_cyan1" + }, +/area/bigredv2/caves/lambda/breakroom) "av" = ( -/obj/structure/surface/table, -/obj/item/tool/extinguisher, -/turf/open/floor, -/area/bigredv2/outside/storage) +/obj/structure/filingcabinet{ + density = 0; + pixel_x = 8; + pixel_y = 20 + }, +/obj/structure/filingcabinet{ + density = 0; + pixel_x = -8; + pixel_y = 16 + }, +/turf/open/floor/strata{ + dir = 4; + icon_state = "white_cyan1" + }, +/area/bigredv2/caves/lambda/breakroom) "aw" = ( -/obj/structure/largecrate/supply/generator, -/turf/open/floor, -/area/bigredv2/outside/storage) +/obj/structure/inflatable/popped/door, +/turf/open/floor{ + icon_state = "darkpurplecorners2" + }, +/area/bigredv2/caves/lambda/breakroom) "ax" = ( -/obj/structure/largecrate/random/secure, -/turf/open/floor, -/area/bigredv2/outside/storage) -"aA" = ( -/obj/structure/pipes/standard/simple/hidden/green{ - dir = 6 +/obj/structure/machinery/light{ + dir = 1 + }, +/obj/effect/decal/cleanable/blood, +/turf/open/floor{ + icon_state = "darkpurplecorners2" }, -/turf/open/floor, -/area/bigredv2/outside/storage) +/area/bigredv2/caves/lambda/breakroom) +"aA" = ( +/turf/template_noop, +/area/template_noop) "aB" = ( -/obj/structure/pipes/standard/simple/hidden/green{ - dir = 4; - layer = 2.4 +/turf/open/floor/almayer{ + dir = 1; + icon_state = "w-y1" }, -/turf/open/floor, -/area/bigredv2/outside/storage) +/area/bigredv2/caves/lambda/breakroom) "aC" = ( -/obj/structure/pipes/standard/simple/hidden/green{ +/obj/structure/machinery/light, +/turf/open/floor{ dir = 4; - layer = 2.4 - }, -/obj/structure/machinery/door/airlock/almayer/secure/colony{ - icon_state = "door_locked"; - locked = 0; - name = "\improper Emergency Vault" + icon_state = "darkpurplecorners2" }, -/turf/open/floor, -/area/bigredv2/outside/storage) +/area/bigredv2/caves/lambda/breakroom) "aD" = ( -/obj/structure/largecrate/supply/supplies/water, -/turf/open/floor, -/area/bigredv2/outside/storage) +/obj/structure/inflatable/popped/door, +/turf/open/floor{ + dir = 4; + icon_state = "darkpurplecorners2" + }, +/area/bigredv2/caves/lambda/breakroom) "aE" = ( -/obj/structure/largecrate/random, -/turf/open/floor, -/area/bigredv2/outside/storage) +/turf/open/floor{ + dir = 4; + icon_state = "darkpurplecorners2" + }, +/area/bigredv2/caves/lambda/breakroom) "aF" = ( -/obj/structure/pipes/standard/simple/hidden/green, -/turf/open/floor, -/area/bigredv2/outside/storage) +/obj/structure/machinery/light{ + dir = 1 + }, +/obj/structure/surface/table/reinforced/prison, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/machinery/door/window/brigdoor/southright, +/obj/item/clothing/accessory/medal/gold{ + pixel_x = 7; + pixel_y = 10 + }, +/obj/item/clothing/accessory/medal/bronze/science{ + pixel_x = -5 + }, +/turf/open/floor/strata{ + dir = 4; + icon_state = "white_cyan1" + }, +/area/bigredv2/caves/lambda/breakroom) "aG" = ( -/obj/structure/largecrate/supply/medicine/medkits, -/turf/open/floor, -/area/bigredv2/outside/storage) +/obj/structure/window/framed/solaris/reinforced, +/obj/structure/machinery/door/poddoor/almayer{ + id = "sci_br"; + name = "\improper Lambda Observation Shutters" + }, +/turf/open/floor/plating, +/area/bigredv2/caves/lambda/breakroom) "aH" = ( -/obj/structure/largecrate/supply/medicine/blood, -/turf/open/floor, -/area/bigredv2/outside/storage) +/obj/structure/barricade/wooden{ + dir = 1; + pixel_y = 7 + }, +/turf/open/floor{ + icon_state = "darkpurplecorners2" + }, +/area/bigredv2/caves/lambda/breakroom) "aI" = ( -/obj/structure/largecrate/supply/medicine/iv, -/turf/open/floor, -/area/bigredv2/outside/storage) +/turf/closed/wall/solaris/reinforced, +/area/bigredv2/caves/lambda/breakroom) "aJ" = ( /obj/structure/machinery/light, -/turf/open/floor, -/area/bigredv2/outside/storage) -"aK" = ( -/obj/structure/pipes/vents/pump{ - dir = 1 - }, -/obj/structure/surface/table, -/obj/effect/spawner/random/toolbox, -/turf/open/floor, -/area/bigredv2/outside/storage) -"aL" = ( -/obj/structure/surface/table, -/obj/structure/machinery/light, -/obj/effect/spawner/random/powercell, -/turf/open/floor, -/area/bigredv2/outside/storage) -"aM" = ( -/obj/structure/pipes/standard/simple/hidden/green{ +/turf/open/floor/strata{ dir = 4; - layer = 2.4 + icon_state = "white_cyan1" }, -/turf/open/floor{ - icon_state = "asteroidwarning" +/area/bigredv2/caves/lambda/breakroom) +"aK" = ( +/obj/structure/surface/table/reinforced/prison, +/obj/structure/machinery/door_control{ + id = "vault"; + name = "Vault Lockdown" }, -/area/bigredv2/outside/s) -"aN" = ( -/obj/structure/pipes/standard/simple/hidden/green{ +/turf/open/floor/strata{ dir = 4; - layer = 2.4 - }, -/turf/open/floor{ - dir = 1; - icon_state = "asteroidfloor" + icon_state = "white_cyan1" }, -/area/bigredv2/outside/s) -"aO" = ( -/obj/structure/pipes/standard/manifold/hidden/green{ - dir = 1 +/area/bigredv2/caves/lambda/breakroom) +"aL" = ( +/obj/structure/surface/table/reinforced/prison, +/obj/item/spacecash/c1000, +/obj/item/spacecash/c1000, +/obj/item/spacecash/c1000, +/obj/item/spacecash/c1000, +/turf/open/floor/strata{ + dir = 4; + icon_state = "white_cyan1" }, -/turf/open/floor{ +/area/bigredv2/caves/lambda/breakroom) +"aM" = ( +/turf/open/floor/almayer{ dir = 1; - icon_state = "asteroidfloor" + icon_state = "w-y2" }, -/area/bigredv2/outside/s) +/area/bigredv2/caves/lambda/breakroom) +"aN" = ( +/turf/open/mars_cave, +/area/bigredv2/caves_lambda) "aP" = ( -/turf/open/mars{ - icon_state = "mars_dirt_3" +/turf/open/mars_cave{ + icon_state = "mars_cave_7" }, -/area/bigredv2/outside/s) +/area/bigredv2/caves_lambda) "aQ" = ( /turf/open/mars_cave{ - icon_state = "mars_dirt_4" + icon_state = "mars_cave_18" }, -/area/bigredv2/outside/s) +/area/bigredv2/caves_lambda) "aR" = ( -/turf/open/floor{ - dir = 8; - icon_state = "asteroidwarning" +/obj/structure/filingcabinet{ + density = 0; + pixel_x = 8; + pixel_y = 19 }, -/area/bigredv2/outside/s) -"aS" = ( -/obj/structure/pipes/standard/simple/hidden/green, -/turf/open/floor{ +/obj/structure/filingcabinet{ + density = 0; + pixel_x = -9; + pixel_y = 20 + }, +/turf/open/floor/strata{ dir = 4; - icon_state = "asteroidwarning" + icon_state = "white_cyan1" + }, +/area/bigredv2/caves/lambda/breakroom) +"aS" = ( +/obj/effect/glowshroom, +/turf/open/mars_cave{ + icon_state = "mars_cave_2" }, -/area/bigredv2/outside/s) +/area/bigredv2/caves_lambda) "aT" = ( -/turf/open/mars, -/area/bigredv2/outside/s) -"aU" = ( -/turf/open/mars{ - icon_state = "mars_dirt_11" +/turf/open/mars_cave{ + icon_state = "mars_cave_4" }, -/area/bigredv2/outside/s) +/area/bigredv2/caves_lambda) "aV" = ( -/turf/open/mars{ - icon_state = "mars_dirt_9" +/obj/effect/landmark/structure_spawner/setup/distress/xeno_weed_node, +/turf/open/mars_cave{ + icon_state = "mars_cave_2" }, -/area/bigredv2/outside/s) +/area/bigredv2/caves_lambda) "aW" = ( -/turf/open/mars{ - icon_state = "mars_dirt_8" +/obj/structure/machinery/door/airlock/almayer/secure/reinforced/colony{ + icon_state = "door_locked" }, -/area/bigredv2/outside/s) +/obj/structure/machinery/door/poddoor/almayer/closed{ + dir = 4; + id = "vault"; + name = "Vault Lockdown" + }, +/turf/open/floor{ + icon_state = "delivery" + }, +/area/bigredv2/caves/lambda/breakroom) "aX" = ( -/turf/open/mars{ - icon_state = "mars_dirt_10" +/turf/open/mars_cave{ + icon_state = "mars_cave_8" }, -/area/bigredv2/outside/s) +/area/bigredv2/caves_lambda) "aY" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor{ - dir = 8; - icon_state = "asteroidwarning" +/turf/open/mars_cave{ + icon_state = "mars_cave_10" }, -/area/bigredv2/outside/s) +/area/bigredv2/caves_lambda) "aZ" = ( -/turf/open/mars{ - icon_state = "mars_dirt_12" +/turf/open/mars_cave{ + icon_state = "mars_cave_5" }, -/area/bigredv2/outside/s) +/area/bigredv2/caves_lambda) "ba" = ( -/obj/effect/landmark/crap_item, -/turf/open/mars, -/area/bigredv2/outside/s) +/turf/open/mars_cave{ + icon_state = "mars_cave_2" + }, +/area/bigredv2/caves_lambda) +"vm" = ( +/obj/item/shard{ + icon_state = "small" + }, +/turf/open/mars_cave{ + icon_state = "mars_cave_18" + }, +/area/bigredv2/caves_lambda) "zP" = ( -/obj/structure/surface/table, -/obj/effect/spawner/random/technology_scanner, -/obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot, -/turf/open/floor, -/area/bigredv2/outside/storage) +/obj/effect/glowshroom, +/turf/open/mars_cave{ + icon_state = "mars_cave_5" + }, +/area/bigredv2/caves_lambda) +"EW" = ( +/obj/structure/machinery/door/poddoor/almayer{ + id = "sci_br"; + name = "\improper Lambda Observation Shutters" + }, +/obj/item/shard{ + icon_state = "medium" + }, +/obj/structure/window_frame/solaris/reinforced, +/turf/open/floor/plating, +/area/bigredv2/caves/lambda/breakroom) +"Gv" = ( +/obj/structure/machinery/door/poddoor/almayer{ + id = "sci_br"; + name = "\improper Lambda Observation Shutters" + }, +/obj/item/shard, +/obj/structure/window_frame/solaris/reinforced, +/turf/open/floor/plating, +/area/bigredv2/caves/lambda/breakroom) +"RW" = ( +/obj/item/shard{ + icon_state = "medium" + }, +/turf/open/mars_cave{ + icon_state = "mars_cave_6" + }, +/area/bigredv2/caves_lambda) (1,1,1) = {" -aa -aa -aa -ak -al -al -al -al -al +aA +aA +aA +aA +aA +aI +am al -aM -aP +aI +aA +aA +aY aT -aX +ak "} (2,1,1) = {" -aa -aa -aa -ak -al -am +aA +aA +aA +aA +zP +aG aw aD aG -al -aM -aP -aT +ai +ai +aZ +ba aX "} (3,1,1) = {" -aa -aa +aA +aA ah -ak -al -an -ax -aE +ai +ai +aG aH -al -aM +aE +aG aP -aT -aX +ba +aP +ai +aZ "} (4,1,1) = {" -aa -aa -ai -ak -al -ao +aA +ae +aP +ba +aZ +aI ax -ao +aC aI -al -aM -aP -aT -aX +ae +RW +ac +ba +aZ "} (5,1,1) = {" -aa -aa ai -ak -al -ao -ao +ai +aj +ad +aZ +aG ao -aJ -al -aM -aQ -aU -aQ +ag +EW +af +ba +ba +ba +aZ "} (6,1,1) = {" -aa -aa +aY ai -ak -al -zP -ao -ao -as -al +ai +ba +ba +aG +aa +aD +Gv +vm aN -aR -aR -aY +aS +ba +aZ "} (7,1,1) = {" -aa -aa -aj +ba +ba ak -al -aq -ao -ao +ak +ak +aI +an +ab ap -al -aO -aS -aS +aA +aA +aP aS +aZ "} (8,1,1) = {" -aa -aa -aa +ba ak -al -ar -ao -ao -as -al -aM -aQ -aQ -aQ +ak +aI +aI +aI +aI +aW +aI +aI +aA +ba +aP +aZ "} (9,1,1) = {" -aa -aa -aa +aZ ak -al +ak +aI +aR as -aA -aF +au +au aK -al -aM -aQ -aQ -aQ +aI +aA +aY +ba +aZ "} (10,1,1) = {" -aa -af -aa ak -al -as -aB -ao +aA +aA +aI au -al -aM -aQ -aQ +at +aq +at +au +aI +aA +aP +ba aZ "} (11,1,1) = {" -ab -aa -aa ak -al +aA +aA +aI +aF at aB -ao -as -al -aM -aQ -aQ -aT +at +aJ +aI +aA +aP +ba +aZ "} (12,1,1) = {" -ac -ab -aa -ak -al +aA +aA +aA +aI au -aB -ao -aL -al +at aM +at +aL +aI +aA aQ aV -aT +ba "} (13,1,1) = {" -ad -ag -aa -ak -al +aA +aA +aA +aI +ar av -aB -ao -at -al -aM -aP -aT +aL +aL +aL +aI +aA +ba +ba ba "} (14,1,1) = {" -ae -aa -aa -ak -al -al -aC -al -al -al -aM -aQ -aW -aT +aA +aA +aA +aI +aI +aI +aI +aI +aI +aI +aA +ba +ba +ba "} diff --git a/maps/map_files/CORSAT/Corsat.dmm b/maps/map_files/CORSAT/Corsat.dmm index b00a12dc86bd..7029d71a6076 100644 --- a/maps/map_files/CORSAT/Corsat.dmm +++ b/maps/map_files/CORSAT/Corsat.dmm @@ -37445,7 +37445,7 @@ /area/corsat/gamma/biodome/virology) "drp" = ( /obj/docking_port/stationary/marine_dropship/lz1{ - name = "Gamma Landing Zone" + name = "LZ1: Gamma Landing Zone" }, /turf/open/floor/plating, /area/corsat/gamma/hangar) @@ -38222,7 +38222,7 @@ /area/corsat/omega/complex) "dUj" = ( /obj/docking_port/stationary/marine_dropship/lz2{ - name = "Sigma Landing Zone" + name = "LZ2: Sigma Landing Zone" }, /turf/open/floor/plating, /area/corsat/sigma/hangar) diff --git a/maps/map_files/FOP_v2_Cellblocks/Prison_Station_FOP.dmm b/maps/map_files/FOP_v2_Cellblocks/Prison_Station_FOP.dmm index 5da17a318887..ba9986948eed 100644 --- a/maps/map_files/FOP_v2_Cellblocks/Prison_Station_FOP.dmm +++ b/maps/map_files/FOP_v2_Cellblocks/Prison_Station_FOP.dmm @@ -5305,7 +5305,7 @@ /area/prison/hanger/research) "aoj" = ( /obj/docking_port/stationary/marine_dropship/lz2{ - name = "Research Landing Zone" + name = "LZ2: Research Landing Zone" }, /turf/open/floor/plating, /area/prison/hanger/research) @@ -19201,7 +19201,7 @@ /area/prison/hanger/main) "bcF" = ( /obj/docking_port/stationary/marine_dropship/lz1{ - name = "Hangar Landing Zone" + name = "LZ1: Hangar Landing Zone" }, /turf/open/floor/plating, /area/prison/hanger/main) diff --git a/maps/map_files/FOP_v3_Sciannex/Fiorina_SciAnnex.dmm b/maps/map_files/FOP_v3_Sciannex/Fiorina_SciAnnex.dmm index 7238b5ab66cb..bffe3f990722 100644 --- a/maps/map_files/FOP_v3_Sciannex/Fiorina_SciAnnex.dmm +++ b/maps/map_files/FOP_v3_Sciannex/Fiorina_SciAnnex.dmm @@ -6510,7 +6510,7 @@ /area/fiorina/station/disco) "dYp" = ( /obj/docking_port/stationary/marine_dropship/lz1{ - name = "Hangar Landing Zone" + name = "LZ1: Hangar Landing Zone" }, /turf/open/floor/plating/prison, /area/fiorina/lz/near_lzI) diff --git a/maps/map_files/Ice_Colony_v2/Ice_Colony_v2.dmm b/maps/map_files/Ice_Colony_v2/Ice_Colony_v2.dmm index 73bac536752f..485760ebc2af 100644 --- a/maps/map_files/Ice_Colony_v2/Ice_Colony_v2.dmm +++ b/maps/map_files/Ice_Colony_v2/Ice_Colony_v2.dmm @@ -34904,7 +34904,7 @@ /area/ice_colony/surface/hangar/alpha) "sto" = ( /obj/docking_port/stationary/marine_dropship/lz1{ - name = "Hangar Landing Zone" + name = "LZ1: Hangar Landing Zone" }, /turf/open/floor/plating, /area/ice_colony/exterior/surface/landing_pad) diff --git a/maps/map_files/Ice_Colony_v3/Shivas_Snowball.dmm b/maps/map_files/Ice_Colony_v3/Shivas_Snowball.dmm index f5e2f597ef24..60847e12bae1 100644 --- a/maps/map_files/Ice_Colony_v3/Shivas_Snowball.dmm +++ b/maps/map_files/Ice_Colony_v3/Shivas_Snowball.dmm @@ -17375,7 +17375,7 @@ /area/shiva/interior/caves/s_lz2) "mlX" = ( /obj/docking_port/stationary/marine_dropship/lz2{ - name = "Research Landing Zone" + name = "LZ2: Research Landing Zone" }, /turf/open/floor/plating, /area/shiva/exterior/lz2_fortress) diff --git a/maps/map_files/Kutjevo/Kutjevo.dmm b/maps/map_files/Kutjevo/Kutjevo.dmm index 4eb4d6fd77e9..2e1ebb3ea204 100644 --- a/maps/map_files/Kutjevo/Kutjevo.dmm +++ b/maps/map_files/Kutjevo/Kutjevo.dmm @@ -576,6 +576,10 @@ }, /turf/open/auto_turf/sand/layer0, /area/kutjevo/exterior/scrubland) +"aKg" = ( +/obj/structure/tunnel, +/turf/open/auto_turf/sand/layer0, +/area/kutjevo/interior/colony_South) "aKl" = ( /obj/structure/machinery/landinglight/ds1{ dir = 1 @@ -984,7 +988,7 @@ "bsq" = ( /obj/structure/tunnel, /turf/open/auto_turf/sand/layer0, -/area/kutjevo/interior/colony_central) +/area/kutjevo/interior/colony_north) "bsw" = ( /obj/structure/platform/kutjevo/smooth{ dir = 8 @@ -4883,7 +4887,7 @@ /area/kutjevo/interior/oob) "gnj" = ( /obj/docking_port/stationary/marine_dropship/lz1{ - name = "Dunes Landing Zone" + name = "LZ1: Dunes Landing Zone" }, /turf/open/floor/plating/kutjevo, /area/shuttle/drop1/kutjevo) @@ -8316,7 +8320,7 @@ /area/kutjevo/interior/power/comms) "lkY" = ( /obj/docking_port/stationary/marine_dropship/lz2{ - name = "NW Colony Landing Zone" + name = "LZ2: NW Colony Landing Zone" }, /turf/open/floor/plating/kutjevo, /area/shuttle/drop2/kutjevo) @@ -8853,11 +8857,9 @@ /turf/open/floor/almayer/research/containment/floor2, /area/kutjevo/interior/complex/med/auto_doc) "lZT" = ( -/obj/structure/tunnel{ - id = "hole1" - }, -/turf/open/auto_turf/sand/layer2, -/area/kutjevo/interior/colony_north) +/obj/structure/tunnel, +/turf/open/auto_turf/sand/layer1, +/area/kutjevo/exterior/construction) "lZZ" = ( /obj/structure/platform_decoration/kutjevo{ dir = 4 @@ -9796,11 +9798,9 @@ /turf/open/desert/desert_shore/shore_corner2, /area/kutjevo/exterior/runoff_river) "niP" = ( -/obj/structure/tunnel{ - id = "hole3" - }, +/obj/structure/tunnel, /turf/open/auto_turf/sand/layer0, -/area/kutjevo/exterior/complex_border/botany_medical_cave) +/area/kutjevo/exterior/runoff_river) "niT" = ( /obj/structure/flora/grass/tallgrass/desert/corner{ dir = 1 @@ -11982,6 +11982,10 @@ }, /turf/open/floor/kutjevo/colors/cyan/inner_corner, /area/kutjevo/interior/complex/med/triage) +"pVH" = ( +/obj/structure/tunnel, +/turf/open/auto_turf/sand/layer2, +/area/kutjevo/exterior/runoff_river) "pWe" = ( /obj/structure/platform_decoration/kutjevo/rock{ dir = 1 @@ -12502,11 +12506,9 @@ }, /area/kutjevo/interior/oob) "qLV" = ( -/obj/structure/tunnel{ - id = "hole2" - }, -/turf/open/auto_turf/sand/layer1, -/area/kutjevo/exterior/stonyfields) +/obj/structure/tunnel, +/turf/open/auto_turf/sand/layer0, +/area/kutjevo/interior/colony_S_East) "qMC" = ( /obj/structure/machinery/light{ dir = 4 @@ -16058,11 +16060,9 @@ /turf/open/floor/kutjevo/multi_tiles, /area/kutjevo/exterior/runoff_bridge) "vzy" = ( -/obj/structure/tunnel{ - id = "hole4" - }, -/turf/open/auto_turf/sand/layer0, -/area/kutjevo/exterior/scrubland) +/obj/structure/tunnel, +/turf/open/gm/dirtgrassborder2, +/area/kutjevo/exterior/complex_border/med_park) "vzC" = ( /obj/structure/platform/kutjevo{ dir = 1 @@ -28074,7 +28074,7 @@ sYd bXl bXl bXl -vzy +bXl sYd bXl sYd @@ -31570,7 +31570,7 @@ bEp bEp bEp bEp -tKY +niP dic dic dic @@ -33635,7 +33635,7 @@ xJg xJg xJg xJg -qLV +xJg jfQ jfQ xJg @@ -34919,7 +34919,7 @@ jhS jhS jhS wff -niP +wff wff wff jhS @@ -35547,7 +35547,7 @@ dxF mxB mxB mxB -quy +vzy tUm wYp bGV @@ -37793,7 +37793,7 @@ nKh nKh nKh wtH -sbX +pVH mtS fPH dTM @@ -42736,7 +42736,7 @@ bkR wTt bkR bEH -lZT +bEH hUk hUk hUk @@ -43083,7 +43083,7 @@ hUk hUk hUk hUk -xWK +lZT nlA xWK xWK @@ -46807,7 +46807,7 @@ wXd wXd wXd wXd -mMH +aKg bpj npL bpj @@ -48730,7 +48730,7 @@ bkR bkR bkR wTt -wTt +bsq hUk hUk hUk @@ -50104,7 +50104,7 @@ kZz feg feg feg -bsq +uiK mnT mnT mnT @@ -54310,7 +54310,7 @@ ptY ebB ebB bOc -ptY +qLV dxF dxF dxF diff --git a/maps/map_files/LV522_Chances_Claim/LV522_Chances_Claim.dmm b/maps/map_files/LV522_Chances_Claim/LV522_Chances_Claim.dmm index 50240fcd8d55..5a4fa0fbdf91 100644 --- a/maps/map_files/LV522_Chances_Claim/LV522_Chances_Claim.dmm +++ b/maps/map_files/LV522_Chances_Claim/LV522_Chances_Claim.dmm @@ -1030,7 +1030,7 @@ /area/lv522/outdoors/colony_streets/north_east_street) "aDE" = ( /obj/docking_port/stationary/marine_dropship/lz2{ - name = "Southeast Landing Zone" + name = "LZ2: Southeast Landing Zone" }, /turf/open/floor/plating, /area/shuttle/drop2/lv522) @@ -7115,7 +7115,7 @@ /area/lv522/indoors/a_block/dorms) "dos" = ( /obj/docking_port/stationary/marine_dropship/lz1{ - name = "Southwest Landing Zone" + name = "LZ1: Southwest Landing Zone" }, /turf/open/floor/plating, /area/shuttle/drop1/lv522) diff --git a/maps/map_files/LV624/LV624.dmm b/maps/map_files/LV624/LV624.dmm index af507ab907fd..9c84577bbbdd 100644 --- a/maps/map_files/LV624/LV624.dmm +++ b/maps/map_files/LV624/LV624.dmm @@ -5862,7 +5862,7 @@ /area/lv624/ground/river/west_river) "aBo" = ( /obj/docking_port/stationary/marine_dropship/lz2{ - name = "Robotics Landing Zone" + name = "LZ2: Robotics Landing Zone" }, /turf/open/floor/plating, /area/lv624/lazarus/landing_zones/lz2) @@ -8590,7 +8590,7 @@ /area/lv624/ground/jungle/south_west_jungle) "aLz" = ( /obj/docking_port/stationary/marine_dropship/lz1{ - name = "Nexus Landing Zone" + name = "LZ1: Nexus Landing Zone" }, /turf/open/floor/plating, /area/lv624/lazarus/landing_zones/lz1) diff --git a/maps/map_files/New_Varadero/New_Varadero.dmm b/maps/map_files/New_Varadero/New_Varadero.dmm index aeddb1aa1021..656c4a7f48b1 100644 --- a/maps/map_files/New_Varadero/New_Varadero.dmm +++ b/maps/map_files/New_Varadero/New_Varadero.dmm @@ -788,7 +788,7 @@ /area/varadero/exterior/pool) "aAX" = ( /obj/docking_port/stationary/marine_dropship/lz2{ - name = "LZ2 - Palm Airfield" + name = "LZ2: Palm Airfield" }, /turf/open/gm/dirt, /area/varadero/exterior/lz2_near) @@ -23224,7 +23224,7 @@ /area/varadero/interior/security) "oXw" = ( /obj/docking_port/stationary/marine_dropship/lz1{ - name = "LZ1 - Pontoon Dock" + name = "LZ1: Pontoon Dock" }, /turf/open/floor/plating/icefloor, /area/varadero/exterior/lz1_near) diff --git a/maps/map_files/USS_Almayer/USS_Almayer.dmm b/maps/map_files/USS_Almayer/USS_Almayer.dmm index 25926395d624..263bce521d2a 100644 --- a/maps/map_files/USS_Almayer/USS_Almayer.dmm +++ b/maps/map_files/USS_Almayer/USS_Almayer.dmm @@ -10698,6 +10698,15 @@ icon_state = "dark_sterile" }, /area/almayer/living/numbertwobunks) +"aLA" = ( +/obj/item/trash/uscm_mre, +/obj/structure/bed/chair/comfy/charlie{ + dir = 1 + }, +/turf/open/floor/almayer{ + icon_state = "emeraldfull" + }, +/area/almayer/living/briefing) "aLB" = ( /turf/closed/wall/almayer, /area/almayer/hallways/starboard_hallway) @@ -12021,12 +12030,25 @@ }, /area/almayer/medical/upper_medical) "aSh" = ( -/obj/structure/bed/chair/comfy/alpha{ - dir = 1 +/obj/structure/surface/table/almayer, +/obj/item/device/flashlight/lamp{ + layer = 3.3; + pixel_x = 15 + }, +/obj/item/paper_bin/uscm{ + pixel_x = -7; + pixel_y = 6 + }, +/obj/item/tool/pen{ + pixel_x = -11; + pixel_y = 5 + }, +/obj/item/tool/pen{ + pixel_x = -10; + pixel_y = -2 }, -/obj/item/prop/helmetgarb/helmet_nvg/cosmetic, /turf/open/floor/almayer{ - icon_state = "redfull" + icon_state = "plate" }, /area/almayer/living/briefing) "aSl" = ( @@ -20164,6 +20186,28 @@ "bHP" = ( /turf/open/floor/plating/almayer, /area/almayer/shipboard/weapon_room) +"bHS" = ( +/obj/structure/surface/table/almayer, +/obj/item/trash/USCMtray{ + pixel_y = 4 + }, +/obj/item/trash/USCMtray{ + pixel_y = 6 + }, +/obj/item/trash/USCMtray{ + pixel_y = 8 + }, +/obj/item/trash/USCMtray{ + pixel_y = 10 + }, +/obj/item/device/flashlight/lamp{ + layer = 3.3; + pixel_x = 15 + }, +/turf/open/floor/almayer{ + icon_state = "emeraldfull" + }, +/area/almayer/living/briefing) "bHT" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -23671,18 +23715,10 @@ /area/almayer/engineering/engineering_workshop) "bXc" = ( /obj/structure/surface/table/almayer, -/obj/item/reagent_container/food/snacks/mre_pack/xmas2{ - pixel_x = 5; +/obj/structure/machinery/microwave{ pixel_y = 9 }, -/obj/effect/landmark/map_item{ - layer = 3.03; - pixel_x = -7; - pixel_y = 4 - }, -/obj/item/reagent_container/food/snacks/mre_pack/xmas3{ - pixel_x = 5 - }, +/obj/item/reagent_container/food/snacks/packaged_burger, /turf/open/floor/almayer{ icon_state = "plate" }, @@ -25020,14 +25056,14 @@ }, /area/almayer/engineering/lower_engineering) "ccF" = ( -/obj/structure/bed/chair/comfy/alpha{ - dir = 1 - }, /obj/structure/machinery/light{ dir = 8 }, +/obj/structure/bed/chair/comfy/alpha{ + dir = 1 + }, /turf/open/floor/almayer{ - icon_state = "redfull" + icon_state = "plate" }, /area/almayer/living/briefing) "ccG" = ( @@ -25630,15 +25666,27 @@ /turf/open/floor/almayer, /area/almayer/squads/charlie) "cgz" = ( -/obj/structure/bed/chair/comfy/charlie, /obj/structure/sign/poster{ desc = "Eat an EAT bar! ...Aren't they called MEAT bars?"; icon_state = "poster7"; name = "EAT - poster"; pixel_x = 27 }, +/obj/structure/surface/table/almayer, +/obj/item/paper_bin/uscm{ + pixel_x = 9; + pixel_y = 6 + }, +/obj/item/tool/pen{ + pixel_x = 9; + pixel_y = 9 + }, +/obj/item/tool/pen{ + pixel_x = 9; + pixel_y = 2 + }, /turf/open/floor/almayer{ - icon_state = "emeraldfull" + icon_state = "plate" }, /area/almayer/living/briefing) "cgA" = ( @@ -27319,10 +27367,8 @@ }, /area/almayer/squads/req) "crK" = ( -/obj/structure/bed/chair/comfy/alpha{ - dir = 1 - }, /obj/structure/pipes/vents/pump, +/obj/structure/surface/table/almayer, /turf/open/floor/almayer{ icon_state = "redfull" }, @@ -27352,8 +27398,15 @@ }, /area/almayer/hull/upper_hull/u_m_p) "csG" = ( -/obj/structure/bed/chair/comfy/delta, -/obj/item/trash/popcorn, +/obj/structure/surface/table/almayer, +/obj/item/device/flashlight/lamp{ + pixel_x = 15 + }, +/obj/item/paper, +/obj/item/reagent_container/food/drinks/cans/waterbottle{ + pixel_x = -10; + pixel_y = 4 + }, /turf/open/floor/almayer{ icon_state = "bluefull" }, @@ -27447,6 +27500,15 @@ icon_state = "test_floor4" }, /area/almayer/shipboard/brig/cryo) +"cum" = ( +/obj/structure/pipes/standard/simple/hidden/supply, +/obj/structure/bed/chair/comfy/charlie{ + dir = 4 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/living/briefing) "cus" = ( /obj/docking_port/stationary/lifeboat_dock/starboard, /turf/open/floor/almayer_hull{ @@ -27592,6 +27654,13 @@ icon_state = "test_floor4" }, /area/almayer/shipboard/brig/main_office) +"cxZ" = ( +/obj/structure/bed/chair/comfy/delta, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/living/briefing) "cyo" = ( /obj/structure/machinery/vending/cigarette, /turf/open/floor/almayer{ @@ -27959,7 +28028,9 @@ pixel_x = -27 }, /obj/structure/pipes/standard/simple/hidden/supply, -/turf/open/floor/almayer, +/turf/open/floor/almayer{ + icon_state = "plate" + }, /area/almayer/living/briefing) "cEO" = ( /obj/structure/largecrate/supply/floodlights, @@ -28116,6 +28187,13 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/hull/lower_hull/l_f_s) +"cIl" = ( +/obj/structure/pipes/standard/simple/hidden/supply, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/living/briefing) "cIr" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -28261,11 +28339,17 @@ }, /area/almayer/engineering/upper_engineering/port) "cKX" = ( -/obj/structure/platform, /obj/structure/pipes/vents/scrubber{ dir = 4 }, -/turf/open/floor/almayer, +/obj/structure/surface/table/almayer, +/obj/structure/machinery/computer/emails{ + pixel_x = 2; + pixel_y = 5 + }, +/turf/open/floor/almayer{ + icon_state = "bluefull" + }, /area/almayer/living/briefing) "cKY" = ( /obj/structure/machinery/light, @@ -29357,12 +29441,13 @@ }, /area/almayer/hallways/starboard_umbilical) "diw" = ( -/obj/structure/bed/chair/comfy/delta, /obj/structure/machinery/light{ dir = 8 }, +/obj/structure/bed/chair/comfy/delta, +/obj/effect/decal/cleanable/dirt, /turf/open/floor/almayer{ - icon_state = "bluefull" + icon_state = "plate" }, /area/almayer/living/briefing) "diz" = ( @@ -29547,10 +29632,10 @@ }, /area/almayer/living/briefing) "dkH" = ( -/obj/structure/bed/chair/comfy/delta, /obj/structure/pipes/standard/simple/hidden/supply{ dir = 6 }, +/obj/structure/bed/chair/comfy/delta, /turf/open/floor/almayer{ icon_state = "bluefull" }, @@ -29949,12 +30034,12 @@ "drp" = ( /obj/structure/toilet{ dir = 8; - pixel_y = 8; - layer = 2.9 + layer = 2.9; + pixel_y = 8 }, /obj/structure/window{ - pixel_y = -2; - layer = 2.95 + layer = 2.95; + pixel_y = -2 }, /turf/open/floor/plating/plating_catwalk, /area/almayer/living/commandbunks) @@ -30391,7 +30476,9 @@ dir = 8 }, /obj/structure/pipes/standard/simple/hidden/supply, -/turf/open/floor/almayer, +/turf/open/floor/almayer{ + icon_state = "plate" + }, /area/almayer/living/briefing) "dAX" = ( /obj/structure/machinery/camera/autoname/almayer{ @@ -31506,6 +31593,17 @@ }, /turf/open/floor/almayer, /area/almayer/living/chapel) +"dYH" = ( +/obj/structure/machinery/light{ + dir = 1 + }, +/obj/structure/bed/chair/comfy/alpha{ + dir = 8 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/living/briefing) "dYK" = ( /obj/item/folder/red{ desc = "A red folder. The previous contents are a mystery, though the number 28 has been written on the inside of each flap numerous times. Smells faintly of cough syrup."; @@ -32256,6 +32354,22 @@ dir = 1 }, /area/almayer/medical/containment/cell) +"elX" = ( +/obj/structure/surface/table/almayer, +/obj/item/trash/uscm_mre, +/obj/effect/decal/cleanable/dirt, +/obj/item/device/flashlight/lamp{ + layer = 3.3; + pixel_x = 15 + }, +/obj/item/reagent_container/food/drinks/cans/souto/diet/grape{ + pixel_x = -7; + pixel_y = 10 + }, +/turf/open/floor/almayer{ + icon_state = "emeraldfull" + }, +/area/almayer/living/briefing) "eme" = ( /obj/structure/pipes/vents/pump{ dir = 4 @@ -32398,10 +32512,6 @@ }, /area/almayer/hallways/aft_hallway) "epq" = ( -/obj/structure/stairs/perspective{ - dir = 1; - icon_state = "p_stair_full" - }, /obj/structure/sign/poster{ desc = "One of those hot, tanned babes back the beaches of good ol' Earth."; icon_state = "poster12"; @@ -32409,7 +32519,13 @@ pixel_x = 27; serial_number = 12 }, -/turf/open/floor/almayer, +/obj/structure/bed/chair/comfy/delta{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/almayer{ + icon_state = "plate" + }, /area/almayer/living/briefing) "epu" = ( /obj/structure/machinery/door/firedoor/border_only/almayer, @@ -32722,27 +32838,27 @@ "euM" = ( /obj/structure/surface/table/woodentable/fancy, /obj/item/paper_bin/uscm{ - pixel_y = 7; - pixel_x = -17 + pixel_x = -17; + pixel_y = 7 }, /obj/item/tool/pen/clicky{ pixel_x = -13; pixel_y = -1 }, /obj/item/tool/pen/clicky{ - pixel_y = 5; - pixel_x = -13 + pixel_x = -13; + pixel_y = 5 }, /obj/structure/machinery/door_control{ id = "CO-Office"; name = "Door Control"; normaldoorcontrol = 1; - req_access_txt = "31"; - pixel_y = 7 + pixel_y = 7; + req_access_txt = "31" }, /obj/item/ashtray/bronze{ - pixel_y = 1; - pixel_x = 12 + pixel_x = 12; + pixel_y = 1 }, /turf/open/floor/carpet, /area/almayer/living/commandbunks) @@ -33140,8 +33256,6 @@ }, /area/almayer/lifeboat_pumps/south2) "eCS" = ( -/obj/structure/bed/chair/comfy/delta, -/obj/item/trash/popcorn, /obj/structure/pipes/standard/manifold/hidden/supply{ dir = 1 }, @@ -34419,6 +34533,17 @@ icon_state = "sterile_green_side" }, /area/almayer/medical/operating_room_two) +"ffl" = ( +/obj/structure/surface/table/almayer, +/obj/effect/landmark/map_item, +/obj/item/paper_bin/uscm{ + pixel_x = -7; + pixel_y = 6 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/living/briefing) "ffE" = ( /turf/open/floor/almayer/no_build{ icon_state = "plating" @@ -34559,17 +34684,17 @@ "fiP" = ( /obj/structure/surface/table/woodentable/fancy, /obj/item/storage/fancy/cigar{ - pixel_y = 2; layer = 3.04; - pixel_x = -2 + pixel_x = -2; + pixel_y = 2 }, /obj/item/reagent_container/food/drinks/bottle/sake{ pixel_x = -11; pixel_y = 16 }, /obj/item/reagent_container/food/drinks/bottle/sake{ - pixel_y = 16; - pixel_x = -2 + pixel_x = -2; + pixel_y = 16 }, /obj/item/reagent_container/food/drinks/bottle/sake{ pixel_x = 7; @@ -35067,16 +35192,16 @@ /area/almayer/hull/upper_hull/u_f_s) "fuR" = ( /obj/structure/bed/bedroll{ - name = "cat bed"; desc = "A bed of cotton fabric, purposely made for a cat to comfortably sleep on."; + name = "cat bed"; pixel_y = 0 }, /mob/living/simple_animal/cat/Jones{ dir = 8 }, /obj/structure/machinery/firealarm{ - pixel_y = 28; - pixel_x = -1 + pixel_x = -1; + pixel_y = 28 }, /turf/open/floor/wood/ship, /area/almayer/living/commandbunks) @@ -35391,6 +35516,15 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/command/lifeboat) +"fCt" = ( +/obj/structure/bed/chair/comfy/delta{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/living/briefing) "fCL" = ( /obj/structure/pipes/standard/simple/hidden/supply{ dir = 4 @@ -35640,6 +35774,17 @@ }, /turf/open/floor/plating, /area/almayer/hull/lower_hull/l_f_p) +"fHe" = ( +/obj/structure/surface/table/almayer, +/obj/item/device/flashlight/lamp{ + layer = 3.3; + pixel_x = 15 + }, +/obj/item/prop/helmetgarb/helmet_nvg/cosmetic, +/turf/open/floor/almayer{ + icon_state = "redfull" + }, +/area/almayer/living/briefing) "fHh" = ( /obj/structure/disposalpipe/segment{ dir = 8; @@ -35970,6 +36115,17 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/hallways/hangar) +"fNu" = ( +/obj/structure/surface/table/almayer, +/obj/item/paper, +/obj/item/tool/pen{ + pixel_x = -5; + pixel_y = 2 + }, +/turf/open/floor/almayer{ + icon_state = "redfull" + }, +/area/almayer/living/briefing) "fNA" = ( /obj/structure/closet/fireaxecabinet{ pixel_y = 32 @@ -36510,6 +36666,12 @@ icon_state = "plate" }, /area/almayer/hull/upper_hull/u_f_p) +"gcw" = ( +/obj/structure/bed/chair/comfy/bravo, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/living/briefing) "gcK" = ( /obj/structure/machinery/light/small{ dir = 1 @@ -36913,7 +37075,10 @@ /obj/structure/pipes/standard/manifold/hidden/supply{ dir = 8 }, -/turf/open/floor/almayer, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/almayer{ + icon_state = "plate" + }, /area/almayer/living/briefing) "gkK" = ( /obj/structure/pipes/standard/simple/hidden/supply, @@ -36993,6 +37158,16 @@ icon_state = "plate" }, /area/almayer/shipboard/starboard_point_defense) +"gmp" = ( +/obj/structure/surface/table/almayer, +/obj/item/device/flashlight/lamp{ + layer = 3.3; + pixel_x = 15 + }, +/turf/open/floor/almayer{ + icon_state = "redfull" + }, +/area/almayer/living/briefing) "gms" = ( /obj/structure/pipes/standard/simple/hidden/supply, /turf/open/floor/almayer{ @@ -37929,17 +38104,24 @@ /area/almayer/command/combat_correspondent) "gGo" = ( /obj/structure/surface/table/almayer, -/obj/effect/landmark/map_item{ - pixel_x = -8 +/obj/structure/machinery/firealarm{ + pixel_y = 28 }, -/obj/item/toy/plush/therapy/red{ - desc = "A USCM approved plush doll. It's not soft and hardly comforting!"; - force = 15; - layer = 4.1; - name = "Sergeant Huggs"; - pixel_x = 7; - pixel_y = -1; - throwforce = 15 +/obj/structure/prop/holidays/string_lights{ + dir = 8; + pixel_x = 29 + }, +/obj/item/reagent_container/food/condiment/hotsauce/cholula{ + pixel_x = 10; + pixel_y = 14 + }, +/obj/item/trash/USCMtray{ + pixel_x = -4; + pixel_y = 4 + }, +/obj/item/reagent_container/food/snacks/hotdog{ + pixel_x = -7; + pixel_y = 5 }, /turf/open/floor/almayer{ icon_state = "plate" @@ -38112,10 +38294,10 @@ }, /area/almayer/shipboard/port_missiles) "gKH" = ( -/obj/structure/bed/chair/comfy/charlie, /obj/item/trash/uscm_mre, +/obj/structure/bed/chair/comfy/charlie, /turf/open/floor/almayer{ - icon_state = "emeraldfull" + icon_state = "plate" }, /area/almayer/living/briefing) "gKJ" = ( @@ -38295,7 +38477,6 @@ }, /area/almayer/engineering/engine_core) "gNi" = ( -/obj/structure/bed/chair/comfy/delta, /obj/structure/pipes/standard/simple/hidden/supply{ dir = 4 }, @@ -38328,6 +38509,18 @@ /obj/effect/spawner/random/tool, /turf/open/floor/plating/plating_catwalk, /area/almayer/hull/lower_hull/l_m_p) +"gOm" = ( +/obj/structure/pipes/standard/simple/hidden/supply{ + dir = 6 + }, +/obj/structure/bed/chair/comfy/bravo{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/living/briefing) "gOs" = ( /obj/effect/decal/warning_stripes{ icon_state = "N"; @@ -38605,6 +38798,18 @@ /obj/structure/pipes/standard/manifold/hidden/supply, /turf/open/floor/plating/plating_catwalk, /area/almayer/lifeboat_pumps/north2) +"gVm" = ( +/obj/structure/bed/chair/comfy/bravo{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/sign/arcturianstopsign{ + pixel_y = 32 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/living/briefing) "gVq" = ( /obj/structure/machinery/light, /obj/effect/decal/warning_stripes{ @@ -39344,6 +39549,13 @@ icon_state = "test_floor4" }, /area/almayer/living/grunt_rnr) +"hjT" = ( +/obj/structure/bed/chair/comfy/alpha, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/living/briefing) "hki" = ( /obj/structure/machinery/cm_vending/sorted/tech/electronics_storage, /turf/open/floor/almayer{ @@ -39516,6 +39728,17 @@ icon_state = "sterile_green" }, /area/almayer/medical/hydroponics) +"hnH" = ( +/obj/structure/surface/table/almayer, +/obj/effect/decal/cleanable/dirt, +/obj/item/prop/magazine/boots/n117{ + pixel_x = 2; + pixel_y = 5 + }, +/turf/open/floor/almayer{ + icon_state = "bluefull" + }, +/area/almayer/living/briefing) "hnV" = ( /obj/structure/machinery/light, /turf/open/floor/almayer, @@ -39549,6 +39772,19 @@ /obj/structure/flora/pottedplant{ icon_state = "pottedplant_10" }, +/obj/structure/closet/secure_closet/cmdcabinet{ + pixel_y = 24; + desc = "A bulletproof cabinet containing communications equipment."; + name = "communications cabinet"; + req_access = null; + req_one_access_txt = "207;203" + }, +/obj/item/device/radio, +/obj/item/device/radio/listening_bug/radio_linked/wy, +/obj/item/device/radio/listening_bug/radio_linked/wy{ + pixel_x = 4; + pixel_y = -3 + }, /turf/open/floor/wood/ship, /area/almayer/command/corporateliason) "hpk" = ( @@ -40138,19 +40374,19 @@ "hBW" = ( /obj/structure/surface/table/woodentable/fancy, /obj/item/device/flashlight/lamp/green{ - pixel_y = 20; - pixel_x = -7 + pixel_x = -7; + pixel_y = 20 }, /obj/item/ashtray/bronze{ - pixel_y = 19; - pixel_x = 4 + pixel_x = 4; + pixel_y = 19 }, /obj/structure/machinery/light{ dir = 8 }, /obj/effect/landmark/map_item{ - pixel_y = 3; - pixel_x = -1 + pixel_x = -1; + pixel_y = 3 }, /turf/open/floor/wood/ship, /area/almayer/living/commandbunks) @@ -40292,6 +40528,15 @@ /obj/structure/largecrate/random/barrel/red, /turf/open/floor/plating/plating_catwalk, /area/almayer/hull/upper_hull/u_f_p) +"hFX" = ( +/obj/structure/pipes/standard/simple/hidden/supply, +/obj/structure/bed/chair/comfy/bravo{ + dir = 4 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/living/briefing) "hGa" = ( /obj/effect/decal/warning_stripes{ icon_state = "N"; @@ -40386,6 +40631,23 @@ icon_state = "plate" }, /area/almayer/hull/upper_hull/u_a_p) +"hIt" = ( +/obj/structure/surface/table/almayer, +/obj/effect/decal/cleanable/dirt, +/obj/item/tool/kitchen/tray{ + pixel_y = 9 + }, +/obj/item/device/flashlight/lamp{ + pixel_x = 15 + }, +/obj/item/reagent_container/food/snacks/meatpizzaslice{ + pixel_x = -5; + pixel_y = 7 + }, +/turf/open/floor/almayer{ + icon_state = "emeraldfull" + }, +/area/almayer/living/briefing) "hII" = ( /obj/structure/machinery/cm_vending/gear/tl{ density = 0; @@ -40561,6 +40823,14 @@ icon_state = "plate" }, /area/almayer/hull/upper_hull/u_f_s) +"hMJ" = ( +/obj/structure/bed/chair/comfy/bravo{ + dir = 1 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/living/briefing) "hMN" = ( /obj/structure/machinery/power/apc/almayer, /turf/open/floor/almayer{ @@ -41343,6 +41613,22 @@ icon_state = "kitchen" }, /area/almayer/living/grunt_rnr) +"idJ" = ( +/obj/structure/surface/table/almayer, +/obj/effect/decal/cleanable/dirt, +/obj/item/device/flashlight/lamp{ + layer = 3.3; + pixel_x = 15 + }, +/obj/item/paper, +/obj/item/tool/pen{ + pixel_x = -5; + pixel_y = 2 + }, +/turf/open/floor/almayer{ + icon_state = "orangefull" + }, +/area/almayer/living/briefing) "idX" = ( /obj/structure/pipes/vents/pump, /turf/open/floor/prison{ @@ -42446,14 +42732,14 @@ }, /area/almayer/living/offices) "izr" = ( -/obj/structure/bed/chair/comfy/alpha{ - dir = 1 - }, /obj/structure/sign/poster/propaganda{ pixel_x = -27 }, +/obj/structure/bed/chair/comfy/alpha{ + dir = 1 + }, /turf/open/floor/almayer{ - icon_state = "redfull" + icon_state = "plate" }, /area/almayer/living/briefing) "izx" = ( @@ -42719,6 +43005,21 @@ }, /turf/open/floor/wood/ship, /area/almayer/shipboard/sea_office) +"iFG" = ( +/obj/structure/machinery/light{ + dir = 1 + }, +/obj/structure/bed/chair/comfy/bravo{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/barricade/deployable{ + dir = 4 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/living/briefing) "iFH" = ( /obj/structure/pipes/standard/simple/hidden/supply{ dir = 9 @@ -42810,8 +43111,8 @@ /area/almayer/living/grunt_rnr) "iIm" = ( /obj/structure/machinery/door/airlock/almayer/generic{ - name = "\improper Bathroom"; - dir = 2 + dir = 2; + name = "\improper Bathroom" }, /obj/structure/machinery/door/firedoor/border_only/almayer{ dir = 1 @@ -43445,13 +43746,18 @@ /turf/open/floor/almayer, /area/almayer/hallways/hangar) "iWE" = ( -/obj/structure/platform{ - dir = 1 - }, /obj/structure/pipes/vents/pump{ dir = 4 }, -/turf/open/floor/almayer, +/obj/structure/bed/chair/comfy/bravo{ + dir = 4 + }, +/obj/structure/barricade/deployable{ + dir = 4 + }, +/turf/open/floor/almayer{ + icon_state = "orangefull" + }, /area/almayer/living/briefing) "iWL" = ( /obj/structure/pipes/standard/simple/hidden/supply, @@ -43480,6 +43786,11 @@ icon_state = "bluefull" }, /area/almayer/living/briefing) +"iXd" = ( +/turf/open/floor/almayer{ + icon_state = "orangefull" + }, +/area/almayer/living/briefing) "iXt" = ( /obj/structure/pipes/standard/simple/hidden/supply, /turf/open/floor/almayer{ @@ -43487,6 +43798,15 @@ icon_state = "red" }, /area/almayer/shipboard/brig/processing) +"iXR" = ( +/obj/structure/bed/chair/comfy/alpha{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/living/briefing) "iXT" = ( /obj/item/trash/uscm_mre, /turf/open/floor/almayer, @@ -45078,6 +45398,15 @@ }, /turf/open/floor/plating, /area/almayer/hull/lower_hull/l_f_p) +"jEI" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/machinery/computer/cameras/wooden_tv/prop{ + pixel_y = 29 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/living/briefing) "jEX" = ( /obj/structure/surface/table/woodentable/fancy, /obj/item/folder/black{ @@ -45085,8 +45414,8 @@ }, /obj/item/folder/yellow, /obj/item/device/flashlight/lamp/green{ - pixel_y = 8; - pixel_x = -16 + pixel_x = -16; + pixel_y = 8 }, /turf/open/floor/carpet, /area/almayer/living/commandbunks) @@ -45233,6 +45562,15 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/medical/morgue) +"jIG" = ( +/obj/structure/bed/chair/comfy/charlie{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/living/briefing) "jIV" = ( /obj/structure/surface/rack, /obj/item/book/manual/marine_law{ @@ -45814,9 +46152,6 @@ /turf/open/floor/almayer, /area/almayer/engineering/engineering_workshop/hangar) "jUo" = ( -/obj/structure/bed/chair/comfy/bravo{ - dir = 1 - }, /obj/structure/pipes/standard/manifold/hidden/supply, /turf/open/floor/almayer{ icon_state = "orangefull" @@ -46047,6 +46382,16 @@ }, /turf/open/floor/almayer, /area/almayer/shipboard/brig/processing) +"jZr" = ( +/obj/structure/surface/table/almayer, +/obj/structure/machinery/computer/emails{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/almayer{ + icon_state = "redfull" + }, +/area/almayer/living/briefing) "jZs" = ( /obj/structure/machinery/light/containment{ dir = 4 @@ -46355,6 +46700,16 @@ icon_state = "silver" }, /area/almayer/shipboard/brig/cic_hallway) +"kfG" = ( +/obj/structure/surface/table/almayer, +/obj/effect/decal/cleanable/dirt, +/obj/item/device/flashlight/lamp{ + pixel_x = 15 + }, +/turf/open/floor/almayer{ + icon_state = "bluefull" + }, +/area/almayer/living/briefing) "kfN" = ( /obj/structure/closet/secure_closet/brig, /turf/open/floor/almayer{ @@ -47134,6 +47489,13 @@ icon_state = "dark_sterile" }, /area/almayer/engineering/laundry) +"kxF" = ( +/obj/structure/bed/chair/comfy/charlie, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/living/briefing) "kxL" = ( /obj/structure/closet/coffin/woodencrate, /obj/structure/largecrate/random/mini/wooden{ @@ -47753,11 +48115,20 @@ }, /area/almayer/hull/lower_hull/l_f_s) "kKL" = ( -/obj/structure/stairs/perspective{ - dir = 4; - icon_state = "p_stair_sn_full_cap" +/obj/structure/bed/chair/comfy/bravo{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/sign/poster{ + desc = "YOU ALWAYS KNOW A WORKING JOE. YOU ALWAYS KNOW A WORKING JOE. YOU ALWAYS KNOW A WORKING JOE. YOU ALWAYS KNOW A WORKING JOE. YOU ALWAYS KNOW A WORKING JOE."; + icon_state = "poster11"; + name = "YOU ALWAYS KNOW A WORKING JOE."; + pixel_x = -27; + serial_number = 11 + }, +/turf/open/floor/almayer{ + icon_state = "plate" }, -/turf/open/floor/almayer, /area/almayer/living/briefing) "kKR" = ( /obj/structure/pipes/vents/pump{ @@ -48077,11 +48448,13 @@ /obj/structure/bed/chair/comfy/bravo{ dir = 1 }, -/obj/structure/machinery/light{ - dir = 4 +/obj/effect/decal/cleanable/dirt, +/obj/structure/prop/holidays/string_lights{ + dir = 8; + pixel_x = 29 }, /turf/open/floor/almayer{ - icon_state = "orangefull" + icon_state = "plate" }, /area/almayer/living/briefing) "kRd" = ( @@ -48189,14 +48562,16 @@ }, /area/almayer/command/telecomms) "kTx" = ( -/obj/structure/stairs/perspective{ - dir = 1; - icon_state = "p_stair_full" - }, /obj/structure/pipes/standard/simple/hidden/supply{ dir = 5 }, -/turf/open/floor/almayer, +/obj/structure/bed/chair/comfy/charlie{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/almayer{ + icon_state = "plate" + }, /area/almayer/living/briefing) "kTM" = ( /obj/item/frame/rack{ @@ -48387,6 +48762,13 @@ icon_state = "sterile_green_side" }, /area/almayer/medical/medical_science) +"kXH" = ( +/obj/structure/bed/chair/comfy/delta, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/almayer{ + icon_state = "bluefull" + }, +/area/almayer/living/briefing) "kXJ" = ( /obj/structure/surface/table/reinforced/almayer_B, /obj/structure/machinery/computer/secure_data{ @@ -48492,6 +48874,23 @@ icon_state = "mono" }, /area/almayer/medical/hydroponics) +"lad" = ( +/obj/structure/surface/table/almayer, +/obj/effect/decal/cleanable/dirt, +/obj/item/device/flashlight/lamp{ + layer = 3.3; + pixel_x = 15 + }, +/obj/item/tool/kitchen/tray{ + pixel_y = 9 + }, +/obj/item/reagent_container/food/snacks/sliceable/pizza/vegetablepizza{ + pixel_y = 8 + }, +/turf/open/floor/almayer{ + icon_state = "emeraldfull" + }, +/area/almayer/living/briefing) "lah" = ( /turf/open/floor/almayer{ dir = 6; @@ -48522,8 +48921,8 @@ /obj/structure/safe/co_office, /obj/item/weapon/pole/fancy_cane, /obj/item/tool/lighter/zippo/gold{ - pixel_y = 3; - layer = 3.05 + layer = 3.05; + pixel_y = 3 }, /turf/open/floor/wood/ship, /area/almayer/living/commandbunks) @@ -48645,8 +49044,9 @@ /area/almayer/shipboard/brig/chief_mp_office) "ldj" = ( /obj/structure/pipes/vents/pump, -/obj/structure/platform, -/turf/open/floor/almayer, +/turf/open/floor/almayer{ + icon_state = "emeraldfull" + }, /area/almayer/living/briefing) "ldl" = ( /obj/structure/sign/safety/maint{ @@ -48976,6 +49376,15 @@ /obj/effect/landmark/late_join/bravo, /turf/open/floor/plating/plating_catwalk, /area/almayer/squads/bravo) +"ljz" = ( +/obj/structure/pipes/standard/simple/hidden/supply, +/obj/structure/bed/chair/comfy/delta{ + dir = 8 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/living/briefing) "ljG" = ( /obj/structure/closet/crate/freezer, /obj/item/reagent_container/food/condiment/coldsauce, @@ -51294,6 +51703,19 @@ icon_state = "cargo_arrow" }, /area/almayer/squads/charlie_delta_shared) +"mgR" = ( +/obj/structure/surface/table/almayer, +/obj/item/prop/magazine/dirty{ + pixel_y = 5 + }, +/obj/item/tool/pen{ + pixel_x = 4; + pixel_y = 6 + }, +/turf/open/floor/almayer{ + icon_state = "bluefull" + }, +/area/almayer/living/briefing) "mha" = ( /obj/effect/decal/warning_stripes{ icon_state = "SE-out"; @@ -52019,6 +52441,11 @@ icon_state = "sterile_green_side" }, /area/almayer/medical/lower_medical_lobby) +"mwz" = ( +/turf/open/floor/almayer{ + icon_state = "emeraldfull" + }, +/area/almayer/living/briefing) "mwA" = ( /obj/structure/disposalpipe/segment{ dir = 8; @@ -52740,18 +53167,22 @@ /turf/open/floor/plating/plating_catwalk, /area/almayer/hallways/port_hallway) "mLb" = ( -/obj/structure/platform{ - dir = 1 +/obj/structure/surface/table/almayer, +/obj/item/toy/deck{ + pixel_x = -6; + pixel_y = -2 }, /obj/item/toy/deck/uno{ pixel_x = 6; pixel_y = -1 }, -/obj/item/toy/deck{ - pixel_x = -6; - pixel_y = -2 +/obj/structure/prop/holidays/string_lights{ + dir = 8; + pixel_x = 29 + }, +/turf/open/floor/almayer{ + icon_state = "plate" }, -/turf/open/floor/almayer, /area/almayer/living/briefing) "mLu" = ( /obj/effect/decal/warning_stripes{ @@ -53262,7 +53693,13 @@ pixel_x = -27 }, /obj/structure/pipes/standard/simple/hidden/supply, -/turf/open/floor/almayer, +/obj/structure/bed/chair/comfy/charlie{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/almayer{ + icon_state = "plate" + }, /area/almayer/living/briefing) "mWe" = ( /obj/structure/machinery/camera/autoname/almayer{ @@ -54231,6 +54668,20 @@ }, /turf/open/floor/wood/ship, /area/almayer/living/commandbunks) +"npS" = ( +/obj/structure/surface/table/almayer, +/obj/item/device/flashlight/lamp{ + layer = 3.3; + pixel_x = 15 + }, +/obj/structure/prop/server_equipment/laptop{ + pixel_x = -2; + pixel_y = 1 + }, +/turf/open/floor/almayer{ + icon_state = "orangefull" + }, +/area/almayer/living/briefing) "nqx" = ( /obj/structure/pipes/standard/manifold/hidden/supply, /turf/open/floor/plating/plating_catwalk, @@ -54689,11 +55140,12 @@ /turf/open/floor/almayer, /area/almayer/squads/charlie_delta_shared) "nza" = ( -/obj/structure/bed/chair/comfy/charlie, /obj/structure/pipes/vents/scrubber{ dir = 4 }, -/obj/item/trash/uscm_mre, +/obj/structure/bed/chair/comfy/charlie{ + dir = 4 + }, /turf/open/floor/almayer{ icon_state = "emeraldfull" }, @@ -55143,12 +55595,12 @@ /turf/open/floor/almayer, /area/almayer/living/basketball) "nIW" = ( -/obj/structure/bed/chair/comfy/bravo{ - dir = 1 - }, /obj/structure/pipes/standard/simple/hidden/supply{ dir = 9 }, +/obj/structure/bed/chair/comfy/bravo{ + dir = 1 + }, /turf/open/floor/almayer{ icon_state = "orangefull" }, @@ -55196,8 +55648,8 @@ /area/almayer/command/lifeboat) "nKs" = ( /obj/structure/machinery/cm_vending/clothing/dress{ - req_access = list(1); - pixel_y = 0 + pixel_y = 0; + req_access = list(1) }, /turf/open/floor/almayer{ icon_state = "cargo" @@ -56066,9 +56518,9 @@ dir = 8 }, /obj/item/prop/magazine/boots/n160{ - pixel_y = -8; + layer = 2.8; pixel_x = 4; - layer = 2.8 + pixel_y = -8 }, /obj/effect/decal/warning_stripes{ icon_state = "E"; @@ -56412,9 +56864,6 @@ }, /area/almayer/engineering/engine_core) "okB" = ( -/obj/structure/bed/chair/comfy/alpha{ - dir = 1 - }, /obj/structure/pipes/vents/scrubber{ dir = 4 }, @@ -56721,6 +57170,14 @@ }, /turf/open/floor/plating, /area/almayer/hull/lower_hull/l_f_p) +"oqP" = ( +/obj/structure/bed/chair/comfy/delta{ + dir = 1 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/living/briefing) "oqS" = ( /obj/structure/toilet{ dir = 1 @@ -56962,13 +57419,13 @@ }, /obj/item/reagent_container/food/snacks/carpmeat{ layer = 3.3; - pixel_y = 11; - pixel_x = 8 + pixel_x = 8; + pixel_y = 11 }, /obj/item/reagent_container/food/snacks/carpmeat{ layer = 3.3; - pixel_y = 11; - pixel_x = 8 + pixel_x = 8; + pixel_y = 11 }, /turf/open/floor/carpet, /area/almayer/living/commandbunks) @@ -57293,12 +57750,12 @@ pixel_y = 9 }, /obj/item/prop/helmetgarb/rosary{ - pixel_y = 5; - pixel_x = -4 + pixel_x = -4; + pixel_y = 5 }, /obj/item/device/flashlight/lamp{ - pixel_y = 1; - pixel_x = 3 + pixel_x = 3; + pixel_y = 1 }, /turf/open/floor/wood/ship, /area/almayer/living/commandbunks) @@ -57799,6 +58256,13 @@ icon_state = "rasputin3" }, /area/almayer/powered/agent) +"oMC" = ( +/obj/structure/machinery/light, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/living/briefing) "oMH" = ( /obj/structure/bed/chair{ dir = 4 @@ -58537,6 +59001,7 @@ /obj/item/facepaint/black{ pixel_x = -10 }, +/obj/effect/decal/cleanable/dirt, /turf/open/floor/almayer{ icon_state = "plate" }, @@ -59210,8 +59675,8 @@ icon_state = "pipe-c" }, /obj/structure/coatrack{ - pixel_y = 1; - pixel_x = -5 + pixel_x = -5; + pixel_y = 1 }, /obj/structure/pipes/standard/simple/hidden/supply{ dir = 5 @@ -60621,6 +61086,23 @@ icon_state = "sterile_green_side" }, /area/almayer/medical/medical_science) +"qan" = ( +/obj/item/device/radio/listening_bug/radio_linked/mp{ + pixel_y = 8 + }, +/obj/item/device/radio/listening_bug/radio_linked/mp, +/obj/structure/closet/secure_closet/cmdcabinet{ + pixel_y = 24; + desc = "A bulletproof cabinet containing communications equipment."; + name = "communications cabinet"; + req_access = null; + req_one_access_txt = "3" + }, +/turf/open/floor/almayer{ + dir = 1; + icon_state = "red" + }, +/area/almayer/shipboard/brig/main_office) "qau" = ( /obj/structure/pipes/standard/simple/hidden/supply{ dir = 4 @@ -60960,10 +61442,13 @@ }, /area/almayer/living/starboard_garden) "qgw" = ( -/obj/structure/stairs/perspective{ - icon_state = "p_stair_sn_full_cap" +/obj/structure/bed/chair/comfy/alpha{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/almayer{ + icon_state = "plate" }, -/turf/open/floor/almayer, /area/almayer/living/briefing) "qgG" = ( /obj/structure/pipes/standard/manifold/hidden/supply{ @@ -61092,7 +61577,9 @@ pixel_x = 27 }, /obj/structure/pipes/standard/simple/hidden/supply, -/turf/open/floor/almayer, +/turf/open/floor/almayer{ + icon_state = "plate" + }, /area/almayer/living/briefing) "qit" = ( /obj/structure/surface/table/reinforced/almayer_B, @@ -61289,6 +61776,18 @@ icon_state = "sterile_green_corner" }, /area/almayer/medical/medical_science) +"qmB" = ( +/obj/structure/bed/chair/comfy/bravo{ + dir = 1 + }, +/obj/structure/prop/holidays/string_lights{ + dir = 8; + pixel_x = 29 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/living/briefing) "qmC" = ( /obj/structure/machinery/door/poddoor/almayer/open{ dir = 4; @@ -61559,6 +62058,15 @@ icon_state = "silver" }, /area/almayer/command/computerlab) +"qsa" = ( +/obj/structure/bed/chair/comfy/bravo{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/living/briefing) "qsd" = ( /obj/structure/largecrate/random, /turf/open/floor/almayer{ @@ -62913,6 +63421,12 @@ icon_state = "plate" }, /area/almayer/squads/delta) +"qWy" = ( +/obj/structure/bed/chair/comfy/delta, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/living/briefing) "qWI" = ( /obj/structure/machinery/status_display{ pixel_y = -30 @@ -63242,6 +63756,29 @@ icon_state = "plate" }, /area/almayer/hull/upper_hull/u_m_s) +"rdb" = ( +/obj/structure/surface/table/almayer, +/obj/effect/decal/cleanable/dirt, +/obj/item/paper_bin/uscm{ + pixel_x = 9; + pixel_y = 6 + }, +/obj/item/tool/pen{ + pixel_x = 9; + pixel_y = 2 + }, +/obj/item/tool/pen{ + pixel_x = 9; + pixel_y = 9 + }, +/obj/structure/prop/holidays/string_lights{ + dir = 8; + pixel_x = 29 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/living/briefing) "rde" = ( /obj/structure/sign/prop1, /turf/closed/wall/almayer, @@ -63361,8 +63898,8 @@ /obj/structure/surface/table/woodentable/fancy, /obj/structure/machinery/faxmachine/uscm/command/capt{ name = "Commanding Officer's Fax Machine"; - pixel_y = 3; - pixel_x = -4 + pixel_x = -4; + pixel_y = 3 }, /obj/structure/machinery/light{ dir = 1 @@ -63416,14 +63953,6 @@ "rgJ" = ( /obj/structure/machinery/light, /obj/structure/machinery/disposal, -/obj/item/bananapeel{ - desc = "An experimental B8 Smart-Scope. Based on the technologies used in the Smart Gun by ARMAT, this sight has integrated IFF systems. It can only attach to the L42A Battle Rifle, M44 Combat Revolver, and M46C Pulse Rifle. This one appears to be covered in gun oil"; - icon = 'icons/obj/items/weapons/guns/attachments.dmi'; - icon_state = "iffbarrel"; - name = "Broken B8 Smart-Scope"; - pixel_x = -1; - pixel_y = 11 - }, /obj/structure/disposalpipe/trunk{ dir = 1 }, @@ -63936,8 +64465,8 @@ name = "Commanding Officer's Office"; phone_category = "Offices"; phone_id = "Commanding Officer's Office"; - pixel_y = 8; - pixel_x = 16 + pixel_x = 16; + pixel_y = 8 }, /turf/open/floor/carpet, /area/almayer/living/commandbunks) @@ -64614,8 +65143,8 @@ "rEJ" = ( /obj/structure/machinery/light, /obj/structure/flora/pottedplant{ - pixel_y = 3; - pixel_x = -1 + pixel_x = -1; + pixel_y = 3 }, /turf/open/floor/wood/ship, /area/almayer/living/commandbunks) @@ -64681,6 +65210,29 @@ icon_state = "sterile_green_side" }, /area/almayer/medical/lower_medical_medbay) +"rFV" = ( +/obj/structure/surface/table/almayer, +/obj/effect/decal/cleanable/dirt, +/obj/item/device/flashlight/lamp{ + layer = 3.3; + pixel_x = 15 + }, +/obj/item/paper_bin/uscm{ + pixel_x = -7; + pixel_y = 6 + }, +/obj/item/tool/pen{ + pixel_x = -10; + pixel_y = 6 + }, +/obj/item/tool/pen{ + pixel_x = -10; + pixel_y = -2 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/living/briefing) "rFY" = ( /turf/open/floor/almayer{ dir = 5; @@ -65800,6 +66352,17 @@ icon_state = "plating" }, /area/almayer/hull/lower_hull/l_f_s) +"sgE" = ( +/obj/structure/pipes/standard/simple/hidden/supply, +/obj/structure/reagent_dispensers/water_cooler{ + density = 0; + pixel_x = 12; + pixel_y = 6 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/living/briefing) "sgM" = ( /obj/structure/closet/toolcloset, /turf/open/floor/almayer{ @@ -66676,6 +67239,18 @@ icon_state = "orange" }, /area/almayer/engineering/ce_room) +"sBs" = ( +/obj/structure/surface/table/almayer, +/obj/effect/decal/cleanable/dirt, +/obj/item/paper, +/obj/item/tool/pen{ + pixel_x = -5; + pixel_y = 2 + }, +/turf/open/floor/almayer{ + icon_state = "redfull" + }, +/area/almayer/living/briefing) "sBH" = ( /obj/structure/pipes/standard/simple/hidden/supply{ dir = 10 @@ -66947,6 +67522,17 @@ /obj/structure/mirror, /turf/closed/wall/almayer, /area/almayer/living/gym) +"sGX" = ( +/obj/structure/machinery/firealarm{ + pixel_y = -28 + }, +/obj/structure/bed/chair/comfy/charlie{ + dir = 1 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/living/briefing) "sGZ" = ( /obj/structure/closet/firecloset, /turf/open/floor/almayer{ @@ -68066,6 +68652,11 @@ icon_state = "plating" }, /area/almayer/shipboard/brig/armory) +"tgE" = ( +/turf/open/floor/almayer{ + icon_state = "redfull" + }, +/area/almayer/living/briefing) "tgK" = ( /obj/structure/pipes/standard/simple/hidden/supply{ dir = 4 @@ -68113,6 +68704,15 @@ icon_state = "cargo_arrow" }, /area/almayer/squads/alpha_bravo_shared) +"thE" = ( +/obj/structure/bed/chair/comfy/charlie{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/almayer{ + icon_state = "emeraldfull" + }, +/area/almayer/living/briefing) "thL" = ( /turf/open/floor/wood/ship, /area/almayer/shipboard/brig/cells) @@ -69596,6 +70196,17 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/hull/upper_hull/u_a_s) +"tMc" = ( +/obj/structure/pipes/standard/simple/hidden/supply{ + dir = 10 + }, +/obj/structure/bed/chair/comfy/alpha{ + dir = 8 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/living/briefing) "tMf" = ( /obj/effect/decal/warning_stripes{ icon_state = "W" @@ -69839,6 +70450,28 @@ icon_state = "plate" }, /area/almayer/hull/lower_hull/l_a_p) +"tSv" = ( +/obj/structure/surface/table/almayer, +/obj/effect/decal/cleanable/dirt, +/obj/item/device/flashlight/lamp{ + pixel_x = 15 + }, +/obj/item/paper_bin/uscm{ + pixel_x = -7; + pixel_y = 6 + }, +/obj/item/tool/pen{ + pixel_x = -9; + pixel_y = 3 + }, +/obj/item/tool/pen{ + pixel_x = 4; + pixel_y = -4 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/living/briefing) "tSw" = ( /obj/structure/pipes/standard/simple/hidden/supply, /turf/open/floor/almayer{ @@ -70412,6 +71045,10 @@ /obj/structure/machinery/firealarm{ pixel_y = -28 }, +/obj/structure/bed/chair/comfy/delta{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, /turf/open/floor/almayer{ icon_state = "plate" }, @@ -70722,11 +71359,13 @@ /turf/open/floor/plating, /area/almayer/engineering/engineering_workshop/hangar) "ukA" = ( -/obj/structure/platform, /obj/structure/pipes/standard/simple/hidden/supply{ dir = 4 }, -/turf/open/floor/almayer, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/almayer{ + icon_state = "emeraldfull" + }, /area/almayer/living/briefing) "ukS" = ( /obj/structure/disposalpipe/segment{ @@ -71515,6 +72154,25 @@ icon_state = "dark_sterile" }, /area/almayer/medical/chemistry) +"uzb" = ( +/obj/structure/surface/table/almayer, +/obj/item/device/flashlight/lamp{ + layer = 3.3; + pixel_x = 15 + }, +/obj/item/tool/screwdriver, +/obj/item/bananapeel{ + desc = "An experimental B8 Smart-Scope. Based on the technologies used in the Smart Gun by ARMAT, this sight has integrated IFF systems. It can only attach to the L42A Battle Rifle, M44 Combat Revolver, and M46C Pulse Rifle. This one appears to be covered in gun oil"; + icon = 'icons/obj/items/weapons/guns/attachments.dmi'; + icon_state = "iffbarrel"; + name = "Broken B8 Smart-Scope"; + pixel_x = -3; + pixel_y = 7 + }, +/turf/open/floor/almayer{ + icon_state = "orangefull" + }, +/area/almayer/living/briefing) "uzg" = ( /obj/structure/sign/safety/water{ pixel_x = 8; @@ -72088,6 +72746,14 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/engineering/upper_engineering/starboard) +"uLe" = ( +/obj/structure/pipes/standard/manifold/hidden/supply{ + dir = 4 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/living/briefing) "uLn" = ( /obj/structure/pipes/standard/simple/hidden/supply, /turf/open/floor/almayer, @@ -72737,6 +73403,17 @@ /obj/structure/window/framed/almayer, /turf/open/floor/plating, /area/almayer/hallways/repair_bay) +"uZX" = ( +/obj/structure/surface/table/almayer, +/obj/item/paper{ + pixel_x = -4; + pixel_y = 5 + }, +/obj/item/tool/pen, +/turf/open/floor/almayer{ + icon_state = "bluefull" + }, +/area/almayer/living/briefing) "uZZ" = ( /obj/structure/machinery/door/airlock/multi_tile/almayer/generic{ name = "\improper Basketball Court" @@ -73286,8 +73963,8 @@ icon_state = "pottedplant_21" }, /obj/structure/sign/poster/io{ - pixel_y = 32; - name = "propaganda poster" + name = "propaganda poster"; + pixel_y = 32 }, /obj/structure/sign/safety/escapepod{ pixel_x = -17 @@ -73388,6 +74065,15 @@ icon_state = "test_floor4" }, /area/almayer/shipboard/brig/general_equipment) +"vkN" = ( +/obj/structure/bed/chair/comfy/charlie{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/living/briefing) "vkR" = ( /obj/structure/machinery/power/apc/almayer{ dir = 1 @@ -73436,7 +74122,9 @@ dir = 4 }, /obj/structure/pipes/standard/simple/hidden/supply, -/turf/open/floor/almayer, +/turf/open/floor/almayer{ + icon_state = "plate" + }, /area/almayer/living/briefing) "vlX" = ( /obj/structure/machinery/cm_vending/sorted/cargo_guns/squad_prep, @@ -73551,19 +74239,25 @@ }, /area/almayer/lifeboat_pumps/south1) "vpt" = ( -/obj/structure/bed/chair/comfy/bravo{ - dir = 1 +/obj/structure/surface/table/almayer, +/obj/item/paper_bin/uscm{ + pixel_x = 9; + pixel_y = 6 }, -/obj/structure/sign/poster{ - desc = "YOU ALWAYS KNOW A WORKING JOE. YOU ALWAYS KNOW A WORKING JOE. YOU ALWAYS KNOW A WORKING JOE. YOU ALWAYS KNOW A WORKING JOE. YOU ALWAYS KNOW A WORKING JOE."; - icon_state = "poster11"; - name = "YOU ALWAYS KNOW A WORKING JOE."; - pixel_x = 27; - serial_number = 11 +/obj/item/tool/pen{ + pixel_x = 9; + pixel_y = 2 + }, +/obj/item/tool/pen{ + pixel_x = 9; + pixel_y = 9 + }, +/obj/structure/prop/holidays/string_lights{ + dir = 8; + pixel_x = 29 }, -/obj/item/stack/folding_barricade, /turf/open/floor/almayer{ - icon_state = "orangefull" + icon_state = "plate" }, /area/almayer/living/briefing) "vpI" = ( @@ -74107,12 +74801,15 @@ /turf/open/floor/almayer, /area/almayer/engineering/upper_engineering/port) "vyU" = ( -/obj/structure/bed/chair/comfy/charlie, /obj/structure/machinery/light{ dir = 4 }, +/obj/structure/bed/chair/comfy/charlie{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, /turf/open/floor/almayer{ - icon_state = "emeraldfull" + icon_state = "plate" }, /area/almayer/living/briefing) "vzl" = ( @@ -74328,11 +75025,15 @@ /turf/open/floor/plating/plating_catwalk, /area/almayer/living/synthcloset) "vEn" = ( -/obj/structure/bed/chair/comfy/bravo{ - dir = 1 +/obj/structure/surface/table/almayer, +/obj/item/device/flashlight/lamp{ + layer = 3.3; + pixel_x = 15 }, -/obj/item/stack/sheet/mineral/uranium{ - layer = 2.99 +/obj/item/paper, +/obj/item/tool/pen{ + pixel_x = -5; + pixel_y = 2 }, /turf/open/floor/almayer{ icon_state = "orangefull" @@ -75120,6 +75821,7 @@ /obj/structure/machinery/firealarm{ pixel_y = 28 }, +/obj/effect/decal/cleanable/dirt, /turf/open/floor/almayer{ icon_state = "plate" }, @@ -75552,18 +76254,15 @@ /area/almayer/hallways/aft_hallway) "wbe" = ( /obj/structure/surface/table/almayer, -/obj/effect/landmark/map_item{ - layer = 3.03; - pixel_x = 7; - pixel_y = 4 - }, -/obj/item/prop/helmetgarb/spacejam_tickets{ +/obj/item/reagent_container/food/drinks/coffeecup{ pixel_x = -8; - pixel_y = 5 + pixel_y = -1 }, -/obj/item/prop/helmetgarb/spacejam_tickets{ - pixel_x = -8; - pixel_y = -3 +/obj/item/reagent_container/food/drinks/coffee{ + pixel_y = 9 + }, +/obj/item/tool/pen{ + pixel_x = 5 }, /turf/open/floor/almayer{ icon_state = "plate" @@ -75605,31 +76304,31 @@ dir = 8 }, /obj/item/clothing/mask/cigarette/pipe{ - pixel_y = -7; - layer = 2.8 + layer = 2.8; + pixel_y = -7 }, /obj/item/reagent_container/spray/cleaner{ + layer = 3.04; pixel_x = -4; - pixel_y = 7; - layer = 3.04 + pixel_y = 7 }, /obj/structure/machinery/door_control/brbutton{ - pixel_y = 26; - pixel_x = -12; id = "Brig Lockdown Shutters"; - name = "Brig Lockdown" + name = "Brig Lockdown"; + pixel_x = -12; + pixel_y = 26 }, /obj/structure/machinery/door_control/brbutton{ - pixel_y = 26; id = "ARES StairsLock"; name = "ARES Exterior Lockdown Override"; - pixel_x = -2 + pixel_x = -2; + pixel_y = 26 }, /obj/structure/machinery/door_control/brbutton{ - pixel_y = 26; - pixel_x = 8; + id = "ARES Emergency"; name = "ARES Emergency Lockdown Override"; - id = "ARES Emergency" + pixel_x = 8; + pixel_y = 26 }, /turf/open/floor/wood/ship, /area/almayer/living/commandbunks) @@ -75863,8 +76562,8 @@ pixel_y = 9 }, /obj/item/paper_bin/uscm{ - pixel_y = 6; - pixel_x = 7 + pixel_x = 7; + pixel_y = 6 }, /obj/item/tool/pen/red/clicky{ pixel_x = -6; @@ -76032,8 +76731,8 @@ anchored = 0 }, /obj/structure/sign/poster/io{ - pixel_y = 32; - name = "propaganda poster" + name = "propaganda poster"; + pixel_y = 32 }, /turf/open/floor/wood/ship, /area/almayer/command/corporateliason) @@ -76259,6 +76958,16 @@ }, /turf/open/floor/almayer, /area/almayer/lifeboat_pumps/south2) +"wlH" = ( +/obj/structure/surface/table/almayer, +/obj/structure/machinery/computer/emails{ + pixel_x = 2; + pixel_y = 5 + }, +/turf/open/floor/almayer{ + icon_state = "emeraldfull" + }, +/area/almayer/living/briefing) "wlK" = ( /obj/effect/decal/warning_stripes{ icon_state = "N"; @@ -76536,29 +77245,31 @@ /turf/open/floor/almayer, /area/almayer/shipboard/brig/cic_hallway) "wsP" = ( -/obj/structure/platform{ - dir = 1 - }, /obj/item/prop/helmetgarb/gunoil{ layer = 4.2; pixel_x = -3; - pixel_y = 1 + pixel_y = 6 }, /obj/item/prop/helmetgarb/gunoil{ layer = 4.2; pixel_x = -10; - pixel_y = 1 + pixel_y = 10 }, /obj/item/prop/helmetgarb/gunoil{ layer = 4.2; pixel_x = 4; - pixel_y = 1 + pixel_y = 9 }, /obj/item/weapon/broken_bottle{ - pixel_x = 11; - pixel_y = -2 + layer = 4.51; + pixel_x = 9; + pixel_y = 1 + }, +/obj/structure/surface/table/almayer, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/almayer{ + icon_state = "plate" }, -/turf/open/floor/almayer, /area/almayer/living/briefing) "wsR" = ( /obj/structure/machinery/door/firedoor/border_only/almayer, @@ -76693,13 +77404,8 @@ }, /area/almayer/living/synthcloset) "wwk" = ( -/obj/structure/bed/chair/comfy/bravo{ - dir = 1 - }, -/obj/item/stack/folding_barricade, -/obj/item/stack/sheet/mineral/uranium{ - layer = 2.99 - }, +/obj/structure/surface/table/almayer, +/obj/effect/landmark/map_item, /turf/open/floor/almayer{ icon_state = "orangefull" }, @@ -76903,12 +77609,32 @@ }, /area/almayer/hallways/port_hallway) "wAU" = ( -/obj/structure/bed/chair/comfy/delta, /obj/structure/sign/poster/music{ pixel_x = -27 }, +/obj/structure/surface/table/almayer, +/obj/effect/decal/cleanable/dirt, +/obj/item/device/flashlight/lamp{ + pixel_x = 15 + }, +/obj/item/paper_bin/uscm{ + pixel_x = -7; + pixel_y = 6 + }, +/obj/item/tool/pen{ + pixel_x = -10; + pixel_y = -1 + }, +/obj/item/tool/pen{ + pixel_x = 3; + pixel_y = -4 + }, +/obj/item/tool/pen{ + pixel_x = -11; + pixel_y = 5 + }, /turf/open/floor/almayer{ - icon_state = "bluefull" + icon_state = "plate" }, /area/almayer/living/briefing) "wBY" = ( @@ -77291,6 +78017,11 @@ "wJH" = ( /turf/closed/wall/almayer/research/containment/wall/east, /area/almayer/medical/containment/cell/cl) +"wJL" = ( +/turf/open/floor/almayer{ + icon_state = "bluefull" + }, +/area/almayer/living/briefing) "wKn" = ( /obj/structure/surface/rack, /obj/item/facepaint/sniper, @@ -77429,9 +78160,13 @@ }, /area/almayer/medical/containment) "wLV" = ( -/obj/structure/bed/chair/comfy/charlie, +/obj/structure/machinery/vending/cola{ + density = 0; + pixel_y = 16 + }, +/obj/effect/decal/cleanable/dirt, /turf/open/floor/almayer{ - icon_state = "emeraldfull" + icon_state = "plate" }, /area/almayer/living/briefing) "wMm" = ( @@ -78466,9 +79201,6 @@ desc = "A supply crate containing everything you need to stop a CLF uprising."; name = "\improper USCM crate 'FOB supplies'" }, -/obj/structure/sign/arcturianstopsign{ - pixel_y = 32 - }, /obj/item/folded_tent/big{ pixel_x = -6; pixel_y = 10 @@ -78646,6 +79378,14 @@ icon_state = "emerald" }, /area/almayer/hallways/port_hallway) +"xkY" = ( +/obj/structure/bed/chair/comfy/alpha{ + dir = 1 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/living/briefing) "xlk" = ( /obj/structure/surface/table/almayer, /turf/open/floor/almayer, @@ -78919,9 +79659,13 @@ /turf/closed/wall/almayer, /area/almayer/command/securestorage) "xqM" = ( -/obj/structure/platform, /obj/structure/pipes/vents/pump, -/turf/open/floor/almayer, +/obj/structure/bed/chair/comfy/delta{ + dir = 8 + }, +/turf/open/floor/almayer{ + icon_state = "bluefull" + }, /area/almayer/living/briefing) "xqS" = ( /obj/effect/decal/warning_stripes{ @@ -79394,9 +80138,6 @@ /turf/open/floor/plating, /area/almayer/hull/upper_hull/u_a_p) "xzp" = ( -/obj/structure/bed/chair/comfy/bravo{ - dir = 1 - }, /obj/structure/pipes/standard/simple/hidden/supply{ dir = 4 }, @@ -79413,6 +80154,18 @@ }, /turf/open/floor/almayer, /area/almayer/shipboard/brig/cells) +"xzB" = ( +/obj/structure/pipes/standard/simple/hidden/supply{ + dir = 9 + }, +/obj/structure/bed/chair/comfy/delta{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/living/briefing) "xAe" = ( /turf/closed/wall/almayer/research/containment/wall/corner, /area/almayer/medical/containment/cell) @@ -79577,20 +80330,22 @@ }, /area/almayer/command/airoom) "xDQ" = ( -/obj/structure/platform, -/obj/item/trash/USCMtray{ - pixel_y = 4 +/obj/structure/surface/table/almayer, +/obj/item/reagent_container/food/snacks/mre_pack/xmas3{ + pixel_x = 5 }, -/obj/item/trash/USCMtray{ - pixel_y = 6 +/obj/item/reagent_container/food/snacks/mre_pack/xmas2{ + pixel_x = 5; + pixel_y = 9 }, -/obj/item/trash/USCMtray{ - pixel_y = 8 +/obj/effect/landmark/map_item{ + layer = 3.03; + pixel_x = -7; + pixel_y = 4 }, -/obj/item/trash/USCMtray{ - pixel_y = 10 +/turf/open/floor/almayer{ + icon_state = "plate" }, -/turf/open/floor/almayer, /area/almayer/living/briefing) "xEc" = ( /turf/open/floor/almayer{ @@ -79741,6 +80496,25 @@ icon_state = "red" }, /area/almayer/living/briefing) +"xGL" = ( +/obj/structure/surface/table/almayer, +/obj/effect/decal/cleanable/dirt, +/obj/item/paper_bin/uscm{ + pixel_x = 9; + pixel_y = 6 + }, +/obj/item/tool/pen{ + pixel_x = 9; + pixel_y = 2 + }, +/obj/item/tool/pen{ + pixel_x = 9; + pixel_y = 9 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/living/briefing) "xHe" = ( /obj/structure/pipes/vents/pump{ dir = 4 @@ -80095,13 +80869,20 @@ /turf/open/floor/plating/plating_catwalk, /area/almayer/hull/lower_hull/l_m_s) "xPR" = ( -/obj/structure/platform{ - dir = 1 - }, /obj/structure/pipes/vents/scrubber{ dir = 4 }, -/turf/open/floor/almayer, +/obj/structure/surface/table/almayer, +/obj/structure/machinery/computer/emails{ + dir = 1 + }, +/obj/item/reagent_container/food/snacks/grown/banana{ + pixel_x = 18; + pixel_y = 5 + }, +/turf/open/floor/almayer{ + icon_state = "orangefull" + }, /area/almayer/living/briefing) "xPZ" = ( /obj/structure/pipes/standard/simple/hidden/supply{ @@ -89865,7 +90646,7 @@ tak tak bvx xys -ldu +qan eRL eRL mLJ @@ -115530,8 +116311,8 @@ wsP izr aSh ccF -tGG -tGG +rFV +iXR bdg aLG awb @@ -115561,12 +116342,12 @@ buH hOR buH bdg -sNI +cxZ wAU diw -csG -sNI -wNT +tSv +cxZ +ffl wbe bdd qXo @@ -115728,13 +116509,13 @@ hhw umv hhw bdd -bqZ -kbV -tGG -tGG -tGG +hjT +jZr tGG +fHe tGG +sBs +iXR bdg aLG aYO @@ -115764,13 +116545,13 @@ buH bHL buH bdg -sNI -sNI -sNI -sNI +cxZ +hnH +kXH +kfG dkH cKX -bqZ +oqP bdd tLc rsM @@ -115932,12 +116713,12 @@ aSm eoM bdd vTt -kbV -tGG -tGG -tGG -tGG +tgE +tgE +fNu tGG +gmp +iXR bdg aLG aYO @@ -115967,13 +116748,13 @@ buH bHL buH bdg -sNI +cxZ csG sNI -sNI +mgR gNi -wNT -cab +wJL +oMC bdd hxZ rsM @@ -116134,14 +116915,14 @@ aSm aSm kOf bdd -bDQ -kbV -tGG +dYH +bDP +tgE okB -tGG +tgE crK -tGG -bdg +xkY +bdd beB aYT beB @@ -116169,11 +116950,11 @@ bCx buH bHL buH -bdg -sNI -sNI -sNI -sNI +bdd +qWy +uZX +wJL +wJL eCS xqM udV @@ -116337,12 +117118,12 @@ mhl aSm ylY bdd -bqZ qgw -beH -qMR +qgw +qgw +tMc vlR -dRT +uLe qin pmv tBF @@ -116373,13 +117154,13 @@ bFu omW bFu hLS -eBg -eBg -eBg -eBg -fOk +vKe +vKe +sgE +ljz +xzB epq -bqZ +fCt bdd hTf rKO @@ -116743,13 +117524,13 @@ pOB hfk aLf bdd -bqZ +gVm kKL -aLJ -eBg +gOm +hFX dAO cEG -eBg +vKe dYX tBF lBz @@ -116779,13 +117560,13 @@ buH uXu bFu iUk -eBg +cIl gkJ -eBg -eBg +vKe +cum mVZ kTx -bqZ +jIG bdd hTf wRO @@ -116946,14 +117727,14 @@ lQu lQu aSm bdd -bDQ +iFG iWE jUo -wmz -wmz +iXd +iXd wwk -wmz -bdg +hMJ +bdd aLG awb aLG @@ -116981,14 +117762,14 @@ bdg buH hOR buH -bdg +bdd wLV nza -wLV -wLV -wLV +mwz +mwz +mwz ukA -bqZ +jIG bdd gKB rsM @@ -117149,13 +117930,13 @@ yfy ugV vUi bdd -vTt -kbV +jEI +iXd xzp vEn wmz -wmz -wmz +npS +qsa bdg aLG aYO @@ -117185,13 +117966,13 @@ bGe bHL buH bdg -wLV -wLV -wLV -wLV -gKH +kxF +elX +gAj +bHS +aLA ldj -cab +oMC bdd sOt cNX @@ -117352,13 +118133,13 @@ aLf qce aSm bdd -bqZ +gcw xPR nIW +uzb wmz -wmz -wmz -wmz +idJ +qsa bdg beB aYT @@ -117388,13 +118169,13 @@ bJz bHT bJz bdg -wLV -wLV -wLV -wLV -wLV -wNT -udV +kxF +lad +thE +hIt +gAj +wlH +sGX bdd pEl roU @@ -117557,11 +118338,11 @@ qEW bdd gGo mLb -wmz +qmB vpt kQU -wmz -wmz +rdb +kQU bdg aLG aYO @@ -117594,8 +118375,8 @@ bdg gKH cgz vyU -wLV -wLV +xGL +vkN xDQ bXc bdd diff --git a/maps/sorokyne_strata.json b/maps/sorokyne_strata.json index 61c3a7fd3f69..5a0f6d67c410 100644 --- a/maps/sorokyne_strata.json +++ b/maps/sorokyne_strata.json @@ -11,6 +11,7 @@ "/datum/equipment_preset/survivor/scientist/soro", "/datum/equipment_preset/survivor/doctor/soro", "/datum/equipment_preset/survivor/engineer/soro", + "/datum/equipment_preset/survivor/corporate/soro", "/datum/equipment_preset/survivor/security/soro", "/datum/equipment_preset/survivor/interstellar_human_rights_observer/soro" ], diff --git a/sound/weapons/gun_xm88_directhit_high.ogg b/sound/weapons/gun_xm88_directhit_high.ogg new file mode 100644 index 000000000000..6db42f73cf0e Binary files /dev/null and b/sound/weapons/gun_xm88_directhit_high.ogg differ diff --git a/sound/weapons/gun_xm88_directhit_low.ogg b/sound/weapons/gun_xm88_directhit_low.ogg new file mode 100644 index 000000000000..c516f4fc2650 Binary files /dev/null and b/sound/weapons/gun_xm88_directhit_low.ogg differ diff --git a/sound/weapons/gun_xm88_directhit_medium.ogg b/sound/weapons/gun_xm88_directhit_medium.ogg new file mode 100644 index 000000000000..106fd23cb981 Binary files /dev/null and b/sound/weapons/gun_xm88_directhit_medium.ogg differ diff --git a/tgui/packages/tgui-panel/styles/goon/chat-dark.scss b/tgui/packages/tgui-panel/styles/goon/chat-dark.scss index 835a94341708..b4e59f32c121 100644 --- a/tgui/packages/tgui-panel/styles/goon/chat-dark.scss +++ b/tgui/packages/tgui-panel/styles/goon/chat-dark.scss @@ -956,10 +956,6 @@ em { color: #844300; } -.sentryradio { - color: #844300; -} - .medradio { color: #008160; } diff --git a/tgui/packages/tgui/constants.js b/tgui/packages/tgui/constants.js index 3d7530e7ead8..0ec51380a322 100644 --- a/tgui/packages/tgui/constants.js +++ b/tgui/packages/tgui/constants.js @@ -80,153 +80,233 @@ export const CSS_COLORS = [ export const RADIO_CHANNELS = [ { name: 'Yautja', - freq: 1214, + freq: 1205, color: '#1ecc43', }, { - name: 'PMC', - freq: 1235, + name: "Dutch's Dozen", + freq: 1210, color: '#1ecc43', }, + { + name: 'VAI', + freq: 1215, + color: '#e3580e', + }, + { + name: 'CMB', + freq: 1220, + color: '#1b748c', + }, { name: 'WY', - freq: 1236, - color: '#1ecc43', + freq: 1231, + color: '#fe9b24', }, { - name: "Dutch's Dozen", - freq: 1340, - color: '#1ecc43', + name: 'PMC CMD', + freq: 1232, + color: '#4dc5ce', }, { - name: 'VAI', - freq: 1218, - color: '#1ecc43', + name: 'PMC', + freq: 1233, + color: '#4dc5ce', }, { - name: 'ERT', - freq: 1342, - color: '#1ecc43', + name: 'PMC ENG', + freq: 1234, + color: '#4dc5ce', + }, + { + name: 'PMC MED', + freq: 1235, + color: '#4dc5ce', + }, + { + name: 'PMC CCT', + freq: 1236, + color: '#4dc5ce', + }, + { + name: 'Deathsquad', + freq: 1239, + color: '#fe9b24', }, { name: 'UPP', - freq: 1338, - color: '#1ecc43', + freq: 1251, + color: '#8f4a4b', + }, + { + name: 'UPP CMD', + freq: 1252, + color: '#8f4a4b', + }, + { + name: 'UPP ENG', + freq: 1253, + color: '#8f4a4b', + }, + { + name: 'UPP MED', + freq: 1254, + color: '#8f4a4b', + }, + { + name: 'UPP CCT', + freq: 1255, + color: '#8f4a4b', + }, + { + name: 'UPP KDO', + freq: 1259, + color: '#8f4a4b', }, { name: 'CLF', - freq: 1339, - color: '#1ecc43', + freq: 1271, + color: '#8e83ca', }, { - name: 'Deathsquad', - freq: 1344, + name: 'CLF CMD', + freq: 1272, + color: '#8e83ca', + }, + { + name: 'CLF ENG', + freq: 1273, + color: '#8e83ca', + }, + { + name: 'CLF MED', + freq: 1274, + color: '#8e83ca', + }, + { + name: 'CLF CCT', + freq: 1275, + color: '#8e83ca', + }, + { + name: 'LSTN BUG A', + freq: 1290, + color: '#d65d95', + }, + { + name: 'LSTN BUG B', + freq: 1291, + color: '#d65d95', + }, + { + name: 'Common', + freq: 1461, color: '#1ecc43', }, { - name: 'ARES', - freq: 1447, + name: 'Colony', + freq: 1469, color: '#1ecc43', }, { name: 'High Command', - freq: 1240, - color: '#1ecc43', + freq: 1471, + color: '#318779', }, { - name: 'CCT', - freq: 1350, - color: '#1ecc43', + name: 'SOF', + freq: 1472, + color: '#318779', + }, + { + name: 'Provost', + freq: 1473, + color: '#9b0612', + }, + { + name: 'Sentry', + freq: 1480, + color: '#844300', }, { name: 'Command', - freq: 1353, - color: '#1ecc43', + freq: 1481, + color: '#779cc2', }, { name: 'Medsci', - freq: 1355, - color: '#1ecc43', + freq: 1482, + color: '#008160', }, { name: 'Engineering', - freq: 1357, - color: '#1ecc43', + freq: 1483, + color: '#a66300', }, { name: 'MP', - freq: 1359, - color: '#1ecc43', + freq: 1484, + color: '#a52929', }, { name: 'Req', - freq: 1354, - color: '#1ecc43', + freq: 1485, + color: '#ba8e41', }, { name: 'JTAC', - freq: 1358, - color: '#1ecc43', + freq: 1486, + color: '#ad3b98', }, { name: 'Intel', - freq: 1356, - color: '#1ecc43', + freq: 1487, + color: '#027d02', }, { name: 'Alamo', - freq: 1441, + freq: 1488, color: '#1ecc43', }, { name: 'Normandy', - freq: 1443, + freq: 1489, color: '#1ecc43', }, { name: 'Alpha', - freq: 1449, - color: '#1ecc43', + freq: 1491, + color: '#db2626', }, { name: 'Bravo', - freq: 1451, - color: '#1ecc43', - }, - { - name: 'Common', - freq: 1461, - color: '#1ecc43', + freq: 1492, + color: '#c68610', }, { - name: 'Colony', - freq: 1469, - color: '#1ecc43', - }, - { - name: 'MARSOC', - freq: 1241, - color: '#1ecc43', + name: 'Charlie', + freq: 1493, + color: '#aa55aa', }, { - name: 'Reserves', - freq: 1457, - color: '#1ecc43', + name: 'Delta', + freq: 1494, + color: '#007fcf', }, { name: 'Echo', - freq: 1456, - color: '#1ecc43', + freq: 1495, + color: '#3eb489', }, { - name: 'Delta', - freq: 1455, - color: '#1ecc43', + name: 'Reserves', + freq: 1496, + color: '#ad6d48', }, { - name: 'Charlie', - freq: 1453, - color: '#1ecc43', + name: 'ARES', + freq: 1500, + color: '#ff00ff', }, ]; diff --git a/tgui/public/tgui-panel.bundle.css b/tgui/public/tgui-panel.bundle.css index 3cb39fe3dbb8..9a9fc658bc7a 100644 --- a/tgui/public/tgui-panel.bundle.css +++ b/tgui/public/tgui-panel.bundle.css @@ -1,2 +1,2 @@ -html,body{box-sizing:border-box;height:100%;margin:0;font-size:12px}html{overflow:hidden;cursor:default}body{overflow:auto;font-family:Verdana,Geneva,sans-serif}*,*:before,*:after{box-sizing:inherit}h1,h2,h3,h4,h5,h6{display:block;margin:0;padding:6px 0;padding:.5rem 0}h1{font-size:18px;font-size:1.5rem}h2{font-size:16px;font-size:1.333rem}h3{font-size:14px;font-size:1.167rem}h4{font-size:12px;font-size:1rem}td,th{vertical-align:baseline;text-align:left}.candystripe:nth-child(odd){background-color:rgba(0,0,0,.25)}.color-black{color:#1a1a1a !important}.color-white{color:#fff !important}.color-red{color:#df3e3e !important}.color-orange{color:#f37f33 !important}.color-yellow{color:#fbda21 !important}.color-olive{color:#cbe41c !important}.color-green{color:#25ca4c !important}.color-teal{color:#00d6cc !important}.color-blue{color:#2e93de !important}.color-dark-blue{color:#005fa7 !important}.color-violet{color:#7349cf !important}.color-purple{color:#ad45d0 !important}.color-pink{color:#e34da1 !important}.color-brown{color:#b97447 !important}.color-grey{color:#848484 !important}.color-light-grey{color:#b3b3b3 !important}.color-good{color:#68c22d !important}.color-average{color:#f29a29 !important}.color-bad{color:#df3e3e !important}.color-label{color:#8b9bb0 !important}.color-xeno{color:#664573 !important}.color-bg-black{background-color:#000 !important}.color-bg-white{background-color:#d9d9d9 !important}.color-bg-red{background-color:#bd2020 !important}.color-bg-orange{background-color:#d95e0c !important}.color-bg-yellow{background-color:#d9b804 !important}.color-bg-olive{background-color:#9aad14 !important}.color-bg-green{background-color:#1b9638 !important}.color-bg-teal{background-color:#009a93 !important}.color-bg-blue{background-color:#1c71b1 !important}.color-bg-dark-blue{background-color:#003e6e !important}.color-bg-violet{background-color:#552dab !important}.color-bg-purple{background-color:#8b2baa !important}.color-bg-pink{background-color:#cf2082 !important}.color-bg-brown{background-color:#8c5836 !important}.color-bg-grey{background-color:#646464 !important}.color-bg-light-grey{background-color:#919191 !important}.color-bg-good{background-color:#4d9121 !important}.color-bg-average{background-color:#cd7a0d !important}.color-bg-bad{background-color:#bd2020 !important}.color-bg-label{background-color:#657a94 !important}.color-bg-xeno{background-color:#462f4e !important}.debug-layout,.debug-layout *:not(g):not(path){color:rgba(255,255,255,.9) !important;background:transparent !important;outline:1px solid rgba(255,255,255,.5) !important;box-shadow:none !important;filter:none !important}.debug-layout:hover,.debug-layout *:not(g):not(path):hover{outline-color:rgba(255,255,255,.8) !important}.outline-dotted{outline-style:dotted !important}.outline-dashed{outline-style:dashed !important}.outline-solid{outline-style:solid !important}.outline-double{outline-style:double !important}.outline-groove{outline-style:groove !important}.outline-ridge{outline-style:ridge !important}.outline-inset{outline-style:inset !important}.outline-outset{outline-style:outset !important}.outline-color-black{outline:.167rem solid #1a1a1a !important}.outline-color-white{outline:.167rem solid #fff !important}.outline-color-red{outline:.167rem solid #df3e3e !important}.outline-color-orange{outline:.167rem solid #f37f33 !important}.outline-color-yellow{outline:.167rem solid #fbda21 !important}.outline-color-olive{outline:.167rem solid #cbe41c !important}.outline-color-green{outline:.167rem solid #25ca4c !important}.outline-color-teal{outline:.167rem solid #00d6cc !important}.outline-color-blue{outline:.167rem solid #2e93de !important}.outline-color-dark-blue{outline:.167rem solid #005fa7 !important}.outline-color-violet{outline:.167rem solid #7349cf !important}.outline-color-purple{outline:.167rem solid #ad45d0 !important}.outline-color-pink{outline:.167rem solid #e34da1 !important}.outline-color-brown{outline:.167rem solid #b97447 !important}.outline-color-grey{outline:.167rem solid #848484 !important}.outline-color-light-grey{outline:.167rem solid #b3b3b3 !important}.outline-color-good{outline:.167rem solid #68c22d !important}.outline-color-average{outline:.167rem solid #f29a29 !important}.outline-color-bad{outline:.167rem solid #df3e3e !important}.outline-color-label{outline:.167rem solid #8b9bb0 !important}.outline-color-xeno{outline:.167rem solid #664573 !important}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.text-baseline{text-align:baseline}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-pre{white-space:pre}.text-bold{font-weight:bold}.text-italic{font-style:italic}.text-underline{text-decoration:underline}.BlockQuote{color:#8b9bb0;border-left:.1666666667em solid #8b9bb0;padding-left:.5em;margin-bottom:.5em}.BlockQuote:last-child{margin-bottom:0}.Button{position:relative;display:inline-block;line-height:1.667em;padding:0 .5em;margin-right:.1666666667em;white-space:nowrap;outline:0;border-radius:.16em;margin-bottom:.1666666667em;user-select:none;-ms-user-select:none}.Button:last-child{margin-right:0;margin-bottom:0}.Button .fa,.Button .fas,.Button .far{margin-left:-0.25em;margin-right:-0.25em;min-width:1.333em;text-align:center}.Button--hasContent .fa,.Button--hasContent .fas,.Button--hasContent .far{margin-right:.25em}.Button--hasContent.Button--iconPosition--right .fa,.Button--hasContent.Button--iconPosition--right .fas,.Button--hasContent.Button--iconPosition--right .far{margin-right:0px;margin-left:3px}.Button--ellipsis{overflow:hidden;text-overflow:ellipsis}.Button--fluid{display:block;margin-left:0;margin-right:0}.Button--circular{border-radius:50%}.Button--compact{padding:0 .25em;line-height:1.333em}.Button--color--black{transition:color 50ms,background-color 50ms;background-color:#000;color:#fff}.Button--color--black:hover{transition:color 0ms,background-color 0ms}.Button--color--black:focus{transition:color 100ms,background-color 100ms}.Button--color--black:hover,.Button--color--black:focus{background-color:#131313;color:#fff}.Button--color--white{transition:color 50ms,background-color 50ms;background-color:#d9d9d9;color:#000}.Button--color--white:hover{transition:color 0ms,background-color 0ms}.Button--color--white:focus{transition:color 100ms,background-color 100ms}.Button--color--white:hover,.Button--color--white:focus{background-color:#f8f8f8;color:#000}.Button--color--red{transition:color 50ms,background-color 50ms;background-color:#bd2020;color:#fff}.Button--color--red:hover{transition:color 0ms,background-color 0ms}.Button--color--red:focus{transition:color 100ms,background-color 100ms}.Button--color--red:hover,.Button--color--red:focus{background-color:#dc4848;color:#fff}.Button--color--orange{transition:color 50ms,background-color 50ms;background-color:#d95e0c;color:#fff}.Button--color--orange:hover{transition:color 0ms,background-color 0ms}.Button--color--orange:focus{transition:color 100ms,background-color 100ms}.Button--color--orange:hover,.Button--color--orange:focus{background-color:#f0853f;color:#fff}.Button--color--yellow{transition:color 50ms,background-color 50ms;background-color:#d9b804;color:#000}.Button--color--yellow:hover{transition:color 0ms,background-color 0ms}.Button--color--yellow:focus{transition:color 100ms,background-color 100ms}.Button--color--yellow:hover,.Button--color--yellow:focus{background-color:#f5d72e;color:#000}.Button--color--olive{transition:color 50ms,background-color 50ms;background-color:#9aad14;color:#fff}.Button--color--olive:hover{transition:color 0ms,background-color 0ms}.Button--color--olive:focus{transition:color 100ms,background-color 100ms}.Button--color--olive:hover,.Button--color--olive:focus{background-color:#c4da2b;color:#fff}.Button--color--green{transition:color 50ms,background-color 50ms;background-color:#1b9638;color:#fff}.Button--color--green:hover{transition:color 0ms,background-color 0ms}.Button--color--green:focus{transition:color 100ms,background-color 100ms}.Button--color--green:hover,.Button--color--green:focus{background-color:#32c154;color:#fff}.Button--color--teal{transition:color 50ms,background-color 50ms;background-color:#009a93;color:#fff}.Button--color--teal:hover{transition:color 0ms,background-color 0ms}.Button--color--teal:focus{transition:color 100ms,background-color 100ms}.Button--color--teal:hover,.Button--color--teal:focus{background-color:#13c4bc;color:#fff}.Button--color--blue{transition:color 50ms,background-color 50ms;background-color:#1c71b1;color:#fff}.Button--color--blue:hover{transition:color 0ms,background-color 0ms}.Button--color--blue:focus{transition:color 100ms,background-color 100ms}.Button--color--blue:hover,.Button--color--blue:focus{background-color:#3a95d9;color:#fff}.Button--color--dark-blue{transition:color 50ms,background-color 50ms;background-color:#003e6e;color:#fff}.Button--color--dark-blue:hover{transition:color 0ms,background-color 0ms}.Button--color--dark-blue:focus{transition:color 100ms,background-color 100ms}.Button--color--dark-blue:hover,.Button--color--dark-blue:focus{background-color:#135b92;color:#fff}.Button--color--violet{transition:color 50ms,background-color 50ms;background-color:#552dab;color:#fff}.Button--color--violet:hover{transition:color 0ms,background-color 0ms}.Button--color--violet:focus{transition:color 100ms,background-color 100ms}.Button--color--violet:hover,.Button--color--violet:focus{background-color:#7953cc;color:#fff}.Button--color--purple{transition:color 50ms,background-color 50ms;background-color:#8b2baa;color:#fff}.Button--color--purple:hover{transition:color 0ms,background-color 0ms}.Button--color--purple:focus{transition:color 100ms,background-color 100ms}.Button--color--purple:hover,.Button--color--purple:focus{background-color:#ad4fcd;color:#fff}.Button--color--pink{transition:color 50ms,background-color 50ms;background-color:#cf2082;color:#fff}.Button--color--pink:hover{transition:color 0ms,background-color 0ms}.Button--color--pink:focus{transition:color 100ms,background-color 100ms}.Button--color--pink:hover,.Button--color--pink:focus{background-color:#e257a5;color:#fff}.Button--color--brown{transition:color 50ms,background-color 50ms;background-color:#8c5836;color:#fff}.Button--color--brown:hover{transition:color 0ms,background-color 0ms}.Button--color--brown:focus{transition:color 100ms,background-color 100ms}.Button--color--brown:hover,.Button--color--brown:focus{background-color:#b47851;color:#fff}.Button--color--grey{transition:color 50ms,background-color 50ms;background-color:#646464;color:#fff}.Button--color--grey:hover{transition:color 0ms,background-color 0ms}.Button--color--grey:focus{transition:color 100ms,background-color 100ms}.Button--color--grey:hover,.Button--color--grey:focus{background-color:#868686;color:#fff}.Button--color--light-grey{transition:color 50ms,background-color 50ms;background-color:#919191;color:#fff}.Button--color--light-grey:hover{transition:color 0ms,background-color 0ms}.Button--color--light-grey:focus{transition:color 100ms,background-color 100ms}.Button--color--light-grey:hover,.Button--color--light-grey:focus{background-color:#bababa;color:#fff}.Button--color--good{transition:color 50ms,background-color 50ms;background-color:#4d9121;color:#fff}.Button--color--good:hover{transition:color 0ms,background-color 0ms}.Button--color--good:focus{transition:color 100ms,background-color 100ms}.Button--color--good:hover,.Button--color--good:focus{background-color:#6cba39;color:#fff}.Button--color--average{transition:color 50ms,background-color 50ms;background-color:#cd7a0d;color:#fff}.Button--color--average:hover{transition:color 0ms,background-color 0ms}.Button--color--average:focus{transition:color 100ms,background-color 100ms}.Button--color--average:hover,.Button--color--average:focus{background-color:#ed9d35;color:#fff}.Button--color--bad{transition:color 50ms,background-color 50ms;background-color:#bd2020;color:#fff}.Button--color--bad:hover{transition:color 0ms,background-color 0ms}.Button--color--bad:focus{transition:color 100ms,background-color 100ms}.Button--color--bad:hover,.Button--color--bad:focus{background-color:#dc4848;color:#fff}.Button--color--label{transition:color 50ms,background-color 50ms;background-color:#657a94;color:#fff}.Button--color--label:hover{transition:color 0ms,background-color 0ms}.Button--color--label:focus{transition:color 100ms,background-color 100ms}.Button--color--label:hover,.Button--color--label:focus{background-color:#91a1b3;color:#fff}.Button--color--xeno{transition:color 50ms,background-color 50ms;background-color:#462f4e;color:#fff}.Button--color--xeno:hover{transition:color 0ms,background-color 0ms}.Button--color--xeno:focus{transition:color 100ms,background-color 100ms}.Button--color--xeno:hover,.Button--color--xeno:focus{background-color:#64496d;color:#fff}.Button--color--default{transition:color 50ms,background-color 50ms;background-color:#3e6189;color:#fff}.Button--color--default:hover{transition:color 0ms,background-color 0ms}.Button--color--default:focus{transition:color 100ms,background-color 100ms}.Button--color--default:hover,.Button--color--default:focus{background-color:#5c83b0;color:#fff}.Button--color--caution{transition:color 50ms,background-color 50ms;background-color:#d9b804;color:#000}.Button--color--caution:hover{transition:color 0ms,background-color 0ms}.Button--color--caution:focus{transition:color 100ms,background-color 100ms}.Button--color--caution:hover,.Button--color--caution:focus{background-color:#f5d72e;color:#000}.Button--color--danger{transition:color 50ms,background-color 50ms;background-color:#bd2020;color:#fff}.Button--color--danger:hover{transition:color 0ms,background-color 0ms}.Button--color--danger:focus{transition:color 100ms,background-color 100ms}.Button--color--danger:hover,.Button--color--danger:focus{background-color:#dc4848;color:#fff}.Button--color--transparent{transition:color 50ms,background-color 50ms;background-color:#202020;color:#fff;background-color:rgba(32,32,32,0);color:rgba(255,255,255,.5)}.Button--color--transparent:hover{transition:color 0ms,background-color 0ms}.Button--color--transparent:focus{transition:color 100ms,background-color 100ms}.Button--color--transparent:hover,.Button--color--transparent:focus{background-color:#383838;color:#fff}.Button--disabled{background-color:#999 !important}.Button--selected{transition:color 50ms,background-color 50ms;background-color:#1b9638;color:#fff}.Button--selected:hover{transition:color 0ms,background-color 0ms}.Button--selected:focus{transition:color 100ms,background-color 100ms}.Button--selected:hover,.Button--selected:focus{background-color:#32c154;color:#fff}.Button--flex{display:inline-flex;flex-direction:column}.Button--flex--fluid{width:100%}.Button--verticalAlignContent--top{justify-content:flex-start}.Button--verticalAlignContent--middle{justify-content:center}.Button--verticalAlignContent--bottom{justify-content:flex-end}.Button__content{display:block;align-self:stretch}.ColorBox{display:inline-block;width:1em;height:1em;line-height:1em;text-align:center}.Dimmer{display:flex;justify-content:center;align-items:center;position:absolute;top:0;bottom:0;left:0;right:0;background-color:rgba(0,0,0,.75);z-index:1}.Divider--horizontal{margin:.5em 0}.Divider--horizontal:not(.Divider--hidden){border-top:.1666666667em solid rgba(255,255,255,.1)}.Divider--vertical{height:100%;margin:0 .5em}.Divider--vertical:not(.Divider--hidden){border-left:.1666666667em solid rgba(255,255,255,.1)}.Dropdown{position:relative}.Dropdown__control{position:relative;display:inline-block;font-family:Verdana,sans-serif;font-size:1em;width:8.3333333333em;line-height:1.4166666667em;user-select:none}.Dropdown__arrow-button{float:right;padding-left:.35em;width:1.2em;height:1.8333333333em;border-left:.0833333333em solid #000;border-left:.0833333333em solid rgba(0,0,0,.25)}.Dropdown__menu{position:absolute;overflow-y:auto;z-index:5;width:8.3333333333em;max-height:16.6666666667em;overflow-y:scroll;border-radius:0 0 .1666666667em .1666666667em;color:#fff;background-color:#000;background-color:rgba(0,0,0,.75)}.Dropdown__menu-noscroll{position:absolute;overflow-y:auto;z-index:5;width:8.3333333333em;max-height:16.6666666667em;border-radius:0 0 .1666666667em .1666666667em;color:#fff;background-color:#000;background-color:rgba(0,0,0,.75)}.Dropdown__menuentry{padding:.1666666667em .3333333333em;font-family:Verdana,sans-serif;font-size:1em;line-height:1.4166666667em;transition:background-color 100ms ease-out}.Dropdown__menuentry:hover{background-color:rgba(255,255,255,.2);transition:background-color 0ms}.Dropdown__over{top:auto;bottom:100%}.Dropdown__selected-text{display:inline-block;text-overflow:ellipsis;white-space:nowrap;height:1.4166666667em;width:calc(100% - 1.2em)}.Flex{display:-ms-flexbox;display:flex}.Flex--inline{display:inline-flex}.Flex--iefix{display:block}.Flex--iefix.Flex--inline{display:inline-block}.Flex__item--iefix{display:inline-block}.Flex--iefix--column>.Flex__item--iefix{display:block}.Input{position:relative;display:inline-block;width:10em;border:.0833333333em solid #88bfff;border:.0833333333em solid rgba(136,191,255,.75);border-radius:.16em;color:#fff;background-color:#0a0a0a;padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;overflow:visible}.Input--fluid{display:block;width:auto}.Input__baseline{display:inline-block;color:transparent}.Input__input{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;font-size:1em;line-height:1.4166666667em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;background-color:transparent;color:#fff;color:inherit}.Input__input:-ms-input-placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.Input--monospace .Input__input{font-family:"Consolas",monospace}.Knob{position:relative;font-size:1rem;width:2.6em;height:2.6em;margin:0 auto;margin-bottom:-0.2em;cursor:n-resize}.Knob:after{content:".";color:transparent;line-height:2.5em}.Knob__circle{position:absolute;top:.1em;bottom:.1em;left:.1em;right:.1em;margin:.3em;background-color:#333;background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.15) 0%, rgba(255, 255, 255, 0) 100%);border-radius:50%;box-shadow:0 .05em .5em 0 rgba(0,0,0,.5)}.Knob__cursorBox{position:absolute;top:0;bottom:0;left:0;right:0}.Knob__cursor{position:relative;top:.05em;margin:0 auto;width:.2em;height:.8em;background-color:rgba(255,255,255,.9)}.Knob__popupValue{position:absolute;top:-2rem;right:50%;font-size:1rem;text-align:center;padding:.25rem .5rem;color:#fff;background-color:#000;transform:translateX(50%);white-space:nowrap}.Knob__ring{position:absolute;top:0;bottom:0;left:0;right:0;padding:.1em}.Knob__ringTrackPivot{transform:rotateZ(135deg)}.Knob__ringTrack{fill:transparent;stroke:rgba(255,255,255,.1);stroke-width:8;stroke-linecap:round;stroke-dasharray:235.62}.Knob__ringFillPivot{transform:rotateZ(135deg)}.Knob--bipolar .Knob__ringFillPivot{transform:rotateZ(270deg)}.Knob__ringFill{fill:transparent;stroke:#6a96c9;stroke-width:8;stroke-linecap:round;stroke-dasharray:314.16;transition:stroke 50ms ease-out}.Knob--color--black .Knob__ringFill{stroke:#1a1a1a}.Knob--color--white .Knob__ringFill{stroke:#fff}.Knob--color--red .Knob__ringFill{stroke:#df3e3e}.Knob--color--orange .Knob__ringFill{stroke:#f37f33}.Knob--color--yellow .Knob__ringFill{stroke:#fbda21}.Knob--color--olive .Knob__ringFill{stroke:#cbe41c}.Knob--color--green .Knob__ringFill{stroke:#25ca4c}.Knob--color--teal .Knob__ringFill{stroke:#00d6cc}.Knob--color--blue .Knob__ringFill{stroke:#2e93de}.Knob--color--dark-blue .Knob__ringFill{stroke:#005fa7}.Knob--color--violet .Knob__ringFill{stroke:#7349cf}.Knob--color--purple .Knob__ringFill{stroke:#ad45d0}.Knob--color--pink .Knob__ringFill{stroke:#e34da1}.Knob--color--brown .Knob__ringFill{stroke:#b97447}.Knob--color--grey .Knob__ringFill{stroke:#848484}.Knob--color--light-grey .Knob__ringFill{stroke:#b3b3b3}.Knob--color--good .Knob__ringFill{stroke:#68c22d}.Knob--color--average .Knob__ringFill{stroke:#f29a29}.Knob--color--bad .Knob__ringFill{stroke:#df3e3e}.Knob--color--label .Knob__ringFill{stroke:#8b9bb0}.Knob--color--xeno .Knob__ringFill{stroke:#664573}.LabeledList{display:table;width:100%;width:calc(100% + 1em);border-collapse:collapse;border-spacing:0;margin:-0.25em -0.5em;margin-bottom:0;padding:0}.LabeledList__row{display:table-row}.LabeledList__row:last-child .LabeledList__cell{padding-bottom:0}.LabeledList__cell{display:table-cell;margin:0;padding:.25em .5em;border:0;text-align:left}.LabeledList__label--nowrap{width:1%;white-space:nowrap;min-width:5em}.LabeledList__buttons{width:.1%;white-space:nowrap;text-align:right;padding-top:.0833333333em;padding-bottom:0}.Modal{background-color:#202020;max-width:calc(100% - 1rem);padding:1rem}.NoticeBox{padding:.33em .5em;margin-bottom:.5em;box-shadow:none;font-weight:bold;font-style:italic;color:#000;background-color:#bb9b68;background-image:repeating-linear-gradient(-45deg, transparent, transparent 0.8333333333em, rgba(0, 0, 0, 0.1) 0.8333333333em, rgba(0, 0, 0, 0.1) 1.6666666667em)}.NoticeBox--color--black{color:#fff;background-color:#000}.NoticeBox--color--white{color:#000;background-color:#b3b3b3}.NoticeBox--color--red{color:#fff;background-color:#701f1f}.NoticeBox--color--orange{color:#fff;background-color:#854114}.NoticeBox--color--yellow{color:#000;background-color:#83710d}.NoticeBox--color--olive{color:#000;background-color:#576015}.NoticeBox--color--green{color:#fff;background-color:#174e24}.NoticeBox--color--teal{color:#fff;background-color:#064845}.NoticeBox--color--blue{color:#fff;background-color:#1b4565}.NoticeBox--color--dark-blue{color:#fff;background-color:#02121f}.NoticeBox--color--violet{color:#fff;background-color:#3b2864}.NoticeBox--color--purple{color:#fff;background-color:#542663}.NoticeBox--color--pink{color:#fff;background-color:#802257}.NoticeBox--color--brown{color:#fff;background-color:#4c3729}.NoticeBox--color--grey{color:#fff;background-color:#3e3e3e}.NoticeBox--color--light-grey{color:#fff;background-color:#6a6a6a}.NoticeBox--color--good{color:#fff;background-color:#2e4b1a}.NoticeBox--color--average{color:#fff;background-color:#7b4e13}.NoticeBox--color--bad{color:#fff;background-color:#701f1f}.NoticeBox--color--label{color:#fff;background-color:#53565a}.NoticeBox--color--xeno{color:#fff;background-color:#19161b}.NoticeBox--type--info{color:#fff;background-color:#235982}.NoticeBox--type--success{color:#fff;background-color:#1e662f}.NoticeBox--type--warning{color:#fff;background-color:#a95219}.NoticeBox--type--danger{color:#fff;background-color:#8f2828}.Input{position:relative;display:inline-block;width:10em;border:.0833333333em solid #88bfff;border:.0833333333em solid rgba(136,191,255,.75);border-radius:.16em;color:#fff;background-color:#0a0a0a;padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;overflow:visible}.Input--fluid{display:block;width:auto}.Input__baseline{display:inline-block;color:transparent}.Input__input{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;font-size:1em;line-height:1.4166666667em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;background-color:transparent;color:#fff;color:inherit}.Input__input:-ms-input-placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.Input--monospace .Input__input{font-family:"Consolas",monospace}.NumberInput{position:relative;display:inline-block;border:.0833333333em solid #88bfff;border:.0833333333em solid rgba(136,191,255,.75);border-radius:.16em;color:#88bfff;background-color:#0a0a0a;padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;text-align:right;overflow:visible;cursor:n-resize}.NumberInput--fluid{display:block}.NumberInput__content{margin-left:.5em}.NumberInput__barContainer{position:absolute;top:.1666666667em;bottom:.1666666667em;left:.1666666667em}.NumberInput__bar{position:absolute;bottom:0;left:0;width:.25em;box-sizing:border-box;border-bottom:.0833333333em solid #88bfff;background-color:#88bfff}.NumberInput__input{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;font-size:1em;line-height:1.4166666667em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;background-color:#0a0a0a;color:#fff;text-align:right}.ProgressBar{display:inline-block;position:relative;width:100%;padding:0 .5em;border-width:.0833333333em !important;border-style:solid !important;border-radius:.16em;background-color:rgba(0,0,0,0);transition:border-color 900ms ease-out}.ProgressBar__fill{position:absolute;top:-0.5px;left:0px;bottom:-0.5px}.ProgressBar__fill--animated{transition:background-color 900ms ease-out,width 900ms ease-out}.ProgressBar__content{position:relative;line-height:1.4166666667em;width:100%;text-align:right}.ProgressBar--color--default{border:.0833333333em solid #3e6189}.ProgressBar--color--default .ProgressBar__fill{background-color:#3e6189}.ProgressBar--color--black{border-color:#000 !important}.ProgressBar--color--black .ProgressBar__fill{background-color:#000}.ProgressBar--color--white{border-color:#d9d9d9 !important}.ProgressBar--color--white .ProgressBar__fill{background-color:#d9d9d9}.ProgressBar--color--red{border-color:#bd2020 !important}.ProgressBar--color--red .ProgressBar__fill{background-color:#bd2020}.ProgressBar--color--orange{border-color:#d95e0c !important}.ProgressBar--color--orange .ProgressBar__fill{background-color:#d95e0c}.ProgressBar--color--yellow{border-color:#d9b804 !important}.ProgressBar--color--yellow .ProgressBar__fill{background-color:#d9b804}.ProgressBar--color--olive{border-color:#9aad14 !important}.ProgressBar--color--olive .ProgressBar__fill{background-color:#9aad14}.ProgressBar--color--green{border-color:#1b9638 !important}.ProgressBar--color--green .ProgressBar__fill{background-color:#1b9638}.ProgressBar--color--teal{border-color:#009a93 !important}.ProgressBar--color--teal .ProgressBar__fill{background-color:#009a93}.ProgressBar--color--blue{border-color:#1c71b1 !important}.ProgressBar--color--blue .ProgressBar__fill{background-color:#1c71b1}.ProgressBar--color--dark-blue{border-color:#003e6e !important}.ProgressBar--color--dark-blue .ProgressBar__fill{background-color:#003e6e}.ProgressBar--color--violet{border-color:#552dab !important}.ProgressBar--color--violet .ProgressBar__fill{background-color:#552dab}.ProgressBar--color--purple{border-color:#8b2baa !important}.ProgressBar--color--purple .ProgressBar__fill{background-color:#8b2baa}.ProgressBar--color--pink{border-color:#cf2082 !important}.ProgressBar--color--pink .ProgressBar__fill{background-color:#cf2082}.ProgressBar--color--brown{border-color:#8c5836 !important}.ProgressBar--color--brown .ProgressBar__fill{background-color:#8c5836}.ProgressBar--color--grey{border-color:#646464 !important}.ProgressBar--color--grey .ProgressBar__fill{background-color:#646464}.ProgressBar--color--light-grey{border-color:#919191 !important}.ProgressBar--color--light-grey .ProgressBar__fill{background-color:#919191}.ProgressBar--color--good{border-color:#4d9121 !important}.ProgressBar--color--good .ProgressBar__fill{background-color:#4d9121}.ProgressBar--color--average{border-color:#cd7a0d !important}.ProgressBar--color--average .ProgressBar__fill{background-color:#cd7a0d}.ProgressBar--color--bad{border-color:#bd2020 !important}.ProgressBar--color--bad .ProgressBar__fill{background-color:#bd2020}.ProgressBar--color--label{border-color:#657a94 !important}.ProgressBar--color--label .ProgressBar__fill{background-color:#657a94}.ProgressBar--color--xeno{border-color:#462f4e !important}.ProgressBar--color--xeno .ProgressBar__fill{background-color:#462f4e}.Section{position:relative;margin-bottom:.5em;background-color:#131313;background-color:#131313;box-sizing:border-box}.Section:last-child{margin-bottom:0}.Section__title{position:relative;padding:.5em;border-bottom:.1666666667em solid #4972a1}.Section__titleText{font-size:1.1666666667em;font-weight:bold;color:#fff}.Section__buttons{position:absolute;display:inline-block;right:.5em;margin-top:-.0833333333em}.Section__rest{position:relative}.Section__content{padding:.66em .5em}.Section--fitted>.Section__rest>.Section__content{padding:0}.Section--fill{display:flex;flex-direction:column;height:100%}.Section--fill>.Section__rest{flex-grow:1}.Section--fill>.Section__rest>.Section__content{height:100%}.Section--fill.Section--scrollable>.Section__rest>.Section__content{position:absolute;top:0;left:0;right:0;bottom:0}.Section--fill.Section--iefix{display:table !important;width:100% !important;height:100% !important;border-collapse:collapse;border-spacing:0}.Section--fill.Section--iefix>.Section__rest{display:table-row !important;height:100% !important}.Section--scrollable{overflow-x:hidden;overflow-y:hidden}.Section--scrollable>.Section__rest>.Section__content{overflow-y:scroll;overflow-x:hidden}.Section--scrollableHorizontal{overflow-x:hidden;overflow-y:hidden}.Section--scrollableHorizontal>.Section__rest>.Section__content{overflow-y:hidden;overflow-x:scroll}.Section--scrollable.Section--scrollableHorizontal{overflow-x:hidden;overflow-y:hidden}.Section--scrollable.Section--scrollableHorizontal>.Section__rest>.Section__content{overflow-y:scroll;overflow-x:scroll}.Section .Section{background-color:transparent;margin-left:-0.5em;margin-right:-0.5em}.Section .Section:first-child{margin-top:-0.5em}.Section .Section .Section__titleText{font-size:1.0833333333em}.Section .Section .Section .Section__titleText{font-size:1em}.Slider{cursor:e-resize}.Slider__cursorOffset{position:absolute;top:0;left:0;bottom:0;transition:none !important}.Slider__cursor{position:absolute;top:0;right:-.0833333333em;bottom:0;width:0;border-left:.1666666667em solid #fff}.Slider__pointer{position:absolute;right:-.4166666667em;bottom:-.3333333333em;width:0;height:0;border-left:.4166666667em solid transparent;border-right:.4166666667em solid transparent;border-bottom:.4166666667em solid #fff}.Slider__popupValue{position:absolute;right:0;top:-2rem;font-size:1rem;padding:.25rem .5rem;color:#fff;background-color:#000;transform:translateX(50%);white-space:nowrap}.Divider--horizontal{margin:.5em 0}.Divider--horizontal:not(.Divider--hidden){border-top:.1666666667em solid rgba(255,255,255,.1)}.Divider--vertical{height:100%;margin:0 .5em}.Divider--vertical:not(.Divider--hidden){border-left:.1666666667em solid rgba(255,255,255,.1)}.Stack--fill{height:100%}.Stack--horizontal>.Stack__item{margin-left:.5em}.Stack--horizontal>.Stack__item:first-child{margin-left:0}.Stack--vertical>.Stack__item{margin-top:.5em}.Stack--vertical>.Stack__item:first-child{margin-top:0}.Stack--horizontal>.Stack__divider:not(.Stack__divider--hidden){border-left:.1666666667em solid rgba(255,255,255,.1)}.Stack--vertical>.Stack__divider:not(.Stack__divider--hidden){border-top:.1666666667em solid rgba(255,255,255,.1)}.Table{display:table;width:100%;border-collapse:collapse;border-spacing:0;margin:0}.Table--collapsing{width:auto}.Table__row{display:table-row}.Table__cell{display:table-cell;padding:0 .25em}.Table__cell:first-child{padding-left:0}.Table__cell:last-child{padding-right:0}.Table__row--header .Table__cell,.Table__cell--header{font-weight:bold;padding-bottom:.5em}.Table__cell--collapsing{width:1%;white-space:nowrap}.Tabs{display:flex;align-items:stretch;overflow:hidden;background-color:#131313}.Tabs--fill{height:100%}.Section .Tabs{background-color:transparent}.Section:not(.Section--fitted) .Tabs{margin:0 -0.5em .5em}.Section:not(.Section--fitted) .Tabs:first-child{margin-top:-0.5em}.Tabs--vertical{flex-direction:column;padding:.25em 0 .25em .25em}.Tabs--horizontal{margin-bottom:.5em;padding:.25em .25em 0 .25em}.Tabs--horizontal:last-child{margin-bottom:0}.Tabs__Tab{flex-grow:0}.Tabs--fluid .Tabs__Tab{flex-grow:1}.Tab{display:flex;align-items:center;justify-content:space-between;background-color:transparent;color:rgba(255,255,255,.5);min-height:2.25em;min-width:4em}.Tab:not(.Tab--selected):hover{background-color:rgba(255,255,255,.075)}.Tab--selected{background-color:rgba(255,255,255,.125);color:#dfe7f0}.Tab__text{flex-grow:1;margin:0 .5em}.Tab__left{min-width:1.5em;text-align:center;margin-left:.25em}.Tab__right{min-width:1.5em;text-align:center;margin-right:.25em}.Tabs--horizontal .Tab{border-top:.1666666667em solid transparent;border-bottom:.1666666667em solid transparent;border-top-left-radius:.25em;border-top-right-radius:.25em}.Tabs--horizontal .Tab--selected{border-bottom:.1666666667em solid #d4dfec}.Tabs--vertical .Tab{min-height:2em;border-left:.1666666667em solid transparent;border-right:.1666666667em solid transparent;border-top-left-radius:.25em;border-bottom-left-radius:.25em}.Tabs--vertical .Tab--selected{border-right:.1666666667em solid #d4dfec}.Tab--selected.Tab--color--black{color:#535353}.Tabs--horizontal .Tab--selected.Tab--color--black{border-bottom-color:#1a1a1a}.Tabs--vertical .Tab--selected.Tab--color--black{border-right-color:#1a1a1a}.Tab--selected.Tab--color--white{color:#fff}.Tabs--horizontal .Tab--selected.Tab--color--white{border-bottom-color:#fff}.Tabs--vertical .Tab--selected.Tab--color--white{border-right-color:#fff}.Tab--selected.Tab--color--red{color:#e76e6e}.Tabs--horizontal .Tab--selected.Tab--color--red{border-bottom-color:#df3e3e}.Tabs--vertical .Tab--selected.Tab--color--red{border-right-color:#df3e3e}.Tab--selected.Tab--color--orange{color:#f69f66}.Tabs--horizontal .Tab--selected.Tab--color--orange{border-bottom-color:#f37f33}.Tabs--vertical .Tab--selected.Tab--color--orange{border-right-color:#f37f33}.Tab--selected.Tab--color--yellow{color:#fce358}.Tabs--horizontal .Tab--selected.Tab--color--yellow{border-bottom-color:#fbda21}.Tabs--vertical .Tab--selected.Tab--color--yellow{border-right-color:#fbda21}.Tab--selected.Tab--color--olive{color:#d8eb55}.Tabs--horizontal .Tab--selected.Tab--color--olive{border-bottom-color:#cbe41c}.Tabs--vertical .Tab--selected.Tab--color--olive{border-right-color:#cbe41c}.Tab--selected.Tab--color--green{color:#53e074}.Tabs--horizontal .Tab--selected.Tab--color--green{border-bottom-color:#25ca4c}.Tabs--vertical .Tab--selected.Tab--color--green{border-right-color:#25ca4c}.Tab--selected.Tab--color--teal{color:#21fff5}.Tabs--horizontal .Tab--selected.Tab--color--teal{border-bottom-color:#00d6cc}.Tabs--vertical .Tab--selected.Tab--color--teal{border-right-color:#00d6cc}.Tab--selected.Tab--color--blue{color:#62aee6}.Tabs--horizontal .Tab--selected.Tab--color--blue{border-bottom-color:#2e93de}.Tabs--vertical .Tab--selected.Tab--color--blue{border-right-color:#2e93de}.Tab--selected.Tab--color--dark-blue{color:#008ffd}.Tabs--horizontal .Tab--selected.Tab--color--dark-blue{border-bottom-color:#005fa7}.Tabs--vertical .Tab--selected.Tab--color--dark-blue{border-right-color:#005fa7}.Tab--selected.Tab--color--violet{color:#9676db}.Tabs--horizontal .Tab--selected.Tab--color--violet{border-bottom-color:#7349cf}.Tabs--vertical .Tab--selected.Tab--color--violet{border-right-color:#7349cf}.Tab--selected.Tab--color--purple{color:#c274db}.Tabs--horizontal .Tab--selected.Tab--color--purple{border-bottom-color:#ad45d0}.Tabs--vertical .Tab--selected.Tab--color--purple{border-right-color:#ad45d0}.Tab--selected.Tab--color--pink{color:#ea79b9}.Tabs--horizontal .Tab--selected.Tab--color--pink{border-bottom-color:#e34da1}.Tabs--vertical .Tab--selected.Tab--color--pink{border-right-color:#e34da1}.Tab--selected.Tab--color--brown{color:#ca9775}.Tabs--horizontal .Tab--selected.Tab--color--brown{border-bottom-color:#b97447}.Tabs--vertical .Tab--selected.Tab--color--brown{border-right-color:#b97447}.Tab--selected.Tab--color--grey{color:#a3a3a3}.Tabs--horizontal .Tab--selected.Tab--color--grey{border-bottom-color:#848484}.Tabs--vertical .Tab--selected.Tab--color--grey{border-right-color:#848484}.Tab--selected.Tab--color--light-grey{color:#c6c6c6}.Tabs--horizontal .Tab--selected.Tab--color--light-grey{border-bottom-color:#b3b3b3}.Tabs--vertical .Tab--selected.Tab--color--light-grey{border-right-color:#b3b3b3}.Tab--selected.Tab--color--good{color:#8cd95a}.Tabs--horizontal .Tab--selected.Tab--color--good{border-bottom-color:#68c22d}.Tabs--vertical .Tab--selected.Tab--color--good{border-right-color:#68c22d}.Tab--selected.Tab--color--average{color:#f5b35e}.Tabs--horizontal .Tab--selected.Tab--color--average{border-bottom-color:#f29a29}.Tabs--vertical .Tab--selected.Tab--color--average{border-right-color:#f29a29}.Tab--selected.Tab--color--bad{color:#e76e6e}.Tabs--horizontal .Tab--selected.Tab--color--bad{border-bottom-color:#df3e3e}.Tabs--vertical .Tab--selected.Tab--color--bad{border-right-color:#df3e3e}.Tab--selected.Tab--color--label{color:#a8b4c4}.Tabs--horizontal .Tab--selected.Tab--color--label{border-bottom-color:#8b9bb0}.Tabs--vertical .Tab--selected.Tab--color--label{border-right-color:#8b9bb0}.Tab--selected.Tab--color--xeno{color:#9366a3}.Tabs--horizontal .Tab--selected.Tab--color--xeno{border-bottom-color:#664573}.Tabs--vertical .Tab--selected.Tab--color--xeno{border-right-color:#664573}.Input{position:relative;display:inline-block;width:10em;border:.0833333333em solid #88bfff;border:.0833333333em solid rgba(136,191,255,.75);border-radius:.16em;color:#fff;background-color:#0a0a0a;padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;overflow:visible}.Input--fluid{display:block;width:auto}.Input__baseline{display:inline-block;color:transparent}.Input__input{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;font-size:1em;line-height:1.4166666667em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;background-color:transparent;color:#fff;color:inherit}.Input__input:-ms-input-placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.Input--monospace .Input__input{font-family:"Consolas",monospace}.TextArea{position:relative;display:inline-block;border:.0833333333em solid #88bfff;border:.0833333333em solid rgba(136,191,255,.75);border-radius:.16em;background-color:#0a0a0a;margin-right:.1666666667em;line-height:1.4166666667em;box-sizing:border-box;width:100%}.TextArea--fluid{display:block;width:auto;height:auto}.TextArea--noborder{border:0px}.TextArea__textarea.TextArea__textarea--scrollable{overflow:auto;overflow-x:hidden;overflow-y:scroll}.TextArea__textarea{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;height:100%;font-size:1em;line-height:1.4166666667em;min-height:1.4166666667em;margin:0;padding:0 .5em;font-family:inherit;background-color:transparent;color:inherit;box-sizing:border-box;word-wrap:break-word;overflow:hidden}.TextArea__textarea:-ms-input-placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.TextArea__textarea_custom{overflow:visible;white-space:pre-wrap}.Tooltip{z-index:2;padding:.5em .75em;pointer-events:none;text-align:left;transition:opacity 150ms ease-out;background-color:#000;color:#fff;box-shadow:.1em .1em 1.25em -0.1em rgba(0,0,0,.5);border-radius:.16em;max-width:20.8333333333em}.Chat{color:#abc6ec}.Chat__badge{display:inline-block;min-width:.5em;font-size:.7em;padding:.2em .3em;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:crimson;border-radius:10px;transition:font-size 200ms ease-out}.Chat__badge:before{content:"x"}.Chat__badge--animate{font-size:.9em;transition:font-size 0ms}.Chat__scrollButton{position:fixed;right:2em;bottom:1em}.Chat__reconnected{font-size:.85em;text-align:center;margin:1em 0 2em}.Chat__reconnected:before{content:"Reconnected";display:inline-block;border-radius:1em;padding:0 .7em;color:#db2828;background-color:#131313}.Chat__reconnected:after{content:"";display:block;margin-top:-0.75em;border-bottom:.1666666667em solid #db2828}.Chat__highlight{color:#000}.Chat__highlight--restricted{color:#fff;background-color:#a00;font-weight:bold}.ChatMessage{word-wrap:break-word}.ChatMessage--highlighted{position:relative;border-left:.1666666667em solid #fd4;padding-left:.5em}.ChatMessage--highlighted:after{content:"";position:absolute;top:0;bottom:0;left:0;right:0;background-color:rgba(255,221,68,.1);pointer-events:none}.Ping{position:relative;padding:.125em .25em;border:.0833333333em solid rgba(140,140,140,.5);border-radius:.25em;width:3.75em;text-align:right}.Ping__indicator{content:"";position:absolute;top:.5em;left:.5em;width:.5em;height:.5em;background-color:#888;border-radius:.25em}.Notifications{position:absolute;bottom:1em;left:1em;right:2em}.Notification{color:#fff;background-color:crimson;padding:.5em;margin:1em 0}.Notification:first-child{margin-top:0}.Notification:last-child{margin-bottom:0}.Layout,.Layout *{scrollbar-base-color:#181818;scrollbar-face-color:#363636;scrollbar-3dlight-color:#202020;scrollbar-highlight-color:#202020;scrollbar-track-color:#181818;scrollbar-arrow-color:#909090;scrollbar-shadow-color:#363636}.Layout__content{position:absolute;top:0;bottom:0;left:0;right:0;overflow-x:hidden;overflow-y:hidden}.Layout__content--scrollable{overflow-y:scroll;margin-bottom:0}.Window{position:fixed;top:0;bottom:0;left:0;right:0;color:#fff;background-color:#202020;background-image:linear-gradient(to bottom, #202020 0%, #202020 100%)}.Window__titleBar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;height:2.6666666667rem}.Window__rest{position:fixed;top:32px;top:2.6666666667rem;bottom:0;left:0;right:0}.Window__contentPadding{margin:.5rem;height:100%;height:calc(100% - 1.01rem)}.Window__contentPadding:after{height:0}.Layout__content--scrollable .Window__contentPadding:after{display:block;content:"";height:.5rem}.Window__dimmer{position:fixed;top:0;bottom:0;left:0;right:0;background-color:rgba(56,56,56,.25);pointer-events:none}.Window__resizeHandle__se{position:fixed;bottom:0;right:0;width:20px;width:1.6666666667rem;height:20px;height:1.6666666667rem;cursor:se-resize}.Window__resizeHandle__s{position:fixed;bottom:0;left:0;right:0;height:6px;height:.5rem;cursor:s-resize}.Window__resizeHandle__e{position:fixed;top:0;bottom:0;right:0;width:3px;width:.25rem;cursor:e-resize}em{font-style:normal;font-weight:bold}img{margin:0;padding:0;line-height:1;-ms-interpolation-mode:nearest-neighbor;image-rendering:pixelated}img.icon{height:1em;min-height:16px;width:auto;vertical-align:bottom}a{color:#397ea5}a.visited{color:#7c00e6}a:visited{color:#7c00e6}a.popt{text-decoration:none}.popup{position:fixed;top:50%;left:50%;background:#ddd}.popup .close{position:absolute;background:#aaa;top:0;right:0;color:#333;text-decoration:none;z-index:2;padding:0 10px;height:30px;line-height:30px}.popup .close:hover{background:#999}.popup .head{background:#999;color:#ddd;padding:0 10px;height:30px;line-height:30px;text-transform:uppercase;font-size:.9em;font-weight:bold;border-bottom:2px solid green}.popup input{border:1px solid #999;background:#fff;margin:0;padding:5px;outline:none;color:#333}.popup input[type=text]:hover,.popup input[type=text]:active,.popup input[type=text]:focus{border-color:green}.popup input[type=submit]{padding:5px 10px;background:#999;color:#ddd;text-transform:uppercase;font-size:.9em;font-weight:bold}.popup input[type=submit]:hover,.popup input[type=submit]:focus,.popup input[type=submit]:active{background:#aaa;cursor:pointer}.changeFont{padding:10px}.changeFont a{display:block;text-decoration:none;padding:3px;color:#333}.changeFont a:hover{background:#ccc}.highlightPopup{padding:10px;text-align:center}.highlightPopup input[type=text]{display:block;width:215px;text-align:left;margin-top:5px}.highlightPopup input.highlightColor{background-color:#ff0}.highlightPopup input.highlightTermSubmit{margin-top:5px}.contextMenu{background-color:#ddd;position:fixed;margin:2px;width:150px}.contextMenu a{display:block;padding:2px 5px;text-decoration:none;color:#333}.contextMenu a:hover{background-color:#ccc}.filterMessages{padding:5px}.filterMessages div{padding:2px 0}.icon-stack{height:1em;line-height:1em;width:1em;vertical-align:middle;margin-top:-2px}.motd{color:#a4bad6;font-family:Verdana,sans-serif;white-space:normal}.motd h1,.motd h2,.motd h3,.motd h4,.motd h5,.motd h6{color:#a4bad6;text-decoration:underline}.motd a,.motd a:link,.motd a:visited,.motd a:active,.motd a:hover{color:#a4bad6}.bold,.name,.prefix,.ooc,.looc,.adminooc,.admin,.medal,.yell{font-weight:bold}.italic,.italics{font-style:italic}.highlight{background:#ff0}h1,h2,h3,h4,h5,h6{color:#a4bad6;font-family:Georgia,Verdana,sans-serif}h1.alert,h2.alert{color:#a4bad6}em{font-style:normal;font-weight:bold}.ooc{font-weight:bold}.adminobserverooc{color:#09c;font-weight:bold}.adminooc{color:#3d5bc3;font-weight:bold}.adminsay{color:#9611d4;font-weight:bold}.admin{color:#5975da;font-weight:bold}.name{font-weight:bold}.deadsay{color:#e2c1ff}.binarysay{color:#1e90ff}.binarysay a{color:lime}.binarysay a:active,.binarysay a:visited{color:#8f8}.radio{color:#1ecc43}.sciradio{color:#c68cfa}.comradio{color:#fcdf03}.secradio{color:#dd3535}.medradio{color:#57b8f0}.engradio{color:#f37746}.suppradio{color:#b88646}.servradio{color:#6ca729}.syndradio{color:#8f4a4b}.gangradio{color:#ac2ea1}.centcomradio{color:#2681a5}.aiprivradio{color:#d65d95}.redteamradio{color:#f44}.blueteamradio{color:#3434fd}.greenteamradio{color:#34fd34}.yellowteamradio{color:#fdfd34}.yell{font-weight:bold}.alert{color:#d82020}.userdanger{color:#c51e1e;font-weight:bold;font-size:185%}.bolddanger{color:#c51e1e;font-weight:bold}.danger{color:#c51e1e}.warning{color:#c51e1e;font-style:italic}.alertwarning{color:red;font-weight:bold}.boldwarning{color:#c51e1e;font-style:italic;font-weight:bold}.announce{color:#c51e1e;font-weight:bold}.boldannounce{color:#c51e1e;font-weight:bold}.minorannounce{font-weight:bold;font-size:185%}.greenannounce{color:#059223;font-weight:bold}.rose{color:#ff5050}.info{color:#9ab0ff}.notice{color:#6685f5}.staff_ic{color:#6685f5}.tinynotice{color:#6685f5;font-size:85%}.tinynoticeital{color:#6685f5;font-style:italic;font-size:85%}.smallnotice{color:#6685f5;font-size:90%}.smallnoticeital{color:#6685f5;font-style:italic;font-size:90%}.boldnotice{color:#6685f5;font-weight:bold}.hear{color:#6685f5;font-style:italic}.adminnotice{color:#6685f5}.adminhelp{color:red;font-weight:bold}.unconscious{color:#a4bad6;font-weight:bold}.suicide{color:#ff5050;font-style:italic}.green{color:#059223}.grey{color:#838383}.red{color:red}.blue{color:#215cff}.nicegreen{color:#059223}.boldnicegreen{color:#059223;font-weight:bold}.cult{color:#973e3b}.cultitalic{color:#973e3b;font-style:italic}.cultbold{color:#973e3b;font-style:italic;font-weight:bold}.cultboldtalic{color:#973e3b;font-weight:bold;font-size:185%}.cultlarge{color:#973e3b;font-weight:bold;font-size:185%}.narsie{color:#973e3b;font-weight:bold;font-size:925%}.narsiesmall{color:#973e3b;font-weight:bold;font-size:370%}.colossus{color:#7f282a;font-size:310%}.hierophant{color:#b441ee;font-weight:bold;font-style:italic}.hierophant_warning{color:#c56bf1;font-style:italic}.purple{color:#9956d3}.holoparasite{color:#88809c}.revennotice{color:#c099e2}.revenboldnotice{color:#c099e2;font-weight:bold}.revenbignotice{color:#c099e2;font-weight:bold;font-size:185%}.revenminor{color:#823abb}.revenwarning{color:#760fbb;font-style:italic}.revendanger{color:#760fbb;font-weight:bold;font-size:185%}.deconversion_message{color:#a947ff;font-size:185%;font-style:italic}.ghostalert{color:#60f;font-style:italic;font-weight:bold}.alien{color:#855d85}.noticealien{color:#059223}.alertalien{color:#059223;font-weight:bold}.changeling{color:#059223;font-style:italic}.alertsyndie{color:red;font-size:185%;font-weight:bold}.spider{color:#80f;font-weight:bold;font-size:185%}.interface{color:#750e75}.sans{font-family:"Comic Sans MS",cursive,sans-serif}.papyrus{font-family:"Papyrus",cursive,sans-serif}.robot{font-family:"Courier New",cursive,sans-serif}.tape_recorder{color:red;font-family:"Courier New",cursive,sans-serif}.command_headset{font-weight:bold;font-size:160%}.small{font-size:60%}.big{font-size:185%}.reallybig{font-size:245%}.extremelybig{font-size:310%}.greentext{color:#059223;font-size:185%}.redtext{color:#c51e1e;font-size:185%}.clown{color:#ff70c1;font-size:160%;font-family:"Comic Sans MS",cursive,sans-serif;font-weight:bold}.singing{font-family:"Trebuchet MS",cursive,sans-serif;font-style:italic}.his_grace{color:#15d512;font-family:"Courier New",cursive,sans-serif;font-style:italic}.hypnophrase{color:#202020;font-weight:bold;animation:hypnocolor 1500ms infinite;animation-direction:alternate}@keyframes hypnocolor{0%{color:#202020}25%{color:#4b02ac}50%{color:#9f41f1}75%{color:#541c9c}100%{color:#7adbf3}}.phobia{color:#d00;font-weight:bold;animation:phobia 750ms infinite}@keyframes phobia{0%{color:#f75a5a}50%{color:#d00}100%{color:#f75a5a}}.icon{height:1em;width:auto}.bigicon{font-size:2.5em}.memo{color:#638500;text-align:center}.memoedit{text-align:center;font-size:125%}.abductor{color:#c204c2;font-style:italic}.mind_control{color:#df3da9;font-size:100%;font-weight:bold;font-style:italic}.slime{color:#00ced1}.drone{color:#848482}.monkey{color:#975032}.swarmer{color:#2c75ff}.resonate{color:#298f85}.monkeyhive{color:#a56408}.monkeylead{color:#af6805;font-size:80%}.connectionClosed,.fatalError{background:red;color:#fff;padding:5px}.connectionClosed.restored{background:green}.internal.boldnshit{color:#3d5bc3;font-weight:bold}.text-normal{font-weight:normal;font-style:normal}.hidden{display:none;visibility:hidden}.ml-1{margin-left:1em}.ml-2{margin-left:2em}.ml-3{margin-left:3em}.xooc{color:#ac04e9;font-weight:bold;font-size:140%}.mooc{color:#090;font-weight:bold;font-size:140%}.yooc{color:#999600;font-weight:bold;font-size:140%}.headminsay{color:#653d78;font-weight:bold}.radio{color:#b4b4b4}.deptradio{color:#939}.comradio{color:#779cc2}.centradio{color:#5c5c8a}.hcradio{color:#318779}.pvstradio{color:#9b0612}.cryoradio{color:#ad6d48}.airadio{color:#f0f}.secradio{color:#a52929}.engradio{color:#a66300}.sentryradio{color:#844300}.sentryradio{color:#844300}.medradio{color:#008160}.supradio{color:#ba8e41}.jtacradio{color:#ad3b98}.intelradio{color:#027d02}.wyradio{color:#fe9b24}.pmcradio{color:#4dc5ce}.vairadio{color:#e3580e}.rmcradio{color:#e3580e}.cmbradio{color:#1b748c}.clfradio{color:#8e83ca}.alpharadio{color:#db2626}.bravoradio{color:#c68610}.charlieradio{color:#a5a}.deltaradio{color:#007fcf}.echoradio{color:#3eb489}.medium{font-size:110%}.big{font-size:115%}.large{font-size:125%}.extra_large{font-size:130%}.huge{font-size:150%}.underline{text-decoration:underline}.orange{color:#eca100}.normal{font-style:normal}.attack{color:#ff3838}.moderate{color:#c00}.disarm{color:#900}.passive{color:#600}.helpful{color:#368f31}.scanner{color:#ff3838}.scannerb{color:#ff3838;font-weight:bold}.scannerburn{color:orange}.scannerburnb{color:orange;font-weight:bold}.rose{color:#ff5050}.debuginfo{color:#493d26;font-style:italic}.xenonotice{color:#51a16c}.xenoboldnotice{color:#51a16c;font-style:italic}.xenowarning{color:#51a16c;font-style:italic}.xenominorwarning{color:#51a16c;font-weight:bold;font-style:italic}.xenodanger{color:#51a16c;font-weight:bold}.avoidharm{color:#72a0e5;font-weight:bold}.highdanger{color:#ff3838;font-weight:bold;font-size:140%}.xenohighdanger{color:#51a16c;font-weight:bold;font-size:140%}.xenoannounce{color:#65c585;font-family:book-antiqua;font-weight:bold;font-size:140%}.yautjabold{color:purple;font-weight:bold}.yautjaboldbig{color:purple;font-weight:bold;font-size:120%}.objectivebig{font-weight:bold;font-size:130%}.objectivegreen{color:lime}.objectivered{color:red}.objectivesuccess{color:lime;font-weight:bold;font-size:110%}.objectivefail{color:red;font-weight:bold;font-size:110%}.xenotalk,.xeno{color:#c048c0;font-style:italic}.xenoleader{color:#996e99;font-style:italic;font-size:125%}.xenoqueen{color:#996e99;font-style:italic;font-weight:bold;font-size:125%}.newscaster{color:maroon}.role_header{color:#e92d2d;display:block;text-align:center;font-weight:bold;font-family:trebuchet-ms;font-size:150%}.role_body{color:#3a3ae9;display:block;text-align:center;font-size:125%}.round_header{color:#e92d2d;display:block;text-align:center;font-family:courier;font-weight:bold;font-size:180%}.round_body{color:#c5c5c5;display:block;text-align:center;font-family:trebuchet-ms;font-weight:bold;font-size:125%}.event_announcement{color:#600d48;font-family:arial-narrow;font-weight:bold;font-size:125%}.announce_header{color:#cecece;font-weight:bold;font-size:150%}.announce_header_blue{color:#7575f3;font-weight:bold;font-size:150%}.announce_header_admin{color:#7575f3;font-weight:bold;font-size:150%}.announce_body{color:#e92d2d;font-weight:normal;font-size:125%}.centerbold{display:block;text-align:center;font-weight:bold}.mod{color:#917455;font-weight:bold}.modooc{color:#184880;font-weight:bold}.adminmod{color:#7c440c;font-weight:bold}.mentorsay{color:#d4af57;font-weight:bold}.mentorhelp{color:#090;font-weight:bold}.mentorbody{color:#da6200;font-weight:bold}.mentorstaff{color:#b5850d;font-weight:bold}.staffsay{color:#b5850d;font-weight:bold}.tajaran{color:#803b56}.tajaran_signlang{color:#941c1c}.skrell{color:#00ced1}.soghun{color:#228b22}.changeling{color:purple}.vox{color:#a0a}.monkey{color:#966c47}.german{color:#858f1e;font-family:"Times New Roman",Times,serif}.spanish{color:#cf982b}.japanese{color:#940927}.chinese{color:#fe1919}.zombie{color:#2dacb1;font-style:italic}.rough{font-family:trebuchet-ms,cursive,sans-serif}.commando{color:#fe9b24;font-style:bold}.say_quote{font-family:Georgia,Verdana,sans-serif}.admin .message{color:#314cad}.admin .prefix{font-weight:bolder}.pm{font-size:110%}.deadsay{color:#8b4dff}.retro_translator{font-weight:bold}.yautja_translator{color:#a00;font-weight:bold;animation:glitch .5s infinite}@keyframes glitch{25%{color:#a00;transform:translate(-2px, -1px)}50%{color:#be0000;transform:translate(1px, -2px)}75%{color:#8d0000;transform:translate(-1px, 2px)}100%{color:#830000;transform:translate(1px, 1px)}}.examine_block{background:#1b1c1e;border:1px solid #a4bad6;margin:.5em;padding:.5em .75em}.examine_block .icon{width:1.5em;height:1.5em;margin:0;padding:0}.tooltip{font-style:italic;border-bottom:1px dashed #fff} +html,body{box-sizing:border-box;height:100%;margin:0;font-size:12px}html{overflow:hidden;cursor:default}body{overflow:auto;font-family:Verdana,Geneva,sans-serif}*,*:before,*:after{box-sizing:inherit}h1,h2,h3,h4,h5,h6{display:block;margin:0;padding:6px 0;padding:.5rem 0}h1{font-size:18px;font-size:1.5rem}h2{font-size:16px;font-size:1.333rem}h3{font-size:14px;font-size:1.167rem}h4{font-size:12px;font-size:1rem}td,th{vertical-align:baseline;text-align:left}.candystripe:nth-child(odd){background-color:rgba(0,0,0,.25)}.color-black{color:#1a1a1a !important}.color-white{color:#fff !important}.color-red{color:#df3e3e !important}.color-orange{color:#f37f33 !important}.color-yellow{color:#fbda21 !important}.color-olive{color:#cbe41c !important}.color-green{color:#25ca4c !important}.color-teal{color:#00d6cc !important}.color-blue{color:#2e93de !important}.color-dark-blue{color:#005fa7 !important}.color-violet{color:#7349cf !important}.color-purple{color:#ad45d0 !important}.color-pink{color:#e34da1 !important}.color-brown{color:#b97447 !important}.color-grey{color:#848484 !important}.color-light-grey{color:#b3b3b3 !important}.color-good{color:#68c22d !important}.color-average{color:#f29a29 !important}.color-bad{color:#df3e3e !important}.color-label{color:#8b9bb0 !important}.color-xeno{color:#664573 !important}.color-bg-black{background-color:#000 !important}.color-bg-white{background-color:#d9d9d9 !important}.color-bg-red{background-color:#bd2020 !important}.color-bg-orange{background-color:#d95e0c !important}.color-bg-yellow{background-color:#d9b804 !important}.color-bg-olive{background-color:#9aad14 !important}.color-bg-green{background-color:#1b9638 !important}.color-bg-teal{background-color:#009a93 !important}.color-bg-blue{background-color:#1c71b1 !important}.color-bg-dark-blue{background-color:#003e6e !important}.color-bg-violet{background-color:#552dab !important}.color-bg-purple{background-color:#8b2baa !important}.color-bg-pink{background-color:#cf2082 !important}.color-bg-brown{background-color:#8c5836 !important}.color-bg-grey{background-color:#646464 !important}.color-bg-light-grey{background-color:#919191 !important}.color-bg-good{background-color:#4d9121 !important}.color-bg-average{background-color:#cd7a0d !important}.color-bg-bad{background-color:#bd2020 !important}.color-bg-label{background-color:#657a94 !important}.color-bg-xeno{background-color:#462f4e !important}.debug-layout,.debug-layout *:not(g):not(path){color:rgba(255,255,255,.9) !important;background:transparent !important;outline:1px solid rgba(255,255,255,.5) !important;box-shadow:none !important;filter:none !important}.debug-layout:hover,.debug-layout *:not(g):not(path):hover{outline-color:rgba(255,255,255,.8) !important}.outline-dotted{outline-style:dotted !important}.outline-dashed{outline-style:dashed !important}.outline-solid{outline-style:solid !important}.outline-double{outline-style:double !important}.outline-groove{outline-style:groove !important}.outline-ridge{outline-style:ridge !important}.outline-inset{outline-style:inset !important}.outline-outset{outline-style:outset !important}.outline-color-black{outline:.167rem solid #1a1a1a !important}.outline-color-white{outline:.167rem solid #fff !important}.outline-color-red{outline:.167rem solid #df3e3e !important}.outline-color-orange{outline:.167rem solid #f37f33 !important}.outline-color-yellow{outline:.167rem solid #fbda21 !important}.outline-color-olive{outline:.167rem solid #cbe41c !important}.outline-color-green{outline:.167rem solid #25ca4c !important}.outline-color-teal{outline:.167rem solid #00d6cc !important}.outline-color-blue{outline:.167rem solid #2e93de !important}.outline-color-dark-blue{outline:.167rem solid #005fa7 !important}.outline-color-violet{outline:.167rem solid #7349cf !important}.outline-color-purple{outline:.167rem solid #ad45d0 !important}.outline-color-pink{outline:.167rem solid #e34da1 !important}.outline-color-brown{outline:.167rem solid #b97447 !important}.outline-color-grey{outline:.167rem solid #848484 !important}.outline-color-light-grey{outline:.167rem solid #b3b3b3 !important}.outline-color-good{outline:.167rem solid #68c22d !important}.outline-color-average{outline:.167rem solid #f29a29 !important}.outline-color-bad{outline:.167rem solid #df3e3e !important}.outline-color-label{outline:.167rem solid #8b9bb0 !important}.outline-color-xeno{outline:.167rem solid #664573 !important}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.text-baseline{text-align:baseline}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-pre{white-space:pre}.text-bold{font-weight:bold}.text-italic{font-style:italic}.text-underline{text-decoration:underline}.BlockQuote{color:#8b9bb0;border-left:.1666666667em solid #8b9bb0;padding-left:.5em;margin-bottom:.5em}.BlockQuote:last-child{margin-bottom:0}.Button{position:relative;display:inline-block;line-height:1.667em;padding:0 .5em;margin-right:.1666666667em;white-space:nowrap;outline:0;border-radius:.16em;margin-bottom:.1666666667em;user-select:none;-ms-user-select:none}.Button:last-child{margin-right:0;margin-bottom:0}.Button .fa,.Button .fas,.Button .far{margin-left:-0.25em;margin-right:-0.25em;min-width:1.333em;text-align:center}.Button--hasContent .fa,.Button--hasContent .fas,.Button--hasContent .far{margin-right:.25em}.Button--hasContent.Button--iconPosition--right .fa,.Button--hasContent.Button--iconPosition--right .fas,.Button--hasContent.Button--iconPosition--right .far{margin-right:0px;margin-left:3px}.Button--ellipsis{overflow:hidden;text-overflow:ellipsis}.Button--fluid{display:block;margin-left:0;margin-right:0}.Button--circular{border-radius:50%}.Button--compact{padding:0 .25em;line-height:1.333em}.Button--color--black{transition:color 50ms,background-color 50ms;background-color:#000;color:#fff}.Button--color--black:hover{transition:color 0ms,background-color 0ms}.Button--color--black:focus{transition:color 100ms,background-color 100ms}.Button--color--black:hover,.Button--color--black:focus{background-color:#131313;color:#fff}.Button--color--white{transition:color 50ms,background-color 50ms;background-color:#d9d9d9;color:#000}.Button--color--white:hover{transition:color 0ms,background-color 0ms}.Button--color--white:focus{transition:color 100ms,background-color 100ms}.Button--color--white:hover,.Button--color--white:focus{background-color:#f8f8f8;color:#000}.Button--color--red{transition:color 50ms,background-color 50ms;background-color:#bd2020;color:#fff}.Button--color--red:hover{transition:color 0ms,background-color 0ms}.Button--color--red:focus{transition:color 100ms,background-color 100ms}.Button--color--red:hover,.Button--color--red:focus{background-color:#dc4848;color:#fff}.Button--color--orange{transition:color 50ms,background-color 50ms;background-color:#d95e0c;color:#fff}.Button--color--orange:hover{transition:color 0ms,background-color 0ms}.Button--color--orange:focus{transition:color 100ms,background-color 100ms}.Button--color--orange:hover,.Button--color--orange:focus{background-color:#f0853f;color:#fff}.Button--color--yellow{transition:color 50ms,background-color 50ms;background-color:#d9b804;color:#000}.Button--color--yellow:hover{transition:color 0ms,background-color 0ms}.Button--color--yellow:focus{transition:color 100ms,background-color 100ms}.Button--color--yellow:hover,.Button--color--yellow:focus{background-color:#f5d72e;color:#000}.Button--color--olive{transition:color 50ms,background-color 50ms;background-color:#9aad14;color:#fff}.Button--color--olive:hover{transition:color 0ms,background-color 0ms}.Button--color--olive:focus{transition:color 100ms,background-color 100ms}.Button--color--olive:hover,.Button--color--olive:focus{background-color:#c4da2b;color:#fff}.Button--color--green{transition:color 50ms,background-color 50ms;background-color:#1b9638;color:#fff}.Button--color--green:hover{transition:color 0ms,background-color 0ms}.Button--color--green:focus{transition:color 100ms,background-color 100ms}.Button--color--green:hover,.Button--color--green:focus{background-color:#32c154;color:#fff}.Button--color--teal{transition:color 50ms,background-color 50ms;background-color:#009a93;color:#fff}.Button--color--teal:hover{transition:color 0ms,background-color 0ms}.Button--color--teal:focus{transition:color 100ms,background-color 100ms}.Button--color--teal:hover,.Button--color--teal:focus{background-color:#13c4bc;color:#fff}.Button--color--blue{transition:color 50ms,background-color 50ms;background-color:#1c71b1;color:#fff}.Button--color--blue:hover{transition:color 0ms,background-color 0ms}.Button--color--blue:focus{transition:color 100ms,background-color 100ms}.Button--color--blue:hover,.Button--color--blue:focus{background-color:#3a95d9;color:#fff}.Button--color--dark-blue{transition:color 50ms,background-color 50ms;background-color:#003e6e;color:#fff}.Button--color--dark-blue:hover{transition:color 0ms,background-color 0ms}.Button--color--dark-blue:focus{transition:color 100ms,background-color 100ms}.Button--color--dark-blue:hover,.Button--color--dark-blue:focus{background-color:#135b92;color:#fff}.Button--color--violet{transition:color 50ms,background-color 50ms;background-color:#552dab;color:#fff}.Button--color--violet:hover{transition:color 0ms,background-color 0ms}.Button--color--violet:focus{transition:color 100ms,background-color 100ms}.Button--color--violet:hover,.Button--color--violet:focus{background-color:#7953cc;color:#fff}.Button--color--purple{transition:color 50ms,background-color 50ms;background-color:#8b2baa;color:#fff}.Button--color--purple:hover{transition:color 0ms,background-color 0ms}.Button--color--purple:focus{transition:color 100ms,background-color 100ms}.Button--color--purple:hover,.Button--color--purple:focus{background-color:#ad4fcd;color:#fff}.Button--color--pink{transition:color 50ms,background-color 50ms;background-color:#cf2082;color:#fff}.Button--color--pink:hover{transition:color 0ms,background-color 0ms}.Button--color--pink:focus{transition:color 100ms,background-color 100ms}.Button--color--pink:hover,.Button--color--pink:focus{background-color:#e257a5;color:#fff}.Button--color--brown{transition:color 50ms,background-color 50ms;background-color:#8c5836;color:#fff}.Button--color--brown:hover{transition:color 0ms,background-color 0ms}.Button--color--brown:focus{transition:color 100ms,background-color 100ms}.Button--color--brown:hover,.Button--color--brown:focus{background-color:#b47851;color:#fff}.Button--color--grey{transition:color 50ms,background-color 50ms;background-color:#646464;color:#fff}.Button--color--grey:hover{transition:color 0ms,background-color 0ms}.Button--color--grey:focus{transition:color 100ms,background-color 100ms}.Button--color--grey:hover,.Button--color--grey:focus{background-color:#868686;color:#fff}.Button--color--light-grey{transition:color 50ms,background-color 50ms;background-color:#919191;color:#fff}.Button--color--light-grey:hover{transition:color 0ms,background-color 0ms}.Button--color--light-grey:focus{transition:color 100ms,background-color 100ms}.Button--color--light-grey:hover,.Button--color--light-grey:focus{background-color:#bababa;color:#fff}.Button--color--good{transition:color 50ms,background-color 50ms;background-color:#4d9121;color:#fff}.Button--color--good:hover{transition:color 0ms,background-color 0ms}.Button--color--good:focus{transition:color 100ms,background-color 100ms}.Button--color--good:hover,.Button--color--good:focus{background-color:#6cba39;color:#fff}.Button--color--average{transition:color 50ms,background-color 50ms;background-color:#cd7a0d;color:#fff}.Button--color--average:hover{transition:color 0ms,background-color 0ms}.Button--color--average:focus{transition:color 100ms,background-color 100ms}.Button--color--average:hover,.Button--color--average:focus{background-color:#ed9d35;color:#fff}.Button--color--bad{transition:color 50ms,background-color 50ms;background-color:#bd2020;color:#fff}.Button--color--bad:hover{transition:color 0ms,background-color 0ms}.Button--color--bad:focus{transition:color 100ms,background-color 100ms}.Button--color--bad:hover,.Button--color--bad:focus{background-color:#dc4848;color:#fff}.Button--color--label{transition:color 50ms,background-color 50ms;background-color:#657a94;color:#fff}.Button--color--label:hover{transition:color 0ms,background-color 0ms}.Button--color--label:focus{transition:color 100ms,background-color 100ms}.Button--color--label:hover,.Button--color--label:focus{background-color:#91a1b3;color:#fff}.Button--color--xeno{transition:color 50ms,background-color 50ms;background-color:#462f4e;color:#fff}.Button--color--xeno:hover{transition:color 0ms,background-color 0ms}.Button--color--xeno:focus{transition:color 100ms,background-color 100ms}.Button--color--xeno:hover,.Button--color--xeno:focus{background-color:#64496d;color:#fff}.Button--color--default{transition:color 50ms,background-color 50ms;background-color:#3e6189;color:#fff}.Button--color--default:hover{transition:color 0ms,background-color 0ms}.Button--color--default:focus{transition:color 100ms,background-color 100ms}.Button--color--default:hover,.Button--color--default:focus{background-color:#5c83b0;color:#fff}.Button--color--caution{transition:color 50ms,background-color 50ms;background-color:#d9b804;color:#000}.Button--color--caution:hover{transition:color 0ms,background-color 0ms}.Button--color--caution:focus{transition:color 100ms,background-color 100ms}.Button--color--caution:hover,.Button--color--caution:focus{background-color:#f5d72e;color:#000}.Button--color--danger{transition:color 50ms,background-color 50ms;background-color:#bd2020;color:#fff}.Button--color--danger:hover{transition:color 0ms,background-color 0ms}.Button--color--danger:focus{transition:color 100ms,background-color 100ms}.Button--color--danger:hover,.Button--color--danger:focus{background-color:#dc4848;color:#fff}.Button--color--transparent{transition:color 50ms,background-color 50ms;background-color:#202020;color:#fff;background-color:rgba(32,32,32,0);color:rgba(255,255,255,.5)}.Button--color--transparent:hover{transition:color 0ms,background-color 0ms}.Button--color--transparent:focus{transition:color 100ms,background-color 100ms}.Button--color--transparent:hover,.Button--color--transparent:focus{background-color:#383838;color:#fff}.Button--disabled{background-color:#999 !important}.Button--selected{transition:color 50ms,background-color 50ms;background-color:#1b9638;color:#fff}.Button--selected:hover{transition:color 0ms,background-color 0ms}.Button--selected:focus{transition:color 100ms,background-color 100ms}.Button--selected:hover,.Button--selected:focus{background-color:#32c154;color:#fff}.Button--flex{display:inline-flex;flex-direction:column}.Button--flex--fluid{width:100%}.Button--verticalAlignContent--top{justify-content:flex-start}.Button--verticalAlignContent--middle{justify-content:center}.Button--verticalAlignContent--bottom{justify-content:flex-end}.Button__content{display:block;align-self:stretch}.ColorBox{display:inline-block;width:1em;height:1em;line-height:1em;text-align:center}.Dimmer{display:flex;justify-content:center;align-items:center;position:absolute;top:0;bottom:0;left:0;right:0;background-color:rgba(0,0,0,.75);z-index:1}.Divider--horizontal{margin:.5em 0}.Divider--horizontal:not(.Divider--hidden){border-top:.1666666667em solid rgba(255,255,255,.1)}.Divider--vertical{height:100%;margin:0 .5em}.Divider--vertical:not(.Divider--hidden){border-left:.1666666667em solid rgba(255,255,255,.1)}.Dropdown{position:relative}.Dropdown__control{position:relative;display:inline-block;font-family:Verdana,sans-serif;font-size:1em;width:8.3333333333em;line-height:1.4166666667em;user-select:none}.Dropdown__arrow-button{float:right;padding-left:.35em;width:1.2em;height:1.8333333333em;border-left:.0833333333em solid #000;border-left:.0833333333em solid rgba(0,0,0,.25)}.Dropdown__menu{position:absolute;overflow-y:auto;z-index:5;width:8.3333333333em;max-height:16.6666666667em;overflow-y:scroll;border-radius:0 0 .1666666667em .1666666667em;color:#fff;background-color:#000;background-color:rgba(0,0,0,.75)}.Dropdown__menu-noscroll{position:absolute;overflow-y:auto;z-index:5;width:8.3333333333em;max-height:16.6666666667em;border-radius:0 0 .1666666667em .1666666667em;color:#fff;background-color:#000;background-color:rgba(0,0,0,.75)}.Dropdown__menuentry{padding:.1666666667em .3333333333em;font-family:Verdana,sans-serif;font-size:1em;line-height:1.4166666667em;transition:background-color 100ms ease-out}.Dropdown__menuentry:hover{background-color:rgba(255,255,255,.2);transition:background-color 0ms}.Dropdown__over{top:auto;bottom:100%}.Dropdown__selected-text{display:inline-block;text-overflow:ellipsis;white-space:nowrap;height:1.4166666667em;width:calc(100% - 1.2em)}.Flex{display:-ms-flexbox;display:flex}.Flex--inline{display:inline-flex}.Flex--iefix{display:block}.Flex--iefix.Flex--inline{display:inline-block}.Flex__item--iefix{display:inline-block}.Flex--iefix--column>.Flex__item--iefix{display:block}.Input{position:relative;display:inline-block;width:10em;border:.0833333333em solid #88bfff;border:.0833333333em solid rgba(136,191,255,.75);border-radius:.16em;color:#fff;background-color:#0a0a0a;padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;overflow:visible}.Input--fluid{display:block;width:auto}.Input__baseline{display:inline-block;color:transparent}.Input__input{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;font-size:1em;line-height:1.4166666667em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;background-color:transparent;color:#fff;color:inherit}.Input__input:-ms-input-placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.Input--monospace .Input__input{font-family:"Consolas",monospace}.Knob{position:relative;font-size:1rem;width:2.6em;height:2.6em;margin:0 auto;margin-bottom:-0.2em;cursor:n-resize}.Knob:after{content:".";color:transparent;line-height:2.5em}.Knob__circle{position:absolute;top:.1em;bottom:.1em;left:.1em;right:.1em;margin:.3em;background-color:#333;background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.15) 0%, rgba(255, 255, 255, 0) 100%);border-radius:50%;box-shadow:0 .05em .5em 0 rgba(0,0,0,.5)}.Knob__cursorBox{position:absolute;top:0;bottom:0;left:0;right:0}.Knob__cursor{position:relative;top:.05em;margin:0 auto;width:.2em;height:.8em;background-color:rgba(255,255,255,.9)}.Knob__popupValue{position:absolute;top:-2rem;right:50%;font-size:1rem;text-align:center;padding:.25rem .5rem;color:#fff;background-color:#000;transform:translateX(50%);white-space:nowrap}.Knob__ring{position:absolute;top:0;bottom:0;left:0;right:0;padding:.1em}.Knob__ringTrackPivot{transform:rotateZ(135deg)}.Knob__ringTrack{fill:transparent;stroke:rgba(255,255,255,.1);stroke-width:8;stroke-linecap:round;stroke-dasharray:235.62}.Knob__ringFillPivot{transform:rotateZ(135deg)}.Knob--bipolar .Knob__ringFillPivot{transform:rotateZ(270deg)}.Knob__ringFill{fill:transparent;stroke:#6a96c9;stroke-width:8;stroke-linecap:round;stroke-dasharray:314.16;transition:stroke 50ms ease-out}.Knob--color--black .Knob__ringFill{stroke:#1a1a1a}.Knob--color--white .Knob__ringFill{stroke:#fff}.Knob--color--red .Knob__ringFill{stroke:#df3e3e}.Knob--color--orange .Knob__ringFill{stroke:#f37f33}.Knob--color--yellow .Knob__ringFill{stroke:#fbda21}.Knob--color--olive .Knob__ringFill{stroke:#cbe41c}.Knob--color--green .Knob__ringFill{stroke:#25ca4c}.Knob--color--teal .Knob__ringFill{stroke:#00d6cc}.Knob--color--blue .Knob__ringFill{stroke:#2e93de}.Knob--color--dark-blue .Knob__ringFill{stroke:#005fa7}.Knob--color--violet .Knob__ringFill{stroke:#7349cf}.Knob--color--purple .Knob__ringFill{stroke:#ad45d0}.Knob--color--pink .Knob__ringFill{stroke:#e34da1}.Knob--color--brown .Knob__ringFill{stroke:#b97447}.Knob--color--grey .Knob__ringFill{stroke:#848484}.Knob--color--light-grey .Knob__ringFill{stroke:#b3b3b3}.Knob--color--good .Knob__ringFill{stroke:#68c22d}.Knob--color--average .Knob__ringFill{stroke:#f29a29}.Knob--color--bad .Knob__ringFill{stroke:#df3e3e}.Knob--color--label .Knob__ringFill{stroke:#8b9bb0}.Knob--color--xeno .Knob__ringFill{stroke:#664573}.LabeledList{display:table;width:100%;width:calc(100% + 1em);border-collapse:collapse;border-spacing:0;margin:-0.25em -0.5em;margin-bottom:0;padding:0}.LabeledList__row{display:table-row}.LabeledList__row:last-child .LabeledList__cell{padding-bottom:0}.LabeledList__cell{display:table-cell;margin:0;padding:.25em .5em;border:0;text-align:left}.LabeledList__label--nowrap{width:1%;white-space:nowrap;min-width:5em}.LabeledList__buttons{width:.1%;white-space:nowrap;text-align:right;padding-top:.0833333333em;padding-bottom:0}.Modal{background-color:#202020;max-width:calc(100% - 1rem);padding:1rem}.NoticeBox{padding:.33em .5em;margin-bottom:.5em;box-shadow:none;font-weight:bold;font-style:italic;color:#000;background-color:#bb9b68;background-image:repeating-linear-gradient(-45deg, transparent, transparent 0.8333333333em, rgba(0, 0, 0, 0.1) 0.8333333333em, rgba(0, 0, 0, 0.1) 1.6666666667em)}.NoticeBox--color--black{color:#fff;background-color:#000}.NoticeBox--color--white{color:#000;background-color:#b3b3b3}.NoticeBox--color--red{color:#fff;background-color:#701f1f}.NoticeBox--color--orange{color:#fff;background-color:#854114}.NoticeBox--color--yellow{color:#000;background-color:#83710d}.NoticeBox--color--olive{color:#000;background-color:#576015}.NoticeBox--color--green{color:#fff;background-color:#174e24}.NoticeBox--color--teal{color:#fff;background-color:#064845}.NoticeBox--color--blue{color:#fff;background-color:#1b4565}.NoticeBox--color--dark-blue{color:#fff;background-color:#02121f}.NoticeBox--color--violet{color:#fff;background-color:#3b2864}.NoticeBox--color--purple{color:#fff;background-color:#542663}.NoticeBox--color--pink{color:#fff;background-color:#802257}.NoticeBox--color--brown{color:#fff;background-color:#4c3729}.NoticeBox--color--grey{color:#fff;background-color:#3e3e3e}.NoticeBox--color--light-grey{color:#fff;background-color:#6a6a6a}.NoticeBox--color--good{color:#fff;background-color:#2e4b1a}.NoticeBox--color--average{color:#fff;background-color:#7b4e13}.NoticeBox--color--bad{color:#fff;background-color:#701f1f}.NoticeBox--color--label{color:#fff;background-color:#53565a}.NoticeBox--color--xeno{color:#fff;background-color:#19161b}.NoticeBox--type--info{color:#fff;background-color:#235982}.NoticeBox--type--success{color:#fff;background-color:#1e662f}.NoticeBox--type--warning{color:#fff;background-color:#a95219}.NoticeBox--type--danger{color:#fff;background-color:#8f2828}.Input{position:relative;display:inline-block;width:10em;border:.0833333333em solid #88bfff;border:.0833333333em solid rgba(136,191,255,.75);border-radius:.16em;color:#fff;background-color:#0a0a0a;padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;overflow:visible}.Input--fluid{display:block;width:auto}.Input__baseline{display:inline-block;color:transparent}.Input__input{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;font-size:1em;line-height:1.4166666667em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;background-color:transparent;color:#fff;color:inherit}.Input__input:-ms-input-placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.Input--monospace .Input__input{font-family:"Consolas",monospace}.NumberInput{position:relative;display:inline-block;border:.0833333333em solid #88bfff;border:.0833333333em solid rgba(136,191,255,.75);border-radius:.16em;color:#88bfff;background-color:#0a0a0a;padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;text-align:right;overflow:visible;cursor:n-resize}.NumberInput--fluid{display:block}.NumberInput__content{margin-left:.5em}.NumberInput__barContainer{position:absolute;top:.1666666667em;bottom:.1666666667em;left:.1666666667em}.NumberInput__bar{position:absolute;bottom:0;left:0;width:.25em;box-sizing:border-box;border-bottom:.0833333333em solid #88bfff;background-color:#88bfff}.NumberInput__input{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;font-size:1em;line-height:1.4166666667em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;background-color:#0a0a0a;color:#fff;text-align:right}.ProgressBar{display:inline-block;position:relative;width:100%;padding:0 .5em;border-width:.0833333333em !important;border-style:solid !important;border-radius:.16em;background-color:rgba(0,0,0,0);transition:border-color 900ms ease-out}.ProgressBar__fill{position:absolute;top:-0.5px;left:0px;bottom:-0.5px}.ProgressBar__fill--animated{transition:background-color 900ms ease-out,width 900ms ease-out}.ProgressBar__content{position:relative;line-height:1.4166666667em;width:100%;text-align:right}.ProgressBar--color--default{border:.0833333333em solid #3e6189}.ProgressBar--color--default .ProgressBar__fill{background-color:#3e6189}.ProgressBar--color--black{border-color:#000 !important}.ProgressBar--color--black .ProgressBar__fill{background-color:#000}.ProgressBar--color--white{border-color:#d9d9d9 !important}.ProgressBar--color--white .ProgressBar__fill{background-color:#d9d9d9}.ProgressBar--color--red{border-color:#bd2020 !important}.ProgressBar--color--red .ProgressBar__fill{background-color:#bd2020}.ProgressBar--color--orange{border-color:#d95e0c !important}.ProgressBar--color--orange .ProgressBar__fill{background-color:#d95e0c}.ProgressBar--color--yellow{border-color:#d9b804 !important}.ProgressBar--color--yellow .ProgressBar__fill{background-color:#d9b804}.ProgressBar--color--olive{border-color:#9aad14 !important}.ProgressBar--color--olive .ProgressBar__fill{background-color:#9aad14}.ProgressBar--color--green{border-color:#1b9638 !important}.ProgressBar--color--green .ProgressBar__fill{background-color:#1b9638}.ProgressBar--color--teal{border-color:#009a93 !important}.ProgressBar--color--teal .ProgressBar__fill{background-color:#009a93}.ProgressBar--color--blue{border-color:#1c71b1 !important}.ProgressBar--color--blue .ProgressBar__fill{background-color:#1c71b1}.ProgressBar--color--dark-blue{border-color:#003e6e !important}.ProgressBar--color--dark-blue .ProgressBar__fill{background-color:#003e6e}.ProgressBar--color--violet{border-color:#552dab !important}.ProgressBar--color--violet .ProgressBar__fill{background-color:#552dab}.ProgressBar--color--purple{border-color:#8b2baa !important}.ProgressBar--color--purple .ProgressBar__fill{background-color:#8b2baa}.ProgressBar--color--pink{border-color:#cf2082 !important}.ProgressBar--color--pink .ProgressBar__fill{background-color:#cf2082}.ProgressBar--color--brown{border-color:#8c5836 !important}.ProgressBar--color--brown .ProgressBar__fill{background-color:#8c5836}.ProgressBar--color--grey{border-color:#646464 !important}.ProgressBar--color--grey .ProgressBar__fill{background-color:#646464}.ProgressBar--color--light-grey{border-color:#919191 !important}.ProgressBar--color--light-grey .ProgressBar__fill{background-color:#919191}.ProgressBar--color--good{border-color:#4d9121 !important}.ProgressBar--color--good .ProgressBar__fill{background-color:#4d9121}.ProgressBar--color--average{border-color:#cd7a0d !important}.ProgressBar--color--average .ProgressBar__fill{background-color:#cd7a0d}.ProgressBar--color--bad{border-color:#bd2020 !important}.ProgressBar--color--bad .ProgressBar__fill{background-color:#bd2020}.ProgressBar--color--label{border-color:#657a94 !important}.ProgressBar--color--label .ProgressBar__fill{background-color:#657a94}.ProgressBar--color--xeno{border-color:#462f4e !important}.ProgressBar--color--xeno .ProgressBar__fill{background-color:#462f4e}.Section{position:relative;margin-bottom:.5em;background-color:#131313;background-color:#131313;box-sizing:border-box}.Section:last-child{margin-bottom:0}.Section__title{position:relative;padding:.5em;border-bottom:.1666666667em solid #4972a1}.Section__titleText{font-size:1.1666666667em;font-weight:bold;color:#fff}.Section__buttons{position:absolute;display:inline-block;right:.5em;margin-top:-.0833333333em}.Section__rest{position:relative}.Section__content{padding:.66em .5em}.Section--fitted>.Section__rest>.Section__content{padding:0}.Section--fill{display:flex;flex-direction:column;height:100%}.Section--fill>.Section__rest{flex-grow:1}.Section--fill>.Section__rest>.Section__content{height:100%}.Section--fill.Section--scrollable>.Section__rest>.Section__content{position:absolute;top:0;left:0;right:0;bottom:0}.Section--fill.Section--iefix{display:table !important;width:100% !important;height:100% !important;border-collapse:collapse;border-spacing:0}.Section--fill.Section--iefix>.Section__rest{display:table-row !important;height:100% !important}.Section--scrollable{overflow-x:hidden;overflow-y:hidden}.Section--scrollable>.Section__rest>.Section__content{overflow-y:scroll;overflow-x:hidden}.Section--scrollableHorizontal{overflow-x:hidden;overflow-y:hidden}.Section--scrollableHorizontal>.Section__rest>.Section__content{overflow-y:hidden;overflow-x:scroll}.Section--scrollable.Section--scrollableHorizontal{overflow-x:hidden;overflow-y:hidden}.Section--scrollable.Section--scrollableHorizontal>.Section__rest>.Section__content{overflow-y:scroll;overflow-x:scroll}.Section .Section{background-color:transparent;margin-left:-0.5em;margin-right:-0.5em}.Section .Section:first-child{margin-top:-0.5em}.Section .Section .Section__titleText{font-size:1.0833333333em}.Section .Section .Section .Section__titleText{font-size:1em}.Slider{cursor:e-resize}.Slider__cursorOffset{position:absolute;top:0;left:0;bottom:0;transition:none !important}.Slider__cursor{position:absolute;top:0;right:-.0833333333em;bottom:0;width:0;border-left:.1666666667em solid #fff}.Slider__pointer{position:absolute;right:-.4166666667em;bottom:-.3333333333em;width:0;height:0;border-left:.4166666667em solid transparent;border-right:.4166666667em solid transparent;border-bottom:.4166666667em solid #fff}.Slider__popupValue{position:absolute;right:0;top:-2rem;font-size:1rem;padding:.25rem .5rem;color:#fff;background-color:#000;transform:translateX(50%);white-space:nowrap}.Divider--horizontal{margin:.5em 0}.Divider--horizontal:not(.Divider--hidden){border-top:.1666666667em solid rgba(255,255,255,.1)}.Divider--vertical{height:100%;margin:0 .5em}.Divider--vertical:not(.Divider--hidden){border-left:.1666666667em solid rgba(255,255,255,.1)}.Stack--fill{height:100%}.Stack--horizontal>.Stack__item{margin-left:.5em}.Stack--horizontal>.Stack__item:first-child{margin-left:0}.Stack--vertical>.Stack__item{margin-top:.5em}.Stack--vertical>.Stack__item:first-child{margin-top:0}.Stack--horizontal>.Stack__divider:not(.Stack__divider--hidden){border-left:.1666666667em solid rgba(255,255,255,.1)}.Stack--vertical>.Stack__divider:not(.Stack__divider--hidden){border-top:.1666666667em solid rgba(255,255,255,.1)}.Table{display:table;width:100%;border-collapse:collapse;border-spacing:0;margin:0}.Table--collapsing{width:auto}.Table__row{display:table-row}.Table__cell{display:table-cell;padding:0 .25em}.Table__cell:first-child{padding-left:0}.Table__cell:last-child{padding-right:0}.Table__row--header .Table__cell,.Table__cell--header{font-weight:bold;padding-bottom:.5em}.Table__cell--collapsing{width:1%;white-space:nowrap}.Tabs{display:flex;align-items:stretch;overflow:hidden;background-color:#131313}.Tabs--fill{height:100%}.Section .Tabs{background-color:transparent}.Section:not(.Section--fitted) .Tabs{margin:0 -0.5em .5em}.Section:not(.Section--fitted) .Tabs:first-child{margin-top:-0.5em}.Tabs--vertical{flex-direction:column;padding:.25em 0 .25em .25em}.Tabs--horizontal{margin-bottom:.5em;padding:.25em .25em 0 .25em}.Tabs--horizontal:last-child{margin-bottom:0}.Tabs__Tab{flex-grow:0}.Tabs--fluid .Tabs__Tab{flex-grow:1}.Tab{display:flex;align-items:center;justify-content:space-between;background-color:transparent;color:rgba(255,255,255,.5);min-height:2.25em;min-width:4em}.Tab:not(.Tab--selected):hover{background-color:rgba(255,255,255,.075)}.Tab--selected{background-color:rgba(255,255,255,.125);color:#dfe7f0}.Tab__text{flex-grow:1;margin:0 .5em}.Tab__left{min-width:1.5em;text-align:center;margin-left:.25em}.Tab__right{min-width:1.5em;text-align:center;margin-right:.25em}.Tabs--horizontal .Tab{border-top:.1666666667em solid transparent;border-bottom:.1666666667em solid transparent;border-top-left-radius:.25em;border-top-right-radius:.25em}.Tabs--horizontal .Tab--selected{border-bottom:.1666666667em solid #d4dfec}.Tabs--vertical .Tab{min-height:2em;border-left:.1666666667em solid transparent;border-right:.1666666667em solid transparent;border-top-left-radius:.25em;border-bottom-left-radius:.25em}.Tabs--vertical .Tab--selected{border-right:.1666666667em solid #d4dfec}.Tab--selected.Tab--color--black{color:#535353}.Tabs--horizontal .Tab--selected.Tab--color--black{border-bottom-color:#1a1a1a}.Tabs--vertical .Tab--selected.Tab--color--black{border-right-color:#1a1a1a}.Tab--selected.Tab--color--white{color:#fff}.Tabs--horizontal .Tab--selected.Tab--color--white{border-bottom-color:#fff}.Tabs--vertical .Tab--selected.Tab--color--white{border-right-color:#fff}.Tab--selected.Tab--color--red{color:#e76e6e}.Tabs--horizontal .Tab--selected.Tab--color--red{border-bottom-color:#df3e3e}.Tabs--vertical .Tab--selected.Tab--color--red{border-right-color:#df3e3e}.Tab--selected.Tab--color--orange{color:#f69f66}.Tabs--horizontal .Tab--selected.Tab--color--orange{border-bottom-color:#f37f33}.Tabs--vertical .Tab--selected.Tab--color--orange{border-right-color:#f37f33}.Tab--selected.Tab--color--yellow{color:#fce358}.Tabs--horizontal .Tab--selected.Tab--color--yellow{border-bottom-color:#fbda21}.Tabs--vertical .Tab--selected.Tab--color--yellow{border-right-color:#fbda21}.Tab--selected.Tab--color--olive{color:#d8eb55}.Tabs--horizontal .Tab--selected.Tab--color--olive{border-bottom-color:#cbe41c}.Tabs--vertical .Tab--selected.Tab--color--olive{border-right-color:#cbe41c}.Tab--selected.Tab--color--green{color:#53e074}.Tabs--horizontal .Tab--selected.Tab--color--green{border-bottom-color:#25ca4c}.Tabs--vertical .Tab--selected.Tab--color--green{border-right-color:#25ca4c}.Tab--selected.Tab--color--teal{color:#21fff5}.Tabs--horizontal .Tab--selected.Tab--color--teal{border-bottom-color:#00d6cc}.Tabs--vertical .Tab--selected.Tab--color--teal{border-right-color:#00d6cc}.Tab--selected.Tab--color--blue{color:#62aee6}.Tabs--horizontal .Tab--selected.Tab--color--blue{border-bottom-color:#2e93de}.Tabs--vertical .Tab--selected.Tab--color--blue{border-right-color:#2e93de}.Tab--selected.Tab--color--dark-blue{color:#008ffd}.Tabs--horizontal .Tab--selected.Tab--color--dark-blue{border-bottom-color:#005fa7}.Tabs--vertical .Tab--selected.Tab--color--dark-blue{border-right-color:#005fa7}.Tab--selected.Tab--color--violet{color:#9676db}.Tabs--horizontal .Tab--selected.Tab--color--violet{border-bottom-color:#7349cf}.Tabs--vertical .Tab--selected.Tab--color--violet{border-right-color:#7349cf}.Tab--selected.Tab--color--purple{color:#c274db}.Tabs--horizontal .Tab--selected.Tab--color--purple{border-bottom-color:#ad45d0}.Tabs--vertical .Tab--selected.Tab--color--purple{border-right-color:#ad45d0}.Tab--selected.Tab--color--pink{color:#ea79b9}.Tabs--horizontal .Tab--selected.Tab--color--pink{border-bottom-color:#e34da1}.Tabs--vertical .Tab--selected.Tab--color--pink{border-right-color:#e34da1}.Tab--selected.Tab--color--brown{color:#ca9775}.Tabs--horizontal .Tab--selected.Tab--color--brown{border-bottom-color:#b97447}.Tabs--vertical .Tab--selected.Tab--color--brown{border-right-color:#b97447}.Tab--selected.Tab--color--grey{color:#a3a3a3}.Tabs--horizontal .Tab--selected.Tab--color--grey{border-bottom-color:#848484}.Tabs--vertical .Tab--selected.Tab--color--grey{border-right-color:#848484}.Tab--selected.Tab--color--light-grey{color:#c6c6c6}.Tabs--horizontal .Tab--selected.Tab--color--light-grey{border-bottom-color:#b3b3b3}.Tabs--vertical .Tab--selected.Tab--color--light-grey{border-right-color:#b3b3b3}.Tab--selected.Tab--color--good{color:#8cd95a}.Tabs--horizontal .Tab--selected.Tab--color--good{border-bottom-color:#68c22d}.Tabs--vertical .Tab--selected.Tab--color--good{border-right-color:#68c22d}.Tab--selected.Tab--color--average{color:#f5b35e}.Tabs--horizontal .Tab--selected.Tab--color--average{border-bottom-color:#f29a29}.Tabs--vertical .Tab--selected.Tab--color--average{border-right-color:#f29a29}.Tab--selected.Tab--color--bad{color:#e76e6e}.Tabs--horizontal .Tab--selected.Tab--color--bad{border-bottom-color:#df3e3e}.Tabs--vertical .Tab--selected.Tab--color--bad{border-right-color:#df3e3e}.Tab--selected.Tab--color--label{color:#a8b4c4}.Tabs--horizontal .Tab--selected.Tab--color--label{border-bottom-color:#8b9bb0}.Tabs--vertical .Tab--selected.Tab--color--label{border-right-color:#8b9bb0}.Tab--selected.Tab--color--xeno{color:#9366a3}.Tabs--horizontal .Tab--selected.Tab--color--xeno{border-bottom-color:#664573}.Tabs--vertical .Tab--selected.Tab--color--xeno{border-right-color:#664573}.Input{position:relative;display:inline-block;width:10em;border:.0833333333em solid #88bfff;border:.0833333333em solid rgba(136,191,255,.75);border-radius:.16em;color:#fff;background-color:#0a0a0a;padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;overflow:visible}.Input--fluid{display:block;width:auto}.Input__baseline{display:inline-block;color:transparent}.Input__input{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;font-size:1em;line-height:1.4166666667em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;background-color:transparent;color:#fff;color:inherit}.Input__input:-ms-input-placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.Input--monospace .Input__input{font-family:"Consolas",monospace}.TextArea{position:relative;display:inline-block;border:.0833333333em solid #88bfff;border:.0833333333em solid rgba(136,191,255,.75);border-radius:.16em;background-color:#0a0a0a;margin-right:.1666666667em;line-height:1.4166666667em;box-sizing:border-box;width:100%}.TextArea--fluid{display:block;width:auto;height:auto}.TextArea--noborder{border:0px}.TextArea__textarea.TextArea__textarea--scrollable{overflow:auto;overflow-x:hidden;overflow-y:scroll}.TextArea__textarea{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;height:100%;font-size:1em;line-height:1.4166666667em;min-height:1.4166666667em;margin:0;padding:0 .5em;font-family:inherit;background-color:transparent;color:inherit;box-sizing:border-box;word-wrap:break-word;overflow:hidden}.TextArea__textarea:-ms-input-placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.TextArea__textarea_custom{overflow:visible;white-space:pre-wrap}.Tooltip{z-index:2;padding:.5em .75em;pointer-events:none;text-align:left;transition:opacity 150ms ease-out;background-color:#000;color:#fff;box-shadow:.1em .1em 1.25em -0.1em rgba(0,0,0,.5);border-radius:.16em;max-width:20.8333333333em}.Chat{color:#abc6ec}.Chat__badge{display:inline-block;min-width:.5em;font-size:.7em;padding:.2em .3em;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:crimson;border-radius:10px;transition:font-size 200ms ease-out}.Chat__badge:before{content:"x"}.Chat__badge--animate{font-size:.9em;transition:font-size 0ms}.Chat__scrollButton{position:fixed;right:2em;bottom:1em}.Chat__reconnected{font-size:.85em;text-align:center;margin:1em 0 2em}.Chat__reconnected:before{content:"Reconnected";display:inline-block;border-radius:1em;padding:0 .7em;color:#db2828;background-color:#131313}.Chat__reconnected:after{content:"";display:block;margin-top:-0.75em;border-bottom:.1666666667em solid #db2828}.Chat__highlight{color:#000}.Chat__highlight--restricted{color:#fff;background-color:#a00;font-weight:bold}.ChatMessage{word-wrap:break-word}.ChatMessage--highlighted{position:relative;border-left:.1666666667em solid #fd4;padding-left:.5em}.ChatMessage--highlighted:after{content:"";position:absolute;top:0;bottom:0;left:0;right:0;background-color:rgba(255,221,68,.1);pointer-events:none}.Ping{position:relative;padding:.125em .25em;border:.0833333333em solid rgba(140,140,140,.5);border-radius:.25em;width:3.75em;text-align:right}.Ping__indicator{content:"";position:absolute;top:.5em;left:.5em;width:.5em;height:.5em;background-color:#888;border-radius:.25em}.Notifications{position:absolute;bottom:1em;left:1em;right:2em}.Notification{color:#fff;background-color:crimson;padding:.5em;margin:1em 0}.Notification:first-child{margin-top:0}.Notification:last-child{margin-bottom:0}.Layout,.Layout *{scrollbar-base-color:#181818;scrollbar-face-color:#363636;scrollbar-3dlight-color:#202020;scrollbar-highlight-color:#202020;scrollbar-track-color:#181818;scrollbar-arrow-color:#909090;scrollbar-shadow-color:#363636}.Layout__content{position:absolute;top:0;bottom:0;left:0;right:0;overflow-x:hidden;overflow-y:hidden}.Layout__content--scrollable{overflow-y:scroll;margin-bottom:0}.Window{position:fixed;top:0;bottom:0;left:0;right:0;color:#fff;background-color:#202020;background-image:linear-gradient(to bottom, #202020 0%, #202020 100%)}.Window__titleBar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;height:2.6666666667rem}.Window__rest{position:fixed;top:32px;top:2.6666666667rem;bottom:0;left:0;right:0}.Window__contentPadding{margin:.5rem;height:100%;height:calc(100% - 1.01rem)}.Window__contentPadding:after{height:0}.Layout__content--scrollable .Window__contentPadding:after{display:block;content:"";height:.5rem}.Window__dimmer{position:fixed;top:0;bottom:0;left:0;right:0;background-color:rgba(56,56,56,.25);pointer-events:none}.Window__resizeHandle__se{position:fixed;bottom:0;right:0;width:20px;width:1.6666666667rem;height:20px;height:1.6666666667rem;cursor:se-resize}.Window__resizeHandle__s{position:fixed;bottom:0;left:0;right:0;height:6px;height:.5rem;cursor:s-resize}.Window__resizeHandle__e{position:fixed;top:0;bottom:0;right:0;width:3px;width:.25rem;cursor:e-resize}em{font-style:normal;font-weight:bold}img{margin:0;padding:0;line-height:1;-ms-interpolation-mode:nearest-neighbor;image-rendering:pixelated}img.icon{height:1em;min-height:16px;width:auto;vertical-align:bottom}a{color:#397ea5}a.visited{color:#7c00e6}a:visited{color:#7c00e6}a.popt{text-decoration:none}.popup{position:fixed;top:50%;left:50%;background:#ddd}.popup .close{position:absolute;background:#aaa;top:0;right:0;color:#333;text-decoration:none;z-index:2;padding:0 10px;height:30px;line-height:30px}.popup .close:hover{background:#999}.popup .head{background:#999;color:#ddd;padding:0 10px;height:30px;line-height:30px;text-transform:uppercase;font-size:.9em;font-weight:bold;border-bottom:2px solid green}.popup input{border:1px solid #999;background:#fff;margin:0;padding:5px;outline:none;color:#333}.popup input[type=text]:hover,.popup input[type=text]:active,.popup input[type=text]:focus{border-color:green}.popup input[type=submit]{padding:5px 10px;background:#999;color:#ddd;text-transform:uppercase;font-size:.9em;font-weight:bold}.popup input[type=submit]:hover,.popup input[type=submit]:focus,.popup input[type=submit]:active{background:#aaa;cursor:pointer}.changeFont{padding:10px}.changeFont a{display:block;text-decoration:none;padding:3px;color:#333}.changeFont a:hover{background:#ccc}.highlightPopup{padding:10px;text-align:center}.highlightPopup input[type=text]{display:block;width:215px;text-align:left;margin-top:5px}.highlightPopup input.highlightColor{background-color:#ff0}.highlightPopup input.highlightTermSubmit{margin-top:5px}.contextMenu{background-color:#ddd;position:fixed;margin:2px;width:150px}.contextMenu a{display:block;padding:2px 5px;text-decoration:none;color:#333}.contextMenu a:hover{background-color:#ccc}.filterMessages{padding:5px}.filterMessages div{padding:2px 0}.icon-stack{height:1em;line-height:1em;width:1em;vertical-align:middle;margin-top:-2px}.motd{color:#a4bad6;font-family:Verdana,sans-serif;white-space:normal}.motd h1,.motd h2,.motd h3,.motd h4,.motd h5,.motd h6{color:#a4bad6;text-decoration:underline}.motd a,.motd a:link,.motd a:visited,.motd a:active,.motd a:hover{color:#a4bad6}.bold,.name,.prefix,.ooc,.looc,.adminooc,.admin,.medal,.yell{font-weight:bold}.italic,.italics{font-style:italic}.highlight{background:#ff0}h1,h2,h3,h4,h5,h6{color:#a4bad6;font-family:Georgia,Verdana,sans-serif}h1.alert,h2.alert{color:#a4bad6}em{font-style:normal;font-weight:bold}.ooc{font-weight:bold}.adminobserverooc{color:#09c;font-weight:bold}.adminooc{color:#3d5bc3;font-weight:bold}.adminsay{color:#9611d4;font-weight:bold}.admin{color:#5975da;font-weight:bold}.name{font-weight:bold}.deadsay{color:#e2c1ff}.binarysay{color:#1e90ff}.binarysay a{color:lime}.binarysay a:active,.binarysay a:visited{color:#8f8}.radio{color:#1ecc43}.sciradio{color:#c68cfa}.comradio{color:#fcdf03}.secradio{color:#dd3535}.medradio{color:#57b8f0}.engradio{color:#f37746}.suppradio{color:#b88646}.servradio{color:#6ca729}.syndradio{color:#8f4a4b}.gangradio{color:#ac2ea1}.centcomradio{color:#2681a5}.aiprivradio{color:#d65d95}.redteamradio{color:#f44}.blueteamradio{color:#3434fd}.greenteamradio{color:#34fd34}.yellowteamradio{color:#fdfd34}.yell{font-weight:bold}.alert{color:#d82020}.userdanger{color:#c51e1e;font-weight:bold;font-size:185%}.bolddanger{color:#c51e1e;font-weight:bold}.danger{color:#c51e1e}.warning{color:#c51e1e;font-style:italic}.alertwarning{color:red;font-weight:bold}.boldwarning{color:#c51e1e;font-style:italic;font-weight:bold}.announce{color:#c51e1e;font-weight:bold}.boldannounce{color:#c51e1e;font-weight:bold}.minorannounce{font-weight:bold;font-size:185%}.greenannounce{color:#059223;font-weight:bold}.rose{color:#ff5050}.info{color:#9ab0ff}.notice{color:#6685f5}.staff_ic{color:#6685f5}.tinynotice{color:#6685f5;font-size:85%}.tinynoticeital{color:#6685f5;font-style:italic;font-size:85%}.smallnotice{color:#6685f5;font-size:90%}.smallnoticeital{color:#6685f5;font-style:italic;font-size:90%}.boldnotice{color:#6685f5;font-weight:bold}.hear{color:#6685f5;font-style:italic}.adminnotice{color:#6685f5}.adminhelp{color:red;font-weight:bold}.unconscious{color:#a4bad6;font-weight:bold}.suicide{color:#ff5050;font-style:italic}.green{color:#059223}.grey{color:#838383}.red{color:red}.blue{color:#215cff}.nicegreen{color:#059223}.boldnicegreen{color:#059223;font-weight:bold}.cult{color:#973e3b}.cultitalic{color:#973e3b;font-style:italic}.cultbold{color:#973e3b;font-style:italic;font-weight:bold}.cultboldtalic{color:#973e3b;font-weight:bold;font-size:185%}.cultlarge{color:#973e3b;font-weight:bold;font-size:185%}.narsie{color:#973e3b;font-weight:bold;font-size:925%}.narsiesmall{color:#973e3b;font-weight:bold;font-size:370%}.colossus{color:#7f282a;font-size:310%}.hierophant{color:#b441ee;font-weight:bold;font-style:italic}.hierophant_warning{color:#c56bf1;font-style:italic}.purple{color:#9956d3}.holoparasite{color:#88809c}.revennotice{color:#c099e2}.revenboldnotice{color:#c099e2;font-weight:bold}.revenbignotice{color:#c099e2;font-weight:bold;font-size:185%}.revenminor{color:#823abb}.revenwarning{color:#760fbb;font-style:italic}.revendanger{color:#760fbb;font-weight:bold;font-size:185%}.deconversion_message{color:#a947ff;font-size:185%;font-style:italic}.ghostalert{color:#60f;font-style:italic;font-weight:bold}.alien{color:#855d85}.noticealien{color:#059223}.alertalien{color:#059223;font-weight:bold}.changeling{color:#059223;font-style:italic}.alertsyndie{color:red;font-size:185%;font-weight:bold}.spider{color:#80f;font-weight:bold;font-size:185%}.interface{color:#750e75}.sans{font-family:"Comic Sans MS",cursive,sans-serif}.papyrus{font-family:"Papyrus",cursive,sans-serif}.robot{font-family:"Courier New",cursive,sans-serif}.tape_recorder{color:red;font-family:"Courier New",cursive,sans-serif}.command_headset{font-weight:bold;font-size:160%}.small{font-size:60%}.big{font-size:185%}.reallybig{font-size:245%}.extremelybig{font-size:310%}.greentext{color:#059223;font-size:185%}.redtext{color:#c51e1e;font-size:185%}.clown{color:#ff70c1;font-size:160%;font-family:"Comic Sans MS",cursive,sans-serif;font-weight:bold}.singing{font-family:"Trebuchet MS",cursive,sans-serif;font-style:italic}.his_grace{color:#15d512;font-family:"Courier New",cursive,sans-serif;font-style:italic}.hypnophrase{color:#202020;font-weight:bold;animation:hypnocolor 1500ms infinite;animation-direction:alternate}@keyframes hypnocolor{0%{color:#202020}25%{color:#4b02ac}50%{color:#9f41f1}75%{color:#541c9c}100%{color:#7adbf3}}.phobia{color:#d00;font-weight:bold;animation:phobia 750ms infinite}@keyframes phobia{0%{color:#f75a5a}50%{color:#d00}100%{color:#f75a5a}}.icon{height:1em;width:auto}.bigicon{font-size:2.5em}.memo{color:#638500;text-align:center}.memoedit{text-align:center;font-size:125%}.abductor{color:#c204c2;font-style:italic}.mind_control{color:#df3da9;font-size:100%;font-weight:bold;font-style:italic}.slime{color:#00ced1}.drone{color:#848482}.monkey{color:#975032}.swarmer{color:#2c75ff}.resonate{color:#298f85}.monkeyhive{color:#a56408}.monkeylead{color:#af6805;font-size:80%}.connectionClosed,.fatalError{background:red;color:#fff;padding:5px}.connectionClosed.restored{background:green}.internal.boldnshit{color:#3d5bc3;font-weight:bold}.text-normal{font-weight:normal;font-style:normal}.hidden{display:none;visibility:hidden}.ml-1{margin-left:1em}.ml-2{margin-left:2em}.ml-3{margin-left:3em}.xooc{color:#ac04e9;font-weight:bold;font-size:140%}.mooc{color:#090;font-weight:bold;font-size:140%}.yooc{color:#999600;font-weight:bold;font-size:140%}.headminsay{color:#653d78;font-weight:bold}.radio{color:#b4b4b4}.deptradio{color:#939}.comradio{color:#779cc2}.centradio{color:#5c5c8a}.hcradio{color:#318779}.pvstradio{color:#9b0612}.cryoradio{color:#ad6d48}.airadio{color:#f0f}.secradio{color:#a52929}.engradio{color:#a66300}.sentryradio{color:#844300}.medradio{color:#008160}.supradio{color:#ba8e41}.jtacradio{color:#ad3b98}.intelradio{color:#027d02}.wyradio{color:#fe9b24}.pmcradio{color:#4dc5ce}.vairadio{color:#e3580e}.rmcradio{color:#e3580e}.cmbradio{color:#1b748c}.clfradio{color:#8e83ca}.alpharadio{color:#db2626}.bravoradio{color:#c68610}.charlieradio{color:#a5a}.deltaradio{color:#007fcf}.echoradio{color:#3eb489}.medium{font-size:110%}.big{font-size:115%}.large{font-size:125%}.extra_large{font-size:130%}.huge{font-size:150%}.underline{text-decoration:underline}.orange{color:#eca100}.normal{font-style:normal}.attack{color:#ff3838}.moderate{color:#c00}.disarm{color:#900}.passive{color:#600}.helpful{color:#368f31}.scanner{color:#ff3838}.scannerb{color:#ff3838;font-weight:bold}.scannerburn{color:orange}.scannerburnb{color:orange;font-weight:bold}.rose{color:#ff5050}.debuginfo{color:#493d26;font-style:italic}.xenonotice{color:#51a16c}.xenoboldnotice{color:#51a16c;font-style:italic}.xenowarning{color:#51a16c;font-style:italic}.xenominorwarning{color:#51a16c;font-weight:bold;font-style:italic}.xenodanger{color:#51a16c;font-weight:bold}.avoidharm{color:#72a0e5;font-weight:bold}.highdanger{color:#ff3838;font-weight:bold;font-size:140%}.xenohighdanger{color:#51a16c;font-weight:bold;font-size:140%}.xenoannounce{color:#65c585;font-family:book-antiqua;font-weight:bold;font-size:140%}.yautjabold{color:purple;font-weight:bold}.yautjaboldbig{color:purple;font-weight:bold;font-size:120%}.objectivebig{font-weight:bold;font-size:130%}.objectivegreen{color:lime}.objectivered{color:red}.objectivesuccess{color:lime;font-weight:bold;font-size:110%}.objectivefail{color:red;font-weight:bold;font-size:110%}.xenotalk,.xeno{color:#c048c0;font-style:italic}.xenoleader{color:#996e99;font-style:italic;font-size:125%}.xenoqueen{color:#996e99;font-style:italic;font-weight:bold;font-size:125%}.newscaster{color:maroon}.role_header{color:#e92d2d;display:block;text-align:center;font-weight:bold;font-family:trebuchet-ms;font-size:150%}.role_body{color:#3a3ae9;display:block;text-align:center;font-size:125%}.round_header{color:#e92d2d;display:block;text-align:center;font-family:courier;font-weight:bold;font-size:180%}.round_body{color:#c5c5c5;display:block;text-align:center;font-family:trebuchet-ms;font-weight:bold;font-size:125%}.event_announcement{color:#600d48;font-family:arial-narrow;font-weight:bold;font-size:125%}.announce_header{color:#cecece;font-weight:bold;font-size:150%}.announce_header_blue{color:#7575f3;font-weight:bold;font-size:150%}.announce_header_admin{color:#7575f3;font-weight:bold;font-size:150%}.announce_body{color:#e92d2d;font-weight:normal;font-size:125%}.centerbold{display:block;text-align:center;font-weight:bold}.mod{color:#917455;font-weight:bold}.modooc{color:#184880;font-weight:bold}.adminmod{color:#7c440c;font-weight:bold}.mentorsay{color:#d4af57;font-weight:bold}.mentorhelp{color:#090;font-weight:bold}.mentorbody{color:#da6200;font-weight:bold}.mentorstaff{color:#b5850d;font-weight:bold}.staffsay{color:#b5850d;font-weight:bold}.tajaran{color:#803b56}.tajaran_signlang{color:#941c1c}.skrell{color:#00ced1}.soghun{color:#228b22}.changeling{color:purple}.vox{color:#a0a}.monkey{color:#966c47}.german{color:#858f1e;font-family:"Times New Roman",Times,serif}.spanish{color:#cf982b}.japanese{color:#940927}.chinese{color:#fe1919}.zombie{color:#2dacb1;font-style:italic}.rough{font-family:trebuchet-ms,cursive,sans-serif}.commando{color:#fe9b24;font-style:bold}.say_quote{font-family:Georgia,Verdana,sans-serif}.admin .message{color:#314cad}.admin .prefix{font-weight:bolder}.pm{font-size:110%}.deadsay{color:#8b4dff}.retro_translator{font-weight:bold}.yautja_translator{color:#a00;font-weight:bold;animation:glitch .5s infinite}@keyframes glitch{25%{color:#a00;transform:translate(-2px, -1px)}50%{color:#be0000;transform:translate(1px, -2px)}75%{color:#8d0000;transform:translate(-1px, 2px)}100%{color:#830000;transform:translate(1px, 1px)}}.examine_block{background:#1b1c1e;border:1px solid #a4bad6;margin:.5em;padding:.5em .75em}.examine_block .icon{width:1.5em;height:1.5em;margin:0;padding:0}.tooltip{font-style:italic;border-bottom:1px dashed #fff} .theme-light .color-black{color:#000 !important}.theme-light .color-white{color:#e6e6e6 !important}.theme-light .color-red{color:#c82121 !important}.theme-light .color-orange{color:#e6630d !important}.theme-light .color-yellow{color:#e5c304 !important}.theme-light .color-olive{color:#a3b816 !important}.theme-light .color-green{color:#1d9f3b !important}.theme-light .color-teal{color:#00a39c !important}.theme-light .color-blue{color:#1e78bb !important}.theme-light .color-dark-blue{color:#004274 !important}.theme-light .color-violet{color:#5a30b5 !important}.theme-light .color-purple{color:#932eb4 !important}.theme-light .color-pink{color:#db228a !important}.theme-light .color-brown{color:#955d39 !important}.theme-light .color-grey{color:#e6e6e6 !important}.theme-light .color-light-grey{color:#999 !important}.theme-light .color-good{color:#529923 !important}.theme-light .color-average{color:#da810e !important}.theme-light .color-bad{color:#c82121 !important}.theme-light .color-label{color:#353535 !important}.theme-light .color-xeno{color:#4a3253 !important}.theme-light .color-bg-black{background-color:#000 !important}.theme-light .color-bg-white{background-color:#bfbfbf !important}.theme-light .color-bg-red{background-color:#a61c1c !important}.theme-light .color-bg-orange{background-color:#c0530b !important}.theme-light .color-bg-yellow{background-color:#bfa303 !important}.theme-light .color-bg-olive{background-color:#889912 !important}.theme-light .color-bg-green{background-color:#188532 !important}.theme-light .color-bg-teal{background-color:#008882 !important}.theme-light .color-bg-blue{background-color:#19649c !important}.theme-light .color-bg-dark-blue{background-color:#003761 !important}.theme-light .color-bg-violet{background-color:#4b2897 !important}.theme-light .color-bg-purple{background-color:#7a2696 !important}.theme-light .color-bg-pink{background-color:#b61d73 !important}.theme-light .color-bg-brown{background-color:#7c4d2f !important}.theme-light .color-bg-grey{background-color:#bfbfbf !important}.theme-light .color-bg-light-grey{background-color:gray !important}.theme-light .color-bg-good{background-color:#44801d !important}.theme-light .color-bg-average{background-color:#b56b0b !important}.theme-light .color-bg-bad{background-color:#a61c1c !important}.theme-light .color-bg-label{background-color:#2c2c2c !important}.theme-light .color-bg-xeno{background-color:#3e2945 !important}.theme-light .Tabs{display:flex;align-items:stretch;overflow:hidden;background-color:#fff}.theme-light .Tabs--fill{height:100%}.theme-light .Section .Tabs{background-color:transparent}.theme-light .Section:not(.Section--fitted) .Tabs{margin:0 -0.5em .5em}.theme-light .Section:not(.Section--fitted) .Tabs:first-child{margin-top:-0.5em}.theme-light .Tabs--vertical{flex-direction:column;padding:.25em 0 .25em .25em}.theme-light .Tabs--horizontal{margin-bottom:.5em;padding:.25em .25em 0 .25em}.theme-light .Tabs--horizontal:last-child{margin-bottom:0}.theme-light .Tabs__Tab{flex-grow:0}.theme-light .Tabs--fluid .Tabs__Tab{flex-grow:1}.theme-light .Tab{display:flex;align-items:center;justify-content:space-between;background-color:transparent;color:rgba(0,0,0,.5);min-height:2.25em;min-width:4em}.theme-light .Tab:not(.Tab--selected):hover{background-color:rgba(255,255,255,.075)}.theme-light .Tab--selected{background-color:rgba(255,255,255,.125);color:#404040}.theme-light .Tab__text{flex-grow:1;margin:0 .5em}.theme-light .Tab__left{min-width:1.5em;text-align:center;margin-left:.25em}.theme-light .Tab__right{min-width:1.5em;text-align:center;margin-right:.25em}.theme-light .Tabs--horizontal .Tab{border-top:.1666666667em solid transparent;border-bottom:.1666666667em solid transparent;border-top-left-radius:.25em;border-top-right-radius:.25em}.theme-light .Tabs--horizontal .Tab--selected{border-bottom:.1666666667em solid #000}.theme-light .Tabs--vertical .Tab{min-height:2em;border-left:.1666666667em solid transparent;border-right:.1666666667em solid transparent;border-top-left-radius:.25em;border-bottom-left-radius:.25em}.theme-light .Tabs--vertical .Tab--selected{border-right:.1666666667em solid #000}.theme-light .Tab--selected.Tab--color--black{color:#404040}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--black{border-bottom-color:#000}.theme-light .Tabs--vertical .Tab--selected.Tab--color--black{border-right-color:#000}.theme-light .Tab--selected.Tab--color--white{color:#ececec}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--white{border-bottom-color:#e6e6e6}.theme-light .Tabs--vertical .Tab--selected.Tab--color--white{border-right-color:#e6e6e6}.theme-light .Tab--selected.Tab--color--red{color:#e14d4d}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--red{border-bottom-color:#c82121}.theme-light .Tabs--vertical .Tab--selected.Tab--color--red{border-right-color:#c82121}.theme-light .Tab--selected.Tab--color--orange{color:#f48942}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--orange{border-bottom-color:#e6630d}.theme-light .Tabs--vertical .Tab--selected.Tab--color--orange{border-right-color:#e6630d}.theme-light .Tab--selected.Tab--color--yellow{color:#fcdd33}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--yellow{border-bottom-color:#e5c304}.theme-light .Tabs--vertical .Tab--selected.Tab--color--yellow{border-right-color:#e5c304}.theme-light .Tab--selected.Tab--color--olive{color:#d0e732}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--olive{border-bottom-color:#a3b816}.theme-light .Tabs--vertical .Tab--selected.Tab--color--olive{border-right-color:#a3b816}.theme-light .Tab--selected.Tab--color--green{color:#33da5a}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--green{border-bottom-color:#1d9f3b}.theme-light .Tabs--vertical .Tab--selected.Tab--color--green{border-right-color:#1d9f3b}.theme-light .Tab--selected.Tab--color--teal{color:#00faef}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--teal{border-bottom-color:#00a39c}.theme-light .Tabs--vertical .Tab--selected.Tab--color--teal{border-right-color:#00a39c}.theme-light .Tab--selected.Tab--color--blue{color:#419ce1}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--blue{border-bottom-color:#1e78bb}.theme-light .Tabs--vertical .Tab--selected.Tab--color--blue{border-right-color:#1e78bb}.theme-light .Tab--selected.Tab--color--dark-blue{color:#0079d7}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--dark-blue{border-bottom-color:#004274}.theme-light .Tabs--vertical .Tab--selected.Tab--color--dark-blue{border-right-color:#004274}.theme-light .Tab--selected.Tab--color--violet{color:#7f58d3}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--violet{border-bottom-color:#5a30b5}.theme-light .Tabs--vertical .Tab--selected.Tab--color--violet{border-right-color:#5a30b5}.theme-light .Tab--selected.Tab--color--purple{color:#b455d4}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--purple{border-bottom-color:#932eb4}.theme-light .Tabs--vertical .Tab--selected.Tab--color--purple{border-right-color:#932eb4}.theme-light .Tab--selected.Tab--color--pink{color:#e558a7}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--pink{border-bottom-color:#db228a}.theme-light .Tabs--vertical .Tab--selected.Tab--color--pink{border-right-color:#db228a}.theme-light .Tab--selected.Tab--color--brown{color:#c0825a}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--brown{border-bottom-color:#955d39}.theme-light .Tabs--vertical .Tab--selected.Tab--color--brown{border-right-color:#955d39}.theme-light .Tab--selected.Tab--color--grey{color:#ececec}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--grey{border-bottom-color:#e6e6e6}.theme-light .Tabs--vertical .Tab--selected.Tab--color--grey{border-right-color:#e6e6e6}.theme-light .Tab--selected.Tab--color--light-grey{color:#b3b3b3}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--light-grey{border-bottom-color:#999}.theme-light .Tabs--vertical .Tab--selected.Tab--color--light-grey{border-right-color:#999}.theme-light .Tab--selected.Tab--color--good{color:#77d23b}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--good{border-bottom-color:#529923}.theme-light .Tabs--vertical .Tab--selected.Tab--color--good{border-right-color:#529923}.theme-light .Tab--selected.Tab--color--average{color:#f3a23a}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--average{border-bottom-color:#da810e}.theme-light .Tabs--vertical .Tab--selected.Tab--color--average{border-right-color:#da810e}.theme-light .Tab--selected.Tab--color--bad{color:#e14d4d}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--bad{border-bottom-color:#c82121}.theme-light .Tabs--vertical .Tab--selected.Tab--color--bad{border-right-color:#c82121}.theme-light .Tab--selected.Tab--color--label{color:#686868}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--label{border-bottom-color:#353535}.theme-light .Tabs--vertical .Tab--selected.Tab--color--label{border-right-color:#353535}.theme-light .Tab--selected.Tab--color--xeno{color:#7e558e}.theme-light .Tabs--horizontal .Tab--selected.Tab--color--xeno{border-bottom-color:#4a3253}.theme-light .Tabs--vertical .Tab--selected.Tab--color--xeno{border-right-color:#4a3253}.theme-light .Section{position:relative;margin-bottom:.5em;background-color:#fff;background-color:#fff;box-sizing:border-box}.theme-light .Section:last-child{margin-bottom:0}.theme-light .Section__title{position:relative;padding:.5em;border-bottom:.1666666667em solid #fff}.theme-light .Section__titleText{font-size:1.1666666667em;font-weight:bold;color:#000}.theme-light .Section__buttons{position:absolute;display:inline-block;right:.5em;margin-top:-.0833333333em}.theme-light .Section__rest{position:relative}.theme-light .Section__content{padding:.66em .5em}.theme-light .Section--fitted>.Section__rest>.Section__content{padding:0}.theme-light .Section--fill{display:flex;flex-direction:column;height:100%}.theme-light .Section--fill>.Section__rest{flex-grow:1}.theme-light .Section--fill>.Section__rest>.Section__content{height:100%}.theme-light .Section--fill.Section--scrollable>.Section__rest>.Section__content{position:absolute;top:0;left:0;right:0;bottom:0}.theme-light .Section--fill.Section--iefix{display:table !important;width:100% !important;height:100% !important;border-collapse:collapse;border-spacing:0}.theme-light .Section--fill.Section--iefix>.Section__rest{display:table-row !important;height:100% !important}.theme-light .Section--scrollable{overflow-x:hidden;overflow-y:hidden}.theme-light .Section--scrollable>.Section__rest>.Section__content{overflow-y:scroll;overflow-x:hidden}.theme-light .Section--scrollableHorizontal{overflow-x:hidden;overflow-y:hidden}.theme-light .Section--scrollableHorizontal>.Section__rest>.Section__content{overflow-y:hidden;overflow-x:scroll}.theme-light .Section--scrollable.Section--scrollableHorizontal{overflow-x:hidden;overflow-y:hidden}.theme-light .Section--scrollable.Section--scrollableHorizontal>.Section__rest>.Section__content{overflow-y:scroll;overflow-x:scroll}.theme-light .Section .Section{background-color:transparent;margin-left:-0.5em;margin-right:-0.5em}.theme-light .Section .Section:first-child{margin-top:-0.5em}.theme-light .Section .Section .Section__titleText{font-size:1.0833333333em}.theme-light .Section .Section .Section .Section__titleText{font-size:1em}.theme-light .Button{position:relative;display:inline-block;line-height:1.667em;padding:0 .5em;margin-right:.1666666667em;white-space:nowrap;outline:0;border-radius:.16em;margin-bottom:.1666666667em;user-select:none;-ms-user-select:none}.theme-light .Button:last-child{margin-right:0;margin-bottom:0}.theme-light .Button .fa,.theme-light .Button .fas,.theme-light .Button .far{margin-left:-0.25em;margin-right:-0.25em;min-width:1.333em;text-align:center}.theme-light .Button--hasContent .fa,.theme-light .Button--hasContent .fas,.theme-light .Button--hasContent .far{margin-right:.25em}.theme-light .Button--hasContent.Button--iconPosition--right .fa,.theme-light .Button--hasContent.Button--iconPosition--right .fas,.theme-light .Button--hasContent.Button--iconPosition--right .far{margin-right:0px;margin-left:3px}.theme-light .Button--ellipsis{overflow:hidden;text-overflow:ellipsis}.theme-light .Button--fluid{display:block;margin-left:0;margin-right:0}.theme-light .Button--circular{border-radius:50%}.theme-light .Button--compact{padding:0 .25em;line-height:1.333em}.theme-light .Button--color--black{transition:color 50ms,background-color 50ms;background-color:#000;color:#fff}.theme-light .Button--color--black:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--black:focus{transition:color 100ms,background-color 100ms}.theme-light .Button--color--black:hover,.theme-light .Button--color--black:focus{background-color:#131313;color:#fff}.theme-light .Button--color--white{transition:color 50ms,background-color 50ms;background-color:#bfbfbf;color:#000}.theme-light .Button--color--white:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--white:focus{transition:color 100ms,background-color 100ms}.theme-light .Button--color--white:hover,.theme-light .Button--color--white:focus{background-color:#efefef;color:#000}.theme-light .Button--color--red{transition:color 50ms,background-color 50ms;background-color:#a61c1c;color:#fff}.theme-light .Button--color--red:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--red:focus{transition:color 100ms,background-color 100ms}.theme-light .Button--color--red:hover,.theme-light .Button--color--red:focus{background-color:#d23333;color:#fff}.theme-light .Button--color--orange{transition:color 50ms,background-color 50ms;background-color:#c0530b;color:#fff}.theme-light .Button--color--orange:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--orange:focus{transition:color 100ms,background-color 100ms}.theme-light .Button--color--orange:hover,.theme-light .Button--color--orange:focus{background-color:#ea7426;color:#fff}.theme-light .Button--color--yellow{transition:color 50ms,background-color 50ms;background-color:#bfa303;color:#fff}.theme-light .Button--color--yellow:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--yellow:focus{transition:color 100ms,background-color 100ms}.theme-light .Button--color--yellow:hover,.theme-light .Button--color--yellow:focus{background-color:#efce17;color:#fff}.theme-light .Button--color--olive{transition:color 50ms,background-color 50ms;background-color:#889912;color:#fff}.theme-light .Button--color--olive:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--olive:focus{transition:color 100ms,background-color 100ms}.theme-light .Button--color--olive:hover,.theme-light .Button--color--olive:focus{background-color:#afc328;color:#fff}.theme-light .Button--color--green{transition:color 50ms,background-color 50ms;background-color:#188532;color:#fff}.theme-light .Button--color--green:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--green:focus{transition:color 100ms,background-color 100ms}.theme-light .Button--color--green:hover,.theme-light .Button--color--green:focus{background-color:#2fac4c;color:#fff}.theme-light .Button--color--teal{transition:color 50ms,background-color 50ms;background-color:#008882;color:#fff}.theme-light .Button--color--teal:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--teal:focus{transition:color 100ms,background-color 100ms}.theme-light .Button--color--teal:hover,.theme-light .Button--color--teal:focus{background-color:#13afa9;color:#fff}.theme-light .Button--color--blue{transition:color 50ms,background-color 50ms;background-color:#19649c;color:#fff}.theme-light .Button--color--blue:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--blue:focus{transition:color 100ms,background-color 100ms}.theme-light .Button--color--blue:hover,.theme-light .Button--color--blue:focus{background-color:#3086c7;color:#fff}.theme-light .Button--color--dark-blue{transition:color 50ms,background-color 50ms;background-color:#003761;color:#fff}.theme-light .Button--color--dark-blue:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--dark-blue:focus{transition:color 100ms,background-color 100ms}.theme-light .Button--color--dark-blue:hover,.theme-light .Button--color--dark-blue:focus{background-color:#135283;color:#fff}.theme-light .Button--color--violet{transition:color 50ms,background-color 50ms;background-color:#4b2897;color:#fff}.theme-light .Button--color--violet:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--violet:focus{transition:color 100ms,background-color 100ms}.theme-light .Button--color--violet:hover,.theme-light .Button--color--violet:focus{background-color:#6a41c1;color:#fff}.theme-light .Button--color--purple{transition:color 50ms,background-color 50ms;background-color:#7a2696;color:#fff}.theme-light .Button--color--purple:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--purple:focus{transition:color 100ms,background-color 100ms}.theme-light .Button--color--purple:hover,.theme-light .Button--color--purple:focus{background-color:#a03fc0;color:#fff}.theme-light .Button--color--pink{transition:color 50ms,background-color 50ms;background-color:#b61d73;color:#fff}.theme-light .Button--color--pink:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--pink:focus{transition:color 100ms,background-color 100ms}.theme-light .Button--color--pink:hover,.theme-light .Button--color--pink:focus{background-color:#da3f96;color:#fff}.theme-light .Button--color--brown{transition:color 50ms,background-color 50ms;background-color:#7c4d2f;color:#fff}.theme-light .Button--color--brown:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--brown:focus{transition:color 100ms,background-color 100ms}.theme-light .Button--color--brown:hover,.theme-light .Button--color--brown:focus{background-color:#a26c49;color:#fff}.theme-light .Button--color--grey{transition:color 50ms,background-color 50ms;background-color:#bfbfbf;color:#000}.theme-light .Button--color--grey:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--grey:focus{transition:color 100ms,background-color 100ms}.theme-light .Button--color--grey:hover,.theme-light .Button--color--grey:focus{background-color:#efefef;color:#000}.theme-light .Button--color--light-grey{transition:color 50ms,background-color 50ms;background-color:gray;color:#fff}.theme-light .Button--color--light-grey:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--light-grey:focus{transition:color 100ms,background-color 100ms}.theme-light .Button--color--light-grey:hover,.theme-light .Button--color--light-grey:focus{background-color:#a6a6a6;color:#fff}.theme-light .Button--color--good{transition:color 50ms,background-color 50ms;background-color:#44801d;color:#fff}.theme-light .Button--color--good:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--good:focus{transition:color 100ms,background-color 100ms}.theme-light .Button--color--good:hover,.theme-light .Button--color--good:focus{background-color:#62a635;color:#fff}.theme-light .Button--color--average{transition:color 50ms,background-color 50ms;background-color:#b56b0b;color:#fff}.theme-light .Button--color--average:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--average:focus{transition:color 100ms,background-color 100ms}.theme-light .Button--color--average:hover,.theme-light .Button--color--average:focus{background-color:#e48f20;color:#fff}.theme-light .Button--color--bad{transition:color 50ms,background-color 50ms;background-color:#a61c1c;color:#fff}.theme-light .Button--color--bad:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--bad:focus{transition:color 100ms,background-color 100ms}.theme-light .Button--color--bad:hover,.theme-light .Button--color--bad:focus{background-color:#d23333;color:#fff}.theme-light .Button--color--label{transition:color 50ms,background-color 50ms;background-color:#2c2c2c;color:#fff}.theme-light .Button--color--label:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--label:focus{transition:color 100ms,background-color 100ms}.theme-light .Button--color--label:hover,.theme-light .Button--color--label:focus{background-color:#464646;color:#fff}.theme-light .Button--color--xeno{transition:color 50ms,background-color 50ms;background-color:#3e2945;color:#fff}.theme-light .Button--color--xeno:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--xeno:focus{transition:color 100ms,background-color 100ms}.theme-light .Button--color--xeno:hover,.theme-light .Button--color--xeno:focus{background-color:#5a4363;color:#fff}.theme-light .Button--color--default{transition:color 50ms,background-color 50ms;background-color:#bbb;color:#000}.theme-light .Button--color--default:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--default:focus{transition:color 100ms,background-color 100ms}.theme-light .Button--color--default:hover,.theme-light .Button--color--default:focus{background-color:#eaeaea;color:#000}.theme-light .Button--color--caution{transition:color 50ms,background-color 50ms;background-color:#be6209;color:#fff}.theme-light .Button--color--caution:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--caution:focus{transition:color 100ms,background-color 100ms}.theme-light .Button--color--caution:hover,.theme-light .Button--color--caution:focus{background-color:#ec8420;color:#fff}.theme-light .Button--color--danger{transition:color 50ms,background-color 50ms;background-color:#9a9d00;color:#fff}.theme-light .Button--color--danger:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--danger:focus{transition:color 100ms,background-color 100ms}.theme-light .Button--color--danger:hover,.theme-light .Button--color--danger:focus{background-color:#c4c813;color:#fff}.theme-light .Button--color--transparent{transition:color 50ms,background-color 50ms;background-color:#eee;color:#000;background-color:rgba(238,238,238,0);color:rgba(0,0,0,.5)}.theme-light .Button--color--transparent:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--color--transparent:focus{transition:color 100ms,background-color 100ms}.theme-light .Button--color--transparent:hover,.theme-light .Button--color--transparent:focus{background-color:#fcfcfc;color:#000}.theme-light .Button--disabled{background-color:#363636 !important}.theme-light .Button--selected{transition:color 50ms,background-color 50ms;background-color:#0668b8;color:#fff}.theme-light .Button--selected:hover{transition:color 0ms,background-color 0ms}.theme-light .Button--selected:focus{transition:color 100ms,background-color 100ms}.theme-light .Button--selected:hover,.theme-light .Button--selected:focus{background-color:#1a8be7;color:#fff}.theme-light .Button--flex{display:inline-flex;flex-direction:column}.theme-light .Button--flex--fluid{width:100%}.theme-light .Button--verticalAlignContent--top{justify-content:flex-start}.theme-light .Button--verticalAlignContent--middle{justify-content:center}.theme-light .Button--verticalAlignContent--bottom{justify-content:flex-end}.theme-light .Button__content{display:block;align-self:stretch}.theme-light .Input{position:relative;display:inline-block;width:10em;border:.0833333333em solid #353535;border:.0833333333em solid rgba(53,53,53,.75);border-radius:.16em;color:#000;background-color:#fff;padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;overflow:visible}.theme-light .Input--fluid{display:block;width:auto}.theme-light .Input__baseline{display:inline-block;color:transparent}.theme-light .Input__input{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;font-size:1em;line-height:1.4166666667em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;background-color:transparent;color:#000;color:inherit}.theme-light .Input__input:-ms-input-placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-light .Input--monospace .Input__input{font-family:"Consolas",monospace}.theme-light .Input{position:relative;display:inline-block;width:10em;border:.0833333333em solid #353535;border:.0833333333em solid rgba(53,53,53,.75);border-radius:.16em;color:#000;background-color:#fff;padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;overflow:visible}.theme-light .Input--fluid{display:block;width:auto}.theme-light .Input__baseline{display:inline-block;color:transparent}.theme-light .Input__input{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;font-size:1em;line-height:1.4166666667em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;background-color:transparent;color:#000;color:inherit}.theme-light .Input__input:-ms-input-placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-light .Input--monospace .Input__input{font-family:"Consolas",monospace}.theme-light .NumberInput{position:relative;display:inline-block;border:.0833333333em solid #353535;border:.0833333333em solid rgba(53,53,53,.75);border-radius:.16em;color:#353535;background-color:#fff;padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;text-align:right;overflow:visible;cursor:n-resize}.theme-light .NumberInput--fluid{display:block}.theme-light .NumberInput__content{margin-left:.5em}.theme-light .NumberInput__barContainer{position:absolute;top:.1666666667em;bottom:.1666666667em;left:.1666666667em}.theme-light .NumberInput__bar{position:absolute;bottom:0;left:0;width:.25em;box-sizing:border-box;border-bottom:.0833333333em solid #353535;background-color:#353535}.theme-light .NumberInput__input{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;font-size:1em;line-height:1.4166666667em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;background-color:#fff;color:#000;text-align:right}.theme-light .Input{position:relative;display:inline-block;width:10em;border:.0833333333em solid #353535;border:.0833333333em solid rgba(53,53,53,.75);border-radius:.16em;color:#000;background-color:#fff;padding:0 .3333333333em;margin-right:.1666666667em;line-height:1.4166666667em;overflow:visible}.theme-light .Input--fluid{display:block;width:auto}.theme-light .Input__baseline{display:inline-block;color:transparent}.theme-light .Input__input{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;font-size:1em;line-height:1.4166666667em;height:1.4166666667em;margin:0;padding:0 .5em;font-family:Verdana,sans-serif;background-color:transparent;color:#000;color:inherit}.theme-light .Input__input:-ms-input-placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-light .Input--monospace .Input__input{font-family:"Consolas",monospace}.theme-light .TextArea{position:relative;display:inline-block;border:.0833333333em solid #353535;border:.0833333333em solid rgba(53,53,53,.75);border-radius:.16em;background-color:#fff;margin-right:.1666666667em;line-height:1.4166666667em;box-sizing:border-box;width:100%}.theme-light .TextArea--fluid{display:block;width:auto;height:auto}.theme-light .TextArea--noborder{border:0px}.theme-light .TextArea__textarea.TextArea__textarea--scrollable{overflow:auto;overflow-x:hidden;overflow-y:scroll}.theme-light .TextArea__textarea{display:block;position:absolute;top:0;bottom:0;left:0;right:0;border:0;outline:0;width:100%;height:100%;font-size:1em;line-height:1.4166666667em;min-height:1.4166666667em;margin:0;padding:0 .5em;font-family:inherit;background-color:transparent;color:inherit;box-sizing:border-box;word-wrap:break-word;overflow:hidden}.theme-light .TextArea__textarea:-ms-input-placeholder{font-style:italic;color:#777;color:rgba(255,255,255,.45)}.theme-light .TextArea__textarea_custom{overflow:visible;white-space:pre-wrap}.theme-light .Knob{position:relative;font-size:1rem;width:2.6em;height:2.6em;margin:0 auto;margin-bottom:-0.2em;cursor:n-resize}.theme-light .Knob:after{content:".";color:transparent;line-height:2.5em}.theme-light .Knob__circle{position:absolute;top:.1em;bottom:.1em;left:.1em;right:.1em;margin:.3em;background-color:#333;background-image:linear-gradient(to bottom, rgba(255, 255, 255, 0.15) 0%, rgba(255, 255, 255, 0) 100%);border-radius:50%;box-shadow:0 .05em .5em 0 rgba(0,0,0,.5)}.theme-light .Knob__cursorBox{position:absolute;top:0;bottom:0;left:0;right:0}.theme-light .Knob__cursor{position:relative;top:.05em;margin:0 auto;width:.2em;height:.8em;background-color:rgba(255,255,255,.9)}.theme-light .Knob__popupValue{position:absolute;top:-2rem;right:50%;font-size:1rem;text-align:center;padding:.25rem .5rem;color:#fff;background-color:#000;transform:translateX(50%);white-space:nowrap}.theme-light .Knob__ring{position:absolute;top:0;bottom:0;left:0;right:0;padding:.1em}.theme-light .Knob__ringTrackPivot{transform:rotateZ(135deg)}.theme-light .Knob__ringTrack{fill:transparent;stroke:rgba(255,255,255,.1);stroke-width:8;stroke-linecap:round;stroke-dasharray:235.62}.theme-light .Knob__ringFillPivot{transform:rotateZ(135deg)}.theme-light .Knob--bipolar .Knob__ringFillPivot{transform:rotateZ(270deg)}.theme-light .Knob__ringFill{fill:transparent;stroke:#6a96c9;stroke-width:8;stroke-linecap:round;stroke-dasharray:314.16;transition:stroke 50ms ease-out}.theme-light .Knob--color--black .Knob__ringFill{stroke:#000}.theme-light .Knob--color--white .Knob__ringFill{stroke:#e6e6e6}.theme-light .Knob--color--red .Knob__ringFill{stroke:#c82121}.theme-light .Knob--color--orange .Knob__ringFill{stroke:#e6630d}.theme-light .Knob--color--yellow .Knob__ringFill{stroke:#e5c304}.theme-light .Knob--color--olive .Knob__ringFill{stroke:#a3b816}.theme-light .Knob--color--green .Knob__ringFill{stroke:#1d9f3b}.theme-light .Knob--color--teal .Knob__ringFill{stroke:#00a39c}.theme-light .Knob--color--blue .Knob__ringFill{stroke:#1e78bb}.theme-light .Knob--color--dark-blue .Knob__ringFill{stroke:#004274}.theme-light .Knob--color--violet .Knob__ringFill{stroke:#5a30b5}.theme-light .Knob--color--purple .Knob__ringFill{stroke:#932eb4}.theme-light .Knob--color--pink .Knob__ringFill{stroke:#db228a}.theme-light .Knob--color--brown .Knob__ringFill{stroke:#955d39}.theme-light .Knob--color--grey .Knob__ringFill{stroke:#e6e6e6}.theme-light .Knob--color--light-grey .Knob__ringFill{stroke:#999}.theme-light .Knob--color--good .Knob__ringFill{stroke:#529923}.theme-light .Knob--color--average .Knob__ringFill{stroke:#da810e}.theme-light .Knob--color--bad .Knob__ringFill{stroke:#c82121}.theme-light .Knob--color--label .Knob__ringFill{stroke:#353535}.theme-light .Knob--color--xeno .Knob__ringFill{stroke:#4a3253}.theme-light .Slider{cursor:e-resize}.theme-light .Slider__cursorOffset{position:absolute;top:0;left:0;bottom:0;transition:none !important}.theme-light .Slider__cursor{position:absolute;top:0;right:-.0833333333em;bottom:0;width:0;border-left:.1666666667em solid #000}.theme-light .Slider__pointer{position:absolute;right:-.4166666667em;bottom:-.3333333333em;width:0;height:0;border-left:.4166666667em solid transparent;border-right:.4166666667em solid transparent;border-bottom:.4166666667em solid #000}.theme-light .Slider__popupValue{position:absolute;right:0;top:-2rem;font-size:1rem;padding:.25rem .5rem;color:#fff;background-color:#000;transform:translateX(50%);white-space:nowrap}.theme-light .ProgressBar{display:inline-block;position:relative;width:100%;padding:0 .5em;border-width:.0833333333em !important;border-style:solid !important;border-radius:.16em;background-color:rgba(0,0,0,0);transition:border-color 900ms ease-out}.theme-light .ProgressBar__fill{position:absolute;top:-0.5px;left:0px;bottom:-0.5px}.theme-light .ProgressBar__fill--animated{transition:background-color 900ms ease-out,width 900ms ease-out}.theme-light .ProgressBar__content{position:relative;line-height:1.4166666667em;width:100%;text-align:right}.theme-light .ProgressBar--color--default{border:.0833333333em solid #bfbfbf}.theme-light .ProgressBar--color--default .ProgressBar__fill{background-color:#bfbfbf}.theme-light .ProgressBar--color--black{border-color:#000 !important}.theme-light .ProgressBar--color--black .ProgressBar__fill{background-color:#000}.theme-light .ProgressBar--color--white{border-color:#bfbfbf !important}.theme-light .ProgressBar--color--white .ProgressBar__fill{background-color:#bfbfbf}.theme-light .ProgressBar--color--red{border-color:#a61c1c !important}.theme-light .ProgressBar--color--red .ProgressBar__fill{background-color:#a61c1c}.theme-light .ProgressBar--color--orange{border-color:#c0530b !important}.theme-light .ProgressBar--color--orange .ProgressBar__fill{background-color:#c0530b}.theme-light .ProgressBar--color--yellow{border-color:#bfa303 !important}.theme-light .ProgressBar--color--yellow .ProgressBar__fill{background-color:#bfa303}.theme-light .ProgressBar--color--olive{border-color:#889912 !important}.theme-light .ProgressBar--color--olive .ProgressBar__fill{background-color:#889912}.theme-light .ProgressBar--color--green{border-color:#188532 !important}.theme-light .ProgressBar--color--green .ProgressBar__fill{background-color:#188532}.theme-light .ProgressBar--color--teal{border-color:#008882 !important}.theme-light .ProgressBar--color--teal .ProgressBar__fill{background-color:#008882}.theme-light .ProgressBar--color--blue{border-color:#19649c !important}.theme-light .ProgressBar--color--blue .ProgressBar__fill{background-color:#19649c}.theme-light .ProgressBar--color--dark-blue{border-color:#003761 !important}.theme-light .ProgressBar--color--dark-blue .ProgressBar__fill{background-color:#003761}.theme-light .ProgressBar--color--violet{border-color:#4b2897 !important}.theme-light .ProgressBar--color--violet .ProgressBar__fill{background-color:#4b2897}.theme-light .ProgressBar--color--purple{border-color:#7a2696 !important}.theme-light .ProgressBar--color--purple .ProgressBar__fill{background-color:#7a2696}.theme-light .ProgressBar--color--pink{border-color:#b61d73 !important}.theme-light .ProgressBar--color--pink .ProgressBar__fill{background-color:#b61d73}.theme-light .ProgressBar--color--brown{border-color:#7c4d2f !important}.theme-light .ProgressBar--color--brown .ProgressBar__fill{background-color:#7c4d2f}.theme-light .ProgressBar--color--grey{border-color:#bfbfbf !important}.theme-light .ProgressBar--color--grey .ProgressBar__fill{background-color:#bfbfbf}.theme-light .ProgressBar--color--light-grey{border-color:gray !important}.theme-light .ProgressBar--color--light-grey .ProgressBar__fill{background-color:gray}.theme-light .ProgressBar--color--good{border-color:#44801d !important}.theme-light .ProgressBar--color--good .ProgressBar__fill{background-color:#44801d}.theme-light .ProgressBar--color--average{border-color:#b56b0b !important}.theme-light .ProgressBar--color--average .ProgressBar__fill{background-color:#b56b0b}.theme-light .ProgressBar--color--bad{border-color:#a61c1c !important}.theme-light .ProgressBar--color--bad .ProgressBar__fill{background-color:#a61c1c}.theme-light .ProgressBar--color--label{border-color:#2c2c2c !important}.theme-light .ProgressBar--color--label .ProgressBar__fill{background-color:#2c2c2c}.theme-light .ProgressBar--color--xeno{border-color:#3e2945 !important}.theme-light .ProgressBar--color--xeno .ProgressBar__fill{background-color:#3e2945}.theme-light .Chat{color:#000}.theme-light .Chat__badge{display:inline-block;min-width:.5em;font-size:.7em;padding:.2em .3em;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:crimson;border-radius:10px;transition:font-size 200ms ease-out}.theme-light .Chat__badge:before{content:"x"}.theme-light .Chat__badge--animate{font-size:.9em;transition:font-size 0ms}.theme-light .Chat__scrollButton{position:fixed;right:2em;bottom:1em}.theme-light .Chat__reconnected{font-size:.85em;text-align:center;margin:1em 0 2em}.theme-light .Chat__reconnected:before{content:"Reconnected";display:inline-block;border-radius:1em;padding:0 .7em;color:#db2828;background-color:#fff}.theme-light .Chat__reconnected:after{content:"";display:block;margin-top:-0.75em;border-bottom:.1666666667em solid #db2828}.theme-light .Chat__highlight{color:#000}.theme-light .Chat__highlight--restricted{color:#fff;background-color:#a00;font-weight:bold}.theme-light .ChatMessage{word-wrap:break-word}.theme-light .ChatMessage--highlighted{position:relative;border-left:.1666666667em solid #fd4;padding-left:.5em}.theme-light .ChatMessage--highlighted:after{content:"";position:absolute;top:0;bottom:0;left:0;right:0;background-color:rgba(255,221,68,.1);pointer-events:none}.theme-light .Layout,.theme-light .Layout *{scrollbar-base-color:#f2f2f2;scrollbar-face-color:#d6d6d6;scrollbar-3dlight-color:#eee;scrollbar-highlight-color:#eee;scrollbar-track-color:#f2f2f2;scrollbar-arrow-color:#777;scrollbar-shadow-color:#d6d6d6}.theme-light .Layout__content{position:absolute;top:0;bottom:0;left:0;right:0;overflow-x:hidden;overflow-y:hidden}.theme-light .Layout__content--scrollable{overflow-y:scroll;margin-bottom:0}.theme-light .Window{position:fixed;top:0;bottom:0;left:0;right:0;color:#000;background-color:#eee;background-image:linear-gradient(to bottom, #eeeeee 0%, #eeeeee 100%)}.theme-light .Window__titleBar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;height:2.6666666667rem}.theme-light .Window__rest{position:fixed;top:32px;top:2.6666666667rem;bottom:0;left:0;right:0}.theme-light .Window__contentPadding{margin:.5rem;height:100%;height:calc(100% - 1.01rem)}.theme-light .Window__contentPadding:after{height:0}.theme-light .Layout__content--scrollable .Window__contentPadding:after{display:block;content:"";height:.5rem}.theme-light .Window__dimmer{position:fixed;top:0;bottom:0;left:0;right:0;background-color:rgba(252,252,252,.25);pointer-events:none}.theme-light .Window__resizeHandle__se{position:fixed;bottom:0;right:0;width:20px;width:1.6666666667rem;height:20px;height:1.6666666667rem;cursor:se-resize}.theme-light .Window__resizeHandle__s{position:fixed;bottom:0;left:0;right:0;height:6px;height:.5rem;cursor:s-resize}.theme-light .Window__resizeHandle__e{position:fixed;top:0;bottom:0;right:0;width:3px;width:.25rem;cursor:e-resize}.theme-light .TitleBar{background-color:#eee;border-bottom:1px solid rgba(0,0,0,.25);box-shadow:0 2px 2px rgba(0,0,0,.1);box-shadow:0 .1666666667rem .1666666667rem rgba(0,0,0,.1);user-select:none;-ms-user-select:none}.theme-light .TitleBar__clickable{color:rgba(0,0,0,.5);background-color:#eee;transition:color 250ms ease-out,background-color 250ms ease-out}.theme-light .TitleBar__clickable:hover{color:#fff;background-color:#c00;transition:color 0ms,background-color 0ms}.theme-light .TitleBar__title{position:absolute;display:inline-block;top:0;left:46px;left:3.8333333333rem;color:rgba(0,0,0,.75);font-size:14px;font-size:1.1666666667rem;line-height:31px;line-height:2.5833333333rem;white-space:nowrap;pointer-events:none}.theme-light .TitleBar__buttons{pointer-events:initial;display:inline-block;width:100%;margin-left:10px}.theme-light .TitleBar__dragZone{position:absolute;top:0;left:0;right:0;height:32px;height:2.6666666667rem}.theme-light .TitleBar__statusIcon{position:absolute;top:0;left:12px;left:1rem;transition:color .5s;font-size:20px;font-size:1.6666666667rem;line-height:32px !important;line-height:2.6666666667rem !important}.theme-light .TitleBar__close{position:absolute;top:-1px;right:0;width:45px;width:3.75rem;height:32px;height:2.6666666667rem;font-size:20px;font-size:1.6666666667rem;line-height:31px;line-height:2.5833333333rem;text-align:center}.theme-light .TitleBar__devBuildIndicator{position:absolute;top:6px;top:.5rem;right:52px;right:4.3333333333rem;min-width:20px;min-width:1.6666666667rem;padding:2px 4px;padding:.1666666667rem .3333333333rem;background-color:rgba(91,170,39,.75);color:#fff;text-align:center}.theme-light html,.theme-light body{padding:0;margin:0;height:100%;color:#000}.theme-light body{background:#fff;font-family:Verdana,sans-serif;font-size:13px;line-height:1.2;overflow-x:hidden;overflow-y:scroll;word-wrap:break-word}.theme-light em{font-style:normal;font-weight:bold}.theme-light img{margin:0;padding:0;line-height:1;-ms-interpolation-mode:nearest-neighbor;image-rendering:pixelated}.theme-light img.icon{height:1em;min-height:16px;width:auto;vertical-align:bottom}.theme-light a{color:blue}.theme-light a.visited{color:#f0f}.theme-light a:visited{color:#f0f}.theme-light a.popt{text-decoration:none}.theme-light .popup{position:fixed;top:50%;left:50%;background:#ddd}.theme-light .popup .close{position:absolute;background:#aaa;top:0;right:0;color:#333;text-decoration:none;z-index:2;padding:0 10px;height:30px;line-height:30px}.theme-light .popup .close:hover{background:#999}.theme-light .popup .head{background:#999;color:#ddd;padding:0 10px;height:30px;line-height:30px;text-transform:uppercase;font-size:.9em;font-weight:bold;border-bottom:2px solid green}.theme-light .popup input{border:1px solid #999;background:#fff;margin:0;padding:5px;outline:none;color:#333}.theme-light .popup input[type=text]:hover,.theme-light .popup input[type=text]:active,.theme-light .popup input[type=text]:focus{border-color:green}.theme-light .popup input[type=submit]{padding:5px 10px;background:#999;color:#ddd;text-transform:uppercase;font-size:.9em;font-weight:bold}.theme-light .popup input[type=submit]:hover,.theme-light .popup input[type=submit]:focus,.theme-light .popup input[type=submit]:active{background:#aaa;cursor:pointer}.theme-light .changeFont{padding:10px}.theme-light .changeFont a{display:block;text-decoration:none;padding:3px;color:#333}.theme-light .changeFont a:hover{background:#ccc}.theme-light .highlightPopup{padding:10px;text-align:center}.theme-light .highlightPopup input[type=text]{display:block;width:215px;text-align:left;margin-top:5px}.theme-light .highlightPopup input.highlightColor{background-color:#ff0}.theme-light .highlightPopup input.highlightTermSubmit{margin-top:5px}.theme-light .contextMenu{background-color:#ddd;position:fixed;margin:2px;width:150px}.theme-light .contextMenu a{display:block;padding:2px 5px;text-decoration:none;color:#333}.theme-light .contextMenu a:hover{background-color:#ccc}.theme-light .filterMessages{padding:5px}.theme-light .filterMessages div{padding:2px 0}.theme-light .icon-stack{height:1em;line-height:1em;width:1em;vertical-align:middle;margin-top:-2px}.theme-light .motd{color:#638500;font-family:Verdana,sans-serif;white-space:normal}.theme-light .motd h1,.theme-light .motd h2,.theme-light .motd h3,.theme-light .motd h4,.theme-light .motd h5,.theme-light .motd h6{color:#638500;text-decoration:underline}.theme-light .motd a,.theme-light .motd a:link,.theme-light .motd a:visited,.theme-light .motd a:active,.theme-light .motd a:hover{color:#638500}.theme-light .bold,.theme-light .name,.theme-light .prefix,.theme-light .ooc,.theme-light .looc,.theme-light .adminooc,.theme-light .admin,.theme-light .medal,.theme-light .yell{font-weight:bold}.theme-light .italic,.theme-light .italics{font-style:italic}.theme-light .highlight{background:#ff0}.theme-light h1,.theme-light h2,.theme-light h3,.theme-light h4,.theme-light h5,.theme-light h6{color:blue;font-family:Georgia,Verdana,sans-serif}.theme-light h1.alert,.theme-light h2.alert{color:#000}.theme-light em{font-style:normal;font-weight:bold}.theme-light .ooc{font-weight:bold}.theme-light .adminobserverooc{color:#09c;font-weight:bold}.theme-light .adminooc{color:#700038;font-weight:bold}.theme-light .adminsay{color:#ff4500;font-weight:bold}.theme-light .admin{color:#4473ff;font-weight:bold}.theme-light .name{font-weight:bold}.theme-light .deadsay{color:#5c00e6}.theme-light .binarysay{color:#20c20e;background-color:#000;display:block}.theme-light .binarysay a{color:lime}.theme-light .binarysay a:active,.theme-light .binarysay a:visited{color:#8f8}.theme-light .radio{color:green}.theme-light .sciradio{color:#939}.theme-light .comradio{color:#948f02}.theme-light .secradio{color:#a30000}.theme-light .medradio{color:#337296}.theme-light .engradio{color:#fb5613}.theme-light .sentryradio{color:#844300}.theme-light .suppradio{color:#a8732b}.theme-light .servradio{color:#6eaa2c}.theme-light .syndradio{color:#6d3f40}.theme-light .gangradio{color:#ac2ea1}.theme-light .centcomradio{color:#686868}.theme-light .aiprivradio{color:#f0f}.theme-light .redteamradio{color:red}.theme-light .blueteamradio{color:blue}.theme-light .greenteamradio{color:lime}.theme-light .yellowteamradio{color:#d1ba22}.theme-light .yell{font-weight:bold}.theme-light .alert{color:red}.theme-light h1.alert,.theme-light h2.alert{color:#000}.theme-light .userdanger{color:red;font-weight:bold;font-size:185%}.theme-light .bolddanger{color:red;font-weight:bold}.theme-light .danger{color:red}.theme-light .tinydanger{color:red;font-size:85%}.theme-light .smalldanger{color:red;font-size:90%}.theme-light .warning{color:red;font-style:italic}.theme-light .alertwarning{color:red;font-weight:bold}.theme-light .boldwarning{color:red;font-style:italic;font-weight:bold}.theme-light .announce{color:#228b22;font-weight:bold}.theme-light .boldannounce{color:red;font-weight:bold}.theme-light .minorannounce{font-weight:bold;font-size:185%}.theme-light .greenannounce{color:lime;font-weight:bold}.theme-light .rose{color:#ff5050}.theme-light .info{color:#00c}.theme-light .notice{color:#009}.theme-light .staff_ic{color:#009}.theme-light .tinynotice{color:#009;font-size:85%}.theme-light .tinynoticeital{color:#009;font-style:italic;font-size:85%}.theme-light .smallnotice{color:#009;font-size:90%}.theme-light .smallnoticeital{color:#009;font-style:italic;font-size:90%}.theme-light .boldnotice{color:#009;font-weight:bold}.theme-light .hear{color:#009;font-style:italic}.theme-light .adminnotice{color:blue}.theme-light .adminhelp{color:red;font-weight:bold}.theme-light .unconscious{color:blue;font-weight:bold}.theme-light .suicide{color:#ff5050;font-style:italic}.theme-light .green{color:#03ff39}.theme-light .grey{color:#838383}.theme-light .red{color:red}.theme-light .blue{color:blue}.theme-light .nicegreen{color:#14a833}.theme-light .boldnicegreen{color:#14a833;font-weight:bold}.theme-light .cult{color:#973e3b}.theme-light .cultitalic{color:#973e3b;font-style:italic}.theme-light .cultbold{color:#973e3b;font-style:italic;font-weight:bold}.theme-light .cultboldtalic{color:#973e3b;font-weight:bold;font-size:185%}.theme-light .cultlarge{color:#973e3b;font-weight:bold;font-size:185%}.theme-light .narsie{color:#973e3b;font-weight:bold;font-size:925%}.theme-light .narsiesmall{color:#973e3b;font-weight:bold;font-size:370%}.theme-light .colossus{color:#7f282a;font-size:310%}.theme-light .hierophant{color:#609;font-weight:bold;font-style:italic}.theme-light .hierophant_warning{color:#609;font-style:italic}.theme-light .purple{color:#5e2d79}.theme-light .holoparasite{color:#35333a}.theme-light .revennotice{color:#1d2953}.theme-light .revenboldnotice{color:#1d2953;font-weight:bold}.theme-light .revenbignotice{color:#1d2953;font-weight:bold;font-size:185%}.theme-light .revenminor{color:#823abb}.theme-light .revenwarning{color:#760fbb;font-style:italic}.theme-light .revendanger{color:#760fbb;font-weight:bold;font-size:185%}.theme-light .deconversion_message{color:#5000a0;font-size:185%;font-style:italic}.theme-light .ghostalert{color:#5c00e6;font-style:italic;font-weight:bold}.theme-light .alien{color:#543354}.theme-light .noticealien{color:#00c000}.theme-light .alertalien{color:#00c000;font-weight:bold}.theme-light .changeling{color:purple;font-style:italic}.theme-light .alertsyndie{color:red;font-size:185%;font-weight:bold}.theme-light .spider{color:#4d004d;font-weight:bold;font-size:185%}.theme-light .interface{color:#303}.theme-light .sans{font-family:"Comic Sans MS",cursive,sans-serif}.theme-light .papyrus{font-family:"Papyrus",cursive,sans-serif}.theme-light .robot{font-family:"Courier New",cursive,sans-serif}.theme-light .tape_recorder{color:maroon;font-family:"Courier New",cursive,sans-serif}.theme-light .command_headset{font-weight:bold;font-size:160%}.theme-light .small{font-size:60%}.theme-light .big{font-size:185%}.theme-light .reallybig{font-size:245%}.theme-light .extremelybig{font-size:310%}.theme-light .greentext{color:lime;font-size:185%}.theme-light .redtext{color:red;font-size:185%}.theme-light .clown{color:#ff69bf;font-size:160%;font-family:"Comic Sans MS",cursive,sans-serif;font-weight:bold}.theme-light .singing{font-family:"Trebuchet MS",cursive,sans-serif;font-style:italic}.theme-light .his_grace{color:#15d512;font-family:"Courier New",cursive,sans-serif;font-style:italic}.theme-light .hypnophrase{color:#0d0d0d;font-weight:bold;animation:hypnocolor 1500ms infinite;animation-direction:alternate}@keyframes hypnocolor{0%{color:#0d0d0d}25%{color:#410194}50%{color:#7f17d8}75%{color:#410194}100%{color:#3bb5d3}}.theme-light .phobia{color:#d00;font-weight:bold;animation:phobia 750ms infinite}@keyframes phobia{0%{color:#0d0d0d}50%{color:#d00}100%{color:#0d0d0d}}.theme-light .icon{height:1em;width:auto}.theme-light .bigicon{font-size:2.5em}.theme-light .memo{color:#638500;text-align:center}.theme-light .memoedit{text-align:center;font-size:125%}.theme-light .abductor{color:purple;font-style:italic}.theme-light .mind_control{color:#a00d6f;font-size:100%;font-weight:bold;font-style:italic}.theme-light .slime{color:#00ced1}.theme-light .drone{color:#848482}.theme-light .monkey{color:#975032}.theme-light .swarmer{color:#2c75ff}.theme-light .resonate{color:#298f85}.theme-light .monkeyhive{color:#774704}.theme-light .monkeylead{color:#774704;font-size:80%}.theme-light .connectionClosed,.theme-light .fatalError{background:red;color:#fff;padding:5px}.theme-light .connectionClosed.restored{background:green}.theme-light .internal.boldnshit{color:blue;font-weight:bold}.theme-light .text-normal{font-weight:normal;font-style:normal}.theme-light .hidden{display:none;visibility:hidden}.theme-light .ml-1{margin-left:1em}.theme-light .ml-2{margin-left:2em}.theme-light .ml-3{margin-left:3em}.theme-light .xooc{color:#6c0094;font-weight:bold;font-size:140%}.theme-light .mooc{color:#090;font-weight:bold;font-size:140%}.theme-light .yooc{color:#999600;font-weight:bold;font-size:140%}.theme-light .headminsay{color:#5a0a7f;font-weight:bold}.theme-light .radio{color:#4e4e4e}.theme-light .deptradio{color:#939}.theme-light .comradio{color:#004080}.theme-light .centradio{color:#5c5c8a}.theme-light .cryoradio{color:#554e3f}.theme-light .hcradio{color:#318779}.theme-light .pvstradio{color:#9b0612}.theme-light .airadio{color:#f0f}.theme-light .secradio{color:#a30000}.theme-light .engradio{color:#a66300}.theme-light .sentryradio{color:#844300}.theme-light .medradio{color:#008160}.theme-light .supradio{color:#5f4519}.theme-light .jtacradio{color:#702963}.theme-light .intelradio{color:#027d02}.theme-light .wyradio{color:#fe9b24}.theme-light .pmcradio{color:#136957}.theme-light .vairadio{color:#943d0a}.theme-light .cmbradio{color:#1b748c}.theme-light .clfradio{color:#6f679c}.theme-light .alpharadio{color:#ea0000}.theme-light .bravoradio{color:#c68610}.theme-light .charlieradio{color:#a5a}.theme-light .deltaradio{color:#007fcf}.theme-light .echoradio{color:#3a7e65}.theme-light .medium{font-size:110%}.theme-light .big{font-size:115%}.theme-light .large{font-size:125%}.theme-light .extra_large{font-size:130%}.theme-light .huge{font-size:150%}.theme-light .underline{text-decoration:underline}.theme-light .orange{color:#eca100}.theme-light .normal{font-style:normal}.theme-light .attack{color:red}.theme-light .moderate{color:#c00}.theme-light .disarm{color:#900}.theme-light .passive{color:#600}.theme-light .helpful{color:#368f31}.theme-light .scanner{color:red}.theme-light .scannerb{color:red;font-weight:bold}.theme-light .scannerburn{color:orange}.theme-light .scannerburnb{color:orange;font-weight:bold}.theme-light .rose{color:#ff5050}.theme-light .debuginfo{color:#493d26;font-style:italic}.theme-light .xenonotice{color:#2a623d}.theme-light .xenoboldnotice{color:#2a623d;font-style:italic}.theme-light .xenowarning{color:#2a623d;font-style:italic}.theme-light .xenominorwarning{color:#2a623d;font-weight:bold;font-style:italic}.theme-light .xenodanger{color:#2a623d;font-weight:bold}.theme-light .avoidharm{color:#72a0e5;font-weight:bold}.theme-light .highdanger{color:red;font-weight:bold;font-size:140%}.theme-light .xenohighdanger{color:#2a623d;font-weight:bold;font-size:140%}.theme-light .xenoannounce{color:#1a472a;font-family:book-antiqua;font-weight:bold;font-size:140%}.theme-light .yautjabold{color:purple;font-weight:bold}.theme-light .yautjaboldbig{color:purple;font-weight:bold;font-size:120%}.theme-light .objectivebig{font-weight:bold;font-size:130%}.theme-light .objectivegreen{color:lime}.theme-light .objectivered{color:red}.theme-light .objectivesuccess{color:lime;font-weight:bold;font-size:110%}.theme-light .objectivefail{color:red;font-weight:bold;font-size:110%}.theme-light .xenotalk,.theme-light .xeno{color:#900090;font-style:italic}.theme-light .xenoleader{color:#730d73;font-style:italic;font-size:125%}.theme-light .xenoqueen{color:#730d73;font-style:italic;font-weight:bold;font-size:125%}.theme-light .newscaster{color:maroon}.theme-light .role_header{color:#db0000;display:block;text-align:center;font-weight:bold;font-family:trebuchet-ms;font-size:150%}.theme-light .role_body{color:#009;display:block;text-align:center;font-size:125%}.theme-light .round_header{color:#db0000;display:block;text-align:center;font-family:courier;font-weight:bold;font-size:180%}.theme-light .round_body{color:#001427;display:block;text-align:center;font-family:trebuchet-ms;font-weight:bold;font-size:125%}.theme-light .event_announcement{color:#600d48;font-family:arial-narrow;font-weight:bold;font-size:125%}.theme-light .announce_header{color:#000;font-weight:bold;font-size:150%}.theme-light .announce_header_blue{color:#009;font-weight:bold;font-size:150%}.theme-light .announce_body{color:red;font-weight:normal;font-size:125%}.theme-light .centerbold{display:block;text-align:center;font-weight:bold}.theme-light .mod{color:#735638;font-weight:bold}.theme-light .modooc{color:#184880;font-weight:bold}.theme-light .adminmod{color:#402a14;font-weight:bold}.theme-light .mentorsay{color:#b38c32;font-weight:bold}.theme-light .mentorhelp{color:#007e00;font-weight:bold}.theme-light .mentorbody{color:#da6200;font-weight:bold}.theme-light .mentorstaff{color:#876101;font-weight:bold}.theme-light .staffsay{color:#876101;font-weight:bold}.theme-light .tajaran{color:#803b56}.theme-light .tajaran_signlang{color:#941c1c}.theme-light .skrell{color:#00ced1}.theme-light .soghun{color:#228b22}.theme-light .changeling{color:purple}.theme-light .vox{color:#a0a}.theme-light .monkey{color:#966c47}.theme-light .german{color:#858f1e;font-family:"Times New Roman",Times,serif}.theme-light .spanish{color:#cf982b}.theme-light .japanese{color:#940927}.theme-light .chinese{color:#fe1919}.theme-light .zombie{color:#216163;font-style:italic}.theme-light .commando{color:#fe9b24;font-style:bold}.theme-light .rough{font-family:trebuchet-ms,cursive,sans-serif}.theme-light .say_quote{font-family:Georgia,Verdana,sans-serif}.theme-light .admin .message{color:#314cad}.theme-light .admin .prefix{font-weight:bolder}.theme-light .pm{font-size:110%}.theme-light .retro_translator{font-weight:bold}.theme-light .yautja_translator{color:#a00;font-weight:bold;animation:glitch .5s infinite}@keyframes glitch{25%{color:#a00;transform:translate(-2px, -1px)}50%{color:#be0000;transform:translate(1px, -2px)}75%{color:#8d0000;transform:translate(-1px, 2px)}100%{color:#830000;transform:translate(1px, 1px)}}.theme-light .examine_block{background:#f2f7fa;border:1px solid #111a27;margin:.5em;padding:.5em .75em}.theme-light .examine_block .icon{width:1.5em;height:1.5em;margin:0;padding:0}.theme-light .tooltip{font-style:italic;border-bottom:1px dashed #000}