From a769b4fc39f075bf9ab8979a99a01567113bd444 Mon Sep 17 00:00:00 2001 From: DZD Date: Tue, 5 May 2015 21:44:44 -0400 Subject: [PATCH] Shadowling fixes - Fixes shadowling thralls not showing up on Check Antagonists. - Also adds vampire thralls to Check Antagonists - Fixes shadowlings not turning off hardsuit helmet lights. - Fixes transforming into a shadowling dropping organs. - Adds job such as blueshield, NT rep, and pod pilot to the list of jobs that cannot be shadowlings. - Remove ascended shadowling commune, transfers the shadowling's languages to the ascendant instead. - Fixes intercept not being sent to the station on shadowling rounds. --- code/datums/mind.dm | 4 +-- code/game/gamemodes/game_mode.dm | 3 +- code/game/gamemodes/shadowling/shadowling.dm | 9 ++++- .../shadowling/shadowling_abilities.dm | 36 ++++++------------- .../gamemodes/shadowling/shadowling_items.dm | 3 +- .../special_shadowling_abilities.dm | 8 ++--- code/modules/admin/player_panel.dm | 7 ++-- code/modules/mob/living/carbon/human/life.dm | 4 +++ 8 files changed, 38 insertions(+), 36 deletions(-) diff --git a/code/datums/mind.dm b/code/datums/mind.dm index 5db7e620325..268f0b4d02b 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -995,7 +995,7 @@ datum/mind usr << "This only works on humans!" return ticker.mode.shadows += src - special_role = "shadowling" + special_role = "Shadowling" current << "You notice a brightening around you. No, it isn't that. The shadows grow, darken, swirl. The darkness has a new welcome for you, and you realize with a \ start that you can't be human. No, you are a shadowling, a harbringer of the shadows! Your alien abilities have been unlocked from within, and you may both commune with your allies and use \ a chrysalis to reveal your true form. You are to ascend at all costs." @@ -1006,7 +1006,7 @@ datum/mind usr << "This only works on humans!" return ticker.mode.add_thrall(src) - special_role = "thrall" + special_role = "Shadowling Thrall" current << "All at once it becomes clear to you. Where others see darkness, you see an ally. You realize that the shadows are not dead and dark as one would think, but \ living, and breathing, and eating. Their children, the Shadowlings, are to be obeyed and protected at all costs." current << "You may use the Hivemind Commune ability to communicate with your fellow enlightened ones." diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm index a367d1f5600..0546d5516a3 100644 --- a/code/game/gamemodes/game_mode.dm +++ b/code/game/gamemodes/game_mode.dm @@ -290,7 +290,8 @@ Implants; else if(special_role == "traitor" && prob(40) || \ special_role == "Changeling" && prob(50) || \ special_role == "Cultist" && prob(30) || \ - special_role == "Head Revolutionary" && prob(30)) + special_role == "Head Revolutionary" && prob(30) || \ + special_role == "Shadowling" && prob(15)) suspects += man // If they're a traitor or likewise, give them extra TC in exchange. diff --git a/code/game/gamemodes/shadowling/shadowling.dm b/code/game/gamemodes/shadowling/shadowling.dm index 51cf619fb12..1f6d926520f 100644 --- a/code/game/gamemodes/shadowling/shadowling.dm +++ b/code/game/gamemodes/shadowling/shadowling.dm @@ -67,7 +67,10 @@ Made by Xhuis required_enemies = 2 recommended_enemies = 2 restricted_jobs = list("AI", "Cyborg") - protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain") + protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Blueshield", "Nanotrasen Representative", "Security Pod Pilot", "Magistrate", "Brig Physician", "Internal Affairs Agent") + + var/const/waittime_l = 600 //lower bound on time before intercept arrives (in tenths of seconds) + var/const/waittime_h = 1800 //upper bound on time before intercept arrives (in tenths of seconds) /datum/game_mode/shadowling/announce() world << "The current game mode is - Shadowling!" @@ -109,6 +112,8 @@ Made by Xhuis finalize_shadowling(shadow) process_shadow_objectives(shadow) //give_shadowling_abilities(shadow) + spawn (rand(waittime_l, waittime_h)) + send_intercept() ..() return @@ -139,6 +144,7 @@ Made by Xhuis if(shadow_mind.assigned_role == "Clown") S << "Your alien nature has allowed you to overcome your clownishness." S.mutations.Remove(CLUMSY) + shadow_mind.current.hud_updateflag |= (1 << SPECIALROLE_HUD) /datum/game_mode/proc/add_thrall(datum/mind/new_thrall_mind) if (!istype(new_thrall_mind)) @@ -152,6 +158,7 @@ Made by Xhuis 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.add_language("Shadowling Hivemind") + new_thrall_mind.current.hud_updateflag |= (1 << SPECIALROLE_HUD) return 1 diff --git a/code/game/gamemodes/shadowling/shadowling_abilities.dm b/code/game/gamemodes/shadowling/shadowling_abilities.dm index 3260d8e5245..f59c579f969 100644 --- a/code/game/gamemodes/shadowling/shadowling_abilities.dm +++ b/code/game/gamemodes/shadowling/shadowling_abilities.dm @@ -70,6 +70,14 @@ for(var/obj/item/device/pda/P in H) P.fon = 0 P.SetLuminosity(0) //failsafe + for(var/obj/item/clothing/head/helmet/space/rig/R in H) + if(R.on) + R.on = 0 + R.icon_state = "rig[R.on]-[R._color]" + H.update_inv_head() + R.visible_message("[R]'s light fades and turns off.") + H.SetLuminosity(H.luminosity - R.brightness_on) + R.SetLuminosity(0) if(H != usr) H << "You feel a chill and are plunged into darkness." H.luminosity = 0 //This might not be required, but it just acts as another failsafe. @@ -208,10 +216,10 @@ target << "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) ability." target.adjustOxyLoss(-200) //In case the shadowling was choking them out ticker.mode.add_thrall(target.mind) - target.mind.special_role = "Thrall" + target.mind.special_role = "Shadowling Thrall" /obj/effect/proc_holder/spell/wizard/targeted/collective_mind name = "Collective Hivemind" @@ -304,9 +312,8 @@ S.attach(B) if(S) S.set_up(B.reagents, 10, 0, B.loc) - S.start() + S.start(4) sleep(10) - S.start() qdel(B) datum/reagent/shadowling_blindness_smoke //Blinds non-shadowlings, heals shadowlings/thralls @@ -594,24 +601,3 @@ datum/reagent/shadowling_blindness_smoke/on_mob_life(var/mob/living/M as mob) "You tear open a rift to the black space between worlds. It would be wise to avoid it.") new /obj/structure/shadow_vortex(SHA.loc) - - - -/obj/effect/proc_holder/spell/wizard/targeted/shadowling_hivemind_ascendant - name = "Ascendant Commune" - desc = "Allows you to silently communicate with all other shadowlings and thralls." - panel = "Ascendant" - charge_max = 20 - clothes_req = 0 - range = -1 - include_user = 1 - -/obj/effect/proc_holder/spell/wizard/targeted/shadowling_hivemind_ascendant/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 - text = "[text]" - for(var/mob/M in mob_list) - if(is_shadow_or_thrall(M) || (M in dead_mob_list)) - M << "\[Hive Chat\] [usr.real_name] (ASCENDANT): [text]" //Bigger text for ascendants. diff --git a/code/game/gamemodes/shadowling/shadowling_items.dm b/code/game/gamemodes/shadowling/shadowling_items.dm index fcb84062c5e..fc21d467a5a 100644 --- a/code/game/gamemodes/shadowling/shadowling_items.dm +++ b/code/game/gamemodes/shadowling/shadowling_items.dm @@ -74,7 +74,8 @@ item_state = null origin_tech = null vision_flags = SEE_MOBS - darkness_view = 3 + darkness_view = 8 + see_darkness = 0 invisa_view = 2 unacidable = 1 flash_protect = -1 diff --git a/code/game/gamemodes/shadowling/special_shadowling_abilities.dm b/code/game/gamemodes/shadowling/special_shadowling_abilities.dm index 4dd5ff26b68..42d7a5d04eb 100644 --- a/code/game/gamemodes/shadowling/special_shadowling_abilities.dm +++ b/code/game/gamemodes/shadowling/special_shadowling_abilities.dm @@ -18,9 +18,9 @@ "You remove any equipment which would hinder your hatching and begin regurgitating the resin which will protect you.") for(var/obj/item/I in usr) //drops all items - usr.unEquip(I) - if(istype(I, /obj/item/organ) && (I in src.internal_organs)) //Shadowlings only have a brain, the other organs would drop otherwise. - qdel(I) + var/obj/item/organ/O = I + if(!istype(O) || O.owner != src) + usr.unEquip(I) sleep(50) var/turf/simulated/floor/F @@ -148,10 +148,10 @@ usr.spell_list += new /obj/effect/proc_holder/spell/wizard/targeted/shadowling_phase_shift usr.spell_list += new /obj/effect/proc_holder/spell/wizard/aoe_turf/glacial_blast usr.spell_list += new /obj/effect/proc_holder/spell/wizard/targeted/vortex - usr.spell_list += new /obj/effect/proc_holder/spell/wizard/targeted/shadowling_hivemind_ascendant usr.mind.transfer_to(A) A.spell_list = usr.spell_list A.name = usr.real_name + A.languages = usr.languages if(A.real_name) A.real_name = usr.real_name usr.alpha = 0 //This is pretty bad, but is also necessary for the shuttle call to function properly diff --git a/code/modules/admin/player_panel.dm b/code/modules/admin/player_panel.dm index a3d862afce6..55890046c42 100644 --- a/code/modules/admin/player_panel.dm +++ b/code/modules/admin/player_panel.dm @@ -504,12 +504,15 @@ if(ticker.mode.shadows.len) dat += check_role_table("Shadowlings", ticker.mode.shadows, src) - if(ticker.mode.thralls.len) - dat += check_role_table("Shadowling Thralls", ticker.mode.thralls, src) + if(ticker.mode.shadowling_thralls.len) + dat += check_role_table("Shadowling Thralls", ticker.mode.shadowling_thralls, src) if(ticker.mode.vampires.len) dat += check_role_table("Vampires", ticker.mode.vampires, src) + if(ticker.mode.enthralled.len) + dat += check_role_table("Vampire Thralls", ticker.mode.enthralled, src) + if(ticker.mode.xenos.len) dat += check_role_table("Xenos", ticker.mode.xenos, src) diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index d21ab41af2c..2a6dd3ff422 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -1768,6 +1768,10 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc holder.icon_state = "mutineer" if("mutineer") holder.icon_state = "mutineer" + if("Shadowling") + holder.icon_state = "shadowling" + if("Shadowling Thrall") + holder.icon_state = "thrall" hud_list[SPECIALROLE_HUD] = holder