New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We鈥檒l occasionally send you account related emails.
Already on GitHub? Sign in to your account
Adds a voice modulator mask that makes it easier for antags to RP as "Unknown" without revealing their identity #16003
Adds a voice modulator mask that makes it easier for antags to RP as "Unknown" without revealing their identity #16003
Conversation
This PR is based on the discussion at this thread: https://www.paradisestation.org/forum/topic/20697-idea-for-a-new-item-the-voice-scrambler-that-makes-it-easier-to-hide-your-identity-and-rp-as-unknown/?tab=comments#comment-155092 |
Amazing idea. 馃憤 |
@@ -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, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
You need to update the line "" = 68 below this to "" = 64. You are adding 4 items to the loot table, so 4 needs to be removed from the 'empty' field.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@datlo thanks! Fixed in the commit below.
code/datums/uplink_item.dm
Outdated
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 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
item = /obj/item/clothing/mask/gas/voice_modulator | |
item = /obj/item/clothing/mask/gas/voice_modulator/chameleon |
Should be this one right?
@@ -167,6 +167,12 @@ | |||
S.message = uppertext(S.message) | |||
verb = "yells loudly" | |||
|
|||
if(istype(wear_mask, /obj/item/clothing/mask/gas/voice_modulator)) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The way masks are handled here could do with a refactor. Out of the scope for your PR though I recon
@@ -167,6 +167,12 @@ | |||
S.message = uppertext(S.message) | |||
verb = "yells loudly" | |||
|
|||
if(istype(wear_mask, /obj/item/clothing/mask/gas/voice_modulator)) | |||
var/obj/item/voice_changer/changer = locate() in wear_mask |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
var/obj/item/voice_changer/changer = locate() in wear_mask | |
var/obj/item/clothing/mask/gas/voice_modulator/VM = wear_mask | |
var/obj/item/voice_changer/changer = VM.voice_modulator |
if (!changer.active) | ||
continue | ||
verb = pick("modulates", "drones", "hums", "buzzes") |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
if (!changer.active) | |
continue | |
verb = pick("modulates", "drones", "hums", "buzzes") | |
if(changer.active) | |
verb = pick("modulates", "drones", "hums", "buzzes") |
Else it skips the other code below
var/obj/item/voice_changer/changer = locate() in wear_mask | ||
if (!changer.active) | ||
continue | ||
verb = pick("modulates", "drones", "hums", "buzzes") |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This code should also not be located in the for loop btw. verb
is only used in the return
on line 178. When everything is done
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fixed.
Great idea but think it would look cooler as sec gas mask looking thing instead, but that's just being picky |
@@ -169,6 +169,13 @@ | |||
|
|||
if(span) | |||
S.message = "<span class='[span]'>[S.message]</span>" | |||
|
|||
if(istype(wear_mask, /obj/item/clothing/mask/gas/voice_modulator)) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is really snowflakey, and isn't acceptable--you're going to have to make this more OOP if this is remotely going to have a chance of passing.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@Fox-McCloud absolutely, I thought the way this was implemented was weird too. I was following the example from the horse mask above and I didn't think I should deviate from the pattern already established.
However if you have examples or ideas for how you would prefer it to be coded I am very interested to learn. Thanks for taking a look!
b81d290
to
902856a
Compare
@Fox-McCloud please see the last two commits. I made it so that voice changing when wearing a mask is a generic proc that any mask can use. I also refactored the horse mask to use this proc. Hopefully this is less "snowflake" :) |
Great idea. Adds to RP while cutting down on metagaming. Hope to see it in-round sometime soon. |
Applied changes. Thanks @AffectedArc07! |
if(wear_mask) | ||
var/speech_verb_when_masked = wear_mask.change_speech_verb() | ||
if(speech_verb_when_masked) | ||
verb = speech_verb_when_masked |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It is best to place this part of the code before the for loop.
Seeing verb
is never used in the for loop and it never changes after one iteration.
Doing this also retains the behaviour of being brain damaged changing the verb even if you have a horsemask on... Bug? Your say
Moved mask logic down so it takes precedence over things like brain damage, according to farie82's review. |
Hello maintainers, @Fox-McCloud @AffectedArc07 @Crazylemon64. I hope it's okay to ping you. Since this has been open a while, please let me know if you would like me to fix the merge conflicts, close this PR, or continue to wait. Thank you for your time. :) |
@Stokes52 Can you deconflict this within 7 days and ping me on Discord in coding_chat (do not DM) when ready and CI has passed? |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
See above, please deconflict
Co-authored-by: SabreML <57483089+SabreML@users.noreply.github.com>
Co-authored-by: AffectedArc07 <25063394+AffectedArc07@users.noreply.github.com>
d1a6c90
to
168a14e
Compare
What Does This PR Do
Why It's Good For The Game
Antags need a way to easily talk with and RP with their victims without immediately giving away their identity. Many antags won't talk to people because a single word will permanently give away their identity which leads to a boring cycle of no interaction, no-RP traitoring. 4tc is too much if you are only interested in disguising your voice and it locks vampires and cultists out of the ability to hide their voice. Vampires especially are a role that wants to talk to their victims but is punished for doing so.
Whispering when next to someone also hides your identity, but this feature is not widely known and there are many reasons why, as an antag, you might not want to be next to someone to talk to them.
Making it an uplink item gives traitors immediate access, while a craftable non-chameleon version makes it available to cult and vampires if they find the right items.
The masks are craftable and added to maintenance loot so that you cannot metagame that "Unknown" = bad guy
Images of changes
Left = Syndicate chameleon version in the uplink, Right = craftable version
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"
name = "modified gas mask"
desc = "A gas mask modified with a sound modulator that disguises the user's voice when active"
Crafting recipe:
Uplink text:
Example of how it works in chat:
Balance Considerations:
Space Law: Both masks should be considered Class-C contraband. Someone using this item may hide their identity, but they will draw the unwanted attention of security. This also allows security to legally confiscate the mask from any crew members who try to craft or use this illegal item.
Why isn't the crafting recipe more difficult? This item is very intentionally meant to not be too difficult to acquire. It is similar if not more difficult to craft than the stun prod, requiring maintenance access (for the mask), access to tools to hack the vendomat (for the voice analyzer) or access to an autolathe (for the cables + analyzer). This item is meant to encourage RP for antags and should not be too difficult to acquire. If this becomes a very commonly used equipment for antags, I argue that would be a good thing for the server as it opens up more RP opportunities without harshly punishing antags for speaking. This is also an easy balance lever to tweak. The requirements can be increased easily in a future PR if it gets out of hand, but I argue for its first implementation it should be relatively easy to acquire.
What about crew grief? In cases of minor abuse, security can confiscate them, as already happens with other illegal/contraband items the crew can acquire/craft, such as stunprods, flamethrowers, syndicate maints loot, etc,. In cases of major abuse, it can be considered self-antagging and warrant admin intervention, which is the same as with the above items. After all, why would the crew ever need this item?
What about the existing chameleon kit?
The chameleon kit is locked behind the traitor role and is too expensive if you are not interested in using all of the advanced disguise features. The chameleon kit is for traitors who want to be fully incognito and disguise themselves as other members of the crew. The voice modulator is for antags who don't mind appearing suspicious, but still want to hide their identity.
Changelog
馃啈
add: Adds craftable voice modulator mask that disguises the user's voice so it sounds like "Unknown"
add: Adds chameleon voice modulator version of the mask to the syndicate uplink
add: Custom sprites for the craftable voice modulator mask, including sprites for all species
add: Adds both masks to maintenance loot at low chance
add: Voice changing effect when the mask is active. The user's "say" verb will change to something more artificial
/:cl: