Merge pull request #16003 from Stokes52/voice_modulator

Adds a voice modulator mask that makes it easier for antags to RP as "Unknown" without revealing their identity
This commit is contained in:
variableundefined
2021-09-19 10:30:20 -05:00
committed by GitHub
19 changed files with 91 additions and 6 deletions
+1 -1
View File
@@ -30,7 +30,7 @@
var/obj/item/clothing/mask/horsehead/magichead = new /obj/item/clothing/mask/horsehead
magichead.flags |= NODROP | DROPDEL //curses!
magichead.flags_inv = null //so you can still see their face
magichead.voicechange = 1 //NEEEEIIGHH
magichead.voicechange = TRUE //NEEEEIIGHH
target.visible_message( "<span class='danger'>[target]'s face lights up in fire, and after the event a horse's head takes its place!</span>", \
"<span class='danger'>Your face burns up, and shortly after the fire you realise you have the face of a horse!</span>")
if(!target.unEquip(target.wear_mask))
+9
View File
@@ -1174,6 +1174,15 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
cost = 4
excludefrom = list(/datum/game_mode/nuclear)
/datum/uplink_item/stealthy_tools/voice_modulator
name = "Chameleon Voice Modulator Mask"
desc = "A syndicate tactical mask equipped with chameleon technology and a sound modulator for disguising your voice. \
While the mask is active, your voice will sound unrecognizable to others"
reference = "CVMM"
item = /obj/item/clothing/mask/gas/voice_modulator/chameleon
cost = 1
excludefrom = list(/datum/game_mode/nuclear)
/datum/uplink_item/stealthy_tools/chameleon/nuke
reference = "NCHAM"
cost = 6
+1 -1
View File
@@ -1029,7 +1029,7 @@
var/obj/item/clothing/mask/horsehead/magichead = new /obj/item/clothing/mask/horsehead
magichead.flags |= NODROP | DROPDEL //curses!
magichead.flags_inv = null //so you can still see their face
magichead.voicechange = 1 //NEEEEIIGHH
magichead.voicechange = TRUE //NEEEEIIGHH
if(!user.unEquip(user.wear_mask))
qdel(user.wear_mask)
user.equip_to_slot_if_possible(magichead, slot_wear_mask, TRUE, TRUE)
@@ -144,6 +144,8 @@
/obj/item/stamp/chameleon = 2,
/obj/item/clothing/shoes/chameleon/noslip = 5,
/obj/item/clothing/mask/chameleon = 2,
/obj/item/clothing/mask/gas/voice_modulator = 2,
/obj/item/clothing/mask/gas/voice_modulator/chameleon = 2,
/obj/item/dnascrambler = 1,
/obj/item/storage/backpack/satchel_flat = 2,
/obj/item/storage/toolbox/syndicate = 2,
@@ -156,7 +158,7 @@
/obj/item/storage/secure/briefcase/syndie = 2,
/obj/item/storage/fancy/cigarettes/cigpack_syndicate = 2,
/obj/item/storage/pill_bottle/fakedeath = 2,
"" = 68
"" = 64 // Reduce this number if you add things above. Make sure all the numbers in the list add to 100 EXACTLY
)
/obj/effect/spawner/lootdrop/crate_spawner // for ruins
+7 -1
View File
@@ -1,6 +1,6 @@
/obj/item/voice_changer
name = "voice changer"
desc = "A voice scrambling module."
desc = "A voice mimicking module."
icon = 'icons/obj/device.dmi'
icon_state = "voice_changer_off"
@@ -42,3 +42,9 @@
voice = sanitize(copytext(chosen_voice, 1, MAX_MESSAGE_LEN))
to_chat(user, "<span class='notice'>You are now mimicking <b>[voice]</b>.</span>")
/obj/item/voice_changer/voice_modulator
name = "voice modulator"
desc = "A voice scrambling module."
voice = "Unknown"
actions_types = list(/datum/action/item_action/voice_changer/toggle)
+4
View File
@@ -428,6 +428,10 @@ BLIND // can't see anything
var/datum/action/A = X
A.UpdateButtonIcon()
// Changes the speech verb when wearing a mask if a value is returned
/obj/item/clothing/mask/proc/change_speech_verb()
return
//Shoes
/obj/item/clothing/shoes
name = "shoes"
+5 -1
View File
@@ -313,7 +313,7 @@
flags = BLOCKHAIR
flags_inv = HIDEFACE
w_class = WEIGHT_CLASS_SMALL
var/voicechange = 0
var/voicechange = FALSE
var/temporaryname = " the Horse"
var/originalname = ""
@@ -347,6 +347,10 @@
if(user.real_name == "[originalname][temporaryname]" || user.real_name == "A Horse With No Name") //if it's somehow changed while the mask is on it doesn't revert
user.real_name = originalname
/obj/item/clothing/mask/horsehead/change_speech_verb()
if(voicechange)
return pick("whinnies", "neighs", "says")
/obj/item/clothing/mask/face
flags_inv = HIDEFACE
flags_cover = MASKCOVERSMOUTH
@@ -0,0 +1,44 @@
/obj/item/clothing/mask/gas/voice_modulator
name = "modified gas mask"
desc = "A gas mask modified with a sound modulator that disguises the user's voice when active"
icon_state = "voice_modulator"
item_state = "voice_modulator"
var/obj/item/voice_changer/voice_modulator/voice_modulator
/obj/item/clothing/mask/gas/voice_modulator/Initialize(mapload)
. = ..()
voice_modulator = new(src)
/obj/item/clothing/mask/gas/voice_modulator/Destroy()
QDEL_NULL(voice_modulator)
return ..()
/obj/item/clothing/mask/gas/voice_modulator/chameleon
name = "chameleon voice modulator mask"
desc = "A tactical mask equipped with chameleon technology and a sound modulator that disguises the user's voice when active"
icon_state = "swat"
item_state = "swat"
var/datum/action/item_action/chameleon/change/chameleon_action
/obj/item/clothing/mask/gas/voice_modulator/chameleon/Initialize(mapload)
. = ..()
chameleon_action = new(src)
chameleon_action.chameleon_type = /obj/item/clothing/mask
chameleon_action.chameleon_name = "Mask"
chameleon_action.chameleon_blacklist = list()
chameleon_action.initialize_disguises()
/obj/item/clothing/mask/gas/voice_modulator/chameleon/Destroy()
QDEL_NULL(chameleon_action)
return ..()
/obj/item/clothing/mask/gas/voice_modulator/chameleon/emp_act(severity)
. = ..()
chameleon_action.emp_randomise()
/obj/item/clothing/mask/gas/voice_modulator/change_speech_verb()
if(voice_modulator.active)
return pick("modulates", "drones", "hums", "buzzes")
+10
View File
@@ -162,3 +162,13 @@
tools = list(TOOL_WIRECUTTER)
pathtools = list(/obj/item/kitchen/knife)
category = CAT_CLOTHING
/datum/crafting_recipe/voice_modulator
name = "Voice Modulator Mask"
result = list(/obj/item/clothing/mask/gas/voice_modulator)
time = 45
tools = list(TOOL_SCREWDRIVER, TOOL_MULTITOOL)
reqs = list(/obj/item/clothing/mask/gas = 1,
/obj/item/assembly/voice = 1,
/obj/item/stack/cable_coil = 5)
category = CAT_CLOTHING
+6 -1
View File
@@ -149,7 +149,6 @@
var/obj/item/clothing/mask/horsehead/hoers = wear_mask
if(hoers.voicechange)
S.message = pick("NEEIIGGGHHHH!", "NEEEIIIIGHH!", "NEIIIGGHH!", "HAAWWWWW!", "HAAAWWW!")
verb = pick("whinnies", "neighs", "says")
if(dna)
for(var/mutation_type in active_mutations)
@@ -167,6 +166,12 @@
if(span)
S.message = "<span class='[span]'>[S.message]</span>"
if(wear_mask)
var/speech_verb_when_masked = wear_mask.change_speech_verb()
if(speech_verb_when_masked)
verb = speech_verb_when_masked
return list("verb" = verb)
/mob/living/carbon/human/handle_message_mode(message_mode, list/message_pieces, verb, used_radios)
Binary file not shown.

Before

Width:  |  Height:  |  Size: 49 KiB

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 40 KiB

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 46 KiB

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 28 KiB

+1
View File
@@ -1417,6 +1417,7 @@
#include "code\modules\clothing\masks\breath.dm"
#include "code\modules\clothing\masks\gasmask.dm"
#include "code\modules\clothing\masks\miscellaneous.dm"
#include "code\modules\clothing\masks\voicemodulator.dm"
#include "code\modules\clothing\patreon\glasses.dm"
#include "code\modules\clothing\patreon\hats.dm"
#include "code\modules\clothing\shoes\colour.dm"