mirror of
https://github.com/yogstation13/Yogstation.git
synced 2025-02-26 09:04:50 +00:00
@@ -52,6 +52,7 @@
|
||||
|
||||
var/datum/faction/faction //associated faction
|
||||
var/datum/changeling/changeling //changeling holder
|
||||
var/linglink
|
||||
|
||||
var/miming = 0 // Mime's vow of silence
|
||||
var/antag_hud_icon_state = null //this mind's ANTAG_HUD should have this icon_state
|
||||
|
||||
@@ -290,6 +290,7 @@ var/list/slot2type = list("head" = /obj/item/clothing/head/changeling, "wear_mas
|
||||
var/changelingID = "Changeling"
|
||||
var/geneticdamage = 0
|
||||
var/isabsorbing = 0
|
||||
var/islinking = 0
|
||||
var/geneticpoints = 10
|
||||
var/purchasedpowers = list()
|
||||
var/mimicing = ""
|
||||
|
||||
68
code/game/gamemodes/changeling/powers/linglink.dm
Normal file
68
code/game/gamemodes/changeling/powers/linglink.dm
Normal file
@@ -0,0 +1,68 @@
|
||||
/obj/effect/proc_holder/changeling/linglink
|
||||
name = "Hivemind Link"
|
||||
desc = "Link your victim's mind into the hivemind for personal interrogation"
|
||||
chemical_cost = 0
|
||||
dna_cost = 0
|
||||
req_human = 1
|
||||
max_genetic_damage = 100
|
||||
|
||||
/obj/effect/proc_holder/changeling/linglink/can_sting(mob/living/carbon/user)
|
||||
if(!..())
|
||||
return
|
||||
var/datum/changeling/changeling = user.mind.changeling
|
||||
var/obj/item/weapon/grab/G = user.get_active_hand()
|
||||
var/mob/living/carbon/target = G.affecting
|
||||
if(changeling.islinking)
|
||||
user << "<span class='warning'>We have already formed a link with the victim!</span>"
|
||||
return
|
||||
if(!target.mind)
|
||||
user << "<span class='warning'>The victim has no mind to link to!</span>"
|
||||
return
|
||||
if(target.stat == DEAD)
|
||||
user << "<span class='warning'>The victim is dead, you cannot link to a dead mind!</span>"
|
||||
return
|
||||
if(target.mind.changeling)
|
||||
user << "<span class='warning'>The victim is already a part of the hivemind!</span>"
|
||||
return
|
||||
if(!istype(G))
|
||||
user << "<span class='warning'>We must be tightly grabbing a creature in our active hand to link with them!</span>"
|
||||
return
|
||||
if(G.state <= GRAB_NECK)
|
||||
user << "<span class='warning'>We must have a tighter grip to link with this creature!</span>"
|
||||
return
|
||||
return changeling.can_absorb_dna(user,target)
|
||||
|
||||
/obj/effect/proc_holder/changeling/linglink/sting_action(mob/user)
|
||||
var/datum/changeling/changeling = user.mind.changeling
|
||||
var/obj/item/weapon/grab/G = user.get_active_hand()
|
||||
var/mob/living/carbon/human/target = G.affecting
|
||||
changeling.islinking = 1
|
||||
for(var/i in 1 to 3)
|
||||
switch(i)
|
||||
if(1)
|
||||
user << "<span class='notice'>This creature is compatible. We must hold still...</span>"
|
||||
if(2)
|
||||
user << "<span class='notice'>We stealthily stab [target] with a minor proboscis...</span>"
|
||||
target << "<span class='userdanger'>You experience a stabbing sensation and your ears begin to ring...</span>"
|
||||
if(3)
|
||||
user << "<span class='notice'>You mold the [target]'s mind like clay, they can now speak in the hivemind!</span>"
|
||||
target << "<span class='userdanger'>A migraine throbs behind your eyes, you hear yourself screaming - but your mouth has not opened!</span>"
|
||||
for(var/mob/M in mob_list)
|
||||
if(M.lingcheck() == 2)
|
||||
M << "<i><font color=#800080>We can sense a foreign presence in the hivemind...</font></i>"
|
||||
target.mind.linglink = 1
|
||||
target.say(":g AAAAARRRRGGGGGHHHHH!!")
|
||||
target << "<font color=#800040><span class='boldannounce'>You can now communicate in the changeling hivemind, say \":g message\" to communicate!</span>"
|
||||
target.reagents.add_reagent("salbutamol", 40) // So they don't choke to death while you interrogate them
|
||||
sleep(1800)
|
||||
feedback_add_details("changeling_powers","A [i]")
|
||||
if(!do_mob(user, target, 20))
|
||||
user << "<span class='warning'>Our link with [target] has ended!</span>"
|
||||
changeling.islinking = 0
|
||||
target.mind.linglink = 0
|
||||
return
|
||||
|
||||
changeling.islinking = 0
|
||||
target.mind.linglink = 0
|
||||
user << "<span class='notice'>You cannot sustain the connection any longer, your victim fades from the hivemind</span>"
|
||||
target << "<span class='userdanger'>The link cannot be sustained any longer, your connection to the hivemind has faded!</span>"
|
||||
@@ -39,21 +39,21 @@ var/list/department_radio_keys = list(
|
||||
|
||||
//kinda localization -- rastaf0
|
||||
//same keys as above, but on russian keyboard layout. This file uses cp1251 as encoding.
|
||||
":<EFBFBD>" = "right hand", "#<EFBFBD>" = "right hand", ".<EFBFBD>" = "right hand",
|
||||
":<EFBFBD>" = "left hand", "#<EFBFBD>" = "left hand", ".<EFBFBD>" = "left hand",
|
||||
":<EFBFBD>" = "intercom", "#<EFBFBD>" = "intercom", ".<EFBFBD>" = "intercom",
|
||||
":<EFBFBD>" = "department", "#<EFBFBD>" = "department", ".<EFBFBD>" = "department",
|
||||
":<EFBFBD>" = "Command", "#<EFBFBD>" = "Command", ".<EFBFBD>" = "Command",
|
||||
":<EFBFBD>" = "Science", "#<EFBFBD>" = "Science", ".<EFBFBD>" = "Science",
|
||||
":<EFBFBD>" = "Medical", "#<EFBFBD>" = "Medical", ".<EFBFBD>" = "Medical",
|
||||
":<EFBFBD>" = "Engineering", "#<EFBFBD>" = "Engineering", ".<EFBFBD>" = "Engineering",
|
||||
":<EFBFBD>" = "Security", "#<EFBFBD>" = "Security", ".<EFBFBD>" = "Security",
|
||||
":<EFBFBD>" = "whisper", "#<EFBFBD>" = "whisper", ".<EFBFBD>" = "whisper",
|
||||
":<EFBFBD>" = "binary", "#<EFBFBD>" = "binary", ".<EFBFBD>" = "binary",
|
||||
":<EFBFBD>" = "alientalk", "#<EFBFBD>" = "alientalk", ".<EFBFBD>" = "alientalk",
|
||||
":<EFBFBD>" = "Syndicate", "#<EFBFBD>" = "Syndicate", ".<EFBFBD>" = "Syndicate",
|
||||
":<EFBFBD>" = "Supply", "#<EFBFBD>" = "Supply", ".<EFBFBD>" = "Supply",
|
||||
":<EFBFBD>" = "changeling", "#<EFBFBD>" = "changeling", ".<EFBFBD>" = "changeling"
|
||||
":ê" = "right hand", "#ê" = "right hand", ".ê" = "right hand",
|
||||
":ä" = "left hand", "#ä" = "left hand", ".ä" = "left hand",
|
||||
":ø" = "intercom", "#ø" = "intercom", ".ø" = "intercom",
|
||||
":ð" = "department", "#ð" = "department", ".ð" = "department",
|
||||
":ñ" = "Command", "#ñ" = "Command", ".ñ" = "Command",
|
||||
":ò" = "Science", "#ò" = "Science", ".ò" = "Science",
|
||||
":ü" = "Medical", "#ü" = "Medical", ".ü" = "Medical",
|
||||
":ó" = "Engineering", "#ó" = "Engineering", ".ó" = "Engineering",
|
||||
":û" = "Security", "#û" = "Security", ".û" = "Security",
|
||||
":ö" = "whisper", "#ö" = "whisper", ".ö" = "whisper",
|
||||
":è" = "binary", "#è" = "binary", ".è" = "binary",
|
||||
":ô" = "alientalk", "#ô" = "alientalk", ".ô" = "alientalk",
|
||||
":å" = "Syndicate", "#å" = "Syndicate", ".å" = "Syndicate",
|
||||
":é" = "Supply", "#é" = "Supply", ".é" = "Supply",
|
||||
":ï" = "changeling", "#ï" = "changeling", ".ï" = "changeling"
|
||||
)
|
||||
|
||||
var/list/crit_allowed_modes = list(MODE_WHISPER,MODE_CHANGELING,MODE_ALIEN)
|
||||
@@ -205,6 +205,21 @@ var/list/crit_allowed_modes = list(MODE_WHISPER,MODE_CHANGELING,MODE_ALIEN)
|
||||
/mob/living/proc/handle_inherent_channels(message, message_mode)
|
||||
if(message_mode == MODE_CHANGELING)
|
||||
switch(lingcheck())
|
||||
if(3)
|
||||
var/msg = "<i><font color=#800040><b>[src.mind]:</b> [message]</font></i>"
|
||||
for(var/mob/M in mob_list)
|
||||
if(M in dead_mob_list)
|
||||
M << "<a href='?src=\ref[M];follow=\ref[src]'>(F)</a> [msg]"
|
||||
else
|
||||
switch(M.lingcheck())
|
||||
if(3)
|
||||
M << msg
|
||||
if(2)
|
||||
M << msg
|
||||
if(1)
|
||||
if(prob(40))
|
||||
M << "<i><font color=#800080>We can faintly sense an outsider trying to communicate through the hivemind...</font></i>"
|
||||
return 1
|
||||
if(2)
|
||||
var/msg = "<i><font color=#800080><b>[mind.changeling.changelingID]:</b> [message]</font></i>"
|
||||
log_say("[mind.changeling.changelingID]/[src.key] : [message]")
|
||||
@@ -213,6 +228,8 @@ var/list/crit_allowed_modes = list(MODE_WHISPER,MODE_CHANGELING,MODE_ALIEN)
|
||||
M << "<a href='?src=\ref[M];follow=\ref[src]'>(F)</a> [msg]"
|
||||
else
|
||||
switch(M.lingcheck())
|
||||
if(3)
|
||||
M << msg
|
||||
if(2)
|
||||
M << msg
|
||||
if(1)
|
||||
@@ -272,11 +289,13 @@ var/list/crit_allowed_modes = list(MODE_WHISPER,MODE_CHANGELING,MODE_ALIEN)
|
||||
return NOPASS
|
||||
return 0
|
||||
|
||||
/mob/living/lingcheck() //Returns 1 if they are a changeling. Returns 2 if they are a changeling that can communicate through the hivemind
|
||||
/mob/living/lingcheck() //1 is ling w/ no hivemind. 2 is ling w/hivemind. 3 is ling victim being linked into hivemind.
|
||||
if(mind && mind.changeling)
|
||||
if(mind.changeling.changeling_speak)
|
||||
return 2
|
||||
return 1
|
||||
if(mind && mind.linglink)
|
||||
return 3
|
||||
return 0
|
||||
|
||||
/mob/living/say_quote(input, list/spans)
|
||||
@@ -285,4 +304,4 @@ var/list/crit_allowed_modes = list(MODE_WHISPER,MODE_CHANGELING,MODE_ALIEN)
|
||||
return "stammers, \"[tempinput]\""
|
||||
if (getBrainLoss() >= 60)
|
||||
return "gibbers, \"[tempinput]\""
|
||||
return ..()
|
||||
return ..()
|
||||
|
||||
@@ -297,6 +297,7 @@
|
||||
#include "code\game\gamemodes\changeling\powers\hivemind.dm"
|
||||
#include "code\game\gamemodes\changeling\powers\humanform.dm"
|
||||
#include "code\game\gamemodes\changeling\powers\lesserform.dm"
|
||||
#include "code\game\gamemodes\changeling\powers\linglink.dm"
|
||||
#include "code\game\gamemodes\changeling\powers\mimic_voice.dm"
|
||||
#include "code\game\gamemodes\changeling\powers\mutations.dm"
|
||||
#include "code\game\gamemodes\changeling\powers\panacea.dm"
|
||||
|
||||
Reference in New Issue
Block a user