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