Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[MIRROR] Machinery Destroy() side effect clean up #2911

Merged
merged 1 commit into from
Apr 16, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 3 additions & 5 deletions code/game/machinery/doors/windowdoor.dm
Original file line number Diff line number Diff line change
Expand Up @@ -66,11 +66,8 @@

/obj/machinery/door/window/Destroy()
set_density(FALSE)
if(atom_integrity == 0)
playsound(src, SFX_SHATTER, 70, TRUE)
electronics = null
var/turf/floor = get_turf(src)
floor.air_update_turf(TRUE, FALSE)
air_update_turf(TRUE, FALSE)
return ..()

/obj/machinery/door/window/update_icon_state()
Expand Down Expand Up @@ -300,11 +297,12 @@
if(BURN)
playsound(src, 'sound/items/welder.ogg', 100, TRUE)


/obj/machinery/door/window/on_deconstruction(disassembled)
if(disassembled)
return

playsound(src, SFX_SHATTER, 70, TRUE)

for(var/i in 1 to shards)
drop_debris(new /obj/item/shard(src))
if(rods)
Expand Down
5 changes: 1 addition & 4 deletions code/game/machinery/mass_driver.dm
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,6 @@
. = ..()
wires = new /datum/wires/mass_driver(src)

/obj/machinery/mass_driver/Destroy()
QDEL_NULL(wires)
. = ..()

/obj/machinery/mass_driver/chapelgun
name = "holy driver"
id = MASSDRIVER_CHAPEL
Expand All @@ -35,6 +31,7 @@
for(var/obj/machinery/computer/pod/control as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/computer/pod))
if(control.id == id)
control.connected = null
QDEL_NULL(wires)
return ..()

/obj/machinery/mass_driver/connect_to_shuttle(mapload, obj/docking_port/mobile/port, obj/docking_port/stationary/dock)
Expand Down
3 changes: 1 addition & 2 deletions code/game/machinery/slotmachine.dm
Original file line number Diff line number Diff line change
Expand Up @@ -68,10 +68,9 @@
coinvalues["[cointype]"] = C.get_item_credit_value()
qdel(C) //Sigh

/obj/machinery/computer/slot_machine/Destroy()
/obj/machinery/computer/slot_machine/on_deconstruction(disassembled)
if(balance)
give_payout(balance)
return ..()

/obj/machinery/computer/slot_machine/process(seconds_per_tick)
. = ..() //Sanity checks.
Expand Down
3 changes: 0 additions & 3 deletions code/game/machinery/stasis.dm
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,6 @@
. = ..()
AddElement(/datum/element/elevation, pixel_shift = 6)

/obj/machinery/stasis/Destroy()
. = ..()

/obj/machinery/stasis/examine(mob/user)
. = ..()
. += span_notice("Alt-click to [stasis_enabled ? "turn off" : "turn on"] the machine.")
Expand Down
13 changes: 11 additions & 2 deletions code/modules/atmospherics/machinery/other/meter.dm
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,9 @@

/obj/machinery/meter/Destroy()
SSair.stop_processing_machine(src)
target = null
if(!isnull(target))
UnregisterSignal(target, COMSIG_QDELETING)
target = null
return ..()

/obj/machinery/meter/Initialize(mapload, new_piping_layer)
Expand All @@ -45,8 +47,14 @@
candidate = pipe
if(candidate)
target = candidate
RegisterSignal(target, COMSIG_QDELETING, PROC_REF(drop_meter))
setAttachLayer(candidate.piping_layer)

///Called when the parent pipe is removed
/obj/machinery/meter/proc/drop_meter()
SIGNAL_HANDLER
deconstruct(FALSE)

/obj/machinery/meter/proc/setAttachLayer(new_layer)
target_layer = new_layer
PIPING_LAYER_DOUBLE_SHIFT(src, target_layer)
Expand Down Expand Up @@ -135,7 +143,8 @@
return TRUE

/obj/machinery/meter/on_deconstruction(disassembled)
new /obj/item/pipe_meter(loc)
var/obj/item/pipe_meter/meter_object = new /obj/item/pipe_meter(get_turf(src))
transfer_fingerprints_to(meter_object)

/obj/machinery/meter/interact(mob/user)
if(machine_stat & (NOPOWER|BROKEN))
Expand Down
15 changes: 5 additions & 10 deletions code/modules/atmospherics/machinery/pipes/pipes.dm
Original file line number Diff line number Diff line change
Expand Up @@ -34,18 +34,13 @@
if(hide)
AddElement(/datum/element/undertile, TRAIT_T_RAY_VISIBLE) //if changing this, change the subtypes RemoveElements too, because thats how bespoke works

/obj/machinery/atmospherics/pipe/Destroy()
QDEL_NULL(parent)

/obj/machinery/atmospherics/pipe/on_deconstruction(disassembled)
releaseAirToTurf()

var/turf/local_turf = loc
for(var/obj/machinery/meter/meter in local_turf)
if(meter.target != src)
continue
var/obj/item/pipe_meter/meter_object = new (local_turf)
meter.transfer_fingerprints_to(meter_object)
qdel(meter)
return ..()

/obj/machinery/atmospherics/pipe/Destroy()
QDEL_NULL(parent)
return ..()

//-----------------
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,14 +46,17 @@
AddElement(/datum/element/climbable, climb_time = 3 SECONDS, climb_stun = 3 SECONDS)
AddElement(/datum/element/elevation, pixel_shift = 8)

/obj/machinery/portable_atmospherics/on_deconstruction(disassembled)
if(nob_crystal_inserted)
new /obj/item/hypernoblium_crystal(src)

return ..()

/obj/machinery/portable_atmospherics/Destroy()
disconnect()
air_contents = null
SSair.stop_processing_machine(src)

if(nob_crystal_inserted)
new /obj/item/hypernoblium_crystal(src)

return ..()

/obj/machinery/portable_atmospherics/examine(mob/user)
Expand Down
2 changes: 1 addition & 1 deletion code/modules/atmospherics/machinery/portable/pump.dm
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@

volume = 1000

/obj/machinery/portable_atmospherics/pump/Destroy()
/obj/machinery/portable_atmospherics/pump/on_deconstruction(disassembled)
var/turf/local_turf = get_turf(src)
local_turf.assume_air(air_contents)
return ..()
Expand Down
6 changes: 3 additions & 3 deletions code/modules/atmospherics/machinery/portable/scrubber.dm
Original file line number Diff line number Diff line change
Expand Up @@ -31,9 +31,9 @@
/datum/gas/halon,
)

/obj/machinery/portable_atmospherics/scrubber/Destroy()
var/turf/T = get_turf(src)
T.assume_air(air_contents)
/obj/machinery/portable_atmospherics/scrubber/on_deconstruction(disassembled)
var/turf/local_turf = get_turf(src)
local_turf.assume_air(air_contents)
return ..()

/obj/machinery/portable_atmospherics/scrubber/update_icon_state()
Expand Down
2 changes: 1 addition & 1 deletion code/modules/power/port_gen.dm
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@
var/obj/S = sheet_path
sheet_name = initial(S.name)

/obj/machinery/power/port_gen/pacman/Destroy()
/obj/machinery/power/port_gen/pacman/on_deconstruction(disassembled)
DropFuel()
return ..()

Expand Down
11 changes: 6 additions & 5 deletions code/modules/vending/runic_vendor.dm
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down Expand Up @@ -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))
Expand All @@ -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
Loading