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

Lamia & Segmented Entity System #11

Open
wants to merge 83 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
83 commits
Select commit Hold shift + click to select a range
356edec
Noodle Begins
VMSolidus Nov 25, 2023
026cd3b
Starting the process of moving this code to Shared & Client
VMSolidus Nov 26, 2023
c647da9
Adding lamia unique melee
VMSolidus Nov 26, 2023
30aa81d
Update lamia.yml
VMSolidus Nov 26, 2023
6ed9df6
Making a pass at their YAML
VMSolidus Nov 27, 2023
950b7b3
More lamia updating
VMSolidus Nov 27, 2023
c2f4756
LamiaSystem is returning to the server again
VMSolidus Dec 12, 2023
89a311e
More in progress stuff
VMSolidus Dec 15, 2023
9234a36
Create LamiaSegmentVisuals.cs
VMSolidus Dec 15, 2023
05edd44
Update visualizer
VMSolidus Dec 15, 2023
9b29ee0
Update lamia.yml
VMSolidus Dec 15, 2023
294edd3
Revert "Update lamia.yml"
VMSolidus Dec 17, 2023
e166895
Revert "Update visualizer"
VMSolidus Dec 17, 2023
c5bc6e8
Revert "Create LamiaSegmentVisuals.cs"
VMSolidus Dec 17, 2023
2f67851
Revert "More in progress stuff"
VMSolidus Dec 17, 2023
00a826c
Revert "LamiaSystem is returning to the server again"
VMSolidus Dec 17, 2023
14ebfad
Reverting to the last state where we could spawn a Lamia
VMSolidus Dec 17, 2023
53f50dd
We can now spawn the noodles again
VMSolidus Dec 17, 2023
91641b9
Update reptilian.yml
VMSolidus Dec 19, 2023
2ec632a
We were missing the SegmentSpawnedEvent
VMSolidus Dec 20, 2023
bc8e48c
Update lamia.yml
VMSolidus Dec 21, 2023
94ea027
Now requires engine changes.
VMSolidus Dec 21, 2023
878b155
Markings but not colors
VMSolidus Dec 23, 2023
9a25681
This is the closest we have so far
VMSolidus Dec 24, 2023
27015d4
Marking parity!
VMSolidus Dec 28, 2023
ab78fcd
Update LamiaSystem.cs
VMSolidus Dec 28, 2023
c359dab
Blacklisting Lamia from Storage Containers
VMSolidus Dec 28, 2023
4a81c2a
I promise you debug this isn't abandoned
VMSolidus Jan 29, 2024
5b4bf6e
I finally return to this after a hiatus to finish Harpies
VMSolidus Feb 14, 2024
f368ad9
Hardsuit Sprite Transfer
VMSolidus Feb 14, 2024
45505f6
prevent snakes from wearing pants
VMSolidus Feb 14, 2024
b0b5ef7
Masking helpers are no longer needed, 1984 anytaur mask
VMSolidus Feb 14, 2024
360c745
Lamia can no longer hurt themselves
VMSolidus Feb 14, 2024
2198c31
Lamia can now shoot over tail
VMSolidus Feb 14, 2024
ce8efc6
Update LamiaSystem.cs
VMSolidus Feb 14, 2024
32499ec
Update lamia.yml
VMSolidus Feb 14, 2024
c8b33fb
Yee
VMSolidus Feb 14, 2024
c97e000
New working version
VMSolidus Feb 16, 2024
adb5e87
damage system refactor
VMSolidus Feb 17, 2024
b9e800d
more equation fine tuning
VMSolidus Feb 17, 2024
f483415
Update LamiaSystem.cs
VMSolidus Feb 17, 2024
479ee18
Update lamia.yml
VMSolidus Feb 17, 2024
c5026c2
Fixing the portal bug
VMSolidus Feb 17, 2024
7c0d258
Segment system refactor complete
VMSolidus Feb 17, 2024
467f520
Beeg final push for Beta
VMSolidus Feb 20, 2024
03d75cb
RSI fixes
VMSolidus Feb 20, 2024
780deb8
APGLv3
VMSolidus Feb 20, 2024
238cb53
Update lamia.yml
VMSolidus Feb 20, 2024
214c934
send it
VMSolidus Feb 20, 2024
221991f
More small fixes
VMSolidus Feb 20, 2024
389b01a
guh
VMSolidus Feb 20, 2024
c01fdd3
more
VMSolidus Feb 20, 2024
a8ad70d
A bunch of placeholders needed to pass tests
VMSolidus Feb 20, 2024
2dd9d3f
1984 the onhitself subscription
VMSolidus Mar 6, 2024
85c83e4
Update LamiaSystem.cs
VMSolidus Mar 11, 2024
6187158
guh
VMSolidus Mar 28, 2024
5357f2f
Snekstation14
VMSolidus Apr 1, 2024
8d7cde3
Merge branch 'master' into LamiaSystem
VMSolidus Jun 11, 2024
48ae4d7
Fuck its lets go, no more procrastinating on sneks
VMSolidus Jun 17, 2024
c947677
Update SegmentedEntitySystem.cs
VMSolidus Jun 17, 2024
5284df0
Merge branch 'master' into LamiaSystem
VMSolidus Jun 23, 2024
6192070
Merge branch 'master' into LamiaSystem
VMSolidus Jun 24, 2024
202ab28
Update SegmentedEntitySystem.cs
VMSolidus Jun 24, 2024
de23fec
Merge branch 'LamiaSystem' of https://github.com/Simple-Station/Einst…
VMSolidus Jun 24, 2024
84edee0
Implement shoot over segment
VMSolidus Jun 24, 2024
640ac85
Merge branch 'master' into LamiaSystem
VMSolidus Jun 30, 2024
9b135ee
Prove I am still working on this
VMSolidus Jul 19, 2024
4046e6c
Merge branch 'master' into LamiaSystem
VMSolidus Jul 21, 2024
41eeba0
Fix mistakes from merge conflicts
VMSolidus Jul 21, 2024
c630d63
Lamia are *technically* "Playable" again.
VMSolidus Jul 22, 2024
933fc2a
Make Lamiae Out of Tris Instead of Sprites (#673)
Elijahrane Aug 5, 2024
96190fa
Merge branch 'master' into LamiaSystem
VMSolidus Sep 30, 2024
05d5581
Update lamia.yml
VMSolidus Oct 3, 2024
98e1304
Revert "Make Lamiae Out of Tris Instead of Sprites (#673)"
VMSolidus Oct 29, 2024
5e14210
Merge branch 'master' into LamiaSystem
VMSolidus Oct 29, 2024
b5a4fcc
Merge branch 'master' into LamiaSystem
VMSolidus Nov 13, 2024
501879e
Update SegmentedEntitySystem.cs
VMSolidus Nov 13, 2024
c56af58
Merge branch 'LamiaSystem' of https://github.com/Simple-Station/Einst…
VMSolidus Nov 13, 2024
eba52fb
Update meta.json
VMSolidus Nov 14, 2024
2efba19
Revert "Revert "Make Lamiae Out of Tris Instead of Sprites (#673)""
VMSolidus Nov 14, 2024
2e46568
aaaa
VMSolidus Nov 14, 2024
463f2a1
Fuck it, technically playable
VMSolidus Nov 14, 2024
f81ca02
Update lamia.yml
VMSolidus Nov 14, 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
184 changes: 184 additions & 0 deletions Content.Client/DeltaV/Lamiae/SnakeOverlay.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,184 @@
/*
* This file is licensed under AGPLv3
* Copyright (c) 2024 Rane
* See AGPLv3.txt for details.
*/

Comment on lines +1 to +6
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

eh

using Content.Shared.SegmentedEntity;
using Content.Shared.Humanoid;
using Content.Shared.Humanoid.Markings;
using Content.Client.Resources;
using Robust.Client.ResourceManagement;
using Robust.Client.Graphics;
using Robust.Shared.Enums;
using System.Numerics;
using System.Linq;


Comment on lines +16 to +17
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change

namespace Content.Client.DeltaV.Lamiae;

/// <summary>
/// This draws lamia segments directly from polygons instead of sprites. This is a very novel approach as of the time this is being written (August 2024) but it wouldn't surprise me
/// if there's a better way to do this at some point. Currently we have a very heavy restriction on the tools we can make, forcing me to make several helpers that may be redundant later.
/// This will be overcommented because I know you haven't seen code like this before and you might want to copy it.
/// This is an expansion on some techniques I discovered in (https://github.com/Elijahrane/Delta-v/blob/49d76c437740eab79fc622ab50d628b926e6ddcb/Content.Client/DeltaV/Arcade/S3D/Renderer/S3DRenderer.cs)
/// </summary>
public sealed class SnakeOverlay : Overlay
{
private readonly IResourceCache _resourceCache;
private readonly IEntityManager _entManager;
private readonly SharedTransformSystem _transform;
private readonly SharedHumanoidAppearanceSystem _humanoid = default!;

// Look through these carefully. WorldSpace is useful for debugging. Note that this defaults to "screen space" which breaks when you try and get the world handle.
public override OverlaySpace Space => OverlaySpace.WorldSpaceEntities;

// Overlays are strange and you need this pattern where you define readonly deps above, and then make a constructor with this pattern. Anything that creates this overlay will then
// have to provide all the deps.
public SnakeOverlay(IEntityManager entManager, IResourceCache resourceCache)
{
_resourceCache = resourceCache;
// we get ent manager from SnakeOverlaySystem turning this on and passing it
_entManager = entManager;
// with ent manager we can fetch our other entity systems
_transform = _entManager.EntitySysManager.GetEntitySystem<SharedTransformSystem>();
_humanoid = _entManager.EntitySysManager.GetEntitySystem<SharedHumanoidAppearanceSystem>();

// draw at drawdepth 3
ZIndex = 3;
}

// This step occurs each frame. For some overlays you may want to conisder limiting how often they update, but for player entities that move around fast we'll just do it every frame.
protected override void Draw(in OverlayDrawArgs args)
{
// load the handle, the "pen" we draw with
var handle = args.WorldHandle;

// Get all lamiae the client knows of and their transform in a way we can enumerate over
var enumerator = _entManager.AllEntityQueryEnumerator<SegmentedEntityComponent, TransformComponent>();

// I go over the collection above, pulling out an EntityUid and the two components I need for each.
while (enumerator.MoveNext(out var uid, out var lamia, out var xform))
{
// Skip ones that are off-map. "Map" in this context means interconnected stuff you can travel between by moving, rather than needing e.g. FTL to load a new map.
if (xform.MapID != args.MapId)
continue;

// Skip ones where they are not loaded properly, uninitialized, or w/e
if (lamia.Segments.Count < lamia.NumberOfSegments)
{
_entManager.Dirty(uid, lamia); // pls give me an update...
continue;
}

// By the way, there's a hack to mitigate overdraw somewhat. Check out whatever is going on with the variable called "bounds" in DoAfterOverlay.
// I won't do it here because (1) it's ugly and (2) theoretically these entities can be fucking huge and you'll see the tail end of them when they are way off screen.
// On a PVS level I think segmented entities should be all-or-nothing when it comes to PVS range, that is you either load all of their segments or none.

// Color.White is drawing without modifying color. For clothed tails, we should use White. For skin, we should use the color of the marking.
// TODO: Better way to cache this
if (_entManager.TryGetComponent<HumanoidAppearanceComponent>(uid, out var humanoid))
{
if (humanoid.MarkingSet.TryGetCategory(MarkingCategories.Tail, out var tailMarkings))
{
var col = tailMarkings.First().MarkingColors.First();
DrawLamia(handle, lamia, col);
}
}
else
{
DrawLamia(handle, lamia, Color.White);
}
}
}

// This is where we do the actual drawing.
private void DrawLamia(DrawingHandleWorld handle, SegmentedEntityComponent lamia, Color color)
{
// We're going to store all our verticies in here and then draw them
List<DrawVertexUV2D> verts = new List<DrawVertexUV2D>();

// Radius of the initial segment
float radius = lamia.InitialRadius;

// We're storing the left and right verticies of the last segment so we can start drawing from there without gaps
Vector2? lastPtCW = null;
Vector2? lastPtCCW = null;

var tex = _resourceCache.GetTexture(lamia.TexturePath);

int i = 1;
// do each segment except the last one normally
while (i < lamia.Segments.Count - 1)
{
// get centerpoints of last segment and this one
var origin = _transform.GetWorldPosition(_entManager.GetEntity(lamia.Segments[i - 1]));
var destination = _transform.GetWorldPosition(_entManager.GetEntity(lamia.Segments[i]));

// get direction between the two points and normalize it
var connectorVec = destination - origin;
connectorVec = connectorVec.Normalized();

//get one rotated 90 degrees clockwise
var offsetVecCW = new Vector2(connectorVec.Y, 0 - connectorVec.X);

//and counterclockwise
var offsetVecCCW = new Vector2(0 - connectorVec.Y, connectorVec.X);

/// tri 1: line across first segment and corner of second
if (lastPtCW == null)
{
verts.Add(new DrawVertexUV2D(origin + offsetVecCW * radius, Vector2.Zero));
}
else
{
verts.Add(new DrawVertexUV2D((Vector2) lastPtCW, Vector2.Zero));
}

if (lastPtCCW == null)
{
verts.Add(new DrawVertexUV2D(origin + offsetVecCCW * radius, new Vector2(1, 0)));
}
else
{
verts.Add(new DrawVertexUV2D((Vector2) lastPtCCW, new Vector2(1, 0)));
}

verts.Add(new DrawVertexUV2D(destination + offsetVecCW * radius, new Vector2(0, 1)));

// tri 2: line across second segment and corner of first
if (lastPtCCW == null)
{
verts.Add(new DrawVertexUV2D(origin + offsetVecCCW * radius, new Vector2(1, 0)));
}
else
{
verts.Add(new DrawVertexUV2D((Vector2) lastPtCCW, new Vector2(1, 0)));
}

lastPtCW = destination + offsetVecCW * radius;
verts.Add(new DrawVertexUV2D((Vector2) lastPtCW, new Vector2(0, 1)));
lastPtCCW = destination + offsetVecCCW * radius;
verts.Add(new DrawVertexUV2D((Vector2) lastPtCCW, new Vector2(1, 1)));

// slim down a bit for next segment
radius *= lamia.SlimFactor;

i++;
}

// draw tail (1 tri)
if (lastPtCW != null && lastPtCCW != null)
{
verts.Add(new DrawVertexUV2D((Vector2) lastPtCW, new Vector2(0, 0)));
verts.Add(new DrawVertexUV2D((Vector2) lastPtCCW, new Vector2(1, 0)));

var destination = _transform.GetWorldPosition(_entManager.GetEntity(lamia.Segments.Last()));

verts.Add(new DrawVertexUV2D(destination, new Vector2(0.5f, 1f)));
}

// Draw all of the triangles we just pit in at once
handle.DrawPrimitives(DrawPrimitiveTopology.TriangleList, texture: tex, verts.ToArray().AsSpan(), color);
}
}
32 changes: 32 additions & 0 deletions Content.Client/DeltaV/Lamiae/SnakeOverlaySystem.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
/*
* This file is licensed under AGPLv3
* Copyright (c) 2024 Rane
* See AGPLv3.txt for details.
*/

Comment on lines +1 to +6
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

eh

using Robust.Client.Graphics;
using Robust.Client.ResourceManagement;

namespace Content.Client.DeltaV.Lamiae;

/// <summary>
/// This system turns on our always-on overlay. I have no opinion on this design pattern or the existence of this file.
/// It also fetches the deps it needs.
/// </summary>
public sealed class SnakeOverlaySystem : EntitySystem
{
[Dependency] private readonly IOverlayManager _overlay = default!;
[Dependency] private readonly IResourceCache _resourceCache = default!;

public override void Initialize()
{
base.Initialize();
_overlay.AddOverlay(new SnakeOverlay(EntityManager, _resourceCache));
}

public override void Shutdown()
{
base.Shutdown();
_overlay.RemoveOverlay<SnakeOverlay>();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
using Content.Shared.Ghost;
using Content.Shared.Maps;
using Content.Shared.Parallax;
using Content.Shared.SegmentedEntity;
using Content.Shared.Shuttles.Components;
using Content.Shared.Shuttles.Systems;
using Content.Shared.StatusEffect;
Expand Down Expand Up @@ -615,7 +616,9 @@ private void KnockOverKids(TransformComponent xform, ref ValueList<EntityUid> to
var childEnumerator = xform.ChildEnumerator;
while (childEnumerator.MoveNext(out var child))
{
if (!_buckleQuery.TryGetComponent(child, out var buckle) || buckle.Buckled)
if (!_buckleQuery.TryGetComponent(child, out var buckle) || buckle.Buckled
|| HasComp<SegmentedEntityComponent>(child)
|| HasComp<SegmentedEntitySegmentComponent>(child))
continue;

toKnock.Add(child);
Expand Down
2 changes: 1 addition & 1 deletion Content.Server/Teleportation/PortalSystem.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using Content.Shared.Administration.Logs;
using Content.Shared.Administration.Logs;
using Content.Shared.Database;
using Content.Shared.Ghost;
using Content.Shared.Mind.Components;
Expand Down
8 changes: 7 additions & 1 deletion Content.Server/Weapons/Ranged/Systems/GunSystem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -203,7 +203,13 @@ public override void Shoot(EntityUid gunUid, GunComponent gun, List<(EntityUid?
if (!rayCastResults.Any())
break;

var result = rayCastResults[0];
var raycastEvent = new HitScanAfterRayCastEvent(rayCastResults);
RaiseLocalEvent(lastUser, ref raycastEvent);

if (raycastEvent.RayCastResults == null)
break;

var result = raycastEvent.RayCastResults[0];
var hit = result.HitEntity;
lastHit = hit;

Expand Down
1 change: 1 addition & 0 deletions Content.Shared/Roles/StartingGearPrototype.cs
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ public string GetGear(string slot, HumanoidCharacterProfile? profile)
{
case "jumpsuit" when profile.Clothing == ClothingPreference.Jumpskirt && !string.IsNullOrEmpty(InnerClothingSkirt):
case "jumpsuit" when profile.Species == "Harpy" && !string.IsNullOrEmpty(InnerClothingSkirt):
case "jumpsuit" when profile.Species == "Lamia" && !string.IsNullOrEmpty(InnerClothingSkirt):
return InnerClothingSkirt;
case "back" when profile.Backpack == BackpackPreference.Satchel && !string.IsNullOrEmpty(Satchel):
return Satchel;
Expand Down
10 changes: 10 additions & 0 deletions Content.Shared/SegmentedEntity/SegmentSpawnedEvent.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
namespace Content.Shared.SegmentedEntity;
public sealed class SegmentSpawnedEvent : EntityEventArgs
Comment on lines +1 to +2
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
namespace Content.Shared.SegmentedEntity;
public sealed class SegmentSpawnedEvent : EntityEventArgs
namespace Content.Shared.SegmentedEntity;
public sealed class SegmentSpawnedEvent : EntityEventArgs

{
public EntityUid Lamia = default!;

public SegmentSpawnedEvent(EntityUid lamia)
{
Lamia = lamia;
}
}
108 changes: 108 additions & 0 deletions Content.Shared/SegmentedEntity/SegmentedEntityComponent.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
/*
* Delta-V - This file is licensed under AGPLv3
* Copyright (c) 2024 Delta-V Contributors
* See AGPLv3.txt for details.
*/

Comment on lines +1 to +6
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
/*
* Delta-V - This file is licensed under AGPLv3
* Copyright (c) 2024 Delta-V Contributors
* See AGPLv3.txt for details.
*/

using Robust.Shared.GameStates;
using Robust.Shared.Serialization;
using Robust.Shared.Utility;

namespace Content.Shared.SegmentedEntity
{
Comment on lines +11 to +12
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Turn it into file scoped namespace

/// <summary>
/// Controls initialization of any Multi-segmented entity
/// </summary>
[RegisterComponent, NetworkedComponent]
[AutoGenerateComponentState]
public sealed partial class SegmentedEntityComponent : Component
{
/// <summary>
/// A list of each UID attached to the Lamia, in order of spawn
/// </summary>
[DataField("segments")]
[AutoNetworkedField]
Comment on lines +23 to +24
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
[DataField("segments")]
[AutoNetworkedField]
[DataField, AutoNetworkedField]

public List<NetEntity> Segments = new();

/// <summary>
/// A clamped variable that represents the number of segments to be spawned
/// </summary>
[DataField("numberOfSegments")]
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
[DataField("numberOfSegments")]
[DataField]

public int NumberOfSegments = 18;

/// <summary>
/// How wide the initial segment should be.
/// </summary>
[DataField("initialRadius")]
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
[DataField("initialRadius")]
[DataField]

public float InitialRadius = 0.3f;

/// <summary>
/// Texture of the segment.
/// </summary>
[DataField("texturePath", required: true)]
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
[DataField("texturePath", required: true)]
[DataField(required: true)]

public string TexturePath;

/// <summary>
/// If UseTaperSystem is true, this constant represents the rate at which a segmented entity will taper towards the tip. Tapering is on a logarithmic scale, and will asymptotically approach 0.
/// </summary>
[DataField("offsetConstant")]
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
[DataField("offsetConstant")]
[DataField]

public float OffsetConstant = 1.03f;

/// <summary>
/// Represents the prototype used to parent all segments
/// </summary>
[DataField("initialSegmentId")]
public string InitialSegmentId = "LamiaInitialSegment";
Comment on lines +54 to +55
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
[DataField("initialSegmentId")]
public string InitialSegmentId = "LamiaInitialSegment";
[DataField]
public EntProtoID InitialSegmentId = "LamiaInitialSegment";


/// <summary>
/// Represents the segment prototype to be spawned
/// </summary>
[DataField("segmentId")]
public string SegmentId = "LamiaSegment";
Comment on lines +60 to +61
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
[DataField("segmentId")]
public string SegmentId = "LamiaSegment";
[DataField]
public EntProtoID SegmentId = "LamiaSegment";


/// <summary>
/// How much to slim each successive segment.
/// </summary>
[DataField("slimFactor")]
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
[DataField("slimFactor")]
[DataField]

public float SlimFactor = 0.93f;

/// <summary>
/// Set to 1f for constant width
/// </summary>
[DataField("useTaperSystem")]
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
[DataField("useTaperSystem")]
[DataField]

public bool UseTaperSystem = true;

/// <summary>
/// The standard distance between the centerpoint of each segment.
/// </summary>
[DataField("staticOffset")]
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
[DataField("staticOffset")]
[DataField]

public float StaticOffset = 0.15f;

/// <summary>
/// The standard sprite scale of each segment.
/// </summary>
[DataField("staticScale")]
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
[DataField("staticScale")]
[DataField]

public float StaticScale = 1f;

/// <summary>
/// Used to more finely tune how much damage should be transfered from tail to body.
/// </summary>
[DataField("damageModifierOffset")]
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
[DataField("damageModifierOffset")]
[DataField]

public float DamageModifierOffset = 0.4f;

/// <summary>
/// A clamped variable that represents how far from the tip should tapering begin.
/// </summary>
[DataField("taperOffset")]
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
[DataField("taperOffset")]
[DataField]

public int TaperOffset = 18;

/// <summary>
/// Coefficient used to finely tune how much explosion damage should be transfered to the body. This is calculated multiplicatively with the derived damage modifier set.
/// </summary>
[DataField("explosiveModifierOffset")]
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
[DataField("explosiveModifierOffset")]
[DataField]

public float ExplosiveModifierOffset = 0.1f;

[DataField("bulletPassover")]
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
[DataField("bulletPassover")]
[DataField]

public bool BulletPassover = true;
}
}
Loading
Loading