Merge pull request #1802 from TheDZD/touch-spell

Wizard Touch Attacks and Staff Fixes
This commit is contained in:
Fox-McCloud
2015-08-21 23:01:02 -04:00
11 changed files with 153 additions and 38 deletions
+69
View File
@@ -0,0 +1,69 @@
/obj/effect/proc_holder/spell/targeted/touch/
var/hand_path = "/obj/item/weapon/melee/touch_attack"
var/obj/item/weapon/melee/touch_attack/attached_hand = null
invocation_type = "none" //you scream on connecting, not summoning
include_user = 1
range = -1
/obj/effect/proc_holder/spell/targeted/touch/Click(mob/user = usr)
if(attached_hand)
qdel(attached_hand)
charge_counter = charge_max
attached_hand = null
user << "<span class='notice'>You draw the power out of your hand.</span>"
return 0
..()
/obj/effect/proc_holder/spell/targeted/touch/cast(list/targets)
for(var/mob/living/carbon/user in targets)
if(!attached_hand)
if(!ChargeHand(user))
return 0
while(attached_hand) //hibernate untill the spell is actually used
charge_counter = 0
sleep(1)
/obj/effect/proc_holder/spell/targeted/touch/proc/ChargeHand(mob/living/carbon/user)
var/hand_handled = 1
attached_hand = new hand_path(src)
if(user.hand) //left active hand
if(!user.equip_to_slot_if_possible(attached_hand, slot_l_hand, 0, 1, 1))
if(!user.equip_to_slot_if_possible(attached_hand, slot_r_hand, 0, 1, 1))
hand_handled = 0
else //right active hand
if(!user.equip_to_slot_if_possible(attached_hand, slot_r_hand, 0, 1, 1))
if(!user.equip_to_slot_if_possible(attached_hand, slot_l_hand, 0, 1, 1))
hand_handled = 0
if(!hand_handled)
qdel(attached_hand)
charge_counter = charge_max
attached_hand = null
user << "<span class='warning'>Your hands are full!</span>"
return 0
user << "<span class='notice'>You channel the power of the spell to your hand.</span>"
return 1
/obj/effect/proc_holder/spell/targeted/touch/disintegrate
name = "Disintegrate"
desc = "This spell charges your hand with vile energy that can be used to violently explode victims."
hand_path = "/obj/item/weapon/melee/touch_attack/disintegrate"
school = "evocation"
charge_max = 600
clothes_req = 1
cooldown_min = 200 //100 deciseconds reduction per rank
action_icon_state = "gib"
/obj/effect/proc_holder/spell/targeted/touch/flesh_to_stone
name = "Flesh to Stone"
desc = "This spell charges your hand with the power to turn victims into inert statues for a long period of time."
hand_path = "/obj/item/weapon/melee/touch_attack/fleshtostone"
school = "transmutation"
charge_max = 600
clothes_req = 1
cooldown_min = 200 //100 deciseconds reduction per rank
action_icon_state = "statue"
-36
View File
@@ -54,25 +54,6 @@
action_icon_state = "mutate"
/obj/effect/proc_holder/spell/targeted/inflict_handler/disintegrate
name = "Disintegrate"
desc = "This spell instantly kills somebody adjacent to you with the vilest of magick."
school = "evocation"
charge_max = 600
clothes_req = 1
invocation = "EI NATH"
invocation_type = "shout"
range = 1
cooldown_min = 200 //100 deciseconds reduction per rank
destroys = "gib_brain"
sparks_spread = 1
sparks_amt = 4
action_icon_state = "gib"
/obj/effect/proc_holder/spell/targeted/smoke
name = "Smoke"
desc = "This spell spawns a cloud of choking smoke at your location and does not require wizard garb."
@@ -233,23 +214,6 @@
disabilities = 1
duration = 300
/obj/effect/proc_holder/spell/targeted/inflict_handler/flesh_to_stone
name = "Flesh to Stone"
desc = "This spell turns a single person into an inert statue for a long period of time."
school = "transmutation"
charge_max = 600
clothes_req = 1
range = 2
invocation = "STAUN EI"
invocation_type = "shout"
amt_stunned = 2//just exists to make sure the statue "catches" them
cooldown_min = 200 //100 deciseconds reduction per rank
summon_type = "/obj/structure/closet/statue"
action_icon_state = "statue"
/obj/effect/proc_holder/spell/dumbfire/fireball
name = "Fireball"
desc = "This spell fires a fireball at a target and does not require wizard garb."
+78
View File
@@ -0,0 +1,78 @@
/obj/item/weapon/melee/touch_attack
name = "\improper outstretched hand"
desc = "High Five?"
var/catchphrase = "High Five!"
var/on_use_sound = null
var/obj/effect/proc_holder/spell/targeted/touch/attached_spell
icon = 'icons/obj/weapons.dmi'
icon_state = "syndballoon"
item_state = null
flags = ABSTRACT | NODROP
w_class = 5.0
force = 0
throwforce = 0
throw_range = 0
throw_speed = 0
/obj/item/weapon/melee/touch_attack/New(var/spell)
attached_spell = spell
..()
/obj/item/weapon/melee/touch_attack/attack(mob/target, mob/living/carbon/user)
if(!iscarbon(user)) //Look ma, no hands
return
if(user.lying || user.handcuffed)
user << "<span class='warning'>You can't reach out!</span>"
return
..()
/obj/item/weapon/melee/touch_attack/afterattack(atom/target, mob/user, proximity)
user.say(catchphrase)
playsound(get_turf(user), on_use_sound,50,1)
attached_spell.attached_hand = null
qdel(src)
/obj/item/weapon/melee/touch_attack/disintegrate
name = "\improper disintegrating touch"
desc = "This hand of mine glows with an awesome power!"
catchphrase = "EI NATH!!"
on_use_sound = "sound/magic/Disintegrate.ogg"
icon_state = "disintegrate"
item_state = "disintegrate"
icon_override = 'icons/mob/in-hand/spells.dmi'
/obj/item/weapon/melee/touch_attack/disintegrate/afterattack(atom/target, mob/living/carbon/user, proximity)
if(!proximity || target == user || !ismob(target) || !iscarbon(user) || user.lying || user.handcuffed) //exploding after touching yourself would be bad
return
var/mob/M = target
if(ishuman(M) || issmall(M))
var/mob/living/carbon/C_target = M
var/obj/item/organ/brain/B
if(C_target.brain_op_stage != 4) // Their brain is already taken out
B = new(C_target.loc)
B.transfer_identity(C_target)
var/datum/effect/effect/system/spark_spread/sparks = new
sparks.set_up(4, 0, M.loc) //no idea what the 0 is
sparks.start()
M.gib()
..()
/obj/item/weapon/melee/touch_attack/fleshtostone
name = "\improper petrifying touch"
desc = "That's the bottom line, because flesh to stone said so!"
catchphrase = "STAUN EI!!"
on_use_sound = "sound/magic/FleshToStone.ogg"
icon_state = "fleshtostone"
item_state = "fleshtostone"
icon_override = 'icons/mob/in-hand/spells.dmi'
/obj/item/weapon/melee/touch_attack/fleshtostone/afterattack(atom/target, mob/living/carbon/user, proximity)
if(!proximity || target == user || !ismob(target) || !iscarbon(user) || user.lying || user.handcuffed) //getting hard after touching yourself would also be bad
return
if(user.lying || user.handcuffed)
user << "<span class='warning'>You can't reach out!</span>"
return
var/mob/M = target
M.Stun(2)
new /obj/structure/closet/statue(M.loc, M)
..()
+2 -2
View File
@@ -111,7 +111,7 @@
/datum/spellbook_entry/disintegrate
name = "Disintegrate"
spell_type = /obj/effect/proc_holder/spell/targeted/inflict_handler/disintegrate
spell_type = /obj/effect/proc_holder/spell/targeted/touch/disintegrate
log_name = "DG"
/datum/spellbook_entry/disabletech
@@ -185,7 +185,7 @@
/datum/spellbook_entry/fleshtostone
name = "Flesh to Stone"
spell_type = /obj/effect/proc_holder/spell/targeted/inflict_handler/flesh_to_stone
spell_type = /obj/effect/proc_holder/spell/targeted/touch/flesh_to_stone
log_name = "FS"
/datum/spellbook_entry/summonitem
@@ -14,6 +14,7 @@ obj/item/weapon/gun/magic/staff/animate
projectile_type = "/obj/item/projectile/magic/animate"
icon_state = "staffofanimation"
item_state = "staffofanimation"
icon_override = 'icons/mob/in-hand/staff.dmi'
obj/item/weapon/gun/magic/staff/healing
name = "staff of healing"
@@ -21,6 +22,7 @@ obj/item/weapon/gun/magic/staff/healing
projectile_type = "/obj/item/projectile/magic/resurrection"
icon_state = "staffofhealing"
item_state = "staffofhealing"
icon_override = 'icons/mob/in-hand/staff.dmi'
obj/item/weapon/gun/magic/staff/chaos
name = "staff of chaos"