diff --git a/Content.Server/DeviceLinking/Components/GunSignalControlComponent.cs b/Content.Server/DeviceLinking/Components/GunSignalControlComponent.cs
new file mode 100644
index 0000000000..a9067951ed
--- /dev/null
+++ b/Content.Server/DeviceLinking/Components/GunSignalControlComponent.cs
@@ -0,0 +1,24 @@
+using Content.Server.DeviceLinking.Systems;
+using Content.Shared.DeviceLinking;
+using Robust.Shared.Prototypes;
+
+namespace Content.Server.DeviceLinking.Components;
+
+///
+/// A system that allows you to fire GunComponent + AmmoProvider by receiving signals from DeviceLinking
+///
+[RegisterComponent, Access(typeof(GunSignalControlSystem))]
+public sealed partial class GunSignalControlComponent : Component
+{
+ [DataField]
+ public ProtoId TriggerPort = "Trigger";
+
+ [DataField]
+ public ProtoId TogglePort = "Toggle";
+
+ [DataField]
+ public ProtoId OnPort = "On";
+
+ [DataField]
+ public ProtoId OffPort = "Off";
+}
diff --git a/Content.Server/DeviceLinking/Systems/GunSignalControlSystem.cs b/Content.Server/DeviceLinking/Systems/GunSignalControlSystem.cs
new file mode 100644
index 0000000000..538a191ab9
--- /dev/null
+++ b/Content.Server/DeviceLinking/Systems/GunSignalControlSystem.cs
@@ -0,0 +1,46 @@
+using Content.Server.DeviceLinking.Components;
+using Content.Server.DeviceLinking.Events;
+using Content.Shared.Weapons.Ranged.Components;
+using Content.Shared.Weapons.Ranged.Systems;
+using Robust.Shared.Map;
+using System.Numerics;
+
+namespace Content.Server.DeviceLinking.Systems;
+
+public sealed partial class GunSignalControlSystem : EntitySystem
+{
+ [Dependency] private readonly DeviceLinkSystem _signalSystem = default!;
+ [Dependency] private readonly SharedGunSystem _gun = default!;
+
+ public override void Initialize()
+ {
+ SubscribeLocalEvent(OnInit);
+ SubscribeLocalEvent(OnSignalReceived);
+ }
+
+ private void OnInit(Entity gunControl, ref MapInitEvent args)
+ {
+ _signalSystem.EnsureSinkPorts(gunControl, gunControl.Comp.TriggerPort, gunControl.Comp.TogglePort, gunControl.Comp.OnPort, gunControl.Comp.OffPort);
+ }
+
+ private void OnSignalReceived(Entity gunControl, ref SignalReceivedEvent args)
+ {
+ if (!TryComp(gunControl, out var gun))
+ return;
+
+ if (args.Port == gunControl.Comp.TriggerPort)
+ _gun.AttemptShoot(gunControl, gun);
+
+ if (!TryComp(gunControl, out var autoShoot))
+ return;
+
+ if (args.Port == gunControl.Comp.TogglePort)
+ _gun.SetEnabled(gunControl, autoShoot, !autoShoot.Enabled);
+
+ if (args.Port == gunControl.Comp.OnPort)
+ _gun.SetEnabled(gunControl, autoShoot, true);
+
+ if (args.Port == gunControl.Comp.OffPort)
+ _gun.SetEnabled(gunControl, autoShoot, false);
+ }
+}
diff --git a/Content.Server/PneumaticCannon/PneumaticCannonSystem.cs b/Content.Server/PneumaticCannon/PneumaticCannonSystem.cs
index f16a327e6b..9db9aa296d 100644
--- a/Content.Server/PneumaticCannon/PneumaticCannonSystem.cs
+++ b/Content.Server/PneumaticCannon/PneumaticCannonSystem.cs
@@ -78,8 +78,8 @@ public sealed class PneumaticCannonSystem : SharedPneumaticCannonSystem
if (gas == null && component.GasUsage > 0f)
return;
- if(TryComp(args.User, out var status)
- && component.Power == PneumaticCannonPower.High)
+ if (TryComp(args.User, out var status)
+ && component.Power == PneumaticCannonPower.High)
{
_stun.TryParalyze(args.User, TimeSpan.FromSeconds(component.HighPowerStunTime), true, status);
Popup.PopupEntity(Loc.GetString("pneumatic-cannon-component-power-stun",
diff --git a/Content.Server/Weapons/Ranged/Systems/GunSystem.AutoFire.cs b/Content.Server/Weapons/Ranged/Systems/GunSystem.AutoFire.cs
new file mode 100644
index 0000000000..39cd2486ed
--- /dev/null
+++ b/Content.Server/Weapons/Ranged/Systems/GunSystem.AutoFire.cs
@@ -0,0 +1,29 @@
+using Content.Shared.Weapons.Ranged.Components;
+
+namespace Content.Server.Weapons.Ranged.Systems;
+
+public sealed partial class GunSystem
+{
+ public override void Update(float frameTime)
+ {
+ base.Update(frameTime);
+
+ /*
+ * On server because client doesn't want to predict other's guns.
+ */
+
+ // Automatic firing without stopping if the AutoShootGunComponent component is exist and enabled
+ var query = EntityQueryEnumerator();
+
+ while (query.MoveNext(out var uid, out var autoShoot, out var gun))
+ {
+ if (!autoShoot.Enabled)
+ continue;
+
+ if (gun.NextFire > Timing.CurTime)
+ continue;
+
+ AttemptShoot(uid, gun);
+ }
+ }
+}
diff --git a/Content.Server/Weapons/Ranged/Systems/GunSystem.cs b/Content.Server/Weapons/Ranged/Systems/GunSystem.cs
index 96108c2e12..4f236c0fa7 100644
--- a/Content.Server/Weapons/Ranged/Systems/GunSystem.cs
+++ b/Content.Server/Weapons/Ranged/Systems/GunSystem.cs
@@ -212,7 +212,9 @@ public sealed partial class GunSystem : SharedGunSystem
// can't use map coords above because funny FireEffects
var fromEffect = fromCoordinates;
var dir = mapDirection.Normalized();
- var lastUser = user;
+
+ //in the situation when user == null, means that the cannon fires on its own (via signals). And we need the gun to not fire by itself in this case
+ var lastUser = user ?? gunUid;
if (hitscan.Reflective != ReflectType.None)
{
diff --git a/Content.Shared/Weapons/Ranged/Components/AutoShootGunComponent.cs b/Content.Shared/Weapons/Ranged/Components/AutoShootGunComponent.cs
new file mode 100644
index 0000000000..16b3110b85
--- /dev/null
+++ b/Content.Shared/Weapons/Ranged/Components/AutoShootGunComponent.cs
@@ -0,0 +1,14 @@
+using Content.Shared.Weapons.Ranged.Systems;
+using Robust.Shared.GameStates;
+
+namespace Content.Shared.Weapons.Ranged.Components;
+
+///
+/// Allows GunSystem to automatically fire while this component is enabled
+///
+[RegisterComponent, NetworkedComponent, Access(typeof(SharedGunSystem)), AutoGenerateComponentState]
+public sealed partial class AutoShootGunComponent : Component
+{
+ [DataField, ViewVariables(VVAccess.ReadWrite), AutoNetworkedField]
+ public bool Enabled;
+}
diff --git a/Content.Shared/Weapons/Ranged/Components/GunComponent.cs b/Content.Shared/Weapons/Ranged/Components/GunComponent.cs
index 350dd85d69..95853bbd2e 100644
--- a/Content.Shared/Weapons/Ranged/Components/GunComponent.cs
+++ b/Content.Shared/Weapons/Ranged/Components/GunComponent.cs
@@ -5,7 +5,6 @@ using Robust.Shared.GameStates;
using Robust.Shared.Map;
using Robust.Shared.Prototypes;
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom;
-using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype.List;
namespace Content.Shared.Weapons.Ranged.Components;
diff --git a/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.AutoFire.cs b/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.AutoFire.cs
new file mode 100644
index 0000000000..4c19547a39
--- /dev/null
+++ b/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.AutoFire.cs
@@ -0,0 +1,11 @@
+using Content.Shared.Weapons.Ranged.Components;
+
+namespace Content.Shared.Weapons.Ranged.Systems;
+
+public partial class SharedGunSystem
+{
+ public void SetEnabled(EntityUid uid, AutoShootGunComponent component, bool status)
+ {
+ component.Enabled = status;
+ }
+}
diff --git a/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.cs b/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.cs
index 4e5d8b9762..c7456ed019 100644
--- a/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.cs
+++ b/Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.cs
@@ -37,7 +37,7 @@ namespace Content.Shared.Weapons.Ranged.Systems;
public abstract partial class SharedGunSystem : EntitySystem
{
- [Dependency] private readonly ActionBlockerSystem _actionBlockerSystem = default!;
+ [Dependency] private readonly ActionBlockerSystem _actionBlockerSystem = default!;
[Dependency] protected readonly IGameTiming Timing = default!;
[Dependency] protected readonly IMapManager MapManager = default!;
[Dependency] private readonly INetManager _netManager = default!;
@@ -214,6 +214,17 @@ public abstract partial class SharedGunSystem : EntitySystem
gun.ShotCounter = 0;
}
+ ///
+ /// Shoots by assuming the gun is the user at default coordinates.
+ ///
+ public void AttemptShoot(EntityUid gunUid, GunComponent gun)
+ {
+ var coordinates = new EntityCoordinates(gunUid, new Vector2(0, -1));
+ gun.ShootCoordinates = coordinates;
+ AttemptShoot(gunUid, gunUid, gun);
+ gun.ShotCounter = 0;
+ }
+
private void AttemptShoot(EntityUid user, EntityUid gunUid, GunComponent gun)
{
if (gun.FireRate <= 0f ||
@@ -385,12 +396,9 @@ public abstract partial class SharedGunSystem : EntitySystem
var finalLinear = physics.LinearVelocity + targetMapVelocity - currentMapVelocity;
Physics.SetLinearVelocity(uid, finalLinear, body: physics);
- if (user != null)
- {
- var projectile = EnsureComp(uid);
- Projectiles.SetShooter(uid, projectile, user.Value);
- projectile.Weapon = gunUid;
- }
+ var projectile = EnsureComp(uid);
+ Projectiles.SetShooter(uid, projectile, user ?? gunUid);
+ projectile.Weapon = gunUid;
TransformSystem.SetWorldRotation(uid, direction.ToWorldAngle());
}
diff --git a/Resources/Locale/en-US/research/technologies.ftl b/Resources/Locale/en-US/research/technologies.ftl
index 973ef360a9..411ce429ab 100644
--- a/Resources/Locale/en-US/research/technologies.ftl
+++ b/Resources/Locale/en-US/research/technologies.ftl
@@ -45,6 +45,8 @@ research-technology-wave-particle-harnessing = Wave Particle Harnessing
research-technology-advanced-riot-control = Advanced Riot Control
research-technology-portable-microfusion-weaponry = Portable Microfusion Weaponry
research-technology-experimental-battery-ammo = Experimental Battery Ammo
+research-technology-basic-shuttle-armament = Shuttle basic armament
+research-technology-advanced-shuttle-weapon = Advanced shuttle weapons
research-technology-basic-robotics = Basic Robotics
research-technology-basic-anomalous-research = Basic Anomalous Research
diff --git a/Resources/Prototypes/Damage/modifier_sets.yml b/Resources/Prototypes/Damage/modifier_sets.yml
index 8b63604b22..bf88837e8d 100644
--- a/Resources/Prototypes/Damage/modifier_sets.yml
+++ b/Resources/Prototypes/Damage/modifier_sets.yml
@@ -60,6 +60,16 @@
Heat: 5
Piercing: 10
+# for fragile electronics like consoles or shuttle engines.
+- type: damageModifierSet
+ id: Electronic
+ coefficients:
+ Blunt: 0.7
+ Slash: 0.5
+ Piercing: 0.7
+ Shock: 2
+ Heat: 3
+
# Like metallic, but without flat reduction so it can be damaged with fists.
- type: damageModifierSet
id: FlimsyMetallic
diff --git a/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/production.yml b/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/production.yml
index 672d6488e3..6581fecbac 100644
--- a/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/production.yml
+++ b/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/production.yml
@@ -661,6 +661,29 @@
- type: StaticPrice
price: 15
+- type: entity
+ id: PowerCageRechargerCircuitboard
+ parent: BaseMachineCircuitboard
+ name: cage recharger machine board
+ description: A machine printed circuit board for a energy cage recharger.
+ components:
+ - type: Sprite
+ sprite: Objects/Misc/module.rsi
+ state: charger_APC
+ - type: MachineBoard
+ prototype: PowerCageRecharger
+ requirements:
+ Capacitor: 4
+ materialRequirements:
+ Steel: 5
+ Cable: 10
+ - type: PhysicalComposition
+ materialComposition:
+ Steel: 30
+ Plastic: 30
+ - type: StaticPrice
+ price: 30
+
- type: entity
id: BorgChargerCircuitboard
parent: BaseMachineCircuitboard
@@ -1229,3 +1252,90 @@
Steel: 5
CableHV: 5
Uranium: 2
+
+- type: entity
+ id: ShuttleGunSvalinnMachineGunCircuitboard
+ parent: BaseMachineCircuitboard
+ name: LSE-400c "Svalinn machine gun" machine board
+ description: A machine printed circuit board for an LSE-400c "Svalinn machine gun"
+ components:
+ - type: Sprite
+ state: security
+ - type: MachineBoard
+ prototype: ShuttleGunSvalinnMachineGun
+ requirements:
+ MatterBin: 2
+ Manipulator: 4
+ materialRequirements:
+ Steel: 5
+ CableHV: 5
+
+- type: entity
+ id: ShuttleGunPerforatorCircuitboard
+ parent: BaseMachineCircuitboard
+ name: LSE-1200c "Perforator" machine board
+ description: A machine printed circuit board for an LSE-1200c "Perforator"
+ components:
+ - type: Sprite
+ state: security
+ - type: MachineBoard
+ prototype: ShuttleGunPerforator
+ requirements:
+ MatterBin: 4
+ Manipulator: 6
+ materialRequirements:
+ Steel: 10
+ CableHV: 5
+
+- type: entity
+ id: ShuttleGunFriendshipCircuitboard
+ parent: BaseMachineCircuitboard
+ name: EXP-320g "Friendship" machine board
+ description: A machine printed circuit board for an EXP-320g "Friendship"
+ components:
+ - type: Sprite
+ state: security
+ - type: MachineBoard
+ prototype: ShuttleGunFriendship
+ requirements:
+ MatterBin: 3
+ Manipulator: 2
+ materialRequirements:
+ Steel: 7
+ CableHV: 5
+
+- type: entity
+ id: ShuttleGunDusterCircuitboard
+ parent: BaseMachineCircuitboard
+ name: EXP-2100g "Duster" machine board
+ description: A machine printed circuit board for an EXP-2100g "Duster"
+ components:
+ - type: Sprite
+ state: security
+ - type: MachineBoard
+ prototype: ShuttleGunDuster
+ requirements:
+ MatterBin: 6
+ Manipulator: 4
+ materialRequirements:
+ Steel: 10
+ CableHV: 5
+ Uranium: 2
+
+- type: entity
+ id: ShuttleGunKineticCircuitboard
+ parent: BaseMachineCircuitboard
+ name: PTK-800 "Matter Dematerializer" machine board
+ description: A machine printed circuit board for an PTK-800 "Matter Dematerializer"
+ components:
+ - type: Sprite
+ state: security
+ - type: MachineBoard
+ prototype: ShuttleGunKinetic
+ requirements:
+ MatterBin: 2
+ Manipulator: 3
+ materialRequirements:
+ Steel: 5
+ CableHV: 2
+
\ No newline at end of file
diff --git a/Resources/Prototypes/Entities/Objects/Power/powercells.yml b/Resources/Prototypes/Entities/Objects/Power/powercells.yml
index 841288c479..758d5f7b42 100644
--- a/Resources/Prototypes/Entities/Objects/Power/powercells.yml
+++ b/Resources/Prototypes/Entities/Objects/Power/powercells.yml
@@ -267,3 +267,139 @@
- type: BatterySelfRecharger
autoRecharge: true
autoRechargeRate: 40
+
+# Power cage (big heavy power cell for big devices)
+
+- type: entity
+ id: BasePowerCage
+ abstract: true
+ parent: BasePowerCell
+ components:
+ - type: Item
+ size: Ginormous
+ - type: MultiHandedItem
+ - type: SolutionContainerManager
+ solutions:
+ battery:
+ maxVol: 15
+ - type: Extractable
+ juiceSolution:
+ reagents:
+ - ReagentId: Zinc
+ Quantity: 15
+ - type: Tag
+ tags:
+ - PowerCage
+ - type: HitscanBatteryAmmoProvider
+ proto: RedShuttleLaser
+ fireCost: 150
+ - type: ClothingSpeedModifier
+ walkModifier: 0.8
+ sprintModifier: 0.8
+ - type: HeldSpeedModifier
+
+- type: entity
+ id: PowerCageSmall
+ parent: BasePowerCage
+ name: small-capacity power cage
+ description: A rechargeable power cage for big devices. This is the cheapest kind you can find.
+ components:
+ - type: Sprite
+ sprite: Objects/Power/power_cages.rsi
+ layers:
+ - map: [ "enum.PowerCellVisualLayers.Base" ]
+ state: small
+ - map: [ "enum.PowerCellVisualLayers.Unshaded" ]
+ state: o2
+ shader: unshaded
+ - type: Battery
+ maxCharge: 1400
+ startingCharge: 1400
+
+- type: entity
+ id: PowerCageMedium
+ parent: BasePowerCage
+ name: medium-capacity power cage
+ description: A rechargeable power cage for big devices. The gold standard of capacity and cost.
+ components:
+ - type: Sprite
+ sprite: Objects/Power/power_cages.rsi
+ layers:
+ - map: [ "enum.PowerCellVisualLayers.Base" ]
+ state: medium
+ - map: [ "enum.PowerCellVisualLayers.Unshaded" ]
+ state: o2
+ shader: unshaded
+ - type: Battery
+ maxCharge: 2700
+ startingCharge: 2700
+
+- type: entity
+ id: PowerCageHigh
+ parent: BasePowerCage
+ name: high-capacity power cage
+ description: A rechargeable power cage for big devices. Increased capacity for increased power levels.
+ components:
+ - type: Sprite
+ sprite: Objects/Power/power_cages.rsi
+ layers:
+ - map: [ "enum.PowerCellVisualLayers.Base" ]
+ state: high
+ - map: [ "enum.PowerCellVisualLayers.Unshaded" ]
+ state: o2
+ shader: unshaded
+ - type: Battery
+ maxCharge: 6200
+ startingCharge: 6200
+
+- type: entity
+ id: PowerCageSmallEmpty
+ parent: PowerCageSmall
+ suffix: Empty
+ components:
+ - type: Sprite
+ sprite: Objects/Power/power_cages.rsi
+ layers:
+ - map: [ "enum.PowerCellVisualLayers.Base" ]
+ state: small
+ - map: [ "enum.PowerCellVisualLayers.Unshaded" ]
+ state: o2
+ shader: unshaded
+ visible: false
+ - type: Battery
+ maxCharge: 1400
+ startingCharge: 0
+
+- type: entity
+ id: PowerCageMediumEmpty
+ parent: PowerCageMedium
+ suffix: Empty
+ components:
+ - type: Sprite
+ sprite: Objects/Power/power_cages.rsi
+ layers:
+ - map: [ "enum.PowerCellVisualLayers.Base" ]
+ state: small
+ - map: [ "enum.PowerCellVisualLayers.Unshaded" ]
+ state: o2
+ shader: unshaded
+ visible: false
+ - type: Battery
+ startingCharge: 0
+
+- type: entity
+ id: PowerCageHighEmpty
+ parent: PowerCageHigh
+ suffix: Empty
+ components:
+ - type: Sprite
+ sprite: Objects/Power/power_cages.rsi
+ layers:
+ - map: [ "enum.PowerCellVisualLayers.Base" ]
+ state: small
+ - map: [ "enum.PowerCellVisualLayers.Unshaded" ]
+ state: o2
+ shader: unshaded
+ visible: false
+ - type: Battery
+ startingCharge: 0
\ No newline at end of file
diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/grenade.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/grenade.yml
new file mode 100644
index 0000000000..0b23ebc966
--- /dev/null
+++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Magazines/grenade.yml
@@ -0,0 +1,87 @@
+- type: entity
+ id: BaseMagazineGrenade
+ name: grenade cartridge
+ parent: BaseItem
+ abstract: true
+ components:
+ - type: Tag
+ tags:
+ - MagazineGrenade
+ - type: BallisticAmmoProvider
+ mayTransfer: true
+ whitelist:
+ tags:
+ - Grenade
+ capacity: 5
+ soundRack:
+ path: /Audio/Weapons/Guns/Bolt/lmg_bolt_closed.ogg
+ params:
+ variation: 0.05
+ soundInsert:
+ path: /Audio/Weapons/Guns/MagIn/rifle_load.ogg
+ params:
+ variation: 0.05
+ - type: Item
+ size: Large
+ - type: ContainerContainer
+ containers:
+ ballistic-ammo: !type:Container
+ - type: Sprite
+ sprite: Objects/Weapons/Guns/Ammunition/Magazine/Grenade/grenade_cartridge.rsi
+ layers:
+ - state: base
+ map: ["enum.GunVisualLayers.Base"]
+ - state: mag-4
+ map: ["enum.GunVisualLayers.Mag"]
+ - type: MagazineVisuals
+ magState: mag
+ steps: 5
+ zeroVisible: false
+ - type: Appearance
+
+- type: entity
+ id: MagazineGrenadeEmpty
+ name: grenade cartridge
+ parent: BaseMagazineGrenade
+ components:
+ - type: BallisticAmmoProvider
+
+- type: entity
+ id: MagazineGrenadeFrag
+ name: frag grenade cartridge
+ parent: BaseMagazineGrenade
+ components:
+ - type: BallisticAmmoProvider
+ proto: GrenadeFrag
+
+- type: entity
+ id: MagazineGrenadeEMP
+ name: EMP grenade cartridge
+ parent: BaseMagazineGrenade
+ components:
+ - type: BallisticAmmoProvider
+ proto: GrenadeEMP
+
+- type: entity
+ id: MagazineGrenadeFlash
+ name: flash grenade cartridge
+ parent: BaseMagazineGrenade
+ components:
+ - type: BallisticAmmoProvider
+ proto: GrenadeFlash
+
+- type: entity
+ id: MagazineGrenadeBlast
+ name: blast grenade cartridge
+ parent: BaseMagazineGrenade
+ components:
+ - type: BallisticAmmoProvider
+ proto: GrenadeBlast
+
+- type: entity
+ id: MagazineGrenadeBaton
+ name: baton grenade cartridge
+ parent: BaseMagazineGrenade
+ components:
+ - type: BallisticAmmoProvider
+ proto: GrenadeBaton
\ No newline at end of file
diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/explosives.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/explosives.yml
index 9d04ee8261..152de7e92f 100644
--- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/explosives.yml
+++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/explosives.yml
@@ -122,12 +122,44 @@
- type: SpentAmmoVisuals
state: frag
suffix: false
+
+- type: entity
+ id: GrenadeEMP
+ name: EMP grenade
+ parent: BaseGrenade
+ components:
+ - type: CartridgeAmmo
+ proto: BulletGrenadeEMP
+ - type: Sprite
+ sprite: Objects/Weapons/Guns/Ammunition/Explosives/explosives.rsi
+ layers:
+ - state: emp
+ map: ["enum.AmmoVisualLayers.Base"]
+ - type: Appearance
+ - type: SpentAmmoVisuals
+ state: frag
+ suffix: false
+# Cannon Balls
+
+- type: entity
+ id: BaseCannonBall
+ name: base cannon ball
+ parent: BaseItem
+ abstract: true
+ components:
+ - type: Tag
+ tags:
+ - CannonBall
+ - type: Item
+ size: Small
+ - type: Sprite
+
- type: entity
id: CannonBall
name: cannonball
suffix: Pirate
- parent: BaseGrenade
+ parent: BaseCannonBall
components:
- type: CartridgeAmmo
proto: BulletCannonBall
@@ -137,10 +169,10 @@
state: ball
- type: entity
- id: Grapeshot
+ id: CannonBallGrapeshot
name: grapeshot
suffix: Pirate
- parent: BaseGrenade
+ parent: BaseCannonBall
components:
- type: CartridgeAmmo
proto: PelletGrapeshot
@@ -152,10 +184,10 @@
state: grapeshot
- type: entity
- id: Glassshot
+ id: CannonBallGlassshot
name: glassshot
suffix: Pirate
- parent: BaseGrenade
+ parent: BaseCannonBall
components:
- type: CartridgeAmmo
proto: PelletGlass
diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Launchers/launchers.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Launchers/launchers.yml
index 635de1c64b..ecabe2a4ab 100644
--- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Launchers/launchers.yml
+++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Launchers/launchers.yml
@@ -144,7 +144,7 @@
- type: BallisticAmmoProvider
whitelist:
tags:
- - Grenade
+ - CannonBall
capacity: 1
proto: CannonBall
soundInsert:
diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/hitscan.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/hitscan.yml
index cb4e813943..99c4a7bdf2 100644
--- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/hitscan.yml
+++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/hitscan.yml
@@ -121,3 +121,20 @@
impactFlash:
sprite: Objects/Weapons/Guns/Projectiles/projectiles.rsi
state: impact_blue
+
+- type: hitscan
+ id: RedShuttleLaser
+ maxLength: 60
+ damage:
+ types:
+ Heat: 45
+ Structural: 10
+ muzzleFlash:
+ sprite: Objects/Weapons/Guns/Projectiles/projectiles.rsi
+ state: muzzle_beam_heavy2
+ travelFlash:
+ sprite: Objects/Weapons/Guns/Projectiles/projectiles.rsi
+ state: beam_heavy2
+ impactFlash:
+ sprite: Objects/Weapons/Guns/Projectiles/projectiles.rsi
+ state: impact_beam_heavy2
diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml
index a442804b3d..5bfd511dbc 100644
--- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml
+++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml
@@ -420,6 +420,32 @@
- type: TimedDespawn
lifetime: 0.4
+- type: entity
+ id: BulletKineticShuttle
+ parent: BaseBullet
+ noSpawn: true
+ components:
+ - type: Sprite
+ noRot: false
+ sprite: Objects/Weapons/Guns/Projectiles/magic.rsi
+ layers:
+ - state: chronobolt
+ shader: unshaded
+ - type: Projectile
+ impactEffect: BulletImpactEffectKinetic
+ damage:
+ types:
+ Blunt: 30
+ Structural: 35
+ - type: Ammo
+ muzzleFlash: HitscanEffect
+ - type: TimedDespawn
+ lifetime: 1.5
+ - type: PointLight
+ radius: 2.5
+ color: white
+ energy: 0.5
+
- type: entity
id: BulletCharge
name: charge bolt
@@ -692,6 +718,27 @@
intensitySlope: 1
maxIntensity: 10
+- type: entity
+ id: BulletGrenadeEMP
+ name: EMP rocket
+ parent: BaseBulletTrigger
+ noSpawn: true
+ components:
+ - type: Sprite
+ sprite: Objects/Weapons/Guns/Projectiles/projectiles2.rsi
+ layers:
+ - state: frag
+ - type: EmpOnTrigger
+ range: 5
+ energyConsumption: 50000
+ disableDuration: 10
+ - type: Ammo
+ muzzleFlash: null
+ - type: PointLight
+ radius: 3.5
+ color: blue
+ energy: 0.5
+
- type: entity
id: BulletCap
name: cap bullet
diff --git a/Resources/Prototypes/Entities/Structures/Machines/Computers/frame.yml b/Resources/Prototypes/Entities/Structures/Machines/Computers/frame.yml
index 884f68fc22..08e3173334 100644
--- a/Resources/Prototypes/Entities/Structures/Machines/Computers/frame.yml
+++ b/Resources/Prototypes/Entities/Structures/Machines/Computers/frame.yml
@@ -26,7 +26,7 @@
drawdepth: Objects
- type: Damageable
damageContainer: Inorganic
- damageModifierSet: Metallic
+ damageModifierSet: Electronic
- type: Destructible
thresholds:
- trigger:
diff --git a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml
index 7d5d571a09..c3f51df2de 100644
--- a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml
+++ b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml
@@ -169,6 +169,7 @@
- MagazineBoxMagnum
- MagazineBoxRifle
- MagazineBoxLightRifle
+ - GrenadeBlast
emagDynamicRecipes:
- CartridgePistolRubber
- CartridgeMagnumRubber
@@ -197,6 +198,12 @@
- MagazineBoxMagnumUranium
- MagazineBoxLightRifleUranium
- MagazineBoxRifleUranium
+ - PowerCageSmall
+ - PowerCageMedium
+ - PowerCageHigh
+ - MagazineGrenadeEmpty
+ - GrenadeEMP
+ - GrenadeFlash
- type: entity
id: AutolatheHyperConvection
@@ -422,10 +429,12 @@
- WallmountGeneratorElectronics
- WallmountGeneratorAPUElectronics
- WallmountSubstationElectronics
+ - PowerCageRechargerCircuitboard
- EmitterCircuitboard
- ThrusterMachineCircuitboard
- GyroscopeMachineCircuitboard
- MiniGravityGeneratorCircuitboard
+ - ShuttleGunKineticCircuitboard
- GasRecyclerMachineCircuitboard
- SeedExtractorMachineCircuitboard
- AnalysisComputerCircuitboard
@@ -691,6 +700,9 @@
- MagazineBoxMagnumRubber
- MagazineBoxPistolRubber
- MagazineBoxRifleRubber
+ - MagazineGrenadeEmpty
+ - GrenadeEMP
+ - GrenadeFlash
- ShellShotgunBeanbag
- ShellShotgunIncendiary
- ShellShotgunUranium
@@ -706,6 +718,13 @@
- WeaponLaserCannon
- WeaponLaserCarbine
- WeaponXrayCannon
+ - PowerCageSmall
+ - PowerCageMedium
+ - PowerCageHigh
+ - ShuttleGunSvalinnMachineGunCircuitboard
+ - ShuttleGunPerforatorCircuitboard
+ - ShuttleGunFriendshipCircuitboard
+ - ShuttleGunDusterCircuitboard
- type: MaterialStorage
whitelist:
tags:
diff --git a/Resources/Prototypes/Entities/Structures/Power/chargers.yml b/Resources/Prototypes/Entities/Structures/Power/chargers.yml
index a8e20df192..44f748307c 100644
--- a/Resources/Prototypes/Entities/Structures/Power/chargers.yml
+++ b/Resources/Prototypes/Entities/Structures/Power/chargers.yml
@@ -107,6 +107,46 @@
blacklist:
tags:
- PotatoBattery
+
+- type: entity
+ parent: [ BaseItemRecharger, ConstructibleMachine ]
+ id: PowerCageRecharger
+ name: cage recharger
+ components:
+ - type: Fixtures
+ fixtures:
+ fix1:
+ shape:
+ !type:PhysShapeAabb
+ bounds: "-0.25,-0.35,0.25,0.35"
+ density: 190
+ mask:
+ - MachineMask
+ layer:
+ - MachineLayer
+ - type: LitOnPowered
+ - type: PointLight
+ radius: 1.5
+ color: "#03fc4e"
+ energy: 0.7
+ - type: Charger
+ chargeRate: 50
+ - type: Sprite
+ sprite: Structures/Power/cage_recharger.rsi
+ - type: PowerCellSlot
+ cellSlotId: charger_slot
+ - type: ItemSlots
+ slots:
+ charger_slot:
+ ejectOnInteract: true
+ name: Power cage
+ whitelist:
+ tags:
+ - PowerCage
+ - type: Machine
+ board: PowerCageRechargerCircuitboard
+ - type: StaticPrice
+ price: 500
- type: entity
parent: BaseItemRecharger
diff --git a/Resources/Prototypes/Entities/Structures/Shuttles/cannons.yml b/Resources/Prototypes/Entities/Structures/Shuttles/cannons.yml
new file mode 100644
index 0000000000..d3408f54e5
--- /dev/null
+++ b/Resources/Prototypes/Entities/Structures/Shuttles/cannons.yml
@@ -0,0 +1,375 @@
+- type: entity
+ id: ShuttleGunBase
+ name: shittle gun
+ abstract: true
+ placement:
+ mode: SnapgridCenter
+ components:
+ - type: Appearance
+ - type: Clickable
+ - type: InteractionOutline
+ - type: Anchorable
+ - type: Pullable
+ - type: Rotatable
+ - type: Physics
+ bodyType: Static
+ - type: ContainerContainer
+ - type: Gun
+ - type: Fixtures
+ fixtures:
+ fix1:
+ shape:
+ !type:PhysShapeAabb
+ bounds: "-0.45,-0.45,0.45,0.45"
+ density: 450
+ mask:
+ - MachineMask
+ layer:
+ - MachineLayer
+ - type: Damageable
+ damageContainer: Inorganic
+ damageModifierSet: Electronic
+ - type: Transform
+ anchored: true
+ - type: DeviceNetwork
+ deviceNetId: Wireless
+ receiveFrequencyId: BasicDevice
+ - type: WirelessNetworkConnection
+ range: 200
+ - type: DeviceLinkSink
+ ports:
+ - Trigger
+ - Toggle
+ - On
+ - Off
+ - type: AutoShootGun
+ - type: GunSignalControl
+ - type: StaticPrice
+ price: 1500
+
+# ---- Laser weapon branch ----
+# naming: LSE (Laser) + conventional power + suffix (c for PowerCage, e for wired energy) + Name
+# example: LSE-100e "Clown destroyer" (powered by the wiring, very weak)
+
+- type: entity
+ id: ShuttleGunSvalinnMachineGun
+ parent: [ ShuttleGunBase, ConstructibleMachine]
+ name: LSE-400c "Svalinn machine gun"
+ description: Basic stationary laser unit. Effective against live targets and electronics. Uses regular power cells to fire, and has an extremely high rate of fire
+ components:
+ - type: Sprite
+ sprite: Objects/Weapons/Guns/Shuttles/laser.rsi
+ layers:
+ - state: lse-400c
+ - state: mag-unshaded-9
+ map: ["enum.GunVisualLayers.MagUnshaded"]
+ shader: unshaded
+ - type: ContainerContainer
+ containers:
+ machine_board: !type:Container
+ machine_parts: !type:Container
+ gun_magazine: !type:ContainerSlot
+ - type: Destructible
+ thresholds:
+ - trigger:
+ !type:DamageTrigger
+ damage: 150
+ behaviors:
+ - !type:ChangeConstructionNodeBehavior
+ node: machineFrame
+ - !type:DoActsBehavior
+ acts: ["Destruction"]
+ - type: Gun
+ fireRate: 5
+ useKey: false
+ selectedMode: SemiAuto
+ availableModes:
+ - SemiAuto
+ soundGunshot:
+ path: /Audio/Weapons/Guns/Gunshots/laser_cannon.ogg
+ params:
+ variation: 0.05
+ - type: MagazineVisuals
+ magState: mag
+ steps: 10
+ zeroVisible: true
+ - type: Machine
+ board: ShuttleGunSvalinnMachineGunCircuitboard
+ - type: ItemSlots
+ slots:
+ gun_magazine:
+ name: Magazine
+ insertSound: /Audio/Weapons/Guns/MagIn/batrifle_magin.ogg
+ ejectSound: /Audio/Weapons/Guns/MagOut/batrifle_magout.ogg
+ whitelist:
+ tags:
+ - PowerCell
+ - PowerCellSmall
+ - type: MagazineAmmoProvider
+
+- type: entity
+ id: ShuttleGunPerforator
+ parent: [ ShuttleGunBase, ConstructibleMachine]
+ name: LSE-1200c "Perforator"
+ description: Advanced stationary laser unit. Annihilates electronics and is extremely dangerous to health! Uses the power cage to fire.
+ components:
+ - type: Sprite
+ sprite: Objects/Weapons/Guns/Shuttles/laser.rsi
+ layers:
+ - state: lse-1200c
+ - state: mag-unshaded-9
+ map: ["enum.GunVisualLayers.MagUnshaded"]
+ shader: unshaded
+ - type: ContainerContainer
+ containers:
+ machine_board: !type:Container
+ machine_parts: !type:Container
+ gun_magazine: !type:ContainerSlot
+ - type: Destructible
+ thresholds:
+ - trigger:
+ !type:DamageTrigger
+ damage: 300
+ behaviors:
+ - !type:ChangeConstructionNodeBehavior
+ node: machineFrame
+ - !type:DoActsBehavior
+ acts: ["Destruction"]
+ - type: Gun
+ fireRate: 1
+ useKey: false
+ selectedMode: SemiAuto
+ availableModes:
+ - SemiAuto
+ soundGunshot:
+ path: /Audio/Weapons/Guns/Gunshots/laser_cannon2.ogg
+ params:
+ variation: 0.05
+ - type: MagazineVisuals
+ magState: mag
+ steps: 10
+ zeroVisible: true
+ - type: Machine
+ board: ShuttleGunPerforatorCircuitboard
+ - type: ItemSlots
+ slots:
+ gun_magazine:
+ name: Magazine
+ insertSound: /Audio/Weapons/Guns/MagIn/batrifle_magin.ogg
+ ejectSound: /Audio/Weapons/Guns/MagOut/batrifle_magout.ogg
+ whitelist:
+ tags:
+ - PowerCage
+ - type: MagazineAmmoProvider
+
+# ---- Launchers ----
+# naming: EXP (Explosion) + conventional power + suffix (g for Grenade, c for RPG Cartridge) + Name
+# example: EXP-100c "Poppy"
+
+- type: entity
+ id: ShuttleGunFriendship
+ parent: [ShuttleGunBase, ConstructibleMachine]
+ name: EXP-320g "Friendship"
+ description: A small stationary grenade launcher that holds 2 grenades.
+ components:
+ - type: Sprite
+ sprite: Objects/Weapons/Guns/Shuttles/launcher.rsi
+ layers:
+ - state: exp-320g
+ - state: mag-7
+ map: ["enum.GunVisualLayers.Mag"]
+ - type: ContainerContainer
+ containers:
+ machine_board: !type:Container
+ machine_parts: !type:Container
+ ballistic-ammo: !type:Container
+ - type: Destructible
+ thresholds:
+ - trigger:
+ !type:DamageTrigger
+ damage: 200
+ behaviors:
+ - !type:ChangeConstructionNodeBehavior
+ node: machineFrame
+ - !type:DoActsBehavior
+ acts: ["Destruction"]
+ - type: Gun
+ projectileSpeed: 80
+ fireRate: 4
+ angleDecay: 45
+ minAngle: 0
+ maxAngle: 15
+ selectedMode: FullAuto
+ availableModes:
+ - FullAuto
+ soundGunshot:
+ path: /Audio/Items/Mining/fultext_launch.ogg
+ params:
+ pitch: 0.8
+ soundEmpty:
+ path: /Audio/Weapons/Guns/Empty/empty.ogg
+ - type: BallisticAmmoProvider
+ whitelist:
+ tags:
+ - Grenade
+ capacity: 2
+ soundInsert:
+ path: /Audio/Weapons/Guns/MagIn/batrifle_magin.ogg
+ - type: Machine
+ board: ShuttleGunFriendshipCircuitboard
+ - type: MagazineVisuals
+ magState: mag
+ steps: 8
+ zeroVisible: false
+
+- type: entity
+ id: ShuttleGunDuster
+ parent: [ShuttleGunBase, ConstructibleMachine]
+ name: EXP-2100g "Duster"
+ description: A powerful stationary grenade launcher. A cartridge is required for use.
+ components:
+ - type: Sprite
+ sprite: Objects/Weapons/Guns/Shuttles/launcher.rsi
+ layers:
+ - state: exp-2100g
+ - state: mag-7
+ map: ["enum.GunVisualLayers.Mag"]
+ - type: ContainerContainer
+ containers:
+ machine_board: !type:Container
+ machine_parts: !type:Container
+ gun_magazine: !type:ContainerSlot
+ - type: Destructible
+ thresholds:
+ - trigger:
+ !type:DamageTrigger
+ damage: 350
+ behaviors:
+ - !type:ChangeConstructionNodeBehavior
+ node: machineFrame
+ - !type:DoActsBehavior
+ acts: ["Destruction"]
+ - type: Gun
+ projectileSpeed: 40
+ fireRate: 0.3
+ selectedMode: FullAuto
+ availableModes:
+ - FullAuto
+ soundGunshot:
+ path: /Audio/Items/Mining/fultext_launch.ogg
+ params:
+ variation: 0.05
+ pitch: 0.8
+ soundEmpty:
+ path: /Audio/Weapons/Guns/Empty/empty.ogg
+ - type: Machine
+ board: ShuttleGunDusterCircuitboard
+ - type: MagazineAmmoProvider
+ - type: MagazineVisuals
+ magState: mag
+ steps: 8
+ zeroVisible: false
+ - type: ItemSlots
+ slots:
+ gun_magazine:
+ name: Magazine
+ priority: 2
+ whitelist:
+ tags:
+ - MagazineGrenade
+ insertSound:
+ path: /Audio/Weapons/Guns/MagIn/kinetic_reload.ogg
+ params:
+ pitch: 2
+ ejectSound: /Audio/Weapons/Guns/MagOut/smg_magout.ogg
+
+# ---- Other weapon ----
+
+- type: entity
+ id: ShuttleGunPirateCannon
+ parent: ShuttleGunBase
+ name: pirate ship cannon
+ description: Kaboom!
+ components:
+ - type: ContainerContainer
+ containers:
+ ballistic-ammo: !type:Container
+ - type: Damageable
+ damageContainer: Inorganic
+ damageModifierSet: Metallic
+ - type: Destructible
+ thresholds:
+ - trigger:
+ !type:DamageTrigger
+ damage: 300
+ behaviors:
+ - !type:DoActsBehavior
+ acts: ["Destruction"]
+ - type: Sprite
+ sprite: Objects/Weapons/Guns/Shuttles/pirate_cannon.rsi
+ layers:
+ - state: base
+ - type: Gun
+ fireRate: 1
+ soundGunshot:
+ path: /Audio/Weapons/Guns/Gunshots/mateba.ogg
+ - type: BallisticAmmoProvider
+ whitelist:
+ tags:
+ - CannonBall
+ capacity: 1
+ proto: CannonBall
+ soundInsert:
+ path: /Audio/Weapons/Guns/Gunshots/grenade_launcher.ogg
+
+- type: entity
+ id: ShuttleGunKinetic
+ parent: [ ShuttleGunBase, ConstructibleMachine]
+ name: PTK-800 "Matter Dematerializer"
+ description: Salvage stationary mining turret. Gradually accumulates charges on its own, extremely effective for asteroid excavation.
+ components:
+ - type: Sprite
+ sprite: Objects/Weapons/Guns/Shuttles/kinetic.rsi
+ layers:
+ - state: ptk-800
+ - state: mag-7
+ - type: ContainerContainer
+ containers:
+ machine_board: !type:Container
+ machine_parts: !type:Container
+ - type: Destructible
+ thresholds:
+ - trigger:
+ !type:DamageTrigger
+ damage: 100
+ behaviors:
+ - !type:ChangeConstructionNodeBehavior
+ node: machineFrame
+ - !type:DoActsBehavior
+ acts: ["Destruction"]
+ - type: Gun
+ projectileSpeed: 20
+ fireRate: 2
+ selectedMode: SemiAuto
+ angleDecay: 45
+ minAngle: 5
+ maxAngle: 15
+ availableModes:
+ - SemiAuto
+ soundGunshot:
+ path: /Audio/Weapons/Guns/Gunshots/kinetic_accel.ogg
+ params:
+ variation: 0.12
+ - type: RechargeBasicEntityAmmo
+ rechargeCooldown: 2
+ rechargeSound:
+ path: /Audio/Weapons/Guns/Bolt/lmg_bolt_closed.ogg
+ params:
+ pitch: 1.2
+ variation: 0.08
+ - type: BasicEntityAmmoProvider
+ proto: BulletKineticShuttle
+ capacity: 5
+ count: 5
+ - type: Machine
+ board: ShuttleGunKineticCircuitboard
diff --git a/Resources/Prototypes/Entities/Structures/Shuttles/thrusters.yml b/Resources/Prototypes/Entities/Structures/Shuttles/thrusters.yml
index 787101c5b5..eb299e3f3a 100644
--- a/Resources/Prototypes/Entities/Structures/Shuttles/thrusters.yml
+++ b/Resources/Prototypes/Entities/Structures/Shuttles/thrusters.yml
@@ -5,6 +5,17 @@
description: A thruster that allows a shuttle to move.
abstract: true
components:
+ - type: Fixtures
+ fixtures:
+ fix1:
+ shape:
+ !type:PhysShapeAabb
+ bounds: "-0.45,-0.45,0.45,0.45"
+ density: 60
+ mask:
+ - MachineMask
+ layer:
+ - MachineLayer
- type: AmbientSound
enabled: false
range: 4
@@ -30,12 +41,12 @@
- type: ExtensionCableReceiver
- type: Damageable
damageContainer: Inorganic
- damageModifierSet: Metallic
+ damageModifierSet: Electronic
- type: Destructible
thresholds:
- trigger:
!type:DamageTrigger
- damage: 300 # Considering we need a lot of thrusters didn't want to make an individual one too tanky
+ damage: 100 # Considering we need a lot of thrusters didn't want to make an individual one too tanky
behaviors:
- !type:DoActsBehavior
acts: ["Destruction"]
@@ -185,6 +196,9 @@
- type: UpgradePowerDraw
powerDrawMultiplier: 0.75
scaling: Exponential
+ - type: Damageable
+ damageContainer: Inorganic
+ damageModifierSet: Electronic
- type: StaticPrice
price: 2000
diff --git a/Resources/Prototypes/Recipes/Lathes/electronics.yml b/Resources/Prototypes/Recipes/Lathes/electronics.yml
index 2e93b9518e..3af8eb4e52 100644
--- a/Resources/Prototypes/Recipes/Lathes/electronics.yml
+++ b/Resources/Prototypes/Recipes/Lathes/electronics.yml
@@ -895,3 +895,54 @@
Steel: 100
Glass: 900
Gold: 100
+
+- type: latheRecipe
+ id: PowerCageRechargerCircuitboard
+ result: PowerCageRechargerCircuitboard
+ completetime: 6
+ materials:
+ Steel: 100
+ Glass: 900
+
+- type: latheRecipe
+ id: ShuttleGunSvalinnMachineGunCircuitboard
+ result: ShuttleGunSvalinnMachineGunCircuitboard
+ completetime: 6
+ materials:
+ Steel: 100
+ Glass: 900
+
+- type: latheRecipe
+ id: ShuttleGunPerforatorCircuitboard
+ result: ShuttleGunPerforatorCircuitboard
+ completetime: 10
+ materials:
+ Steel: 100
+ Glass: 900
+ Gold: 100
+
+- type: latheRecipe
+ id: ShuttleGunKineticCircuitboard
+ result: ShuttleGunKineticCircuitboard
+ completetime: 6
+ materials:
+ Steel: 100
+ Glass: 900
+
+- type: latheRecipe
+ id: ShuttleGunFriendshipCircuitboard
+ result: ShuttleGunFriendshipCircuitboard
+ completetime: 8
+ materials:
+ Steel: 100
+ Glass: 900
+ Gold: 50
+
+- type: latheRecipe
+ id: ShuttleGunDusterCircuitboard
+ result: ShuttleGunDusterCircuitboard
+ completetime: 12
+ materials:
+ Steel: 100
+ Glass: 900
+ Gold: 100
diff --git a/Resources/Prototypes/Recipes/Lathes/powercells.yml b/Resources/Prototypes/Recipes/Lathes/powercells.yml
index 0b63995a63..21928a53d2 100644
--- a/Resources/Prototypes/Recipes/Lathes/powercells.yml
+++ b/Resources/Prototypes/Recipes/Lathes/powercells.yml
@@ -39,3 +39,31 @@
Glass: 400
Uranium: 200
Gold: 100
+
+- type: latheRecipe
+ id: PowerCageSmall
+ result: PowerCageSmall
+ completetime: 3
+ materials:
+ Steel: 200
+ Plastic: 100
+
+- type: latheRecipe
+ id: PowerCageMedium
+ result: PowerCageMedium
+ completetime: 6
+ materials:
+ Steel: 500
+ Glass: 500
+ Plastic: 250
+ Gold: 40
+
+- type: latheRecipe
+ id: PowerCageHigh
+ result: PowerCageHigh
+ completetime: 10
+ materials:
+ Steel: 600
+ Glass: 800
+ Plastic: 400
+ Gold: 100
\ No newline at end of file
diff --git a/Resources/Prototypes/Recipes/Lathes/security.yml b/Resources/Prototypes/Recipes/Lathes/security.yml
index eb9da60d78..dceeb30263 100644
--- a/Resources/Prototypes/Recipes/Lathes/security.yml
+++ b/Resources/Prototypes/Recipes/Lathes/security.yml
@@ -605,3 +605,39 @@
Steel: 1000
Glass: 500
Plastic: 500
+
+- type: latheRecipe
+ id: MagazineGrenadeEmpty
+ result: MagazineGrenadeEmpty
+ completetime: 3
+ materials:
+ Steel: 150
+ Plastic: 50
+
+- type: latheRecipe
+ id: GrenadeEMP
+ result: GrenadeEMP
+ completetime: 3
+ materials:
+ Steel: 150
+ Plastic: 100
+ Glass: 20
+
+- type: latheRecipe
+ id: GrenadeBlast
+ result: GrenadeBlast
+ completetime: 3
+ materials:
+ Steel: 150
+ Plastic: 100
+ Gold: 50
+
+- type: latheRecipe
+ id: GrenadeFlash
+ result: GrenadeFlash
+ completetime: 3
+ materials:
+ Steel: 150
+ Plastic: 100
+ Glass: 20
+
\ No newline at end of file
diff --git a/Resources/Prototypes/Research/arsenal.yml b/Resources/Prototypes/Research/arsenal.yml
index bf60a9e797..71e85c691a 100644
--- a/Resources/Prototypes/Research/arsenal.yml
+++ b/Resources/Prototypes/Research/arsenal.yml
@@ -11,6 +11,7 @@
cost: 5000
recipeUnlocks:
- WeaponProtoKineticAccelerator
+ - ShuttleGunKineticCircuitboard
# These are roundstart but not replenishable for salvage
- type: technology
@@ -145,6 +146,27 @@
- HoloprojectorSecurity
- WeaponDisablerSMG
+- type: technology
+ id: BasicShuttleArmament
+ name: research-technology-basic-shuttle-armament
+ icon:
+ sprite: Structures/Power/cage_recharger.rsi
+ state: full
+ discipline: Arsenal
+ tier: 2
+ cost: 10500
+ recipeUnlocks:
+ - PowerCageRechargerCircuitboard
+ - PowerCageSmall
+ - PowerCageMedium
+ - MagazineGrenadeEmpty
+ - GrenadeFlash
+ - ShuttleGunSvalinnMachineGunCircuitboard
+ - ShuttleGunPerforatorCircuitboard
+ - ShuttleGunFriendshipCircuitboard
+ technologyPrerequisites:
+ - SalvageWeapons
+
# Tier 3
- type: technology
@@ -170,3 +192,19 @@
cost: 15000
recipeUnlocks:
- WeaponLaserSvalinn
+
+- type: technology
+ id: AdvancedShuttleWeapon
+ name: research-technology-advanced-shuttle-weapon
+ icon:
+ sprite: Objects/Weapons/Guns/Ammunition/Magazine/Grenade/grenade_cartridge.rsi
+ state: icon
+ discipline: Arsenal
+ tier: 3
+ cost: 15000
+ recipeUnlocks:
+ - GrenadeEMP
+ - PowerCageHigh
+ - ShuttleGunDusterCircuitboard
+ technologyPrerequisites:
+ - BasicShuttleArmament
\ No newline at end of file
diff --git a/Resources/Prototypes/tags.yml b/Resources/Prototypes/tags.yml
index 61e2c56c4a..40736c3fc5 100644
--- a/Resources/Prototypes/tags.yml
+++ b/Resources/Prototypes/tags.yml
@@ -250,6 +250,9 @@
- type: Tag
id: CanPilot
+- type: Tag
+ id: CannonBall
+
- type: Tag
id: CannonRestrict
@@ -784,6 +787,9 @@
- type: Tag
id: MagazinePistolSubMachineGun
+- type: Tag
+ id: MagazineGrenade
+
- type: Tag
id: MailingUnitElectronics
@@ -940,6 +946,9 @@
- type: Tag
id: PowerCellSmall
+- type: Tag
+ id: PowerCage
+
- type: Tag
id: Powerdrill
diff --git a/Resources/Textures/Objects/Power/power_cages.rsi/high.png b/Resources/Textures/Objects/Power/power_cages.rsi/high.png
new file mode 100644
index 0000000000..703cdcac08
Binary files /dev/null and b/Resources/Textures/Objects/Power/power_cages.rsi/high.png differ
diff --git a/Resources/Textures/Objects/Power/power_cages.rsi/inhand-left.png b/Resources/Textures/Objects/Power/power_cages.rsi/inhand-left.png
new file mode 100644
index 0000000000..43701b4e03
Binary files /dev/null and b/Resources/Textures/Objects/Power/power_cages.rsi/inhand-left.png differ
diff --git a/Resources/Textures/Objects/Power/power_cages.rsi/inhand-right.png b/Resources/Textures/Objects/Power/power_cages.rsi/inhand-right.png
new file mode 100644
index 0000000000..43701b4e03
Binary files /dev/null and b/Resources/Textures/Objects/Power/power_cages.rsi/inhand-right.png differ
diff --git a/Resources/Textures/Objects/Power/power_cages.rsi/medium.png b/Resources/Textures/Objects/Power/power_cages.rsi/medium.png
new file mode 100644
index 0000000000..1e2a8b74f5
Binary files /dev/null and b/Resources/Textures/Objects/Power/power_cages.rsi/medium.png differ
diff --git a/Resources/Textures/Objects/Power/power_cages.rsi/meta.json b/Resources/Textures/Objects/Power/power_cages.rsi/meta.json
new file mode 100644
index 0000000000..705a82df96
--- /dev/null
+++ b/Resources/Textures/Objects/Power/power_cages.rsi/meta.json
@@ -0,0 +1,34 @@
+{
+ "version": 1,
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Created by TheShuEd (github) for Space Station 14",
+ "states": [
+ {
+ "name": "small"
+ },
+ {
+ "name": "medium"
+ },
+ {
+ "name": "high"
+ },
+ {
+ "name": "inhand-left",
+ "directions": 4
+ },
+ {
+ "name": "inhand-right",
+ "directions": 4
+ },
+ {
+ "name": "o1"
+ },
+ {
+ "name": "o2"
+ }
+ ]
+}
diff --git a/Resources/Textures/Objects/Power/power_cages.rsi/o1.png b/Resources/Textures/Objects/Power/power_cages.rsi/o1.png
new file mode 100644
index 0000000000..bfc4817fe5
Binary files /dev/null and b/Resources/Textures/Objects/Power/power_cages.rsi/o1.png differ
diff --git a/Resources/Textures/Objects/Power/power_cages.rsi/o2.png b/Resources/Textures/Objects/Power/power_cages.rsi/o2.png
new file mode 100644
index 0000000000..9e2ae02d59
Binary files /dev/null and b/Resources/Textures/Objects/Power/power_cages.rsi/o2.png differ
diff --git a/Resources/Textures/Objects/Power/power_cages.rsi/small.png b/Resources/Textures/Objects/Power/power_cages.rsi/small.png
new file mode 100644
index 0000000000..fb7df07643
Binary files /dev/null and b/Resources/Textures/Objects/Power/power_cages.rsi/small.png differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Explosives/explosives.rsi/emp.png b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Explosives/explosives.rsi/emp.png
new file mode 100644
index 0000000000..ea8f23516e
Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Explosives/explosives.rsi/emp.png differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Explosives/explosives.rsi/meta.json b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Explosives/explosives.rsi/meta.json
index 3faf26ebe5..15ed620c3e 100644
--- a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Explosives/explosives.rsi/meta.json
+++ b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Explosives/explosives.rsi/meta.json
@@ -5,7 +5,7 @@
"y": 32
},
"license": "CC-BY-SA-3.0",
- "copyright": "https://github.com/discordia-space/CEV-Eris/raw/e1d495c3faf4642b6ec1c4be8acc7cd5bc51d785/icons/obj/ammo.dmi, ball, glassshot and grapeshot Made by Alekshhh (Github) for ss14",
+ "copyright": "https://github.com/discordia-space/CEV-Eris/raw/e1d495c3faf4642b6ec1c4be8acc7cd5bc51d785/icons/obj/ammo.dmi, ball, glassshot and grapeshot Made by Alekshhh (Github) for ss1, emp made by TheShuEd (github)",
"states": [
{
"name": "baton"
@@ -25,6 +25,9 @@
{
"name": "ball"
},
+ {
+ "name": "emp"
+ },
{
"name": "grapeshot"
},
diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Magazine/Grenade/grenade_cartridge.rsi/base.png b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Magazine/Grenade/grenade_cartridge.rsi/base.png
new file mode 100644
index 0000000000..27c6f16dc7
Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Magazine/Grenade/grenade_cartridge.rsi/base.png differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Magazine/Grenade/grenade_cartridge.rsi/icon.png b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Magazine/Grenade/grenade_cartridge.rsi/icon.png
new file mode 100644
index 0000000000..93359d8409
Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Magazine/Grenade/grenade_cartridge.rsi/icon.png differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Magazine/Grenade/grenade_cartridge.rsi/inhand-left.png b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Magazine/Grenade/grenade_cartridge.rsi/inhand-left.png
new file mode 100644
index 0000000000..14265b1c7d
Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Magazine/Grenade/grenade_cartridge.rsi/inhand-left.png differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Magazine/Grenade/grenade_cartridge.rsi/inhand-right.png b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Magazine/Grenade/grenade_cartridge.rsi/inhand-right.png
new file mode 100644
index 0000000000..826d0bb3f7
Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Magazine/Grenade/grenade_cartridge.rsi/inhand-right.png differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Magazine/Grenade/grenade_cartridge.rsi/mag-1.png b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Magazine/Grenade/grenade_cartridge.rsi/mag-1.png
new file mode 100644
index 0000000000..6b233bee38
Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Magazine/Grenade/grenade_cartridge.rsi/mag-1.png differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Magazine/Grenade/grenade_cartridge.rsi/mag-2.png b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Magazine/Grenade/grenade_cartridge.rsi/mag-2.png
new file mode 100644
index 0000000000..6b233bee38
Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Magazine/Grenade/grenade_cartridge.rsi/mag-2.png differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Magazine/Grenade/grenade_cartridge.rsi/mag-3.png b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Magazine/Grenade/grenade_cartridge.rsi/mag-3.png
new file mode 100644
index 0000000000..f8e3f08c8f
Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Magazine/Grenade/grenade_cartridge.rsi/mag-3.png differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Magazine/Grenade/grenade_cartridge.rsi/mag-4.png b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Magazine/Grenade/grenade_cartridge.rsi/mag-4.png
new file mode 100644
index 0000000000..b3ea88e15f
Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Magazine/Grenade/grenade_cartridge.rsi/mag-4.png differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Ammunition/Magazine/Grenade/grenade_cartridge.rsi/meta.json b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Magazine/Grenade/grenade_cartridge.rsi/meta.json
new file mode 100644
index 0000000000..32d2f5b7f0
--- /dev/null
+++ b/Resources/Textures/Objects/Weapons/Guns/Ammunition/Magazine/Grenade/grenade_cartridge.rsi/meta.json
@@ -0,0 +1,37 @@
+{
+ "version": 1,
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "license": "CC-BY-SA-3.0",
+ "copyright": "created by TheShuEd (github) for Space Station 14",
+ "states": [
+ {
+ "name": "base"
+ },
+ {
+ "name": "icon"
+ },
+ {
+ "name": "inhand-left",
+ "directions": 4
+ },
+ {
+ "name": "inhand-right",
+ "directions": 4
+ },
+ {
+ "name": "mag-1"
+ },
+ {
+ "name": "mag-2"
+ },
+ {
+ "name": "mag-3"
+ },
+ {
+ "name": "mag-4"
+ }
+ ]
+}
diff --git a/Resources/Textures/Objects/Weapons/Guns/Projectiles/projectiles.rsi/beam_heavy2.png b/Resources/Textures/Objects/Weapons/Guns/Projectiles/projectiles.rsi/beam_heavy2.png
new file mode 100644
index 0000000000..b171a562cb
Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Projectiles/projectiles.rsi/beam_heavy2.png differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Projectiles/projectiles.rsi/impact_beam_heavy2.png b/Resources/Textures/Objects/Weapons/Guns/Projectiles/projectiles.rsi/impact_beam_heavy2.png
new file mode 100644
index 0000000000..b5d43d2bf0
Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Projectiles/projectiles.rsi/impact_beam_heavy2.png differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Projectiles/projectiles.rsi/meta.json b/Resources/Textures/Objects/Weapons/Guns/Projectiles/projectiles.rsi/meta.json
index 804ab0bc91..0a835a14d7 100644
--- a/Resources/Textures/Objects/Weapons/Guns/Projectiles/projectiles.rsi/meta.json
+++ b/Resources/Textures/Objects/Weapons/Guns/Projectiles/projectiles.rsi/meta.json
@@ -73,6 +73,36 @@
]
]
},
+ {
+ "name": "muzzle_beam_heavy2",
+ "delays": [
+ [
+ 0.060000002,
+ 0.060000002,
+ 0.060000002,
+ 0.060000002,
+ 0.060000002,
+ 0.060000002,
+ 0.060000002,
+ 0.060000002
+ ]
+ ]
+ },
+ {
+ "name": "beam_heavy2",
+ "delays": [
+ [
+ 0.060000002,
+ 0.060000002,
+ 0.060000002,
+ 0.060000002,
+ 0.060000002,
+ 0.060000002,
+ 0.060000002,
+ 0.060000002
+ ]
+ ]
+ },
{
"name": "beam_heavy",
"delays": [
@@ -103,6 +133,21 @@
]
]
},
+ {
+ "name": "impact_beam_heavy2",
+ "delays": [
+ [
+ 0.060000002,
+ 0.060000002,
+ 0.060000002,
+ 0.060000002,
+ 0.060000002,
+ 0.060000002,
+ 0.060000002,
+ 0.060000002
+ ]
+ ]
+ },
{
"name": "muzzle_omni",
"delays": [
diff --git a/Resources/Textures/Objects/Weapons/Guns/Projectiles/projectiles.rsi/muzzle_beam_heavy2.png b/Resources/Textures/Objects/Weapons/Guns/Projectiles/projectiles.rsi/muzzle_beam_heavy2.png
new file mode 100644
index 0000000000..fe3365b680
Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Projectiles/projectiles.rsi/muzzle_beam_heavy2.png differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Shuttles/kinetic.rsi/mag-1.png b/Resources/Textures/Objects/Weapons/Guns/Shuttles/kinetic.rsi/mag-1.png
new file mode 100644
index 0000000000..99f8264d14
Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Shuttles/kinetic.rsi/mag-1.png differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Shuttles/kinetic.rsi/mag-2.png b/Resources/Textures/Objects/Weapons/Guns/Shuttles/kinetic.rsi/mag-2.png
new file mode 100644
index 0000000000..9ccfc11bb3
Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Shuttles/kinetic.rsi/mag-2.png differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Shuttles/kinetic.rsi/mag-3.png b/Resources/Textures/Objects/Weapons/Guns/Shuttles/kinetic.rsi/mag-3.png
new file mode 100644
index 0000000000..6facc2d8f6
Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Shuttles/kinetic.rsi/mag-3.png differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Shuttles/kinetic.rsi/mag-4.png b/Resources/Textures/Objects/Weapons/Guns/Shuttles/kinetic.rsi/mag-4.png
new file mode 100644
index 0000000000..72473343c8
Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Shuttles/kinetic.rsi/mag-4.png differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Shuttles/kinetic.rsi/mag-5.png b/Resources/Textures/Objects/Weapons/Guns/Shuttles/kinetic.rsi/mag-5.png
new file mode 100644
index 0000000000..cea633b3bc
Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Shuttles/kinetic.rsi/mag-5.png differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Shuttles/kinetic.rsi/mag-6.png b/Resources/Textures/Objects/Weapons/Guns/Shuttles/kinetic.rsi/mag-6.png
new file mode 100644
index 0000000000..4a892b1ef2
Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Shuttles/kinetic.rsi/mag-6.png differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Shuttles/kinetic.rsi/mag-7.png b/Resources/Textures/Objects/Weapons/Guns/Shuttles/kinetic.rsi/mag-7.png
new file mode 100644
index 0000000000..f2540aac06
Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Shuttles/kinetic.rsi/mag-7.png differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Shuttles/kinetic.rsi/meta.json b/Resources/Textures/Objects/Weapons/Guns/Shuttles/kinetic.rsi/meta.json
new file mode 100644
index 0000000000..537e6f8538
--- /dev/null
+++ b/Resources/Textures/Objects/Weapons/Guns/Shuttles/kinetic.rsi/meta.json
@@ -0,0 +1,35 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Created by TheShuEd (github) for Space Station 14",
+ "size": {
+ "x": 64,
+ "y": 64
+ },
+ "states": [
+ {
+ "name": "ptk-800"
+ },
+ {
+ "name": "mag-1"
+ },
+ {
+ "name": "mag-2"
+ },
+ {
+ "name": "mag-3"
+ },
+ {
+ "name": "mag-4"
+ },
+ {
+ "name": "mag-5"
+ },
+ {
+ "name": "mag-6"
+ },
+ {
+ "name": "mag-7"
+ }
+ ]
+}
diff --git a/Resources/Textures/Objects/Weapons/Guns/Shuttles/kinetic.rsi/ptk-800.png b/Resources/Textures/Objects/Weapons/Guns/Shuttles/kinetic.rsi/ptk-800.png
new file mode 100644
index 0000000000..7a11cb93a5
Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Shuttles/kinetic.rsi/ptk-800.png differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Shuttles/laser.rsi/lse-1200c.png b/Resources/Textures/Objects/Weapons/Guns/Shuttles/laser.rsi/lse-1200c.png
new file mode 100644
index 0000000000..600ff52d25
Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Shuttles/laser.rsi/lse-1200c.png differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Shuttles/laser.rsi/lse-400c.png b/Resources/Textures/Objects/Weapons/Guns/Shuttles/laser.rsi/lse-400c.png
new file mode 100644
index 0000000000..7bbc575847
Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Shuttles/laser.rsi/lse-400c.png differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Shuttles/laser.rsi/mag-unshaded-0.png b/Resources/Textures/Objects/Weapons/Guns/Shuttles/laser.rsi/mag-unshaded-0.png
new file mode 100644
index 0000000000..135ff86ab5
Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Shuttles/laser.rsi/mag-unshaded-0.png differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Shuttles/laser.rsi/mag-unshaded-1.png b/Resources/Textures/Objects/Weapons/Guns/Shuttles/laser.rsi/mag-unshaded-1.png
new file mode 100644
index 0000000000..e617be2bf9
Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Shuttles/laser.rsi/mag-unshaded-1.png differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Shuttles/laser.rsi/mag-unshaded-2.png b/Resources/Textures/Objects/Weapons/Guns/Shuttles/laser.rsi/mag-unshaded-2.png
new file mode 100644
index 0000000000..eb16f29278
Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Shuttles/laser.rsi/mag-unshaded-2.png differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Shuttles/laser.rsi/mag-unshaded-3.png b/Resources/Textures/Objects/Weapons/Guns/Shuttles/laser.rsi/mag-unshaded-3.png
new file mode 100644
index 0000000000..a7c4b3df06
Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Shuttles/laser.rsi/mag-unshaded-3.png differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Shuttles/laser.rsi/mag-unshaded-4.png b/Resources/Textures/Objects/Weapons/Guns/Shuttles/laser.rsi/mag-unshaded-4.png
new file mode 100644
index 0000000000..3541031ce5
Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Shuttles/laser.rsi/mag-unshaded-4.png differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Shuttles/laser.rsi/mag-unshaded-5.png b/Resources/Textures/Objects/Weapons/Guns/Shuttles/laser.rsi/mag-unshaded-5.png
new file mode 100644
index 0000000000..1d76b9e0d4
Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Shuttles/laser.rsi/mag-unshaded-5.png differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Shuttles/laser.rsi/mag-unshaded-6.png b/Resources/Textures/Objects/Weapons/Guns/Shuttles/laser.rsi/mag-unshaded-6.png
new file mode 100644
index 0000000000..591fda56aa
Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Shuttles/laser.rsi/mag-unshaded-6.png differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Shuttles/laser.rsi/mag-unshaded-7.png b/Resources/Textures/Objects/Weapons/Guns/Shuttles/laser.rsi/mag-unshaded-7.png
new file mode 100644
index 0000000000..bbab730d89
Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Shuttles/laser.rsi/mag-unshaded-7.png differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Shuttles/laser.rsi/mag-unshaded-8.png b/Resources/Textures/Objects/Weapons/Guns/Shuttles/laser.rsi/mag-unshaded-8.png
new file mode 100644
index 0000000000..7cdab8829a
Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Shuttles/laser.rsi/mag-unshaded-8.png differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Shuttles/laser.rsi/mag-unshaded-9.png b/Resources/Textures/Objects/Weapons/Guns/Shuttles/laser.rsi/mag-unshaded-9.png
new file mode 100644
index 0000000000..8bba7f1a0f
Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Shuttles/laser.rsi/mag-unshaded-9.png differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Shuttles/laser.rsi/meta.json b/Resources/Textures/Objects/Weapons/Guns/Shuttles/laser.rsi/meta.json
new file mode 100644
index 0000000000..3760eca2c2
--- /dev/null
+++ b/Resources/Textures/Objects/Weapons/Guns/Shuttles/laser.rsi/meta.json
@@ -0,0 +1,107 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Created by TheShuEd (github) for Space Station 14",
+ "size": {
+ "x": 64,
+ "y": 64
+ },
+ "states": [
+ {
+ "name": "lse-400c"
+ },
+ {
+ "name": "lse-1200c"
+ },
+ {
+ "name": "mag-unshaded-0",
+ "delays": [
+ [
+ 0.6,
+ 0.6
+ ]
+ ]
+ },
+ {
+ "name": "mag-unshaded-1",
+ "delays": [
+ [
+ 0.3,
+ 0.3
+ ]
+ ]
+ },
+ {
+ "name": "mag-unshaded-2",
+ "delays": [
+ [
+ 0.3,
+ 0.3
+ ]
+ ]
+ },
+ {
+ "name": "mag-unshaded-3",
+ "delays": [
+ [
+ 0.3,
+ 0.3
+ ]
+ ]
+ },
+ {
+ "name": "mag-unshaded-4",
+ "delays": [
+ [
+ 0.3,
+ 0.3
+ ]
+ ]
+ },
+ {
+ "name": "mag-unshaded-5",
+ "delays": [
+ [
+ 0.3,
+ 0.3
+ ]
+ ]
+ },
+ {
+ "name": "mag-unshaded-6",
+ "delays": [
+ [
+ 0.3,
+ 0.3
+ ]
+ ]
+ },
+ {
+ "name": "mag-unshaded-7",
+ "delays": [
+ [
+ 0.3,
+ 0.3
+ ]
+ ]
+ },
+ {
+ "name": "mag-unshaded-8",
+ "delays": [
+ [
+ 0.3,
+ 0.3
+ ]
+ ]
+ },
+ {
+ "name": "mag-unshaded-9",
+ "delays": [
+ [
+ 0.3,
+ 0.3
+ ]
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/Resources/Textures/Objects/Weapons/Guns/Shuttles/launcher.rsi/exp-2100g.png b/Resources/Textures/Objects/Weapons/Guns/Shuttles/launcher.rsi/exp-2100g.png
new file mode 100644
index 0000000000..c6e151ad6f
Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Shuttles/launcher.rsi/exp-2100g.png differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Shuttles/launcher.rsi/exp-320g.png b/Resources/Textures/Objects/Weapons/Guns/Shuttles/launcher.rsi/exp-320g.png
new file mode 100644
index 0000000000..bc76168636
Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Shuttles/launcher.rsi/exp-320g.png differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Shuttles/launcher.rsi/mag-1.png b/Resources/Textures/Objects/Weapons/Guns/Shuttles/launcher.rsi/mag-1.png
new file mode 100644
index 0000000000..20c6f2797e
Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Shuttles/launcher.rsi/mag-1.png differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Shuttles/launcher.rsi/mag-2.png b/Resources/Textures/Objects/Weapons/Guns/Shuttles/launcher.rsi/mag-2.png
new file mode 100644
index 0000000000..eef8e7aca5
Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Shuttles/launcher.rsi/mag-2.png differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Shuttles/launcher.rsi/mag-3.png b/Resources/Textures/Objects/Weapons/Guns/Shuttles/launcher.rsi/mag-3.png
new file mode 100644
index 0000000000..0dd49f1065
Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Shuttles/launcher.rsi/mag-3.png differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Shuttles/launcher.rsi/mag-4.png b/Resources/Textures/Objects/Weapons/Guns/Shuttles/launcher.rsi/mag-4.png
new file mode 100644
index 0000000000..5615c7b5c3
Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Shuttles/launcher.rsi/mag-4.png differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Shuttles/launcher.rsi/mag-5.png b/Resources/Textures/Objects/Weapons/Guns/Shuttles/launcher.rsi/mag-5.png
new file mode 100644
index 0000000000..e32c827b21
Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Shuttles/launcher.rsi/mag-5.png differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Shuttles/launcher.rsi/mag-6.png b/Resources/Textures/Objects/Weapons/Guns/Shuttles/launcher.rsi/mag-6.png
new file mode 100644
index 0000000000..efdb0bdac0
Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Shuttles/launcher.rsi/mag-6.png differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Shuttles/launcher.rsi/mag-7.png b/Resources/Textures/Objects/Weapons/Guns/Shuttles/launcher.rsi/mag-7.png
new file mode 100644
index 0000000000..1e1dfaef55
Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Shuttles/launcher.rsi/mag-7.png differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Shuttles/launcher.rsi/meta.json b/Resources/Textures/Objects/Weapons/Guns/Shuttles/launcher.rsi/meta.json
new file mode 100644
index 0000000000..75a018b665
--- /dev/null
+++ b/Resources/Textures/Objects/Weapons/Guns/Shuttles/launcher.rsi/meta.json
@@ -0,0 +1,38 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Created by TheShuEd (github) for Space Station 14",
+ "size": {
+ "x": 64,
+ "y": 64
+ },
+ "states": [
+ {
+ "name": "exp-320g"
+ },
+ {
+ "name": "exp-2100g"
+ },
+ {
+ "name": "mag-1"
+ },
+ {
+ "name": "mag-2"
+ },
+ {
+ "name": "mag-3"
+ },
+ {
+ "name": "mag-4"
+ },
+ {
+ "name": "mag-5"
+ },
+ {
+ "name": "mag-6"
+ },
+ {
+ "name": "mag-7"
+ }
+ ]
+}
diff --git a/Resources/Textures/Objects/Weapons/Guns/Shuttles/pirate_cannon.rsi/base.png b/Resources/Textures/Objects/Weapons/Guns/Shuttles/pirate_cannon.rsi/base.png
new file mode 100644
index 0000000000..eb000ac7b5
Binary files /dev/null and b/Resources/Textures/Objects/Weapons/Guns/Shuttles/pirate_cannon.rsi/base.png differ
diff --git a/Resources/Textures/Objects/Weapons/Guns/Shuttles/pirate_cannon.rsi/meta.json b/Resources/Textures/Objects/Weapons/Guns/Shuttles/pirate_cannon.rsi/meta.json
new file mode 100644
index 0000000000..7219f4626a
--- /dev/null
+++ b/Resources/Textures/Objects/Weapons/Guns/Shuttles/pirate_cannon.rsi/meta.json
@@ -0,0 +1,14 @@
+{
+ "version": 1,
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Created by TheShuEd (github) for Space Station 14",
+ "size": {
+ "x": 64,
+ "y": 64
+ },
+ "states": [
+ {
+ "name": "base"
+ }
+ ]
+}
diff --git a/Resources/Textures/Structures/Power/cage_recharger.rsi/empty.png b/Resources/Textures/Structures/Power/cage_recharger.rsi/empty.png
new file mode 100644
index 0000000000..28d040cd32
Binary files /dev/null and b/Resources/Textures/Structures/Power/cage_recharger.rsi/empty.png differ
diff --git a/Resources/Textures/Structures/Power/cage_recharger.rsi/full.png b/Resources/Textures/Structures/Power/cage_recharger.rsi/full.png
new file mode 100644
index 0000000000..ed52d0851f
Binary files /dev/null and b/Resources/Textures/Structures/Power/cage_recharger.rsi/full.png differ
diff --git a/Resources/Textures/Structures/Power/cage_recharger.rsi/light-charged.png b/Resources/Textures/Structures/Power/cage_recharger.rsi/light-charged.png
new file mode 100644
index 0000000000..bf313a1e5c
Binary files /dev/null and b/Resources/Textures/Structures/Power/cage_recharger.rsi/light-charged.png differ
diff --git a/Resources/Textures/Structures/Power/cage_recharger.rsi/light-charging.png b/Resources/Textures/Structures/Power/cage_recharger.rsi/light-charging.png
new file mode 100644
index 0000000000..869aee685a
Binary files /dev/null and b/Resources/Textures/Structures/Power/cage_recharger.rsi/light-charging.png differ
diff --git a/Resources/Textures/Structures/Power/cage_recharger.rsi/light-empty.png b/Resources/Textures/Structures/Power/cage_recharger.rsi/light-empty.png
new file mode 100644
index 0000000000..b241479b68
Binary files /dev/null and b/Resources/Textures/Structures/Power/cage_recharger.rsi/light-empty.png differ
diff --git a/Resources/Textures/Structures/Power/cage_recharger.rsi/light-off.png b/Resources/Textures/Structures/Power/cage_recharger.rsi/light-off.png
new file mode 100644
index 0000000000..1bdf052387
Binary files /dev/null and b/Resources/Textures/Structures/Power/cage_recharger.rsi/light-off.png differ
diff --git a/Resources/Textures/Structures/Power/cage_recharger.rsi/meta.json b/Resources/Textures/Structures/Power/cage_recharger.rsi/meta.json
new file mode 100644
index 0000000000..8a1714eac0
--- /dev/null
+++ b/Resources/Textures/Structures/Power/cage_recharger.rsi/meta.json
@@ -0,0 +1,52 @@
+{
+ "version": 1,
+ "size": {
+ "x": 32,
+ "y": 32
+ },
+ "license": "CC-BY-SA-3.0",
+ "copyright": "Created by TheShuEd (github) for Space Station 14",
+ "states": [
+ {
+ "name": "light-off"
+ },
+ {
+ "name": "empty"
+ },
+ {
+ "name": "full"
+ },
+ {
+ "name": "open"
+ },
+ {
+ "name": "light-charging",
+ "delays": [
+ [
+ 0.3,
+ 0.3,
+ 0.3,
+ 0.3
+ ]
+ ]
+ },
+ {
+ "name": "light-charged",
+ "delays": [
+ [
+ 0.6,
+ 0.6
+ ]
+ ]
+ },
+ {
+ "name": "light-empty",
+ "delays": [
+ [
+ 0.8,
+ 0.8
+ ]
+ ]
+ }
+ ]
+}
diff --git a/Resources/Textures/Structures/Power/cage_recharger.rsi/open.png b/Resources/Textures/Structures/Power/cage_recharger.rsi/open.png
new file mode 100644
index 0000000000..28d040cd32
Binary files /dev/null and b/Resources/Textures/Structures/Power/cage_recharger.rsi/open.png differ