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:
Profakos
2024-04-16 09:27:48 +02:00
committed by GitHub
parent ba331edc5a
commit 29cd9ee03b
11 changed files with 38 additions and 39 deletions
+6 -5
View File
@@ -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