Energy pilons WIP (#326)

* split partial magic system

* add debug sprited pilons

* some energy pilons interactions

* Update CP14MagicEnergySystem.Relay.cs

* spupers (#322)

* spupers

* meta

* aura nodes + aura scanners

* scanner sprites

* maid dress

* reverse pilon logic

* relay delete, code clean up

* delete content

* Update basic.yml

* Update shirt.yml

* Update crystal.yml

---------

Co-authored-by: Jaraten <116667537+Jaraten@users.noreply.github.com>
This commit is contained in:
Ed
2024-07-29 21:01:36 +03:00
committed by GitHub
parent c69cb0320e
commit 22bb0ae283
53 changed files with 600 additions and 132 deletions

View File

@@ -0,0 +1,94 @@
using System.Numerics;
using Content.Server._CP14.MagicEnergy.Components;
using Content.Shared._CP14.MagicEnergy.Components;
namespace Content.Server._CP14.MagicEnergy;
public partial class CP14MagicEnergySystem
{
private void InitializeDraw()
{
SubscribeLocalEvent<CP14MagicEnergyDrawComponent, MapInitEvent>(OnDrawMapInit);
SubscribeLocalEvent<CP14RandomAuraNodeComponent, MapInitEvent>(OnRandomRangeMapInit);
}
private void OnRandomRangeMapInit(Entity<CP14RandomAuraNodeComponent> random, ref MapInitEvent args)
{
if (!TryComp<CP14AuraNodeComponent>(random, out var draw))
return;
draw.Energy = _random.NextFloat(random.Comp.MinDraw, random.Comp.MaxDraw);
draw.Range = _random.NextFloat(random.Comp.MinRange, random.Comp.MaxRange);
}
private void OnDrawMapInit(Entity<CP14MagicEnergyDrawComponent> ent, ref MapInitEvent args)
{
ent.Comp.NextUpdateTime = _gameTiming.CurTime + TimeSpan.FromSeconds(ent.Comp.Delay);
}
private void UpdateDraw(float frameTime)
{
UpdateEnergyContainer();
UpdateEnergyCrystalSlot();
UpdateEnergyRadiusDraw();
}
private void UpdateEnergyContainer()
{
var query = EntityQueryEnumerator<CP14MagicEnergyDrawComponent, CP14MagicEnergyContainerComponent>();
while (query.MoveNext(out var uid, out var draw, out var magicContainer))
{
if (draw.NextUpdateTime >= _gameTiming.CurTime)
continue;
draw.NextUpdateTime = _gameTiming.CurTime + TimeSpan.FromSeconds(draw.Delay);
ChangeEnergy(uid, magicContainer, draw.Energy, safe: draw.Safe);
}
}
private void UpdateEnergyCrystalSlot()
{
var query = EntityQueryEnumerator<CP14MagicEnergyDrawComponent, CP14MagicEnergyCrystalSlotComponent>();
while (query.MoveNext(out var uid, out var draw, out var slot))
{
if (!draw.Enable)
continue;
if (draw.NextUpdateTime >= _gameTiming.CurTime)
continue;
draw.NextUpdateTime = _gameTiming.CurTime + TimeSpan.FromSeconds(draw.Delay);
if (!_magicSlot.TryGetEnergyCrystalFromSlot(uid, out var energyEnt, out var energyComp))
continue;
ChangeEnergy(energyEnt.Value, energyComp, draw.Energy, draw.Safe);
}
}
private void UpdateEnergyRadiusDraw()
{
var query = EntityQueryEnumerator<CP14AuraNodeComponent>();
while (query.MoveNext(out var uid, out var draw))
{
if (!draw.Enable)
continue;
if (draw.NextUpdateTime >= _gameTiming.CurTime)
continue;
draw.NextUpdateTime = _gameTiming.CurTime + TimeSpan.FromSeconds(draw.Delay);
var containers = _lookup.GetEntitiesInRange<CP14MagicEnergyContainerComponent>(Transform(uid).Coordinates, draw.Range);
foreach (var container in containers)
{
var distance = Vector2.Distance(_transform.GetWorldPosition(uid), _transform.GetWorldPosition(container));
var energyDraw = draw.Energy * (1 - distance / draw.Range);
ChangeEnergy(container, container.Comp, energyDraw, true);
}
}
}
}

View File

@@ -0,0 +1,60 @@
using System.Numerics;
using Content.Server._CP14.MagicEnergy.Components;
using Content.Shared._CP14.MagicEnergy;
using Content.Shared._CP14.MagicEnergy.Components;
using Content.Shared.Examine;
using Content.Shared.FixedPoint;
using Content.Shared.Interaction.Events;
using Content.Shared.Inventory;
namespace Content.Server._CP14.MagicEnergy;
public partial class CP14MagicEnergySystem
{
private void InitializeScanner()
{
SubscribeLocalEvent<CP14MagicEnergyExaminableComponent, ExaminedEvent>(OnExamined);
SubscribeLocalEvent<CP14MagicEnergyScannerComponent, CP14MagicEnergyScanEvent>(OnMagicScanAttempt);
SubscribeLocalEvent<CP14MagicEnergyScannerComponent, InventoryRelayedEvent<CP14MagicEnergyScanEvent>>((e, c, ev) => OnMagicScanAttempt(e, c, ev.Args));
SubscribeLocalEvent<CP14AuraScannerComponent, UseInHandEvent>(OnAuraScannerUseInHand);
}
private void OnMagicScanAttempt(EntityUid uid, CP14MagicEnergyScannerComponent component, CP14MagicEnergyScanEvent args)
{
args.CanScan = true;
}
private void OnExamined(Entity<CP14MagicEnergyExaminableComponent> ent, ref ExaminedEvent args)
{
if (!TryComp<CP14MagicEnergyContainerComponent>(ent, out var magicContainer))
return;
var scanEvent = new CP14MagicEnergyScanEvent();
RaiseLocalEvent(args.Examiner, scanEvent);
if (!scanEvent.CanScan)
return;
args.PushMarkup(GetEnergyExaminedText(ent, magicContainer));
}
private void OnAuraScannerUseInHand(Entity<CP14AuraScannerComponent> scanner, ref UseInHandEvent args)
{
FixedPoint2 sumDraw = 0f;
var query = EntityQueryEnumerator<CP14AuraNodeComponent, TransformComponent>();
while (query.MoveNext(out var auraUid, out var node, out var xform))
{
if (xform.MapUid != Transform(scanner).MapUid)
continue;
var distance = Vector2.Distance(_transform.GetWorldPosition(auraUid), _transform.GetWorldPosition(scanner));
if (distance > node.Range)
continue;
sumDraw += node.Energy * (1 - distance / node.Range);
}
_popup.PopupCoordinates(Loc.GetString("cp14-magic-scanner", ("power", sumDraw)), Transform(scanner).Coordinates, args.User);
}
}

View File

@@ -1,93 +1,29 @@
using Content.Server._CP14.MagicEnergy.Components;
using Content.Server.Popups;
using Content.Shared._CP14.MagicEnergy;
using Content.Shared._CP14.MagicEnergy.Components;
using Content.Shared.Examine;
using Content.Shared.Inventory;
using Robust.Server.GameObjects;
using Robust.Shared.Random;
using Robust.Shared.Timing;
namespace Content.Server._CP14.MagicEnergy;
public sealed partial class CP14MagicEnergySystem : SharedCP14MagicEnergySystem
{
[Dependency] private readonly SharedTransformSystem _transform = default!;
[Dependency] private readonly IGameTiming _gameTiming = default!;
[Dependency] private readonly PointLightSystem _light = default!;
[Dependency] private readonly CP14MagicEnergyCrystalSlotSystem _magicSlot = default!;
[Dependency] private readonly EntityLookupSystem _lookup = default!;
[Dependency] private readonly IRobustRandom _random = default!;
[Dependency] private readonly PopupSystem _popup = default!;
public override void Initialize()
{
SubscribeLocalEvent<CP14MagicEnergyDrawComponent, MapInitEvent>(OnMapInit);
SubscribeLocalEvent<CP14MagicEnergyPointLightControllerComponent, CP14MagicEnergyLevelChangeEvent>(OnEnergyChange);
SubscribeLocalEvent<CP14MagicEnergyExaminableComponent, ExaminedEvent>(OnExamined);
SubscribeLocalEvent<CP14MagicEnergyScannerComponent, CP14MagicEnergyScanEvent>(OnMagicScanAttempt);
SubscribeLocalEvent<CP14MagicEnergyScannerComponent, InventoryRelayedEvent<CP14MagicEnergyScanEvent>>((e, c, ev) => OnMagicScanAttempt(e, c, ev.Args));
}
private void OnEnergyChange(Entity<CP14MagicEnergyPointLightControllerComponent> ent, ref CP14MagicEnergyLevelChangeEvent args)
{
if (!TryComp<PointLightComponent>(ent, out var light))
return;
var lightEnergy = MathHelper.Lerp(ent.Comp.MinEnergy, ent.Comp.MaxEnergy, (float)(args.NewValue / args.MaxValue));
_light.SetEnergy(ent, lightEnergy, light);
}
private void OnMapInit(Entity<CP14MagicEnergyDrawComponent> ent, ref MapInitEvent args)
{
ent.Comp.NextUpdateTime = _gameTiming.CurTime + TimeSpan.FromSeconds(ent.Comp.Delay);
}
private void OnMagicScanAttempt(EntityUid uid, CP14MagicEnergyScannerComponent component, CP14MagicEnergyScanEvent args)
{
args.CanScan = true;
}
private void OnExamined(Entity<CP14MagicEnergyExaminableComponent> ent, ref ExaminedEvent args)
{
if (!TryComp<CP14MagicEnergyContainerComponent>(ent, out var magicContainer))
return;
var scanEvent = new CP14MagicEnergyScanEvent();
RaiseLocalEvent(args.Examiner, scanEvent);
if (!scanEvent.CanScan)
return;
args.PushMarkup(GetEnergyExaminedText(ent, magicContainer));
InitializeDraw();
InitializeScanner();
}
public override void Update(float frameTime)
{
base.Update(frameTime);
var query = EntityQueryEnumerator<CP14MagicEnergyDrawComponent, CP14MagicEnergyContainerComponent>();
while (query.MoveNext(out var uid, out var draw, out var magicContainer))
{
if (draw.NextUpdateTime >= _gameTiming.CurTime)
continue;
draw.NextUpdateTime = _gameTiming.CurTime + TimeSpan.FromSeconds(draw.Delay);
ChangeEnergy(uid, magicContainer, draw.Energy, safe: draw.Safe);
}
var query2 = EntityQueryEnumerator<CP14MagicEnergyDrawComponent, CP14MagicEnergyCrystalSlotComponent>();
while (query2.MoveNext(out var uid, out var draw, out var slot))
{
if (!draw.Enable)
continue;
if (draw.NextUpdateTime >= _gameTiming.CurTime)
continue;
draw.NextUpdateTime = _gameTiming.CurTime + TimeSpan.FromSeconds(draw.Delay);
if (!_magicSlot.TryGetEnergyCrystalFromSlot(uid, out var energyEnt, out var energyComp))
continue;
ChangeEnergy(energyEnt.Value, energyComp, draw.Energy, draw.Safe);
}
UpdateDraw(frameTime);
}
}

View File

@@ -0,0 +1,50 @@
using Content.Shared.FixedPoint;
namespace Content.Server._CP14.MagicEnergy.Components;
[RegisterComponent, Access(typeof(CP14MagicEnergySystem))]
public sealed partial class CP14AuraNodeComponent : Component
{
[DataField]
public bool Enable = true;
[DataField]
public FixedPoint2 Energy = 1f;
[DataField]
public float Range = 10f;
/// <summary>
/// If not safe, restoring or drawing power across boundaries call dangerous events, that may destroy crystals
/// </summary>
[DataField]
public bool Safe = true;
/// <summary>
/// how often objects will try to change magic energy. In Seconds
/// </summary>
[DataField]
public float Delay = 5f;
/// <summary>
/// the time of the next magic energy change
/// </summary>
[DataField]
public TimeSpan NextUpdateTime { get; set; } = TimeSpan.Zero;
}
[RegisterComponent, Access(typeof(CP14MagicEnergySystem))]
public sealed partial class CP14RandomAuraNodeComponent : Component
{
[DataField]
public float MinDraw = -2f;
[DataField]
public float MaxDraw = 2f;
[DataField]
public float MinRange = 5f;
[DataField]
public float MaxRange = 10f;
}

View File

@@ -0,0 +1,6 @@
namespace Content.Server._CP14.MagicEnergy.Components;
[RegisterComponent, Access(typeof(CP14MagicEnergySystem))]
public sealed partial class CP14AuraScannerComponent : Component
{
}

View File

@@ -1,16 +0,0 @@
using Content.Shared.Inventory;
namespace Content.Shared._CP14.MagicEnergy.Components;
/// <summary>
/// Controls the strength of the PointLight component, depending on the amount of mana in the object
/// </summary>
[RegisterComponent, Access(typeof(SharedCP14MagicEnergySystem))]
public sealed partial class CP14MagicEnergyPointLightControllerComponent : Component
{
[DataField]
public float MaxEnergy = 1f;
[DataField]
public float MinEnergy = 0f;
}

View File

@@ -31,7 +31,7 @@ public partial class SharedCP14MagicEnergySystem : EntitySystem
public string GetEnergyExaminedText(EntityUid uid, CP14MagicEnergyContainerComponent ent)
{
var power = (int)((ent.Energy / ent.MaxEnergy) * 100);
var power = (int)(ent.Energy / ent.MaxEnergy * 100);
var color = "#3fc488";
if (power < 66)

View File

@@ -16,4 +16,9 @@
- files: ["thud.ogg"]
license: "CC0-1.0"
copyright: 'BMacZero of Freesound.org'
source: "https://freesound.org/people/BMacZero/sounds/96138/"
source: "https://freesound.org/people/BMacZero/sounds/96138/"
- files: ["aura_scanner.ogg"]
license: "CC0-1.0"
copyright: 'Breviceps of Freesound.org'
source: "https://freesound.org/people/Breviceps/sounds/493162/"

Binary file not shown.

View File

@@ -5,3 +5,5 @@ cp14-magic-energy-crystal-slot-name = Energy crystal
cp14-magic-energy-no-crystal = No energy crystal!
cp14-magic-energy-insufficient = Not enough energy!
cp14-magic-energy-insufficient-unsafe = Crystal cracks from lack of energy!
cp14-magic-scanner = Polarity of ley lines: {$power}

View File

@@ -5,3 +5,5 @@ cp14-magic-energy-crystal-slot-name = Энергокристалл
cp14-magic-energy-no-crystal = Отсутствует энергокристалл!
cp14-magic-energy-insufficient = Не достаточно энергии!
cp14-magic-energy-insufficient-unsafe = Кристалл трескается от нехватки энергии!
cp14-magic-scanner = Полярность лей-линий: {$power}

View File

@@ -4,7 +4,7 @@
categories: [ HideSpawnMenu ]
components:
- type: TimedDespawn
lifetime: 2.0
lifetime: 7.0
- type: Sprite
drawdepth: Effects
layers:

View File

@@ -42,6 +42,19 @@
- type: Clothing
sprite: _CP14/Clothing/Cloak/blacksmith_apron.rsi
- type: entity
parent:
- CP14ClothingCloakBase
- ClothingSlotBase
id: CP14ClothingCloakMaidArpon
name: maid's apron
description: Cleanliness, orderliness and obedience are the main traits of a good maid.
components:
- type: Sprite
sprite: _CP14/Clothing/Cloak/maid_apron.rsi
- type: Clothing
sprite: _CP14/Clothing/Cloak/maid_apron.rsi
- type: entity
parent: CP14ClothingCloakBase
id: CP14ClothingCloakFurcapeBlack

View File

@@ -53,4 +53,15 @@
- type: Sprite
sprite: _CP14/Clothing/Pants/loincloth.rsi
- type: Clothing
sprite: _CP14/Clothing/Pants/loincloth.rsi
sprite: _CP14/Clothing/Pants/loincloth.rsi
- type: entity
parent: CP14ClothingPantsBase
id: CP14ClothingDressBlack
name: black dress
description: A roomy, feminine skirt
components:
- type: Sprite
sprite: _CP14/Clothing/Pants/Dress/black.rsi
- type: Clothing
sprite: _CP14/Clothing/Pants/Dress/black.rsi

View File

@@ -86,4 +86,4 @@
- type: Sprite
sprite: _CP14/Clothing/Shirt/steampunk.rsi
- type: Clothing
sprite: _CP14/Clothing/Shirt/steampunk.rsi
sprite: _CP14/Clothing/Shirt/steampunk.rsi

View File

@@ -20,4 +20,30 @@
available:
- random:
dirt1: ""
dirt2: ""
dirt2: ""
- type: entity
id: CP14MagicBeam1
noSpawn: true
components:
- type: Sprite
sprite: /Textures/_CP14/Effects/Beams/magic.rsi
drawdepth: Effects
layers:
- state: magic1
shader: unshaded
- type: Physics
canCollide: false
- type: PointLight
enabled: true
color: "#4080FF"
radius: 3.5
softness: 1
autoRot: true
castShadows: false
- type: Beam
- type: TimedDespawn
lifetime: 3
- type: Tag
tags:
- HideContextMenu

View File

@@ -0,0 +1,13 @@
- type: entity
id: CP14AuraNodeBase
parent: MarkerBase
name: aura node
description: An energy node that affects the elemental energy in the surrounding space.
components:
- type: Sprite
layers:
- state: green
- sprite: Mobs/Animals/mouse.rsi
state: icon-2 #TODO lol
- type: CP14AuraNode
- type: CP14RandomAuraNode

View File

@@ -2,7 +2,7 @@
id: CP14EnergyCrystalBase
parent: BaseItem
abstract: true
description: Processed quartz crystals are excellent repositories of magical energy. And special connectors allow you to conveniently insert them into magical devices, turning them into energy batteries.
description: Shards of one of the Khyber dragon, used to bind and control elemental energy.
components:
- type: CP14MagicEnergyCrystal
- type: Item
@@ -11,13 +11,11 @@
sprite: _CP14/Objects/Specific/Thaumaturgy/crystal.rsi
- type: CP14MagicEnergyContainer
- type: CP14MagicEnergyExaminable
- type: CP14MagicEnergyPointLightController
- type: entity
id: CP14EnergyCrystalSmall
parent: CP14EnergyCrystalBase
name: small energy crystal
name: small Khyber shard
suffix: Full
components:
- type: Sprite
@@ -48,7 +46,7 @@
- type: entity
id: CP14EnergyCrystalMedium
parent: CP14EnergyCrystalBase
name: energy crystal
name: Khyber shard
suffix: Full
components:
- type: PointLight

View File

@@ -0,0 +1,19 @@
- type: entity
id: CP14AuraScanner
parent: BaseItem
name: aura scanner
description: Scans the polarity of the elemental energy flows in this place.
components:
- type: Sprite
sprite: _CP14/Objects/Specific/Thaumaturgy/aura_scanner.rsi
state: icon
- type: Item
sprite: _CP14/Objects/Specific/Thaumaturgy/aura_scanner.rsi
- type: CP14AuraScanner
- type: EmitSoundOnUse
sound:
path: /Audio/_CP14/Effects/aura_scanner.ogg
params:
variation: 0.03
- type: UseDelay
delay: 4

View File

@@ -0,0 +1,14 @@
- type: hitscan
id: CP14Magic
damage:
types:
Heat: 0
muzzleFlash:
sprite: _CP14/Effects/Beams/magic.rsi
state: muzzle_magic
travelFlash:
sprite: _CP14/Effects/Beams/magic.rsi
state: magic
impactFlash:
sprite: _CP14/Effects/Beams/magic.rsi
state: impact_magic

View File

@@ -31,7 +31,7 @@
hard: false
shape:
!type:PhysShapeAabb
bounds: "-0.35,-0.4,0.35,0.4"
bounds: "-0.35,-0.35,0.35,0.35"
density: 1000
layer:
- WallLayer
@@ -69,10 +69,6 @@
# CP14WoodLog:
# min: 1
# max: 3
- type: Material
- type: PhysicalComposition # точно ли это нужно?
materialComposition:
CP14WoodenPlanks: 100
- type: SpeedModifierContacts
walkSpeedModifier: 0.5
sprintSpeedModifier: 0.5

View File

@@ -1,6 +1,8 @@
- type: entity
id: CP14AlchemyNormalizer
parent: BaseStructureDynamic
parent:
- BaseStructureDynamic
- CP14BaseCrystalSlot
name: solution normalizer
description: An alchemical device that removes fine precipitates from solutions, and stabilizes it for further work
placement:
@@ -79,25 +81,4 @@
fillBaseName: liq-
- type: CP14MagicEnergyDraw
energy: -0.2
delay: 1
- type: CP14MagicEnergyCrystalSlot
slotId: crystal_slot
- type: ContainerContainer
containers:
crystal_slot: !type:ContainerSlot
- type: ItemSlots
slots:
crystal_slot:
insertSound:
path: /Audio/_CP14/Items/crystal_insert.ogg
params:
variation: 0.05
ejectSound:
path: /Audio/_CP14/Items/crystal_eject.ogg
params:
variation: 0.05
ejectOnInteract: true
name: cp14-magic-energy-crystal-slot-name
whitelist:
components:
- CP14MagicEnergyCrystal
delay: 1

View File

@@ -0,0 +1,27 @@
- type: entity
id: CP14ElementalReactor
name: elemental reactor
description: A work of art created by the dwarves of Zilagro and House Lyrandar, controlling the fire elemental and allowing it to produce vast amounts of energy.
parent:
- BaseStructure
components:
- type: Sprite
sprite: _CP14/Structures/Specific/Thaumaturgy/elemental_reactor.rsi #TODO resprite
state: base
drawdepth: Mobs
- type: Fixtures
fixtures:
fix1:
shape:
!type:PhysShapeAabb
bounds: "-0.55,-0.85,0.55,0.85"
density: 1000
layer:
- WallLayer
- type: Physics
bodyType: Static
- type: CP14MagicEnergyContainer
- type: CP14MagicEnergyExaminable
- type: CP14MagicEnergyDraw
energy: 5
delay: 1

View File

@@ -0,0 +1,25 @@
- type: entity
id: CP14BaseCrystalSlot #TODO переструктуризовать объекты
abstract: true
components:
- type: CP14MagicEnergyCrystalSlot
slotId: crystal_slot
- type: ContainerContainer
containers:
crystal_slot: !type:ContainerSlot
- type: ItemSlots
slots:
crystal_slot:
insertSound:
path: /Audio/_CP14/Items/crystal_insert.ogg
params:
variation: 0.05
ejectSound:
path: /Audio/_CP14/Items/crystal_eject.ogg
params:
variation: 0.05
ejectOnInteract: true
name: cp14-magic-energy-crystal-slot-name
whitelist:
components:
- CP14MagicEnergyCrystal

View File

@@ -7,6 +7,15 @@
id: CP14ClothingCloakBlacksmithArpon
equipment:
cloak: CP14ClothingCloakBlacksmithArpon
- type: loadout
id: CP14ClothingCloakMaidArpon
equipment: CP14ClothingCloakMaidArpon
- type: startingGear
id: CP14ClothingCloakMaidArpon
equipment:
cloak: CP14ClothingCloakMaidArpon
- type: loadout
@@ -90,6 +99,7 @@
equipment:
head: CP14ClothingHeadMetalHeadband
- type: loadout
id: CP14ClothingHeadTriangularHat
equipment: CP14ClothingHeadTriangularHat
@@ -99,6 +109,7 @@
equipment:
head: CP14ClothingHeadTriangularHat
- type: loadout
id: CP14ClothingHeadTriangularHatGolden
equipment: CP14ClothingHeadTriangularHatGolden
@@ -108,6 +119,7 @@
equipment:
head: CP14ClothingHeadTriangularHatGolden
- type: loadout
id: CP14ClothingHeadRedBeret
equipment: CP14ClothingHeadRedBeret
@@ -117,6 +129,7 @@
equipment:
head: CP14ClothingHeadRedBeret
- type: loadout
id: CP14ClothingHeadPurpleBeret
equipment: CP14ClothingHeadPurpleBeret
@@ -126,6 +139,7 @@
equipment:
head: CP14ClothingHeadPurpleBeret
- type: loadout
id: CP14ClothingHeadYellowBeret
equipment: CP14ClothingHeadYellowBeret
@@ -204,6 +218,16 @@
id: CP14ClothingPantsLoincloth
equipment:
pants: CP14ClothingPantsLoincloth
- type: loadout
id: CP14ClothingDressBlack
equipment: CP14ClothingDressBlack
- type: startingGear
id: CP14ClothingDressBlack
equipment:
pants: CP14ClothingDressBlack
# Shirt
@@ -216,7 +240,6 @@
equipment:
shirt: CP14ClothingShirtCottonBlue
- type: loadout
id: CP14ClothingShirtCottonBlack
equipment: CP14ClothingShirtCottonBlack
@@ -226,7 +249,6 @@
equipment:
shirt: CP14ClothingShirtCottonBlack
- type: loadout
id: CP14ClothingShirtCottonPurple
equipment: CP14ClothingShirtCottonPurple

View File

@@ -10,6 +10,7 @@
- CP14ClothingCloakBlacksmithArpon
- CP14ClothingCloakFurcapeBlack
- CP14ClothingCloakFurcapeBlue
- CP14ClothingCloakMaidArpon
- type: loadoutGroup
id: CP14BasicEyes
@@ -25,6 +26,7 @@
minLimit: 0
loadouts:
- CP14Girdles
- type: loadoutGroup
id: CP14BasicMask
name: cp14-loadout-basic-mask
@@ -54,6 +56,7 @@
- CP14ClothingPantsTrouserDarkBlue
- CP14ClothingPantsAristocratic
- CP14ClothingPantsLoincloth
- CP14ClothingDressBlack
- type: loadoutGroup
id: CP14BasicShirt
@@ -86,4 +89,4 @@
id: CP14CaptainCloak
name: cp14-loadout-captain-cloak
loadouts:
- CP14ClothingCloakCaptainJacket
- CP14ClothingCloakCaptainJacket

Binary file not shown.

After

Width:  |  Height:  |  Size: 334 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 258 B

View File

@@ -0,0 +1,18 @@
{
"version": 1,
"license": "All rights reserved for the CrystallPunk14 project only",
"copyright": "CrystallPunk14, by TheShuEd",
"size": {
"x": 32,
"y": 32
},
"states": [
{
"name": "icon"
},
{
"name": "equipped-CLOAK",
"directions": 4
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 492 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 353 B

View File

@@ -0,0 +1,18 @@
{
"version": 1,
"license": "All rights reserved for the CrystallPunk14 project only",
"copyright": "CrystallPunk14, by TheShuEd",
"size": {
"x": 32,
"y": 32
},
"states": [
{
"name": "icon"
},
{
"name": "equipped-PANTS",
"directions": 4
}
]
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 876 B

After

Width:  |  Height:  |  Size: 837 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 441 B

After

Width:  |  Height:  |  Size: 455 B

View File

@@ -1,7 +1,7 @@
{
"version": 1,
"license": "All rights reserved for the CrystallPunk14 project only",
"copyright": "CrystallPunk14, by Jaraten and TheShuEd",
"copyright": "CrystallPunk14, by TheShuEd",
"size": {
"x": 32,
"y": 32

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

View File

@@ -0,0 +1,70 @@
{
"version": 1,
"license": "All rights reserved for the CrystallPunk14 project only",
"copyright": "Created by TheShuEd (Github) for CrystallPunk 14",
"size": {
"x": 32,
"y": 32
},
"states": [
{
"name": "magic1",
"delays": [
[
0.1,
0.1,
0.1,
0.1
]
]
},
{
"name": "magic",
"delays": [
[
0.1,
0.1,
0.1,
0.1,
0.1,
0.1,
0.1,
0.1,
0.1
]
]
},
{
"name": "impact_magic",
"delays": [
[
0.1,
0.1,
0.1,
0.1,
0.1,
0.1,
0.1,
0.1,
0.1
]
]
},
{
"name": "muzzle_magic",
"delays": [
[
0.1,
0.1,
0.1,
0.1,
0.1,
0.1,
0.1,
0.1,
0.1
]
]
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 443 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 408 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 426 B

View File

@@ -0,0 +1,22 @@
{
"version": 1,
"license": "All rights reserved for the CrystallPunk14 project only",
"copyright": "Created by Jaraten (discord/github) for CrystallPunk 14",
"size": {
"x": 32,
"y": 32
},
"states": [
{
"name": "icon"
},
{
"name": "inhand-right",
"directions": 4
},
{
"name": "inhand-left",
"directions": 4
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 819 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 709 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 729 B

View File

@@ -0,0 +1,22 @@
{
"version": 1,
"license": "All rights reserved for the CrystallPunk14 project only",
"copyright": "Created by Jaraten (discord/github) for CrystallPunk 14",
"size": {
"x": 32,
"y": 32
},
"states": [
{
"name": "icon"
},
{
"name": "inhand-right",
"directions": 4
},
{
"name": "inhand-left",
"directions": 4
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 298 B

View File

@@ -0,0 +1,17 @@
{
"version": 1,
"license": "All rights reserved for the CrystallPunk14 project only",
"copyright": "Created by Jaraten (discord/github) for CrystallPunk 14",
"size": {
"x": 32,
"y": 48
},
"states": [
{
"name": "spreader"
},
{
"name": "crystal"
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 682 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@@ -0,0 +1,14 @@
{
"version": 1,
"license": "All rights reserved for the CrystallPunk14 project only",
"copyright": "Created by TheShued (github) for CrystallPunk 14",
"size": {
"x": 48,
"y": 64
},
"states": [
{
"name": "base"
}
]
}