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

Harpy Rebalance & Content Update 2 #499

Merged
merged 6 commits into from
Dec 6, 2023

Conversation

VMSolidus
Copy link
Contributor

@VMSolidus VMSolidus commented Dec 2, 2023

About the PR

This is both a rebalance, and content update for Harpies. I made this PR primarily as a means of learning how to build Generic Visualizers, which is a skill I require in order to complete PR #479.

Why / Balance

Harpies on-release were missing any mechanical positives. I had at one point intended to make their mechanical positive an increase in movement speed, but at the time did not have access to what I wanted to counterbalance it with. Since Wizden last updated Arachnids, they added in an organ datafield that would let me do this.

In exchange for having the higher base speed, they're picking up a 2x multiplier on breath frequency. Harpies use their extremely high performance Avian lungs to both utilize a Syrinx for speaking, and to power their incredibly light body. The downside of this is quite noticeable for space station life, as a Harpy involved in a spacing needs to constantly monitor their oxygen supply, and will always be worried about where they're going to get their next air refill. Salvage Techs and Nukies are the most affected by this from what I can predict. In both cases, a Harpy Salvager or Nukie will need to strongly consider not spacing their "Workspace".

In testing, I had also determined that Piercing is actually a slight downgrade from Slashing. While resistances to it are a little less common, it also doesn't deal ongoing bleed damage. Security also starts with 50% Piercing resistance, making their armor quite effective against Harpy talons. Still, I have included this as a matter of flavor rather than function, since it helps distinguish the species more. And of course, we have entirely too many species that deal slashing damage melee.

In my testing for their weight changes, I have determined that it takes a standard Human 2 to 4 shoves to push down a Harpy. I tried counting how many shoves it takes a Harpy to push down a Human, and gave up after 65 shoves didn't even budge the human.

Positive Traits

  • Somewhat smaller than humans, but larger than Felinids.
  • Uses their talons to deal Piercing damage
  • Can imitate around 70% of the game's sound library through a huge list of voice emotes
  • They can "Sing" midis by imitating instruments. Right click yourself to select an instrument
  • Has a slightly higher base sprint speed than humans, 5.0 vs. 4.5(an 11% increase), walk speed is unaffected.

Negative Traits

  • Extreme low density, weight set to 90. Harpies weigh less than even Felinids, and exactly half that of a Human.
  • Takes 15% more Blunt, Slash, and Piercing damage
  • Breathes TWICE as much air as a Human. All air tanks last half as long for a Harpy. Beware your 4 minute emergency tanks, and 10 minute full size tanks.

Technical details

This adds an additional pair of checks to the HarpySingerSystem to incorporate a generic Visualizer. Harpies have a sprite layer for their musical notes that is visible: false by default. When a Harpy opens their innate Midi Player, the generic visualizer toggles visibility on their musical notes layer to true. When they close their midi player(or if it is forced to close), it sets the layer visibility to false.

Media

HarpyMusicNotes

Changelog
🆑

  • add: Harpies now have a visual indication when they're playing a Midi.
  • tweak: Harpies have been re-balanced so that they now actually have a numerical positive.

@github-actions github-actions bot added Changes: C# Changes any cs files Changes: Sprite Changes any png or json in an rsi Changes: YML Changes any yml files labels Dec 2, 2023
@VMSolidus VMSolidus marked this pull request as ready for review December 2, 2023 17:28
Copy link
Contributor

github-actions bot commented Dec 2, 2023

RSI Diff Bot; head commit dc94f6f merging into 0d434cd
This PR makes changes to 1 or more RSIs. Here is a summary of all changes:

Resources/Textures/DeltaV/Effects/harpysinger.rsi

State Old New Status
singing_music_notes Added

Edit: diff updated after dc94f6f

Signed-off-by: VMSolidus <[email protected]>
@DebugOk
Copy link
Contributor

DebugOk commented Dec 6, 2023

(Any midi player actually, not just their innate one, the game has no way of telling),

There should be? If not that might be something worth implementing.

When they close their midi player, it sets the layer visibility to false.

When they close it? What about it being forced closed via a shove, going crit or whatever else forced it to close?

@VMSolidus
Copy link
Contributor Author

VMSolidus commented Dec 6, 2023

There should be? If not that might be something worth implementing.

It turns out no, Harpies activate their midi player using the same event as every other source of midi players. I attempted to add a second event to their midi player, but it turns out that adding a second event to an action is impossible, the game simply won't trigger any events after the first one for a given action. Furthermore, there are no actions in the game that utilize more than one event.

When they close it? What about it being forced closed via a shove, going crit or whatever else forced it to close?

A misunderstanding, HarpySingerSystem works by forcing the midi player closed, AND preventing it from being re-opened if any of these stop conditions are met. So checking for when the midi player gets closed is appropriate here.

@DebugOk
Copy link
Contributor

DebugOk commented Dec 6, 2023

You could do instead is add a new component thats added and removed by HarpySingerSystem, and check for that instead. You can subscribe to the ComponentStartup and ComponentShutdown events. It'll add a bit of complexity, but it wont trigger the singing sprites for anything that isn't the actual harpy sing action

@DebugOk
Copy link
Contributor

DebugOk commented Dec 6, 2023

If you cant trust OnInstrumentOpen passing, that'd mean mime harpies cant use any instruments

@VMSolidus
Copy link
Contributor Author

You could do instead is add a new component thats added and removed by HarpySingerSystem, and check for that instead. You can subscribe to the ComponentStartup and ComponentShutdown events. It'll add a bit of complexity, but it wont trigger the singing sprites for anything that isn't the actual harpy sing action

If you cant trust OnInstrumentOpen passing, that'd mean mime harpies cant use any instruments

Okay I have no idea what you're talking about, Mime harpies can still use instruments, they just don't get to use their innate midi player. Their innate action is blocked, but they can still play instruments because they're using an instruments midi player and not their own. HarpySingerSystem is checking for an entity with the HarpySingerComponent that opens a midi player, all the HarpySingerComponent is doing is tricking the server into thinking Harpies are an instrument item,
image

Also this is all now a moot point because I just now realized the mime isn't playing the musical notes with the guitar. Whelp, I guess we're in the clear on that one.

@VMSolidus
Copy link
Contributor Author

image

@DebugOk
Copy link
Contributor

DebugOk commented Dec 6, 2023

You could do instead is add a new component thats added and removed by HarpySingerSystem, and check for that instead. You can subscribe to the ComponentStartup and ComponentShutdown events. It'll add a bit of complexity, but it wont trigger the singing sprites for anything that isn't the actual harpy sing action

If you cant trust OnInstrumentOpen passing, that'd mean mime harpies cant use any instruments

Okay I have no idea what you're talking about, Mime harpies can still use instruments, they just don't get to use their innate midi player. Their innate action is blocked, but they can still play instruments because they're using an instruments midi player and not their own. HarpySingerSystem is checking for an entity with the HarpySingerComponent that opens a midi player, all the HarpySingerComponent is doing is tricking the server into thinking Harpies are an instrument item, image

Also this is all now a moot point because I just now realized the mime isn't playing the musical notes with the guitar. Whelp, I guess we're in the clear on that one.

If that doesn't catch, then cant you just add code to OnInstrumentOpen that adds a new component to the harpy when it has the ui opened via the action?

@VMSolidus
Copy link
Contributor Author

Untitled video - Made with Clipchamp (6)

No what I'm saying is that I was mistaken in assuming this would be a problem, and apparently the problem I thought would be a thing, doesn't actually exist, and that the feature works as intended. Here is a recording of the functionality.

@DebugOk DebugOk merged commit 6730a4f into DeltaV-Station:master Dec 6, 2023
12 checks passed
DeltaV-Bot pushed a commit that referenced this pull request Dec 6, 2023
DebugOk pushed a commit to DebugOk/Delta-v that referenced this pull request Jan 20, 2024
* Harpy Rebalance

* Update meta.json

Signed-off-by: VMSolidus <[email protected]>

* Update harpy.yml

Signed-off-by: VMSolidus <[email protected]>

* revert piercing and also revert felinid melee by request

---------

Signed-off-by: VMSolidus <[email protected]>
(cherry picked from commit 6730a4f)
DebugOk pushed a commit to DebugOk/Delta-v that referenced this pull request Jan 20, 2024
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: Sprite Changes any png or json in an rsi Changes: YML Changes any yml files S: Needs Review
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants