mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-10 10:12:45 +00:00
86 lines
2.5 KiB
Plaintext
86 lines
2.5 KiB
Plaintext
/obj/effect/proc_holder/spell/dumbfire
|
|
|
|
var/projectile_type = ""
|
|
var/activate_on_collision = 1
|
|
|
|
var/proj_icon = 'icons/obj/projectiles.dmi'
|
|
var/proj_icon_state = "spell"
|
|
var/proj_name = "a spell projectile"
|
|
|
|
var/proj_trail = 0 //if it leaves a trail
|
|
var/proj_trail_lifespan = 0 //deciseconds
|
|
var/proj_trail_icon = 'icons/obj/wizard.dmi'
|
|
var/proj_trail_icon_state = "trail"
|
|
|
|
var/proj_type = "/obj/effect/proc_holder/spell" //IMPORTANT use only subtypes of this
|
|
|
|
var/proj_insubstantial = 0 //if it can pass through dense objects or not
|
|
var/proj_trigger_range = 1 //the range from target at which the projectile triggers cast(target)
|
|
|
|
var/proj_lifespan = 100 //in deciseconds * proj_step_delay
|
|
var/proj_step_delay = 1 //lower = faster
|
|
|
|
/obj/effect/proc_holder/spell/dumbfire/choose_targets(mob/user = usr)
|
|
|
|
var/turf/T = get_turf(usr)
|
|
for(var/i = 1; i < range; i++)
|
|
var/turf/new_turf = get_step(T, usr.dir)
|
|
if(new_turf.density)
|
|
break
|
|
T = new_turf
|
|
perform(list(T))
|
|
|
|
/obj/effect/proc_holder/spell/dumbfire/cast(list/targets, mob/user = usr)
|
|
|
|
for(var/turf/target in targets)
|
|
spawn(0)
|
|
var/obj/effect/proc_holder/spell/targeted/projectile
|
|
if(istext(proj_type))
|
|
var/projectile_type = text2path(proj_type)
|
|
projectile = new projectile_type(user)
|
|
if(istype(proj_type,/obj/effect/proc_holder/spell))
|
|
projectile = new /obj/effect/proc_holder/spell/targeted/trigger(user)
|
|
projectile:linked_spells += proj_type
|
|
projectile.icon = proj_icon
|
|
projectile.icon_state = proj_icon_state
|
|
projectile.set_dir(get_dir(projectile, target))
|
|
projectile.name = proj_name
|
|
|
|
var/current_loc = usr.loc
|
|
|
|
projectile.loc = current_loc
|
|
|
|
for(var/i = 0,i < proj_lifespan,i++)
|
|
if(!projectile)
|
|
break
|
|
|
|
if(proj_insubstantial)
|
|
projectile.loc = get_step(projectile, projectile.dir)
|
|
else
|
|
step(projectile, projectile.dir)
|
|
|
|
if(projectile.loc == current_loc || i == proj_lifespan)
|
|
projectile.cast(current_loc)
|
|
break
|
|
|
|
var/mob/living/L = locate(/mob/living) in range(projectile, proj_trigger_range) - usr
|
|
if(L)
|
|
projectile.cast(L.loc)
|
|
break
|
|
|
|
if(proj_trail && projectile)
|
|
spawn(0)
|
|
if(projectile)
|
|
var/obj/effect/overlay/trail = new /obj/effect/overlay(projectile.loc)
|
|
trail.icon = proj_trail_icon
|
|
trail.icon_state = proj_trail_icon_state
|
|
trail.density = 0
|
|
spawn(proj_trail_lifespan)
|
|
del(trail)
|
|
|
|
current_loc = projectile.loc
|
|
|
|
sleep(proj_step_delay)
|
|
|
|
if(projectile)
|
|
del(projectile) |