66 lines
1.8 KiB
Plaintext
66 lines
1.8 KiB
Plaintext
/obj/item/projectile/gravity
|
|
name = "gravity bolt"
|
|
icon = 'icons/effects/effects.dmi'
|
|
icon_state = "chronofield"
|
|
hitsound = 'sound/weapons/wave.ogg'
|
|
damage = 0
|
|
damage_type = BRUTE
|
|
nodamage = TRUE
|
|
var/power = 4
|
|
var/list/thrown = list() //normally we wouldn't need this but incase on_hit is called multiple times, yeah.. this is a good idea.
|
|
|
|
/obj/item/projectile/gravity/Initialize(mapload)
|
|
. = ..()
|
|
var/obj/item/ammo_casing/energy/gravity/G = loc
|
|
if(istype(G))
|
|
power = min(G.gun.power, 15)
|
|
|
|
/obj/item/projectile/gravity/on_hit()
|
|
. = ..()
|
|
var/turf/T = get_turf(src)
|
|
var/list/tothrow = list()
|
|
var/list/cachedrange = range(T, power)
|
|
for(var/mob/M in cachedrange)
|
|
tothrow += M
|
|
for(var/obj/O in cachedrange)
|
|
tothrow += O
|
|
var/safety = 50
|
|
for(var/i in tothrow)
|
|
if(!safety)
|
|
break
|
|
var/atom/movable/AM = i
|
|
if((AM == src) || (AM == firer) || (AM.move_resist > MOVE_FORCE_EXTREMELY_STRONG) || AM.anchored || thrown[AM])
|
|
continue
|
|
thrown[AM] = TRUE
|
|
safety--
|
|
var/target = get_target(T, AM)
|
|
if(!target)
|
|
return FALSE
|
|
AM.throw_at(target, power + 1, 1)
|
|
for(var/turf/F in range(T,power))
|
|
new /obj/effect/temp_visual/gravpush(F)
|
|
|
|
/obj/item/projectile/gravity/proc/get_target(turf/origin, atom/movable/AM)
|
|
return origin
|
|
|
|
/obj/item/projectile/gravity/repulse
|
|
name = "repulsion bolt"
|
|
color = "#33CCFF"
|
|
|
|
/obj/item/projectile/gravity/repulse/get_target(turf/origin, atom/movable/AM)
|
|
return get_turf_in_angle(Get_Angle(origin, AM), origin, power)
|
|
|
|
/obj/item/projectile/gravity/attract
|
|
name = "attraction bolt"
|
|
color = "#FF6600"
|
|
|
|
/obj/item/projectile/gravity/attract/get_target(turf/origin, atom/movable/AM)
|
|
return origin
|
|
|
|
/obj/item/projectile/gravity/chaos
|
|
name = "gravitational blast"
|
|
color = "#101010"
|
|
|
|
/obj/item/projectile/gravity/chaos/get_target(turf/origin, atom/movable/AM)
|
|
return get_turf_in_angle(rand(0, 359), origin, power)
|