Actually gets ling hivemind in (#9473)

Hey remember when ling reworks were a thing?

Anyway this implements the hivemind thing that Geeves was working on (And then I was working on). It actually works for messages, ghosting, kicking, etc now.

Succ'd people can now remain as part of the changeling's local hivemind and chat with them. If they salt, ling can kick them. If they don't want to participate this way, they can ghost.

If I actually get around to it, this also serves as the basis for allowing the ling to do things with them, such as creating horror mobs, injecting them into corpses, or other ideas that might get the succ'd person back into the round in a different way. Which, should hopefully reduce complaints and make ling way cooler.
This commit is contained in:
Doxxmedearly
2020-07-29 21:55:27 +03:00
committed by GitHub
parent 06773a55cd
commit 480ab2efab
7 changed files with 119 additions and 1 deletions
+2
View File
@@ -446,8 +446,10 @@
#include "code\game\gamemodes\changeling\helpers\_framework.dm"
#include "code\game\gamemodes\changeling\helpers\_store.dm"
#include "code\game\gamemodes\changeling\helpers\changeling.dm"
#include "code\game\gamemodes\changeling\implements\hivemind.dm"
#include "code\game\gamemodes\changeling\implements\items.dm"
#include "code\game\gamemodes\changeling\implements\powers\body.dm"
#include "code\game\gamemodes\changeling\implements\powers\hivemind.dm"
#include "code\game\gamemodes\changeling\implements\powers\resources.dm"
#include "code\game\gamemodes\changeling\implements\powers\stings.dm"
#include "code\game\gamemodes\changeling\implements\powers\suck.dm"
+1
View File
@@ -91,6 +91,7 @@
#define COLOR_OIL "#030303"
#define COLOR_ASH "#615C5B"
#define COLOR_SNOW "#9CADAD"
#define COLOR_LING_HIVEMIND "#94582e"
// Blood colors
@@ -3,6 +3,7 @@ var/global/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","E
/datum/changeling //stores changeling powers, changeling recharge thingie, changeling absorbed DNA and changeling ID (for changeling hivemind)
var/list/datum/absorbed_dna/absorbed_dna = list()
var/list/absorbed_languages = list()
var/list/hivemind_members = list()
var/absorbedcount = 0
var/chem_charges = 20
var/chem_recharge_rate = 0.5
@@ -12,7 +13,7 @@ var/global/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","E
var/geneticdamage = 0
var/isabsorbing = 0
var/geneticpoints = 5
var/purchasedpowers = list()
var/list/purchasedpowers = list()
var/mimicing = ""
var/mimiced_accent = "Biesellite"
var/justate
@@ -75,6 +75,19 @@ var/list/datum/power/changeling/powerinstances = list()
genomecost = 0
verbpath = /mob/proc/changeling_hivedownload
/datum/power/changeling/hivemind_commune
name = "Hivemind Commune"
desc = "We can speak with the members of our Hivemind, without it being apparent to the people in our view."
genomecost = 0
verbpath = /mob/proc/changeling_hivemind_commune
/datum/power/changeling/hivemind_eject
name = "Hivemind Eject"
desc = "We can eject a pesky hivemind from ourselves, if it complains a lot. This won't free up space, but will prevent them from screaming at us."
helptext = "Ghosts the chosen hivemind. Use it on salty people spamming you to send them to deadchat."
genomecost = 0
verbpath = /mob/proc/changeling_eject_hivemind
//Stings and sting accessorries
//Rest in pieces, unfat sting. - Geeves
@@ -0,0 +1,56 @@
/mob/abstract/hivemind
name = "internal hivemind"
see_in_dark = 2
see_invisible = SEE_INVISIBLE_LIVING
var/mob/living/carbon/human/changeling_mob // the head honcho
/mob/abstract/hivemind/Destroy()
changeling_mob = null
return ..()
/mob/abstract/hivemind/verb/ghost()
set category = "OOC"
set name = "Ghost"
set desc = "Relinquish your life and enter the land of the dead."
announce_ghost_joinleave(ghostize(1, 0))
changeling_mob.mind.changeling.hivemind_members -= src
relay_hivemind(SPAN_NOTICE("[src] has left our hivemind to join the living dead."), changeling_mob)
/mob/abstract/hivemind/proc/add_to_hivemind(var/mob/original_body, var/mob/living/carbon/human/ling)
name = original_body.real_name
languages = original_body.languages
for(var/language in ling.languages)
add_language(language)
remove_language(LANGUAGE_CHANGELING) // no actual changeling speak for you, buddy
if(original_body.ckey)
ckey = original_body.ckey
changeling_mob = ling
if(changeling_mob)
changeling_mob.mind.changeling.hivemind_members[name] = src
introduction(changeling_mob)
/mob/abstract/hivemind/proc/introduction(var/mob/living/carbon/human/ling)
to_chat(src, SPAN_DANGER(FONT_LARGE("You are a member of a Changeling's Hivemind!")))
to_chat(src, SPAN_DANGER("You have been absorbed by [ling]! Do not fret."))
to_chat(src, SPAN_DANGER("You are now a part of their hivemind."))
to_chat(src, SPAN_DANGER("You can use 'say' to speak with them and the rest of the hivemind."))
to_chat(src, SPAN_DANGER("What you say can only be heard by [ling] and the other members of their local hivemind."))
/mob/abstract/hivemind/say(message)
message = sanitize_text(message)
if(!message)
return
log_say("[changeling_mob] Hivemind/[src.key] : [message]", ckey=key_name(src))
if(src.client?.prefs.muted & (MUTE_DEADCHAT|MUTE_IC))
to_chat(src, SPAN_WARNING("You cannot talk. (Admin Muted)"))
return
relay_hivemind(changeling_message_process(message), changeling_mob)
/mob/abstract/hivemind/emote()
to_chat(src, SPAN_WARNING("You cannot emote."))
return
@@ -0,0 +1,37 @@
//To get rid of pesky moaners
/mob/proc/changeling_eject_hivemind()
set category = "Changeling"
set name = "Hivemind Eject"
set desc = "Ejects a member of our internal hivemind."
if(!(mind?.changeling))
return
if(!mind.changeling.hivemind_members.len)
return
var/chosen_player = input("Choose a hivemind member to eject.", "Eject") as null|anything in mind.changeling.hivemind_members
if(!chosen_player || chosen_player == "None")
return
var/mob/abstract/hivemind/M = mind.changeling.hivemind_members[chosen_player]
M.ghost() //Deuces
return TRUE
/mob/proc/changeling_hivemind_commune()
set category = "Changeling"
set name = "Hivemind Commune"
set desc = "Speak with all members of the hivemind."
var/message = input(src, "What do you wish to tell your Hivemind?", "Hivemind Commune") as text
if(!message)
return
relay_hivemind(changeling_message_process(message), src)
return TRUE
/mob/proc/relay_hivemind(var/message, var/mob/ling)
if(ling.mind?.changeling)
for(var/H in ling.mind.changeling.hivemind_members) // tell the others in the hivemind
var/mob/M = ling.mind.changeling.hivemind_members[H]
to_chat(M, message)
to_chat(ling, message)
/mob/proc/changeling_message_process(var/message)
return "<font color=[COLOR_LING_HIVEMIND]>[src] says, \"[message]\"</font>"
@@ -0,0 +1,8 @@
author: Doxxmedearly, Geeves
delete-after: True
changes:
- rscadd: "When lings suck people dry, those people are added to the ling's internal hivemind, where they can communicate with each other."
- rscadd: "The hiveminded person can ghost, which will tell the ling and the others in the hivemind that they have left."
- rscadd: "The ling can eject people out of their hivemind. This has no benefit to the ling, unless the person was salty. This ability does not make salt okay."