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
@@ -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))
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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")
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
Before Width: | Height: | Size: 49 KiB After Width: | Height: | Size: 49 KiB |
|
Before Width: | Height: | Size: 40 KiB After Width: | Height: | Size: 40 KiB |
|
Before Width: | Height: | Size: 46 KiB After Width: | Height: | Size: 46 KiB |
|
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 2.9 KiB |
|
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 31 KiB |
|
Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 37 KiB |
|
Before Width: | Height: | Size: 35 KiB After Width: | Height: | Size: 35 KiB |
|
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 28 KiB |
@@ -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"
|
||||
|
||||