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>
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
namespace Content.Server._CP14.MagicEnergy.Components;
|
||||
|
||||
[RegisterComponent, Access(typeof(CP14MagicEnergySystem))]
|
||||
public sealed partial class CP14AuraScannerComponent : Component
|
||||
{
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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)
|
||||
|
||||
@@ -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/"
|
||||
BIN
Resources/Audio/_CP14/Effects/aura_scanner.ogg
Normal 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}
|
||||
|
||||
@@ -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}
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
categories: [ HideSpawnMenu ]
|
||||
components:
|
||||
- type: TimedDespawn
|
||||
lifetime: 2.0
|
||||
lifetime: 7.0
|
||||
- type: Sprite
|
||||
drawdepth: Effects
|
||||
layers:
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
13
Resources/Prototypes/_CP14/Entities/Markers/energyNodes.yml
Normal 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
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
After Width: | Height: | Size: 334 B |
BIN
Resources/Textures/_CP14/Clothing/Cloak/maid_apron.rsi/icon.png
Normal file
|
After Width: | Height: | Size: 258 B |
@@ -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
|
||||
}
|
||||
]
|
||||
}
|
||||
|
After Width: | Height: | Size: 492 B |
BIN
Resources/Textures/_CP14/Clothing/Pants/Dress/black.rsi/icon.png
Normal file
|
After Width: | Height: | Size: 353 B |
@@ -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
|
||||
}
|
||||
]
|
||||
}
|
||||
|
Before Width: | Height: | Size: 876 B After Width: | Height: | Size: 837 B |
|
Before Width: | Height: | Size: 441 B After Width: | Height: | Size: 455 B |
@@ -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
|
||||
|
||||
|
After Width: | Height: | Size: 8.3 KiB |
BIN
Resources/Textures/_CP14/Effects/Beams/magic.rsi/magic.png
Normal file
|
After Width: | Height: | Size: 5.7 KiB |
BIN
Resources/Textures/_CP14/Effects/Beams/magic.rsi/magic1.png
Normal file
|
After Width: | Height: | Size: 4.4 KiB |
70
Resources/Textures/_CP14/Effects/Beams/magic.rsi/meta.json
Normal 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
|
||||
]
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
After Width: | Height: | Size: 7.5 KiB |
|
After Width: | Height: | Size: 443 B |
|
After Width: | Height: | Size: 408 B |
|
After Width: | Height: | Size: 426 B |
@@ -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
|
||||
}
|
||||
]
|
||||
}
|
||||
|
After Width: | Height: | Size: 819 B |
|
After Width: | Height: | Size: 709 B |
|
After Width: | Height: | Size: 729 B |
@@ -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
|
||||
}
|
||||
]
|
||||
}
|
||||
|
After Width: | Height: | Size: 298 B |
@@ -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"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
After Width: | Height: | Size: 682 B |
|
After Width: | Height: | Size: 1.3 KiB |
@@ -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"
|
||||
}
|
||||
]
|
||||
}
|
||||