The armoured construct is now known as the Juggernaut. Its health was lowered and it takes massive damage from being hit with a bible. The Juggernaut has a lesser version of force wall.

Added the Wraith construct, a faster, more fragile construct which has a lesser version of Ethereal Jaunt. It too is vulnerable to bibles.

The Chaplain is now immune to blood boil, stun talismans, and cult blind/deafen

Constructs are finally creatable by using a full soulstone on an empty construct shell. The creator will be able to choose which kind of construct is created.

Cultists can get construct shells from their supply talisman

Wizards now get the spell "Artificer" which allows them to create construct shells for free when they select the soulstone belt.

Medical Borgs are now relentless to prevent them losing hold of incapacitated patients.

Added the Artificer (conjure construct shell), Phase Shift (lesser jaunt), and Shield (lesser forcewall) spells

git-svn-id: http://tgstation13.googlecode.com/svn/trunk@3054 316c924e-a436-60f5-8080-3fe189b3f50e
This commit is contained in:
kortgstation@gmail.com
2012-02-08 02:58:30 +00:00
parent d3643b021f
commit b324db9b7e
9 changed files with 243 additions and 26 deletions
+44 -1
View File
@@ -134,6 +134,19 @@
summon_type = list("/obj/effect/forcefield")
summon_lifespan = 300
/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 = 100
/obj/effect/proc_holder/spell/aoe_turf/conjure/carp
name = "Summon Bigger Carp"
desc = "This spell conjures an elite carp."
@@ -147,6 +160,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 = 1
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 +239,19 @@
ex_severe = -1
ex_heavy = -1
ex_light = 2
ex_flash = 5
ex_flash = 5
/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 = 20
clothes_req = 0
invocation = "none"
invocation_type = "none"
range = -1
include_user = 1
jaunt_duration = 25 //in deciseconds
+43 -1
View File
@@ -9,6 +9,7 @@
origin_tech = "bluespace=4;materials=4"
var/imprinted = "empty"
//////////////////////////////Capturing////////////////////////////////////////////////////////
attack(mob/living/carbon/human/M as mob, mob/user as mob)
@@ -75,7 +76,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//////////////////////////////////////
@@ -120,7 +131,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 <b>Capture successful!</b>: \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")
@@ -142,4 +153,35 @@
C.icon_state = "soulstone2"
T << "Your soul has been recaptured by the soul stone, its arcane energies are reknitting your ethereal form"
U << "\blue <b>Capture successful!</b>: \black [T.name]'s has been recaptured and stored within the soul stone."
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")
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 << "<B>You are playing a Juggernaut. Though slow, you can withstand extreme punishment, and rip apart enemies and walls alike.</B>"
Z << "<B>You are still bound to serve your creator, follow their orders and help them complete their goals at all costs.</B>"
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 << "<B>You are playing a Wraith. Though relatively fragile, you are fast, deadly, and even able to phase through walls.</B>"
Z << "<B>You are still bound to serve your creator, follow their orders and help them complete their goals at all costs.</B>"
Z.spell_list += new /obj/effect/proc_holder/spell/targeted/ethereal_jaunt/shift(Z)
Z.cancel_camera()
del(C)
else
U << "\red <b>Creation failed!</b>: \black The soul stone is empty! Go kill someone!"
return
+3 -2
View File
@@ -32,7 +32,7 @@
dat += "<HR>"
dat += "<A href='byond://?src=\ref[src];spell_choice=14'>Staff of Change</A><BR>"
dat += "<HR>"
dat += "<A href='byond://?src=\ref[src];spell_choice=15'>Six Soul Stone Shards</A><BR>"
dat += "<A href='byond://?src=\ref[src];spell_choice=15'>Six Soul Stone Shards and the spell Artificer</A><BR>"
dat += "<HR>"
dat += "<A href='byond://?src=\ref[src];spell_choice=16'>Re-memorize Spells</A><BR>"
user << browse(dat, "window=radio")
@@ -184,7 +184,8 @@
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
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")
var/area/wizard_station/A = locate()
+22 -8
View File
@@ -782,6 +782,8 @@ var/list/sacrificed = list()
for(var/mob/living/carbon/C in range(7,src))
if (iscultist(C))
continue
if(C.mind && (C.mind.assigned_role == "Chaplain"))
continue
C.ear_deaf += 50
C.show_message("\red The world around you suddenly becomes quiet.", 3)
affected++
@@ -798,6 +800,8 @@ var/list/sacrificed = list()
for(var/mob/living/carbon/C in range(7,usr))
if (iscultist(C))
continue
if(C.mind && (C.mind.assigned_role == "Chaplain"))
continue
C.ear_deaf += 30
//talismans is weaker.
C.show_message("\red The world around you suddenly becomes quiet.", 3)
@@ -816,6 +820,8 @@ var/list/sacrificed = list()
for(var/mob/living/carbon/C in viewers(src))
if (iscultist(C))
continue
if(C.mind && (C.mind.assigned_role == "Chaplain"))
continue
C.eye_blurry += 50
C.eye_blind += 20
if(prob(5))
@@ -835,6 +841,8 @@ var/list/sacrificed = list()
for(var/mob/living/carbon/C in viewers(usr))
if (iscultist(C))
continue
if(C.mind && (C.mind.assigned_role == "Chaplain"))
continue
C.eye_blurry += 30
C.eye_blind += 10
//talismans is weaker.
@@ -862,6 +870,8 @@ var/list/sacrificed = list()
for(var/mob/living/carbon/M in viewers(usr))
if(iscultist(M))
continue
if(M.mind && (M.mind.assigned_role == "Chaplain"))
continue
M.take_overall_damage(51,51)
M << "\red Your blood boils!"
if(prob(5))
@@ -922,14 +932,18 @@ 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 <B>[] invokes a talisman at []</B>", usr, T), 1)
flick("e_flash", T.flash)
if (!(T.mutations & HULK))
T.silent += 15
T.Weaken(25)
T.Stun(25)
return
if(T.mind && (T.mind.assigned_role == "Chaplain"))
for(var/mob/O in viewers(T, null))
O.show_message(text("\red <B>[] invokes a talisman at [], but they are unaffected!</B>", usr, T), 1)
else
for(var/mob/O in viewers(T, null))
O.show_message(text("\red <B>[] invokes a talisman at []</B>", 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
+3
View File
@@ -73,6 +73,7 @@
dat += "<A href='?src=\ref[src];rune=runestun'>Fuu ma'jin</A> - Allows you to stun a person by attacking them with the talisman.<BR>"
dat += "<A href='?src=\ref[src];rune=armor'>Sa tatha najin</A> - Allows you to summon armoured robes and an unholy blade<BR>"
dat += "<A href='?src=\ref[src];rune=soulstone'>Kal om neth</A> - Summons a soul stone<BR>"
dat += "<A href='?src=\ref[src];rune=construct'>Da A'ig Osk</A> - Summons a construct shell for use with captured souls. It is too large to carry on your person.<BR>"
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
@@ -99,6 +99,7 @@
hands.icon_state = "medical"
icon_state = "surgeon"
modtype = "Med"
relentless = 1
if("Security")
module = new /obj/item/weapon/robot_module/security(src)
+120 -14
View File
@@ -1,12 +1,12 @@
/mob/living/simple_animal/constructarmoured
name = "Dread Armour"
name = "Juggernaut"
desc = "A possessed suit of armour driven by the will of the restless dead"
icon = 'mob.dmi'
icon_state = "armour"
icon_living = "armour"
icon_dead = "shade_dead"
maxHealth = 300
health = 300
maxHealth = 250
health = 250
speak_emote = list("hisses")
emote_hear = list("wails","screeches")
response_help = "thinks better of touching"
@@ -37,21 +37,30 @@
return
/mob/living/simple_animal/constructarmoured/attackby(var/obj/item/O as obj, var/mob/user as mob)
if(O.force)
if(O.force >= 11)
health -= O.force
if(istype(O, /obj/item/weapon/storage/bible))
if(user.mind && (user.mind.assigned_role == "Chaplain"))
health -= 75
for(var/mob/M in viewers(src, null))
if ((M.client && !( M.blinded )))
M.show_message("\red \b [src] has been attacked with the [O] by [user]. ")
M.show_message("\red \b [src] lets out a pained screech, its armoured skin fizzling and melting. ")
else
usr << "\red Your faith is not strong enough!"
else
if(O.force)
if(O.force >= 11)
health -= O.force
for(var/mob/M in viewers(src, null))
if ((M.client && !( M.blinded )))
M.show_message("\red \b [src] has been attacked with the [O] by [user]. ")
else
for(var/mob/M in viewers(src, null))
if ((M.client && !( M.blinded )))
M.show_message("\red \b The [O] bounces harmlessly off of [src]. ")
else
usr << "\red This weapon is ineffective, it does no damage."
for(var/mob/M in viewers(src, null))
if ((M.client && !( M.blinded )))
M.show_message("\red \b The [O] bounces harmlessly off of [src]. ")
else
usr << "\red This weapon is ineffective, it does no damage."
for(var/mob/M in viewers(src, null))
if ((M.client && !( M.blinded )))
M.show_message("\red [user] gently taps [src] with the [O]. ")
M.show_message("\red [user] gently taps [src] with the [O]. ")
/mob/living/simple_animal/constructarmoured/Bump(atom/movable/AM as mob|obj, yes)
@@ -88,4 +97,101 @@
step(AM, t)
now_pushing = null
return
return
return
/mob/living/simple_animal/constructwraith
name = "Wraith"
desc = "A wicked bladed shell contraption piloted by a bound spirit"
icon = 'mob.dmi'
icon_state = "floating"
icon_living = "floating"
icon_dead = "shade_dead"
maxHealth = 75
health = 75
speak_emote = list("hisses")
emote_hear = list("wails","screeches")
response_help = "thinks better of touching"
response_disarm = "flails at"
response_harm = "punches the"
melee_damage_lower = 25
melee_damage_upper = 25
attacktext = "slashes"
minbodytemp = 0
maxbodytemp = 4000
min_oxy = 0
max_co2 = 0
max_tox = 0
speed = -1
a_intent = "harm"
stop_automated_movement = 1
Life()
..()
if(stat == 2)
for(var/mob/M in viewers(src, null))
if((M.client && !( M.blinded )))
M.show_message("\red [src] collapses in a shattered heap ")
ghostize(0)
del src
return
/mob/living/simple_animal/constructwraith/attackby(var/obj/item/O as obj, var/mob/user as mob)
if(istype(O, /obj/item/weapon/storage/bible))
if(user.mind && (user.mind.assigned_role == "Chaplain"))
health -= 75
for(var/mob/M in viewers(src, null))
if ((M.client && !( M.blinded )))
M.show_message("\red \b [src] lets out a pained screech, its armoured skin fizzling and melting. ")
else
usr << "\red Your faith is not strong enough!"
else
if(O.force)
health -= O.force
for(var/mob/M in viewers(src, null))
if ((M.client && !( M.blinded )))
M.show_message("\red \b [src] has been attacked with the [O] by [user]. ")
else
usr << "\red This weapon is ineffective, it does no damage."
for(var/mob/M in viewers(src, null))
if ((M.client && !( M.blinded )))
M.show_message("\red [user] gently taps [src] with the [O]. ")
/mob/living/simple_animal/constructwraith/Bump(atom/movable/AM as mob|obj, yes)
spawn( 0 )
if ((!( yes ) || now_pushing))
return
now_pushing = 1
if(ismob(AM))
var/mob/tmob = AM
if(istype(tmob, /mob/living/carbon/human) && tmob.mutations & FAT)
if(prob(50))
src << "\red <B>You fail to push [tmob]'s fat ass out of the way.</B>"
now_pushing = 0
return
if(tmob.relentless)
now_pushing = 0
return
tmob.LAssailant = src
now_pushing = 0
..()
if (!( istype(AM, /atom/movable) ))
return
if (!( now_pushing ))
now_pushing = 1
if (!( AM.anchored ))
var/t = get_dir(src, AM)
if (istype(AM, /obj/structure/window))
if(AM:ini_dir == NORTHWEST || AM:ini_dir == NORTHEAST || AM:ini_dir == SOUTHWEST || AM:ini_dir == SOUTHEAST)
for(var/obj/structure/window/win in get_step(AM,t))
now_pushing = 0
return
step(AM, t)
now_pushing = null
return
return