Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Cherry-Pick "EMP Grenade Actually Sabotages Power" From Wizden #516

Merged
merged 20 commits into from
Aug 6, 2024

Conversation

WarMechanic
Copy link
Contributor

@WarMechanic WarMechanic commented Jul 6, 2024

About the PR

EMP has been changed to target APC-powered-devices (most electrical devices) as well as batteries to disable them. This means EMP can interfere with autolathes, airlocks, atmos devices, substations and SMES. The power draw of a single EMP grenade now cuts out a substation, and the disabling effect prevents further recharge until it subsides.

EMP duration now also stacks, which creates a novel way to quietly black out the station by attacking engineering SMES with 3 EMP grenades (6tc EMP bundle) to black out the station for 3 minutes.

Edit, here's a detailed changelog of the PR,
Functionality:

  • EMP disable has been generalised to kill and prevent further function of every device/battery by interrupting recharge
  • As a result of the above, some hard coded interactions have been culled
  • EMP disable duration now stacks with multiple EMP blasts
  • EMP is now capable of draining from gravity generators
  • The Charger system has been slightly reworked to facilitate communication between batteries and chargers

Results:

  • EMP grenade can disable basically every powered machine, most notably doors
  • EMP grenade has had its power drain upped to 2.7MW, which is slightly more than a substation and 1/3 a SMES
  • EMP grenade can now instantly kill substations
  • EMP grenade can now instantly kill gravity generators
  • 3 EMP grenades (6tc) can be used to kill SMES and disable recharge for 3 minutes with no evidence on the power monitor.

Why / Balance

EMP at 2tc has a relatively low value-proposition when compared to C4 which is also 2tc. While EMP can probably black out one (or two if you're lucky) APCs and can be used as a defensive option against Stun/Lasers. C4 can be used to cut wires, substations, SMES, generators, doors, reinforced walls, people and the list probably continues.

New EMP can be used to soft-bomb station power in an explosion that isn't globally alarming (salv boom). Targeting the captain's office directly may let you crowbar in and steal the locker but it leaves ephemeral evidence in the form of everything electrical shimmering blue. Opting to bomb substations blacks out a wider area, providing several degrees of separation from your target. That is to say, new EMP grenade favours map knowledge and rewards better stealth.

Technical details

  • C.S/.../EmpSystem.cs uses TryComp to turn on/off charging for C.S/Power/Components/PowerNetworkBatteryComponent
  • C.S/Power/EntitySystems/PowerReceiverSystem.cs listens to EmpPulseEvent to turn off. Requests to turn back on are additionally intercepted by EmpSystem.cs and cancelled.
  • C.S/.../GravityGeneratorSystem.cs listens to EmpPulseEvent and converts energy consumption to a normalised charge
  • C.S/Power/EntitySystems/ApcSystem.cs no longer toggles its breaker, but still listens to EmpPulseEvent for updating visuals.
  • C.S/Power/EntitySystems/ChargerSystem.cs was refactored to add a ChargingComponent flag to power cells instead of ActiveCharger on itself. Battery and Charger communicate through this flag. Listens to EmpPulseEvent for updating its state machine. New ChargerUpdateStatusEvent allows batteries to update the charger's status.
  • C.S/Power/EntitySystems/BatterySystem.cs can now be disabled, and checks for disabling before updating its charge. Raises ChargerUpdateStatusEvent when hearing EmpDisabledRemoved to tell its charger to start charging again.
  • C.S/Power/PowerWireAction.cs checks for EmpDisabledComponent before turning power back on.
  • C.S/SurveillanceCamera/Systems/SurveillanceCameraSystem.cs and C.S/VendingMachines/VendingMachineSystem.cs had redundant EmpPulseEvent listeners culled.
  • Resources/Prototypes/Entities/Objects/Weapons/Throwable/grenades.yml buffed EMP grenade.

Media

https://www.youtube.com/embed/rSVph6OIg1s?si=8o4bx9Vx16B6usuu - outdated video demonstrating changes on a wizden map
https://www.youtube.com/embed/B3iPhLcfs-0?si=trB1HY2ccjMf96Bj - electrical anomaly crit with updated emp

  • I have added screenshots/videos to this PR showcasing its changes ingame, or this PR does not require an ingame showcase

Changelog

🆑

  • tweak: EMP Grenades can now disable basically any electrical device, and stack in disable duration.

@github-actions github-actions bot added Changes: C# Changes any cs files Changes: YML Changes any yml files labels Jul 6, 2024
@SimpleStation14 SimpleStation14 changed the title Cherry-pick "EMP grenade actually sabotages power" from upstream Cherry-Pick "EMP Grenade Actually Sabotages Power" From Upstream Jul 6, 2024
@WarMechanic
Copy link
Contributor Author

argh i hate ubuntu latest test

@stellar-novas
Copy link
Contributor

tbf, it is just the normal debug build, all the tests runn on ubuntu latest

@VMSolidus
Copy link
Member

argh i hate ubuntu latest test

One of the known false negatives, yea.

@FoxxoTrystan
Copy link
Member

FoxxoTrystan commented Jul 9, 2024

"We are upstream, please call them wizden"

But other then that, nice.
Also holy hell the details on the PR, good job.

@WarMechanic WarMechanic changed the title Cherry-Pick "EMP Grenade Actually Sabotages Power" From Upstream Cherry-Pick "EMP Grenade Actually Sabotages Power" From Wizden Jul 9, 2024
@github-actions github-actions bot added the Status: Merge Conflict FIX YOUR PR AAAGH label Jul 20, 2024
Copy link
Contributor

This pull request has conflicts, please resolve those before we can evaluate the pull request.

@github-actions github-actions bot removed the Status: Merge Conflict FIX YOUR PR AAAGH label Jul 29, 2024
@VMSolidus VMSolidus merged commit 93ece39 into Simple-Station:master Aug 6, 2024
11 checks passed
SimpleStation14 added a commit that referenced this pull request Aug 6, 2024
Mnemotechnician added a commit to Mnemotechnician/Einstein-Engines that referenced this pull request Sep 8, 2024
DEATHB4DEFEAT pushed a commit that referenced this pull request Sep 14, 2024
# Description
- Resolves #864 by partially reverting #516 
- Adds a _net.IsClient check to RehydratableSystem to avoid spawning
duplicate entities on client side

<details><summary><h1>Media</h1></summary>
<p>


https://github.com/user-attachments/assets/e50785a6-b5f7-4484-9097-118bc3a5dfa5


</p>
</details>

---

# Changelog
:cl:
- fix: Cyborg recharging stations finally work again.
- fix: Rehydratable entities (such as monkey cubes) no longer spawn a
second client-side entity when rehydrated.

---------

Signed-off-by: Mnemotechnican <[email protected]>
Co-authored-by: VMSolidus <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Changes: C# Changes any cs files Changes: YML Changes any yml files Status: Needs Review Someone please review this
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants