]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
Revert "Weapon Reflection Movement Mechanic (#27219)" (#29326)
authormetalgearsloth <31366439+metalgearsloth@users.noreply.github.com>
Sun, 23 Jun 2024 02:16:08 +0000 (12:16 +1000)
committerGitHub <noreply@github.com>
Sun, 23 Jun 2024 02:16:08 +0000 (22:16 -0400)
* Revert "Weapon Reflection Movement Mechanic (#27219)"

This reverts commit b90373356e7f4f0eee693732964eac9c9eaa1f02.

# Conflicts:
# Content.Shared/Alert/AlertType.cs
# Content.Shared/Weapons/Reflect/ReflectSystem.cs

* Add myself to codeowners

* Add myself to codeowners

* Also the alerts

13 files changed:
.github/CODEOWNERS
Content.Shared/Weapons/Reflect/ReflectComponent.cs
Content.Shared/Weapons/Reflect/ReflectSystem.cs
Resources/Locale/en-US/alerts/alerts.ftl
Resources/Prototypes/Alerts/alerts.yml
Resources/Prototypes/Anomaly/behaviours.yml
Resources/Prototypes/Entities/Clothing/OuterClothing/armor.yml
Resources/Prototypes/Entities/Mobs/NPCs/hellspawn.yml
Resources/Prototypes/Entities/Objects/Shields/shields.yml
Resources/Prototypes/Entities/Objects/Weapons/Melee/e_sword.yml
Resources/Prototypes/Entities/Objects/Weapons/Melee/sword.yml
Resources/Textures/Interface/Alerts/deflecting.rsi/deflecting0.png [deleted file]
Resources/Textures/Interface/Alerts/deflecting.rsi/meta.json [deleted file]

index da9d4d693a81292bd2624867a8cc6b84ce79d53d..2b6d556117ef65faa776ade19dc01bd8665d4ce7 100644 (file)
 #Jezi
 /Content.*/Medical @Jezithyr
 /Content.*/Body @Jezithyr
+
+# Sloth
+/Content.*/Audio @metalgearsloth
+/Content.*/Movement @metalgearsloth
+/Content.*/NPC @metalgearsloth
+/Content.*/Shuttles @metalgearsloth
+/Content.*/Weapons @metalgearsloth
index 5d8432ac776c3cc0002571b0dff3581716e4a113..8e7b8975d9d1b128ac21a7213c351ee55863e880 100644 (file)
@@ -21,42 +21,17 @@ public sealed partial class ReflectComponent : Component
     [ViewVariables(VVAccess.ReadWrite), DataField("reflects")]
     public ReflectType Reflects = ReflectType.Energy | ReflectType.NonEnergy;
 
-    [DataField("spread"), ViewVariables(VVAccess.ReadWrite), AutoNetworkedField]
-    public Angle Spread = Angle.FromDegrees(45);
-
-    [DataField("soundOnReflect")]
-    public SoundSpecifier? SoundOnReflect = new SoundPathSpecifier("/Audio/Weapons/Guns/Hits/laser_sear_wall.ogg");
-
     /// <summary>
-    /// Is the deflection an innate power or something actively maintained? If true, this component grants a flat
-    /// deflection chance rather than a chance that degrades when moving/weightless/stunned/etc.
-    /// </summary>
-    [DataField]
-    public bool Innate = false;
-
-    /// <summary>
-    /// Maximum probability for a projectile to be reflected.
+    /// Probability for a projectile to be reflected.
     /// </summary>
     [DataField("reflectProb"), ViewVariables(VVAccess.ReadWrite), AutoNetworkedField]
     public float ReflectProb = 0.25f;
 
-    /// <summary>
-    /// The maximum velocity a wielder can move at before losing effectiveness.
-    /// </summary>
-    [DataField]
-    public float VelocityBeforeNotMaxProb = 2.5f; // Walking speed for a human. Suitable for a weightless deflector like an e-sword.
-
-    /// <summary>
-    /// The velocity a wielder has to be moving at to use the minimum effectiveness value.
-    /// </summary>
-    [DataField]
-    public float VelocityBeforeMinProb = 4.5f; // Sprinting speed for a human. Suitable for a weightless deflector like an e-sword.
+    [DataField("spread"), ViewVariables(VVAccess.ReadWrite), AutoNetworkedField]
+    public Angle Spread = Angle.FromDegrees(45);
 
-    /// <summary>
-    /// Minimum probability for a projectile to be reflected.
-    /// </summary>
-    [DataField]
-    public float MinReflectProb = 0.1f;
+    [DataField("soundOnReflect")]
+    public SoundSpecifier? SoundOnReflect = new SoundPathSpecifier("/Audio/Weapons/Guns/Hits/laser_sear_wall.ogg");
 }
 
 [Flags]
index 9b89be6202ad18b49e12d1781d54784bf46a2348..7a2e733bf7c771307d25bedfb3e6ec85004d8763 100644 (file)
@@ -3,18 +3,16 @@ using System.Numerics;
 using Content.Shared.Administration.Logs;
 using Content.Shared.Alert;
 using Content.Shared.Audio;
-using Content.Shared.Damage.Components;
 using Content.Shared.Database;
-using Content.Shared.Gravity;
 using Content.Shared.Hands;
 using Content.Shared.Inventory;
 using Content.Shared.Inventory.Events;
 using Content.Shared.Item.ItemToggle.Components;
 using Content.Shared.Popups;
 using Content.Shared.Projectiles;
-using Content.Shared.Standing;
 using Content.Shared.Weapons.Ranged.Components;
 using Content.Shared.Weapons.Ranged.Events;
+using Robust.Shared.Audio;
 using Robust.Shared.Audio.Systems;
 using Robust.Shared.Network;
 using Robust.Shared.Physics.Components;
@@ -38,134 +36,73 @@ public sealed class ReflectSystem : EntitySystem
     [Dependency] private readonly SharedAudioSystem _audio = default!;
     [Dependency] private readonly SharedTransformSystem _transform = default!;
     [Dependency] private readonly InventorySystem _inventorySystem = default!;
-    [Dependency] private readonly SharedGravitySystem _gravity = default!;
-    [Dependency] private readonly StandingStateSystem _standing = default!;
-    [Dependency] private readonly AlertsSystem _alerts = default!;
-
-    [ValidatePrototypeId<AlertPrototype>]
-    private const string DeflectingAlert = "Deflecting";
 
     public override void Initialize()
     {
         base.Initialize();
 
-        SubscribeLocalEvent<ReflectComponent, ProjectileReflectAttemptEvent>(OnObjectReflectProjectileAttempt);
-        SubscribeLocalEvent<ReflectComponent, HitScanReflectAttemptEvent>(OnObjectReflectHitscanAttempt);
+        SubscribeLocalEvent<ReflectComponent, ProjectileReflectAttemptEvent>(OnReflectCollide);
+        SubscribeLocalEvent<ReflectComponent, HitScanReflectAttemptEvent>(OnReflectHitscan);
         SubscribeLocalEvent<ReflectComponent, GotEquippedEvent>(OnReflectEquipped);
         SubscribeLocalEvent<ReflectComponent, GotUnequippedEvent>(OnReflectUnequipped);
         SubscribeLocalEvent<ReflectComponent, GotEquippedHandEvent>(OnReflectHandEquipped);
         SubscribeLocalEvent<ReflectComponent, GotUnequippedHandEvent>(OnReflectHandUnequipped);
         SubscribeLocalEvent<ReflectComponent, ItemToggledEvent>(OnToggleReflect);
 
-        SubscribeLocalEvent<ReflectUserComponent, ProjectileReflectAttemptEvent>(OnUserProjectileReflectAttempt);
-        SubscribeLocalEvent<ReflectUserComponent, HitScanReflectAttemptEvent>(OnUserHitscanReflectAttempt);
+        SubscribeLocalEvent<ReflectUserComponent, ProjectileReflectAttemptEvent>(OnReflectUserCollide);
+        SubscribeLocalEvent<ReflectUserComponent, HitScanReflectAttemptEvent>(OnReflectUserHitscan);
     }
 
-    private void OnUserHitscanReflectAttempt(Entity<ReflectUserComponent> user, ref HitScanReflectAttemptEvent args)
+    private void OnReflectUserHitscan(EntityUid uid, ReflectUserComponent component, ref HitScanReflectAttemptEvent args)
     {
         if (args.Reflected)
             return;
 
-        if (!UserCanReflect(user, out var bestReflectorUid))
-            return;
-
-        if (!TryReflectHitscan(user.Owner, bestReflectorUid.Value, args.Shooter, args.SourceItem, args.Direction, out var dir))
-            return;
-
-        args.Direction = dir.Value;
-        args.Reflected = true;
-    }
-
-    private void OnUserProjectileReflectAttempt(Entity<ReflectUserComponent> user, ref ProjectileReflectAttemptEvent args)
-    {
-        if (args.Cancelled)
-            return;
-
-        if (!TryComp<ReflectiveComponent>(args.ProjUid, out var reflectiveComponent))
-            return;
-
-        if (!UserCanReflect(user, out var bestReflectorUid, (args.ProjUid, reflectiveComponent)))
-            return;
-
-        if (!TryReflectProjectile(user, bestReflectorUid.Value, (args.ProjUid, args.Component)))
-            return;
+        foreach (var ent in _inventorySystem.GetHandOrInventoryEntities(uid, SlotFlags.All & ~SlotFlags.POCKET))
+        {
+            if (!TryReflectHitscan(uid, ent, args.Shooter, args.SourceItem, args.Direction, out var dir))
+                continue;
 
-        args.Cancelled = true;
+            args.Direction = dir.Value;
+            args.Reflected = true;
+            break;
+        }
     }
 
-    private void OnObjectReflectHitscanAttempt(Entity<ReflectComponent> obj, ref HitScanReflectAttemptEvent args)
+    private void OnReflectUserCollide(EntityUid uid, ReflectUserComponent component, ref ProjectileReflectAttemptEvent args)
     {
-        if (args.Reflected || (obj.Comp.Reflects & args.Reflective) == 0x0)
-            return;
-
-        if (!TryReflectHitscan(obj, obj, args.Shooter, args.SourceItem, args.Direction, out var dir))
-            return;
+        foreach (var ent in _inventorySystem.GetHandOrInventoryEntities(uid, SlotFlags.All & ~SlotFlags.POCKET))
+        {
+            if (!TryReflectProjectile(uid, ent, args.ProjUid))
+                continue;
 
-        args.Direction = dir.Value;
-        args.Reflected = true;
+            args.Cancelled = true;
+            break;
+        }
     }
 
-    private void OnObjectReflectProjectileAttempt(Entity<ReflectComponent> obj, ref ProjectileReflectAttemptEvent args)
+    private void OnReflectCollide(EntityUid uid, ReflectComponent component, ref ProjectileReflectAttemptEvent args)
     {
         if (args.Cancelled)
             return;
 
-        if (!TryReflectProjectile(obj, obj, (args.ProjUid, args.Component)))
-            return;
-
-        args.Cancelled = true;
+        if (TryReflectProjectile(uid, uid, args.ProjUid, reflect: component))
+            args.Cancelled = true;
     }
 
-    /// <summary>
-    /// Can a user reflect something that's hit them? Returns true if so, and the best reflector available in the user's equipment.
-    /// </summary>
-    private bool UserCanReflect(Entity<ReflectUserComponent> user, [NotNullWhen(true)] out Entity<ReflectComponent>? bestReflector, Entity<ReflectiveComponent>? projectile = null)
+    private bool TryReflectProjectile(EntityUid user, EntityUid reflector, EntityUid projectile, ProjectileComponent? projectileComp = null, ReflectComponent? reflect = null)
     {
-        bestReflector = null;
-
-        foreach (var entityUid in _inventorySystem.GetHandOrInventoryEntities(user.Owner, SlotFlags.WITHOUT_POCKET))
-        {
-            if (!TryComp<ReflectComponent>(entityUid, out var comp))
-                continue;
-
-            if (!comp.Enabled)
-                continue;
-
-            if (bestReflector != null && bestReflector.Value.Comp.ReflectProb >= comp.ReflectProb)
-                continue;
-
-            if (projectile != null && (comp.Reflects & projectile.Value.Comp.Reflective) == 0x0)
-                continue;
-
-            bestReflector = (entityUid, comp);
-        }
-
-        return bestReflector != null;
-    }
-
-    private bool TryReflectProjectile(EntityUid user, Entity<ReflectComponent> reflector, Entity<ProjectileComponent> projectile)
-    {
-        if (
-            // Is it on?
-            !reflector.Comp.Enabled ||
-            // Is the projectile deflectable?
+        if (!Resolve(reflector, ref reflect, false) ||
+            !reflect.Enabled ||
             !TryComp<ReflectiveComponent>(projectile, out var reflective) ||
-            // Does the deflector deflect the type of projecitle?
-            (reflector.Comp.Reflects & reflective.Reflective) == 0x0 ||
-            // Is the projectile correctly set up with physics?
-            !TryComp<PhysicsComponent>(projectile, out var physics) ||
-            // If the user of the reflector is a mob with stamina, is it capable of deflecting?
-            TryComp<StaminaComponent>(user, out var staminaComponent) && staminaComponent.Critical ||
-            _standing.IsDown(reflector)
-        )
-            return false;
-
-        // If this dice roll fails, the shot isn't deflected
-        if (!_random.Prob(GetReflectChance(reflector)))
+            (reflect.Reflects & reflective.Reflective) == 0x0 ||
+            !_random.Prob(reflect.ReflectProb) ||
+            !TryComp<PhysicsComponent>(projectile, out var physics))
+        {
             return false;
+        }
 
-        // Below handles what happens after being deflected.
-        var rotation = _random.NextAngle(-reflector.Comp.Spread / 2, reflector.Comp.Spread / 2).Opposite();
+        var rotation = _random.NextAngle(-reflect.Spread / 2, reflect.Spread / 2).Opposite();
         var existingVelocity = _physics.GetMapLinearVelocity(projectile, component: physics);
         var relativeVelocity = existingVelocity - _physics.GetMapLinearVelocity(user);
         var newVelocity = rotation.RotateVec(relativeVelocity);
@@ -182,52 +119,63 @@ public sealed class ReflectSystem : EntitySystem
         if (_netManager.IsServer)
         {
             _popup.PopupEntity(Loc.GetString("reflect-shot"), user);
-            _audio.PlayPvs(reflector.Comp.SoundOnReflect, user, AudioHelpers.WithVariation(0.05f, _random));
+            _audio.PlayPvs(reflect.SoundOnReflect, user, AudioHelpers.WithVariation(0.05f, _random));
         }
 
-        _adminLogger.Add(LogType.BulletHit, LogImpact.Medium, $"{ToPrettyString(user)} reflected {ToPrettyString(projectile)} from {ToPrettyString(projectile.Comp.Weapon)} shot by {projectile.Comp.Shooter}");
+        if (Resolve(projectile, ref projectileComp, false))
+        {
+            _adminLogger.Add(LogType.BulletHit, LogImpact.Medium, $"{ToPrettyString(user)} reflected {ToPrettyString(projectile)} from {ToPrettyString(projectileComp.Weapon)} shot by {projectileComp.Shooter}");
 
-        projectile.Comp.Shooter = user;
-        projectile.Comp.Weapon = user;
-        Dirty(projectile);
+            projectileComp.Shooter = user;
+            projectileComp.Weapon = user;
+            Dirty(projectile, projectileComp);
+        }
+        else
+        {
+            _adminLogger.Add(LogType.BulletHit, LogImpact.Medium, $"{ToPrettyString(user)} reflected {ToPrettyString(projectile)}");
+        }
 
         return true;
     }
 
+    private void OnReflectHitscan(EntityUid uid, ReflectComponent component, ref HitScanReflectAttemptEvent args)
+    {
+        if (args.Reflected ||
+            (component.Reflects & args.Reflective) == 0x0)
+        {
+            return;
+        }
+
+        if (TryReflectHitscan(uid, uid, args.Shooter, args.SourceItem, args.Direction, out var dir))
+        {
+            args.Direction = dir.Value;
+            args.Reflected = true;
+        }
+    }
+
     private bool TryReflectHitscan(
         EntityUid user,
-        Entity<ReflectComponent> reflector,
+        EntityUid reflector,
         EntityUid? shooter,
         EntityUid shotSource,
         Vector2 direction,
         [NotNullWhen(true)] out Vector2? newDirection)
     {
-        if (
-            // Is the reflector enabled?
-            !reflector.Comp.Enabled ||
-            // If the user is a mob with stamina, is it capable of deflecting?
-            TryComp<StaminaComponent>(user, out var staminaComponent) && staminaComponent.Critical ||
-            _standing.IsDown(user))
+        if (!TryComp<ReflectComponent>(reflector, out var reflect) ||
+            !reflect.Enabled ||
+            !_random.Prob(reflect.ReflectProb))
         {
             newDirection = null;
             return false;
         }
 
-        // If this dice roll fails, the shot is not deflected.
-        if (!_random.Prob(GetReflectChance(reflector)))
-        {
-            newDirection = null;
-            return false;
-        }
-
-        // Below handles what happens after being deflected.
         if (_netManager.IsServer)
         {
             _popup.PopupEntity(Loc.GetString("reflect-shot"), user);
-            _audio.PlayPvs(reflector.Comp.SoundOnReflect, user, AudioHelpers.WithVariation(0.05f, _random));
+            _audio.PlayPvs(reflect.SoundOnReflect, user, AudioHelpers.WithVariation(0.05f, _random));
         }
 
-        var spread = _random.NextAngle(-reflector.Comp.Spread / 2, reflector.Comp.Spread / 2);
+        var spread = _random.NextAngle(-reflect.Spread / 2, reflect.Spread / 2);
         newDirection = -spread.RotateVec(direction);
 
         if (shooter != null)
@@ -238,106 +186,52 @@ public sealed class ReflectSystem : EntitySystem
         return true;
     }
 
-    private float GetReflectChance(Entity<ReflectComponent> reflector)
-    {
-        /*
-         *  The rules of deflection are as follows:
-         *  If you innately reflect things via magic, biology etc., you always have a full chance.
-         *  If you are standing up and standing still, you're prepared to deflect and have full chance.
-         *  If you have velocity, your deflection chance depends on your velocity, clamped.
-         *  If you are floating, your chance is the minimum value possible.
-         */
-
-        if (reflector.Comp.Innate)
-            return reflector.Comp.ReflectProb;
-
-        if (_gravity.IsWeightless(reflector))
-            return reflector.Comp.MinReflectProb;
-
-        if (!TryComp<PhysicsComponent>(reflector, out var reflectorPhysics))
-            return reflector.Comp.ReflectProb;
-
-        return MathHelper.Lerp(
-            reflector.Comp.MinReflectProb,
-            reflector.Comp.ReflectProb,
-            // Inverse progression between velocities fed in as progression between probabilities. We go high -> low so the output here needs to be _inverted_.
-            1 - Math.Clamp((reflectorPhysics.LinearVelocity.Length() - reflector.Comp.VelocityBeforeNotMaxProb) / (reflector.Comp.VelocityBeforeMinProb - reflector.Comp.VelocityBeforeNotMaxProb), 0, 1)
-        );
-    }
-
-    private void OnReflectEquipped(Entity<ReflectComponent> reflector, ref GotEquippedEvent args)
+    private void OnReflectEquipped(EntityUid uid, ReflectComponent component, GotEquippedEvent args)
     {
         if (_gameTiming.ApplyingState)
             return;
 
         EnsureComp<ReflectUserComponent>(args.Equipee);
-
-        if (reflector.Comp.Enabled)
-            EnableAlert(args.Equipee);
     }
 
-    private void OnReflectUnequipped(Entity<ReflectComponent> reflector, ref GotUnequippedEvent args)
+    private void OnReflectUnequipped(EntityUid uid, ReflectComponent comp, GotUnequippedEvent args)
     {
         RefreshReflectUser(args.Equipee);
     }
 
-    private void OnReflectHandEquipped(Entity<ReflectComponent> reflector, ref GotEquippedHandEvent args)
+    private void OnReflectHandEquipped(EntityUid uid, ReflectComponent component, GotEquippedHandEvent args)
     {
         if (_gameTiming.ApplyingState)
             return;
 
         EnsureComp<ReflectUserComponent>(args.User);
-
-        if (reflector.Comp.Enabled)
-            EnableAlert(args.User);
     }
 
-    private void OnReflectHandUnequipped(Entity<ReflectComponent> reflector, ref GotUnequippedHandEvent args)
+    private void OnReflectHandUnequipped(EntityUid uid, ReflectComponent component, GotUnequippedHandEvent args)
     {
         RefreshReflectUser(args.User);
     }
 
-    private void OnToggleReflect(Entity<ReflectComponent> reflector, ref ItemToggledEvent args)
+    private void OnToggleReflect(EntityUid uid, ReflectComponent comp, ref ItemToggledEvent args)
     {
-        reflector.Comp.Enabled = args.Activated;
-        Dirty(reflector);
-
-        if (args.User == null)
-            return;
-
-        if (reflector.Comp.Enabled)
-            EnableAlert(args.User.Value);
-        else
-            DisableAlert(args.User.Value);
+        comp.Enabled = args.Activated;
+        Dirty(uid, comp);
     }
 
     /// <summary>
-    /// Refreshes whether someone has reflection potential, so we can raise directed events on them.
+    /// Refreshes whether someone has reflection potential so we can raise directed events on them.
     /// </summary>
     private void RefreshReflectUser(EntityUid user)
     {
-        foreach (var ent in _inventorySystem.GetHandOrInventoryEntities(user, SlotFlags.WITHOUT_POCKET))
+        foreach (var ent in _inventorySystem.GetHandOrInventoryEntities(user, SlotFlags.All & ~SlotFlags.POCKET))
         {
             if (!HasComp<ReflectComponent>(ent))
                 continue;
 
             EnsureComp<ReflectUserComponent>(user);
-            EnableAlert(user);
-
             return;
         }
 
         RemCompDeferred<ReflectUserComponent>(user);
-        DisableAlert(user);
-    }
-
-    private void EnableAlert(EntityUid alertee)
-    {
-        _alerts.ShowAlert(alertee, DeflectingAlert);
-    }
-
-    private void DisableAlert(EntityUid alertee)
-    {
-        _alerts.ClearAlert(alertee, DeflectingAlert);
     }
 }
index 24bc60cbf1530e2e2b52ceebfd0d057e6d5de414..319809da40a28435ee8461bf585d19e4109ebae3 100644 (file)
@@ -107,6 +107,3 @@ alerts-revenant-essence-desc = The power of souls. It sustains you and is used f
 
 alerts-revenant-corporeal-name = Corporeal
 alerts-revenant-corporeal-desc = You have manifested physically. People around you can see and hurt you.
-
-alerts-deflecting-name = Deflecting
-alerts-deflecting-desc = You have a chance to deflect incoming projectiles. Standing still or moving slowly will increase this chance.
index 72412fde7cc3477fa31a1175e1d7506489da905b..c08453460f4fdd01ecc2803b21c9105479725e76 100644 (file)
@@ -24,7 +24,6 @@
     - category: Thirst
     - alertType: Magboots
     - alertType: Pacified
-    - alertType: Deflecting
 
 - type: entity
   id: AlertSpriteView
     state: critical
   name: Debug6
   description: Debug
-
-- type: alert
-  id: Deflecting
-  icons:
-  - sprite: /Textures/Interface/Alerts/deflecting.rsi
-    state: deflecting0
-  name: alerts-deflecting-name
-  description: alerts-deflecting-desc
index e39933c365c959c40eded82fb447e4272abdbe0c..dea1ddb69c36ff114dbac5f0bdc89793845cbb87 100644 (file)
@@ -84,7 +84,6 @@
   description: anomaly-behavior-reflect
   components:
   - type: Reflect
-    innate: true
     reflectProb: 0.5
     reflects:
       - Energy
index 825e729115cd639f77be5e1c9dcb53ebfd7d327b..606af0b127abfaad6cd0618689ec5225aecc7083 100644 (file)
@@ -96,7 +96,6 @@
         Heat: 0.4 # this technically means it protects against fires pretty well? -heat is just for lasers and stuff, not atmos temperature
   - type: Reflect
     reflectProb: 1
-    innate: true # armor grants a passive shield that does not require concentration to maintain
     reflects:
       - Energy
 
index e0a3a7645619e09a8ee72ad817741675798edf49..45fb6a12bdd4b97ed17edc75228fb85f1430c152 100644 (file)
@@ -56,7 +56,6 @@
   - type: Perishable
   - type: Reflect
     reflectProb: 0.7
-    innate: true
     reflects:
       - Energy
   - type: Fixtures
index e7ebb1b98d45ce28df0a3075221709904de2561f..b794e42ff7d33c98e4a73117c662ef334bdf401c 100644 (file)
   name: mirror shield
   parent: BaseShield
   id: MirrorShield
-  description: Glows an eerie red. You hear the Geometer whispering...
+  description: Eerily glows red... you hear the geometer whispering
   components:
     - type: Sprite
       state: mirror-icon
       heldPrefix: mirror
     - type: Reflect
       reflectProb: 0.95
-      innate: true
       reflects:
         - Energy
     - type: Blocking #Mirror shield reflects heat/laser, but is relatively weak to everything else.
     - type: Reflect
       enabled: false
       reflectProb: 0.95
-      innate: true
       reflects:
         - Energy
     - type: Blocking
index 592fe56b47589132d5e69ae512e5945f111d28bc..fbf8b1003c355476e04abf013fb307b4005359eb 100644 (file)
@@ -78,8 +78,6 @@
     malus: 0
   - type: Reflect
     enabled: false
-    reflectProb: 0.5
-    minReflectProb: 0.25
   - type: IgnitionSource
     temperature: 700
 
   name: double-bladed energy sword
   parent: EnergySword
   id: EnergySwordDouble
-  description: Syndicate Command's intern thought that having only one blade on energy swords was not cool enough. This can be stored in pockets.
+  description: Syndicate Command Interns thought that having one blade on the energy sword was not enough. This can be stored in pockets.
   components:
   - type: EnergySword
   - type: ItemToggle
     size: Small
     sprite: Objects/Weapons/Melee/e_sword_double-inhands.rsi
   - type: Reflect
-    reflectProb: .80
-    minReflectProb: .65
+    reflectProb: .75
     spread: 75
   - type: UseDelay
     delay: 1
index 11e7f983e054956c979ea3cee3b8170cd49b4580..7cc33b715501cf4907fb7d6a2cf4221dbb65f453 100644 (file)
     attackRate: 1.5
     damage:
       types:
-        Slash: 15
+        Slash: 17 #cmon, it has to be at least BETTER than the rest.
     soundHit:
         path: /Audio/Weapons/bladeslice.ogg
   - type: Reflect
     enabled: true
-    # Design intent: a robust captain or tot can sacrifice movement to make the most of this weapon, but they have to
-    # really restrict themselves to walking speed or less.
-    reflectProb: 0.5
-    velocityBeforeNotMaxProb: 1.0
-    velocityBeforeMinProb: 3.0
-    minReflectProb: 0.1
+    reflectProb: .1
     spread: 90
   - type: Item
     size: Normal
@@ -88,9 +83,6 @@
     - Back
     - Belt
   - type: Reflect
-    reflectProb: 0.3
-    velocityBeforeNotMaxProb: 6.0 # don't punish ninjas for being ninjas
-    velocityBeforeMinProb: 10.0
 
 - type: entity
   name: machete
     wideAnimationRotation: -135
     damage:
       types:
-        Slash: 15
+        Slash: 16
     soundHit:
         path: /Audio/Weapons/bladeslice.ogg
   - type: Item
   name: The Throngler
   parent: BaseItem
   id: Throngler
-  description: Why would someone make this?
+  description: Why would you make this?
   components:
     - type: Sharp
     - type: Sprite
         path: /Audio/Effects/explosion_small1.ogg
     - type: Reflect
       enabled: true
-      reflectProb: 0.5 # In robust hands, deflects as well as an e-sword
-      velocityBeforeNotMaxProb: 1.0
-      velocityBeforeMinProb: 3.0
-      minReflectProb: 0.1
+      reflectProb: .25
       spread: 90
     - type: Item
       size: Ginormous
diff --git a/Resources/Textures/Interface/Alerts/deflecting.rsi/deflecting0.png b/Resources/Textures/Interface/Alerts/deflecting.rsi/deflecting0.png
deleted file mode 100644 (file)
index 37404e7..0000000
Binary files a/Resources/Textures/Interface/Alerts/deflecting.rsi/deflecting0.png and /dev/null differ
diff --git a/Resources/Textures/Interface/Alerts/deflecting.rsi/meta.json b/Resources/Textures/Interface/Alerts/deflecting.rsi/meta.json
deleted file mode 100644 (file)
index f5d94c8..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-{
-    "version": 1,
-    "license": "CC-BY-SA-3.0",
-    "copyright": "Deflecting icon by Ubaser",
-    "size": {
-        "x": 32,
-        "y": 32
-    },
-    "states": [
-        {
-            "name": "deflecting0"
-        }
-    ]
-}