diff --git a/code/__DEFINES/client_prefs.dm b/code/__DEFINES/client_prefs.dm
index ef5ff00e4ed6..b1e194354555 100644
--- a/code/__DEFINES/client_prefs.dm
+++ b/code/__DEFINES/client_prefs.dm
@@ -22,6 +22,7 @@
#define TOGGLE_VEND_ITEM_TO_HAND (1<<15) // This toggles whether items from vendors will be automatically put into your hand.
#define TOGGLE_START_JOIN_CURRENT_SLOT (1<<16) // Whether joining at roundstart ignores assigned character slot for the job and uses currently selected slot.
#define TOGGLE_LATE_JOIN_CURRENT_SLOT (1<<17) //Whether joining during the round ignores assigned character slot for the job and uses currently selected slot.
+#define TOGGLE_ABILITY_DEACTIVATION_OFF (1<<18) // This toggles whether selecting the same ability again can toggle it off
#define JOB_SLOT_RANDOMISED_SLOT -1
#define JOB_SLOT_CURRENT_SLOT 0
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/tgs.dm b/code/__DEFINES/tgs.dm
index 89976c498422..22c3827022ff 100644
--- a/code/__DEFINES/tgs.dm
+++ b/code/__DEFINES/tgs.dm
@@ -1,6 +1,6 @@
// tgstation-server DMAPI
-#define TGS_DMAPI_VERSION "6.5.0"
+#define TGS_DMAPI_VERSION "6.5.2"
// All functions and datums outside this document are subject to change with any version and should not be relied on.
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 0132a31d0b50..cca3edda464e 100644
--- a/code/__HELPERS/game.dm
+++ b/code/__HELPERS/game.dm
@@ -241,8 +241,14 @@
else
return get_step(start, EAST)
-/// Get a list of observers that can be alien candidates, optionally sorted by larva_queue_time
-/proc/get_alien_candidates(sorted = TRUE)
+/**
+ * Get a list of observers that can be alien candidates.
+ *
+ * Arguments:
+ * * hive - The hive we're filling a slot for to check if the player is banished
+ * * sorted - Whether to sort by larva_queue_time (default TRUE) or leave unsorted
+ */
+/proc/get_alien_candidates(datum/hive_status/hive = null, sorted = TRUE)
var/list/candidates = list()
for(var/mob/dead/observer/cur_obs as anything in GLOB.observer_list)
@@ -273,6 +279,15 @@
if((cur_obs.client.admin_holder && (cur_obs.client.admin_holder.rights & R_MOD)) && !cur_obs.adminlarva)
continue
+ if(hive)
+ var/banished = FALSE
+ for(var/mob_name in hive.banished_ckeys)
+ if(hive.banished_ckeys[mob_name] == cur_obs.ckey)
+ banished = TRUE
+ break
+ if(banished)
+ continue
+
candidates += cur_obs
// Optionally sort by larva_queue_time
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/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 18b11dde030e..a42ff3f22e59 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)
@@ -379,6 +384,13 @@ Additional game mode variables.
// No cache, lets check now then
message_alien_candidates(get_alien_candidates(), dequeued = 0, cache_only = TRUE)
if(candidate_observer.larva_queue_cached_message)
+ var/datum/hive_status/cur_hive
+ for(var/hive_num in GLOB.hive_datum)
+ cur_hive = GLOB.hive_datum[hive_num]
+ for(var/mob_name in cur_hive.banished_ckeys)
+ if(cur_hive.banished_ckeys[mob_name] == xeno_candidate.ckey)
+ candidate_observer.larva_queue_cached_message += "\n" + SPAN_WARNING("NOTE: You are banished from the [cur_hive] and you may not rejoin unless the Queen re-admits you or dies. Your queue number won't update until there is a hive you aren't banished from.")
+ break
to_chat(xeno_candidate, candidate_observer.larva_queue_cached_message)
return FALSE
diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm
index ed06c0117f33..9c0a227008c3 100644
--- a/code/game/machinery/cryopod.dm
+++ b/code/game/machinery/cryopod.dm
@@ -503,23 +503,25 @@ GLOBAL_LIST_INIT(frozen_items, list(SQUAD_MARINE_1 = list(), SQUAD_MARINE_2 = li
add_fingerprint(usr)
-/obj/structure/machinery/cryopod/proc/go_in_cryopod(mob/M, silent = FALSE)
+/obj/structure/machinery/cryopod/proc/go_in_cryopod(mob/mob, silent = FALSE)
if(occupant)
return
- M.forceMove(src)
- occupant = M
+ mob.forceMove(src)
+ occupant = mob
icon_state = "body_scanner_closed"
SetLuminosity(2)
time_entered = world.time
start_processing()
if(!silent)
- if(M.client)
- to_chat(M, SPAN_NOTICE("You feel cool air surround you. You go numb as your senses turn inward."))
- to_chat(M, SPAN_BOLDNOTICE("If you log out or close your client now, your character will permanently removed from the round in 10 minutes. If you ghost, timer will be decreased to 2 minutes."))
+ if(mob.client)
+ to_chat(mob, SPAN_NOTICE("You feel cool air surround you. You go numb as your senses turn inward."))
+ to_chat(mob, SPAN_BOLDNOTICE("If you log out or close your client now, your character will permanently removed from the round in 10 minutes. If you ghost, timer will be decreased to 2 minutes."))
+ if(!is_admin_level(src.z)) // Set their queue time now because the client has to actually leave to despawn and at that point the client is lost
+ mob.client.player_details.larva_queue_time = max(mob.client.player_details.larva_queue_time, world.time)
var/area/location = get_area(src)
- if(M.job != GET_MAPPED_ROLE(JOB_SQUAD_MARINE))
- message_admins("[key_name_admin(M)], [M.job], has entered \a [src] at [location] after playing for [duration2text(world.time - M.life_time_start)].")
+ if(mob.job != GET_MAPPED_ROLE(JOB_SQUAD_MARINE))
+ message_admins("[key_name_admin(mob)], [mob.job], has entered \a [src] at [location] after playing for [duration2text(world.time - mob.life_time_start)].")
playsound(src, 'sound/machines/hydraulics_3.ogg', 30)
silent_exit = silent
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/requisitions.dm b/code/game/machinery/vending/vendor_types/requisitions.dm
index 838b21a00e6f..b8e3e55f1d89 100644
--- a/code/game/machinery/vending/vendor_types/requisitions.dm
+++ b/code/game/machinery/vending/vendor_types/requisitions.dm
@@ -92,6 +92,7 @@
list("POUCHES", -1, null, null),
list("Autoinjector Pouch", round(scale * 2), /obj/item/storage/pouch/autoinjector, VENDOR_ITEM_REGULAR),
+ list("Bayonet Pouch", round(scale * 2), /obj/item/storage/pouch/bayonet, VENDOR_ITEM_REGULAR),
list("Construction Pouch", round(scale * 2), /obj/item/storage/pouch/construction, VENDOR_ITEM_REGULAR),
list("Document Pouch", round(scale * 2), /obj/item/storage/pouch/document/small, VENDOR_ITEM_REGULAR),
list("Electronics Pouch", round(scale * 2), /obj/item/storage/pouch/electronics, VENDOR_ITEM_REGULAR),
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/pamphlets.dm b/code/game/objects/items/pamphlets.dm
index 683fbb2540f4..dd96f275ef17 100644
--- a/code/game/objects/items/pamphlets.dm
+++ b/code/game/objects/items/pamphlets.dm
@@ -96,8 +96,8 @@
user.hud_set_squad()
var/obj/item/card/id/ID = user.wear_id
- ID.set_assignment((user.assigned_squad ? (user.assigned_squad.name + " ") : "") + "Squad Spotter")
- GLOB.data_core.manifest_modify(user.real_name, WEAKREF(user), "Squad Spotter")
+ ID.set_assignment((user.assigned_squad ? (user.assigned_squad.name + " ") : "") + "Spotter")
+ GLOB.data_core.manifest_modify(user.real_name, WEAKREF(user), "Spotter")
/obj/item/pamphlet/skill/machinegunner
name = "heavy machinegunner instructional pamphlet"
diff --git a/code/game/objects/items/storage/pouch.dm b/code/game/objects/items/storage/pouch.dm
index 198e5b3b9960..02e4b3866271 100644
--- a/code/game/objects/items/storage/pouch.dm
+++ b/code/game/objects/items/storage/pouch.dm
@@ -612,13 +612,12 @@
name = "explosive pouch"
desc = "It can carry grenades, plastic explosives, mine boxes, and other explosives."
icon_state = "large_explosive"
- storage_slots = 3
+ storage_slots = 6
max_w_class = SIZE_MEDIUM
can_hold = list(
/obj/item/explosive/plastic,
/obj/item/explosive/mine,
/obj/item/explosive/grenade,
- /obj/item/storage/box/explosive_mines,
)
/obj/item/storage/pouch/explosive/attackby(obj/item/W, mob/user)
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/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/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..f42f350eea16 100644
--- a/code/modules/client/client_procs.dm
+++ b/code/modules/client/client_procs.dm
@@ -46,6 +46,7 @@ GLOBAL_LIST_INIT(whitelisted_client_procs, list(
/client/proc/toggle_eject_to_hand,
/client/proc/toggle_automatic_punctuation,
/client/proc/toggle_middle_mouse_click,
+ /client/proc/toggle_ability_deactivation,
/client/proc/toggle_clickdrag_override,
/client/proc/toggle_dualwield,
/client/proc/toggle_middle_mouse_swap_hands,
@@ -713,17 +714,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/preferences.dm b/code/modules/client/preferences.dm
index d2d69d095dbd..5698c30c0acf 100644
--- a/code/modules/client/preferences.dm
+++ b/code/modules/client/preferences.dm
@@ -595,6 +595,8 @@ var/const/MAX_SAVE_SLOTS = 10
[toggle_prefs & TOGGLE_HELP_INTENT_SAFETY ? "On" : "Off"] "
dat += "Toggle Middle Mouse Ability Activation: \
[toggle_prefs & TOGGLE_MIDDLE_MOUSE_CLICK ? "On" : "Off"] "
+ dat += "Toggle Ability Deactivation: \
+ [toggle_prefs & TOGGLE_ABILITY_DEACTIVATION_OFF ? "Off" : "On"] "
dat += "Toggle Directional Assist: \
[toggle_prefs & TOGGLE_DIRECTIONAL_ATTACK ? "On" : "Off"] "
dat += "Toggle Magazine Auto-Ejection: \
@@ -1229,7 +1231,7 @@ var/const/MAX_SAVE_SLOTS = 10
predator_gender = predator_gender == MALE ? FEMALE : MALE
if("pred_age")
var/new_predator_age = tgui_input_number(user, "Choose your Predator's age(175 to 3000):", "Character Preference", 1234, 3000, 175)
- if(new_predator_age)
+ if(new_predator_age)
predator_age = max(min( round(text2num(new_predator_age)), 3000),175)
if("pred_trans_type")
var/new_translator_type = tgui_input_list(user, "Choose your translator type.", "Translator Type", PRED_TRANSLATORS)
diff --git a/code/modules/client/preferences_toggles.dm b/code/modules/client/preferences_toggles.dm
index 9e3d9eb33766..b81411a26440 100644
--- a/code/modules/client/preferences_toggles.dm
+++ b/code/modules/client/preferences_toggles.dm
@@ -205,7 +205,7 @@
set name = "Toggle SpecialRole Candidacy"
set category = "Preferences"
set desc = "Toggles which special roles you would like to be a candidate for, during events."
-
+
var/list/be_special_flags = list(
"Xenomorph after unrevivable death" = BE_ALIEN_AFTER_DEATH,
"Agent" = BE_AGENT,
@@ -274,6 +274,7 @@
"Toggle 'Unload Weapon' Ejecting Magazines to Your Hands ",
"Toggle Automatic Punctuation ",
"Toggle Middle Mouse Ability Activation ",
+ "Toggle Ability Deactivation ",
"Toggle Combat Click-Drag Override ",
"Toggle Alternate-Fire Dual Wielding ",
"Toggle Middle Mouse Swapping Hands ",
@@ -287,7 +288,7 @@
for (var/pref_button in pref_buttons)
dat += "[pref_button]\n"
- var/height = 50+22*length(pref_buttons)
+ var/height = 50+24*length(pref_buttons)
show_browser(src, dat, "Toggle Preferences", "togglepreferences", "size=475x[height]")
@@ -355,6 +356,14 @@
to_chat(src, SPAN_NOTICE("Your selected ability will now be activated with shift clicking."))
prefs.save_preferences()
+/client/proc/toggle_ability_deactivation() // Toggle whether the current ability can be deactivated when re-selected
+ prefs.toggle_prefs ^= TOGGLE_ABILITY_DEACTIVATION_OFF
+ if (prefs.toggle_prefs & TOGGLE_ABILITY_DEACTIVATION_OFF)
+ to_chat(src, SPAN_NOTICE("Your current ability can no longer be toggled off when re-selected."))
+ else
+ to_chat(src, SPAN_NOTICE("Your current ability can be toggled off when re-selected."))
+ prefs.save_preferences()
+
/client/proc/toggle_clickdrag_override() //Toggle whether mousedown clicks immediately when on disarm or harm intent to prevent click-dragging from 'eating' attacks.
prefs.toggle_prefs ^= TOGGLE_COMBAT_CLICKDRAG_OVERRIDE
if(prefs.toggle_prefs & TOGGLE_COMBAT_CLICKDRAG_OVERRIDE)
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_aliens/structures/special/pylon_core.dm b/code/modules/cm_aliens/structures/special/pylon_core.dm
index c38e540efb30..a29b49b7745a 100644
--- a/code/modules/cm_aliens/structures/special/pylon_core.dm
+++ b/code/modules/cm_aliens/structures/special/pylon_core.dm
@@ -150,7 +150,7 @@
last_larva_time = world.time
if(spawning_larva || (last_larva_queue_time + spawn_cooldown * 4) < world.time)
last_larva_queue_time = world.time
- var/list/players_with_xeno_pref = get_alien_candidates()
+ var/list/players_with_xeno_pref = get_alien_candidates(linked_hive)
if(players_with_xeno_pref && players_with_xeno_pref.len)
if(spawning_larva && spawn_burrowed_larva(players_with_xeno_pref[1]))
// We were in spawning_larva mode and successfully spawned someone
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/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/living/carbon/human/death.dm b/code/modules/mob/living/carbon/human/death.dm
index dbe00407d7ef..3896cd1f9ded 100644
--- a/code/modules/mob/living/carbon/human/death.dm
+++ b/code/modules/mob/living/carbon/human/death.dm
@@ -48,6 +48,10 @@
if(HAS_TRAIT(src, TRAIT_HARDCORE) || MODE_HAS_TOGGLEABLE_FLAG(MODE_HARDCORE_PERMA))
if(!(species.flags & IS_SYNTHETIC)) // Synths wont perma
status_flags |= PERMANENTLY_DEAD
+ if(HAS_TRAIT(src, TRAIT_INTENT_EYES)) //their eyes need to be 'offline'
+ r_eyes = 0
+ g_eyes = 0
+ b_eyes = 0
disable_special_flags()
disable_lights()
disable_special_items()
@@ -59,6 +63,7 @@
//Handle species-specific deaths.
if(species)
species.handle_death(src, gibbed)
+ update_body() //if species handle_death or other procs change body in some way after death, this is what will update the body.
SEND_GLOBAL_SIGNAL(COMSIG_GLOB_MARINE_DEATH, src, gibbed)
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
index 874684480d15..b9044becb6f5 100644
--- a/code/modules/mob/living/carbon/human/species/working_joe/_species.dm
+++ b/code/modules/mob/living/carbon/human/species/working_joe/_species.dm
@@ -1,6 +1,7 @@
/datum/species/synthetic/colonial/working_joe
name = SYNTH_WORKING_JOE
name_plural = "Working Joes"
+ death_message = "violently gargles fluid and seizes up, the glow in their eyes dimming..."
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)
@@ -14,6 +15,11 @@
. = ..()
give_action(joe, /datum/action/joe_emote_panel)
+// Special death noise for Working Joe
+/datum/species/synthetic/colonial/working_joe/handle_death(mob/living/carbon/human/dying_joe, gibbed)
+ if(!gibbed) //A gibbed Joe won't have a death rattle
+ playsound(dying_joe.loc, pick_weight(list('sound/voice/joe/death_normal.ogg' = 75, 'sound/voice/joe/death_silence.ogg' = 10, 'sound/voice/joe/death_tomorrow.ogg' = 10,'sound/voice/joe/death_dream.ogg' = 5)), 25, FALSE)
+ return ..()
/// Open the WJ's emote panel, which allows them to use voicelines
/datum/species/synthetic/colonial/working_joe/proc/open_emote_panel()
diff --git a/code/modules/mob/living/carbon/xenomorph/Embryo.dm b/code/modules/mob/living/carbon/xenomorph/Embryo.dm
index 01f6c1a3c238..3ba42650e49c 100644
--- a/code/modules/mob/living/carbon/xenomorph/Embryo.dm
+++ b/code/modules/mob/living/carbon/xenomorph/Embryo.dm
@@ -163,7 +163,7 @@
if(!picked)
// Get a candidate from observers
- var/list/candidates = get_alien_candidates()
+ var/list/candidates = get_alien_candidates(hive)
if(candidates && candidates.len)
// If they were facehugged by a player thats still in queue, they get second dibs on the new larva.
if(hugger_ckey)
diff --git a/code/modules/mob/living/carbon/xenomorph/Xenomorph.dm b/code/modules/mob/living/carbon/xenomorph/Xenomorph.dm
index 40d38c24085a..0b2625882ed8 100644
--- a/code/modules/mob/living/carbon/xenomorph/Xenomorph.dm
+++ b/code/modules/mob/living/carbon/xenomorph/Xenomorph.dm
@@ -1087,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/xeno_action.dm b/code/modules/mob/living/carbon/xenomorph/abilities/xeno_action.dm
index 60fdda450df3..f4d4628e41f2 100644
--- a/code/modules/mob/living/carbon/xenomorph/abilities/xeno_action.dm
+++ b/code/modules/mob/living/carbon/xenomorph/abilities/xeno_action.dm
@@ -158,6 +158,8 @@
if(xeno.selected_ability == src)
if(xeno.deselect_timer > world.time)
return // We clicked the same ability in a very short time
+ if(xeno.client && xeno.client.prefs && xeno.client.prefs.toggle_prefs & TOGGLE_ABILITY_DEACTIVATION_OFF)
+ return
to_chat(xeno, "You will no longer use [ability_name] with \
[xeno.client && xeno.client.prefs && xeno.client.prefs.toggle_prefs & TOGGLE_MIDDLE_MOUSE_CLICK ? "middle-click" : "shift-click"].")
button.icon_state = "template"
diff --git a/code/modules/mob/living/carbon/xenomorph/castes/Facehugger.dm b/code/modules/mob/living/carbon/xenomorph/castes/Facehugger.dm
index 1ad171ec5c93..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 ..()
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/death.dm b/code/modules/mob/living/carbon/xenomorph/death.dm
index e3a69da23262..12c9b3e37c9b 100644
--- a/code/modules/mob/living/carbon/xenomorph/death.dm
+++ b/code/modules/mob/living/carbon/xenomorph/death.dm
@@ -38,7 +38,7 @@
if(GLOB.hive_datum[hivenumber].stored_larva)
GLOB.hive_datum[hivenumber].stored_larva = round(GLOB.hive_datum[hivenumber].stored_larva * 0.5) //Lose half on dead queen
- var/list/players_with_xeno_pref = get_alien_candidates()
+ var/list/players_with_xeno_pref = get_alien_candidates(GLOB.hive_datum[hivenumber])
if(players_with_xeno_pref && istype(GLOB.hive_datum[hivenumber].hive_location, /obj/effect/alien/resin/special/pylon/core))
var/turf/larva_spawn = get_turf(GLOB.hive_datum[hivenumber].hive_location)
var/count = 0
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/xeno_verbs.dm b/code/modules/mob/living/carbon/xenomorph/xeno_verbs.dm
index 20c170b72e4e..6b37145ad7a1 100644
--- a/code/modules/mob/living/carbon/xenomorph/xeno_verbs.dm
+++ b/code/modules/mob/living/carbon/xenomorph/xeno_verbs.dm
@@ -111,6 +111,21 @@
else
to_chat(src, SPAN_NOTICE("The selected xeno ability will now be activated with shift clicking."))
+/mob/living/carbon/xenomorph/verb/ability_deactivation_toggle()
+ set name = "Toggle Ability Deactivation"
+ set desc = "Toggles whether you can deactivate your currently active ability when re-selecting it."
+ set category = "Alien"
+
+ if (!client || !client.prefs)
+ return
+
+ client.prefs.toggle_prefs ^= TOGGLE_ABILITY_DEACTIVATION_OFF
+ client.prefs.save_preferences()
+ if (client.prefs.toggle_prefs & TOGGLE_ABILITY_DEACTIVATION_OFF)
+ to_chat(src, SPAN_NOTICE("Your current ability can no longer be toggled off when re-selected."))
+ else
+ to_chat(src, SPAN_NOTICE("Your current ability can be toggled off when re-selected."))
+
/mob/living/carbon/xenomorph/verb/directional_attack_toggle()
set name = "Toggle Directional Attacks"
set desc = "Toggles the use of directional assist attacks."
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/reagents/chemistry_machinery/chem_dispenser.dm b/code/modules/reagents/chemistry_machinery/chem_dispenser.dm
index 09d46aa8c053..98896013c6ec 100644
--- a/code/modules/reagents/chemistry_machinery/chem_dispenser.dm
+++ b/code/modules/reagents/chemistry_machinery/chem_dispenser.dm
@@ -1,3 +1,7 @@
+#define DISPENSER_UNHACKABLE -1
+#define DISPENSER_NOT_HACKED 0
+#define DISPENSER_HACKED 1
+
/obj/structure/machinery/chem_dispenser
name = "chemical dispenser"
desc = "A complex machine for mixing elements into chemicals. A Wey-Yu product."
@@ -6,6 +10,7 @@
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
@@ -14,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"
@@ -112,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)
@@ -150,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
@@ -171,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)
@@ -207,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",
@@ -234,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/shuttle.dm b/code/modules/shuttle/shuttle.dm
index 6d3465ee8747..983fffeb2634 100644
--- a/code/modules/shuttle/shuttle.dm
+++ b/code/modules/shuttle/shuttle.dm
@@ -635,7 +635,7 @@
var/mob/dead/observer/obs = mob.ghostize(FALSE)
if(obs)
obs.timeofdeath = world.time
- obs.client?.player_details.larva_queue_time = world.time
+ obs.client?.player_details.larva_queue_time = max(obs.client.player_details.larva_queue_time, world.time)
mob.moveToNullspace()
// Now that mobs are stowed, delete the shuttle
diff --git a/code/modules/tgs/core/_definitions.dm b/code/modules/tgs/core/_definitions.dm
index ebf6d17c2a07..fd98034eb716 100644
--- a/code/modules/tgs/core/_definitions.dm
+++ b/code/modules/tgs/core/_definitions.dm
@@ -1,2 +1,10 @@
+#if DM_VERSION < 510
+#error The TGS DMAPI does not support BYOND versions < 510!
+#endif
+
#define TGS_UNIMPLEMENTED "___unimplemented"
#define TGS_VERSION_PARAMETER "server_service_version"
+
+#ifndef TGS_DEBUG_LOG
+#define TGS_DEBUG_LOG(message)
+#endif
diff --git a/code/modules/tgs/v3210/commands.dm b/code/modules/tgs/v3210/commands.dm
index d9bd287465b9..e65c816320dc 100644
--- a/code/modules/tgs/v3210/commands.dm
+++ b/code/modules/tgs/v3210/commands.dm
@@ -47,7 +47,7 @@
user.friendly_name = sender
// Discord hack, fix the mention if it's only numbers (fuck you IRC trolls)
- var/regex/discord_id_regex = regex(@"^[0-9]+$")
+ var/regex/discord_id_regex = regex("^\[0-9\]+$")
if(findtext(sender, discord_id_regex))
sender = "<@[sender]>"
@@ -55,4 +55,4 @@
var/datum/tgs_message_content/result = stc.Run(user, params)
result = UpgradeDeprecatedCommandResponse(result, command)
- return result?.text || TRUE
+ return result ? result.text : TRUE
diff --git a/code/modules/tgs/v4/commands.dm b/code/modules/tgs/v4/commands.dm
index d6d3d718d471..25dd6740e3af 100644
--- a/code/modules/tgs/v4/commands.dm
+++ b/code/modules/tgs/v4/commands.dm
@@ -40,5 +40,5 @@
var/datum/tgs_message_content/result = sc.Run(u, params)
result = UpgradeDeprecatedCommandResponse(result, command)
- return result?.text
+ return result ? result.text : TRUE
return "Unknown command: [command]!"
diff --git a/code/modules/tgs/v5/_defines.dm b/code/modules/tgs/v5/_defines.dm
index c7213cc24699..f973338daa03 100644
--- a/code/modules/tgs/v5/_defines.dm
+++ b/code/modules/tgs/v5/_defines.dm
@@ -5,8 +5,8 @@
#define DMAPI5_TOPIC_DATA "tgs_data"
#define DMAPI5_BRIDGE_REQUEST_LIMIT 8198
-#define DMAPI5_TOPIC_REQUEST_LIMIT 65529
-#define DMAPI5_TOPIC_RESPONSE_LIMIT 65528
+#define DMAPI5_TOPIC_REQUEST_LIMIT 65528
+#define DMAPI5_TOPIC_RESPONSE_LIMIT 65529
#define DMAPI5_BRIDGE_COMMAND_PORT_UPDATE 0
#define DMAPI5_BRIDGE_COMMAND_STARTUP 1
diff --git a/code/modules/tgs/v5/api.dm b/code/modules/tgs/v5/api.dm
index 926ea10a8f27..34cc43f8762f 100644
--- a/code/modules/tgs/v5/api.dm
+++ b/code/modules/tgs/v5/api.dm
@@ -22,12 +22,17 @@
var/detached = FALSE
+/datum/tgs_api/v5/New()
+ . = ..()
+ TGS_DEBUG_LOG("V5 API created")
+
/datum/tgs_api/v5/ApiVersion()
return new /datum/tgs_version(
#include "__interop_version.dm"
)
/datum/tgs_api/v5/OnWorldNew(minimum_required_security_level)
+ TGS_DEBUG_LOG("OnWorldNew()")
server_port = world.params[DMAPI5_PARAM_SERVER_PORT]
access_identifier = world.params[DMAPI5_PARAM_ACCESS_IDENTIFIER]
@@ -96,17 +101,28 @@
return TRUE
/datum/tgs_api/v5/proc/RequireInitialBridgeResponse()
+ TGS_DEBUG_LOG("RequireInitialBridgeResponse()")
+ var/logged = FALSE
while(!version)
+ if(!logged)
+ TGS_DEBUG_LOG("RequireInitialBridgeResponse: Starting sleep")
+ logged = TRUE
+
sleep(1)
+ TGS_DEBUG_LOG("RequireInitialBridgeResponse: Passed")
+
/datum/tgs_api/v5/OnInitializationComplete()
Bridge(DMAPI5_BRIDGE_COMMAND_PRIME)
/datum/tgs_api/v5/OnTopic(T)
+ TGS_DEBUG_LOG("OnTopic()")
RequireInitialBridgeResponse()
+ TGS_DEBUG_LOG("OnTopic passed bridge request gate")
var/list/params = params2list(T)
var/json = params[DMAPI5_TOPIC_DATA]
if(!json)
+ TGS_DEBUG_LOG("No \"[DMAPI5_TOPIC_DATA]\" entry found, ignoring...")
return FALSE // continue to /world/Topic
if(!initialized)
@@ -156,7 +172,7 @@
TGS_WARNING_LOG("Received legacy string when a [/datum/tgs_message_content] was expected. Please audit all calls to TgsChatBroadcast, TgsChatTargetedBroadcast, and TgsChatPrivateMessage to ensure they use the new /datum.")
return new /datum/tgs_message_content(message)
-/datum/tgs_api/v5/ChatBroadcast(datum/tgs_message_content/message, list/channels)
+/datum/tgs_api/v5/ChatBroadcast(datum/tgs_message_content/message2, list/channels)
if(!length(channels))
channels = ChatChannelInfo()
@@ -165,45 +181,45 @@
var/datum/tgs_chat_channel/channel = I
ids += channel.id
- message = UpgradeDeprecatedChatMessage(message)
+ message2 = UpgradeDeprecatedChatMessage(message2)
if (!length(channels))
return
- message = message._interop_serialize()
- message[DMAPI5_CHAT_MESSAGE_CHANNEL_IDS] = ids
+ var/list/data = message2._interop_serialize()
+ data[DMAPI5_CHAT_MESSAGE_CHANNEL_IDS] = ids
if(intercepted_message_queue)
- intercepted_message_queue += list(message)
+ intercepted_message_queue += list(data)
else
- Bridge(DMAPI5_BRIDGE_COMMAND_CHAT_SEND, list(DMAPI5_BRIDGE_PARAMETER_CHAT_MESSAGE = message))
+ Bridge(DMAPI5_BRIDGE_COMMAND_CHAT_SEND, list(DMAPI5_BRIDGE_PARAMETER_CHAT_MESSAGE = data))
-/datum/tgs_api/v5/ChatTargetedBroadcast(datum/tgs_message_content/message, admin_only)
+/datum/tgs_api/v5/ChatTargetedBroadcast(datum/tgs_message_content/message2, admin_only)
var/list/channels = list()
for(var/I in ChatChannelInfo())
var/datum/tgs_chat_channel/channel = I
if (!channel.is_private_channel && ((channel.is_admin_channel && admin_only) || (!channel.is_admin_channel && !admin_only)))
channels += channel.id
- message = UpgradeDeprecatedChatMessage(message)
+ message2 = UpgradeDeprecatedChatMessage(message2)
if (!length(channels))
return
- message = message._interop_serialize()
- message[DMAPI5_CHAT_MESSAGE_CHANNEL_IDS] = channels
+ var/list/data = message2._interop_serialize()
+ data[DMAPI5_CHAT_MESSAGE_CHANNEL_IDS] = channels
if(intercepted_message_queue)
- intercepted_message_queue += list(message)
+ intercepted_message_queue += list(data)
else
- Bridge(DMAPI5_BRIDGE_COMMAND_CHAT_SEND, list(DMAPI5_BRIDGE_PARAMETER_CHAT_MESSAGE = message))
+ Bridge(DMAPI5_BRIDGE_COMMAND_CHAT_SEND, list(DMAPI5_BRIDGE_PARAMETER_CHAT_MESSAGE = data))
-/datum/tgs_api/v5/ChatPrivateMessage(datum/tgs_message_content/message, datum/tgs_chat_user/user)
- message = UpgradeDeprecatedChatMessage(message)
- message = message._interop_serialize()
- message[DMAPI5_CHAT_MESSAGE_CHANNEL_IDS] = list(user.channel.id)
+/datum/tgs_api/v5/ChatPrivateMessage(datum/tgs_message_content/message2, datum/tgs_chat_user/user)
+ message2 = UpgradeDeprecatedChatMessage(message2)
+ var/list/data = message2._interop_serialize()
+ data[DMAPI5_CHAT_MESSAGE_CHANNEL_IDS] = list(user.channel.id)
if(intercepted_message_queue)
- intercepted_message_queue += list(message)
+ intercepted_message_queue += list(data)
else
- Bridge(DMAPI5_BRIDGE_COMMAND_CHAT_SEND, list(DMAPI5_BRIDGE_PARAMETER_CHAT_MESSAGE = message))
+ Bridge(DMAPI5_BRIDGE_COMMAND_CHAT_SEND, list(DMAPI5_BRIDGE_PARAMETER_CHAT_MESSAGE = data))
/datum/tgs_api/v5/ChatChannelInfo()
RequireInitialBridgeResponse()
@@ -211,6 +227,7 @@
return chat_channels.Copy()
/datum/tgs_api/v5/proc/DecodeChannels(chat_update_json)
+ TGS_DEBUG_LOG("DecodeChannels()")
var/list/chat_channels_json = chat_update_json[DMAPI5_CHAT_UPDATE_CHANNELS]
if(istype(chat_channels_json))
chat_channels.Cut()
diff --git a/code/modules/tgs/v5/commands.dm b/code/modules/tgs/v5/commands.dm
index a832c81f172d..9557f8a08ed5 100644
--- a/code/modules/tgs/v5/commands.dm
+++ b/code/modules/tgs/v5/commands.dm
@@ -35,10 +35,10 @@
if(sc)
var/datum/tgs_message_content/response = sc.Run(u, params)
response = UpgradeDeprecatedCommandResponse(response, command)
-
+
var/list/topic_response = TopicResponse()
- topic_response[DMAPI5_TOPIC_RESPONSE_COMMAND_RESPONSE_MESSAGE] = response?.text
- topic_response[DMAPI5_TOPIC_RESPONSE_COMMAND_RESPONSE] = response?._interop_serialize()
+ topic_response[DMAPI5_TOPIC_RESPONSE_COMMAND_RESPONSE_MESSAGE] = response ? response.text : null
+ topic_response[DMAPI5_TOPIC_RESPONSE_COMMAND_RESPONSE] = response ? response._interop_serialize() : null
return topic_response
return TopicResponse("Unknown custom chat command: [command]!")
diff --git a/code/modules/tgs/v5/serializers.dm b/code/modules/tgs/v5/serializers.dm
index 7f9bc731b792..3a32848ad512 100644
--- a/code/modules/tgs/v5/serializers.dm
+++ b/code/modules/tgs/v5/serializers.dm
@@ -1,12 +1,12 @@
/datum/tgs_message_content/proc/_interop_serialize()
- return list("text" = text, "embed" = embed?._interop_serialize())
+ return list("text" = text, "embed" = embed ? embed._interop_serialize() : null)
/datum/tgs_chat_embed/proc/_interop_serialize()
CRASH("Base /proc/interop_serialize called on [type]!")
/datum/tgs_chat_embed/structure/_interop_serialize()
var/list/serialized_fields
- if(islist(fields))
+ if(istype(fields, /list))
serialized_fields = list()
for(var/datum/tgs_chat_embed/field/field as anything in fields)
serialized_fields += list(field._interop_serialize())
@@ -16,12 +16,12 @@
"url" = url,
"timestamp" = timestamp,
"colour" = colour,
- "image" = image?._interop_serialize(),
- "thumbnail" = thumbnail?._interop_serialize(),
- "video" = video?._interop_serialize(),
- "footer" = footer?._interop_serialize(),
- "provider" = provider?._interop_serialize(),
- "author" = author?._interop_serialize(),
+ "image" = src.image ? src.image._interop_serialize() : null,
+ "thumbnail" = thumbnail ? thumbnail._interop_serialize() : null,
+ "video" = video ? video._interop_serialize() : null,
+ "footer" = footer ? footer._interop_serialize() : null,
+ "provider" = provider ? provider._interop_serialize() : null,
+ "author" = author ? author._interop_serialize() : null,
"fields" = serialized_fields
)
@@ -43,7 +43,7 @@
. = ..()
.["iconUrl"] = icon_url
.["proxyIconUrl"] = proxy_icon_url
-
+
/datum/tgs_chat_embed/footer/_interop_serialize()
return list(
"text" = text,
diff --git a/code/modules/tgs/v5/topic.dm b/code/modules/tgs/v5/topic.dm
index 56c1824fd97d..d7d471213813 100644
--- a/code/modules/tgs/v5/topic.dm
+++ b/code/modules/tgs/v5/topic.dm
@@ -5,6 +5,7 @@
return response
/datum/tgs_api/v5/proc/ProcessTopicJson(json, check_access_identifier)
+ TGS_DEBUG_LOG("ProcessTopicJson(..., [check_access_identifier])")
var/list/result = ProcessRawTopic(json, check_access_identifier)
if(!result)
result = TopicResponse("Runtime error!")
@@ -25,16 +26,20 @@
return response_json
/datum/tgs_api/v5/proc/ProcessRawTopic(json, check_access_identifier)
+ TGS_DEBUG_LOG("ProcessRawTopic(..., [check_access_identifier])")
var/list/topic_parameters = json_decode(json)
if(!topic_parameters)
+ TGS_DEBUG_LOG("ProcessRawTopic: json_decode failed")
return TopicResponse("Invalid topic parameters json: [json]!");
var/their_sCK = topic_parameters[DMAPI5_PARAMETER_ACCESS_IDENTIFIER]
if(check_access_identifier && their_sCK != access_identifier)
- return TopicResponse("Failed to decode [DMAPI5_PARAMETER_ACCESS_IDENTIFIER]!")
+ TGS_DEBUG_LOG("ProcessRawTopic: access identifier check failed")
+ return TopicResponse("Failed to decode [DMAPI5_PARAMETER_ACCESS_IDENTIFIER] or it does not match!")
var/command = topic_parameters[DMAPI5_TOPIC_PARAMETER_COMMAND_TYPE]
if(!isnum(command))
+ TGS_DEBUG_LOG("ProcessRawTopic: command type check failed")
return TopicResponse("Failed to decode [DMAPI5_TOPIC_PARAMETER_COMMAND_TYPE]!")
return ProcessTopicCommand(command, topic_parameters)
@@ -43,6 +48,7 @@
return "response[payload_id]"
/datum/tgs_api/v5/proc/ProcessTopicCommand(command, list/topic_parameters)
+ TGS_DEBUG_LOG("ProcessTopicCommand([command], ...)")
switch(command)
if(DMAPI5_TOPIC_COMMAND_CHAT_COMMAND)
@@ -55,7 +61,6 @@
return result
if(DMAPI5_TOPIC_COMMAND_EVENT_NOTIFICATION)
- intercepted_message_queue = list()
var/list/event_notification = topic_parameters[DMAPI5_TOPIC_PARAMETER_EVENT_NOTIFICATION]
if(!istype(event_notification))
return TopicResponse("Invalid [DMAPI5_TOPIC_PARAMETER_EVENT_NOTIFICATION]!")
@@ -66,23 +71,25 @@
var/list/event_parameters = event_notification[DMAPI5_EVENT_NOTIFICATION_PARAMETERS]
if(event_parameters && !istype(event_parameters))
- return TopicResponse("Invalid or missing [DMAPI5_EVENT_NOTIFICATION_PARAMETERS]!")
+ . = TopicResponse("Invalid or missing [DMAPI5_EVENT_NOTIFICATION_PARAMETERS]!")
+ else
+ var/list/response = TopicResponse()
+ . = response
+ if(event_handler != null)
+ var/list/event_call = list(event_type)
+ if(event_parameters)
+ event_call += event_parameters
+
+ intercepted_message_queue = list()
+ event_handler.HandleEvent(arglist(event_call))
+ response[DMAPI5_TOPIC_RESPONSE_CHAT_RESPONSES] = intercepted_message_queue
+ intercepted_message_queue = null
- var/list/event_call = list(event_type)
if (event_type == TGS_EVENT_WATCHDOG_DETACH)
detached = TRUE
chat_channels.Cut() // https://github.com/tgstation/tgstation-server/issues/1490
- if(event_parameters)
- event_call += event_parameters
-
- if(event_handler != null)
- event_handler.HandleEvent(arglist(event_call))
-
- var/list/response = TopicResponse()
- response[DMAPI5_TOPIC_RESPONSE_CHAT_RESPONSES] = intercepted_message_queue
- intercepted_message_queue = null
- return response
+ return
if(DMAPI5_TOPIC_COMMAND_CHANGE_PORT)
var/new_port = topic_parameters[DMAPI5_TOPIC_PARAMETER_NEW_PORT]
@@ -122,8 +129,10 @@
return TopicResponse()
if(DMAPI5_TOPIC_COMMAND_CHAT_CHANNELS_UPDATE)
+ TGS_DEBUG_LOG("ProcessTopicCommand: It's a chat update")
var/list/chat_update_json = topic_parameters[DMAPI5_TOPIC_PARAMETER_CHAT_UPDATE]
if(!istype(chat_update_json))
+ TGS_DEBUG_LOG("ProcessTopicCommand: failed \"[DMAPI5_TOPIC_PARAMETER_CHAT_UPDATE]\" check")
return TopicResponse("Invalid or missing [DMAPI5_TOPIC_PARAMETER_CHAT_UPDATE]!")
DecodeChannels(chat_update_json)
@@ -138,7 +147,7 @@
return TopicResponse()
if(DMAPI5_TOPIC_COMMAND_HEALTHCHECK)
- if(event_handler?.receive_health_checks)
+ if(event_handler && event_handler.receive_health_checks)
event_handler.HandleEvent(TGS_EVENT_HEALTH_CHECK)
return TopicResponse()
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/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 304d5221ddd3..663f05b2c9de 100644
--- a/colonialmarines.dme
+++ b/colonialmarines.dme
@@ -558,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"
diff --git a/html/changelogs/AutoChangeLog-pr-3798.yml b/html/changelogs/AutoChangeLog-pr-3798.yml
new file mode 100644
index 000000000000..0cf3ed169ecd
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-3798.yml
@@ -0,0 +1,6 @@
+author: "Ben10083"
+delete-after: True
+changes:
+ - rscadd: "Working Joes now have a unique death message. Credit to Quickload for the message."
+ - soundadd: "Working Joes now have a death rattle. Credit to Quickload for shifting through Alien Isolation audio files."
+ - qol: "Things that die with intent eyes now lose color in their eyes on death."
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-3802.yml b/html/changelogs/AutoChangeLog-pr-3802.yml
deleted file mode 100644
index cc61849fdeeb..000000000000
--- a/html/changelogs/AutoChangeLog-pr-3802.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "Drathek"
-delete-after: True
-changes:
- - bugfix: "Fix ghosting preventing first dibs on the larva in a hugged marine"
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-3818.yml b/html/changelogs/AutoChangeLog-pr-3818.yml
deleted file mode 100644
index 8da4da215361..000000000000
--- a/html/changelogs/AutoChangeLog-pr-3818.yml
+++ /dev/null
@@ -1,10 +0,0 @@
-author: "Unknownity"
-delete-after: True
-changes:
- - 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."
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-3885.yml b/html/changelogs/AutoChangeLog-pr-3885.yml
new file mode 100644
index 000000000000..f3d6528be66b
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-3885.yml
@@ -0,0 +1,6 @@
+author: "Drathek"
+delete-after: True
+changes:
+ - bugfix: "Banished players will no longer be candidates for hives they are banished from."
+ - bugfix: "Cryoing will now set your larva queue time so you don't get prioritized over others that have been waiting."
+ - admin: "Shuttle intoTheSunset will set larva queue time the same as other situations."
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-3892.yml b/html/changelogs/AutoChangeLog-pr-3892.yml
new file mode 100644
index 000000000000..5973b1b11324
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-3892.yml
@@ -0,0 +1,4 @@
+author: "theselfish"
+delete-after: True
+changes:
+ - spellcheck: "Goodbye Squad Spotter, hello regular non-squaded Spotter."
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-3897.yml b/html/changelogs/AutoChangeLog-pr-3897.yml
new file mode 100644
index 000000000000..5c4c45410146
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-3897.yml
@@ -0,0 +1,5 @@
+author: "Morrow"
+delete-after: True
+changes:
+ - balance: "Explosive pouch inventory size from 3 to 6"
+ - balance: "Explosive pouch can no longer hold mine boxes"
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-3898.yml b/html/changelogs/AutoChangeLog-pr-3898.yml
new file mode 100644
index 000000000000..abda91f2b52b
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-3898.yml
@@ -0,0 +1,4 @@
+author: "Morrow"
+delete-after: True
+changes:
+ - rscadd: "Added bayonet pouch to req"
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-3904.yml b/html/changelogs/AutoChangeLog-pr-3904.yml
new file mode 100644
index 000000000000..e3c1a56fa7ae
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-3904.yml
@@ -0,0 +1,4 @@
+author: "Drathek"
+delete-after: True
+changes:
+ - qol: "Added a preference to disable xeno ability deactivation when re-selecting the same ability"
\ No newline at end of file
diff --git a/html/changelogs/archive/2023-07.yml b/html/changelogs/archive/2023-07.yml
index 60d6cf4a4540..db8b80db6820 100644
--- a/html/changelogs/archive/2023-07.yml
+++ b/html/changelogs/archive/2023-07.yml
@@ -154,3 +154,69 @@
- 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/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/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/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/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/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/voice/joe/death_dream.ogg b/sound/voice/joe/death_dream.ogg
new file mode 100644
index 000000000000..366890711fe4
Binary files /dev/null and b/sound/voice/joe/death_dream.ogg differ
diff --git a/sound/voice/joe/death_normal.ogg b/sound/voice/joe/death_normal.ogg
new file mode 100644
index 000000000000..b1afd713e094
Binary files /dev/null and b/sound/voice/joe/death_normal.ogg differ
diff --git a/sound/voice/joe/death_silence.ogg b/sound/voice/joe/death_silence.ogg
new file mode 100644
index 000000000000..fea5080ccc99
Binary files /dev/null and b/sound/voice/joe/death_silence.ogg differ
diff --git a/sound/voice/joe/death_tomorrow.ogg b/sound/voice/joe/death_tomorrow.ogg
new file mode 100644
index 000000000000..dbb134005e5e
Binary files /dev/null and b/sound/voice/joe/death_tomorrow.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/tools/requirements.txt b/tools/requirements.txt
index abd6a512a222..316d7d2fe18d 100644
--- a/tools/requirements.txt
+++ b/tools/requirements.txt
@@ -3,5 +3,5 @@ bidict==0.22.0
Pillow==9.3.0
# changelogs
-PyYaml==5.4
+PyYaml==6.0.1
beautifulsoup4==4.9.3