> ## Documentation Index
> Fetch the complete documentation index at: https://docs.kinemation.xyz/llms.txt
> Use this file to discover all available pages before exploring further.

# 🔌GASP Integration

> This tutorial shows how to integrate the Tactical Shooter Pack with GASP.

## Character meshes

<Info>
  **Note:** Compatible with GASP **5.4**, **5.5**, **5.6**. Add the latest Tactical Shooter Pack to your GASP project before starting.
</Info>

First, we need to create a base for our integration. Duplicate the **BP\_TacticalShooterCharacter** (**KINEMATION/TacticalShooterPack/Blueprints**):

<Frame caption={"New blueprint."}>
  <img src="https://mintcdn.com/kinemation/2P0DGfZe1PbAUTxl/images/tactical-shooter-pack/unreal/d5990b9dfcb818fe9e2e.png?fit=max&auto=format&n=2P0DGfZe1PbAUTxl&q=85&s=255a4f370524b9fa281fccf93463fae1" alt="" width={102} data-path="images/tactical-shooter-pack/unreal/d5990b9dfcb818fe9e2e.png" />
</Frame>

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

<Frame caption={"Change the parent class."}>
  <img src="https://mintcdn.com/kinemation/2P0DGfZe1PbAUTxl/images/tactical-shooter-pack/unreal/805c52c12532c9a20d4c.png?fit=max&auto=format&n=2P0DGfZe1PbAUTxl&q=85&s=7cc8b97f33524c60d65436d09a0f1e61" alt="" width={1236} data-path="images/tactical-shooter-pack/unreal/805c52c12532c9a20d4c.png" />
</Frame>

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

<Frame caption={"Default mesh component."}>
  <img src="https://mintcdn.com/kinemation/gs-VS6eri6gRdFbg/images/tactical-shooter-pack/unreal/ff3b66d263e22ab07019.png?fit=max&auto=format&n=gs-VS6eri6gRdFbg&q=85&s=84a08718d81903607533fbdb59b53445" alt="" width={244} data-path="images/tactical-shooter-pack/unreal/ff3b66d263e22ab07019.png" />
</Frame>

<Frame caption={"Properties for motion matching."}>
  <img src="https://mintcdn.com/kinemation/-AzWoLR_QWINVM-e/images/tactical-shooter-pack/unreal/17e93d754764dfe92053.png?fit=max&auto=format&n=-AzWoLR_QWINVM-e&q=85&s=ce23fd0dbbe949ef4ba00cded0176a35" alt="" width={434} data-path="images/tactical-shooter-pack/unreal/17e93d754764dfe92053.png" />
</Frame>

<Info>
  **Note**: The "Mesh" skeletal component will generate a motion-matching pose (full-body movement), which will be blended with our tactical animations.
</Info>

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

<Frame caption={"Keep this mesh hidden."}>
  <img src="https://mintcdn.com/kinemation/gs-VS6eri6gRdFbg/images/tactical-shooter-pack/unreal/fe8ece92a32f55fb07d8.png?fit=max&auto=format&n=gs-VS6eri6gRdFbg&q=85&s=a6328d0cf823896d4fe17f1bf5fa1bb1" alt="" width={238} data-path="images/tactical-shooter-pack/unreal/fe8ece92a32f55fb07d8.png" />
</Frame>

<Frame caption={"Always update animation, even if mesh is hidden."}>
  <img src="https://mintcdn.com/kinemation/2P0DGfZe1PbAUTxl/images/tactical-shooter-pack/unreal/3ff42bbb91d8bf3a681e.png?fit=max&auto=format&n=2P0DGfZe1PbAUTxl&q=85&s=7ff661ba3c1fc75376a359a70dff9f46" alt="" width={434} data-path="images/tactical-shooter-pack/unreal/3ff42bbb91d8bf3a681e.png" />
</Frame>

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

<Frame caption={"Camera is a first-person camera component."}>
  <img src="https://mintcdn.com/kinemation/-AzWoLR_QWINVM-e/images/tactical-shooter-pack/unreal/0ffa051e1f05a6a49a42.png?fit=max&auto=format&n=-AzWoLR_QWINVM-e&q=85&s=dc6725a6406b80b0275a0f2c70a52724" alt="" width={415} data-path="images/tactical-shooter-pack/unreal/0ffa051e1f05a6a49a42.png" />
</Frame>

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

<Frame caption={"Camera settings."}>
  <img src="https://mintcdn.com/kinemation/2P0DGfZe1PbAUTxl/images/tactical-shooter-pack/unreal/eb7cfc63d0ac4a6035fc.png?fit=max&auto=format&n=2P0DGfZe1PbAUTxl&q=85&s=cc824177c82d0aeedb60522f10ffccde" alt="" width={434} data-path="images/tactical-shooter-pack/unreal/eb7cfc63d0ac4a6035fc.png" />
</Frame>

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

<Frame caption={"Open up this function."}>
  <img src="https://mintcdn.com/kinemation/gs-VS6eri6gRdFbg/images/tactical-shooter-pack/unreal/f7ac2a79283ded611237.png?fit=max&auto=format&n=gs-VS6eri6gRdFbg&q=85&s=be808f8befa4d186120b207ff0c86473" alt="" width={277} data-path="images/tactical-shooter-pack/unreal/f7ac2a79283ded611237.png" />
</Frame>

<Frame caption={"Return the \"Player\", not the default \"Mesh\"."}>
  <img src="https://mintcdn.com/kinemation/gs-VS6eri6gRdFbg/images/tactical-shooter-pack/unreal/f762e7717f44a0eef7b8.png?fit=max&auto=format&n=gs-VS6eri6gRdFbg&q=85&s=cd7bf50874a1dde5b62c40588b49df0a" alt="" width={392} data-path="images/tactical-shooter-pack/unreal/f762e7717f44a0eef7b8.png" />
</Frame>

<Tip>
  **Tip**: This interface function is used by weapons and animation blueprints to play animations, so make sure to provide the correct reference here.
</Tip>

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

<Frame caption={"Place this in BeginPlay."}>
  <img src="https://mintcdn.com/kinemation/2P0DGfZe1PbAUTxl/images/tactical-shooter-pack/unreal/4c8c5bba10fe47945031.png?fit=max&auto=format&n=2P0DGfZe1PbAUTxl&q=85&s=6c823721c64330a273c8d1fd47c898e0" alt="" width={989} data-path="images/tactical-shooter-pack/unreal/4c8c5bba10fe47945031.png" />
</Frame>

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**:

<Frame caption={"Disable other cameras."}>
  <img src="https://mintcdn.com/kinemation/2P0DGfZe1PbAUTxl/images/tactical-shooter-pack/unreal/c9fccb60d87adbec0c3a.png?fit=max&auto=format&n=2P0DGfZe1PbAUTxl&q=85&s=c36b69b06b2af8826f1aa9f34ec9b0d9" alt="" width={205} data-path="images/tactical-shooter-pack/unreal/c9fccb60d87adbec0c3a.png" />
</Frame>

## Inputs

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

<Frame caption={"Update movement function."}>
  <img src="https://mintcdn.com/kinemation/2P0DGfZe1PbAUTxl/images/tactical-shooter-pack/unreal/cf63e19c011bc17b032b.png?fit=max&auto=format&n=2P0DGfZe1PbAUTxl&q=85&s=34edce563f0361d96c1589ba0ab8f354" alt="" width={483} data-path="images/tactical-shooter-pack/unreal/cf63e19c011bc17b032b.png" />
</Frame>

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

<Frame caption={"Updating current Gait."}>
  <img src="https://mintcdn.com/kinemation/2P0DGfZe1PbAUTxl/images/tactical-shooter-pack/unreal/a08290ac3029b022dfe4.png?fit=max&auto=format&n=2P0DGfZe1PbAUTxl&q=85&s=f79de30aa3126fe09f29fa8beca253e6" alt="" width={377} data-path="images/tactical-shooter-pack/unreal/a08290ac3029b022dfe4.png" />
</Frame>

<Tip>
  **Note**: `Gait` is from **GASP**, and `Movement State` is a **Tactical Shooter Pack** property.
</Tip>

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

<Info>
  **Note:** The setup differs between **5.4** and **5.5/5.6**; refer to the images below.
</Info>

<Frame caption={"5.4 version also requires the Update Rotation function to be called."}>
  <img src="https://mintcdn.com/kinemation/2P0DGfZe1PbAUTxl/images/tactical-shooter-pack/unreal/bf226de8ee7ce99770c4.png?fit=max&auto=format&n=2P0DGfZe1PbAUTxl&q=85&s=82bbecf6759422bfe53c4d6ded08a6a4" alt="" width={1012} data-path="images/tactical-shooter-pack/unreal/bf226de8ee7ce99770c4.png" />
</Frame>

<Frame caption={"5.4/5.6 version."}>
  <img src="https://mintcdn.com/kinemation/2P0DGfZe1PbAUTxl/images/tactical-shooter-pack/unreal/5a9f656b50310a984b00.png?fit=max&auto=format&n=2P0DGfZe1PbAUTxl&q=85&s=7f676fdccb282fa14a5f849a22e59397" alt="" width={842} data-path="images/tactical-shooter-pack/unreal/5a9f656b50310a984b00.png" />
</Frame>

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

<Frame caption={"Creating a new animation blueprint."}>
  <img src="https://mintcdn.com/kinemation/2P0DGfZe1PbAUTxl/images/tactical-shooter-pack/unreal/6eba04e6864ffcc84417.png?fit=max&auto=format&n=2P0DGfZe1PbAUTxl&q=85&s=1137e1132fa5db65f3a7dd63659f0c1d" alt="" width={563} data-path="images/tactical-shooter-pack/unreal/6eba04e6864ffcc84417.png" />
</Frame>

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

<Frame caption={"Simple initialization logic."}>
  <img src="https://mintcdn.com/kinemation/gs-VS6eri6gRdFbg/images/tactical-shooter-pack/unreal/fd01f460d8b8ea1d2606.png?fit=max&auto=format&n=gs-VS6eri6gRdFbg&q=85&s=dd58aa6feea878e9ae3ebf5358a4c562" alt="" width={1221} data-path="images/tactical-shooter-pack/unreal/fd01f460d8b8ea1d2606.png" />
</Frame>

<Tip>
  **Tip**\*:\* Obtain a reference to your player Blueprint here.
</Tip>

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**:

<Frame caption={"Retargeting settings."}>
  <img src="https://mintcdn.com/kinemation/-AzWoLR_QWINVM-e/images/tactical-shooter-pack/unreal/076aeb2cf530c25bdc9e.png?fit=max&auto=format&n=-AzWoLR_QWINVM-e&q=85&s=454c5b8b0b39ae3cccfda65f70ab62ae" alt="" width={556} data-path="images/tactical-shooter-pack/unreal/076aeb2cf530c25bdc9e.png" />
</Frame>

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

<Frame caption={"Bind the \"Mesh\" here."}>
  <img src="https://mintcdn.com/kinemation/2P0DGfZe1PbAUTxl/images/tactical-shooter-pack/unreal/5089aa2f8ee3d24ee956.png?fit=max&auto=format&n=2P0DGfZe1PbAUTxl&q=85&s=26f3d68959d4386391c541e65da03f7b" alt="" width={265} data-path="images/tactical-shooter-pack/unreal/5089aa2f8ee3d24ee956.png" />
</Frame>

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

<Frame caption={"Simple blending setup."}>
  <img src="https://mintcdn.com/kinemation/gs-VS6eri6gRdFbg/images/tactical-shooter-pack/unreal/fd879f2ae4427711db98.png?fit=max&auto=format&n=gs-VS6eri6gRdFbg&q=85&s=f7dfa73d7d10de8c3df38f88e0442efb" alt="" width={563} data-path="images/tactical-shooter-pack/unreal/fd879f2ae4427711db98.png" />
</Frame>

<Frame caption={"Override the upper body."}>
  <img src="https://mintcdn.com/kinemation/2P0DGfZe1PbAUTxl/images/tactical-shooter-pack/unreal/f293ccde10b2c748d4be.png?fit=max&auto=format&n=2P0DGfZe1PbAUTxl&q=85&s=8ebcaa3bcd6f9f455b0b761c0fe5d4c3" alt="" width={563} data-path="images/tactical-shooter-pack/unreal/f293ccde10b2c748d4be.png" />
</Frame>

<Info>
  **Tip**: Feed the retargeted pose into **Base Pose**, and Tactical Shooter animations into **Blend Pose 0**.
</Info>

## Parkour adjustments

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

<Frame caption={"Cached poses."}>
  <img src="https://mintcdn.com/kinemation/2P0DGfZe1PbAUTxl/images/tactical-shooter-pack/unreal/a8a9e23acc2698488ec3.png?fit=max&auto=format&n=2P0DGfZe1PbAUTxl&q=85&s=608ffcd444630c32cfd0edde4e6c40cb" alt="" width={449} data-path="images/tactical-shooter-pack/unreal/a8a9e23acc2698488ec3.png" />
</Frame>

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

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

<Frame caption={"This pose will be used when climbing."}>
  <img src="https://mintcdn.com/kinemation/2P0DGfZe1PbAUTxl/images/tactical-shooter-pack/unreal/7d0f7764d13627de5fe8.png?fit=max&auto=format&n=2P0DGfZe1PbAUTxl&q=85&s=5d4fa83a23b8fdc3ce07d8763390b883" alt="" width={1210} data-path="images/tactical-shooter-pack/unreal/7d0f7764d13627de5fe8.png" />
</Frame>

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

<Frame caption={"Use the \"Upper Body\" as a \"False Pose\"."}>
  <img src="https://mintcdn.com/kinemation/2P0DGfZe1PbAUTxl/images/tactical-shooter-pack/unreal/62bbcae1700cc77a17e1.png?fit=max&auto=format&n=2P0DGfZe1PbAUTxl&q=85&s=8d8f5c174184abb5e5fdb14fb3446468" alt="" width={524} data-path="images/tactical-shooter-pack/unreal/62bbcae1700cc77a17e1.png" />
</Frame>

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

Finally, blend the result with the "MotionMatchingPose":

<Frame caption={"Final blending step."}>
  <img src="https://mintcdn.com/kinemation/2P0DGfZe1PbAUTxl/images/tactical-shooter-pack/unreal/67b1866be8eaa1e3f054.png?fit=max&auto=format&n=2P0DGfZe1PbAUTxl&q=85&s=3dd65235ac29c96b1574b6cc346ebd5b" alt="" width={1344} data-path="images/tactical-shooter-pack/unreal/67b1866be8eaa1e3f054.png" />
</Frame>
