diff --git a/code/datums/mind.dm b/code/datums/mind.dm
index fcf1ded97cc..be744b53c34 100644
--- a/code/datums/mind.dm
+++ b/code/datums/mind.dm
@@ -56,6 +56,7 @@
var/miming = 0 // Mime's vow of silence
var/datum/faction/faction //associated faction
var/datum/changeling/changeling //changeling holder
+ var/linglink
var/datum/vampire/vampire //vampire holder
var/datum/nations/nation //nation holder
var/datum/abductor/abductor //abductor holder
@@ -149,7 +150,7 @@
)
var/text = ""
var/mob/living/carbon/human/H = current
- if(istype(current, /mob/living/carbon/human))
+ if(ishuman(current))
/** Impanted**/
if(isloyal(H))
text = "Mindshield Implant:Remove|Implanted"
@@ -369,7 +370,7 @@
/** SILICON ***/
- if(istype(current, /mob/living/silicon))
+ if(issilicon(current))
text = "silicon"
var/mob/living/silicon/robot/robot = current
if(istype(robot) && robot.emagged)
@@ -409,7 +410,7 @@
if(((src in ticker.mode.head_revolutionaries) || \
(src in ticker.mode.traitors) || \
(src in ticker.mode.syndicates)) && \
- istype(current,/mob/living/carbon/human) )
+ ishuman(current) )
text = "Uplink: give"
var/obj/item/device/uplink/hidden/suplink = find_syndicate_uplink()
@@ -445,18 +446,21 @@
usr << browse(out, "window=edit_memory[src];size=400x500")
/datum/mind/Topic(href, href_list)
- if(!check_rights(R_ADMIN)) return
+ if(!check_rights(R_ADMIN))
+ return
if(href_list["role_edit"])
var/new_role = input("Select new role", "Assigned role", assigned_role) as null|anything in joblist
- if(!new_role) return
+ if(!new_role)
+ return
assigned_role = new_role
log_admin("[key_name(usr)] has changed [key_name(current)]'s assigned role to [assigned_role]")
message_admins("[key_name_admin(usr)] has changed [key_name_admin(current)]'s assigned role to [assigned_role]")
else if(href_list["memory_edit"])
var/new_memo = copytext(input("Write new memory", "Memory", memory) as null|message,1,MAX_MESSAGE_LEN)
- if(isnull(new_memo)) return
+ if(isnull(new_memo))
+ return
memory = new_memo
log_admin("[key_name(usr)] has edited [key_name(current)]'s memory")
message_admins("[key_name_admin(usr)] has edited [key_name_admin(current)]'s memory")
@@ -468,7 +472,8 @@
if(href_list["obj_edit"])
objective = locate(href_list["obj_edit"])
- if(!objective) return
+ if(!objective)
+ return
objective_pos = objectives.Find(objective)
//Text strings are easy to manipulate. Revised for simplicity.
@@ -478,7 +483,8 @@
def_value = "custom"
var/new_obj_type = input("Select objective type:", "Objective type", def_value) as null|anything in list("assassinate", "blood", "debrain", "protect", "prevent", "brig", "hijack", "escape", "survive", "steal", "download", "nuclear", "capture", "absorb", "destroy", "maroon", "identity theft", "custom")
- if(!new_obj_type) return
+ if(!new_obj_type)
+ return
var/datum/objective/new_objective = null
@@ -500,7 +506,8 @@
def_target = objective:target.current
var/new_target = input("Select target:", "Objective target", def_target) as null|anything in possible_targets
- if(!new_target) return
+ if(!new_target)
+ return
var/objective_path = text2path("/datum/objective/[new_obj_type]")
if(new_target == "Free objective")
@@ -588,7 +595,7 @@
if("identity theft")
var/list/possible_targets = list("Free objective")
for(var/datum/mind/possible_target in ticker.minds)
- if((possible_target != src) && istype(possible_target.current, /mob/living/carbon/human))
+ if((possible_target != src) && ishuman(possible_target.current))
possible_targets += possible_target
var/new_target = input("Select target:", "Objective target") as null|anything in possible_targets
@@ -604,12 +611,14 @@
new_objective.explanation_text = "Escape on the shuttle or an escape pod with the identity of [targ.current.real_name], the [targ.assigned_role] while wearing their identification card."
if("custom")
var/expl = sanitize(copytext(input("Custom objective:", "Objective", objective ? objective.explanation_text : "") as text|null,1,MAX_MESSAGE_LEN))
- if(!expl) return
+ if(!expl)
+ return
new_objective = new /datum/objective
new_objective.owner = src
new_objective.explanation_text = expl
- if(!new_objective) return
+ if(!new_objective)
+ return
if(objective)
objectives -= objective
@@ -622,7 +631,8 @@
else if(href_list["obj_delete"])
var/datum/objective/objective = locate(href_list["obj_delete"])
- if(!istype(objective)) return
+ if(!istype(objective))
+ return
objectives -= objective
log_admin("[key_name(usr)] has removed one of [key_name(current)]'s objectives: [objective]")
@@ -630,7 +640,8 @@
else if(href_list["obj_completed"])
var/datum/objective/objective = locate(href_list["obj_completed"])
- if(!istype(objective)) return
+ if(!istype(objective))
+ return
objective.completed = !objective.completed
log_admin("[key_name(usr)] has toggled the completion of one of [key_name(current)]'s objectives")
@@ -893,7 +904,7 @@
message_admins("[key_name_admin(usr)] has automatically forged objectives for [key_name_admin(current)]")
if("initialdna")
- if( !changeling || !changeling.absorbed_dna.len )
+ if(!changeling || !changeling.absorbed_dna.len)
to_chat(usr, "\red Resetting DNA failed!")
else
current.dna = changeling.absorbed_dna[1]
@@ -924,7 +935,7 @@
ticker.mode.update_vampire_icons_added(src)
var/datum/mindslaves/slaved = new()
slaved.masters += src
- src.som = slaved //we MIGT want to mindslave someone
+ som = slaved //we MIGT want to mindslave someone
special_role = SPECIAL_ROLE_VAMPIRE
to_chat(current, "Your powers are awoken. Your lust for blood grows... You are a Vampire!")
log_admin("[key_name(usr)] has vampired [key_name(current)]")
@@ -1033,7 +1044,7 @@
ticker.mode.traitors += src
var/datum/mindslaves/slaved = new()
slaved.masters += src
- src.som = slaved //we MIGT want to mindslave someone
+ som = slaved //we MIGT want to mindslave someone
special_role = SPECIAL_ROLE_TRAITOR
to_chat(current, "You are a traitor!")
log_admin("[key_name(usr)] has traitored [key_name(current)]")
@@ -1130,7 +1141,7 @@
message_admins("[key_name_admin(usr)] has un-emagged [key_name_admin(current)]")
if("unemagcyborgs")
- if(istype(current, /mob/living/silicon/ai))
+ if(isAI(current))
var/mob/living/silicon/ai/ai = current
for(var/mob/living/silicon/robot/R in ai.connected_robots)
R.emagged = 0
@@ -1324,7 +1335,7 @@
var/explanation = "Summon [ticker.mode.cultdat.entity_name] via the use of the appropriate rune. It will only work if nine cultists stand on and around it."
to_chat(current, "Objective #1: [explanation]")
current.memory += "Objective #1: [explanation]
"
-
+
var/mob/living/carbon/human/H = current
if(istype(H))
@@ -1453,13 +1464,13 @@
qdel(S)
spell_list -= S
-/datum/mind/proc/transfer_actions(var/mob/living/new_character)
+/datum/mind/proc/transfer_actions(mob/living/new_character)
if(current && current.actions)
for(var/datum/action/A in current.actions)
A.Grant(new_character)
transfer_mindbound_actions(new_character)
-/datum/mind/proc/transfer_mindbound_actions(var/mob/living/new_character)
+/datum/mind/proc/transfer_mindbound_actions(mob/living/new_character)
for(var/X in spell_list)
var/obj/effect/proc_holder/spell/S = X
S.action.Grant(new_character)
@@ -1553,13 +1564,15 @@
ticker.minds += mind
else
error("mind_initialize(): No ticker ready yet! Please inform Carn")
- if(!mind.name) mind.name = real_name
+ if(!mind.name)
+ mind.name = real_name
mind.current = src
//HUMAN
/mob/living/carbon/human/mind_initialize()
..()
- if(!mind.assigned_role) mind.assigned_role = "Civilian" //defualt
+ if(!mind.assigned_role)
+ mind.assigned_role = "Civilian" //defualt
/mob/proc/sync_mind()
mind_initialize() //updates the mind (or creates and initializes one if one doesn't exist)
diff --git a/code/game/gamemodes/changeling/changeling.dm b/code/game/gamemodes/changeling/changeling.dm
index c25802d38fc..1e67760322c 100644
--- a/code/game/gamemodes/changeling/changeling.dm
+++ b/code/game/gamemodes/changeling/changeling.dm
@@ -3,7 +3,6 @@ var/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","Epsilon"
/datum/game_mode
var/list/datum/mind/changelings = list()
-
/datum/game_mode/changeling
name = "changeling"
config_tag = "changeling"
@@ -38,7 +37,6 @@ var/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","Epsilon"
to_chat(world, "There are alien changelings on the station. Do not let the changelings succeed!")
/datum/game_mode/changeling/pre_setup()
-
if(config.protect_roles_from_antagonist)
restricted_jobs += protected_jobs
@@ -69,8 +67,7 @@ var/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","Epsilon"
..()
-
-/datum/game_mode/proc/forge_changeling_objectives(var/datum/mind/changeling)
+/datum/game_mode/proc/forge_changeling_objectives(datum/mind/changeling)
//OBJECTIVES - Always absorb 5 genomes, plus random traitor objectives.
//If they have two objectives as well as absorb, they must survive rather than escape
//No escape alone because changelings aren't suited for it and it'd probably just lead to rampant robusting
@@ -129,7 +126,7 @@ var/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","Epsilon"
changeling.objectives += identity_theft
return
-/datum/game_mode/proc/greet_changeling(var/datum/mind/changeling, var/you_are=1)
+/datum/game_mode/proc/greet_changeling(datum/mind/changeling, you_are=1)
if(you_are)
to_chat(changeling.current, "You are a changeling!")
to_chat(changeling.current, "Use say \":g message\" to communicate with your fellow changelings. Remember: you get all of their absorbed DNA if you absorb them.")
@@ -145,8 +142,6 @@ var/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","Epsilon"
obj_count++
return
-
-
/datum/game_mode/proc/remove_changeling(datum/mind/changeling_mind)
if(changeling_mind in changelings)
changelings -= changeling_mind
@@ -171,7 +166,8 @@ var/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","Epsilon"
set_antag_hud(changeling.current, null)
/datum/game_mode/proc/grant_changeling_powers(mob/living/carbon/changeling_mob)
- if(!istype(changeling_mob)) return
+ if(!istype(changeling_mob))
+ return
changeling_mob.make_changeling()
/datum/game_mode/proc/auto_declare_completion_changeling()
@@ -218,7 +214,6 @@ var/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","Epsilon"
to_chat(world, text)
-
return 1
/datum/changeling //stores changeling powers, changeling recharge thingie, changeling absorbed DNA and changeling ID (for changeling hivemind)
@@ -235,6 +230,7 @@ var/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","Epsilon"
var/changelingID = "Changeling"
var/geneticdamage = 0
var/isabsorbing = 0
+ var/islinking = 0
var/geneticpoints = 10
var/purchasedpowers = list()
var/mimicing = ""
@@ -243,11 +239,13 @@ var/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","Epsilon"
var/datum/dna/chosen_dna
var/obj/effect/proc_holder/changeling/sting/chosen_sting
-/datum/changeling/New(var/gender=FEMALE)
+/datum/changeling/New(gender=FEMALE)
..()
var/honorific
- if(gender == FEMALE) honorific = "Ms."
- else honorific = "Mr."
+ if(gender == FEMALE)
+ honorific = "Ms."
+ else
+ honorific = "Mr."
if(possible_changeling_IDs.len)
changelingID = pick(possible_changeling_IDs)
possible_changeling_IDs -= changelingID
@@ -259,25 +257,24 @@ var/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","Epsilon"
chem_charges = min(max(0, chem_charges + chem_recharge_rate - chem_recharge_slowdown), chem_storage)
geneticdamage = max(0, geneticdamage-1)
-
-/datum/changeling/proc/GetDNA(var/dna_owner)
+/datum/changeling/proc/GetDNA(dna_owner)
for(var/datum/dna/DNA in (absorbed_dna + protected_dna))
if(dna_owner == DNA.real_name)
return DNA
-/datum/changeling/proc/find_dna(var/datum/dna/tDNA)
+/datum/changeling/proc/find_dna(datum/dna/tDNA)
for(var/datum/dna/D in (absorbed_dna + protected_dna))
if(tDNA.unique_enzymes == D.unique_enzymes && tDNA.uni_identity == D.uni_identity && tDNA.species == D.species)
return D
return null
-/datum/changeling/proc/has_dna(var/datum/dna/tDNA)
+/datum/changeling/proc/has_dna(datum/dna/tDNA)
if(find_dna(tDNA))
return 1
return 0
// A changeling's DNA is "stale" if their current form's DNA is the oldest DNA in a full list
-/datum/changeling/proc/using_stale_dna(var/mob/living/carbon/user)
+/datum/changeling/proc/using_stale_dna(mob/living/carbon/user)
var/current_dna = find_dna(user.dna)
if(absorbed_dna.len < dna_max)
return 0 // Still more room for DNA
@@ -292,7 +289,7 @@ var/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","Epsilon"
if(absorbed_dna.len > dna_max)
absorbed_dna.Cut(1, (absorbed_dna.len - dna_max) + 1)
-/datum/changeling/proc/can_absorb_dna(var/mob/living/carbon/user, var/mob/living/carbon/target)
+/datum/changeling/proc/can_absorb_dna(mob/living/carbon/user, mob/living/carbon/target)
if(using_stale_dna(user))//If our current DNA is the stalest, we gotta ditch it.
to_chat(user, "We have reached our capacity to store genetic information! We must transform before absorbing more.")
return
diff --git a/code/game/gamemodes/changeling/powers/linglink.dm b/code/game/gamemodes/changeling/powers/linglink.dm
new file mode 100644
index 00000000000..7c198f5e6af
--- /dev/null
+++ b/code/game/gamemodes/changeling/powers/linglink.dm
@@ -0,0 +1,73 @@
+/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()
+
+ if(changeling.islinking)
+ to_chat(user, "We have already formed a link with the victim!")
+ return
+ if(!istype(G))
+ to_chat(user, "We must be tightly grabbing a creature in our active hand to link with them!")
+ return
+ if(G.state <= GRAB_AGGRESSIVE)
+ to_chat(user, "We must have a tighter grip to link with this creature!")
+ return
+ if(iscarbon(G.affecting))
+ var/mob/living/carbon/target = G.affecting
+ if(!target.mind)
+ to_chat(user, "The victim has no mind to link to!")
+ return
+ if(target.stat == DEAD)
+ to_chat(user, "The victim is dead, you cannot link to a dead mind!")
+ return
+ if(target.mind.changeling)
+ to_chat(user, "The victim is already a part of the hivemind!")
+ 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/target = G.affecting
+ changeling.islinking = 1
+ for(var/stage = 1, stage<=3, stage++)
+ switch(stage)
+ if(1)
+ to_chat(user, "This creature is compatible. We must hold still...")
+ if(2)
+ to_chat(user, "We stealthily stab [target] with a minor proboscis...")
+ to_chat(target, "You experience a stabbing sensation and your ears begin to ring...")
+ if(3)
+ to_chat(user, "You mold the [target]'s mind like clay, they can now speak in the hivemind!")
+ to_chat(target, "A migraine throbs behind your eyes, you hear yourself screaming - but your mouth has not opened!")
+ for(var/mob/M in mob_list)
+ if(all_languages["Changeling"] in M.languages)
+ to_chat(M, "We can sense a foreign presence in the hivemind...")
+ target.mind.linglink = 1
+ target.add_language("Changeling")
+ target.say(":g AAAAARRRRGGGGGHHHHH!!")
+ to_chat(target, "You can now communicate in the changeling hivemind, say \":g message\" to communicate!")
+ 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[stage]")
+ if(!do_mob(user, target, 20))
+ to_chat(user, "Our link with [target] has ended!")
+ target.remove_language("Changeling")
+ changeling.islinking = 0
+ target.mind.linglink = 0
+ return
+
+ target.remove_language("Changeling")
+ changeling.islinking = 0
+ target.mind.linglink = 0
+ to_chat(user, "You cannot sustain the connection any longer, your victim fades from the hivemind")
+ to_chat(target, "The link cannot be sustained any longer, your connection to the hivemind has faded!")
diff --git a/code/modules/mob/language.dm b/code/modules/mob/language.dm
index be101742dfa..2b495f02062 100644
--- a/code/modules/mob/language.dm
+++ b/code/modules/mob/language.dm
@@ -22,7 +22,7 @@
var/english_names = 0 // Do we want English names by default, no matter what?
var/list/scramble_cache = list()
-/datum/language/proc/get_random_name(var/gender, name_count=2, syllable_count=4)
+/datum/language/proc/get_random_name(gender, name_count=2, syllable_count=4)
if(!syllables || !syllables.len || english_names)
if(gender==FEMALE)
return capitalize(pick(first_names_female)) + " " + capitalize(pick(last_names))
@@ -40,7 +40,7 @@
return "[trim(full_name)]"
-/datum/language/proc/scramble(var/input)
+/datum/language/proc/scramble(input)
if(!syllables || !syllables.len)
return stars(input)
@@ -95,10 +95,11 @@
// if you yell, you'll be heard from two tiles over instead of one
return (copytext(message, length(message)) == "!") ? 2 : 1
-/datum/language/proc/broadcast(var/mob/living/speaker,var/message,var/speaker_mask)
+/datum/language/proc/broadcast(mob/living/speaker, message, speaker_mask)
log_say("[key_name(speaker)]: ([name]) [message]")
- if(!speaker_mask) speaker_mask = speaker.name
+ if(!speaker_mask)
+ speaker_mask = speaker.name
var/msg = "[name], [speaker_mask] [format_message(message, get_spoken_verb(message))]"
for(var/mob/player in player_list)
@@ -110,10 +111,10 @@
else if(istype(player,/mob/dead) || ((src in player.languages) && check_special_condition(player, speaker)))
to_chat(player, msg)
-/datum/language/proc/check_special_condition(var/mob/other, var/mob/living/speaker)
- return 1
+/datum/language/proc/check_special_condition(mob/other, mob/living/speaker)
+ return TRUE
-/datum/language/proc/get_spoken_verb(var/msg_end)
+/datum/language/proc/get_spoken_verb(msg_end)
switch(msg_end)
if("!")
return exclaim_verb
@@ -170,8 +171,7 @@
"ka","aasi","far","wa","baq","ara","qara","zir","sam","mak","hrar","nja","rir","khan","jun","dar","rik","kah", \
"hal","ket","jurl","mah","tul","cresh","azu","ragh")
-/datum/language/tajaran/get_random_name(var/gender)
-
+/datum/language/tajaran/get_random_name(gender)
var/new_name = ..(gender,1)
if(prob(80))
new_name += " [pick(list("Hadii","Kaytam","Zhan-Khazan","Hharar","Njarir'Akhan"))]"
@@ -286,13 +286,13 @@
key = "^"
flags = RESTRICTED | HIVEMIND
-/datum/language/grey/broadcast(var/mob/living/speaker,var/message,var/speaker_mask)
+/datum/language/grey/broadcast(mob/living/speaker, message, speaker_mask)
..(speaker,message,speaker.real_name)
-/datum/language/grey/check_special_condition(var/mob/living/carbon/human/other, var/mob/living/carbon/human/speaker)
+/datum/language/grey/check_special_condition(mob/living/carbon/human/other, mob/living/carbon/human/speaker)
if(other in range(7, speaker))
- return 1
- return 0
+ return TRUE
+ return FALSE
/datum/language/drask
name = "Orluum"
@@ -322,7 +322,7 @@
english_names = 1
//TODO flag certain languages to use the mob-type specific say_quote and then get rid of these.
-/datum/language/common/get_spoken_verb(var/msg_end)
+/datum/language/common/get_spoken_verb(msg_end)
switch(msg_end)
if("!")
return pick("exclaims","shouts","yells") //TODO: make the basic proc handle lists of verbs.
@@ -341,7 +341,7 @@
syllables = list("tao","shi","tzu","yi","com","be","is","i","op","vi","ed","lec","mo","cle","te","dis","e")
english_names = 1
-/datum/language/human/get_spoken_verb(var/msg_end)
+/datum/language/human/get_spoken_verb(msg_end)
switch(msg_end)
if("!")
return pick("exclaims","shouts","yells") //TODO: make the basic proc handle lists of verbs.
@@ -396,15 +396,14 @@
key = "y"
flags = RESTRICTED | HIVEMIND
-/datum/language/wryn/check_special_condition(var/mob/other)
-
+/datum/language/wryn/check_special_condition(mob/other)
var/mob/living/carbon/M = other
if(!istype(M))
- return 1
+ return TRUE
if(locate(/obj/item/organ/internal/wryn/hivenode) in M.internal_organs)
- return 1
+ return TRUE
- return 0
+ return FALSE
/datum/language/xenocommon
name = "Xenomorph"
@@ -428,7 +427,6 @@
flags = RESTRICTED | HIVEMIND
follow = 1
-
/datum/language/terrorspider
name = "Spider Hivemind"
desc = "Terror spiders have a limited ability to commune over a psychic hivemind, similar to xenomorphs."
@@ -440,7 +438,6 @@
flags = RESTRICTED | HIVEMIND
follow = 1
-
/datum/language/ling
name = "Changeling"
desc = "Although they are normally wary and suspicious of each other, changelings can commune over a distance."
@@ -449,6 +446,14 @@
key = "g"
flags = RESTRICTED | HIVEMIND
+/datum/language/ling/broadcast(mob/living/speaker, message, speaker_mask)
+ if(speaker.mind && speaker.mind.changeling)
+ ..(speaker,message,speaker.mind.changeling.changelingID)
+ else if(speaker.mind && speaker.mind.linglink)
+ ..()
+ else
+ ..(speaker,message)
+
/datum/language/shadowling
name = "Shadowling Hivemind"
desc = "Shadowlings and their thralls are capable of communicating over a psychic hivemind."
@@ -457,20 +462,12 @@
key = "8"
flags = RESTRICTED | HIVEMIND
-
-/datum/language/shadowling/broadcast(var/mob/living/speaker, var/message, var/speaker_mask)
+/datum/language/shadowling/broadcast(mob/living/speaker, message, speaker_mask)
if(speaker.mind && speaker.mind.special_role)
..(speaker, message, "([speaker.mind.special_role]) [speaker]")
else
..(speaker, message)
-/datum/language/ling/broadcast(var/mob/living/speaker,var/message,var/speaker_mask)
-
- if(speaker.mind && speaker.mind.changeling)
- ..(speaker,message,speaker.mind.changeling.changelingID)
- else
- ..(speaker,message)
-
/datum/language/abductor
name = "Abductor Mindlink"
desc = "Abductors are incapable of speech, but have a psychic link attuned to their own team."
@@ -481,14 +478,14 @@
key = "zw" //doesn't matter, this is their default and only language
flags = RESTRICTED | HIVEMIND
-/datum/language/abductor/broadcast(var/mob/living/speaker,var/message,var/speaker_mask)
+/datum/language/abductor/broadcast(mob/living/speaker, message, speaker_mask)
..(speaker,message,speaker.real_name)
-/datum/language/abductor/check_special_condition(var/mob/living/carbon/human/other, var/mob/living/carbon/human/speaker)
+/datum/language/abductor/check_special_condition(mob/living/carbon/human/other, mob/living/carbon/human/speaker)
if(other.mind && other.mind.abductor)
if(other.mind.abductor.team == speaker.mind.abductor.team)
- return 1
- return 0
+ return TRUE
+ return FALSE
/datum/language/corticalborer
name = "Cortical Link"
@@ -500,11 +497,11 @@
key = "x"
flags = RESTRICTED | HIVEMIND
-/datum/language/corticalborer/broadcast(var/mob/living/speaker,var/message,var/speaker_mask)
+/datum/language/corticalborer/broadcast(mob/living/speaker, message, speaker_mask)
var/mob/living/simple_animal/borer/B
- if(istype(speaker,/mob/living/carbon))
+ if(iscarbon(speaker))
var/mob/living/carbon/M = speaker
B = M.has_brain_worms()
else if(istype(speaker,/mob/living/simple_animal/borer))
@@ -526,7 +523,7 @@
follow = 1
var/drone_only
-/datum/language/binary/broadcast(var/mob/living/speaker,var/message,var/speaker_mask)
+/datum/language/binary/broadcast(mob/living/speaker, message, speaker_mask)
if(!speaker.binarycheck())
return
@@ -538,15 +535,14 @@
var/message_body = "[speaker.say_quote(message)], \"[message]\""
for(var/mob/M in dead_mob_list)
- if(!istype(M,/mob/new_player) && !istype(M,/mob/living/carbon/brain))
+ if(!isnewplayer(M) && !isbrain(M))
var/message_start_dead = "[name], [speaker.name] ([ghost_follow_link(speaker, ghost=M)])"
M.show_message("[message_start_dead] [message_body]", 2)
for(var/mob/living/S in living_mob_list)
-
if(drone_only && !istype(S,/mob/living/silicon/robot/drone))
continue
- else if(istype(S , /mob/living/silicon/ai))
+ else if(isAI(S))
message_start = "[name], [speaker.name]"
else if(!S.binarycheck())
continue
@@ -557,7 +553,7 @@
listening -= src
for(var/mob/living/M in listening)
- if(istype(M, /mob/living/silicon) || M.binarycheck())
+ if(issilicon(M) || M.binarycheck())
continue
M.show_message("synthesised voice beeps, \"beep beep beep\"",2)
@@ -596,17 +592,17 @@
follow = 1
// Language handling.
-/mob/proc/add_language(var/language)
+/mob/proc/add_language(language)
var/datum/language/new_language = all_languages[language]
if(!istype(new_language) || new_language in languages)
- return 0
+ return FALSE
languages |= new_language
- return 1
+ return TRUE
-/mob/proc/remove_language(var/rem_language)
+/mob/proc/remove_language(rem_language)
var/datum/language/L = all_languages[rem_language]
. = (L in languages)
languages.Remove(L)
@@ -620,7 +616,7 @@
// Can we speak this language, as opposed to just understanding it?
/mob/proc/can_speak_language(datum/language/speaking)
- return (universal_speak || (speaking && speaking.flags & INNATE) || speaking in src.languages)
+ return (universal_speak || (speaking && speaking.flags & INNATE) || speaking in languages)
//TBD
/mob/verb/check_languages()
@@ -661,7 +657,7 @@
if(L)
set_default_language(L)
check_languages()
- return 1
+ return TRUE
else
return ..()
diff --git a/paradise.dme b/paradise.dme
index 0f9fa26434c..d18c2677d51 100644
--- a/paradise.dme
+++ b/paradise.dme
@@ -397,6 +397,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"