# GASP Integration

## Character meshes

{% hint style="info" %}
**Note:** Compatible with GASP **5.4**, **5.5**, **5.6**. Add the latest Tactical Shooter Pack to your GASP project before starting.
{% endhint %}

First, we need to create a base for our integration. Duplicate the **BP\_TacticalShooterCharacter** (<mark style="background-color:purple;">**KINEMATION/TacticalShooterPack/Blueprints**</mark>):

<figure><img src="/files/11pgqsetFPfBryn1jazM" alt="" width="102"><figcaption><p>New blueprint.</p></figcaption></figure>

This will be our main player blueprint. Open it up, go to **Class Settings** and inherit it from the **CBP\_SandboxCharacter**:

<figure><img src="/files/bN5CMmO44j2CPpjHb5ni" alt=""><figcaption><p>Change the parent class.</p></figcaption></figure>

Next, select the "Mesh" and set its animation blueprint to **ABP\_SandboxCharacter** and skeletal mesh to **SKM\_UEFN\_Mannequin**:

<figure><img src="/files/HLg6aOArNXHGfGNXOxTK" alt="" width="244"><figcaption><p>Default mesh component.</p></figcaption></figure>

<figure><img src="/files/awsAJOsUuKAFFgfFB2Uk" alt="" width="434"><figcaption><p>Properties for motion matching.</p></figcaption></figure>

{% hint style="info" %}
**Note**: The "Mesh" skeletal component will generate a motion-matching pose (full-body movement), which will be blended with our tactical animations.
{% endhint %}

Set **Visible** to **false** and **Visibility Based Anim Tick Option** to **Always Tick Pose and Refresh Bones**:

<figure><img src="/files/0tYvMH9SSBj4tqN0UfTH" alt="" width="238"><figcaption><p>Keep this mesh hidden.</p></figcaption></figure>

<figure><img src="/files/BkCmJWX77ElMUlZaWBfV" alt="" width="434"><figcaption><p>Always update animation, even if mesh is hidden.</p></figcaption></figure>

Now we need to add a skeletal mesh for our character model. Let's call it "Player" and parent the **Camera** component to it:

<figure><img src="/files/5fixAFGjRAvXTEri3C6D" alt="" width="415"><figcaption><p>Camera is a first-person camera component.</p></figcaption></figure>

In the **Camera** settings, set its parent socket to `FPCamera` and reset its transform:

<figure><img src="/files/G5Qr3wmd2IykH85fnO8l" alt="" width="434"><figcaption><p>Camera settings.</p></figcaption></figure>

Find the `GetPlayerMesh` interface function and return the new "Player" skeletal mesh component:

<figure><img src="/files/BxbVl9xYzt9xJKbhqOgP" alt="" width="277"><figcaption><p>Open up this function.</p></figcaption></figure>

<figure><img src="/files/k9dVqdSHlLRJ7HmVoh2T" alt="" width="392"><figcaption><p>Return the "Player", not the default "Mesh".</p></figcaption></figure>

{% hint style="success" %}
**Tip**: This interface function is used by weapons and animation blueprints to play animations, so make sure to provide the correct reference here.
{% endhint %}

## Cameras

The second step is to properly set up cameras in our player blueprint.

If you use GASP 5.5 or 5.6, make sure to use this code snippet to disable other cameras:

<figure><img src="/files/maQY3hQk4zFMUnKhvbwS" alt=""><figcaption><p>Place this in BeginPlay.</p></figcaption></figure>

The **Camera** attached to **Player** is the main first‑person camera. Deactivate all other cameras that may be active at game start.

If you are on 5.4, then simply set all other cameras' `Auto Activate` property to **false**:

<figure><img src="/files/LhGkHOMtQKsB8dmKBBtB" alt="" width="205"><figcaption><p>Disable other cameras.</p></figcaption></figure>

## Inputs

The next step is to properly update GASP inputs at runtime. Open the `Update Player Movement` function (it's called on **Tick**):

<figure><img src="/files/1ddSCH7gnVcBfIW5kOBO" alt="" width="483"><figcaption><p>Update movement function.</p></figcaption></figure>

Find some place at the end of the function, and set the value of the Gait property based on Movement State:

<figure><img src="/files/53QoiphVkf5wvW2w7Y4D" alt="" width="377"><figcaption><p>Updating current Gait.</p></figcaption></figure>

{% hint style="success" %}
**Note**: `Gait` is from **GASP**, and `Movement State` is a **Tactical Shooter Pack** property.
{% endhint %}

Then, we need to update `bWantsToSprint`, `bWantsToWalk`, `bWantsToAim` and `bWantsToStrafe` properties.

{% hint style="info" %}
**Note:** The setup differs between **5.4** and **5.5/5.6**; refer to the images below.
{% endhint %}

<figure><img src="/files/y4XRAirYu8xYXnNj01Tp" alt=""><figcaption><p>5.4 version also requires the Update Rotation function to be called.</p></figcaption></figure>

<figure><img src="/files/a8q5vmu2KGNyoRO55qvu" alt=""><figcaption><p>5.4/5.6 version.</p></figcaption></figure>

## Animation blueprint

Now we need to create an animation blueprint (ABP) that will combine motion-matching pose and animations from the **Tactical Shooter Pack**.

Create a new Animation Blueprint using the **UE5 Manny** skeleton from the pack:

<figure><img src="/files/kaEZTKbKXlE1uTj3ttdU" alt="" width="563"><figcaption><p>Creating a new animation blueprint.</p></figcaption></figure>

Go to the Event Graph and use this snippet for initialization:

<figure><img src="/files/4rP0UelaBgKZdoibuDe8" alt=""><figcaption><p>Simple initialization logic.</p></figcaption></figure>

{% hint style="success" %}
**Tip***:* Obtain a reference to your player Blueprint here.
{% endhint %}

In the **Anim Graph**, add a **Retarget Pose From Mesh** node. Set the `Retarget From` to **Custom Skeletal Mesh Component**, and `IK Retargeter Asset` to **RTG\_UEFN\_to\_UE5\_Mannequin**:

<figure><img src="/files/EMcoXAu4jyNkWe4BCH7Q" alt="" width="556"><figcaption><p>Retargeting settings.</p></figcaption></figure>

After that, bind the `Source Mesh Component` using the "Mesh" property from the player blueprint.

<figure><img src="/files/VBbzJ4h8HvARthEdFQ2i" alt="" width="265"><figcaption><p>Bind the "Mesh" here.</p></figcaption></figure>

Next, add the ABP\_TacticalShooter\_UE5 linked anim instance and blend it with the retargeted pose:

<figure><img src="/files/WmmOtJn7k1i1uQH6xdhH" alt="" width="563"><figcaption><p>Simple blending setup.</p></figcaption></figure>

<figure><img src="/files/xg9W9vbZW1tTJZSYgLv3" alt="" width="563"><figcaption><p>Override the upper body.</p></figcaption></figure>

{% hint style="info" %}
**Tip**: Feed the retargeted pose into **Base Pose**, and Tactical Shooter animations into **Blend Pose 0**.
{% endhint %}

## Parkour adjustments

To properly blend parkour animations, we need to adjust our layering. First, create 2 cached poses:

<figure><img src="/files/H7QoC3bNEHFk0uGlYZp6" alt="" width="449"><figcaption><p>Cached poses.</p></figcaption></figure>

**UpperBody** carries Tactical Shooter animations; **MotionMatchingPose** carries full‑body motion.

Next, add a new **Layered Blend Per Bone** node:

<figure><img src="/files/vIofnoH1qhZa3gdpQRUk" alt=""><figcaption><p>This pose will be used when climbing.</p></figcaption></figure>

Add a **Blend by Bool** node and plug the layered result into **True:**

<figure><img src="/files/myKsp3uVzPTdmLOa1YsH" alt="" width="524"><figcaption><p>Use the "Upper Body" as a "False Pose".</p></figcaption></figure>

This will blend between parkour and normal poses using the `DoingTraversalAction` boolean from our character blueprint.

Finally, blend the result with the "MotionMatchingPose":

<figure><img src="/files/YYNN3IudvpYPyBVRq81q" alt=""><figcaption><p>Final blending step.</p></figcaption></figure>


---

# 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/tactical-shooter-pack-unreal/tutorial/gasp-integration.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.
