mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2025-12-16 04:34:21 +00:00
<!-- Write **BELOW** The Headers and **ABOVE** The comments else it may not be viewable. --> <!-- You can view Contributing.MD for a detailed description of the pull request process. --> ## About The Pull Request This PR adds a reagent injector component that's exclusive to BCIs. (Requested to be integrated into BCIs by Mothblocks.) When outside of a circuit, the component itself stores the reagents. However, if it's inside of a BCI, the storage is moved to the BCI. The storage can contain up to 15u of reagents and acts like an open container. (However, it won't spill even if you throw it, it just acts like an open container code-wise, don't worry about it.) You can only have one reagent injector in a circuit. Trying to insert multiple will give you an error message. The entire dose is administered at once. (Requirement set by Mothblocks.) Please don't try to dispute any of the specific limitations in the comments as they're out of my control. They're reasonable anyways. Reagent Injector Input/Output: Inject (Input Signal) - Administers all reagents currently stored inside of the BCI into the user. Injected (Output Signal) - Triggered when reagents are injected. Not triggered if the reagent storage is empty. New BCI Input: Show Charge Meter (Number) - Toggles showing the charge meter action. (Adds some capacity for stealth.) Install Detector Outputs: (Added following a comment about having to use weird workarounds for proper loops.) Current State (Number) - Outputs 1 if the BCI is implanted and 0 if it's not. Installed (Signal) - Triggered when the BCI is implanted into it's user. Removed (Signal) - Triggered when the BCI is removed from it's user. This PR also adds BCI manipulation chambers to all currently present circuit labs. (Solution proposed by Mothblocks.) Yes I had to do some other mapping changes to allow for this. No I don't have any mapping experience, why do you ask? <!-- Describe The Pull Request. Please be sure every change is documented or this can delay review and even discourage maintainers from merging your PR! --> ## Why It's Good For The Game One small step for BCIs, one giant leap for circuit kind. (First "proper" circuit to human interaction in the entire game!) This allows for some funky stuff and also makes it less of a pain in the ass to use BCIs. What's not to love? <!-- Argue for the merits of your changes and how they benefit the game, especially if they are controversial and/or far reaching. If you can't actually explain WHY what you are doing will improve the game, then it probably isn't good for the game in the first place. --> ## Changelog <!-- If your PR modifies aspects of the game that can be concretely observed by players or admins you should add a changelog. If your change does NOT meet this description, remove this section. Be sure to properly mark your PRs to prevent unnecessary GBP loss. You can read up on GBP and it's effects on PRs in the tgstation guides for contributors. Please note that maintainers freely reserve the right to remove and add tags should they deem it appropriate. You can attempt to finagle the system all you want, but it's best to shoot for clear communication right off the bat. --> 🆑 add: Added a reagent injector component and BCI manipulators to all circuit labs. (+ install detector component) /🆑 <!-- Both 🆑's are required for the changelog to work! You can put your name to the right of the first 🆑 if you want to overwrite your GitHub username as author ingame. --> <!-- You can use multiple of the same prefix (they're only used for the icon ingame) and delete the unneeded ones. Despite some of the tags, changelogs should generally represent how a player might be affected by the changes rather than a summary of the PR's contents. --> Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
51 lines
1.6 KiB
Plaintext
51 lines
1.6 KiB
Plaintext
/**
|
|
* # Install Detector Component
|
|
*
|
|
* Detects when a BCI is installed/removed.
|
|
* Requires a BCI shell.
|
|
*/
|
|
|
|
/obj/item/circuit_component/install_detector
|
|
display_name = "Install Detector"
|
|
desc = "A component that detects when a BCI is installed or removed from its user."
|
|
category = "BCI"
|
|
|
|
required_shells = list(/obj/item/organ/internal/cyberimp/bci)
|
|
|
|
var/datum/port/output/implanted
|
|
var/datum/port/output/removed
|
|
var/datum/port/output/current_state
|
|
|
|
var/obj/item/organ/internal/cyberimp/bci/bci
|
|
|
|
/obj/item/circuit_component/install_detector/populate_ports()
|
|
. = ..()
|
|
current_state = add_output_port("Current State", PORT_TYPE_NUMBER)
|
|
implanted = add_output_port("Implanted", PORT_TYPE_SIGNAL)
|
|
removed = add_output_port("Removed", PORT_TYPE_SIGNAL)
|
|
|
|
/obj/item/circuit_component/install_detector/register_shell(atom/movable/shell)
|
|
. = ..()
|
|
if(istype(shell, /obj/item/organ/internal/cyberimp/bci))
|
|
bci = shell
|
|
RegisterSignal(shell, COMSIG_ORGAN_IMPLANTED, PROC_REF(on_organ_implanted))
|
|
RegisterSignal(shell, COMSIG_ORGAN_REMOVED, PROC_REF(on_organ_removed))
|
|
|
|
/obj/item/circuit_component/install_detector/unregister_shell(atom/movable/shell)
|
|
. = ..()
|
|
bci = null
|
|
UnregisterSignal(shell, list(
|
|
COMSIG_ORGAN_IMPLANTED,
|
|
COMSIG_ORGAN_REMOVED,
|
|
))
|
|
|
|
/obj/item/circuit_component/install_detector/proc/on_organ_implanted(datum/source, mob/living/carbon/owner)
|
|
SIGNAL_HANDLER
|
|
current_state.set_output(TRUE)
|
|
implanted.set_output(COMPONENT_SIGNAL)
|
|
|
|
/obj/item/circuit_component/install_detector/proc/on_organ_removed(datum/source, mob/living/carbon/owner)
|
|
SIGNAL_HANDLER
|
|
current_state.set_output(FALSE)
|
|
removed.set_output(COMPONENT_SIGNAL)
|