mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-01-20 14:04:43 +00:00
obj/effect/effect all pool themselves. PoolOrNew() can now be passed a type and a list instead of a type and a location. In that case, the list will be passed to New() via arglist(). RCD's now delete their spark system and properly garbage collect.
114 lines
2.6 KiB
Plaintext
114 lines
2.6 KiB
Plaintext
/////////////////////////////////////////////
|
|
//SPARK SYSTEM (like steam system)
|
|
// The attach(atom/atom) proc is optional, and can be called to attach the effect
|
|
// to something, like the RCD, so then you can just call start() and the sparks
|
|
// will always spawn at the items location.
|
|
/////////////////////////////////////////////
|
|
|
|
/obj/effect/effect/sparks
|
|
name = "sparks"
|
|
icon_state = "sparks"
|
|
var/amount = 6.0
|
|
anchored = 1.0
|
|
mouse_opacity = 0
|
|
|
|
/obj/effect/effect/sparks/New()
|
|
..()
|
|
flick("sparks", src) // replay the animation
|
|
playsound(src.loc, "sparks", 100, 1)
|
|
var/turf/T = src.loc
|
|
if (istype(T, /turf))
|
|
T.hotspot_expose(1000,100)
|
|
spawn (100)
|
|
qdel(src)
|
|
|
|
/obj/effect/effect/sparks/Destroy()
|
|
var/turf/T = src.loc
|
|
if (istype(T, /turf))
|
|
T.hotspot_expose(1000,100)
|
|
return ..()
|
|
|
|
/obj/effect/effect/sparks/Move()
|
|
..()
|
|
var/turf/T = src.loc
|
|
if (istype(T, /turf))
|
|
T.hotspot_expose(1000,100)
|
|
return
|
|
|
|
/datum/effect/effect/system/spark_spread
|
|
var/total_sparks = 0 // To stop it being spammed and lagging!
|
|
|
|
/datum/effect/effect/system/spark_spread/set_up(n = 3, c = 0, loca)
|
|
if(n > 10)
|
|
n = 10
|
|
number = n
|
|
cardinals = c
|
|
if(istype(loca, /turf/))
|
|
location = loca
|
|
else
|
|
location = get_turf(loca)
|
|
|
|
/datum/effect/effect/system/spark_spread/start()
|
|
var/i = 0
|
|
for(i=0, i<src.number, i++)
|
|
if(src.total_sparks > 20)
|
|
return
|
|
spawn(0)
|
|
if(holder)
|
|
src.location = get_turf(holder)
|
|
var/obj/effect/effect/sparks/sparks = PoolOrNew(/obj/effect/effect/sparks, location)
|
|
src.total_sparks++
|
|
var/direction
|
|
if(src.cardinals)
|
|
direction = pick(cardinal)
|
|
else
|
|
direction = pick(alldirs)
|
|
for(i=0, i<pick(1,2,3), i++)
|
|
sleep(5)
|
|
step(sparks,direction)
|
|
spawn(20)
|
|
qdel(sparks)
|
|
src.total_sparks--
|
|
|
|
|
|
|
|
|
|
|
|
/obj/effect/effect/sparks/electricity
|
|
name = "lightning"
|
|
icon_state = "electricity"
|
|
|
|
/datum/effect/effect/system/lightning_spread
|
|
var/total_sparks = 0 // To stop it being spammed and lagging!
|
|
|
|
/datum/effect/effect/system/lightning_spread/set_up(n = 3, c = 0, loca)
|
|
if(n > 10)
|
|
n = 10
|
|
number = n
|
|
cardinals = c
|
|
if(istype(loca, /turf/))
|
|
location = loca
|
|
else
|
|
location = get_turf(loca)
|
|
|
|
/datum/effect/effect/system/lightning_spread/start()
|
|
var/i = 0
|
|
for(i=0, i<src.number, i++)
|
|
if(src.total_sparks > 20)
|
|
return
|
|
spawn(0)
|
|
if(holder)
|
|
src.location = get_turf(holder)
|
|
var/obj/effect/effect/sparks/electricity/sparks = PoolOrNew(/obj/effect/effect/sparks/electricity, location)
|
|
src.total_sparks++
|
|
var/direction
|
|
if(src.cardinals)
|
|
direction = pick(cardinal)
|
|
else
|
|
direction = pick(alldirs)
|
|
for(i=0, i<pick(1,2,3), i++)
|
|
sleep(5)
|
|
step(sparks,direction)
|
|
spawn(20)
|
|
qdel(sparks)
|
|
src.total_sparks-- |