diff --git a/code/datums/spells/wizard.dm b/code/datums/spells/wizard.dm index 66821e3d33b..311be1b3ba9 100644 --- a/code/datums/spells/wizard.dm +++ b/code/datums/spells/wizard.dm @@ -3,7 +3,7 @@ desc = "This spell fires several, slow moving, magic projectiles at nearby targets." school = "evocation" - charge_max = 100 + charge_max = 150 clothes_req = 1 invocation = "FORTI GY AMA" invocation_type = "shout" @@ -134,6 +134,7 @@ summon_type = list("/obj/effect/forcefield") summon_lifespan = 300 + /obj/effect/proc_holder/spell/aoe_turf/conjure/carp name = "Summon Bigger Carp" desc = "This spell conjures an elite carp." @@ -147,6 +148,21 @@ summon_type = list("/obj/effect/critter/spesscarp/elite") + +/obj/effect/proc_holder/spell/aoe_turf/conjure/construct + name = "Artificer" + desc = "This spell conjures a construct which may be controlled by Shades" + + school = "conjuration" + charge_max = 600 + clothes_req = 0 + invocation = "none" + invocation_type = "none" + range = 0 + + summon_type = list("/obj/structure/constructshell") + + /obj/effect/proc_holder/spell/aoe_turf/conjure/creature name = "Summon Creature Swarm" desc = "This spell tears the fabric of reality, allowing horrific daemons to spill forth" @@ -211,4 +227,95 @@ ex_severe = -1 ex_heavy = -1 ex_light = 2 - ex_flash = 5 \ No newline at end of file + ex_flash = 5 + + + + + + +//////////////////////////////Construct Spells///////////////////////// + +/obj/effect/proc_holder/spell/aoe_turf/conjure/construct/lesser + charge_max = 1800 + +/obj/effect/proc_holder/spell/aoe_turf/conjure/floor + name = "Floor Construction" + desc = "This spell constructs a cult floor" + + school = "conjuration" + charge_max = 20 + clothes_req = 0 + invocation = "none" + invocation_type = "none" + range = 0 + summon_type = list("/turf/simulated/floor/engine/cult") + +/obj/effect/proc_holder/spell/aoe_turf/conjure/wall + name = "Leser Construction" + desc = "This spell constructs a cult wall" + + school = "conjuration" + charge_max = 100 + clothes_req = 0 + invocation = "none" + invocation_type = "none" + range = 0 + summon_type = list("/turf/simulated/wall/cult") + +/obj/effect/proc_holder/spell/aoe_turf/conjure/wall/reinforced + name = "Greater Construction" + desc = "This spell constructs a reinforced metal wall" + + school = "conjuration" + charge_max = 300 + clothes_req = 0 + invocation = "none" + invocation_type = "none" + range = 0 + + summon_type = list("/turf/simulated/wall/r_wall") + +/obj/effect/proc_holder/spell/aoe_turf/conjure/soulstone + name = "Summon Soulstone" + desc = "This spell reaches into Nar-Sie's realm, summoning one of the legendary fragments across time and space" + + school = "conjuration" + charge_max = 3000 + clothes_req = 0 + invocation = "none" + invocation_type = "none" + range = 0 + + summon_type = list("/obj/item/device/soulstone") + + +/obj/effect/proc_holder/spell/aoe_turf/conjure/lesserforcewall + name = "Shield" + desc = "This spell creates a temporary forcefield to shield yourself and allies from incoming fire" + + school = "transmutation" + charge_max = 300 + clothes_req = 0 + invocation = "none" + invocation_type = "none" + range = 0 + summon_type = list("/obj/effect/forcefield") + summon_lifespan = 50 + + + + +/obj/effect/proc_holder/spell/targeted/ethereal_jaunt/shift + name = "Phase Shift" + desc = "This spell allows you to pass through walls" + + school = "transmutation" + charge_max = 200 + clothes_req = 0 + invocation = "none" + invocation_type = "none" + range = -1 + include_user = 1 + + jaunt_duration = 50 //in deciseconds diff --git a/code/game/gamemodes/wizard/soulstone.dm b/code/game/gamemodes/wizard/soulstone.dm index 54c48e838bd..eb313f56493 100644 --- a/code/game/gamemodes/wizard/soulstone.dm +++ b/code/game/gamemodes/wizard/soulstone.dm @@ -78,7 +78,17 @@ src.icon_state = "soulstone" attack_self(U) +///////////////////////////Transferring to constructs///////////////////////////////////////////////////// +/obj/structure/constructshell + name = "empty shell" + icon = 'wizard.dmi' + icon_state = "construct" + desc = "A wicked machine used by those skilled in magical arts. It is inactive" + flags = FPRINT | TABLEPASS +/obj/structure/constructshell/attackby(obj/item/O as obj, mob/user as mob) + if(istype(O, /obj/item/device/soulstone)) + O.transfer_soul("CONSTRUCT",src,user) ////////////////////////////Proc for moving soul in and out off stone////////////////////////////////////// @@ -123,7 +133,7 @@ C.name = "Soul Stone: [S.name]" S << "Your soul has been captured! You are now bound to [U.name]'s will, help them suceed in their goals at all costs." U << "\blue Capture successful!: \black [T.name]'s soul has been ripped from their body and stored within the soul stone." - S << "The soulstone has been imprinted with [S.name]'s mind, it will no longer react to other souls." + U << "The soulstone has been imprinted with [S.name]'s mind, it will no longer react to other souls." C.imprinted = "[S.name]" del T if("SHADE") @@ -145,4 +155,50 @@ C.icon_state = "soulstone2" T << "Your soul has been recaptured by the soul stone, its arcane energies are reknitting your ethereal form" U << "\blue Capture successful!: \black [T.name]'s has been recaptured and stored within the soul stone." - return \ No newline at end of file + if("CONSTRUCT") + var/obj/structure/constructshell/T = target + var/obj/item/device/soulstone/C = src + var/mob/living/simple_animal/shade/A = locate() in C + if(A) + var/construct_class = alert(U, "Please choose which type of construct you wish to create.",,"Juggernaut","Wraith","Artificer") + var/mob/living/simple_animal/Z + switch(construct_class) + if("Juggernaut") + Z = new /mob/living/simple_animal/constructarmoured (get_turf(T.loc)) + if (A.client) + A.client.mob = Z + del(T) + Z << "You are playing a Juggernaut. Though slow, you can withstand extreme punishment, and rip apart enemies and walls alike." + Z << "You are still bound to serve your creator, follow their orders and help them complete their goals at all costs." + Z.spell_list += new /obj/effect/proc_holder/spell/aoe_turf/conjure/lesserforcewall(Z) + Z.cancel_camera() + del(C) + + if("Wraith") + Z = new /mob/living/simple_animal/constructwraith (get_turf(T.loc)) + if (A.client) + A.client.mob = Z + del(T) + Z << "You are playing a Wraith. Though relatively fragile, you are fast, deadly, and even able to phase through walls." + Z << "You are still bound to serve your creator, follow their orders and help them complete their goals at all costs." + Z.spell_list += new /obj/effect/proc_holder/spell/targeted/ethereal_jaunt/shift(Z) + Z.cancel_camera() + del(C) + + if("Artificer") + Z = new /mob/living/simple_animal/constructbuilder (get_turf(T.loc)) + if (A.client) + A.client.mob = Z + del(T) + Z << "You are playing an Artificer. You are incredibly weak and fragile, but you are able to construct fortifications, repair allied constructs (by clicking on them), and even create new constructs" + Z << "You are still bound to serve your creator, follow their orders and help them complete their goals at all costs." + Z.spell_list += new /obj/effect/proc_holder/spell/aoe_turf/conjure/construct/lesser(Z) + Z.spell_list += new /obj/effect/proc_holder/spell/aoe_turf/conjure/wall(Z) + Z.spell_list += new /obj/effect/proc_holder/spell/aoe_turf/conjure/floor(Z) + Z.spell_list += new /obj/effect/proc_holder/spell/aoe_turf/conjure/wall/reinforced(Z) + Z.spell_list += new /obj/effect/proc_holder/spell/aoe_turf/conjure/soulstone(Z) + Z.cancel_camera() + del(C) + else + U << "\red Creation failed!: \black The soul stone is empty! Go kill someone!" + return diff --git a/code/game/gamemodes/wizard/spellbook.dm b/code/game/gamemodes/wizard/spellbook.dm index 6676196cece..dd3179789a0 100644 --- a/code/game/gamemodes/wizard/spellbook.dm +++ b/code/game/gamemodes/wizard/spellbook.dm @@ -25,16 +25,21 @@ dat += "Mutate (60)
" dat += "Ethereal Jaunt (60)
" dat += "Knock (10)
" +// if(op) +// dat += "Summon Guns (One time use, global spell)
" dat += "
" dat += "Artefacts:
" dat += "Powerful items imbued with eldritch magics. Summoning one will count towards your maximum number of spells.
" dat += "It is recommended that only experienced wizards attempt to wield such artefacts.
" dat += "
" - dat += "Staff of Change
" + dat += "Staff of Change
" dat += "
" - dat += "Six Soul Stone Shards
" + dat += "Six Soul Stone Shards and the spell Artificer
" dat += "
" - dat += "Re-memorize Spells
" +// if(op) +// dat += "Veil Render
" + dat += "
" + dat += "Re-memorize Spells
" user << browse(dat, "window=radio") onclose(user, "radio") return @@ -50,7 +55,7 @@ if ((usr.contents.Find(src) || (in_range(src,usr) && istype(src.loc, /turf)))) usr.machine = src if(href_list["spell_choice"]) - if(src.uses >= 1 && href_list["spell_choice"] != 16) + if(src.uses >= 1 && src.max_uses >=1 && text2num(href_list["spell_choice"]) < 18) src.uses-- if(spell_type == "verb") switch(href_list["spell_choice"]) @@ -105,16 +110,24 @@ usr.verbs += /client/proc/knock usr.mind.special_verbs += /client/proc/knock src.temp = "This spell opens nearby doors and does not require wizard garb." - if ("14") +// if ("14") +// usr.verbs += /client/proc/rightandwrong +// src.max_uses-- +// src.temp = "Nothing could possibly go wrong with arming a crew of lunatics just itching for an excuse to kill eachother. Just be careful not to get hit in the crossfire!" + if ("15") new /obj/item/weapon/gun/energy/staff(get_turf(usr)) src.temp = "An artefact that spits bolts of coruscating energy which cause the target's very form to reshape itself" src.max_uses-- - if ("15") + if ("16") new /obj/item/weapon/storage/belt/soulstone/full(get_turf(usr)) src.temp = "Soul Stone Shards are ancient tools capable of capturing and harnessing the spirits of the dead and dying" src.max_uses-- +// if ("17") +// new /obj/item/weapon/veilrender(get_turf(usr)) +// src.temp = "Recovered from a shattered temple in what was speculated to be the ruins of an alien capital city, the blade is said to cut more than just the material. There was no trace of the blades creators, nor of any other life left on the dead planet, and what caused such an apocalypse remains a mystery." +// src.max_uses-- else if(spell_type == "object") - var/list/available_spells = list("Magic Missile","Fireball","Disintegrate","Disable Tech","Smoke","Blind","Mind Transfer","Forcewall","Blink","Teleport","Mutate","Ethereal Jaunt","Knock") + var/list/available_spells = list("Magic Missile","Fireball","Disintegrate","Disable Tech","Smoke","Blind","Mind Transfer","Forcewall","Blink","Teleport","Mutate","Ethereal Jaunt","Knock","Summon Guns","Staff of Change","Six Soul Stone Shards and the spell Artificer","Veil Render") var/already_knows = 0 for(var/obj/effect/proc_holder/spell/aspell in usr.spell_list) if(available_spells[text2num(href_list["spell_choice"])] == aspell.name) @@ -125,67 +138,79 @@ if(!already_knows) switch(href_list["spell_choice"]) if ("1") - feedback_add_details("wizard_spell_learned","MM") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells + //feedback_add_details("wizard_spell_learned","MM") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells usr.spell_list += new /obj/effect/proc_holder/spell/targeted/projectile/magic_missile(usr) src.temp = "This spell fires several, slow moving, magic projectiles at nearby targets. If they hit a target, it is paralyzed and takes minor damage." if ("2") - feedback_add_details("wizard_spell_learned","FB") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells + //feedback_add_details("wizard_spell_learned","FB") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells usr.spell_list += new /obj/effect/proc_holder/spell/targeted/projectile/fireball(usr) src.temp = "This spell fires a fireball at a target and does not require wizard garb. Be careful not to fire it at people that are standing next to you." // if ("3") +// feedback_add_details("wizard_spell_learned","DG") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells // usr.spell_list += new /obj/effect/proc_holder/spell/targeted/inflict_handler/disintegrate(usr) // src.temp = "This spell instantly kills somebody adjacent to you with the vilest of magick. It has a long cooldown." if ("4") - feedback_add_details("wizard_spell_learned","DT") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells + //feedback_add_details("wizard_spell_learned","DT") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells usr.spell_list += new /obj/effect/proc_holder/spell/targeted/emplosion/disable_tech(usr) src.temp = "This spell disables all weapons, cameras and most other technology in range." if ("5") - feedback_add_details("wizard_spell_learned","SM") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells + //feedback_add_details("wizard_spell_learned","SM") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells usr.spell_list += new /obj/effect/proc_holder/spell/targeted/smoke(usr) src.temp = "This spell spawns a cloud of choking smoke at your location and does not require wizard garb." if ("6") - feedback_add_details("wizard_spell_learned","BD") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells + //feedback_add_details("wizard_spell_learned","BD") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells usr.spell_list += new /obj/effect/proc_holder/spell/targeted/trigger/blind(usr) src.temp = "This spell temporarly blinds a single person and does not require wizard garb." if ("7") - feedback_add_details("wizard_spell_learned","MT") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells + //feedback_add_details("wizard_spell_learned","MT") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells usr.spell_list += new /obj/effect/proc_holder/spell/targeted/mind_transfer(usr) src.temp = "This spell allows the user to switch bodies with a target. Careful to not lose your memory in the process." if ("8") - feedback_add_details("wizard_spell_learned","FW") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells + //feedback_add_details("wizard_spell_learned","FW") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells usr.spell_list += new /obj/effect/proc_holder/spell/aoe_turf/conjure/forcewall(usr) src.temp = "This spell creates an unbreakable wall that lasts for 30 seconds and does not need wizard garb." if ("9") - feedback_add_details("wizard_spell_learned","BL") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells + //feedback_add_details("wizard_spell_learned","BL") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells usr.spell_list += new /obj/effect/proc_holder/spell/targeted/turf_teleport/blink(usr) src.temp = "This spell randomly teleports you a short distance. Useful for evasion or getting into areas if you have patience." if ("10") - feedback_add_details("wizard_spell_learned","TP") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells + //feedback_add_details("wizard_spell_learned","TP") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells usr.spell_list += new /obj/effect/proc_holder/spell/targeted/area_teleport/teleport(usr) src.temp = "This spell teleports you to a type of area of your selection. Very useful if you are in danger, but has a decent cooldown, and is unpredictable." if ("11") - feedback_add_details("wizard_spell_learned","MU") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells + //feedback_add_details("wizard_spell_learned","MU") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells usr.spell_list += new /obj/effect/proc_holder/spell/targeted/genetic/mutate(usr) src.temp = "This spell causes you to turn into a hulk and gain telekinesis for a short while." if ("12") - feedback_add_details("wizard_spell_learned","EJ") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells + //feedback_add_details("wizard_spell_learned","EJ") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells usr.spell_list += new /obj/effect/proc_holder/spell/targeted/ethereal_jaunt(usr) src.temp = "This spell creates your ethereal form, temporarily making you invisible and able to pass through walls." if ("13") - feedback_add_details("wizard_spell_learned","KN") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells + //feedback_add_details("wizard_spell_learned","KN") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells usr.spell_list += new /obj/effect/proc_holder/spell/aoe_turf/knock(usr) src.temp = "This spell opens nearby doors and does not require wizard garb." - if ("14") - feedback_add_details("wizard_spell_learned","ST") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells +// if ("14") +// //feedback_add_details("wizard_spell_learned","SG") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells +// usr.verbs += /client/proc/rightandwrong +// src.max_uses-- +// src.temp = "Nothing could possibly go wrong with arming a crew of lunatics just itching for an excuse to kill eachother. Just be careful not to get hit in the crossfire!" + if ("15") + //feedback_add_details("wizard_spell_learned","ST") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells new /obj/item/weapon/gun/energy/staff(get_turf(usr)) src.temp = "An artefact that spits bolts of coruscating energy which cause the target's very form to reshape itself" src.max_uses-- - if ("15") - feedback_add_details("wizard_spell_learned","SS") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells + if ("16") + //feedback_add_details("wizard_spell_learned","SS") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells new /obj/item/weapon/storage/belt/soulstone/full(get_turf(usr)) - src.temp = "Soul Stone Shards are ancient tools capable of capturing and harnessing the spirits of the dead and dying" + usr.spell_list += new /obj/effect/proc_holder/spell/aoe_turf/conjure/construct(usr) + src.temp = "Soul Stone Shards are ancient tools capable of capturing and harnessing the spirits of the dead and dying. The spell Artificer allows you to create arcane machines for the captured souls to pilot." src.max_uses-- - if (href_list["spell_choice"] == "16") +// if ("17") +// //feedback_add_details("wizard_spell_learned","VR") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells +// new /obj/item/weapon/veilrender(get_turf(usr)) +// src.temp = "Recovered from a shattered temple in what was speculated to be the ruins of an alien capital city, the blade is said to cut more than just the material. There was no trace of the blades creators, nor of any other life left on the dead planet, and what caused such an apocalypse remains a mystery.(Activate inhand to trigger its special ability)" +// src.max_uses-- + if (href_list["spell_choice"] == "18") var/area/wizard_station/A = locate() if(usr in A.contents) src.uses = src.max_uses diff --git a/code/game/magic/cultist/runes.dm b/code/game/magic/cultist/runes.dm index 6691b3b571d..14b7a63bd95 100644 --- a/code/game/magic/cultist/runes.dm +++ b/code/game/magic/cultist/runes.dm @@ -306,7 +306,7 @@ var/list/sacrificed = list() body_to_sacrifice.visible_message("\red [body_to_sacrifice] is torn apart, a black smoke swiftly dissipating from his remains!", \ "\red You feel as your blood boils, tearing you apart.", \ "\red You hear a thousand voices, all crying in pain.") - body_to_sacrifice.gib(1) + body_to_sacrifice.gib() if (ticker.mode.name == "cult") ticker.mode:add_cultist(body_to_sacrifice.mind) else @@ -571,7 +571,7 @@ var/list/sacrificed = list() if(H.mind == ticker.mode:sacrifice_target) if(cultsinrange.len >= 3) sacrificed += H.mind - H.gib(1) + H.gib() usr << "\red The Geometer of Blood accepts this sacrifice, your objective is now complete." else usr << "\red Your target's earthly bonds are too strong. You need more cultists to succeed in this ritual." @@ -584,7 +584,7 @@ var/list/sacrificed = list() else usr << "\red The Geometer of blood accepts this sacrifice." usr << "\red However, this soul was not enough to gain His favor." - H.gib(1) + H.gib() else if(prob(40)) usr << "\red The Geometer of blood accepts this sacrifice." @@ -592,7 +592,7 @@ var/list/sacrificed = list() else usr << "\red The Geometer of blood accepts this sacrifice." usr << "\red However, a mere dead body is not enough to satisfy Him." - H.gib(1) + H.gib() else if(H.stat !=2) usr << "\red The victim is still alive, you will need more cultists chanting for the sacrifice to succeed." @@ -603,17 +603,36 @@ var/list/sacrificed = list() else usr << "\red The Geometer of blood accepts this sacrifice." usr << "\red However, a mere dead body is not enough to satisfy Him." - H.gib(1) + H.gib() else if(cultsinrange.len >= 3) - H.gib(1) - usr << "\red The Geometer of Blood accepts this sacrifice." + if(H.stat !=2) + if(prob(80)) + usr << "\red The Geometer of Blood accepts this sacrifice." + ticker.mode:grant_runeword(usr) + else + usr << "\red The Geometer of blood accepts this sacrifice." + usr << "\red However, this soul was not enough to gain His favor." + H.gib() + else + if(prob(40)) + usr << "\red The Geometer of blood accepts this sacrifice." + ticker.mode:grant_runeword(usr) + else + usr << "\red The Geometer of blood accepts this sacrifice." + usr << "\red However, a mere dead body is not enough to satisfy Him." + H.gib() else if(H.stat !=2) usr << "\red The victim is still alive, you will need more cultists chanting for the sacrifice to succeed." else - H.gib(1) - usr << "\red The Geometer of blood accepts this sacrifice." + if(prob(40)) + usr << "\red The Geometer of blood accepts this sacrifice." + ticker.mode:grant_runeword(usr) + else + usr << "\red The Geometer of blood accepts this sacrifice." + usr << "\red However, a mere dead body is not enough to satisfy Him." + H.gib() for(var/mob/living/carbon/monkey/M in src.loc) if (ticker.mode.name == "cult") if(M.mind == ticker.mode:sacrifice_target) @@ -632,11 +651,13 @@ var/list/sacrificed = list() usr << "\red However, a mere monkey is not enough to satisfy Him." else usr << "\red The Geometer of Blood accepts your meager sacrifice." - M.gib(1) + if(prob(20)) + ticker.mode.grant_runeword(usr) + M.gib() /* for(var/mob/living/carbon/alien/A) for(var/mob/K in cultsinrange) K.say("Barhah hra zar'garis!") - A.dust() /// A.gib(1) doesnt work for some reason, and dust() leaves that skull and bones thingy which we dont really need. + A.dust() /// A.gib() doesnt work for some reason, and dust() leaves that skull and bones thingy which we dont really need. if (ticker.mode.name == "cult") if(prob(75)) usr << "\red The Geometer of Blood accepts your exotic sacrifice." @@ -661,7 +682,7 @@ var/list/sacrificed = list() if (istype(W,/obj/item/weapon/paper/talisman)) rad = 4 go = 1 - if (istype(W,/obj/item/weapon/storage/bible)) + if (istype(W,/obj/item/weapon/nullrod)) rad = 1 go = 1 if(go) @@ -670,7 +691,7 @@ var/list/sacrificed = list() R:visibility=15 S=1 if(S) - if(istype(W,/obj/item/weapon/storage/bible)) + if(istype(W,/obj/item/weapon/nullrod)) usr << "\red Arcane markings suddenly glow from underneath a thin layer of dust!" return if(istype(W,/obj/effect/rune)) @@ -770,7 +791,7 @@ var/list/sacrificed = list() if (cultist == user) //just to be sure. return if(cultist.buckled || cultist.handcuffed || (!isturf(cultist.loc) && !istype(cultist.loc, /obj/structure/closet))) - user << "\red You cannot summon the [cultist], for him shackles of blood are strong" + user << "\red You cannot summon the [cultist], for his shackles of blood are strong" return fizzle() cultist.loc = src.loc cultist.lying = 1 @@ -793,6 +814,9 @@ var/list/sacrificed = list() for(var/mob/living/carbon/C in range(7,src)) if (iscultist(C)) continue + var/obj/item/weapon/nullrod/N = locate() in C + if(N) + continue C.ear_deaf += 50 C.show_message("\red The world around you suddenly becomes quiet.", 3) affected++ @@ -809,6 +833,9 @@ var/list/sacrificed = list() for(var/mob/living/carbon/C in range(7,usr)) if (iscultist(C)) continue + var/obj/item/weapon/nullrod/N = locate() in C + if(N) + continue C.ear_deaf += 30 //talismans is weaker. C.show_message("\red The world around you suddenly becomes quiet.", 3) @@ -827,6 +854,9 @@ var/list/sacrificed = list() for(var/mob/living/carbon/C in viewers(src)) if (iscultist(C)) continue + var/obj/item/weapon/nullrod/N = locate() in C + if(N) + continue C.eye_blurry += 50 C.eye_blind += 20 if(prob(5)) @@ -846,6 +876,9 @@ var/list/sacrificed = list() for(var/mob/living/carbon/C in viewers(usr)) if (iscultist(C)) continue + var/obj/item/weapon/nullrod/N = locate() in C + if(N) + continue C.eye_blurry += 30 C.eye_blind += 10 //talismans is weaker. @@ -873,11 +906,14 @@ var/list/sacrificed = list() for(var/mob/living/carbon/M in viewers(usr)) if(iscultist(M)) continue + var/obj/item/weapon/nullrod/N = locate() in M + if(N) + continue M.take_overall_damage(51,51) M << "\red Your blood boils!" if(prob(5)) spawn(5) - M.gib(1) + M.gib() for(var/obj/effect/rune/R in view(src)) if(prob(10)) explosion(R.loc, -1, 0, 1, 5) @@ -933,14 +969,19 @@ var/list/sacrificed = list() del(src) else ///When invoked as talisman, stun and mute the target mob. usr.say("Dream sign ''Evil sealing talisman''!") - for(var/mob/O in viewers(T, null)) - O.show_message(text("\red [] invokes a talisman at []", usr, T), 1) - flick("e_flash", T.flash) - if (!(T.mutations & HULK)) - T.silent += 15 - T.Weaken(25) - T.Stun(25) - return + var/obj/item/weapon/nullrod/N = locate() in T + if(N) + for(var/mob/O in viewers(T, null)) + O.show_message(text("\red [] invokes a talisman at [], but they are unaffected!", usr, T), 1) + else + for(var/mob/O in viewers(T, null)) + O.show_message(text("\red [] invokes a talisman at []", usr, T), 1) + flick("e_flash", T.flash) + if (!(T.mutations & HULK)) + T.silent += 15 + T.Weaken(25) + T.Stun(25) + return /////////////////////////////////////////TWENTY-FIFTH RUNE diff --git a/code/game/magic/cultist/talisman.dm b/code/game/magic/cultist/talisman.dm index 30abdbe3a56..5b4498c6bc7 100644 --- a/code/game/magic/cultist/talisman.dm +++ b/code/game/magic/cultist/talisman.dm @@ -73,6 +73,7 @@ dat += "Fuu ma'jin - Allows you to stun a person by attacking them with the talisman.
" dat += "Sa tatha najin - Allows you to summon armoured robes and an unholy blade
" dat += "Kal om neth - Summons a soul stone
" + dat += "Da A'ig Osk - Summons a construct shell for use with captured souls. It is too large to carry on your person.
" usr << browse(dat, "window=id_com;size=350x200") return @@ -107,6 +108,8 @@ T.imbue = "armor" if("soulstone") new /obj/item/device/soulstone(get_turf(usr)) + if("construct") + new /obj/structure/constructshell(get_turf(usr)) src.uses-- supply() return diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 4ff27d3ee2f..469395cd2b6 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -106,6 +106,7 @@ if (sprite == "Non-Humanoid") src.icon_state = "surgeon" modtype = "Med" + nopush = 1 channels = list("Medical" = 1) if("Security")