From 4452ae7eff3ab7b84752b7faae57229ad0ed08fc Mon Sep 17 00:00:00 2001 From: Inconnu <177014427+Inconnu1337@users.noreply.github.com> Date: Fri, 14 Aug 2026 06:36:45 +0300 Subject: [PATCH 01/12] part 1 --- .../ADT/AshWalker/ADTIgniteSystem.cs | 70 +++++++++++++++++++ .../ADT/AshWalker/ADTAshWalkerEvents.cs | 7 ++ .../Components/ADTAshWalkerComponent.cs | 13 ++++ .../Components/ADTIgniteComponent.cs | 17 +++++ .../Components/ADTLavalandSpeedComponent.cs | 16 +++++ .../AshWalker/Systems/ADTAshWalkerSystem.cs | 29 ++++++++ .../Systems/ADTLavalandSpeedSystem.cs | 51 ++++++++++++++ .../ADT/Lavaland/ADTLavalandMapComponent.cs | 8 +++ .../Prototypes/ADT/Damage/modifier_sets.yml | 10 ++- Resources/Prototypes/ADT/ai_factions.yml | 3 + Resources/Prototypes/ai_factions.yml | 2 + 11 files changed, 225 insertions(+), 1 deletion(-) create mode 100644 Content.Server/ADT/AshWalker/ADTIgniteSystem.cs create mode 100644 Content.Shared/ADT/AshWalker/ADTAshWalkerEvents.cs create mode 100644 Content.Shared/ADT/AshWalker/Components/ADTAshWalkerComponent.cs create mode 100644 Content.Shared/ADT/AshWalker/Components/ADTIgniteComponent.cs create mode 100644 Content.Shared/ADT/AshWalker/Components/ADTLavalandSpeedComponent.cs create mode 100644 Content.Shared/ADT/AshWalker/Systems/ADTAshWalkerSystem.cs create mode 100644 Content.Shared/ADT/AshWalker/Systems/ADTLavalandSpeedSystem.cs create mode 100644 Content.Shared/ADT/Lavaland/ADTLavalandMapComponent.cs diff --git a/Content.Server/ADT/AshWalker/ADTIgniteSystem.cs b/Content.Server/ADT/AshWalker/ADTIgniteSystem.cs new file mode 100644 index 00000000000..f76d7ce392d --- /dev/null +++ b/Content.Server/ADT/AshWalker/ADTIgniteSystem.cs @@ -0,0 +1,70 @@ +using Content.Shared.ADT.AshWalker; +using Content.Shared.ADT.AshWalker.Components; +using Content.Shared.Actions; +using Content.Shared.Hands.EntitySystems; +using Content.Shared.IgnitionSource.Components; +using Content.Shared.IgnitionSource.EntitySystems; +using Content.Shared.Inventory; +using Content.Shared.Nutrition; +using Content.Shared.Popups; + +namespace Content.Server.ADT.AshWalker; + +public sealed class ADTIgniteSystem : EntitySystem +{ + [Dependency] private readonly MatchstickSystem _matchstick = default!; + [Dependency] private readonly SharedActionsSystem _actions = default!; + [Dependency] private readonly SharedHandsSystem _hands = default!; + [Dependency] private readonly SharedPopupSystem _popup = default!; + + private const SlotFlags MouthSlots = SlotFlags.HEAD | SlotFlags.MASK; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnMapInit); + SubscribeLocalEvent(OnShutdown); + SubscribeLocalEvent(OnIgnite); + } + + private void OnMapInit(Entity ent, ref MapInitEvent args) + { + _actions.AddAction(ent, ref ent.Comp.ActionEntity, ent.Comp.ActionId); + } + + private void OnShutdown(Entity ent, ref ComponentShutdown args) + { + _actions.RemoveAction(ent.Comp.ActionEntity); + } + + private void OnIgnite(Entity ent, ADTIgniteActionEvent args) + { + if (args.Handled) + return; + + var attempt = new IngestionAttemptEvent(MouthSlots); + RaiseLocalEvent(ent.Owner, ref attempt); + + if (attempt.Cancelled) + { + _popup.PopupEntity(Loc.GetString("adt-ash-walker-ignite-maw-covered"), ent, ent); + return; + } + + var ember = SpawnAtPosition(ent.Comp.Ember, Transform(ent).Coordinates); + + if (TryComp(ember, out var matchstick)) + _matchstick.TryIgnite((ember, matchstick), ent); + + if (!_hands.TryPickupAnyHand(ent, ember)) + { + QueueDel(ember); + _popup.PopupEntity(Loc.GetString("adt-ash-walker-ignite-hands-full"), ent, ent); + return; + } + + _popup.PopupEntity(Loc.GetString("adt-ash-walker-ignite-success"), ent, ent); + args.Handled = true; + } +} diff --git a/Content.Shared/ADT/AshWalker/ADTAshWalkerEvents.cs b/Content.Shared/ADT/AshWalker/ADTAshWalkerEvents.cs new file mode 100644 index 00000000000..7b1224ddf43 --- /dev/null +++ b/Content.Shared/ADT/AshWalker/ADTAshWalkerEvents.cs @@ -0,0 +1,7 @@ +using Content.Shared.Actions; + +namespace Content.Shared.ADT.AshWalker; + +public sealed partial class ADTIgniteActionEvent : InstantActionEvent +{ +} diff --git a/Content.Shared/ADT/AshWalker/Components/ADTAshWalkerComponent.cs b/Content.Shared/ADT/AshWalker/Components/ADTAshWalkerComponent.cs new file mode 100644 index 00000000000..1ad654f226e --- /dev/null +++ b/Content.Shared/ADT/AshWalker/Components/ADTAshWalkerComponent.cs @@ -0,0 +1,13 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.ADT.AshWalker.Components; + +[RegisterComponent, NetworkedComponent] +public sealed partial class ADTAshWalkerComponent : Component +{ + [DataField] + public bool Shaman; + + [DataField] + public bool BlockGuns = true; +} diff --git a/Content.Shared/ADT/AshWalker/Components/ADTIgniteComponent.cs b/Content.Shared/ADT/AshWalker/Components/ADTIgniteComponent.cs new file mode 100644 index 00000000000..706a5d44168 --- /dev/null +++ b/Content.Shared/ADT/AshWalker/Components/ADTIgniteComponent.cs @@ -0,0 +1,17 @@ +using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; + +namespace Content.Shared.ADT.AshWalker.Components; + +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] +public sealed partial class ADTIgniteComponent : Component +{ + [DataField, AutoNetworkedField] + public EntProtoId Ember = "ADTAshWalkerEmber"; + + [DataField] + public EntProtoId ActionId = "ADTActionIgnite"; + + [DataField, AutoNetworkedField] + public EntityUid? ActionEntity; +} diff --git a/Content.Shared/ADT/AshWalker/Components/ADTLavalandSpeedComponent.cs b/Content.Shared/ADT/AshWalker/Components/ADTLavalandSpeedComponent.cs new file mode 100644 index 00000000000..ed15465bcf4 --- /dev/null +++ b/Content.Shared/ADT/AshWalker/Components/ADTLavalandSpeedComponent.cs @@ -0,0 +1,16 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.ADT.AshWalker.Components; + +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] +public sealed partial class ADTLavalandSpeedComponent : Component +{ + [DataField, AutoNetworkedField] + public float WalkModifier = 1.15f; + + [DataField, AutoNetworkedField] + public float SprintModifier = 1.15f; + + [DataField, AutoNetworkedField] + public bool Everywhere; +} diff --git a/Content.Shared/ADT/AshWalker/Systems/ADTAshWalkerSystem.cs b/Content.Shared/ADT/AshWalker/Systems/ADTAshWalkerSystem.cs new file mode 100644 index 00000000000..f7d1191bf2a --- /dev/null +++ b/Content.Shared/ADT/AshWalker/Systems/ADTAshWalkerSystem.cs @@ -0,0 +1,29 @@ +using Content.Shared.ADT.AshWalker.Components; +using Content.Shared.Popups; +using Content.Shared.Weapons.Ranged.Events; + +namespace Content.Shared.ADT.AshWalker.Systems; + +public sealed class ADTAshWalkerSystem : EntitySystem +{ + [Dependency] private readonly SharedPopupSystem _popup = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnShotAttempted); + } + + private void OnShotAttempted(Entity ent, ref ShotAttemptedEvent args) + { + if (!ent.Comp.BlockGuns) + return; + + if (args.Cancelled) + return; + + args.Cancel(); + _popup.PopupClient(Loc.GetString("adt-ash-walker-no-guns"), ent, ent); + } +} diff --git a/Content.Shared/ADT/AshWalker/Systems/ADTLavalandSpeedSystem.cs b/Content.Shared/ADT/AshWalker/Systems/ADTLavalandSpeedSystem.cs new file mode 100644 index 00000000000..d14e438f792 --- /dev/null +++ b/Content.Shared/ADT/AshWalker/Systems/ADTLavalandSpeedSystem.cs @@ -0,0 +1,51 @@ +using Content.Shared.ADT.AshWalker.Components; +using Content.Shared.ADT.Lavaland; +using Content.Shared.Movement.Systems; + +namespace Content.Shared.ADT.AshWalker.Systems; + +public sealed class ADTLavalandSpeedSystem : EntitySystem +{ + [Dependency] private readonly MovementSpeedModifierSystem _movement = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnRefreshSpeed); + SubscribeLocalEvent(OnMapInit); + SubscribeLocalEvent(OnParentChanged); + } + + private void OnRefreshSpeed(Entity ent, RefreshMovementSpeedModifiersEvent args) + { + if (!IsBonusActive(ent)) + return; + + args.ModifySpeed(ent.Comp.WalkModifier, ent.Comp.SprintModifier); + } + + private void OnMapInit(Entity ent, ref MapInitEvent args) + { + _movement.RefreshMovementSpeedModifiers(ent); + } + + private void OnParentChanged(Entity ent, ref EntParentChangedMessage args) + { + if (args.OldMapId == Transform(ent).MapUid) + return; + + _movement.RefreshMovementSpeedModifiers(ent); + } + + private bool IsBonusActive(Entity ent) + { + if (ent.Comp.Everywhere) + return true; + + if (Transform(ent).MapUid is not { } map) + return false; + + return HasComp(map); + } +} diff --git a/Content.Shared/ADT/Lavaland/ADTLavalandMapComponent.cs b/Content.Shared/ADT/Lavaland/ADTLavalandMapComponent.cs new file mode 100644 index 00000000000..10c047c0bac --- /dev/null +++ b/Content.Shared/ADT/Lavaland/ADTLavalandMapComponent.cs @@ -0,0 +1,8 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.ADT.Lavaland; + +[RegisterComponent, NetworkedComponent] +public sealed partial class ADTLavalandMapComponent : Component +{ +} diff --git a/Resources/Prototypes/ADT/Damage/modifier_sets.yml b/Resources/Prototypes/ADT/Damage/modifier_sets.yml index 964ff91d553..816c258c9a1 100644 --- a/Resources/Prototypes/ADT/Damage/modifier_sets.yml +++ b/Resources/Prototypes/ADT/Damage/modifier_sets.yml @@ -351,4 +351,12 @@ Asphyxiation: 0.5 Bloodloss: 0.5 Cellular: 0.5 - Caustic: 0.5 \ No newline at end of file + Caustic: 0.5 + +- type: damageModifierSet + id: ADTAshWalkerScale + coefficients: + Blunt: 0.9 + Slash: 0.9 + Piercing: 0.9 + Cold: 1.3 diff --git a/Resources/Prototypes/ADT/ai_factions.yml b/Resources/Prototypes/ADT/ai_factions.yml index 50a193109f0..4f067626716 100644 --- a/Resources/Prototypes/ADT/ai_factions.yml +++ b/Resources/Prototypes/ADT/ai_factions.yml @@ -46,3 +46,6 @@ - Revolutionary - Heretic # goob edit - heretics - Ursus + +- type: npcFaction + id: ADTAshWalker diff --git a/Resources/Prototypes/ai_factions.yml b/Resources/Prototypes/ai_factions.yml index 56ef700af5d..67ae40bc658 100644 --- a/Resources/Prototypes/ai_factions.yml +++ b/Resources/Prototypes/ai_factions.yml @@ -67,6 +67,7 @@ - Xeno - Xenoborg - ADTSpaceMobs # ADT-tweak + - ADTAshWalker # ADT-tweak - type: npcFaction id: SimpleNeutral @@ -150,6 +151,7 @@ - Heretic # ADT-tweak - Ursus # ADT-tweak - ADTSpaceMobs # ADT-tweak + - ADTAshWalker # ADT-tweak - Wizard - Xenoborg From debebfdc4419d9c1606d06a7740045c0ee7d937b Mon Sep 17 00:00:00 2001 From: Inconnu <177014427+Inconnu1337@users.noreply.github.com> Date: Fri, 14 Aug 2026 21:48:26 +0300 Subject: [PATCH 02/12] ashwalkers part 2 --- .../ADTNecropolisCompassBoundUserInterface.cs | 37 +++++ .../UI/ADTNecropolisCompassWindow.xaml | 12 ++ .../UI/ADTNecropolisCompassWindow.xaml.cs | 75 +++++++++ .../ADT/AshWalker/ADTAshWalkerNestSystem.cs | 149 ++++++++++++++++++ .../ADT/AshWalker/ADTHealTouchSystem.cs | 76 +++++++++ .../ADT/AshWalker/ADTIgniteSystem.cs | 27 ++-- .../AshWalker/ADTNecropolisCompassSystem.cs | 144 +++++++++++++++++ .../ADT/AshWalker/ADTAshWalkerEvents.cs | 11 ++ .../ADT/AshWalker/ADTNecropolisCompassUi.cs | 47 ++++++ .../Components/ADTAshWalkerEggComponent.cs | 10 ++ .../Components/ADTAshWalkerNestComponent.cs | 45 ++++++ .../Components/ADTHealTouchComponent.cs | 32 ++++ .../Components/ADTIgniteComponent.cs | 2 +- .../ADTNecropolisCompassComponent.cs | 17 ++ .../Components/ADTPointOfInterestComponent.cs | 11 ++ .../Components/ADTSmallBlazeComponent.cs | 8 + .../AshWalker/Systems/ADTAshWalkerSystem.cs | 2 +- .../Systems/ADTLavalandSpeedSystem.cs | 10 +- 18 files changed, 698 insertions(+), 17 deletions(-) create mode 100644 Content.Client/ADT/AshWalker/UI/ADTNecropolisCompassBoundUserInterface.cs create mode 100644 Content.Client/ADT/AshWalker/UI/ADTNecropolisCompassWindow.xaml create mode 100644 Content.Client/ADT/AshWalker/UI/ADTNecropolisCompassWindow.xaml.cs create mode 100644 Content.Server/ADT/AshWalker/ADTAshWalkerNestSystem.cs create mode 100644 Content.Server/ADT/AshWalker/ADTHealTouchSystem.cs create mode 100644 Content.Server/ADT/AshWalker/ADTNecropolisCompassSystem.cs create mode 100644 Content.Shared/ADT/AshWalker/ADTNecropolisCompassUi.cs create mode 100644 Content.Shared/ADT/AshWalker/Components/ADTAshWalkerEggComponent.cs create mode 100644 Content.Shared/ADT/AshWalker/Components/ADTAshWalkerNestComponent.cs create mode 100644 Content.Shared/ADT/AshWalker/Components/ADTHealTouchComponent.cs create mode 100644 Content.Shared/ADT/AshWalker/Components/ADTNecropolisCompassComponent.cs create mode 100644 Content.Shared/ADT/AshWalker/Components/ADTPointOfInterestComponent.cs create mode 100644 Content.Shared/ADT/AshWalker/Components/ADTSmallBlazeComponent.cs diff --git a/Content.Client/ADT/AshWalker/UI/ADTNecropolisCompassBoundUserInterface.cs b/Content.Client/ADT/AshWalker/UI/ADTNecropolisCompassBoundUserInterface.cs new file mode 100644 index 00000000000..c5cf33ee901 --- /dev/null +++ b/Content.Client/ADT/AshWalker/UI/ADTNecropolisCompassBoundUserInterface.cs @@ -0,0 +1,37 @@ +using Content.Shared.ADT.AshWalker; +using Robust.Client.UserInterface; + +namespace Content.Client.ADT.AshWalker.UI; + +public sealed class ADTNecropolisCompassBoundUserInterface : BoundUserInterface +{ + private ADTNecropolisCompassWindow? _window; + + public ADTNecropolisCompassBoundUserInterface(EntityUid owner, Enum uiKey) : base(owner, uiKey) + { + } + + protected override void Open() + { + base.Open(); + + _window = this.CreateWindow(); + _window.OnPointSelected += OnPointSelected; + } + + protected override void UpdateState(BoundUserInterfaceState state) + { + base.UpdateState(state); + + if (_window == null || state is not ADTNecropolisCompassBuiState compassState) + return; + + _window.SetPoints(compassState.Points); + } + + private void OnPointSelected(NetEntity point) + { + SendMessage(new ADTNecropolisCompassSelectMessage(point)); + Close(); + } +} diff --git a/Content.Client/ADT/AshWalker/UI/ADTNecropolisCompassWindow.xaml b/Content.Client/ADT/AshWalker/UI/ADTNecropolisCompassWindow.xaml new file mode 100644 index 00000000000..9593e92b4c6 --- /dev/null +++ b/Content.Client/ADT/AshWalker/UI/ADTNecropolisCompassWindow.xaml @@ -0,0 +1,12 @@ + + + + diff --git a/Content.Client/ADT/AshWalker/UI/ADTNecropolisCompassWindow.xaml.cs b/Content.Client/ADT/AshWalker/UI/ADTNecropolisCompassWindow.xaml.cs new file mode 100644 index 00000000000..82670032156 --- /dev/null +++ b/Content.Client/ADT/AshWalker/UI/ADTNecropolisCompassWindow.xaml.cs @@ -0,0 +1,75 @@ +using System.Numerics; +using Content.Client.UserInterface.Controls; +using Content.Shared.ADT.AshWalker; +using Robust.Client.AutoGenerated; +using Robust.Client.UserInterface; +using Robust.Client.UserInterface.Controls; +using Robust.Client.UserInterface.XAML; + +namespace Content.Client.ADT.AshWalker.UI; + +[GenerateTypedNameReferences] +public sealed partial class ADTNecropolisCompassWindow : FancyWindow +{ + public event Action? OnPointSelected; + + public ADTNecropolisCompassWindow() + { + RobustXamlLoader.Load(this); + } + + public void SetPoints(List points) + { + PointList.RemoveAllChildren(); + + foreach (var point in points) + { + PointList.AddChild(BuildRow(point)); + } + } + + private Control BuildRow(ADTPointOfInterestEntry point) + { + var button = new Button + { + HorizontalExpand = true, + Margin = new Thickness(0, 0, 0, 4), + MinHeight = 40, + }; + + var row = new BoxContainer + { + Orientation = BoxContainer.LayoutOrientation.Horizontal, + HorizontalExpand = true, + VerticalAlignment = VAlignment.Center, + // Let the click through to the button underneath. + MouseFilter = MouseFilterMode.Ignore, + }; + + if (point.Proto is { } proto) + { + var view = new EntityPrototypeView + { + SetSize = new Vector2(32, 32), + Stretch = SpriteView.StretchMode.Fill, + VerticalAlignment = VAlignment.Center, + Margin = new Thickness(0, 0, 6, 0), + }; + view.SetPrototype(proto); + row.AddChild(view); + } + + row.AddChild(new Label + { + Text = point.Name, + VerticalAlignment = VAlignment.Center, + }); + + button.AddChild(row); + + var target = point.Entity; + button.OnPressed += _ => OnPointSelected?.Invoke(target); + + return button; + } +} diff --git a/Content.Server/ADT/AshWalker/ADTAshWalkerNestSystem.cs b/Content.Server/ADT/AshWalker/ADTAshWalkerNestSystem.cs new file mode 100644 index 00000000000..c5654c3aa3e --- /dev/null +++ b/Content.Server/ADT/AshWalker/ADTAshWalkerNestSystem.cs @@ -0,0 +1,149 @@ +using Content.Shared.ADT.AshWalker.Components; +using Content.Shared.ADT.Salvage.Components; +using Content.Shared.Damage; +using Content.Shared.Damage.Components; +using Content.Shared.Damage.Systems; +using Content.Shared.Gibbing; +using Content.Shared.Mobs.Components; +using Content.Shared.Mobs.Systems; +using Content.Shared.Popups; +using Robust.Shared.Audio; +using Robust.Shared.Audio.Systems; +using Robust.Shared.Random; +using Robust.Shared.Timing; + +namespace Content.Server.ADT.AshWalker; + +public sealed class ADTAshWalkerNestSystem : EntitySystem +{ + [Dependency] private readonly DamageableSystem _damageable = default!; + [Dependency] private readonly EntityLookupSystem _lookup = default!; + [Dependency] private readonly GibbingSystem _gibbing = default!; + [Dependency] private readonly IGameTiming _timing = default!; + [Dependency] private readonly IRobustRandom _random = default!; + [Dependency] private readonly MobStateSystem _mobState = default!; + [Dependency] private readonly SharedAudioSystem _audio = default!; + [Dependency] private readonly SharedPopupSystem _popup = default!; + + private static readonly SoundSpecifier ConsumeSound = new SoundPathSpecifier("/Audio/Effects/demon_consume.ogg"); + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnMapInit); + } + + private void OnMapInit(Entity ent, ref MapInitEvent args) + { + ent.Comp.NextUpdate = _timing.CurTime + ent.Comp.Interval; + } + + public override void Update(float frameTime) + { + base.Update(frameTime); + + var now = _timing.CurTime; + var query = EntityQueryEnumerator(); + + while (query.MoveNext(out var uid, out var nest)) + { + if (now < nest.NextUpdate) + continue; + + nest.NextUpdate = now + nest.Interval; + + Consume((uid, nest)); + SpawnEgg((uid, nest)); + Heal((uid, nest)); + } + } + + private void Consume(Entity ent) + { + var bodies = new HashSet>(); + _lookup.GetEntitiesInRange(Transform(ent.Owner).Coordinates, ent.Comp.ConsumeRange, bodies); + + foreach (var body in bodies) + { + if (!_mobState.IsIncapacitated(body.Owner, body.Comp)) + continue; + + _popup.PopupEntity( + Loc.GetString("adt-ash-walker-nest-consume", ("target", body.Owner)), + ent.Owner, + PopupType.MediumCaution); + _audio.PlayPvs(ConsumeSound, ent.Owner); + + ent.Comp.MeatCounter += HasComp(body.Owner) + ? ent.Comp.MeatPerMegafauna + : ent.Comp.MeatPerBody; + + _gibbing.Gib(body.Owner); + + Repair(ent); + } + } + + private void SpawnEgg(Entity ent) + { + if (ent.Comp.MeatCounter < ent.Comp.MeatPerEgg) + return; + + var proto = NeedsShaman() ? ent.Comp.ShamanEgg : ent.Comp.Egg; + var dir = (Direction)_random.Next(8); + var coords = Transform(ent.Owner).Coordinates.Offset(dir.ToIntVec()); + + Spawn(proto, coords); + + _popup.PopupEntity(Loc.GetString("adt-ash-walker-nest-egg"), ent.Owner, PopupType.LargeCaution); + ent.Comp.MeatCounter -= ent.Comp.MeatPerEgg; + } + + private bool NeedsShaman() + { + var shamans = EntityQueryEnumerator(); + while (shamans.MoveNext(out var uid, out var walker, out var state)) + { + if (walker.Shaman && !_mobState.IsDead(uid, state)) + return false; + } + + var eggs = EntityQueryEnumerator(); + while (eggs.MoveNext(out _, out var egg)) + { + if (egg.Shaman) + return false; + } + + return true; + } + + private void Heal(Entity ent) + { + if (ent.Comp.AuraHealing.Empty) + return; + + var tribe = new HashSet>(); + _lookup.GetEntitiesInRange(Transform(ent.Owner).Coordinates, ent.Comp.HealRange, tribe); + + foreach (var walker in tribe) + { + if (_mobState.IsDead(walker.Owner)) + continue; + + _damageable.TryChangeDamage(walker.Owner, ent.Comp.AuraHealing, true, origin: ent.Owner); + } + } + + private void Repair(Entity ent) + { + if (!TryComp(ent.Owner, out var damageable) || _damageable.GetTotalDamage((ent.Owner, damageable)) <= 0) + return; + + var scale = Math.Min(1f, ent.Comp.SelfRepair.Float() / _damageable.GetTotalDamage((ent.Owner, damageable)).Float()); + var heal = damageable.Damage * -scale; + + _damageable.TryChangeDamage(ent.Owner, heal, true); + } +} diff --git a/Content.Server/ADT/AshWalker/ADTHealTouchSystem.cs b/Content.Server/ADT/AshWalker/ADTHealTouchSystem.cs new file mode 100644 index 00000000000..8e2bfb927af --- /dev/null +++ b/Content.Server/ADT/AshWalker/ADTHealTouchSystem.cs @@ -0,0 +1,76 @@ +using Content.Shared.ADT.AshWalker; +using Content.Shared.ADT.AshWalker.Components; +using Content.Shared.Actions; +using Content.Shared.Damage; +using Content.Shared.Damage.Components; +using Content.Shared.Damage.Systems; +using Content.Shared.Mobs.Components; +using Content.Shared.Popups; +using Robust.Shared.Audio; +using Robust.Shared.Audio.Systems; + +namespace Content.Server.ADT.AshWalker; + +public sealed class ADTHealTouchSystem : EntitySystem +{ + [Dependency] private readonly DamageableSystem _damageable = default!; + [Dependency] private readonly SharedActionsSystem _actions = default!; + [Dependency] private readonly SharedAudioSystem _audio = default!; + [Dependency] private readonly SharedPopupSystem _popup = default!; + + private static readonly SoundSpecifier TouchSound = new SoundPathSpecifier("/Audio/Magic/staff_healing.ogg"); + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnMapInit); + SubscribeLocalEvent(OnShutdown); + SubscribeLocalEvent(OnHealTouch); + } + + private void OnMapInit(Entity ent, ref MapInitEvent args) + { + _actions.AddAction(ent.Owner, ref ent.Comp.ActionEntity, ent.Comp.ActionId); + } + + private void OnShutdown(Entity ent, ref ComponentShutdown args) + { + _actions.RemoveAction(ent.Comp.ActionEntity); + } + + private void OnHealTouch(Entity ent, ref ADTHealTouchActionEvent args) + { + if (args.Handled) + return; + + var target = args.Target; + + if (target == ent.Owner && !ent.Comp.CanHealSelf) + { + _popup.PopupEntity(Loc.GetString("adt-heal-touch-not-self"), ent.Owner, ent.Owner); + return; + } + + var used = new ADTHealTouchUsedEvent(ent.Owner); + RaiseLocalEvent(target, ref used); + + if (used.Handled) + { + _audio.PlayPvs(TouchSound, target); + args.Handled = true; + return; + } + + if (!HasComp(target) || !HasComp(target)) + { + _popup.PopupEntity(Loc.GetString("adt-heal-touch-no-target"), ent.Owner, ent.Owner); + return; + } + + _damageable.TryChangeDamage(target, ent.Comp.Healing, true, origin: ent.Owner); + _audio.PlayPvs(TouchSound, target); + _popup.PopupEntity(Loc.GetString("adt-heal-touch-success", ("target", target)), ent.Owner, ent.Owner); + args.Handled = true; + } +} diff --git a/Content.Server/ADT/AshWalker/ADTIgniteSystem.cs b/Content.Server/ADT/AshWalker/ADTIgniteSystem.cs index f76d7ce392d..ebe5cb3c649 100644 --- a/Content.Server/ADT/AshWalker/ADTIgniteSystem.cs +++ b/Content.Server/ADT/AshWalker/ADTIgniteSystem.cs @@ -4,6 +4,7 @@ using Content.Shared.Hands.EntitySystems; using Content.Shared.IgnitionSource.Components; using Content.Shared.IgnitionSource.EntitySystems; +using Content.Shared.Interaction.Events; using Content.Shared.Inventory; using Content.Shared.Nutrition; using Content.Shared.Popups; @@ -26,11 +27,17 @@ public override void Initialize() SubscribeLocalEvent(OnMapInit); SubscribeLocalEvent(OnShutdown); SubscribeLocalEvent(OnIgnite); + SubscribeLocalEvent(OnBlazeDropped); + } + + private void OnBlazeDropped(Entity ent, ref DroppedEvent args) + { + QueueDel(ent.Owner); } private void OnMapInit(Entity ent, ref MapInitEvent args) { - _actions.AddAction(ent, ref ent.Comp.ActionEntity, ent.Comp.ActionId); + _actions.AddAction(ent.Owner, ref ent.Comp.ActionEntity, ent.Comp.ActionId); } private void OnShutdown(Entity ent, ref ComponentShutdown args) @@ -38,7 +45,7 @@ private void OnShutdown(Entity ent, ref ComponentShutdown ar _actions.RemoveAction(ent.Comp.ActionEntity); } - private void OnIgnite(Entity ent, ADTIgniteActionEvent args) + private void OnIgnite(Entity ent, ref ADTIgniteActionEvent args) { if (args.Handled) return; @@ -48,23 +55,23 @@ private void OnIgnite(Entity ent, ADTIgniteActionEvent args) if (attempt.Cancelled) { - _popup.PopupEntity(Loc.GetString("adt-ash-walker-ignite-maw-covered"), ent, ent); + _popup.PopupEntity(Loc.GetString("adt-ash-walker-ignite-maw-covered"), ent.Owner, ent.Owner); return; } - var ember = SpawnAtPosition(ent.Comp.Ember, Transform(ent).Coordinates); + var blaze = SpawnAtPosition(ent.Comp.Blaze, Transform(ent.Owner).Coordinates); - if (TryComp(ember, out var matchstick)) - _matchstick.TryIgnite((ember, matchstick), ent); + if (TryComp(blaze, out var matchstick)) + _matchstick.TryIgnite((blaze, matchstick), ent.Owner); - if (!_hands.TryPickupAnyHand(ent, ember)) + if (!_hands.TryPickupAnyHand(ent.Owner, blaze)) { - QueueDel(ember); - _popup.PopupEntity(Loc.GetString("adt-ash-walker-ignite-hands-full"), ent, ent); + QueueDel(blaze); + _popup.PopupEntity(Loc.GetString("adt-ash-walker-ignite-hands-full"), ent.Owner, ent.Owner); return; } - _popup.PopupEntity(Loc.GetString("adt-ash-walker-ignite-success"), ent, ent); + _popup.PopupEntity(Loc.GetString("adt-ash-walker-ignite-success"), ent.Owner, ent.Owner); args.Handled = true; } } diff --git a/Content.Server/ADT/AshWalker/ADTNecropolisCompassSystem.cs b/Content.Server/ADT/AshWalker/ADTNecropolisCompassSystem.cs new file mode 100644 index 00000000000..13de82df746 --- /dev/null +++ b/Content.Server/ADT/AshWalker/ADTNecropolisCompassSystem.cs @@ -0,0 +1,144 @@ +using System.Numerics; +using Content.Server.Chat.Managers; +using Content.Shared.ADT.AshWalker; +using Content.Shared.ADT.AshWalker.Components; +using Content.Shared.Actions; +using Content.Shared.Chat; +using Content.Shared.Popups; +using Robust.Server.GameObjects; +using Robust.Shared.Player; +using Robust.Shared.Timing; + +namespace Content.Server.ADT.AshWalker; + +public sealed class ADTNecropolisCompassSystem : EntitySystem +{ + [Dependency] private readonly IChatManager _chat = default!; + [Dependency] private readonly SharedActionsSystem _actions = default!; + [Dependency] private readonly SharedPopupSystem _popup = default!; + [Dependency] private readonly SharedTransformSystem _transform = default!; + [Dependency] private readonly UserInterfaceSystem _ui = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnMapInit); + SubscribeLocalEvent(OnShutdown); + SubscribeLocalEvent(OnUse); + SubscribeLocalEvent(OnPointSelected); + } + + private void OnMapInit(Entity ent, ref MapInitEvent args) + { + _actions.AddAction(ent.Owner, ref ent.Comp.ActionEntity, ent.Comp.ActionId); + } + + private void OnShutdown(Entity ent, ref ComponentShutdown args) + { + _actions.RemoveAction(ent.Comp.ActionEntity); + } + + private void OnUse(Entity ent, ref ADTNecropolisCompassActionEvent args) + { + if (args.Handled) + return; + + if (!TryComp(ent.Owner, out var actor)) + return; + + var points = CollectPoints(ent.Owner); + + if (points.Count == 0) + { + _popup.PopupEntity(Loc.GetString("adt-necropolis-compass-nothing"), ent.Owner, ent.Owner); + return; + } + + _ui.SetUiState(ent.Owner, ADTNecropolisCompassUiKey.Key, new ADTNecropolisCompassBuiState(points)); + _ui.OpenUi(ent.Owner, ADTNecropolisCompassUiKey.Key, actor.PlayerSession); + + args.Handled = true; + } + + private void OnPointSelected(Entity ent, ref ADTNecropolisCompassSelectMessage args) + { + var point = GetEntity(args.Point); + + if (!HasComp(point)) + return; + + _popup.PopupEntity(Loc.GetString("adt-necropolis-compass-listen"), ent.Owner, ent.Owner); + + var owner = ent.Owner; + Timer.Spawn(ent.Comp.Delay, () => Answer(owner, point)); // todo rm shitass Timer.Spawn + } + + private List CollectPoints(EntityUid user) + { + var points = new List(); + var userMap = _transform.GetMapId(user); + + var query = EntityQueryEnumerator(); + while (query.MoveNext(out var poi, out var poiComp)) + { + if (_transform.GetMapId(poi) != userMap) + continue; + + var proto = MetaData(poi).EntityPrototype?.ID; + + points.Add(new ADTPointOfInterestEntry(GetNetEntity(poi), Loc.GetString(poiComp.Title), proto)); + } + + return points; + } + + private void Answer(EntityUid user, EntityUid point) + { + if (Deleted(user) || !TryComp(user, out var actor)) + return; + + if (Deleted(point) || !TryComp(point, out var poiComp)) + { + SendMessage(actor, Loc.GetString("adt-necropolis-compass-destroyed")); + return; + } + + var from = _transform.GetMapCoordinates(user); + var to = _transform.GetMapCoordinates(point); + + var direction = to.MapId != from.MapId + ? Loc.GetString("adt-direction-far-away") + : Loc.GetString(DirectionKey(to.Position - from.Position)); + + SendMessage(actor, Loc.GetString( + "adt-necropolis-compass-answer", + ("place", Loc.GetString(poiComp.Title)), + ("direction", direction))); + } + + private void SendMessage(ActorComponent actor, string message) + { + var wrapped = Loc.GetString("chat-manager-server-wrap-message", ("message", message)); + _chat.ChatMessageToOne(ChatChannel.Server, message, wrapped, EntityUid.Invalid, false, actor.PlayerSession.Channel); + } + + private static string DirectionKey(Vector2 delta) + { + if (delta.LengthSquared() < 0.5f) + return "adt-direction-here"; + + return delta.ToWorldAngle().GetDir() switch + { + Direction.North => "adt-direction-north", + Direction.NorthEast => "adt-direction-north-east", + Direction.East => "adt-direction-east", + Direction.SouthEast => "adt-direction-south-east", + Direction.South => "adt-direction-south", + Direction.SouthWest => "adt-direction-south-west", + Direction.West => "adt-direction-west", + Direction.NorthWest => "adt-direction-north-west", + _ => "adt-direction-here", + }; + } +} diff --git a/Content.Shared/ADT/AshWalker/ADTAshWalkerEvents.cs b/Content.Shared/ADT/AshWalker/ADTAshWalkerEvents.cs index 7b1224ddf43..902d414c848 100644 --- a/Content.Shared/ADT/AshWalker/ADTAshWalkerEvents.cs +++ b/Content.Shared/ADT/AshWalker/ADTAshWalkerEvents.cs @@ -5,3 +5,14 @@ namespace Content.Shared.ADT.AshWalker; public sealed partial class ADTIgniteActionEvent : InstantActionEvent { } + +public sealed partial class ADTHealTouchActionEvent : EntityTargetActionEvent +{ +} + +public sealed partial class ADTNecropolisCompassActionEvent : InstantActionEvent +{ +} + +[ByRefEvent] +public record struct ADTHealTouchUsedEvent(EntityUid User, bool Handled = false); diff --git a/Content.Shared/ADT/AshWalker/ADTNecropolisCompassUi.cs b/Content.Shared/ADT/AshWalker/ADTNecropolisCompassUi.cs new file mode 100644 index 00000000000..d62994b23bd --- /dev/null +++ b/Content.Shared/ADT/AshWalker/ADTNecropolisCompassUi.cs @@ -0,0 +1,47 @@ +using Robust.Shared.Prototypes; +using Robust.Shared.Serialization; + +namespace Content.Shared.ADT.AshWalker; + +[Serializable, NetSerializable] +public enum ADTNecropolisCompassUiKey : byte +{ + Key, +} + +[Serializable, NetSerializable] +public struct ADTPointOfInterestEntry +{ + public NetEntity Entity; + public string Name; + public EntProtoId? Proto; + + public ADTPointOfInterestEntry(NetEntity entity, string name, EntProtoId? proto) + { + Entity = entity; + Name = name; + Proto = proto; + } +} + +[Serializable, NetSerializable] +public sealed class ADTNecropolisCompassBuiState : BoundUserInterfaceState +{ + public List Points; + + public ADTNecropolisCompassBuiState(List points) + { + Points = points; + } +} + +[Serializable, NetSerializable] +public sealed class ADTNecropolisCompassSelectMessage : BoundUserInterfaceMessage +{ + public NetEntity Point; + + public ADTNecropolisCompassSelectMessage(NetEntity point) + { + Point = point; + } +} diff --git a/Content.Shared/ADT/AshWalker/Components/ADTAshWalkerEggComponent.cs b/Content.Shared/ADT/AshWalker/Components/ADTAshWalkerEggComponent.cs new file mode 100644 index 00000000000..de58b681540 --- /dev/null +++ b/Content.Shared/ADT/AshWalker/Components/ADTAshWalkerEggComponent.cs @@ -0,0 +1,10 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.ADT.AshWalker.Components; + +[RegisterComponent, NetworkedComponent] +public sealed partial class ADTAshWalkerEggComponent : Component +{ + [DataField] + public bool Shaman; +} diff --git a/Content.Shared/ADT/AshWalker/Components/ADTAshWalkerNestComponent.cs b/Content.Shared/ADT/AshWalker/Components/ADTAshWalkerNestComponent.cs new file mode 100644 index 00000000000..98cd6a9a5f4 --- /dev/null +++ b/Content.Shared/ADT/AshWalker/Components/ADTAshWalkerNestComponent.cs @@ -0,0 +1,45 @@ +using Content.Shared.Damage; +using Content.Shared.FixedPoint; +using Robust.Shared.Prototypes; + +namespace Content.Shared.ADT.AshWalker.Components; + +[RegisterComponent] +public sealed partial class ADTAshWalkerNestComponent : Component +{ + [DataField] + public int MeatCounter = 6; + + [DataField] + public int MeatPerEgg = 2; + + [DataField] + public int MeatPerBody = 1; + + [DataField] + public int MeatPerMegafauna = 20; + + [DataField] + public float ConsumeRange = 1.5f; + + [DataField] + public float HealRange = 4f; + + [DataField] + public FixedPoint2 SelfRepair = 10; + + [DataField] + public DamageSpecifier AuraHealing = new(); + + [DataField] + public EntProtoId Egg = "ADTAshWalkerEgg"; + + [DataField] + public EntProtoId ShamanEgg = "ADTAshWalkerShamanEgg"; + + [DataField] + public TimeSpan Interval = TimeSpan.FromSeconds(1); + + [ViewVariables] + public TimeSpan NextUpdate; +} diff --git a/Content.Shared/ADT/AshWalker/Components/ADTHealTouchComponent.cs b/Content.Shared/ADT/AshWalker/Components/ADTHealTouchComponent.cs new file mode 100644 index 00000000000..d6c2faf2994 --- /dev/null +++ b/Content.Shared/ADT/AshWalker/Components/ADTHealTouchComponent.cs @@ -0,0 +1,32 @@ +using Content.Shared.Damage; +using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; + +namespace Content.Shared.ADT.AshWalker.Components; + +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] +public sealed partial class ADTHealTouchComponent : Component +{ + [DataField] + public DamageSpecifier Healing = new() + { + DamageDict = new() + { + { "Blunt", -7 }, + { "Slash", -7 }, + { "Piercing", -6 }, + { "Heat", -20 }, + { "Poison", -10 }, + { "Asphyxiation", -50 }, + }, + }; + + [DataField] + public bool CanHealSelf = true; + + [DataField] + public EntProtoId ActionId = "ADTActionHealTouch"; + + [DataField, AutoNetworkedField] + public EntityUid? ActionEntity; +} diff --git a/Content.Shared/ADT/AshWalker/Components/ADTIgniteComponent.cs b/Content.Shared/ADT/AshWalker/Components/ADTIgniteComponent.cs index 706a5d44168..074c143ce39 100644 --- a/Content.Shared/ADT/AshWalker/Components/ADTIgniteComponent.cs +++ b/Content.Shared/ADT/AshWalker/Components/ADTIgniteComponent.cs @@ -7,7 +7,7 @@ namespace Content.Shared.ADT.AshWalker.Components; public sealed partial class ADTIgniteComponent : Component { [DataField, AutoNetworkedField] - public EntProtoId Ember = "ADTAshWalkerEmber"; + public EntProtoId Blaze = "ADTAshWalkerSmallBlaze"; [DataField] public EntProtoId ActionId = "ADTActionIgnite"; diff --git a/Content.Shared/ADT/AshWalker/Components/ADTNecropolisCompassComponent.cs b/Content.Shared/ADT/AshWalker/Components/ADTNecropolisCompassComponent.cs new file mode 100644 index 00000000000..88f6692eb1b --- /dev/null +++ b/Content.Shared/ADT/AshWalker/Components/ADTNecropolisCompassComponent.cs @@ -0,0 +1,17 @@ +using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; + +namespace Content.Shared.ADT.AshWalker.Components; + +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] +public sealed partial class ADTNecropolisCompassComponent : Component +{ + [DataField] + public TimeSpan Delay = TimeSpan.FromSeconds(2); + + [DataField] + public EntProtoId ActionId = "ADTActionNecropolisCompass"; + + [DataField, AutoNetworkedField] + public EntityUid? ActionEntity; +} diff --git a/Content.Shared/ADT/AshWalker/Components/ADTPointOfInterestComponent.cs b/Content.Shared/ADT/AshWalker/Components/ADTPointOfInterestComponent.cs new file mode 100644 index 00000000000..3823cb975a5 --- /dev/null +++ b/Content.Shared/ADT/AshWalker/Components/ADTPointOfInterestComponent.cs @@ -0,0 +1,11 @@ +using Robust.Shared.GameStates; +using Robust.Shared.Localization; + +namespace Content.Shared.ADT.AshWalker.Components; + +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] +public sealed partial class ADTPointOfInterestComponent : Component +{ + [DataField, AutoNetworkedField] + public LocId Title = "adt-point-of-interest-generic"; +} diff --git a/Content.Shared/ADT/AshWalker/Components/ADTSmallBlazeComponent.cs b/Content.Shared/ADT/AshWalker/Components/ADTSmallBlazeComponent.cs new file mode 100644 index 00000000000..ad70b2199b4 --- /dev/null +++ b/Content.Shared/ADT/AshWalker/Components/ADTSmallBlazeComponent.cs @@ -0,0 +1,8 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.ADT.AshWalker.Components; + +[RegisterComponent, NetworkedComponent] +public sealed partial class ADTSmallBlazeComponent : Component +{ +} diff --git a/Content.Shared/ADT/AshWalker/Systems/ADTAshWalkerSystem.cs b/Content.Shared/ADT/AshWalker/Systems/ADTAshWalkerSystem.cs index f7d1191bf2a..074f299c07c 100644 --- a/Content.Shared/ADT/AshWalker/Systems/ADTAshWalkerSystem.cs +++ b/Content.Shared/ADT/AshWalker/Systems/ADTAshWalkerSystem.cs @@ -24,6 +24,6 @@ private void OnShotAttempted(Entity ent, ref ShotAttempte return; args.Cancel(); - _popup.PopupClient(Loc.GetString("adt-ash-walker-no-guns"), ent, ent); + _popup.PopupClient(Loc.GetString("adt-ash-walker-no-guns"), ent.Owner, ent.Owner); } } diff --git a/Content.Shared/ADT/AshWalker/Systems/ADTLavalandSpeedSystem.cs b/Content.Shared/ADT/AshWalker/Systems/ADTLavalandSpeedSystem.cs index d14e438f792..7d35016dbc5 100644 --- a/Content.Shared/ADT/AshWalker/Systems/ADTLavalandSpeedSystem.cs +++ b/Content.Shared/ADT/AshWalker/Systems/ADTLavalandSpeedSystem.cs @@ -17,7 +17,7 @@ public override void Initialize() SubscribeLocalEvent(OnParentChanged); } - private void OnRefreshSpeed(Entity ent, RefreshMovementSpeedModifiersEvent args) + private void OnRefreshSpeed(Entity ent, ref RefreshMovementSpeedModifiersEvent args) { if (!IsBonusActive(ent)) return; @@ -27,15 +27,15 @@ private void OnRefreshSpeed(Entity ent, RefreshMoveme private void OnMapInit(Entity ent, ref MapInitEvent args) { - _movement.RefreshMovementSpeedModifiers(ent); + _movement.RefreshMovementSpeedModifiers(ent.Owner); } private void OnParentChanged(Entity ent, ref EntParentChangedMessage args) { - if (args.OldMapId == Transform(ent).MapUid) + if (args.OldMapId == Transform(ent.Owner).MapUid) return; - _movement.RefreshMovementSpeedModifiers(ent); + _movement.RefreshMovementSpeedModifiers(ent.Owner); } private bool IsBonusActive(Entity ent) @@ -43,7 +43,7 @@ private bool IsBonusActive(Entity ent) if (ent.Comp.Everywhere) return true; - if (Transform(ent).MapUid is not { } map) + if (Transform(ent.Owner).MapUid is not { } map) return false; return HasComp(map); From bb2ae221f0d6baacb51808d0145ca56d23bd8f9b Mon Sep 17 00:00:00 2001 From: Inconnu <177014427+Inconnu1337@users.noreply.github.com> Date: Fri, 14 Aug 2026 21:51:13 +0300 Subject: [PATCH 03/12] sprites --- .../Belt/medpouch.rsi/equipped-BELT.png | Bin 0 -> 501 bytes .../ADT/Clothing/Belt/medpouch.rsi/icon.png | Bin 0 -> 501 bytes .../ADT/Clothing/Belt/medpouch.rsi/meta.json | 17 ++++++++++++ .../goliath_gloves.rsi/equipped-HAND.png | Bin 0 -> 386 bytes .../Hands/goliath_gloves.rsi/icon.png | Bin 0 -> 479 bytes .../Hands/goliath_gloves.rsi/meta.json | 18 +++++++++++++ .../Head/roach.rsi/equipped-HELMET.png | Bin 0 -> 1177 bytes .../ADT/Clothing/Head/roach.rsi/icon.png | Bin 0 -> 500 bytes .../ADT/Clothing/Head/roach.rsi/meta.json | 18 +++++++++++++ .../Neck/hide_mantle.rsi/equipped-NECK.png | Bin 0 -> 1076 bytes .../Clothing/Neck/hide_mantle.rsi/icon.png | Bin 0 -> 537 bytes .../Clothing/Neck/hide_mantle.rsi/meta.json | 18 +++++++++++++ .../ashwalker.rsi/equipped-INNERCLOTHING.png | Bin 0 -> 1735 bytes .../Clothing/Uniforms/ashwalker.rsi/icon.png | Bin 0 -> 1062 bytes .../Clothing/Uniforms/ashwalker.rsi/meta.json | 18 +++++++++++++ .../equipped-INNERCLOTHING.png | Bin 0 -> 1626 bytes .../Uniforms/ashwalker_shaman.rsi/icon.png | Bin 0 -> 670 bytes .../Uniforms/ashwalker_shaman.rsi/meta.json | 18 +++++++++++++ .../Lavaland/small_blaze.rsi/icon.png | Bin 0 -> 736 bytes .../Lavaland/small_blaze.rsi/meta.json | 25 ++++++++++++++++++ .../Specific/ashwalker_egg.rsi/egg.png | Bin 0 -> 773 bytes .../Specific/ashwalker_egg.rsi/egg_shaman.png | Bin 0 -> 760 bytes .../Specific/ashwalker_egg.rsi/meta.json | 17 ++++++++++++ .../Specific/ashwalker_nest.rsi/meta.json | 14 ++++++++++ .../Specific/ashwalker_nest.rsi/nest.png | Bin 0 -> 2480 bytes 25 files changed, 163 insertions(+) create mode 100644 Resources/Textures/ADT/Clothing/Belt/medpouch.rsi/equipped-BELT.png create mode 100644 Resources/Textures/ADT/Clothing/Belt/medpouch.rsi/icon.png create mode 100644 Resources/Textures/ADT/Clothing/Belt/medpouch.rsi/meta.json create mode 100644 Resources/Textures/ADT/Clothing/Hands/goliath_gloves.rsi/equipped-HAND.png create mode 100644 Resources/Textures/ADT/Clothing/Hands/goliath_gloves.rsi/icon.png create mode 100644 Resources/Textures/ADT/Clothing/Hands/goliath_gloves.rsi/meta.json create mode 100644 Resources/Textures/ADT/Clothing/Head/roach.rsi/equipped-HELMET.png create mode 100644 Resources/Textures/ADT/Clothing/Head/roach.rsi/icon.png create mode 100644 Resources/Textures/ADT/Clothing/Head/roach.rsi/meta.json create mode 100644 Resources/Textures/ADT/Clothing/Neck/hide_mantle.rsi/equipped-NECK.png create mode 100644 Resources/Textures/ADT/Clothing/Neck/hide_mantle.rsi/icon.png create mode 100644 Resources/Textures/ADT/Clothing/Neck/hide_mantle.rsi/meta.json create mode 100644 Resources/Textures/ADT/Clothing/Uniforms/ashwalker.rsi/equipped-INNERCLOTHING.png create mode 100644 Resources/Textures/ADT/Clothing/Uniforms/ashwalker.rsi/icon.png create mode 100644 Resources/Textures/ADT/Clothing/Uniforms/ashwalker.rsi/meta.json create mode 100644 Resources/Textures/ADT/Clothing/Uniforms/ashwalker_shaman.rsi/equipped-INNERCLOTHING.png create mode 100644 Resources/Textures/ADT/Clothing/Uniforms/ashwalker_shaman.rsi/icon.png create mode 100644 Resources/Textures/ADT/Clothing/Uniforms/ashwalker_shaman.rsi/meta.json create mode 100644 Resources/Textures/ADT/Objects/Specific/Lavaland/small_blaze.rsi/icon.png create mode 100644 Resources/Textures/ADT/Objects/Specific/Lavaland/small_blaze.rsi/meta.json create mode 100644 Resources/Textures/ADT/Structures/Specific/ashwalker_egg.rsi/egg.png create mode 100644 Resources/Textures/ADT/Structures/Specific/ashwalker_egg.rsi/egg_shaman.png create mode 100644 Resources/Textures/ADT/Structures/Specific/ashwalker_egg.rsi/meta.json create mode 100644 Resources/Textures/ADT/Structures/Specific/ashwalker_nest.rsi/meta.json create mode 100644 Resources/Textures/ADT/Structures/Specific/ashwalker_nest.rsi/nest.png diff --git a/Resources/Textures/ADT/Clothing/Belt/medpouch.rsi/equipped-BELT.png b/Resources/Textures/ADT/Clothing/Belt/medpouch.rsi/equipped-BELT.png new file mode 100644 index 0000000000000000000000000000000000000000..09111e75163a86630b17dc441879abc10ed76bd8 GIT binary patch literal 501 zcmVr< zQQRFv7-ERX0Kb`|mbVY7cYR5BmNtH~BN{IfK#)1)O@MWBu;obFQ4HWU_nM;O074hA zj`lUWXg`R?6#<0B&Ib{Tmw`x24glh#mlZT~za+~r6#%p6FP%SuFmvfLh!O}gPf8+y zsOH!Qi2``dao&eT&q}Nd@X^6$T3;)=mks{t1XaHhJqNmvruzd(si1_KOJ^?z@XiEj rbjhS?O6^7z<+hUwK+>84%m6+C>$(l$PG#v~00000NkvXXu0mjfBcj@@ literal 0 HcmV?d00001 diff --git a/Resources/Textures/ADT/Clothing/Belt/medpouch.rsi/icon.png b/Resources/Textures/ADT/Clothing/Belt/medpouch.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..09111e75163a86630b17dc441879abc10ed76bd8 GIT binary patch literal 501 zcmVr< zQQRFv7-ERX0Kb`|mbVY7cYR5BmNtH~BN{IfK#)1)O@MWBu;obFQ4HWU_nM;O074hA zj`lUWXg`R?6#<0B&Ib{Tmw`x24glh#mlZT~za+~r6#%p6FP%SuFmvfLh!O}gPf8+y zsOH!Qi2``dao&eT&q}Nd@X^6$T3;)=mks{t1XaHhJqNmvruzd(si1_KOJ^?z@XiEj rbjhS?O6^7z<+hUwK+>84%m6+C>$(l$PG#v~00000NkvXXu0mjfBcj@@ literal 0 HcmV?d00001 diff --git a/Resources/Textures/ADT/Clothing/Belt/medpouch.rsi/meta.json b/Resources/Textures/ADT/Clothing/Belt/medpouch.rsi/meta.json new file mode 100644 index 00000000000..e5687778e44 --- /dev/null +++ b/Resources/Textures/ADT/Clothing/Belt/medpouch.rsi/meta.json @@ -0,0 +1,17 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from Paradise at https://github.com/ParadiseSS13/Paradise/blob/master/icons/obj/storage.dmi", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-BELT" + } + ] +} diff --git a/Resources/Textures/ADT/Clothing/Hands/goliath_gloves.rsi/equipped-HAND.png b/Resources/Textures/ADT/Clothing/Hands/goliath_gloves.rsi/equipped-HAND.png new file mode 100644 index 0000000000000000000000000000000000000000..108464034e1f64fbfc53473b94912947a2b37c6e GIT binary patch literal 386 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9F5M?jcysy3fA0|TRp zr;B4q#hkaZHs&2N5OL)f)mnRHp||=K{RCIpA4}>4<{xR;^^98}*owhPBUn?>>F%Q= zeJ=~%&r~{k{=8k~#P;Wgk0KawAcxzhkDfmKv-sP&>)TTHu8xqccU#E$dPe_s^=FsO zryX4ue5U>xf0)C^z5D&xo~CXJF1Wb;N$DMdC+F_J6yH(XsAuxnYo2;PkL$TVYnf(! zvYhjO-eHr+tGs=thWz_}N`6hl4BsVrf9CzH^oQY|h2Y@40uZ zYS?G{d(ILd>mTc{FK>z`Rmm^h-Vku!F8t^A=iU4J1wt7u%_W^rRn;Kdu%{t@#*t^ z1)yYt{CsjIl-hKK=nPOYVSYRs+U(;?tDH`o7_=7vyQazP@rh60PF-J8eucK#+9+6FCs5&lQ)=Kx2C)&joz=~(#Au+>AJ-K`8`kpDnJG38$U+# VVR`#(ZnFRY002ovPDHLkV1mXM)j|LO literal 0 HcmV?d00001 diff --git a/Resources/Textures/ADT/Clothing/Hands/goliath_gloves.rsi/meta.json b/Resources/Textures/ADT/Clothing/Hands/goliath_gloves.rsi/meta.json new file mode 100644 index 00000000000..775e193675e --- /dev/null +++ b/Resources/Textures/ADT/Clothing/Hands/goliath_gloves.rsi/meta.json @@ -0,0 +1,18 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from Paradise at https://github.com/ParadiseSS13/Paradise/blob/master/icons/obj/clothing/gloves.dmi and icons/mob/clothing/hands.dmi", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-HAND", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/ADT/Clothing/Head/roach.rsi/equipped-HELMET.png b/Resources/Textures/ADT/Clothing/Head/roach.rsi/equipped-HELMET.png new file mode 100644 index 0000000000000000000000000000000000000000..3c0e668892e242d13cbbceec6b4644e012ce8cd5 GIT binary patch literal 1177 zcmV;K1ZMk*P)>2K`=`z7Mv89 zg2l#3;u0P87CU+^IEqd}i_KD}LKattVoJm@4t3CgAWrA|U+*i=%O&^j@-DsS-4DVg zch`I0_kZ8_?%w;ZXDQ>v65tk*vqN;IDYll_@^6|D+@60M=UR~kfYYmo2ej7hI#=fB zsp@UZrHU&CB@CP`AAcR##t|Ws0JdnPCY=A$?Gl`pw-BW$M5rey0y|$6pH{Tk zQxmzS0>*?k=?B+E1j6~Pc4wdi9#qTDlt_a@VJ1@hN&=sAJcvi|(3k=wpyE0)U`2ki$O?MhTDv zMhRefi!edQ;)FjiN&p7o?#}$A-*GWg0KkvL!yb)QF-`zZ1MYRc_gj-%6HEj0STK(B zz(@f=$G44(u>$avd)%qFu>$BK7l1NOE&yemTmZ^Axd2iB;FdHU-ATy`@HjRp7f1WP zeM`IBwB|KjTV6R8A@+8+PaJP~^}xDk6RL+QbA(U<>Ynpljzre!X|lDxbN9+hlmg=fbGq^I0Ba1`);KezyOrR0jkEc(^F1R z;Zi3kf}%9fC32MH*&ZyCeD=zAi9`ULhuU0+3wl>zQb2I|y#!tuxhrgJ2@w*D0I1FC zbDciueSxHqBMi|18#oF%Ex5z9MF4+im0A6y!#xacpVNZh4`8%J0F-1!N0q130H>yG za~Pol@P+zP18L}e8Q6j-;0}^)4nuhikRu>X&NHy7QJ8T!0)VaaE&$;CsFx&88?F_y zz1qeAfQt@$J0nf7jVk#MMhd`p0635PE58PlW?Wu_a;MWcOLLvOJx8A$|*nw r@n60xoD{hLlyPzaDC6V;P{#QSXRQJeE2b9|00000NkvXXu0mjfM0FCR literal 0 HcmV?d00001 diff --git a/Resources/Textures/ADT/Clothing/Head/roach.rsi/icon.png b/Resources/Textures/ADT/Clothing/Head/roach.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..e5308a49b2792d50d59f5807a1db47eb29e3d126 GIT binary patch literal 500 zcmVyP&|9=}n?IZgVzw*oyG98od8Pyh&3;RCbc|A8p1HEk*Kmo|bjqy+HW7{vAmB;S5z0G?oS z3}X9L^}j{{x$z|=&8OP_OaNSH_qzA|W1U60Mu54CwlV-d23|Ek`)*ZtLJQ`D>g literal 0 HcmV?d00001 diff --git a/Resources/Textures/ADT/Clothing/Head/roach.rsi/meta.json b/Resources/Textures/ADT/Clothing/Head/roach.rsi/meta.json new file mode 100644 index 00000000000..5ad7366d91d --- /dev/null +++ b/Resources/Textures/ADT/Clothing/Head/roach.rsi/meta.json @@ -0,0 +1,18 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from Paradise at https://github.com/ParadiseSS13/Paradise/blob/master/icons/obj/clothing/hats.dmi and icons/mob/clothing/head.dmi", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-HELMET", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/ADT/Clothing/Neck/hide_mantle.rsi/equipped-NECK.png b/Resources/Textures/ADT/Clothing/Neck/hide_mantle.rsi/equipped-NECK.png new file mode 100644 index 0000000000000000000000000000000000000000..5df12ac9933b3929d9fc276a17d34ff963a88b2b GIT binary patch literal 1076 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/ADT/Clothing/Uniforms/ashwalker.rsi/meta.json b/Resources/Textures/ADT/Clothing/Uniforms/ashwalker.rsi/meta.json new file mode 100644 index 00000000000..7cd7066dfc2 --- /dev/null +++ b/Resources/Textures/ADT/Clothing/Uniforms/ashwalker.rsi/meta.json @@ -0,0 +1,18 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from Paradise at https://github.com/ParadiseSS13/Paradise/blob/master/icons/obj/clothing/uniforms.dmi and icons/mob/clothing/uniform.dmi", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-INNERCLOTHING", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/ADT/Clothing/Uniforms/ashwalker_shaman.rsi/equipped-INNERCLOTHING.png b/Resources/Textures/ADT/Clothing/Uniforms/ashwalker_shaman.rsi/equipped-INNERCLOTHING.png new file mode 100644 index 0000000000000000000000000000000000000000..04cddc985fa35008ee3ee9adc5cbbff9fe8feb2d GIT binary patch literal 1626 zcmV-g2BrClP)OqZ8n^i)q_t_NCJikKl&uo9tbHh^ z`V^|vfLKWSB0h)+l0F%qqz|G(vmjPdNoAkZKp)yAmV)d{OSEpI#2{%xQwYtPX6NotxO0=aPxdA)7}kd=MSuWTa%gpso?sUx|JEp*)mAgepvmgl-Z*`5i2;7H^s(XCxX z3)8s|bahdrqnXZ=JrdaXimJMtd);AwBzPi#jjyN-(NxDGt*^EzVXV|t)uOnM=WLLm zdmeJ~!4C<(2SF9`sbexsR-vLVjg_UOY9kt$5VTE6@I(MQ8*8j_Iyxg6_Pcgb_ulP9 zwFgpy7uEIOCVwJZuYfXCi-7g}OY(2^PkB$g9=ARBX%qnv#0ub5XuYsTQ*TP+`JN5v z4#?Jr4c{4R7sp#S<7Dj>fOmoY&mNRsNJT+Kr6UyKdp40xGK^=#{W@S{0)~g>e0$>t z^_-5D4Zc_}&->)!9~TS92V|uR@Lk`uiQsN?zn| zOhC$T9n;HevXM4cN4T$>zW(H@`**CwW{~cyCmK@@2o2=kT-*mJK~1ALnT6B$&XM09^qV zini?tUL|JX9B+@7%zmfjmI^#r*Dj(XcKJQMKm${bZawLiyr_K58W zfczt!d+735jE?v8Dran#1fvMx#RsptcnpA2z3&~T*vFSCD5$l676~BA1ironSU3RV zk90PRc2mTED0&5CaTMrZg@Hss>vMx*dP!b++i5@csc2(*!tvnCUyAdwFM1uagz}1= z^xyi5AORmePdC@QoZ+iauMdV_A1{M(J*Q)3f84pJuJfFm7(MF9=VDg3#Fzx=!TRt$ zIL5d?lZRQDE|dX+$Rf~xVw4-Zw6-C(6#aD%hUZ4;}QG`uhj4MRAK!JCL&dja}!Td}R z6(UO3Yzs|AGP(p(AK=QzrxT<|lefo^DQ+g3ZE;L8Ge+p|cOsEyYQ1oWlD+BFe5I4o zMZkM%9N5$#IREQ6G;{c5iv2o41kvKwW+^4SynEG)@7|!{5fa?P=9@qlZMD>^ecIqjwk)u=G!e z8q%p~Ku=8v6#;eCvYl-_pX+%`FYq-6u+jNygltCu(ci8DEp|p=HA1Q?M5`4-8^)tP zVBT^B%r9)C$Zm2KM?ojn!xYBZ;pCNihdrQ=x-j1MUV!TVY+Q}}>UGqj!UV<}A~@>P zAD;&a=ut?Axx33oeHnia^Nx#NB@*O6Ou6;QEP$YkA3co602Y817Z9}Zx*jZ>b@8Le Y{}Oq36l;^;&;S4c07*qoM6N<$f<7kjD*ylh literal 0 HcmV?d00001 diff --git a/Resources/Textures/ADT/Clothing/Uniforms/ashwalker_shaman.rsi/icon.png b/Resources/Textures/ADT/Clothing/Uniforms/ashwalker_shaman.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..6b686826c37e3408768d72d3ee94211599b155c1 GIT binary patch literal 670 zcmV;P0%84$P)T$fQLDBTaj1yY7!2`h7??~SXv~CgdnJct>UCuUC#U7^V0k&Y3`9k zgnXB~_q%)fe(rwnelM?#?pP&&54#wctfxivn{``Z0or; zaGZ#Dzg`i>kuQDBm=`F_Uor^h$!$6ynb7_GF36{D0On2d<|c@c=>Px#07*qoM6N<$ Ef=r?_y8r+H literal 0 HcmV?d00001 diff --git a/Resources/Textures/ADT/Clothing/Uniforms/ashwalker_shaman.rsi/meta.json b/Resources/Textures/ADT/Clothing/Uniforms/ashwalker_shaman.rsi/meta.json new file mode 100644 index 00000000000..7cd7066dfc2 --- /dev/null +++ b/Resources/Textures/ADT/Clothing/Uniforms/ashwalker_shaman.rsi/meta.json @@ -0,0 +1,18 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from Paradise at https://github.com/ParadiseSS13/Paradise/blob/master/icons/obj/clothing/uniforms.dmi and icons/mob/clothing/uniform.dmi", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-INNERCLOTHING", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/ADT/Objects/Specific/Lavaland/small_blaze.rsi/icon.png b/Resources/Textures/ADT/Objects/Specific/Lavaland/small_blaze.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..e53b7b327951dad8d072afa026588e7a8198389d GIT binary patch literal 736 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGooCO|{#S9F5M?jcysy3fA0|V0} zPZ!6KiaBrR8u~FC3b^*VID7rNvXe2qLG7WylsS!B=?k6+t(>I&gl*+ZO=rm&9(`ef zv%dEHxpuAos@dw9UpMc)cQs<4Ka(p{f(nBh3Zc+(`19k;jlXwFSI=i*N$jovQ)7Ad z-uA^RC8`Uyh`Sw?z5T;2oax!>Jqq86D7Y)_a&FT&ch=>~bN2_Gu__AoKQ@?D&%5S(?RjerB#(a1%%@e5vbYd*RDZM%xQdfW*Z&KN5NUO ROMyw2!PC{xWt~$(6989ZH2(kq literal 0 HcmV?d00001 diff --git a/Resources/Textures/ADT/Objects/Specific/Lavaland/small_blaze.rsi/meta.json b/Resources/Textures/ADT/Objects/Specific/Lavaland/small_blaze.rsi/meta.json new file mode 100644 index 00000000000..2125538e925 --- /dev/null +++ b/Resources/Textures/ADT/Objects/Specific/Lavaland/small_blaze.rsi/meta.json @@ -0,0 +1,25 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from Paradise at https://github.com/ParadiseSS13/Paradise/blob/master/icons/obj/cigarettes.dmi", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon", + "delays": [ + [ + 0.1, + 0.2, + 0.1, + 0.2, + 0.1, + 0.2, + 0.1 + ] + ] + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/ADT/Structures/Specific/ashwalker_egg.rsi/egg.png b/Resources/Textures/ADT/Structures/Specific/ashwalker_egg.rsi/egg.png new file mode 100644 index 0000000000000000000000000000000000000000..67978b0fb41eedb33fb4841f1f9ce78d4c527017 GIT binary patch literal 773 zcmV+g1N!`lP)tpk?=tXq%4HY3d|_6Shd`6veFRU-0r+=p7#6cx!tb2+qqMU z!tcxOJ@@Q+8&AISFG=?=b)Q zYo;Jf1I&CHWmc&Y!tVyb)z%4FB?;MOnVzNP1=A3w0OH}7Y$eA)krR;3DiC@z02YfC zoXzb7VVA0CUUyf3-Rc<~O39>XZj1M@FoZC` zv;H0kT)IK#k;&&YcF=nU+`fzO_5Bl&?0abpAtY(HFoX~Q?)XN}Nr+F4gUwM5duk8R zINmR(Q|dfhK07=Mq7u%)PP+rDY8&WU+EoYg(k$5QcK99*Q6{pALgkr!)n_UTB>^yc zXHzRht`$Pm)E|NUuG5f8%;xulLYvcj>N30?z9$-&`8GsjuIVo$kV&VZ-q}if1BLBr zMnV7;71FvfECE;K!|-o=!D@4;d*M(+P0=zG1>ot&`WF&LkJ6f(RmlwKqt`}G5UKfs z-@{k)rT`d;N54@C1GriO>UDTxXcfXBdak9##Kr)oVn3kKlYirR&QYs5D(h4jybp~% zD!RD)_}R5}`pX00LL;|7NTw+LuIFMbryfk>BfTO^iNu8 zU>to(fVJLb7dnD;ua6pyQFsz^bBrE;7icvdH|_|b3@pya=;eZk4L8(lV)P+2`+{VS zk)!5jK9l*~zSrfS1(=2IE?_78ZH6bE)6-6$dh=K`Qfhgz3~&fM-Som%tKPS2s;xIq zd$H(+0e(RQSfOXyHq+L-l({JY4gs62fA^2ce*^Fn*%w-v*x||b00000NkvXXu0mjf DdZBH@ literal 0 HcmV?d00001 diff --git a/Resources/Textures/ADT/Structures/Specific/ashwalker_egg.rsi/egg_shaman.png b/Resources/Textures/ADT/Structures/Specific/ashwalker_egg.rsi/egg_shaman.png new file mode 100644 index 0000000000000000000000000000000000000000..7077efa2b9655589267e96276bd9f996bdf4043e GIT binary patch literal 760 zcmV_dL0Uwy zTF{^oO6ew0EyV|ch*gP@iWIFC5nL%qXbXaFDuN3)ZWLEi>Z4+sHm}KK#yKaRFiw-1 zJFzHA|IK9P-pv1<$GtbHgTJh0fMtN10m5Cas_|KLY;wgP0l3zCXpwn3C&BAyadk&a z$QFccfa!Nrs>|z#r?;c9KNtpCng=AO`C1bzO1F1|7yly9a{QR9VAxjdK=TYpEtt?mqVDuZC z1Emz}gb>>gp94izAf5W6^@Bvs+1WDy_lE{Wt9J2JxXtGSC$ztMz4sgATmJg=U*maRtigP zcGZ@hTj<^xH5#MvBxG}p9)B0;HJePffn*wGT0!F(d|#_IKA8DI!J-HgJe#-{pubK1?K7Y1Mm+|w(K qRWcSaw*|luu*CXz|CszY06zc zsH}kNgU1$nR9qJhFL#d>g`=<{dKBH&3Q8BH%W5AA7AY0MVhgQwkwT@krSBJgCTY?n z(|LJ=dt6rBLsOOgr}vy>ax*jc_xb(q{r-M;hQa^24FL=R3;_%Q3;_%Q3;_%Q3;_%Q z+z{aD&6}%wdmRyJyI!v&-RPSRa7V#k3R{iiElZX?9QAo_o?x?DWj7Vzo|F8_t<#&6 z>FBXk%Iek9(Zh#&E|irA-82Ai3l(i#m(eV5YH6UKT%DqS>+N@cF^B;HR5~R0Z<-6_ zM-*ew+R{Q1h`@F0{_OU+J*t}mu%klI?bn^NTjt%PJ#_FO7S2z^#>bW^U);6l=h`2* z4D0%&cC|{WHJd|lAoDP`rLKWauj#SdoIh(S1`M$If)M>`)=N^LV)WHM$8&gZ_ZxwE z&pa-?dzl-wGJHxzCPhCIezz2kf&y&anT8j(Zh~o8FttY3Exu97(Z4zX%kkKs`7z=W z5>a*j5}MoEG4ZJvsiG}UVzA98fJ;trD^Mb@r4yl2tFZ6=Ol;b)8k#W^u)tL=<~FiE zN5Ln6ofkPp=1fKcC`_Lfhtpr3f}_ua(7TtTAo$gwFuIJS`Sm zU9{F|M^dX5m8u||$j`^Z`&Pl2|BA1}`3}(H5^BbdwOC5eev9LdUdRFru-j~~@e;Zn z6rPFo7q*wV2Amgs2Jj}N^nhY1Xh{l6Gc%CV-Gnr)86r97@25bR!Z#%hYDeUq(S*}&%~(7s7WRu@`!v>|06M4uLO~&F@~x=q?+4Y-&qKJ6V+{&mdrkowoHRnmjYkttK~K?m8xmIi^B<6n z@GTko4DdWd@0GPU5F}DKbFK^%MukB=J`A6g*CUUpVNNiO)JYm~+d1ceNPGs^%8M&s z3y~$y7#|0zjuEE@#Jd9KWZ`L@m#)v}};^RDq-N z0t_S3ekniMbjw|{i09{sam&L|A)H`k<)KRx(UkE8bkPPdM1I{IAW}S-QQ=_93aBuT zTbaWm=tfbv4xqInZ;U!5>XMA{BO}^i2oH%b$xd~|FWIgM)%f*hRCno?#D+`J$I4JT zV=81$C#JNVhcZxs@DL;X)dm8KRGy3gxH2|Xgm9G zN&xO9S?HYrJtDiDSVW6xDLDtz)bTI~V%FX7Kf=c7Wa5K`U)chODbZ-ygTvI(G%F1dkDh{PT>B| z=H)7_fr8{lLdr@UtuL37UOPhF5FmZWXU;#(Sfo)oj>1nrA8xh{)j6-@R;mZo!Q+_l z{L`=>FMvAjedHN*;8_+Ujl&@b0uoGWyxSpRrX?IJv<4X@;*98k#9e?nAsT0L^Iy5G zTG)6Uz@wIsDz_k-s!**xtvPUxa`jcg-lhLxoXbK~Ok$(KsBRh;y2|uV~ z;sXhI4I7YO*bZy@0W20A$SgjK`L|Cc^Js_LmJ3EeKJE(ifMQLG%>Yuq4_c$wK35s~a?v%*5t zm>S07c0)hL>1FuVCV~_;d{oNdOG16*f2czU`xk!OeF4WBX!OuQumn5N)5~H`(sRiE z>wV;&({NRGpt$P`&l^_-nkSz_&rE%P+;B@2QkK| z$1}sMn4*T%)Qcvi40gycp|y{|kov)FKkvRqo7~m!wuK65@=*#-k;YQu@!B~wI6n$+ z?99Nj+5YgVqpGP7$IA3XejQ*vEKHIp*{n9{i_cHcx5#AJJCQ?vmjngVjlVZiP;}AM z+;Cx(nWTog)1=QK=MS^B@`}k$RkE9ek`xyT2KT^y|esF$2d=|7WWg z%&Bmvj3(*3AN92o^%4)7hjvtLZqk-8YDU@~#c%n=WQ3QmL#Wr%Zv8)V_f4uL-{O5UT6S$A5q^a0`LEtnb(*S4 Date: Sat, 15 Aug 2026 08:11:19 +0300 Subject: [PATCH 04/12] add entity picker --- .../ADTNecropolisCompassBoundUserInterface.cs | 12 ++++--- .../ADTEntityPickerWindow.xaml} | 5 ++- .../ADTEntityPickerWindow.xaml.cs} | 34 +++++++++++-------- .../AshWalker/ADTNecropolisCompassSystem.cs | 7 ++-- .../ADT/AshWalker/ADTNecropolisCompassUi.cs | 21 ++---------- Content.Shared/ADT/UI/ADTEntityPickerEntry.cs | 19 +++++++++++ 6 files changed, 56 insertions(+), 42 deletions(-) rename Content.Client/ADT/{AshWalker/UI/ADTNecropolisCompassWindow.xaml => UI/ADTEntityPickerWindow.xaml} (68%) rename Content.Client/ADT/{AshWalker/UI/ADTNecropolisCompassWindow.xaml.cs => UI/ADTEntityPickerWindow.xaml.cs} (65%) create mode 100644 Content.Shared/ADT/UI/ADTEntityPickerEntry.cs diff --git a/Content.Client/ADT/AshWalker/UI/ADTNecropolisCompassBoundUserInterface.cs b/Content.Client/ADT/AshWalker/UI/ADTNecropolisCompassBoundUserInterface.cs index c5cf33ee901..715bb632d6d 100644 --- a/Content.Client/ADT/AshWalker/UI/ADTNecropolisCompassBoundUserInterface.cs +++ b/Content.Client/ADT/AshWalker/UI/ADTNecropolisCompassBoundUserInterface.cs @@ -1,3 +1,4 @@ +using Content.Client.ADT.UI; using Content.Shared.ADT.AshWalker; using Robust.Client.UserInterface; @@ -5,7 +6,7 @@ namespace Content.Client.ADT.AshWalker.UI; public sealed class ADTNecropolisCompassBoundUserInterface : BoundUserInterface { - private ADTNecropolisCompassWindow? _window; + private ADTEntityPickerWindow? _window; public ADTNecropolisCompassBoundUserInterface(EntityUid owner, Enum uiKey) : base(owner, uiKey) { @@ -15,8 +16,11 @@ protected override void Open() { base.Open(); - _window = this.CreateWindow(); - _window.OnPointSelected += OnPointSelected; + _window = this.CreateWindow(); + _window.SetText( + Loc.GetString("adt-necropolis-compass-window-title"), + Loc.GetString("adt-necropolis-compass-window-hint")); + _window.OnEntrySelected += OnPointSelected; } protected override void UpdateState(BoundUserInterfaceState state) @@ -26,7 +30,7 @@ protected override void UpdateState(BoundUserInterfaceState state) if (_window == null || state is not ADTNecropolisCompassBuiState compassState) return; - _window.SetPoints(compassState.Points); + _window.SetEntries(compassState.Points); } private void OnPointSelected(NetEntity point) diff --git a/Content.Client/ADT/AshWalker/UI/ADTNecropolisCompassWindow.xaml b/Content.Client/ADT/UI/ADTEntityPickerWindow.xaml similarity index 68% rename from Content.Client/ADT/AshWalker/UI/ADTNecropolisCompassWindow.xaml rename to Content.Client/ADT/UI/ADTEntityPickerWindow.xaml index 9593e92b4c6..9a43ca86573 100644 --- a/Content.Client/ADT/AshWalker/UI/ADTNecropolisCompassWindow.xaml +++ b/Content.Client/ADT/UI/ADTEntityPickerWindow.xaml @@ -1,12 +1,11 @@ - diff --git a/Content.Client/ADT/AshWalker/UI/ADTNecropolisCompassWindow.xaml.cs b/Content.Client/ADT/UI/ADTEntityPickerWindow.xaml.cs similarity index 65% rename from Content.Client/ADT/AshWalker/UI/ADTNecropolisCompassWindow.xaml.cs rename to Content.Client/ADT/UI/ADTEntityPickerWindow.xaml.cs index 82670032156..e189e443b73 100644 --- a/Content.Client/ADT/AshWalker/UI/ADTNecropolisCompassWindow.xaml.cs +++ b/Content.Client/ADT/UI/ADTEntityPickerWindow.xaml.cs @@ -1,34 +1,40 @@ using System.Numerics; using Content.Client.UserInterface.Controls; -using Content.Shared.ADT.AshWalker; +using Content.Shared.ADT.UI; using Robust.Client.AutoGenerated; using Robust.Client.UserInterface; using Robust.Client.UserInterface.Controls; using Robust.Client.UserInterface.XAML; -namespace Content.Client.ADT.AshWalker.UI; +namespace Content.Client.ADT.UI; [GenerateTypedNameReferences] -public sealed partial class ADTNecropolisCompassWindow : FancyWindow +public sealed partial class ADTEntityPickerWindow : FancyWindow { - public event Action? OnPointSelected; + public event Action? OnEntrySelected; - public ADTNecropolisCompassWindow() + public ADTEntityPickerWindow() { RobustXamlLoader.Load(this); } - public void SetPoints(List points) + public void SetText(string title, string hint) { - PointList.RemoveAllChildren(); + Title = title; + Hint.Text = hint; + } + + public void SetEntries(List entries) + { + EntryList.RemoveAllChildren(); - foreach (var point in points) + foreach (var entry in entries) { - PointList.AddChild(BuildRow(point)); + EntryList.AddChild(BuildRow(entry)); } } - private Control BuildRow(ADTPointOfInterestEntry point) + private Control BuildRow(ADTEntityPickerEntry entry) { var button = new Button { @@ -46,7 +52,7 @@ private Control BuildRow(ADTPointOfInterestEntry point) MouseFilter = MouseFilterMode.Ignore, }; - if (point.Proto is { } proto) + if (entry.Proto is { } proto) { var view = new EntityPrototypeView { @@ -61,14 +67,14 @@ private Control BuildRow(ADTPointOfInterestEntry point) row.AddChild(new Label { - Text = point.Name, + Text = entry.Name, VerticalAlignment = VAlignment.Center, }); button.AddChild(row); - var target = point.Entity; - button.OnPressed += _ => OnPointSelected?.Invoke(target); + var target = entry.Entity; + button.OnPressed += _ => OnEntrySelected?.Invoke(target); return button; } diff --git a/Content.Server/ADT/AshWalker/ADTNecropolisCompassSystem.cs b/Content.Server/ADT/AshWalker/ADTNecropolisCompassSystem.cs index 13de82df746..9418d67b6b6 100644 --- a/Content.Server/ADT/AshWalker/ADTNecropolisCompassSystem.cs +++ b/Content.Server/ADT/AshWalker/ADTNecropolisCompassSystem.cs @@ -2,6 +2,7 @@ using Content.Server.Chat.Managers; using Content.Shared.ADT.AshWalker; using Content.Shared.ADT.AshWalker.Components; +using Content.Shared.ADT.UI; using Content.Shared.Actions; using Content.Shared.Chat; using Content.Shared.Popups; @@ -74,9 +75,9 @@ private void OnPointSelected(Entity ent, ref ADTN Timer.Spawn(ent.Comp.Delay, () => Answer(owner, point)); // todo rm shitass Timer.Spawn } - private List CollectPoints(EntityUid user) + private List CollectPoints(EntityUid user) { - var points = new List(); + var points = new List(); var userMap = _transform.GetMapId(user); var query = EntityQueryEnumerator(); @@ -87,7 +88,7 @@ private List CollectPoints(EntityUid user) var proto = MetaData(poi).EntityPrototype?.ID; - points.Add(new ADTPointOfInterestEntry(GetNetEntity(poi), Loc.GetString(poiComp.Title), proto)); + points.Add(new ADTEntityPickerEntry(GetNetEntity(poi), Loc.GetString(poiComp.Title), proto)); } return points; diff --git a/Content.Shared/ADT/AshWalker/ADTNecropolisCompassUi.cs b/Content.Shared/ADT/AshWalker/ADTNecropolisCompassUi.cs index d62994b23bd..06ca0631ffc 100644 --- a/Content.Shared/ADT/AshWalker/ADTNecropolisCompassUi.cs +++ b/Content.Shared/ADT/AshWalker/ADTNecropolisCompassUi.cs @@ -1,4 +1,4 @@ -using Robust.Shared.Prototypes; +using Content.Shared.ADT.UI; using Robust.Shared.Serialization; namespace Content.Shared.ADT.AshWalker; @@ -9,27 +9,12 @@ public enum ADTNecropolisCompassUiKey : byte Key, } -[Serializable, NetSerializable] -public struct ADTPointOfInterestEntry -{ - public NetEntity Entity; - public string Name; - public EntProtoId? Proto; - - public ADTPointOfInterestEntry(NetEntity entity, string name, EntProtoId? proto) - { - Entity = entity; - Name = name; - Proto = proto; - } -} - [Serializable, NetSerializable] public sealed class ADTNecropolisCompassBuiState : BoundUserInterfaceState { - public List Points; + public List Points; - public ADTNecropolisCompassBuiState(List points) + public ADTNecropolisCompassBuiState(List points) { Points = points; } diff --git a/Content.Shared/ADT/UI/ADTEntityPickerEntry.cs b/Content.Shared/ADT/UI/ADTEntityPickerEntry.cs new file mode 100644 index 00000000000..406605df967 --- /dev/null +++ b/Content.Shared/ADT/UI/ADTEntityPickerEntry.cs @@ -0,0 +1,19 @@ +using Robust.Shared.Prototypes; +using Robust.Shared.Serialization; + +namespace Content.Shared.ADT.UI; + +[Serializable, NetSerializable] +public struct ADTEntityPickerEntry +{ + public NetEntity Entity; + public string Name; + public EntProtoId? Proto; + + public ADTEntityPickerEntry(NetEntity entity, string name, EntProtoId? proto) + { + Entity = entity; + Name = name; + Proto = proto; + } +} From 49f6e10486147187f8c44b3cf0e48cbdd9dbc6cc Mon Sep 17 00:00:00 2001 From: Inconnu <177014427+Inconnu1337@users.noreply.github.com> Date: Sat, 15 Aug 2026 08:12:11 +0300 Subject: [PATCH 05/12] sprites --- .../ADT/Effects/ash_runes.rsi/meta.json | 121 ++++++++++++++++++ .../ADT/Effects/ash_runes.rsi/runaash_1.png | Bin 0 -> 326 bytes .../ADT/Effects/ash_runes.rsi/runaash_10.png | Bin 0 -> 361 bytes .../ADT/Effects/ash_runes.rsi/runaash_11.png | Bin 0 -> 343 bytes .../ADT/Effects/ash_runes.rsi/runaash_12.png | Bin 0 -> 306 bytes .../ADT/Effects/ash_runes.rsi/runaash_13.png | Bin 0 -> 548 bytes .../ADT/Effects/ash_runes.rsi/runaash_14.png | Bin 0 -> 582 bytes .../ADT/Effects/ash_runes.rsi/runaash_15.png | Bin 0 -> 345 bytes .../ADT/Effects/ash_runes.rsi/runaash_16.png | Bin 0 -> 362 bytes .../ADT/Effects/ash_runes.rsi/runaash_17.png | Bin 0 -> 340 bytes .../ADT/Effects/ash_runes.rsi/runaash_18.png | Bin 0 -> 349 bytes .../ADT/Effects/ash_runes.rsi/runaash_19.png | Bin 0 -> 371 bytes .../ADT/Effects/ash_runes.rsi/runaash_2.png | Bin 0 -> 362 bytes .../ADT/Effects/ash_runes.rsi/runaash_20.png | Bin 0 -> 305 bytes .../ADT/Effects/ash_runes.rsi/runaash_21.png | Bin 0 -> 340 bytes .../ADT/Effects/ash_runes.rsi/runaash_22.png | Bin 0 -> 382 bytes .../ADT/Effects/ash_runes.rsi/runaash_23.png | Bin 0 -> 369 bytes .../ADT/Effects/ash_runes.rsi/runaash_24.png | Bin 0 -> 351 bytes .../ADT/Effects/ash_runes.rsi/runaash_25.png | Bin 0 -> 360 bytes .../ADT/Effects/ash_runes.rsi/runaash_26.png | Bin 0 -> 377 bytes .../ADT/Effects/ash_runes.rsi/runaash_27.png | Bin 0 -> 351 bytes .../ADT/Effects/ash_runes.rsi/runaash_28.png | Bin 0 -> 319 bytes .../ADT/Effects/ash_runes.rsi/runaash_29.png | Bin 0 -> 343 bytes .../ADT/Effects/ash_runes.rsi/runaash_3.png | Bin 0 -> 335 bytes .../ADT/Effects/ash_runes.rsi/runaash_30.png | Bin 0 -> 342 bytes .../ADT/Effects/ash_runes.rsi/runaash_31.png | Bin 0 -> 373 bytes .../ADT/Effects/ash_runes.rsi/runaash_32.png | Bin 0 -> 358 bytes .../ADT/Effects/ash_runes.rsi/runaash_33.png | Bin 0 -> 364 bytes .../ADT/Effects/ash_runes.rsi/runaash_34.png | Bin 0 -> 358 bytes .../ADT/Effects/ash_runes.rsi/runaash_35.png | Bin 0 -> 383 bytes .../ADT/Effects/ash_runes.rsi/runaash_36.png | Bin 0 -> 363 bytes .../ADT/Effects/ash_runes.rsi/runaash_4.png | Bin 0 -> 358 bytes .../ADT/Effects/ash_runes.rsi/runaash_5.png | Bin 0 -> 352 bytes .../ADT/Effects/ash_runes.rsi/runaash_6.png | Bin 0 -> 376 bytes .../ADT/Effects/ash_runes.rsi/runaash_7.png | Bin 0 -> 360 bytes .../ADT/Effects/ash_runes.rsi/runaash_8.png | Bin 0 -> 343 bytes .../ADT/Effects/ash_runes.rsi/runaash_9.png | Bin 0 -> 350 bytes .../Effects/ashwalker_rune.rsi/activate.png | Bin 0 -> 19012 bytes .../ADT/Effects/ashwalker_rune.rsi/meta.json | 59 +++++++++ .../ADT/Effects/ashwalker_rune.rsi/rune.png | Bin 0 -> 5659 bytes .../Lavaland/ashdrake_hide.rsi/icon.png | Bin 0 -> 504 bytes .../Lavaland/ashdrake_hide.rsi/meta.json | 14 ++ .../Lavaland/fireblossom.rsi/icon.png | Bin 0 -> 508 bytes .../Lavaland/fireblossom.rsi/meta.json | 14 ++ .../Specific/Lavaland/magma_gem.rsi/icon.png | Bin 0 -> 356 bytes .../Specific/Lavaland/magma_gem.rsi/meta.json | 14 ++ .../Specific/ash_flora.rsi/fireblossom1.png | Bin 0 -> 470 bytes .../Specific/ash_flora.rsi/fireblossom1p.png | Bin 0 -> 288 bytes .../Specific/ash_flora.rsi/fireblossom2.png | Bin 0 -> 468 bytes .../Specific/ash_flora.rsi/fireblossom2p.png | Bin 0 -> 271 bytes .../Specific/ash_flora.rsi/fireblossom3.png | Bin 0 -> 423 bytes .../Specific/ash_flora.rsi/fireblossom3p.png | Bin 0 -> 239 bytes .../Specific/ash_flora.rsi/fireblossom4.png | Bin 0 -> 457 bytes .../Specific/ash_flora.rsi/fireblossom4p.png | Bin 0 -> 280 bytes .../Specific/ash_flora.rsi/meta.json | 24 ++++ 55 files changed, 246 insertions(+) create mode 100644 Resources/Textures/ADT/Effects/ash_runes.rsi/meta.json create mode 100644 Resources/Textures/ADT/Effects/ash_runes.rsi/runaash_1.png create mode 100644 Resources/Textures/ADT/Effects/ash_runes.rsi/runaash_10.png create mode 100644 Resources/Textures/ADT/Effects/ash_runes.rsi/runaash_11.png create mode 100644 Resources/Textures/ADT/Effects/ash_runes.rsi/runaash_12.png create mode 100644 Resources/Textures/ADT/Effects/ash_runes.rsi/runaash_13.png create mode 100644 Resources/Textures/ADT/Effects/ash_runes.rsi/runaash_14.png create mode 100644 Resources/Textures/ADT/Effects/ash_runes.rsi/runaash_15.png create mode 100644 Resources/Textures/ADT/Effects/ash_runes.rsi/runaash_16.png create mode 100644 Resources/Textures/ADT/Effects/ash_runes.rsi/runaash_17.png create mode 100644 Resources/Textures/ADT/Effects/ash_runes.rsi/runaash_18.png create mode 100644 Resources/Textures/ADT/Effects/ash_runes.rsi/runaash_19.png create mode 100644 Resources/Textures/ADT/Effects/ash_runes.rsi/runaash_2.png create mode 100644 Resources/Textures/ADT/Effects/ash_runes.rsi/runaash_20.png create mode 100644 Resources/Textures/ADT/Effects/ash_runes.rsi/runaash_21.png create mode 100644 Resources/Textures/ADT/Effects/ash_runes.rsi/runaash_22.png create mode 100644 Resources/Textures/ADT/Effects/ash_runes.rsi/runaash_23.png create mode 100644 Resources/Textures/ADT/Effects/ash_runes.rsi/runaash_24.png create mode 100644 Resources/Textures/ADT/Effects/ash_runes.rsi/runaash_25.png create mode 100644 Resources/Textures/ADT/Effects/ash_runes.rsi/runaash_26.png create mode 100644 Resources/Textures/ADT/Effects/ash_runes.rsi/runaash_27.png create mode 100644 Resources/Textures/ADT/Effects/ash_runes.rsi/runaash_28.png create mode 100644 Resources/Textures/ADT/Effects/ash_runes.rsi/runaash_29.png create mode 100644 Resources/Textures/ADT/Effects/ash_runes.rsi/runaash_3.png create mode 100644 Resources/Textures/ADT/Effects/ash_runes.rsi/runaash_30.png create mode 100644 Resources/Textures/ADT/Effects/ash_runes.rsi/runaash_31.png create mode 100644 Resources/Textures/ADT/Effects/ash_runes.rsi/runaash_32.png create mode 100644 Resources/Textures/ADT/Effects/ash_runes.rsi/runaash_33.png create mode 100644 Resources/Textures/ADT/Effects/ash_runes.rsi/runaash_34.png create mode 100644 Resources/Textures/ADT/Effects/ash_runes.rsi/runaash_35.png create mode 100644 Resources/Textures/ADT/Effects/ash_runes.rsi/runaash_36.png create mode 100644 Resources/Textures/ADT/Effects/ash_runes.rsi/runaash_4.png create mode 100644 Resources/Textures/ADT/Effects/ash_runes.rsi/runaash_5.png create mode 100644 Resources/Textures/ADT/Effects/ash_runes.rsi/runaash_6.png create mode 100644 Resources/Textures/ADT/Effects/ash_runes.rsi/runaash_7.png create mode 100644 Resources/Textures/ADT/Effects/ash_runes.rsi/runaash_8.png create mode 100644 Resources/Textures/ADT/Effects/ash_runes.rsi/runaash_9.png create mode 100644 Resources/Textures/ADT/Effects/ashwalker_rune.rsi/activate.png create mode 100644 Resources/Textures/ADT/Effects/ashwalker_rune.rsi/meta.json create mode 100644 Resources/Textures/ADT/Effects/ashwalker_rune.rsi/rune.png create mode 100644 Resources/Textures/ADT/Objects/Specific/Lavaland/ashdrake_hide.rsi/icon.png create mode 100644 Resources/Textures/ADT/Objects/Specific/Lavaland/ashdrake_hide.rsi/meta.json create mode 100644 Resources/Textures/ADT/Objects/Specific/Lavaland/fireblossom.rsi/icon.png create mode 100644 Resources/Textures/ADT/Objects/Specific/Lavaland/fireblossom.rsi/meta.json create mode 100644 Resources/Textures/ADT/Objects/Specific/Lavaland/magma_gem.rsi/icon.png create mode 100644 Resources/Textures/ADT/Objects/Specific/Lavaland/magma_gem.rsi/meta.json create mode 100644 Resources/Textures/ADT/Structures/Specific/ash_flora.rsi/fireblossom1.png create mode 100644 Resources/Textures/ADT/Structures/Specific/ash_flora.rsi/fireblossom1p.png create mode 100644 Resources/Textures/ADT/Structures/Specific/ash_flora.rsi/fireblossom2.png create mode 100644 Resources/Textures/ADT/Structures/Specific/ash_flora.rsi/fireblossom2p.png create mode 100644 Resources/Textures/ADT/Structures/Specific/ash_flora.rsi/fireblossom3.png create mode 100644 Resources/Textures/ADT/Structures/Specific/ash_flora.rsi/fireblossom3p.png create mode 100644 Resources/Textures/ADT/Structures/Specific/ash_flora.rsi/fireblossom4.png create mode 100644 Resources/Textures/ADT/Structures/Specific/ash_flora.rsi/fireblossom4p.png diff --git a/Resources/Textures/ADT/Effects/ash_runes.rsi/meta.json b/Resources/Textures/ADT/Effects/ash_runes.rsi/meta.json new file mode 100644 index 00000000000..14133844e18 --- /dev/null +++ b/Resources/Textures/ADT/Effects/ash_runes.rsi/meta.json @@ -0,0 +1,121 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from Paradise at https://github.com/ParadiseSS13/Paradise/blob/master/icons/effects/ash_runes.dmi", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "runaash_1" + }, + { + "name": "runaash_2" + }, + { + "name": "runaash_3" + }, + { + "name": "runaash_4" + }, + { + "name": "runaash_5" + }, + { + "name": "runaash_6" + }, + { + "name": "runaash_7" + }, + { + "name": "runaash_8" + }, + { + "name": "runaash_9" + }, + { + "name": "runaash_10" + }, + { + "name": "runaash_11" + }, + { + "name": "runaash_12" + }, + { + "name": "runaash_13", + "directions": 8 + }, + { + "name": "runaash_14", + "directions": 8 + }, + { + "name": "runaash_15" + }, + { + "name": "runaash_16" + }, + { + "name": "runaash_17" + }, + { + "name": "runaash_18" + }, + { + "name": "runaash_19" + }, + { + "name": "runaash_20" + }, + { + "name": "runaash_21" + }, + { + "name": "runaash_22" + }, + { + "name": "runaash_23" + }, + { + "name": "runaash_24" + }, + { + "name": "runaash_25" + }, + { + "name": "runaash_26" + }, + { + "name": "runaash_27" + }, + { + "name": "runaash_28" + }, + { + "name": "runaash_29" + }, + { + "name": "runaash_30" + }, + { + "name": "runaash_31" + }, + { + "name": "runaash_32" + }, + { + "name": "runaash_33" + }, + { + "name": "runaash_34" + }, + { + "name": "runaash_35" + }, + { + "name": "runaash_36" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/ADT/Effects/ash_runes.rsi/runaash_1.png b/Resources/Textures/ADT/Effects/ash_runes.rsi/runaash_1.png new file mode 100644 index 0000000000000000000000000000000000000000..6cb553edb0382fb4eb117313fbf00125a999a123 GIT binary patch literal 326 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?4jBOuH;Rhv&5DEPzE z#WAE}&f6(xd7B&rS`|0)3iGKfx|YBgXOqA@Pp7e&wPFK{f7k}!faXP=?801;wRvU_ z&hIj2S)}%vZ-dV1Gv@VQn)JOHSR5Ew9(-rKmKlFO{qpas4L90E7XM)TK2>Y)^SulP zla92?^|vv)d&=BhxAeQrN|xiFpQiE$N~ur1OFgC%&ff;5pD z`~wd{3RxM~w+u1a>?Dg4*tvvF7Up|z-iTxM=ZXLkAOZ{zAWJ8DK27X7Jrtv#0#Mx^ zPX&m4x7K|i!~pxe{4^`A8w9ahF4Syu6od52fPpa}biSXqS_%;)ganeM>J1?si5EaM zcy)FIg6>J2Z~~w)HKaOUuJ%bvaSw{Q6TamHKy$8!yMb-sAtZ==muO!XoB&2yVb8od zRKs?-B3()E5b|*}DI-TP8jLF#0IF^rfWkUTO0)$gjK$Y?K=Dmzy4wi=b8k}58zF?s zv%E)8ZPb>BpaA$CXnW`LtrI|A00000NkvXX Hu0mjfy$ysk literal 0 HcmV?d00001 diff --git a/Resources/Textures/ADT/Effects/ash_runes.rsi/runaash_11.png b/Resources/Textures/ADT/Effects/ash_runes.rsi/runaash_11.png new file mode 100644 index 0000000000000000000000000000000000000000..608e6b9b18470f29dd2940095f8b69020722b95c GIT binary patch literal 343 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?4jBOuH;Rhv(mfq{|J z)5S5QV$R#iXE_f!2(+3fNIUU0)tg2%i1Tk`^q)4Nne|Bm=e#uvzDwBZndDfwBP$yl z6>m!Na%SquD~qp9^T}t(<8$t^@SgL$cKILSg=`$2TuKc# zcYmytE;MeM@F&`o=}6z~%wO!x558GwehYX~DP=C?6w9RP)nIQV)E_guN2;OwnRm9k z=@NxlThoS;rAunF7&;|;9cMTF;I#-hdG+<`VTn0GdxbdmHt&1Il3{%F{kBK<92s&y l^IY93t-vG^4RZVkR%w?0_V{x1nZS@@@O1TaS?83{1OUHVf|&pS literal 0 HcmV?d00001 diff --git a/Resources/Textures/ADT/Effects/ash_runes.rsi/runaash_12.png b/Resources/Textures/ADT/Effects/ash_runes.rsi/runaash_12.png new file mode 100644 index 0000000000000000000000000000000000000000..0a6eb0e897868febfe0bf1765426ce6fa8f72aea GIT binary patch literal 306 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?4jBOuH;Rhv&5DEP$F z#WAE}&fBTGc@H`8wDEVEP6%@0>X+Pf#CJlMV32_Wm)nA*rsyWg3QrLa$s;Ew_V_q0 z+3e|&T)ywozxUrC=e<+oV>Vy_p#a7fBldau*R-dLw%?3r@c8qsqHfOp{^$!19Sl2u z=v~R*c*?rqRKV7T?qIo7EE~9Hcxx##IXpjY@^Vga>bdFJlf7>#GClC~Y&eoBpuL}g zvt&AP;Q8YzGSR5xpfc{c#6S*`2Y`tF~b=&#%jI~8?4^GyM0$_zu)_hH$RqM zT9?l^f32K(x0~zaFbAm&yEEOJpZ+VoK4qP9$FWfM7wys0+GOt^kCk7yUhn(**>0(u z&o^8;@H_E)T-<%W_s_Tc=h-X&dn(X(@cH3$;jL|FxdeV!XMUKKR@88#=+X!8=I`g` zr(NUH;I)^p`DJ&Gp%>_Ye>?x$RkXLw&-Yx{Vs(}A5_8z@xU!$;Pg!s${ivMr<9Gk_ z-RF#xB1#*!e4oB;-lY$dO@6rTU&VL9p7Fm;z|-4)FZsT&TmN}E`^G;9y+5DfE7+rC r(*M7&O_CvvVFqIYTf^XEd}F=j?b)w|n&Z~Kf3@hQ8tV(bI+@=;Zpogru>5g0ZMW{uH&32P3$FUQsqgV!hhMi>FjPL@&ThXi{B=-zOGMYB zUDvmNKU^eooX0T7z`-u>S%R73sq<`evg^+^S%?cdSx+pDv-|OAikChhgv)rWr%3MNWe$l6++U(okuUt{Rwyk#-~%~x?%Ta> z{<$T#3T)Q%3qDm}4D7qr^83lB$Fo0LsQ-_FZDkDAO8vSG~Unrl9*vKctq~U YtzF5<`RV6#V8USVboFyt=akR{0E9%{-~a#s literal 0 HcmV?d00001 diff --git a/Resources/Textures/ADT/Effects/ash_runes.rsi/runaash_15.png b/Resources/Textures/ADT/Effects/ash_runes.rsi/runaash_15.png new file mode 100644 index 0000000000000000000000000000000000000000..454308c80bffd6194b8532cf5b7e7eae3b6da8e5 GIT binary patch literal 345 zcmV-f0jBfXuUfq|cXYZ$F8ZmOwZ=aJxU=F0_Rx1SePk zrkZnwvi|A8~+uRz+^Y{0zHFnHNr~SdO-vLO$QKo zDHTI;$etrC0;p?Wwz5Ne5scc+9YHpL2?Xm*Ln}b04W%ODhrT; zh5<4IKanVqGKk^Dy2MBk*paO?cTFyi<@?_G*%{NoApim(00JNYy#exMt-8in%LUE0 z$5BuKF8+AF>i79HYH~!G?UXHqGXRQ1<>`E(eO}c?(wG$IMAc^wDO(6904|P&k>^RI z+HX3K4~2F6odFQ0DzqKS(|A%B$5!yTcK}vTR5TvowwqglZ|DMYuK;F1A*(e3@np!> z69E8p+qGIAL*eV~?z~p-djJqHo>okaFf@J0DOi32*BU~Z)fVCgAMTTbN~PV07*qo IM6N<$f(ufR5dZ)H literal 0 HcmV?d00001 diff --git a/Resources/Textures/ADT/Effects/ash_runes.rsi/runaash_17.png b/Resources/Textures/ADT/Effects/ash_runes.rsi/runaash_17.png new file mode 100644 index 0000000000000000000000000000000000000000..c78e4c1f50d2461ef647c8bf03faff665fbcf266 GIT binary patch literal 340 zcmV-a0jvIrP)E1XWq^ZlAfgi3ZMWA@D)H|h7Q)rD0_Z0+baDD z0GOlkd^WwW`@=D*%e5P?c5H}N0KPdIVnrknVt|l2Xk)KwVGxx+#IWb;fw|V8^bE?b2I=7V)HE6XPT8x06>p{Qw7brIr*Paj6()<5c)@Q zdJzB!HizE(^WN{dWF)fzXz*;lcnKhV4ZBdiDqLL91!0000T2mj2qz;=lkx3f2wl`r6K&zMVXgm!V1io3-`5Iqwf1n4iCV z+v_9~HExEcCV@lj9j^;M?+Ri2*BX<+7*m?xd}v3m-m&LQGIr0-r8G=v+c}??A?8A8 z;=J|SOA~kaFVdQ&MBb@0G>L8TL1t6 literal 0 HcmV?d00001 diff --git a/Resources/Textures/ADT/Effects/ash_runes.rsi/runaash_19.png b/Resources/Textures/ADT/Effects/ash_runes.rsi/runaash_19.png new file mode 100644 index 0000000000000000000000000000000000000000..e7773df281edbb10310fbf9a74e24a24e1937c5e GIT binary patch literal 371 zcmV-(0gV2MP)GC*1;NR<&%FaSkHpke}+ zV21o4rHI5JjvmoPCkqsOK842D7;NA^o}bU2nTaC;M1Tko0lWdK^WLIOFLg2rz~lKc z>*b;Y*=;vwbu5BFyaBSRP4d)Ox^K#p4S^7O01#*iWJrxXom>9A8bDuMZ}(0OTmuBj zF;xJ|s$%dxF#u0M32BUsIwnK_ZgTW}WNyD>h%qJ&nu1>+A7f6j31PrK^U)ZopaMX$ z^5VmnBM0HrV@$0BfItCqt04bdtO6hNc>(ZsPgRgZxaLy_;2>Ofv@VEmi58V&w5}Qw z`9%O6ghNoj?*^rM9+2#gK>$#pDGwGaK)N*tD}baSTe8X&{QW$j84+M|fH&N;tE`&< R=kovn002ovPDHLkV1hC&j7|Um literal 0 HcmV?d00001 diff --git a/Resources/Textures/ADT/Effects/ash_runes.rsi/runaash_2.png b/Resources/Textures/ADT/Effects/ash_runes.rsi/runaash_2.png new file mode 100644 index 0000000000000000000000000000000000000000..66ecf982db8b4082f3f5bcb7002ec1e54e5349e2 GIT binary patch literal 362 zcmV-w0hRuVP)<{5 zO;Cd(i3bx4!OWT=<76c}xWtg`zbwlpJ8%BX1ZL{b@&F#d156VjPv80y z6##EH2!LC^+ivuFxz>6uvvoUq z4^SAMF}N~n4}dURD1}nh$Jw!b260r2`e3jFrY!k*It9SXZ}*3;H9doOAnXxI8LR;4 z?1RmDs=9Hcf(DejAS!{W?l_VZu*^d1X0!sp%lU=h0zgT)J3j%KfT$aMFPR1_0H`fk z+7yYl^}SDe17Kr10RZ*cZ~8WX3r+zfa1u@Phr|PT01x0&FQ7GgZ(=HgKmY&$07*qo IM6N<$f>fc3zW@LL literal 0 HcmV?d00001 diff --git a/Resources/Textures/ADT/Effects/ash_runes.rsi/runaash_20.png b/Resources/Textures/ADT/Effects/ash_runes.rsi/runaash_20.png new file mode 100644 index 0000000000000000000000000000000000000000..ef4c5a5dce07fd20ebb36fbcbe67a151cacb904a GIT binary patch literal 305 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?4jBOuH;Rhv&5DEQdZ z#WAE}&f6=yc@G%~us!HLBIP0C@z9W&d5LGD*n%XME}jWZfiO7X8gyx1D|d z>vBg%iOL&WqCfsT`Yelub;jA1AK8AG$g@1SJcsAN%k`(9Y<+(9cf=!}lDXdx_AByD z=VZ!Q6Y%$ZLF*o-nL1V1ZxzHf2qXfXWMK7xv*=`mf~<4U37~fwJYD@<);T3K0RY;; Bceell literal 0 HcmV?d00001 diff --git a/Resources/Textures/ADT/Effects/ash_runes.rsi/runaash_21.png b/Resources/Textures/ADT/Effects/ash_runes.rsi/runaash_21.png new file mode 100644 index 0000000000000000000000000000000000000000..45d368f4abd8c7a67dd354403604306bc0c526e1 GIT binary patch literal 340 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?4jBOuH;Rhv(mfq{|D z)5S5QV$Rzsr+J$k1lkNY@(S~*?aSK0sr4a+Q%*Ti{UM_NO8zI?WpYGSy0g|1`timK~h%Ebdl(}pmtWha`mYukObni`elF{r5}E)qr+|n6 literal 0 HcmV?d00001 diff --git a/Resources/Textures/ADT/Effects/ash_runes.rsi/runaash_22.png b/Resources/Textures/ADT/Effects/ash_runes.rsi/runaash_22.png new file mode 100644 index 0000000000000000000000000000000000000000..558869eca3117db86bdd2447ade88bb7724f8ec2 GIT binary patch literal 382 zcmV-^0fGLBP)<{5KFI2yz+ z*LW6-bW<21ya80v>113U_lKiX9w&f0QN(b$jnsAL-Ac&Ug8`6~M61Mwb{+hO1vcGq z0;oJKm`$86SEkNIFn~)?7fd#I0l;G%sY2MI6G0bD;S3-TA}k>oU8U3oo+Y)9q}Nj* zCxb|yGST$EYH;nAtx$u z6V#9oQVx+Q#LcuxJF z0Kgo^+s(S1yWZ}eh<36If(<~;mxqgQ&UZmr1Jp%KMa`j;$bAt7vPdOue6JONsz%9- znxkG@prh0kWyw);AlN;C=#h}Q*SI(PViW+nJuszfNCpYDL9hU*IjUDxLohXg*Z?p@ zch{NgQTNB=`TC4)DOdr(G!DJ5VP2V2KuynO$$pqEQ0JO9TbsGkpiKy4#3>?AB3>JS zF7<9gR0IfIBN21m=IF5i6hr}_yPSR<`-pW6t3R3M@BL^1L&yO*fXM;g?9rAv8?9yX P00000NkvXXu0mjf-hz~D literal 0 HcmV?d00001 diff --git a/Resources/Textures/ADT/Effects/ash_runes.rsi/runaash_24.png b/Resources/Textures/ADT/Effects/ash_runes.rsi/runaash_24.png new file mode 100644 index 0000000000000000000000000000000000000000..d1d0f2532080f2d99895a891acf8527eb6e94b56 GIT binary patch literal 351 zcmV-l0igbgP)UKWAmn{BZw4|nKUM-r014oK0g8NNQD>8}$&cs3*8#{J zs`e`z3lR-)sG5gi^E7XR!1Ho3H`DDY2-bTCU|N?ud%50T5Cp}M$`YbWe-fyi?$rRu z5L1wts{+7~qL7FMKqu!GFARYQBoOQg;N*(j*iR6Eq_dQW1pw2!%&aqdhwzR4Jx~RJ zC}V;^^^NHr=_Eu;NEx>on@B}pf#lTG0O%UD%*6m0eaM{hchQ`60jPV9B-3F7Y}Q%u x<1yWf0J^&Bil;X~m)ySqzjJkfSS5f2a0eDOehI?sIv4-|002ovPDHLkV1k;ojHmzr literal 0 HcmV?d00001 diff --git a/Resources/Textures/ADT/Effects/ash_runes.rsi/runaash_25.png b/Resources/Textures/ADT/Effects/ash_runes.rsi/runaash_25.png new file mode 100644 index 0000000000000000000000000000000000000000..ea9c7c2521281cbad566e30c96b4c7c1f58388e6 GIT binary patch literal 360 zcmV-u0hj)XP)dvo`_{=ea^=kQe zYjgleZMU{F?^`@PleuL6VgSq)oxWSVwre9c7XxsiQyy_U8f*F@r_(S5B?dqW=w908 z`Eu=&i2@i>-;(nBkb(gG6u9`3^4i!!s$NF^ag=sW$plhy5u;jB|x3Oo)Foh zs^5koKcOf9KWZq%JPLpthnhwKJpX#6@ykXXKwAkQ0o(yKUV!>Lb&&G_0000f0E`02(y79@oX@O#(n}e8 z2Y@h%u2;$6-a1dz?f!7WumMP%gcpaa^M>?KaoQ*w1PeeH=LnOXizd#}NbPsq&#W}= zaRTUWm%wsOlmm!qogY=-3no!LM~1w{0-*Ro+$Q`jXm+_60CDUdY!;W~h6uo9zQjiX zNR!MfK))QRBcjeRB3I~}=3W8%H*fQ!=`^tL3nu$ z$pa>#wmj`6$p(r}uv zldJ$>g5NBK2{(a}fK1=$9{dNjzIKW{&@7&v+ zy2?rkhu(U5vqpt9wEvHD4`Sr&d-zXP@BxEH`~8552@K(~CmF9Stf^-dzq9UM4YytR zq#XW`*{Rly^YebFMjhDNV(_S&!}-JS&!V=B7nw@lbA;~RwSe`D#hR@*Bxbz~Dokfw zbFVFbwc0N3gG}p6y@eEo1yn!q7wo*3!n)&Ik~o7@WaE{SOpy!98_kzKiHpCZWVH$C Oc?M5cKbLh*2~7Ys^?Q;4 literal 0 HcmV?d00001 diff --git a/Resources/Textures/ADT/Effects/ash_runes.rsi/runaash_29.png b/Resources/Textures/ADT/Effects/ash_runes.rsi/runaash_29.png new file mode 100644 index 0000000000000000000000000000000000000000..e50f55ed70acd8e61055884a301453e4665dc15a GIT binary patch literal 343 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?4jBOuH;Rhv(mfq{|J z)5S5QV$R!XzFdb41X_bXNHuXE+;3dbIq$$!_kxSeJ3es4Rx<7`c+6PER?nr^BBx@+ zdoXjhiExrYBAZvjuNgm$^m%1F<=L4H7(j@H@y+FpbNtoU##Cuce!+0}SpW0Yk&5AO zt_eA3tmQo;?I0ebEB>ftpUKWOD}=xLdGIuDb((UlDvn{tgPh6V%UBd7n2OBSnm3%x z58p9sGGj^c2dQhX-`a6-^g1&8m)<$Gfb+pd?fA2Hua5~_m|$h7e&D&l$_+o)NSBu$ zWO(&CbAAGk<3~%517a2Jdh-`E>}V=tXJO{~>9bY+6idSQkX(a?U2U)9=2clN_F-7C mNl88P|L^(+Mu`W~AK8wJcWSS({Ba%_QVgE1elF{r5}E)6NP=Jh literal 0 HcmV?d00001 diff --git a/Resources/Textures/ADT/Effects/ash_runes.rsi/runaash_3.png b/Resources/Textures/ADT/Effects/ash_runes.rsi/runaash_3.png new file mode 100644 index 0000000000000000000000000000000000000000..f52467bfcc29ecff5a3da0f0e0af2c8e9bb4eca8 GIT binary patch literal 335 zcmV-V0kHmwP)C>Vi?39>|H z;7_7J${;~c(SdOs=S&i4?lqC@liwHLJCEqkQUC=|fZhRi$+( hB?V9b1yBG5cmjI=YVe2O_Wu9?002ovPDHLkV1kJSgQoxh literal 0 HcmV?d00001 diff --git a/Resources/Textures/ADT/Effects/ash_runes.rsi/runaash_30.png b/Resources/Textures/ADT/Effects/ash_runes.rsi/runaash_30.png new file mode 100644 index 0000000000000000000000000000000000000000..4b222c4cb20d4814ebd9b504d01def02c06fab35 GIT binary patch literal 342 zcmV-c0jd6pP)fFPp z6p{?MHQms#`%eNO5=0chH+F#3rmzs4*CPgC(bMrTd~2;|E`n1}41nU0-R0rk6-7XN z&}abceyS)=2iLsbpV^usz|`*D=CB5S8?g$2x!q&NKV0~EGypU8?%_Dn;6zjb+~CC2 z0pI7f4^4pvkLui7HUN(oXDxU4A^=Tj3ciz|3ZPSKP)RCt{2l)DYWKn#Y1#2QE`ka*3&05lZG0#uAZ!2l^3fr<&T zL}uU-i2{j10=~%Lm^{w8QxMX*3Asb@=ik5G4}KgTzyo-I{|1P+^9+BhebVb3;Cj33 z=Xe-unAvm^jMfJch!wyte&}S83f@Yj$4w@IaN>b7kWK-3NK_C5P~$;R^MMke0(ikR zL;#o^6P(T$ea0sM&Yc6$tVm?Isf>_7h%D$RbdQ((qhH2NE^=%Nf03e_;J_&eV zHYrVEZ9=++oBC}HK&$2FZIX)ts*4tfCqR225yh= TrT=mR00000NkvXXu0mjf5K5P0 literal 0 HcmV?d00001 diff --git a/Resources/Textures/ADT/Effects/ash_runes.rsi/runaash_32.png b/Resources/Textures/ADT/Effects/ash_runes.rsi/runaash_32.png new file mode 100644 index 0000000000000000000000000000000000000000..5622feebea68fc512558cc61dbdb4704feb818a6 GIT binary patch literal 358 zcmV-s0h#`ZP)29*F-{5hCHw4kI<|FJ$wGNR6ij-2eap07*qoM6N<$ Eg2EGy$^ZZW literal 0 HcmV?d00001 diff --git a/Resources/Textures/ADT/Effects/ash_runes.rsi/runaash_33.png b/Resources/Textures/ADT/Effects/ash_runes.rsi/runaash_33.png new file mode 100644 index 0000000000000000000000000000000000000000..4779a5c5a362a9d14fadf72e9720a5a851768c9b GIT binary patch literal 364 zcmV-y0h9iTP);UJiT#X50-lByw@e*-fq)32SjVWj>n2jBo4fCCsVKpc#V*~G8c!6Eg2 z27u0&i+Q;|oi9p;loN4I$+SfoZq3WtElGdL9b^4%VUn96J762Q)cp5<3HsP8>8SxbvpD zAPRsGG-9j`+guO_Fok!%-K^`qF3!aO5F*kE`@7-(kT?JbAf*R>m6$7$Ag0d%0000< KMNUMnLSTYqD~rbf literal 0 HcmV?d00001 diff --git a/Resources/Textures/ADT/Effects/ash_runes.rsi/runaash_34.png b/Resources/Textures/ADT/Effects/ash_runes.rsi/runaash_34.png new file mode 100644 index 0000000000000000000000000000000000000000..defd1094b2f5adaf569e563ccc6075fac0e11cac GIT binary patch literal 358 zcmV-s0h#`ZP)Vl;glLRxrV=XDA*^<@Qs01yBIKmZT}T+(^7TEy1z^jbzA z2e6rLH|x&*{qa;qwrhMqyaA{=HC!HVZ-cTo7p^eB%1@1+GXcOfcfAmFF6u}>r&zf09S%BPzW^liAD@ygP`N4Ie;DZ$taZQ z9H3nQu^W3!WdnfJYH=OoRc}KZjRNSZ1qj`3I8?p&6wqohax@0noVyc% z3W4S(V@~zf00<%Tv`fI(+z9}LO*wYg2mctMXbPtHLNu(sye=a8KfqPa08nKitLXqj dDFRFm@B-&fv%rH{4eI~^002ovPDHLkV1o97nlk_Z literal 0 HcmV?d00001 diff --git a/Resources/Textures/ADT/Effects/ash_runes.rsi/runaash_36.png b/Resources/Textures/ADT/Effects/ash_runes.rsi/runaash_36.png new file mode 100644 index 0000000000000000000000000000000000000000..a6519040bd818134c86292558f6acb439d54c346 GIT binary patch literal 363 zcmV-x0hIoUP)CFJRRB>Xy+Z2%s^mOm z$^0EgY5+R{)CKYOcvkoK!-hMb0;p6D;WjG+@t$$&w>nJ$RtScx<$_^003=HyPU(V` zDG=snva$))DseOZ4M0_0m#hI`(wqJ-jv`gY9k>+NMl+{-01_^*UishwC>?Vn0EB=s z`#uvwt@axO{4%0$L1TcXl;iKw`IZqt+leUFap@MoraVCJ052-3chgrJ!?^$e002ov JPDHLkV1iKBi-rII literal 0 HcmV?d00001 diff --git a/Resources/Textures/ADT/Effects/ash_runes.rsi/runaash_4.png b/Resources/Textures/ADT/Effects/ash_runes.rsi/runaash_4.png new file mode 100644 index 0000000000000000000000000000000000000000..24a5a5e6f93040bd187cf4225b9d538295c43235 GIT binary patch literal 358 zcmV-s0h#`ZP)?^1^Jp-PUQF9-LsvM`f)^n2oM2=4X{tg2A=cjq%of!@}yS) zF1%VU)b0L|EENu*v$er72t&*^#{{4NsG7_B0pQ{w%)hbCbpn88w~1r+A-xX*KmiOC ze`mr@0k}A3N!!sTyjwuaj^b#-^W`e8f)ju`+a}Ii0q;V6-~_;|sCX^xztzM55Hus6 zwXN)-Rd53Eg}68Z6{oGCCn3Dw>Cy|L)m?x(^b07*qoM6N<$ Ef}Bv0Z~y=R literal 0 HcmV?d00001 diff --git a/Resources/Textures/ADT/Effects/ash_runes.rsi/runaash_5.png b/Resources/Textures/ADT/Effects/ash_runes.rsi/runaash_5.png new file mode 100644 index 0000000000000000000000000000000000000000..203fcf715bea22f76edc391f55d8e9e7aecf78ee GIT binary patch literal 352 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?4jBOuH;Rhv(mfq_xT z)5S5QV$R#CXE_f!2(+3fNIUU0)tlaM(fW|WX&KSL?)@Q!`PqY`OxxJ%ndDkTHvQ^Y zJlXWo5f;&zjRHoI75Dd5&faonx;LYU1Ea_T)dMFKXoR}VYCSb1{s5=tDnm{r-UW|FbROm literal 0 HcmV?d00001 diff --git a/Resources/Textures/ADT/Effects/ash_runes.rsi/runaash_6.png b/Resources/Textures/ADT/Effects/ash_runes.rsi/runaash_6.png new file mode 100644 index 0000000000000000000000000000000000000000..6a4056f6662b3703489e3ad8ab533d7e7e93c42c GIT binary patch literal 376 zcmV-;0f+vHP)0)33Pzw}f-I34 zcu5pU8N~3%I&pCVJ|`hGz9#a;y8pYE$Lh}(00KY&@B-K+k)BOrmF)A;-~c4PT+Cmm zyyk~p?~n4k%?dG~2!M-EH-}1a?$6SdHusg5LUft|2y!U220l}fLKMRZz)O5OUrJHe z4A^aI4Pcj^&IDmHR+`RsMLGkZkGJDmQ$U>2UxMIw+lV^>V0J(bLH2Hmtn6L@-wbQV zTVnr5%Us(a2Cz#GYibFB(7d=-QUt*Ji@@;l%pt;k%EO!h_Hdc3qlyS+$Y(=3kga9_ zf>|2ZGW8V~0q|YN&>8Xi%2DZieFr!Mi6HY&B0qTtnn0TN-TWK)9q7XXKmZ5;0pJN| W!o9=WTX!J<0000H#%3Z7XK3g-}NZ2+m z-{|XY&W59rC$lzeYMG*aM1g_nV074S_6N56Dy6iGCWHzron9s6x>xPt9wvq2DN+BN zb6B;Mey18S#GFZ;HmR|am-ppUNw58ZMJ$^tvlcU|a7^E6oA>nc5y@bOWQLde?3cc> zgxtI=8+MLim)wQkSW9W2)T_*gjZWW^ImdKI;Vst E09sv*E&u=k literal 0 HcmV?d00001 diff --git a/Resources/Textures/ADT/Effects/ash_runes.rsi/runaash_8.png b/Resources/Textures/ADT/Effects/ash_runes.rsi/runaash_8.png new file mode 100644 index 0000000000000000000000000000000000000000..f62f10e242dd0903b0fc49259d16ae53803d57d6 GIT binary patch literal 343 zcmV-d0jU0oP)!?phe p|B4<&p-1vJlQ01!fCTVY0571Yb$XPUk8}V4002ovPDHLkV1f-qg|+|y literal 0 HcmV?d00001 diff --git a/Resources/Textures/ADT/Effects/ash_runes.rsi/runaash_9.png b/Resources/Textures/ADT/Effects/ash_runes.rsi/runaash_9.png new file mode 100644 index 0000000000000000000000000000000000000000..67ba9aa4743090fadfdb3ca3790c40c98e1d64e8 GIT binary patch literal 350 zcmV-k0iphhP)s12= zUylDA7lHsFX14(WqzrKD|HhCCR@3Og@@g{jegM#4h{ARnN#A5d1t`utgPEsr)gfzs zHOCE>1Grdc%J?=PT7uv2fJOtLOW{N%sGQW>JHgIJGyod}{UF w4X4_)BKjTx9JQ%Ub+U*$31L?y00JNYFQg1|{fM&Po&W#<07*qoM6N<$f*vP_!2kdN literal 0 HcmV?d00001 diff --git a/Resources/Textures/ADT/Effects/ashwalker_rune.rsi/activate.png b/Resources/Textures/ADT/Effects/ashwalker_rune.rsi/activate.png new file mode 100644 index 0000000000000000000000000000000000000000..0a3b56f70983ae9837c0676c3bd8bccc1d111cb1 GIT binary patch literal 19012 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 M07*qoM6N<$g8D3+j{pDw literal 0 HcmV?d00001 diff --git a/Resources/Textures/ADT/Effects/ashwalker_rune.rsi/meta.json b/Resources/Textures/ADT/Effects/ashwalker_rune.rsi/meta.json new file mode 100644 index 00000000000..4637b20556a --- /dev/null +++ b/Resources/Textures/ADT/Effects/ashwalker_rune.rsi/meta.json @@ -0,0 +1,59 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from Paradise at https://github.com/ParadiseSS13/Paradise/blob/master/icons/effects/ashwalker_rune.dmi", + "size": { + "x": 96, + "y": 96 + }, + "states": [ + { + "name": "rune", + "delays": [ + [ + 2.5, + 1.5, + 3, + 1.5 + ] + ] + }, + { + "name": "activate", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/ADT/Effects/ashwalker_rune.rsi/rune.png b/Resources/Textures/ADT/Effects/ashwalker_rune.rsi/rune.png new file mode 100644 index 0000000000000000000000000000000000000000..b54e8bb1db384b9543010a18a88c924f3e00a3d8 GIT binary patch literal 5659 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 B@{<4n literal 0 HcmV?d00001 diff --git a/Resources/Textures/ADT/Objects/Specific/Lavaland/ashdrake_hide.rsi/icon.png b/Resources/Textures/ADT/Objects/Specific/Lavaland/ashdrake_hide.rsi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..4fa0380d61995c75097b0636aab4a242a408c515 GIT binary patch literal 504 zcmVhtE*r|6{! z5}HFO2uTI03Wbt7ZbnzpxGJR(90=LnY%<^c`@7^?{If=Y5nu$k3;@Tnj&b9eI?>8G{nPgEH-|eeeQ;)*6;KJpg9r?Arr$~ zHN|{2pSD(^GXTvu{vkDyYc%Hi*ALgY$7+P=1i&+g2?V2EB+ZeQ=2$}oxMyL-!fAle z22hh%&ld)34G z%K_WYUJC$1N;ggEhB74^jAf@8)(gn;*$=u0kbXHc@-cgXWrx@YY(lEdTnm845Pw`f zYu#3n1y`BUpFAP%6;ePLC`wmG2J#P$4*{i62g~_dt}B>Xf|`Kmk$6 uIRRBKmoCPg0NQ|t=raD2jQ}IS5d8w4QVjej&s*RC0000(k@d*bTG0AB1rJmp$<`(E7lmK7-icX5hfA1w3D?BV_9o43Py z@yBujTmTo~e*(NLLZ`83EF|Xfd;t5W8HMWDTvWGeX#h`UU}!#sM*SHdoTH+71rz}- zoYX|!dxW+i93R0$x(I*Jtkby^UY7^I)zSclFQME|LchzJ^YB|gQ?iu- y3#2vuzX~8jE`VczPMp7E06YJDQUE$B7vK}PB(;!Q4>))L00001xPc+E$*CZ(hc!dIK+3~O{BXglbj}k(Z>Rp! zb}RVKqx?p!q`}W+_xYZ$61SMDg!N%a}>gTe~DWM4fo8E{` literal 0 HcmV?d00001 diff --git a/Resources/Textures/ADT/Objects/Specific/Lavaland/magma_gem.rsi/meta.json b/Resources/Textures/ADT/Objects/Specific/Lavaland/magma_gem.rsi/meta.json new file mode 100644 index 00000000000..294935f4e57 --- /dev/null +++ b/Resources/Textures/ADT/Objects/Specific/Lavaland/magma_gem.rsi/meta.json @@ -0,0 +1,14 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from Paradise at https://github.com/ParadiseSS13/Paradise/blob/master/icons/obj/lavaland/gems.dmi", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/ADT/Structures/Specific/ash_flora.rsi/fireblossom1.png b/Resources/Textures/ADT/Structures/Specific/ash_flora.rsi/fireblossom1.png new file mode 100644 index 0000000000000000000000000000000000000000..77e70aa4df284b560d19248c73fb6bae8db4b6b6 GIT binary patch literal 470 zcmV;{0V)28P)QJgU#UGV|2o^dOba8VMge&GuE1PB2_03`rDm!-Y4^GI_X2!J^aTCG~n$oCw-EP@7(p#&iXz^1Vg;AEqKyCq=q z5IEYk@GhV%DS%qTsMauNh_Q^ob15JI)=(yam=Gwhu{qF}NFX^Lg$aX3Z{*7$1(2#D zVqOSJE@-wXP(C$)k^q-QRZ3m(dT%)6W;_e-fLj4#xIh3n%_cz3enmVg)6YMm^`Zq;{Rq%*WxVq3r_Z>PcccN@src{+ z3~Jb#h}L6UEBT64DWm}QXXE4=xOLZa8nJn^v3IU-0NxLJ)4cOGY+ox-QO}O!PD{}> zfcGd?X-6r5Zu;F90M>V#i=PJq;J2gz+NIygN?yJb{#FJ;fPV?_0bkOf3|S}gr2qf` M07*qoM6N<$f?QY-w0Bfx-D?FMrBw^%o2^cFaHbd>3uLcLECs516D(q79C95dF@IpSw+J~mX`XOf g7zfbp5mpQgH~xgn#K+~l0s4-?)78&qol`;+01zf5U>}q5Uc_U5|9|ofk7^Ch3FATkRnmV9;h$^gADCVN3syTU~Cg^d8N13uq~cm(9KUt(OwEt{tp!>m047mhN7 z@(8GT+Rh^bMOn4xLmx)c z0@%5G6;7*S31>pxS68RGe9stwB40VX{q|+&lX)QcF9>^Ireq92PN1kTSZx4`v7XC@ zLeP&83^mjUR2)SD@SA?xk=Ou8!)|?K0J<6pfXR;hj|36`6MX>nUYwrRj`1P@0000< KMNUMnLSTYjx4d8g literal 0 HcmV?d00001 diff --git a/Resources/Textures/ADT/Structures/Specific/ash_flora.rsi/fireblossom2p.png b/Resources/Textures/ADT/Structures/Specific/ash_flora.rsi/fireblossom2p.png new file mode 100644 index 0000000000000000000000000000000000000000..92604be889f6caae1b9f4176a2667b0586f7ce1a GIT binary patch literal 271 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?4jBOuH;Rhv&5D0tA* z#WAE}PI96|g2AhXK=vN1ge#1T`6NmYTqt$uX}l7egdphs|%cHTxspmg9_#3oq=u4A81 zc}2)NZZB#Ok-vC^v4vrsiIX{d1H;CZ^V0Yf!~>2pPFXVXp&-*@z6C4{3@%CTcUp|g R4S=3u@O1TaS?83{1OWJGWpw}m literal 0 HcmV?d00001 diff --git a/Resources/Textures/ADT/Structures/Specific/ash_flora.rsi/fireblossom3.png b/Resources/Textures/ADT/Structures/Specific/ash_flora.rsi/fireblossom3.png new file mode 100644 index 0000000000000000000000000000000000000000..f65eb07d2f0f51196ccfe37ebc5ae6229fd23874 GIT binary patch literal 423 zcmV;Y0a*TtP)-ot&JLRcV~&IDd>R3K%GKrDAO(=`Ar)K; z%C5PQDbTs{fwlm*MO8{u@c!t>>;6;;JOK>>VmKoJ9CH9r{5=$aN@0oe_f2zS$YOKe zv4_DZ-fgbZ%IS@n1XxMj96ujKyR8ta(mINH=Z7!fb@E&$4K0Ay(=#yX;$R^?s3UFN zcBNXO43PBQE4#$zvc}o~qcI1_I(nD(DHe6G@IK@n?*AdiNHPmZx~`WpO%VZ!<9c*PqAg+WfuO6+%bRQESFhW9RX zZ)QKl)^uWXzDF0=CRv8=?-J}=|0|sK+&UwPU4i}cocl=*pLipm@w{!~U}4*$u!v2f i^uP*cH(7&M3=B_y7=F~a)nE;DEQ6=3pUXO@geCyYnN|D% literal 0 HcmV?d00001 diff --git a/Resources/Textures/ADT/Structures/Specific/ash_flora.rsi/fireblossom4.png b/Resources/Textures/ADT/Structures/Specific/ash_flora.rsi/fireblossom4.png new file mode 100644 index 0000000000000000000000000000000000000000..0d72319dda12271d9b35f1eed8da738bb3145cfc GIT binary patch literal 457 zcmV;)0XF`LP)iZ`z_1l-?ztD0zn5RMiB)8p#?+2!Yx`iS^zj^2OxhxWPruY45e?%`r44i z=KRMN+O2rKxS9%g)b>rsv`5@Y;xKLG~qnQ7Er~WbTuFIqm2%z%t2n?Ipo{G2U zo(jc=R4D=hu$h%NiOqYB59X894@@Yx;qL3G_iQMA`(xK}zoiHa@cAlMX-6r5ApIT+ z0PCyG#p_xC!j=@kck%nF6y-bNZzT``{7Zm$2Ii2!8vU+q00000NkvXXu0mjf+TO&5 literal 0 HcmV?d00001 diff --git a/Resources/Textures/ADT/Structures/Specific/ash_flora.rsi/fireblossom4p.png b/Resources/Textures/ADT/Structures/Specific/ash_flora.rsi/fireblossom4p.png new file mode 100644 index 0000000000000000000000000000000000000000..430b32c1f70daaa5f0e635a4b06145ad79d39aa8 GIT binary patch literal 280 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?4jBOuH;Rhv&5D0s@# z#WAE}PI96|g2AhXK=vN1ge#1T`6NmiT=_Z*H~iZF1_I(nD(DHe6G@IK@n?*AdiNHPmZx~`WpO%VZ!<9c*PqAg+WfuO6+%bRQESFhW9RX zZ)QKl)^uWXzDF0=CRv8=?-J}=|0|rns2i83^J%`s@dW literal 0 HcmV?d00001 diff --git a/Resources/Textures/ADT/Structures/Specific/ash_flora.rsi/meta.json b/Resources/Textures/ADT/Structures/Specific/ash_flora.rsi/meta.json index 1fdc551d952..ecd822dbeea 100644 --- a/Resources/Textures/ADT/Structures/Specific/ash_flora.rsi/meta.json +++ b/Resources/Textures/ADT/Structures/Specific/ash_flora.rsi/meta.json @@ -102,6 +102,30 @@ }, { "name": "t_mushroom4p" + }, + { + "name": "fireblossom1" + }, + { + "name": "fireblossom2" + }, + { + "name": "fireblossom3" + }, + { + "name": "fireblossom4" + }, + { + "name": "fireblossom1p" + }, + { + "name": "fireblossom2p" + }, + { + "name": "fireblossom3p" + }, + { + "name": "fireblossom4p" } ] } \ No newline at end of file From da17b80d09210108db1dd23c7b08af210905e578 Mon Sep 17 00:00:00 2001 From: Inconnu <177014427+Inconnu1337@users.noreply.github.com> Date: Sat, 15 Aug 2026 08:21:26 +0300 Subject: [PATCH 06/12] =?UTF-8?q?=D1=80=D0=B8=D1=82=D1=83=D0=B0=D0=BB?= =?UTF-8?q?=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ADT/Rituals/ADTAshRuneMarkSystem.cs | 35 ++ .../Rituals/UI/ADTRitualBoundUserInterface.cs | 31 + .../ADT/Rituals/UI/ADTRitualMenuWindow.xaml | 57 ++ .../Rituals/UI/ADTRitualMenuWindow.xaml.cs | 286 +++++++++ .../UI/ADTRitualSummonBoundUserInterface.cs | 41 ++ .../ADT/Rituals/ADTActiveRitualComponent.cs | 30 + .../ADT/Rituals/ADTAshSigilSystem.cs | 73 +++ .../ADT/Rituals/ADTRitualModifiers.cs | 110 ++++ .../ADT/Rituals/ADTRitualSummonSystem.cs | 42 ++ .../ADT/Rituals/ADTRitualSystem.Targets.cs | 91 +++ Content.Server/ADT/Rituals/ADTRitualSystem.cs | 579 ++++++++++++++++++ .../Rituals/Checks/ADTRitualThingsCheck.cs | 61 ++ .../Rituals/Effects/ADTRitualBasicEffects.cs | 253 ++++++++ .../Effects/ADTRitualSpecialEffects.cs | 270 ++++++++ .../ADT/Rituals/ADTRitualDoAfterEvent.cs | 9 + Content.Shared/ADT/Rituals/ADTRitualEffect.cs | 20 + .../ADT/Rituals/ADTRitualModifier.cs | 7 + .../ADT/Rituals/ADTRitualPrototype.cs | 107 ++++ .../ADT/Rituals/ADTRitualSummonUi.cs | 32 + Content.Shared/ADT/Rituals/ADTRitualTarget.cs | 13 + Content.Shared/ADT/Rituals/ADTRitualUi.cs | 60 ++ .../Components/ADTAshSigilComponent.cs | 33 + .../Rituals/Components/ADTDyedComponent.cs | 15 + .../Components/ADTRitualObjectComponent.cs | 29 + 24 files changed, 2284 insertions(+) create mode 100644 Content.Client/ADT/Rituals/ADTAshRuneMarkSystem.cs create mode 100644 Content.Client/ADT/Rituals/UI/ADTRitualBoundUserInterface.cs create mode 100644 Content.Client/ADT/Rituals/UI/ADTRitualMenuWindow.xaml create mode 100644 Content.Client/ADT/Rituals/UI/ADTRitualMenuWindow.xaml.cs create mode 100644 Content.Client/ADT/Rituals/UI/ADTRitualSummonBoundUserInterface.cs create mode 100644 Content.Server/ADT/Rituals/ADTActiveRitualComponent.cs create mode 100644 Content.Server/ADT/Rituals/ADTAshSigilSystem.cs create mode 100644 Content.Server/ADT/Rituals/ADTRitualModifiers.cs create mode 100644 Content.Server/ADT/Rituals/ADTRitualSummonSystem.cs create mode 100644 Content.Server/ADT/Rituals/ADTRitualSystem.Targets.cs create mode 100644 Content.Server/ADT/Rituals/ADTRitualSystem.cs create mode 100644 Content.Server/ADT/Rituals/Checks/ADTRitualThingsCheck.cs create mode 100644 Content.Server/ADT/Rituals/Effects/ADTRitualBasicEffects.cs create mode 100644 Content.Server/ADT/Rituals/Effects/ADTRitualSpecialEffects.cs create mode 100644 Content.Shared/ADT/Rituals/ADTRitualDoAfterEvent.cs create mode 100644 Content.Shared/ADT/Rituals/ADTRitualEffect.cs create mode 100644 Content.Shared/ADT/Rituals/ADTRitualModifier.cs create mode 100644 Content.Shared/ADT/Rituals/ADTRitualPrototype.cs create mode 100644 Content.Shared/ADT/Rituals/ADTRitualSummonUi.cs create mode 100644 Content.Shared/ADT/Rituals/ADTRitualTarget.cs create mode 100644 Content.Shared/ADT/Rituals/ADTRitualUi.cs create mode 100644 Content.Shared/ADT/Rituals/Components/ADTAshSigilComponent.cs create mode 100644 Content.Shared/ADT/Rituals/Components/ADTDyedComponent.cs create mode 100644 Content.Shared/ADT/Rituals/Components/ADTRitualObjectComponent.cs diff --git a/Content.Client/ADT/Rituals/ADTAshRuneMarkSystem.cs b/Content.Client/ADT/Rituals/ADTAshRuneMarkSystem.cs new file mode 100644 index 00000000000..76ea33a4e8e --- /dev/null +++ b/Content.Client/ADT/Rituals/ADTAshRuneMarkSystem.cs @@ -0,0 +1,35 @@ +using Content.Shared.ADT.Rituals; +using Robust.Client.GameObjects; + +namespace Content.Client.ADT.Rituals; + +public sealed class ADTAshRuneMarkSystem : EntitySystem +{ + [Dependency] private readonly SpriteSystem _sprite = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnStartup); + SubscribeLocalEvent(OnState); + } + + private void OnStartup(Entity ent, ref ComponentStartup args) + { + UpdateVisible(ent); + } + + private void OnState(Entity ent, ref AfterAutoHandleStateEvent args) + { + UpdateVisible(ent); + } + + private void UpdateVisible(Entity ent) + { + if (!TryComp(ent.Owner, out var sprite)) + return; + + _sprite.SetVisible((ent.Owner, sprite), ent.Comp.Lit); + } +} diff --git a/Content.Client/ADT/Rituals/UI/ADTRitualBoundUserInterface.cs b/Content.Client/ADT/Rituals/UI/ADTRitualBoundUserInterface.cs new file mode 100644 index 00000000000..168164f8cd8 --- /dev/null +++ b/Content.Client/ADT/Rituals/UI/ADTRitualBoundUserInterface.cs @@ -0,0 +1,31 @@ +using Content.Shared.ADT.Rituals; +using Robust.Client.UserInterface; + +namespace Content.Client.ADT.Rituals.UI; + +public sealed class ADTRitualBoundUserInterface : BoundUserInterface +{ + private ADTRitualMenuWindow? _window; + + public ADTRitualBoundUserInterface(EntityUid owner, Enum uiKey) : base(owner, uiKey) + { + } + + protected override void Open() + { + base.Open(); + + _window = this.CreateWindow(); + _window.OnStartPressed += ritual => SendMessage(new ADTRitualStartMessage(ritual)); + } + + protected override void UpdateState(BoundUserInterfaceState state) + { + base.UpdateState(state); + + if (_window == null || state is not ADTRitualBuiState ritualState) + return; + + _window.SetState(ritualState); + } +} diff --git a/Content.Client/ADT/Rituals/UI/ADTRitualMenuWindow.xaml b/Content.Client/ADT/Rituals/UI/ADTRitualMenuWindow.xaml new file mode 100644 index 00000000000..6730163c274 --- /dev/null +++ b/Content.Client/ADT/Rituals/UI/ADTRitualMenuWindow.xaml @@ -0,0 +1,57 @@ + + + + + +