[READY]Aimable wizard lightning bolts (#23723)

* ZAP!

* YOU DID NOT SEE THAT

* YOU DI NOT SEE THAT 2

* object orientated pr

* gdi

* protection

* object orientated pr v2

* REEEE

* blacklists

* Update magicarp.dm
This commit is contained in:
kevinz000
2017-02-07 21:31:52 -08:00
committed by oranges
parent 05bf53468c
commit 0ced9342b9
24 changed files with 248 additions and 153 deletions

View File

@@ -1112,7 +1112,7 @@
special_role = null
current << "<span class='userdanger'>Your infernal link has been severed! You are no longer a devil!</span>"
RemoveSpell(/obj/effect/proc_holder/spell/targeted/infernal_jaunt)
RemoveSpell(/obj/effect/proc_holder/spell/fireball/hellish)
RemoveSpell(/obj/effect/proc_holder/spell/aimed/fireball/hellish)
RemoveSpell(/obj/effect/proc_holder/spell/targeted/summon_contract)
RemoveSpell(/obj/effect/proc_holder/spell/targeted/conjure_item/summon_pitchfork)
RemoveSpell(/obj/effect/proc_holder/spell/targeted/conjure_item/violin)

View File

@@ -81,7 +81,7 @@
switch(type)
if("destruction")
M.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/projectile/magic_missile(null))
M.mind.AddSpell(new /obj/effect/proc_holder/spell/fireball(null))
M.mind.AddSpell(new /obj/effect/proc_holder/spell/aimed/fireball(null))
M << "<B>Your service has not gone unrewarded, however. Studying under [wizard_name], you have learned powerful, destructive spells. You are able to cast magic missile and fireball."
if("bluespace")
M.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/area_teleport/teleport(null))

View File

@@ -310,7 +310,7 @@ var/global/list/lawlorify = list (
/datum/devilinfo/proc/give_base_spells(give_summon_contract = 0)
remove_spells()
owner.AddSpell(new /obj/effect/proc_holder/spell/fireball/hellish(null))
owner.AddSpell(new /obj/effect/proc_holder/spell/aimed/fireball/hellish(null))
owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/conjure_item/summon_pitchfork(null))
if(give_summon_contract)
give_summon_contract()
@@ -322,13 +322,13 @@ var/global/list/lawlorify = list (
/datum/devilinfo/proc/give_lizard_spells()
remove_spells()
owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/conjure_item/summon_pitchfork(null))
owner.AddSpell(new /obj/effect/proc_holder/spell/fireball/hellish(null))
owner.AddSpell(new /obj/effect/proc_holder/spell/aimed/fireball/hellish(null))
owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/infernal_jaunt(null))
/datum/devilinfo/proc/give_true_spells()
remove_spells()
owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/conjure_item/summon_pitchfork/greater(null))
owner.AddSpell(new /obj/effect/proc_holder/spell/fireball/hellish(null))
owner.AddSpell(new /obj/effect/proc_holder/spell/aimed/fireball/hellish(null))
owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/infernal_jaunt(null))
owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/sintouch(null))

View File

@@ -104,7 +104,7 @@
/datum/spellbook_entry/fireball
name = "Fireball"
spell_type = /obj/effect/proc_holder/spell/fireball
spell_type = /obj/effect/proc_holder/spell/aimed/fireball
log_name = "FB"
/datum/spellbook_entry/rod_form
@@ -222,10 +222,20 @@
log_name = "LD"
category = "Defensive"
/datum/spellbook_entry/teslablast
name = "Tesla Blast"
spell_type = /obj/effect/proc_holder/spell/targeted/tesla
log_name = "TB"
/datum/spellbook_entry/lightningbolt
name = "Lightning Bolt"
spell_type = /obj/effect/proc_holder/spell/targeted/lightning
spell_type = /obj/effect/proc_holder/spell/aimed/lightningbolt
log_name = "LB"
cost = 3
/datum/spellbook_entry/lightningbolt/Buy(mob/living/carbon/human/user,obj/item/weapon/spellbook/book) //return 1 on success
. = ..()
user.tesla_ignore = TRUE
/datum/spellbook_entry/infinite_guns
name = "Lesser Summon Guns"
@@ -778,7 +788,7 @@
return
/obj/item/weapon/spellbook/oneuse/fireball
spell = /obj/effect/proc_holder/spell/fireball
spell = /obj/effect/proc_holder/spell/aimed/fireball
spellname = "fireball"
icon_state ="bookfireball"
desc = "This book feels warm to the touch."

View File

@@ -97,7 +97,7 @@
wizmind.AddSpell(new /obj/effect/proc_holder/spell/targeted/ethereal_jaunt)
wizmind.AddSpell(new /obj/effect/proc_holder/spell/targeted/projectile/magic_missile)
wizmind.AddSpell(new /obj/effect/proc_holder/spell/fireball)
wizmind.AddSpell(new /obj/effect/proc_holder/spell/aimed/fireball)
current_wizard = wizbody

View File

@@ -37,9 +37,12 @@
projectilesound = 'sound/weapons/emitter.ogg'
maxHealth = 50
health = 50
var/allowed_projectile_types = list(/obj/item/projectile/magic/change, /obj/item/projectile/magic/animate, /obj/item/projectile/magic/resurrection,
/obj/item/projectile/magic/death, /obj/item/projectile/magic/teleport, /obj/item/projectile/magic/door, /obj/item/projectile/magic/aoe/fireball,
/obj/item/projectile/magic/spellblade, /obj/item/projectile/magic/arcane_barrage)
/mob/living/simple_animal/hostile/carp/ranged/New()
projectiletype = pick(typesof(initial(projectiletype)))
projectiletype = pick(allowed_projectile_types)
..()
/mob/living/simple_animal/hostile/carp/ranged/chaos
@@ -50,5 +53,5 @@
health = 75
/mob/living/simple_animal/hostile/carp/ranged/chaos/Shoot()
projectiletype = pick(typesof(initial(projectiletype)))
..()
projectiletype = pick(allowed_projectile_types)
..()

View File

@@ -169,6 +169,8 @@
..()
/mob/living/carbon/electrocute_act(shock_damage, obj/source, siemens_coeff = 1, safety = 0, override = 0, tesla_shock = 0, illusion = 0)
if(tesla_shock && tesla_ignore)
return FALSE
shock_damage *= siemens_coeff
if(dna && dna.species)
shock_damage *= dna.species.siemens_coeff

View File

@@ -448,6 +448,8 @@
if(S.siemens_coefficient <= 0)
total_coeff -= 0.95
siemens_coeff = total_coeff
if(tesla_ignore)
siemens_coeff = 0
else if(!safety)
var/gloves_siemens_coeff = 1
if(gloves)

View File

@@ -276,6 +276,8 @@
/mob/living/proc/electrocute_act(shock_damage, obj/source, siemens_coeff = 1, safety = 0, tesla_shock = 0, illusion = 0)
if(tesla_shock && tesla_ignore)
return FALSE
if(shock_damage > 0)
if(!illusion)
adjustFireLoss(shock_damage)

View File

@@ -74,4 +74,5 @@
var/list/status_effects //a list of all status effects the mob has
var/list/implants = null
var/list/implants = null
var/tesla_ignore = FALSE

View File

@@ -526,7 +526,7 @@ Difficulty: Very Hard
/obj/machinery/anomalous_crystal/emitter/New()
..()
generated_projectile = pick(/obj/item/projectile/magic/fireball/infernal,/obj/item/projectile/magic/spellblade,
generated_projectile = pick(/obj/item/projectile/magic/aoe/fireball/infernal,/obj/item/projectile/magic/aoe/lightning,/obj/item/projectile/magic/spellblade,
/obj/item/projectile/bullet/meteorshot, /obj/item/projectile/beam/xray, /obj/item/projectile/colossus)
/obj/machinery/anomalous_crystal/emitter/ActivationReaction(mob/user, method)

View File

@@ -29,7 +29,7 @@
loot = list(/obj/effect/mob_spawn/human/corpse/wizard,
/obj/item/weapon/staff)
var/obj/effect/proc_holder/spell/fireball/fireball = null
var/obj/effect/proc_holder/spell/aimed/fireball/fireball = null
var/obj/effect/proc_holder/spell/targeted/turf_teleport/blink/blink = null
var/obj/effect/proc_holder/spell/targeted/projectile/magic_missile/mm = null
@@ -38,7 +38,7 @@
/mob/living/simple_animal/hostile/wizard/New()
..()
fireball = new /obj/effect/proc_holder/spell/fireball
fireball = new /obj/effect/proc_holder/spell/aimed/fireball
fireball.clothes_req = 0
fireball.human_req = 0
fireball.player_lock = 0

View File

@@ -292,7 +292,7 @@
/obj/item/weapon/paper/contract/infernal/magic/FulfillContract(mob/living/carbon/human/user = target.current, blood = 0)
if(!istype(user) || !user.mind)
return -1
user.mind.AddSpell(new /obj/effect/proc_holder/spell/fireball(null))
user.mind.AddSpell(new /obj/effect/proc_holder/spell/aimed/fireball(null))
user.mind.AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/knock(null))
return ..()

View File

@@ -203,7 +203,7 @@ var/list/blacklisted_tesla_types = typecacheof(list(/obj/machinery/atmospherics,
else if(isliving(A))
var/dist = get_dist(source, A)
var/mob/living/L = A
if(dist <= zap_range && (dist < closest_dist || !closest_mob) && L.stat != DEAD)
if(dist <= zap_range && (dist < closest_dist || !closest_mob) && L.stat != DEAD && !L.tesla_ignore)
closest_mob = L
closest_atom = A
closest_dist = dist

View File

@@ -23,7 +23,7 @@
projectile_type = /obj/item/projectile/magic/door
/obj/item/ammo_casing/magic/fireball
projectile_type = /obj/item/projectile/magic/fireball
projectile_type = /obj/item/projectile/magic/aoe/fireball
/obj/item/ammo_casing/magic/chaos
projectile_type = /obj/item/projectile/magic
@@ -35,7 +35,6 @@
projectile_type = /obj/item/projectile/magic/arcane_barrage
/obj/item/ammo_casing/magic/chaos/newshot()
projectile_type = pick(typesof(/obj/item/projectile/magic))
..()
/obj/item/ammo_casing/magic/honk

View File

@@ -38,6 +38,13 @@
max_charges = 10
recharge_rate = 2
no_den_usage = 1
var/allowed_projectile_types = list(/obj/item/projectile/magic/change, /obj/item/projectile/magic/animate, /obj/item/projectile/magic/resurrection,
/obj/item/projectile/magic/death, /obj/item/projectile/magic/teleport, /obj/item/projectile/magic/door, /obj/item/projectile/magic/aoe/fireball,
/obj/item/projectile/magic/spellblade, /obj/item/projectile/magic/arcane_barrage)
/obj/item/weapon/gun/magic/staff/chaos/process_fire(atom/target as mob|obj|turf, mob/living/user as mob|obj, message = 1, params, zone_override, bonus_spread = 0)
chambered.projectile_type = pick(allowed_projectile_types)
. = ..(target, user, message, params, zone_override, bonus_spread)
/obj/item/weapon/gun/magic/staff/door
name = "staff of door creation"

View File

@@ -17,53 +17,6 @@
var/mob/M = target
M.death(0)
/obj/item/projectile/magic/fireball
name = "bolt of fireball"
icon_state = "fireball"
damage = 10
damage_type = BRUTE
nodamage = 0
//explosion values
var/exp_heavy = 0
var/exp_light = 2
var/exp_flash = 3
var/exp_fire = 2
/obj/item/projectile/magic/fireball/Range()
var/turf/T1 = get_step(src,turn(dir, -45))
var/turf/T2 = get_step(src,turn(dir, 45))
var/turf/T3 = get_step(src,dir)
var/mob/living/L = locate(/mob/living) in T1 //if there's a mob alive in our front right diagonal, we hit it.
if(L && L.stat != DEAD)
Bump(L,1) //Magic Bullet #teachthecontroversy
return
L = locate(/mob/living) in T2
if(L && L.stat != DEAD)
Bump(L,1)
return
L = locate(/mob/living) in T3
if(L && L.stat != DEAD)
Bump(L,1)
return
..()
/obj/item/projectile/magic/fireball/on_hit(target)
. = ..()
var/turf/T = get_turf(target)
explosion(T, -1, exp_heavy, exp_light, exp_flash, 0, flame_range = exp_fire)
if(ismob(target)) //multiple flavors of pain
var/mob/living/M = target
M.take_overall_damage(0,10) //between this 10 burn, the 10 brute, the explosion brute, and the onfire burn, your at about 65 damage if you stop drop and roll immediately
/obj/item/projectile/magic/fireball/infernal
name = "infernal fireball"
exp_heavy = -1
exp_light = -1
exp_flash = 4
exp_fire= 5
/obj/item/projectile/magic/resurrection
name = "bolt of resurrection"
icon_state = "ion"
@@ -387,3 +340,85 @@
nodamage = 0
armour_penetration = 0
flag = "magic"
/obj/item/projectile/magic/aoe
name = "Area Bolt"
desc = "What the fuck does this do?!"
damage = 0
var/proxdet = TRUE
/obj/item/projectile/magic/aoe/Range()
if(proxdet)
var/turf/T1 = get_step(src,turn(dir, -45))
var/turf/T2 = get_step(src,turn(dir, 45))
var/turf/T3 = get_step(src,dir)
var/mob/living/L = locate(/mob/living) in T1 //if there's a mob alive in our front right diagonal, we hit it.
if(L && L.stat != DEAD)
Bump(L,1) //Magic Bullet #teachthecontroversy
return
L = locate(/mob/living) in T2
if(L && L.stat != DEAD)
Bump(L,1)
return
L = locate(/mob/living) in T3
if(L && L.stat != DEAD)
Bump(L,1)
return
..()
/obj/item/projectile/magic/aoe/lightning
name = "lightning bolt"
icon_state = "tesla_projectile" //Better sprites are REALLY needed and appreciated!~
damage = 15
damage_type = BURN
nodamage = 0
speed = 0.3
flag = "magic"
var/tesla_power = 20000
var/tesla_range = 15
var/tesla_boom = FALSE
var/chain
var/mob/living/caster
/obj/item/projectile/magic/aoe/lightning/fire(setAngle)
if(caster)
chain = caster.Beam(src, icon_state = "lightning[rand(1, 12)]", time = INFINITY, maxdistance = INFINITY)
..()
/obj/item/projectile/magic/aoe/lightning/on_hit(target)
. = ..()
tesla_zap(src, tesla_range, tesla_power, tesla_boom)
qdel(src)
/obj/item/projectile/magic/aoe/lightning/Destroy()
qdel(chain)
. = ..()
/obj/item/projectile/magic/aoe/fireball
name = "bolt of fireball"
icon_state = "fireball"
damage = 10
damage_type = BRUTE
nodamage = 0
//explosion values
var/exp_heavy = 0
var/exp_light = 2
var/exp_flash = 3
var/exp_fire = 2
/obj/item/projectile/magic/aoe/fireball/on_hit(target)
. = ..()
var/turf/T = get_turf(target)
explosion(T, -1, exp_heavy, exp_light, exp_flash, 0, flame_range = exp_fire)
if(ismob(target)) //multiple flavors of pain
var/mob/living/M = target
M.take_overall_damage(0,10) //between this 10 burn, the 10 brute, the explosion brute, and the onfire burn, your at about 65 damage if you stop drop and roll immediately
/obj/item/projectile/magic/aoe/fireball/infernal
name = "infernal fireball"
exp_heavy = -1
exp_light = -1
exp_flash = 4
exp_fire= 5

View File

@@ -344,7 +344,7 @@
if(MT)
visible_message("<span class='danger'>[src] dangerously overheats, launching a flaming fuel orb!</span>")
investigate_log("Experimentor has launched a <font color='red'>fireball</font> at [M]!", "experimentor")
var/obj/item/projectile/magic/fireball/FB = new /obj/item/projectile/magic/fireball(start)
var/obj/item/projectile/magic/aoe/fireball/FB = new /obj/item/projectile/magic/aoe/fireball(start)
FB.original = MT
FB.current = start
FB.yo = MT.y - start.y

View File

@@ -0,0 +1,105 @@
/obj/effect/proc_holder/spell/aimed
name = "aimed projectile spell"
var/projectile_type = /obj/item/projectile/magic/teleport
var/deactive_msg = "You discharge your projectile..."
var/active_msg = "You charge your projectile!"
var/base_icon_state = "projectile"
var/active_icon_state = "projectile"
/obj/effect/proc_holder/spell/aimed/Click()
var/mob/living/user = usr
if(!istype(user))
return
var/msg
if(!can_cast(user))
msg = "<span class='warning'>You can no longer cast [name]!</span>"
remove_ranged_ability(msg)
return
if(active)
msg = "<span class='notice'>[deactive_msg]</span>"
remove_ranged_ability(msg)
else
msg = "<span class='notice'>[active_msg]<B>Left-click to shoot it at a target!</B></span>"
add_ranged_ability(user, msg, TRUE)
/obj/effect/proc_holder/spell/aimed/update_icon()
if(!action)
return
action.button_icon_state = "[base_icon_state][active]"
action.UpdateButtonIcon()
/obj/effect/proc_holder/spell/aimed/InterceptClickOn(mob/living/caller, params, atom/target)
if(..())
return FALSE
if(!cast_check(0, ranged_ability_user))
remove_ranged_ability()
return FALSE
var/list/targets = list(target)
perform(targets,user = ranged_ability_user)
return TRUE
/obj/effect/proc_holder/spell/aimed/cast(list/targets, mob/living/user)
var/target = targets[1]
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 FALSE
fire_projectile(user, target)
user.newtonian_move(get_dir(U, T))
remove_ranged_ability() //Auto-disable the ability once successfully performed
return TRUE
/obj/effect/proc_holder/spell/aimed/proc/fire_projectile(mob/living/user, atom/target)
var/obj/item/projectile/P = new projectile_type(user.loc)
P.current = get_turf(user)
P.preparePixelProjectile(target, get_turf(target), user)
P.fire()
return TRUE
/obj/effect/proc_holder/spell/aimed/lightningbolt
name = "Lightning Bolt"
desc = "Fire a high powered lightning bolt at your foes!"
school = "evocation"
charge_max = 200
clothes_req = 1
invocation = "UN'LTD P'WAH"
invocation_type = "shout"
cooldown_min = 30
active_icon_state = "lightning"
base_icon_state = "lightning"
sound = 'sound/magic/lightningbolt.ogg'
active = FALSE
var/tesla_range = 15
var/tesla_power = 20000
var/tesla_boom = FALSE
active_msg = "You energize your hand with arcane lightning!"
deactive_msg = "You let the energy flow out of your hands back into yourself..."
/obj/effect/proc_holder/spell/aimed/lightningbolt/fire_projectile(mob/living/user, atom/target)
var/obj/item/projectile/magic/aoe/lightning/P = new /obj/item/projectile/magic/aoe/lightning(user.loc)
P.current = get_turf(user)
P.preparePixelProjectile(target, get_turf(target), user)
P.tesla_power = tesla_power
P.tesla_range = tesla_range
P.tesla_boom = tesla_boom
P.fire()
return TRUE
/obj/effect/proc_holder/spell/aimed/fireball
name = "Fireball"
desc = "This spell fires a fireball at a target and does not require wizard garb."
school = "evocation"
charge_max = 60
clothes_req = 0
invocation = "ONI SOMA"
invocation_type = "shout"
range = 20
cooldown_min = 20 //10 deciseconds reduction per rank
projectile_type = /obj/item/projectile/magic/aoe/fireball
base_icon_state = "fireball"
action_icon_state = "fireball0"
sound = "sound/magic/Fireball.ogg"
active_msg = "You prepare to cast your fireball spell!"
deactive_msg = "You extinguish your fireball... for now."
active = FALSE

View File

@@ -69,7 +69,7 @@
user << "<span class='notice'>[C] seems to not be sentient. You cannot summon a contract for [C.p_them()].</span>"
/obj/effect/proc_holder/spell/fireball/hellish
/obj/effect/proc_holder/spell/aimed/fireball/hellish
name = "Hellfire"
desc = "This spell launches hellfire at the target."
@@ -80,7 +80,7 @@
invocation_type = "shout"
range = 2
fireball_type = /obj/item/projectile/magic/fireball/infernal
projectile_type = /obj/item/projectile/magic/aoe/fireball/infernal
action_background_icon_state = "bg_demon"

View File

@@ -1,6 +1,6 @@
/obj/effect/proc_holder/spell/targeted/lightning
name = "Lightning Bolt"
desc = "Charges up and throws a lightning bolt at nearby enemies. Classic."
/obj/effect/proc_holder/spell/targeted/tesla
name = "Tesla Blast"
desc = "Blast lightning at your foes!"
charge_type = "recharge"
charge_max = 300
clothes_req = 1
@@ -16,12 +16,12 @@
action_icon_state = "lightning"
/obj/effect/proc_holder/spell/targeted/lightning/Click()
/obj/effect/proc_holder/spell/targeted/tesla/Click()
if(!ready && cast_check())
StartChargeup()
return 1
/obj/effect/proc_holder/spell/targeted/lightning/proc/StartChargeup(mob/user = usr)
/obj/effect/proc_holder/spell/targeted/tesla/proc/StartChargeup(mob/user = usr)
ready = 1
user << "<span class='notice'>You start gathering the power.</span>"
Snd = new/sound('sound/magic/lightning_chargeup.ogg',channel = 7)
@@ -36,18 +36,18 @@
else
revert_cast(user, 0)
/obj/effect/proc_holder/spell/targeted/lightning/proc/Reset(mob/user = usr)
/obj/effect/proc_holder/spell/targeted/tesla/proc/Reset(mob/user = usr)
ready = 0
if(halo)
user.overlays.Remove(halo)
/obj/effect/proc_holder/spell/targeted/lightning/revert_cast(mob/user = usr, message = 1)
/obj/effect/proc_holder/spell/targeted/tesla/revert_cast(mob/user = usr, message = 1)
if(message)
user << "<span class='notice'>No target found in range.</span>"
Reset(user)
..()
/obj/effect/proc_holder/spell/targeted/lightning/cast(list/targets, mob/user = usr)
/obj/effect/proc_holder/spell/targeted/tesla/cast(list/targets, mob/user = usr)
ready = 0
var/mob/living/carbon/target = targets[1]
Snd=sound(null, repeat = 0, wait = 1, channel = Snd.channel) //byond, why you suck?
@@ -63,7 +63,7 @@
Bolt(user,target,30,5,user)
Reset(user)
/obj/effect/proc_holder/spell/targeted/lightning/proc/Bolt(mob/origin,mob/target,bolt_energy,bounces,mob/user = usr)
/obj/effect/proc_holder/spell/targeted/tesla/proc/Bolt(mob/origin,mob/target,bolt_energy,bounces,mob/user = usr)
origin.Beam(target,icon_state="lightning[rand(1,12)]",time=5)
var/mob/living/carbon/current = target
if(bounces < 1)
@@ -81,4 +81,4 @@
return
var/mob/living/next = pick(possible_targets)
if(next)
Bolt(current,next,max((bolt_energy-5),5),bounces-1,user)
Bolt(current,next,max((bolt_energy-5),5),bounces-1,user)

View File

@@ -227,78 +227,6 @@
mutations = list(BLINDMUT)
duration = 300
sound="sound/magic/Blind.ogg"
/obj/effect/proc_holder/spell/fireball
name = "Fireball"
desc = "This spell fires a fireball at a target and does not require wizard garb."
school = "evocation"
charge_max = 60
clothes_req = 0
invocation = "ONI SOMA"
invocation_type = "shout"
range = 20
cooldown_min = 20 //10 deciseconds reduction per rank
var/fireball_type = /obj/item/projectile/magic/fireball
action_icon_state = "fireball0"
sound = "sound/magic/Fireball.ogg"
active = FALSE
/obj/effect/proc_holder/spell/fireball/Click()
var/mob/living/user = usr
if(!istype(user))
return
var/msg
if(!can_cast(user))
msg = "<span class='warning'>You can no longer cast Fireball.</span>"
remove_ranged_ability(msg)
return
if(active)
msg = "<span class='notice'>You extinguish your fireball...for now.</span>"
remove_ranged_ability(msg)
else
msg = "<span class='notice'>Your prepare to cast your fireball spell! <B>Left-click to cast at a target!</B></span>"
add_ranged_ability(user, msg, TRUE)
/obj/effect/proc_holder/spell/fireball/update_icon()
if(!action)
return
action.button_icon_state = "fireball[active]"
action.UpdateButtonIcon()
/obj/effect/proc_holder/spell/fireball/InterceptClickOn(mob/living/caller, params, atom/target)
if(..())
return FALSE
if(!cast_check(0, ranged_ability_user))
remove_ranged_ability()
return FALSE
var/list/targets = list(target)
perform(targets,user = ranged_ability_user)
return TRUE
/obj/effect/proc_holder/spell/fireball/cast(list/targets, mob/living/user)
var/target = targets[1] //There is only ever one target for fireball
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
var/obj/item/projectile/magic/fireball/FB = new fireball_type(user.loc)
FB.current = get_turf(user)
FB.preparePixelProjectile(target, get_turf(target), user)
FB.fire()
user.newtonian_move(get_dir(U, T))
remove_ranged_ability() //Auto-disable the ability once successfully performed
return 1
/obj/effect/proc_holder/spell/aoe_turf/repulse
name = "Repulse"
desc = "This spell throws everything around the user away."

Binary file not shown.

Before

Width:  |  Height:  |  Size: 167 KiB

After

Width:  |  Height:  |  Size: 166 KiB

View File

@@ -1911,6 +1911,7 @@
#include "code\modules\shuttle\white_ship.dm"
#include "code\modules\space_transition\space_transition.dm"
#include "code\modules\spells\spell.dm"
#include "code\modules\spells\spell_types\aimed.dm"
#include "code\modules\spells\spell_types\area_teleport.dm"
#include "code\modules\spells\spell_types\barnyard.dm"
#include "code\modules\spells\spell_types\bloodcrawl.dm"