merge master
|
|
@ -0,0 +1,52 @@
|
|||
using System.Numerics;
|
||||
using Content.Shared.DeltaV.Pain;
|
||||
using Robust.Client.Graphics;
|
||||
using Robust.Client.Player;
|
||||
using Robust.Shared.Enums;
|
||||
using Robust.Shared.Prototypes;
|
||||
|
||||
namespace Content.Client.DeltaV.Overlays;
|
||||
|
||||
public sealed partial class PainOverlay : Overlay
|
||||
{
|
||||
[Dependency] private readonly IPrototypeManager _prototype = default!;
|
||||
[Dependency] private readonly IPlayerManager _player = default!;
|
||||
[Dependency] private readonly IEntityManager _entity = default!;
|
||||
|
||||
public override bool RequestScreenTexture => true;
|
||||
public override OverlaySpace Space => OverlaySpace.WorldSpace;
|
||||
private readonly ShaderInstance _painShader;
|
||||
private readonly ProtoId<ShaderPrototype> _shaderProto = "ChromaticAberration";
|
||||
|
||||
public PainOverlay()
|
||||
{
|
||||
IoCManager.InjectDependencies(this);
|
||||
_painShader = _prototype.Index(_shaderProto).Instance().Duplicate();
|
||||
}
|
||||
|
||||
protected override bool BeforeDraw(in OverlayDrawArgs args)
|
||||
{
|
||||
if (_player.LocalEntity is not { Valid: true } player
|
||||
|| !_entity.HasComponent<PainComponent>(player))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return base.BeforeDraw(in args);
|
||||
}
|
||||
|
||||
protected override void Draw(in OverlayDrawArgs args)
|
||||
{
|
||||
if (ScreenTexture is null)
|
||||
return;
|
||||
|
||||
_painShader.SetParameter("SCREEN_TEXTURE", ScreenTexture);
|
||||
|
||||
var worldHandle = args.WorldHandle;
|
||||
var viewport = args.WorldBounds;
|
||||
worldHandle.SetTransform(Matrix3x2.Identity);
|
||||
worldHandle.UseShader(_painShader);
|
||||
worldHandle.DrawRect(viewport, Color.White);
|
||||
worldHandle.UseShader(null);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,65 @@
|
|||
using Content.Shared.DeltaV.Pain;
|
||||
using Robust.Client.Graphics;
|
||||
using Robust.Shared.Player;
|
||||
|
||||
namespace Content.Client.DeltaV.Overlays;
|
||||
|
||||
public sealed partial class PainSystem : EntitySystem
|
||||
{
|
||||
[Dependency] private readonly IOverlayManager _overlayMan = default!;
|
||||
[Dependency] private readonly ISharedPlayerManager _playerMan = default!;
|
||||
|
||||
private PainOverlay _overlay = default!;
|
||||
|
||||
public override void Initialize()
|
||||
{
|
||||
base.Initialize();
|
||||
|
||||
SubscribeLocalEvent<PainComponent, ComponentInit>(OnPainInit);
|
||||
SubscribeLocalEvent<PainComponent, ComponentShutdown>(OnPainShutdown);
|
||||
SubscribeLocalEvent<PainComponent, LocalPlayerAttachedEvent>(OnPlayerAttached);
|
||||
SubscribeLocalEvent<PainComponent, LocalPlayerDetachedEvent>(OnPlayerDetached);
|
||||
|
||||
_overlay = new();
|
||||
}
|
||||
|
||||
private void OnPainInit(Entity<PainComponent> ent, ref ComponentInit args)
|
||||
{
|
||||
if (ent.Owner == _playerMan.LocalEntity && !ent.Comp.Suppressed)
|
||||
_overlayMan.AddOverlay(_overlay);
|
||||
}
|
||||
|
||||
private void OnPainShutdown(Entity<PainComponent> ent, ref ComponentShutdown args)
|
||||
{
|
||||
if (ent.Owner == _playerMan.LocalEntity)
|
||||
_overlayMan.RemoveOverlay(_overlay);
|
||||
}
|
||||
|
||||
private void OnPlayerAttached(Entity<PainComponent> ent, ref LocalPlayerAttachedEvent args)
|
||||
{
|
||||
if (!ent.Comp.Suppressed)
|
||||
_overlayMan.AddOverlay(_overlay);
|
||||
}
|
||||
|
||||
private void OnPlayerDetached(Entity<PainComponent> ent, ref LocalPlayerDetachedEvent args)
|
||||
{
|
||||
_overlayMan.RemoveOverlay(_overlay);
|
||||
}
|
||||
|
||||
public override void Update(float frameTime)
|
||||
{
|
||||
base.Update(frameTime);
|
||||
|
||||
// Handle showing/hiding overlay based on suppression status
|
||||
if (_playerMan.LocalEntity is not { } player)
|
||||
return;
|
||||
|
||||
if (!TryComp<PainComponent>(player, out var comp))
|
||||
return;
|
||||
|
||||
if (comp.Suppressed && _overlayMan.HasOverlay<PainOverlay>())
|
||||
_overlayMan.RemoveOverlay(_overlay);
|
||||
else if (!comp.Suppressed && !_overlayMan.HasOverlay<PainOverlay>())
|
||||
_overlayMan.AddOverlay(_overlay);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,65 @@
|
|||
using Content.Shared._EE.FootPrint;
|
||||
using Robust.Client.GameObjects;
|
||||
using Robust.Client.Graphics;
|
||||
using Robust.Shared.Random;
|
||||
|
||||
namespace Content.Client._EE.FootPrint;
|
||||
|
||||
public sealed class FootPrintsVisualizerSystem : VisualizerSystem<FootPrintComponent>
|
||||
{
|
||||
[Dependency] private readonly SharedAppearanceSystem _appearance = default!;
|
||||
[Dependency] private readonly IRobustRandom _random = default!;
|
||||
|
||||
public override void Initialize()
|
||||
{
|
||||
base.Initialize();
|
||||
|
||||
SubscribeLocalEvent<FootPrintComponent, ComponentInit>(OnInitialized);
|
||||
SubscribeLocalEvent<FootPrintComponent, ComponentShutdown>(OnShutdown);
|
||||
}
|
||||
|
||||
private void OnInitialized(EntityUid uid, FootPrintComponent comp, ComponentInit args)
|
||||
{
|
||||
if (!TryComp<SpriteComponent>(uid, out var sprite))
|
||||
return;
|
||||
|
||||
sprite.LayerMapReserveBlank(FootPrintVisualLayers.Print);
|
||||
UpdateAppearance(uid, comp, sprite);
|
||||
}
|
||||
|
||||
private void OnShutdown(EntityUid uid, FootPrintComponent comp, ComponentShutdown args)
|
||||
{
|
||||
if (TryComp<SpriteComponent>(uid, out var sprite)
|
||||
&& sprite.LayerMapTryGet(FootPrintVisualLayers.Print, out var layer))
|
||||
sprite.RemoveLayer(layer);
|
||||
}
|
||||
|
||||
private void UpdateAppearance(EntityUid uid, FootPrintComponent component, SpriteComponent sprite)
|
||||
{
|
||||
if (!sprite.LayerMapTryGet(FootPrintVisualLayers.Print, out var layer)
|
||||
|| !TryComp<FootPrintsComponent>(component.PrintOwner, out var printsComponent)
|
||||
|| !TryComp<AppearanceComponent>(uid, out var appearance)
|
||||
|| !_appearance.TryGetData<FootPrintVisuals>(uid, FootPrintVisualState.State, out var printVisuals, appearance))
|
||||
return;
|
||||
|
||||
sprite.LayerSetState(layer, new RSI.StateId(printVisuals switch
|
||||
{
|
||||
FootPrintVisuals.BareFootPrint => printsComponent.RightStep ? printsComponent.RightBarePrint : printsComponent.LeftBarePrint,
|
||||
FootPrintVisuals.ShoesPrint => printsComponent.ShoesPrint,
|
||||
FootPrintVisuals.SuitPrint => printsComponent.SuitPrint,
|
||||
FootPrintVisuals.Dragging => _random.Pick(printsComponent.DraggingPrint),
|
||||
_ => throw new ArgumentOutOfRangeException($"Unknown {printVisuals} parameter.")
|
||||
}), printsComponent.RsiPath);
|
||||
|
||||
if (_appearance.TryGetData<Color>(uid, FootPrintVisualState.Color, out var printColor, appearance))
|
||||
sprite.LayerSetColor(layer, printColor);
|
||||
}
|
||||
|
||||
protected override void OnAppearanceChange (EntityUid uid, FootPrintComponent component, ref AppearanceChangeEvent args)
|
||||
{
|
||||
if (args.Sprite is not { } sprite)
|
||||
return;
|
||||
|
||||
UpdateAppearance(uid, component, sprite);
|
||||
}
|
||||
}
|
||||
|
|
@ -30,6 +30,19 @@ public sealed class AddictionSystem : SharedAddictionSystem
|
|||
SubscribeLocalEvent<AddictedComponent, ComponentStartup>(OnInit);
|
||||
}
|
||||
|
||||
protected override void UpdateAddictionSuppression(Entity<AddictedComponent> ent, float duration)
|
||||
{
|
||||
var curTime = _timing.CurTime;
|
||||
var newEndTime = curTime + TimeSpan.FromSeconds(duration);
|
||||
|
||||
// Only update if this would extend the suppression
|
||||
if (newEndTime <= ent.Comp.SuppressionEndTime)
|
||||
return;
|
||||
|
||||
ent.Comp.SuppressionEndTime = newEndTime;
|
||||
UpdateSuppressed(ent.Comp);
|
||||
}
|
||||
|
||||
public override void Update(float frameTime)
|
||||
{
|
||||
base.Update(frameTime);
|
||||
|
|
|
|||
|
|
@ -7,19 +7,20 @@ namespace Content.Server.EntityEffects.Effects;
|
|||
public sealed partial class Addicted : EntityEffect
|
||||
{
|
||||
/// <summary>
|
||||
/// How long should each metabolism cycle make the effect last for.
|
||||
/// How long should each metabolism cycle make the effect last for.
|
||||
/// </summary>
|
||||
[DataField]
|
||||
public float AddictionTime = 3f;
|
||||
public float AddictionTime = 5f;
|
||||
|
||||
protected override string? ReagentEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys)
|
||||
protected override string ReagentEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys)
|
||||
=> Loc.GetString("reagent-effect-guidebook-addicted", ("chance", Probability));
|
||||
|
||||
public override void Effect(EntityEffectBaseArgs args)
|
||||
{
|
||||
var addictionTime = AddictionTime;
|
||||
|
||||
if (args is EntityEffectReagentArgs reagentArgs) {
|
||||
if (args is EntityEffectReagentArgs reagentArgs)
|
||||
{
|
||||
addictionTime *= reagentArgs.Scale.Float();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,30 @@
|
|||
using Content.Shared.DeltaV.Pain;
|
||||
using Content.Shared.EntityEffects;
|
||||
using Robust.Shared.Prototypes;
|
||||
|
||||
namespace Content.Server.EntityEffects.Effects;
|
||||
|
||||
public sealed partial class InPain : EntityEffect
|
||||
{
|
||||
/// <summary>
|
||||
/// How long should each metabolism cycle make the effect last for.
|
||||
/// </summary>
|
||||
[DataField]
|
||||
public float PainTime = 5f;
|
||||
|
||||
protected override string? ReagentEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys)
|
||||
=> Loc.GetString("reagent-effect-guidebook-addicted", ("chance", Probability));
|
||||
|
||||
public override void Effect(EntityEffectBaseArgs args)
|
||||
{
|
||||
var painTime = PainTime;
|
||||
|
||||
if (args is EntityEffectReagentArgs reagentArgs)
|
||||
{
|
||||
painTime *= reagentArgs.Scale.Float();
|
||||
}
|
||||
|
||||
var painSystem = args.EntityManager.System<SharedPainSystem>();
|
||||
painSystem.TryApplyPain(args.TargetEntity, painTime);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,31 @@
|
|||
using Content.Shared.DeltaV.Addictions;
|
||||
using Content.Shared.EntityEffects;
|
||||
using Robust.Shared.Prototypes;
|
||||
|
||||
namespace Content.Server.EntityEffects.Effects;
|
||||
|
||||
public sealed partial class SuppressAddiction : EntityEffect
|
||||
{
|
||||
/// <summary>
|
||||
/// How long should the addiction suppression last for each metabolism cycle
|
||||
/// </summary>
|
||||
[DataField]
|
||||
public float SuppressionTime = 30f;
|
||||
|
||||
protected override string ReagentEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys)
|
||||
=> Loc.GetString("reagent-effect-guidebook-addiction-suppression",
|
||||
("chance", Probability));
|
||||
|
||||
public override void Effect(EntityEffectBaseArgs args)
|
||||
{
|
||||
var suppressionTime = SuppressionTime;
|
||||
|
||||
if (args is EntityEffectReagentArgs reagentArgs)
|
||||
{
|
||||
suppressionTime *= reagentArgs.Scale.Float();
|
||||
}
|
||||
|
||||
var addictionSystem = args.EntityManager.System<SharedAddictionSystem>();
|
||||
addictionSystem.TrySuppressAddiction(args.TargetEntity, suppressionTime);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,38 @@
|
|||
using Content.Shared.DeltaV.Pain;
|
||||
using Content.Shared.EntityEffects;
|
||||
using Robust.Shared.Prototypes;
|
||||
|
||||
namespace Content.Server.EntityEffects.Effects;
|
||||
|
||||
public sealed partial class SuppressPain : EntityEffect
|
||||
{
|
||||
/// <summary>
|
||||
/// How long should the pain suppression last for each metabolism cycle
|
||||
/// </summary>
|
||||
[DataField]
|
||||
public float SuppressionTime = 30f;
|
||||
|
||||
/// <summary>
|
||||
/// The strength level of the pain suppression
|
||||
/// </summary>
|
||||
[DataField]
|
||||
public PainSuppressionLevel SuppressionLevel = PainSuppressionLevel.Normal;
|
||||
|
||||
protected override string ReagentEffectGuidebookText(IPrototypeManager prototype, IEntitySystemManager entSys)
|
||||
=> Loc.GetString("reagent-effect-guidebook-pain-suppression",
|
||||
("chance", Probability),
|
||||
("level", SuppressionLevel.ToString().ToLowerInvariant()));
|
||||
|
||||
public override void Effect(EntityEffectBaseArgs args)
|
||||
{
|
||||
var suppressionTime = SuppressionTime;
|
||||
|
||||
if (args is EntityEffectReagentArgs reagentArgs)
|
||||
{
|
||||
suppressionTime *= reagentArgs.Scale.Float();
|
||||
}
|
||||
|
||||
var painSystem = args.EntityManager.System<SharedPainSystem>();
|
||||
painSystem.TrySuppressPain(args.TargetEntity, suppressionTime, SuppressionLevel);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,90 @@
|
|||
using Content.Shared.DeltaV.Pain;
|
||||
using Content.Shared.Popups;
|
||||
using Robust.Shared.Prototypes;
|
||||
using Robust.Shared.Random;
|
||||
using Robust.Shared.Timing;
|
||||
|
||||
namespace Content.Server.DeltaV.Pain;
|
||||
|
||||
public sealed class PainSystem : SharedPainSystem
|
||||
{
|
||||
[Dependency] private readonly IGameTiming _timing = default!;
|
||||
[Dependency] private readonly IPrototypeManager _prototype = default!;
|
||||
[Dependency] private readonly IRobustRandom _random = default!;
|
||||
[Dependency] private readonly SharedPopupSystem _popup = default!;
|
||||
|
||||
public override void Initialize()
|
||||
{
|
||||
base.Initialize();
|
||||
SubscribeLocalEvent<PainComponent, MapInitEvent>(OnMapInit);
|
||||
}
|
||||
|
||||
private void OnMapInit(Entity<PainComponent> ent, ref MapInitEvent args)
|
||||
{
|
||||
ent.Comp.NextUpdateTime = _timing.CurTime;
|
||||
ent.Comp.NextPopupTime = _timing.CurTime;
|
||||
}
|
||||
|
||||
protected override void UpdatePainSuppression(Entity<PainComponent> ent, float duration, PainSuppressionLevel level)
|
||||
{
|
||||
var curTime = _timing.CurTime;
|
||||
var newEndTime = curTime + TimeSpan.FromSeconds(duration);
|
||||
|
||||
// Only update if this would extend the suppression
|
||||
if (newEndTime <= ent.Comp.SuppressionEndTime)
|
||||
return;
|
||||
|
||||
ent.Comp.LastPainkillerTime = curTime;
|
||||
ent.Comp.SuppressionEndTime = newEndTime;
|
||||
UpdateSuppressed(ent);
|
||||
}
|
||||
|
||||
private void UpdateSuppressed(Entity<PainComponent> ent)
|
||||
{
|
||||
ent.Comp.Suppressed = (_timing.CurTime < ent.Comp.SuppressionEndTime);
|
||||
Dirty(ent);
|
||||
}
|
||||
|
||||
private void ShowPainPopup(Entity<PainComponent> ent)
|
||||
{
|
||||
if (!_prototype.TryIndex(ent.Comp.DatasetPrototype, out var dataset))
|
||||
return;
|
||||
|
||||
var effects = dataset.Values;
|
||||
if (effects.Count == 0)
|
||||
return;
|
||||
|
||||
var effect = _random.Pick(effects);
|
||||
_popup.PopupEntity(Loc.GetString(effect), ent.Owner);
|
||||
|
||||
// Set next popup time
|
||||
var delay = _random.NextFloat(ent.Comp.MinimumPopupDelay, ent.Comp.MaximumPopupDelay);
|
||||
ent.Comp.NextPopupTime = _timing.CurTime + TimeSpan.FromSeconds(delay);
|
||||
}
|
||||
|
||||
public override void Update(float frameTime)
|
||||
{
|
||||
base.Update(frameTime);
|
||||
|
||||
var curTime = _timing.CurTime;
|
||||
var query = EntityQueryEnumerator<PainComponent>();
|
||||
|
||||
while (query.MoveNext(out var uid, out var component))
|
||||
{
|
||||
if (curTime < component.NextUpdateTime)
|
||||
continue;
|
||||
|
||||
var ent = new Entity<PainComponent>(uid, component);
|
||||
|
||||
if (component.Suppressed)
|
||||
{
|
||||
UpdateSuppressed(ent);
|
||||
}
|
||||
else if (curTime >= component.NextPopupTime)
|
||||
{
|
||||
ShowPainPopup(ent);
|
||||
}
|
||||
component.NextUpdateTime = curTime + TimeSpan.FromSeconds(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -5,12 +5,14 @@ using Content.Server.Power.EntitySystems; // Frontier
|
|||
using Content.Shared.Interaction; // Frontier
|
||||
using Content.Shared.Examine; // Frontier
|
||||
using Content.Shared.Power; // Frontier
|
||||
using Content.Server.Popups; // Frontier
|
||||
using Robust.Shared.Map;
|
||||
|
||||
namespace Content.Server.Weapons.Ranged.Systems;
|
||||
|
||||
public sealed partial class GunSystem
|
||||
{
|
||||
[Dependency] public PopupSystem _popup = default!; // Frontier
|
||||
public override void Update(float frameTime)
|
||||
{
|
||||
base.Update(frameTime);
|
||||
|
|
@ -50,9 +52,6 @@ public sealed partial class GunSystem
|
|||
// This code is licensed under AGPLv3. See AGPLv3.txt
|
||||
private void OnGunExamine(EntityUid uid, AutoShootGunComponent component, ExaminedEvent args)
|
||||
{
|
||||
if (!HasComp<ApcPowerReceiverComponent>(uid))
|
||||
return;
|
||||
|
||||
// Powered is already handled by other power components
|
||||
var enabled = Loc.GetString(component.On ? "gun-comp-enabled" : "gun-comp-disabled");
|
||||
|
||||
|
|
@ -73,6 +72,7 @@ public sealed partial class GunSystem
|
|||
|
||||
DisableGun(uid, component);
|
||||
args.Handled = true;
|
||||
_popup.PopupEntity(Loc.GetString("auto-fire-disabled"), uid, args.User);
|
||||
}
|
||||
else if (CanEnable(uid, component))
|
||||
{
|
||||
|
|
@ -81,6 +81,11 @@ public sealed partial class GunSystem
|
|||
|
||||
EnableGun(uid, component);
|
||||
args.Handled = true;
|
||||
_popup.PopupEntity(Loc.GetString("auto-fire-enabled"), uid, args.User);
|
||||
}
|
||||
else
|
||||
{
|
||||
_popup.PopupEntity(Loc.GetString("auto-fire-enabled-no-power"), uid, args.User);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,122 @@
|
|||
using Content.Server.Atmos.Components;
|
||||
using Content.Shared._EE.FootPrint;
|
||||
using Content.Shared.Inventory;
|
||||
using Content.Shared.Mobs;
|
||||
using Content.Shared.Mobs.Components;
|
||||
using Content.Shared._EE.FootPrint;
|
||||
// using Content.Shared.Standing;
|
||||
using Content.Shared.Chemistry.Components.SolutionManager;
|
||||
using Content.Shared.Chemistry.EntitySystems;
|
||||
using Robust.Shared.Map;
|
||||
using Robust.Shared.Random;
|
||||
|
||||
namespace Content.Server._EE.FootPrint;
|
||||
|
||||
public sealed class FootPrintsSystem : EntitySystem
|
||||
{
|
||||
[Dependency] private readonly IRobustRandom _random = default!;
|
||||
[Dependency] private readonly InventorySystem _inventory = default!;
|
||||
[Dependency] private readonly IMapManager _map = default!;
|
||||
|
||||
[Dependency] private readonly SharedSolutionContainerSystem _solution = default!;
|
||||
[Dependency] private readonly SharedAppearanceSystem _appearance = default!;
|
||||
[Dependency] private readonly SharedTransformSystem _transform = default!;
|
||||
|
||||
private EntityQuery<TransformComponent> _transformQuery;
|
||||
private EntityQuery<MobThresholdsComponent> _mobThresholdQuery;
|
||||
private EntityQuery<AppearanceComponent> _appearanceQuery;
|
||||
// private EntityQuery<LayingDownComponent> _layingQuery;
|
||||
|
||||
public override void Initialize()
|
||||
{
|
||||
base.Initialize();
|
||||
|
||||
_transformQuery = GetEntityQuery<TransformComponent>();
|
||||
_mobThresholdQuery = GetEntityQuery<MobThresholdsComponent>();
|
||||
_appearanceQuery = GetEntityQuery<AppearanceComponent>();
|
||||
// _layingQuery = GetEntityQuery<LayingDownComponent>();
|
||||
|
||||
SubscribeLocalEvent<FootPrintsComponent, ComponentStartup>(OnStartupComponent);
|
||||
SubscribeLocalEvent<FootPrintsComponent, MoveEvent>(OnMove);
|
||||
}
|
||||
|
||||
private void OnStartupComponent(EntityUid uid, FootPrintsComponent component, ComponentStartup args)
|
||||
{
|
||||
component.StepSize = Math.Max(0f, component.StepSize + _random.NextFloat(-0.05f, 0.05f));
|
||||
}
|
||||
|
||||
private void OnMove(EntityUid uid, FootPrintsComponent component, ref MoveEvent args)
|
||||
{
|
||||
if (component.PrintsColor.A <= 0f
|
||||
|| !_transformQuery.TryComp(uid, out var transform)
|
||||
|| !_mobThresholdQuery.TryComp(uid, out var mobThreshHolds)
|
||||
|| !_map.TryFindGridAt(_transform.GetMapCoordinates((uid, transform)), out var gridUid, out _))
|
||||
return;
|
||||
|
||||
var dragging = mobThreshHolds.CurrentThresholdState is MobState.Critical or MobState.Dead;
|
||||
var distance = (transform.LocalPosition - component.StepPos).Length();
|
||||
var stepSize = dragging ? component.DragSize : component.StepSize;
|
||||
|
||||
if (!(distance > stepSize))
|
||||
return;
|
||||
|
||||
component.RightStep = !component.RightStep;
|
||||
|
||||
var entity = Spawn(component.StepProtoId, CalcCoords(gridUid, component, transform, dragging));
|
||||
var footPrintComponent = EnsureComp<FootPrintComponent>(entity);
|
||||
|
||||
footPrintComponent.PrintOwner = uid;
|
||||
Dirty(entity, footPrintComponent);
|
||||
|
||||
if (_appearanceQuery.TryComp(entity, out var appearance))
|
||||
{
|
||||
_appearance.SetData(entity, FootPrintVisualState.State, PickState(uid, dragging), appearance);
|
||||
_appearance.SetData(entity, FootPrintVisualState.Color, component.PrintsColor, appearance);
|
||||
}
|
||||
|
||||
if (!_transformQuery.TryComp(entity, out var stepTransform))
|
||||
return;
|
||||
|
||||
stepTransform.LocalRotation = dragging
|
||||
? (transform.LocalPosition - component.StepPos).ToAngle() + Angle.FromDegrees(-90f)
|
||||
: transform.LocalRotation + Angle.FromDegrees(180f);
|
||||
|
||||
component.PrintsColor = component.PrintsColor.WithAlpha(Math.Max(0f, component.PrintsColor.A - component.ColorReduceAlpha));
|
||||
component.StepPos = transform.LocalPosition;
|
||||
|
||||
if (!TryComp<SolutionContainerManagerComponent>(entity, out var solutionContainer)
|
||||
|| !_solution.ResolveSolution((entity, solutionContainer), footPrintComponent.SolutionName, ref footPrintComponent.Solution, out var solution)
|
||||
|| string.IsNullOrWhiteSpace(component.ReagentToTransfer) || solution.Volume >= 1)
|
||||
return;
|
||||
|
||||
_solution.TryAddReagent(footPrintComponent.Solution.Value, component.ReagentToTransfer, 1, out _);
|
||||
}
|
||||
|
||||
private EntityCoordinates CalcCoords(EntityUid uid, FootPrintsComponent component, TransformComponent transform, bool state)
|
||||
{
|
||||
if (state)
|
||||
return new EntityCoordinates(uid, transform.LocalPosition);
|
||||
|
||||
var offset = component.RightStep
|
||||
? new Angle(Angle.FromDegrees(180f) + transform.LocalRotation).RotateVec(component.OffsetPrint)
|
||||
: new Angle(transform.LocalRotation).RotateVec(component.OffsetPrint);
|
||||
|
||||
return new EntityCoordinates(uid, transform.LocalPosition + offset);
|
||||
}
|
||||
|
||||
private FootPrintVisuals PickState(EntityUid uid, bool dragging)
|
||||
{
|
||||
var state = FootPrintVisuals.BareFootPrint;
|
||||
|
||||
if (_inventory.TryGetSlotEntity(uid, "shoes", out _))
|
||||
state = FootPrintVisuals.ShoesPrint;
|
||||
|
||||
if (_inventory.TryGetSlotEntity(uid, "outerClothing", out var suit) && TryComp<PressureProtectionComponent>(suit, out _))
|
||||
state = FootPrintVisuals.SuitPrint;
|
||||
|
||||
if (dragging)
|
||||
state = FootPrintVisuals.Dragging;
|
||||
|
||||
return state;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,52 @@
|
|||
using System.Linq;
|
||||
using Content.Shared._EE.FootPrint;
|
||||
using Content.Shared.Chemistry.Components.SolutionManager;
|
||||
using Content.Shared.Chemistry.EntitySystems;
|
||||
using Content.Shared.Fluids;
|
||||
using Content.Shared.Fluids.Components;
|
||||
using Robust.Shared.Physics.Events;
|
||||
|
||||
namespace Content.Server._EE.FootPrint;
|
||||
|
||||
public sealed class PuddleFootPrintsSystem : EntitySystem
|
||||
{
|
||||
[Dependency] private readonly SharedAppearanceSystem _appearance = default!;
|
||||
[Dependency] private readonly SharedSolutionContainerSystem _solutionContainer = default!;
|
||||
|
||||
public override void Initialize()
|
||||
{
|
||||
base.Initialize();
|
||||
SubscribeLocalEvent<PuddleFootPrintsComponent, EndCollideEvent>(OnStepTrigger);
|
||||
}
|
||||
|
||||
private void OnStepTrigger(EntityUid uid, PuddleFootPrintsComponent component, ref EndCollideEvent args)
|
||||
{
|
||||
if (!TryComp<AppearanceComponent>(uid, out var appearance)
|
||||
|| !TryComp<PuddleComponent>(uid, out var puddle)
|
||||
|| !TryComp<FootPrintsComponent>(args.OtherEntity, out var tripper)
|
||||
|| !TryComp<SolutionContainerManagerComponent>(uid, out var solutionManager)
|
||||
|| !_solutionContainer.ResolveSolution((uid, solutionManager), puddle.SolutionName, ref puddle.Solution, out var solutions))
|
||||
return;
|
||||
|
||||
var totalSolutionQuantity = solutions.Contents.Sum(sol => (float) sol.Quantity);
|
||||
var waterQuantity = (from sol in solutions.Contents where sol.Reagent.Prototype == "Water" select (float) sol.Quantity).FirstOrDefault();
|
||||
|
||||
if (waterQuantity / (totalSolutionQuantity / 100f) > component.OffPercent || solutions.Contents.Count <= 0)
|
||||
return;
|
||||
|
||||
tripper.ReagentToTransfer =
|
||||
solutions.Contents.Aggregate((l, r) => l.Quantity > r.Quantity ? l : r).Reagent.Prototype;
|
||||
|
||||
if (_appearance.TryGetData(uid, PuddleVisuals.SolutionColor, out var color, appearance)
|
||||
&& _appearance.TryGetData(uid, PuddleVisuals.CurrentVolume, out var volume, appearance))
|
||||
AddColor((Color) color, (float) volume * component.SizeRatio, tripper);
|
||||
|
||||
_solutionContainer.RemoveEachReagent(puddle.Solution.Value, 1);
|
||||
}
|
||||
|
||||
private void AddColor(Color col, float quantity, FootPrintsComponent component)
|
||||
{
|
||||
component.PrintsColor = component.ColorQuantity == 0f ? col : Color.InterpolateBetween(component.PrintsColor, col, component.ColorInterpolationFactor);
|
||||
component.ColorQuantity += quantity;
|
||||
}
|
||||
}
|
||||
|
|
@ -27,4 +27,17 @@ public abstract class SharedAddictionSystem : EntitySystem
|
|||
_statusEffects.TryAddTime(uid, StatusEffectKey, TimeSpan.FromSeconds(addictionTime), status);
|
||||
}
|
||||
}
|
||||
|
||||
public virtual void TrySuppressAddiction(EntityUid uid, float duration)
|
||||
{
|
||||
if (!TryComp<AddictedComponent>(uid, out var comp))
|
||||
return;
|
||||
|
||||
var ent = new Entity<AddictedComponent>(uid, comp);
|
||||
UpdateAddictionSuppression(ent, duration);
|
||||
}
|
||||
|
||||
protected virtual void UpdateAddictionSuppression(Entity<AddictedComponent> ent, float duration)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,69 @@
|
|||
using Content.Shared.Dataset;
|
||||
using Robust.Shared.GameStates;
|
||||
using Robust.Shared.Prototypes;
|
||||
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom;
|
||||
|
||||
namespace Content.Shared.DeltaV.Pain;
|
||||
|
||||
[RegisterComponent, NetworkedComponent]
|
||||
[AutoGenerateComponentState, AutoGenerateComponentPause]
|
||||
public sealed partial class PainComponent : Component
|
||||
{
|
||||
/// <summary>
|
||||
/// Whether pain effects are currently suppressed by painkillers
|
||||
/// </summary>
|
||||
[DataField, AutoNetworkedField]
|
||||
public bool Suppressed;
|
||||
|
||||
/// <summary>
|
||||
/// The current level of pain suppression
|
||||
/// </summary>
|
||||
[DataField]
|
||||
public PainSuppressionLevel CurrentSuppressionLevel = PainSuppressionLevel.Normal;
|
||||
|
||||
/// <summary>
|
||||
/// The last time painkillers were administered
|
||||
/// </summary>
|
||||
[DataField(customTypeSerializer: typeof(TimeOffsetSerializer))]
|
||||
[AutoPausedField]
|
||||
public TimeSpan LastPainkillerTime;
|
||||
|
||||
/// <summary>
|
||||
/// When the pain suppression effect ends
|
||||
/// </summary>
|
||||
[DataField(customTypeSerializer: typeof(TimeOffsetSerializer))]
|
||||
[AutoPausedField]
|
||||
public TimeSpan SuppressionEndTime;
|
||||
|
||||
/// <summary>
|
||||
/// When to next update this component
|
||||
/// </summary>
|
||||
[DataField(customTypeSerializer: typeof(TimeOffsetSerializer))]
|
||||
[AutoPausedField]
|
||||
public TimeSpan NextUpdateTime;
|
||||
|
||||
/// <summary>
|
||||
/// When to show the next pain effect popup
|
||||
/// </summary>
|
||||
[DataField(customTypeSerializer: typeof(TimeOffsetSerializer))]
|
||||
[AutoPausedField]
|
||||
public TimeSpan NextPopupTime;
|
||||
|
||||
/// <summary>
|
||||
/// The dataset of pain effect messages to display
|
||||
/// </summary>
|
||||
[DataField]
|
||||
public ProtoId<LocalizedDatasetPrototype> DatasetPrototype = "PainEffects";
|
||||
|
||||
/// <summary>
|
||||
/// Minimum time between pain popups in seconds
|
||||
/// </summary>
|
||||
[DataField]
|
||||
public float MinimumPopupDelay = 1f;
|
||||
|
||||
/// <summary>
|
||||
/// Maximum time between pain popups in seconds
|
||||
/// </summary>
|
||||
[DataField]
|
||||
public float MaximumPopupDelay = 40f;
|
||||
}
|
||||
|
|
@ -0,0 +1,44 @@
|
|||
using Content.Shared.StatusEffect;
|
||||
using Robust.Shared.Prototypes;
|
||||
|
||||
namespace Content.Shared.DeltaV.Pain;
|
||||
|
||||
public abstract class SharedPainSystem : EntitySystem
|
||||
{
|
||||
[Dependency] private readonly StatusEffectsSystem _statusEffects = default!;
|
||||
|
||||
public ProtoId<StatusEffectPrototype> StatusEffectKey = "InPain";
|
||||
|
||||
protected abstract void UpdatePainSuppression(Entity<PainComponent> ent, float duration, PainSuppressionLevel level);
|
||||
|
||||
public virtual void TryApplyPain(EntityUid uid, float painTime, StatusEffectsComponent? status = null)
|
||||
{
|
||||
if (!Resolve(uid, ref status, false))
|
||||
return;
|
||||
|
||||
if (!_statusEffects.HasStatusEffect(uid, StatusEffectKey, status))
|
||||
{
|
||||
_statusEffects.TryAddStatusEffect<PainComponent>(uid, StatusEffectKey, TimeSpan.FromSeconds(painTime), true, status);
|
||||
}
|
||||
else
|
||||
{
|
||||
_statusEffects.TryAddTime(uid, StatusEffectKey, TimeSpan.FromSeconds(painTime), status);
|
||||
}
|
||||
}
|
||||
|
||||
public virtual void TrySuppressPain(EntityUid uid, float duration, PainSuppressionLevel level = PainSuppressionLevel.Normal)
|
||||
{
|
||||
if (!TryComp<PainComponent>(uid, out var comp))
|
||||
return;
|
||||
|
||||
UpdatePainSuppression((uid, comp), duration, level);
|
||||
}
|
||||
}
|
||||
|
||||
// Used by the StatusEffect
|
||||
public enum PainSuppressionLevel : byte
|
||||
{
|
||||
Mild,
|
||||
Normal,
|
||||
Strong,
|
||||
}
|
||||
|
|
@ -0,0 +1,23 @@
|
|||
using Content.Shared.Chemistry.Components;
|
||||
using Robust.Shared.GameStates;
|
||||
|
||||
namespace Content.Shared._EE.FootPrint;
|
||||
|
||||
/// <summary>
|
||||
/// This is used for marking footsteps, handling footprint drawing.
|
||||
/// </summary>
|
||||
[RegisterComponent, NetworkedComponent, AutoGenerateComponentState]
|
||||
public sealed partial class FootPrintComponent : Component
|
||||
{
|
||||
/// <summary>
|
||||
/// Owner (with <see cref="FootPrintsComponent"/>) of a print (this component).
|
||||
/// </summary>
|
||||
[AutoNetworkedField]
|
||||
public EntityUid PrintOwner;
|
||||
|
||||
[DataField]
|
||||
public string SolutionName = "step";
|
||||
|
||||
[DataField]
|
||||
public Entity<SolutionComponent>? Solution;
|
||||
}
|
||||
|
|
@ -0,0 +1,25 @@
|
|||
using Robust.Shared.Serialization;
|
||||
|
||||
namespace Content.Shared._EE.FootPrint;
|
||||
|
||||
[Serializable, NetSerializable]
|
||||
public enum FootPrintVisuals : byte
|
||||
{
|
||||
BareFootPrint,
|
||||
ShoesPrint,
|
||||
SuitPrint,
|
||||
Dragging
|
||||
}
|
||||
|
||||
[Serializable, NetSerializable]
|
||||
public enum FootPrintVisualState : byte
|
||||
{
|
||||
State,
|
||||
Color
|
||||
}
|
||||
|
||||
[Serializable, NetSerializable]
|
||||
public enum FootPrintVisualLayers : byte
|
||||
{
|
||||
Print
|
||||
}
|
||||
|
|
@ -0,0 +1,88 @@
|
|||
using System.Numerics;
|
||||
using Robust.Shared.Prototypes;
|
||||
using Robust.Shared.Utility;
|
||||
|
||||
namespace Content.Shared._EE.FootPrint;
|
||||
|
||||
[RegisterComponent]
|
||||
public sealed partial class FootPrintsComponent : Component
|
||||
{
|
||||
[ViewVariables(VVAccess.ReadOnly), DataField]
|
||||
public ResPath RsiPath = new("/Textures/_EE/Effects/footprints.rsi"); //DeltaV moved to its own space
|
||||
|
||||
// all of those are set as a layer
|
||||
[ViewVariables(VVAccess.ReadOnly), DataField]
|
||||
public string LeftBarePrint = "footprint-left-bare-human";
|
||||
|
||||
[ViewVariables(VVAccess.ReadOnly), DataField]
|
||||
public string RightBarePrint = "footprint-right-bare-human";
|
||||
|
||||
[ViewVariables(VVAccess.ReadOnly), DataField]
|
||||
public string ShoesPrint = "footprint-shoes";
|
||||
|
||||
[ViewVariables(VVAccess.ReadOnly), DataField]
|
||||
public string SuitPrint = "footprint-suit";
|
||||
|
||||
[ViewVariables(VVAccess.ReadOnly), DataField]
|
||||
public string[] DraggingPrint =
|
||||
[
|
||||
"dragging-1",
|
||||
"dragging-2",
|
||||
"dragging-3",
|
||||
"dragging-4",
|
||||
"dragging-5",
|
||||
];
|
||||
// yea, those
|
||||
|
||||
[ViewVariables(VVAccess.ReadOnly), DataField]
|
||||
public EntProtoId<FootPrintComponent> StepProtoId = "Footstep";
|
||||
|
||||
[ViewVariables(VVAccess.ReadOnly), DataField]
|
||||
public Color PrintsColor = Color.FromHex("#00000000");
|
||||
|
||||
/// <summary>
|
||||
/// The size scaling factor for footprint steps. Must be positive.
|
||||
/// </summary>
|
||||
[DataField]
|
||||
public float StepSize = 0.7f;
|
||||
|
||||
/// <summary>
|
||||
/// The size scaling factor for drag marks. Must be positive.
|
||||
/// </summary>
|
||||
[DataField]
|
||||
public float DragSize = 0.5f;
|
||||
|
||||
/// <summary>
|
||||
/// The amount of color to transfer from the source (e.g., puddle) to the footprint.
|
||||
/// </summary>
|
||||
[DataField]
|
||||
public float ColorQuantity;
|
||||
|
||||
/// <summary>
|
||||
/// The factor by which the alpha channel is reduced in subsequent footprints.
|
||||
/// </summary>
|
||||
[DataField]
|
||||
public float ColorReduceAlpha = 0.1f;
|
||||
|
||||
[DataField]
|
||||
public string? ReagentToTransfer;
|
||||
|
||||
[DataField]
|
||||
public Vector2 OffsetPrint = new(0.1f, 0f);
|
||||
|
||||
/// <summary>
|
||||
/// Tracks which foot should make the next print. True for right foot, false for left.
|
||||
/// </summary>
|
||||
public bool RightStep = true;
|
||||
|
||||
/// <summary>
|
||||
/// The position of the last footprint in world coordinates.
|
||||
/// </summary>
|
||||
public Vector2 StepPos = Vector2.Zero;
|
||||
|
||||
/// <summary>
|
||||
/// Controls how quickly the footprint color transitions between steps.
|
||||
/// Value between 0 and 1, where higher values mean faster color changes.
|
||||
/// </summary>
|
||||
public float ColorInterpolationFactor = 0.2f;
|
||||
}
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
namespace Content.Shared._EE.FootPrint;
|
||||
|
||||
[RegisterComponent]
|
||||
public sealed partial class PuddleFootPrintsComponent : Component
|
||||
{
|
||||
[ViewVariables()]
|
||||
public float SizeRatio = 0.2f;
|
||||
|
||||
[ViewVariables()]
|
||||
public float OffPercent = 80f;
|
||||
}
|
||||
|
|
@ -21,6 +21,11 @@
|
|||
copyright: "DOS=HIGH, UMB by MASTER BOOT RECORD may be used non-commercially in the Delta-V fork of SS14. Converted from FLAC to OGG, then converted to mono."
|
||||
source: "https://masterbootrecord.bandcamp.com/album/c-edit-config-sys"
|
||||
|
||||
- files: ["deck_the_halls_b-MONO.ogg"]
|
||||
license: "CC-BY-SA-4.0"
|
||||
copyright: "Deck the Halls B Kevin MacLeod, mixed down to mono"
|
||||
source: "https://incompetech.com/music/royalty-free/mp3-royaltyfree/Deck%20the%20Halls%20B.mp3"
|
||||
|
||||
- files: ["drozerix_-_alone.xm-MONO.ogg"]
|
||||
license: "Custom"
|
||||
copyright: "Alone by Drozerix, converted to mono"
|
||||
|
|
|
|||
|
|
@ -112,4 +112,9 @@
|
|||
license: "CC0-1.0"
|
||||
copyright: "Get It Done by A-Guy, converted from mp3 to OGG"
|
||||
source: "https://github.com/A-Guy173/Music/blob/main/getitdone.mp3"
|
||||
|
||||
- files: ["Undefined_Theory.ogg"]
|
||||
license: "CC0-1.0"
|
||||
copyright: "Undefined Theory by A-Guy, converted to OGG"
|
||||
source: "https://www.youtube.com/watch?v=FIOs2t84MKo"
|
||||
|
||||
|
|
@ -1,49 +1,4 @@
|
|||
Entries:
|
||||
- author: Adrian16199
|
||||
changes:
|
||||
- message: Gives shoukou an oxygen miner until air actualy works.
|
||||
type: Fix
|
||||
id: 185
|
||||
time: '2023-12-28T21:38:57.0000000+00:00'
|
||||
- author: Master2112
|
||||
changes:
|
||||
- message: Crime Assist program to Security and Lawyer PDA's, to help identify a
|
||||
crime with a simple yes/no question tree.
|
||||
type: Add
|
||||
id: 186
|
||||
time: '2023-12-29T19:34:56.0000000+00:00'
|
||||
- author: ps3moira
|
||||
changes:
|
||||
- message: Added Scottish Trait.
|
||||
type: Add
|
||||
- message: Added Kilt to Theatervend.
|
||||
type: Add
|
||||
id: 187
|
||||
time: '2023-12-29T19:44:44.0000000+00:00'
|
||||
- author: deltanedas
|
||||
changes:
|
||||
- message: Mail no longer has throwing damage.
|
||||
type: Tweak
|
||||
id: 188
|
||||
time: '2023-12-29T19:53:10.0000000+00:00'
|
||||
- author: Velcroboy
|
||||
changes:
|
||||
- message: Space winter is officially over!
|
||||
type: Remove
|
||||
id: 189
|
||||
time: '2023-12-30T14:15:42.0000000+00:00'
|
||||
- author: Master2112
|
||||
changes:
|
||||
- message: Fixed incorrect reference to ftl in crimeassist yaml
|
||||
type: Fix
|
||||
id: 190
|
||||
time: '2023-12-30T22:03:53.0000000+00:00'
|
||||
- author: Adrian16199
|
||||
changes:
|
||||
- message: Added a fluffy tail for the felinids.
|
||||
type: Add
|
||||
id: 191
|
||||
time: '2023-12-30T22:05:52.0000000+00:00'
|
||||
- author: DarkenedSynergy
|
||||
changes:
|
||||
- message: Fixed logistics airlocks looking like engineering airlocks when opened.
|
||||
|
|
@ -3739,3 +3694,56 @@
|
|||
id: 684
|
||||
time: '2024-11-18T17:05:11.0000000+00:00'
|
||||
url: https://github.com/DeltaV-Station/Delta-v/pull/2226
|
||||
- author: Lyndomen, SleepyApril
|
||||
changes:
|
||||
- message: Normal kill targets now just need to be killed once- but it needs to
|
||||
teach them a lesson that will be remembered
|
||||
type: Tweak
|
||||
id: 685
|
||||
time: '2024-11-19T03:58:49.0000000+00:00'
|
||||
url: https://github.com/DeltaV-Station/Delta-v/pull/2225
|
||||
- author: Lyndomen
|
||||
changes:
|
||||
- message: Added holiday cheer
|
||||
type: Add
|
||||
id: 686
|
||||
time: '2024-11-19T05:46:09.0000000+00:00'
|
||||
url: https://github.com/DeltaV-Station/Delta-v/pull/2233
|
||||
- author: Kr8art
|
||||
changes:
|
||||
- message: New mail-themed poster!
|
||||
type: Add
|
||||
id: 687
|
||||
time: '2024-11-19T17:23:49.0000000+00:00'
|
||||
url: https://github.com/DeltaV-Station/Delta-v/pull/2239
|
||||
- author: MilonPL, dotCatshark
|
||||
changes:
|
||||
- message: Added self-refilling bluespace fire extinguishers! They can be unlocked
|
||||
in the T2 industrial research!
|
||||
type: Add
|
||||
id: 688
|
||||
time: '2024-11-19T20:57:14.0000000+00:00'
|
||||
url: https://github.com/DeltaV-Station/Delta-v/pull/2171
|
||||
- author: MilonPL
|
||||
changes:
|
||||
- message: Added Chronic pain and Addicted traits.
|
||||
type: Add
|
||||
- message: Reworked the addictions system.
|
||||
type: Tweak
|
||||
id: 689
|
||||
time: '2024-11-20T00:59:17.0000000+00:00'
|
||||
url: https://github.com/DeltaV-Station/Delta-v/pull/2192
|
||||
- author: Lyndomen
|
||||
changes:
|
||||
- message: Ported footprints and bloodstains from EE. Sorry Janitors.
|
||||
type: Add
|
||||
id: 690
|
||||
time: '2024-11-20T01:00:15.0000000+00:00'
|
||||
url: https://github.com/DeltaV-Station/Delta-v/pull/2186
|
||||
- author: therealDLondon
|
||||
changes:
|
||||
- message: 'New Lobby Track: "Undefined Theory" by A-Guy'
|
||||
type: Add
|
||||
id: 691
|
||||
time: '2024-11-20T01:10:00.0000000+00:00'
|
||||
url: https://github.com/DeltaV-Station/Delta-v/pull/2234
|
||||
|
|
|
|||
|
|
@ -1,47 +1,56 @@
|
|||
### Messages to be used with RP-based medication.
|
||||
|
||||
reagent-effect-antidepressant-mild1 = You feel like things aren't so bad.
|
||||
reagent-effect-antidepressant-mild2 = The world seems a bit brighter.
|
||||
# Mild antidepressants
|
||||
reagent-effect-antidepressant-mild1 = You feel like things aren't so bad.
|
||||
reagent-effect-antidepressant-mild2 = The world seems a bit brighter.
|
||||
reagent-effect-antidepressant-mild3 = You feel a bit better about yourself.
|
||||
reagent-effect-antidepressant-mild4 = You feel slightly motivated.
|
||||
|
||||
reagent-effect-antidepressant-normal1 = You feel pretty alright.
|
||||
reagent-effect-antidepressant-normal2 = You find it hard to focus.
|
||||
# Normal antidepressants
|
||||
reagent-effect-antidepressant-normal1 = You feel pretty alright.
|
||||
reagent-effect-antidepressant-normal2 = You find it hard to focus.
|
||||
reagent-effect-antidepressant-normal3 = You feel purposeful.
|
||||
reagent-effect-antidepressant-normal4 = You feel motivated.
|
||||
|
||||
reagent-effect-antidepressant-normaloverdose1 = You feel irrationally angry.
|
||||
# Normal antidepresants OD
|
||||
reagent-effect-antidepressant-normaloverdose1 = You feel irrationally angry.
|
||||
reagent-effect-antidepressant-normaloverdose2 = Everyone is out to get you!
|
||||
|
||||
reagent-effect-antidepressant-strong1 = You feel a sense of great joy deep down.
|
||||
# Strong antidepressants
|
||||
reagent-effect-antidepressant-strong1 = You feel a sense of great joy deep down.
|
||||
reagent-effect-antidepressant-strong2 = You space out for a moment.
|
||||
reagent-effect-antidepressant-strong3 = You feel good about yourself.
|
||||
reagent-effect-antidepressant-strong4 = You feel a sense of great purpose.
|
||||
|
||||
reagent-effect-antidepressant-strongoverdose1 = You're gonna die! YOU'RE GONNA DIE!
|
||||
reagent-effect-antidepressant-strongoverdose2 = Run! RUN! HIDE!
|
||||
# Strong antidepressants OD
|
||||
reagent-effect-antidepressant-strongoverdose1 = You're gonna die! YOU'RE GONNA DIE!
|
||||
reagent-effect-antidepressant-strongoverdose2 = Run! RUN! HIDE!
|
||||
reagent-effect-antidepressant-strongoverdose3 = They're after you. THEY'LL KILL YOU.
|
||||
reagent-effect-antidepressant-strongoverdose4 = They're all plotting against you.
|
||||
reagent-effect-antidepressant-strongoverdose5 = Watch your back, BEHIND YOU!
|
||||
reagent-effect-antidepressant-strongoverdose5 = Watch your back, BEHIND YOU!
|
||||
reagent-effect-antidepressant-strongoverdose6 = You won't last the shift.
|
||||
reagent-effect-antidepressant-strongoverdose7 = Shut up. SHUT UP. SHUT UP!
|
||||
reagent-effect-antidepressant-strongoverdose8 = Get away. GET AWAY! IT'S GONNA EXPLODE!
|
||||
reagent-effect-antidepressant-strongoverdose9 = They're all liars. LIARS!
|
||||
|
||||
# Antidepressant fading
|
||||
reagent-effect-antidepressant-fade = The antidepressant effects start to fade...
|
||||
|
||||
# Mild anxiety meds
|
||||
reagent-effect-anxietymed-mild1 = You feel a bit calmer.
|
||||
reagent-effect-anxietymed-mild2 = You feel a little tired.
|
||||
reagent-effect-anxietymed-mild3 = You feel slightly relaxed.
|
||||
reagent-effect-anxietymed-mild4 = You feel like it might just be okay.
|
||||
reagent-effect-anxietymed-mild5 = The road ahead doesn't seem so bad.
|
||||
|
||||
# Normal anxiety meds
|
||||
reagent-effect-anxietymed-normal1 = You feel somewhat relaxed
|
||||
reagent-effect-anxietymed-normal2 = You feel drowsy for a moment.
|
||||
reagent-effect-anxietymed-normal3 = You feel calm.
|
||||
reagent-effect-anxietymed-normal4 = You feel more confident.
|
||||
reagent-effect-anxietymed-normal5 = Your worries seem to drift away.
|
||||
|
||||
# Normal anxiety meds OD
|
||||
reagent-effect-anxietymed-normaloverdose1 = You feel very sleepy.
|
||||
reagent-effect-anxietymed-normaloverdose2 = You feel like resting your eyes for just a moment.
|
||||
reagent-effect-anxietymed-normaloverdose3 = You feel like lying down and napping.
|
||||
|
|
@ -49,6 +58,7 @@ reagent-effect-anxietymed-normaloverdose4 = Your eyes feel heavy.
|
|||
reagent-effect-anxietymed-normaloverdose5 = You lose your train of thought.
|
||||
reagent-effect-anxietymed-normaloverdose6 = You forget what you were doing.
|
||||
|
||||
# Strong anxiety meds
|
||||
reagent-effect-anxietymed-strong1 = You feel free of worry.
|
||||
reagent-effect-anxietymed-strong2 = Your mind goes numb for a moment.
|
||||
reagent-effect-anxietymed-strong3 = It seems like everything is just fine.
|
||||
|
|
@ -57,8 +67,10 @@ reagent-effect-anxietymed-strong5 = You feel very relaxed.
|
|||
reagent-effect-anxietymed-strong6 = You feel quite calm.
|
||||
reagent-effect-anxietymed-strong7 = You feel like you can take on the world!
|
||||
|
||||
# Anxiety meds fade
|
||||
reagent-effect-anxietymed-fade = The calming effects start to fade...
|
||||
|
||||
# Addiction popups
|
||||
reagent-effect-medaddiction-1 = You're yearning for another high.
|
||||
reagent-effect-medaddiction-2 = You really need some more drugs.
|
||||
reagent-effect-medaddiction-3 = You feel empty. Find another fix.
|
||||
|
|
@ -68,17 +80,19 @@ reagent-effect-medaddiction-6 = You can feel your hands shaking.
|
|||
reagent-effect-medaddiction-7 = You could use another hit right now
|
||||
reagent-effect-medaddiction-8 = One more fix couldn't hurt, right?
|
||||
|
||||
# Mild painkillers
|
||||
reagent-effect-painkiller-mild1 = Your body hurts a bit less.
|
||||
reagent-effect-painkiller-mild2 = You feel a little bit dizzy.
|
||||
reagent-effect-painkiller-mild3 = You feel a tiny bit numb.
|
||||
reagent-effect-painkiller-mild4 = Any pain you had has faded slightly.
|
||||
|
||||
|
||||
# Normal painkillers
|
||||
reagent-effect-painkiller-normal1 = Any pain you had has faded significantly.
|
||||
reagent-effect-painkiller-normal2 = You feel dizzy.
|
||||
reagent-effect-painkiller-normal3 = Your entire body goes numb briefly.
|
||||
reagent-effect-painkiller-normal4 = You feel your pain fade somewhat.
|
||||
|
||||
# Strong painkillers
|
||||
reagent-effect-painkiller-strong1 = You forgot what pain feels like.
|
||||
reagent-effect-painkiller-strong2 = You can't see straight.
|
||||
reagent-effect-painkiller-strong3 = You feel a sense of deep nostalgia.
|
||||
|
|
@ -86,4 +100,11 @@ reagent-effect-painkiller-strong4 = Your entire body feels numb.
|
|||
reagent-effect-painkiller-strong5 = You hardly feel anything at all.
|
||||
reagent-effect-painkiller-strong6 = Any pain you were feeling is gone.
|
||||
|
||||
reagent-effect-painkiller-fade = The painkiller's effects start to fade...
|
||||
# Painkiller fade
|
||||
reagent-effect-painkiller-fade = The painkiller's effects start to fade...
|
||||
|
||||
# Pain effects
|
||||
pain-effect1 = A dull ache pulses through your body.
|
||||
pain-effect2 = Sharp stabs of pain make you wince.
|
||||
pain-effect3 = You feel an intense, throbbing pain that clouds your thoughts.
|
||||
pain-effect4 = Waves of agonizing pain make it hard to focus on anything else.
|
||||
|
|
|
|||
|
|
@ -1,2 +1,6 @@
|
|||
gun-comp-enabled = The gun is turned [color=green]on[/color].
|
||||
gun-comp-disabled = The gun is turned [color=red]off[/color].
|
||||
|
||||
auto-fire-enabled = Gun turned on.
|
||||
auto-fire-disabled = Gun turned off.
|
||||
auto-fire-enabled-no-power = Gun turned on; but it has no power!
|
||||
|
|
|
|||
|
|
@ -2,4 +2,16 @@ reagent-effect-guidebook-addicted =
|
|||
{ $chance ->
|
||||
[1] Causes
|
||||
*[other] cause
|
||||
} an addiction.
|
||||
} an addiction
|
||||
|
||||
reagent-effect-guidebook-addiction-suppression =
|
||||
{ $chance ->
|
||||
[1] Suppresses
|
||||
*[other] suppress
|
||||
} active addictions
|
||||
|
||||
reagent-effect-guidebook-pain-suppression =
|
||||
{ $chance ->
|
||||
[1] Suppresses
|
||||
*[other] suppress
|
||||
} pain at { $level } strength
|
||||
|
|
|
|||
|
|
@ -32,3 +32,21 @@ book-text-fishops = FISHOPS ADVANCED USER MANUAL FIRST EDITION
|
|||
|
||||
CHAPTER 6: Fish War
|
||||
In the event of fish war there will be double the fish, more than could possibly be carried. A reinforcement or two will be required to carry the surplus fish. A fish war has never happened in recorded history, so it is currently purely theoretical. Its destructive power would rival several neutronium bombs.
|
||||
|
||||
book-text-vulpkanin = Vulpkanin for Dummies, an Exhaustive Guide
|
||||
|
||||
So, you're new to the sector and keep seeing these fine folks running around?
|
||||
Those are Vulpkanin, basically space foxes (or wolves, depending who you ask)!
|
||||
We've accumulated some quick tips you might use when engaging with these fluff balls.
|
||||
|
||||
No Chocolate! Seriously, it's like poison to them. Stick to burgers and fries.
|
||||
|
||||
Watch the Tail: A wagging tail usually means they're happy. A puffed-up tail? Back away slowly...
|
||||
|
||||
They Come in All Colors: From fiery reds to snowy whites, every Vulpkanin is unique!
|
||||
|
||||
Learn their Language: While most Vulpkanin speak common, knowing a few phrases in their native tongue can go a long way in building rapport.
|
||||
|
||||
How to Kiss: Kiss
|
||||
|
||||
Don't Underestimate Them: Vulpkanin may look cute and cuddly, but they can be fierce fighters when provoked. Treat them with respect and avoid unnecessary conflict.
|
||||
|
|
|
|||
|
|
@ -26,3 +26,9 @@ trait-hushed-desc = You are unable to speak louder than a whisper.
|
|||
|
||||
trait-uncloneable-name = Uncloneable
|
||||
trait-uncloneable-desc = Cannot be cloned
|
||||
|
||||
trait-inpain-name = Chronic pain
|
||||
trait-inpain-desc = You’re constantly in discomfort. You need painkillers to function.
|
||||
|
||||
trait-addicted-name = Addicted
|
||||
trait-addicted-desc = You crave the substance, and your thoughts keep drifting back to it. Without it, you feel incomplete, anxious, and on edge.
|
||||
|
|
|
|||
|
|
@ -25,6 +25,12 @@
|
|||
path:
|
||||
path: /Audio/DeltaV/Jukebox/DOS=HIGH,_UMB.ogg
|
||||
|
||||
- type: jukebox
|
||||
id: DeckTheHalls
|
||||
name: Deck The Halls - Kevin Macleod
|
||||
path:
|
||||
path: /Audio/DeltaV/Jukebox/deck_the_halls_b-MONO.ogg
|
||||
|
||||
- type: jukebox
|
||||
id: DrozAlone
|
||||
name: Drozerix - Alone
|
||||
|
|
|
|||
|
|
@ -0,0 +1,5 @@
|
|||
- type: localizedDataset
|
||||
id: PainEffects
|
||||
values:
|
||||
prefix: pain-effect
|
||||
count: 4
|
||||
|
|
@ -140,6 +140,9 @@
|
|||
- CanPilot
|
||||
- FootstepSound
|
||||
- DoorBumpOpener
|
||||
- type: FootPrints #DeltaV port from EE, blood splatter
|
||||
leftBarePrint: "footprint-left-bare-lizard" #DeltaV port from EE, blood splatter
|
||||
rightBarePrint: "footprint-right-bare-lizard" #DeltaV port from EE, blood splatter
|
||||
|
||||
- type: entity
|
||||
save: false
|
||||
|
|
|
|||
|
|
@ -20,3 +20,26 @@
|
|||
color: "#2c5491"
|
||||
- type: Paper
|
||||
content: book-text-fishops
|
||||
|
||||
- type: entity
|
||||
parent: BookBase
|
||||
id: BookVulpFAQ
|
||||
name: Vulpkanin 101
|
||||
suffix: library salvage
|
||||
description: You seriously didn't purchase a "For Dummies" book in 2425?
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: Objects/Misc/books.rsi
|
||||
layers:
|
||||
- state: paper
|
||||
- state: cover_strong
|
||||
color: "#c836aa"
|
||||
- state: decor_spine
|
||||
color: "#961cc8"
|
||||
- state: detail_bookmark
|
||||
color: "#eee039"
|
||||
- state: icon_question
|
||||
- state: detail_bookmark
|
||||
color: "#2c5491"
|
||||
- type: Paper
|
||||
content: book-text-vulpkanin
|
||||
|
|
|
|||
|
|
@ -0,0 +1,32 @@
|
|||
- type: entity
|
||||
name: bluespace fire extinguisher
|
||||
parent: FireExtinguisher
|
||||
id: FireExtinguisherBluespace
|
||||
description: An experimental fire extinguisher that uses bluespace technology to gradually refill itself. The faint blue glow is only slightly disconcerting.
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: DeltaV/Objects/Misc/fire_extinguisher_bluespace.rsi
|
||||
layers:
|
||||
- state: fire_extinguisher_closed
|
||||
map: [ "enum.ToggleVisuals.Layer" ]
|
||||
- type: Item
|
||||
sprite: DeltaV/Objects/Misc/fire_extinguisher_bluespace.rsi
|
||||
size: Normal
|
||||
- type: SolutionContainerManager
|
||||
solutions:
|
||||
spray:
|
||||
maxVol: 200
|
||||
reagents:
|
||||
- ReagentId: Water
|
||||
Quantity: 200
|
||||
- type: PhysicalComposition
|
||||
materialComposition:
|
||||
Steel: 80
|
||||
Bluespace: 20
|
||||
- type: SolutionRegeneration
|
||||
solution: spray
|
||||
generated:
|
||||
reagents:
|
||||
- ReagentId: Water
|
||||
Quantity: 10
|
||||
duration: 10
|
||||
|
|
@ -17,3 +17,13 @@
|
|||
- type: Sprite
|
||||
sprite: DeltaV/Structures/Wallmounts/Posters/misc.rsi
|
||||
state: woodygotwood
|
||||
|
||||
- type: entity
|
||||
parent: PosterBase
|
||||
id: PosterLegitMail
|
||||
name: "Only You Can Prevent Expired Mail"
|
||||
description: "A propaganda poster that subtly encourages crew to open their mail. Brought to you by the Ministries Aiding Interstellar Logistics (M.A.I.L.)"
|
||||
components:
|
||||
- type: Sprite
|
||||
sprite: DeltaV/Structures/Wallmounts/Posters/mailposter.rsi
|
||||
state: mailposter
|
||||
|
|
|
|||
|
|
@ -0,0 +1,10 @@
|
|||
- type: latheRecipe
|
||||
parent: BaseToolRecipe
|
||||
id: FireExtinguisherBluespace
|
||||
result: FireExtinguisherBluespace
|
||||
completetime: 6
|
||||
materials:
|
||||
Steel: 1000
|
||||
Silver: 250
|
||||
Plasma: 500
|
||||
Bluespace: 200
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
- type: shader
|
||||
id: ChromaticAberration
|
||||
kind: source
|
||||
path: "/Textures/DeltaV/Shaders/chromatic_aberration.swsl"
|
||||
|
|
@ -5,3 +5,19 @@
|
|||
category: Disabilities
|
||||
components:
|
||||
- type: Uncloneable
|
||||
|
||||
- type: trait
|
||||
id: Addicted
|
||||
name: trait-addicted-name
|
||||
description: trait-addicted-desc
|
||||
category: Disabilities
|
||||
components:
|
||||
- type: Addicted
|
||||
|
||||
- type: trait
|
||||
id: InPain
|
||||
name: trait-inpain-name
|
||||
description: trait-inpain-desc
|
||||
category: Disabilities
|
||||
components:
|
||||
- type: Pain
|
||||
|
|
|
|||
|
|
@ -1,2 +1,11 @@
|
|||
- type: statusEffect
|
||||
id: Addicted
|
||||
|
||||
- type: statusEffect
|
||||
id: SuppressAddiction
|
||||
|
||||
- type: statusEffect
|
||||
id: InPain
|
||||
|
||||
- type: statusEffect
|
||||
id: SuppressPain
|
||||
|
|
|
|||
|
|
@ -165,3 +165,47 @@
|
|||
- type: Tag
|
||||
tags:
|
||||
- DNASolutionScannable
|
||||
- type: PuddleFootPrints # DeltaV- Begin updates from EE Blood Puddle
|
||||
|
||||
- type: entity
|
||||
name: footstep
|
||||
id: Footstep
|
||||
save: false
|
||||
description: Trace of liquid
|
||||
components:
|
||||
- type: Clickable
|
||||
- type: FootstepModifier
|
||||
footstepSoundCollection:
|
||||
collection: FootstepWater
|
||||
params:
|
||||
volume: 3
|
||||
- type: Transform
|
||||
noRot: false
|
||||
- type: Sprite
|
||||
drawdepth: FloorObjects
|
||||
color: "#FFFFFF80"
|
||||
- type: Physics
|
||||
bodyType: Static
|
||||
- type: Fixtures
|
||||
fixtures:
|
||||
slipFixture:
|
||||
shape:
|
||||
!type:PhysShapeAabb
|
||||
bounds: "-0.4,-0.4,0.4,0.4"
|
||||
mask:
|
||||
- ItemMask
|
||||
layer:
|
||||
- SlipLayer
|
||||
hard: false
|
||||
- type: SolutionContainerManager
|
||||
solutions:
|
||||
step: { maxVol: 2 }
|
||||
- type: FootPrint
|
||||
- type: Puddle
|
||||
solution: step
|
||||
- type: Appearance
|
||||
- type: SpawnOnDespawn
|
||||
prototype: PuddleSparkle
|
||||
- type: TimedDespawn
|
||||
lifetime: 60 # DeltaV End updates from EE Blood Puddle
|
||||
|
||||
|
|
|
|||
|
|
@ -175,4 +175,5 @@
|
|||
- PosterLegitShoukou # Nyanotrasen Poster, see Resources/Prototypes/Nyanotrasen/Entities/Structures/Wallmount/Signs/posters.yml
|
||||
- PosterLegitCornzza # Nyanotrasen Poster, see Resources/Prototypes/Nyanotrasen/Entities/Structures/Wallmount/Signs/posters.yml
|
||||
- PosterLegitFuckAround # DeltaV Poster, see Resources/Prototypes/DeltaV/Entities/Structures/Wallmount/Signs/posters.yml
|
||||
- PosterLegitMail # DeltaV Poster, see Resources/Prototypes/DeltaV/Entities/Structures/Wallmount/Signs/posters.yml
|
||||
chance: 1
|
||||
|
|
|
|||
|
|
@ -115,6 +115,9 @@
|
|||
sprite: "Effects/creampie.rsi"
|
||||
state: "creampie_arachnid"
|
||||
visible: false
|
||||
- type: FootPrints # DeltaV port from EE, blood splatter
|
||||
leftBarePrint: "footprint-left-bare-spider"
|
||||
rightBarePrint: "footprint-right-bare-spider"
|
||||
- type: Inventory
|
||||
templateId: arachnid
|
||||
|
||||
|
|
|
|||
|
|
@ -139,6 +139,9 @@
|
|||
- PsionicsDisabled #Nyano - Summary: PCs can have psionics disabled.
|
||||
- PsionicallyInsulated #Nyano - Summary: PCs can be made insulated from psionic powers.
|
||||
- Addicted # DeltaV - Psych med addictions system
|
||||
- SuppressAddiction # DeltaV - Psych med addictions system
|
||||
- InPain # DeltaV - Pain system
|
||||
- SuppressPain # DeltaV - Pain system
|
||||
- type: Body
|
||||
prototype: Human
|
||||
requiredLegs: 2
|
||||
|
|
@ -216,6 +219,7 @@
|
|||
- DoorBumpOpener
|
||||
- AnomalyHost
|
||||
- type: PotentialPsionic # DeltaV - organic species can all be psionic
|
||||
- type: FootPrints # DeltaV port from EE, blood splatter
|
||||
|
||||
- type: entity
|
||||
save: false
|
||||
|
|
|
|||
|
|
@ -110,6 +110,9 @@
|
|||
32:
|
||||
sprite: Mobs/Species/Human/displacement.rsi
|
||||
state: jumpsuit-female
|
||||
- type: FootPrints # DeltaV port from EE, blood splatter
|
||||
leftBarePrint: "footprint-left-bare-diona"
|
||||
rightBarePrint: "footprint-right-bare-diona"
|
||||
|
||||
- type: entity
|
||||
parent: BaseSpeciesDummy
|
||||
|
|
|
|||
|
|
@ -64,6 +64,9 @@
|
|||
32:
|
||||
sprite: Mobs/Species/Human/displacement.rsi
|
||||
state: jumpsuit-female
|
||||
- type: FootPrints # DeltaV port from EE, blood splatter
|
||||
leftBarePrint: "footprint-left-bare-dwarf"
|
||||
rightBarePrint: "footprint-right-bare-dwarf"
|
||||
|
||||
- type: entity
|
||||
parent: BaseSpeciesDummy
|
||||
|
|
|
|||
|
|
@ -40,4 +40,4 @@
|
|||
sizeMaps:
|
||||
32:
|
||||
sprite: Mobs/Species/Human/displacement.rsi
|
||||
state: jumpsuit-female
|
||||
state: jumpsuit-female
|
||||
|
|
|
|||
|
|
@ -77,7 +77,9 @@
|
|||
32:
|
||||
sprite: Mobs/Species/Human/displacement.rsi
|
||||
state: jumpsuit-female
|
||||
|
||||
- type: FootPrints # DeltaV port from EE, blood splatter
|
||||
leftBarePrint: "footprint-left-bare-lizard"
|
||||
rightBarePrint: "footprint-right-bare-lizard"
|
||||
|
||||
- type: entity
|
||||
parent: BaseSpeciesDummy
|
||||
|
|
|
|||
|
|
@ -120,6 +120,9 @@
|
|||
32:
|
||||
sprite: Mobs/Species/Human/displacement.rsi
|
||||
state: jumpsuit-female
|
||||
- type: FootPrints # DeltaV port from EE, blood splatter
|
||||
leftBarePrint: "footprint-left-bare-slime"
|
||||
rightBarePrint: "footprint-right-bare-slime"
|
||||
|
||||
- type: entity
|
||||
parent: MobHumanDummy
|
||||
|
|
|
|||
|
|
@ -130,6 +130,9 @@
|
|||
32:
|
||||
sprite: Mobs/Species/Vox/displacement.rsi
|
||||
state: shoes
|
||||
- type: FootPrints # DeltaV port from EE, blood splatter
|
||||
leftBarePrint: "footprint-left-bare-lizard"
|
||||
rightBarePrint: "footprint-right-bare-lizard"
|
||||
|
||||
- type: entity
|
||||
parent: BaseSpeciesDummy
|
||||
|
|
|
|||
|
|
@ -372,6 +372,7 @@
|
|||
- Fulton
|
||||
- FultonBeacon
|
||||
- PowerCellHyper
|
||||
- FireExtinguisherBluespace
|
||||
# End DeltaV additions
|
||||
- type: EmagLatheRecipes
|
||||
emagDynamicRecipes:
|
||||
|
|
|
|||
|
|
@ -48,16 +48,12 @@
|
|||
key: Drowsiness
|
||||
time: 10
|
||||
type: Remove
|
||||
- !type:AdjustReagent # Delta-V - Addictive
|
||||
- !type:Addicted # Delta-V - Addictive
|
||||
probability: 0.6 # Chance of Addiction rising per tick
|
||||
conditions:
|
||||
- !type:ReagentThreshold
|
||||
reagent: Addictine
|
||||
max: 20 # maximum addiction severity for this reagent
|
||||
- !type:ReagentThreshold
|
||||
min: 0.25
|
||||
reagent: Addictine
|
||||
amount: 0.2
|
||||
- !type:SuppressAddiction
|
||||
Medicine:
|
||||
effects:
|
||||
- !type:ResetNarcolepsy
|
||||
|
|
@ -214,16 +210,12 @@
|
|||
type: Add
|
||||
time: 16
|
||||
refresh: false
|
||||
- !type:AdjustReagent # Delta-V - Addictive
|
||||
- !type:Addicted # Delta-V - Addictive
|
||||
probability: 0.4 # Chance of Addiction rising per tick
|
||||
conditions:
|
||||
- !type:ReagentThreshold
|
||||
reagent: Addictine
|
||||
max: 20 # maximum addiction severity for this reagent
|
||||
- !type:ReagentThreshold
|
||||
min: 0.25
|
||||
reagent: Addictine
|
||||
amount: 0.2
|
||||
- !type:SuppressAddiction
|
||||
|
||||
- type: reagent
|
||||
id: Nicotine
|
||||
|
|
@ -266,16 +258,12 @@
|
|||
probability: 0.05
|
||||
- !type:Drunk # Headaches and slurring are major symptoms of brain damage, this is close enough
|
||||
boozePower: 5
|
||||
- !type:AdjustReagent # Delta-V - Addictive
|
||||
- !type:Addicted # Delta-V - Addictive
|
||||
probability: 0.4 # Chance of Addiction rising per tick
|
||||
conditions:
|
||||
- !type:ReagentThreshold
|
||||
reagent: Addictine
|
||||
max: 20 # maximum addiction severity for this reagent
|
||||
- !type:ReagentThreshold
|
||||
min: 0.25
|
||||
reagent: Addictine
|
||||
amount: 0.2
|
||||
- !type:SuppressAddiction
|
||||
|
||||
- type: reagent
|
||||
id: SpaceDrugs
|
||||
|
|
@ -294,21 +282,17 @@
|
|||
type: Add
|
||||
time: 5
|
||||
refresh: false
|
||||
- !type:ChemRerollPsionic #Nyano - Summary: lets the imbiber become psionic.
|
||||
- !type:ChemRerollPsionic #Nyano - Summary: lets the imbiber become psionic.
|
||||
conditions:
|
||||
- !type:ReagentThreshold
|
||||
reagent: SpaceDrugs
|
||||
min: 15
|
||||
- !type:AdjustReagent # Delta-V - Addictive
|
||||
- !type:Addicted # Delta-V - Addictive
|
||||
probability: 0.4 # Chance of Addiction rising per tick
|
||||
conditions:
|
||||
- !type:ReagentThreshold
|
||||
reagent: Addictine
|
||||
max: 10 # maximum addiction severity for this reagent
|
||||
- !type:ReagentThreshold
|
||||
min: 0.25
|
||||
reagent: Addictine
|
||||
amount: 0.1
|
||||
- !type:SuppressAddiction
|
||||
|
||||
- type: reagent
|
||||
id: Bananadine
|
||||
|
|
|
|||
|
|
@ -150,6 +150,7 @@
|
|||
- HellfireFreezerMachineCircuitBoard
|
||||
- PortableScrubberMachineCircuitBoard
|
||||
- HolofanProjector
|
||||
- FireExtinguisherBluespace # DeltaV
|
||||
technologyPrerequisites:
|
||||
- AtmosphericTech
|
||||
|
||||
|
|
|
|||
|
|
@ -24,4 +24,5 @@
|
|||
- /Audio/Lobby/Black_Heat.ogg
|
||||
- /Audio/Lobby/thestation.ogg
|
||||
- /Audio/Lobby/Get_It_Done.ogg
|
||||
- /Audio/Lobby/Undefined_Theory.ogg
|
||||
|
||||
|
|
@ -118,6 +118,7 @@
|
|||
Medicine:
|
||||
metabolismRate : 0.01
|
||||
effects:
|
||||
- !type:SuppressAddiction
|
||||
- !type:PopupMessage
|
||||
type: Local
|
||||
visualType: Large
|
||||
|
|
@ -191,17 +192,12 @@
|
|||
min: 10
|
||||
reagent: Neurozenium
|
||||
amount: -7.5
|
||||
- !type:AdjustReagent
|
||||
- !type:Addicted
|
||||
probability: 0.5 # Chance of Addiction rising per tick
|
||||
conditions:
|
||||
- !type:ReagentThreshold
|
||||
reagent: Addictine
|
||||
max: 10 # maximum addiction severity for this reagent
|
||||
- !type:ReagentThreshold
|
||||
reagent: Blissifylovene
|
||||
min: 1.5
|
||||
reagent: Addictine
|
||||
amount: 0.1
|
||||
- !type:HealthChange
|
||||
conditions:
|
||||
- !type:ReagentThreshold
|
||||
|
|
@ -450,112 +446,6 @@
|
|||
- !type:ReagentThreshold
|
||||
max: 0.1
|
||||
|
||||
- type: reagent
|
||||
id: Addictine
|
||||
name: reagent-name-addictine
|
||||
group: Toxins
|
||||
desc: reagent-desc-addictine
|
||||
flavor: savory
|
||||
color: "#d9d9d9"
|
||||
physicalDesc: reagent-physical-desc-refreshing
|
||||
metabolisms:
|
||||
Poison:
|
||||
metabolismRate : 0.01
|
||||
effects:
|
||||
- !type:PopupMessage
|
||||
type: Local
|
||||
visualType: LargeCaution
|
||||
messages:
|
||||
- "reagent-effect-medaddiction-1"
|
||||
- "reagent-effect-medaddiction-2"
|
||||
- "reagent-effect-medaddiction-3"
|
||||
- "reagent-effect-medaddiction-4"
|
||||
- "reagent-effect-medaddiction-5"
|
||||
- "reagent-effect-medaddiction-6"
|
||||
- "reagent-effect-medaddiction-7"
|
||||
- "reagent-effect-medaddiction-8"
|
||||
probability: 0.08
|
||||
conditions:
|
||||
- !type:ReagentThreshold # the following three chemicals are addictive, and thus will counteract cravings.
|
||||
reagent: Blissifylovene
|
||||
max: 0.01
|
||||
- !type:ReagentThreshold
|
||||
reagent: Soretizone
|
||||
max: 0.01
|
||||
- !type:ReagentThreshold
|
||||
reagent: Agonolexyne
|
||||
max: 0.01
|
||||
- !type:ReagentThreshold # Delta-V - Following four are also addictive
|
||||
reagent: SpaceDrugs
|
||||
max: 0.01
|
||||
- !type:ReagentThreshold
|
||||
reagent: THC
|
||||
max: 0.01
|
||||
- !type:ReagentThreshold
|
||||
reagent: Impedrezene
|
||||
max: 0.01
|
||||
- !type:ReagentThreshold
|
||||
reagent: Desoxyephedrine
|
||||
max: 0.01
|
||||
- !type:AdjustReagent
|
||||
reagent: Charcoal # purges bloodstream cleaners
|
||||
amount: -10.0
|
||||
- !type:AdjustReagent
|
||||
reagent: Ipecac # purges bloodstream cleaners
|
||||
amount: -10.0
|
||||
- !type:MovespeedModifier
|
||||
walkSpeedModifier: 0.9 # Delta-V : Changes walk-speed modifier from 0.95 to 0.9
|
||||
sprintSpeedModifier: 0.7
|
||||
conditions:
|
||||
- !type:ReagentThreshold
|
||||
max: 1.0 # it gets worse before the addiction ends.
|
||||
- !type:ReagentThreshold # the following three chemicals are addictive, and thus will counteract cravings.
|
||||
reagent: Blissifylovene
|
||||
max: 0.01
|
||||
- !type:ReagentThreshold
|
||||
reagent: Soretizone
|
||||
max: 0.01
|
||||
- !type:ReagentThreshold
|
||||
reagent: Agonolexyne
|
||||
max: 0.01
|
||||
- !type:ReagentThreshold # Delta-V - Following four are also addictive
|
||||
reagent: SpaceDrugs
|
||||
max: 0.01
|
||||
- !type:ReagentThreshold
|
||||
reagent: THC
|
||||
max: 0.01
|
||||
- !type:ReagentThreshold
|
||||
reagent: Impedrezene
|
||||
max: 0.01
|
||||
- !type:ReagentThreshold
|
||||
reagent: Desoxyephedrine
|
||||
max: 0.01
|
||||
- !type:GenericStatusEffect # Delta-V - Makes you stutter
|
||||
key: Stutter
|
||||
component: StutteringAccent
|
||||
conditions:
|
||||
- !type:ReagentThreshold
|
||||
reagent: Blissifylovene
|
||||
max: 0.01
|
||||
- !type:ReagentThreshold
|
||||
reagent: Soretizone
|
||||
max: 0.01
|
||||
- !type:ReagentThreshold
|
||||
reagent: Agonolexyne
|
||||
max: 0.01
|
||||
- !type:ReagentThreshold
|
||||
reagent: SpaceDrugs
|
||||
max: 0.01
|
||||
- !type:ReagentThreshold
|
||||
reagent: THC
|
||||
max: 0.01
|
||||
- !type:ReagentThreshold
|
||||
reagent: Impedrezene
|
||||
max: 0.01
|
||||
- !type:ReagentThreshold
|
||||
reagent: Desoxyephedrine
|
||||
max: 0.01
|
||||
|
||||
- type: reagent
|
||||
id: Stubantazine
|
||||
name: reagent-name-stubantazine
|
||||
|
|
@ -568,6 +458,8 @@
|
|||
Medicine:
|
||||
metabolismRate : 0.02
|
||||
effects:
|
||||
- !type:SuppressPain
|
||||
suppressionLevel: Mild
|
||||
- !type:PopupMessage
|
||||
type: Local
|
||||
visualType: Medium
|
||||
|
|
@ -621,6 +513,9 @@
|
|||
Medicine:
|
||||
metabolismRate : 0.01
|
||||
effects:
|
||||
- !type:SuppressPain
|
||||
suppressionLevel: Normal
|
||||
- !type:SuppressAddiction
|
||||
- !type:PopupMessage
|
||||
type: Local
|
||||
visualType: Large
|
||||
|
|
@ -656,16 +551,11 @@
|
|||
min: 20
|
||||
reagent: Soretizone
|
||||
amount: 0.03
|
||||
- !type:AdjustReagent
|
||||
probability: 0.55 # Chance of Addiction rising per tick
|
||||
- !type:Addicted
|
||||
probability: 0.7 # Chance of Addiction rising per tick
|
||||
conditions:
|
||||
- !type:ReagentThreshold
|
||||
reagent: Addictine
|
||||
max: 5 # maximum addiction severity for this reagent
|
||||
- !type:ReagentThreshold
|
||||
min: 9
|
||||
reagent: Addictine # add
|
||||
amount: 0.1
|
||||
- !type:PopupMessage
|
||||
type: Local
|
||||
visualType: Medium # stronger painkiller = more noticable fading
|
||||
|
|
@ -688,6 +578,9 @@
|
|||
Medicine:
|
||||
metabolismRate : 0.01
|
||||
effects:
|
||||
- !type:SuppressPain
|
||||
suppressionLevel: Strong
|
||||
- !type:SuppressAddiction
|
||||
- !type:PopupMessage
|
||||
type: Local
|
||||
visualType: Large
|
||||
|
|
@ -726,16 +619,11 @@
|
|||
min: 1
|
||||
reagent: Agonolexyne
|
||||
amount: 0.04
|
||||
- !type:AdjustReagent
|
||||
- !type:Addicted
|
||||
probability: 0.8 # Chance of Addiction rising per tick
|
||||
conditions:
|
||||
- !type:ReagentThreshold
|
||||
reagent: Addictine
|
||||
max: 25 # maximum addiction severity for this reagent
|
||||
- !type:ReagentThreshold
|
||||
min: 0.25
|
||||
reagent: Addictine
|
||||
amount: 0.2
|
||||
- !type:Drunk # OD causes drunkeness
|
||||
conditions:
|
||||
- !type:ReagentThreshold
|
||||
|
|
|
|||
|
After Width: | Height: | Size: 422 B |
|
After Width: | Height: | Size: 475 B |
|
After Width: | Height: | Size: 467 B |
|
After Width: | Height: | Size: 453 B |
|
|
@ -0,0 +1,37 @@
|
|||
{
|
||||
"version": 1,
|
||||
"license": "CC-BY-SA-4.0",
|
||||
"copyright": "Made by .catshark (Discord) based on the fire extinguisher sprite",
|
||||
"size": {
|
||||
"x": 32,
|
||||
"y": 32
|
||||
},
|
||||
"states": [
|
||||
{
|
||||
"name": "fire_extinguisher_open",
|
||||
"delays": [
|
||||
[
|
||||
0.1,
|
||||
0.1
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "fire_extinguisher_closed",
|
||||
"delays": [
|
||||
[
|
||||
0.1,
|
||||
0.1
|
||||
]
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "inhand-right",
|
||||
"directions": 4
|
||||
},
|
||||
{
|
||||
"name": "inhand-left",
|
||||
"directions": 4
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,32 @@
|
|||
uniform sampler2D SCREEN_TEXTURE;
|
||||
|
||||
void fragment() {
|
||||
highp vec2 coord = FRAGCOORD.xy * SCREEN_PIXEL_SIZE.xy;
|
||||
highp float time = TIME * 0.3;
|
||||
|
||||
const highp float distortAmount = 0.003;
|
||||
|
||||
highp vec2 waveOffset = vec2(
|
||||
distortAmount * (
|
||||
sin(time * 0.5 + coord.y * 4.0) + // Primary wave
|
||||
sin(time * 0.7 + coord.y * 8.0) * 0.5 + // Secondary faster wave
|
||||
sin(time * 0.2 + coord.x * 3.0) * 0.8 // Slower cross wave
|
||||
),
|
||||
distortAmount * (
|
||||
cos(time * 0.5 + coord.x * 4.0) + // Primary wave
|
||||
cos(time * 0.7 + coord.x * 8.0) * 0.5 + // Secondary faster wave
|
||||
cos(time * 0.2 + coord.y * 3.0) * 0.8 // Slower cross wave
|
||||
)
|
||||
);
|
||||
|
||||
highp vec4 redChannel = zTextureSpec(SCREEN_TEXTURE, coord + waveOffset * 1.5 + vec2(-distortAmount * 2.0, distortAmount));
|
||||
highp vec4 greenChannel = zTextureSpec(SCREEN_TEXTURE, coord + waveOffset);
|
||||
highp vec4 blueChannel = zTextureSpec(SCREEN_TEXTURE, coord + waveOffset * 1.2 + vec2(distortAmount * 2.0, -distortAmount));
|
||||
|
||||
COLOR = vec4(
|
||||
redChannel.r,
|
||||
greenChannel.g,
|
||||
blueChannel.b,
|
||||
(redChannel.a + greenChannel.a + blueChannel.a) / 3.0
|
||||
);
|
||||
}
|
||||
|
After Width: | Height: | Size: 3.3 KiB |
|
|
@ -0,0 +1,14 @@
|
|||
{
|
||||
"version": 1,
|
||||
"license": "CC0-1.0",
|
||||
"copyright": "Original work by Kr8",
|
||||
"size": {
|
||||
"x": 32,
|
||||
"y": 32
|
||||
},
|
||||
"states": [
|
||||
{
|
||||
"name": "mailposter"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
After Width: | Height: | Size: 591 B |
|
After Width: | Height: | Size: 563 B |
|
After Width: | Height: | Size: 615 B |
|
After Width: | Height: | Size: 504 B |
|
After Width: | Height: | Size: 558 B |
|
After Width: | Height: | Size: 414 B |
|
After Width: | Height: | Size: 255 B |
|
After Width: | Height: | Size: 209 B |
|
After Width: | Height: | Size: 168 B |
|
After Width: | Height: | Size: 195 B |
|
After Width: | Height: | Size: 199 B |
|
After Width: | Height: | Size: 175 B |
|
After Width: | Height: | Size: 250 B |
|
After Width: | Height: | Size: 213 B |
|
After Width: | Height: | Size: 166 B |
|
After Width: | Height: | Size: 195 B |
|
After Width: | Height: | Size: 200 B |
|
After Width: | Height: | Size: 172 B |
|
After Width: | Height: | Size: 146 B |
|
After Width: | Height: | Size: 219 B |
|
|
@ -0,0 +1,71 @@
|
|||
{
|
||||
"version": 1,
|
||||
"size": {
|
||||
"x": 32,
|
||||
"y": 32
|
||||
},
|
||||
"license": "CC-BY-SA-3.0",
|
||||
"copyright": "IMPERIAL SPACE",
|
||||
"states": [
|
||||
{
|
||||
"name": "footprint-left-bare-diona"
|
||||
},
|
||||
{
|
||||
"name": "footprint-left-bare-dwarf"
|
||||
},
|
||||
{
|
||||
"name": "footprint-left-bare-human"
|
||||
},
|
||||
{
|
||||
"name": "footprint-left-bare-lizard"
|
||||
},
|
||||
{
|
||||
"name": "footprint-left-bare-slime"
|
||||
},
|
||||
{
|
||||
"name": "footprint-left-bare-spider"
|
||||
},
|
||||
{
|
||||
"name": "footprint-right-bare-diona"
|
||||
},
|
||||
{
|
||||
"name": "footprint-right-bare-dwarf"
|
||||
},
|
||||
{
|
||||
"name": "footprint-right-bare-human"
|
||||
},
|
||||
{
|
||||
"name": "footprint-right-bare-lizard"
|
||||
},
|
||||
{
|
||||
"name": "footprint-right-bare-slime"
|
||||
},
|
||||
{
|
||||
"name": "footprint-right-bare-spider"
|
||||
},
|
||||
{
|
||||
"name": "footprint-shoes"
|
||||
},
|
||||
{
|
||||
"name": "footprint-suit"
|
||||
},
|
||||
{
|
||||
"name": "dragging-1"
|
||||
},
|
||||
{
|
||||
"name": "dragging-2"
|
||||
},
|
||||
{
|
||||
"name": "dragging-3"
|
||||
},
|
||||
{
|
||||
"name": "dragging-4"
|
||||
},
|
||||
{
|
||||
"name": "dragging-5"
|
||||
},
|
||||
{
|
||||
"name": "dragging-test"
|
||||
}
|
||||
]
|
||||
}
|
||||