mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-07-18 19:44:58 +01:00
Machinery Destroy() side effect clean up (#82659)
## About The Pull Request I have combed over implementations of `Destroy()` for `obj/machinery`, and noticed quite a few was spawning items or playing sounds. **Slot machines**: Moved payout to on_deconstruction() **Windoors**: Break sound moved to on_deconstruction(). I have also slightly cleaned up Destroy(), the windoor calls air_update_turf directly, as that proc already retrieves the turf it is on. **Atmospheric pipe**: Releases air and deconstructs meter objects on_deconstruction(). **Portable atmospheric devices**: Drop hyper noblium crystal on on_destruction(). **Pump, Scrubbers**: Releases air on_deconstruction(). **PACMAN power generator**: Spawns dropped fuel on_deconstruction(). **Runic vendor**: Moved vanishing effects to on_deconstruction(). I did not change Destroy side effects in the following instances: - side effects are critical for the round (e.g. doomsday device, nuke, blackbox recorder dropping the tape, gulag item reclaimer [less critical but still]) - might spawn messages and noises, but moving them to on_deconstruct would put linked items into an unusable state if deleted directly (e.g. express order console, cyborg lockdown console, tram paired sensors) - would potentially delete mobs we don't want deleted (e.g. disposals, slime camera console) Out of 220 Destroy defines, I found only 8 side effects that could not be moved to other procs, so `machinery\Destroy()` has almost always been used properly! I really hope `structure` will be as well made. Other changes: - Stasis beds had a completely empty destroy, removed - Mass drivers had two destroy procs, merged ## Why It's Good For The Game The Destroy() proc should only contain reference clean ups, barring edge cases that would harm playability. ## Changelog Nothing player facing.
This commit is contained in:
@@ -9,6 +9,7 @@
|
||||
vend_reply = "Please, stand still near the vending machine for your special package!"
|
||||
resistance_flags = FIRE_PROOF
|
||||
light_mask = "RunicVendor-light-mask"
|
||||
obj_flags = parent_type::obj_flags | NO_DEBRIS_AFTER_DECONSTRUCTION
|
||||
/// How long the vendor stays up before it decays.
|
||||
var/time_to_decay = 30 SECONDS
|
||||
/// Area around the vendor that will pushback nearby mobs.
|
||||
@@ -60,15 +61,16 @@
|
||||
|
||||
return .
|
||||
|
||||
/obj/machinery/vending/runic_vendor/handle_deconstruct(disassembled)
|
||||
SHOULD_NOT_OVERRIDE(TRUE)
|
||||
|
||||
/obj/machinery/vending/runic_vendor/Destroy()
|
||||
visible_message(span_warning("[src] flickers and disappears!"))
|
||||
playsound(src,'sound/weapons/resonator_blast.ogg',25,TRUE)
|
||||
return ..()
|
||||
|
||||
/obj/machinery/vending/runic_vendor/proc/runic_explosion()
|
||||
explosion(src, light_impact_range = 2)
|
||||
qdel(src)
|
||||
deconstruct(FALSE)
|
||||
|
||||
/obj/machinery/vending/runic_vendor/proc/runic_pulse()
|
||||
var/pulse_locs = spiral_range_turfs(pulse_distance, get_turf(src))
|
||||
@@ -82,10 +84,9 @@
|
||||
mob_to_be_pulsed_back.throw_at(target, 4, 4)
|
||||
|
||||
/obj/machinery/vending/runic_vendor/screwdriver_act(mob/living/user, obj/item/I)
|
||||
explosion(src, light_impact_range = 2)
|
||||
qdel(src)
|
||||
runic_explosion()
|
||||
|
||||
/obj/machinery/vending/runic_vendor/proc/decay()
|
||||
qdel(src)
|
||||
deconstruct(FALSE)
|
||||
|
||||
#undef PULSE_DISTANCE_RANGE
|
||||
|
||||
Reference in New Issue
Block a user