# Weapon Blueprint

## Overview

Every weapon consists of two important parts:

1. **Weapon Settings** data asset: contains data (e.g. animations, weapon mesh).
2. **Weapon Base** blueprint: executes gameplay logic (e.g. firing, reloading).

Here is how the weapon spawning logic works:

1. Iterate over the TArray of **Weapon Settings** provided by the **Character Settings**.
2. Instatiate a **Weapon Blueprint** specified in the **Weapon Settings**.
3. Update the **Weapon Settings** variable of the newly instantiated weapon.

{% hint style="success" %}
**Note**: weapon blueprints don't contain weapon models. Instead, *WeaponMesh* from *BP\_Viewmodel* is updated with the active weapon **SkeletalMesh**.
{% endhint %}

## Weapon Settings

This data asset consists of 2 major categories:

* **Animation**: properties related to the character and weapon animation.
* **Gameplay**: properties related to the weapon features (e.g. fire rate, ammo, etc.).

<figure><img src="/files/IwskeQh8JmuGSfyJ0lGv" alt="" width="443"><figcaption><p>Animation group.</p></figcaption></figure>

1. **UE4** and **UE5** represent [Types](/fps-animation-pack-unreal/gameplay/types.md#viewmodel-settings) for different Mannequin meshes.
2. **Weapon Anims**: weapon animations [Types](/fps-animation-pack-unreal/gameplay/types.md#viewmodel-animations).
3. **Weapon Mesh**: *Skeletal Mesh* of this weapon.
4. **Weapon Anim Instance**: weapon animation blueprint.
5. **Ads Blend**: blend between absolute and additive aiming.
6. **Recoil Settings**: [recoil animation settings](https://kinemation.gitbook.io/pras-documentation/basics/recoil-settings).
7. **Sprint Trigger Discipline**: whether to use trigger safety when sprinting.
8. **Fire Trigger Weight**: weight of the finger rotation when firing.

Now let's break down the **Gameplay** category:

<figure><img src="/files/skNeYHmiQA1OESR0qcgs" alt="" width="434"><figcaption><p>Gameplay properties.</p></figcaption></figure>

1. **Ammo**: ammo capacity of this weapon.
2. **Ammo Refil Time Scale**: ammo will be refilled when the reload ends, but this time can be adjusted with this multiplier.
3. **Fire Mode**: supported fire modes.
4. **Fire Rate**: fire rate in rounds per minute.
5. **Weapon Class**: Weapon Base blueprint class.
6. **Recoil Shake**: camera shake asset.
7. **Fire Sound**: this sound cue will be played when firing.

Now let's learn more about the weapon blueprints.

## Weapon Blueprint

Weapons must have a runtime entity to run its logic like reloads or firing. This logic is implemented in blueprints derived from the **Weapon Base** class:

<figure><img src="/files/8q0dsNELfOAgEOjrx565" alt="" width="496"><figcaption><p>The plugin uses 4 main weapon types.</p></figcaption></figure>

These blueprints use different implementations for reloading animations, other gameplay features are the same.

### Equipping

When a weapon is equipped, it binds its functions to the **BP\_Viewmodel** Dispatchers. So, when an input is triggered, a weapon function will be invoked:

<figure><img src="/files/CJuG242YKNXOI21l7CxF" alt="" width="500"><figcaption><p>Reloading function binding.</p></figcaption></figure>

{% hint style="danger" %}
**Note**: it is important to clear bindings when a weapon is unequipped to prevent functions getting invoked on unequipped guns.
{% endhint %}

### Reloading

When a reloading function is called, the Weapon Base will play a reloading animation based on the left ammunition:

1. If there is no ammo, an empty reload will be played.
2. If there is some ammo left, a tactical reload will be played.

Some weapons have exceptions, however. For example, manually reloaded **KXG12** and **Kar98k** follow this algorith&#x6D;**:**

1. Play reload start animation.
2. Play reload loop based on how many cartridges need to be inserted.
3. Play reload stop to finalize the reload.

**MGX5** is a machine gun, it has 3 reloading animations:

1. Empty reload.
2. Tactical reload.
3. Less reload, when we have some guntape cartridges left.

All other weapons use general reloading logic.

***

Now that we are familiar with the gameplay logic, it is time to understand how animations work in the project.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://kinemation.gitbook.io/fps-animation-pack-unreal/gameplay/weapon-blueprint.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
