diff --git a/code/__DEFINES/obj_flags.dm b/code/__DEFINES/obj_flags.dm index 469811c96dc..ea5b929651d 100644 --- a/code/__DEFINES/obj_flags.dm +++ b/code/__DEFINES/obj_flags.dm @@ -15,7 +15,7 @@ #define IGNORE_DENSITY (1<<11) //! Can we ignore density when building on this object? (for example, directional windows and grilles) #define INFINITE_RESKIN (1<<12) // We can reskin this item infinitely #define CONDUCTS_ELECTRICITY (1<<13) //! Can this object conduct electricity? -#define NO_DECONSTRUCTION (1<<14) //! Atoms don't spawn anything when deconstructed. They just vanish +#define NO_DEBRIS_AFTER_DECONSTRUCTION (1<<14) //! Atoms don't spawn anything when deconstructed. They just vanish // If you add new ones, be sure to add them to /obj/Initialize as well for complete mapping support diff --git a/code/_globalvars/bitfields.dm b/code/_globalvars/bitfields.dm index 87e093ea139..f210774ac81 100644 --- a/code/_globalvars/bitfields.dm +++ b/code/_globalvars/bitfields.dm @@ -294,7 +294,7 @@ DEFINE_BITFIELD(obj_flags, list( "EMAGGED" = EMAGGED, "IGNORE_DENSITY" = IGNORE_DENSITY, "IN_USE" = IN_USE, - "NO_DECONSTRUCTION" = NO_DECONSTRUCTION, + "NO_DEBRIS_AFTER_DECONSTRUCTION" = NO_DEBRIS_AFTER_DECONSTRUCTION, "UNIQUE_RENAME" = UNIQUE_RENAME, )) diff --git a/code/datums/elements/frozen.dm b/code/datums/elements/frozen.dm index 434968dd4d5..d112ef31b5f 100644 --- a/code/datums/elements/frozen.dm +++ b/code/datums/elements/frozen.dm @@ -63,7 +63,7 @@ GLOBAL_LIST_INIT(freon_color_matrix, list("#2E5E69", "#60A2A8", "#A1AFB1", rgb(0 else log_combat(throwingdatum.thrower, target, "launched", addition = "shattering it due to being frozen.") obj_target.visible_message(span_danger("[obj_target] shatters into a million pieces!")) - obj_target.obj_flags |= NO_DECONSTRUCTION // disable item spawning + obj_target.obj_flags |= NO_DEBRIS_AFTER_DECONSTRUCTION // disable item spawning obj_target.deconstruct(FALSE) // call pre-deletion specialized code -- internals release gas etc /// signal handler for COMSIG_MOVABLE_MOVED that unfreezes our target if it moves onto an open turf thats hotter than diff --git a/code/game/machinery/_machinery.dm b/code/game/machinery/_machinery.dm index 8fc5dcce870..fb8a4ce139f 100644 --- a/code/game/machinery/_machinery.dm +++ b/code/game/machinery/_machinery.dm @@ -828,7 +828,7 @@ /obj/machinery/handle_deconstruct(disassembled = TRUE) SHOULD_NOT_OVERRIDE(TRUE) - if(obj_flags & NO_DECONSTRUCTION) + if(obj_flags & NO_DEBRIS_AFTER_DECONSTRUCTION) dump_inventory_contents() //drop stuff we consider important return //Just delete us, no need to call anything else. @@ -964,9 +964,6 @@ if(!istype(replacer_tool)) return FALSE - if(!replacer_tool.works_from_distance) - return FALSE - var/shouldplaysound = FALSE if(!component_parts) return FALSE diff --git a/code/game/machinery/dance_machine.dm b/code/game/machinery/dance_machine.dm index 0a626459667..dea1972cea7 100644 --- a/code/game/machinery/dance_machine.dm +++ b/code/game/machinery/dance_machine.dm @@ -163,7 +163,6 @@ req_access = null anchored = TRUE resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF - obj_flags = parent_type::obj_flags | NO_DECONSTRUCTION /obj/machinery/jukebox/disco/activate_music() . = ..() diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 6a7a2d8929a..437acc60cdf 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -1512,7 +1512,7 @@ /obj/machinery/door/airlock/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, attack_dir) if((damage_amount >= atom_integrity) && (damage_flag == BOMB)) - obj_flags |= NO_DECONSTRUCTION //If an explosive took us out, don't drop the assembly + obj_flags |= NO_DEBRIS_AFTER_DECONSTRUCTION //If an explosive took us out, don't drop the assembly . = ..() if(atom_integrity < (0.75 * max_integrity)) update_appearance() diff --git a/code/game/machinery/doors/windowdoor.dm b/code/game/machinery/doors/windowdoor.dm index 0849a5ad8c5..c69c865f6d1 100644 --- a/code/game/machinery/doors/windowdoor.dm +++ b/code/game/machinery/doors/windowdoor.dm @@ -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() @@ -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) diff --git a/code/game/machinery/hologram.dm b/code/game/machinery/hologram.dm index 18ccc976f06..273538b834b 100644 --- a/code/game/machinery/hologram.dm +++ b/code/game/machinery/hologram.dm @@ -127,7 +127,6 @@ Possible to do for anyone motivated enough: /obj/machinery/holopad/tutorial resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF - obj_flags = parent_type::obj_flags | NO_DECONSTRUCTION on_network = FALSE ///Proximity monitor associated with this atom, needed for proximity checks. var/datum/proximity_monitor/proximity_monitor @@ -143,6 +142,12 @@ Possible to do for anyone motivated enough: new_disk.forceMove(src) disk = new_disk +/obj/machinery/holopad/tutorial/default_deconstruction_screwdriver(mob/user, icon_state_open, icon_state_closed, obj/item/screwdriver) + return NONE + +/obj/machinery/holopad/tutorial/default_deconstruction_crowbar(obj/item/crowbar, ignore_panel, custom_deconstruct) + return NONE + /obj/machinery/holopad/Moved(atom/old_loc, movement_dir, forced, list/old_locs, momentum_change = TRUE) . = ..() if(!loc) diff --git a/code/game/machinery/mass_driver.dm b/code/game/machinery/mass_driver.dm index 6963b23afb0..5f534ec95b4 100644 --- a/code/game/machinery/mass_driver.dm +++ b/code/game/machinery/mass_driver.dm @@ -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 @@ -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) diff --git a/code/game/machinery/recycler.dm b/code/game/machinery/recycler.dm index 9cbf787d58d..28aae488866 100644 --- a/code/game/machinery/recycler.dm +++ b/code/game/machinery/recycler.dm @@ -239,9 +239,15 @@ /obj/machinery/recycler/deathtrap name = "dangerous old crusher" - obj_flags = CAN_BE_HIT | EMAGGED | NO_DECONSTRUCTION + obj_flags = CAN_BE_HIT | EMAGGED crush_damage = 120 +/obj/machinery/recycler/deathtrap/default_deconstruction_screwdriver(mob/user, icon_state_open, icon_state_closed, obj/item/screwdriver) + return NONE + +/obj/machinery/recycler/deathtrap/default_deconstruction_crowbar(obj/item/crowbar, ignore_panel, custom_deconstruct) + return NONE + /obj/item/paper/guides/recycler name = "paper - 'garbage duty instructions'" default_raw_text = "

New Assignment

You have been assigned to collect garbage from trash bins, located around the station. The crewmembers will put their trash into it and you will collect said trash.

There is a recycling machine near your closet, inside maintenance; use it to recycle the trash for a small chance to get useful minerals. Then, deliver these minerals to cargo or engineering. You are our last hope for a clean station. Do not screw this up!" diff --git a/code/game/machinery/slotmachine.dm b/code/game/machinery/slotmachine.dm index 842f01ae754..51b0a5b6a5d 100644 --- a/code/game/machinery/slotmachine.dm +++ b/code/game/machinery/slotmachine.dm @@ -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. diff --git a/code/game/machinery/stasis.dm b/code/game/machinery/stasis.dm index 177cd540040..a8d4d62544b 100644 --- a/code/game/machinery/stasis.dm +++ b/code/game/machinery/stasis.dm @@ -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.") diff --git a/code/game/machinery/telecomms/machines/allinone.dm b/code/game/machinery/telecomms/machines/allinone.dm index f159339193e..9b32a4ac192 100644 --- a/code/game/machinery/telecomms/machines/allinone.dm +++ b/code/game/machinery/telecomms/machines/allinone.dm @@ -20,7 +20,6 @@ /obj/machinery/telecomms/allinone/indestructible resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF - obj_flags = parent_type::obj_flags | NO_DECONSTRUCTION /obj/machinery/telecomms/allinone/indestructible/default_deconstruction_screwdriver(mob/user, icon_state_open, icon_state_closed, obj/item/screwdriver) return NONE diff --git a/code/game/objects/obj_defense.dm b/code/game/objects/obj_defense.dm index 4f22a5e256b..f6fee49af7f 100644 --- a/code/game/objects/obj_defense.dm +++ b/code/game/objects/obj_defense.dm @@ -169,9 +169,9 @@ /** * The interminate proc between deconstruct() & atom_deconstruct(). By default this delegates deconstruction to - * atom_deconstruct if NO_DECONSTRUCTION is absent but subtypes can override this to handle NO_DECONSTRUCTION in their + * atom_deconstruct if NO_DEBRIS_AFTER_DECONSTRUCTION is absent but subtypes can override this to handle NO_DEBRIS_AFTER_DECONSTRUCTION in their * own unique way. Override this if for example you want to dump out important content like mobs from the - * atom before deconstruction regardless if NO_DECONSTRUCTION is present or not + * atom before deconstruction regardless if NO_DEBRIS_AFTER_DECONSTRUCTION is present or not * Arguments * * * disassembled - TRUE means we cleanly took this atom apart using tools. FALSE means this was destroyed in a violent way @@ -179,7 +179,7 @@ /obj/proc/handle_deconstruct(disassembled = TRUE) SHOULD_CALL_PARENT(FALSE) - if(!(obj_flags & NO_DECONSTRUCTION)) + if(!(obj_flags & NO_DEBRIS_AFTER_DECONSTRUCTION)) atom_deconstruct(disassembled) /** diff --git a/code/game/objects/structures/beds_chairs/chair.dm b/code/game/objects/structures/beds_chairs/chair.dm index 0808c306ddb..92c955977e7 100644 --- a/code/game/objects/structures/beds_chairs/chair.dm +++ b/code/game/objects/structures/beds_chairs/chair.dm @@ -484,11 +484,11 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/chair/stool/bar, 0) icon_state = null buildstacktype = null item_chair = null - obj_flags = parent_type::obj_flags | NO_DECONSTRUCTION + obj_flags = parent_type::obj_flags | NO_DEBRIS_AFTER_DECONSTRUCTION alpha = 0 /obj/structure/chair/mime/wrench_act_secondary(mob/living/user, obj/item/weapon) - return ITEM_INTERACT_BLOCKING + return NONE /obj/structure/chair/mime/post_buckle_mob(mob/living/M) M.pixel_y += 5 diff --git a/code/game/objects/structures/flora.dm b/code/game/objects/structures/flora.dm index 8749691c91d..2cfd490203c 100644 --- a/code/game/objects/structures/flora.dm +++ b/code/game/objects/structures/flora.dm @@ -449,7 +449,6 @@ icon_state = "pinepresents" desc = "A wondrous decorated Christmas tree. It has presents!" resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF //protected by the christmas spirit - obj_flags = parent_type::obj_flags | NO_DECONSTRUCTION var/gift_type = /obj/item/gift/anything var/unlimited = FALSE var/static/list/took_presents //shared between all xmas trees diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index a77f7a987f3..2acac966f23 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -792,10 +792,18 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/window/reinforced/tinted/frosted/spaw name = "hardened shuttle window" flags_1 = PREVENT_CLICK_UNDER_1 resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF - obj_flags = parent_type::obj_flags | NO_DECONSTRUCTION -/obj/structure/window/reinforced/shuttle/indestructible/rcd_vals(mob/user, obj/item/construction/rcd/the_rcd) - return FALSE +/obj/structure/window/reinforced/shuttle/indestructible/welder_act(mob/living/user, obj/item/tool) + return NONE + +/obj/structure/window/reinforced/shuttle/indestructible/screwdriver_act(mob/living/user, obj/item/tool) + return NONE + +/obj/structure/window/reinforced/shuttle/indestructible/wrench_act(mob/living/user, obj/item/tool) + return NONE + +/obj/structure/window/reinforced/shuttle/indestructible/crowbar_act(mob/living/user, obj/item/tool) + return NONE /obj/structure/window/reinforced/plasma/plastitanium name = "plastitanium window" diff --git a/code/modules/atmospherics/machinery/other/meter.dm b/code/modules/atmospherics/machinery/other/meter.dm index ee1d052b7ed..97bff1ddaea 100644 --- a/code/modules/atmospherics/machinery/other/meter.dm +++ b/code/modules/atmospherics/machinery/other/meter.dm @@ -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) @@ -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) @@ -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)) diff --git a/code/modules/atmospherics/machinery/pipes/pipes.dm b/code/modules/atmospherics/machinery/pipes/pipes.dm index c0dc18c0e8e..574daa2af3a 100644 --- a/code/modules/atmospherics/machinery/pipes/pipes.dm +++ b/code/modules/atmospherics/machinery/pipes/pipes.dm @@ -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 ..() //----------------- diff --git a/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm b/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm index 389de6e3701..3d4e2b02e1f 100644 --- a/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm +++ b/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm @@ -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) diff --git a/code/modules/atmospherics/machinery/portable/pump.dm b/code/modules/atmospherics/machinery/portable/pump.dm index e7dfc229a39..7b0dbef314e 100644 --- a/code/modules/atmospherics/machinery/portable/pump.dm +++ b/code/modules/atmospherics/machinery/portable/pump.dm @@ -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 ..() diff --git a/code/modules/atmospherics/machinery/portable/scrubber.dm b/code/modules/atmospherics/machinery/portable/scrubber.dm index 576dff39a8d..336cdc4829f 100644 --- a/code/modules/atmospherics/machinery/portable/scrubber.dm +++ b/code/modules/atmospherics/machinery/portable/scrubber.dm @@ -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() diff --git a/code/modules/awaymissions/mission_code/murderdome.dm b/code/modules/awaymissions/mission_code/murderdome.dm index 520372e68ac..a59a491d492 100644 --- a/code/modules/awaymissions/mission_code/murderdome.dm +++ b/code/modules/awaymissions/mission_code/murderdome.dm @@ -1,20 +1,27 @@ /obj/structure/window/reinforced/fulltile/indestructible name = "robust window" - obj_flags = parent_type::obj_flags | NO_DECONSTRUCTION flags_1 = PREVENT_CLICK_UNDER_1 resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF -/obj/structure/window/reinforced/fulltile/indestructible/rcd_vals(mob/user, obj/item/construction/rcd/the_rcd) - return FALSE +/obj/structure/window/reinforced/fulltile/indestructible/screwdriver_act(mob/living/user, obj/item/tool) + return NONE +/obj/structure/window/reinforced/fulltile/indestructible/wrench_act(mob/living/user, obj/item/tool) + return NONE + +/obj/structure/window/reinforced/fulltile/indestructible/crowbar_act(mob/living/user, obj/item/tool) + return NONE /obj/structure/grille/indestructible - obj_flags = CONDUCTS_ELECTRICITY | NO_DECONSTRUCTION + obj_flags = CONDUCTS_ELECTRICITY resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF -/obj/structure/grille/indestructible/rcd_vals(mob/user, obj/item/construction/rcd/the_rcd) - return FALSE +/obj/structure/grille/indestructible/screwdriver_act(mob/living/user, obj/item/tool) + return NONE + +/obj/structure/grille/indestructible/wirecutter_act(mob/living/user, obj/item/tool) + return NONE /obj/effect/spawner/structure/window/reinforced/indestructible spawn_list = list(/obj/structure/grille/indestructible, /obj/structure/window/reinforced/fulltile/indestructible) diff --git a/code/modules/capture_the_flag/ctf_game.dm b/code/modules/capture_the_flag/ctf_game.dm index aac487a83d6..38a7318b554 100644 --- a/code/modules/capture_the_flag/ctf_game.dm +++ b/code/modules/capture_the_flag/ctf_game.dm @@ -463,7 +463,12 @@ /obj/structure/table/reinforced/ctf resistance_flags = INDESTRUCTIBLE - obj_flags = parent_type::obj_flags | NO_DECONSTRUCTION + +/obj/structure/table/reinforced/ctf/wrench_act_secondary(mob/living/user, obj/item/tool) + return NONE + +/obj/structure/table/reinforced/ctf/screwdriver_act_secondary(mob/living/user, obj/item/tool) + return NONE #define CTF_LOADING_UNLOADED 0 #define CTF_LOADING_LOADING 1 diff --git a/code/modules/food_and_drinks/machinery/food_cart.dm b/code/modules/food_and_drinks/machinery/food_cart.dm index e068b7b8ce2..a14ea3593c5 100644 --- a/code/modules/food_and_drinks/machinery/food_cart.dm +++ b/code/modules/food_and_drinks/machinery/food_cart.dm @@ -8,7 +8,7 @@ anchored = FALSE use_power = NO_POWER_USE req_access = list(ACCESS_KITCHEN) - obj_flags = parent_type::obj_flags | NO_DECONSTRUCTION + obj_flags = parent_type::obj_flags | NO_DEBRIS_AFTER_DECONSTRUCTION var/unpacked = FALSE var/obj/machinery/griddle/stand/cart_griddle var/obj/machinery/smartfridge/food/cart_smartfridge diff --git a/code/modules/holodeck/computer.dm b/code/modules/holodeck/computer.dm index db66578c5bd..1ff5bc47a55 100644 --- a/code/modules/holodeck/computer.dm +++ b/code/modules/holodeck/computer.dm @@ -292,12 +292,12 @@ GLOBAL_LIST_INIT(typecache_holodeck_linked_floorcheck_ok, typecacheof(list(/turf holo_object.resistance_flags = LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF if(isstructure(holo_object)) - holo_object.obj_flags |= NO_DECONSTRUCTION + holo_object.obj_flags |= NO_DEBRIS_AFTER_DECONSTRUCTION return if(ismachinery(holo_object)) var/obj/machinery/holo_machine = holo_object - holo_machine.obj_flags |= NO_DECONSTRUCTION + holo_machine.obj_flags |= NO_DEBRIS_AFTER_DECONSTRUCTION holo_machine.power_change() if(istype(holo_machine, /obj/machinery/button)) diff --git a/code/modules/holodeck/holo_effect.dm b/code/modules/holodeck/holo_effect.dm index afd4c227038..caa5b425ca4 100644 --- a/code/modules/holodeck/holo_effect.dm +++ b/code/modules/holodeck/holo_effect.dm @@ -50,7 +50,7 @@ var/newtype = pick(subtypesof(/obj/item/book/manual) - banned_books) var/obj/item/book/manual/to_spawn = new newtype(loc) to_spawn.flags_1 |= HOLOGRAM_1 - to_spawn.obj_flags |= NO_DECONSTRUCTION + to_spawn.obj_flags |= NO_DEBRIS_AFTER_DECONSTRUCTION return to_spawn /obj/effect/holodeck_effect/mobspawner diff --git a/code/modules/hydroponics/hydroponics.dm b/code/modules/hydroponics/hydroponics.dm index ad12fa24e68..d32795e90c3 100644 --- a/code/modules/hydroponics/hydroponics.dm +++ b/code/modules/hydroponics/hydroponics.dm @@ -1159,7 +1159,6 @@ circuit = null density = FALSE use_power = NO_POWER_USE - obj_flags = parent_type::obj_flags | NO_DECONSTRUCTION unwrenchable = FALSE self_sustaining_overlay_icon_state = null maxnutri = 15 diff --git a/code/modules/mapfluff/ruins/objects_and_mobs/museum.dm b/code/modules/mapfluff/ruins/objects_and_mobs/museum.dm index 5c1b4323208..1c0a5392fb9 100644 --- a/code/modules/mapfluff/ruins/objects_and_mobs/museum.dm +++ b/code/modules/mapfluff/ruins/objects_and_mobs/museum.dm @@ -159,9 +159,14 @@ mask = /obj/item/clothing/mask/fakemoustache/italian /obj/machinery/vending/hotdog/museum - obj_flags = parent_type::obj_flags|NO_DECONSTRUCTION onstation_override = TRUE +/obj/machinery/vending/hotdog/museum/screwdriver_act(mob/living/user, obj/item/attack_item) + return NONE + +/obj/machinery/vending/hotdog/museum/crowbar_act(mob/living/user, obj/item/attack_item) + return NONE + #define CAFE_KEYCARD_TOILETS "museum_cafe_key_toilets" ///Do not place these beyond the cafeteria shutters, or you might lock people out of reaching it. diff --git a/code/modules/mining/equipment/survival_pod.dm b/code/modules/mining/equipment/survival_pod.dm index d40589dd3f8..b22603f52d9 100644 --- a/code/modules/mining/equipment/survival_pod.dm +++ b/code/modules/mining/equipment/survival_pod.dm @@ -249,7 +249,18 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/door/window/survival_pod/left, 0) light_color = COLOR_VERY_PALE_LIME_GREEN max_n_of_items = 10 pixel_y = -4 - obj_flags = parent_type::obj_flags | NO_DECONSTRUCTION + +/obj/machinery/smartfridge/survival_pod/welder_act(mob/living/user, obj/item/tool) + return NONE + +/obj/machinery/smartfridge/survival_pod/wrench_act(mob/living/user, obj/item/tool) + return NONE + +/obj/machinery/smartfridge/survival_pod/screwdriver_act(mob/living/user, obj/item/tool) + return NONE + +/obj/machinery/smartfridge/survival_pod/crowbar_act(mob/living/user, obj/item/tool) + return NONE /obj/machinery/smartfridge/survival_pod/Initialize(mapload) AddElement(/datum/element/update_icon_blocker) diff --git a/code/modules/power/port_gen.dm b/code/modules/power/port_gen.dm index 84542805d48..e4c1617c0f0 100644 --- a/code/modules/power/port_gen.dm +++ b/code/modules/power/port_gen.dm @@ -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 ..() diff --git a/code/modules/reagents/chemistry/machinery/chem_synthesizer.dm b/code/modules/reagents/chemistry/machinery/chem_synthesizer.dm index c0cb45dda2a..552bfe48650 100644 --- a/code/modules/reagents/chemistry/machinery/chem_synthesizer.dm +++ b/code/modules/reagents/chemistry/machinery/chem_synthesizer.dm @@ -6,14 +6,16 @@ base_icon_state = "dispenser" amount = 10 resistance_flags = INDESTRUCTIBLE | FIRE_PROOF | ACID_PROOF | LAVA_PROOF - obj_flags = parent_type::obj_flags | NO_DECONSTRUCTION use_power = NO_POWER_USE - var/static/list/shortcuts = list( - "meth" = /datum/reagent/drug/methamphetamine - ) ///The purity of the created reagent in % (purity uses 0-1 values) var/purity = 100 +/obj/machinery/chem_dispenser/chem_synthesizer/screwdriver_act(mob/living/user, obj/item/tool) + return NONE + +/obj/machinery/chem_dispenser/chem_synthesizer/crowbar_act(mob/living/user, obj/item/tool) + return NONE + /obj/machinery/chem_dispenser/chem_synthesizer/ui_interact(mob/user, datum/tgui/ui) ui = SStgui.try_update_ui(user, src, ui) if(!ui) diff --git a/code/modules/shuttle/spaceship_navigation_beacon.dm b/code/modules/shuttle/spaceship_navigation_beacon.dm index eb613be54de..41b3f5e39ed 100644 --- a/code/modules/shuttle/spaceship_navigation_beacon.dm +++ b/code/modules/shuttle/spaceship_navigation_beacon.dm @@ -5,7 +5,6 @@ icon_state = "beacon_active" base_icon_state = "beacon" density = TRUE - obj_flags = parent_type::obj_flags | NO_DECONSTRUCTION /// Locked beacons cannot be jumped to by ships. var/locked = FALSE diff --git a/code/modules/shuttle/special.dm b/code/modules/shuttle/special.dm index 989ab4edc94..e5b4b0eb024 100644 --- a/code/modules/shuttle/special.dm +++ b/code/modules/shuttle/special.dm @@ -79,7 +79,6 @@ var/obj/machinery/power/emitter/energycannon/magical/our_statue var/list/mob/living/sleepers = list() var/never_spoken = TRUE - obj_flags = parent_type::obj_flags | NO_DECONSTRUCTION /obj/structure/table/abductor/wabbajack/Initialize(mapload) . = ..() @@ -89,6 +88,12 @@ STOP_PROCESSING(SSobj, src) . = ..() +/obj/structure/table/abductor/wabbajack/screwdriver_act(mob/living/user, obj/item/tool) + return NONE + +/obj/structure/table/abductor/wabbajack/wrench_act(mob/living/user, obj/item/tool) + return NONE + /obj/structure/table/abductor/wabbajack/process() if(isnull(our_statue)) our_statue = locate() in orange(4, src) @@ -173,7 +178,6 @@ /obj/structure/table/wood/shuttle_bar resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF - obj_flags = parent_type::obj_flags | NO_DECONSTRUCTION max_integrity = 1000 var/boot_dir = 1 @@ -184,6 +188,12 @@ ) AddElement(/datum/element/connect_loc, loc_connections) +/obj/structure/table/wood/shuttle_bar/screwdriver_act(mob/living/user, obj/item/tool) + return NONE + +/obj/structure/table/wood/shuttle_bar/wrench_act(mob/living/user, obj/item/tool) + return NONE + /obj/structure/table/wood/shuttle_bar/proc/on_entered(datum/source, atom/movable/AM) SIGNAL_HANDLER var/mob/living/M = AM diff --git a/code/modules/shuttle/syndicate.dm b/code/modules/shuttle/syndicate.dm index 402a87bf6d4..08e0b0d2699 100644 --- a/code/modules/shuttle/syndicate.dm +++ b/code/modules/shuttle/syndicate.dm @@ -11,7 +11,9 @@ shuttleId = "syndicate" possible_destinations = "syndicate_away;syndicate_z5;syndicate_ne;syndicate_nw;syndicate_n;syndicate_se;syndicate_sw;syndicate_s;syndicate_custom" resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF - obj_flags = parent_type::obj_flags | NO_DECONSTRUCTION + +/obj/machinery/computer/shuttle/syndicate/screwdriver_act(mob/living/user, obj/item/I) + return NONE /obj/machinery/computer/shuttle/syndicate/launch_check(mob/user) . = ..() diff --git a/code/modules/transport/tram/tram_controller.dm b/code/modules/transport/tram/tram_controller.dm index 7912588ab8a..51b8a32acaf 100644 --- a/code/modules/transport/tram/tram_controller.dm +++ b/code/modules/transport/tram/tram_controller.dm @@ -708,7 +708,9 @@ /obj/machinery/transport/tram_controller/hilbert configured_transport_id = HILBERT_LINE_1 - obj_flags = parent_type::obj_flags | NO_DECONSTRUCTION + +/obj/machinery/transport/tram_controller/wrench_act_secondary(mob/living/user, obj/item/tool) + return NONE /obj/machinery/transport/tram_controller/Initialize(mapload) . = ..() @@ -847,7 +849,7 @@ return playsound(loc, 'sound/items/deconstruct.ogg', 50, vary = TRUE) balloon_alert(user, "unsecured") - deconstruct() + deconstruct(TRUE) return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN /obj/machinery/transport/tram_controller/screwdriver_act_secondary(mob/living/user, obj/item/tool) diff --git a/code/modules/vending/_vending.dm b/code/modules/vending/_vending.dm index 42f6ff2a436..29641441e67 100644 --- a/code/modules/vending/_vending.dm +++ b/code/modules/vending/_vending.dm @@ -1157,8 +1157,6 @@ GLOBAL_LIST_EMPTY(vending_machines_to_restock) /obj/machinery/vending/exchange_parts(mob/user, obj/item/storage/part_replacer/replacer) if(!istype(replacer)) return FALSE - if(!replacer.works_from_distance) - return FALSE if(!component_parts || !refill_canister) return FALSE diff --git a/code/modules/vending/runic_vendor.dm b/code/modules/vending/runic_vendor.dm index 3edb5b27264..f338340c8b1 100644 --- a/code/modules/vending/runic_vendor.dm +++ b/code/modules/vending/runic_vendor.dm @@ -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 diff --git a/modular_skyrat/master_files/code/game/objects/items/stacks/sheets/sheet_types.dm b/modular_skyrat/master_files/code/game/objects/items/stacks/sheets/sheet_types.dm index 93cd93f1a50..c399c7272d5 100644 --- a/modular_skyrat/master_files/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/modular_skyrat/master_files/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -78,10 +78,10 @@ GLOBAL_LIST_INIT(skyrat_wood_recipes, list( new/datum/stack_recipe("large wooden mortar", /obj/structure/large_mortar, 10, time = 3 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_TOOLS), new/datum/stack_recipe("wooden cutting board", /obj/item/cutting_board, 5, time = 2 SECONDS, check_density = FALSE, category = CAT_TOOLS), new/datum/stack_recipe("wooden shelf", /obj/structure/rack/wooden, 2, time = 2 SECONDS, one_per_turf = TRUE, on_solid_ground = FALSE, category = CAT_STRUCTURE), - new/datum/stack_recipe("seed shelf", /obj/machinery/smartfridge/seedshelf, 10, time = 2 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_STRUCTURE), - new/datum/stack_recipe("produce bin", /obj/machinery/smartfridge/producebin, 10, time = 2 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_STRUCTURE), - new/datum/stack_recipe("produce display", /obj/machinery/smartfridge/producedisplay, 10, time = 2 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_STRUCTURE), - new/datum/stack_recipe("ration shelf", /obj/machinery/smartfridge/rationshelf, 10, time = 2 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_STRUCTURE), + new/datum/stack_recipe("seed shelf", /obj/machinery/smartfridge/wooden/seed_shelf, 10, time = 2 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_STRUCTURE), + new/datum/stack_recipe("produce bin", /obj/machinery/smartfridge/wooden/produce_bin, 10, time = 2 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_STRUCTURE), + new/datum/stack_recipe("produce display", /obj/machinery/smartfridge/wooden/produce_display, 10, time = 2 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_STRUCTURE), + new/datum/stack_recipe("ration shelf", /obj/machinery/smartfridge/wooden/ration_shelf, 10, time = 2 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_STRUCTURE), new/datum/stack_recipe("storage barrel", /obj/structure/closet/crate/wooden/storage_barrel, 4, time = 2 SECONDS, one_per_turf = TRUE, on_solid_ground = FALSE, category = CAT_STRUCTURE), new/datum/stack_recipe("worm barrel", /obj/structure/wormfarm, 5, time = 2 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_TOOLS), new/datum/stack_recipe("gutlunch trough", /obj/structure/ore_container/gutlunch_trough, 5, time = 2 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_STRUCTURE), diff --git a/modular_skyrat/master_files/code/game/objects/structures/towel_bins.dm b/modular_skyrat/master_files/code/game/objects/structures/towel_bins.dm index adf8066b6e3..21996590ed4 100644 --- a/modular_skyrat/master_files/code/game/objects/structures/towel_bins.dm +++ b/modular_skyrat/master_files/code/game/objects/structures/towel_bins.dm @@ -48,9 +48,6 @@ /obj/structure/towel_bin/screwdriver_act(mob/living/user, obj/item/tool) - if(obj_flags & NO_DECONSTRUCTION) - return FALSE - if(amount) to_chat(user, span_warning("[src] must be empty first!")) return ITEM_INTERACT_SUCCESS @@ -60,7 +57,8 @@ new /obj/item/stack/rods(loc, 2) qdel(src) return ITEM_INTERACT_SUCCESS - + if(!(obj_flags & NO_DEBRIS_AFTER_DECONSTRUCTION)) + new /obj/item/stack/rods(loc, 2) /obj/structure/towel_bin/wrench_act(mob/living/user, obj/item/tool) . = ..() diff --git a/modular_skyrat/modules/aesthetics/flag/code/signs_flags.dm b/modular_skyrat/modules/aesthetics/flag/code/signs_flags.dm index 684ce00919b..db83853d657 100644 --- a/modular_skyrat/modules/aesthetics/flag/code/signs_flags.dm +++ b/modular_skyrat/modules/aesthetics/flag/code/signs_flags.dm @@ -16,7 +16,7 @@ /obj/structure/sign/flag/MouseDrop(over_object, src_location, over_location) . = ..() if(over_object == usr && Adjacent(usr)) - if(!item_flag || src.obj_flags & NO_DECONSTRUCTION) + if(!item_flag || src.obj_flags & NO_DEBRIS_AFTER_DECONSTRUCTION) return if(!usr.can_perform_action(src, NEED_DEXTERITY)) return diff --git a/modular_skyrat/modules/aesthetics/rack/code/rack.dm b/modular_skyrat/modules/aesthetics/rack/code/rack.dm index 23b0beaba07..082e01bb40c 100644 --- a/modular_skyrat/modules/aesthetics/rack/code/rack.dm +++ b/modular_skyrat/modules/aesthetics/rack/code/rack.dm @@ -41,7 +41,7 @@ /obj/structure/rack/gunrack/attackby(obj/item/W, mob/living/user, params) var/list/modifiers = params2list(params) - if (W.tool_behaviour == TOOL_WRENCH && !(obj_flags & NO_DECONSTRUCTION) && LAZYACCESS(modifiers, RIGHT_CLICK)) + if (W.tool_behaviour == TOOL_WRENCH && LAZYACCESS(modifiers, RIGHT_CLICK)) W.play_tool_sound(src) deconstruct(TRUE) return diff --git a/modular_skyrat/modules/ashwalkers/code/buildings/fuelwell.dm b/modular_skyrat/modules/ashwalkers/code/buildings/fuelwell.dm index 862d311e16e..be8756b1cf6 100644 --- a/modular_skyrat/modules/ashwalkers/code/buildings/fuelwell.dm +++ b/modular_skyrat/modules/ashwalkers/code/buildings/fuelwell.dm @@ -21,7 +21,7 @@ /obj/structure/sink/fuel_well/attackby(obj/item/O, mob/living/user, params) flick("puddle-oil-splash",src) - if(O.tool_behaviour == TOOL_SHOVEL && !(obj_flags & NO_DECONSTRUCTION)) //attempt to deconstruct the puddle with a shovel + if(O.tool_behaviour == TOOL_SHOVEL) //attempt to deconstruct the puddle with a shovel //attempt to deconstruct the puddle with a shovel to_chat(user, "You fill in the fuel well with soil.") O.play_tool_sound(src) deconstruct() diff --git a/modular_skyrat/modules/cellguns/code/medigun_cells.dm b/modular_skyrat/modules/cellguns/code/medigun_cells.dm index 274a523a7d4..4c58e129fb7 100644 --- a/modular_skyrat/modules/cellguns/code/medigun_cells.dm +++ b/modular_skyrat/modules/cellguns/code/medigun_cells.dm @@ -538,7 +538,6 @@ icon_state = "hardlight_down" base_icon_state = "hardlight" max_integrity = 1 - obj_flags = CAN_BE_HIT | NO_DECONSTRUCTION //Made from nothing, can't deconstruct build_stack_type = null //It would not be good if people could use this to farm materials. var/deploy_time = 20 SECONDS //How long the roller beds lasts for without someone buckled to it. @@ -546,6 +545,10 @@ . = ..() addtimer(CALLBACK(src, PROC_REF(check_bed)), deploy_time) +// previously NO_DECONSTRUCTION +/obj/structure/bed/medical/medigun/wrench_act_secondary(mob/living/user, obj/item/weapon) + return NONE + /obj/structure/bed/medical/medigun/proc/check_bed() //Checks to see if anyone is buckled to the bed, if not the bed will qdel itself. if(!has_buckled_mobs()) qdel(src) //Deletes the roller bed, mostly meant to prevent stockpiling and clutter diff --git a/modular_skyrat/modules/colony_fabricator/code/appliances/wall_cell_charger.dm b/modular_skyrat/modules/colony_fabricator/code/appliances/wall_cell_charger.dm index 8434a730f1d..e126baca3d0 100644 --- a/modular_skyrat/modules/colony_fabricator/code/appliances/wall_cell_charger.dm +++ b/modular_skyrat/modules/colony_fabricator/code/appliances/wall_cell_charger.dm @@ -5,7 +5,6 @@ icon_state = "wall_charger" base_icon_state = "wall_charger" circuit = null - obj_flags = CAN_BE_HIT | NO_DECONSTRUCTION max_batteries = 3 charge_rate = 900 KILO WATTS /// The item we turn into when repacked @@ -27,6 +26,16 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/cell_charger_multi/wall_mounted, 29) deconstruct(TRUE) return +// previously NO_DECONSTRUCTION +/obj/machinery/cell_charger_multi/wall_mounted/default_deconstruction_screwdriver(mob/user, icon_state_open, icon_state_closed, obj/item/screwdriver) + return NONE + +/obj/machinery/cell_charger_multi/wall_mounted/default_deconstruction_crowbar(obj/item/crowbar, ignore_panel, custom_deconstruct) + return NONE + +/obj/machinery/cell_charger_multi/wall_mounted/default_pry_open(obj/item/crowbar, close_after_pry, open_density, closed_density) + return NONE + /obj/machinery/cell_charger_multi/wall_mounted/on_deconstruction(disassembled) if(disassembled) new repacked_type(drop_location()) diff --git a/modular_skyrat/modules/colony_fabricator/code/colony_fabricator.dm b/modular_skyrat/modules/colony_fabricator/code/colony_fabricator.dm index f7d7eede0ac..1eb2a4627e1 100644 --- a/modular_skyrat/modules/colony_fabricator/code/colony_fabricator.dm +++ b/modular_skyrat/modules/colony_fabricator/code/colony_fabricator.dm @@ -9,7 +9,6 @@ production_animation = null circuit = null production_animation = "colony_lathe_n" - obj_flags = CAN_BE_HIT | NO_DECONSTRUCTION light_color = LIGHT_COLOR_BRIGHT_YELLOW light_power = 5 allowed_buildtypes = COLONY_FABRICATOR @@ -33,6 +32,16 @@ QDEL_NULL(soundloop) return ..() +// previously NO_DECONSTRUCTION +/obj/machinery/rnd/production/colony_lathe/default_deconstruction_screwdriver(mob/user, icon_state_open, icon_state_closed, obj/item/screwdriver) + return NONE + +/obj/machinery/rnd/production/colony_lathe/default_deconstruction_crowbar(obj/item/crowbar, ignore_panel, custom_deconstruct) + return NONE + +/obj/machinery/rnd/production/colony_lathe/default_pry_open(obj/item/crowbar, close_after_pry, open_density, closed_density) + return NONE + /obj/machinery/rnd/production/colony_lathe/ui_act(action, list/params, datum/tgui/ui) . = ..() if (. && action == "build") diff --git a/modular_skyrat/modules/colony_fabricator/code/machines/arc_furnace.dm b/modular_skyrat/modules/colony_fabricator/code/machines/arc_furnace.dm index acf3d2af90f..66e4e209dab 100644 --- a/modular_skyrat/modules/colony_fabricator/code/machines/arc_furnace.dm +++ b/modular_skyrat/modules/colony_fabricator/code/machines/arc_furnace.dm @@ -18,7 +18,6 @@ circuit = null light_color = LIGHT_COLOR_BRIGHT_YELLOW light_power = 10 - obj_flags = CAN_BE_HIT | NO_DECONSTRUCTION active_power_usage = BASE_MACHINE_ACTIVE_CONSUMPTION * 10 // This baby consumes so much power /// The item we turn into when repacked var/repacked_type = /obj/item/flatpacked_machine/arc_furnace @@ -46,6 +45,16 @@ if(length(contents)) . += span_notice("It has [contents[1]] sitting in it.") +// previously NO_DECONSTRUCTION +/obj/machinery/arc_furnace/default_deconstruction_screwdriver(mob/user, icon_state_open, icon_state_closed, obj/item/screwdriver) + return NONE + +/obj/machinery/arc_furnace/default_deconstruction_crowbar(obj/item/crowbar, ignore_panel, custom_deconstruct) + return NONE + +/obj/machinery/arc_furnace/default_pry_open(obj/item/crowbar, close_after_pry, open_density, closed_density) + return NONE + /obj/machinery/arc_furnace/on_deconstruction(disassembled) eject_contents() diff --git a/modular_skyrat/modules/colony_fabricator/code/machines/power_storage_unit.dm b/modular_skyrat/modules/colony_fabricator/code/machines/power_storage_unit.dm index cd2da64f8e4..4d6fc605a79 100644 --- a/modular_skyrat/modules/colony_fabricator/code/machines/power_storage_unit.dm +++ b/modular_skyrat/modules/colony_fabricator/code/machines/power_storage_unit.dm @@ -9,7 +9,6 @@ input_level_max = 400 * 1000 output_level_max = 400 * 1000 circuit = null - obj_flags = CAN_BE_HIT | NO_DECONSTRUCTION /// The item we turn into when repacked var/repacked_type = /obj/item/flatpacked_machine/station_battery @@ -34,6 +33,13 @@ to_chat(user, span_notice("You close the maintenance hatch of [src].")) return TRUE +// previously NO_DECONSTRUCTION +/obj/machinery/power/smes/battery_pack/default_deconstruction_crowbar(obj/item/crowbar, ignore_panel, custom_deconstruct) + return NONE + +/obj/machinery/power/smes/battery_pack/default_pry_open(obj/item/crowbar, close_after_pry, open_density, closed_density) + return NONE + // We don't care about the parts updates because we don't want them to change /obj/machinery/power/smes/battery_pack/RefreshParts() return diff --git a/modular_skyrat/modules/colony_fabricator/code/machines/rtg.dm b/modular_skyrat/modules/colony_fabricator/code/machines/rtg.dm index c01724200ac..5690e26884a 100644 --- a/modular_skyrat/modules/colony_fabricator/code/machines/rtg.dm +++ b/modular_skyrat/modules/colony_fabricator/code/machines/rtg.dm @@ -6,7 +6,6 @@ application." icon = 'modular_skyrat/modules/colony_fabricator/icons/machines.dmi' circuit = null - obj_flags = CAN_BE_HIT | NO_DECONSTRUCTION power_gen = 7500 /// What we turn into when we are repacked var/repacked_type = /obj/item/flatpacked_machine/rtg @@ -19,8 +18,17 @@ if(!mapload) flick("rtg_deploy", src) -// Item for creating the arc furnace or carrying it around +// previously NO_DECONSTRUCTION +/obj/machinery/power/rtg/portable/default_deconstruction_screwdriver(mob/user, icon_state_open, icon_state_closed, obj/item/screwdriver) + return NONE +/obj/machinery/power/rtg/portable/default_deconstruction_crowbar(obj/item/crowbar, ignore_panel, custom_deconstruct) + return NONE + +/obj/machinery/power/rtg/portable/default_pry_open(obj/item/crowbar, close_after_pry, open_density, closed_density) + return NONE + +// Item for creating the arc furnace or carrying it around /obj/item/flatpacked_machine/rtg name = "flat-packed radioisotope thermoelectric generator" icon_state = "rtg_packed" diff --git a/modular_skyrat/modules/colony_fabricator/code/machines/solar_panels.dm b/modular_skyrat/modules/colony_fabricator/code/machines/solar_panels.dm index c965d5ab169..9b8f02db090 100644 --- a/modular_skyrat/modules/colony_fabricator/code/machines/solar_panels.dm +++ b/modular_skyrat/modules/colony_fabricator/code/machines/solar_panels.dm @@ -2,7 +2,6 @@ /obj/machinery/power/solar/deployable icon = 'modular_skyrat/modules/colony_fabricator/icons/machines.dmi' - obj_flags = CAN_BE_HIT | NO_DECONSTRUCTION /// The item we turn into when repacked var/repacked_type = /obj/item/flatpacked_machine/solar @@ -20,6 +19,16 @@ qdel(assembly) return ..() +// previously NO_DECONSTRUCTION +/obj/machinery/power/solar/deployable/default_deconstruction_screwdriver(mob/user, icon_state_open, icon_state_closed, obj/item/screwdriver) + return NONE + +/obj/machinery/power/solar/deployable/default_deconstruction_crowbar(obj/item/crowbar, ignore_panel, custom_deconstruct) + return NONE + +/obj/machinery/power/solar/deployable/default_pry_open(obj/item/crowbar, close_after_pry, open_density, closed_density) + return NONE + // Solar panel deployable item /obj/item/flatpacked_machine/solar @@ -37,7 +46,6 @@ /obj/machinery/power/tracker/deployable icon = 'modular_skyrat/modules/colony_fabricator/icons/machines.dmi' - obj_flags = CAN_BE_HIT | NO_DECONSTRUCTION /// The item we turn into when repacked var/repacked_type = /obj/item/flatpacked_machine/solar_tracker @@ -47,7 +55,17 @@ AddElement(/datum/element/manufacturer_examine, COMPANY_FRONTIER) /obj/machinery/power/tracker/deployable/crowbar_act(mob/user, obj/item/item_acting) - return + return NONE + +// previously NO_DECONSTRUCTION +/obj/machinery/power/tracker/deployable/default_deconstruction_screwdriver(mob/user, icon_state_open, icon_state_closed, obj/item/screwdriver) + return NONE + +/obj/machinery/power/tracker/deployable/default_deconstruction_crowbar(obj/item/crowbar, ignore_panel, custom_deconstruct) + return NONE + +/obj/machinery/power/tracker/deployable/default_pry_open(obj/item/crowbar, close_after_pry, open_density, closed_density) + return NONE /obj/machinery/power/tracker/deployable/on_deconstruction(disassembled) var/obj/item/solar_assembly/assembly = locate() in src diff --git a/modular_skyrat/modules/colony_fabricator/code/machines/solid_fuel_generator.dm b/modular_skyrat/modules/colony_fabricator/code/machines/solid_fuel_generator.dm index a3ac75a0825..e082b8bea0a 100644 --- a/modular_skyrat/modules/colony_fabricator/code/machines/solid_fuel_generator.dm +++ b/modular_skyrat/modules/colony_fabricator/code/machines/solid_fuel_generator.dm @@ -11,7 +11,6 @@ icon_state = "fuel_generator_0" base_icon_state = "fuel_generator" circuit = null - obj_flags = CAN_BE_HIT | NO_DECONSTRUCTION anchored = TRUE max_sheets = 25 time_per_sheet = 100 @@ -28,6 +27,16 @@ if(!mapload) flick("fuel_generator_deploy", src) +// previously NO_DECONSTRUCTION +/obj/machinery/power/port_gen/pacman/solid_fuel/default_deconstruction_screwdriver(mob/user, icon_state_open, icon_state_closed, obj/item/screwdriver) + return NONE + +/obj/machinery/power/port_gen/pacman/solid_fuel/default_deconstruction_crowbar(obj/item/crowbar, ignore_panel, custom_deconstruct) + return NONE + +/obj/machinery/power/port_gen/pacman/solid_fuel/default_pry_open(obj/item/crowbar, close_after_pry, open_density, closed_density) + return NONE + // We don't need to worry about the board, this machine doesn't have one! /obj/machinery/power/port_gen/pacman/solid_fuel/on_construction(mob/user) return diff --git a/modular_skyrat/modules/jukebox/code/dance_machine.dm b/modular_skyrat/modules/jukebox/code/dance_machine.dm index 09d335f4460..54c8e27ed89 100644 --- a/modular_skyrat/modules/jukebox/code/dance_machine.dm +++ b/modular_skyrat/modules/jukebox/code/dance_machine.dm @@ -37,8 +37,6 @@ desc = "Now redesigned with data gathered from the extensive disco and plasma research." anchored = TRUE resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF - obj_flags = CAN_BE_HIT | NO_DECONSTRUCTION - /obj/machinery/jukebox/public req_access = list() falloff_dist_offset = 10 @@ -55,7 +53,7 @@ return ..() /obj/machinery/jukebox/attackby(obj/item/O, mob/user, params) - if(!active && !(obj_flags & NO_DECONSTRUCTION)) + if(!active) if(O.tool_behaviour == TOOL_WRENCH) if(!anchored && !isinspace()) to_chat(user,span_notice("You secure [src] to the floor.")) diff --git a/modular_skyrat/modules/mapping/code/machinery.dm b/modular_skyrat/modules/mapping/code/machinery.dm index 53500a29628..04fc7cca5f2 100644 --- a/modular_skyrat/modules/mapping/code/machinery.dm +++ b/modular_skyrat/modules/mapping/code/machinery.dm @@ -13,9 +13,6 @@ /obj/item/gps/computer/space/wrench_act(mob/living/user, obj/item/I) . = ..() - if(obj_flags & NO_DECONSTRUCTION) - return TRUE - if(I.use_tool(src, user, 20, volume=50)) user.visible_message(span_warning("[user] disassembles [src]."), span_notice("You start to disassemble [src]..."), span_hear("You hear clanking and banging noises.")) diff --git a/modular_skyrat/modules/mapping/code/shuttles.dm b/modular_skyrat/modules/mapping/code/shuttles.dm index d50ae38bc5c..89d0aade9c7 100644 --- a/modular_skyrat/modules/mapping/code/shuttles.dm +++ b/modular_skyrat/modules/mapping/code/shuttles.dm @@ -69,7 +69,16 @@ shuttleId = "slaver_syndie" possible_destinations = "syndicate_ne;syndicate_nw;syndicate_n;syndicate_se;syndicate_sw;syndicate_s" resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF - obj_flags = CAN_BE_HIT | NO_DECONSTRUCTION + +// previously NO_DECONSTRUCTION +/obj/machinery/computer/shuttle/slaver/default_deconstruction_screwdriver(mob/user, icon_state_open, icon_state_closed, obj/item/screwdriver) + return NONE + +/obj/machinery/computer/shuttle/slaver/default_deconstruction_crowbar(obj/item/crowbar, ignore_panel, custom_deconstruct) + return NONE + +/obj/machinery/computer/shuttle/slaver/default_pry_open(obj/item/crowbar, close_after_pry = FALSE, open_density = FALSE, closed_density = TRUE) + return NONE /datum/map_template/shuttle/slaver_ship port_id = "slaver ship" diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_machinery/milking_machine.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_machinery/milking_machine.dm index 25dba7d3508..fb6f72e832e 100644 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_machinery/milking_machine.dm +++ b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_machinery/milking_machine.dm @@ -16,7 +16,6 @@ icon_state = "milking_pink_off" max_buckled_mobs = 1 item_chair = null - obj_flags = CAN_BE_HIT | NO_DECONSTRUCTION max_integrity = 75 var/static/list/milkingmachine_designs @@ -67,33 +66,6 @@ var/mutable_appearance/organ_overlay var/organ_overlay_new_icon_state = "" // Organ overlay update optimization -// Additional examine text -/obj/structure/chair/milking_machine/examine(mob/user) - . = ..() - . += span_notice("What are these metal mounts on the armrests for...?") - -/obj/structure/chair/milking_machine/Destroy() - if(current_mob) - if(current_mob.handcuffed) - current_mob.handcuffed.dropped(current_mob) - current_mob.set_handcuffed(null) - current_mob.update_abstract_handcuffed() - current_mob.layer = initial(current_mob.layer) - - if(beaker) - qdel(beaker) - beaker = null - - current_selected_organ = null - current_mob = null - current_breasts = null - current_testicles = null - current_vagina = null - - STOP_PROCESSING(SSobj, src) - unbuckle_all_mobs() - return ..() - // Object initialization /obj/structure/chair/milking_machine/Initialize(mapload) . = ..() @@ -124,6 +96,37 @@ populate_milkingmachine_designs() START_PROCESSING(SSobj, src) +// Additional examine text +/obj/structure/chair/milking_machine/examine(mob/user) + . = ..() + . += span_notice("What are these metal mounts on the armrests for...?") + +/obj/structure/chair/milking_machine/Destroy() + if(current_mob) + if(current_mob.handcuffed) + current_mob.handcuffed.dropped(current_mob) + current_mob.set_handcuffed(null) + current_mob.update_abstract_handcuffed() + current_mob.layer = initial(current_mob.layer) + + if(beaker) + qdel(beaker) + beaker = null + + current_selected_organ = null + current_mob = null + current_breasts = null + current_testicles = null + current_vagina = null + + STOP_PROCESSING(SSobj, src) + unbuckle_all_mobs() + return ..() + +// previously NO_DECONSTRUCTION +/obj/structure/chair/milking_machine/wrench_act_secondary(mob/living/user, obj/item/weapon) + return NONE + /* * APPEARANCE MANAGEMENT */ diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_structures/bdsm_furniture.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_structures/bdsm_furniture.dm index 9e46e1d018d..b6baa6d42f2 100644 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_structures/bdsm_furniture.dm +++ b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_structures/bdsm_furniture.dm @@ -7,7 +7,6 @@ icon = 'modular_skyrat/modules/modular_items/lewd_items/icons/obj/lewd_structures/bdsm_furniture.dmi' icon_state = "bdsm_bed" max_integrity = 50 - obj_flags = CAN_BE_HIT | NO_DECONSTRUCTION /obj/item/bdsm_bed_kit name = "bdsm bed construction kit" @@ -41,6 +40,10 @@ . = ..() . += span_purple("[src] can be assembled by using Ctrl+Shift+Click while [src] is on the floor.") +// previously NO_DECONSTRUCTION +/obj/structure/bed/bdsm_bed/wrench_act_secondary(mob/living/user, obj/item/weapon) + return NONE + /obj/structure/bed/bdsm_bed/post_buckle_mob(mob/living/affected_mob) density = TRUE //Push them up from the normal lying position diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_structures/construction.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_structures/construction.dm index cc3ed2cdce8..7d35be6c12f 100644 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_structures/construction.dm +++ b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_structures/construction.dm @@ -3,7 +3,7 @@ name = "construction kit" desc = "Used for constructing various things" w_class = WEIGHT_CLASS_BULKY - obj_flags = CAN_BE_HIT | NO_DECONSTRUCTION + obj_flags = CAN_BE_HIT throwforce = 0 ///What is the path for the resulting structure generating by using this item? var/obj/structure/resulting_structure = /obj/structure/chair diff --git a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_structures/shibari_stand.dm b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_structures/shibari_stand.dm index 968b6a34925..9ceeaf04bc6 100644 --- a/modular_skyrat/modules/modular_items/lewd_items/code/lewd_structures/shibari_stand.dm +++ b/modular_skyrat/modules/modular_items/lewd_items/code/lewd_structures/shibari_stand.dm @@ -7,7 +7,6 @@ layer = 4 item_chair = null buildstacktype = null - obj_flags = CAN_BE_HIT | NO_DECONSTRUCTION ///Overlays for ropes var/static/mutable_appearance/shibari_rope_overlay var/static/mutable_appearance/shibari_rope_overlay_behind @@ -45,6 +44,10 @@ if(!has_buckled_mobs() && can_buckle) . += span_notice("They need to be wearing full-body shibari, and you need to be holding ropes!") +// previously NO_DECONSTRUCT +/obj/structure/chair/shibari_stand/wrench_act_secondary(mob/living/user, obj/item/weapon) + return NONE + /obj/structure/chair/shibari_stand/user_unbuckle_mob(mob/living/buckled_mob, mob/living/user) var/mob/living/buckled = buckled_mob if(buckled) diff --git a/modular_skyrat/modules/primitive_cooking_additions/code/stone_oven.dm b/modular_skyrat/modules/primitive_cooking_additions/code/stone_oven.dm index c4c21967a3c..8ccd6e5c668 100644 --- a/modular_skyrat/modules/primitive_cooking_additions/code/stone_oven.dm +++ b/modular_skyrat/modules/primitive_cooking_additions/code/stone_oven.dm @@ -6,7 +6,6 @@ icon = 'modular_skyrat/modules/primitive_cooking_additions/icons/stone_kitchen_machines.dmi' circuit = null use_power = FALSE - obj_flags = CAN_BE_HIT | NO_DECONSTRUCTION /// A list of the different oven trays we can spawn with var/static/list/random_oven_tray_types = list( @@ -32,6 +31,16 @@ . += span_notice("It can be taken apart with a crowbar.") +// previously NO_DECONSTRUCTION +/obj/machinery/oven/stone/default_deconstruction_screwdriver(mob/user, icon_state_open, icon_state_closed, obj/item/screwdriver) + return NONE + +/obj/machinery/oven/stone/default_deconstruction_crowbar(obj/item/crowbar, ignore_panel, custom_deconstruct) + return NONE + +/obj/machinery/oven/stone/default_pry_open(obj/item/crowbar, close_after_pry, open_density, closed_density) + return NONE + /obj/machinery/oven/stone/add_tray_to_oven(obj/item/plate/oven_tray, mob/baker) used_tray = oven_tray diff --git a/modular_skyrat/modules/primitive_cooking_additions/code/stone_stove.dm b/modular_skyrat/modules/primitive_cooking_additions/code/stone_stove.dm index 0057e758571..cdfd64719e3 100644 --- a/modular_skyrat/modules/primitive_cooking_additions/code/stone_stove.dm +++ b/modular_skyrat/modules/primitive_cooking_additions/code/stone_stove.dm @@ -10,7 +10,6 @@ use_power = FALSE circuit = null resistance_flags = FIRE_PROOF - obj_flags = CAN_BE_HIT | NO_DECONSTRUCTION /obj/machinery/primitive_stove/Initialize(mapload) . = ..() @@ -22,6 +21,13 @@ . += span_notice("It can be taken apart with a crowbar.") +// previously NO_DECONSTRUCTION +/obj/machinery/primitive_stove/default_deconstruction_screwdriver(mob/user, icon_state_open, icon_state_closed, obj/item/screwdriver) + return NONE + +/obj/machinery/primitive_stove/default_deconstruction_crowbar(obj/item/crowbar, ignore_panel, custom_deconstruct) + return NONE + /obj/machinery/primitive_stove/crowbar_act(mob/living/user, obj/item/tool) user.balloon_alert_to_viewers("disassembling...") if(!tool.use_tool(src, user, 2 SECONDS, volume = 100)) diff --git a/modular_skyrat/modules/primitive_structures/code/fencing.dm b/modular_skyrat/modules/primitive_structures/code/fencing.dm index 0aeb5a71e20..20816e9ba55 100644 --- a/modular_skyrat/modules/primitive_structures/code/fencing.dm +++ b/modular_skyrat/modules/primitive_structures/code/fencing.dm @@ -7,7 +7,7 @@ icon_state = "fence" layer = BELOW_OBJ_LAYER // I think this is the default but lets be safe? resistance_flags = FLAMMABLE - flags_1 = NO_DECONSTRUCTION | ON_BORDER_1 + flags_1 = ON_BORDER_1 /// If we randomize our icon on spawning var/random_icons = TRUE @@ -22,6 +22,10 @@ ) update_appearance() +// previously NO_DECONSTRUCTION +/obj/structure/railing/wirecutter_act(mob/living/user, obj/item/I) + return NONE + // Fence gates for the above mentioned fences /obj/structure/railing/wooden_fencing/gate diff --git a/modular_skyrat/modules/primitive_structures/code/storage_structures.dm b/modular_skyrat/modules/primitive_structures/code/storage_structures.dm index 58c08df7941..d35bd9ce1c6 100644 --- a/modular_skyrat/modules/primitive_structures/code/storage_structures.dm +++ b/modular_skyrat/modules/primitive_structures/code/storage_structures.dm @@ -5,7 +5,6 @@ icon_state = "shelf_wood" icon = 'modular_skyrat/modules/primitive_structures/icons/storage.dmi' resistance_flags = FLAMMABLE - obj_flags = CAN_BE_HIT | NO_DECONSTRUCTION /obj/structure/rack/wooden/MouseDrop_T(obj/object, mob/user, params) . = ..() @@ -16,6 +15,9 @@ object.pixel_x = clamp(text2num(LAZYACCESS(modifiers, ICON_X)) - 16, -(world.icon_size / 3), world.icon_size / 3) object.pixel_y = text2num(LAZYACCESS(modifiers, ICON_Y)) > 16 ? 10 : -4 +/obj/structure/rack/wrench_act_secondary(mob/living/user, obj/item/tool) + return NONE + /obj/structure/rack/wooden/crowbar_act(mob/living/user, obj/item/tool) user.balloon_alert_to_viewers("disassembling...") if(!tool.use_tool(src, user, 2 SECONDS, volume = 100)) @@ -37,28 +39,18 @@ base_icon_state = "barrel" icon = 'modular_skyrat/modules/primitive_structures/icons/storage.dmi' resistance_flags = FLAMMABLE - obj_flags = CAN_BE_HIT | NO_DECONSTRUCTION + material_drop = /obj/item/stack/sheet/mineral/wood + material_drop_amount = 4 + cutting_tool = /obj/item/crowbar -/obj/structure/closet/crate/wooden/storage_barrel/crowbar_act(mob/living/user, obj/item/tool) - user.balloon_alert_to_viewers("disassembling...") - if(!tool.use_tool(src, user, 2 SECONDS, volume = 100)) - return - new /obj/item/stack/sheet/mineral/clay(drop_location(), 5) - deconstruct(TRUE) - return ITEM_INTERACT_SUCCESS - -/obj/structure/closet/crate/wooden/storage_barrel/atom_deconstruct(disassembled = TRUE) - new /obj/item/stack/sheet/mineral/wood(drop_location(), 4) - return ..() - -/obj/machinery/smartfridge/producebin - name = "Produce Bin" - desc = "A wooden hamper, used to hold plant products and try keep them safe from pests." - icon_state = "producebin" +/obj/machinery/smartfridge/wooden + name = "Debug Wooden Smartfridge" + desc = "You shouldn't be seeing this!" icon = 'modular_skyrat/modules/primitive_structures/icons/storage.dmi' + icon_state = "producebin" resistance_flags = FLAMMABLE - base_build_path = /obj/machinery/smartfridge/producebin - base_icon_state = "produce" + base_build_path = /obj/machinery/smartfridge/wooden + base_icon_state = "producebin" use_power = NO_POWER_USE light_power = 0 idle_power_usage = 0 @@ -67,14 +59,16 @@ can_atmos_pass = ATMOS_PASS_YES visible_contents = TRUE -/obj/machinery/smartfridge/producebin/accept_check(obj/item/weapon) - return (istype(weapon, /obj/item/food/grown)) +/obj/machinery/smartfridge/wooden/Initialize(mapload) + . = ..() + if(type == /obj/machinery/smartfridge/wooden) // don't even let these prototypes exist + return INITIALIZE_HINT_QDEL -/obj/machinery/smartfridge/producebin/structure_examine() - . = span_info("The whole rack can be [EXAMINE_HINT("pried")] apart.") +// previously NO_DECONSTRUCTION +/obj/machinery/smartfridge/wooden/default_deconstruction_screwdriver(mob/user, icon_state_open, icon_state_closed, obj/item/screwdriver) + return NONE - -/obj/machinery/smartfridge/producebin/crowbar_act(mob/living/user, obj/item/tool) +/obj/machinery/smartfridge/wooden/crowbar_act(mob/living/user, obj/item/tool) user.balloon_alert_to_viewers("disassembling...") if(!tool.use_tool(src, user, 2 SECONDS, volume = 100)) return @@ -82,92 +76,51 @@ deconstruct(TRUE) return ITEM_INTERACT_SUCCESS -/obj/machinery/smartfridge/seedshelf +/obj/machinery/smartfridge/wooden/structure_examine() + . = span_info("The whole rack can be [EXAMINE_HINT("pried")] apart.") + +/obj/machinery/smartfridge/wooden/produce_bin + name = "produce bin" + desc = "A wooden hamper, used to hold plant products and try to keep them safe from pests." + icon_state = "producebin" + base_build_path = /obj/machinery/smartfridge/wooden/produce_bin + base_icon_state = "producebin" + +/obj/machinery/smartfridge/wooden/produce_bin/accept_check(obj/item/item_to_check) + var/static/list/accepted_items = list( + /obj/item/food/grown, + /obj/item/grown, + /obj/item/graft, + ) + + return is_type_in_list(item_to_check, accepted_items) + +/obj/machinery/smartfridge/wooden/seed_shelf name = "Seedshelf" desc = "A wooden shelf, used to hold seeds preventing them from germinating early." icon_state = "seedshelf" - icon = 'modular_skyrat/modules/primitive_structures/icons/storage.dmi' - resistance_flags = FLAMMABLE - base_build_path = /obj/machinery/smartfridge/seedshelf + base_build_path = /obj/machinery/smartfridge/wooden/seed_shelf base_icon_state = "seed" - use_power = NO_POWER_USE - light_power = 0 - idle_power_usage = 0 - circuit = null - has_emissive = FALSE - can_atmos_pass = ATMOS_PASS_YES - visible_contents = TRUE -/obj/machinery/smartfridge/seedshelf/accept_check(obj/item/weapon) +/obj/machinery/smartfridge/wooden/seedshelf/wooden/accept_check(obj/item/weapon) return istype(weapon, /obj/item/seeds) -/obj/machinery/smartfridge/seedshelf/structure_examine() - . = span_info("The whole rack can be [EXAMINE_HINT("pried")] apart.") - -/obj/machinery/smartfridge/seedshelf/crowbar_act(mob/living/user, obj/item/tool) - user.balloon_alert_to_viewers("disassembling...") - if(!tool.use_tool(src, user, 2 SECONDS, volume = 100)) - return - new /obj/item/stack/sheet/mineral/wood(drop_location(), 10) - deconstruct(TRUE) - return ITEM_INTERACT_SUCCESS - -/obj/machinery/smartfridge/rationshelf +/obj/machinery/smartfridge/wooden/ration_shelf name = "Ration shelf" desc = "A wooden shelf, used to store food... preferably preserved." icon_state = "rationshelf" - icon = 'modular_skyrat/modules/primitive_structures/icons/storage.dmi' - resistance_flags = FLAMMABLE - base_build_path = /obj/machinery/smartfridge/rationshelf + base_build_path = /obj/machinery/smartfridge/wooden/ration_shelf base_icon_state = "ration" - use_power = NO_POWER_USE - light_power = 0 - idle_power_usage = 0 - circuit = null - has_emissive = FALSE - can_atmos_pass = ATMOS_PASS_YES - visible_contents = TRUE -/obj/machinery/smartfridge/rationshelf/accept_check(obj/item/weapon) +/obj/machinery/smartfridge/wooden/rationshelf/wooden/accept_check(obj/item/weapon) return (IS_EDIBLE(weapon) || (istype(weapon,/obj/item/reagent_containers/cup/bowl) && length(weapon.reagents?.reagent_list))) -/obj/machinery/smartfridge/rationshelf/structure_examine() - . = span_info("The whole rack can be [EXAMINE_HINT("pried")] apart.") - -/obj/machinery/smartfridge/rationshelf/crowbar_act(mob/living/user, obj/item/tool) - user.balloon_alert_to_viewers("disassembling...") - if(!tool.use_tool(src, user, 2 SECONDS, volume = 100)) - return - new /obj/item/stack/sheet/mineral/wood(drop_location(), 10) - deconstruct(TRUE) - return ITEM_INTERACT_SUCCESS - -/obj/machinery/smartfridge/producedisplay +/obj/machinery/smartfridge/wooden/produce_display name = "Produce display" desc = "A wooden table with awning, used to display produce items." icon_state = "producedisplay" - icon = 'modular_skyrat/modules/primitive_structures/icons/storage.dmi' - resistance_flags = FLAMMABLE - base_build_path = /obj/machinery/smartfridge/producedisplay + base_build_path = /obj/machinery/smartfridge/wooden/produce_display base_icon_state = "nonfood" - use_power = NO_POWER_USE - light_power = 0 - idle_power_usage = 0 - circuit = null - has_emissive = FALSE - can_atmos_pass = ATMOS_PASS_YES - visible_contents = TRUE -/obj/machinery/smartfridge/producedisplay/accept_check(obj/item/weapon) +/obj/machinery/smartfridge/wooden/producedisplay/accept_check(obj/item/weapon) return (istype(weapon, /obj/item/grown) || istype(weapon, /obj/item/bouquet) || istype(weapon, /obj/item/clothing/head/costume/garland)) - -/obj/machinery/smartfridge/producedisplay/structure_examine() - . = span_info("The whole rack can be [EXAMINE_HINT("pried")] apart.") - -/obj/machinery/smartfridge/producedisplay/crowbar_act(mob/living/user, obj/item/tool) - user.balloon_alert_to_viewers("disassembling...") - if(!tool.use_tool(src, user, 2 SECONDS, volume = 100)) - return - new /obj/item/stack/sheet/mineral/wood(drop_location(), 10) - deconstruct(TRUE) - return ITEM_INTERACT_SUCCESS diff --git a/modular_skyrat/modules/primitive_structures/code/windows.dm b/modular_skyrat/modules/primitive_structures/code/windows.dm index ec861bb2d12..c2c27c62306 100644 --- a/modular_skyrat/modules/primitive_structures/code/windows.dm +++ b/modular_skyrat/modules/primitive_structures/code/windows.dm @@ -4,7 +4,7 @@ icon = 'modular_skyrat/modules/primitive_structures/icons/windows.dmi' icon_state = "green_glass" flags_1 = NONE - obj_flags = CAN_BE_HIT | NO_DECONSTRUCTION + obj_flags = parent_type::obj_flags | NO_DEBRIS_AFTER_DECONSTRUCTION can_be_unanchored = FALSE fulltile = TRUE flags_1 = PREVENT_CLICK_UNDER_1 diff --git a/modular_skyrat/modules/stasisrework/code/stasissleeper.dm b/modular_skyrat/modules/stasisrework/code/stasissleeper.dm index be21887eed6..3a909a7d87a 100644 --- a/modular_skyrat/modules/stasisrework/code/stasissleeper.dm +++ b/modular_skyrat/modules/stasisrework/code/stasissleeper.dm @@ -141,7 +141,7 @@ /obj/machinery/stasissleeper/default_pry_open(obj/item/used_item) if(occupant) thaw_them(occupant) - . = !(state_open || panel_open || (obj_flags & NO_DECONSTRUCTION)) && used_item.tool_behaviour == TOOL_CROWBAR + . = !(state_open || panel_open) && used_item.tool_behaviour == TOOL_CROWBAR if(.) used_item.play_tool_sound(src, 50) visible_message(span_notice("[usr] pries open [src]."), span_notice("You pry open [src].")) diff --git a/modular_skyrat/modules/wrestlingring/code/wrestlingring.dm b/modular_skyrat/modules/wrestlingring/code/wrestlingring.dm index d865fc0653f..384921be62a 100644 --- a/modular_skyrat/modules/wrestlingring/code/wrestlingring.dm +++ b/modular_skyrat/modules/wrestlingring/code/wrestlingring.dm @@ -121,8 +121,6 @@ ///Implements behaviour that makes it possible to unanchor the railing. /obj/structure/wrestling_corner/wrench_act(mob/living/user, obj/item/tool) . = ..() - if(obj_flags & NO_DECONSTRUCTION) - return to_chat(user, span_notice("You begin to [anchored ? "unfasten the turnbuckle from":"fasten the turnbuckle to"] the floor...")) if(tool.use_tool(src, user, volume = 75, extra_checks = CALLBACK(src, PROC_REF(check_anchored), anchored))) set_anchored(!anchored)