Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Shadowkin #960

Merged
merged 91 commits into from
Oct 20, 2024
Merged
Show file tree
Hide file tree
Changes from 50 commits
Commits
Show all changes
91 commits
Select commit Hold shift + click to select a range
964f4d3
ShadowKin Start
FoxxoTrystan Sep 25, 2024
85e7639
Cleanups
FoxxoTrystan Sep 25, 2024
a5d3129
oops
FoxxoTrystan Sep 25, 2024
2ac5f80
Marish
FoxxoTrystan Sep 25, 2024
b1b2a54
Merge branch 'master' into ShadowKin
FoxxoTrystan Sep 25, 2024
f90ec24
Organs and fixes
FoxxoTrystan Sep 25, 2024
e5081c4
Requirements
FoxxoTrystan Sep 25, 2024
4535f91
Plushie / RSI Fixes
FoxxoTrystan Sep 25, 2024
62c3028
Marish 2.0
FoxxoTrystan Sep 26, 2024
cde86f2
fixes verbs
FoxxoTrystan Sep 26, 2024
d453177
Update ChatSystem.cs
FoxxoTrystan Sep 26, 2024
f9f4ee5
Merge branch 'ShadowKin' of https://github.com/FoxxoTrystan/Einstein-…
FoxxoTrystan Sep 26, 2024
f234733
Update shadowkin.ftl
FoxxoTrystan Sep 26, 2024
130d837
verb fix, again
FoxxoTrystan Sep 26, 2024
571f449
Sounds
FoxxoTrystan Sep 26, 2024
78e02c8
Fixes
FoxxoTrystan Sep 26, 2024
fd83b92
goofy mind moment
FoxxoTrystan Sep 26, 2024
b4a5290
Update SlimePerson.xml
FoxxoTrystan Sep 26, 2024
137d563
oops
FoxxoTrystan Sep 27, 2024
71b0417
Merge branch 'master' into ShadowKin
FoxxoTrystan Sep 28, 2024
53da538
Merge branch 'master' into ShadowKin
FoxxoTrystan Sep 28, 2024
3ff96e7
Merge branch 'master' into ShadowKin
FoxxoTrystan Oct 2, 2024
b4692b8
Harpy Sounds + Fixes
FoxxoTrystan Oct 3, 2024
ff3c604
Merge branch 'master' into ShadowKin
FoxxoTrystan Oct 3, 2024
c9804ee
Shadowkin System/Comp, Psionic and Overlay.
FoxxoTrystan Oct 4, 2024
941f35c
fixes
FoxxoTrystan Oct 4, 2024
f97bd04
Merge branch 'master' into ShadowKin
FoxxoTrystan Oct 4, 2024
ad46cd8
Merge branch 'ShadowKin' of https://github.com/FoxxoTrystan/Einstein-…
FoxxoTrystan Oct 4, 2024
861a32b
Move ShadowkinSystem to Server and add Rejuvenate option.
FoxxoTrystan Oct 4, 2024
1a9a31d
Shadowkin AlertType
FoxxoTrystan Oct 4, 2024
0c99ecd
Fix Alert
FoxxoTrystan Oct 4, 2024
50bf53c
Sleep, Fixes
FoxxoTrystan Oct 4, 2024
af68d64
restriction fixes.
FoxxoTrystan Oct 4, 2024
c01c559
Psionic Mana System
FoxxoTrystan Oct 5, 2024
9be89e1
Shadowkin/ Final Systems
FoxxoTrystan Oct 5, 2024
db32184
ShadowKin Shadeskip
FoxxoTrystan Oct 5, 2024
ec8d992
Better Rejuvenate
FoxxoTrystan Oct 5, 2024
209a538
ShadowkinPowers
FoxxoTrystan Oct 5, 2024
4a8d5fa
Merge branch 'master' into ShadowKin
FoxxoTrystan Oct 6, 2024
2937d8f
Mono Sounds
FoxxoTrystan Oct 6, 2024
bb08b62
Merge branch 'ShadowKin' of https://github.com/FoxxoTrystan/Einstein-…
FoxxoTrystan Oct 6, 2024
6803b6d
TODO Fixes
FoxxoTrystan Oct 6, 2024
8af5fb5
Shadowkin.yml
FoxxoTrystan Oct 6, 2024
08afef5
Vending Machine Light
FoxxoTrystan Oct 6, 2024
3fe5842
Bluespace Crystal
FoxxoTrystan Oct 6, 2024
19531ab
Ethereal Glass
FoxxoTrystan Oct 6, 2024
08f6c5b
Restrains + Fixes
FoxxoTrystan Oct 6, 2024
2ac1b77
Crafting + Backpack
FoxxoTrystan Oct 6, 2024
fffe2b6
Update ShadowkinSystem.cs
FoxxoTrystan Oct 6, 2024
6373521
Update makeshifthandcuffs.yml
FoxxoTrystan Oct 6, 2024
9fe77f0
Apply suggestions from code review
FoxxoTrystan Oct 7, 2024
995990b
Update Content.Shared/Psionics/SharedPsionicAbilitiesSystem.cs
VMSolidus Oct 7, 2024
eac5fd9
Update Content.Shared/Psionics/SharedPsionicAbilitiesSystem.cs
VMSolidus Oct 7, 2024
e090efa
fix guh
FoxxoTrystan Oct 7, 2024
c98d04a
Psionic/ShowEthereal Fixes
FoxxoTrystan Oct 7, 2024
43d074c
yml fixes
FoxxoTrystan Oct 7, 2024
7726fa7
yml.rsi fixes... again
FoxxoTrystan Oct 7, 2024
50bdd1f
To add a cap i need to do this
FoxxoTrystan Oct 7, 2024
cde5172
Wow i have to do this shit.
FoxxoTrystan Oct 7, 2024
28fd7a3
fixes
FoxxoTrystan Oct 7, 2024
b7c10a1
FUCKING WHY RENAME IS PAIN
FoxxoTrystan Oct 7, 2024
989e26f
ok please stop
FoxxoTrystan Oct 7, 2024
b027af9
Happy Test?
FoxxoTrystan Oct 7, 2024
fdae343
Test
FoxxoTrystan Oct 7, 2024
b158e44
WHAT ABOUT THIS? HUH?
FoxxoTrystan Oct 7, 2024
11cee32
This Pehaps?
FoxxoTrystan Oct 7, 2024
272c142
Pray the fixes!
FoxxoTrystan Oct 7, 2024
d9b62c7
Final Happy Fixes
FoxxoTrystan Oct 7, 2024
140fe27
No Altvision
FoxxoTrystan Oct 7, 2024
6645342
No
FoxxoTrystan Oct 7, 2024
fad7e57
No Non-Blackeye Prisoner Shadowkin
FoxxoTrystan Oct 7, 2024
bb576c4
Merge branch 'master' into ShadowKin
FoxxoTrystan Oct 7, 2024
3503a69
Description
FoxxoTrystan Oct 7, 2024
9f22491
Update Content.Client/Shadowkin/ShadowkinSystem.cs
FoxxoTrystan Oct 9, 2024
8397b1f
Update Content.Client/Shadowkin/ShadowkinSystem.cs
FoxxoTrystan Oct 9, 2024
a52bd75
Some fixes
FoxxoTrystan Oct 9, 2024
36535b8
Merge branch 'ShadowKin' of https://github.com/FoxxoTrystan/Einstein-…
FoxxoTrystan Oct 9, 2024
38d2800
Merge branch 'master' into ShadowKin
FoxxoTrystan Oct 9, 2024
5739420
Blackeyefix?
FoxxoTrystan Oct 9, 2024
7180797
Merge branch 'ShadowKin' of https://github.com/FoxxoTrystan/Einstein-…
FoxxoTrystan Oct 9, 2024
a3da65b
eyefix
FoxxoTrystan Oct 9, 2024
4904636
Merge branch 'master' into ShadowKin
FoxxoTrystan Oct 14, 2024
392bc12
Fixes + Changes
FoxxoTrystan Oct 14, 2024
a7d9091
Chat+Overall
FoxxoTrystan Oct 14, 2024
63ae31f
Merge remote-tracking branch 'upstream/master' into ShadowKin
FoxxoTrystan Oct 15, 2024
cd5197e
Traits
FoxxoTrystan Oct 15, 2024
c7032fd
Merge branch 'master' into ShadowKin
FoxxoTrystan Oct 16, 2024
41dd96c
Fixes
FoxxoTrystan Oct 17, 2024
9cab30a
Merge branch 'master' into ShadowKin
FoxxoTrystan Oct 17, 2024
ab87092
Man
FoxxoTrystan Oct 17, 2024
39f9fe3
make linter happy
FoxxoTrystan Oct 17, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
63 changes: 63 additions & 0 deletions Content.Client/Overlays/ColorTintOverlay.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
using Robust.Client.Graphics;
using Robust.Client.Player;
using Robust.Shared.Enums;
using Robust.Shared.Prototypes;
using Content.Shared.Shadowkin;

namespace Content.Client.Overlays;

/// <summary>
/// A simple overlay that applies a colored tint to the screen.
/// </summary>
public sealed class ColorTintOverlay : Overlay
{
[Dependency] private readonly IPrototypeManager _prototype = default!;
[Dependency] private readonly IPlayerManager _player = default!;
[Dependency] IEntityManager _entityManager = default!;

public override bool RequestScreenTexture => true;
public override OverlaySpace Space => OverlaySpace.WorldSpace;
private readonly ShaderInstance _shader;

/// <summary>
/// The color to tint the screen to as RGB on a scale of 0-1.
/// </summary>
public Vector3? TintColor = null;
/// <summary>
/// The percent to tint the screen by on a scale of 0-1.
/// </summary>
public float? TintAmount = null;

public ColorTintOverlay()
{
IoCManager.InjectDependencies(this);
_shader = _prototype.Index<ShaderPrototype>("ColorTint").InstanceUnique();
}

protected override bool BeforeDraw(in OverlayDrawArgs args)
{
if (_player.LocalEntity is not { Valid: true } player
|| !_entityManager.HasComponent<ShadowkinComponent>(player))
return false;

return base.BeforeDraw(in args);
}
protected override void Draw(in OverlayDrawArgs args)
{
if (ScreenTexture is null)
return;

_shader.SetParameter("SCREEN_TEXTURE", ScreenTexture);
if (TintColor != null)
_shader.SetParameter("tint_color", (Vector3) TintColor);
if (TintAmount != null)
_shader.SetParameter("tint_amount", (float) TintAmount);

var worldHandle = args.WorldHandle;
var viewport = args.WorldBounds;
worldHandle.SetTransform(Matrix3.Identity);
worldHandle.UseShader(_shader);
worldHandle.DrawRect(viewport, Color.White);
worldHandle.UseShader(null);
}
}
48 changes: 48 additions & 0 deletions Content.Client/Overlays/EtherealOverlay.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
using Robust.Client.Graphics;
using Robust.Client.Player;
using Robust.Shared.Enums;
using Robust.Shared.Prototypes;
using Content.Shared.Shadowkin;

namespace Content.Client.Overlays;

public sealed class EtherealOverlay : Overlay
{
[Dependency] private readonly IPrototypeManager _prototype = default!;
[Dependency] private readonly IPlayerManager _player = default!;
[Dependency] IEntityManager _entityManager = default!;

public override bool RequestScreenTexture => true;
public override OverlaySpace Space => OverlaySpace.WorldSpaceBelowFOV;
private readonly ShaderInstance _shader;

public EtherealOverlay()
{
IoCManager.InjectDependencies(this);
_shader = _prototype.Index<ShaderPrototype>("Ethereal").InstanceUnique();
}

protected override bool BeforeDraw(in OverlayDrawArgs args)
{
if (_player.LocalEntity is not { Valid: true } player
|| !_entityManager.HasComponent<EtherealComponent>(player))
return false;

return base.BeforeDraw(in args);
}

protected override void Draw(in OverlayDrawArgs args)
{
if (ScreenTexture is null)
return;

_shader.SetParameter("SCREEN_TEXTURE", ScreenTexture);

var worldHandle = args.WorldHandle;
var viewport = args.WorldBounds;
worldHandle.SetTransform(Matrix3.Identity);
worldHandle.UseShader(_shader);
worldHandle.DrawRect(viewport, Color.White);
worldHandle.UseShader(null);
}
}
52 changes: 52 additions & 0 deletions Content.Client/Shadowkin/EtherealSystem.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
using Content.Shared.Shadowkin;
using Robust.Client.Graphics;
using Robust.Shared.Player;
using Content.Client.Overlays;

namespace Content.Client.Shadowkin;

public sealed partial class EtherealSystem : EntitySystem
{
[Dependency] private readonly IOverlayManager _overlayMan = default!;
[Dependency] private readonly ISharedPlayerManager _playerMan = default!;

private EtherealOverlay _overlay = default!;

public override void Initialize()
{
base.Initialize();

SubscribeLocalEvent<EtherealComponent, ComponentInit>(OnInit);
SubscribeLocalEvent<EtherealComponent, ComponentShutdown>(Onhutdown);
SubscribeLocalEvent<EtherealComponent, LocalPlayerAttachedEvent>(OnPlayerAttached);
SubscribeLocalEvent<EtherealComponent, LocalPlayerDetachedEvent>(OnPlayerDetached);

_overlay = new();
}

private void OnInit(EntityUid uid, EtherealComponent component, ComponentInit args)
{
if (uid != _playerMan.LocalEntity)
return;

_overlayMan.AddOverlay(_overlay);
}

private void Onhutdown(EntityUid uid, EtherealComponent component, ComponentShutdown args)
{
if (uid != _playerMan.LocalEntity)
return;

_overlayMan.RemoveOverlay(_overlay);
}

private void OnPlayerAttached(EntityUid uid, EtherealComponent component, LocalPlayerAttachedEvent args)
{
_overlayMan.AddOverlay(_overlay);
}

private void OnPlayerDetached(EntityUid uid, EtherealComponent component, LocalPlayerDetachedEvent args)
{
_overlayMan.RemoveOverlay(_overlay);
}
}
114 changes: 114 additions & 0 deletions Content.Client/Shadowkin/ShadowkinSystem.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,114 @@
using Content.Shared.Shadowkin;
using Content.Shared.CCVar;
using Robust.Client.Graphics;
using Robust.Shared.Configuration;
using Robust.Shared.Player;
using Content.Shared.Humanoid;
using Content.Shared.Abilities.Psionics;
using Content.Client.Overlays;

namespace Content.Client.Shadowkin;

public sealed partial class ShadowkinSystem : EntitySystem
{
[Dependency] private readonly IOverlayManager _overlayMan = default!;
[Dependency] private readonly IConfigurationManager _cfg = default!;
[Dependency] private readonly ISharedPlayerManager _playerMan = default!;

private ColorTintOverlay _overlay = default!;

public override void Initialize()
{
base.Initialize();

SubscribeLocalEvent<ShadowkinComponent, ComponentInit>(OnInit);
SubscribeLocalEvent<ShadowkinComponent, ComponentShutdown>(Onhutdown);
SubscribeLocalEvent<ShadowkinComponent, LocalPlayerAttachedEvent>(OnPlayerAttached);
SubscribeLocalEvent<ShadowkinComponent, LocalPlayerDetachedEvent>(OnPlayerDetached);

Subs.CVar(_cfg, CCVars.NoVisionFilters, OnNoVisionFiltersChanged);

_overlay = new();
}

private void OnInit(EntityUid uid, ShadowkinComponent component, ComponentInit args)
{
if (uid != _playerMan.LocalEntity)
return;

if (!_cfg.GetCVar(CCVars.NoVisionFilters))
_overlayMan.AddOverlay(_overlay);
FoxxoTrystan marked this conversation as resolved.
Show resolved Hide resolved
}

private void Onhutdown(EntityUid uid, ShadowkinComponent component, ComponentShutdown args)
{
if (uid != _playerMan.LocalEntity)
return;

_overlayMan.RemoveOverlay(_overlay);
}

private void OnPlayerAttached(EntityUid uid, ShadowkinComponent component, LocalPlayerAttachedEvent args)
{
if (!_cfg.GetCVar(CCVars.NoVisionFilters))
_overlayMan.AddOverlay(_overlay);
FoxxoTrystan marked this conversation as resolved.
Show resolved Hide resolved
}

private void OnPlayerDetached(EntityUid uid, ShadowkinComponent component, LocalPlayerDetachedEvent args)
{
_overlayMan.RemoveOverlay(_overlay);
}

private void OnNoVisionFiltersChanged(bool enabled)
{
if (enabled)
_overlayMan.RemoveOverlay(_overlay);
else
_overlayMan.AddOverlay(_overlay);
}

public override void Update(float frameTime)
{
base.Update(frameTime);

if (_cfg.GetCVar(CCVars.NoVisionFilters))
return;

var uid = _playerMan.LocalEntity;
if (uid == null
|| !TryComp<ShadowkinComponent>(uid, out var comp)
|| !TryComp<HumanoidAppearanceComponent>(uid, out var humanoid))
return;

// 1/3 = 0.333...
// intensity = min + (power / max)
// intensity = intensity / 0.333
// intensity = clamp intensity min, max

var tintIntensity = 0.65f;
if (TryComp<PsionicComponent>(uid, out var magic))
{
var min = 0.45f;
var max = 0.75f;
tintIntensity = Math.Clamp(min + (magic.Mana / magic.MaxMana) * 0.333f, min, max);
}

UpdateShader(new Vector3(humanoid.EyeColor.R, humanoid.EyeColor.G, humanoid.EyeColor.B), tintIntensity);
}

private void UpdateShader(Vector3? color, float? intensity)
{
while (_overlayMan.HasOverlay<ColorTintOverlay>())
{
_overlayMan.RemoveOverlay(_overlay);
}
FoxxoTrystan marked this conversation as resolved.
Show resolved Hide resolved

if (color != null)
_overlay.TintColor = color;
if (intensity != null)
_overlay.TintAmount = intensity;

if (!_cfg.GetCVar(CCVars.NoVisionFilters))
_overlayMan.AddOverlay(_overlay);
}
}
63 changes: 63 additions & 0 deletions Content.Server/Abilities/Psionics/Abilities/DarkSwapSystem.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
using Content.Shared.Abilities.Psionics;
using Content.Shared.Actions.Events;
using Content.Shared.Shadowkin;
using Content.Shared.Physics;
using Content.Shared.Popups;
using Content.Shared.Maps;
using Robust.Server.GameObjects;

namespace Content.Server.Abilities.Psionics
{
public sealed class DarkSwapSystem : EntitySystem
{
[Dependency] private readonly SharedPsionicAbilitiesSystem _psionics = default!;
[Dependency] private readonly SharedPopupSystem _popup = default!;
[Dependency] private readonly PhysicsSystem _physics = default!;

public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<DarkSwapActionEvent>(OnPowerUsed);
}

private void OnPowerUsed(DarkSwapActionEvent args)
{
if (TryComp<EtherealComponent>(args.Performer, out var ethereal))
{
var tileref = Transform(args.Performer).Coordinates.GetTileRef();
if (tileref != null)
{
if (_physics.GetEntitiesIntersectingBody(args.Performer, (int) CollisionGroup.Impassable).Count > 0)
{
_popup.PopupEntity(Loc.GetString("revenant-in-solid"), args.Performer, args.Performer);
return;
}
}
FoxxoTrystan marked this conversation as resolved.
Show resolved Hide resolved

if (_psionics.OnAttemptPowerUse(args.Performer, "DarkSwap", args.ManaCost / 2, args.CheckInsulation))
{
RemComp(args.Performer, ethereal);
args.Handled = true;
}
}
else
{
if (_psionics.OnAttemptPowerUse(args.Performer, "DarkSwap", args.ManaCost, args.CheckInsulation))
{
var newethereal = EnsureComp<EtherealComponent>(args.Performer);
newethereal.Darken = true;

Spawn("ShadowkinShadow", Transform(args.Performer).Coordinates);
Spawn("EffectFlashShadowkinDarkSwapOn", Transform(args.Performer).Coordinates);

args.Handled = true;
}
}
FoxxoTrystan marked this conversation as resolved.
Show resolved Hide resolved

if (args.Handled)
_psionics.LogPowerUsed(args.Performer, "DarkSwap", 0, 0);
}
}
}


Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,9 @@ public override void Initialize()

private void OnPowerUsed(DispelPowerActionEvent args)
{
if (!_psionics.OnAttemptPowerUse(args.Performer, "dispel"))
return;

var ev = new DispelledEvent();
RaiseLocalEvent(args.Target, ev, false);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ public override void Initialize()

private void OnPowerUsed(EntityUid uid, PsionicComponent component, PsionicHealOtherPowerActionEvent args)
{
if (component.DoAfter is not null)
if (!_psionics.OnAttemptPowerUse(args.Performer, args.PowerName))
return;

args.ModifiedAmplification = _psionics.ModifiedAmplification(uid, component);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,9 @@ public override void Initialize()

private void OnPowerUsed(EntityUid uid, MetapsionicPowerComponent component, MetapsionicPowerActionEvent args)
{
if (!_psionics.OnAttemptPowerUse(args.Performer, "metapsionic pulse"))
return;

foreach (var entity in _lookup.GetEntitiesInRange(uid, component.Range))
{
if (HasComp<PsionicComponent>(entity) && entity != uid && !HasComp<PsionicInsulationComponent>(entity) &&
Expand Down
Loading
Loading