From f136657b388b6d90b63fa338cc7295b1fd39d00c Mon Sep 17 00:00:00 2001 From: Nemanja <98561806+EmoGarbage404@users.noreply.github.com> Date: Fri, 14 Jun 2024 23:38:43 -0400 Subject: [PATCH] Revamped Meteor Swarm (#28974) * meteor code and balanced values * Meteor Swarms * Update meteors.yml * Update meteors.yml * HOO! (fix overkill bug and buff space dust) * undo BloodstreamComponent.cs changes * DamageDistribution -> DamageTypes * part 2. --- .../Destructible/DestructibleSystem.cs | 11 + Content.Server/Mining/MeteorComponent.cs | 25 ++ Content.Server/Mining/MeteorSystem.cs | 65 +++++ .../Components/MeteorSchedulerComponent.cs | 35 +++ .../Components/MeteorSwarmComponent.cs | 58 ++++ .../Components/MeteorSwarmRuleComponent.cs | 40 --- .../StationEvents/Events/MeteorSwarmRule.cs | 85 ------ .../StationEvents/Events/MeteorSwarmSystem.cs | 82 ++++++ .../StationEvents/MeteorSchedulerSystem.cs | 39 +++ .../Mobs/Systems/MobThresholdSystem.cs | 2 +- .../station-events/events/meteor-swarm.ftl | 5 +- .../Weapons/Guns/Launchers/launchers.yml | 2 +- .../Weapons/Guns/Projectiles/meteors.yml | 204 +++++++++++-- Resources/Prototypes/GameRules/events.yml | 17 -- .../Prototypes/GameRules/meteorswarms.yml | 104 +++++++ Resources/Prototypes/game_presets.yml | 6 + .../Textures/Objects/Misc/meteor.rsi/big.png | Bin 0 -> 4562 bytes .../Objects/Misc/meteor.rsi/big_cluster.png | Bin 0 -> 4473 bytes .../Misc/meteor.rsi/big_cluster_pixel.png | Bin 0 -> 4473 bytes .../Objects/Misc/meteor.rsi/big_pixel.png | Bin 0 -> 4562 bytes .../Objects/Misc/meteor.rsi/firework.png | Bin 0 -> 367 bytes .../Misc/meteor.rsi/firework_pixel.png | Bin 0 -> 430 bytes .../Objects/Misc/meteor.rsi/human.png | Bin 0 -> 5045 bytes .../Objects/Misc/meteor.rsi/human_pixel.png | Bin 0 -> 1844 bytes .../Objects/Misc/meteor.rsi/medium.png | Bin 0 -> 2921 bytes .../Misc/meteor.rsi/medium_piercing.png | Bin 0 -> 3594 bytes .../Misc/meteor.rsi/medium_piercing_pixel.png | Bin 0 -> 3594 bytes .../Objects/Misc/meteor.rsi/medium_pixel.png | Bin 0 -> 2921 bytes .../Misc/meteor.rsi/medium_radioactive.png | Bin 0 -> 2088 bytes .../meteor.rsi/medium_radioactive_pixel.png | Bin 0 -> 2088 bytes .../Objects/Misc/meteor.rsi/meta.json | 271 ++++++++++++++++++ .../Objects/Misc/meteor.rsi/small.png | Bin 0 -> 2458 bytes .../Objects/Misc/meteor.rsi/small_flash.png | Bin 0 -> 2484 bytes .../Misc/meteor.rsi/small_flash_pixel.png | Bin 0 -> 2484 bytes .../Objects/Misc/meteor.rsi/small_pixel.png | Bin 0 -> 2458 bytes .../Objects/Misc/meteor.rsi/space_dust.png | Bin 0 -> 328 bytes 36 files changed, 887 insertions(+), 164 deletions(-) create mode 100644 Content.Server/Mining/MeteorComponent.cs create mode 100644 Content.Server/Mining/MeteorSystem.cs create mode 100644 Content.Server/StationEvents/Components/MeteorSchedulerComponent.cs create mode 100644 Content.Server/StationEvents/Components/MeteorSwarmComponent.cs delete mode 100644 Content.Server/StationEvents/Components/MeteorSwarmRuleComponent.cs delete mode 100644 Content.Server/StationEvents/Events/MeteorSwarmRule.cs create mode 100644 Content.Server/StationEvents/Events/MeteorSwarmSystem.cs create mode 100644 Content.Server/StationEvents/MeteorSchedulerSystem.cs create mode 100644 Resources/Prototypes/GameRules/meteorswarms.yml create mode 100644 Resources/Textures/Objects/Misc/meteor.rsi/big.png create mode 100644 Resources/Textures/Objects/Misc/meteor.rsi/big_cluster.png create mode 100644 Resources/Textures/Objects/Misc/meteor.rsi/big_cluster_pixel.png create mode 100644 Resources/Textures/Objects/Misc/meteor.rsi/big_pixel.png create mode 100644 Resources/Textures/Objects/Misc/meteor.rsi/firework.png create mode 100644 Resources/Textures/Objects/Misc/meteor.rsi/firework_pixel.png create mode 100644 Resources/Textures/Objects/Misc/meteor.rsi/human.png create mode 100644 Resources/Textures/Objects/Misc/meteor.rsi/human_pixel.png create mode 100644 Resources/Textures/Objects/Misc/meteor.rsi/medium.png create mode 100644 Resources/Textures/Objects/Misc/meteor.rsi/medium_piercing.png create mode 100644 Resources/Textures/Objects/Misc/meteor.rsi/medium_piercing_pixel.png create mode 100644 Resources/Textures/Objects/Misc/meteor.rsi/medium_pixel.png create mode 100644 Resources/Textures/Objects/Misc/meteor.rsi/medium_radioactive.png create mode 100644 Resources/Textures/Objects/Misc/meteor.rsi/medium_radioactive_pixel.png create mode 100644 Resources/Textures/Objects/Misc/meteor.rsi/meta.json create mode 100644 Resources/Textures/Objects/Misc/meteor.rsi/small.png create mode 100644 Resources/Textures/Objects/Misc/meteor.rsi/small_flash.png create mode 100644 Resources/Textures/Objects/Misc/meteor.rsi/small_flash_pixel.png create mode 100644 Resources/Textures/Objects/Misc/meteor.rsi/small_pixel.png create mode 100644 Resources/Textures/Objects/Misc/meteor.rsi/space_dust.png diff --git a/Content.Server/Destructible/DestructibleSystem.cs b/Content.Server/Destructible/DestructibleSystem.cs index 16c54fd3b0..e0183a037d 100644 --- a/Content.Server/Destructible/DestructibleSystem.cs +++ b/Content.Server/Destructible/DestructibleSystem.cs @@ -1,3 +1,4 @@ +using System.Diagnostics.CodeAnalysis; using Content.Server.Administration.Logs; using Content.Server.Atmos.EntitySystems; using Content.Server.Body.Systems; @@ -90,6 +91,16 @@ namespace Content.Server.Destructible } } + public bool TryGetDestroyedAt(Entity ent, [NotNullWhen(true)] out FixedPoint2? destroyedAt) + { + destroyedAt = null; + if (!Resolve(ent, ref ent.Comp, false)) + return false; + + destroyedAt = DestroyedAt(ent, ent.Comp); + return true; + } + // FFS this shouldn't be this hard. Maybe this should just be a field of the destructible component. Its not // like there is currently any entity that is NOT just destroyed upon reaching a total-damage value. /// diff --git a/Content.Server/Mining/MeteorComponent.cs b/Content.Server/Mining/MeteorComponent.cs new file mode 100644 index 0000000000..059c450a8a --- /dev/null +++ b/Content.Server/Mining/MeteorComponent.cs @@ -0,0 +1,25 @@ +using Content.Shared.Damage; + +namespace Content.Server.Mining; + +/// +/// This is used for meteors which hit objects, dealing damage to destroy/kill the object and dealing equal damage back to itself. +/// +[RegisterComponent, Access(typeof(MeteorSystem))] +public sealed partial class MeteorComponent : Component +{ + /// + /// Damage specifier that is multiplied against the calculated damage amount to determine what damage is applied to the colliding entity. + /// + /// + /// The values of this should add up to 1 or else the damage will be scaled. + /// + [DataField] + public DamageSpecifier DamageTypes = new(); + + /// + /// A list of entities that this meteor has collided with. used to ensure no double collisions occur. + /// + [DataField] + public HashSet HitList = new(); +} diff --git a/Content.Server/Mining/MeteorSystem.cs b/Content.Server/Mining/MeteorSystem.cs new file mode 100644 index 0000000000..fc00147f70 --- /dev/null +++ b/Content.Server/Mining/MeteorSystem.cs @@ -0,0 +1,65 @@ +using Content.Server.Administration.Logs; +using Content.Server.Destructible; +using Content.Shared.Damage; +using Content.Shared.Database; +using Content.Shared.FixedPoint; +using Content.Shared.Mobs.Systems; +using Robust.Shared.Physics.Events; +using Robust.Shared.Player; + +namespace Content.Server.Mining; + +public sealed class MeteorSystem : EntitySystem +{ + [Dependency] private readonly IAdminLogManager _adminLog = default!; + [Dependency] private readonly DamageableSystem _damageable = default!; + [Dependency] private readonly DestructibleSystem _destructible = default!; + [Dependency] private readonly MobThresholdSystem _mobThreshold = default!; + + /// + public override void Initialize() + { + SubscribeLocalEvent(OnCollide); + } + + private void OnCollide(EntityUid uid, MeteorComponent component, ref StartCollideEvent args) + { + if (TerminatingOrDeleted(args.OtherEntity) || TerminatingOrDeleted(uid)) + return; + + if (component.HitList.Contains(args.OtherEntity)) + return; + + FixedPoint2 threshold; + if (_mobThreshold.TryGetDeadThreshold(args.OtherEntity, out var mobThreshold)) + { + threshold = mobThreshold.Value; + if (HasComp(args.OtherEntity)) + _adminLog.Add(LogType.Action, LogImpact.Extreme, $"{ToPrettyString(args.OtherEntity):player} was struck by meteor {ToPrettyString(uid):ent} and killed instantly."); + } + else if (_destructible.TryGetDestroyedAt(args.OtherEntity, out var destroyThreshold)) + { + threshold = destroyThreshold.Value; + } + else + { + threshold = FixedPoint2.MaxValue; + } + var otherEntDamage = CompOrNull(args.OtherEntity)?.TotalDamage ?? FixedPoint2.Zero; + // account for the damage that the other entity has already taken: don't overkill + threshold -= otherEntDamage; + + // The max amount of damage our meteor can take before breaking. + var maxMeteorDamage = _destructible.DestroyedAt(uid) - CompOrNull(uid)?.TotalDamage ?? FixedPoint2.Zero; + + // Cap damage so we don't overkill the meteor + var trueDamage = FixedPoint2.Min(maxMeteorDamage, threshold); + + var damage = component.DamageTypes * trueDamage; + _damageable.TryChangeDamage(args.OtherEntity, damage, true, origin: uid); + _damageable.TryChangeDamage(uid, damage); + + if (!TerminatingOrDeleted(args.OtherEntity)) + component.HitList.Add(args.OtherEntity); + } +} diff --git a/Content.Server/StationEvents/Components/MeteorSchedulerComponent.cs b/Content.Server/StationEvents/Components/MeteorSchedulerComponent.cs new file mode 100644 index 0000000000..e71a284a89 --- /dev/null +++ b/Content.Server/StationEvents/Components/MeteorSchedulerComponent.cs @@ -0,0 +1,35 @@ +using Content.Shared.Random; +using Robust.Shared.Prototypes; + +namespace Content.Server.StationEvents.Components; + +/// +/// This is used for running meteor swarm events at regular intervals. +/// +[RegisterComponent, Access(typeof(MeteorSchedulerSystem)), AutoGenerateComponentPause] +public sealed partial class MeteorSchedulerComponent : Component +{ + /// + /// The weights for which swarms will be selected. + /// + [DataField] + public ProtoId Config = "DefaultConfig"; + + /// + /// The time at which the next swarm occurs. + /// + [DataField, AutoPausedField] + public TimeSpan NextSwarmTime = TimeSpan.Zero; + + /// + /// The minimum time between swarms + /// + [DataField] + public TimeSpan MinSwarmDelay = TimeSpan.FromMinutes(7.5f); + + /// + /// The maximum time between swarms + /// + [DataField] + public TimeSpan MaxSwarmDelay = TimeSpan.FromMinutes(12.5f); +} diff --git a/Content.Server/StationEvents/Components/MeteorSwarmComponent.cs b/Content.Server/StationEvents/Components/MeteorSwarmComponent.cs new file mode 100644 index 0000000000..1cde2ac8fa --- /dev/null +++ b/Content.Server/StationEvents/Components/MeteorSwarmComponent.cs @@ -0,0 +1,58 @@ +using Content.Server.StationEvents.Events; +using Content.Shared.Destructible.Thresholds; +using Robust.Shared.Audio; +using Robust.Shared.Prototypes; + +namespace Content.Server.StationEvents.Components; + +[RegisterComponent, Access(typeof(MeteorSwarmSystem)), AutoGenerateComponentPause] +public sealed partial class MeteorSwarmComponent : Component +{ + [DataField, AutoPausedField] + public TimeSpan NextWaveTime; + + /// + /// We'll send a specific amount of waves of meteors towards the station per ending rather than using a timer. + /// + [DataField] + public int WaveCounter; + + [DataField] + public float MeteorVelocity = 10f; + + /// + /// If true, meteors will be thrown from all angles instead of from a singular source + /// + [DataField] + public bool NonDirectional; + + /// + /// The announcement played when a meteor swarm begins. + /// + [DataField] + public LocId? Announcement = "station-event-meteor-swarm-start-announcement"; + + [DataField] + public SoundSpecifier? AnnouncementSound = new SoundPathSpecifier("/Audio/Announcements/meteors.ogg") + { + Params = new() + { + Volume = -4 + } + }; + + /// + /// Each meteor entity prototype and their corresponding weight in being picked. + /// + [DataField] + public Dictionary Meteors = new(); + + [DataField] + public MinMax Waves = new(3, 3); + + [DataField] + public MinMax MeteorsPerWave = new(3, 4); + + [DataField] + public MinMax WaveCooldown = new (10, 60); +} diff --git a/Content.Server/StationEvents/Components/MeteorSwarmRuleComponent.cs b/Content.Server/StationEvents/Components/MeteorSwarmRuleComponent.cs deleted file mode 100644 index 3927f94319..0000000000 --- a/Content.Server/StationEvents/Components/MeteorSwarmRuleComponent.cs +++ /dev/null @@ -1,40 +0,0 @@ -using Content.Server.StationEvents.Events; - -namespace Content.Server.StationEvents.Components; - -[RegisterComponent, Access(typeof(MeteorSwarmRule))] -public sealed partial class MeteorSwarmRuleComponent : Component -{ - [DataField("cooldown")] - public float Cooldown; - - /// - /// We'll send a specific amount of waves of meteors towards the station per ending rather than using a timer. - /// - [DataField("waveCounter")] - public int WaveCounter; - - [DataField("minimumWaves")] - public int MinimumWaves = 3; - - [DataField("maximumWaves")] - public int MaximumWaves = 8; - - [DataField("minimumCooldown")] - public float MinimumCooldown = 10f; - - [DataField("maximumCooldown")] - public float MaximumCooldown = 60f; - - [DataField("meteorsPerWave")] - public int MeteorsPerWave = 5; - - [DataField("meteorVelocity")] - public float MeteorVelocity = 10f; - - [DataField("maxAngularVelocity")] - public float MaxAngularVelocity = 0.25f; - - [DataField("minAngularVelocity")] - public float MinAngularVelocity = -0.25f; -} diff --git a/Content.Server/StationEvents/Events/MeteorSwarmRule.cs b/Content.Server/StationEvents/Events/MeteorSwarmRule.cs deleted file mode 100644 index b97cde86a0..0000000000 --- a/Content.Server/StationEvents/Events/MeteorSwarmRule.cs +++ /dev/null @@ -1,85 +0,0 @@ -using System.Numerics; -using Content.Server.GameTicking.Rules.Components; -using Content.Server.StationEvents.Components; -using Content.Shared.GameTicking.Components; -using Robust.Shared.Map; -using Robust.Shared.Map.Components; -using Robust.Shared.Physics.Components; -using Robust.Shared.Physics.Systems; -using Robust.Shared.Spawners; - -namespace Content.Server.StationEvents.Events -{ - public sealed class MeteorSwarmRule : StationEventSystem - { - [Dependency] private readonly SharedPhysicsSystem _physics = default!; - - protected override void Started(EntityUid uid, MeteorSwarmRuleComponent component, GameRuleComponent gameRule, GameRuleStartedEvent args) - { - base.Started(uid, component, gameRule, args); - - component.WaveCounter = RobustRandom.Next(component.MinimumWaves, component.MaximumWaves); - } - - protected override void ActiveTick(EntityUid uid, MeteorSwarmRuleComponent component, GameRuleComponent gameRule, float frameTime) - { - if (component.WaveCounter <= 0) - { - ForceEndSelf(uid, gameRule); - return; - } - - component.Cooldown -= frameTime; - - if (component.Cooldown > 0f) - return; - - component.WaveCounter--; - - component.Cooldown += (component.MaximumCooldown - component.MinimumCooldown) * RobustRandom.NextFloat() + component.MinimumCooldown; - - Box2? playableArea = null; - var mapId = GameTicker.DefaultMap; - - var query = AllEntityQuery(); - while (query.MoveNext(out var gridId, out _, out var xform)) - { - if (xform.MapID != mapId) - continue; - - var aabb = _physics.GetWorldAABB(gridId); - playableArea = playableArea?.Union(aabb) ?? aabb; - } - - if (playableArea == null) - { - ForceEndSelf(uid, gameRule); - return; - } - - var minimumDistance = (playableArea.Value.TopRight - playableArea.Value.Center).Length() + 50f; - var maximumDistance = minimumDistance + 100f; - - var center = playableArea.Value.Center; - - for (var i = 0; i < component.MeteorsPerWave; i++) - { - var angle = new Angle(RobustRandom.NextFloat() * MathF.Tau); - var offset = angle.RotateVec(new Vector2((maximumDistance - minimumDistance) * RobustRandom.NextFloat() + minimumDistance, 0)); - var spawnPosition = new MapCoordinates(center + offset, mapId); - var meteor = Spawn("MeteorLarge", spawnPosition); - var physics = EntityManager.GetComponent(meteor); - _physics.SetBodyStatus(meteor, physics, BodyStatus.InAir); - _physics.SetLinearDamping(meteor, physics, 0f); - _physics.SetAngularDamping(meteor, physics, 0f); - _physics.ApplyLinearImpulse(meteor, -offset.Normalized() * component.MeteorVelocity * physics.Mass, body: physics); - _physics.ApplyAngularImpulse( - meteor, - physics.Mass * ((component.MaxAngularVelocity - component.MinAngularVelocity) * RobustRandom.NextFloat() + component.MinAngularVelocity), - body: physics); - - EnsureComp(meteor).Lifetime = 120f; - } - } - } -} diff --git a/Content.Server/StationEvents/Events/MeteorSwarmSystem.cs b/Content.Server/StationEvents/Events/MeteorSwarmSystem.cs new file mode 100644 index 0000000000..e085a2e159 --- /dev/null +++ b/Content.Server/StationEvents/Events/MeteorSwarmSystem.cs @@ -0,0 +1,82 @@ +using System.Numerics; +using Content.Server.Chat.Systems; +using Content.Server.GameTicking.Rules; +using Content.Server.Station.Components; +using Content.Server.Station.Systems; +using Content.Server.StationEvents.Components; +using Content.Shared.GameTicking.Components; +using Content.Shared.Random.Helpers; +using Robust.Server.Audio; +using Robust.Shared.Map; +using Robust.Shared.Physics.Components; +using Robust.Shared.Physics.Systems; +using Robust.Shared.Player; +using Robust.Shared.Random; + +namespace Content.Server.StationEvents.Events; + +public sealed class MeteorSwarmSystem : GameRuleSystem +{ + [Dependency] private readonly SharedPhysicsSystem _physics = default!; + [Dependency] private readonly AudioSystem _audio = default!; + [Dependency] private readonly ChatSystem _chat = default!; + [Dependency] private readonly StationSystem _station = default!; + + protected override void Added(EntityUid uid, MeteorSwarmComponent component, GameRuleComponent gameRule, GameRuleAddedEvent args) + { + base.Added(uid, component, gameRule, args); + + component.WaveCounter = component.Waves.Next(RobustRandom); + + if (component.Announcement is { } locId) + _chat.DispatchGlobalAnnouncement(Loc.GetString(locId), playSound: false, colorOverride: Color.Yellow); + _audio.PlayGlobal(component.AnnouncementSound, Filter.Broadcast(), true); + } + + protected override void ActiveTick(EntityUid uid, MeteorSwarmComponent component, GameRuleComponent gameRule, float frameTime) + { + if (Timing.CurTime < component.NextWaveTime) + return; + + component.NextWaveTime += TimeSpan.FromSeconds(component.WaveCooldown.Next(RobustRandom)); + + + if (_station.GetStations().Count == 0) + return; + + var station = RobustRandom.Pick(_station.GetStations()); + if (_station.GetLargestGrid(Comp(station)) is not { } grid) + return; + + var mapId = Transform(grid).MapID; + var playableArea = _physics.GetWorldAABB(grid); + + var minimumDistance = (playableArea.TopRight - playableArea.Center).Length() + 50f; + var maximumDistance = minimumDistance + 100f; + + var center = playableArea.Center; + + var meteorsToSpawn = component.MeteorsPerWave.Next(RobustRandom); + for (var i = 0; i < meteorsToSpawn; i++) + { + var spawnProto = RobustRandom.Pick(component.Meteors); + + var angle = component.NonDirectional + ? RobustRandom.NextAngle() + : new Random(uid.Id).NextAngle(); + + var offset = angle.RotateVec(new Vector2((maximumDistance - minimumDistance) * RobustRandom.NextFloat() + minimumDistance, 0)); + var subOffset = RobustRandom.NextAngle().RotateVec(new Vector2( (playableArea.TopRight - playableArea.Center).Length() / 2 * RobustRandom.NextFloat(), 0)); + var spawnPosition = new MapCoordinates(center + offset + subOffset, mapId); + var meteor = Spawn(spawnProto, spawnPosition); + var physics = Comp(meteor); + _physics.ApplyLinearImpulse(meteor, -offset.Normalized() * component.MeteorVelocity * physics.Mass, body: physics); + } + + component.WaveCounter--; + if (component.WaveCounter <= 0) + { + ForceEndSelf(uid, gameRule); + } + } +} diff --git a/Content.Server/StationEvents/MeteorSchedulerSystem.cs b/Content.Server/StationEvents/MeteorSchedulerSystem.cs new file mode 100644 index 0000000000..3ad88a7d89 --- /dev/null +++ b/Content.Server/StationEvents/MeteorSchedulerSystem.cs @@ -0,0 +1,39 @@ +using Content.Server.GameTicking.Rules; +using Content.Server.StationEvents.Components; +using Content.Shared.GameTicking.Components; +using Content.Shared.Random.Helpers; +using Robust.Shared.Prototypes; + +namespace Content.Server.StationEvents; + +/// +/// This handles scheduling and launching meteors at a station at regular intervals. +/// TODO: there is 100% a world in which this is genericized and can be used for lots of basic event scheduling +/// +public sealed class MeteorSchedulerSystem : GameRuleSystem +{ + [Dependency] private readonly IPrototypeManager _prototypeManager = default!; + + protected override void Started(EntityUid uid, MeteorSchedulerComponent component, GameRuleComponent gameRule, GameRuleStartedEvent args) + { + base.Started(uid, component, gameRule, args); + + component.NextSwarmTime = Timing.CurTime + RobustRandom.Next(component.MinSwarmDelay, component.MaxSwarmDelay); + } + + protected override void ActiveTick(EntityUid uid, MeteorSchedulerComponent component, GameRuleComponent gameRule, float frameTime) + { + base.ActiveTick(uid, component, gameRule, frameTime); + + if (Timing.CurTime < component.NextSwarmTime) + return; + RunSwarm((uid, component)); + component.NextSwarmTime += RobustRandom.Next(component.MinSwarmDelay, component.MaxSwarmDelay); + } + + private void RunSwarm(Entity ent) + { + var swarmWeights = _prototypeManager.Index(ent.Comp.Config); + GameTicker.StartGameRule(swarmWeights.Pick(RobustRandom)); + } +} diff --git a/Content.Shared/Mobs/Systems/MobThresholdSystem.cs b/Content.Shared/Mobs/Systems/MobThresholdSystem.cs index b11de9eac5..eeaecc24d8 100644 --- a/Content.Shared/Mobs/Systems/MobThresholdSystem.cs +++ b/Content.Shared/Mobs/Systems/MobThresholdSystem.cs @@ -212,7 +212,7 @@ public sealed class MobThresholdSystem : EntitySystem MobThresholdsComponent? thresholdComponent = null) { threshold = null; - if (!Resolve(target, ref thresholdComponent)) + if (!Resolve(target, ref thresholdComponent, false)) return false; return TryGetThresholdForState(target, MobState.Dead, out threshold, thresholdComponent); diff --git a/Resources/Locale/en-US/station-events/events/meteor-swarm.ftl b/Resources/Locale/en-US/station-events/events/meteor-swarm.ftl index 6a96c56048..0090c170ca 100644 --- a/Resources/Locale/en-US/station-events/events/meteor-swarm.ftl +++ b/Resources/Locale/en-US/station-events/events/meteor-swarm.ftl @@ -1,2 +1,5 @@ -station-event-meteor-swarm-start-announcement = Meteors are on a collision course with the station. Brace for impact. +station-event-meteor-swarm-start-announcement = Meteors have been detected on collision course with the station. station-event-meteor-swarm-end-announcement = The meteor swarm has passed. Please return to your stations. + +station-event-space-dust-start-announcement = The station is passing through a debris cloud, expect minor damage to external fittings and fixtures. +station-event-meteor-urist-start-announcement = The station is colliding with an unidentified swarm of debris. Please stay calm and do not listen to them. diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Launchers/launchers.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Launchers/launchers.yml index 728783fb3e..0d10411cfb 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Launchers/launchers.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Launchers/launchers.yml @@ -361,7 +361,7 @@ whitelist: tags: - CartridgeRocket - proto: MeteorLarge + proto: MeteorMedium - type: entity name: immovable rod launcher diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/meteors.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/meteors.yml index 6bdac1e85f..3468cade76 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/meteors.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/meteors.yml @@ -1,40 +1,206 @@ - type: entity - id: MeteorLarge + id: BaseMeteor name: meteor - noSpawn: true + description: You prefer them when they're burning up in the atmosphere. + abstract: true components: - type: Sprite noRot: false - sprite: Objects/Weapons/Guns/Projectiles/meteor.rsi - scale: 4,4 - layers: - - state: large - shader: unshaded - - type: ExplodeOnTrigger - - type: DeleteOnTrigger - - type: TriggerOnCollide - fixtureID: projectile + sprite: Objects/Misc/meteor.rsi - type: Projectile damage: {} deleteOnCollide: false - - type: Explosive - explosionType: Default - totalIntensity: 600.0 - intensitySlope: 30 - maxIntensity: 45 + - type: Meteor + damageTypes: + types: + Blunt: 1 + - type: TimedDespawn + lifetime: 120 + - type: Clickable - type: Physics bodyType: Dynamic + bodyStatus: InAir + angularDamping: 0 + linearDamping: 0 + - type: Fixtures + fixtures: + projectile: + shape: + !type:PhysShapeCircle + radius: 0.4 + density: 100 + hard: false + layer: + - LargeMobLayer + mask: + - Impassable + - BulletImpassable + - type: Damageable + damageContainer: Inorganic + - type: Explosive + explosionType: Default + intensitySlope: 4 + maxIntensity: 100 + +- type: entity + parent: BaseMeteor + id: MeteorSpaceDust + name: space dust + description: Makes a station sneeze. + components: + - type: Sprite + state: space_dust - type: Fixtures fixtures: projectile: shape: !type:PhysShapeCircle - radius: 0.8 + radius: 0.45 density: 100 - hard: true - # Didn't use MapGridComponent for now as the bounds are stuffed. + hard: false layer: - LargeMobLayer mask: - Impassable - BulletImpassable + - type: Explosive + totalIntensity: 25 + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 100 + behaviors: + - !type:DoActsBehavior + acts: [ "Destruction" ] + - !type:PlaySoundBehavior + sound: + collection: MetalBreak + - !type:ExplodeBehavior + +- type: entity + parent: BaseMeteor + id: MeteorSmall + suffix: Small + components: + - type: Sprite + state: small + - type: Fixtures + fixtures: + projectile: + shape: + !type:PhysShapeCircle + radius: 0.25 + density: 100 + hard: false + layer: + - LargeMobLayer + mask: + - Impassable + - BulletImpassable + - type: Explosive + totalIntensity: 100 + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 1250 + behaviors: + - !type:DoActsBehavior + acts: [ "Destruction" ] + - !type:PlaySoundBehavior + sound: + collection: MetalBreak + - !type:ExplodeBehavior + +- type: entity + parent: BaseMeteor + id: MeteorMedium + suffix: Medium + components: + - type: Sprite + state: medium + - type: Fixtures + fixtures: + projectile: + shape: + !type:PhysShapeCircle + radius: 0.3 + density: 100 + hard: false + layer: + - LargeMobLayer + mask: + - Impassable + - BulletImpassable + - type: Explosive + totalIntensity: 200 + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 1750 + behaviors: + - !type:DoActsBehavior + acts: [ "Destruction" ] + - !type:PlaySoundBehavior + sound: + collection: MetalBreak + - !type:ExplodeBehavior + +- type: entity + parent: BaseMeteor + id: MeteorLarge + suffix: Large + components: + - type: Sprite + state: big + - type: Explosive + totalIntensity: 300 + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 2500 + behaviors: + - !type:DoActsBehavior + acts: [ "Destruction" ] + - !type:PlaySoundBehavior + sound: + collection: MetalBreak + - !type:ExplodeBehavior + +- type: entity + parent: BaseMeteor + id: MeteorUrist + name: Urist McMeteor + description: As a successful member of society with a stable unflinching psyche and limitless drive, natural affinity for finance and domination, you have been selected, no, you have been effortlessly guided by divine (biological) trauma towards this moment. The gates of destiny fling open, and once again you're left standing on pulsating nothingness. A strobing headache of the soul. + suffix: Meteor + components: + - type: Sprite + state: human_pixel + - type: SolutionContainerManager + solutions: + blood: + maxVol: 1000 + reagents: + - ReagentId: Blood + Quantity: 1000 + - type: Explosive + totalIntensity: 25 + - type: Destructible + thresholds: + - trigger: + !type:DamageTrigger + damage: 3000 + behaviors: + - !type:DoActsBehavior + acts: [ "Destruction" ] + - !type:PlaySoundBehavior + sound: + collection: MaleScreams + params: + volume: 10 + - !type:SpillBehavior + solution: blood + - !type:ExplodeBehavior diff --git a/Resources/Prototypes/GameRules/events.yml b/Resources/Prototypes/GameRules/events.yml index 04918578fa..853853fb22 100644 --- a/Resources/Prototypes/GameRules/events.yml +++ b/Resources/Prototypes/GameRules/events.yml @@ -196,23 +196,6 @@ duration: 240 - type: KudzuGrowthRule -- type: entity - id: MeteorSwarm - parent: BaseStationEventLongDelay - components: - - type: StationEvent - earliestStart: 30 - weight: 7.5 - minimumPlayers: 10 #Enough to hopefully have at least one engineering guy - startAnnouncement: station-event-meteor-swarm-start-announcement - endAnnouncement: station-event-meteor-swarm-end-announcement - startAudio: - path: /Audio/Announcements/meteors.ogg - params: - volume: -4 - duration: null #ending is handled by MeteorSwarmRule - - type: MeteorSwarmRule - - type: entity id: MouseMigration parent: BaseStationEventShortDelay diff --git a/Resources/Prototypes/GameRules/meteorswarms.yml b/Resources/Prototypes/GameRules/meteorswarms.yml new file mode 100644 index 0000000000..70dd5265b0 --- /dev/null +++ b/Resources/Prototypes/GameRules/meteorswarms.yml @@ -0,0 +1,104 @@ +- type: entity + parent: BaseGameRule + id: GameRuleMeteorScheduler + components: + - type: GameRule + minPlayers: 25 + - type: MeteorScheduler + +- type: weightedRandomEntity + id: DefaultConfig + weights: + GameRuleSpaceDustMinor: 44 + GameRuleSpaceDustMajor: 22 + GameRuleMeteorSwarmSmall: 18 + GameRuleMeteorSwarmMedium: 10 + GameRuleMeteorSwarmLarge: 5 + GameRuleUristSwarm: 0.05 + +- type: entity + parent: BaseGameRule + id: GameRuleMeteorSwarm + abstract: true + components: + - type: GameRule + - type: MeteorSwarm + +- type: entity + parent: GameRuleMeteorSwarm + id: GameRuleSpaceDustMinor + components: + - type: MeteorSwarm + announcement: null + announcementSound: null + nonDirectional: true + meteors: + MeteorSpaceDust: 1 + waves: + min: 2 + max: 3 + meteorsPerWave: + min: 3 + max: 5 + +- type: entity + parent: GameRuleMeteorSwarm + id: GameRuleSpaceDustMajor + components: + - type: MeteorSwarm + announcement: station-event-space-dust-start-announcement + announcementSound: /Audio/Announcements/attention.ogg + nonDirectional: true + meteors: + MeteorSpaceDust: 1 + waves: + min: 2 + max: 3 + meteorsPerWave: + min: 8 + max: 12 + +- type: entity + parent: GameRuleMeteorSwarm + id: GameRuleMeteorSwarmSmall + components: + - type: MeteorSwarm + meteors: + MeteorSmall: 7 + MeteorMedium: 3 + +- type: entity + parent: GameRuleMeteorSwarm + id: GameRuleMeteorSwarmMedium + components: + - type: MeteorSwarm + meteors: + MeteorSmall: 3 + MeteorMedium: 6 + MeteorLarge: 1 + +- type: entity + parent: GameRuleMeteorSwarm + id: GameRuleMeteorSwarmLarge + components: + - type: MeteorSwarm + meteors: + MeteorSmall: 2 + MeteorMedium: 4 + MeteorLarge: 4 + +- type: entity + parent: GameRuleMeteorSwarm + id: GameRuleUristSwarm + components: + - type: MeteorSwarm + announcement: station-event-meteor-urist-start-announcement + announcementSound: /Audio/Announcements/attention.ogg + meteors: + MeteorUrist: 1 + waves: + min: 3 + max: 3 + meteorsPerWave: + min: 10 + max: 10 diff --git a/Resources/Prototypes/game_presets.yml b/Resources/Prototypes/game_presets.yml index 3bc6ae6208..8876468bbd 100644 --- a/Resources/Prototypes/game_presets.yml +++ b/Resources/Prototypes/game_presets.yml @@ -31,6 +31,7 @@ description: extended-description rules: - BasicStationEventScheduler + - GameRuleMeteorScheduler - BasicRoundstartVariation - type: gamePreset @@ -64,6 +65,7 @@ description: secret-description rules: - BasicStationEventScheduler + - GameRuleMeteorScheduler - type: gamePreset id: SecretGreenshift #For Admin Use: Runs Greenshift but shows "Secret" in lobby. @@ -95,6 +97,7 @@ - Traitor - SubGamemodesRule - BasicStationEventScheduler + - GameRuleMeteorScheduler - BasicRoundstartVariation - type: gamePreset @@ -121,6 +124,7 @@ - Nukeops - SubGamemodesRule - BasicStationEventScheduler + - GameRuleMeteorScheduler - BasicRoundstartVariation - type: gamePreset @@ -136,6 +140,7 @@ - Revolutionary - SubGamemodesRule - BasicStationEventScheduler + - GameRuleMeteorScheduler - BasicRoundstartVariation - type: gamePreset @@ -152,4 +157,5 @@ rules: - Zombie - BasicStationEventScheduler + - GameRuleMeteorScheduler - BasicRoundstartVariation diff --git a/Resources/Textures/Objects/Misc/meteor.rsi/big.png b/Resources/Textures/Objects/Misc/meteor.rsi/big.png new file mode 100644 index 0000000000000000000000000000000000000000..34062b9a4354a34427a60a87b5a2267a2a3a6608 GIT binary patch literal 4562 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Misc/meteor.rsi/big_cluster.png b/Resources/Textures/Objects/Misc/meteor.rsi/big_cluster.png new file mode 100644 index 0000000000000000000000000000000000000000..292c93f6e62bbe0c0e1d8e192a48637b209feed7 GIT binary patch literal 4473 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 LNkvXXu0mjfiaUtG literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Misc/meteor.rsi/big_cluster_pixel.png b/Resources/Textures/Objects/Misc/meteor.rsi/big_cluster_pixel.png new file mode 100644 index 0000000000000000000000000000000000000000..292c93f6e62bbe0c0e1d8e192a48637b209feed7 GIT binary patch literal 4473 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 LNkvXXu0mjfiaUtG literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Misc/meteor.rsi/big_pixel.png b/Resources/Textures/Objects/Misc/meteor.rsi/big_pixel.png new file mode 100644 index 0000000000000000000000000000000000000000..34062b9a4354a34427a60a87b5a2267a2a3a6608 GIT binary patch literal 4562 zcmV;@5iRbCP)k#TJJ9=*AI6Q5;d!8(+aoAKlCS6e@~1pePDX zIGpnp=PUkRwIZj=>Rm1V&{S4dbwXzlJYt;1fDb?X@bA%QzyA8` z@%rJzhyS_R8C}~See}`p?OYn086W|kfByNy`)8hc=H}<0e?ETx)KgC#UVr%Ehno*R z_~7q7m{5ss+u+9^e>{ACDJDz_TViedlMI+^6aqkak=MWf{`=weg%@5pFkvsy=1VWV zbbSBIFTWfZ&;3g8GDQyaKN!{JF%h zLXhnWwQp}GR2tCEx8Hty)by8Me)-n-JB{ResxO;N5JX4hsnxrT%{GVpB?+iJzn|T!TWz;i)JL_KmYvmTf_&vmkFI_VhvI&y7q?} zz`%W=0|rTK1}uY+c%+|BCDXR}fFwTc`#c6@A0&9~R}w%?rBAQD_S(%?UwyTR37z)j zxMe($32(ji)-77`efwS+mpEZSHlBl#u-O2BC|`d0<>C6b-+sG!_0?Ao*IS)$5+A9n zV4!MUXAZKj`X{l*M^tB@NTR;|_S=VRv`vAKDWLj^idF+sZM1tnTs3!aN&Ey-Lg!!t z%vfTE(&l$64>T)AS+!5Tmmw)cK6?*GU8BG3tM9A%?y$%SC-H%U`sSN&ZXSR9@tYT4 zeDUUwKmIt}OLHX=)@XvEZ9b>=MdCBaC!c)s*e9i(>y$iAg#W`Fg^A)4q0sN7CM97t zyJ>!x694f3`KH=F8qIUSR_N`^6Vu z95n+Fneo4=iBnpcG*I9eAFov)A-+WRd(g~#{D0E0VrYVNVoGDGK48!e4(aE6T?o1b zbXekplqA(%A}ItgjP{Xu0)el;{`&B0|2yJWZS0~S+QZD!r!;XD2mqk{Y65wWFn7M^ zgaPTyly)E1Ng#yaI}Bb1(FxU%KL)&nIdqWcseL)S<`2hgUucW(>Qn(H0V(9W5Diox zG)H_)ljHEYwg+B+{q?r*Y9Z~T?KxMHZe0K{)PS7zAzf-gU7p|`#FfarrxBS@v1U@1 zj;~4;ZE60}&f<^!KgUq}JZc}}YeE?h|L6OR{b2$=CHn(|U;?I@&-jjW5Uq*yNXE7d zs8j9)&aXxoG?wa#Bqo%)DL;TjD1|wbP*+FFtmfx0O%l{Q0kBhqYyCXgoT7p=-iYp!M#e@I(JD-X`h-b z@m<&QGsh^@dbCdS$LG8!2=G}T=O~jJP`!0J!}RV-JOs%H>N6m|16fJ{kk8T&Kzw}( zpZgt{oazqH(3~gmou!h`bJbpj24sK%fn|bzkJlOj%7i*2u9l_M0Au;i4Dp$cE{RWv z=}0=`#FB}Lj!9FL!a#ozhHQ^(o=e2z+@Q88Q9k|j)7iH1Ph6+u+LnYi;7FUEYhv`% z>^Gc@uU8KNT9mH3*WZvAWY%o7Hr7S#B8M0^O55?VX4 zbRyP4!pl&ZomwU`;#y1mL~Wz)zEw#0ZZ~kG1)|jenUE1lhg`c!$xHibgKNw{!vB|{ z)x6oxIg+1H3vAmt0LaM54XB)~Wq<3IY-(2aX=s8nBB_i>&5)}}@Y>Pr$ju61E4##i zN_dbAGU7QW6^3Uq=>tYTJiBwa-b*2?ZIAjgI}xj!7ReBEe`JDc%XNl*TL@9Lkip>` zWwwk?yDXu$wwe7!Vyo8DzV}A6`nBz@&WcFQKth#pL%}^W;*$9gq>JT~@pG~M8gzaC z-@RjBwwkz#&6#mZs08=*5^0F}+_a@iKT^LJLDuwT51f@7`Y3WSJ4V#c?i229cJzHD zc87b*fPV`9Wxz%_R}fn@a`*axOZ$aKT^Epq&k#88uVKa}1|$)f3%Ja%G$VK|sQ0sKCNpu9jxXI5>w19pT;6&G!zvGCrTRrw}+3uRDFNg*ij#d(Oz`=rCEJ zQSa3}{Y=R=bHZ1WYt4;cLj(t0S36nhbbxu?^-r8@5|j8!J{YY`rYK$yA#_sQYe$^-`M8h@^a9y|U23_Z6c{cM!Ye6C5fKS1V-yjD1JW2$bGRt(eA zYmSUeFw1KR`0f@a#I=ice!t78P&3x_A#HvV-<4hk!+X^<`uQdeFv>_3 zPa@=spqtI3%?b#T*=tLH2AR^*Ntj!N3ARZ=S0*&d%N$`ue9fNw(5B&3)Qzac44`4Y z%;t9H*z+Jw4Da0+HbLr~4fhc$fhE2vATr2+zzpV^ec%}E<5Dev_-dkl&1Yd&%r`ab zfxi?CX(dMOo@jucJ_jz`XlB4l9JW49MlwU@j1p5vaB$Vxnsp)Z6J553{i)H}5@ec* z&&liyQ)03<4>EjD zJm?zE$%T$DlWtAMH3u}SL;xMuMsq)tw?-Laf&s_``{A=te+JEYZ>XZG6&zzRMqD*ONFvDNMyz0R5X$)AwCz#P{UKR zm}{mnNONfPvV{1Z^w$z8$Ckn+3`f%sWr0cdug#9GDS3&^KG69HCn8pe)Xt>@d2h+Q zfc7N1%=cL^0b*3mOJY>h;d3gwQvRyq$zl`-E*NiE|UN>PIsF2f>8dWMIGf=9`CW zKg)J&Ad<&`jAl8KjNW(g)U>uRQVMmuUb z+K`KeE*w^<#hnJ8Xn-9`hv%}daAqlRQW^bZ6b052-#%y#s{O3Q2YIkZ7rRfHAKEhw zGWQhHoF+qEei1Irq3xZc#}_&GnO%wyXn|1?Ot3Pgo`+Dgpg|5?^K;J5RGK4+&-)C8 zbAu#_GiQGCGnr5s0qW5>DS+v4J+>y>9}yq43`kQ1oEYVfR655_?M5|GYf#ss@(c#s ztqXzGZZCDdV3ZM_OWfU3hfWsaXT-(-O%WdqH6T*}otqdbj%SS%x=opRP8QIQ&J&NsvsSl+maihn;@mlSHmoxp#an@qJ#Vpo{cBd$h9zBPO^koh!U+`m#ASv1)~cTBCk* z&rc?sp#iGI-&Ja2WrF=!V(UjZJ2|&H%dQaZoM+!$8LERmm-)M8N1s!Sci*t5#_hs@ zyC!(Ic7I=)e(&l7tV`=^bMGVW4FfV)H4~=pJ9c5f*5ZVvs7EK{@EK%OoOx_tdEZ&SE(nzPk&OjPc*<_fFKujN7aO&cbCK(|@V%3oaz2d)fC zh|KS|Vq~j{lJF8gvy?OEGxsMvG3DBsaEk%febrxTIgIRnx7i}eS`##KdZgyn>^K1NJ;YVw z)dO7fNUP z`f573$YbSGOKO5uhdi)bGnBdgmV-)IUoDx+gT(nRWmTN6n@|9*DJmNNh))vVq62^y zbi@}jAuC4m?B}VX<@61i?xF2Ac@{gL8kp%S-8t1te=d_;3ntfsa@L!(%T)hNydqS! zh#PR-)#r}(RLxM%Br8pfv+&Hr&xEL4CZTU>zG^^lO*?3_8#3t#O+l3S8Ftp++mbMu z&$A>sHt$J%kOa=?$h1lQ&l_*Nak$^5m!}VUcx_S82pNS4)3Ix^RQ}XcI`TCoNzSIH zX2E<`e^S>d3{(ks4r2AsHDSnrnuT0H>lVKy0f{%6{fC_c<51wi&QEnFsKig$hZ8 zT7Ef&bF!7w9}xcf%c@yzm_8;?Y_WK}7F-iy-Bk+X8Vr9wfLAAF6?NqiSQMQ_3g?ug z0<<8*V%yCFIYx&^rL8}=AD6_e6RszLWNA{jTDhhoatfnt|cDdRN}*58>FBTe)FuATT`abnh}ek!rHIALqM-BAa%y=x|VV)G9;B=$_# wo@@6m+PX{ZlA3szg!m^AJ#lZ6bN{LMFIdVn-cra*qyPW_07*qoM6N<$g43eSsQ>@~ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Misc/meteor.rsi/firework.png b/Resources/Textures/Objects/Misc/meteor.rsi/firework.png new file mode 100644 index 0000000000000000000000000000000000000000..1c661fc1d5b161430f403e3ffe991d3c777f3885 GIT binary patch literal 367 zcmV-#0g(QQP)XOAV0>AkCL$F+-So zAcv9wJf+`csX{bB$lMAM1>iGh{<04=5T^h~<}|fHL`N`=<8}@803hah{=E~cQ-JR- zmfM?RM?DPP0_{IUr4;zVCO>i=6}1Fbq3W z+5K$PA^;pmn9C`U)xiBHinUk|xVb~J8X6@5(AXCNC8r@f0F6TtK&gH3KN0Xm3{3%q z-4`FjqbVplh7`;%n*s>tp$JkZKn38Q`5IF-fb}E93{XNhzzuLYz#I84uX_M#-hluB N002ovPDHLkV1iH?ksSa4 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Misc/meteor.rsi/firework_pixel.png b/Resources/Textures/Objects/Misc/meteor.rsi/firework_pixel.png new file mode 100644 index 0000000000000000000000000000000000000000..24b0847b76329ec0bc8d379d3cbb98e0c128ec08 GIT binary patch literal 430 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 O4lp#htzW0>9Ql7C+KyEK literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Misc/meteor.rsi/human_pixel.png b/Resources/Textures/Objects/Misc/meteor.rsi/human_pixel.png new file mode 100644 index 0000000000000000000000000000000000000000..8207cd57d27f8c61d53be8ec7254799b275f9544 GIT binary patch literal 1844 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 TBRhnY00000NkvXXu0mjf2S$Bf literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Misc/meteor.rsi/medium_piercing.png b/Resources/Textures/Objects/Misc/meteor.rsi/medium_piercing.png new file mode 100644 index 0000000000000000000000000000000000000000..b758c2c1dd2579d2de811d7adb9e6581ca7c9809 GIT binary patch literal 3594 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 QVE_OC07*qoM6N<$f=Kz@$N&HU literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Misc/meteor.rsi/medium_piercing_pixel.png b/Resources/Textures/Objects/Misc/meteor.rsi/medium_piercing_pixel.png new file mode 100644 index 0000000000000000000000000000000000000000..b758c2c1dd2579d2de811d7adb9e6581ca7c9809 GIT binary patch literal 3594 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 QVE_OC07*qoM6N<$f=Kz@$N&HU literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Misc/meteor.rsi/medium_pixel.png b/Resources/Textures/Objects/Misc/meteor.rsi/medium_pixel.png new file mode 100644 index 0000000000000000000000000000000000000000..27b6b98ae6d86fd677de3ab2def545626896231a GIT binary patch literal 2921 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 TBRhnY00000NkvXXu0mjf2S$Bf literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Misc/meteor.rsi/medium_radioactive.png b/Resources/Textures/Objects/Misc/meteor.rsi/medium_radioactive.png new file mode 100644 index 0000000000000000000000000000000000000000..a4e0cf266cf98d4ffaa64c0f4c014c5049574d3d GIT binary patch literal 2088 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 S=!|9n0000#010qF04bvMej-i5 z1L+VTG-*Ky38DxZf+EI96Z9T8-+cePnK$o`-JRK;`R(p+cV{-)(cTg+DlZBE0N_?+ zqVs|E{zss~2l`#!O~V5N3nrfn0{|rY{}Eu$QHjF`K3glIx$CWh^}=DAlo8@gQ|ZIY zc$-EFyu0VV!{y=Qjj<5&n6ColTNLA6bDXQWQPU^g`L8+F=PtTk^kKjgFY*pQkLj!Q6(dv%FhrYqQ425&5O)|L7>jH#M2 z;+fSBk{k|)&R=FQ`Se6d`Z}kDxwjXa#5(J!%Th%n4u@^7y;@pkq|>V%im76<$13J- z-Qi7FhTltKXIyc56uf7X0gDr#oZwCrSDzevZgdSinTJ-h$8ph{?_TB`JPtAJ)*EzE z7YDHgV(rC8&rrv!8#dl_JM?aSeLw0Sb`kX(lCo4-Sh%#mE1(~MF!{q-YP`+{uWktu zNd+zWA9zs}PdTtc2-L$sS9!5B%HYC_P?b}E&pdW%$4$=RVLu(}Ut57!p@b)bbd1qf zzJU4Qr+k?TGgdi8La_g3iB6xLbsrgMR;Ce)ij98{y?N{rheqB%=$x7P^D7_~l#~IE z7t(#Ur(cbiD`Nuui2Edyl7g7 zJuZ(rmZIWwr&?g2$`Ub*&n}4}i6~0fp`nJd)kUYmR5u@f+dfG0y36mu+mahq7TiCN zw9kXR7v8HPp}}Byskz>#gAotoqwB*pu`idP&VY%h0c&*L$`$t3r}?IDzaJ5qwKBiC zvH03o3gr>>rt60?j0T-X-3ZqxLQ}F-eF#vFeFq^<7-JZ$_;lmmSX8CEqQc#u`wyon zqZgQ{hD@3qkaS0!62a+}tarni8OKlo*O}W*mnW*`c8o;MfhPfS5q-!5g3JocO^z)^ zD`${>pT}dc`O1;th5?D?ednV(oW?)E52{#+;zNwTa4V@@TA)?qVEA=HA9OInWJ7Rs z_zmEG`mdo{g(3t{$1Og#(quZTTEyA{WqXaK{F>Y*py5_Xrb7zA50M47U6(?$z=d9f z4I%8QpFK+O0dAF&OWEHiTmi9XbS#`PV+W0v}u0@<)~k>B%rbg$=xY7L|XkZoHNDqckS@VcaJq z!st+1`Wp`Je9@Zcr6@nOS|#{qx*5vD&RgQL!@waShb1;g;y?GIDNEu~8XT_6G}ry0TxvmaDF zYL~KbiJdX4sIY8sQ~}tSQhGX3VqFtGh^c!OV&2c6+|@)YDrnQ%Dj#ja3=c6*Q=Z9D z++nR}1KrhC?JDBsmPP|8nm+oOvd2C5?OMEqG@nJ7#FpH0kI==bJ7~Z+oxWiTYl-M= z;rIsW2bIK0K)BAD5)x}}rY#o}o*iB;$gETp(~~BEq)0iAmm6+ll2yMRiFfRk0Z$$S z>9>Tc<^v#(hQRnCRI;)EJ449uZFoOy;(}?Ui8-K5V8e#6%y%PqzrJ6IUI!+$MGp=n zzam7X-TM_*qNHbWqv|w#S&mfnGV^NAdB@11W%l!H!@#L7^B%5kg33xJp}4#})hc&b z!L6Am+>S@oxDFZe>pk0WQNcb#(U1;0+8C8y`rqzY$|C~9vh zm1c%uk^apfo>$+pv8{E9fZ%h%=mKgPi&SHGjyR>v!5G#^tEAu$wJ2h0uO*9B zM`n)aiCQ_?$U)}6ehcB|_&mv&Mb_u;To^Xen3s6axoFl0Ncti_Yh$*x0r=QkhCP>N zG5}k21y(m{Ma;~2Ao0j1M9(g(1WwuC7&;mO*=FbA9JV8!H198CPPoDao?3bJz_SF@ z#;Q<-sSHH_7|v5D>kj?s)E0XxgHm266^p>8OD88>*DuR(%hL>yg?L)u4fqG+#T+dc zTw~GEPEDBpuqHoQbmL3CyltNrcXq~+$U9q@eB zdn=%yud>j4tFKPUZCkw7AS+2nF&8KA`O*0E&S#nY)$k7Y?s7>vsJ?Z@Ro`_qPkRI7 xxMyFJ-xGRMm+Hfkd=5)d^)@Z}&wq#ii)C*glD%)XaPVvatj^dI>n*(F{teneebWE{ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Misc/meteor.rsi/small_flash.png b/Resources/Textures/Objects/Misc/meteor.rsi/small_flash.png new file mode 100644 index 0000000000000000000000000000000000000000..7ff19cde080fb5bb5befe72894e69b6640edca1a GIT binary patch literal 2484 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 a8~~4pBkg0FXSELBFaX}z0#}Z8rTzzr51erT literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Misc/meteor.rsi/small_flash_pixel.png b/Resources/Textures/Objects/Misc/meteor.rsi/small_flash_pixel.png new file mode 100644 index 0000000000000000000000000000000000000000..7ff19cde080fb5bb5befe72894e69b6640edca1a GIT binary patch literal 2484 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 a8~~4pBkg0FXSELBFaX}z0#}Z8rTzzr51erT literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Misc/meteor.rsi/small_pixel.png b/Resources/Textures/Objects/Misc/meteor.rsi/small_pixel.png new file mode 100644 index 0000000000000000000000000000000000000000..2c729ac87e9396c7156b483d25d26ecc9714c033 GIT binary patch literal 2458 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Misc/meteor.rsi/space_dust.png b/Resources/Textures/Objects/Misc/meteor.rsi/space_dust.png new file mode 100644 index 0000000000000000000000000000000000000000..6e13a867d8da7ada3018efeec3235b0aaa58573e GIT binary patch literal 328 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?4jBOuH;Rhv&5DEQ0M z#WAE}&f95$T+E6*F3~SEza`8&ytsmo|CwpjvI+fcizl0I3Mi{%nfOFf{nhKjjd=~y z5B4(#dFA(Pz4kneLHnXcp$5Zb4yF}x-po(t?BAWU)>rt{t)Np|luQ_!6h9Qo94@_~ z%KVZ|fTQOcpQ4JGe+zTQ1P)%ts%00QOlNGiV?Ds~Ds(YBt8QtdXoD{wkdnyX#wPn< z;%;uYP>bYq@(gM_jwj?X*kZe>YOosb=UUca>Q+MBiM{cTJy zrkb4U5ox%dA+dc=Th9~I6i26B2Yz*Np4evp@XcNR|H7|Y1l>v)UE&YtHOTIgdB7}a Xvg!Y+NERDlC@^@s`njxgN@xNA?pb~N literal 0 HcmV?d00001 -- 2.51.2