diff --git a/Content.Client/_White/Wizard/SpellsSystem.cs b/Content.Client/_White/Wizard/SpellsSystem.cs new file mode 100644 index 00000000000..d72fcaef508 --- /dev/null +++ b/Content.Client/_White/Wizard/SpellsSystem.cs @@ -0,0 +1,63 @@ +using System.Numerics; +using Content.Client.Animations; +using Content.Shared._White.Wizard; +using Content.Shared._White.Wizard.SupermatterHalberd; +using Content.Shared.StatusIcon.Components; + + +namespace Content.Client._White.Wizard; + + +public sealed class SpellsSystem : SharedSpellsSystem +{ + [Dependency] private readonly RaysSystem _rays = default!; + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(GetWizardIcon); + SubscribeLocalEvent(GetApprenticeIcon); + + SubscribeAllEvent(OnChargeEffect); + } + + private void OnChargeEffect(ChargeSpellRaysEffectEvent ev) + { + var uid = GetEntity(ev.Uid); + + CreateChargeEffect(uid, ev); + } + + public override void CreateChargeEffect(EntityUid uid, ChargeSpellRaysEffectEvent ev) + { + if (!Timing.IsFirstTimePredicted || uid == EntityUid.Invalid) + return; + + var rays = _rays.DoRays(TransformSystem.GetMapCoordinates(uid), + Color.Yellow, + Color.Fuchsia, + 10, + 15, + minMaxRadius: new Vector2(3f, 6f), + proto: "EffectRayCharge", + server: false); + + if (rays == null) + return; + + var track = EnsureComp(rays.Value); + track.User = uid; + } + + private void GetWizardIcon(Entity ent, ref GetStatusIconsEvent args) + { + if (ProtoMan.TryIndex(ent.Comp.StatusIcon, out var iconPrototype)) + args.StatusIcons.Add(iconPrototype); + } + + private void GetApprenticeIcon(Entity ent, ref GetStatusIconsEvent args) + { + if (ProtoMan.TryIndex(ent.Comp.StatusIcon, out var iconPrototype)) + args.StatusIcons.Add(iconPrototype); + } +} diff --git a/Content.Client/_White/Wizard/Trail/TrailOverlay.cs b/Content.Client/_White/Wizard/Trail/TrailOverlay.cs new file mode 100644 index 00000000000..a702500f6e2 --- /dev/null +++ b/Content.Client/_White/Wizard/Trail/TrailOverlay.cs @@ -0,0 +1,166 @@ +using System.Numerics; +using Content.Shared._White.Wizard.Projectiles; +using Robust.Client.GameObjects; +using Robust.Client.Graphics; +using Robust.Shared.Enums; +using Robust.Shared.Prototypes; +using Robust.Shared.Timing; +using DrawDepth = Content.Shared.DrawDepth.DrawDepth; + +namespace Content.Client._White.Wizard.Trail; + +public sealed class TrailOverlay : Overlay +{ + public override OverlaySpace Space => OverlaySpace.WorldSpaceEntities; + + private readonly IEntityManager _entManager; + private readonly IPrototypeManager _protoMan; + private readonly IGameTiming _timing; + + private readonly SpriteSystem _sprite; + private readonly TransformSystem _transform; + + public TrailOverlay(IEntityManager entManager, IPrototypeManager protoMan, IGameTiming timing) + { + ZIndex = (int) DrawDepth.Effects; + + _entManager = entManager; + _protoMan = protoMan; + _timing = timing; + _sprite = _entManager.System(); + _transform = _entManager.System(); + } + + protected override void Draw(in OverlayDrawArgs args) + { + var eye = args.Viewport.Eye; + + if (eye == null) + return; + + var eyeRot = eye.Rotation; + var handle = args.WorldHandle; + var bounds = args.WorldAABB; + + var xformQuery = _entManager.GetEntityQuery(); + var spriteQuery = _entManager.GetEntityQuery(); + + var query = _entManager.EntityQueryEnumerator(); + while (query.MoveNext(out _, out var trail, out var xform)) + { + if (trail.TrailData.Count == 0) + continue; + + var (position, rotation) = _transform.GetWorldPositionRotation(xform, xformQuery); + + if (trail.Shader != null && _protoMan.TryIndex(trail.Shader, out var shaderProto)) + handle.UseShader(shaderProto.InstanceUnique()); + + if (trail.RenderedEntity != null) + { + Direction? direction = null; + var rot = rotation; + switch (trail.RenderedEntityRotationStrategy) + { + case LerpPropertyData.RenderedEntityRotationStrategy.Trail: + { + var dirRot = rotation + eyeRot; + direction = dirRot.GetCardinalDir(); + break; + } + case LerpPropertyData.RenderedEntityRotationStrategy.RenderedEntity: + rot = _transform.GetWorldRotation(trail.RenderedEntity.Value); + break; + } + + Entity sprite = trail.RenderedEntity.Value; + if (!spriteQuery.Resolve(sprite, ref sprite.Comp)) + continue; + foreach (var data in trail.TrailData) + { + if (data.Color.A <= 0.01f || data.Scale <= 0.01f || data.MapId != args.MapId) + continue; + var worldPosition = data.Position; + if (!bounds.Contains(worldPosition)) + continue; + if (trail.RenderedEntityRotationStrategy == LerpPropertyData.RenderedEntityRotationStrategy.Particle) + { + rot = data.Angle; + direction = (rot + eyeRot).GetCardinalDir(); + } + var originalColor = sprite.Comp.Color; + _sprite.SetColor(sprite, data.Color); + var originalScale = sprite.Comp.Scale; + _sprite.SetScale(sprite, originalScale * data.Scale); + _sprite.RenderSprite((sprite, sprite.Comp), handle, eyeRot, rot, worldPosition, direction); + _sprite.SetColor(sprite, originalColor); + _sprite.SetScale(sprite, originalScale); + } + + } + + if (trail.Sprite == null) + { + if (xform.MapID == args.MapId) + { + var start = trail.TrailData[^1].Position; + DrawTrailLine(start, position, trail.Color, trail.Scale, bounds, handle); + } + + for (var i = 1; i < trail.TrailData.Count; i++) + { + var data = trail.TrailData[i]; + var prevData = trail.TrailData[i - 1]; + + if (data.MapId == args.MapId && prevData.MapId == args.MapId) + DrawTrailLine(prevData.Position, data.Position, data.Color, data.Scale, bounds, handle); + } + + continue; + } + + var textureSize = _sprite.Frame0(trail.Sprite).Size; + var pos = -(Vector2) textureSize / 2f / EyeManager.PixelsPerMeter; + foreach (var data in trail.TrailData) + { + if (data.Color.A <= 0.01f || data.Scale <= 0.01f || data.MapId != args.MapId) + continue; + + var worldPosition = data.Position; + if (!bounds.Contains(worldPosition)) + continue; + + var scaleMatrix = Matrix3x2.CreateScale(new Vector2(data.Scale, data.Scale)); + var worldMatrix = Matrix3Helpers.CreateTranslation(worldPosition); + + var time = _timing.CurTime > data.SpawnTime ? _timing.CurTime - data.SpawnTime : TimeSpan.Zero; + var texture = _sprite.GetFrame(trail.Sprite, time); + + handle.SetTransform(Matrix3x2.Multiply(scaleMatrix, worldMatrix)); + handle.DrawTexture(texture, pos, data.Angle, data.Color); + } + } + + handle.UseShader(null); + handle.SetTransform(Matrix3x2.Identity); + } + + private static void DrawTrailLine( + Vector2 start, + Vector2 end, + Color color, + float scale, + Box2 bounds, + DrawingHandleWorld handle + ) + { + if (color.A <= 0.01f || scale <= 0.01f || !bounds.Contains(start) || !bounds.Contains(end)) + return; + var halfScale = scale * 0.5f; + var direction = end - start; + var angle = direction.ToAngle(); + var box = new Box2(start - new Vector2(0f, halfScale), start + new Vector2(direction.Length(), halfScale)); + var boxRotated = new Box2Rotated(box, angle, start); + handle.DrawRect(boxRotated, color); + } +} diff --git a/Content.Client/_White/Wizard/Trail/TrailSystem.cs b/Content.Client/_White/Wizard/Trail/TrailSystem.cs new file mode 100644 index 00000000000..77d7e532d3a --- /dev/null +++ b/Content.Client/_White/Wizard/Trail/TrailSystem.cs @@ -0,0 +1,224 @@ +using System.Linq; +using System.Numerics; +using Content.Shared._White.Wizard.Projectiles; +using Robust.Client.GameObjects; +using Robust.Client.Graphics; +using Robust.Shared.Animations; +using Robust.Shared.Map; +using Robust.Shared.Physics.Components; +using Robust.Shared.Prototypes; +using Robust.Shared.Spawners; +using Robust.Shared.Timing; +using Robust.Shared.Utility; + +namespace Content.Client._White.Wizard.Trail; + +public sealed class TrailSystem : EntitySystem +{ + [Dependency] private readonly IOverlayManager _overlay = default!; + [Dependency] private readonly IEyeManager _eye = default!; + [Dependency] private readonly IGameTiming _timing = default!; + [Dependency] private readonly IPrototypeManager _protoMan = default!; + + [Dependency] private readonly TransformSystem _transform = default!; + + private EntityQuery _xformQuery; + private EntityQuery _physicsQuery; + + public override void Initialize() + { + base.Initialize(); + _overlay.AddOverlay(new TrailOverlay(EntityManager, _protoMan, _timing)); + + SubscribeLocalEvent(OnStartup); + SubscribeLocalEvent(OnRemove); + + _xformQuery = GetEntityQuery(); + _physicsQuery = GetEntityQuery(); + + UpdatesOutsidePrediction = true; + } + + public override void Shutdown() + { + base.Shutdown(); + _overlay.RemoveOverlay(); + } + private void OnStartup(Entity ent, ref ComponentStartup args) + { + ent.Comp.Accumulator = ent.Comp.Frequency; + ent.Comp.LerpAccumulator = ent.Comp.LerpTime; + } + + private void OnRemove(Entity ent, ref ComponentRemove args) + { + var (_, comp) = ent; + + if (!comp.SpawnRemainingTrail + || comp.TrailData.Count == 0 + || comp.Frequency <= 0f + || comp.Lifetime <= 0f + || comp.LastCoords.MapId != _eye.CurrentEye.Position.MapId + || comp.RenderedEntity != null && TerminatingOrDeleted(comp.RenderedEntity.Value)) + return; + + var remainingTrail = Spawn(null, comp.LastCoords); + EnsureComp(remainingTrail).Lifetime = comp.Lifetime; + + var trail = CopyComp(ent, remainingTrail, comp); + trail.SpawnRemainingTrail = false; + trail.Frequency = 0f; + trail.TrailData = comp.TrailData; + } + + public override void Update(float frameTime) + { + base.Update(frameTime); + + if (!_timing.IsFirstTimePredicted) + return; + + var query = EntityQueryEnumerator(); + while (query.MoveNext(out var uid, out var trail, out var xform)) + { + if (trail.Lifetime <= 0f) + continue; + + var (position, rotation) = _transform.GetWorldPositionRotation(xform, _xformQuery); + trail.LastCoords = new MapCoordinates(position, xform.MapID); + + Lerp(trail, position, frameTime); + + trail.Accumulator += frameTime; + + // Assuming that lifetime and frequency don't change + if (trail.Accumulator > trail.Lifetime && trail.Lifetime < trail.Frequency && trail.TrailData.Count > 0) + { + trail.ParticleCount = 0; + trail.TrailData.Clear(); + } + + if (trail.Accumulator <= trail.Frequency) + continue; + + trail.Accumulator = 0f; + + if (trail.SpawnEntityPosition != null && !Exists(trail.SpawnEntityPosition)) + continue; + + Angle angle; + if (_physicsQuery.TryComp(uid, out var physics) && physics.LinearVelocity.LengthSquared() > 0) + angle = physics.LinearVelocity.ToAngle(); + else + angle = xform.LocalRotation; + + var startAngle = trail.StartAngle + angle; + var endAngle = trail.EndAngle + angle; + + SpawnParticle(trail, position, rotation, new Angle((endAngle.Theta + startAngle.Theta) * 0.5).ToVec(), xform.MapID); + for (var i = 0; i < trail.ParticleAmount - 1; i++) + { + if (trail.MaxParticleAmount > 0 && trail.ParticleCount >= trail.MaxParticleAmount) + break; + var direction = new Angle(startAngle + (endAngle - startAngle) * i / (trail.ParticleAmount - 1)).ToVec(); + SpawnParticle(trail, position, rotation, direction, xform.MapID); + } + } + } + + private void SpawnParticle(TrailComponent trail, Vector2 position, Angle rotation, Vector2 direction, MapId mapId) + { + if (Exists(trail.SpawnEntityPosition)) + { + position = _transform.GetWorldPosition(trail.SpawnEntityPosition.Value, _xformQuery); + if (trail.SpawnPosition != null) + position += trail.SpawnPosition.Value; + } + else if (trail.SpawnPosition != null) + position = trail.SpawnPosition.Value; + + var targetPos = position + direction * trail.Radius; + if (trail.TrailData.Count < MathF.Max(trail.ParticleAmount, trail.ParticleAmount * trail.Lifetime / trail.Frequency)) + { + trail.ParticleCount++; + trail.TrailData.Add( + new TrailData( + targetPos, + trail.Velocity, + mapId, + direction, + rotation, + trail.Color, + trail.Scale, + _timing.CurTime)); + } + else if (trail.TrailData.Count > 0) + { + if (trail.CurIndex >= trail.TrailData.Count || trail.Sprite == null) + trail.CurIndex = 0; + + var data = trail.TrailData[trail.CurIndex]; + + data.Color = trail.Color; + data.Position = targetPos; + data.Velocity = trail.Velocity; + data.MapId = mapId; + data.Direction = direction; + data.Angle = rotation; + data.Scale = trail.Scale; + data.SpawnTime = _timing.CurTime; + + if (trail.Sprite == null) + { + trail.TrailData.RemoveAt(0); + trail.TrailData.Add(data); + } + else + trail.CurIndex++; + } + } + + private void Lerp(TrailComponent trail, Vector2 position, float frameTime) + { + trail.LerpAccumulator += frameTime; + + if (trail.LerpAccumulator <= trail.LerpTime) + return; + + trail.LerpAccumulator = 0; + + foreach (var data in trail.TrailData) + { + if (trail.LerpDelay > _timing.CurTime - data.SpawnTime) + return; + + if (trail.AlphaLerpAmount > 0f) + { + var alphaTarget = trail.AlphaLerpTarget is >= 0f and <= 1f ? trail.AlphaLerpTarget : 0f; + data.Color.A = float.Lerp(data.Color.A, alphaTarget, trail.AlphaLerpAmount); + } + + if (trail.ScaleLerpAmount > 0f) + { + var scaleTarget = trail.ScaleLerpTarget >= 0f ? trail.ScaleLerpTarget : 0f; + data.Scale = float.Lerp(data.Scale, scaleTarget, trail.ScaleLerpAmount); + } + + data.Position += data.Direction * data.Velocity; + + if (trail.PositionLerpAmount > 0f) + data.Position = Vector2.Lerp(data.Position, position, trail.PositionLerpAmount); + + if (trail.VelocityLerpAmount > 0f) + data.Velocity = float.Lerp(data.Velocity, trail.VelocityLerpTarget, trail.VelocityLerpAmount); + } + + foreach (var lerpData in trail.AdditionalLerpData.Where(x => x.LerpAmount > 0f)) + { + lerpData.Value = float.Lerp(lerpData.Value, lerpData.LerpTarget, lerpData.LerpAmount); + + if (lerpData.Property != null) + AnimationHelper.SetAnimatableProperty(trail, lerpData.Property!, lerpData.Value); // WD edit - make lerpData.Property nullable + } + } +} diff --git a/Content.Server/Polymorph/Systems/PolymorphSystem.cs b/Content.Server/Polymorph/Systems/PolymorphSystem.cs index 17d5c21e634..931bc845b79 100644 --- a/Content.Server/Polymorph/Systems/PolymorphSystem.cs +++ b/Content.Server/Polymorph/Systems/PolymorphSystem.cs @@ -285,6 +285,7 @@ private void OnDestruction(Entity ent, ref Destructi // Raise an event to inform anything that wants to know about the entity swap var ev = new PolymorphedEvent(uid, child, false); RaiseLocalEvent(uid, ref ev); + RaiseLocalEvent(child, ref ev); // WD EDIT return child; } diff --git a/Content.Server/Power/EntitySystems/BatterySystem.cs b/Content.Server/Power/EntitySystems/BatterySystem.cs index 136fb6f34a9..308eed91576 100644 --- a/Content.Server/Power/EntitySystems/BatterySystem.cs +++ b/Content.Server/Power/EntitySystems/BatterySystem.cs @@ -241,6 +241,13 @@ public bool IsFull(EntityUid uid, BatteryComponent? battery = null) } // WD EDIT START + public void AddCharge(EntityUid uid, float value, BatteryComponent? battery = null) + { + if (!Resolve(uid, ref battery)) + return; + + SetCharge(uid, battery.CurrentCharge + value, battery); + } public bool TryGetBatteryComponent(EntityUid uid, [NotNullWhen(true)] out BatteryComponent? battery,[NotNullWhen(true)] out EntityUid? batteryUid) { if (TryComp(uid, out battery)) diff --git a/Content.Server/Speech/EntitySystems/SpeakOnActionSystem.cs b/Content.Server/Speech/EntitySystems/SpeakOnActionSystem.cs new file mode 100644 index 00000000000..f784298cfd8 --- /dev/null +++ b/Content.Server/Speech/EntitySystems/SpeakOnActionSystem.cs @@ -0,0 +1,62 @@ +using Content.Server.Chat.Systems; +using Content.Shared.Speech.Components; +using Content.Shared.Speech; +using Content.Shared.Speech.EntitySystems; +using Content.Shared.Speech.Muting; +using Content.Shared.Actions.Events; +using Content.Shared.Damage; +using Content.Shared.Chat; + + +namespace Content.Server.Speech.EntitySystems; + +/// +/// As soon as the chat refactor moves to Shared +/// the logic here can move to the shared +/// +public sealed class SpeakOnActionSystem : SharedSpeakOnActionSystem +{ + [Dependency] private readonly ChatSystem _chat = default!; + [Dependency] private readonly DamageableSystem _damageable = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnActionPerformed); + } + + private void OnActionPerformed(Entity ent, ref ActionPerformedEvent args) + { + var user = args.Performer; + + // If we can't speak, we can't speak + if (!HasComp(user) || HasComp(user)) + return; + + // Goob. TODO: Remove Aviu from this plane of existence for whatever has occured here. + var speech = ent.Comp.Sentence; + + // if (TryComp(ent, out MagicComponent? magic)) WWDP - uncomment when Chuuni Invocations are ported + // { + // var invocationEv = new GetSpellInvocationEvent(magic.School, args.Performer); + // RaiseLocalEvent(args.Performer, invocationEv); + // if (invocationEv.Invocation.HasValue) + // speech = invocationEv.Invocation; + // if (invocationEv.ToHeal.GetTotal() > FixedPoint2.Zero) + // { + // _damageable.TryChangeDamage(args.Performer, + // -invocationEv.ToHeal, + // true, + // false, + // targetPart: TargetBodyPart.All, + // splitDamage: SplitDamageBehavior.SplitEnsureAll); // Shitmed Change + // } + // } + + if (string.IsNullOrWhiteSpace(speech)) + return; + + _chat.TrySendInGameICMessage(user, Loc.GetString(speech), InGameICChatType.Speak, false); + } +} diff --git a/Content.Server/_Goobstation/Wizard/Components/EmpImmuneComponent.cs b/Content.Server/_White/Wizard/Components/EmpImmuneComponent.cs similarity index 59% rename from Content.Server/_Goobstation/Wizard/Components/EmpImmuneComponent.cs rename to Content.Server/_White/Wizard/Components/EmpImmuneComponent.cs index 3ec5b55e154..ed8d49608b7 100644 --- a/Content.Server/_Goobstation/Wizard/Components/EmpImmuneComponent.cs +++ b/Content.Server/_White/Wizard/Components/EmpImmuneComponent.cs @@ -1,4 +1,4 @@ -namespace Content.Server._Goobstation.Wizard.Components; +namespace Content.Server._White.Wizard.Components; [RegisterComponent] public sealed partial class EmpImmuneComponent : Component { } diff --git a/Content.Server/_White/Wizard/Components/WizardJauntComponent.cs b/Content.Server/_White/Wizard/Components/WizardJauntComponent.cs new file mode 100644 index 00000000000..004e99505a2 --- /dev/null +++ b/Content.Server/_White/Wizard/Components/WizardJauntComponent.cs @@ -0,0 +1,34 @@ +// SPDX-FileCopyrightText: 2025 Aiden <28298836+Aidenkrz@users.noreply.github.com> +// SPDX-FileCopyrightText: 2025 Aviu00 <93730715+Aviu00@users.noreply.github.com> +// SPDX-FileCopyrightText: 2025 Misandry +// SPDX-FileCopyrightText: 2025 gus +// +// SPDX-License-Identifier: AGPL-3.0-or-later + +using Robust.Shared.Audio; +using Robust.Shared.Prototypes; + + +namespace Content.Server._White.Wizard.Components; + +[RegisterComponent] +public sealed partial class WizardJauntComponent : Component +{ + [DataField] + public EntProtoId JauntStartEffect = "EtherealJauntStartEffect"; + + [DataField] + public EntProtoId JauntEndEffect = "EtherealJauntEndEffect"; + + [DataField] + public SoundSpecifier JauntStartSound = new SoundPathSpecifier("/Audio/Magic/ethereal_enter.ogg"); + + [DataField] + public SoundSpecifier JauntEndSound = new SoundPathSpecifier("/Audio/Magic/ethereal_exit.ogg"); + + [DataField] + public float DurationBetweenEffects = 2.8f; + + [DataField] + public EntityUid? JauntEndEffectEntity; +} \ No newline at end of file diff --git a/Content.Server/_Goobstation/Wizard/Systems/EmpImmuneSystem.cs b/Content.Server/_White/Wizard/Systems/EmpImmuneSystem.cs similarity index 76% rename from Content.Server/_Goobstation/Wizard/Systems/EmpImmuneSystem.cs rename to Content.Server/_White/Wizard/Systems/EmpImmuneSystem.cs index 4292acb81b2..d02f7bfc28d 100644 --- a/Content.Server/_Goobstation/Wizard/Systems/EmpImmuneSystem.cs +++ b/Content.Server/_White/Wizard/Systems/EmpImmuneSystem.cs @@ -1,7 +1,8 @@ -using Content.Server._Goobstation.Wizard.Components; +using Content.Server._White.Wizard.Components; using Content.Server.Emp; -namespace Content.Server._Goobstation.Wizard.Systems; + +namespace Content.Server._White.Wizard.Systems; public sealed class EmpImmuneSystem : EntitySystem { diff --git a/Content.Server/_White/Wizard/Systems/SpellsSystem.cs b/Content.Server/_White/Wizard/Systems/SpellsSystem.cs new file mode 100644 index 00000000000..a2637448aad --- /dev/null +++ b/Content.Server/_White/Wizard/Systems/SpellsSystem.cs @@ -0,0 +1,151 @@ +using Content.Server.Chat.Systems; +using Content.Server.Polymorph.Systems; +using Content.Server.Power.Components; +using Content.Server.Power.EntitySystems; +using Content.Shared._Goobstation.Actions; +using Content.Shared._White.Wizard; +using Content.Shared.Chat; +using Content.Shared.Magic.Components; +using Content.Shared.Speech.Components; +using Robust.Shared.Player; +using Robust.Shared.Timing; + + +namespace Content.Server._White.Wizard.Systems; + + +public sealed class SpellsSystem : SharedSpellsSystem +{ + [Dependency] private readonly BatterySystem _battery = default!; + [Dependency] private readonly PolymorphSystem _polymorph = default!; + [Dependency] private readonly ChatSystem _chat = default!; + public override void Initialize() + { + base.Initialize(); + } + + public override void CreateChargeEffect(EntityUid uid, ChargeSpellRaysEffectEvent ev) + { + RaiseNetworkEvent(ev, Filter.PvsExcept(uid)); + } + + protected override bool ChargeItem(EntityUid uid, ChargeMagicEvent ev) + { + if (!TryComp(uid, out BatteryComponent? battery) || battery.CurrentCharge >= battery.MaxCharge) + return false; + + if (Tag.HasTag(uid, ev.WandTag)) + { + var difference = battery.MaxCharge - battery.CurrentCharge; + var charge = MathF.Min(difference, ev.WandChargeRate); + var degrade = charge * ev.WandDegradePercentagePerCharge; + var afterDegrade = MathF.Max(ev.MinWandDegradeCharge, battery.MaxCharge - degrade); + if (battery.MaxCharge > ev.MinWandDegradeCharge) + _battery.SetMaxCharge(uid, afterDegrade, battery); + _battery.AddCharge(uid, charge, battery); + } + else + _battery.SetCharge(uid, battery.MaxCharge, battery); + + PopupCharged(uid, ev.Performer, false); + return true; + } + + protected override bool Polymorph(PolymorphSpellEvent ev) + { + if (ev.ProtoId == null) + return false; + + var newEnt = _polymorph.PolymorphEntity(ev.Performer, ev.ProtoId.Value); + + if (newEnt == null) + return false; + + if (ev.MakeWizard) + { + if (HasComp(ev.Performer)) + EnsureComp(newEnt.Value); + if (HasComp(ev.Performer)) + EnsureComp(newEnt.Value); + } + + Audio.PlayPvs(ev.Sound, newEnt.Value); + + var school = MagicSchool.Transmutation; + if (TryComp(ev.Action.Owner, out MagicComponent? magic)) + school = magic.School; + + if (ev.LoadActions) + RaiseNetworkEvent(new LoadActionsEvent(GetNetEntity(ev.Performer)), newEnt.Value); + + if (TryComp(ev.Action.Owner, out SpeakOnActionComponent? speak)) + { + DelayedSpeech(speak.Sentence == null ? null : Loc.GetString(speak.Sentence.Value), + newEnt.Value, + ev.Performer, + school); + } + + return true; + } + + private void DelayedSpeech(string? speech, EntityUid speaker, EntityUid caster, MagicSchool school) + { + Timer.Spawn(200, + () => + { + var toSpeak = speech == null ? string.Empty : Loc.GetString(speech); + SpeakSpell(speaker, caster, toSpeak, school); + }); + } + + public override void SpeakSpell(EntityUid speakerUid, EntityUid casterUid, string speech, MagicSchool school) + { + base.SpeakSpell(speakerUid, casterUid, speech, school); + + if (!Exists(speakerUid)) + return; + + Color? color = null; + + if (Exists(casterUid)) + { + // var invocationEv = new GetSpellInvocationEvent(school, casterUid); WD edit - uncomment once Chuuni invocations get ported + // RaiseLocalEvent(casterUid, invocationEv); + // if (invocationEv.Invocation != null) + // speech = Loc.GetString(invocationEv.Invocation); + // if (invocationEv.ToHeal.GetTotal() > FixedPoint2.Zero) + // { + // // Heal both caster and speaker + // Damageable.TryChangeDamage(casterUid, + // -invocationEv.ToHeal, + // true, + // false, + // targetPart: TargetBodyPart.All, + // splitDamage: SplitDamageBehavior.SplitEnsureAll); + // + // if (speakerUid != casterUid) + // { + // Damageable.TryChangeDamage(speakerUid, + // -invocationEv.ToHeal, + // true, + // false, + // targetPart: TargetBodyPart.All, + // splitDamage: SplitDamageBehavior.SplitEnsureAll); + // } + // } + // + // if (speakerUid != casterUid) + // { + // var colorEv = new GetMessageColorOverrideEvent(); + // RaiseLocalEvent(casterUid, colorEv); + // color = colorEv.Color; + // } + } + + _chat.TrySendInGameICMessage(speakerUid, + speech, + InGameICChatType.Speak, + false); + } +} diff --git a/Content.Server/_White/Wizard/Systems/WizardJauntSystem.cs b/Content.Server/_White/Wizard/Systems/WizardJauntSystem.cs new file mode 100644 index 00000000000..19df74dea65 --- /dev/null +++ b/Content.Server/_White/Wizard/Systems/WizardJauntSystem.cs @@ -0,0 +1,84 @@ +// SPDX-FileCopyrightText: 2025 Aiden <28298836+Aidenkrz@users.noreply.github.com> +// SPDX-FileCopyrightText: 2025 Aviu00 <93730715+Aviu00@users.noreply.github.com> +// SPDX-FileCopyrightText: 2025 Misandry +// SPDX-FileCopyrightText: 2025 SX_7 +// SPDX-FileCopyrightText: 2025 gus +// +// SPDX-License-Identifier: AGPL-3.0-or-later + +using Content.Server._White.Wizard.Components; +using Content.Server.Polymorph.Components; +using Content.Shared._White.Wizard.Projectiles; +using Content.Shared.Polymorph; +using Robust.Server.Audio; +using Robust.Server.GameObjects; +using Robust.Shared.Player; + + +namespace Content.Server._White.Wizard.Systems; + +public sealed class WizardJauntSystem : EntitySystem +{ + [Dependency] private readonly AudioSystem _audio = default!; + [Dependency] private readonly TransformSystem _transform = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnPolymorph); + } + + public override void Update(float frameTime) + { + base.Update(frameTime); + + var query = EntityQueryEnumerator(); + while (query.MoveNext(out var uid, out var jaunt, out var polymorphed, out var xform)) + { + if (jaunt.JauntEndEffectEntity is {} endEffect) + { + _transform.SetMapCoordinates(endEffect, _transform.GetMapCoordinates(xform)); + continue; + } + + jaunt.DurationBetweenEffects -= frameTime; + + if (jaunt.DurationBetweenEffects > 0f) + continue; + + var endEffect = Spawn(jaunt.JauntEndEffect, + _transform.GetMapCoordinates(uid, xform), + rotation: _transform.GetWorldRotation(xform)); + + _audio.PlayEntity(jaunt.JauntEndSound, Filter.Pvs(endEffect), endEffect, true); + + jaunt.JauntEndEffectEntity = endEffect; + + if (!TryComp(endEffect, out TrailComponent? trail)) + continue; + + trail.RenderedEntity = polymorphed.Parent; + Dirty(endEffect, trail); + } + } + + private void OnPolymorph(Entity ent, ref PolymorphedEvent args) + { + var (uid, comp) = ent; + + if (args.IsRevert) + return; + + var startEffect = Spawn(comp.JauntStartEffect, + _transform.GetMapCoordinates(uid), + rotation: _transform.GetWorldRotation(uid)); + _audio.PlayPvs(comp.JauntStartSound, startEffect); + + if (!TryComp(startEffect, out TrailComponent? trail)) + return; + + trail.RenderedEntity = args.OldEntity; + Dirty(startEffect, trail); + } +} \ No newline at end of file diff --git a/Content.Server/Carrying/CarryingComponent.cs b/Content.Shared/Carrying/CarryingComponent.cs similarity index 79% rename from Content.Server/Carrying/CarryingComponent.cs rename to Content.Shared/Carrying/CarryingComponent.cs index e79460595b9..912d0f5f305 100644 --- a/Content.Server/Carrying/CarryingComponent.cs +++ b/Content.Shared/Carrying/CarryingComponent.cs @@ -1,4 +1,4 @@ -namespace Content.Server.Carrying +namespace Content.Shared.Carrying // WD EDIT: Moved to Shared { /// /// Added to an entity when they are carrying somebody. diff --git a/Content.Shared/Magic/Components/MagicComponent.cs b/Content.Shared/Magic/Components/MagicComponent.cs index bcc11063b71..39728de56e9 100644 --- a/Content.Shared/Magic/Components/MagicComponent.cs +++ b/Content.Shared/Magic/Components/MagicComponent.cs @@ -36,4 +36,29 @@ public sealed partial class MagicComponent : Component // TODO: FreeHand - should check if toggleable action // Check which hand is free to toggle action in + + // WD EDIT START + [DataField] + public MagicSchool School = MagicSchool.Unset; + // WD EDIT END +} + +// WD EDIT START +public enum MagicSchool : byte +{ + Unset, + Holy, + Psychic, + Mime, + Restoration, + Evocation, + Explosion, + Transmutation, + Translocation, + Conjuration, + Necromancy, + Forbidden, + Sanguine, + Chuuni, // Specifically for chuuni invocations spell } +// WD EDIT END diff --git a/Content.Shared/Magic/SharedMagicSystem.cs b/Content.Shared/Magic/SharedMagicSystem.cs index 5554cd5d669..85dc58f31b0 100644 --- a/Content.Shared/Magic/SharedMagicSystem.cs +++ b/Content.Shared/Magic/SharedMagicSystem.cs @@ -1,14 +1,18 @@ +using System.Linq; using System.Numerics; using Content.Shared._Goobstation.Religion; +using Content.Shared._White.Wizard; using Content.Shared.Actions; using Content.Shared.Body.Components; using Content.Shared.Body.Systems; +using Content.Shared.Changeling; using Content.Shared.Charges.Components; using Content.Shared.Charges.Systems; using Content.Shared.Chat; using Content.Shared.Coordinates.Helpers; using Content.Shared.Doors.Components; using Content.Shared.Doors.Systems; +using Content.Shared.Ghost; using Content.Shared.Hands.Components; using Content.Shared.Hands.EntitySystems; using Content.Shared.Interaction; @@ -18,14 +22,20 @@ using Content.Shared.Magic.Events; using Content.Shared.Maps; using Content.Shared.Mind; +using Content.Shared.Mobs.Systems; +using Content.Shared.NPC.Components; +using Content.Shared.NPC.Prototypes; +using Content.Shared.NPC.Systems; using Content.Shared.Physics; using Content.Shared.Popups; +using Content.Shared.Revolutionary.Components; using Content.Shared.Speech.Muting; using Content.Shared.Storage; using Content.Shared.Stunnable; using Content.Shared.Tag; using Content.Shared.Weapons.Ranged.Components; using Content.Shared.Weapons.Ranged.Systems; +using Content.Shared.Zombies; using Robust.Shared.Audio.Systems; using Robust.Shared.Map; using Robust.Shared.Map.Components; @@ -70,6 +80,11 @@ public abstract class SharedMagicSystem : EntitySystem [Dependency] private readonly SharedStunSystem _stun = default!; [Dependency] private readonly TurfSystem _turf = default!; [Dependency] private readonly SharedChargesSystem _charges = default!; + // WD EDIT START + [Dependency] private readonly MobStateSystem _mobState = default!; + [Dependency] private readonly NpcFactionSystem _faction = default!; + [Dependency] private readonly SharedSpellsSystem _spells = default!; + // WD EDIT END private static readonly ProtoId InvalidForGlobalSpawnSpellTag = "InvalidForGlobalSpawnSpell"; @@ -123,7 +138,7 @@ private void OnBeforeCastSpell(Entity ent, ref BeforeCastSpellEv // TODO: Pre-cast do after, either here or in SharedActionsSystem } - private bool PassesSpellPrerequisites(EntityUid spell, EntityUid performer) + public bool PassesSpellPrerequisites(EntityUid spell, EntityUid performer) // WD EDIT: private -> public { var ev = new BeforeCastSpellEvent(performer); RaiseLocalEvent(spell, ref ev); @@ -477,9 +492,9 @@ private void OnChargeSpell(ChargeSpellEvent ev) return; if (TryComp(wand, out var basicAmmoComp) && basicAmmoComp.Count != null) - _gunSystem.UpdateBasicEntityAmmoCount(wand.Value, basicAmmoComp.Count.Value + ev.Charge, basicAmmoComp); + _gunSystem.UpdateBasicEntityAmmoCount(wand.Value, basicAmmoComp.Capacity!.Value, basicAmmoComp); // WD edit - recharge to max else if (TryComp(wand, out var charges)) - _charges.AddCharges(wand.Value, ev.Charge); + _charges.SetCharges(wand.Value, charges.MaxCharges, charges.MaxCharges); // WD edit - recharge to max } // End Charge Spells #endregion @@ -525,6 +540,37 @@ private void OnMindSwapSpell(MindSwapSpellEvent ev) if (ev.Handled || !PassesSpellPrerequisites(ev.Action, ev.Performer)) return; + // WD EDIT START + if (IsTouchSpellDenied(ev.Target)) + { + ev.Handled = true; + return; + } + + if (_mobState.IsIncapacitated(ev.Target) || HasComp(ev.Target)) + { + _popup.PopupClient(Loc.GetString("spell-fail-mindswap-dead"), ev.Performer, ev.Performer); + return; + } + + List<(Type, string)> blockers = new() + { + (typeof(ChangelingComponent), "changeling"), + // You should be able to mindswap with heretics, + // but all of their data and abilities are not tied to their mind, I'm not making this work. + // (typeof(HereticComponent), "heretic"), + // (typeof(GhoulComponent), "ghoul"), + // Mindswapping with aghost real. + (typeof(GhostComponent), "ghost"), + (typeof(SpectralComponent), "ghost"), + (typeof(TimedDespawnComponent), "temporary"), + // (typeof(FadingTimedDespawnComponent), "temporary"), + }; + + if (blockers.Any(x => CheckMindswapBlocker(x.Item1, x.Item2))) + return; + // Goobstation end + ev.Handled = true; Speak(ev); @@ -544,9 +590,136 @@ private void OnMindSwapSpell(MindSwapSpellEvent ev) _mind.TransferTo(tarMind, ev.Performer); } + // Goobstation start + List components = new() + { + typeof(RevolutionaryComponent), + typeof(HeadRevolutionaryComponent), + typeof(WizardComponent), + typeof(ApprenticeComponent), + }; + + foreach (var component in components) + { + TransferComponent(component, ev.Performer, ev.Target); + } + + TransferFactions(); + + _stun.TryParalyze(ev.Target, ev.TargetStunDuration, true); _stun.TryParalyze(ev.Performer, ev.PerformerStunDuration, true); + + // Goobstation start + return; + + void TransferFactions() + { + TryComp(ev.Performer, out NpcFactionMemberComponent? performerFaction); + TryComp(ev.Target, out NpcFactionMemberComponent? targetFaction); + + if (performerFaction == null && targetFaction == null) + return; + + var performerHadFaction = true; + var targetHadFaction = true; + + if (performerFaction == null) + { + performerFaction = AddComp(ev.Performer); + performerHadFaction = false; + } + + if (targetFaction == null) + { + targetFaction = AddComp(ev.Target); + targetHadFaction = false; + } + + List> factionsToTransfer = new() + { + "Wizard", + }; + + ProtoId fallbackFaction = "NanoTrasen"; + + var performerFactions = new HashSet>(); + var targetFactions = new HashSet>(); + + foreach (var faction in FilterFactions(performerFaction.Factions)) + { + performerFactions.Add(faction); + } + + foreach (var faction in FilterFactions(targetFaction.Factions)) + { + targetFactions.Add(faction); + } + + Entity targetFactionEnt = (ev.Target, targetFaction); + foreach (var faction in targetFactions) + { + _faction.RemoveFaction(targetFactionEnt, faction, false); + } + + Entity performerFactionEnt = (ev.Performer, performerFaction); + foreach (var faction in performerFactions) + { + _faction.RemoveFaction(performerFactionEnt, faction, false); + } + + if (performerHadFaction) + _faction.AddFactions(targetFactionEnt, performerFactions); + + if (targetHadFaction) + _faction.AddFactions(performerFactionEnt, targetFactions); + + if (targetFaction.Factions.Count == 0) + _faction.AddFaction(targetFactionEnt, fallbackFaction); + + if (performerFaction.Factions.Count == 0) + _faction.AddFaction(performerFactionEnt, fallbackFaction); + return; + + IEnumerable> FilterFactions(HashSet> factions) + { + return factions.Where(x => factionsToTransfer.Contains(x)); + } + } + + bool CheckMindswapBlocker(Type type, string message) + { + if (!HasComp(ev.Target, type)) + return false; + + _popup.PopupClient(Loc.GetString($"spell-fail-mindswap-{message}"), ev.Performer, ev.Performer); + return true; + } + // Goobstation end + } + + // Goobstation start + private void TransferComponent(Type type, EntityUid a, EntityUid b) + { + var aHasComp = HasComp(a, type); + var bHasComp = HasComp(b, type); + + if (aHasComp && bHasComp) + return; + + var comp = Factory.GetComponent(type); + if (aHasComp) + { + AddComp(b, comp); + RemCompDeferred(a, type); + } + else if (bHasComp) + { + AddComp(a, comp); + RemCompDeferred(b, type); + } } + // Goobstation end #endregion // End Spells diff --git a/Content.Shared/Speech/Components/SpeakOnActionComponent.cs b/Content.Shared/Speech/Components/SpeakOnActionComponent.cs new file mode 100644 index 00000000000..3de09932e2f --- /dev/null +++ b/Content.Shared/Speech/Components/SpeakOnActionComponent.cs @@ -0,0 +1,17 @@ +using Content.Shared.Speech.EntitySystems; +using Robust.Shared.GameStates; + +namespace Content.Shared.Speech.Components; + +/// +/// Action components which should write a message to ICChat on use +/// +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState, Access(typeof(SharedSpeakOnActionSystem))] +public sealed partial class SpeakOnActionComponent : Component +{ + /// + /// The ftl id of the sentence that the user will speak. + /// + [DataField, AutoNetworkedField] + public LocId? Sentence; +} diff --git a/Content.Shared/Speech/EntitySystems/SharedSpeakOnActionSystem.cs b/Content.Shared/Speech/EntitySystems/SharedSpeakOnActionSystem.cs new file mode 100644 index 00000000000..075d336cc46 --- /dev/null +++ b/Content.Shared/Speech/EntitySystems/SharedSpeakOnActionSystem.cs @@ -0,0 +1,13 @@ +using Content.Shared.Chasm; +using Content.Shared.Speech.Components; +using Content.Shared.Speech.Muting; +using System; + +namespace Content.Shared.Speech.EntitySystems; + +/// +/// Once the chat refactor has happened, move the code from +/// +/// to here and set this class to sealed. +/// +public abstract class SharedSpeakOnActionSystem : EntitySystem; diff --git a/Content.Shared/_White/Wizard/ApprenticeComponent.cs b/Content.Shared/_White/Wizard/ApprenticeComponent.cs new file mode 100644 index 00000000000..b3ee8f2a28d --- /dev/null +++ b/Content.Shared/_White/Wizard/ApprenticeComponent.cs @@ -0,0 +1,12 @@ +using Content.Shared.StatusIcon; +using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; + +namespace Content.Shared._White.Wizard; + +[RegisterComponent, NetworkedComponent] +public sealed partial class ApprenticeComponent : Component +{ + [DataField] + public ProtoId StatusIcon = "ApprenticeFaction"; +} \ No newline at end of file diff --git a/Content.Shared/_White/Wizard/Projectiles/EntityTrailComponent.cs b/Content.Shared/_White/Wizard/Projectiles/EntityTrailComponent.cs new file mode 100644 index 00000000000..f5b4199b28a --- /dev/null +++ b/Content.Shared/_White/Wizard/Projectiles/EntityTrailComponent.cs @@ -0,0 +1,11 @@ +using Robust.Shared.GameStates; + + +namespace Content.Shared._White.Wizard.Projectiles; + +/// +/// Add this and TrailComponent to an entity so that it spawns a trail of that entity sprite. +/// TrailComponent's ParticleAmount should be set to zero for it to work correctly. +/// +[RegisterComponent, NetworkedComponent] +public sealed partial class EntityTrailComponent : Component; diff --git a/Content.Shared/_White/Wizard/Projectiles/EntityTrailSystem.cs b/Content.Shared/_White/Wizard/Projectiles/EntityTrailSystem.cs new file mode 100644 index 00000000000..7fc7d83216f --- /dev/null +++ b/Content.Shared/_White/Wizard/Projectiles/EntityTrailSystem.cs @@ -0,0 +1,20 @@ +namespace Content.Shared._White.Wizard.Projectiles; + +public sealed class EntityTrailSystem : EntitySystem +{ + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnInit); + } + + private void OnInit(Entity ent, ref ComponentInit args) + { + if (!TryComp(ent, out TrailComponent? trailComponent)) + return; + + trailComponent.RenderedEntity = ent; + Dirty(ent, trailComponent); + } +} diff --git a/Content.Shared/_White/Wizard/Projectiles/TrailComponent.cs b/Content.Shared/_White/Wizard/Projectiles/TrailComponent.cs new file mode 100644 index 00000000000..11fee751673 --- /dev/null +++ b/Content.Shared/_White/Wizard/Projectiles/TrailComponent.cs @@ -0,0 +1,241 @@ +using System.Numerics; +using Robust.Shared.Animations; +using Robust.Shared.GameStates; +using Robust.Shared.Map; +using Robust.Shared.Utility; + +namespace Content.Shared._White.Wizard.Projectiles; + +// Make more fields auto networked if you need to. +// Changing Lifetime and Frequency may lead to unexpected results, especially if frequency is greater than lifetime +[RegisterComponent,NetworkedComponent, AutoGenerateComponentState] +public sealed partial class TrailComponent : Component +{ + /// + /// How many particles to spawn each cycle. If it is less than one, no particles will spawn. + /// Values above one wouldn't work with line trails currently. + /// Changing this during runtime may break things. + /// + [DataField, AutoNetworkedField] + public int ParticleAmount = 1; + + /// + /// Limits the total amount of particles that the trail can spawn, if above zero + /// + [DataField] + public int MaxParticleAmount; + + /// + /// If not null, determines spawn position of the particles. + /// If is not null, it will spawn at coordinates relative to that entity. + /// + [DataField, AutoNetworkedField] + public Vector2? SpawnPosition; + + /// + /// If not null, particles will spawn at this entity coordinates. + /// + [DataField, AutoNetworkedField] + public EntityUid? SpawnEntityPosition; + + /// + /// Particles are spawned in a radius around the origin. + /// + [DataField, Animatable] + public float Radius { get; set; } + + /// + /// If this is not null, trail particles will render this entity instead of sprite/lines + /// + [DataField, AutoNetworkedField] + public EntityUid? RenderedEntity; + + /// + /// Whether to use rotation (if it is not null), trail entity rotation, + /// or particle rotation. + /// + [DataField] + public LerpPropertyData.RenderedEntityRotationStrategy RenderedEntityRotationStrategy; + + /// + /// Whether the trail should slowly fade out even when the entity was deleted. + /// + [DataField, AutoNetworkedField] + public bool SpawnRemainingTrail = true; + + /// + /// Used for spread, if is greater than one. + /// Zero angle faces towards projectile direction. + /// + [DataField, AutoNetworkedField] + public Angle StartAngle; + + /// + /// + /// + [DataField, AutoNetworkedField] + public Angle EndAngle; + + /// + /// The less this value is, the more frequent the particles will be. This is basically time of each cycle. + /// + [DataField, AutoNetworkedField] + public float Frequency = 0.2f; + + /// + /// Lifetime of one particle. + /// + [DataField, AutoNetworkedField] + public float Lifetime = 1f; + + /// + /// Delay before a particle starts lerping. + /// + [DataField, AutoNetworkedField] + public TimeSpan LerpDelay = TimeSpan.Zero; + + /// + /// Velocity of a particle, aimed towards somewhere between and . + /// + [DataField, AutoNetworkedField] + public float Velocity; + + /// + /// Less value for smoother lerps and more lag. You can get away with much less value, really. + /// Affects , and + /// + [DataField, AutoNetworkedField] + public float LerpTime = 0.05f; + + /// + /// Color alpga lerps to by this amount every seconds. + /// + [DataField, Animatable] + public float AlphaLerpAmount { get; set; } = 0.3f; + + /// + /// Scale lerps to by this amount every seconds. + /// + [DataField, Animatable] + public float ScaleLerpAmount { get; set; } + + /// + /// Velocity lerps to by this amount every seconds. + /// + [DataField, Animatable] + public float VelocityLerpAmount { get; set; } + + /// + /// Particle position lerps to the origin entity position by this amount every seconds. + /// + [DataField, Animatable] + public float PositionLerpAmount { get; set; } + + /// + /// Color alpha lerps to this value every seconds. + /// + [DataField, Animatable] + public float AlphaLerpTarget { get; set; } + + /// + /// Scale lerps to this value every seconds. + /// + [DataField, Animatable] + public float ScaleLerpTarget { get; set; } + + /// + /// Velocity lerps to this value every seconds. + /// + [DataField, Animatable] + public float VelocityLerpTarget { get; set; } + + /// + /// If sprite is null, it will draw lines instead. + /// + [DataField, AutoNetworkedField] + public SpriteSpecifier? Sprite; + + [DataField] + public float Scale = 1f; + + [DataField] + public string? Shader; + + [DataField, AutoNetworkedField] + public Color Color = Color.White; + + [DataField] + public List AdditionalLerpData = new(); + + [ViewVariables(VVAccess.ReadOnly)] + public float Accumulator; + + [ViewVariables(VVAccess.ReadOnly)] + public float LerpAccumulator; + + [ViewVariables(VVAccess.ReadOnly)] + public int CurIndex; + + [ViewVariables(VVAccess.ReadOnly)] + public int ParticleCount; + + [ViewVariables(VVAccess.ReadOnly)] + public MapCoordinates LastCoords = MapCoordinates.Nullspace; + + public List TrailData = new(); +} + +public sealed class TrailData( + Vector2 position, + float velocity, + MapId mapId, + Vector2 direction, + Angle angle, + Color color, + float scale, + TimeSpan spawnTime) +{ + public Vector2 Position = position; + public float Velocity = velocity; + public MapId MapId = mapId; + public Vector2 Direction = direction; + public Angle Angle = angle; + public Color Color = color; + public float Scale = scale; + public TimeSpan SpawnTime = spawnTime; +} + +[DataDefinition] +public sealed partial class LerpPropertyData +{ + [DataField(required: true)] + public string? Property; // WD edit - make Property nullable + + [DataField] + public float LerpAmount = 0.015f; + + [DataField] + public float Value; + + [DataField] + public float LerpTarget = 1f; + +public enum RenderedEntityRotationStrategy : byte +{ + RenderedEntity = 0, + Trail, + Particle +} + +[ImplicitDataDefinitionForInheritors] +public partial interface IGetShaderData; +public abstract partial class GetShaderParam : IGetShaderData +{ + [DataField(required: true)] + public string Param = string.Empty; +} +// Add more data if needed +public sealed partial class GetShaderLocalPositionData : IGetShaderData; + +public sealed partial class GetShaderFloatParam : GetShaderParam; +}; diff --git a/Content.Shared/_White/Wizard/SharedSpellsSystem.cs b/Content.Shared/_White/Wizard/SharedSpellsSystem.cs new file mode 100644 index 00000000000..d5d9a93aae5 --- /dev/null +++ b/Content.Shared/_White/Wizard/SharedSpellsSystem.cs @@ -0,0 +1,177 @@ +using System.Linq; +using Content.Shared.Actions; +using Content.Shared.Carrying; +using Content.Shared.Charges.Components; +using Content.Shared.Charges.Systems; +using Content.Shared.Hands.Components; +using Content.Shared.Hands.EntitySystems; +using Content.Shared.IdentityManagement; +using Content.Shared.Magic; +using Content.Shared.Magic.Components; +using Content.Shared.Movement.Pulling.Components; +using Content.Shared.Popups; +using Content.Shared.Tag; +using Content.Shared.Weapons.Ranged.Components; +using Content.Shared.Weapons.Ranged.Systems; +using Robust.Shared.Audio.Systems; +using Robust.Shared.Prototypes; +using Robust.Shared.Serialization; +using Robust.Shared.Timing; + + +namespace Content.Shared._White.Wizard; + + +public abstract class SharedSpellsSystem : EntitySystem +{ + [Dependency] protected readonly IPrototypeManager ProtoMan = default!; + [Dependency] protected readonly IGameTiming Timing = default!; + + [Dependency] protected readonly TagSystem Tag = default!; + [Dependency] protected readonly SharedActionsSystem Actions = default!; + [Dependency] protected readonly SharedAudioSystem Audio = default!; + [Dependency] protected readonly SharedHandsSystem Hands = default!; + [Dependency] protected readonly SharedTransformSystem TransformSystem = default!; + + [Dependency] private readonly SharedChargesSystem _charges = default!; + [Dependency] private readonly SharedGunSystem _gunSystem = default!; + [Dependency] private readonly SharedMagicSystem _magic = default!; + [Dependency] private readonly SharedPopupSystem _popup = default!; + + public override void Initialize() + { + SubscribeLocalEvent(OnPolymorph); + SubscribeLocalEvent(OnCharge); + } + + private void OnCharge(ChargeMagicEvent ev) + { + if (ev.Handled || !_magic.PassesSpellPrerequisites(ev.Action, ev.Performer)) + return; + + ev.Handled = true; + + var raysEv = new ChargeSpellRaysEffectEvent(GetNetEntity(ev.Performer)); + CreateChargeEffect(ev.Performer, raysEv); + + if (TryComp(ev.Performer, out var puller) && HasComp(puller.Pulling) && + RechargePerson(puller.Pulling.Value)) + return; + + if (TryComp(ev.Performer, out CarryingComponent? carrying) && RechargePerson(carrying.Carried)) + return; + + if (!TryComp(ev.Performer, out HandsComponent? hands)) + return; + + foreach (var item in Hands.EnumerateHeld(ev.Performer, hands)) + { + if (Tag.HasAnyTag(item, ev.RechargeTags)) + { + if (TryComp(item, out var limitedCharges)) + { + _charges.SetCharges(item, limitedCharges.MaxCharges, limitedCharges.MaxCharges); + PopupCharged(item, ev.Performer); + break; + } + + if (TryComp(item, out var basicAmmoComp) && + basicAmmoComp is { Count: not null, Capacity: not null } && + basicAmmoComp.Count < basicAmmoComp.Capacity) + { + _gunSystem.UpdateBasicEntityAmmoCount(item, basicAmmoComp.Capacity.Value, basicAmmoComp); + PopupCharged(item, ev.Performer); + break; + } + } + + if (ChargeItem(item, ev)) + break; + } + + return; + + bool RechargePerson(EntityUid uid) + { + if (RechargeAllSpells(uid)) + { + PopupCharged(uid, ev.Performer, false); + _popup.PopupEntity(Loc.GetString("spell-charge-spells-charged-pulled"), uid, uid, PopupType.Medium); + ev.Handled = true; + return true; + } + + _popup.PopupEntity(Loc.GetString("spell-charge-no-spells-to-charge-pulled"), uid, uid, PopupType.Medium); + return false; + } + } + + private void OnPolymorph(PolymorphSpellEvent ev) + { + if (ev.Handled || !_magic.PassesSpellPrerequisites(ev.Action, ev.Performer)) + return; + + ev.Handled = Polymorph(ev); + } + + #region Helpers + + public abstract void CreateChargeEffect(EntityUid uid, ChargeSpellRaysEffectEvent ev); + + protected void PopupCharged(EntityUid uid, EntityUid performer, bool client = true) + { + var message = Loc.GetString("spell-charge-spells-charged-entity", + ("entity", Identity.Entity(uid, EntityManager))); + if (client) + PopupLoc(performer, message, PopupType.Medium); + else + _popup.PopupEntity(message, performer, performer, PopupType.Medium); + } + + private bool RechargeAllSpells(EntityUid uid, EntityUid? except = null) + { + var magicQuery = GetEntityQuery(); + var ents = except != null + ? Actions.GetActions(uid).Where(x => x.Id != except.Value && magicQuery.HasComp((EntityUid)x.Id)) + : Actions.GetActions(uid).Where(x => magicQuery.HasComp(x.Id)); + var hasSpells = false; + foreach (var (ent, _) in ents) + { + hasSpells = true; + Actions.SetCooldown(ent, TimeSpan.Zero); + } + + return hasSpells; + } + + + + #endregion + + #region ServerMethods + + protected virtual bool ChargeItem(EntityUid uid, ChargeMagicEvent ev) + { + return true; + } + + protected virtual bool Polymorph(PolymorphSpellEvent ev) + { + return true; + } + public virtual void SpeakSpell(EntityUid speakerUid, EntityUid casterUid, string speech, MagicSchool school) { } + + #endregion + #region Helpers + private void PopupLoc(EntityUid uid, string locMessage, PopupType type = PopupType.Small) + { + _popup.PopupClient(locMessage, uid, uid, type); + } + #endregion +} + +[Serializable, NetSerializable] +public sealed class ChargeSpellRaysEffectEvent(NetEntity uid) : EntityEventArgs +{ + public NetEntity Uid = uid; +} diff --git a/Content.Shared/_White/Wizard/SpellEvents.cs b/Content.Shared/_White/Wizard/SpellEvents.cs new file mode 100644 index 00000000000..0216796e8c6 --- /dev/null +++ b/Content.Shared/_White/Wizard/SpellEvents.cs @@ -0,0 +1,46 @@ +using Content.Shared.Actions; +using Content.Shared.Polymorph; +using Content.Shared.Tag; +using Robust.Shared.Audio; +using Robust.Shared.Prototypes; + + +namespace Content.Shared._White.Wizard; + + +public sealed partial class ChargeMagicEvent : InstantActionEvent +{ + [DataField] + public ProtoId WandTag = "WizardWand"; + + [DataField] + public float WandChargeRate = 1000f; + + [DataField] + public float MinWandDegradeCharge = 1000f; + + [DataField] + public float WandDegradePercentagePerCharge = 0.5f; + + [DataField] + public List> RechargeTags = new() + { + "WizardWand", + "WizardStaff", + }; +} + +public sealed partial class PolymorphSpellEvent : InstantActionEvent +{ + [DataField] + public ProtoId? ProtoId; + + [DataField] + public bool MakeWizard = true; + + [DataField] + public SoundSpecifier? Sound; + + [DataField] + public bool LoadActions; +} diff --git a/Content.Shared/_White/Wizard/SupermatterHalberd/RaysSystem.cs b/Content.Shared/_White/Wizard/SupermatterHalberd/RaysSystem.cs new file mode 100644 index 00000000000..84e8aa92e69 --- /dev/null +++ b/Content.Shared/_White/Wizard/SupermatterHalberd/RaysSystem.cs @@ -0,0 +1,62 @@ +// SPDX-FileCopyrightText: 2025 Aiden <28298836+Aidenkrz@users.noreply.github.com> +// SPDX-FileCopyrightText: 2025 Aviu00 <93730715+Aviu00@users.noreply.github.com> +// SPDX-FileCopyrightText: 2025 Misandry +// SPDX-FileCopyrightText: 2025 gus +// +// SPDX-License-Identifier: AGPL-3.0-or-later + +using System.Numerics; +using Robust.Shared.Map; +using Robust.Shared.Network; +using Robust.Shared.Random; + + +namespace Content.Shared._White.Wizard.SupermatterHalberd; + +public sealed class RaysSystem : EntitySystem +{ + [Dependency] private readonly INetManager _net = default!; + [Dependency] private readonly IRobustRandom _random = default!; + [Dependency] private readonly SharedPointLightSystem _pointLight = default!; + [Dependency] private readonly SharedTransformSystem _transform = default!; + + public EntityUid? DoRays(MapCoordinates coords, + Color colorA, + Color colorB, + int min = 5, + int max = 10, + Vector2? minMaxRadius = null, + Vector2? minMaxEnergy = null, + string proto = "EffectRay", + bool server = true) + { + if (server && _net.IsClient || !server && _net.IsServer || min > max) + return null; + + var amount = _random.Next(min, max + 1); + if (amount < 1) + return null; + + var parent = Spawn(proto, coords, rotation: _random.NextAngle()); + RandomizeLight(parent); + + for (var i = 0; i < amount - 1; i++) + { + var newRay = Spawn(proto, coords, rotation: _random.NextAngle()); + _transform.SetParent(newRay, parent); + RandomizeLight(newRay); + } + + return parent; + + void RandomizeLight(EntityUid ray) + { + var hsv = Robust.Shared.Maths.Vector4.Lerp(Color.ToHsv(colorA), Color.ToHsv(colorB), _random.NextFloat()); + _pointLight.SetColor(ray, Color.FromHsv(hsv)); + if (minMaxRadius != null && minMaxRadius.Value.X < minMaxRadius.Value.Y && minMaxRadius.Value.X >= 0) + _pointLight.SetRadius(ray, _random.NextFloat(minMaxRadius.Value.X, minMaxRadius.Value.Y)); + if (minMaxEnergy != null && minMaxEnergy.Value.X < minMaxEnergy.Value.Y && minMaxEnergy.Value.X >= 0) + _pointLight.SetEnergy(ray, _random.NextFloat(minMaxEnergy.Value.X, minMaxEnergy.Value.Y)); + } + } +} diff --git a/Content.Shared/_White/Wizard/WizardComponent.cs b/Content.Shared/_White/Wizard/WizardComponent.cs new file mode 100644 index 00000000000..9f1e6f68bb3 --- /dev/null +++ b/Content.Shared/_White/Wizard/WizardComponent.cs @@ -0,0 +1,12 @@ +using Content.Shared.StatusIcon; +using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; + +namespace Content.Shared._White.Wizard; + +[RegisterComponent, NetworkedComponent] +public sealed partial class WizardComponent : Component +{ + [DataField] + public ProtoId StatusIcon = "WizardFaction"; +} \ No newline at end of file diff --git a/Resources/Audio/_White/Wizard/charge.ogg b/Resources/Audio/_White/Wizard/charge.ogg new file mode 100644 index 00000000000..332ff801dd3 Binary files /dev/null and b/Resources/Audio/_White/Wizard/charge.ogg differ diff --git a/Resources/Locale/en-US/_Goobstation/wizard/spells-actions.ftl b/Resources/Locale/en-US/_Goobstation/wizard/spells-actions.ftl new file mode 100644 index 00000000000..0e171ee3f87 --- /dev/null +++ b/Resources/Locale/en-US/_Goobstation/wizard/spells-actions.ftl @@ -0,0 +1,2 @@ +action-speech-spell-charge = DI'RI CEL + diff --git a/Resources/Prototypes/Actions/polymorph.yml b/Resources/Prototypes/Actions/polymorph.yml index 3ca32cb2091..eba082886eb 100644 --- a/Resources/Prototypes/Actions/polymorph.yml +++ b/Resources/Prototypes/Actions/polymorph.yml @@ -34,11 +34,11 @@ components: - type: InstantAction useDelay: 60 - event: !type:PolymorphActionEvent + event: !type:PolymorphSpellEvent # WD edit protoId: WizardRod itemIconStyle: NoItem icon: - sprite: _Goobstation/Wizard/actions.rsi # Goob edit + sprite: _White/Wizard/actions.rsi # WD edit state: immrod # WD EDIT START - type: ActionUpgrade @@ -55,14 +55,20 @@ description: Melt into the Ethereal Plane for a quick getaway! components: - type: Magic + requiresClothes: true # WD + school: Translocation # WD + - type: Sprite # WD - for apprentices + sprite: _White/Wizard/actions.rsi + state: jaunt - type: InstantAction useDelay: 30 - event: !type:PolymorphActionEvent - protoId: Jaunt - itemIconStyle: NoItem icon: - sprite: _Goobstation/Wizard/actions.rsi # Goob edit + sprite: _White/Wizard/actions.rsi # WD edit state: jaunt + itemIconStyle: NoItem +# - type: InstantAction + event: !type:PolymorphSpellEvent # WD edit + protoId: Jaunt # TODO: Effect ECS (from cardboard box) - type: ActionUpgrade effectedLevels: @@ -77,11 +83,11 @@ components: - type: InstantAction useDelay: 25 - event: !type:PolymorphActionEvent + event: !type:PolymorphSpellEvent # WD edit protoId: Jaunt itemIconStyle: NoItem icon: - sprite: _Goobstation/Wizard/actions.rsi # Goob edit + sprite: _White/Wizard/actions.rsi # WD edit state: jaunt - type: entity @@ -92,9 +98,9 @@ components: - type: InstantAction useDelay: 20 - event: !type:PolymorphActionEvent + event: !type:PolymorphSpellEvent # WD edit protoId: Jaunt itemIconStyle: NoItem icon: - sprite: _Goobstation/Wizard/actions.rsi # Goob edit + sprite: _White/Wizard/actions.rsi # WD edit state: jaunt diff --git a/Resources/Prototypes/Actions/types.yml b/Resources/Prototypes/Actions/types.yml index 34f78ee5c80..cac8fea0cc2 100644 --- a/Resources/Prototypes/Actions/types.yml +++ b/Resources/Prototypes/Actions/types.yml @@ -84,7 +84,7 @@ itemIconStyle: BigAction priority: -20 icon: - sprite: _Goobstation/Wizard/actions.rsi # Goob edit + sprite: _White/Wizard/actions.rsi # WD edit state: gib event: !type:ActivateImplantEvent diff --git a/Resources/Prototypes/Catalog/spellbook_catalog.yml b/Resources/Prototypes/Catalog/spellbook_catalog.yml index 00d3e332a77..3027fa2db9c 100644 --- a/Resources/Prototypes/Catalog/spellbook_catalog.yml +++ b/Resources/Prototypes/Catalog/spellbook_catalog.yml @@ -324,7 +324,7 @@ name: spellbook-upgrade-fireball-name description: spellbook-upgrade-fireball-description icon: - sprite: _Goobstation/Wizard/actions.rsi # Goob edit + sprite: _White/Wizard/actions.rsi # WD edit state: fireball cost: WizCoin: 2 @@ -344,7 +344,7 @@ name: spellbook-upgrade-jaunt-name description: spellbook-upgrade-jaunt-description icon: - sprite: _Goobstation/Wizard/actions.rsi # Goob edit + sprite: _White/Wizard/actions.rsi # WD edit state: jaunt cost: WizCoin: 2 diff --git a/Resources/Prototypes/Entities/Clothing/Head/hardsuit-helmets.yml b/Resources/Prototypes/Entities/Clothing/Head/hardsuit-helmets.yml index 9b5662a58ea..de442841057 100644 --- a/Resources/Prototypes/Entities/Clothing/Head/hardsuit-helmets.yml +++ b/Resources/Prototypes/Entities/Clothing/Head/hardsuit-helmets.yml @@ -680,29 +680,43 @@ #Wizard Hardsuit - type: entity - parent: [ ClothingHeadHardsuitBase, ClothingHeadSuitWithLightBase ] + parent: [ClothingHeadHardsuitBase, ClothingHeadHatWizardBaseArmor] # Goob edit id: ClothingHeadHelmetHardsuitWizard - name: wizard hardsuit helmet + name: wizard hardsuit helmet # Goob edit description: A bizarre gem-encrusted helmet that radiates magical energies. components: - type: Sprite sprite: Clothing/Head/Hardsuits/wizard.rsi - type: Clothing sprite: Clothing/Head/Hardsuits/wizard.rsi - - type: PointLight - color: "#ffadfb" + clothingVisuals: + head: + - state: off-equipped-HELMET + - type: PointLight # Goob edit + color: "#4d7ae3" + energy: 10 + radius: 5 - type: PressureProtection highPressureMultiplier: 0.27 lowPressureMultiplier: 1000 - - type: Armor + - type: Armor # Goob edit +# traumaDeductions: # prevents traumas at all (kinda) +# Dismemberment: 1 +# OrganDamage: 1 +# BoneDamage: 1 +# VeinsDamage: 1 +# NerveDamage: 1 modifiers: coefficients: - Blunt: 0.9 - Slash: 0.9 - Piercing: 0.9 - Heat: 0.9 + Blunt: 0.4 + Slash: 0.4 + Piercing: 0.4 + Heat: 0.4 + Radiation: 0.05 + Caustic: 0.1 - type: FlashImmunity # Goobstation - type: FlashSoundSuppression # Goobstation + - type: WizardClothes # WD EDIT #Organic Space Suit - type: entity diff --git a/Resources/Prototypes/Entities/Clothing/Head/hats.yml b/Resources/Prototypes/Entities/Clothing/Head/hats.yml index 26496a3727f..9aaeea067b1 100644 --- a/Resources/Prototypes/Entities/Clothing/Head/hats.yml +++ b/Resources/Prototypes/Entities/Clothing/Head/hats.yml @@ -488,7 +488,7 @@ - HeadSide - type: entity - parent: ClothingHeadHatWizardBase + parent: ClothingHeadBase # Goob edit id: ClothingHeadHatRedwizard name: red wizard hat description: Strange-looking red hat-wear that most certainly belongs to a real magic user. @@ -609,7 +609,7 @@ - type: entity - parent: ClothingHeadHatWizardBase + parent: ClothingHeadBase # Goob edit id: ClothingHeadHatVioletwizard name: violet wizard hat description: "Strange-looking violet hat-wear that most certainly belongs to a real magic user." @@ -676,7 +676,7 @@ - type: WizardClothes - type: entity - parent: ClothingHeadHatWizardBase + parent: ClothingHeadBase # Goob edit id: ClothingHeadHatWizard name: wizard hat description: Strange-looking blue hat-wear that most certainly belongs to a powerful magic user. @@ -690,12 +690,12 @@ - ClothMade - HamsterWearable - WhitelistChameleon - - type: PressureProtection # DeltaV - Make real wizard clothes space proof - highPressureMultiplier: 0.6 - lowPressureMultiplier: 1000 - - type: TemperatureProtection - heatingCoefficient: 0.2 - coolingCoefficient: 0.2 +# - type: PressureProtection # DeltaV - Make real wizard clothes space proof +# highPressureMultiplier: 0.6 +# lowPressureMultiplier: 1000 +# - type: TemperatureProtection +# heatingCoefficient: 0.2 +# coolingCoefficient: 0.2 - type: entity parent: ClothingHeadBase diff --git a/Resources/Prototypes/Entities/Clothing/Neck/mantles.yml b/Resources/Prototypes/Entities/Clothing/Neck/mantles.yml index 18f464736d4..08e75be7c3c 100644 --- a/Resources/Prototypes/Entities/Clothing/Neck/mantles.yml +++ b/Resources/Prototypes/Entities/Clothing/Neck/mantles.yml @@ -96,3 +96,16 @@ sprite: Clothing/Neck/mantles/unathimantle.rsi - type: Clothing sprite: Clothing/Neck/mantles/unathimantle.rsi + +# Goob edit start +- type: entity + parent: ClothingNeckBase + id: ClothingNeckMantle + name: mantle + description: A soft mantle, made with the same 'synthetic' animal furs of the iconic winter coat. + components: + - type: Sprite + sprite: Clothing/Neck/mantles/mantle.rsi + - type: Clothing + sprite: Clothing/Neck/mantles/mantle.rsi +# Goob edit end diff --git a/Resources/Prototypes/Entities/Clothing/OuterClothing/armor.yml b/Resources/Prototypes/Entities/Clothing/OuterClothing/armor.yml index 1fa3703b5d9..13450eaecd4 100644 --- a/Resources/Prototypes/Entities/Clothing/OuterClothing/armor.yml +++ b/Resources/Prototypes/Entities/Clothing/OuterClothing/armor.yml @@ -314,21 +314,37 @@ sprite: Clothing/OuterClothing/Armor/heavyred.rsi - type: entity - parent: ClothingOuterArmorHeavy + parent: [ClothingOuterArmorHeavy, ClothingOuterWizardBaseArmor, BaseMagicalContraband] # Goob edit id: ClothingOuterArmorMagusblue name: blue magus armor - description: An blue armored suit that provides good protection. + description: An blue armored suit that provides good protection. Doesn't count as wizard robes. # Goob edit components: - type: Sprite sprite: Clothing/OuterClothing/Armor/magusblue.rsi - type: Clothing sprite: Clothing/OuterClothing/Armor/magusblue.rsi + - type: Armor + modifiers: + coefficients: + Blunt: 0.4 + Slash: 0.4 + Piercing: 0.4 + Heat: 0.4 + Radiation: 0.1 + Caustic: 0.1 + - type: ClothingSpeedModifier # Goobstation + walkModifier: 1.0 + sprintModifier: 1.0 + - type: Tag # Goobstation + tags: + - WhitelistChameleon +# - SyringeArmor - type: entity - parent: ClothingOuterArmorHeavy + parent: ClothingOuterArmorMagusblue # Goob edit id: ClothingOuterArmorMagusred name: red magus armor - description: A red armored suit that provides good protection. + description: A red armored suit that provides good protection. Doesn't count as wizard robes. # Goob edit components: - type: Sprite sprite: Clothing/OuterClothing/Armor/magusred.rsi diff --git a/Resources/Prototypes/Entities/Clothing/OuterClothing/hardsuits.yml b/Resources/Prototypes/Entities/Clothing/OuterClothing/hardsuits.yml index 780e3f8b037..a3e8120b039 100644 --- a/Resources/Prototypes/Entities/Clothing/OuterClothing/hardsuits.yml +++ b/Resources/Prototypes/Entities/Clothing/OuterClothing/hardsuits.yml @@ -899,9 +899,9 @@ #Wizard Hardsuit - type: entity - parent: [ ClothingOuterHardsuitBase, BaseMagicalContraband ] + parent: [ClothingOuterHardsuitBase, ClothingOuterWizardBaseArmor, BaseMagicalContraband] # Goob edit id: ClothingOuterHardsuitWizard - name: wizard hardsuit + name: wizard hardsuit # Goob edit description: A bizarre gem-encrusted suit that radiates magical energies. components: - type: Sprite @@ -911,25 +911,39 @@ - type: PressureProtection highPressureMultiplier: 0.05 lowPressureMultiplier: 1000 - - type: ExplosionResistance - damageCoefficient: 0.5 - - type: Armor + - type: Armor # Goob edit +# traumaDeductions: # prevents traumas at all (kinda) +# Dismemberment: 1 +# OrganDamage: 1 +# BoneDamage: 1 +# VeinsDamage: 1 +# NerveDamage: 1 modifiers: coefficients: - Blunt: 0.6 - Slash: 0.6 - Piercing: 0.4 - Heat: 0.25 - Radiation: 0.25 - Caustic: 0.75 + Blunt: 0.35 + Slash: 0.35 + Piercing: 0.35 + Heat: 0.35 + Radiation: 0.05 + Caustic: 0.1 - type: ClothingSpeedModifier - walkModifier: 0.8 - sprintModifier: 0.8 + walkModifier: 0.9 # Goob edit + sprintModifier: 0.9 # Goob edit - type: HeldSpeedModifier - - type: ToggleableClothing - clothingPrototype: ClothingHeadHelmetHardsuitWizard - - type: StaminaDamageResistance - coefficient: 0.5 # 50% + - type: WizardClothes # Goobstation + - type: ToggleableClothing # Goobstation - Modsuits change + clothingPrototypes: + head: ClothingHeadHelmetHardsuitWizard +# - type: ModifyDelayedKnockdown # Goobstation +# cancel: true +# - type: StaminaResistance # Goobstation +# damageCoefficient: 0.2 + - type: Tag # Goobstation + tags: + - Hardsuit + - WhitelistChameleon +# - SyringeArmor +# - CorgiWearable #Ling Space Suit - type: entity diff --git a/Resources/Prototypes/Entities/Clothing/OuterClothing/misc.yml b/Resources/Prototypes/Entities/Clothing/OuterClothing/misc.yml index da79d6251d2..f9414db0b5a 100644 --- a/Resources/Prototypes/Entities/Clothing/OuterClothing/misc.yml +++ b/Resources/Prototypes/Entities/Clothing/OuterClothing/misc.yml @@ -215,7 +215,7 @@ # Is this wizard wearing a fanny pack??? - type: entity - parent: ClothingOuterWizardBase + parent: ClothingOuterBase # Goob edit id: ClothingOuterWizardViolet name: violet wizard robes description: A bizarre gem-encrusted violet robe that radiates magical energies. @@ -226,7 +226,7 @@ sprite: Clothing/OuterClothing/Misc/violetwizard.rsi - type: entity - parent: ClothingOuterWizardBase + parent: ClothingOuterBase # Goob edit id: ClothingOuterWizard name: wizard robes description: A bizarre gem-encrusted blue robe that radiates magical energies. @@ -237,7 +237,7 @@ sprite: Clothing/OuterClothing/Misc/wizard.rsi - type: entity - parent: ClothingOuterWizardBase + parent: ClothingOuterBase # Goob edit id: ClothingOuterWizardRed name: red wizard robes description: Strange-looking, red, hat-wear that most certainly belongs to a real magic user. diff --git a/Resources/Prototypes/Entities/Mobs/Player/jaunt_mobs.yml b/Resources/Prototypes/Entities/Mobs/Player/jaunt_mobs.yml index 4d2b868cf1e..002d0568892 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/jaunt_mobs.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/jaunt_mobs.yml @@ -18,6 +18,7 @@ - type: Visibility layer: 2 - type: Spectral + - type: IsDeadIC # Goobstation # Should be slow, for balance - type: entity @@ -26,15 +27,17 @@ id: EtherealJaunt suffix: Wizard components: - - type: Sprite - sprite: Mobs/Ghosts/ghost_human.rsi - color: "#60f7eb" - layers: - - state: animated - shader: unshaded - noRot: true - overrideContainerOcclusion: true - drawdepth: Ghosts + # Goob edit + #- type: Sprite + # sprite: Mobs/Ghosts/ghost_human.rsi + # color: "#60f7eb" + # layers: + # - state: animated + # shader: unshaded + # noRot: true + # overrideContainerOcclusion: true + # drawdepth: Ghosts - type: MovementSpeedModifier - baseSprintSpeed: 6 - baseWalkSpeed: 4 + baseSprintSpeed: 3 # Goob edit + baseWalkSpeed: 3 # Goob edit + - type: WizardJaunt # Goobstation diff --git a/Resources/Prototypes/Entities/Objects/Fun/immovable_rod.yml b/Resources/Prototypes/Entities/Objects/Fun/immovable_rod.yml index 4927f50dc18..0d95225ea1b 100644 --- a/Resources/Prototypes/Entities/Objects/Fun/immovable_rod.yml +++ b/Resources/Prototypes/Entities/Objects/Fun/immovable_rod.yml @@ -92,8 +92,17 @@ - type: MovementAlwaysTouching - type: NoSlip # WD EDIT START + - type: Trail # WD ed + frequency: 0.1 + lifetime: 1 + lerpTime: 0.1 + alphaLerpAmount: 0.4 + sprite: + sprite: /Textures/Objects/Fun/immovable_rod.rsi + state: icon - type: StatusIcon bounds: -0.5,-0.5,0.5,0.5 + - type: IsDeadIC # WD EDIT END - type: entity diff --git a/Resources/Prototypes/GameRules/events.yml b/Resources/Prototypes/GameRules/events.yml index 5c51dcde653..23667c7dfdd 100644 --- a/Resources/Prototypes/GameRules/events.yml +++ b/Resources/Prototypes/GameRules/events.yml @@ -277,7 +277,7 @@ max: 1 playerRatio: 1 pickPlayer: false - startingGear: WizardBlueGear + startingGear: WizardGear # Goob edit briefing: text: wizard-role-greeting color: Turquoise @@ -288,6 +288,7 @@ - type: NpcFactionMember factions: - Wizard + - type: Wizard # WD edit - type: RandomMetadata nameSegments: - names_wizard_first diff --git a/Resources/Prototypes/GameRules/roundstart.yml b/Resources/Prototypes/GameRules/roundstart.yml index 99250ea8fe1..21b48566d64 100644 --- a/Resources/Prototypes/GameRules/roundstart.yml +++ b/Resources/Prototypes/GameRules/roundstart.yml @@ -293,12 +293,13 @@ color: Turquoise # TODO: Need Wizard Start sound #sound: "/Audio/Ambience/Antag/wizard_start.ogg" - startingGear: WizardBlueGear + startingGear: WizardGear # Goob edit # TODO: WizardComp as needed components: - type: NpcFactionMember factions: - Wizard + - type: Wizard # WD edit - type: RandomMetadata nameSegments: - names_wizard_first diff --git a/Resources/Prototypes/GameRules/subgamemodes.yml b/Resources/Prototypes/GameRules/subgamemodes.yml index 3f0f8bfa5f9..a3aeaac9c26 100644 --- a/Resources/Prototypes/GameRules/subgamemodes.yml +++ b/Resources/Prototypes/GameRules/subgamemodes.yml @@ -51,12 +51,13 @@ color: Turquoise # TODO: Need Wizard Start sound #sound: "/Audio/Ambience/Antag/wizard_start.ogg" - startingGear: WizardBlueGear + startingGear: WizardGear # Goob edit # TODO: WizardComp as needed components: - type: NpcFactionMember factions: - Wizard + - type: Wizard # WD edit - type: RandomMetadata nameSegments: - names_wizard_first diff --git a/Resources/Prototypes/Magic/event_spells.yml b/Resources/Prototypes/Magic/event_spells.yml index f28a69a5eec..f9a5ef9c7b4 100644 --- a/Resources/Prototypes/Magic/event_spells.yml +++ b/Resources/Prototypes/Magic/event_spells.yml @@ -170,7 +170,7 @@ useDelay: 300 itemIconStyle: BigAction icon: - sprite: _Goobstation/Wizard/actions.rsi # Goob edit + sprite: _White/Wizard/actions.rsi # Goob edit state: missile event: !type:RandomGlobalSpawnSpellEvent makeSurvivorAntagonist: true diff --git a/Resources/Prototypes/Magic/forcewall_spells.yml b/Resources/Prototypes/Magic/forcewall_spells.yml index ac2b06a5ad6..1bebeecdc84 100644 --- a/Resources/Prototypes/Magic/forcewall_spells.yml +++ b/Resources/Prototypes/Magic/forcewall_spells.yml @@ -9,7 +9,7 @@ sound: !type:SoundPathSpecifier path: /Audio/Magic/forcewall.ogg icon: - sprite: _Goobstation/Wizard/actions.rsi # Goob edit + sprite: _White/Wizard/actions.rsi # Goob edit state: shield_greater event: !type:InstantSpawnSpellEvent prototype: WallForce diff --git a/Resources/Prototypes/Magic/knock_spell.yml b/Resources/Prototypes/Magic/knock_spell.yml index f7068249b4b..1e855bea8c5 100644 --- a/Resources/Prototypes/Magic/knock_spell.yml +++ b/Resources/Prototypes/Magic/knock_spell.yml @@ -9,7 +9,7 @@ sound: !type:SoundPathSpecifier path: /Audio/Magic/knock.ogg icon: - sprite: _Goobstation/Wizard/actions.rsi # Goob edit + sprite: _White/Wizard/actions.rsi # WD edit state: knock event: !type:KnockSpellEvent speech: action-speech-spell-knock diff --git a/Resources/Prototypes/Magic/mindswap_spell.yml b/Resources/Prototypes/Magic/mindswap_spell.yml index 2728035a442..8b4c9e95552 100644 --- a/Resources/Prototypes/Magic/mindswap_spell.yml +++ b/Resources/Prototypes/Magic/mindswap_spell.yml @@ -14,7 +14,7 @@ sound: !type:SoundPathSpecifier path: /Audio/Magic/staff_animation.ogg icon: - sprite: _Goobstation/Wizard/actions.rsi # Goob edit + sprite: _White/Wizard/actions.rsi # WD edit state: mindswap event: !type:MindSwapSpellEvent speech: action-speech-spell-mind-swap diff --git a/Resources/Prototypes/Magic/projectile_spells.yml b/Resources/Prototypes/Magic/projectile_spells.yml index 7e2fec54e6d..84febef7382 100644 --- a/Resources/Prototypes/Magic/projectile_spells.yml +++ b/Resources/Prototypes/Magic/projectile_spells.yml @@ -13,7 +13,7 @@ sound: !type:SoundPathSpecifier path: /Audio/Magic/fireball.ogg icon: - sprite: _Goobstation/Wizard/actions.rsi # Goob edit + sprite: _White/Wizard/actions.rsi # WD edit state: fireball event: !type:ProjectileSpellEvent prototype: ProjectileFireball @@ -39,7 +39,7 @@ sound: !type:SoundPathSpecifier path: /Audio/Magic/fireball.ogg icon: - sprite: _Goobstation/Wizard/actions.rsi # Goob edit + sprite: _White/Wizard/actions.rsi # WD edit state: fireball event: !type:ProjectileSpellEvent prototype: ProjectileFireball @@ -61,7 +61,7 @@ sound: !type:SoundPathSpecifier path: /Audio/Magic/fireball.ogg icon: - sprite: _Goobstation/Wizard/actions.rsi # Goob edit + sprite: _White/Wizard/actions.rsi # WD edit state: fireball event: !type:ProjectileSpellEvent prototype: ProjectileFireball diff --git a/Resources/Prototypes/Magic/recall_spell.yml b/Resources/Prototypes/Magic/recall_spell.yml index f0c92e0dcad..3c92b12ba47 100644 --- a/Resources/Prototypes/Magic/recall_spell.yml +++ b/Resources/Prototypes/Magic/recall_spell.yml @@ -15,7 +15,7 @@ maxDistance: 5 variation: 0.2 icon: - sprite: _Goobstation/Wizard/actions.rsi # Goob edit + sprite: _White/Wizard/actions.rsi # WD edit state: summons event: !type:OnItemRecallActionEvent - type: ItemRecall diff --git a/Resources/Prototypes/Magic/repulse_spell.yml b/Resources/Prototypes/Magic/repulse_spell.yml index ebd69d9ffc5..4d7d1a6dc5c 100644 --- a/Resources/Prototypes/Magic/repulse_spell.yml +++ b/Resources/Prototypes/Magic/repulse_spell.yml @@ -15,7 +15,7 @@ raiseOnAction: true itemIconStyle: BigAction icon: - sprite: _Goobstation/Wizard/actions.rsi # Goob edit + sprite: _White/Wizard/actions.rsi # WD edit state: repulse event: !type:RepulseAttractActionEvent # WD EDIT START diff --git a/Resources/Prototypes/Magic/smoke_spell.yml b/Resources/Prototypes/Magic/smoke_spell.yml index 80d333643fb..ef5693fe7bb 100644 --- a/Resources/Prototypes/Magic/smoke_spell.yml +++ b/Resources/Prototypes/Magic/smoke_spell.yml @@ -7,7 +7,7 @@ useDelay: 10 itemIconStyle: BigAction icon: - sprite: _Goobstation/Wizard/actions.rsi # Goob edit + sprite: _White/Wizard/actions.rsi # WD edit state: smoke event: !type:InstantSpawnSpellEvent prototype: WizardSmoke diff --git a/Resources/Prototypes/Magic/teleport_spells.yml b/Resources/Prototypes/Magic/teleport_spells.yml index feec3166a22..ed2530ac922 100644 --- a/Resources/Prototypes/Magic/teleport_spells.yml +++ b/Resources/Prototypes/Magic/teleport_spells.yml @@ -13,7 +13,7 @@ checkCanAccess: false repeat: false icon: - sprite: _Goobstation/Wizard/actions.rsi # Goob edit + sprite: _White/Wizard/actions.rsi # WD edit state: blink event: !type:TeleportSpellEvent @@ -37,7 +37,7 @@ checkCanAccess: false repeat: false icon: - sprite: _Goobstation/Wizard/actions.rsi # Goob edit + sprite: _White/Wizard/actions.rsi # WD edit state: swap event: !type:VoidApplauseSpellEvent effect: EffectVoidBlink diff --git a/Resources/Prototypes/Magic/touch_spells.yml b/Resources/Prototypes/Magic/touch_spells.yml index 35721e1695d..c3228a3089e 100644 --- a/Resources/Prototypes/Magic/touch_spells.yml +++ b/Resources/Prototypes/Magic/touch_spells.yml @@ -14,7 +14,7 @@ sound: !type:SoundPathSpecifier path: /Audio/Magic/disintegrate.ogg icon: - sprite: _Goobstation/Wizard/actions.rsi # Goob edit + sprite: _White/Wizard/actions.rsi # WD edit state: gib event: !type:SmiteSpellEvent speech: action-speech-spell-smite @@ -52,7 +52,7 @@ sound: !type:SoundPathSpecifier path: /Audio/Items/brokenbikehorn.ogg icon: - sprite: _Goobstation/Wizard/actions.rsi # Goob edit + sprite: _White/Wizard/actions.rsi # WD edit state: cluwne event: !type:ChangeComponentsSpellEvent speech: action-speech-spell-cluwne diff --git a/Resources/Prototypes/Magic/utility_spells.yml b/Resources/Prototypes/Magic/utility_spells.yml index 3b5019b24a4..a98446a95d9 100644 --- a/Resources/Prototypes/Magic/utility_spells.yml +++ b/Resources/Prototypes/Magic/utility_spells.yml @@ -1,22 +1,32 @@ - type: entity +# parent: BaseAction id: ActionChargeSpell name: Charge - description: Adds a charge back to your wand + description: This spell can be used to recharge a variety of things in your hands, from magical artifacts to electrical components. A creative wizard can even use it to grant magical power to a fellow magic user. # Goob edit components: - type: InstantAction - useDelay: 30 + useDelay: 60 itemIconStyle: BigAction + sound: !type:SoundPathSpecifier # WD + path: /Audio/_White/Wizard/charge.ogg #WD edit icon: - sprite: _Goobstation/Wizard/actions.rsi # Goob edit - state: charge - event: !type:ChargeSpellEvent - charge: 1 - speech: DI'RI CEL! - # WD EDIT START + sprite: _White/Wizard/actions.rsi # WD edit + state: charge # WD edit + event: !type:ChargeMagicEvent + - type: Sprite # WD - for apprentices + sprite: _White/Wizard/actions.rsi + state: charge + - type: Magic # WD + requiresSpeech: true + school: Transmutation - type: ActionUpgrade effectedLevels: 2: ActionChargeII 3: ActionChargeIII 4: ActionChargeIV 5: ActionChargeV - # WD EDIT END +# - type: InstantAction +# event: !type:ChargeMagicEvent # WD edit + + - type: SpeakOnAction + sentence: action-speech-spell-charge diff --git a/Resources/Prototypes/Objectives/wizard.yml b/Resources/Prototypes/Objectives/wizard.yml index 918d8377715..4623e5ae796 100644 --- a/Resources/Prototypes/Objectives/wizard.yml +++ b/Resources/Prototypes/Objectives/wizard.yml @@ -31,5 +31,5 @@ components: - type: Objective icon: - sprite: _Goobstation/Wizard/actions.rsi # Goob edit + sprite: _White/Wizard/actions.rsi # WD edit state: fireball diff --git a/Resources/Prototypes/Polymorphs/polymorph.yml b/Resources/Prototypes/Polymorphs/polymorph.yml index 745e032e7de..31073d0a035 100644 --- a/Resources/Prototypes/Polymorphs/polymorph.yml +++ b/Resources/Prototypes/Polymorphs/polymorph.yml @@ -199,6 +199,6 @@ revertOnDeath: true revertOnCrit: true allowRepeatedMorphs: false - polymorphSound: /Audio/Magic/ethereal_enter.ogg - exitPolymorphSound: /Audio/Magic/ethereal_exit.ogg - duration: 3 +# polymorphSound: /Audio/Magic/ethereal_enter.ogg # Goob edit +# exitPolymorphSound: /Audio/Magic/ethereal_exit.ogg # Goob edit + duration: 5 # Goob edit diff --git a/Resources/Prototypes/_Goobstation/Entities/Specific/syndicate.yml b/Resources/Prototypes/_Goobstation/Entities/Specific/syndicate.yml index 051a109c72d..de6bc247f45 100644 --- a/Resources/Prototypes/_Goobstation/Entities/Specific/syndicate.yml +++ b/Resources/Prototypes/_Goobstation/Entities/Specific/syndicate.yml @@ -21,11 +21,11 @@ description: A scroll filled with strange markings. It seems to be drawings of some sort of martial art. components: - type: Sprite - sprite: _Goobstation/Wizard/Objects/scroll.rsi + sprite: _White/Wizard/Objects/scroll.rsi layers: - state: scroll2 - type: Item - sprite: _Goobstation/Wizard/Objects/scroll.rsi + sprite: _White/Wizard/Objects/scroll.rsi size: Small - type: StaticPrice price: 3000 diff --git a/Resources/Prototypes/_Goobstation/tags.yml b/Resources/Prototypes/_Goobstation/tags.yml index f6edc0b97bc..31fd2075a0f 100644 --- a/Resources/Prototypes/_Goobstation/tags.yml +++ b/Resources/Prototypes/_Goobstation/tags.yml @@ -34,6 +34,9 @@ - type: Tag id: CombatMech +- type: Tag + id: CursedAnimalMask + - type: Tag id: Durand @@ -145,6 +148,9 @@ - type: Tag id: SpecialMech +- type: Tag + id: ShowWizardIcons + - type: Tag id: WeaponPistolDualetta diff --git a/Resources/Prototypes/_White/Wizard/Clothing/bundles.yml b/Resources/Prototypes/_White/Wizard/Clothing/bundles.yml new file mode 100644 index 00000000000..0d0d8456f66 --- /dev/null +++ b/Resources/Prototypes/_White/Wizard/Clothing/bundles.yml @@ -0,0 +1,84 @@ +# SPDX-FileCopyrightText: 2025 Aiden <28298836+Aidenkrz@users.noreply.github.com> +# SPDX-FileCopyrightText: 2025 Aviu00 <93730715+Aviu00@users.noreply.github.com> +# +# SPDX-License-Identifier: AGPL-3.0-or-later + +- type: entity + parent: ClothingBackpackClown + id: ClothingBackpackWizardClownBundle + suffix: Wizard Clown Bundle + components: + - type: Tag + tags: [] # ignore "WhitelistChameleon" tag + - type: StorageFill + contents: + - id: ClothingOuterWizardClownReal + - id: ClothingHeadHatClownReal + - id: ClownPDA + - id: ClothingMaskClown + - id: ClothingShoesClown + - id: ClothingMaskSexyClown + - id: ClothingMaskClownBanana + - id: ClothingUniformJumpsuitClown + - id: ClothingShoesBling + +- type: entity + parent: ClothingBackpackMime + id: ClothingBackpackWizardMimeBundle + suffix: Wizard Mime Bundle + components: + - type: Tag + tags: [] # ignore "WhitelistChameleon" tag + - type: StorageFill + contents: + - id: ClothingOuterWizardMimeReal + - id: ClothingHeadHatMimeReal + - id: MimePDA + - id: ClothingBeltSuspendersBlack + - id: ClothingBeltSuspendersRed + - id: ClothingUniformJumpsuitMime + - id: ClothingMaskMime + - id: ClothingMaskSadMime + - id: ClothingMaskScaredMime + - id: ClothingMaskSexyMime + +- type: entity + parent: ClothingBackpack + id: ClothingBackpackOblivionEnforcerBundle + suffix: Wizard Oblivion Enforcer Bundle + components: + - type: Tag + tags: [] # ignore "WhitelistChameleon" tag + - type: StorageFill + contents: + - id: ClothingOuterOblivionEnforcer + - id: ClothingMaskGasOblivionEnforcer + - id: ClothingUniformJumpsuitColorWhite + - id: ClothingShoesColorWhite + - id: ClothingHandsGlovesColorYellow + +- type: entity + parent: ToolboxMechanical + id: ToolboxTider + description: Are you ready for the new tide order? + suffix: Tider + components: + - type: MeleeWeapon + damage: + types: + Blunt: 20 + +- type: entity + parent: ToolboxTider + id: ToolboxTiderFilled + suffix: Wizard Tider Bundle + components: + - type: StorageFill + contents: + - id: ClothingUniformJumpsuitAncient + - id: ClothingMaskGas + - id: ClothingHandsGlovesColorYellow + - id: ClothingNeckMantle + - id: ClothingOuterWinterColorGray + - id: ClothingShoesColorBlack + - id: PassengerPDA \ No newline at end of file diff --git a/Resources/Prototypes/_White/Wizard/Clothing/mask.yml b/Resources/Prototypes/_White/Wizard/Clothing/mask.yml new file mode 100644 index 00000000000..a8571fea3ae --- /dev/null +++ b/Resources/Prototypes/_White/Wizard/Clothing/mask.yml @@ -0,0 +1,92 @@ +# SPDX-FileCopyrightText: 2025 Aiden <28298836+Aidenkrz@users.noreply.github.com> +# SPDX-FileCopyrightText: 2025 Aviu00 <93730715+Aviu00@users.noreply.github.com> +# +# SPDX-License-Identifier: AGPL-3.0-or-later + +- type: entity + parent: ClothingMaskBase + id: ClothingMaskPig + name: pig mask + description: A rubber pig mask with a built-in voice modulator. + components: + - type: Sprite + sprite: _White/Wizard/Clothing/Mask/pig.rsi + - type: Clothing + sprite: _White/Wizard/Clothing/Mask/pig.rsi + - type: Tag + tags: + - CursedAnimalMask + - WhitelistChameleon + - IPCMaskWearable # EE - IPCs + - type: HideLayerClothing + slots: + - Snout + - type: IdentityBlocker + - type: AddAccentClothing + accent: PigAccent + +- type: entity + parent: ClothingMaskBase + id: ClothingMaskFrog + name: frog mask + description: An ancient mask carved in the shape of a frog. Sanity is like gravity, all it needs is a push. + components: + - type: Sprite + sprite: _White/Wizard/Clothing/Mask/frog.rsi + - type: Clothing + sprite: _White/Wizard/Clothing/Mask/frog.rsi + - type: Tag + tags: + - CursedAnimalMask + - WhitelistChameleon + - IPCMaskWearable # EE - IPCs + - type: HideLayerClothing + slots: + - Snout + - type: IdentityBlocker + - type: AddAccentClothing + accent: FrogAccent + +- type: entity + parent: ClothingMaskBase + id: ClothingMaskCow + name: cow mask + description: A mask made of soft vinyl and latex, representing the head of a cow. + components: + - type: Sprite + sprite: _White/Wizard/Clothing/Mask/cow.rsi + - type: Clothing + sprite: _White/Wizard/Clothing/Mask/cow.rsi + - type: Tag + tags: + - CursedAnimalMask + - WhitelistChameleon + - IPCMaskWearable # EE - IPCs + - type: HideLayerClothing + slots: + - Snout + - type: IdentityBlocker + - type: AddAccentClothing + accent: CowAccent + +- type: entity + parent: ClothingMaskBase + id: ClothingMaskHorse + name: horse mask + description: A mask made of soft vinyl and latex, representing the head of a horse. + components: + - type: Sprite + sprite: _White/Wizard/Clothing/Mask/horse.rsi + - type: Clothing + sprite: _White/Wizard/Clothing/Mask/horse.rsi + - type: Tag + tags: + - CursedAnimalMask + - WhitelistChameleon + - IPCMaskWearable # EE - IPCs + - type: HideLayerClothing + slots: + - Snout + - type: IdentityBlocker + - type: AddAccentClothing + accent: HorseAccent diff --git a/Resources/Prototypes/_White/Wizard/Clothing/wizard.yml b/Resources/Prototypes/_White/Wizard/Clothing/wizard.yml new file mode 100644 index 00000000000..7ddbe3be8b5 --- /dev/null +++ b/Resources/Prototypes/_White/Wizard/Clothing/wizard.yml @@ -0,0 +1,512 @@ +# SPDX-FileCopyrightText: 2025 Aiden <28298836+Aidenkrz@users.noreply.github.com> +# SPDX-FileCopyrightText: 2025 Aidenkrz +# SPDX-FileCopyrightText: 2025 Aviu00 <93730715+Aviu00@users.noreply.github.com> +# SPDX-FileCopyrightText: 2025 Aviu00 +# SPDX-FileCopyrightText: 2025 BramvanZijp <56019239+BramvanZijp@users.noreply.github.com> +# SPDX-FileCopyrightText: 2025 GoobBot +# SPDX-FileCopyrightText: 2025 Marcus F <199992874+thebiggestbruh@users.noreply.github.com> +# SPDX-FileCopyrightText: 2025 OnsenCapy <101037138+OnsenCapy@users.noreply.github.com> +# SPDX-FileCopyrightText: 2025 SX-7 +# SPDX-FileCopyrightText: 2025 SX_7 +# SPDX-FileCopyrightText: 2025 Ted Lukin <66275205+pheenty@users.noreply.github.com> +# SPDX-FileCopyrightText: 2025 gluesniffler <159397573+gluesniffler@users.noreply.github.com> +# SPDX-FileCopyrightText: 2025 grub +# SPDX-FileCopyrightText: 2025 pheenty +# SPDX-FileCopyrightText: 2025 shityaml +# +# SPDX-License-Identifier: AGPL-3.0-or-later + +- type: entity + parent: ClothingEyesBase + id: ClothingEyesEyepatchMedical + name: medical eyepatch + description: Used by space weeaboos to pretend their eye isn't there, and crewmembers who actually lost their eye to pretend their eye is there. + suffix: DO NOT MAP + categories: [ DoNotMap ] + save: false + components: + - type: Sprite + sprite: _White/Wizard/Clothing/Eyes/eyepatch.rsi + layers: + - state: icon + map: [ "flipped" ] + - type: Clothing + sprite: _White/Wizard/Clothing/Eyes/eyepatch.rsi + - type: WizardClothes + - type: Appearance +# - type: GenericVisualizer +# visuals: +# enum.FlippedVisuals.Flipped: +# flipped: +# True: { state: flipped-icon } +# False: { state: icon } +# - type: ChuuniEyepatch + - type: Tag + tags: + - ClothMade + - WhitelistChameleon + +- type: entity + abstract: true + id: ClothingHeadHatWizardBaseArmor + suffix: Wizard Clothes + components: + - type: Armor +# traumaDeductions: # prevents traumas at all (kinda) +# Dismemberment: 1 +# OrganDamage: 1 +# BoneDamage: 1 +# VeinsDamage: 1 +# NerveDamage: 1 +# coverage: +# - Head + modifiers: + coefficients: + Blunt: 0.6 + Slash: 0.6 + Piercing: 0.6 + Heat: 0.6 + Caustic: 0.1 + Radiation: 0.1 + - type: ExplosionResistance + damageCoefficient: 0.8 + - type: GroupExamine + +- type: entity + abstract: true + id: ClothingOuterWizardBaseArmor + suffix: Wizard Clothes + components: + - type: Armor +# coverage: # full coverage, idk, magic +# - Chest +# - Groin +# - Arm +# - Hand +# - Leg +# - Foot +# - Tail +# - Other +# traumaDeductions: # prevents traumas at all (kinda) +# Dismemberment: 1 +# OrganDamage: 1 +# BoneDamage: 1 +# VeinsDamage: 1 +# NerveDamage: 1 + modifiers: + coefficients: + Blunt: 0.6 + Slash: 0.6 + Piercing: 0.6 + Heat: 0.6 + Radiation: 0.1 + Caustic: 0.1 + - type: ExplosionResistance + damageCoefficient: 0.25 + - type: GroupExamine + - type: FireProtection + reduction: 1 + - type: TemperatureProtection + heatingCoefficient: 0.1 + coolingCoefficient: 0.1 +# - type: ModifyDelayedKnockdown +# delayDelta: 3 +# knockdownTimeDelta: -3 +# - type: StaminaResistance +# damageCoefficient: 0.5 + +# Black +- type: entity + parent: [ClothingHeadHatWizardBaseArmor, ClothingHeadHatWizardBase] + id: ClothingHeadHatBlackwizardReal + name: black wizard hat + description: Strange-looking black hat-wear that most certainly belongs to a real lich. Spooky. + components: + - type: Sprite + sprite: _White/Wizard/Clothing/Head/blackwizard.rsi + - type: Clothing + sprite: _White/Wizard/Clothing/Head/blackwizard.rsi + +- type: entity + parent: [ClothingOuterWizardBaseArmor, ClothingOuterWizardBase] + id: ClothingOuterWizardBlackReal + name: black wizard robes + description: An unnerving black gem-lined robe that reeks of death and decay. + components: + - type: Sprite + sprite: _White/Wizard/Clothing/OuterClothing/blackwizard.rsi + - type: Clothing + sprite: _White/Wizard/Clothing/OuterClothing/blackwizard.rsi + +# Yellow +- type: entity + parent: [ClothingHeadHatWizardBaseArmor, ClothingHeadHatWizardBase] + id: ClothingHeadHatYellowwizardReal + name: yellow wizard hat + description: Strange-looking yellow hat-wear that most certainly belongs to a powerful magic user. + components: + - type: Sprite + sprite: _White/Wizard/Clothing/Head/yellowwizard.rsi + - type: Clothing + sprite: _White/Wizard/Clothing/Head/yellowwizard.rsi + +- type: entity + parent: [ClothingOuterWizardBaseArmor, ClothingOuterWizardBase] + id: ClothingOuterWizardYellowReal + name: yellow wizard robes + description: A magnificent yellow gem-lined robe that seems to radiate power. + components: + - type: Sprite + sprite: _White/Wizard/Clothing/OuterClothing/yellowwizard.rsi + - type: Clothing + sprite: _White/Wizard/Clothing/OuterClothing/yellowwizard.rsi + +# Tape +- type: entity + parent: [ClothingHeadHatWizardBaseArmor, ClothingHeadHatWizardBase] + id: ClothingHeadHatTapewizardReal + name: tape hat + description: A magically attuned hat made exclusively from duct tape. You can barely see. + components: + - type: Sprite + sprite: _White/Wizard/Clothing/Head/tapewizard.rsi + - type: Clothing + sprite: _White/Wizard/Clothing/Head/tapewizard.rsi + clothingVisuals: + head: + - state: equipped-HELMET + offset: "0, 0.2" + +- type: entity + parent: [ClothingOuterWizardBaseArmor, ClothingOuterWizardBase] + id: ClothingOuterWizardTapeReal + name: tape robes + description: A fine robe made from magically attuned duct tape. + components: + - type: Sprite + sprite: _White/Wizard/Clothing/OuterClothing/tapewizard.rsi + - type: Clothing + sprite: _White/Wizard/Clothing/OuterClothing/tapewizard.rsi + +# Chanterelle +- type: entity + parent: [ClothingHeadHatWizardBaseArmor, ClothingHeadHatWizardBase] + id: ClothingHeadHatChanterelleReal + name: chanterelle hat + description: An oversized chanterelle with hollow out space to fit a head in. Kinda looks like wizard's hat. + components: + - type: Sprite + sprite: _White/Wizard/Clothing/Head/chanterelle.rsi + - type: Clothing + sprite: _White/Wizard/Clothing/Head/chanterelle.rsi + +# Paper +- type: entity + parent: [ClothingOuterWizardBaseArmor, ClothingOuterWizardBase] + id: ClothingOuterWizardPaperReal + name: papier-mâché robes + description: A robe held together by various bits of clear-tape and paste. + components: + - type: Sprite + sprite: _White/Wizard/Clothing/OuterClothing/paperwizard.rsi + - type: Clothing + sprite: _White/Wizard/Clothing/OuterClothing/paperwizard.rsi +# - type: ActionGrant +# actions: +# - ActionSummonStickmen +# - type: ItemActionGrant +# activeIfWorn: true +# restrictedSlots: +# - OUTERCLOTHING +# actions: +# - ActionSummonStickmen + +- type: entity + parent: [ClothingHeadHatWizardBaseArmor, ClothingHeadHatPaper, ClothingHeadHatWizardBase] + id: ClothingHeadHatPaperWizard + name: paper magic hat + +# Mime +- type: entity + parent: [ClothingHeadHatWizardBaseArmor, ClothingHeadHatWizardBase] + id: ClothingHeadHatMimeReal + name: magical beret + description: A magical red beret. + components: + - type: Sprite + sprite: _White/Wizard/Clothing/Head/mimewizard.rsi + - type: Clothing + sprite: _White/Wizard/Clothing/Head/mimewizard.rsi + +- type: entity + parent: [ClothingOuterWizardBaseArmor, ClothingOuterWizardBase] + id: ClothingOuterWizardMimeReal + name: mime robes + description: Red, black, and white robes. There is not much else to say about them. + components: + - type: Sprite + sprite: _White/Wizard/Clothing/OuterClothing/mimewizard.rsi + - type: Clothing + sprite: _White/Wizard/Clothing/OuterClothing/mimewizard.rsi + +# Clown +- type: entity + parent: [ClothingHeadHatWizardBaseArmor, ClothingHeadHatWizardBase] + id: ClothingHeadHatClownReal + name: purple wizard hat + description: Strange-looking purple hat-wear that most certainly belongs to a real magic user. + components: + - type: Sprite + sprite: _White/Wizard/Clothing/Head/clownwizard.rsi + - type: Clothing + sprite: _White/Wizard/Clothing/Head/clownwizard.rsi + +- type: entity + parent: [ClothingOuterWizardBaseArmor, ClothingOuterWizardBase] + id: ClothingOuterWizardClownReal + name: clown robes + description: A set of armoured robes that seem to radiate a dark power. That, and bad fashion decisions. + components: + - type: Sprite + sprite: _White/Wizard/Clothing/OuterClothing/clownwizard.rsi + - type: Clothing + sprite: _White/Wizard/Clothing/OuterClothing/clownwizard.rsi + +# Psy +- type: entity + parent: [ClothingHeadHatWizardBaseArmor, ClothingHeadHatWizardBase] + id: ClothingHeadHatPsyReal + name: psychic amplifier + description: A crown-of-thorns psychic amplifier. + components: + - type: Sprite + sprite: _White/Wizard/Clothing/Head/psywizard.rsi + - type: Clothing + sprite: _White/Wizard/Clothing/Head/psywizard.rsi + +- type: entity + parent: [ClothingOuterWizardBaseArmor, ClothingOuterWizardBase] + id: ClothingOuterWizardPsyReal + name: purple robes + description: Heavy, royal purple robes threaded with psychic amplifiers and weird, bulbous lenses. Do not machine wash. + components: + - type: Sprite + sprite: _White/Wizard/Clothing/OuterClothing/psywizard.rsi + - type: Clothing + sprite: _White/Wizard/Clothing/OuterClothing/psywizard.rsi + +# Oblibion +- type: entity + parent: [ClothingHeadHatWizardBaseArmor, ClothingHeadHatWizardBase] + id: ClothingHeadHatOblivionEnforcer + name: oblivion enforcer's hood + description: A hood worn by an Oblivion Enforcer. + categories: [ HideSpawnMenu ] + components: + - type: Sprite + sprite: _White/Wizard/Clothing/Head/oblivionenforcer.rsi + - type: Clothing + sprite: _White/Wizard/Clothing/Head/oblivionenforcer.rsi + - type: HideLayerClothing + slots: + - Hair + - type: Tag + tags: + - WhitelistChameleon + +- type: entity + parent: [ClothingOuterWizardBase, ClothingOuterWizardBaseArmor, ClothingOuterStorageToggleableBase] + id: ClothingOuterOblivionEnforcer + name: oblivion enforcer's robes + description: A set of armored, radiation-proof robes worn by Oblivion Enforcers. + components: + - type: Sprite + sprite: _White/Wizard/Clothing/OuterClothing/oblivionenforcer.rsi + - type: Clothing + sprite: _White/Wizard/Clothing/OuterClothing/oblivionenforcer.rsi + - type: ClothingGrantComponent + component: + - type: SupermatterImmune + - type: SupermatterImmune + - type: Armor +# coverage: +# - Chest +# - Groin +# - Arm +# - Hand +# - Leg +# - Foot + modifiers: + coefficients: + Blunt: 0.45 + Slash: 0.45 + Piercing: 0.45 + Heat: 0.45 + Radiation: 0 + Caustic: 0.1 + - type: ToggleableClothing + clothingPrototypes: + head: ClothingHeadHatOblivionEnforcer + +- type: entity + parent: [ClothingMaskGas, BaseMagicalContraband] + id: ClothingMaskGasOblivionEnforcer + suffix: Voice Mask, Wizard Clothes + name: oblivion enforcer's mask + description: The mask of an Oblivion Enforcer. Don't forget to turn it on before giving your one-liners! + components: + - type: Sprite + sprite: _White/Wizard/Clothing/Mask/oblivionenforcer.rsi + - type: Clothing + sprite: _White/Wizard/Clothing/Mask/oblivionenforcer.rsi + - type: VoiceMask + - type: HideLayerClothing + slots: + - Snout + - type: UserInterface + interfaces: + enum.VoiceMaskUIKey.Key: + type: VoiceMaskBoundUserInterface + - type: Tag + tags: + - IPCMaskWearable # EE - IPCs + - type: SupermatterImmune + +# Blue +- type: entity + parent: [ClothingHeadHatWizardBaseArmor, ClothingHeadHatWizard, ClothingHeadHatWizardBase] + id: ClothingHeadHatWizardReal + name: wizard hat + +- type: entity + parent: [ClothingOuterWizardBaseArmor, ClothingOuterWizard, ClothingOuterWizardBase] + id: ClothingOuterWizardReal + name: wizard robes + +# Red +- type: entity + parent: [ClothingHeadHatWizardBaseArmor, ClothingHeadHatRedwizard, ClothingHeadHatWizardBase] + id: ClothingHeadHatRedwizardReal + name: red wizard hat + +- type: entity + parent: [ClothingOuterWizardBaseArmor, ClothingOuterWizardRed, ClothingOuterWizardBase] + id: ClothingOuterWizardRedReal + name: red wizard robes + +# Violet +- type: entity + parent: [ClothingHeadHatWizardBaseArmor, ClothingHeadHatVioletwizard, ClothingHeadHatWizardBase] + id: ClothingHeadHatVioletwizardReal + name: violet wizard hat + +- type: entity + parent: [ClothingOuterWizardBaseArmor, ClothingOuterWizardViolet, ClothingOuterWizardBase] + id: ClothingOuterWizardVioletReal + name: violet wizard robes + +# Witch +- type: entity + parent: [ClothingHeadHatWizardBaseArmor, ClothingHeadHatWitch1, ClothingHeadHatWizardBase] + id: ClothingHeadHatWitchReal + name: witch hat + +- type: entity + parent: [ClothingOuterWizardBaseArmor, ClothingOuterSuitWitchRobes, ClothingOuterWizardBase] + id: ClothingOuterSuitWitchRobesReal + name: witch robes + +# Shrine maiden +- type: entity + parent: [ClothingHeadHatWizardBaseArmor, ClothingHeadHatShrineMaidenWig, ClothingHeadHatWizardBase] + id: ClothingHeadHatShrineMaidenWigReal + name: shrine maiden's wig + +- type: entity + parent: [ClothingOuterWizardBaseArmor, ClothingOuterSuitShrineMaiden, ClothingOuterWizardBase] + id: ClothingOuterSuitShrineMaidenReal + name: shrine maiden outfit + +# Centcomm +- type: entity + parent: [ClothingHeadHatWizardBaseArmor, ClothingHeadHatWizardBase] + id: ClothingHeadHatCentCommwizardReal + name: CentComm wizard hat + suffix: ADMIN + description: A pristine green and gold wizard hat, regulation issue for Central Command's arcane operatives. Worn only by those authorized to wield classified thaumaturgic instruments. + components: + - type: Sprite + sprite: _White/Wizard/Clothing/Head/comwizard.rsi + - type: Clothing + sprite: _White/Wizard/Clothing/Head/comwizard.rsi + +- type: entity + parent: [ClothingOuterWizardBaseArmor, ClothingOuterWizardBase] + id: ClothingOuterWizardCentCommReal + name: CentComm wizard robes + suffix: ADMIN + description: A pristine green and gold gem-lined robe, regulation issue for Central Command's arcane operatives. Worn only by those authorized to wield classified thaumaturgic instruments. + components: + - type: Sprite + sprite: _White/Wizard/Clothing/OuterClothing/comwizard.rsi + - type: Clothing + sprite: _White/Wizard/Clothing/OuterClothing/comwizard.rsi + +# Gloves +- type: entity + parent: ClothingHandsBase + id: ClothingHandsGlovesWizard + name: wizard gloves + description: A magnificent pair of blue gem-lined gloves that seem to be insulated. + components: + - type: Sprite + sprite: _White/Wizard/Clothing/Hands/wizgloves.rsi + - type: Clothing + sprite: _White/Wizard/Clothing/Hands/wizgloves.rsi + - type: Insulated + - type: FingerprintMask + - type: StaticPrice + price: 1000 + +# Crimsom +- type: entity + parent: [ClothingHeadHatWizardBaseArmor, ClothingHeadHatWizardBase] + id: ClothingHeadHatCrimsonReal + name: crimson wizard hat + description: A wide-brimmed, pointy wizard hat adorned with a crimson band and a touch of theatrical flair. Feels... explosive. + components: + - type: Sprite + sprite: _White/Wizard/Clothing/Head/crimsonwizard.rsi + - type: Clothing + sprite: _White/Wizard/Clothing/Head/crimsonwizard.rsi + +- type: entity + parent: [ClothingOuterWizardBaseArmor, ClothingOuterWizardBase] + id: ClothingOuterWizardCrimsonReal + name: crimson wizard robes + description: A flowing set of red and gold-trimmed robes, made for dramatic spellcasting. You can feel the power flowing through you... + components: + - type: Sprite + sprite: _White/Wizard/Clothing/OuterClothing/crimsonwizard.rsi + - type: Clothing + sprite: _White/Wizard/Clothing/OuterClothing/crimsonwizard.rsi + +- type: entity + parent: ClothingNeckBase + id: ClothingNeckCloakCrimson + name: Crimson Cape + description: A black cape with a high collar and gold trim. Billows dramatically even when there's no wind. + components: + - type: Sprite + sprite: _White/Wizard/Clothing/Neck/crimsonwizard.rsi + +- type: entity + parent: ClothingShoesBase + id: ClothingUnderShoesCrimson + name: crimson boots + description: Comes with a pair of mismatched thigh-high socks to bring out their full power! + components: + - type: Sprite + sprite: _White/Wizard/Clothing/Shoes/crimson.rsi + - type: Clothing + sprite: _White/Wizard/Clothing/Shoes/crimson.rsi diff --git a/Resources/Prototypes/_White/Wizard/Items/misc.yml b/Resources/Prototypes/_White/Wizard/Items/misc.yml new file mode 100644 index 00000000000..7843b234bdb --- /dev/null +++ b/Resources/Prototypes/_White/Wizard/Items/misc.yml @@ -0,0 +1,55 @@ +- type: entity + parent: BaseCrowbar + id: CrowbarWizard + description: A compact multipurpose tool to pry open doors and destroy stations. + components: + - type: MeleeWeapon + damage: + types: + Blunt: 12 + - type: StaticPrice + price: 200 + - type: Prying + speedModifier: 1.5 + pryPowered: true + - type: Sprite + sprite: Objects/Tools/crowbar.rsi + layers: + - state: icon + - state: cover-icon + color: "#007FFF" + - type: Item + size: Small + sprite: Objects/Tools/crowbar.rsi + storedSprite: + state: blue-storage + sprite: Objects/Tools/crowbar.rsi + inhandVisuals: + left: + - state: inhand-left + - state: cover-inhand-left + color: "#007FFF" + right: + - state: inhand-right + - state: cover-inhand-right + color: "#007FFF" + - type: Clothing + sprite: Objects/Tools/crowbar.rsi + clothingVisuals: + belt: + - state: equipped-BELT + - state: cover-equipped-BELT + color: "#007FFF" + +- type: entity + name: scroll of teleportation + description: This scroll can teleport you anywhere on the station. But has bigger cooldown. + parent: WizardTeleportScroll + id: WizardTeleportScrollApprentice + suffix: Apprentice + components: + - type: UseDelay # WD edit + delay: 1 + delays: + TeleportDelay: !type:UseDelayInfo + length: 900 diff --git a/Resources/Prototypes/_White/Wizard/Shaders/ethereal_jaunt.yml b/Resources/Prototypes/_White/Wizard/Shaders/ethereal_jaunt.yml new file mode 100644 index 00000000000..c50e583e2e9 --- /dev/null +++ b/Resources/Prototypes/_White/Wizard/Shaders/ethereal_jaunt.yml @@ -0,0 +1,23 @@ +# SPDX-FileCopyrightText: 2025 Aiden <28298836+Aidenkrz@users.noreply.github.com> +# SPDX-FileCopyrightText: 2025 Aviu00 <93730715+Aviu00@users.noreply.github.com> +# +# SPDX-License-Identifier: AGPL-3.0-or-later + +- type: shader + id: EtherealJaunt + kind: source + path: "/Textures/_White/Wizard/Shaders/ethereal_jaunt.swsl" + params: + use_reference: true + time_scale: 1.0 + blink_rate: 2.0 + +- type: shader + id: WizardParallax + kind: source + path: "/Textures/_White/Wizard/Shaders/ethereal_jaunt.swsl" + params: + use_reference: false + reference: 0.0, 0.0 + time_scale: 0.5 + blink_rate: 0.5 diff --git a/Resources/Prototypes/_White/Wizard/effects.yml b/Resources/Prototypes/_White/Wizard/effects.yml new file mode 100644 index 00000000000..ad7ff78f4e1 --- /dev/null +++ b/Resources/Prototypes/_White/Wizard/effects.yml @@ -0,0 +1,102 @@ +- type: entity + id: EffectRay + categories: [ HideSpawnMenu ] + components: + - type: PointLight + enabled: true + autoRot: true + castShadows: false + radius: 5 + energy: 8 + mask: /Textures/_White/Wizard/Effects/LightMasks/ray.png + - type: RotatingLight + speed: 60 +# maxSpeed: 180 +# randomizeDirection: true + - type: Tag + tags: + - HideContextMenu + - type: TimedDespawn + lifetime: 1 + - type: AnimationPlayer + - type: LightBehaviour + behaviours: + - !type:PulseBehaviour + id: pulse + property: Energy + maxDuration: 2 + startValue: 0 + endValue: 16 + enabled: true + +- type: entity + parent: EffectRay + id: EffectRayCharge + categories: [ HideSpawnMenu ] + components: + - type: LightBehaviour + behaviours: + - !type:PulseBehaviour + id: pulse + property: Energy + maxDuration: 1 + startValue: 0 + endValue: 16 + enabled: true + +- type: entity + id: EtherealJauntStartEffect + categories: [ HideSpawnMenu ] + components: + - type: Trail + endAngle: 320 + particleAmount: 9 + maxParticleAmount: 9 + velocity: -0.4 + lerpTime: 0.02 + frequency: 10 + lifetime: 3 + alphaLerpAmount: 0.05 + velocityLerpAmount: 0.07 + velocityLerpTarget: 0.3 + alphaLerpTarget: 0 + color: "#0000FFFF" + renderedEntityRotationStrategy: Trail + shader: EtherealJaunt + shaderData: + reference: !type:GetShaderLocalPositionData + spawnRemainingTrail: false + - type: Transform + - type: Tag + tags: + - HideContextMenu + - type: TimedDespawn + lifetime: 3 + +- type: entity + id: EtherealJauntEndEffect + categories: [ HideSpawnMenu ] + components: + - type: Trail + endAngle: 320 + particleAmount: 9 + maxParticleAmount: 9 + lerpTime: 0.01 + frequency: 10 + lifetime: 2.2 + alphaLerpAmount: 0.01 + alphaLerpTarget: 1 + positionLerpAmount: 0.08 + radius: 12 + color: "#0000FF00" + renderedEntityRotationStrategy: Trail + shader: EtherealJaunt + shaderData: + reference: !type:GetShaderLocalPositionData + spawnRemainingTrail: false + - type: Transform + - type: Tag + tags: + - HideContextMenu + - type: TimedDespawn + lifetime: 3 diff --git a/Resources/Prototypes/_White/Wizard/gear.yml b/Resources/Prototypes/_White/Wizard/gear.yml new file mode 100644 index 00000000000..800b1dbe422 --- /dev/null +++ b/Resources/Prototypes/_White/Wizard/gear.yml @@ -0,0 +1,131 @@ +# SPDX-FileCopyrightText: 2025 Aiden <28298836+Aidenkrz@users.noreply.github.com> +# SPDX-FileCopyrightText: 2025 Armok <155400926+ARMOKS@users.noreply.github.com> +# SPDX-FileCopyrightText: 2025 Aviu00 <93730715+Aviu00@users.noreply.github.com> +# SPDX-FileCopyrightText: 2025 GoobBot +# SPDX-FileCopyrightText: 2025 Ted Lukin <66275205+pheenty@users.noreply.github.com> +# +# SPDX-License-Identifier: AGPL-3.0-or-later + +- type: startingGear + id: WizardGear + equipment: + jumpsuit: ClothingUniformJumpsuitColorDarkBlue + head: ClothingHeadHatWizardReal + outerClothing: ClothingOuterWizardReal + shoes: ClothingShoesWizard + back: ClothingBackpack + belt: WizardTeleportScroll + gloves: ClothingHandsGlovesWizard + id: WizardPDA + pocket1: CrowbarWizard + pocket2: WizardsGrimoire + +- type: startingGear + id: LichGear + equipment: + jumpsuit: ClothingUniformJumpsuitColorBlack + head: ClothingHeadHatBlackwizardReal + outerClothing: ClothingOuterWizardBlackReal + shoes: ClothingShoesWizard + gloves: ClothingHandsGlovesWizard + back: ClothingBackpack + pocket1: CrowbarWizard + +- type: startingGear + id: OblivionEnforcerGear + equipment: + jumpsuit: ClothingUniformJumpsuitColorWhite + outerClothing: ClothingOuterOblivionEnforcer + mask: ClothingMaskGasOblivionEnforcer + shoes: ClothingShoesColorWhite + back: ClothingBackpack + +- type: startingGear + id: ApprenticeGearBlue + equipment: + jumpsuit: ClothingUniformJumpsuitColorDarkBlue + head: ClothingHeadHatWizardReal + outerClothing: ClothingOuterWizardReal + shoes: ClothingShoesWizard + back: ClothingBackpack + belt: WizardTeleportScrollApprentice + gloves: ClothingHandsGlovesWizard + id: WizardPDA + pocket1: CrowbarWizard + +- type: startingGear + id: ApprenticeGearRed + equipment: + jumpsuit: ClothingUniformJumpsuitColorRed + head: ClothingHeadHatRedwizardReal + outerClothing: ClothingOuterWizardRedReal + shoes: ClothingShoesWizard + back: ClothingBackpack + belt: WizardTeleportScrollApprentice + gloves: ClothingHandsGlovesWizard + id: WizardPDA + pocket1: CrowbarWizard + +- type: startingGear + id: ApprenticeGearPurple + equipment: + jumpsuit: ClothingUniformJumpsuitColorPurple + head: ClothingHeadHatVioletwizardReal + outerClothing: ClothingOuterWizardVioletReal + shoes: ClothingShoesWizard + back: ClothingBackpack + belt: WizardTeleportScrollApprentice + gloves: ClothingHandsGlovesWizard + id: WizardPDA + pocket1: CrowbarWizard + +- type: startingGear + id: ApprenticeGearBlack + equipment: + jumpsuit: ClothingUniformJumpsuitColorBlack + head: ClothingHeadHatBlackwizardReal + outerClothing: ClothingOuterWizardBlackReal + shoes: ClothingShoesWizard + back: ClothingBackpack + belt: WizardTeleportScrollApprentice + gloves: ClothingHandsGlovesWizard + id: WizardPDA + pocket1: CrowbarWizard + +- type: startingGear + id: ApprenticeGearYellow + equipment: + jumpsuit: ClothingUniformJumpsuitColorYellow + head: ClothingHeadHatYellowwizardReal + outerClothing: ClothingOuterWizardYellowReal + shoes: ClothingShoesWizard + back: ClothingBackpack + belt: WizardTeleportScrollApprentice + gloves: ClothingHandsGlovesWizard + id: WizardPDA + pocket1: CrowbarWizard + +- type: startingGear + id: ApprenticeGearRobeless + equipment: + jumpsuit: ClothingUniformJumpsuitColorDarkBlue + outerClothing: ClothingOuterVestTank + shoes: ClothingShoesWizard + back: ClothingBackpack + belt: WizardTeleportScrollApprentice + gloves: ClothingHandsGlovesWizard + id: WizardPDA + pocket1: CrowbarWizard + +- type: startingGear + id: ApprenticeGearPsy + equipment: + jumpsuit: ClothingUniformJumpsuitColorPurple + head: ClothingHeadHatPsyReal + outerClothing: ClothingOuterWizardPsyReal + shoes: ClothingShoesWizard + back: ClothingBackpack + belt: WizardTeleportScrollApprentice + gloves: ClothingHandsGlovesWizard + id: WizardPDA + pocket1: CrowbarWizard diff --git a/Resources/Prototypes/_Goobstation/Wizard/immovable_rod.yml b/Resources/Prototypes/_White/Wizard/immovable_rod.yml similarity index 100% rename from Resources/Prototypes/_Goobstation/Wizard/immovable_rod.yml rename to Resources/Prototypes/_White/Wizard/immovable_rod.yml diff --git a/Resources/Prototypes/_Goobstation/Wizard/polymorphs.yml b/Resources/Prototypes/_White/Wizard/polymorphs.yml similarity index 100% rename from Resources/Prototypes/_Goobstation/Wizard/polymorphs.yml rename to Resources/Prototypes/_White/Wizard/polymorphs.yml diff --git a/Resources/Prototypes/_Goobstation/Wizard/spellbook_upgrades.yml b/Resources/Prototypes/_White/Wizard/spellbook_upgrades.yml similarity index 89% rename from Resources/Prototypes/_Goobstation/Wizard/spellbook_upgrades.yml rename to Resources/Prototypes/_White/Wizard/spellbook_upgrades.yml index 640dd826b71..fefcaefc17a 100644 --- a/Resources/Prototypes/_Goobstation/Wizard/spellbook_upgrades.yml +++ b/Resources/Prototypes/_White/Wizard/spellbook_upgrades.yml @@ -13,7 +13,7 @@ # name: spellbook-upgrade-mime-malaise-name # description: spellbook-upgrade-mime-malaise-desc # icon: -# sprite: _Goobstation/Wizard/actions.rsi # Goob edit +# sprite: _White/Wizard/actions.rsi # Goob edit # state: mime # cost: # WizCoin: 1 @@ -32,7 +32,7 @@ name: spellbook-upgrade-cluwne-curse-name description: spellbook-upgrade-cluwne-curse-desc icon: - sprite: _Goobstation/Wizard/actions.rsi # Goob edit + sprite: _White/Wizard/actions.rsi # Goob edit state: cluwne cost: WizCoin: 2 @@ -51,7 +51,7 @@ # name: spellbook-upgrade-banana-touch-name # description: spellbook-upgrade-banana-touch-desc # icon: -# sprite: _Goobstation/Wizard/actions.rsi # Goob edit +# sprite: _White/Wizard/actions.rsi # Goob edit # state: clown # cost: # WizCoin: 1 @@ -70,7 +70,7 @@ # name: spellbook-upgrade-blind-name # description: spellbook-upgrade-blind-desc # icon: -# sprite: _Goobstation/Wizard/actions.rsi # Goob edit +# sprite: _White/Wizard/actions.rsi # Goob edit # state: blind # cost: # WizCoin: 1 @@ -89,7 +89,7 @@ # name: spellbook-upgrade-mutate-name # description: spellbook-upgrade-mutate-desc # icon: -# sprite: _Goobstation/Wizard/actions.rsi # Goob edit +# sprite: _White/Wizard/actions.rsi # Goob edit # state: mutate # cost: # WizCoin: 2 @@ -108,7 +108,7 @@ # name: spellbook-upgrade-tesla-blast-name # description: spellbook-upgrade-tesla-blast-desc # icon: -# sprite: _Goobstation/Wizard/actions.rsi # Goob edit +# sprite: _White/Wizard/actions.rsi # Goob edit # state: tesla # cost: # WizCoin: 1 @@ -127,7 +127,7 @@ # name: spellbook-upgrade-lightning-bolt-name # description: spellbook-upgrade-lightning-bolt-desc # icon: -# sprite: _Goobstation/Wizard/actions.rsi # Goob edit +# sprite: _White/Wizard/actions.rsi # Goob edit # state: lightning # cost: # WizCoin: 1 @@ -146,7 +146,7 @@ # name: spellbook-upgrade-homing-toolbox-name # description: spellbook-upgrade-homing-toolbox-desc # icon: -# sprite: _Goobstation/Wizard/actions.rsi # Goob edit +# sprite: _White/Wizard/actions.rsi # Goob edit # state: toolbox # cost: # WizCoin: 1 @@ -165,7 +165,7 @@ # name: spellbook-upgrade-arcane-barrage-name # description: spellbook-upgrade-arcane-barrage-desc # icon: -# sprite: _Goobstation/Wizard/actions.rsi # Goob edit +# sprite: _White/Wizard/actions.rsi # Goob edit # state: arcane_barrage # cost: # WizCoin: 2 @@ -184,7 +184,7 @@ # name: spellbook-upgrade-lesser-summon-guns-name # description: spellbook-upgrade-lesser-summon-guns-desc # icon: -# sprite: _Goobstation/Wizard/actions.rsi # Goob edit +# sprite: _White/Wizard/actions.rsi # Goob edit # state: bolt_action # cost: # WizCoin: 2 @@ -203,7 +203,7 @@ # name: spellbook-upgrade-barnyard-name # description: spellbook-upgrade-barnyard-desc # icon: -# sprite: _Goobstation/Wizard/actions.rsi # Goob edit +# sprite: _White/Wizard/actions.rsi # Goob edit # state: barn # cost: # WizCoin: 1 @@ -222,7 +222,7 @@ # name: spellbook-upgrade-scream-for-me-name # description: spellbook-upgrade-scream-for-me-desc # icon: -# sprite: _Goobstation/Wizard/actions.rsi # Goob edit +# sprite: _White/Wizard/actions.rsi # Goob edit # state: scream_for_me # cost: # WizCoin: 1 @@ -241,7 +241,7 @@ # name: spellbook-upgrade-bees-name # description: spellbook-upgrade-bees-desc # icon: -# sprite: _Goobstation/Wizard/actions.rsi # Goob edit +# sprite: _White/Wizard/actions.rsi # Goob edit # state: bee # cost: # WizCoin: 2 @@ -260,7 +260,7 @@ # name: spellbook-upgrade-sanguine-strike-name # description: spellbook-upgrade-sanguine-strike-desc # icon: -# sprite: _Goobstation/Wizard/actions.rsi # Goob edit +# sprite: _White/Wizard/actions.rsi # Goob edit # state: exsanguinating_strike # cost: # WizCoin: 2 @@ -279,7 +279,7 @@ name: spellbook-upgrade-smite-name description: spellbook-upgrade-smite-desc icon: - sprite: _Goobstation/Wizard/actions.rsi # Goob edit + sprite: _White/Wizard/actions.rsi # Goob edit state: gib cost: WizCoin: 2 @@ -298,7 +298,7 @@ name: spellbook-upgrade-polymorph-rod-name description: spellbook-upgrade-polymorph-rod-desc icon: - sprite: _Goobstation/Wizard/actions.rsi # Goob edit + sprite: _White/Wizard/actions.rsi # Goob edit state: immrod cost: WizCoin: 2 @@ -321,7 +321,7 @@ # name: spellbook-upgrade-spell-cards-name # description: spellbook-upgrade-spell-cards-desc # icon: -# sprite: _Goobstation/Wizard/actions.rsi # Goob edit +# sprite: _White/Wizard/actions.rsi # Goob edit # state: spellcard # cost: # WizCoin: 2 @@ -345,7 +345,7 @@ # productEvent: !type:SummonSimiansMaxedOutEvent # raiseProductEventOnUser: true # icon: -# sprite: _Goobstation/Wizard/actions.rsi # Goob edit +# sprite: _White/Wizard/actions.rsi # Goob edit # state: monkey # cost: # WizCoin: 2 @@ -368,7 +368,7 @@ # name: spellbook-upgrade-magic-missile-name # description: spellbook-upgrade-magic-missile-desc # icon: -# sprite: _Goobstation/Wizard/actions.rsi # Goob edit +# sprite: _White/Wizard/actions.rsi # Goob edit # state: missile # cost: # WizCoin: 2 @@ -390,7 +390,7 @@ # name: spellbook-upgrade-disable-tech-name # description: spellbook-upgrade-disable-tech-desc # icon: -# sprite: _Goobstation/Wizard/actions.rsi # Goob edit +# sprite: _White/Wizard/actions.rsi # Goob edit # state: emp # cost: # WizCoin: 1 @@ -412,7 +412,7 @@ name: spellbook-upgrade-smoke-name description: spellbook-upgrade-smoke-desc icon: - sprite: _Goobstation/Wizard/actions.rsi # Goob edit + sprite: _White/Wizard/actions.rsi # Goob edit state: smoke cost: WizCoin: 1 @@ -434,7 +434,7 @@ name: spellbook-upgrade-repulse-name description: spellbook-upgrade-repulse-desc icon: - sprite: _Goobstation/Wizard/actions.rsi # Goob edit + sprite: _White/Wizard/actions.rsi # Goob edit state: repulse cost: WizCoin: 1 @@ -456,7 +456,7 @@ # name: spellbook-upgrade-stop-time-name # description: spellbook-upgrade-stop-time-desc # icon: -# sprite: _Goobstation/Wizard/actions.rsi # Goob edit +# sprite: _White/Wizard/actions.rsi # Goob edit # state: time # cost: # WizCoin: 2 @@ -478,7 +478,7 @@ # name: spellbook-upgrade-the-traps-name # description: spellbook-upgrade-the-traps-desc # icon: -# sprite: _Goobstation/Wizard/actions.rsi # Goob edit +# sprite: _White/Wizard/actions.rsi # Goob edit # state: the_traps # cost: # WizCoin: 1 @@ -500,7 +500,7 @@ name: spellbook-upgrade-force-wall-name description: spellbook-upgrade-force-wall-desc icon: - sprite: _Goobstation/Wizard/actions.rsi # Goob edit + sprite: _White/Wizard/actions.rsi # Goob edit state: shield_greater cost: WizCoin: 1 @@ -523,7 +523,7 @@ # name: spellbook-upgrade-teleport-name # description: spellbook-upgrade-teleport-desc # icon: -# sprite: _Goobstation/Wizard/actions.rsi # Goob edit +# sprite: _White/Wizard/actions.rsi # Goob edit # state: teleport # cost: # WizCoin: 2 @@ -549,7 +549,7 @@ name: spellbook-upgrade-swap-name description: spellbook-upgrade-swap-desc icon: - sprite: _Goobstation/Wizard/actions.rsi # Goob edit + sprite: _White/Wizard/actions.rsi # Goob edit state: swap cost: WizCoin: 1 @@ -571,7 +571,7 @@ name: spellbook-upgrade-blink-name description: spellbook-upgrade-blink-desc icon: - sprite: _Goobstation/Wizard/actions.rsi # Goob edit + sprite: _White/Wizard/actions.rsi # Goob edit state: blink cost: WizCoin: 1 @@ -593,7 +593,7 @@ name: spellbook-upgrade-charge-name description: spellbook-upgrade-charge-desc icon: - sprite: _Goobstation/Wizard/actions.rsi # Goob edit + sprite: _White/Wizard/actions.rsi # Goob edit state: charge cost: WizCoin: 1 @@ -615,7 +615,7 @@ name: spellbook-upgrade-mind-swap-name description: spellbook-upgrade-mind-swap-desc icon: - sprite: _Goobstation/Wizard/actions.rsi # Goob edit + sprite: _White/Wizard/actions.rsi # Goob edit state: mindswap cost: WizCoin: 2 @@ -637,7 +637,7 @@ # name: spellbook-upgrade-knock-name # description: spellbook-upgrade-knock-desc # icon: -# sprite: _Goobstation/Wizard/actions.rsi # Goob edit +# sprite: _White/Wizard/actions.rsi # Goob edit # state: knock # cost: # WizCoin: 1 diff --git a/Resources/Prototypes/_White/Wizard/wizard.yml b/Resources/Prototypes/_White/Wizard/wizard.yml new file mode 100644 index 00000000000..194a4746537 --- /dev/null +++ b/Resources/Prototypes/_White/Wizard/wizard.yml @@ -0,0 +1,29 @@ +- type: factionIcon + id: WizardFaction + isShaded: false + priority: 11 + showTo: + components: + - ShowAntagIcons + - Wizard + - Apprentice + tags: + - ShowWizardIcons + icon: + sprite: /Textures/_White/Wizard/StatusIcons/10x10.rsi + state: wizard + +- type: factionIcon + id: ApprenticeFaction + isShaded: false + priority: 11 + showTo: + components: + - ShowAntagIcons + - Wizard + - Apprentice + tags: + - ShowWizardIcons + icon: + sprite: /Textures/_White/Wizard/StatusIcons/10x10.rsi + state: apprentice diff --git a/Resources/Textures/Clothing/Neck/mantles/mantle.rsi/equipped-NECK-vox.png b/Resources/Textures/Clothing/Neck/mantles/mantle.rsi/equipped-NECK-vox.png new file mode 100644 index 00000000000..15a4bdf342f Binary files /dev/null and b/Resources/Textures/Clothing/Neck/mantles/mantle.rsi/equipped-NECK-vox.png differ diff --git a/Resources/Textures/Clothing/Neck/mantles/mantle.rsi/equipped-NECK.png b/Resources/Textures/Clothing/Neck/mantles/mantle.rsi/equipped-NECK.png new file mode 100644 index 00000000000..41cfa306bb1 Binary files /dev/null and b/Resources/Textures/Clothing/Neck/mantles/mantle.rsi/equipped-NECK.png differ diff --git a/Resources/Textures/Clothing/Neck/mantles/mantle.rsi/icon.png b/Resources/Textures/Clothing/Neck/mantles/mantle.rsi/icon.png new file mode 100644 index 00000000000..d7b6b8e624f Binary files /dev/null and b/Resources/Textures/Clothing/Neck/mantles/mantle.rsi/icon.png differ diff --git a/Resources/Textures/Clothing/Neck/mantles/mantle.rsi/meta.json b/Resources/Textures/Clothing/Neck/mantles/mantle.rsi/meta.json new file mode 100644 index 00000000000..a77aa5695bf --- /dev/null +++ b/Resources/Textures/Clothing/Neck/mantles/mantle.rsi/meta.json @@ -0,0 +1,22 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "drawn by Pigeonpeas", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-NECK", + "directions": 4 + }, + { + "name": "equipped-NECK-vox", + "directions": 4 + } + ] +} \ No newline at end of file diff --git a/Resources/Textures/Objects/Tools/crowbar.rsi/blue-storage.png b/Resources/Textures/Objects/Tools/crowbar.rsi/blue-storage.png new file mode 100644 index 00000000000..e1093a59a5b Binary files /dev/null and b/Resources/Textures/Objects/Tools/crowbar.rsi/blue-storage.png differ diff --git a/Resources/Textures/Objects/Tools/crowbar.rsi/meta.json b/Resources/Textures/Objects/Tools/crowbar.rsi/meta.json index 740c5542c9e..eb5d1ecf894 100644 --- a/Resources/Textures/Objects/Tools/crowbar.rsi/meta.json +++ b/Resources/Textures/Objects/Tools/crowbar.rsi/meta.json @@ -51,6 +51,9 @@ }, { "name": "yellow-storage" + }, + { + "name": "blue-storage" } ] } diff --git a/Resources/Textures/_White/Wizard/Clothing/Eyes/eyepatch.rsi/equipped-EYES.png b/Resources/Textures/_White/Wizard/Clothing/Eyes/eyepatch.rsi/equipped-EYES.png new file mode 100644 index 00000000000..b079e959991 Binary files /dev/null and b/Resources/Textures/_White/Wizard/Clothing/Eyes/eyepatch.rsi/equipped-EYES.png differ diff --git a/Resources/Textures/_White/Wizard/Clothing/Eyes/eyepatch.rsi/flipped-equipped-EYES.png b/Resources/Textures/_White/Wizard/Clothing/Eyes/eyepatch.rsi/flipped-equipped-EYES.png new file mode 100644 index 00000000000..cfa5acd6191 Binary files /dev/null and b/Resources/Textures/_White/Wizard/Clothing/Eyes/eyepatch.rsi/flipped-equipped-EYES.png differ diff --git a/Resources/Textures/_White/Wizard/Clothing/Eyes/eyepatch.rsi/flipped-icon.png b/Resources/Textures/_White/Wizard/Clothing/Eyes/eyepatch.rsi/flipped-icon.png new file mode 100644 index 00000000000..26c84db618d Binary files /dev/null and b/Resources/Textures/_White/Wizard/Clothing/Eyes/eyepatch.rsi/flipped-icon.png differ diff --git a/Resources/Textures/_White/Wizard/Clothing/Eyes/eyepatch.rsi/icon.png b/Resources/Textures/_White/Wizard/Clothing/Eyes/eyepatch.rsi/icon.png new file mode 100644 index 00000000000..83dab075462 Binary files /dev/null and b/Resources/Textures/_White/Wizard/Clothing/Eyes/eyepatch.rsi/icon.png differ diff --git a/Resources/Textures/_White/Wizard/Clothing/Eyes/eyepatch.rsi/meta.json b/Resources/Textures/_White/Wizard/Clothing/Eyes/eyepatch.rsi/meta.json new file mode 100644 index 00000000000..38b41b213ac --- /dev/null +++ b/Resources/Textures/_White/Wizard/Clothing/Eyes/eyepatch.rsi/meta.json @@ -0,0 +1,25 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at https://github.com/tgstation/tgstation/commit/80ab61c8c7741e1d95e5f168357a9e6e61b38f2c", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-EYES", + "directions": 4 + }, + { + "name": "flipped-icon" + }, + { + "name": "flipped-equipped-EYES", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/_White/Wizard/Clothing/Hands/wizgloves.rsi/equipped-HAND.png b/Resources/Textures/_White/Wizard/Clothing/Hands/wizgloves.rsi/equipped-HAND.png new file mode 100644 index 00000000000..24264bd9a57 Binary files /dev/null and b/Resources/Textures/_White/Wizard/Clothing/Hands/wizgloves.rsi/equipped-HAND.png differ diff --git a/Resources/Textures/_White/Wizard/Clothing/Hands/wizgloves.rsi/icon.png b/Resources/Textures/_White/Wizard/Clothing/Hands/wizgloves.rsi/icon.png new file mode 100644 index 00000000000..c282b7585a9 Binary files /dev/null and b/Resources/Textures/_White/Wizard/Clothing/Hands/wizgloves.rsi/icon.png differ diff --git a/Resources/Textures/_White/Wizard/Clothing/Hands/wizgloves.rsi/inhand-left.png b/Resources/Textures/_White/Wizard/Clothing/Hands/wizgloves.rsi/inhand-left.png new file mode 100644 index 00000000000..b73299f77c0 Binary files /dev/null and b/Resources/Textures/_White/Wizard/Clothing/Hands/wizgloves.rsi/inhand-left.png differ diff --git a/Resources/Textures/_White/Wizard/Clothing/Hands/wizgloves.rsi/inhand-right.png b/Resources/Textures/_White/Wizard/Clothing/Hands/wizgloves.rsi/inhand-right.png new file mode 100644 index 00000000000..eef0046a55f Binary files /dev/null and b/Resources/Textures/_White/Wizard/Clothing/Hands/wizgloves.rsi/inhand-right.png differ diff --git a/Resources/Textures/_White/Wizard/Clothing/Hands/wizgloves.rsi/meta.json b/Resources/Textures/_White/Wizard/Clothing/Hands/wizgloves.rsi/meta.json new file mode 100644 index 00000000000..d861b83bfcd --- /dev/null +++ b/Resources/Textures/_White/Wizard/Clothing/Hands/wizgloves.rsi/meta.json @@ -0,0 +1,26 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Made by Armok", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-HAND", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/_White/Wizard/Clothing/Head/blackwizard.rsi/equipped-HELMET.png b/Resources/Textures/_White/Wizard/Clothing/Head/blackwizard.rsi/equipped-HELMET.png new file mode 100644 index 00000000000..b281b2e08c0 Binary files /dev/null and b/Resources/Textures/_White/Wizard/Clothing/Head/blackwizard.rsi/equipped-HELMET.png differ diff --git a/Resources/Textures/_White/Wizard/Clothing/Head/blackwizard.rsi/icon.png b/Resources/Textures/_White/Wizard/Clothing/Head/blackwizard.rsi/icon.png new file mode 100644 index 00000000000..a8335f26d83 Binary files /dev/null and b/Resources/Textures/_White/Wizard/Clothing/Head/blackwizard.rsi/icon.png differ diff --git a/Resources/Textures/_White/Wizard/Clothing/Head/blackwizard.rsi/inhand-left.png b/Resources/Textures/_White/Wizard/Clothing/Head/blackwizard.rsi/inhand-left.png new file mode 100644 index 00000000000..704058b852f Binary files /dev/null and b/Resources/Textures/_White/Wizard/Clothing/Head/blackwizard.rsi/inhand-left.png differ diff --git a/Resources/Textures/_White/Wizard/Clothing/Head/blackwizard.rsi/inhand-right.png b/Resources/Textures/_White/Wizard/Clothing/Head/blackwizard.rsi/inhand-right.png new file mode 100644 index 00000000000..c285ad35313 Binary files /dev/null and b/Resources/Textures/_White/Wizard/Clothing/Head/blackwizard.rsi/inhand-right.png differ diff --git a/Resources/Textures/_White/Wizard/Clothing/Head/blackwizard.rsi/meta.json b/Resources/Textures/_White/Wizard/Clothing/Head/blackwizard.rsi/meta.json new file mode 100644 index 00000000000..f793ecb658c --- /dev/null +++ b/Resources/Textures/_White/Wizard/Clothing/Head/blackwizard.rsi/meta.json @@ -0,0 +1,26 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at https://github.com/tgstation/tgstation/commit/80ab61c8c7741e1d95e5f168357a9e6e61b38f2c. Inhand sprites by Armok.", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-HELMET", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/_White/Wizard/Clothing/Head/chanterelle.rsi/equipped-HELMET.png b/Resources/Textures/_White/Wizard/Clothing/Head/chanterelle.rsi/equipped-HELMET.png new file mode 100644 index 00000000000..14aac990525 Binary files /dev/null and b/Resources/Textures/_White/Wizard/Clothing/Head/chanterelle.rsi/equipped-HELMET.png differ diff --git a/Resources/Textures/_White/Wizard/Clothing/Head/chanterelle.rsi/icon.png b/Resources/Textures/_White/Wizard/Clothing/Head/chanterelle.rsi/icon.png new file mode 100644 index 00000000000..b1cf21db13a Binary files /dev/null and b/Resources/Textures/_White/Wizard/Clothing/Head/chanterelle.rsi/icon.png differ diff --git a/Resources/Textures/_White/Wizard/Clothing/Head/chanterelle.rsi/inhand-left.png b/Resources/Textures/_White/Wizard/Clothing/Head/chanterelle.rsi/inhand-left.png new file mode 100644 index 00000000000..f7328e55d9d Binary files /dev/null and b/Resources/Textures/_White/Wizard/Clothing/Head/chanterelle.rsi/inhand-left.png differ diff --git a/Resources/Textures/_White/Wizard/Clothing/Head/chanterelle.rsi/inhand-right.png b/Resources/Textures/_White/Wizard/Clothing/Head/chanterelle.rsi/inhand-right.png new file mode 100644 index 00000000000..a9f68d514b5 Binary files /dev/null and b/Resources/Textures/_White/Wizard/Clothing/Head/chanterelle.rsi/inhand-right.png differ diff --git a/Resources/Textures/_White/Wizard/Clothing/Head/chanterelle.rsi/meta.json b/Resources/Textures/_White/Wizard/Clothing/Head/chanterelle.rsi/meta.json new file mode 100644 index 00000000000..80b4e650050 --- /dev/null +++ b/Resources/Textures/_White/Wizard/Clothing/Head/chanterelle.rsi/meta.json @@ -0,0 +1,26 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at https://github.com/tgstation/tgstation/commit/80ab61c8c7741e1d95e5f168357a9e6e61b38f2c", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-HELMET", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/_White/Wizard/Clothing/Head/clownwizard.rsi/equipped-HELMET.png b/Resources/Textures/_White/Wizard/Clothing/Head/clownwizard.rsi/equipped-HELMET.png new file mode 100644 index 00000000000..1759fe7415c Binary files /dev/null and b/Resources/Textures/_White/Wizard/Clothing/Head/clownwizard.rsi/equipped-HELMET.png differ diff --git a/Resources/Textures/_White/Wizard/Clothing/Head/clownwizard.rsi/icon.png b/Resources/Textures/_White/Wizard/Clothing/Head/clownwizard.rsi/icon.png new file mode 100644 index 00000000000..ff43a306d58 Binary files /dev/null and b/Resources/Textures/_White/Wizard/Clothing/Head/clownwizard.rsi/icon.png differ diff --git a/Resources/Textures/_White/Wizard/Clothing/Head/clownwizard.rsi/inhand-left.png b/Resources/Textures/_White/Wizard/Clothing/Head/clownwizard.rsi/inhand-left.png new file mode 100644 index 00000000000..684cfb44113 Binary files /dev/null and b/Resources/Textures/_White/Wizard/Clothing/Head/clownwizard.rsi/inhand-left.png differ diff --git a/Resources/Textures/_White/Wizard/Clothing/Head/clownwizard.rsi/inhand-right.png b/Resources/Textures/_White/Wizard/Clothing/Head/clownwizard.rsi/inhand-right.png new file mode 100644 index 00000000000..b4b19866bcb Binary files /dev/null and b/Resources/Textures/_White/Wizard/Clothing/Head/clownwizard.rsi/inhand-right.png differ diff --git a/Resources/Textures/_White/Wizard/Clothing/Head/clownwizard.rsi/meta.json b/Resources/Textures/_White/Wizard/Clothing/Head/clownwizard.rsi/meta.json new file mode 100644 index 00000000000..c66ed4bb962 --- /dev/null +++ b/Resources/Textures/_White/Wizard/Clothing/Head/clownwizard.rsi/meta.json @@ -0,0 +1,26 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from paradise station at https:https://github.com/ParadiseSS13/Paradise/commit/e3bc7e3fd7787cc772353295a56f087fc1c37312 and modified. Inhand sprites made by Armok.", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + }, + { + "name": "equipped-HELMET", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/_White/Wizard/Clothing/Head/comwizard.rsi/equipped-HELMET.png b/Resources/Textures/_White/Wizard/Clothing/Head/comwizard.rsi/equipped-HELMET.png new file mode 100644 index 00000000000..21b298693a6 Binary files /dev/null and b/Resources/Textures/_White/Wizard/Clothing/Head/comwizard.rsi/equipped-HELMET.png differ diff --git a/Resources/Textures/_White/Wizard/Clothing/Head/comwizard.rsi/icon.png b/Resources/Textures/_White/Wizard/Clothing/Head/comwizard.rsi/icon.png new file mode 100644 index 00000000000..6972a0066e6 Binary files /dev/null and b/Resources/Textures/_White/Wizard/Clothing/Head/comwizard.rsi/icon.png differ diff --git a/Resources/Textures/_White/Wizard/Clothing/Head/comwizard.rsi/inhand-left.png b/Resources/Textures/_White/Wizard/Clothing/Head/comwizard.rsi/inhand-left.png new file mode 100644 index 00000000000..d25d6c856f2 Binary files /dev/null and b/Resources/Textures/_White/Wizard/Clothing/Head/comwizard.rsi/inhand-left.png differ diff --git a/Resources/Textures/_White/Wizard/Clothing/Head/comwizard.rsi/inhand-right.png b/Resources/Textures/_White/Wizard/Clothing/Head/comwizard.rsi/inhand-right.png new file mode 100644 index 00000000000..0a386b95e3d Binary files /dev/null and b/Resources/Textures/_White/Wizard/Clothing/Head/comwizard.rsi/inhand-right.png differ diff --git a/Resources/Textures/_White/Wizard/Clothing/Head/comwizard.rsi/meta.json b/Resources/Textures/_White/Wizard/Clothing/Head/comwizard.rsi/meta.json new file mode 100644 index 00000000000..817e78c020f --- /dev/null +++ b/Resources/Textures/_White/Wizard/Clothing/Head/comwizard.rsi/meta.json @@ -0,0 +1,27 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Muppet", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + }, + { + "name": "equipped-HELMET", + "directions": 4 + } + ] + } + \ No newline at end of file diff --git a/Resources/Textures/_White/Wizard/Clothing/Head/crimsonwizard.rsi/equipped-HELMET.png b/Resources/Textures/_White/Wizard/Clothing/Head/crimsonwizard.rsi/equipped-HELMET.png new file mode 100644 index 00000000000..2bf9672887b Binary files /dev/null and b/Resources/Textures/_White/Wizard/Clothing/Head/crimsonwizard.rsi/equipped-HELMET.png differ diff --git a/Resources/Textures/_White/Wizard/Clothing/Head/crimsonwizard.rsi/icon.png b/Resources/Textures/_White/Wizard/Clothing/Head/crimsonwizard.rsi/icon.png new file mode 100644 index 00000000000..e232303854a Binary files /dev/null and b/Resources/Textures/_White/Wizard/Clothing/Head/crimsonwizard.rsi/icon.png differ diff --git a/Resources/Textures/_White/Wizard/Clothing/Head/crimsonwizard.rsi/meta.json b/Resources/Textures/_White/Wizard/Clothing/Head/crimsonwizard.rsi/meta.json new file mode 100644 index 00000000000..b343f82516a --- /dev/null +++ b/Resources/Textures/_White/Wizard/Clothing/Head/crimsonwizard.rsi/meta.json @@ -0,0 +1,18 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Sprited by OnsenCapy", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-HELMET", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/_White/Wizard/Clothing/Head/mimewizard.rsi/equipped-HELMET.png b/Resources/Textures/_White/Wizard/Clothing/Head/mimewizard.rsi/equipped-HELMET.png new file mode 100644 index 00000000000..7045e62755c Binary files /dev/null and b/Resources/Textures/_White/Wizard/Clothing/Head/mimewizard.rsi/equipped-HELMET.png differ diff --git a/Resources/Textures/_White/Wizard/Clothing/Head/mimewizard.rsi/icon.png b/Resources/Textures/_White/Wizard/Clothing/Head/mimewizard.rsi/icon.png new file mode 100644 index 00000000000..b8ad2143499 Binary files /dev/null and b/Resources/Textures/_White/Wizard/Clothing/Head/mimewizard.rsi/icon.png differ diff --git a/Resources/Textures/_White/Wizard/Clothing/Head/mimewizard.rsi/inhand-left.png b/Resources/Textures/_White/Wizard/Clothing/Head/mimewizard.rsi/inhand-left.png new file mode 100644 index 00000000000..85503af075c Binary files /dev/null and b/Resources/Textures/_White/Wizard/Clothing/Head/mimewizard.rsi/inhand-left.png differ diff --git a/Resources/Textures/_White/Wizard/Clothing/Head/mimewizard.rsi/inhand-right.png b/Resources/Textures/_White/Wizard/Clothing/Head/mimewizard.rsi/inhand-right.png new file mode 100644 index 00000000000..13d0cf82f04 Binary files /dev/null and b/Resources/Textures/_White/Wizard/Clothing/Head/mimewizard.rsi/inhand-right.png differ diff --git a/Resources/Textures/_White/Wizard/Clothing/Head/mimewizard.rsi/meta.json b/Resources/Textures/_White/Wizard/Clothing/Head/mimewizard.rsi/meta.json new file mode 100644 index 00000000000..1af0f3ab463 --- /dev/null +++ b/Resources/Textures/_White/Wizard/Clothing/Head/mimewizard.rsi/meta.json @@ -0,0 +1,26 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from paradise station at https:https://github.com/ParadiseSS13/Paradise/commit/e3bc7e3fd7787cc772353295a56f087fc1c37312. Inhand sprites made by Armok.", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + }, + { + "name": "equipped-HELMET", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/_White/Wizard/Clothing/Head/oblivionenforcer.rsi/equipped-HELMET.png b/Resources/Textures/_White/Wizard/Clothing/Head/oblivionenforcer.rsi/equipped-HELMET.png new file mode 100644 index 00000000000..67734e2a9d8 Binary files /dev/null and b/Resources/Textures/_White/Wizard/Clothing/Head/oblivionenforcer.rsi/equipped-HELMET.png differ diff --git a/Resources/Textures/_White/Wizard/Clothing/Head/oblivionenforcer.rsi/icon.png b/Resources/Textures/_White/Wizard/Clothing/Head/oblivionenforcer.rsi/icon.png new file mode 100644 index 00000000000..274d78f57ff Binary files /dev/null and b/Resources/Textures/_White/Wizard/Clothing/Head/oblivionenforcer.rsi/icon.png differ diff --git a/Resources/Textures/_White/Wizard/Clothing/Head/oblivionenforcer.rsi/inhand-left.png b/Resources/Textures/_White/Wizard/Clothing/Head/oblivionenforcer.rsi/inhand-left.png new file mode 100644 index 00000000000..4ca8c319939 Binary files /dev/null and b/Resources/Textures/_White/Wizard/Clothing/Head/oblivionenforcer.rsi/inhand-left.png differ diff --git a/Resources/Textures/_White/Wizard/Clothing/Head/oblivionenforcer.rsi/inhand-right.png b/Resources/Textures/_White/Wizard/Clothing/Head/oblivionenforcer.rsi/inhand-right.png new file mode 100644 index 00000000000..ab7196f7274 Binary files /dev/null and b/Resources/Textures/_White/Wizard/Clothing/Head/oblivionenforcer.rsi/inhand-right.png differ diff --git a/Resources/Textures/_White/Wizard/Clothing/Head/oblivionenforcer.rsi/meta.json b/Resources/Textures/_White/Wizard/Clothing/Head/oblivionenforcer.rsi/meta.json new file mode 100644 index 00000000000..6467a1764d1 --- /dev/null +++ b/Resources/Textures/_White/Wizard/Clothing/Head/oblivionenforcer.rsi/meta.json @@ -0,0 +1,26 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from paradise station at https:https://github.com/ParadiseSS13/Paradise/commit/e3bc7e3fd7787cc772353295a56f087fc1c37312. Inhand sprites by Armok.", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + }, + { + "name": "equipped-HELMET", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/_White/Wizard/Clothing/Head/psywizard.rsi/equipped-HELMET.png b/Resources/Textures/_White/Wizard/Clothing/Head/psywizard.rsi/equipped-HELMET.png new file mode 100644 index 00000000000..3737cf76362 Binary files /dev/null and b/Resources/Textures/_White/Wizard/Clothing/Head/psywizard.rsi/equipped-HELMET.png differ diff --git a/Resources/Textures/_White/Wizard/Clothing/Head/psywizard.rsi/icon.png b/Resources/Textures/_White/Wizard/Clothing/Head/psywizard.rsi/icon.png new file mode 100644 index 00000000000..c6eba3e981d Binary files /dev/null and b/Resources/Textures/_White/Wizard/Clothing/Head/psywizard.rsi/icon.png differ diff --git a/Resources/Textures/_White/Wizard/Clothing/Head/psywizard.rsi/inhand-left.png b/Resources/Textures/_White/Wizard/Clothing/Head/psywizard.rsi/inhand-left.png new file mode 100644 index 00000000000..85ca2143034 Binary files /dev/null and b/Resources/Textures/_White/Wizard/Clothing/Head/psywizard.rsi/inhand-left.png differ diff --git a/Resources/Textures/_White/Wizard/Clothing/Head/psywizard.rsi/inhand-right.png b/Resources/Textures/_White/Wizard/Clothing/Head/psywizard.rsi/inhand-right.png new file mode 100644 index 00000000000..816eea1535d Binary files /dev/null and b/Resources/Textures/_White/Wizard/Clothing/Head/psywizard.rsi/inhand-right.png differ diff --git a/Resources/Textures/_White/Wizard/Clothing/Head/psywizard.rsi/meta.json b/Resources/Textures/_White/Wizard/Clothing/Head/psywizard.rsi/meta.json new file mode 100644 index 00000000000..6467a1764d1 --- /dev/null +++ b/Resources/Textures/_White/Wizard/Clothing/Head/psywizard.rsi/meta.json @@ -0,0 +1,26 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from paradise station at https:https://github.com/ParadiseSS13/Paradise/commit/e3bc7e3fd7787cc772353295a56f087fc1c37312. Inhand sprites by Armok.", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + }, + { + "name": "equipped-HELMET", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/_White/Wizard/Clothing/Head/tapewizard.rsi/equipped-HELMET.png b/Resources/Textures/_White/Wizard/Clothing/Head/tapewizard.rsi/equipped-HELMET.png new file mode 100644 index 00000000000..193f40a1360 Binary files /dev/null and b/Resources/Textures/_White/Wizard/Clothing/Head/tapewizard.rsi/equipped-HELMET.png differ diff --git a/Resources/Textures/_White/Wizard/Clothing/Head/tapewizard.rsi/icon.png b/Resources/Textures/_White/Wizard/Clothing/Head/tapewizard.rsi/icon.png new file mode 100644 index 00000000000..63b09fc0434 Binary files /dev/null and b/Resources/Textures/_White/Wizard/Clothing/Head/tapewizard.rsi/icon.png differ diff --git a/Resources/Textures/_White/Wizard/Clothing/Head/tapewizard.rsi/inhand-left.png b/Resources/Textures/_White/Wizard/Clothing/Head/tapewizard.rsi/inhand-left.png new file mode 100644 index 00000000000..7404e3c8670 Binary files /dev/null and b/Resources/Textures/_White/Wizard/Clothing/Head/tapewizard.rsi/inhand-left.png differ diff --git a/Resources/Textures/_White/Wizard/Clothing/Head/tapewizard.rsi/inhand-right.png b/Resources/Textures/_White/Wizard/Clothing/Head/tapewizard.rsi/inhand-right.png new file mode 100644 index 00000000000..5c9255a4d20 Binary files /dev/null and b/Resources/Textures/_White/Wizard/Clothing/Head/tapewizard.rsi/inhand-right.png differ diff --git a/Resources/Textures/_White/Wizard/Clothing/Head/tapewizard.rsi/meta.json b/Resources/Textures/_White/Wizard/Clothing/Head/tapewizard.rsi/meta.json new file mode 100644 index 00000000000..80b4e650050 --- /dev/null +++ b/Resources/Textures/_White/Wizard/Clothing/Head/tapewizard.rsi/meta.json @@ -0,0 +1,26 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at https://github.com/tgstation/tgstation/commit/80ab61c8c7741e1d95e5f168357a9e6e61b38f2c", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-HELMET", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/_White/Wizard/Clothing/Head/yellowwizard.rsi/equipped-HELMET.png b/Resources/Textures/_White/Wizard/Clothing/Head/yellowwizard.rsi/equipped-HELMET.png new file mode 100644 index 00000000000..f735ecebf59 Binary files /dev/null and b/Resources/Textures/_White/Wizard/Clothing/Head/yellowwizard.rsi/equipped-HELMET.png differ diff --git a/Resources/Textures/_White/Wizard/Clothing/Head/yellowwizard.rsi/icon.png b/Resources/Textures/_White/Wizard/Clothing/Head/yellowwizard.rsi/icon.png new file mode 100644 index 00000000000..68c725fbf92 Binary files /dev/null and b/Resources/Textures/_White/Wizard/Clothing/Head/yellowwizard.rsi/icon.png differ diff --git a/Resources/Textures/_White/Wizard/Clothing/Head/yellowwizard.rsi/inhand-left.png b/Resources/Textures/_White/Wizard/Clothing/Head/yellowwizard.rsi/inhand-left.png new file mode 100644 index 00000000000..4127bdb98fd Binary files /dev/null and b/Resources/Textures/_White/Wizard/Clothing/Head/yellowwizard.rsi/inhand-left.png differ diff --git a/Resources/Textures/_White/Wizard/Clothing/Head/yellowwizard.rsi/inhand-right.png b/Resources/Textures/_White/Wizard/Clothing/Head/yellowwizard.rsi/inhand-right.png new file mode 100644 index 00000000000..0f739c354da Binary files /dev/null and b/Resources/Textures/_White/Wizard/Clothing/Head/yellowwizard.rsi/inhand-right.png differ diff --git a/Resources/Textures/_White/Wizard/Clothing/Head/yellowwizard.rsi/meta.json b/Resources/Textures/_White/Wizard/Clothing/Head/yellowwizard.rsi/meta.json new file mode 100644 index 00000000000..f793ecb658c --- /dev/null +++ b/Resources/Textures/_White/Wizard/Clothing/Head/yellowwizard.rsi/meta.json @@ -0,0 +1,26 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at https://github.com/tgstation/tgstation/commit/80ab61c8c7741e1d95e5f168357a9e6e61b38f2c. Inhand sprites by Armok.", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-HELMET", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/_White/Wizard/Clothing/Mask/cow.rsi/equipped-MASK.png b/Resources/Textures/_White/Wizard/Clothing/Mask/cow.rsi/equipped-MASK.png new file mode 100644 index 00000000000..3b61defdd69 Binary files /dev/null and b/Resources/Textures/_White/Wizard/Clothing/Mask/cow.rsi/equipped-MASK.png differ diff --git a/Resources/Textures/_White/Wizard/Clothing/Mask/cow.rsi/icon.png b/Resources/Textures/_White/Wizard/Clothing/Mask/cow.rsi/icon.png new file mode 100644 index 00000000000..e2470021ffc Binary files /dev/null and b/Resources/Textures/_White/Wizard/Clothing/Mask/cow.rsi/icon.png differ diff --git a/Resources/Textures/_White/Wizard/Clothing/Mask/cow.rsi/meta.json b/Resources/Textures/_White/Wizard/Clothing/Mask/cow.rsi/meta.json new file mode 100644 index 00000000000..b745f819058 --- /dev/null +++ b/Resources/Textures/_White/Wizard/Clothing/Mask/cow.rsi/meta.json @@ -0,0 +1,18 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at https://github.com/tgstation/tgstation/commit/80ab61c8c7741e1d95e5f168357a9e6e61b38f2c", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-MASK", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/_White/Wizard/Clothing/Mask/frog.rsi/equipped-MASK.png b/Resources/Textures/_White/Wizard/Clothing/Mask/frog.rsi/equipped-MASK.png new file mode 100644 index 00000000000..40328f18a02 Binary files /dev/null and b/Resources/Textures/_White/Wizard/Clothing/Mask/frog.rsi/equipped-MASK.png differ diff --git a/Resources/Textures/_White/Wizard/Clothing/Mask/frog.rsi/icon.png b/Resources/Textures/_White/Wizard/Clothing/Mask/frog.rsi/icon.png new file mode 100644 index 00000000000..067c284ca1b Binary files /dev/null and b/Resources/Textures/_White/Wizard/Clothing/Mask/frog.rsi/icon.png differ diff --git a/Resources/Textures/_White/Wizard/Clothing/Mask/frog.rsi/meta.json b/Resources/Textures/_White/Wizard/Clothing/Mask/frog.rsi/meta.json new file mode 100644 index 00000000000..b745f819058 --- /dev/null +++ b/Resources/Textures/_White/Wizard/Clothing/Mask/frog.rsi/meta.json @@ -0,0 +1,18 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at https://github.com/tgstation/tgstation/commit/80ab61c8c7741e1d95e5f168357a9e6e61b38f2c", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-MASK", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/_White/Wizard/Clothing/Mask/horse.rsi/equipped-MASK.png b/Resources/Textures/_White/Wizard/Clothing/Mask/horse.rsi/equipped-MASK.png new file mode 100644 index 00000000000..6f553b37b27 Binary files /dev/null and b/Resources/Textures/_White/Wizard/Clothing/Mask/horse.rsi/equipped-MASK.png differ diff --git a/Resources/Textures/_White/Wizard/Clothing/Mask/horse.rsi/icon.png b/Resources/Textures/_White/Wizard/Clothing/Mask/horse.rsi/icon.png new file mode 100644 index 00000000000..1cf01cedd8a Binary files /dev/null and b/Resources/Textures/_White/Wizard/Clothing/Mask/horse.rsi/icon.png differ diff --git a/Resources/Textures/_White/Wizard/Clothing/Mask/horse.rsi/meta.json b/Resources/Textures/_White/Wizard/Clothing/Mask/horse.rsi/meta.json new file mode 100644 index 00000000000..b745f819058 --- /dev/null +++ b/Resources/Textures/_White/Wizard/Clothing/Mask/horse.rsi/meta.json @@ -0,0 +1,18 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at https://github.com/tgstation/tgstation/commit/80ab61c8c7741e1d95e5f168357a9e6e61b38f2c", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-MASK", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/_White/Wizard/Clothing/Mask/oblivionenforcer.rsi/equipped-MASK.png b/Resources/Textures/_White/Wizard/Clothing/Mask/oblivionenforcer.rsi/equipped-MASK.png new file mode 100644 index 00000000000..d7a6655872f Binary files /dev/null and b/Resources/Textures/_White/Wizard/Clothing/Mask/oblivionenforcer.rsi/equipped-MASK.png differ diff --git a/Resources/Textures/_White/Wizard/Clothing/Mask/oblivionenforcer.rsi/icon.png b/Resources/Textures/_White/Wizard/Clothing/Mask/oblivionenforcer.rsi/icon.png new file mode 100644 index 00000000000..42aa36228ff Binary files /dev/null and b/Resources/Textures/_White/Wizard/Clothing/Mask/oblivionenforcer.rsi/icon.png differ diff --git a/Resources/Textures/_White/Wizard/Clothing/Mask/oblivionenforcer.rsi/meta.json b/Resources/Textures/_White/Wizard/Clothing/Mask/oblivionenforcer.rsi/meta.json new file mode 100644 index 00000000000..eec9e92d63d --- /dev/null +++ b/Resources/Textures/_White/Wizard/Clothing/Mask/oblivionenforcer.rsi/meta.json @@ -0,0 +1,18 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from paradise station at https:https://github.com/ParadiseSS13/Paradise/commit/e3bc7e3fd7787cc772353295a56f087fc1c37312", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-MASK", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/_White/Wizard/Clothing/Mask/pig.rsi/equipped-MASK.png b/Resources/Textures/_White/Wizard/Clothing/Mask/pig.rsi/equipped-MASK.png new file mode 100644 index 00000000000..12d21df9168 Binary files /dev/null and b/Resources/Textures/_White/Wizard/Clothing/Mask/pig.rsi/equipped-MASK.png differ diff --git a/Resources/Textures/_White/Wizard/Clothing/Mask/pig.rsi/icon.png b/Resources/Textures/_White/Wizard/Clothing/Mask/pig.rsi/icon.png new file mode 100644 index 00000000000..e1557e1fd33 Binary files /dev/null and b/Resources/Textures/_White/Wizard/Clothing/Mask/pig.rsi/icon.png differ diff --git a/Resources/Textures/_White/Wizard/Clothing/Mask/pig.rsi/meta.json b/Resources/Textures/_White/Wizard/Clothing/Mask/pig.rsi/meta.json new file mode 100644 index 00000000000..b745f819058 --- /dev/null +++ b/Resources/Textures/_White/Wizard/Clothing/Mask/pig.rsi/meta.json @@ -0,0 +1,18 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at https://github.com/tgstation/tgstation/commit/80ab61c8c7741e1d95e5f168357a9e6e61b38f2c", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-MASK", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/_White/Wizard/Clothing/Neck/crimsonwizard.rsi/equipped-NECK.png b/Resources/Textures/_White/Wizard/Clothing/Neck/crimsonwizard.rsi/equipped-NECK.png new file mode 100644 index 00000000000..a696f1cb976 Binary files /dev/null and b/Resources/Textures/_White/Wizard/Clothing/Neck/crimsonwizard.rsi/equipped-NECK.png differ diff --git a/Resources/Textures/_White/Wizard/Clothing/Neck/crimsonwizard.rsi/icon.png b/Resources/Textures/_White/Wizard/Clothing/Neck/crimsonwizard.rsi/icon.png new file mode 100644 index 00000000000..3fae7d3adfa Binary files /dev/null and b/Resources/Textures/_White/Wizard/Clothing/Neck/crimsonwizard.rsi/icon.png differ diff --git a/Resources/Textures/_White/Wizard/Clothing/Neck/crimsonwizard.rsi/meta.json b/Resources/Textures/_White/Wizard/Clothing/Neck/crimsonwizard.rsi/meta.json new file mode 100644 index 00000000000..5871a4b6cfe --- /dev/null +++ b/Resources/Textures/_White/Wizard/Clothing/Neck/crimsonwizard.rsi/meta.json @@ -0,0 +1,18 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Sprited by OnsenCapy", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-NECK", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/_White/Wizard/Clothing/OuterClothing/blackwizard.rsi/equipped-OUTERCLOTHING.png b/Resources/Textures/_White/Wizard/Clothing/OuterClothing/blackwizard.rsi/equipped-OUTERCLOTHING.png new file mode 100644 index 00000000000..7a2dd0773f7 Binary files /dev/null and b/Resources/Textures/_White/Wizard/Clothing/OuterClothing/blackwizard.rsi/equipped-OUTERCLOTHING.png differ diff --git a/Resources/Textures/_White/Wizard/Clothing/OuterClothing/blackwizard.rsi/icon.png b/Resources/Textures/_White/Wizard/Clothing/OuterClothing/blackwizard.rsi/icon.png new file mode 100644 index 00000000000..998a7f53268 Binary files /dev/null and b/Resources/Textures/_White/Wizard/Clothing/OuterClothing/blackwizard.rsi/icon.png differ diff --git a/Resources/Textures/_White/Wizard/Clothing/OuterClothing/blackwizard.rsi/inhand-left.png b/Resources/Textures/_White/Wizard/Clothing/OuterClothing/blackwizard.rsi/inhand-left.png new file mode 100644 index 00000000000..f3b680fe2d7 Binary files /dev/null and b/Resources/Textures/_White/Wizard/Clothing/OuterClothing/blackwizard.rsi/inhand-left.png differ diff --git a/Resources/Textures/_White/Wizard/Clothing/OuterClothing/blackwizard.rsi/inhand-right.png b/Resources/Textures/_White/Wizard/Clothing/OuterClothing/blackwizard.rsi/inhand-right.png new file mode 100644 index 00000000000..f41bed23ece Binary files /dev/null and b/Resources/Textures/_White/Wizard/Clothing/OuterClothing/blackwizard.rsi/inhand-right.png differ diff --git a/Resources/Textures/_White/Wizard/Clothing/OuterClothing/blackwizard.rsi/meta.json b/Resources/Textures/_White/Wizard/Clothing/OuterClothing/blackwizard.rsi/meta.json new file mode 100644 index 00000000000..eef6ac779bf --- /dev/null +++ b/Resources/Textures/_White/Wizard/Clothing/OuterClothing/blackwizard.rsi/meta.json @@ -0,0 +1,27 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at https://github.com/tgstation/tgstation/commit/80ab61c8c7741e1d95e5f168357a9e6e61b38f2c. Inhand sprites by Armok.", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-OUTERCLOTHING", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + + ] +} diff --git a/Resources/Textures/_White/Wizard/Clothing/OuterClothing/clownwizard.rsi/equipped-OUTERCLOTHING.png b/Resources/Textures/_White/Wizard/Clothing/OuterClothing/clownwizard.rsi/equipped-OUTERCLOTHING.png new file mode 100644 index 00000000000..2cca45929b4 Binary files /dev/null and b/Resources/Textures/_White/Wizard/Clothing/OuterClothing/clownwizard.rsi/equipped-OUTERCLOTHING.png differ diff --git a/Resources/Textures/_White/Wizard/Clothing/OuterClothing/clownwizard.rsi/icon.png b/Resources/Textures/_White/Wizard/Clothing/OuterClothing/clownwizard.rsi/icon.png new file mode 100644 index 00000000000..3213ebac3af Binary files /dev/null and b/Resources/Textures/_White/Wizard/Clothing/OuterClothing/clownwizard.rsi/icon.png differ diff --git a/Resources/Textures/_White/Wizard/Clothing/OuterClothing/clownwizard.rsi/inhand-left.png b/Resources/Textures/_White/Wizard/Clothing/OuterClothing/clownwizard.rsi/inhand-left.png new file mode 100644 index 00000000000..2114a430747 Binary files /dev/null and b/Resources/Textures/_White/Wizard/Clothing/OuterClothing/clownwizard.rsi/inhand-left.png differ diff --git a/Resources/Textures/_White/Wizard/Clothing/OuterClothing/clownwizard.rsi/inhand-right.png b/Resources/Textures/_White/Wizard/Clothing/OuterClothing/clownwizard.rsi/inhand-right.png new file mode 100644 index 00000000000..e1e2ec56888 Binary files /dev/null and b/Resources/Textures/_White/Wizard/Clothing/OuterClothing/clownwizard.rsi/inhand-right.png differ diff --git a/Resources/Textures/_White/Wizard/Clothing/OuterClothing/clownwizard.rsi/meta.json b/Resources/Textures/_White/Wizard/Clothing/OuterClothing/clownwizard.rsi/meta.json new file mode 100644 index 00000000000..a54e4cdf4fc --- /dev/null +++ b/Resources/Textures/_White/Wizard/Clothing/OuterClothing/clownwizard.rsi/meta.json @@ -0,0 +1,26 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from paradise station at https:https://github.com/ParadiseSS13/Paradise/commit/e3bc7e3fd7787cc772353295a56f087fc1c37312. Inhand sprites made by Armok.", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + }, + { + "name": "equipped-OUTERCLOTHING", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/_White/Wizard/Clothing/OuterClothing/comwizard.rsi/equipped-OUTERCLOTHING.png b/Resources/Textures/_White/Wizard/Clothing/OuterClothing/comwizard.rsi/equipped-OUTERCLOTHING.png new file mode 100644 index 00000000000..5bb5135056e Binary files /dev/null and b/Resources/Textures/_White/Wizard/Clothing/OuterClothing/comwizard.rsi/equipped-OUTERCLOTHING.png differ diff --git a/Resources/Textures/_White/Wizard/Clothing/OuterClothing/comwizard.rsi/icon.png b/Resources/Textures/_White/Wizard/Clothing/OuterClothing/comwizard.rsi/icon.png new file mode 100644 index 00000000000..06dd9ec2503 Binary files /dev/null and b/Resources/Textures/_White/Wizard/Clothing/OuterClothing/comwizard.rsi/icon.png differ diff --git a/Resources/Textures/_White/Wizard/Clothing/OuterClothing/comwizard.rsi/inhand-left.png b/Resources/Textures/_White/Wizard/Clothing/OuterClothing/comwizard.rsi/inhand-left.png new file mode 100644 index 00000000000..e703476a179 Binary files /dev/null and b/Resources/Textures/_White/Wizard/Clothing/OuterClothing/comwizard.rsi/inhand-left.png differ diff --git a/Resources/Textures/_White/Wizard/Clothing/OuterClothing/comwizard.rsi/inhand-right.png b/Resources/Textures/_White/Wizard/Clothing/OuterClothing/comwizard.rsi/inhand-right.png new file mode 100644 index 00000000000..79f9f77a688 Binary files /dev/null and b/Resources/Textures/_White/Wizard/Clothing/OuterClothing/comwizard.rsi/inhand-right.png differ diff --git a/Resources/Textures/_White/Wizard/Clothing/OuterClothing/comwizard.rsi/meta.json b/Resources/Textures/_White/Wizard/Clothing/OuterClothing/comwizard.rsi/meta.json new file mode 100644 index 00000000000..7f696a4cc44 --- /dev/null +++ b/Resources/Textures/_White/Wizard/Clothing/OuterClothing/comwizard.rsi/meta.json @@ -0,0 +1,28 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Muppet", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-OUTERCLOTHING", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + + ] + } + \ No newline at end of file diff --git a/Resources/Textures/_White/Wizard/Clothing/OuterClothing/crimsonwizard.rsi/equipped-OUTERCLOTHING-resomi.png b/Resources/Textures/_White/Wizard/Clothing/OuterClothing/crimsonwizard.rsi/equipped-OUTERCLOTHING-resomi.png new file mode 100644 index 00000000000..f18621bba40 Binary files /dev/null and b/Resources/Textures/_White/Wizard/Clothing/OuterClothing/crimsonwizard.rsi/equipped-OUTERCLOTHING-resomi.png differ diff --git a/Resources/Textures/_White/Wizard/Clothing/OuterClothing/crimsonwizard.rsi/equipped-OUTERCLOTHING-vox.png b/Resources/Textures/_White/Wizard/Clothing/OuterClothing/crimsonwizard.rsi/equipped-OUTERCLOTHING-vox.png new file mode 100644 index 00000000000..2c5b7873fc0 Binary files /dev/null and b/Resources/Textures/_White/Wizard/Clothing/OuterClothing/crimsonwizard.rsi/equipped-OUTERCLOTHING-vox.png differ diff --git a/Resources/Textures/_White/Wizard/Clothing/OuterClothing/crimsonwizard.rsi/equipped-OUTERCLOTHING.png b/Resources/Textures/_White/Wizard/Clothing/OuterClothing/crimsonwizard.rsi/equipped-OUTERCLOTHING.png new file mode 100644 index 00000000000..30d0b4622bd Binary files /dev/null and b/Resources/Textures/_White/Wizard/Clothing/OuterClothing/crimsonwizard.rsi/equipped-OUTERCLOTHING.png differ diff --git a/Resources/Textures/_White/Wizard/Clothing/OuterClothing/crimsonwizard.rsi/icon.png b/Resources/Textures/_White/Wizard/Clothing/OuterClothing/crimsonwizard.rsi/icon.png new file mode 100644 index 00000000000..3f9533c7174 Binary files /dev/null and b/Resources/Textures/_White/Wizard/Clothing/OuterClothing/crimsonwizard.rsi/icon.png differ diff --git a/Resources/Textures/_White/Wizard/Clothing/OuterClothing/crimsonwizard.rsi/meta.json b/Resources/Textures/_White/Wizard/Clothing/OuterClothing/crimsonwizard.rsi/meta.json new file mode 100644 index 00000000000..c8fd73315d5 --- /dev/null +++ b/Resources/Textures/_White/Wizard/Clothing/OuterClothing/crimsonwizard.rsi/meta.json @@ -0,0 +1,26 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Sprited by OnsenCapy", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-OUTERCLOTHING", + "directions": 4 + }, + { + "name": "equipped-OUTERCLOTHING-vox", + "directions": 4 + }, + { + "name": "equipped-OUTERCLOTHING-resomi", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/_White/Wizard/Clothing/OuterClothing/mimewizard.rsi/equipped-OUTERCLOTHING.png b/Resources/Textures/_White/Wizard/Clothing/OuterClothing/mimewizard.rsi/equipped-OUTERCLOTHING.png new file mode 100644 index 00000000000..c9391b2bdc5 Binary files /dev/null and b/Resources/Textures/_White/Wizard/Clothing/OuterClothing/mimewizard.rsi/equipped-OUTERCLOTHING.png differ diff --git a/Resources/Textures/_White/Wizard/Clothing/OuterClothing/mimewizard.rsi/icon.png b/Resources/Textures/_White/Wizard/Clothing/OuterClothing/mimewizard.rsi/icon.png new file mode 100644 index 00000000000..af693337f59 Binary files /dev/null and b/Resources/Textures/_White/Wizard/Clothing/OuterClothing/mimewizard.rsi/icon.png differ diff --git a/Resources/Textures/_White/Wizard/Clothing/OuterClothing/mimewizard.rsi/inhand-left.png b/Resources/Textures/_White/Wizard/Clothing/OuterClothing/mimewizard.rsi/inhand-left.png new file mode 100644 index 00000000000..6edc5bafe38 Binary files /dev/null and b/Resources/Textures/_White/Wizard/Clothing/OuterClothing/mimewizard.rsi/inhand-left.png differ diff --git a/Resources/Textures/_White/Wizard/Clothing/OuterClothing/mimewizard.rsi/inhand-right.png b/Resources/Textures/_White/Wizard/Clothing/OuterClothing/mimewizard.rsi/inhand-right.png new file mode 100644 index 00000000000..13377aaa3d9 Binary files /dev/null and b/Resources/Textures/_White/Wizard/Clothing/OuterClothing/mimewizard.rsi/inhand-right.png differ diff --git a/Resources/Textures/_White/Wizard/Clothing/OuterClothing/mimewizard.rsi/meta.json b/Resources/Textures/_White/Wizard/Clothing/OuterClothing/mimewizard.rsi/meta.json new file mode 100644 index 00000000000..a54e4cdf4fc --- /dev/null +++ b/Resources/Textures/_White/Wizard/Clothing/OuterClothing/mimewizard.rsi/meta.json @@ -0,0 +1,26 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from paradise station at https:https://github.com/ParadiseSS13/Paradise/commit/e3bc7e3fd7787cc772353295a56f087fc1c37312. Inhand sprites made by Armok.", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + }, + { + "name": "equipped-OUTERCLOTHING", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/_White/Wizard/Clothing/OuterClothing/oblivionenforcer.rsi/equipped-OUTERCLOTHING.png b/Resources/Textures/_White/Wizard/Clothing/OuterClothing/oblivionenforcer.rsi/equipped-OUTERCLOTHING.png new file mode 100644 index 00000000000..0cf54feb3b7 Binary files /dev/null and b/Resources/Textures/_White/Wizard/Clothing/OuterClothing/oblivionenforcer.rsi/equipped-OUTERCLOTHING.png differ diff --git a/Resources/Textures/_White/Wizard/Clothing/OuterClothing/oblivionenforcer.rsi/icon.png b/Resources/Textures/_White/Wizard/Clothing/OuterClothing/oblivionenforcer.rsi/icon.png new file mode 100644 index 00000000000..3907cb94b71 Binary files /dev/null and b/Resources/Textures/_White/Wizard/Clothing/OuterClothing/oblivionenforcer.rsi/icon.png differ diff --git a/Resources/Textures/_White/Wizard/Clothing/OuterClothing/oblivionenforcer.rsi/inhand-left.png b/Resources/Textures/_White/Wizard/Clothing/OuterClothing/oblivionenforcer.rsi/inhand-left.png new file mode 100644 index 00000000000..3aedee6b6dc Binary files /dev/null and b/Resources/Textures/_White/Wizard/Clothing/OuterClothing/oblivionenforcer.rsi/inhand-left.png differ diff --git a/Resources/Textures/_White/Wizard/Clothing/OuterClothing/oblivionenforcer.rsi/inhand-right.png b/Resources/Textures/_White/Wizard/Clothing/OuterClothing/oblivionenforcer.rsi/inhand-right.png new file mode 100644 index 00000000000..8a267ebaa18 Binary files /dev/null and b/Resources/Textures/_White/Wizard/Clothing/OuterClothing/oblivionenforcer.rsi/inhand-right.png differ diff --git a/Resources/Textures/_White/Wizard/Clothing/OuterClothing/oblivionenforcer.rsi/meta.json b/Resources/Textures/_White/Wizard/Clothing/OuterClothing/oblivionenforcer.rsi/meta.json new file mode 100644 index 00000000000..a54e4cdf4fc --- /dev/null +++ b/Resources/Textures/_White/Wizard/Clothing/OuterClothing/oblivionenforcer.rsi/meta.json @@ -0,0 +1,26 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from paradise station at https:https://github.com/ParadiseSS13/Paradise/commit/e3bc7e3fd7787cc772353295a56f087fc1c37312. Inhand sprites made by Armok.", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + }, + { + "name": "equipped-OUTERCLOTHING", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/_White/Wizard/Clothing/OuterClothing/paperwizard.rsi/equipped-OUTERCLOTHING.png b/Resources/Textures/_White/Wizard/Clothing/OuterClothing/paperwizard.rsi/equipped-OUTERCLOTHING.png new file mode 100644 index 00000000000..0e2e77876ca Binary files /dev/null and b/Resources/Textures/_White/Wizard/Clothing/OuterClothing/paperwizard.rsi/equipped-OUTERCLOTHING.png differ diff --git a/Resources/Textures/_White/Wizard/Clothing/OuterClothing/paperwizard.rsi/icon.png b/Resources/Textures/_White/Wizard/Clothing/OuterClothing/paperwizard.rsi/icon.png new file mode 100644 index 00000000000..1f47850869a Binary files /dev/null and b/Resources/Textures/_White/Wizard/Clothing/OuterClothing/paperwizard.rsi/icon.png differ diff --git a/Resources/Textures/_White/Wizard/Clothing/OuterClothing/paperwizard.rsi/inhand-left.png b/Resources/Textures/_White/Wizard/Clothing/OuterClothing/paperwizard.rsi/inhand-left.png new file mode 100644 index 00000000000..c1daf3e7b24 Binary files /dev/null and b/Resources/Textures/_White/Wizard/Clothing/OuterClothing/paperwizard.rsi/inhand-left.png differ diff --git a/Resources/Textures/_White/Wizard/Clothing/OuterClothing/paperwizard.rsi/inhand-right.png b/Resources/Textures/_White/Wizard/Clothing/OuterClothing/paperwizard.rsi/inhand-right.png new file mode 100644 index 00000000000..09b0f62db3c Binary files /dev/null and b/Resources/Textures/_White/Wizard/Clothing/OuterClothing/paperwizard.rsi/inhand-right.png differ diff --git a/Resources/Textures/_White/Wizard/Clothing/OuterClothing/paperwizard.rsi/meta.json b/Resources/Textures/_White/Wizard/Clothing/OuterClothing/paperwizard.rsi/meta.json new file mode 100644 index 00000000000..eef6ac779bf --- /dev/null +++ b/Resources/Textures/_White/Wizard/Clothing/OuterClothing/paperwizard.rsi/meta.json @@ -0,0 +1,27 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at https://github.com/tgstation/tgstation/commit/80ab61c8c7741e1d95e5f168357a9e6e61b38f2c. Inhand sprites by Armok.", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-OUTERCLOTHING", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + + ] +} diff --git a/Resources/Textures/_White/Wizard/Clothing/OuterClothing/psywizard.rsi/equipped-OUTERCLOTHING.png b/Resources/Textures/_White/Wizard/Clothing/OuterClothing/psywizard.rsi/equipped-OUTERCLOTHING.png new file mode 100644 index 00000000000..cacd877bcb7 Binary files /dev/null and b/Resources/Textures/_White/Wizard/Clothing/OuterClothing/psywizard.rsi/equipped-OUTERCLOTHING.png differ diff --git a/Resources/Textures/_White/Wizard/Clothing/OuterClothing/psywizard.rsi/icon.png b/Resources/Textures/_White/Wizard/Clothing/OuterClothing/psywizard.rsi/icon.png new file mode 100644 index 00000000000..b503ba631a7 Binary files /dev/null and b/Resources/Textures/_White/Wizard/Clothing/OuterClothing/psywizard.rsi/icon.png differ diff --git a/Resources/Textures/_White/Wizard/Clothing/OuterClothing/psywizard.rsi/inhand-left.png b/Resources/Textures/_White/Wizard/Clothing/OuterClothing/psywizard.rsi/inhand-left.png new file mode 100644 index 00000000000..5a649bb1b95 Binary files /dev/null and b/Resources/Textures/_White/Wizard/Clothing/OuterClothing/psywizard.rsi/inhand-left.png differ diff --git a/Resources/Textures/_White/Wizard/Clothing/OuterClothing/psywizard.rsi/inhand-right.png b/Resources/Textures/_White/Wizard/Clothing/OuterClothing/psywizard.rsi/inhand-right.png new file mode 100644 index 00000000000..6e7d91d4463 Binary files /dev/null and b/Resources/Textures/_White/Wizard/Clothing/OuterClothing/psywizard.rsi/inhand-right.png differ diff --git a/Resources/Textures/_White/Wizard/Clothing/OuterClothing/psywizard.rsi/meta.json b/Resources/Textures/_White/Wizard/Clothing/OuterClothing/psywizard.rsi/meta.json new file mode 100644 index 00000000000..a54e4cdf4fc --- /dev/null +++ b/Resources/Textures/_White/Wizard/Clothing/OuterClothing/psywizard.rsi/meta.json @@ -0,0 +1,26 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from paradise station at https:https://github.com/ParadiseSS13/Paradise/commit/e3bc7e3fd7787cc772353295a56f087fc1c37312. Inhand sprites made by Armok.", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + }, + { + "name": "equipped-OUTERCLOTHING", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/_White/Wizard/Clothing/OuterClothing/tapewizard.rsi/equipped-OUTERCLOTHING.png b/Resources/Textures/_White/Wizard/Clothing/OuterClothing/tapewizard.rsi/equipped-OUTERCLOTHING.png new file mode 100644 index 00000000000..b69ab4401f9 Binary files /dev/null and b/Resources/Textures/_White/Wizard/Clothing/OuterClothing/tapewizard.rsi/equipped-OUTERCLOTHING.png differ diff --git a/Resources/Textures/_White/Wizard/Clothing/OuterClothing/tapewizard.rsi/icon.png b/Resources/Textures/_White/Wizard/Clothing/OuterClothing/tapewizard.rsi/icon.png new file mode 100644 index 00000000000..ea74eb759ad Binary files /dev/null and b/Resources/Textures/_White/Wizard/Clothing/OuterClothing/tapewizard.rsi/icon.png differ diff --git a/Resources/Textures/_White/Wizard/Clothing/OuterClothing/tapewizard.rsi/inhand-left.png b/Resources/Textures/_White/Wizard/Clothing/OuterClothing/tapewizard.rsi/inhand-left.png new file mode 100644 index 00000000000..12e9fe19c55 Binary files /dev/null and b/Resources/Textures/_White/Wizard/Clothing/OuterClothing/tapewizard.rsi/inhand-left.png differ diff --git a/Resources/Textures/_White/Wizard/Clothing/OuterClothing/tapewizard.rsi/inhand-right.png b/Resources/Textures/_White/Wizard/Clothing/OuterClothing/tapewizard.rsi/inhand-right.png new file mode 100644 index 00000000000..d5c093e6fb3 Binary files /dev/null and b/Resources/Textures/_White/Wizard/Clothing/OuterClothing/tapewizard.rsi/inhand-right.png differ diff --git a/Resources/Textures/_White/Wizard/Clothing/OuterClothing/tapewizard.rsi/meta.json b/Resources/Textures/_White/Wizard/Clothing/OuterClothing/tapewizard.rsi/meta.json new file mode 100644 index 00000000000..eef6ac779bf --- /dev/null +++ b/Resources/Textures/_White/Wizard/Clothing/OuterClothing/tapewizard.rsi/meta.json @@ -0,0 +1,27 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at https://github.com/tgstation/tgstation/commit/80ab61c8c7741e1d95e5f168357a9e6e61b38f2c. Inhand sprites by Armok.", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-OUTERCLOTHING", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + + ] +} diff --git a/Resources/Textures/_White/Wizard/Clothing/OuterClothing/yellowwizard.rsi/equipped-OUTERCLOTHING.png b/Resources/Textures/_White/Wizard/Clothing/OuterClothing/yellowwizard.rsi/equipped-OUTERCLOTHING.png new file mode 100644 index 00000000000..26d25b36992 Binary files /dev/null and b/Resources/Textures/_White/Wizard/Clothing/OuterClothing/yellowwizard.rsi/equipped-OUTERCLOTHING.png differ diff --git a/Resources/Textures/_White/Wizard/Clothing/OuterClothing/yellowwizard.rsi/icon.png b/Resources/Textures/_White/Wizard/Clothing/OuterClothing/yellowwizard.rsi/icon.png new file mode 100644 index 00000000000..a24dd06a779 Binary files /dev/null and b/Resources/Textures/_White/Wizard/Clothing/OuterClothing/yellowwizard.rsi/icon.png differ diff --git a/Resources/Textures/_White/Wizard/Clothing/OuterClothing/yellowwizard.rsi/inhand-left.png b/Resources/Textures/_White/Wizard/Clothing/OuterClothing/yellowwizard.rsi/inhand-left.png new file mode 100644 index 00000000000..6e4078eca2d Binary files /dev/null and b/Resources/Textures/_White/Wizard/Clothing/OuterClothing/yellowwizard.rsi/inhand-left.png differ diff --git a/Resources/Textures/_White/Wizard/Clothing/OuterClothing/yellowwizard.rsi/inhand-right.png b/Resources/Textures/_White/Wizard/Clothing/OuterClothing/yellowwizard.rsi/inhand-right.png new file mode 100644 index 00000000000..b72b0121664 Binary files /dev/null and b/Resources/Textures/_White/Wizard/Clothing/OuterClothing/yellowwizard.rsi/inhand-right.png differ diff --git a/Resources/Textures/_White/Wizard/Clothing/OuterClothing/yellowwizard.rsi/meta.json b/Resources/Textures/_White/Wizard/Clothing/OuterClothing/yellowwizard.rsi/meta.json new file mode 100644 index 00000000000..128a9f16426 --- /dev/null +++ b/Resources/Textures/_White/Wizard/Clothing/OuterClothing/yellowwizard.rsi/meta.json @@ -0,0 +1,27 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at https://github.com/tgstation/tgstation/commit/80ab61c8c7741e1d95e5f168357a9e6e61b38f2c. Inhand sprites made by Armok.", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-OUTERCLOTHING", + "directions": 4 + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + + ] +} diff --git a/Resources/Textures/_White/Wizard/Clothing/Shoes/crimson.rsi/equipped-FEET.png b/Resources/Textures/_White/Wizard/Clothing/Shoes/crimson.rsi/equipped-FEET.png new file mode 100644 index 00000000000..ff1ee1441d6 Binary files /dev/null and b/Resources/Textures/_White/Wizard/Clothing/Shoes/crimson.rsi/equipped-FEET.png differ diff --git a/Resources/Textures/_White/Wizard/Clothing/Shoes/crimson.rsi/icon.png b/Resources/Textures/_White/Wizard/Clothing/Shoes/crimson.rsi/icon.png new file mode 100644 index 00000000000..da90384a829 Binary files /dev/null and b/Resources/Textures/_White/Wizard/Clothing/Shoes/crimson.rsi/icon.png differ diff --git a/Resources/Textures/_White/Wizard/Clothing/Shoes/crimson.rsi/meta.json b/Resources/Textures/_White/Wizard/Clothing/Shoes/crimson.rsi/meta.json new file mode 100644 index 00000000000..79a979bcba7 --- /dev/null +++ b/Resources/Textures/_White/Wizard/Clothing/Shoes/crimson.rsi/meta.json @@ -0,0 +1,18 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Sprited by OnsenCapy", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "equipped-FEET", + "directions": 4 + } + ] +} diff --git a/Resources/Textures/_White/Wizard/Effects/LightMasks/ray.png b/Resources/Textures/_White/Wizard/Effects/LightMasks/ray.png new file mode 100644 index 00000000000..5be92c5f784 Binary files /dev/null and b/Resources/Textures/_White/Wizard/Effects/LightMasks/ray.png differ diff --git a/Resources/Textures/_White/Wizard/Effects/blood.rsi/blood.png b/Resources/Textures/_White/Wizard/Effects/blood.rsi/blood.png new file mode 100644 index 00000000000..52555af1b98 Binary files /dev/null and b/Resources/Textures/_White/Wizard/Effects/blood.rsi/blood.png differ diff --git a/Resources/Textures/_White/Wizard/Effects/blood.rsi/meta.json b/Resources/Textures/_White/Wizard/Effects/blood.rsi/meta.json new file mode 100644 index 00000000000..7a642eb7d16 --- /dev/null +++ b/Resources/Textures/_White/Wizard/Effects/blood.rsi/meta.json @@ -0,0 +1,14 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from baystation12 at https://github.com/Baystation12/Baystation12 at commit 869b8c5383f45d3ca64ccc17a80609f794bc64db", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "blood" + } + ] +} diff --git a/Resources/Textures/_White/Wizard/Effects/effects.rsi/electricity.png b/Resources/Textures/_White/Wizard/Effects/effects.rsi/electricity.png new file mode 100644 index 00000000000..86ef945d596 Binary files /dev/null and b/Resources/Textures/_White/Wizard/Effects/effects.rsi/electricity.png differ diff --git a/Resources/Textures/_White/Wizard/Effects/effects.rsi/highfreq_slash.png b/Resources/Textures/_White/Wizard/Effects/effects.rsi/highfreq_slash.png new file mode 100644 index 00000000000..de601c03aae Binary files /dev/null and b/Resources/Textures/_White/Wizard/Effects/effects.rsi/highfreq_slash.png differ diff --git a/Resources/Textures/_White/Wizard/Effects/effects.rsi/ice_cube.png b/Resources/Textures/_White/Wizard/Effects/effects.rsi/ice_cube.png new file mode 100644 index 00000000000..4fef9f92e0a Binary files /dev/null and b/Resources/Textures/_White/Wizard/Effects/effects.rsi/ice_cube.png differ diff --git a/Resources/Textures/_White/Wizard/Effects/effects.rsi/marker.png b/Resources/Textures/_White/Wizard/Effects/effects.rsi/marker.png new file mode 100644 index 00000000000..6d4e9cf865f Binary files /dev/null and b/Resources/Textures/_White/Wizard/Effects/effects.rsi/marker.png differ diff --git a/Resources/Textures/_White/Wizard/Effects/effects.rsi/meta.json b/Resources/Textures/_White/Wizard/Effects/effects.rsi/meta.json new file mode 100644 index 00000000000..6de8ecda6c7 --- /dev/null +++ b/Resources/Textures/_White/Wizard/Effects/effects.rsi/meta.json @@ -0,0 +1,146 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at https://github.com/tgstation/tgstation/commit/80ab61c8c7741e1d95e5f168357a9e6e61b38f2c. temporal_slash recolored by Aviu00", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "temporal_slash" + }, + { + "name": "highfreq_slash" + }, + { + "name": "ice_cube" + }, + { + "name": "shield-old", + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1 + ] + ] + }, + { + "name": "sparks", + "directions": 4, + "delays": [ + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 50 + ], + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 50 + ], + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 50 + ], + [ + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 0.1, + 50 + ] + ] + }, + { + "name": "marker", + "delays": [ + [ + 1, + 1 + ] + ] + }, + { + "name": "electricity", + "delays": [ + [ + 0.1, + 0.1, + 1.5, + 0.1, + 0.1, + 1.5, + 0.1, + 0.1, + 1.5, + 0.1, + 0.1, + 1.5 + ] + ] + }, + { + "name": "shieldsparkles", + "directions": 4, + "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 + ] + ] + } + ] +} diff --git a/Resources/Textures/_White/Wizard/Effects/effects.rsi/shield-old.png b/Resources/Textures/_White/Wizard/Effects/effects.rsi/shield-old.png new file mode 100644 index 00000000000..0a3ff03f459 Binary files /dev/null and b/Resources/Textures/_White/Wizard/Effects/effects.rsi/shield-old.png differ diff --git a/Resources/Textures/_White/Wizard/Effects/effects.rsi/shieldsparkles.png b/Resources/Textures/_White/Wizard/Effects/effects.rsi/shieldsparkles.png new file mode 100644 index 00000000000..bfdebc3649f Binary files /dev/null and b/Resources/Textures/_White/Wizard/Effects/effects.rsi/shieldsparkles.png differ diff --git a/Resources/Textures/_White/Wizard/Effects/effects.rsi/sparks.png b/Resources/Textures/_White/Wizard/Effects/effects.rsi/sparks.png new file mode 100644 index 00000000000..44c08e50930 Binary files /dev/null and b/Resources/Textures/_White/Wizard/Effects/effects.rsi/sparks.png differ diff --git a/Resources/Textures/_White/Wizard/Effects/effects.rsi/temporal_slash.png b/Resources/Textures/_White/Wizard/Effects/effects.rsi/temporal_slash.png new file mode 100644 index 00000000000..657c2543407 Binary files /dev/null and b/Resources/Textures/_White/Wizard/Effects/effects.rsi/temporal_slash.png differ diff --git a/Resources/Textures/_White/Wizard/Effects/effects160x160.rsi/meta.json b/Resources/Textures/_White/Wizard/Effects/effects160x160.rsi/meta.json new file mode 100644 index 00000000000..e6b111776e2 --- /dev/null +++ b/Resources/Textures/_White/Wizard/Effects/effects160x160.rsi/meta.json @@ -0,0 +1,37 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at https://github.com/tgstation/tgstation/commit/80ab61c8c7741e1d95e5f168357a9e6e61b38f2c", + "size": { + "x": 160, + "y": 160 + }, + "states": [ + { + "name": "time", + "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 + ] + ] + } + ] +} diff --git a/Resources/Textures/_White/Wizard/Effects/effects160x160.rsi/time.png b/Resources/Textures/_White/Wizard/Effects/effects160x160.rsi/time.png new file mode 100644 index 00000000000..573ee0a165a Binary files /dev/null and b/Resources/Textures/_White/Wizard/Effects/effects160x160.rsi/time.png differ diff --git a/Resources/Textures/_Goobstation/Wizard/Objects/scroll.rsi/equipped-BELT.png b/Resources/Textures/_White/Wizard/Objects/scroll.rsi/equipped-BELT.png similarity index 100% rename from Resources/Textures/_Goobstation/Wizard/Objects/scroll.rsi/equipped-BELT.png rename to Resources/Textures/_White/Wizard/Objects/scroll.rsi/equipped-BELT.png diff --git a/Resources/Textures/_Goobstation/Wizard/Objects/scroll.rsi/inhand-left.png b/Resources/Textures/_White/Wizard/Objects/scroll.rsi/inhand-left.png similarity index 100% rename from Resources/Textures/_Goobstation/Wizard/Objects/scroll.rsi/inhand-left.png rename to Resources/Textures/_White/Wizard/Objects/scroll.rsi/inhand-left.png diff --git a/Resources/Textures/_Goobstation/Wizard/Objects/scroll.rsi/inhand-right.png b/Resources/Textures/_White/Wizard/Objects/scroll.rsi/inhand-right.png similarity index 100% rename from Resources/Textures/_Goobstation/Wizard/Objects/scroll.rsi/inhand-right.png rename to Resources/Textures/_White/Wizard/Objects/scroll.rsi/inhand-right.png diff --git a/Resources/Textures/_Goobstation/Wizard/Objects/scroll.rsi/meta.json b/Resources/Textures/_White/Wizard/Objects/scroll.rsi/meta.json similarity index 100% rename from Resources/Textures/_Goobstation/Wizard/Objects/scroll.rsi/meta.json rename to Resources/Textures/_White/Wizard/Objects/scroll.rsi/meta.json diff --git a/Resources/Textures/_Goobstation/Wizard/Objects/scroll.rsi/scroll.png b/Resources/Textures/_White/Wizard/Objects/scroll.rsi/scroll.png similarity index 100% rename from Resources/Textures/_Goobstation/Wizard/Objects/scroll.rsi/scroll.png rename to Resources/Textures/_White/Wizard/Objects/scroll.rsi/scroll.png diff --git a/Resources/Textures/_Goobstation/Wizard/Objects/scroll.rsi/scroll2.png b/Resources/Textures/_White/Wizard/Objects/scroll.rsi/scroll2.png similarity index 100% rename from Resources/Textures/_Goobstation/Wizard/Objects/scroll.rsi/scroll2.png rename to Resources/Textures/_White/Wizard/Objects/scroll.rsi/scroll2.png diff --git a/Resources/Textures/_White/Wizard/Shaders/ethereal_jaunt.swsl b/Resources/Textures/_White/Wizard/Shaders/ethereal_jaunt.swsl new file mode 100644 index 00000000000..c11464c922e --- /dev/null +++ b/Resources/Textures/_White/Wizard/Shaders/ethereal_jaunt.swsl @@ -0,0 +1,43 @@ +// Modified stealth shader + +light_mode unshaded; + +uniform mediump vec2 reference; +uniform bool use_reference; +uniform lowp float time_scale; +uniform lowp float blink_rate; + +const lowp float visibility = 0.1; +const mediump float distance_scale = 0.008; + +mediump mat2 rotate(mediump float t) +{ + return mat2(cos(t), -sin(t), sin(t), cos(t)); +} + +void fragment() { + + highp vec4 sprite = zTexture(UV); + + if (sprite.a == 0.0) { + discard; + } + + mediump vec2 center = reference; + + if (use_reference == false) { + center = 1.0 / SCREEN_PIXEL_SIZE * 0.5; + } + + highp vec2 coords = (FRAGCOORD.xy + center) * distance_scale; + coords *= rotate(length(center - FRAGCOORD.xy) * distance_scale); + highp float w = sin(TIME + (coords.x + coords.y + 2.0*sin(TIME*time_scale) * sin(TIME*time_scale + coords.x - coords.y))); + + w = mix(w, clamp(sin(TIME * blink_rate), -1.0, 0.0), 0.5); + w = clamp(w, 0.0, 1.0); + + highp vec4 background = vec4(w,w,w,1.0); + + COLOR.xyz = mix(background.xyz, sprite.xyz, visibility); + COLOR.a = 1.0; +} diff --git a/Resources/Textures/_White/Wizard/StatusIcons/10x10.rsi/apprentice.png b/Resources/Textures/_White/Wizard/StatusIcons/10x10.rsi/apprentice.png new file mode 100644 index 00000000000..ce26590f788 Binary files /dev/null and b/Resources/Textures/_White/Wizard/StatusIcons/10x10.rsi/apprentice.png differ diff --git a/Resources/Textures/_White/Wizard/StatusIcons/10x10.rsi/meta.json b/Resources/Textures/_White/Wizard/StatusIcons/10x10.rsi/meta.json new file mode 100644 index 00000000000..aaea08f9dd2 --- /dev/null +++ b/Resources/Textures/_White/Wizard/StatusIcons/10x10.rsi/meta.json @@ -0,0 +1,17 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from tgstation at https://github.com/tgstation/tgstation/commit/80ab61c8c7741e1d95e5f168357a9e6e61b38f2c", + "size": { + "x": 10, + "y": 10 + }, + "states": [ + { + "name": "wizard" + }, + { + "name": "apprentice" + } + ] +} diff --git a/Resources/Textures/_White/Wizard/StatusIcons/10x10.rsi/wizard.png b/Resources/Textures/_White/Wizard/StatusIcons/10x10.rsi/wizard.png new file mode 100644 index 00000000000..40fce4216f4 Binary files /dev/null and b/Resources/Textures/_White/Wizard/StatusIcons/10x10.rsi/wizard.png differ diff --git a/Resources/Textures/_White/Wizard/actions.rsi/arcane_barrage.png b/Resources/Textures/_White/Wizard/actions.rsi/arcane_barrage.png new file mode 100644 index 00000000000..f33cc135155 Binary files /dev/null and b/Resources/Textures/_White/Wizard/actions.rsi/arcane_barrage.png differ diff --git a/Resources/Textures/_White/Wizard/actions.rsi/art_summon.png b/Resources/Textures/_White/Wizard/actions.rsi/art_summon.png new file mode 100644 index 00000000000..d854aa8f95e Binary files /dev/null and b/Resources/Textures/_White/Wizard/actions.rsi/art_summon.png differ diff --git a/Resources/Textures/_White/Wizard/actions.rsi/barn.png b/Resources/Textures/_White/Wizard/actions.rsi/barn.png new file mode 100644 index 00000000000..313432c6d81 Binary files /dev/null and b/Resources/Textures/_White/Wizard/actions.rsi/barn.png differ diff --git a/Resources/Textures/_White/Wizard/actions.rsi/bee.png b/Resources/Textures/_White/Wizard/actions.rsi/bee.png new file mode 100644 index 00000000000..1adcef9c96d Binary files /dev/null and b/Resources/Textures/_White/Wizard/actions.rsi/bee.png differ diff --git a/Resources/Textures/_White/Wizard/actions.rsi/blind.png b/Resources/Textures/_White/Wizard/actions.rsi/blind.png new file mode 100644 index 00000000000..01db5929af3 Binary files /dev/null and b/Resources/Textures/_White/Wizard/actions.rsi/blind.png differ diff --git a/Resources/Textures/_White/Wizard/actions.rsi/blink.png b/Resources/Textures/_White/Wizard/actions.rsi/blink.png new file mode 100644 index 00000000000..40438cca37e Binary files /dev/null and b/Resources/Textures/_White/Wizard/actions.rsi/blink.png differ diff --git a/Resources/Textures/_White/Wizard/actions.rsi/bolt_action.png b/Resources/Textures/_White/Wizard/actions.rsi/bolt_action.png new file mode 100644 index 00000000000..577958da94e Binary files /dev/null and b/Resources/Textures/_White/Wizard/actions.rsi/bolt_action.png differ diff --git a/Resources/Textures/_White/Wizard/actions.rsi/charge.png b/Resources/Textures/_White/Wizard/actions.rsi/charge.png new file mode 100644 index 00000000000..45ff4564707 Binary files /dev/null and b/Resources/Textures/_White/Wizard/actions.rsi/charge.png differ diff --git a/Resources/Textures/_White/Wizard/actions.rsi/chuuni.png b/Resources/Textures/_White/Wizard/actions.rsi/chuuni.png new file mode 100644 index 00000000000..324c4a29a44 Binary files /dev/null and b/Resources/Textures/_White/Wizard/actions.rsi/chuuni.png differ diff --git a/Resources/Textures/_White/Wizard/actions.rsi/clown.png b/Resources/Textures/_White/Wizard/actions.rsi/clown.png new file mode 100644 index 00000000000..16c1cb8d4ef Binary files /dev/null and b/Resources/Textures/_White/Wizard/actions.rsi/clown.png differ diff --git a/Resources/Textures/_White/Wizard/actions.rsi/cluwne.png b/Resources/Textures/_White/Wizard/actions.rsi/cluwne.png new file mode 100644 index 00000000000..022751d99b4 Binary files /dev/null and b/Resources/Textures/_White/Wizard/actions.rsi/cluwne.png differ diff --git a/Resources/Textures/_White/Wizard/actions.rsi/corpse_explosion.png b/Resources/Textures/_White/Wizard/actions.rsi/corpse_explosion.png new file mode 100644 index 00000000000..23295d2265b Binary files /dev/null and b/Resources/Textures/_White/Wizard/actions.rsi/corpse_explosion.png differ diff --git a/Resources/Textures/_White/Wizard/actions.rsi/curseofbyond.png b/Resources/Textures/_White/Wizard/actions.rsi/curseofbyond.png new file mode 100644 index 00000000000..60b48badbc1 Binary files /dev/null and b/Resources/Textures/_White/Wizard/actions.rsi/curseofbyond.png differ diff --git a/Resources/Textures/_White/Wizard/actions.rsi/emp.png b/Resources/Textures/_White/Wizard/actions.rsi/emp.png new file mode 100644 index 00000000000..73b33c825d9 Binary files /dev/null and b/Resources/Textures/_White/Wizard/actions.rsi/emp.png differ diff --git a/Resources/Textures/_White/Wizard/actions.rsi/exsanguinating_strike.png b/Resources/Textures/_White/Wizard/actions.rsi/exsanguinating_strike.png new file mode 100644 index 00000000000..fd94c017fb0 Binary files /dev/null and b/Resources/Textures/_White/Wizard/actions.rsi/exsanguinating_strike.png differ diff --git a/Resources/Textures/_White/Wizard/actions.rsi/fireball.png b/Resources/Textures/_White/Wizard/actions.rsi/fireball.png new file mode 100644 index 00000000000..be29cb42a33 Binary files /dev/null and b/Resources/Textures/_White/Wizard/actions.rsi/fireball.png differ diff --git a/Resources/Textures/_White/Wizard/actions.rsi/gib.png b/Resources/Textures/_White/Wizard/actions.rsi/gib.png new file mode 100644 index 00000000000..52ae7837139 Binary files /dev/null and b/Resources/Textures/_White/Wizard/actions.rsi/gib.png differ diff --git a/Resources/Textures/_White/Wizard/actions.rsi/immrod.png b/Resources/Textures/_White/Wizard/actions.rsi/immrod.png new file mode 100644 index 00000000000..3cfec0c993d Binary files /dev/null and b/Resources/Textures/_White/Wizard/actions.rsi/immrod.png differ diff --git a/Resources/Textures/_White/Wizard/actions.rsi/jaunt.png b/Resources/Textures/_White/Wizard/actions.rsi/jaunt.png new file mode 100644 index 00000000000..81a7ea7f7be Binary files /dev/null and b/Resources/Textures/_White/Wizard/actions.rsi/jaunt.png differ diff --git a/Resources/Textures/_White/Wizard/actions.rsi/knock.png b/Resources/Textures/_White/Wizard/actions.rsi/knock.png new file mode 100644 index 00000000000..b680d347125 Binary files /dev/null and b/Resources/Textures/_White/Wizard/actions.rsi/knock.png differ diff --git a/Resources/Textures/_White/Wizard/actions.rsi/lightning.png b/Resources/Textures/_White/Wizard/actions.rsi/lightning.png new file mode 100644 index 00000000000..ec0b7ffae3e Binary files /dev/null and b/Resources/Textures/_White/Wizard/actions.rsi/lightning.png differ diff --git a/Resources/Textures/_White/Wizard/actions.rsi/meta.json b/Resources/Textures/_White/Wizard/actions.rsi/meta.json new file mode 100644 index 00000000000..390399fb849 --- /dev/null +++ b/Resources/Textures/_White/Wizard/actions.rsi/meta.json @@ -0,0 +1,143 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Taken from paradise station at https://github.com/ParadiseSS13/Paradise/commit/e3bc7e3fd7787cc772353295a56f087fc1c37312. lightning taken from https://github.com/Citadel-Station-13/Citadel-Station-13/commit/06689416691093474d600924242f69eb7d223f3e and modified. toolbox Taken from baystation at commit https://github.com/Baystation12/Baystation12/commit/a929584d9db319eb7484113221be25cfa1d5dc09 and modified. art_summon, return_to_monkey, spellcard, exsanguinating_strike, scream_for_me, bee, chuuni, swap, soultap, thrown_lightning, the_traps and arcane_barrage taken from tgstation at https://github.com/tgstation/tgstation/commit/80ab61c8c7741e1d95e5f168357a9e6e61b38f2c and modified", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "art_summon" + }, + { + "name": "return_to_monkey" + }, + { + "name": "jaunt" + }, + { + "name": "mindswap" + }, + { + "name": "gib" + }, + { + "name": "blink" + }, + { + "name": "charge" + }, + { + "name": "knock" + }, + { + "name": "shield_greater" + }, + { + "name": "fireball" + }, + { + "name": "immrod" + }, + { + "name": "thrown_lightning" + }, + { + "name": "soultap" + }, + { + "name": "swap" + }, + { + "name": "chuuni" + }, + { + "name": "exsanguinating_strike" + }, + { + "name": "monkey" + }, + { + "name": "bee" + }, + { + "name": "the_traps" + }, + { + "name": "teleport" + }, + { + "name": "summons" + }, + { + "name": "scream_for_me" + }, + { + "name": "barn" + }, + { + "name": "bolt_action" + }, + { + "name": "arcane_barrage" + }, + { + "name": "spellcard" + }, + { + "name": "toolbox" + }, + { + "name": "lightning" + }, + { + "name": "tesla" + }, + { + "name": "mutate" + }, + { + "name": "skeleton" + }, + { + "name": "blind" + }, + { + "name": "corpse_explosion" + }, + { + "name": "time" + }, + { + "name": "repulse" + }, + { + "name": "smoke" + }, + { + "name": "clown" + }, + { + "name": "mime" + }, + { + "name": "cluwne" + }, + { + "name": "missile" + }, + { + "name": "emp" + }, + { + "name": "tile" + }, + { + "name": "tileglobal" + }, + { + "name": "curseofbyond" + } + ] +} diff --git a/Resources/Textures/_White/Wizard/actions.rsi/mime.png b/Resources/Textures/_White/Wizard/actions.rsi/mime.png new file mode 100644 index 00000000000..f183a093f50 Binary files /dev/null and b/Resources/Textures/_White/Wizard/actions.rsi/mime.png differ diff --git a/Resources/Textures/_White/Wizard/actions.rsi/mindswap.png b/Resources/Textures/_White/Wizard/actions.rsi/mindswap.png new file mode 100644 index 00000000000..5ae80ea3160 Binary files /dev/null and b/Resources/Textures/_White/Wizard/actions.rsi/mindswap.png differ diff --git a/Resources/Textures/_White/Wizard/actions.rsi/missile.png b/Resources/Textures/_White/Wizard/actions.rsi/missile.png new file mode 100644 index 00000000000..e1b2cdafc5a Binary files /dev/null and b/Resources/Textures/_White/Wizard/actions.rsi/missile.png differ diff --git a/Resources/Textures/_White/Wizard/actions.rsi/monkey.png b/Resources/Textures/_White/Wizard/actions.rsi/monkey.png new file mode 100644 index 00000000000..19dea7a250b Binary files /dev/null and b/Resources/Textures/_White/Wizard/actions.rsi/monkey.png differ diff --git a/Resources/Textures/_White/Wizard/actions.rsi/mutate.png b/Resources/Textures/_White/Wizard/actions.rsi/mutate.png new file mode 100644 index 00000000000..2127c639f16 Binary files /dev/null and b/Resources/Textures/_White/Wizard/actions.rsi/mutate.png differ diff --git a/Resources/Textures/_White/Wizard/actions.rsi/repulse.png b/Resources/Textures/_White/Wizard/actions.rsi/repulse.png new file mode 100644 index 00000000000..b0f640d2c25 Binary files /dev/null and b/Resources/Textures/_White/Wizard/actions.rsi/repulse.png differ diff --git a/Resources/Textures/_White/Wizard/actions.rsi/return_to_monkey.png b/Resources/Textures/_White/Wizard/actions.rsi/return_to_monkey.png new file mode 100644 index 00000000000..1c112fefc5c Binary files /dev/null and b/Resources/Textures/_White/Wizard/actions.rsi/return_to_monkey.png differ diff --git a/Resources/Textures/_White/Wizard/actions.rsi/scream_for_me.png b/Resources/Textures/_White/Wizard/actions.rsi/scream_for_me.png new file mode 100644 index 00000000000..98609d4c072 Binary files /dev/null and b/Resources/Textures/_White/Wizard/actions.rsi/scream_for_me.png differ diff --git a/Resources/Textures/_White/Wizard/actions.rsi/shield_greater.png b/Resources/Textures/_White/Wizard/actions.rsi/shield_greater.png new file mode 100644 index 00000000000..08fbfdb5d18 Binary files /dev/null and b/Resources/Textures/_White/Wizard/actions.rsi/shield_greater.png differ diff --git a/Resources/Textures/_White/Wizard/actions.rsi/skeleton.png b/Resources/Textures/_White/Wizard/actions.rsi/skeleton.png new file mode 100644 index 00000000000..8dee46b53ae Binary files /dev/null and b/Resources/Textures/_White/Wizard/actions.rsi/skeleton.png differ diff --git a/Resources/Textures/_White/Wizard/actions.rsi/smoke.png b/Resources/Textures/_White/Wizard/actions.rsi/smoke.png new file mode 100644 index 00000000000..4afd8dc5d58 Binary files /dev/null and b/Resources/Textures/_White/Wizard/actions.rsi/smoke.png differ diff --git a/Resources/Textures/_White/Wizard/actions.rsi/soultap.png b/Resources/Textures/_White/Wizard/actions.rsi/soultap.png new file mode 100644 index 00000000000..e65c5d7bf49 Binary files /dev/null and b/Resources/Textures/_White/Wizard/actions.rsi/soultap.png differ diff --git a/Resources/Textures/_White/Wizard/actions.rsi/spellcard.png b/Resources/Textures/_White/Wizard/actions.rsi/spellcard.png new file mode 100644 index 00000000000..7bfa7387f7c Binary files /dev/null and b/Resources/Textures/_White/Wizard/actions.rsi/spellcard.png differ diff --git a/Resources/Textures/_White/Wizard/actions.rsi/summons.png b/Resources/Textures/_White/Wizard/actions.rsi/summons.png new file mode 100644 index 00000000000..d1f1a065508 Binary files /dev/null and b/Resources/Textures/_White/Wizard/actions.rsi/summons.png differ diff --git a/Resources/Textures/_White/Wizard/actions.rsi/swap.png b/Resources/Textures/_White/Wizard/actions.rsi/swap.png new file mode 100644 index 00000000000..5e96f7455f0 Binary files /dev/null and b/Resources/Textures/_White/Wizard/actions.rsi/swap.png differ diff --git a/Resources/Textures/_White/Wizard/actions.rsi/teleport.png b/Resources/Textures/_White/Wizard/actions.rsi/teleport.png new file mode 100644 index 00000000000..819e376d50e Binary files /dev/null and b/Resources/Textures/_White/Wizard/actions.rsi/teleport.png differ diff --git a/Resources/Textures/_White/Wizard/actions.rsi/tesla.png b/Resources/Textures/_White/Wizard/actions.rsi/tesla.png new file mode 100644 index 00000000000..b13a6900174 Binary files /dev/null and b/Resources/Textures/_White/Wizard/actions.rsi/tesla.png differ diff --git a/Resources/Textures/_White/Wizard/actions.rsi/the_traps.png b/Resources/Textures/_White/Wizard/actions.rsi/the_traps.png new file mode 100644 index 00000000000..e9c3d4ffe09 Binary files /dev/null and b/Resources/Textures/_White/Wizard/actions.rsi/the_traps.png differ diff --git a/Resources/Textures/_White/Wizard/actions.rsi/thrown_lightning.png b/Resources/Textures/_White/Wizard/actions.rsi/thrown_lightning.png new file mode 100644 index 00000000000..0b2bdb967e4 Binary files /dev/null and b/Resources/Textures/_White/Wizard/actions.rsi/thrown_lightning.png differ diff --git a/Resources/Textures/_White/Wizard/actions.rsi/tile.png b/Resources/Textures/_White/Wizard/actions.rsi/tile.png new file mode 100644 index 00000000000..90b2cdd080e Binary files /dev/null and b/Resources/Textures/_White/Wizard/actions.rsi/tile.png differ diff --git a/Resources/Textures/_White/Wizard/actions.rsi/tileglobal.png b/Resources/Textures/_White/Wizard/actions.rsi/tileglobal.png new file mode 100644 index 00000000000..575b0d3ce79 Binary files /dev/null and b/Resources/Textures/_White/Wizard/actions.rsi/tileglobal.png differ diff --git a/Resources/Textures/_White/Wizard/actions.rsi/time.png b/Resources/Textures/_White/Wizard/actions.rsi/time.png new file mode 100644 index 00000000000..a63d677fdde Binary files /dev/null and b/Resources/Textures/_White/Wizard/actions.rsi/time.png differ diff --git a/Resources/Textures/_White/Wizard/actions.rsi/toolbox.png b/Resources/Textures/_White/Wizard/actions.rsi/toolbox.png new file mode 100644 index 00000000000..804ea5a04e6 Binary files /dev/null and b/Resources/Textures/_White/Wizard/actions.rsi/toolbox.png differ