diff --git a/baystation12.dme b/baystation12.dme index 024b5731acc..17b446c8011 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -53,6 +53,7 @@ #include "code\_helpers\matrices.dm" #include "code\_helpers\mobs.dm" #include "code\_helpers\names.dm" +#include "code\_helpers\overlay.dm" #include "code\_helpers\sanitize_values.dm" #include "code\_helpers\spawn_sync.dm" #include "code\_helpers\text.dm" diff --git a/code/__defines/lighting.dm b/code/__defines/lighting.dm index 815f4dc2d82..48ec6f22322 100644 --- a/code/__defines/lighting.dm +++ b/code/__defines/lighting.dm @@ -82,6 +82,11 @@ #define L_WALLMOUNT_RANGE 2 #define L_WALLMOUNT_HI_POWER 2 // For red/delta alert on fire alarms. #define L_WALLMOUNT_HI_RANGE 4 +// This controls by how much console sprites are dimmed before being overlayed. +#define HOLOSCREEN_ADDITION_FACTOR 1 +#define HOLOSCREEN_MULTIPLICATION_FACTOR 0.5 +#define HOLOSCREEN_ADDITION_OPACITY 0.8 +#define HOLOSCREEN_MULTIPLICATION_OPACITY 1 // Just so we can avoid unneeded proc calls when profiling is disabled. #define L_PROF(O,T) if (lighting_profiling) {lprof_write(O,T);} diff --git a/code/_helpers/overlay.dm b/code/_helpers/overlay.dm new file mode 100644 index 00000000000..3ee93ccaf52 --- /dev/null +++ b/code/_helpers/overlay.dm @@ -0,0 +1,33 @@ +// Factor/Opacity values are defined in __defines\lighting.dm + +/proc/holographic_overlay(obj/target, icon, icon_state) + var/image/multiply = make_screen_overlay(icon, icon_state) + multiply.blend_mode = BLEND_MULTIPLY + multiply.color = list( + 0, 0, 0, 0, + 0, 0, 0, 0, + 0, 0, 0, 0, + HOLOSCREEN_MULTIPLICATION_FACTOR, HOLOSCREEN_MULTIPLICATION_FACTOR, HOLOSCREEN_MULTIPLICATION_FACTOR, HOLOSCREEN_MULTIPLICATION_OPACITY + ) + target.overlays += multiply + var/image/overlay = make_screen_overlay(icon, icon_state) + overlay.blend_mode = BLEND_ADD + overlay.color = list( + HOLOSCREEN_ADDITION_FACTOR, 0, 0, 0, + 0, HOLOSCREEN_ADDITION_FACTOR, 0, 0, + 0, 0, HOLOSCREEN_ADDITION_FACTOR, 0, + 0, 0, 0, HOLOSCREEN_ADDITION_OPACITY + ) + target.overlays += overlay + +/proc/make_screen_overlay(icon, icon_state, brightness_factor = null) + var/image/overlay = image(icon, icon_state) + overlay.layer = LIGHTING_LAYER + 0.1 + if (brightness_factor) + overlay.color = list( + brightness_factor, 0, 0, 0, + 0, brightness_factor, 0, 0, + 0, 0, brightness_factor, 0, + 0, 0, 0, 1 + ) + return overlay diff --git a/code/game/machinery/computer/RCON_Console.dm b/code/game/machinery/computer/RCON_Console.dm index ec0d0f3c7d5..3d45813923d 100644 --- a/code/game/machinery/computer/RCON_Console.dm +++ b/code/game/machinery/computer/RCON_Console.dm @@ -40,4 +40,4 @@ /obj/machinery/computer/rcon/update_icon() ..() if(is_operable()) - overlays += image('icons/obj/computer.dmi', "ai-fixer-empty", overlay_layer) + holographic_overlay(src, src.icon, "ai-fixer-empty") diff --git a/code/game/machinery/computer/camera.dm b/code/game/machinery/computer/camera.dm index cc3fb188f9b..30684a17c4b 100644 --- a/code/game/machinery/computer/camera.dm +++ b/code/game/machinery/computer/camera.dm @@ -215,6 +215,7 @@ network = list(NETWORK_THUNDER) density = 0 circuit = null + is_holographic = FALSE /obj/machinery/computer/security/telescreen/entertainment name = "entertainment monitor" @@ -260,6 +261,7 @@ icon_screen = "syndicam" network = list(NETWORK_MERCENARY) circuit = null + is_holographic = FALSE // I mean, it is, but the holo effect looks terrible with the current merc shuttle floor. /obj/machinery/computer/security/nuclear/New() ..() diff --git a/code/game/machinery/computer/computer.dm b/code/game/machinery/computer/computer.dm index 66ed07fb01f..775b3aa937f 100644 --- a/code/game/machinery/computer/computer.dm +++ b/code/game/machinery/computer/computer.dm @@ -14,6 +14,7 @@ var/light_range_on = 2 var/light_power_on = 1 var/overlay_layer + var/is_holographic = TRUE /obj/machinery/computer/New() overlay_layer = layer @@ -64,8 +65,10 @@ if(stat & BROKEN) overlays += image(icon,"[icon_state]_broken", overlay_layer) + else if (is_holographic) + holographic_overlay(src, src.icon, icon_screen) else - overlays += image(icon,icon_screen, overlay_layer) + overlays += image(icon, icon_screen, overlay_layer) /obj/machinery/computer/power_change() ..() diff --git a/code/game/machinery/computer/guestpass.dm b/code/game/machinery/computer/guestpass.dm index f9c7be55df0..c63134fe0c2 100644 --- a/code/game/machinery/computer/guestpass.dm +++ b/code/game/machinery/computer/guestpass.dm @@ -47,6 +47,7 @@ light_color = LIGHT_COLOR_BLUE icon_screen = "pass" + is_holographic = FALSE density = 0 var/obj/item/weapon/card/id/giver diff --git a/code/game/machinery/computer/medical.dm b/code/game/machinery/computer/medical.dm index ac7b363a36b..19c63736c68 100644 --- a/code/game/machinery/computer/medical.dm +++ b/code/game/machinery/computer/medical.dm @@ -16,7 +16,6 @@ var/datum/data/record/active2 = null var/a_id = null var/temp = null - //var/printing = null /obj/machinery/computer/med_data/AltClick(var/mob/user) eject_id() @@ -562,3 +561,4 @@ icon_state = "laptop" icon_screen = "medlaptop" + is_holographic = FALSE diff --git a/code/game/machinery/computer/shuttle.dm b/code/game/machinery/computer/shuttle.dm index 735f61947a2..7f6152bdd6d 100644 --- a/code/game/machinery/computer/shuttle.dm +++ b/code/game/machinery/computer/shuttle.dm @@ -2,6 +2,7 @@ name = "Shuttle" desc = "For shuttle control." + is_holographic = FALSE icon_screen = "shuttle" light_color = "#00ffff" var/auth_need = 3.0 diff --git a/code/game/machinery/computer/skills.dm b/code/game/machinery/computer/skills.dm index 713ad039f11..7a0a92b1d2e 100644 --- a/code/game/machinery/computer/skills.dm +++ b/code/game/machinery/computer/skills.dm @@ -16,7 +16,7 @@ var/datum/data/record/active1 = null var/a_id = null var/temp = null - //var/printing = null + is_holographic = FALSE var/can_change_id = 0 var/list/Perp var/tempname = null diff --git a/code/modules/modular_computers/computers/modular_computer/core.dm b/code/modules/modular_computers/computers/modular_computer/core.dm index c11c6a69485..12f92976f0a 100644 --- a/code/modules/modular_computers/computers/modular_computer/core.dm +++ b/code/modules/modular_computers/computers/modular_computer/core.dm @@ -1,4 +1,5 @@ /obj/item/modular_computer/process() + handle_power() // Handles all computer power interaction if(!enabled) // The computer is turned off last_power_usage = 0 return 0 @@ -30,7 +31,7 @@ else idle_threads.Remove(P) - handle_power() // Handles all computer power interaction + check_update_ui_need() /obj/item/modular_computer/proc/get_preset_programs(var/app_preset_name) @@ -75,7 +76,7 @@ return NO_EMAG_ACT else computer_emagged = 1 - to_chat(user, "You emag \the [src]. It's screen briefly shows a \"OVERRIDE ACCEPTED: New software downloads available.\" message.") + to_chat(user, "You emag \the [src]. Its screen briefly displays a \"OVERRIDE ACCEPTED: New software downloads available.\" message.") return 1 /obj/item/modular_computer/update_icon() @@ -85,7 +86,10 @@ if(!enabled) var/probably_working = hard_drive && processor_unit && damage < broken_damage && (apc_power(0) || battery_power(0)) if(icon_state_screensaver && probably_working) - overlays.Add(icon_state_screensaver) + if (is_holographic) + holographic_overlay(src, src.icon, icon_state_screensaver) + else + overlays += image(icon_state_screensaver) if (screensaver_light_range && probably_working) set_light(screensaver_light_range, 1, screensaver_light_color ? screensaver_light_color : "#FFFFFF") @@ -93,10 +97,17 @@ set_light(0) return if(active_program) - overlays.Add(active_program.program_icon_state ? active_program.program_icon_state : icon_state_menu) + var/state = active_program.program_icon_state ? active_program.program_icon_state : icon_state_menu + if (is_holographic) + holographic_overlay(src, src.icon, state) + else + overlays += image(state) set_light(light_strength, l_color = active_program.color) else - overlays.Add(icon_state_menu) + if (is_holographic) + holographic_overlay(src, src.icon, icon_state_menu) + else + overlays += image(icon_state_menu) set_light(light_strength, l_color = menu_light_color) /obj/item/modular_computer/proc/turn_on(var/mob/user) diff --git a/code/modules/modular_computers/computers/modular_computer/power.dm b/code/modules/modular_computers/computers/modular_computer/power.dm index 48871619fab..db5db333e16 100644 --- a/code/modules/modular_computers/computers/modular_computer/power.dm +++ b/code/modules/modular_computers/computers/modular_computer/power.dm @@ -7,6 +7,9 @@ PRG.event_powerfailure(1) shutdown_computer(0) + power_has_failed = TRUE + update_icon() + // Tries to use power from battery. Passing 0 as parameter results in this proc returning whether battery is functional or not. /obj/item/modular_computer/proc/battery_power(var/power_usage = 0) apc_powered = FALSE @@ -38,14 +41,21 @@ // Handles power-related things, such as battery interaction, recharging, shutdown when it's discharged /obj/item/modular_computer/proc/handle_power() var/power_usage = screen_on ? base_active_power_usage : base_idle_power_usage - for(var/obj/item/weapon/computer_hardware/H in get_all_components()) - if(H.enabled) - power_usage += H.power_usage - last_power_usage = power_usage + if (enabled) + for(var/obj/item/weapon/computer_hardware/H in get_all_components()) + if(H.enabled) + power_usage += H.power_usage + last_power_usage = power_usage // First tries to charge from an APC, if APC is unavailable switches to battery power. If neither works the computer fails. if(apc_power(power_usage)) + if (power_has_failed) + power_has_failed = FALSE + update_icon() return if(battery_power(power_usage)) + if (power_has_failed) + power_has_failed = FALSE + update_icon() return - power_failure() \ No newline at end of file + power_failure() diff --git a/code/modules/modular_computers/computers/modular_computer/variables.dm b/code/modules/modular_computers/computers/modular_computer/variables.dm index cf8836f089a..40f8c386d84 100644 --- a/code/modules/modular_computers/computers/modular_computer/variables.dm +++ b/code/modules/modular_computers/computers/modular_computer/variables.dm @@ -35,6 +35,8 @@ var/steel_sheet_cost = 5 // Amount of steel sheets refunded when disassembling an empty frame of this computer. var/light_strength = 0 // Intensity of light this computer emits. Comparable to numbers light fixtures use. var/list/idle_threads = list() // Idle programs on background. They still receive process calls but can't be interacted with. + var/power_has_failed = FALSE + var/is_holographic = FALSE // Damage of the chassis. If the chassis takes too much damage it will break apart. var/damage = 0 // Current damage level diff --git a/code/modules/modular_computers/computers/subtypes/dev_console.dm b/code/modules/modular_computers/computers/subtypes/dev_console.dm index 7780ba21a2f..0fe95cc5dfd 100644 --- a/code/modules/modular_computers/computers/subtypes/dev_console.dm +++ b/code/modules/modular_computers/computers/subtypes/dev_console.dm @@ -19,3 +19,4 @@ broken_damage = 150 screensaver_light_range = 1.4 screensaver_light_color = "#0099ff" + is_holographic = TRUE diff --git a/code/modules/modular_computers/computers/subtypes/dev_telescreen.dm b/code/modules/modular_computers/computers/subtypes/dev_telescreen.dm index 3df8b0e0d27..1fb08ea1cb3 100644 --- a/code/modules/modular_computers/computers/subtypes/dev_telescreen.dm +++ b/code/modules/modular_computers/computers/subtypes/dev_telescreen.dm @@ -16,6 +16,7 @@ max_damage = 300 broken_damage = 150 w_class = 5 + is_holographic = TRUE /obj/item/modular_computer/telescreen/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) if(istype(W, /obj/item/weapon/crowbar)) diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index 7363f909624..28e7398548c 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -276,27 +276,27 @@ status_overlays_lighting.len = 4 status_overlays_environ.len = 4 - status_overlays_lock[1] = image(icon, "apcox-0") // 0=blue 1=red - status_overlays_lock[2] = image(icon, "apcox-1") + status_overlays_lock[1] = make_screen_overlay(icon, "apcox-0") // 0=blue 1=red + status_overlays_lock[2] = make_screen_overlay(icon, "apcox-1") - status_overlays_charging[1] = image(icon, "apco3-0") - status_overlays_charging[2] = image(icon, "apco3-1") - status_overlays_charging[3] = image(icon, "apco3-2") + status_overlays_charging[1] = make_screen_overlay(icon, "apco3-0") + status_overlays_charging[2] = make_screen_overlay(icon, "apco3-1") + status_overlays_charging[3] = make_screen_overlay(icon, "apco3-2") - status_overlays_equipment[1] = image(icon, "apco0-0") - status_overlays_equipment[2] = image(icon, "apco0-1") - status_overlays_equipment[3] = image(icon, "apco0-2") - status_overlays_equipment[4] = image(icon, "apco0-3") + status_overlays_equipment[1] = make_screen_overlay(icon, "apco0-0") + status_overlays_equipment[2] = make_screen_overlay(icon, "apco0-1") + status_overlays_equipment[3] = make_screen_overlay(icon, "apco0-2") + status_overlays_equipment[4] = make_screen_overlay(icon, "apco0-3") - status_overlays_lighting[1] = image(icon, "apco1-0") - status_overlays_lighting[2] = image(icon, "apco1-1") - status_overlays_lighting[3] = image(icon, "apco1-2") - status_overlays_lighting[4] = image(icon, "apco1-3") + status_overlays_lighting[1] = make_screen_overlay(icon, "apco1-0") + status_overlays_lighting[2] = make_screen_overlay(icon, "apco1-1") + status_overlays_lighting[3] = make_screen_overlay(icon, "apco1-2") + status_overlays_lighting[4] = make_screen_overlay(icon, "apco1-3") - status_overlays_environ[1] = image(icon, "apco2-0") - status_overlays_environ[2] = image(icon, "apco2-1") - status_overlays_environ[3] = image(icon, "apco2-2") - status_overlays_environ[4] = image(icon, "apco2-3") + status_overlays_environ[1] = make_screen_overlay(icon, "apco2-0") + status_overlays_environ[2] = make_screen_overlay(icon, "apco2-1") + status_overlays_environ[3] = make_screen_overlay(icon, "apco2-2") + status_overlays_environ[4] = make_screen_overlay(icon, "apco2-3") var/update = check_updates() //returns 0 if no need to update icons. // 1 if we need to update the icon_state diff --git a/maps/exodus-1.dmm b/maps/exodus-1.dmm index 4e9dd7a6518..6c26bd4b3c0 100644 --- a/maps/exodus-1.dmm +++ b/maps/exodus-1.dmm @@ -2991,7 +2991,7 @@ "bfA" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 8},/turf/simulated/floor/wood,/area/bridge/meeting_room) "bfB" = (/turf/simulated/floor/bluegrid{name = "cooled mainframe floor"; temperature = 278},/area/turret_protected/ai) "bfC" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/bluegrid{name = "cooled mainframe floor"; temperature = 278},/area/turret_protected/ai) -"bfD" = (/obj/item/modular_computer/console/preset/research,/turf/simulated/floor/bluegrid{name = "cooled mainframe floor"; temperature = 278},/area/turret_protected/ai) +"bfD" = (/obj/item/modular_computer/console/preset/research,/turf/simulated/floor/tiled/dark{name = "cooled dark floor"; temperature = 278},/area/turret_protected/ai) "bfE" = (/obj/structure/cable/cyan{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/tiled/dark{name = "cooled dark floor"; temperature = 278},/area/turret_protected/ai) "bfF" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/central_one) "bfG" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/captain) @@ -3195,7 +3195,7 @@ "bjw" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/hallway/secondary/entry/aft) "bjx" = (/obj/structure/extinguisher_cabinet{pixel_x = 0; pixel_y = -30},/turf/simulated/floor/tiled,/area/hallway/primary/starboard) "bjy" = (/turf/simulated/wall,/area/maintenance/disposal) -"bjz" = (/obj/effect/decal/cleanable/cobweb2,/obj/machinery/atmospherics/unary/vent_pump/on,/obj/item/modular_computer/console/preset/security,/turf/simulated/floor/bluegrid{name = "cooled mainframe floor"; temperature = 278},/area/turret_protected/ai) +"bjz" = (/obj/effect/decal/cleanable/cobweb2,/obj/machinery/atmospherics/unary/vent_pump/on,/obj/item/modular_computer/console/preset/security,/turf/simulated/floor/tiled/dark{name = "cooled dark floor"; temperature = 278},/area/turret_protected/ai) "bjA" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/simulated/floor/plating,/area/maintenance/locker) "bjB" = (/obj/machinery/atmospherics/pipe/simple/hidden/universal{dir = 4},/turf/simulated/floor/plating,/area/maintenance/locker) "bjC" = (/obj/machinery/atmospherics/binary/pump/on{dir = 4; target_pressure = 200},/turf/simulated/floor/plating,/area/maintenance/locker) @@ -3388,12 +3388,12 @@ "bnh" = (/obj/structure/extinguisher_cabinet{pixel_x = 25; pixel_y = 0},/obj/effect/floor_decal/corner/blue,/turf/simulated/floor/tiled,/area/hallway/primary/central_one) "bni" = (/obj/structure/sign/chemistry,/turf/simulated/wall/r_wall,/area/medical/chemistry) "bnj" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/maintenance/substation/command) -"bnk" = (/obj/machinery/ai_status_display{pixel_x = 0; pixel_y = -32},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/item/modular_computer/console/preset/command,/turf/simulated/floor/bluegrid{name = "cooled mainframe floor"; temperature = 278},/area/turret_protected/ai) +"bnk" = (/obj/machinery/ai_status_display{pixel_x = 0; pixel_y = -32},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/item/modular_computer/console/preset/command,/turf/simulated/floor/tiled/dark{name = "cooled dark floor"; temperature = 278},/area/turret_protected/ai) "bnl" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/cable/cyan{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/bluegrid{name = "cooled mainframe floor"; temperature = 278},/area/turret_protected/ai) "bnm" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/bluegrid{name = "cooled mainframe floor"; temperature = 278},/area/turret_protected/ai) -"bnn" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/item/modular_computer/console/preset/civilian,/turf/simulated/floor/bluegrid{name = "cooled mainframe floor"; temperature = 278},/area/turret_protected/ai) +"bnn" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/item/modular_computer/console/preset/civilian,/turf/simulated/floor/tiled/dark{name = "cooled dark floor"; temperature = 278},/area/turret_protected/ai) "bno" = (/obj/item/device/radio/intercom{broadcasting = 0; listening = 1; name = "Captain's Intercom"; pixel_x = -27; pixel_y = -3},/obj/structure/closet/secure_closet/captains,/turf/simulated/floor/wood,/area/crew_quarters/captain) -"bnp" = (/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = -32},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/item/modular_computer/console/preset/engineering,/turf/simulated/floor/bluegrid{name = "cooled mainframe floor"; temperature = 278},/area/turret_protected/ai) +"bnp" = (/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = -32},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/item/modular_computer/console/preset/engineering,/turf/simulated/floor/tiled/dark{name = "cooled dark floor"; temperature = 278},/area/turret_protected/ai) "bnq" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/central_two) "bnr" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/effect/floor_decal/corner/blue{tag = "icon-corner_white (WEST)"; icon_state = "corner_white"; dir = 8},/turf/simulated/floor/tiled,/area/hallway/primary/central_two) "bns" = (/turf/simulated/wall,/area/medical/reception) @@ -3436,7 +3436,7 @@ "bod" = (/obj/machinery/conveyor_switch/oneway{convdir = -1; id = "garbage"; name = "disposal coveyor"},/turf/simulated/floor/plating,/area/maintenance/disposal) "boe" = (/obj/machinery/alarm{pixel_y = 23},/obj/item/weapon/cigbutt,/turf/simulated/floor/plating,/area/maintenance/disposal) "bof" = (/obj/effect/decal/cleanable/blood/oil,/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/turf/simulated/floor/plating,/area/maintenance/disposal) -"bog" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/item/modular_computer/console/preset/medical,/turf/simulated/floor/bluegrid{name = "cooled mainframe floor"; temperature = 278},/area/turret_protected/ai) +"bog" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/item/modular_computer/console/preset/medical,/turf/simulated/floor/tiled/dark{name = "cooled dark floor"; temperature = 278},/area/turret_protected/ai) "boh" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled{temperature = 278},/area/medical/morgue) "boi" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/plating,/area/maintenance/locker) "boj" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/locker) @@ -3624,7 +3624,7 @@ "brJ" = (/obj/item/weapon/paper_bin{pixel_y = -10},/obj/item/weapon/folder/white{pixel_y = 0},/obj/item/weapon/pen,/obj/machinery/vending/wallmed1{name = "NanoMed Wall"; pixel_x = 25; pixel_y = 16},/obj/structure/table/standard{name = "plastic table frame"},/obj/effect/floor_decal/corner/white/diagonal{tag = "icon-corner_white_diagonal (EAST)"; icon_state = "corner_white_diagonal"; dir = 4},/turf/simulated/floor/tiled,/area/medical/exam_room) "brK" = (/obj/machinery/disposal/deliveryChute{dir = 1; name = "disposal inlet"},/obj/structure/disposalpipe/trunk{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/maintenance/disposal) "brL" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating,/area/maintenance/disposal) -"brM" = (/obj/structure/table/standard,/obj/item/weapon/aiModule/asimov,/obj/item/weapon/aiModule/freeformcore,/obj/machinery/door/window{base_state = "right"; dir = 4; icon_state = "right"; name = "Core Modules"; req_access = list(20)},/obj/structure/window/reinforced,/obj/item/weapon/aiModule/corp,/obj/item/weapon/aiModule/paladin,/obj/item/weapon/aiModule/robocop,/turf/simulated/floor/bluegrid{name = "cooled mainframe floor"; temperature = 278},/area/turret_protected/ai_upload) +"brM" = (/obj/structure/table/standard,/obj/item/weapon/aiModule/asimov,/obj/item/weapon/aiModule/freeformcore,/obj/machinery/door/window{base_state = "right"; dir = 4; icon_state = "right"; name = "Core Modules"; req_access = list(20)},/obj/structure/window/reinforced,/obj/item/weapon/aiModule/corp,/obj/item/weapon/aiModule/paladin,/obj/item/weapon/aiModule/robocop,/turf/simulated/floor/tiled/dark{name = "cooled dark floor"; temperature = 278},/area/turret_protected/ai_upload) "brN" = (/obj/machinery/camera/network/civilian_west{c_tag = "Waste Disposal"; dir = 8},/obj/item/weapon/material/ashtray/plastic{pixel_x = 5; pixel_y = -5},/obj/effect/decal/cleanable/ash,/obj/item/weapon/cigbutt/cigarbutt,/turf/simulated/floor/plating,/area/maintenance/disposal) "brO" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/maintenance/locker) "brP" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/maintenance/locker) @@ -3658,7 +3658,7 @@ "bsr" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/cyan{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/flasher{id = "AI"; pixel_x = -22; pixel_y = 24},/turf/simulated/floor/bluegrid{name = "cooled mainframe floor"; temperature = 278},/area/turret_protected/ai_upload) "bss" = (/obj/machinery/porta_turret,/obj/item/device/radio/intercom/locked{frequency = 1343; locked_frequency = 1343; name = "Private AI Channel"; pixel_x = -5; pixel_y = 22},/turf/simulated/floor/bluegrid{name = "cooled mainframe floor"; temperature = 278},/area/turret_protected/ai_upload) "bst" = (/obj/machinery/porta_turret,/obj/machinery/alarm/cold{pixel_y = 22},/turf/simulated/floor/bluegrid{name = "cooled mainframe floor"; temperature = 278},/area/turret_protected/ai_upload) -"bsu" = (/obj/structure/table/standard,/obj/item/weapon/aiModule/oxygen,/obj/item/weapon/aiModule/oneHuman,/obj/machinery/door/window{base_state = "left"; dir = 8; icon_state = "left"; name = "High-Risk Modules"; req_access = list(20)},/obj/item/weapon/aiModule/purge,/obj/structure/window/reinforced,/obj/item/weapon/aiModule/antimov,/obj/item/weapon/aiModule/teleporterOffline,/turf/simulated/floor/bluegrid{name = "cooled mainframe floor"; temperature = 278},/area/turret_protected/ai_upload) +"bsu" = (/obj/structure/table/standard,/obj/item/weapon/aiModule/oxygen,/obj/item/weapon/aiModule/oneHuman,/obj/machinery/door/window{base_state = "left"; dir = 8; icon_state = "left"; name = "High-Risk Modules"; req_access = list(20)},/obj/item/weapon/aiModule/purge,/obj/structure/window/reinforced,/obj/item/weapon/aiModule/antimov,/obj/item/weapon/aiModule/teleporterOffline,/turf/simulated/floor/tiled/dark{name = "cooled dark floor"; temperature = 278},/area/turret_protected/ai_upload) "bsv" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/bodybags,/obj/item/weapon/storage/box/bodybags,/obj/effect/floor_decal/corner/paleblue{tag = "icon-corner_white (NORTHWEST)"; icon_state = "corner_white"; dir = 9},/obj/machinery/alarm/cold{dir = 4; pixel_x = -22},/turf/simulated/floor/tiled,/area/medical/morgue) "bsw" = (/obj/structure/cable/cyan{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/bluegrid{name = "cooled mainframe floor"; temperature = 278},/area/turret_protected/ai_upload) "bsx" = (/turf/simulated/wall,/area/crew_quarters/captain) @@ -3736,11 +3736,11 @@ "btR" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/random/loot,/turf/simulated/floor/plating,/area/maintenance/substation/command) "btS" = (/obj/effect/landmark/start{name = "Roboticist"},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/item/weapon/stool/padded,/turf/simulated/floor/tiled,/area/assembly/robotics) "btT" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/machinery/door/firedoor/border_only{dir = 2},/obj/structure/cable/cyan,/obj/structure/cable/cyan{d2 = 2; icon_state = "0-2"},/obj/structure/cable/cyan{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/turret_protected/ai_upload) -"btU" = (/obj/structure/cable/cyan{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/computer/borgupload,/turf/simulated/floor/bluegrid{name = "cooled mainframe floor"; temperature = 278},/area/turret_protected/ai_upload) +"btU" = (/obj/structure/cable/cyan{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/computer/borgupload,/turf/simulated/floor/tiled/dark{name = "cooled dark floor"; temperature = 278},/area/turret_protected/ai_upload) "btV" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/cyan{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/cyan{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/cyan{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/bluegrid{name = "cooled mainframe floor"; temperature = 278},/area/turret_protected/ai_upload) "btW" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/hologram/holopad,/turf/simulated/floor/tiled/white,/area/assembly/robotics) "btX" = (/obj/structure/cable/cyan{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/dark{name = "cooled dark floor"; temperature = 278},/area/turret_protected/ai_upload) -"btY" = (/obj/structure/cable/cyan{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/computer/aiupload,/turf/simulated/floor/bluegrid{name = "cooled mainframe floor"; temperature = 278},/area/turret_protected/ai_upload) +"btY" = (/obj/structure/cable/cyan{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/computer/aiupload,/turf/simulated/floor/tiled/dark{name = "cooled dark floor"; temperature = 278},/area/turret_protected/ai_upload) "btZ" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/machinery/door/firedoor/border_only{dir = 2},/obj/structure/cable/cyan{d2 = 2; icon_state = "0-2"},/obj/structure/cable/cyan{d2 = 8; icon_state = "0-8"},/obj/structure/cable/cyan,/turf/simulated/floor/plating,/area/turret_protected/ai_upload) "bua" = (/obj/structure/displaycase,/obj/machinery/light/small{dir = 1},/turf/simulated/floor/carpet,/area/crew_quarters/captain) "bub" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/carpet,/area/crew_quarters/captain) @@ -3785,7 +3785,7 @@ "buO" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/obj/machinery/recharger/wallcharger{pixel_x = 0; pixel_y = 30},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/crew_quarters/heads/hop) "buP" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/tiled,/area/crew_quarters/heads/hop) "buQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/bluegrid{name = "cooled mainframe floor"; temperature = 278},/area/turret_protected/ai_upload) -"buR" = (/obj/structure/table/standard,/obj/item/weapon/aiModule/nanotrasen,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/item/weapon/aiModule/reset,/turf/simulated/floor/bluegrid{name = "cooled mainframe floor"; temperature = 278},/area/turret_protected/ai_upload) +"buR" = (/obj/structure/table/standard,/obj/item/weapon/aiModule/nanotrasen,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/item/weapon/aiModule/reset,/turf/simulated/floor/tiled/dark{name = "cooled dark floor"; temperature = 278},/area/turret_protected/ai_upload) "buS" = (/obj/machinery/hologram/holopad,/obj/structure/cable/cyan{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/dark{name = "cooled dark floor"; temperature = 278},/area/turret_protected/ai_upload) "buT" = (/obj/structure/toilet{dir = 4},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/captain) "buU" = (/obj/structure/disposalpipe/segment,/obj/item/device/radio/intercom{dir = 0; name = "Station Intercom (General)"; pixel_x = -27},/turf/simulated/floor/tiled,/area/hallway/primary/central_two) @@ -3838,7 +3838,7 @@ "bvP" = (/turf/space,/turf/simulated/shuttle/wall{tag = "icon-swall_c (EAST)"; icon_state = "swall_c"; dir = 4},/area/shuttle/research/station) "bvQ" = (/obj/machinery/conveyor_switch/oneway{id = "QMLoad2"},/obj/effect/floor_decal/industrial/warning{tag = "icon-warning (SOUTHWEST)"; icon_state = "warning"; dir = 10},/turf/simulated/floor/tiled,/area/quartermaster/loading) "bvR" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/dark{name = "cooled dark floor"; temperature = 278},/area/turret_protected/ai_upload) -"bvS" = (/obj/structure/table/standard,/obj/item/weapon/aiModule/freeform,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/item/weapon/aiModule/protectStation,/turf/simulated/floor/bluegrid{name = "cooled mainframe floor"; temperature = 278},/area/turret_protected/ai_upload) +"bvS" = (/obj/structure/table/standard,/obj/item/weapon/aiModule/freeform,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/item/weapon/aiModule/protectStation,/turf/simulated/floor/tiled/dark{name = "cooled dark floor"; temperature = 278},/area/turret_protected/ai_upload) "bvT" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/captain,/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/turf/simulated/floor/carpet,/area/crew_quarters/captain) "bvU" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/carpet,/area/crew_quarters/captain) "bvV" = (/obj/structure/table/woodentable,/obj/item/device/camera,/obj/item/weapon/storage/photo_album{pixel_y = -10},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/carpet,/area/crew_quarters/captain)