Weapons
Weapons are data assets. Building one is authoring data, not writing code — and the same weapon works on the player, an enemy or a boss.
The three pieces
Every weapon in ShmupKit is assembled from three layers. Knowing which layer owns which setting is the single most useful thing to learn here — it answers most "why isn't this working" questions.
| Layer | What it is | Owns |
|---|---|---|
| Weapon Component | A gun position on a pawn | Where it sits on the hull, which team it shoots for, which button fires it |
| Weapon Data | The weapon itself, as an asset | Display name, what it costs to fire, and its list of power levels |
| Weapon Level | One power tier, as an asset | Fire rate, projectile count, spread, sound, fire points, the visible gun |
Mounts
Every pawn has a Front mount. The player pawn adds Left, Right
and Rear. Select one in the Components panel to configure it.
| Property | Purpose |
|---|---|
| Weapon Data | The weapon fitted here, and the only source of firing behaviour. A mount with none logs a one-off warning and stays silent. |
| Mount Slot | Which hardpoint this is — Front, Left, Right or Rear. Drives pickup targeting and upgrade banking. |
| Mount Offset | Where the gun sits on the hull, relative to the pawn. This is the ship's hardpoint, so it stays on the component rather than the weapon. |
| Fire Direction | Which way it shoots, in owner space. The rear mount ships as (-1, 0, 0). |
| Faction | Player, Enemy or Neutral. Shots pass straight through anything on the same faction — no block, no impact effect, no damage. Neutral hits everyone. |
| Fire Trigger | Which button fires this mount. See below. |
| Inherit Owner Velocity | Adds the ship's forward speed to the shot so bullets don't appear to crawl when you're flying into them. On by default. |
| Fire Component | Optional. Fire from a named component (a turret head) instead of the mount offset, so shots follow whatever that component is doing. |
Fire Trigger
Leave this on Derive unless you need something specific. Derive follows the convention players already expect from the genre:
- Front and rear mounts fire on the main button.
- A side mount fires on the main button while its weapon is free.
- A side mount whose weapon costs energy or ammo gets its own button, because spending should be a decision.
A free side weapon answers both the main button and its own — it fires with everything else, and can still be let off alone. Because routing is driven by which buttons are currently held rather than by press and release events, letting go of one button while the other is still down does not interrupt fire.
| Option | Behaviour |
|---|---|
| Derive | Work it out from the mount slot and the weapon's cost, as described above. The default. |
| Primary | Always the main fire button, whatever the mount or cost. |
| Manual Left | Its own button — middle mouse by default. |
| Manual Right | Its own button — right mouse by default. |
| Auto | Fires by itself with no input. What enemies use. |
Weapon Data
The weapon asset. Create it with right-click → Miscellaneous → Data Asset →
SKWeaponData.
| Property | Purpose |
|---|---|
| Display Name | Shown in UI and on the weapon select screen. |
| Levels | The power tiers in order, weakest first. Index 0 is the base weapon; a single entry means a weapon that never upgrades. |
| Auto Fire | Fires by itself while equipped, no trigger needed — for auto secondaries like a missile pack. Enemies auto-fire regardless, having no trigger. |
| Cost Type | Free, Energy or Ammo. |
Cost
Free weapons always fire.
Energy weapons drain the pawn's energy generator by Energy Per Volley. If the pawn has no energy component, energy weapons simply fire for free — the system strips out cleanly, so you can ship without one.
Ammo weapons carry their own supply, independent of any other mount:
| Property | Purpose |
|---|---|
| Max Ammo | Capacity. Refilled to full whenever the weapon is equipped. |
| Ammo Per Volley | Spent per shot. |
| Ammo Refill Rate | Ammo regained per second, trickled continuously. 0 means pickups only. |
Pickup grants
When a pickup hands the player this weapon, Grant Mode decides how long they keep it. This is about ownership duration — not how long a single trigger press lasts.
| Mode | Behaviour |
|---|---|
| Permanent | Kept until something replaces it. |
| Timed | Reverts to the previous weapon after Grant Duration seconds. |
| Shot Count | Reverts after Grant Shots shots. |
Weapon Levels
Each level is its own data asset (SKWeaponLevelData) and holds everything about how the
weapon behaves at that tier. A weapon fires at min(banked level, its own top level).
Firing
| Property | Default | Purpose |
|---|---|---|
| Projectile Class | — | The projectile Blueprint this level fires. Damage, speed and lifespan live there. |
| Fire Mode | Automatic | Automatic repeats while held at Fire Rate. Salvo fires one volley per press, then waits for a fresh press. |
| Fire Rate | 10 | Volleys per second while held. Automatic only. |
| Projectile Count | 1 | Projectiles per volley. |
| Burst Count | 1 | Splits one volley into a rattle of sub-volleys. |
| Burst Delay | 0.1 | Seconds between those sub-volleys. |
Shape
Three independent controls that compose freely. Getting the pattern you want is almost always a matter of picking the right one rather than fighting a single setting.
Arc Angle
Angular spread, shared across the volley. A fan.
Projectile Spacing
Parallel offset, side by side. A wall of shots.
Spread Angle
Random scatter per shot, for inaccuracy.
| Property | Range | Purpose |
|---|---|---|
| Arc Angle | 0–360 | Total angular spread, divided across the volley's projectiles. |
| Projectile Spacing | 0+ | Parallel gap between shots, independent of any angle. Needs Projectile Count above 1. |
| Spread Angle | 0–180 | Random inaccuracy applied per shot. |
Arc and spacing combine into a fan that starts wide. Spacing is also how a single floating cannon puts one shot down each side of itself — you want one fire point with Projectile Count 2 and a spacing value, not two fire points, because with two the gun mesh would sit directly on top of one of the shots.
Fire Points
A level can define any number of fire points. Each is a position with its own angle. Leave the list empty to fire from the mount position itself.
| Property | Purpose |
|---|---|
| Offset | Where this point sits, relative to the mount. |
| Angle Offset | This one point's own firing direction, measured from centre. Range −180 to 180. |
| Alternate Fire Points | Off: every shot fires from all points at once (dual and spread guns). On: each shot uses the next point in rotation (missile salvos alternating left and right). |
Arc Angle is the total spread
shared across a volley, while Angle Offset is one point's own direction. An arc
of 45 across two projectiles gives −22.5 and +22.5. Two fire points set to −45 and +45 are
90° apart. To match an arc of A across two points, use ±A/2.
Combining both expresses patterns a plain arc cannot. The classic \ || / is four fire
points at −22.5, 0, 0 and +22.5, with the middle pair separated by Projectile Spacing.
The gun
The visible cannon belongs to the weapon, not the ship, so swapping weapons swaps the model on the hull automatically — and a temporary weapon takes its gun with it when it expires. Leave Gun Mesh null if the guns are painted into the ship's own mesh.
| Property | Default | Purpose |
|---|---|---|
| Gun Mesh | — | The cannon model for this level. Beams also emit from it when set. |
| Gun Mesh Offset | 0,0,0 | Where the model sits, in owner space. Independent of the fire points, so the cannon can sit between the shots it throws. |
| Gun Lag | Off | The gun eases toward its anchor as the ship moves, for a trailing sway. Shots sway with it, so they keep leaving the visible barrel. |
| Gun Lag Speed | 10 | How fast it catches up. Higher is tighter, with less sway. |
| Spin Rate | 0 | Continuous rotation, for gatling barrels. |
Sound
| Property | Purpose |
|---|---|
| Fire Sound | Played when the weapon fires. Leave null for a silent weapon. Beam weapons use the beam class's own sound instead. |
| Fire Sound Mode | Per Shot for slow and medium guns where each shot reads as distinct. Loop for fast or continuous guns — one looping sound while firing, which avoids machine-gun audio spam. A Loop sound asset must itself be set to loop. |
| Fire Sound Pitch Variance | Per Shot only. Random pitch per shot so rapid fire doesn't hammer one identical sample. |
| Loop Pitch Reference | Loop only. The fire rate the loop was recorded at. Set it and the loop pitches up as the weapon's rate increases with level. 0 disables the effect. |
Enemy aiming
| Property | Purpose |
|---|---|
| Aimed At Player | Fire toward the player rather than along Fire Direction. |
| Aim Offset Angle | Lead or trail that aim by a fixed angle, −180 to 180. Useful for making an enemy miss deliberately, or for firing a spread either side of the player. |
Cost overrides
A level can override the weapon's ammo capacity or energy cost, so a fully upgraded weapon can be made hungrier or given a deeper magazine without a second weapon asset. Tick Override Max Ammo or Override Energy Per Volley and set the value beneath it. Left off, the weapon asset's own figures apply.
Beams
Set Beam Class and the level becomes a beam weapon: firing maintains one continuous laser instead of spawning projectiles, and every projectile, burst and spread setting above is ignored. Damage and length are configured on the beam class itself.
| Property | Purpose |
|---|---|
| Beam Class | The beam actor to maintain while firing. |
| Beam Duration | How long one firing lasts per trigger press — the beam's shot length. 0 keeps it on while fire is held. On an auto-firing weapon, 0 means a permanently on beam and any value above 0 gives back-to-back pulses. |
Building a weapon
Create the levels
Right-click in the Content Browser → Miscellaneous → Data Asset →
SKWeaponLevelData. Make one per power tier. Set the projectile class, fire
mode and rate, then shape the volley with projectile count, arc and spacing.
Create the weapon
Another Data Asset, this time SKWeaponData. Set the display name and cost type, then
add your level assets to Levels in order, weakest first.
Fit it to a mount
Select a weapon component on your pawn and set Weapon Data. The mount fires it from the next frame — there is nothing to compile and no Blueprint wiring.
Offer it to the player
To make it available on the pre-run select screen, add it to the weapon catalogue referenced in Project Settings → Game → ShmupKit → Weapon Catalog. To drop it in-level instead, reference it from a weapon pickup.
Common fixes
- Nothing fires — the mount has no Weapon Data, or the weapon has no Levels
- Shots pass through enemies — the mount's Faction matches theirs
- Two fire points spread twice as wide as expected — use ±A/2, not ±A
- A beam deals no damage — Damage Per Second lives on the beam Blueprint, not the weapon
- The cannon sits on top of a shot — use one fire point with Projectile Spacing instead of two