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

Changeling devour and transform #34002

Draft
wants to merge 24 commits into
base: master
Choose a base branch
from

Conversation

poklj
Copy link
Contributor

@poklj poklj commented Dec 22, 2024

About the PR

Adds Changelings Devour and Transform Componentry and Systems to Achieve what is set out in The Changeling Doc

With the new components and Systems a Player is able to Consume Other humanoids for their Identities to later Assume their visage, speaking and all things that make up them.

Why / Balance

Followed https://docs.spacestation14.com/en/space-station-14/round-flow/proposals/changeling.html directly.

Assumptions made not defined within the doc:
Devour can be used on a living being
Devour does 25 damage per second after windup (10/10/5 slash/pierce/blunt)

Double pressing the transform button will transform into the last Identity Consumed

Fingerprints are the Tell for changelings, While everything from their Gender, DNA, TypingBubble, voice descriptor are changed, their Fingerprints will always be the original Identities prints

Technical details

Added ChangelingTransformComponent and System for controlling Transformation
Added ChangelingDevourComponent and System for managing the action of Consuming people
Added ChangelingIdentityComponent and System for Storing references to Consumed Identities and managing aspects that require additional functionality for devouring and Consuming (like spawning clone's of victims into nullspace as well as assisting with Pvs)

Identities when consumed are stored in nullspace via the HumanoidAppearanceComponent's Clone appearance function, and are paused. These entities will be Forced Into the PVS of the changeling so that later when the Transform Ui is utilized, these entities can be used to show the sprites of the identity.

During transform all information is transferred from these nullspace entities onto the acting entity.

Media

lingdemo1.mp4

Requirements

Breaking changes

Moved DNA into Shared
Moved HumanoidAppearanceComponent::CloneAppearance into Shared

TODO:

  • Replace all Wehs with appropriate sound cues
    • Devour Windup (2 seconds)
    • Devour Attempt (10 seconds)
      • Discuss the Slurp noise: keep it, Make it a wilhelm chance or an april fools revert
    • Transform Attempt (5 seconds)
  • Discuss/get guidance on how Husking should behave
    • Preliminary implementation on Husking
  • Discuss/get guidance on how Transform limitations should behave (if at all, can possibly be left for a future PR)
  • Replace the giant Tr with a bespoke Transform Action sprite
  • Replace the Devour Action sprite with a Bespoke sprite
    • Devour off
    • Devour on

Changelog

No CL No Fun (yet)

poklj added 15 commits November 28, 2024 19:39
Create Devour componentry, preliminary identity storage and the systems
for Devouring
- added the radial menu, it has nothing in it.

- trying to get it to populate. the event under the event is broken,
i don't know why, but apparently it's not typed right

- Added a placeholder transform

- oh also fixed up some devour stuff and moved some things around.
- Move DnaComponent into Shared because we need it for the DNA cloning

- Make Transform MOSTLY work on the LAST identity devoured.

- Fix some issues on devour that involved prediction, canceling and
Damage exeucting (Thanks Plykiya for pointing out AttemptFrequency!)
Add check to add a wagging component on the Changeling if the victim's
species Prototype had one.

attempt to add the Damage mitigation check
- Nullspaced a clone of a victim

- fix audio using server virtualized Pvs (i hate this)

- fix the mispredicted doafters

- Clean up a wholelotta code

- utilize clone systems to clone appearances

- Move CloneAppearance from server to shared So we can actually access
it
- make rotting prevent the action

- Add ripping of clothing (guh why is it also server)

- add some System stuff for pushing husked corpse inspection

- clean up more badcode
- Utilize Relayed events for Devour checking

- Get a UI that partially works, Says the name of identities, doesn't
show their looks

- Make use of the New Dynamic BUI assignment

- commit the sin of no client prediction cause nullspace entities aren't
networked
- Get the UI to see the net entity in pause space by using a
ViewSubscriber to get the Pvs from the initially stored identity entity

- Remove all the other parts used to try to get this to work before hand
- Change FancyWindow to Radial

- Fix Issue where coeffeient checking was the wrong way round
- cleaned up event variables that are not needed

- Removed the use of a Pause space and go back to Nullspace usage

- use a PvsOverride rather than ViewSharing

- Remove old commented out code and Lots of unused code
- some minor cleanup

- don't start the entities that get cloned
- add replace functionality to TypingIndicatorSystem and
BodyEmotesSystem

- add placeholder sounds and functions to TransformBodyEmotes

- add extra Pvs handling for later use

- attributions for the funny straw sound

- Sound collections for all of the sounds

- various cleanups
- Bubbles now transfer on spawned humans rather than used humans

- Clean up YET MORE CODE

- make it so you can't eat yourself
@github-actions github-actions bot added size/L Denotes a PR that changes 1000-4999 lines. S: Untriaged Status: Indicates an item has not been triaged and doesn't have appropriate labels. Changes: UI Changes: Might require knowledge of UI design or code. Changes: Sprites Changes: Might require knowledge of spriting or visual design. Changes: Audio Changes: Might require knowledge of audio. and removed S: Untriaged Status: Indicates an item has not been triaged and doesn't have appropriate labels. labels Dec 22, 2024
Copy link
Contributor

github-actions bot commented Dec 22, 2024

RSI Diff Bot; head commit 59883bc merging into 7d0b135
This PR makes changes to 1 or more RSIs. Here is a summary of all changes:

Resources/Textures/Interface/Actions/changeling.rsi

State Old New Status
armblade Added
devour Added
devour_on Added
transform Added

Edit: diff updated after 59883bc

@poklj poklj changed the title Changeling devour transform Changeling devour and transform Dec 22, 2024
@beck-thompson beck-thompson added P2: Raised Priority: Item has a raised priority, indicating it might get increased maintainer attention. T: New Feature Type: New feature or content, or extending existing content D2: Medium Difficulty: A good amount of codebase knowledge required. S: Needs Review Status: Requires additional reviews before being fully accepted A: Character/Species Area: Player characters and species features and content. A: Roundflow/Antag Area: Roundflow - "What happens in the game", including antagonist roles and their capabilities labels Dec 22, 2024
- Husking now will be prevented from Revival fully and will change
the appearance of players
@poklj poklj force-pushed the Changeling-Devour-Transform branch from 995ba6b to 27f31ee Compare January 27, 2025 00:46
poklj added 5 commits January 26, 2025 20:47
- add devour on and off sprites

- add transform action sprite

- Add Armblade sprite for future use

- Credit obscenelytinyshark for the sprites <3
- Remove the ling lungs stuff for now... body system is overly
complicated, makes my head hurt

- Switch every method to use Entity<> from Uid, Comp format
- add a Admin verb to make Changelingification easy!

- Add game rule stuff for admin verb and to tell the hapless
goober how to be a changeling... sorta

- clean up parts to make VV easy... USE THE VERB!!
Comment on lines +34 to +42
private void OnChangelingDevourAttempt(EntityUid uid, ArmorComponent component, InventoryRelayedEvent<ChangelingDevourAttemptEvent> args)
{
var slash = component.Modifiers.Coefficients.ContainsKey("Slash") && component.Modifiers.Coefficients["Slash"] < 1f - args.Args.ProtectionThreshold;
var blunt = component.Modifiers.Coefficients.ContainsKey("Blunt") && component.Modifiers.Coefficients["Blunt"] < 1f - args.Args.ProtectionThreshold;
var pierce = component.Modifiers.Coefficients.ContainsKey("Piercing") && component.Modifiers.Coefficients["Piercing"] < 1f - args.Args.ProtectionThreshold;

args.Args.Protection = slash || blunt || pierce;
}

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I know this is still in draft but anything ling related shouldn't be in the armor system. What are you trying to do?

Copy link
Contributor Author

@poklj poklj Jan 28, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This was brought up in Development on discord and is being changed to be a query of some form for the coefficents.

Was caused as a failure to understand what InventoryRelays do and how to make one, and has been clarified (will be the next commit i do)

For future reference, the Intent is to check that the outerClothing is not over a protection threshold and cancel the devour attempt should the target be unable to be consumed (a feature described in the ling doc)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
A: Character/Species Area: Player characters and species features and content. A: Roundflow/Antag Area: Roundflow - "What happens in the game", including antagonist roles and their capabilities Changes: Audio Changes: Might require knowledge of audio. Changes: Sprites Changes: Might require knowledge of spriting or visual design. Changes: UI Changes: Might require knowledge of UI design or code. D2: Medium Difficulty: A good amount of codebase knowledge required. P2: Raised Priority: Item has a raised priority, indicating it might get increased maintainer attention. S: Needs Review Status: Requires additional reviews before being fully accepted size/L Denotes a PR that changes 1000-4999 lines. T: New Feature Type: New feature or content, or extending existing content
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants