mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-31 00:58:26 +01:00
Integrated circuits for modular computers (#80530)
## About The Pull Request This PR integrates circuits for modular computers and a good bits of their programs. The peculiarity here is that modular computers have no fixed amount of unremovable components (except the base one with just a couple ports for now), instead, they're added and removed along with programs. With a few exceptions (such as the messenger and signaler), for these program circuits to work, their associated program has to be either open or in the background. For a reason or another, not all programs have a circuit associated to them, still, however the programs with a circuit are still a handful. They are: - Nanotrasen Pay System - Notepad - SiliConnect - WireCarp - MODsuit Control - Spectre Meter - Direct Messenger* - LifeConnect - Custodial Locator - Fission360 - Camera - Status Display - SignalCommander *By the by, sending messages has a cooldown, so it shouldn't be as spammy. If it turns out to not be enough, I can make it so messages from circuit will be ignored by other messenger circuits. The PR is no longer WIP. ## Why It's Good For The Game I believe modular computers could make for some interesting setups with circuits, since they're fairly flexible and stocked with features unlike many other appliances, therefore also a speck more abusable, though limits, cooldowns, logging and sanitization have been implemented to keep it in check. ## Changelog 🆑 add: Modular Computers now support integrated circuits. What can be done with them depends on the programs installed and whether they're running (open or background). add: Modular Consoles (the machinery) now have a small backup cell they draw power from if the power goes out. /🆑
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
/// Makes an atom a shell that is able to take in an attached circuit.
|
||||
/datum/component/shell
|
||||
dupe_mode = COMPONENT_DUPE_UNIQUE
|
||||
dupe_mode = COMPONENT_DUPE_UNIQUE_PASSARGS
|
||||
|
||||
/// The circuitboard attached to this shell
|
||||
var/obj/item/integrated_circuit/attached_circuit
|
||||
@@ -60,12 +60,15 @@
|
||||
unremovable_circuit_components = list()
|
||||
|
||||
for(var/obj/item/circuit_component/circuit_component as anything in components)
|
||||
if(ispath(circuit_component))
|
||||
circuit_component = new circuit_component()
|
||||
circuit_component.removable = FALSE
|
||||
circuit_component.set_circuit_size(0)
|
||||
RegisterSignal(circuit_component, COMSIG_CIRCUIT_COMPONENT_SAVE, PROC_REF(save_component))
|
||||
unremovable_circuit_components += circuit_component
|
||||
add_unremovable_circuit_component(circuit_component)
|
||||
|
||||
/datum/component/shell/proc/add_unremovable_circuit_component(obj/item/circuit_component/component)
|
||||
if(ispath(component))
|
||||
component = new component()
|
||||
component.removable = FALSE
|
||||
component.set_circuit_size(0)
|
||||
RegisterSignal(component, COMSIG_CIRCUIT_COMPONENT_SAVE, PROC_REF(save_component))
|
||||
unremovable_circuit_components += component
|
||||
|
||||
/datum/component/shell/proc/save_component(datum/source, list/objects)
|
||||
SIGNAL_HANDLER
|
||||
@@ -305,6 +308,7 @@
|
||||
return
|
||||
locked = FALSE
|
||||
attached_circuit = circuitboard
|
||||
SEND_SIGNAL(src, COMSIG_SHELL_CIRCUIT_ATTACHED)
|
||||
if(!(shell_flags & SHELL_FLAG_CIRCUIT_UNREMOVABLE) && !circuitboard.admin_only)
|
||||
RegisterSignal(circuitboard, COMSIG_MOVABLE_MOVED, PROC_REF(on_circuit_moved))
|
||||
if(shell_flags & SHELL_FLAG_REQUIRE_ANCHOR)
|
||||
@@ -348,6 +352,7 @@
|
||||
attached_circuit.remove_component(to_remove)
|
||||
to_remove.moveToNullspace()
|
||||
attached_circuit.set_locked(FALSE)
|
||||
SEND_SIGNAL(src, COMSIG_SHELL_CIRCUIT_REMOVED)
|
||||
attached_circuit = null
|
||||
|
||||
/datum/component/shell/proc/on_atom_usb_cable_try_attach(atom/source, obj/item/usb_cable/usb_cable, mob/user)
|
||||
|
||||
Reference in New Issue
Block a user