diff --git a/_maps/RandomZLevels/moonoutpost19.dmm b/_maps/RandomZLevels/moonoutpost19.dmm index 153a3ca27e4..2f6d0af8bde 100644 --- a/_maps/RandomZLevels/moonoutpost19.dmm +++ b/_maps/RandomZLevels/moonoutpost19.dmm @@ -2178,8 +2178,7 @@ /area/awaymission/moonoutpost19/research) "ex" = ( /obj/machinery/atmospherics/pipe/manifold{ - dir = 4; - level = 2 + dir = 4 }, /obj/structure/cable, /turf/open/floor/plasteel/white, diff --git a/_maps/RandomZLevels/undergroundoutpost45.dmm b/_maps/RandomZLevels/undergroundoutpost45.dmm index b58ef84501e..4215651a728 100644 --- a/_maps/RandomZLevels/undergroundoutpost45.dmm +++ b/_maps/RandomZLevels/undergroundoutpost45.dmm @@ -1184,7 +1184,6 @@ "cM" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 5; - level = 2 }, /turf/open/floor/plating{ heat_capacity = 1e+006 @@ -3873,7 +3872,6 @@ "hU" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4; - level = 2 }, /obj/structure/table, /obj/item/book/manual/chef_recipes, @@ -3886,7 +3884,6 @@ /obj/effect/spawner/structure/window/reinforced, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4; - level = 2 }, /turf/open/floor/plating{ heat_capacity = 1e+006 @@ -9399,7 +9396,6 @@ }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4; - level = 2 }, /obj/machinery/door/airlock/maintenance{ name = "Research Maintenance"; @@ -11265,7 +11261,6 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/computer/atmos_control{ dir = 4; - level = 3; name = "Distribution and Waste Monitor"; sensors = list("UO45_air_sensor" = "Mixed Air Supply Tank", "UO45_distro_meter" = "Distribution Loop", "UO45_waste_meter" = "Waste Loop") }, diff --git a/code/__DEFINES/dcs/signals.dm b/code/__DEFINES/dcs/signals.dm index 46c75d05b93..b4f95f407b8 100644 --- a/code/__DEFINES/dcs/signals.dm +++ b/code/__DEFINES/dcs/signals.dm @@ -248,6 +248,7 @@ #define COMSIG_OBJ_DECONSTRUCT "obj_deconstruct" //from base of obj/deconstruct(): (disassembled) #define COMSIG_OBJ_SETANCHORED "obj_setanchored" //called in /obj/structure/setAnchored(): (value) #define COMSIG_OBJ_DEFAULT_UNFASTEN_WRENCH "obj_default_unfasten_wrench" //from base of code/game/machinery +#define COMSIG_OBJ_HIDE "obj_hide" //from base of /turf/proc/levelupdate(). (intact) true to hide and false to unhide // /obj/machinery signals #define COMSIG_MACHINERY_BROKEN "machinery_broken" //from /obj/machinery/obj_break(damage_flag): (damage_flag) diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index 2dc7aa59607..18c4bfef74d 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -482,3 +482,6 @@ GLOBAL_LIST_INIT(pda_styles, sortList(list(MONO, VT, ORBITRON, SHARE))) #define ALIGNMENT_GOOD "good" #define ALIGNMENT_NEUT "neutral" #define ALIGNMENT_EVIL "evil" + +// The alpha we give to stuff under tiles, if they want it +#define ALPHA_UNDERTILE 128 diff --git a/code/controllers/subsystem/minor_mapping.dm b/code/controllers/subsystem/minor_mapping.dm index 8f471e40dce..08cd08780b8 100644 --- a/code/controllers/subsystem/minor_mapping.dm +++ b/code/controllers/subsystem/minor_mapping.dm @@ -29,10 +29,10 @@ SUBSYSTEM_DEF(minor_mapping) while(turfs.len && amount > 0) var/turf/T = pick_n_take(turfs) - var/obj/item/storage/backpack/satchel/flat/S = new(T) - S.hide(intact=TRUE) - amount-- + var/obj/item/storage/backpack/satchel/flat/F = new(T) + SEND_SIGNAL(F, COMSIG_OBJ_HIDE, T.intact) + amount-- /proc/find_exposed_wires() var/list/exposed_wires = list() diff --git a/code/datums/components/plumbing/_plumbing.dm b/code/datums/components/plumbing/_plumbing.dm index 2bc2fc3c86b..31e1931b23b 100644 --- a/code/datums/components/plumbing/_plumbing.dm +++ b/code/datums/components/plumbing/_plumbing.dm @@ -3,10 +3,10 @@ var/list/datum/ductnet/ducts = list() ///shortcut to our parents' reagent holder var/datum/reagents/reagents - ///TRUE if we wanna add proper pipe outless under our parent object. this is pretty good if i may so so myself + ///TRUE if we wanna add proper pipe overlays under our parent object. this is pretty good if i may so so myself var/use_overlays = TRUE - ///We can't just cut all of the parents' overlays, so we'll track them here - var/list/image/ducterlays + ///Whether our tile is covered and we should hide our ducts + var/tile_covered = FALSE ///directions in wich we act as a supplier var/supply_connects ///direction in wich we act as a demander @@ -17,8 +17,9 @@ var/turn_connects = TRUE /datum/component/plumbing/Initialize(start=TRUE, _turn_connects=TRUE) //turn_connects for wheter or not we spin with the object to change our pipes - if(parent && !ismovable(parent)) + if(!ismovable(parent)) return COMPONENT_INCOMPATIBLE + var/atom/movable/AM = parent if(!AM.reagents) return COMPONENT_INCOMPATIBLE @@ -27,9 +28,13 @@ RegisterSignal(parent, list(COMSIG_MOVABLE_MOVED,COMSIG_PARENT_PREQDELETED), .proc/disable) RegisterSignal(parent, list(COMSIG_OBJ_DEFAULT_UNFASTEN_WRENCH), .proc/toggle_active) + RegisterSignal(parent, list(COMSIG_OBJ_HIDE), .proc/hide) + RegisterSignal(parent, list(COMSIG_ATOM_UPDATE_OVERLAYS), .proc/create_overlays) if(start) - enable() + //timer 0 so it can finish returning initialize, after which we're added to the parent. + //Only then can we tell the duct next to us they can connect, because only then is the component really added. this was a fun one + addtimer(CALLBACK(src, .proc/enable), 0) if(use_overlays) create_overlays() @@ -42,6 +47,7 @@ for(var/D in GLOB.cardinals) if(D & demand_connects) send_request(D) + ///Can we be added to the ductnet? /datum/component/plumbing/proc/can_add(datum/ductnet/D, dir) if(!active) @@ -52,9 +58,11 @@ return FALSE return TRUE + ///called from in process(). only calls process_request(), but can be overwritten for children with special behaviour /datum/component/plumbing/proc/send_request(dir) process_request(amount = MACHINE_REAGENT_TRANSFER, reagent = null, dir = dir) + ///check who can give us what we want, and how many each of them will give us /datum/component/plumbing/proc/process_request(amount, reagent, dir) var/list/valid_suppliers = list() @@ -69,6 +77,7 @@ for(var/A in valid_suppliers) var/datum/component/plumbing/give = A give.transfer_to(src, amount / valid_suppliers.len, reagent, net) + ///returns TRUE when they can give the specified amount and reagent. called by process request /datum/component/plumbing/proc/can_give(amount, reagent, datum/ductnet/net) if(amount <= 0) @@ -81,6 +90,7 @@ return TRUE else if(reagents.total_volume > 0) //take whatever return TRUE + ///this is where the reagent is actually transferred and is thus the finish point of our process() /datum/component/plumbing/proc/transfer_to(datum/component/plumbing/target, amount, reagent, datum/ductnet/net) if(!reagents || !target || !target.reagents) @@ -89,13 +99,12 @@ reagents.trans_id_to(target.parent, reagent, amount) else reagents.trans_to(target.parent, amount, round_robin = TRUE)//we deal with alot of precise calculations so we round_robin=TRUE. Otherwise we get floating point errors, 1 != 1 and 2.5 + 2.5 = 6 + ///We create our luxurious piping overlays/underlays, to indicate where we do what. only called once if use_overlays = TRUE in Initialize() -/datum/component/plumbing/proc/create_overlays() - var/atom/movable/AM = parent - for(var/image/I in ducterlays) - AM.overlays.Remove(I) - qdel(I) - ducterlays = list() +/datum/component/plumbing/proc/create_overlays(atom/A, list/overlays) + if(tile_covered || !use_overlays) + return + for(var/D in GLOB.cardinals) var/color var/direction @@ -105,6 +114,7 @@ color = "blue" //blue is nice and gives else continue + var/image/I if(turn_connects) switch(D) @@ -116,21 +126,25 @@ direction = "east" if(WEST) direction = "west" - I = image('icons/obj/plumbing/plumbers.dmi', "[direction]-[color]", layer = AM.layer - 1) + I = image('icons/obj/plumbing/plumbers.dmi', "[direction]-[color]", layer = A.layer - 1) else - I = image('icons/obj/plumbing/plumbers.dmi', color, layer = AM.layer - 1) //color is not color as in the var, it's just the name + I = image('icons/obj/plumbing/plumbers.dmi', color, layer = A.layer - 1) //color is not color as in the var, it's just the name I.dir = D - AM.add_overlay(I) - ducterlays += I + overlays += I + ///we stop acting like a plumbing thing and disconnect if we are, so we can safely be moved and stuff /datum/component/plumbing/proc/disable() if(!active) return + STOP_PROCESSING(SSfluids, src) + for(var/A in ducts) var/datum/ductnet/D = ducts[A] D.remove_plumber(src) + active = FALSE + for(var/D in GLOB.cardinals) if(D & (demand_connects | supply_connects)) for(var/obj/machinery/duct/duct in get_step(parent, D)) @@ -141,8 +155,10 @@ /datum/component/plumbing/proc/enable() if(active) return + update_dir() active = TRUE + var/atom/movable/AM = parent for(var/obj/machinery/duct/D in AM.loc) //Destroy any ducts under us. Ducts also self destruct if placed under a plumbing machine. machines disable when they get moved if(D.anchored) //that should cover everything @@ -152,8 +168,10 @@ START_PROCESSING(SSfluids, src) for(var/D in GLOB.cardinals) + if(D & (demand_connects | supply_connects)) for(var/atom/movable/A in get_step(parent, D)) + if(istype(A, /obj/machinery/duct)) var/obj/machinery/duct/duct = A duct.attempt_connect() @@ -168,17 +186,20 @@ enable() else disable() + /** We update our connects only when we settle down by taking our current and original direction to find our new connects * If someone wants it to fucking spin while connected to something go actually knock yourself out */ /datum/component/plumbing/proc/update_dir() if(!turn_connects) return + var/atom/movable/AM = parent var/new_demand_connects var/new_supply_connects var/new_dir = AM.dir var/angle = 180 - dir2angle(new_dir) + if(new_dir == SOUTH) demand_connects = initial(demand_connects) supply_connects = initial(supply_connects) @@ -190,10 +211,12 @@ new_supply_connects += turn(D, angle) demand_connects = new_demand_connects supply_connects = new_supply_connects + ///Give the direction of a pipe, and it'll return wich direction it originally was when it's object pointed SOUTH /datum/component/plumbing/proc/get_original_direction(dir) var/atom/movable/AM = parent return turn(dir, dir2angle(AM.dir) - 180) + //special case in-case we want to connect directly with another machine without a duct /datum/component/plumbing/proc/direct_connect(datum/component/plumbing/P, dir) if(!P.active) @@ -204,12 +227,18 @@ net.add_plumber(src, dir) net.add_plumber(P, opposite_dir) +/datum/component/plumbing/proc/hide(atom/movable/AM, intact) + tile_covered = intact + AM.update_icon() + ///has one pipe input that only takes, example is manual output pipe /datum/component/plumbing/simple_demand demand_connects = NORTH + ///has one pipe output that only supplies. example is liquid pump and manual input pipe /datum/component/plumbing/simple_supply supply_connects = NORTH + ///input and output, like a holding tank /datum/component/plumbing/tank demand_connects = WEST diff --git a/code/datums/elements/undertile.dm b/code/datums/elements/undertile.dm new file mode 100644 index 00000000000..7bdbae2aa14 --- /dev/null +++ b/code/datums/elements/undertile.dm @@ -0,0 +1,59 @@ +///Add to an object if you want to be able to be hidden under tiles +/datum/element/undertile + element_flags = ELEMENT_BESPOKE | COMPONENT_DUPE_HIGHLANDER + id_arg_index = 2 + + ///the invisiblity trait applied, like TRAIT_T_RAY_VISIBLE + var/invisibility_trait + ///level of invisibility applied when under a tile. Could be INVISIBILITY_OBSERVER if you still want it to be visible to ghosts + var/invisibility_level + ///an overlay for the tile if we wish to apply that + var/tile_overlay + ///whether we use alpha or not. TRUE uses ALPHA_UNDERTILE because otherwise we have 200 different instances of this element for different alphas + var/use_alpha + ///We will switch between anchored and unanchored. for stuff like satchels that shouldnt be pullable under tiles but are otherwise unanchored + var/use_anchor + +/datum/element/undertile/Attach(datum/target, invisibility_trait, invisibility_level = INVISIBILITY_MAXIMUM, tile_overlay, use_alpha = TRUE, use_anchor = FALSE) + . = ..() + if(!ismovable(target)) + return ELEMENT_INCOMPATIBLE + + RegisterSignal(target, COMSIG_OBJ_HIDE, .proc/hide) + + src.invisibility_trait = invisibility_trait + src.invisibility_level = invisibility_level + src.tile_overlay = tile_overlay + src.use_alpha = use_alpha + src.use_anchor = use_anchor + +///called when a tile has been covered or uncovered +/datum/element/undertile/proc/hide(atom/movable/source, covered) + source.invisibility = covered ? invisibility_level : 0 + + var/turf/T = get_turf(source) + + if(covered) + if(invisibility_trait) + ADD_TRAIT(source, invisibility_trait, TRAIT_GENERIC) + if(tile_overlay) + T.add_overlay(tile_overlay) + if(use_alpha) + source.alpha = ALPHA_UNDERTILE + if(use_anchor) + source.anchored = TRUE + + else + if(invisibility_trait) + REMOVE_TRAIT(source, invisibility_trait, TRAIT_GENERIC) + if(tile_overlay) + T.overlays -= tile_overlay + if(use_alpha) + source.alpha = 255 + if(use_anchor) + source.anchored = FALSE + +/datum/element/undertile/Detach(atom/movable/AM, visibility_trait, invisibility_level = INVISIBILITY_MAXIMUM) + . = ..() + + hide(AM, FALSE) diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm index 139fe43fe9c..55dcfd04a25 100644 --- a/code/game/area/areas.dm +++ b/code/game/area/areas.dm @@ -4,7 +4,6 @@ * A grouping of tiles into a logical space, mostly used by map editors */ /area - level = null name = "Space" icon = 'icons/turf/areas.dmi' icon_state = "unknown" diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 52b02101ee0..9005e43bd25 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -7,7 +7,6 @@ /atom layer = TURF_LAYER plane = GAME_PLANE - var/level = 2 ///If non-null, overrides a/an/some in all cases var/article diff --git a/code/game/machinery/Beacon.dm b/code/game/machinery/Beacon.dm index 3d0931d534b..7593e392fc8 100644 --- a/code/game/machinery/Beacon.dm +++ b/code/game/machinery/Beacon.dm @@ -4,7 +4,6 @@ icon_state = "floor_beaconf" name = "bluespace gigabeacon" desc = "A device that draws power from bluespace and creates a permanent tracking beacon." - level = 1 // underfloor layer = LOW_OBJ_LAYER use_power = IDLE_POWER_USE idle_power_usage = 0 @@ -16,27 +15,12 @@ Beacon = new(T) Beacon.invisibility = INVISIBILITY_MAXIMUM - hide(T.intact) + AddElement(/datum/element/undertile, TRAIT_T_RAY_VISIBLE) /obj/machinery/bluespace_beacon/Destroy() QDEL_NULL(Beacon) return ..() -// update the invisibility and icon -/obj/machinery/bluespace_beacon/hide(intact) - invisibility = intact ? INVISIBILITY_MAXIMUM : 0 - updateicon() - -// update the icon_state -/obj/machinery/bluespace_beacon/proc/updateicon() - var/state="floor_beacon" - - if(invisibility) - icon_state = "[state]f" - - else - icon_state = "[state]" - /obj/machinery/bluespace_beacon/process() if(!Beacon) var/turf/T = loc @@ -44,5 +28,3 @@ Beacon.invisibility = INVISIBILITY_MAXIMUM else if (Beacon.loc != loc) Beacon.forceMove(loc) - - updateicon() diff --git a/code/game/machinery/magnet.dm b/code/game/machinery/magnet.dm index 43daf1ec5f1..02c320f2a48 100644 --- a/code/game/machinery/magnet.dm +++ b/code/game/machinery/magnet.dm @@ -9,7 +9,6 @@ icon_state = "floor_magnet-f" name = "electromagnetic generator" desc = "A device that uses station power to create points of magnetic energy." - level = 1 // underfloor layer = LOW_OBJ_LAYER use_power = IDLE_POWER_USE idle_power_usage = 50 @@ -30,9 +29,11 @@ /obj/machinery/magnetic_module/Initialize() ..() var/turf/T = loc - hide(T.intact) center = T SSradio.add_object(src, freq, RADIO_MAGNETS) + + AddElement(/datum/element/undertile, TRAIT_T_RAY_VISIBLE) + return INITIALIZE_HINT_LATELOAD /obj/machinery/magnetic_module/LateInitialize() @@ -43,23 +44,16 @@ center = null return ..() -// update the invisibility and icon -/obj/machinery/magnetic_module/hide(intact) - invisibility = intact ? INVISIBILITY_MAXIMUM : 0 - update_icon() // update the icon_state /obj/machinery/magnetic_module/update_icon_state() var/state="floor_magnet" var/onstate="" + if(!on) onstate="0" - if(invisibility) - icon_state = "[state][onstate]-f" // if invisible, set icon to faded version - // in case of being revealed by T-scanner - else - icon_state = "[state][onstate]" + icon_state = "[state][onstate]" /obj/machinery/magnetic_module/receive_signal(datum/signal/signal) diff --git a/code/game/machinery/navbeacon.dm b/code/game/machinery/navbeacon.dm index 4cb33e4d1a1..64ea63081cf 100644 --- a/code/game/machinery/navbeacon.dm +++ b/code/game/machinery/navbeacon.dm @@ -7,7 +7,6 @@ icon_state = "navbeacon0-f" name = "navigation beacon" desc = "A radio beacon used for bot navigation and crew wayfinding." - level = 1 // underfloor layer = LOW_OBJ_LAYER max_integrity = 500 armor = list("melee" = 70, "bullet" = 70, "laser" = 70, "energy" = 70, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 80) @@ -36,11 +35,10 @@ set_codes() - var/turf/T = loc - hide(T.intact) - glob_lists_register(init=TRUE) + AddElement(/datum/element/undertile, TRAIT_T_RAY_VISIBLE) + /obj/machinery/navbeacon/Destroy() glob_lists_deregister() return ..() @@ -90,21 +88,9 @@ if(codes["wayfinding"]) GLOB.wayfindingbeacons += src -// called when turf state changes -// hide the object if turf is intact -/obj/machinery/navbeacon/hide(intact) - invisibility = intact ? INVISIBILITY_MAXIMUM : 0 - update_icon() - // update the icon_state /obj/machinery/navbeacon/update_icon_state() - var/state="navbeacon[open]" - - if(invisibility) - icon_state = "[state]-f" // if invisible, set icon to faded version - // in case revealed by T-scanner - else - icon_state = "[state]" + icon_state = "navbeacon[open]" /obj/machinery/navbeacon/attackby(obj/item/I, mob/user, params) var/turf/T = loc diff --git a/code/game/machinery/pipe/construction.dm b/code/game/machinery/pipe/construction.dm index e5d42354373..25c9bddeff0 100644 --- a/code/game/machinery/pipe/construction.dm +++ b/code/game/machinery/pipe/construction.dm @@ -18,7 +18,6 @@ Buildable meters icon_state = "simple" item_state = "buildpipe" w_class = WEIGHT_CLASS_NORMAL - level = 2 var/piping_layer = PIPING_LAYER_DEFAULT var/RPD_type diff --git a/code/game/objects/effects/effect_system/effects_foam.dm b/code/game/objects/effects/effect_system/effects_foam.dm index c6461b6baac..1edd966ce0b 100644 --- a/code/game/objects/effects/effect_system/effects_foam.dm +++ b/code/game/objects/effects/effect_system/effects_foam.dm @@ -141,10 +141,6 @@ for(var/obj/O in range(0,src)) if(O.type == src.type) continue - if(isturf(O.loc)) - var/turf/T = O.loc - if(T.intact && O.level == 1) //hidden under the floor - continue if(lifetime % reagent_divisor) reagents.reaction(O, VAPOR, fraction) var/hit = 0 diff --git a/code/game/objects/effects/effect_system/effects_smoke.dm b/code/game/objects/effects/effect_system/effects_smoke.dm index 0493a176827..daff05e223c 100644 --- a/code/game/objects/effects/effect_system/effects_smoke.dm +++ b/code/game/objects/effects/effect_system/effects_smoke.dm @@ -232,8 +232,6 @@ for(var/atom/movable/AM in T) if(AM.type == src.type) continue - if(T.intact && AM.level == 1) //hidden under the floor - continue reagents.reaction(AM, TOUCH, fraction) reagents.reaction(T, TOUCH, fraction) diff --git a/code/game/objects/items/devices/pressureplates.dm b/code/game/objects/items/devices/pressureplates.dm index 60fa1fbadb4..50b105220dd 100644 --- a/code/game/objects/items/devices/pressureplates.dm +++ b/code/game/objects/items/devices/pressureplates.dm @@ -4,7 +4,6 @@ icon = 'icons/obj/puzzle_small.dmi' item_state = "flash" icon_state = "pressureplate" - level = 1 layer = LOW_OBJ_LAYER var/trigger_mob = TRUE var/trigger_item = FALSE @@ -30,8 +29,9 @@ sigdev = new sigdev.code = roundstart_signaller_code sigdev.frequency = roundstart_signaller_freq - if(isopenturf(loc)) - hide(TRUE) + + AddElement(/datum/element/undertile, tile_overlay = tile_overlay, use_anchor = TRUE) + RegisterSignal(src, COMSIG_OBJ_HIDE, .proc/ToggleActive) /obj/item/pressure_plate/Crossed(atom/movable/AM) . = ..() @@ -76,19 +76,7 @@ else to_chat(user, "You turn [src] off.") -/obj/item/pressure_plate/hide(yes) - if(yes) - invisibility = INVISIBILITY_MAXIMUM - anchored = TRUE - icon_state = null - active = TRUE - can_trigger = TRUE - if(tile_overlay) - loc.add_overlay(tile_overlay) - else - invisibility = initial(invisibility) - anchored = FALSE - icon_state = initial(icon_state) - active = FALSE - if(tile_overlay) - loc.overlays -= tile_overlay +///Called from COMSIG_OBJ_HIDE to toggle the active part, because yeah im not making a special exception on the element to support it +/obj/item/pressure_plate/proc/ToggleActive(datum/source, covered) + active = covered + diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm index b02b4f84b05..6b8e96368fd 100644 --- a/code/game/objects/items/devices/scanners.dm +++ b/code/game/objects/items/devices/scanners.dm @@ -65,8 +65,6 @@ GENE SCANNER return var/list/t_ray_images = list() for(var/obj/O in orange(distance, viewer) ) - if(O.level != 1) - continue if(O.invisibility == INVISIBILITY_MAXIMUM || HAS_TRAIT(O, TRAIT_T_RAY_VISIBLE)) var/image/I = new(loc = get_turf(O)) diff --git a/code/game/objects/items/puzzle_pieces.dm b/code/game/objects/items/puzzle_pieces.dm index 69cc78fe135..24fd1a30044 100644 --- a/code/game/objects/items/puzzle_pieces.dm +++ b/code/game/objects/items/puzzle_pieces.dm @@ -116,9 +116,10 @@ var/reward = /obj/item/reagent_containers/food/snacks/cookie var/claimed = FALSE -/obj/item/pressure_plate/hologrid/hide(yes) +/obj/item/pressure_plate/hologrid/Initialize() . = ..() - anchored = TRUE + + AddElement(/datum/element/undertile, tile_overlay = tile_overlay) //we remove use_anchor here, so it ALWAYS stays anchored /obj/item/pressure_plate/hologrid/examine(mob/user) . = ..() diff --git a/code/game/objects/items/storage/backpack.dm b/code/game/objects/items/storage/backpack.dm index 59463a09fbf..947fc25548e 100644 --- a/code/game/objects/items/storage/backpack.dm +++ b/code/game/objects/items/storage/backpack.dm @@ -302,7 +302,10 @@ icon_state = "satchel-flat" item_state = "satchel-flat" w_class = WEIGHT_CLASS_NORMAL //Can fit in backpacks itself. - level = 1 + +/obj/item/storage/backpack/satchel/flat/Initialize(mapload) + . = ..() + AddElement(/datum/element/undertile, TRAIT_T_RAY_VISIBLE, INVISIBILITY_OBSERVER, use_anchor = TRUE) /obj/item/storage/backpack/satchel/flat/ComponentInitialize() . = ..() @@ -310,18 +313,6 @@ STR.max_combined_w_class = 15 STR.set_holdable(null, list(/obj/item/storage/backpack/satchel/flat)) //muh recursive backpacks) -/obj/item/storage/backpack/satchel/flat/hide(intact) - if(intact) - invisibility = INVISIBILITY_OBSERVER - anchored = TRUE //otherwise you can start pulling, cover it, and drag around an invisible backpack. - icon_state = "[initial(icon_state)]2" - ADD_TRAIT(src, TRAIT_T_RAY_VISIBLE, TRAIT_GENERIC) - else - invisibility = initial(invisibility) - anchored = FALSE - icon_state = initial(icon_state) - REMOVE_TRAIT(src, TRAIT_T_RAY_VISIBLE, TRAIT_GENERIC) - /obj/item/storage/backpack/satchel/flat/PopulateContents() var/datum/supply_pack/costumes_toys/randomised/contraband/C = new for(var/i in 1 to 2) diff --git a/code/game/objects/obj_defense.dm b/code/game/objects/obj_defense.dm index e5a093a35d8..4208ec3e300 100644 --- a/code/game/objects/obj_defense.dm +++ b/code/game/objects/obj_defense.dm @@ -90,10 +90,6 @@ return TRUE /obj/blob_act(obj/structure/blob/B) - if(isturf(loc)) - var/turf/T = loc - if(T.intact && level == 1) //the blob doesn't destroy thing below the floor - return take_damage(400, BRUTE, "melee", 0, get_dir(src, B)) /obj/proc/attack_generic(mob/user, damage_amount = 0, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, armor_penetration = 0) //used by attack_alien, attack_animal, and attack_slime @@ -201,10 +197,6 @@ GLOBAL_DATUM_INIT(acid_overlay, /mutable_appearance, mutable_appearance('icons/e ///Called when the obj is exposed to fire. /obj/fire_act(exposed_temperature, exposed_volume) - if(isturf(loc)) - var/turf/T = loc - if(T.intact && level == 1) //fire can't damage things hidden below the floor. - return if(exposed_temperature && !(resistance_flags & FIRE_PROOF)) take_damage(clamp(0.02 * exposed_temperature, 0, 20), BURN, "fire", 0) if(!(resistance_flags & ON_FIRE) && (resistance_flags & FLAMMABLE) && !(resistance_flags & FIRE_PROOF)) diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index 4cfa3482006..06921570865 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -198,9 +198,6 @@ if(istype(M) && M.client && M.machine == src) src.attack_self(M) -/obj/proc/hide(h) - return - /obj/singularity_pull(S, current_size) ..() if(!anchored || current_size >= STAGE_FIVE) diff --git a/code/game/objects/structures/safe.dm b/code/game/objects/structures/safe.dm index 4a2b6a65448..0496aa49ed3 100644 --- a/code/game/objects/structures/safe.dm +++ b/code/game/objects/structures/safe.dm @@ -13,7 +13,7 @@ FLOOR SAFES anchored = TRUE density = TRUE resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF - interaction_flags_atom = INTERACT_ATOM_ATTACK_HAND | INTERACT_ATOM_UI_INTERACT + interaction_flags_atom = INTERACT_ATOM_ATTACK_HAND | INTERACT_ATOM_UI_INTERACT var/open = FALSE //is the safe open? var/tumbler_1_pos //the tumbler position- from 0 to 72 var/tumbler_1_open //the tumbler position to open at- 0 to 72 @@ -196,16 +196,10 @@ FLOOR SAFES name = "floor safe" icon_state = "floorsafe" density = FALSE - level = 1 //underfloor layer = LOW_OBJ_LAYER /obj/structure/safe/floor/Initialize(mapload) . = ..() - if(mapload) - var/turf/T = loc - hide(T.intact) - -/obj/structure/safe/floor/hide(var/intact) - invisibility = intact ? INVISIBILITY_MAXIMUM : 0 + AddElement(/datum/element/undertile) diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index cb2c0d83539..2d3280c1c8b 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -634,7 +634,6 @@ smooth = SMOOTH_TRUE state = RWINDOW_SECURE canSmoothWith = list(/obj/structure/window/fulltile, /obj/structure/window/reinforced/fulltile, /obj/structure/window/reinforced/tinted/fulltile, /obj/structure/window/plasma/fulltile, /obj/structure/window/plasma/reinforced/fulltile) - level = 3 glass_amount = 2 /obj/structure/window/reinforced/fulltile/unanchored @@ -649,7 +648,6 @@ flags_1 = PREVENT_CLICK_UNDER_1 smooth = SMOOTH_TRUE canSmoothWith = list(/obj/structure/window/fulltile, /obj/structure/window/reinforced/fulltile, /obj/structure/window/reinforced/tinted/fulltile, /obj/structure/window/plasma/fulltile, /obj/structure/window/plasma/reinforced/fulltile) - level = 3 glass_amount = 2 /obj/structure/window/reinforced/fulltile/ice @@ -657,7 +655,6 @@ icon_state = "ice_window" max_integrity = 150 canSmoothWith = list(/obj/structure/window/fulltile, /obj/structure/window/reinforced/fulltile, /obj/structure/window/reinforced/tinted/fulltile, /obj/structure/window/plasma/fulltile, /obj/structure/window/plasma/reinforced/fulltile) - level = 3 glass_amount = 2 /obj/structure/window/shuttle @@ -676,7 +673,6 @@ smooth = SMOOTH_TRUE canSmoothWith = null explosion_block = 3 - level = 3 glass_type = /obj/item/stack/sheet/titaniumglass glass_amount = 2 @@ -704,8 +700,7 @@ smooth = SMOOTH_TRUE canSmoothWith = null explosion_block = 3 - damage_deflection = 11 //The same as normal reinforced windows. - level = 3 + damage_deflection = 11 //The same as normal reinforced windows.3 glass_type = /obj/item/stack/sheet/plastitaniumglass glass_amount = 2 rad_insulation = RAD_HEAVY_INSULATION diff --git a/code/game/turfs/open/floor.dm b/code/game/turfs/open/floor.dm index bfdbead98a9..d3f69c33003 100644 --- a/code/game/turfs/open/floor.dm +++ b/code/game/turfs/open/floor.dm @@ -98,8 +98,7 @@ /turf/open/floor/is_shielded() for(var/obj/structure/A in contents) - if(A.level == 3) - return 1 + return 1 /turf/open/floor/blob_act(obj/structure/blob/B) return diff --git a/code/game/turfs/open/floor/plating.dm b/code/game/turfs/open/floor/plating.dm index 4668993ac78..694fb778d18 100644 --- a/code/game/turfs/open/floor/plating.dm +++ b/code/game/turfs/open/floor/plating.dm @@ -69,10 +69,9 @@ else if(istype(C, /obj/item/stack/tile)) if(!broken && !burnt) for(var/obj/O in src) - if(O.level == 1) //ex. pipes laid underneath a tile - for(var/M in O.buckled_mobs) - to_chat(user, "Someone is buckled to \the [O]! Unbuckle [M] to move \him out of the way.") - return + for(var/M in O.buckled_mobs) + to_chat(user, "Someone is buckled to \the [O]! Unbuckle [M] to move \him out of the way.") + return var/obj/item/stack/tile/W = C if(!W.use(1)) return diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index 89c6d6d22e5..00f0ff1bfed 100755 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -1,6 +1,5 @@ /turf icon = 'icons/turf/floors.dmi' - level = 1 var/intact = 1 @@ -342,14 +341,12 @@ /turf/proc/levelupdate() for(var/obj/O in src) - if(O.level == 1 && (O.flags_1 & INITIALIZED_1)) - O.hide(src.intact) + if(O.flags_1 & INITIALIZED_1) + SEND_SIGNAL(O, COMSIG_OBJ_HIDE, intact) // override for space turfs, since they should never hide anything /turf/open/space/levelupdate() - for(var/obj/O in src) - if(O.level == 1 && (O.flags_1 & INITIALIZED_1)) - O.hide(0) + return // Removes all signs of lattice on the pos of the turf -Donkieyo /turf/proc/RemoveLattice() @@ -398,8 +395,6 @@ /turf/singularity_act() if(intact) for(var/obj/O in contents) //this is for deleting things like wires contained in the turf - if(O.level != 1) - continue if(O.invisibility == INVISIBILITY_MAXIMUM) O.singularity_act() ScrapeAway(flags = CHANGETURF_INHERIT_AIR) @@ -427,19 +422,10 @@ /turf/proc/is_shielded() /turf/contents_explosion(severity, target) - var/affecting_level - if(severity == 1) - affecting_level = 1 - else if(is_shielded()) - affecting_level = 3 - else if(intact) - affecting_level = 2 - else - affecting_level = 1 for(var/V in contents) var/atom/A = V - if(!QDELETED(A) && A.level >= affecting_level) + if(!QDELETED(A)) if(ismovable(A)) var/atom/movable/AM = A if(!AM.ex_check(explosion_id)) @@ -488,11 +474,9 @@ acid_type = /obj/effect/acid/alien var/has_acid_effect = FALSE for(var/obj/O in src) - if(intact && O.level == 1) //hidden under the floor - continue if(istype(O, acid_type)) var/obj/effect/acid/A = O - A.acid_level = min(A.level + acid_volume * acidpwr, 12000)//capping acid level to limit power of the acid + A.acid_level = min(acid_volume * acidpwr, 12000)//capping acid level to limit power of the acid has_acid_effect = 1 continue O.acid_act(acidpwr, acid_volume) diff --git a/code/modules/atmospherics/machinery/atmosmachinery.dm b/code/modules/atmospherics/machinery/atmosmachinery.dm index c670c07798f..49e0db945f8 100644 --- a/code/modules/atmospherics/machinery/atmosmachinery.dm +++ b/code/modules/atmospherics/machinery/atmosmachinery.dm @@ -185,11 +185,6 @@ if(!can_unwrench(user)) return ..() - var/turf/T = get_turf(src) - if (level==1 && isturf(T) && T.intact) - to_chat(user, "You must remove the plating first!") - return TRUE - var/datum/gas_mixture/int_air = return_air() var/datum/gas_mixture/env_air = loc.return_air() add_fingerprint(user) @@ -266,8 +261,6 @@ add_atom_colour(obj_color, FIXED_COLOUR_PRIORITY) pipe_color = obj_color setPipingLayer(set_layer) - var/turf/T = get_turf(src) - level = T.intact ? 2 : 1 atmosinit() var/list/nodes = pipeline_expansion() for(var/obj/machinery/atmospherics/A in nodes) diff --git a/code/modules/atmospherics/machinery/components/binary_devices/binary_devices.dm b/code/modules/atmospherics/machinery/components/binary_devices/binary_devices.dm index 6167d7ea015..c4b14274e03 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/binary_devices.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/binary_devices.dm @@ -13,9 +13,5 @@ if(EAST, WEST) initialize_directions = EAST|WEST -/obj/machinery/atmospherics/components/binary/hide(intact) - update_icon() - ..() - /obj/machinery/atmospherics/components/binary/getNodeConnects() return list(turn(dir, 180), dir) diff --git a/code/modules/atmospherics/machinery/components/binary_devices/dp_vent_pump.dm b/code/modules/atmospherics/machinery/components/binary_devices/dp_vent_pump.dm index 4bba6e94c04..c16ce682d40 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/dp_vent_pump.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/dp_vent_pump.dm @@ -14,7 +14,6 @@ name = "dual-port air vent" desc = "Has a valve and pump attached to it. There are two ports." - level = 1 var/frequency = 0 var/id = null var/datum/radio_frequency/radio_connection diff --git a/code/modules/atmospherics/machinery/components/components_base.dm b/code/modules/atmospherics/machinery/components/components_base.dm index eee2f383561..4794762140f 100644 --- a/code/modules/atmospherics/machinery/components/components_base.dm +++ b/code/modules/atmospherics/machinery/components/components_base.dm @@ -20,26 +20,31 @@ A.volume = 200 airs[i] = A +/obj/machinery/atmospherics/components/Initialize() + . = ..() + + RegisterSignal(src, COMSIG_OBJ_HIDE, .proc/hide_pipe) + // Iconnery /obj/machinery/atmospherics/components/proc/update_icon_nopipes() return +/obj/machinery/atmospherics/components/proc/hide_pipe(datum/source, covered) + showpipe = !covered + update_icon() + /obj/machinery/atmospherics/components/update_icon() update_icon_nopipes() underlays.Cut() - var/turf/T = loc - if(level == 2 || (istype(T) && !T.intact)) - showpipe = TRUE - plane = GAME_PLANE - else - showpipe = FALSE - plane = FLOOR_PLANE + + + plane = showpipe ? GAME_PLANE : FLOOR_PLANE if(!showpipe) - return //no need to update the pipes if they aren't showing + return var/connected = 0 //Direction bitset diff --git a/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm b/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm index 170b2179e52..0a91bcabff8 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm @@ -18,7 +18,6 @@ var/id = null var/datum/radio_frequency/radio_connection - level = 1 layer = GAS_SCRUBBER_LAYER pipe_state = "injector" diff --git a/code/modules/atmospherics/machinery/components/unary_devices/passive_vent.dm b/code/modules/atmospherics/machinery/components/unary_devices/passive_vent.dm index a113484d20b..96ac0ac7caf 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/passive_vent.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/passive_vent.dm @@ -5,7 +5,6 @@ desc = "It is an open vent." can_unwrench = TRUE - level = 1 layer = GAS_SCRUBBER_LAYER pipe_state = "pvent" diff --git a/code/modules/atmospherics/machinery/components/unary_devices/portables_connector.dm b/code/modules/atmospherics/machinery/components/unary_devices/portables_connector.dm index 03ae98bb6a6..8ff32706cf0 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/portables_connector.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/portables_connector.dm @@ -7,7 +7,6 @@ can_unwrench = TRUE use_power = NO_POWER_USE - level = 0 layer = GAS_FILTER_LAYER pipe_flags = PIPING_ONE_PER_TURF @@ -50,9 +49,6 @@ piping_layer = 3 icon_state = "connector_map-3" -/obj/machinery/atmospherics/components/unary/portables_connector/visible - level = 2 - /obj/machinery/atmospherics/components/unary/portables_connector/visible/layer1 piping_layer = 1 icon_state = "connector_map-1" diff --git a/code/modules/atmospherics/machinery/components/unary_devices/unary_devices.dm b/code/modules/atmospherics/machinery/components/unary_devices/unary_devices.dm index 40c2f0f5a8a..1d18dc83492 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/unary_devices.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/unary_devices.dm @@ -15,10 +15,6 @@ ..() update_icon() -/obj/machinery/atmospherics/components/unary/hide(intact) - update_icon() - ..(intact) - /obj/machinery/atmospherics/components/unary/proc/assign_uid_vents() uid = num2text(gl_uid++) return uid diff --git a/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm b/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm index ec64bd45fd7..7333355b3e2 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm @@ -14,7 +14,6 @@ use_power = IDLE_POWER_USE can_unwrench = TRUE welded = FALSE - level = 1 layer = GAS_SCRUBBER_LAYER var/id_tag = null diff --git a/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm b/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm index cb4e3ebc969..f7e9fc22604 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm @@ -11,7 +11,6 @@ active_power_usage = 60 can_unwrench = TRUE welded = FALSE - level = 1 layer = GAS_SCRUBBER_LAYER var/id_tag = null diff --git a/code/modules/atmospherics/machinery/other/meter.dm b/code/modules/atmospherics/machinery/other/meter.dm index 9a10a605038..239258a4058 100644 --- a/code/modules/atmospherics/machinery/other/meter.dm +++ b/code/modules/atmospherics/machinery/other/meter.dm @@ -44,8 +44,6 @@ for(var/obj/machinery/atmospherics/pipe/pipe in loc) if(pipe.piping_layer == target_layer) candidate = pipe - if(pipe.level == 2) - break if(candidate) target = candidate setAttachLayer(candidate.piping_layer) diff --git a/code/modules/atmospherics/machinery/pipes/heat_exchange/he_pipes.dm b/code/modules/atmospherics/machinery/pipes/heat_exchange/he_pipes.dm index 6ffffb9c453..d240dd5b022 100644 --- a/code/modules/atmospherics/machinery/pipes/heat_exchange/he_pipes.dm +++ b/code/modules/atmospherics/machinery/pipes/heat_exchange/he_pipes.dm @@ -1,5 +1,4 @@ /obj/machinery/atmospherics/pipe/heat_exchanging - level = 2 var/minimum_temperature_difference = 20 var/thermal_conductivity = WINDOW_HEAT_TRANSFER_COEFFICIENT color = "#404040" @@ -16,9 +15,6 @@ return FALSE . = ..() -/obj/machinery/atmospherics/pipe/heat_exchanging/hide() - return - /obj/machinery/atmospherics/pipe/heat_exchanging/process_atmos() var/environment_temperature = 0 var/datum/gas_mixture/pipe_air = return_air() diff --git a/code/modules/atmospherics/machinery/pipes/heat_exchange/junction.dm b/code/modules/atmospherics/machinery/pipes/heat_exchange/junction.dm index ad5f65f9d3d..531c5e113a8 100644 --- a/code/modules/atmospherics/machinery/pipes/heat_exchange/junction.dm +++ b/code/modules/atmospherics/machinery/pipes/heat_exchange/junction.dm @@ -33,8 +33,6 @@ /obj/machinery/atmospherics/pipe/heat_exchanging/junction/update_icon() icon_state = "pipe[nodes[1] ? "1" : "0"][nodes[2] ? "1" : "0"]-[piping_layer]" update_layer() - update_alpha() - /obj/machinery/atmospherics/pipe/heat_exchanging/junction/layer1 piping_layer = 1 diff --git a/code/modules/atmospherics/machinery/pipes/heat_exchange/manifold.dm b/code/modules/atmospherics/machinery/pipes/heat_exchange/manifold.dm index 6d4b824fb14..3eed910ecdb 100644 --- a/code/modules/atmospherics/machinery/pipes/heat_exchange/manifold.dm +++ b/code/modules/atmospherics/machinery/pipes/heat_exchange/manifold.dm @@ -38,8 +38,6 @@ add_overlay( getpipeimage(icon, "pipe-[piping_layer]", get_dir(src, nodes[i])) ) update_layer() - update_alpha() - /obj/machinery/atmospherics/pipe/heat_exchanging/manifold/layer1 piping_layer = 1 diff --git a/code/modules/atmospherics/machinery/pipes/heat_exchange/manifold4w.dm b/code/modules/atmospherics/machinery/pipes/heat_exchange/manifold4w.dm index 88086e44e23..a8425629c9a 100644 --- a/code/modules/atmospherics/machinery/pipes/heat_exchange/manifold4w.dm +++ b/code/modules/atmospherics/machinery/pipes/heat_exchange/manifold4w.dm @@ -36,8 +36,6 @@ add_overlay( getpipeimage(icon, "pipe-[piping_layer]", get_dir(src, nodes[i])) ) update_layer() - update_alpha() - /obj/machinery/atmospherics/pipe/heat_exchanging/manifold4w/layer1 piping_layer = 1 diff --git a/code/modules/atmospherics/machinery/pipes/heat_exchange/simple.dm b/code/modules/atmospherics/machinery/pipes/heat_exchange/simple.dm index e3ed1a6c37a..c5304c3416e 100644 --- a/code/modules/atmospherics/machinery/pipes/heat_exchange/simple.dm +++ b/code/modules/atmospherics/machinery/pipes/heat_exchange/simple.dm @@ -27,8 +27,6 @@ /obj/machinery/atmospherics/pipe/heat_exchanging/simple/update_icon() icon_state = "pipe[nodes[1] ? "1" : "0"][nodes[2] ? "1" : "0"]-[piping_layer]" update_layer() - update_alpha() - /obj/machinery/atmospherics/pipe/heat_exchanging/simple/layer1 piping_layer = 1 diff --git a/code/modules/atmospherics/machinery/pipes/layermanifold.dm b/code/modules/atmospherics/machinery/pipes/layermanifold.dm index 1d1f7ccac3b..1aff2b3af16 100644 --- a/code/modules/atmospherics/machinery/pipes/layermanifold.dm +++ b/code/modules/atmospherics/machinery/pipes/layermanifold.dm @@ -46,8 +46,6 @@ for(var/node in back_nodes) add_attached_images(node) - update_alpha() - /obj/machinery/atmospherics/pipe/layer_manifold/proc/add_attached_images(obj/machinery/atmospherics/A) if(!A) return @@ -99,8 +97,6 @@ /obj/machinery/atmospherics/pipe/layer_manifold/atmosinit() normalize_cardinal_directions() findAllConnections() - var/turf/T = loc // hide if turf is not intact - hide(T.intact) /obj/machinery/atmospherics/pipe/layer_manifold/setPipingLayer() piping_layer = PIPING_LAYER_DEFAULT @@ -134,5 +130,4 @@ to_chat(user, "You align yourself with the [user.ventcrawl_layer]\th output.") /obj/machinery/atmospherics/pipe/layer_manifold/visible - level = PIPE_VISIBLE_LEVEL layer = GAS_PIPE_VISIBLE_LAYER diff --git a/code/modules/atmospherics/machinery/pipes/manifold.dm b/code/modules/atmospherics/machinery/pipes/manifold.dm index 8c487dc8dce..fb458aee7cb 100644 --- a/code/modules/atmospherics/machinery/pipes/manifold.dm +++ b/code/modules/atmospherics/machinery/pipes/manifold.dm @@ -43,4 +43,3 @@ add_overlay( getpipeimage(icon, "pipe-[piping_layer]", get_dir(src, nodes[i])) ) update_layer() - update_alpha() diff --git a/code/modules/atmospherics/machinery/pipes/manifold4w.dm b/code/modules/atmospherics/machinery/pipes/manifold4w.dm index 4d98cbc2f59..b80e6eaeb4b 100644 --- a/code/modules/atmospherics/machinery/pipes/manifold4w.dm +++ b/code/modules/atmospherics/machinery/pipes/manifold4w.dm @@ -37,4 +37,3 @@ add_overlay( getpipeimage(icon, "pipe-[piping_layer]", get_dir(src, nodes[i])) ) update_layer() - update_alpha() diff --git a/code/modules/atmospherics/machinery/pipes/mapping.dm b/code/modules/atmospherics/machinery/pipes/mapping.dm index c868d377ea4..c52482e88f1 100644 --- a/code/modules/atmospherics/machinery/pipes/mapping.dm +++ b/code/modules/atmospherics/machinery/pipes/mapping.dm @@ -6,7 +6,6 @@ color = Color; \ } \ ##Fulltype/visible { \ - level = PIPE_VISIBLE_LEVEL; \ layer = GAS_PIPE_VISIBLE_LAYER; \ } \ ##Fulltype/visible/layer1 { \ @@ -17,9 +16,6 @@ piping_layer = 3; \ icon_state = Iconbase + "-3"; \ } \ - ##Fulltype/hidden { \ - level = PIPE_HIDDEN_LEVEL; \ - } \ ##Fulltype/hidden/layer1 { \ piping_layer = 1; \ icon_state = Iconbase + "-1"; \ diff --git a/code/modules/atmospherics/machinery/pipes/pipes.dm b/code/modules/atmospherics/machinery/pipes/pipes.dm index 2ebf1cfdff7..1684a6e92e6 100644 --- a/code/modules/atmospherics/machinery/pipes/pipes.dm +++ b/code/modules/atmospherics/machinery/pipes/pipes.dm @@ -3,8 +3,6 @@ var/datum/gas_mixture/air_temporary //used when reconstructing a pipeline that broke var/volume = 0 - level = 1 - use_power = NO_POWER_USE can_unwrench = 1 var/datum/pipeline/parent = null @@ -19,6 +17,12 @@ volume = 35 * device_type ..() +///I have no idea why there's a new and at this point I'm too afraid to ask +/obj/machinery/atmospherics/pipe/Initialize(mapload) + . = ..() + + AddElement(/datum/element/undertile, TRAIT_T_RAY_VISIBLE) + /obj/machinery/atmospherics/pipe/nullifyNode(i) var/obj/machinery/atmospherics/oldN = nodes[i] ..() @@ -33,16 +37,6 @@ parent = new parent.build_pipeline(src) -/obj/machinery/atmospherics/pipe/atmosinit() - var/turf/T = loc // hide if turf is not intact - hide(T.intact) - ..() - -/obj/machinery/atmospherics/pipe/hide(i) - if(level == 1 && isturf(loc)) - invisibility = i ? INVISIBILITY_MAXIMUM : 0 - update_icon() - /obj/machinery/atmospherics/pipe/proc/releaseAirToTurf() if(air_temporary) var/turf/T = loc @@ -86,13 +80,6 @@ qdel(meter) . = ..() -/obj/machinery/atmospherics/pipe/update_icon() - . = ..() - update_alpha() - -/obj/machinery/atmospherics/pipe/proc/update_alpha() - alpha = invisibility ? 64 : 255 - /obj/machinery/atmospherics/pipe/proc/update_node_icon() for(var/i in 1 to device_type) if(nodes[i]) diff --git a/code/modules/atmospherics/machinery/pipes/simple.dm b/code/modules/atmospherics/machinery/pipes/simple.dm index 40afb39ec1b..0450c7eebcb 100644 --- a/code/modules/atmospherics/machinery/pipes/simple.dm +++ b/code/modules/atmospherics/machinery/pipes/simple.dm @@ -30,4 +30,3 @@ /obj/machinery/atmospherics/pipe/simple/update_icon() icon_state = "pipe[nodes[1] ? "1" : "0"][nodes[2] ? "1" : "0"]-[piping_layer]" update_layer() - update_alpha() diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index b11cf37f123..5e4eada12f1 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -893,8 +893,6 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp var/list/t_ray_images = list() var/static/list/stored_t_ray_images = list() for(var/obj/O in orange(client.view, src) ) - if(O.level != 1) - continue if(O.invisibility == INVISIBILITY_MAXIMUM) var/image/I = new(loc = get_turf(O)) diff --git a/code/modules/plumbing/ducts.dm b/code/modules/plumbing/ducts.dm index 0b141d764a3..9d8699db3b4 100644 --- a/code/modules/plumbing/ducts.dm +++ b/code/modules/plumbing/ducts.dm @@ -7,7 +7,7 @@ All the important duct code: name = "fluid duct" icon = 'icons/obj/plumbing/fluid_ducts.dmi' icon_state = "nduct" - level = 1 + ///bitfield with the directions we're connected in var/connects ///set to TRUE to disable smart duct behaviour @@ -36,14 +36,16 @@ All the important duct code: ///wheter we just unanchored or drop whatever is in the variable. either is safe var/drop_on_wrench = /obj/item/stack/ducts -/obj/machinery/duct/Initialize(mapload, no_anchor, color_of_duct, layer_of_duct = DUCT_LAYER_DEFAULT, force_connects) +/obj/machinery/duct/Initialize(mapload, no_anchor, color_of_duct = "#ffffff", layer_of_duct = DUCT_LAYER_DEFAULT, force_connects) . = ..() + if(no_anchor) active = FALSE anchored = FALSE else if(!can_anchor()) qdel(src) CRASH("Overlapping ducts detected") + if(force_connects) connects = force_connects //skip change_connects() because we're still initializing and we need to set our connects at one point if(!lock_layers) @@ -52,15 +54,20 @@ All the important duct code: duct_color = color_of_duct if(duct_color) add_atom_colour(duct_color, FIXED_COLOUR_PRIORITY) + handle_layer() + for(var/obj/machinery/duct/D in loc) if(D == src) continue if(D.duct_layer & duct_layer) disconnect_duct() + if(active) attempt_connect() + AddElement(/datum/element/undertile, TRAIT_T_RAY_VISIBLE) + ///start looking around us for stuff to connect to /obj/machinery/duct/proc/attempt_connect() @@ -289,7 +296,7 @@ All the important duct code: if(!T) T = get_turf(src) for(var/obj/machinery/duct/D in T) - if(!anchored) + if(!anchored || D == src) continue for(var/A in GLOB.cardinals) if(A & connects && A & D.connects) @@ -325,6 +332,7 @@ All the important duct code: add_neighbour(D, direction) connect_network(D, direction, TRUE) update_icon() + ///has a total of 5 layers and doesnt give a shit about color. its also dumb so doesnt autoconnect. /obj/machinery/duct/multilayered name = "duct layer-manifold" diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm index b2e452c0f63..9e65edb2206 100644 --- a/code/modules/power/cable.dm +++ b/code/modules/power/cable.dm @@ -17,7 +17,6 @@ GLOBAL_LIST_INIT(wire_node_generating_types, typecacheof(list(/obj/structure/gri icon = 'icons/obj/power_cond/layer_cable.dmi' icon_state = "l2-1-2-4-8-node" color = "yellow" - level = 1 //is underfloor layer = WIRE_LAYER //Above hidden pipes, GAS_PIPE_HIDDEN_LAYER anchored = TRUE obj_flags = CAN_BE_HIT | ON_BLUEPRINTS @@ -41,12 +40,11 @@ GLOBAL_LIST_INIT(wire_node_generating_types, typecacheof(list(/obj/structure/gri /obj/structure/cable/Initialize(mapload) . = ..() - var/turf/T = get_turf(src) // hide if turf is not intact - if(level==1) - hide(T.intact) GLOB.cable_list += src //add it to the global cable list connect_wire() + AddElement(/datum/element/undertile, TRAIT_T_RAY_VISIBLE) + /obj/structure/cable/proc/connect_wire(clear_before_updating = FALSE) var/under_thing = NONE if(clear_before_updating) @@ -115,12 +113,6 @@ GLOBAL_LIST_INIT(wire_node_generating_types, typecacheof(list(/obj/structure/gri // General procedures /////////////////////////////////// -//If underfloor, hide the cable -/obj/structure/cable/hide(i) - if(level == 1 && isturf(loc)) - invisibility = i ? INVISIBILITY_MAXIMUM : 0 - update_icon() - /obj/structure/cable/update_icon_state() if(!linked_dirs) icon_state = "l[cable_layer]-noconnection" @@ -562,7 +554,6 @@ GLOBAL_LIST_INIT(cable_coil_recipes, list(new/datum/stack_recipe("cable restrain desc = "A bridge to connect different cable layers, or link terminals to incompatible cable layers." icon = 'icons/obj/power.dmi' icon_state = "cable_bridge" - level = 1 //is underfloor layer = WIRE_LAYER + 0.02 //Above all the cables but below terminals anchored = TRUE obj_flags = CAN_BE_HIT | ON_BLUEPRINTS diff --git a/code/modules/power/terminal.dm b/code/modules/power/terminal.dm index a1c11b9dca0..0077193b250 100644 --- a/code/modules/power/terminal.dm +++ b/code/modules/power/terminal.dm @@ -7,16 +7,14 @@ name = "terminal" icon_state = "term" desc = "It's an underfloor wiring terminal for power equipment." - level = 1 layer = WIRE_TERMINAL_LAYER //a bit above wires var/obj/machinery/power/master = null /obj/machinery/power/terminal/Initialize() . = ..() - var/turf/T = get_turf(src) - if(level == 1) - hide(T.intact) + + AddElement(/datum/element/undertile, TRAIT_T_RAY_VISIBLE, use_alpha = TRUE) /obj/machinery/power/terminal/Destroy() if(master) @@ -27,15 +25,6 @@ /obj/machinery/power/terminal/should_have_node() return TRUE -/obj/machinery/power/terminal/hide(i) - if(i) - invisibility = INVISIBILITY_MAXIMUM - icon_state = "term-f" - else - invisibility = 0 - icon_state = "term" - - /obj/machinery/power/proc/can_terminal_dismantle() . = FALSE diff --git a/code/modules/projectiles/guns/misc/beam_rifle.dm b/code/modules/projectiles/guns/misc/beam_rifle.dm index 5e5fa7a0c06..00c490db743 100644 --- a/code/modules/projectiles/guns/misc/beam_rifle.dm +++ b/code/modules/projectiles/guns/misc/beam_rifle.dm @@ -446,8 +446,6 @@ new /obj/effect/hotspot(T) for(var/obj/O in range(aoe_structure_range, epicenter)) if(!isitem(O)) - if(O.level == 1) //Please don't break underfloor items! - continue O.take_damage(aoe_structure_damage * get_damage_coeff(O), BURN, "laser", FALSE) /obj/projectile/beam/beam_rifle/proc/check_pierce(atom/target) diff --git a/code/modules/recycling/disposal/construction.dm b/code/modules/recycling/disposal/construction.dm index 566228adb52..b97d3a77b5f 100644 --- a/code/modules/recycling/disposal/construction.dm +++ b/code/modules/recycling/disposal/construction.dm @@ -9,7 +9,6 @@ anchored = FALSE density = FALSE pressure_resistance = 5*ONE_ATMOSPHERE - level = 2 max_integrity = 200 var/obj/pipe_type = /obj/structure/disposalpipe/segment var/pipename @@ -34,6 +33,8 @@ update_icon() + AddElement(/datum/element/undertile, TRAIT_T_RAY_VISIBLE) + /obj/structure/disposalconstruct/Move() var/old_dir = dir ..() @@ -45,10 +46,8 @@ if(is_pipe()) icon_state = "con[icon_state]" if(anchored) - level = initial(pipe_type.level) layer = initial(pipe_type.layer) else - level = initial(level) layer = initial(layer) else if(ispath(pipe_type, /obj/machinery/disposal/bin)) @@ -58,13 +57,6 @@ else icon_state = "condisposal" - -// hide called by levelupdate if turf intact status changes -// change visibility status and force update of icon -/obj/structure/disposalconstruct/hide(var/intact) - invisibility = (intact && level==1) ? INVISIBILITY_MAXIMUM: 0 // hide if floor is intact - update_icon() - /obj/structure/disposalconstruct/proc/get_disposal_dir() if(!is_pipe()) return NONE diff --git a/code/modules/recycling/disposal/pipe.dm b/code/modules/recycling/disposal/pipe.dm index 7f8e26b64ae..b488f636798 100644 --- a/code/modules/recycling/disposal/pipe.dm +++ b/code/modules/recycling/disposal/pipe.dm @@ -7,7 +7,6 @@ anchored = TRUE density = FALSE obj_flags = CAN_BE_HIT | ON_BLUEPRINTS - level = 1 // underfloor only dir = NONE // dir will contain dominant direction for junction pipes max_integrity = 200 armor = list("melee" = 25, "bullet" = 10, "laser" = 10, "energy" = 100, "bomb" = 0, "bio" = 100, "rad" = 100, "fire" = 90, "acid" = 30) @@ -42,7 +41,8 @@ dpdir |= turn(dir, -90) if(initialize_dirs & DISP_DIR_FLIP) dpdir |= turn(dir, 180) - update() + + AddElement(/datum/element/undertile, TRAIT_T_RAY_VISIBLE) // pipe is deleted // ensure if holder is present, it is expelled @@ -81,16 +81,6 @@ H.forceMove(get_turf(src)) return null -// update the icon_state to reflect hidden status -/obj/structure/disposalpipe/proc/update() - var/turf/T = get_turf(src) - hide(T.intact && !isspaceturf(T)) // space never hides pipes - -// hide called by levelupdate if turf intact status changes -// change visibility status and force update of icon -/obj/structure/disposalpipe/hide(var/intact) - invisibility = intact ? INVISIBILITY_MAXIMUM: 0 // hide if floor is intact - // expel the held objects into a turf // called when there is a break in the pipe /obj/structure/disposalpipe/proc/expel(obj/structure/disposalholder/H, turf/T, direction) diff --git a/code/modules/shuttle/on_move.dm b/code/modules/shuttle/on_move.dm index 7b304832b37..e2035244bff 100644 --- a/code/modules/shuttle/on_move.dm +++ b/code/modules/shuttle/on_move.dm @@ -256,11 +256,6 @@ All ShuttleMove procs go here // atmosinit() calls update_icon(), so we don't need to call it update_icon() -/obj/machinery/atmospherics/pipe/afterShuttleMove(turf/oldT, list/movement_force, shuttle_dir, shuttle_preferred_direction, move_dir, rotation) - . = ..() - var/turf/T = loc - hide(T.intact) - /obj/machinery/navbeacon/beforeShuttleMove(turf/newT, rotation, move_mode, obj/docking_port/mobile/moving_dock) . = ..() GLOB.navbeacons["[z]"] -= src @@ -268,8 +263,7 @@ All ShuttleMove procs go here /obj/machinery/navbeacon/afterShuttleMove(turf/oldT, list/movement_force, shuttle_dir, shuttle_preferred_direction, move_dir, rotation) . = ..() - var/turf/T = loc - hide(T.intact) + if(codes["patrol"]) if(!GLOB.navbeacons["[z]"]) GLOB.navbeacons["[z]"] = list() @@ -278,12 +272,6 @@ All ShuttleMove procs go here GLOB.deliverybeacons += src GLOB.deliverybeacontags += location -/obj/machinery/power/terminal/afterShuttleMove(turf/oldT, list/movement_force, shuttle_dir, shuttle_preferred_direction, move_dir, rotation) - . = ..() - var/turf/T = src.loc - if(level==1) - hide(T.intact) - /************************************Item move procs************************************/ /obj/item/storage/pod/afterShuttleMove(turf/oldT, list/movement_force, shuttle_dir, shuttle_preferred_direction, move_dir, rotation) @@ -338,19 +326,12 @@ All ShuttleMove procs go here if(. & MOVE_AREA) . |= MOVE_CONTENTS -/obj/structure/disposalpipe/afterShuttleMove(turf/oldT, list/movement_force, shuttle_dir, shuttle_preferred_direction, move_dir, rotation) - . = ..() - update() - /obj/structure/cable/beforeShuttleMove(turf/newT, rotation, move_mode, obj/docking_port/mobile/moving_dock) . = ..() cut_cable_from_powernet(FALSE) /obj/structure/cable/afterShuttleMove(turf/oldT, list/movement_force, shuttle_dir, shuttle_preferred_direction, move_dir, rotation) . = ..() - var/turf/T = loc - if(level==1) - hide(T.intact) connect_wire(TRUE) propogate_if_no_network() diff --git a/config/admins.txt b/config/admins.txt index 640651cb5a6..351e54ba2f6 100644 --- a/config/admins.txt +++ b/config/admins.txt @@ -139,3 +139,4 @@ LoserWasTaken = Game Master Fikou = Game Master Skoglol = Game Master 4dplanner = Game Master +Time-Green = Game Master diff --git a/tgstation.dme b/tgstation.dme index 8647cfa4b49..dfba0817a6c 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -537,6 +537,7 @@ #include "code\datums\elements\snail_crawl.dm" #include "code\datums\elements\squish.dm" #include "code\datums\elements\tool_flash.dm" +#include "code\datums\elements\undertile.dm" #include "code\datums\elements\update_icon_blocker.dm" #include "code\datums\elements\update_icon_updates_onmob.dm" #include "code\datums\elements\waddling.dm"