diff --git a/Content.Client/Weapons/Ranged/Systems/GunSystem.Hybrid.cs b/Content.Client/Weapons/Ranged/Systems/GunSystem.Hybrid.cs new file mode 100644 index 00000000000..d7896f5cce1 --- /dev/null +++ b/Content.Client/Weapons/Ranged/Systems/GunSystem.Hybrid.cs @@ -0,0 +1,28 @@ +using Content.Shared.Weapons.Ranged.Components; +using Content.Shared.Weapons.Ranged.Events; + +namespace Content.Client.Weapons.Ranged.Systems; + +public sealed partial class GunSystem +{ + private void InitializeHybrid() + { + SubscribeLocalEvent(OnHybridUpdateAmmo); + SubscribeLocalEvent(OnHybridControl); + } + + private void OnHybridUpdateAmmo(EntityUid uid, HybridAmmoProviderComponent component, UpdateAmmoCounterEvent args) + { + if (args.Control is DefaultStatusControl control) + { + var ev = new GetAmmoCountEvent(); + RaiseLocalEvent(uid, ref ev, false); + control.Update(ev.Count, ev.Capacity); + } + } + + private void OnHybridControl(EntityUid uid, HybridAmmoProviderComponent component, AmmoCounterControlEvent args) + { + args.Control = new DefaultStatusControl(); + } +} diff --git a/Content.Client/Weapons/Ranged/Systems/GunSystem.cs b/Content.Client/Weapons/Ranged/Systems/GunSystem.cs index 5d752761061..0a02d5772c1 100644 --- a/Content.Client/Weapons/Ranged/Systems/GunSystem.cs +++ b/Content.Client/Weapons/Ranged/Systems/GunSystem.cs @@ -116,6 +116,7 @@ public override void Initialize() InitializeMagazineVisuals(); InitializeSpentAmmo(); + InitializeHybrid(); } private void OnUpdateClientAmmo(EntityUid uid, AmmoCounterComponent ammoComp, ref UpdateClientAmmoEvent args) diff --git a/Content.Server/Weapons/Ranged/Systems/GunSystem.Hybrid.cs b/Content.Server/Weapons/Ranged/Systems/GunSystem.Hybrid.cs new file mode 100644 index 00000000000..9e578452460 --- /dev/null +++ b/Content.Server/Weapons/Ranged/Systems/GunSystem.Hybrid.cs @@ -0,0 +1,125 @@ +using Content.Shared.Weapons.Ranged.Components; +using Content.Shared.Weapons.Ranged.Events; +using Content.Server.Power.EntitySystems; +using Content.Shared.Power.Components; +using Robust.Shared.Containers; +using Robust.Shared.Map; +using Content.Server.Power.Components; + +namespace Content.Server.Weapons.Ranged.Systems; + +public sealed partial class GunSystem +{ + private void InitializeHybrid() + { + SubscribeLocalEvent(OnHybridTakeAmmo); + SubscribeLocalEvent(OnHybridGetAmmoCount); + SubscribeLocalEvent(OnHybridMagazineInsert); + SubscribeLocalEvent(OnHybridMagazineRemove); + } + + private void OnHybridMagazineInsert(EntityUid uid, HybridAmmoProviderComponent component, EntInsertedIntoContainerMessage args) + { + if (component.MagazineSlot != args.Container.ID) + return; + UpdateAmmoCount(uid); + } + + private void OnHybridMagazineRemove(EntityUid uid, HybridAmmoProviderComponent component, EntRemovedFromContainerMessage args) + { + if (component.MagazineSlot != args.Container.ID) + return; + UpdateAmmoCount(uid); + } + + private void OnHybridTakeAmmo(EntityUid uid, HybridAmmoProviderComponent component, TakeAmmoEvent args) + { + // 1. Получаем магазин из слота + var magazineEntity = GetMagazineEntity(uid); + if (magazineEntity == null) + { + args.Reason = Loc.GetString("gun-no-magazine"); + return; + } + + // 2. Проверяем патроны (BallisticAmmoProvider) + if (!TryComp(magazineEntity.Value, out var ballistic)) + { + args.Reason = Loc.GetString("gun-no-ammo"); + return; + } + + // Получаем текущее количество патронов + var currentCount = GetBallisticShots(ballistic); + if (currentCount <= 0) + { + args.Reason = Loc.GetString("gun-no-ammo"); + return; + } + + // 3. Проверяем энергию (BatteryComponent) + if (!TryComp(magazineEntity.Value, out var battery)) + { + args.Reason = Loc.GetString("gun-no-battery"); + return; + } + if (battery.CurrentCharge < component.FireCost) + { + args.Reason = Loc.GetString("gun-not-enough-energy"); + return; + } + + // 4. Тратим патрон: удаляем последний патрон из контейнера или уменьшаем UnspawnedCount + if (ballistic.Entities.Count > 0) + { + var lastEntity = ballistic.Entities[^1]; + ballistic.Entities.RemoveAt(ballistic.Entities.Count - 1); + Containers.Remove(lastEntity, ballistic.Container); + QueueDel(lastEntity); // Удаляем сущность патрона (гильза не нужна) + } + else if (ballistic.UnspawnedCount > 0) + { + ballistic.UnspawnedCount--; + } + else + { + args.Reason = Loc.GetString("gun-no-ammo"); + return; + } + + // 5. Тратим энергию + _battery.UseCharge(magazineEntity.Value, component.FireCost); + + // 6. Создаём снаряд в координатах выстрела + var fromCoordinates = args.Coordinates; + var mapCoords = fromCoordinates.ToMap(EntityManager, TransformSystem); + var projectile = Spawn(component.Prototype, mapCoords); + + // 7. Добавляем снаряд в список для выстрела (основной GunSystem обработает его) + args.Ammo.Add((projectile, EnsureShootable(projectile))); + + // 8. Обновляем счётчик на клиенте + Dirty(magazineEntity.Value, ballistic); + UpdateAmmoCount(uid); + } + + private void OnHybridGetAmmoCount(EntityUid uid, HybridAmmoProviderComponent component, ref GetAmmoCountEvent args) + { + var magazineEntity = GetMagazineEntity(uid); + if (magazineEntity != null && TryComp(magazineEntity.Value, out var ballistic)) + { + args.Count = GetBallisticShots(ballistic); + args.Capacity = ballistic.Capacity; + } + else + { + args.Count = 0; + args.Capacity = 0; + } + } + + private int GetBallisticShots(BallisticAmmoProviderComponent component) + { + return component.UnspawnedCount + component.Entities.Count; + } +} diff --git a/Content.Server/Weapons/Ranged/Systems/GunSystem.cs b/Content.Server/Weapons/Ranged/Systems/GunSystem.cs index fcf8018488d..36872760b9e 100644 --- a/Content.Server/Weapons/Ranged/Systems/GunSystem.cs +++ b/Content.Server/Weapons/Ranged/Systems/GunSystem.cs @@ -65,6 +65,7 @@ public override void Initialize() SubscribeLocalEvent(OnBallisticPrice); Subs.CVar(_config, PerformanceCVars.GunPredictionAabbEnlargement, v => _lagCompAabbEnlargement = v, true); Subs.CVar(_config, PerformanceCVars.GunPredictionHitscanSearchPadding, v => _lagCompHitscanSearchPadding = v, true); + InitializeHybrid(); } private void OnBallisticPrice(EntityUid uid, BallisticAmmoProviderComponent component, ref PriceCalculationEvent args) @@ -170,11 +171,7 @@ void MarkPredicted(EntityUid uid) if (!cartridge.Spent) { var uid = Spawn(cartridge.Prototype, fromEnt); - // #Misfits Add: применяем бонус к снаряду - ApplyBonusDamageToProjectile(uid, gunUid); - base.ShootOrThrow(uid, mapDirection, gunVelocity, gun, gunUid, user); - shotProjectiles.Add(uid); - MarkPredicted(uid); + CreateAndFireProjectiles(uid, cartridge); RaiseLocalEvent(ent!.Value, new AmmoShotEvent() { @@ -192,24 +189,26 @@ void MarkPredicted(EntityUid uid) Audio.PlayPredicted(gun.SoundEmpty, gunUid, user); } + // Something like ballistic might want to leave it in the container still if (!cartridge.DeleteOnSpawn && !Containers.IsEntityInContainer(ent!.Value)) EjectCartridge(ent.Value, angle); Dirty(ent!.Value, cartridge); break; - + // Ammo shoots itself case AmmoComponent newAmmo: if (ent == null) break; // #Sirius Change: используем обновлённую функцию с бонусом CreateAndFireProjectiles(ent.Value, newAmmo); - break; + break; case HitscanPrototype hitscan: if (TryResolveGunHitscan(gunUid, out var resolvedHitscan)) hitscan = resolvedHitscan; EntityUid? lastHit = null; + var from = fromMap; var fromEffect = GetShotEffectCoordinates(fromMap); var dir = mapDirection.Normalized(); @@ -236,6 +235,7 @@ void MarkPredicted(EntityUid uid) } lastHit = hit; + FireEffects(fromEffect, distance, dir.Normalized().ToAngle(), hitscan, hit, userSession); var ev = new HitScanReflectAttemptEvent(user, gunUid, hitscan.Reflective, dir, false); @@ -382,7 +382,6 @@ void CreateAndFireProjectiles(EntityUid ammoEnt, AmmoComponent ammoComp) return shotProjectiles; } - private bool TryGetHitscanResult( MapCoordinates from, Vector2 direction, diff --git a/Content.Shared/Weapons/Ranged/Components/AmmoComponent.cs b/Content.Shared/Weapons/Ranged/Components/AmmoComponent.cs index 3e1111a97d1..fc288a3ac5b 100644 --- a/Content.Shared/Weapons/Ranged/Components/AmmoComponent.cs +++ b/Content.Shared/Weapons/Ranged/Components/AmmoComponent.cs @@ -13,7 +13,7 @@ public partial class AmmoComponent : Component, IShootable { // Muzzle flash stored on ammo because if we swap a gun to whatever we may want to override it. - [ViewVariables(VVAccess.ReadWrite), DataField("muzzleFlash", customTypeSerializer:typeof(PrototypeIdSerializer))] + [ViewVariables(VVAccess.ReadWrite), DataField("muzzleFlash", customTypeSerializer: typeof(PrototypeIdSerializer))] public string? MuzzleFlash = "MuzzleFlashEffect"; } diff --git a/Content.Shared/Weapons/Ranged/Components/HybridAmmoProviderComponent.cs b/Content.Shared/Weapons/Ranged/Components/HybridAmmoProviderComponent.cs new file mode 100644 index 00000000000..b58fda75626 --- /dev/null +++ b/Content.Shared/Weapons/Ranged/Components/HybridAmmoProviderComponent.cs @@ -0,0 +1,29 @@ +using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; +using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; + +namespace Content.Shared.Weapons.Ranged.Components; + +[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] +public sealed partial class HybridAmmoProviderComponent : Component +{ + [DataField("proto", required: true, customTypeSerializer: typeof(PrototypeIdSerializer))] + public string Prototype = default!; + + [DataField("capacity"), AutoNetworkedField] + public int Capacity = 10; + + [DataField("count"), AutoNetworkedField] + public int Count = 10; + + [DataField("fireCost")] + public float FireCost = 100f; + + // Ссылка на батарею (если null, используем свой uid) + [DataField("battery")] + public EntityUid? BatteryEntity; + + // Ссылка на слот магазина (для автоматической загрузки патронов) + [DataField("magazineSlot")] + public string? MagazineSlot; +} diff --git a/Resources/Maps/N14/SunnyvaleSurface.yml b/Resources/Maps/N14/SunnyvaleSurface.yml index 85bf70d66bb..7574a92702c 100644 --- a/Resources/Maps/N14/SunnyvaleSurface.yml +++ b/Resources/Maps/N14/SunnyvaleSurface.yml @@ -1146355,13 +1146355,6 @@ entities: - type: Transform pos: 150.5,181.5 parent: 1 -- proto: N14ContractBadgeBronze - entities: - - uid: 154397 - components: - - type: Transform - pos: 117.60662,9.527673 - parent: 1 - proto: N14ControlTerminalButton entities: - uid: 154398 diff --git a/Resources/Prototypes/Corvax/Entities/Clothing/OuterClothing/powerarmor.yml b/Resources/Prototypes/Corvax/Entities/Clothing/OuterClothing/powerarmor.yml index 2c213c40f1b..ea6fd756e22 100644 --- a/Resources/Prototypes/Corvax/Entities/Clothing/OuterClothing/powerarmor.yml +++ b/Resources/Prototypes/Corvax/Entities/Clothing/OuterClothing/powerarmor.yml @@ -32,17 +32,22 @@ - type: N14PowerArmor requiresProficiency: false - type: PowerArmorIntegrity - maxIntegrity: 450 - brokenBleedthroughRatio: 1.0 - disableServosLock: true - - type: Armor + disableServosLock: true + - type: Armor modifiers: coefficients: - Blunt: 0.60 - Slash: 0.60 - Piercing: 0.60 - Heat: 0.60 - Radiation: 0.60 + Blunt: 0.45 + Slash: 0.45 + Piercing: 0.45 + Heat: 0.3 + Caustic: 0.65 + Radiation: 0.8 + flatReductions: #sirius change + Blunt: 5 + Slash: 5 + Piercing: 5 + Heat: 8 + Caustic: 2 - type: ClothingSpeedModifier # #Misfits Tweak - standalone 35% slowdown, no fusion core required walkModifier: 0.70 sprintModifier: 0.70 diff --git a/Resources/Prototypes/_Misfits/Entities/Objects/Misc/campfire_fuel.yml b/Resources/Prototypes/_Misfits/Entities/Objects/Misc/campfire_fuel.yml index bf6309dbfca..b8c278d26ef 100644 --- a/Resources/Prototypes/_Misfits/Entities/Objects/Misc/campfire_fuel.yml +++ b/Resources/Prototypes/_Misfits/Entities/Objects/Misc/campfire_fuel.yml @@ -8,7 +8,7 @@ parent: BaseItem components: - type: Sprite - sprite: Objects/Materials/materials.rsi + sprite: _Nuclear14/Objects/Misc/materials.rsi state: firewood # #Misfits Fix - Natural/wood.rsi does not exist; wood state in materials.rsi used instead - type: Item size: Normal diff --git a/Resources/Prototypes/_Misfits/Roles/Jobs/NCR/ncr_heavy_trooper.yml b/Resources/Prototypes/_Misfits/Roles/Jobs/NCR/ncr_heavy_trooper.yml index 0511b575f43..b1a8f8d3f3f 100644 --- a/Resources/Prototypes/_Misfits/Roles/Jobs/NCR/ncr_heavy_trooper.yml +++ b/Resources/Prototypes/_Misfits/Roles/Jobs/NCR/ncr_heavy_trooper.yml @@ -46,14 +46,10 @@ shoes: N14ClothingBootsCombatFilled ears: N14ClothingHeadsetNCR # NCR radio earpiece belt: ClothingBeltNCR - pocket1: N14WeaponMinigun # #Misfits Tweak - downgraded to minigun again -bill pocket2: RadioHandheld id: N14IDNCRDogtagWS # Specialist-tier dogtag innerClothingSkirt: N14ClothingOfficerUniformNCRDesert satchel: N14ClothingBackpackSatchelNCRFilled - storage: - back: - - N14MagazineMinigun5mm # extra 5mm box -bill - type: playTimeTracker id: NCRHeavyTrooper diff --git a/Resources/Prototypes/_Nuclear14/Entities/Clothing/OuterClothing/powerarmor.yml b/Resources/Prototypes/_Nuclear14/Entities/Clothing/OuterClothing/powerarmor.yml index 1846d41aef4..5a8fa7d2a8f 100644 --- a/Resources/Prototypes/_Nuclear14/Entities/Clothing/OuterClothing/powerarmor.yml +++ b/Resources/Prototypes/_Nuclear14/Entities/Clothing/OuterClothing/powerarmor.yml @@ -6,14 +6,11 @@ components: - type: N14PowerArmor # #Misfits Change Add: Marks this and all child power armor variants. Used by CarryingSystem to block non-PA users from picking up PA wearers. - type: N14BosBackpackSlot # #Misfits Add: All power armor gets an extra backpack slot — fusion core occupies the normal back slot - # #Misfits Add: Power armor integrity — separate HP pool. While intact, 98.5% of incoming + # #Misfits Add: Power armor rityinteg — separate HP pool. While intact, 98.5% of incoming # damage is absorbed by the armor and only 1.5% bleeds through to the wearer. # At 0 integrity the ArmorComponent is stripped and the wearer takes full damage. # Repair with a welder to restore the pool and re-enable absorption. - type: Damageable - - type: PowerArmorIntegrity - maxIntegrity: 300 # #Misfits Tweak: By Bill, 500 durability for a little more standing power. - brokenBleedthroughRatio: 1.0 # #Misfits Add - when broken, only armor coefficients apply - type: Repairable fuelCost: 5 doAfterDelay: 8 # #Misfits Tweak - Increased weld repair time from 5s to 30s to 18s; 5s was too fast for combat balance, 30 is too slow, current proposal is 18. @@ -36,18 +33,18 @@ - type: Armor # #Misfits Tweak: Added Heat and Piercing coefficients — pre-reduces damage before integrity absorption so PA stays above Centurion/Vet.Ranger at all integrity levels. modifiers: coefficients: - Blunt: 0.6 - Slash: 0.6 - Piercing: 0.65 - Heat: 0.4 + Blunt: 0.45 + Slash: 0.45 + Piercing: 0.5 + Heat: 0.3 Caustic: 0.65 Radiation: 0.4 flatReductions: #sirius change - Blunt: 4 - Slash: 4 - Piercing: 4 - Heat: 8 - Caustic: 4 + Blunt: 8 + Slash: 8 + Piercing: 8 + Heat: 10 + Caustic: 5 Radiation: 4 - type: ClothingSpeedModifier walkModifier: 0.2 @@ -89,9 +86,9 @@ - type: PowerArmorBrace # #Misfits Change Add: Grants wearer a hotkey to brace (anchor in place, immobile but can fire, slight damage resistance). 5-second cooldown between stance changes. activeModifiers: coefficients: - Blunt: 0.85 - Slash: 0.85 - Piercing: 0.85 + Blunt: 0.8 + Slash: 0.8 + Piercing: 0.8 - type: EmitsSoundOnMove # Corvax-Change soundCollection: collection: N14FootstepPowerArmor @@ -107,9 +104,6 @@ name: t-51 power armor description: An old suit of T-51 Power Armor. It looks more advanced than your common everyday T-45. components: - - type: PowerArmorIntegrity - brokenBleedthroughRatio: 1.0 # #Misfits Add - when broken, only armor coefficients apply - maxIntegrity: 380 # #Misfits - type: Sprite sprite: _Nuclear14/Clothing/OuterClothing/PowerArmor/t51.rsi - type: Clothing @@ -117,12 +111,19 @@ - type: Armor # #Misfits Tweak: Added Heat and Piercing coefficients — pre-reduces damage before integrity absorption so PA stays above Centurion/Vet.Ranger at all integrity levels. modifiers: coefficients: - Blunt: 0.60 - Slash: 0.60 - Piercing: 0.60 - Heat: 0.60 + Blunt: 0.45 + Slash: 0.45 + Piercing: 0.5 + Heat: 0.3 Caustic: 0.65 - Radiation: 0.6 + Radiation: 0.4 + flatReductions: #sirius change + Blunt: 8 + Slash: 8 + Piercing: 8 + Heat: 10 + Caustic: 5 + Radiation: 4 - type: UserInterface interfaces: enum.ToggleClothingUiKey.Key: @@ -142,9 +143,6 @@ name: Experimental X-01 Power Armor description: A set of X-01 Power Armor made to fit a Supermutant, In exchange its less durable then a normal X-01 components: - - type: PowerArmorIntegrity - brokenBleedthroughRatio: 1.0 # #Misfits Add - when broken, only armor coefficients apply - maxIntegrity: 300 # #Misfits Tweak: By Bill, 500 durability. - type: Sprite sprite: _Misfits/Clothing/OuterClothing/PowerArmor/Mutant_PA.rsi - type: Clothing @@ -154,13 +152,18 @@ - type: Armor # #Misfits Tweak: Added Heat and Piercing coefficients — pre-reduces damage before integrity absorption so PA stays above Centurion/Vet.Ranger at all integrity levels. modifiers: coefficients: - Blunt: 0.70 - Slash: 0.70 - Piercing: 0.70 - Heat: 0.70 - Caustic: 0.75 - Radiation: 0.6 - - type: Unremoveable # This is your casket. Service guarantees citizenship. + Blunt: 0.4 + Slash: 0.4 + Piercing: 0.6 + Heat: 0.3 + Caustic: 0.5 + Radiation: 0.5 + flatReductions: #sirius change + Blunt: 5 + Slash: 5 + Piercing: 4 + Heat: 8 + Caustic: 4 - type: Tag tags: - SuperMutantWearable @@ -183,9 +186,6 @@ name: t-45 power armor [Bos] description: An old suit of T-45 Power Armor. It's amazing these still exist. components: - - type: PowerArmorIntegrity - brokenBleedthroughRatio: 1.0 # #Misfits Add - when broken, only armor coefficients apply - maxIntegrity: 400 - type: Sprite sprite: _Nuclear14/Clothing/OuterClothing/PowerArmor/t45.rsi - type: Clothing @@ -193,12 +193,19 @@ - type: Armor # #Misfits Tweak: Added Heat and Piercing coefficients — pre-reduces damage before integrity absorption so PA stays above Centurion/Vet.Ranger at all integrity levels. modifiers: coefficients: - Blunt: 0.7 - Slash: 0.7 - Piercing: 0.7 - Heat: 0.7 - Caustic: 0.7 - Radiation: 0.6 + Blunt: 0.4 + Slash: 0.4 + Piercing: 0.45 + Heat: 0.3 + Caustic: 0.6 + Radiation: 0.4 + flatReductions: #sirius change + Blunt: 8 + Slash: 8 + Piercing: 8 + Heat: 10 + Caustic: 5 + Radiation: 4 - type: UserInterface interfaces: enum.ToggleClothingUiKey.Key: @@ -216,9 +223,6 @@ name: t-60 power armor description: A suit of T-60 Power Armor. The T-60 series of power armor was designed to eventually replace the T-51 as the pinnacle of powered armor technology. It however suffered from a minor drawback in its armor placement, making it somewhat less armored. components: - - type: PowerArmorIntegrity - brokenBleedthroughRatio: 1.0 # #Misfits Add - when broken, only armor coefficients apply - maxIntegrity: 345 # #Misfits Tweak: By Bill, 545 durability. - type: Sprite sprite: _Nuclear14/Clothing/OuterClothing/PowerArmor/t60.rsi - type: Clothing @@ -226,18 +230,18 @@ - type: Armor # #Misfits Tweak: Added Heat and Piercing coefficients — pre-reduces damage before integrity absorption so PA stays above Centurion/Vet.Ranger at all integrity levels. modifiers: coefficients: - Blunt: 0.65 - Slash: 0.65 - Piercing: 0.65 - Heat: 0.65 - Caustic: 0.65 - Radiation: 0.6 + Blunt: 0.45 + Slash: 0.45 + Piercing: 0.45 + Heat: 0.25 + Caustic: 0.6 + Radiation: 0.4 flatReductions: #sirius change - Blunt: 6 - Slash: 6 - Piercing: 6 - Heat: 10 - Caustic: 5 + Blunt: 9 + Slash: 9 + Piercing: 9 + Heat: 12 + Caustic: 6 Radiation: 4 - type: UserInterface interfaces: @@ -276,11 +280,28 @@ sprite: _Nuclear14/Clothing/OuterClothing/PowerArmor/t60tesla.rsi - type: Clothing sprite: _Nuclear14/Clothing/OuterClothing/PowerArmor/t60tesla.rsi + - type: Armor + modifiers: + coefficients: + Blunt: 0.45 + Slash: 0.45 + Piercing: 0.45 + Heat: 0.2 + Shock: 0.1 + Caustic: 0.6 + Radiation: 0.4 + flatReductions: #sirius change + Blunt: 9 + Slash: 9 + Piercing: 9 + Heat: 12 + Caustic: 6 + Radiation: 4 - type: Reflect # #Misfits Change Tweak: Tesla coils deflect energy and small-caliber rounds at 30% (innate). Heavy rounds still penetrate. reflects: - SmallCaliber - Energy - reflectProb: 0.40 + reflectProb: 0.5 innate: true spread: 90 - type: UserInterface @@ -300,9 +321,6 @@ name: X-01 power armor description: The standard issue Power Armor model for Enclave troopers. It offers an advanced sensors suite and improved defensive capabilities compared to standard pre-war models. components: - - type: PowerArmorIntegrity - brokenBleedthroughRatio: 1.0 # #Misfits Add - when broken, only armor coefficients apply - maxIntegrity: 360 # #Misfits Tweak: By Bill, 460 a little better than T60 but not T51. - type: Sprite sprite: _Nuclear14/Clothing/OuterClothing/PowerArmor/advanced1.rsi - type: Clothing @@ -310,12 +328,19 @@ - type: Armor # #Misfits Tweak: Added Heat and Piercing coefficients — pre-reduces damage before integrity absorption so PA stays above Centurion/Vet.Ranger at all integrity levels. modifiers: coefficients: - Blunt: 0.65 - Slash: 0.65 - Piercing: 0.65 - Heat: 0.65 - Caustic: 0.6 - Radiation: 0.6 + Blunt: 0.4 + Slash: 0.4 + Piercing: 0.4 + Heat: 0.2 + Caustic: 0.4 + Radiation: 0.4 + flatReductions: #sirius change + Blunt: 10 + Slash: 10 + Piercing: 10 + Heat: 14 + Caustic: 8 + Radiation: 6 - type: ExplosionResistance damageCoefficient: 0.10 # #Misfits Tweak: X-01 blast resistance — ~12 HP at ground zero - type: UserInterface @@ -344,9 +369,6 @@ name: X-02 power armor description: The next generation in Power Armor technology. X-02 is a more lightweight, sleek design than the X-01, offering the wearer unparalleled mobility. components: - - type: PowerArmorIntegrity - brokenBleedthroughRatio: 1.0 # #Misfits Add - when broken, only armor coefficients apply - maxIntegrity: 385 # #Misfits Tweak: X-02 durability. - type: Sprite sprite: _Nuclear14/Clothing/OuterClothing/PowerArmor/advanced2.rsi - type: Clothing @@ -357,19 +379,19 @@ - type: Armor # #Misfits Tweak: Added Heat and Piercing coefficients — pre-reduces damage before integrity absorption so PA stays above Centurion/Vet.Ranger at all integrity levels. modifiers: coefficients: - Blunt: 0.65 - Slash: 0.65 - Piercing: 0.65 - Heat: 0.65 + Blunt: 0.4 + Slash: 0.4 + Piercing: 0.4 + Heat: 0.25 Caustic: 0.6 - Radiation: 0.6 + Radiation: 0.4 flatReductions: #sirius change - Blunt: 8 - Slash: 8 - Piercing: 8 + Blunt: 10 + Slash: 10 + Piercing: 10 Heat: 12 - Caustic: 6 - Radiation: 4 + Caustic: 8 + Radiation: 6 - type: ExplosionResistance damageCoefficient: 0.10 # #Misfits Tweak: X-02 blast resistance — ~12 HP at ground zero - type: UserInterface @@ -409,8 +431,6 @@ name: hellfire power armor description: A deep black suit of Enclave-manufactured heavy power armor based on pre-war designs such as the T-51 and improving off of data gathered by post-war designs such as the X-01. Most commonly fielded on the East Coast, no suit rivals its strength. components: - - type: PowerArmorIntegrity - maxIntegrity: 400 # #Misfits Tweak: Hellfire durability. - type: Sprite sprite: _Nuclear14/Clothing/OuterClothing/PowerArmor/hellfire.rsi - type: Clothing @@ -418,12 +438,19 @@ - type: Armor # #Misfits Tweak: Added Heat and Piercing coefficients — pre-reduces damage before integrity absorption so PA stays above Centurion/Vet.Ranger at all integrity levels. modifiers: coefficients: - Blunt: 0.60 - Slash: 0.60 - Piercing: 0.60 - Heat: 0.50 - Caustic: 0.50 - Radiation: 0.50 + Blunt: 0.4 + Slash: 0.4 + Piercing: 0.4 + Heat: 0.2 + Caustic: 0.4 + Radiation: 0.4 + flatReductions: #sirius change + Blunt: 12 + Slash: 12 + Piercing: 10 + Heat: 18 + Caustic: 10 + Radiation: 6 - type: ExplosionResistance damageCoefficient: 0.06 # #Misfits Tweak: Hellfire designed for combat — best blast resistance, ~7 HP at ground zero - type: UserInterface @@ -452,9 +479,6 @@ name: raider power armor description: Terrifying, robust, spiky. Everything a Raider needs in a power armor suit. components: - - type: PowerArmorIntegrity - brokenBleedthroughRatio: 1.0 # #Misfits Add - when broken, only armor coefficients apply - maxIntegrity: 200 # #Misfits Tweak: +150 flat integrity buff - type: Sprite sprite: _Nuclear14/Clothing/OuterClothing/PowerArmor/raider.rsi - type: Clothing @@ -462,14 +486,21 @@ - type: Armor # #Misfits Tweak: Added Heat and Piercing coefficients — pre-reduces damage before integrity absorption so PA stays above Centurion/Vet.Ranger at all integrity levels. modifiers: coefficients: - Blunt: 0.75 - Slash: 0.75 - Piercing: 0.75 - Heat: 0.75 - Caustic: 0.75 - Radiation: 0.65 + Blunt: 0.5 + Slash: 0.5 + Piercing: 0.55 + Heat: 0.4 + Caustic: 0.7 + Radiation: 0.3 + flatReductions: #sirius change + Blunt: 4 + Slash: 4 + Piercing: 4 + Heat: 6 + Caustic: 4 + Radiation: 4 - type: ExplosionResistance - damageCoefficient: 0.20 # #Misfits Tweak: Raider PA cobbled together — weakest blast protection, ~24 HP at ground zero + damageCoefficient: 0.40 # #Misfits Tweak: Raider PA cobbled together — weakest blast protection, ~24 HP at ground zero - type: UserInterface interfaces: enum.ToggleClothingUiKey.Key: @@ -496,9 +527,6 @@ name: Midwest Power Armor description: A unknown model of power armor manufactured by the Brotherhood of Steel. It supports a lighter plating than the normal but is more ergonomic, allowing easier movement. components: - - type: PowerArmorIntegrity - brokenBleedthroughRatio: 1.0 # #Misfits Add - when broken, only armor coefficients apply - maxIntegrity: 300 # #Misfits Tweak: +150 flat integrity buff - type: Sprite sprite: _Nuclear14/Clothing/OuterClothing/PowerArmor/midwest.rsi - type: Clothing @@ -537,9 +565,6 @@ name: Midwest Commander Power Armor description: A unknown model of power armor manufactured by the Brotherhood of Steel. This modified version is commonly used by high-ranking Brotherhood of Steel Paladins. components: - - type: PowerArmorIntegrity - brokenBleedthroughRatio: 1.0 # #Misfits Add - when broken, only armor coefficients apply - maxIntegrity: 385 # #Misfits - type: Sprite sprite: _Nuclear14/Clothing/OuterClothing/PowerArmor/midwestcommander.rsi - type: Clothing @@ -557,9 +582,6 @@ name: t-51bc paladin commander description: The pinnacle of pre-war technology appropriated by the Brotherhood of Steel. Commonly worn by Paladin Commanders. components: - - type: PowerArmorIntegrity - brokenBleedthroughRatio: 1.0 # #Misfits Add - when broken, only armor coefficients apply - maxIntegrity: 390 # #Misfits - type: Sprite sprite: _Nuclear14/Clothing/OuterClothing/PowerArmor/t51bc.rsi - type: Clothing @@ -567,12 +589,19 @@ - type: Armor # #Misfits Tweak: Added Heat and Piercing coefficients — pre-reduces damage before integrity absorption so PA stays above Centurion/Vet.Ranger at all integrity levels. modifiers: coefficients: - Blunt: 0.575 - Slash: 0.575 - Piercing: 0.575 - Heat: 0.575 - Caustic: 0.675 - Radiation: 0.6 + Blunt: 0.4 + Slash: 0.4 + Piercing: 0.45 + Heat: 0.25 + Caustic: 0.6 + Radiation: 0.4 + flatReductions: #sirius change + Blunt: 9 + Slash: 9 + Piercing: 9 + Heat: 12 + Caustic: 6 + Radiation: 4 - type: TemperatureProtection coefficient: 0.5 - type: ExplosionResistance @@ -612,9 +641,6 @@ name: t-45 salvaged NCR power armor description: Originally existing as T-45d power armor, it was recovered by and repurposed for use within the NCR. components: - - type: PowerArmorIntegrity - brokenBleedthroughRatio: 1.0 # #Misfits Add - when broken, only armor coefficients apply - maxIntegrity: 225 # #Misfits - type: Sprite sprite: _Nuclear14/Clothing/OuterClothing/PowerArmor/t45ncr.rsi - type: Clothing @@ -622,16 +648,22 @@ - type: Armor # #Misfits Tweak: Added Heat and Piercing coefficients — pre-reduces damage before integrity absorption so PA stays above Centurion/Vet.Ranger at all integrity levels. modifiers: coefficients: - Blunt: 0.80 - Slash: 0.80 - Piercing: 0.80 - Heat: 0.80 - Caustic: 0.75 - Radiation: 0.65 + Blunt: 0.45 + Slash: 0.45 + Piercing: 0.5 + Heat: 0.3 + Caustic: 0.65 + Radiation: 0.8 + flatReductions: #sirius change + Blunt: 4 + Slash: 4 + Piercing: 4 + Heat: 6 + Caustic: 2 - type: TemperatureProtection coefficient: 0.55 - type: ExplosionResistance - damageCoefficient: 0.20 # #Misfits Tweak: NCR salvaged PA — weakest blast protection after raider, ~24 HP at ground zero + damageCoefficient: 0.40 # #Misfits Tweak: NCR salvaged PA — weakest blast protection after raider, ~24 HP at ground zero - type: UserInterface interfaces: enum.ToggleClothingUiKey.Key: @@ -645,12 +677,12 @@ - type: Reflect # #Misfits Change Tweak: Salvaged NCR T-45 ricochets small-caliber rounds at 30% (innate). reflects: - SmallCaliber - reflectProb: 0.4 + reflectProb: 0.35 innate: true spread: 90 - type: ClothingSpeedModifier #sirius change - walkModifier: 0.8 - sprintModifier: 0.8 + walkModifier: 0.75 + sprintModifier: 0.75 - type: entity parent: N14ClothingOuterPowerArmorT51 @@ -665,12 +697,19 @@ - type: Armor # #Misfits Tweak: Added Heat and Piercing coefficients — pre-reduces damage before integrity absorption so PA stays above Centurion/Vet.Ranger at all integrity levels. modifiers: coefficients: - Blunt: 0.675 - Slash: 0.675 - Piercing: 0.675 - Heat: 0.675 - Caustic: 0.75 - Radiation: 0.6 + Blunt: 0.4 + Slash: 0.4 + Piercing: 0.45 + Heat: 0.25 + Caustic: 0.6 + Radiation: 0.4 + flatReductions: #sirius change + Blunt: 9 + Slash: 9 + Piercing: 9 + Heat: 12 + Caustic: 6 + Radiation: 4 - type: ExplosionResistance damageCoefficient: 0.12 # #Misfits Tweak: Canadian Shield blast resistance — ~14 HP at ground zero - type: Reflect # #Misfits Change Tweak: T-51bc "Canadian Shield" ricochets small-caliber rounds at 30% (innate). @@ -686,9 +725,6 @@ name: modified T-51 power armor description: A modified set of T-51 power armor, it seems to have some slight upgrades over the pre-war model and is in the colours of the Washington Brotherhood. components: - - type: PowerArmorIntegrity - brokenBleedthroughRatio: 1.0 # #Misfits Add - when broken, only armor coefficients apply - maxIntegrity: 250 # #Misfits Tweak: +150 flat integrity buff - type: Sprite sprite: _Nuclear14/Clothing/OuterClothing/PowerArmor/t51wash.rsi - type: Clothing @@ -696,12 +732,19 @@ - type: Armor # #Misfits Tweak: Added Heat and Piercing coefficients — pre-reduces damage before integrity absorption so PA stays above Centurion/Vet.Ranger at all integrity levels. modifiers: coefficients: - Blunt: 0.70 - Slash: 0.70 - Piercing: 0.70 - Heat: 0.70 - Caustic: 0.75 - Radiation: 0.6 + Blunt: 0.45 + Slash: 0.45 + Piercing: 0.5 + Heat: 0.3 + Caustic: 0.65 + Radiation: 0.4 + flatReductions: #sirius change + Blunt: 8 + Slash: 8 + Piercing: 8 + Heat: 10 + Caustic: 5 + Radiation: 4 - type: ExplosionResistance damageCoefficient: 0.12 # #Misfits Tweak: Washington BoS T-51 blast resistance — ~14 HP at ground zero - type: UserInterface @@ -740,8 +783,7 @@ description: A pinnacle of pre-war military engineering, the T-51b was standard issue for front-line infantry units during the Sino-American conflict. This suit's fusion-powered servos and composite plating have withstood the test of time. components: - type: PowerArmorIntegrity - brokenBleedthroughRatio: 1.0 # #Misfits Add - when broken, only armor coefficients apply - maxIntegrity: 385 # #Misfits Tweak: By Bill, a little better than T51 but not as good as T51BC + disableServosLock: true - type: Sprite sprite: _Nuclear14/Clothing/OuterClothing/PowerArmor/t51washelite.rsi - type: Clothing @@ -749,12 +791,19 @@ - type: Armor # #Misfits Tweak: Added Heat and Piercing coefficients — pre-reduces damage before integrity absorption so PA stays above Centurion/Vet.Ranger at all integrity levels. modifiers: coefficients: - Blunt: 0.575 - Slash: 0.575 - Piercing: 0.575 - Heat: 0.575 - Caustic: 0.575 - Radiation: 0.6 + Blunt: 0.4 + Slash: 0.4 + Piercing: 0.45 + Heat: 0.25 + Caustic: 0.6 + Radiation: 0.4 + flatReductions: #sirius change + Blunt: 9 + Slash: 9 + Piercing: 9 + Heat: 12 + Caustic: 6 + Radiation: 4 - type: UserInterface interfaces: enum.ToggleClothingUiKey.Key: diff --git a/Resources/Prototypes/_Nuclear14/Entities/Objects/Weapons/Guns/Ammunition/Magazines/2mmEC.yml b/Resources/Prototypes/_Nuclear14/Entities/Objects/Weapons/Guns/Ammunition/Magazines/2mmEC.yml index 837b360f2cb..8be48529d32 100644 --- a/Resources/Prototypes/_Nuclear14/Entities/Objects/Weapons/Guns/Ammunition/Magazines/2mmEC.yml +++ b/Resources/Prototypes/_Nuclear14/Entities/Objects/Weapons/Guns/Ammunition/Magazines/2mmEC.yml @@ -24,7 +24,7 @@ map: ["enum.GunVisualLayers.Base"] - state: mag-1 map: ["enum.GunVisualLayers.Mag"] - scale: 0.4, 0.42 + scale: 0.45, 0.42 - type: MagazineVisuals magState: mag steps: 2 @@ -40,7 +40,7 @@ proto: N14Cartridge2mmEC - type: entity - id: N14MagazineRifle2mmEC + id: N14MagazineRifle2mmECOld name: Rifle magazine (2mmEC) parent: N14BaseMagazine2mmECPistol components: @@ -82,3 +82,60 @@ magState: mag steps: 2 zeroVisible: false + +- type: entity + id: N14MagazineRifle2mmEC + name: magazine (2mmEC) + description: A high-density energy cell for gauss weapons, providing both electrical charge and electromagnetic pulse to propel projectiles. + parent: BaseItem # или BaseMagazineRifle + components: + - type: Sprite + netsync: false + sprite: _Nuclear14/Objects/Weapons/Guns/Ammunition/Magazines/2mmEC/2mmriflemag.rsi + layers: + - state: base + map: ["enum.GunVisualLayers.Base"] + - state: mag-1 + map: ["enum.GunVisualLayers.Mag"] + scale: 0.60, 0.60 + - type: Tag + tags: + - N14MagazineRifle2mmEC + - N14AmmoCell + - type: Battery + maxCharge: 1000 + startingCharge: 1000 + # УДАЛЯЕМ ProjectileBatteryAmmoProvider + - type: BallisticAmmoProvider + mayTransfer: true + whitelist: + tags: + - N14Cartridge2mmEC + capacity: 20 + unspawnedCount: 20 + soundInsert: + path: /Audio/_Nuclear14/Weapons/Effects/Reload/Shotguns/shotgun_insert.ogg + - type: Ammo + muzzleFlash: GaussMuzzleFlashEffect + - type: Explosive + explosionType: N14DefaultStructural + maxIntensity: 200 + intensitySlope: 1.5 + - type: SolutionContainerManager + solutions: + battery: + maxVol: 5 + - type: InjectableSolution + solution: battery + - type: DrawableSolution + solution: battery + - type: Extractable + juiceSolution: + reagents: + - ReagentId: Zinc + Quantity: 5 + - type: Appearance + - type: PowerCellVisuals + unshadedLayer: enum.PowerCellVisualLayers.Unshaded + baseLayer: enum.PowerCellVisualLayers.Base + - type: Riggable diff --git a/Resources/Prototypes/_Nuclear14/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/2mmEC.yml b/Resources/Prototypes/_Nuclear14/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/2mmEC.yml index ff621ceb086..7ea7f48e00f 100644 --- a/Resources/Prototypes/_Nuclear14/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/2mmEC.yml +++ b/Resources/Prototypes/_Nuclear14/Entities/Objects/Weapons/Guns/Ammunition/Projectiles/2mmEC.yml @@ -8,6 +8,7 @@ reflective: - NonEnergy - type: Projectile + impactEffect: BulletGaussImpactEffect damage: types: Piercing: 32 @@ -16,3 +17,8 @@ falloffStartTiles: 12.0 maxFalloffTiles: 35.0 minDamageMultiplier: 0.82 + - type: Sprite #Misfits Fix — was using stretched ballistic bullet sprite (projectiles2.rsi 'bullet' scale 1.2,0.5). Now uses the proper plasma bolt from plasma.rsi. + sprite: Objects/Weapons/Guns/Projectiles/projectiles2.rsi + state: buckshot + - type: Ammo + muzzleFlash: GaussMuzzleFlashEffect diff --git a/Resources/Prototypes/_Nuclear14/Entities/Objects/Weapons/Guns/Projectiles/impacts.yml b/Resources/Prototypes/_Nuclear14/Entities/Objects/Weapons/Guns/Projectiles/impacts.yml index e94bf47a183..2d6287ca0e3 100644 --- a/Resources/Prototypes/_Nuclear14/Entities/Objects/Weapons/Guns/Projectiles/impacts.yml +++ b/Resources/Prototypes/_Nuclear14/Entities/Objects/Weapons/Guns/Projectiles/impacts.yml @@ -53,3 +53,21 @@ tags: - HideContextMenu - type: AnimationPlayer + +- type: entity + id: BulletGaussImpactEffect + categories: [ HideSpawnMenu ] + components: + - type: TimedDespawn + lifetime: 0.25 + - type: Sprite + drawdepth: Effects + layers: + - shader: unshaded + map: ["enum.EffectLayers.Unshaded"] + sprite: _Nuclear14/Objects/Weapons/Guns/Ammunition/Projectiles/plasma.rsi + state: impact_plasma + - type: EffectVisuals + - type: Tag + tags: + - HideContextMenu diff --git a/Resources/Prototypes/_Nuclear14/Entities/Objects/Weapons/Guns/Shotguns/shotguns.yml b/Resources/Prototypes/_Nuclear14/Entities/Objects/Weapons/Guns/Shotguns/shotguns.yml index 8f2dd3664ab..369c03fec95 100644 --- a/Resources/Prototypes/_Nuclear14/Entities/Objects/Weapons/Guns/Shotguns/shotguns.yml +++ b/Resources/Prototypes/_Nuclear14/Entities/Objects/Weapons/Guns/Shotguns/shotguns.yml @@ -689,6 +689,10 @@ backStrength: 4 - type: StaticPrice price: 90 + - type: GunDamageBonus + bonusDamage: + types: + Piercing: 3 - type: entity name: Neostead 2000 @@ -731,3 +735,7 @@ backStrength: 4 - type: StaticPrice price: 350 + - type: GunDamageBonus + bonusDamage: + types: + Piercing: 3 diff --git a/Resources/Prototypes/_Nuclear14/Entities/Objects/Weapons/Guns/Snipers/snipers.yml b/Resources/Prototypes/_Nuclear14/Entities/Objects/Weapons/Guns/Snipers/snipers.yml index 81c46a2c156..ab70ac85596 100644 --- a/Resources/Prototypes/_Nuclear14/Entities/Objects/Weapons/Guns/Snipers/snipers.yml +++ b/Resources/Prototypes/_Nuclear14/Entities/Objects/Weapons/Guns/Snipers/snipers.yml @@ -826,7 +826,7 @@ - type: entity name: M72 Gauss rifle parent: N14WeaponRifleBase - id: N14WeaponSniperM72GaussRifleSirius + id: N14WeaponSniperM72GaussRifleSirius67 description: "An anti-materiel rifle with an ergonomic, sleek, skeletonized design. Simply looking at it can you tell it'll rip some limbs apart. Uses .50 anti-material ammo." components: - type: Clothing @@ -898,4 +898,69 @@ types: Piercing: 38 +- type: entity + name: M72 Gauss rifle + parent: BaseItem + id: N14WeaponSniperM72GaussRifleSirius + description: An advanced gauss rifle that consumes both energy and 2mmEC ammunition. + components: + - type: Clothing + sprite: _Nuclear14/Objects/Weapons/Guns/Snipers/gaussrifle.rsi + quickEquip: false + slots: + - Back + - suitStorage + - type: Sprite + sprite: _Nuclear14/Objects/Weapons/Guns/Snipers/gaussrifle.rsi + layers: + - state: base + map: ["enum.GunVisualLayers.Base"] + - state: mag-0 + map: ["enum.GunVisualLayers.Mag"] + - type: Item + size: Huge + - type: Wieldable + wieldedSpeedModifier: 0.75 + - type: GunWieldBonus + minAngle: -23 + maxAngle: -104 + - type: HybridAmmoProvider + proto: N14Bullet2mmEC + fireCost: 50 + magazineSlot: gun_magazine + - type: Gun + minAngle: 24 + maxAngle: 60 + angleIncrease: 4 + angleDecay: 16 + fireRate: 1.5 + soundGunshot: + path: /Audio/Weapons/Guns/Gunshots/GaussRifle_SingleShot_1.ogg + soundEmpty: + path: /Audio/Weapons/Guns/Empty/empty.ogg + selectedMode: SemiAuto + availableModes: + - SemiAuto + - type: ItemSlots + slots: + gun_magazine: + name: Magazine + startingItem: N14MagazineRifle2mmEC + insertSound: /Audio/Weapons/Guns/MagIn/batrifle_magin.ogg + ejectSound: /Audio/Weapons/Guns/MagOut/batrifle_magout.ogg + whitelist: + tags: + - N14MagazineRifle2mmEC + - type: ContainerContainer + containers: + gun_magazine: !type:ContainerSlot + - type: MagazineVisuals + magState: mag + steps: 1 + zeroVisible: true + - type: Appearance + - type: AmmoCounter + - type: StaticPrice + price: 200 + # - type: Craftable # #Misfits Remove: Stalker14 crafting system #sirius change end diff --git a/Resources/Prototypes/_Nuclear14/Loadouts/Fractions/NCRLoadout/loadouts_followers.yml b/Resources/Prototypes/_Nuclear14/Loadouts/Fractions/NCRLoadout/loadouts_followers.yml index 8261eec747e..d6aed2f1fd1 100644 --- a/Resources/Prototypes/_Nuclear14/Loadouts/Fractions/NCRLoadout/loadouts_followers.yml +++ b/Resources/Prototypes/_Nuclear14/Loadouts/Fractions/NCRLoadout/loadouts_followers.yml @@ -1,6 +1,6 @@ - type: loadout id: MisfitsLoadoutFollowerResponderDuster - category: Roles + category: Outer cost: 3 exclusive: true requirements: diff --git a/Resources/Prototypes/_Nuclear14/tags.yml b/Resources/Prototypes/_Nuclear14/tags.yml index eb669bfb834..8a0a905d17f 100644 --- a/Resources/Prototypes/_Nuclear14/tags.yml +++ b/Resources/Prototypes/_Nuclear14/tags.yml @@ -523,3 +523,6 @@ - type: Tag id: MisfitsPipBoy + +- type: Tag + id: N14GaussCell diff --git a/Resources/Textures/Objects/Weapons/Guns/Projectiles/projectiles.rsi/muzzle_gauss.png b/Resources/Textures/Objects/Weapons/Guns/Projectiles/projectiles.rsi/muzzle_gauss.png index 91ff6b0ff7b..17cef2efe49 100644 Binary files a/Resources/Textures/Objects/Weapons/Guns/Projectiles/projectiles.rsi/muzzle_gauss.png and b/Resources/Textures/Objects/Weapons/Guns/Projectiles/projectiles.rsi/muzzle_gauss.png differ