Files
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

140 lines
4.9 KiB
Plaintext

// This file contains all boxes used by the Science department and its purpose on the station.
/obj/item/storage/box/swab
name = "box of microbiological swabs"
desc = "Contains a number of sterile swabs for collecting microbiological samples."
illustration = "swab"
/obj/item/storage/box/swab/PopulateContents()
for(var/i in 1 to 7)
new /obj/item/swab(src)
/obj/item/storage/box/petridish
name = "box of petri dishes"
desc = "This box purports to contain a number of high rim petri dishes."
illustration = "petridish"
/obj/item/storage/box/petridish/PopulateContents()
for(var/i in 1 to 7)
new /obj/item/petri_dish(src)
/obj/item/storage/box/plumbing
name = "box of plumbing supplies"
desc = "Contains a small supply of pipes, water recyclers, and iron to connect to the rest of the station."
//Disk boxes
/obj/item/storage/box/disks
name = "diskette box"
illustration = "disk_kit"
/obj/item/storage/box/disks/PopulateContents()
for(var/i in 1 to 7)
new /obj/item/disk/data(src)
/obj/item/storage/box/monkeycubes
name = "monkey cube box"
desc = "Drymate brand monkey cubes. Just add water!"
icon_state = "monkeycubebox"
illustration = null
custom_price = PAYCHECK_CREW * 2
storage_type = /datum/storage/box/monkey_cube
/// Which type of cube are we spawning in this box?
var/cube_type = /obj/item/food/monkeycube
/obj/item/storage/box/monkeycubes/PopulateContents()
for(var/i in 1 to 5)
new cube_type(src)
/obj/item/storage/box/monkeycubes/syndicate
desc = "Waffle Corp. brand monkey cubes. Just add water and a dash of subterfuge!"
cube_type = /obj/item/food/monkeycube/syndicate
/obj/item/storage/box/monkeycubes/random
name = "monster cube box"
desc = "A box containing a bunch of random cubes. Add water and see what you get!"
cube_type = /obj/item/food/monkeycube/random
/obj/item/storage/box/gorillacubes
name = "gorilla cube box"
desc = "Waffle Corp. brand gorilla cubes. Do not taunt."
icon_state = "monkeycubebox"
illustration = null
storage_type = /datum/storage/box/gorilla_cube_box
/obj/item/storage/box/gorillacubes/PopulateContents()
for(var/i in 1 to 3)
new /obj/item/food/monkeycube/gorilla(src)
/obj/item/storage/box/stockparts/basic //for ruins where it's a bad idea to give access to an autolathe/protolathe, but still want to make stock parts accessible
name = "box of stock parts"
desc = "Contains a variety of basic stock parts."
/obj/item/storage/box/stockparts/basic/PopulateContents()
var/static/items_inside = list(
/obj/item/stock_parts/capacitor = 3,
/obj/item/stock_parts/servo = 3,
/obj/item/stock_parts/matter_bin = 3,
/obj/item/stock_parts/micro_laser = 3,
/obj/item/stock_parts/scanning_module = 3,
)
generate_items_inside(items_inside,src)
/obj/item/storage/box/stockparts/deluxe
name = "box of deluxe stock parts"
desc = "Contains a variety of deluxe stock parts."
icon_state = "syndiebox"
/obj/item/storage/box/stockparts/deluxe/PopulateContents()
var/static/items_inside = list(
/obj/item/stock_parts/capacitor/quadratic = 3,
/obj/item/stock_parts/scanning_module/triphasic = 3,
/obj/item/stock_parts/servo/femto = 3,
/obj/item/stock_parts/micro_laser/quadultra = 3,
/obj/item/stock_parts/matter_bin/bluespace = 3,
)
generate_items_inside(items_inside,src)
/obj/item/storage/box/rndboards
name = "\proper the liberator's legacy"
desc = "A box containing a gift for worthy golems."
illustration = "scicircuit"
/obj/item/storage/box/rndboards/PopulateContents()
new /obj/item/circuitboard/machine/protolathe/offstation(src)
new /obj/item/circuitboard/machine/destructive_analyzer(src)
new /obj/item/circuitboard/machine/circuit_imprinter/offstation(src)
new /obj/item/circuitboard/computer/rdconsole/unlocked(src)
/obj/item/storage/box/stabilized //every single stabilized extract from xenobiology
name = "box of stabilized extracts"
icon_state = "syndiebox"
storage_type = /datum/storage/box/stabilized
/obj/item/storage/box/stabilized/PopulateContents()
var/static/items_inside = list(
/obj/item/slimecross/stabilized/adamantine=1,
/obj/item/slimecross/stabilized/black=1,
/obj/item/slimecross/stabilized/blue=1,
/obj/item/slimecross/stabilized/bluespace=1,
/obj/item/slimecross/stabilized/cerulean=1,
/obj/item/slimecross/stabilized/darkblue=1,
/obj/item/slimecross/stabilized/darkpurple=1,
/obj/item/slimecross/stabilized/gold=1,
/obj/item/slimecross/stabilized/green=1,
/obj/item/slimecross/stabilized/grey=1,
/obj/item/slimecross/stabilized/lightpink=1,
/obj/item/slimecross/stabilized/metal=1,
/obj/item/slimecross/stabilized/oil=1,
/obj/item/slimecross/stabilized/orange=1,
/obj/item/slimecross/stabilized/pink=1,
/obj/item/slimecross/stabilized/purple=1,
/obj/item/slimecross/stabilized/pyrite=1,
/obj/item/slimecross/stabilized/rainbow=1,
/obj/item/slimecross/stabilized/red=1,
/obj/item/slimecross/stabilized/sepia=1,
/obj/item/slimecross/stabilized/silver=1,
/obj/item/slimecross/stabilized/yellow=1,
)
generate_items_inside(items_inside,src)