> For the complete documentation index, see [llms.txt](https://kinemation.gitbook.io/fps-animation-pack-unreal/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://kinemation.gitbook.io/fps-animation-pack-unreal/gameplay/weapon-blueprint.md).

# 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.
