@@ -697,6 +697,20 @@ namespace Content.Client.Preferences.UI
|
|||||||
|
|
||||||
var color = SkinColor.TintedHues(_rgbSkinColorSelector.Color);
|
var color = SkinColor.TintedHues(_rgbSkinColorSelector.Color);
|
||||||
|
|
||||||
|
CMarkings.CurrentSkinColor = color;
|
||||||
|
Profile = Profile.WithCharacterAppearance(Profile.Appearance.WithSkinColor(color));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case HumanoidSkinColor.VoxFeathers:
|
||||||
|
{
|
||||||
|
if (!_rgbSkinColorContainer.Visible)
|
||||||
|
{
|
||||||
|
_skinColor.Visible = false;
|
||||||
|
_rgbSkinColorContainer.Visible = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
var color = SkinColor.ClosestVoxColor(_rgbSkinColorSelector.Color);
|
||||||
|
|
||||||
CMarkings.CurrentSkinColor = color;
|
CMarkings.CurrentSkinColor = color;
|
||||||
Profile = Profile.WithCharacterAppearance(Profile.Appearance.WithSkinColor(color));
|
Profile = Profile.WithCharacterAppearance(Profile.Appearance.WithSkinColor(color));
|
||||||
break;
|
break;
|
||||||
@@ -908,6 +922,18 @@ namespace Content.Client.Preferences.UI
|
|||||||
_rgbSkinColorSelector.Color = Profile.Appearance.SkinColor;
|
_rgbSkinColorSelector.Color = Profile.Appearance.SkinColor;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case HumanoidSkinColor.VoxFeathers:
|
||||||
|
{
|
||||||
|
if (!_rgbSkinColorContainer.Visible)
|
||||||
|
{
|
||||||
|
_skinColor.Visible = false;
|
||||||
|
_rgbSkinColorContainer.Visible = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
_rgbSkinColorSelector.Color = SkinColor.ClosestVoxColor(Profile.Appearance.SkinColor);
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -104,7 +104,8 @@ public sealed partial class HumanoidCharacterAppearance : ICharacterAppearance
|
|||||||
HumanoidSkinColor.HumanToned => Humanoid.SkinColor.HumanSkinTone(speciesPrototype.DefaultHumanSkinTone),
|
HumanoidSkinColor.HumanToned => Humanoid.SkinColor.HumanSkinTone(speciesPrototype.DefaultHumanSkinTone),
|
||||||
HumanoidSkinColor.Hues => speciesPrototype.DefaultSkinTone,
|
HumanoidSkinColor.Hues => speciesPrototype.DefaultSkinTone,
|
||||||
HumanoidSkinColor.TintedHues => Humanoid.SkinColor.TintedHues(speciesPrototype.DefaultSkinTone),
|
HumanoidSkinColor.TintedHues => Humanoid.SkinColor.TintedHues(speciesPrototype.DefaultSkinTone),
|
||||||
_ => Humanoid.SkinColor.ValidHumanSkinTone
|
HumanoidSkinColor.VoxFeathers => Humanoid.SkinColor.ClosestVoxColor(speciesPrototype.DefaultSkinTone),
|
||||||
|
_ => Humanoid.SkinColor.ValidHumanSkinTone,
|
||||||
};
|
};
|
||||||
|
|
||||||
return new(
|
return new(
|
||||||
@@ -166,6 +167,9 @@ public sealed partial class HumanoidCharacterAppearance : ICharacterAppearance
|
|||||||
case HumanoidSkinColor.TintedHues:
|
case HumanoidSkinColor.TintedHues:
|
||||||
newSkinColor = Humanoid.SkinColor.ValidTintedHuesSkinTone(newSkinColor);
|
newSkinColor = Humanoid.SkinColor.ValidTintedHuesSkinTone(newSkinColor);
|
||||||
break;
|
break;
|
||||||
|
case HumanoidSkinColor.VoxFeathers:
|
||||||
|
newSkinColor = Humanoid.SkinColor.ProportionalVoxColor(newSkinColor);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return new HumanoidCharacterAppearance(newHairStyle, newHairColor, newFacialHairStyle, newHairColor, newEyeColor, newSkinColor, new ());
|
return new HumanoidCharacterAppearance(newHairStyle, newHairColor, newFacialHairStyle, newHairColor, newEyeColor, newSkinColor, new ());
|
||||||
|
|||||||
@@ -1,3 +1,6 @@
|
|||||||
|
using System.Security.Cryptography;
|
||||||
|
using Microsoft.VisualBasic.CompilerServices;
|
||||||
|
|
||||||
namespace Content.Shared.Humanoid;
|
namespace Content.Shared.Humanoid;
|
||||||
|
|
||||||
public static class SkinColor
|
public static class SkinColor
|
||||||
@@ -7,6 +10,13 @@ public static class SkinColor
|
|||||||
|
|
||||||
public const float MinHuesLightness = 0.175f;
|
public const float MinHuesLightness = 0.175f;
|
||||||
|
|
||||||
|
public const float MinFeathersHue = 29f / 360;
|
||||||
|
public const float MaxFeathersHue = 174f / 360;
|
||||||
|
public const float MinFeathersSaturation = 20f / 100;
|
||||||
|
public const float MaxFeathersSaturation = 88f / 100;
|
||||||
|
public const float MinFeathersValue = 36f / 100;
|
||||||
|
public const float MaxFeathersValue = 55f / 100;
|
||||||
|
|
||||||
public static Color ValidHumanSkinTone => Color.FromHsv(new Vector4(0.07f, 0.2f, 1f, 1f));
|
public static Color ValidHumanSkinTone => Color.FromHsv(new Vector4(0.07f, 0.2f, 1f, 1f));
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -140,11 +150,65 @@ public static class SkinColor
|
|||||||
return Color.ToHsl(color).Y <= MaxTintedHuesSaturation && Color.ToHsl(color).Z >= MinTintedHuesLightness;
|
return Color.ToHsl(color).Y <= MaxTintedHuesSaturation && Color.ToHsl(color).Z >= MinTintedHuesLightness;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Converts a Color proportionally to the allowed vox color range.
|
||||||
|
/// Will NOT preserve the specific input color even if it is within the allowed vox color range.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="color">Color to convert</param>
|
||||||
|
/// <returns>Vox feather coloration</returns>
|
||||||
|
public static Color ProportionalVoxColor(Color color)
|
||||||
|
{
|
||||||
|
var newColor = Color.ToHsv(color);
|
||||||
|
|
||||||
|
newColor.X = newColor.X * (MaxFeathersHue - MinFeathersHue) + MinFeathersHue;
|
||||||
|
newColor.Y = newColor.Y * (MaxFeathersSaturation - MinFeathersSaturation) + MinFeathersSaturation;
|
||||||
|
newColor.Z = newColor.Z * (MaxFeathersValue - MinFeathersValue) + MinFeathersValue;
|
||||||
|
|
||||||
|
return Color.FromHsv(newColor);
|
||||||
|
}
|
||||||
|
|
||||||
|
// /// <summary>
|
||||||
|
// /// Ensures the input Color is within the allowed vox color range.
|
||||||
|
// /// </summary>
|
||||||
|
// /// <param name="color">Color to convert</param>
|
||||||
|
// /// <returns>The same Color if it was within the allowed range, or the closest matching Color otherwise</returns>
|
||||||
|
public static Color ClosestVoxColor(Color color)
|
||||||
|
{
|
||||||
|
var hsv = Color.ToHsv(color);
|
||||||
|
|
||||||
|
hsv.X = Math.Clamp(hsv.X, MinFeathersHue, MaxFeathersHue);
|
||||||
|
hsv.Y = Math.Clamp(hsv.Y, MinFeathersSaturation, MaxFeathersSaturation);
|
||||||
|
hsv.Z = Math.Clamp(hsv.Z, MinFeathersValue, MaxFeathersValue);
|
||||||
|
|
||||||
|
return Color.FromHsv(hsv);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Verify if this color is a valid vox feather coloration, or not.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="color">The color to verify</param>
|
||||||
|
/// <returns>True if valid, false otherwise</returns>
|
||||||
|
public static bool VerifyVoxFeathers(Color color)
|
||||||
|
{
|
||||||
|
var colorHsv = Color.ToHsv(color);
|
||||||
|
|
||||||
|
if (colorHsv.X < MinFeathersHue || colorHsv.X > MaxFeathersHue)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (colorHsv.Y < MinFeathersSaturation || colorHsv.Y > MaxFeathersSaturation)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (colorHsv.Z < MinFeathersValue || colorHsv.Z > MaxFeathersValue)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// This takes in a color, and returns a color guaranteed to be above MinHuesLightness
|
/// This takes in a color, and returns a color guaranteed to be above MinHuesLightness
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="color"></param>
|
/// <param name="color"></param>
|
||||||
/// <returns>Either the color as-is if it's above MinHuesLightness, or the color with luminosity increased above MinHuesLightness</returns>
|
/// <returns>Either the color as-is if it's above MinHuesLightness, or the color with luminosity increased above MinHuesLightness</returns>
|
||||||
public static Color MakeHueValid(Color color)
|
public static Color MakeHueValid(Color color)
|
||||||
{
|
{
|
||||||
var manipulatedColor = Color.ToHsv(color);
|
var manipulatedColor = Color.ToHsv(color);
|
||||||
@@ -169,6 +233,7 @@ public static class SkinColor
|
|||||||
HumanoidSkinColor.HumanToned => VerifyHumanSkinTone(color),
|
HumanoidSkinColor.HumanToned => VerifyHumanSkinTone(color),
|
||||||
HumanoidSkinColor.TintedHues => VerifyTintedHues(color),
|
HumanoidSkinColor.TintedHues => VerifyTintedHues(color),
|
||||||
HumanoidSkinColor.Hues => VerifyHues(color),
|
HumanoidSkinColor.Hues => VerifyHues(color),
|
||||||
|
HumanoidSkinColor.VoxFeathers => VerifyVoxFeathers(color),
|
||||||
_ => false,
|
_ => false,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@@ -180,6 +245,7 @@ public static class SkinColor
|
|||||||
HumanoidSkinColor.HumanToned => ValidHumanSkinTone,
|
HumanoidSkinColor.HumanToned => ValidHumanSkinTone,
|
||||||
HumanoidSkinColor.TintedHues => ValidTintedHuesSkinTone(color),
|
HumanoidSkinColor.TintedHues => ValidTintedHuesSkinTone(color),
|
||||||
HumanoidSkinColor.Hues => MakeHueValid(color),
|
HumanoidSkinColor.Hues => MakeHueValid(color),
|
||||||
|
HumanoidSkinColor.VoxFeathers => ClosestVoxColor(color),
|
||||||
_ => color
|
_ => color
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@@ -189,5 +255,6 @@ public enum HumanoidSkinColor : byte
|
|||||||
{
|
{
|
||||||
HumanToned,
|
HumanToned,
|
||||||
Hues,
|
Hues,
|
||||||
|
VoxFeathers, // Vox feathers are limited to a specific color range
|
||||||
TintedHues, //This gives a color tint to a humanoid's skin (10% saturation with full hue range).
|
TintedHues, //This gives a color tint to a humanoid's skin (10% saturation with full hue range).
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,10 +33,10 @@
|
|||||||
components:
|
components:
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
sprite: Mobs/Species/Vox/parts.rsi
|
sprite: Mobs/Species/Vox/parts.rsi
|
||||||
state: "torso_m"
|
state: "torso"
|
||||||
- type: Icon
|
- type: Icon
|
||||||
sprite: Mobs/Species/Vox/parts.rsi
|
sprite: Mobs/Species/Vox/parts.rsi
|
||||||
state: "torso_m"
|
state: "torso"
|
||||||
- type: BodyPart
|
- type: BodyPart
|
||||||
partType: Torso
|
partType: Torso
|
||||||
- type: Extractable
|
- type: Extractable
|
||||||
@@ -54,10 +54,10 @@
|
|||||||
components:
|
components:
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
sprite: Mobs/Species/Vox/parts.rsi
|
sprite: Mobs/Species/Vox/parts.rsi
|
||||||
state: "head_m"
|
state: "head"
|
||||||
- type: Icon
|
- type: Icon
|
||||||
sprite: Mobs/Species/Vox/parts.rsi
|
sprite: Mobs/Species/Vox/parts.rsi
|
||||||
state: "head_m"
|
state: "head"
|
||||||
- type: BodyPart
|
- type: BodyPart
|
||||||
partType: Head
|
partType: Head
|
||||||
vital: true
|
vital: true
|
||||||
|
|||||||
@@ -0,0 +1,145 @@
|
|||||||
|
- type: marking
|
||||||
|
id: VoxBeak
|
||||||
|
bodyPart: Snout
|
||||||
|
markingCategory: Snout
|
||||||
|
forcedColoring: true
|
||||||
|
speciesRestriction: [Vox]
|
||||||
|
sprites:
|
||||||
|
- sprite: Mobs/Customization/vox_parts.rsi
|
||||||
|
state: beak
|
||||||
|
coloring:
|
||||||
|
default:
|
||||||
|
type:
|
||||||
|
!type:SimpleColoring
|
||||||
|
color: "#937e3d"
|
||||||
|
|
||||||
|
- type: marking
|
||||||
|
id: VoxLArmScales
|
||||||
|
bodyPart: LArm
|
||||||
|
markingCategory: Arms
|
||||||
|
forcedColoring: true
|
||||||
|
speciesRestriction: [Vox]
|
||||||
|
sprites:
|
||||||
|
- sprite: Mobs/Customization/vox_parts.rsi
|
||||||
|
state: l_arm
|
||||||
|
coloring:
|
||||||
|
default:
|
||||||
|
type:
|
||||||
|
!type:SimpleColoring
|
||||||
|
color: "#937e3d"
|
||||||
|
|
||||||
|
- type: marking
|
||||||
|
id: VoxLLegScales
|
||||||
|
bodyPart: LLeg
|
||||||
|
markingCategory: Legs
|
||||||
|
forcedColoring: true
|
||||||
|
speciesRestriction: [Vox]
|
||||||
|
sprites:
|
||||||
|
- sprite: Mobs/Customization/vox_parts.rsi
|
||||||
|
state: l_leg
|
||||||
|
coloring:
|
||||||
|
default:
|
||||||
|
type:
|
||||||
|
!type:SimpleColoring
|
||||||
|
color: "#937e3d"
|
||||||
|
|
||||||
|
- type: marking
|
||||||
|
id: VoxRArmScales
|
||||||
|
bodyPart: RArm
|
||||||
|
markingCategory: Arms
|
||||||
|
forcedColoring: true
|
||||||
|
speciesRestriction: [Vox]
|
||||||
|
sprites:
|
||||||
|
- sprite: Mobs/Customization/vox_parts.rsi
|
||||||
|
state: r_arm
|
||||||
|
coloring:
|
||||||
|
default:
|
||||||
|
type:
|
||||||
|
!type:SimpleColoring
|
||||||
|
color: "#937e3d"
|
||||||
|
|
||||||
|
- type: marking
|
||||||
|
id: VoxRLegScales
|
||||||
|
bodyPart: RLeg
|
||||||
|
markingCategory: Legs
|
||||||
|
forcedColoring: true
|
||||||
|
speciesRestriction: [Vox]
|
||||||
|
sprites:
|
||||||
|
- sprite: Mobs/Customization/vox_parts.rsi
|
||||||
|
state: r_leg
|
||||||
|
coloring:
|
||||||
|
default:
|
||||||
|
type:
|
||||||
|
!type:SimpleColoring
|
||||||
|
color: "#937e3d"
|
||||||
|
|
||||||
|
- type: marking
|
||||||
|
id: VoxRHandScales
|
||||||
|
bodyPart: RHand
|
||||||
|
markingCategory: Arms
|
||||||
|
forcedColoring: true
|
||||||
|
speciesRestriction: [Vox]
|
||||||
|
sprites:
|
||||||
|
- sprite: Mobs/Customization/vox_parts.rsi
|
||||||
|
state: r_hand
|
||||||
|
coloring:
|
||||||
|
default:
|
||||||
|
type:
|
||||||
|
!type:SimpleColoring
|
||||||
|
color: "#937e3d"
|
||||||
|
|
||||||
|
- type: marking
|
||||||
|
id: VoxLHandScales
|
||||||
|
bodyPart: LHand
|
||||||
|
markingCategory: Arms
|
||||||
|
forcedColoring: true
|
||||||
|
speciesRestriction: [Vox]
|
||||||
|
sprites:
|
||||||
|
- sprite: Mobs/Customization/vox_parts.rsi
|
||||||
|
state: l_hand
|
||||||
|
coloring:
|
||||||
|
default:
|
||||||
|
type:
|
||||||
|
!type:SimpleColoring
|
||||||
|
color: "#937e3d"
|
||||||
|
|
||||||
|
- type: marking
|
||||||
|
id: VoxLFootScales
|
||||||
|
bodyPart: LFoot
|
||||||
|
markingCategory: Legs
|
||||||
|
forcedColoring: true
|
||||||
|
speciesRestriction: [Vox]
|
||||||
|
sprites:
|
||||||
|
- sprite: Mobs/Customization/vox_parts.rsi
|
||||||
|
state: l_foot
|
||||||
|
coloring:
|
||||||
|
default:
|
||||||
|
type:
|
||||||
|
!type:SimpleColoring
|
||||||
|
color: "#937e3d"
|
||||||
|
|
||||||
|
- type: marking
|
||||||
|
id: VoxRFootScales
|
||||||
|
bodyPart: RFoot
|
||||||
|
markingCategory: Legs
|
||||||
|
forcedColoring: true
|
||||||
|
speciesRestriction: [Vox]
|
||||||
|
sprites:
|
||||||
|
- sprite: Mobs/Customization/vox_parts.rsi
|
||||||
|
state: r_foot
|
||||||
|
coloring:
|
||||||
|
default:
|
||||||
|
type:
|
||||||
|
!type:SimpleColoring
|
||||||
|
color: "#937e3d"
|
||||||
|
|
||||||
|
- type: marking
|
||||||
|
id: VoxTail
|
||||||
|
bodyPart: Tail
|
||||||
|
markingCategory: Tail
|
||||||
|
speciesRestriction: [Vox]
|
||||||
|
forcedColoring: true
|
||||||
|
sprites:
|
||||||
|
- sprite: Mobs/Customization/vox_parts.rsi
|
||||||
|
# Ideally this should use the normal tail sprite and apply an actual mask over it, not just use a butchered sprite
|
||||||
|
state: tail_stenciled
|
||||||
@@ -60,6 +60,49 @@
|
|||||||
damage:
|
damage:
|
||||||
types:
|
types:
|
||||||
Slash: 5 # Reduce?
|
Slash: 5 # Reduce?
|
||||||
|
- type: Sprite # Need to redefine the whole order to draw the tail over their gas tank
|
||||||
|
layers:
|
||||||
|
- map: [ "enum.HumanoidVisualLayers.Chest" ]
|
||||||
|
- map: [ "enum.HumanoidVisualLayers.Head" ]
|
||||||
|
- map: [ "enum.HumanoidVisualLayers.Snout" ]
|
||||||
|
- map: [ "enum.HumanoidVisualLayers.Eyes" ]
|
||||||
|
- map: [ "enum.HumanoidVisualLayers.RArm" ]
|
||||||
|
- map: [ "enum.HumanoidVisualLayers.LArm" ]
|
||||||
|
- map: [ "enum.HumanoidVisualLayers.RLeg" ]
|
||||||
|
- map: [ "enum.HumanoidVisualLayers.LLeg" ]
|
||||||
|
- map: [ "jumpsuit" ]
|
||||||
|
- map: [ "enum.HumanoidVisualLayers.LFoot" ]
|
||||||
|
- map: [ "enum.HumanoidVisualLayers.RFoot" ]
|
||||||
|
- map: [ "enum.HumanoidVisualLayers.LHand" ]
|
||||||
|
- map: [ "enum.HumanoidVisualLayers.RHand" ]
|
||||||
|
- map: [ "gloves" ]
|
||||||
|
- map: [ "shoes" ]
|
||||||
|
- map: [ "ears" ]
|
||||||
|
- map: [ "outerClothing" ]
|
||||||
|
- map: [ "eyes" ]
|
||||||
|
- map: [ "belt" ]
|
||||||
|
- map: [ "id" ]
|
||||||
|
- map: [ "neck" ]
|
||||||
|
- map: [ "back" ]
|
||||||
|
- map: [ "enum.HumanoidVisualLayers.FacialHair" ]
|
||||||
|
- map: [ "enum.HumanoidVisualLayers.Hair" ]
|
||||||
|
- map: [ "enum.HumanoidVisualLayers.HeadSide" ]
|
||||||
|
- map: [ "enum.HumanoidVisualLayers.HeadTop" ]
|
||||||
|
- map: [ "suitstorage" ] # This is not in the default order
|
||||||
|
- map: [ "enum.HumanoidVisualLayers.Tail" ]
|
||||||
|
- map: [ "mask" ]
|
||||||
|
- map: [ "head" ]
|
||||||
|
- map: [ "pocket1" ]
|
||||||
|
- map: [ "pocket2" ]
|
||||||
|
- map: [ "enum.HumanoidVisualLayers.Handcuffs" ]
|
||||||
|
color: "#ffffff"
|
||||||
|
sprite: Objects/Misc/handcuffs.rsi
|
||||||
|
state: body-overlay-2
|
||||||
|
visible: false
|
||||||
|
- map: [ "clownedon" ]
|
||||||
|
sprite: "Effects/creampie.rsi"
|
||||||
|
state: "creampie_vox" # Not default
|
||||||
|
visible: false
|
||||||
|
|
||||||
- type: entity
|
- type: entity
|
||||||
parent: BaseSpeciesDummy
|
parent: BaseSpeciesDummy
|
||||||
|
|||||||
@@ -6,18 +6,19 @@
|
|||||||
sprites: MobVoxSprites
|
sprites: MobVoxSprites
|
||||||
markingLimits: MobVoxMarkingLimits
|
markingLimits: MobVoxMarkingLimits
|
||||||
dollPrototype: MobVoxDummy
|
dollPrototype: MobVoxDummy
|
||||||
skinColoration: Hues
|
skinColoration: VoxFeathers
|
||||||
|
defaultSkinTone: "#6c741d"
|
||||||
maleFirstNames: names_vox
|
maleFirstNames: names_vox
|
||||||
femaleFirstNames: names_vox
|
femaleFirstNames: names_vox
|
||||||
naming: First
|
naming: First
|
||||||
sexes:
|
sexes:
|
||||||
- Unsexed
|
- Unsexed
|
||||||
|
|
||||||
|
|
||||||
- type: speciesBaseSprites
|
- type: speciesBaseSprites
|
||||||
id: MobVoxSprites
|
id: MobVoxSprites
|
||||||
sprites:
|
sprites:
|
||||||
Head: MobVoxHead
|
Head: MobVoxHead
|
||||||
|
Snout: MobHumanoidAnyMarking
|
||||||
Hair: MobHumanoidAnyMarking
|
Hair: MobHumanoidAnyMarking
|
||||||
FacialHair: MobHumanoidAnyMarking
|
FacialHair: MobHumanoidAnyMarking
|
||||||
Chest: MobVoxTorso
|
Chest: MobVoxTorso
|
||||||
@@ -30,6 +31,7 @@
|
|||||||
RLeg: MobVoxRLeg
|
RLeg: MobVoxRLeg
|
||||||
LFoot: MobVoxLFoot
|
LFoot: MobVoxLFoot
|
||||||
RFoot: MobVoxRFoot
|
RFoot: MobVoxRFoot
|
||||||
|
Tail: MobHumanoidAnyMarking
|
||||||
|
|
||||||
- type: markingPoints
|
- type: markingPoints
|
||||||
id: MobVoxMarkingLimits
|
id: MobVoxMarkingLimits
|
||||||
@@ -41,57 +43,70 @@
|
|||||||
FacialHair:
|
FacialHair:
|
||||||
points: 1
|
points: 1
|
||||||
required: false
|
required: false
|
||||||
|
Head:
|
||||||
|
points: 1
|
||||||
|
required: true
|
||||||
|
Snout:
|
||||||
|
points: 1
|
||||||
|
required: true
|
||||||
|
defaultMarkings: [ VoxBeak ]
|
||||||
|
Arms:
|
||||||
|
points: 4
|
||||||
|
required: true
|
||||||
|
defaultMarkings: [ VoxLArmScales, VoxRArmScales, VoxRHandScales, VoxLHandScales ]
|
||||||
|
Legs:
|
||||||
|
points: 4
|
||||||
|
required: true
|
||||||
|
defaultMarkings: [ VoxLLegScales, VoxRLegScales, VoxRFootScales, VoxLFootScales ]
|
||||||
Chest:
|
Chest:
|
||||||
points: 1
|
points: 1
|
||||||
required: false
|
required: false
|
||||||
Legs:
|
Tail:
|
||||||
points: 2
|
points: 1
|
||||||
required: false
|
required: true
|
||||||
Arms:
|
defaultMarkings: [ VoxTail ]
|
||||||
points: 2
|
|
||||||
required: false
|
|
||||||
|
|
||||||
- type: humanoidBaseSprite
|
- type: humanoidBaseSprite
|
||||||
id: MobVoxEyes
|
id: MobVoxEyes
|
||||||
baseSprite:
|
baseSprite:
|
||||||
sprite: Mobs/Customization/eyes.rsi
|
sprite: Mobs/Species/Vox/parts.rsi
|
||||||
state: vox_eyes_s
|
state: eyes
|
||||||
|
|
||||||
- type: humanoidBaseSprite
|
- type: humanoidBaseSprite
|
||||||
id: MobVoxHead
|
id: MobVoxHead
|
||||||
baseSprite:
|
baseSprite:
|
||||||
sprite: Mobs/Species/Vox/parts.rsi
|
sprite: Mobs/Species/Vox/parts.rsi
|
||||||
state: head_m
|
state: head
|
||||||
|
|
||||||
- type: humanoidBaseSprite
|
- type: humanoidBaseSprite
|
||||||
id: MobVoxHeadMale
|
id: MobVoxHeadMale
|
||||||
baseSprite:
|
baseSprite:
|
||||||
sprite: Mobs/Species/Vox/parts.rsi
|
sprite: Mobs/Species/Vox/parts.rsi
|
||||||
state: head_m
|
state: head
|
||||||
|
|
||||||
- type: humanoidBaseSprite
|
- type: humanoidBaseSprite
|
||||||
id: MobVoxHeadFemale
|
id: MobVoxHeadFemale
|
||||||
baseSprite:
|
baseSprite:
|
||||||
sprite: Mobs/Species/Vox/parts.rsi
|
sprite: Mobs/Species/Vox/parts.rsi
|
||||||
state: head_f
|
state: head
|
||||||
|
|
||||||
- type: humanoidBaseSprite
|
- type: humanoidBaseSprite
|
||||||
id: MobVoxTorso
|
id: MobVoxTorso
|
||||||
baseSprite:
|
baseSprite:
|
||||||
sprite: Mobs/Species/Vox/parts.rsi
|
sprite: Mobs/Species/Vox/parts.rsi
|
||||||
state: torso_m
|
state: torso
|
||||||
|
|
||||||
- type: humanoidBaseSprite
|
- type: humanoidBaseSprite
|
||||||
id: MobVoxTorsoMale
|
id: MobVoxTorsoMale
|
||||||
baseSprite:
|
baseSprite:
|
||||||
sprite: Mobs/Species/Vox/parts.rsi
|
sprite: Mobs/Species/Vox/parts.rsi
|
||||||
state: torso_m
|
state: torso
|
||||||
|
|
||||||
- type: humanoidBaseSprite
|
- type: humanoidBaseSprite
|
||||||
id: MobVoxTorsoFemale
|
id: MobVoxTorsoFemale
|
||||||
baseSprite:
|
baseSprite:
|
||||||
sprite: Mobs/Species/Vox/parts.rsi
|
sprite: Mobs/Species/Vox/parts.rsi
|
||||||
state: torso_f
|
state: torso
|
||||||
|
|
||||||
- type: humanoidBaseSprite
|
- type: humanoidBaseSprite
|
||||||
id: MobVoxLLeg
|
id: MobVoxLLeg
|
||||||
@@ -140,5 +155,3 @@
|
|||||||
baseSprite:
|
baseSprite:
|
||||||
sprite: Mobs/Species/Vox/parts.rsi
|
sprite: Mobs/Species/Vox/parts.rsi
|
||||||
state: r_foot
|
state: r_foot
|
||||||
|
|
||||||
#
|
|
||||||
|
|||||||
BIN
Resources/Textures/Effects/creampie.rsi/creampie_vox.png
Normal file
|
After Width: | Height: | Size: 585 B |
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"version": 1,
|
"version": 1,
|
||||||
"license": "CC-BY-SA-3.0",
|
"license": "CC-BY-SA-3.0",
|
||||||
"copyright": "Taken from https://github.com/tgstation/tgstation at 0d9c9a8233dfc3fc55edc538955a761a6328bee0. creampie_moth by MilenVolf, creampie_arachnid by PixelTheKermit (Github)",
|
"copyright": "Taken from https://github.com/tgstation/tgstation at 0d9c9a8233dfc3fc55edc538955a761a6328bee0. creampie_moth by MilenVolf, creampie_arachnid by PixelTheKermit (Github), creampie_vox by Errant",
|
||||||
"size": {
|
"size": {
|
||||||
"x": 32,
|
"x": 32,
|
||||||
"y": 32
|
"y": 32
|
||||||
@@ -66,6 +66,10 @@
|
|||||||
"name": "creampie_standborg",
|
"name": "creampie_standborg",
|
||||||
"directions": 4
|
"directions": 4
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "creampie_vox",
|
||||||
|
"directions": 4
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "creampie_xeno_crit"
|
"name": "creampie_xeno_crit"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
{"version": 1, "license": "CC-BY-SA-3.0","copyright": "Vox_eyes Taken from https://github.com/vgstation-coders/vgstation13 at 02ff588d59b3c560c685d9ca75e882d32a72d8cb and human_eyes taken from https://github.com/tgstation/tgstation/blob/8024397cc81c5f47f74cf4279e35728487d0a1a7/icons/mob/human_parts_greyscale.dmi and modified by DrSmugleaf", "size": {"x": 32, "y": 32}, "states": [{"name": "diona", "directions": 4}, {"name": "eyes", "directions": 4}, {"name":"no_eyes"},{"name": "vox_eyes_s", "directions": 4}]}
|
{"version": 1, "license": "CC-BY-SA-3.0","copyright": "human_eyes taken from https://github.com/tgstation/tgstation/blob/8024397cc81c5f47f74cf4279e35728487d0a1a7/icons/mob/human_parts_greyscale.dmi and modified by DrSmugleaf", "size": {"x": 32, "y": 32}, "states": [{"name": "diona", "directions": 4}, {"name": "eyes", "directions": 4}, {"name":"no_eyes"}]}
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 125 B |
BIN
Resources/Textures/Mobs/Customization/vox_parts.rsi/beak.png
Normal file
|
After Width: | Height: | Size: 396 B |
BIN
Resources/Textures/Mobs/Customization/vox_parts.rsi/l_arm.png
Normal file
|
After Width: | Height: | Size: 342 B |
BIN
Resources/Textures/Mobs/Customization/vox_parts.rsi/l_foot.png
Normal file
|
After Width: | Height: | Size: 315 B |
BIN
Resources/Textures/Mobs/Customization/vox_parts.rsi/l_hand.png
Normal file
|
After Width: | Height: | Size: 349 B |
BIN
Resources/Textures/Mobs/Customization/vox_parts.rsi/l_leg.png
Normal file
|
After Width: | Height: | Size: 415 B |
@@ -0,0 +1,55 @@
|
|||||||
|
{
|
||||||
|
"version": 1,
|
||||||
|
"license": "CC-BY-SA-3.0",
|
||||||
|
"copyright": "Taken from https://github.com/vgstation-coders/vgstation13 at 02ff588d59b3c560c685d9ca75e882d32a72d8cb, modified by Bhijn, Errant and Flareguy",
|
||||||
|
"size": {
|
||||||
|
"x": 32,
|
||||||
|
"y": 32
|
||||||
|
},
|
||||||
|
"states": [
|
||||||
|
{
|
||||||
|
"name": "beak",
|
||||||
|
"directions": 4
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "l_arm",
|
||||||
|
"directions": 4
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "l_foot",
|
||||||
|
"directions": 4
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "l_hand",
|
||||||
|
"directions": 4
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "l_leg",
|
||||||
|
"directions": 4
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "r_arm",
|
||||||
|
"directions": 4
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "r_foot",
|
||||||
|
"directions": 4
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "r_hand",
|
||||||
|
"directions": 4
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "r_leg",
|
||||||
|
"directions": 4
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "tail",
|
||||||
|
"directions": 4
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "tail_stenciled",
|
||||||
|
"directions": 4
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
BIN
Resources/Textures/Mobs/Customization/vox_parts.rsi/r_arm.png
Normal file
|
After Width: | Height: | Size: 302 B |
BIN
Resources/Textures/Mobs/Customization/vox_parts.rsi/r_foot.png
Normal file
|
After Width: | Height: | Size: 305 B |
BIN
Resources/Textures/Mobs/Customization/vox_parts.rsi/r_hand.png
Normal file
|
After Width: | Height: | Size: 354 B |
BIN
Resources/Textures/Mobs/Customization/vox_parts.rsi/r_leg.png
Normal file
|
After Width: | Height: | Size: 422 B |
BIN
Resources/Textures/Mobs/Customization/vox_parts.rsi/tail.png
Normal file
|
After Width: | Height: | Size: 590 B |
|
After Width: | Height: | Size: 615 B |
BIN
Resources/Textures/Mobs/Species/Vox/parts.rsi/eyes.png
Normal file
|
After Width: | Height: | Size: 925 B |
BIN
Resources/Textures/Mobs/Species/Vox/parts.rsi/full.png
Normal file
|
After Width: | Height: | Size: 789 B |
BIN
Resources/Textures/Mobs/Species/Vox/parts.rsi/groin.png
Normal file
|
After Width: | Height: | Size: 361 B |
|
Before Width: | Height: | Size: 318 B |
|
Before Width: | Height: | Size: 318 B |
BIN
Resources/Textures/Mobs/Species/Vox/parts.rsi/head.png
Normal file
|
After Width: | Height: | Size: 689 B |
|
Before Width: | Height: | Size: 737 B |
|
Before Width: | Height: | Size: 737 B |
|
Before Width: | Height: | Size: 385 B After Width: | Height: | Size: 399 B |
|
Before Width: | Height: | Size: 255 B After Width: | Height: | Size: 8.8 KiB |
|
Before Width: | Height: | Size: 337 B After Width: | Height: | Size: 8.9 KiB |
|
Before Width: | Height: | Size: 596 B After Width: | Height: | Size: 544 B |
@@ -1,26 +1,25 @@
|
|||||||
{
|
{
|
||||||
"version": 1,
|
"version": 1,
|
||||||
"license": "CC-BY-SA-3.0",
|
"license": "CC-BY-SA-3.0",
|
||||||
"copyright": "Taken from https://github.com/vgstation-coders/vgstation13 at 02ff588d59b3c560c685d9ca75e882d32a72d8cb",
|
"copyright": "Taken from https://github.com/vgstation-coders/vgstation13 at 02ff588d59b3c560c685d9ca75e882d32a72d8cb, by Bhijn, Errant and Flareguy",
|
||||||
"size": {
|
"size": {
|
||||||
"x": 32,
|
"x": 32,
|
||||||
"y": 32
|
"y": 32
|
||||||
},
|
},
|
||||||
"states": [
|
"states": [
|
||||||
{
|
{
|
||||||
"name": "groin_f",
|
"name": "eyes",
|
||||||
"directions": 4
|
"directions": 4
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "groin_m",
|
"name": "full"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "groin",
|
||||||
"directions": 4
|
"directions": 4
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "head_f",
|
"name": "head",
|
||||||
"directions": 4
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "head_m",
|
|
||||||
"directions": 4
|
"directions": 4
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -60,11 +59,7 @@
|
|||||||
"directions": 4
|
"directions": 4
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "torso_f",
|
"name": "torso",
|
||||||
"directions": 4
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "torso_m",
|
|
||||||
"directions": 4
|
"directions": 4
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 391 B After Width: | Height: | Size: 387 B |
|
Before Width: | Height: | Size: 252 B After Width: | Height: | Size: 8.8 KiB |
|
Before Width: | Height: | Size: 354 B After Width: | Height: | Size: 8.9 KiB |
|
Before Width: | Height: | Size: 591 B After Width: | Height: | Size: 549 B |
BIN
Resources/Textures/Mobs/Species/Vox/parts.rsi/torso.png
Normal file
|
After Width: | Height: | Size: 866 B |
|
Before Width: | Height: | Size: 1.0 KiB |
|
Before Width: | Height: | Size: 1.0 KiB |