diff --git a/code/datums/spells/horsemask.dm b/code/datums/spells/horsemask.dm index d5f686fb763..f22689067d8 100644 --- a/code/datums/spells/horsemask.dm +++ b/code/datums/spells/horsemask.dm @@ -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( "[target]'s face lights up in fire, and after the event a horse's head takes its place!", \ "Your face burns up, and shortly after the fire you realise you have the face of a horse!") if(!target.unEquip(target.wear_mask)) diff --git a/code/datums/uplink_item.dm b/code/datums/uplink_item.dm index f8f2fe512f6..4e59d8ad6dd 100644 --- a/code/datums/uplink_item.dm +++ b/code/datums/uplink_item.dm @@ -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 diff --git a/code/game/gamemodes/wizard/spellbook.dm b/code/game/gamemodes/wizard/spellbook.dm index 67ad3a2ebae..0eef296334d 100644 --- a/code/game/gamemodes/wizard/spellbook.dm +++ b/code/game/gamemodes/wizard/spellbook.dm @@ -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) diff --git a/code/game/objects/effects/spawners/lootdrop.dm b/code/game/objects/effects/spawners/lootdrop.dm index c4af2849947..a5c01d63ae4 100644 --- a/code/game/objects/effects/spawners/lootdrop.dm +++ b/code/game/objects/effects/spawners/lootdrop.dm @@ -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 diff --git a/code/game/objects/items/devices/voice.dm b/code/game/objects/items/devices/voice.dm index 43a95ae86d7..c18af96333d 100644 --- a/code/game/objects/items/devices/voice.dm +++ b/code/game/objects/items/devices/voice.dm @@ -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, "You are now mimicking [voice].") + +/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) diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index 3f79aa71727..bbcebdc519d 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -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" diff --git a/code/modules/clothing/masks/miscellaneous.dm b/code/modules/clothing/masks/miscellaneous.dm index bddb5701535..cb2b402b2a2 100644 --- a/code/modules/clothing/masks/miscellaneous.dm +++ b/code/modules/clothing/masks/miscellaneous.dm @@ -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 diff --git a/code/modules/clothing/masks/voicemodulator.dm b/code/modules/clothing/masks/voicemodulator.dm new file mode 100644 index 00000000000..c05a17aeab1 --- /dev/null +++ b/code/modules/clothing/masks/voicemodulator.dm @@ -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") diff --git a/code/modules/crafting/tailoring.dm b/code/modules/crafting/tailoring.dm index 6a597e9e8fa..a1fc09728d0 100644 --- a/code/modules/crafting/tailoring.dm +++ b/code/modules/crafting/tailoring.dm @@ -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 diff --git a/code/modules/mob/living/carbon/human/say.dm b/code/modules/mob/living/carbon/human/say.dm index 4f857163500..76211cf3198 100644 --- a/code/modules/mob/living/carbon/human/say.dm +++ b/code/modules/mob/living/carbon/human/say.dm @@ -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 = "[S.message]" + + 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) diff --git a/icons/mob/clothing/mask.dmi b/icons/mob/clothing/mask.dmi index 99be80fb681..4d3568caad8 100644 Binary files a/icons/mob/clothing/mask.dmi and b/icons/mob/clothing/mask.dmi differ diff --git a/icons/mob/clothing/species/drask/mask.dmi b/icons/mob/clothing/species/drask/mask.dmi index 27fa4502ad7..0795633a7c1 100644 Binary files a/icons/mob/clothing/species/drask/mask.dmi and b/icons/mob/clothing/species/drask/mask.dmi differ diff --git a/icons/mob/clothing/species/grey/mask.dmi b/icons/mob/clothing/species/grey/mask.dmi index 348a39c0f03..ae355aa8d51 100644 Binary files a/icons/mob/clothing/species/grey/mask.dmi and b/icons/mob/clothing/species/grey/mask.dmi differ diff --git a/icons/mob/clothing/species/plasmaman/mask.dmi b/icons/mob/clothing/species/plasmaman/mask.dmi index 73ff04e9288..1923e54a745 100644 Binary files a/icons/mob/clothing/species/plasmaman/mask.dmi and b/icons/mob/clothing/species/plasmaman/mask.dmi differ diff --git a/icons/mob/clothing/species/tajaran/mask.dmi b/icons/mob/clothing/species/tajaran/mask.dmi index f189a8d950d..337953a805b 100644 Binary files a/icons/mob/clothing/species/tajaran/mask.dmi and b/icons/mob/clothing/species/tajaran/mask.dmi differ diff --git a/icons/mob/clothing/species/unathi/mask.dmi b/icons/mob/clothing/species/unathi/mask.dmi index 2e29c80faf2..163fdc75628 100644 Binary files a/icons/mob/clothing/species/unathi/mask.dmi and b/icons/mob/clothing/species/unathi/mask.dmi differ diff --git a/icons/mob/clothing/species/vox/mask.dmi b/icons/mob/clothing/species/vox/mask.dmi index a875b7205a5..5e877739fab 100644 Binary files a/icons/mob/clothing/species/vox/mask.dmi and b/icons/mob/clothing/species/vox/mask.dmi differ diff --git a/icons/obj/clothing/masks.dmi b/icons/obj/clothing/masks.dmi index 2c755f556ea..266db362dba 100644 Binary files a/icons/obj/clothing/masks.dmi and b/icons/obj/clothing/masks.dmi differ diff --git a/paradise.dme b/paradise.dme index 5c415a06568..a491d9c3e4c 100644 --- a/paradise.dme +++ b/paradise.dme @@ -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"