diff --git a/Content.Client/_HL/LewdEggLaying/Systems/PrizeballLayingSystem.cs b/Content.Client/_HL/LewdEggLaying/Systems/PrizeballLayingSystem.cs
new file mode 100644
index 00000000000..2dbe6f00fd9
--- /dev/null
+++ b/Content.Client/_HL/LewdEggLaying/Systems/PrizeballLayingSystem.cs
@@ -0,0 +1,9 @@
+using Content.Shared.Animals.Systems;
+
+namespace Content.Client.Animals.Systems;
+
+// This is just an empty class so that the matching code in SharedPrizeballLayingSystem can run on the client.
+public sealed class PrizeballLayingSystem : SharedPrizeballLayingSystem
+{
+
+}
\ No newline at end of file
diff --git a/Content.Server/_Hardlight/EntityEffects/Effects/Redeem.cs b/Content.Server/_Hardlight/EntityEffects/Effects/Redeem.cs
new file mode 100644
index 00000000000..e6b72b6531a
--- /dev/null
+++ b/Content.Server/_Hardlight/EntityEffects/Effects/Redeem.cs
@@ -0,0 +1,26 @@
+using Content.Shared.EntityEffects;
+using Content.Shared.Animals.Components; // HL: Moved the LewdEggLayingComponent to Shared
+using Content.Server.Animals.Systems;
+using Robust.Shared.Prototypes;
+
+namespace Content.Server.EntityEffects.Effects
+{
+ ///
+ /// Attempts to find a prizeball laying component and triggers its effects
+ ///
+ public sealed partial class Redeem : EntityEffect
+ {
+ public override void Effect(EntityEffectBaseArgs args)
+ {
+ var entman = args.EntityManager;
+ if (entman.TryGetComponent(args.TargetEntity, out PrizeballLayingComponent? egglaying))
+ {
+ float amt = (args is EntityEffectReagentArgs reagentArgs) ? (float) reagentArgs.Quantity : 1.0f;
+ entman.System().Redeem(args.TargetEntity, amt, egglaying);
+ }
+ }
+
+ protected override string? ReagentEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys)
+ => Loc.GetString("reagent-effect-guidebook-redeem", ("chance", Probability));
+ }
+}
diff --git a/Content.Server/_Hardlight/LewdEgglaying/Systems/PrizeballLayingSystem.cs b/Content.Server/_Hardlight/LewdEgglaying/Systems/PrizeballLayingSystem.cs
new file mode 100644
index 00000000000..5dd3c033430
--- /dev/null
+++ b/Content.Server/_Hardlight/LewdEgglaying/Systems/PrizeballLayingSystem.cs
@@ -0,0 +1,208 @@
+using Content.Shared.Actions;
+using Content.Shared.DoAfter;
+using Content.Shared.IdentityManagement;
+using Content.Shared.Movement.Systems;
+using Content.Shared.Storage;
+using Content.Shared.Traits.Events;
+using Content.Server.Popups;
+using Robust.Server.Audio;
+using Robust.Shared.Player;
+using Robust.Shared.Random;
+using Content.Shared.Animals.Systems;
+using Content.Shared.Animals.Components;
+
+namespace Content.Server.Animals.Systems;
+
+///
+/// Gives the ability to lay pballs/other things;
+/// produces endlessly if the owner does not have a HungerComponent.
+///
+public sealed class PrizeballLayingSystem : SharedPrizeballLayingSystem // We've changed the base to SharedPrizeballLayingSystem so we can run the Verb drawing on the client.
+{
+ [Dependency] private readonly IRobustRandom _random = default!;
+ [Dependency] private readonly SharedActionsSystem _actions = default!;
+ [Dependency] private readonly SharedDoAfterSystem _doAfter = default!;
+ [Dependency] private readonly AudioSystem _audio = default!;
+ [Dependency] private readonly PopupSystem _popup = default!;
+ [Dependency] private readonly MovementSpeedModifierSystem _movementSpeedModifier = default!;
+
+ public override void Initialize()
+ {
+ base.Initialize();
+
+ SubscribeLocalEvent(OnHostShutdown);
+ SubscribeLocalEvent(OnPballLayingAction);
+ SubscribeLocalEvent(OnPballLayingDoAfter);
+ SubscribeLocalEvent(OnPballLayingInsideDoAfter);
+ SubscribeLocalEvent(OnRefreshMovespeed);
+ }
+
+ private void OnHostShutdown(EntityUid user, PrizeballLayingComponent pballLaying, ComponentShutdown args)
+ {
+ _actions.RemoveAction(user, pballLaying.Action);
+ }
+
+ protected override void AttemptLayInside(Entity user, EntityUid target)
+ {
+ var doargs = new DoAfterArgs(EntityManager, user.Owner, user.Comp.PballLayDelay, new PrizeballLayingInsideDoAfterEvent(), user.Owner, target)
+ {
+ BreakOnMove = true,
+ BlockDuplicate = true,
+ BreakOnDamage = true,
+ CancelDuplicate = true,
+ };
+
+ _popup.PopupEntity(Loc.GetString("action-popup-lay-pball-inside-start", ("entity", Identity.Entity(user.Owner, EntityManager)), ("target", Identity.Entity(target, EntityManager))), user);
+ _doAfter.TryStartDoAfter(doargs);
+ }
+
+ private void OnRefreshMovespeed(EntityUid user, PrizeballLayingComponent pballLaying, RefreshMovementSpeedModifiersEvent args)
+ {
+ if (pballLaying.isHeavyOfPballs())
+ {
+ args.ModifySpeed(pballLaying.PballSlowMult, pballLaying.PballSlowMult);
+ }
+ }
+
+ private void OnPballLayingAction(EntityUid user, PrizeballLayingComponent pballLaying, PrizeballLayingActionEvent args)
+ {
+ if (!pballLaying.hasPballs())
+ {
+ _popup.PopupEntity(Loc.GetString("action-popup-lay-pball-no-pballs"), user, user);
+ return;
+ }
+
+ var doAfter = new DoAfterArgs(EntityManager, user, pballLaying.PballLayDelay, new PrizeballLayingDoAfterEvent(), user)
+ {
+ BreakOnMove = true,
+ BlockDuplicate = true,
+ BreakOnDamage = true,
+ CancelDuplicate = true,
+ };
+
+ _popup.PopupEntity(Loc.GetString("action-popup-lay-pball-user-start"), user, user);
+ _doAfter.TryStartDoAfter(doAfter);
+ }
+
+ public void Redeem(EntityUid user, float amount, PrizeballLayingComponent? pballLaying = null)
+ {
+ if (!Resolve(user, ref pballLaying) || pballLaying.Temporary)
+ return;
+
+ amount *= pballLaying.ProductionMult;
+
+ bool hasPballsBefore = pballLaying.hasPballs();
+ bool isHeavyBefore = pballLaying.isHeavyOfPballs();
+ bool isFullBefore = pballLaying.isFullOfPballs();
+
+ AddPballs(user, pballLaying, amount);
+
+ if(pballLaying.hasPballs() && !hasPballsBefore)
+ {
+ _popup.PopupEntity(Loc.GetString("action-popup-lay-pball-firstpball"), user, user);
+ _actions.AddAction(user, ref pballLaying.Action, pballLaying.ActionPrototype);
+ }
+ else if(pballLaying.isHeavyOfPballs() && !isHeavyBefore)
+ {
+ _movementSpeedModifier.RefreshMovementSpeedModifiers(user);
+ _popup.PopupEntity(Loc.GetString("action-popup-lay-pball-heavypballs"), user, user);
+ }
+ else if(pballLaying.isFullOfPballs() && !isFullBefore)
+ {
+ _popup.PopupEntity(Loc.GetString("action-popup-lay-pball-fullpballs"), user, user);
+ }
+ else if(pballLaying.doFlavor())
+ {
+ _popup.PopupEntity(Loc.GetString(_random.Pick(pballLaying.FlavorMessages)), user, user);
+ }
+ }
+
+ private void OnPballLayingInsideDoAfter(EntityUid user, PrizeballLayingComponent myPballs, PrizeballLayingInsideDoAfterEvent args)
+ {
+ if (args.Cancelled || args.Handled || args.Target == null)
+ return;
+
+ args.Handled = true;
+
+ if (myPballs.Deleted || !myPballs.hasPballs())
+ {
+ _popup.PopupEntity(Loc.GetString("action-popup-lay-pball-nopballs"), user, user);
+ return;
+ }
+ var target = args.Target.Value;
+
+ _audio.PlayPvs(myPballs.PballLaySound, user);
+
+ if (!TryComp(target, out var theirPballs))
+ {
+ theirPballs = (PrizeballLayingComponent)Factory.GetComponent(Factory.GetComponentName());
+ EntityManager.AddComponent(target, theirPballs);
+ theirPballs.makeTempFrom(myPballs);
+ _actions.AddAction(target, ref theirPballs.Action, theirPballs.ActionPrototype);
+ }
+
+ /// HL: Moved the AddPballs to a helper function so we can share the pballs count in the component to the client
+ AddPballs(user, myPballs, -1.0f);
+ AddPballs(target, theirPballs, 1.0f);
+
+ _movementSpeedModifier.RefreshMovementSpeedModifiers(user);
+ _movementSpeedModifier.RefreshMovementSpeedModifiers(target);
+
+ if(myPballs.hasPballs())
+ {
+ _popup.PopupEntity(Loc.GetString("action-popup-lay-pball-inside-give-more", ("entity", Identity.Entity(target, EntityManager))), user, user);
+ _popup.PopupEntity(Loc.GetString("action-popup-lay-pball-inside-receive-more", ("entity", Identity.Entity(user, EntityManager))), target, target);
+ args.Repeat = true;
+ }
+ else
+ {
+ _popup.PopupEntity(Loc.GetString("action-popup-lay-pball-inside-give-done", ("entity", Identity.Entity(target, EntityManager))), user, user);
+ _popup.PopupEntity(Loc.GetString("action-popup-lay-pball-inside-receive-done", ("entity", Identity.Entity(user, EntityManager))), target, target);
+
+ if(myPballs.Temporary)
+ RemComp(user);
+ else
+ _actions.RemoveAction(user, myPballs.Action);
+ }
+ }
+
+ private void OnPballLayingDoAfter(EntityUid user, PrizeballLayingComponent pballLaying, PrizeballLayingDoAfterEvent args)
+ {
+ if (args.Cancelled || args.Handled)
+ return;
+
+ args.Handled = true;
+
+ if (pballLaying.Deleted || !pballLaying.hasPballs())
+ {
+ _popup.PopupEntity(Loc.GetString("action-popup-lay-pball-nopballs"), user, user);
+ return;
+ }
+
+ foreach (var ent in EntitySpawnCollection.GetSpawns(pballLaying.EggSpawn, _random))
+ {
+ Spawn(ent, Transform(user).Coordinates);
+ }
+
+ _audio.PlayPvs(pballLaying.PballLaySound, user);
+
+ AddPballs(user, pballLaying, -1.0f);
+ _movementSpeedModifier.RefreshMovementSpeedModifiers(user);
+
+ if(pballLaying.hasPballs())
+ {
+ _popup.PopupEntity(Loc.GetString("action-popup-lay-pball-user-more"), user, user);
+ args.Repeat = true;
+ }
+ else
+ {
+ _popup.PopupEntity(Loc.GetString("action-popup-lay-pball-user-done"), user, user);
+
+ if(pballLaying.Temporary)
+ EntityManager.RemoveComponent(user);
+ else
+ _actions.RemoveAction(user, pballLaying.Action);
+ }
+ _popup.PopupEntity(Loc.GetString("action-popup-lay-pball-others", ("entity", user)), user, Filter.PvsExcept(user), true);
+ }
+}
diff --git a/Content.Shared/_Hardlight/LewdEgglaying/Components/PrizeballLayingComponent.cs b/Content.Shared/_Hardlight/LewdEgglaying/Components/PrizeballLayingComponent.cs
new file mode 100644
index 00000000000..ed72c57eab8
--- /dev/null
+++ b/Content.Shared/_Hardlight/LewdEgglaying/Components/PrizeballLayingComponent.cs
@@ -0,0 +1,129 @@
+using Content.Shared.Storage;
+using Robust.Shared.Audio;
+using Robust.Shared.GameStates;
+using Robust.Shared.Prototypes;
+using Content.Shared.Animals.Systems;
+
+namespace Content.Shared.Animals.Components; // Moved this to Shared so the client can use it for verb drawing.
+
+///
+/// This component handles prizeball laying for the prizeball layer trait
+///
+
+[RegisterComponent, NetworkedComponent, AutoGenerateComponentState(fieldDeltas: true)]
+public sealed partial class PrizeballLayingComponent : Component
+{
+ [DataField]
+ public EntProtoId ActionPrototype = "ActionLayPrizeball";
+
+ [DataField]
+ public EntityUid? Action;
+
+ ///
+ /// Messages while producing prizeballs
+ ///
+ [DataField]
+ public IReadOnlyList FlavorMessages = new[]
+ {
+ "action-popup-lay-pball-flavor-1",
+ "action-popup-lay-pball-flavor-2",
+ "action-popup-lay-pball-flavor-3",
+ "action-popup-lay-pball-flavor-4"
+ };
+
+ ///
+ /// The item that gets laid/spawned, retrieved from animal prototype.
+ ///
+ [DataField(required: true)]
+ public List EggSpawn = new();
+
+ ///
+ /// The sound played when prizeball pops out
+ ///
+ [DataField]
+ public SoundSpecifier PballLaySound = new SoundPathSpecifier("/Audio/Machines/machine_vend.ogg");
+
+ ///
+ /// How many prizeballs produced per unit of cum
+ ///
+ [DataField]
+ public float ProductionMult = 0.2f;
+
+ ///
+ /// How many prizeballs between each flavor text
+ ///
+ [DataField]
+ public float FlavorFreq = 6.0f;
+
+ ///
+ /// The number of pballs when movespeed is slowed
+ ///
+ [DataField]
+ public float PballSlowThreshold = 10;
+
+ ///
+ /// The max number of prizeballs you can hold
+ ///
+ [DataField]
+ public float MaxPballs = 24;
+
+ ///
+ /// How much the user is slowed by prizeballs
+ ///
+ [DataField]
+ public float PballSlowMult = 0.5f;
+
+ ///
+ /// How long it takes for the prizeball to come out
+ ///
+ [DataField]
+ public float PballLayDelay = 5.0f;
+
+ ///
+ /// The number of prizeballs in your belly
+ ///
+ [DataField, AutoNetworkedField]
+ public float pballs = 0;
+
+ ///
+ /// The number of prizeballs produced since last flavor text
+ ///
+ public float pballsFlavorAccum = 0;
+
+ ///
+ /// The number of prizeballs produced since last flavor text
+ ///
+ public bool Temporary = false;
+ public bool hasPballs()
+ {
+ return pballs >= 1.0f;
+ }
+ public bool isHeavyOfPballs()
+ {
+ return pballs >= PballSlowThreshold;
+ }
+ public bool isFullOfPballs()
+ {
+ return pballs >= MaxPballs;
+ }
+ public bool doFlavor()
+ {
+ if(pballsFlavorAccum >= FlavorFreq)
+ {
+ pballsFlavorAccum -= FlavorFreq;
+ return true;
+ }
+ return false;
+ }
+ public void makeTempFrom(PrizeballLayingComponent other)
+ {
+ FlavorMessages = other.FlavorMessages;
+ EggSpawn = other.EggSpawn;
+ PballLaySound = other.PballLaySound;
+ PballSlowThreshold = other.PballSlowThreshold;
+ MaxPballs = other.MaxPballs;
+ PballSlowMult = other.PballSlowMult;
+ PballLayDelay = other.PballLayDelay;
+ Temporary = true;
+ }
+}
\ No newline at end of file
diff --git a/Content.Shared/_Hardlight/LewdEgglaying/Systems/SharedPrizeballLayingSystem.cs b/Content.Shared/_Hardlight/LewdEgglaying/Systems/SharedPrizeballLayingSystem.cs
new file mode 100644
index 00000000000..002ae5891f3
--- /dev/null
+++ b/Content.Shared/_Hardlight/LewdEgglaying/Systems/SharedPrizeballLayingSystem.cs
@@ -0,0 +1,51 @@
+using Content.Shared.Verbs;
+using Content.Shared.Animals.Components;
+using Robust.Shared.Player;
+
+namespace Content.Shared.Animals.Systems;
+
+/*
+ HL
+ Moved LewdEggLayingSystem to a shared system so that the AddVerb can be called clientside to deal with lag when right-clicking objects/players.
+ LewdEggLayingComponent is now shared, and we had to network the eggs count.
+ We also had to move the AddEgg to a helper function to keep any processing code out of the Component and in the Shared space
+ The LewdEggLayingSystem on the Server is mostly handling everything, with an empty class of the same name on the Client so that the client can run the AddVerb code locally.
+*/
+public abstract class SharedPrizeballLayingSystem : EntitySystem
+{
+ public override void Initialize()
+ {
+ base.Initialize();
+
+ SubscribeLocalEvent>(AddLayPballInsideVerb);
+ }
+
+ private void AddLayPballInsideVerb(Entity user, ref GetVerbsEvent args)
+ {
+ // Todo figure out how to only make verb appear for player mobs
+ var target = args.Target;
+ if (!args.CanInteract || user.Owner == target || !user.Comp.hasPballs() || !TryComp(target, out ActorComponent? actor))
+ return;
+
+ InnateVerb verbLayPball = new()
+ {
+ Act = () => AttemptLayInside(user, target),
+ Text = Loc.GetString($"lay-pball-inside-verb-get-text"),
+ Priority = 1
+ };
+ args.Verbs.Add(verbLayPball);
+ }
+
+ protected void AddPballs(EntityUid uid, PrizeballLayingComponent comp, float amt)
+ {
+ comp.pballs = Math.Clamp(comp.pballs + amt, 0, comp.MaxPballs);
+ if (amt > 0)
+ {
+ comp.pballsFlavorAccum += amt;
+ }
+ DirtyField(uid, comp, nameof(PrizeballLayingComponent.pballs));
+ }
+
+ protected virtual void AttemptLayInside(Entity user, EntityUid target) { }
+
+}
\ No newline at end of file
diff --git a/Content.Shared/_Hardlight/Traits/Events/PrizeballLayingEvents.cs b/Content.Shared/_Hardlight/Traits/Events/PrizeballLayingEvents.cs
new file mode 100644
index 00000000000..fb738c3627e
--- /dev/null
+++ b/Content.Shared/_Hardlight/Traits/Events/PrizeballLayingEvents.cs
@@ -0,0 +1,15 @@
+using Content.Shared.DoAfter;
+using Robust.Shared.Serialization;
+using Content.Shared.Actions;
+
+namespace Content.Shared.Traits.Events;
+
+public sealed partial class PrizeballLayingActionEvent : InstantActionEvent { }
+
+[Serializable, NetSerializable]
+public sealed partial class PrizeballLayingDoAfterEvent : SimpleDoAfterEvent { }
+
+[Serializable, NetSerializable]
+public sealed partial class PrizeballLayingInsideDoAfterEvent : SimpleDoAfterEvent { }
+
+
diff --git a/Resources/Locale/en-US/_HL/flavors/flavor-profiles.ftl b/Resources/Locale/en-US/_HL/flavors/flavor-profiles.ftl
index c932f66e8a9..587957472db 100644
--- a/Resources/Locale/en-US/_HL/flavors/flavor-profiles.ftl
+++ b/Resources/Locale/en-US/_HL/flavors/flavor-profiles.ftl
@@ -1,4 +1,5 @@
flavor-woof = like woof
+flavor-highscore = like a sweet sweet highscore.
flavor-complex-tha-slop = like processed shit
flavor-complex-old-socks = like old socks
diff --git a/Resources/Locale/en-US/_HL/lewd/prizeball-lay.ftl b/Resources/Locale/en-US/_HL/lewd/prizeball-lay.ftl
new file mode 100644
index 00000000000..d3e2dcbaa78
--- /dev/null
+++ b/Resources/Locale/en-US/_HL/lewd/prizeball-lay.ftl
@@ -0,0 +1,23 @@
+action-popup-lay-pball-user = You lay a prizeball.
+action-popup-lay-pball-others = {CAPITALIZE(THE($entity))} lays a shiny prizeball.
+action-popup-lay-pball-too-hungry = You need more tickets before you can lay another prizeball!
+
+action-popup-lay-pball-user-start = You squat and push, feeling a prizeball stretching its way down...
+action-popup-lay-pball-user-more = Another prizeball begins to push out...
+action-popup-lay-pball-user-done = Your insides feel smooth and free of rewards!
+action-popup-lay-pball-nopballs = You don't feel any prizeballs to lay!
+action-popup-lay-pball-firstpball = Your ticket filled abdomen contracts and squeezes, feeling a smooth mass forming.
+action-popup-lay-pball-heavypballs = Your reward-filled belly makes it feel hard to turn and move!
+action-popup-lay-pball-fullpballs = You feel your dispensing chute clenching and trying to hold in a long line of prizeballs!
+action-popup-lay-pball-flavor-1 = Many rewards can be felt in your abdomen!
+action-popup-lay-pball-flavor-2 = You feel like your dispensing chute is jammed to the brim!
+action-popup-lay-pball-flavor-3 = Your vend wire is pulsing involuntarily!
+action-popup-lay-pball-flavor-4 = Your insides feel full of solid heavy balls!
+
+action-popup-lay-pball-inside-start = {$entity} kisses their prize chute lips tightly against {$target}, and begins to push...
+action-popup-lay-pball-inside-give-more = You feel a prizeball pop into {$entity}, squeezing into them as more push behind it.
+action-popup-lay-pball-inside-receive-more = {$entity}'s dispening port pushes smooth mysterious capsules into you.
+action-popup-lay-pball-inside-give-done = Pressing your prizeball laying port tightly against {$entity}, the last prizeball forces its way inside them!
+action-popup-lay-pball-inside-receive-done = You feel full as {$entity}'s last prizeball stretches into your orifice.
+
+lay-pball-inside-verb-get-text = Lay prizeball inside
diff --git a/Resources/Locale/en-US/_HL/reagents/fun.ftl b/Resources/Locale/en-US/_HL/reagents/fun.ftl
index adb5db94dcd..2aac28ecff5 100644
--- a/Resources/Locale/en-US/_HL/reagents/fun.ftl
+++ b/Resources/Locale/en-US/_HL/reagents/fun.ftl
@@ -4,3 +4,6 @@
reagent-name-juice-that-makes-you-bark = juice that makes you Bark
reagent-desc-juice-that-makes-you-bark = Pure essence of vulp plush. Makes you Woof!
+### juice that makes you Prizeball
+reagent-name-prizeball-juice = Juice that makes you Prizeball
+reagent-desc-prizeball-juice = You ate. . . Tickets. . ?
\ No newline at end of file
diff --git a/Resources/Locale/en-US/_HL/traits/traits.ftl b/Resources/Locale/en-US/_HL/traits/traits.ftl
index 55f5f598bfe..464488065af 100644
--- a/Resources/Locale/en-US/_HL/traits/traits.ftl
+++ b/Resources/Locale/en-US/_HL/traits/traits.ftl
@@ -72,6 +72,9 @@ hl-trait-egglayer-desc = You produce and lay eggs (10 cum per egg)
hl-trait-egglayer-infertile-name = Egg Layer (very infertile)
hl-trait-egglayer-infertile-desc = You produce eggs very slowly and seldomly (50 cum per egg)
+hl-trait-Prizeballlayer = Gashaponsition
+hl-trait-Prizeballlayer-desc = You produce and dispense Prizeballs (50 Tickets per Prizeball)
+
hl-trait-Brainwasher-name = Brainwasher
hl-trait-Brainwasher-desc = Through natural or artificial means, you have the ability to brainwash peoples.
diff --git a/Resources/Prototypes/_HL/Actions/types.yml b/Resources/Prototypes/_HL/Actions/types.yml
index ef9299b4ecb..512d6d88fba 100644
--- a/Resources/Prototypes/_HL/Actions/types.yml
+++ b/Resources/Prototypes/_HL/Actions/types.yml
@@ -34,6 +34,18 @@
useDelay: 5
event: !type:LewdEggLayingActionEvent
+- type: entity
+ id: ActionLayPrizeball
+ name: Lay your prizeball
+ description: Kneel and push with all your might.
+ categories: [ HideSpawnMenu ]
+ components:
+ - type: InstantAction
+ icon: { sprite: _NF/Objects/Fun/prizeticket.rsi, state: prizeball }
+ useDelay: 5
+ event: !type:PrizeballLayingActionEvent
+
+
- type: entity
id: ActionResomiGravityJump
name: Leap
diff --git a/Resources/Prototypes/_HL/Flavors/flavors.yml b/Resources/Prototypes/_HL/Flavors/flavors.yml
index 22aa1738d3e..54ee075395a 100644
--- a/Resources/Prototypes/_HL/Flavors/flavors.yml
+++ b/Resources/Prototypes/_HL/Flavors/flavors.yml
@@ -3,6 +3,11 @@
flavorType: Base
description: flavor-woof
+- type: flavor
+ id: highscore
+ flavorType: Base
+ description: flavor-highscore
+
- type: flavor
id: thaslop
flavorType: complex
diff --git a/Resources/Prototypes/_HL/Reagents/fun.yml b/Resources/Prototypes/_HL/Reagents/fun.yml
index 919c0b23669..aa5a16b70ff 100644
--- a/Resources/Prototypes/_HL/Reagents/fun.yml
+++ b/Resources/Prototypes/_HL/Reagents/fun.yml
@@ -30,3 +30,17 @@
conditions:
- !type:ReagentThreshold
min: 50
+
+- type: reagent
+ id: PrizeballJuice
+ name: reagent-name-prizeball-juice
+ desc: reagent-desc-prizeball-juice
+ physicalDesc: reagent-physical-desc-vibrant
+ group: Toxins
+ flavor: highscore
+ color: "#872420"
+ metabolisms:
+ Poison:
+ metabolismRate: 1
+ effects:
+ - !type:Redeem
\ No newline at end of file
diff --git a/Resources/Prototypes/_HL/Traits/lewd.yml b/Resources/Prototypes/_HL/Traits/lewd.yml
index c27bf9c5548..f43077901be 100644
--- a/Resources/Prototypes/_HL/Traits/lewd.yml
+++ b/Resources/Prototypes/_HL/Traits/lewd.yml
@@ -55,6 +55,22 @@
eggSlowMult: 0.5
eggLayDelay: 5
+- type: trait
+ id: PrizeballLayer
+ name: hl-trait-Prizeballlayer
+ description: hl-trait-Prizeballlayer-desc
+ category: Lewd
+ components:
+ - type: PrizeballLaying
+ eggSpawn:
+ - id: PrizeBall
+ productionMult: 0.2
+ flavorFreq: 6
+ maxPballs: 24
+ pballSlowThreshold: 10
+ pballSlowMult: 0.5
+ pballLayDelay: 5
+
- type: trait
id: Brainwasher
name: hl-trait-Brainwasher-name
diff --git a/Resources/Prototypes/_NF/Entities/Objects/Fun/prizeticket.yml b/Resources/Prototypes/_NF/Entities/Objects/Fun/prizeticket.yml
index a1c17ba6f8f..aed75f8feb3 100644
--- a/Resources/Prototypes/_NF/Entities/Objects/Fun/prizeticket.yml
+++ b/Resources/Prototypes/_NF/Entities/Objects/Fun/prizeticket.yml
@@ -43,6 +43,22 @@
- type: Item
heldPrefix: prize ticket
- type: Appearance
+ # HL added The food component to the prize ticket, as well as prizeball juice for the prizeball layer trait
+ - type: Food
+ solution: food
+ delay: 0.25
+ forceFeedDelay: 1
+ - type: FlavorProfile
+ flavors:
+ - paper
+ - type: BadFood
+ - type: SolutionContainerManager
+ solutions:
+ food:
+ maxVol: 1
+ reagents:
+ - ReagentId: PrizeballJuice
+ Quantity: .1
- type: entity
parent: PrizeTicket