Разное (#385)

* - add: Meatspike changes.

* - fix: Fix socks.

* - remove: No light status.

* - tweak: Raptor tweak.

* - fix: Fix exception.

* - remove: Remove unsexed.

* - tweak: Crossbow tweak.

* - add: More meatspike.

* - tweak: Nerf buff rune.

* - tweak: No throwing during incorporeal.

* - add: Incorporeal magic cooldown.
This commit is contained in:
Aviu00
2024-06-26 11:56:29 +00:00
committed by GitHub
parent afa3325f60
commit 649ded64d6
21 changed files with 91 additions and 64 deletions

View File

@@ -93,11 +93,14 @@ namespace Content.Client.Popups
_aliveWorldLabels.Add(label); _aliveWorldLabels.Add(label);
// START WhiteDream // START WhiteDream
if (!_isLogging) if (!_isLogging)
return; return;
if (!_examine.InRangeUnOccluded(_playerManager.LocalEntity!.Value, coordinates, 10)) if (_playerManager.LocalEntity == null)
return;
if (!_examine.InRangeUnOccluded(_playerManager.LocalEntity.Value, coordinates, 10))
return; return;
var fontSizeDict = new Dictionary<PopupType, string> var fontSizeDict = new Dictionary<PopupType, string>
@@ -117,7 +120,7 @@ namespace Content.Client.Popups
var chatMsg = new ChatMessage(ChatChannel.Emotes, message, wrappedMEssage, var chatMsg = new ChatMessage(ChatChannel.Emotes, message, wrappedMEssage,
GetNetEntity(EntityUid.Invalid), null); GetNetEntity(EntityUid.Invalid), null);
_uiManager.GetUIController<ChatUIController>().ProcessChatMessage(chatMsg); _uiManager.GetUIController<ChatUIController>().ProcessChatMessage(chatMsg);
// END WhiteDream // END WhiteDream
} }

View File

@@ -32,6 +32,9 @@ public sealed class FlipOnHitSystem : SharedFlipOnHitSystem
if (!_timing.IsFirstTimePredicted) if (!_timing.IsFirstTimePredicted)
return; return;
if (TerminatingOrDeleted(user))
return;
if (_animationSystem.HasRunningAnimation(user, EmoteAnimationSystem.AnimationKey)) if (_animationSystem.HasRunningAnimation(user, EmoteAnimationSystem.AnimationKey))
{ {
EnsureComp<FlippingComponent>(user); EnsureComp<FlippingComponent>(user);

View File

@@ -1,10 +1,13 @@
using System.Linq;
using Content.Server.Administration.Logs; using Content.Server.Administration.Logs;
using Content.Server.Body.Systems; using Content.Server.Body.Systems;
using Content.Server.Kitchen.Components; using Content.Server.Kitchen.Components;
using Content.Server.Popups; using Content.Server.Popups;
using Content.Shared.Body.Components;
using Content.Shared.Database; using Content.Shared.Database;
using Content.Shared.DoAfter; using Content.Shared.DoAfter;
using Content.Shared.DragDrop; using Content.Shared.DragDrop;
using Content.Shared.Examine;
using Content.Shared.IdentityManagement; using Content.Shared.IdentityManagement;
using Content.Shared.Interaction; using Content.Shared.Interaction;
using Content.Shared.Interaction.Events; using Content.Shared.Interaction.Events;
@@ -50,9 +53,21 @@ namespace Content.Server.Kitchen.EntitySystems
SubscribeLocalEvent<KitchenSpikeComponent, SuicideEvent>(OnSuicide); SubscribeLocalEvent<KitchenSpikeComponent, SuicideEvent>(OnSuicide);
SubscribeLocalEvent<KitchenSpikeComponent, ExaminedEvent>(OnExamine);
SubscribeLocalEvent<ButcherableComponent, CanDropDraggedEvent>(OnButcherableCanDrop); SubscribeLocalEvent<ButcherableComponent, CanDropDraggedEvent>(OnButcherableCanDrop);
} }
private void OnExamine(Entity<KitchenSpikeComponent> ent, ref ExaminedEvent args)
{
var (uid, comp) = ent;
if (comp.Victim is not "?" or "")
{
args.PushMarkup(Loc.GetString("comp-kitchen-spike-examine", ("this", uid), ("victim", comp.Victim)));
}
}
private void OnButcherableCanDrop(EntityUid uid, ButcherableComponent component, ref CanDropDraggedEvent args) private void OnButcherableCanDrop(EntityUid uid, ButcherableComponent component, ref CanDropDraggedEvent args)
{ {
args.Handled = true; args.Handled = true;
@@ -152,7 +167,8 @@ namespace Content.Server.Kitchen.EntitySystems
// THE WHAT? // THE WHAT?
// TODO: Need to be able to leave them on the spike to do DoT, see ss13. // TODO: Need to be able to leave them on the spike to do DoT, see ss13.
var gibs = _bodySystem.GibBody(victimUid); var gibs = _bodySystem.GibBody(victimUid);
foreach (var gib in gibs) { foreach (var gib in gibs.Where(HasComp<BodyComponent>)) // WD EDIT
{
QueueDel(gib); QueueDel(gib);
} }
@@ -236,21 +252,23 @@ namespace Content.Server.Kitchen.EntitySystems
// THE WHAT? (again) // THE WHAT? (again)
// Prevent dead from being spiked TODO: Maybe remove when rounds can be played and DOT is implemented // Prevent dead from being spiked TODO: Maybe remove when rounds can be played and DOT is implemented
if (Resolve(victimUid, ref mobState, false) && /*if (Resolve(victimUid, ref mobState, false) &&
_mobStateSystem.IsAlive(victimUid, mobState)) _mobStateSystem.IsAlive(victimUid, mobState))
{ {
_popupSystem.PopupEntity(Loc.GetString("comp-kitchen-spike-deny-not-dead", ("victim", Identity.Entity(victimUid, EntityManager))), _popupSystem.PopupEntity(Loc.GetString("comp-kitchen-spike-deny-not-dead", ("victim", Identity.Entity(victimUid, EntityManager))),
victimUid, userUid); victimUid, userUid);
return true; return true;
} }*/
// WD EDIT
if (userUid != victimUid) if (userUid != victimUid)
{
_popupSystem.PopupEntity(Loc.GetString("comp-kitchen-spike-begin-hook-victim", ("user", Identity.Entity(userUid, EntityManager)), ("this", uid)), victimUid, victimUid, PopupType.LargeCaution); _popupSystem.PopupEntity(Loc.GetString("comp-kitchen-spike-begin-hook-victim", ("user", Identity.Entity(userUid, EntityManager)), ("this", uid)), victimUid, victimUid, PopupType.LargeCaution);
}
// TODO: make it work when SuicideEvent is implemented // TODO: make it work when SuicideEvent is implemented
// else else
// _popupSystem.PopupEntity(Loc.GetString("comp-kitchen-spike-begin-hook-self", ("this", uid)), victimUid, Filter.Pvs(uid)); // This is actually unreachable and should be in SuicideEvent {
_popupSystem.PopupEntity(Loc.GetString("comp-kitchen-spike-begin-hook-self", ("this", uid)), victimUid,
victimUid); // This is actually unreachable and should be in SuicideEvent
}
butcherable.BeingButchered = true; butcherable.BeingButchered = true;
component.InUse = true; component.InUse = true;

View File

@@ -63,9 +63,6 @@ namespace Content.Server.Light.Components
[DataField("togglePort", customTypeSerializer: typeof(PrototypeIdSerializer<SinkPortPrototype>))] [DataField("togglePort", customTypeSerializer: typeof(PrototypeIdSerializer<SinkPortPrototype>))]
public string TogglePort = "Toggle"; public string TogglePort = "Toggle";
[DataField("statusPort", customTypeSerializer: typeof(PrototypeIdSerializer<SourcePortPrototype>))]
public string StatusPort = "LightStatus";
/// <summary> /// <summary>
/// How long it takes to eject a bulb from this /// How long it takes to eject a bulb from this
/// </summary> /// </summary>

View File

@@ -76,7 +76,6 @@ namespace Content.Server.Light.EntitySystems
{ {
light.LightBulbContainer = _containerSystem.EnsureContainer<ContainerSlot>(uid, LightBulbContainer); light.LightBulbContainer = _containerSystem.EnsureContainer<ContainerSlot>(uid, LightBulbContainer);
_signalSystem.EnsureSinkPorts(uid, light.OnPort, light.OffPort, light.TogglePort); _signalSystem.EnsureSinkPorts(uid, light.OnPort, light.OffPort, light.TogglePort);
_signalSystem.EnsureSourcePorts(uid, light.StatusPort); // WD
} }
private void OnMapInit(EntityUid uid, PoweredLightComponent light, MapInitEvent args) private void OnMapInit(EntityUid uid, PoweredLightComponent light, MapInitEvent args)
@@ -447,14 +446,6 @@ namespace Content.Server.Light.EntitySystems
light.On = !light.On; light.On = !light.On;
// WD START
var data = new NetworkPayload
{
{DeviceNetworkConstants.LogicState, light.On ? SignalState.High : SignalState.Low}
};
_signalSystem.InvokePort(uid, light.StatusPort, data);
// WD END
UpdateLight(uid, light); UpdateLight(uid, light);
} }

View File

@@ -12,6 +12,7 @@ using Content.Shared.Physics;
using Content.Shared.StatusEffect; using Content.Shared.StatusEffect;
using Content.Shared._White.Cult; using Content.Shared._White.Cult;
using Content.Shared._White.Cult.Components; using Content.Shared._White.Cult.Components;
using Content.Shared.Throwing;
namespace Content.Server._White.Cult.Runes.Systems; namespace Content.Server._White.Cult.Runes.Systems;
@@ -34,6 +35,7 @@ public partial class CultSystem
SubscribeLocalEvent<WraithPhaseActionEvent>(OnWraithPhase); SubscribeLocalEvent<WraithPhaseActionEvent>(OnWraithPhase);
SubscribeLocalEvent<IncorporealComponent, AttackAttemptEvent>(OnAttackAttempt); SubscribeLocalEvent<IncorporealComponent, AttackAttemptEvent>(OnAttackAttempt);
SubscribeLocalEvent<IncorporealComponent, ThrowAttemptEvent>(OnThrowAttempt);
SubscribeLocalEvent<JuggernautCreateWallActionEvent>(OnJuggernautCreateWall); SubscribeLocalEvent<JuggernautCreateWallActionEvent>(OnJuggernautCreateWall);
@@ -163,6 +165,14 @@ public partial class CultSystem
} }
} }
private void OnThrowAttempt(Entity<IncorporealComponent> ent, ref ThrowAttemptEvent args)
{
if (_statusEffectsSystem.HasStatusEffect(args.Uid, "Incorporeal"))
{
_statusEffectsSystem.TryRemoveStatusEffect(args.Uid, "Incorporeal");
}
}
private void OnJuggernautCreateWall(JuggernautCreateWallActionEvent ev) private void OnJuggernautCreateWall(JuggernautCreateWallActionEvent ev)
{ {
if (!TrySpawnWall(ev.Performer, ev.WallPrototypeId)) if (!TrySpawnWall(ev.Performer, ev.WallPrototypeId))

View File

@@ -1,20 +1,25 @@
using System.Linq; using System.Linq;
using Content.Server.Actions;
using Content.Shared._White.Wizard.Magic;
using Content.Shared.Actions;
using Content.Shared.Eye; using Content.Shared.Eye;
using Content.Shared.Movement.Pulling.Components; using Content.Shared.Movement.Pulling.Components;
using Content.Shared.Movement.Pulling.Systems; using Content.Shared.Movement.Pulling.Systems;
using Content.Shared.Movement.Systems; using Content.Shared.Movement.Systems;
using Content.Shared.Physics;
using Content.Shared.Stealth; using Content.Shared.Stealth;
using Content.Shared.Stealth.Components; using Content.Shared.Stealth.Components;
using Robust.Server.GameObjects; using Robust.Server.GameObjects;
using Robust.Shared.Physics; using Robust.Shared.Physics;
using Robust.Shared.Physics.Systems; using Robust.Shared.Physics.Systems;
using Robust.Shared.Timing;
namespace Content.Server._White.IncorporealSystem; namespace Content.Server._White.IncorporealSystem;
public sealed class IncorporealSystem : EntitySystem public sealed class IncorporealSystem : EntitySystem
{ {
[Dependency] private readonly IGameTiming _timing = default!;
[Dependency] private readonly MovementSpeedModifierSystem _movement = default!; [Dependency] private readonly MovementSpeedModifierSystem _movement = default!;
[Dependency] private readonly ActionsSystem _actions = default!;
[Dependency] private readonly SharedPhysicsSystem _physics = default!; [Dependency] private readonly SharedPhysicsSystem _physics = default!;
[Dependency] private readonly VisibilitySystem _visibilitySystem = default!; [Dependency] private readonly VisibilitySystem _visibilitySystem = default!;
[Dependency] private readonly SharedStealthSystem _stealth = default!; [Dependency] private readonly SharedStealthSystem _stealth = default!;
@@ -78,6 +83,21 @@ public sealed class IncorporealSystem : EntitySystem
_stealth.SetVisibility(uid, 1); _stealth.SetVisibility(uid, 1);
RemComp<StealthComponent>(uid); RemComp<StealthComponent>(uid);
_movement.RefreshMovementSpeedModifiers(uid); _movement.RefreshMovementSpeedModifiers(uid);
if (!TryComp(uid, out ActionsContainerComponent? container))
return;
var cooldown = TimeSpan.FromSeconds(3);
foreach (var action in container.Container.ContainedEntities.Where(HasComp<MagicComponent>))
{
if (!_actions.TryGetActionData(action, out var comp, false))
continue;
if (comp.Cooldown.HasValue && comp.Cooldown.Value.End >= _timing.CurTime + cooldown)
continue;
_actions.SetCooldown(action, cooldown);
}
} }
private void OnRefresh(EntityUid uid, IncorporealComponent component, RefreshMovementSpeedModifiersEvent args) private void OnRefresh(EntityUid uid, IncorporealComponent component, RefreshMovementSpeedModifiersEvent args)

View File

@@ -24,7 +24,7 @@ public sealed class AmaterasuSystem : EntitySystem
if (flammable.OnFire) if (flammable.OnFire)
{ {
_bodySystem.GibBody(uid); _bodySystem.GibBody(uid, true);
return; return;
} }

View File

@@ -9,7 +9,7 @@ namespace Content.Shared.Kitchen.Components;
public sealed partial class KitchenSpikeComponent : Component public sealed partial class KitchenSpikeComponent : Component
{ {
[DataField("delay")] [DataField("delay")]
public float SpikeDelay = 7.0f; public float SpikeDelay = 2.0f;
[ViewVariables(VVAccess.ReadWrite)] [ViewVariables(VVAccess.ReadWrite)]
[DataField("sound")] [DataField("sound")]

View File

@@ -285,6 +285,7 @@ public abstract partial class SharedProjectileSystem : EntitySystem
new RemoveEmbeddedProjectileEvent(), eventTarget: uid, target: uid) new RemoveEmbeddedProjectileEvent(), eventTarget: uid, target: uid)
{ {
DistanceThreshold = SharedInteractionSystem.InteractionRange, DistanceThreshold = SharedInteractionSystem.InteractionRange,
CancelDuplicate = false
}, doAfter); }, doAfter);
return true; return true;

View File

@@ -4,13 +4,13 @@ namespace Content.Shared._White.Cult.Components;
public sealed partial class CultBuffComponent : Component public sealed partial class CultBuffComponent : Component
{ {
[ViewVariables(VVAccess.ReadOnly), DataField] [ViewVariables(VVAccess.ReadOnly), DataField]
public TimeSpan BuffTime = TimeSpan.FromSeconds(60); public TimeSpan BuffTime = TimeSpan.FromSeconds(20);
[ViewVariables(VVAccess.ReadOnly), DataField] [ViewVariables(VVAccess.ReadOnly), DataField]
public TimeSpan StartingBuffTime = TimeSpan.FromSeconds(60); public TimeSpan StartingBuffTime = TimeSpan.FromSeconds(20);
[ViewVariables(VVAccess.ReadOnly), DataField] [ViewVariables(VVAccess.ReadOnly), DataField]
public TimeSpan BuffLimit = TimeSpan.FromSeconds(55); public TimeSpan BuffLimit = TimeSpan.FromSeconds(10);
public static float NearbyTilesBuffRadius = 1f; public static float NearbyTilesBuffRadius = 1f;

View File

@@ -11,3 +11,4 @@ comp-kitchen-spike-knife-needed = Вам нужен нож для этого.
comp-kitchen-spike-remove-meat = Вы срезаете немного мяса с { $victim }. comp-kitchen-spike-remove-meat = Вы срезаете немного мяса с { $victim }.
comp-kitchen-spike-remove-meat-last = Вы срезаете последний кусок мяса с { $victim }! comp-kitchen-spike-remove-meat-last = Вы срезаете последний кусок мяса с { $victim }!
comp-kitchen-spike-meat-name = мясо { $victim } comp-kitchen-spike-meat-name = мясо { $victim }
comp-kitchen-spike-examine = На { CAPITALIZE($this) } висит туша { CAPITALIZE($victim) }.

View File

@@ -156,12 +156,6 @@
description: Передатчик сигнала ХимМастера description: Передатчик сигнала ХимМастера
# WD # WD
- type: sourcePort
id: LightStatus
name: Статус светильника
description: Этот порт вызывается всякий раз, когда меняется статус светильника
defaultLinks: [ Toggle ]
- type: sourcePort - type: sourcePort
id: BodyScannerSender id: BodyScannerSender
name: Сканер тела name: Сканер тела

View File

@@ -1,7 +1,7 @@
- type: entity - type: entity
name: laser raptor name: laser raptor
id: MobLaserRaptor id: MobLaserRaptor
parent: SimpleMobBase parent: SimpleSpaceMobBase
description: From the Viking age. description: From the Viking age.
components: components:
- type: NpcFactionMember - type: NpcFactionMember
@@ -36,7 +36,7 @@
- type: MobThresholds - type: MobThresholds
thresholds: thresholds:
0: Alive 0: Alive
100: Dead 50: Dead
- type: MovementSpeedModifier - type: MovementSpeedModifier
baseWalkSpeed: 2 baseWalkSpeed: 2
baseSprintSpeed: 5 baseSprintSpeed: 5

View File

@@ -29,10 +29,10 @@
visible: false visible: false
- map: [ "underwearb" ] #White - map: [ "underwearb" ] #White
- map: [ "underweart" ] #White - map: [ "underweart" ] #White
- map: ["jumpsuit"]
- map: [ "enum.HumanoidVisualLayers.LFoot" ] - map: [ "enum.HumanoidVisualLayers.LFoot" ]
- map: [ "enum.HumanoidVisualLayers.RFoot" ] - map: [ "enum.HumanoidVisualLayers.RFoot" ]
- map: [ "socks" ] #White - map: [ "socks" ] #White
- map: ["jumpsuit"]
- map: ["enum.HumanoidVisualLayers.LHand"] - map: ["enum.HumanoidVisualLayers.LHand"]
- map: ["enum.HumanoidVisualLayers.RHand"] - map: ["enum.HumanoidVisualLayers.RHand"]
- map: [ "gloves" ] - map: [ "gloves" ]

View File

@@ -74,8 +74,6 @@
- map: [ "enum.HumanoidVisualLayers.LArm" ] - map: [ "enum.HumanoidVisualLayers.LArm" ]
- map: [ "enum.HumanoidVisualLayers.RLeg" ] - map: [ "enum.HumanoidVisualLayers.RLeg" ]
- map: [ "enum.HumanoidVisualLayers.LLeg" ] - map: [ "enum.HumanoidVisualLayers.LLeg" ]
- map: [ "underwearb" ] #White
- map: [ "underweart" ] #White
- shader: StencilClear - shader: StencilClear
sprite: Mobs/Species/Human/parts.rsi #PJB on stencil clear being on the left leg: "...this is 'fine'" -https://github.com/space-wizards/space-station-14/pull/12217#issuecomment-1291677115 sprite: Mobs/Species/Human/parts.rsi #PJB on stencil clear being on the left leg: "...this is 'fine'" -https://github.com/space-wizards/space-station-14/pull/12217#issuecomment-1291677115
# its fine, but its still very stupid that it has to be done like this instead of allowing sprites to just directly insert a stencil clear. # its fine, but its still very stupid that it has to be done like this instead of allowing sprites to just directly insert a stencil clear.
@@ -86,17 +84,14 @@
sprite: Mobs/Customization/masking_helpers.rsi sprite: Mobs/Customization/masking_helpers.rsi
state: unisex_full state: unisex_full
visible: false visible: false
- map: [ "jumpsuit" ] - map: [ "underwearb" ] #White
- map: [ "enum.HumanoidVisualLayers.LHand" ] - map: [ "underweart" ] #White
- map: [ "enum.HumanoidVisualLayers.RHand" ]
- map: [ "enum.HumanoidVisualLayers.LFoot" ] - map: [ "enum.HumanoidVisualLayers.LFoot" ]
- map: [ "enum.HumanoidVisualLayers.RFoot" ] - map: [ "enum.HumanoidVisualLayers.RFoot" ]
- map: [ "socks" ] #White - map: [ "socks" ] #White
- map: [ "enum.HumanoidVisualLayers.Handcuffs" ] - map: [ "jumpsuit" ]
color: "#ffffff" - map: [ "enum.HumanoidVisualLayers.LHand" ]
sprite: Objects/Misc/handcuffs.rsi - map: [ "enum.HumanoidVisualLayers.RHand" ]
state: body-overlay-2
visible: false
- map: [ "gloves" ] - map: [ "gloves" ]
- map: [ "shoes" ] - map: [ "shoes" ]
- map: [ "ears" ] - map: [ "ears" ]
@@ -115,6 +110,11 @@
- map: [ "head" ] - map: [ "head" ]
- map: [ "pocket1" ] - map: [ "pocket1" ]
- map: [ "pocket2" ] - map: [ "pocket2" ]
- map: [ "enum.HumanoidVisualLayers.Handcuffs" ]
color: "#ffffff"
sprite: Objects/Misc/handcuffs.rsi
state: body-overlay-2
visible: false
- map: [ "clownedon" ] # Dynamically generated - map: [ "clownedon" ] # Dynamically generated
sprite: "Effects/creampie.rsi" sprite: "Effects/creampie.rsi"
state: "creampie_moth" state: "creampie_moth"

View File

@@ -40,7 +40,7 @@
- type: RCDDeconstructable - type: RCDDeconstructable
cost: 4 cost: 4
delay: 2 delay: 2
fx: EffectRCDDeconstruct2 fx: EffectRCDDeconstruct2
- type: Destructible - type: Destructible
thresholds: thresholds:
- trigger: - trigger:
@@ -72,7 +72,7 @@
mode: SnapgridCenter mode: SnapgridCenter
snap: snap:
- Wallmount - Wallmount
- type: entity - type: entity
name: light name: light
description: "A light fixture. Draws power and produces light when equipped with a light tube." description: "A light fixture. Draws power and produces light when equipped with a light tube."
@@ -100,9 +100,6 @@
receiveFrequencyId: SmartLight receiveFrequencyId: SmartLight
- type: WirelessNetworkConnection - type: WirelessNetworkConnection
range: 200 range: 200
- type: DeviceLinkSource
ports:
- LightStatus
- type: DeviceLinkSink - type: DeviceLinkSink
ports: ports:
- On - On
@@ -294,9 +291,6 @@
receiveFrequencyId: SmartLight receiveFrequencyId: SmartLight
- type: WirelessNetworkConnection - type: WirelessNetworkConnection
range: 200 range: 200
- type: DeviceLinkSource
ports:
- LightStatus
- type: Appearance - type: Appearance
- type: PoweredLightVisuals - type: PoweredLightVisuals
- type: DeviceLinkSink - type: DeviceLinkSink

View File

@@ -87,9 +87,6 @@
receiveFrequencyId: SmartLight receiveFrequencyId: SmartLight
- type: WirelessNetworkConnection - type: WirelessNetworkConnection
range: 200 range: 200
- type: DeviceLinkSource
ports:
- LightStatus
- type: DeviceLinkSink - type: DeviceLinkSink
ports: ports:
- On - On

View File

@@ -12,8 +12,8 @@
southRotation: true southRotation: true
steps: steps:
- material: Steel - material: Steel
amount: 15 amount: 5
doAfter: 2 doAfter: 5
- node: MeatSpike - node: MeatSpike
entity: KitchenSpike entity: KitchenSpike
edges: edges:
@@ -21,7 +21,7 @@
completed: completed:
- !type:SpawnPrototype - !type:SpawnPrototype
prototype: SheetSteel1 prototype: SheetSteel1
amount: 15 amount: 5
steps: steps:
- tool: Screwing - tool: Screwing
doAfter: 1 doAfter: 5

View File

@@ -13,8 +13,6 @@
femaleFirstNames: names_arachnid_first femaleFirstNames: names_arachnid_first
maleLastNames: names_arachnid_last maleLastNames: names_arachnid_last
femaleLastNames: names_arachnid_last femaleLastNames: names_arachnid_last
sexes:
- Unsexed
- type: markingPoints - type: markingPoints
id: MobArachnidMarkingLimits id: MobArachnidMarkingLimits

Binary file not shown.

Before

Width:  |  Height:  |  Size: 761 B

After

Width:  |  Height:  |  Size: 512 B