diff --git a/code/_onclick/other_mobs.dm b/code/_onclick/other_mobs.dm index 5ca614626ff..96301b64cca 100644 --- a/code/_onclick/other_mobs.dm +++ b/code/_onclick/other_mobs.dm @@ -41,6 +41,14 @@ /mob/living/carbon/RestrainedClickOn(atom/A) return 0 +//Ranged override abilities for carbons +/mob/living/carbon/ClickOn(atom/A, params) + if(ranged_ability && !stat) + ranged_ability.use_ability(A, src, params) //Spit at something, use a fireball, etc. + else + return ..(A, params) + + /mob/living/carbon/human/RangedAttack(atom/A) if(gloves) var/obj/item/clothing/gloves/G = gloves diff --git a/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm b/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm index a7ebbeae68a..e169879f8f6 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm @@ -188,26 +188,49 @@ Doesn't work on other aliens/AI.*/ /obj/effect/proc_holder/alien/neurotoxin name = "Spit Neurotoxin" desc = "Spits neurotoxin at someone, paralyzing them for a short time." - plasma_cost = 50 - action_icon_state = "alien_neurotoxin" + action_icon_state = "alien_neurotoxin_0" + var/active = 0 -/obj/effect/proc_holder/alien/neurotoxin/fire(mob/living/carbon/alien/user) - user.visible_message("[user] spits neurotoxin!", "You spit neurotoxin.") +/obj/effect/proc_holder/alien/neurotoxin/fire(mob/living/carbon/user) + if(active) + user.ranged_ability = null + user << "You empty your neurotoxin gland." + active = 0 + else if(user.ranged_ability && user.ranged_ability != src) + user << "You already have another aimed ability readied! Cancel it first." + else + user.ranged_ability = src + active = 1 + user << "You prepare your neurotoxin gland. Left-click to fire at a target!" + + action.button_icon_state = "alien_neurotoxin_[active]" + action.UpdateButtonIcon() + +/obj/effect/proc_holder/alien/neurotoxin/use_ability(atom/target, mob/living/carbon/alien/user, params) + user.face_atom(target) + if(user.getPlasma() < 50) + user << "You need at least 50 plasma to spit." + return var/turf/T = user.loc var/turf/U = get_step(user, user.dir) // Get the tile infront of the move, based on their direction if(!isturf(U) || !isturf(T)) return 0 + user.visible_message("[user] spits neurotoxin!", "You spit neurotoxin.") var/obj/item/projectile/bullet/neurotoxin/A = new /obj/item/projectile/bullet/neurotoxin(user.loc) A.current = U - A.yo = U.y - T.y - A.xo = U.x - T.x + A.preparePixelProjectile(target, get_turf(target), user, params) A.fire() user.newtonian_move(get_dir(U, T)) + user.adjustPlasma(-50) return 1 +/obj/effect/proc_holder/alien/on_lose(mob/living/carbon/user) + if(user.ranged_ability == src) + user.ranged_ability = null + /obj/effect/proc_holder/alien/resin name = "Secrete Resin" diff --git a/code/modules/mob/living/carbon/carbon_defines.dm b/code/modules/mob/living/carbon/carbon_defines.dm index 5baebc33aec..0551ec09ec2 100644 --- a/code/modules/mob/living/carbon/carbon_defines.dm +++ b/code/modules/mob/living/carbon/carbon_defines.dm @@ -32,3 +32,5 @@ var/tinttotal = 0 // Total level of visualy impairing items var/list/bodyparts = list() //Gets filled up in the constructor (New() proc in human.dm and monkey.dm) + + var/obj/effect/proc_holder/ranged_ability //Any ranged ability the mob has, as a click override diff --git a/code/modules/spells/spell.dm b/code/modules/spells/spell.dm index 54c5a5a6b93..65302db16de 100644 --- a/code/modules/spells/spell.dm +++ b/code/modules/spells/spell.dm @@ -6,6 +6,9 @@ var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin verb for now +/obj/effect/proc_holder/proc/use_ability(atom/A) + return + /obj/effect/proc_holder/spell name = "Spell" desc = "A wizard spell" diff --git a/icons/mob/actions.dmi b/icons/mob/actions.dmi index d9724cd6f16..aad70e47354 100644 Binary files a/icons/mob/actions.dmi and b/icons/mob/actions.dmi differ