Files
Bubberstation/code/modules/research/techweb/nodes/engi_nodes.dm
Hatterhat d60765bf89 Portable SMESes (as "inspired" by /vg/station) (#85732)
## About The Pull Request

![image](https://github.com/user-attachments/assets/7fcedc40-a24f-43cc-aeda-7ac43af6ef11)

Adds the **portable power storage unit** (5 megacells and cable) and the
**power connector** (1 capacitor and cable), a two-part system for power
storage that, together, are functionally identical to a standard SMES
(with the ability to switch out the part that actually holds power).
It's on the same research node as the SMES itself.

Original idea and power connector sprite taken and slightly modified
from vgstation-coders/vgstation13#4555.

**The power connector is useless without the portable SMES and
vice-versa.**
<details><summary>How does it work?</summary>

The **power connector** (on the left) is set up like any other regular
SMES, but is functionally useless without a connected power unit. The
capacitor decides maximum power transfer rate.

The **portable power storage unit** (in the middle) is the part that
actually holds power, taking five megacells (power capacity scales
appropriate to cell capacity). It's functionally useless without a
connected port, as it can't interact with powernets in any way on its
own.

To actually use both of these, after wiring up the power connector
appropriately (as any other SMES), wrench the portable storage unit to
the connector; the connector acts like a regular SMES, charging and
discharging the portable unit in lieu of charging/discharging itself. If
necessary, you can disconnect the portable unit afterwards, and bring it
elsewhere with an assembled power connector.

Disconnecting the portable storage unit in the same way you connected it
(with a wrench) disables input and output on the connector, requiring
the user to re-enable the controls after connecting another portable
storage unit.
</details>

Also breaks up SMES attackby into different tool_acts. 

## Why It's Good For The Game
I think it could be neat for things like Lavaland field bases or
player-built mini-stations; instead of building power generation
on-site, you could charge a portable SMES and bring it over. Or you
could set it up as a power reserve in the event engineering explodes.
Sure, you could argue that someone could just build and rebuild a SMES
or switch out the cells in it a bunch, but lugging around a whole thing
feels cooler.

## Changelog

🆑
add: Portable power storage units and power connectors! Under the same
research node as regular power storage units, and not mapped in
anywhere. Build a connector and portable unit, wire the connector like a
regular SMES, wrench the portable unit onto the connector, unwrench as
needed.
code: SMES attackby was broken up into several tool_acts instead of a
big attackby chain. If something stops working in regards to using tools
on SMESes, please file a bug report.
/🆑

---------

Co-authored-by: Hatterhat <Hatterhat@users.noreply.github.com>
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
2024-10-02 11:04:46 +00:00

244 lines
6.8 KiB
Plaintext

// Parts root node
/datum/techweb_node/parts
id = TECHWEB_NODE_PARTS
starting_node = TRUE
display_name = "Essential Stock Parts"
description = "Foundational components that form the backbone of station operations, encompassing a range of essential equipment necessary for day-to-day functionality."
design_ids = list(
"micro_servo",
"basic_battery",
"basic_capacitor",
"basic_cell",
"basic_matter_bin",
"basic_micro_laser",
"basic_scanning",
"high_battery",
"high_cell",
"miniature_power_cell",
"condenser",
"igniter",
"infrared_emitter",
"prox_sensor",
"signaler",
"timer",
"voice_analyzer",
"health_sensor",
"sflash",
)
/datum/techweb_node/parts_upg
id = TECHWEB_NODE_PARTS_UPG
display_name = "Upgraded Parts"
description = "Offering enhanced capabilities beyond their basic counterparts."
prereq_ids = list(TECHWEB_NODE_PARTS, TECHWEB_NODE_ENERGY_MANIPULATION)
design_ids = list(
"rped",
"high_micro_laser",
"adv_capacitor",
"nano_servo",
"adv_matter_bin",
"adv_scanning",
"super_battery",
"super_cell",
)
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS)
announce_channels = list(RADIO_CHANNEL_ENGINEERING)
/datum/techweb_node/parts_adv
id = TECHWEB_NODE_PARTS_ADV
display_name = "Advanced Parts"
description = "The most finely tuned and accurate stock parts."
prereq_ids = list(TECHWEB_NODE_PARTS_UPG)
design_ids = list(
"ultra_micro_laser",
"super_capacitor",
"pico_servo",
"super_matter_bin",
"phasic_scanning",
"hyper_battery",
"hyper_cell",
)
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS)
required_experiments = list(/datum/experiment/scanning/points/machinery_tiered_scan/tier2_any)
announce_channels = list(RADIO_CHANNEL_ENGINEERING)
/datum/techweb_node/parts_bluespace
id = TECHWEB_NODE_PARTS_BLUESPACE
display_name = "Bluespace Parts"
description = "Integrating the latest in bluespace technology, these advanced components not only enhance functionality but also open up new possibilities for the station's technological capabilities."
prereq_ids = list(TECHWEB_NODE_PARTS_ADV, TECHWEB_NODE_BLUESPACE_TRAVEL)
design_ids = list(
"bs_rped",
"quadultra_micro_laser",
"quadratic_capacitor",
"femto_servo",
"bluespace_matter_bin",
"triphasic_scanning",
"bluespace_battery",
"bluespace_cell",
)
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS)
discount_experiments = list(/datum/experiment/scanning/points/machinery_tiered_scan/tier3_any = TECHWEB_TIER_4_POINTS)
announce_channels = list(RADIO_CHANNEL_ENGINEERING)
/datum/techweb_node/telecomms
id = TECHWEB_NODE_TELECOMS
display_name = "Telecommunications Technology"
description = "A comprehensive suite of machinery for station-wide communication setups, ensuring seamless connectivity and operational coordination."
prereq_ids = list(TECHWEB_NODE_PARTS_BLUESPACE)
design_ids = list(
"comm_monitor",
"comm_server",
"message_monitor",
"ntnet_relay",
"s_hub",
"s_messaging",
"s_server",
"s_processor",
"s_relay",
"s_bus",
"s_broadcaster",
"s_receiver",
"s_amplifier",
"s_analyzer",
"s_ansible",
"s_crystal",
"s_filter",
"s_transmitter",
"s_treatment",
)
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_5_POINTS)
// Engineering root node
/datum/techweb_node/construction
id = TECHWEB_NODE_CONSTRUCTION
starting_node = TRUE
display_name = "Construction"
description = "Tools and essential machinery used for station maintenance and expansion."
design_ids = list(
"circuit_imprinter_offstation",
"circuit_imprinter",
"solarcontrol",
"solar_panel",
"solar_tracker",
"power_control",
"airalarm_electronics",
"airlock_board",
"firealarm_electronics",
"firelock_board",
"trapdoor_electronics",
"blast",
"big_manipulator",
"tile_sprayer",
"airlock_painter",
"decal_painter",
"rwd",
"cable_coil",
"welding_helmet",
"welding_tool",
"tscanner",
"analyzer",
"multitool",
"wrench",
"crowbar",
"screwdriver",
"wirecutters",
"light_bulb",
"light_tube",
"crossing_signal",
"guideway_sensor",
"manuunloader",
"manusmelter",
"manucrusher",
"manucrafter",
"manulathe",
"manusorter",
"manurouter",
)
/datum/techweb_node/energy_manipulation
id = TECHWEB_NODE_ENERGY_MANIPULATION
display_name = "Energy Manipulation"
description = "Harnessing the raw power of lightning arcs through sophisticated energy control methods."
prereq_ids = list(TECHWEB_NODE_CONSTRUCTION)
design_ids = list(
"apc_control",
"powermonitor",
"smes",
"portable_smes",
"power_connector",
"emitter",
"grounding_rod",
"tesla_coil",
"cell_charger",
"recharger",
"inducer",
"inducerengi",
"welding_goggles",
"tray_goggles",
)
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_1_POINTS)
announce_channels = list(RADIO_CHANNEL_ENGINEERING)
/datum/techweb_node/holographics
id = TECHWEB_NODE_HOLOGRAPHICS
display_name = "Holographics"
description = "Use of holographic technology for signage and barriers."
prereq_ids = list(TECHWEB_NODE_ENERGY_MANIPULATION)
design_ids = list(
"forcefield_projector",
"holosign",
"holosignsec",
"holosignengi",
"holosignatmos",
"holosignrestaurant",
"holosignbar",
"holobarrier_jani",
"holobarrier_med",
"holopad",
"vendatray",
"holodisk",
"modular_shield_generator",
"modular_shield_node",
"modular_shield_relay",
"modular_shield_charger",
"modular_shield_well",
)
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS)
/datum/techweb_node/hud
id = TECHWEB_NODE_HUD
display_name = "Integrated HUDs"
description = "Initially developed for assistants to learn the nuances of different professions through augmented reality."
prereq_ids = list(TECHWEB_NODE_HOLOGRAPHICS, TECHWEB_NODE_CYBER_IMPLANTS)
design_ids = list(
"health_hud",
"diagnostic_hud",
"security_hud",
"mod_visor_medhud",
"mod_visor_diaghud",
"mod_visor_sechud",
"ci-medhud",
"ci-diaghud",
"ci-sechud",
)
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_3_POINTS)
announce_channels = list(RADIO_CHANNEL_ENGINEERING, RADIO_CHANNEL_SECURITY, RADIO_CHANNEL_SCIENCE, RADIO_CHANNEL_MEDICAL)
/datum/techweb_node/night_vision
id = TECHWEB_NODE_NIGHT_VISION
display_name = "Night Vision Technology"
description = "There are whispers that Nanotrasen pushed for this technology to extend shift durations, ensuring productivity around the clock."
prereq_ids = list(TECHWEB_NODE_HUD)
design_ids = list(
"diagnostic_hud_night",
"health_hud_night",
"night_visision_goggles",
"nvgmesons",
"nv_scigoggles",
"security_hud_night",
)
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_4_POINTS)
announce_channels = list(RADIO_CHANNEL_ENGINEERING, RADIO_CHANNEL_SECURITY, RADIO_CHANNEL_SCIENCE, RADIO_CHANNEL_MEDICAL)