Skip to content

Commit

Permalink
Heavyweight Drunk Trait + Drunk Traits Rework (#512)
Browse files Browse the repository at this point in the history
<!--
This is a semi-strict format, you can add/remove sections as needed but
the order/format should be kept the same
Remove these comments before submitting
-->

# Description
<!--
Explain this PR in as much detail as applicable

Some example prompts to consider:
How might this affect the game? The codebase?
What might be some alternatives to this?
How/Who does this benefit/hurt [the game/codebase]?
-->

Adds the inverse of lightweight drunk, which makes you less susceptible
to the effects of ethanol.
(more specifically, it halves the damage of alcohol and you need to
drink twice as much to feel the effects in the first place)

To make the change happen, `LightweightDrunk` component was reworked to:
- A) no longer change any drunk effects (including non-alcohol related
drunkness like bloodloss)
- B) instead multiply the effects of ethanol in your bloodstream

I chose this route in particular, because the other option of
multiplying the amount of ethanol gained from alcohols is nonsense.

---

# TODO

<!--
A list of everything you have to do before this PR is "complete"
You probably won't have to complete everything before merging but it's
good to leave future references
-->

- [X] Add a `TryMetabolizeReagent` event to `MetabolizerSystem.cs` so a
`LightweightDrunkSystem.cs` can listen to the event and multiply the
effects of "Ethanol" specifically.
- [X] Add the Heavyweight Drunk trait
- ~~Fix a minor spelling mistake that caused the trait condition to not
show up~~
- [ ] Would we be able to name trait files after categories? I don't
want to put every positive trait in a file named 'skills.yml'

---

<!--
This is default collapsed, readers click to expand it and see all your
media
The PR media section can get very large at times, so this is a good way
to keep it clean
The title is written using HTML tags
The title must be within the <summary> tags or you won't see it
-->

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

![Example Media Embed](https://example.com/thisimageisntreal.png)

</p>
</details>

---

# Changelog

<!--
You can add an author after the `:cl:` to change the name that appears
in the changelog (ex: `:cl: Death`)
Leaving it blank will default to your GitHub display name
This includes all available types for the changelog
-->

:cl:
- add: Added the Heavyweight Drunk trait, which doubles your alcoholism
potential.

---------

Signed-off-by: VMSolidus <[email protected]>
Co-authored-by: VMSolidus <[email protected]>
  • Loading branch information
WarMechanic and VMSolidus committed Jul 12, 2024
1 parent c55afe5 commit 7916f07
Show file tree
Hide file tree
Showing 10 changed files with 61 additions and 13 deletions.
8 changes: 7 additions & 1 deletion Content.Server/Body/Systems/MetabolizerSystem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -190,8 +190,11 @@ private void TryMetabolize(Entity<MetabolizerComponent, OrganComponent?, Solutio
}

var actualEntity = ent.Comp2?.Body ?? solutionEntityUid.Value;
var ev = new TryMetabolizeReagent(reagent, proto, quantity);
RaiseLocalEvent(actualEntity, ref ev);

var args = new ReagentEffectArgs(actualEntity, ent, solution, proto, mostToRemove,
EntityManager, null, scale);
EntityManager, null, scale * ev.Scale, ev.QuantityMultiplier);

// do all effects, if conditions apply
foreach (var effect in entry.Effects)
Expand Down Expand Up @@ -251,3 +254,6 @@ public readonly record struct ApplyMetabolicMultiplierEvent(
public readonly bool Apply = Apply;
}
}

[ByRefEvent]
public record struct TryMetabolizeReagent(ReagentId Reagent, ReagentPrototype Prototype, FixedPoint2 Quantity, float Scale = 1f, float QuantityMultiplier = 1f);
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ public override bool Condition(ReagentEffectArgs args)

var quant = FixedPoint2.Zero;
if (args.Source != null)
quant = args.Source.GetTotalPrototypeQuantity(reagent);
quant = args.Source.GetTotalPrototypeQuantity(reagent) * args.QuantityMultiplier;

return quant >= Min && quant <= Max;
}
Expand Down
2 changes: 1 addition & 1 deletion Content.Server/Chemistry/ReagentEffects/Drunk.cs
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ public override void Effect(ReagentEffectArgs args)
{
var boozePower = BoozePower;

boozePower *= args.Scale;
boozePower *= Math.Max(args.Scale, 1);

var drunkSys = args.EntityManager.EntitySysManager.GetEntitySystem<SharedDrunkSystem>();
drunkSys.TryApplyDrunkenness(args.SolutionEntity, boozePower, SlurSpeech);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,9 @@
using Content.Shared.Drunk;
using Robust.Shared.GameStates;

namespace Content.Shared.Traits.Assorted.Components;

/// <summary>
/// Used for the lightweight trait. DrunkSystem will check for this component and modify the boozePower accordingly if it finds it.
/// Used for the lightweight trait. LightweightDrunkSystem will multiply the effects of ethanol being metabolized
/// </summary>
[RegisterComponent, NetworkedComponent]
[Access(typeof(SharedDrunkSystem))]
[RegisterComponent]
public sealed partial class LightweightDrunkComponent : Component
{
[DataField("boozeStrengthMultiplier"), ViewVariables(VVAccess.ReadWrite)]
Expand Down
23 changes: 23 additions & 0 deletions Content.Server/Traits/Assorted/LightweightDrunkSystem.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
using Content.Server.Body.Components;
using Content.Server.Body.Systems;
using Content.Shared.Chemistry.Reagent;
using Content.Shared.Traits.Assorted.Components;

namespace Content.Shared.Traits.Assorted.Systems;
public sealed class LightweightDrunkSystem : EntitySystem
{
public override void Initialize()
{
SubscribeLocalEvent<LightweightDrunkComponent, TryMetabolizeReagent>(OnTryMetabolizeReagent);
}

private void OnTryMetabolizeReagent(EntityUid uid, LightweightDrunkComponent comp, ref TryMetabolizeReagent args)
{
Log.Debug(args.Prototype.ID);
if (args.Prototype.ID != "Ethanol")
return;

args.Scale *= comp.BoozeStrengthMultiplier;
args.QuantityMultiplier *= comp.BoozeStrengthMultiplier;
}
}
3 changes: 2 additions & 1 deletion Content.Shared/Chemistry/Reagent/ReagentEffect.cs
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,7 @@ public readonly record struct ReagentEffectArgs(
FixedPoint2 Quantity,
IEntityManager EntityManager,
ReactionMethod? Method,
float Scale
float Scale = 1f,
float QuantityMultiplier = 1f
);
}
3 changes: 0 additions & 3 deletions Content.Shared/Drunk/DrunkSystem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,6 @@ public void TryApplyDrunkenness(EntityUid uid, float boozePower, bool applySlur
if (!Resolve(uid, ref status, false))
return;

if (TryComp<LightweightDrunkComponent>(uid, out var trait))
boozePower *= trait.BoozeStrengthMultiplier;

if (applySlur)
{
_slurredSystem.DoSlur(uid, TimeSpan.FromSeconds(boozePower), status);
Expand Down
3 changes: 3 additions & 0 deletions Resources/Locale/en-US/traits/traits.ftl
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,9 @@ trait-description-Pacifist = You cannot attack or hurt any living beings.
trait-name-LightweightDrunk = Lightweight Drunk
trait-description-LightweightDrunk = Alcohol has a stronger effect on you
trait-name-HeavyweightDrunk = Heavyweight Drunk
trait-description-HeavyweightDrunk = Alcohols are afraid of you
trait-name-Muted = Muted
trait-description-Muted = You can't speak
Expand Down
4 changes: 4 additions & 0 deletions Resources/Prototypes/Traits/inconveniences.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,10 @@
jobs:
- Borg
- MedicalBorg
- !type:CharacterTraitRequirement
inverted: true
traits:
- HeavyweightDrunk
components:
- type: LightweightDrunk
boozeStrengthMultiplier: 2
Expand Down
18 changes: 18 additions & 0 deletions Resources/Prototypes/Traits/skills.yml
Original file line number Diff line number Diff line change
@@ -1,3 +1,21 @@
- type: trait
id: HeavyweightDrunk
category: Physical
points: -2
requirements:
- !type:CharacterJobRequirement
inverted: true
jobs:
- Borg
- MedicalBorg
- !type:CharacterTraitRequirement
inverted: true
traits:
- LightweightDrunk
components:
- type: LightweightDrunk
boozeStrengthMultiplier: 0.5

- type: trait
id: Thieving
category: Physical
Expand Down

0 comments on commit 7916f07

Please sign in to comment.