mirror of
https://github.com/Skyrat-SS13/Skyrat-tg.git
synced 2026-07-17 10:54:05 +01:00
997d9ac093
* [no gbp] Reworked sparks to not be so immensely destructive in benign circumstances (#84193) ## About The Pull Request So sparks were laying waste to every department that had sparks as a little pizzazz particle effect, which turned out to be seemingly every single department, and also just a bunch of random shit we had laying around. That wasn't really the goal so I've reworked them, for now, until I'm able to more comprehensively address how we handle things that are combustible vs things that are actually dangerously flammable, which we don't differentiate for now. Sparks now send a signal to whatever thing is touching those sparks. Right now I've specifically made pools of welding fuel, things made of plasma, people covered in flammables, and cigarettes respond to this signal. Sparks that touch objects with reagents in them will heat those reagents marginally (approximately 40kelvin increase from 300 kelvin underneath a popped lightbulb). There is also another signal 'HAZARDOUS_SPARKS' but as of this PR it is not used. If you walk into sparks or get showered by them, the sparks will also interact with any of your visible equipment (outerwear and held items), but to reiterate, nothing besides the above stated items have interactions with sparks... for now... ## Why It's Good For The Game I won't apologize for being hilarious but turning departments into fields of burnt boxes, tables, vegetables, and crates wasn't really the intent. Addresses #84169 and similar ## Changelog 🆑 Bisar balance: Sparks have been heavily adjusted; they only affect items made of plasma, pools of welding fuel, flammable people, cigarettes, and items that contain reagents... for now. Their long-standing behavior of igniting flammable gas has been untouched. /🆑 * [no gbp] Reworked sparks to not be so immensely destructive in benign circumstances --------- Co-authored-by: Joshua Kidder <49173900+Metekillot@users.noreply.github.com>
108 lines
3.8 KiB
Plaintext
108 lines
3.8 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.
|
|
/////////////////////////////////////////////
|
|
|
|
/proc/do_sparks(number, cardinal_only, datum/source)
|
|
var/datum/effect_system/spark_spread/sparks = new
|
|
sparks.set_up(number, cardinal_only, source)
|
|
sparks.autocleanup = TRUE
|
|
sparks.start()
|
|
|
|
|
|
/obj/effect/particle_effect/sparks
|
|
name = "sparks"
|
|
icon_state = "sparks"
|
|
anchored = TRUE
|
|
light_system = OVERLAY_LIGHT
|
|
light_range = 1.5
|
|
light_power = 0.8
|
|
light_color = LIGHT_COLOR_FIRE
|
|
|
|
/obj/effect/particle_effect/sparks/Initialize(mapload)
|
|
..()
|
|
return INITIALIZE_HINT_LATELOAD
|
|
|
|
/obj/effect/particle_effect/sparks/LateInitialize()
|
|
RegisterSignals(src, list(COMSIG_MOVABLE_CROSS, COMSIG_MOVABLE_CROSS_OVER), PROC_REF(sparks_touched))
|
|
flick(icon_state, src)
|
|
playsound(src, SFX_SPARKS, 100, TRUE, SHORT_RANGE_SOUND_EXTRARANGE)
|
|
var/turf/location = loc
|
|
if(isturf(location))
|
|
affect_location(location, just_initialized = TRUE)
|
|
QDEL_IN(src, 20)
|
|
|
|
/obj/effect/particle_effect/sparks/Destroy()
|
|
var/turf/location = loc
|
|
if(isturf(location))
|
|
affect_location(location)
|
|
return ..()
|
|
|
|
/obj/effect/particle_effect/sparks/Move()
|
|
..()
|
|
var/turf/location = loc
|
|
if(isturf(location))
|
|
affect_location(location)
|
|
|
|
/*
|
|
* Apply the effects of this spark to its location.
|
|
*
|
|
* When the spark is first created, Cross() and Crossed() don't get called,
|
|
* so for the first initialization, we make sure to specifically invoke the
|
|
* behavior of the spark on all the mobs and objects in the location.
|
|
* turf/location - The place the spark is affectiong
|
|
* just_initialized - If the spark is just being created, and we need to manually affect everything in the location
|
|
*/
|
|
/obj/effect/particle_effect/sparks/proc/affect_location(turf/location, just_initialized = FALSE)
|
|
location.hotspot_expose(1000,100)
|
|
SEND_SIGNAL(location, COMSIG_ATOM_TOUCHED_SPARKS, src) // for plasma floors; other floor types only have to worry about the mysterious HAZARDOUS sparks
|
|
if(just_initialized)
|
|
for(var/atom/movable/singed in location)
|
|
sparks_touched(src, singed)
|
|
|
|
/*
|
|
* This is called when anything passes through the same tiles as a spark, or when a spark passes through something's tile.
|
|
*
|
|
* This is invoked by the signals sent by every atom when they're crossed or crossing something. It
|
|
* signifies that something has been touched by sparks, and should be affected by possible pyrotechnic affects..
|
|
* datum/source - Can either be the spark itself or an object that just walked into it
|
|
* mob/living/singed - What was touched by the spark
|
|
*/
|
|
/obj/effect/particle_effect/sparks/proc/sparks_touched(datum/source, atom/singed)
|
|
SIGNAL_HANDLER
|
|
|
|
SEND_SIGNAL(singed, COMSIG_ATOM_TOUCHED_SPARKS, src)
|
|
if(isobj(singed))
|
|
if(singed.reagents)
|
|
var/datum/reagents/reagents = singed.reagents // heat up things that contain reagents before we check to see if they burn
|
|
reagents?.expose_temperature(1000) // we set this at 1000 because that's the max reagent temp for a chem heater, higher temps require more than sparks
|
|
return
|
|
if(ishuman(singed))
|
|
var/mob/living/carbon/human/singed_human = singed
|
|
for(var/obj/item/anything in singed_human.get_visible_items())
|
|
sparks_touched(src, anything)
|
|
|
|
/datum/effect_system/spark_spread
|
|
effect_type = /obj/effect/particle_effect/sparks
|
|
|
|
|
|
|
|
/datum/effect_system/spark_spread/quantum
|
|
effect_type = /obj/effect/particle_effect/sparks/quantum
|
|
|
|
|
|
//electricity
|
|
|
|
/obj/effect/particle_effect/sparks/electricity
|
|
name = "lightning"
|
|
icon_state = "electricity"
|
|
|
|
/obj/effect/particle_effect/sparks/quantum
|
|
name = "quantum sparks"
|
|
icon_state = "quantum_sparks"
|
|
|
|
/datum/effect_system/lightning_spread
|
|
effect_type = /obj/effect/particle_effect/sparks/electricity
|