# 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="https://2660568893-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FpgcxPqI5xJzfp2msnT5S%2Fuploads%2FJ0INtZexog2gDEkJnbyP%2Fimage.png?alt=media&#x26;token=08243191-e8db-4241-8b78-43b5cba2cb95" alt="" width="443"><figcaption><p>Animation group.</p></figcaption></figure>

1. **UE4** and **UE5** represent [#viewmodel-settings](https://kinemation.gitbook.io/fps-animation-pack-unreal/types#viewmodel-settings "mention") for different Mannequin meshes.
2. **Weapon Anims**: weapon animations [#viewmodel-animations](https://kinemation.gitbook.io/fps-animation-pack-unreal/types#viewmodel-animations "mention").
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="https://2660568893-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FpgcxPqI5xJzfp2msnT5S%2Fuploads%2FdDK4CDodQA92mBJVrVMX%2Fimage.png?alt=media&#x26;token=7d06789a-b628-4d40-90a5-53d6777f31ea" 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="https://2660568893-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FpgcxPqI5xJzfp2msnT5S%2Fuploads%2FQXlnO6XStPZPBrPlgRwU%2Fimage.png?alt=media&#x26;token=417206b4-27ce-41c0-8356-16b29ce4ae75" 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="https://2660568893-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FpgcxPqI5xJzfp2msnT5S%2Fuploads%2F0Tt84G1Pn8bBhzQohv3F%2Fimage.png?alt=media&#x26;token=519ad09e-1215-482c-bc46-ab6337e41bab" 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.
