Skip to content

[Bounty] Adds the Shredder#703

Open
TheSecondLord wants to merge 5 commits intoProjectOmu:masterfrom
TheSecondLord:shredder
Open

[Bounty] Adds the Shredder#703
TheSecondLord wants to merge 5 commits intoProjectOmu:masterfrom
TheSecondLord:shredder

Conversation

@TheSecondLord
Copy link
Contributor

About the PR

Adds the Shredder, a musician (45tc) and nukie (75tc) only syndicate rock guitar which functions as both a strong melee and as an ally buffing tool. It deals 2 slash/6 blunt unwielded, 4 slash/8 blunt/8 shock (20 total) wielded, has a 1.25x attack rate and grants a buff which gives the wielder 1.2x movespeed and slight passive regeneration of brute, burn and bloodloss damage types while active.
Also adds the blood-red headphones, which allows you to share the Shredder's buff as long as you are within a roughly 4 tile radius of the wielder while worn. 6 of these are included in the nukie version of the listing, so the whole squad can get the buff. They can also be bought on their own for 3tc.

Why / Balance

Bounty. Provides a very unique form of weapon which will hopefully lead to some interesting nukie strategies. Also, cool job-specific weaponry for syndie musicians.
Healing effect is very minor, so it shouldn't be disastrous for balancing. Values can all be tweaked through yaml if needed.

Technical details

Added RadiusBuffComponent and RadiusBuffSystem for entities which should apply a status effect to other entities within a radius. Includes fields which should make it flexible enough to be adapted for other uses via yaml in the future, including specifying a different status effect, whitelist/blacklist, if the holder should be affected and if the entity itself should be affected. Somewhat based off of the raw prophet radius heal system, but more generalised. In this case, status effects are applied every 3 seconds, last for 5 seconds and search for entities with the RadiusBuffReceiverComponent (this should really be named ShredderBuffReceiverComponent, oops).

Added the status effect itself, along with ShredderStatusEffectComponent (required by statuseffectsystem and only used to handle the state of the status effect) and ShredderBuffComponent (component given to entities with the status effect which holds most of the datafields). Added EffectShredder proto for the indicator visual. Healing and visual is applied every 3 seconds. Movement speed is granted/removed and refreshed when the status effect is added/removed.

Added ActivateBuffOnWieldComponent and ActivateBuffOnWieldSystem. Toggles the radius buff on/off when wielded/unwielded. Not really made to be used with anything other than RadiusBuffComponent.

Added uplink listings for the shredder, nukie shredder bundle and bloodred headphones.

Media

2026-03-18.21-10-37.mp4

Nukie bundle listing
image

Roughly maximum buff range
image

Requirements

Breaking changes

Changelog

  • add: Added the Shredder weapon for syndicate musicians and nuclear operatives. Dance till you're dead.

@github-actions github-actions bot added S: Untriaged Has not been set a status; currently not labeled. Changes: Sprites Makes changes to sprites/RSIs. Changes: Audio Makes changes to audio files. and removed S: Untriaged Has not been set a status; currently not labeled. labels Mar 18, 2026
@github-actions
Copy link
Contributor

github-actions bot commented Mar 18, 2026

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

Resources/Textures/_Omu/Clothing/Multiple/bloodred-headphones.rsi

State Old New Status
icon-on Added
icon Added
inhand-left Added
inhand-right Added
off-equipped-EARS Added
off-equipped-HELMET Added
off-equipped-NECK Added
on-equipped-EARS Added
on-equipped-HELMET Added
on-equipped-NECK Added

Resources/Textures/_Omu/Effects/shredder_aura.rsi

State Old New Status
effect Added

Resources/Textures/_Omu/Objects/Weapons/Melee/shredder.rsi

State Old New Status
equipped-BACKPACK Added
equipped-SUITSTORAGE Added
icon Added
inhand-left Added
inhand-right Added
wielded-inhand-left Added
wielded-inhand-right Added

Edit: diff updated after cbb5123

@TheSecondLord
Copy link
Contributor Author

errm I'll fix that linter fail tomorrow

@TheSecondLord
Copy link
Contributor Author

it ran fine for me, why is the build test freaking out? not sure if this has anything to do with me or not

@3PonPon3
Copy link
Contributor

Do remember that shock is AP....8 shock kinda spooky

@3PonPon3 3PonPon3 added S: Needs Review Needs review by a maintainer. Note: Bounty A pull-request made for a bounty or other offer. Type: Feature Adds completely new stuff to the game. A: Roundflow/Antag Area: Roundflow - "What happens in the game", including antagonist roles and their capabilities labels Mar 20, 2026
@3PonPon3
Copy link
Contributor

Also that test just sometimes freaks out, you can just click on it to see if it's anything relevant to you or an unrelated test fail

Copy link
Member

Choose a reason for hiding this comment

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

This is 1 pixel to the right of being centered on a tile

Copy link
Contributor Author

Choose a reason for hiding this comment

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

image

it's definitely centered

@github-actions github-actions bot removed the S: Needs Review Needs review by a maintainer. label Mar 20, 2026
Copy link
Member

@Thesia000 Thesia000 left a comment

Choose a reason for hiding this comment

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

the animation is mininmal off please fix it, make sure it is centered on a urist

Copy link
Contributor

@NotActuallyMarty NotActuallyMarty left a comment

Choose a reason for hiding this comment

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

These are general notes i've not looked over this entirely, but the calls of EQE on an update loop don't look good to me.

You made a ShredderStatusEffectComponent But no actual entity for the Component.

Make an entity prototype in yaml, and probably move the effects from ShredderBuffComponent to it, then apply it where you need to when you need to using status effect system.

See for example the status effect for tasers:

- type: entity
  parent: StatusEffectSlowdown
  id: TaserSlowdownStatusEffect
  name: shot by taser slowdown

with the parent being:

- type: entity
  parent: MobStatusEffectDebuff
  id: StatusEffectSlowdown
  abstract: true
  name: slowdown
  components:
  - type: StatusEffect
    whitelist:
      components:
      - MobState
    blacklist:
      tags:
      - SlowImmune
  - type: MovementModStatusEffect

You are going to probably need to do a bit more given the stuff you want to give, but for example just by adding a MovementModStatusEffectComponent to your status effect already simplifies this by a lot because MovementModSystem will handle the movespeed refreshing without you needing to hardcode things.

You could also probably move this to OmuMod which would make it a lot cleaner. Just put the systems in Content.Omu.Shared or Content.Omu.Server or whatnot, and if you don't need to touch core files that should work.

@NotActuallyMarty
Copy link
Contributor

Okay you did add a status effect entity my ass is blind, this just needs some cleanup then

@TheSecondLord
Copy link
Contributor Author

the animation is mininmal off please fix it, make sure it is centered on a urist

oh whoops, the animation is centered but apparently players themselves are and have always been 1 pixel offcenter(?!?!?!?!?!)

@TheSecondLord
Copy link
Contributor Author

just by adding a MovementModStatusEffectComponent to your status effect already simplifies this by a lot because MovementModSystem will handle the movespeed refreshing without you needing to hardcode things.

God damn it. I knew a general system for movespeed status effects existed somewhere but somehow I missed this

@TheSecondLord
Copy link
Contributor Author

Reviews addressed for the most part. I'm a bit iffy on the EQEs too but it does need to refresh on a timer so I think this is acceptable?

You could also probably move this to OmuMod which would make it a lot cleaner. Just put the systems in Content.Omu.Shared or Content.Omu.Server or whatnot, and if you don't need to touch core files that should work.

What's actually the difference between this and just namespacing it?

@github-actions github-actions bot added the S: Needs Review Needs review by a maintainer. label Mar 22, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A: Roundflow/Antag Area: Roundflow - "What happens in the game", including antagonist roles and their capabilities Changes: Audio Makes changes to audio files. Changes: Sprites Makes changes to sprites/RSIs. Note: Bounty A pull-request made for a bounty or other offer. S: Needs Review Needs review by a maintainer. size/M Type: Feature Adds completely new stuff to the game.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants