Files
Bubberstation/code/__DEFINES/modular_computer.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

138 lines
5.1 KiB
Plaintext

/**
* can_run_on_flags bitflags
* Used by programs to tell what type of ModPC it can run on.
* Everything a program can run on needs valid icons for each individual one.
*/
///Runs on everything.
#define PROGRAM_ALL ALL
///Can run on Modular PC Consoles
#define PROGRAM_CONSOLE (1<<0)
///Can run on Laptops.
#define PROGRAM_LAPTOP (1<<1)
///Can run on PDAs.
#define PROGRAM_PDA (1<<2)
/**
* program_flags
* Used by programs to tell the ModPC any special functions it has.
*/
///If the program requires NTNet to be online for it to work.
#define PROGRAM_REQUIRES_NTNET (1<<0)
///The program can be downloaded from the default NTNet downloader store.
#define PROGRAM_ON_NTNET_STORE (1<<1)
///The program can only be downloaded from the Syndinet store, usually nukie/emagged pda.
#define PROGRAM_ON_SYNDINET_STORE (1<<2)
///The program is unique and will delete itself upon being transferred to ensure only one copy exists.
#define PROGRAM_UNIQUE_COPY (1<<3)
///The program is a header and will show up at the top of the ModPC's UI.
#define PROGRAM_HEADER (1<<4)
///The program will run despite the ModPC not having any power in it.
#define PROGRAM_RUNS_WITHOUT_POWER (1<<5)
///The circuit ports of this program can be triggered even if the program is not open
#define PROGRAM_CIRCUITS_RUN_WHEN_CLOSED (1<<6)
//Program categories
#define PROGRAM_CATEGORY_DEVICE "Device Tools"
#define PROGRAM_CATEGORY_EQUIPMENT "Equipment"
#define PROGRAM_CATEGORY_GAMES "Games"
#define PROGRAM_CATEGORY_SECURITY "Security & Records"
#define PROGRAM_CATEGORY_ENGINEERING "Engineering"
#define PROGRAM_CATEGORY_SUPPLY "Supply"
#define PROGRAM_CATEGORY_SCIENCE "Science"
///The default amount a program should take in cell use.
#define PROGRAM_BASIC_CELL_USE 15
///This app grants a minor protection against being PDA bombed if installed.
///(can sometimes prevent it from being sent, while wasting a PDA bomb from the sender).
#define DETOMATIX_RESIST_MINOR 1
///This app grants a larger protection against being PDA bombed if installed.
///(can sometimes prevent it from being sent, while wasting a PDA bomb from the sender).
#define DETOMATIX_RESIST_MAJOR 2
///This app gives a diminished protection against being PDA bombed if installed.
#define DETOMATIX_RESIST_MALUS -4
/**
* NTNet transfer speeds, used when downloading/uploading a file/program.
* The define is how fast it will download an app every program's process_tick.
*/
///Used for wireless devices with low signal.
#define NTNETSPEED_LOWSIGNAL 0.5
///Used for wireless devices with high signal.
#define NTNETSPEED_HIGHSIGNAL 1
///Used for laptops with a high signal, or computers, which is connected regardless of z level.
#define NTNETSPEED_ETHERNET 2
/**
* NTNet connection signals
* Used to calculate the defines above from NTNet Downloader, this is how
* good a ModPC's signal is.
*/
///When you're away from the station/mining base and not on a console, you can't access the internet.
#define NTNET_NO_SIGNAL 0
///Low signal, so away from the station, but still connected
#define NTNET_LOW_SIGNAL 1
///On station with good signal.
#define NTNET_GOOD_SIGNAL 2
///Using a Computer or Laptop with good signal, ethernet-connected.
#define NTNET_ETHERNET_SIGNAL 3
/// The default ringtone of the Messenger app.
#define MESSENGER_RINGTONE_DEFAULT "beep"
/// The maximum length of the ringtone of the Messenger app.
#define MESSENGER_RINGTONE_MAX_LENGTH 20
/**
* PDA Themes
* For these to work, the defines must be defined in tgui/styles/themes/[define].scss
*/
///Default NtOS PDA theme
#define PDA_THEME_NTOS "ntos"
#define PDA_THEME_DARK_MODE "ntos_darkmode"
#define PDA_THEME_RETRO "ntOS95"
#define PDA_THEME_SYNTH "ntos_synth"
#define PDA_THEME_TERMINAL "ntos_terminal"
///Emagged/Syndicate NtOS (SyndiOS) PDA theme
#define PDA_THEME_SYNDICATE "syndicate"
//Maintenance-loot themes
#define PDA_THEME_CAT "ntos_cat"
#define PDA_THEME_LIGHT_MODE "ntos_lightmode"
#define PDA_THEME_SPOOKY "ntos_spooky"
//Defines for the names of all the themes
#define PDA_THEME_NTOS_NAME "NtOS"
#define PDA_THEME_DARK_MODE_NAME "NtOS Dark Mode"
#define PDA_THEME_RETRO_NAME "Retro"
#define PDA_THEME_SYNTH_NAME "Synth"
#define PDA_THEME_TERMINAL_NAME "Terminal"
#define SYNDICATE_THEME_NAME "Syndicate"
#define CAT_THEME_NAME "Cat"
#define LIGHT_THEME_NAME "NtOS Light Mode"
#define ELDRITCH_THEME_NAME "Eldritch"
///List of PDA themes that are accessible to everyone by default.
GLOBAL_LIST_INIT(default_pda_themes, list(
PDA_THEME_NTOS_NAME = PDA_THEME_NTOS,
PDA_THEME_DARK_MODE_NAME = PDA_THEME_DARK_MODE,
PDA_THEME_RETRO_NAME = PDA_THEME_RETRO,
PDA_THEME_SYNTH_NAME = PDA_THEME_SYNTH,
PDA_THEME_TERMINAL_NAME = PDA_THEME_TERMINAL,
))
///List of PDA themes that are accessible to everyone by default.
GLOBAL_LIST_INIT(pda_name_to_theme, list(
PDA_THEME_NTOS_NAME = PDA_THEME_NTOS,
PDA_THEME_DARK_MODE_NAME = PDA_THEME_DARK_MODE,
PDA_THEME_RETRO_NAME = PDA_THEME_RETRO,
PDA_THEME_SYNTH_NAME = PDA_THEME_SYNTH,
PDA_THEME_TERMINAL_NAME = PDA_THEME_TERMINAL,
SYNDICATE_THEME_NAME = PDA_THEME_SYNDICATE,
CAT_THEME_NAME = PDA_THEME_CAT,
LIGHT_THEME_NAME = PDA_THEME_LIGHT_MODE,
ELDRITCH_THEME_NAME = PDA_THEME_SPOOKY,
))