Character Height Slider + Character Height Changes (#6320)
* Do the thing for everyone. Height is now +/- 20% for everyone. * Make the height slider show height. Solve for special cases. Solve world hunger. * Fixed some minor things. * Adjust some densities * Smaller character balance * Comment * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Oops, that was from a failed thing. * Size calc correction * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * people are tall in the future * I need to refactor a bit still. * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Refactor into a system * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * smol * Fixed remaining scale visual components and species * Remove MockScale. Just add scale visuals for Allalulo to compensate. * PR feedback * Slight refactor. Moved profile/species scale out of the scale system and put it into the HumanoidProfileSystem. Removed some CD logic that is no longer needed. * how'd this get in there * Move the other motorkind.yml to AprilFools dir * NO NO_PENTALTY lol * Other PR stuff * Other PR stuff * Add a dirty * Add some networking to the comp * Add small character to cloning * One more fixX --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
This commit is contained in:
parent
877267cd31
commit
f44178bec3
|
|
@ -9,6 +9,8 @@ using Content.Shared.Preferences;
|
||||||
using Robust.Client.UserInterface.Controls;
|
using Robust.Client.UserInterface.Controls;
|
||||||
using Robust.Shared.Enums;
|
using Robust.Shared.Enums;
|
||||||
using Robust.Shared.Prototypes;
|
using Robust.Shared.Prototypes;
|
||||||
|
using Content.Client._CD.Records.UI; // DeltaV
|
||||||
|
using Content.Shared._DV.Body.Systems; // DeltaV
|
||||||
|
|
||||||
namespace Content.Client.Lobby.UI;
|
namespace Content.Client.Lobby.UI;
|
||||||
|
|
||||||
|
|
@ -193,6 +195,7 @@ public sealed partial class HumanoidProfileEditor
|
||||||
RefreshLoadouts();
|
RefreshLoadouts();
|
||||||
UpdateSexControls(); // update sex for new species
|
UpdateSexControls(); // update sex for new species
|
||||||
UpdateSpeciesGuidebookIcon();
|
UpdateSpeciesGuidebookIcon();
|
||||||
|
UpdateHeightControls(); // DeltaV
|
||||||
ReloadPreview();
|
ReloadPreview();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -204,23 +207,22 @@ public sealed partial class HumanoidProfileEditor
|
||||||
ReloadProfilePreview();
|
ReloadProfilePreview();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private void UpdateHeightControls()
|
private void UpdateHeightControls()
|
||||||
{
|
{
|
||||||
if (Profile == null)
|
if (Profile == null)
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
|
|
||||||
var species = _species.Find(x => x.ID == Profile.Species);
|
var prototype = _prototypeManager.Index(Profile.Species);
|
||||||
if (species != null)
|
_defaultHeight = prototype.DefaultHeight;
|
||||||
_defaultHeight = species.DefaultHeight;
|
|
||||||
|
|
||||||
var prototype = _prototypeManager.Index<SpeciesPrototype>(Profile.Species);
|
|
||||||
var sliderPercent = (Profile.Height - prototype.MinHeight) /
|
var sliderPercent = (Profile.Height - prototype.MinHeight) /
|
||||||
(prototype.MaxHeight - prototype.MinHeight);
|
(prototype.MaxHeight - prototype.MinHeight);
|
||||||
CDHeightSlider.Value = sliderPercent;
|
CDHeightSlider.Value = sliderPercent;
|
||||||
CDHeight.Text = Profile.Height.ToString(CultureInfo.InvariantCulture);
|
|
||||||
|
var scaleReference = _defaultHeight * prototype.BaseScale.Y;
|
||||||
|
var newHeight = MathF.Round(MathHelper.Lerp(prototype.MinHeight, prototype.MaxHeight, sliderPercent), 2);
|
||||||
|
CDHeightLabel.Text = UnitConversion.GetMetricAndImperialDisplayFromScale(scaleReference * newHeight);
|
||||||
|
CDPullSpeedReductionLabel.Text = SmallCharacterSystem.GetPullSpeedPenaltyDisplayFromScale(newHeight);
|
||||||
}
|
}
|
||||||
// End CD - Character Records
|
// End CD - Character Records
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -73,9 +73,13 @@
|
||||||
<BoxContainer HorizontalExpand="True">
|
<BoxContainer HorizontalExpand="True">
|
||||||
<Label Text="{Loc 'humanoid-profile-editor-height-label'}" />
|
<Label Text="{Loc 'humanoid-profile-editor-height-label'}" />
|
||||||
<Control HorizontalExpand="True" />
|
<Control HorizontalExpand="True" />
|
||||||
|
<Label Name="CDHeightLabel" />
|
||||||
<Slider Name="CDHeightSlider" HorizontalAlignment="Right" SetWidth="300" MinValue="0.0" MaxValue="1.0"/>
|
<Slider Name="CDHeightSlider" HorizontalAlignment="Right" SetWidth="300" MinValue="0.0" MaxValue="1.0"/>
|
||||||
<LineEdit HorizontalAlignment="Right" Name="CDHeight" MinSize="60 0" Text="1.0" />
|
</BoxContainer>
|
||||||
<Button Name="CDHeightReset" Text="{Loc 'humanoid-profile-editor-reset-height-button'}" HorizontalAlignment="Right"/>
|
<BoxContainer HorizontalExpand="True">
|
||||||
|
<Label Text="{Loc 'humanoid-profile-editor-height-pull-speed-penalty-label'}" />
|
||||||
|
<Control HorizontalExpand="True" />
|
||||||
|
<Label Name="CDPullSpeedReductionLabel" />
|
||||||
</BoxContainer>
|
</BoxContainer>
|
||||||
<!-- End CD - Character Records -->
|
<!-- End CD - Character Records -->
|
||||||
<!-- Sex -->
|
<!-- Sex -->
|
||||||
|
|
|
||||||
|
|
@ -2,9 +2,6 @@ using Content.Client.Humanoid;
|
||||||
using Content.Client.Message;
|
using Content.Client.Message;
|
||||||
using Content.Client.Players.PlayTimeTracking;
|
using Content.Client.Players.PlayTimeTracking;
|
||||||
using Content.Client.Sprite;
|
using Content.Client.Sprite;
|
||||||
using Content.Client.UserInterface.Systems.Guidebook;
|
|
||||||
using Content.Shared._DV.Species; // DeltaV - Species hider
|
|
||||||
using Content.Shared.Body;
|
|
||||||
using Content.Shared.CCVar;
|
using Content.Shared.CCVar;
|
||||||
using Content.Shared.GameTicking;
|
using Content.Shared.GameTicking;
|
||||||
using Content.Shared.Humanoid;
|
using Content.Shared.Humanoid;
|
||||||
|
|
@ -22,13 +19,8 @@ using Robust.Shared.ContentPack;
|
||||||
using Robust.Shared.Enums;
|
using Robust.Shared.Enums;
|
||||||
using Robust.Shared.Prototypes;
|
using Robust.Shared.Prototypes;
|
||||||
using Direction = Robust.Shared.Maths.Direction;
|
using Direction = Robust.Shared.Maths.Direction;
|
||||||
// Begin CD - Character Records
|
using Content.Client._CD.Records.UI; // CD - Character Records
|
||||||
using System.Globalization;
|
using Content.Shared._DV.Body.Systems; // DV - Traits
|
||||||
using Content.Client._CD.Records.UI;
|
|
||||||
using Content.Shared._CD.Records;
|
|
||||||
// End CD - Character Records
|
|
||||||
using Content.Shared._DV.Traits;
|
|
||||||
using Content.Shared.Humanoid.Prototypes; // DV - Traits
|
|
||||||
|
|
||||||
namespace Content.Client.Lobby.UI
|
namespace Content.Client.Lobby.UI
|
||||||
{
|
{
|
||||||
|
|
@ -221,34 +213,18 @@ namespace Content.Client.Lobby.UI
|
||||||
// Begin CD - Character Records
|
// Begin CD - Character Records
|
||||||
#region CDHeight
|
#region CDHeight
|
||||||
|
|
||||||
CDHeight.OnTextChanged += args =>
|
|
||||||
{
|
|
||||||
if (Profile is null || !float.TryParse(args.Text, out var newHeight))
|
|
||||||
return;
|
|
||||||
|
|
||||||
var prototype = _prototypeManager.Index<SpeciesPrototype>(Profile.Species);
|
|
||||||
newHeight = MathF.Round(Math.Clamp(newHeight, prototype.MinHeight, prototype.MaxHeight), 2);
|
|
||||||
|
|
||||||
// The percentage between the start and end numbers, aka "inverse lerp"
|
|
||||||
var sliderPercent = (newHeight - prototype.MinHeight) /
|
|
||||||
(prototype.MaxHeight - prototype.MinHeight);
|
|
||||||
CDHeightSlider.Value = sliderPercent;
|
|
||||||
|
|
||||||
SetProfileHeight(newHeight);
|
|
||||||
};
|
|
||||||
|
|
||||||
CDHeightReset.OnPressed += _ =>
|
|
||||||
{
|
|
||||||
CDHeight.SetText(_defaultHeight.ToString(CultureInfo.InvariantCulture), true);
|
|
||||||
};
|
|
||||||
|
|
||||||
CDHeightSlider.OnValueChanged += _ =>
|
CDHeightSlider.OnValueChanged += _ =>
|
||||||
{
|
{
|
||||||
if (Profile is null)
|
if (Profile is null)
|
||||||
return;
|
return;
|
||||||
var prototype = _prototypeManager.Index<SpeciesPrototype>(Profile.Species);
|
|
||||||
|
var prototype = _prototypeManager.Index(Profile.Species);
|
||||||
var newHeight = MathF.Round(MathHelper.Lerp(prototype.MinHeight, prototype.MaxHeight, CDHeightSlider.Value), 2);
|
var newHeight = MathF.Round(MathHelper.Lerp(prototype.MinHeight, prototype.MaxHeight, CDHeightSlider.Value), 2);
|
||||||
CDHeight.Text = newHeight.ToString(CultureInfo.InvariantCulture);
|
|
||||||
|
var speciesScale = prototype.BaseScale.Y;
|
||||||
|
|
||||||
|
CDHeightLabel.Text = UnitConversion.GetMetricAndImperialDisplayFromScale(newHeight * speciesScale);
|
||||||
|
CDPullSpeedReductionLabel.Text = SmallCharacterSystem.GetPullSpeedPenaltyDisplayFromScale(newHeight);
|
||||||
SetProfileHeight(newHeight);
|
SetProfileHeight(newHeight);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -49,11 +49,6 @@
|
||||||
<Control HorizontalExpand="True" />
|
<Control HorizontalExpand="True" />
|
||||||
<Label Name="RecordContainerSpecies" Align="Right" />
|
<Label Name="RecordContainerSpecies" Align="Right" />
|
||||||
</BoxContainer>
|
</BoxContainer>
|
||||||
<BoxContainer Orientation="Horizontal" HorizontalExpand="True">
|
|
||||||
<Label Text="{Loc 'humanoid-profile-editor-cd-records-height'}"/>
|
|
||||||
<Control HorizontalExpand="True" />
|
|
||||||
<Label Name="RecordContainerHeight" Align="Right" />
|
|
||||||
</BoxContainer>
|
|
||||||
<BoxContainer Orientation="Horizontal" HorizontalExpand="True">
|
<BoxContainer Orientation="Horizontal" HorizontalExpand="True">
|
||||||
<Label Text="{Loc 'humanoid-profile-editor-cd-records-weight'}"/>
|
<Label Text="{Loc 'humanoid-profile-editor-cd-records-weight'}"/>
|
||||||
<Control HorizontalExpand="True" />
|
<Control HorizontalExpand="True" />
|
||||||
|
|
|
||||||
|
|
@ -325,8 +325,7 @@ public sealed partial class CharacterRecordViewer : FancyWindow
|
||||||
RecordContainerJob.Text = record.JobTitle; /* At some point in the future we might want to display the icon */
|
RecordContainerJob.Text = record.JobTitle; /* At some point in the future we might want to display the icon */
|
||||||
RecordContainerGender.Text = record.Gender.ToString();
|
RecordContainerGender.Text = record.Gender.ToString();
|
||||||
RecordContainerSpecies.Text = record.Species;
|
RecordContainerSpecies.Text = record.Species;
|
||||||
RecordContainerHeight.Text = cr.Height + " " + UnitConversion.GetImperialDisplayLength(cr.Height);
|
RecordContainerWeight.Text = $"{cr.Weight} ({UnitConversion.GetImperialDisplayMass(cr.Weight)})";
|
||||||
RecordContainerWeight.Text = cr.Weight + " " + UnitConversion.GetImperialDisplayMass(cr.Weight);
|
|
||||||
RecordContainerContactName.SetValue(cr.EmergencyContactName);
|
RecordContainerContactName.SetValue(cr.EmergencyContactName);
|
||||||
|
|
||||||
RecordContainerEmployment.Visible = false;
|
RecordContainerEmployment.Visible = false;
|
||||||
|
|
|
||||||
|
|
@ -5,12 +5,6 @@
|
||||||
<BoxContainer Orientation="Vertical" HorizontalExpand="True" Margin="10">
|
<BoxContainer Orientation="Vertical" HorizontalExpand="True" Margin="10">
|
||||||
<!-- Height, Weight -->
|
<!-- Height, Weight -->
|
||||||
<GridContainer Columns="2">
|
<GridContainer Columns="2">
|
||||||
<BoxContainer HorizontalExpand="True" SeparationOverride="2">
|
|
||||||
<Label Text="{Loc 'humanoid-profile-editor-cd-records-height'}" />
|
|
||||||
<Control HorizontalExpand="True" MinSize="5 0" />
|
|
||||||
<LineEdit Name="HeightEdit" HorizontalAlignment="Right" MinSize="60 0" />
|
|
||||||
<Label Name="HeightImperialLabel" MinWidth="60" />
|
|
||||||
</BoxContainer>
|
|
||||||
<BoxContainer HorizontalExpand="True" SeparationOverride="2">
|
<BoxContainer HorizontalExpand="True" SeparationOverride="2">
|
||||||
<Label Text="{Loc 'humanoid-profile-editor-cd-records-weight'}" />
|
<Label Text="{Loc 'humanoid-profile-editor-cd-records-weight'}" />
|
||||||
<Control HorizontalExpand="True" MinSize="5 0" />
|
<Control HorizontalExpand="True" MinSize="5 0" />
|
||||||
|
|
|
||||||
|
|
@ -25,14 +25,6 @@ public sealed partial class RecordEditorGui : Control
|
||||||
|
|
||||||
#region General
|
#region General
|
||||||
|
|
||||||
HeightEdit.OnTextChanged += args =>
|
|
||||||
{
|
|
||||||
if (!int.TryParse(args.Text, out var newHeight))
|
|
||||||
return;
|
|
||||||
UpdateImperialHeight(newHeight);
|
|
||||||
UpdateRecords(_records.WithHeight(newHeight));
|
|
||||||
};
|
|
||||||
|
|
||||||
WeightEdit.OnTextChanged += args =>
|
WeightEdit.OnTextChanged += args =>
|
||||||
{
|
{
|
||||||
if (!int.TryParse(args.Text, out var newWeight))
|
if (!int.TryParse(args.Text, out var newWeight))
|
||||||
|
|
@ -128,8 +120,6 @@ public sealed partial class RecordEditorGui : Control
|
||||||
|
|
||||||
private void UpdateWidgets()
|
private void UpdateWidgets()
|
||||||
{
|
{
|
||||||
HeightEdit.SetText(_records.Height.ToString());
|
|
||||||
UpdateImperialHeight(_records.Height);
|
|
||||||
WeightEdit.SetText(_records.Weight.ToString());
|
WeightEdit.SetText(_records.Weight.ToString());
|
||||||
UpdateImperialWeight(_records.Weight);
|
UpdateImperialWeight(_records.Weight);
|
||||||
ContactNameEdit.SetText(_records.EmergencyContactName);
|
ContactNameEdit.SetText(_records.EmergencyContactName);
|
||||||
|
|
@ -143,13 +133,8 @@ public sealed partial class RecordEditorGui : Control
|
||||||
PostmortemEdit.SetText(_records.PostmortemInstructions);
|
PostmortemEdit.SetText(_records.PostmortemInstructions);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void UpdateImperialHeight(int newHeight)
|
|
||||||
{
|
|
||||||
HeightImperialLabel.Text = UnitConversion.GetImperialDisplayLength(newHeight);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void UpdateImperialWeight(int newWeight)
|
private void UpdateImperialWeight(int newWeight)
|
||||||
{
|
{
|
||||||
WeightImperialLabel.Text = UnitConversion.GetImperialDisplayMass(newWeight);
|
WeightImperialLabel.Text = $"({UnitConversion.GetImperialDisplayMass(newWeight)})";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2,15 +2,47 @@ namespace Content.Client._CD.Records.UI;
|
||||||
|
|
||||||
public static class UnitConversion
|
public static class UnitConversion
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// DeltaV - The average height of a human in centimeters. According to the US CDC, its
|
||||||
|
/// 171 for men and 160 for women. So average of that is ~165cm.
|
||||||
|
///
|
||||||
|
/// Just kidding, we're going with EE's arbitrary standard of 175cm.
|
||||||
|
/// </summary>
|
||||||
|
private const int AVERAGE_HEIGHT_CM = 175;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// DeltaV - 1.0 scale is considered average for humans, so a scale of 1 will be 175cm.
|
||||||
|
/// Ensure that scale also includes the base species height AND the user-defined height.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="scale"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
private static int GetMetricHeightFromScale(float scale = 1)
|
||||||
|
{
|
||||||
|
// cast as int because we don't care about decimal
|
||||||
|
return (int)Math.Max(scale * AVERAGE_HEIGHT_CM, 1); // can't be shorter than 1cm I guess
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// DeltaV - Gets nicely formatted string that contains both metric and imperial measurements.
|
||||||
|
/// With a scale of 1, it should look like... 175cm (5' 9")
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="scale"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static string GetMetricAndImperialDisplayFromScale(float scale = 1)
|
||||||
|
{
|
||||||
|
var metricHeight = GetMetricHeightFromScale(scale);
|
||||||
|
return $"{metricHeight}cm ({GetImperialDisplayLength(metricHeight)})";
|
||||||
|
}
|
||||||
|
|
||||||
public static string GetImperialDisplayLength(int lengthCm)
|
public static string GetImperialDisplayLength(int lengthCm)
|
||||||
{
|
{
|
||||||
var heightIn = (int) Math.Round(lengthCm * 0.3937007874 /* cm to in*/);
|
var heightIn = (int)Math.Round(lengthCm * 0.3937007874 /* cm to in*/);
|
||||||
return $"({heightIn / 12}'{heightIn % 12}'')";
|
return $"{heightIn / 12}'{heightIn % 12}\"";
|
||||||
}
|
}
|
||||||
|
|
||||||
public static string GetImperialDisplayMass(int massKg)
|
public static string GetImperialDisplayMass(int massKg)
|
||||||
{
|
{
|
||||||
var weightLbs = (int) Math.Round(massKg * 2.2046226218 /* kg to lbs */);
|
var weightLbs = (int)Math.Round(massKg * 2.2046226218 /* kg to lbs */);
|
||||||
return $"({weightLbs} lbs)";
|
return $"{weightLbs} lbs";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,7 @@
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Numerics;
|
using Content.Shared._DV.Humanoid; // DeltaV
|
||||||
using Content.Shared._DV.Humanoid;
|
|
||||||
using Content.Shared.Humanoid.Markings;
|
using Content.Shared.Humanoid.Markings;
|
||||||
using Content.Shared.Humanoid;
|
using Content.Shared.Humanoid;
|
||||||
using Content.Shared.Sprite;
|
|
||||||
using Robust.Shared.Containers;
|
using Robust.Shared.Containers;
|
||||||
using Robust.Shared.Prototypes;
|
using Robust.Shared.Prototypes;
|
||||||
using Robust.Shared.Utility;
|
using Robust.Shared.Utility;
|
||||||
|
|
@ -18,7 +16,6 @@ public abstract partial class SharedVisualBodySystem : EntitySystem
|
||||||
[Dependency] private readonly IPrototypeManager _prototype = default!;
|
[Dependency] private readonly IPrototypeManager _prototype = default!;
|
||||||
[Dependency] private readonly MarkingManager _marking = default!;
|
[Dependency] private readonly MarkingManager _marking = default!;
|
||||||
[Dependency] private readonly SharedContainerSystem _container = default!;
|
[Dependency] private readonly SharedContainerSystem _container = default!;
|
||||||
[Dependency] private readonly SharedScaleVisualsSystem _scaleVisualsSystem = default!;
|
|
||||||
|
|
||||||
public override void Initialize()
|
public override void Initialize()
|
||||||
{
|
{
|
||||||
|
|
@ -28,7 +25,6 @@ public abstract partial class SharedVisualBodySystem : EntitySystem
|
||||||
SubscribeLocalEvent<VisualOrganMarkingsComponent, BodyRelayedEvent<OrganCopyAppearanceEvent>>(OnMarkingsOrganCopyAppearance);
|
SubscribeLocalEvent<VisualOrganMarkingsComponent, BodyRelayedEvent<OrganCopyAppearanceEvent>>(OnMarkingsOrganCopyAppearance);
|
||||||
SubscribeLocalEvent<VisualOrganComponent, BodyRelayedEvent<ApplyOrganProfileDataEvent>>(OnVisualOrganApplyProfile);
|
SubscribeLocalEvent<VisualOrganComponent, BodyRelayedEvent<ApplyOrganProfileDataEvent>>(OnVisualOrganApplyProfile);
|
||||||
SubscribeLocalEvent<VisualOrganMarkingsComponent, BodyRelayedEvent<ApplyOrganMarkingsEvent>>(OnMarkingsOrganApplyMarkings);
|
SubscribeLocalEvent<VisualOrganMarkingsComponent, BodyRelayedEvent<ApplyOrganMarkingsEvent>>(OnMarkingsOrganApplyMarkings);
|
||||||
SubscribeLocalEvent<HumanoidProfileComponent, ApplyOrganProfileDataEvent>(OnApplyOrganProfileData); // Delta V - Taking the solution from CD
|
|
||||||
|
|
||||||
InitializeModifiers();
|
InitializeModifiers();
|
||||||
InitializeInitial();
|
InitializeInitial();
|
||||||
|
|
@ -100,36 +96,9 @@ public abstract partial class SharedVisualBodySystem : EntitySystem
|
||||||
if (!other.Layer.Equals(ent.Comp.Layer))
|
if (!other.Layer.Equals(ent.Comp.Layer))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// Delta V - Begin Fix Height for Cloning
|
|
||||||
var height = other.Profile.Height;
|
|
||||||
if (TryComp<HumanoidProfileComponent>(args.Body.Owner, out var component))
|
|
||||||
ScaleBody((args.Body.Owner, component), height, height);
|
|
||||||
// Delta V - End
|
|
||||||
|
|
||||||
SetOrganAppearance(ent, other.Data);
|
SetOrganAppearance(ent, other.Data);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Delta V - BEGIN CD Solution
|
|
||||||
private void OnApplyOrganProfileData(Entity<HumanoidProfileComponent> entity, ref ApplyOrganProfileDataEvent args)
|
|
||||||
{
|
|
||||||
var speciesPrototype = _prototype.Index(entity.Comp.Species);
|
|
||||||
if (args.Base == null)
|
|
||||||
return;
|
|
||||||
|
|
||||||
var height = Math.Clamp(MathF.Round(args.Base.Value.Height, 2), speciesPrototype.MinHeight, speciesPrototype.MaxHeight);
|
|
||||||
|
|
||||||
ScaleBody(entity, speciesPrototype.ScaleHeight ? height : 1f, height);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void ScaleBody(Entity<HumanoidProfileComponent> entity, float heightX, float heightY)
|
|
||||||
{
|
|
||||||
_scaleVisualsSystem.SetSpriteScale(
|
|
||||||
entity.Owner,
|
|
||||||
new Vector2(heightX, heightY)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
// Delta V - END
|
|
||||||
|
|
||||||
|
|
||||||
private void OnMarkingsOrganCopyAppearance(Entity<VisualOrganMarkingsComponent> ent, ref BodyRelayedEvent<OrganCopyAppearanceEvent> args)
|
private void OnMarkingsOrganCopyAppearance(Entity<VisualOrganMarkingsComponent> ent, ref BodyRelayedEvent<OrganCopyAppearanceEvent> args)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,9 @@
|
||||||
|
using System.Numerics; // DeltaV
|
||||||
using Content.Shared.Examine;
|
using Content.Shared.Examine;
|
||||||
using Content.Shared.Humanoid.Prototypes;
|
using Content.Shared.Humanoid.Prototypes;
|
||||||
using Content.Shared.IdentityManagement;
|
using Content.Shared.IdentityManagement;
|
||||||
using Content.Shared.Preferences;
|
using Content.Shared.Preferences;
|
||||||
|
using Content.Shared.Sprite; // DeltaV
|
||||||
using Robust.Shared.GameObjects.Components.Localization;
|
using Robust.Shared.GameObjects.Components.Localization;
|
||||||
using Robust.Shared.Prototypes;
|
using Robust.Shared.Prototypes;
|
||||||
|
|
||||||
|
|
@ -11,6 +13,7 @@ public sealed class HumanoidProfileSystem : EntitySystem
|
||||||
{
|
{
|
||||||
[Dependency] private readonly IPrototypeManager _prototype = default!;
|
[Dependency] private readonly IPrototypeManager _prototype = default!;
|
||||||
[Dependency] private readonly GrammarSystem _grammar = default!;
|
[Dependency] private readonly GrammarSystem _grammar = default!;
|
||||||
|
[Dependency] private readonly SharedScaleVisualsSystem _scale = default!; // DeltaV
|
||||||
|
|
||||||
public override void Initialize()
|
public override void Initialize()
|
||||||
{
|
{
|
||||||
|
|
@ -28,6 +31,7 @@ public sealed class HumanoidProfileSystem : EntitySystem
|
||||||
ent.Comp.Age = profile.Age;
|
ent.Comp.Age = profile.Age;
|
||||||
ent.Comp.Species = profile.Species;
|
ent.Comp.Species = profile.Species;
|
||||||
ent.Comp.Sex = profile.Sex;
|
ent.Comp.Sex = profile.Sex;
|
||||||
|
ent.Comp.Height = profile.Height; // DeltaV
|
||||||
Dirty(ent);
|
Dirty(ent);
|
||||||
|
|
||||||
var sexChanged = new SexChangedEvent(ent.Comp.Sex, profile.Sex);
|
var sexChanged = new SexChangedEvent(ent.Comp.Sex, profile.Sex);
|
||||||
|
|
@ -37,6 +41,19 @@ public sealed class HumanoidProfileSystem : EntitySystem
|
||||||
{
|
{
|
||||||
_grammar.SetGender((ent, grammar), profile.Gender);
|
_grammar.SetGender((ent, grammar), profile.Gender);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// START DeltaV - Apply profile/species size
|
||||||
|
Vector2 scale = new(profile.Height, profile.Height);
|
||||||
|
|
||||||
|
// If visuals already exist, then re-apply
|
||||||
|
if (TryComp<ScaleVisualsComponent>(ent, out var scaledVisuals))
|
||||||
|
scale *= scaledVisuals.Scale;
|
||||||
|
|
||||||
|
var speciesProto = _prototype.Index(profile.Species);
|
||||||
|
scale *= speciesProto.BaseScale;
|
||||||
|
|
||||||
|
_scale.SetSpriteScale(ent, scale);
|
||||||
|
// END DeltaV
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnExamined(Entity<HumanoidProfileComponent> ent, ref ExaminedEvent args)
|
private void OnExamined(Entity<HumanoidProfileComponent> ent, ref ExaminedEvent args)
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
using System.Numerics; // DeltaV
|
||||||
using Content.Shared.Body;
|
using Content.Shared.Body;
|
||||||
using Content.Shared.Dataset;
|
using Content.Shared.Dataset;
|
||||||
using Content.Shared.Humanoid.Markings;
|
using Content.Shared.Humanoid.Markings;
|
||||||
|
|
@ -111,7 +112,7 @@ public sealed partial class SpeciesPrototype : IPrototype
|
||||||
/// The base height scale for this species
|
/// The base height scale for this species
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[DataField("baseScale")]
|
[DataField("baseScale")]
|
||||||
public System.Numerics.Vector2 BaseScale = new(1f, 1f);
|
public Vector2 BaseScale = new(1f, 1f);
|
||||||
// End DV - CD Character Records shouldn't nuke species heights
|
// End DV - CD Character Records shouldn't nuke species heights
|
||||||
|
|
||||||
// Begin CD - Character Records
|
// Begin CD - Character Records
|
||||||
|
|
@ -119,13 +120,13 @@ public sealed partial class SpeciesPrototype : IPrototype
|
||||||
/// The minimum height for this species
|
/// The minimum height for this species
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[DataField("minHeight")]
|
[DataField("minHeight")]
|
||||||
public float MinHeight = 0.9f; // DeltaV - less trolling with the heights
|
public float MinHeight = 0.8f; // DeltaV
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The maximum height for this species
|
/// The maximum height for this species
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[DataField("maxHeight")]
|
[DataField("maxHeight")]
|
||||||
public float MaxHeight = 1.1f; // DeltaV - less trolling with the heights
|
public float MaxHeight = 1.2f; // DeltaV
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The default height for this species
|
/// The default height for this species
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,5 @@
|
||||||
|
using Content.Shared._DV.Body.Components; // DeltaV
|
||||||
|
using Content.Shared._DV.Body.Systems; // DeltaV
|
||||||
using Content.Shared._ST.Interaction; // Stellar - interaction particles
|
using Content.Shared._ST.Interaction; // Stellar - interaction particles
|
||||||
using Content.Shared._Floof.OfferItem; // Floof
|
using Content.Shared._Floof.OfferItem; // Floof
|
||||||
using Content.Shared.ActionBlocker;
|
using Content.Shared.ActionBlocker;
|
||||||
|
|
@ -10,6 +12,7 @@ using Content.Shared.Database;
|
||||||
using Content.Shared.Hands;
|
using Content.Shared.Hands;
|
||||||
using Content.Shared.Hands.Components;
|
using Content.Shared.Hands.Components;
|
||||||
using Content.Shared.Hands.EntitySystems;
|
using Content.Shared.Hands.EntitySystems;
|
||||||
|
using Content.Shared.Humanoid; // DeltaV
|
||||||
using Content.Shared.IdentityManagement;
|
using Content.Shared.IdentityManagement;
|
||||||
using Content.Shared.Input;
|
using Content.Shared.Input;
|
||||||
using Content.Shared.Interaction;
|
using Content.Shared.Interaction;
|
||||||
|
|
@ -55,6 +58,7 @@ public sealed class PullingSystem : EntitySystem
|
||||||
[Dependency] private readonly HeldSpeedModifierSystem _clothingMoveSpeed = default!;
|
[Dependency] private readonly HeldSpeedModifierSystem _clothingMoveSpeed = default!;
|
||||||
[Dependency] private readonly SharedPopupSystem _popup = default!;
|
[Dependency] private readonly SharedPopupSystem _popup = default!;
|
||||||
[Dependency] private readonly SharedVirtualItemSystem _virtual = default!;
|
[Dependency] private readonly SharedVirtualItemSystem _virtual = default!;
|
||||||
|
[Dependency] private readonly SmallCharacterSystem _smallCharacter = default!; // DeltaV
|
||||||
|
|
||||||
public override void Initialize()
|
public override void Initialize()
|
||||||
{
|
{
|
||||||
|
|
@ -295,6 +299,14 @@ public sealed class PullingSystem : EntitySystem
|
||||||
|
|
||||||
private void OnRefreshMovespeed(EntityUid uid, PullerComponent component, RefreshMovementSpeedModifiersEvent args)
|
private void OnRefreshMovespeed(EntityUid uid, PullerComponent component, RefreshMovementSpeedModifiersEvent args)
|
||||||
{
|
{
|
||||||
|
// BEGIN DeltaV - Slow if smaller puller
|
||||||
|
if (TryComp<SmallCharacterComponent>(uid, out var smol))
|
||||||
|
{
|
||||||
|
var sizePenalty = _smallCharacter.ApplyPullSpeedPenalty((uid, smol), component.Pulling);
|
||||||
|
args.ModifySpeed(sizePenalty, sizePenalty);
|
||||||
|
}
|
||||||
|
// END DeltaV
|
||||||
|
|
||||||
if (TryComp<HeldSpeedModifierComponent>(component.Pulling, out var heldMoveSpeed) && component.Pulling.HasValue)
|
if (TryComp<HeldSpeedModifierComponent>(component.Pulling, out var heldMoveSpeed) && component.Pulling.HasValue)
|
||||||
{
|
{
|
||||||
var (walkMod, sprintMod) =
|
var (walkMod, sprintMod) =
|
||||||
|
|
|
||||||
|
|
@ -177,7 +177,7 @@ namespace Content.Shared.Preferences
|
||||||
_traitPreferences = traitPreferences;
|
_traitPreferences = traitPreferences;
|
||||||
_loadouts = loadouts;
|
_loadouts = loadouts;
|
||||||
// Begin CD - Character Records
|
// Begin CD - Character Records
|
||||||
Height = height;
|
Height = height; // This is the user-set scale on the profile editor. Not actual height measurements.
|
||||||
CDCharacterRecords = cdCharacterRecords;
|
CDCharacterRecords = cdCharacterRecords;
|
||||||
// End CD - Character Records
|
// End CD - Character Records
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -24,12 +24,4 @@ public sealed partial class ScaleVisualsComponent : Component
|
||||||
[DataField]
|
[DataField]
|
||||||
[ViewVariables]
|
[ViewVariables]
|
||||||
public Vector2? OriginalScale;
|
public Vector2? OriginalScale;
|
||||||
|
|
||||||
// Delta V Addition
|
|
||||||
/// <summary>
|
|
||||||
/// Base Scale of the Species, which we use to set a new height relative to this.
|
|
||||||
/// </summary>
|
|
||||||
[DataField, AutoNetworkedField]
|
|
||||||
[ViewVariables]
|
|
||||||
public Vector2 SpeciesScale = Vector2.One;
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -41,13 +41,8 @@ public abstract class SharedScaleVisualsSystem : EntitySystem
|
||||||
comp.Scale = scale;
|
comp.Scale = scale;
|
||||||
Dirty(uid, comp);
|
Dirty(uid, comp);
|
||||||
|
|
||||||
// Delta V - Begin Species Scaling
|
|
||||||
// 120% species scale => add 0.2 to scale
|
|
||||||
var newScale = scale + comp.SpeciesScale - Vector2.One;
|
|
||||||
// Delta V - End Species Scaling
|
|
||||||
|
|
||||||
var appearanceComponent = EnsureComp<AppearanceComponent>(uid);
|
var appearanceComponent = EnsureComp<AppearanceComponent>(uid);
|
||||||
_appearance.SetData(uid, ScaleVisuals.Scale, newScale /* Delta V - Custom Species Scale */, appearanceComponent);
|
_appearance.SetData(uid, ScaleVisuals.Scale, scale, appearanceComponent);
|
||||||
|
|
||||||
// Raise an event for content use.
|
// Raise an event for content use.
|
||||||
var ev = new ScaleEntityEvent(uid, scale);
|
var ev = new ScaleEntityEvent(uid, scale);
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,23 @@
|
||||||
|
using Content.Shared._DV.Body.Systems;
|
||||||
|
using Robust.Shared.GameStates;
|
||||||
|
|
||||||
|
namespace Content.Shared._DV.Body.Components;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// If an entity has this, if a small character has penalties (such as pull speed),
|
||||||
|
/// the small character will ignore the penalties associated with their size.
|
||||||
|
///
|
||||||
|
/// Mostly used for things like wheeled/floating objects.
|
||||||
|
/// </summary>
|
||||||
|
[RegisterComponent, NetworkedComponent]
|
||||||
|
[AutoGenerateComponentState]
|
||||||
|
[Access(typeof(SmallCharacterSystem))]
|
||||||
|
public sealed partial class SmallCharacterComponent : Component
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// The speed of which to scale the small character's pull speed by if the
|
||||||
|
/// object is big enough to warrant a pull-speed slowdown.
|
||||||
|
/// </summary>
|
||||||
|
[DataField, AutoNetworkedField]
|
||||||
|
public float PullSpeedPenalty = 1f;
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,12 @@
|
||||||
|
namespace Content.Shared._DV.Body.Components;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// If an entity has this, if a small character has penalties (such as pull speed),
|
||||||
|
/// the small character will ignore the penalties associated with their size.
|
||||||
|
///
|
||||||
|
/// Mostly used for things like wheeled/floating objects.
|
||||||
|
///
|
||||||
|
/// See <see cref="Systems.SmallCharacterSystem"/>
|
||||||
|
/// </summary>
|
||||||
|
[RegisterComponent]
|
||||||
|
public sealed partial class UnaffectedBySizePenaltyComponent : Component;
|
||||||
|
|
@ -0,0 +1,97 @@
|
||||||
|
using Content.Shared._DV.Body.Components;
|
||||||
|
using Content.Shared.GameTicking;
|
||||||
|
using Content.Shared.Humanoid;
|
||||||
|
using Content.Shared.Item;
|
||||||
|
using JetBrains.Annotations;
|
||||||
|
using Robust.Shared.Physics.Components;
|
||||||
|
|
||||||
|
namespace Content.Shared._DV.Body.Systems;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Used to relay or subscribe to events if a character's scale is 1.0 or below.
|
||||||
|
/// This is only used for the height slider scale.
|
||||||
|
/// </summary>
|
||||||
|
public sealed partial class SmallCharacterSystem : EntitySystem
|
||||||
|
{
|
||||||
|
private const float NO_PENALTY = 1.0f;
|
||||||
|
public override void Initialize()
|
||||||
|
{
|
||||||
|
base.Initialize();
|
||||||
|
SubscribeLocalEvent<PlayerSpawnCompleteEvent>(OnSpawn);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnSpawn(PlayerSpawnCompleteEvent ev)
|
||||||
|
{
|
||||||
|
if (TryComp<HumanoidProfileComponent>(ev.Mob, out var profile))
|
||||||
|
ApplySmallCharacter(ev.Mob, profile.Height);
|
||||||
|
}
|
||||||
|
|
||||||
|
[PublicAPI]
|
||||||
|
public float ApplyPullSpeedPenalty(Entity<SmallCharacterComponent?> puller, EntityUid? pulledEntity)
|
||||||
|
{
|
||||||
|
// Ignore if they aren't pulling anything...
|
||||||
|
if (!pulledEntity.HasValue)
|
||||||
|
return NO_PENALTY;
|
||||||
|
|
||||||
|
// Ignore if they aren't a small character in the first place
|
||||||
|
if (!Resolve(puller, ref puller.Comp, false))
|
||||||
|
return NO_PENALTY;
|
||||||
|
|
||||||
|
// If the pulled entity has the component that ignores the penalty
|
||||||
|
if (HasComp<UnaffectedBySizePenaltyComponent>(pulledEntity))
|
||||||
|
return NO_PENALTY;
|
||||||
|
|
||||||
|
// Ignore if it's an item that can be held or stored. It would be weird to
|
||||||
|
// slow by X% from pulling a piece of paper or a gun when you can just hold it
|
||||||
|
// and not suffer from a penalty.
|
||||||
|
if (HasComp<ItemComponent>(pulledEntity))
|
||||||
|
return NO_PENALTY;
|
||||||
|
|
||||||
|
// Ignore if the object is floating in the air.
|
||||||
|
if (TryComp<PhysicsComponent>(pulledEntity, out var pulledPhysics)
|
||||||
|
&& pulledPhysics.BodyStatus == BodyStatus.InAir)
|
||||||
|
return NO_PENALTY;
|
||||||
|
|
||||||
|
return puller.Comp.PullSpeedPenalty;
|
||||||
|
}
|
||||||
|
|
||||||
|
#region Static Members
|
||||||
|
/// <summary>
|
||||||
|
/// Gets the move-speed penalty as a float. Should be applied multiplicatively.
|
||||||
|
/// Caps at 1 so we don't make bigger characters faster when pulling.
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
[PublicAPI]
|
||||||
|
public static float GetPullSpeedPenaltyFromScale(float scale = 1.0f)
|
||||||
|
{
|
||||||
|
return Math.Min(scale * scale, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Calculates a well-formed display string of the pull speed penalty.
|
||||||
|
/// Used primarily in the character editor to get the well-formed percent
|
||||||
|
/// without having to duplicate formulas.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="scale"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
[PublicAPI]
|
||||||
|
public static string GetPullSpeedPenaltyDisplayFromScale(float scale = 1.0f)
|
||||||
|
{
|
||||||
|
return $"{Math.Round((1 - GetPullSpeedPenaltyFromScale(scale)) * 100)}%";
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Private Members
|
||||||
|
private void ApplySmallCharacter(EntityUid uid, float scale = 1)
|
||||||
|
{
|
||||||
|
if (scale >= 1)
|
||||||
|
return;
|
||||||
|
|
||||||
|
// The character scale is stored in the HumanoidProfileComponent if you ever
|
||||||
|
// need it.
|
||||||
|
var comp = EnsureComp<SmallCharacterComponent>(uid);
|
||||||
|
comp.PullSpeedPenalty = GetPullSpeedPenaltyFromScale(scale);
|
||||||
|
Dirty(uid, comp);
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
}
|
||||||
|
|
@ -1,2 +1,3 @@
|
||||||
humanoid-profile-editor-height-label = Height:
|
humanoid-profile-editor-height-label = Size - Height:
|
||||||
|
humanoid-profile-editor-height-pull-speed-penalty-label = Size - Pull Speed Reduction:
|
||||||
humanoid-profile-editor-reset-height-button = Reset
|
humanoid-profile-editor-reset-height-button = Reset
|
||||||
|
|
|
||||||
|
|
@ -34,8 +34,8 @@
|
||||||
Kidneys: OrganHumanKidneys
|
Kidneys: OrganHumanKidneys
|
||||||
- type: HumanoidProfile
|
- type: HumanoidProfile
|
||||||
species: Dwarf
|
species: Dwarf
|
||||||
- type: ScaleVisuals
|
#- type: ScaleVisuals # DeltaV - Scale defined at species level
|
||||||
scale: 1, 0.8
|
# scale: 1, 0.8
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
parent:
|
parent:
|
||||||
|
|
|
||||||
|
|
@ -63,6 +63,8 @@
|
||||||
- SpanishAccent
|
- SpanishAccent
|
||||||
- StutteringAccent
|
- StutteringAccent
|
||||||
# Begin DeltaV Additions
|
# Begin DeltaV Additions
|
||||||
|
- ScaleVisuals # Preserve species/profile height
|
||||||
|
- SmallCharacter
|
||||||
- Addicted
|
- Addicted
|
||||||
- DogVision
|
- DogVision
|
||||||
- FrenchAccent
|
- FrenchAccent
|
||||||
|
|
|
||||||
|
|
@ -69,3 +69,4 @@
|
||||||
components:
|
components:
|
||||||
- type: TileFrictionModifier
|
- type: TileFrictionModifier
|
||||||
modifier: 0.4
|
modifier: 0.4
|
||||||
|
- type: UnaffectedBySizePenalty # DeltaV - Wheels make it easy to move
|
||||||
|
|
|
||||||
|
|
@ -5,3 +5,4 @@
|
||||||
prototype: MobDwarf
|
prototype: MobDwarf
|
||||||
dollPrototype: AppearanceDwarf
|
dollPrototype: AppearanceDwarf
|
||||||
skinColoration: HumanToned
|
skinColoration: HumanToned
|
||||||
|
baseScale: 1, 0.8 # DeltaV - used instead of ScaleVisuals on body
|
||||||
|
|
@ -9,7 +9,4 @@
|
||||||
maleFirstNames: NamesFirstMale
|
maleFirstNames: NamesFirstMale
|
||||||
femaleFirstNames: NamesFirstFemale
|
femaleFirstNames: NamesFirstFemale
|
||||||
lastNames: NamesLast
|
lastNames: NamesLast
|
||||||
minHeight: 0.8
|
baseScale: 0.9, 0.9
|
||||||
maxHeight: 1.05
|
|
||||||
|
|
||||||
# Delta V - Nubody Merge, at lot moved into other files
|
|
||||||
|
|
@ -114,8 +114,6 @@
|
||||||
Kidneys: OrganHumanKidneys
|
Kidneys: OrganHumanKidneys
|
||||||
- type: HumanoidProfile
|
- type: HumanoidProfile
|
||||||
species: Motorkind
|
species: Motorkind
|
||||||
- type: ScaleVisuals
|
|
||||||
speciesScale: 2, 2
|
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
name: Urist McQueen
|
name: Urist McQueen
|
||||||
|
|
@ -60,8 +60,6 @@
|
||||||
Kidneys: OrganHumanKidneys
|
Kidneys: OrganHumanKidneys
|
||||||
- type: HumanoidProfile
|
- type: HumanoidProfile
|
||||||
species: Felinid
|
species: Felinid
|
||||||
- type: ScaleVisuals
|
|
||||||
speciesScale: 0.75, 0.75
|
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
parent:
|
parent:
|
||||||
|
|
|
||||||
|
|
@ -41,6 +41,7 @@
|
||||||
- type: entity
|
- type: entity
|
||||||
parent: BaseSpeciesAppearance
|
parent: BaseSpeciesAppearance
|
||||||
id: AppearanceHarpy
|
id: AppearanceHarpy
|
||||||
|
name: harpy appearance
|
||||||
components:
|
components:
|
||||||
- type: Inventory
|
- type: Inventory
|
||||||
speciesId: harpy
|
speciesId: harpy
|
||||||
|
|
@ -75,8 +76,6 @@
|
||||||
Kidneys: OrganHumanKidneys
|
Kidneys: OrganHumanKidneys
|
||||||
- type: HumanoidProfile
|
- type: HumanoidProfile
|
||||||
species: Harpy
|
species: Harpy
|
||||||
- type: ScaleVisuals
|
|
||||||
speciesScale: 0.9, 0.9
|
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
parent:
|
parent:
|
||||||
|
|
|
||||||
|
|
@ -64,8 +64,6 @@
|
||||||
Kidneys: OrganHumanKidneys
|
Kidneys: OrganHumanKidneys
|
||||||
- type: HumanoidProfile
|
- type: HumanoidProfile
|
||||||
species: Oni
|
species: Oni
|
||||||
- type: ScaleVisuals
|
|
||||||
speciesScale: 1.2, 1.2
|
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
parent:
|
parent:
|
||||||
|
|
|
||||||
|
|
@ -94,8 +94,6 @@
|
||||||
Kidneys: OrganAnimalKidneys
|
Kidneys: OrganAnimalKidneys
|
||||||
- type: HumanoidProfile
|
- type: HumanoidProfile
|
||||||
species: Ovinia
|
species: Ovinia
|
||||||
- type: ScaleVisuals
|
|
||||||
scale: 0.9, 0.9
|
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
parent:
|
parent:
|
||||||
|
|
@ -110,7 +108,7 @@
|
||||||
shape:
|
shape:
|
||||||
!type:PhysShapeCircle
|
!type:PhysShapeCircle
|
||||||
radius: 0.35
|
radius: 0.35
|
||||||
density: 215 # sheep be heavy
|
density: 200 # sheep be heavy
|
||||||
restitution: 0.0
|
restitution: 0.0
|
||||||
mask:
|
mask:
|
||||||
- MobMask
|
- MobMask
|
||||||
|
|
|
||||||
|
|
@ -70,8 +70,6 @@
|
||||||
Kidneys: OrganHumanKidneys
|
Kidneys: OrganHumanKidneys
|
||||||
- type: HumanoidProfile
|
- type: HumanoidProfile
|
||||||
species: Rodentia
|
species: Rodentia
|
||||||
- type: ScaleVisuals
|
|
||||||
speciesScale: 0.8, 0.8
|
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
parent:
|
parent:
|
||||||
|
|
|
||||||
|
|
@ -75,8 +75,6 @@
|
||||||
Kidneys: OrganShadekinKidneys
|
Kidneys: OrganShadekinKidneys
|
||||||
- type: HumanoidProfile
|
- type: HumanoidProfile
|
||||||
species: Shadekin
|
species: Shadekin
|
||||||
- type: ScaleVisuals
|
|
||||||
scale: 0.9, 0.9
|
|
||||||
|
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,4 @@
|
||||||
maleFirstNames: NamesMotorkindFirst
|
maleFirstNames: NamesMotorkindFirst
|
||||||
femaleFirstNames: NamesMotorkindFirst
|
femaleFirstNames: NamesMotorkindFirst
|
||||||
lastNames: NamesMotorkindLast
|
lastNames: NamesMotorkindLast
|
||||||
baseScale: "2.0, 2.0"
|
baseScale: 2.0, 2.0
|
||||||
minHeight: 0.8
|
|
||||||
maxHeight: 1.2
|
|
||||||
defaultHeight: 1.0
|
|
||||||
|
|
@ -9,5 +9,4 @@
|
||||||
femaleFirstNames: NamesOniFemale
|
femaleFirstNames: NamesOniFemale
|
||||||
lastNames: NamesOniLocation
|
lastNames: NamesOniLocation
|
||||||
naming: LastNoFirst
|
naming: LastNoFirst
|
||||||
baseScale: "1.2, 1.2"
|
baseScale: 1.1, 1.1
|
||||||
maxHeight: 1.05
|
|
||||||
|
|
|
||||||
|
|
@ -5,5 +5,4 @@
|
||||||
prototype: MobFelinid
|
prototype: MobFelinid
|
||||||
dollPrototype: AppearanceFelinid
|
dollPrototype: AppearanceFelinid
|
||||||
skinColoration: Hues
|
skinColoration: Hues
|
||||||
baseScale: "0.8, 0.8"
|
baseScale: 0.8, 0.8
|
||||||
minHeight: 0.95
|
|
||||||
|
|
|
||||||
|
|
@ -5,8 +5,4 @@
|
||||||
prototype: MobHarpy
|
prototype: MobHarpy
|
||||||
dollPrototype: AppearanceHarpy
|
dollPrototype: AppearanceHarpy
|
||||||
skinColoration: HumanToned
|
skinColoration: HumanToned
|
||||||
baseScale: "0.9, 0.9"
|
baseScale: 0.95, 0.95
|
||||||
# Delta V Start - Due to the actual real world variance in avian size, I changed the range to be slightly wider, allowing for much larger, and smaller, Harpies, without going into territory deemed unfair.
|
|
||||||
minHeight: 0.75
|
|
||||||
maxHeight: 1.25
|
|
||||||
# Delta V End
|
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,4 @@
|
||||||
prototype: MobKitsune
|
prototype: MobKitsune
|
||||||
dollPrototype: AppearanceKitsune
|
dollPrototype: AppearanceKitsune
|
||||||
skinColoration: HumanToned
|
skinColoration: HumanToned
|
||||||
baseScale: 1, 1
|
baseScale: 0.9, 0.9
|
||||||
minHeight: .85
|
|
||||||
maxHeight: 1.05
|
|
||||||
|
|
|
||||||
|
|
@ -11,4 +11,3 @@
|
||||||
lastNames: NamesRodentiaLast
|
lastNames: NamesRodentiaLast
|
||||||
naming: LastFirst
|
naming: LastFirst
|
||||||
baseScale: 0.8, 0.8
|
baseScale: 0.8, 0.8
|
||||||
minHeight: .85
|
|
||||||
|
|
|
||||||
|
|
@ -102,8 +102,6 @@
|
||||||
Kidneys: OrganHumanKidneys
|
Kidneys: OrganHumanKidneys
|
||||||
- type: HumanoidProfile
|
- type: HumanoidProfile
|
||||||
species: Thaven
|
species: Thaven
|
||||||
- type: ScaleVisuals
|
|
||||||
speciesScale: 1.0, 1.05
|
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
parent:
|
parent:
|
||||||
|
|
@ -148,7 +146,7 @@
|
||||||
shape:
|
shape:
|
||||||
!type:PhysShapeCircle
|
!type:PhysShapeCircle
|
||||||
radius: 0.35
|
radius: 0.35
|
||||||
density: 120
|
density: 180
|
||||||
restitution: 0.0
|
restitution: 0.0
|
||||||
mask:
|
mask:
|
||||||
- MobMask
|
- MobMask
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
- type: entity
|
- type: entity
|
||||||
save: false
|
save: false
|
||||||
name: Uristia Mc-hands
|
name: Urist McShorty
|
||||||
parent: BaseMobAllulalo
|
parent: BaseMobAllulalo
|
||||||
id: MobAllulalo
|
id: MobAllulalo
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
- type: entity
|
- type: entity
|
||||||
save: false
|
save: false
|
||||||
name: Uristia Mc-Hands
|
name: Uristia McShorty
|
||||||
parent:
|
parent:
|
||||||
- AppearanceAllulalo
|
- AppearanceAllulalo
|
||||||
- BaseSpeciesMobOrganic
|
- BaseSpeciesMobOrganic
|
||||||
|
|
@ -119,103 +119,6 @@
|
||||||
- type: Carriable # Delta V - grips the bird
|
- type: Carriable # Delta V - grips the bird
|
||||||
freeHandsRequired: 1
|
freeHandsRequired: 1
|
||||||
|
|
||||||
# Begin Delta V Removals - Nubody
|
|
||||||
# - type: HumanoidAppearance
|
|
||||||
# species: Allulalo
|
|
||||||
# hideLayersOnEquip:
|
|
||||||
# - Hair
|
|
||||||
# - Snout
|
|
||||||
# - HeadTop
|
|
||||||
# - HeadSide
|
|
||||||
# - LLeg
|
|
||||||
# - RLeg
|
|
||||||
# - LFoot
|
|
||||||
# - RFoot
|
|
||||||
|
|
||||||
#- type: entity
|
|
||||||
# parent: BaseSpeciesDummy
|
|
||||||
# id: MobAllulaloDummy
|
|
||||||
# categories: [ HideSpawnMenu ]
|
|
||||||
# components:
|
|
||||||
# - type: Sprite
|
|
||||||
# scale: 1, 1
|
|
||||||
# - type: Inventory
|
|
||||||
# speciesId: allulalo
|
|
||||||
# templateId: allulalo
|
|
||||||
# displacements:
|
|
||||||
# jumpsuit:
|
|
||||||
# sizeMaps:
|
|
||||||
# 32:
|
|
||||||
# sprite: _Impstation/Mobs/Species/Allulalo/displacement.rsi
|
|
||||||
# state: jumpsuit
|
|
||||||
# head:
|
|
||||||
# sizeMaps:
|
|
||||||
# 32:
|
|
||||||
# sprite: _Impstation/Mobs/Species/Allulalo/displacement.rsi
|
|
||||||
# state: head
|
|
||||||
# eyes:
|
|
||||||
# sizeMaps:
|
|
||||||
# 32:
|
|
||||||
# sprite: _Impstation/Mobs/Species/Allulalo/displacement.rsi
|
|
||||||
# state: glasses
|
|
||||||
# ears:
|
|
||||||
# sizeMaps:
|
|
||||||
# 32:
|
|
||||||
# sprite: _Impstation/Mobs/Species/Allulalo/displacement.rsi
|
|
||||||
# state: ears
|
|
||||||
# mask:
|
|
||||||
# sizeMaps:
|
|
||||||
# 32:
|
|
||||||
# sprite: _Impstation/Mobs/Species/Allulalo/displacement.rsi
|
|
||||||
# state: mask
|
|
||||||
# neck:
|
|
||||||
# sizeMaps:
|
|
||||||
# 32:
|
|
||||||
# sprite: _Impstation/Mobs/Species/Allulalo/displacement.rsi
|
|
||||||
# state: neck
|
|
||||||
# outerClothing:
|
|
||||||
# sizeMaps:
|
|
||||||
# 32:
|
|
||||||
# sprite: _Impstation/Mobs/Species/Allulalo/displacement.rsi
|
|
||||||
# state: outerClothing
|
|
||||||
# gloves:
|
|
||||||
# sizeMaps:
|
|
||||||
# 32:
|
|
||||||
# sprite: _Impstation/Mobs/Species/Allulalo/displacement.rsi
|
|
||||||
# state: hands
|
|
||||||
# shoes:
|
|
||||||
# sizeMaps:
|
|
||||||
# 32:
|
|
||||||
# sprite: _Impstation/Mobs/Species/Allulalo/displacement.rsi
|
|
||||||
# state: feet
|
|
||||||
# belt:
|
|
||||||
# sizeMaps:
|
|
||||||
# 32:
|
|
||||||
# sprite: _Impstation/Mobs/Species/Allulalo/displacement.rsi
|
|
||||||
# state: belt
|
|
||||||
# back:
|
|
||||||
# sizeMaps:
|
|
||||||
# 32:
|
|
||||||
# sprite: _Impstation/Mobs/Species/Allulalo/displacement.rsi
|
|
||||||
# state: back
|
|
||||||
# suitstorage:
|
|
||||||
# sizeMaps:
|
|
||||||
# 32:
|
|
||||||
# sprite: _Impstation/Mobs/Species/Allulalo/displacement.rsi
|
|
||||||
# state: suitstorage
|
|
||||||
# - type: Hands
|
|
||||||
# leftHandDisplacement:
|
|
||||||
# sizeMaps:
|
|
||||||
# 32:
|
|
||||||
# sprite: Mobs/Species/Vox/displacement.rsi
|
|
||||||
# state: hand_l
|
|
||||||
# rightHandDisplacement:
|
|
||||||
# sizeMaps:
|
|
||||||
# 32:
|
|
||||||
# sprite: Mobs/Species/Vox/displacement.rsi
|
|
||||||
# state: hand_r
|
|
||||||
# End Delta V Removals
|
|
||||||
|
|
||||||
# Begin Delta V addition - Nubody
|
# Begin Delta V addition - Nubody
|
||||||
- type: entity
|
- type: entity
|
||||||
parent: BaseSpeciesAppearance
|
parent: BaseSpeciesAppearance
|
||||||
|
|
@ -319,6 +222,13 @@
|
||||||
Kidneys: OrganHumanKidneys
|
Kidneys: OrganHumanKidneys
|
||||||
- type: HumanoidProfile
|
- type: HumanoidProfile
|
||||||
species: Allulalo
|
species: Allulalo
|
||||||
|
# BEGIN DeltaV
|
||||||
|
# Allulalo are weird because they are small yet base scale 1.0 BUT since the height system uses
|
||||||
|
# base scale to determine the metric/imperial height values, so we're just correcting the scale
|
||||||
|
# because Allulalo have to be the special kid on the block.
|
||||||
|
- type: ScaleVisuals
|
||||||
|
scale: 2.0, 2.0
|
||||||
|
# END DeltaV
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
parent: OrganBase
|
parent: OrganBase
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,6 @@
|
||||||
roundStart: true
|
roundStart: true
|
||||||
prototype: MobAllulalo
|
prototype: MobAllulalo
|
||||||
defaultSkinTone: "#385878"
|
defaultSkinTone: "#385878"
|
||||||
#markingLimits: MobAllulaloMarkingLimits # Delta V - Nubody
|
|
||||||
dollPrototype: AppearanceAllulalo # Delta V - Nubody
|
dollPrototype: AppearanceAllulalo # Delta V - Nubody
|
||||||
skinColoration: Hues
|
skinColoration: Hues
|
||||||
maleFirstNames: AllulaloFirstNames
|
maleFirstNames: AllulaloFirstNames
|
||||||
|
|
@ -14,150 +13,4 @@
|
||||||
- Male
|
- Male
|
||||||
- Female
|
- Female
|
||||||
- Unsexed
|
- Unsexed
|
||||||
|
baseScale: 0.5, 0.5 # they smol
|
||||||
# Begin Delta V Removals - Changes for Nubody
|
|
||||||
#- type: speciesBaseSprites
|
|
||||||
# id: MobAllulaloSprites
|
|
||||||
# sprites:
|
|
||||||
# TailBehind: MobHumanoidAnyMarking # floof
|
|
||||||
# TailOversuit: MobHumanoidAnyMarking # floof
|
|
||||||
# Eyes: MobAllulaloEyes
|
|
||||||
# Head: MobAllulaloHead
|
|
||||||
# HeadTop: MobHumanoidAnyMarking
|
|
||||||
# Hair: MobHumanoidAnyMarking
|
|
||||||
# Chest: MobAllulaloTorso
|
|
||||||
# LArm: MobAllulaloLArm
|
|
||||||
# RArm: MobAllulaloRArm
|
|
||||||
# LHand: MobAllulaloLHand
|
|
||||||
# LLeg: MobAllulaloLLeg
|
|
||||||
# RLeg: MobAllulaloRLeg
|
|
||||||
# LFoot: MobAllulaloLFoot
|
|
||||||
# RFoot: MobAllulaloRFoot
|
|
||||||
# Tail: MobHumanoidAnyMarking
|
|
||||||
# Snout: MobHumanoidAnyMarking
|
|
||||||
#
|
|
||||||
#- type: markingPoints
|
|
||||||
# id: MobAllulaloMarkingLimits
|
|
||||||
# onlyWhitelisted: true
|
|
||||||
# points:
|
|
||||||
# Hair:
|
|
||||||
# points: 1
|
|
||||||
# required: false
|
|
||||||
# Eyes:
|
|
||||||
# points: 1
|
|
||||||
# required: true
|
|
||||||
# defaultMarkings: [ AllulaloEyesDefault ]
|
|
||||||
# Head:
|
|
||||||
# points: 3
|
|
||||||
# required: false
|
|
||||||
# HeadTop:
|
|
||||||
# points: 1
|
|
||||||
# required: false
|
|
||||||
# UndergarmentTop:
|
|
||||||
# points: 1
|
|
||||||
# required: false
|
|
||||||
# Chest:
|
|
||||||
# points: 2
|
|
||||||
# required: false
|
|
||||||
# Tail:
|
|
||||||
# points: 1
|
|
||||||
# required: true
|
|
||||||
# defaultMarkings: [ AllulaloTailDefault ]
|
|
||||||
# Snout:
|
|
||||||
# points: 1
|
|
||||||
# required: false
|
|
||||||
# Overlay:
|
|
||||||
# points: 1
|
|
||||||
# required: false
|
|
||||||
# Arms:
|
|
||||||
# points: 1
|
|
||||||
# required: true
|
|
||||||
# defaultMarkings: [ AllulaloWingsDefault ]
|
|
||||||
# Legs:
|
|
||||||
# points: 2
|
|
||||||
# required: false
|
|
||||||
#
|
|
||||||
#- type: humanoidBaseSprite
|
|
||||||
# id: MobAllulaloEyes
|
|
||||||
# baseSprite:
|
|
||||||
# sprite: _Impstation/Mobs/Species/Allulalo/parts.rsi
|
|
||||||
# state: eyes
|
|
||||||
#
|
|
||||||
#- type: humanoidBaseSprite
|
|
||||||
# id: MobAllulaloHead
|
|
||||||
# baseSprite:
|
|
||||||
# sprite: _Impstation/Mobs/Species/Allulalo/parts.rsi
|
|
||||||
# state: head
|
|
||||||
#
|
|
||||||
#- type: humanoidBaseSprite
|
|
||||||
# id: MobAllulaloHeadMale
|
|
||||||
# baseSprite:
|
|
||||||
# sprite: _Impstation/Mobs/Species/Allulalo/parts.rsi
|
|
||||||
# state: head
|
|
||||||
#
|
|
||||||
#- type: humanoidBaseSprite
|
|
||||||
# id: MobAllulaloHeadFemale
|
|
||||||
# baseSprite:
|
|
||||||
# sprite: _Impstation/Mobs/Species/Allulalo/parts.rsi
|
|
||||||
# state: head
|
|
||||||
#
|
|
||||||
#- type: humanoidBaseSprite
|
|
||||||
# id: MobAllulaloTorso
|
|
||||||
# baseSprite:
|
|
||||||
# sprite: _Impstation/Mobs/Species/Allulalo/parts.rsi
|
|
||||||
# state: torso
|
|
||||||
#
|
|
||||||
#- type: humanoidBaseSprite
|
|
||||||
# id: MobAllulaloTorsoMale
|
|
||||||
# baseSprite:
|
|
||||||
# sprite: _Impstation/Mobs/Species/Allulalo/parts.rsi
|
|
||||||
# state: torso
|
|
||||||
#
|
|
||||||
#- type: humanoidBaseSprite
|
|
||||||
# id: MobAllulaloTorsoFemale
|
|
||||||
# baseSprite:
|
|
||||||
# sprite: _Impstation/Mobs/Species/Allulalo/parts.rsi
|
|
||||||
# state: torso
|
|
||||||
#
|
|
||||||
#- type: humanoidBaseSprite
|
|
||||||
# id: MobAllulaloLLeg
|
|
||||||
# baseSprite:
|
|
||||||
# sprite: _Impstation/Mobs/Species/Allulalo/parts.rsi
|
|
||||||
# state: l_leg
|
|
||||||
#
|
|
||||||
#- type: humanoidBaseSprite
|
|
||||||
# id: MobAllulaloLHand
|
|
||||||
# baseSprite:
|
|
||||||
# sprite: _Impstation/Mobs/Species/Allulalo/parts.rsi
|
|
||||||
# state: hands
|
|
||||||
#
|
|
||||||
#- type: humanoidBaseSprite
|
|
||||||
# id: MobAllulaloLArm
|
|
||||||
# baseSprite:
|
|
||||||
# sprite: _Impstation/Mobs/Species/Allulalo/parts.rsi
|
|
||||||
# state: l_arm
|
|
||||||
#
|
|
||||||
#- type: humanoidBaseSprite
|
|
||||||
# id: MobAllulaloLFoot
|
|
||||||
# baseSprite:
|
|
||||||
# sprite: _Impstation/Mobs/Species/Allulalo/parts.rsi
|
|
||||||
# state: l_foot
|
|
||||||
#
|
|
||||||
#- type: humanoidBaseSprite
|
|
||||||
# id: MobAllulaloRLeg
|
|
||||||
# baseSprite:
|
|
||||||
# sprite: _Impstation/Mobs/Species/Allulalo/parts.rsi
|
|
||||||
# state: r_leg
|
|
||||||
#
|
|
||||||
#- type: humanoidBaseSprite
|
|
||||||
# id: MobAllulaloRArm
|
|
||||||
# baseSprite:
|
|
||||||
# sprite: _Impstation/Mobs/Species/Allulalo/parts.rsi
|
|
||||||
# state: r_arm
|
|
||||||
#
|
|
||||||
#- type: humanoidBaseSprite
|
|
||||||
# id: MobAllulaloRFoot
|
|
||||||
# baseSprite:
|
|
||||||
# sprite: _Impstation/Mobs/Species/Allulalo/parts.rsi
|
|
||||||
# state: r_foot
|
|
||||||
# End Delta V Removals
|
|
||||||
|
|
@ -14,5 +14,4 @@
|
||||||
- Female
|
- Female
|
||||||
- Unsexed
|
- Unsexed
|
||||||
baseScale: "1, 1.05" # DeltaV - make sure Thaven are still scaled w/ CD records
|
baseScale: "1, 1.05" # DeltaV - make sure Thaven are still scaled w/ CD records
|
||||||
maxHeight: 1.05 # DeltaV
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -10,4 +10,3 @@
|
||||||
maleFirstNames: names_avali_unisex
|
maleFirstNames: names_avali_unisex
|
||||||
femaleFirstNames: names_avali_unisex
|
femaleFirstNames: names_avali_unisex
|
||||||
naming: First
|
naming: First
|
||||||
minHeight: 0.8 # DeltaV - ability to be slightly shorter than humans
|
|
||||||
|
|
|
||||||
Binary file not shown.
Loading…
Reference in New Issue