diff --git a/code/datums/mind.dm b/code/datums/mind.dm
index 40032ae5fef..829551b9fcc 100644
--- a/code/datums/mind.dm
+++ b/code/datums/mind.dm
@@ -976,9 +976,17 @@ datum/mind
log_admin("[key_name(usr)] has de-shadowling'ed [current].")
current.verbs -= /mob/living/carbon/human/proc/shadowling_hatch
current.verbs -= /mob/living/carbon/human/proc/shadowling_ascendance
+ if(current.languages)
+ for(var/datum/language/L in current.languages)
+ if(L.name == "Shadowling Hivemind")
+ del(L)
else if(src in ticker.mode.shadowling_thralls)
ticker.mode.shadowling_thralls -= src
special_role = null
+ if(current.languages)
+ for(var/datum/language/L in current.languages)
+ if(L.name == "Shadowling Hivemind")
+ del(L)
current << "You have been brainwashed! You are no longer a thrall!"
message_admins("[key_name_admin(usr)] has de-thrall'ed [current].")
log_admin("[key_name(usr)] has de-thrall'ed [current].")
diff --git a/code/game/gamemodes/shadowling/shadowling.dm b/code/game/gamemodes/shadowling/shadowling.dm
index 3def17f9c6e..bc2e69fda84 100644
--- a/code/game/gamemodes/shadowling/shadowling.dm
+++ b/code/game/gamemodes/shadowling/shadowling.dm
@@ -63,9 +63,9 @@ Made by Xhuis
/datum/game_mode/shadowling
name = "shadowling"
config_tag = "shadowling"
- required_players = 30
- required_enemies = 2
- recommended_enemies = 2
+ required_players = 1
+ required_enemies = 1
+ recommended_enemies = 1
restricted_jobs = list("AI", "Cyborg")
protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain")
@@ -87,7 +87,7 @@ Made by Xhuis
if(player.assigned_role == job)
possible_shadowlings -= player
- var/shadowlings = 2 //How many shadowlings there are; hardcoded to 2
+ var/shadowlings = 1 //How many shadowlings there are; hardcoded to 2
while(shadowlings)
var/datum/mind/shadow = pick(possible_shadowlings)
@@ -114,9 +114,9 @@ Made by Xhuis
/datum/game_mode/proc/greet_shadow(var/datum/mind/shadow)
shadow.current << "Currently, you are disguised as an employee aboard [world.name]."
- shadow.current << "In your limited state, you have three abilities: Enthrall, Hatch, and Hivemind Commune."
- shadow.current << "Any other shadowlings are you allies. You must assist them as they shall assist you."
- shadow.current << "If you are new to shadowling, or want to read about abilities, check the wiki page at https://tgstation13.org/wiki/Shadowling
"
+ shadow.current << "In your limited state, you have three abilities: Enthrall, Hatch, and Shadowling Hivemind (:8)."
+ shadow.current << "Any other shadowlings are your allies. You must assist them as they shall assist you."
+ shadow.current << "If you are new to shadowling, or want to read about abilities, check the wiki page at http://nanotrasen.se/wiki/index.php/Shadowling
"
/datum/game_mode/proc/process_shadow_objectives(var/datum/mind/shadow_mind)
@@ -134,7 +134,7 @@ Made by Xhuis
shadow_mind.current.verbs += /mob/living/carbon/human/proc/shadowling_hatch
S.spell_list += new /obj/effect/proc_holder/spell/wizard/targeted/enthrall
spawn(0)
- shadow_mind.current.spell_list += new /obj/effect/proc_holder/spell/wizard/targeted/shadowling_hivemind
+ shadow_mind.current.add_language("Shadowling Hivemind")
update_shadow_icons_added(shadow_mind)
if(shadow_mind.assigned_role == "Clown")
S << "Your alien nature has allowed you to overcome your clownishness."
@@ -151,7 +151,7 @@ Made by Xhuis
This may only be used with [required_thralls] collective thralls, while hatched, and is unlocked with the Collective Mind ability."
new_thrall_mind.current << "The objectives of your shadowlings:: Ascend to your true form by use of the Ascendance ability. \
This may only be used with [required_thralls] collective thralls, while hatched, and is unlocked with the Collective Mind ability."
- new_thrall_mind.current.spell_list += new /obj/effect/proc_holder/spell/wizard/targeted/shadowling_hivemind
+ new_thrall_mind.current.add_language("Shadowling Hivemind")
return 1
@@ -250,9 +250,9 @@ Made by Xhuis
/datum/game_mode/proc/update_shadow_icons_added(datum/mind/shadow_mind)
spawn(0)
for(var/datum/mind/shadowling in shadows)
- if(shadowling.current)
+ if(shadowling.current && shadowling != shadow_mind)
if(shadowling.current.client)
- var/I = image('icons/mob/mob.dmi', loc = shadowling.current, icon_state = "shadowling")
+ var/I = image('icons/mob/mob.dmi', loc = shadow_mind.current, icon_state = "thrall")
shadowling.current.client.images += I
if(shadow_mind.current)
if(shadow_mind.current.client)
@@ -261,7 +261,7 @@ Made by Xhuis
for(var/datum/mind/thrall in shadowling_thralls)
if(thrall.current)
if(thrall.current.client)
- var/I = image('icons/mob/mob.dmi', loc = thrall.current, icon_state = "thrall")
+ var/I = image('icons/mob/mob.dmi', loc = shadow_mind.current, icon_state = "thrall")
thrall.current.client.images += I
if(shadow_mind.current)
if(shadow_mind.current.client)
diff --git a/code/game/gamemodes/shadowling/shadowling_abilities.dm b/code/game/gamemodes/shadowling/shadowling_abilities.dm
index f7bfdc5e738..3260d8e5245 100644
--- a/code/game/gamemodes/shadowling/shadowling_abilities.dm
+++ b/code/game/gamemodes/shadowling/shadowling_abilities.dm
@@ -213,27 +213,6 @@
ticker.mode.add_thrall(target.mind)
target.mind.special_role = "Thrall"
-
-/obj/effect/proc_holder/spell/wizard/targeted/shadowling_hivemind
- name = "Hivemind Commune"
- desc = "Allows you to silently communicate with all other shadowlings and thralls."
- panel = "Shadowling Abilities"
- charge_max = 25
- clothes_req = 0
- range = -1
- include_user = 1
-
-/obj/effect/proc_holder/spell/wizard/targeted/shadowling_hivemind/cast(list/targets)
- for(var/mob/living/user in targets)
- var/text = stripped_input(user, "What do you want to say to fellow thralls and shadowlings?.", "Hive Chat", "")
- if(!text)
- return
- for(var/mob/M in mob_list)
- if(is_shadow_or_thrall(M) || (M in dead_mob_list))
- M << "\[Hive Chat\] [usr.real_name]: [text]"
-
-
-
/obj/effect/proc_holder/spell/wizard/targeted/collective_mind
name = "Collective Hivemind"
desc = "Gathers the power of all of your thralls and compares it to what is needed for ascendance. Also gains you new abilities."
@@ -529,10 +508,10 @@ datum/reagent/shadowling_blindness_smoke/on_mob_life(var/mob/living/M as mob)
target << "And you see the Truth. Reality has been torn away and you realize what a fool you've been."
target << "The shadowlings are your masters. Serve them above all else and ensure they complete their goals."
target << "You may not harm other thralls or the shadowlings. However, you do not need to obey other thralls."
- target << "You can communicate with the other enlightened ones by using the Hivemind Commune ability."
+ target << "You can communicate with the other enlightened ones by using the Shadowling Hivemind (:8)."
ticker.mode.add_thrall(target.mind)
target.mind.special_role = "Thrall"
- target.spell_list += new /obj/effect/proc_holder/spell/wizard/targeted/shadowling_hivemind
+ target.add_language("Shadowling Hivemind")
diff --git a/code/modules/mob/language.dm b/code/modules/mob/language.dm
index fa5725faf19..2853b2db169 100644
--- a/code/modules/mob/language.dm
+++ b/code/modules/mob/language.dm
@@ -356,6 +356,14 @@
key = "g"
flags = RESTRICTED | HIVEMIND
+/datum/language/shadowling
+ name = "Shadowling Hivemind"
+ desc = "Shadowlings and their thralls are capable of communicating over a psychic hivemind."
+ speech_verb = "says"
+ colour = "shadowling"
+ key = "8"
+ flags = RESTRICTED | HIVEMIND
+
/datum/language/ling/broadcast(var/mob/living/speaker,var/message,var/speaker_mask)
if(speaker.mind && speaker.mind.changeling)
diff --git a/code/modules/mob/living/carbon/brain/brain_item.dm b/code/modules/mob/living/carbon/brain/brain_item.dm
index 18b440e538a..cf6b4b9bae1 100644
--- a/code/modules/mob/living/carbon/brain/brain_item.dm
+++ b/code/modules/mob/living/carbon/brain/brain_item.dm
@@ -23,7 +23,7 @@
/obj/item/organ/brain/New()
..()
spawn(5)
- if(brainmob && brainmob.client)
+ if(brainmob && brainmob.client) //This is runtiming too. What the fuck? "runtime error: undefined variable /obj/item/organ/brain/var/client" BUT YOU'RE SUPPOSED TO BE CHECKING THE BRAINMOB.
brainmob.client.screen.len = null //clear the hud
/obj/item/organ/brain/proc/transfer_identity(var/mob/living/carbon/H)
diff --git a/code/modules/mob/living/carbon/brain/posibrain.dm b/code/modules/mob/living/carbon/brain/posibrain.dm
index 0b080d19738..76f15657886 100644
--- a/code/modules/mob/living/carbon/brain/posibrain.dm
+++ b/code/modules/mob/living/carbon/brain/posibrain.dm
@@ -172,7 +172,7 @@
src.brainmob = new(src)
src.brainmob.name = "[pick(list("PBU","HIU","SINA","ARMA","OSI"))]-[rand(100, 999)]"
- src.brainmob.real_name = src.brainmob.name
+ src.brainmob.real_name = src.brainmob.name //WHY THE FUCK IS THIS RUNTIMING? "Undefined variable /obj/item/device/mmi/posibrain/var/real_name" WHY ARE YOU CHECKING THE POSIBRAIN AND NOT THE BRAINMOB?!
src.brainmob.loc = src
src.brainmob.container = src
src.brainmob.robot_talk_understand = 1
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index 11342b903ca..52c5cfbd939 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -1400,6 +1400,8 @@
regenerate_icons()
fixblood()
+ UpdateAppearance()
+
if(species)
return 1
else
diff --git a/code/modules/mob/living/login.dm b/code/modules/mob/living/login.dm
index 35d7f3293ed..ad322fb81d1 100644
--- a/code/modules/mob/living/login.dm
+++ b/code/modules/mob/living/login.dm
@@ -28,6 +28,6 @@
if((ref in ticker.mode.thralls) || (mind in ticker.mode.enthralled))
ticker.mode.update_vampire_icons_added(mind)
if("shadowling")
- if((src.mind in ticker.mode.shadowling_thralls) || (src.mind in ticker.mode.shadows))
+ if((mind in ticker.mode.shadowling_thralls) || (mind in ticker.mode.shadows))
ticker.mode.update_shadow_icons_added(src.mind)
return .
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index ac726058103..bace5337085 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -988,7 +988,7 @@ var/list/slot_equipment_priority = list( \
if(mind && mind.changeling)
add_stings_to_statpanel(mind.changeling.purchasedpowers)
- if(spell_list && spell_list.len)
+ if(spell_list && spell_list.len) //YAY RUNTIMES "runtime error: undefined variable /obj/effect/proc_holder/spell/wizard/targeted/enthrall/var/len" BYOND is fucking up references for some reason. This one breaks admin-made shadowlings.
for(var/obj/effect/proc_holder/spell/wizard/S in spell_list)
switch(S.charge_type)
if("recharge")
diff --git a/code/stylesheet.dm b/code/stylesheet.dm
index 281b4c7abe4..82a6d814154 100644
--- a/code/stylesheet.dm
+++ b/code/stylesheet.dm
@@ -61,8 +61,6 @@ h1.alert, h2.alert {color: #000000;}
.notice {color: #000099;}
.boldnotice {color: #000099; font-weight: bold;}
.suicide {color: #ff5050; font-style: italic;}
-.shadowling {color: #311648;}
-
.newscaster {color: #800000;}
.ghostalert {color: #5c00e6; font-style: italic; font-weight: bold;}
@@ -85,6 +83,7 @@ h1.alert, h2.alert {color: #000000;}
.kidan {color: #664205;}
.slime {color: #0077AA;}
.clown {color: #ff0000;}
+.shadowling {color: #311648;}
.rough {font-family: "Trebuchet MS", cursive, sans-serif;}
.say_quote {font-family: Georgia, Verdana, sans-serif;}
.sans {font-family: "Comic Sans MS", cursive, sans-serif; font-weight: bold;}