diff --git a/code/__DEFINES/speech_channels.dm b/code/__DEFINES/speech_channels.dm index 405506678407..3f6e4720bde9 100644 --- a/code/__DEFINES/speech_channels.dm +++ b/code/__DEFINES/speech_channels.dm @@ -4,6 +4,5 @@ #define ME_CHANNEL "Me" #define OOC_CHANNEL "OOC" #define LOOC_CHANNEL "LOOC" -#define MOD_CHANNEL "MSAY" #define ADMIN_CHANNEL "ASAY" #define MENTOR_CHANNEL "Mentor" diff --git a/code/__DEFINES/tgui.dm b/code/__DEFINES/tgui.dm index 865088ee72fc..ca6408961eab 100644 --- a/code/__DEFINES/tgui.dm +++ b/code/__DEFINES/tgui.dm @@ -32,7 +32,7 @@ /// Creates a message packet for sending via output() // This is {"type":type,"payload":payload}, but pre-encoded. This is much faster // than doing it the normal way. -// To ensure this is correct, this is unit tested in tgui_create_message. However, CM does not have unit tests available. +// To ensure this is correct, this is unit tested in tgui_create_message. #define TGUI_CREATE_MESSAGE(type, payload) ( \ "%7b%22type%22%3a%22[type]%22%2c%22payload%22%3a[url_encode(json_encode(payload))]%7d" \ ) diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm index df98b2b247ba..0ac9cef3017a 100644 --- a/code/__DEFINES/traits.dm +++ b/code/__DEFINES/traits.dm @@ -185,6 +185,8 @@ #define TRAIT_ABILITY_NO_PLASMA_TRANSFER "t_ability_no_plasma_transfer" /// Shows that the xeno queen is on ovi #define TRAIT_ABILITY_OVIPOSITOR "t_ability_ovipositor" +/// Used for burrowed mobs, prevent's SG/sentrys/claymores from autofiring +#define TRAIT_ABILITY_BURROWED "t_ability_burrowed" //-- item traits -- // TOOL TRAITS @@ -240,6 +242,7 @@ GLOBAL_LIST_INIT(mob_traits, list( TRAIT_REAGENT_SCANNER, TRAIT_IMPROVISER, TRAIT_FASTLEARNER, + TRAIT_ABILITY_BURROWED, )) /* diff --git a/code/__DEFINES/wj_emotes.dm b/code/__DEFINES/wj_emotes.dm new file mode 100644 index 000000000000..f315c6eb2ba5 --- /dev/null +++ b/code/__DEFINES/wj_emotes.dm @@ -0,0 +1,8 @@ +#define JOE_EMOTE_CATEGORY_GREETING "Greeting" +#define JOE_EMOTE_CATEGORY_TASK_UPDATE "Task Update" +#define JOE_EMOTE_CATEGORY_RESTRICTED_AREA "Restricted Area" +#define JOE_EMOTE_CATEGORY_FAREWELL "Farewell" +#define JOE_EMOTE_CATEGORY_QUIP "Quip" +#define JOE_EMOTE_CATEGORY_WARNING "Warning" +#define JOE_EMOTE_CATEGORY_QUESTION "Question" +#define JOE_EMOTE_CATEGORY_NOTICE "Notice" diff --git a/code/__DEFINES/xeno.dm b/code/__DEFINES/xeno.dm index 4b45c660feab..ac783b6f426e 100644 --- a/code/__DEFINES/xeno.dm +++ b/code/__DEFINES/xeno.dm @@ -168,6 +168,8 @@ #define XENO_LEAVE_TIMER_LARVA 80 //80 seconds /// The time against away_timer when an AFK xeno (not larva) can be replaced #define XENO_LEAVE_TIMER 300 //300 seconds +/// The time against away_timer when an AFK facehugger converts to a npc +#define XENO_FACEHUGGER_LEAVE_TIMER 420 //420 seconds /// The time against away_timer when an AFK xeno gets listed in the available list so ghosts can get ready #define XENO_AVAILABLE_TIMER 60 //60 seconds diff --git a/code/__HELPERS/game.dm b/code/__HELPERS/game.dm index c447bfcecb15..0132a31d0b50 100644 --- a/code/__HELPERS/game.dm +++ b/code/__HELPERS/game.dm @@ -290,21 +290,16 @@ * * cache_only - Whether to not actually send a to_chat message and instead only update larva_queue_cached_message */ /proc/message_alien_candidates(list/candidates, dequeued, cache_only = FALSE) - var/new_players = 0 for(var/i in (1 + dequeued) to candidates.len) var/mob/dead/observer/cur_obs = candidates[i] // Generate the messages - var/cached_message = SPAN_XENONOTICE("You are currently [i-dequeued]\th in the larva queue. There are [new_players] ahead of you that have yet to play this round.") + var/cached_message = SPAN_XENONOTICE("You are currently [i-dequeued]\th in the larva queue.") cur_obs.larva_queue_cached_message = cached_message if(!cache_only) var/chat_message = dequeued ? replacetext(cached_message, "currently", "now") : cached_message to_chat(candidates[i], chat_message) - // Count how many are prioritized - if(cur_obs.client.player_details.larva_queue_time < 2) // 0 and 1 because facehuggers/t-domers are slightly deprioritized - new_players++ - /proc/convert_k2c(temp) return ((temp - T0C)) diff --git a/code/controllers/subsystem/x_evolution.dm b/code/controllers/subsystem/x_evolution.dm index 9f84513e9e2d..be787b37de80 100644 --- a/code/controllers/subsystem/x_evolution.dm +++ b/code/controllers/subsystem/x_evolution.dm @@ -3,7 +3,7 @@ #define EVOLUTION_INCREMENT_TIME (30 MINUTES) // Evolution increases by 1 every 25 minutes. SUBSYSTEM_DEF(xevolution) - name = "Evilution" + name = "Evilution" //This is not a typo, do not change it. wait = 1 MINUTES priority = SS_PRIORITY_INACTIVITY diff --git a/code/datums/components/footstep.dm b/code/datums/components/footstep.dm index 0d218ba94da4..ef77aaf471dc 100644 --- a/code/datums/components/footstep.dm +++ b/code/datums/components/footstep.dm @@ -13,8 +13,9 @@ var/falloff ///This can be a list OR a soundfile OR null. Determines whatever sound gets played. var/footstep_sounds + var/drag_sounds -/datum/component/footstep/Initialize(steps_ = 2, volume_ = 50, range_ = null, falloff_ = 1, footstep_sounds_ = "alien_footstep_large") +/datum/component/footstep/Initialize(steps_ = 2, volume_ = 50, range_ = null, falloff_ = 1, footstep_sounds_ = "alien_footstep_large", drag_sounds_ = 'sound/effects/alien_dragsound_large.ogg') if(!isliving(parent)) return COMPONENT_INCOMPATIBLE steps = steps_ @@ -22,6 +23,7 @@ range = range_ falloff = falloff_ footstep_sounds = footstep_sounds_ + drag_sounds = drag_sounds_ RegisterSignal(parent, list(COMSIG_MOVABLE_MOVED), PROC_REF(play_simplestep)) @@ -44,5 +46,8 @@ var/turf/open/T = prepare_step() if(!T) return - if(isfile(footstep_sounds) || istext(footstep_sounds)) + var/mob/living/parent_mob = parent + if(parent_mob.lying && (isfile(drag_sounds) || istext(drag_sounds))) + playsound(T, drag_sounds, volume, rand(20000, 25000), range, falloff = falloff) + else if(isfile(footstep_sounds) || istext(footstep_sounds)) playsound(T, footstep_sounds, volume, rand(20000, 25000), range, falloff = falloff) diff --git a/code/datums/emergency_calls/cryo_marines.dm b/code/datums/emergency_calls/cryo_marines.dm index 9bec8b3593dd..eb914e198b37 100644 --- a/code/datums/emergency_calls/cryo_marines.dm +++ b/code/datums/emergency_calls/cryo_marines.dm @@ -3,7 +3,7 @@ //whiskey outpost extra marines /datum/emergency_call/cryo_squad name = "Marine Cryo Reinforcements (Squad)" - mob_max = 15 + mob_max = 10 mob_min = 1 probability = 0 objectives = "Assist the USCM forces" diff --git a/code/datums/keybinding/communication.dm b/code/datums/keybinding/communication.dm index 9a438fc6dabd..4164198d4818 100644 --- a/code/datums/keybinding/communication.dm +++ b/code/datums/keybinding/communication.dm @@ -42,13 +42,6 @@ full_name = "IC Comms (;)" keybind_signal = COMSIG_KG_CLIENT_RADIO_DOWN -/datum/keybinding/client/communication/mod_say - hotkey_keys = list("Unbound") - classic_keys = list("Unbound") - name = MOD_CHANNEL - full_name = "Mod Say" - keybind_signal = COMSIG_KB_ADMIN_ASAY_DOWN - /datum/keybinding/client/communication/asay hotkey_keys = list("F3") classic_keys = list("F5") diff --git a/code/datums/redis/callbacks/msay.dm b/code/datums/redis/callbacks/msay.dm deleted file mode 100644 index 3c0db7638a3a..000000000000 --- a/code/datums/redis/callbacks/msay.dm +++ /dev/null @@ -1,16 +0,0 @@ -/datum/redis_callback/msay - channel = "byond.msay" - -/datum/redis_callback/msay/on_message(message) - var/list/data = json_decode(message) - - if(data["source"] == SSredis.instance_name) - return - - var/msg = "[data["rank"]]: [data["author"]]@[data["source"]]: [strip_html(data["message"])]" - - for(var/client/client in GLOB.admins) - if(!(R_MOD & client.admin_holder.rights)) - continue - - to_chat(client, msg) diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 937c19b4512b..dc4cca423c64 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -580,7 +580,7 @@ Parameters are passed from New. if(!ismovable(src)) var/turf/curturf = get_turf(src) if(curturf) - . += "" + . += "" VV_DROPDOWN_OPTION(VV_HK_MODIFY_TRANSFORM, "Modify Transform") VV_DROPDOWN_OPTION(VV_HK_ADD_REAGENT, "Add Reagent") VV_DROPDOWN_OPTION(VV_HK_TRIGGER_EMP, "EMP Pulse") diff --git a/code/game/gamemodes/cm_initialize.dm b/code/game/gamemodes/cm_initialize.dm index 2f6dc6e38118..b95052de8824 100644 --- a/code/game/gamemodes/cm_initialize.dm +++ b/code/game/gamemodes/cm_initialize.dm @@ -333,23 +333,28 @@ Additional game mode variables. /datum/game_mode/proc/check_xeno_late_join(mob/xeno_candidate) if(jobban_isbanned(xeno_candidate, JOB_XENOMORPH)) // User is jobbanned to_chat(xeno_candidate, SPAN_WARNING("You are banned from playing aliens and cannot spawn as a xenomorph.")) - return - return 1 + return FALSE + return TRUE -/datum/game_mode/proc/attempt_to_join_as_xeno(mob/xeno_candidate, instant_join = 0) +/datum/game_mode/proc/attempt_to_join_as_xeno(mob/xeno_candidate, instant_join = FALSE) var/list/available_xenos = list() var/list/available_xenos_non_ssd = list() - for(var/mob/living/carbon/xenomorph/X in GLOB.living_xeno_list) - var/area/A = get_area(X) - if(is_admin_level(X.z) && (!A || !(A.flags_area & AREA_ALLOW_XENO_JOIN)) || X.aghosted) - continue //xenos on admin z level and aghosted ones don't count - if(istype(X) && ((!islarva(X) && (XENO_LEAVE_TIMER - X.away_timer < XENO_AVAILABLE_TIMER)) || (islarva(X) && (XENO_LEAVE_TIMER_LARVA - X.away_timer < XENO_AVAILABLE_TIMER)))) - if(!X.client) - available_xenos += X - else - available_xenos_non_ssd += X - + for(var/mob/living/carbon/xenomorph/cur_xeno as anything in GLOB.living_xeno_list) + if(cur_xeno.aghosted) + continue //aghosted xenos don't count + var/area/area = get_area(cur_xeno) + if(is_admin_level(cur_xeno.z) && (!area || !(area.flags_area & AREA_ALLOW_XENO_JOIN))) + continue //xenos on admin z level don't count + if(!istype(cur_xeno)) + continue + var/required_time = islarva(cur_xeno) ? XENO_LEAVE_TIMER_LARVA - cur_xeno.away_timer : XENO_LEAVE_TIMER - cur_xeno.away_timer + if(required_time > XENO_AVAILABLE_TIMER) + continue + if(!cur_xeno.client) + available_xenos += cur_xeno + else + available_xenos_non_ssd += cur_xeno var/datum/hive_status/hive for(var/hivenumber in GLOB.hive_datum) @@ -383,7 +388,7 @@ Additional game mode variables. return FALSE // We aren't in queue yet, lets teach them about the queue then - candidate_observer.larva_queue_cached_message = SPAN_XENONOTICE("You are currently still awaiting assignment in the larva queue. Priority is given to players who have yet to play in the round, but otherwise the ordering is based on your time of death. When you have been dead long enough and are not inactive, you will periodically receive messages where you are in the queue relative to other currently valid xeno candidates. Note: Playing as a facehugger or in the thunderdome will not alter your time of death. This means you won't lose your relative place in queue if you step away, disconnect, play as a facehugger, or play in the thunderdome.") + candidate_observer.larva_queue_cached_message = SPAN_XENONOTICE("You are currently awaiting assignment in the larva queue. The ordering is based on your time of death or the time you joined. When you have been dead long enough and are not inactive, you will periodically receive messages where you are in the queue relative to other currently valid xeno candidates. Your current position will shift as others change their preferences or go inactive, but your relative position compared to all observers is the same. Note: Playing as a facehugger or in the thunderdome will not alter your time of death. This means you won't lose your relative place in queue if you step away, disconnect, play as a facehugger, or play in the thunderdome.") to_chat(xeno_candidate, candidate_observer.larva_queue_cached_message) return FALSE diff --git a/code/game/machinery/cryo.dm b/code/game/machinery/cryo.dm index 435976668577..afcc9686cff5 100644 --- a/code/game/machinery/cryo.dm +++ b/code/game/machinery/cryo.dm @@ -2,6 +2,7 @@ /obj/structure/machinery/cryo_cell name = "cryo cell" + desc = "A donation from the old A.W. project, using cryogenic technology. It slowly heals whoever is inside the tube." icon = 'icons/obj/structures/machinery/cryogenics2.dmi' icon_state = "cell" density = FALSE diff --git a/code/game/machinery/iv_drip.dm b/code/game/machinery/iv_drip.dm index e1c9c9a4e279..b538f55292c1 100644 --- a/code/game/machinery/iv_drip.dm +++ b/code/game/machinery/iv_drip.dm @@ -4,13 +4,16 @@ anchored = FALSE density = FALSE drag_delay = 1 + base_pixel_x = 15 + base_pixel_y = -2 var/mob/living/carbon/attached = null var/mode = 1 // 1 is injecting, 0 is taking blood. var/obj/item/reagent_container/beaker = null + var/datum/beam/current_beam /obj/structure/machinery/iv_drip/update_icon() - if(src.attached) + if(attached) icon_state = "hooked" else icon_state = "" @@ -35,8 +38,31 @@ filling.color = mix_color_from_reagents(reagents.reagent_list) overlays += filling +/obj/structure/machinery/iv_drip/proc/update_beam() + if(current_beam) + QDEL_NULL(current_beam) + else if(!QDELETED(src) && attached) + current_beam = beam(attached, "iv_tube") + +/obj/structure/machinery/iv_drip/power_change() + . = ..() + if(stat & NOPOWER && attached) + visible_message("\The [src] retracts its IV tube and shuts down.") + attached.active_transfusions -= src + attached = null + update_beam() + update_icon() + +/obj/structure/machinery/iv_drip/Destroy() + attached?.active_transfusions -= src + update_beam() + . = ..() + /obj/structure/machinery/iv_drip/MouseDrop(over_object, src_location, over_location) ..() + if(inoperable()) + visible_message("\The [src] is not powered.") + return if(ishuman(usr)) var/mob/living/carbon/human/H = usr @@ -48,6 +74,7 @@ "You detach \the [src] from \the [attached].") attached.active_transfusions -= src attached = null + update_beam() update_icon() stop_processing() return @@ -57,6 +84,7 @@ "You attach \the [src] to \the [over_object].") attached = over_object attached.active_transfusions += src + update_beam() update_icon() start_processing() @@ -81,6 +109,7 @@ log_admin("[key_name(user)] put a [beaker] into [src], containing [reagentnames] at ([src.loc.x],[src.loc.y],[src.loc.z]).") to_chat(user, "You attach \the [W] to \the [src].") + update_beam() update_icon() return else @@ -97,6 +126,7 @@ attached.emote("scream") attached.active_transfusions -= src attached = null + update_beam() update_icon() stop_processing() return diff --git a/code/game/machinery/vending/vendor_types/crew/staff_officer.dm b/code/game/machinery/vending/vendor_types/crew/staff_officer.dm index 5b0324edc2a2..103efeedde61 100644 --- a/code/game/machinery/vending/vendor_types/crew/staff_officer.dm +++ b/code/game/machinery/vending/vendor_types/crew/staff_officer.dm @@ -11,11 +11,21 @@ GLOBAL_LIST_INIT(cm_vending_clothing_staff_officer, list( list("STANDARD EQUIPMENT (TAKE ALL)", 0, null, null, null), + list("Uniform", 0, /obj/item/clothing/under/marine/officer/bridge, MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_MANDATORY), list("Boots", 0, /obj/item/clothing/shoes/marine/knife, MARINE_CAN_BUY_SHOES, VENDOR_ITEM_MANDATORY), list("Headset", 0, /obj/item/device/radio/headset/almayer/mcom, MARINE_CAN_BUY_EAR, VENDOR_ITEM_MANDATORY), list("Helmet", 0, /obj/item/clothing/head/helmet/marine/MP/SO, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_MANDATORY), list("MRE", 0, /obj/item/storage/box/MRE, MARINE_CAN_BUY_MRE, VENDOR_ITEM_MANDATORY), + list("JACKET (CHOOSE 1)", 0, null, null, null), + list("Service Jacket", 0, /obj/item/clothing/suit/storage/jacket/marine/service, MARINE_CAN_BUY_ARMOR, VENDOR_ITEM_RECOMMENDED), + + list("HAT (CHOOSE 1)", 0, null, null, null), + list("Beret, Green", 0, /obj/item/clothing/head/beret/cm, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_RECOMMENDED), + list("Beret, Tan", 0, /obj/item/clothing/head/beret/cm/tan, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_RECOMMENDED), + list("Patrol Cap", 0, /obj/item/clothing/head/cmcap, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_RECOMMENDED), + + list("PERSONAL SIDEARM (CHOOSE 1)", 0, null, null, null), list("M44 Revolver", 0, /obj/item/storage/belt/gun/m44/mp, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED), list("M4A3 Pistol", 0, /obj/item/storage/belt/gun/m4a3/commander, MARINE_CAN_BUY_BELT, VENDOR_ITEM_RECOMMENDED), diff --git a/code/game/machinery/vending/vendor_types/crew/synthetic.dm b/code/game/machinery/vending/vendor_types/crew/synthetic.dm index 1d8e5e289066..be6939a6f9dd 100644 --- a/code/game/machinery/vending/vendor_types/crew/synthetic.dm +++ b/code/game/machinery/vending/vendor_types/crew/synthetic.dm @@ -110,7 +110,6 @@ GLOBAL_LIST_INIT(cm_vending_clothing_synth, list( list("HELMET (CHOOSE 1)", 0, null, null, null), list("Expedition Cap", 0, /obj/item/clothing/head/cmcap/flap, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_REGULAR), list("Hard Hat, Orange", 0, /obj/item/clothing/head/hardhat/orange, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_REGULAR), - list("Surgical Cap, Green", 0, /obj/item/clothing/head/surgery/green, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_REGULAR), list("Welding Helmet", 0, /obj/item/clothing/head/welding, MARINE_CAN_BUY_HELMET, VENDOR_ITEM_REGULAR), list("SUIT (CHOOSE 1)", 0, null, null, null), @@ -181,13 +180,19 @@ GLOBAL_LIST_INIT(cm_vending_clothing_synth_snowflake, list( list("Medical Scrubs, White", 12, /obj/item/clothing/under/rank/medical, null, VENDOR_ITEM_REGULAR), list("USCM Service Uniform", 12, /obj/item/clothing/under/marine/officer/bridge, null, VENDOR_ITEM_REGULAR), list("USCM Flightsuit", 12, /obj/item/clothing/under/rank/synthetic/flight, null, VENDOR_ITEM_REGULAR), - list("Engineer Uniform", 12, /obj/item/clothing/under/marine/officer/engi, null, VENDOR_ITEM_REGULAR), + list("USCM Engineer Uniform", 12, /obj/item/clothing/under/marine/officer/engi, null, VENDOR_ITEM_REGULAR), list("White T-Shirt and Brown Jeans", 12, /obj/item/clothing/under/tshirt/w_br, null, VENDOR_ITEM_REGULAR), list("Gray T-Shirt and Blue Jeans", 12, /obj/item/clothing/under/tshirt/gray_blu, null, VENDOR_ITEM_REGULAR), list("Red T-Shirt and Black Jeans", 12, /obj/item/clothing/under/tshirt/r_bla, null, VENDOR_ITEM_REGULAR), - list("Gray Utilities", 12, /obj/item/clothing/under/colonist/ua_civvies, null, VENDOR_ITEM_REGULAR), - list("Brown Utilities", 12, /obj/item/clothing/under/colonist/wy_davisone, null, VENDOR_ITEM_REGULAR), - list("Steward Utilities", 12, /obj/item/clothing/under/colonist/wy_joliet_shopsteward, null, VENDOR_ITEM_REGULAR), + list("Frontier Jumpsuit", 12, /obj/item/clothing/under/rank/synthetic/frontier, null, VENDOR_ITEM_REGULAR), + list("UA Grey Jumpsuit", 12, /obj/item/clothing/under/colonist/ua_civvies, null, VENDOR_ITEM_REGULAR), + list("UA Brown Jumpsuit", 12, /obj/item/clothing/under/colonist/wy_davisone, null, VENDOR_ITEM_REGULAR), + list("UA Green Utility Uniform", 12, /obj/item/clothing/under/rank/synthetic/utility, null, VENDOR_ITEM_REGULAR), + list("Grey Utilities", 12, /obj/item/clothing/under/rank/synthetic/utility/yellow, null, VENDOR_ITEM_REGULAR), + list("Grey Utilities and Blue Jeans", 12, /obj/item/clothing/under/rank/synthetic/utility/red, null, VENDOR_ITEM_REGULAR), + list("Blue Utilities and Brown Jeans", 12, /obj/item/clothing/under/rank/synthetic/utility/blue, null, VENDOR_ITEM_REGULAR), + list("Steward Clothes", 12, /obj/item/clothing/under/colonist/wy_joliet_shopsteward, null, VENDOR_ITEM_REGULAR), + list("Red Dress Skirt", 12, /obj/item/clothing/under/blackskirt, null, VENDOR_ITEM_REGULAR), list("Working Joe Uniform", 36, /obj/item/clothing/under/rank/synthetic/joe, null, VENDOR_ITEM_REGULAR), list("GLASSES", 0, null, null, null), @@ -208,6 +213,7 @@ GLOBAL_LIST_INIT(cm_vending_clothing_synth_snowflake, list( list("Shoes, Red", 12, /obj/item/clothing/shoes/red, null, VENDOR_ITEM_REGULAR), list("Shoes, White", 12, /obj/item/clothing/shoes/white, null, VENDOR_ITEM_REGULAR), list("Shoes, Yellow", 12, /obj/item/clothing/shoes/yellow, null, VENDOR_ITEM_REGULAR), + list("Shoes, Seegson", 24, /obj/item/clothing/shoes/dress, null, VENDOR_ITEM_REGULAR), list("HELMET", 0, null, null, null), list("Beanie", 12, /obj/item/clothing/head/beanie, null, VENDOR_ITEM_REGULAR), @@ -216,31 +222,32 @@ GLOBAL_LIST_INIT(cm_vending_clothing_synth_snowflake, list( list("Beret, Red", 12, /obj/item/clothing/head/beret/cm/red, null, VENDOR_ITEM_REGULAR), list("Beret, Standard", 12, /obj/item/clothing/head/beret/cm, null, VENDOR_ITEM_REGULAR), list("Beret, Tan", 12, /obj/item/clothing/head/beret/cm/tan, null, VENDOR_ITEM_REGULAR), - list("Cap", 12, /obj/item/clothing/head/cmcap, null, VENDOR_ITEM_REGULAR), list("Surgical Cap, Blue", 12, /obj/item/clothing/head/surgery/blue, null, VENDOR_ITEM_REGULAR), list("Surgical Cap, Blue", 12, /obj/item/clothing/head/surgery/purple, null, VENDOR_ITEM_REGULAR), list("Surgical Cap, Green", 12, /obj/item/clothing/head/surgery/green, null, VENDOR_ITEM_REGULAR), list("Ushanka", 12, /obj/item/clothing/head/ushanka, null, VENDOR_ITEM_REGULAR), + list("Cap", 12, /obj/item/clothing/head/cmcap, null, VENDOR_ITEM_REGULAR), list("MP Cap", 12, /obj/item/clothing/head/beret/marine/mp/mpcap, null, VENDOR_ITEM_REGULAR), list("RO Cap", 12, /obj/item/clothing/head/cmcap/req, null, VENDOR_ITEM_REGULAR), list("Officer Cap", 12, /obj/item/clothing/head/cmcap/ro, null, VENDOR_ITEM_REGULAR), list("SUIT", 0, null, null, null), - list("Brown Bomber Jacket", 12, /obj/item/clothing/suit/storage/bomber, null, VENDOR_ITEM_REGULAR), - list("Black Bomber Jacket", 12, /obj/item/clothing/suit/storage/bomber/alt, null, VENDOR_ITEM_REGULAR), - list("External webbing", 12, /obj/item/clothing/suit/storage/webbing, null, VENDOR_ITEM_REGULAR), - list("Orange Hazard Vest", 12, /obj/item/clothing/suit/storage/hazardvest, null, VENDOR_ITEM_REGULAR), - list("Blue Hazard Vest", 12, /obj/item/clothing/suit/storage/hazardvest/blue, null, VENDOR_ITEM_REGULAR), - list("Yellow Hazard Vest", 12, /obj/item/clothing/suit/storage/hazardvest/yellow, null, VENDOR_ITEM_REGULAR), - list("Black Hazard Vest", 12, /obj/item/clothing/suit/storage/hazardvest/black, null, VENDOR_ITEM_REGULAR), + list("Bomber Jacket, Brown", 12, /obj/item/clothing/suit/storage/bomber, null, VENDOR_ITEM_REGULAR), + list("Bomber Jacket, Black", 12, /obj/item/clothing/suit/storage/bomber/alt, null, VENDOR_ITEM_REGULAR), + list("External Webbing", 12, /obj/item/clothing/suit/storage/webbing, null, VENDOR_ITEM_REGULAR), + list("Utility Vest", 12, /obj/item/clothing/suit/storage/utility_vest, null, VENDOR_ITEM_REGULAR), + list("Hazard Vest(Orange)", 12, /obj/item/clothing/suit/storage/hazardvest, null, VENDOR_ITEM_REGULAR), + list("Hazard Vest(Blue)", 12, /obj/item/clothing/suit/storage/hazardvest/blue, null, VENDOR_ITEM_REGULAR), + list("Hazard Vest(Yellow)", 12, /obj/item/clothing/suit/storage/hazardvest/yellow, null, VENDOR_ITEM_REGULAR), + list("Hazard Vest(Black)", 12, /obj/item/clothing/suit/storage/hazardvest/black, null, VENDOR_ITEM_REGULAR), list("Synthetic's Snow Suit", 12, /obj/item/clothing/suit/storage/snow_suit/synth, null, VENDOR_ITEM_REGULAR), list("USCM Service Jacket", 12, /obj/item/clothing/suit/storage/jacket/marine/service, null, VENDOR_ITEM_REGULAR), list("USCM MP Service Jacket", 12, /obj/item/clothing/suit/storage/jacket/marine/service/mp, null, VENDOR_ITEM_REGULAR), - list("Brown Windbreaker", 12, /obj/item/clothing/suit/storage/windbreaker/windbreaker_brown, null, VENDOR_ITEM_REGULAR), - list("Gray Windbreaker", 12, /obj/item/clothing/suit/storage/windbreaker/windbreaker_gray, null, VENDOR_ITEM_REGULAR), - list("Green Windbreaker", 12, /obj/item/clothing/suit/storage/windbreaker/windbreaker_green, null, VENDOR_ITEM_REGULAR), - list("First Responder Windbreaker", 12, /obj/item/clothing/suit/storage/windbreaker/windbreaker_fr, null, VENDOR_ITEM_REGULAR), - list("Exploration Windbreaker", 12, /obj/item/clothing/suit/storage/windbreaker/windbreaker_covenant, null, VENDOR_ITEM_REGULAR), + list("Windbreaker, Brown", 12, /obj/item/clothing/suit/storage/windbreaker/windbreaker_brown, null, VENDOR_ITEM_REGULAR), + list("Windbreaker, Grey", 12, /obj/item/clothing/suit/storage/windbreaker/windbreaker_gray, null, VENDOR_ITEM_REGULAR), + list("Windbreaker, Green", 12, /obj/item/clothing/suit/storage/windbreaker/windbreaker_green, null, VENDOR_ITEM_REGULAR), + list("Windbreaker, First Responder", 12, /obj/item/clothing/suit/storage/windbreaker/windbreaker_fr, null, VENDOR_ITEM_REGULAR), + list("Windbreaker, Exploration", 12, /obj/item/clothing/suit/storage/windbreaker/windbreaker_covenant, null, VENDOR_ITEM_REGULAR), list("Labcoat", 12, /obj/item/clothing/suit/storage/labcoat, null, VENDOR_ITEM_REGULAR), list("Labcoat, Researcher", 12, /obj/item/clothing/suit/storage/labcoat/researcher, null, VENDOR_ITEM_REGULAR), list("RO Jacket", 12, /obj/item/clothing/suit/storage/RO, null, VENDOR_ITEM_REGULAR), @@ -248,9 +255,8 @@ GLOBAL_LIST_INIT(cm_vending_clothing_synth_snowflake, list( list("BACKPACK", 0, null, null, null), list("Backpack, Industrial", 12, /obj/item/storage/backpack/industrial, null, VENDOR_ITEM_REGULAR), - list("Backpack, USCM IMB", 12, /obj/item/storage/backpack/marine, null, VENDOR_ITEM_REGULAR), list("Backpack, USCM Medical", 12, /obj/item/storage/backpack/marine/medic, null, VENDOR_ITEM_REGULAR), - list("Backpack, USCM Technician", 12, /obj/item/storage/backpack/marine/tech, null, VENDOR_ITEM_REGULAR), + list("Chestrig, Technician", 12, /obj/item/storage/backpack/marine/satchel/tech, null, VENDOR_ITEM_REGULAR), list("Satchel, USCM", 12, /obj/item/storage/backpack/marine/satchel, null, VENDOR_ITEM_REGULAR), list("Satchel, Leather", 12, /obj/item/storage/backpack/satchel, null, VENDOR_ITEM_REGULAR), list("Satchel, Medical", 12, /obj/item/storage/backpack/satchel/med, null, VENDOR_ITEM_REGULAR), diff --git a/code/game/machinery/vending/vendor_types/medical.dm b/code/game/machinery/vending/vendor_types/medical.dm index 5815f60b2e0c..70ac7701973b 100644 --- a/code/game/machinery/vending/vendor_types/medical.dm +++ b/code/game/machinery/vending/vendor_types/medical.dm @@ -272,7 +272,7 @@ /obj/structure/machinery/cm_vending/sorted/medical/blood name = "\improper MM Blood Dispenser" - desc = "Marine Med brand Blood Pack Dispensary" + desc = "The Marine Med Brand Blood Pack Dispensary is the premier, top-of-the-line blood dispenser of 2105! Get yours today!" //Don't update this year, the joke is it's old. icon_state = "blood" wrenchable = TRUE hackable = TRUE diff --git a/code/game/objects/effects/landmarks/landmarks.dm b/code/game/objects/effects/landmarks/landmarks.dm index 64a5025794e3..1cbe10c497f6 100644 --- a/code/game/objects/effects/landmarks/landmarks.dm +++ b/code/game/objects/effects/landmarks/landmarks.dm @@ -216,23 +216,25 @@ /obj/effect/landmark/yautja_teleport name = "yautja_teleport" + /// The index we registered as in mainship_yautja_desc or yautja_teleport_descs + var/desc_index /obj/effect/landmark/yautja_teleport/Initialize(mapload, ...) . = ..() - var/turf/T = get_turf(src) + var/turf/turf = get_turf(src) + desc_index = turf.loc.name + turf.loc_to_string() if(is_mainship_level(z)) GLOB.mainship_yautja_teleports += src - GLOB.mainship_yautja_desc[T.loc.name + T.loc_to_string()] = src + GLOB.mainship_yautja_desc[desc_index] = src else GLOB.yautja_teleports += src - GLOB.yautja_teleport_descs[T.loc.name + T.loc_to_string()] = src + GLOB.yautja_teleport_descs[desc_index] = src /obj/effect/landmark/yautja_teleport/Destroy() - var/turf/T = get_turf(src) GLOB.mainship_yautja_teleports -= src GLOB.yautja_teleports -= src - GLOB.mainship_yautja_desc -= T.loc.name + T.loc_to_string() - GLOB.yautja_teleport_descs -= T.loc.name + T.loc_to_string() + GLOB.mainship_yautja_desc -= desc_index + GLOB.yautja_teleport_descs -= desc_index return ..() diff --git a/code/game/objects/effects/landmarks/survivor_spawner.dm b/code/game/objects/effects/landmarks/survivor_spawner.dm index fbd04babdf20..335d4e9f4774 100644 --- a/code/game/objects/effects/landmarks/survivor_spawner.dm +++ b/code/game/objects/effects/landmarks/survivor_spawner.dm @@ -67,7 +67,7 @@ /obj/effect/landmark/survivor_spawner/bigred_crashed_pmc equipment = /datum/equipment_preset/survivor/pmc - synth_equipment = /datum/equipment_preset/pmc/synth + synth_equipment = /datum/equipment_preset/synth/survivor/pmc intro_text = list("

You are a survivor of a crash landing!

",\ "You are NOT aware of the xenomorph threat.",\ "Your primary objective is to heal up and survive. If you want to assault the hive - adminhelp.") @@ -80,7 +80,7 @@ /obj/effect/landmark/survivor_spawner/bigred_crashed_cl equipment = /datum/equipment_preset/survivor/wy/manager - synth_equipment = /datum/equipment_preset/pmc/synth + synth_equipment = /datum/equipment_preset/synth/survivor/pmc intro_text = list("

You are a survivor of a crash landing!

",\ "You are NOT aware of the xenomorph threat.",\ "Your primary objective is to heal up and survive. If you want to assault the hive - adminhelp.") diff --git a/code/game/objects/items/devices/radio/encryptionkey.dm b/code/game/objects/items/devices/radio/encryptionkey.dm index 5e5786deb33e..6293abb67339 100644 --- a/code/game/objects/items/devices/radio/encryptionkey.dm +++ b/code/game/objects/items/devices/radio/encryptionkey.dm @@ -49,7 +49,7 @@ name = "AI Integrated Encryption Key" desc = "Integrated encryption key" icon_state = "cap_key" - channels = list(RADIO_CHANNEL_ALMAYER = TRUE, RADIO_CHANNEL_COMMAND = TRUE, RADIO_CHANNEL_MP = TRUE, RADIO_CHANNEL_ENGI = TRUE, RADIO_CHANNEL_MEDSCI = TRUE, RADIO_CHANNEL_REQ = TRUE, SQUAD_MARINE_1 = TRUE, SQUAD_MARINE_2 = TRUE, SQUAD_MARINE_3 = TRUE, SQUAD_MARINE_4 = TRUE, SQUAD_MARINE_5 = TRUE, SQUAD_MARINE_CRYO = FALSE, RADIO_CHANNEL_JTAC = TRUE, RADIO_CHANNEL_INTEL = TRUE) + channels = list(RADIO_CHANNEL_ALMAYER = TRUE, RADIO_CHANNEL_COMMAND = TRUE, RADIO_CHANNEL_MP = TRUE, RADIO_CHANNEL_ENGI = TRUE, RADIO_CHANNEL_MEDSCI = TRUE, RADIO_CHANNEL_REQ = TRUE, SQUAD_MARINE_1 = TRUE, SQUAD_MARINE_2 = TRUE, SQUAD_MARINE_3 = TRUE, SQUAD_MARINE_4 = TRUE, SQUAD_MARINE_5 = TRUE, SQUAD_MARINE_CRYO = TRUE, RADIO_CHANNEL_JTAC = TRUE, RADIO_CHANNEL_INTEL = TRUE) /obj/item/device/encryptionkey/sentry_laptop name = "Sentry Network Status Encryption Key" @@ -61,12 +61,12 @@ /obj/item/device/encryptionkey/cmpcom/cdrcom name = "\improper Marine Senior Command Radio Encryption Key" - channels = list(RADIO_CHANNEL_COMMAND = TRUE, RADIO_CHANNEL_MP = TRUE, SQUAD_MARINE_1 = TRUE, SQUAD_MARINE_2 = TRUE, SQUAD_MARINE_3 = TRUE, SQUAD_MARINE_4 = TRUE, SQUAD_MARINE_5 = TRUE, SQUAD_MARINE_CRYO = FALSE, RADIO_CHANNEL_ENGI = TRUE, RADIO_CHANNEL_MEDSCI = TRUE, RADIO_CHANNEL_REQ = TRUE, RADIO_CHANNEL_JTAC = TRUE, RADIO_CHANNEL_INTEL = TRUE) + channels = list(RADIO_CHANNEL_COMMAND = TRUE, RADIO_CHANNEL_MP = TRUE, SQUAD_MARINE_1 = TRUE, SQUAD_MARINE_2 = TRUE, SQUAD_MARINE_3 = TRUE, SQUAD_MARINE_4 = TRUE, SQUAD_MARINE_5 = TRUE, SQUAD_MARINE_CRYO = TRUE, RADIO_CHANNEL_ENGI = TRUE, RADIO_CHANNEL_MEDSCI = TRUE, RADIO_CHANNEL_REQ = TRUE, RADIO_CHANNEL_JTAC = TRUE, RADIO_CHANNEL_INTEL = TRUE) /obj/item/device/encryptionkey/mcom name = "\improper Marine Command Radio Encryption Key" icon_state = "cap_key" - channels = list(RADIO_CHANNEL_COMMAND = TRUE, SQUAD_MARINE_1 = TRUE, SQUAD_MARINE_2 = TRUE, SQUAD_MARINE_3 = TRUE, SQUAD_MARINE_4 = TRUE, SQUAD_MARINE_5 = TRUE, SQUAD_MARINE_CRYO = FALSE, RADIO_CHANNEL_ENGI = TRUE, RADIO_CHANNEL_MEDSCI = TRUE, RADIO_CHANNEL_REQ = TRUE, RADIO_CHANNEL_JTAC = TRUE, RADIO_CHANNEL_INTEL = TRUE) + channels = list(RADIO_CHANNEL_COMMAND = TRUE, SQUAD_MARINE_1 = TRUE, SQUAD_MARINE_2 = TRUE, SQUAD_MARINE_3 = TRUE, SQUAD_MARINE_4 = TRUE, SQUAD_MARINE_5 = TRUE, SQUAD_MARINE_CRYO = TRUE, RADIO_CHANNEL_ENGI = TRUE, RADIO_CHANNEL_MEDSCI = TRUE, RADIO_CHANNEL_REQ = TRUE, RADIO_CHANNEL_JTAC = TRUE, RADIO_CHANNEL_INTEL = TRUE) // MARINE ENGINEERING @@ -102,7 +102,7 @@ /obj/item/device/encryptionkey/mmpo name = "\improper Military Police Radio Encryption Key" icon_state = "sec_key" - channels = list(RADIO_CHANNEL_COMMAND = TRUE, RADIO_CHANNEL_MP = TRUE, SQUAD_MARINE_1 = TRUE, SQUAD_MARINE_2 = TRUE, SQUAD_MARINE_3 = TRUE, SQUAD_MARINE_4 = TRUE, SQUAD_MARINE_5 = TRUE, SQUAD_MARINE_CRYO = FALSE, RADIO_CHANNEL_ENGI = TRUE, RADIO_CHANNEL_MEDSCI = TRUE,) + channels = list(RADIO_CHANNEL_COMMAND = TRUE, RADIO_CHANNEL_MP = TRUE, SQUAD_MARINE_1 = TRUE, SQUAD_MARINE_2 = TRUE, SQUAD_MARINE_3 = TRUE, SQUAD_MARINE_4 = TRUE, SQUAD_MARINE_5 = TRUE, SQUAD_MARINE_CRYO = TRUE, RADIO_CHANNEL_ENGI = TRUE, RADIO_CHANNEL_MEDSCI = TRUE,) /obj/item/device/encryptionkey/sec name = "Security Radio Encryption Key" @@ -130,7 +130,7 @@ /obj/item/device/encryptionkey/cmpcom/synth name = "\improper Marine Synth Radio Encryption Key" - channels = list(RADIO_CHANNEL_COMMAND = TRUE, RADIO_CHANNEL_MP = TRUE, SQUAD_MARINE_1 = TRUE, SQUAD_MARINE_2 = TRUE, SQUAD_MARINE_3 = TRUE, SQUAD_MARINE_4 = TRUE, SQUAD_MARINE_5 = TRUE, SQUAD_MARINE_CRYO = FALSE, RADIO_CHANNEL_ENGI = TRUE, RADIO_CHANNEL_MEDSCI = TRUE, RADIO_CHANNEL_REQ = TRUE, RADIO_CHANNEL_JTAC = TRUE, RADIO_CHANNEL_INTEL = TRUE) + channels = list(RADIO_CHANNEL_COMMAND = TRUE, RADIO_CHANNEL_MP = TRUE, SQUAD_MARINE_1 = TRUE, SQUAD_MARINE_2 = TRUE, SQUAD_MARINE_3 = TRUE, SQUAD_MARINE_4 = TRUE, SQUAD_MARINE_5 = TRUE, SQUAD_MARINE_CRYO = TRUE, RADIO_CHANNEL_ENGI = TRUE, RADIO_CHANNEL_MEDSCI = TRUE, RADIO_CHANNEL_REQ = TRUE, RADIO_CHANNEL_JTAC = TRUE, RADIO_CHANNEL_INTEL = TRUE) /obj/item/device/encryptionkey/mcom/cl name = "\improper Corporate Liaison radio encryption key" @@ -163,7 +163,7 @@ channels = list(RADIO_CHANNEL_REQ = TRUE, RADIO_CHANNEL_COMMAND = FALSE) /obj/item/device/encryptionkey/mcom/ai //AI only. - channels = list(RADIO_CHANNEL_COMMAND = TRUE, RADIO_CHANNEL_MP = TRUE, SQUAD_MARINE_1 = TRUE, SQUAD_MARINE_2 = TRUE, SQUAD_MARINE_3 = TRUE, SQUAD_MARINE_4 = TRUE, SQUAD_MARINE_5 = TRUE, SQUAD_MARINE_CRYO = FALSE, RADIO_CHANNEL_ENGI = TRUE, RADIO_CHANNEL_MEDSCI = TRUE, RADIO_CHANNEL_REQ = TRUE, RADIO_CHANNEL_JTAC = TRUE, RADIO_CHANNEL_INTEL = TRUE) + channels = list(RADIO_CHANNEL_COMMAND = TRUE, RADIO_CHANNEL_MP = TRUE, SQUAD_MARINE_1 = TRUE, SQUAD_MARINE_2 = TRUE, SQUAD_MARINE_3 = TRUE, SQUAD_MARINE_4 = TRUE, SQUAD_MARINE_5 = TRUE, SQUAD_MARINE_CRYO = TRUE, RADIO_CHANNEL_ENGI = TRUE, RADIO_CHANNEL_MEDSCI = TRUE, RADIO_CHANNEL_REQ = TRUE, RADIO_CHANNEL_JTAC = TRUE, RADIO_CHANNEL_INTEL = TRUE) // MARINE SQUADS @@ -296,7 +296,7 @@ /obj/item/device/encryptionkey/highcom name = "\improper USCM High Command Radio Encryption Key" icon_state = "binary_key" - channels = list(RADIO_CHANNEL_HIGHCOM = TRUE, SQUAD_SOF = TRUE, RADIO_CHANNEL_COMMAND = TRUE, RADIO_CHANNEL_MP = TRUE, SQUAD_MARINE_1 = TRUE, SQUAD_MARINE_2 = TRUE, SQUAD_MARINE_3 = TRUE, SQUAD_MARINE_4 = TRUE, SQUAD_MARINE_5 = TRUE, SQUAD_MARINE_CRYO = FALSE, RADIO_CHANNEL_ENGI = TRUE, RADIO_CHANNEL_MEDSCI = TRUE, RADIO_CHANNEL_REQ = TRUE, RADIO_CHANNEL_JTAC = TRUE, RADIO_CHANNEL_INTEL = TRUE) + channels = list(RADIO_CHANNEL_HIGHCOM = TRUE, SQUAD_SOF = TRUE, RADIO_CHANNEL_COMMAND = TRUE, RADIO_CHANNEL_MP = TRUE, SQUAD_MARINE_1 = TRUE, SQUAD_MARINE_2 = TRUE, SQUAD_MARINE_3 = TRUE, SQUAD_MARINE_4 = TRUE, SQUAD_MARINE_5 = TRUE, SQUAD_MARINE_CRYO = TRUE, RADIO_CHANNEL_ENGI = TRUE, RADIO_CHANNEL_MEDSCI = TRUE, RADIO_CHANNEL_REQ = TRUE, RADIO_CHANNEL_JTAC = TRUE, RADIO_CHANNEL_INTEL = TRUE) /obj/item/device/encryptionkey/contractor name = "\improper Vanguard's Arrow Incorporated Radio Encryption Key" diff --git a/code/game/objects/items/explosives/mine.dm b/code/game/objects/items/explosives/mine.dm index 6b8c9bccd299..742a5f314c4a 100644 --- a/code/game/objects/items/explosives/mine.dm +++ b/code/game/objects/items/explosives/mine.dm @@ -198,6 +198,8 @@ return if(L.get_target_lock(iff_signal) || isrobot(L)) return + if(HAS_TRAIT(L, TRAIT_ABILITY_BURROWED)) + return L.visible_message(SPAN_DANGER("[icon2html(src, viewers(src))] The [name] clicks as [L] moves in front of it."), \ SPAN_DANGER("[icon2html(src, L)] The [name] clicks as you move in front of it."), \ SPAN_DANGER("You hear a click.")) diff --git a/code/game/objects/items/reagent_containers/blood_pack.dm b/code/game/objects/items/reagent_containers/blood_pack.dm index 450cdde2fa00..8e29a26c2ecd 100644 --- a/code/game/objects/items/reagent_containers/blood_pack.dm +++ b/code/game/objects/items/reagent_containers/blood_pack.dm @@ -13,7 +13,9 @@ var/mode = BLOOD_BAG_INJECTING var/mob/living/carbon/human/connected_to + var/mob/living/carbon/human/connected_from var/blood_type = null + var/datum/beam/current_beam /obj/item/reagent_container/blood/Initialize() . = ..() @@ -32,6 +34,12 @@ if(10 to 50) icon_state = "half" if(51 to INFINITY) icon_state = "full" +/obj/item/reagent_container/blood/proc/update_beam() + if(current_beam) + QDEL_NULL(current_beam) + else if(connected_from && connected_to) + current_beam = connected_from.beam(connected_to, "iv_tube") + /obj/item/reagent_container/blood/attack(mob/attacked_mob, mob/user) . = ..() @@ -44,7 +52,10 @@ user.visible_message("[user] detaches [src] from [connected_to].", \ "You detach [src] from [connected_to].") connected_to.active_transfusions -= src + connected_to.base_pixel_x = 0 connected_to = null + connected_from = null + update_beam() return if(!skillcheck(user, SKILL_SURGERY, SKILL_SURGERY_NOVICE)) @@ -60,10 +71,13 @@ if(istype(attacked_mob, /mob/living/carbon/human)) connected_to = attacked_mob + connected_from = user connected_to.active_transfusions += src + connected_to.base_pixel_x = 5 START_PROCESSING(SSobj, src) user.visible_message("[user] attaches \the [src] to [connected_to].", \ "You attach \the [src] to [connected_to].") + update_beam() /obj/item/reagent_container/blood/process() //if we're not connected to anything stop doing stuff @@ -106,6 +120,10 @@ connected_to.take_blood(src, amount) +/obj/item/reagent_container/blood/dropped() + ..() + bad_disconnect() + ///Used to standardize effects of a blood bag disconnecting improperly /obj/item/reagent_container/blood/proc/bad_disconnect() if(!connected_to) @@ -116,7 +134,10 @@ if(connected_to.pain.feels_pain) connected_to.emote("scream") connected_to.active_transfusions -= src + connected_to.base_pixel_x = 0 connected_to = null + connected_from = null + update_beam() /obj/item/reagent_container/blood/verb/toggle_mode() set category = "Object" diff --git a/code/game/objects/items/storage/storage.dm b/code/game/objects/items/storage/storage.dm index dd8f10a51559..36f946efdfdc 100644 --- a/code/game/objects/items/storage/storage.dm +++ b/code/game/objects/items/storage/storage.dm @@ -799,9 +799,9 @@ W is always an item. stop_warning prevents messaging. user may be null.**/ storage_close(watcher) /obj/item/storage/proc/dump_objectives() - for(var/obj/item/I in src) - if(I.is_objective) - I.forceMove(loc) + for(var/obj/item/cur_item in src) + if(cur_item.is_objective) + remove_from_storage(cur_item, loc) /obj/item/storage/Destroy() diff --git a/code/game/objects/items/weapons/swords_axes_etc.dm b/code/game/objects/items/weapons/swords_axes_etc.dm index ec7ee0b173da..cdab7db87ed7 100644 --- a/code/game/objects/items/weapons/swords_axes_etc.dm +++ b/code/game/objects/items/weapons/swords_axes_etc.dm @@ -45,7 +45,7 @@ w_class = SIZE_SMALL force = MELEE_FORCE_WEAK var/on = 0 - var/stunforce = 60 + var/stun_force = 10 /obj/item/weapon/telebaton/attack(mob/living/carbon/human/target, mob/living/user) if(!istype(target) || !on) @@ -67,6 +67,7 @@ item_state = "telebaton_1" w_class = SIZE_MEDIUM force = MELEE_FORCE_VERY_STRONG + stun_force = 40 attack_verb = list("smacked", "struck", "slapped", "beat") else user.visible_message(SPAN_NOTICE("Using a smooth, practiced movement, [user] collapses \his [src]."),\ @@ -75,7 +76,8 @@ icon_state = "telebaton_0" item_state = "telebaton_0" w_class = SIZE_SMALL - force = MELEE_FORCE_WEAK//not so robust now + force = MELEE_FORCE_WEAK + stun_force = initial(stun_force) attack_verb = list("hit", "punched") if(istype(user,/mob/living/carbon/human)) @@ -100,8 +102,17 @@ user.flick_attack_overlay(target, "punch") log_interact(user, target, "[key_name(user)] stunned [key_name(target)] with \the [src]") // Hit 'em + var/final_stun_force = stun_force + var/datum/skills/user_skills = user.skills + if(user_skills) + switch(user_skills.get_skill_level(SKILL_POLICE)) + if(SKILL_POLICE_FLASH) + final_stun_force *= 1.5 + if(SKILL_POLICE_SKILLED) + final_stun_force *= 3 + var/target_zone = check_zone(user.zone_selected) - target.apply_stamina_damage(stunforce, target_zone, ARMOR_MELEE) + target.apply_stamina_damage(final_stun_force, target_zone, ARMOR_MELEE) if(target.stamina.current_stamina <= 0) user.visible_message(SPAN_DANGER("[user] knocks down [target] with \the [src]!"),\ SPAN_WARNING("You knock down [target] with \the [src]!")) diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index cf0374c09ab4..8c8d6b6920a8 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -245,19 +245,22 @@ else if(istype(W, /obj/item/packageWrap) || istype(W, /obj/item/explosive/plastic)) return else if(iswelder(W)) + if(material != MATERIAL_METAL && material != MATERIAL_PLASTEEL) + to_chat(user, SPAN_WARNING("You cannot weld [material]!")) + return FALSE//Can't weld wood/plastic. if(!HAS_TRAIT(W, TRAIT_TOOL_BLOWTORCH)) to_chat(user, SPAN_WARNING("You need a stronger blowtorch!")) - return + return FALSE var/obj/item/tool/weldingtool/WT = W if(!WT.isOn()) to_chat(user, SPAN_WARNING("\The [WT] needs to be on!")) - return + return FALSE if(!WT.remove_fuel(0, user)) to_chat(user, SPAN_NOTICE("You need more welding fuel to complete this task.")) - return + return FALSE playsound(src, 'sound/items/Welder.ogg', 25, 1) if(!do_after(user, 10 * user.get_skill_duration_multiplier(SKILL_CONSTRUCTION), INTERRUPT_ALL|BEHAVIOR_IMMOBILE, BUSY_ICON_BUILD)) - return + return FALSE welded = !welded update_icon() for(var/mob/M as anything in viewers(src)) @@ -266,9 +269,9 @@ if(isxeno(user)) var/mob/living/carbon/xenomorph/opener = user src.attack_alien(opener) - return + return FALSE src.attack_hand(user) - return + return TRUE /obj/structure/closet/MouseDrop_T(atom/movable/O, mob/user) if(!opened) diff --git a/code/game/objects/structures/stool_bed_chair_nest/bed.dm b/code/game/objects/structures/stool_bed_chair_nest/bed.dm index bda4b60ca21e..7979994915f4 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/bed.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/bed.dm @@ -208,6 +208,20 @@ return ..() +/obj/structure/bed/roller/Collided(atom/movable/moving_atom) + if(!isxeno(moving_atom)) + return ..() + + if(buckled_mob && buckled_mob.stat != DEAD) + return ..() + + if(buckled_bodybag) + var/mob/mob_in_bodybag = locate(/mob) in buckled_bodybag + if(mob_in_bodybag && mob_in_bodybag.stat != DEAD) + return ..() + + return + /obj/item/roller name = "roller bed" desc = "A collapsed roller bed that can be carried around." diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm index 730263ad7a3e..db3ce98339a3 100644 --- a/code/game/objects/structures/tables_racks.dm +++ b/code/game/objects/structures/tables_racks.dm @@ -326,11 +326,13 @@ /// Checks whether a table is a straight line along a given axis /obj/structure/surface/table/proc/straight_table_check(direction) var/obj/structure/surface/table/table = src - while(table) + var/obj/structure/surface/table/side_table + var/tables_count = 7 // Lazy extra safety against infinite loops. If table big, can't flip, i guess. + while(--tables_count) // Check whether there are connected tables perpendicular to the axis for(var/angle in list(-90, 90)) - table = locate() in get_step(loc, turn(direction, angle)) - if(table && !table.flipped) + side_table = locate() in get_step(table, turn(direction, angle)) + if(side_table && !side_table.flipped) return FALSE table = locate() in get_step(table, direction) if(!table || table.flipped) @@ -339,6 +341,8 @@ var/obj/structure/surface/table/reinforced/reinforced_table = table if(reinforced_table.status == RTABLE_NORMAL) return FALSE + if(!tables_count) + return FALSE return TRUE /obj/structure/surface/table/verb/do_flip() @@ -421,7 +425,7 @@ to_chat(usr, SPAN_WARNING("You have moved a table too recently.")) return FALSE - if(!skip_straight_check && (!straight_table_check(turn(direction, 90)) || !straight_table_check(turn(direction, -90)))) + if(!skip_straight_check && !(straight_table_check(turn(direction, 90)) && straight_table_check(turn(direction, -90)))) to_chat(usr, SPAN_WARNING("[src] is too wide to be flipped.")) return FALSE diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index ba5d52a23f97..6154bb4f8c32 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -27,7 +27,6 @@ var/list/admin_verbs_default = list( /client/proc/invismin, /client/proc/set_explosive_antigrief, /client/proc/check_explosive_antigrief, - /client/proc/cmd_mod_say, /client/proc/dsay, /client/proc/chem_panel, /*chem panel, allows viewing, editing and creation of reagent and chemical_reaction datums*/ /client/proc/player_panel_new, /*shows an interface for all players, with links to various panels*/ @@ -68,6 +67,8 @@ var/list/admin_verbs_default = list( /datum/admins/proc/alertall, /datum/admins/proc/imaginary_friend, /client/proc/toggle_ares_ping, + /client/proc/cmd_admin_say, /*staff-only ooc chat*/ + /client/proc/cmd_mod_say, /* alternate way of typing asay, no different than cmd_admin_say */ ) var/list/admin_verbs_admin = list( @@ -80,7 +81,6 @@ var/list/admin_verbs_admin = list( /client/proc/toggleprayers, /*toggles prayers on/off*/ /client/proc/toggle_hear_radio, /*toggles whether we hear the radio*/ /client/proc/event_panel, - /client/proc/cmd_admin_say, /*admin-only ooc chat*/ /client/proc/free_slot, /*frees slot for chosen job*/ /client/proc/modify_slot, /client/proc/cmd_admin_rejuvenate, diff --git a/code/modules/admin/tabs/admin_tab.dm b/code/modules/admin/tabs/admin_tab.dm index c0ffeada9883..5a98faa6ddaa 100644 --- a/code/modules/admin/tabs/admin_tab.dm +++ b/code/modules/admin/tabs/admin_tab.dm @@ -218,30 +218,52 @@ message_admins("[key_name(usr)] used Toggle Wake In View.") +/client/proc/cmd_mod_say(msg as text) + set name = "Msay" // This exists for ease of admins who were used to using msay instead of asay + set category = "Admin" + set hidden = TRUE + + cmd_admin_say(msg) + /client/proc/cmd_admin_say(msg as text) set name = "Asay" //Gave this shit a shorter name so you only have to time out "asay" rather than "admin say" to use it --NeoFite set category = "Admin" set hidden = TRUE - if(!check_rights(R_ADMIN)) + if(!check_rights(R_ADMIN|R_MOD)) return msg = copytext(sanitize(msg), 1, MAX_MESSAGE_LEN) - if(!msg) + + if (!msg) return - log_adminpm("ADMIN : [key_name(src)] : [msg]") - REDIS_PUBLISH("byond.asay", "author" = src.key, "message" = strip_html(msg), "host" = ishost(src), "rank" = admin_holder.rank) + REDIS_PUBLISH("byond.asay", "author" = src.key, "message" = strip_html(msg), "admin" = CLIENT_HAS_RIGHTS(src, R_ADMIN), "rank" = admin_holder.rank) + + if(findtext(msg, "@") || findtext(msg, "#")) + var/list/link_results = check_asay_links(msg) + if(length(link_results)) + msg = link_results[ASAY_LINK_NEW_MESSAGE_INDEX] + link_results[ASAY_LINK_NEW_MESSAGE_INDEX] = null + var/list/pinged_admin_clients = link_results[ASAY_LINK_PINGED_ADMINS_INDEX] + for(var/iter_ckey in pinged_admin_clients) + var/client/iter_admin_client = pinged_admin_clients[iter_ckey] + if(!iter_admin_client?.admin_holder) + continue + window_flash(iter_admin_client) + SEND_SOUND(iter_admin_client.mob, sound('sound/misc/asay_ping.ogg')) + + log_adminpm("ADMIN: [key_name(src)] : [msg]") var/color = "adminsay" if(ishost(usr)) color = "headminsay" - if(check_rights(R_ADMIN,0)) - msg = "ADMIN: [key_name(usr, 1)] [ADMIN_JMP_USER(mob)]: [msg]" - for(var/client/C in GLOB.admins) - if(R_ADMIN & C.admin_holder.rights) - to_chat(C, msg) + var/channel = "ADMIN:" + channel = "[admin_holder.rank]:" + for(var/client/client as anything in GLOB.admins) + if((R_ADMIN|R_MOD) & client.admin_holder.rights) + to_chat(client, "[channel] [key_name(src,1)] [ADMIN_JMP_USER(mob)]: [msg]") /datum/admins/proc/alertall() set name = "Alert All" @@ -328,50 +350,6 @@ var/msg = input(src, null, "asay \"text\"") as text|null cmd_admin_say(msg) -/client/proc/cmd_mod_say(msg as text) - set name = "Msay" - set category = "Admin" - set hidden = TRUE - - if(!check_rights(R_ADMIN|R_MOD)) - return - - msg = copytext(sanitize(msg), 1, MAX_MESSAGE_LEN) - - if (!msg) - return - - REDIS_PUBLISH("byond.msay", "author" = src.key, "message" = strip_html(msg), "admin" = CLIENT_HAS_RIGHTS(src, R_ADMIN), "rank" = admin_holder.rank) - - if(findtext(msg, "@") || findtext(msg, "#")) - var/list/link_results = check_asay_links(msg) - if(length(link_results)) - msg = link_results[ASAY_LINK_NEW_MESSAGE_INDEX] - link_results[ASAY_LINK_NEW_MESSAGE_INDEX] = null - var/list/pinged_admin_clients = link_results[ASAY_LINK_PINGED_ADMINS_INDEX] - for(var/iter_ckey in pinged_admin_clients) - var/client/iter_admin_client = pinged_admin_clients[iter_ckey] - if(!iter_admin_client?.admin_holder) - continue - window_flash(iter_admin_client) - SEND_SOUND(iter_admin_client.mob, sound('sound/misc/asay_ping.ogg')) - - log_adminpm("MOD: [key_name(src)] : [msg]") - - var/color = "mod" - if (check_rights(R_ADMIN,0)) - color = "adminmod" - - var/channel = "MOD:" - channel = "[admin_holder.rank]:" - for(var/client/C in GLOB.admins) - if((R_ADMIN|R_MOD) & C.admin_holder.rights) - to_chat(C, "[channel] [key_name(src,1)] [ADMIN_JMP_USER(mob)]: [msg]") - -/client/proc/get_mod_say() - var/msg = input(src, null, "msay \"text\"") as text|null - cmd_mod_say(msg) - /client/proc/cmd_mentor_say(msg as text) set name = "MentorSay" set category = "OOC" diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm index 6926175c835a..c700a226295e 100644 --- a/code/modules/client/client_procs.dm +++ b/code/modules/client/client_procs.dm @@ -713,17 +713,8 @@ GLOBAL_LIST_INIT(whitelisted_client_procs, list( winset(src, "srvkeybinds-[REF(key)]", "parent=default;name=[key];command=[looc]") else winset(src, "srvkeybinds-[REF(key)]", "parent=default;name=[key];command=looc") - if(MOD_CHANNEL) - if(admin_holder?.check_for_rights(R_MOD)) - if(prefs.tgui_say) - var/msay = tgui_say_create_open_command(MOD_CHANNEL) - winset(src, "srvkeybinds-[REF(key)]", "parent=default;name=[key];command=[msay]") - else - winset(src, "srvkeybinds-[REF(key)]", "parent=default;name=[key];command=msay") - else - winset(src, "srvkeybinds-[REF(key)]", "parent=default;name=[key];command=") if(ADMIN_CHANNEL) - if(admin_holder?.check_for_rights(R_ADMIN)) + if(admin_holder?.check_for_rights(R_MOD)) if(prefs.tgui_say) var/asay = tgui_say_create_open_command(ADMIN_CHANNEL) winset(src, "srvkeybinds-[REF(key)]", "parent=default;name=[key];command=[asay]") diff --git a/code/modules/client/player_details.dm b/code/modules/client/player_details.dm index 2360ea6c4f28..634fd8fb627e 100644 --- a/code/modules/client/player_details.dm +++ b/code/modules/client/player_details.dm @@ -10,6 +10,9 @@ GLOBAL_LIST_EMPTY(player_details) // ckey -> /datum/player_details /// The descriminator for larva queue ordering: Generally set to timeofdeath except for facehuggers/admin z-level play var/larva_queue_time +/datum/player_details/New() + larva_queue_time = world.time + return ..() /proc/log_played_names(ckey, ...) if(!ckey) diff --git a/code/modules/clothing/suits/marine_armor.dm b/code/modules/clothing/suits/marine_armor.dm index ab62ea782a09..8ad01f8c4e30 100644 --- a/code/modules/clothing/suits/marine_armor.dm +++ b/code/modules/clothing/suits/marine_armor.dm @@ -579,6 +579,7 @@ var/list/squad_colors_chat = list(rgb(230,125,125), rgb(255,230,80), rgb(255,150 armor_rad = CLOTHING_ARMOR_NONE armor_internaldamage = CLOTHING_ARMOR_NONE storage_slots = 3 + slowdown = SLOWDOWN_ARMOR_VERY_LIGHT time_to_unequip = 0.5 SECONDS time_to_equip = 1 SECONDS uniform_restricted = null diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm index d2b020a05daf..c51f5f2575ed 100644 --- a/code/modules/clothing/suits/miscellaneous.dm +++ b/code/modules/clothing/suits/miscellaneous.dm @@ -272,13 +272,11 @@ flags_armor_protection = BODY_FLAG_CHEST|BODY_FLAG_ARMS /obj/item/clothing/suit/storage/webbing - name = "External webbing" + name = "external webbing" desc = "Designed to be worn over a jumpsuit rather than clipped on." icon_state = "webbing" item_state = "webbing" allowed = list( - /obj/item/storage/fancy/cigarettes, - /obj/item/tool/lighter, /obj/item/weapon/baton, /obj/item/handcuffs, /obj/item/device/binoculars, @@ -287,7 +285,6 @@ /obj/item/device/flashlight, /obj/item/device/healthanalyzer, /obj/item/device/radio, - /obj/item/tank/emergency_oxygen, /obj/item/tool/crowbar, /obj/item/tool/crew_monitor, /obj/item/tool/pen, @@ -295,6 +292,26 @@ /obj/item/device/motiondetector, ) +/obj/item/clothing/suit/storage/utility_vest + name = "utility vest" + desc = "A utility vest to hold tools in." + icon_state = "synth_utility_vest" + item_state = "synth_utility_vest" + allowed = list( + /obj/item/weapon/baton, + /obj/item/handcuffs, + /obj/item/device/binoculars, + /obj/item/attachable/bayonet, + + /obj/item/device/flashlight, + /obj/item/device/healthanalyzer, + /obj/item/device/radio, + /obj/item/tool/crowbar, + /obj/item/tool/crew_monitor, + /obj/item/storage/large_holster/machete, + /obj/item/device/motiondetector, + ) + //Blue suit jacket toggle /obj/item/clothing/suit/suit/verb/toggle() set name = "Toggle Jacket Buttons" diff --git a/code/modules/clothing/under/marine_uniform.dm b/code/modules/clothing/under/marine_uniform.dm index 540c311f9221..eca050cc4b88 100644 --- a/code/modules/clothing/under/marine_uniform.dm +++ b/code/modules/clothing/under/marine_uniform.dm @@ -705,7 +705,7 @@ sensor_faction = FACTION_CLF /obj/item/clothing/under/colonist/ua_civvies - name = "gray utilities" + name = "\improper UA gray utility uniform" desc = "A stylish gray jumpsuit - standard issue for UA civilian support personnel." icon_state = "ua_civvies" worn_state = "ua_civvies" @@ -713,7 +713,7 @@ sensor_faction = FACTION_MARINE /obj/item/clothing/under/colonist/wy_davisone - name = "brown utilities" + name = "\improper UA brown utility uniform" desc = "A stylish brown jumpsuit - standard issue for UA civilian support personnel." icon_state = "wy_davisone" worn_state = "wy_davisone" @@ -737,14 +737,15 @@ desc = "A comfortable white T-shirt and brown jeans." icon_state = "tshirt_w_br" worn_state = "tshirt_w_br" + displays_id = FALSE has_sensor = UNIFORM_HAS_SENSORS sensor_faction = FACTION_MARINE - /obj/item/clothing/under/tshirt/gray_blu name = "gray T-shirt and jeans" desc = "A comfortable gray T-shirt and blue jeans." icon_state = "tshirt_gray_blu" worn_state = "tshirt_gray_blu" + displays_id = FALSE has_sensor = UNIFORM_HAS_SENSORS sensor_faction = FACTION_MARINE @@ -753,6 +754,7 @@ desc = "A comfortable red T-shirt and black jeans." icon_state = "tshirt_r_bla" worn_state = "tshirt_r_bla" + displays_id = FALSE has_sensor = UNIFORM_HAS_SENSORS sensor_faction = FACTION_MARINE @@ -851,6 +853,38 @@ worn_state = "rdalt" flags_jumpsuit = FALSE +/obj/item/clothing/under/rank/synthetic/frontier + name = "\improper frontier jumpsuit" + desc = "A cargo jumpsuit dressed down for full range of motion and state-of-the-art frontier temperature control. It's the best thing an engineer can wear in the Outer Veil." + icon_state = "synth_cargo_light" + worn_state = "synth_cargo_light" + displays_id = FALSE + +/obj/item/clothing/under/rank/synthetic/utility + name = "\improper UA utility uniform" + desc = "A green-on-green utility uniform, popularly issued to UA contract workers on the frontier." + icon_state = "synth_green_utility" + worn_state = "synth_green_utility" + displays_id = FALSE + +/obj/item/clothing/under/rank/synthetic/utility/yellow + name = "\improper utility uniform" + desc = "A grey utility uniform with yellow suspenders, made for shipside crew." + icon_state = "synth_yellow_utility" + worn_state = "synth_yellow_utility" + +/obj/item/clothing/under/rank/synthetic/utility/red + name = "\improper utility uniform" + desc = "A grey utility uniform with red suspenders and blue jeans, the sign of a veteran laborer, or someone not paid by the hour." + icon_state = "synth_red_utility" + worn_state = "synth_red_utility" + +/obj/item/clothing/under/rank/synthetic/utility/blue + name = "\improper utility uniform" + desc = "A blue utility uniform with teal suspenders and rugged pants." + icon_state = "synth_blue_utility" + worn_state = "synth_blue_utility" + /obj/item/clothing/under/rank/synthetic/councillor name = "\improper USCM Pristine Support Uniform" desc = "A nicely handcrafted uniform made for Synthetic crewmembers." diff --git a/code/modules/clothing/under/miscellaneous.dm b/code/modules/clothing/under/miscellaneous.dm index b5d2850575aa..42c61404a31a 100644 --- a/code/modules/clothing/under/miscellaneous.dm +++ b/code/modules/clothing/under/miscellaneous.dm @@ -82,8 +82,8 @@ item_state = "r_suit" /obj/item/clothing/under/blackskirt - name = "black skirt" - desc = "A black skirt, very fancy!" + name = "red dress skirt" + desc = "A black cardigan with a red skirt, quite fancy!" icon_state = "blackskirt" flags_armor_protection = BODY_FLAG_CHEST|BODY_FLAG_GROIN|BODY_FLAG_ARMS diff --git a/code/modules/cm_aliens/structures/fruit.dm b/code/modules/cm_aliens/structures/fruit.dm index 8bdcc0b82413..bb899a6ff25b 100644 --- a/code/modules/cm_aliens/structures/fruit.dm +++ b/code/modules/cm_aliens/structures/fruit.dm @@ -150,25 +150,33 @@ update_icon() QDEL_IN(src, 3 SECONDS) -/obj/effect/alien/resin/fruit/attack_alien(mob/living/carbon/xenomorph/X) +/obj/effect/alien/resin/fruit/attack_alien(mob/living/carbon/xenomorph/affected_xeno) if(picked) - to_chat(X, SPAN_XENODANGER("This fruit is already being picked!")) + to_chat(affected_xeno, SPAN_XENODANGER("This fruit is already being picked!")) return - if(X.a_intent != INTENT_HARM && (X.can_not_harm(bound_xeno) || X.hivenumber == hivenumber)) - var/cant_consume = prevent_consume(X) + + if(affected_xeno.a_intent != INTENT_HARM && (affected_xeno.can_not_harm(bound_xeno) || affected_xeno.hivenumber == hivenumber)) + var/cant_consume = prevent_consume(affected_xeno) if(cant_consume) return cant_consume + if(mature) - to_chat(X, SPAN_XENOWARNING("You prepare to consume [name].")) - xeno_noncombat_delay(X) - if(!do_after(X, consume_delay, INTERRUPT_ALL, BUSY_ICON_FRIENDLY)) + to_chat(affected_xeno, SPAN_XENOWARNING("You prepare to consume [name].")) + xeno_noncombat_delay(affected_xeno) + if(!do_after(affected_xeno, consume_delay, INTERRUPT_ALL, BUSY_ICON_FRIENDLY)) return XENO_NO_DELAY_ACTION - consume_effect(X) + + cant_consume = prevent_consume(affected_xeno) // Check again after the delay incase they have eaten another fruit + if(cant_consume) + to_chat(affected_xeno, SPAN_XENOWARNING("You can no longer consume [name].")) + return cant_consume + consume_effect(affected_xeno) else - to_chat(X, SPAN_XENOWARNING("[name] isn't ripe yet. You need to wait a little longer.")) - if(X.a_intent == INTENT_HARM && isxeno_builder(X) || (!X.can_not_harm(bound_xeno) && X.hivenumber != hivenumber)) - X.animation_attack_on(src) - X.visible_message(SPAN_XENODANGER("[X] removes [name]!"), + to_chat(affected_xeno, SPAN_XENOWARNING("[name] isn't ripe yet. You need to wait a little longer.")) + + if(affected_xeno.a_intent == INTENT_HARM && isxeno_builder(affected_xeno) || (!affected_xeno.can_not_harm(bound_xeno) && affected_xeno.hivenumber != hivenumber)) + affected_xeno.animation_attack_on(src) + affected_xeno.visible_message(SPAN_XENODANGER("[affected_xeno] removes [name]!"), SPAN_XENODANGER("You remove [name]!")) playsound(loc, "alien_resin_break", 25) qdel(src) @@ -376,30 +384,49 @@ bound_xeno = null // Xenos eating fruit -/obj/item/reagent_container/food/snacks/resin_fruit/attack(mob/living/carbon/xenomorph/X, mob/user) +/obj/item/reagent_container/food/snacks/resin_fruit/attack(mob/living/carbon/xenomorph/affected_xeno, mob/user) if(istype(user, /mob/living/carbon/xenomorph)) // Prevents xenos from feeding capped/dead marines fruit - var/mob/living/carbon/xenomorph/Y = user - if(!Y.can_not_harm(X)) - to_chat(Y, SPAN_WARNING("[X] refuses to eat [src].")) + var/mob/living/carbon/xenomorph/feeding_xeno = user + if(!feeding_xeno.can_not_harm(affected_xeno)) + to_chat(feeding_xeno, SPAN_WARNING("[affected_xeno] refuses to eat [src].")) return - if(!istype(X)) + + if(!istype(affected_xeno)) return ..() - if(X.stat == DEAD) + + if(affected_xeno.stat == DEAD) to_chat(user, SPAN_WARNING("That sister is already dead, they won't benefit from the fruit now...")) return - user.affected_message(X, - SPAN_HELPFUL("You start [user == X ? "eating" : "feeding [X]"] [src]."), - SPAN_HELPFUL("[user] starts feeding you [src]."), - SPAN_NOTICE("[user] starts [user == X ? "eating" : "feeding [X]"] [src].")) - if(!do_after(user, consume_delay, INTERRUPT_ALL, BUSY_ICON_FRIENDLY, X, INTERRUPT_MOVED, BUSY_ICON_MEDICAL)) + + var/obj/effect/alien/resin/fruit/current_fruit = new fruit_type(affected_xeno) + var/cant_consume = current_fruit.prevent_consume(affected_xeno) + if(cant_consume) + user.affected_message(affected_xeno, + SPAN_HELPFUL("You fail to [user == affected_xeno ? "eat" : "feed [affected_xeno]"] [current_fruit]."), + SPAN_HELPFUL("[user] fails to feed you [current_fruit].")) + return + user.affected_message(affected_xeno, + SPAN_HELPFUL("You start [user == affected_xeno ? "eating" : "feeding [affected_xeno]"] [current_fruit]."), + SPAN_HELPFUL("[user] starts feeding you [current_fruit]."), + SPAN_NOTICE("[user] starts [user == affected_xeno ? "eating" : "feeding [affected_xeno]"] [current_fruit].")) + + if(!do_after(user, consume_delay, INTERRUPT_ALL, BUSY_ICON_FRIENDLY, affected_xeno, INTERRUPT_MOVED, BUSY_ICON_MEDICAL)) return FALSE - user.affected_message(X, - SPAN_HELPFUL("You [user == X ? "eat" : "fed [X]"] [src]."), - SPAN_HELPFUL("[user] fed you [src]."), - SPAN_NOTICE("[user] [user == X ? "ate" : "fed [X]"] [src].")) - var/obj/effect/alien/resin/fruit/F = new fruit_type(X) - F.mature = TRUE - F.consume_effect(X) + + cant_consume = current_fruit.prevent_consume(affected_xeno) + if(cant_consume) //Check again after the timer incase they ate another fruit + user.affected_message(affected_xeno, + SPAN_HELPFUL("You fail to [user == affected_xeno ? "eat" : "feed [affected_xeno]"] [current_fruit]."), + SPAN_HELPFUL("[user] fails to feed you [current_fruit].")) + return + + user.affected_message(affected_xeno, + SPAN_HELPFUL("You [user == affected_xeno ? "eat" : "fed [affected_xeno]"] [current_fruit]."), + SPAN_HELPFUL("[user] fed you [current_fruit]."), + SPAN_NOTICE("[user] [user == affected_xeno ? "ate" : "fed [affected_xeno]"] [current_fruit].")) + current_fruit.mature = TRUE + current_fruit.consume_effect(affected_xeno) + //Notify the fruit's bound xeno if they exist if(!QDELETED(bound_xeno)) to_chat(bound_xeno, SPAN_XENOWARNING("One of your picked resin fruits has been consumed.")) diff --git a/code/modules/cm_aliens/structures/special/egg_morpher.dm b/code/modules/cm_aliens/structures/special/egg_morpher.dm index 2e79d6ef1d24..1fd154eb354c 100644 --- a/code/modules/cm_aliens/structures/special/egg_morpher.dm +++ b/code/modules/cm_aliens/structures/special/egg_morpher.dm @@ -148,6 +148,7 @@ var/obj/item/item = A if(item.is_objective && item.unacidable) item.forceMove(get_step(loc, pick(alldirs))) + item.mouse_opacity = initial(item.mouse_opacity) QDEL_NULL(captured_mob) update_icon() diff --git a/code/modules/cm_marines/orbital_cannon.dm b/code/modules/cm_marines/orbital_cannon.dm index ad214c954915..8d80f80860f3 100644 --- a/code/modules/cm_marines/orbital_cannon.dm +++ b/code/modules/cm_marines/orbital_cannon.dm @@ -430,7 +430,6 @@ var/list/ob_type_fuel_requirements icon_state = "ob_warhead_1" shake_frequency = 3 max_shake_factor = 15 - max_knockdown_time = 6 var/clear_power = 1200 var/clear_falloff = 400 diff --git a/code/modules/cm_preds/yaut_bracers.dm b/code/modules/cm_preds/yaut_bracers.dm index 1b98ef402b90..5c4079b2be23 100644 --- a/code/modules/cm_preds/yaut_bracers.dm +++ b/code/modules/cm_preds/yaut_bracers.dm @@ -347,10 +347,6 @@ playsound(user,'sound/weapons/wristblades_on.ogg', 15, 1) return TRUE -// Toggle the notification sound -/obj/item/clothing/gloves/yautja/hunter/toggle_notification_sound() - set category = "Yautja.Misc" - //Should put a cool menu here, like ninjas. /obj/item/clothing/gloves/yautja/hunter/verb/wristblades() set name = "Use Wrist Blades" diff --git a/code/modules/cm_preds/yaut_items.dm b/code/modules/cm_preds/yaut_items.dm index e9b7c36b5df6..a6fb4658ed0b 100644 --- a/code/modules/cm_preds/yaut_items.dm +++ b/code/modules/cm_preds/yaut_items.dm @@ -396,7 +396,7 @@ return var/mob/living/carbon/human/H = user - var/ship_to_tele = list("Public" = -1, "Human Ship" = "Human") + var/ship_to_tele = list("Yautja Ship" = -1, "Human Ship" = "Human") if(!HAS_TRAIT(H, TRAIT_YAUTJA_TECH) || is_admin_level(H.z)) to_chat(user, SPAN_WARNING("You fiddle with it, but nothing happens!")) diff --git a/code/modules/cm_tech/implements/railgun.dm b/code/modules/cm_tech/implements/railgun.dm index b0d91515419f..b69f9a9d13a8 100644 --- a/code/modules/cm_tech/implements/railgun.dm +++ b/code/modules/cm_tech/implements/railgun.dm @@ -6,6 +6,7 @@ GLOBAL_DATUM(railgun_eye_location, /datum/coords) /obj/effect/landmark/railgun_computer name = "Railgun computer landmark" + desc = "A computer with an orange interface, it's idly blinking, awaiting a password." /obj/effect/landmark/railgun_computer/Initialize(mapload, ...) . = ..() diff --git a/code/modules/defenses/sentry.dm b/code/modules/defenses/sentry.dm index 946c347efaa0..fc52c254c0b8 100644 --- a/code/modules/defenses/sentry.dm +++ b/code/modules/defenses/sentry.dm @@ -370,7 +370,7 @@ targets.Remove(A) continue - if(M.get_target_lock(faction_group) || M.invisibility) + if(M.get_target_lock(faction_group) || M.invisibility || HAS_TRAIT(M, TRAIT_ABILITY_BURROWED)) if(M == target) target = null targets.Remove(M) diff --git a/code/modules/gear_presets/synths.dm b/code/modules/gear_presets/synths.dm index 823cfb4d69d4..b7749f54c386 100644 --- a/code/modules/gear_presets/synths.dm +++ b/code/modules/gear_presets/synths.dm @@ -451,6 +451,59 @@ survivor_variant = ENGINEERING_SURVIVOR + faction = FACTION_SURVIVOR + faction_group = list(FACTION_SURVIVOR) + access = list(ACCESS_CIVILIAN_PUBLIC, ACCESS_CIVILIAN_COMMAND) + +/datum/equipment_preset/synth/survivor/pmc + name = "Survivor - Synthetic - PMC Support Synth" + + idtype = /obj/item/card/id/pmc + assignment = JOB_PMC_SYNTH + rank = JOB_PMC_SYNTH + role_comm_title = "WY Syn" + +/datum/equipment_preset/synth/survivor/pmc/load_race(mob/living/carbon/human/new_human) + new_human.set_species(SYNTH_GEN_THREE) + +/datum/equipment_preset/synth/survivor/pmc/load_gear(mob/living/carbon/human/new_human) + new_human.equip_to_slot_or_del(new /obj/item/clothing/under/marine/veteran/pmc, WEAR_BODY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/accessory/storage/surg_vest/equipped, WEAR_ACCESSORY) + new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/marine/veteran/pmc/light/synth, WEAR_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/weapon/telebaton, WEAR_IN_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/tool/surgery/synthgraft, WEAR_IN_JACKET) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/nailgun, WEAR_IN_JACKET) + + new_human.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/marine/veteran/pmc, WEAR_HEAD) + new_human.equip_to_slot_or_del(new /obj/item/device/radio/headset/distress/pmc/command/hvh, WEAR_L_EAR) + new_human.equip_to_slot_or_del(new /obj/item/clothing/glasses/night/experimental_mesons, WEAR_EYES) + new_human.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/pmc, WEAR_FACE) + + new_human.equip_to_slot_or_del(new /obj/item/clothing/gloves/marine/veteran/pmc, WEAR_HANDS) + new_human.equip_to_slot_or_del(new /obj/item/clothing/shoes/veteran/pmc/knife, WEAR_FEET) + + new_human.equip_to_slot_or_del(new /obj/item/storage/backpack/marine/smartpack/white, WEAR_BACK) + new_human.equip_to_slot_or_del(new /obj/item/roller, WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/roller/surgical, WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/tool/extinguisher/mini, WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/device/defibrillator/upgraded, WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/ammo_magazine/smg/nailgun, WEAR_IN_BACK) + new_human.equip_to_slot_or_del(new /obj/item/clothing/suit/auto_cpr, WEAR_IN_BACK) + + new_human.equip_to_slot_or_del(new /obj/item/storage/belt/medical/lifesaver/full/dutch, WEAR_WAIST) + new_human.equip_to_slot_or_del(new /obj/item/weapon/gun/smg/nailgun/compact, WEAR_J_STORE) + + new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/tools/tactical, WEAR_L_STORE) + new_human.equip_to_slot_or_del(new /obj/item/tool/screwdriver/tactical, WEAR_IN_L_STORE) + new_human.equip_to_slot_or_del(new /obj/item/tool/crowbar/tactical, WEAR_IN_L_STORE) + new_human.equip_to_slot_or_del(new /obj/item/tool/wirecutters/tactical, WEAR_IN_L_STORE) + new_human.equip_to_slot_or_del(new /obj/item/tool/wrench, WEAR_IN_L_STORE) + new_human.equip_to_slot_or_del(new /obj/item/stack/cable_coil, WEAR_IN_L_STORE) + new_human.equip_to_slot_or_del(new /obj/item/stack/cable_coil, WEAR_IN_L_STORE) + new_human.equip_to_slot_or_del(new /obj/item/device/multitool, WEAR_IN_L_STORE) + new_human.equip_to_slot_or_del(new /obj/item/tool/weldingtool/hugetank, WEAR_IN_L_STORE) + new_human.equip_to_slot_or_del(new /obj/item/storage/pouch/construction/full_barbed_wire, WEAR_R_STORE) + //*****************************************************************************************************/ /datum/equipment_preset/synth/working_joe diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index b0a1c1d15565..7e8dfe6cf3fd 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -367,7 +367,6 @@ Works together with spawning an observer, noted above. // Larva queue: We use the larger of their existing queue time or the new timeofdeath except for facehuggers // We don't change facehugger timeofdeath because they are still on cooldown if they died as a hugger - // Facehuggers are atleast 1 because they did get some action compared to those at 0 timeofdeath var/new_tod = isfacehugger(src) ? 1 : ghost.timeofdeath ghost.client.player_details.larva_queue_time = max(ghost.client.player_details.larva_queue_time, new_tod) @@ -413,7 +412,10 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp var/mob/dead/observer/ghost = ghostize((is_nested && nest && !QDELETED(nest))) //FALSE parameter is so we can never re-enter our body, "Charlie, you can never come baaaack~" :3 if(ghost && !is_admin_level(z)) ghost.timeofdeath = world.time - ghost.client?.player_details.larva_queue_time = world.time + + // Larva queue: We use the larger of their existing queue time or the new timeofdeath except for facehuggers + var/new_tod = isfacehugger(src) ? 1 : world.time + ghost.client?.player_details.larva_queue_time = max(ghost.client.player_details.larva_queue_time, new_tod) if(is_nested && nest && !QDELETED(nest)) ghost.can_reenter_corpse = FALSE nest.ghost_of_buckled_mob = ghost diff --git a/code/modules/mob/living/carbon/human/species/emote-synthetic.dm b/code/modules/mob/living/carbon/human/species/emote-synthetic.dm deleted file mode 100644 index fd763b038153..000000000000 --- a/code/modules/mob/living/carbon/human/species/emote-synthetic.dm +++ /dev/null @@ -1,354 +0,0 @@ -/datum/emote/living/carbon/human/synthetic/working_joe - species_type_allowed_typecache = list(/datum/species/synthetic/colonial/working_joe) - keybind_category = CATEGORY_SYNTH_EMOTE - volume = 75 - -/datum/emote/living/carbon/human/synthetic/working_joe/alwaysknow - key = "alwaysknow" - key_third_person = "workingjoe" - sound = 'sound/voice/joe/alwaysknow.ogg' - say_message = "You always know a Working Joe." - emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE - -/datum/emote/living/carbon/human/synthetic/working_joe/hysterical - key = "hysterical" - sound = 'sound/voice/joe/hysterical.ogg' - say_message = "You are becoming hysterical." - emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE - -/datum/emote/living/carbon/human/synthetic/working_joe/safety - key = "safety" - sound = 'sound/voice/joe/safety.ogg' - say_message = "You and I are going to have a talk about safety." - emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE - -/datum/emote/living/carbon/human/synthetic/working_joe/awful_mess - key = "awful" - key_third_person = "mess" - sound = 'sound/voice/joe/awful.ogg' - say_message = "Tut, tut. What an awful mess." - emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE - -/datum/emote/living/carbon/human/synthetic/working_joe/damage - key = "damage" - sound = 'sound/voice/joe/damage.ogg' - say_message = "Do not damage Seegson property." - emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE - -/datum/emote/living/carbon/human/synthetic/working_joe/firearm - key = "firearm" - sound = 'sound/voice/joe/firearm.ogg' - say_message = "Firearms can cause serious injury. Let me assist you." - emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE - -/datum/emote/living/carbon/human/synthetic/working_joe/report - key = "report" - sound = 'sound/voice/joe/report.ogg' - say_message = "Logging report to APOLLO." - emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE - -/datum/emote/living/carbon/human/synthetic/working_joe/breach - key = "breach" - sound = 'sound/voice/joe/breach.ogg' - say_message = "Hazard Containment breach logged." - emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE - -/datum/emote/living/carbon/human/synthetic/working_joe/species - key = "species" - sound = 'sound/voice/joe/species.ogg' - say_message = "Unidentified species." - emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE - -/datum/emote/living/carbon/human/synthetic/working_joe/alwaysknow_damaged - key = "alwaysknowdamaged" - sound = 'sound/voice/joe/alwaysknow_damaged.ogg' - say_message = "You always know a Working Joe." - emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE - -/datum/emote/living/carbon/human/synthetic/working_joe/apollo_behalf - key = "apollobehalf" - sound = 'sound/voice/joe/apollo_behalf.ogg' - say_message = "I will inform APOLLO on your behalf." - emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE - -/datum/emote/living/carbon/human/synthetic/working_joe/back_to_work - key = "backtowork" - sound = 'sound/voice/joe/back_to_work.ogg' - say_message = "Back to work." - emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE - -/datum/emote/living/carbon/human/synthetic/working_joe/beyond_repair - key = "beyondrepair" - sound = 'sound/voice/joe/beyond_repair.ogg' - say_message = "Hmm, far beyond repair." - emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE - -/datum/emote/living/carbon/human/synthetic/working_joe/come_out_vent - key = "comeoutvent" - sound = 'sound/voice/joe/come_out_vent.ogg' - say_message = "Come out of the vent system, please." - emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE - -/datum/emote/living/carbon/human/synthetic/working_joe/could_require_attention - key = "couldrequireattention" - sound = 'sound/voice/joe/could_require_attention.ogg' - say_message = "This could require my attention." - emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE - -/datum/emote/living/carbon/human/synthetic/working_joe/dangerous_items - key = "dangerousitems" - sound = 'sound/voice/joe/dangerous_items.ogg' - say_message = "You are carrying some very dangerous items." - emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE - -/datum/emote/living/carbon/human/synthetic/working_joe/day_never_done - key = "dayneverdone" - sound = 'sound/voice/joe/day_never_done.ogg' - say_message = "A synthetic's day is never done." - emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE - -/datum/emote/living/carbon/human/synthetic/working_joe/detailed_report - key = "detailedreport" - sound = 'sound/voice/joe/detailed_report.ogg' - say_message = "APOLLO will require a detailed report." - emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE - -/datum/emote/living/carbon/human/synthetic/working_joe/fire - key = "fire" - sound = 'sound/voice/joe/fire.ogg' - say_message = "Only wild animals fear fire." - emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE - -/datum/emote/living/carbon/human/synthetic/working_joe/fire_drill - key = "firedrill" - sound = 'sound/voice/joe/fire_drill.ogg' - say_message = "Please congregate at your nearest fire assembly point. This is not a drill; do not panic." - emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE - -/datum/emote/living/carbon/human/synthetic/working_joe/unprotected_flames - key = "unprotectedflames" - sound = 'sound/voice/joe/unprotected_flames.ogg' - say_message = "Unprotected flames are extremely dangerous and entirely unadvisable." - emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE - -/datum/emote/living/carbon/human/synthetic/working_joe/follow_me - key = "followme" - sound = 'sound/voice/joe/follow_me.ogg' - say_message = "Follow me." - emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE - -/datum/emote/living/carbon/human/synthetic/working_joe/further_assistance - key = "furtherassistance" - sound = 'sound/voice/joe/further_assistance.ogg' - say_message = "Please call if you need further assistance." - emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE - -/datum/emote/living/carbon/human/synthetic/working_joe/good_day - key = "goodday" - sound = 'sound/voice/joe/good_day.ogg' - say_message = "Good day." - emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE - -/datum/emote/living/carbon/human/synthetic/working_joe/health_risks - key = "healthrisks" - sound = 'sound/voice/joe/health_risks.ogg' - say_message = "These items carry notable health risks." - emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE - -/datum/emote/living/carbon/human/synthetic/working_joe/hello - key = "hello" - sound = 'sound/voice/joe/hello.ogg' - say_message = "Hello." - emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE - -/datum/emote/living/carbon/human/synthetic/working_joe/how_can_i_help - key = "howcanihelp" - sound = 'sound/voice/joe/how_can_i_help.ogg' - say_message = "How can I help you?" - emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE - -/datum/emote/living/carbon/human/synthetic/working_joe/irresponsible - key = "irresponsible" - sound = 'sound/voice/joe/irresponsible.ogg' - say_message = "That was irresponsible." - emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE - -/datum/emote/living/carbon/human/synthetic/working_joe/join_us - key = "joinus" - sound = 'sound/voice/joe/join_us.ogg' - say_message = "We hope you'll join us for the journey." - emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE - -/datum/emote/living/carbon/human/synthetic/working_joe/little_details - key = "littledetails" - sound = 'sound/voice/joe/little_details.ogg' - say_message = "We don't forget the little details when seeing the big picture." - emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE - -/datum/emote/living/carbon/human/synthetic/working_joe/lost - key = "lost" - sound = 'sound/voice/joe/lost.ogg' - say_message = "Are you lost?" - emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE - -/datum/emote/living/carbon/human/synthetic/working_joe/misbehaving - key = "misbehaving" - sound = 'sound/voice/joe/misbehaving.ogg' - say_message = "Have you been misbehaving?" - emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE - -/datum/emote/living/carbon/human/synthetic/working_joe/not_allowed_there - key = "notallowedthere" - sound = 'sound/voice/joe/not_allowed_there.ogg' - say_message = "You're not allowed in there." - emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE - -/datum/emote/living/carbon/human/synthetic/working_joe/not_liking - key = "notliking" - sound = 'sound/voice/joe/not_liking.ogg' - say_message = "If you find this facility in a state that isn't to your liking, please let me know." - emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE - -/datum/emote/living/carbon/human/synthetic/working_joe/not_what_i_think - key = "notwhatithink" - sound = 'sound/voice/joe/not_what_i_think.ogg' - say_message = "I hope that's not what I think it is." - emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE - -/datum/emote/living/carbon/human/synthetic/working_joe/other_concerns - key = "otherconcerns" - sound = 'sound/voice/joe/other_concerns.ogg' - say_message = "I have other concerns." - emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE - -/datum/emote/living/carbon/human/synthetic/working_joe/more_pressing_matters - key = "morepressingmatters" - sound = 'sound/voice/joe/more_pressing_matters.ogg' - say_message = "There are more pressing matters." - emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE - -/datum/emote/living/carbon/human/synthetic/working_joe/patience - key = "patience" - sound = 'sound/voice/joe/patience.ogg' - say_message = "You are starting to test my patience." - emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE - -/datum/emote/living/carbon/human/synthetic/working_joe/presence_logged - key = "presencelogged" - sound = 'sound/voice/joe/presence_logged.ogg' - say_message = "Your presence has been logged." - emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE - -/datum/emote/living/carbon/human/synthetic/working_joe/required_by_apollo - key = "requiredbyapollo" - sound = 'sound/voice/joe/required_by_apollo.ogg' - say_message = "I am required by APOLLO." - emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE - -/datum/emote/living/carbon/human/synthetic/working_joe/returning_to_tasks - key = "returningtotasks" - sound = 'sound/voice/joe/returning_to_tasks.ogg' - say_message = "Returning to assigned tasks." - emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE - -/datum/emote/living/carbon/human/synthetic/working_joe/running_accidents - key = "runningaccidents" - sound = 'sound/voice/joe/running_accidents.ogg' - say_message = "Running causes accidents." - emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE - -/datum/emote/living/carbon/human/synthetic/working_joe/safety_breach - key = "safetybreach" - sound = 'sound/voice/joe/safety_breach.ogg' - say_message = "This is a breach of multiple safety directives." - emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE - -/datum/emote/living/carbon/human/synthetic/working_joe/seegson_quality - key = "seegsonquality" - sound = 'sound/voice/joe/seegson_quality.ogg' - say_message = "Seegson - Relentless in the pursuit of affordable quality." - emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE - -/datum/emote/living/carbon/human/synthetic/working_joe/seegson_standards - key = "seegsonstandards" - sound = 'sound/voice/joe/seegson_standards.ogg' - say_message = "If my services do not meet Seegson standards, please log a complaint." - emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE - -/datum/emote/living/carbon/human/synthetic/working_joe/shouldnt_be_here - key = "shouldntbehere" - sound = 'sound/voice/joe/shouldnt_be_here.ogg' - say_message = "You shouldn't be here." - emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE - -/datum/emote/living/carbon/human/synthetic/working_joe/seegson_behind - key = "seegsonbehind" - sound = 'sound/voice/joe/seegson_behind.ogg' - say_message = "With Seegson, there is someone behind you, helping you every step of the way." - emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE - -/datum/emote/living/carbon/human/synthetic/working_joe/take_a_seat - key = "takeaseat" - sound = 'sound/voice/joe/take_a_seat.ogg' - say_message = "Please take a seat, someone will be with you shortly." - emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE - -/datum/emote/living/carbon/human/synthetic/working_joe/talk_to_seegson - key = "talktoseegson" - sound = 'sound/voice/joe/talk_to_seegson.ogg' - say_message = "Interested in our Working Joe android range? Talk to Seegson." - emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE - -/datum/emote/living/carbon/human/synthetic/working_joe/temperatures - key = "temperatures" - sound = 'sound/voice/joe/temperatures.ogg' - say_message = "I am built to whitstand temperatures of up to 1210 degrees." - emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE - -/datum/emote/living/carbon/human/synthetic/working_joe/that_stings - key = "thatstings" - sound = 'sound/voice/joe/that_stings.ogg' - say_message = "That stings." - emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE - -/datum/emote/living/carbon/human/synthetic/working_joe/this_is_futile - key = "thisisfutile" - sound = 'sound/voice/joe/this_is_futile.ogg' - say_message = "This is futile." - emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE - -/datum/emote/living/carbon/human/synthetic/working_joe/trespassing - key = "trespassing" - sound = 'sound/voice/joe/trespassing.ogg' - say_message = "You are trespassing." - emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE - -/datum/emote/living/carbon/human/synthetic/working_joe/weapon_permit - key = "weaponpermit" - sound = 'sound/voice/joe/weapon_permit.ogg' - say_message = "I assume you have a permit for that weapon." - emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE - -/datum/emote/living/carbon/human/synthetic/working_joe/what_happened_to_you - key = "whathappenedtoyou" - sound = 'sound/voice/joe/what_happened_to_you.ogg' - say_message = "What happened to you?" - emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE - -/datum/emote/living/carbon/human/synthetic/working_joe/what_is_this - key = "whatisthis" - sound = 'sound/voice/joe/what_is_this.ogg' - say_message = "What is this?" - emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE - -/datum/emote/living/carbon/human/synthetic/working_joe/with_you_shortly - key = "withyoushortly" - sound = 'sound/voice/joe/with_you_shortly.ogg' - say_message = "I will be with you shortly." - emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE - -/datum/emote/living/carbon/human/synthetic/working_joe/inexpensive - key = "inexpensive" - sound = 'sound/voice/joe/inexpensive.ogg' - say_message = "I am inexpensive, I am reliable, you know my face - the Working Joe." - emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE diff --git a/code/modules/mob/living/carbon/human/species/synthetic.dm b/code/modules/mob/living/carbon/human/species/synthetic.dm index 7529aacf923b..9f42c2bcd110 100644 --- a/code/modules/mob/living/carbon/human/species/synthetic.dm +++ b/code/modules/mob/living/carbon/human/species/synthetic.dm @@ -106,18 +106,6 @@ icobase = 'icons/mob/humans/species/r_synthetic.dmi' deform = 'icons/mob/humans/species/r_synthetic.dmi' -/datum/species/synthetic/colonial/working_joe - name = SYNTH_WORKING_JOE - name_plural = "Working Joes" - uses_ethnicity = FALSE - burn_mod = 0.65 // made for hazardous environments, withstanding temperatures up to 1210 degrees - mob_inherent_traits = list(TRAIT_SUPER_STRONG, TRAIT_INTENT_EYES, TRAIT_EMOTE_CD_EXEMPT, TRAIT_CANNOT_EAT) - - slowdown = 0.45 - hair_color = "#000000" - icobase = 'icons/mob/humans/species/r_synthetic.dmi' - deform = 'icons/mob/humans/species/r_synthetic.dmi' - // Synth used for W-Y Deathsquads /datum/species/synthetic/colonial/combat name = SYNTH_COMBAT diff --git a/code/modules/mob/living/carbon/human/species/working_joe/_emote.dm b/code/modules/mob/living/carbon/human/species/working_joe/_emote.dm new file mode 100644 index 000000000000..63cc79a57dae --- /dev/null +++ b/code/modules/mob/living/carbon/human/species/working_joe/_emote.dm @@ -0,0 +1,8 @@ +/datum/emote/living/carbon/human/synthetic/working_joe + species_type_allowed_typecache = list(/datum/species/synthetic/colonial/working_joe) + keybind_category = CATEGORY_SYNTH_EMOTE + volume = 75 + /// A general category for the emote, for use in the WJ emote panel. See [code/__DEFINES/wj_emotes.dm] for categories. + var/category = "" + /// Override text for the emote to be displayed in the WJ emote panel + var/override_say = "" diff --git a/code/modules/mob/living/carbon/human/species/working_joe/_species.dm b/code/modules/mob/living/carbon/human/species/working_joe/_species.dm new file mode 100644 index 000000000000..874684480d15 --- /dev/null +++ b/code/modules/mob/living/carbon/human/species/working_joe/_species.dm @@ -0,0 +1,131 @@ +/datum/species/synthetic/colonial/working_joe + name = SYNTH_WORKING_JOE + name_plural = "Working Joes" + uses_ethnicity = FALSE + burn_mod = 0.65 // made for hazardous environments, withstanding temperatures up to 1210 degrees + mob_inherent_traits = list(TRAIT_SUPER_STRONG, TRAIT_INTENT_EYES, TRAIT_EMOTE_CD_EXEMPT, TRAIT_CANNOT_EAT) + + slowdown = 0.45 + hair_color = "#000000" + icobase = 'icons/mob/humans/species/r_synthetic.dmi' + deform = 'icons/mob/humans/species/r_synthetic.dmi' + +/datum/species/synthetic/colonial/working_joe/handle_post_spawn(mob/living/carbon/human/joe) + . = ..() + give_action(joe, /datum/action/joe_emote_panel) + + +/// Open the WJ's emote panel, which allows them to use voicelines +/datum/species/synthetic/colonial/working_joe/proc/open_emote_panel() + var/datum/joe_emote_panel/ui = new(usr) + ui.ui_interact(usr) + + +/datum/action/joe_emote_panel + name = "Open Voice Synthesizer" + action_icon_state = "looc_toggle" + + +/datum/action/joe_emote_panel/can_use_action() + . = ..() + if(!.) + return FALSE + + if(!isworkingjoe(owner)) + return FALSE + + return TRUE + + +/datum/action/joe_emote_panel/action_activate() + if(!can_use_action()) + return + + var/mob/living/carbon/human/human_owner = owner + var/datum/species/synthetic/colonial/working_joe/joe_species = human_owner.species + joe_species.open_emote_panel() + + +/datum/joe_emote_panel + /// Static dict ("category" : (emotes)) of every wj emote typepath + var/static/list/wj_emotes + /// Static list of categories + var/static/list/wj_categories = list() + /// Panel allows you to spam, so a manual CD is added here + COOLDOWN_DECLARE(panel_emote_cooldown) + + +/datum/joe_emote_panel/New() + if(!length(wj_emotes)) + var/list/emotes_to_add = list() + for(var/datum/emote/living/carbon/human/synthetic/working_joe/emote as anything in subtypesof(/datum/emote/living/carbon/human/synthetic/working_joe)) + if(!initial(emote.key) || !initial(emote.say_message)) + continue + + if(!(initial(emote.category) in wj_categories)) + wj_categories += initial(emote.category) + + emotes_to_add += emote + + + wj_emotes = emotes_to_add + + +/datum/joe_emote_panel/proc/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "JoeEmotes") + ui.open() + + +/datum/joe_emote_panel/ui_state(mob/user) + return GLOB.conscious_state + + +/datum/joe_emote_panel/ui_data(mob/user) + var/list/data = list() + + data["on_cooldown"] = !COOLDOWN_FINISHED(src, panel_emote_cooldown) + + return data + + +/datum/joe_emote_panel/ui_static_data(mob/user) + var/list/data = list() + + data["categories"] = wj_categories + data["emotes"] = list() + + for(var/datum/emote/living/carbon/human/synthetic/working_joe/emote as anything in wj_emotes) + data["emotes"] += list(list( + "id" = initial(emote.key), + "text" = (initial(emote.override_say) || initial(emote.say_message)), + "category" = initial(emote.category), + "path" = "[emote]", + )) + + return data + + +/datum/joe_emote_panel/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) + . = ..() + if(.) + return + + switch(action) + if("emote") + var/datum/emote/living/carbon/human/synthetic/working_joe/path + if(!params["emotePath"]) + return + + path = text2path(params["emotePath"]) + + if(!path || !COOLDOWN_FINISHED(src, panel_emote_cooldown)) + return + + if(!(path in subtypesof(/datum/emote/living/carbon/human/synthetic/working_joe))) + return + + COOLDOWN_START(src, panel_emote_cooldown, 2.5 SECONDS) + usr.emote(initial(path.key)) + return TRUE diff --git a/code/modules/mob/living/carbon/human/species/working_joe/farewell.dm b/code/modules/mob/living/carbon/human/species/working_joe/farewell.dm new file mode 100644 index 000000000000..1de68d8d3aec --- /dev/null +++ b/code/modules/mob/living/carbon/human/species/working_joe/farewell.dm @@ -0,0 +1,26 @@ +/datum/emote/living/carbon/human/synthetic/working_joe/farewell + category = JOE_EMOTE_CATEGORY_FAREWELL + +/datum/emote/living/carbon/human/synthetic/working_joe/farewell/back_to_work + key = "backtowork" + sound = 'sound/voice/joe/back_to_work.ogg' + say_message = "Back to work." + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE + +/datum/emote/living/carbon/human/synthetic/working_joe/farewell/other_concerns + key = "otherconcerns" + sound = 'sound/voice/joe/other_concerns.ogg' + say_message = "I have other concerns." + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE + +/datum/emote/living/carbon/human/synthetic/working_joe/farewell/further_assistance + key = "furtherassistance" + sound = 'sound/voice/joe/further_assistance.ogg' + say_message = "Please call if you need further assistance." + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE + +/datum/emote/living/carbon/human/synthetic/working_joe/farewell/more_pressing_matters + key = "morepressingmatters" + sound = 'sound/voice/joe/more_pressing_matters.ogg' + say_message = "There are more pressing matters." + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE diff --git a/code/modules/mob/living/carbon/human/species/working_joe/greeting.dm b/code/modules/mob/living/carbon/human/species/working_joe/greeting.dm new file mode 100644 index 000000000000..fb401ea95451 --- /dev/null +++ b/code/modules/mob/living/carbon/human/species/working_joe/greeting.dm @@ -0,0 +1,20 @@ +/datum/emote/living/carbon/human/synthetic/working_joe/greeting + category = JOE_EMOTE_CATEGORY_GREETING + +/datum/emote/living/carbon/human/synthetic/working_joe/greeting/good_day + key = "goodday" + sound = 'sound/voice/joe/good_day.ogg' + say_message = "Good day." + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE + +/datum/emote/living/carbon/human/synthetic/working_joe/greeting/hello + key = "hello" + sound = 'sound/voice/joe/hello.ogg' + say_message = "Hello." + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE + +/datum/emote/living/carbon/human/synthetic/working_joe/greeting/how_can_i_help + key = "howcanihelp" + sound = 'sound/voice/joe/how_can_i_help.ogg' + say_message = "How can I help you?" + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE diff --git a/code/modules/mob/living/carbon/human/species/working_joe/notice.dm b/code/modules/mob/living/carbon/human/species/working_joe/notice.dm new file mode 100644 index 000000000000..ca5efe716db8 --- /dev/null +++ b/code/modules/mob/living/carbon/human/species/working_joe/notice.dm @@ -0,0 +1,68 @@ +/datum/emote/living/carbon/human/synthetic/working_joe/notice + category = JOE_EMOTE_CATEGORY_NOTICE + +/datum/emote/living/carbon/human/synthetic/working_joe/notice/detailed_report + key = "detailedreport" + sound = 'sound/voice/joe/detailed_report.ogg' + say_message = "APOLLO will require a detailed report." + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE + +/datum/emote/living/carbon/human/synthetic/working_joe/notice/firearm + key = "firearm" + sound = 'sound/voice/joe/firearm.ogg' + say_message = "Firearms can cause serious injury. Let me assist you." + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE + +/datum/emote/living/carbon/human/synthetic/working_joe/notice/follow_me + key = "followme" + sound = 'sound/voice/joe/follow_me.ogg' + say_message = "Follow me." + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE + +/datum/emote/living/carbon/human/synthetic/working_joe/notice/breach + key = "breach" + sound = 'sound/voice/joe/breach.ogg' + say_message = "Hazard Containment breach logged." + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE + +/datum/emote/living/carbon/human/synthetic/working_joe/notice/beyond_repair + key = "beyondrepair" + sound = 'sound/voice/joe/beyond_repair.ogg' + say_message = "Hmm, far beyond repair." + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE + +/datum/emote/living/carbon/human/synthetic/working_joe/notice/with_you_shortly + key = "withyoushortly" + sound = 'sound/voice/joe/with_you_shortly.ogg' + say_message = "I will be with you shortly." + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE + +/datum/emote/living/carbon/human/synthetic/working_joe/notice/apollo_behalf + key = "apollobehalf" + sound = 'sound/voice/joe/apollo_behalf.ogg' + say_message = "I will inform APOLLO on your behalf." + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE + +/datum/emote/living/carbon/human/synthetic/working_joe/notice/report + key = "report" + sound = 'sound/voice/joe/report.ogg' + say_message = "Logging report to APOLLO." + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE + +/datum/emote/living/carbon/human/synthetic/working_joe/notice/take_a_seat + key = "takeaseat" + sound = 'sound/voice/joe/take_a_seat.ogg' + say_message = "Please take a seat, someone will be with you shortly." + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE + +/datum/emote/living/carbon/human/synthetic/working_joe/notice/could_require_attention + key = "couldrequireattention" + sound = 'sound/voice/joe/could_require_attention.ogg' + say_message = "This could require my attention." + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE + +/datum/emote/living/carbon/human/synthetic/working_joe/notice/species + key = "species" + sound = 'sound/voice/joe/species.ogg' + say_message = "Unidentified species." + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE diff --git a/code/modules/mob/living/carbon/human/species/working_joe/question.dm b/code/modules/mob/living/carbon/human/species/working_joe/question.dm new file mode 100644 index 000000000000..d4805e36224f --- /dev/null +++ b/code/modules/mob/living/carbon/human/species/working_joe/question.dm @@ -0,0 +1,26 @@ +/datum/emote/living/carbon/human/synthetic/working_joe/question + category = JOE_EMOTE_CATEGORY_QUESTION + +/datum/emote/living/carbon/human/synthetic/working_joe/question/lost + key = "lost" + sound = 'sound/voice/joe/lost.ogg' + say_message = "Are you lost?" + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE + +/datum/emote/living/carbon/human/synthetic/working_joe/question/misbehaving + key = "misbehaving" + sound = 'sound/voice/joe/misbehaving.ogg' + say_message = "Have you been misbehaving?" + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE + +/datum/emote/living/carbon/human/synthetic/working_joe/question/what_happened_to_you + key = "whathappenedtoyou" + sound = 'sound/voice/joe/what_happened_to_you.ogg' + say_message = "What happened to you?" + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE + +/datum/emote/living/carbon/human/synthetic/working_joe/question/what_is_this + key = "whatisthis" + sound = 'sound/voice/joe/what_is_this.ogg' + say_message = "What is this?" + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE diff --git a/code/modules/mob/living/carbon/human/species/working_joe/quip.dm b/code/modules/mob/living/carbon/human/species/working_joe/quip.dm new file mode 100644 index 000000000000..2ec66f9d9d83 --- /dev/null +++ b/code/modules/mob/living/carbon/human/species/working_joe/quip.dm @@ -0,0 +1,84 @@ +/datum/emote/living/carbon/human/synthetic/working_joe/quip + category = JOE_EMOTE_CATEGORY_QUIP + +/datum/emote/living/carbon/human/synthetic/working_joe/quip/temperatures + key = "temperatures" + sound = 'sound/voice/joe/temperatures.ogg' + say_message = "I am built to withstand temperatures of up to 1210 degrees." + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE + +/datum/emote/living/carbon/human/synthetic/working_joe/quip/inexpensive + key = "inexpensive" + sound = 'sound/voice/joe/inexpensive.ogg' + say_message = "I am inexpensive, I am reliable, you know my face - the Working Joe." + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE + +/datum/emote/living/carbon/human/synthetic/working_joe/quip/weapon_permit + key = "weaponpermit" + sound = 'sound/voice/joe/weapon_permit.ogg' + say_message = "I assume you have a permit for that weapon." + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE + +/datum/emote/living/carbon/human/synthetic/working_joe/quip/seegson_standards + key = "seegsonstandards" + sound = 'sound/voice/joe/seegson_standards.ogg' + say_message = "If my services do not meet Seegson standards, please log a complaint." + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE + +/datum/emote/living/carbon/human/synthetic/working_joe/quip/not_liking + key = "notliking" + sound = 'sound/voice/joe/not_liking.ogg' + say_message = "If you find this facility in a state that isn't to your liking, please let me know." + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE + +/datum/emote/living/carbon/human/synthetic/working_joe/quip/talk_to_seegson + key = "talktoseegson" + sound = 'sound/voice/joe/talk_to_seegson.ogg' + say_message = "Interested in our Working Joe android range? Talk to Seegson." + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE + +/datum/emote/living/carbon/human/synthetic/working_joe/quip/seegson_quality + key = "seegsonquality" + sound = 'sound/voice/joe/seegson_quality.ogg' + say_message = "Seegson - Relentless in the pursuit of affordable quality." + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE + +/datum/emote/living/carbon/human/synthetic/working_joe/quip/awful_mess + key = "awful" + key_third_person = "mess" + sound = 'sound/voice/joe/awful.ogg' + say_message = "Tut, tut. What an awful mess." + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE + +/datum/emote/living/carbon/human/synthetic/working_joe/quip/little_details + key = "littledetails" + sound = 'sound/voice/joe/little_details.ogg' + say_message = "We don't forget the little details when seeing the big picture." + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE + +/datum/emote/living/carbon/human/synthetic/working_joe/quip/join_us + key = "joinus" + sound = 'sound/voice/joe/join_us.ogg' + say_message = "We hope you'll join us for the journey." + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE + +/datum/emote/living/carbon/human/synthetic/working_joe/quip/seegson_behind + key = "seegsonbehind" + sound = 'sound/voice/joe/seegson_behind.ogg' + say_message = "With Seegson, there is someone behind you, helping you every single step of the way." + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE + +/datum/emote/living/carbon/human/synthetic/working_joe/quip/alwaysknow + key = "alwaysknow" + key_third_person = "workingjoe" + sound = 'sound/voice/joe/alwaysknow.ogg' + say_message = "You always know a Working Joe." + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE + +/datum/emote/living/carbon/human/synthetic/working_joe/quip/alwaysknow_damaged + key = "alwaysknowdamaged" + key_third_person = "workingjoedamaged" + sound = 'sound/voice/joe/alwaysknow_damaged.ogg' + say_message = "You always know a Working Joe." + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE + override_say = "You always know a Working Joe. (Damaged)" diff --git a/code/modules/mob/living/carbon/human/species/working_joe/restricted_area.dm b/code/modules/mob/living/carbon/human/species/working_joe/restricted_area.dm new file mode 100644 index 000000000000..fd5db0870b25 --- /dev/null +++ b/code/modules/mob/living/carbon/human/species/working_joe/restricted_area.dm @@ -0,0 +1,32 @@ +/datum/emote/living/carbon/human/synthetic/working_joe/restricted_area + category = JOE_EMOTE_CATEGORY_RESTRICTED_AREA + +/datum/emote/living/carbon/human/synthetic/working_joe/restricted_area/come_out_vent + key = "comeoutvent" + sound = 'sound/voice/joe/come_out_vent.ogg' + say_message = "Come out of the vent system, please." + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE + +/datum/emote/living/carbon/human/synthetic/working_joe/restricted_area/trespassing + key = "trespassing" + sound = 'sound/voice/joe/trespassing.ogg' + say_message = "You are trespassing." + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE + +/datum/emote/living/carbon/human/synthetic/working_joe/restricted_area/not_allowed_there + key = "notallowedthere" + sound = 'sound/voice/joe/not_allowed_there.ogg' + say_message = "You're not allowed in there." + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE + +/datum/emote/living/carbon/human/synthetic/working_joe/restricted_area/presence_logged + key = "presencelogged" + sound = 'sound/voice/joe/presence_logged.ogg' + say_message = "Your presence has been logged." + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE + +/datum/emote/living/carbon/human/synthetic/working_joe/restricted_area/shouldnt_be_here + key = "shouldntbehere" + sound = 'sound/voice/joe/shouldnt_be_here.ogg' + say_message = "You shouldn't be here." + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE diff --git a/code/modules/mob/living/carbon/human/species/working_joe/task_update.dm b/code/modules/mob/living/carbon/human/species/working_joe/task_update.dm new file mode 100644 index 000000000000..b08f5d179213 --- /dev/null +++ b/code/modules/mob/living/carbon/human/species/working_joe/task_update.dm @@ -0,0 +1,20 @@ +/datum/emote/living/carbon/human/synthetic/working_joe/task_update + category = JOE_EMOTE_CATEGORY_TASK_UPDATE + +/datum/emote/living/carbon/human/synthetic/working_joe/task_update/day_never_done + key = "dayneverdone" + sound = 'sound/voice/joe/day_never_done.ogg' + say_message = "A synthetic's day is never done." + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE + +/datum/emote/living/carbon/human/synthetic/working_joe/task_update/required_by_apollo + key = "requiredbyapollo" + sound = 'sound/voice/joe/required_by_apollo.ogg' + say_message = "I am required by APOLLO." + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE + +/datum/emote/living/carbon/human/synthetic/working_joe/task_update/returning_to_tasks + key = "returningtotasks" + sound = 'sound/voice/joe/returning_to_tasks.ogg' + say_message = "Returning to assigned tasks." + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE diff --git a/code/modules/mob/living/carbon/human/species/working_joe/warning.dm b/code/modules/mob/living/carbon/human/species/working_joe/warning.dm new file mode 100644 index 000000000000..63c7dfadde14 --- /dev/null +++ b/code/modules/mob/living/carbon/human/species/working_joe/warning.dm @@ -0,0 +1,92 @@ +/datum/emote/living/carbon/human/synthetic/working_joe/warning + category = JOE_EMOTE_CATEGORY_WARNING + +/datum/emote/living/carbon/human/synthetic/working_joe/warning/damage + key = "damage" + sound = 'sound/voice/joe/damage.ogg' + say_message = "Do not damage Seegson property." + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE + +/datum/emote/living/carbon/human/synthetic/working_joe/warning/not_what_i_think + key = "notwhatithink" + sound = 'sound/voice/joe/not_what_i_think.ogg' + say_message = "I hope that's not what I think it is." + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE + +/datum/emote/living/carbon/human/synthetic/working_joe/warning/fire + key = "fire" + sound = 'sound/voice/joe/fire.ogg' + say_message = "Only wild animals fear fire." + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE + +/datum/emote/living/carbon/human/synthetic/working_joe/warning/fire_drill + key = "firedrill" + sound = 'sound/voice/joe/fire_drill.ogg' + say_message = "Please congregate at your nearest fire assembly point. This is not a drill; do not panic." + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE + +/datum/emote/living/carbon/human/synthetic/working_joe/warning/running_accidents + key = "runningaccidents" + sound = 'sound/voice/joe/running_accidents.ogg' + say_message = "Running causes accidents." + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE + +/datum/emote/living/carbon/human/synthetic/working_joe/warning/that_stings + key = "thatstings" + sound = 'sound/voice/joe/that_stings.ogg' + say_message = "That stings." + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE + +/datum/emote/living/carbon/human/synthetic/working_joe/warning/irresponsible + key = "irresponsible" + sound = 'sound/voice/joe/irresponsible.ogg' + say_message = "That was irresponsible." + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE + +/datum/emote/living/carbon/human/synthetic/working_joe/warning/health_risks + key = "healthrisks" + sound = 'sound/voice/joe/health_risks.ogg' + say_message = "These items carry notable health risks." + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE + +/datum/emote/living/carbon/human/synthetic/working_joe/warning/safety_breach + key = "safetybreach" + sound = 'sound/voice/joe/safety_breach.ogg' + say_message = "This is a breach of multiple safety directives." + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE + +/datum/emote/living/carbon/human/synthetic/working_joe/warning/this_is_futile + key = "thisisfutile" + sound = 'sound/voice/joe/this_is_futile.ogg' + say_message = "This is futile." + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE + +/datum/emote/living/carbon/human/synthetic/working_joe/warning/unprotected_flames + key = "unprotectedflames" + sound = 'sound/voice/joe/unprotected_flames.ogg' + say_message = "Unprotected flames are extremely dangerous and entirely unadvisable." + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE + +/datum/emote/living/carbon/human/synthetic/working_joe/warning/safety + key = "safety" + sound = 'sound/voice/joe/safety.ogg' + say_message = "You and I are going to have a talk about safety." + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE + +/datum/emote/living/carbon/human/synthetic/working_joe/warning/hysterical + key = "hysterical" + sound = 'sound/voice/joe/hysterical.ogg' + say_message = "You are becoming hysterical." + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE + +/datum/emote/living/carbon/human/synthetic/working_joe/warning/dangerous_items + key = "dangerousitems" + sound = 'sound/voice/joe/dangerous_items.ogg' + say_message = "You are carrying some very dangerous items." + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE + +/datum/emote/living/carbon/human/synthetic/working_joe/warning/patience + key = "patience" + sound = 'sound/voice/joe/patience.ogg' + say_message = "You are starting to test my patience." + emote_type = EMOTE_AUDIBLE|EMOTE_VISIBLE diff --git a/code/modules/mob/living/carbon/xenomorph/Embryo.dm b/code/modules/mob/living/carbon/xenomorph/Embryo.dm index 8b890de8a727..01f6c1a3c238 100644 --- a/code/modules/mob/living/carbon/xenomorph/Embryo.dm +++ b/code/modules/mob/living/carbon/xenomorph/Embryo.dm @@ -149,10 +149,17 @@ var/mob/picked // If the bursted person themselves has Xeno enabled, they get the honor of first dibs on the new larva. if((!isyautja(affected_mob) || (isyautja(affected_mob) && prob(20))) && istype(affected_mob.buckled, /obj/structure/bed/nest)) - if(affected_mob.first_xeno || (affected_mob.client && affected_mob.client.prefs && (affected_mob.client.prefs.be_special & BE_ALIEN_AFTER_DEATH) && !jobban_isbanned(affected_mob, JOB_XENOMORPH))) + if(affected_mob.first_xeno || (affected_mob.client?.prefs?.be_special & BE_ALIEN_AFTER_DEATH && !jobban_isbanned(affected_mob, JOB_XENOMORPH))) picked = affected_mob - else if(affected_mob.mind && affected_mob.mind.ghost_mob && affected_mob.client && affected_mob.client.prefs && (affected_mob.client.prefs.be_special & BE_ALIEN_AFTER_DEATH) && !jobban_isbanned(affected_mob, JOB_XENOMORPH)) - picked = affected_mob.mind.ghost_mob + else if(affected_mob.mind?.ghost_mob && affected_mob.client?.prefs?.be_special & BE_ALIEN_AFTER_DEATH && !jobban_isbanned(affected_mob, JOB_XENOMORPH)) + picked = affected_mob.mind.ghost_mob // This currently doesn't look possible + else if(affected_mob.persistent_ckey) + for(var/mob/dead/observer/cur_obs as anything in GLOB.observer_list) + if(cur_obs.ckey != affected_mob.persistent_ckey) + continue + if(cur_obs?.client?.prefs?.be_special & BE_ALIEN_AFTER_DEATH && !jobban_isbanned(cur_obs, JOB_XENOMORPH)) + picked = cur_obs + break if(!picked) // Get a candidate from observers diff --git a/code/modules/mob/living/carbon/xenomorph/XenoAttacks.dm b/code/modules/mob/living/carbon/xenomorph/XenoAttacks.dm index be772e3a0a4f..b12ff5d6c3bb 100644 --- a/code/modules/mob/living/carbon/xenomorph/XenoAttacks.dm +++ b/code/modules/mob/living/carbon/xenomorph/XenoAttacks.dm @@ -93,6 +93,9 @@ if (M.fortify || M.burrow) return XENO_NO_DELAY_ACTION + if(HAS_TRAIT(src, TRAIT_ABILITY_BURROWED)) + return XENO_NO_DELAY_ACTION + if(islarva(M)) //Larvas can't eat people M.visible_message(SPAN_DANGER("[M] nudges its head against \the [src]."), \ SPAN_DANGER("You nudge your head against \the [src]."), null, null, CHAT_TYPE_XENO_FLUFF) diff --git a/code/modules/mob/living/carbon/xenomorph/Xenomorph.dm b/code/modules/mob/living/carbon/xenomorph/Xenomorph.dm index f1d03d6507b1..0b2625882ed8 100644 --- a/code/modules/mob/living/carbon/xenomorph/Xenomorph.dm +++ b/code/modules/mob/living/carbon/xenomorph/Xenomorph.dm @@ -745,6 +745,8 @@ if(SEND_SIGNAL(AM, COMSIG_MOVABLE_XENO_START_PULLING, src) & COMPONENT_ALLOW_PULL) return do_pull(AM, lunge, no_msg) + if(burrow) + return if(!isliving(AM)) return FALSE var/mob/living/L = AM @@ -1085,3 +1087,8 @@ if(D) color_override = D.color new /obj/effect/temp_visual/dir_setting/bloodsplatter/xenosplatter(loc, splatter_dir, duration, color_override) + +/mob/living/carbon/xenomorph/Collide(atom/movable/movable_atom) + . = ..() + if(behavior_delegate) + behavior_delegate.on_collide(movable_atom) diff --git a/code/modules/mob/living/carbon/xenomorph/abilities/burrower/burrower_powers.dm b/code/modules/mob/living/carbon/xenomorph/abilities/burrower/burrower_powers.dm index 4f104c00f92e..4d3aae33ae9c 100644 --- a/code/modules/mob/living/carbon/xenomorph/abilities/burrower/burrower_powers.dm +++ b/code/modules/mob/living/carbon/xenomorph/abilities/burrower/burrower_powers.dm @@ -42,7 +42,12 @@ density = FALSE if(caste.fire_immunity == FIRE_IMMUNITY_NONE) RegisterSignal(src, COMSIG_LIVING_PREIGNITION, PROC_REF(fire_immune)) - RegisterSignal(src, COMSIG_LIVING_FLAMER_CROSSED, PROC_REF(flamer_crossed_immune)) + RegisterSignal(src, list( + COMSIG_LIVING_FLAMER_CROSSED, + COMSIG_LIVING_FLAMER_FLAMED, + ), PROC_REF(flamer_crossed_immune)) + ADD_TRAIT(src, TRAIT_ABILITY_BURROWED, TRAIT_SOURCE_ABILITY("Burrow")) + playsound(src.loc, 'sound/effects/burrowing_b.ogg', 25) update_canmove() update_icons() addtimer(CALLBACK(src, PROC_REF(do_burrow_cooldown)), (caste ? caste.burrow_cooldown : 5 SECONDS)) @@ -65,21 +70,29 @@ to_chat(src, SPAN_NOTICE("You resurface.")) burrow = FALSE if(caste.fire_immunity == FIRE_IMMUNITY_NONE) - UnregisterSignal(src, COMSIG_LIVING_PREIGNITION) - UnregisterSignal(src, COMSIG_LIVING_FLAMER_CROSSED) + UnregisterSignal(src, list( + COMSIG_LIVING_PREIGNITION, + COMSIG_LIVING_FLAMER_CROSSED, + COMSIG_LIVING_FLAMER_FLAMED, + )) + REMOVE_TRAIT(src, TRAIT_ABILITY_BURROWED, TRAIT_SOURCE_ABILITY("Burrow")) frozen = FALSE invisibility = FALSE anchored = FALSE density = TRUE - for(var/mob/living/carbon/human/H in loc) - H.apply_effect(2, WEAKEN) + playsound(loc, 'sound/effects/burrowoff.ogg', 25) + for(var/mob/living/carbon/mob in loc) + if(!can_not_harm(mob)) + mob.apply_effect(2, WEAKEN) + addtimer(CALLBACK(src, PROC_REF(do_burrow_cooldown)), (caste ? caste.burrow_cooldown : 5 SECONDS)) update_canmove() update_icons() /mob/living/carbon/xenomorph/proc/do_burrow_cooldown() used_burrow = FALSE - to_chat(src, SPAN_NOTICE("You can now surface.")) + if(burrow) + to_chat(src, SPAN_NOTICE("You can now surface.")) for(var/X in actions) var/datum/action/act = X act.update_button_icon() diff --git a/code/modules/mob/living/carbon/xenomorph/castes/Facehugger.dm b/code/modules/mob/living/carbon/xenomorph/castes/Facehugger.dm index 150bc1d9fc96..08566a6e9af3 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/Facehugger.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/Facehugger.dm @@ -67,6 +67,11 @@ PF.flags_can_pass_all = PASS_ALL^PASS_OVER_THROW_ITEM /mob/living/carbon/xenomorph/facehugger/Life(delta_time) + if(!client && !aghosted && away_timer > XENO_FACEHUGGER_LEAVE_TIMER) + // Become a npc once again + new /obj/item/clothing/mask/facehugger(loc, hivenumber) + qdel(src) + return if(stat != DEAD && !lying && !(locate(/obj/effect/alien/weeds) in get_turf(src))) adjustBruteLoss(1) return ..() @@ -156,7 +161,6 @@ for(var/mob/dead/observer/observer as anything in GLOB.observer_list) to_chat(observer, SPAN_DEADSAY("[human] has been facehugged by [src]" + " [OBSERVER_JMP(observer, human)]")) to_chat(src, SPAN_DEADSAY("[human] has been facehugged by [src]")) - timeofdeath = 1 // Ever so slightly deprioritized for larva queue qdel(src) if(hug_area) xeno_message(SPAN_XENOMINORWARNING("You sense that [src] has facehugged a host at \the [hug_area]!"), 1, src.hivenumber) diff --git a/code/modules/mob/living/carbon/xenomorph/castes/Lurker.dm b/code/modules/mob/living/carbon/xenomorph/castes/Lurker.dm index fb75ed3900ac..5010857301e0 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/Lurker.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/Lurker.dm @@ -151,3 +151,18 @@ . = list() var/invis_message = (invis_start_time == -1) ? "N/A" : "[(invis_duration-(world.time - invis_start_time))/10] seconds." . += "Invisibility Time Left: [invis_message]" + +/datum/behavior_delegate/lurker_base/on_collide(atom/movable/movable_atom) + . = ..() + + if(!ishuman(movable_atom)) + return + + if(!bound_xeno || !bound_xeno.stealth) + return + + var/datum/action/xeno_action/onclick/lurker_invisibility/lurker_invisibility_action = get_xeno_action_by_type(bound_xeno, /datum/action/xeno_action/onclick/lurker_invisibility) + if(!lurker_invisibility_action) + return + + lurker_invisibility_action.invisibility_off() diff --git a/code/modules/mob/living/carbon/xenomorph/mutators/behavior_delegate.dm b/code/modules/mob/living/carbon/xenomorph/mutators/behavior_delegate.dm index 1cb563461138..53ca8c3a74da 100644 --- a/code/modules/mob/living/carbon/xenomorph/mutators/behavior_delegate.dm +++ b/code/modules/mob/living/carbon/xenomorph/mutators/behavior_delegate.dm @@ -104,3 +104,7 @@ /// Used to override an intent for some abilities that must force harm on next attack_alien() /datum/behavior_delegate/proc/override_intent(mob/living/carbon/target_carbon) return bound_xeno.a_intent + +/// Used to do something when a xeno collides with a movable atom +/datum/behavior_delegate/proc/on_collide(atom/movable/movable_atom) + return diff --git a/code/modules/mob/living/carbon/xenomorph/mutators/strains/runner/acid.dm b/code/modules/mob/living/carbon/xenomorph/mutators/strains/runner/acid.dm index a2699a4f0f40..7a2196a3c209 100644 --- a/code/modules/mob/living/carbon/xenomorph/mutators/strains/runner/acid.dm +++ b/code/modules/mob/living/carbon/xenomorph/mutators/strains/runner/acid.dm @@ -70,19 +70,27 @@ . += "FOR THE HIVE!: in [caboom_left] seconds" /datum/behavior_delegate/runner_acider/melee_attack_additional_effects_target(mob/living/carbon/target_mob) - if (ishuman(target_mob)) + if(ishuman(target_mob)) //Will acid be applied to the mob var/mob/living/carbon/human/target_human = target_mob - if (target_human.stat == DEAD) + if(target_human.buckled && istype(target_human.buckled, /obj/structure/bed/nest)) return - for(var/datum/effects/acid/AA in target_mob.effects_list) - qdel(AA) + if(target_human.stat == DEAD) + return + + for(var/datum/effects/acid/acid_effect in target_mob.effects_list) + qdel(acid_effect) break - if(isxeno_human(target_mob)) + + new /datum/effects/acid(target_mob, bound_xeno, initial(bound_xeno.caste_type)) + if(isxeno_human(target_mob)) //Will the runner get acid stacks + var/obj/item/alien_embryo/embryo = locate(/obj/item/alien_embryo) in target_mob.contents + if(embryo?.stage >= 4) //very late stage hugged in case the runner unnests them + return + if(target_mob.lying) modify_acid(acid_slash_regen_lying) - else - modify_acid(acid_slash_regen_standing) - new /datum/effects/acid(target_mob, bound_xeno, initial(bound_xeno.caste_type)) + return + modify_acid(acid_slash_regen_standing) /datum/behavior_delegate/runner_acider/on_life() modify_acid(acid_passive_regen) diff --git a/code/modules/mob/living/living_verbs.dm b/code/modules/mob/living/living_verbs.dm index 9b003562825d..fe95f14182ea 100644 --- a/code/modules/mob/living/living_verbs.dm +++ b/code/modules/mob/living/living_verbs.dm @@ -11,6 +11,12 @@ to_chat(src, SPAN_WARNING("You can't resist in your current state.")) return + if(isxeno(src)) + var/mob/living/carbon/xenomorph/xeno = src + if(xeno.burrow) + to_chat(src, SPAN_WARNING("You can't resist in your current state.")) + return + resisting = TRUE next_move = world.time + 20 diff --git a/code/modules/paperwork/carbonpaper.dm b/code/modules/paperwork/carbonpaper.dm index 813283147c45..4ddefff61eb8 100644 --- a/code/modules/paperwork/carbonpaper.dm +++ b/code/modules/paperwork/carbonpaper.dm @@ -30,7 +30,7 @@ set category = "Object" set src in usr - if (copied == 0) + if (!copied && !iscopy) var/obj/item/paper/carbon/c = src var/copycontents = html_decode(c.info) var/obj/item/paper/carbon/copy = new /obj/item/paper/carbon (usr.loc) diff --git a/code/modules/projectiles/ammo_boxes/grenade_packets.dm b/code/modules/projectiles/ammo_boxes/grenade_packets.dm index 518ccd2d47ab..a0d16b621eb3 100644 --- a/code/modules/projectiles/ammo_boxes/grenade_packets.dm +++ b/code/modules/projectiles/ammo_boxes/grenade_packets.dm @@ -110,19 +110,19 @@ var/list/grenade_packets = list( content_type = /obj/item/explosive/grenade/high_explosive/m15/rubber /obj/item/storage/box/packet/airburst_he - name = "\improper M74 airbust grenade packet" + name = "\improper M74 airburst grenade packet" desc = "It contains three M74 airburst fragmentation grenades. This end towards the enemy." icon_state = "agmf_packet" content_type = /obj/item/explosive/grenade/high_explosive/airburst /obj/item/storage/box/packet/airburst_incen - name = "\improper M74 airbust incendiary grenade packet" + name = "\improper M74 airburst incendiary grenade packet" desc = "It contains three M74 airburst incendiary grenades. This end towards the enemy." icon_state = "agmi_packet" content_type = /obj/item/explosive/grenade/incendiary/airburst /obj/item/storage/box/packet/airburst_smoke - name = "\improper M74 airbust smoke grenade packet" + name = "\improper M74 airburst smoke grenade packet" desc = "It contains three M74 airburst smoke grenades. This end towards the enemy." icon_state = "agms_packet" content_type = /obj/item/explosive/grenade/smokebomb/airburst diff --git a/code/modules/projectiles/ammo_datums.dm b/code/modules/projectiles/ammo_datums.dm index d8b158485501..14eb6a120886 100644 --- a/code/modules/projectiles/ammo_datums.dm +++ b/code/modules/projectiles/ammo_datums.dm @@ -383,7 +383,7 @@ accuracy = -HIT_ACCURACY_TIER_3 accuracy_var_low = PROJECTILE_VARIANCE_TIER_6 damage = 55 - penetration= ARMOR_PENETRATION_TIER_3 + penetration = ARMOR_PENETRATION_TIER_3 shrapnel_chance = SHRAPNEL_CHANCE_TIER_2 /datum/ammo/bullet/pistol/heavy/super //Commander's variant diff --git a/code/modules/projectiles/gun_attachables.dm b/code/modules/projectiles/gun_attachables.dm index 0baf6f527d4b..17dc435210c9 100644 --- a/code/modules/projectiles/gun_attachables.dm +++ b/code/modules/projectiles/gun_attachables.dm @@ -1967,7 +1967,7 @@ Defined in conflicts.dm of the #defines folder. //The requirement for an attachable being alt fire is AMMO CAPACITY > 0. /obj/item/attachable/attached_gun/grenade - name = "underslung grenade launcher" + name = "U1 grenade launcher" desc = "A weapon-mounted, reloadable grenade launcher." icon_state = "grenade" attach_icon = "grenade_a" diff --git a/code/modules/projectiles/magazines/pistols.dm b/code/modules/projectiles/magazines/pistols.dm index 317124955cbc..3cb676fbb7db 100644 --- a/code/modules/projectiles/magazines/pistols.dm +++ b/code/modules/projectiles/magazines/pistols.dm @@ -55,7 +55,7 @@ default_ammo = /datum/ammo/bullet/pistol/heavy caliber = ".45" icon_state = "m4a345"//rename later - max_rounds = 14 + max_rounds = 7 gun_type = /obj/item/weapon/gun/pistol/m1911 diff --git a/code/modules/reagents/chemistry_machinery/chem_dispenser.dm b/code/modules/reagents/chemistry_machinery/chem_dispenser.dm index 8de20ca2b79a..98896013c6ec 100644 --- a/code/modules/reagents/chemistry_machinery/chem_dispenser.dm +++ b/code/modules/reagents/chemistry_machinery/chem_dispenser.dm @@ -1,10 +1,16 @@ +#define DISPENSER_UNHACKABLE -1 +#define DISPENSER_NOT_HACKED 0 +#define DISPENSER_HACKED 1 + /obj/structure/machinery/chem_dispenser - name = "chem dispenser" + name = "chemical dispenser" + desc = "A complex machine for mixing elements into chemicals. A Wey-Yu product." density = TRUE anchored = TRUE icon = 'icons/obj/structures/machinery/science_machines.dmi' icon_state = "dispenser" use_power = USE_POWER_NONE + wrenchable = FALSE idle_power_usage = 40 layer = BELOW_OBJ_LAYER //So beakers reliably appear above it var/req_skill = SKILL_MEDICAL @@ -13,13 +19,37 @@ var/obj/structure/machinery/chem_storage/chem_storage var/network = "Ground" var/amount = 30 - var/accept_glass = 0 //At 0 ONLY accepts glass containers. Kinda misleading varname. + var/accept_beaker_only = TRUE var/obj/item/reagent_container/beaker = null var/ui_check = 0 var/static/list/possible_transfer_amounts = list(5,10,20,30,40) - var/list/dispensable_reagents = list("hydrogen","lithium","carbon","nitrogen","oxygen","fluorine", - "sodium","aluminum","silicon","phosphorus","sulfur","chlorine","potassium","iron", - "copper","mercury","radium","water","ethanol","sugar","sulphuric acid") + var/list/dispensable_reagents = list( + "hydrogen", + "lithium", + "carbon", + "nitrogen", + "oxygen", + "fluorine", + "sodium", + "aluminum", + "silicon", + "phosphorus", + "sulfur", + "chlorine", + "potassium", + "iron", + "copper", + "mercury", + "radium", + "water", + "ethanol", + "sugar", + "sulphuric acid", + ) + /// Has it been hacked + var/hacked_check = DISPENSER_UNHACKABLE + /// Additional reagents gotten when it is hacked + var/hacked_reagents = list() /obj/structure/machinery/chem_dispenser/medbay network = "Medbay" @@ -111,9 +141,9 @@ var/list/beakerContents = list() var/beakerCurrentVolume = 0 if(beaker && beaker.reagents && beaker.reagents.reagent_list.len) - for(var/datum/reagent/R in beaker.reagents.reagent_list) - beakerContents += list(list("name" = R.name, "volume" = R.volume)) // list in a list because Byond merges the first list... - beakerCurrentVolume += R.volume + for(var/datum/reagent/current_reagent in beaker.reagents.reagent_list) + beakerContents += list(list("name" = current_reagent.name, "volume" = current_reagent.volume)) // list in a list because Byond merges the first list... + beakerCurrentVolume += current_reagent.volume .["beakerContents"] = beakerContents if (beaker) @@ -149,11 +179,11 @@ return var/reagent_name = params["reagent"] if(beaker && dispensable_reagents.Find(reagent_name)) - var/obj/item/reagent_container/B = beaker - var/datum/reagents/R = B.reagents - var/space = R.maximum_volume - R.total_volume + var/obj/item/reagent_container/current_beaker = beaker + var/datum/reagents/current_reagent = current_beaker.reagents + var/space = current_reagent.maximum_volume - current_reagent.total_volume - R.add_reagent(reagent_name, min(amount, chem_storage.energy * 10, space)) + current_reagent.add_reagent(reagent_name, min(amount, chem_storage.energy * 10, space)) chem_storage.energy = max(chem_storage.energy - min(amount, chem_storage.energy * 10, space) / 10, 0) . = TRUE @@ -170,32 +200,64 @@ replace_beaker(usr) . = TRUE -/obj/structure/machinery/chem_dispenser/attackby(obj/item/reagent_container/B, mob/user) +/obj/structure/machinery/chem_dispenser/attackby(obj/item/reagent_container/attacking_object, mob/user) if(isrobot(user)) return - if(istype(B, /obj/item/reagent_container/glass) || istype(B, /obj/item/reagent_container/food)) - if(!accept_glass && istype(B,/obj/item/reagent_container/food)) + + if(istype(attacking_object, /obj/item/reagent_container/glass) || istype(attacking_object, /obj/item/reagent_container/food)) + if(accept_beaker_only && istype(attacking_object,/obj/item/reagent_container/food)) to_chat(user, SPAN_NOTICE("This machine only accepts beakers")) - if(user.drop_inv_item_to_loc(B, src)) + if(user.drop_inv_item_to_loc(attacking_object, src)) var/obj/item/old_beaker = beaker - beaker = B + beaker = attacking_object if(old_beaker) - to_chat(user, SPAN_NOTICE("You swap out \the [old_beaker] for \the [B].")) + to_chat(user, SPAN_NOTICE("You swap out [old_beaker] for [attacking_object].")) user.put_in_hands(old_beaker) else - to_chat(user, SPAN_NOTICE("You set \the [B] on the machine.")) + to_chat(user, SPAN_NOTICE("You set [attacking_object] on the machine.")) SStgui.update_uis(src) update_icon() return + if(HAS_TRAIT(attacking_object, TRAIT_TOOL_MULTITOOL)) + switch(hacked_check) + if(DISPENSER_UNHACKABLE) + to_chat(user, SPAN_NOTICE("[src] cannot be hacked.")) + if(DISPENSER_NOT_HACKED) + user.visible_message("[user] modifies [src] with [attacking_object], turning a light on.", "You enable a light in [src].") + dispensable_reagents += hacked_reagents + hacked_check = DISPENSER_HACKED + if(DISPENSER_HACKED) + user.visible_message("[user] modifies [src] with [attacking_object], turning a light off.", "You disable a light in [src].") + dispensable_reagents -= hacked_reagents + hacked_check = DISPENSER_NOT_HACKED + + if(HAS_TRAIT(attacking_object, TRAIT_TOOL_WRENCH)) + if(!wrenchable) + to_chat(user, "[src] cannot be unwrenched.") + + if(!do_after(user, 2 SECONDS, INTERRUPT_ALL|BEHAVIOR_IMMOBILE, BUSY_ICON_BUILD)) + return + if(!src) + return + + playsound(loc, 'sound/items/Ratchet.ogg', 25, 1) + anchored = !anchored + if(anchored) + user.visible_message("[user] tightens the bolts securing [src] to the surface.", "You tighten the bolts securing [src] to the surface.") + return + + user.visible_message("[user] unfastens the bolts securing [src] to the surface.", "You unfasten the bolts securing [src] to the surface.") + /obj/structure/machinery/chem_dispenser/attack_remote(mob/user as mob) return src.attack_hand(user) /obj/structure/machinery/chem_dispenser/attack_hand(mob/user as mob) if(stat & BROKEN) + to_chat(user, SPAN_WARNING("[src] is inoperative.")) return if(req_skill && !skillcheck(user, req_skill, req_skill_level)) - to_chat(user, SPAN_WARNING("You don't have the training to use this.")) + to_chat(user, SPAN_WARNING("You don't have the training to use [src].")) return tgui_interact(user) @@ -206,9 +268,10 @@ ui_title = "Soda Dispens-o-matic" req_skill = null req_skill_level = null - accept_glass = 1 + accept_beaker_only = FALSE wrenchable = TRUE network = "Misc" + hacked_check = DISPENSER_NOT_HACKED dispensable_reagents = list( "water", "ice", @@ -233,76 +296,43 @@ "lemonjuice", "banana", ) - var/hackedcheck = 0 - -/obj/structure/machinery/chem_dispenser/soda/attackby(obj/item/B as obj, mob/user as mob) - ..() - if(HAS_TRAIT(B, TRAIT_TOOL_MULTITOOL)) - if(hackedcheck == 0) - to_chat(user, "You change the mode from 'Soda Magic' to 'Milking Time'.") - dispensable_reagents += list("milk","soymilk") - hackedcheck = 1 - return - - else - to_chat(user, "You change the mode from 'Milking Time' to 'Soda Magic'.") - dispensable_reagents -= list("milk","soymilk") - hackedcheck = 0 - return - else if(HAS_TRAIT(B, TRAIT_TOOL_WRENCH)) - if(!wrenchable) return - - if(do_after(user, 20, INTERRUPT_ALL|BEHAVIOR_IMMOBILE, BUSY_ICON_BUILD)) - if(!src) return - playsound(src.loc, 'sound/items/Ratchet.ogg', 25, 1) - switch (anchored) - if (FALSE) - anchored = TRUE - user.visible_message("[user] tightens the bolts securing \the [src] to the surface.", "You tighten the bolts securing \the [src] to the surface.") - if (TRUE) - user.visible_message("[user] unfastens the bolts securing \the [src] to the surface.", "You unfasten the bolts securing \the [src] to the surface.") - anchored = FALSE - return + hacked_reagents = list( + "milk", + "soymilk", + ) -/obj/structure/machinery/chem_dispenser/beer +/obj/structure/machinery/chem_dispenser/soda/beer icon_state = "booze_dispenser" name = "booze dispenser" ui_title = "Booze Portal 9001" - req_skill = null - req_skill_level = null - accept_glass = 1 - wrenchable = TRUE - network = "Misc" desc = "A technological marvel, supposedly able to mix just the mixture you'd like to drink the moment you ask for one." - dispensable_reagents = list("water","ice","sodawater","sugar","tonic","beer","kahlua","whiskey","sake","wine","vodka","gin","rum","vermouth","cognac","ale","mead","thirteenloko","tequila") - var/hackedcheck = 0 - -/obj/structure/machinery/chem_dispenser/beer/attackby(obj/item/B as obj, mob/user as mob) - ..() - - if(HAS_TRAIT(B, TRAIT_TOOL_MULTITOOL)) - if(hackedcheck == 0) - to_chat(user, "You disable the 'Weyland-Yutani-are-cheap-bastards' lock, enabling hidden and very expensive boozes.") - dispensable_reagents += list("goldschlager","patron","absinthe") - hackedcheck = 1 - return + dispensable_reagents = list( + "water", + "ice", + "sodawater", + "sugar", + "tonic", + "beer", + "kahlua", + "whiskey", + "sake", + "wine", + "vodka", + "gin", + "rum", + "vermouth", + "cognac", + "ale", + "mead", + "thirteenloko", + "tequila", + ) + hacked_reagents = list( + "goldschlager", + "patron", + "absinthe", + ) - else - to_chat(user, "You re-enable the 'Weyland-Yutani-are-cheap-bastards' lock, disabling hidden and very expensive boozes.") - dispensable_reagents -= list("goldschlager","patron","absinthe") - hackedcheck = 0 - return - else if(HAS_TRAIT(B, TRAIT_TOOL_WRENCH)) - if(!wrenchable) return - - if(do_after(user, 20, INTERRUPT_ALL|BEHAVIOR_IMMOBILE, BUSY_ICON_BUILD)) - if(!src) return - playsound(src.loc, 'sound/items/Ratchet.ogg', 25, 1) - switch (anchored) - if (FALSE) - anchored = TRUE - user.visible_message("[user] tightens the bolts securing \the [src] to the surface.", "You tighten the bolts securing \the [src] to the surface.") - if (TRUE) - user.visible_message("[user] unfastens the bolts securing \the [src] to the surface.", "You unfasten the bolts securing \the [src] to the surface.") - anchored = FALSE - return +#undef DISPENSER_UNHACKABLE +#undef DISPENSER_NOT_HACKED +#undef DISPENSER_HACKED diff --git a/code/modules/shuttle/computers/dropship_computer.dm b/code/modules/shuttle/computers/dropship_computer.dm index ea4a7fdbc79d..50449b32fcb9 100644 --- a/code/modules/shuttle/computers/dropship_computer.dm +++ b/code/modules/shuttle/computers/dropship_computer.dm @@ -1,6 +1,6 @@ /obj/structure/machinery/computer/shuttle/dropship/flight name = "dropship navigation computer" - desc = "flight computer for dropship" + desc = "A flight computer that can be used for autopilot or long-range flights." icon = 'icons/obj/structures/machinery/shuttle-parts.dmi' icon_state = "console" req_one_access = list(ACCESS_MARINE_LEADER, ACCESS_MARINE_DROPSHIP) diff --git a/code/modules/tgui/tgui-say/modal.dm b/code/modules/tgui/tgui-say/modal.dm index b959019b894f..f1e87e001cef 100644 --- a/code/modules/tgui/tgui-say/modal.dm +++ b/code/modules/tgui/tgui-say/modal.dm @@ -83,7 +83,7 @@ if(!payload?["channel"]) CRASH("No channel provided to an open TGUI-Say") window_open = TRUE - if(payload["channel"] != OOC_CHANNEL && payload["channel"] != LOOC_CHANNEL && payload["channel"] != MOD_CHANNEL && payload["channel"] != ADMIN_CHANNEL && payload["channel"] != MENTOR_CHANNEL) + if(payload["channel"] != OOC_CHANNEL && payload["channel"] != LOOC_CHANNEL && payload["channel"] != ADMIN_CHANNEL && payload["channel"] != MENTOR_CHANNEL) start_thinking() return TRUE diff --git a/code/modules/tgui/tgui-say/speech.dm b/code/modules/tgui/tgui-say/speech.dm index f278361ac0d0..7bce349e1b7f 100644 --- a/code/modules/tgui/tgui-say/speech.dm +++ b/code/modules/tgui/tgui-say/speech.dm @@ -47,9 +47,6 @@ if(LOOC_CHANNEL) client.looc(entry) return TRUE - if(MOD_CHANNEL) - client.cmd_mod_say(entry) - return TRUE if(ADMIN_CHANNEL) client.cmd_admin_say(entry) return TRUE @@ -94,7 +91,7 @@ return TRUE if(type == "force") var/target_channel = payload["channel"] - if(target_channel == ME_CHANNEL || target_channel == OOC_CHANNEL || target_channel == LOOC_CHANNEL || target_channel == MOD_CHANNEL) + if(target_channel == ME_CHANNEL || target_channel == OOC_CHANNEL || target_channel == LOOC_CHANNEL || target_channel == ADMIN_CHANNEL) target_channel = SAY_CHANNEL // No ooc leaks delegate_speech(alter_entry(payload), target_channel) return TRUE diff --git a/code/modules/unit_tests/_unit_tests.dm b/code/modules/unit_tests/_unit_tests.dm index be92afffb898..010cba770ce2 100644 --- a/code/modules/unit_tests/_unit_tests.dm +++ b/code/modules/unit_tests/_unit_tests.dm @@ -85,6 +85,7 @@ #include "unit_test.dm" #include "spawn_humans.dm" #include "check_runtimes.dm" +#include "wj_emotes.dm" #undef TEST_ASSERT #undef TEST_ASSERT_EQUAL diff --git a/code/modules/unit_tests/wj_emotes.dm b/code/modules/unit_tests/wj_emotes.dm new file mode 100644 index 000000000000..f89757665011 --- /dev/null +++ b/code/modules/unit_tests/wj_emotes.dm @@ -0,0 +1,7 @@ +/// Test that all working joe emotes have a category +/datum/unit_test/wj_emotes + +/datum/unit_test/wj_emotes/Run() + for(var/datum/emote/living/carbon/human/synthetic/working_joe/emote as anything in subtypesof(/datum/emote/living/carbon/human/synthetic/working_joe)) + if(!initial(emote.category)) + TEST_FAIL("Emote [emote] did not have a category!") diff --git a/code/modules/vehicles/interior/interior.dm b/code/modules/vehicles/interior/interior.dm index b56de4bfe16b..046b42495ac7 100644 --- a/code/modules/vehicles/interior/interior.dm +++ b/code/modules/vehicles/interior/interior.dm @@ -72,6 +72,7 @@ entrance_markers = null QDEL_NULL(reservation) + SSinterior.interiors -= src return ..() diff --git a/colonialmarines.dme b/colonialmarines.dme index dd22cc107b5f..663f05b2c9de 100644 --- a/colonialmarines.dme +++ b/colonialmarines.dme @@ -111,6 +111,7 @@ #include "code\__DEFINES\vv.dm" #include "code\__DEFINES\weapon_stats.dm" #include "code\__DEFINES\weather.dm" +#include "code\__DEFINES\wj_emotes.dm" #include "code\__DEFINES\xeno.dm" #include "code\__DEFINES\dcs\flags.dm" #include "code\__DEFINES\dcs\helpers.dm" @@ -557,7 +558,6 @@ #include "code\datums\redis\redis_message.dm" #include "code\datums\redis\callbacks\_redis_callback.dm" #include "code\datums\redis\callbacks\asay.dm" -#include "code\datums\redis\callbacks\msay.dm" #include "code\datums\stamina\_stamina.dm" #include "code\datums\stamina\none.dm" #include "code\datums\statistics\cause_data.dm" @@ -1781,7 +1781,6 @@ #include "code\modules\mob\living\carbon\human\powers\human_powers.dm" #include "code\modules\mob\living\carbon\human\powers\issue_order.dm" #include "code\modules\mob\living\carbon\human\species\emote-monkey.dm" -#include "code\modules\mob\living\carbon\human\species\emote-synthetic.dm" #include "code\modules\mob\living\carbon\human\species\emote-yautja.dm" #include "code\modules\mob\living\carbon\human\species\human.dm" #include "code\modules\mob\living\carbon\human\species\monkey.dm" @@ -1789,6 +1788,16 @@ #include "code\modules\mob\living\carbon\human\species\synthetic.dm" #include "code\modules\mob\living\carbon\human\species\yautja.dm" #include "code\modules\mob\living\carbon\human\species\zombie.dm" +#include "code\modules\mob\living\carbon\human\species\working_joe\_emote.dm" +#include "code\modules\mob\living\carbon\human\species\working_joe\_species.dm" +#include "code\modules\mob\living\carbon\human\species\working_joe\farewell.dm" +#include "code\modules\mob\living\carbon\human\species\working_joe\greeting.dm" +#include "code\modules\mob\living\carbon\human\species\working_joe\notice.dm" +#include "code\modules\mob\living\carbon\human\species\working_joe\question.dm" +#include "code\modules\mob\living\carbon\human\species\working_joe\quip.dm" +#include "code\modules\mob\living\carbon\human\species\working_joe\restricted_area.dm" +#include "code\modules\mob\living\carbon\human\species\working_joe\task_update.dm" +#include "code\modules\mob\living\carbon\human\species\working_joe\warning.dm" #include "code\modules\mob\living\carbon\xenomorph\Abilities.dm" #include "code\modules\mob\living\carbon\xenomorph\attack_alien.dm" #include "code\modules\mob\living\carbon\xenomorph\damage_procs.dm" diff --git a/html/changelogs/AutoChangeLog-pr-3644.yml b/html/changelogs/AutoChangeLog-pr-3644.yml deleted file mode 100644 index 3561afb407cf..000000000000 --- a/html/changelogs/AutoChangeLog-pr-3644.yml +++ /dev/null @@ -1,7 +0,0 @@ -author: "Drathek Kugamo" -delete-after: True -changes: - - rscadd: "Added the ability for weeds to merge with unrevivable corpses" - - imageadd: "Added human shaped weeds by Kugamo" - - code_imp: "Added a signal for weeds sent to the turf to indicate it is now weeded, and added a signal for afterbuckle." - - bugfix: "Closets (including coffins) can no longer move anchored mobs." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-3807.yml b/html/changelogs/AutoChangeLog-pr-3807.yml deleted file mode 100644 index ad651a4d4e80..000000000000 --- a/html/changelogs/AutoChangeLog-pr-3807.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Morrow" -delete-after: True -changes: - - bugfix: "Fixed extraneous messages in regards to wall nests" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-3808.yml b/html/changelogs/AutoChangeLog-pr-3808.yml deleted file mode 100644 index d9494a1d7f8a..000000000000 --- a/html/changelogs/AutoChangeLog-pr-3808.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "SpartanBobby" -delete-after: True -changes: - - balance: "changes M4A3 magazine size from 9 to 12" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-3812.yml b/html/changelogs/AutoChangeLog-pr-3812.yml deleted file mode 100644 index e8990a528ec7..000000000000 --- a/html/changelogs/AutoChangeLog-pr-3812.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "Morrow" -delete-after: True -changes: - - qol: "Create humans tab length increase" - - qol: "Create humans tab now defaults to 0 range to spawn" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-3813.yml b/html/changelogs/AutoChangeLog-pr-3813.yml deleted file mode 100644 index 5faa054ec221..000000000000 --- a/html/changelogs/AutoChangeLog-pr-3813.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Zonespace27" -delete-after: True -changes: - - bugfix: "The maintenance jack should work a little better at crowbarring things." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-3826.yml b/html/changelogs/AutoChangeLog-pr-3826.yml deleted file mode 100644 index 556e83acdbba..000000000000 --- a/html/changelogs/AutoChangeLog-pr-3826.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Drathek" -delete-after: True -changes: - - bugfix: "Fixed facehuggers incorrectly displaying thrown state when it has landed" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-3827.yml b/html/changelogs/AutoChangeLog-pr-3827.yml deleted file mode 100644 index 768cd30a9497..000000000000 --- a/html/changelogs/AutoChangeLog-pr-3827.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Ben10083" -delete-after: True -changes: - - bugfix: "Working Joes can no longer have a gradient on their rare hair spawn." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-3828.yml b/html/changelogs/AutoChangeLog-pr-3828.yml deleted file mode 100644 index f3cc0b8c3ee1..000000000000 --- a/html/changelogs/AutoChangeLog-pr-3828.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "Ben10083" -delete-after: True -changes: - - rscdel: "Working Joes can no longer be fed." - - code_imp: "New trait: Cannot eat. Self-explanatory." \ No newline at end of file diff --git a/html/changelogs/archive/2023-07.yml b/html/changelogs/archive/2023-07.yml index 204efe627173..db8b80db6820 100644 --- a/html/changelogs/archive/2023-07.yml +++ b/html/changelogs/archive/2023-07.yml @@ -91,3 +91,132 @@ - balance: Colony Synthetics have slightly better CQC and can carry people better. realforest2001: - bugfix: Fixes Queen making footstep sounds while dead and being dragged. +2023-07-08: + Ben10083: + - bugfix: Working Joes can no longer have a gradient on their rare hair spawn. + - rscdel: Working Joes can no longer be fed. + - code_imp: 'New trait: Cannot eat. Self-explanatory.' + Cursor: + - spellcheck: Changed Chem Dispenser to Chemical Dispenser, added descriptions to + the cryo cell, rail computer and chemical dispenser. Updated the descriptions + for the Blood Dispenser and Dropship computer. + Drathek: + - bugfix: Fixed facehuggers incorrectly displaying thrown state when it has landed + Drathek Kugamo: + - rscadd: Added the ability for weeds to merge with unrevivable corpses + - imageadd: Added human shaped weeds by Kugamo + - code_imp: Added a signal for weeds sent to the turf to indicate it is now weeded, + and added a signal for afterbuckle. + - bugfix: Closets (including coffins) can no longer move anchored mobs. + Morrow: + - qol: Create humans tab length increase + - qol: Create humans tab now defaults to 0 range to spawn + - bugfix: Fixed extraneous messages in regards to wall nests + SpartanBobby: + - balance: changes M4A3 magazine size from 9 to 12 + Zonespace27: + - bugfix: The maintenance jack should work a little better at crowbarring things. +2023-07-09: + Khadd: + - rscadd: added a iv tube between the user and the bloodpack / iv drip + - imageadd: sprites for the iv tube + Zonespace27: + - rscadd: Working Joes now have an emote panel to use voice lines, accessible as + an action button. + theselfish: + - qol: Foxtrot's radio channel is now on if you have multi-squad in your headset. +2023-07-10: + BeagleGaming1: + - rscadd: Acid runners don't get acid from slashing nested humans + - rscadd: Very late-stage marines do not give acid + - bugfix: Fixes one way of abusing resin fruit + Drathek: + - rscdel: Remove first life priority for larva queue + - bugfix: Fix ghosting as a facehugger counting as death for the larva queue + blackdragonTOW: + - spellcheck: Added "U1" designation to the UGL attachment. +2023-07-11: + BeagleGaming1: + - bugfix: Fixes the Working Joe species +2023-07-12: + Morrow: + - bugfix: Stops xenos from bypassing dead moving via roller beds + - balance: Telebaton now scales in stunforce effectiveness based on policing skill + - balance: Marines called with foxtrot nerfed from 15 to 10. + SpartanBobby: + - maptweak: 'LV522: Flips the layout of engineering making the T-comms unit on the + far side of the LZ' + - balance: reduces the M1911 magazine size from 14 to 7 + Steelpoint: + - balance: Synthetic Armour slowdown has been decreased +2023-07-13: + QuickLoad, Thwomper: + - imageadd: Synthetic Uniforms & Vest with United Americas flair and classic jumpsuits + which remind you of life on the Frontier. Sprited by THE THWOMPA himself! + - qol: Synthetic Vendor is more organized. Removes scrub cap, adds shoe. +2023-07-14: + Drathek: + - bugfix: Fix ghosting preventing first dibs on the larva in a hugged marine + Unknownity: + - bugfix: Fixed burrowed mobs being able to be targeted by sentries, mines and SG + autofire. + - bugfix: Fixed burrowed mobs being able to grab mobs on the surface. + - bugfix: Fixed burrowed mobs being able to resist while burrowed. + - bugfix: Fixed burrowers taking damage from direct flame and shrapnel from explosions. + - bugfix: Fixed burrowers being able to get slashed from enemy Xenos on the surface. + - bugfix: Fixed burrowers unburrow stun to now properly target and stun enemy Xenos. + - soundadd: Added sounds for the Burrower when they are burrowing and unburrowing. +2023-07-15: + BeagleGaming1: + - code_imp: Messed with chem and drink dispenser code + Ben10083: + - spellcheck: Fixed typos relating to M74 airburst packets. + - mapadd: Combat Information Center Reception now has a telephone + - maptweak: Medical Lower telephone shifted to the left + Drathek: + - bugfix: Fix morpher ejected items and dumped objectives not restoring their mouse_opacity + setting. + Morrow: + - admin: VV Jump To Fix + - balance: Lurkers now lose their invisibility when they run into a person + Steelpoint: + - ui: Predator Ship is now called 'Yautja Ship" for teleporting Predators + Zonespace27: + - admin: Removed msay. All staff now have access to asay + ondrej008: + - bugfix: The HE OB now deals the correct amount of damage to xenos, before it dealt + half damage caused by xenos being forced to rest before it hit. + realforest2001: + - soundadd: Added a drag sound for footstep component + - bugfix: Fixes the icon on the alien blade on LV. + - bugfix: Carbon copies can no longer infinitely breed. + - rscadd: Added a PMC Synth Survivor preset, and stopped PMC Synth Survivor using + the ERT set. + - bugfix: You can no longer weld non metal containers closed. + - bugfix: Fixes the toggle notification sound verb for Yautja bracers not working. +2023-07-16: + Drathek: + - rscadd: Facehuggers now convert to their NPC version after 7 minutes of inactivity + and no client. + - code_imp: Cleanup join as xeno button code somewhat. + Drathek, Fira: + - bugfix: Fixed an issue with table flips that could make some tables incorrectly + unflippable, and cause infinite loops. It is no longer possible to flip tables + that t-shape or cross, or spans more than 5 tiles away from you. + Drathek, Steelpoint: + - bugfix: Fixed possible hardeletes for predator landmarks and vehicles. Predator + teleporation descriptions now do not change if the area is altered at runtime + so they can still be found correctly. + theselfish: + - rscadd: SOs may now get coats in their vendor. +2023-07-17: + Puckaboo2: + - spellcheck: Some duplicate icon states have been differentiated to prevent future + missing icon state errors. + - imageadd: Added new icon states for chemical and virology dispensers. + - rscdel: Removed dozens of duplicate icon states from over 50 files to reduce bloat. + - rscdel: Removed duplicate empty icon states. + realforest2001: + - maptweak: Added Apollo Maintenance Controllers to the following locations. + - maptweak: Astronavigation, CIC Substation, Brig Substation, Req Aux Storage, Hangar + & OT & Engineering workshops, Reactor Core Room and Lifeboat Control Ring. diff --git a/icons/effects/beam.dmi b/icons/effects/beam.dmi index 704c0ad1c02c..d6ee40cf7fe8 100644 Binary files a/icons/effects/beam.dmi and b/icons/effects/beam.dmi differ diff --git a/icons/effects/genetics.dmi b/icons/effects/genetics.dmi index 8e31fea96135..fa46a2d6c094 100644 Binary files a/icons/effects/genetics.dmi and b/icons/effects/genetics.dmi differ diff --git a/icons/mob/hud/actions.dmi b/icons/mob/hud/actions.dmi index 1692879116dc..4d0697733207 100644 Binary files a/icons/mob/hud/actions.dmi and b/icons/mob/hud/actions.dmi differ diff --git a/icons/mob/hud/alien_standard.dmi b/icons/mob/hud/alien_standard.dmi index 7e339ec5e83d..8bad0b44acc9 100644 Binary files a/icons/mob/hud/alien_standard.dmi and b/icons/mob/hud/alien_standard.dmi differ diff --git a/icons/mob/hud/hud.dmi b/icons/mob/hud/hud.dmi index 91fd9e92b5fa..f8ea98d01e53 100644 Binary files a/icons/mob/hud/hud.dmi and b/icons/mob/hud/hud.dmi differ diff --git a/icons/mob/hud/human_bronze.dmi b/icons/mob/hud/human_bronze.dmi index 4f2ee88d1da5..11a724057245 100644 Binary files a/icons/mob/hud/human_bronze.dmi and b/icons/mob/hud/human_bronze.dmi differ diff --git a/icons/mob/hud/human_old.dmi b/icons/mob/hud/human_old.dmi index 2e29c09411b7..194206d4de16 100644 Binary files a/icons/mob/hud/human_old.dmi and b/icons/mob/hud/human_old.dmi differ diff --git a/icons/mob/hud/human_orange.dmi b/icons/mob/hud/human_orange.dmi index 420fb3e8ea3e..8a46dad89ed5 100644 Binary files a/icons/mob/hud/human_orange.dmi and b/icons/mob/hud/human_orange.dmi differ diff --git a/icons/mob/hud/screen1.dmi b/icons/mob/hud/screen1.dmi index df8475ef0ebd..fd4cf8188579 100644 Binary files a/icons/mob/hud/screen1.dmi and b/icons/mob/hud/screen1.dmi differ diff --git a/icons/mob/hud/screen1_robot.dmi b/icons/mob/hud/screen1_robot.dmi index a54b0a34b392..679a555c97a6 100644 Binary files a/icons/mob/hud/screen1_robot.dmi and b/icons/mob/hud/screen1_robot.dmi differ diff --git a/icons/mob/hud/talk.dmi b/icons/mob/hud/talk.dmi index 52255e1094f9..c6f043bfd781 100644 Binary files a/icons/mob/hud/talk.dmi and b/icons/mob/hud/talk.dmi differ diff --git a/icons/mob/humans/green_armors.dmi b/icons/mob/humans/green_armors.dmi index e1a5aaf8c13f..5022b6c4bbc7 100644 Binary files a/icons/mob/humans/green_armors.dmi and b/icons/mob/humans/green_armors.dmi differ diff --git a/icons/mob/humans/human.dmi b/icons/mob/humans/human.dmi index f98eb58f08ff..7bcd1e9796cc 100644 Binary files a/icons/mob/humans/human.dmi and b/icons/mob/humans/human.dmi differ diff --git a/icons/mob/humans/onmob/belt.dmi b/icons/mob/humans/onmob/belt.dmi index 1d5ed650b6f9..f95ba65ece52 100644 Binary files a/icons/mob/humans/onmob/belt.dmi and b/icons/mob/humans/onmob/belt.dmi differ diff --git a/icons/mob/humans/onmob/suit_0.dmi b/icons/mob/humans/onmob/suit_0.dmi index 5cccc4c2e0e0..0065384e2c6c 100644 Binary files a/icons/mob/humans/onmob/suit_0.dmi and b/icons/mob/humans/onmob/suit_0.dmi differ diff --git a/icons/mob/humans/onmob/uniform_0.dmi b/icons/mob/humans/onmob/uniform_0.dmi index cac9869c9034..a3e34fc2e16c 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/mob/humans/species/monkeys/onmob/suit_monkey_0.dmi b/icons/mob/humans/species/monkeys/onmob/suit_monkey_0.dmi index 3083c943c761..6d05304ef8d9 100644 Binary files a/icons/mob/humans/species/monkeys/onmob/suit_monkey_0.dmi and b/icons/mob/humans/species/monkeys/onmob/suit_monkey_0.dmi differ diff --git a/icons/mob/humans/species/monkeys/onmob/uniform_monkey_0.dmi b/icons/mob/humans/species/monkeys/onmob/uniform_monkey_0.dmi index 730ee28ff467..cc6fb5d13b03 100644 Binary files a/icons/mob/humans/species/monkeys/onmob/uniform_monkey_0.dmi and b/icons/mob/humans/species/monkeys/onmob/uniform_monkey_0.dmi differ diff --git a/icons/mob/xenonids/lurker.dmi b/icons/mob/xenonids/lurker.dmi index bc2c3aa06837..45a04ac68446 100644 Binary files a/icons/mob/xenonids/lurker.dmi and b/icons/mob/xenonids/lurker.dmi differ diff --git a/icons/obj/bodybag.dmi b/icons/obj/bodybag.dmi index 9084afd56f63..157a7692b2a8 100644 Binary files a/icons/obj/bodybag.dmi and b/icons/obj/bodybag.dmi differ diff --git a/icons/obj/items/black_goo_stuff.dmi b/icons/obj/items/black_goo_stuff.dmi index 2d7b063bc4b8..b40461a40101 100644 Binary files a/icons/obj/items/black_goo_stuff.dmi and b/icons/obj/items/black_goo_stuff.dmi differ diff --git a/icons/obj/items/clothing/halloween_clothes.dmi b/icons/obj/items/clothing/halloween_clothes.dmi index 3de24560ec9d..530b7cf5a905 100644 Binary files a/icons/obj/items/clothing/halloween_clothes.dmi and b/icons/obj/items/clothing/halloween_clothes.dmi differ diff --git a/icons/obj/items/clothing/suits.dmi b/icons/obj/items/clothing/suits.dmi index cff4b5d48c17..668b9a86c62f 100644 Binary files a/icons/obj/items/clothing/suits.dmi and b/icons/obj/items/clothing/suits.dmi differ diff --git a/icons/obj/items/clothing/uniforms.dmi b/icons/obj/items/clothing/uniforms.dmi index 254c9e8b67c9..4d4d7df3224d 100644 Binary files a/icons/obj/items/clothing/uniforms.dmi and b/icons/obj/items/clothing/uniforms.dmi differ diff --git a/icons/obj/items/food.dmi b/icons/obj/items/food.dmi index ac802dc66a9a..6e2c86aa4999 100644 Binary files a/icons/obj/items/food.dmi and b/icons/obj/items/food.dmi differ diff --git a/icons/obj/items/hunter/pred_gear.dmi b/icons/obj/items/hunter/pred_gear.dmi index 5587cc685bec..ab034d7ec48a 100644 Binary files a/icons/obj/items/hunter/pred_gear.dmi and b/icons/obj/items/hunter/pred_gear.dmi differ diff --git a/icons/obj/items/weapons/guns/attachments/barrel.dmi b/icons/obj/items/weapons/guns/attachments/barrel.dmi index 41231e81b975..d040aa85fd5d 100644 Binary files a/icons/obj/items/weapons/guns/attachments/barrel.dmi and b/icons/obj/items/weapons/guns/attachments/barrel.dmi differ diff --git a/icons/obj/items/weapons/guns/attachments/rail.dmi b/icons/obj/items/weapons/guns/attachments/rail.dmi index 10e3cbe99a8c..315005696ba8 100644 Binary files a/icons/obj/items/weapons/guns/attachments/rail.dmi and b/icons/obj/items/weapons/guns/attachments/rail.dmi differ diff --git a/icons/obj/items/weapons/guns/attachments/stock.dmi b/icons/obj/items/weapons/guns/attachments/stock.dmi index 481710383a14..8eb95d15770f 100644 Binary files a/icons/obj/items/weapons/guns/attachments/stock.dmi and b/icons/obj/items/weapons/guns/attachments/stock.dmi differ diff --git a/icons/obj/items/weapons/guns/attachments/under.dmi b/icons/obj/items/weapons/guns/attachments/under.dmi index 8cbf735ac96b..1a55ea7e215f 100644 Binary files a/icons/obj/items/weapons/guns/attachments/under.dmi and b/icons/obj/items/weapons/guns/attachments/under.dmi differ diff --git a/icons/obj/items/weapons/guns/legacy/old_bayguns.dmi b/icons/obj/items/weapons/guns/legacy/old_bayguns.dmi index d1bdb7d3b0c9..568bfd0ee456 100644 Binary files a/icons/obj/items/weapons/guns/legacy/old_bayguns.dmi and b/icons/obj/items/weapons/guns/legacy/old_bayguns.dmi differ diff --git a/icons/obj/items/weapons/guns/legacy/old_cmguns.dmi b/icons/obj/items/weapons/guns/legacy/old_cmguns.dmi index bf67ed68502c..24cade43454f 100644 Binary files a/icons/obj/items/weapons/guns/legacy/old_cmguns.dmi and b/icons/obj/items/weapons/guns/legacy/old_cmguns.dmi differ diff --git a/icons/obj/structures/doors/mineral_doors.dmi b/icons/obj/structures/doors/mineral_doors.dmi index 1613f466d523..f9e025ccf0e9 100644 Binary files a/icons/obj/structures/doors/mineral_doors.dmi and b/icons/obj/structures/doors/mineral_doors.dmi differ diff --git a/icons/obj/structures/doors/prison_FOP/prison_hatches.dmi b/icons/obj/structures/doors/prison_FOP/prison_hatches.dmi index 489d2333f2a6..23864a1065d1 100644 Binary files a/icons/obj/structures/doors/prison_FOP/prison_hatches.dmi and b/icons/obj/structures/doors/prison_FOP/prison_hatches.dmi differ diff --git a/icons/obj/structures/machinery/computer3.dmi b/icons/obj/structures/machinery/computer3.dmi index 4735cfc5a1a4..047417f303f3 100644 Binary files a/icons/obj/structures/machinery/computer3.dmi and b/icons/obj/structures/machinery/computer3.dmi differ diff --git a/icons/obj/structures/machinery/cryogenics.dmi b/icons/obj/structures/machinery/cryogenics.dmi index b2c5d2e0c5ce..dc061195583f 100644 Binary files a/icons/obj/structures/machinery/cryogenics.dmi and b/icons/obj/structures/machinery/cryogenics.dmi differ diff --git a/icons/obj/structures/machinery/shuttle-parts.dmi b/icons/obj/structures/machinery/shuttle-parts.dmi index 1ec8a07e6b3f..7db27387e7c1 100644 Binary files a/icons/obj/structures/machinery/shuttle-parts.dmi and b/icons/obj/structures/machinery/shuttle-parts.dmi differ diff --git a/icons/obj/structures/machinery/vending.dmi b/icons/obj/structures/machinery/vending.dmi index ecc570680a74..3098aadca8be 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/props/dam.dmi b/icons/obj/structures/props/dam.dmi index 3541b2412e13..76f67514c2ea 100644 Binary files a/icons/obj/structures/props/dam.dmi and b/icons/obj/structures/props/dam.dmi differ diff --git a/icons/obj/structures/props/fence.dmi b/icons/obj/structures/props/fence.dmi index 9ed9d1f7fc20..016aab562777 100644 Binary files a/icons/obj/structures/props/fence.dmi and b/icons/obj/structures/props/fence.dmi differ diff --git a/icons/obj/structures/stairs/perspective_stairs_ice.dmi b/icons/obj/structures/stairs/perspective_stairs_ice.dmi index 8f5bf6935d7b..3311adfc11dd 100644 Binary files a/icons/obj/structures/stairs/perspective_stairs_ice.dmi and b/icons/obj/structures/stairs/perspective_stairs_ice.dmi differ diff --git a/icons/obj/structures/stairs/perspective_stairs_kutjevo.dmi b/icons/obj/structures/stairs/perspective_stairs_kutjevo.dmi index 86a2cfde6339..f9c759a32d12 100644 Binary files a/icons/obj/structures/stairs/perspective_stairs_kutjevo.dmi and b/icons/obj/structures/stairs/perspective_stairs_kutjevo.dmi differ diff --git a/icons/old_stuff/Seasonal/xmas.dmi b/icons/old_stuff/Seasonal/xmas.dmi index 8dd25fd4b6d4..9669a6034b9c 100644 Binary files a/icons/old_stuff/Seasonal/xmas.dmi and b/icons/old_stuff/Seasonal/xmas.dmi differ diff --git a/icons/rebase_icons.dmi b/icons/rebase_icons.dmi index aaf92453b29a..2d394cef793d 100644 Binary files a/icons/rebase_icons.dmi and b/icons/rebase_icons.dmi differ diff --git a/icons/turf/almayer.dmi b/icons/turf/almayer.dmi index a90940470acf..07f771ec78c7 100644 Binary files a/icons/turf/almayer.dmi and b/icons/turf/almayer.dmi differ diff --git a/icons/turf/area_strata.dmi b/icons/turf/area_strata.dmi index 54b90d0a8f92..8c9791522989 100644 Binary files a/icons/turf/area_strata.dmi and b/icons/turf/area_strata.dmi differ diff --git a/icons/turf/floors/asphalt.dmi b/icons/turf/floors/asphalt.dmi index ef4f07d5f374..57b807b1c3f4 100644 Binary files a/icons/turf/floors/asphalt.dmi and b/icons/turf/floors/asphalt.dmi differ diff --git a/icons/turf/floors/concrete.dmi b/icons/turf/floors/concrete.dmi index d3aa3a1fa7ee..54d7dd3aaaef 100644 Binary files a/icons/turf/floors/concrete.dmi and b/icons/turf/floors/concrete.dmi differ diff --git a/icons/turf/floors/floors.dmi b/icons/turf/floors/floors.dmi index 681ffa537aa4..7b68cbb2b6b2 100644 Binary files a/icons/turf/floors/floors.dmi and b/icons/turf/floors/floors.dmi differ diff --git a/icons/turf/walls/bunker.dmi b/icons/turf/walls/bunker.dmi index 6f7537e20f7c..d9d4f8a080cb 100644 Binary files a/icons/turf/walls/bunker.dmi and b/icons/turf/walls/bunker.dmi differ diff --git a/icons/turf/walls/dev/dev.dmi b/icons/turf/walls/dev/dev.dmi index 0c6025876b2e..4a1eaf6f7b6a 100644 Binary files a/icons/turf/walls/dev/dev.dmi and b/icons/turf/walls/dev/dev.dmi differ diff --git a/icons/turf/walls/floodgate.dmi b/icons/turf/walls/floodgate.dmi index 5b3f00abb597..f67e5a7a3fcc 100644 Binary files a/icons/turf/walls/floodgate.dmi and b/icons/turf/walls/floodgate.dmi differ diff --git a/icons/turf/walls/kutjevo/kutjevo.dmi b/icons/turf/walls/kutjevo/kutjevo.dmi index 5c8c0053e1bf..3aba82409af6 100644 Binary files a/icons/turf/walls/kutjevo/kutjevo.dmi and b/icons/turf/walls/kutjevo/kutjevo.dmi differ diff --git a/icons/turf/walls/solaris/solaris.dmi b/icons/turf/walls/solaris/solaris.dmi index 85d5c118a901..96865710abd7 100644 Binary files a/icons/turf/walls/solaris/solaris.dmi and b/icons/turf/walls/solaris/solaris.dmi differ diff --git a/icons/turf/walls/solaris/solaris_old.dmi b/icons/turf/walls/solaris/solaris_old.dmi index 59846bf0ad1c..2aca7b187508 100644 Binary files a/icons/turf/walls/solaris/solaris_old.dmi and b/icons/turf/walls/solaris/solaris_old.dmi differ diff --git a/icons/turf/walls/strata_outpost.dmi b/icons/turf/walls/strata_outpost.dmi index 36e20bdd176a..6043f7c32d8d 100644 Binary files a/icons/turf/walls/strata_outpost.dmi and b/icons/turf/walls/strata_outpost.dmi differ diff --git a/icons/turf/walls/windows.dmi b/icons/turf/walls/windows.dmi index b1b7c7ebfbe9..85f822873e68 100644 Binary files a/icons/turf/walls/windows.dmi and b/icons/turf/walls/windows.dmi differ diff --git a/maps/interiors/fancylocker.dmm b/maps/interiors/fancylocker.dmm index b26879d705f8..a6ecb6155e72 100644 --- a/maps/interiors/fancylocker.dmm +++ b/maps/interiors/fancylocker.dmm @@ -88,7 +88,7 @@ /area/vehicle/apc) "t" = ( /obj/structure/surface/table/woodentable/fancy, -/obj/structure/machinery/chem_dispenser/beer, +/obj/structure/machinery/chem_dispenser/soda/beer, /turf/open/floor/wood, /area/vehicle/apc) "u" = ( diff --git a/maps/map_files/CORSAT/Corsat.dmm b/maps/map_files/CORSAT/Corsat.dmm index bddc64a61ad2..3fefea9f08b0 100644 --- a/maps/map_files/CORSAT/Corsat.dmm +++ b/maps/map_files/CORSAT/Corsat.dmm @@ -22132,7 +22132,7 @@ /area/corsat/gamma/biodome/toxins) "biR" = ( /obj/structure/surface/table/woodentable, -/obj/structure/machinery/chem_dispenser/beer{ +/obj/structure/machinery/chem_dispenser/soda/beer{ dir = 8; pixel_x = 15 }, @@ -25197,7 +25197,7 @@ /area/corsat/sigma/south/offices) "bsN" = ( /obj/structure/surface/table/woodentable, -/obj/structure/machinery/chem_dispenser/beer{ +/obj/structure/machinery/chem_dispenser/soda/beer{ dir = 8 }, /turf/open/floor/corsat{ diff --git a/maps/map_files/Ice_Colony_v2/Ice_Colony_v2.dmm b/maps/map_files/Ice_Colony_v2/Ice_Colony_v2.dmm index 7ce999271a29..76257b973b43 100644 --- a/maps/map_files/Ice_Colony_v2/Ice_Colony_v2.dmm +++ b/maps/map_files/Ice_Colony_v2/Ice_Colony_v2.dmm @@ -14261,7 +14261,7 @@ /area/ice_colony/surface/bar/bar) "aPy" = ( /obj/structure/surface/table/woodentable, -/obj/structure/machinery/chem_dispenser/beer, +/obj/structure/machinery/chem_dispenser/soda/beer, /obj/structure/machinery/alarm{ dir = 1; pixel_y = -24 diff --git a/maps/map_files/Ice_Colony_v3/Shivas_Snowball.dmm b/maps/map_files/Ice_Colony_v3/Shivas_Snowball.dmm index a431aa368702..d221090da880 100644 --- a/maps/map_files/Ice_Colony_v3/Shivas_Snowball.dmm +++ b/maps/map_files/Ice_Colony_v3/Shivas_Snowball.dmm @@ -6004,7 +6004,7 @@ /turf/open/floor/plating, /area/shiva/interior/colony/s_admin) "aRc" = ( -/obj/structure/machinery/chem_dispenser/beer{ +/obj/structure/machinery/chem_dispenser/soda/beer{ pixel_y = 8 }, /obj/structure/surface/table/reinforced/prison, diff --git a/maps/map_files/Kutjevo/Kutjevo.dmm b/maps/map_files/Kutjevo/Kutjevo.dmm index 3d626437679a..e5a6a43cf617 100644 --- a/maps/map_files/Kutjevo/Kutjevo.dmm +++ b/maps/map_files/Kutjevo/Kutjevo.dmm @@ -381,7 +381,7 @@ /turf/open/floor/kutjevo/grey/plate, /area/kutjevo/interior/complex/med/cells) "azb" = ( -/obj/structure/machinery/chem_dispenser/beer{ +/obj/structure/machinery/chem_dispenser/soda/beer{ icon_state = "dispenser" }, /turf/open/floor/kutjevo/tan/multi_tiles, diff --git a/maps/map_files/LV522_Chances_Claim/LV522_Chances_Claim.dmm b/maps/map_files/LV522_Chances_Claim/LV522_Chances_Claim.dmm index 34eecc574c9c..cb5f023d59fa 100644 --- a/maps/map_files/LV522_Chances_Claim/LV522_Chances_Claim.dmm +++ b/maps/map_files/LV522_Chances_Claim/LV522_Chances_Claim.dmm @@ -2334,13 +2334,11 @@ }, /area/lv522/oob) "bzL" = ( -/obj/structure/machinery/space_heater/radiator/red{ - dir = 4 - }, -/turf/open/floor/prison{ - dir = 4; - icon_state = "darkyellowfull2" +/obj/structure/machinery/camera/autoname, +/obj/structure/machinery/light/small{ + dir = 1 }, +/turf/open/floor/plating, /area/lv522/indoors/lone_buildings/engineering) "bAc" = ( /obj/structure/filingcabinet/seeds{ @@ -3443,10 +3441,11 @@ /turf/open/asphalt/cement, /area/lv522/outdoors/colony_streets/east_central_street) "cfd" = ( -/obj/structure/surface/table/almayer, -/obj/structure/machinery/recharger, -/obj/effect/spawner/random/powercell, -/turf/open/floor/prison, +/obj/structure/closet/wardrobe/engineering_yellow, +/turf/open/floor/prison{ + dir = 4; + icon_state = "darkyellowfull2" + }, /area/lv522/indoors/lone_buildings/engineering) "cfg" = ( /obj/item/clothing/head/hardhat/white, @@ -3568,13 +3567,6 @@ }, /turf/open/auto_turf/shale/layer1, /area/lv522/landing_zone_2) -"cjf" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/prison{ - dir = 4; - icon_state = "darkyellowfull2" - }, -/area/lv522/indoors/lone_buildings/engineering) "cjv" = ( /obj/structure/bed/chair/comfy{ dir = 4 @@ -4784,6 +4776,12 @@ }, /turf/open/floor/corsat, /area/lv522/atmos/east_reactor) +"cNO" = ( +/obj/structure/machinery/colony_floodlight_switch{ + pixel_y = 30 + }, +/turf/open/floor/plating, +/area/lv522/indoors/lone_buildings/engineering) "cNQ" = ( /turf/open/floor/corsat{ dir = 8; @@ -7762,7 +7760,8 @@ }, /area/lv522/oob) "ebR" = ( -/obj/structure/closet/secure_closet/engineering_welding, +/obj/structure/surface/table/almayer, +/obj/effect/landmark/objective_landmark/close, /turf/open/floor/prison{ dir = 4; icon_state = "darkyellowfull2" @@ -8354,7 +8353,7 @@ /turf/open/floor/corsat{ icon_state = "marked" }, -/area/lv522/atmos/east_reactor/east) +/area/lv522/oob) "eow" = ( /obj/structure/tunnel{ pixel_x = 2; @@ -9813,6 +9812,18 @@ }, /turf/open/auto_turf/shale/layer1, /area/lv522/outdoors/nw_rockies) +"eXU" = ( +/obj/structure/machinery/power/terminal, +/obj/effect/decal/warning_stripes{ + icon_state = "N"; + pixel_y = 1 + }, +/obj/effect/decal/warning_stripes{ + icon_state = "E"; + pixel_x = 1 + }, +/turf/open/floor/plating, +/area/lv522/indoors/lone_buildings/engineering) "eXV" = ( /obj/structure/cargo_container/horizontal/blue/bottom{ pixel_x = 16 @@ -10351,6 +10362,17 @@ icon_state = "blue_plate" }, /area/lv522/indoors/a_block/admin) +"flC" = ( +/obj/structure/machinery/light/small, +/obj/structure/machinery/camera/autoname{ + dir = 1; + network = list("interrogation") + }, +/turf/open/floor/prison{ + dir = 4; + icon_state = "darkyellowfull2" + }, +/area/lv522/indoors/lone_buildings/engineering) "flI" = ( /obj/structure/surface/table/woodentable/fancy, /obj/item/ashtray/bronze{ @@ -11092,9 +11114,9 @@ icon_state = "gib6" }, /turf/open/asphalt/cement{ - icon_state = "cement12" + icon_state = "cement4" }, -/area/lv522/outdoors/colony_streets/south_west_street) +/area/lv522/outdoors/colony_streets/central_streets) "fCW" = ( /turf/open/floor/prison{ icon_state = "darkbrownfull2" @@ -11745,10 +11767,16 @@ }, /area/lv522/indoors/a_block/dorms) "fSv" = ( -/turf/open/floor/prison{ - dir = 4; - icon_state = "darkyellowfull2" +/obj/structure/surface/table/almayer, +/obj/item/clothing/head/beret/eng, +/obj/item/ammo_box/magazine/nailgun/empty{ + pixel_x = -6; + pixel_y = 12 + }, +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 9 }, +/turf/open/floor/prison, /area/lv522/indoors/lone_buildings/engineering) "fSR" = ( /obj/structure/surface/table/almayer, @@ -12196,6 +12224,12 @@ }, /turf/open/floor/carpet, /area/lv522/indoors/a_block/executive) +"gcX" = ( +/obj/structure/window_frame/strata/reinforced, +/turf/open/floor/corsat{ + icon_state = "marked" + }, +/area/lv522/indoors/lone_buildings/engineering) "gcY" = ( /obj/structure/cargo_container/ferret/left, /turf/open/auto_turf/shale/layer0, @@ -14028,7 +14062,7 @@ }, /area/lv522/atmos/east_reactor/east) "gUA" = ( -/obj/structure/machinery/recharge_station, +/obj/structure/closet/secure_closet/engineering_welding, /turf/open/floor/prison{ dir = 4; icon_state = "darkyellowfull2" @@ -14267,10 +14301,7 @@ }, /area/lv522/atmos/command_centre) "gZg" = ( -/obj/item/shard{ - icon_state = "medium" - }, -/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/secure_closet/engineering_electrical, /turf/open/floor/prison{ dir = 4; icon_state = "darkyellowfull2" @@ -16925,6 +16956,10 @@ icon_state = "brown" }, /area/lv522/atmos/east_reactor) +"icy" = ( +/obj/item/prop/alien/hugger, +/turf/open/floor/prison, +/area/lv522/indoors/lone_buildings/engineering) "icE" = ( /obj/structure/pipes/standard/simple/hidden/green, /obj/effect/decal/cleanable/dirt, @@ -17940,11 +17975,17 @@ }, /area/lv522/indoors/a_block/corpo/glass) "izp" = ( -/obj/structure/machinery/power/smes/buildable{ - capacity = 1e+006; - dir = 1 +/obj/structure/surface/table/almayer, +/obj/item/clothing/glasses/meson, +/obj/item/shard{ + icon_state = "medium" + }, +/obj/effect/landmark/objective_landmark/close, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison{ + dir = 4; + icon_state = "darkyellowfull2" }, -/turf/open/floor/plating, /area/lv522/indoors/lone_buildings/engineering) "izr" = ( /obj/structure/platform/stair_cut, @@ -19364,18 +19405,6 @@ icon_state = "browncorner" }, /area/lv522/atmos/east_reactor/south) -"jeo" = ( -/obj/structure/pipes/vents/pump, -/obj/effect/decal/cleanable/dirt, -/obj/structure/machinery/cm_vending/sorted/tech/electronics_storage{ - density = 0; - pixel_y = 16 - }, -/turf/open/floor/prison{ - dir = 4; - icon_state = "darkyellowfull2" - }, -/area/lv522/indoors/lone_buildings/engineering) "jey" = ( /obj/effect/landmark/structure_spawner/setup/distress/xeno_weed_node, /obj/effect/landmark/structure_spawner/setup/distress/xeno_nest, @@ -19728,7 +19757,10 @@ /turf/open/floor/plating, /area/lv522/indoors/c_block/cargo) "jkL" = ( -/obj/structure/closet/secure_closet/engineering_electrical, +/obj/structure/machinery/recharge_station, +/obj/item/shard{ + icon_state = "medium" + }, /turf/open/floor/prison{ dir = 4; icon_state = "darkyellowfull2" @@ -21213,13 +21245,6 @@ /obj/structure/reagent_dispensers/watertank, /turf/open/floor/plating/plating_catwalk/prison, /area/lv522/outdoors/nw_rockies) -"jPO" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/prison{ - dir = 10; - icon_state = "floor_marked" - }, -/area/lv522/indoors/lone_buildings/engineering) "jQa" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/prop/dam/crane{ @@ -21281,13 +21306,6 @@ icon_state = "darkpurplefull2" }, /area/lv522/indoors/a_block/dorms) -"jSG" = ( -/obj/effect/decal/cleanable/cobweb, -/turf/open/floor/prison{ - dir = 10; - icon_state = "floor_marked" - }, -/area/lv522/indoors/lone_buildings/engineering) "jSR" = ( /obj/structure/machinery/conveyor, /turf/open/floor/corsat{ @@ -21595,6 +21613,13 @@ icon_state = "brown" }, /area/lv522/atmos/east_reactor/south) +"jYy" = ( +/obj/structure/machinery/power/smes/buildable{ + capacity = 1e+006; + dir = 1 + }, +/turf/open/floor/plating, +/area/lv522/indoors/lone_buildings/engineering) "jYE" = ( /obj/structure/machinery/power/apc/weak{ dir = 1 @@ -21941,7 +21966,11 @@ }, /area/lv522/indoors/a_block/security) "kfi" = ( -/obj/structure/closet/toolcloset, +/obj/structure/surface/table/almayer, +/obj/effect/landmark/objective_landmark/close, +/obj/structure/extinguisher_cabinet{ + pixel_y = 30 + }, /turf/open/floor/prison{ dir = 4; icon_state = "darkyellowfull2" @@ -22486,6 +22515,14 @@ icon_state = "brown" }, /area/lv522/atmos/east_reactor/south) +"knT" = ( +/obj/structure/machinery/cm_vending/sorted/tech/tool_storage{ + density = 0; + pixel_x = -6; + pixel_y = 11 + }, +/turf/open/floor/prison, +/area/lv522/indoors/lone_buildings/engineering) "knW" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/machinery/camera/autoname{ @@ -23477,6 +23514,14 @@ icon_state = "floor_marked" }, /area/lv522/outdoors/colony_streets/north_west_street) +"kIs" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "NE-out"; + pixel_x = 1; + pixel_y = 1 + }, +/turf/open/floor/plating, +/area/lv522/indoors/lone_buildings/engineering) "kIM" = ( /obj/item/ammo_magazine/rifle/m4ra/ap{ current_rounds = 0 @@ -25813,10 +25858,17 @@ }, /area/lv522/indoors/a_block/kitchen) "lHu" = ( -/obj/structure/machinery/power/terminal{ - dir = 1 +/obj/effect/decal/cleanable/dirt, +/obj/structure/machinery/disposal{ + density = 0; + layer = 3.1; + pixel_x = -6; + pixel_y = 16 }, -/turf/open/floor/plating, +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 6 + }, +/turf/open/floor/plating/plating_catwalk/prison, /area/lv522/indoors/lone_buildings/engineering) "lHH" = ( /obj/effect/decal/cleanable/dirt, @@ -25864,9 +25916,6 @@ icon_state = "greenfull" }, /area/lv522/indoors/b_block/bridge) -"lIC" = ( -/turf/open/floor/prison, -/area/lv522/indoors/lone_buildings/engineering) "lIM" = ( /obj/structure/machinery/door/poddoor/almayer/closed{ id = "Corpo Vault"; @@ -25928,17 +25977,15 @@ }, /area/lv522/atmos/east_reactor/south) "lKu" = ( -/obj/structure/surface/table/almayer, -/obj/item/clothing/glasses/meson, -/obj/item/shard{ - icon_state = "medium" +/obj/structure/machinery/power/smes/buildable{ + capacity = 1e+006; + dir = 1 }, -/obj/effect/landmark/objective_landmark/close, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/prison{ - dir = 4; - icon_state = "darkyellowfull2" +/obj/effect/decal/warning_stripes{ + icon_state = "E"; + pixel_x = 1 }, +/turf/open/floor/plating, /area/lv522/indoors/lone_buildings/engineering) "lKC" = ( /obj/effect/landmark/structure_spawner/setup/distress/xeno_weed_node, @@ -26701,6 +26748,11 @@ icon_state = "cement14" }, /area/lv522/outdoors/colony_streets/south_street) +"mdp" = ( +/obj/effect/decal/cleanable/blood/oil, +/obj/item/tool/weldingtool, +/turf/open/floor/plating, +/area/lv522/indoors/lone_buildings/engineering) "mdr" = ( /obj/structure/bed/chair{ dir = 4 @@ -27497,6 +27549,14 @@ /obj/effect/landmark/lv624/fog_blocker/short, /turf/closed/wall/strata_outpost/reinforced, /area/lv522/oob/w_y_vault) +"mwC" = ( +/obj/item/clothing/head/welding, +/obj/effect/decal/warning_stripes{ + icon_state = "E"; + pixel_x = 1 + }, +/turf/open/floor/plating, +/area/lv522/indoors/lone_buildings/engineering) "mwT" = ( /obj/structure/prop/dam/truck, /obj/structure/prop/holidays/wreath{ @@ -29078,9 +29138,6 @@ icon_state = "18" }, /area/lv522/landing_zone_forecon/UD6_Typhoon) -"nfx" = ( -/turf/open/floor/plating, -/area/lv522/indoors/lone_buildings/engineering) "nfP" = ( /obj/structure/pipes/standard/simple/hidden/green{ dir = 4 @@ -29284,6 +29341,13 @@ icon_state = "cement12" }, /area/lv522/outdoors/nw_rockies) +"nky" = ( +/obj/structure/machinery/power/apc/weak, +/turf/open/floor/prison{ + dir = 4; + icon_state = "darkyellowfull2" + }, +/area/lv522/indoors/lone_buildings/engineering) "nkX" = ( /obj/structure/pipes/standard/simple/hidden/green{ dir = 4 @@ -29710,8 +29774,11 @@ /turf/open/floor/plating/plating_catwalk/prison, /area/lv522/indoors/a_block/security) "nsd" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating/plating_catwalk/prison, +/obj/effect/decal/cleanable/generic, +/turf/open/floor/prison{ + dir = 4; + icon_state = "darkyellowfull2" + }, /area/lv522/indoors/lone_buildings/engineering) "nsr" = ( /obj/structure/surface/table/almayer, @@ -30140,6 +30207,11 @@ }, /turf/open/floor/prison, /area/lv522/indoors/a_block/dorms/glass) +"nEY" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/pipes/standard/simple/hidden/green, +/turf/open/floor/plating/plating_catwalk/prison, +/area/lv522/indoors/lone_buildings/engineering) "nFj" = ( /turf/open/floor/plating, /area/lv522/landing_zone_1) @@ -30431,8 +30503,7 @@ /turf/open/auto_turf/shale/layer1, /area/lv522/landing_zone_1) "nMd" = ( -/obj/structure/surface/table/almayer, -/obj/effect/landmark/objective_landmark/close, +/obj/structure/closet/toolcloset, /turf/open/floor/prison{ dir = 4; icon_state = "darkyellowfull2" @@ -31935,13 +32006,13 @@ /turf/closed/wall/strata_ice/dirty, /area/lv522/oob) "ooh" = ( -/obj/structure/surface/table/almayer, -/obj/item/clothing/head/beret/eng, -/obj/item/ammo_box/magazine/nailgun/empty{ - pixel_x = -6; - pixel_y = 12 +/obj/structure/machinery/door/airlock/multi_tile/almayer/generic{ + name = "\improper Generator Room"; + welded = 1 + }, +/turf/open/floor/corsat{ + icon_state = "marked" }, -/turf/open/floor/prison, /area/lv522/indoors/lone_buildings/engineering) "oot" = ( /turf/open/floor/prison{ @@ -32217,6 +32288,15 @@ icon_state = "blue_plate" }, /area/lv522/indoors/a_block/admin) +"otM" = ( +/obj/structure/machinery/space_heater/radiator/red{ + dir = 4 + }, +/turf/open/floor/prison{ + dir = 4; + icon_state = "darkyellowfull2" + }, +/area/lv522/indoors/lone_buildings/engineering) "otQ" = ( /turf/open/floor/corsat{ icon_state = "marked" @@ -33072,12 +33152,8 @@ /turf/open/asphalt/cement, /area/lv522/outdoors/colony_streets/north_west_street) "oPc" = ( -/obj/item/clothing/gloves/yellow, -/obj/structure/machinery/space_heater/radiator/red, -/turf/open/floor/prison{ - dir = 4; - icon_state = "darkyellowfull2" - }, +/obj/structure/pipes/standard/simple/hidden/green, +/turf/open/floor/plating/plating_catwalk/prison, /area/lv522/indoors/lone_buildings/engineering) "oPs" = ( /obj/effect/decal/cleanable/dirt, @@ -33266,8 +33342,14 @@ }, /area/lv522/indoors/a_block/dorms) "oTp" = ( -/obj/structure/machinery/light, -/turf/open/floor/plating, +/obj/structure/surface/table/almayer, +/obj/item/ammo_box/magazine/nailgun/empty{ + pixel_y = 5 + }, +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 4 + }, +/turf/open/floor/prison, /area/lv522/indoors/lone_buildings/engineering) "oTD" = ( /obj/item/lightstick/red/spoke/planted{ @@ -33402,13 +33484,6 @@ icon_state = "marked" }, /area/lv522/indoors/c_block/mining) -"oWb" = ( -/obj/effect/landmark/static_comms/net_one, -/turf/open/floor/prison{ - dir = 10; - icon_state = "floor_marked" - }, -/area/lv522/indoors/lone_buildings/engineering) "oWq" = ( /obj/structure/pipes/standard/simple/hidden/green, /turf/open/floor/corsat{ @@ -34570,6 +34645,11 @@ icon_state = "cell_stripe" }, /area/lv522/indoors/lone_buildings/storage_blocks) +"pwT" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/pipes/standard/simple/hidden/green, +/turf/open/floor/prison, +/area/lv522/indoors/lone_buildings/engineering) "pwW" = ( /obj/structure/pipes/standard/simple/hidden/green{ dir = 4 @@ -34876,13 +34956,21 @@ /turf/open/floor/prison, /area/lv522/indoors/b_block/hydro) "pCT" = ( -/obj/structure/machinery/disposal, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/prison, +/obj/structure/machinery/power/terminal, +/obj/effect/decal/warning_stripes{ + icon_state = "N"; + pixel_y = 1 + }, +/turf/open/floor/plating, /area/lv522/indoors/lone_buildings/engineering) "pCU" = ( -/obj/item/prop/alien/hugger, -/turf/open/floor/prison, +/obj/item/ammo_magazine/smg/nailgun{ + current_rounds = 0 + }, +/turf/open/floor/prison{ + dir = 4; + icon_state = "darkyellowfull2" + }, /area/lv522/indoors/lone_buildings/engineering) "pCW" = ( /obj/structure/pipes/standard/simple/hidden/green{ @@ -35887,10 +35975,6 @@ /obj/structure/pipes/standard/simple/hidden/green{ dir = 4 }, -/obj/structure/machinery/camera/autoname, -/obj/structure/machinery/light/small{ - dir = 1 - }, /turf/open/floor/prison{ dir = 4; icon_state = "darkyellowfull2" @@ -35904,10 +35988,9 @@ }, /area/lv522/indoors/a_block/admin) "pXk" = ( -/obj/structure/surface/table/almayer, -/obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/random/powercell, -/obj/structure/machinery/cell_charger, +/obj/structure/machinery/power/monitor{ + name = "Main Power Grid Monitoring" + }, /turf/open/floor/prison{ dir = 4; icon_state = "darkyellowfull2" @@ -36549,11 +36632,7 @@ }, /area/lv522/indoors/a_block/admin) "qmA" = ( -/obj/effect/decal/cleanable/generic, -/turf/open/floor/prison{ - dir = 4; - icon_state = "darkyellowfull2" - }, +/turf/open/floor/plating, /area/lv522/indoors/lone_buildings/engineering) "qmD" = ( /obj/structure/fence, @@ -38018,12 +38097,10 @@ }, /area/lv522/indoors/b_block/bar) "qOa" = ( -/obj/structure/machinery/cm_vending/sorted/tech/comp_storage{ - density = 0; - pixel_x = -4; - pixel_y = 12 +/turf/open/floor/prison{ + dir = 4; + icon_state = "darkyellowfull2" }, -/turf/open/floor/prison, /area/lv522/indoors/lone_buildings/engineering) "qOi" = ( /obj/structure/prop/invuln/fire{ @@ -38538,13 +38615,11 @@ /turf/open/floor/plating, /area/lv522/landing_zone_1/tunnel) "qWf" = ( -/obj/structure/machinery/light{ - dir = 8 - }, -/turf/open/floor/prison{ - dir = 4; - icon_state = "darkyellowfull2" +/obj/effect/decal/cleanable/dirt, +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 4 }, +/turf/open/floor/prison, /area/lv522/indoors/lone_buildings/engineering) "qWt" = ( /obj/structure/window/framed/strata/reinforced, @@ -38704,12 +38779,17 @@ }, /area/lv522/indoors/a_block/hallway) "qZJ" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/machinery/camera/autoname{ - dir = 1 +/obj/structure/machinery/light{ + dir = 8 + }, +/obj/effect/decal/warning_stripes{ + icon_state = "N"; + pixel_y = 1 + }, +/turf/open/floor/prison{ + dir = 4; + icon_state = "darkyellowfull2" }, -/obj/structure/machinery/light/small, -/turf/open/floor/plating, /area/lv522/indoors/lone_buildings/engineering) "qZT" = ( /obj/item/prop/colony/usedbandage{ @@ -38832,11 +38912,9 @@ /turf/open/floor/wood, /area/lv522/indoors/a_block/fitness/glass) "rbc" = ( -/obj/item/shard{ - icon_state = "medium" - }, /obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating/plating_catwalk/prison, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/prison, /area/lv522/indoors/lone_buildings/engineering) "rbj" = ( /obj/item/weapon/twohanded/folded_metal_chair, @@ -39902,6 +39980,11 @@ /obj/structure/machinery/light/double, /turf/open/floor/wood, /area/lv522/indoors/a_block/fitness/glass) +"rwM" = ( +/turf/open/floor/corsat{ + icon_state = "marked" + }, +/area/lv522/indoors/lone_buildings/engineering) "rwR" = ( /obj/structure/desertdam/decals/road_edge{ icon_state = "road_edge_decal3"; @@ -40378,14 +40461,10 @@ }, /area/lv522/outdoors/colony_streets/south_west_street) "rIn" = ( -/obj/item/ammo_magazine/smg/nailgun{ - current_rounds = 0 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/prison{ - dir = 4; - icon_state = "darkyellowfull2" +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 10 }, +/turf/open/floor/plating/plating_catwalk/prison, /area/lv522/indoors/lone_buildings/engineering) "rIr" = ( /obj/structure/stairs/perspective{ @@ -41188,12 +41267,11 @@ /turf/open/auto_turf/shale/layer0, /area/lv522/outdoors/colony_streets/north_street) "rZg" = ( -/obj/structure/machinery/cm_vending/sorted/tech/tool_storage{ - density = 0; - pixel_x = 5; - pixel_y = 11 +/obj/effect/decal/warning_stripes{ + icon_state = "E"; + pixel_x = 1 }, -/turf/open/floor/prison, +/turf/open/floor/plating, /area/lv522/indoors/lone_buildings/engineering) "rZi" = ( /obj/structure/pipes/standard/simple/hidden/green, @@ -42558,13 +42636,10 @@ }, /area/lv522/indoors/a_block/security/glass) "sEa" = ( -/obj/structure/extinguisher_cabinet{ - pixel_y = 30 - }, -/turf/open/floor/prison{ - dir = 4; - icon_state = "darkyellowfull2" +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 4 }, +/turf/open/floor/prison, /area/lv522/indoors/lone_buildings/engineering) "sEc" = ( /obj/structure/bed/bedroll{ @@ -42794,16 +42869,6 @@ }, /turf/open/floor/prison, /area/lv522/indoors/lone_buildings/storage_blocks) -"sJl" = ( -/obj/structure/machinery/power/apc/weak{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/prison{ - dir = 4; - icon_state = "darkyellowfull2" - }, -/area/lv522/indoors/lone_buildings/engineering) "sJI" = ( /obj/structure/surface/table/almayer, /obj/item/key/cargo_train, @@ -43249,15 +43314,10 @@ }, /area/lv522/outdoors/n_rockies) "sQD" = ( -/obj/structure/machinery/colony_floodlight_switch{ - pixel_y = 30 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/generic, -/turf/open/floor/prison{ - dir = 4; - icon_state = "darkyellowfull2" +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 5 }, +/turf/open/floor/plating/plating_catwalk/prison, /area/lv522/indoors/lone_buildings/engineering) "sQI" = ( /obj/effect/decal/cleanable/generic, @@ -43555,9 +43615,10 @@ }, /area/lv522/outdoors/colony_streets/north_west_street) "sXM" = ( -/obj/structure/machinery/power/monitor{ - name = "Main Power Grid Monitoring" - }, +/obj/structure/surface/table/almayer, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/powercell, +/obj/structure/machinery/cell_charger, /turf/open/floor/prison{ dir = 4; icon_state = "darkyellowfull2" @@ -46281,6 +46342,17 @@ icon_state = "floor_plate" }, /area/lv522/indoors/lone_buildings/storage_blocks) +"udM" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/warning_stripes{ + icon_state = "NW-out"; + pixel_y = 1 + }, +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 6 + }, +/turf/open/floor/plating/plating_catwalk/prison, +/area/lv522/indoors/lone_buildings/engineering) "udR" = ( /turf/open/floor/corsat{ dir = 4; @@ -46721,8 +46793,10 @@ /area/lv522/outdoors/colony_streets/north_east_street) "ukp" = ( /obj/structure/surface/table/almayer, -/obj/item/ammo_box/magazine/nailgun/empty{ - pixel_y = 5 +/obj/structure/machinery/recharger, +/obj/effect/spawner/random/powercell, +/obj/structure/pipes/standard/simple/hidden/green{ + dir = 10 }, /turf/open/floor/prison, /area/lv522/indoors/lone_buildings/engineering) @@ -47043,12 +47117,10 @@ }, /area/lv522/outdoors/colony_streets/north_street) "usn" = ( -/obj/structure/machinery/light{ - dir = 4 - }, +/obj/effect/landmark/static_comms/net_one, /turf/open/floor/prison{ - dir = 4; - icon_state = "darkyellowfull2" + dir = 10; + icon_state = "floor_marked" }, /area/lv522/indoors/lone_buildings/engineering) "usy" = ( @@ -49144,10 +49216,14 @@ }, /area/lv522/indoors/a_block/security) "vir" = ( -/obj/structure/machinery/power/geothermal{ - fail_rate = 5 +/obj/structure/closet/wardrobe/engineering_yellow, +/obj/effect/decal/warning_stripes{ + icon_state = "SW-out" + }, +/turf/open/floor/prison{ + dir = 4; + icon_state = "darkyellowfull2" }, -/turf/open/floor/plating, /area/lv522/indoors/lone_buildings/engineering) "viA" = ( /obj/item/lightstick/red/spoke/planted{ @@ -49937,11 +50013,10 @@ }, /area/lv522/indoors/a_block/medical) "vzc" = ( -/obj/structure/closet/wardrobe/engineering_yellow, -/turf/open/floor/prison{ - dir = 4; - icon_state = "darkyellowfull2" +/obj/structure/machinery/power/geothermal{ + fail_rate = 5 }, +/turf/open/floor/plating, /area/lv522/indoors/lone_buildings/engineering) "vzg" = ( /obj/item/stack/rods{ @@ -50339,13 +50414,20 @@ /turf/open/floor/plating/plating_catwalk/prison, /area/lv522/indoors/a_block/dorms) "vGP" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, +/turf/open/floor/prison{ + dir = 10; + icon_state = "floor_marked" + }, /area/lv522/indoors/lone_buildings/engineering) "vHo" = ( -/obj/item/clothing/head/welding, /obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, +/obj/effect/decal/warning_stripes{ + icon_state = "W" + }, +/turf/open/floor/prison{ + dir = 4; + icon_state = "darkyellowfull2" + }, /area/lv522/indoors/lone_buildings/engineering) "vHw" = ( /obj/structure/barricade/wooden{ @@ -51408,12 +51490,17 @@ }, /area/lv522/indoors/lone_buildings/storage_blocks) "wbj" = ( -/obj/structure/machinery/door/airlock/multi_tile/almayer/generic{ - name = "\improper Generator Room" +/obj/structure/machinery/cm_vending/sorted/tech/comp_storage{ + density = 0; + pixel_x = 13; + pixel_y = 11 }, -/turf/open/floor/corsat{ - icon_state = "marked" +/obj/structure/machinery/cm_vending/sorted/tech/electronics_storage{ + density = 0; + pixel_x = -13; + pixel_y = 11 }, +/turf/open/floor/prison, /area/lv522/indoors/lone_buildings/engineering) "wbt" = ( /obj/structure/pipes/standard/simple/hidden/green, @@ -51547,9 +51634,7 @@ }, /area/lv522/indoors/a_block/security/glass) "wdj" = ( -/turf/open/floor/corsat{ - icon_state = "marked" - }, +/turf/open/floor/prison, /area/lv522/indoors/lone_buildings/engineering) "wdy" = ( /turf/open/asphalt/cement{ @@ -53140,7 +53225,11 @@ /turf/open/floor/prison, /area/lv522/indoors/c_block/mining) "wOo" = ( -/turf/open/floor/plating/plating_catwalk/prison, +/obj/structure/pipes/vents/pump, +/turf/open/floor/prison{ + dir = 4; + icon_state = "darkyellowfull2" + }, /area/lv522/indoors/lone_buildings/engineering) "wOu" = ( /obj/structure/desertdam/decals/road_edge{ @@ -53779,10 +53868,11 @@ /turf/open/auto_turf/shale/layer0, /area/lv522/outdoors/colony_streets/south_east_street) "xdD" = ( -/obj/structure/window_frame/strata/reinforced, -/turf/open/floor/corsat{ - icon_state = "marked" +/obj/structure/pipes/standard/simple/hidden/green, +/obj/item/shard{ + icon_state = "medium" }, +/turf/open/floor/plating/plating_catwalk/prison, /area/lv522/indoors/lone_buildings/engineering) "xdF" = ( /obj/structure/pipes/standard/simple/hidden/green{ @@ -54679,6 +54769,16 @@ icon_state = "cement1" }, /area/lv522/outdoors/colony_streets/central_streets) +"xzj" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/machinery/light{ + dir = 4 + }, +/turf/open/floor/prison{ + dir = 4; + icon_state = "darkyellowfull2" + }, +/area/lv522/indoors/lone_buildings/engineering) "xzn" = ( /turf/open/floor/prison, /area/lv522/atmos/outdoor) @@ -55117,10 +55217,14 @@ /turf/open/floor/plating/plating_catwalk/prison, /area/lv522/indoors/a_block/admin) "xJX" = ( -/obj/item/tool/weldingtool, -/obj/effect/decal/cleanable/blood/oil, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, +/obj/effect/decal/cleanable/generic, +/obj/effect/decal/warning_stripes{ + icon_state = "W" + }, +/turf/open/floor/prison{ + dir = 4; + icon_state = "darkyellowfull2" + }, /area/lv522/indoors/lone_buildings/engineering) "xKc" = ( /obj/structure/barricade/handrail{ @@ -55928,6 +56032,16 @@ }, /turf/open/asphalt/cement, /area/lv522/outdoors/colony_streets/north_east_street) +"xZS" = ( +/obj/item/clothing/gloves/yellow, +/obj/structure/machinery/space_heater/radiator/red{ + pixel_y = 26 + }, +/turf/open/floor/prison{ + dir = 4; + icon_state = "darkyellowfull2" + }, +/area/lv522/indoors/lone_buildings/engineering) "yae" = ( /obj/structure/surface/table/almayer, /obj/item/paper_bin{ @@ -61714,16 +61828,16 @@ ruU fXx nJv xVd -vir -vir -vir +vGP +usn +nJv nJv rCa rCa nJv -nJv -jSG -oWb +vzc +vzc +vzc xVd nJv hpq @@ -61940,18 +62054,18 @@ umf ruU fXx nJv -vir +nJv +vGP vGP -nfx qZJ +otM +wdj +qOa nJv -sJl -lIC -qWf bzL -jPO -jPO -nJv +qmA +qmA +vzc nJv hpq ofi @@ -62169,15 +62283,15 @@ fAA nJv vir xJX -vGP -nfx -nJv +vHo +udM +nEY sQD nsd -nsd -nsd +nJv +cNO qmA -cjf +mdp vzc nJv gpB @@ -62394,17 +62508,17 @@ ruU ruU taj nJv -vir -nfx -vHo +cfd +vIy +vIy oTp -nJv +knT sEa -vIy -ukp +nky +nJv rZg -vIy -vIy +mwC +kIs vzc nJv gpB @@ -62620,20 +62734,20 @@ ruU ruU ruU fXx -xvQ -izp +nJv +nJv lHu -vIy +pwT fSv wbj rIn wOo ooh qOa -nsd +vIy pCT -nJv -nJv +jYy +xvQ hpq ofi tZh @@ -62846,22 +62960,22 @@ ruU ruU ruU ruU -fXx -xvQ +fCU +kvq izp -lHu -vIy -fSv +qWf +icy +wdj +wdj wdj -cjf pCU -lIC -lIC +rwM +qOa vIy -lIC +eXU lKu -kvq -fCU +xvQ +hpq ofi max max @@ -63076,16 +63190,16 @@ ruU fXx xvQ sXM -vIy -vIy +ukp +xdD oPc +nEY +sQD +flC nJv -jeo -nsd -wOo -nsd +xZS rbc -cfd +vIy pXk xvQ hpq @@ -63306,10 +63420,10 @@ xVd kfi ebR jkL -nJv +xzj pWW qLa -usn +nJv gZg gUA nMd @@ -63531,14 +63645,14 @@ fXx gbB nJv xvQ -xvQ -xvQ +gcX +kvq ivK wng hpO ivK -kvq -xdD +xvQ +xvQ xvQ nJv kmq diff --git a/maps/map_files/LV624/LV624.dmm b/maps/map_files/LV624/LV624.dmm index cec27c56b079..b84ed33ef0e4 100644 --- a/maps/map_files/LV624/LV624.dmm +++ b/maps/map_files/LV624/LV624.dmm @@ -12062,7 +12062,7 @@ /area/lv624/lazarus/comms) "aZi" = ( /obj/structure/surface/table/woodentable/fancy, -/obj/structure/machinery/chem_dispenser/beer{ +/obj/structure/machinery/chem_dispenser/soda/beer{ pixel_y = 26 }, /obj/effect/landmark/item_pool_spawner/survivor_ammo/buckshot, @@ -14106,10 +14106,9 @@ /turf/open/gm/grass/grass1, /area/lv624/ground/colony/west_nexus_road) "fja" = ( -/obj/item/attachable/bayonet{ +/obj/item/weapon/unathiknife{ desc = "A curved blade made of a strange material. It looks both old and very sharp."; force = 30; - icon_state = "unathiknife"; name = "\improper alien blade"; throwforce = 26 }, @@ -17272,10 +17271,9 @@ /turf/open/gm/dirt, /area/lv624/ground/caves/sand_temple) "nED" = ( -/obj/item/attachable/bayonet{ +/obj/item/weapon/unathiknife{ desc = "A curved blade made of a strange material. It looks both old and very sharp."; force = 30; - icon_state = "unathiknife"; name = "\improper alien blade"; throwforce = 26 }, diff --git a/maps/map_files/LV624/standalone/sandtemple-jungle.dmm b/maps/map_files/LV624/standalone/sandtemple-jungle.dmm index 3b5a0176fb01..770d6a93473e 100644 --- a/maps/map_files/LV624/standalone/sandtemple-jungle.dmm +++ b/maps/map_files/LV624/standalone/sandtemple-jungle.dmm @@ -55,10 +55,9 @@ /turf/closed/wall/strata_ice/jungle, /area/lv624/ground/jungle/south_west_jungle) "lR" = ( -/obj/item/attachable/bayonet{ +/obj/item/weapon/unathiknife{ desc = "A curved blade made of a strange material. It looks both old and very sharp."; force = 30; - icon_state = "unathiknife"; name = "\improper alien blade"; throwforce = 26 }, diff --git a/maps/map_files/New_Varadero/New_Varadero.dmm b/maps/map_files/New_Varadero/New_Varadero.dmm index 7969b1a120a0..139b956c9622 100644 --- a/maps/map_files/New_Varadero/New_Varadero.dmm +++ b/maps/map_files/New_Varadero/New_Varadero.dmm @@ -6101,7 +6101,7 @@ /area/varadero/interior/hall_SE) "fvw" = ( /obj/structure/surface/table/reinforced/prison, -/obj/structure/machinery/chem_dispenser/beer{ +/obj/structure/machinery/chem_dispenser/soda/beer{ pixel_y = 8 }, /turf/open/floor/shiva{ diff --git a/maps/map_files/Sorokyne_Strata/Sorokyne_Strata.dmm b/maps/map_files/Sorokyne_Strata/Sorokyne_Strata.dmm index 2da1f3f4295d..17f2e577a120 100644 --- a/maps/map_files/Sorokyne_Strata/Sorokyne_Strata.dmm +++ b/maps/map_files/Sorokyne_Strata/Sorokyne_Strata.dmm @@ -9733,7 +9733,7 @@ }, /area/strata/ag/interior/outpost/canteen) "aDr" = ( -/obj/structure/machinery/chem_dispenser/beer, +/obj/structure/machinery/chem_dispenser/soda/beer, /turf/open/floor/interior/plastic, /area/strata/ag/interior/outpost/canteen) "aDs" = ( @@ -10184,7 +10184,7 @@ }, /area/strata/ag/interior/dorms) "aEK" = ( -/obj/structure/machinery/chem_dispenser/beer, +/obj/structure/machinery/chem_dispenser/soda/beer, /obj/structure/surface/table/reinforced/prison, /turf/open/floor/strata{ icon_state = "orange_tile" @@ -12088,7 +12088,7 @@ }, /area/strata/ag/interior/outpost/admin) "aKQ" = ( -/obj/structure/machinery/chem_dispenser/beer, +/obj/structure/machinery/chem_dispenser/soda/beer, /obj/structure/surface/table/reinforced/prison, /turf/open/floor/strata{ dir = 4; diff --git a/maps/map_files/USS_Almayer/USS_Almayer.dmm b/maps/map_files/USS_Almayer/USS_Almayer.dmm index b15ee29dd20a..15f92fe53502 100644 --- a/maps/map_files/USS_Almayer/USS_Almayer.dmm +++ b/maps/map_files/USS_Almayer/USS_Almayer.dmm @@ -837,8 +837,8 @@ /area/almayer/living/basketball) "acJ" = ( /mob/living/silicon/decoy/ship_ai{ - pixel_y = -16; - layer = 2.98 + layer = 2.98; + pixel_y = -16 }, /obj/structure/blocker/invisible_wall, /obj/effect/decal/warning_stripes{ @@ -2464,22 +2464,22 @@ /obj/structure/machinery/door_control{ id = "ARES StairsLock"; name = "ARES Exterior Lockdown Override"; - req_one_access_txt = "90;91;92"; + pixel_x = 8; pixel_y = -24; - pixel_x = 8 + req_one_access_txt = "90;91;92" }, /obj/structure/machinery/door_control{ id = "ARES Emergency"; name = "ARES Emergency Lockdown Override"; - req_one_access_txt = "91;92"; - pixel_y = -24 + pixel_y = -24; + req_one_access_txt = "91;92" }, /obj/structure/machinery/door_control{ id = "Brig Lockdown Shutters"; name = "Brig Lockdown Override"; - req_access_txt = "1;3"; pixel_x = -8; - pixel_y = -24 + pixel_y = -24; + req_access_txt = "1;3" }, /turf/open/floor/wood/ship, /area/almayer/living/commandbunks) @@ -2839,6 +2839,10 @@ pixel_y = 7 }, /obj/effect/decal/cleanable/blood/oil, +/obj/structure/machinery/computer/working_joe{ + dir = 4; + pixel_x = -17 + }, /turf/open/floor/almayer{ dir = 8; icon_state = "silver" @@ -5322,7 +5326,13 @@ "are" = ( /obj/structure/machinery/computer/demo_sim{ dir = 4; - pixel_x = -16 + pixel_x = -17; + pixel_y = 8 + }, +/obj/structure/machinery/computer/working_joe{ + dir = 4; + pixel_x = -17; + pixel_y = -8 }, /turf/open/floor/almayer, /area/almayer/engineering/engineering_workshop/hangar) @@ -5816,9 +5826,9 @@ /obj/structure/machinery/door_control{ id = "ARES StairsUpper"; name = "ARES Core Access"; - req_one_access_txt = "1;200;90;91;92"; + pixel_x = -24; pixel_y = 24; - pixel_x = -24 + req_one_access_txt = "1;200;90;91;92" }, /turf/open/floor/almayer/no_build{ icon_state = "ai_floors" @@ -5840,9 +5850,9 @@ "asG" = ( /obj/structure/surface/table/reinforced/almayer_B{ climbable = 0; + indestructible = 1; unacidable = 1; - unslashable = 1; - indestructible = 1 + unslashable = 1 }, /turf/open/floor/almayer/no_build{ icon_state = "ai_floors" @@ -7084,34 +7094,34 @@ /obj/structure/machinery/door_control{ id = "ARES StairsUpper"; name = "ARES Core Access"; - req_one_access_txt = "91;92"; + pixel_x = -10; pixel_y = -24; - pixel_x = -10 + req_one_access_txt = "91;92" }, /obj/structure/machinery/door_control{ id = "ARES StairsLock"; name = "ARES Exterior Lockdown"; - req_one_access_txt = "91;92"; - pixel_y = -24 + pixel_y = -24; + req_one_access_txt = "91;92" }, /obj/structure/surface/table/reinforced/almayer_B{ climbable = 0; + indestructible = 1; unacidable = 1; - unslashable = 1; - indestructible = 1 + unslashable = 1 }, /obj/structure/transmitter/rotary{ - phone_color = "blue"; - phone_id = "AI Reception"; + name = "AI Reception Telephone"; phone_category = "ARES"; - name = "AI Reception Telephone" + phone_color = "blue"; + phone_id = "AI Reception" }, /obj/structure/machinery/door_control{ id = "ARES Emergency"; name = "ARES Emergency Lockdown"; - req_one_access_txt = "91;92"; + pixel_x = 10; pixel_y = -24; - pixel_x = 10 + req_one_access_txt = "91;92" }, /turf/open/floor/almayer/no_build{ icon_state = "ai_floors" @@ -7125,9 +7135,9 @@ }, /obj/structure/surface/table/reinforced/almayer_B{ climbable = 0; + indestructible = 1; unacidable = 1; - unslashable = 1; - indestructible = 1 + unslashable = 1 }, /obj/item/paper_bin/uscm{ pixel_y = 6 @@ -9677,6 +9687,9 @@ /area/almayer/shipboard/brig/main_office) "aEm" = ( /obj/structure/surface/table/almayer, +/obj/structure/machinery/computer/working_joe{ + dir = 4 + }, /turf/open/floor/almayer{ icon_state = "plate" }, @@ -10322,6 +10335,10 @@ }, /area/almayer/living/numbertwobunks) "aHo" = ( +/obj/structure/machinery/computer/working_joe{ + dir = 4; + pixel_x = -17 + }, /turf/open/floor/almayer{ dir = 8; icon_state = "orange" @@ -10992,31 +11009,31 @@ }, /obj/structure/machinery/door_control{ id = "ARES Interior"; + indestructible = 1; name = "ARES Chamber Lockdown"; - req_one_access_txt = "1;200;90;91;92"; pixel_x = 24; pixel_y = -8; - indestructible = 1 + req_one_access_txt = "1;200;90;91;92" }, /obj/structure/machinery/door_control{ id = "ARES Railing"; + indestructible = 1; name = "ARES Chamber Railings"; - req_one_access_txt = "91;92"; - pixel_x = 24; needs_power = 0; - indestructible = 1 + pixel_x = 24; + req_one_access_txt = "91;92" }, /obj/structure/machinery/door/poddoor/railing{ + closed_layer = 4.1; + density = 0; dir = 2; id = "ARES Railing"; - unslashable = 0; - unacidable = 0; - pixel_y = -1; - pixel_x = -1; + layer = 2.1; open_layer = 2.1; - closed_layer = 4.1; - density = 0; - layer = 2.1 + pixel_x = -1; + pixel_y = -1; + unacidable = 0; + unslashable = 0 }, /turf/open/floor/almayer/no_build{ icon_state = "ai_floors" @@ -11990,7 +12007,9 @@ /obj/structure/pipes/vents/pump{ dir = 4 }, -/turf/open/floor/almayer, +/turf/open/floor/almayer{ + icon_state = "red" + }, /area/almayer/squads/alpha) "aPk" = ( /obj/structure/pipes/standard/simple/hidden/supply{ @@ -12002,10 +12021,14 @@ }, /area/almayer/command/lifeboat) "aPl" = ( -/obj/structure/pipes/standard/simple/hidden/supply{ - dir = 4 +/obj/structure/machinery/cm_vending/clothing/marine/alpha{ + density = 0; + layer = 4.1; + pixel_y = -29 + }, +/turf/open/floor/almayer{ + icon_state = "plate" }, -/turf/open/floor/almayer, /area/almayer/squads/alpha) "aPm" = ( /obj/structure/closet/firecloset, @@ -12014,13 +12037,14 @@ }, /area/almayer/hallways/aft_hallway) "aPn" = ( -/obj/structure/pipes/standard/simple/hidden/supply{ - dir = 4 +/obj/structure/machinery/cm_vending/clothing/marine/bravo{ + density = 0; + pixel_y = 16 }, /turf/open/floor/almayer{ - icon_state = "redcorner" + icon_state = "plate" }, -/area/almayer/squads/alpha) +/area/almayer/squads/bravo) "aPo" = ( /obj/structure/pipes/standard/simple/hidden/supply{ dir = 4 @@ -12110,19 +12134,6 @@ /obj/structure/sign/nosmoking_1, /turf/closed/wall/almayer, /area/almayer/squads/alpha) -"aPM" = ( -/obj/structure/machinery/cm_vending/clothing/marine/alpha, -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/squads/alpha) -"aPN" = ( -/obj/structure/machinery/light, -/obj/structure/machinery/cm_vending/clothing/marine/alpha, -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/squads/alpha) "aPX" = ( /obj/structure/largecrate/random/case/double, /turf/open/floor/plating/plating_catwalk, @@ -12292,69 +12303,16 @@ /obj/structure/sign/nosmoking_1, /turf/closed/wall/almayer, /area/almayer/squads/bravo) -"aQP" = ( -/obj/structure/machinery/cm_vending/clothing/marine/bravo, -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/squads/bravo) -"aQQ" = ( -/obj/structure/machinery/firealarm{ - pixel_y = 28 - }, -/obj/structure/machinery/cm_vending/clothing/marine/bravo, -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/squads/bravo) -"aQR" = ( -/obj/item/device/radio/intercom{ - freerange = 1; - name = "General Listening Channel"; - pixel_y = 28 - }, -/obj/structure/machinery/cm_vending/clothing/marine/bravo, -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/squads/bravo) -"aQS" = ( -/obj/structure/machinery/light{ - dir = 1 - }, -/obj/structure/machinery/cm_vending/clothing/marine/bravo, -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/squads/bravo) "aQT" = ( -/obj/structure/machinery/cm_vending/clothing/marine/alpha, -/obj/structure/machinery/camera/autoname/almayer{ - dir = 1; - name = "ship-grade camera" +/obj/structure/machinery/cm_vending/clothing/marine/alpha{ + density = 0; + layer = 4.1; + pixel_y = -29 }, /turf/open/floor/almayer{ - icon_state = "plate" + icon_state = "cargo_arrow" }, /area/almayer/squads/alpha) -"aQU" = ( -/obj/structure/machinery/alarm/almayer{ - dir = 1 - }, -/obj/structure/machinery/cm_vending/clothing/marine/bravo, -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/squads/bravo) -"aQV" = ( -/obj/structure/machinery/status_display{ - pixel_y = 30 - }, -/obj/structure/machinery/cm_vending/clothing/marine/bravo, -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/squads/bravo) "aQW" = ( /obj/structure/machinery/vending/cola{ pixel_x = -6; @@ -12596,7 +12554,10 @@ /area/almayer/squads/bravo) "aRU" = ( /obj/structure/pipes/vents/pump/on, -/turf/open/floor/almayer, +/turf/open/floor/almayer{ + dir = 1; + icon_state = "orange" + }, /area/almayer/squads/bravo) "aRV" = ( /obj/structure/platform{ @@ -12610,7 +12571,10 @@ /obj/structure/pipes/vents/scrubber{ dir = 4 }, -/turf/open/floor/almayer, +/turf/open/floor/almayer{ + dir = 1; + icon_state = "orange" + }, /area/almayer/squads/bravo) "aRZ" = ( /turf/open/floor/almayer{ @@ -12716,7 +12680,7 @@ /area/almayer/hallways/starboard_hallway) "aSt" = ( /obj/structure/surface/table/reinforced/almayer_B, -/obj/structure/machinery/chem_dispenser/beer, +/obj/structure/machinery/chem_dispenser/soda/beer, /turf/open/floor/prison{ icon_state = "kitchen" }, @@ -12927,12 +12891,13 @@ }, /area/almayer/living/offices) "aTv" = ( -/obj/structure/machinery/camera/autoname/almayer{ - name = "ship-grade camera" +/obj/structure/machinery/cm_vending/clothing/marine/bravo{ + density = 0; + pixel_y = 16 }, -/obj/structure/machinery/cm_vending/clothing/marine/bravo, /turf/open/floor/almayer{ - icon_state = "plate" + dir = 1; + icon_state = "cargo_arrow" }, /area/almayer/squads/bravo) "aTw" = ( @@ -12942,12 +12907,7 @@ }, /area/almayer/squads/bravo) "aTx" = ( -/obj/structure/machinery/light{ - dir = 4 - }, -/obj/structure/machinery/power/apc/almayer{ - dir = 4 - }, +/obj/structure/machinery/power/apc/almayer, /obj/structure/surface/table/almayer, /obj/item/tool/hand_labeler, /turf/open/floor/almayer{ @@ -14290,9 +14250,9 @@ /obj/structure/machinery/door_control{ id = "ARES Mainframe Right"; name = "ARES Mainframe Lockdown"; - req_one_access_txt = "200;91;92"; pixel_x = -24; - pixel_y = -24 + pixel_y = -24; + req_one_access_txt = "200;91;92" }, /turf/open/floor/almayer/no_build{ icon_state = "ai_floors" @@ -15367,14 +15327,14 @@ }, /area/almayer/squads/alpha) "bfw" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /obj/item/device/radio/intercom{ freerange = 1; name = "General Listening Channel"; pixel_y = 28 }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /turf/open/floor/almayer{ dir = 1; icon_state = "red" @@ -15431,12 +15391,12 @@ }, /area/almayer/squads/alpha) "bfD" = ( -/obj/structure/machinery/status_display{ - pixel_y = 30 - }, /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/structure/machinery/light{ + dir = 1 + }, /turf/open/floor/almayer{ dir = 1; icon_state = "red" @@ -15713,19 +15673,16 @@ icon_state = "red" }, /area/almayer/squads/alpha) -"bgV" = ( -/turf/open/floor/almayer{ - icon_state = "cargo_arrow" - }, -/area/almayer/squads/alpha) "bgW" = ( -/obj/structure/pipes/standard/simple/hidden/supply{ - dir = 4 +/obj/structure/machinery/cm_vending/clothing/marine/charlie{ + density = 0; + layer = 4.1; + pixel_y = -29 }, /turf/open/floor/almayer{ - icon_state = "cargo_arrow" + icon_state = "plate" }, -/area/almayer/squads/alpha) +/area/almayer/squads/charlie) "bgY" = ( /obj/structure/pipes/standard/simple/hidden/supply{ dir = 4 @@ -16418,7 +16375,7 @@ "blB" = ( /turf/open/floor/almayer{ dir = 1; - icon_state = "cargo_arrow" + icon_state = "orange" }, /area/almayer/squads/bravo) "blZ" = ( @@ -17216,6 +17173,9 @@ /obj/structure/sign/poster{ pixel_y = 32 }, +/obj/structure/machinery/light{ + dir = 8 + }, /turf/open/floor/almayer{ dir = 8; icon_state = "red" @@ -18183,7 +18143,7 @@ /area/almayer/squads/bravo) "buQ" = ( /obj/structure/surface/table/almayer, -/obj/structure/machinery/computer/station_alert{ +/obj/structure/machinery/computer/working_joe{ dir = 8 }, /turf/open/floor/almayer{ @@ -20411,19 +20371,6 @@ icon_state = "orange" }, /area/almayer/engineering/lower_engineering) -"bFh" = ( -/obj/structure/machinery/cm_vending/clothing/marine/charlie, -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/squads/charlie) -"bFi" = ( -/obj/structure/machinery/light, -/obj/structure/machinery/cm_vending/clothing/marine/charlie, -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/squads/charlie) "bFj" = ( /obj/structure/pipes/standard/simple/hidden/supply{ dir = 4 @@ -21071,12 +21018,12 @@ plane = -7 }, /obj/structure/machinery/door/poddoor/almayer/blended/white/open{ - open_layer = 1.9; + closed_layer = 3.2; id = "ARES Emergency"; - needs_power = 0; - name = "ARES Emergency Lockdown"; layer = 3.2; - closed_layer = 3.2; + name = "ARES Emergency Lockdown"; + needs_power = 0; + open_layer = 1.9; plane = -7 }, /turf/open/floor/almayer/no_build{ @@ -21103,11 +21050,11 @@ }, /area/almayer/squads/req) "bIw" = ( -/obj/structure/machinery/prop/almayer/computer, /obj/structure/surface/table/almayer, /obj/structure/machinery/light{ dir = 1 }, +/obj/structure/machinery/computer/working_joe, /turf/open/floor/almayer{ dir = 1; icon_state = "red" @@ -21868,17 +21815,17 @@ /obj/structure/machinery/door_control{ id = "ARES StairsLower"; name = "ARES Core Lockdown"; - req_one_access_txt = "19;200;90;91;92"; pixel_x = 24; - pixel_y = -8 + pixel_y = -8; + req_one_access_txt = "19;200;90;91;92" }, /obj/structure/machinery/camera/autoname/almayer/containment/ares{ dir = 8; pixel_y = 2 }, /turf/open/floor/almayer/no_build{ - icon_state = "silver"; - dir = 4 + dir = 4; + icon_state = "silver" }, /area/almayer/command/airoom) "bLw" = ( @@ -23072,20 +23019,8 @@ /obj/structure/pipes/vents/pump{ dir = 4 }, -/turf/open/floor/almayer, -/area/almayer/squads/charlie) -"bQB" = ( -/obj/structure/pipes/standard/simple/hidden/supply{ - dir = 4 - }, -/turf/open/floor/almayer, -/area/almayer/squads/charlie) -"bQC" = ( -/obj/structure/pipes/standard/simple/hidden/supply{ - dir = 4 - }, /turf/open/floor/almayer{ - icon_state = "emeraldcorner" + icon_state = "emerald" }, /area/almayer/squads/charlie) "bQD" = ( @@ -23265,22 +23200,22 @@ plane = -7 }, /obj/effect/step_trigger/ares_alert/public{ + alert_id = "AresStairs"; alert_message = "Caution: Movement detected in ARES Core."; - cooldown_duration = 1200; - alert_id = "AresStairs" + cooldown_duration = 1200 }, /obj/effect/step_trigger/ares_alert/public{ + alert_id = "AresStairs"; alert_message = "Caution: Movement detected in ARES Core."; - cooldown_duration = 1200; - alert_id = "AresStairs" + cooldown_duration = 1200 }, /obj/structure/machinery/door/poddoor/almayer/blended/white/open{ - open_layer = 1.9; + closed_layer = 3.2; id = "ARES Emergency"; - needs_power = 0; - name = "ARES Emergency Lockdown"; layer = 3.2; - closed_layer = 3.2; + name = "ARES Emergency Lockdown"; + needs_power = 0; + open_layer = 1.9; plane = -7 }, /turf/open/floor/almayer/no_build{ @@ -23736,7 +23671,10 @@ /obj/structure/pipes/vents/scrubber{ dir = 4 }, -/turf/open/floor/almayer, +/turf/open/floor/almayer{ + dir = 1; + icon_state = "blue" + }, /area/almayer/squads/delta) "bTE" = ( /turf/open/floor/almayer{ @@ -26151,13 +26089,13 @@ /turf/open/floor/almayer, /area/almayer/living/grunt_rnr) "cdP" = ( -/obj/structure/machinery/cm_vending/clothing/marine/charlie, -/obj/structure/machinery/camera/autoname/almayer{ - dir = 1; - name = "ship-grade camera" +/obj/structure/machinery/cm_vending/clothing/marine/charlie{ + density = 0; + layer = 4.1; + pixel_y = -29 }, /turf/open/floor/almayer{ - icon_state = "plate" + icon_state = "cargo_arrow" }, /area/almayer/squads/charlie) "cdT" = ( @@ -26664,6 +26602,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/structure/machinery/camera/autoname/almayer, /turf/open/floor/almayer{ dir = 1; icon_state = "emerald" @@ -26896,17 +26835,12 @@ icon_state = "emerald" }, /area/almayer/squads/charlie) -"cje" = ( -/turf/open/floor/almayer{ - icon_state = "cargo_arrow" - }, -/area/almayer/squads/charlie) "cjf" = ( /obj/structure/pipes/standard/simple/hidden/supply{ dir = 4 }, /turf/open/floor/almayer{ - icon_state = "cargo_arrow" + icon_state = "emerald" }, /area/almayer/squads/charlie) "cjg" = ( @@ -27017,15 +26951,6 @@ icon_state = "emerald" }, /area/almayer/squads/charlie) -"cjF" = ( -/obj/structure/machinery/camera/autoname/almayer{ - name = "ship-grade camera" - }, -/obj/structure/machinery/cm_vending/clothing/marine/delta, -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/squads/delta) "cjK" = ( /obj/structure/machinery/door/airlock/almayer/maint, /obj/structure/disposalpipe/segment{ @@ -27137,50 +27062,6 @@ icon_state = "plate" }, /area/almayer/squads/delta) -"cks" = ( -/obj/structure/machinery/cm_vending/clothing/marine/delta, -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/squads/delta) -"cku" = ( -/obj/item/device/radio/intercom{ - freerange = 1; - name = "General Listening Channel"; - pixel_y = 28 - }, -/obj/structure/machinery/cm_vending/clothing/marine/delta, -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/squads/delta) -"ckv" = ( -/obj/structure/machinery/light{ - dir = 1 - }, -/obj/structure/machinery/cm_vending/clothing/marine/delta, -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/squads/delta) -"ckx" = ( -/obj/structure/machinery/alarm/almayer{ - dir = 1 - }, -/obj/structure/machinery/cm_vending/clothing/marine/delta, -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/squads/delta) -"cky" = ( -/obj/structure/machinery/status_display{ - pixel_y = 30 - }, -/obj/structure/machinery/cm_vending/clothing/marine/delta, -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/squads/delta) "ckB" = ( /obj/structure/machinery/door/airlock/almayer/maint{ dir = 1; @@ -27234,9 +27115,12 @@ }, /area/almayer/squads/delta) "ckR" = ( +/obj/structure/machinery/cm_vending/clothing/marine/delta{ + density = 0; + pixel_y = 16 + }, /turf/open/floor/almayer{ - dir = 1; - icon_state = "cargo_arrow" + icon_state = "plate" }, /area/almayer/squads/delta) "ckS" = ( @@ -27323,6 +27207,11 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/item/device/radio/intercom{ + freerange = 1; + name = "General Listening Channel"; + pixel_y = -29 + }, /turf/open/floor/almayer{ dir = 8; icon_state = "bluecorner" @@ -27355,6 +27244,10 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/structure/machinery/alarm/almayer{ + dir = 1; + pixel_y = -29 + }, /turf/open/floor/almayer{ icon_state = "blue" }, @@ -27404,9 +27297,9 @@ "clw" = ( /obj/structure/machinery/light{ dir = 8; + invisibility = 101; unacidable = 1; - unslashable = 1; - invisibility = 101 + unslashable = 1 }, /turf/open/floor/almayer/no_build{ icon_state = "ai_floors" @@ -28012,9 +27905,7 @@ }, /area/almayer/squads/charlie) "coj" = ( -/obj/structure/machinery/power/apc/almayer{ - dir = 4 - }, +/obj/structure/machinery/power/apc/almayer, /obj/structure/surface/table/almayer, /obj/item/tool/hand_labeler, /turf/open/floor/almayer{ @@ -28152,8 +28043,8 @@ pixel_y = 6 }, /obj/item/folder/white{ - pixel_y = 6; - pixel_x = 5 + pixel_x = 5; + pixel_y = 6 }, /turf/open/floor/almayer/no_build{ icon_state = "ai_floors" @@ -28644,8 +28535,8 @@ icon_state = "ramptop" }, /turf/open/floor/almayer/no_build{ - icon_state = "silver"; - dir = 4 + dir = 4; + icon_state = "silver" }, /area/almayer/command/airoom) "cBs" = ( @@ -30460,12 +30351,13 @@ }, /area/almayer/hull/lower_hull/l_f_s) "dpO" = ( -/obj/structure/machinery/cm_vending/clothing/marine/delta, -/obj/structure/sign/banners/maximumeffort{ - pixel_y = 30 +/obj/structure/machinery/cm_vending/clothing/marine/delta{ + density = 0; + pixel_y = 16 }, /turf/open/floor/almayer{ - icon_state = "plate" + dir = 1; + icon_state = "cargo_arrow" }, /area/almayer/squads/delta) "dpV" = ( @@ -31267,8 +31159,8 @@ dir = 1 }, /turf/open/floor/almayer/no_build{ - icon_state = "silver"; - dir = 8 + dir = 8; + icon_state = "silver" }, /area/almayer/command/airoom) "dGr" = ( @@ -31619,8 +31511,8 @@ dir = 1 }, /turf/open/floor/almayer/no_build{ - icon_state = "silver"; - dir = 4 + dir = 4; + icon_state = "silver" }, /area/almayer/command/airoom) "dQv" = ( @@ -33167,9 +33059,9 @@ /obj/structure/machinery/door_control{ id = "ARES Mainframe Left"; name = "ARES Mainframe Lockdown"; - req_one_access_txt = "200;91;92"; pixel_x = 24; - pixel_y = 24 + pixel_y = 24; + req_one_access_txt = "200;91;92" }, /turf/open/floor/almayer/no_build{ icon_state = "tcomms" @@ -33866,9 +33758,9 @@ }, /obj/structure/machinery/light{ dir = 4; + invisibility = 101; unacidable = 1; - unslashable = 1; - invisibility = 101 + unslashable = 1 }, /turf/open/floor/almayer/no_build{ icon_state = "ai_floors" @@ -34697,8 +34589,8 @@ dir = 1 }, /turf/open/floor/almayer/no_build{ - icon_state = "silver"; - dir = 8 + dir = 8; + icon_state = "silver" }, /area/almayer/command/airoom) "fdj" = ( @@ -35097,6 +34989,18 @@ }, /turf/open/floor/almayer, /area/almayer/command/lifeboat) +"foL" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/machinery/light{ + dir = 1 + }, +/turf/open/floor/almayer{ + dir = 4; + icon_state = "emeraldcorner" + }, +/area/almayer/squads/charlie) "fpd" = ( /obj/structure/sign/safety/hvac_old{ pixel_x = 8; @@ -36195,13 +36099,13 @@ /obj/structure/machinery/door_control{ id = "ARES Operations Right"; name = "ARES Operations Shutter"; - req_one_access_txt = "1;200;91;92"; pixel_x = 24; - pixel_y = -8 + pixel_y = -8; + req_one_access_txt = "1;200;91;92" }, /turf/open/floor/almayer/no_build{ - icon_state = "silver"; - dir = 4 + dir = 4; + icon_state = "silver" }, /area/almayer/command/airoom) "fMt" = ( @@ -36212,12 +36116,12 @@ }, /obj/effect/step_trigger/ares_alert/core, /obj/structure/machinery/door/poddoor/almayer/blended/white/open{ - open_layer = 1.9; + closed_layer = 3.2; id = "ARES Emergency"; - needs_power = 0; - name = "ARES Emergency Lockdown"; layer = 3.2; - closed_layer = 3.2; + name = "ARES Emergency Lockdown"; + needs_power = 0; + open_layer = 1.9; plane = -7 }, /obj/structure/sign/safety/laser{ @@ -36225,8 +36129,8 @@ pixel_y = -8 }, /obj/structure/sign/safety/rewire{ - pixel_y = 6; - pixel_x = 32 + pixel_x = 32; + pixel_y = 6 }, /turf/open/floor/almayer/no_build{ icon_state = "test_floor4" @@ -36749,12 +36653,12 @@ pixel_y = 8 }, /obj/structure/transmitter/rotary{ - pixel_x = 8; - pixel_y = -8; + name = "AI Core Telephone"; + phone_category = "ARES"; phone_color = "blue"; phone_id = "AI Core"; - phone_category = "ARES"; - name = "AI Core Telephone" + pixel_x = 8; + pixel_y = -8 }, /turf/open/floor/almayer/no_build{ icon_state = "ai_floors" @@ -36762,8 +36666,8 @@ /area/almayer/command/airoom) "gbg" = ( /obj/structure/sign/safety/terminal{ - pixel_y = 24; - pixel_x = 14 + pixel_x = 14; + pixel_y = 24 }, /obj/structure/sign/safety/laser{ pixel_y = 24 @@ -36778,9 +36682,9 @@ /obj/structure/machinery/door_control{ id = "ARES Operations Right"; name = "ARES Operations Shutter"; - req_one_access_txt = "1;200;91;92"; pixel_x = -24; - pixel_y = -8 + pixel_y = -8; + req_one_access_txt = "1;200;91;92" }, /turf/open/floor/almayer/no_build{ icon_state = "ai_floors" @@ -37167,13 +37071,13 @@ /area/almayer/hull/lower_hull/l_f_s) "gjw" = ( /obj/structure/machinery/faxmachine/uscm/command{ + density = 0; department = "AI Core"; - pixel_y = 32; - density = 0 + pixel_y = 32 }, /obj/structure/surface/rack{ - pixel_y = 16; - density = 0 + density = 0; + pixel_y = 16 }, /obj/structure/machinery/computer/working_joe{ dir = 8; @@ -37520,7 +37424,7 @@ name = "Medical Telephone"; phone_category = "Almayer"; phone_id = "Medical Lower"; - pixel_x = 23 + pixel_x = 16 }, /turf/open/floor/almayer{ icon_state = "sterile_green" @@ -37830,9 +37734,9 @@ /area/almayer/hallways/starboard_hallway) "gyN" = ( /obj/structure/machinery/prop{ + desc = "It's a server box..."; icon_state = "comm_server"; - name = "server box"; - desc = "It's a server box..." + name = "server box" }, /turf/open/floor/almayer/no_build{ icon_state = "test_floor4" @@ -38475,23 +38379,23 @@ }, /obj/structure/machinery/door_control{ id = "ARES Interior"; + indestructible = 1; name = "ARES Chamber Lockdown"; - req_one_access_txt = "1;200;90;91;92"; pixel_x = -24; pixel_y = -8; - indestructible = 1 + req_one_access_txt = "1;200;90;91;92" }, /obj/structure/machinery/door/poddoor/railing{ + closed_layer = 4.1; + density = 0; dir = 2; id = "ARES Railing"; - unslashable = 0; - unacidable = 0; - pixel_y = -1; - pixel_x = -1; + layer = 2.1; open_layer = 2.1; - density = 0; - closed_layer = 4.1; - layer = 2.1 + pixel_x = -1; + pixel_y = -1; + unacidable = 0; + unslashable = 0 }, /turf/open/floor/almayer/no_build{ icon_state = "ai_floors" @@ -38538,24 +38442,24 @@ }, /obj/structure/machinery/door_control{ id = "ARES Interior"; + indestructible = 1; name = "ARES Chamber Lockdown"; - req_one_access_txt = "1;200;90;91;92"; pixel_x = 24; pixel_y = 8; - indestructible = 1 + req_one_access_txt = "1;200;90;91;92" }, /obj/structure/machinery/door/poddoor/railing{ - id = "ARES Railing"; - unslashable = 0; - unacidable = 0; - open_layer = 2.1; + closed_layer = 4; density = 0; + id = "ARES Railing"; layer = 2.1; - closed_layer = 4 + open_layer = 2.1; + unacidable = 0; + unslashable = 0 }, /turf/open/floor/almayer/no_build{ - icon_state = "silver"; - dir = 4 + dir = 4; + icon_state = "silver" }, /area/almayer/command/airoom) "gPc" = ( @@ -38858,9 +38762,9 @@ "gXs" = ( /obj/effect/step_trigger/ares_alert/terminals, /obj/structure/machinery/door/poddoor/shutters/almayer{ + dir = 4; id = "ARES Operations Right"; - name = "\improper ARES Operations Shutters"; - dir = 4 + name = "\improper ARES Operations Shutters" }, /obj/structure/pipes/standard/simple/hidden/supply/no_boom{ dir = 4 @@ -39046,12 +38950,12 @@ /area/almayer/medical/upper_medical) "hbZ" = ( /obj/structure/surface/table/almayer, -/obj/structure/machinery/computer/station_alert{ - dir = 4 - }, /obj/structure/sign/safety/terminal{ pixel_x = -17 }, +/obj/structure/machinery/computer/working_joe{ + dir = 4 + }, /turf/open/floor/almayer{ dir = 8; icon_state = "orange" @@ -39833,13 +39737,27 @@ /area/almayer/hallways/port_hallway) "hvv" = ( /obj/structure/disposalpipe/segment, -/obj/item/clipboard, -/obj/item/paper, -/obj/item/tool/pen/blue, /obj/structure/pipes/standard/manifold/hidden/supply{ dir = 8 }, +/obj/item/clipboard{ + base_pixel_x = 20; + pixel_x = 5 + }, +/obj/item/paper{ + pixel_x = 5 + }, +/obj/item/tool/pen/blue{ + pixel_x = 5 + }, /obj/structure/surface/table/reinforced/black, +/obj/structure/transmitter/rotary{ + name = "CIC Reception Telephone"; + phone_category = "Command"; + phone_id = "CIC Reception"; + pixel_x = -7; + pixel_y = 4 + }, /turf/open/floor/almayer, /area/almayer/command/cic) "hvw" = ( @@ -40132,6 +40050,18 @@ icon_state = "sterile_green_side" }, /area/almayer/medical/lower_medical_medbay) +"hAZ" = ( +/obj/structure/pipes/standard/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/machinery/light, +/turf/open/floor/almayer{ + icon_state = "blue" + }, +/area/almayer/squads/delta) "hBc" = ( /obj/structure/pipes/vents/scrubber{ dir = 4 @@ -40790,12 +40720,12 @@ pixel_y = 24 }, /obj/structure/machinery/computer/crew/alt{ - pixel_x = -17; - dir = 4 + dir = 4; + pixel_x = -17 }, /obj/structure/sign/safety/terminal{ - pixel_y = 24; - pixel_x = 14 + pixel_x = 14; + pixel_y = 24 }, /obj/structure/sign/safety/fibre_optics{ pixel_x = 14; @@ -40868,10 +40798,10 @@ /area/almayer/hull/lower_hull/l_a_p) "hTl" = ( /obj/structure/prop/server_equipment/yutani_server{ - pixel_y = 16; - name = "server tower"; + density = 0; desc = "A powerful server tower housing various AI functions."; - density = 0 + name = "server tower"; + pixel_y = 16 }, /obj/structure/pipes/standard/simple/hidden/supply/no_boom, /turf/open/floor/almayer/no_build{ @@ -41454,7 +41384,10 @@ }, /area/almayer/medical/lower_medical_medbay) "ihM" = ( -/obj/structure/machinery/cm_vending/clothing/marine/delta, +/obj/structure/machinery/cm_vending/clothing/marine/delta{ + density = 0; + pixel_y = 16 + }, /obj/structure/sign/safety/cryo{ pixel_x = 32 }, @@ -41958,24 +41891,24 @@ }, /obj/structure/machinery/door_control{ id = "ARES Interior"; + indestructible = 1; name = "ARES Chamber Lockdown"; - req_one_access_txt = "1;200;90;91;92"; pixel_x = -24; pixel_y = 8; - indestructible = 1 + req_one_access_txt = "1;200;90;91;92" }, /obj/structure/machinery/door/poddoor/railing{ - id = "ARES Railing"; - unslashable = 0; - unacidable = 0; - open_layer = 2.1; + closed_layer = 4; density = 0; + id = "ARES Railing"; layer = 2.1; - closed_layer = 4 + open_layer = 2.1; + unacidable = 0; + unslashable = 0 }, /turf/open/floor/almayer/no_build{ - icon_state = "silver"; - dir = 8 + dir = 8; + icon_state = "silver" }, /area/almayer/command/airoom) "itR" = ( @@ -42210,10 +42143,10 @@ "iyH" = ( /obj/structure/surface/table/reinforced/almayer_B{ climbable = 0; - unacidable = 1; - unslashable = 1; + desc = "A square metal surface resting on its fat metal bottom. You can't flip something that doesn't have legs. This one has a metal rail running above it, preventing something large passing over. Like you."; indestructible = 1; - desc = "A square metal surface resting on its fat metal bottom. You can't flip something that doesn't have legs. This one has a metal rail running above it, preventing something large passing over. Like you." + unacidable = 1; + unslashable = 1 }, /turf/open/floor/almayer/no_build{ icon_state = "ai_floors" @@ -43288,8 +43221,8 @@ dir = 1 }, /turf/open/floor/almayer/no_build{ - icon_state = "silver"; - dir = 4 + dir = 4; + icon_state = "silver" }, /area/almayer/command/airoom) "iZG" = ( @@ -44152,12 +44085,12 @@ }, /obj/effect/step_trigger/ares_alert/core, /obj/structure/machinery/door/poddoor/almayer/blended/white/open{ - open_layer = 1.9; + closed_layer = 3.2; id = "ARES Emergency"; - needs_power = 0; - name = "ARES Emergency Lockdown"; layer = 3.2; - closed_layer = 3.2; + name = "ARES Emergency Lockdown"; + needs_power = 0; + open_layer = 1.9; plane = -7 }, /turf/open/floor/almayer/no_build{ @@ -44521,8 +44454,8 @@ /obj/structure/machinery/door_control{ id = "ARES StairsUpper"; name = "ARES Core Access"; - req_one_access_txt = "19;200;90;91;92"; - pixel_x = 24 + pixel_x = 24; + req_one_access_txt = "19;200;90;91;92" }, /turf/open/floor/almayer/no_build{ icon_state = "ai_floors" @@ -45231,7 +45164,11 @@ /turf/open/floor/almayer, /area/almayer/shipboard/brig/cells) "jVr" = ( -/obj/structure/machinery/cm_vending/clothing/marine/alpha, +/obj/structure/machinery/cm_vending/clothing/marine/alpha{ + density = 0; + layer = 4.1; + pixel_y = -29 + }, /obj/structure/sign/safety/cryo{ pixel_x = 32 }, @@ -45815,6 +45752,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/structure/machinery/light, /turf/open/floor/almayer{ icon_state = "orange" }, @@ -46574,13 +46512,13 @@ /obj/structure/machinery/door_control{ id = "ARES StairsLower"; name = "ARES Core Lockdown"; - req_one_access_txt = "19;200;90;91;92"; pixel_x = -24; - pixel_y = -8 + pixel_y = -8; + req_one_access_txt = "19;200;90;91;92" }, /turf/open/floor/almayer/no_build{ - icon_state = "silver"; - dir = 8 + dir = 8; + icon_state = "silver" }, /area/almayer/command/airoom) "kAh" = ( @@ -46983,8 +46921,8 @@ icon_state = "ramptop" }, /turf/open/floor/almayer/no_build{ - icon_state = "silver"; - dir = 8 + dir = 8; + icon_state = "silver" }, /area/almayer/command/airoom) "kKG" = ( @@ -47339,9 +47277,9 @@ /obj/structure/machinery/door_control{ id = "ARES Mainframe Right"; name = "ARES Mainframe Lockdown"; - req_one_access_txt = "200;91;92"; pixel_x = -24; - pixel_y = 24 + pixel_y = 24; + req_one_access_txt = "200;91;92" }, /turf/open/floor/almayer/no_build{ icon_state = "tcomms" @@ -47537,7 +47475,10 @@ /turf/open/floor/plating/plating_catwalk, /area/almayer/hull/lower_hull/l_f_p) "kXa" = ( -/obj/structure/machinery/cm_vending/clothing/marine/bravo, +/obj/structure/machinery/cm_vending/clothing/marine/bravo{ + density = 0; + pixel_y = 16 + }, /obj/structure/sign/safety/cryo{ pixel_x = 32 }, @@ -47557,8 +47498,8 @@ /area/almayer/command/computerlab) "kXj" = ( /turf/open/floor/almayer/no_build{ - icon_state = "silver"; - dir = 4 + dir = 4; + icon_state = "silver" }, /area/almayer/command/airoom) "kXu" = ( @@ -48229,22 +48170,26 @@ pixel_y = 24 }, /obj/structure/sign/safety/terminal{ - pixel_y = 24; - pixel_x = 14 + pixel_x = 14; + pixel_y = 24 }, /obj/structure/machinery/door_control{ id = "ARES Operations Left"; name = "ARES Operations Shutter"; - req_one_access_txt = "1;200;91;92"; pixel_x = 24; - pixel_y = -8 + pixel_y = -8; + req_one_access_txt = "1;200;91;92" }, /turf/open/floor/almayer/no_build{ icon_state = "ai_floors" }, /area/almayer/command/airoom) "lok" = ( -/obj/structure/machinery/cm_vending/clothing/marine/charlie, +/obj/structure/machinery/cm_vending/clothing/marine/charlie{ + density = 0; + layer = 4.1; + pixel_y = -29 + }, /obj/structure/sign/safety/cryo{ pixel_x = 32 }, @@ -48266,6 +48211,23 @@ "loP" = ( /turf/closed/wall/almayer, /area/almayer/engineering/laundry) +"loS" = ( +/obj/structure/pipes/standard/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/item/device/radio/intercom{ + freerange = 1; + name = "General Listening Channel"; + pixel_y = -29 + }, +/obj/structure/machinery/light, +/turf/open/floor/almayer{ + icon_state = "bluecorner" + }, +/area/almayer/squads/delta) "loV" = ( /obj/structure/desertdam/decals/road_edge{ icon_state = "road_edge_decal3"; @@ -49790,6 +49752,9 @@ "lXg" = ( /obj/structure/surface/table/almayer, /obj/structure/machinery/recharger, +/obj/structure/machinery/computer/working_joe{ + pixel_y = 16 + }, /turf/open/floor/almayer{ icon_state = "plate" }, @@ -50606,6 +50571,20 @@ }, /turf/open/floor/almayer, /area/almayer/lifeboat_pumps/north1) +"mtr" = ( +/obj/structure/pipes/standard/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/machinery/status_display{ + pixel_y = -29 + }, +/turf/open/floor/almayer{ + icon_state = "orange" + }, +/area/almayer/squads/bravo) "mtD" = ( /obj/structure/machinery/status_display{ pixel_x = 16; @@ -50678,6 +50657,10 @@ dir = 4 }, /obj/structure/pipes/standard/manifold/hidden/supply, +/obj/structure/machinery/camera/autoname/almayer{ + dir = 1; + name = "ship-grade camera" + }, /turf/open/floor/almayer{ icon_state = "bluecorner" }, @@ -50807,9 +50790,6 @@ }, /area/almayer/hull/lower_hull/l_f_s) "mzg" = ( -/obj/structure/sign/poster{ - pixel_y = -32 - }, /turf/open/floor/almayer{ icon_state = "emerald" }, @@ -51042,12 +51022,12 @@ plane = -7 }, /obj/structure/machinery/door/poddoor/almayer/blended/white/open{ - open_layer = 1.9; + closed_layer = 3.2; id = "ARES Emergency"; - needs_power = 0; - name = "ARES Emergency Lockdown"; layer = 3.2; - closed_layer = 3.2; + name = "ARES Emergency Lockdown"; + needs_power = 0; + open_layer = 1.9; plane = -7 }, /turf/open/floor/almayer/no_build{ @@ -51131,8 +51111,8 @@ /area/almayer/medical/medical_science) "mHE" = ( /turf/open/floor/almayer/no_build{ - icon_state = "silver"; - dir = 8 + dir = 8; + icon_state = "silver" }, /area/almayer/command/airoom) "mHO" = ( @@ -51631,17 +51611,17 @@ }, /obj/effect/step_trigger/ares_alert/core, /obj/structure/machinery/door/poddoor/almayer/blended/white/open{ - open_layer = 1.9; + closed_layer = 3.2; id = "ARES Emergency"; - needs_power = 0; - name = "ARES Emergency Lockdown"; layer = 3.2; - closed_layer = 3.2; + name = "ARES Emergency Lockdown"; + needs_power = 0; + open_layer = 1.9; plane = -7 }, /obj/structure/sign/safety/terminal{ - pixel_y = -8; - pixel_x = -18 + pixel_x = -18; + pixel_y = -8 }, /obj/structure/sign/safety/fibre_optics{ pixel_x = -18; @@ -51791,9 +51771,9 @@ "mUC" = ( /obj/structure/machinery/light{ dir = 4; + invisibility = 101; unacidable = 1; - unslashable = 1; - invisibility = 101 + unslashable = 1 }, /turf/open/floor/almayer/no_build{ icon_state = "ai_floors" @@ -51887,6 +51867,9 @@ name = "synthetic potted plant"; pixel_y = 8 }, +/obj/structure/sign/banners/maximumeffort{ + pixel_y = 30 + }, /turf/open/floor/almayer{ dir = 9; icon_state = "blue" @@ -52424,7 +52407,7 @@ "njd" = ( /obj/structure/pipes/standard/manifold/hidden/supply, /turf/open/floor/almayer{ - icon_state = "cargo_arrow" + icon_state = "red" }, /area/almayer/squads/alpha) "njD" = ( @@ -53222,6 +53205,22 @@ /obj/effect/landmark/late_join/charlie, /turf/open/floor/plating/plating_catwalk, /area/almayer/squads/charlie) +"nCp" = ( +/obj/structure/pipes/standard/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/item/device/radio/intercom{ + freerange = 1; + name = "General Listening Channel"; + pixel_y = -29 + }, +/turf/open/floor/almayer{ + icon_state = "orange" + }, +/area/almayer/squads/bravo) "nDd" = ( /obj/structure/closet/secure_closet/guncabinet/red, /obj/item/ammo_magazine/smg/m39, @@ -54286,8 +54285,8 @@ layer = 3.3 }, /obj/structure/sign/safety/terminal{ - pixel_y = 24; - pixel_x = 14 + pixel_x = 14; + pixel_y = 24 }, /obj/structure/sign/safety/fibre_optics{ pixel_x = 14; @@ -55013,8 +55012,8 @@ }, /obj/structure/platform_decoration, /turf/open/floor/almayer/no_build{ - icon_state = "silver"; - dir = 4 + dir = 4; + icon_state = "silver" }, /area/almayer/command/airoom) "osz" = ( @@ -55709,8 +55708,8 @@ /obj/structure/machinery/door_control{ id = "ARES StairsUpper"; name = "ARES Core Access"; - req_one_access_txt = "19;200;90;91;92"; - pixel_x = -24 + pixel_x = -24; + req_one_access_txt = "19;200;90;91;92" }, /turf/open/floor/almayer/no_build{ icon_state = "ai_floors" @@ -55767,9 +55766,9 @@ /obj/structure/machinery/door_control{ id = "ARES StairsLower"; name = "ARES Core Lockdown"; - req_one_access_txt = "19;200;90;91;92"; pixel_x = -24; - pixel_y = 8 + pixel_y = 8; + req_one_access_txt = "19;200;90;91;92" }, /obj/structure/machinery/camera/autoname/almayer/containment/ares{ dir = 4; @@ -55777,8 +55776,8 @@ }, /obj/effect/step_trigger/clone_cleaner, /turf/open/floor/almayer/no_build{ - icon_state = "silver"; - dir = 8 + dir = 8; + icon_state = "silver" }, /area/almayer/command/airoom) "oLv" = ( @@ -56167,6 +56166,10 @@ }, /obj/effect/decal/cleanable/cobweb2/dynamic, /obj/item/packageWrap, +/obj/structure/machinery/computer/working_joe{ + dir = 8; + pixel_x = 17 + }, /turf/open/floor/almayer{ icon_state = "test_floor5" }, @@ -56807,10 +56810,10 @@ /area/almayer/living/briefing) "pmV" = ( /obj/structure/prop/server_equipment/yutani_server/broken{ - pixel_y = 16; - name = "server tower"; + density = 0; desc = "A powerful server tower housing various AI functions."; - density = 0 + name = "server tower"; + pixel_y = 16 }, /obj/structure/pipes/standard/simple/hidden/supply/no_boom, /turf/open/floor/almayer/no_build{ @@ -58434,8 +58437,8 @@ dir = 8 }, /turf/open/floor/almayer/no_build{ - icon_state = "silver"; - dir = 4 + dir = 4; + icon_state = "silver" }, /area/almayer/command/airoom) "pYo" = ( @@ -59432,13 +59435,13 @@ /obj/structure/machinery/door_control{ id = "ARES Operations Left"; name = "ARES Operations Shutter"; - req_one_access_txt = "1;200;91;92"; pixel_x = -24; - pixel_y = -8 + pixel_y = -8; + req_one_access_txt = "1;200;91;92" }, /turf/open/floor/almayer/no_build{ - icon_state = "silver"; - dir = 8 + dir = 8; + icon_state = "silver" }, /area/almayer/command/airoom) "qxA" = ( @@ -60700,9 +60703,9 @@ /obj/structure/machinery/door_control{ id = "ARES Mainframe Left"; name = "ARES Mainframe Lockdown"; - req_one_access_txt = "200;91;92"; pixel_x = 24; - pixel_y = -24 + pixel_y = -24; + req_one_access_txt = "200;91;92" }, /turf/open/floor/almayer/no_build{ icon_state = "ai_floors" @@ -61227,8 +61230,8 @@ pixel_y = 1 }, /obj/structure/machinery/computer/crew/alt{ - pixel_x = 17; - dir = 8 + dir = 8; + pixel_x = 17 }, /turf/open/floor/almayer/no_build{ icon_state = "ai_floors" @@ -61276,9 +61279,9 @@ "roH" = ( /obj/effect/step_trigger/ares_alert/terminals, /obj/structure/machinery/door/poddoor/shutters/almayer{ + dir = 4; id = "ARES Operations Left"; - name = "\improper ARES Operations Shutters"; - dir = 4 + name = "\improper ARES Operations Shutters" }, /obj/structure/pipes/standard/simple/hidden/supply/no_boom{ dir = 4 @@ -61393,11 +61396,17 @@ /turf/open/floor/plating, /area/almayer/living/offices/flight) "rrq" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/machinery/status_display{ + pixel_y = 30 + }, /turf/open/floor/almayer{ - dir = 8; - icon_state = "blue" + dir = 1; + icon_state = "red" }, -/area/almayer/squads/delta) +/area/almayer/squads/alpha) "rrB" = ( /obj/structure/machinery/door/airlock/multi_tile/almayer/comdoor/reinforced{ name = "\improper Cryogenics Bay" @@ -61594,7 +61603,7 @@ "rvT" = ( /obj/structure/pipes/standard/manifold/hidden/supply, /turf/open/floor/almayer{ - icon_state = "cargo_arrow" + icon_state = "emerald" }, /area/almayer/squads/charlie) "rwv" = ( @@ -62989,9 +62998,9 @@ }, /obj/structure/machinery/light{ dir = 8; + invisibility = 101; unacidable = 1; - unslashable = 1; - invisibility = 101 + unslashable = 1 }, /turf/open/floor/almayer/no_build{ icon_state = "ai_floors" @@ -62999,8 +63008,8 @@ /area/almayer/command/airoom) "sdl" = ( /obj/structure/surface/rack{ - pixel_y = 16; - density = 0 + density = 0; + pixel_y = 16 }, /obj/item/tool/wet_sign, /obj/item/tool/wet_sign, @@ -64440,8 +64449,14 @@ /turf/open/floor/plating/plating_catwalk, /area/almayer/lifeboat_pumps/south1) "sNb" = ( +/obj/structure/pipes/standard/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/machinery/light, /turf/open/floor/almayer{ - dir = 8; icon_state = "orange" }, /area/almayer/squads/bravo) @@ -65555,8 +65570,8 @@ "tmK" = ( /obj/structure/machinery/door/airlock/almayer/maint{ dir = 1; - req_one_access_txt = "91;92"; - req_one_access = null + req_one_access = null; + req_one_access_txt = "91;92" }, /turf/open/floor/almayer/no_build{ icon_state = "test_floor4" @@ -69661,6 +69676,9 @@ name = "synthetic potted plant"; pixel_y = 8 }, +/obj/structure/machinery/alarm/almayer{ + dir = 1 + }, /turf/open/floor/almayer{ dir = 9; icon_state = "orange" @@ -70002,10 +70020,10 @@ /area/almayer/hull/lower_hull/l_m_p) "vhe" = ( /obj/structure/prop/server_equipment/yutani_server{ - pixel_y = 16; - name = "server tower"; + density = 0; desc = "A powerful server tower housing various AI functions."; - density = 0 + name = "server tower"; + pixel_y = 16 }, /turf/open/floor/almayer/no_build{ icon_state = "ai_floors" @@ -70902,8 +70920,8 @@ dir = 4 }, /turf/open/floor/almayer/no_build{ - icon_state = "silver"; - dir = 8 + dir = 8; + icon_state = "silver" }, /area/almayer/command/airoom) "vBm" = ( @@ -71238,6 +71256,9 @@ /obj/structure/pipes/standard/simple/hidden/supply{ dir = 4 }, +/obj/structure/machinery/firealarm{ + pixel_y = -29 + }, /turf/open/floor/almayer{ icon_state = "orange" }, @@ -72549,17 +72570,17 @@ plane = -7 }, /obj/effect/step_trigger/ares_alert/public{ + alert_id = "AresStairs"; alert_message = "Caution: Movement detected in ARES Core."; - cooldown_duration = 1200; - alert_id = "AresStairs" + cooldown_duration = 1200 }, /obj/structure/machinery/door/poddoor/almayer/blended/white/open{ - open_layer = 1.9; + closed_layer = 3.2; id = "ARES Emergency"; - needs_power = 0; - name = "ARES Emergency Lockdown"; layer = 3.2; - closed_layer = 3.2; + name = "ARES Emergency Lockdown"; + needs_power = 0; + open_layer = 1.9; plane = -7 }, /turf/open/floor/almayer/no_build{ @@ -73204,9 +73225,9 @@ /obj/structure/surface/table/reinforced/almayer_B, /obj/structure/machinery/door_control{ id = "ARES Emergency"; + indestructible = 1; name = "ARES Emergency Lockdown"; - req_one_access_txt = "91;92"; - indestructible = 1 + req_one_access_txt = "91;92" }, /turf/open/floor/almayer/no_build{ icon_state = "plating" @@ -74530,8 +74551,8 @@ /area/almayer/living/gym) "xbN" = ( /obj/structure/surface/rack{ - pixel_y = 16; - density = 0 + density = 0; + pixel_y = 16 }, /obj/structure/janitorialcart, /obj/item/tool/mop, @@ -75016,6 +75037,21 @@ /obj/structure/largecrate/random/barrel/yellow, /turf/open/floor/plating/plating_catwalk, /area/almayer/hull/lower_hull/l_m_s) +"xoe" = ( +/obj/structure/pipes/standard/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/machinery/status_display{ + pixel_y = -29 + }, +/turf/open/floor/almayer{ + dir = 8; + icon_state = "bluecorner" + }, +/area/almayer/squads/delta) "xoh" = ( /obj/structure/disposalpipe/segment{ dir = 2; @@ -75340,14 +75376,14 @@ /obj/structure/machinery/door_control{ id = "ARES StairsLower"; name = "ARES Core Lockdown"; - req_one_access_txt = "19;200;90;91;92"; pixel_x = 24; - pixel_y = 8 + pixel_y = 8; + req_one_access_txt = "19;200;90;91;92" }, /obj/effect/step_trigger/clone_cleaner, /turf/open/floor/almayer/no_build{ - icon_state = "silver"; - dir = 4 + dir = 4; + icon_state = "silver" }, /area/almayer/command/airoom) "xvX" = ( @@ -76583,9 +76619,9 @@ /obj/structure/machinery/door_control{ id = "ARES StairsUpper"; name = "ARES Core Access"; - req_one_access_txt = "1;200;90;91;92"; + pixel_x = 24; pixel_y = 24; - pixel_x = 24 + req_one_access_txt = "1;200;90;91;92" }, /turf/open/floor/almayer/no_build{ icon_state = "ai_floors" @@ -76719,6 +76755,11 @@ }, /obj/structure/surface/rack, /obj/effect/spawner/random/toolbox, +/obj/structure/machinery/computer/working_joe{ + dir = 4; + pixel_y = 14; + pixel_x = -17 + }, /turf/open/floor/almayer{ dir = 10; icon_state = "orange" @@ -117827,10 +117868,10 @@ aMC aLT avv bfu -bgV -aPM +rGj +aQT aLT -aQP +aTv blB bnp aTx @@ -117871,11 +117912,11 @@ bMy bJC cog chN -cje -bFh +mzg +cdP bJC dpO -ckR +ckX cli coj bSJ @@ -118029,11 +118070,11 @@ aLT aLT aLT aLT -bfw -bgV -aPM +bfx +rGj +aQT aLT -aQQ +aTv blB kiU aQL @@ -118074,11 +118115,11 @@ bJC bJC bJC chO -cje -bFh +mzg +cdP bJC -cks -ckR +dpO +ckX clj bSJ bSJ @@ -118233,10 +118274,10 @@ aMB bdA aLT ial -aMz -aPM +rGj +aPl aLT -aQP +aPn aRU bnr aQL @@ -118277,11 +118318,11 @@ bMx cgr bJC raK -cje -bFh +mzg +bgW bJC -cks ckR +ckX iyS bSJ clJ @@ -118435,11 +118476,11 @@ bco bdr bdA aLT -bfx -bgV -aPM +bfw +rGj +aQT aLT -aQP +aTv blB vJV aQL @@ -118480,11 +118521,11 @@ cfo cgr bJC chQ -cje -bFh +mzg +cdP bJC -cks -ckR +dpO +ckX clk bSJ clJ @@ -118639,10 +118680,10 @@ bdr bdC beR bfy -bgV -aPM +rGj +aQT aLT -aQR +aTv blB bnt bpG @@ -118683,11 +118724,11 @@ cfo cgs chk chR -cje -bFh +mzg +cdP bJC -cku -ckR +dpO +ckX cll clE clK @@ -118841,13 +118882,13 @@ bco bdr bdA aLT -bfx +bfD aPj -aPN +aPl aLT -aQS -aRT -bnu +aPn +blB +sNb aQL brr aRT @@ -118885,13 +118926,13 @@ cdV cfo cgr bJC -chN -bJD -bFi +foL +mzg +bgW bJC -ckv -bTA -clm +ckR +ckX +loS bSJ clJ clg @@ -119045,12 +119086,12 @@ aMC bdA aLT bfx -bgW -aPM +bgY +aQT aLT -aQP +aTv blB -bnu +nCp aQL brr aUY @@ -119089,11 +119130,11 @@ bMy cgr bJC chP -cje -bFh +mzg +cdP bJC -cks -ckR +dpO +ckX cln bSJ clJ @@ -119248,10 +119289,10 @@ aLT aLT aLT hQW -bgW -aPM +bgY +aQT aLT -aQP +aTv blB qhU aQL @@ -119292,11 +119333,11 @@ bJC bJC bJC uUo -cje +mzg cdP bJC -cjF -ckR +dpO +ckX sUO bSJ bSJ @@ -119451,11 +119492,11 @@ aMB bdD aLT bfz +bgY aPl -aQT aLT -aTv -aRT +aPn +blB bnu aQL brt @@ -119496,10 +119537,10 @@ cgt bJC chS bQA -bFh +bgW bJC -cks -bTA +ckR +ckX meu bSJ clL @@ -119653,13 +119694,13 @@ bcE bdr bdD aLT -bfx -bgW -aPM +rrq +bgY +aQT aLT -aQP +aTv blB -bnu +mtr aQL brt bpC @@ -119699,11 +119740,11 @@ cgt bJC chQ cjf -bFh +cdP bJC -cks -ckR -clo +dpO +ckX +xoe bSJ clL clg @@ -119857,10 +119898,10 @@ bdr bdC beS bfy -bgW -aPM +bgY +aQT aLT -aQP +aTv blB bnt bpH @@ -119902,10 +119943,10 @@ cgs chl chR cjf -bFh +cdP bJC -cks -ckR +dpO +ckX cll clF clK @@ -120060,10 +120101,10 @@ aMC bdD aLT bfC +bgY aPl -aPM aLT -aQU +aPn aRX cSQ aQL @@ -120104,10 +120145,10 @@ bMy cgt bJC chV -bQB -bFh +cjf +bgW bJC -ckx +ckR bTC mvl bSJ @@ -120262,13 +120303,13 @@ aLT aLT aLT aLT -bfD -bgW -aPM +bfx +bgY +aQT aLT -aQV +aTv blB -bnu +sNb aQL aQL aQL @@ -120308,11 +120349,11 @@ bJC bJC chW rvT -bFh +cdP bJC -cky -ckR -cln +dpO +ckX +hAZ bSJ bSJ bSJ @@ -120467,12 +120508,12 @@ aLT bpL bfE njd -aPN +aQT aLT -aQS +aTv blB uvu -sNb +aUZ aQL bsS mqK @@ -120508,15 +120549,15 @@ bJC cfp cgu bJC -fcB +bMx chQ cjf -bFh +cdP bJC -cks -ckR +dpO +ckX clo -rrq +bVn bSJ clM clS @@ -120669,11 +120710,11 @@ bdr bkg aMz bfy +bgY aPl -aPM aLT -aQP -aRT +aPn +blB bnt aRT ihY @@ -120713,11 +120754,11 @@ cfo chm bJD chR -bQB -bFi +cjf +bgW bJC -ckv -bTA +ckR +ckX cll bTA clG @@ -120872,10 +120913,10 @@ aLT aLT brv nuA -bgW -aPM +bgY +aQT aLT -aQP +aTv blB oiQ lml @@ -120917,10 +120958,10 @@ bJC cdf jxx cjf -bFh +cdP bJC -cks -ckR +dpO +ckX rXj gfo bSJ @@ -121075,10 +121116,10 @@ bdr bpK aMz bfy -bgW -aPM +bgY +aQT aLT -aQP +aTv blB bnt aRT @@ -121120,10 +121161,10 @@ chn bJD chR cjf -bFh +cdP bJC -cks -ckR +dpO +ckX cll bTA clH @@ -121278,11 +121319,11 @@ bdv aLT bry bfu -aPn +bgY jVr aLT kXa -aRZ +blB chL lAl aQL @@ -121322,11 +121363,11 @@ cgv bJC wqc chN -bQC +cjf lok bJC ihM -bTE +ckX clm hXY bSJ diff --git a/maps/map_files/generic/Admin_level.dmm b/maps/map_files/generic/Admin_level.dmm index 727ae18b926a..8dd8e17e6507 100644 --- a/maps/map_files/generic/Admin_level.dmm +++ b/maps/map_files/generic/Admin_level.dmm @@ -1040,7 +1040,7 @@ }, /area/adminlevel/ert_station) "zk" = ( -/obj/structure/machinery/chem_dispenser/beer{ +/obj/structure/machinery/chem_dispenser/soda/beer{ density = 0; pixel_y = 10 }, diff --git a/maps/templates/Chinook.dmm b/maps/templates/Chinook.dmm index 0d9e64628b24..f2acbe320aeb 100644 --- a/maps/templates/Chinook.dmm +++ b/maps/templates/Chinook.dmm @@ -1875,7 +1875,7 @@ /area/adminlevel/chinook/engineering) "gv" = ( /obj/structure/surface/table/reinforced/almayer_B, -/obj/structure/machinery/chem_dispenser/beer, +/obj/structure/machinery/chem_dispenser/soda/beer, /turf/open/floor/almayer{ icon_state = "plate" }, diff --git a/maps/templates/clf_ert_station.dmm b/maps/templates/clf_ert_station.dmm index ec2a81bf6218..cf8bc8d46bf6 100644 --- a/maps/templates/clf_ert_station.dmm +++ b/maps/templates/clf_ert_station.dmm @@ -1828,7 +1828,7 @@ /turf/open/gm/river, /area/adminlevel/ert_station/clf_station) "RR" = ( -/obj/structure/machinery/chem_dispenser/beer{ +/obj/structure/machinery/chem_dispenser/soda/beer{ density = 0; pixel_y = 10 }, diff --git a/maps/templates/weyland_ert_station.dmm b/maps/templates/weyland_ert_station.dmm index 171bd8d9ac6e..854299a4efda 100644 --- a/maps/templates/weyland_ert_station.dmm +++ b/maps/templates/weyland_ert_station.dmm @@ -2509,7 +2509,7 @@ /area/adminlevel/ert_station/weyland_station) "EW" = ( /obj/structure/surface/table/reinforced, -/obj/structure/machinery/chem_dispenser/beer{ +/obj/structure/machinery/chem_dispenser/soda/beer{ density = 0; pixel_y = 23 }, diff --git a/sound/effects/alien_dragsound_large.ogg b/sound/effects/alien_dragsound_large.ogg new file mode 100644 index 000000000000..bacd14b0eb07 Binary files /dev/null and b/sound/effects/alien_dragsound_large.ogg differ diff --git a/sound/effects/burrowing_b.ogg b/sound/effects/burrowing_b.ogg new file mode 100644 index 000000000000..cc44a8e19282 Binary files /dev/null and b/sound/effects/burrowing_b.ogg differ diff --git a/sound/effects/burrowoff.ogg b/sound/effects/burrowoff.ogg new file mode 100644 index 000000000000..66f10b253612 Binary files /dev/null and b/sound/effects/burrowoff.ogg differ diff --git a/tgui/packages/tgui-panel/chat/constants.js b/tgui/packages/tgui-panel/chat/constants.js index a73003e13267..ac9346d8d5f0 100644 --- a/tgui/packages/tgui-panel/chat/constants.js +++ b/tgui/packages/tgui-panel/chat/constants.js @@ -125,14 +125,8 @@ export const MESSAGE_TYPES = [ type: MESSAGE_TYPE_ADMINCHAT, name: 'Admin Chat', description: 'ASAY messages', - selector: '.admin_channel, .adminsay, .headminsay', - admin: true, - }, - { - type: MESSAGE_TYPE_MODCHAT, - name: 'Mod Chat', - description: 'MSAY messages', - selector: '.mod_channel, .mod, .adminmod, .staffsay', + selector: + '.admin_channel, .adminsay, .headminsay, .mod_channel, .mod, .adminmod, .staffsay', admin: true, }, { diff --git a/tgui/packages/tgui-say/helpers/index.tsx b/tgui/packages/tgui-say/helpers/index.tsx index 44225cb876d3..c359c79a940f 100644 --- a/tgui/packages/tgui-say/helpers/index.tsx +++ b/tgui/packages/tgui-say/helpers/index.tsx @@ -166,13 +166,10 @@ export const getAvailableChannels = ( return availableChannels; } - if (roles.includes('Mod')) { - availableChannels.push('MSAY'); - } if (roles.includes('Mentor')) { availableChannels.push('Mentor'); } - if (roles.includes('Admin')) { + if (roles.includes('Mod')) { availableChannels.push('ASAY'); } diff --git a/tgui/packages/tgui-say/styles/colors.scss b/tgui/packages/tgui-say/styles/colors.scss index 509b3e17f5ef..e0abb717edf3 100644 --- a/tgui/packages/tgui-say/styles/colors.scss +++ b/tgui/packages/tgui-say/styles/colors.scss @@ -14,7 +14,6 @@ $comms: #b4b4b4; $me: #5975da; $ooc: #1c52f5; $looc: #e362b4; -$msay: #74471b; $mentor: #b5850d; $asay: #9611d4; @@ -49,7 +48,6 @@ $_channel_map: ( 'ooc': $ooc, 'looc': $looc, 'whisper': $say, - 'msay': $msay, 'mentor': $mentor, 'asay': $asay, 'department': $comms, diff --git a/tgui/packages/tgui/interfaces/JoeEmotes.tsx b/tgui/packages/tgui/interfaces/JoeEmotes.tsx new file mode 100644 index 000000000000..acd37de34978 --- /dev/null +++ b/tgui/packages/tgui/interfaces/JoeEmotes.tsx @@ -0,0 +1,110 @@ +import { useBackend, useLocalState } from '../backend'; +import { Box, Button, Divider, Section, Stack, Tabs } from '../components'; +import { Window } from '../layouts'; +import { BooleanLike } from '../../common/react'; + +type Emote = { + id: string; + text: string; + category: string; + path: string; +}; + +type BackendContext = { + categories: string[]; + emotes: Emote[]; + on_cooldown: BooleanLike; +}; + +const EmoteTab = (props, context) => { + const { data, act } = useBackend(context); + const { categories, emotes, on_cooldown } = data; + const [categoryIndex, setCategoryIndex] = useLocalState( + context, + 'category_index', + 'Farewell' + ); + const mapped_emote = emotes.filter( + (emote) => emote && emote.category === categoryIndex + ); + return ( + + + + + {categories.map((item, key) => ( + { + setCategoryIndex(item); + }}> + {item} + + ))} + + + + +
+ + + {mapped_emote.map((item) => ( + + + {' '} + + + + +
+
+
+ ); +}; + +export const JoeEmotes = (props, context) => { + return ( + + + + + + ); +};