From 605abfc76d508cd51e109794d46a98f47bd1ed15 Mon Sep 17 00:00:00 2001
From: GDN <96800819+GDNgit@users.noreply.github.com>
Date: Sun, 4 Feb 2024 15:59:52 -0600
Subject: [PATCH] Adds runechat to the abductor mindlink (#23868)
* Adds runechat to the abductor mindlink
* Update code/game/gamemodes/miniantags/abduction/abduction_gear.dm
---
code/__DEFINES/language_defines.dm | 1 +
code/game/dna/mutations/mutation_powers.dm | 18 +++++++++---------
code/modules/mob/language.dm | 11 ++++++-----
interface/skin.dmf | 2 +-
4 files changed, 17 insertions(+), 15 deletions(-)
diff --git a/code/__DEFINES/language_defines.dm b/code/__DEFINES/language_defines.dm
index 90633e5215d..345c73d193f 100644
--- a/code/__DEFINES/language_defines.dm
+++ b/code/__DEFINES/language_defines.dm
@@ -8,6 +8,7 @@
#define NO_STUTTER 256 // No stuttering, slurring, or other speech problems
#define NOBABEL 512 // Not granted by book of babel. Typically antag languages.
#define NOLIBRARIAN 1024 // Flag for banning the Librarian from certain languages. (actual 1984)
+#define HIVEMIND_RUNECHAT (1<<11) // Flag for letting hivemind languages have a runechat appear over the head of the recipient
//Auto-accent level defines.
#define AUTOHISS_OFF 0
diff --git a/code/game/dna/mutations/mutation_powers.dm b/code/game/dna/mutations/mutation_powers.dm
index e2b9231b1a9..346e1f68b3f 100644
--- a/code/game/dna/mutations/mutation_powers.dm
+++ b/code/game/dna/mutations/mutation_powers.dm
@@ -928,10 +928,10 @@
log_say("(TPATH to [key_name(target)]) [say]", user)
user.create_log(SAY_LOG, "Telepathically said '[say]' using [src]", target)
if(target.dna?.GetSEState(GLOB.remotetalkblock))
- target.show_message("You hear [user.real_name]'s voice: [say]")
+ target.show_message("You hear [user.real_name]'s voice: [say]")
else
- target.show_message("You hear a voice that seems to echo around the room: [say]")
- user.show_message("You project your mind into [(target in user.get_visible_mobs()) ? target.name : "the unknown entity"]: [say]")
+ target.show_message("You hear a voice that seems to echo around the room: [say]")
+ user.show_message("You project your mind into [(target in user.get_visible_mobs()) ? target.name : "the unknown entity"]: [say]")
for(var/mob/dead/observer/G in GLOB.player_list)
G.show_message("Telepathic message from [user] ([ghost_follow_link(user, ghost=G)]) to [target] ([ghost_follow_link(target, ghost=G)]): [say]")
@@ -955,8 +955,8 @@
var/message = "You feel your mind expand briefly... (Click to send a message.)"
if(target.dna?.GetSEState(GLOB.remotetalkblock))
message = "You feel [user.real_name] request a response from you... (Click here to project mind.)"
- user.show_message("You offer your mind to [(target in user.get_visible_mobs()) ? target.name : "the unknown entity"].")
- target.show_message("[message]")
+ user.show_message("You offer your mind to [(target in user.get_visible_mobs()) ? target.name : "the unknown entity"].")
+ target.show_message("[message]")
available_targets += target
addtimer(CALLBACK(src, PROC_REF(removeAvailability), target), 100)
@@ -964,7 +964,7 @@
if(target in available_targets)
available_targets -= target
if(!(target in available_targets))
- target.show_message("You feel the sensation fade...")
+ target.show_message("You feel the sensation fade...")
/obj/effect/proc_holder/spell/mindscan/Topic(href, href_list)
var/mob/living/user
@@ -985,10 +985,10 @@
user.create_log(SAY_LOG, "Telepathically responded '[say]' using [src]", target)
log_say("(TPATH to [key_name(target)]) [say]", user)
if(target.dna?.GetSEState(GLOB.remotetalkblock))
- target.show_message("You project your mind into [user.name]: [say]")
+ target.show_message("You project your mind into [user.name]: [say]")
else
- target.show_message("You fill the space in your thoughts: [say]")
- user.show_message("You hear [target.name]'s voice: [say]")
+ target.show_message("You fill the space in your thoughts: [say]")
+ user.show_message("You hear [target.name]'s voice: [say]")
for(var/mob/dead/observer/G in GLOB.player_list)
G.show_message("Telepathic response from [target] ([ghost_follow_link(target, ghost=G)]) to [user] ([ghost_follow_link(user, ghost=G)]): [say]")
diff --git a/code/modules/mob/language.dm b/code/modules/mob/language.dm
index 39714882a55..df946cf4f24 100644
--- a/code/modules/mob/language.dm
+++ b/code/modules/mob/language.dm
@@ -111,13 +111,15 @@
var/msg = "[name], [speaker_mask] [get_spoken_verb(message)], [format_message(message)]"
for(var/mob/player in GLOB.player_list)
- if(istype(player,/mob/dead) && follow)
+ if(istype(player, /mob/dead) && follow)
var/msg_dead = "[name], [speaker_mask] ([ghost_follow_link(speaker, ghost=player)]) [get_spoken_verb(message)], [format_message(message)]"
to_chat(player, msg_dead)
continue
- else if(istype(player,/mob/dead) || ((src in player.languages) && check_special_condition(player, speaker)))
+ else if(istype(player, /mob/dead) || ((src in player.languages) && check_special_condition(player, speaker)))
to_chat(player, msg)
+ if((flags & HIVEMIND) && (flags & HIVEMIND_RUNECHAT))
+ player.create_chat_message(player, "[speaker_mask], [format_message(message)]")
/datum/language/proc/check_special_condition(mob/other, mob/living/speaker)
return TRUE
@@ -281,7 +283,6 @@
/datum/language/trinary/scramble(input)
. = ..(copytext(input, 1, max(length(input) / 4, 2)))
-
/datum/language/trinary/get_random_name()
var/new_name
if(prob(70))
@@ -313,7 +314,6 @@
new_name += "[pick(list("Tristan", "Zarlan", "Clack", "Kkraz", "Zramn", "Orlan", "Zrax", "Orax", "Oriz", "Tariz", "Kvestan"))]"
return new_name
-
/datum/language/slime
name = "Bubblish"
desc = "The language of slimes. It's a mixture of bubbling noises and pops. Very difficult to speak without mechanical aid for humans."
@@ -564,7 +564,7 @@
exclaim_verbs = list("gibbers")
colour = "abductor"
key = "zw" //doesn't matter, this is their default and only language
- flags = RESTRICTED | HIVEMIND | NOBABEL
+ flags = RESTRICTED | HIVEMIND | NOBABEL | HIVEMIND_RUNECHAT
follow = TRUE
/datum/language/abductor/broadcast(mob/living/speaker, message, speaker_mask)
@@ -581,6 +581,7 @@
/datum/language/abductor/golem
name = "Golem Mindlink"
desc = "Communicate with other alien alloy golems through a psychic link."
+ flags = RESTRICTED | HIVEMIND | NOBABEL
/datum/language/abductor/golem/check_special_condition(mob/living/carbon/human/other, mob/living/carbon/human/speaker)
return TRUE
diff --git a/interface/skin.dmf b/interface/skin.dmf
index 3f68f164170..b21716cc0f8 100644
--- a/interface/skin.dmf
+++ b/interface/skin.dmf
@@ -178,7 +178,7 @@ window "paramapwindow"
is-default = true
saved-params = "icon-size;zoom-mode"
zoom-mode = "distort"
- style = ".center { text-align: center; } .maptext { font-family: 'Small Fonts'; font-size: 7px; -dm-text-outline: 1px black; color: white; line-height: 1.1; } .small { font-size: 6px; } .big { font-size: 8px; } .reallybig { font-size: 8px; } .extremelybig { font-size: 8px; } .clown { color: #FF69Bf;} .tajaran {color: #803B56;} .skrell {color: #00CED1;} .solcom {color: #22228B;} .com_srus {color: #7c4848;} .zombie\t{color: #ff0000;} .soghun {color: #228B22;} .vox {color: #AA00AA;} .diona {color: #804000; font-weight: bold;} .trinary {color: #727272;} .kidan {color: #664205;} .slime {color: #0077AA;} .drask {color: #a3d4eb;} .vulpkanin {color: #B97A57;} .abductor {color: #800080; font-style: italic;} .his_grace { color: #15D512; } .hypnophrase { color: #0d0d0d; font-weight: bold; } .yell { font-weight: bold; }"
+ style = ".center { text-align: center; } .maptext { font-family: 'Small Fonts'; font-size: 7px; -dm-text-outline: 1px black; color: white; line-height: 1.1; } .small { font-size: 6px; } .big { font-size: 8px; } .reallybig { font-size: 8px; } .extremelybig { font-size: 8px; } .clown { color: #FF69Bf;} .tajaran {color: #803B56;} .skrell {color: #00CED1;} .solcom {color: #22228B;} .com_srus {color: #7c4848;} .zombie\t{color: #ff0000;} .soghun {color: #228B22;} .vox {color: #AA00AA;} .diona {color: #804000; font-weight: bold;} .trinary {color: #727272;} .kidan {color: #664205;} .slime {color: #0077AA;} .drask {color: #a3d4eb;} .vulpkanin {color: #B97A57;} .abductor {color: #800080;} .his_grace { color: #15D512; } .hypnophrase { color: #0d0d0d; font-weight: bold; } .yell { font-weight: bold; }"
on-show = ".winset \"menu.statusbar.is-checked=true?paramapwindow.status_bar.is-visible=true:paramapwindow.status_bar.is-visible=false\""
elem "status_bar"
type = LABEL