diff --git a/code/__DEFINES/job.dm b/code/__DEFINES/job.dm index 0173a55e2d17..a2dfbb559769 100644 --- a/code/__DEFINES/job.dm +++ b/code/__DEFINES/job.dm @@ -213,6 +213,9 @@ GLOBAL_LIST_INIT(job_command_roles, JOB_COMMAND_ROLES_LIST) #define ROLES_WY_CORPORATE list(JOB_EXECUTIVE_SUPERVISOR, JOB_EXECUTIVE_SPECIALIST, JOB_SENIOR_EXECUTIVE, JOB_EXECUTIVE, JOB_JUNIOR_EXECUTIVE, JOB_TRAINEE) #define ROLES_WY_LEADERSHIP list(JOB_DIRECTOR, JOB_PMC_DIRECTOR, JOB_CHIEF_EXECUTIVE, JOB_DIVISION_MANAGER, JOB_ASSISTANT_MANAGER) +#define JOB_CORPORATE_ROLES /datum/timelock/corporate +#define JOB_CORPORATE_ROLES_LIST list(JOB_CORPORATE_LIAISON, JOB_WO_CORPORATE_LIAISON, JOB_DIRECTOR, JOB_PMC_DIRECTOR, JOB_CHIEF_EXECUTIVE, JOB_DIVISION_MANAGER, JOB_ASSISTANT_MANAGER, JOB_EXECUTIVE_SUPERVISOR, JOB_EXECUTIVE_SPECIALIST, JOB_SENIOR_EXECUTIVE, JOB_EXECUTIVE, JOB_JUNIOR_EXECUTIVE, JOB_TRAINEE) + //-------- WY Goons --------// #define JOB_WY_GOON "WY Corporate Security" #define JOB_WY_GOON_TECH "WY Corporate Security Technician" @@ -366,6 +369,21 @@ GLOBAL_LIST_INIT(job_command_roles, JOB_COMMAND_ROLES_LIST) #define DUTCH_JOB_LIST list(JOB_DUTCH_ARNOLD, JOB_DUTCH_RIFLEMAN, JOB_DUTCH_MINIGUNNER, JOB_DUTCH_FLAMETHROWER, JOB_DUTCH_MEDIC) +//---------- RESPONDERS ----------// +/// This root job should never appear ingame, it's used to select the character slot. +#define JOB_FAX_RESPONDER "Fax Responder" +#define JOB_FAX_RESPONDER_USCM_HC "USCM-HC Communications Officer" +#define JOB_FAX_RESPONDER_USCM_PVST "Provost Communications Officer" +#define JOB_FAX_RESPONDER_WY "WY Communications Executive" +#define JOB_FAX_RESPONDER_UPP "UPP Communications Officer" +#define JOB_FAX_RESPONDER_TWE "TWE Communications Officer" +#define JOB_FAX_RESPONDER_CLF "CLF Information Correspondant" +#define JOB_FAX_RESPONDER_CMB "CMB Deputy Operations Officer" + +#define FAX_RESPONDER_JOB_LIST list(JOB_FAX_RESPONDER_USCM_HC, JOB_FAX_RESPONDER_USCM_PVST, JOB_FAX_RESPONDER_WY, JOB_FAX_RESPONDER_UPP, JOB_FAX_RESPONDER_TWE, JOB_FAX_RESPONDER_CLF, JOB_FAX_RESPONDER_CMB) + + +//---------- ANTAG ----------// #define JOB_PREDATOR "Predator" #define JOB_XENOMORPH "Xenomorph" #define JOB_XENOMORPH_QUEEN "Queen" diff --git a/code/__DEFINES/mode.dm b/code/__DEFINES/mode.dm index 04c7993bd9f2..afa922c73314 100644 --- a/code/__DEFINES/mode.dm +++ b/code/__DEFINES/mode.dm @@ -117,6 +117,7 @@ #define ROLE_WHITELISTED 16 #define ROLE_NO_ACCOUNT 32 #define ROLE_CUSTOM_SPAWN 64 +#define ROLE_HIDDEN 128 //================================================= //Role defines, specifically lists of roles for job bans, crew manifests and the like. @@ -137,7 +138,7 @@ GLOBAL_LIST_INIT(ROLES_WO, list(JOB_WO_CO, JOB_WO_XO, JOB_WO_CORPORATE_LIAISON, //Groundside roles GLOBAL_LIST_INIT(ROLES_XENO, list(JOB_XENOMORPH_QUEEN, JOB_XENOMORPH)) -GLOBAL_LIST_INIT(ROLES_WHITELISTED, list(JOB_SYNTH_SURVIVOR, JOB_CO_SURVIVOR, JOB_PREDATOR)) +GLOBAL_LIST_INIT(ROLES_WHITELISTED, list(JOB_SYNTH_SURVIVOR, JOB_CO_SURVIVOR, JOB_PREDATOR, JOB_FAX_RESPONDER)) GLOBAL_LIST_INIT(ROLES_SPECIAL, list(JOB_SURVIVOR)) GLOBAL_LIST_INIT(ROLES_USCM, ROLES_CIC + GLOB.ROLES_POLICE + GLOB.ROLES_AUXIL_SUPPORT + GLOB.ROLES_MISC + GLOB.ROLES_ENGINEERING + GLOB.ROLES_REQUISITION + GLOB.ROLES_MEDICAL + GLOB.ROLES_MARINES - ROLES_WO) @@ -195,13 +196,8 @@ GLOBAL_LIST_INIT(whitelist_hierarchy, list(WHITELIST_NORMAL, WHITELIST_COUNCIL, ///Senior Enlisted Advisor, auto granted by R_MENTOR #define WHITELIST_MENTOR (1<<15) - -#define WHITELISTS_GENERAL (WHITELIST_YAUTJA|WHITELIST_COMMANDER|WHITELIST_SYNTHETIC|WHITELIST_MENTOR|WHITELIST_JOE) -#define WHITELISTS_COUNCIL (WHITELIST_YAUTJA_COUNCIL|WHITELIST_COMMANDER_COUNCIL|WHITELIST_SYNTHETIC_COUNCIL) -#define WHITELISTS_LEGACY_COUNCIL (WHITELIST_YAUTJA_COUNCIL_LEGACY|WHITELIST_COMMANDER_COUNCIL_LEGACY|WHITELIST_SYNTHETIC_COUNCIL_LEGACY) -#define WHITELISTS_LEADER (WHITELIST_YAUTJA_LEADER|WHITELIST_COMMANDER_LEADER|WHITELIST_SYNTHETIC_LEADER) - -#define WHITELIST_EVERYTHING (WHITELISTS_GENERAL|WHITELISTS_COUNCIL|WHITELISTS_LEADER) +///Fax Responder +#define WHITELIST_FAX_RESPONDER (1<<16) #define COUNCIL_LIST list(WHITELIST_COMMANDER_COUNCIL, WHITELIST_SYNTHETIC_COUNCIL, WHITELIST_YAUTJA_COUNCIL) #define SENATOR_LIST list(WHITELIST_COMMANDER_LEADER, WHITELIST_SYNTHETIC_LEADER, WHITELIST_YAUTJA_LEADER) @@ -225,6 +221,7 @@ DEFINE_BITFIELD(whitelist_status, list( "WHITELIST_SYNTHETIC_COUNCIL_LEGACY" = WHITELIST_SYNTHETIC_COUNCIL_LEGACY, "WHITELIST_SYNTHETIC_LEADER" = WHITELIST_SYNTHETIC_LEADER, "WHITELIST_MENTOR" = WHITELIST_MENTOR, + "WHITELIST_FAX_RESPONDER" = WHITELIST_FAX_RESPONDER, )) //================================================= diff --git a/code/__DEFINES/paperwork.dm b/code/__DEFINES/paperwork.dm new file mode 100644 index 000000000000..0acefb182979 --- /dev/null +++ b/code/__DEFINES/paperwork.dm @@ -0,0 +1,8 @@ +#define PAPER_CATEGORY_USCM "USCM" +#define PAPER_CATEGORY_USCM_HC "USCM HC" +#define PAPER_CATEGORY_PROVOST "Provost" +#define PAPER_CATEGORY_WEYYU "Weyland Yutani" +#define PAPER_CATEGORY_UPP "UPP" +#define PAPER_CATEGORY_CMB "CMB" +#define PAPER_CATEGORY_MP "Military Police" +#define PAPER_CATEGORY_LIAISON "WY Liaison" diff --git a/code/__DEFINES/urls.dm b/code/__DEFINES/urls.dm index 5d3fca1a2032..2745b41336d4 100644 --- a/code/__DEFINES/urls.dm +++ b/code/__DEFINES/urls.dm @@ -9,3 +9,4 @@ #define URL_WIKI_MACROS "Macros" #define URL_WIKI_SOP "Standard_Operating_Procedure" #define URL_WIKI_CO_RULES "CO_Council_Rulings" +#define URL_WIKI_FAX_RESPONDER "Fax_Responder" diff --git a/code/datums/emergency_calls/emergency_call.dm b/code/datums/emergency_calls/emergency_call.dm index e956a9731c7c..8a96d73eb4de 100644 --- a/code/datums/emergency_calls/emergency_call.dm +++ b/code/datums/emergency_calls/emergency_call.dm @@ -9,6 +9,7 @@ var/list/datum/emergency_call/all_calls = list() //initialized at round start and stores the datums. var/datum/emergency_call/picked_calls[] = list() //Which distress calls are currently active var/ert_dispatched = FALSE + var/loaded_fax_base = FALSE /datum/game_mode/proc/ares_online() var/name = "ARES Online" diff --git a/code/datums/emergency_calls/ert_stations.dm b/code/datums/emergency_calls/ert_stations.dm index 5a129723bad0..947007d25d70 100644 --- a/code/datums/emergency_calls/ert_stations.dm +++ b/code/datums/emergency_calls/ert_stations.dm @@ -18,3 +18,6 @@ /datum/lazy_template/ert/uscm_station map_name = "uscm_ert_station" + +/datum/lazy_template/fax_response_base + map_name = "fax_responder_base" diff --git a/code/datums/skills/civilian.dm b/code/datums/skills/civilian.dm index ff9cadf02913..66bca6b0fbef 100644 --- a/code/datums/skills/civilian.dm +++ b/code/datums/skills/civilian.dm @@ -224,3 +224,15 @@ CIVILIAN SKILL_FIREARMS = SKILL_FIREARMS_TRAINED, SKILL_LEADERSHIP = SKILL_LEAD_TRAINED, ) + +/datum/skills/civilian/fax_responder + name = "Comms Relay Worker" //Used for fax responder presets, allowing use of appropriate HUDs and basics. + skills = list( + SKILL_ENDURANCE = SKILL_ENDURANCE_TRAINED, + SKILL_LEADERSHIP = SKILL_LEAD_MASTER, + SKILL_OVERWATCH = SKILL_OVERWATCH_TRAINED, + SKILL_MEDICAL = SKILL_MEDICAL_TRAINED, + SKILL_ENGINEER = SKILL_ENGINEER_NOVICE, + SKILL_VEHICLE = SKILL_VEHICLE_SMALL, + SKILL_INTEL = SKILL_INTEL_EXPERT, + ) diff --git a/code/game/area/admin_level.dm b/code/game/area/admin_level.dm index 9dc43256f4de..f522ca24cd16 100644 --- a/code/game/area/admin_level.dm +++ b/code/game/area/admin_level.dm @@ -142,6 +142,10 @@ soundscape_playlist = SCAPE_PL_ELEVATOR_MUSIC icon_state = "yellow" +/area/adminlevel/ert_station/fax_response_station + name = "Sector Comms Relay" + icon_state = "green" + //Simulation area /area/adminlevel/simulation name = "Simulated Reality" diff --git a/code/game/gamemodes/cm_initialize.dm b/code/game/gamemodes/cm_initialize.dm index 4a208b00a796..d7568b349618 100644 --- a/code/game/gamemodes/cm_initialize.dm +++ b/code/game/gamemodes/cm_initialize.dm @@ -254,6 +254,106 @@ Additional game mode variables. return new_predator +//===================================================\\ + + //FAX RESPONDER INITIATLIZE\\ + +//===================================================\\ + +/datum/game_mode/proc/check_fax_responder_late_join(mob/responder, show_warning = TRUE) + if(!responder.client) + return FALSE + if(!(responder?.client.check_whitelist_status(WHITELIST_FAX_RESPONDER))) + if(show_warning) + to_chat(responder, SPAN_WARNING("You are not whitelisted!")) + return FALSE + if(show_warning && tgui_alert(responder, "Confirm joining as a Fax Responder.", "Confirmation", list("Yes", "No"), 10 SECONDS) != "Yes") + return FALSE + if(!get_fax_responder_slots(responder)) + if(show_warning) + to_chat(responder, SPAN_WARNING("No slots available!")) + return FALSE + return TRUE + +/datum/game_mode/proc/get_fax_responder_slots(mob/responder_candidate) + var/list/options = list() + if(!responder_candidate.client) + return FALSE + if(!(responder_candidate.client.check_whitelist_status(WHITELIST_FAX_RESPONDER))) + to_chat(responder_candidate, SPAN_WARNING("You are not whitelisted!")) + return FALSE + + for(var/job in FAX_RESPONDER_JOB_LIST) + var/datum/job/fax_responder_job = GLOB.RoleAuthority.roles_by_name[job] + var/job_max = fax_responder_job.total_positions + if((fax_responder_job.current_positions < job_max) && fax_responder_job.can_play_role(responder_candidate.client)) + options += job + return options + +/datum/game_mode/proc/attempt_to_join_as_fax_responder(mob/responder_candidate, from_lobby = FALSE) + var/list/options = get_fax_responder_slots(responder_candidate) + if(!options || !options.len) + to_chat(responder_candidate, SPAN_WARNING("No Available Slot!")) + if(from_lobby) + var/mob/new_player/lobbied = responder_candidate + lobbied.new_player_panel() + return FALSE + + var/choice = tgui_input_list(responder_candidate, "What Fax Responder do you want to join as?", "Which Responder?", options, 30 SECONDS) + if(!(choice in FAX_RESPONDER_JOB_LIST)) + to_chat(responder_candidate, SPAN_WARNING("Error: No valid responder selected.")) + if(from_lobby) + var/mob/new_player/lobbied = responder_candidate + lobbied.new_player_panel() + return FALSE + + if(!transform_fax_responder(responder_candidate, choice)) + if(from_lobby) + var/mob/new_player/lobbied = responder_candidate + lobbied.new_player_panel() + return FALSE + + if(responder_candidate) + responder_candidate.moveToNullspace() //Nullspace it for garbage collection later. + return TRUE + +/datum/game_mode/proc/transform_fax_responder(mob/responder_candidate, sub_job) + //set waitfor = FALSE + + if(!(sub_job in FAX_RESPONDER_JOB_LIST)) + return FALSE + + if(!responder_candidate.client) // Legacy - probably due to spawn code sync sleeps + log_debug("Null client attempted to transform_fax_responder") + return FALSE + if(!loaded_fax_base) + loaded_fax_base = SSmapping.lazy_load_template(/datum/lazy_template/fax_response_base, force = TRUE) + if(!loaded_fax_base) + log_debug("Error loading fax response base!") + return FALSE + + responder_candidate.client.prefs.find_assigned_slot(JOB_FAX_RESPONDER) + + var/turf/spawn_point = get_turf(pick(GLOB.latejoin_by_job[sub_job])) + var/mob/living/carbon/human/new_responder = new(spawn_point) + responder_candidate.mind.transfer_to(new_responder, TRUE) + new_responder.client?.prefs.copy_all_to(new_responder, JOB_FAX_RESPONDER, TRUE, FALSE) + + var/datum/job/fax_responder_job = GLOB.RoleAuthority.roles_by_name[sub_job] + + if(!fax_responder_job) + qdel(new_responder) + return FALSE + + // This is usually done in assign_role, a proc which is not executed in this case, since check_fax_responder_late_join is running its own checks. + fax_responder_job.current_positions++ + GLOB.RoleAuthority.equip_role(new_responder, fax_responder_job, new_responder.loc) + SSticker.minds += new_responder.mind + + message_admins(FONT_SIZE_XL(SPAN_RED("([new_responder.key]) joined as a [sub_job], [new_responder.real_name]."))) + + return TRUE + //===================================================\\ diff --git a/code/game/gamemodes/colonialmarines/whiskey_outpost.dm b/code/game/gamemodes/colonialmarines/whiskey_outpost.dm index 7554bb781f6d..17a96ede6b09 100644 --- a/code/game/gamemodes/colonialmarines/whiskey_outpost.dm +++ b/code/game/gamemodes/colonialmarines/whiskey_outpost.dm @@ -26,7 +26,7 @@ /datum/job/civilian/doctor/whiskey = JOB_DOCTOR, /datum/job/civilian/researcher/whiskey = JOB_RESEARCHER, /datum/job/logistics/engineering/whiskey = JOB_CHIEF_ENGINEER, - /datum/job/logistics/tech/maint/whiskey = JOB_MAINT_TECH, + /datum/job/logistics/maint/whiskey = JOB_MAINT_TECH, /datum/job/logistics/cargo/whiskey = JOB_CARGO_TECH, /datum/job/civilian/liaison/whiskey = JOB_CORPORATE_LIAISON, /datum/job/marine/leader/whiskey = JOB_SQUAD_LEADER, diff --git a/code/game/gamemodes/colonialmarines/whiskey_outpost/equipping.dm b/code/game/gamemodes/colonialmarines/whiskey_outpost/equipping.dm index d5ff07391b5e..617f957f9aec 100644 --- a/code/game/gamemodes/colonialmarines/whiskey_outpost/equipping.dm +++ b/code/game/gamemodes/colonialmarines/whiskey_outpost/equipping.dm @@ -189,12 +189,12 @@ Ensure power is up, and the bunker is well defended. You share your bunker crew //************************************* //---------------MAINT TECH------------- //*************************************/ -/datum/job/logistics/tech/maint/whiskey +/datum/job/logistics/maint/whiskey title = JOB_WO_ORDNANCE_TECH supervisors = "the bunker crew master and the quartermaster" gear_preset = /datum/equipment_preset/wo/bc -/datum/job/logistics/tech/maint/whiskey/generate_entry_message(mob/living/carbon/human/H) +/datum/job/logistics/maint/whiskey/generate_entry_message(mob/living/carbon/human/H) . = {"You've worked here for a while, figuring it was a pretty comfy job. Now you gotta fight for your life. Have fun with that. Assist both the Bunker Crew Master and the Quartermaster in their duties."} diff --git a/code/game/jobs/job/civilians/civilian.dm b/code/game/jobs/job/civilians/civilian.dm index a9631f2ed9c1..86b237816217 100644 --- a/code/game/jobs/job/civilians/civilian.dm +++ b/code/game/jobs/job/civilians/civilian.dm @@ -7,3 +7,10 @@ /datum/timelock/medic/New(name, time_required, list/roles) . = ..() src.roles = JOB_MEDIC_ROLES_LIST + +/datum/timelock/corporate + name = "Corporate Roles" + +/datum/timelock/corporate/New(name, time_required, list/roles) + . = ..() + src.roles = JOB_CORPORATE_ROLES_LIST diff --git a/code/game/jobs/job/special/responders.dm b/code/game/jobs/job/special/responders.dm new file mode 100644 index 000000000000..9bc5d88b9d19 --- /dev/null +++ b/code/game/jobs/job/special/responders.dm @@ -0,0 +1,75 @@ +/datum/job/fax_responder + title = JOB_FAX_RESPONDER + gear_preset = /datum/equipment_preset/fax_responder + selection_class = "job_command" + supervisors = "CMSS13 Administration Staff" + total_positions = 1 + spawn_positions = 1 + + late_joinable = FALSE + + flags_startup_parameters = ROLE_ADMIN_NOTIFY|ROLE_WHITELISTED|ROLE_NO_ACCOUNT|ROLE_CUSTOM_SPAWN|ROLE_HIDDEN + flags_whitelist = WHITELIST_FAX_RESPONDER + +/datum/job/fax_responder/on_config_load() + entry_message_body = "Your job is to answer faxes sent to your fax machine. You are answering on behalf of the CMSS13 staff team and are therefore expected to behave appropriately. Failure to adhere to expectations may result in loss of the role or a server ban. Non-staff players of this role are not able to authorise ERTs through their faxes." + return ..() + +/datum/job/fax_responder/uscm_hc + title = JOB_FAX_RESPONDER_USCM_HC + gear_preset = /datum/equipment_preset/fax_responder/uscm + +AddTimelock(/datum/job/fax_responder/uscm_hc, list( + JOB_POLICE_ROLES = 25 HOURS, + JOB_COMMAND_ROLES = 75 HOURS, +)) + +/datum/job/fax_responder/uscm_pvst + title = JOB_FAX_RESPONDER_USCM_PVST + gear_preset = /datum/equipment_preset/fax_responder/uscm/provost + +AddTimelock(/datum/job/fax_responder/uscm_pvst, list( + JOB_POLICE_ROLES = 150 HOURS, + JOB_COMMAND_ROLES = 75 HOURS, +)) + +/datum/job/fax_responder/wy + title = JOB_FAX_RESPONDER_WY + gear_preset = /datum/equipment_preset/fax_responder/wey_yu + +AddTimelock(/datum/job/fax_responder/wy, list( + JOB_CORPORATE_ROLES = 150 HOURS, +)) + +/datum/job/fax_responder/upp + title = JOB_FAX_RESPONDER_UPP + gear_preset = /datum/equipment_preset/fax_responder/upp + +AddTimelock(/datum/job/fax_responder/upp, list( + JOB_COMMAND_ROLES = 75 HOURS, +)) + +/datum/job/fax_responder/twe + title = JOB_FAX_RESPONDER_TWE + gear_preset = /datum/equipment_preset/fax_responder/twe + +AddTimelock(/datum/job/fax_responder/twe, list( + JOB_COMMAND_ROLES = 75 HOURS, +)) + +/datum/job/fax_responder/clf + title = JOB_FAX_RESPONDER_CLF + gear_preset = /datum/equipment_preset/fax_responder/clf + +AddTimelock(/datum/job/fax_responder/clf, list( + JOB_COMMAND_ROLES = 75 HOURS, +)) + +/datum/job/fax_responder/cmb + title = JOB_FAX_RESPONDER_CMB + gear_preset = /datum/equipment_preset/fax_responder/cmb + +AddTimelock(/datum/job/fax_responder/cmb, list( + JOB_POLICE_ROLES = 75 HOURS, + JOB_COMMAND_ROLES = 25 HOURS, +)) diff --git a/code/game/jobs/whitelist.dm b/code/game/jobs/whitelist.dm index 8cd91a494c83..0c87fcbb52d0 100644 --- a/code/game/jobs/whitelist.dm +++ b/code/game/jobs/whitelist.dm @@ -44,8 +44,9 @@ #define WL_PANEL_RIGHT_YAUTJA (1<<2) #define WL_PANEL_RIGHT_MENTOR (1<<3) #define WL_PANEL_RIGHT_OVERSEER (1<<4) +#define WL_PANEL_RIGHT_MANAGER (1<<5) #define WL_PANEL_ALL_COUNCILS (WL_PANEL_RIGHT_CO|WL_PANEL_RIGHT_SYNTH|WL_PANEL_RIGHT_YAUTJA) -#define WL_PANEL_ALL_RIGHTS (WL_PANEL_RIGHT_CO|WL_PANEL_RIGHT_SYNTH|WL_PANEL_RIGHT_YAUTJA|WL_PANEL_RIGHT_MENTOR|WL_PANEL_RIGHT_OVERSEER) +#define WL_PANEL_ALL_RIGHTS (WL_PANEL_RIGHT_CO|WL_PANEL_RIGHT_SYNTH|WL_PANEL_RIGHT_YAUTJA|WL_PANEL_RIGHT_MENTOR|WL_PANEL_RIGHT_OVERSEER|WL_PANEL_RIGHT_MANAGER) /datum/whitelist_panel var/viewed_player = list() @@ -68,7 +69,7 @@ if(person.check_whitelist_status(WHITELIST_YAUTJA_LEADER)) rights |= WL_PANEL_RIGHT_YAUTJA if(rights == WL_PANEL_ALL_COUNCILS) - return WL_PANEL_ALL_RIGHTS + rights |= WL_PANEL_RIGHT_OVERSEER return rights /datum/whitelist_panel/tgui_interact(mob/user, datum/tgui/ui) @@ -122,6 +123,7 @@ GLOBAL_LIST_INIT(yaut_flags, list( GLOBAL_LIST_INIT(misc_flags, list( list(name = "Senior Enlisted Advisor", bitflag = WHITELIST_MENTOR, permission = WL_PANEL_RIGHT_MENTOR), list(name = "Working Joe", bitflag = WHITELIST_JOE, permission = WL_PANEL_RIGHT_SYNTH), + list(name = "Fax Responder", bitflag = WHITELIST_FAX_RESPONDER, permission = WL_PANEL_RIGHT_MANAGER), )) /datum/whitelist_panel/ui_static_data(mob/user) diff --git a/code/game/machinery/computer/medical.dm b/code/game/machinery/computer/medical.dm index ac6de251ab45..eee97c0e2ec0 100644 --- a/code/game/machinery/computer/medical.dm +++ b/code/game/machinery/computer/medical.dm @@ -477,7 +477,7 @@ var/datum/asset/asset = get_asset_datum(/datum/asset/simple/paper) var/obj/item/paper/P = new /obj/item/paper( src.loc ) P.name = text("Scan: [], []",record.fields["name"],worldtime2text()) - P.info += text("

Official Weyland-Yutani Document
Scan Record

[]

\n
",record.fields["name"]) + P.info += text("

Official Weyland-Yutani Document
Scan Record

[]

\n
",record.fields["name"]) for(var/datum/data/record/R as anything in GLOB.data_core.medical) if (R.fields["name"] == record.fields["name"]) if(R.fields["last_scan_time"] && R.fields["last_scan_result"]) diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm index 45a57eb96392..4baaafd9eb01 100644 --- a/code/game/machinery/cryopod.dm +++ b/code/game/machinery/cryopod.dm @@ -8,7 +8,7 @@ //Used for logging people entering cryosleep and important items they are carrying. GLOBAL_LIST_EMPTY(frozen_crew) -GLOBAL_LIST_INIT(frozen_items, list(SQUAD_MARINE_1 = list(), SQUAD_MARINE_2 = list(), SQUAD_MARINE_3 = list(), SQUAD_MARINE_4 = list(), "MP" = list(), "REQ" = list(), "Eng" = list(), "Med" = list(), "Yautja" = list())) +GLOBAL_LIST_INIT(frozen_items, list(SQUAD_MARINE_1 = list(), SQUAD_MARINE_2 = list(), SQUAD_MARINE_3 = list(), SQUAD_MARINE_4 = list(), "MP" = list(), "REQ" = list(), "Eng" = list(), "Med" = list(), "Yautja" = list(), "Responders" = list())) //Main cryopod console. @@ -226,12 +226,15 @@ GLOBAL_LIST_INIT(frozen_items, list(SQUAD_MARINE_1 = list(), SQUAD_MARINE_2 = li switch(H.job) if(JOB_POLICE, JOB_WARDEN, JOB_CHIEF_POLICE) dept_console = GLOB.frozen_items["MP"] - if("Nurse", "Doctor","Researcher","Chief Medical Officer") + if(JOB_NURSE, JOB_DOCTOR, JOB_RESEARCHER, JOB_CMO) dept_console = GLOB.frozen_items["Med"] - if("Maintenance Technician", "Ordnance Technician","Chief Engineer") + if(JOB_MAINT_TECH, JOB_ORDNANCE_TECH, JOB_CHIEF_ENGINEER) dept_console = GLOB.frozen_items["Eng"] - if("Predator") + if(JOB_PREDATOR) dept_console = GLOB.frozen_items["Yautja"] + if(JOB_FAX_RESPONDER_USCM_HC, JOB_FAX_RESPONDER_USCM_PVST, JOB_FAX_RESPONDER_WY, JOB_FAX_RESPONDER_TWE, JOB_FAX_RESPONDER_UPP, JOB_FAX_RESPONDER_CLF, JOB_FAX_RESPONDER_CMB) + dept_console = GLOB.frozen_items["Responders"] + H.species.handle_cryo(H) var/list/deleteempty = list(/obj/item/storage/backpack/marine/satchel) @@ -254,7 +257,7 @@ GLOBAL_LIST_INIT(frozen_items, list(SQUAD_MARINE_1 = list(), SQUAD_MARINE_2 = li item_loop: for(var/obj/item/W in items) - if(((W.flags_inventory & CANTSTRIP) || (W.flags_item & NODROP) || (W.flags_item & NO_CRYO_STORE)) && !isyautja(occupant)) //We don't keep donor items, undroppable/unremovable items, and specifically filtered items + if(((W.flags_inventory & CANTSTRIP) || (W.flags_item & NODROP) || (W.flags_item & NO_CRYO_STORE)) && !gearless_role(occupant)) //We don't keep donor items, undroppable/unremovable items, and specifically filtered items if(istype(W, /obj/item/clothing/suit/storage)) var/obj/item/clothing/suit/storage/SS = W for(var/obj/item/I in SS.pockets) //But we keep stuff inside them @@ -359,7 +362,7 @@ GLOBAL_LIST_INIT(frozen_items, list(SQUAD_MARINE_1 = list(), SQUAD_MARINE_2 = li //Make an announcement and log the person entering storage. GLOB.frozen_crew += "[occupant.real_name] ([occupant.job])" - if(!isyautja(occupant)) + if(!gearless_role(occupant)) ai_silent_announcement("[occupant.real_name], [occupant.job], has entered long-term hypersleep storage. Belongings moved to hypersleep inventory.") visible_message(SPAN_NOTICE("[src] hums and hisses as it moves [occupant.real_name] into hypersleep storage.")) @@ -539,6 +542,13 @@ GLOBAL_LIST_INIT(frozen_items, list(SQUAD_MARINE_1 = list(), SQUAD_MARINE_2 = li move_inside(target) +/obj/structure/machinery/cryopod/proc/gearless_role(mob/occupant) + if(isyautja(occupant)) + return TRUE + if(occupant.job in FAX_RESPONDER_JOB_LIST) + return TRUE + return FALSE + /obj/structure/machinery/cryopod/tutorial silent_exit = TRUE diff --git a/code/game/machinery/fax_machine.dm b/code/game/machinery/fax_machine.dm index b15117bb2554..2c5addb5e6d6 100644 --- a/code/game/machinery/fax_machine.dm +++ b/code/game/machinery/fax_machine.dm @@ -1,5 +1,6 @@ -GLOBAL_LIST_INIT_TYPED(allfaxes, /obj/structure/machinery/faxmachine, list()) -GLOBAL_LIST_EMPTY(alldepartments) +GLOBAL_LIST_INIT_TYPED(all_faxmachines, /obj/structure/machinery/faxmachine, list()) +GLOBAL_LIST_EMPTY(all_fax_departments) +GLOBAL_LIST_EMPTY(all_faxcodes) #define DEPARTMENT_WY "Weyland-Yutani" #define DEPARTMENT_HC "USCM High Command" @@ -9,8 +10,23 @@ GLOBAL_LIST_EMPTY(alldepartments) #define DEPARTMENT_TWE "Three World Empire" #define DEPARTMENT_UPP "Union of Progress Peoples" #define DEPARTMENT_CLF "Colonial Liberation Front" +#define DEPARTMENT_TARGET "Specific Machine Code"//Used to send to a single specific machine. #define HIGHCOM_DEPARTMENTS list(DEPARTMENT_WY, DEPARTMENT_HC, DEPARTMENT_CMB, DEPARTMENT_PROVOST, DEPARTMENT_PRESS, DEPARTMENT_TWE, DEPARTMENT_UPP, DEPARTMENT_CLF) +#define FAX_NET_USCM "USCM Encrypted Network" +#define FAX_NET_USCM_HC "USCM High Command Quantum Relay" +#define FAX_NET_WY "Weyland-Yutani Secure Network" +#define FAX_NET_WY_COL "Weyland-Yutani Public Network" +#define FAX_NET_WY_HC "Weyland-Yutani Quantum Relay" +#define FAX_NET_CMB "NC4 UA Federal Secure Network - CMB Relay" +#define FAX_NET_TWE "TWE Encrypted Network" +#define FAX_NET_TWE_HC "TWE Imperial Command Quantum Relay" +#define FAX_NET_UPP "UPP Encrypted Network" +#define FAX_NET_UPP_HC "UPP High Command Quantum Relay" +#define FAX_NET_CLF "Peridia Encrypted Network" +#define FAX_NET_CLF_HC "Peridia Quantum Relay" +#define FAX_HC_NETWORKS list(FAX_NET_USCM_HC, FAX_NET_WY_HC, FAX_NET_CMB, FAX_NET_TWE_HC, FAX_NET_UPP_HC, FAX_NET_CLF_HC) + /obj/structure/machinery/faxmachine // why not fax_machine? name = "\improper General Purpose Fax Machine" icon = 'icons/obj/structures/machinery/library.dmi' @@ -35,24 +51,73 @@ GLOBAL_LIST_EMPTY(alldepartments) ///Target department var/target_department = DEPARTMENT_WY + var/target_machine_id = "No ID Selected" // list for img and their photo reference to be stored into the admin's cache. var/list/photo_list = list() ///Fluff network shown by fax machine when logged in - var/network = "Weyland-Yutani Public Network" + var/network = FAX_NET_WY_COL ///storer var for cooldown on sending faxes var/fax_cooldown = 300 COOLDOWN_DECLARE(send_cooldown) + var/machine_id_tag + /obj/structure/machinery/faxmachine/Initialize(mapload, ...) . = ..() - GLOB.allfaxes += src + GLOB.all_faxmachines += src update_departments() + generate_id_tag() + +/obj/structure/machinery/faxmachine/proc/generate_id_tag() + if(machine_id_tag) + GLOB.all_faxcodes -= machine_id_tag + + var/id_tag_prefix + var/id_tag_suffix = "[rand(1000, 9999)][pick(GLOB.alphabet_uppercase)][pick(GLOB.alphabet_uppercase)]" + var/id_tag_final + switch(network) + if(FAX_NET_USCM) + id_tag_prefix = "UA-M"//United Americas Military + if(FAX_NET_USCM_HC) + id_tag_final = FAX_NET_USCM_HC + if(FAX_NET_CMB) + id_tag_final = FAX_NET_CMB + if(FAX_NET_WY) + id_tag_prefix = "WY-SCN"//Weyland Yutani Secure Corporate Network + if(FAX_NET_WY_COL) + id_tag_prefix = "WYC"//Weyland Yutani Communications + if(FAX_NET_WY_HC) + id_tag_final = FAX_NET_WY_HC + if(FAX_NET_TWE) + id_tag_prefix = "ICN"//Imperial Communication Network + if(FAX_NET_TWE_HC) + id_tag_final = FAX_NET_TWE_HC + if(FAX_NET_UPP) + id_tag_prefix = "UFR"//Union Fax Relay + if(FAX_NET_UPP_HC) + id_tag_final = FAX_NET_UPP_HC + if(FAX_NET_CLF) + id_tag_prefix = "PRD"//PeRiDia + if(FAX_NET_CLF_HC) + id_tag_final = FAX_NET_CLF_HC + + if(!id_tag_final) + id_tag_final = "[id_tag_prefix]-[id_tag_suffix]" + if(id_tag_final in GLOB.all_faxcodes) + generate_id_tag() + return FALSE + + machine_id_tag = id_tag_final + if(machine_id_tag == network) + return TRUE + GLOB.all_faxcodes += id_tag_final + return TRUE /obj/structure/machinery/faxmachine/Destroy() - GLOB.allfaxes -= src + GLOB.all_faxmachines -= src . = ..() /obj/structure/machinery/faxmachine/initialize_pass_flags(datum/pass_flags_container/PF) @@ -129,24 +194,26 @@ GLOBAL_LIST_EMPTY(alldepartments) return /obj/structure/machinery/faxmachine/proc/update_departments() - if( !("[department]" in GLOB.alldepartments) ) //Initialize departments. This will work with multiple fax machines. - GLOB.alldepartments += department - if(!(DEPARTMENT_WY in GLOB.alldepartments)) - GLOB.alldepartments += DEPARTMENT_WY - if(!(DEPARTMENT_HC in GLOB.alldepartments)) - GLOB.alldepartments += DEPARTMENT_HC - if(!(DEPARTMENT_PROVOST in GLOB.alldepartments)) - GLOB.alldepartments += DEPARTMENT_PROVOST - if(!(DEPARTMENT_CMB in GLOB.alldepartments)) - GLOB.alldepartments += DEPARTMENT_CMB - if(!(DEPARTMENT_PRESS in GLOB.alldepartments)) - GLOB.alldepartments += DEPARTMENT_PRESS - if(!(DEPARTMENT_TWE in GLOB.alldepartments)) - GLOB.alldepartments += DEPARTMENT_TWE - if(!(DEPARTMENT_UPP in GLOB.alldepartments)) - GLOB.alldepartments += DEPARTMENT_UPP - if(!(DEPARTMENT_CLF in GLOB.alldepartments)) - GLOB.alldepartments += DEPARTMENT_CLF + if(!(DEPARTMENT_TARGET in GLOB.all_fax_departments)) + GLOB.all_fax_departments += DEPARTMENT_TARGET + if( !("[department]" in GLOB.all_fax_departments) ) //Initialize departments. This will work with multiple fax machines. + GLOB.all_fax_departments += department + if(!(DEPARTMENT_WY in GLOB.all_fax_departments)) + GLOB.all_fax_departments += DEPARTMENT_WY + if(!(DEPARTMENT_HC in GLOB.all_fax_departments)) + GLOB.all_fax_departments += DEPARTMENT_HC + if(!(DEPARTMENT_PROVOST in GLOB.all_fax_departments)) + GLOB.all_fax_departments += DEPARTMENT_PROVOST + if(!(DEPARTMENT_CMB in GLOB.all_fax_departments)) + GLOB.all_fax_departments += DEPARTMENT_CMB + if(!(DEPARTMENT_PRESS in GLOB.all_fax_departments)) + GLOB.all_fax_departments += DEPARTMENT_PRESS + if(!(DEPARTMENT_TWE in GLOB.all_fax_departments)) + GLOB.all_fax_departments += DEPARTMENT_TWE + if(!(DEPARTMENT_UPP in GLOB.all_fax_departments)) + GLOB.all_fax_departments += DEPARTMENT_UPP + if(!(DEPARTMENT_CLF in GLOB.all_fax_departments)) + GLOB.all_fax_departments += DEPARTMENT_CLF // TGUI SHIT \\ @@ -169,6 +236,7 @@ GLOBAL_LIST_EMPTY(alldepartments) data["department"] = department data["network"] = network + data["machine_id_tag"] = machine_id_tag return data @@ -181,7 +249,10 @@ GLOBAL_LIST_EMPTY(alldepartments) data["paper_name"] = original_fax.name data["authenticated"] = authenticated + data["target_department"] = target_department + if(target_department == DEPARTMENT_TARGET) + data["target_department"] = target_machine_id data["worldtime"] = world.time data["nextfaxtime"] = send_cooldown @@ -266,8 +337,15 @@ GLOBAL_LIST_EMPTY(alldepartments) if("select") var/last_target_department = target_department - target_department = tgui_input_list(ui.user, "Which department?", "Choose a department", GLOB.alldepartments) - if(!target_department) target_department = last_target_department + target_department = tgui_input_list(ui.user, "Which department?", "Choose a department", GLOB.all_fax_departments) + if(!target_department) + target_department = last_target_department + if(target_department == DEPARTMENT_TARGET) + var/new_target_machine_id = tgui_input_list(ui.user, "Which machine?", "Choose a machine code", GLOB.all_faxcodes) + if(!new_target_machine_id) + target_department = last_target_department + else + target_machine_id = new_target_machine_id . = TRUE if("auth") @@ -335,10 +413,13 @@ GLOBAL_LIST_EMPTY(alldepartments) GLOB.fax_contents += faxcontents var/scan_department = target_department + var/the_target_department = target_department if(department in HIGHCOM_DEPARTMENTS) scan_department = department + else if(target_department == DEPARTMENT_TARGET) + the_target_department = "Fax Machine [target_machine_id]" - var/msg_admin = SPAN_STAFF_IC("[target_department]: [key_name(user, 1)] ") + var/msg_admin = SPAN_STAFF_IC("[the_target_department]: [key_name(user, 1)] ") msg_admin += "[CC_MARK(user)] [ADMIN_PP(user)] [ADMIN_VV(user)] [ADMIN_SM(user)] [ADMIN_JMP_USER(user)] " switch(scan_department) @@ -372,7 +453,7 @@ GLOBAL_LIST_EMPTY(alldepartments) msg_admin += SPAN_STAFF_IC("Receiving fax via secure connection ... view message") - var/msg_ghost = SPAN_NOTICE("[target_department]: ") + var/msg_ghost = SPAN_NOTICE("[the_target_department]: ") msg_ghost += "Receiving fax via secure connection ... view message" send_fax(faxcontents) @@ -404,80 +485,73 @@ GLOBAL_LIST_EMPTY(alldepartments) /obj/structure/machinery/faxmachine/proc/send_fax(datum/fax/faxcontents) - for(var/obj/structure/machinery/faxmachine/F in GLOB.allfaxes) - if(F != src && F.department == target_department) - if(!faxcontents) - return - if(! (F.inoperable() ) ) - - flick("[initial(icon_state)]receive", F) - - // give the sprite some time to flick - spawn(30) - var/obj/item/paper/P = new(F.loc,faxcontents.photo_list) - P.name = "faxed message" - P.info = "[faxcontents.data]" - P.update_icon() - - switch(network) - if("USCM High Command Quantum Relay") - var/image/stampoverlay = image('icons/obj/items/paper.dmi') - stampoverlay.icon_state = "paper_stamp-uscm" - P.stamps += "
This paper has been stamped by the USCM High Command Quantum Relay." - if("NC4 UA Federal Secure Network - CMB Relay") - var/image/stampoverlay = image('icons/obj/items/paper.dmi') - stampoverlay.icon_state = "paper_stamp-cmb" - if(!P.stamped) - P.stamped = new - P.stamped += /obj/item/tool/stamp - P.overlays += stampoverlay - P.stamps += "
This paper has been stamped by The Office of Colonial Marshals." - if("Weyland-Yutani Quantum Relay") - var/image/stampoverlay = image('icons/obj/items/paper.dmi') - stampoverlay.icon_state = "paper_stamp-weyyu" - if(!P.stamped) - P.stamped = new - P.stamped += /obj/item/tool/stamp - P.overlays += stampoverlay - P.stamps += "
This paper has been stamped and encrypted by the Weyland-Yutani Quantum Relay (tm)." - if("TWE Royal Marines Commando Quantum Relay") - var/image/stampoverlay = image('icons/obj/items/paper.dmi') - stampoverlay.icon_state = "paper_stamp-twe" - if(!P.stamped) - P.stamped = new - P.stamped += /obj/item/tool/stamp - P.overlays += stampoverlay - P.stamps += "
This paper has been stamped by the TWE Royal Marines Commando Quantum Relay." - if("UPP High Kommand Quantum Relay") - var/image/stampoverlay = image('icons/obj/items/paper.dmi') - stampoverlay.icon_state = "paper_stamp-upp" - if(!P.stamped) - P.stamped = new - P.stamped += /obj/item/tool/stamp - P.overlays += stampoverlay - P.stamps += "
This paper has been stamped by the UPP High Kommand Quantum Relay." - if("CLF Gureilla Command Quantum Relay") - var/image/stampoverlay = image('icons/obj/items/paper.dmi') - stampoverlay.icon_state = "paper_stamp-clf" - if(!P.stamped) - P.stamped = new - P.stamped += /obj/item/tool/stamp - P.overlays += stampoverlay - P.stamps += "
This paper has been stamped and encrypted by the CLF Gureilla Command Quantum Relay." - - playsound(F.loc, "sound/items/polaroid1.ogg", 15, 1) + var/list/target_machines = list() + for(var/obj/structure/machinery/faxmachine/pos_target in GLOB.all_faxmachines) + if(target_department == DEPARTMENT_TARGET) + if(pos_target != src && pos_target.machine_id_tag == target_machine_id) + target_machines += pos_target + else + if(pos_target != src && pos_target.department == target_department) + target_machines += pos_target + + for(var/obj/structure/machinery/faxmachine/target in target_machines) + if(!faxcontents) + return + if(!(target.inoperable())) + + flick("[initial(icon_state)]receive", target) + + // give the sprite some time to flick + spawn(30) + var/obj/item/paper/P = new(target.loc,faxcontents.photo_list) + P.name = "faxed message" + P.info = "[faxcontents.data]" + P.update_icon() + var/image/stampoverlay = image('icons/obj/items/paper.dmi') + var/encrypted = FALSE + + switch(network) + if(FAX_NET_USCM_HC) + stampoverlay.icon_state = "paper_stamp-uscm" + encrypted = TRUE + if(FAX_NET_CMB) + stampoverlay.icon_state = "paper_stamp-cmb" + network = "NC4 UA Federal Secure Network." + encrypted = TRUE + if(FAX_NET_WY_HC) + stampoverlay.icon_state = "paper_stamp-weyyu" + encrypted = TRUE + if(FAX_NET_TWE_HC) + stampoverlay.icon_state = "paper_stamp-twe" + encrypted = TRUE + if(FAX_NET_UPP_HC) + stampoverlay.icon_state = "paper_stamp-upp" + encrypted = TRUE + if(FAX_NET_CLF_HC) + stampoverlay.icon_state = "paper_stamp-clf" + encrypted = TRUE + + + if(encrypted) + if(!P.stamped) + P.stamped = new + P.stamped += /obj/item/tool/stamp + P.overlays += stampoverlay + P.stamps += "
This paper has been stamped and encrypted by the [network]." + else + P.stamps += "
This paper has been sent by [machine_id_tag]." + playsound(target.loc, "sound/items/polaroid1.ogg", 15, 1) qdel(faxcontents) /obj/structure/machinery/faxmachine/cmb name = "\improper CMB Incident Command Center Fax Machine" - department = "Colonial Marshal Bureau, Anchorpoint Station" - network = "NC4 UA Federal Secure Network - CMB Relay" + network = FAX_NET_CMB department = DEPARTMENT_CMB /obj/structure/machinery/faxmachine/corporate name = "\improper W-Y Corporate Fax Machine" department = "W-Y Local Office" - network = "Weyland-Yutani Secure Network" + network = FAX_NET_WY /obj/structure/machinery/faxmachine/corporate/liaison department = "W-Y Liaison" @@ -485,12 +559,12 @@ GLOBAL_LIST_EMPTY(alldepartments) /obj/structure/machinery/faxmachine/corporate/highcom department = DEPARTMENT_WY target_department = "W-Y Liaison" - network = "Weyland-Yutani Quantum Relay" + network = FAX_NET_WY_HC /obj/structure/machinery/faxmachine/uscm name = "\improper USCM Military Fax Machine" department = "USCM Local Operations" - network = "USCM Encrypted Network" + network = FAX_NET_USCM target_department = DEPARTMENT_HC /obj/structure/machinery/faxmachine/uscm/command @@ -502,7 +576,7 @@ GLOBAL_LIST_EMPTY(alldepartments) /obj/structure/machinery/faxmachine/uscm/command/highcom department = DEPARTMENT_HC target_department = "Commanding Officer" - network = "USCM High Command Quantum Relay" + network = FAX_NET_USCM_HC /obj/structure/machinery/faxmachine/uscm/brig name = "\improper USCM Provost Fax Machine" @@ -515,8 +589,40 @@ GLOBAL_LIST_EMPTY(alldepartments) /obj/structure/machinery/faxmachine/uscm/brig/provost department = DEPARTMENT_PROVOST target_department = "Brig" - network = "USCM High Command Quantum Relay" - + network = FAX_NET_USCM_HC + +/obj/structure/machinery/faxmachine/upp + name = "\improper UPP Military Fax Machine" + department = "UPP Local Operations" + network = FAX_NET_UPP + target_department = DEPARTMENT_UPP + +/obj/structure/machinery/faxmachine/upp/highcom + department = DEPARTMENT_UPP + network = FAX_NET_UPP_HC + target_department = "UPP Local Operations" + +/obj/structure/machinery/faxmachine/clf + name = "\improper Hacked General Purpose Fax Machine" + department = "CLF Local Operations" + network = FAX_NET_CLF + target_department = DEPARTMENT_CLF + +/obj/structure/machinery/faxmachine/clf/highcom + department = DEPARTMENT_CLF + network = FAX_NET_CLF_HC + target_department = "CLF Local Operations" + +/obj/structure/machinery/faxmachine/twe + name = "\improper TWE Military Fax Machine" + department = "TWE Local Operations" + network = FAX_NET_TWE + target_department = DEPARTMENT_TWE + +/obj/structure/machinery/faxmachine/twe/highcom + department = DEPARTMENT_TWE + network = FAX_NET_TWE_HC + target_department = "TWE Local Operations" ///The deployed fax machine backpack /obj/structure/machinery/faxmachine/backpack diff --git a/code/game/machinery/vending/vending_types.dm b/code/game/machinery/vending/vending_types.dm index 85d08641bfdf..f9734a04bcc6 100644 --- a/code/game/machinery/vending/vending_types.dm +++ b/code/game/machinery/vending/vending_types.dm @@ -442,7 +442,7 @@ /obj/item/tool/pen = 10, /obj/item/tool/pen/blue = 10, /obj/item/tool/pen/red = 10, - /obj/item/tool/pen/fountain = 3, + /obj/item/tool/pen/multicolor/fountain = 3, /obj/item/storage/fancy/cigarettes/trading_card = 20, /obj/item/storage/fancy/trading_card = 20, /obj/item/toy/trading_card = 50, @@ -473,7 +473,7 @@ /obj/item/tool/pen = 2, /obj/item/tool/pen/blue = 2, /obj/item/tool/pen/red = 2, - /obj/item/tool/pen/fountain = 30, + /obj/item/tool/pen/multicolor/fountain = 30, /obj/item/storage/fancy/cigarettes/trading_card = 30, /obj/item/storage/fancy/trading_card = 20, /obj/item/toy/trading_card = 5, diff --git a/code/game/objects/effects/landmarks/landmarks.dm b/code/game/objects/effects/landmarks/landmarks.dm index f5f0e0b50c05..4988e60e0014 100644 --- a/code/game/objects/effects/landmarks/landmarks.dm +++ b/code/game/objects/effects/landmarks/landmarks.dm @@ -321,10 +321,10 @@ job = /datum/job/logistics/engineering/whiskey /obj/effect/landmark/start/whiskey/maint - job = /datum/job/logistics/tech/maint/whiskey + job = /datum/job/logistics/maint/whiskey /obj/effect/landmark/start/whiskey/tech - job = /datum/job/logistics/tech //Need to create a WO variant in the future + job = /datum/job/logistics/otech //Need to create a WO variant in the future //****************************************** MILITARY POLICE- HONOR-GUARD ************************************************/ /obj/effect/landmark/start/whiskey/warrant @@ -452,6 +452,35 @@ GLOB.latejoin -= src return ..() + +/obj/effect/landmark/late_join/responder/uscm + name = "USCM HC Fax Responder late join" + job = JOB_FAX_RESPONDER_USCM_HC + +/obj/effect/landmark/late_join/responder/uscm/provost + name = "USCM Provost Fax Responder late join" + job = JOB_FAX_RESPONDER_USCM_PVST + +/obj/effect/landmark/late_join/responder/wey_yu + name = "W-Y Fax Responder late join" + job = JOB_FAX_RESPONDER_WY + +/obj/effect/landmark/late_join/responder/upp + name = "UPP Fax Responder late join" + job = JOB_FAX_RESPONDER_UPP + +/obj/effect/landmark/late_join/responder/twe + name = "TWE Fax Responder late join" + job = JOB_FAX_RESPONDER_TWE + +/obj/effect/landmark/late_join/responder/clf + name = "CLF Fax Responder late join" + job = JOB_FAX_RESPONDER_CLF + +/obj/effect/landmark/late_join/responder/cmb + name = "CMB Fax Responder late join" + job = JOB_FAX_RESPONDER_CMB + //****************************************** STATIC COMMS ************************************************// /obj/effect/landmark/static_comms name = "static comms" diff --git a/code/game/objects/effects/spawners/random.dm b/code/game/objects/effects/spawners/random.dm index 388e9f289cd7..8df88e607efa 100644 --- a/code/game/objects/effects/spawners/random.dm +++ b/code/game/objects/effects/spawners/random.dm @@ -203,7 +203,7 @@ /obj/item/storage/belt/champion,\ /obj/item/tool/soap/deluxe,\ /obj/item/tool/pickaxe/silver,\ - /obj/item/tool/pen/invisible,\ + /obj/item/tool/pen/white,\ /obj/item/explosive/grenade/smokebomb,\ /obj/item/corncob,\ /obj/item/poster,\ diff --git a/code/game/objects/items/gift_wrappaper.dm b/code/game/objects/items/gift_wrappaper.dm index ea2c19639b7a..4009cf2a172f 100644 --- a/code/game/objects/items/gift_wrappaper.dm +++ b/code/game/objects/items/gift_wrappaper.dm @@ -72,7 +72,7 @@ /obj/item/storage/belt/champion, /obj/item/tool/soap/deluxe, /obj/item/tool/pickaxe/silver, - /obj/item/tool/pen/invisible, + /obj/item/tool/pen/white, /obj/item/explosive/grenade/smokebomb, /obj/item/corncob, /obj/item/poster, diff --git a/code/game/objects/items/tools/misc_tools.dm b/code/game/objects/items/tools/misc_tools.dm index b016f0e67b33..afa7ad0d2a41 100644 --- a/code/game/objects/items/tools/misc_tools.dm +++ b/code/game/objects/items/tools/misc_tools.dm @@ -58,10 +58,10 @@ if(isturf(A)) to_chat(user, SPAN_WARNING("The label won't stick to that.")) return - if(istype(A, /obj/item/storage/pill_bottle)) + if(istype(A, /obj/item/storage/pill_bottle)) var/obj/item/storage/pill_bottle/target_pill_bottle = A target_pill_bottle.choose_color(user) - + if(!label || !length(label)) remove_label(A, user) return @@ -186,6 +186,16 @@ if(on) overlays += "+[pen_color]_tip" +/obj/item/tool/pen/attack(mob/M as mob, mob/user as mob) + if(!ismob(M)) + return + to_chat(user, SPAN_WARNING("You stab [M] with the pen.")) + M.last_damage_data = create_cause_data(initial(name), user) + M.attack_log += text("\[[time_stamp()]\] Has been stabbed with [name] by [key_name(user)]") + user.attack_log += text("\[[time_stamp()]\] Used the [name] to stab [key_name(M)]") + msg_admin_attack("[key_name(user)] Used the [name] to stab [key_name(M)] in [get_area(user)] ([user.loc.x],[user.loc.y],[user.loc.z]).", user.loc.x, user.loc.y, user.loc.z) + return + /obj/item/tool/pen/afterattack(atom/target, mob/user, proximity_flag, click_parameters) . = ..() if(!isobj(target)) @@ -275,77 +285,78 @@ name = "WY green pen" clicky = TRUE -/obj/item/tool/pen/invisible - desc = "It's an invisible pen marker." +/obj/item/tool/pen/white + desc = "It's a rare white ink pen." pen_color = "white" -/obj/item/tool/pen/fountain +/obj/item/tool/pen/white/clicky + desc = "It's a WY brand extra clicky white ink pen." + name = "WY white pen" + clicky = TRUE + +/obj/item/tool/pen/multicolor + name = "multicolor pen" + desc = "A color switching pen!" + var/list/colour_list = list("red", "blue", "black") + var/current_colour_index = 1 + +/obj/item/tool/pen/multicolor/attack_self(mob/living/carbon/human/user) + if(on) + current_colour_index = (current_colour_index % length(colour_list)) + 1 + pen_color = colour_list[current_colour_index] + balloon_alert(user,"you twist the pen and change the ink color to [pen_color].") + if(clicky) + playsound(user.loc, 'sound/items/pen_click_on.ogg', 100, 1, 5) + update_pen_state() + else + ..() + +/obj/item/tool/pen/multicolor/fountain desc = "A lavish testament to the ingenuity of ARMAT's craftsmanship, this fountain pen is a paragon of design and functionality. Detailed with golden accents and intricate mechanics, the pen allows for a swift change between a myriad of ink colors with a simple twist. A product of precision engineering, each mechanism inside the pen is designed to provide a seamless, effortless transition from one color to the next, creating an instrument of luxurious versatility." desc_lore = "More than just a tool for writing, ARMAT's fountain pen is a symbol of distinction and authority within the ranks of the United States Colonial Marine Corps (USCM). It is a legacy item, exclusively handed out to the top-tier command personnel, each pen a tribute to the recipient's leadership and dedication.\n \nARMAT, renowned for their weapons technology, took a different approach in crafting this piece. The fountain pen, though seemingly a departure from their usual field, is deeply ingrained with the company's engineering philosophy, embodying precision, functionality, and robustness.\n \nThe golden accents are not mere embellishments; they're an identifier, setting apart these pens and their owners from the rest. The gold is meticulously alloyed with a durable metallic substance, granting it resilience to daily wear and tear. Such resilience is symbolic of the tenacity and perseverance required of USCM command personnel.\n \nEach pen is equipped with an intricate color changing mechanism, allowing the user to switch between various ink colors. This feature, inspired by the advanced targeting systems of ARMAT's weaponry, uses miniaturized actuators and precision-ground components to smoothly transition the ink flow. A simple twist of the pen's body activates the change, rotating the internal ink cartridges into place with mechanical grace, ready for the user's command.\n \nThe ink colors are not chosen arbitrarily. Each represents a different echelon within the USCM, allowing the pen's owner to write in the hue that corresponds with their rank or the rank of the recipient of their written orders. This acts as a silent testament to the authority of their words, as if each stroke of the pen echoes through the halls of USCM authority.\n \nDespite its ornate appearance, the pen is as robust as any ARMAT weapon, reflecting the company's commitment to reliability and durability. The metal components are corrosion-resistant, ensuring the pen's longevity, even under the challenging conditions often faced by USCM high command.\n \nThe fusion of luxury and utility, the blend of gold and metal, is an embodiment of the hard-won elegance of command, of the fusion between power and grace. It's more than a writing instrument - it's an emblem of leadership, an accolade to the dedication and strength of those who bear it. ARMAT's fountain pen stands as a monument to the precision, integrity, and courage embodied by the USCM's highest-ranking officers." name = "fountain pen" icon_state = "fountain_pen" item_state = "fountain_pen" matter = list("metal" = 20, "gold" = 10) - var/static/list/color_list = list("red", "blue", "green", "yellow", "purple", "pink", "brown", "black", "orange") // Can add more colors as required - var/current_color_index = 1 + colour_list = list("red", "blue", "green", "yellow", "purple", "pink", "brown", "black", "orange") // Can add more colors as required var/owner_name -/obj/item/tool/pen/fountain/pickup(mob/user, silent) +/obj/item/tool/pen/multicolor/fountain/pickup(mob/user, silent) . = ..() if(!owner_name) RegisterSignal(user, COMSIG_POST_SPAWN_UPDATE, PROC_REF(set_owner), override = TRUE) ///Sets the owner of the pen to who it spawns with, requires var/source for signals -/obj/item/tool/pen/fountain/proc/set_owner(datum/source) +/obj/item/tool/pen/multicolor/fountain/proc/set_owner(datum/source) SIGNAL_HANDLER UnregisterSignal(source, COMSIG_POST_SPAWN_UPDATE) var/mob/living/carbon/human/user = source owner_name = user.name -/obj/item/tool/pen/fountain/get_examine_text(mob/user) +/obj/item/tool/pen/multicolor/fountain/get_examine_text(mob/user) . = ..() if(owner_name) . += "There's a laser engraving of [owner_name] on it." -/obj/item/tool/pen/fountain/attack_self(mob/living/carbon/human/user) - if(on) - current_color_index = (current_color_index % length(color_list)) + 1 - pen_color = color_list[current_color_index] - balloon_alert(user,"you twist the pen and change the ink color to [pen_color].") - if(clicky) - playsound(user.loc, 'sound/items/pen_click_on.ogg', 100, 1, 5) - update_pen_state() - else - ..() - -/obj/item/tool/pen/attack(mob/M as mob, mob/user as mob) - if(!ismob(M)) - return - to_chat(user, SPAN_WARNING("You stab [M] with the pen.")) -// to_chat(M, SPAN_WARNING("You feel a tiny prick!")) //That's a whole lot of meta! - M.last_damage_data = create_cause_data(initial(name), user) - M.attack_log += text("\[[time_stamp()]\] Has been stabbed with [name] by [key_name(user)]") - user.attack_log += text("\[[time_stamp()]\] Used the [name] to stab [key_name(M)]") - msg_admin_attack("[key_name(user)] Used the [name] to stab [key_name(M)] in [get_area(user)] ([user.loc.x],[user.loc.y],[user.loc.z]).", user.loc.x, user.loc.y, user.loc.z) - return - +/obj/item/tool/pen/multicolor/provost + name = "provost pen" + desc = "A sleek black shell pen with the Provost Office sigil engraved into the side. It can change colors as needed for various functions within the Provost and Military Police." + icon_state = "provost_pen" + colour_list = list("blue", "green", "black", "orange", "red", "white") /* - * Sleepy Pens + * Antag pens */ /obj/item/tool/pen/sleepypen desc = "It's a black ink pen with a sharp point and a carefully engraved \"Waffle Co.\"" flags_atom = FPRINT|OPENCONTAINER flags_equip_slot = SLOT_WAIST - - /obj/item/tool/pen/sleepypen/Initialize() . = ..() create_reagents(30) reagents.add_reagent("chloralhydrate", 22) - /obj/item/tool/pen/sleepypen/attack(mob/M as mob, mob/user as mob) if(!(istype(M,/mob))) return @@ -354,16 +365,10 @@ if(M.reagents) reagents.trans_to(M, 50) return - -/* - * Parapens - */ /obj/item/tool/pen/paralysis flags_atom = FPRINT|OPENCONTAINER flags_equip_slot = SLOT_WAIST - - /obj/item/tool/pen/paralysis/attack(mob/living/M as mob, mob/user as mob) if(!(istype(M))) return @@ -378,6 +383,9 @@ reagents.add_reagent("zombiepowder", 10) reagents.add_reagent("cryptobiolin", 15) +/* + * Stamps + */ /obj/item/tool/stamp name = "rubber stamp" desc = "A rubber stamp for stamping important documents." diff --git a/code/game/supplyshuttle.dm b/code/game/supplyshuttle.dm index 8974eb36187f..fc5744dcbbf1 100644 --- a/code/game/supplyshuttle.dm +++ b/code/game/supplyshuttle.dm @@ -1141,7 +1141,7 @@ GLOBAL_DATUM_INIT(supply_controller, /datum/controller/supply, new()) temp += "Back to all categories


" temp += SPAN_DANGER("ERR0R UNK7OWN C4T2G#!$0-


") if(black_market_lockout) - temp += "





Unauthorized Access Removed.
This console is currently under CMB investigation.
Thank you for your cooperation.
" + temp += "





Unauthorized Access Removed.
This console is currently under CMB investigation.
Thank you for your cooperation.
" return temp += "KHZKNHZH#0-" if(!GLOB.supply_controller.mendoza_status) // he's daed diff --git a/code/modules/admin/fax_templates.dm b/code/modules/admin/fax_templates.dm index 2522acf92b3b..210915a3f7b8 100644 --- a/code/modules/admin/fax_templates.dm +++ b/code/modules/admin/fax_templates.dm @@ -7,7 +7,7 @@ dat += "body {" dat += "margin:0 auto;" dat += "padding:0;" - dat += "background-image: url('[asset.get_url_mappings()["faxbackground.jpg"]]');" + dat += "background-image: url('[asset.get_url_mappings()["background_white.jpg"]]');" dat += "font-family: monospace;" dat += "}" @@ -65,7 +65,7 @@ if(show_wy_logo) dat += "" dat += "
" diff --git a/code/modules/asset_cache/asset_list_items.dm b/code/modules/asset_cache/asset_list_items.dm index 3ee8ef5b616d..bcdd2f1a5206 100644 --- a/code/modules/asset_cache/asset_list_items.dm +++ b/code/modules/asset_cache/asset_list_items.dm @@ -117,13 +117,17 @@ /datum/asset/simple/paper keep_local_name = TRUE assets = list( - "wylogo.png" = 'html/images/wylogo.png', - "uscmlogo.png" = 'html/images/uscmlogo.png', - "upplogo.png" = 'html/images/upplogo.png', - "cmblogo.png" = 'html/images/cmblogo.png', - "faxwylogo.png" = 'html/images/faxwylogo.png', - "faxbackground.jpg" = 'html/images/faxbackground.jpg', - "colonialspacegruntsEZ.png" = 'html/images/colonialspacegruntsEZ.png', + "logo_wy.png" = 'paper_reference_files/logo_wy.png', + "logo_wy_inv.png" = 'paper_reference_files/logo_wy_inv.png', + "logo_uscm.png" = 'paper_reference_files/logo_uscm.png', + "logo_provost.png" = 'paper_reference_files/logo_provost.png', + "logo_upp.png" = 'paper_reference_files/logo_upp.png', + "logo_cmb.png" = 'paper_reference_files/logo_cmb.png', + "background_white.jpg" = 'paper_reference_files/background_white.jpg', + "background_dark.jpg" = 'paper_reference_files/background_dark.jpg', + "background_dark2.jpg" = 'paper_reference_files/background_dark2.jpg', + "background_dark_fractal.png" = 'paper_reference_files/background_dark_fractal.png', + "colonialspacegruntsEZ.png" = 'paper_reference_files/colonialspacegruntsEZ.png', ) /datum/asset/spritesheet/chat diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm index e3cb211311ba..ab41d3982438 100644 --- a/code/modules/client/client_procs.dm +++ b/code/modules/client/client_procs.dm @@ -885,6 +885,12 @@ GLOBAL_LIST_INIT(whitelisted_client_procs, list( if((flag_to_check & WHITELIST_JOE) && CLIENT_IS_STAFF(src)) return TRUE + if((flag_to_check & WHITELIST_FAX_RESPONDER) && CLIENT_IS_STAFF(src)) + return TRUE + + if((flag_to_check & WHITELIST_FAX_RESPONDER) && isCouncil(src)) + return TRUE + if(!player_data) load_player_data() if(!player_data) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 34135945d8fe..ba7172045493 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -690,6 +690,8 @@ GLOBAL_LIST_INIT(bgstate_options, list( if(!job) debug_log("Missing job for prefs: [role_name]") continue + if(job.flags_startup_parameters & ROLE_HIDDEN) + continue index++ if((index >= limit) || (job.title in splitJobs)) HTML += "" diff --git a/code/modules/client/preferences_gear.dm b/code/modules/client/preferences_gear.dm index 79fd34b2660c..4db75f8d2e3e 100644 --- a/code/modules/client/preferences_gear.dm +++ b/code/modules/client/preferences_gear.dm @@ -405,7 +405,7 @@ GLOBAL_LIST_EMPTY(gear_datums_by_name) /datum/gear/paperwork/pen_fountain display_name = "Pen, fountain" - path = /obj/item/tool/pen/fountain + path = /obj/item/tool/pen/multicolor/fountain cost = 3 /datum/gear/paperwork/paper diff --git a/code/modules/clothing/head/head.dm b/code/modules/clothing/head/head.dm index f9c8adbf9a77..b7c761cd85a5 100644 --- a/code/modules/clothing/head/head.dm +++ b/code/modules/clothing/head/head.dm @@ -278,7 +278,7 @@ /obj/item/prop/helmetgarb/lucky_feather/blue = "lucky_feather_blue", /obj/item/prop/helmetgarb/lucky_feather/purple = "lucky_feather_purple", /obj/item/prop/helmetgarb/lucky_feather/yellow = "lucky_feather_yellow", - /obj/item/tool/pen/fountain = "fountainpen", + /obj/item/tool/pen/multicolor/fountain = "fountainpen", ) var/storage_slots = 1 var/storage_slots_reserved_for_garb = 1 diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm index 140d73fd05a0..bdd5e81303dd 100644 --- a/code/modules/clothing/head/helmet.dm +++ b/code/modules/clothing/head/helmet.dm @@ -344,7 +344,7 @@ GLOBAL_LIST_INIT(allowed_helmet_items, list( /obj/item/prop/helmetgarb/riot_shield = "helmet_riot_shield", /obj/item/attachable/flashlight = HELMET_GARB_RELAY_ICON_STATE, /obj/item/prop/helmetgarb/chaplain_patch = "chaplain_patch", - /obj/item/tool/pen/fountain = "fountainpen", + /obj/item/tool/pen/multicolor/fountain = "fountainpen", // MEDICAL /obj/item/stack/medical/bruise_pack ="brutepack (bandages)", diff --git a/code/modules/gear_presets/fax_responders.dm b/code/modules/gear_presets/fax_responders.dm new file mode 100644 index 000000000000..7c1b00118f32 --- /dev/null +++ b/code/modules/gear_presets/fax_responders.dm @@ -0,0 +1,165 @@ +/datum/equipment_preset/fax_responder + name = "Fax Responder" + assignment = "Fax Responder" + rank = "Fax Responder" + + role_comm_title = "Resp." + + flags = EQUIPMENT_PRESET_EXTRA + faction = FACTION_NEUTRAL + + access = list(ACCESS_CIVILIAN_PUBLIC) + skills = /datum/skills/civilian/fax_responder + idtype = /obj/item/card/id/lanyard + + paygrades = list(PAY_SHORT_CIV = JOB_PLAYTIME_TIER_0) + + var/obj/item/device/radio/headset/headset_type = /obj/item/device/radio/headset + +/datum/equipment_preset/fax_responder/load_gear(mob/living/carbon/human/new_human) + new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel(new_human), WEAR_BACK) + new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/laceup(new_human), WEAR_FEET) + new_human.equip_to_slot_or_del(new headset_type(new_human), WEAR_L_EAR) + + +/datum/equipment_preset/fax_responder/load_id(mob/living/carbon/human/new_human, client/mob_client) + var/obj/item/clothing/under/uniform = new_human.w_uniform + if(istype(uniform)) + uniform.has_sensor = UNIFORM_HAS_SENSORS + uniform.sensor_faction = FACTION_NEUTRAL + return ..() + +//*****************************************************************************************************/ + +/datum/equipment_preset/fax_responder/uscm + name = "Fax Responder - USCM HC" + assignment = JOB_FAX_RESPONDER_USCM_HC + rank = JOB_FAX_RESPONDER_USCM_HC + + paygrades = list(PAY_SHORT_MO2 = JOB_PLAYTIME_TIER_0, PAY_SHORT_MO3 = JOB_PLAYTIME_TIER_1, PAY_SHORT_MO4 = JOB_PLAYTIME_TIER_3) + idtype = /obj/item/card/id/gold + skills = /datum/skills/XO + access = list(ACCESS_MARINE_COMMAND, ACCESS_MARINE_DROPSHIP, ACCESS_MARINE_DATABASE, ACCESS_MARINE_MEDBAY) + headset_type = /obj/item/device/radio/headset/almayer/highcom + idtype = /obj/item/card/id/gold + +/datum/equipment_preset/fax_responder/uscm/load_gear(mob/living/carbon/human/new_human) + new_human.equip_to_slot_or_del(new /obj/item/clothing/head/marine/dress_cover/officer(new_human), WEAR_HEAD) + new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/dress/blues/senior(new_human), WEAR_BODY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/jacket/marine/dress/blues/officer(new_human), WEAR_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/dress(new_human), WEAR_FEET) + new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/dress(new_human), WEAR_HANDS) + + new_human.equip_to_slot_or_del(new /obj/item/notepad/blue(new_human), WEAR_R_STORE) + . = ..() + +/datum/equipment_preset/fax_responder/uscm/provost + name = "Fax Responder - USCM Provost" + assignment = JOB_FAX_RESPONDER_USCM_PVST + rank = JOB_FAX_RESPONDER_USCM_PVST + idtype = /obj/item/card/id/provost + +/datum/equipment_preset/fax_responder/uscm/provost/load_gear(mob/living/carbon/human/new_human) + new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/mp/provost/chief(new_human), WEAR_BODY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine(new_human), WEAR_FEET) + new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/black(new_human), WEAR_HANDS) + new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/jacket/marine/provost/chief(new_human), WEAR_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/clothing/head/beret/marine/mp/provost/chief(new_human), WEAR_HEAD) + new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel/sec(new_human), WEAR_BACK) + new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses/sechud, WEAR_EYES) + + new_human.equip_to_slot_or_del(new /obj/item/notepad/red(new_human), WEAR_R_STORE) + . = ..() + +//*****************************************************************************************************/ + +/datum/equipment_preset/fax_responder/wey_yu + name = "Fax Responder - WY" + assignment = JOB_FAX_RESPONDER_WY + rank = JOB_FAX_RESPONDER_WY + paygrades = list(PAY_SHORT_WYC5 = JOB_PLAYTIME_TIER_0, PAY_SHORT_WYC6 = JOB_PLAYTIME_TIER_1, PAY_SHORT_WYC7 = JOB_PLAYTIME_TIER_3) + headset_type = /obj/item/device/radio/headset/distress/pmc/command + idtype = /obj/item/card/id/pmc + +/datum/equipment_preset/fax_responder/wey_yu/load_gear(mob/living/carbon/human/new_human) + new_human.equip_to_slot_or_del(new /obj/item/clothing/under/liaison_suit/blue(new_human), WEAR_BODY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/jacket/marine/corporate/blue(new_human), WEAR_JACKET) + + new_human.equip_to_slot_or_del(new /obj/item/notepad/black(new_human), WEAR_R_STORE) + + ..() + +//*****************************************************************************************************/ + +/datum/equipment_preset/fax_responder/upp + name = "Fax Responder - UPP" + assignment = JOB_FAX_RESPONDER_UPP + rank = JOB_FAX_RESPONDER_UPP + paygrades = list(PAY_SHORT_UO2 = JOB_PLAYTIME_TIER_0, PAY_SHORT_UO3 = JOB_PLAYTIME_TIER_1, PAY_SHORT_UO4 = JOB_PLAYTIME_TIER_3) + skills = /datum/skills/upp/kapitan + headset_type = /obj/item/device/radio/headset/distress/UPP/kdo/command + idtype = /obj/item/card/id/gold + +/datum/equipment_preset/fax_responder/upp/load_gear(mob/living/carbon/human/new_human) + new_human.equip_to_slot_or_del(new /obj/item/clothing/head/uppcap/beret, WEAR_HEAD) + new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/veteran/UPP/officer(new_human), WEAR_BODY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/faction/UPP/kapitan, WEAR_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/clothing/accessory/patch/upp, WEAR_ACCESSORY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/accessory/patch/upp/naval, WEAR_ACCESSORY) + + new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/upp, WEAR_FEET) + new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/veteran, WEAR_HANDS) + + new_human.equip_to_slot_or_del(new /obj/item/notepad/green(new_human), WEAR_R_STORE) + + +//*****************************************************************************************************/ + +/datum/equipment_preset/fax_responder/twe + name = "Fax Responder - TWE" + assignment = JOB_FAX_RESPONDER_TWE + rank = JOB_FAX_RESPONDER_TWE + headset_type = /obj/item/device/radio/headset/distress/royal_marine + idtype = /obj/item/card/id/gold + paygrades = list(PAY_SHORT_RNO2 = JOB_PLAYTIME_TIER_0, PAY_SHORT_RNO3 = JOB_PLAYTIME_TIER_1, PAY_SHORT_RNO4 = JOB_PLAYTIME_TIER_3) + +/datum/equipment_preset/fax_responder/twe/load_gear(mob/living/carbon/human/new_human) + new_human.equip_to_slot_or_del(new /obj/item/clothing/under/twe_suit(new_human), WEAR_BODY) + + new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/laceup(new_human), WEAR_FEET) + new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/white(new_human), WEAR_HANDS) + + new_human.equip_to_slot_or_del(new /obj/item/notepad/blue(new_human), WEAR_R_STORE) + +//*****************************************************************************************************/ + +/datum/equipment_preset/fax_responder/clf + name = "Fax Responder - CLF" + assignment = JOB_FAX_RESPONDER_CLF + rank = JOB_FAX_RESPONDER_CLF + headset_type = /obj/item/device/radio/headset/distress/CLF/command + paygrades = list(PAY_SHORT_REBC = JOB_PLAYTIME_TIER_0) + +/datum/equipment_preset/fax_responder/clf/load_gear(mob/living/carbon/human/new_human) + new_human.equip_to_slot_or_del(new /obj/item/clothing/under/colonist/clf(new_human), WEAR_BODY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/black(new_human), WEAR_HANDS) + new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/upp(new_human), WEAR_FEET) + +//*****************************************************************************************************/ + +/datum/equipment_preset/fax_responder/cmb + name = "Fax Responder - CMB" + assignment = JOB_FAX_RESPONDER_CMB + rank = JOB_FAX_RESPONDER_CMB + headset_type = /obj/item/device/radio/headset/distress/CMB + idtype = /obj/item/card/id/marshal + paygrades = list(PAY_SHORT_CMBM = JOB_PLAYTIME_TIER_0) + +/datum/equipment_preset/fax_responder/cmb/load_gear(mob/living/carbon/human/new_human) + new_human.equip_to_slot_or_del(new /obj/item/clothing/under/CM_uniform, WEAR_BODY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/accessory/holobadge/cord, WEAR_ACCESSORY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/CMB/marshal, WEAR_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/veteran, WEAR_HANDS) + new_human.equip_to_slot_or_del(new /obj/item/clothing/head/CMB, WEAR_HEAD) + new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/veteran/pmc, WEAR_FEET) + new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses/sechud, WEAR_EYES) diff --git a/code/modules/gear_presets/survivors/misc.dm b/code/modules/gear_presets/survivors/misc.dm index 1a24ca5d58b9..120ecd8ddbea 100644 --- a/code/modules/gear_presets/survivors/misc.dm +++ b/code/modules/gear_presets/survivors/misc.dm @@ -285,7 +285,7 @@ Everything below isn't used or out of place. new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/survival/full(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/notepad(new_human), WEAR_IN_R_STORE) - new_human.equip_to_slot_or_del(new /obj/item/tool/pen/fountain(new_human), WEAR_IN_R_STORE) + new_human.equip_to_slot_or_del(new /obj/item/tool/pen/multicolor/fountain(new_human), WEAR_IN_R_STORE) new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel(new_human), WEAR_BACK) new_human.equip_to_slot_or_del(new /obj/item/stack/sheet/metal/med_small_stack(new_human), WEAR_IN_BACK) new_human.equip_to_slot_or_del(new /obj/item/storage/belt/gun/m4a3/m1911(new_human), WEAR_WAIST) diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index 7f52beac6073..58d9d4e2fa7b 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -1129,6 +1129,20 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp if(SSticker.mode.check_joe_late_join(src)) SSticker.mode.attempt_to_join_as_joe(src) +/mob/dead/verb/join_as_responder() + set category = "Ghost.Join" + set name = "Join as a Fax Responder" + set desc = "If you are whitelisted, you'll be able to join in." + + if (!client) + return + + if(SSticker.current_state < GAME_STATE_PLAYING || !SSticker.mode) + to_chat(src, SPAN_WARNING("The game hasn't started yet!")) + return + + if(SSticker.mode.check_fax_responder_late_join(src)) + SSticker.mode.attempt_to_join_as_fax_responder(src) /mob/dead/verb/drop_vote() set category = "Ghost" diff --git a/code/modules/mob/dead/observer/orbit.dm b/code/modules/mob/dead/observer/orbit.dm index 8c8d653331c9..0a7e4dfeac20 100644 --- a/code/modules/mob/dead/observer/orbit.dm +++ b/code/modules/mob/dead/observer/orbit.dm @@ -49,6 +49,7 @@ var/list/data = list() var/list/humans = list() + var/list/responders = list() var/list/marines = list() var/list/survivors = list() var/list/xenos = list() @@ -174,6 +175,8 @@ marines += list(serialized) else if(issurvivorjob(human.job)) survivors += list(serialized) + else if(human.job in FAX_RESPONDER_JOB_LIST) + responders += list(serialized) else humans += list(serialized) continue @@ -189,6 +192,7 @@ data["clf"] = clf data["wy"] = wy data["twe"] = twe + data["responders"] = responders data["freelancer"] = freelancer data["contractor"] = contractor data["mercenary"] = mercenary diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index 829379eb28b6..a410f277eead 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -57,7 +57,8 @@ output += "

Join the USCM!

" output += "

Join the Hive!

" if(SSticker.mode.flags_round_type & MODE_PREDATOR) - if(SSticker.mode.check_predator_late_join(src,0)) output += "

Join the Hunt!

" + if(SSticker.mode.check_predator_late_join(src, FALSE)) output += "

Join the Hunt!

" + if(SSticker.mode.check_fax_responder_late_join(src, FALSE)) output += "

Respond to Faxes

" output += "

Observe

" @@ -188,13 +189,27 @@ return if(alert(src,"Are you sure you want to attempt joining as a predator?","Confirmation","Yes","No") == "Yes" ) - if(SSticker.mode.check_predator_late_join(src,0)) + if(SSticker.mode.check_predator_late_join(src, FALSE)) close_spawn_windows() SSticker.mode.attempt_to_join_as_predator(src) else to_chat(src, SPAN_WARNING("You are no longer able to join as predator.")) new_player_panel() + if("late_join_faxes") + if(SSticker.current_state != GAME_STATE_PLAYING || !SSticker.mode) + to_chat(src, SPAN_WARNING("The round is either not ready, or has already finished...")) + return + + if(alert(src,"Are you sure you want to attempt joining as a Fax Responder?","Confirmation","Yes","No") == "Yes" ) + if(SSticker.mode.check_fax_responder_late_join(src, FALSE)) + close_spawn_windows() + SSticker.mode.attempt_to_join_as_fax_responder(src, TRUE) + else + to_chat(src, SPAN_WARNING("You are no longer able to join as a Fax Responder.")) + new_player_panel() + + if("manifest") ViewManifest() diff --git a/code/modules/paperwork/carbonpaper.dm b/code/modules/paperwork/carbonpaper.dm index 4ddefff61eb8..0ebd80d4a83d 100644 --- a/code/modules/paperwork/carbonpaper.dm +++ b/code/modules/paperwork/carbonpaper.dm @@ -2,9 +2,8 @@ name = "paper" icon_state = "paper_stack" item_state = "paper" - var/copied = 0 - var/iscopy = 0 - + var/copied = FALSE + var/iscopy = FALSE /obj/item/paper/carbon/update_icon() if(iscopy) @@ -23,8 +22,6 @@ return icon_state = "paper_stack" - - /obj/item/paper/carbon/verb/removecopy() set name = "Remove carbon-copy" set category = "Object" @@ -42,9 +39,57 @@ copy.fields = c.fields copy.updateinfolinks() to_chat(usr, SPAN_NOTICE("You tear off the carbon-copy!")) - c.copied = 1 - copy.iscopy = 1 + c.copied = TRUE + copy.iscopy = TRUE copy.update_icon() c.update_icon() else to_chat(usr, "There are no more carbon copies attached to this paper!") + +/obj/item/paper/prefab/carbon + name = "paper" + icon_state = "paper_stack" + item_state = "paper" + var/copied = FALSE + var/iscopy = FALSE + +/obj/item/paper/prefab/carbon/update_icon() + if(iscopy) + if(info) + icon_state = "cpaper_words" + return + icon_state = "cpaper" + else if (copied) + if(info) + icon_state = "paper_words" + return + icon_state = "paper" + else + if(info) + icon_state = "paper_stack_words" + return + icon_state = "paper_stack" + +/obj/item/paper/prefab/carbon/verb/removecopy() + set name = "Remove carbon-copy" + set category = "Object" + set src in usr + + if (!copied && !iscopy) + var/obj/item/paper/prefab/carbon/this_doc = src + var/copycontents = html_decode(this_doc.info) + var/obj/item/paper/carbon/copy = new /obj/item/paper/carbon (usr.loc) + copycontents = replacetext(copycontents, "" + copy.name = "Copy - " + this_doc.name + copy.fields = this_doc.fields + copy.updateinfolinks() + to_chat(usr, SPAN_NOTICE("You tear off the carbon-copy!")) + this_doc.copied = TRUE + copy.iscopy = TRUE + copy.update_icon() + this_doc.update_icon() + else + to_chat(usr, "There are no more carbon copies attached to this paper!") diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index e1610fb3401a..e5dbd52f76ce 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -40,6 +40,14 @@ var/signfont = "Times New Roman" var/crayonfont = "Comic Sans MS" + /// If this paper imports a prefab on instance. + var/is_prefab = FALSE + /// Category of the paper. + var/document_category + /// Name of the document. + var/document_title + var/datum/prefab_document/doc_datum_type + //lipstick wiping is in code/game/obj/items/weapons/cosmetics.dm! /obj/item/paper/Initialize(mapload, photo_list) @@ -54,6 +62,8 @@ update_icon() updateinfolinks() + if(is_prefab) + compile_paper() /obj/item/paper/update_icon() if(icon_state == "paper_talisman" || icon_state == "paper_wy_words" || icon_state == "paper_uscm" || icon_state == "fortune" || icon_state == "paper_flag") @@ -208,82 +218,88 @@ update_icon() -/obj/item/paper/proc/parsepencode(t, obj/item/tool/pen/P, mob/user as mob, iscrayon = 0) +/obj/item/paper/proc/parsepencode(paper_text, obj/item/tool/pen/P, mob/user as mob, iscrayon = 0) var/datum/asset/asset = get_asset_datum(/datum/asset/simple/paper) - t = replacetext(t, "\[center\]", "
") - t = replacetext(t, "\[/center\]", "
") - t = replacetext(t, "\[br\]", "
") - t = replacetext(t, "\[b\]", "") - t = replacetext(t, "\[/b\]", "") - t = replacetext(t, "\[i\]", "") - t = replacetext(t, "\[/i\]", "") - t = replacetext(t, "\[u\]", "") - t = replacetext(t, "\[/u\]", "") - t = replacetext(t, "\[large\]", "") - t = replacetext(t, "\[/large\]", "") - t = replacetext(t, "\[sign\]", "[user ? user.real_name : "Anonymous"]") - t = replacetext(t, "\[date\]", "[time2text(REALTIMEOFDAY, "Day DD Month [GLOB.game_year]")]") - t = replacetext(t, "\[shortdate\]", "[time2text(REALTIMEOFDAY, "DD/MM/[GLOB.game_year]")]") - t = replacetext(t, "\[time\]", "[worldtime2text("hh:mm")]") - t = replacetext(t, "\[date+time\]", "[worldtime2text("hh:mm")], [time2text(REALTIMEOFDAY, "Day DD Month [GLOB.game_year]")]") - t = replacetext(t, "\[field\]", "") - - t = replacetext(t, "\[h1\]", "

") - t = replacetext(t, "\[/h1\]", "

") - t = replacetext(t, "\[h2\]", "

") - t = replacetext(t, "\[/h2\]", "

") - t = replacetext(t, "\[h3\]", "

") - t = replacetext(t, "\[/h3\]", "

") + paper_text = replacetext(paper_text, "\[center\]", "
") + paper_text = replacetext(paper_text, "\[/center\]", "
") + paper_text = replacetext(paper_text, "\[br\]", "
") + paper_text = replacetext(paper_text, "\[b\]", "") + paper_text = replacetext(paper_text, "\[/b\]", "") + paper_text = replacetext(paper_text, "\[i\]", "") + paper_text = replacetext(paper_text, "\[/i\]", "") + paper_text = replacetext(paper_text, "\[u\]", "") + paper_text = replacetext(paper_text, "\[/u\]", "") + paper_text = replacetext(paper_text, "\[large\]", "") + paper_text = replacetext(paper_text, "\[/large\]", "") + paper_text = replacetext(paper_text, "\[sign\]", "[user ? user.real_name : "Anonymous"]") + paper_text = replacetext(paper_text, "\[date\]", "[time2text(REALTIMEOFDAY, "Day DD Month [GLOB.game_year]")]") + paper_text = replacetext(paper_text, "\[shortdate\]", "[time2text(REALTIMEOFDAY, "DD/MM/[GLOB.game_year]")]") + paper_text = replacetext(paper_text, "\[time\]", "[worldtime2text("hh:mm")]") + paper_text = replacetext(paper_text, "\[date+time\]", "[worldtime2text("hh:mm")], [time2text(REALTIMEOFDAY, "Day DD Month [GLOB.game_year]")]") + paper_text = replacetext(paper_text, "\[field\]", "") + + paper_text = replacetext(paper_text, "\[h1\]", "

") + paper_text = replacetext(paper_text, "\[/h1\]", "

") + paper_text = replacetext(paper_text, "\[h2\]", "

") + paper_text = replacetext(paper_text, "\[/h2\]", "

") + paper_text = replacetext(paper_text, "\[h3\]", "

") + paper_text = replacetext(paper_text, "\[/h3\]", "

") if(!iscrayon) - t = replacetext(t, "\[*\]", "
  • ") - t = replacetext(t, "\[hr\]", "
    ") - t = replacetext(t, "\[small\]", "") - t = replacetext(t, "\[/small\]", "") - t = replacetext(t, "\[list\]", "
      ") - t = replacetext(t, "\[/list\]", "
    ") - t = replacetext(t, "\[table\]", "
  • ") - t = replacetext(t, "\[/table\]", "
    ") - t = replacetext(t, "\[grid\]", "") - t = replacetext(t, "\[/grid\]", "
    ") - t = replacetext(t, "\[row\]", "") - t = replacetext(t, "\[cell\]", "") - t = replacetext(t, "\[logo\]", "") - t = replacetext(t, "\[wy\]", "") - t = replacetext(t, "\[uscm\]", "") - t = replacetext(t, "\[upp\]", "") - t = replacetext(t, "\[cmb\]", "") - - t = "[t]" + paper_text = replacetext(paper_text, "\[*\]", "
  • ") + paper_text = replacetext(paper_text, "\[hr\]", "
    ") + paper_text = replacetext(paper_text, "\[small\]", "") + paper_text = replacetext(paper_text, "\[/small\]", "") + paper_text = replacetext(paper_text, "\[list\]", "
      ") + paper_text = replacetext(paper_text, "\[/list\]", "
    ") + paper_text = replacetext(paper_text, "\[table\]", "") + paper_text = replacetext(paper_text, "\[/table\]", "
    ") + paper_text = replacetext(paper_text, "\[grid\]", "") + paper_text = replacetext(paper_text, "\[/grid\]", "
    ") + paper_text = replacetext(paper_text, "\[row\]", "") + paper_text = replacetext(paper_text, "\[cell\]", "") + paper_text = replacetext(paper_text, "\[wy\]", "") + paper_text = replacetext(paper_text, "\[wy_inv\]", "") + paper_text = replacetext(paper_text, "\[uscm\]", "") + paper_text = replacetext(paper_text, "\[upp\]", "") + paper_text = replacetext(paper_text, "\[cmb\]", "") + + paper_text = "[paper_text]" else // If it is a crayon, and he still tries to use these, make them empty! - t = replacetext(t, "\[*\]", "") - t = replacetext(t, "\[hr\]", "") - t = replacetext(t, "\[small\]", "") - t = replacetext(t, "\[/small\]", "") - t = replacetext(t, "\[list\]", "") - t = replacetext(t, "\[/list\]", "") - t = replacetext(t, "\[table\]", "") - t = replacetext(t, "\[/table\]", "") - t = replacetext(t, "\[row\]", "") - t = replacetext(t, "\[cell\]", "") - t = replacetext(t, "\[logo\]", "") - - t = "[t]" - -// t = replacetext(t, "#", "") // Junk converted to nothing! - -//Count the fields + paper_text = replacetext(paper_text, "\[*\]", "") + paper_text = replacetext(paper_text, "\[hr\]", "") + paper_text = replacetext(paper_text, "\[small\]", "") + paper_text = replacetext(paper_text, "\[/small\]", "") + paper_text = replacetext(paper_text, "\[list\]", "") + paper_text = replacetext(paper_text, "\[/list\]", "") + paper_text = replacetext(paper_text, "\[table\]", "") + paper_text = replacetext(paper_text, "\[/table\]", "") + paper_text = replacetext(paper_text, "\[row\]", "") + paper_text = replacetext(paper_text, "\[cell\]", "") + paper_text = replacetext(paper_text, "\[wy\]", "") + paper_text = replacetext(paper_text, "\[wy_inv\]", "") + paper_text = replacetext(paper_text, "\[uscm\]", "") + paper_text = replacetext(paper_text, "\[upp\]", "") + paper_text = replacetext(paper_text, "\[cmb\]", "") + + paper_text = "[paper_text]" + + + //Count the fields + calculate_fields(paper_text) + return paper_text + +/obj/item/paper/proc/calculate_fields(message) + var/check_text = message ? message : info var/laststart = 1 while(1) - var/i = findtext(t, "", laststart) + var/i = findtext(check_text, "", laststart) if(i==0) break laststart = i+1 fields = min(fields+1, MAX_FIELDS) //NOTE: The max here will include the auto-created field when hitting a paper with a pen. So it should be [your_desired_number]+1. - return t - /obj/item/paper/proc/openhelp(mob/user as mob) var/dat = {" @@ -334,6 +350,33 @@ else to_chat(user, SPAN_DANGER("You must hold \the [P] steady to burn \the [src].")) +/obj/item/paper/verb/seal_paper() + set name = "Seal paper" + set category = "Object" + set src in usr + + var/confirm = alert(usr, "Are you sure you wish to seal this document?\n\nNote: This will prevent the edit of any fields on the paper,\nexcluding the end of the page.", "Confirm", "Yes", "No") + if(confirm != "Yes") + return FALSE + info = replacetext(info, "", "
    ") + calculate_fields() + updateinfolinks() + return TRUE + +/obj/item/paper/proc/compile_paper() + if(!is_prefab) + return FALSE + if(!document_category || !doc_datum_type) + return FALSE + + var/datum/prefab_document/prefab = new doc_datum_type + info = prefab.contents + qdel(prefab) + + calculate_fields() + updateinfolinks() + update_icon() + return TRUE /obj/item/paper/Topic(href, href_list) ..() @@ -605,7 +648,7 @@ . = ..() var/datum/asset/asset = get_asset_datum(/datum/asset/simple/paper) - info = "

    Union Of Progressive People's Fourth Fleet
    Orders For 173rd Airborne Reconnaissance: 2nd Platoon
    No.52

    Order of Military Officer of the UPP
    Kolonel Ganbaatar
    Commander of MV-35
    Date: 2182
    On Special Mission
    The actions of the hostile Weyland-Yutani corporation on the fringes of the Neroid sector have grown increasingly intolerable. However, evidence suggesting they are researching into the creation and deployment of some form of biological weapons program represent an unacceptable risk to the security of UPP interests in this sector. The risk of these items falling into UA/USCM hands is unacceptable.

    Orders for the Boris squad of the 173rd Airborne Recon are as follows. Initiate airborne reconnaissance of WY colony Oxley's Buttle, Trijent Dam, location on planet Raijin (UA Code: LV-670). Ascertain veracity of onsight biological weapons program. If positive confirmation of the weapons program is identified, authorization for rapid assault and recovery is granted. Avoid all contact with UA/USCM military forces, abort missions if UA/USCM forces are encountered.
    Authorizing Officer: Gaanbatar
    Name and Rank: Kolonel

    FOR SANCTIONED USE ONLY" + info = "

    Union Of Progressive People's Fourth Fleet
    Orders For 173rd Airborne Reconnaissance: 2nd Platoon
    No.52

    Order of Military Officer of the UPP
    Kolonel Ganbaatar
    Commander of MV-35
    Date: 2182
    On Special Mission
    The actions of the hostile Weyland-Yutani corporation on the fringes of the Neroid sector have grown increasingly intolerable. However, evidence suggesting they are researching into the creation and deployment of some form of biological weapons program represent an unacceptable risk to the security of UPP interests in this sector. The risk of these items falling into UA/USCM hands is unacceptable.

    Orders for the Boris squad of the 173rd Airborne Recon are as follows. Initiate airborne reconnaissance of WY colony Oxley's Buttle, Trijent Dam, location on planet Raijin (UA Code: LV-670). Ascertain veracity of onsight biological weapons program. If positive confirmation of the weapons program is identified, authorization for rapid assault and recovery is granted. Avoid all contact with UA/USCM military forces, abort missions if UA/USCM forces are encountered.
    Authorizing Officer: Gaanbatar
    Name and Rank: Kolonel

    FOR SANCTIONED USE ONLY" /obj/item/paper/crumpled name = "paper scrap" @@ -627,7 +670,7 @@ . = ..() var/datum/asset/asset = get_asset_datum(/datum/asset/simple/paper) - info = "

    \n" + info = "

    \n" /obj/item/paper/uscm icon_state = "paper_uscm" @@ -636,7 +679,7 @@ . = ..() var/datum/asset/asset = get_asset_datum(/datum/asset/simple/paper) - info = "

    \n" + info = "

    \n" /obj/item/paper/research_notes icon_state = "paper_wy_words" @@ -675,7 +718,7 @@ random_chem = pick(GLOB.chemical_gen_classes_list["T1"]) C = GLOB.chemical_reagents_list["[random_chem]"] var/datum/asset/asset = get_asset_datum(/datum/asset/simple/paper) - var/txt = "

    Official Weyland-Yutani Document
    Experiment Notes

    " + var/txt = "

    Official Weyland-Yutani Document
    Experiment Notes

    " switch(note_type) if("synthesis") var/datum/chemical_reaction/G = GLOB.chemical_reactions_list[C.id] diff --git a/code/modules/paperwork/prefab_papers.dm b/code/modules/paperwork/prefab_papers.dm new file mode 100644 index 000000000000..ea3c69156673 --- /dev/null +++ b/code/modules/paperwork/prefab_papers.dm @@ -0,0 +1,175 @@ +/datum/prefab_document + var/contents + +GLOBAL_REFERENCE_LIST_INDEXED(prefab_papers, /obj/item/paper/prefab, document_title) +/obj/structure/filingcabinet/documentation + name = "documents cabinet" + color = "#e78738" + + /// The categories available from this cabinet. Manually populated. + var/list/available_categories = list() + /// The possible options that can be withdrawn. Automatically populated by get_possible_documents(). + var/list/available_documents = list() + /// Number of prefab documents that can be withdrawn. Cap intended to prevent people spamming infinite copies. + var/remaining_documents = 30 + +/obj/structure/filingcabinet/documentation/Initialize() + . = ..() + get_possible_documents() + +/obj/structure/filingcabinet/documentation/proc/get_possible_documents() + available_documents.Cut() + for(var/docname in GLOB.prefab_papers) + var/obj/item/paper/prefab/document = GLOB.prefab_papers[docname] + if(!istype(document)) + continue + log_debug("DOCUMENT: Checking [document]") + if(!document.is_prefab || !document.doc_datum_type || (document.name == "paper")) + log_debug("DOCUMENT: Prefab, Name or Ref fail.") + continue + if(!document.document_category || !(document.document_category in available_categories)) + log_debug("DOCUMENT: Category fail.") + continue + available_documents += docname + return + +/obj/structure/filingcabinet/documentation/attack_hand(mob/user as mob) + var/choice = tgui_alert(user, "Do you wish to open the cabinet, or retrieve a document template?", "Action", list("Open", "Document"), 20 SECONDS) + switch(choice) + if("Open") + if(contents.len <= 0) + to_chat(user, SPAN_NOTICE("\The [src] is empty.")) + return + + user.set_interaction(src) + var/dat = "
    " + for(var/obj/item/P in src) + dat += "" + dat += "
    [P.name]
    " + show_browser(user, dat, name, "filingcabinet", "size=350x300") + return + if("Document") + if(!remaining_documents) + to_chat(user, SPAN_WARNING("[src] has no remaining official forms!")) + return + give_document(user) + return + +/obj/structure/filingcabinet/documentation/proc/give_document(mob/user as mob) + if(!remaining_documents) + to_chat(user, SPAN_WARNING("[src] has no remaining official forms!")) + return FALSE + for(var/paper in available_documents) + log_debug("Document: [paper]") + var/chosen = tgui_input_list(usr, "What document do you need?", "Choose Document", available_documents) + var/selected = GLOB.prefab_papers[chosen].type + var/obj/item/paper/prefab/document = new selected + document.forceMove(user.loc) + user.put_in_hands(document) + to_chat(user, SPAN_NOTICE("You take [document] out of [src].")) + remaining_documents-- + return TRUE + +/obj/structure/filingcabinet/documentation/military_police + available_categories = list(PAPER_CATEGORY_MP) + +/obj/structure/filingcabinet/documentation/liaison + available_categories = list(PAPER_CATEGORY_LIAISON) + remaining_documents = 45 //CL likely using more of these than most people. + +/obj/structure/filingcabinet/documentation/highcom + remaining_documents = 60 + +/obj/structure/filingcabinet/documentation/highcom/wy + available_categories = list(PAPER_CATEGORY_WEYYU) + +/obj/structure/filingcabinet/documentation/highcom/uscm + available_categories = list(PAPER_CATEGORY_USCM_HC) + +/obj/structure/filingcabinet/documentation/highcom/provost + available_categories = list(PAPER_CATEGORY_PROVOST) + + +//######################################## +//######################################## +//######################################## +/obj/item/paper/prefab + is_prefab = TRUE + document_title = "BLANK" + +/obj/item/paper/prefab/Initialize() + . = ..() + name = document_title + +/obj/item/paper/prefab/carbon/military_police + name = "Blank MP Document" + document_category = PAPER_CATEGORY_MP + +/obj/item/paper/prefab/carbon/military_police/appeal_form + document_title = "PR301a - Appeals Form" + doc_datum_type = /datum/prefab_document/provost/mp/appeal_form + +/obj/item/paper/prefab/carbon/military_police/dao_request + document_title = "PR301b - Delayed Action Order" + doc_datum_type = /datum/prefab_document/provost/mp/dao_request + +/obj/item/paper/prefab/carbon/military_police/confiscation_receipt + document_title = "PR356 - Confiscation Receipt" + doc_datum_type = /datum/prefab_document/provost/mp/confiscation_receipt + +/obj/item/paper/prefab/carbon/military_police/apology_notice + document_title = "NJ910 - Apology Notice" + doc_datum_type = /datum/prefab_document/provost/mp/apology_notice + +/obj/item/paper/prefab/provost + name = "Blank Provost Document" + document_category = PAPER_CATEGORY_PROVOST + +/obj/item/paper/prefab/provost/standard + document_title = "PR201 - Provost Missive" + doc_datum_type = /datum/prefab_document/provost/highcom/standard + +/obj/item/paper/prefab/provost/dao_response + document_title = "PR301c - Delayed Action Order" + doc_datum_type = /datum/prefab_document/provost/highcom/dao_response + +/obj/item/paper/prefab/uscm_highcom + name = "Blank USCMHC Document" + document_category = PAPER_CATEGORY_USCM_HC + +/obj/item/paper/prefab/uscm_highcom/standard + document_title = "UAM422 - USCM High Command Missive" + doc_datum_type = /datum/prefab_document/uscm/highcom/standard + +/obj/item/paper/prefab/liaison + name = "Blank WY Document" + document_category = PAPER_CATEGORY_LIAISON + +/obj/item/paper/prefab/liaison/ops_report + document_title = "WY435 - Liaison Operations Report" + doc_datum_type = /datum/prefab_document/wey_yu/liaison/ops_report + +/obj/item/paper/prefab/liaison/preserve_intent + document_title = "WY439 - Affidavit of Intent to Preserve" + doc_datum_type = /datum/prefab_document/wey_yu/liaison/preserve_intent + +/obj/item/paper/prefab/liaison/liability + document_title = "WY440 - Affidavit of Liability" + doc_datum_type = /datum/prefab_document/wey_yu/liaison/liability + +/obj/item/paper/prefab/liaison/nda_short + document_title = "WY441 - Confidentiality Agreement" + doc_datum_type = /datum/prefab_document/wey_yu/liaison/nda_short + +/obj/item/paper/prefab/liaison/nda_long + document_title = "WY442 - Non Disclosure Agreement" + doc_datum_type = /datum/prefab_document/wey_yu/liaison/nda_long + + +/obj/item/paper/prefab/wey_yu + name = "Blank WYC Document" + document_category = PAPER_CATEGORY_WEYYU + +/obj/item/paper/prefab/wey_yu/standard + document_title = "WY101 - Directorate Communication" + doc_datum_type = /datum/prefab_document/wey_yu/highcom/standard diff --git a/code/modules/paperwork/prefab_papers/provost/high_command/dao_response.dm b/code/modules/paperwork/prefab_papers/provost/high_command/dao_response.dm new file mode 100644 index 000000000000..da5754cb1a0f --- /dev/null +++ b/code/modules/paperwork/prefab_papers/provost/high_command/dao_response.dm @@ -0,0 +1,142 @@ +/datum/prefab_document/provost/highcom/dao_response/New() + var/datum/asset/asset = get_asset_datum(/datum/asset/simple/paper) + var/dat = "" + + dat += "" + dat += "" + dat += "" + dat += "
    " + dat += "
    " + dat += "\"Provost" + dat += "
    " + dat += "" + dat += "" + dat += "
    " + dat += "
    " + dat += "

    Delayed Action Order

    " + dat += "

    PR301c

    " + dat += "
    " + dat += "
    " + dat += "" + dat += "" + dat += "
    " + dat += "

    DAO Request Decision


    " + dat += "Appeal Reference Number:
    " + dat += "Determinant Officer:
    " + dat += "Reason of Response:


    " + dat += "Notes or Comments:


    " + dat += "Determinant Signature:
    " + dat += "
    " + dat += "
    " + dat += "
    " + dat += "

    PR301b Function

    " + dat += "

    " + dat += "A PR301b Delayed Action Order (DAO) allows Military Police to reprosecute a defendant for charges they are previously released from due to the inability to adhere to the required timeframes.
    " + dat += "Request of a DAO requires the defendant be released from detainment, the 'PR301b Requested' section on the related PR301a form completed, and this form sent by fax to the Provost Office.
    " + dat += "Upon receipt of a response containing the Provost Office's decision the related PR301a form must be updated to indicate the answer. Should a DAO be approved the defendant must be presented with the response from the Provost Office upon, or prior to, being detained." + dat += "

    " + dat += "
    " + dat += "
    " + dat += "" + + + + + contents = dat diff --git a/code/modules/paperwork/prefab_papers/provost/high_command/standard.dm b/code/modules/paperwork/prefab_papers/provost/high_command/standard.dm new file mode 100644 index 000000000000..5652b3d2104e --- /dev/null +++ b/code/modules/paperwork/prefab_papers/provost/high_command/standard.dm @@ -0,0 +1,141 @@ +/datum/prefab_document/provost/highcom/standard/New() + var/datum/asset/asset = get_asset_datum(/datum/asset/simple/paper) + var/dat = "" + + dat += "" + dat += "" + dat += "" + dat += "
    " + dat += "
    " + dat += "\"Provost" + dat += "
    " + dat += "" + dat += "" + dat += "
    " + dat += "
    " + dat += "

    Provost Office Missive

    " + dat += "

    PR211

    " + dat += "
    " + dat += "
    " + dat += "" + dat += "" + dat += "
    " + dat += "

    Authorized Personnel Only


    " + dat += "Index:
    " + dat += "Subject:
    " + dat += "


    " + dat += "Signature:
    " + dat += "
    " + dat += "
    " + dat += "
    " + dat += "

    Disclaimer

    " + dat += "

    " + dat += "This message and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed.
    " + dat += "If you are not the aforementioned addressee you should not disseminate, distribute or copy this missive.
    " + dat += "If you are not the intended recipient, you are notified that disclosing, copying, distributing or taking any action in reliance on the contents of this information is strictly prohibited.
    " + dat += "

    " + dat += "
    " + dat += "
    " + dat += "" + + + + + contents = dat diff --git a/code/modules/paperwork/prefab_papers/provost/military_police/apology_notice.dm b/code/modules/paperwork/prefab_papers/provost/military_police/apology_notice.dm new file mode 100644 index 000000000000..82eb49e96f27 --- /dev/null +++ b/code/modules/paperwork/prefab_papers/provost/military_police/apology_notice.dm @@ -0,0 +1,124 @@ +/datum/prefab_document/provost/mp/apology_notice/New() + var/datum/asset/asset = get_asset_datum(/datum/asset/simple/paper) + var/dat = "" + + dat += "" + dat += "" + dat += "" + dat += "
    " + dat += "
    " + dat += "\"Provost" + dat += "
    " + dat += "" + dat += "" + dat += "
    " + dat += "
    " + dat += "

    Notice of Formal Apology

    " + dat += "

    NJ910

    " + dat += "
    " + dat += "
    " + dat += "" + dat += "" + dat += "
    " + dat += "To: " + dat += "
    " + dat += "From: " + dat += "


    " + dat += "

    Statement

    " + dat += "" + dat += "

    " + dat += "Sincerely,
    " + dat += "" + dat += "" + dat += "" + dat += "
    " + dat += "" + dat += "
    " + dat += "" + + + + + contents = dat diff --git a/code/modules/paperwork/prefab_papers/provost/military_police/appeal_form.dm b/code/modules/paperwork/prefab_papers/provost/military_police/appeal_form.dm new file mode 100644 index 000000000000..33a97400d0d8 --- /dev/null +++ b/code/modules/paperwork/prefab_papers/provost/military_police/appeal_form.dm @@ -0,0 +1,180 @@ +/datum/prefab_document/provost/mp/appeal_form/New() + var/datum/asset/asset = get_asset_datum(/datum/asset/simple/paper) + var/dat = "" + + dat += "" + dat += "" + dat += "" + dat += "
    " + dat += "
    " + dat += "\"Provost" + dat += "
    " + dat += "" + dat += "" + dat += "
    " + dat += "
    " + dat += "

    Appeals Form

    " + dat += "

    PR301a

    " + dat += "
    " + dat += "
    " + dat += "" + dat += "" + dat += "
    " + dat += "

    To be completed by Handler


    " + dat += "Handler Name:
    " + dat += "Appeal Decision:


    " + dat += "Notes or Comments:


    " + dat += "Handler Signature:
    " + dat += "
    " + dat += "

    Provost Decision


    " + dat += "

    " + dat += "For a Provost resolution please send this document by fax to the Provost Office.
    " + dat += "Provost Contacted?:
    " + dat += "Provost Response:
    " + dat += "

    " + dat += "
    " + dat += "

    To be completed by Military Police


    " + dat += "Appeal Reference Number: [generate_appeal_ref()]
    " + dat += "Arresting Officer:
    " + dat += "Department Representative:
    " + dat += "Testimonial:


    " + dat += "Notes or Comments:


    " + dat += "Representative Signature:
    " + dat += "
    " + dat += "

    PR301b Delayed Action Order


    " + dat += "

    " + dat += "PR301b Requested?:
    " + dat += "PR301b Response:
    " + dat += "

    " + dat += "
    " + dat += "

    To be completed by Defendant


    " + dat += "Defendant Name:
    " + dat += "Requested Handler:
    " + dat += "Testimonial:



    " + dat += "Notes or Comments:


    " + dat += "Defendant Signature:
    " + dat += "
    " + dat += "
    " + dat += "
    " + dat += "

    Right to Appeal

    " + dat += "

    Anyone under the jurisdiction of Marine Law has the right to appeal their punishment to their choice of the Chief of Military Police (CMP) or the Commander, the requested handler may designate another valid party to handle it in their place. Should either be involved in the arrest of the defendant they must designate another valid party.

    " + dat += "

    Valid parties are any Military Police personnel, or Commissioned Officer, who are not directly involved in the charging, arrest of, or processing of the defendant. In the event no valid party exists the appeal may be handled by the processor of the defendant so long as they are not also directly involved in the arrest, wherein the appeal should be sent to the Provost Office.

    " + dat += "

    Appeal resolutions are final and cannot be altered without intervention of the Provost Office, the handler can establish a charge as valid, modify a charge to a lower charge, reduce the punishment for a charge to the minimum punishment, and remove a charge that the prisoner is found not guilty of. Charges may not be removed if the defendant is guilty.

    " + dat += "

    Right to Appeal is suspended during Delta Alert, threats mandating evacuation, approach of a hostile force, unlawful/hostile boarders, riots or jailbreaks. Appeal rights are also postponed should the defendant be in need of medical treatment, unconscious or unlawfully free of custody.
    Appeals are handled on a first call basis, should a previously requested appeal be under review the required response time is postponed.

    " + dat += "

    " + dat += "This document must be completed by the defendant and then a Military Police representative prior to the handler beginning the appeal review. Should this document not be provided to the defendant within 5 minutes of request, all charges are void.
    " + dat += "Following completion of this document the handler must begin the appeal review within a further five minutes. In the event this is not possible, and not a result of a situation where Right to Appeal is suspended, Military Police may seek a PR301b Delayed Action Order by indicating their request on this document." + dat += "

    " + dat += "

    " + dat += "A PR301b Delayed Action Order (DAO) allows Military Police to reprosecute a defendant for charges they are previously released from due to the inability to adhere to the required timeframes.
    " + dat += "Request of a DAO requires the defendant be released from detainment, the 'PR301b Requested' section on this document completed, and a PR301b form sent by fax to the Provost Office.
    " + dat += "Upon receipt of a response from the DOA fax this document must be updated to indicate the Provost Office's decision. Should a DAO be approved the defendant must be presented with the response from the Provost Office upon, or prior to, being detained." + dat += "

    " + dat += "
    " + dat += "
    " + dat += "" + + + + + contents = dat + +/datum/prefab_document/provost/mp/appeal_form/proc/generate_appeal_ref() + return "PR_A[rand(1000, 9999)][pick(GLOB.alphabet_uppercase)][pick(GLOB.alphabet_uppercase)]" diff --git a/code/modules/paperwork/prefab_papers/provost/military_police/confiscation_receipt.dm b/code/modules/paperwork/prefab_papers/provost/military_police/confiscation_receipt.dm new file mode 100644 index 000000000000..afaeda89f535 --- /dev/null +++ b/code/modules/paperwork/prefab_papers/provost/military_police/confiscation_receipt.dm @@ -0,0 +1,119 @@ +/datum/prefab_document/provost/mp/confiscation_receipt/New() + var/datum/asset/asset = get_asset_datum(/datum/asset/simple/paper) + var/dat = "" + + dat += "" + dat += "" + dat += "" + dat += "
    " + dat += "
    " + dat += "\"Provost" + dat += "
    " + dat += "" + dat += "" + dat += "
    " + dat += "
    " + dat += "

    Military Police Confiscation Receipt

    " + dat += "

    PR356

    " + dat += "
    " + dat += "
    " + dat += "" + dat += "" + dat += "
    " + dat += "Person Identification:
    " + dat += "

    " + dat += "Reasoning:
    " + dat += "

    " + dat += "Location Held:
    " + dat += "

    " + dat += "Items Confiscated:
    " + dat += "

    " + dat += "Issuing Officer signature:
    " + dat += "" + dat += "" + dat += "
    " + dat += "" + dat += "
    " + dat += "" + + + + + contents = dat diff --git a/code/modules/paperwork/prefab_papers/provost/military_police/dao_request.dm b/code/modules/paperwork/prefab_papers/provost/military_police/dao_request.dm new file mode 100644 index 000000000000..a65a1c05903d --- /dev/null +++ b/code/modules/paperwork/prefab_papers/provost/military_police/dao_request.dm @@ -0,0 +1,143 @@ +/datum/prefab_document/provost/mp/dao_request/New() + var/datum/asset/asset = get_asset_datum(/datum/asset/simple/paper) + var/dat = "" + + dat += "" + dat += "" + dat += "" + dat += "
    " + dat += "
    " + dat += "\"Provost" + dat += "
    " + dat += "" + dat += "" + dat += "
    " + dat += "
    " + dat += "

    Delayed Action Order

    " + dat += "

    PR301b

    " + dat += "
    " + dat += "
    " + dat += "" + dat += "" + dat += "
    " + dat += "

    To be completed by Military Police


    " + dat += "Appeal Reference Number:
    " + dat += "Department Representative:
    " + dat += "Charges of the accused, with reasoning:


    " + dat += "Reason for PR301b Request:


    " + dat += "Notes or Comments:


    " + dat += "Representative Signature:
    " + dat += "
    " + dat += "
    " + dat += "
    " + dat += "

    PR301b Function

    " + dat += "

    " + dat += "A PR301b Delayed Action Order (DAO) allows Military Police to reprosecute a defendant for charges they are previously released from due to the inability to adhere to the required timeframes.
    " + dat += "Request of a DAO requires the defendant be released from detainment, the 'PR301b Requested' section on the related PR301a form completed, and this form sent by fax to the Provost Office.
    " + dat += "Upon receipt of a response containing the Provost Office's decision the related PR301a form must be updated to indicate the answer. Should a DAO be approved the defendant must be presented with the response from the Provost Office upon, or prior to, being detained." + dat += "

    " + dat += "
    " + dat += "
    " + dat += "" + + + + + contents = dat diff --git a/code/modules/paperwork/prefab_papers/uscm/high_command/standard.dm b/code/modules/paperwork/prefab_papers/uscm/high_command/standard.dm new file mode 100644 index 000000000000..9b08aea064d9 --- /dev/null +++ b/code/modules/paperwork/prefab_papers/uscm/high_command/standard.dm @@ -0,0 +1,141 @@ +/datum/prefab_document/uscm/highcom/standard/New() + var/datum/asset/asset = get_asset_datum(/datum/asset/simple/paper) + var/dat = "" + + dat += "" + dat += "" + dat += "" + dat += "
    " + dat += "
    " + dat += "\"USCM" + dat += "
    " + dat += "" + dat += "" + dat += "
    " + dat += "
    " + dat += "

    USCM High Command Missive

    " + dat += "

    UAM422

    " + dat += "
    " + dat += "
    " + dat += "" + dat += "" + dat += "
    " + dat += "

    Authorized Personnel Only


    " + dat += "Index:
    " + dat += "Subject:
    " + dat += "


    " + dat += "Signature:
    " + dat += "
    " + dat += "
    " + dat += "
    " + dat += "

    Disclaimer

    " + dat += "

    " + dat += "This message and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed.
    " + dat += "If you are not the aforementioned addressee you should not disseminate, distribute or copy this missive.
    " + dat += "If you are not the intended recipient, you are notified that disclosing, copying, distributing or taking any action in reliance on the contents of this information is strictly prohibited.
    " + dat += "

    " + dat += "
    " + dat += "
    " + dat += "" + + + + + contents = dat diff --git a/code/modules/paperwork/prefab_papers/wey_yu/high_command/standard.dm b/code/modules/paperwork/prefab_papers/wey_yu/high_command/standard.dm new file mode 100644 index 000000000000..8e2526d2d6fe --- /dev/null +++ b/code/modules/paperwork/prefab_papers/wey_yu/high_command/standard.dm @@ -0,0 +1,137 @@ +/datum/prefab_document/wey_yu/highcom/standard/New() + var/datum/asset/asset = get_asset_datum(/datum/asset/simple/paper) + var/dat = "" + + dat += "" + dat += "" + dat += "" + dat += "
    " + dat += "" + dat += "" + dat += "" + dat += "
    " + dat += "

    Directorate Communication

    " + dat += "

    WY101

    " + dat += "
    " + dat += "
    " + dat += "" + dat += "" + dat += "
    " + dat += "

    Index:
    " + dat += "Date: [time2text(REALTIMEOFDAY, "Day DD Month [GLOB.game_year]")]
    " + dat += "To:
    " + dat += "Subject:

    " + dat += "

    " + dat += "
    " + dat += "

    Communicant Name:
    " + dat += "Signature:

    " + dat += "
    " + dat += "" + dat += "
    " + dat += "

    This message and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. This message contains confidential information and is intended only for addressee, if you are not the aforementioned addressee you should not disseminate, distribute or copy this missive. If you are not the intended recipient, you are notified that disclosing, copying, distributing or taking any action in reliance on the contents of this information is strictly prohibited.

    " + dat += "
    " + dat += "" + dat += "
    " + dat += "" + + contents = dat diff --git a/code/modules/paperwork/prefab_papers/wey_yu/liaison/liability.dm b/code/modules/paperwork/prefab_papers/wey_yu/liaison/liability.dm new file mode 100644 index 000000000000..e521045d7984 --- /dev/null +++ b/code/modules/paperwork/prefab_papers/wey_yu/liaison/liability.dm @@ -0,0 +1,135 @@ +/datum/prefab_document/wey_yu/liaison/liability/New() + var/datum/asset/asset = get_asset_datum(/datum/asset/simple/paper) + var/dat = "" + + dat += "" + dat += "" + dat += "" + dat += "
    " + dat += "" + dat += "" + dat += "" + dat += "
    " + dat += "

    Affidavit of Liability

    " + dat += "

    WY440

    " + dat += "
    " + dat += "
    " + dat += "" + dat += "" + dat += "" + dat += "
    " + dat += "

    I, , forfeit all right to bring a suit against the Weyland Yutani (Space) Corporation for any reason on the site. This agreement releases the Weyland Yutani (Space) Corporation from all liability relating to injuries and financial responsibilities for injuries that may occur on the site.

    " + dat += "

    Signature:
    Liaison Signature:
    Date:

    " + dat += "
    " + dat += "" + dat += "
    " + dat += "

    Our organization accepts no liability for the content of this missive, or for the consequences of any actions taken on the basis of the information provided, unless that information is subsequently confirmed in writing. If you are not the intended recipient, you are notified that disclosing, copying, distributing or taking any action in reliance on the contents of this information is strictly prohibited.

    " + dat += "

    This message and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. This message contains confidential information and is intended only for addressee, if you are not the aforementioned addressee you should not disseminate, distribute or copy this missive. If you are not the intended recipient, you are notified that disclosing, copying, distributing or taking any action in reliance on the contents of this information is strictly prohibited.

    " + dat += "
    " + dat += "" + dat += "
    " + dat += "" + + contents = dat diff --git a/code/modules/paperwork/prefab_papers/wey_yu/liaison/nda_long.dm b/code/modules/paperwork/prefab_papers/wey_yu/liaison/nda_long.dm new file mode 100644 index 000000000000..8f07339b1f2f --- /dev/null +++ b/code/modules/paperwork/prefab_papers/wey_yu/liaison/nda_long.dm @@ -0,0 +1,171 @@ +/datum/prefab_document/wey_yu/liaison/nda_long/New() + var/datum/asset/asset = get_asset_datum(/datum/asset/simple/paper) + var/dat = "" + + dat += "" + dat += "" + dat += "" + dat += "
    " + dat += "
    " + dat += "WY Logo" + dat += "
    " + dat += "" + dat += "" + dat += "
    " + dat += "

    Non Disclosure Agreement

    " + dat += "

    WY442

    " + dat += "
    " + dat += "
    " + dat += "" + dat += "" + dat += "" + dat += "
    " + dat += "This Non-disclosure Agreement is made effective as of [time2text(REALTIMEOFDAY, "Day DD Month [GLOB.game_year]")] by and between The Company and the United States Colonial Marines (the \"recipient\") of property and information regarding all operational procedures of .

    " + dat += "
    " + dat += "

    I . Confidential Information.
    The term \"Confidential Information\" means by any information which is proprietary to the Owner, whether or not owned or developed by the Owner, which is generally known other than by the Owner, which the Recipient may obtain through any direct or indirect contact with the owner, regardless of whether specifically identified as confidential or proprietary, Confidential Information shall include any information provided by the Owner concerning the business, technology and information of the Owner and any third party with which the owner deals, including, without limitation, business records and plans, trade secrets, technical data, product are ideas, contracts, financial information, pricing structure, health discounts, computer programs, listings and unknown wildlife, are all copyright and intellectual property. The nature of the information and the manner of disclosure are such that a reasonable person would understand is confidential.

    " + dat += "" + dat += "

    A. \"Confidential Information\" does not include:
    - Matters of public knowledge that result from disclosure by the Owner.
    - Information rightfully received by the recipient from a third party without a duty of confidentiality.
    - Information disclosed by operation contract of The Company.
    - Information disclosed by the recipient with the prior written consent of the Owner, and any other information that both parties agree in writing is not confidential.

    " + dat += "
    " + dat += "

    II. PROTECTION OF CONFIDENTIAL INFORMATION.
    The recipient understands and acknowledges that the Confidential Information has been developed or obtained by the owner of The Company by Investment of Significant time, effort and expense, and that the Confidential Information is valuable, special and a unique asset of the Owner which provides the Owner with significant competitive advantage, and needs to be protected from improper disclosure. In consideration for the receipt by the Recipient of the confidential Information, the Recipient agrees as follows:

    " + dat += "" + dat += "

    A. No Disclosure.
    The recipient will hold the confidential information in confidence and will not disclose the Confidential information to any person or entity without the prior written consent of the Owner.

    " + dat += "" + dat += "

    B. No copying/Modifying.
    The Recipient will not copy or modify any Confidential Information to any person or entity without the prior written consent of the Owner.

    " + dat += "" + dat += "

    C. Unauthorized Use.
    The Recipient shall promptly advise the Owner if the Recipient becomes aware of any possible unauthorized disclosures or use of the Confidential Information.

    " + dat += "" + dat += "

    D. application to employees.
    The Recipient shall not disclose any confidential Information to any employees of the Recipient, except those employees who are required to have the Confidential Information in order to perform jobs and duties in connection with the limited purpose of this Agreement. Each permitted employee to whom confidential information is disclosed shall sign a non-disclosure agreement substantially the same as this agreement at the request of the Owner.

    " + dat += "
    " + dat += "

    III . Unauthorized Disclosure of Information- Injunction.
    If it appears that the Recipient has disclosed (or has threatened to disclose) Confidential Information in violation of this Agreement, the Owner shall be entitled to a injunction to restrain the Recipient from disclosing the Confidential Information in whole or in part. The owner shall not be prohibited by this provision from pursuing other remedies, including a claim for losses and damages.

    " + dat += "
    " + dat += "

    IV. Non-Circumvention.
    For a period of five hundred (500) years after the end of the terms of this Agreement, the Recipient will not attempt to do business with or otherwise solicit any business contacts found or otherwise referred by owners to Recipient for the purpose of circumventing, the result of which shall be prevent the Owner from realizing or recognizing a profit, fees, or otherwise, without the specific written approval of the owner. If such circumvention shall occur the Owner shall be entitled to any Commissions due pursuant to this agreement or relating to such Transaction.

    " + dat += "
    " + dat += "

    V. Return of Confidential Information.
    Upon the written request of the owner, the recipient shall return to the owner all written material containing the Confidential Information. The recipient shall also deliver to the owner written statements signed by the Recipient certifying that all materials have been returned within one (1) days of receipt of the request.

    " + dat += "
    " + dat += "

    VI . Relationship of Parties.
    Neither party has an obligation under this agreement to purchase products by the owner under this claus you are free to purchase weapons within the owners inventory at the standard rate.

    " + dat += "
    " + dat += "

    VII. No Warranty.
    The Recipient acknowledges and agrees that the Confidential Information is provided on an \"AS IS\" basis. THE OWNER MAKES NO WARRANTIES, EXPRESS OR IMPLIED WITH RESPECT TO THE CONFIDENTIAL INFORMATION AND HEREBY EXPRESSLY DISCLAIMS ANY AND ALL IMPLIED WARRANTIES OR INJURIES OF MERCHANT-ABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO WAY SHALL THE OWNER BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, OR CONSEQUENTIAL DAMAGES IN CONNECTION WITH OR ARISING OUT OF THE PERFORMANCE OR USE OF ANY PORTION OF THE CONFIDENTIAL INFORMATION. The Owner does not represent or warrant that any product or business plans disclosed to the Recipient will be marketed or carried out as disclosed, or at all. Any actions taken by the Recipient in response to the disclosure of the Confidential Information shall be solely at the risk of the Recipient.

    " + dat += "
    " + dat += "

    VIII. Limited License to use.
    The Recipient Shall not acquire any intellectual property rights under this Agreement except the limited right to use as set forth above. The recipient acknowledges that, as between the Owner and the Recipient, the Confidential Information and all related copyrights and other intellectual property rights, are (and at all times will be) the property of the Owner, even if suggestions, comments, and/or ideas made by the Recipient are incorporated into the Confidential Information or related materials during the period of this Agreement.

    " + dat += "
    " + dat += "

    IX . Indemnity.
    Each party agrees to defend, indemnify, and hold harmless the other party and its officers, directors, agents, affiliates, representatives, and employees from any and all third party claims, demands, liabilities, costs and expenses, including reasonable attorney fees provided by the Owner. costs and expenses resulting from the indemnifying party's material breach of any duty, representation, or warranty under this Agreement.

    " + dat += "
    " + dat += "

    X . TERM.
    The obligations of this agreement shall survive 03/30/2293 from the Effective date or until the Owner sends the Recipient written notice releasing the Recipient from this Agreement. After that, the Recipient must continue to protect the confidential information that was received during the term of this agreement from unauthorized use or disclosure for a additional time of the Owners Choosing.

    " + dat += "
    " + dat += "

    XI. Signatories.
    This Agreement shall be executed by the named representative, on behalf of The Company and USS Almayer's Commander, on behalf of United States Colonial Marines and delivered in the manner prescribed by law as of the date first written above.

    " + dat += "

    A. The Company.
    Date: [time2text(REALTIMEOFDAY, "Day DD Month [GLOB.game_year]")]
    Representative:
    Title:
    Signature:

    " + dat += "

    B. USCM.
    Date: [time2text(REALTIMEOFDAY, "Day DD Month [GLOB.game_year]")]
    Representative:
    Rank:
    Signature:

    " + dat += "
    " + dat += "" + dat += "
    " + dat += "

    Our organization accepts no liability for the content of this missive, or for the consequences of any actions taken on the basis of the information provided, unless that information is subsequently confirmed in writing. If you are not the intended recipient, you are notified that disclosing, copying, distributing or taking any action in reliance on the contents of this information is strictly prohibited.

    " + dat += "

    This message and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. This message contains confidential information and is intended only for addressee, if you are not the aforementioned addressee you should not disseminate, distribute or copy this missive. If you are not the intended recipient, you are notified that disclosing, copying, distributing or taking any action in reliance on the contents of this information is strictly prohibited.

    " + dat += "
    " + dat += "" + dat += "
    " + dat += "" + + + + + contents = dat diff --git a/code/modules/paperwork/prefab_papers/wey_yu/liaison/nda_short.dm b/code/modules/paperwork/prefab_papers/wey_yu/liaison/nda_short.dm new file mode 100644 index 000000000000..32f10f303361 --- /dev/null +++ b/code/modules/paperwork/prefab_papers/wey_yu/liaison/nda_short.dm @@ -0,0 +1,142 @@ +/datum/prefab_document/wey_yu/liaison/nda_short/New() + var/datum/asset/asset = get_asset_datum(/datum/asset/simple/paper) + var/dat = "" + + dat += "" + dat += "" + dat += "" + dat += "
    " + dat += "
    " + dat += "WY Logo" + dat += "
    " + dat += "" + dat += "" + dat += "
    " + dat += "

    Confidentiality Agreement

    " + dat += "

    WY441

    " + dat += "
    " + dat += "
    " + dat += "" + dat += "" + dat += "" + dat += "
    " + dat += "

    I, , agree to a Confidentiality Agreement with the Weyland-Yutani (Space) Corporation that no information regarding the events that took place on the facility named and subsequently the USS Almayer is to be delivered publicly. Only qualified Corporate personnel whose identities have been confirmed will receive such information.

    " + dat += "

    " + dat += "Signature:
    " + dat += "Liaison Signature:
    " + dat += "Date: [time2text(REALTIMEOFDAY, "Day DD Month [GLOB.game_year]")]" + dat += "

    " + dat += "
    " + dat += "" + dat += "
    " + dat += "

    Our organization accepts no liability for the content of this missive, or for the consequences of any actions taken on the basis of the information provided, unless that information is subsequently confirmed in writing. If you are not the intended recipient, you are notified that disclosing, copying, distributing or taking any action in reliance on the contents of this information is strictly prohibited.

    " + dat += "

    This message and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. This message contains confidential information and is intended only for addressee, if you are not the aforementioned addressee you should not disseminate, distribute or copy this missive. If you are not the intended recipient, you are notified that disclosing, copying, distributing or taking any action in reliance on the contents of this information is strictly prohibited.

    " + dat += "
    " + dat += "" + dat += "
    " + dat += "" + + + + + contents = dat diff --git a/code/modules/paperwork/prefab_papers/wey_yu/liaison/ops_report.dm b/code/modules/paperwork/prefab_papers/wey_yu/liaison/ops_report.dm new file mode 100644 index 000000000000..f8419d468267 --- /dev/null +++ b/code/modules/paperwork/prefab_papers/wey_yu/liaison/ops_report.dm @@ -0,0 +1,138 @@ +/datum/prefab_document/wey_yu/liaison/ops_report/New() + var/datum/asset/asset = get_asset_datum(/datum/asset/simple/paper) + var/dat = "" + + dat += "" + dat += "" + dat += "" + dat += "
    " + dat += "" + dat += "" + dat += "" + dat += "
    " + dat += "

    Liaison Operations Report

    " + dat += "

    WY435

    " + dat += "
    " + dat += "
    " + dat += "" + dat += "" + dat += "
    " + dat += "

    Index:
    " + dat += "Date: [time2text(REALTIMEOFDAY, "Day DD Month [GLOB.game_year]")]
    " + dat += "To:
    " + dat += "Subject:

    " + dat += "

    " + dat += "
    " + dat += "

    Liaison Name:
    " + dat += "Signature:

    " + dat += "
    " + dat += "" + dat += "
    " + dat += "

    This message and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. This message contains confidential information and is intended only for addressee, if you are not the aforementioned addressee you should not disseminate, distribute or copy this missive. If you are not the intended recipient, you are notified that disclosing, copying, distributing or taking any action in reliance on the contents of this information is strictly prohibited.

    " + dat += "
    " + dat += "" + dat += "
    " + dat += "" + + contents = dat diff --git a/code/modules/paperwork/prefab_papers/wey_yu/liaison/preserve_intent.dm b/code/modules/paperwork/prefab_papers/wey_yu/liaison/preserve_intent.dm new file mode 100644 index 000000000000..81af52075b77 --- /dev/null +++ b/code/modules/paperwork/prefab_papers/wey_yu/liaison/preserve_intent.dm @@ -0,0 +1,138 @@ +/datum/prefab_document/wey_yu/liaison/preserve_intent/New() + var/datum/asset/asset = get_asset_datum(/datum/asset/simple/paper) + var/dat = "" + + dat += "" + dat += "" + dat += "" + dat += "
    " + dat += "
    " + dat += "WY Logo" + dat += "
    " + dat += "" + dat += "" + dat += "
    " + dat += "

    Affidavit of Intent to Preserve

    " + dat += "

    WY439

    " + dat += "
    " + dat += "
    " + dat += "" + dat += "" + dat += "" + dat += "
    " + dat += "

    I, , do hereby swear and affirm that they I will do everything within my power to preserve and protect the integrity and value of all proprietary interests of the Weyland Yutani (Space) Corporation on the surface of or above the surface of .

    " + dat += "

    Signature:
    Liaison Signature:
    Date: [time2text(REALTIMEOFDAY, "Day DD Month [GLOB.game_year]")]

    " + dat += "
    " + dat += "" + dat += "
    " + dat += "

    Our organization accepts no liability for the content of this missive, or for the consequences of any actions taken on the basis of the information provided, unless that information is subsequently confirmed in writing. If you are not the intended recipient, you are notified that disclosing, copying, distributing or taking any action in reliance on the contents of this information is strictly prohibited.

    " + dat += "

    This message and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. This message contains confidential information and is intended only for addressee, if you are not the aforementioned addressee you should not disseminate, distribute or copy this missive. If you are not the intended recipient, you are notified that disclosing, copying, distributing or taking any action in reliance on the contents of this information is strictly prohibited.

    " + dat += "
    " + dat += "" + dat += "
    " + dat += "" + + + + + contents = dat diff --git a/code/modules/reagents/chemistry_machinery/chem_simulator.dm b/code/modules/reagents/chemistry_machinery/chem_simulator.dm index 13e051f5dc20..c637695632ac 100644 --- a/code/modules/reagents/chemistry_machinery/chem_simulator.dm +++ b/code/modules/reagents/chemistry_machinery/chem_simulator.dm @@ -610,7 +610,7 @@ var/datum/reagent/D = GLOB.chemical_reagents_list[id] var/datum/asset/asset = get_asset_datum(/datum/asset/simple/paper) report.name = "Simulation result for [D.id]" - report.info += "

    Official Company Document
    Simulated Synthesis Report

    Result for [D.id]

    " + report.info += "

    Official Company Document
    Simulated Synthesis Report

    Result for [D.id]

    " report.generate(D) report.info += "

    This report was automatically printed by the Synthesis Simulator.
    The [MAIN_SHIP_NAME], [time2text(world.timeofday, "MM/DD")]/[GLOB.game_year], [worldtime2text()]

    \n" playsound(loc, 'sound/machines/twobeep.ogg', 15, 1) diff --git a/code/modules/reagents/chemistry_machinery/reagent_analyzer.dm b/code/modules/reagents/chemistry_machinery/reagent_analyzer.dm index 967177bda978..038e0098ec66 100644 --- a/code/modules/reagents/chemistry_machinery/reagent_analyzer.dm +++ b/code/modules/reagents/chemistry_machinery/reagent_analyzer.dm @@ -109,7 +109,7 @@ else var/datum/asset/asset = get_asset_datum(/datum/asset/simple/paper) report.name = "Analysis of ERROR" - report.info += "

    Official Weyland-Yutani Document
    Reagent Analysis Print

    Analysis ERROR

    " + report.info += "

    Official Weyland-Yutani Document
    Reagent Analysis Print

    Analysis ERROR

    " report.info += "Result:
    Analysis failed for sample #[sample_number].

    \n" report.info += "Reason for error:
    [reason]
    \n" report.info += "

    This report was automatically printed by the A-XRF Scanner.
    The [MAIN_SHIP_NAME], [time2text(world.timeofday, "MM/DD")]/[GLOB.game_year], [worldtime2text()]

    \n" @@ -120,7 +120,7 @@ report.name = "Analysis of [name]" var/datum/asset/asset = get_asset_datum(/datum/asset/simple/paper) - report.info += "

    Official Weyland-Yutani Document
    Automated A-XRF Report

    Analysis of [name]

    " + report.info += "

    Official Weyland-Yutani Document
    Automated A-XRF Report

    Analysis of [name]

    " if(sample_number) report.info += "Results for sample: #[sample_number]
    \n" report.generate(src, admin_spawned) diff --git a/colonialmarines.dme b/colonialmarines.dme index 469e51765204..230ed0f4714f 100644 --- a/colonialmarines.dme +++ b/colonialmarines.dme @@ -88,6 +88,7 @@ #include "code\__DEFINES\objects.dm" #include "code\__DEFINES\origins.dm" #include "code\__DEFINES\pain.dm" +#include "code\__DEFINES\paperwork.dm" #include "code\__DEFINES\pred.dm" #include "code\__DEFINES\procpath.dm" #include "code\__DEFINES\qdel.dm" @@ -839,6 +840,7 @@ #include "code\game\jobs\job\marine\squad\tl.dm" #include "code\game\jobs\job\special\cmb.dm" #include "code\game\jobs\job\special\provost.dm" +#include "code\game\jobs\job\special\responders.dm" #include "code\game\jobs\job\special\uaac.dm" #include "code\game\jobs\job\special\uscm.dm" #include "code\game\jobs\job\special\weyland_yutani.dm" @@ -1772,6 +1774,7 @@ #include "code\modules\gear_presets\corpses.dm" #include "code\modules\gear_presets\dust_raider.dm" #include "code\modules\gear_presets\dutch.dm" +#include "code\modules\gear_presets\fax_responders.dm" #include "code\modules\gear_presets\fun.dm" #include "code\modules\gear_presets\other.dm" #include "code\modules\gear_presets\pmc.dm" @@ -2196,6 +2199,20 @@ #include "code\modules\paperwork\paperbin.dm" #include "code\modules\paperwork\photocopier.dm" #include "code\modules\paperwork\photography.dm" +#include "code\modules\paperwork\prefab_papers.dm" +#include "code\modules\paperwork\prefab_papers\provost\high_command\dao_response.dm" +#include "code\modules\paperwork\prefab_papers\provost\high_command\standard.dm" +#include "code\modules\paperwork\prefab_papers\provost\military_police\apology_notice.dm" +#include "code\modules\paperwork\prefab_papers\provost\military_police\appeal_form.dm" +#include "code\modules\paperwork\prefab_papers\provost\military_police\confiscation_receipt.dm" +#include "code\modules\paperwork\prefab_papers\provost\military_police\dao_request.dm" +#include "code\modules\paperwork\prefab_papers\uscm\high_command\standard.dm" +#include "code\modules\paperwork\prefab_papers\wey_yu\high_command\standard.dm" +#include "code\modules\paperwork\prefab_papers\wey_yu\liaison\liability.dm" +#include "code\modules\paperwork\prefab_papers\wey_yu\liaison\nda_long.dm" +#include "code\modules\paperwork\prefab_papers\wey_yu\liaison\nda_short.dm" +#include "code\modules\paperwork\prefab_papers\wey_yu\liaison\ops_report.dm" +#include "code\modules\paperwork\prefab_papers\wey_yu\liaison\preserve_intent.dm" #include "code\modules\power\apc.dm" #include "code\modules\power\batteryrack.dm" #include "code\modules\power\breaker_box.dm" diff --git a/html/images/faxwylogo.png b/html/images/faxwylogo.png deleted file mode 100644 index a67bd212e122..000000000000 Binary files a/html/images/faxwylogo.png and /dev/null differ diff --git a/html/images/uscmlogo.png b/html/images/uscmlogo.png deleted file mode 100644 index 6a065b5b60b1..000000000000 Binary files a/html/images/uscmlogo.png and /dev/null differ diff --git a/html/images/wylogo.png b/html/images/wylogo.png deleted file mode 100644 index 499e868896d0..000000000000 Binary files a/html/images/wylogo.png and /dev/null differ diff --git a/icons/obj/items/paper.dmi b/icons/obj/items/paper.dmi index b15d4be6076d..1acee46afda5 100644 Binary files a/icons/obj/items/paper.dmi and b/icons/obj/items/paper.dmi differ diff --git a/maps/map_files/USS_Almayer/USS_Almayer.dmm b/maps/map_files/USS_Almayer/USS_Almayer.dmm index b5181e0f77f6..a1a656e90951 100644 --- a/maps/map_files/USS_Almayer/USS_Almayer.dmm +++ b/maps/map_files/USS_Almayer/USS_Almayer.dmm @@ -45424,6 +45424,13 @@ }, /turf/open/floor/almayer/test_floor5, /area/almayer/squads/req) +"oTo" = ( +/obj/structure/filingcabinet/documentation/military_police{ + pixel_y = 24; + density = 0 + }, +/turf/open/floor/almayer/red/north, +/area/almayer/shipboard/brig/processing) "oTA" = ( /obj/structure/machinery/cryopod, /obj/structure/machinery/light{ @@ -64137,7 +64144,7 @@ /turf/open/floor/almayer/red/northwest, /area/almayer/lifeboat_pumps/south1) "wvo" = ( -/obj/structure/filingcabinet, +/obj/structure/filingcabinet/documentation/liaison, /turf/open/floor/wood/ship, /area/almayer/command/corporateliaison) "wvE" = ( @@ -79999,7 +80006,7 @@ cmM tzd tzd sgi -bju +oTo wSm kAL xkd diff --git a/maps/templates/Chinook.dmm b/maps/templates/Chinook.dmm index de04fd7d5e66..671a84bab350 100644 --- a/maps/templates/Chinook.dmm +++ b/maps/templates/Chinook.dmm @@ -402,7 +402,7 @@ pixel_x = -8; pixel_y = 8 }, -/obj/item/tool/pen/fountain{ +/obj/item/tool/pen/multicolor/fountain{ pixel_y = 4; pixel_x = -8 }, @@ -1547,7 +1547,7 @@ "fC" = ( /obj/structure/surface/table/reinforced/black, /obj/item/paper_bin/uscm, -/obj/item/tool/pen/fountain{ +/obj/item/tool/pen/multicolor/fountain{ pixel_y = -3 }, /turf/open/floor/wood, @@ -1615,7 +1615,7 @@ pixel_y = 8; pixel_x = 6 }, -/obj/item/tool/pen/fountain{ +/obj/item/tool/pen/multicolor/fountain{ pixel_x = -8; pixel_y = 5 }, @@ -10423,7 +10423,7 @@ /turf/open/floor/almayer/test_floor5, /area/adminlevel/chinook/engineering) "Qs" = ( -/obj/item/tool/pen/fountain{ +/obj/item/tool/pen/multicolor/fountain{ pixel_x = 3; pixel_y = -1 }, @@ -10433,7 +10433,7 @@ pixel_y = 2 }, /obj/structure/surface/table/reinforced/black, -/obj/item/tool/pen/fountain{ +/obj/item/tool/pen/multicolor/fountain{ pixel_x = 3; pixel_y = 3 }, @@ -10494,7 +10494,7 @@ pixel_y = 1; pixel_x = 1 }, -/obj/item/tool/pen/fountain{ +/obj/item/tool/pen/multicolor/fountain{ pixel_x = 10; pixel_y = 6 }, @@ -12556,7 +12556,7 @@ pixel_y = 8; pixel_x = 5 }, -/obj/item/tool/pen/fountain{ +/obj/item/tool/pen/multicolor/fountain{ pixel_x = 5; pixel_y = 6 }, diff --git a/maps/templates/lazy_templates/fax_responder_base.dmm b/maps/templates/lazy_templates/fax_responder_base.dmm new file mode 100644 index 000000000000..4a873ee12c04 --- /dev/null +++ b/maps/templates/lazy_templates/fax_responder_base.dmm @@ -0,0 +1,2775 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"am" = ( +/obj/structure/surface/table/woodentable/fancy, +/obj/item/folder/red{ + pixel_x = 6 + }, +/obj/item/folder/black{ + pixel_x = 12 + }, +/obj/structure/transmitter/rotary{ + pixel_x = -6; + pixel_y = 6; + networks_transmit = list("USCM","Colonist","UPP","Fax Responders"); + phone_id = "UPP Communications Officer"; + phone_category = "Comms Relay"; + networks_receive = list("Fax Responders"); + phone_color = "green" + }, +/turf/open/floor/wood/ship, +/area/adminlevel/ert_station/fax_response_station) +"bT" = ( +/obj/structure/surface/table/woodentable/fancy, +/obj/structure/machinery/computer/cameras/almayer{ + dir = 8; + admin_console = 1; + network = list("Overwatch"); + pixel_x = 16; + pixel_y = 8; + name = "Overwatch Cameras"; + colony_camera_mapload = 0 + }, +/obj/structure/machinery/computer/cameras/almayer{ + dir = 8; + admin_console = 1; + network = list("ARES","Almayer","Research","Containment","Containment Hidden"); + pixel_x = 16; + layer = 2.99; + name = "USS Almayer Cameras"; + pixel_y = -6; + colony_camera_mapload = 0 + }, +/obj/item/tool/pen/multicolor/provost, +/turf/open/floor/wood/ship, +/area/adminlevel/ert_station/fax_response_station) +"fo" = ( +/obj/structure/filingcabinet{ + density = 0; + pixel_y = 24; + pixel_x = -7 + }, +/obj/structure/filingcabinet/documentation/highcom/provost{ + pixel_x = 9; + pixel_y = 24 + }, +/turf/open/floor/wood/ship, +/area/adminlevel/ert_station/fax_response_station) +"fr" = ( +/obj/structure/machinery/cryopod, +/turf/open/floor/wood/ship, +/area/adminlevel/ert_station/fax_response_station) +"gu" = ( +/turf/open/floor/wood/ship, +/area/adminlevel/ert_station/fax_response_station) +"id" = ( +/obj/structure/surface/table/woodentable/fancy, +/obj/structure/machinery/computer/crew/alt{ + pixel_y = 24; + pixel_x = -12; + faction = "UPP"; + name = "UPP monitoring computer" + }, +/obj/item/tool/pen/clicky, +/obj/item/tool/pen/blue/clicky{ + pixel_y = 8 + }, +/obj/item/tool/pen/green/clicky{ + pixel_y = 8; + pixel_x = -8 + }, +/obj/item/tool/pen/red/clicky{ + pixel_x = -8 + }, +/obj/item/paper_bin/wy{ + pixel_y = 6; + pixel_x = 8 + }, +/obj/structure/machinery/computer/crew/alt{ + pixel_y = 24; + pixel_x = 8; + name = "USCM monitoring computer" + }, +/turf/open/floor/wood/ship, +/area/adminlevel/ert_station/fax_response_station) +"im" = ( +/obj/structure/surface/table/woodentable/fancy, +/obj/structure/machinery/computer/cameras/almayer{ + dir = 8; + admin_console = 1; + network = list("Overwatch"); + pixel_x = 16; + pixel_y = 16; + name = "Overwatch Cameras"; + colony_camera_mapload = 0 + }, +/obj/structure/machinery/computer/cameras/almayer{ + dir = 8; + admin_console = 1; + network = list("WY","Containment Hidden","Colony"); + pixel_x = 16; + name = "WY Cameras"; + colony_camera_mapload = 0 + }, +/obj/structure/machinery/computer/cameras/almayer{ + dir = 8; + admin_console = 1; + network = list("ARES","Almayer","Research","Containment"); + pixel_x = 16; + layer = 2.99; + name = "USS Almayer Cameras"; + pixel_y = -16; + colony_camera_mapload = 0 + }, +/obj/item/tool/pen/multicolor/fountain, +/turf/open/floor/wood/ship, +/area/adminlevel/ert_station/fax_response_station) +"jh" = ( +/turf/closed/wall/r_wall/prison_unmeltable, +/area/adminlevel/ert_station/fax_response_station) +"jV" = ( +/obj/structure/surface/table/woodentable/fancy, +/obj/item/folder/red{ + pixel_x = 6 + }, +/obj/item/folder/black{ + pixel_x = 12 + }, +/obj/structure/transmitter/rotary{ + pixel_x = -6; + pixel_y = 6; + networks_transmit = list("USCM","Colonist","TWE","Fax Responders"); + phone_id = "TWE Communications Officer"; + phone_category = "Comms Relay"; + networks_receive = list("Fax Responders"); + phone_color = "yellow" + }, +/turf/open/floor/wood/ship, +/area/adminlevel/ert_station/fax_response_station) +"ny" = ( +/obj/structure/surface/table/woodentable/fancy, +/obj/structure/machinery/faxmachine/cmb{ + pixel_y = 8 + }, +/turf/open/floor/wood/ship, +/area/adminlevel/ert_station/fax_response_station) +"nB" = ( +/obj/structure/machinery/cm_vending/sorted/medical/wall_med{ + pixel_x = -24 + }, +/obj/structure/machinery/cm_vending/sorted/marine_food{ + pixel_y = 16; + density = 0 + }, +/turf/open/floor/wood/ship, +/area/adminlevel/ert_station/fax_response_station) +"ov" = ( +/obj/structure/surface/table/woodentable/fancy, +/obj/structure/machinery/faxmachine/uscm/command/highcom{ + pixel_y = 8 + }, +/turf/open/floor/wood/ship, +/area/adminlevel/ert_station/fax_response_station) +"oA" = ( +/obj/structure/surface/table/woodentable/fancy, +/obj/structure/machinery/faxmachine/twe/highcom{ + pixel_y = 8 + }, +/turf/open/floor/wood/ship, +/area/adminlevel/ert_station/fax_response_station) +"pu" = ( +/obj/structure/machinery/door_control/brbutton{ + pixel_y = 24; + id = "Faxes" + }, +/turf/open/floor/plating, +/area/adminlevel/ert_station/fax_response_station) +"pH" = ( +/obj/structure/machinery/door/airlock/almayer/maint/reinforced/colony{ + dir = 1 + }, +/obj/structure/machinery/door/poddoor/almayer{ + unacidable = 1; + use_power = 0; + needs_power = 0; + id = "Faxes" + }, +/turf/open/floor/almayer/test_floor4, +/area/adminlevel/ert_station/fax_response_station) +"rV" = ( +/obj/effect/landmark/late_join/responder/uscm/provost, +/turf/open/floor/wood/ship, +/area/adminlevel/ert_station/fax_response_station) +"sx" = ( +/obj/structure/surface/table/woodentable/fancy, +/obj/item/folder/white{ + pixel_x = -6 + }, +/obj/item/folder/white, +/obj/item/folder/white{ + pixel_x = 6 + }, +/turf/open/floor/wood/ship, +/area/adminlevel/ert_station/fax_response_station) +"sH" = ( +/obj/structure/filingcabinet{ + density = 0; + pixel_y = 24; + pixel_x = -7 + }, +/obj/structure/filingcabinet/documentation/highcom/uscm{ + pixel_x = 9; + pixel_y = 24 + }, +/turf/open/floor/wood/ship, +/area/adminlevel/ert_station/fax_response_station) +"tq" = ( +/obj/structure/surface/table/woodentable/fancy, +/obj/item/folder/red{ + pixel_x = 6 + }, +/obj/item/folder/black{ + pixel_x = 12 + }, +/obj/structure/transmitter/rotary{ + pixel_x = -6; + pixel_y = 6; + networks_transmit = list("USCM","Colonist","Fax Responders"); + phone_id = "USCM-HC Communications Officer"; + phone_category = "Comms Relay"; + networks_receive = list("Fax Responders"); + phone_color = "blue" + }, +/turf/open/floor/wood/ship, +/area/adminlevel/ert_station/fax_response_station) +"tM" = ( +/obj/effect/landmark/late_join/responder/clf, +/turf/open/floor/wood/ship, +/area/adminlevel/ert_station/fax_response_station) +"uX" = ( +/obj/structure/surface/table/woodentable/fancy, +/obj/structure/machinery/faxmachine/clf/highcom{ + pixel_y = 8 + }, +/turf/open/floor/wood/ship, +/area/adminlevel/ert_station/fax_response_station) +"vc" = ( +/turf/open/floor/plating, +/area/adminlevel/ert_station/fax_response_station) +"wv" = ( +/obj/effect/landmark/late_join/responder/cmb, +/turf/open/floor/wood/ship, +/area/adminlevel/ert_station/fax_response_station) +"wx" = ( +/obj/structure/surface/table/woodentable/fancy, +/obj/structure/machinery/computer/crew/alt{ + pixel_y = 24; + pixel_x = -12; + faction = "Colonial Marshal"; + name = "CMB monitoring computer" + }, +/obj/item/tool/pen/clicky, +/obj/item/tool/pen/blue/clicky{ + pixel_y = 8 + }, +/obj/item/tool/pen/green/clicky{ + pixel_y = 8; + pixel_x = -8 + }, +/obj/item/tool/pen/red/clicky{ + pixel_x = -8 + }, +/obj/item/paper_bin/wy{ + pixel_y = 6; + pixel_x = 8 + }, +/obj/structure/machinery/computer/crew/alt{ + pixel_y = 24; + pixel_x = 8; + name = "USCM monitoring computer" + }, +/turf/open/floor/wood/ship, +/area/adminlevel/ert_station/fax_response_station) +"wz" = ( +/turf/closed/wall/r_wall/bunker{ + hull = 1 + }, +/area/adminlevel/ert_station/fax_response_station) +"wK" = ( +/obj/structure/machinery/door/airlock/almayer/maint/reinforced/colony, +/obj/structure/machinery/door/poddoor/almayer{ + unacidable = 1; + use_power = 0; + needs_power = 0; + dir = 4; + id = "Faxes" + }, +/turf/open/floor/almayer/test_floor4, +/area/adminlevel/ert_station/fax_response_station) +"xb" = ( +/obj/effect/landmark/late_join/responder/wey_yu, +/turf/open/floor/wood/ship, +/area/adminlevel/ert_station/fax_response_station) +"xc" = ( +/turf/closed/wall/r_wall/chigusa{ + hull = 1 + }, +/area/adminlevel/ert_station/fax_response_station) +"xX" = ( +/turf/closed/wall/r_wall/unmeltable, +/area/adminlevel/ert_station/fax_response_station) +"yv" = ( +/obj/structure/surface/table/woodentable/fancy, +/obj/structure/machinery/computer/crew/alt{ + pixel_y = 24; + pixel_x = -12; + faction = "TWE"; + name = "TWE monitoring computer" + }, +/obj/item/tool/pen/clicky, +/obj/item/tool/pen/blue/clicky{ + pixel_y = 8 + }, +/obj/item/tool/pen/green/clicky{ + pixel_y = 8; + pixel_x = -8 + }, +/obj/item/tool/pen/red/clicky{ + pixel_x = -8 + }, +/obj/item/paper_bin/wy{ + pixel_y = 6; + pixel_x = 8 + }, +/obj/structure/machinery/computer/crew/alt{ + pixel_y = 24; + pixel_x = 8; + name = "USCM monitoring computer" + }, +/turf/open/floor/wood/ship, +/area/adminlevel/ert_station/fax_response_station) +"Ab" = ( +/obj/structure/machinery/computer/crew/alt{ + pixel_y = 24; + name = "USCM monitoring computer" + }, +/obj/item/paper_bin/uscm{ + pixel_x = 8; + pixel_y = 6 + }, +/obj/structure/surface/table/woodentable/fancy, +/turf/open/floor/wood/ship, +/area/adminlevel/ert_station/fax_response_station) +"Ba" = ( +/obj/structure/filingcabinet{ + density = 0; + pixel_y = 24; + pixel_x = 9 + }, +/obj/structure/filingcabinet{ + density = 0; + pixel_y = 24; + pixel_x = -7 + }, +/turf/open/floor/wood/ship, +/area/adminlevel/ert_station/fax_response_station) +"Bp" = ( +/obj/structure/surface/table/woodentable/fancy, +/obj/item/tool/stamp/hos{ + name = "red stamp"; + pixel_y = 8 + }, +/obj/item/tool/stamp/hop{ + name = "blue stamp" + }, +/obj/item/tool/stamp/ce{ + name = "yellow stamp"; + pixel_y = -8 + }, +/turf/open/floor/wood/ship, +/area/adminlevel/ert_station/fax_response_station) +"BC" = ( +/turf/closed/wall/r_wall/biodome/biodome_unmeltable, +/area/adminlevel/ert_station/fax_response_station) +"CT" = ( +/obj/structure/machinery/light{ + dir = 8 + }, +/turf/open/floor/wood/ship, +/area/adminlevel/ert_station/fax_response_station) +"Ei" = ( +/turf/closed/wall/almayer/outer, +/area/adminlevel/ert_station/fax_response_station) +"EI" = ( +/obj/structure/filingcabinet{ + density = 0; + pixel_y = 24; + pixel_x = -7 + }, +/obj/structure/filingcabinet{ + density = 0; + pixel_y = 24; + pixel_x = 9 + }, +/turf/open/floor/wood/ship, +/area/adminlevel/ert_station/fax_response_station) +"EK" = ( +/obj/structure/surface/table/woodentable/fancy, +/obj/structure/machinery/computer/crew/alt{ + pixel_y = 24; + pixel_x = -12; + faction = "Wey-Yu"; + name = "WY monitoring computer" + }, +/obj/item/tool/pen/clicky, +/obj/item/tool/pen/blue/clicky{ + pixel_y = 8 + }, +/obj/item/tool/pen/green/clicky{ + pixel_y = 8; + pixel_x = -8 + }, +/obj/item/tool/pen/red/clicky{ + pixel_x = -8 + }, +/obj/item/paper_bin/wy{ + pixel_y = 6; + pixel_x = 8 + }, +/obj/structure/machinery/computer/crew/alt{ + pixel_y = 24; + pixel_x = 8; + name = "USCM monitoring computer" + }, +/turf/open/floor/wood/ship, +/area/adminlevel/ert_station/fax_response_station) +"FB" = ( +/obj/structure/surface/table/woodentable/fancy, +/obj/item/folder/red{ + pixel_x = 6 + }, +/obj/item/folder/black{ + pixel_x = 12 + }, +/obj/structure/transmitter/rotary{ + pixel_x = -6; + pixel_y = 6; + networks_transmit = list("USCM","Colonist","Wey-Yu","PMC","Fax Responders"); + phone_id = "WY Communications Executive"; + phone_category = "Comms Relay"; + networks_receive = list("Fax Responders") + }, +/turf/open/floor/wood/ship, +/area/adminlevel/ert_station/fax_response_station) +"FD" = ( +/obj/structure/surface/table/woodentable/fancy, +/obj/structure/machinery/faxmachine/corporate/highcom{ + pixel_y = 8 + }, +/obj/structure/machinery/computer/crew/alt{ + pixel_y = 24; + faction = "PMC"; + name = "PMC monitoring computer" + }, +/turf/open/floor/wood/ship, +/area/adminlevel/ert_station/fax_response_station) +"IJ" = ( +/obj/structure/filingcabinet{ + density = 0; + pixel_y = 24; + pixel_x = -7 + }, +/obj/structure/filingcabinet/documentation/highcom/wy{ + pixel_x = 9; + pixel_y = 24 + }, +/turf/open/floor/wood/ship, +/area/adminlevel/ert_station/fax_response_station) +"Nb" = ( +/obj/structure/surface/table/woodentable/fancy, +/obj/item/folder/red{ + pixel_x = 6 + }, +/obj/item/folder/black{ + pixel_x = 12 + }, +/obj/structure/transmitter/rotary{ + pixel_x = -6; + pixel_y = 6; + networks_transmit = list("USCM","Colonist","Colonial Marshal","Fax Responders"); + phone_id = "CMB Deputy Operations Officer"; + phone_category = "Comms Relay"; + networks_receive = list("Fax Responders"); + phone_color = "green" + }, +/turf/open/floor/wood/ship, +/area/adminlevel/ert_station/fax_response_station) +"NP" = ( +/obj/structure/machinery/light, +/obj/structure/surface/table/woodentable/fancy, +/obj/item/folder/red{ + pixel_x = 6 + }, +/obj/item/folder/black{ + pixel_x = 12 + }, +/obj/structure/transmitter/rotary{ + pixel_x = -6; + pixel_y = 6; + networks_transmit = list("USCM","Colonist","Fax Responders"); + phone_id = "Provost Communications Officer"; + phone_category = "Comms Relay"; + networks_receive = list("Fax Responders"); + phone_color = "red" + }, +/turf/open/floor/wood/ship, +/area/adminlevel/ert_station/fax_response_station) +"Pn" = ( +/obj/structure/window/framed/almayer/hull, +/turf/open/floor/wood/ship, +/area/adminlevel/ert_station/fax_response_station) +"Rh" = ( +/obj/structure/surface/table/woodentable/fancy, +/obj/structure/machinery/computer/crew/alt{ + pixel_y = 24; + pixel_x = -12; + faction = "CLF"; + name = "CLF monitoring computer" + }, +/obj/item/tool/pen/clicky, +/obj/item/tool/pen/blue/clicky{ + pixel_y = 8 + }, +/obj/item/tool/pen/green/clicky{ + pixel_y = 8; + pixel_x = -8 + }, +/obj/item/tool/pen/red/clicky{ + pixel_x = -8 + }, +/obj/item/paper_bin/wy{ + pixel_y = 6; + pixel_x = 8 + }, +/obj/structure/machinery/computer/crew/alt{ + pixel_y = 24; + pixel_x = 8; + name = "USCM monitoring computer" + }, +/turf/open/floor/wood/ship, +/area/adminlevel/ert_station/fax_response_station) +"ST" = ( +/obj/structure/bed/chair/comfy/teal{ + dir = 4 + }, +/turf/open/floor/wood/ship, +/area/adminlevel/ert_station/fax_response_station) +"UB" = ( +/obj/structure/surface/table/woodentable/fancy, +/obj/structure/machinery/faxmachine/uscm/brig/provost{ + pixel_y = 8 + }, +/turf/open/floor/wood/ship, +/area/adminlevel/ert_station/fax_response_station) +"Vs" = ( +/obj/structure/surface/table/woodentable/fancy, +/obj/structure/machinery/computer/cameras/almayer{ + dir = 8; + admin_console = 1; + network = list("ARES","Almayer","Research","Containment","Containment Hidden"); + pixel_x = 16; + layer = 2.99; + name = "USS Almayer Cameras"; + pixel_y = -6; + colony_camera_mapload = 0 + }, +/obj/structure/machinery/computer/cameras/almayer{ + dir = 8; + admin_console = 1; + network = list("Overwatch"); + pixel_x = 16; + pixel_y = 8; + name = "Overwatch Cameras"; + colony_camera_mapload = 0 + }, +/obj/item/tool/pen/multicolor/fountain, +/turf/open/floor/wood/ship, +/area/adminlevel/ert_station/fax_response_station) +"VV" = ( +/obj/effect/landmark/late_join/responder/upp, +/turf/open/floor/wood/ship, +/area/adminlevel/ert_station/fax_response_station) +"Wo" = ( +/obj/structure/surface/table/woodentable/fancy, +/obj/structure/machinery/computer/crew/alt{ + pixel_y = 24; + name = "USCM monitoring computer" + }, +/obj/item/paper_bin/uscm{ + pixel_x = 8; + pixel_y = 6 + }, +/turf/open/floor/wood/ship, +/area/adminlevel/ert_station/fax_response_station) +"Wp" = ( +/obj/structure/surface/table/woodentable/fancy, +/obj/structure/machinery/faxmachine/upp/highcom{ + pixel_y = 8 + }, +/turf/open/floor/wood/ship, +/area/adminlevel/ert_station/fax_response_station) +"XZ" = ( +/obj/effect/landmark/late_join/responder/twe, +/turf/open/floor/wood/ship, +/area/adminlevel/ert_station/fax_response_station) +"Yv" = ( +/obj/structure/surface/table/woodentable/fancy, +/obj/item/folder/red{ + pixel_x = 6 + }, +/obj/item/folder/black{ + pixel_x = 12 + }, +/obj/structure/transmitter/rotary{ + pixel_x = -6; + pixel_y = 6; + networks_transmit = list("USCM","Colonist","CLF","Fax Responders"); + phone_id = "CLF Information Correspondant"; + phone_category = "Comms Relay"; + networks_receive = list("Fax Responders"); + phone_color = "orange" + }, +/turf/open/floor/wood/ship, +/area/adminlevel/ert_station/fax_response_station) +"Yy" = ( +/turf/open/space/basic, +/area/space) +"YO" = ( +/obj/effect/landmark/late_join/responder/uscm, +/turf/open/floor/wood/ship, +/area/adminlevel/ert_station/fax_response_station) +"YR" = ( +/obj/structure/machinery/cm_vending/sorted/marine_food{ + pixel_y = 16; + density = 0 + }, +/obj/structure/machinery/cm_vending/sorted/medical/wall_med{ + pixel_x = -24 + }, +/turf/open/floor/wood/ship, +/area/adminlevel/ert_station/fax_response_station) + +(1,1,1) = {" +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +"} +(2,1,1) = {" +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +"} +(3,1,1) = {" +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +"} +(4,1,1) = {" +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +"} +(5,1,1) = {" +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +"} +(6,1,1) = {" +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Ei +Ei +Ei +Ei +Ei +Ei +Ei +Ei +Ei +Ei +Ei +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +"} +(7,1,1) = {" +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Ei +YR +CT +rV +fr +Ei +nB +CT +YO +fr +Ei +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +"} +(8,1,1) = {" +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +xX +xX +Ei +fo +gu +gu +gu +Pn +sH +gu +gu +gu +Ei +xX +xX +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +"} +(9,1,1) = {" +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +xX +vc +pH +gu +gu +gu +gu +Pn +gu +gu +gu +gu +pH +vc +xX +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +"} +(10,1,1) = {" +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +xX +vc +Ei +UB +ST +gu +NP +Pn +ov +ST +gu +tq +Ei +vc +xX +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +"} +(11,1,1) = {" +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +xX +vc +Ei +Wo +bT +Bp +sx +Ei +Ab +bT +Bp +sx +Ei +vc +xX +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +"} +(12,1,1) = {" +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +xX +vc +Ei +Ei +Ei +Ei +Ei +Ei +Ei +Ei +Ei +Ei +Ei +vc +xX +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +"} +(13,1,1) = {" +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +xX +vc +vc +vc +vc +vc +vc +vc +vc +vc +vc +vc +vc +vc +xX +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +"} +(14,1,1) = {" +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +xX +xX +xX +xX +xX +xX +xX +vc +xX +xX +xX +xX +xX +xX +xX +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +"} +(15,1,1) = {" +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +xX +BC +BC +BC +BC +BC +BC +vc +wz +wz +wz +wz +wz +wz +xX +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +"} +(16,1,1) = {" +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +xX +BC +YR +CT +xb +fr +BC +vc +wz +YR +CT +VV +fr +wz +xX +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +"} +(17,1,1) = {" +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +xX +BC +IJ +gu +gu +gu +BC +vc +wz +Ba +gu +gu +gu +wz +xX +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +"} +(18,1,1) = {" +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +xX +BC +gu +gu +gu +gu +pH +vc +pH +gu +gu +gu +gu +wz +xX +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +"} +(19,1,1) = {" +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +xX +BC +FD +ST +gu +FB +BC +vc +wz +Wp +ST +gu +am +wz +xX +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +"} +(20,1,1) = {" +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +xX +BC +EK +im +Bp +sx +BC +vc +wz +id +Vs +Bp +sx +wz +xX +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +"} +(21,1,1) = {" +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +xX +BC +BC +BC +BC +BC +BC +vc +wz +wz +wz +wz +wz +wz +xX +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +"} +(22,1,1) = {" +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +xX +xX +xX +xX +xX +xX +xX +pu +xX +xX +xX +xX +xX +xX +xX +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +"} +(23,1,1) = {" +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +xX +xX +xX +xX +xX +xX +xX +vc +xX +xX +xX +xX +xX +xX +xX +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +"} +(24,1,1) = {" +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +xX +jh +jh +jh +jh +jh +jh +vc +xc +xc +xc +xc +xc +xc +xX +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +"} +(25,1,1) = {" +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +xX +jh +YR +CT +tM +fr +jh +vc +xc +YR +CT +XZ +fr +xc +xX +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +"} +(26,1,1) = {" +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +xX +jh +Ba +gu +gu +gu +jh +vc +xc +Ba +gu +gu +gu +xc +xX +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +"} +(27,1,1) = {" +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +xX +jh +gu +gu +gu +gu +pH +vc +pH +gu +gu +gu +gu +xc +xX +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +"} +(28,1,1) = {" +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +xX +jh +uX +ST +gu +Yv +jh +vc +xc +oA +ST +gu +jV +xc +xX +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +"} +(29,1,1) = {" +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +xX +jh +Rh +Vs +Bp +sx +jh +vc +xc +yv +Vs +Bp +sx +xc +xX +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +"} +(30,1,1) = {" +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +xX +jh +jh +jh +jh +jh +jh +vc +xc +xc +xc +xc +xc +xc +xX +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +"} +(31,1,1) = {" +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +xX +xX +xX +xX +xX +xX +xX +wK +xX +xX +xX +xX +xX +xX +xX +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +"} +(32,1,1) = {" +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +xX +nB +CT +wv +fr +xX +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +"} +(33,1,1) = {" +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +xX +EI +gu +gu +gu +xX +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +"} +(34,1,1) = {" +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +xX +gu +gu +gu +gu +xX +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +"} +(35,1,1) = {" +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +xX +ny +ST +gu +Nb +xX +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +"} +(36,1,1) = {" +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +xX +wx +Vs +Bp +sx +xX +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +"} +(37,1,1) = {" +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +xX +xX +xX +xX +xX +xX +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +"} +(38,1,1) = {" +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +"} +(39,1,1) = {" +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +"} +(40,1,1) = {" +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +"} +(41,1,1) = {" +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +"} +(42,1,1) = {" +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +"} +(43,1,1) = {" +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +"} +(44,1,1) = {" +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +"} +(45,1,1) = {" +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +Yy +"} diff --git a/html/images/ColonialSpaceGruntsEZ.png b/paper_reference_files/ColonialSpaceGruntsEZ.png similarity index 100% rename from html/images/ColonialSpaceGruntsEZ.png rename to paper_reference_files/ColonialSpaceGruntsEZ.png diff --git a/paper_reference_files/background_dark.jpg b/paper_reference_files/background_dark.jpg new file mode 100644 index 000000000000..7e6318e55dd1 Binary files /dev/null and b/paper_reference_files/background_dark.jpg differ diff --git a/paper_reference_files/background_dark2.jpg b/paper_reference_files/background_dark2.jpg new file mode 100644 index 000000000000..3f8bcbadecee Binary files /dev/null and b/paper_reference_files/background_dark2.jpg differ diff --git a/paper_reference_files/background_dark_fractal.png b/paper_reference_files/background_dark_fractal.png new file mode 100644 index 000000000000..772f316f8c62 Binary files /dev/null and b/paper_reference_files/background_dark_fractal.png differ diff --git a/html/images/faxbackground.jpg b/paper_reference_files/background_white.jpg similarity index 100% rename from html/images/faxbackground.jpg rename to paper_reference_files/background_white.jpg diff --git a/html/images/cmblogo.png b/paper_reference_files/logo_cmb.png similarity index 100% rename from html/images/cmblogo.png rename to paper_reference_files/logo_cmb.png diff --git a/paper_reference_files/logo_provost.png b/paper_reference_files/logo_provost.png new file mode 100644 index 000000000000..39f3c124e2c5 Binary files /dev/null and b/paper_reference_files/logo_provost.png differ diff --git a/html/images/upplogo.png b/paper_reference_files/logo_upp.png similarity index 100% rename from html/images/upplogo.png rename to paper_reference_files/logo_upp.png diff --git a/paper_reference_files/logo_uscm.png b/paper_reference_files/logo_uscm.png new file mode 100644 index 000000000000..81f15fff2d5c Binary files /dev/null and b/paper_reference_files/logo_uscm.png differ diff --git a/paper_reference_files/logo_wy.png b/paper_reference_files/logo_wy.png new file mode 100644 index 000000000000..59f38efb090c Binary files /dev/null and b/paper_reference_files/logo_wy.png differ diff --git a/paper_reference_files/logo_wy_inv.png b/paper_reference_files/logo_wy_inv.png new file mode 100644 index 000000000000..1359b64763c4 Binary files /dev/null and b/paper_reference_files/logo_wy_inv.png differ diff --git a/paper_reference_files/pmc_dispatch.png b/paper_reference_files/pmc_dispatch.png new file mode 100644 index 000000000000..f5c3e1c7c77c Binary files /dev/null and b/paper_reference_files/pmc_dispatch.png differ diff --git a/tgui/packages/tgui/interfaces/FaxMachine.jsx b/tgui/packages/tgui/interfaces/FaxMachine.jsx index e374bf4b210a..11da63613736 100644 --- a/tgui/packages/tgui/interfaces/FaxMachine.jsx +++ b/tgui/packages/tgui/interfaces/FaxMachine.jsx @@ -17,7 +17,7 @@ export const FaxMachine = () => { const { idcard } = data; const body = idcard ? : ; const windowWidth = idcard ? 600 : 400; - const windowHeight = idcard ? 270 : 215; + const windowHeight = idcard ? 295 : 215; return ( @@ -27,10 +27,15 @@ export const FaxMachine = () => { }; const FaxMain = (props) => { + const { data } = useBackend(); + const { machine_id_tag } = data; return ( <> + + The machine identification is {machine_id_tag} + ); }; diff --git a/tgui/packages/tgui/interfaces/Orbit/index.tsx b/tgui/packages/tgui/interfaces/Orbit/index.tsx index 36ceb6359cde..8c2d673145d3 100644 --- a/tgui/packages/tgui/interfaces/Orbit/index.tsx +++ b/tgui/packages/tgui/interfaces/Orbit/index.tsx @@ -283,6 +283,7 @@ const ObservableContent = () => { const { data } = useBackend(); const { humans = [], + responders = [], marines = [], survivors = [], xenos = [], @@ -371,6 +372,11 @@ const ObservableContent = () => { section={marshal} title="Colonial Marshal Bureau" /> + diff --git a/tgui/packages/tgui/interfaces/Orbit/types.ts b/tgui/packages/tgui/interfaces/Orbit/types.ts index ca21898287d0..f72396b3f344 100644 --- a/tgui/packages/tgui/interfaces/Orbit/types.ts +++ b/tgui/packages/tgui/interfaces/Orbit/types.ts @@ -7,6 +7,7 @@ export type OrbitData = { survivors: Observable[]; xenos: Observable[]; ert_members: Observable[]; + responders: Observable[]; upp: Observable[]; twe: Observable[]; clf: Observable[];