diff --git a/code/__DEFINES/colours.dm b/code/__DEFINES/colours.dm index e9a03a6382da..93d1e082c66a 100644 --- a/code/__DEFINES/colours.dm +++ b/code/__DEFINES/colours.dm @@ -150,3 +150,8 @@ #define COLOR_G_ICE "#C7EDDE" //faded cyan #define COLOR_G_DES "#FF7C1C" //bright orange #define COLOR_G_JUNG "#64AA6E" //faded green + +/// Gun muzzle colors +#define COLOR_LASER_RED "#FF8D8D" +#define COLOR_MUZZLE_BLUE "#2CB2E8" + diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index cf6d6c64d9a9..2ab36d51d297 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -105,6 +105,7 @@ #define INTERRUPT_ALL_OUT_OF_RANGE (INTERRUPT_ALL & (~INTERRUPT_DIFF_TURF)|INTERRUPT_OUT_OF_RANGE) #define INTERRUPT_MOVED (INTERRUPT_DIFF_LOC|INTERRUPT_DIFF_TURF|INTERRUPT_RESIST) #define INTERRUPT_NO_NEEDHAND (INTERRUPT_ALL & (~INTERRUPT_NEEDHAND)) +#define INTERRUPT_NO_FLOORED (INTERRUPT_ALL & (~INTERRUPT_KNOCKED_DOWN)) #define INTERRUPT_INCAPACITATED (INTERRUPT_UNCONSCIOUS|INTERRUPT_KNOCKED_DOWN|INTERRUPT_STUNNED|INTERRUPT_RESIST) #define INTERRUPT_CLICK (INTERRUPT_LCLICK|INTERRUPT_RCLICK|INTERRUPT_SHIFTCLICK|INTERRUPT_ALTCLICK|INTERRUPT_CTRLCLICK|INTERRUPT_MIDDLECLICK|INTERRUPT_RESIST) diff --git a/code/__DEFINES/tgs.dm b/code/__DEFINES/tgs.dm index 17464b44dae8..4766b3dfe661 100644 --- a/code/__DEFINES/tgs.dm +++ b/code/__DEFINES/tgs.dm @@ -1,18 +1,19 @@ // tgstation-server DMAPI +// The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in IETF RFC 2119. -#define TGS_DMAPI_VERSION "7.1.3" +#define TGS_DMAPI_VERSION "7.2.1" // All functions and datums outside this document are subject to change with any version and should not be relied on. // CONFIGURATION -/// Create this define if you want to do TGS configuration outside of this file. +/// Consumers SHOULD create this define if you want to do TGS configuration outside of this file. #ifndef TGS_EXTERNAL_CONFIGURATION -// Comment this out once you've filled in the below. +// Consumers MUST comment this out once you've filled in the below and are not using [TGS_EXTERNAL_CONFIGURATION]. #error TGS API unconfigured -// Uncomment this if you wish to allow the game to interact with TGS 3.. +// Consumers MUST uncomment this if you wish to allow the game to interact with TGS version 3. // This will raise the minimum required security level of your game to TGS_SECURITY_TRUSTED due to it utilizing call()(). //#define TGS_V3_API @@ -52,7 +53,7 @@ #ifndef TGS_FILE2TEXT_NATIVE #ifdef file2text -#error Your codebase is re-defining the BYOND proc file2text. The DMAPI requires the native version to read the result of world.Export(). You can fix this by adding "#define TGS_FILE2TEXT_NATIVE file2text" before your override of file2text to allow the DMAPI to use the native version. This will only be used for world.Export(), not regular file accesses +#error Your codebase is re-defining the BYOND proc file2text. The DMAPI requires the native version to read the result of world.Export(). You SHOULD fix this by adding "#define TGS_FILE2TEXT_NATIVE file2text" before your override of file2text to allow the DMAPI to use the native version. This will only be used for world.Export(), not regular file accesses #endif #define TGS_FILE2TEXT_NATIVE file2text #endif @@ -152,16 +153,17 @@ //REQUIRED HOOKS /** - * Call this somewhere in [/world/proc/New] that is always run. This function may sleep! + * Consumers MUST call this somewhere in [/world/proc/New] that is always run. This function may sleep! * * * event_handler - Optional user defined [/datum/tgs_event_handler]. * * minimum_required_security_level: The minimum required security level to run the game in which the DMAPI is integrated. Can be one of [TGS_SECURITY_ULTRASAFE], [TGS_SECURITY_SAFE], or [TGS_SECURITY_TRUSTED]. + * * http_handler - Optional user defined [/datum/tgs_http_handler]. */ -/world/proc/TgsNew(datum/tgs_event_handler/event_handler, minimum_required_security_level = TGS_SECURITY_ULTRASAFE) +/world/proc/TgsNew(datum/tgs_event_handler/event_handler, minimum_required_security_level = TGS_SECURITY_ULTRASAFE, datum/tgs_http_handler/http_handler) return /** - * Call this when your initializations are complete and your game is ready to play before any player interactions happen. + * Consumers MUST call this when world initializations are complete and the game is ready to play before any player interactions happen. * * This may use [/world/var/sleep_offline] to make this happen so ensure no changes are made to it while this call is running. * Afterwards, consider explicitly setting it to what you want to avoid this BYOND bug: http://www.byond.com/forum/post/2575184 @@ -170,12 +172,10 @@ /world/proc/TgsInitializationComplete() return -/// Put this at the start of [/world/proc/Topic]. +/// Consumers MUST run this macro at the start of [/world/proc/Topic]. #define TGS_TOPIC var/tgs_topic_return = TgsTopic(args[1]); if(tgs_topic_return) return tgs_topic_return -/** - * Call this as late as possible in [world/proc/Reboot] (BEFORE ..()). - */ +/// Consumers MUST call this as late as possible in [world/proc/Reboot] (BEFORE ..()). /world/proc/TgsReboot() return @@ -269,7 +269,7 @@ /// The [/datum/tgs_chat_channel] the user was from. var/datum/tgs_chat_channel/channel -/// User definable handler for TGS events. +/// User definable handler for TGS events This abstract version SHOULD be overridden to be used. /datum/tgs_event_handler /// If the handler receieves [TGS_EVENT_HEALTH_CHECK] events. var/receive_health_checks = FALSE @@ -283,7 +283,41 @@ set waitfor = FALSE return -/// User definable chat command. +/// User definable handler for HTTP calls. This abstract version MUST be overridden to be used. +/datum/tgs_http_handler + +/** + * User definable callback for executing HTTP GET requests. + * MUST perform BYOND sleeps while the request is in flight. + * MUST return a [/datum/tgs_http_result]. + * SHOULD log its own errors + * + * url - The full URL to execute the GET request for including query parameters. + */ +/datum/tgs_http_handler/proc/PerformGet(url) + CRASH("[type]/PerformGet not implemented!") + +/// Result of a [/datum/tgs_http_handler] call. MUST NOT be overridden. +/datum/tgs_http_result + /// HTTP response as text + var/response_text + /// Boolean request success flag. Set for any 2XX response code. + var/success + +/** + * Create a [/datum/tgs_http_result]. + * + * * response_text - HTTP response as text. Must be provided in New(). + * * success - Boolean request success flag. Set for any 2XX response code. Must be provided in New(). + */ +/datum/tgs_http_result/New(response_text, success) + if(response_text && !istext(response_text)) + CRASH("response_text was not text!") + + src.response_text = response_text + src.success = success + +/// User definable chat command. This abstract version MUST be overridden to be used. /datum/tgs_chat_command /// The string to trigger this command on a chat bot. e.g `@bot name ...` or `!tgs name ...`. var/name = "" @@ -296,21 +330,27 @@ /** * Process command activation. Should return a [/datum/tgs_message_content] to respond to the issuer with. + * MUST be implemented * - * sender - The [/datum/tgs_chat_user] who issued the command. - * params - The trimmed string following the command `/datum/tgs_chat_command/var/name]. + * * sender - The [/datum/tgs_chat_user] who issued the command. + * * params - The trimmed string following the command `/datum/tgs_chat_command/var/name]. */ /datum/tgs_chat_command/proc/Run(datum/tgs_chat_user/sender, params) CRASH("[type] has no implementation for Run()") -/// User definable chat message. +/// User definable chat message. MUST NOT be overridden. /datum/tgs_message_content - /// The tring content of the message. Must be provided in New(). + /// The string content of the message. Must be provided in New(). var/text /// The [/datum/tgs_chat_embed] to embed in the message. Not supported on all chat providers. var/datum/tgs_chat_embed/structure/embed +/** + * Create a [/datum/tgs_message_content]. + * + * * text - The string content of the message. + */ /datum/tgs_message_content/New(text) ..() if(!istext(text)) @@ -319,7 +359,7 @@ src.text = text -/// User definable chat embed. Currently mirrors Discord chat embeds. See https://discord.com/developers/docs/resources/channel#embed-object-embed-structure for details. +/// User definable chat embed. Currently mirrors Discord chat embeds. See https://discord.com/developers/docs/resources/message#embed-object for details. /datum/tgs_chat_embed/structure var/title var/description @@ -331,13 +371,13 @@ /// Colour must be #AARRGGBB or #RRGGBB hex string. var/colour - /// See https://discord.com/developers/docs/resources/channel#embed-object-embed-image-structure for details. + /// See https://discord.com/developers/docs/resources/message#embed-object-embed-image-structure for details. var/datum/tgs_chat_embed/media/image - /// See https://discord.com/developers/docs/resources/channel#embed-object-embed-thumbnail-structure for details. + /// See https://discord.com/developers/docs/resources/message#embed-object-embed-thumbnail-structure for details. var/datum/tgs_chat_embed/media/thumbnail - /// See https://discord.com/developers/docs/resources/channel#embed-object-embed-image-structure for details. + /// See https://discord.com/developers/docs/resources/message#embed-object-embed-video-structure for details. var/datum/tgs_chat_embed/media/video var/datum/tgs_chat_embed/footer/footer @@ -346,7 +386,7 @@ var/list/datum/tgs_chat_embed/field/fields -/// Common datum for similar discord embed medias. +/// Common datum for similar Discord embed medias. /datum/tgs_chat_embed/media /// Must be set in New(). var/url @@ -354,6 +394,7 @@ var/height var/proxy_url +/// Create a [/datum/tgs_chat_embed]. /datum/tgs_chat_embed/media/New(url) ..() if(!istext(url)) @@ -361,13 +402,14 @@ src.url = url -/// See https://discord.com/developers/docs/resources/channel#embed-object-embed-footer-structure for details. +/// See https://discord.com/developers/docs/resources/message#embed-object-embed-footer-structure for details. /datum/tgs_chat_embed/footer /// Must be set in New(). var/text var/icon_url var/proxy_icon_url +/// Create a [/datum/tgs_chat_embed/footer]. /datum/tgs_chat_embed/footer/New(text) ..() if(!istext(text)) @@ -375,16 +417,17 @@ src.text = text -/// See https://discord.com/developers/docs/resources/channel#embed-object-embed-provider-structure for details. +/// See https://discord.com/developers/docs/resources/message#embed-object-embed-provider-structure for details. /datum/tgs_chat_embed/provider var/name var/url -/// See https://discord.com/developers/docs/resources/channel#embed-object-embed-author-structure for details. Must have name set in New(). +/// See https://discord.com/developers/docs/resources/message#embed-object-embed-author-structure for details. Must have name set in New(). /datum/tgs_chat_embed/provider/author var/icon_url var/proxy_icon_url +/// Create a [/datum/tgs_chat_embed/footer]. /datum/tgs_chat_embed/provider/author/New(name) ..() if(!istext(name)) @@ -392,12 +435,15 @@ src.name = name -/// See https://discord.com/developers/docs/resources/channel#embed-object-embed-field-structure for details. Must have name and value set in New(). +/// See https://discord.com/developers/docs/resources/message#embed-object-embed-field-structure for details. /datum/tgs_chat_embed/field + /// Must be set in New(). var/name + /// Must be set in New(). var/value var/is_inline +/// Create a [/datum/tgs_chat_embed/field]. /datum/tgs_chat_embed/field/New(name, value) ..() if(!istext(name)) diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm index e6b9c4c4b9ee..4d5fac9ba17b 100644 --- a/code/__DEFINES/traits.dm +++ b/code/__DEFINES/traits.dm @@ -232,9 +232,15 @@ /// If the mob is able to use the vulture rifle or spotting scope #define TRAIT_VULTURE_USER "t_vulture_user" /// If the mob is currently loading a tutorial -#define TRAIT_IN_TUTORIAL "t_IN_TUTORIAL" +#define TRAIT_IN_TUTORIAL "t_in_tutorial" /// If the mob is cloaked in any form #define TRAIT_CLOAKED "t_cloaked" +/// If the mob claimed a specialist set from a vendor +#define TRAIT_SPEC_VENDOR "t_spec_vendor" +/// If the mob claimed a specialist set from a kit +#define TRAIT_SPEC_KIT "t_spec_kit" +/// What spec set the mob has claimed, if any +#define TRAIT_SPEC(spec_type) "t_spec_[spec_type]" /// If the mob won't drop items held in face slot when downed #define TRAIT_IRON_TEETH "t_iron_teeth" @@ -315,6 +321,8 @@ GLOBAL_LIST_INIT(mob_traits, list( TRAIT_ABILITY_BURROWED, TRAIT_VULTURE_USER, TRAIT_IN_TUTORIAL, + TRAIT_SPEC_KIT, + TRAIT_SPEC_VENDOR, )) /* @@ -354,9 +362,9 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_CANNOT_EAT" = TRAIT_CANNOT_EAT, "TRAIT_VULTURE_USER" = TRAIT_VULTURE_USER, "TRAIT_CLOAKED" = TRAIT_CLOAKED, + "TRAIT_SPEC_KIT" = TRAIT_SPEC_KIT, + "TRAIT_SPEC_VENDOR" = TRAIT_SPEC_VENDOR, ), -// /mob/living/carbon/human = list( -// ), /mob/living/carbon/xenomorph = list( "TRAIT_ABILITY_NO_PLASMA_TRANSFER" = TRAIT_ABILITY_NO_PLASMA_TRANSFER, "TRAIT_ABILITY_OVIPOSITOR" = TRAIT_ABILITY_OVIPOSITOR, diff --git a/code/_globalvars/global_lists.dm b/code/_globalvars/global_lists.dm index d2165fecc9b1..dadf5d597255 100644 --- a/code/_globalvars/global_lists.dm +++ b/code/_globalvars/global_lists.dm @@ -544,26 +544,8 @@ GLOBAL_REFERENCE_LIST_INDEXED(all_skills, /datum/skill, skill_name) // Timelock GLOBAL_LIST_EMPTY(timelocks) - -//the global list of specialist kits that haven't been claimed yet. -GLOBAL_LIST_INIT(available_specialist_sets, list( - "Scout Set", - "Sniper Set", - "Anti-materiel Sniper Set", - "Demolitionist Set", - "Heavy Grenadier Set", - "Pyro Set" - )) - -//Similar thing, but used in /obj/item/spec_kit -GLOBAL_LIST_INIT(available_specialist_kit_boxes, list( - "Pyro" = 2, - "Grenadier" = 2, - "Sniper" = 2, - "Scout" = 2, - "Demo" = 2, - "Anti-materiel Sniper" = 2, - )) +GLOBAL_LIST_EMPTY_TYPED(specialist_set_name_dict, /datum/specialist_set) +GLOBAL_LIST_INIT_TYPED(specialist_set_datums, /datum/specialist_set, setup_specialist_sets()) /proc/init_global_referenced_datums() init_keybindings() diff --git a/code/datums/custom_hud.dm b/code/datums/custom_hud.dm index c9894398477a..9a009532ef35 100644 --- a/code/datums/custom_hud.dm +++ b/code/datums/custom_hud.dm @@ -115,10 +115,11 @@ /datum/custom_hud/dark ui_style_icon = 'icons/mob/hud/human_dark.dmi' - UI_OXYGEN_LOC = "EAST-2:16,14:15" - UI_NUTRITION_LOC = "EAST-2:33,14:15" - UI_TEMP_LOC = "EAST-1:26,15:-7" - UI_HEALTH_LOC = "EAST-1:27,15:-8" + UI_FRAME_LOC = "EAST-3:0,NORTH-1:15" + UI_OXYGEN_LOC = "EAST-2:16,NORTH-1:15" + UI_NUTRITION_LOC = "EAST-2:33,NORTH-1:15" + UI_TEMP_LOC = "EAST-1:26,NORTH-0:-7" + UI_HEALTH_LOC = "EAST-1:27,NORTH-0:-8" UI_SL_LOCATOR_LOC = "EAST-1:27,12:22" /datum/custom_hud/dark/get_status_loc(placement) diff --git a/code/game/jobs/job/job.dm b/code/game/jobs/job/job.dm index 640866db8ca2..0323d2a02733 100644 --- a/code/game/jobs/job/job.dm +++ b/code/game/jobs/job/job.dm @@ -318,3 +318,7 @@ if(user.client.check_whitelist_status(flags_whitelist)) return TRUE + +/// Called when the job owner enters deep cryogenic storage +/datum/job/proc/on_cryo(mob/living/carbon/human/cryoing) + return diff --git a/code/game/jobs/job/marine/squad/specialist.dm b/code/game/jobs/job/marine/squad/specialist.dm index e69241cdc70b..38f7a38cbedc 100644 --- a/code/game/jobs/job/marine/squad/specialist.dm +++ b/code/game/jobs/job/marine/squad/specialist.dm @@ -23,6 +23,11 @@ total_positions_so_far = positions return positions +/datum/job/marine/specialist/on_cryo(mob/living/carbon/human/cryoing) + var/specialist_set = get_specialist_set(cryoing) + if(isnull(specialist_set)) + return + GLOB.specialist_set_datums[specialist_set].refund_set(cryoing) /datum/job/marine/specialist/whiskey title = JOB_WO_SQUAD_SPECIALIST diff --git a/code/game/machinery/Beacon.dm b/code/game/machinery/Beacon.dm deleted file mode 100644 index 44bd9907c15d..000000000000 --- a/code/game/machinery/Beacon.dm +++ /dev/null @@ -1,54 +0,0 @@ -/obj/structure/machinery/bluespace_beacon - - icon = 'icons/obj/objects.dmi' - icon_state = "floor_beaconf" - name = "Bluespace Gigabeacon" - desc = "A device that draws power from bluespace and creates a permanent tracking beacon." - level = 1 // underfloor - layer = UNDERFLOOR_OBJ_LAYER - anchored = TRUE - use_power = USE_POWER_IDLE - idle_power_usage = 0 - var/obj/item/device/radio/beacon/Beacon - -/obj/structure/machinery/bluespace_beacon/Initialize(mapload, ...) - . = ..() - var/turf/T = loc - Beacon = new /obj/item/device/radio/beacon - Beacon.invisibility = INVISIBILITY_MAXIMUM - Beacon.forceMove(T) - - hide(T.intact_tile) - -/obj/structure/machinery/bluespace_beacon/Destroy() - QDEL_NULL(Beacon) - return ..() - -/obj/structure/machinery/bluespace_beacon/hide(intact) - // update the invisibility and icon - invisibility = intact ? 101 : 0 - updateicon() - - // update the icon_state -/obj/structure/machinery/bluespace_beacon/proc/updateicon() - var/state="floor_beacon" - - if(invisibility) - icon_state = "[state]f" - - else - icon_state = "[state]" - -/obj/structure/machinery/bluespace_beacon/process() - if(!Beacon) - var/turf/T = loc - Beacon = new /obj/item/device/radio/beacon - Beacon.invisibility = INVISIBILITY_MAXIMUM - Beacon.forceMove(T) - if(Beacon) - if(Beacon.loc != loc) - Beacon.forceMove(loc) - - updateicon() - - diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm index 658e2aa150f3..45a57eb96392 100644 --- a/code/game/machinery/cryopod.dm +++ b/code/game/machinery/cryopod.dm @@ -324,28 +324,10 @@ GLOBAL_LIST_INIT(frozen_items, list(SQUAD_MARINE_1 = list(), SQUAD_MARINE_2 = li var/datum/job/job = GET_MAPPED_ROLE(occupant.job) if(ishuman(occupant)) var/mob/living/carbon/human/H = occupant + job.on_cryo(H) if(H.assigned_squad) var/datum/squad/S = H.assigned_squad S.forget_marine_in_squad(H) - if(istype(job, /datum/job/marine/specialist)) - //we make the set this specialist took if any available again - if(H.skills) - var/set_name - switch(H.skills.get_skill_level(SKILL_SPEC_WEAPONS)) - if(SKILL_SPEC_ROCKET) - set_name = "Demolitionist Set" - if(SKILL_SPEC_GRENADIER) - set_name = "Heavy Grenadier Set" - if(SKILL_SPEC_PYRO) - set_name = "Pyro Set" - if(SKILL_SPEC_SCOUT) - set_name = "Scout Set" - if(SKILL_SPEC_SNIPER) - set_name = "Sniper Set" - GLOB.available_specialist_sets += "Anti-materiel Sniper Set" - - if(set_name && !GLOB.available_specialist_sets.Find(set_name)) - GLOB.available_specialist_sets += set_name //Cryoing someone out removes someone from the Marines, blocking further larva spawns until accounted for SSticker.mode.latejoin_update(job, -1) diff --git a/code/game/machinery/vending/cm_vending.dm b/code/game/machinery/vending/cm_vending.dm index 2d15d4c37da8..5746a29aa1ae 100644 --- a/code/game/machinery/vending/cm_vending.dm +++ b/code/game/machinery/vending/cm_vending.dm @@ -565,48 +565,28 @@ GLOBAL_LIST_EMPTY(vending_products) to_chat(user, SPAN_WARNING("Only specialists can take specialist sets.")) vend_fail() return FALSE + else if(!user.skills || user.skills.get_skill_level(SKILL_SPEC_WEAPONS) != SKILL_SPEC_TRAINED) to_chat(user, SPAN_WARNING("You already have a specialization.")) vend_fail() return FALSE + var/p_name = itemspec[1] - if(!GLOB.available_specialist_sets.Find(p_name)) + if(!(p_name in GLOB.specialist_set_name_dict)) + return + + if(GLOB.specialist_set_name_dict[p_name].get_available_vendor_num() <= 0) to_chat(user, SPAN_WARNING("That set is already taken.")) vend_fail() return FALSE + var/obj/item/card/id/card = human_user.get_idcard() - if(!card?.check_biometrics(user)) + if(!istype(card) || !card.check_biometrics(user)) to_chat(user, SPAN_WARNING("You must be wearing your [SPAN_INFO("dog tags")] to select a specialization!")) return FALSE - var/specialist_assignment - switch(p_name) - if("Scout Set") - user.skills.set_skill(SKILL_SPEC_WEAPONS, SKILL_SPEC_SCOUT) - specialist_assignment = "Scout" - if("Sniper Set") - user.skills.set_skill(SKILL_SPEC_WEAPONS, SKILL_SPEC_SNIPER) - specialist_assignment = "Sniper" - GLOB.available_specialist_sets -= "Anti-materiel Sniper Set" - if("Anti-materiel Sniper Set") - user.skills.set_skill(SKILL_SPEC_WEAPONS, SKILL_SPEC_SNIPER) - specialist_assignment = "Heavy Sniper" - GLOB.available_specialist_sets -= "Sniper Set" - if("Demolitionist Set") - user.skills.set_skill(SKILL_SPEC_WEAPONS, SKILL_SPEC_ROCKET) - specialist_assignment = "Demo" - if("Heavy Grenadier Set") - user.skills.set_skill(SKILL_SPEC_WEAPONS, SKILL_SPEC_GRENADIER) - specialist_assignment = "Grenadier" - if("Pyro Set") - user.skills.set_skill(SKILL_SPEC_WEAPONS, SKILL_SPEC_PYRO) - specialist_assignment = "Pyro" - else - to_chat(user, SPAN_WARNING("Something bad occurred with [src], tell a Dev.")) - vend_fail() - return FALSE - card.set_assignment((human_user.assigned_squad ? (human_user.assigned_squad.name + " ") : "") + JOB_SQUAD_SPECIALIST + " ([specialist_assignment])") - GLOB.data_core.manifest_modify(user.real_name, WEAKREF(user), card.assignment) - GLOB.available_specialist_sets -= p_name + + GLOB.specialist_set_name_dict[p_name].redeem_set(human_user) + else if(vendor_role.Find(JOB_SYNTH)) if(user.job != JOB_SYNTH) to_chat(user, SPAN_WARNING("Only USCM Synthetics may vend experimental tool tokens.")) diff --git a/code/game/machinery/vending/vendor_types/crew/corporate_liaison.dm b/code/game/machinery/vending/vendor_types/crew/corporate_liaison.dm new file mode 100644 index 000000000000..69261115ecaa --- /dev/null +++ b/code/game/machinery/vending/vendor_types/crew/corporate_liaison.dm @@ -0,0 +1,84 @@ +//------------ CL CLOTHING VENDOR--------------- + +GLOBAL_LIST_INIT(cm_vending_clothing_dress_corporate_liaison, list( + list("SUITS AND UNDERSHIRTS", 0, null, null, null), + list("Black Suit Pants", 0, /obj/item/clothing/under/liaison_suit/black, MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_RECOMMENDED), + list("Blue Suit Pants", 0, /obj/item/clothing/under/liaison_suit/blue, MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_REGULAR), + list("Brown Suit Pants", 0, /obj/item/clothing/under/liaison_suit/brown, MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_REGULAR), + list("White Suit Pants", 0, /obj/item/clothing/under/liaison_suit/corporate_formal, MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_REGULAR), + list("Liaison's Tan Suit", 0, /obj/item/clothing/under/liaison_suit, MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_REGULAR), + list("Liaison's Charcoal Suit", 0, /obj/item/clothing/under/liaison_suit/charcoal, MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_REGULAR), + list("Liaison's White Suit", 0, /obj/item/clothing/under/liaison_suit/formal, MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_REGULAR), + list("Liaison's Blue Blazer", 0, /obj/item/clothing/under/liaison_suit/blazer, MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_REGULAR), + list("Liaison's Suspenders", 0, /obj/item/clothing/under/liaison_suit/suspenders, MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_REGULAR), + list("Liaison's Skirt", 0, /obj/item/clothing/under/blackskirt, MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_REGULAR), + list("Trainee's Uniform", 0, /obj/item/clothing/under/suit_jacket/trainee, MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_REGULAR), + list("Country Club Outfit", 0, /obj/item/clothing/under/liaison_suit/ivy, MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_REGULAR), + list("Orange Outfit", 0, /obj/item/clothing/under/liaison_suit/orange, MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_REGULAR), + list("Corporate Casual", 0, /obj/item/clothing/under/liaison_suit/field, MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_REGULAR), + list("Grey Workwear", 0, /obj/item/clothing/under/colonist/workwear, MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_REGULAR), + list("Khaki Workwear", 0, /obj/item/clothing/under/colonist/workwear/khaki, MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_REGULAR), + list("Pink Workwear", 0, /obj/item/clothing/under/colonist/workwear/pink, MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_REGULAR), + list("Green Workwear", 0, /obj/item/clothing/under/colonist/workwear/green, MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_REGULAR), + + list("SUIT", 0, null, null, null), + list("Black Suit Jacket", 0, /obj/item/clothing/suit/storage/jacket/marine/corporate/black, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_RECOMMENDED), + list("Khaki Suit Jacket", 0, /obj/item/clothing/suit/storage/jacket/marine/corporate, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_REGULAR), + list("Brown Suit Jacket", 0, /obj/item/clothing/suit/storage/jacket/marine/corporate/brown, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_REGULAR), + list("Blue Suit Jacket", 0, /obj/item/clothing/suit/storage/jacket/marine/corporate/blue, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_REGULAR), + list("Formal Suit Jacket", 0, /obj/item/clothing/suit/storage/jacket/marine/corporate/formal, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_REGULAR), + list("Grey Bomber Jacket", 0, /obj/item/clothing/suit/storage/jacket/marine/bomber/grey, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_REGULAR), + list("Red Bomber Jacket", 0, /obj/item/clothing/suit/storage/jacket/marine/bomber/red, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_REGULAR), + list("Khaki Bomber Jacket", 0, /obj/item/clothing/suit/storage/jacket/marine/bomber, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_REGULAR), + list("Brown Bomber Jacket", 0, /obj/item/clothing/suit/storage/bomber, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_REGULAR), + list("Black Bomber Jacket", 0, /obj/item/clothing/suit/storage/bomber/alt, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_REGULAR), + list("Liaison's Winter Coat", 0, /obj/item/clothing/suit/storage/snow_suit/liaison, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_REGULAR), + list("Labcoat", 0, /obj/item/clothing/suit/storage/labcoat, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_REGULAR), + list("Grey Vest", 0, /obj/item/clothing/suit/storage/jacket/marine/vest/grey, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_REGULAR), + list("Brown Vest", 0, /obj/item/clothing/suit/storage/jacket/marine/vest, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_REGULAR), + list("Tan Vest", 0, /obj/item/clothing/suit/storage/jacket/marine/vest/tan, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_REGULAR), + + list("TIES", 0, null, null, null), + list("Black Tie", 0, /obj/item/clothing/accessory/black, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_RECOMMENDED), + list("Red Tie", 0, /obj/item/clothing/accessory/red, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR), + list("Purple Tie", 0, /obj/item/clothing/accessory/purple, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR), + list("Blue Tie", 0, /obj/item/clothing/accessory/blue, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR), + list("Green Tie", 0, /obj/item/clothing/accessory/green, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR), + list("Gold Tie", 0, /obj/item/clothing/accessory/gold, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR), + list("Special Tie", 0, /obj/item/clothing/accessory/horrible, MARINE_CAN_BUY_ACCESSORY, VENDOR_ITEM_REGULAR), + + list("GLASSES", 0, null, null, null), + list("BiMex Shades", 0, /obj/item/clothing/glasses/sunglasses/big, MARINE_CAN_BUY_GLASSES, VENDOR_ITEM_RECOMMENDED), + list("Aviator Shades", 0, /obj/item/clothing/glasses/sunglasses/aviator, MARINE_CAN_BUY_GLASSES, VENDOR_ITEM_REGULAR), + list("Sunglasses", 0, /obj/item/clothing/glasses/sunglasses, MARINE_CAN_BUY_GLASSES, VENDOR_ITEM_REGULAR), + list("Prescription Sunglasses", 0, /obj/item/clothing/glasses/sunglasses/prescription, MARINE_CAN_BUY_GLASSES, VENDOR_ITEM_REGULAR), + list("Prescription Glasses", 0, /obj/item/clothing/glasses/regular/hipster, MARINE_CAN_BUY_GLASSES, VENDOR_ITEM_REGULAR), + + list("GLOVES", 0, null, null, null), + list("Black Gloves", 0, /obj/item/clothing/gloves/black, MARINE_CAN_BUY_GLOVES, VENDOR_ITEM_RECOMMENDED), + list("Dress Gloves", 0, /obj/item/clothing/gloves/marine/dress, MARINE_CAN_BUY_GLOVES, VENDOR_ITEM_REGULAR), + + list("SHOES", 0, null, null, null), + list("Laceup Shoes, Black", 0, /obj/item/clothing/shoes/laceup, MARINE_CAN_BUY_SHOES, VENDOR_ITEM_RECOMMENDED), + list("Laceup Shoes, Brown", 0, /obj/item/clothing/shoes/laceup/brown, MARINE_CAN_BUY_SHOES, VENDOR_ITEM_REGULAR), + list("Sneakers, Black", 0, /obj/item/clothing/shoes/black, MARINE_CAN_BUY_SHOES, VENDOR_ITEM_REGULAR), + list("Corporate Boots", 0, /obj/item/clothing/shoes/marine/corporate, MARINE_CAN_BUY_SHOES, VENDOR_ITEM_REGULAR), + + list("HATS", 0, null, null, null), + list("Black Beret", 0, /obj/item/clothing/head/beret/cm/black/civilian, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_REGULAR), + list("White Beret", 0, /obj/item/clothing/head/beret/cm/white/civilian, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_REGULAR), + list("Fedora", 0, /obj/item/clothing/head/fedora, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_REGULAR), + +)) + +/obj/structure/machinery/cm_vending/clothing/dress/corporate_liaison + name = "\improper Corporate Liaison's Personal Wardrobe" + desc = "A wardrobe containing all the clothes an executive would ever need." + icon_state = "wardrobe_vendor" + vendor_theme = VENDOR_THEME_USCM + show_points = FALSE + req_access = list() + vendor_role = list(JOB_CORPORATE_LIAISON, JOB_SURVIVOR, JOB_TRAINEE, JOB_JUNIOR_EXECUTIVE, JOB_EXECUTIVE, JOB_SENIOR_EXECUTIVE, JOB_EXECUTIVE_SPECIALIST, JOB_EXECUTIVE_SUPERVISOR, JOB_ASSISTANT_MANAGER, JOB_DIVISION_MANAGER, JOB_CHIEF_EXECUTIVE, JOB_DIRECTOR, JOB_WY_GOON_RESEARCHER) + +/obj/structure/machinery/cm_vending/clothing/dress/corporate_liaison/get_listed_products(mob/user) + return GLOB.cm_vending_clothing_dress_corporate_liaison diff --git a/code/game/machinery/vending/vendor_types/squad_prep/squad_specialist.dm b/code/game/machinery/vending/vendor_types/squad_prep/squad_specialist.dm index a21207a6645c..527bb89b6af2 100644 --- a/code/game/machinery/vending/vendor_types/squad_prep/squad_specialist.dm +++ b/code/game/machinery/vending/vendor_types/squad_prep/squad_specialist.dm @@ -7,7 +7,7 @@ GLOBAL_LIST_INIT(cm_vending_gear_spec, list( list("Pyro Set", 0, /obj/item/storage/box/spec/pyro, MARINE_CAN_BUY_ESSENTIALS, VENDOR_ITEM_REGULAR), list("Scout Set", 0, /obj/item/storage/box/spec/scout, MARINE_CAN_BUY_ESSENTIALS, VENDOR_ITEM_REGULAR), list("Sniper Set", 0, /obj/item/storage/box/spec/sniper, MARINE_CAN_BUY_ESSENTIALS, VENDOR_ITEM_RECOMMENDED), - list("Anti-materiel Sniper Set", 0, /obj/item/storage/box/spec/sniper/anti_materiel, MARINE_CAN_BUY_ESSENTIALS, VENDOR_ITEM_RECOMMENDED), + list("Anti-Materiel Sniper Set", 0, /obj/item/storage/box/spec/sniper/anti_materiel, MARINE_CAN_BUY_ESSENTIALS, VENDOR_ITEM_RECOMMENDED), list("EXTRA SCOUT AMMUNITION", 0, null, null, null), list("A19 High Velocity Impact Magazine (10x24mm)", 40, /obj/item/ammo_magazine/rifle/m4ra/custom/impact, null, VENDOR_ITEM_REGULAR), diff --git a/code/game/objects/items/devices/cictablet.dm b/code/game/objects/items/devices/cictablet.dm index c53301295fe3..8c07c71a2112 100644 --- a/code/game/objects/items/devices/cictablet.dm +++ b/code/game/objects/items/devices/cictablet.dm @@ -177,3 +177,15 @@ announcement_faction = FACTION_PMC minimap_type = MINIMAP_FLAG_PMC + +/obj/item/device/cotablet/upp + + desc = "A special device used by field UPP commanders." + + tablet_name = "UPP Field Commander's Tablet" + + announcement_title = UPP_COMMAND_ANNOUNCE + announcement_faction = FACTION_UPP + req_access = list(ACCESS_UPP_LEADERSHIP) + + minimap_type = MINIMAP_FLAG_UPP diff --git a/code/game/objects/items/stacks/flags.dm b/code/game/objects/items/stacks/flags.dm index 14833812b06c..4dc2e6dbebf3 100644 --- a/code/game/objects/items/stacks/flags.dm +++ b/code/game/objects/items/stacks/flags.dm @@ -281,3 +281,23 @@ desc = "The flag of the United Americas. Semper fi." icon_state = "flag_ua_planted" flag_type = /obj/item/flag/plantable/ua + +// UNION OF PROGRESSIVE PEOPLES FLAG // +////////////////////////// + +/obj/item/flag/plantable/upp + name = "\improper Union of Progressive Peoples flag" + desc = "The flag of the Union of Progressive Peoples. This one looks ready to be planted into the ground." + icon = 'icons/obj/structures/plantable_flag.dmi' + icon_state = "flag_upp" + flag_type = /obj/structure/flag/plantable/upp + faction = FACTION_UPP + play_warcry = TRUE + warcry_sound = 'sound/effects/flag_upp_warcry.ogg' + warcry_extra_sound = 'sound/effects/flag_upp_warcry_extra.ogg' + +/obj/structure/flag/plantable/upp + name = "\improper Union of Progressive Peoples flag" + desc = "The flag of the Union of Progressive Peoples. Unity through Strength, Freedom through Unity." + icon_state = "flag_upp_planted" + flag_type = /obj/item/flag/plantable/upp diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index f579917fed49..e4022c3e4ca0 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -96,7 +96,8 @@ GLOBAL_LIST_INIT_TYPED(metal_recipes, /datum/stack_recipe, list ( \ * Plasteel */ GLOBAL_LIST_INIT_TYPED(plasteel_recipes, /datum/stack_recipe, list ( \ - new/datum/stack_recipe("plasteel barricade", /obj/structure/barricade/plasteel, 8, time = 4 SECONDS, one_per_turf = ONE_TYPE_PER_TURF, on_floor = 1, skill_req = SKILL_CONSTRUCTION, skill_lvl = SKILL_CONSTRUCTION_ENGI, min_time = 2 SECONDS), + new/datum/stack_recipe("folding plasteel barricade", /obj/structure/barricade/plasteel, 8, time = 4 SECONDS, one_per_turf = ONE_TYPE_PER_TURF, on_floor = 1, skill_req = SKILL_CONSTRUCTION, skill_lvl = SKILL_CONSTRUCTION_ENGI, min_time = 2 SECONDS), + new/datum/stack_recipe("plasteel barricade", /obj/structure/barricade/metal/plasteel, 6, time = 8 SECONDS, one_per_turf = ONE_TYPE_PER_BORDER, on_floor = 1, skill_req = SKILL_CONSTRUCTION, skill_lvl = SKILL_CONSTRUCTION_ENGI, min_time = 2 SECONDS), null, \ new/datum/stack_recipe("reinforced window frame", /obj/structure/window_frame/colony/reinforced, 5, time = 40, one_per_turf = ONE_TYPE_PER_TURF, on_floor = 1, skill_req = SKILL_CONSTRUCTION, skill_lvl = SKILL_CONSTRUCTION_ENGI), null, \ diff --git a/code/game/objects/items/storage/boxes.dm b/code/game/objects/items/storage/boxes.dm index e385d4b5c17d..a33d51bf618c 100644 --- a/code/game/objects/items/storage/boxes.dm +++ b/code/game/objects/items/storage/boxes.dm @@ -34,6 +34,23 @@ w_class = SIZE_LARGE //Changed becuase of in-game abuse storage_flags = STORAGE_FLAGS_BOX +/obj/item/storage/box/pride + name = "box of prideful crayons" + desc = "A box of every flavor of pride." + storage_slots = 8 + w_class = SIZE_SMALL + can_hold = list(/obj/item/toy/crayon/pride) + +/obj/item/storage/box/pride/fill_preset_inventory() + new /obj/item/toy/crayon/pride/gay(src) + new /obj/item/toy/crayon/pride/lesbian(src) + new /obj/item/toy/crayon/pride/bi(src) + new /obj/item/toy/crayon/pride/ace(src) + new /obj/item/toy/crayon/pride/pan(src) + new /obj/item/toy/crayon/pride/trans(src) + new /obj/item/toy/crayon/pride/enby(src) + new /obj/item/toy/crayon/pride/fluid(src) + /obj/item/storage/box/survival w_class = SIZE_MEDIUM diff --git a/code/game/objects/items/toys/cards.dm b/code/game/objects/items/toys/cards.dm index f63efd61a615..89aea51bb8c0 100644 --- a/code/game/objects/items/toys/cards.dm +++ b/code/game/objects/items/toys/cards.dm @@ -266,6 +266,7 @@ icon = 'icons/obj/items/playing_cards.dmi' icon_state = "empty" w_class = SIZE_TINY + flags_obj = parent_type::flags_obj|OBJ_IS_HELMET_GARB var/concealed = FALSE var/pile_state = FALSE diff --git a/code/game/objects/items/toys/crayons.dm b/code/game/objects/items/toys/crayons.dm index 1d9e2e1a4d54..636f1a50fc52 100644 --- a/code/game/objects/items/toys/crayons.dm +++ b/code/game/objects/items/toys/crayons.dm @@ -61,6 +61,62 @@ colorName = "rainbow" uses = 0 +/obj/item/toy/crayon/pride/lesbian + icon_state = "crayonlesbian" + crayon_color = "#bd1471" + shade_color = "#d46b15" + colorName = "lesbian" + uses = 0 + +/obj/item/toy/crayon/pride/gay + icon_state = "crayongay" + crayon_color = "#33cc9e" + shade_color = "#7f1fa5" + colorName = "gay" + uses = 0 + +/obj/item/toy/crayon/pride/bi + icon_state = "crayonbi" + crayon_color = "#c01b6e" + shade_color = "#281dc5" + colorName = "bisexual" + uses = 0 + +/obj/item/toy/crayon/pride/pan + icon_state = "crayonpan" + crayon_color = "#da1778" + shade_color = "#229bff" + colorName = "pansexual" + uses = 0 + +/obj/item/toy/crayon/pride/ace + icon_state = "crayonace" + crayon_color = "#272727" + shade_color = "#570c3e" + colorName = "asexual" + uses = 0 + +/obj/item/toy/crayon/pride/trans + icon_state = "crayontrans" + crayon_color = "#f57ecd" + shade_color = "#4bbdeb" + colorName = "transgender" + uses = 0 + +/obj/item/toy/crayon/pride/enby + icon_state = "crayonenby" + crayon_color = "#272727" + shade_color = "#e9cf3a" + colorName = "nonbinary" + uses = 0 + +/obj/item/toy/crayon/pride/fluid + icon_state = "crayonfluid" + crayon_color = "#b64791" + shade_color = "#000FFF" + colorName = "genderfluid" + uses = 0 + /obj/item/toy/crayon/rainbow/attack_self(mob/living/user) ..() crayon_color = input(user, "Please select the main color.", "Crayon color") as color diff --git a/code/game/objects/structures/barricade/plasteel.dm b/code/game/objects/structures/barricade/folding.dm similarity index 99% rename from code/game/objects/structures/barricade/plasteel.dm rename to code/game/objects/structures/barricade/folding.dm index fb5a08954a5d..8fe00d04a708 100644 --- a/code/game/objects/structures/barricade/plasteel.dm +++ b/code/game/objects/structures/barricade/folding.dm @@ -1,5 +1,5 @@ /obj/structure/barricade/plasteel - name = "plasteel barricade" + name = "folding plasteel barricade" desc = "A very sturdy barricade made out of plasteel panels, the pinnacle of strongpoints. Use a blowtorch to repair. Can be flipped down to create a path." icon_state = "plasteel_closed_0" health = 800 diff --git a/code/game/objects/structures/barricade/metal.dm b/code/game/objects/structures/barricade/non_folding.dm similarity index 95% rename from code/game/objects/structures/barricade/metal.dm rename to code/game/objects/structures/barricade/non_folding.dm index f16e6851341b..575f1da738bf 100644 --- a/code/game/objects/structures/barricade/metal.dm +++ b/code/game/objects/structures/barricade/non_folding.dm @@ -279,3 +279,18 @@ ..() flags_can_pass_front_temp &= ~PASS_OVER_THROW_MOB flags_can_pass_behind_temp &= ~PASS_OVER_THROW_MOB + +/obj/structure/barricade/metal/plasteel + name = "plasteel barricade" + desc = "A sturdy and easily assembled barricade made of reinforced plasteel plates, the pinnacle of strongpoints. Use a blowtorch to repair." + icon_state = "new_plasteel_0" + health = 900 + maxhealth = 900 + crusher_resistant = TRUE + force_level_absorption = 20 + stack_type = /obj/item/stack/sheet/plasteel + debris = list(/obj/item/stack/sheet/plasteel) + destroyed_stack_amount = 3 + barricade_type = "new_plasteel" + repair_materials = list("plasteel" = 0.45) + diff --git a/code/modules/admin/player_panel/actions/physical.dm b/code/modules/admin/player_panel/actions/physical.dm index 21e6fed4f825..21f5504455d2 100644 --- a/code/modules/admin/player_panel/actions/physical.dm +++ b/code/modules/admin/player_panel/actions/physical.dm @@ -73,26 +73,9 @@ var/datum/job/job = GET_MAPPED_ROLE(target.job) if(ishuman(target)) var/mob/living/carbon/human/H = target + job.on_cryo(H) if(H.assigned_squad) var/datum/squad/S = H.assigned_squad - if(H.job == JOB_SQUAD_SPECIALIST) - //we make the set this specialist took if any available again - if(H.skills) - var/set_name - switch(H.skills.get_skill_level(SKILL_SPEC_WEAPONS)) - if(SKILL_SPEC_ROCKET) - set_name = "Demolitionist Set" - if(SKILL_SPEC_GRENADIER) - set_name = "Heavy Grenadier Set" - if(SKILL_SPEC_PYRO) - set_name = "Pyro Set" - if(SKILL_SPEC_SCOUT) - set_name = "Scout Set" - if(SKILL_SPEC_SNIPER) - set_name = "Sniper Set" - - if(set_name && !GLOB.available_specialist_sets.Find(set_name)) - GLOB.available_specialist_sets += set_name S.forget_marine_in_squad(H) message_admins("[key_name_admin(user)] sent [key_name_admin(target)] ([H.job]) to cryogenics.") diff --git a/code/modules/client/preferences_gear.dm b/code/modules/client/preferences_gear.dm index 13a31b59fa97..79fd34b2660c 100644 --- a/code/modules/client/preferences_gear.dm +++ b/code/modules/client/preferences_gear.dm @@ -547,6 +547,10 @@ GLOBAL_LIST_EMPTY(gear_datums_by_name) display_name = "Crayon" path = /obj/item/toy/crayon/rainbow +/datum/gear/toy/pride + display_name = "Box of Prideful Crayons" + path = /obj/item/storage/box/pride + /datum/gear/plush category = "Plushies" cost = 4 diff --git a/code/modules/clothing/glasses/glasses.dm b/code/modules/clothing/glasses/glasses.dm index 88605cb3b792..44d1e0a8bd0b 100644 --- a/code/modules/clothing/glasses/glasses.dm +++ b/code/modules/clothing/glasses/glasses.dm @@ -221,8 +221,8 @@ flags_equip_slot = SLOT_EYES|SLOT_FACE /obj/item/clothing/glasses/regular/hipster - name = "Sunglasses" - desc = "They cut the sun and keep things fun. Why would you ever wear these indoors, or on a night operation. Are you trying to get yourself hurt?" + name = "Prescription Glasses" + desc = "Boring glasses, makes you look smart and potentially reputable." icon_state = "hipster_glasses" item_state = "hipster_glasses" flags_equip_slot = SLOT_EYES|SLOT_FACE diff --git a/code/modules/clothing/head/head.dm b/code/modules/clothing/head/head.dm index 86527457bfce..7e1c1d8d08d2 100644 --- a/code/modules/clothing/head/head.dm +++ b/code/modules/clothing/head/head.dm @@ -88,6 +88,16 @@ name = "USCM Squad Beret" desc = "For those who want to show pride and have nothing to lose (in their head, at least)." +/obj/item/clothing/head/beret/cm/white/civilian + name = "White Beret" + desc = "A nice fashionable beret, popular with executives." + icon_state = "s_beret" + +/obj/item/clothing/head/beret/cm/black/civilian + name = "Black Beret" + desc = "A nice fashionable beret, popular with executives." + icon_state = "beret_black" + /obj/item/clothing/head/beret/cm/squadberet/equipped(mob/user, slot) . = ..() self_set() diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm index 845ce2a6eb6e..140d73fd05a0 100644 --- a/code/modules/clothing/head/helmet.dm +++ b/code/modules/clothing/head/helmet.dm @@ -326,6 +326,15 @@ GLOBAL_LIST_INIT(allowed_helmet_items, list( /obj/item/toy/crayon/blue = "crayonblue", /obj/item/toy/crayon/purple = "crayonpurple", /obj/item/toy/crayon/rainbow = "crayonrainbow", + /obj/item/toy/crayon/pride/trans = "crayontrans", + /obj/item/toy/crayon/pride/gay = "crayongay", + /obj/item/toy/crayon/pride/lesbian = "crayonlesbian", + /obj/item/toy/crayon/pride/bi = "crayonbi", + /obj/item/toy/crayon/pride/pan = "crayonpan", + /obj/item/toy/crayon/pride/ace = "crayonace", + /obj/item/toy/crayon/pride/trans = "crayontrans", + /obj/item/toy/crayon/pride/enby = "crayonenby", + /obj/item/toy/crayon/pride/fluid = "crayonfluid", /obj/item/paper = "paper", /obj/item/device/flashlight/flare = "flare", /obj/item/clothing/head/headset = "headset", diff --git a/code/modules/clothing/shoes/marine_shoes.dm b/code/modules/clothing/shoes/marine_shoes.dm index 7855075c2fb4..937416943958 100644 --- a/code/modules/clothing/shoes/marine_shoes.dm +++ b/code/modules/clothing/shoes/marine_shoes.dm @@ -163,6 +163,8 @@ /obj/item/clothing/shoes/marine/corporate name = "rugged boots" desc = "These synth-leather boots seem high quality when first worn, but quickly detoriate, especially in the environments the corporate security members these are issued to operate in. Still, better than nothing." + +/obj/item/clothing/shoes/marine/corporate/knife spawn_item_type = /obj/item/attachable/bayonet /obj/item/clothing/shoes/marine/ress diff --git a/code/modules/clothing/shoes/miscellaneous.dm b/code/modules/clothing/shoes/miscellaneous.dm index 1a49dc7fe10f..91ae13958e46 100644 --- a/code/modules/clothing/shoes/miscellaneous.dm +++ b/code/modules/clothing/shoes/miscellaneous.dm @@ -141,6 +141,7 @@ icon_state = "laceups" /obj/item/clothing/shoes/laceup/brown + name = "brown laceup shoes" icon_state = "laceups_brown" /obj/item/clothing/shoes/swimmingfins diff --git a/code/modules/clothing/under/marine_uniform.dm b/code/modules/clothing/under/marine_uniform.dm index 74cb5ea552ee..52635c63600a 100644 --- a/code/modules/clothing/under/marine_uniform.dm +++ b/code/modules/clothing/under/marine_uniform.dm @@ -840,7 +840,7 @@ worn_state = "liaison_formal" /obj/item/clothing/under/liaison_suit/suspenders - name = "liaison's attire" + name = "liaison's suspenders" desc = "A collared shirt, complimented by a pair of suspenders. Worn by Weyland-Yutani employees who ask the tough questions. Smells faintly of cigars and bad acting." icon_state = "liaison_suspenders" worn_state = "liaison_suspenders" @@ -863,6 +863,12 @@ icon_state = "corporate_ivy" worn_state = "corporate_ivy" +/obj/item/clothing/under/liaison_suit/orange + name = "orange outfit" + desc = "A pair of black pants paired with a very Wey-Yu orange shirt. A popular look with those in the corporate world that conduct the majority of their business from Weyland Yutani offices." + icon_state = "corporate_orange" + worn_state = "corporate_orange" + /obj/item/clothing/under/liaison_suit/corporate_formal name = "white suit pants" desc = "A pair of ivory slacks paired with a white shirt. A popular pairing for formal corporate events." diff --git a/code/modules/cm_marines/equipment/kit_boxes.dm b/code/modules/cm_marines/equipment/kit_boxes.dm index 83b20636fc5e..d61fc6e8a4c0 100644 --- a/code/modules/cm_marines/equipment/kit_boxes.dm +++ b/code/modules/cm_marines/equipment/kit_boxes.dm @@ -249,57 +249,26 @@ return TRUE /obj/item/spec_kit/proc/select_and_spawn(mob/living/carbon/human/user) - var/selection = tgui_input_list(user, "Pick your specialist equipment type.", "Specialist Kit Selection", GLOB.available_specialist_kit_boxes, 10 SECONDS) + var/list/available_specialist_kits = list() + for(var/path in GLOB.specialist_set_datums) + var/datum/specialist_set/specset = GLOB.specialist_set_datums[path] + if(specset.get_available_kit_num() >= 1) + available_specialist_kits += specset.get_name() + + var/selection = tgui_input_list(user, "Pick your specialist equipment type.", "Specialist Kit Selection", available_specialist_kits, 10 SECONDS) if(!selection || QDELETED(src)) return FALSE - if(!GLOB.available_specialist_kit_boxes[selection] || GLOB.available_specialist_kit_boxes[selection] <= 0) + if(!skillcheckexplicit(user, SKILL_SPEC_WEAPONS, SKILL_SPEC_TRAINED) && !skillcheckexplicit(user, SKILL_SPEC_WEAPONS, SKILL_SPEC_ALL)) + to_chat(user, SPAN_WARNING("You already unwrapped your [name], give this one to someone else!")) + return FALSE + if(!GLOB.specialist_set_name_dict[selection] || (GLOB.specialist_set_name_dict[selection].get_available_kit_num() <= 0)) to_chat(user, SPAN_WARNING("No more kits of this type may be chosen!")) return FALSE var/obj/item/card/id/card = user.get_idcard() if(!card || card.registered_ref != WEAKREF(user)) to_chat(user, SPAN_WARNING("You must be wearing your [SPAN_INFO("ID card")] or [SPAN_INFO("dog tags")] to select a specialization!")) - return - var/turf/T = get_turf(loc) - var/obj/item/storage/box/spec/spec_box - var/specialist_assignment - switch(selection) - if("Pyro") - spec_box = new /obj/item/storage/box/spec/pyro(T) - specialist_assignment = "Pyro" - user.skills.set_skill(SKILL_SPEC_WEAPONS, SKILL_SPEC_PYRO) - if("Grenadier") - spec_box = new /obj/item/storage/box/spec/heavy_grenadier(T) - specialist_assignment = "Grenadier" - user.skills.set_skill(SKILL_SPEC_WEAPONS, SKILL_SPEC_GRENADIER) - if("Sniper") - spec_box = new /obj/item/storage/box/spec/sniper(T) - specialist_assignment = "Sniper" - user.skills.set_skill(SKILL_SPEC_WEAPONS, SKILL_SPEC_SNIPER) - if("Anti-materiel Sniper") - spec_box = new /obj/item/storage/box/spec/sniper/anti_materiel(T) - specialist_assignment = "Heavy Sniper" - user.skills.set_skill(SKILL_SPEC_WEAPONS, SKILL_SPEC_SNIPER) - if("Scout") - spec_box = new /obj/item/storage/box/spec/scout(T) - specialist_assignment = "Scout" - user.skills.set_skill(SKILL_SPEC_WEAPONS, SKILL_SPEC_SCOUT) - //this is to be able to use C4s that are coming with the kit - if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_NOVICE)) - user.skills.set_skill(SKILL_ENGINEER, SKILL_ENGINEER_NOVICE) - if("Demo") - spec_box = new /obj/item/storage/box/spec/demolitionist(T) - specialist_assignment = "Demo" - user.skills.set_skill(SKILL_SPEC_WEAPONS, SKILL_SPEC_ROCKET) - //this is to be able to use C4s that are coming with the kit - if(!skillcheck(user, SKILL_ENGINEER, SKILL_ENGINEER_NOVICE)) - user.skills.set_skill(SKILL_ENGINEER, SKILL_ENGINEER_NOVICE) - if(specialist_assignment) - user.put_in_hands(spec_box) - card.set_assignment((user.assigned_squad && squad_assignment_update ? (user.assigned_squad.name + " ") : "") + card.assignment + " ([specialist_assignment])") - GLOB.data_core.manifest_modify(user.real_name, WEAKREF(user), card.assignment) - GLOB.available_specialist_kit_boxes[selection]-- - return TRUE - return FALSE + return FALSE + return GLOB.specialist_set_name_dict[selection].redeem_set(user, TRUE) //******************************************PFC Kits****************************************************************/ diff --git a/code/modules/cm_marines/specialist.dm b/code/modules/cm_marines/specialist.dm index 2fc1fdec10db..9fbb240a1178 100644 --- a/code/modules/cm_marines/specialist.dm +++ b/code/modules/cm_marines/specialist.dm @@ -38,3 +38,151 @@ for (var/datum/action/item_action/specialist/SA in H.actions) if (SA.ability_primacy == SPEC_PRIMARY_ACTION_2) SA.handle_spec_macro() + +/// Get a specialist set datum typepath given a mob, returns null if they aren't a spec or haven't chosen a kit. +/proc/get_specialist_set(mob/living/spec) + for(var/datum/specialist_set/path as anything in GLOB.specialist_set_datums) + if(HAS_TRAIT(spec, TRAIT_SPEC(path::trait_to_give))) + return path + +/proc/setup_specialist_sets() + var/list/set_list = list() + for(var/datum/specialist_set/path as anything in subtypesof(/datum/specialist_set)) + var/datum/specialist_set/object = new path + set_list[path] = object + GLOB.specialist_set_name_dict[object.get_name()] = object + return set_list + +/datum/specialist_set + /// Human-readable name for the specialist set + VAR_PROTECTED/name = "" as text + /// What is the role title that should go on ID cards + VAR_PROTECTED/role_name = "" as text + /// How many more of this spec set can be picked from spec vendors + VAR_PRIVATE/available_vendor_num = 1 as num + /// How many more of this spec set can be picked from /obj/item/spec_kit + VAR_PRIVATE/available_kit_num = 2 as num + /// What skill tier to give the person redeeming the set + VAR_PROTECTED/skill_to_give = SKILL_SPEC_DEFAULT as num + /// What trait to give the person redeeming the set + VAR_PROTECTED/trait_to_give + /// What typepath to spawn for the redeemer if from a kit + VAR_PROTECTED/kit_typepath + /// List of typepaths that are incompatible with this set, meaning it'll subtract 1 from their vendor/kit num as well + VAR_PROTECTED/list/incompatible_sets = list() + +/datum/specialist_set/New() + . = ..() + incompatible_sets += type + +/datum/specialist_set/proc/redeem_set(mob/living/carbon/human/redeemer, kit = FALSE) + SHOULD_CALL_PARENT(TRUE) + if(!redeemer) + return FALSE + + if(kit && (available_kit_num <= 0)) + to_chat(redeemer, SPAN_WARNING("No more kits of this type may be chosen.")) + return FALSE + else if(!kit && (available_vendor_num <= 0)) + to_chat(redeemer, SPAN_WARNING("That set is already taken.")) + return FALSE + + if(skill_to_give != SKILL_SPEC_DEFAULT) + redeemer.skills?.set_skill(SKILL_SPEC_WEAPONS, skill_to_give) + + if(kit) + redeemer.put_in_any_hand_if_possible(new kit_typepath, FALSE) + for(var/path in incompatible_sets) + GLOB.specialist_set_datums[path].available_kit_num-- + ADD_TRAIT(redeemer, TRAIT_SPEC_KIT, TRAIT_SOURCE_INHERENT) + else + for(var/path in incompatible_sets) + GLOB.specialist_set_datums[path].available_vendor_num-- + ADD_TRAIT(redeemer, TRAIT_SPEC_VENDOR, TRAIT_SOURCE_INHERENT) + ADD_TRAIT(redeemer, TRAIT_SPEC(trait_to_give), TRAIT_SOURCE_INHERENT) + var/obj/item/card/id/idcard = redeemer.get_idcard() + if(idcard) + idcard.set_assignment((redeemer.assigned_squad ? (redeemer.assigned_squad.name + " ") : "") + JOB_SQUAD_SPECIALIST + " ([role_name])") + GLOB.data_core.manifest_modify(redeemer.real_name, WEAKREF(redeemer), idcard.assignment) + return TRUE + +/datum/specialist_set/proc/refund_set(mob/living/carbon/human/refunder) + SHOULD_CALL_PARENT(TRUE) + if(!refunder) + return + + if(HAS_TRAIT(refunder, TRAIT_SPEC_KIT)) + for(var/path in incompatible_sets) + GLOB.specialist_set_datums[path].available_kit_num++ + else if(HAS_TRAIT(refunder, TRAIT_SPEC_VENDOR)) + for(var/path in incompatible_sets) + GLOB.specialist_set_datums[path].available_vendor_num++ + +/datum/specialist_set/proc/get_name() as text + return name + +/datum/specialist_set/proc/get_available_kit_num() as num + return available_kit_num + +/datum/specialist_set/proc/get_available_vendor_num() as num + return available_vendor_num + +/datum/specialist_set/sadar + name = "Demolitionist Set" + role_name = "Demo" + skill_to_give = SKILL_SPEC_ROCKET + kit_typepath = /obj/item/storage/box/spec/demolitionist + +/datum/specialist_set/sadar/redeem_set(mob/living/redeemer, kit) + . = ..() + if(!.) + return . + + if(!skillcheck(redeemer, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED)) + redeemer.skills?.set_skill(SKILL_ENGINEER, SKILL_ENGINEER_TRAINED) + return TRUE + +/datum/specialist_set/scout + name = "Scout Set" + role_name = "Scout" + skill_to_give = SKILL_SPEC_SCOUT + kit_typepath = /obj/item/storage/box/spec/scout + +/datum/specialist_set/scout/redeem_set(mob/living/redeemer, kit) + . = ..() + if(!.) + return . + + if(!skillcheck(redeemer, SKILL_ENGINEER, SKILL_ENGINEER_TRAINED)) + redeemer.skills?.set_skill(SKILL_ENGINEER, SKILL_ENGINEER_TRAINED) + return TRUE + +/datum/specialist_set/sniper + name = "Sniper Set" + role_name = "Sniper" + skill_to_give = SKILL_SPEC_SNIPER + kit_typepath = /obj/item/storage/box/spec/sniper + incompatible_sets = list( + /datum/specialist_set/anti_mat_sniper, + ) + +/datum/specialist_set/anti_mat_sniper + name = "Anti-Materiel Sniper Set" + role_name = "Heavy Sniper" + skill_to_give = SKILL_SPEC_SNIPER + kit_typepath = /obj/item/storage/box/spec/sniper/anti_materiel + incompatible_sets = list( + /datum/specialist_set/sniper, + ) + +/datum/specialist_set/grenadier + name = "Heavy Grenadier Set" + role_name = "Grenadier" + skill_to_give = SKILL_SPEC_GRENADIER + kit_typepath = /obj/item/storage/box/spec/heavy_grenadier + +/datum/specialist_set/pyro + name = "Pyro Set" + role_name = "Pyro" + skill_to_give = SKILL_SPEC_PYRO + kit_typepath = /obj/item/storage/box/spec/pyro diff --git a/code/modules/cm_preds/yaut_weapons.dm b/code/modules/cm_preds/yaut_weapons.dm index 3bbbd11c0784..14336cbdba04 100644 --- a/code/modules/cm_preds/yaut_weapons.dm +++ b/code/modules/cm_preds/yaut_weapons.dm @@ -893,6 +893,8 @@ icon = 'icons/obj/items/hunter/pred_gear.dmi' icon_state = null works_in_recharger = FALSE + muzzle_flash = "muzzle_flash_blue" + muzzle_flash_color = COLOR_MAGENTA item_icons = list( WEAR_BACK = 'icons/mob/humans/onmob/hunter/pred_gear.dmi', WEAR_L_HAND = 'icons/mob/humans/onmob/hunter/items_lefthand.dmi', @@ -907,7 +909,6 @@ unacidable = TRUE fire_sound = 'sound/weapons/pred_plasma_shot.ogg' ammo = /datum/ammo/energy/yautja/rifle/bolt - muzzle_flash = null // TO DO, add a decent one. zoomdevicename = "scope" flags_equip_slot = SLOT_BACK w_class = SIZE_HUGE @@ -992,6 +993,7 @@ #define FIRE_MODE_STANDARD "Standard" #define FIRE_MODE_INCENDIARY "Incendiary" + /obj/item/weapon/gun/energy/yautja/plasmapistol name = "plasma pistol" desc = "A plasma pistol capable of rapid fire. It has an integrated battery. Can be used to set fires, either to braziers or on people." @@ -1002,7 +1004,8 @@ fire_sound = 'sound/weapons/pulse3.ogg' flags_equip_slot = SLOT_WAIST ammo = /datum/ammo/energy/yautja/pistol - muzzle_flash = null // TO DO, add a decent one. + muzzle_flash = "muzzle_flash_blue" + muzzle_flash_color = COLOR_MUZZLE_BLUE w_class = SIZE_MEDIUM /// Max amount of shots var/charge_time = 40 @@ -1127,7 +1130,8 @@ ) fire_sound = 'sound/weapons/pred_plasmacaster_fire.ogg' ammo = /datum/ammo/energy/yautja/caster/stun - muzzle_flash = null // TO DO, add a decent one. + muzzle_flash = "muzzle_flash_blue" + muzzle_flash_color = COLOR_MUZZLE_BLUE w_class = SIZE_HUGE force = 0 fire_delay = 3 diff --git a/code/modules/gear_presets/corpses.dm b/code/modules/gear_presets/corpses.dm index 9e688037860b..d84cf766c4fc 100644 --- a/code/modules/gear_presets/corpses.dm +++ b/code/modules/gear_presets/corpses.dm @@ -706,7 +706,7 @@ new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/veteran/pmc/light/corporate, WEAR_JACKET) new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/veteran, WEAR_HANDS) new_human.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/marine/veteran/pmc/corporate, WEAR_HEAD) - new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/corporate, WEAR_FEET) + new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/corporate/knife, WEAR_FEET) new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/lightpack/five_slot, WEAR_BACK) new_human.equip_to_slot_or_del(new /obj/item/weapon/baton, WEAR_IN_BACK) @@ -731,7 +731,7 @@ new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/veteran/pmc/light/corporate/lead, WEAR_JACKET) new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/veteran, WEAR_HANDS) new_human.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/marine/veteran/pmc/corporate/lead, WEAR_HEAD) - new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/corporate, WEAR_FEET) + new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/corporate/knife, WEAR_FEET) new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/lightpack/five_slot, WEAR_BACK) new_human.equip_to_slot_or_del(new /obj/item/weapon/baton, WEAR_IN_BACK) diff --git a/code/modules/gear_presets/survivors/kutjevo/preset_kutjevo.dm b/code/modules/gear_presets/survivors/kutjevo/preset_kutjevo.dm index eb04cbd5a94e..6db2882ddf82 100644 --- a/code/modules/gear_presets/survivors/kutjevo/preset_kutjevo.dm +++ b/code/modules/gear_presets/survivors/kutjevo/preset_kutjevo.dm @@ -33,7 +33,7 @@ add_random_kutjevo_survivor_equipment(new_human) new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel/sec(new_human), WEAR_BACK) new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/veteran(new_human), WEAR_HANDS) - new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/corporate(new_human), WEAR_FEET) + new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/corporate/knife(new_human), WEAR_FEET) ..() /datum/equipment_preset/survivor/doctor/kutjevo diff --git a/code/modules/gear_presets/survivors/lv_624/preset_lv.dm b/code/modules/gear_presets/survivors/lv_624/preset_lv.dm index a56432b80b89..462075142698 100644 --- a/code/modules/gear_presets/survivors/lv_624/preset_lv.dm +++ b/code/modules/gear_presets/survivors/lv_624/preset_lv.dm @@ -86,7 +86,7 @@ new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel/sec(new_human), WEAR_BACK) new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/armor/vest/security(new_human), WEAR_JACKET) new_human.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/marine/veteran/pmc(new_human), WEAR_HEAD) - new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/corporate(new_human), WEAR_FEET) + new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/corporate/knife(new_human), WEAR_FEET) ..() /datum/equipment_preset/survivor/corporate/lv diff --git a/code/modules/gear_presets/survivors/misc.dm b/code/modules/gear_presets/survivors/misc.dm index f0cf368d4936..a6ed27cbb91a 100644 --- a/code/modules/gear_presets/survivors/misc.dm +++ b/code/modules/gear_presets/survivors/misc.dm @@ -185,7 +185,7 @@ Everything below isn't used or out of place. new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/veteran/pmc/light/corporate, WEAR_JACKET) new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/veteran, WEAR_HANDS) new_human.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/marine/veteran/pmc/corporate, WEAR_HEAD) - new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/corporate, WEAR_FEET) + new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/corporate/knife, WEAR_FEET) new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/lightpack/five_slot, WEAR_BACK) new_human.equip_to_slot_or_del(new /obj/item/weapon/baton, WEAR_IN_BACK) diff --git a/code/modules/gear_presets/survivors/survivors.dm b/code/modules/gear_presets/survivors/survivors.dm index 65e5a8f4c123..d90d31ef3880 100644 --- a/code/modules/gear_presets/survivors/survivors.dm +++ b/code/modules/gear_presets/survivors/survivors.dm @@ -18,6 +18,74 @@ var/survivor_variant = CIVILIAN_SURVIVOR + dress_under = list( + /obj/item/clothing/under/liaison_suit/black, + /obj/item/clothing/under/liaison_suit/blue, + /obj/item/clothing/under/liaison_suit/brown, + /obj/item/clothing/under/liaison_suit/corporate_formal, + /obj/item/clothing/under/liaison_suit, + /obj/item/clothing/under/liaison_suit/charcoal, + /obj/item/clothing/under/liaison_suit/formal, + /obj/item/clothing/under/liaison_suit/blazer, + /obj/item/clothing/under/liaison_suit/suspenders, + /obj/item/clothing/under/blackskirt, + /obj/item/clothing/under/suit_jacket/trainee, + /obj/item/clothing/under/liaison_suit/ivy, + /obj/item/clothing/under/liaison_suit/orange, + /obj/item/clothing/under/liaison_suit/field, + /obj/item/clothing/under/colonist/workwear, + /obj/item/clothing/under/colonist/workwear/khaki, + /obj/item/clothing/under/colonist/workwear/pink, + /obj/item/clothing/under/colonist/workwear/green, + ) + dress_over = list( + /obj/item/clothing/suit/storage/jacket/marine/corporate/black, + /obj/item/clothing/suit/storage/jacket/marine/corporate, + /obj/item/clothing/suit/storage/jacket/marine/corporate/brown, + /obj/item/clothing/suit/storage/jacket/marine/corporate/blue, + /obj/item/clothing/suit/storage/jacket/marine/corporate/black, + /obj/item/clothing/suit/storage/jacket/marine/bomber/grey, + /obj/item/clothing/suit/storage/jacket/marine/bomber/red, + /obj/item/clothing/suit/storage/jacket/marine/bomber, + /obj/item/clothing/suit/storage/bomber, + /obj/item/clothing/suit/storage/bomber/alt, + /obj/item/clothing/suit/storage/snow_suit/liaison, + /obj/item/clothing/suit/storage/labcoat, + /obj/item/clothing/suit/storage/jacket/marine/vest/grey, + /obj/item/clothing/suit/storage/jacket/marine/vest, + /obj/item/clothing/suit/storage/jacket/marine/vest/tan, + /obj/item/clothing/suit/storage/webbing, + ) + dress_extra = list( + /obj/item/clothing/accessory/black, + /obj/item/clothing/accessory/red, + /obj/item/clothing/accessory/purple, + /obj/item/clothing/accessory/blue, + /obj/item/clothing/accessory/green, + /obj/item/clothing/accessory/gold, + /obj/item/clothing/accessory/horrible, + /obj/item/clothing/glasses/sunglasses/big, + /obj/item/clothing/glasses/sunglasses/aviator, + /obj/item/clothing/glasses/sunglasses, + /obj/item/clothing/glasses/sunglasses/prescription, + /obj/item/clothing/glasses/regular/hipster, + ) + dress_gloves = list( + /obj/item/clothing/gloves/black, + /obj/item/clothing/gloves/marine/dress, + ) + dress_shoes = list( + /obj/item/clothing/shoes/laceup, + /obj/item/clothing/shoes/laceup/brown, + /obj/item/clothing/shoes/black, + /obj/item/clothing/shoes/marine/corporate, + ) + dress_hat = list( + /obj/item/clothing/head/fedora, + /obj/item/clothing/head/beret/cm/black/civilian, + /obj/item/clothing/head/beret/cm/white/civilian, + ) + /datum/equipment_preset/survivor/load_name(mob/living/carbon/human/new_human, randomise) new_human.gender = pick(MALE, FEMALE) var/datum/preferences/A = new diff --git a/code/modules/gear_presets/survivors/trijent/preset_trijent.dm b/code/modules/gear_presets/survivors/trijent/preset_trijent.dm index 100f83518565..3c9926de69aa 100644 --- a/code/modules/gear_presets/survivors/trijent/preset_trijent.dm +++ b/code/modules/gear_presets/survivors/trijent/preset_trijent.dm @@ -17,7 +17,7 @@ new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel/sec(new_human), WEAR_BACK) new_human.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/marine/veteran/pmc(new_human), WEAR_HEAD) new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/armor/vest/security(new_human), WEAR_JACKET) - new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/corporate(new_human), WEAR_FEET) + new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/corporate/knife(new_human), WEAR_FEET) ..() /datum/equipment_preset/survivor/colonial_marshal/trijent diff --git a/code/modules/gear_presets/upp.dm b/code/modules/gear_presets/upp.dm index ad7b1523d279..8ac573b5beae 100644 --- a/code/modules/gear_presets/upp.dm +++ b/code/modules/gear_presets/upp.dm @@ -1606,6 +1606,8 @@ new_human.equip_to_slot_or_del(new /obj/item/reagent_container/food/snacks/upp, WEAR_IN_BACK) new_human.equip_to_slot_or_del(new /obj/item/device/motiondetector/hacked, WEAR_IN_BACK) new_human.equip_to_slot_or_del(new /obj/item/device/megaphone, WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/device/cotablet/upp, WEAR_IN_BACK) + //face new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/UPP/command, WEAR_L_EAR) //head @@ -1766,6 +1768,7 @@ new_human.equip_to_slot_or_del(new /obj/item/reagent_container/food/snacks/upp, WEAR_IN_BACK) new_human.equip_to_slot_or_del(new /obj/item/device/motiondetector/hacked, WEAR_IN_BACK) new_human.equip_to_slot_or_del(new /obj/item/device/megaphone, WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/device/cotablet/upp, WEAR_IN_BACK) //face new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/UPP/command, WEAR_L_EAR) //head @@ -1926,6 +1929,7 @@ new_human.equip_to_slot_or_del(new /obj/item/reagent_container/food/snacks/upp, WEAR_IN_BACK) new_human.equip_to_slot_or_del(new /obj/item/device/motiondetector/hacked, WEAR_IN_BACK) new_human.equip_to_slot_or_del(new /obj/item/device/megaphone, WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/device/cotablet/upp, WEAR_IN_BACK) //face new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/UPP/command, WEAR_L_EAR) //head @@ -2086,6 +2090,7 @@ new_human.equip_to_slot_or_del(new /obj/item/reagent_container/food/snacks/upp, WEAR_IN_BACK) new_human.equip_to_slot_or_del(new /obj/item/device/motiondetector/hacked, WEAR_IN_BACK) new_human.equip_to_slot_or_del(new /obj/item/device/megaphone, WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/device/cotablet/upp, WEAR_IN_BACK) //face new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/UPP/command, WEAR_L_EAR) //head @@ -2246,6 +2251,7 @@ new_human.equip_to_slot_or_del(new /obj/item/reagent_container/food/snacks/upp, WEAR_IN_BACK) new_human.equip_to_slot_or_del(new /obj/item/device/motiondetector/hacked, WEAR_IN_BACK) new_human.equip_to_slot_or_del(new /obj/item/device/megaphone, WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/device/cotablet/upp, WEAR_IN_BACK) //face new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/UPP/command, WEAR_L_EAR) //head @@ -2406,6 +2412,7 @@ new_human.equip_to_slot_or_del(new /obj/item/reagent_container/food/snacks/upp, WEAR_IN_BACK) new_human.equip_to_slot_or_del(new /obj/item/device/motiondetector/hacked, WEAR_IN_BACK) new_human.equip_to_slot_or_del(new /obj/item/device/megaphone, WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/device/cotablet/upp, WEAR_IN_BACK) //face new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/UPP/command, WEAR_L_EAR) //head diff --git a/code/modules/gear_presets/uscm_ship.dm b/code/modules/gear_presets/uscm_ship.dm index ba4a8a684321..38a07f8ee874 100644 --- a/code/modules/gear_presets/uscm_ship.dm +++ b/code/modules/gear_presets/uscm_ship.dm @@ -53,22 +53,73 @@ minimap_icon = "cl" minimap_background = MINIMAP_ICON_BACKGROUND_CIVILIAN - utility_under = list(/obj/item/clothing/under/liaison_suit/black) - utility_hat = list() - utility_gloves = list() - utility_shoes = list(/obj/item/clothing/shoes/laceup) - utility_extra = list(/obj/item/clothing/under/liaison_suit/blue) - - service_under = list(/obj/item/clothing/under/liaison_suit/field) - service_over = list() - service_hat = list() - service_shoes = list(/obj/item/clothing/shoes/laceup) - - dress_under = list(/obj/item/clothing/under/liaison_suit/corporate_formal) - dress_over = list() - dress_hat = list() - dress_gloves = list(/obj/item/clothing/gloves/marine/dress) - dress_shoes = list(/obj/item/clothing/shoes/laceup) + dress_under = list( + /obj/item/clothing/under/liaison_suit/black, + /obj/item/clothing/under/liaison_suit/blue, + /obj/item/clothing/under/liaison_suit/brown, + /obj/item/clothing/under/liaison_suit/corporate_formal, + /obj/item/clothing/under/liaison_suit, + /obj/item/clothing/under/liaison_suit/charcoal, + /obj/item/clothing/under/liaison_suit/formal, + /obj/item/clothing/under/liaison_suit/blazer, + /obj/item/clothing/under/liaison_suit/suspenders, + /obj/item/clothing/under/blackskirt, + /obj/item/clothing/under/suit_jacket/trainee, + /obj/item/clothing/under/liaison_suit/ivy, + /obj/item/clothing/under/liaison_suit/orange, + /obj/item/clothing/under/liaison_suit/field, + /obj/item/clothing/under/colonist/workwear, + /obj/item/clothing/under/colonist/workwear/khaki, + /obj/item/clothing/under/colonist/workwear/pink, + /obj/item/clothing/under/colonist/workwear/green, + ) + dress_over = list( + /obj/item/clothing/suit/storage/jacket/marine/corporate/black, + /obj/item/clothing/suit/storage/jacket/marine/corporate, + /obj/item/clothing/suit/storage/jacket/marine/corporate/brown, + /obj/item/clothing/suit/storage/jacket/marine/corporate/blue, + /obj/item/clothing/suit/storage/jacket/marine/corporate/black, + /obj/item/clothing/suit/storage/jacket/marine/bomber/grey, + /obj/item/clothing/suit/storage/jacket/marine/bomber/red, + /obj/item/clothing/suit/storage/jacket/marine/bomber, + /obj/item/clothing/suit/storage/bomber, + /obj/item/clothing/suit/storage/bomber/alt, + /obj/item/clothing/suit/storage/snow_suit/liaison, + /obj/item/clothing/suit/storage/labcoat, + /obj/item/clothing/suit/storage/jacket/marine/vest/grey, + /obj/item/clothing/suit/storage/jacket/marine/vest, + /obj/item/clothing/suit/storage/jacket/marine/vest/tan, + /obj/item/clothing/suit/storage/webbing, + ) + dress_extra = list( + /obj/item/clothing/accessory/black, + /obj/item/clothing/accessory/red, + /obj/item/clothing/accessory/purple, + /obj/item/clothing/accessory/blue, + /obj/item/clothing/accessory/green, + /obj/item/clothing/accessory/gold, + /obj/item/clothing/accessory/horrible, + /obj/item/clothing/glasses/sunglasses/big, + /obj/item/clothing/glasses/sunglasses/aviator, + /obj/item/clothing/glasses/sunglasses, + /obj/item/clothing/glasses/sunglasses/prescription, + /obj/item/clothing/glasses/regular/hipster, + ) + dress_gloves = list( + /obj/item/clothing/gloves/black, + /obj/item/clothing/gloves/marine/dress, + ) + dress_shoes = list( + /obj/item/clothing/shoes/laceup, + /obj/item/clothing/shoes/laceup/brown, + /obj/item/clothing/shoes/black, + /obj/item/clothing/shoes/marine/corporate, + ) + dress_hat = list( + /obj/item/clothing/head/fedora, + /obj/item/clothing/head/beret/cm/black/civilian, + /obj/item/clothing/head/beret/cm/white/civilian, + ) /datum/equipment_preset/uscm_ship/liaison/New() . = ..() diff --git a/code/modules/gear_presets/wy.dm b/code/modules/gear_presets/wy.dm index 75349115b47c..6cfccab00036 100644 --- a/code/modules/gear_presets/wy.dm +++ b/code/modules/gear_presets/wy.dm @@ -10,6 +10,74 @@ languages = list(LANGUAGE_ENGLISH, LANGUAGE_JAPANESE) var/headset_type = /obj/item/device/radio/headset/distress/WY + dress_under = list( + /obj/item/clothing/under/liaison_suit/black, + /obj/item/clothing/under/liaison_suit/blue, + /obj/item/clothing/under/liaison_suit/brown, + /obj/item/clothing/under/liaison_suit/corporate_formal, + /obj/item/clothing/under/liaison_suit, + /obj/item/clothing/under/liaison_suit/charcoal, + /obj/item/clothing/under/liaison_suit/formal, + /obj/item/clothing/under/liaison_suit/blazer, + /obj/item/clothing/under/liaison_suit/suspenders, + /obj/item/clothing/under/blackskirt, + /obj/item/clothing/under/suit_jacket/trainee, + /obj/item/clothing/under/liaison_suit/ivy, + /obj/item/clothing/under/liaison_suit/orange, + /obj/item/clothing/under/liaison_suit/field, + /obj/item/clothing/under/colonist/workwear, + /obj/item/clothing/under/colonist/workwear/khaki, + /obj/item/clothing/under/colonist/workwear/pink, + /obj/item/clothing/under/colonist/workwear/green, + ) + dress_over = list( + /obj/item/clothing/suit/storage/jacket/marine/corporate/black, + /obj/item/clothing/suit/storage/jacket/marine/corporate, + /obj/item/clothing/suit/storage/jacket/marine/corporate/brown, + /obj/item/clothing/suit/storage/jacket/marine/corporate/blue, + /obj/item/clothing/suit/storage/jacket/marine/corporate/black, + /obj/item/clothing/suit/storage/jacket/marine/bomber/grey, + /obj/item/clothing/suit/storage/jacket/marine/bomber/red, + /obj/item/clothing/suit/storage/jacket/marine/bomber, + /obj/item/clothing/suit/storage/bomber, + /obj/item/clothing/suit/storage/bomber/alt, + /obj/item/clothing/suit/storage/snow_suit/liaison, + /obj/item/clothing/suit/storage/labcoat, + /obj/item/clothing/suit/storage/jacket/marine/vest/grey, + /obj/item/clothing/suit/storage/jacket/marine/vest, + /obj/item/clothing/suit/storage/jacket/marine/vest/tan, + /obj/item/clothing/suit/storage/webbing, + ) + dress_extra = list( + /obj/item/clothing/accessory/black, + /obj/item/clothing/accessory/red, + /obj/item/clothing/accessory/purple, + /obj/item/clothing/accessory/blue, + /obj/item/clothing/accessory/green, + /obj/item/clothing/accessory/gold, + /obj/item/clothing/accessory/horrible, + /obj/item/clothing/glasses/sunglasses/big, + /obj/item/clothing/glasses/sunglasses/aviator, + /obj/item/clothing/glasses/sunglasses, + /obj/item/clothing/glasses/sunglasses/prescription, + /obj/item/clothing/glasses/regular/hipster, + ) + dress_gloves = list( + /obj/item/clothing/gloves/black, + /obj/item/clothing/gloves/marine/dress, + ) + dress_shoes = list( + /obj/item/clothing/shoes/laceup, + /obj/item/clothing/shoes/laceup/brown, + /obj/item/clothing/shoes/black, + /obj/item/clothing/shoes/marine/corporate, + ) + dress_hat = list( + /obj/item/clothing/head/fedora, + /obj/item/clothing/head/beret/cm/black/civilian, + /obj/item/clothing/head/beret/cm/white/civilian, + ) + /datum/equipment_preset/wy/New() . = ..() access += get_access(ACCESS_LIST_WY_BASE) diff --git a/code/modules/gear_presets/wy_goons.dm b/code/modules/gear_presets/wy_goons.dm index c67f82176c93..a15e9b443302 100644 --- a/code/modules/gear_presets/wy_goons.dm +++ b/code/modules/gear_presets/wy_goons.dm @@ -70,7 +70,7 @@ new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/veteran/pmc/light/corporate, WEAR_JACKET) new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/veteran, WEAR_HANDS) new_human.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/marine/veteran/pmc/corporate, WEAR_HEAD) - new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/corporate, WEAR_FEET) + new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/corporate/knife, WEAR_FEET) new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/lightpack, WEAR_BACK) new_human.equip_to_slot_or_del(new /obj/item/weapon/baton, WEAR_IN_BACK) @@ -104,7 +104,7 @@ new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/veteran, WEAR_HANDS) new_human.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/marine/veteran/pmc/corporate, WEAR_HEAD) new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/welding, WEAR_EYES) - new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/corporate, WEAR_FEET) + new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/corporate/knife, WEAR_FEET) new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/marine/engineerpack/ert, WEAR_BACK) new_human.equip_to_slot_or_del(new /obj/item/weapon/baton, WEAR_IN_BACK) @@ -141,7 +141,7 @@ new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/veteran/pmc/light/corporate/lead, WEAR_JACKET) new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/veteran, WEAR_HANDS) new_human.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/marine/veteran/pmc/corporate/lead, WEAR_HEAD) - new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/corporate, WEAR_FEET) + new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/corporate/knife, WEAR_FEET) new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/lightpack, WEAR_BACK) new_human.equip_to_slot_or_del(new /obj/item/weapon/baton, WEAR_IN_BACK) @@ -167,12 +167,80 @@ paygrades = list(PAY_SHORT_CCMO = JOB_PLAYTIME_TIER_0) skills = /datum/skills/researcher + dress_under = list( + /obj/item/clothing/under/liaison_suit/black, + /obj/item/clothing/under/liaison_suit/blue, + /obj/item/clothing/under/liaison_suit/brown, + /obj/item/clothing/under/liaison_suit/corporate_formal, + /obj/item/clothing/under/liaison_suit, + /obj/item/clothing/under/liaison_suit/charcoal, + /obj/item/clothing/under/liaison_suit/formal, + /obj/item/clothing/under/liaison_suit/blazer, + /obj/item/clothing/under/liaison_suit/suspenders, + /obj/item/clothing/under/blackskirt, + /obj/item/clothing/under/suit_jacket/trainee, + /obj/item/clothing/under/liaison_suit/ivy, + /obj/item/clothing/under/liaison_suit/orange, + /obj/item/clothing/under/liaison_suit/field, + /obj/item/clothing/under/colonist/workwear, + /obj/item/clothing/under/colonist/workwear/khaki, + /obj/item/clothing/under/colonist/workwear/pink, + /obj/item/clothing/under/colonist/workwear/green, + ) + dress_over = list( + /obj/item/clothing/suit/storage/jacket/marine/corporate/black, + /obj/item/clothing/suit/storage/jacket/marine/corporate, + /obj/item/clothing/suit/storage/jacket/marine/corporate/brown, + /obj/item/clothing/suit/storage/jacket/marine/corporate/blue, + /obj/item/clothing/suit/storage/jacket/marine/corporate/black, + /obj/item/clothing/suit/storage/jacket/marine/bomber/grey, + /obj/item/clothing/suit/storage/jacket/marine/bomber/red, + /obj/item/clothing/suit/storage/jacket/marine/bomber, + /obj/item/clothing/suit/storage/bomber, + /obj/item/clothing/suit/storage/bomber/alt, + /obj/item/clothing/suit/storage/snow_suit/liaison, + /obj/item/clothing/suit/storage/labcoat, + /obj/item/clothing/suit/storage/jacket/marine/vest/grey, + /obj/item/clothing/suit/storage/jacket/marine/vest, + /obj/item/clothing/suit/storage/jacket/marine/vest/tan, + /obj/item/clothing/suit/storage/webbing, + ) + dress_extra = list( + /obj/item/clothing/accessory/black, + /obj/item/clothing/accessory/red, + /obj/item/clothing/accessory/purple, + /obj/item/clothing/accessory/blue, + /obj/item/clothing/accessory/green, + /obj/item/clothing/accessory/gold, + /obj/item/clothing/accessory/horrible, + /obj/item/clothing/glasses/sunglasses/big, + /obj/item/clothing/glasses/sunglasses/aviator, + /obj/item/clothing/glasses/sunglasses, + /obj/item/clothing/glasses/sunglasses/prescription, + /obj/item/clothing/glasses/regular/hipster, + ) + dress_gloves = list( + /obj/item/clothing/gloves/black, + /obj/item/clothing/gloves/marine/dress, + ) + dress_shoes = list( + /obj/item/clothing/shoes/laceup, + /obj/item/clothing/shoes/laceup/brown, + /obj/item/clothing/shoes/black, + /obj/item/clothing/shoes/marine/corporate, + ) + dress_hat = list( + /obj/item/clothing/head/fedora, + /obj/item/clothing/head/beret/cm/black/civilian, + /obj/item/clothing/head/beret/cm/white/civilian, + ) + /datum/equipment_preset/goon/researcher/load_gear(mob/living/carbon/human/new_human) new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/WY, WEAR_L_EAR) new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/science, WEAR_EYES) new_human.equip_to_slot_or_del(new /obj/item/clothing/under/liaison_suit/corporate_formal, WEAR_BODY) new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/labcoat, WEAR_JACKET) - new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/corporate, WEAR_FEET) + new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/marine/corporate/knife, WEAR_FEET) new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/lightpack, WEAR_BACK) new_human.equip_to_slot_or_del(new /obj/item/handheld_distress_beacon, WEAR_IN_BACK) diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 3adb5c53f299..993042a14a2b 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -512,7 +512,7 @@ last_special = world.time + 100 visible_message(SPAN_DANGER("[src] attempts to unbuckle themself!"),\ SPAN_DANGER("You attempt to unbuckle yourself. (This will take around 2 minutes and you need to stand still)")) - if(do_after(src, 1200, INTERRUPT_ALL^INTERRUPT_RESIST, BUSY_ICON_HOSTILE)) + if(do_after(src, 1200, INTERRUPT_NO_FLOORED^INTERRUPT_RESIST, BUSY_ICON_HOSTILE)) if(!buckled) return visible_message(SPAN_DANGER("[src] manages to unbuckle themself!"),\ diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index f670fa682154..aff7deeae3b5 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -33,6 +33,8 @@ var/muzzle_flash = "muzzle_flash" ///muzzle flash brightness var/muzzle_flash_lum = 3 + ///Color of the muzzle flash light effect. + var/muzzle_flash_color = COLOR_VERY_SOFT_YELLOW var/fire_sound = 'sound/weapons/Gunshot.ogg' /// If fire_sound is null, it will pick a sound from the list here instead. @@ -1780,6 +1782,7 @@ not all weapons use normal magazines etc. load_into_chamber() itself is designed if(!light_on && (light_range <= muzzle_flash_lum)) set_light_range(muzzle_flash_lum) set_light_on(TRUE) + set_light_color(muzzle_flash_color) addtimer(CALLBACK(src, PROC_REF(reset_light_range), prev_light), 0.5 SECONDS) var/image/I = image('icons/obj/items/weapons/projectiles.dmi', user, muzzle_flash, user.dir == NORTH ? ABOVE_LYING_MOB_LAYER : FLOAT_LAYER) diff --git a/code/modules/projectiles/guns/energy.dm b/code/modules/projectiles/guns/energy.dm index b3dcae388a13..6826d8af921a 100644 --- a/code/modules/projectiles/guns/energy.dm +++ b/code/modules/projectiles/guns/energy.dm @@ -117,6 +117,7 @@ icon_state = "rxfm5_eva" item_state = "eva" muzzle_flash = "muzzle_laser" + muzzle_flash_color = COLOR_LASER_RED fire_sound = 'sound/weapons/Laser4.ogg' w_class = SIZE_MEDIUM gun_category = GUN_CATEGORY_HANDGUN @@ -174,6 +175,7 @@ icon_state = "laz_uzi" item_state = "laz_uzi" muzzle_flash = "muzzle_laser" + muzzle_flash_color = COLOR_LASER_RED gun_category = GUN_CATEGORY_SMG flags_equip_slot = SLOT_WAIST charge_cost = 200 diff --git a/code/modules/projectiles/guns/pistols.dm b/code/modules/projectiles/guns/pistols.dm index 3a85db687b26..e7d9174a6984 100644 --- a/code/modules/projectiles/guns/pistols.dm +++ b/code/modules/projectiles/guns/pistols.dm @@ -653,6 +653,7 @@ current_mag = /obj/item/ammo_magazine/pistol/es4 force = 8 muzzle_flash = "muzzle_flash_blue" + muzzle_flash_color = COLOR_MUZZLE_BLUE flags_gun_features = GUN_AUTO_EJECTOR|GUN_CAN_POINTBLANK|GUN_ONE_HAND_WIELDED|GUN_AMMO_COUNTER attachable_allowed = list( /obj/item/attachable/flashlight, diff --git a/code/modules/security_levels/keycard_authentication.dm b/code/modules/security_levels/keycard_authentication.dm index 4b7cdd69a449..1a4881904801 100644 --- a/code/modules/security_levels/keycard_authentication.dm +++ b/code/modules/security_levels/keycard_authentication.dm @@ -36,8 +36,11 @@ if(active == 1) //This is not the device that made the initial request. It is the device confirming the request. if(event_source) + if(event_source.event_triggered_by == user) + user.visible_message(SPAN_DANGER("Your ID is rejected, as it is the one that triggered the event!")) + return event_source.confirmed = 1 - event_source.event_confirmed_by = usr + event_source.event_confirmed_by = user else if(screen == 2) event_triggered_by = usr broadcast_request() //This is the device making the initial event request. It needs to broadcast to other devices diff --git a/code/modules/tgs/core/README.md b/code/modules/tgs/core/README.md index b82d8f49e297..965e21b549a3 100644 --- a/code/modules/tgs/core/README.md +++ b/code/modules/tgs/core/README.md @@ -3,7 +3,7 @@ This folder contains all DMAPI code not directly involved in an API. - [_definitions.dm](./definitions.dm) contains defines needed across DMAPI internals. +- [byond_world_export.dm](./byond_world_export.dm) contains the default `/datum/tgs_http_handler` implementation which uses `world.Export()`. - [core.dm](./core.dm) contains the implementations of the `/world/proc/TgsXXX()` procs. Many map directly to the `/datum/tgs_api` functions. It also contains the /datum selection and setup code. - [datum.dm](./datum.dm) contains the `/datum/tgs_api` declarations that all APIs must implement. - [tgs_version.dm](./tgs_version.dm) contains the `/datum/tgs_version` definition -- diff --git a/code/modules/tgs/core/byond_world_export.dm b/code/modules/tgs/core/byond_world_export.dm new file mode 100644 index 000000000000..6ef8d841b8f7 --- /dev/null +++ b/code/modules/tgs/core/byond_world_export.dm @@ -0,0 +1,22 @@ +/datum/tgs_http_handler/byond_world_export + +/datum/tgs_http_handler/byond_world_export/PerformGet(url) + // This is an infinite sleep until we get a response + var/export_response = world.Export(url) + TGS_DEBUG_LOG("byond_world_export: Export complete") + + if(!export_response) + TGS_ERROR_LOG("byond_world_export: Failed request: [url]") + return new /datum/tgs_http_result(null, FALSE) + + var/content = export_response["CONTENT"] + if(!content) + TGS_ERROR_LOG("byond_world_export: Failed request, missing content!") + return new /datum/tgs_http_result(null, FALSE) + + var/response_json = TGS_FILE2TEXT_NATIVE(content) + if(!response_json) + TGS_ERROR_LOG("byond_world_export: Failed request, failed to load content!") + return new /datum/tgs_http_result(null, FALSE) + + return new /datum/tgs_http_result(response_json, TRUE) diff --git a/code/modules/tgs/core/core.dm b/code/modules/tgs/core/core.dm index 15622228e91f..63cb5a2c3514 100644 --- a/code/modules/tgs/core/core.dm +++ b/code/modules/tgs/core/core.dm @@ -1,4 +1,4 @@ -/world/TgsNew(datum/tgs_event_handler/event_handler, minimum_required_security_level = TGS_SECURITY_ULTRASAFE) +/world/TgsNew(datum/tgs_event_handler/event_handler, minimum_required_security_level = TGS_SECURITY_ULTRASAFE, datum/tgs_http_handler/http_handler = null) var/current_api = TGS_READ_GLOBAL(tgs) if(current_api) TGS_ERROR_LOG("API datum already set (\ref[current_api] ([current_api]))! Was TgsNew() called more than once?") @@ -55,7 +55,10 @@ TGS_ERROR_LOG("Invalid parameter for event_handler: [event_handler]") event_handler = null - var/datum/tgs_api/new_api = new api_datum(event_handler, version) + if(!http_handler) + http_handler = new /datum/tgs_http_handler/byond_world_export + + var/datum/tgs_api/new_api = new api_datum(event_handler, version, http_handler) TGS_WRITE_GLOBAL(tgs, new_api) diff --git a/code/modules/tgs/core/datum.dm b/code/modules/tgs/core/datum.dm index f734fd0527f0..3ca53e9bf7c6 100644 --- a/code/modules/tgs/core/datum.dm +++ b/code/modules/tgs/core/datum.dm @@ -6,7 +6,7 @@ TGS_DEFINE_AND_SET_GLOBAL(tgs, null) var/list/warned_deprecated_command_runs -/datum/tgs_api/New(datum/tgs_event_handler/event_handler, datum/tgs_version/version) +/datum/tgs_api/New(datum/tgs_event_handler/event_handler, datum/tgs_version/version, datum/tgs_http_handler/http_handler) ..() src.event_handler = event_handler src.version = version diff --git a/code/modules/tgs/includes.dm b/code/modules/tgs/includes.dm index 23b714f9d064..f5118ed55a3c 100644 --- a/code/modules/tgs/includes.dm +++ b/code/modules/tgs/includes.dm @@ -1,4 +1,5 @@ #include "core\_definitions.dm" +#include "core\byond_world_export.dm" #include "core\core.dm" #include "core\datum.dm" #include "core\tgs_version.dm" diff --git a/code/modules/tgs/v5/api.dm b/code/modules/tgs/v5/api.dm index 05d0dee25b3c..3e328fc7c27d 100644 --- a/code/modules/tgs/v5/api.dm +++ b/code/modules/tgs/v5/api.dm @@ -31,9 +31,12 @@ var/detached = FALSE -/datum/tgs_api/v5/New() + var/datum/tgs_http_handler/http_handler + +/datum/tgs_api/v5/New(datum/tgs_event_handler/event_handler, datum/tgs_version/version, datum/tgs_http_handler/http_handler) . = ..() interop_version = version + src.http_handler = http_handler TGS_DEBUG_LOG("V5 API created: [json_encode(args)]") /datum/tgs_api/v5/ApiVersion() diff --git a/code/modules/tgs/v5/bridge.dm b/code/modules/tgs/v5/bridge.dm index 0c5e701a32b6..62201fcc9e58 100644 --- a/code/modules/tgs/v5/bridge.dm +++ b/code/modules/tgs/v5/bridge.dm @@ -78,27 +78,24 @@ WaitForReattach(FALSE) TGS_DEBUG_LOG("Bridge request start") - // This is an infinite sleep until we get a response - var/export_response = world.Export(bridge_request) + var/datum/tgs_http_result/result = http_handler.PerformGet(bridge_request) TGS_DEBUG_LOG("Bridge request complete") - if(!export_response) - TGS_ERROR_LOG("Failed bridge request: [bridge_request]") + if(isnull(result)) + TGS_ERROR_LOG("Failed bridge request, handler returned null!") return - var/content = export_response["CONTENT"] - if(!content) - TGS_ERROR_LOG("Failed bridge request, missing content!") + if(!istype(result) || result.type != /datum/tgs_http_result) + TGS_ERROR_LOG("Failed bridge request, handler returned non-[/datum/tgs_http_result]!") return - var/response_json = TGS_FILE2TEXT_NATIVE(content) - if(!response_json) - TGS_ERROR_LOG("Failed bridge request, failed to load content!") + if(!result.success) + TGS_DEBUG_LOG("Failed bridge request, HTTP request failed!") return - var/list/bridge_response = json_decode(response_json) + var/list/bridge_response = json_decode(result.response_text) if(!bridge_response) - TGS_ERROR_LOG("Failed bridge request, bad json: [response_json]") + TGS_ERROR_LOG("Failed bridge request, bad json: [result.response_text]") return var/error = bridge_response[DMAPI5_RESPONSE_ERROR_MESSAGE] diff --git a/colonialmarines.dme b/colonialmarines.dme index dab9a056a585..e3189c10baa4 100644 --- a/colonialmarines.dme +++ b/colonialmarines.dme @@ -843,7 +843,6 @@ #include "code\game\machinery\air_alarm.dm" #include "code\game\machinery\autolathe.dm" #include "code\game\machinery\autolathe_datums.dm" -#include "code\game\machinery\Beacon.dm" #include "code\game\machinery\biohazard_lockdown.dm" #include "code\game\machinery\bioprinter.dm" #include "code\game\machinery\buttons.dm" @@ -998,6 +997,7 @@ #include "code\game\machinery\vending\vendor_types\antag\antag_guns_sorted.dm" #include "code\game\machinery\vending\vendor_types\crew\combat_correspondent.dm" #include "code\game\machinery\vending\vendor_types\crew\commanding_officer.dm" +#include "code\game\machinery\vending\vendor_types\crew\corporate_liaison.dm" #include "code\game\machinery\vending\vendor_types\crew\engineering.dm" #include "code\game\machinery\vending\vendor_types\crew\medical.dm" #include "code\game\machinery\vending\vendor_types\crew\mp.dm" @@ -1322,10 +1322,10 @@ #include "code\game\objects\structures\window_frame.dm" #include "code\game\objects\structures\barricade\barricade.dm" #include "code\game\objects\structures\barricade\deployable.dm" +#include "code\game\objects\structures\barricade\folding.dm" #include "code\game\objects\structures\barricade\handrail.dm" -#include "code\game\objects\structures\barricade\metal.dm" #include "code\game\objects\structures\barricade\misc.dm" -#include "code\game\objects\structures\barricade\plasteel.dm" +#include "code\game\objects\structures\barricade\non_folding.dm" #include "code\game\objects\structures\barricade\sandbags.dm" #include "code\game\objects\structures\crates_lockers\closets.dm" #include "code\game\objects\structures\crates_lockers\crates.dm" diff --git a/html/changelogs/AutoChangeLog-pr-6876.yml b/html/changelogs/AutoChangeLog-pr-6876.yml deleted file mode 100644 index 16ca3bf4b61c..000000000000 --- a/html/changelogs/AutoChangeLog-pr-6876.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "MarpleJones" -delete-after: True -changes: - - balance: "Reduces the cost of the AGM-184 'Harpoon II' from 300 to 200." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-6888.yml b/html/changelogs/AutoChangeLog-pr-6888.yml deleted file mode 100644 index 002755079dc0..000000000000 --- a/html/changelogs/AutoChangeLog-pr-6888.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "Git-Nivrak" -delete-after: True -changes: - - balance: "Explosions now always deal full damage at the source tile" - - bugfix: "Fixed sadar rockets not gibbing humans on direct hit" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-6908.yml b/html/changelogs/AutoChangeLog-pr-6908.yml deleted file mode 100644 index 8718ee21c162..000000000000 --- a/html/changelogs/AutoChangeLog-pr-6908.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Doubleumc" -delete-after: True -changes: - - admin: "\"Start Round\" can start a delayed round" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-6909.yml b/html/changelogs/AutoChangeLog-pr-6909.yml deleted file mode 100644 index 9a91dee8fd9d..000000000000 --- a/html/changelogs/AutoChangeLog-pr-6909.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Adamix147" -delete-after: True -changes: - - maptweak: "Moved the unfixable APC at Kutjevo Botany to make it fixable again." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-6910.yml b/html/changelogs/AutoChangeLog-pr-6910.yml deleted file mode 100644 index fc24d3612b92..000000000000 --- a/html/changelogs/AutoChangeLog-pr-6910.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Contrabang" -delete-after: True -changes: - - bugfix: "ERT no longer show up in the orbit escape section" \ No newline at end of file diff --git a/html/changelogs/archive/2024-08.yml b/html/changelogs/archive/2024-08.yml index 1209b8165f1f..ee3672d5738f 100644 --- a/html/changelogs/archive/2024-08.yml +++ b/html/changelogs/archive/2024-08.yml @@ -198,3 +198,61 @@ out zzzmike: - rscadd: fun fact for internal bleeding fixed +2024-08-13: + Adamix147: + - maptweak: Moved the unfixable APC at Kutjevo Botany to make it fixable again. + Contrabang: + - bugfix: ERT no longer show up in the orbit escape section + Doubleumc: + - admin: '"Start Round" can start a delayed round' + Git-Nivrak: + - balance: Explosions now always deal full damage at the source tile + - bugfix: Fixed sadar rockets not gibbing humans on direct hit + MarpleJones: + - balance: Reduces the cost of the AGM-184 'Harpoon II' from 300 to 200. +2024-08-15: + Blundir: + - rscadd: plasteel non folding barricade + Steelpoint: + - rscadd: A plantable UPP flag has been added to the game, an equilivant of the + United Americas flag. Currently admin spawn only. + - rscadd: A Command Tablet has been added that can be used by UPP Officers. + - rscadd: UPP Officers ranked O4 or greater (USCM Major Equilivant) are issued with + a Command Tablet. +2024-08-16: + Doubleumc: + - ui: dark HUD indicators stay anchored to the viewport edge +2024-08-17: + 567Turtle: + - rscadd: Gay crayons for your helmet ("Box of Prideful Crayons" in the toys section + of the loadout menu.) + Blundir: + - rscadd: Guns now support custom muzzle flash light color, some guns have a new + color of it now, standard color is yellow tinted now instead of white + cuberound: + - bugfix: two persons are needed to activate red, ert and emergency acces using + cards +2024-08-18: + Zonespace27: + - bugfix: Fixed heavy sniper spec opening up the wrong specialist slot on admin + cryo + cuberound: + - rscdel: removes bluespace beacon +2024-08-19: + Asmocard: + - qol: Playing cards no longer take a storage slot from your helmet, they take a + vanity slot now. + Vandujr: + - rscadd: Added a new 'Corporate Liaison's Wardrobe' that all corporate roles can + use. includes more clothes than the cabinet originally had. + - rscadd: Added a new orange outfit the CL can pick from his Wardrobe Vendor. + - rscadd: Added civilian black and white berets. + - refactor: Refactored the corporate boots, making a version with and without a + knife in it on spawn. All roles that should have the knife version, have it. + - imageadd: Added new item sprites to the old 'complete' suits; that being the tan + and formal suits, aswell as the suspenders. + - imageadd: Added a new item sprite for the black beret, in line with the rest of + the modern berets. + - maptweak: Swapped the CL's cabinet for the wardrobe vendor. + zzzmike: + - bugfix: lets you resist when bucklecuffed to bed diff --git a/icons/mob/humans/onmob/helmet_garb.dmi b/icons/mob/humans/onmob/helmet_garb.dmi index 9876dd8629ad..5611d28c8480 100644 Binary files a/icons/mob/humans/onmob/helmet_garb.dmi and b/icons/mob/humans/onmob/helmet_garb.dmi differ diff --git a/icons/mob/humans/onmob/items_lefthand_64.dmi b/icons/mob/humans/onmob/items_lefthand_64.dmi index d005d8c5f049..e086e4a7ffe0 100644 Binary files a/icons/mob/humans/onmob/items_lefthand_64.dmi and b/icons/mob/humans/onmob/items_lefthand_64.dmi differ diff --git a/icons/mob/humans/onmob/items_righthand_64.dmi b/icons/mob/humans/onmob/items_righthand_64.dmi index 72335e39bfff..00d1fae7531d 100644 Binary files a/icons/mob/humans/onmob/items_righthand_64.dmi and b/icons/mob/humans/onmob/items_righthand_64.dmi differ diff --git a/icons/mob/humans/onmob/uniform_0.dmi b/icons/mob/humans/onmob/uniform_0.dmi index 2dd645697684..c957814e9f3b 100644 Binary files a/icons/mob/humans/onmob/uniform_0.dmi and b/icons/mob/humans/onmob/uniform_0.dmi differ diff --git a/icons/obj/items/clothing/cm_hats.dmi b/icons/obj/items/clothing/cm_hats.dmi index 923a26b55c20..626de8fa5dd5 100644 Binary files a/icons/obj/items/clothing/cm_hats.dmi and b/icons/obj/items/clothing/cm_hats.dmi differ diff --git a/icons/obj/items/crayons.dmi b/icons/obj/items/crayons.dmi index 7ebabd5a81ef..1c7053a8a958 100644 Binary files a/icons/obj/items/crayons.dmi and b/icons/obj/items/crayons.dmi differ diff --git a/icons/obj/structures/barricades.dmi b/icons/obj/structures/barricades.dmi index f3c5a5c809e1..0e3cb6889d10 100644 Binary files a/icons/obj/structures/barricades.dmi and b/icons/obj/structures/barricades.dmi differ diff --git a/icons/obj/structures/barricades_christmas.dmi b/icons/obj/structures/barricades_christmas.dmi index 215bf9710a80..64b2383a4a9e 100644 Binary files a/icons/obj/structures/barricades_christmas.dmi and b/icons/obj/structures/barricades_christmas.dmi differ diff --git a/icons/obj/structures/machinery/vending.dmi b/icons/obj/structures/machinery/vending.dmi index 3098aadca8be..ba45e612ca22 100644 Binary files a/icons/obj/structures/machinery/vending.dmi and b/icons/obj/structures/machinery/vending.dmi differ diff --git a/icons/obj/structures/plantable_flag.dmi b/icons/obj/structures/plantable_flag.dmi index c92311529be3..2485f29c3b1f 100644 Binary files a/icons/obj/structures/plantable_flag.dmi and b/icons/obj/structures/plantable_flag.dmi differ diff --git a/maps/map_files/USS_Almayer/USS_Almayer.dmm b/maps/map_files/USS_Almayer/USS_Almayer.dmm index 2764da8aaa78..079067d7938a 100644 --- a/maps/map_files/USS_Almayer/USS_Almayer.dmm +++ b/maps/map_files/USS_Almayer/USS_Almayer.dmm @@ -2461,10 +2461,10 @@ icon_state = "SE-out" }, /obj/structure/machinery/door_control{ + access_modified = 1; id = "OTStore"; name = "Shutters"; pixel_y = -24; - access_modified = 1; req_one_access_txt = "35" }, /obj/structure/surface/rack, @@ -3293,12 +3293,12 @@ /obj/structure/machinery/faxmachine/uscm/command, /obj/item/device/megaphone, /obj/structure/machinery/computer/cameras/almayer_brig{ - dir = 8; desc = "Used to access the various cameras in the security brig."; + dir = 8; + layer = 2.99; name = "brig cameras console"; - pixel_y = 12; pixel_x = 17; - layer = 2.99 + pixel_y = 12 }, /turf/open/floor/almayer/plate, /area/almayer/command/cic) @@ -12176,8 +12176,8 @@ /area/almayer/hallways/lower/starboard_midship_hallway) "bMg" = ( /obj/structure/pipes/vents/pump/no_boom/gas{ - vent_tag = "Synth Bay"; - dir = 8 + dir = 8; + vent_tag = "Synth Bay" }, /turf/open/floor/almayer/aicore/no_build, /area/almayer/command/airoom) @@ -16114,8 +16114,8 @@ desc = "A pneumatic delivery unit."; icon_state = "delivery_engi"; name = "Returns"; - pixel_y = 28; - pixel_x = 25 + pixel_x = 25; + pixel_y = 28 }, /obj/structure/surface/rack, /turf/open/floor/almayer/aicore/no_build, @@ -16407,54 +16407,10 @@ /turf/open/floor/almayer/aicore/no_build, /area/almayer/command/airoom) "cOY" = ( -/obj/item/clothing/under/blackskirt{ - desc = "A stylish skirt, in a business-black and red colour scheme."; - name = "liaison's skirt" - }, -/obj/item/clothing/under/suit_jacket/charcoal{ - desc = "A professional black suit and blue tie. A combination popular among government agents and corporate Yes-Men alike."; - name = "liaison's black suit" - }, -/obj/item/clothing/under/suit_jacket/navy{ - desc = "A navy suit and red tie, intended for the Almayer's finest. And accountants."; - name = "liaison's navy suit" - }, -/obj/item/clothing/under/suit_jacket/trainee, -/obj/item/clothing/under/liaison_suit/charcoal, -/obj/item/clothing/under/liaison_suit/blazer, -/obj/item/clothing/suit/storage/snow_suit/liaison, -/obj/item/clothing/gloves/black, -/obj/item/clothing/gloves/marine/dress, -/obj/item/clothing/glasses/sunglasses/big, -/obj/item/clothing/accessory/blue, -/obj/item/clothing/accessory/red, /obj/structure/machinery/status_display{ pixel_x = -32 }, -/obj/item/clothing/accessory/black, -/obj/item/clothing/accessory/green, -/obj/item/clothing/accessory/gold, -/obj/item/clothing/accessory/purple, -/obj/item/clothing/under/liaison_suit/corporate_formal, -/obj/item/clothing/under/liaison_suit/field, -/obj/item/clothing/under/liaison_suit/ivy, -/obj/item/clothing/under/liaison_suit/blue, -/obj/item/clothing/under/liaison_suit/brown, -/obj/item/clothing/under/liaison_suit/black, -/obj/item/clothing/suit/storage/jacket/marine/vest, -/obj/item/clothing/suit/storage/jacket/marine/vest/grey, -/obj/item/clothing/suit/storage/jacket/marine/vest/tan, -/obj/item/clothing/suit/storage/jacket/marine/bomber, -/obj/item/clothing/suit/storage/jacket/marine/bomber/red, -/obj/item/clothing/suit/storage/jacket/marine/bomber/grey, -/obj/item/clothing/suit/storage/jacket/marine/corporate, -/obj/item/clothing/suit/storage/jacket/marine/corporate/black, -/obj/item/clothing/suit/storage/jacket/marine/corporate/blue, -/obj/item/clothing/suit/storage/jacket/marine/corporate/brown, -/obj/item/clothing/suit/storage/jacket/marine/corporate/formal, -/obj/structure/closet/cabinet{ - storage_capacity = 35 - }, +/obj/structure/machinery/cm_vending/clothing/dress/corporate_liaison, /turf/open/floor/wood/ship, /area/almayer/command/corporateliaison) "cPg" = ( @@ -17730,8 +17686,8 @@ /obj/structure/machinery/door_control{ id = "ARES JoeCryo"; name = "ARES WorkingJoe Bay Shutters"; - req_one_access_txt = "91;92"; - pixel_x = 24 + pixel_x = 24; + req_one_access_txt = "91;92" }, /obj/structure/machinery/camera/autoname/almayer/containment/ares{ autoname = 0; @@ -18019,9 +17975,9 @@ layer = 3.3 }, /obj/structure/machinery/camera/autoname/almayer/containment/ares{ - dir = 8; autoname = 0; - c_tag = "AI - Secondary Processors" + c_tag = "AI - Secondary Processors"; + dir = 8 }, /turf/open/floor/almayer/aicore/no_build/ai_floor2, /area/almayer/command/airoom) @@ -19567,10 +19523,10 @@ req_one_access_txt = "90;91;92" }, /obj/structure/machinery/camera/autoname/almayer/containment/ares{ - dir = 4; - pixel_y = -8; autoname = 0; - c_tag = "AI - Main Staircase" + c_tag = "AI - Main Staircase"; + dir = 4; + pixel_y = -8 }, /obj/effect/step_trigger/clone_cleaner, /turf/open/floor/almayer/aicore/no_build/ai_silver/west, @@ -19832,8 +19788,8 @@ pixel_y = 10 }, /obj/structure/machinery/computer/cameras/almayer_brig{ - dir = 4; desc = "Used to access the various cameras in the security brig."; + dir = 4; name = "brig cameras console"; pixel_y = -11 }, @@ -20216,13 +20172,13 @@ desc = "A large handheld tool used to override various machine functions. Primarily used to pulse Airlock and APC wires on a shortwave frequency. It contains a small data buffer as well. This one is comically oversized. Made in Texas."; icon_state = "multitool_big"; name = "\improper Oversized Security Access Tuner"; - pixel_y = 11; - pixel_x = 4 + pixel_x = 4; + pixel_y = 11 }, /obj/item/stack/sheet/cardboard/medium_stack{ - pixel_y = -6; + layer = 3.01; pixel_x = -7; - layer = 3.01 + pixel_y = -6 }, /turf/open/floor/almayer, /area/almayer/squads/alpha_bravo_shared) @@ -20903,9 +20859,9 @@ "eGr" = ( /obj/structure/pipes/standard/simple/hidden/supply/no_boom, /obj/structure/machinery/camera/autoname/almayer/containment/ares{ - dir = 8; autoname = 0; - c_tag = "AI - Records" + c_tag = "AI - Records"; + dir = 8 }, /turf/open/floor/almayer/aicore/no_build, /area/almayer/command/airoom) @@ -21261,9 +21217,9 @@ /obj/structure/machinery/door_control{ id = "ARES StairsLock"; name = "ARES Exterior Lockdown"; + pixel_x = 6; pixel_y = -24; - req_one_access_txt = "91;92"; - pixel_x = 6 + req_one_access_txt = "91;92" }, /obj/structure/surface/table/reinforced/almayer_B{ indestructible = 1; @@ -21342,10 +21298,10 @@ pixel_x = 1 }, /obj/structure/machinery/camera/autoname/almayer/containment/ares{ - dir = 8; - pixel_y = 2; autoname = 0; - c_tag = "AI - Reception Exterior" + c_tag = "AI - Reception Exterior"; + dir = 8; + pixel_y = 2 }, /turf/open/floor/almayer/silver/east, /area/almayer/hallways/upper/midship_hallway) @@ -22220,8 +22176,8 @@ /area/almayer/medical/containment/cell/cl) "flf" = ( /obj/structure/pipes/vents/pump/no_boom/gas{ - vent_tag = "Records"; - dir = 1 + dir = 1; + vent_tag = "Records" }, /turf/open/floor/almayer/aicore/no_build, /area/almayer/command/airoom) @@ -22237,9 +22193,9 @@ /area/almayer/maint/upper/u_a_p) "flL" = ( /obj/structure/machinery/camera/autoname/almayer/containment/ares{ - dir = 8; autoname = 0; - c_tag = "AI - SynthBay" + c_tag = "AI - SynthBay"; + dir = 8 }, /turf/open/floor/almayer/aicore/no_build, /area/almayer/command/airoom) @@ -22950,10 +22906,10 @@ /area/almayer/hallways/lower/repair_bay) "fCI" = ( /obj/structure/machinery/door/poddoor/shutters/almayer{ + dir = 4; id = "ARES JoeCryo"; name = "\improper ARES Synth Bay Shutters"; - plane = -7; - dir = 4 + plane = -7 }, /obj/structure/pipes/standard/simple/hidden/supply/no_boom{ dir = 4 @@ -23587,9 +23543,9 @@ /area/almayer/maint/hull/lower/l_f_s) "fQD" = ( /obj/structure/machinery/camera/autoname/almayer/containment/ares{ - dir = 8; autoname = 0; - c_tag = "AI - Core Chamber" + c_tag = "AI - Core Chamber"; + dir = 8 }, /turf/open/floor/almayer/aicore/glowing/no_build/ai_floor3, /area/almayer/command/airoom) @@ -25222,10 +25178,10 @@ "gDh" = ( /obj/structure/machinery/door/airlock/almayer/secure/reinforced{ access_modified = 1; + dir = 1; name = "\improper Security Vault"; req_access = null; - req_one_access_txt = "91;92"; - dir = 1 + req_one_access_txt = "91;92" }, /obj/structure/machinery/door/poddoor/almayer/blended/ai_lockdown/aicore{ plane = -6 @@ -29230,9 +29186,9 @@ plane = -7 }, /obj/structure/disposalpipe/up/almayer{ + dir = 2; id = "ares_vault_in"; - name = "aicore"; - dir = 2 + name = "aicore" }, /obj/structure/machinery/door/poddoor/almayer/blended/ai_lockdown, /turf/open/floor/almayer/no_build/test_floor4, @@ -30441,8 +30397,8 @@ }, /obj/structure/machinery/computer/secure_data{ dir = 4; - pixel_y = 23; - layer = 2.99 + layer = 2.99; + pixel_y = 23 }, /turf/open/floor/almayer/red/west, /area/almayer/shipboard/brig/processing) @@ -31476,15 +31432,15 @@ /obj/structure/surface/table/almayer, /obj/structure/machinery/computer/secure_data{ dir = 4; - pixel_y = 19; - layer = 2.99 + layer = 2.99; + pixel_y = 19 }, /obj/structure/machinery/computer/cameras/almayer_brig{ - dir = 4; desc = "Used to access the various cameras in the security brig."; + dir = 4; + layer = 2.99; name = "brig cameras console"; - pixel_y = 5; - layer = 2.99 + pixel_y = 5 }, /turf/open/floor/almayer, /area/almayer/shipboard/brig/chief_mp_office) @@ -31928,9 +31884,9 @@ /obj/structure/machinery/door/firedoor/border_only/almayer, /obj/structure/surface/table/reinforced/almayer_blend, /obj/item/desk_bell{ + anchored = 1; pixel_x = -6; - pixel_y = 10; - anchored = 1 + pixel_y = 10 }, /turf/open/floor/almayer/test_floor4, /area/almayer/squads/req) @@ -37050,13 +37006,13 @@ pixel_y = 10 }, /obj/item/stack/cable_coil{ - pixel_y = 1; - pixel_x = 8 + pixel_x = 8; + pixel_y = 1 }, /obj/item/stack/sheet/cardboard/small_stack{ - pixel_y = 2; + layer = 3.01; pixel_x = -3; - layer = 3.01 + pixel_y = 2 }, /turf/open/floor/almayer, /area/almayer/squads/alpha_bravo_shared) @@ -38735,9 +38691,9 @@ pixel_x = -32 }, /obj/structure/machinery/light{ + alpha = 0; dir = 8; - pixel_x = -32; - alpha = 0 + pixel_x = -32 }, /turf/open/floor/almayer/silver/west, /area/almayer/command/computerlab) @@ -39336,8 +39292,8 @@ "mAe" = ( /obj/structure/window/framed/almayer/aicore/hull/black/hijack_bustable, /obj/structure/machinery/door/poddoor/almayer/blended/ai_lockdown{ - plane = -6; - dir = 4 + dir = 4; + plane = -6 }, /turf/open/floor/almayer/aicore/no_build, /area/almayer/command/airoom) @@ -39466,10 +39422,10 @@ "mCx" = ( /obj/structure/machinery/door/airlock/almayer/secure/reinforced{ access_modified = 1; + dir = 1; name = "\improper AI Reception"; req_access = null; - req_one_access_txt = "91;92"; - dir = 1 + req_one_access_txt = "91;92" }, /obj/effect/step_trigger/clone_cleaner, /obj/structure/machinery/door/poddoor/shutters/almayer{ @@ -40363,10 +40319,10 @@ req_one_access_txt = "90;91;92" }, /obj/structure/machinery/camera/autoname/almayer/containment/ares{ - dir = 8; - pixel_y = 2; + autoname = 0; c_tag = "AI - Main Corridor"; - autoname = 0 + dir = 8; + pixel_y = 2 }, /turf/open/floor/almayer/aicore/no_build/ai_silver/east, /area/almayer/command/airoom) @@ -40668,8 +40624,8 @@ /obj/structure/machinery/door_control{ id = "ARES JoeCryo"; name = "ARES WorkingJoe Bay Shutters"; - req_one_access_txt = "91;92"; - pixel_x = -24 + pixel_x = -24; + req_one_access_txt = "91;92" }, /turf/open/floor/almayer/aicore/no_build, /area/almayer/command/airoom) @@ -42029,8 +41985,8 @@ }, /obj/structure/machinery/computer/shuttle/dropship/flight/remote_control{ dir = 4; - pixel_y = -12; - name = "Remote dropship navigation computer" + name = "Remote dropship navigation computer"; + pixel_y = -12 }, /turf/open/floor/almayer/redfull, /area/almayer/living/offices/flight) @@ -43098,10 +43054,10 @@ /area/almayer/hallways/upper/midship_hallway) "nZm" = ( /obj/structure/machinery/door_control{ + access_modified = 1; id = "OTStore"; name = "Shutters"; pixel_y = 24; - access_modified = 1; req_one_access_txt = "35" }, /obj/effect/decal/warning_stripes{ @@ -43409,8 +43365,8 @@ unslashable = 1 }, /obj/structure/machinery/computer/working_joe{ - layer = 3.3; dir = 4; + layer = 3.3; pixel_y = 6 }, /turf/open/floor/almayer/aicore/no_build, @@ -44489,8 +44445,8 @@ /area/almayer/command/cichallway) "oBD" = ( /obj/structure/pipes/vents/pump/no_boom/gas{ - vent_tag = "Access Hall"; - dir = 8 + dir = 8; + vent_tag = "Access Hall" }, /turf/open/floor/almayer/aicore/no_build/ai_silver/east, /area/almayer/command/airoom) @@ -44689,8 +44645,8 @@ "oEA" = ( /obj/structure/surface/table/reinforced/prison, /obj/item/weapon/gun/shotgun/pump{ - starting_attachment_types = list(/obj/item/attachable/stock/shotgun); - pixel_y = 9 + pixel_y = 9; + starting_attachment_types = list(/obj/item/attachable/stock/shotgun) }, /obj/item/stack/sheet/cardboard/small_stack{ layer = 3.01 @@ -45799,8 +45755,8 @@ "pax" = ( /obj/effect/step_trigger/clone_cleaner, /obj/structure/pipes/vents/pump/no_boom/gas{ - vent_tag = "Reception"; - dir = 8 + dir = 8; + vent_tag = "Reception" }, /turf/open/floor/almayer/aicore/glowing/no_build/ai_floor3, /area/almayer/command/airoom) @@ -46284,8 +46240,8 @@ "pmV" = ( /obj/structure/pipes/standard/simple/hidden/supply/no_boom, /obj/structure/machinery/computer/tech_control{ - pixel_y = 16; - density = 0 + density = 0; + pixel_y = 16 }, /turf/open/floor/almayer/no_build/ai_floors, /area/almayer/command/airoom) @@ -48477,9 +48433,9 @@ /obj/structure/machinery/door/firedoor/border_only/almayer, /obj/structure/surface/table/reinforced/almayer_blend/north, /obj/item/desk_bell{ + anchored = 1; pixel_x = -6; - pixel_y = -8; - anchored = 1 + pixel_y = -8 }, /turf/open/floor/almayer/test_floor4, /area/almayer/squads/req) @@ -48824,9 +48780,9 @@ /area/almayer/maint/hull/lower/l_f_p) "qpY" = ( /obj/structure/machinery/cryopod/right{ + dir = 4; layer = 3.1; - pixel_y = 13; - dir = 4 + pixel_y = 13 }, /turf/open/floor/almayer/aicore/no_build/ai_cargo, /area/almayer/command/airoom) @@ -51696,8 +51652,8 @@ desc = "A pneumatic delivery unit."; icon_state = "delivery_engi"; name = "Security Vault"; - pixel_y = 28; - pixel_x = -24 + pixel_x = -24; + pixel_y = 28 }, /obj/structure/disposalpipe/trunk{ dir = 1 @@ -56014,9 +55970,9 @@ /area/almayer/maint/hull/lower/stern) "tmV" = ( /obj/structure/machinery/camera/autoname/almayer/containment/ares{ - dir = 8; autoname = 0; - c_tag = "AI - SecVault" + c_tag = "AI - SecVault"; + dir = 8 }, /turf/open/floor/almayer/aicore/no_build, /area/almayer/command/airoom) @@ -56131,9 +56087,9 @@ req_access_txt = "8" }, /obj/item/desk_bell{ + anchored = 1; pixel_x = -6; - pixel_y = 10; - anchored = 1 + pixel_y = 10 }, /obj/structure/machinery/door/firedoor/border_only/almayer, /turf/open/floor/almayer/sterile_green, @@ -56771,9 +56727,9 @@ desc = "An outlet for the pneumatic delivery system."; icon_state = "delivery_outlet"; name = "returns outlet"; + pixel_x = -7; pixel_y = 28; - range = 0; - pixel_x = -7 + range = 0 }, /turf/open/floor/almayer/no_build/test_floor4, /area/almayer/command/airoom) @@ -56871,9 +56827,9 @@ /area/almayer/hallways/upper/port) "tCC" = ( /obj/structure/machinery/camera/autoname/almayer/containment/ares{ - dir = 1; + autoname = 0; c_tag = "AI - Reception Interior"; - autoname = 0 + dir = 1 }, /turf/open/floor/almayer/aicore/no_build, /area/almayer/command/airoom) @@ -59887,15 +59843,15 @@ unslashable = 1 }, /obj/item/paper_bin/uscm{ - pixel_y = 6; - pixel_x = -12 + pixel_x = -12; + pixel_y = 6 }, /obj/item/tool/pen{ pixel_x = -14 }, /obj/structure/machinery/aicore_lockdown{ - pixel_y = 4; - pixel_x = 3 + pixel_x = 3; + pixel_y = 4 }, /turf/open/floor/almayer/aicore/no_build, /area/almayer/command/airoom) @@ -60988,13 +60944,13 @@ unslashable = 1 }, /obj/structure/machinery/computer/working_joe{ - layer = 3.3; - dir = 8 + dir = 8; + layer = 3.3 }, /obj/item/desk_bell/ares{ - pixel_y = 14; + anchored = 1; pixel_x = -5; - anchored = 1 + pixel_y = 14 }, /turf/open/floor/almayer/aicore/no_build, /area/almayer/command/airoom) @@ -61054,14 +61010,14 @@ "vqI" = ( /obj/structure/surface/table/reinforced/prison, /obj/item/device/camera_film{ + layer = 3.03; pixel_x = 4; - pixel_y = 1; - layer = 3.03 + pixel_y = 1 }, /obj/item/stack/sheet/cardboard/small_stack{ + layer = 3.02; pixel_x = -5; - pixel_y = 3; - layer = 3.02 + pixel_y = 3 }, /turf/open/floor/almayer, /area/almayer/squads/charlie_delta_shared) @@ -61743,9 +61699,9 @@ layer = 3.3 }, /obj/structure/machinery/camera/autoname/almayer/containment/ares{ - dir = 4; + autoname = 0; c_tag = "AI - Primary Processors"; - autoname = 0 + dir = 4 }, /turf/open/floor/almayer/aicore/no_build/ai_floor2, /area/almayer/command/airoom) @@ -65788,8 +65744,8 @@ "xeU" = ( /obj/structure/machinery/door/airlock/almayer/generic{ name = "\improper Laundry Room"; - req_one_access = list(19,7); - req_access = list() + req_access = list(); + req_one_access = list(19,7) }, /turf/open/floor/almayer/test_floor4, /area/almayer/engineering/laundry) @@ -66027,8 +65983,8 @@ pixel_y = 27 }, /obj/structure/machinery/computer/cameras/almayer_brig{ - dir = 4; desc = "Used to access the various cameras in the security brig."; + dir = 4; name = "brig cameras console" }, /turf/open/floor/almayer/red/west, @@ -66178,9 +66134,9 @@ }, /obj/structure/machinery/computer/shuttle/dropship/flight/remote_control{ dir = 8; + name = "Remote dropship navigation computer"; pixel_y = 12; - shuttleId = "dropship_alamo"; - name = "Remote dropship navigation computer" + shuttleId = "dropship_alamo" }, /turf/open/floor/almayer/redfull, /area/almayer/living/offices/flight) @@ -66597,8 +66553,8 @@ /area/almayer/living/briefing) "xwU" = ( /obj/structure/pipes/vents/pump/no_boom/gas{ - vent_tag = "Comms"; - dir = 1 + dir = 1; + vent_tag = "Comms" }, /turf/open/floor/almayer/aicore/no_build/ai_plates, /area/almayer/command/airoom) diff --git a/sound/effects/flag_upp_warcry.ogg b/sound/effects/flag_upp_warcry.ogg new file mode 100644 index 000000000000..589274ffb8e8 Binary files /dev/null and b/sound/effects/flag_upp_warcry.ogg differ diff --git a/sound/effects/flag_upp_warcry_extra.ogg b/sound/effects/flag_upp_warcry_extra.ogg new file mode 100644 index 000000000000..5ac6ff51e039 Binary files /dev/null and b/sound/effects/flag_upp_warcry_extra.ogg differ