Files
Bubberstation/code/game/objects/items/circuitboards/computer_circuitboards.dm
RikuTheKiller be1f231869 Lock R&D console boards by default (#94114)
## About The Pull Request

This PR makes all R&D console boards that are either printed or sourced
from tech storage start out locked. They can be unlocked by swiping them
with an ID that has research access.

R&D consoles can also be unlocked with an emag, but doing so will break
their comms circuit as well, making all researched nodes broadcast over
public comms. You can still emag the console itself after it's been
constructed without breaking it in any way, while also silencing
announcements instead. (that's definitely a noob trap, but it's out of
scope for this PR)

The reason why the tech storage board is locked as well is because the
goal of this PR is to stop engineers from making R&D consoles, and
engineers have access to tech storage. Leaving the board unlocked and
moving it to secure tech storage would make engineers break in there
every shift.

The changelog basically has a FAQ for "Okay, so what do I do instead?",
because I know people will be confused about what route they're intended
to take when science closes their desk shutters for the umpteenth time
this week.
## Why It's Good For The Game

Engineering has a habit of making an R&D console every round to bypass
having to ask science or a head of staff to research things. Locking the
consoles at least makes engineers consider asking science to do
science's job.

Note that this doesn't solve the issue entirely, it just removes the
easiest and most convenient way of bypassing science. Engineers can
still break into R&D extremely easily using their wire knowledge, and do
so regularly.

More importantly though, this might shine some light on the fact that
heads of department like the CE have remote access to the research
network via their PDAs. This means engineers can ask the CE to research
things for them.

Asking people with access to the research network to research things is
a lot better for roleplay and immersion than having engineering
construct R&D consoles every shift.

## Changelog
🆑
balance: R&D console boards sourced from printing or tech storage are
now locked by default. It's recommended to ask your respective head of
department or the science department to complete research for you. Heads
of department can remotely access the research network using their PDAs.
/🆑
2025-12-05 19:12:22 -05:00

698 lines
25 KiB
Plaintext

/obj/item/circuitboard/computer
name = "Generic"
abstract_type = /obj/item/circuitboard/computer
name_extension = "(Computer Board)"
/obj/item/circuitboard/computer/examine()
. = ..()
if(GetComponent(/datum/component/gps))
. += span_info("there's a small, blinking light!")
//Command
/obj/item/circuitboard/computer/aiupload
name = "AI Upload"
greyscale_colors = CIRCUIT_COLOR_COMMAND
build_path = /obj/machinery/computer/upload/ai
/obj/item/circuitboard/computer/borgupload
name = "Cyborg Upload"
greyscale_colors = CIRCUIT_COLOR_COMMAND
build_path = /obj/machinery/computer/upload/borg
/obj/item/circuitboard/computer/bsa_control
name = "Bluespace Artillery Controls"
build_path = /obj/machinery/computer/bsa_control
/obj/item/circuitboard/computer/accounting
name = "Account Lookup Console"
greyscale_colors = CIRCUIT_COLOR_COMMAND
build_path = /obj/machinery/computer/accounting
/obj/item/circuitboard/computer/bankmachine
name = "Bank Machine Console"
greyscale_colors = CIRCUIT_COLOR_COMMAND
build_path = /obj/machinery/computer/bank_machine
//Engineering
/obj/item/circuitboard/computer/apc_control
name = "\improper Power Flow Control Console"
greyscale_colors = CIRCUIT_COLOR_ENGINEERING
build_path = /obj/machinery/computer/apc_control
/obj/item/circuitboard/computer/atmos_alert
name = "Atmospheric Alert"
greyscale_colors = CIRCUIT_COLOR_ENGINEERING
build_path = /obj/machinery/computer/atmos_alert
var/station_only = FALSE
/obj/item/circuitboard/computer/atmos_alert/station_only
station_only = TRUE
/obj/item/circuitboard/computer/atmos_alert/examine(mob/user)
. = ..()
. += span_info("The board is configured to [station_only ? "track all station and mining alarms" : "track alarms on the same z-level"].")
. += span_notice("The board mode can be changed with a [EXAMINE_HINT("multitool")].")
/obj/item/circuitboard/computer/atmos_alert/multitool_act(mob/living/user)
station_only = !station_only
balloon_alert(user, "tracking set to [station_only ? "station" : "z-level"]")
return TRUE
/obj/item/circuitboard/computer/atmos_control
name = "Atmospheric Control"
greyscale_colors = CIRCUIT_COLOR_ENGINEERING
build_path = /obj/machinery/computer/atmos_control
/obj/item/circuitboard/computer/atmos_control/nocontrol
name = "Atmospheric Monitor"
build_path = /obj/machinery/computer/atmos_control/nocontrol
/obj/item/circuitboard/computer/atmos_control/noreconnect
name = "Atmospheric Control"
build_path = /obj/machinery/computer/atmos_control/noreconnect
/obj/item/circuitboard/computer/atmos_control/fixed
name = "Atmospheric Monitor"
build_path = /obj/machinery/computer/atmos_control/fixed
/obj/item/circuitboard/computer/atmos_control/nocontrol/master
name = "Station Atmospheric Monitor"
build_path = /obj/machinery/computer/atmos_control/nocontrol/master
/obj/item/circuitboard/computer/atmos_control/nocontrol/incinerator
name = "Incinerator Chamber Monitor"
build_path = /obj/machinery/computer/atmos_control/nocontrol/incinerator
/obj/item/circuitboard/computer/atmos_control/ordnancemix
name = "Ordnance Chamber Control"
build_path = /obj/machinery/computer/atmos_control/ordnancemix
/obj/item/circuitboard/computer/atmos_control/oxygen_tank
name = "Oxygen Supply Control"
build_path = /obj/machinery/computer/atmos_control/oxygen_tank
/obj/item/circuitboard/computer/atmos_control/plasma_tank
name = "Plasma Supply Control"
build_path = /obj/machinery/computer/atmos_control/plasma_tank
/obj/item/circuitboard/computer/atmos_control/air_tank
name = "Mixed Air Supply Control"
build_path = /obj/machinery/computer/atmos_control/air_tank
/obj/item/circuitboard/computer/atmos_control/mix_tank
name = "Gas Mix Supply Control"
build_path = /obj/machinery/computer/atmos_control/mix_tank
/obj/item/circuitboard/computer/atmos_control/nitrous_tank
name = "Nitrous Oxide Supply Control"
build_path = /obj/machinery/computer/atmos_control/nitrous_tank
/obj/item/circuitboard/computer/atmos_control/nitrogen_tank
name = "Nitrogen Supply Control"
build_path = /obj/machinery/computer/atmos_control/nitrogen_tank
/obj/item/circuitboard/computer/atmos_control/carbon_tank
name = "Carbon Dioxide Supply Control"
build_path = /obj/machinery/computer/atmos_control/carbon_tank
/obj/item/circuitboard/computer/atmos_control/bz_tank
name = "BZ Supply Control"
build_path = /obj/machinery/computer/atmos_control/bz_tank
/obj/item/circuitboard/computer/atmos_control/freon_tank
name = "Freon Supply Control"
build_path = /obj/machinery/computer/atmos_control/freon_tank
/obj/item/circuitboard/computer/atmos_control/halon_tank
name = "Halon Supply Control"
build_path = /obj/machinery/computer/atmos_control/halon_tank
/obj/item/circuitboard/computer/atmos_control/healium_tank
name = "Healium Supply Control"
build_path = /obj/machinery/computer/atmos_control/healium_tank
/obj/item/circuitboard/computer/atmos_control/hydrogen_tank
name = "Hydrogen Supply Control"
build_path = /obj/machinery/computer/atmos_control/hydrogen_tank
/obj/item/circuitboard/computer/atmos_control/hypernoblium_tank
name = "Hypernoblium Supply Control"
build_path = /obj/machinery/computer/atmos_control/hypernoblium_tank
/obj/item/circuitboard/computer/atmos_control/miasma_tank
name = "Miasma Supply Control"
build_path = /obj/machinery/computer/atmos_control/miasma_tank
/obj/item/circuitboard/computer/atmos_control/nitrium_tank
name = "Nitrium Supply Control"
build_path = /obj/machinery/computer/atmos_control/nitrium_tank
/obj/item/circuitboard/computer/atmos_control/pluoxium_tank
name = "Pluoxium Supply Control"
build_path = /obj/machinery/computer/atmos_control/pluoxium_tank
/obj/item/circuitboard/computer/atmos_control/proto_nitrate_tank
name = "Proto-Nitrate Supply Control"
build_path = /obj/machinery/computer/atmos_control/proto_nitrate_tank
/obj/item/circuitboard/computer/atmos_control/tritium_tank
name = "Tritium Supply Control"
build_path = /obj/machinery/computer/atmos_control/tritium_tank
/obj/item/circuitboard/computer/atmos_control/water_vapor
name = "Water Vapor Supply Control"
build_path = /obj/machinery/computer/atmos_control/water_vapor
/obj/item/circuitboard/computer/atmos_control/zauker_tank
name = "Zauker Supply Control"
build_path = /obj/machinery/computer/atmos_control/zauker_tank
/obj/item/circuitboard/computer/atmos_control/helium_tank
name = "Helium Supply Control"
build_path = /obj/machinery/computer/atmos_control/helium_tank
/obj/item/circuitboard/computer/atmos_control/antinoblium_tank
name = "Antinoblium Supply Control"
build_path = /obj/machinery/computer/atmos_control/antinoblium_tank
/obj/item/circuitboard/computer/auxiliary_base
name = "Auxiliary Base Management Console"
greyscale_colors = CIRCUIT_COLOR_ENGINEERING
build_path = /obj/machinery/computer/auxiliary_base
/obj/item/circuitboard/computer/base_construction
name = "Generic Base Construction Console"
greyscale_colors = CIRCUIT_COLOR_ENGINEERING
build_path = /obj/machinery/computer/camera_advanced/base_construction
/obj/item/circuitboard/computer/base_construction/aux
name = "Aux Mining Base Construction Console"
greyscale_colors = CIRCUIT_COLOR_ENGINEERING
build_path = /obj/machinery/computer/camera_advanced/base_construction/aux
/obj/item/circuitboard/computer/base_construction/centcom
name = "Centcom Base Construction Console"
greyscale_colors = CIRCUIT_COLOR_ENGINEERING
build_path = /obj/machinery/computer/camera_advanced/base_construction/centcom
/obj/item/circuitboard/computer/comm_monitor
name = "Telecommunications Monitor"
greyscale_colors = CIRCUIT_COLOR_ENGINEERING
build_path = /obj/machinery/computer/telecomms/monitor
/obj/item/circuitboard/computer/comm_server
name = "Telecommunications Server Monitor"
greyscale_colors = CIRCUIT_COLOR_ENGINEERING
build_path = /obj/machinery/computer/telecomms/server
/obj/item/circuitboard/computer/communications
name = "Communications"
greyscale_colors = CIRCUIT_COLOR_ENGINEERING
build_path = /obj/machinery/computer/communications
/obj/item/circuitboard/computer/communications/syndicate
name = "Syndicate Communications"
greyscale_colors = CIRCUIT_COLOR_ENGINEERING
build_path = /obj/machinery/computer/communications/syndicate
/obj/item/circuitboard/computer/message_monitor
name = "Message Monitor"
greyscale_colors = CIRCUIT_COLOR_ENGINEERING
build_path = /obj/machinery/computer/message_monitor
/obj/item/circuitboard/computer/modular_shield_console
name = "Modular Shield Generator Console"
greyscale_colors = CIRCUIT_COLOR_ENGINEERING
build_path = /obj/machinery/computer/modular_shield
/obj/item/circuitboard/computer/powermonitor
name = "Power Monitor" //name fixed 250810
greyscale_colors = CIRCUIT_COLOR_ENGINEERING
build_path = /obj/machinery/computer/monitor
/obj/item/circuitboard/computer/sat_control
name = "Satellite Network Control"
greyscale_colors = CIRCUIT_COLOR_ENGINEERING
build_path = /obj/machinery/computer/sat_control
/obj/item/circuitboard/computer/solar_control
name = "Solar Control" //name fixed 250810
greyscale_colors = CIRCUIT_COLOR_ENGINEERING
build_path = /obj/machinery/power/solar_control
/obj/item/circuitboard/computer/station_alert
name = "Station Alerts"
greyscale_colors = CIRCUIT_COLOR_ENGINEERING
build_path = /obj/machinery/computer/station_alert
/obj/item/circuitboard/computer/turbine_computer
name = "Turbine Computer"
greyscale_colors = CIRCUIT_COLOR_ENGINEERING
build_path = /obj/machinery/computer/turbine_computer
//Generic
/obj/item/circuitboard/computer/arcade/amputation
name = "Mediborg's Amputation Adventure"
greyscale_colors = CIRCUIT_COLOR_GENERIC
build_path = /obj/machinery/computer/arcade/amputation
/obj/item/circuitboard/computer/arcade/battle
name = "Arcade Battle"
greyscale_colors = CIRCUIT_COLOR_GENERIC
build_path = /obj/machinery/computer/arcade/battle
/obj/item/circuitboard/computer/arcade/orion_trail
name = "Orion Trail"
greyscale_colors = CIRCUIT_COLOR_GENERIC
build_path = /obj/machinery/computer/arcade/orion_trail
/obj/item/circuitboard/computer/holodeck// Not going to let people get this, but it's just here for future
name = "Holodeck Control"
greyscale_colors = CIRCUIT_COLOR_GENERIC
build_path = /obj/machinery/computer/holodeck
/obj/item/circuitboard/computer/libraryconsole
name = "Library Visitor Console"
build_path = /obj/machinery/computer/libraryconsole
/obj/item/circuitboard/computer/libraryconsole/bookconsole
name = "Book Inventory Management Console"
build_path = /obj/machinery/computer/libraryconsole/bookmanagement
/obj/item/circuitboard/computer/libraryconsole/screwdriver_act(mob/living/user, obj/item/tool)
if(build_path == /obj/machinery/computer/libraryconsole/bookmanagement)
name = "Library Visitor Console"
build_path = /obj/machinery/computer/libraryconsole
to_chat(user, span_notice("Defaulting access protocols."))
else
name = "Book Inventory Management Console"
build_path = /obj/machinery/computer/libraryconsole/bookmanagement
to_chat(user, span_notice("Access protocols successfully updated."))
return TRUE
/obj/item/circuitboard/computer/monastery_shuttle
name = "Monastery Shuttle"
greyscale_colors = CIRCUIT_COLOR_GENERIC
build_path = /obj/machinery/computer/shuttle/monastery_shuttle
/obj/item/circuitboard/computer/olddoor
name = "DoorMex"
greyscale_colors = CIRCUIT_COLOR_GENERIC
build_path = /obj/machinery/computer/pod/old
/obj/item/circuitboard/computer/pod
name = "Massdriver control"
greyscale_colors = CIRCUIT_COLOR_GENERIC
build_path = /obj/machinery/computer/pod
/obj/item/circuitboard/computer/slot_machine
name = "Slot Machine"
greyscale_colors = CIRCUIT_COLOR_GENERIC
build_path = /obj/machinery/computer/slot_machine
/obj/item/circuitboard/computer/swfdoor
name = "Magix"
greyscale_colors = CIRCUIT_COLOR_GENERIC
build_path = /obj/machinery/computer/pod/old/swf
/obj/item/circuitboard/computer/syndicate_shuttle
name = "Syndicate Shuttle"
greyscale_colors = CIRCUIT_COLOR_GENERIC
build_path = /obj/machinery/computer/shuttle/syndicate
/// If operatives declared war this will be the time challenge was started
var/challenge_start_time
var/moved = FALSE
/obj/item/circuitboard/computer/syndicate_shuttle/Initialize(mapload)
. = ..()
GLOB.syndicate_shuttle_boards += src
/obj/item/circuitboard/computer/syndicate_shuttle/Destroy()
GLOB.syndicate_shuttle_boards -= src
return ..()
/obj/item/circuitboard/computer/syndicatedoor
name = "ProComp Executive"
greyscale_colors = CIRCUIT_COLOR_GENERIC
build_path = /obj/machinery/computer/pod/old/syndicate
/obj/item/circuitboard/computer/white_ship
name = "White Ship"
greyscale_colors = CIRCUIT_COLOR_GENERIC
build_path = /obj/machinery/computer/shuttle/white_ship
/obj/item/circuitboard/computer/white_ship/bridge
name = "White Ship Bridge"
greyscale_colors = CIRCUIT_COLOR_GENERIC
build_path = /obj/machinery/computer/shuttle/white_ship/bridge
/obj/item/circuitboard/computer/bountypad
name = "Bounty Pad"
build_path = /obj/machinery/computer/piratepad_control/civilian
/obj/item/circuitboard/computer/tram_controls
name = "Tram Controls"
build_path = /obj/machinery/computer/tram_controls
var/split_mode = FALSE
/obj/item/circuitboard/computer/tram_controls/split
split_mode = TRUE
/obj/item/circuitboard/computer/tram_controls/examine(mob/user)
. = ..()
. += span_info("The board is configured for [split_mode ? "split window" : "normal window"].")
. += span_notice("The board mode can be changed with a [EXAMINE_HINT("multitool")].")
/obj/item/circuitboard/computer/tram_controls/multitool_act(mob/living/user)
split_mode = !split_mode
to_chat(user, span_notice("[src] positioning set to [split_mode ? "split window" : "normal window"]."))
return TRUE
/obj/item/circuitboard/computer/terminal
name = "Terminal"
build_path = /obj/machinery/computer/terminal
//Medical
/obj/item/circuitboard/computer/crew
name = "Crew Monitoring Console"
greyscale_colors = CIRCUIT_COLOR_MEDICAL
build_path = /obj/machinery/computer/crew
/obj/item/circuitboard/computer/med_data
name = "Medical Records Console"
greyscale_colors = CIRCUIT_COLOR_MEDICAL
build_path = /obj/machinery/computer/records/medical
/obj/item/circuitboard/computer/operating
name = "Operating Computer"
greyscale_colors = CIRCUIT_COLOR_MEDICAL
build_path = /obj/machinery/computer/operating
/obj/item/circuitboard/computer/pandemic
name = "PanD.E.M.I.C. 2200"
greyscale_colors = CIRCUIT_COLOR_MEDICAL
build_path = /obj/machinery/computer/pandemic
/obj/item/circuitboard/computer/experimental_cloner
name = "Experimental Cloner Control Console"
greyscale_colors = CIRCUIT_COLOR_MEDICAL
build_path = /obj/machinery/computer/experimental_cloner
//Science
/obj/item/circuitboard/computer/aifixer
name = "AI Integrity Restorer"
greyscale_colors = CIRCUIT_COLOR_SCIENCE
build_path = /obj/machinery/computer/aifixer
/obj/item/circuitboard/computer/launchpad_console
name = "Launchpad Control Console"
greyscale_colors = CIRCUIT_COLOR_SCIENCE
build_path = /obj/machinery/computer/launchpad
/obj/item/circuitboard/computer/mech_bay_power_console
name = "Mech Bay Power Control Console"
greyscale_colors = CIRCUIT_COLOR_SCIENCE
build_path = /obj/machinery/computer/mech_bay_power_console
/obj/item/circuitboard/computer/mecha_control
name = "Exosuit Control Console"
greyscale_colors = CIRCUIT_COLOR_SCIENCE
build_path = /obj/machinery/computer/mecha
/obj/item/circuitboard/computer/rdconsole
name = "R&D Console"
greyscale_colors = CIRCUIT_COLOR_SCIENCE
build_path = /obj/machinery/computer/rdconsole
req_access = list(ACCESS_RESEARCH) // Research access is required to toggle the lock.
var/silence_announcements = FALSE
var/locked = TRUE
// An unlocked subtype of the board for mapping.
/obj/item/circuitboard/computer/rdconsole/unlocked
locked = FALSE
/obj/item/circuitboard/computer/rdconsole/examine(mob/user)
. = ..()
. += span_info("The board is configured to [silence_announcements ? "silence" : "announce"] researched nodes on radio.")
. += span_notice("The board mode can be changed with a [EXAMINE_HINT("multitool")].")
. += span_notice("The board is [locked ? "locked" : "unlocked"], and can be [locked ? "unlocked" : "locked"] with an ID that has research access.")
/obj/item/circuitboard/computer/rdconsole/multitool_act(mob/living/user)
. = ..()
if(obj_flags & EMAGGED)
balloon_alert(user, "board mode is broken!")
return
silence_announcements = !silence_announcements
balloon_alert(user, "announcements [silence_announcements ? "enabled" : "disabled"]")
/obj/item/circuitboard/computer/rdconsole/emag_act(mob/user, obj/item/card/emag/emag_card)
if (locked)
locked = FALSE
to_chat(user, span_notice("You magnetically trigger the locking mechanism, causing it to unlock."))
if (obj_flags & EMAGGED)
return FALSE
obj_flags |= EMAGGED
silence_announcements = FALSE
to_chat(user, span_notice("You overload the node announcement chip, forcing every node to be announced on the common channel."))
return TRUE
/obj/item/circuitboard/computer/rdconsole/attackby(obj/item/attacking_item, mob/living/user, list/modifiers, list/attack_modifiers)
if (user.combat_mode || !isidcard(attacking_item))
return ..()
if (check_access(attacking_item))
locked = !locked
balloon_alert(user, locked ? "locked" : "unlocked")
user.visible_message(
message = span_notice("\The [user] unlock[user.p_s()] \the [src] with \the [attacking_item]."),
self_message = span_notice("You unlock \the [src] with \the [attacking_item]."),
blind_message = span_hear("You hear a soft beep."),
)
else
balloon_alert(user, "no access!")
/obj/item/circuitboard/computer/rdservercontrol
name = "R&D Server Control"
greyscale_colors = CIRCUIT_COLOR_SCIENCE
build_path = /obj/machinery/computer/rdservercontrol
/obj/item/circuitboard/computer/research
name = "Research Monitor"
greyscale_colors = CIRCUIT_COLOR_SCIENCE
build_path = /obj/machinery/computer/security/research
/obj/item/circuitboard/computer/robotics
name = "Robotics Control"
greyscale_colors = CIRCUIT_COLOR_SCIENCE
build_path = /obj/machinery/computer/robotics
/obj/item/circuitboard/computer/teleporter
name = "Teleporter"
greyscale_colors = CIRCUIT_COLOR_SCIENCE
build_path = /obj/machinery/computer/teleporter
/obj/item/circuitboard/computer/xenobiology
name = "Xenobiology Console"
greyscale_colors = CIRCUIT_COLOR_SCIENCE
build_path = /obj/machinery/computer/camera_advanced/xenobio
/obj/item/circuitboard/computer/scan_consolenew
name = "DNA Console"
greyscale_colors = CIRCUIT_COLOR_SCIENCE
build_path = /obj/machinery/computer/dna_console
/obj/item/circuitboard/computer/mechpad
name = "Mecha Orbital Pad Console"
greyscale_colors = CIRCUIT_COLOR_SCIENCE
build_path = /obj/machinery/computer/mechpad
//Security
/obj/item/circuitboard/computer/labor_shuttle
name = "Labor Shuttle"
greyscale_colors = CIRCUIT_COLOR_SECURITY
build_path = /obj/machinery/computer/shuttle/labor
/obj/item/circuitboard/computer/labor_shuttle/one_way
name = "Prisoner Shuttle Console"
greyscale_colors = CIRCUIT_COLOR_SECURITY
build_path = /obj/machinery/computer/shuttle/labor/one_way
/obj/item/circuitboard/computer/gulag_teleporter_console
name = "Labor Camp teleporter console"
greyscale_colors = CIRCUIT_COLOR_SECURITY
build_path = /obj/machinery/computer/prisoner/gulag_teleporter_computer
/obj/item/circuitboard/computer/prisoner
name = "Prisoner Management Console"
greyscale_colors = CIRCUIT_COLOR_SECURITY
build_path = /obj/machinery/computer/prisoner/management
/obj/item/circuitboard/computer/secure_data
name = "Security Records Console"
greyscale_colors = CIRCUIT_COLOR_SECURITY
build_path = /obj/machinery/computer/records/security
/obj/item/circuitboard/computer/warrant
name = "Security Warrant Viewer"
greyscale_colors = CIRCUIT_COLOR_SECURITY
build_path = /obj/machinery/computer/warrant
/obj/item/circuitboard/computer/security
name = "Security Cameras"
greyscale_colors = CIRCUIT_COLOR_SECURITY
build_path = /obj/machinery/computer/security
/obj/item/circuitboard/computer/advanced_camera
name = "Advanced Camera Console"
greyscale_colors = CIRCUIT_COLOR_SECURITY
build_path = /obj/machinery/computer/camera_advanced/syndie
//Service
/obj/item/circuitboard/computer/order_console
name = "Produce Orders Console"
greyscale_colors = CIRCUIT_COLOR_SERVICE
build_path = /obj/machinery/computer/order_console/cook
//Supply
/obj/item/circuitboard/computer/cargo
name = "Supply Console"
greyscale_colors = CIRCUIT_COLOR_SUPPLY
build_path = /obj/machinery/computer/cargo
var/contraband = FALSE
/obj/item/circuitboard/computer/cargo/multitool_act(mob/living/user)
. = ..()
if(!(obj_flags & EMAGGED))
contraband = !contraband
to_chat(user, span_notice("Receiver spectrum set to [contraband ? "Broad" : "Standard"]."))
else
to_chat(user, span_alert("The spectrum chip is unresponsive."))
/obj/item/circuitboard/computer/cargo/emag_act(mob/user, obj/item/card/emag/emag_card)
if (obj_flags & EMAGGED)
return FALSE
contraband = TRUE
obj_flags |= EMAGGED
to_chat(user, span_notice("You adjust [src]'s routing and receiver spectrum, unlocking special supplies and contraband."))
return TRUE
/obj/item/circuitboard/computer/cargo/configure_machine(obj/machinery/computer/cargo/machine)
if(!istype(machine))
CRASH("Cargo board attempted to configure incorrect machine type: [machine] ([machine?.type])")
machine.contraband = contraband
if (obj_flags & EMAGGED)
machine.obj_flags |= EMAGGED
else
machine.obj_flags &= ~EMAGGED
/obj/item/circuitboard/computer/cargo/express
name = "Express Supply Console"
build_path = /obj/machinery/computer/cargo/express
/obj/item/circuitboard/computer/cargo/express/emag_act(mob/user, obj/item/card/emag/emag_card)
if (obj_flags & EMAGGED)
return FALSE
contraband = TRUE
obj_flags |= EMAGGED
to_chat(user, span_notice("You change the routing protocols, allowing the Drop Pod to land anywhere on the station."))
return TRUE
/obj/item/circuitboard/computer/cargo/express/multitool_act(mob/living/user)
if (!(obj_flags & EMAGGED))
contraband = !contraband
to_chat(user, span_notice("Receiver spectrum set to [contraband ? "Broad" : "Standard"]."))
return TRUE
else
to_chat(user, span_notice("You reset the destination-routing protocols and receiver spectrum to factory defaults."))
contraband = FALSE
obj_flags &= ~EMAGGED
return TRUE
/obj/item/circuitboard/computer/cargo/request
name = "Supply Request Console"
build_path = /obj/machinery/computer/cargo/request
/obj/item/circuitboard/computer/order_console/mining
name = "Mining Vending Console"
greyscale_colors = CIRCUIT_COLOR_SUPPLY
build_path = /obj/machinery/computer/order_console/mining
/obj/item/circuitboard/computer/order_console/mining/golem
name = "Golem Ship Equipment Vendor Console"
build_path = /obj/machinery/computer/order_console/mining/golem
/obj/item/circuitboard/computer/order_console/bitrunning
name = "Bitrunning Vendor Console"
build_path = /obj/machinery/computer/order_console/bitrunning
/obj/item/circuitboard/computer/ferry
name = "Transport Ferry"
greyscale_colors = CIRCUIT_COLOR_SUPPLY
build_path = /obj/machinery/computer/shuttle/ferry
/obj/item/circuitboard/computer/ferry/request
name = "Transport Ferry Console"
greyscale_colors = CIRCUIT_COLOR_SUPPLY
build_path = /obj/machinery/computer/shuttle/ferry/request
/obj/item/circuitboard/computer/mining
name = "Outpost Status Display"
greyscale_colors = CIRCUIT_COLOR_SUPPLY
build_path = /obj/machinery/computer/security/mining
/obj/item/circuitboard/computer/mining_shuttle
name = "Mining Shuttle"
greyscale_colors = CIRCUIT_COLOR_SUPPLY
build_path = /obj/machinery/computer/shuttle/mining
/obj/item/circuitboard/computer/mining_shuttle/common
name = "Lavaland Shuttle"
build_path = /obj/machinery/computer/shuttle/mining/common
/obj/item/circuitboard/computer/emergency_pod
name = "Emergency Pod Controls"
greyscale_colors = CIRCUIT_COLOR_GENERIC
build_path = /obj/machinery/computer/shuttle/pod
/obj/item/circuitboard/computer/exoscanner_console
name = "Scanner Array Control Console"
build_path = /obj/machinery/computer/exoscanner_control
/obj/item/circuitboard/computer/exodrone_console
name = "Exploration Drone Control Console"
build_path = /obj/machinery/computer/exodrone_control_console
/obj/item/circuitboard/computer/shuttle
var/shuttle_id
/obj/item/circuitboard/computer/shuttle/configure_machine(obj/machinery/machine)
var/obj/docking_port/mobile/custom/shuttle = shuttle_id ? SSshuttle.getShuttle(shuttle_id) : SSshuttle.get_containing_shuttle(machine)
if(!shuttle)
var/on_shuttle_frame = HAS_TRAIT((get_turf(machine)), TRAIT_SHUTTLE_CONSTRUCTION_TURF)
machine.say(on_shuttle_frame ? "Console will automatically link on shuttle completion." : "No shuttle available for linking.")
else if(!istype(shuttle))
machine.say("Cannot link to this kind of shuttle!")
else
machine.connect_to_shuttle(TRUE, shuttle)
/obj/item/circuitboard/computer/shuttle/flight_control
name = "Shuttle Flight Control"
build_path = /obj/machinery/computer/shuttle/custom_shuttle
/obj/item/circuitboard/computer/shuttle/docker
name = "Shuttle Navigation Computer"
build_path = /obj/machinery/computer/camera_advanced/shuttle_docker/custom