Skip to content

Commit

Permalink
Harpy Visual Rework (#677)
Browse files Browse the repository at this point in the history
* It begins

* Delete error.txt

* Patch by Debug

* HIDING WINGS NOW WORKS

* Runs smoother from Shared

* Delete HarpyVisualsSystem.cs

* The entire clientside script is no longer needed, and the visuals now work correctly. Helmetbug is gone.

* Update HarpyVisualsSystem.cs

* First completed Harpy Hardsuit

* Captain and Atmos tech birdsuits

* Update hardsuit-helmets.yml

* And more content

* Adding new finch tail <3

* whoops

* guh

* I swear the tail works now, I just need the adhd meds to kick in

* birb juggsuit

* More stuff

* Nukie hardsuits

* fixing clipping issues on birb juggsuit

* Update meta.json

* aaaaaaaaa

* two more

* Ton of extra harpy sprites

* Create equipped-INNERCLOTHING-harpy.png

* Harpy Ultravision trait

TODO: Optional trait that disables it

* Trait that removes Ultravision

* Code optimizations

* Adding hueshift maps to all harpy markings

* No more jumpsuits

* 1984 the harpy jumpsuits, they are no longer needed

* last 2

* final QA pass

* shennanigans related to an earlier merge conflict

---------

Signed-off-by: VMSolidus <[email protected]>
  • Loading branch information
VMSolidus authored Feb 12, 2024
1 parent c13e538 commit 1f3128c
Show file tree
Hide file tree
Showing 137 changed files with 1,572 additions and 510 deletions.
5 changes: 5 additions & 0 deletions Content.Client/DeltaV/Harpy/HarpyVisualsComponent.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
namespace Content.Client.DeltaV.Harpy;

[RegisterComponent]
public sealed partial class HarpyVisualsComponent : Component
{ }
44 changes: 44 additions & 0 deletions Content.Client/DeltaV/Overlays/UltraVisionOverlay.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
using Robust.Client.Graphics;
using Robust.Client.Player;
using Robust.Shared.Enums;
using Robust.Shared.Prototypes;
using Content.Shared.Abilities;

namespace Content.Client.DeltaV.Overlays;

public sealed partial class UltraVisionOverlay : Overlay
{
[Dependency] private readonly IPrototypeManager _prototypeManager = default!;
[Dependency] private readonly IPlayerManager _playerManager = default!;
[Dependency] IEntityManager _entityManager = default!;


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

public UltraVisionOverlay()
{
IoCManager.InjectDependencies(this);
_ultraVisionShader = _prototypeManager.Index<ShaderPrototype>("UltraVision").Instance().Duplicate();
}

protected override void Draw(in OverlayDrawArgs args)
{
if (ScreenTexture == null)
return;
if (_playerManager.LocalPlayer?.ControlledEntity is not {Valid: true} player)
return;
if (!_entityManager.HasComponent<UltraVisionComponent>(player))
return;

_ultraVisionShader?.SetParameter("SCREEN_TEXTURE", ScreenTexture);


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

namespace Content.Client.DeltaV.Overlays;

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

private UltraVisionOverlay _overlay = default!;

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

SubscribeLocalEvent<UltraVisionComponent, ComponentInit>(OnUltraVisionInit);
SubscribeLocalEvent<UltraVisionComponent, ComponentShutdown>(OnUltraVisionShutdown);

_overlay = new();
}

private void OnUltraVisionInit(EntityUid uid, UltraVisionComponent component, ComponentInit args)
{
_overlayMan.AddOverlay(_overlay);
}

private void OnUltraVisionShutdown(EntityUid uid, UltraVisionComponent component, ComponentShutdown args)
{
_overlayMan.RemoveOverlay(_overlay);
}
}
8 changes: 8 additions & 0 deletions Content.Shared/DeltaV/Abilities/DefaultVisionComponent.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
using Robust.Shared.GameStates;
namespace Content.Shared.DeltaV.Abilities;

[RegisterComponent]
[NetworkedComponent]

public sealed partial class DefaultVisionComponent : Component
{}
19 changes: 19 additions & 0 deletions Content.Shared/DeltaV/Abilities/DefaultVisionSystem.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
using Content.Shared.Abilities;
using Content.Shared.DeltaV.Abilities;

namespace Content.Client.DeltaV.Overlays;

public sealed partial class DefaultVisionSystem : EntitySystem
{
public override void Initialize()
{
base.Initialize();

SubscribeLocalEvent<DefaultVisionComponent, ComponentInit>(OnDefaultVisionInit);
}

private void OnDefaultVisionInit(EntityUid uid, DefaultVisionComponent component, ComponentInit args)
{
RemComp<UltraVisionComponent>(uid);
}
}
8 changes: 8 additions & 0 deletions Content.Shared/DeltaV/Abilities/UltraVisionComponent.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
using Robust.Shared.GameStates;
namespace Content.Shared.Abilities;

[RegisterComponent]
[NetworkedComponent]

public sealed partial class UltraVisionComponent : Component
{}
1 change: 1 addition & 0 deletions Content.Shared/DeltaV/Harpy/HarpySingerComponent.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
using Robust.Shared.GameStates;
using Robust.Shared.Prototypes;
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype;
using Robust.Shared.Serialization;

namespace Content.Shared.DeltaV.Harpy
{
Expand Down
40 changes: 40 additions & 0 deletions Content.Shared/DeltaV/Harpy/HarpyVisualsSystem.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
using Content.Shared.Inventory.Events;
using Content.Shared.Tag;
using Content.Shared.Humanoid;

namespace Content.Shared.DeltaV.Harpy;

public sealed class HarpyVisualsSystem : EntitySystem
{
[Dependency] private readonly TagSystem _tagSystem = default!;
[Dependency] private readonly SharedHumanoidAppearanceSystem _humanoidSystem = default!;

[ValidatePrototypeId<TagPrototype>]
private const string HarpyWingsTag = "HidesHarpyWings";

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

SubscribeLocalEvent<HarpySingerComponent, DidEquipEvent>(OnDidEquipEvent);
SubscribeLocalEvent<HarpySingerComponent, DidUnequipEvent>(OnDidUnequipEvent);
}

private void OnDidEquipEvent(EntityUid uid, HarpySingerComponent component, DidEquipEvent args)
{
if (args.Slot == "outerClothing" && _tagSystem.HasTag(args.Equipment, HarpyWingsTag))
{
_humanoidSystem.SetLayerVisibility(uid, HumanoidVisualLayers.RArm, false);
_humanoidSystem.SetLayerVisibility(uid, HumanoidVisualLayers.Tail, false);
}
}

private void OnDidUnequipEvent(EntityUid uid, HarpySingerComponent component, DidUnequipEvent args)
{
if (args.Slot == "outerClothing" && _tagSystem.HasTag(args.Equipment, HarpyWingsTag))
{
_humanoidSystem.SetLayerVisibility(uid, HumanoidVisualLayers.RArm, true);
_humanoidSystem.SetLayerVisibility(uid, HumanoidVisualLayers.Tail, true);
}
}
}
9 changes: 9 additions & 0 deletions Content.Shared/DeltaV/Harpy/SharedHarpyVisualsComponent.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
using Robust.Shared.Serialization;

namespace Content.Shared.DeltaV.Harpy;

[Serializable, NetSerializable]
public enum HardsuitWings : byte
{
Worn
}
4 changes: 3 additions & 1 deletion Content.Shared/Roles/StartingGearPrototype.cs
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
using Content.Shared.DeltaV.Harpy;
using Content.Shared.Preferences;
using Robust.Shared.Prototypes;

Expand Down Expand Up @@ -32,7 +33,8 @@ public string GetGear(string slot, HumanoidCharacterProfile? profile)
{
if (profile != null)
{
if (slot == "jumpsuit" && profile.Clothing == ClothingPreference.Jumpskirt && !string.IsNullOrEmpty(InnerClothingSkirt))
if (slot == "jumpsuit" && profile.Clothing == ClothingPreference.Jumpskirt && !string.IsNullOrEmpty(InnerClothingSkirt)
|| slot == "jumpsuit" && profile.Species == "Harpy" && !string.IsNullOrEmpty(InnerClothingSkirt)) //DeltaV adds this line to prevent Harpies from starting with jumpsuits
return InnerClothingSkirt;
if (slot == "back" && profile.Backpack == BackpackPreference.Satchel && !string.IsNullOrEmpty(Satchel))
return Satchel;
Expand Down
5 changes: 5 additions & 0 deletions Resources/Locale/en-US/deltav/chat/managers/chat_manager.ftl
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,8 @@ chat-speech-verb-felinid-1 = mraows
chat-speech-verb-felinid-2 = mews
chat-speech-verb-felinid-3 = meows
chat-speech-verb-felinid-4 = purrs out
chat-speech-verb-harpy-1 = chirps
chat-speech-verb-harpy-2 = tweets
chat-speech-verb-harpy-3 = caws
chat-speech-verb-harpy-4 = trills
52 changes: 36 additions & 16 deletions Resources/Locale/en-US/deltav/markings/harpy.ftl
Original file line number Diff line number Diff line change
@@ -1,26 +1,32 @@
marking-HarpyWingDefault = Basic Wings
marking-HarpyWingDefault-harpy = Wings
marking-HarpyWing2Tone = Two Tone Wings
marking-HarpyWing2Tone-harpy2tone1 = Top Half
marking-HarpyWing2Tone-harpy2tone2 = Bottom Half
marking-HarpyWingFolded = Folded Wings
marking-HarpyWingFolded-harpyfolded = Wings
marking-HarpyWing3Tone = Three Tone Wings
marking-HarpyWing3Tone-harpy3tone1 = Top Third
marking-HarpyWing3Tone-harpy3tone2 = Middle Third
marking-HarpyWing3tone-harpy3tone3 = Bottom Third
marking-HarpyWingClassic = Classic Wings
marking-HarpyWingClassic-classicharpy = Wings
marking-HarpyWingSpeckled = Speckled Wings
marking-HarpyWingSpeckled-harpyspeckled1 = Main
marking-HarpyWingSpeckled-harpyspeckled2 = Speckles
marking-HarpyWing2ToneClassic = Classic Two Tone Wings
marking-HarpyWing2ToneClassic-harpy2tone1 = Top Half
marking-HarpyWing2ToneClassic-harpy2tone2 = Bottom Half
marking-HarpyWingUndertone = Wings with Undertone
marking-HarpyWingUndertone-harpyundertone1 = Front
marking-HarpyWingUndertone-harpyundertone2 = Back
marking-HarpyWing3ToneClassic = Classic Three Tone Wings
marking-HarpyWing3ToneClassic-harpy3tone1 = Top Third
marking-HarpyWing3ToneClassic-harpy3tone2 = Middle Third
marking-HarpyWing3ToneClassic-harpy3tone3 = Bottom Third
marking-HarpyWingTips = Wings with Feather Tips
marking-HarpyWingTips-harpywingtip1 = Main
marking-HarpyWingTips-harpywingtip2 = Feathertips
marking-HarpyWingSpeckledClassic = Speckled Classic Wings
marking-HarpyWingSpeckledClassic-harpyspeckled1 = Main
marking-HarpyWingSpeckledClassic-harpyspeckled2 = Speckles
marking-HarpyWingUndertoneClassic = Classic Wings with Undertone
marking-HarpyWingUndertoneClassic-harpyundertone1 = Front
marking-HarpyWingUndertoneClassic-harpyundertone2 = Back
marking-HarpyWingTipsClassic = Classic Wings with Feather Tips
marking-HarpyWingTipsClassic-harpywingtip1 = Main
marking-HarpyWingTipsClassic-harpywingtip2 = Feathertips
marking-HarpyEarsDefault = Feather Tufts
marking-HarpyEarsDefault-harpy_ears_default = Tufts
Expand All @@ -30,3 +36,17 @@ marking-HarpyTailPhoenix-phoenix_tail = Tail
marking-HarpyTailRooster = Rooster Tail
marking-HarpyTailRooster-rooster_tail = Tail
marking-HarpyTailFinch = Finch Tail
marking-HarpyTailFinch-finch_tail = Tail
marking-HarpyChestDefault = Wing & Groin Under-Clothes
marking-HarpyChestDefault-upper = Wing Under-Clothes
marking-HarpyChestDefault-lower = Groin Under-Clothes
marking-HarpyLegsDefault = Avian Legs
marking-HarpyLegsDefault-thighs = Thighs
marking-HarpyFeetDefault = Avian Feet
marking-HarpyFeetDefault-feet = Feet
marking-HarpyFeetDefault-talons = Talons
4 changes: 4 additions & 0 deletions Resources/Locale/en-US/deltav/traits/traits.ftl
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
trait-scottish-accent-name = Scottish Accent
trait-scottish-accent-desc = Fer tha folk who come frae Hielan clan.
trait-ultravision-desc = Whether through custom bionic eyes, random mutation,
or being a Harpy, you perceive the world with ultraviolet light.
trait-defaultvision-desc = You lack any vision variation from the norm for a non-human species.
trait-uncloneable-name = Uncloneable
trait-uncloneable-desc = Cannot be cloned
Loading

0 comments on commit 1f3128c

Please sign in to comment.