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;}