diff --git a/.voidbot/state/aetheria.cc b/.voidbot/state/aetheria.cc index a450437ae..f1167c1c9 100644 Binary files a/.voidbot/state/aetheria.cc and b/.voidbot/state/aetheria.cc differ diff --git a/Assets/Scripts/Gameplay/Weapons/GuidedProjectileManager.cs b/Assets/Scripts/Gameplay/Weapons/GuidedProjectileManager.cs index 5817d17b2..2d7435e73 100644 --- a/Assets/Scripts/Gameplay/Weapons/GuidedProjectileManager.cs +++ b/Assets/Scripts/Gameplay/Weapons/GuidedProjectileManager.cs @@ -29,7 +29,7 @@ public class GuidedProjectileManager : InstantWeaponEffectManager p.Range = weapon.Range; p.Penetration = weapon.Penetration; p.Spread = weapon.DamageSpread; - p.DamageType = weapon.WeaponData.DamageType; + p.DamageType = weapon.DamageType; p.GuidanceCurve = launcher.GuidanceCurve.ToCurve(); p.LiftCurve = launcher.LiftCurve.ToCurve(); p.ThrustCurve = launcher.ThrustCurve.ToCurve(); @@ -51,7 +51,7 @@ public class GuidedProjectileManager : InstantWeaponEffectManager p.Range = weapon.Range; p.Penetration = weapon.Penetration; p.Spread = weapon.DamageSpread; - p.DamageType = weapon.WeaponData.DamageType; + p.DamageType = weapon.DamageType; p.GuidanceCurve = guidance.GuidanceCurve.ToCurve(); p.LiftCurve = guidance.LiftCurve.ToCurve(); p.ThrustCurve = guidance.ThrustCurve.ToCurve(); diff --git a/Assets/Scripts/Gameplay/Weapons/HitscanManager.cs b/Assets/Scripts/Gameplay/Weapons/HitscanManager.cs index 046b99434..ca611ac9c 100644 --- a/Assets/Scripts/Gameplay/Weapons/HitscanManager.cs +++ b/Assets/Scripts/Gameplay/Weapons/HitscanManager.cs @@ -19,8 +19,8 @@ public class HitscanManager : InstantWeaponEffectManager p.Damage = weapon.Damage; p.Penetration = weapon.Penetration; p.Spread = weapon.DamageSpread; - p.DamageType = weapon.WeaponData.DamageType; + p.DamageType = weapon.DamageType; p.Zone = source.Entity.Zone; p.Fire(); } -} \ No newline at end of file +} diff --git a/Assets/Scripts/Gameplay/Weapons/LaserManager.cs b/Assets/Scripts/Gameplay/Weapons/LaserManager.cs index 04177bf48..889920466 100644 --- a/Assets/Scripts/Gameplay/Weapons/LaserManager.cs +++ b/Assets/Scripts/Gameplay/Weapons/LaserManager.cs @@ -20,6 +20,6 @@ public class LaserManager : InstantWeaponEffectManager p.Range = weapon.Range; p.Penetration = weapon.Penetration; p.Spread = weapon.DamageSpread; - p.DamageType = weapon.WeaponData.DamageType; + p.DamageType = weapon.DamageType; } } diff --git a/Assets/Scripts/Gameplay/Weapons/LightningGunManager.cs b/Assets/Scripts/Gameplay/Weapons/LightningGunManager.cs index 93621217a..cb764b3e2 100644 --- a/Assets/Scripts/Gameplay/Weapons/LightningGunManager.cs +++ b/Assets/Scripts/Gameplay/Weapons/LightningGunManager.cs @@ -17,8 +17,8 @@ public class LightningGunManager : InstantWeaponEffectManager p.Range = weapon.Range; p.Penetration = weapon.Penetration; p.Spread = weapon.DamageSpread; - p.DamageType = weapon.WeaponData.DamageType; + p.DamageType = weapon.DamageType; p.Target = target; p.Fire(); } -} \ No newline at end of file +} diff --git a/Assets/Scripts/Gameplay/Weapons/MineManager.cs b/Assets/Scripts/Gameplay/Weapons/MineManager.cs index 3a9b671e3..8bc69a585 100644 --- a/Assets/Scripts/Gameplay/Weapons/MineManager.cs +++ b/Assets/Scripts/Gameplay/Weapons/MineManager.cs @@ -28,7 +28,7 @@ public class MineManager : InstantWeaponEffectManager p.GridObject.Velocity += new Vector3(source.Entity.Velocity.x, 0, source.Entity.Velocity.y); p.Damage = weapon.Damage; p.Range = weapon.Range; - p.DamageType = weapon.WeaponData.DamageType; + p.DamageType = weapon.DamageType; p.GridObject.Zone = source.Entity.Zone; } } diff --git a/Assets/Scripts/Gameplay/Weapons/ProjectileManager.cs b/Assets/Scripts/Gameplay/Weapons/ProjectileManager.cs index f60db5e5e..31d31b67f 100644 --- a/Assets/Scripts/Gameplay/Weapons/ProjectileManager.cs +++ b/Assets/Scripts/Gameplay/Weapons/ProjectileManager.cs @@ -30,7 +30,7 @@ public class ProjectileManager : InstantWeaponEffectManager p.Range = weapon.Range; p.Penetration = weapon.Penetration; p.Spread = weapon.DamageSpread; - p.DamageType = weapon.WeaponData.DamageType; + p.DamageType = weapon.DamageType; p.Zone = source.Entity.Zone; p.AirburstDistance = target != null ? length(source.Entity.Position - target.Entity.Position) : (weapon.Range * .75f); p.Trail.Clear(); diff --git a/Assets/Scripts/ServerShared/Behaviors/Weapon.cs b/Assets/Scripts/ServerShared/Behaviors/Weapon.cs index 4d81c3691..b8a562e17 100644 --- a/Assets/Scripts/ServerShared/Behaviors/Weapon.cs +++ b/Assets/Scripts/ServerShared/Behaviors/Weapon.cs @@ -68,6 +68,7 @@ public abstract class Weapon : Behavior, IActivatedBehavior public abstract float RangeDamagePerSecond(float range); public abstract int Ammo { get; } public WeaponData WeaponData => _data; + public DamageType DamageType { get; } public float Damage { get; protected set; } public float Penetration { get; protected set; } @@ -90,11 +91,13 @@ public abstract class Weapon : Behavior, IActivatedBehavior public Weapon(WeaponData data, EquippedItem item) : base(data, item) { _data = data; + DamageType = data.DamageType; } public Weapon(WeaponData data, ConsumableItemEffect item) : base(data, item) { _data = data; + DamageType = data.DamageType; } protected virtual void UpdateStats() diff --git a/docs/aetheria-perfect-machine-map.md b/docs/aetheria-perfect-machine-map.md index f1aa5d5e7..d8b587cdd 100644 --- a/docs/aetheria-perfect-machine-map.md +++ b/docs/aetheria-perfect-machine-map.md @@ -1000,6 +1000,9 @@ First Aetheria surfaces to publish: - Done: move TurretController's weapon range/velocity reads off `WeaponData` casts and onto `Weapon.EvaluateRange`/`EvaluateVelocity`; weapon config fields remain private inputs to the weapon runtime owner. + - Done: move projectile, hitscan, beam, lightning, and mine effect damage + type reads off `WeaponData` and onto `Weapon.DamageType`; effect managers + consume live weapon metadata instead of config DTO fields. - Done: delete the legacy `Behaviors` lists from `ConsumableItemData` and `EquippableItemData`; item DTOs can no longer carry behavior config state. - Done: move runtime blueprint price aggregation and conductivity restore