From 9c752683effa0baf799a4a096643407f6b131aba Mon Sep 17 00:00:00 2001 From: Xhuis Date: Sun, 12 Apr 2015 15:31:37 -0400 Subject: [PATCH 1/7] Shadowling update one --- code/__DEFINES/hud.dm | 3 +- code/datums/hud.dm | 1 + code/datums/mind.dm | 7 ++-- code/game/gamemodes/shadowling/shadowling.dm | 36 +++++++++++++----- .../shadowling/shadowling_abilities.dm | 18 +++++++-- .../reagents/Chemistry-Goon-Medicine.dm | 3 +- icons/mob/hud.dmi | Bin 3653 -> 3711 bytes 7 files changed, 50 insertions(+), 18 deletions(-) diff --git a/code/__DEFINES/hud.dm b/code/__DEFINES/hud.dm index 0126fde5384..d2c854462a8 100644 --- a/code/__DEFINES/hud.dm +++ b/code/__DEFINES/hud.dm @@ -24,4 +24,5 @@ #define ANTAG_HUD_OPS 7 #define ANTAG_HUD_GANG_A 8 #define ANTAG_HUD_GANG_B 9 -#define ANTAG_HUD_WIZ 10 \ No newline at end of file +#define ANTAG_HUD_WIZ 10 +#define ANTAG_HUD_SHADOW 11 diff --git a/code/datums/hud.dm b/code/datums/hud.dm index f3315d1cfd6..e1fa433e26f 100644 --- a/code/datums/hud.dm +++ b/code/datums/hud.dm @@ -12,6 +12,7 @@ var/datum/atom_hud/huds = list( \ ANTAG_HUD_GANG_A = new/datum/atom_hud/antag(), \ ANTAG_HUD_GANG_B = new/datum/atom_hud/antag(), \ ANTAG_HUD_WIZ = new/datum/atom_hud/antag(), \ + ANTAG_HUD_SHADOW = new/datum/atom_hud/antag(), \ ) /datum/atom_hud diff --git a/code/datums/mind.dm b/code/datums/mind.dm index b7b6317a083..a3d95e2f30f 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -1057,6 +1057,7 @@ else if(href_list["shadowling"]) switch(href_list["shadowling"]) if("clear") + ticker.mode.update_shadow_icons_removed(src) src.spell_list = null if(src in ticker.mode.shadows) ticker.mode.shadows -= src @@ -1082,9 +1083,8 @@ 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." - src.spell_list += new /obj/effect/proc_holder/spell/targeted/shadowling_hivemind - src.spell_list += new /obj/effect/proc_holder/spell/targeted/enthrall - current.verbs += /mob/living/carbon/human/proc/shadowling_hatch + ticker.mode.finalize_shadowling(src) + ticker.mode.update_shadow_icons_added(src) if("thrall") if(!ishuman(current)) usr << "This only works on humans!" @@ -1096,7 +1096,6 @@ current << "You may use the Hivemind Commune ability to communicate with your fellow enlightened ones." message_admins("[key_name_admin(usr)] has thrall'ed [current].") log_admin("[key_name(usr)] has thrall'ed [current].") - src.spell_list += new /obj/effect/proc_holder/spell/targeted/shadowling_hivemind else if (href_list["monkey"]) var/mob/living/L = current diff --git a/code/game/gamemodes/shadowling/shadowling.dm b/code/game/gamemodes/shadowling/shadowling.dm index c14ad379d68..2fb31659600 100644 --- a/code/game/gamemodes/shadowling/shadowling.dm +++ b/code/game/gamemodes/shadowling/shadowling.dm @@ -114,6 +114,7 @@ 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
" @@ -131,17 +132,25 @@ Made by Xhuis var/mob/living/carbon/human/S = shadow_mind.current shadow_mind.current.verbs += /mob/living/carbon/human/proc/shadowling_hatch shadow_mind.spell_list += new /obj/effect/proc_holder/spell/targeted/enthrall - shadow_mind.spell_list += new /obj/effect/proc_holder/spell/targeted/shadowling_hivemind - if(shadow_mind.assigned_role == "Clown") - S << "Your alien nature has allowed you to overcome your clownishness." - S.dna.remove_mutation(CLOWNMUT) + spawn(0) + shadow_mind.spell_list += new /obj/effect/proc_holder/spell/targeted/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." + S.dna.remove_mutation(CLOWNMUT) /datum/game_mode/proc/add_thrall(datum/mind/new_thrall_mind) if (!istype(new_thrall_mind)) return 0 if(!(new_thrall_mind in thralls)) + update_shadow_icons_added(new_thrall_mind) thralls += new_thrall_mind new_thrall_mind.current.attack_log += "\[[time_stamp()]\] Became a thrall" + new_thrall_mind.memory += "The Shadowlings' Objectives:: 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 << "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.spell_list += new /obj/effect/proc_holder/spell/targeted/shadowling_hivemind return 1 @@ -187,15 +196,14 @@ Made by Xhuis /datum/game_mode/proc/auto_declare_completion_shadowling() var/text = "" if(shadows.len) - text += "
The shadowlings were:" + text += "
The shadowlings were:" for(var/datum/mind/shadow in shadows) text += printplayer(shadow) + text += "
" if(thralls.len) - text += "
The thralls were:" + text += "
The thralls were:" for(var/datum/mind/thrall in thralls) text += printplayer(thrall) - else - world << "Round-end code broke! Please report this and its circumstances on GitHub at https://github.com/tgstation/-tg-station/issues" text += "
" world << text @@ -225,7 +233,7 @@ Made by Xhuis if(A.lighting_use_dynamic) light_amount = T.lighting_lumcount else light_amount = 10 if(light_amount > 2) //Rapid death while in the light, countered by... - H.take_overall_damage(0,6) + H.take_overall_damage(0,10) H << "The light burns you!" H << 'sound/weapons/sear.ogg' else if (light_amount < 2) //...extreme benefits while in the dark @@ -233,3 +241,13 @@ Made by Xhuis H.adjustToxLoss(-3) H.SetWeakened(0) H.SetStunned(0) + +/datum/game_mode/proc/update_shadow_icons_added(datum/mind/shadow_mind) + var/datum/atom_hud/antag/shadow_hud = huds[ANTAG_HUD_SHADOW] + shadow_hud.join_hud(shadow_mind.current) + set_antag_hud(shadow_mind.current, ((shadow_mind in shadows) ? "shadowling" : "thrall")) + +/datum/game_mode/proc/update_shadow_icons_removed(datum/mind/shadow_mind) //This should never actually occur, but it's here anyway. + var/datum/atom_hud/antag/shadow_hud = huds[ANTAG_HUD_SHADOW] + shadow_hud.leave_hud(shadow_mind.current) + set_antag_hud(shadow_mind.current, null) diff --git a/code/game/gamemodes/shadowling/shadowling_abilities.dm b/code/game/gamemodes/shadowling/shadowling_abilities.dm index baf3d70c4b2..bed2aee850d 100644 --- a/code/game/gamemodes/shadowling/shadowling_abilities.dm +++ b/code/game/gamemodes/shadowling/shadowling_abilities.dm @@ -21,7 +21,7 @@ usr.visible_message("[usr]'s eyes flash a blinding red!") target.visible_message("[target] freezes in place, their eyes glazing over...") if(in_range(target, usr)) - target << "Your gaze is forcibly drawn into [src]'s eyes, and you are mesmerized by the heavenly lights..." + target << "Your gaze is forcibly drawn into [usr]'s eyes, and you are mesmerized by the heavenly lights..." else //Only alludes to the shadowling if the target is close by target << "Red lights suddenly dance in your vision, and you are mesmerized by the heavenly lights..." target.Stun(10) @@ -56,6 +56,20 @@ for(var/obj/item/device/pda/P in orange(5, usr)) P.fon = 0 P.SetLuminosity(0) //failsafe + for(var/obj/effect/glowshroom/G in orange(3, usr)) //Smaller radius + qdel(G) + for(var/mob/living/carbon/human/H in T.contents) + for(var/obj/item/device/flashlight/F in H) + if(is_type_in_list(F, blacklisted_lights)) + F.visible_message("[F] goes slightly dim for a moment.") + return + F.on = 0 + F.visible_message("[F] gutters and falls dark.") + F.update_brightness() + for(var/obj/item/device/pda/P in H) + P.fon = 0 + P.SetLuminosity(0) //failsafe + H.luminosity = 0 //This is required with the object-based lighting @@ -183,8 +197,6 @@ target.adjustOxyLoss(-200) //In case the shadowling was choking them out ticker.mode.add_thrall(target.mind) target.mind.special_role = "Thrall" - var/datum/mind/thrall_mind = target.mind - thrall_mind.spell_list += new /obj/effect/proc_holder/spell/targeted/shadowling_hivemind //Lets thralls hive-chat diff --git a/code/modules/reagents/Chemistry-Goon-Medicine.dm b/code/modules/reagents/Chemistry-Goon-Medicine.dm index 88860f358f5..864b48fd34a 100644 --- a/code/modules/reagents/Chemistry-Goon-Medicine.dm +++ b/code/modules/reagents/Chemistry-Goon-Medicine.dm @@ -683,7 +683,8 @@ proc/chemical_mob_spawn(var/datum/reagents/holder, var/amount_to_spawn, var/reac /mob/living/simple_animal/hostile/asteroid/hivelordbrood, /mob/living/simple_animal/hostile/carp/holocarp, /mob/living/simple_animal/hostile/mining_drone, - /mob/living/simple_animal/hostile/poison + /mob/living/simple_animal/hostile/poison, + /mob/living/simple_animal/hostile/blob )//exclusion list for things you don't want the reaction to create. var/list/critters = typesof(/mob/living/simple_animal/hostile) - blocked // list of possible hostile mobs var/atom/A = holder.my_atom diff --git a/icons/mob/hud.dmi b/icons/mob/hud.dmi index a9746f5b5c30e13022eab0925f904222aedee53d..84ed7d9fc07ce331381ae6269c5db58e012e689a 100644 GIT binary patch delta 3257 zcmZXUX*kr4*T-kZ3^QZNPAEjSgsCLN49Pl{kX^_xhf5IwV*U@v`8;s?$YaQ2+#@8Z@|o zKp=34wS^4`voPun0zvL1eFw_|C+?5kG)4)IjvK*6qiaXI6O9zRstYAEe+&q%(&%#H z=&r-Lh7rPy{XMZ|rM z&8E~HKxIA{^iZuROfoE$cfLY+$Up~3fJYz*u3o{Vg3@&G5>!o}Kv=~!IAM&~6B zV#i>pg}VBKSaRL`)X)@q7Y`z>7gfk2E__}r(7-Pwi+)YuZ09bt<9~NbJef180Vmb? zDp%)eT*z9-wO(@>9>%x9%y$1g>pe?8{==DcwblA0Yd-R&SzA4aZ7usCsb--*RGrk+ zU5~>xnxugG_4OKp=bFfE~ zTqkcEd%IZCF9SqLOXuv85D ztax6b80M2D_UtBa^~DJt<3Mmvz!`VrTY@8w(qY`E3GJ29OZnC>2F9;VFVr6&M=6Hz zWnEzF(>=3%aJ@H-Sn!-pM?aBc+U1_=rs>?!rsdA!bIDi}yJ`OcMCYDYYRE^2 z`Omg$!)8_11HyU0vBBd7DM1M+oeZ6+wCkAgv)#IxPuX43csKn?$D$fLu=+aKr7T#{ z$E0$lc=MhpW0G!XP2%5T^En^a-^ki&?io9pqir?PIeyI8%zo0kYXSlxc})!TY#(H- zXCB#$e-ety_d9raLb!%p|BrbdZBSS<;->v)u&_3=EbNAyP4lU}tkYY+#20?R4tPwctpV%} zj#PxvHsY5#G|Yg|%%${CrgQi~IWp13&BHA&p^#!QVcp|zK;ki^D_oDF`vcm24@Kx+ zjPr6i+DAU;FF0*rjJvW_EVj-mtIgW+`GK&|DXjwfZqVvKDxQDp`#%m*9B0;_=bo|~h#tgzO3ztA@?2%CfJ6`p(OW67& zGNhLoY}H1IaMLo7320jZ^VoI3a%pqX^zmPRI~+{P-PW3no?VAzb`J zP}J6Y#KTxW9M7R=tcWp9Leu{!8ezMLaSm{Y$WOYyd7{A=mP&oPl(sDoCo|uq|J{J* z=@ET+ob6xQb9!EekSnr6L;UeHBIzg!ND^5hYCdUDjJa3M;oSc;z|N~;;9InDsl17= zWT8cE*mrI%LNzE6ruhK{9bZkQNOcHEY)n6sx4I>X;D^TV$RMntiIc!I6Q8tc4B3Hp z^1ay&P_^POdaPIDztefVy>>5D7W@{Io=}TSUc{&qOc{pIZZ`~zShavDYX-`EgL9NI z7NW}<(${gl>Bd+B_aOmFaOnJ4`tRwN?vf>A3nlvMva_l<+(u6N3 z7l9FMA0_nX_b?)+G0b9A`&?$axt%oK?(@$GjWMRZ=Y!I z(*zoO=S!=cc+7;0pu#TtahGT^G-};bwlW8aHN9dWRK!)atmdu{F?p>2<`u>>&gmtl zBo6rs!-Nz**O{|2&8Y_m$zdHbpl>1n0Bv?iG92#R8rODLm63$7_EOhq|2 zJr61oy%>?%@*MmxAGe;pKFYbQu~+#1y(Z;h3u%-3CXe3FdPk}V+VWij!+kc za;B=PZm|==jBcyk4edyD>-VoT+SgO6fz!y0MOZ-$9^Y|6Rqcq`-OadtgE~6;;*34> zKxG2x*mZMf?3oI+*qT&BVmP0`f`!NWLpNPcP+?IM3s3^nL#z3-cvj;b*o}GELdxCW zKP?5YzZ{U?i*#wezfL+_xsQA&_#aSw7*7Z6blY~yvlO_~e7h2@+Kgy*h$@^&` zX+7-W@V-7bbvWX3wswGpJ3Q6QJMt&O#r15ey**3rR{)hU!hg%KlCQp%)08_+Cbm_7 zdT+a3;u33?Mte$Zbs3kE9q36-e0ZDZmnmQp$70*vV;F>^Rn?XkS|RqTDrty7J<;}Y zi6TzrAKUGeOFMFjwFuz_%$&RD!z4VGCY)}uHKjpRCer^_i?s2Ef8yKc zPeHxUsDECCNKQe~s{;jU+5dvj8x~*mb*03#&9`RwK?K+cI+3fZhjIaC;$`^x}ok zpjE!ZnlgznMVDR!g70lhPP842|FffhEe8=8$|)!yEZ9U;*pf+VtGUNyD{oY!26BbY z@XGazz_bA1Q1%w|)wQP1VK-yk2p{*L=tN_3`e)8y+{j=AhTaybq&oSekq3WVCKfj! zjaAVc)xh{#A}IGJf?`VIyd-3TDz-<@nRp%ktdNqFr}O32xw!H!t+=Yhdl7c^dJ|hG z>Y`-{FS!QKoaIF%r@7o^pNE_Ww{KX)A? zaqi`V9fR+4@N!C!{N-1FWgGiBMV=WQAD^D~E(w*Xf3!dBwcOmr|I$*IkNc+Xku7Tf zrw7!NY9Z%A@|D!ZZ=CcEe0OJ-+kexxL>pjn*fcZ7%ID5^QhOI?Ezf3i0u_FO4~|2o z_IzOeUhQrI=dn<8MwoDU^UpdTcW(dnwe^?p4*K(YLPJB>7g@fke3vr0fwS{7$CU)a z;Nswmz(@IbKc=y9P8v>Tz%VdLs20yAb$Bkxz%uGp=qZHj|&8G z4hS6@#kT;n>p(TRHn#xVfs5fgGe)U0gvK&coZl(%8gEmuTI3kCflnDZIXRIGwQHGV zR68B5EL98KQlVaw9|#BRaA}y^JT8I)eq0Tj@h#DQ>-d{I-bmZ0TfYdc7v-$5R&2pJ z_eG`!M^MhkO5E&OHu%vW=3WapxMkh#)%Lb?Q391gmCtAS9{{Sv6Yc$RdGyWgIb-t8 z-d}C!ybD|#vIQ)1@j#i}Q?ezNo;Ff3t&7+5e3A_A15 znMWNbVg>g1e+r-o42ESsRQF6;lE{89GJLoXQie9k*%9%9_Yk!+jE1w71JUKJ{@HA# zPnHl9TqWy51SZxWH Y2C_r@CXXdx1pnJHxoTlhu8$-B57Q&@#sB~S delta 3198 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 Date: Mon, 13 Apr 2015 19:12:29 -0400 Subject: [PATCH 2/7] Progress --- code/game/gamemodes/shadowling/shadowling.dm | 10 ++-- .../shadowling/shadowling_abilities.dm | 54 ++++++++++++++++--- .../gamemodes/shadowling/shadowling_items.dm | 5 +- .../special_shadowling_abilities.dm | 1 + .../objects/items/weapons/implants/implant.dm | 2 +- .../reagents/Chemistry-Goon-Medicine.dm | 3 +- 6 files changed, 59 insertions(+), 16 deletions(-) diff --git a/code/game/gamemodes/shadowling/shadowling.dm b/code/game/gamemodes/shadowling/shadowling.dm index 2fb31659600..dbe031d68ff 100644 --- a/code/game/gamemodes/shadowling/shadowling.dm +++ b/code/game/gamemodes/shadowling/shadowling.dm @@ -232,13 +232,15 @@ Made by Xhuis if(A) if(A.lighting_use_dynamic) light_amount = T.lighting_lumcount else light_amount = 10 - if(light_amount > 2) //Rapid death while in the light, countered by... + if(light_amount > 4) //Not complete blackness - they can live in very small light levels plus starlight H.take_overall_damage(0,10) H << "The light burns you!" H << 'sound/weapons/sear.ogg' - else if (light_amount < 2) //...extreme benefits while in the dark - H.heal_overall_damage(5,3) - H.adjustToxLoss(-3) + else if (light_amount < 2) + H.heal_overall_damage(5,5) + H.adjustToxLoss(-5) + H.adjustBrainLoss(-25) //gibbering shadowlings are hilarious but also bad to have + H.adjustCloneLoss(-1) H.SetWeakened(0) H.SetStunned(0) diff --git a/code/game/gamemodes/shadowling/shadowling_abilities.dm b/code/game/gamemodes/shadowling/shadowling_abilities.dm index bed2aee850d..844f52bbe5b 100644 --- a/code/game/gamemodes/shadowling/shadowling_abilities.dm +++ b/code/game/gamemodes/shadowling/shadowling_abilities.dm @@ -53,10 +53,11 @@ L.on = 0 L.visible_message("[L] flickers and falls dark.") L.update(0) - for(var/obj/item/device/pda/P in orange(5, usr)) + for(var/obj/item/device/pda/P in T.contents) P.fon = 0 - P.SetLuminosity(0) //failsafe - for(var/obj/effect/glowshroom/G in orange(3, usr)) //Smaller radius + P.SetLuminosity(0) + for(var/obj/effect/glowshroom/G in orange(2, usr)) //Very small radius + G.visible_message("\The [G] withers away!") qdel(G) for(var/mob/living/carbon/human/H in T.contents) for(var/obj/item/device/flashlight/F in H) @@ -69,6 +70,8 @@ for(var/obj/item/device/pda/P in H) P.fon = 0 P.SetLuminosity(0) //failsafe + if(H != usr) + H << "You feel a chill and are plunged into darkness." H.luminosity = 0 //This is required with the object-based lighting @@ -178,11 +181,23 @@ usr.visible_message("[usr] leans over [target], their eyes glowing a deep crimson, and stares into their face.") target << "Your gaze is forcibly drawn into a blinding red light. You fall to the floor as conscious thought is wiped away." target.Weaken(12) + sleep(20) + if(isloyal(target)) + usr << "They are enslaved by Nanotrasen. You begin to shut down the nanobot implant - this will take some time." + usr.visible_message("[usr] halts for a moment, then begins passing its hand over [target]'s body.") + target << "You feel your loyalties begin to weaken!" + sleep(150) //15 seconds - not spawn() so the enthralling takes longer + usr << "The nanobots composing the loyalty implant have been rendered inert. Now to continue." + usr.visible_message("[usr] halts thier hand and resumes staring into [target]'s face.") + for(var/obj/item/weapon/implant/loyalty/L in target) + if(L && L.implanted) + qdel(L) + target << "Your unwavering loyalty to Nanotrasen falters, dims, dies." if(3) usr << "You begin rearranging [target]'s memories." usr.visible_message("[usr]'s eyes flare brightly, and a horrible grin begins to spread across [target]'s face...") target << "Your head cries out. The veil of reality begins to crumple and something evil bleeds through." //Ow the edge - if(!do_mob(usr, target, 100)) //around 30 seconds total for enthralling + if(!do_mob(usr, target, 100)) //around 30 seconds total for enthralling, 45 for someone with a loyalty implant usr << "The enthralling has been interrupted - your target's mind returns to its previous state." target << "Your thoughts become coherent once more. Already you can barely remember what's happened to you." enthralling = 0 @@ -220,6 +235,30 @@ +/obj/effect/proc_holder/spell/targeted/shadowling_regenarmor + name = "Regenerate Chitin" + desc = "Re-forms protective chitin that may be lost during cloning or similar processes." + panel = "Shadowling Abilities" + charge_max = 600 + clothes_req = 0 + range = -1 + include_user = 1 + +/obj/effect/proc_holder/spell/targeted/shadowling_regenarmor/cast(list/targets) + for(var/mob/living/user in targets) + user.visible_message("[user]'s skin suddenly bubbles and begins to shift around their body!", \ + "You regenerate your protective armor and cleanse your form of defects.") + user.equip_to_slot_or_del(new /obj/item/clothing/under/shadowling(usr), slot_w_uniform) + user.equip_to_slot_or_del(new /obj/item/clothing/shoes/shadowling(usr), slot_shoes) + user.equip_to_slot_or_del(new /obj/item/clothing/suit/space/shadowling(usr), slot_wear_suit) + user.equip_to_slot_or_del(new /obj/item/clothing/head/shadowling(usr), slot_head) + user.equip_to_slot_or_del(new /obj/item/clothing/gloves/shadowling(usr), slot_gloves) + user.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/shadowling(usr), slot_wear_mask) + user.equip_to_slot_or_del(new /obj/item/clothing/glasses/night/shadowling(usr), slot_glasses) + hardset_dna(user, null, null, null, null, /datum/species/shadow/ling) //can't be a shadowling without being a shadowling + + + /obj/effect/proc_holder/spell/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." @@ -266,7 +305,7 @@ user << "The power of your thralls has granted you the Sonic Screech ability. This ability will shatter nearby windows and deafen enemies." user.mind.spell_list += new /obj/effect/proc_holder/spell/aoe_turf/unearthly_screech - if(thralls >= 10 && !thrall_swap_acquired) + if(thralls >= 9 && !thrall_swap_acquired) thrall_swap_acquired = 1 user << "The power of your thralls has granted you the Spatial Relocation ability. This will, allow you to instantly swap places with one of your thralls in \ addition to shattering nearby lights." @@ -363,7 +402,6 @@ datum/reagent/shadowling_blindness_smoke/on_mob_life(var/mob/living/M as mob) if(iscarbon(target)) var/mob/living/carbon/M = target M << "A spike of pain drives into your head and scrambles your thoughts!" - M.Weaken(2) M.confused += 10 M.setEarDamage(M.ear_damage + 3) else if(issilicon(target)) @@ -376,7 +414,7 @@ datum/reagent/shadowling_blindness_smoke/on_mob_life(var/mob/living/M as mob) sp.start() S.Weaken(6) for(var/obj/structure/window/W in T.contents) - W.hit(rand(25,50)) + W.hit(rand(50,100)) @@ -460,7 +498,7 @@ datum/reagent/shadowling_blindness_smoke/on_mob_life(var/mob/living/M as mob) charge_counter = charge_max return - for(var/mob/boom in targets) + for(var/mob/living/carbon/human/boom in targets) if(is_shadow_or_thrall(boom)) usr << "Making an ally explode seems unwise." charge_counter = charge_max diff --git a/code/game/gamemodes/shadowling/shadowling_items.dm b/code/game/gamemodes/shadowling/shadowling_items.dm index 683d0a4bb81..01e0f5ae928 100644 --- a/code/game/gamemodes/shadowling/shadowling_items.dm +++ b/code/game/gamemodes/shadowling/shadowling_items.dm @@ -46,7 +46,7 @@ /obj/item/clothing/gloves/shadowling name = "chitin hands" - desc = "An electricity-resistant yet thin covering of the hands." + desc = "An electricity-resistant covering of the hands." icon_state = "golem" item_state = null origin_tech = null @@ -75,10 +75,11 @@ vision_flags = SEE_MOBS darkness_view = 3 invis_view = 2 - flash_protect = 2 + flash_protect = -1 unacidable = 1 flags = ABSTRACT | NODROP + /obj/structure/shadow_vortex name = "vortex" desc = "A swirling hole in the fabric of reality. Eye-watering chimes sound from its depths." diff --git a/code/game/gamemodes/shadowling/special_shadowling_abilities.dm b/code/game/gamemodes/shadowling/special_shadowling_abilities.dm index 472bee1cd61..c5af4e5c7a3 100644 --- a/code/game/gamemodes/shadowling/special_shadowling_abilities.dm +++ b/code/game/gamemodes/shadowling/special_shadowling_abilities.dm @@ -85,6 +85,7 @@ usr.mind.spell_list += new /obj/effect/proc_holder/spell/targeted/shadow_walk usr.mind.spell_list += new /obj/effect/proc_holder/spell/aoe_turf/flashfreeze usr.mind.spell_list += new /obj/effect/proc_holder/spell/targeted/collective_mind + usr.mind.spell_list += new /obj/effect/proc_holder/spell/targeted/shadowling_regenarmor diff --git a/code/game/objects/items/weapons/implants/implant.dm b/code/game/objects/items/weapons/implants/implant.dm index a8b7ae88590..c644c33ab0d 100644 --- a/code/game/objects/items/weapons/implants/implant.dm +++ b/code/game/objects/items/weapons/implants/implant.dm @@ -173,7 +173,7 @@ /obj/item/weapon/implant/loyalty/implanted(mob/target) ..() - if((target.mind in ticker.mode.head_revolutionaries) || (target.mind in ticker.mode.A_bosses) || (target.mind in ticker.mode.B_bosses)) + if((target.mind in ticker.mode.head_revolutionaries) || (target.mind in ticker.mode.A_bosses) || (target.mind in ticker.mode.B_bosses) || is_shadow_or_thrall(target)) target.visible_message("[target] seems to resist the implant!", "You feel the corporate tendrils of Nanotrasen try to invade your mind!") return 0 if((target.mind in ticker.mode.revolutionaries) || (target.mind in ticker.mode.A_gangsters) || (target.mind in ticker.mode.B_gangsters)) diff --git a/code/modules/reagents/Chemistry-Goon-Medicine.dm b/code/modules/reagents/Chemistry-Goon-Medicine.dm index 864b48fd34a..2659fed7197 100644 --- a/code/modules/reagents/Chemistry-Goon-Medicine.dm +++ b/code/modules/reagents/Chemistry-Goon-Medicine.dm @@ -684,7 +684,8 @@ proc/chemical_mob_spawn(var/datum/reagents/holder, var/amount_to_spawn, var/reac /mob/living/simple_animal/hostile/carp/holocarp, /mob/living/simple_animal/hostile/mining_drone, /mob/living/simple_animal/hostile/poison, - /mob/living/simple_animal/hostile/blob + /mob/living/simple_animal/hostile/blob, + /mob/living/simple_animal/ascendant_shadowling )//exclusion list for things you don't want the reaction to create. var/list/critters = typesof(/mob/living/simple_animal/hostile) - blocked // list of possible hostile mobs var/atom/A = holder.my_atom From f6011468dbec7f60b0275a1f9b94f4b288ff2d08 Mon Sep 17 00:00:00 2001 From: Xhuis Date: Mon, 13 Apr 2015 19:14:05 -0400 Subject: [PATCH 3/7] Removes unnecessary colon --- code/game/gamemodes/shadowling/shadowling.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/gamemodes/shadowling/shadowling.dm b/code/game/gamemodes/shadowling/shadowling.dm index dbe031d68ff..2eab29a5076 100644 --- a/code/game/gamemodes/shadowling/shadowling.dm +++ b/code/game/gamemodes/shadowling/shadowling.dm @@ -146,7 +146,7 @@ Made by Xhuis update_shadow_icons_added(new_thrall_mind) thralls += new_thrall_mind new_thrall_mind.current.attack_log += "\[[time_stamp()]\] Became a thrall" - new_thrall_mind.memory += "The Shadowlings' Objectives:: Ascend to your true form by use of the Ascendance ability. \ + new_thrall_mind.memory += "The Shadowlings' Objectives: 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 << "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." From e949c8ec6d7295f7a15e4a301b9f6c2aee152b7a Mon Sep 17 00:00:00 2001 From: Xhuis Date: Mon, 13 Apr 2015 19:17:36 -0400 Subject: [PATCH 4/7] Changelog --- html/changelogs/Xhuis-ShadowlingUpdateI.yml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 html/changelogs/Xhuis-ShadowlingUpdateI.yml diff --git a/html/changelogs/Xhuis-ShadowlingUpdateI.yml b/html/changelogs/Xhuis-ShadowlingUpdateI.yml new file mode 100644 index 00000000000..a22e7a4e426 --- /dev/null +++ b/html/changelogs/Xhuis-ShadowlingUpdateI.yml @@ -0,0 +1,6 @@ +author: AnturK + +delete-after: True + +changes: + - rscadd: "Many changes have been made to shadowling. The full change list can be found at https://github.com/tgstation/-tg-station/pull/8927" \ No newline at end of file From f6c8b3bfc532b6c39918b10018f9649bced42a8d Mon Sep 17 00:00:00 2001 From: Xhuis Date: Mon, 13 Apr 2015 19:42:50 -0400 Subject: [PATCH 5/7] Replaces fonts with spans, adds defines --- code/game/gamemodes/shadowling/shadowling.dm | 17 ++++++++++------- interface/stylesheet.dm | 4 ++++ 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/code/game/gamemodes/shadowling/shadowling.dm b/code/game/gamemodes/shadowling/shadowling.dm index 2eab29a5076..54b8e9ec411 100644 --- a/code/game/gamemodes/shadowling/shadowling.dm +++ b/code/game/gamemodes/shadowling/shadowling.dm @@ -1,3 +1,6 @@ +#define LIGHT_DAM_THRESHOLD 4 +#define LIGHT_DAMAGE_TAKEN 10 + /* SHADOWLING: A gamemode based on previously-run events @@ -184,11 +187,11 @@ Made by Xhuis /datum/game_mode/shadowling/declare_completion() if(check_shadow_victory() && SSshuttle.emergency.mode >= SHUTTLE_ESCAPE) //Doesn't end instantly - this is hacky and I don't know of a better way ~X - world << "The shadowlings have ascended and taken over the station!" + world << "The shadowlings have ascended and taken over the station!" else if(shadowling_dead && !check_shadow_victory()) //If the shadowlings have ascended, they can not lose the round - world << "The shadowlings have been killed by the crew!" + world << "The shadowlings have been killed by the crew!" else if(!check_shadow_victory() && SSshuttle.emergency.mode >= SHUTTLE_ESCAPE) - world << "The crew has escaped the station before the shadowlings could ascend!" + world << "The crew has escaped the station before the shadowlings could ascend!" ..() return 1 @@ -196,12 +199,12 @@ Made by Xhuis /datum/game_mode/proc/auto_declare_completion_shadowling() var/text = "" if(shadows.len) - text += "
The shadowlings were:" + text += "
The shadowlings were:" for(var/datum/mind/shadow in shadows) text += printplayer(shadow) text += "
" if(thralls.len) - text += "
The thralls were:" + text += "
The thralls were:" for(var/datum/mind/thrall in thralls) text += printplayer(thrall) text += "
" @@ -232,8 +235,8 @@ Made by Xhuis if(A) if(A.lighting_use_dynamic) light_amount = T.lighting_lumcount else light_amount = 10 - if(light_amount > 4) //Not complete blackness - they can live in very small light levels plus starlight - H.take_overall_damage(0,10) + if(light_amount > LIGHT_DAM_THRESHOLD) //Not complete blackness - they can live in very small light levels plus starlight + H.take_overall_damage(0, LIGHT_DAMAGE_TAKEN) H << "The light burns you!" H << 'sound/weapons/sear.ogg' else if (light_amount < 2) diff --git a/interface/stylesheet.dm b/interface/stylesheet.dm index ff36313485c..411af48189e 100644 --- a/interface/stylesheet.dm +++ b/interface/stylesheet.dm @@ -77,6 +77,10 @@ h1.alert, h2.alert {color: #000000;} .sans {font-family: "Comic Sans MS", cursive, sans-serif;} .robot {font-family: "Courier New", cursive, sans-serif;} +.big {font-size: 3;} +.greentext {color: #00FF00; font-size: 3;} +.redtext {color: #FF0000; font-size: 3;} + BIG IMG.icon {width: 32px; height: 32px;} "} From 21e85642106816bfb874cf5515e944bd582af6c6 Mon Sep 17 00:00:00 2001 From: Xhuis Date: Mon, 13 Apr 2015 21:15:14 -0400 Subject: [PATCH 6/7] One more define --- code/game/gamemodes/shadowling/shadowling.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/game/gamemodes/shadowling/shadowling.dm b/code/game/gamemodes/shadowling/shadowling.dm index 54b8e9ec411..c1804312258 100644 --- a/code/game/gamemodes/shadowling/shadowling.dm +++ b/code/game/gamemodes/shadowling/shadowling.dm @@ -1,4 +1,5 @@ #define LIGHT_DAM_THRESHOLD 4 +#define LIGHT_HEAL_THRESHOLD 2 #define LIGHT_DAMAGE_TAKEN 10 /* @@ -239,7 +240,7 @@ Made by Xhuis H.take_overall_damage(0, LIGHT_DAMAGE_TAKEN) H << "The light burns you!" H << 'sound/weapons/sear.ogg' - else if (light_amount < 2) + else if (light_amount < LIGHT_HEAL_THRESHOLD) H.heal_overall_damage(5,5) H.adjustToxLoss(-5) H.adjustBrainLoss(-25) //gibbering shadowlings are hilarious but also bad to have From 5075909757d8c29a0aef9c183cb933af347e691a Mon Sep 17 00:00:00 2001 From: Xhuis Date: Tue, 14 Apr 2015 14:23:30 -0400 Subject: [PATCH 7/7] More bug fixes --- code/game/gamemodes/shadowling/shadowling.dm | 2 +- code/game/gamemodes/shadowling/special_shadowling_abilities.dm | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/code/game/gamemodes/shadowling/shadowling.dm b/code/game/gamemodes/shadowling/shadowling.dm index c1804312258..372ee45ff10 100644 --- a/code/game/gamemodes/shadowling/shadowling.dm +++ b/code/game/gamemodes/shadowling/shadowling.dm @@ -76,7 +76,7 @@ Made by Xhuis /datum/game_mode/shadowling/announce() world << "The current game mode is - Shadowling!" - world << "There are alien shadowlings on the station. Crew: Kill the shadowlings before they can eat or enthrall the crew. Shadowlings: Enthrall the crew while remaining in hiding." + world << "There are alien shadowlings on the station. Crew: Kill the shadowlings before they can eat or enthrall the crew. Shadowlings: Enthrall the crew while remaining in hiding." /datum/game_mode/shadowling/pre_setup() if(config.protect_roles_from_antagonist) diff --git a/code/game/gamemodes/shadowling/special_shadowling_abilities.dm b/code/game/gamemodes/shadowling/special_shadowling_abilities.dm index c5af4e5c7a3..b1ff12edd22 100644 --- a/code/game/gamemodes/shadowling/special_shadowling_abilities.dm +++ b/code/game/gamemodes/shadowling/special_shadowling_abilities.dm @@ -159,4 +159,5 @@ sleep(50) if(!ticker.mode.shadowling_ascended) SSshuttle.emergency.request(null, 0.3) + ticker.mode.shadowling_ascended = 1 qdel(usr)