diff --git a/code/game/objects/structures/crates_lockers/closets/secure/security.dm b/code/game/objects/structures/crates_lockers/closets/secure/security.dm
index f0c7a69da9..6fa559d2af 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm
@@ -66,7 +66,7 @@
/obj/structure/closet/secure_closet/hos
name = "head of security's locker"
req_access = list(access_hos)
- storage_capacity = 2.5 * MOB_MEDIUM
+ storage_capacity = 2.6 * MOB_MEDIUM
closet_appearance = /decl/closet_appearance/secure_closet/security/hos
starts_with = list(
@@ -102,7 +102,8 @@
/obj/item/clothing/suit/storage/hooded/wintercoat/security,
/obj/item/clothing/shoes/boots/winter/security,
/obj/item/device/flashlight/maglight,
- /obj/item/clothing/mask/gas/half)
+ /obj/item/clothing/mask/gas/half,
+ /obj/item/clothing/mask/gas/sechailer/swat/hos)
/obj/structure/closet/secure_closet/hos/Initialize()
if(prob(50))
@@ -116,6 +117,7 @@
/obj/structure/closet/secure_closet/warden
name = "warden's locker"
+ storage_capacity = 42
req_access = list(access_armory)
closet_appearance = /decl/closet_appearance/secure_closet/security/warden
@@ -147,7 +149,8 @@
/obj/item/clothing/shoes/boots/winter/security,
/obj/item/device/flashlight/maglight,
/obj/item/device/megaphone,
- /obj/item/clothing/mask/gas/half)
+ /obj/item/clothing/mask/gas/half,
+ /obj/item/clothing/mask/gas/sechailer/swat/warden)
/obj/structure/closet/secure_closet/warden/Initialize()
if(prob(50))
diff --git a/code/game/objects/structures/crates_lockers/closets/wardrobe.dm b/code/game/objects/structures/crates_lockers/closets/wardrobe.dm
index 200d4993b3..5eb36f6dc3 100644
--- a/code/game/objects/structures/crates_lockers/closets/wardrobe.dm
+++ b/code/game/objects/structures/crates_lockers/closets/wardrobe.dm
@@ -406,7 +406,8 @@
/obj/item/clothing/gloves/swat,
/obj/item/clothing/mask/balaclava/tactical,
/obj/item/clothing/mask/balaclava,
- /obj/item/clothing/mask/bandana/skull = 2)
+ /obj/item/clothing/mask/bandana/skull = 2,
+ /obj/item/clothing/mask/gas/sechailer/swat)
/obj/structure/closet/wardrobe/suit
diff --git a/code/modules/clothing/masks/gasmask.dm b/code/modules/clothing/masks/gasmask.dm
index 594600b601..116a54e494 100644
--- a/code/modules/clothing/masks/gasmask.dm
+++ b/code/modules/clothing/masks/gasmask.dm
@@ -42,6 +42,23 @@
w_class = ITEMSIZE_SMALL
armor = list(melee = 10, bullet = 10, laser = 10, energy = 0, bomb = 0, bio = 55, rad = 0)
+//Turn it into a hailer mask
+/obj/item/clothing/mask/gas/half/attackby(obj/item/I, mob/user)
+ if(istype(I, /obj/item/device/hailer))
+ playsound(src, 'sound/items/Screwdriver.ogg', 50, 1)
+ user.drop_item(src)
+ var/obj/item/clothing/mask/gas/sechailer/N = new /obj/item/clothing/mask/gas/sechailer(src.loc)
+ N.fingerprints = src.fingerprints
+ N.fingerprintshidden = src.fingerprintshidden
+ N.fingerprintslast = src.fingerprintslast
+ N.suit_fibers = src.suit_fibers
+ N.hailer = I
+ I.loc = N
+ if(!isturf(N.loc))
+ user.put_in_hands(N)
+ qdel(src)
+ ..()
+
//Plague Dr suit can be found in clothing/suits/bio.dm
/obj/item/clothing/mask/gas/plaguedoctor
name = "plague doctor mask"
diff --git a/code/modules/clothing/masks/hailer.dm b/code/modules/clothing/masks/hailer.dm
new file mode 100644
index 0000000000..9d236de43f
--- /dev/null
+++ b/code/modules/clothing/masks/hailer.dm
@@ -0,0 +1,165 @@
+/obj/item/clothing/mask/gas/sechailer
+ name = "hailer face mask"
+ desc = "A compact, durable gas mask that can be connected to an air supply. This one possesses a security hailer."
+ description_info = "This mask has a hailer attached, you can activate it on the button or use the Halt! verb, for switching phrases you can alt+click it or change it using the change phrase verb."
+ icon_state = "halfgas"
+ armor = list(melee = 10, bullet = 10, laser = 10, energy = 0, bomb = 0, bio = 55, rad = 0)
+ action_button_name = "HALT!"
+ body_parts_covered = FACE
+ var/obj/item/device/hailer/hailer
+ var/cooldown = 0
+ var/phrase = 1
+ var/aggressiveness = 1
+ var/safety = 1
+ var/list/phrase_list = list(
+ "halt" = "HALT! HALT! HALT! HALT!",
+ "bobby" = "Stop in the name of the Law.",
+ "compliance" = "Compliance is in your best interest.",
+ "justice" = "Prepare for justice!",
+ "running" = "Running will only increase your sentence.",
+ "dontmove" = "Don't move, Creep!",
+ "floor" = "Down on the floor, Creep!",
+ "robocop" = "Dead or alive you're coming with me.",
+ "god" = "God made today for the crooks we could not catch yesterday.",
+ "freeze" = "Freeze, Scum Bag!",
+ "imperial" = "Stop right there, criminal scum!",
+ "bash" = "Stop or I'll bash you.",
+ "harry" = "Go ahead, make my day.",
+ "asshole" = "Stop breaking the law, asshole.",
+ "stfu" = "You have the right to shut the fuck up",
+ "shutup" = "Shut up crime!",
+ "super" = "Face the wrath of the golden bolt.",
+ "dredd" = "I am, the LAW!"
+ )
+
+/obj/item/clothing/mask/gas/sechailer/swat/hos
+ name = "\improper HOS SWAT mask"
+ desc = "A close-fitting tactical mask with an especially aggressive Compli-o-nator 3000. It has a tan stripe."
+ icon_state = "hosmask"
+
+
+/obj/item/clothing/mask/gas/sechailer/swat/warden
+ name = "\improper Warden SWAT mask"
+ desc = "A close-fitting tactical mask with an especially aggressive Compli-o-nator 3000. It has a blue stripe."
+ icon_state = "wardenmask"
+
+/obj/item/clothing/mask/gas/sechailer/swat
+ name = "\improper SWAT mask"
+ desc = "A close-fitting tactical mask with an especially aggressive Compli-o-nator 3000."
+ icon_state = "officermask"
+ body_parts_covered = HEAD|FACE|EYES
+ flags_inv = HIDEFACE|BLOCKHAIR
+ aggressiveness = 3
+ phrase = 12
+
+
+/obj/item/clothing/mask/gas/sechailer/ui_action_click()
+ halt()
+
+/obj/item/clothing/mask/gas/sechailer/AltClick(mob/user)
+ selectphrase()
+
+/obj/item/clothing/mask/gas/sechailer/verb/selectphrase()
+ set name = "Select gas mask phrase"
+ set category = "Object"
+ set desc = "Alter the message shouted by your complionator gas mask."
+
+ var/key = phrase_list[phrase]
+ var/message = phrase_list[key]
+
+ if (!safety)
+ to_chat(usr, "You set the restrictor to: FUCK YOUR CUNT YOU SHIT EATING COCKSUCKER MAN EAT A DONG FUCKING ASS RAMMING SHIT FUCK EAT PENISES IN YOUR FUCK FACE AND SHIT OUT ABORTIONS OF FUCK AND DO SHIT IN YOUR ASS YOU COCK FUCK SHIT MONKEY FUCK ASS WANKER FROM THE DEPTHS OF SHIT.")
+ return
+ switch(aggressiveness)
+ if(1)
+ phrase = (phrase < 6) ? (phrase + 1) : 1
+ key = phrase_list[phrase]
+ message = phrase_list[key]
+ to_chat(usr,"You set the restrictor to: [message]")
+ if(2)
+ phrase = (phrase < 11 && phrase >= 7) ? (phrase + 1) : 7
+ key = phrase_list[phrase]
+ message = phrase_list[key]
+ to_chat(usr,"You set the restrictor to: [message]")
+ if(3)
+ phrase = (phrase < 18 && phrase >= 12 ) ? (phrase + 1) : 12
+ key = phrase_list[phrase]
+ message = phrase_list[key]
+ to_chat(usr,"You set the restrictor to: [message]")
+ if(4)
+ phrase = (phrase < 18 && phrase >= 1 ) ? (phrase + 1) : 1
+ key = phrase_list[phrase]
+ message = phrase_list[key]
+ to_chat(usr,"You set the restrictor to: [message]")
+ else
+ to_chat(usr, "It's broken.")
+
+/obj/item/clothing/mask/gas/sechailer/emag_act(mob/user)
+ if(safety)
+ safety = 0
+ to_chat(user, "You silently fry [src]'s vocal circuit with the cryptographic sequencer.")
+ else
+ return
+
+/obj/item/clothing/mask/gas/sechailer/attackby(obj/item/I, mob/user)
+ if(I.is_screwdriver())
+ switch(aggressiveness)
+ if(1)
+ to_chat(user, "You set the aggressiveness restrictor to the second position.")
+ aggressiveness = 2
+ phrase = 7
+ if(2)
+ to_chat(user, "You set the aggressiveness restrictor to the third position.")
+ aggressiveness = 3
+ phrase = 13
+ if(3)
+ to_chat(user, "You set the aggressiveness restrictor to the fourth position.")
+ aggressiveness = 4
+ phrase = 1
+ if(4)
+ to_chat(user, "You set the aggressiveness restrictor to the first position.")
+ aggressiveness = 1
+ phrase = 1
+ if(5)
+ to_chat(user, "You adjust the restrictor but nothing happens, probably because its broken.")
+ if(I.is_wirecutter())
+ if(aggressiveness != 5)
+ to_chat(user, "You broke it!")
+ aggressiveness = 5
+ if(I.is_crowbar())
+ if(!hailer)
+ to_chat(user, "This mask has an integrated hailer, you can't remove it!")
+ else
+ var/obj/N = new /obj/item/clothing/mask/gas/half(src.loc)
+ playsound(src, 'sound/items/Screwdriver.ogg', 50, 1)
+ N.fingerprints = src.fingerprints
+ N.fingerprintshidden = src.fingerprintshidden
+ N.fingerprintslast = src.fingerprintslast
+ N.suit_fibers = src.suit_fibers
+ if(!isturf(N.loc))
+ user.put_in_hands(hailer)
+ user.put_in_hands(N)
+ else
+ hailer.loc = N.loc
+ qdel(src)
+ return
+ ..()
+
+/obj/item/clothing/mask/gas/sechailer/verb/halt()
+ set name = "HALT!"
+ set category = "Objects"
+ set desc = "Activate your face mask hailer."
+ var/key = phrase_list[phrase]
+ var/message = phrase_list[key]
+
+ if(cooldown < world.time - 35) // A cooldown, to stop people being jerks
+ if(!safety)
+ message = "FUCK YOUR CUNT YOU SHIT EATING COCKSUCKER MAN EAT A DONG FUCKING ASS RAMMING SHIT FUCK EAT PENISES IN YOUR FUCK FACE AND SHIT OUT ABORTIONS OF FUCK AND DO SHIT IN YOUR ASS YOU COCK FUCK SHIT MONKEY FUCK ASS WANKER FROM THE DEPTHS OF SHIT."
+ usr.visible_message("[usr]'s Compli-o-Nator: [message]")
+ playsound(src, 'sound/voice/binsult.ogg', 50, 0, 4) //Future sound channel = something like SFX
+ cooldown = world.time
+ return
+
+ usr.visible_message("[usr]'s Compli-o-Nator: [message]")
+ playsound(src, "sound/voice/complionator/[key].ogg", 50, 0, 4) //future sound channel = something like SFX
+ cooldown = world.time
\ No newline at end of file
diff --git a/html/changelogs/splintergp - hailermasks.yml b/html/changelogs/splintergp - hailermasks.yml
new file mode 100644
index 0000000000..d69f84d5b1
--- /dev/null
+++ b/html/changelogs/splintergp - hailermasks.yml
@@ -0,0 +1,37 @@
+################################
+# Example Changelog File
+#
+# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb.
+#
+# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.)
+# When it is, any changes listed below will disappear.
+#
+# Valid Prefixes:
+# bugfix
+# wip (For works in progress)
+# tweak
+# soundadd
+# sounddel
+# rscadd (general adding of nice things)
+# rscdel (general deleting of nice things)
+# imageadd
+# imagedel
+# maptweak
+# spellcheck (typo fixes)
+# experiment
+#################################
+
+# Your name.
+author: SplinterGP
+
+# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again.
+delete-after: True
+
+# Any changes you've made. See valid prefix list above.
+# INDENT WITH TWO SPACES. NOT TABS. SPACES.
+# SCREW THIS UP AND IT WON'T WORK.
+# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries.
+# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog.
+changes:
+ - rscadd: "Adds new hailer masks with quotes with sound, allowing you to use a hailer on a face mask to attach a security hailer into one."
+ - soundadd: "Adds new sound effects for hailer face masks."
diff --git a/icons/mob/species/seromi/masks.dmi b/icons/mob/species/seromi/masks.dmi
index 83493f851a..afe787be11 100644
Binary files a/icons/mob/species/seromi/masks.dmi and b/icons/mob/species/seromi/masks.dmi differ
diff --git a/icons/mob/species/tajaran/mask.dmi b/icons/mob/species/tajaran/mask.dmi
index 0b68e98a67..15f0bf0fe9 100644
Binary files a/icons/mob/species/tajaran/mask.dmi and b/icons/mob/species/tajaran/mask.dmi differ
diff --git a/icons/mob/species/vox/masks.dmi b/icons/mob/species/vox/masks.dmi
index 6afaa10c22..29b7d76ef9 100644
Binary files a/icons/mob/species/vox/masks.dmi and b/icons/mob/species/vox/masks.dmi differ
diff --git a/icons/obj/clothing/masks.dmi b/icons/obj/clothing/masks.dmi
index 195662d14b..88fa471cfd 100644
Binary files a/icons/obj/clothing/masks.dmi and b/icons/obj/clothing/masks.dmi differ
diff --git a/sound/voice/complionator/asshole.ogg b/sound/voice/complionator/asshole.ogg
new file mode 100644
index 0000000000..9ee40942c4
Binary files /dev/null and b/sound/voice/complionator/asshole.ogg differ
diff --git a/sound/voice/complionator/bash.ogg b/sound/voice/complionator/bash.ogg
new file mode 100644
index 0000000000..e79a2cd1e1
Binary files /dev/null and b/sound/voice/complionator/bash.ogg differ
diff --git a/sound/voice/complionator/bobby.ogg b/sound/voice/complionator/bobby.ogg
new file mode 100644
index 0000000000..4bc8f8df94
Binary files /dev/null and b/sound/voice/complionator/bobby.ogg differ
diff --git a/sound/voice/complionator/compliance.ogg b/sound/voice/complionator/compliance.ogg
new file mode 100644
index 0000000000..fcfb608202
Binary files /dev/null and b/sound/voice/complionator/compliance.ogg differ
diff --git a/sound/voice/complionator/dontmove.ogg b/sound/voice/complionator/dontmove.ogg
new file mode 100644
index 0000000000..09cefea9d6
Binary files /dev/null and b/sound/voice/complionator/dontmove.ogg differ
diff --git a/sound/voice/complionator/dredd.ogg b/sound/voice/complionator/dredd.ogg
new file mode 100644
index 0000000000..ab434dbfde
Binary files /dev/null and b/sound/voice/complionator/dredd.ogg differ
diff --git a/sound/voice/complionator/floor.ogg b/sound/voice/complionator/floor.ogg
new file mode 100644
index 0000000000..996dd0f54a
Binary files /dev/null and b/sound/voice/complionator/floor.ogg differ
diff --git a/sound/voice/complionator/freeze.ogg b/sound/voice/complionator/freeze.ogg
new file mode 100644
index 0000000000..d4224be839
Binary files /dev/null and b/sound/voice/complionator/freeze.ogg differ
diff --git a/sound/voice/complionator/god.ogg b/sound/voice/complionator/god.ogg
new file mode 100644
index 0000000000..8e1a54d268
Binary files /dev/null and b/sound/voice/complionator/god.ogg differ
diff --git a/sound/voice/complionator/halt.ogg b/sound/voice/complionator/halt.ogg
new file mode 100644
index 0000000000..81563b928f
Binary files /dev/null and b/sound/voice/complionator/halt.ogg differ
diff --git a/sound/voice/complionator/harry.ogg b/sound/voice/complionator/harry.ogg
new file mode 100644
index 0000000000..eae132675e
Binary files /dev/null and b/sound/voice/complionator/harry.ogg differ
diff --git a/sound/voice/complionator/imperial.ogg b/sound/voice/complionator/imperial.ogg
new file mode 100644
index 0000000000..903cf1197c
Binary files /dev/null and b/sound/voice/complionator/imperial.ogg differ
diff --git a/sound/voice/complionator/justice.ogg b/sound/voice/complionator/justice.ogg
new file mode 100644
index 0000000000..2aef43b150
Binary files /dev/null and b/sound/voice/complionator/justice.ogg differ
diff --git a/sound/voice/complionator/robocop.ogg b/sound/voice/complionator/robocop.ogg
new file mode 100644
index 0000000000..4dec421ed0
Binary files /dev/null and b/sound/voice/complionator/robocop.ogg differ
diff --git a/sound/voice/complionator/running.ogg b/sound/voice/complionator/running.ogg
new file mode 100644
index 0000000000..3711ce6ccf
Binary files /dev/null and b/sound/voice/complionator/running.ogg differ
diff --git a/sound/voice/complionator/shutup.ogg b/sound/voice/complionator/shutup.ogg
new file mode 100644
index 0000000000..ecd2b02015
Binary files /dev/null and b/sound/voice/complionator/shutup.ogg differ
diff --git a/sound/voice/complionator/stfu.ogg b/sound/voice/complionator/stfu.ogg
new file mode 100644
index 0000000000..9c3fcf675b
Binary files /dev/null and b/sound/voice/complionator/stfu.ogg differ
diff --git a/sound/voice/complionator/super.ogg b/sound/voice/complionator/super.ogg
new file mode 100644
index 0000000000..8bae406dea
Binary files /dev/null and b/sound/voice/complionator/super.ogg differ
diff --git a/vorestation.dme b/vorestation.dme
index 81ae815980..9dc5cab5d8 100644
--- a/vorestation.dme
+++ b/vorestation.dme
@@ -1864,7 +1864,11 @@
#include "code\modules\clothing\masks\breath.dm"
#include "code\modules\clothing\masks\breath_vr.dm"
#include "code\modules\clothing\masks\gasmask.dm"
+<<<<<<< HEAD:vorestation.dme
#include "code\modules\clothing\masks\gasmask_vr.dm"
+=======
+#include "code\modules\clothing\masks\hailer.dm"
+>>>>>>> cc3591c... Merge pull request #7552 from SplinterGP/master:polaris.dme
#include "code\modules\clothing\masks\miscellaneous.dm"
#include "code\modules\clothing\masks\voice.dm"
#include "code\modules\clothing\rings\material.dm"