Files
Bubberstation/code/modules/modular_computers/computers/item/processor.dm
Ghom f9957b0373 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.
/🆑
2024-01-20 21:21:42 +01:00

59 lines
2.2 KiB
Plaintext

// Held by /obj/machinery/modular_computer to reduce amount of copy-pasted code.
//TODO: REFACTOR THIS SPAGHETTI CODE
/obj/item/modular_computer/processor
name = "processing unit"
desc = "An advanced computer." //modular PCs examine us
icon = null
icon_state = null
icon_state_unpowered = null
icon_state_menu = null
hardware_flag = NONE
internal_cell = /obj/item/stock_parts/cell/crap
///The modular computer MACHINE that hosts us.
var/obj/machinery/modular_computer/machinery_computer
/obj/item/modular_computer/processor/UpdateDisplay()
. = ..()
//update our name to match the computer's
name = machinery_computer.name
/obj/item/modular_computer/processor/Initialize(mapload)
if(!istype(loc, /obj/machinery/modular_computer))
CRASH("A non '/obj/machinery/modular_computer' had a [src] initialized in it!")
// Obtain reference to machinery computer
physical = loc
machinery_computer = loc
machinery_computer.cpu = src
hardware_flag = machinery_computer.hardware_flag
steel_sheet_cost = machinery_computer.steel_sheet_cost
max_idle_programs = machinery_computer.max_idle_programs
update_integrity(machinery_computer.get_integrity())
max_integrity = machinery_computer.max_integrity
integrity_failure = machinery_computer.integrity_failure
base_active_power_usage = machinery_computer.base_active_power_usage
base_idle_power_usage = machinery_computer.base_idle_power_usage
machinery_computer.RegisterSignal(src, COMSIG_ATOM_UPDATED_ICON, TYPE_PROC_REF(/obj/machinery/modular_computer, relay_icon_update)) //when we update_icon, also update the computer
return ..()
/obj/item/modular_computer/processor/Destroy(force)
if(machinery_computer && (machinery_computer.cpu == src))
machinery_computer.cpu = null
machinery_computer.UnregisterSignal(src, COMSIG_ATOM_UPDATED_ICON)
machinery_computer = null
return ..()
/obj/item/modular_computer/processor/use_power(amount = 0, check_programs = TRUE)
var/obj/machinery/machine_holder = physical
if(machine_holder.powered())
machine_holder.use_power(amount)
return TRUE
return ..()
/obj/item/modular_computer/processor/relay_qdel()
qdel(machinery_computer)
/obj/item/modular_computer/processor/get_messenger_ending()
return "Sent from my Desktop"