Prechádzať zdrojové kódy

TDM update 5 (#213)

* increased boltaction accuracy

* weapon accuracy fixes, spent casings, fixes mgs

* combat knife to dagger, bidirectional barricades

* new tips, more balancing for guns

* arrow direction fix (this time for real)

* medkits

* more tips, medical fix
Taislin 6 mesiacov pred
rodič
commit
ae01ac9596
51 zmenil súbory, kde vykonal 1376 pridanie a 1065 odobranie
  1. 8 0
      Content.Server/Weapons/Ranged/Components/DeletingSpentCartridgeComponent.cs
  2. 65 2
      Content.Server/Weapons/Ranged/Systems/GunSystem.Cartridges.cs
  3. 8 0
      Content.Shared/Civ14/Barricade/BarricadeComponent.cs
  4. 19 5
      Content.Shared/Projectiles/SharedProjectileSystem.cs
  5. 2 3
      Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.cs
  6. 6 0
      Resources/Locale/en-US/reagents/meta/medicine.ftl
  7. 34 131
      Resources/Locale/en-US/tips.ftl
  8. 121 0
      Resources/Prototypes/Civ14/Entities/Clothing/satchels.yml
  9. 1 1
      Resources/Prototypes/Civ14/Entities/Clothing/webbings.yml
  10. 37 33
      Resources/Prototypes/Civ14/Entities/Objects/Guns/Ammo/entities_calibers.yml
  11. 46 95
      Resources/Prototypes/Civ14/Entities/Objects/Guns/Ammo/entities_magazines.yml
  12. 10 10
      Resources/Prototypes/Civ14/Entities/Objects/Guns/ar_ar15.yml
  13. 30 30
      Resources/Prototypes/Civ14/Entities/Objects/Guns/ar_kalashnikov.yml
  14. 26 29
      Resources/Prototypes/Civ14/Entities/Objects/Guns/entities_assaultrifles.yml
  15. 29 53
      Resources/Prototypes/Civ14/Entities/Objects/Guns/entities_boltaction.yml
  16. 35 32
      Resources/Prototypes/Civ14/Entities/Objects/Guns/entities_mg.yml
  17. 1 0
      Resources/Prototypes/Civ14/Entities/Objects/Guns/entities_pistol.yml
  18. 7 0
      Resources/Prototypes/Civ14/Entities/Objects/Guns/entities_smg.yml
  19. 136 0
      Resources/Prototypes/Civ14/Entities/Objects/Specific/medical.yml
  20. 11 0
      Resources/Prototypes/Civ14/Entities/Objects/Storage/crates.yml
  21. 2 0
      Resources/Prototypes/Civ14/Entities/Structures/Walls/barricades.yml
  22. 1 1
      Resources/Prototypes/Datasets/tips.yml
  23. 181 177
      Resources/Prototypes/Entities/Mobs/base.yml
  24. 4 2
      Resources/Prototypes/Entities/Objects/Specific/Medical/healing.yml
  25. 1 7
      Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/arrows.yml
  26. 34 0
      Resources/Prototypes/Entities/Objects/Weapons/Melee/knife.yml
  27. 1 1
      Resources/Prototypes/Entities/Structures/Furniture/rollerbeds.yml
  28. 404 405
      Resources/Prototypes/Reagents/medicine.yml
  29. 3 3
      Resources/Prototypes/Roles/Jobs/Civ14/TDM/english.yml
  30. 3 3
      Resources/Prototypes/Roles/Jobs/Civ14/TDM/french.yml
  31. 2 13
      Resources/Prototypes/Roles/Jobs/Civ14/TDM/german.yml
  32. 2 13
      Resources/Prototypes/Roles/Jobs/Civ14/TDM/soviet.yml
  33. BIN
      Resources/Textures/Civ14/Objects/Storage/medical_bag.rsi/equipped-BACKPACK.png
  34. BIN
      Resources/Textures/Civ14/Objects/Storage/medical_bag.rsi/icon.png
  35. BIN
      Resources/Textures/Civ14/Objects/Storage/medical_bag.rsi/inhand-left.png
  36. BIN
      Resources/Textures/Civ14/Objects/Storage/medical_bag.rsi/inhand-right.png
  37. 26 0
      Resources/Textures/Civ14/Objects/Storage/medical_bag.rsi/meta.json
  38. BIN
      Resources/Textures/Civ14/Objects/Storage/medical_satchel.rsi/equipped-BELT.png
  39. BIN
      Resources/Textures/Civ14/Objects/Storage/medical_satchel.rsi/icon.png
  40. BIN
      Resources/Textures/Civ14/Objects/Storage/medical_satchel.rsi/inhand-left.png
  41. BIN
      Resources/Textures/Civ14/Objects/Storage/medical_satchel.rsi/inhand-right.png
  42. 26 0
      Resources/Textures/Civ14/Objects/Storage/medical_satchel.rsi/meta.json
  43. BIN
      Resources/Textures/Civ14/Objects/Storage/medkit.rsi/equipped-BELT.png
  44. BIN
      Resources/Textures/Civ14/Objects/Storage/medkit.rsi/icon.png
  45. BIN
      Resources/Textures/Civ14/Objects/Storage/medkit.rsi/inhand-left.png
  46. BIN
      Resources/Textures/Civ14/Objects/Storage/medkit.rsi/inhand-right.png
  47. 26 0
      Resources/Textures/Civ14/Objects/Storage/medkit.rsi/meta.json
  48. BIN
      Resources/Textures/Civ14/Weapons/dagger.rsi/equipped-BELT.png
  49. BIN
      Resources/Textures/Civ14/Weapons/dagger.rsi/inhand-left.png
  50. BIN
      Resources/Textures/Civ14/Weapons/dagger.rsi/inhand-right.png
  51. 28 16
      Resources/Textures/Civ14/Weapons/dagger.rsi/meta.json

+ 8 - 0
Content.Server/Weapons/Ranged/Components/DeletingSpentCartridgeComponent.cs

@@ -0,0 +1,8 @@
+using Robust.Shared.GameObjects;
+
+namespace Content.Server.Weapons.Ranged.Components;
+
+[RegisterComponent]
+public sealed partial class DeletingSpentCartridgeComponent : Component
+{
+}

+ 65 - 2
Content.Server/Weapons/Ranged/Systems/GunSystem.Cartridges.cs

@@ -1,22 +1,31 @@
+using Content.Server.Weapons.Ranged.Components;
 using Content.Shared.Damage;
 using Content.Shared.Damage.Events;
 using Content.Shared.Examine;
 using Content.Shared.FixedPoint;
 using Content.Shared.Projectiles;
 using Content.Shared.Weapons.Ranged.Components;
+using Robust.Shared.GameObjects;
 using Robust.Shared.Prototypes;
+using Robust.Shared.Timing;
 
 namespace Content.Server.Weapons.Ranged.Systems;
 
 public sealed partial class GunSystem
 {
+    [Dependency] private readonly ITimerManager _timerManager = default!;
+    [Dependency] private readonly ILogManager _logManager = default!;
+    private ISawmill _sawmill = default!;
     protected override void InitializeCartridge()
     {
+        _sawmill = _logManager.GetSawmill("cartridge");
         base.InitializeCartridge();
         SubscribeLocalEvent<CartridgeAmmoComponent, ExaminedEvent>(OnCartridgeExamine);
         SubscribeLocalEvent<CartridgeAmmoComponent, DamageExamineEvent>(OnCartridgeDamageExamine);
-    }
 
+        // Handle cartridges that are already spent when they are initialized
+        SubscribeLocalEvent<CartridgeAmmoComponent, ComponentStartup>(OnCartridgeStartupForDeletionCheck);
+    }
     private void OnCartridgeDamageExamine(EntityUid uid, CartridgeAmmoComponent component, ref DamageExamineEvent args)
     {
         var damageSpec = GetProjectileDamage(component.Prototype);
@@ -35,7 +44,7 @@ private void OnCartridgeDamageExamine(EntityUid uid, CartridgeAmmoComponent comp
         if (entityProto.Components
             .TryGetValue(_factory.GetComponentName(typeof(ProjectileComponent)), out var projectile))
         {
-            var p = (ProjectileComponent) projectile.Component;
+            var p = (ProjectileComponent)projectile.Component;
 
             if (!p.Damage.Empty)
             {
@@ -57,4 +66,58 @@ private void OnCartridgeExamine(EntityUid uid, CartridgeAmmoComponent component,
             args.PushMarkup(Loc.GetString("gun-cartridge-unspent"));
         }
     }
+
+    protected override void SetCartridgeSpent(EntityUid uid, CartridgeAmmoComponent cartridge, bool spent)
+    {
+        base.SetCartridgeSpent(uid, cartridge, spent);
+
+        // Now call the server-specific logic after the spent status is updated
+        CheckAndScheduleSpentCartridgeDeletion(uid, cartridge);
+    }
+
+    private void OnCartridgeStartupForDeletionCheck(EntityUid uid, CartridgeAmmoComponent component, ComponentStartup args)
+    {
+        CheckAndScheduleSpentCartridgeDeletion(uid, component);
+    }
+
+    /// <summary>
+    /// Checks if a cartridge is spent and, if so, schedules it for deletion after a delay.
+    /// This function can be called when a cartridge's state might have changed to spent.
+    /// </summary>
+    public void CheckAndScheduleSpentCartridgeDeletion(EntityUid cartridgeUid, CartridgeAmmoComponent cartridge)
+    {
+        if (cartridge.Spent)
+        {
+            // If not already marked for deletion
+            if (!EntityManager.HasComponent<DeletingSpentCartridgeComponent>(cartridgeUid))
+            {
+                EntityManager.AddComponent<DeletingSpentCartridgeComponent>(cartridgeUid);
+                //_sawmill.Info($"Scheduling spent cartridge {ToPrettyString(cartridgeUid)} for deletion in 5 minutes.");
+
+                _timerManager.AddTimer(new Timer((int)TimeSpan.FromMinutes(5).TotalMilliseconds, false, () =>
+                {
+                    // Re-check conditions before deleting, as state might have changed or entity might be gone.
+                    if (EntityManager.Deleted(cartridgeUid))
+                        return;
+
+                    if (EntityManager.TryGetComponent<CartridgeAmmoComponent>(cartridgeUid, out var currentCartridge) && currentCartridge.Spent)
+                    {
+                        _sawmill.Info($"Deleting spent cartridge {ToPrettyString(cartridgeUid)} after 5 minutes.");
+                        EntityManager.QueueDeleteEntity(cartridgeUid);
+                    }
+                    else
+                    {
+                        // Condition no longer met (e.g., no longer spent, or component removed), so just remove the marker.
+                        EntityManager.RemoveComponent<DeletingSpentCartridgeComponent>(cartridgeUid);
+                    }
+                }));
+            }
+        }
+        else if (EntityManager.HasComponent<DeletingSpentCartridgeComponent>(cartridgeUid))
+        {
+            // If it's not spent but was somehow marked, remove the marker.
+            // Note: This doesn't cancel the timer here, but the timer's callback will handle it.
+            EntityManager.RemoveComponent<DeletingSpentCartridgeComponent>(cartridgeUid);
+        }
+    }
 }

+ 8 - 0
Content.Shared/Civ14/Barricade/BarricadeComponent.cs

@@ -15,4 +15,12 @@ public sealed partial class BarricadeComponent : Component
     [DataField("blocking")]
     public int Blocking = 66;
 
+    /// <summary>
+    /// Can it be used bidirectionally (e.g. sandbags) or only from behind (e.g. crenelated walls)?
+    /// </summary>
+    [DataField("bidirectional")]
+    public bool Bidirectional = true;
+
+
+
 }

+ 19 - 5
Content.Shared/Projectiles/SharedProjectileSystem.cs

@@ -255,28 +255,42 @@ private void PreventCollision(EntityUid uid, ProjectileComponent component, ref
         if (TryComp(args.OtherEntity, out BarricadeComponent? barricade))
         {
             var alwaysPassThrough = false;
-            _sawmill.Info("Checking barricade...");
+            //_sawmill.Info("Checking barricade...");
             if (component.Shooter is { } shooterUid && Exists(shooterUid))
             {
                 // Condition 1: Directions are the same (using cardinal directions).
+                // Or, if bidirectional, directions can be opposite.
                 var shooterWorldRotation = _transform.GetWorldRotation(shooterUid);
                 var barricadeWorldRotation = _transform.GetWorldRotation(args.OtherEntity);
 
                 var shooterDir = shooterWorldRotation.GetCardinalDir();
                 var barricadeDir = barricadeWorldRotation.GetCardinalDir();
 
+                bool directionallyAllowed = false;
                 if (shooterDir == barricadeDir)
                 {
+                    directionallyAllowed = true;
+                    //_sawmill.Debug("Shooter and barricade facing same cardinal direction.");
+                }
+                else if (barricade.Bidirectional)
+                {
+                    var oppositeBarricadeDir = (Direction)(((int)barricadeDir + 4) % 8);
+                    if (shooterDir == oppositeBarricadeDir)
+                    {
+                        directionallyAllowed = true;
+                        //_sawmill.Debug("Shooter and barricade facing opposite cardinal directions (bidirectional pass).");
+                    }
+                }
 
-                    _sawmill.Info("Same dir!");
+                if (directionallyAllowed)
+                {
                     // Condition 2: Firer is within 1 tile of the barricade.
                     var shooterCoords = Transform(shooterUid).Coordinates;
                     var barricadeCoords = Transform(args.OtherEntity).Coordinates;
 
                     if (shooterCoords.TryDistance(EntityManager, barricadeCoords, out var distance) &&
-                        distance <= 1.3f)
+                        distance <= 1.5f)
                     {
-                        _sawmill.Info($"Distance: {distance}");
                         alwaysPassThrough = true;
                     }
                 }
@@ -288,7 +302,7 @@ private void PreventCollision(EntityUid uid, ProjectileComponent component, ref
             }
             else
             {
-                _sawmill.Info("Not same dir or too far away!");
+                //_sawmill.Debug("Barricade direction/distance check failed or shooter not valid.");
                 // Standard barricade blocking logic if the special conditions are not met.
                 if (_random.NextFloat(0.0f, 100.0f) >= barricade.Blocking)
                 {

+ 2 - 3
Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.cs

@@ -871,7 +871,7 @@ public virtual void ShootProjectile(EntityUid uid, Vector2 direction, Vector2 gu
         Projectiles.SetShooter(uid, projectile, user ?? gunUid);
         projectile.Weapon = gunUid;
 
-        TransformSystem.SetWorldRotationNoLerp(uid, direction.ToWorldAngle());
+        TransformSystem.SetWorldRotationNoLerp(uid, direction.ToWorldAngle() + projectile.Angle);
     }
 
     public List<EntityUid>? ShootRequested(NetEntity netGun, NetCoordinates coordinates, NetEntity? target, List<int>? projectiles, ICommonSession session)
@@ -899,8 +899,7 @@ public virtual void ShootProjectile(EntityUid uid, Vector2 direction, Vector2 gu
     /// Call this whenever the ammo count for a gun changes.
     /// </summary>
     protected virtual void UpdateAmmoCount(EntityUid uid, bool prediction = true) { }
-
-    protected void SetCartridgeSpent(EntityUid uid, CartridgeAmmoComponent cartridge, bool spent)
+    protected virtual void SetCartridgeSpent(EntityUid uid, CartridgeAmmoComponent cartridge, bool spent)
     {
         if (cartridge.Spent != spent)
             Dirty(uid, cartridge);

+ 6 - 0
Resources/Locale/en-US/reagents/meta/medicine.ftl

@@ -150,3 +150,9 @@ reagent-desc-haloperidol = Removes most stimulating and hallucinogenic drugs. Re
 
 reagent-name-dirt = dirt
 reagent-desc-dirt = A earthy mix of dirt.
+
+reagent-name-morphine = morphine
+reagent-desc-morphine = A rapid-acting syringe that relieves severe pain and stabilizes critically wounded soldiers, but risks drowsiness or overdose if overused.
+
+reagent-name-sulfanilamide = sulfanilamide
+reagent-desc-sulfanilamide = An antibacterial powder that prevents and treats wound infections.

+ 34 - 131
Resources/Locale/en-US/tips.ftl

@@ -2,136 +2,39 @@ tips-dataset-1 = If you're on fire, you can click the alert on the right of your
 tips-dataset-2 = You can view and edit all keybindings used in-game at any time through the Options menu.
 tips-dataset-3 = You can access the in-game guidebook through the escape menu, or by pressing Numpad 0 by default.
 tips-dataset-4 = Some entities ingame have guidebook entries associated with them, which you can view by examining the entity and clicking the question mark icon.
-tips-dataset-5 = Artifacts have the ability to gain permanent effects for some triggered nodes, including becoming an intercom or an extremely efficient generator.
+tips-dataset-5 = Weather and season changes can threaten your civilization's survival. Be sure to have a shelter stocked with vital supplies like food and water to survive the storms to come.
 tips-dataset-6 = You can avoid slipping on most puddles by walking. However, some strong chemicals like space lube will slip people anyway.
-tips-dataset-7 = Some plants, such as galaxy thistle, can be ground up into extremely useful and potent medicines.
+tips-dataset-7 = In TDM, it's a good idea to strip dead enemies/comrades and tear up their uniforms to make bandages.
 tips-dataset-8 = Mopping up puddles and draining them into other containers conserves the reagents found in the puddle.
-tips-dataset-9 = Floor drains, usually found in the chef's freezer or janitor's office, rapidly consume reagent found in puddles around them--including blood.
-tips-dataset-10 = Cognizine, a hard to manufacture chemical, makes animals sentient when they are injected with it.
-tips-dataset-11 = Loaded mousetraps are incredibly effective at dealing with all manner of low-mass mobs--including Rat Servants.
-tips-dataset-12 = Fire extinguishers can be loaded with any reagent in the game.
-tips-dataset-13 = Some reagents, like chlorine trifluoride, have unique effects when applied by touch, such as through a spray bottle or foam.
-tips-dataset-14 = Remember to touch grass in between playing Space Station 14 every once in a while.
-tips-dataset-15 = You can use the Activate in World keybind, E by default, to interact with objects while your hands are full, or without picking them up.
-tips-dataset-16 = Common sense goes a long way to avoiding conflict.
-tips-dataset-17 = Every other player in game is a human being as well.
-tips-dataset-18 = When running the Singularity, make sure to check on it periodically. If sabotaged, it could put the entire station at risk.
-tips-dataset-19 = If the Singularity is up, make sure to refuel the radiation collectors once in a while.
-tips-dataset-20 = Chemicals don't react while inside the ChemMaster's buffer.
-tips-dataset-21 = Don't anger the bartender by throwing their glasses! Politely place them on the table by tapping Q.
-tips-dataset-22 = You can hold SPACE by default to slow the movement of the shuttle when piloting, to allow for precise movements--or even coming to a complete stop.
-tips-dataset-23 = Dexalin, Dexalin Plus, and Epinephrine will all purge heartbreaker toxin from your bloodstream while metabolizing.
-tips-dataset-24 = Every crewmember comes with an emergency medipen in their survival box containing epinephrine and tranexamic acid.
-tips-dataset-25 = The AME is a high-priority target and is easily sabotaged. Make sure to set up the Singularity or Solars so that you don't run out of power if it blows.
-tips-dataset-26 = If the tesla is loose, it will chase any people, stationary machines and computers. Turning off your electronics does not make you less of a target. Your best bet is not being close to it.
-tips-dataset-27 = You can add labels to any item, including food or pill canisters, using a hand labeller.
-tips-dataset-28 = Riot armor is significantly more powerful against opponents that aren't using guns compared to regular armor.
-tips-dataset-29 = As a ghost, you can use the Verb Menu to orbit around and follow any entity in game automatically.
-tips-dataset-30 = As a Traitor, you may sometimes be assigned to hunt other traitors, and in turn be hunted by others.
-tips-dataset-31 = As a Traitor, the syndicate encryption key can be used to communicate through a secure channel with any other traitors who have purchased it.
-tips-dataset-32 = As a Traitor, compromising important communications channels like security or engineering can give valuable intelligence. Be aware that this goes in both ways - security can compromise syndicate communications as well!
-tips-dataset-33 = As a Traitor, the syndicate toolbox is extremely versatile. For only 2 telecrystals, you can get a full set of tools to help you in an emergency, insulated combat gloves and a syndicate gas mask.
-tips-dataset-34 = As a Traitor, never underestimate the web vest. It may not provide space protection, but its cheap cost and robust protection makes it handy for protecting against trigger-happy foes.
-tips-dataset-35 = As a Traitor, any purchased grenade penguins won't attack you, and will explode if killed.
-tips-dataset-36 = As a Traitor, be careful when using vestine from the chemical synthesis kit. If someone checks your station, they could easily out you.
-tips-dataset-37 = As a Traitor, remember that power sinks will create a loud sound and alert the crew after running for long enough. Try to hide them in a tricky-to-find spot, or reinforce the area around them so that they're harder to reach.
-tips-dataset-38 = As a Traitor, plasma gas is an excellent way to create chaos. It can be ignited to make an area extra-uninhabitable, and can cause toxin damage to those that inhale it.
-tips-dataset-39 = As a Traitor, dehydrated carps are useful for killing a large hoard of people. As long as you pat it before rehydrating it, it can be used as a great distraction.
-tips-dataset-40 = As a Traitor, have you tried injecting plasma into batteries? In the case of a defibrillator, it explodes on use; hurting the user and the patient!
-tips-dataset-41 = As a Nuclear Operative, stick together! While your equipment is robust, your fellow operatives are much better at saving your life: they can drag you away from danger while stunned and provide cover fire.
-tips-dataset-42 = As a Nuclear Operative, communication is key! Use your radio to speak to your fellow operatives and coordinate an attack plan.
-tips-dataset-43 = As a Nuclear Operative, remember that stealth is an option. It'll be hard for the captain to fight back if he gets caught off guard by what he thinks is just a regular passenger!
-tips-dataset-44 = As an antagonist, be mindful of the power of destroying telecommunications. It'll be a lot harder for people to call you out if they can't do so effectively!
-tips-dataset-45 = You can examine your headset to see which radio channels you have available and how to speak in them.
-tips-dataset-46 = As a Salvage Specialist, always carry a GPS on you and take note of the station's coordinates in case your salvage is lost to space.
-tips-dataset-47 = As a Salvage Specialist, you can use your proto-kinetic accelerator to move yourself in space when in a pinch. Just be wary that it isn't very effective.
-tips-dataset-48 = As a Salvage Specialist, never forget to mine ore! Ore can be sold to cargo for a pretty penny, be used for construction, and also be used by Scientists for fancy technology.
-tips-dataset-49 = As a Salvage Specialist, try asking science for a tethergun. It can be used to grab items off of salvage wrecks extremely efficiently!
-tips-dataset-50 = As a Salvage Specialist, try asking science for a grappling hook. It can be used to propel yourself onto wrecks, or if stuck in space you don't have to rely on the proto-kinetic accelerator.
-tips-dataset-51 = Tip #51 does not exist and has never existed. Ignore any rumors to the contrary.
-tips-dataset-52 = As a Salvage Specialist, consider cooperating with the Cargo Technicians. They can order you a wide variety of useful items, including ones that may be hard to get otherwise, such laser guns and shuttle building materials.
-tips-dataset-53 = As a Cargo Technician, consider asking science for a Ripley APLU. When paired with a hydraulic clamp, you can grab valuable maintenance objects like fuel tanks much more easily, and make deliveries in a swift manner.
-tips-dataset-54 = As a Cargo Technician, try to maintain a surplus of materials. They are extremely useful for Scientists and Station Engineers to have immediate access to.
-tips-dataset-55 = As a Cargo Technician, if you have a surplus of cash try gambling! Sometimes you gain more money than you begin with.
-tips-dataset-56 = As a Cargo Technician, remember that you can order guns in an emergency! The extra firepower can often be the difference between you and your fellow crewmembers living or dying.
-tips-dataset-57 = As the Bartender, you can use a circular saw on your shotgun to make it easier to store.
-tips-dataset-58 = As the Bartender, try experimenting with unique drinks. Have you tried to make demon's blood yet?
-tips-dataset-59 = As a Botanist, you can mutate and crossbreed plants together to create more potent produce that also has higher yields.
-tips-dataset-60 = As the Clown, spice your gimmicks up! Nobody likes a one-trick pony.
-tips-dataset-61 = As the Clown, if you lose your banana peels and soap, you can still slip people with your PDA! Honk!
-tips-dataset-62 = As the Chef, your knife can act as a weapon in an emergency.
-tips-dataset-63 = As the Chef, you can sneak liquids into your foods. As a traitor, putting a little bit of amatoxin or other poison can greatly annoy the crew!
-tips-dataset-64 = As the Mime, your vow to not speak or write is your source of power. Breaking it robs you of your powers and of your honor.
-tips-dataset-65 = As the Lawyer, try to negotiate with the Warden if sentences seem too high for the crime.
-tips-dataset-66 = As a Security Officer, communicate and coordinate with your fellow officers using the security radio channel to avoid confusion.
-tips-dataset-67 = As a Security Officer, remember that correlation does not equal causation. Someone may have just been at the wrong place at the wrong time!
-tips-dataset-68 = As a Detective, you can chase criminals more effectively by using fingerprint fiber data and DNA obtained from forensic scans of objects the perpetrator likely interacted with.
-tips-dataset-69 = As an Atmospheric Technician, your ATMOS holofan projector blocks gases while allowing objects to pass through. With it, you can quickly contain gas spills, fires and hull breaches.
-tips-dataset-70 = As an Atmospheric Technician, try to resist the temptation of making canister bombs for Nuclear Operatives, unless you're in a last-ditch scenario. They often lead to large amounts of unnecessary friendly fire!
-tips-dataset-71 = As an Engineer, you can repair cracked windows by using a lit welding tool on them while not in combat mode.
-tips-dataset-72 = As an Engineer, you can electrify grilles by placing powered cables beneath them.
-tips-dataset-73 = As an Engineer, always double check when you're setting up the singularity. It is easier than you think to loose it!
-tips-dataset-74 = As an Engineer, you can use plasma glass to reinforce an area and prevent radiation. Uranium glass can also be used to prevent radiation.
-tips-dataset-75 = As the Captain, you are one of the highest priority targets on the station. Everything from revolutions, to nuclear operatives, to traitors that need to rob you of your unique laser pistol or your life are things to worry about.
-tips-dataset-76 = As the Captain, always take the nuclear disk and pinpointer with you every shift. It's a good idea to give one of these to another head you can trust with keeping it safe.
-tips-dataset-77 = As the Captain, you have absolute access and control over the station, but this does not mean that being a horrible person won't result in mutiny.
-tips-dataset-78 = As the Captain, try to be active and patrol the station. Staying in the bridge might be tempting, but you'll just end up putting a bigger target on your back!
-tips-dataset-79 = As a Scientist, you can try random things on an artifact while the scanner is on cooldown to speed up the point extraction process significantly.
-tips-dataset-80 = As a Scientist, you can utilize upgraded versions of machines to increase its effectiveness. This can make certain machines significantly better; salvage will love you if you upgrade their ore processor!
-tips-dataset-81 = As a Scientist, you can build cyborgs using positronic brains and a chassis, they are just as useful as a new crew member.
-tips-dataset-82 = As a Medical Doctor, try to be wary of overdosing your patients, especially if someone else has already been on the scene. Overdoses are often lethal to patients in crit!
-tips-dataset-83 = As a Medical Doctor, don't underestimate your cryo pods! They heal almost every type of damage, making them very useful when you are overloaded or need to heal someone in a pinch.
-tips-dataset-84 = As a Medical Doctor, exercise caution when putting reptilians in cryopods. They will take a lot of extra cold damage, but you can mitigate this with some burn medicine or leporazine.
-tips-dataset-85 = As a Medical Doctor, remember that the health analyzer can be used if you lose your PDA. However it has a battery, and if it drains too quickly for your taste you can ask science to print a better battery for you!
-tips-dataset-86 = As a Chemist, once you've made everything you've needed to, don't be afraid to make more silly reagents. Have you tried desoxyephedrine or licoxide?
-tips-dataset-87 = As a Medical Doctor, Chemist, or Chief Medical Officer, you can use chloral hydrate to non-lethally sedate unruly patients.
-tips-dataset-88 = Don't be afraid to ask for help, whether from your peers in character or through LOOC, or from admins!
-tips-dataset-89 = You'll quickly lose your interest in the game if you play to win and kill. If you find yourself doing this, take a step back and talk to people--it's a much better experience!
-tips-dataset-90 = If there's something you need from another department, try asking! This game isn't singleplayer and you'd be surprised what you can get accomplished together!
-tips-dataset-91 = The station's nuke is invincible. Go find the disk instead of trying to destroy it.
-tips-dataset-92 = Maintenance is full of equipment that is randomized every round. Look around and see if anything is worth using.
-tips-dataset-93 = We were all new once, be patient and guide new players, especially those playing intern roles, in the right direction.
-tips-dataset-94 = Firesuits, winter coats and emergency EVA suits offer mild protection from the cold, allowing you to spend longer periods of time near breaches and space than if wearing nothing at all.
-tips-dataset-95 = In an emergency, you can always rely on firesuits and emergency EVA suits; they will always spawn in their respective lockers. They might be awkward to move around in, but can easily save your life in a dangerous situation.
-tips-dataset-96 = In an emergency, remember that you can craft improvised weapons! A baseball bat or spear could easily mean the difference between deterring an attacker or perishing from the hands of one.
-tips-dataset-97 = Spears can be tipped with chemicals, and will inject a few units every time you hit someone with them directly.
-tips-dataset-98 = You can make spears with reinforced glass, plasma glass, or uranium glass shards to enhance their damage.
-tips-dataset-99 = Thrown spears deal extra damage! Beware, however, as throwing them too much will end up breaking them.
-tips-dataset-100 = All forms of toxin damage are fairly difficult to treat, and usually involve the use of chemicals or other inconvenient methods. You can use this to your advantage in combat.
-tips-dataset-101 = You can throw crafted bolas at people to slow them down, letting you follow up on them for an easier kill or getaway.
-tips-dataset-102 = You can put napalm in a backpack water tank to make a flamethrower.
-tips-dataset-103 = Some jobs have alternate uniforms in their respective drobe vendors. Don't be afraid to try out a new look!
-tips-dataset-104 = Speed is almost everything in combat. Using hardsuits just for their armor is usually a terrible idea unless the resistances it provides are geared towards combat, or you're not planning to go head-first into the fray.
-tips-dataset-105 = Just because a job can't be a traitor at the beginning of a round doesn't mean that they'll never be a traitor.
-tips-dataset-106 = Syndicate gas masks will both provide welding protection and block flashes. Think twice before trying to flash a Nuclear Operative!
-tips-dataset-107 = Demoman takes skill.
-tips-dataset-108 = You can spray a fire extinguisher, throw items or fire a gun while floating through space to give yourself a minor boost. Simply fire opposite to where you want to go.
-tips-dataset-109 = You can drag other players onto yourself to open the strip menu, allowing you to remove their equipment or force them to wear something. Note that exosuits or helmets will block your access to the clothing beneath them, and that certain items take longer to strip or put on than others.
-tips-dataset-110 = You can climb onto a table by dragging yourself onto one.
-tips-dataset-111 = You can move an item out of the way by dragging it, and then holding CTRL + right click and moving your mouse into the direction you want it to go.
-tips-dataset-112 = When dealing with security, you can often get your sentence negated entirely through cooperation and deception.
-tips-dataset-113 = Fire can spread to other players through touch! Be careful around flaming bodies or large crowds with people on fire in them.
-tips-dataset-114 = Hull breaches take a few seconds to fully space an area. You can use this time to patch up the hole if you're confident enough, or just run away.
-tips-dataset-115 = Burn damage, such as that from a welding tool or lightbulb, can be used to cauterize wounds and stop bleeding.
-tips-dataset-116 = Bleeding is no joke! If you've been shot or acquired any other major injury, make sure to treat it quickly.
-tips-dataset-117 = In an emergency, you can butcher a jumpsuit with a sharp object to get cloth, which can be crafted into gauze.
-tips-dataset-118 = You can use sharp objects to butcher clothes or animals in the right click context menu. This includes glass shards.
-tips-dataset-119 = Most explosives have an adjustable timer that you can set in the right click menu. This includes grenade penguins!
-tips-dataset-120 = You can stun grenade penguins, which can bide valuable time for you to kill them.
-tips-dataset-121 = You can click on the names of items to pick them up in the right click menu, instead of hovering over the item and then selecting pick up.
-tips-dataset-122 = Space Station 14 is open source! If there's a change you want to make, or a simple item you want to add, then try contributing to the game. It's not as hard as you'd think it is.
-tips-dataset-123 = In a pinch, you can throw drinks or other reagent containers behind you to create a spill that can slip people chasing you.
-tips-dataset-124 = Some weapons, such as knives & shivs, have a fast attack speed.
-tips-dataset-125 = The jaws of life can be used to open powered doors.
-tips-dataset-126 = If you're not a human, you can drink blood to heal back some of your blood volume, albeit very inefficiently.
-tips-dataset-127 = If you're a human, don't drink blood! It makes you sick and you'll begin to take damage.
-tips-dataset-128 = There is a chemical metabolism limit that limits the amount of reagents of a certain type you can digest at once. Certain species have higher metabolism limits, such as slimes.
-tips-dataset-129 = Welding without proper eye protection can cause eye damage, which must be cured with oculine.
-tips-dataset-130 = Zombies are very vulnerable to heat damage, making welding tools and laser guns extremely effective against them.
-tips-dataset-131 = You can weld glass shards into glass sheets.
-tips-dataset-132 = By right clicking on a player, and then clicking the heart icon, you can quickly examine them to check for injuries or how badly they're bleeding. You can also do this to yourself.
-tips-dataset-133 = Monkeys and kobolds have a rare chance to be sentient. Ook!
-tips-dataset-134 = You can tell if an area with firelocks up is spaced by looking to see if the firelocks have lights beside them.
-tips-dataset-135 = Instead of picking it up, you can alt-click food to eat it. This also works for mice and other creatures without hands.
-tips-dataset-136 = If you're trapped behind an electrified door, disable the APC or throw your ID at the door to avoid getting shocked!
-tips-dataset-137 = If the AI electrifies a door and you have insulated gloves, snip and mend the power wire to reset their electrification!
+tips-dataset-9 = Overhunting can lead to extinction. Consider taking up Animal Husbandry to ensure a long-lasting supply of food and leather for your civilization.
+tips-dataset-10 = Remember to touch grass in between playing Space Station 14 every once in a while.
+tips-dataset-11 = You can use the Activate in World keybind, E by default, to interact with objects while your hands are full, or without picking them up.
+tips-dataset-12 = Common sense goes a long way to avoiding conflict.
+tips-dataset-13 = Every other player in game is a human being as well.
+tips-dataset-14 = As a ghost, you can use the Verb Menu to orbit around and follow any entity in game automatically.
+tips-dataset-15 = Don't be afraid to ask for help, whether from your peers in character or through LOOC, or from admins!
+tips-dataset-16 = Speed is almost everything in combat. Using hardsuits just for their armor is usually a terrible idea unless the resistances it provides are geared towards combat, or you're not planning to go head-first into the fray.
+tips-dataset-17 = You can drag other players onto yourself to open the strip menu, allowing you to remove their equipment or force them to wear something. Note that exosuits or helmets will block your access to the clothing beneath them, and that certain items take longer to strip or put on than others.
+tips-dataset-18 = You can climb onto a table by dragging yourself onto one.
+tips-dataset-19 = You can move an item out of the way by dragging it, and then holding CTRL + right click and moving your mouse into the direction you want it to go.
+tips-dataset-20 = Fire can spread to other players through touch! Be careful around flaming bodies or large crowds with people on fire in them.
+tips-dataset-21 = Burn damage, such as that from a welding tool or lightbulb, can be used to cauterize wounds and stop bleeding.
+tips-dataset-22 = Bleeding is no joke! If you've been shot or acquired any other major injury, make sure to treat it quickly.
+tips-dataset-23 = You can use sharp objects to butcher clothes or animals in the right click context menu. This includes glass shards.
+tips-dataset-24 = You can click on the names of items to pick them up in the right click menu, instead of hovering over the item and then selecting pick up.
+tips-dataset-25 = Civilization 14 is open source! If there's a change you want to make, or a simple item you want to add, then try contributing to the game. It's not as hard as you'd think it is.
+tips-dataset-26 = If you're a human, don't drink blood! It makes you sick and you'll begin to take damage.
+tips-dataset-27 = Zombies are very vulnerable to heat damage, making welding tools and laser guns extremely effective against them.
+tips-dataset-28 = You can weld glass shards into glass sheets.
+tips-dataset-29 = By right clicking on a player, and then clicking the heart icon, you can quickly examine them to check for injuries or how badly they're bleeding. You can also do this to yourself.
+tips-dataset-30 = Instead of picking it up, you can alt-click food to eat it. This also works for mice and other creatures without hands.
+tips-dataset-31 = Cannibalism is a feature, but eating other people might make you valid.
+tips-dataset-32 = Instead of using wide swing, try to conserve your limited stamina by clicking on your enemy instead.
+tips-dataset-33 = Did you know as an archer you can use a keybind to take arrows out of your quiver?
+tips-dataset-34 = As a medic the first step of care is to always use bandages to stop the bleeding.
+tips-dataset-35 = Did you know that you can hold grenades to cook them before throwing?
+tips-dataset-36 = Just because you're a medic, doesn't mean you don't have a weapon! Use it!
+tips-dataset-37 = If you can't rush an enemy consider, looking for flanking oportunities.
+tips-dataset-38 = You can play dead by pressing F, you can still shoot while laying down but beware of grenades!
+tips-dataset-39 = In Nomads, playing alone is dangerous, find some friends to survive with!
+tips-dataset-40 = Consider making your camp close to a river, you need water for plants and yourself.

+ 121 - 0
Resources/Prototypes/Civ14/Entities/Clothing/satchels.yml

@@ -0,0 +1,121 @@
+- type: entity
+  id: ClothingSatchelMedical
+  parent: ClothingBeltStorageBase
+  name: medical satchel
+  description: A medical satchel with a variety of medical supplies.
+  components:
+    - type: Sprite
+      sprite: Civ14/Objects/Storage/medical_satchel.rsi
+    - type: Clothing
+      sprite: Civ14/Objects/Storage/medical_satchel.rsi
+    - type: STWeight
+      self: 1
+    - type: Item
+      size: Large
+    - type: Storage
+      maxItemSize: Normal
+      grid:
+        - 0,0,8,1
+
+- type: entity
+  id: ClothingSatchelMedicalFilled
+  parent: ClothingSatchelMedical
+  name: medical satchel
+  description: A medical satchel with a variety of medical supplies.
+  suffix: filled
+  components:
+    - type: StorageFill
+      contents:
+        - id: DoctorsHandbook
+          amount: 1
+        - id: Brutepack
+          amount: 2
+        - id: Ointment
+          amount: 2
+        - id: Gauze
+          amount: 2
+        - id: ClothingHandsGlovesNitrile
+
+- type: entity
+  id: ClothingSatchelMedicalMedsFilled
+  parent: ClothingSatchelMedical
+  name: medical satchel
+  description: A medical satchel with a variety of medical supplies.
+  suffix: filled, meds
+  components:
+    - type: StorageFill
+      contents:
+        - id: SyretteAdrenaline
+          amount: 4
+        - id: SyretteMorphine
+          amount: 4
+        - id: PillCanisterSulfanilamide
+          amount: 2
+
+- type: entity
+  id: ClothingSatchelMedkit
+  parent: ClothingSatchelMedical
+  name: medical kit
+  description: A medical kit with a variety of medical supplies.
+  components:
+    - type: Sprite
+      sprite: Civ14/Objects/Storage/medkit.rsi
+    - type: Clothing
+      sprite: Civ14/Objects/Storage/medkit.rsi
+    - type: Item
+      size: Small
+    - type: Storage
+      maxItemSize: Normal
+      grid:
+        - 0,0,4,1
+
+- type: entity
+  id: ClothingSatchelMedkitFilled
+  parent: ClothingSatchelMedkit
+  name: medical kit
+  description: A medical kit with a variety of medical supplies.
+  suffix: filled
+  components:
+    - type: StorageFill
+      contents:
+        - id: Brutepack
+          amount: 1
+        - id: Gauze
+          amount: 2
+
+# this is actually a backpack
+
+- type: entity
+  parent: ClothingBackpackDuffel
+  id: BackpackMedicalBag
+  name: medical duffelbag
+  description: A large medical duffelbag filled with supplies.
+  components:
+    - type: Sprite
+      sprite: Civ14/Objects/Storage/medical_bag.rsi
+    - type: Clothing
+      sprite: Civ14/Objects/Storage/medical_bag.rsi
+    - type: Storage
+      maxItemSize: Huge
+      grid:
+        - 0,0,7,4
+
+- type: entity
+  id: ClothingBackpackDuffelFilled
+  parent: BackpackMedicalBag
+  name: medical duffelbag
+  suffix: filled
+  components:
+    - type: StorageFill
+      contents:
+        - id: DoctorsHandbook
+          amount: 1
+        - id: Brutepack
+          amount: 2
+        - id: Ointment
+          amount: 2
+        - id: Bloodpack
+          amount: 2
+        - id: Gauze
+          amount: 4
+        - id: ClothingHandsGlovesNitrile

+ 1 - 1
Resources/Prototypes/Civ14/Entities/Clothing/webbings.yml

@@ -16,7 +16,7 @@
     - type: Storage
       maxItemSize: Normal
       grid:
-        - 0,0,7,1
+        - 0,0,8,1
 
 - type: entity
   id: ClothingWebbingGerman

+ 37 - 33
Resources/Prototypes/Civ14/Entities/Objects/Guns/Ammo/entities_calibers.yml

@@ -1,47 +1,51 @@
 - type: entity
   id: civ13_caliber_musketball
   name: musketball cartridge
-  parent: CartridgePistol
+  parent: CartridgeRifle
   components:
     - type: CartridgeAmmo
       proto: civ13_bullet_musketball
+      deleteOnSpawn: true
     - type: Tag
       tags:
         - civ13_caliber_musketball
 - type: entity
   id: civ13_caliber_stoneball
   name: stone ball projectile
-  parent: CartridgePistol
+  parent: CartridgeRifle
   components:
     - type: CartridgeAmmo
       proto: civ13_bullet_stoneball
+      deleteOnSpawn: true
     - type: Tag
       tags:
         - civ13_caliber_stoneball
 - type: entity
   id: civ13_caliber_musketball_pistol
   name: pistol cartridge
-  parent: CartridgePistol
+  parent: CartridgeRifle
   components:
     - type: CartridgeAmmo
       proto: civ13_bullet_musketball_pistol
+      deleteOnSpawn: true
     - type: Tag
       tags:
         - civ13_caliber_musketball_pistol
 - type: entity
   id: civ13_caliber_blunderbuss
   name: blunderbuss cartridge
-  parent: CartridgePistol
+  parent: CartridgeRifle
   components:
     - type: CartridgeAmmo
       proto: civ13_bullet_blunderbuss
+      deleteOnSpawn: true
     - type: Tag
       tags:
         - civ13_caliber_blunderbuss
 - type: entity
   id: civ13_caliber_a65x50
   name: 6.5x50mm Arisaka cartridge
-  parent: CartridgePistol
+  parent: CartridgeRifle
   components:
     - type: CartridgeAmmo
       proto: civ13_bullet_a65x50
@@ -51,7 +55,7 @@
 - type: entity
   id: civ13_caliber_a50cal
   name: .50 BMG cartridge
-  parent: CartridgePistol
+  parent: CartridgeRifle
   components:
     - type: CartridgeAmmo
       proto: civ13_bullet_a50cal
@@ -61,7 +65,7 @@
 - type: entity
   id: civ13_caliber_a50cal_ap
   name: .50 BMG AP cartridge
-  parent: CartridgePistol
+  parent: CartridgeRifle
   components:
     - type: CartridgeAmmo
       proto: civ13_bullet_a50cal
@@ -71,7 +75,7 @@
 - type: entity
   id: civ13_caliber_a50cal_he
   name: .50 BMG HE cartridge
-  parent: CartridgePistol
+  parent: CartridgeRifle
   components:
     - type: CartridgeAmmo
       proto: civ13_bullet_a50cal
@@ -81,7 +85,7 @@
 - type: entity
   id: civ13_caliber_a145
   name: 14.5x114 cartridge
-  parent: CartridgePistol
+  parent: CartridgeRifle
   components:
     - type: CartridgeAmmo
       proto: civ13_bullet_a145
@@ -91,7 +95,7 @@
 - type: entity
   id: civ13_caliber_a127
   name: 12.7x108 cartridge
-  parent: CartridgePistol
+  parent: CartridgeRifle
   components:
     - type: CartridgeAmmo
       proto: civ13_bullet_a127
@@ -101,7 +105,7 @@
 - type: entity
   id: civ13_caliber_a145_ap
   name: 14.5x114 AP cartridge
-  parent: CartridgePistol
+  parent: CartridgeRifle
   components:
     - type: CartridgeAmmo
       proto: civ13_bullet_a145
@@ -111,7 +115,7 @@
 - type: entity
   id: civ13_caliber_a15115
   name: 15x115 cartridge
-  parent: CartridgePistol
+  parent: CartridgeRifle
   components:
     - type: CartridgeAmmo
       proto: civ13_bullet_a15115
@@ -121,7 +125,7 @@
 - type: entity
   id: civ13_caliber_a15115_ap
   name: 15x115 AP cartridge
-  parent: CartridgePistol
+  parent: CartridgeRifle
   components:
     - type: CartridgeAmmo
       proto: civ13_bullet_a15115
@@ -131,7 +135,7 @@
 - type: entity
   id: civ13_caliber_a15115_aphe
   name: 15x115 APHE cartridge
-  parent: CartridgePistol
+  parent: CartridgeRifle
   components:
     - type: CartridgeAmmo
       proto: civ13_bullet_a15115
@@ -141,7 +145,7 @@
 - type: entity
   id: civ13_caliber_a792x94
   name: 7.92x94mm cartridge
-  parent: CartridgePistol
+  parent: CartridgeRifle
   components:
     - type: CartridgeAmmo
       proto: civ13_bullet_a792x94
@@ -151,7 +155,7 @@
 - type: entity
   id: civ13_caliber_a792x94_ap
   name: 7.92x94mm AP cartridge
-  parent: CartridgePistol
+  parent: CartridgeRifle
   components:
     - type: CartridgeAmmo
       proto: civ13_bullet_a792x94
@@ -161,7 +165,7 @@
 - type: entity
   id: civ13_caliber_a65x52
   name: 6.5x52mm Carcano cartridge
-  parent: CartridgePistol
+  parent: CartridgeRifle
   components:
     - type: CartridgeAmmo
       proto: civ13_bullet_a65x52
@@ -171,7 +175,7 @@
 - type: entity
   id: civ13_caliber_a8x53
   name: 8x53mm Murata cartridge
-  parent: CartridgePistol
+  parent: CartridgeRifle
   components:
     - type: CartridgeAmmo
       proto: civ13_bullet_a8x53
@@ -181,7 +185,7 @@
 - type: entity
   id: civ13_caliber_a8x50
   name: 8x50mmR Lebel cartridge
-  parent: CartridgePistol
+  parent: CartridgeRifle
   components:
     - type: CartridgeAmmo
       proto: civ13_bullet_a8x50
@@ -301,7 +305,7 @@
 - type: entity
   id: civ13_caliber_a4570
   name: .45-70 Government cartridge
-  parent: CartridgePistol
+  parent: CartridgeRifle
   components:
     - type: CartridgeAmmo
       proto: civ13_bullet_a4570
@@ -311,7 +315,7 @@
 - type: entity
   id: civ13_caliber_a792x57
   name: 7.92x57mm Mauser cartridge
-  parent: CartridgePistol
+  parent: CartridgeRifle
   components:
     - type: CartridgeAmmo
       proto: civ13_bullet_a792x57
@@ -321,7 +325,7 @@
 - type: entity
   id: civ13_caliber_a765x53
   name: 7.65x53mm Mauser cartridge
-  parent: CartridgePistol
+  parent: CartridgeRifle
   components:
     - type: CartridgeAmmo
       proto: civ13_bullet_a765x53
@@ -341,7 +345,7 @@
 - type: entity
   id: civ13_caliber_a7x57
   name: 7x57mm Mauser cartridge
-  parent: CartridgePistol
+  parent: CartridgeRifle
   components:
     - type: CartridgeAmmo
       proto: civ13_bullet_a7x57
@@ -351,7 +355,7 @@
 - type: entity
   id: civ13_caliber_a77x58
   name: 7.7x58mm Arisaka cartridge
-  parent: CartridgePistol
+  parent: CartridgeRifle
   components:
     - type: CartridgeAmmo
       proto: civ13_bullet_a77x58
@@ -361,7 +365,7 @@
 - type: entity
   id: civ13_caliber_a77x58_wood
   name: 7.7x58mm bullet
-  parent: CartridgePistol
+  parent: CartridgeRifle
   components:
     - type: CartridgeAmmo
       proto: civ13_bullet_a77x58_wood
@@ -371,7 +375,7 @@
 - type: entity
   id: civ13_caliber_a577
   name: .577/450 Martini-Henry cartridge
-  parent: CartridgePistol
+  parent: CartridgeRifle
   components:
     - type: CartridgeAmmo
       proto: civ13_bullet_a577
@@ -381,7 +385,7 @@
 - type: entity
   id: civ13_caliber_a762x54
   name: 7.62x54mmR cartridge
-  parent: CartridgePistol
+  parent: CartridgeRifle
   components:
     - type: CartridgeAmmo
       proto: civ13_bullet_a762x54
@@ -391,7 +395,7 @@
 - type: entity
   id: civ13_caliber_a303
   name: .303 british cartridge
-  parent: CartridgePistol
+  parent: CartridgeRifle
   components:
     - type: CartridgeAmmo
       proto: civ13_bullet_a303
@@ -401,7 +405,7 @@
 - type: entity
   id: civ13_caliber_a3006
   name: .30-06 cartridge
-  parent: CartridgePistol
+  parent: CartridgeRifle
   components:
     - type: CartridgeAmmo
       proto: civ13_bullet_a3006
@@ -482,7 +486,7 @@
 - type: entity
   id: civ13_caliber_a545x39
   name: 5.45x39mm cartridge
-  parent: CartridgePistol
+  parent: CartridgeRifle
   components:
     - type: CartridgeAmmo
       proto: civ13_bullet_a545x39
@@ -512,7 +516,7 @@
 - type: entity
   id: civ13_caliber_a556x45
   name: 5.56x45mm NATO cartridge
-  parent: CartridgePistol
+  parent: CartridgeRifle
   components:
     - type: CartridgeAmmo
       proto: civ13_bullet_a556x45
@@ -522,7 +526,7 @@
 - type: entity
   id: civ13_caliber_a762x51
   name: 7.62x51mm NATO cartridge
-  parent: CartridgePistol
+  parent: CartridgeRifle
   components:
     - type: CartridgeAmmo
       proto: civ13_bullet_a762x51
@@ -532,7 +536,7 @@
 - type: entity
   id: civ13_caliber_a762x39
   name: 7.62x39mm cartridge
-  parent: CartridgePistol
+  parent: CartridgeRifle
   components:
     - type: CartridgeAmmo
       proto: civ13_bullet_a762x39

+ 46 - 95
Resources/Prototypes/Civ14/Entities/Objects/Guns/Ammo/entities_magazines.yml

@@ -33,10 +33,31 @@
       zeroVisible: false
     - type: Appearance
 
+- type: entity
+  id: civ13_base_clip
+  name: base clip
+  parent: civ13_magazine_default
+  abstract: true
+  components:
+    - type: STWeight
+      self: 0.15
+    - type: Sprite
+      sprite: Civ14/Objects/ammo.rsi
+      layers:
+        - state: clip-0
+          map: ["enum.GunVisualLayers.Base"]
+        - state: clip
+          map: ["enum.GunVisualLayers.Mag"]
+    - type: MagazineVisuals
+      magState: clip
+      steps: 6
+      zeroVisible: true
+    - type: Appearance
+
 - type: entity
   id: civ13_magazine_clip_(7.62x54mm)
   name: clip (7.62x54mm)
-  parent: civ13_magazine_default
+  parent: civ13_base_clip
   components:
     - type: BallisticAmmoProvider
       mayTransfer: true
@@ -45,13 +66,7 @@
       whitelist:
         tags:
           - civ13_caliber_a762x54
-    - type: Sprite
-      sprite: Civ14/Objects/ammo.rsi
-      layers:
-        - state: clip-0
-          map: ["enum.GunVisualLayers.Base"]
-        - state: clip
-          map: ["enum.GunVisualLayers.Mag"]
+
     - type: Tag
       tags:
         - civ13_magazine_clip_(7.62x54mm)
@@ -146,7 +161,7 @@
 - type: entity
   id: civ13_magazine_clip_(7.65x53mm)
   name: clip (7.65x53mm)
-  parent: civ13_magazine_default
+  parent: civ13_base_clip
   components:
     - type: BallisticAmmoProvider
       mayTransfer: true
@@ -190,7 +205,7 @@
 - type: entity
   id: civ13_magazine_clip_(7.92x57mm)
   name: clip (7.92x57mm)
-  parent: civ13_magazine_default
+  parent: civ13_base_clip
   components:
     - type: BallisticAmmoProvider
       mayTransfer: true
@@ -212,7 +227,7 @@
 - type: entity
   id: civ13_magazine_clip_(7.92x33mm)
   name: clip (7.92x33mm)
-  parent: civ13_magazine_default
+  parent: civ13_base_clip
   components:
     - type: BallisticAmmoProvider
       mayTransfer: true
@@ -234,7 +249,7 @@
 - type: entity
   id: civ13_magazine_clip_(7x53mm)
   name: clip (7x53mm)
-  parent: civ13_magazine_default
+  parent: civ13_base_clip
   components:
     - type: BallisticAmmoProvider
       mayTransfer: true
@@ -344,7 +359,7 @@
 - type: entity
   id: civ13_magazine_clip_(6.5x50mm)
   name: clip (6.5x50mm)
-  parent: civ13_magazine_default
+  parent: civ13_base_clip
   components:
     - type: BallisticAmmoProvider
       mayTransfer: true
@@ -388,7 +403,7 @@
 - type: entity
   id: civ13_magazine_clip_(6.5x52mm)
   name: clip (6.5x52mm)
-  parent: civ13_magazine_default
+  parent: civ13_base_clip
   components:
     - type: BallisticAmmoProvider
       mayTransfer: true
@@ -1005,7 +1020,7 @@
 - type: entity
   id: civ13_magazine_clip_(8x53mm)
   name: clip (8x53mm)
-  parent: civ13_magazine_default
+  parent: civ13_base_clip
   components:
     - type: BallisticAmmoProvider
       mayTransfer: true
@@ -1049,7 +1064,7 @@
 - type: entity
   id: civ13_magazine_clip_(.303)
   name: clip (.303)
-  parent: civ13_magazine_default
+  parent: civ13_base_clip
   components:
     - type: BallisticAmmoProvider
       mayTransfer: true
@@ -1058,13 +1073,7 @@
       whitelist:
         tags:
           - civ13_caliber_a303
-    - type: Sprite
-      sprite: Civ14/Objects/ammo.rsi
-      layers:
-        - state: clip-0
-          map: ["enum.GunVisualLayers.Base"]
-        - state: clip
-          map: ["enum.GunVisualLayers.Mag"]
+
     - type: Tag
       tags:
         - civ13_magazine_clip_(.303)
@@ -1093,7 +1102,7 @@
 - type: entity
   id: civ13_magazine_clip_(8x50mmR_Lebel,_3u)
   name: clip (8x50mmR Lebel, 3u)
-  parent: civ13_magazine_default
+  parent: civ13_base_clip
   components:
     - type: BallisticAmmoProvider
       mayTransfer: true
@@ -1102,20 +1111,14 @@
       whitelist:
         tags:
           - civ13_caliber_a8x50
-    - type: Sprite
-      sprite: Civ14/Objects/ammo.rsi
-      layers:
-        - state: clip-0
-          map: ["enum.GunVisualLayers.Base"]
-        - state: clip
-          map: ["enum.GunVisualLayers.Mag"]
+
     - type: Tag
       tags:
         - civ13_magazine_clip_(8x50mmR_Lebel,_3u)
 - type: entity
   id: civ13_magazine_clip_(8x50mmR_Lebel,_5u)
   name: clip (8x50mmR Lebel, 5u)
-  parent: civ13_magazine_default
+  parent: civ13_base_clip
   components:
     - type: BallisticAmmoProvider
       mayTransfer: true
@@ -1124,13 +1127,7 @@
       whitelist:
         tags:
           - civ13_caliber_a8x50
-    - type: Sprite
-      sprite: Civ14/Objects/ammo.rsi
-      layers:
-        - state: clip-0
-          map: ["enum.GunVisualLayers.Base"]
-        - state: clip
-          map: ["enum.GunVisualLayers.Mag"]
+
     - type: Tag
       tags:
         - civ13_magazine_clip_(8x50mmR_Lebel,_5u)
@@ -1270,7 +1267,7 @@
 - type: entity
   id: civ13_magazine_clip_(7.7x58mm)
   name: clip (7.7x58mm)
-  parent: civ13_magazine_default
+  parent: civ13_base_clip
   components:
     - type: BallisticAmmoProvider
       mayTransfer: true
@@ -1910,7 +1907,7 @@
 - type: entity
   id: civ13_magazine_clip_(30_06)_8_rounds
   name: clip (30-06) 8 rounds
-  parent: civ13_magazine_default
+  parent: civ13_base_clip
   components:
     - type: BallisticAmmoProvider
       mayTransfer: true
@@ -1998,7 +1995,7 @@
 - type: entity
   id: civ13_magazine_clip_(30_06)
   name: clip (30-06)
-  parent: civ13_magazine_default
+  parent: civ13_base_clip
   components:
     - type: BallisticAmmoProvider
       mayTransfer: true
@@ -2007,13 +2004,7 @@
       whitelist:
         tags:
           - civ13_caliber_a3006
-    - type: Sprite
-      sprite: Civ14/Objects/ammo.rsi
-      layers:
-        - state: clip-0
-          map: ["enum.GunVisualLayers.Base"]
-        - state: clip
-          map: ["enum.GunVisualLayers.Mag"]
+
     - type: Tag
       tags:
         - civ13_magazine_clip_(30_06)
@@ -2726,7 +2717,7 @@
 - type: entity
   id: civ13_magazine_clip_(7.62x51mm)
   name: clip (7.62x51mm)
-  parent: civ13_magazine_default
+  parent: civ13_base_clip
   components:
     - type: BallisticAmmoProvider
       mayTransfer: true
@@ -2735,13 +2726,7 @@
       whitelist:
         tags:
           - civ13_caliber_a762x51
-    - type: Sprite
-      sprite: Civ14/Objects/ammo.rsi
-      layers:
-        - state: clip-0
-          map: ["enum.GunVisualLayers.Base"]
-        - state: clip
-          map: ["enum.GunVisualLayers.Mag"]
+
     - type: Tag
       tags:
         - civ13_magazine_clip_(7.62x51mm)
@@ -3166,7 +3151,7 @@
 - type: entity
   id: civ13_magazine_clip_(7.62x39mm)
   name: clip (7.62x39mm)
-  parent: civ13_magazine_default
+  parent: civ13_base_clip
   components:
     - type: BallisticAmmoProvider
       mayTransfer: true
@@ -3175,20 +3160,14 @@
       whitelist:
         tags:
           - civ13_caliber_a762x39
-    - type: Sprite
-      sprite: Civ14/Objects/ammo.rsi
-      layers:
-        - state: clip-0
-          map: ["enum.GunVisualLayers.Base"]
-        - state: clip
-          map: ["enum.GunVisualLayers.Mag"]
+
     - type: Tag
       tags:
         - civ13_magazine_clip_(7.62x39mm)
 - type: entity
   id: civ13_magazine_clip_(14.5x114mm)
   name: clip (14.5x114mm)
-  parent: civ13_magazine_default
+  parent: civ13_base_clip
   components:
     - type: BallisticAmmoProvider
       mayTransfer: true
@@ -3197,13 +3176,7 @@
       whitelist:
         tags:
           - civ13_caliber_a145
-    - type: Sprite
-      sprite: Civ14/Objects/ammo.rsi
-      layers:
-        - state: clip-0
-          map: ["enum.GunVisualLayers.Base"]
-        - state: clip
-          map: ["enum.GunVisualLayers.Mag"]
+
     - type: Tag
       tags:
         - civ13_magazine_clip_(14.5x114mm)
@@ -3694,28 +3667,6 @@
     - type: Tag
       tags:
         - civ13_magazine_bullet_pouch_(20)
-- type: entity
-  id: civ13_magazine_clip_(5)
-  name: clip (5)
-  parent: civ13_magazine_default
-  components:
-    - type: BallisticAmmoProvider
-      mayTransfer: true
-      proto: CartridgePistol
-      capacity: 5
-      whitelist:
-        tags:
-          - CartridgePistol
-    - type: Sprite
-      sprite: Civ14/Objects/ammo.rsi
-      layers:
-        - state: clip-0
-          map: ["enum.GunVisualLayers.Base"]
-        - state: clip
-          map: ["enum.GunVisualLayers.Mag"]
-    - type: Tag
-      tags:
-        - civ13_magazine_clip_(5)
 
 - type: entity
   id: civ13_magazine_speedloader_(6)

+ 10 - 10
Resources/Prototypes/Civ14/Entities/Objects/Guns/ar_ar15.yml

@@ -11,8 +11,8 @@
     - type: Gun
       projectileSpeed: 32 # 7.62x51mm NATO
       fireRate: 4.8 # ~700 RPM
-      minAngle: 58 # Significant recoil
-      maxAngle: 140
+      minAngle: 8 # 58 - 50
+      maxAngle: 90 # 140 - 50
       angleIncrease: 7.5
       angleDecay: 22 # Slower recovery
       soundGunshot:
@@ -48,8 +48,8 @@
     - type: Gun
       projectileSpeed: 30 # 5.56x45mm
       fireRate: 5.5 # Represents fast cycling for semi-auto
-      minAngle: 40 # Low recoil
-      maxAngle: 80
+      minAngle: 1 # 40 - 50 = -10, set to 1 (Low recoil)
+      maxAngle: 30 # 80 - 50
       angleIncrease: 3.0
       angleDecay: 35 # Quick recovery
       soundGunshot:
@@ -88,8 +88,8 @@
     - type: Gun
       projectileSpeed: 30 # 5.56x45mm
       fireRate: 5.8 # ~750-900 RPM
-      minAngle: 42 # Good control, long rifle
-      maxAngle: 85
+      minAngle: 1 # 42 - 50 = -8, set to 1 (Good control, long rifle)
+      maxAngle: 35 # 85 - 50
       angleIncrease: 3.2
       angleDecay: 33
       soundGunshot:
@@ -164,8 +164,8 @@
     - type: Gun
       projectileSpeed: 29 # 5.56mm carbine, shorter barrel
       fireRate: 6.0 # ~750-950 RPM, can be lively
-      minAngle: 45 # More jumpy than M16
-      maxAngle: 95
+      minAngle: 3 # 45 - 50 = -5, set to 3 (More jumpy than M16)
+      maxAngle: 45 # 95 - 50
       angleIncrease: 4.0
       angleDecay: 30
       soundGunshot:
@@ -188,8 +188,8 @@
     - type: Gun
       projectileSpeed: 29 # 5.56mm carbine
       fireRate: 5.9 # ~700-900 RPM, slightly more refined than XM177E2
-      minAngle: 44 # Good control for a carbine
-      maxAngle: 90
+      minAngle: 2 # 44 - 50 = -6, set to 2 (Good control for a carbine)
+      maxAngle: 40 # 90 - 50
       angleIncrease: 3.8
       angleDecay: 31
       soundGunshot:

+ 30 - 30
Resources/Prototypes/Civ14/Entities/Objects/Guns/ar_kalashnikov.yml

@@ -12,8 +12,8 @@
       sprite: Civ14/Weapons/Guns/ak47.rsi
     - type: Gun
       projectileSpeed: 30 # Base 7.62x39mm
-      minAngle: 52 # Standard AKM recoil profile
-      maxAngle: 125
+      minAngle: 2 # 52 - 50 (Matches new BaseGunCivAR)
+      maxAngle: 75 # 125 - 50 (Matches new BaseGunCivAR)
       angleIncrease: 6
       angleDecay: 25
       fireRate: 4 # ~600 RPM
@@ -62,7 +62,7 @@
       quickEquip: true
       sprite: Civ14/Weapons/Guns/akms.rsi
     - type: Gun # AKMS with folding stock, slightly less stable
-      maxAngle: 130 # Slightly wider max spread than AKM
+      maxAngle: 80 # 130 - 50 (minAngle inherited from AKM: 2)
       angleIncrease: 6.2 # Slightly more kick per shot than AKM
       # Inherits other gun stats from AKM
 
@@ -79,8 +79,8 @@
     - type: Gun
       projectileSpeed: 30 # 5.45x39mm
       fireRate: 4.2 # ~650 RPM, slightly faster
-      minAngle: 48 # Less recoil than AKM
-      maxAngle: 100
+      minAngle: 1 # 48 - 50 = -2, set to 1 (Less recoil than AKM)
+      maxAngle: 50 # 100 - 50
       angleIncrease: 4.5
       angleDecay: 28 # Recovers a bit faster
       soundGunshot:
@@ -113,7 +113,7 @@
       sprite: Civ14/Weapons/Guns/aks74.rsi
       quickEquip: true
     - type: Gun # AKS-74 with folding stock
-      maxAngle: 105 # Slightly wider max spread than AK-74
+      maxAngle: 55 # 105 - 50 (minAngle inherited from AK-74: 1)
       angleIncrease: 4.7 # Slightly more kick per shot than AK-74
       # Inherits other gun stats from AK-74
 
@@ -130,8 +130,8 @@
     - type: Gun # AKS-74U Carbine "Krinkov"
       projectileSpeed: 27 # Shorter barrel, lower velocity
       fireRate: 4.8 # Higher RoF ~700-750 RPM
-      minAngle: 50 # More jumpy
-      maxAngle: 115
+      minAngle: 3 # 50 - 50 = 0, set to 3 (More jumpy)
+      maxAngle: 65 # 115 - 50
       angleIncrease: 5.5
       angleDecay: 26
 
@@ -151,8 +151,8 @@
     - type: Gun # AKS-74U SpecOps, similar to AKS-74U, maybe slightly better handling
       projectileSpeed: 27
       fireRate: 4.8
-      minAngle: 48 # Slightly better control
-      maxAngle: 110
+      minAngle: 2 # 48 - 50 = -2, set to 2 (Slightly better control than AKS-74U)
+      maxAngle: 60 # 110 - 50
       angleIncrease: 5.2
       angleDecay: 27
 
@@ -167,8 +167,8 @@
     - type: Clothing
       sprite: Civ14/Weapons/Guns/ak74m.rsi
     - type: Gun # AK-74M, modernized AK-74
-      minAngle: 47 # Better ergonomics, improved control
-      maxAngle: 95
+      minAngle: 1 # 47 - 50 = -3, set to 1 (Better ergonomics, improved control)
+      maxAngle: 45 # 95 - 50
       angleIncrease: 4.3
       angleDecay: 29 # Recovers faster
       # Inherits projectileSpeed, fireRate, soundGunshot from AK-74
@@ -186,8 +186,8 @@
     - type: Gun
       projectileSpeed: 30 # 5.56x45mm NATO
       fireRate: 4.2 # ~650 RPM, similar to AK-74M
-      minAngle: 47 # Good control, similar to AK-74M
-      maxAngle: 95
+      minAngle: 1 # 47 - 50 = -3, set to 1 (Good control, similar to AK-74M)
+      maxAngle: 45 # 95 - 50
       angleIncrease: 4.3
       angleDecay: 29
       soundGunshot:
@@ -223,8 +223,8 @@
     - type: Gun # AK-102 Carbine (5.56x45mm)
       projectileSpeed: 28 # Shorter barrel
       fireRate: 4.6 # Higher RoF
-      minAngle: 49
-      maxAngle: 110 # More jumpy than full-size
+      minAngle: 2 # 49 - 50 = -1, set to 2 (Carbine)
+      maxAngle: 60 # 110 - 50
       angleIncrease: 5.0
       angleDecay: 27
 
@@ -241,8 +241,8 @@
     - type: Gun
       projectileSpeed: 30 # 7.62x39mm
       fireRate: 4.0 # ~600 RPM, like AKM
-      minAngle: 50 # Slightly better control than base AKM due to modern design
-      maxAngle: 120
+      minAngle: 2 # 50 - 50 = 0, set to 2 (Slightly better control than base AKM)
+      maxAngle: 70 # 120 - 50
       angleIncrease: 5.8
       angleDecay: 26
       soundGunshot:
@@ -263,8 +263,8 @@
     - type: Gun # AK-104 Carbine (7.62x39mm)
       projectileSpeed: 28 # Shorter barrel
       fireRate: 4.3 # Slightly higher RoF
-      minAngle: 55 # More initial kick due to caliber and short barrel
-      maxAngle: 140 # Wider spread
+      minAngle: 5 # 55 - 50
+      maxAngle: 90 # 140 - 50
       angleIncrease: 7.0 # More climb
       angleDecay: 23 # Slower to settle
 
@@ -283,8 +283,8 @@
     - type: Gun # AK-105 Carbine (5.45x39mm), similar to AKS-74U/AK-74M carbine
       projectileSpeed: 27
       fireRate: 4.8
-      minAngle: 49 # Bit better than older Krinkovs
-      maxAngle: 110
+      minAngle: 2 # 49 - 50 = -1, set to 2 (Carbine)
+      maxAngle: 60 # 110 - 50
       angleIncrease: 5.3
       angleDecay: 27
 
@@ -301,8 +301,8 @@
     - type: Gun # AK-12 (5.45x39mm), modern design
       projectileSpeed: 31 # Potentially slightly higher velocity/consistency
       fireRate: 5.0 # ~700 RPM
-      minAngle: 42 # Very controllable for an AK
-      maxAngle: 85
+      minAngle: 1 # 42 - 50 = -8, set to 1 (Very controllable for an AK)
+      maxAngle: 35 # 85 - 50
       angleIncrease: 3.8
       angleDecay: 32 # Recovers well
 
@@ -319,8 +319,8 @@
     - type: Gun
       projectileSpeed: 30 # 7.62x39mm
       fireRate: 4.8 # ~700 RPM, similar to AK-12
-      minAngle: 48 # More kick than AK-12 but better than AKM
-      maxAngle: 110
+      minAngle: 3 # 48 - 50 = -2, set to 3 (More kick than AK-12 but better than AKM)
+      maxAngle: 60 # 110 - 50
       angleIncrease: 5.0
       angleDecay: 28
       soundGunshot:
@@ -339,8 +339,8 @@
     - type: Gun
       projectileSpeed: 29 # Unreliable
       fireRate: 3.8 # Slower, clunkier
-      minAngle: 60 # Poor initial accuracy
-      maxAngle: 150 # Very wide spread
+      minAngle: 10 # 60 - 50
+      maxAngle: 100 # 150 - 50
       angleIncrease: 7.5 # Lots of kick
       angleDecay: 20 # Hard to recover
       soundGunshot:
@@ -375,8 +375,8 @@
     - type: Gun
       projectileSpeed: 30 # 7.62x39mm
       fireRate: 5.8 # ~800 RPM, very fast
-      minAngle: 54
-      maxAngle: 135 # Higher RoF makes it climb
+      minAngle: 4 # 54 - 50
+      maxAngle: 85 # 135 - 50
       angleIncrease: 6.5
       angleDecay: 24
       soundGunshot:

+ 26 - 29
Resources/Prototypes/Civ14/Entities/Objects/Guns/entities_assaultrifles.yml

@@ -41,13 +41,10 @@
         gun_magazine: !type:ContainerSlot
         gun_chamber: !type:ContainerSlot
     - type: Wieldable
-    - type: GunWieldBonus
-      minAngle: -40
-      maxAngle: -40
     - type: Gun
       projectileSpeed: 30
-      minAngle: 52
-      maxAngle: 125
+      minAngle: 2 # 52 - 50
+      maxAngle: 75 # 125 - 50
       angleIncrease: 6
       angleDecay: 25
       fireRate: 4
@@ -80,8 +77,8 @@
     - type: Gun
       projectileSpeed: 28 # 7.92 Kurz is a bit slower
       fireRate: 3.7 # ~500 RPM
-      minAngle: 50
-      maxAngle: 110 # More controllable than base AK
+      minAngle: 2 # 50 - 50 = 0, set to 2 (more controllable than base AK which is 2)
+      maxAngle: 60 # 110 - 50
       angleIncrease: 5.0
       angleDecay: 27
       soundGunshot:
@@ -116,8 +113,8 @@
     - type: Gun
       projectileSpeed: 32 # Full power 7.62 NATO
       fireRate: 3.8 # ~500-600 RPM
-      minAngle: 60 # Higher recoil
-      maxAngle: 150
+      minAngle: 10 # 60 - 50
+      maxAngle: 100 # 150 - 50
       angleIncrease: 8.0
       angleDecay: 20 # Slower recoil recovery
       soundGunshot:
@@ -152,8 +149,8 @@
     - type: Gun
       projectileSpeed: 32 # Full power 7.62 NATO
       fireRate: 4.5 # ~650-700 RPM
-      minAngle: 62 # Significant recoil
-      maxAngle: 160
+      minAngle: 12 # 62 - 50
+      maxAngle: 110 # 160 - 50
       angleIncrease: 8.5
       angleDecay: 18 # Hard to control on full auto
       soundGunshot:
@@ -188,8 +185,8 @@
     - type: Gun
       projectileSpeed: 30 # Standard 5.56
       fireRate: 4.5 # ~550-650 RPM
-      minAngle: 45 # Very controllable
-      maxAngle: 95
+      minAngle: 1 # 45 - 50 = -5, set to 1 (Very controllable)
+      maxAngle: 45 # 95 - 50
       angleIncrease: 4.0
       angleDecay: 30 # Recovers quickly
       soundGunshot:
@@ -224,8 +221,8 @@
     - type: Gun
       projectileSpeed: 32 # Full power 7.62 NATO
       fireRate: 4.2 # ~600 RPM
-      minAngle: 55 # More controllable than older .308s
-      maxAngle: 130
+      minAngle: 5 # 55 - 50
+      maxAngle: 80 # 130 - 50
       angleIncrease: 7.0
       angleDecay: 22
       soundGunshot:
@@ -260,8 +257,8 @@
     - type: Gun
       projectileSpeed: 32 # Full power 7.62 NATO
       fireRate: 4.8 # ~700-750 RPM, very fast for caliber
-      minAngle: 65 # Very high recoil
-      maxAngle: 170
+      minAngle: 15 # 65 - 50
+      maxAngle: 120 # 170 - 50
       angleIncrease: 9.5 # Difficult to control
       angleDecay: 17 # Slowest recoil recovery
       soundGunshot:
@@ -296,8 +293,8 @@
     - type: Gun
       projectileSpeed: 30 # 5.8x42mm, similar to other intermediate
       fireRate: 4.3 # ~650 RPM
-      minAngle: 46 # Good control for a bullpup
-      maxAngle: 90
+      minAngle: 2 # 46 - 50 = -4, set to 2 (Good control for a bullpup)
+      maxAngle: 40 # 90 - 50
       angleIncrease: 4.2
       angleDecay: 29
       soundGunshot:
@@ -334,8 +331,8 @@
     - type: Gun
       projectileSpeed: 25 # .30 Carbine, lower velocity
       fireRate: 5.0 # ~750 RPM
-      minAngle: 40 # Low recoil round
-      maxAngle: 80
+      minAngle: 1 # 40 - 50 = -10, set to 1 (Low recoil round)
+      maxAngle: 30 # 80 - 50
       angleIncrease: 3.5
       angleDecay: 30
       soundGunshot:
@@ -369,8 +366,8 @@
     - type: Gun
       projectileSpeed: 22 # 9x39mm subsonic, heavy
       fireRate: 6.0 # ~900 RPM, very fast
-      minAngle: 48 # Manageable due to subsonic nature, but high RoF
-      maxAngle: 100
+      minAngle: 2 # 48 - 50 = -2, set to 2 (Manageable)
+      maxAngle: 50 # 100 - 50
       angleIncrease: 5.0 # Will climb on full auto
       angleDecay: 27
       soundGunshot:
@@ -407,8 +404,8 @@
     - type: Gun
       projectileSpeed: 30 # 5.56x45mm
       fireRate: 4.8 # ~700 RPM
-      minAngle: 44 # Good control (A2 version)
-      maxAngle: 88
+      minAngle: 2 # 44 - 50 = -6, set to 2 (Good control A2)
+      maxAngle: 38 # 88 - 50
       angleIncrease: 3.9
       angleDecay: 31
       soundGunshot:
@@ -444,8 +441,8 @@
     - type: Gun
       projectileSpeed: 30 # 5.56x45mm
       fireRate: 4.9 # ~720 RPM
-      minAngle: 43 # Excellent control for a bullpup
-      maxAngle: 85
+      minAngle: 1 # 43 - 50 = -7, set to 1 (Excellent control for a bullpup)
+      maxAngle: 35 # 85 - 50
       angleIncrease: 3.7
       angleDecay: 32
       soundGunshot:
@@ -480,8 +477,8 @@
     - type: Gun
       projectileSpeed: 32 # 7.62x51mm NATO
       fireRate: 4.0 # ~600 RPM
-      minAngle: 56 # Solid kick
-      maxAngle: 135 # Controllable for its class
+      minAngle: 6 # 56 - 50
+      maxAngle: 85 # 135 - 50
       angleIncrease: 7.2 # Noticeable climb
       angleDecay: 23 # Good recovery
       soundGunshot:

+ 29 - 53
Resources/Prototypes/Civ14/Entities/Objects/Guns/entities_boltaction.yml

@@ -23,6 +23,7 @@
     - type: Clothing
       sprite: Civ14/Weapons/Guns/mosin.rsi
       quickEquip: false
+      equipDelay: 1
       slots:
         - Back
     - type: AmmoCounter
@@ -49,14 +50,12 @@
         path: /Audio/Weapons/Guns/Fire/Mosin.ogg
       projectileSpeed: 50 # High velocity for rifle rounds
       minAngle: 3 # Base accuracy for an aimed shot (very good)
-      maxAngle: 60 # Maximum upward/sideways kick angle
+      maxAngle: 10 # Maximum upward/sideways kick angle
       angleIncrease: 20 # Initial jump/kick from firing a powerful round
       angleDecay: 35 # Speed of aim recovery/settling after shot
-      fireRate: 0.8 # Approx 1.25 sec per shot (cycling + re-aim)
+      fireRate: 1
     - type: Wieldable
-    - type: GunWieldBonus
-      minAngle: -50
-      maxAngle: -50
+
 # Imported
 
 - type: entity
@@ -77,10 +76,9 @@
     - type: Gun # Single-shot, large caliber
       projectileSpeed: 45
       minAngle: 4
-      maxAngle: 70
+      maxAngle: 20
       angleIncrease: 25
       angleDecay: 30
-      fireRate: 0.4 # Slow to load single round
       soundGunshot:
         path: /Audio/Weapons/Guns/Fire/Kar98k.ogg
     - type: BallisticAmmoProvider
@@ -108,10 +106,9 @@
     - type: Gun # Single-shot, large caliber
       projectileSpeed: 45
       minAngle: 4
-      maxAngle: 70
+      maxAngle: 20
       angleIncrease: 25
       angleDecay: 30
-      fireRate: 0.4 # Slow to load single round
       soundGunshot:
         path: /Audio/Weapons/Guns/Fire/Kar98k.ogg
     - type: BallisticAmmoProvider
@@ -139,10 +136,9 @@
     - type: Gun # Single-shot, large caliber
       projectileSpeed: 45
       minAngle: 4
-      maxAngle: 70
+      maxAngle: 20
       angleIncrease: 25
       angleDecay: 30
-      fireRate: 0.4 # Slow to load single round
       soundGunshot:
         path: /Audio/Weapons/Guns/Fire/Kar98k.ogg
     - type: BallisticAmmoProvider
@@ -183,10 +179,9 @@
     - type: Gun # Single-shot, makeshift
       projectileSpeed: 48
       minAngle: 10 # Poorly made
-      maxAngle: 90
+      maxAngle: 40
       angleIncrease: 30 # Unwieldy
       angleDecay: 20
-      fireRate: 0.3 # Clumsy to reload
       soundGunshot:
         path: /Audio/Weapons/Guns/Fire/Mosin.ogg
     - type: BallisticAmmoProvider
@@ -216,10 +211,9 @@
     - type: Gun
       projectileSpeed: 60 # Very high velocity .50 BMG
       minAngle: 5 # Precision despite power
-      maxAngle: 120 # Massive kick
+      maxAngle: 70 # Massive kick
       angleIncrease: 50
       angleDecay: 15 # Slow to resettle
-      fireRate: 0.2 # Very slow, single heavy round
       soundGunshot:
         path: /Audio/Weapons/Guns/Fire/BarrettM99.ogg
     - type: BallisticAmmoProvider
@@ -251,10 +245,9 @@
     - type: Gun
       projectileSpeed: 65 # 14.5mm
       minAngle: 6
-      maxAngle: 150 # Extreme kick
+      maxAngle: 100 # Extreme kick
       angleIncrease: 60
       angleDecay: 10
-      fireRate: 0.15 # Extremely slow, single heavy round
       soundGunshot:
         path: /Audio/Weapons/Guns/Fire/ptrd.ogg
     - type: BallisticAmmoProvider
@@ -284,10 +277,9 @@
     - type: Gun
       projectileSpeed: 62 # 7.92x94mm Patrone 318
       minAngle: 6
-      maxAngle: 140
+      maxAngle: 90
       angleIncrease: 55
       angleDecay: 12
-      fireRate: 0.18 # Very slow, single heavy round
       soundGunshot:
         path: /Audio/Weapons/Guns/Fire/ptrd.ogg
     - type: BallisticAmmoProvider
@@ -369,10 +361,9 @@
     - type: Gun
       projectileSpeed: 35 # Sawn-off, lower velocity
       minAngle: 15 # Very inaccurate base
-      maxAngle: 100 # Wild kick
+      maxAngle: 50 # Wild kick
       angleIncrease: 40
       angleDecay: 20 # Hard to control
-      fireRate: 0.7 # Clumsier to cycle
       soundGunshot:
         path: /Audio/Weapons/Guns/Fire/Mosin.ogg
     - type: BallisticAmmoProvider
@@ -398,7 +389,7 @@
     - type: Gun # 6.5x50mm Arisaka
       projectileSpeed: 48
       minAngle: 3
-      maxAngle: 55 # Milder kick
+      maxAngle: 5 # Milder kick
       angleIncrease: 18
       angleDecay: 38
       soundGunshot:
@@ -464,11 +455,9 @@
     - type: Gun # 7.7x58mm Arisaka
       projectileSpeed: 49
       minAngle: 3
-      maxAngle: 60
+      maxAngle: 10
       angleIncrease: 20
       angleDecay: 35
-      # fireRate inherits 0.8
-      # soundGunshot inherits Kar98k.ogg
 
 - type: entity
   name: Training Arisaka Type 99
@@ -490,10 +479,9 @@
     - type: Gun
       projectileSpeed: 15 # Wooden bullet
       minAngle: 5
-      maxAngle: 20 # Very little kick
+      maxAngle: 7 # Very little kick
       angleIncrease: 3
       angleDecay: 45
-      # fireRate inherits 0.8
       soundGunshot:
         path: /Audio/Weapons/Guns/Fire/rifle.ogg
     - type: BallisticAmmoProvider
@@ -521,10 +509,9 @@
     - type: Gun
       projectileSpeed: 48 # 7.65x53mm Mauser
       minAngle: 4 # Older design
-      maxAngle: 60
+      maxAngle: 10
       angleIncrease: 20
       angleDecay: 33
-      fireRate: 0.75 # Slightly slower bolt
       soundGunshot:
         path: /Audio/Weapons/Guns/Fire/Kar98k.ogg
     - type: BallisticAmmoProvider
@@ -550,7 +537,7 @@
     - type: Gun # Assuming 7.65x53mm based on proto
       projectileSpeed: 48
       minAngle: 3
-      maxAngle: 60
+      maxAngle: 10
       angleIncrease: 19
       angleDecay: 35
       soundGunshot:
@@ -583,7 +570,6 @@
       # maxAngle: 60 (inherited)
       # angleIncrease: 20 (inherited)
       # angleDecay: 33 (inherited)
-      # fireRate: 0.75 (inherited)
     - type: BallisticAmmoProvider
       capacity: 5
       proto: civ13_caliber_a765x53
@@ -609,10 +595,9 @@
     - type: Gun # 7x57mm Mauser
       projectileSpeed: 49
       minAngle: 3
-      maxAngle: 58 # Well-balanced
+      maxAngle: 8 # Well-balanced
       angleIncrease: 19
       angleDecay: 36
-      fireRate: 0.8 # Standard Mauser bolt
     - type: BallisticAmmoProvider
       capacity: 5
       proto: civ13_caliber_a7x57
@@ -651,10 +636,9 @@
     - type: Gun # 7.92x57mm Mauser
       projectileSpeed: 50
       minAngle: 3
-      maxAngle: 60
+      maxAngle: 10
       angleIncrease: 20
       angleDecay: 35
-      fireRate: 0.85 # Smooth Mauser bolt
       soundGunshot:
         path: /Audio/Weapons/Guns/Fire/Kar98k.ogg
     - type: BallisticAmmoProvider
@@ -755,10 +739,9 @@
     - type: Gun # 7.92x33mm Kurz
       projectileSpeed: 40 # Intermediate cartridge
       minAngle: 5 # Crude rifle
-      maxAngle: 45 # Low recoil round
+      maxAngle: 12 # Low recoil round
       angleIncrease: 12
       angleDecay: 40
-      fireRate: 0.9 # Lighter bolt
       soundGunshot:
         path: /Audio/Weapons/Guns/Fire/stg.ogg
     - type: BallisticAmmoProvider
@@ -786,7 +769,7 @@
     - type: Gun # .303 British
       projectileSpeed: 49
       minAngle: 3
-      maxAngle: 62
+      maxAngle: 12
       angleIncrease: 21
       angleDecay: 34
       soundGunshot:
@@ -814,10 +797,9 @@
     - type: Gun # 6.5x52mm Carcano
       projectileSpeed: 47
       minAngle: 4 # Mixed accuracy reputation
-      maxAngle: 55
+      maxAngle: 5
       angleIncrease: 18
       angleDecay: 37
-      fireRate: 0.75
       soundGunshot:
         path: /Audio/Weapons/Guns/Fire/Kar98k.ogg
     - type: BallisticAmmoProvider
@@ -843,10 +825,9 @@
     - type: Gun # 8x53mm Murata
       projectileSpeed: 46 # Older round
       minAngle: 5
-      maxAngle: 65
+      maxAngle: 15
       angleIncrease: 22
       angleDecay: 30
-      fireRate: 0.7
       soundGunshot:
         path: /Audio/Weapons/Guns/Fire/Kar98k.ogg
     - type: BallisticAmmoProvider
@@ -872,10 +853,9 @@
     - type: Gun # 7.62x54R, older bolt
       projectileSpeed: 48
       minAngle: 6
-      maxAngle: 70
+      maxAngle: 20
       angleIncrease: 25
       angleDecay: 28
-      fireRate: 0.6 # Slower than Mosin
       soundGunshot:
         path: /Audio/Weapons/Guns/Fire/Kar98k.ogg
     - type: BallisticAmmoProvider
@@ -903,10 +883,9 @@
     - type: Gun # .303 British, fast bolt
       projectileSpeed: 49
       minAngle: 3
-      maxAngle: 60
+      maxAngle: 10
       angleIncrease: 20
       angleDecay: 36
-      fireRate: 0.9 # Known for fast bolt
       soundGunshot:
         path: /Audio/Weapons/Guns/Fire/Kar98k.ogg
     - type: BallisticAmmoProvider
@@ -934,10 +913,9 @@
     - type: Gun # 8x50mmR Lebel
       projectileSpeed: 48
       minAngle: 4
-      maxAngle: 65
+      maxAngle: 15
       angleIncrease: 22
       angleDecay: 32
-      fireRate: 0.7 # Older bolt, tube mag
       soundGunshot:
         path: /Audio/Weapons/Guns/Fire/Kar98k.ogg
     - type: BallisticAmmoProvider
@@ -963,10 +941,9 @@
     - type: Gun # 8x50mmR Lebel, carbine
       projectileSpeed: 47
       minAngle: 4
-      maxAngle: 68 # Snappier recoil
+      maxAngle: 18 # Snappier recoil
       angleIncrease: 23
       angleDecay: 30
-      fireRate: 0.75 # Clip loading
       soundGunshot:
         path: /Audio/Weapons/Guns/Fire/Kar98k.ogg
     - type: BallisticAmmoProvider
@@ -1005,10 +982,9 @@
     - type: Gun # 7.62x51mm NATO, modern sniper
       projectileSpeed: 52
       minAngle: 1 # Precision rifle
-      maxAngle: 50 # Good recoil management
+      maxAngle: 5 # Still extremely steady, but legal
       angleIncrease: 18
       angleDecay: 40
-      fireRate: 0.85 # Smooth modern bolt
       soundGunshot:
         path: /Audio/Weapons/Guns/Fire/Kar98k.ogg
     - type: BallisticAmmoProvider
@@ -1036,7 +1012,7 @@
     - type: Gun # .30-06 Springfield
       projectileSpeed: 51
       minAngle: 3
-      maxAngle: 65
+      maxAngle: 15
       angleIncrease: 22
       angleDecay: 33
       soundGunshot:

+ 35 - 32
Resources/Prototypes/Civ14/Entities/Objects/Guns/entities_mg.yml

@@ -2,11 +2,17 @@
   name: BaseGunCivMG
   parent: BaseGunCiv
   id: BaseGunCivMG
+  suffix: MG
   description: A basic machinegun.
   abstract: true
   components:
     - type: Sprite
       sprite: Civ14/Weapons/Guns/pkmp.rsi
+      layers:
+        - state: icon
+          map: ["enum.GunVisualLayers.Base"]
+        - state: mag-0
+          map: ["enum.GunVisualLayers.Mag"]
     - type: Clothing
       slots: 0
       sprite: Civ14/Weapons/Guns/pkmp.rsi
@@ -31,7 +37,7 @@
       projectileSpeed: 32 # PKM: 7.62x54mmR
       fireRate: 4.3 # PKM: ~650 RPM
       minAngle: 5
-      maxAngle: 60
+      maxAngle: 35
       angleIncrease: 4
       angleDecay: 20
     - type: ItemSlots
@@ -51,7 +57,14 @@
           whitelist:
             tags:
               - civ13_caliber_a762x54
-
+    - type: ChamberMagazineAmmoProvider
+      boltClosed: true
+      soundRack:
+        path: /Audio/Weapons/Guns/Cock/lmg_cock.ogg
+    - type: MagazineVisuals
+      magState: mag
+      steps: 1
+      zeroVisible: true
 - type: entity
   name: PKM machine gun
   parent: BaseGunCivMG
@@ -96,7 +109,7 @@
       projectileSpeed: 32 # 7.92x57mm
       fireRate: 4.0 # ~600 RPM
       minAngle: 8 # Older LMG
-      maxAngle: 70
+      maxAngle: 30
       angleIncrease: 4.5
       angleDecay: 18
       soundGunshot:
@@ -130,7 +143,7 @@
       projectileSpeed: 32 # 7.92x57mm (inherited from parent, can be explicit)
       fireRate: 6.0 # ~800-900 RPM
       minAngle: 10 # Higher RoF than MG13
-      maxAngle: 80
+      maxAngle: 40
       angleIncrease: 5.0
       angleDecay: 17
       soundGunshot:
@@ -153,7 +166,7 @@
       projectileSpeed: 32 # 7.92x57mm (inherited from parent, can be explicit)
       fireRate: 7.5 # ~1200-1500 RPM "Hitler's Buzzsaw"
       minAngle: 15 # Very high recoil
-      maxAngle: 100
+      maxAngle: 40
       angleIncrease: 6.0
       angleDecay: 15
       soundGunshot:
@@ -176,7 +189,7 @@
       projectileSpeed: 32 # 7.62x51mm
       fireRate: 7.0 # ~1000-1300 RPM (modernized MG42)
       minAngle: 12 # Still very high recoil
-      maxAngle: 90
+      maxAngle: 38
       angleIncrease: 5.5
       angleDecay: 16
       soundGunshot:
@@ -212,7 +225,7 @@
       projectileSpeed: 32 # 7.62x51mm
       fireRate: 5.0 # ~750 RPM (FN MAG can vary)
       minAngle: 6 # Good GPMG, comparable to PKM base
-      maxAngle: 65
+      maxAngle: 25
       angleIncrease: 4.2
       angleDecay: 22
       soundGunshot:
@@ -249,7 +262,7 @@
       projectileSpeed: 32 # 7.62x54mmR (as per item slot)
       fireRate: 3.5 # ~450-500 RPM (Older LMG)
       minAngle: 10 # Older, less refined
-      maxAngle: 75
+      maxAngle: 35
       angleIncrease: 5.0
       angleDecay: 18
       soundGunshot:
@@ -284,7 +297,7 @@
       projectileSpeed: 31 # 7.7x58mm Arisaka
       fireRate: 3.8 # ~550 RPM
       minAngle: 9
-      maxAngle: 70
+      maxAngle: 30
       angleIncrease: 4.8
       angleDecay: 19
       soundGunshot:
@@ -320,7 +333,7 @@
       projectileSpeed: 30 # 6.5x50mm Arisaka (milder)
       fireRate: 3.8 # ~550 RPM
       minAngle: 7 # Milder round, better control
-      maxAngle: 65
+      maxAngle: 25
       angleIncrease: 4.2
       angleDecay: 21
       soundGunshot:
@@ -353,7 +366,7 @@
       projectileSpeed: 32 # 7.62x54mmR
       fireRate: 3.8 # ~500-600 RPM
       minAngle: 10 # Awkward pan magazine
-      maxAngle: 75
+      maxAngle: 35
       angleIncrease: 5.2
       angleDecay: 18
       soundGunshot:
@@ -389,7 +402,7 @@
       projectileSpeed: 33 # .30-06
       fireRate: 3.7 # ~550 RPM (fast setting)
       minAngle: 12 # Heavy automatic rifle
-      maxAngle: 85
+      maxAngle: 45
       angleIncrease: 6.0
       angleDecay: 17
       soundGunshot:
@@ -425,7 +438,7 @@
       projectileSpeed: 33 # .30-06
       fireRate: 3.8 # ~500 RPM
       minAngle: 8 # Heavy, stable GPMG
-      maxAngle: 70
+      maxAngle: 30
       angleIncrease: 5.0
       angleDecay: 20
       soundGunshot:
@@ -461,7 +474,7 @@
       projectileSpeed: 30 # 5.56x45mm
       fireRate: 5.8 # ~850 RPM
       minAngle: 4 # Controllable LMG
-      maxAngle: 55
+      maxAngle: 18
       angleIncrease: 3.5
       angleDecay: 24
       soundGunshot:
@@ -495,7 +508,7 @@
       projectileSpeed: 30 # 7.62x39mm
       fireRate: 4.8 # ~700 RPM
       minAngle: 6 # Intermediate cartridge LMG
-      maxAngle: 60
+      maxAngle: 20
       angleIncrease: 4.0
       angleDecay: 22
       soundGunshot:
@@ -527,16 +540,6 @@
     - type: Clothing
       slots: 0
       sprite: Civ14/Weapons/Guns/c6.rsi
-    - type: Gun
-      # Explicitly defining stats, though it inherits from FN MAG
-      projectileSpeed: 32 # 7.62x51mm
-      fireRate: 5.0 # ~750 RPM
-      minAngle: 6
-      maxAngle: 65
-      angleIncrease: 4.2
-      angleDecay: 22
-      soundGunshot:
-        path: /Audio/Weapons/Guns/Fire/M60.ogg # Using M60 sound as specified
 
 - type: entity
   name: M60
@@ -555,7 +558,7 @@
       projectileSpeed: 32 # 7.62x51mm
       fireRate: 4.0 # ~550-600 RPM "The Pig"
       minAngle: 10 # Unwieldy
-      maxAngle: 80
+      maxAngle: 40
       angleIncrease: 5.5
       angleDecay: 18
       soundGunshot:
@@ -590,7 +593,7 @@
       projectileSpeed: 32 # Explicit for clarity, same as base
       fireRate: 4.8 # ~700 RPM, faster than base PKM
       minAngle: 4 # Better control than base PKM
-      maxAngle: 55
+      maxAngle: 35
       angleIncrease: 3.8
       angleDecay: 23
       soundGunshot:
@@ -611,7 +614,7 @@
       projectileSpeed: 30 # 5.45x39mm
       fireRate: 4.0 # ~600 RPM (like AK-74)
       minAngle: 3 # Very controllable LMG
-      maxAngle: 50
+      maxAngle: 18
       angleIncrease: 3.0
       angleDecay: 25
       soundGunshot:
@@ -646,7 +649,7 @@
       projectileSpeed: 30 # Explicit for clarity, same as parent
       fireRate: 4.8 # ~700 RPM, faster than RPK-74
       minAngle: 2 # Excellent control
-      maxAngle: 45
+      maxAngle: 11
       angleIncrease: 2.8
       angleDecay: 28
       soundGunshot:
@@ -667,7 +670,7 @@
       projectileSpeed: 30 # 7.62x39mm
       fireRate: 4.0 # ~600 RPM (like AKM)
       minAngle: 5 # More kick than RPK-74, similar to PKM base
-      maxAngle: 60
+      maxAngle: 22
       angleIncrease: 4.0
       angleDecay: 22
       soundGunshot:
@@ -696,7 +699,7 @@
       projectileSpeed: 30
       fireRate: 4.0
       minAngle: 5
-      maxAngle: 60
+      maxAngle: 20
       angleIncrease: 4.0
       angleDecay: 22
       soundGunshot:
@@ -717,7 +720,7 @@
       projectileSpeed: 30 # 5.56x45mm
       fireRate: 6.5 # ~1000 RPM (can be very high)
       minAngle: 4 # Modern, good control despite RoF
-      maxAngle: 50
+      maxAngle: 20
       angleIncrease: 3.2
       angleDecay: 26
       soundGunshot:

+ 1 - 0
Resources/Prototypes/Civ14/Entities/Objects/Guns/entities_pistol.yml

@@ -33,6 +33,7 @@
       soundGunshot:
         path: /Audio/Weapons/Guns/Fire/9mm.ogg
     - type: ChamberMagazineAmmoProvider
+      boltClosed: true
       soundRack:
         path: /Audio/Weapons/Guns/Cock/pistol_cock.ogg
     - type: ItemSlots

+ 7 - 0
Resources/Prototypes/Civ14/Entities/Objects/Guns/entities_smg.yml

@@ -16,6 +16,7 @@
       shape:
         - 0,0,4,1
     - type: Sprite
+      sprite: Civ14/Weapons/Guns/SMGs/atreides.rsi
       layers:
         - state: icon
           map: ["enum.GunVisualLayers.Base"]
@@ -47,6 +48,12 @@
       selectedMode: FullAuto
       availableModes:
         - FullAuto
+      projectileSpeed: 18
+      minAngle: 52
+      maxAngle: 70
+      angleIncrease: 3.5
+      angleDecay: 17.5
+      fireRate: 4
       soundGunshot:
         path: /Audio/Weapons/Guns/Fire/PPSh.ogg
     - type: ChamberMagazineAmmoProvider

+ 136 - 0
Resources/Prototypes/Civ14/Entities/Objects/Specific/medical.yml

@@ -0,0 +1,136 @@
+# just a re-named dylovene for non-futuristic uses
+- type: reagent
+  id: Sulfanilamide
+  name: reagent-name-sulfanilamide
+  group: Medicine
+  desc: reagent-desc-sulfanilamide
+  physicalDesc: reagent-physical-desc-chalky
+  flavor: bitter
+  color: "#E8E8D3"
+  metabolisms:
+    Medicine:
+      effects:
+        - !type:HealthChange
+          damage:
+            types:
+              Poison: -1
+        - !type:HealthChange
+          conditions:
+            - !type:ReagentThreshold
+              min: 20
+          damage:
+            groups:
+              Brute: 2
+        - !type:Jitter
+          conditions:
+            - !type:ReagentThreshold
+              min: 20
+        - !type:PopupMessage
+          conditions:
+            - !type:ReagentThreshold
+              min: 20
+          type: Local
+          visualType: Medium
+          messages: ["generic-reagent-effect-nauseous"]
+          probability: 0.2
+        - !type:ChemVomit
+          conditions:
+            - !type:ReagentThreshold
+              min: 20
+          probability: 0.02
+        - !type:Drunk
+          conditions:
+            - !type:ReagentThreshold
+              min: 15
+  plantMetabolism:
+    - !type:PlantAdjustToxins
+      amount: -10
+    - !type:PlantAdjustHealth
+      amount: 1
+
+- type: entity
+  name: pill
+  suffix: Sulfanilamide 10u
+  parent: Pill
+  id: PillSulfanilamide
+  components:
+    - type: Pill
+      pillType: 9
+    - type: Sprite
+      state: pill10
+    - type: Label
+      currentLabel: sulfanilamide 10u
+    - type: SolutionContainerManager
+      solutions:
+        food:
+          maxVol: 20
+          reagents:
+            - ReagentId: Sulfanilamide
+              Quantity: 10
+
+- type: entity
+  name: pill canister
+  parent: PillCanister
+  id: PillCanisterSulfanilamide
+  suffix: Sulfanilamide 10u, 5
+  components:
+    - type: Label
+      currentLabel: sulfanilamide 10u
+    - type: StorageFill
+      contents:
+        - id: PillSulfanilamide
+          amount: 5
+
+- type: entity
+  name: adrenaline syrette
+  parent: ChemicalMedipen
+  id: SyretteAdrenaline
+  description: A rapid and safe way to stabilize patients in critical condition.
+  components:
+    - type: Sprite
+      sprite: Civ14/Objects/syringe.rsi
+      layers:
+        - state: single_use3
+          map: ["enum.SolutionContainerLayers.Fill"]
+    - type: SolutionContainerVisuals
+      maxFillLevels: 1
+      changeColor: false
+      emptySpriteName: single_use3_empty
+    - type: SolutionContainerManager
+      solutions:
+        pen:
+          maxVol: 15
+          reagents:
+            - ReagentId: Epinephrine
+              Quantity: 12
+            - ReagentId: TranexamicAcid
+              Quantity: 3
+    - type: Tag
+      tags: []
+
+- type: entity
+  name: morphine syrette
+  parent: ChemicalMedipen
+  id: SyretteMorphine
+  description: A strong painkiller, in a syrette for quick delivery.
+  components:
+    - type: Sprite
+      sprite: Civ14/Objects/syringe.rsi
+      layers:
+        - state: single_use0
+          map: ["enum.SolutionContainerLayers.Fill"]
+    - type: SolutionContainerVisuals
+      maxFillLevels: 1
+      changeColor: false
+      emptySpriteName: single_use0_empty
+    - type: SolutionContainerManager
+      solutions:
+        pen:
+          maxVol: 15
+          reagents:
+            - ReagentId: Bicaridine
+              Quantity: 10
+            - ReagentId: Diphenhydramine
+              Quantity: 5
+    - type: Tag
+      tags: []

+ 11 - 0
Resources/Prototypes/Civ14/Entities/Objects/Storage/crates.yml

@@ -16,3 +16,14 @@
         - entity_storage
     - type: StaticPrice
       price: 100
+
+- type: entity
+  parent: CrateWood
+  id: CrateWoodRollerbeds
+  name: wood crate
+  suffix: rollerbeds
+  components:
+    - type: StorageFill
+      contents:
+        - id: CheapRollerBedSpawnFolded
+          amount: 5

+ 2 - 0
Resources/Prototypes/Civ14/Entities/Structures/Walls/barricades.yml

@@ -33,6 +33,7 @@
             - !type:DoActsBehavior
               acts: ["Destruction"]
     - type: Barricade
+      bidirectional: false
       blocking: 80
     - type: AtmosExposed
 
@@ -92,6 +93,7 @@
             - !type:DoActsBehavior
               acts: ["Destruction"]
     - type: Barricade
+      bidirectional: true
       blocking: 66
     - type: AtmosExposed
 

+ 1 - 1
Resources/Prototypes/Datasets/tips.yml

@@ -2,4 +2,4 @@
   id: Tips
   values:
     prefix: tips-dataset-
-    count: 137
+    count: 40

+ 181 - 177
Resources/Prototypes/Entities/Mobs/base.yml

@@ -5,51 +5,50 @@
   id: BaseMob
   abstract: true
   components:
-  - type: Sprite
-    noRot: true
-    drawdepth: Mobs
-  - type: Physics
-    bodyType: KinematicController
-  - type: Fixtures
-    fixtures:
-      fix1:
-        shape:
-          !type:PhysShapeCircle
-          radius: 0.35
-        density: 50
-        mask:
-        - MobMask
-        layer:
-        - MobLayer
-  - type: Clickable
-  - type: InteractionOutline
-  - type: InputMover
-  - type: Input
-    context: "human"
-  - type: LagCompensation
-  - type: MobMover
-  - type: Actions
-  - type: Alerts
-  - type: Appearance
-  - type: RotationVisuals
-    defaultRotation: 0
-    horizontalRotation: 0
-  - type: DoAfter
-  - type: Examiner
-  - type: Eye
-  - type: ContentEye
-  - type: CameraRecoil
-  - type: MindContainer
-  - type: MovementSpeedModifier
-  - type: RequireProjectileTarget
-    active: False
+    - type: Sprite
+      noRot: true
+      drawdepth: Mobs
+    - type: Physics
+      bodyType: KinematicController
+    - type: Fixtures
+      fixtures:
+        fix1:
+          shape: !type:PhysShapeCircle
+            radius: 0.35
+          density: 50
+          mask:
+            - MobMask
+          layer:
+            - MobLayer
+    - type: Clickable
+    - type: InteractionOutline
+    - type: InputMover
+    - type: Input
+      context: "human"
+    - type: LagCompensation
+    - type: MobMover
+    - type: Actions
+    - type: Alerts
+    - type: Appearance
+    - type: RotationVisuals
+      defaultRotation: 0
+      horizontalRotation: 0
+    - type: DoAfter
+    - type: Examiner
+    - type: Eye
+    - type: ContentEye
+    - type: CameraRecoil
+    - type: MindContainer
+    - type: MovementSpeedModifier
+    - type: RequireProjectileTarget
+      active: False
 
 - type: entity
   save: false
   id: MobPolymorphable
   abstract: true
   components:
-  - type: Polymorphable
+    - type: Polymorphable
 
 # Used for mobs that have health and can take damage.
 - type: entity
@@ -57,65 +56,70 @@
   id: MobDamageable
   abstract: true
   components:
-  - type: Damageable
-    damageContainer: Biological
-  - type: Destructible
-    thresholds:
-    - trigger:
-        !type:DamageTypeTrigger
-        damageType: Blunt
-        damage: 400
-      behaviors:
-      - !type:GibBehavior { }
-    - trigger:
-        !type:DamageTypeTrigger
-        damageType: Heat
-        damage: 1500
-      behaviors:
-      - !type:SpawnEntitiesBehavior
-        spawnInContainer: true
-        spawn:
-          Ash:
-            min: 1
-            max: 1
-      - !type:BurnBodyBehavior { }
-      - !type:PlaySoundBehavior
-        sound:
-          collection: MeatLaserImpact
-  - type: RadiationReceiver
-  - type: Stamina
-  - type: MobState
-  - type: MobThresholds
-    thresholds:
-      0: Alive
-      100: Critical
-      200: Dead
-  - type: MobStateActions
-    actions:
-      Critical:
-      - ActionCritSuccumb
-      - ActionCritFakeDeath
-      - ActionCritLastWords
-  - type: Deathgasp
-  - type: HealthExaminable
-    examinableTypes:
-    - Blunt
-    - Slash
-    - Piercing
-    - Heat
-    - Shock
-    - Cold
-    - Caustic
-  - type: DamageOnHighSpeedImpact
-    damage:
-      types:
-        Blunt: 5
-    soundHit:
-      path: /Audio/Effects/hit_kick.ogg
-  - type: Pullable
-  - type: LightningTarget
-    priority: 2
-    lightningExplode: false
+    - type: Damageable
+      damageContainer: Biological
+    - type: Destructible
+      thresholds:
+        - trigger: !type:DamageTypeTrigger
+            damageType: Blunt
+            damage: 400
+          behaviors:
+            - !type:GibBehavior {}
+        - trigger: !type:DamageTypeTrigger
+            damageType: Heat
+            damage: 1500
+          behaviors:
+            - !type:SpawnEntitiesBehavior
+              spawnInContainer: true
+              spawn:
+                Ash:
+                  min: 1
+                  max: 1
+            - !type:BurnBodyBehavior {}
+            - !type:PlaySoundBehavior
+              sound:
+                collection: MeatLaserImpact
+    - type: RadiationReceiver
+    - type: StaminaActive
+    - type: Stamina
+      decay: 14
+      cooldown: 5
+      critThreshold: 200
+      slowdownThreshold: 190
+    - type: StaminaDecayModifier
+    - type: StaminaCritThresholdModifier
+    - type: MobState
+    - type: MobThresholds
+      thresholds:
+        0: Alive
+        100: Critical
+        200: Dead
+    - type: MobStateActions
+      actions:
+        Critical:
+          - ActionCritSuccumb
+          - ActionCritFakeDeath
+          - ActionCritLastWords
+    - type: Deathgasp
+    - type: HealthExaminable
+      examinableTypes:
+        - Blunt
+        - Slash
+        - Piercing
+        - Heat
+        - Shock
+        - Cold
+        - Caustic
+    - type: DamageOnHighSpeedImpact
+      damage:
+        types:
+          Blunt: 5
+      soundHit:
+        path: /Audio/Effects/hit_kick.ogg
+    - type: Pullable
+    - type: LightningTarget
+      priority: 2
+      lightningExplode: false
 
 # Used for mobs that can enter combat mode and can attack.
 - type: entity
@@ -123,14 +127,14 @@
   id: MobCombat
   abstract: true
   components:
-  - type: CombatMode
-  - type: MeleeWeapon
-    hidden: true
-    soundHit:
-      collection: MetalThud
-    damage:
-      groups:
-        Brute: 5
+    - type: CombatMode
+    - type: MeleeWeapon
+      hidden: true
+      soundHit:
+        collection: MetalThud
+      damage:
+        groups:
+          Brute: 5
 
 # Used for mobs that are affected by atmospherics, pressure, and heat
 - type: entity
@@ -138,27 +142,27 @@
   id: MobAtmosExposed
   abstract: true
   components:
-  - type: AtmosExposed
-  - type: Temperature
-    heatDamageThreshold: 325
-    coldDamageThreshold: 0
-    currentTemperature: 310.15
-    coldDamage: #per second, scales with temperature & other constants
-      types:
-        Cold : 0.1
-    specificHeat: 42
-    heatDamage: #per second, scales with temperature & other constants
-      types:
-        Heat : 1.5
-  - type: ThermalRegulator
-    metabolismHeat: 800
-    radiatedHeat: 100
-    implicitHeatRegulation: 500
-    sweatHeatRegulation: 2000
-    shiveringHeatRegulation: 2000
-    normalBodyTemperature: 310.15
-    thermalRegulationTemperatureThreshold: 25
-  - type: MovedByPressure
+    - type: AtmosExposed
+    - type: Temperature
+      heatDamageThreshold: 325
+      coldDamageThreshold: 0
+      currentTemperature: 310.15
+      coldDamage: #per second, scales with temperature & other constants
+        types:
+          Cold: 0.1
+      specificHeat: 42
+      heatDamage: #per second, scales with temperature & other constants
+        types:
+          Heat: 1.5
+    - type: ThermalRegulator
+      metabolismHeat: 800
+      radiatedHeat: 100
+      implicitHeatRegulation: 500
+      sweatHeatRegulation: 2000
+      shiveringHeatRegulation: 2000
+      normalBodyTemperature: 310.15
+      thermalRegulationTemperatureThreshold: 25
+    - type: MovedByPressure
 
 # Used for mobs that require regular atmospheric conditions.
 - type: entity
@@ -166,29 +170,29 @@
   id: MobAtmosStandard
   abstract: true
   components:
-  - type: ThermalRegulator
-    metabolismHeat: 800
-    radiatedHeat: 100
-    implicitHeatRegulation: 250
-    sweatHeatRegulation: 500
-    shiveringHeatRegulation: 500
-    normalBodyTemperature: 310.15
-    thermalRegulationTemperatureThreshold: 25
-  - type: Temperature
-    heatDamageThreshold: 325
-    coldDamageThreshold: 260
-    currentTemperature: 310.15
-    specificHeat: 42
-    coldDamage:
-      types:
-        Cold: 1 #per second, scales with temperature & other constants
-    heatDamage:
-      types:
-        Heat: 1.5 #per second, scales with temperature & other constants
-  - type: Barotrauma
-    damage:
-      types:
-        Blunt: 0.15 #per second, scales with pressure and other constants.
+    - type: ThermalRegulator
+      metabolismHeat: 800
+      radiatedHeat: 100
+      implicitHeatRegulation: 250
+      sweatHeatRegulation: 500
+      shiveringHeatRegulation: 500
+      normalBodyTemperature: 310.15
+      thermalRegulationTemperatureThreshold: 25
+    - type: Temperature
+      heatDamageThreshold: 325
+      coldDamageThreshold: 260
+      currentTemperature: 310.15
+      specificHeat: 42
+      coldDamage:
+        types:
+          Cold: 1 #per second, scales with temperature & other constants
+      heatDamage:
+        types:
+          Heat: 1.5 #per second, scales with temperature & other constants
+    - type: Barotrauma
+      damage:
+        types:
+          Blunt: 0.15 #per second, scales with pressure and other constants.
 
 # Used for mobs that can be set on fire
 - type: entity
@@ -196,15 +200,15 @@
   id: MobFlammable
   abstract: true
   components:
-  - type: Flammable
-    fireSpread: true
-    canResistFire: true
-    damage: #per second, scales with number of fire 'stacks'
-      types:
-        Heat: 1.5
-  - type: FireVisuals
-    sprite: Mobs/Effects/onfire.rsi
-    normalState: Generic_mob_burning
+    - type: Flammable
+      fireSpread: true
+      canResistFire: true
+      damage: #per second, scales with number of fire 'stacks'
+        types:
+          Heat: 1.5
+    - type: FireVisuals
+      sprite: Mobs/Effects/onfire.rsi
+      normalState: Generic_mob_burning
 
 # Used for mobs that need to breathe
 - type: entity
@@ -212,14 +216,14 @@
   id: MobRespirator
   abstract: true
   components:
-  - type: Internals
-  - type: Respirator
-    damage:
-      types:
-        Asphyxiation: 2
-    damageRecovery:
-      types:
-        Asphyxiation: -1.0
+    - type: Internals
+    - type: Respirator
+      damage:
+        types:
+          Asphyxiation: 2
+      damageRecovery:
+        types:
+          Asphyxiation: -1.0
 
 # Used for mobs that have a bloodstream
 - type: entity
@@ -227,13 +231,13 @@
   id: MobBloodstream
   abstract: true
   components:
-  - type: SolutionContainerManager
-  - type: InjectableSolution
-    solution: chemicals
-  - type: Bloodstream
-    bloodlossDamage:
-      types:
-        Bloodloss: 0.5
-    bloodlossHealDamage:
-      types:
-        Bloodloss: -1
+    - type: SolutionContainerManager
+    - type: InjectableSolution
+      solution: chemicals
+    - type: Bloodstream
+      bloodlossDamage:
+        types:
+          Bloodloss: 0.5
+      bloodlossHealDamage:
+        types:
+          Bloodloss: -1

+ 4 - 2
Resources/Prototypes/Entities/Objects/Specific/Medical/healing.yml

@@ -33,7 +33,8 @@
       tags:
         - Ointment
     - type: Sprite
-      state: ointment
+      sprite: Civ14/Objects/surgery.rsi
+      state: burn_kit
     - type: Item
       heldPrefix: ointment
     - type: Healing
@@ -126,7 +127,8 @@
       tags:
         - Brutepack
     - type: Sprite
-      state: brutepack
+      sprite: Civ14/Objects/surgery.rsi
+      state: trauma_kit
     - type: Item
       heldPrefix: brutepack
     - type: Healing

+ 1 - 7
Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/arrows.yml

@@ -37,9 +37,9 @@
       tags:
         - Arrow
     - type: Projectile
+      angle: 225
       deleteOnCollide: false
       onlyCollideWhenShot: true
-      angle: 0
       damage:
         types:
           Piercing: 25
@@ -70,10 +70,7 @@
     - type: Sprite
       sprite: Civ14/Objects/weapons.rsi
       state: arrow
-    - type: ThrowingAngle
-      angle: 225
     - type: Projectile
-      angle: 0
       damage:
         types:
           Piercing: 20
@@ -86,10 +83,7 @@
     - type: Sprite
       sprite: Civ14/Objects/weapons.rsi
       state: arrow_iron
-    - type: ThrowingAngle
-      angle: 225
     - type: Projectile
-      angle: 0
       damage:
         types:
           Piercing: 25

+ 34 - 0
Resources/Prototypes/Entities/Objects/Weapons/Melee/knife.yml

@@ -128,6 +128,40 @@
     - type: ThrowingAngle
       angle: 225
 
+- type: entity
+  name: dagger
+  parent: BaseKnife
+  id: SwordDagger
+  description: A deadly knife intended for melee confrontations.
+  components:
+    - type: Tag
+      tags:
+        - CombatKnife
+        - Knife
+    - type: Sprite
+      sprite: Civ14/Weapons/dagger.rsi
+      state: icon
+    - type: MeleeWeapon
+      wideAnimationRotation: -135
+      attackRate: 1.5
+      damage:
+        types:
+          Slash: 12
+    - type: EmbeddableProjectile
+      sound: /Audio/Weapons/star_hit.ogg
+      offset: -0.15,0.0
+    - type: LandAtCursor
+    - type: DamageOtherOnHit
+      damage:
+        types:
+          Slash: 10
+    - type: Item
+      sprite: Civ14/Weapons/dagger.rsi
+    - type: DisarmMalus
+      malus: 0.225
+    - type: ThrowingAngle
+      angle: 225
+
 - type: entity
   name: survival knife
   parent: [CombatKnife, BaseSecurityCargoContraband]

+ 1 - 1
Resources/Prototypes/Entities/Structures/Furniture/rollerbeds.yml

@@ -87,7 +87,7 @@
   id: CheapRollerBed
   name: rollerbed
   parent: RollerBed
-  description: A run-down rollerbed. Used to carry patients around.
+  description: A rollerbed. Used to carry patients around.
   components:
     - type: Item
       heldPrefix: cheap_rollerbed

Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 404 - 405
Resources/Prototypes/Reagents/medicine.yml


+ 3 - 3
Resources/Prototypes/Roles/Jobs/Civ14/TDM/english.yml

@@ -199,7 +199,7 @@
     neck: civ13_accessory_tabard_red
     head: civ13_head_conical_helmet
     belt: ClothingBeltQuiver
-    pocket1: CombatKnife
+    pocket1: SwordDagger
     back: WoodenBucklerRed
   inhand:
     - BowImprovised
@@ -222,7 +222,7 @@
     jumpsuit: civ13_uniform_red_tunic
     head: civ13_head_kettle_helmet
     belt: ClothingBeltQuiver
-    pocket1: CombatKnife
+    pocket1: SwordDagger
     back: WoodenBucklerRed
   inhand:
     - BowImprovised
@@ -272,7 +272,7 @@
     jumpsuit: civ13_uniform_light_brown_tunic
     head: civ13_head_black_noble_hat
     belt: LeatherClothingBelt
-    pocket1: CombatKnife
+    pocket1: SwordDagger
   storage:
     belt:
       - ComfreyHealingHerbs

+ 3 - 3
Resources/Prototypes/Roles/Jobs/Civ14/TDM/french.yml

@@ -199,7 +199,7 @@
     jumpsuit: civ13_uniform_blue_white_tunic
     head: civ13_head_conical_helmet
     belt: ClothingBeltQuiver
-    pocket1: CombatKnife
+    pocket1: SwordDagger
     back: WoodenBucklerBlue
   inhand:
     - BowImprovised
@@ -222,7 +222,7 @@
     jumpsuit: civ13_uniform_blue_tunic
     head: civ13_head_kettle_helmet
     belt: ClothingBeltQuiver
-    pocket1: CombatKnife
+    pocket1: SwordDagger
     back: WoodenBucklerBlue
   inhand:
     - BowImprovised
@@ -272,7 +272,7 @@
     jumpsuit: civ13_uniform_light_brown_tunic
     head: civ13_head_black_noble_hat
     belt: LeatherClothingBelt
-    pocket1: CombatKnife
+    pocket1: SwordDagger
   storage:
     belt:
       - ComfreyHealingHerbs

+ 2 - 13
Resources/Prototypes/Roles/Jobs/Civ14/TDM/german.yml

@@ -255,19 +255,8 @@
     shoes: civ13_shoes_jackboots
     jumpsuit: civ13_uniform_German_doctor_uniform
     head: civ13_head_german_medic_stahlhelm
-    belt: LeatherClothingBelt
+    belt: ClothingSatchelMedicalMedsFilled
+    back: ClothingBackpackDuffelFilled
     pocket1: CombatKnife
   inhand:
     - civ13_boltaction_Karabiner_98k
-  storage:
-    belt:
-      - DoctorsHandbook
-      - Brutepack
-      - Brutepack
-      - FoodPoppy
-      - YarrowHealingHerbs
-      - YarrowHealingHerbs
-      - ElderflowerHealingHerbs
-      - ElderflowerHealingHerbs
-      - Gauze
-      - Gauze

+ 2 - 13
Resources/Prototypes/Roles/Jobs/Civ14/TDM/soviet.yml

@@ -262,19 +262,8 @@
     jumpsuit: civ13_uniform_Soviet_uniform
     #outerClothing: civ13_suit_Soviet_coat_1
     head: civ13_head_soviet_medical_helmet
-    belt: LeatherClothingBelt
+    belt: ClothingSatchelMedicalMedsFilled
+    back: ClothingBackpackDuffelFilled
     pocket1: CombatKnife
   inhand:
     - civ13_boltaction_Mosin_30
-  storage:
-    belt:
-      - DoctorsHandbook
-      - Brutepack
-      - Brutepack
-      - FoodPoppy
-      - YarrowHealingHerbs
-      - YarrowHealingHerbs
-      - ElderflowerHealingHerbs
-      - ElderflowerHealingHerbs
-      - Gauze
-      - Gauze

BIN
Resources/Textures/Civ14/Objects/Storage/medical_bag.rsi/equipped-BACKPACK.png


BIN
Resources/Textures/Civ14/Objects/Storage/medical_bag.rsi/icon.png


BIN
Resources/Textures/Civ14/Objects/Storage/medical_bag.rsi/inhand-left.png


BIN
Resources/Textures/Civ14/Objects/Storage/medical_bag.rsi/inhand-right.png


+ 26 - 0
Resources/Textures/Civ14/Objects/Storage/medical_bag.rsi/meta.json

@@ -0,0 +1,26 @@
+{
+    "version": 1,
+    "license": "CC-BY-SA-3.0",
+    "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/c838ba21dae97db345e0113f99596decd1d66039",
+    "size": {
+        "x": 32,
+        "y": 32
+    },
+    "states": [
+        {
+            "name": "icon"
+        },
+        {
+            "name": "equipped-BACKPACK",
+            "directions": 4
+        },
+        {
+            "name": "inhand-left",
+            "directions": 4
+        },
+        {
+            "name": "inhand-right",
+            "directions": 4
+        }
+    ]
+}

BIN
Resources/Textures/Civ14/Objects/Storage/medical_satchel.rsi/equipped-BELT.png


BIN
Resources/Textures/Civ14/Objects/Storage/medical_satchel.rsi/icon.png


BIN
Resources/Textures/Civ14/Objects/Storage/medical_satchel.rsi/inhand-left.png


BIN
Resources/Textures/Civ14/Objects/Storage/medical_satchel.rsi/inhand-right.png


+ 26 - 0
Resources/Textures/Civ14/Objects/Storage/medical_satchel.rsi/meta.json

@@ -0,0 +1,26 @@
+{
+  "version": 1,
+  "license": "CC-BY-SA-3.0",
+  "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/c838ba21dae97db345e0113f99596decd1d66039",
+  "size": {
+    "x": 32,
+    "y": 32
+  },
+  "states": [
+    {
+      "name": "icon"
+    },
+    {
+      "name": "equipped-BELT",
+      "directions": 4
+    },
+    {
+      "name": "inhand-left",
+      "directions": 4
+    },
+    {
+      "name": "inhand-right",
+      "directions": 4
+    }
+  ]
+}

BIN
Resources/Textures/Civ14/Objects/Storage/medkit.rsi/equipped-BELT.png


BIN
Resources/Textures/Civ14/Objects/Storage/medkit.rsi/icon.png


BIN
Resources/Textures/Civ14/Objects/Storage/medkit.rsi/inhand-left.png


BIN
Resources/Textures/Civ14/Objects/Storage/medkit.rsi/inhand-right.png


+ 26 - 0
Resources/Textures/Civ14/Objects/Storage/medkit.rsi/meta.json

@@ -0,0 +1,26 @@
+{
+  "version": 1,
+  "license": "CC-BY-SA-3.0",
+  "copyright": "Taken from tgstation at commit https://github.com/tgstation/tgstation/commit/c838ba21dae97db345e0113f99596decd1d66039",
+  "size": {
+    "x": 32,
+    "y": 32
+  },
+  "states": [
+    {
+      "name": "icon"
+    },
+    {
+      "name": "equipped-BELT",
+      "directions": 4
+    },
+    {
+      "name": "inhand-left",
+      "directions": 4
+    },
+    {
+      "name": "inhand-right",
+      "directions": 4
+    }
+  ]
+}

BIN
Resources/Textures/Civ14/Weapons/dagger.rsi/equipped-BELT.png


BIN
Resources/Textures/Civ14/Weapons/dagger.rsi/inhand-left.png


BIN
Resources/Textures/Civ14/Weapons/dagger.rsi/inhand-right.png


+ 28 - 16
Resources/Textures/Civ14/Weapons/dagger.rsi/meta.json

@@ -1,19 +1,31 @@
 {
-  "version": 1,
-  "license": "AGPL-3.0",
-  "copyright": "Exported from https://github.com/civ13/civ13",
-  "size": {
-    "x": 32,
-    "y": 32
-  },
-  "states": [
-    {
-      "name": "dagger",
-      "directions": 1
+    "version": 1,
+    "license": "AGPL-3.0",
+    "copyright": "Exported from https://github.com/civ13/civ13",
+    "size": {
+        "x": 32,
+        "y": 32
     },
-    {
-      "name": "icon",
-      "directions": 1
-    }
-  ]
+    "states": [
+        {
+            "name": "dagger",
+            "directions": 1
+        },
+        {
+            "name": "icon",
+            "directions": 1
+        },
+        {
+            "name": "inhand-left",
+            "directions": 4
+        },
+        {
+            "name": "inhand-right",
+            "directions": 4
+        },
+        {
+            "name": "equipped-BELT",
+            "directions": 4
+        }
+    ]
 }

Niektoré súbory nie sú zobrazené, pretože je v týchto rozdielových dátach zmenené mnoho súborov