hopefully this all goes through well

This commit is contained in:
AeraAulin 2025-09-11 08:45:11 -07:00
parent feac8b7e32
commit 14d0c0a351
98 changed files with 1869 additions and 12 deletions

View File

@ -45,7 +45,7 @@ public sealed class ClientInnerBodyAnomalySystem : SharedInnerBodyAnomalySystem
if (!TryComp<SpriteComponent>(ent, out var sprite))
return;
var index = _sprite.LayerMapGet((ent.Owner, sprite), ent.Comp.LayerMap);
_sprite.LayerSetVisible((ent.Owner, sprite), index, false);
if (sprite.LayerMapTryGet(ent.Comp.LayerMap, out var index)) // imp. added this check to prevent errors on anomalites - not having it was bad code on upstream's part
sprite.LayerSetVisible(index, false);
}
}

View File

@ -147,7 +147,7 @@ public sealed partial class AnomalySynchronizerSystem : EntitySystem
var targetXform = _transform.GetWorldPosition(ent);
_transform.SetWorldPosition(anomaly, targetXform);
if (ent.Comp.PulseOnConnect)
if (ent.Comp.PulseOnConnect && !anomaly.Comp.CannotRandomPulse) // imp - added cannotrandompulse
_anomaly.DoAnomalyPulse(anomaly, anomaly);
_popup.PopupEntity(Loc.GetString("anomaly-sync-connected"), ent, PopupType.Medium);
@ -163,7 +163,7 @@ public sealed partial class AnomalySynchronizerSystem : EntitySystem
if (TryComp<AnomalyComponent>(other, out var anomaly))
{
if (ent.Comp.PulseOnDisconnect)
if (ent.Comp.PulseOnDisconnect && !anomaly.CannotRandomPulse) // imp - added cannotrandompulse
_anomaly.DoAnomalyPulse(ent.Comp.ConnectedAnomaly.Value, anomaly);
}

View File

@ -50,6 +50,9 @@ public sealed class ElectricityAnomalySystem : EntitySystem
var query = EntityQueryEnumerator<ElectricityAnomalyComponent, AnomalyComponent, TransformComponent>();
while (query.MoveNext(out var uid, out var elec, out var anom, out var xform))
{
if (anom.CannotRandomPulse) // imp. added CannotRandomPulse
continue;
if (_timing.CurTime < elec.NextSecond)
continue;
elec.NextSecond = _timing.CurTime + TimeSpan.FromSeconds(1);

View File

@ -96,8 +96,11 @@ public sealed class InnerBodyAnomalySystem : SharedInnerBodyAnomalySystem
EntityManager.AddComponents(ent, injectedAnom.Components);
if (!ent.Comp.SkipStun) // imp. added this check for anomalites
{
_stun.TryParalyze(ent, TimeSpan.FromSeconds(ent.Comp.StunDuration), true);
_jitter.DoJitter(ent, TimeSpan.FromSeconds(ent.Comp.StunDuration), true);
}
if (ent.Comp.StartSound is not null)
_audio.PlayPvs(ent.Comp.StartSound, ent);
@ -125,6 +128,7 @@ public sealed class InnerBodyAnomalySystem : SharedInnerBodyAnomalySystem
private void OnAnomalyPulse(Entity<InnerBodyAnomalyComponent> ent, ref AnomalyPulseEvent args)
{
if (!ent.Comp.SkipStun) // imp. added this check for anomalites
_stun.TryParalyze(ent, TimeSpan.FromSeconds(ent.Comp.StunDuration / 2 * args.Severity), true);
_jitter.DoJitter(ent, TimeSpan.FromSeconds(ent.Comp.StunDuration / 2 * args.Severity), true);
}
@ -213,6 +217,7 @@ public sealed class InnerBodyAnomalySystem : SharedInnerBodyAnomalySystem
if (_proto.TryIndex(ent.Comp.InjectionProto, out var injectedAnom))
EntityManager.RemoveComponents(ent, injectedAnom.Components);
if (!ent.Comp.SkipStun) // imp. added this check for anomalites
_stun.TryParalyze(ent, TimeSpan.FromSeconds(ent.Comp.StunDuration), true);
if (ent.Comp.EndMessage is not null &&

View File

@ -5,7 +5,7 @@ using System.Numerics;
using Robust.Shared.Utility;
using Content.Server.Shuttles.Events;
using Content.Shared.IdentityManagement;
using Content.Server.Bible.Components; // #IMP
namespace Content.Server.Pinpointer;
public sealed class PinpointerSystem : SharedPinpointerSystem
@ -51,7 +51,7 @@ public sealed class PinpointerSystem : SharedPinpointerSystem
TogglePinpointer(uid, component);
if (!component.CanRetarget)
LocateTarget(uid, component);
LocateTarget(uid, component, args); //#IMP args
args.Handled = true;
}
@ -73,7 +73,8 @@ public sealed class PinpointerSystem : SharedPinpointerSystem
}
}
private void LocateTarget(EntityUid uid, PinpointerComponent component)
//#IMP ActivateInWorldEvent args: added this
private void LocateTarget(EntityUid uid, PinpointerComponent component, ActivateInWorldEvent? args = null)
{
// try to find target from whitelist
if (component.IsActive && component.Component != null)

View File

@ -19,6 +19,18 @@ namespace Content.Shared.Anomaly.Components;
[Access(typeof(SharedAnomalySystem), typeof(SharedInnerBodyAnomalySystem))]
public sealed partial class AnomalyComponent : Component
{
/// <summary>
/// Imp. If true, skips doing supercritical logic for this anomaly. Used for Anomalites.
/// </summary>
[DataField]
public bool CannotSupercrit;
/// <summary>
/// imp. if true, skips random pulsing and health change over time.
/// </summary>
[DataField]
public bool CannotRandomPulse;
/// <summary>
/// How likely an anomaly is to grow more dangerous. Moves both up and down.
/// Ranges from 0 to 1.

View File

@ -69,6 +69,12 @@ public sealed partial class InnerBodyAnomalyComponent : Component
/// </summary>
[DataField]
public string LayerMap = "inner_anomaly_layer";
/// <summary>
/// imp. added for anomalites to prevent stunning
/// </summary>
[DataField]
public bool SkipStun;
}
/// <summary>

View File

@ -124,6 +124,9 @@ public abstract class SharedAnomalySystem : EntitySystem
/// <param name="ent">Entity to go supercritical</param>
public void StartSupercriticalEvent(Entity<AnomalyComponent?> ent)
{
if (!TryComp<AnomalyComponent>(ent, out var anomComp) || anomComp.CannotSupercrit) // imp
return;
// don't restart it if it's already begun
if (HasComp<AnomalySupercriticalComponent>(ent))
return;
@ -333,6 +336,9 @@ public abstract class SharedAnomalySystem : EntitySystem
var anomalyQuery = EntityQueryEnumerator<AnomalyComponent>();
while (anomalyQuery.MoveNext(out var ent, out var anomaly))
{
if (anomaly.CannotRandomPulse) // imp
continue;
// if the stability is under the death threshold,
// update it every second to start killing it slowly.
if (anomaly.Stability < anomaly.DecayThreshold)
@ -359,6 +365,9 @@ public abstract class SharedAnomalySystem : EntitySystem
var supercriticalQuery = EntityQueryEnumerator<AnomalySupercriticalComponent, AnomalyComponent>();
while (supercriticalQuery.MoveNext(out var ent, out var super, out var anom))
{
if (anom.CannotSupercrit) // imp
continue;
if (Timing.CurTime <= super.EndTime)
continue;
DoAnomalySupercriticalEvent(ent, anom);

View File

@ -25,5 +25,6 @@ public sealed partial class FloatingVisualsComponent : Component
[AutoNetworkedField]
public bool CanFloat = false;
public readonly string AnimationKey = "gravity";
[DataField] // imp. made this a read/write datafield instead of readonly to fix a bug with anomalites.
public string AnimationKey = "gravity";
}

View File

@ -62,6 +62,12 @@ public sealed partial class PinpointerComponent : Component
[ViewVariables]
public bool HasTarget => DistanceToTarget != Distance.Unknown;
/// <summary>
/// #IMP Force pinpointer to activate immediately.
/// </summary>
[DataField("activateImmediately"), ViewVariables]
public bool ActivateImmediately = false;
}
[Serializable, NetSerializable]

View File

@ -0,0 +1,4 @@
chat-speech-verb-name-anomalite = Anomalite
chat-speech-verb-anomalite-1 = twinkles
chat-speech-verb-anomalite-2 = sparkles
chat-speech-verb-anomalite-3 = glitters

View File

@ -0,0 +1,17 @@
ghost-role-information-anomalite-description = A small sprite, born from the latent energies of an anomaly core. Loyal to its core, or whoever possesses it.
ghost-role-information-familiar-anomalite-rules = You are a [color=#6495ed][bold]Familiar[/bold][/color], loyal to the Anomaly Core you came from (or whoever happens to have it right now.) Serve the interests of your master, whatever those may be.
You don't remember any of your previous life, and you don't remember anything you learned as a ghost.
# Anomalite Names
ghost-role-information-fireanomalite-name = Pyroclastic Anomalite
ghost-role-information-gravanomalite-name = Gravity Anomalite
ghost-role-information-iceanomalite-name = Ice Anomalite
ghost-role-information-fleshanomalite-name = Flesh Anomalite
ghost-role-information-rockanomalite-name = Rock Anomalite
ghost-role-information-reagentanomalite-name = Liquid Anomalite
ghost-role-information-bluespaceanomalite-name = Bluespace Anomalite
ghost-role-information-electricanomalite-name = Electricity Anomalite
ghost-role-information-floralanomalite-name = Floral Anomalite
ghost-role-information-shadowanomalite-name = Shadow Anomalite
ghost-role-information-techanomalite-name = Tech Anomalite

View File

@ -0,0 +1,4 @@
## Anomalites
petting-success-anomalite = You pet {THE($target)} on their anomalous little head.
petting-failure-anomalite = You try to pet {THE($target)}, but your fingers are zapped by its energy field!

View File

@ -49,6 +49,9 @@
- type: IgnitionSource
temperature: 400
ignited: true
- type: Summonable # imp
requiresBibleUser: false
specialItem: SpawnPointGhostAnomalitePyroclastic
- type: entity
parent: BaseAnomalyCore
@ -62,6 +65,9 @@
energy: 10
color: "#1e070e"
castShadows: false
- type: Summonable # imp
requiresBibleUser: false
specialItem: SpawnPointGhostAnomaliteGravity
- type: entity
parent: BaseAnomalyCore
@ -75,6 +81,9 @@
energy: 1.5
color: "#befaff"
castShadows: false
- type: Summonable # imp
requiresBibleUser: false
specialItem: SpawnPointGhostAnomaliteIce
- type: entity
parent: BaseAnomalyCore
@ -89,6 +98,9 @@
energy: 3.5
color: "#cb5b7e"
castShadows: false
- type: Summonable # imp
requiresBibleUser: false
specialItem: SpawnPointGhostAnomaliteFlesh
- type: entity
parent: BaseAnomalyCore
@ -102,6 +114,9 @@
energy: 3.5
color: "#5ca8cb"
castShadows: false
- type: Summonable # imp
requiresBibleUser: false
specialItem: SpawnPointGhostAnomaliteRock
- type: entity
parent: BaseAnomalyCore
@ -115,6 +130,9 @@
energy: 3.5
color: "#ffffff"
castShadows: false
- type: Summonable # imp
requiresBibleUser: false
specialItem: SpawnPointGhostAnomaliteLiquid
- type: entity
parent: BaseAnomalyCore
@ -128,6 +146,9 @@
energy: 3.5
color: "#00ccff"
castShadows: false
- type: Summonable # imp
requiresBibleUser: false
specialItem: SpawnPointGhostAnomaliteBluespace
- type: entity
parent: BaseAnomalyCore
@ -142,6 +163,9 @@
color: "#ffffaa"
castShadows: false
- type: Electrified
- type: Summonable # imp
requiresBibleUser: false
specialItem: SpawnPointGhostAnomaliteElectricity
- type: entity
parent: BaseAnomalyCore
@ -157,6 +181,9 @@
energy: 2.0
color: "#6270bb"
castShadows: false
- type: Summonable # imp
requiresBibleUser: false
specialItem: SpawnPointGhostAnomaliteFlora
- type: entity
parent: [ BaseAnomalyCore, BaseShadow ]
@ -170,6 +197,9 @@
energy: 2.0
color: "#793a80"
castShadows: false
- type: Summonable # imp
requiresBibleUser: false
specialItem: SpawnPointGhostAnomaliteShadow
- type: entity
parent: BaseAnomalyCore
@ -183,6 +213,9 @@
energy: 2.0
color: "#56c1e8"
castShadows: false
- type: Summonable # imp
requiresBibleUser: false
specialItem: SpawnPointGhostAnomaliteTech
- type: entity
parent: BaseAnomalyCore
@ -226,6 +259,9 @@
energy: 1.5
color: "#fca3c0"
castShadows: false
- type: Summonable # imp
requiresBibleUser: false
specialItem: SpawnPointGhostAnomalitePyroclastic
- type: entity
parent: BaseAnomalyInertCore
@ -239,6 +275,9 @@
energy: 10
color: "#1e070e"
castShadows: false
- type: Summonable # imp
requiresBibleUser: false
specialItem: SpawnPointGhostAnomaliteGravity
- type: entity
parent: BaseAnomalyInertCore
@ -252,6 +291,9 @@
energy: 1.5
color: "#befaff"
castShadows: false
- type: Summonable # imp
requiresBibleUser: false
specialItem: SpawnPointGhostAnomaliteIce
- type: entity
parent: BaseAnomalyInertCore
@ -266,6 +308,9 @@
energy: 3.5
color: "#cb5b7e"
castShadows: false
- type: Summonable # imp
requiresBibleUser: false
specialItem: SpawnPointGhostAnomaliteFlesh
- type: entity
parent: BaseAnomalyInertCore
@ -279,6 +324,9 @@
energy: 3.5
color: "#5ca8cb"
castShadows: false
- type: Summonable # imp
requiresBibleUser: false
specialItem: SpawnPointGhostAnomaliteRock
- type: entity
parent: BaseAnomalyInertCore
@ -292,6 +340,9 @@
energy: 3.5
color: "#ffffff"
castShadows: false
- type: Summonable # imp
requiresBibleUser: false
specialItem: SpawnPointGhostAnomaliteLiquid
- type: entity
parent: BaseAnomalyInertCore
@ -305,6 +356,9 @@
energy: 3.5
color: "#00ccff"
castShadows: false
- type: Summonable # imp
requiresBibleUser: false
specialItem: SpawnPointGhostAnomaliteBluespace
- type: entity
parent: BaseAnomalyInertCore
@ -318,6 +372,9 @@
energy: 2.0
color: "#ffffaa"
castShadows: false
- type: Summonable # imp
requiresBibleUser: false
specialItem: SpawnPointGhostAnomaliteElectricity
- type: entity
parent: BaseAnomalyInertCore
@ -333,6 +390,9 @@
energy: 2.0
color: "#6270bb"
castShadows: false
- type: Summonable # imp
requiresBibleUser: false
specialItem: SpawnPointGhostAnomaliteFlora
- type: entity
parent: [ BaseAnomalyInertCore, BaseShadow ]
@ -346,6 +406,9 @@
energy: 2.0
color: "#793a80"
castShadows: false
- type: Summonable # imp
requiresBibleUser: false
specialItem: SpawnPointGhostAnomaliteShadow
- type: entity
parent: BaseAnomalyInertCore
@ -359,6 +422,9 @@
energy: 2.0
color: "#56c1e8"
castShadows: false
- type: Summonable # imp
requiresBibleUser: false
specialItem: SpawnPointGhostAnomaliteTech
- type: entity
parent: BaseAnomalyInertCore

View File

@ -0,0 +1,76 @@
# Pyroclastic
- type: damageModifierSet
id: AnomalitePyroclastic
coefficients:
Heat: 0.0
flatReductions:
Heat: 100
# Gravity
- type: damageModifierSet
id: AnomaliteGravity
coefficients:
Blunt: 0.3
Piercing: 0.3
Slash: 0.3
# Ice
- type: damageModifierSet
id: AnomaliteIce
coefficients:
Cold: 0.0
flatReductions:
Cold: 100
# Flesh
- type: damageModifierSet
id: AnomaliteFlesh
coefficients:
Slash: 0.0
# Rock
- type: damageModifierSet
id: AnomaliteRock
coefficients:
Blunt: 0.0
Structural: 2.0
# Reagent
- type: damageModifierSet
id: AnomaliteLiquid
coefficients:
Poison: 0.0
# Bluespace
- type: damageModifierSet
id: AnomaliteBluespace
coefficients:
Cellular: 0.0
Radiation: 0.0
# Electricity
- type: damageModifierSet
id: AnomaliteElectricity
coefficients:
Shock: 0.0
# Flora
- type: damageModifierSet
id: AnomaliteFlora
coefficients:
Piercing: 0.0
# Shadow
- type: damageModifierSet
id: AnomaliteShadow
coefficients:
Asphyxiation: 0.0
Bloodloss: 0.0
Holy: 2.0 # let there be light
# Tech
- type: damageModifierSet
id: AnomaliteTech
coefficients:
Radiation: 0.5
Shock: 0.5

View File

@ -0,0 +1,65 @@
- type: nameIdentifierGroup
id: AnomalitePyroclastic
prefix: ANOM-PY
minValue: 0
maxValue: 999
- type: nameIdentifierGroup
id: AnomaliteBluespace
prefix: ANOM-BL
minValue: 0
maxValue: 999
- type: nameIdentifierGroup
id: AnomaliteElectric
prefix: ANOM-EL
minValue: 0
maxValue: 999
- type: nameIdentifierGroup
id: AnomaliteFlesh
prefix: ANOM-MT # mt for meat - to differentiate from fl for flora
minValue: 0
maxValue: 999
- type: nameIdentifierGroup
id: AnomaliteFlora
prefix: ANOM-FL
minValue: 0
maxValue: 999
- type: nameIdentifierGroup
id: AnomaliteGravity
prefix: ANOM-GR
minValue: 0
maxValue: 999
- type: nameIdentifierGroup
id: AnomaliteIce
prefix: ANOM-FR # fr for frost. i don't think IC would read well
minValue: 0
maxValue: 999
- type: nameIdentifierGroup
id: AnomaliteReagent
prefix: ANOM-LQ # lq for liquid
minValue: 0
maxValue: 999
- type: nameIdentifierGroup
id: AnomaliteRock
prefix: ANOM-RK
minValue: 0
maxValue: 999
- type: nameIdentifierGroup
id: AnomaliteShadow
prefix: ANOM-SH
minValue: 0
maxValue: 999
- type: nameIdentifierGroup
id: AnomaliteTech
prefix: ANOM-TK # tk for tech. tc, te, and th, don't read well
minValue: 0
maxValue: 999

View File

@ -0,0 +1,24 @@
- type: speechSounds
id: Anomalite
saySound:
path: /Audio/_Impstation/Voice/Talk/Anomalite/anomalite.ogg
askSound:
path: /Audio/_Impstation/Voice/Talk/Anomalite/anomalite_ask.ogg
exclaimSound:
path: /Audio/_Impstation/Voice/Talk/Anomalite/anomalite_exclaim.ogg
- type: speechVerb
id: Anomalite
name: chat-speech-verb-name-anomalite
speechVerbStrings:
- chat-speech-verb-anomalite-1
- chat-speech-verb-anomalite-2
- chat-speech-verb-anomalite-3
- type: emoteSounds
id: Anomalite
params:
variation: 0.125
sounds:
Scream:
path: /Audio/_Impstation/Voice/Talk/Anomalite/anomalite_scream.ogg

View File

@ -0,0 +1,274 @@
# Pyroclastic
- type: entity
parent: MarkerBase
id: SpawnPointGhostAnomalitePyroclastic
name: anomalite spawn point
suffix: Pyroclastic
categories: [ DoNotMap ]
components:
- type: GhostRole
name: ghost-role-information-fireanomalite-name
description: ghost-role-information-anomalite-description
rules: ghost-role-information-familiar-anomalite-rules
mindRoles:
- MindRoleGhostRoleFamiliar
raffle:
settings: short
- type: GhostRoleMobSpawner
prototype: MobAnomalitePyroclastic
- type: Sprite
sprite: Markers/jobs.rsi
layers:
- state: green
- sprite: _Impstation/Mobs/Anomalites/anomalite.rsi
state: anomalyfire
# Gravity
- type: entity
parent: MarkerBase
id: SpawnPointGhostAnomaliteGravity
name: anomalite spawn point
suffix: Gravity
categories: [ DoNotMap ]
components:
- type: GhostRole
name: ghost-role-information-gravanomalite-name
description: ghost-role-information-anomalite-description
rules: ghost-role-information-familiar-anomalite-rules
mindRoles:
- MindRoleGhostRoleFamiliar
raffle:
settings: short
- type: GhostRoleMobSpawner
prototype: MobAnomaliteGravity
- type: Sprite
sprite: Markers/jobs.rsi
layers:
- state: green
- sprite: _Impstation/Mobs/Anomalites/anomalite.rsi
state: anomalygravity
# Ice
- type: entity
parent: MarkerBase
id: SpawnPointGhostAnomaliteIce
name: anomalite spawn point
suffix: Ice
categories: [ DoNotMap ]
components:
- type: GhostRole
name: ghost-role-information-iceanomalite-name
description: ghost-role-information-anomalite-description
rules: ghost-role-information-familiar-anomalite-rules
mindRoles:
- MindRoleGhostRoleFamiliar
raffle:
settings: short
- type: GhostRoleMobSpawner
prototype: MobAnomaliteIce
- type: Sprite
sprite: Markers/jobs.rsi
layers:
- state: green
- sprite: _Impstation/Mobs/Anomalites/anomalite.rsi
state: anomalyice
# Flesh
- type: entity
parent: MarkerBase
id: SpawnPointGhostAnomaliteFlesh
name: anomalite spawn point
suffix: Flesh
categories: [ DoNotMap ]
components:
- type: GhostRole
name: ghost-role-information-fleshanomalite-name
description: ghost-role-information-anomalite-description
rules: ghost-role-information-familiar-anomalite-rules
mindRoles:
- MindRoleGhostRoleFamiliar
raffle:
settings: short
- type: GhostRoleMobSpawner
prototype: MobAnomaliteFlesh
- type: Sprite
sprite: Markers/jobs.rsi
layers:
- state: green
- sprite: _Impstation/Mobs/Anomalites/anomalite.rsi
state: anomalyflesh
# Rock
- type: entity
parent: MarkerBase
id: SpawnPointGhostAnomaliteRock
name: anomalite spawn point
suffix: Rock
categories: [ DoNotMap ]
components:
- type: GhostRole
name: ghost-role-information-rockanomalite-name
description: ghost-role-information-anomalite-description
rules: ghost-role-information-familiar-anomalite-rules
mindRoles:
- MindRoleGhostRoleFamiliar
raffle:
settings: short
- type: GhostRoleMobSpawner
prototype: MobAnomaliteRock
- type: Sprite
sprite: Markers/jobs.rsi
layers:
- state: green
- sprite: _Impstation/Mobs/Anomalites/anomalite.rsi
state: anomalyrock
# Reagent
- type: entity
parent: MarkerBase
id: SpawnPointGhostAnomaliteLiquid
name: anomalite spawn point
suffix: Reagent
categories: [ DoNotMap ]
components:
- type: GhostRole
name: ghost-role-information-reagentanomalite-name
description: ghost-role-information-anomalite-description
rules: ghost-role-information-familiar-anomalite-rules
mindRoles:
- MindRoleGhostRoleFamiliar
raffle:
settings: short
- type: GhostRoleMobSpawner
prototype: MobAnomaliteLiquid
- type: Sprite
sprite: Markers/jobs.rsi
layers:
- state: green
- sprite: _Impstation/Mobs/Anomalites/anomalite.rsi
state: anomalyreagent
# Bluespace
- type: entity
parent: MarkerBase
id: SpawnPointGhostAnomaliteBluespace
name: anomalite spawn point
suffix: Bluespace
categories: [ DoNotMap ]
components:
- type: GhostRole
name: ghost-role-information-bluespaceanomalite-name
description: ghost-role-information-anomalite-description
rules: ghost-role-information-familiar-anomalite-rules
mindRoles:
- MindRoleGhostRoleFamiliar
raffle:
settings: short
- type: GhostRoleMobSpawner
prototype: MobAnomaliteBluespace
- type: Sprite
sprite: Markers/jobs.rsi
layers:
- state: green
- sprite: _Impstation/Mobs/Anomalites/anomalite.rsi
state: anomalybluespace
# Electricity
- type: entity
parent: MarkerBase
id: SpawnPointGhostAnomaliteElectricity
name: anomalite spawn point
suffix: Electric
categories: [ DoNotMap ]
components:
- type: GhostRole
name: ghost-role-information-electricanomalite-name
description: ghost-role-information-anomalite-description
rules: ghost-role-information-familiar-anomalite-rules
mindRoles:
- MindRoleGhostRoleFamiliar
raffle:
settings: short
- type: GhostRoleMobSpawner
prototype: MobAnomaliteElectricity
- type: Sprite
sprite: Markers/jobs.rsi
layers:
- state: green
- sprite: _Impstation/Mobs/Anomalites/anomalite.rsi
state: anomalyelectric
# Flora
- type: entity
parent: MarkerBase
id: SpawnPointGhostAnomaliteFlora
name: anomalite spawn point
suffix: Flora
categories: [ DoNotMap ]
components:
- type: GhostRole
name: ghost-role-information-floralanomalite-name
description: ghost-role-information-anomalite-description
rules: ghost-role-information-familiar-anomalite-rules
mindRoles:
- MindRoleGhostRoleFamiliar
raffle:
settings: short
- type: GhostRoleMobSpawner
prototype: MobAnomaliteFlora
- type: Sprite
sprite: Markers/jobs.rsi
layers:
- state: green
- sprite: _Impstation/Mobs/Anomalites/anomalite.rsi
state: anomalyflower
# Shadow
- type: entity
parent: MarkerBase
id: SpawnPointGhostAnomaliteShadow
name: anomalite spawn point
suffix: Shadow
categories: [ DoNotMap ]
components:
- type: GhostRole
name: ghost-role-information-shadowanomalite-name
description: ghost-role-information-anomalite-description
rules: ghost-role-information-familiar-anomalite-rules
mindRoles:
- MindRoleGhostRoleFamiliar
raffle:
settings: short
- type: GhostRoleMobSpawner
prototype: MobAnomaliteShadow
- type: Sprite
sprite: Markers/jobs.rsi
layers:
- state: green
- sprite: _Impstation/Mobs/Anomalites/anomalite.rsi
state: anomalyshadow
# Shadow
- type: entity
parent: MarkerBase
id: SpawnPointGhostAnomaliteTech
name: anomalite spawn point
suffix: Tech
categories: [ DoNotMap ]
components:
- type: GhostRole
name: ghost-role-information-techanomalite-name
description: ghost-role-information-anomalite-description
rules: ghost-role-information-familiar-anomalite-rules
mindRoles:
- MindRoleGhostRoleFamiliar
raffle:
settings: short
- type: GhostRoleMobSpawner
prototype: MobAnomaliteTech
- type: Sprite
sprite: Markers/jobs.rsi
layers:
- state: green
- sprite: _Impstation/Mobs/Anomalites/anomalite.rsi
state: anomalytech

View File

@ -0,0 +1,702 @@
- type: entity
parent: BaseAnomalyInertCore
id: AnomaliteCore
name: anomalite core
description: It's empty.
components:
- type: Sprite
sprite: Structures/Specific/Anomalies/Cores/gravity_core.rsi
# Base Anomalite
- type: entity
parent: [ BaseMob, MobDamageable, MobPolymorphable, MobAtmosExposed, MobCombat, MobBloodstream, MobFlammable ]
id: BaseAnomalite
name: anomalite
abstract: true
categories: [ HideSpawnMenu ]
components:
- type: MindContainer
showExamineInfo: true
- type: Sprite
noRot: true
drawdepth: Mobs
scale: 1, 1
- type: MeleeWeapon
damage:
types:
Blunt: 0 # this should be a custom type and value for each anomaly type.
angle: 0
animation: WeaponArcBite
- type: NpcFactionMember
factions:
- SimpleNeutral
- type: Body
prototype: Animal
- type: Climbing
- type: NameIdentifier
group: Anomalite
- type: GhostTakeoverAvailable
- type: Tag
tags:
- VimPilot
- DoorBumpOpener
- AnomalyHost # this is potentially really funny. if not, or if it causes problems, we can remove it.
- type: Fixtures
fixtures:
fix1:
shape:
!type:PhysShapeCircle
radius: 0.35
density: 75
restitution: 0.0
mask:
- CrateMask # this is so they can fly over tables and through plastic flaps
layer:
- MobLayer
- type: Bloodstream
bloodMaxVolume: 75
bloodReagent: Entropy # DeltaV - Was Anomalium, not part of the initial Anomalite PR. Might port it eventually, but until then Entropy is our closest analogue.
- type: InteractionPopup
successChance: 0.1
interactSuccessString: petting-success-anomalite
interactFailureString: petting-success-anomalite
interactSuccessSpawn: EffectHearts
interactSuccessSound:
path: /Audio/Animals/mouse_squeak.ogg # this should be unique per-type.
interactFailureSound:
path: /Audio/Effects/tesla_consume.ogg # this should be unique per-type.
- type: StatusEffects
allowed:
- Stun
- KnockedDown
- SlowedDown
- Stutter
- Electrocution
- ForcedSleep
- TemporaryBlindness
- Pacified
- StaminaModifier
- Flashed
- RadiationProtection
- Drowsiness
- Adrenaline
- type: Puller
needsHands: false
- type: ComplexInteraction
- type: SSDIndicator
- type: Speech
speechVerb: Anomalite
speechSounds: Anomalite
allowedEmotes: [ 'Scream' ]
- type: Vocal
sounds:
Male: Anomalite
Female: Anomalite
Unsexed: Anomalite
- type: Emoting
- type: BodyEmotes
soundsId: GeneralBodyEmotes
- type: MobState
- type: MobThresholds
thresholds:
0: Alive
100: Dead
- type: Destructible
thresholds:
- trigger:
!type:DamageTypeTrigger
damageType: Blunt
damage: 200
behaviors:
- !type:DoActsBehavior
acts: [ "Destruction" ]
- !type:SpawnEntitiesBehavior
spawn:
AnomaliteCore:
min: 1
max: 1
- trigger:
!type:DamageTypeTrigger
damageType: Heat
damage: 1500
behaviors:
- !type:SpawnEntitiesBehavior
spawnInContainer: true
spawn:
Ash:
min: 1
max: 1
- !type:BurnBodyBehavior { }
- !type:PlaySoundBehavior
sound:
collection: MeatLaserImpact
- type: StandingState
# Anomaly component. Some settings changed to make them not be fucked-up powerful. now they're only a little bit fucked-up powerful.
- type: Anomaly
cannotSupercrit: true
cannotRandomPulse: true
deleteEntity: false
maxPointsPerSecond: 10
corePrototype: AnomaliteCore
healthChangePerSecond: 0.0
decayhreshold: 9999.0
growthThreshold: 9999.0
# apid-type always weightless movement
- type: MovementAlwaysTouching
- type: MovementIgnoreGravity
gravityState: true
- type: Physics
bodyStatus: InAir
- type: CanMoveInAir
- type: FloatingVisuals
animationKey: anomalyfloat
- type: AnimationPlayer
- type: MovementSpeedModifier
weightlessFriction: 1
weightlessFrictionNoInput: 2 # so they can actually stop moving
weightlessAcceleration: 1.5
- type: NoSlip
- type: Familiar # Provides information on core to the pinpointer
- type: Inventory
templateId: anomalite
- type: InventorySlots
- type: Loadout
prototypes:
- StartingGearAnomalitePinpointer
- type: Strippable
- type: UserInterface
interfaces:
enum.StrippingUiKey.Key:
type: StrippableBoundUserInterface
- type: Hands
# Anomalites:
# Pyroclastic
- type: entity
parent: [ BaseAnomalite ]
id: MobAnomalitePyroclastic
suffix: Pyroclastic
description: A flickering little sprite, born from the leftover energies of an anomaly core.
components:
- type: Icon
sprite: _Impstation/Mobs/Anomalites/fire.rsi
state: anom
- type: Sprite
sprite: _Impstation/Mobs/Anomalites/fire.rsi
layers:
- map: [ "enum.DamageStateVisualLayers.Base" ]
state: anom
noRot: true
drawdepth: Mobs
- type: DamageStateVisuals
states:
Alive:
Base: anom
Dead:
Base: dead
- type: MeleeWeapon
damage:
types:
Heat: 5
angle: 0
animation: WeaponArcBite
- type: Damageable
damageContainer: Biological
damageModifierSet: AnomalitePyroclastic
- type: Temperature
heatDamageThreshold: 325
coldDamageThreshold: 0
currentTemperature: 310.15
coldDamage:
types:
Cold: 0.1
specificHeat: 42
heatDamage:
types:
Heat: 0.0
- type: PointLight
radius: 2
energy: 1
softness: 10
color: "#E25822"
- type: NameIdentifier
group: AnomalitePyroclastic
# Anomaly functionality
- type: InnerBodyAnomaly
injectionProto: AnomalyInjectionPyroclastic
skipStun: true
# Gravity
- type: entity
parent: [ BaseAnomalite ]
id: MobAnomaliteGravity
suffix: Gravity
description: A strange little sprite, born from the leftover energies of an anomaly core.
components:
- type: Icon
sprite: _Impstation/Mobs/Anomalites/grav.rsi
state: anom
- type: Sprite
sprite: _Impstation/Mobs/Anomalites/grav.rsi
layers:
- map: [ "enum.DamageStateVisualLayers.Base" ]
state: anom
noRot: true
drawdepth: Mobs
- type: DamageStateVisuals
states:
Alive:
Base: anom
Dead:
Base: dead
- type: MeleeWeapon
damage:
types:
Blunt: 5
angle: 0
animation: WeaponArcBite
- type: Damageable
damageContainer: Biological
damageModifierSet: AnomaliteGravity
- type: PointLight
radius: 2
energy: 1
softness: 10
color: "#1e070e"
- type: NameIdentifier
group: AnomaliteGravity
# Anomaly functionality
- type: InnerBodyAnomaly
injectionProto: AnomalyInjectionGravity
skipStun: true
# Ice
- type: entity
parent: [ BaseAnomalite ]
id: MobAnomaliteIce
suffix: Ice
description: A chilly little sprite, born from the leftover energies of an anomaly core.
components:
- type: Icon
sprite: _Impstation/Mobs/Anomalites/ice.rsi
state: anom
- type: Sprite
sprite: _Impstation/Mobs/Anomalites/ice.rsi
layers:
- map: [ "enum.DamageStateVisualLayers.Base" ]
state: anom
noRot: true
drawdepth: Mobs
- type: DamageStateVisuals
states:
Alive:
Base: anom
Dead:
Base: dead
- type: MeleeWeapon
damage:
types:
Cold: 5
angle: 0
animation: WeaponArcBite
- type: Damageable
damageContainer: Biological
damageModifierSet: AnomaliteIce
- type: Temperature
heatDamageThreshold: 325
coldDamageThreshold: 0
currentTemperature: 310.15
coldDamage:
types:
Cold: 0.0
specificHeat: 42
heatDamage:
types:
Heat: 1.5
- type: PointLight
radius: 2
energy: 1
softness: 10
color: "#befaff"
- type: NameIdentifier
group: AnomaliteIce
# Anomaly functionality
- type: InnerBodyAnomaly
injectionProto: AnomalyInjectionIce
skipStun: true
# Flesh
- type: entity
parent: [ BaseAnomalite ]
id: MobAnomaliteFlesh
suffix: Flesh
description: A gristly little sprite, born from the leftover energies of an anomaly core.
components:
- type: Icon
sprite: _Impstation/Mobs/Anomalites/flesh.rsi
state: anom
- type: Sprite
sprite: _Impstation/Mobs/Anomalites/flesh.rsi
layers:
- map: [ "enum.DamageStateVisualLayers.Base" ]
state: anom
noRot: true
drawdepth: Mobs
- type: DamageStateVisuals
states:
Alive:
Base: anom
Dead:
Base: dead
- type: MeleeWeapon
damage:
types:
Slash: 5
angle: 0
animation: WeaponArcBite
- type: Damageable
damageContainer: Biological
damageModifierSet: AnomaliteFlesh
- type: PointLight
radius: 2
energy: 1
softness: 10
color: "#cb5b7e"
- type: NameIdentifier
group: AnomaliteFlesh
# Anomaly functionality
- type: InnerBodyAnomaly
injectionProto: AnomalyInjectionFlesh
skipStun: true
# Rock
- type: entity
parent: [ BaseAnomalite ]
id: MobAnomaliteRock
suffix: Rock
description: A sturdy little sprite, born from the leftover energies of an anomaly core.
components:
- type: Icon
sprite: _Impstation/Mobs/Anomalites/rock.rsi
state: anom
- type: Sprite
sprite: _Impstation/Mobs/Anomalites/rock.rsi
layers:
- map: [ "enum.DamageStateVisualLayers.Base" ]
state: anom
noRot: true
drawdepth: Mobs
- type: DamageStateVisuals
states:
Alive:
Base: anom
Dead:
Base: dead
- type: MeleeWeapon
damage:
types:
Blunt: 5
Structural: 15
angle: 0
animation: WeaponArcBite
- type: Damageable
damageContainer: Biological
damageModifierSet: AnomaliteRock
- type: PointLight
radius: 2
energy: 1
softness: 10
color: "#5ca8cb"
- type: NameIdentifier
group: AnomaliteRock
# Anomaly functionality
- type: InnerBodyAnomaly
injectionProto: AnomalyInjectionRock
skipStun: true
# Reagent
- type: entity
parent: [ BaseAnomalite ]
id: MobAnomaliteLiquid
suffix: Liquid
description: A sopping little sprite, born from the leftover energies of an anomaly core.
components:
- type: Icon
sprite: _Impstation/Mobs/Anomalites/reagent.rsi
state: anom
- type: Sprite
sprite: _Impstation/Mobs/Anomalites/reagent.rsi
layers:
- state: anom
map: [ "enum.AnomalyVisualLayers.Base", "enum.DamageStateVisualLayers.Base" ]
- state: pulse
map: [ "enum.AnomalyVisualLayers.Animated" ]
visible: false
noRot: true
drawdepth: Mobs
- type: DamageStateVisuals
states:
Alive:
Base: anom
Dead:
Base: dead
- type: MeleeWeapon
damage:
types:
Poison: 1 # reduced cus they inject their solution into you
angle: 0
animation: WeaponArcBite
- type: Damageable
damageContainer: Biological
damageModifierSet: AnomaliteLiquid
- type: PointLight
radius: 2
energy: 1
softness: 10
color: "#ffffff"
- type: NameIdentifier
group: AnomaliteReagent
# Anomaly functionality
- type: InnerBodyAnomaly
injectionProto: AnomalyInjectionLiquid
skipStun: true
- type: SolutionContainerManager
solutions:
anomaly:
maxVol: 1500
- type: MeleeChemicalInjector
solution: anomaly
transferAmount: 6
- type: RandomSprite
selected:
enum.AnomalyVisualLayers.Base:
anom: "#ffffff"
enum.AnomalyVisualLayers.Animated:
pulse: "#ffffff"
- type: SolutionScanner # i think it's fun for them to be able to scan their solutions
# Bluespace
- type: entity
parent: [ BaseAnomalite ]
id: MobAnomaliteBluespace
suffix: Bluespace
description: A non-euclidean little sprite, born from the leftover energies of an anomaly core.
components:
- type: Icon
sprite: _Impstation/Mobs/Anomalites/bluespace.rsi
state: anom
- type: Sprite
sprite: _Impstation/Mobs/Anomalites/bluespace.rsi
layers:
- map: [ "enum.DamageStateVisualLayers.Base" ]
state: anom
noRot: true
drawdepth: Mobs
- type: DamageStateVisuals
states:
Alive:
Base: anom
Dead:
Base: dead
- type: MeleeWeapon
damage:
types:
Cellular: 5 # there was a great big flash, everything just changed / his molecules got all rearranged
angle: 0
animation: WeaponArcBite
- type: Damageable
damageContainer: Biological
damageModifierSet: AnomaliteBluespace
- type: PointLight
radius: 2
energy: 1
softness: 10
color: "#00ccff"
- type: NameIdentifier
group: AnomaliteBluespace
# Anomaly functionality
- type: InnerBodyAnomaly
injectionProto: AnomalyInjectionBluespace
skipStun: true
# Electricity
- type: entity
parent: [ BaseAnomalite ]
id: MobAnomaliteElectricity
suffix: Electricity
description: A shocking little sprite, born from the leftover energies of an anomaly core.
components:
- type: Icon
sprite: _Impstation/Mobs/Anomalites/electric.rsi
state: anom
- type: Sprite
sprite: _Impstation/Mobs/Anomalites/electric.rsi
layers:
- map: [ "enum.DamageStateVisualLayers.Base" ]
state: anom
noRot: true
drawdepth: Mobs
- type: DamageStateVisuals
states:
Alive:
Base: anom
Dead:
Base: dead
- type: MeleeWeapon
damage:
types:
Shock: 5
angle: 0
animation: WeaponArcBite
- type: Damageable
damageContainer: Biological
damageModifierSet: AnomaliteElectricity
- type: PointLight
radius: 2
energy: 1
softness: 10
color: "#ffffaa"
- type: NameIdentifier
group: AnomaliteElectric
# Anomaly functionality
- type: InnerBodyAnomaly
injectionProto: AnomalyInjectionElectric
skipStun: true
# Flora
- type: entity
parent: [ BaseAnomalite ]
id: MobAnomaliteFlora
suffix: Flora
description: A blossoming little sprite, born from the leftover energies of an anomaly core.
components:
- type: Icon
sprite: _Impstation/Mobs/Anomalites/flower.rsi
state: anom
- type: Sprite
sprite: _Impstation/Mobs/Anomalites/flower.rsi
layers:
- map: [ "enum.DamageStateVisualLayers.Base" ]
state: anom
noRot: true
drawdepth: Mobs
- type: DamageStateVisuals
states:
Alive:
Base: anom
Dead:
Base: dead
- type: MeleeWeapon
damage:
types:
Piercing: 5 # thorns?
angle: 0
animation: WeaponArcBite
- type: Damageable
damageContainer: Biological
damageModifierSet: AnomaliteFlora
- type: PointLight
radius: 2
energy: 1
softness: 10
color: "#6270bb"
- type: NameIdentifier
group: AnomaliteFlora
# Anomaly functionality
- type: InnerBodyAnomaly
injectionProto: AnomalyInjectionFlora
skipStun: true
# Shadow
- type: entity
parent: [ BaseAnomalite ]
id: MobAnomaliteShadow
suffix: Shadow
description: A dark little sprite, born from the leftover energies of an anomaly core.
components:
- type: Icon
sprite: _Impstation/Mobs/Anomalites/shadow.rsi
state: anom
- type: Sprite
sprite: _Impstation/Mobs/Anomalites/shadow.rsi
layers:
- map: [ "enum.DamageStateVisualLayers.Base" ]
state: anom
noRot: true
drawdepth: Mobs
- type: DamageStateVisuals
states:
Alive:
Base: anom
Dead:
Base: dead
- type: MeleeWeapon
damage:
types:
Asphyxiation: 10 # suffocating darkness
angle: 0
animation: WeaponArcBite
- type: Damageable
damageContainer: Biological
damageModifierSet: AnomaliteShadow
- type: PointLight
radius: 2
energy: 1
softness: 10
color: "#793a80"
- type: NameIdentifier
group: AnomaliteShadow
# Anomaly functionality
- type: InnerBodyAnomaly
injectionProto: AnomalyInjectionShadow
skipStun: true
- type: NightVision
isActive: true
toggleAction: null
color: "#50595C"
activateSound: null
deactivateSound: null
# Tech
- type: entity
parent: [ BaseAnomalite ]
id: MobAnomaliteTech
suffix: Tech
description: A cybernetic little sprite, born from the leftover energies of an anomaly core.
components:
- type: Icon
sprite: _Impstation/Mobs/Anomalites/tech.rsi
state: anom
- type: Sprite
sprite: _Impstation/Mobs/Anomalites/tech.rsi
layers:
- map: [ "enum.DamageStateVisualLayers.Base" ]
state: anom
noRot: true
drawdepth: Mobs
- type: DamageStateVisuals
states:
Alive:
Base: anom
Dead:
Base: dead
- type: MeleeWeapon
damage:
types:
Radiation: 5 # there's not really a relevant damage type for this
angle: 0
animation: WeaponArcBite
- type: Damageable
damageContainer: Biological
damageModifierSet: AnomaliteTech
- type: PointLight
radius: 2
energy: 1
softness: 10
color: "#56c1e8"
- type: NameIdentifier
group: AnomaliteTech
# Anomaly functionality
- type: InnerBodyAnomaly
injectionProto: AnomalyInjectionTech
skipStun: true

View File

@ -0,0 +1,78 @@
# Imp. This is only used for Anomalites
- type: entity
parent: AnomalyInjectionBase
id: AnomalyInjectionLiquid
categories: [ HideSpawnMenu ]
components:
- type: PointLight
color: "#ffffff"
- type: PuddleCreateAnomaly
solution: anomaly
- type: InjectionAnomaly
solution: anomaly
superCriticalInjectRadius: 10
- type: ReagentProducerAnomaly
solution: anomaly
needRecolor: true
dangerousChemicals:
- UnstableMutagen
- Mold
- PolytrinicAcid
- FerrochromicAcid
- FluorosulfuricAcid
- SulfuricAcid
- HeartbreakerToxin
- VentCrud
- UncookedAnimalProteins
- Thermite
- Napalm
- Phlogiston
- ChlorineTrifluoride
- FoamingAgent
- BuzzochloricBees
- RobustHarvest
usefulChemicals:
- Cryptobiolin
- Dylovene
- Arithrazine
- Bicaridine
- Cryoxadone
- Dermaline
- Dexalin
- DexalinPlus
- Epinephrine
- Leporazine
- Ambuzol
- Tricordrazine
- Artifexium
- Ethylredoxrazine
funChemicals:
- Desoxyephedrine
- Ephedrine
- THC
- SpaceDrugs
- Nocturine
- MuteToxin
- NorepinephricAcid
- Pax
- Ipecac
- Cognizine
- Beer
- SpaceGlue
- SpaceLube
- CogChamp
- Honk
- Carpetium
- JuiceThatMakesYouWeh
- type: Drink
solution: anomaly
- type: DrainableSolution
solution: anomaly
- type: DrawableSolution
solution: anomaly
- type: ExaminableSolution
solution: anomaly
- type: RefillableSolution
solution: anomaly
- type: InjectableSolution
solution: beaker

View File

@ -0,0 +1,14 @@
- type: inventoryTemplate
id: anomalite
slots:
- name: pocket1
slotTexture: pocket
fullTextureName: template_small
slotFlags: POCKET
slotGroup: MainHotbar
stripTime: 3
uiWindowPos: 0,3
strippingWindowPos: 0,4
dependsOn: jumpsuit
displayName: Pocket 1
stripHidden: true

View File

@ -0,0 +1,28 @@
- type: entity
parent: PinpointerBase
name: core pull
description: You have an instinctual knowledge of the location of your core.
suffix: Station, Unremoveable
id: PinpointerAnomalite
components:
- type: Sprite
sprite: _DV/Objects/Devices/pinpointer.rsi # DeltaV - They were just using the impstation dragon pinpointer so I made them a custom one
layers:
- state: pinpointer-anomalite
map: ["enum.PinpointerLayers.Base"]
- state: pinonnull
map: ["enum.PinpointerLayers.Screen"]
shader: unshaded
visible: false
- type: Icon
sprite: _DV/Objects/Devices/pinpointer.rsi # DeltaV - They were just using the impstation dragon pinpointer so I made them a custom one
state: pinpointer-anomalite
- type: Pinpointer
targetName: your core
activateImmediately: true
- type: Unremoveable
- type: startingGear
id: StartingGearAnomalitePinpointer
equipment:
pocket1: PinpointerAnomalite

Binary file not shown.

After

Width:  |  Height:  |  Size: 196 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 198 B

View File

@ -0,0 +1,150 @@
{
"version": 1,
"size": {
"x": 32,
"y": 32
},
"license": "CC-BY-SA-3.0",
"copyright": "Taken from tgstation at https://github.com/tgstation/tgstation/commit/59f2a4e10e5ba36033c9734ddebfbbdc6157472d, pinpointer-anomalite by AeraAulin(Github)",
"states": [
{
"name": "pinonalert",
"directions": 8,
"delays": [
[
0.2,
0.2
],
[
0.2,
0.2
],
[
0.2,
0.2
],
[
0.2,
0.2
],
[
0.2,
0.2
],
[
0.2,
0.2
],
[
0.2,
0.2
],
[
0.2,
0.2
]
]
},
{
"name": "pinonalertdirect",
"delays": [
[
0.2,
0.2
]
]
},
{
"name": "pinonalertnull",
"delays": [
[
0.2,
0.2
]
]
},
{
"name": "pinonclose",
"delays": [
[
0.2,
0.2
]
]
},
{
"name": "pinondirect",
"delays": [
[
0.2,
0.2
]
]
},
{
"name": "pinondirectlarge",
"delays": [
[
0.2,
0.2
]
]
},
{
"name": "pinondirectsmall",
"delays": [
[
0.2,
0.2
]
]
},
{
"name": "pinondirectxtrlarge",
"delays": [
[
0.2,
0.2
]
]
},
{
"name": "pinonfar",
"delays": [
[
0.6,
0.2
]
]
},
{
"name": "pinonmedium",
"delays": [
[
0.4,
0.2
]
]
},
{
"name": "pinonnull",
"delays": [
[
0.2,
0.2
]
]
},
{
"name": "pinpointer-anomalite"
},
{
"name": "inhand-left",
"directions": 4
},
{
"name": "inhand-right",
"directions": 4
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 577 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 196 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 212 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 166 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 173 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 152 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 159 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 230 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 182 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 524 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 502 B

View File

@ -0,0 +1,59 @@
{
"version": 1,
"size": {
"x": 32,
"y": 32
},
"license": "CC-BY-SA-3.0",
"copyright": "Made by FaelinDraws",
"states": [
{
"name": "anomalybluespace",
"directions": 4
},
{
"name": "anomalyelectric",
"directions": 4
},
{
"name": "anomalyfire",
"directions": 4
},
{
"name": "anomalyflesh",
"directions": 4
},
{
"name": "anomalyflower",
"directions": 4
},
{
"name": "anomalygravity",
"directions": 4
},
{
"name": "anomalyice",
"directions": 4
},
{
"name": "anomalyreagent",
"directions": 4
},
{
"name": "anomalyrock",
"directions": 4
},
{
"name": "anomalyshadow",
"directions": 4
},
{
"name": "anomalytech",
"directions": 4
},
{
"name": "blank",
"directions": 4
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 462 B

View File

@ -0,0 +1,23 @@
{
"version": 1,
"size": {
"x": 32,
"y": 32
},
"license": "CC-BY-SA-3.0",
"copyright": "Made by FaelinDraws",
"states": [
{
"name": "anom",
"directions": 4
},
{
"name": "pulse",
"directions": 4
},
{
"name": "dead",
"directions": 4
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 384 B

View File

@ -0,0 +1,23 @@
{
"version": 1,
"size": {
"x": 32,
"y": 32
},
"license": "CC-BY-SA-3.0",
"copyright": "Made by FaelinDraws",
"states": [
{
"name": "anom",
"directions": 4
},
{
"name": "pulse",
"directions": 4
},
{
"name": "dead",
"directions": 4
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 417 B

View File

@ -0,0 +1,23 @@
{
"version": 1,
"size": {
"x": 32,
"y": 32
},
"license": "CC-BY-SA-3.0",
"copyright": "Made by FaelinDraws",
"states": [
{
"name": "anom",
"directions": 4
},
{
"name": "pulse",
"directions": 4
},
{
"name": "dead",
"directions": 4
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 490 B

View File

@ -0,0 +1,23 @@
{
"version": 1,
"size": {
"x": 32,
"y": 32
},
"license": "CC-BY-SA-3.0",
"copyright": "Made by FaelinDraws",
"states": [
{
"name": "anom",
"directions": 4
},
{
"name": "pulse",
"directions": 4
},
{
"name": "dead",
"directions": 4
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 501 B

View File

@ -0,0 +1,23 @@
{
"version": 1,
"size": {
"x": 32,
"y": 32
},
"license": "CC-BY-SA-3.0",
"copyright": "Made by FaelinDraws",
"states": [
{
"name": "anom",
"directions": 4
},
{
"name": "pulse",
"directions": 4
},
{
"name": "dead",
"directions": 4
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 603 B

View File

@ -0,0 +1,23 @@
{
"version": 1,
"size": {
"x": 32,
"y": 32
},
"license": "CC-BY-SA-3.0",
"copyright": "Made by FaelinDraws",
"states": [
{
"name": "anom",
"directions": 4
},
{
"name": "pulse",
"directions": 4
},
{
"name": "dead",
"directions": 4
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 574 B

View File

@ -0,0 +1,23 @@
{
"version": 1,
"size": {
"x": 32,
"y": 32
},
"license": "CC-BY-SA-3.0",
"copyright": "Made by FaelinDraws",
"states": [
{
"name": "anom",
"directions": 4
},
{
"name": "pulse",
"directions": 4
},
{
"name": "dead",
"directions": 4
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 578 B

View File

@ -0,0 +1,23 @@
{
"version": 1,
"size": {
"x": 32,
"y": 32
},
"license": "CC-BY-SA-3.0",
"copyright": "Made by FaelinDraws",
"states": [
{
"name": "anom",
"directions": 4
},
{
"name": "pulse",
"directions": 4
},
{
"name": "dead",
"directions": 4
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 676 B

View File

@ -0,0 +1,23 @@
{
"version": 1,
"size": {
"x": 32,
"y": 32
},
"license": "CC-BY-SA-3.0",
"copyright": "Made by FaelinDraws",
"states": [
{
"name": "anom",
"directions": 4
},
{
"name": "pulse",
"directions": 4
},
{
"name": "dead",
"directions": 4
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 621 B

View File

@ -0,0 +1,23 @@
{
"version": 1,
"size": {
"x": 32,
"y": 32
},
"license": "CC-BY-SA-3.0",
"copyright": "Made by FaelinDraws",
"states": [
{
"name": "anom",
"directions": 4
},
{
"name": "pulse",
"directions": 4
},
{
"name": "dead",
"directions": 4
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 549 B

View File

@ -0,0 +1,23 @@
{
"version": 1,
"size": {
"x": 32,
"y": 32
},
"license": "CC-BY-SA-3.0",
"copyright": "Made by FaelinDraws",
"states": [
{
"name": "anom",
"directions": 4
},
{
"name": "pulse",
"directions": 4
},
{
"name": "dead",
"directions": 4
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB