Files
Paradise/code/modules/events/dust.dm
2025-07-27 20:52:39 +00:00

83 lines
2.0 KiB
Plaintext

/datum/event/dust
var/qnty = 1
/datum/event/dust/setup()
qnty = rand(1,5)
/datum/event/dust/start()
while(qnty-- > 0)
new /obj/effect/space_dust/weak()
/obj/effect/space_dust
name = "Space Dust"
desc = "Dust in space."
icon = 'icons/obj/meteor.dmi'
icon_state = "dust"
density = TRUE
var/strength = 2 //ex_act severity number
var/life = 2 //how many things we hit before qdel(src)
var/atom/goal = null
var/shake_chance = 50
/obj/effect/space_dust/weak
strength = 3
life = 1
/obj/effect/space_dust/strong
strength = 1
life = 6
/obj/effect/space_dust/super
strength = 1
life = 40
/obj/effect/space_dust/Initialize(mapload)
. = ..()
ADD_TRAIT(src, TRAIT_NO_EDGE_TRANSITIONS, ROUNDSTART_TRAIT)
var/startside = pick(GLOB.cardinal)
GLOB.meteor_list += src
var/turf/start = pick_edge_loc(startside, level_name_to_num(MAIN_STATION))
forceMove(start)
goal = pick_edge_loc(REVERSE_DIR(startside), level_name_to_num(MAIN_STATION))
GLOB.move_manager.home_onto(src, goal, 1)
/obj/effect/space_dust/Bump(atom/A)
if(QDELETED(src))
return
if(prob(shake_chance))
for(var/mob/M in range(10, src))
if(!M.stat && !is_ai(M))
shake_camera(M, 3, 1)
playsound(loc, 'sound/effects/meteorimpact.ogg', 40, 1)
INVOKE_ASYNC(src, PROC_REF(impact_meteor), A) // ex_act can have some sleeps in it
/obj/effect/space_dust/proc/impact_meteor(atom/A)
var/turf/where = get_turf(A)
if(ismob(A))
A.ex_act(strength)//This should work for now I guess
else if(!istype(A, /obj/machinery/power/emitter) && !istype(A, /obj/machinery/field/generator)) //Protect the singularity from getting released every round!
A.ex_act(strength) //Changing emitter/field gen ex_act would make it immune to bombs and C4
life--
if(life <= 0)
GLOB.move_manager.stop_looping(src)
on_shatter(where)
qdel(src)
/obj/effect/space_dust/proc/on_shatter(turf/where)
return
/obj/effect/space_dust/Bumped(atom/A)
Bump(A)
return
/obj/effect/space_dust/ex_act(severity)
qdel(src)
/obj/effect/space_dust/Destroy()
GLOB.meteor_list -= src
return ..()