diff --git a/code/__defines/_macros.dm b/code/__defines/_macros.dm
index b578242fbed..7a35338a68d 100644
--- a/code/__defines/_macros.dm
+++ b/code/__defines/_macros.dm
@@ -16,6 +16,12 @@
#define SPAN_SUBTLE(X) "[X]"
#define SPAN_SOGHUN(X) "[X]"
+#define FONT_SIZE_SMALL 1
+#define FONT_SIZE_NORMAL 2
+#define FONT_SIZE_LARGE 3
+#define FONT_SIZE_HUGE 4
+#define FONT_SIZE_GIANT 5
+
#define FONT_SMALL(X) "[X]"
#define FONT_NORMAL(X) "[X]"
#define FONT_LARGE(X) "[X]"
diff --git a/code/modules/heavy_vehicle/interface/_interface.dm b/code/modules/heavy_vehicle/interface/_interface.dm
index b9b4a23f673..4d2f116405a 100644
--- a/code/modules/heavy_vehicle/interface/_interface.dm
+++ b/code/modules/heavy_vehicle/interface/_interface.dm
@@ -28,6 +28,7 @@
/obj/screen/mecha/toggle/hatch_open,
/obj/screen/mecha/radio,
/obj/screen/mecha/toggle/sensor,
+ /obj/screen/mecha/toggle/megaspeakers,
/obj/screen/mecha/rename
)
diff --git a/code/modules/heavy_vehicle/interface/screen_objects.dm b/code/modules/heavy_vehicle/interface/screen_objects.dm
index 4c37074d9f9..b51cb504535 100644
--- a/code/modules/heavy_vehicle/interface/screen_objects.dm
+++ b/code/modules/heavy_vehicle/interface/screen_objects.dm
@@ -310,4 +310,18 @@
maptext = "SENSOR"
notify_user(usr, SPAN_NOTICE("[capitalize_first_letters(owner.head.name)] Advanced Sensor mode is [owner.head.active_sensors ? "now" : "no longer" ] active."))
+/obj/screen/mecha/toggle/megaspeakers
+ name = "toggle integrated megaspeakers"
+ icon_state = "base" // based
+ maptext = "VOLUME"
+ maptext_x = 1
+ maptext_y = 12
+
+/obj/screen/mecha/toggle/megaspeakers/toggled()
+ toggled = !toggled
+ owner.loudening = toggled
+ var/main_color = owner.loudening ? "#d1d1d1" : "#525252"
+ maptext = "VOLUME"
+ notify_user(usr, SPAN_NOTICE("You [owner.loudening ? "activate" : "deactivate"] \the [owner]'s integrated megaspeakers."))
+
#undef BAR_CAP
\ No newline at end of file
diff --git a/code/modules/heavy_vehicle/mecha.dm b/code/modules/heavy_vehicle/mecha.dm
index d7c232a926a..aadd545f520 100644
--- a/code/modules/heavy_vehicle/mecha.dm
+++ b/code/modules/heavy_vehicle/mecha.dm
@@ -66,6 +66,7 @@
var/maintenance_protocols
var/lockdown
var/entry_speed = 30
+ var/loudening = FALSE // whether we're increasing the speech volume of our pilot
// Material
var/material/material
diff --git a/code/modules/mob/hear_say.dm b/code/modules/mob/hear_say.dm
index a19dc27b71b..b7ec8cef3db 100644
--- a/code/modules/mob/hear_say.dm
+++ b/code/modules/mob/hear_say.dm
@@ -1,6 +1,6 @@
// At minimum every mob has a hear_say proc.
-/mob/proc/hear_say(var/message, var/verb = "says", var/datum/language/language = null, var/alt_name = "",var/italics = 0, var/mob/speaker = null, var/sound/speech_sound, var/sound_vol)
+/mob/proc/hear_say(var/message, var/verb = "says", var/datum/language/language = null, var/alt_name = "",var/italics = 0, var/mob/speaker = null, var/sound/speech_sound, var/sound_vol, var/font_size = null)
if(!istype(src, /mob/living/test) && cant_hear())
return
@@ -68,9 +68,15 @@
to_chat(src, "[speaker_name][alt_name] talks but you cannot hear them.")
else
if(language)
- on_hear_say("[track][accent_icon ? accent_icon + " " : ""][speaker_name][alt_name] [language.format_message(message, verb)]")
+ if(font_size)
+ on_hear_say("[track][accent_icon ? accent_icon + " " : ""][speaker_name][alt_name] [language.format_message(message, verb)]")
+ else
+ on_hear_say("[track][accent_icon ? accent_icon + " " : ""][speaker_name][alt_name] [language.format_message(message, verb)]")
else
- on_hear_say("[track][speaker_name][alt_name] [verb], \"[message]\"")
+ if(font_size)
+ on_hear_say("[track][speaker_name][alt_name] [verb], \"[message]\"")
+ else
+ on_hear_say("[track][speaker_name][alt_name] [verb], \"[message]\"")
if (speech_sound && (get_dist(speaker, src) <= world.view && src.z == speaker.z))
var/turf/source = speaker? get_turf(speaker) : get_turf(src)
playsound_simple(source, speech_sound, sound_vol, use_random_freq = TRUE)
diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm
index 0db22628f19..b349ec0dcc4 100644
--- a/code/modules/mob/living/say.dm
+++ b/code/modules/mob/living/say.dm
@@ -161,6 +161,13 @@ proc/get_radio_key_from_channel(var/channel)
return "asks"
return verb
+/mob/living/proc/get_font_size_modifier()
+ if(ismech(loc))
+ var/mob/living/heavy_vehicle/HV = loc
+ if(HV.loudening)
+ return FONT_SIZE_LARGE
+ return null
+
/mob/living/say(var/message, var/datum/language/speaking = null, var/verb="says", var/alt_name="", var/ghost_hearing = GHOSTS_ALL_HEAR)
if(stat)
if(stat == DEAD)
@@ -276,11 +283,10 @@ proc/get_radio_key_from_channel(var/channel)
get_mobs_and_objs_in_view_fast(T, message_range, listening, listening_obj, ghost_hearing)
-
var/list/hear_clients = list()
for(var/m in listening)
var/mob/M = m
- var/heard_say = M.hear_say(message, verb, speaking, alt_name, italics, src, speech_sound, sound_vol)
+ var/heard_say = M.hear_say(message, verb, speaking, alt_name, italics, src, speech_sound, sound_vol, get_font_size_modifier())
if(heard_say && M.client)
hear_clients += M.client
diff --git a/html/changelogs/geeves-mecha_speakers.yml b/html/changelogs/geeves-mecha_speakers.yml
new file mode 100644
index 00000000000..8f442cbd073
--- /dev/null
+++ b/html/changelogs/geeves-mecha_speakers.yml
@@ -0,0 +1,6 @@
+author: Geeves
+
+delete-after: True
+
+changes:
+ - rscadd: "Exosuits now come with integrated megaspeakers. When activated, they will increase the volume of your speech."
\ No newline at end of file