diff --git a/code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm b/code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm index 896ad49eac..aebea38901 100644 --- a/code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm +++ b/code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm @@ -235,25 +235,13 @@ pump_direction = 1 if(signal.data["set_input_pressure"]) - input_pressure_min = between( - 0, - text2num(signal.data["set_input_pressure"]), - ONE_ATMOSPHERE*50 - ) + input_pressure_min = between(0, text2num(signal.data["set_input_pressure"]), ONE_ATMOSPHERE*50) if(signal.data["set_output_pressure"]) - output_pressure_max = between( - 0, - text2num(signal.data["set_output_pressure"]), - ONE_ATMOSPHERE*50 - ) + output_pressure_max = between(0, text2num(signal.data["set_output_pressure"]), ONE_ATMOSPHERE*50) if(signal.data["set_external_pressure"]) - external_pressure_bound = between( - 0, - text2num(signal.data["set_external_pressure"]), - ONE_ATMOSPHERE*50 - ) + external_pressure_bound = between(0, text2num(signal.data["set_external_pressure"]), ONE_ATMOSPHERE*50) if(signal.data["status"]) spawn(2) diff --git a/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm b/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm index 5817d0948e..7b8b7155f6 100644 --- a/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm +++ b/code/ATMOSPHERICS/components/binary_devices/passive_gate.dm @@ -185,11 +185,7 @@ unlocked = !unlocked if("set_target_pressure" in signal.data) - target_pressure = between( - 0, - text2num(signal.data["set_target_pressure"]), - max_pressure_setting - ) + target_pressure = between(0, text2num(signal.data["set_target_pressure"]), max_pressure_setting) if("set_regulate_mode" in signal.data) regulate_mode = text2num(signal.data["set_regulate_mode"]) diff --git a/code/ATMOSPHERICS/components/binary_devices/pump.dm b/code/ATMOSPHERICS/components/binary_devices/pump.dm index 7d476e17b7..665d912b00 100644 --- a/code/ATMOSPHERICS/components/binary_devices/pump.dm +++ b/code/ATMOSPHERICS/components/binary_devices/pump.dm @@ -185,11 +185,7 @@ Thus, the two variables affect pump operation are set in New(): update_use_power(!use_power) if(signal.data["set_output_pressure"]) - target_pressure = between( - 0, - text2num(signal.data["set_output_pressure"]), - ONE_ATMOSPHERE*50 - ) + target_pressure = between(0, text2num(signal.data["set_output_pressure"]), ONE_ATMOSPHERE*50) if(signal.data["status"]) spawn(2) diff --git a/code/ATMOSPHERICS/components/unary/vent_pump.dm b/code/ATMOSPHERICS/components/unary/vent_pump.dm index 4c843f5342..191478b60e 100644 --- a/code/ATMOSPHERICS/components/unary/vent_pump.dm +++ b/code/ATMOSPHERICS/components/unary/vent_pump.dm @@ -343,37 +343,19 @@ if (signal.data["set_internal_pressure"] == "default") internal_pressure_bound = internal_pressure_bound_default else - internal_pressure_bound = between( - 0, - text2num(signal.data["set_internal_pressure"]), - ONE_ATMOSPHERE*50 - ) + internal_pressure_bound = between(0,text2num(signal.data["set_internal_pressure"]),ONE_ATMOSPHERE*50) if(signal.data["set_external_pressure"] != null) if (signal.data["set_external_pressure"] == "default") external_pressure_bound = external_pressure_bound_default else - external_pressure_bound = between( - 0, - text2num(signal.data["set_external_pressure"]), - ONE_ATMOSPHERE*50 - ) + external_pressure_bound = between(0,text2num(signal.data["set_external_pressure"]),ONE_ATMOSPHERE*50) if(signal.data["adjust_internal_pressure"] != null) - internal_pressure_bound = between( - 0, - internal_pressure_bound + text2num(signal.data["adjust_internal_pressure"]), - ONE_ATMOSPHERE*50 - ) + internal_pressure_bound = between(0,internal_pressure_bound + text2num(signal.data["adjust_internal_pressure"]),ONE_ATMOSPHERE*50) if(signal.data["adjust_external_pressure"] != null) - - - external_pressure_bound = between( - 0, - external_pressure_bound + text2num(signal.data["adjust_external_pressure"]), - ONE_ATMOSPHERE*50 - ) + external_pressure_bound = between(0,external_pressure_bound + text2num(signal.data["adjust_external_pressure"]),ONE_ATMOSPHERE*50) if("reset_external_pressure" in signal.data) external_pressure_bound = ONE_ATMOSPHERE diff --git a/code/__defines/__513_compatibility.dm b/code/__defines/__513_compatibility.dm index 78583570ff..f4a3a8177e 100644 --- a/code/__defines/__513_compatibility.dm +++ b/code/__defines/__513_compatibility.dm @@ -14,6 +14,8 @@ #define arctan(x) (arcsin(x/sqrt(1+x*x))) +#define between(x, y, z) max(min(y, z), x) + ////////////////////////////////////////////////// #else @@ -26,4 +28,6 @@ #define ATAN2(x, y) arctan(x, y) +#define between(x, y, z) clamp(y, x, z) + #endif \ No newline at end of file diff --git a/code/_helpers/unsorted.dm b/code/_helpers/unsorted.dm index 0b258311a4..9dbc7c0d99 100644 --- a/code/_helpers/unsorted.dm +++ b/code/_helpers/unsorted.dm @@ -553,10 +553,6 @@ Turf and target are seperate in case you want to teleport some distance from a t var/y = min(world.maxy, max(1, A.y + dy)) return locate(x,y,A.z) -//Makes sure MIDDLE is between LOW and HIGH. If not, it adjusts it. Returns the adjusted value. -/proc/between(var/low, var/middle, var/high) - return max(min(middle, high), low) - //returns random gauss number /proc/GaussRand(var/sigma) var/x,y,rsq diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 81c1e81ccf..50e6b04923 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -826,18 +826,16 @@ About the new airlock wires panel: if("opening") cut_overlay() if(p_open) - spawn(2) // The only work around that works. Downside is that the door will be gone for a millisecond. - flick("o_door_opening", src) //can not use flick due to BYOND bug updating overlays right before flicking - update_icon() + flick("o_door_opening", src) //can not use flick due to BYOND bug updating overlays right before flicking + update_icon() else flick("door_opening", src)//[stat ? "_stat":] update_icon() if("closing") cut_overlay() if(p_open) - spawn(2) - flick("o_door_closing", src) - update_icon() + flick("o_door_closing", src) + update_icon() else flick("door_closing", src) update_icon() diff --git a/code/game/machinery/doors/airlock_angled.dm b/code/game/machinery/doors/airlock_angled_bay.dm similarity index 92% rename from code/game/machinery/doors/airlock_angled.dm rename to code/game/machinery/doors/airlock_angled_bay.dm index ba39cf8bf2..4d5eac48a4 100644 --- a/code/game/machinery/doors/airlock_angled.dm +++ b/code/game/machinery/doors/airlock_angled_bay.dm @@ -38,7 +38,7 @@ */ -/obj/machinery/door/airlock/angled +/obj/machinery/door/airlock/angled_bay icon_state = "preview" dir = 2 @@ -86,11 +86,11 @@ /// Optional: If door_color_icon is not null, this color will be applied to the door color overlay var/door_color -/obj/machinery/door/airlock/angled/Initialize() +/obj/machinery/door/airlock/angled_bay/Initialize() obtain_icon() . = ..() -/obj/machinery/door/airlock/angled/proc/obtain_icon() +/obj/machinery/door/airlock/angled_bay/proc/obtain_icon() var/icon/fill_icon switch(fill_type) if(FILL_METAL) @@ -271,7 +271,7 @@ icon = final update_icon() -/obj/machinery/door/airlock/angled/proc/gimme_icon() +/obj/machinery/door/airlock/angled_bay/proc/gimme_icon() usr << ftp(icon, "[name].dmi") /** @@ -282,7 +282,7 @@ // Fills: Metal, glass, color // Supports stripe color // Supports door color -/obj/machinery/door/airlock/angled/standard +/obj/machinery/door/airlock/angled_bay/standard icon = 'icons/obj/doors/angled/station/door.dmi' fill_type = FILL_METAL @@ -299,16 +299,16 @@ lights_emag_icon = 'icons/obj/doors/angled/station/emag.dmi' panel_icon = 'icons/obj/doors/angled/station/panel.dmi' welded_icon = 'icons/obj/doors/angled/station/welded.dmi' -/obj/machinery/door/airlock/angled/standard/glass +/obj/machinery/door/airlock/angled_bay/standard/glass icon_state = "preview_glass" fill_type = FILL_GLASS -/obj/machinery/door/airlock/angled/standard/color +/obj/machinery/door/airlock/angled_bay/standard/color icon_state = "preview_color" fill_type = FILL_COLOR // Fills: Metal // Supports stripe color -/obj/machinery/door/airlock/angled/hatch +/obj/machinery/door/airlock/angled_bay/hatch icon = 'icons/obj/doors/angled/hatch/door.dmi' fill_type = FILL_METAL @@ -324,7 +324,7 @@ welded_icon = 'icons/obj/doors/angled/hatch/welded.dmi' // Fills: None -/obj/machinery/door/airlock/angled/ascent +/obj/machinery/door/airlock/angled_bay/ascent icon = 'icons/obj/doors/angled/ascent/door.dmi' base_icon = 'icons/obj/doors/angled/ascent/door.dmi' @@ -339,7 +339,7 @@ // Fills: Metal, glass, color // Supports door color -/obj/machinery/door/airlock/angled/external +/obj/machinery/door/airlock/angled_bay/external icon = 'icons/obj/doors/angled/external/door.dmi' fill_type = FILL_METAL @@ -352,15 +352,15 @@ lights_green_icon = 'icons/obj/doors/angled/external/lights_green.dmi' lights_bolts_icon = 'icons/obj/doors/angled/external/lights_bolts.dmi' lights_emag_icon = 'icons/obj/doors/angled/external/emag.dmi' -/obj/machinery/door/airlock/angled/external/glass +/obj/machinery/door/airlock/angled_bay/external/glass icon_state = "preview_glass" fill_type = FILL_GLASS -/obj/machinery/door/airlock/angled/external/color +/obj/machinery/door/airlock/angled_bay/external/color icon_state = "preview_color" fill_type = FILL_COLOR // Fills: Metal, glass -/obj/machinery/door/airlock/angled/elevator +/obj/machinery/door/airlock/angled_bay/elevator icon = 'icons/obj/doors/angled/elevator/door.dmi' fill_type = FILL_METAL @@ -371,34 +371,34 @@ lights_green_icon = 'icons/obj/doors/angled/elevator/lights_green.dmi' lights_bolts_icon = 'icons/obj/doors/angled/elevator/lights_bolts.dmi' welded_icon = 'icons/obj/doors/angled/elevator/welded.dmi' -/obj/machinery/door/airlock/angled/elevator/glass +/obj/machinery/door/airlock/angled_bay/elevator/glass icon_state = "preview_glass" fill_type = FILL_GLASS // Very few options on these, basically just static doors. -/obj/machinery/door/airlock/angled/hazard // firedoors +/obj/machinery/door/airlock/angled_bay/hazard // firedoors icon = 'icons/obj/doors/angled/hazard/door.dmi' base_icon = 'icons/obj/doors/angled/hazard/door.dmi' panel_icon = 'icons/obj/doors/angled/hazard/panel.dmi' welded_icon = 'icons/obj/doors/angled/hazard/welded.dmi' -/obj/machinery/door/airlock/angled/vault +/obj/machinery/door/airlock/angled_bay/vault icon = 'icons/obj/doors/angled/vault/door.dmi' fill_type = FILL_METAL // the only option base_icon = 'icons/obj/doors/angled/vault/door.dmi' metal_fill_icon = 'icons/obj/doors/angled/vault/fill_steel.dmi' -/obj/machinery/door/airlock/angled/secure +/obj/machinery/door/airlock/angled_bay/secure icon = 'icons/obj/doors/angled/secure/door.dmi' fill_type = FILL_METAL // the only option base_icon = 'icons/obj/doors/angled/secure/door.dmi' metal_fill_icon = 'icons/obj/doors/angled/secure/fill_steel.dmi' -/obj/machinery/door/airlock/angled/centcomm +/obj/machinery/door/airlock/angled_bay/centcomm icon = 'icons/obj/doors/angled/centcomm/door.dmi' fill_type = FILL_METAL // the only option @@ -409,7 +409,7 @@ // Fills: Metal, glass, color // Supports stripe color // Supports door color -/obj/machinery/door/airlock/angled/double +/obj/machinery/door/airlock/angled_bay/double width = 2 appearance_flags = 0 icon = 'icons/obj/doors/angled/double/door.dmi' @@ -430,33 +430,33 @@ welded_icon = 'icons/obj/doors/angled/double/welded.dmi' spark_damaged_icon = 'icons/obj/doors/angled/double/sparks_damaged.dmi' spark_broken_icon = 'icons/obj/doors/angled/double/sparks_broken.dmi' -/obj/machinery/door/airlock/angled/double/glass +/obj/machinery/door/airlock/angled_bay/double/glass icon_state = "preview_glass" fill_type = FILL_GLASS -/obj/machinery/door/airlock/angled/double/color +/obj/machinery/door/airlock/angled_bay/double/color icon_state = "preview_color" fill_type = FILL_COLOR -/obj/machinery/door/airlock/angled/double/Initialize(mapload) +/obj/machinery/door/airlock/angled_bay/double/Initialize(mapload) . = ..() SetBounds() apply_opacity_to_my_turfs(opacity) -/obj/machinery/door/airlock/angled/double/set_opacity() +/obj/machinery/door/airlock/angled_bay/double/set_opacity() . = ..() apply_opacity_to_my_turfs(opacity) -/obj/machinery/door/airlock/angled/double/Moved() +/obj/machinery/door/airlock/angled_bay/double/Moved() . = ..() SetBounds() -/obj/machinery/door/airlock/angled/double/proc/apply_opacity_to_my_turfs(new_opacity) +/obj/machinery/door/airlock/angled_bay/double/proc/apply_opacity_to_my_turfs(new_opacity) for(var/turf/T in locs) T.set_opacity(new_opacity) update_nearby_tiles() -/obj/machinery/door/airlock/angled/double/proc/SetBounds() - if(dir & 3) +/obj/machinery/door/airlock/angled_bay/double/proc/SetBounds() + if(dir & 3) // weird, but their icons are 'backwards' so whatever bound_width = width * world.icon_size bound_height = world.icon_size else diff --git a/code/game/machinery/doors/airlock_angled_tgmc.dm b/code/game/machinery/doors/airlock_angled_tgmc.dm new file mode 100644 index 0000000000..c810e3d687 --- /dev/null +++ b/code/game/machinery/doors/airlock_angled_tgmc.dm @@ -0,0 +1,134 @@ +/obj/machinery/door/airlock/angled_tgmc + dir = 2 + anim_length_before_finalize = 3 + +/obj/machinery/door/airlock/angled_tgmc/cell + icon_state = "door_closed" + icon = 'icons/obj/doors/angled/tgmc/celldoor.dmi' +/obj/machinery/door/airlock/angled_tgmc/command + icon_state = "door_closed" + icon = 'icons/obj/doors/angled/tgmc/comdoor.dmi' +/obj/machinery/door/airlock/angled_tgmc/dropship1_pilot + icon_state = "door_closed" + icon = 'icons/obj/doors/angled/tgmc/dropship1_pilot.dmi' +/obj/machinery/door/airlock/angled_tgmc/dropship2_pilot + icon_state = "door_closed" + icon = 'icons/obj/doors/angled/tgmc/dropship2_pilot.dmi' +/obj/machinery/door/airlock/angled_tgmc/engineering + icon_state = "door_closed" + icon = 'icons/obj/doors/angled/tgmc/engidoor.dmi' +/obj/machinery/door/airlock/angled_tgmc/maintenance + icon_state = "door_closed" + icon = 'icons/obj/doors/angled/tgmc/maintdoor.dmi' +/obj/machinery/door/airlock/angled_tgmc/medical + icon_state = "door_closed" + icon = 'icons/obj/doors/angled/tgmc/medidoor.dmi' +/obj/machinery/door/airlock/angled_tgmc/medical_glass + icon_state = "door_closed" + icon = 'icons/obj/doors/angled/tgmc/medidoor_glass.dmi' + glass = TRUE + opacity = FALSE +/obj/machinery/door/airlock/angled_tgmc/personal + icon_state = "door_closed" + icon = 'icons/obj/doors/angled/tgmc/personaldoor.dmi' +/obj/machinery/door/airlock/angled_tgmc/pod + icon_state = "door_closed" + icon = 'icons/obj/doors/angled/tgmc/pod_doors.dmi' +/obj/machinery/door/airlock/angled_tgmc/prep + icon_state = "door_closed" + icon = 'icons/obj/doors/angled/tgmc/prepdoor.dmi' + glass = TRUE + opacity = FALSE +/obj/machinery/door/airlock/angled_tgmc/prep/prep_alpha + icon_state = "door_closed" + icon = 'icons/obj/doors/angled/tgmc/prepdoor_alpha.dmi' +/obj/machinery/door/airlock/angled_tgmc/prep/prep_bravo + icon_state = "door_closed" + icon = 'icons/obj/doors/angled/tgmc/prepdoor_bravo.dmi' +/obj/machinery/door/airlock/angled_tgmc/prep/prep_charlie + icon_state = "door_closed" + icon = 'icons/obj/doors/angled/tgmc/prepdoor_charlie.dmi' +/obj/machinery/door/airlock/angled_tgmc/prep/prep_delta + icon_state = "door_closed" + icon = 'icons/obj/doors/angled/tgmc/prepdoor_delta.dmi' + +/obj/machinery/door/airlock/angled_tgmc/security + icon_state = "door_closed" + icon = 'icons/obj/doors/angled/tgmc/secdoor.dmi' +/obj/machinery/door/airlock/angled_tgmc/security_glass + icon_state = "door_closed" + icon = 'icons/obj/doors/angled/tgmc/secdoor_glass.dmi' + glass = TRUE + opacity = FALSE +/obj/machinery/door/airlock/angled_tgmc/secure + icon_state = "door_closed" + icon = 'icons/obj/doors/angled/tgmc/securedoor.dmi' + + +// firedoor +/* /obj/machinery/door/airlock/angled_tgmc/ + icon_state = "door_closed" + icon = 'icons/obj/doors/angled/tgmc/purinadoor.dmi' */ +// blastdoor +/* /obj/machinery/door/airlock/angled_tgmc/ + icon_state = "door_closed" + icon = 'icons/obj/doors/angled/tgmc/blastdoors_shutters.dmi' */ + +/obj/machinery/door/airlock/angled_tgmc/wide + width = 2 + appearance_flags = 0 + glass = TRUE + opacity = FALSE + +/obj/machinery/door/airlock/angled_tgmc/wide/Initialize(mapload) + . = ..() + SetBounds() + apply_opacity_to_my_turfs(opacity) + +/obj/machinery/door/airlock/angled_tgmc/wide/set_opacity() + . = ..() + apply_opacity_to_my_turfs(opacity) + +/obj/machinery/door/airlock/angled_tgmc/wide/Moved() + . = ..() + SetBounds() + +/obj/machinery/door/airlock/angled_tgmc/wide/proc/apply_opacity_to_my_turfs(new_opacity) + for(var/turf/T in locs) + T.set_opacity(new_opacity) + update_nearby_tiles() + +/obj/machinery/door/airlock/angled_tgmc/wide/proc/SetBounds() + if(dir & 3) + bound_width = world.icon_size + bound_height = width * world.icon_size + else + bound_width = width * world.icon_size + bound_height = world.icon_size + +/obj/machinery/door/airlock/angled_tgmc/wide/command + icon_state = "door_closed" + icon = 'icons/obj/doors/angled/tgmc/2x1comdoor.dmi' +/obj/machinery/door/airlock/angled_tgmc/wide/generic + icon_state = "door_closed" + icon = 'icons/obj/doors/angled/tgmc/2x1generic.dmi' +/obj/machinery/door/airlock/angled_tgmc/wide/medical + icon_state = "door_closed" + icon = 'icons/obj/doors/angled/tgmc/2x1medidoor.dmi' +/obj/machinery/door/airlock/angled_tgmc/wide/security + icon_state = "door_closed" + icon = 'icons/obj/doors/angled/tgmc/2x1secdoor.dmi' +/obj/machinery/door/airlock/angled_tgmc/wide/dropship1 + width = 3 + anim_length_before_finalize = 5 + icon_state = "door_closed" + icon = 'icons/obj/doors/angled/tgmc/dropship1_cargo.dmi' + glass = FALSE + opacity = TRUE +/obj/machinery/door/airlock/angled_tgmc/wide/dropship2 + width = 3 + anim_length_before_finalize = 5 + icon_state = "door_closed" + icon = 'icons/obj/doors/angled/tgmc/dropship2_cargo.dmi' + glass = FALSE + opacity = TRUE \ No newline at end of file diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index d253a4dd68..3c392cf9a0 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -32,6 +32,9 @@ var/block_air_zones = 1 //If set, air zones cannot merge across the door even when it is opened. var/close_door_at = 0 //When to automatically close the door, if possible + var/anim_length_before_density = 3 + var/anim_length_before_finalize = 7 + //Multi-tile doors dir = EAST var/width = 1 @@ -428,10 +431,10 @@ do_animate("opening") icon_state = "door0" set_opacity(0) - sleep(3) + sleep(anim_length_before_density) src.density = FALSE update_nearby_tiles() - sleep(7) + sleep(anim_length_before_finalize) src.layer = open_layer explosion_resistance = 0 update_icon() @@ -453,12 +456,12 @@ close_door_at = 0 do_animate("closing") - sleep(3) + sleep(anim_length_before_density) src.density = TRUE explosion_resistance = initial(explosion_resistance) src.layer = closed_layer update_nearby_tiles() - sleep(7) + sleep(anim_length_before_finalize) update_icon() if(visible && !glass) set_opacity(1) //caaaaarn! diff --git a/code/game/objects/items/weapons/RMS_vr.dm b/code/game/objects/items/weapons/RMS_vr.dm index 046ef616a6..634e3602da 100644 --- a/code/game/objects/items/weapons/RMS_vr.dm +++ b/code/game/objects/items/weapons/RMS_vr.dm @@ -214,7 +214,7 @@ /obj/item/weapon/rms/attack_self(mob/user) var/list/choices = list( "Steel" = radial_image_steel, - MAT_GLASS = radial_image_glass, + "Glass" = radial_image_glass, "Cloth" = radial_image_cloth, "Plastic" = radial_image_plastic, "Stone" = radial_image_stone, diff --git a/code/game/objects/items/weapons/circuitboards/machinery/recycling.dm b/code/game/objects/items/weapons/circuitboards/machinery/recycling.dm new file mode 100644 index 0000000000..f0375d346b --- /dev/null +++ b/code/game/objects/items/weapons/circuitboards/machinery/recycling.dm @@ -0,0 +1,41 @@ +#ifndef T_BOARD +#error T_BOARD macro is not defined but we need it! +#endif + +/obj/item/weapon/circuitboard/recycler_crusher + name = T_BOARD("recycler - crusher") + build_path = /obj/machinery/recycling/crusher + board_type = new /datum/frame/frame_types/machine + origin_tech = list(TECH_MATERIAL = 2) + matter = list(MAT_STEEL = 50, MAT_GLASS = 50) + req_components = list( + /obj/item/stack/cable_coil = 2, + /obj/item/weapon/stock_parts/motor = 1, + /obj/item/weapon/stock_parts/gear = 1, + /obj/item/weapon/stock_parts/matter_bin = 1, + /obj/item/weapon/stock_parts/manipulator = 1 + ) + +/obj/item/weapon/circuitboard/recycler_sorter + name = T_BOARD("recycler - sorter") + build_path = /obj/machinery/recycling/sorter + board_type = new /datum/frame/frame_types/machine + origin_tech = list(TECH_MATERIAL = 2) + matter = list(MAT_STEEL = 50, MAT_GLASS = 50) + req_components = list( + /obj/item/stack/cable_coil = 2, + /obj/item/weapon/stock_parts/motor = 1, + /obj/item/weapon/stock_parts/gear = 3 + ) + +/obj/item/weapon/circuitboard/recycler_stamper + name = T_BOARD("recycler - stamper") + build_path = /obj/machinery/recycling/stamper + board_type = new /datum/frame/frame_types/machine + origin_tech = list(TECH_MATERIAL = 2) + matter = list(MAT_STEEL = 50, MAT_GLASS = 50) + req_components = list( + /obj/item/stack/cable_coil = 2, + /obj/item/weapon/stock_parts/gear = 2, + /obj/item/weapon/stock_parts/motor = 2 + ) diff --git a/code/game/objects/structures/droppod.dm b/code/game/objects/structures/droppod.dm new file mode 100644 index 0000000000..3f9c3417d1 --- /dev/null +++ b/code/game/objects/structures/droppod.dm @@ -0,0 +1,137 @@ +/obj/structure/drop_pod + name = "drop pod" + desc = "Standard Commonwealth drop pod. There are file marks where the serial number should be, however." + icon = 'icons/obj/structures/droppod.dmi' + icon_state = "pod" + density = TRUE + anchored = TRUE + bound_height = 50 + + var/polite = FALSE // polite ones don't violently murder everything + var/finished = FALSE + var/datum/gas_mixture/pod_air/air + +/obj/structure/drop_pod/polite + polite = TRUE + +/obj/structure/drop_pod/New(newloc, atom/movable/A, auto_open = FALSE) + ..() + if(A) + A.forceMove(src) // helo + podfall(auto_open) + air = new(1000) + +/obj/structure/drop_pod/proc/podfall(auto_open) + set waitfor = FALSE // sleeping in new otherwise + + var/turf/T = get_turf(src) + if(!T) + warning("Drop pod wasn't spawned on a turf") + return + + moveToNullspace() + icon_state = "[initial(icon_state)]_falling" + + // Show warning on 3x3 area centred on our drop spot + var/list/turfs_nearby = block(get_step(T, SOUTHWEST), get_step(T, NORTHEAST)) + for(var/turf/TN in turfs_nearby) + new /obj/effect/temporary_effect/shuttle_landing(TN) + + // Wait a minute + sleep(4 SECONDS) + + // Wheeeeeee + plane = ABOVE_PLANE + pixel_z = 300 + alpha = 0 + forceMove(T) + playsound(T, 'sound/effects/droppod.ogg', 50, 1) + animate(src, pixel_z = 0, time = 3 SECONDS, easing = SINE_EASING|EASE_OUT) + animate(src, alpha = 255, time = 1 SECOND, flags = ANIMATION_PARALLEL) + filters += filter(type="drop_shadow", x=-64, y=100, size=10) + animate(filters[filters.len], x=0, y=0, size=0, time=3 SECONDS, flags=ANIMATION_PARALLEL, easing=SINE_EASING|EASE_OUT) + sleep(2 SECONDS) + new /obj/effect/effect/smoke(T) + T.hotspot_expose(900) + sleep(1 SECOND) + filters = null + + // CRONCH + playsound(src, 'sound/effects/meteorimpact.ogg', 50, 1) + if(!polite) + for(var/atom/A in view(1, T)) + if(A == src) + continue + A.ex_act(2) + else + for(var/turf/simulated/floor/F in view(1, T)) + F.burn_tile(900) + + for(var/obj/O in T) + if(O == src) + continue + qdel(O) + for(var/mob/living/L in T) + L.gib() + + // Landed! Simmer + plane = initial(plane) + icon_state = "[initial(icon_state)]" + + if(auto_open) + sleep(2 SECONDS) + open_pod() + visible_message("\The [src] pops open!") + else + for(var/mob/M in src) + to_chat(M, "You've landed! Open the hatch if you think it's safe! \The [src] has enough air to last for a while...") + +/obj/structure/drop_pod/proc/open_pod() + if(finished) + return + icon_state = "[initial(icon_state)]_open" + playsound(src, 'sound/effects/magnetclamp.ogg', 100, 1) + for(var/atom/movable/AM in src) + AM.forceMove(loc) + AM.set_dir(SOUTH) // cus + qdel_null(air) + finished = TRUE + +/obj/structure/drop_pod/attack_hand(mob/living/user) + if(istype(user) && (Adjacent(user) || (user in src)) && !user.incapacitated()) + if(finished) + to_chat(user, "Nothing left to do with it now. Maybe you can break it down into materials.") + else + open_pod() + user.visible_message("[user] opens \the [src]!","You open \the [src]!") + +/obj/structure/drop_pod/attackby(obj/item/O, mob/user) + if(O.is_wrench()) + if(finished) + to_chat(user, "You start breaking down \the [src].") + if(do_after(user, 10 SECONDS, src, exclusive = TASK_ALL_EXCLUSIVE)) + var/obj/item/stack/S = new /obj/item/stack/material/plasteel(loc) + S.amount = 10 + playsound(user, O.usesound, 50, 1) + qdel(src) + else + to_chat(user, "\The [src] hasn't been opened yet. Do that first.") + return ..() + +/obj/structure/drop_pod/return_air() + return return_air_for_internal_lifeform() + +/obj/structure/drop_pod/return_air_for_internal_lifeform() + return air + +// This is about 0.896m^3 of atmosphere, which is enough to last for quite a while. +/datum/gas_mixture/pod_air + volume = 2500 + temperature = 293.150 + total_moles = 104 + +/datum/gas_mixture/pod_air/New() + . = ..() + gas = list( + "oxygen" = 21, + "nitrogen" = 79) diff --git a/code/game/objects/structures/signs.dm b/code/game/objects/structures/signs.dm index 4afb514fe7..8befbe1800 100644 --- a/code/game/objects/structures/signs.dm +++ b/code/game/objects/structures/signs.dm @@ -22,7 +22,7 @@ return /obj/structure/sign/attackby(obj/item/tool as obj, mob/user as mob) //deconstruction - if(tool.is_screwdriver() && !istype(src, /obj/structure/sign/double)) + if(tool.is_screwdriver() && !istype(src, /obj/structure/sign/scenery) && !istype(src, /obj/structure/sign/double)) playsound(src, tool.usesound, 50, 1) to_chat(user, "You unfasten the sign with your [tool].") var/obj/item/sign/S = new(src.loc) @@ -64,14 +64,14 @@ qdel(src) else ..() -/obj/structure/sign/double/map +/obj/structure/sign/scenery/map name = "station map" desc = "A framed picture of the station." -/obj/structure/sign/double/map/left +/obj/structure/sign/scenery/map/left icon_state = "map-left" -/obj/structure/sign/double/map/right +/obj/structure/sign/scenery/map/right icon_state = "map-right" /obj/structure/sign/securearea @@ -251,6 +251,10 @@ name = "\improper ACIDIC SURFACE" icon_state = "acid" +/obj/structure/sign/warning/cold + name = "\improper EXTREME COLD ENVIRONMENT" + icon_state = "cold" + /obj/structure/sign/redcross name = "medbay" desc = "The Intergalactic symbol of Medical institutions. You'll probably get help here." @@ -321,6 +325,7 @@ desc = "A warning sign which reads XENOBIOLOGY." icon_state = "xenobio3" + //direction signs presented by the order they appear in the dmi /obj/structure/sign/directions name = "direction sign" @@ -337,221 +342,436 @@ desc = "A direction sign, pointing out the way to \the [src]." */ +//Also floor/level/deck signs in the same vein. Naming conventions! +/obj/structure/sign/levels + name = "level sign" + desc = "A level sign, claiming to know which level to find... Something on?" + icon_state = "level" + icon = 'icons/obj/decals_levels.dmi' + //engineering signs /obj/structure/sign/directions/engineering name = "\improper Engineering Department" desc = "A direction sign, pointing out the way to the Engineering Department." icon_state = "direction_eng" +/obj/structure/sign/levels/engineering + name = "\improper Engineering Department" + desc = "A level sign, stating the level to find the Engineering Department on." + icon_state = "level_eng" + /obj/structure/sign/directions/engineering/reactor name = "\improper Reactor" desc = "A direction sign, pointing out the way to the Reactor." icon_state = "direction_core" +/obj/structure/sign/levels/engineering/reactor + name = "\improper Reactor" + desc = "A level sign, stating the level to find the Reactor on." + icon_state = "level_core" + /obj/structure/sign/directions/engineering/solars name = "\improper Solar Array" desc = "A direction sign, pointing out the way to the nearest Solar Array." icon_state = "direction_solar" +/obj/structure/sign/levels/engineering/solars + name = "\improper Solar Array" + desc = "A level sign, stating the level to find the nearest Solar Array on." + icon_state = "level_solar" + /obj/structure/sign/directions/engineering/atmospherics name = "\improper Atmospherics Department" desc = "A direction sign, pointing out the way to the Atmospherics Department." icon_state = "direction_atmos" +/obj/structure/sign/levels/engineering/atmospherics + name = "\improper Atmospherics Department" + desc = "A level sign, stating the level to find the Atmospherics Department on." + icon_state = "level_atmos" + /obj/structure/sign/directions/engineering/gravgen name = "\improper Gravity Generator" desc = "A direction sign, pointing out the way to the Artificial Gravity Generator." icon_state = "direction_grav" +/obj/structure/sign/levels/engineering/gravgen + name = "\improper Gravity Generator" + desc = "A level sign, stating the level to find the Artificial Gravity Generator on." + icon_state = "level_grav" + /obj/structure/sign/directions/engineering/engeqp name = "\improper Engineering Equipment Storage" desc = "A direction sign, pointing out the way to Engineering Equipment Storage." icon_state = "direction_engeqp" +/obj/structure/sign/levels/engineering/engeqp + name = "\improper Engineering Equipment Storage" + desc = "A level sign, stating the level to find Engineering Equipment Storage on." + icon_state = "level_engeqp" + //security signs /obj/structure/sign/directions/security name = "\improper Security Department" desc = "A direction sign, pointing out the way to the Security Department." icon_state = "direction_sec" +/obj/structure/sign/levels/security + name = "\improper Security Department" + desc = "A level sign, stating the level to find the Security Department on." + icon_state = "direction_sec" + /obj/structure/sign/directions/security/armory name = "\improper Armory" desc = "A direction sign, pointing out the way to the Armory." icon_state = "direction_armory" +/obj/structure/sign/levels/security/armory + name = "\improper Armory" + desc = "A level sign, stating the level to find the Armory on." + icon_state = "direction_armory" + /obj/structure/sign/directions/security/brig name = "\improper Brig" desc = "A direction sign, pointing out the way to the Brig." icon_state = "direction_brig" +/obj/structure/sign/levels/security/brig + name = "\improper Brig" + desc = "A level sign, stating the level to find the Brig on." + icon_state = "level_brig" + /obj/structure/sign/directions/security/seceqp name = "\improper Security Equipment Storage" desc = "A direction sign, pointing out the way to Security Equipment Storage." icon_state = "direction_seceqp" +/obj/structure/sign/levels/security/seceqp + name = "\improper Security Equipment Storage" + desc = "A level sign, stating the level to find Security Equipment Storage on." + icon_state = "level_seceqp" + /obj/structure/sign/directions/security/internal_affairs name = "\improper Internal Affairs Office" desc = "A direction sign, pointing out the way to the Internal Affairs Office." icon_state = "direction_intaff" +/obj/structure/sign/levels/security/internal_affairs + name = "\improper Internal Affairs Office" + desc = "A level sign, stating the level to find the Internal Affairs Office on." + icon_state = "level_intaff" + /obj/structure/sign/directions/security/forensics name = "\improper Forensics Lab" desc = "A direction sign, pointing out the way to the Forensics Lab." icon_state = "direction_forensics" +/obj/structure/sign/levels/security/forensics + name = "\improper Forensics Lab" + desc = "A level sign, stating the level to find the Forensics Lab on." + icon_state = "level_forensics" + /obj/structure/sign/directions/security/forensics/alt icon_state = "direction_lab" +/obj/structure/sign/levels/security/forensics/alt + icon_state = "level_lab" + /obj/structure/sign/directions/security/interrogation name = "\improper Interrogations" desc = "A direction sign, pointing out the way to Interrogations." icon_state = "direction_interrogation" +/obj/structure/sign/levels/security/interrogation + name = "\improper Interrogations" + desc = "A level sign, stating the level to find Interrogations on." + icon_state = "level_interrogation" + //science signs /obj/structure/sign/directions/science name = "\improper Science Department" desc = "A direction sign, pointing out the way to the Science Department." icon_state = "direction_sci" - + +/obj/structure/sign/levels/science + name = "\improper Science Department" + desc = "A level sign, stating the level to find the Science Department on." + icon_state = "level_sci" + /obj/structure/sign/directions/science/rnd name = "\improper Research & Development" desc = "A direction sign, pointing out the way to Research & Development." icon_state = "direction_rnd" +/obj/structure/sign/levels/science/rnd + name = "\improper Research & Development" + desc = "A level sign, stating the level to find Research & Development on." + icon_state = "level_rnd" + /obj/structure/sign/directions/science/toxins name = "\improper Toxins Lab" desc = "A direction sign, pointing out the way to the Toxins Lab." icon_state = "direction_sci" +/obj/structure/sign/levels/science/toxins + name = "\improper Toxins Lab" + desc = "A level sign, stating the level to find the Toxins Lab on." + icon_state = "level_sci" + /obj/structure/sign/directions/science/robotics name = "\improper Robotics Workshop" desc = "A direction sign, pointing out the way to the Robotics Workshop." icon_state = "direction_robotics" +/obj/structure/sign/levels/science/robotics + name = "\improper Robotics Workshop" + desc = "A level sign, stating the level to find the Robotics Workshop on." + icon_state = "level_robotics" + /obj/structure/sign/directions/science/xenoarch name = "\improper Xenoarchaeology Lab" desc = "A direction sign, pointing out the way to the Xenoarchaeology Lab." icon_state = "direction_xenoarch" +/obj/structure/sign/levels/science/xenoarch + name = "\improper Xenoarchaeology Lab" + desc = "A level sign, stating the level to find the Xenoarchaeology Lab on." + icon_state = "level_xenoarch" + /obj/structure/sign/directions/science/xenobiology name = "\improper Xenobiology Lab" desc = "A direction sign, pointing out the way to the Xenobiology Lab." icon_state = "direction_xbio" +/obj/structure/sign/levels/science/xenobiology + name = "\improper Xenobiology Lab" + desc = "A level sign, stating the level to find the Xenobiology Lab on." + icon_state = "level_xbio" + /obj/structure/sign/directions/science/xenoflora name = "\improper Xenoflora Lab" desc = "A direction sign, pointing out the way to the Xenoflora Lab." icon_state = "direction_xflora" +/obj/structure/sign/levels/science/xenoflora + name = "\improper Xenoflora Lab" + desc = "A level sign, stating the level to find the Xenoflora Lab on." + icon_state = "level_xflora" + /obj/structure/sign/directions/science/exploration name = "\improper Exploration Department" desc = "A direction sign, pointing out the way to the Exploration Department." icon_state = "direction_explo" +/obj/structure/sign/levels/science/exploration + name = "\improper Exploration Department" + desc = "A level sign, stating the level to find the Exploration Department on." + icon_state = "level_explo" + //medical signs /obj/structure/sign/directions/medical name = "\improper Medical Bay" desc = "A direction sign, pointing out the way to the Medical Bay." icon_state = "direction_med" +/obj/structure/sign/levels/medical + name = "\improper Medical Bay" + desc = "A level sign, stating the level to find the Medical Bay on." + icon_state = "level_med" + /obj/structure/sign/directions/medical/chemlab name = "\improper Chemistry Lab" desc = "A direction sign, pointing out the way to the Chemistry Lab." icon_state = "direction_med" +/obj/structure/sign/levels/medical/chemlab + name = "\improper Chemistry Lab" + desc = "A level sign, stating the level to find the Chemistry Lab on." + icon_state = "level_med" + /obj/structure/sign/directions/medical/surgery name = "\improper Surgery" desc = "A direction sign, pointing out the way to Surgery." icon_state = "direction_surgery" +/obj/structure/sign/levels/medical/surgery + name = "\improper Surgery" + desc = "A level sign, stating the level to find Surgery on." + icon_state = "level_surgery" + /obj/structure/sign/directions/medical/operating_1 name = "\improper Operating Theatre 1" desc = "A direction sign, pointing out the way to Operating Theatre 1." icon_state = "direction_op1" +/obj/structure/sign/levels/medical/operating_1 + name = "\improper Operating Theatre 1" + desc = "A level sign, stating the level to find Operating Theatre 1 on." + icon_state = "level_op1" + /obj/structure/sign/directions/medical/operating_2 name = "\improper Operating Theatre 2" desc = "A direction sign, pointing out the way to Operating Theatre 2." icon_state = "direction_op2" +/obj/structure/sign/levels/medical/operating_2 + name = "\improper Operating Theatre 2" + desc = "A level sign, stating the level to find Operating Theatre 2 on." + icon_state = "level_op2" + /obj/structure/sign/directions/medical/virology name = "\improper Virology" desc = "A direction sign, pointing out the way to the Virology Lab." icon_state = "direction_viro" +/obj/structure/sign/levels/medical/virology + name = "\improper Virology" + desc = "A level sign, stating the level to find the Virology Lab on." + icon_state = "level_viro" + /obj/structure/sign/directions/medical/medeqp name = "\improper Medical Equipment Storage" desc = "A direction sign, pointing out the way to Medical Equipment Storage." icon_state = "direction_medeqp" +/obj/structure/sign/levels/medical/medeqp + name = "\improper Medical Equipment Storage" + desc = "A level sign, stating the level to find Medical Equipment Storage on." + icon_state = "level_medeqp" + /obj/structure/sign/directions/medical/morgue name = "\improper Morgue" desc = "A direction sign, pointing out the way to the Morgue." icon_state = "direction_morgue" +/obj/structure/sign/levels/medical/morgue + name = "\improper Morgue" + desc = "A level sign, stating the level to find the Morgue on." + icon_state = "level_morgue" + /obj/structure/sign/directions/medical/cloning name = "\improper Cloning Lab" desc = "A direction sign, pointing out the way to the Cloning Lab." icon_state = "direction_cloning" +/obj/structure/sign/levels/medical/cloning + name = "\improper Cloning Lab" + desc = "A level sign, stating the level to find the Cloning Lab on." + icon_state = "level_cloning" + /obj/structure/sign/directions/medical/resleeving name = "\improper Resleeving Lab" desc = "A direction sign, pointing out the way to the Resleeving Lab." icon_state = "direction_resleeve" - + +/obj/structure/sign/levels/medical/resleeving + name = "\improper Resleeving Lab" + desc = "A level sign, stating the level to find the Resleeving Lab on." + icon_state = "level_resleeve" + //special signs /obj/structure/sign/directions/evac name = "\improper Evacuation" desc = "A direction sign, pointing out the way to the Escape Shuttle Dock." icon_state = "direction_evac" +/obj/structure/sign/levels/evac + name = "\improper Evacuation" + desc = "A level sign, stating the level to find the Escape Shuttle Dock on." + icon_state = "level_evac" + /obj/structure/sign/directions/eva name = "\improper Extra-Vehicular Activity" desc = "A direction sign, pointing out the way to the EVA Bay." icon_state = "direction_eva" +/obj/structure/sign/levels/eva + name = "\improper Extra-Vehicular Activity" + desc = "A level sign, stating the level to find the EVA Bay on." + icon_state = "level_eva" + //command signs /obj/structure/sign/directions/ai_core name = "\improper AI Core" desc = "A direction sign, pointing out the way to the AI Core." icon_state = "direction_ai_core" +/obj/structure/sign/levels/ai_core + name = "\improper AI Core" + desc = "A level sign, stating the level to find the AI Core on." + icon_state = "level_ai_core" + /obj/structure/sign/directions/bridge name = "\improper Bridge" desc = "A direction sign, pointing out the way to the Bridge." icon_state = "direction_bridge" +/obj/structure/sign/levels/bridge + name = "\improper Bridge" + desc = "A level sign, stating the level to find the Bridge on." + icon_state = "level_bridge" + /obj/structure/sign/directions/command name = "\improper Command" desc = "A direction sign, pointing out the way to the Command Center." icon_state = "direction_command" +/obj/structure/sign/levels/command + name = "\improper Command" + desc = "A level sign, stating the level to find the Command Center on." + icon_state = "level_command" + /obj/structure/sign/directions/teleporter name = "\improper Teleporter" desc = "A direction sign, pointing out the way to the Teleporter." icon_state = "direction_teleport" +/obj/structure/sign/levels/teleporter + name = "\improper Teleporter" + desc = "A level sign, stating the level to find the Teleporter on." + icon_state = "level_teleport" + /obj/structure/sign/directions/telecomms name = "\improper Telecommunications Hub" desc = "A direction sign, pointing out the way to the Telecommunications Hub." icon_state = "direction_tcomms" - + +/obj/structure/sign/levels/telecomms + name = "\improper Telecommunications Hub" + desc = "A level sign, stating the level to find the Telecommunications Hub on." + icon_state = "level_tcomms" + //cargonia signs /obj/structure/sign/directions/cargo name = "\improper Cargo Department" desc = "A direction sign, pointing out the way to the Cargo Department." icon_state = "direction_crg" +/obj/structure/sign/levels/cargo + name = "\improper Cargo Department" + desc = "A level sign, stating the level to find the Cargo Department on." + icon_state = "level_crg" + /obj/structure/sign/directions/cargo/mining name = "\improper Mining Department" desc = "A direction sign, pointing out the way to the Mining Department." icon_state = "direction_mining" +/obj/structure/sign/levels/cargo/mining + name = "\improper Mining Department" + desc = "A level sign, stating the level to find the Mining Department on." + icon_state = "level_mining" + /obj/structure/sign/directions/cargo/refinery name = "\improper Refinery" desc = "A direction sign, pointing out the way to the Refinery." icon_state = "direction_refinery" +/obj/structure/sign/levels/cargo/refinery + name = "\improper Refinery" + desc = "A level sign, stating the level to find the Refinery on." + icon_state = "level_refinery" + //civilian/misc signs /obj/structure/sign/directions/roomnum name = "room number" @@ -563,66 +783,131 @@ desc = "A direction sign, pointing out the way to Cryogenic Storage." icon_state = "direction_cry" +/obj/structure/sign/levels/cryo + name = "\improper Cryogenic Storage" + desc = "A level sign, stating the level to find Cryogenic Storage on." + icon_state = "level_cry" + /obj/structure/sign/directions/elevator name = "\improper Elevator" desc = "A direction sign, pointing out the way to the nearest elevator." icon_state = "direction_elv" +/obj/structure/sign/levels/elevator + name = "\improper Elevator" + desc = "A level sign, stating the level to find the nearest elevator on." + icon_state = "level_elv" + /obj/structure/sign/directions/bar name = "\improper Bar" desc = "A direction sign, pointing out the way to the nearest watering hole." icon_state = "direction_bar" +/obj/structure/sign/levels/bar + name = "\improper Bar" + desc = "A level sign, stating the level to find the nearest watering hole on." + icon_state = "level_bar" + /obj/structure/sign/directions/kitchen name = "\improper Kitchen" desc = "A pictographic direction sign with a knife, plate, and fork, pointing out the way to the nearest dining establishment." icon_state = "direction_kitchen" +/obj/structure/sign/levels/kitchen + name = "\improper Kitchen" + desc = "A pictographic direction sign with a knife, plate, and fork, stating the level to find the nearest dining establishment on." + icon_state = "level_kitchen" + /obj/structure/sign/directions/tram name = "\improper Public Transit Station" desc = "A direction sign, pointing out the way to the nearest public transit station." icon_state = "direction_tram" +/obj/structure/sign/levels/tram + name = "\improper Public Transit Station" + desc = "A level sign, stating the level to find the nearest public transit station on." + icon_state = "level_tram" + /obj/structure/sign/directions/janitor name = "\improper Custodial Closet" desc = "A direction sign, pointing out the way to the Custodial Closet." icon_state = "direction_janitor" +/obj/structure/sign/levels/janitor + name = "\improper Custodial Closet" + desc = "A level sign, stating the level to find the Custodial Closet on." + icon_state = "level_janitor" + /obj/structure/sign/directions/chapel name = "\improper Chapel" desc = "A direction sign, pointing out the way to the Chapel." icon_state = "direction_chapel" +/obj/structure/sign/levels/chapel + name = "\improper Chapel" + desc = "A level sign, stating the level to find the Chapel on." + icon_state = "level_chapel" + /obj/structure/sign/directions/dorms name = "\improper Dormitories" desc = "A direction sign, pointing out the way to the Dormitories." icon_state = "direction_dorms" +/obj/structure/sign/levels/dorms + name = "\improper Dormitories" + desc = "A level sign, stating the level to find the Dormitories on." + icon_state = "level_dorms" + /obj/structure/sign/directions/library name = "\improper Library" desc = "A direction sign, pointing out the way to the Library." icon_state = "direction_library" +/obj/structure/sign/levels/library + name = "\improper Library" + desc = "A level sign, stating the level to find the Library on." + icon_state = "level_library" + /obj/structure/sign/directions/dock name = "\improper Dock" desc = "A direction sign, pointing out the way to the nearest docking area." icon_state = "direction_dock" +/obj/structure/sign/levels/dock + name = "\improper Dock" + desc = "A level sign, stating the level to find the nearest docking area on." + icon_state = "level_dock" + /obj/structure/sign/directions/gym name = "\improper Gym" desc = "A direction sign, pointing out the way to the Gym." icon_state = "direction_gym" +/obj/structure/sign/levels/gym + name = "\improper Gym" + desc = "A level sign, stating the level to find the Gym on." + icon_state = "level_gym" + /obj/structure/sign/directions/pool name = "\improper Pool" desc = "A direction sign, pointing out the way to the Pool." icon_state = "direction_pool" +/obj/structure/sign/levels/pool + name = "\improper Pool" + desc = "A level sign, stating the level to find the Pool on." + icon_state = "level_pool" + /obj/structure/sign/directions/recreation name = "\improper Recreation Area" desc = "A direction sign, pointing out the way to the nearest Recreation Area." icon_state = "direction_recreation" +/obj/structure/sign/levels/recreation + name = "\improper Recreation Area" + desc = "A level sign, stating the level to find the nearest Recreation Area on." + icon_state = "level_recreation" + /obj/structure/sign/directions/stairwell name = "\improper Stairwell" desc = "A direction sign with stairs and a door, pointing out the way to the nearest stairwell." @@ -1038,6 +1323,48 @@ name = "\improper Fourth Deck" icon_state = "deck-4" +/obj/structure/sign/level/one + name = "\improper Level One" + icon_state = "level-1" + +/obj/structure/sign/level/one/large + icon_state = "level-1-large" + +/obj/structure/sign/level/two + name = "\improper Level Two" + icon_state = "level-2" + +/obj/structure/sign/level/two/large + icon_state = "level-2-large" + +/obj/structure/sign/level/three + name = "\improper Level Three" + icon_state = "level-3" + +/obj/structure/sign/level/three/large + icon_state = "level-3-large" + +/obj/structure/sign/level/fourth + name = "\improper Level Four" + icon_state = "level-4" + +/obj/structure/sign/level/four/large + icon_state = "level-4-large" + +/obj/structure/sign/level/basement + name = "\improper Basement Level" + icon_state = "level-b" + +/obj/structure/sign/level/basement/large + icon_state = "level-b-large" + +/obj/structure/sign/level/ground + name = "\improper Basement Level" + icon_state = "level-g" + +/obj/structure/sign/level/ground/large + icon_state = "level-g-large" + /obj/structure/sign/hangar/one name = "\improper Hangar One" icon_state = "hangar-1" @@ -1078,12 +1405,61 @@ name = "\improper AIR" icon_state = "atmos_air" -/obj/structure/sign/poi/engineleft +/obj/structure/sign/scenery/engineleft name = "I.C.V." desc = "The charred name of a cargo ship of some description." icon_state = "poi_engine1" -/obj/structure/sign/poi/engineright +/obj/structure/sign/scenery/engineright name = "I.C.V." desc = "The charred name of a cargo ship of some description." - icon_state = "poi_engine2" \ No newline at end of file + icon_state = "poi_engine2" + +//Direction/Level sign overlays. Not mechanically functional as noted above, but usable for mapping. +/obj/structure/sign/scenery/overlay + name = "snow covering" + desc = "Frozen snow obscures the view of a sign beneath." + icon_state = "snowy" + icon = 'icons/obj/decals_directions.dmi' + +/obj/structure/sign/scenery/overlay/rust + name = "rust covering" + desc = "Thick rust obscures the view of a sign beneath." + icon_state = "rusted" + +/obj/structure/sign/scenery/overlay/vine + name = "vine covering" + desc = "Thick vines obscure the view of a sign beneath." + icon_state = "vines" + +/obj/structure/sign/scenery/overlay/vine/top + icon_state = "vines_top" + +/obj/structure/sign/scenery/overlay/vine/mid + icon_state = "vines_mid" + +/obj/structure/sign/scenery/overlay/vine/bottom + icon_state = "vines_bottom" + +/obj/structure/sign/bigname + name = "Cynosure Station" + desc = "An aging sign for the Cynosure Xenoarchaeological Research Station." + icon_state = "cyno_1" + +/obj/structure/sign/bigname/seg_2 + icon_state = "cyno_2" + +/obj/structure/sign/bigname/seg_3 + icon_state = "cyno_3" + +/obj/structure/sign/bigname/seg_4 + icon_state = "cyno_4" + +/obj/structure/sign/bigname/seg_5 + icon_state = "cyno_5" + +/obj/structure/sign/bigname/seg_6 + icon_state = "cyno_6" + +/obj/structure/sign/bigname/seg_7 + icon_state = "cyno_7" diff --git a/code/game/objects/structures/under_wardrobe.dm b/code/game/objects/structures/under_wardrobe.dm index 3113d6a71e..5da83511c6 100644 --- a/code/game/objects/structures/under_wardrobe.dm +++ b/code/game/objects/structures/under_wardrobe.dm @@ -1,8 +1,8 @@ /obj/structure/undies_wardrobe name = "underwear wardrobe" desc = "Holds item of clothing you shouldn't be showing off in the hallways." - icon = 'icons/obj/closet.dmi' - icon_state = "cabinet_closed" + icon = 'icons/obj/closets/undies_wardrobe.dmi' + icon_state = "wardrobe" density = TRUE /obj/structure/undies_wardrobe/attack_hand(var/mob/user) diff --git a/code/game/turfs/flooring/flooring_decals.dm b/code/game/turfs/flooring/flooring_decals.dm index ce71ab6a84..a5af6b9463 100644 --- a/code/game/turfs/flooring/flooring_decals.dm +++ b/code/game/turfs/flooring/flooring_decals.dm @@ -16,8 +16,8 @@ var/list/floor_decals = list() color = newcolour ..(newloc) -// TODO: identify what is causing these atoms to be qdeleted in New()/Initialize() -// somewhere in this chain. Alternatively repath to /obj/floor_decal or some other +// TODO: identify what is causing these atoms to be qdeleted in New()/Initialize() +// somewhere in this chain. Alternatively repath to /obj/floor_decal or some other // abstract handler that explicitly doesn't invoke any obj behavior. /obj/effect/floor_decal/Initialize() add_to_turf_decals() @@ -1230,6 +1230,31 @@ var/list/floor_decals = list() icon_state = "plaque" desc = "A plaque commerating the building efforts of the sleepiest outpost in the sector, Yawn Wider." +//Multi-part Floor Signs + +/obj/effect/floor_decal/arrivals + name = "arrivals sign" + icon_state = "arrivals_1" + +/obj/effect/floor_decal/arrivals/right + icon_state = "arrivals_2" + +/obj/effect/floor_decal/shuttles + name = "departures sign" + icon_state = "shuttle_1" + +/obj/effect/floor_decal/shuttles/right + icon_state = "shuttle_2" + +/obj/effect/floor_decal/arrow + name = "floor arrow" + icon_state = "arrow_single" + +/obj/effect/floor_decal/arrows + name = "floor arrows" + icon_state = "arrows" + +//YW /obj/effect/floor_decal/snow name = "snow" icon = 'icons/turf/overlays.dmi' diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index ff22e219f4..c19b70a85d 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -1171,9 +1171,9 @@ var/datum/announcement/minor/admin_min_announcer = new log_admin("[key_name(usr)] spawned [seedtype] vines at ([usr.x],[usr.y],[usr.z])") /datum/admins/proc/spawn_atom(var/object as text) + set name = "Spawn" set category = "Debug" set desc = "(atom path) Spawn an atom" - set name = "Spawn" if(!check_rights(R_SPAWN)) return diff --git a/code/modules/admin/admin_verb_lists.dm b/code/modules/admin/admin_verb_lists.dm index 23b5ab9415..b5442a97d8 100644 --- a/code/modules/admin/admin_verb_lists.dm +++ b/code/modules/admin/admin_verb_lists.dm @@ -142,6 +142,7 @@ var/list/admin_verbs_fun = list( /datum/admins/proc/call_drop_pod, /client/proc/smite, /client/proc/admin_lightning_strike, + /client/proc/cmd_admin_droppod_deploy ) var/list/admin_verbs_spawn = list( @@ -150,6 +151,7 @@ var/list/admin_verbs_spawn = list( /datum/admins/proc/check_custom_items, /datum/admins/proc/spawn_plant, /datum/admins/proc/spawn_atom, //allows us to spawn instances, + /client/proc/cmd_admin_droppod_spawn, /client/proc/respawn_character, /client/proc/virus2_editor, /client/proc/spawn_chemdisp_cartridge, diff --git a/code/modules/admin/admin_verb_lists_vr.dm b/code/modules/admin/admin_verb_lists_vr.dm index 2b4abb1ff3..a4e2e921f5 100644 --- a/code/modules/admin/admin_verb_lists_vr.dm +++ b/code/modules/admin/admin_verb_lists_vr.dm @@ -157,7 +157,8 @@ var/list/admin_verbs_fun = list( /client/proc/smite, /client/proc/smite_vr, //VOREStation Add, /client/proc/admin_lightning_strike, - /client/proc/resize //VOREStation Add, + /client/proc/resize, //VOREStation Add, + /client/proc/cmd_admin_droppod_deploy ) var/list/admin_verbs_spawn = list( @@ -166,6 +167,7 @@ var/list/admin_verbs_spawn = list( /datum/admins/proc/check_custom_items, /datum/admins/proc/spawn_plant, /datum/admins/proc/spawn_atom, //allows us to spawn instances, + /client/proc/cmd_admin_droppod_spawn, /client/proc/respawn_character, /client/proc/spawn_character_mob, //VOREStation Add, /client/proc/virus2_editor, diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm index a581d3fb82..267871366b 100644 --- a/code/modules/admin/verbs/randomverbs.dm +++ b/code/modules/admin/verbs/randomverbs.dm @@ -390,7 +390,7 @@ Traitors and the like can also be revived with the previous role mostly intact. if(location == "Cancel" || !location) return - var/announce = tgui_alert(src,"Announce as if they had just arrived?", "Announce", list("Yes", "No", "Cancel")) + var/announce = tgui_alert(src,"Announce as if they had just arrived?", "Announce", list("No", "Yes", "Cancel")) if(announce == "Cancel") return else if(announce == "Yes") //Too bad buttons can't just have 1/0 values and different display strings @@ -420,7 +420,7 @@ Traitors and the like can also be revived with the previous role mostly intact. else if(samejob == USELESS_JOB) //VOREStation Edit - Visitor not Assistant charjob = USELESS_JOB //VOREStation Edit - Visitor not Assistant else - records = tgui_alert(src,"No data core entry detected. Would you like add them to the manifest, and sec/med/HR records?","Records",list("Yes","No","Cancel")) + records = tgui_alert(src,"No data core entry detected. Would you like add them to the manifest, and sec/med/HR records?","Records",list("No", "Yes", "Cancel")) if(records == "Cancel") return if(records == "Yes") @@ -457,17 +457,19 @@ Traitors and the like can also be revived with the previous role mostly intact. var/mob/living/carbon/human/new_character var/spawnloc - var/sparks + var/showy //Where did you want to spawn them? switch(location) if("Right Here") //Spawn them on your turf spawnloc = get_turf(src.mob) - sparks = tgui_alert(src,"Sparks like they teleported in?", "Showy", list("Yes", "No", "Cancel")) - if(sparks == "Cancel") + showy = tgui_alert(src,"Showy entrance?", "Showy", list("No", "Telesparks", "Drop Pod", "Cancel")) + if(showy == "Cancel") return - if(sparks == "No") - sparks = FALSE + if(showy == "Drop Pod") + showy = tgui_alert(src,"Destructive drop pods cause damage in a 3x3 and may break turfs. Polite drop pods lightly damage the turfs but won't break through.", "Drop Pod", list("Polite", "Destructive", "Cancel")) // reusing var + if(showy == "Cancel") + return if("Arrivals") //Spawn them at a latejoin spawnpoint spawnloc = pick(latejoin) @@ -483,7 +485,7 @@ Traitors and the like can also be revived with the previous role mostly intact. new_character = new(spawnloc) - if(sparks) + if(showy == "Telesparks") anim(spawnloc,new_character,'icons/mob/mob.dmi',,"phasein",,new_character.dir) playsound(spawnloc, "sparks", 50, 1) var/datum/effect/effect/system/spark_spread/spk = new(new_character) @@ -546,9 +548,21 @@ Traitors and the like can also be revived with the previous role mostly intact. log_admin("[admin] has spawned [player_key]'s character [new_character.real_name].") message_admins("[admin] has spawned [player_key]'s character [new_character.real_name].", 1) - to_chat(new_character, "You have been fully spawned. Enjoy the game.") + feedback_add_details("admin_verb","RSPCH") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + + // Drop pods + if(showy == "Polite") + var/turf/T = get_turf(new_character) + new /obj/structure/drop_pod/polite(T, new_character) + to_chat(new_character, "Please wait for your arrival.") + else if(showy == "Destructive") + var/turf/T = get_turf(new_character) + new /obj/structure/drop_pod(T, new_character) + to_chat(new_character, "Please wait for your arrival.") + else + to_chat(new_character, "You have been fully spawned. Enjoy the game.") return new_character @@ -1057,3 +1071,73 @@ Traitors and the like can also be revived with the previous role mostly intact. else if(isliving(M)) M.ghostize() qdel(M) //Bye + +/client/proc/cmd_admin_droppod_spawn(var/object as text) + set name = "Drop Pod Atom" + set desc = "Spawn a new atom/movable in a drop pod where you are." + set category = "Fun" + + if(!check_rights(R_SPAWN)) + return + + var/list/types = typesof(/atom/movable) + var/list/matches = new() + + for(var/path in types) + if(findtext("[path]", object)) + matches += path + + if(!matches.len) + return + + var/chosen + if(matches.len==1) + chosen = matches[1] + else + chosen = tgui_input_list(usr, "Select a movable type:", "Spawn in Drop Pod", matches) + if(!chosen) + return + + var/podtype = tgui_alert(src,"Destructive drop pods cause damage in a 3x3 and may break turfs. Polite drop pods lightly damage the turfs but won't break through.", "Drop Pod", list("Polite", "Destructive", "Cancel")) + if(podtype == "Cancel") + return + var/autoopen = tgui_alert(src,"Should the pod open automatically?", "Drop Pod", list("Yes", "No", "Cancel")) + if(autoopen == "Cancel") + return + switch(podtype) + if("Destructive") + var/atom/movable/AM = new chosen(usr.loc) + new /obj/structure/drop_pod(get_turf(usr), AM, autoopen == "Yes" ? TRUE : FALSE) + if("Polite") + var/atom/movable/AM = new chosen(usr.loc) + new /obj/structure/drop_pod/polite(get_turf(usr), AM, autoopen == "Yes" ? TRUE : FALSE) + + feedback_add_details("admin_verb","DPA") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + +/client/proc/cmd_admin_droppod_deploy() + set name = "Drop Pod Deploy" + set desc = "Drop an existing mob where you are in a drop pod." + set category = "Fun" + + if(!check_rights(R_SPAWN)) + return + + var/mob/living/L = tgui_input_list(usr, "Select the mob to drop:", "Mob Picker", living_mob_list) + if(!L) + return + + var/podtype = tgui_alert(src,"Destructive drop pods cause damage in a 3x3 and may break turfs. Polite drop pods lightly damage the turfs but won't break through.", "Drop Pod", list("Polite", "Destructive", "Cancel")) + if(podtype == "Cancel") + return + var/autoopen = tgui_alert(src,"Should the pod open automatically?", "Drop Pod", list("Yes", "No", "Cancel")) + if(autoopen == "Cancel") + return + if(!L || QDELETED(L)) + return + switch(podtype) + if("Destructive") + new /obj/structure/drop_pod(get_turf(usr), L, autoopen == "Yes" ? TRUE : FALSE) + if("Polite") + new /obj/structure/drop_pod/polite(get_turf(usr), L, autoopen == "Yes" ? TRUE : FALSE) + + feedback_add_details("admin_verb","DPD") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! \ No newline at end of file diff --git a/code/modules/recycling/recycling.dm b/code/modules/recycling/recycling.dm new file mode 100644 index 0000000000..26eab561e2 --- /dev/null +++ b/code/modules/recycling/recycling.dm @@ -0,0 +1,220 @@ +/obj/machinery/recycling + idle_power_usage = 5 + active_power_usage = 500 + density = TRUE + anchored = TRUE + + var/working = FALSE + +/obj/machinery/recycling/process() + return PROCESS_KILL // these are all stateful + +/obj/machinery/recycling/update_icon() + . = ..() + cut_overlays() + if(panel_open) + add_overlay("[initial(icon_state)]-panel") + +/** + * Generic procs common to all + */ +/obj/machinery/recycling/attackby(obj/item/O, mob/user) + if(!isliving(user) || !Adjacent(user)) + return + + if(working) + to_chat("\The [src] is busy! Wait until it's idle.") + return + + if(default_deconstruction_screwdriver(user, O)) + return + if(default_deconstruction_crowbar(user, O)) + return + if(default_part_replacement(user, O)) + return + + var/mob/living/M = user + if(can_accept_item(O)) + M.drop_from_inventory(O) + take_item(O) + M.visible_message("[M] inserts [O] into [src].", "You insert [O] into [src].") + else + to_chat(user, "\The [src] can't accept [O] for recycling.") + +// Conveyors etc +/obj/machinery/recycling/Bumped(atom/A) + if(isitem(A) && can_accept_item(A)) + take_item(A) + +/obj/machinery/recycling/proc/can_accept_item(obj/item/O) + if(stat & (NOPOWER|BROKEN)) + return FALSE + if(panel_open) + return FALSE + return !working + +/obj/machinery/recycling/proc/take_item(obj/item/O) + O.forceMove(src) + +/** + * This machine takes items and turns them into heaps of junk. + */ +/obj/machinery/recycling/crusher + name = "recycling crusher" + desc = "This machine is designed to break things into their constituient parts via the application of directed kinetic force. A.K.A. it crushes things into bits." + description_info = "This machine is the first step in turning things back into their materials. There's a bit of loss, depending on how upgraded it is. The output of this machine goes into the sorter." + icon = 'icons/obj/recycling.dmi' + icon_state = "crusher" + circuit = /obj/item/weapon/circuitboard/recycler_crusher + + working = FALSE + var/effic_factor = 0.5 + +/obj/machinery/recycling/crusher/RefreshParts() + . = ..() + var/total_rating = 0 + for(var/obj/item/weapon/stock_parts/matter_bin/M in component_parts) + total_rating += M.rating + for(var/obj/item/weapon/stock_parts/manipulator/M in component_parts) + total_rating += M.rating + + total_rating *= 0.1 + + effic_factor = CLAMP01(initial(effic_factor)+total_rating) + +/obj/machinery/recycling/crusher/can_accept_item(obj/item/O) + if(LAZYLEN(O.matter)) + return ..() + return FALSE + +/obj/machinery/recycling/crusher/take_item(obj/item/O) + . = ..() + working = TRUE + icon_state = "crusher-process" + update_use_power(USE_POWER_ACTIVE) + sleep(5 SECONDS) + var/list/modified_mats = list() + for(var/mat in O.matter) + modified_mats[mat] = O.matter[mat]*effic_factor + new /obj/item/debris_pack(get_step(src, dir), modified_mats) + update_use_power(USE_POWER_IDLE) + icon_state = "crusher" + qdel(O) + working = FALSE + +/** + * This machine takes heaps of junk and holds onto them until it has enough of one material to make a sheet. + */ +/obj/machinery/recycling/sorter + name = "debris sorter" + desc = "A machine for retaining debris and sorting it until enough of a similar material have accumulated to warrant conversion into sheets or ingots." + description_info = "The output of the recycling crusher should go into this machine, and it will output material dust, which can go into the sheet stamper to make sheets." + icon = 'icons/obj/recycling.dmi' + icon_state = "sorter" + circuit = /obj/item/weapon/circuitboard/recycler_sorter + + var/list/materials = list() + working = FALSE + +/obj/machinery/recycling/sorter/can_accept_item(obj/item/O) + if(istype(O, /obj/item/debris_pack)) + return ..() + return FALSE + +/obj/machinery/recycling/sorter/take_item(obj/item/O) + . = ..() + working = TRUE + icon_state = "sorter-process" + update_use_power(USE_POWER_ACTIVE) + sleep(5 SECONDS) + sort_item(O) + dispense_if_possible() + update_use_power(USE_POWER_IDLE) + icon_state = "sorter" + working = FALSE + +/obj/machinery/recycling/sorter/proc/sort_item(obj/item/O) + for(var/mat in O.matter) + if(mat in materials) + materials[mat] += O.matter[mat] + else + materials[mat] = O.matter[mat] + qdel(O) + +/obj/machinery/recycling/sorter/proc/dispense_if_possible() + for(var/mat in materials) + while(materials[mat] >= SHEET_MATERIAL_AMOUNT) + materials[mat] -= SHEET_MATERIAL_AMOUNT + new /obj/item/material_dust(get_step(src, dir), mat) + sleep(2 SECONDS) + +/** + * This machine makes sheets after being provided with material dust from a sorter. + */ +/obj/machinery/recycling/stamper + name = "sheet stamper" + desc = "A machine to press homogenous material particulate into more solid portable units of production. A.K.A. it compacts dust into sheets." + description_info = "This machine is the last step in the recycling process. The output of a debris sorter should be fed into this machine and it will produce material sheets." + icon = 'icons/obj/recycling.dmi' + icon_state = "stamper" + circuit = /obj/item/weapon/circuitboard/recycler_stamper + +/obj/machinery/recycling/stamper/can_accept_item(obj/item/O) + if(istype(O, /obj/item/material_dust)) + return ..() + return FALSE + +/obj/machinery/recycling/stamper/take_item(obj/item/O) + . = ..() + working = TRUE + icon_state = "stamper-process" + update_use_power(USE_POWER_ACTIVE) + sleep(64) + dust_to_sheet(O) + icon_state = "stamper" + update_use_power(USE_POWER_IDLE) + working = FALSE + +/obj/machinery/recycling/stamper/proc/dust_to_sheet(obj/item/material_dust/D) + if(!istype(D)) + return + var/datum/material/M = get_material_by_name(D.material_name) + if(!M) + D.forceMove(get_step(src, dir)) + playsound(src, 'sound/machines/buzz-sigh.ogg', 50, 0) + warning("Dust in [src] had material_name [D.material_name], which can't be made into stacks") + return + + var/stacktype = M.stack_type + var/turf/T = get_step(src, dir) + var/obj/item/stack/S = locate(stacktype) in T + if(S) + S.amount++ + else + new stacktype(T) + +/obj/item/debris_pack + name = "debris" + desc = "Some ground-up parts of ... something. Might be useful for recycling." + icon = 'icons/obj/recycling.dmi' + icon_state = "debris" + w_class = ITEMSIZE_NORMAL + +/obj/item/debris_pack/New(newloc, list/matter) + ..() + src.matter = matter.Copy() + +/obj/item/material_dust + name = "dust" + desc = "A homogenous powder of some material or another. Might be useful for recycling." + icon = 'icons/obj/recycling.dmi' + icon_state = "matdust" + w_class = ITEMSIZE_SMALL + var/material_name + +/obj/item/material_dust/New(loc, mat) + ..() + material_name = mat + name = "[material_name] [initial(name)]" + var/datum/material/M = get_material_by_name(material_name) + color = M?.icon_colour \ No newline at end of file diff --git a/code/modules/research/designs/circuits/circuits.dm b/code/modules/research/designs/circuits/circuits.dm index 9cc6dee112..c4c0825a2e 100644 --- a/code/modules/research/designs/circuits/circuits.dm +++ b/code/modules/research/designs/circuits/circuits.dm @@ -690,3 +690,24 @@ CIRCUITS BELOW req_tech = list(TECH_DATA = 4, TECH_ENGINEERING = 3, TECH_COMBAT = 2) build_path = /obj/item/weapon/circuitboard/pointdefense_control sort_string = "OAABB" + +/datum/design/circuit/recycler_crusher + name = "recycler - crusher" + id = "recycler_crusher" + req_tech = list(TECH_MATERIAL = 2) + build_path = /obj/item/weapon/circuitboard/recycler_crusher + sort_string = "OAABC" + +/datum/design/circuit/recycler_sorter + name = "recycler - sorter" + id = "recycler_sorter" + req_tech = list(TECH_MATERIAL = 2) + build_path = /obj/item/weapon/circuitboard/recycler_sorter + sort_string = "OAABD" + +/datum/design/circuit/recycler_stamper + name = "recycler - stamper" + id = "recycler_stamper" + req_tech = list(TECH_MATERIAL = 2) + build_path = /obj/item/weapon/circuitboard/recycler_stamper + sort_string = "OAABE" diff --git a/icons/obj/closets/undies_wardrobe.dmi b/icons/obj/closets/undies_wardrobe.dmi new file mode 100644 index 0000000000..c412cd0b76 Binary files /dev/null and b/icons/obj/closets/undies_wardrobe.dmi differ diff --git a/icons/obj/decals_directions.dmi b/icons/obj/decals_directions.dmi index 6b6ddf5283..14a8bd15b2 100644 Binary files a/icons/obj/decals_directions.dmi and b/icons/obj/decals_directions.dmi differ diff --git a/icons/obj/decals_levels.dmi b/icons/obj/decals_levels.dmi new file mode 100644 index 0000000000..5390bf9bcf Binary files /dev/null and b/icons/obj/decals_levels.dmi differ diff --git a/icons/obj/doors/angled/tgmc/2x1comdoor.dmi b/icons/obj/doors/angled/tgmc/2x1comdoor.dmi new file mode 100644 index 0000000000..49b5658a98 Binary files /dev/null and b/icons/obj/doors/angled/tgmc/2x1comdoor.dmi differ diff --git a/icons/obj/doors/angled/tgmc/2x1generic.dmi b/icons/obj/doors/angled/tgmc/2x1generic.dmi new file mode 100644 index 0000000000..79d73e0f6b Binary files /dev/null and b/icons/obj/doors/angled/tgmc/2x1generic.dmi differ diff --git a/icons/obj/doors/angled/tgmc/2x1medidoor.dmi b/icons/obj/doors/angled/tgmc/2x1medidoor.dmi new file mode 100644 index 0000000000..4de8eb6f77 Binary files /dev/null and b/icons/obj/doors/angled/tgmc/2x1medidoor.dmi differ diff --git a/icons/obj/doors/angled/tgmc/2x1secdoor.dmi b/icons/obj/doors/angled/tgmc/2x1secdoor.dmi new file mode 100644 index 0000000000..ac0456182a Binary files /dev/null and b/icons/obj/doors/angled/tgmc/2x1secdoor.dmi differ diff --git a/icons/obj/doors/angled/tgmc/blastdoors_shutters.dmi b/icons/obj/doors/angled/tgmc/blastdoors_shutters.dmi new file mode 100644 index 0000000000..75dcf76ea5 Binary files /dev/null and b/icons/obj/doors/angled/tgmc/blastdoors_shutters.dmi differ diff --git a/icons/obj/doors/angled/tgmc/celldoor.dmi b/icons/obj/doors/angled/tgmc/celldoor.dmi new file mode 100644 index 0000000000..bd2e83eb7b Binary files /dev/null and b/icons/obj/doors/angled/tgmc/celldoor.dmi differ diff --git a/icons/obj/doors/angled/tgmc/comdoor.dmi b/icons/obj/doors/angled/tgmc/comdoor.dmi new file mode 100644 index 0000000000..0c753a597a Binary files /dev/null and b/icons/obj/doors/angled/tgmc/comdoor.dmi differ diff --git a/icons/obj/doors/angled/tgmc/dropship1_cargo.dmi b/icons/obj/doors/angled/tgmc/dropship1_cargo.dmi new file mode 100644 index 0000000000..62408832a2 Binary files /dev/null and b/icons/obj/doors/angled/tgmc/dropship1_cargo.dmi differ diff --git a/icons/obj/doors/angled/tgmc/dropship1_pilot.dmi b/icons/obj/doors/angled/tgmc/dropship1_pilot.dmi new file mode 100644 index 0000000000..9e4d67c81d Binary files /dev/null and b/icons/obj/doors/angled/tgmc/dropship1_pilot.dmi differ diff --git a/icons/obj/doors/angled/tgmc/dropship2_cargo.dmi b/icons/obj/doors/angled/tgmc/dropship2_cargo.dmi new file mode 100644 index 0000000000..7c73c84031 Binary files /dev/null and b/icons/obj/doors/angled/tgmc/dropship2_cargo.dmi differ diff --git a/icons/obj/doors/angled/tgmc/dropship2_pilot.dmi b/icons/obj/doors/angled/tgmc/dropship2_pilot.dmi new file mode 100644 index 0000000000..c30e29e47e Binary files /dev/null and b/icons/obj/doors/angled/tgmc/dropship2_pilot.dmi differ diff --git a/icons/obj/doors/angled/tgmc/engidoor.dmi b/icons/obj/doors/angled/tgmc/engidoor.dmi new file mode 100644 index 0000000000..fd25f24af7 Binary files /dev/null and b/icons/obj/doors/angled/tgmc/engidoor.dmi differ diff --git a/icons/obj/doors/angled/tgmc/maintdoor.dmi b/icons/obj/doors/angled/tgmc/maintdoor.dmi new file mode 100644 index 0000000000..c65b9cc62a Binary files /dev/null and b/icons/obj/doors/angled/tgmc/maintdoor.dmi differ diff --git a/icons/obj/doors/angled/tgmc/medidoor.dmi b/icons/obj/doors/angled/tgmc/medidoor.dmi new file mode 100644 index 0000000000..d67a35e715 Binary files /dev/null and b/icons/obj/doors/angled/tgmc/medidoor.dmi differ diff --git a/icons/obj/doors/angled/tgmc/medidoor_glass.dmi b/icons/obj/doors/angled/tgmc/medidoor_glass.dmi new file mode 100644 index 0000000000..5a53591f9b Binary files /dev/null and b/icons/obj/doors/angled/tgmc/medidoor_glass.dmi differ diff --git a/icons/obj/doors/angled/tgmc/personaldoor.dmi b/icons/obj/doors/angled/tgmc/personaldoor.dmi new file mode 100644 index 0000000000..ab4e35390a Binary files /dev/null and b/icons/obj/doors/angled/tgmc/personaldoor.dmi differ diff --git a/icons/obj/doors/angled/tgmc/pod_doors.dmi b/icons/obj/doors/angled/tgmc/pod_doors.dmi new file mode 100644 index 0000000000..a561787518 Binary files /dev/null and b/icons/obj/doors/angled/tgmc/pod_doors.dmi differ diff --git a/icons/obj/doors/angled/tgmc/prepdoor.dmi b/icons/obj/doors/angled/tgmc/prepdoor.dmi new file mode 100644 index 0000000000..f1b1024b56 Binary files /dev/null and b/icons/obj/doors/angled/tgmc/prepdoor.dmi differ diff --git a/icons/obj/doors/angled/tgmc/prepdoor_alpha.dmi b/icons/obj/doors/angled/tgmc/prepdoor_alpha.dmi new file mode 100644 index 0000000000..259bc6af15 Binary files /dev/null and b/icons/obj/doors/angled/tgmc/prepdoor_alpha.dmi differ diff --git a/icons/obj/doors/angled/tgmc/prepdoor_bravo.dmi b/icons/obj/doors/angled/tgmc/prepdoor_bravo.dmi new file mode 100644 index 0000000000..612a8cf255 Binary files /dev/null and b/icons/obj/doors/angled/tgmc/prepdoor_bravo.dmi differ diff --git a/icons/obj/doors/angled/tgmc/prepdoor_charlie.dmi b/icons/obj/doors/angled/tgmc/prepdoor_charlie.dmi new file mode 100644 index 0000000000..5a1f6f4475 Binary files /dev/null and b/icons/obj/doors/angled/tgmc/prepdoor_charlie.dmi differ diff --git a/icons/obj/doors/angled/tgmc/prepdoor_delta.dmi b/icons/obj/doors/angled/tgmc/prepdoor_delta.dmi new file mode 100644 index 0000000000..459c6d8ccb Binary files /dev/null and b/icons/obj/doors/angled/tgmc/prepdoor_delta.dmi differ diff --git a/icons/obj/doors/angled/tgmc/purinadoor.dmi b/icons/obj/doors/angled/tgmc/purinadoor.dmi new file mode 100644 index 0000000000..6100af6a3b Binary files /dev/null and b/icons/obj/doors/angled/tgmc/purinadoor.dmi differ diff --git a/icons/obj/doors/angled/tgmc/secdoor.dmi b/icons/obj/doors/angled/tgmc/secdoor.dmi new file mode 100644 index 0000000000..3a0da6f17b Binary files /dev/null and b/icons/obj/doors/angled/tgmc/secdoor.dmi differ diff --git a/icons/obj/doors/angled/tgmc/secdoor_glass.dmi b/icons/obj/doors/angled/tgmc/secdoor_glass.dmi new file mode 100644 index 0000000000..95a1145856 Binary files /dev/null and b/icons/obj/doors/angled/tgmc/secdoor_glass.dmi differ diff --git a/icons/obj/doors/angled/tgmc/securedoor.dmi b/icons/obj/doors/angled/tgmc/securedoor.dmi new file mode 100644 index 0000000000..acb315d27d Binary files /dev/null and b/icons/obj/doors/angled/tgmc/securedoor.dmi differ diff --git a/icons/obj/objects.dmi b/icons/obj/objects.dmi index f5507f1e26..79c778bd12 100644 Binary files a/icons/obj/objects.dmi and b/icons/obj/objects.dmi differ diff --git a/icons/obj/recycling.dmi b/icons/obj/recycling.dmi index eea7e7aaff..4252532f88 100644 Binary files a/icons/obj/recycling.dmi and b/icons/obj/recycling.dmi differ diff --git a/icons/obj/structures/decor.dmi b/icons/obj/structures/decor.dmi index 96d6afb6b8..fb79f4a39f 100644 Binary files a/icons/obj/structures/decor.dmi and b/icons/obj/structures/decor.dmi differ diff --git a/icons/obj/structures/droppod.dmi b/icons/obj/structures/droppod.dmi new file mode 100644 index 0000000000..9254c59eeb Binary files /dev/null and b/icons/obj/structures/droppod.dmi differ diff --git a/icons/turf/flooring/decals.dmi b/icons/turf/flooring/decals.dmi index acd81e57f1..c98b77736c 100644 Binary files a/icons/turf/flooring/decals.dmi and b/icons/turf/flooring/decals.dmi differ diff --git a/maps/offmap_vr/om_ships/aro3.dmm b/maps/offmap_vr/om_ships/aro3.dmm index 6fb00768fc..3c877ab951 100644 --- a/maps/offmap_vr/om_ships/aro3.dmm +++ b/maps/offmap_vr/om_ships/aro3.dmm @@ -173,11 +173,11 @@ /turf/simulated/floor/plating/eris/under, /area/aro3/atmos) "bk" = ( -/obj/machinery/door/airlock/angled/standard{ +/obj/machinery/door/airlock/angled_bay/standard{ dir = 4; id_tag = "aro3_private1"; name = "private quarters 1"; - stripe_color = "#00AA00 + stripe_color = "#00AA00" }, /turf/simulated/floor/tiled/eris/dark/panels, /area/aro3/suite_port) @@ -198,9 +198,9 @@ /turf/simulated/floor/tiled/eris/dark/gray_perforated, /area/shuttle/aroboat3) "bv" = ( -/obj/machinery/door/airlock/angled/standard{ +/obj/machinery/door/airlock/angled_bay/standard{ name = "bunkroom 3"; - stripe_color = "#00AA00 + stripe_color = "#00AA00" }, /turf/simulated/floor/tiled/eris/dark/panels, /area/aro3/bunkrooms) @@ -537,7 +537,7 @@ /obj/structure/cable/cyan{ icon_state = "4-8" }, -/obj/machinery/door/airlock/angled/standard{ +/obj/machinery/door/airlock/angled_bay/standard{ dir = 4; name = "storage room"; stripe_color = "#9e6243" @@ -586,10 +586,10 @@ /obj/structure/cable/cyan{ icon_state = "1-2" }, -/obj/machinery/door/airlock/angled/standard{ +/obj/machinery/door/airlock/angled_bay/standard{ id_tag = "aro3_private1"; name = "private quarters 1"; - stripe_color = "#00AA00 + stripe_color = "#00AA00" }, /turf/simulated/floor/tiled/eris/dark/panels, /area/aro3/suite_port) @@ -751,10 +751,10 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/airlock/angled/standard{ +/obj/machinery/door/airlock/angled_bay/standard{ id_tag = "aro3_private2"; name = "private quarters 2"; - stripe_color = "#00AA00 + stripe_color = "#00AA00" }, /turf/simulated/floor/tiled/eris/dark/panels, /area/aro3/suite_starboard) @@ -1030,10 +1030,10 @@ /obj/structure/cable/cyan{ icon_state = "4-8" }, -/obj/machinery/door/airlock/angled/standard{ +/obj/machinery/door/airlock/angled_bay/standard{ dir = 4; name = "public restroom"; - stripe_color = "#00AA00 + stripe_color = "#00AA00" }, /turf/simulated/floor/tiled/eris/dark/panels, /area/aro3/wc_starboard) @@ -1068,7 +1068,7 @@ /turf/simulated/floor/tiled/eris/steel/bar_flat, /area/aro3/bar) "hU" = ( -/obj/machinery/door/airlock/angled/standard/glass{ +/obj/machinery/door/airlock/angled_bay/standard/glass{ name = "spare supplies" }, /turf/simulated/floor/tiled/eris/dark/panels, @@ -1080,7 +1080,7 @@ /obj/structure/cable/cyan{ icon_state = "1-2" }, -/obj/machinery/door/airlock/angled/double/glass{ +/obj/machinery/door/airlock/angled_bay/double/glass{ name = "bar"; stripe_color = "#00AA00" }, @@ -1104,7 +1104,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 8 }, -/obj/machinery/door/airlock/angled/double/glass{ +/obj/machinery/door/airlock/angled_bay/double/glass{ dir = 8; name = "medical"; stripe_color = "#6084e0" @@ -1150,7 +1150,7 @@ /obj/structure/cable/cyan{ icon_state = "4-8" }, -/obj/machinery/door/airlock/angled/standard{ +/obj/machinery/door/airlock/angled_bay/standard{ dir = 4; name = "storage room"; stripe_color = "#9e6243" @@ -1217,7 +1217,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/door/airlock/angled/double/glass{ +/obj/machinery/door/airlock/angled_bay/double/glass{ name = "atmos room"; stripe_color = "#32d3bb" }, @@ -1283,11 +1283,11 @@ /turf/simulated/floor/tiled/techmaint, /area/aro3/medical) "jy" = ( -/obj/machinery/door/airlock/angled/standard{ +/obj/machinery/door/airlock/angled_bay/standard{ dir = 4; id_tag = "aro3_private2"; name = "private quarters 2"; - stripe_color = "#00AA00 + stripe_color = "#00AA00" }, /turf/simulated/floor/tiled/eris/dark/panels, /area/aro3/suite_starboard) @@ -1397,9 +1397,9 @@ /turf/simulated/floor/tiled/eris/dark/techfloor_grid, /area/aro3/hallway_starboard) "km" = ( -/obj/machinery/door/airlock/angled/standard{ +/obj/machinery/door/airlock/angled_bay/standard{ name = "toilet"; - stripe_color = "#00AA00 + stripe_color = "#00AA00" }, /turf/simulated/floor/tiled/eris/steel/panels, /area/aro3/suite_starboard_wc) @@ -1503,7 +1503,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 8 }, -/obj/machinery/door/airlock/angled/double/glass{ +/obj/machinery/door/airlock/angled_bay/double/glass{ dir = 8 }, /turf/simulated/floor/tiled/eris/steel/panels, @@ -1614,7 +1614,7 @@ /obj/structure/cable/cyan{ icon_state = "4-8" }, -/obj/machinery/door/airlock/angled/double/glass{ +/obj/machinery/door/airlock/angled_bay/double/glass{ dir = 8; name = "workshop"; stripe_color = "#AA00AA" @@ -2108,9 +2108,9 @@ /turf/simulated/floor/tiled/eris/steel/panels, /area/aro3/eva_hall) "qu" = ( -/obj/machinery/door/airlock/angled/standard{ +/obj/machinery/door/airlock/angled_bay/standard{ name = "bunkroom 2"; - stripe_color = "#00AA00 + stripe_color = "#00AA00" }, /turf/simulated/floor/tiled/eris/dark/panels, /area/aro3/bunkrooms) @@ -2309,7 +2309,7 @@ /obj/structure/cable/cyan{ icon_state = "4-8" }, -/obj/machinery/door/airlock/angled/double/glass{ +/obj/machinery/door/airlock/angled_bay/double/glass{ dir = 8 }, /turf/simulated/floor/tiled/eris/steel/panels, @@ -2323,7 +2323,7 @@ /turf/simulated/floor/tiled/eris/white/cargo, /area/aro3/medical) "so" = ( -/obj/machinery/door/airlock/angled/standard{ +/obj/machinery/door/airlock/angled_bay/standard{ dir = 4; name = "storage room"; stripe_color = "#9e6243" @@ -2416,9 +2416,9 @@ /obj/structure/cable/cyan{ icon_state = "1-2" }, -/obj/machinery/door/airlock/angled/standard{ +/obj/machinery/door/airlock/angled_bay/standard{ name = "restroom"; - stripe_color = "#00AA00 + stripe_color = "#00AA00" }, /turf/simulated/floor/tiled/eris/dark/panels, /area/aro3/suite_port) @@ -2453,7 +2453,7 @@ "ti" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/airlock/angled/double/glass, +/obj/machinery/door/airlock/angled_bay/double/glass, /turf/simulated/floor/tiled/eris/steel/panels, /area/aro3/hallway_starboard) "tk" = ( @@ -2520,15 +2520,15 @@ /obj/structure/cable/cyan{ icon_state = "1-2" }, -/obj/machinery/door/airlock/angled/double/glass, +/obj/machinery/door/airlock/angled_bay/double/glass, /turf/simulated/floor/tiled/eris/steel/panels, /area/aro3/hallway_port) "tY" = ( -/obj/machinery/door/airlock/angled/standard{ +/obj/machinery/door/airlock/angled_bay/standard{ dir = 4; id_tag = "aro3_private2_bed"; name = "bedroom"; - stripe_color = "#00AA00 + stripe_color = "#00AA00" }, /turf/simulated/floor/tiled/eris/dark/panels, /area/aro3/suite_starboard) @@ -2642,7 +2642,7 @@ /turf/simulated/floor/tiled/techmaint, /area/aro3/bar) "vx" = ( -/obj/machinery/door/airlock/angled/double/glass{ +/obj/machinery/door/airlock/angled_bay/double/glass{ name = "ship systems" }, /turf/simulated/floor/tiled/eris/steel/panels, @@ -2935,7 +2935,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 8 }, -/obj/machinery/door/airlock/angled/double/glass{ +/obj/machinery/door/airlock/angled_bay/double/glass{ dir = 8 }, /turf/simulated/floor/tiled/eris/steel/panels, @@ -3186,7 +3186,7 @@ /obj/structure/cable/cyan{ icon_state = "1-2" }, -/obj/machinery/door/airlock/angled/double/glass{ +/obj/machinery/door/airlock/angled_bay/double/glass{ name = "engine room"; stripe_color = "#e6ef40" }, @@ -3238,7 +3238,7 @@ /obj/structure/cable/cyan{ icon_state = "1-2" }, -/obj/machinery/door/airlock/angled/double/glass{ +/obj/machinery/door/airlock/angled_bay/double/glass{ name = "public hall" }, /turf/simulated/floor/tiled/eris/steel/panels, @@ -3382,7 +3382,7 @@ /area/aro3/bar) "Aa" = ( /obj/structure/fans/hardlight, -/obj/machinery/door/airlock/angled/double/glass{ +/obj/machinery/door/airlock/angled_bay/double/glass{ dir = 8; door_color = "#AA0000"; name = "port airlock"; @@ -3452,7 +3452,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 8 }, -/obj/machinery/door/airlock/angled/double/glass{ +/obj/machinery/door/airlock/angled_bay/double/glass{ dir = 8; name = "kitchen" }, @@ -3918,9 +3918,9 @@ /turf/simulated/floor/tiled/eris/white/cargo, /area/aro3/medical) "EM" = ( -/obj/machinery/door/airlock/angled/standard{ +/obj/machinery/door/airlock/angled_bay/standard{ name = "toilet"; - stripe_color = "#00AA00 + stripe_color = "#00AA00" }, /turf/simulated/floor/tiled/eris/dark/panels, /area/aro3/suite_port_wc) @@ -4003,9 +4003,9 @@ /obj/structure/cable/cyan{ icon_state = "1-2" }, -/obj/machinery/door/airlock/angled/standard{ +/obj/machinery/door/airlock/angled_bay/standard{ name = "restroom"; - stripe_color = "#00AA00 + stripe_color = "#00AA00" }, /turf/simulated/floor/tiled/eris/dark/panels, /area/aro3/suite_starboard) @@ -4393,10 +4393,10 @@ /obj/structure/cable/cyan{ icon_state = "4-8" }, -/obj/machinery/door/airlock/angled/standard{ +/obj/machinery/door/airlock/angled_bay/standard{ dir = 4; name = "public restroom"; - stripe_color = "#00AA00 + stripe_color = "#00AA00" }, /turf/simulated/floor/tiled/eris/steel/panels, /area/aro3/wc_port) @@ -4509,7 +4509,7 @@ /turf/simulated/floor/reinforced/airless, /area/space) "KK" = ( -/obj/machinery/door/airlock/angled/double/glass{ +/obj/machinery/door/airlock/angled_bay/double/glass{ name = "repair bay" }, /turf/simulated/floor/tiled/eris/steel/panels, @@ -4857,7 +4857,7 @@ /turf/simulated/floor/tiled/eris/white/golden, /area/aro3/medical) "Nj" = ( -/obj/machinery/door/airlock/angled/standard{ +/obj/machinery/door/airlock/angled_bay/standard{ dir = 4; name = "storage room"; stripe_color = "#9e6243" @@ -5092,7 +5092,7 @@ /obj/structure/cable/cyan{ icon_state = "1-2" }, -/obj/machinery/door/airlock/angled/double/glass{ +/obj/machinery/door/airlock/angled_bay/double/glass{ name = "ship systems" }, /turf/simulated/floor/tiled/eris/steel/panels, @@ -5253,7 +5253,7 @@ "QD" = ( /obj/structure/fans/hardlight, /obj/machinery/door/firedoor/glass/hidden, -/obj/machinery/door/airlock/angled/double/glass{ +/obj/machinery/door/airlock/angled_bay/double/glass{ name = "hangar"; stripe_color = "#AA0000" }, @@ -5275,7 +5275,7 @@ /obj/structure/cable/cyan{ icon_state = "1-2" }, -/obj/machinery/door/airlock/angled/double/glass{ +/obj/machinery/door/airlock/angled_bay/double/glass{ name = "park" }, /turf/simulated/floor/tiled/eris/steel/panels, @@ -5328,11 +5328,11 @@ /turf/simulated/floor/tiled/eris/dark/gray_platform, /area/aro3/hallway_bunkrooms) "Rm" = ( -/obj/machinery/door/airlock/angled/standard{ +/obj/machinery/door/airlock/angled_bay/standard{ dir = 4; id_tag = "aro3_private1_bed"; name = "bedroom"; - stripe_color = "#00AA00 + stripe_color = "#00AA00" }, /turf/simulated/floor/tiled/eris/dark/panels, /area/aro3/suite_port) @@ -5509,7 +5509,7 @@ /obj/structure/cable/cyan{ icon_state = "4-8" }, -/obj/machinery/door/airlock/angled/double/glass{ +/obj/machinery/door/airlock/angled_bay/double/glass{ dir = 8 }, /turf/simulated/floor/tiled/eris/steel/panels, @@ -5589,7 +5589,7 @@ /turf/simulated/floor/tiled/eris/cafe, /area/aro3/kitchen) "TO" = ( -/obj/machinery/door/airlock/angled/double/glass{ +/obj/machinery/door/airlock/angled_bay/double/glass{ name = "kitchen" }, /turf/simulated/floor/tiled/eris/steel/panels, @@ -5629,7 +5629,7 @@ /obj/structure/cable/cyan{ icon_state = "1-2" }, -/obj/machinery/door/airlock/angled/double/glass{ +/obj/machinery/door/airlock/angled_bay/double/glass{ name = "bridge"; req_one_access = list(777); stripe_color = "#0000AA" @@ -5639,7 +5639,7 @@ "Uj" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/door/airlock/angled/double/glass{ +/obj/machinery/door/airlock/angled_bay/double/glass{ name = "bunkrooms"; stripe_color = "#00AA00" }, @@ -5674,7 +5674,7 @@ /obj/structure/cable/cyan{ icon_state = "4-8" }, -/obj/machinery/door/airlock/angled/double/glass{ +/obj/machinery/door/airlock/angled_bay/double/glass{ dir = 8 }, /turf/simulated/floor/tiled/eris/steel/panels, @@ -5752,9 +5752,9 @@ /turf/simulated/floor/tiled/eris/dark/gray_perforated, /area/aro3/engines) "Vv" = ( -/obj/machinery/door/airlock/angled/standard{ +/obj/machinery/door/airlock/angled_bay/standard{ name = "bunkroom 1"; - stripe_color = "#00AA00 + stripe_color = "#00AA00" }, /turf/simulated/floor/tiled/eris/dark/panels, /area/aro3/bunkrooms) @@ -5769,7 +5769,7 @@ /area/aro3/suite_starboard_wc) "VO" = ( /obj/structure/fans/hardlight, -/obj/machinery/door/airlock/angled/double/glass{ +/obj/machinery/door/airlock/angled_bay/double/glass{ dir = 8; door_color = "#AA0000"; name = "starboard airlock"; @@ -6015,7 +6015,7 @@ /obj/structure/cable/cyan{ icon_state = "1-2" }, -/obj/machinery/door/airlock/angled/standard/glass{ +/obj/machinery/door/airlock/angled_bay/standard/glass{ name = "qpad room"; stripe_color = "#AA00AA" }, diff --git a/maps/southern_cross/southern_cross-6.dmm b/maps/southern_cross/southern_cross-6.dmm index 0eabfb6624..d7ac6c180d 100644 --- a/maps/southern_cross/southern_cross-6.dmm +++ b/maps/southern_cross/southern_cross-6.dmm @@ -1526,8 +1526,8 @@ "Dr" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "centcom_dock"; name = "docking port controller"; pixel_x = 25; pixel_y = 0; req_one_access = list(13); tag_door = "centcom_dock_airlock"},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/terminal) "Ds" = (/obj/effect/floor_decal/industrial/warning{dir = 10},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/terminal) "Dt" = (/obj/machinery/computer/shuttle_control/administration{dir = 8},/turf/simulated/shuttle/floor/red,/area/shuttle/administration/centcom) -"Du" = (/obj/structure/sign/double/map/left{pixel_y = 32},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station) -"Dv" = (/obj/structure/sign/double/map/right{pixel_y = 32},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station) +"Du" = (/obj/structure/sign/scenery/map/left{pixel_y = 32},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station) +"Dv" = (/obj/structure/sign/scenery/map/right{pixel_y = 32},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station) "Dw" = (/obj/machinery/computer/message_monitor,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station) "Dx" = (/obj/structure/frame/computer,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/wizard_station) "Dy" = (/obj/structure/table/steel_reinforced,/obj/item/stack/telecrystal,/turf/unsimulated/floor{icon_state = "dark"},/area/wizard_station) @@ -1926,8 +1926,8 @@ "Lb" = (/obj/structure/table/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/void/merc,/obj/item/clothing/mask/gas/syndicate,/obj/item/clothing/head/helmet/space/void/merc,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_station) "Lc" = (/obj/structure/table/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/syndicate/black/green,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/syndicate/black/green,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_station) "Ld" = (/obj/machinery/computer/crew{dir = 1},/obj/effect/floor_decal/corner/paleblue/full,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/medical) -"Le" = (/obj/structure/sign/double/map/left{pixel_y = 32},/turf/unsimulated/floor{name = "plating"; icon_state = "cult"},/area/syndicate_station) -"Lf" = (/obj/structure/sign/double/map/right{pixel_y = 32},/turf/unsimulated/floor{name = "plating"; icon_state = "cult"},/area/syndicate_station) +"Le" = (/obj/structure/sign/scenery/map/left{pixel_y = 32},/turf/unsimulated/floor{name = "plating"; icon_state = "cult"},/area/syndicate_station) +"Lf" = (/obj/structure/sign/scenery/map/right{pixel_y = 32},/turf/unsimulated/floor{name = "plating"; icon_state = "cult"},/area/syndicate_station) "Lg" = (/turf/unsimulated/floor{name = "plating"; icon_state = "cult"},/area/syndicate_station) "Lh" = (/obj/item/weapon/storage/box/syndie_kit/clerical,/obj/structure/table/standard,/turf/unsimulated/floor{name = "plating"; icon_state = "cult"},/area/syndicate_station) "Li" = (/turf/unsimulated/floor{icon_state = "lino"},/area/syndicate_station) diff --git a/maps/submaps/surface_submaps/wilderness/DecoupledEngine.dmm b/maps/submaps/surface_submaps/wilderness/DecoupledEngine.dmm index 15a2bf604f..74e4b5c824 100644 --- a/maps/submaps/surface_submaps/wilderness/DecoupledEngine.dmm +++ b/maps/submaps/surface_submaps/wilderness/DecoupledEngine.dmm @@ -14,8 +14,8 @@ "ao" = (/obj/structure/lattice,/turf/simulated/floor/outdoors/rocks,/area/submap/DecoupledEngine) "ap" = (/obj/effect/floor_decal/rust,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor,/area/submap/DecoupledEngine) "aq" = (/obj/structure/girder,/turf/simulated/floor,/area/submap/DecoupledEngine) -"ar" = (/obj/structure/sign/poi/engineright{dir = 1},/turf/simulated/wall/r_wall,/area/submap/DecoupledEngine) -"as" = (/obj/structure/sign/poi/engineleft{dir = 1},/turf/simulated/wall/r_wall,/area/submap/DecoupledEngine) +"ar" = (/obj/structure/sign/scenery/engineright{dir = 1},/turf/simulated/wall/r_wall,/area/submap/DecoupledEngine) +"as" = (/obj/structure/sign/scenery/engineleft{dir = 1},/turf/simulated/wall/r_wall,/area/submap/DecoupledEngine) "at" = (/turf/simulated/wall/r_wall,/area/submap/DecoupledEngine) "au" = (/obj/structure/lattice,/turf/template_noop,/area/submap/DecoupledEngine) "av" = (/turf/simulated/wall/durasteel,/area/submap/DecoupledEngine) @@ -68,8 +68,8 @@ "br" = (/obj/structure/grille,/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow"; dir = 1},/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow"; dir = 8},/obj/structure/window/phoronreinforced,/turf/simulated/floor,/area/submap/DecoupledEngine) "bs" = (/obj/structure/grille,/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow"; dir = 1},/obj/structure/window/phoronreinforced,/turf/simulated/floor,/area/submap/DecoupledEngine) "bt" = (/obj/structure/grille,/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow"; dir = 1},/obj/structure/window/phoronreinforced{icon_state = "phoronrwindow"; dir = 4},/obj/structure/window/phoronreinforced,/turf/simulated/floor,/area/submap/DecoupledEngine) -"bu" = (/obj/structure/sign/poi/engineleft,/turf/simulated/wall/durasteel,/area/submap/DecoupledEngine) -"bv" = (/obj/structure/sign/poi/engineright,/turf/simulated/wall/r_wall,/area/submap/DecoupledEngine) +"bu" = (/obj/structure/sign/scenery/engineleft,/turf/simulated/wall/durasteel,/area/submap/DecoupledEngine) +"bv" = (/obj/structure/sign/scenery/engineright,/turf/simulated/wall/r_wall,/area/submap/DecoupledEngine) "bw" = (/obj/structure/girder,/turf/simulated/floor/outdoors/rocks,/area/submap/DecoupledEngine) "bx" = (/obj/structure/girder/displaced,/turf/simulated/floor/outdoors/rocks,/area/submap/DecoupledEngine) diff --git a/sound/effects/droppod.ogg b/sound/effects/droppod.ogg new file mode 100644 index 0000000000..161216ff2b Binary files /dev/null and b/sound/effects/droppod.ogg differ diff --git a/vorestation.dme b/vorestation.dme index 9c63d2c057..845ff700d9 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -948,7 +948,8 @@ #include "code\game\machinery\computer\timeclock_vr.dm" #include "code\game\machinery\computer\~computer_vr.dm" #include "code\game\machinery\doors\airlock.dm" -#include "code\game\machinery\doors\airlock_angled.dm" +#include "code\game\machinery\doors\airlock_angled_bay.dm" +#include "code\game\machinery\doors\airlock_angled_tgmc.dm" #include "code\game\machinery\doors\airlock_control.dm" #include "code\game\machinery\doors\airlock_electronics.dm" #include "code\game\machinery\doors\airlock_vr.dm" @@ -1346,6 +1347,7 @@ #include "code\game\objects\items\weapons\circuitboards\machinery\papershredder.dm" #include "code\game\objects\items\weapons\circuitboards\machinery\power.dm" #include "code\game\objects\items\weapons\circuitboards\machinery\recharge_station.dm" +#include "code\game\objects\items\weapons\circuitboards\machinery\recycling.dm" #include "code\game\objects\items\weapons\circuitboards\machinery\research.dm" #include "code\game\objects\items\weapons\circuitboards\machinery\shieldgen.dm" #include "code\game\objects\items\weapons\circuitboards\machinery\ships.dm" @@ -1476,6 +1478,7 @@ #include "code\game\objects\structures\displaycase.dm" #include "code\game\objects\structures\dogbed.dm" #include "code\game\objects\structures\door_assembly.dm" +#include "code\game\objects\structures\droppod.dm" #include "code\game\objects\structures\electricchair.dm" #include "code\game\objects\structures\extinguisher.dm" #include "code\game\objects\structures\fence.dm" @@ -3731,6 +3734,7 @@ #include "code\modules\recycling\conveyor2.dm" #include "code\modules\recycling\disposal-construction.dm" #include "code\modules\recycling\disposal.dm" +#include "code\modules\recycling\recycling.dm" #include "code\modules\recycling\sortingmachinery.dm" #include "code\modules\research\circuitprinter.dm" #include "code\modules\research\designs.dm"