Weapons kit

Roblox offers the following prefab weapons to assist in creating competitive combat-based games. The core system features projectile-based weapons with an over-the-shoulder camera, and setting the projectile speed high enough can simulate raycasting weapons like laser guns.

To use a prefab weapon in your game:

  1. Select a weapon from below, navigating to the asset library link.

    Pistol

    Shotgun

    Auto Rifle

    Submachine Gun

    Sniper Rifle

    Crossbow

    Grenade Launcher

    Rocket Launcher

    Railgun

  2. On the weapon's item page, click the Get Model button and confirm the transaction.

  3. In Studio, open the Toolbox and select your Inventory section.

  4. Locate the weapon and click it to add it into the place. When prompted whether to put the tool into the starter pack, click Yes if you want players to start with the weapon in their backpack, or click No to simply place the weapon in the 3D world as a pickup.

  5. If this is the first time bringing in a prefab weapon, move its WeaponsSystem folder into ServerScriptService to serve as the unified system folder for all prefab weapons in the game.

System folder structure

The WeaponsSystem folder is a unified folder that contains assets, configurations, and scripts that power all prefab weapons in the game. If located in ServerScriptService, it overrides any equivalent WeaponsSystem folders that may reside within individual weapons.

Within the WeaponsSystem folder, different aspects are controlled by the following ModuleScripts:

AspectHandled primarily within...
Weapons functionality
  • WeaponsSystem
  • Libraries/BaseWeapon
  • WeaponTypes/BulletWeapon
  • WeaponTypes/BowWeapon
Shoulder camera
  • Libraries/ShoulderCamera
Weapons GUI
  • Libraries/WeaponsGui
  • Libraries/DirectionalIndicatorGuiManager
  • Libraries/DamageBillboardHandler

Weapon structure

Prefab weapons are tools and are named as they will appear in the player's backpack. Each weapon is structured with a similar hierarchy.

Weapon type

The WeaponType StringValue corresponds with the ModuleScript for the weapon in the WeaponsSystem/WeaponTypes folder. The two base values are BulletWeapon and BowWeapon.

Weapon model

Each weapon contains a Model made up of one or more BaseParts to form the physical weapon. One of these should be set as the model's PrimaryPart.

The model also includes the following important descendants which may be parented to one of the model's BaseParts:

  • TipAttachmentAttachment whose position on the parent BasePart determines where bullets/projectiles come out.
  • HandleAttachmentAttachment whose position on the parent BasePart determines where the tool's handle is welded.
  • Fired
    optional
    Sound that plays when the weapon is fired.
  • Reload
    optional
    Sound that plays when the weapon is reloaded.
  • Additional descendants for any specialized options.

Configuration

The Configuration folder contains specific "value" types for weapon behavior. Beyond the defaults, you can add additional configuration items for specialized options when applicable.

As follows are the base configurations and their default values:

ItemDescriptionDefault
AimTrackName of the aim animation track in Assets/Animations of the system folder.RifleAim
AimZoomTrackName of the aim zooming animation track in Assets/Animations of the system folder.RifleAimDownSights
AmmoCapacityNumber of shots in each "ammo clip" before player must reload. Note that ammo is unlimited and this does not specify how much ammo a player is carrying.30
BulletSpeedSpeed that bullets/projectiles travel when shot. Setting this to a very high value like 20000 simulates raycasting weapons like laser guns.1000
BurstShotCooldownTime between each shot in a burst; only matters if you set FireMode to Burst.Value of ShotCooldown
FiredPlaybackSpeedRangeAmount that the pitch can vary for the Fired sound of the weapon. Set this to 0 to always play it at the same pitch.0.1
FireModeChoose from either Semiautomatic (one shot per click/tap), Automatic (continuous fire), or Burst (burst of shots equal to NumBurstShots on each click/tap).Semiautomatic
FullDamageDistanceMaximum distance that shots will do full damage. Anything hit beyond this distance will receive less and less damage as the distance nears ZeroDamageDistance.1000
GravityFactorAmount that gravity should influence each bullet/projectile. For example, this value for the Crossbow is 1 because arrows arc during flight, but this value for the Rocket Launcher is 0 because propelled rockets travel straight.0
HasScopeSet to true if you want to use the scope that's specified in Weapons GUI.false
HitDamageAmount of damage each direct hit does.10
MaxDistanceMaximum distance bullets/projectiles travel before disappearing.2000
MaxSpreadMaximum amount of spread for the weapon.Value of MinSpread
MinSpreadMinimum amount of spread for the weapon.0
NumBurstShotsNumber of shots per click/burst; only matters if you set FireMode to Burst.3
NumProjectilesNumber of bullets/projectiles that will fire at the same time when you click/tap once. This is useful for weapons like the Shotgun that fires multiple bullets at same time. Note that one shot will always use exactly one ammo regardless of this value.1
RecoilDecayDecay multiplier for recoil; essentially the rate at which recoil diminishes after shooting.0.825
RecoilDelayTimeWaiting time after shooting/clicking before recoil is added to camera.0.07
RecoilMaxMaximum recoil added for each shot.0.5
RecoilMinMinimum recoil added for each shot.0.05
ReloadAnimationName of the reload animation track in Assets/Animations of the system folder.RifleReload
ShotCooldownMinimum waiting time between clicks. For weapons with FireMode of Automatic, this is also the time between shots while pressing the fire button or holding click.0.1
StartupTimeLength of time after equipping the weapon before the player can shoot. This prevents players from firing a single shot from multiple different weapons in quick succession.0.2
TotalRecoilMaxTotal maximum accumulated recoil. Weapon's current recoil will never exceed this value.2
ZeroDamageDistanceAnything hit at or beyond this distance will receive no damage.10000

Specialized options

You can add/modify the following options for any weapon. These customizations require modifying either the weapon's Model, the weapon's Configuration, or both. Some configurations are dependent on others, such as muzzle particles which require the necessary children for projectile/hit effects and sounds.

Bolt animations and sounds

A weapon's bolt is the part that moves back and forth each time it's fired.

  • Descendants of the weapon's weapon model:

    • BoltBasePart that moves when the weapon is fired.
    • BoltMotorMotor6D used to animate the bolt. Make sure to set the motor's Part0 to the weapon model's PrimaryPart and Part1 to the Bolt part.
    • BoltMotorStartAttachment whose position on the parent BasePart determines where the bolt is when it's at rest.
    • BoltMotorTargetAttachment whose position on the parent BasePart determines where the bolt animates to when shooting.
    • BoltOpenSound
      optional
      Sound that plays when the bolt opens.
    • BoltCloseSound
      optional
      Sound that plays when the bolt closes.
  • Descendants of the weapon's configuration folder:

    • ActionOpenTime
      optional
      — Time it takes for the bolt to animate to open position. Default is 0.025.
    • ActionCloseTime
      optional
      — Time it takes for the bolt to animate to closed position. Default is 0.075.

Ejected bullet casings

Weapons can include physical bullet casings that eject upon firing and fall to the ground.

  • Descendants of the weapon's weapon model:

    • CasingEjectPointAttachment whose position on the parent BasePart determines where you want bullet casings to pop out. Note that its orientation determines the direction that casings pop out.
  • Descendants of the weapon's configuration folder:

    • CasingEffect — Name of casing BasePart in Assets/Effects/Casings of the system folder.
    • CasingEjectSpeedMin
      optional
      — Minimum eject speed of casings. Default is 15.
    • CasingEjectSpeedMax
      optional
      — Maximum eject speed of casings. Default is 18.
  • Child of the casing BasePart in Assets/Effects/Casings of the system folder:

    • CasingHitSound
      optional
      Sound that plays when casings hit the ground.

Projectile/hit effects and sounds

You can configure physical projectiles for any weapon, along with Sounds, Beams, and ParticleEmitters for hit effects and other special effects.

  • Descendants of the weapon's configuration folder:

    • ShotEffect — Name of a shot effect stored within Assets/Effects/Shots of the system folder.
    • ShouldMovePart
      optional
      — Set to true if the weapon's ShotEffect should move with the projectile or false if not. You should only set this to true if there's a visible object that moves with each shot, such as an arrow or rocket. Default is false.
    • BeamFadeTime
      optional
      — Time it takes for Beam0 or Beam1 (see below) to fade after the bullet/projectile hits something. By default, no manual fade will be applied by code. Default is 0.
    • BeamWidth0
      optional
      — Thickness of Beam0 or Beam1 at Attachment0 (see below). Default is 1.5.
    • BeamWidth1
      optional
      — Thickness of Beam0 or Beam1 at Attachment1 (see below). Default is 1.8.
    • NumHitParticles
      optional
      — Number of particles the HitParticles (see below) emitter will emit. Default is 3.
    • HitParticlesUsePartColor
      optional
      — Set to true if you want the hit particles to be the color of the hit surface; false if you want hit particles to not change color. Default is true.
  • Descendants of the specified ShotEffect noted in the above section:

    • Flying
      optional
      Sound that plays while the bullet/projectile is traveling.
    • Beam0
      optional
      — First slot for a trailing Beam behind the bullet/projectile. Don't forget to set Attachment0 and Attachment1.
    • Beam1
      optional
      — Second slot for a trailing Beam behind the bullet/projectile. Don't forget to set Attachment0 and Attachment1.
    • Attachment0
      optional
      Attachment whose position on the parent BasePart determines the back of trailing beams; make sure to set Beam.Attachment0 on both Beam0 and Beam1 to this.
    • Attachment1
      optional
      Attachment whose position on the parent BasePart determines the front of trailing beams; make sure to set Beam.Attachment1 on both Beam0 and Beam1 to this.
    • TrailParticles
      optional
      ParticleEmitter parented as a direct child of Attachment0; this will emit while the bullet/projectile is traveling.
    • LeadingParticles
      optional
      ParticleEmitter parented as a direct child of Attachment1; this will emit while the bullet/projectile is traveling.
    • HitEffect
      optional
      Attachment whose position will be set to Beam.Attachment1 of Beam0 when the bullet/projectile hits. You must specify Beam0 and its attachments for this to work properly.
    • HitSound
      optional
      Sound parented as a direct child of HitEffect; plays when the bullet/projectile hits.
    • HitParticles
      optional
      Sound parented as a direct child of HitEffect; emits when the bullet/projectile hits.
    • Mesh
      optional
      SpecialMesh that you want to appear as a physical projectile. Make sure you set ShouldMovePart in the weapon's configuration to true if you have a visible object here.

Muzzle particles

This option emits particles from the specified ParticleEmitter at the weapon's TipAttachment Attachment when it's fired. Descendants of the weapon's configuration folder include:

  • ShotEffect — Name of a shot effect stored within WeaponsSystem/Assets/Effects/Shots. As a child of this shot effect, include a ParticleEmitter asset named MuzzleParticles.
  • NumMuzzleParticles
    optional
    — Number of muzzle particles that will be emitted. Default is 50.

Muzzle flashes

This option creates a Beam flash effect when the weapon is fired.

  • Descendants of the weapon's weapon model:

    • MuzzleFlash0Attachment used to specify one side of muzzle flash. Position doesn't matter.
    • MuzzleFlash1Attachment used to specify opposite side of muzzle flash. Position doesn't matter.
    • MuzzleFlashBeam for the muzzle flash effect. Make sure to set the beam's Attachment0 to MuzzleFlash0 and Attachment1 to MuzzleFlash1.
  • Descendants of the weapon's configuration folder:

    • MuzzleFlashTime
      optional
      — Length of time muzzle flash will show for. Default is 0.03.
    • MuzzleFlashRotation0
      optional
      — Minimum rotation of muzzle flash. Default is -math.pi.
    • MuzzleFlashRotation1
      optional
      — Maximum rotation of muzzle flash. Default is math.pi.
    • MuzzleFlashSize0
      optional
      — Minimum size of muzzle flash. Default is 1.
    • MuzzleFlashSize1
      optional
      — Maximum size of muzzle flash. Default is 1.

Particle trails

This option creates a trail of varying length from the weapon to the projectile impact point. Descendants of the weapon's configuration folder include:

  • TrailLength
    optional
    — Length of trail behind bullet/projectile; default is nil which means the trail length will instead be calculated using TrailLengthFactor.
  • TrailLengthFactor
    optional
    — If specified, the trail length will be set to this value multiplied by the distance the bullet/projectile traveled in the last frame; default is 1. Note that this will be overridden if you include TrailLength.
  • ShowEntireTrailUntilHit
    optional
    — Set to true to render the trail from the weapon tip all the way to wherever the projectile is; this will override both TrailLength and TrailLengthFactor and the trail will only disappear once the projectile hits something. Set to false to use one of the above two options to calculate trail length. Default is false.

Hit marks

This visual addition appears on the surface where projectiles hit and is useful for arrows, bullet holes, scorch marks, etc. Descendants of the weapon's configuration folder include:

  • HitMarkEffect
    optional
    — Name of a Part/MeshPart/SpecialMesh hit mark effect stored within WeaponsSystem/Assets/Effects/HitMarks. Default is BulletHole.
  • AlignHitMarkToNormal
    optional
    — Set to true if the hit mark should always align flat against the surface like a bullet hole, or false if the hit mark should appear stuck in the surface from the direction the projectile came from (like an arrow). Default is true.

As noted by HitMarkEffect above, you can add a part/mesh within WeaponsSystem/Assets/Effects/HitMarks to appear as a physical projectile. For example, including an arrow MeshPart and setting AlignHitMarkToNormal to false will make the arrow stick out of the surface from the direction you shot it. This Part/MeshPart/SpecialMesh may contain the following descendants:

  • Glow
    optional
    Decal which appears on the hit surface fully opaque, then rapidly gets more transparent, like a glowing effect on the surface that fades quickly. Useful for things like showing a glowing red mark where explosives hit.
  • BulletHole
    optional
    Decal which appears on the hit surface fully opaque and, after 4 seconds, fades to transparent over 1 second.
  • ImpactBillboard
    optional
    BillboardGui which displays at the hit surface, always facing towards the camera.
  • Impact
    optional
    ImageLabel as a direct child of ImpactBillboard; this begins fully opaque, grows to the full size of the ImpactBillboard over 0.1 seconds, then shrinks to half its size and fades to full transparency over 0.1 seconds.

Exploding projectiles

Projectiles can include an Explosion object to damage player characters in an area around the impact point. Descendants of the weapon's configuration folder include:

  • ExplodeOnImpact
    optional
    — Set to true if you want bullets/projectiles for the weapon to explode on impact, false otherwise. Default is false.
  • BlastRadius
    optional
    BlastRadius of explosion; default is 8.
  • BlastPressure
    optional
    BlastPressure of explosion; default is 10000.
  • BlastDamage
    optional
    — Damage dealt to things in the center of the explosion. Note that the explosion does less damage the farther away hit objects are from the center of the explosion. Default is 100.

Charging weapon

A charging weapon like the Railgun must be charged up between shots before it can fire again.

  • Descendants of the weapon's weapon model:

    • Charging
      optional
      Sound which plays while the weapon is charging.
    • Discharging
      optional
      Sound which plays while the weapon is discharging, for example if you charge the weapon just partially and release the shoot button.
    • ChargeComplete
      optional
      Sound which plays when the weapon has reached full charge.
    • DischargeComplete
      optional
      Sound which plays when the weapon has completely discharged.
    • ChargeGlow
      optional
      BasePart which will get less transparent as the weapon charges up, such that it will be fully opaque at 100% charge.
    • ChargeCompleteParticles
      optional
      ParticleEmitter which emits when the weapon has finished charging. This emitter can be a child of any model BasePart or a child of an Attachment within the BasePart.
    • DischargeCompleteParticles
      optional
      ParticleEmitter which emits when the weapon has completely discharged. This emitter can be a child of any model BasePart or a child of an Attachment within the BasePart.
    • ChargingParticles
      optional
      ParticleEmitter which emits while the weapon is charging. You can include multiple emitters of this name and each will emit while charging. This emitter can be a child of any model BasePart or a child of an Attachment within the BasePart.
  • Descendants of the weapon's configuration folder:

    • ChargeRate — Rate at which the weapon will charge. This value must be specified to indicate that the weapon uses charging.
    • DischargeRate
      optional
      — Rate at which the weapon will discharge. Default is 0 which means the weapon will not discharge at all.
    • ChargePassively
      optional
      — Set to true if you want the weapon to passively charge so it will shoot instantly when you click, or false if you want to click/touch to charge the weapon and have it fire once full charge is reached. Default is false.
    • ChargingParticlesRatePerCharge
      optional
      — Number of particles that will emit out of all ChargingParticles emitters multiplied by the current charge of the weapon. Default is 20, meaning that if the weapon charge is at 10%, each ChargingParticles emitter will emit 2 particles (20*0.1), and if the weapon charge is at 90%, each emitter will emit 18 particles (20*0.9).
    • FireDischarge
      optional
      — Amount of charge the weapon will lose after firing a fully charged shot. Default is 1.
    • NumChargeCompleteParticles
      optional
      — Number of particles the ChargeCompleteParticles emitter will emit once the weapon is fully charged. Default is 25.
    • NumDischargeCompleteParticles
      optional
      — Number of particles the DischargeCompleteParticles emitter will emit when the weapon is completely discharged. Default is 25.

Bow weapon

A bow weapon like the Crossbow can include a realistic string and arms construction, as well as a visual arrow nocked to the string.

In addition to adding model descendants, you need to apply the following:

  • Make the weapon into a charging weapon. For example, add the required ChargeRate within the weapon's Configuration that specifies how fast the string is drawn. Additionally, consider adding optional descendants to the weapon's Model such as a Charging sound for the string/arms being pulled back.
  • Set the WeaponType to BowWeapon as indicated in weapon structure.

Descendants of the weapon's weapon model include:

  • LeftString
    optional
    Beam for the visual left half of the string.
  • RightString
    optional
    Beam for the visual right half of the string.
  • Arrow
    optional
    BasePart for the arrow that appears when the bow is fully drawn. Note that this is only for visual appearance on the bow (the actual fired arrow will be a ShotEffect as outlined in projectile/hit effects and sounds).
  • String1Attachment for the center point of the string.
  • StringLooseAttachment point where String1 should be when the bow is at rest.
  • StringTightAttachment point where String1 should be when the bow is fully drawn.
  • Arms
    optional
    Part that just serves as an internal indicator that the bow arms will be animated. This may contain the following direct children:
    • LeftString0Attachment point where the left side of the string is attached to the bow.
    • RightString0Attachment point where the right side of the string is attached to the bow.
    • LeftLooseAttachment point where LeftString0 should be when the bow is at rest.
    • RightLooseAttachment point where RightString0 should be when the bow is at rest.
    • LeftTightAttachment point where LeftString0 should be when the bow is fully drawn.
    • RightTightAttachment point where RightString0 should be when the bow is fully drawn.
    • MeshSpecialMesh part of the bow that will actually bend when the bow is drawn. Note that you must specify the following four Vector3Value objects to make this animate.

Weapons GUI

The core weapons system interfaces with this system to update the GUI based on things like spread of the gun, indicators for when you get hit or hit others, etc.

The WeaponsSystemGui is a ScreenGui object in WeaponsSystem/Assets that is parented to PlayerGui when the game starts. WeaponSystemGui has four descendants as follows:

  • ScalingElements is a Folder with the following descendants:

  • LargeTouchscreen is a Frame containing AimButton and FireButton buttons that display on large touchscreens.

  • Scope is a Frame that contains the ScopeImage image label which shows up when zooming on a weapon with HasScope enabled (see weapon structure).

  • SmallTouchscreen is a Frame containing AimButton and FireButton buttons that display on small touchscreens.

Directional indicators

Directional indicators are used to show the direction of something around the player's crosshair. For example, if someone shoots you, a red semi-circle can show up around your crosshair in the direction the shot came from. Other examples include indicators to show the direction of footsteps, indirect gunfire, or even environmental objects such as chests.

To create a new indicator, add a new Frame in WeaponsSystemGui/ScalingElements/DirectionalIndicators with the following structure:

  • Indicator (Frame)
    • ImageLabel for the directional indicator. Tweaking the rotation of the image in Studio may be required unless you upload the image so that it's facing down and there's little or no blank space around it. This image label must also contain its own UIAspectRatioConstraint.
    • Configuration containing optional properties to adjust:
      • DistanceLevelFromCenter
        optional
        — Number of distance levels from the center of the screen (each distance level is about 0.03 screen scale). Default is 6.
      • FadeTime
        optional
        — Indicator fade time following its activation and the TimeBeforeFade time. Default is 1.
      • Name
        optional
        — Name of the directional indicator as you want to reference it in code. Default is the name of the indicator's top-level Frame.
      • TimeBeforeFade
        optional
        — Number of seconds that the indicator will appear for before fading. Default is 1.
      • TransparencyBeforeFade
        optional
        — Transparency of the indicator before it starts to fade. Default is 0.
      • WidthLevel
        optional
        — Number of width levels from center (each width level is about 0.03 screen scale). Default is the value of DistanceLevelFromCenter.

Once created, you can activate an indicator via the following command inside WeaponsSystem/Libraries/WeaponsGui where indicatorName is the string name of the indicator to activate and worldPos is the world position where the directional indicator should point:


self.DirectionalIndicatorGuiManager:ActivateDirectionalIndicator(indicatorName, worldPos)

Damage billboard

The damage billboard is used to show numbers above a character's head when they are damaged. These will only show up for the player that damaged another player's character, not for spectating players.

Damage billboards are handled in WeaponsSystem/Libraries/DamageBillboardHandler and can be activated from any client-side code as follows, where damage is the amount of damage done and adornmentPart is the part on which to adorn the billboard, such as the victim's head:


DamageBillboardHandler:ShowDamageBillboard(damage, adornmentPart)

Shoulder camera

The shoulder camera is a third-person camera that looks over the player character's right shoulder. To customize the shoulder camera, modify the variables under the -- Configuration parameters (constants) comment in the ShoulderCamera.new() function of WeaponsSystem/Libraries/ShoulderCamera. You can modify things such as field of view, offset from the character, walk speed while sprinting or zooming, etc.

Sprint and zoom

By default, the weapons system adds "sprint" capability so players can sprint by holding the Shift key, pushing fully up on the dynamic thumbstick (mobile), or pushing fully up on the left joystick (gamepad). If you want to disable sprinting, set the value of SprintEnabled within WeaponsSystem/Configuration to false.

The system also reduces player speed while they're aiming/zooming, but you can disable this behavior by setting the value of SlowZoomWalkEnabled within WeaponsSystem/Configuration to false.

©2026 Roblox Corporation. Roblox, the Roblox logo and Powering Imagination are among our registered and unregistered trademarks in the U.S. and other countries.