diff --git a/code/modules/client/preference_setup/global/01_ui.dm b/code/modules/client/preference_setup/global/01_ui.dm
index f47aa9e14e..739fd1b10e 100644
--- a/code/modules/client/preference_setup/global/01_ui.dm
+++ b/code/modules/client/preference_setup/global/01_ui.dm
@@ -17,6 +17,7 @@
S["tgui_large_buttons"] >> pref.tgui_large_buttons
S["tgui_swapped_buttons"] >> pref.tgui_swapped_buttons
S["chat_timestamp"] >> pref.chat_timestamp
+ S["throwmode_loud"] >> pref.throwmode_loud
/datum/category_item/player_setup_item/player_global/ui/save_preferences(var/savefile/S)
S["UI_style"] << pref.UI_style
@@ -33,6 +34,7 @@
S["tgui_large_buttons"] << pref.tgui_large_buttons
S["tgui_swapped_buttons"] << pref.tgui_swapped_buttons
S["chat_timestamp"] << pref.chat_timestamp
+ S["throwmode_loud"] << pref.throwmode_loud
/datum/category_item/player_setup_item/player_global/ui/sanitize_preferences()
pref.UI_style = sanitize_inlist(pref.UI_style, all_ui_styles, initial(pref.UI_style))
@@ -49,6 +51,7 @@
pref.tgui_large_buttons = sanitize_integer(pref.tgui_large_buttons, 0, 1, initial(pref.tgui_large_buttons))
pref.tgui_swapped_buttons = sanitize_integer(pref.tgui_swapped_buttons, 0, 1, initial(pref.tgui_swapped_buttons))
pref.chat_timestamp = sanitize_integer(pref.chat_timestamp, 0, 1, initial(pref.chat_timestamp))
+ pref.throwmode_loud = sanitize_integer(pref.throwmode_loud, 0, 1, initial(pref.throwmode_loud))
/datum/category_item/player_setup_item/player_global/ui/content(var/mob/user)
. = "UI Style: [pref.UI_style]
"
@@ -65,6 +68,7 @@
. += "TGUI Large Buttons: [(pref.tgui_large_buttons) ? "Enabled (default)" : "Disabled"]
"
. += "TGUI Swapped Buttons: [(pref.tgui_swapped_buttons) ? "Enabled" : "Disabled (default)"]
"
. += "Chat Timestamps: [(pref.chat_timestamp) ? "Enabled" : "Disabled (default)"]
"
+ . += "Throw Mode Messages: [(pref.throwmode_loud) ? "Loud" : "Quiet (default)"]
"
if(can_select_ooc_color(user))
. += "OOC Color:"
if(pref.ooccolor == initial(pref.ooccolor))
@@ -150,6 +154,10 @@
pref.chat_timestamp = !pref.chat_timestamp
return TOPIC_REFRESH
+ else if(href_list["throwmode_loudness"])
+ pref.throwmode_loud = !pref.throwmode_loud
+ return TOPIC_REFRESH
+
else if(href_list["reset"])
switch(href_list["reset"])
if("ui")
diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm
index 687d6df6cf..3211404ad4 100644
--- a/code/modules/client/preferences.dm
+++ b/code/modules/client/preferences.dm
@@ -32,6 +32,7 @@ var/list/preferences_datums = list()
var/tgui_large_buttons = TRUE
var/tgui_swapped_buttons = FALSE
var/chat_timestamp = FALSE
+ var/throwmode_loud = FALSE
//character preferences
var/real_name //our character's name
diff --git a/code/modules/client/preferences_toggle_procs.dm b/code/modules/client/preferences_toggle_procs.dm
index d74d3c178f..050ffa0b5d 100644
--- a/code/modules/client/preferences_toggle_procs.dm
+++ b/code/modules/client/preferences_toggle_procs.dm
@@ -389,6 +389,16 @@
to_chat(src, span_notice("You have toggled chat timestamps: [prefs.chat_timestamp ? "ON" : "OFF"]."))
+/client/verb/toggle_throwmode_messages()
+ set name = "Toggle Throw Mode Messages"
+ set category = "Preferences"
+ set desc = "Toggles whether or not activating throw mode (hotkey: R) will announce you're preparing to throw your current handheld item, or catch an incoming item if your hand is empty."
+
+ prefs.throwmode_loud = !prefs.throwmode_loud //There is no preference datum for tgui input lock, nor for any TGUI prefs.
+ SScharacter_setup.queue_preferences_save(prefs)
+
+ to_chat(src, span_notice("You have toggled throw mode messages: [prefs.throwmode_loud ? "ON" : "OFF"]."))
+
/client/verb/toggle_status_indicators()
set name = "Toggle Status Indicators"
set category = "Preferences"
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index a3f3368db1..c3cca6f582 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -1155,11 +1155,20 @@
/mob/proc/throw_mode_off()
src.in_throw_mode = 0
+ if(client)
+ if(a_intent == I_HELP || client.prefs.throwmode_loud)
+ src.visible_message("[src] relaxes from their ready stance.","You relax from your ready stance.")
if(src.throw_icon) //in case we don't have the HUD and we use the hotkey
src.throw_icon.icon_state = "act_throw_off"
/mob/proc/throw_mode_on()
src.in_throw_mode = 1
+ if(client)
+ if(a_intent == I_HELP || client.prefs.throwmode_loud)
+ if(src.get_active_hand())
+ src.visible_message("[src] winds up to throw [get_active_hand()]!","You wind up to throw [get_active_hand()].")
+ else
+ src.visible_message("[src] looks ready to catch anything thrown at them!","You get ready to catch anything thrown at you.")
if(src.throw_icon)
src.throw_icon.icon_state = "act_throw_on"