Cleans up touch spells (#37715)
* Cleans up touch spells * Silent param * Oh god i'm blind.
This commit is contained in:
@@ -144,7 +144,6 @@ GLOBAL_LIST_INIT(spells, typesof(/obj/effect/proc_holder/spell)) //needed for th
|
||||
var/smoke_spread = 0 //1 - harmless, 2 - harmful
|
||||
var/smoke_amt = 0 //cropped at 10
|
||||
|
||||
var/critfailchance = 0
|
||||
var/centcom_cancast = 1 //Whether or not the spell should be allowed on z2
|
||||
|
||||
action_icon = 'icons/mob/actions/actions_spells.dmi'
|
||||
@@ -153,7 +152,6 @@ GLOBAL_LIST_INIT(spells, typesof(/obj/effect/proc_holder/spell)) //needed for th
|
||||
base_action = /datum/action/spell_action/spell
|
||||
|
||||
/obj/effect/proc_holder/spell/proc/cast_check(skipcharge = 0,mob/user = usr) //checks if the spell can be cast based on its settings; skipcharge is used when an additional cast_check is called inside the spell
|
||||
|
||||
if(player_lock)
|
||||
if(!user.mind || !(src in user.mind.spell_list) && !(src in user.mob_spell_list))
|
||||
to_chat(user, "<span class='warning'>You shouldn't have this spell! Something's wrong.</span>")
|
||||
@@ -168,15 +166,8 @@ GLOBAL_LIST_INIT(spells, typesof(/obj/effect/proc_holder/spell)) //needed for th
|
||||
return 0
|
||||
|
||||
if(!skipcharge)
|
||||
switch(charge_type)
|
||||
if("recharge")
|
||||
if(charge_counter < charge_max)
|
||||
to_chat(user, still_recharging_msg)
|
||||
return 0
|
||||
if("charges")
|
||||
if(!charge_counter)
|
||||
to_chat(user, "<span class='notice'>[name] has no charges left.</span>")
|
||||
return 0
|
||||
if(!charge_check(user))
|
||||
return 0
|
||||
|
||||
if(user.stat && !stat_allowed)
|
||||
to_chat(user, "<span class='notice'>Not when you're incapacitated.</span>")
|
||||
@@ -236,6 +227,20 @@ GLOBAL_LIST_INIT(spells, typesof(/obj/effect/proc_holder/spell)) //needed for th
|
||||
action.UpdateButtonIcon()
|
||||
return 1
|
||||
|
||||
/obj/effect/proc_holder/spell/proc/charge_check(mob/user, silent = FALSE)
|
||||
switch(charge_type)
|
||||
if("recharge")
|
||||
if(charge_counter < charge_max)
|
||||
if(!silent)
|
||||
to_chat(user, still_recharging_msg)
|
||||
return FALSE
|
||||
if("charges")
|
||||
if(!charge_counter)
|
||||
if(!silent)
|
||||
to_chat(user, "<span class='notice'>[name] has no charges left.</span>")
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
/obj/effect/proc_holder/spell/proc/invocation(mob/user = usr) //spelling the spell out and setting it on recharge/reducing charges amount
|
||||
switch(invocation_type)
|
||||
if("shout")
|
||||
@@ -297,10 +302,7 @@ GLOBAL_LIST_INIT(spells, typesof(/obj/effect/proc_holder/spell)) //needed for th
|
||||
recharging = TRUE
|
||||
if(sound)
|
||||
playMagSound()
|
||||
if(prob(critfailchance))
|
||||
critfail(targets)
|
||||
else
|
||||
cast(targets,user=user)
|
||||
cast(targets,user=user)
|
||||
after_cast(targets)
|
||||
if(action)
|
||||
action.UpdateButtonIcon()
|
||||
@@ -349,9 +351,6 @@ GLOBAL_LIST_INIT(spells, typesof(/obj/effect/proc_holder/spell)) //needed for th
|
||||
/obj/effect/proc_holder/spell/proc/cast(list/targets,mob/user = usr)
|
||||
return
|
||||
|
||||
/obj/effect/proc_holder/spell/proc/critfail(list/targets)
|
||||
return
|
||||
|
||||
/obj/effect/proc_holder/spell/proc/revert_cast(mob/user = usr) //resets recharge or readds a charge
|
||||
switch(charge_type)
|
||||
if("recharge")
|
||||
@@ -500,25 +499,20 @@ GLOBAL_LIST_INIT(spells, typesof(/obj/effect/proc_holder/spell)) //needed for th
|
||||
|
||||
/obj/effect/proc_holder/spell/proc/can_cast(mob/user = usr)
|
||||
if(((!user.mind) || !(src in user.mind.spell_list)) && !(src in user.mob_spell_list))
|
||||
return 0
|
||||
return FALSE
|
||||
|
||||
switch(charge_type)
|
||||
if("recharge")
|
||||
if(charge_counter < charge_max)
|
||||
return 0
|
||||
if("charges")
|
||||
if(!charge_counter)
|
||||
return 0
|
||||
if(!charge_check(user,TRUE))
|
||||
return FALSE
|
||||
|
||||
if(user.stat && !stat_allowed)
|
||||
return 0
|
||||
return FALSE
|
||||
|
||||
if(!ishuman(user))
|
||||
if(clothes_req || human_req)
|
||||
return 0
|
||||
return FALSE
|
||||
if(nonabstract_req && (isbrain(user) || ispAI(user)))
|
||||
return 0
|
||||
return 1
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
/obj/effect/proc_holder/spell/self //Targets only the caster. Good for buffs and heals, but probably not wise for fireballs (although they usually fireball themselves anyway, honke)
|
||||
range = -1 //Duh
|
||||
|
||||
@@ -13,10 +13,7 @@
|
||||
throwforce = 0
|
||||
throw_range = 0
|
||||
throw_speed = 0
|
||||
|
||||
/obj/item/melee/touch_attack/Initialize()
|
||||
attached_spell = loc
|
||||
. = ..()
|
||||
var/charges = 1
|
||||
|
||||
/obj/item/melee/touch_attack/attack(mob/target, mob/living/carbon/user)
|
||||
if(!iscarbon(user)) //Look ma, no hands
|
||||
@@ -29,13 +26,13 @@
|
||||
/obj/item/melee/touch_attack/afterattack(atom/target, mob/user, proximity)
|
||||
user.say(catchphrase)
|
||||
playsound(get_turf(user), on_use_sound,50,1)
|
||||
if(attached_spell)
|
||||
attached_spell.attached_hand = null
|
||||
qdel(src)
|
||||
charges--
|
||||
if(charges <= 0)
|
||||
qdel(src)
|
||||
|
||||
/obj/item/melee/touch_attack/Destroy()
|
||||
if(attached_spell)
|
||||
attached_spell.attached_hand = null
|
||||
attached_spell.on_hand_destroy(src)
|
||||
return ..()
|
||||
|
||||
/obj/item/melee/touch_attack/disintegrate
|
||||
|
||||
@@ -1,37 +1,46 @@
|
||||
/obj/effect/proc_holder/spell/targeted/touch
|
||||
var/hand_path = "/obj/item/melee/touch_attack"
|
||||
var/hand_path = /obj/item/melee/touch_attack
|
||||
var/obj/item/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)
|
||||
/obj/effect/proc_holder/spell/targeted/touch/proc/remove_hand(recharge = FALSE)
|
||||
QDEL_NULL(attached_hand)
|
||||
if(recharge)
|
||||
charge_counter = charge_max
|
||||
attached_hand = null
|
||||
to_chat(user, "<span class='notice'>You draw the power out of your hand.</span>")
|
||||
return FALSE
|
||||
..()
|
||||
|
||||
/obj/effect/proc_holder/spell/targeted/touch/proc/on_hand_destroy(obj/item/melee/touch_attack/hand)
|
||||
if(hand != attached_hand)
|
||||
CRASH("Incorrect touch spell hand.")
|
||||
//Start recharging.
|
||||
attached_hand = null
|
||||
recharging = TRUE
|
||||
action.UpdateButtonIcon()
|
||||
|
||||
/obj/effect/proc_holder/spell/targeted/touch/cast(list/targets,mob/user = usr)
|
||||
if(!QDELETED(attached_hand))
|
||||
remove_hand(TRUE)
|
||||
to_chat(user, "<span class='notice'>You draw the power out of your hand.</span>")
|
||||
return
|
||||
|
||||
for(var/mob/living/carbon/C in targets)
|
||||
if(!attached_hand)
|
||||
if(!ChargeHand(C))
|
||||
return FALSE
|
||||
while(attached_hand)
|
||||
charge_counter = 0
|
||||
stoplag(1)
|
||||
if(ChargeHand(C))
|
||||
recharging = FALSE
|
||||
return
|
||||
|
||||
/obj/effect/proc_holder/spell/targeted/touch/can_cast(mob/user = usr)
|
||||
return ..() && attached_hand
|
||||
/obj/effect/proc_holder/spell/targeted/touch/charge_check(mob/user,silent = FALSE)
|
||||
if(!QDELETED(attached_hand)) //Charge doesn't matter when putting the hand away.
|
||||
return TRUE
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/effect/proc_holder/spell/targeted/touch/proc/ChargeHand(mob/living/carbon/user)
|
||||
attached_hand = new hand_path(src)
|
||||
attached_hand.attached_spell = src
|
||||
if(!user.put_in_hands(attached_hand))
|
||||
qdel(attached_hand)
|
||||
charge_counter = charge_max
|
||||
attached_hand = null
|
||||
remove_hand(TRUE)
|
||||
to_chat(user, "<span class='warning'>Your hands are full!</span>")
|
||||
return FALSE
|
||||
to_chat(user, "<span class='notice'>You channel the power of the spell to your hand.</span>")
|
||||
@@ -41,7 +50,7 @@
|
||||
/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/melee/touch_attack/disintegrate"
|
||||
hand_path = /obj/item/melee/touch_attack/disintegrate
|
||||
|
||||
school = "evocation"
|
||||
charge_max = 600
|
||||
@@ -53,7 +62,7 @@
|
||||
/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/melee/touch_attack/fleshtostone"
|
||||
hand_path = /obj/item/melee/touch_attack/fleshtostone
|
||||
|
||||
school = "transmutation"
|
||||
charge_max = 600
|
||||
|
||||
Reference in New Issue
Block a user