-
Notifications
You must be signed in to change notification settings - Fork 3.3k
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
Boingo Glove #26052
Boingo Glove #26052
Conversation
RSI Diff Bot; head commit e6e655e merging into ef72d3c Resources/Textures/Objects/Weapons/Melee/boingo_glove.rsi
|
Not sure how I feel about it pushing anchored objects around. Does it work on tables? Airlocks? Windows/walls? |
I love this so much |
Boing |
This is a funny item. It's also really strong. It def shouldn't work for anchored objects, that just invites a whole new level of harassing every single department ever. Considering how cheap and easy it is to craft, I'd have gone with a lowered max launch distance and # of uses per tank. Maybe 1 sec launch time instead of the default 3? And 6-8 uses instead of 14 (Gorilla has like 5 iirc)? |
Perhaps if doing a strong nerf, it might be worth adding advanced and admem versions |
doesnt work on any of those. |
will take this into consideration when i look at balancing it based on feedback. |
lmao i love the sound |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why would I get a gorilla if this is trivial to make and mass produce.
|
||
/// <summary> | ||
/// If true attack will hit items. | ||
/// </summary> | ||
[DataField, ViewVariables(VVAccess.ReadWrite)] | ||
public bool HitItem = false; | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This should be using events.
Content.Shared/Weapons/Melee/SharedGasPoweredMeleeThrowSystem.cs
Outdated
Show resolved
Hide resolved
|
||
private Entity<GasTankComponent>? GetGas(EntityUid uid) | ||
{ | ||
if (!TryComp<GasPoweredThrowerComponent>(uid, out var gaspowered)) | ||
return null; | ||
|
||
if (!Container.TryGetContainer(uid, gaspowered.TankSlotId, out var container) || | ||
container is not ContainerSlot slot || slot.ContainedEntity is not { } contained) | ||
return null; | ||
|
||
return TryComp<GasTankComponent>(contained, out var gasTank) ? (contained, gasTank) : null; | ||
} | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
You shouldn't be hardcoding a generic gas tank check to this system, just use an existing atmos method and if it doesn't exist then make it.
} | ||
private void OnAttemptMeleeThrowOnHit(Entity<GasPoweredThrowerComponent> ent, ref AttemptMeleeThrowOnHitEvent args) | ||
{ | ||
var (uid, comp) = ent; | ||
|
||
args.Cancelled = false; | ||
args.Handled = true; | ||
|
||
var gas = GetGas(ent); | ||
if (gas == null && comp.GasUsage > 0f) | ||
{ | ||
args.Cancelled = true; | ||
return; | ||
} | ||
|
||
Audio.PlayPvs(comp.HitSound, uid, AudioParams.Default.WithVariation(0.025f).WithVolume(8f)); | ||
|
||
if (gas == null) | ||
return; | ||
|
||
var environment = _atmos.GetContainingMixture(ent, false, true); | ||
var removed = _gasTank.RemoveAir(gas.Value, comp.GasUsage); | ||
if (environment != null && removed != null) | ||
{ | ||
_atmos.Merge(environment, removed); | ||
} | ||
|
||
if (gas.Value.Comp.Air.TotalMoles >= comp.GasUsage) | ||
return; | ||
|
||
_itemSlots.TryEject(uid, comp.TankSlotId, uid, out _); | ||
} | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
You're doing a bunch of state changes in an attempt event; attempts should just be cancelling the melee hit or not and not actually changing anything.
You need to split this out into the other meleethrowonhit events.
|
||
private void OnContainerInserting(EntityUid uid, GasPoweredThrowerComponent component, ContainerIsInsertingAttemptEvent args) | ||
{ | ||
if (args.Container.ID != component.TankSlotId) | ||
return; | ||
|
||
if (!TryComp<GasTankComponent>(args.EntityUid, out var gas)) | ||
return; | ||
|
||
if (gas.Air.TotalMoles >= component.GasUsage && component.GasUsage > 0f) | ||
return; | ||
|
||
args.Cancel(); | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Silently mispredicting due to serverside code is really awful and should be providing feedback.
|
||
if (gas.Air.TotalMoles >= component.GasUsage && component.GasUsage > 0f) | ||
return; | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is this even supposed to block if the total moles in the tank is more than required for gas? That doesn't make sense to me?
Gorilla is designed to move anomalies around, thats why its science equipment. Boingo Glove has no interaction with anomales. |
This is like 10x better than a force gun and craftable on roundstart ngl Punching a syndiebomb away is both based and makes defusing/spacing bomb too easy |
it shouldnt work on anchored things |
make it do actual knockback instead of just like dragging things at a constant speed!!!!!! i love it |
This pull request has conflicts, please resolve those before we can evaluate the pull request. |
Yea i think this should be the case. Will change it. |
This pull request has conflicts, please resolve those before we can evaluate the pull request. |
The effect seems a little delayed, otherwise looks great lol |
This pull request has conflicts, please resolve those before we can evaluate the pull request. |
this severely overlaps with the GORILLA and has a lot of dupe code with pneumatic cannon, i would rather see this as just a power fist item for traitors or something like ss13 |
this can be closed i think. Not really feasable to work on it. |
Closed due to feature freeze May 10th-June 14th. Comment to have it reopen after this. |
About the PR
Added - Boingo Glove
Added - GasPoweredThrowerComponent
Modified - MeleeSystemComponent
Added - boing.ogg
Boingo Glove is a pneumatic boxing glove that works similarly to the gorilla gauntlets except instead of requiring an anomaly core, it requires a gas canister(with gas inside). The Boingo Glove cannot move anomalies but can move items (and mobs). Boingo Glove does some stamina damage.
Technical details
GasPoweredThrowerComponent works similarly to the AnomalyCorePoweredThrowerComponent but instead of inserting an anomaly core it is requires a gas tank.
MeleeSystemComponent now has a bool which if true allows a melee attack to target an entity without the damageablecomponent.
Media
Desktop.2024.03.12.-.18.42.29.03.mp4
Changelog
🆑