diff --git a/baystation12.dme b/baystation12.dme
index 76e234e320bb4..3241fa5ead995 100644
--- a/baystation12.dme
+++ b/baystation12.dme
@@ -3310,7 +3310,6 @@
#include "proxima\code\modules\clothing\suits\suits.dm"
#include "proxima\code\modules\clothing\under\under.dm"
#include "proxima\code\modules\clothing\under\accessories\armor_tag.dm"
-#include "proxima\code\modules\clothing\under\accessories\wristwatches.dm"
#include "proxima\code\modules\culture_descriptor\culture\cultures_human.dm"
#include "proxima\code\modules\culture_descriptor\faction\factions_other.dm"
#include "proxima\code\modules\culture_descriptor\location\locations_human.dm"
diff --git a/code/_onclick/hud/ability_screen_objects_prx.dm b/code/_onclick/hud/ability_screen_objects_prx.dm
index 68e397e80d529..ffde3773f5aab 100644
--- a/code/_onclick/hud/ability_screen_objects_prx.dm
+++ b/code/_onclick/hud/ability_screen_objects_prx.dm
@@ -6,7 +6,7 @@
var/sting_datum
/obj/screen/ability/changeling/activate()
- to_chat(ability_master.my_mob, SPAN_LING("Мы подготовили жало. Используйте alt+клик или СКМ на цели для укола."))
+ to_chat(ability_master.my_mob, SPAN_LING("Мы подготовили жало. Используйте alt+клик на цели для укола."))
var/datum/changeling/C = ability_master.my_mob.mind.changeling
C.chosen_sting = new sting_datum
diff --git a/code/game/objects/items/weapons/storage/internal.dm b/code/game/objects/items/weapons/storage/internal.dm
index 1e13098515aec..fecdc1024cc9f 100644
--- a/code/game/objects/items/weapons/storage/internal.dm
+++ b/code/game/objects/items/weapons/storage/internal.dm
@@ -91,6 +91,7 @@
max_w_class = slot_size
..()
-/obj/item/storage/internal/pouch/New(var/newloc, var/storage_space)
+/obj/item/storage/internal/pouch/New(newloc, storage_space, max_w_class)
max_storage_space = storage_space
- ..()
\ No newline at end of file
+ src.max_w_class = max_w_class || src.max_w_class
+ ..()
diff --git a/code/game/objects/items/weapons/storage/storage.dm b/code/game/objects/items/weapons/storage/storage.dm
index 5d8ff1c66bd68..3a68e3890defa 100644
--- a/code/game/objects/items/weapons/storage/storage.dm
+++ b/code/game/objects/items/weapons/storage/storage.dm
@@ -341,18 +341,24 @@
if(0)
to_chat(usr, "\The [src] now picks up one item at a time.")
+
+/obj/item/storage/proc/DoQuickEmpty()
+ var/turf/into = get_turf(src)
+ if (!into)
+ return
+ for(var/atom/movable/movable in contents)
+ remove_from_storage(movable, into, TRUE)
+ finish_bulk_removal()
+
+
/obj/item/storage/verb/quick_empty()
set name = "Empty Contents"
set category = "Object"
-
if((!ishuman(usr) && (src.loc != usr)) || usr.stat || usr.restrained())
return
-
- var/turf/T = get_turf(src)
hide_from(usr)
- for(var/obj/item/I in contents)
- remove_from_storage(I, T, 1)
- finish_bulk_removal()
+ DoQuickEmpty()
+
/obj/item/storage/verb/dump_contents()
set name = "Dump Contents"
diff --git a/code/game/objects/items/weapons/tools/screwdriver.dm b/code/game/objects/items/weapons/tools/screwdriver.dm
index 9a361a3f7db66..8f5dc11668297 100644
--- a/code/game/objects/items/weapons/tools/screwdriver.dm
+++ b/code/game/objects/items/weapons/tools/screwdriver.dm
@@ -16,6 +16,7 @@
attack_verb = list("stabbed")
lock_picking_level = 5
sharp = TRUE
+ item_flags = ITEM_FLAG_CAN_HIDE_IN_SHOES
var/build_from_parts = TRUE
var/valid_colours = list(COLOR_RED, COLOR_CYAN_BLUE, COLOR_PURPLE, COLOR_CHESTNUT, COLOR_GREEN, COLOR_TEAL, COLOR_ASSEMBLY_YELLOW, COLOR_BOTTLE_GREEN, COLOR_VIOLET, COLOR_GRAY80, COLOR_GRAY20)
@@ -36,4 +37,4 @@
return ..()
if((MUTATION_CLUMSY in user.mutations) && prob(50))
M = user
- return eyestab(M,user)
\ No newline at end of file
+ return eyestab(M,user)
diff --git a/code/game/objects/items/weapons/tools/weldingtool.dm b/code/game/objects/items/weapons/tools/weldingtool.dm
index ba8afc3e8698f..3181252ecb5a7 100644
--- a/code/game/objects/items/weapons/tools/weldingtool.dm
+++ b/code/game/objects/items/weapons/tools/weldingtool.dm
@@ -58,6 +58,7 @@
to_chat(user, SPAN_NOTICE("You secure the welder."))
else
to_chat(user, SPAN_NOTICE("The welder can now be attached and modified."))
+ playsound(src, 'sound/items/Screwdriver.ogg', 10, 1)
src.add_fingerprint(user)
return
@@ -84,6 +85,7 @@
user.visible_message("[user] slots \a [W] into \the [src].", "You slot \a [W] into \the [src].")
w_class = tank.size_in_use
force = tank.unlit_force
+ playsound(src, 'sound/items/cap_close.ogg', 10, 1)
update_icon()
return
@@ -98,6 +100,7 @@
tank = null
w_class = initial(w_class)
force = initial(force)
+ playsound(src, 'sound/items/cap_open.ogg', 10, 1)
update_icon()
else
to_chat(user, SPAN_DANGER("Turn off the welder first!"))
@@ -240,6 +243,7 @@
src.force = tank.lit_force
src.damtype = DAMAGE_BURN
welding = 1
+ playsound(src, 'sound/items/welderactivate.ogg', 10, 1)
update_icon()
START_PROCESSING(SSobj, src)
else
@@ -259,6 +263,7 @@
src.force = tank.unlit_force
src.damtype = DAMAGE_BRUTE
src.welding = 0
+ playsound(src, 'sound/items/welderdeactivate.ogg', 10, 1)
update_icon()
/obj/item/weldingtool/attack(mob/living/M, mob/living/user, target_zone)
diff --git a/code/modules/clothing/spacesuits/rig/rig_attackby.dm b/code/modules/clothing/spacesuits/rig/rig_attackby.dm
index 29b7146381dbc..7bb2b015bab2d 100644
--- a/code/modules/clothing/spacesuits/rig/rig_attackby.dm
+++ b/code/modules/clothing/spacesuits/rig/rig_attackby.dm
@@ -126,8 +126,8 @@
var/list/current_mounts = list()
if(cell) current_mounts += "cell"
if(air_supply) current_mounts += "tank"
- if(installed_modules && installed_modules.len) current_mounts += "system module"
-
+ if (length(chest?.storage?.contents)) current_mounts += "storage"
+ if(installed_modules && length(installed_modules)) current_mounts += "system module"
var/to_remove = input("Which would you like to modify?") as null|anything in current_mounts
if(!to_remove)
return
@@ -160,6 +160,18 @@
to_chat(user, "You detach and remove \the [air_supply].")
air_supply = null
+ if ("storage")
+ if (!length(chest?.storage?.contents))
+ to_chat(user, "There is nothing in the storage to remove.")
+ return
+ chest.storage.DoQuickEmpty()
+ user.visible_message(
+ SPAN_ITALIC("\The [user] ejects the contents of \a [src]'s storage."),
+ SPAN_ITALIC("You eject the contents of \the [src]'s storage."),
+ SPAN_ITALIC("You hear things clatter to the floor."),
+ range = 5
+ )
+
if("system module")
var/list/possible_removals = list()
diff --git a/code/modules/clothing/spacesuits/rig/rig_pieces.dm b/code/modules/clothing/spacesuits/rig/rig_pieces.dm
index 2296584df7df5..529658d839c6d 100644
--- a/code/modules/clothing/spacesuits/rig/rig_pieces.dm
+++ b/code/modules/clothing/spacesuits/rig/rig_pieces.dm
@@ -53,16 +53,56 @@
)
var/list/supporting_limbs = list() //If not-null, automatically splints breaks. Checked when removing the suit.
equip_delay = null
+ var/obj/item/storage/internal/storage
+ var/max_w_class = ITEM_SIZE_NORMAL
+ var/slots = 2 STORAGE_FREEFORM
+
+
+/obj/item/clothing/suit/space/rig/Destroy()
+ LAZYCLEARLIST(supporting_limbs)
+ QDEL_NULL(storage)
+ return ..()
+
+
+/obj/item/clothing/suit/space/rig/Initialize()
+ . = ..()
+ if (slots && max_w_class)
+ if (slots < 0)
+ storage = new /obj/item/storage/internal/pouch (src, (-slots) * BASE_STORAGE_COST(max_w_class), max_w_class)
+ else
+ storage = new /obj/item/storage/internal/pockets (src, slots, max_w_class)
+
+
+/obj/item/clothing/suit/space/rig/attack_hand(mob/living/user)
+ if (storage?.handle_attack_hand(user))
+ ..(user)
+
+/obj/item/clothing/suit/space/rig/MouseDrop(obj/over)
+ if (storage?.handle_mousedrop(usr, over))
+ ..(over)
+
+
+/obj/item/clothing/suit/space/rig/emp_act(severity)
+ storage?.emp_act(severity)
+ ..()
+
+
+/obj/item/clothing/suit/space/rig/attempt_store_item(obj/item/I, mob/user, silent)
+ if (storage?.can_be_inserted(I, user, TRUE) && storage.handle_item_insertion(I, silent))
+ return TRUE
+ return ..()
/obj/item/clothing/suit/space/rig/equipped(mob/M)
check_limb_support(M)
..()
-/obj/item/clothing/suit/space/rig/dropped(var/mob/user)
+
+/obj/item/clothing/suit/space/rig/dropped(mob/user)
check_limb_support(user)
..()
+
// Some space suits are equipped with reactive membranes that support broken limbs
/obj/item/clothing/suit/space/rig/proc/can_support(var/mob/living/carbon/human/user)
if(user.wear_suit != src)
diff --git a/code/modules/clothing/spacesuits/rig/suits/light.dm b/code/modules/clothing/spacesuits/rig/suits/light.dm
index 44add5f42adb5..36b1050fb27d1 100644
--- a/code/modules/clothing/spacesuits/rig/suits/light.dm
+++ b/code/modules/clothing/spacesuits/rig/suits/light.dm
@@ -28,7 +28,19 @@
/obj/item/clothing/suit/space/rig/light
name = "suit"
breach_threshold = 18 //comparable to voidsuits
- species_restricted = list(SPECIES_HUMAN,SPECIES_IPC, SPECIES_SHELL)
+ species_restricted = list(SPECIES_HUMAN,SPECIES_IPC)
+ allowed = list(
+ /obj/item/gun,
+ /obj/item/ammo_magazine,
+ /obj/item/ammo_casing,
+ /obj/item/melee/baton,
+ /obj/item/handcuffs,
+ /obj/item/tank,
+ /obj/item/device/suit_cooling_unit,
+ /obj/item/cell
+ )
+ max_w_class = ITEM_SIZE_SMALL
+ slots = 3 STORAGE_FREEFORM
/obj/item/clothing/gloves/rig/light
name = "gloves"
diff --git a/code/modules/clothing/spacesuits/rig/suits/station.dm b/code/modules/clothing/spacesuits/rig/suits/station.dm
index f04090c2275d3..c33a1b1d66a3d 100644
--- a/code/modules/clothing/spacesuits/rig/suits/station.dm
+++ b/code/modules/clothing/spacesuits/rig/suits/station.dm
@@ -443,6 +443,8 @@
/obj/item/tank,
/obj/item/device/suit_cooling_unit
)
+ max_w_class = null
+ slots = null
/obj/item/rig/zero/on_update_icon(var/update_mob_icon)
..()
diff --git a/code/modules/events/rogue_drones.dm b/code/modules/events/rogue_drones.dm
index 46f2dd34cd6da..e46e102269542 100644
--- a/code/modules/events/rogue_drones.dm
+++ b/code/modules/events/rogue_drones.dm
@@ -3,21 +3,21 @@
var/list/drones_list = list()
/datum/event/rogue_drone/start()
- //spawn them at the same place as carp
- var/list/possible_spawns = list()
- for(var/obj/effect/landmark/C in landmarks_list)
- if(C.name == "carpspawn")
- possible_spawns.Add(C)
-
- //25% chance for this to be a false alarm
- var/num = 0
- if (length(possible_spawns) && prob(75))
- num = rand(2, 6)
- for(var/i=0, i["\improper[C.holder.rank]"]"
+ else
+ line += "\t[C], ["\improper[C.holder.rank]"]"
+ if(!C.is_afk())
+ active_staff++
+ if(can_investigate)
+ if(C.is_afk())
+ line += " (AFK - [C.inactivity2text()])"
+ if(isghost(C.mob))
+ line += " - Наблюдает"
+ else if(istype(C.mob,/mob/new_player))
+ line += " - Лобби"
+ else
+ line += " - Играет"
+ if(C.is_stealthed())
+ line += " (Невидимость)"
+ if(C.get_preference_value(/datum/client_preference/show_ooc) == GLOB.PREF_HIDE)
+ line += " (OOC)"
+ if(C.get_preference_value(/datum/client_preference/show_looc) == GLOB.PREF_HIDE)
+ line += " (LOOC)"
+ if(C.get_preference_value(/datum/client_preference/show_aooc) == GLOB.PREF_HIDE)
+ line += " (AOOC)"
+ if(C.get_preference_value(/datum/client_preference/show_dsay) == GLOB.PREF_HIDE)
+ line += " (DSAY)"
+ line = jointext(line,null)
+ if(check_rights(R_ADMIN,0,C))
+ msg.Insert(1, line)
+ else
+ msg += line
+
+ to_chat(src, "Сотрудники [active_staff]/[total_staff]:")
+ to_chat(src, jointext(msg,"\n"))