Wearing Shaper gear removes Hive name and color from Hivenet. (#22311)

Mechanically representing its pre-existing lore and description.
Mechanical description added on the item too.

<img width="416" height="97" alt="image"
src="https://github.com/user-attachments/assets/e70da937-30ab-42f3-bf85-5a8da5accddf"
/>

NEW:
Shaper Helmet now also removes Hive name when physically speaking.
<img width="330" height="65" alt="image"
src="https://github.com/user-attachments/assets/a56af02c-0494-4589-bf15-4d59f6d0767e"
/>

NEWER: Helmet affects visible name and messages. It ignores worn ID for
obvious reasons, but some Shapers may hide their ID while talking to
other Vaurcae.
<img width="533" height="225" alt="image"
src="https://github.com/user-attachments/assets/da85914d-52bc-4036-9616-66e479794fa3"
/>

Full Preimminent Shapers should wear robes and helmet with TTS accent to
be as anonymized as possible. Parts of your carapace that peek through
can be easily hidden as well.

NEWEST: Robes and helmet functionality have been swapped, as it makes
more sense for the robes that cover you up to remove from physical
messages.
This commit is contained in:
runecap
2026-05-07 00:16:43 +00:00
committed by GitHub
parent 6d56134174
commit 9d67a6afbf
6 changed files with 36 additions and 4 deletions
+8 -3
View File
@@ -234,11 +234,16 @@
/datum/language/bug/broadcast(var/mob/living/speaker,var/message,var/speaker_mask)
log_say("[key_name(speaker)] : ([name]) [message]")
var/mob/living/carbon/human/H = speaker //Check for Preimminent Shaper robes, which obscure Hive affiliation
var/obj/item/clothing/head/shaper/helmet = H.get_equipped_item(slot_head)
if(!speaker_mask)
speaker_mask = speaker.real_name
if(istype(helmet)) //Then remove their Hive name from Hivenet
var/list/speaker_surname = splittext(speaker_mask, " ")
speaker_mask = speaker_surname[1]
var/msg = "<i><span class='game say'>[name], <span class='name'>[speaker_mask]</span>[format_message(message, get_spoken_verb(message), speaker_mask)]</span></i>"
var/encrypted_msg = "<i><span class='game say'>[name], <span class='name'>[speaker_mask]</span>[format_message("!a surge of encrypted data", get_spoken_verb(message), speaker_mask)]</span></i>"
var/msg = "<i><span class='game say'>[name], <span class='name'>[speaker_mask]</span>[format_message(message, get_spoken_verb(message), speaker_mask, speaker)]</span></i>"
var/encrypted_msg = "<i><span class='game say'>[name], <span class='name'>[speaker_mask]</span>[format_message("!a surge of encrypted data", get_spoken_verb(message), speaker_mask, speaker)]</span></i>"
if(isvaurca(speaker))
speaker.custom_emote(VISIBLE_MESSAGE, "[pick("twitches their antennae", "twitches their antennae rhythmically")].")
@@ -281,7 +286,7 @@
continue
to_chat(player, msg)
/datum/language/bug/format_message(message, verb, speaker_mask)
/datum/language/bug/format_message(message, verb, speaker_mask, speaker)
var/message_color = colour
var/list/speaker_surname = splittext(speaker_mask, " ")
if(length(speaker_surname) > 1)
@@ -485,6 +485,9 @@
return get_id_name("Unknown")
if( head && (head.flags_inv&HIDEFACE) )
return get_id_name("Unknown") //Likewise for hats
if(istype(wear_suit, /obj/item/clothing/suit/vaurca/shaper)) //Check for Preimminent Shaper helmet which obscures Hive affiliation
var/list/hiveless_name = splittext(real_name, " ") //then remove Hive surname, ignore ID for obvious reason.
return hiveless_name[1]
var/face_name = get_face_name()
var/id_name = get_id_name("")
if(id_name && (id_name != face_name))
@@ -87,6 +87,9 @@
voice_sub = changer.voice
if(voice_sub)
return voice_sub
if(istype(wear_suit, /obj/item/clothing/suit/vaurca/shaper)) //Check for Preimminent Shaper robes which obscures Hive affiliation
var/list/hiveless_name = splittext(real_name, " ") // then remove Hive surname when speaking
return hiveless_name[1]
var/obj/item/organ/external/head/face = organs_by_name[BP_HEAD]
if(face?.disfigured) // if your face is ruined, your ability to vocalize is also ruined
return "Unknown" // above ling voice mimicing so they don't get caught out immediately