mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-17 10:08:09 +01:00
Adds some extra vars and logic to explosion code to make powerful logging entries that should help admins narrow down when explosives get misused. Records this new info in the feedback database and bumps the explosion version +1 as a result of this.
112 lines
3.3 KiB
Plaintext
112 lines
3.3 KiB
Plaintext
|
|
/////////////////////////////////////////////
|
|
//////// Attach a trail to any object, that spawns when it moves (like for the jetpack)
|
|
/// just pass in the object to attach it to in set_up
|
|
/// Then do start() to start it and stop() to stop it, obviously
|
|
/// and don't call start() in a loop that will be repeated otherwise it'll get spammed!
|
|
/////////////////////////////////////////////
|
|
|
|
/datum/effect_system/trail_follow
|
|
var/turf/oldposition
|
|
var/active = FALSE
|
|
var/allow_overlap = FALSE
|
|
var/auto_process = TRUE
|
|
var/qdel_in_time = 10
|
|
var/fadetype = "ion_fade"
|
|
var/fade = TRUE
|
|
var/nograv_required = FALSE
|
|
|
|
/datum/effect_system/trail_follow/set_up(atom/atom)
|
|
attach(atom)
|
|
oldposition = get_turf(atom)
|
|
|
|
/datum/effect_system/trail_follow/Destroy()
|
|
oldposition = null
|
|
stop()
|
|
return ..()
|
|
|
|
/datum/effect_system/trail_follow/proc/stop()
|
|
oldposition = null
|
|
STOP_PROCESSING(SSfastprocess, src)
|
|
active = FALSE
|
|
return TRUE
|
|
|
|
/datum/effect_system/trail_follow/start()
|
|
oldposition = get_turf(holder)
|
|
if(!check_conditions())
|
|
return FALSE
|
|
if(auto_process)
|
|
START_PROCESSING(SSfastprocess, src)
|
|
active = TRUE
|
|
return TRUE
|
|
|
|
/datum/effect_system/trail_follow/process()
|
|
generate_effect()
|
|
|
|
/datum/effect_system/trail_follow/generate_effect()
|
|
if(!check_conditions())
|
|
return stop()
|
|
if(oldposition && !(oldposition == get_turf(holder)))
|
|
if(!oldposition.has_gravity() || !nograv_required)
|
|
var/obj/effect/E = new effect_type(oldposition)
|
|
set_dir(E)
|
|
if(fade)
|
|
flick(fadetype, E)
|
|
E.icon_state = ""
|
|
if(qdel_in_time)
|
|
QDEL_IN(E, qdel_in_time)
|
|
oldposition = get_turf(holder)
|
|
|
|
/datum/effect_system/trail_follow/proc/check_conditions()
|
|
if(!get_turf(holder))
|
|
return FALSE
|
|
return TRUE
|
|
|
|
/datum/effect_system/trail_follow/steam
|
|
effect_type = /obj/effect/particle_effect/steam
|
|
|
|
/obj/effect/particle_effect/ion_trails
|
|
name = "ion trails"
|
|
icon_state = "ion_trails"
|
|
anchored = TRUE
|
|
|
|
/obj/effect/particle_effect/ion_trails/flight
|
|
icon_state = "ion_trails_flight"
|
|
|
|
/datum/effect_system/trail_follow/ion
|
|
effect_type = /obj/effect/particle_effect/ion_trails
|
|
nograv_required = TRUE
|
|
qdel_in_time = 20
|
|
|
|
/datum/effect_system/trail_follow/proc/set_dir(obj/effect/particle_effect/ion_trails/I)
|
|
I.setDir(holder.dir)
|
|
|
|
//Reagent-based explosion effect
|
|
|
|
/datum/effect_system/reagents_explosion
|
|
var/amount // TNT equivalent
|
|
var/flashing = FALSE // does explosion creates flash effect?
|
|
var/flashing_factor = 0 // factor of how powerful the flash effect relatively to the explosion
|
|
var/explosion_message = 1 //whether we show a message to mobs.
|
|
|
|
/datum/effect_system/reagents_explosion/set_up(amt, loca, flash = FALSE, flash_fact = 0, message = TRUE)
|
|
amount = amt
|
|
explosion_message = message
|
|
if(isturf(loca))
|
|
location = loca
|
|
else
|
|
location = get_turf(loca)
|
|
|
|
flashing = flash
|
|
flashing_factor = flash_fact
|
|
|
|
/// Starts the explosion. The explosion_source is as part of logging and identifying the source of the explosion for logs.
|
|
/datum/effect_system/reagents_explosion/start(atom/explosion_source = null)
|
|
if(!explosion_source)
|
|
stack_trace("Reagent explosion triggered without a source atom. This explosion may have incomplete logging.")
|
|
|
|
if(explosion_message)
|
|
location.visible_message(span_danger("The solution violently explodes!"), span_hear("You hear an explosion!"))
|
|
|
|
dyn_explosion(location, amount, flash_range = flashing_factor, explosion_cause = explosion_source)
|