# Documentation

<figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXfTpbapLfwzmRE-BqZ1WOoWOohD8MxKV5R9I51BFxL_xjHwHk4kTLAFJ2E6no0IouGeeicvZ0eCmd3uHScbFKkpJr05VQ1NH6a5zpoDmumX3s7a7qN2uyLDJnTkziaonRL3ewPv_tTNfEm1UUycC32KMSuXxX8Cr04?key=8vHqrdRhP-oE3eA3iIxdlw" alt=""><figcaption></figcaption></figure>

## <mark style="color:blue;">Horse and Rider Deformation system</mark>

On top of running standard animations, horse comes with a advanced deformation system built within animation blueprint that transforms individual bones based on user input and camera rotation to  achieve more realistic and responsive body movement.

<figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXfya8VFPdkik0XaM181nb7FOTfFCDV4DijQrgSYF3Ho7QSkzqO1dVOH9cRFe2hOX15152MXkPUzd5ZyGhsijAWunN-n2X2d6rFtOxB-bp0exue_LxkBZGQyv0Rq_xic5M6oBh31lsBrt-ZAIBAf-ZdZysZKXS8FaA?key=8vHqrdRhP-oE3eA3iIxdlw" alt=""><figcaption></figcaption></figure>

Transforms nodes are located in the AnimGraph of the horse animation blueprint.

<figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXcWrhNsjjKe4bCz2lhG-nSVt891sPRkw_r1nPmwpARaKU9OICX8Q0vaPltD0AYA948hBKZj7xctyYAQIqYdmhOvlI0onQOgHRZddwYj8IoxUVduhna9Kg85vOhYA-lLnGvBghfmiy5g8SWmoLquVMfEi1XYJAz-eE8?key=8vHqrdRhP-oE3eA3iIxdlw" alt=""><figcaption></figcaption></figure>

Rotation driving values are located within Animation Update Events section of the BP\_Horse\
These values are set to what we believe looks most natural. However it all can be adjusted for more or less intense deformation if that would suit your setup better.\
Current setup affects the Lowerback (area around back legs), spine and the head.

Chest bone rotation is currently deprecated. It looks great on a wild horse without the saddle, however this particular bone rotation is too intense for most saddles resulting in mesh clipping.  That being said, you may want to make use of it depending on your setup.

<figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXdlWxZRsApbDIK77CmT5pSKWFq9gZok8KRtDJ3LXO_yjsQ3w4dD25TP-EntkYj0WAtG-F5uBX-PnzHbymmCJjcLCKhMul_GaegPvOmgi08caOxPZIGYQPLjpXaQX3qTe5jtw3PCFI9_UH2s991kPA6ZLf-6oorXDuw?key=8vHqrdRhP-oE3eA3iIxdlw" alt=""><figcaption></figcaption></figure>

This package comes with an example BP\_Rider prefab with full interaction support. Rider character can mount and ride the horse as well as interact with the hat prop.

<figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXdGclAKgEHkYvDaKvMTONHR-7pt5ZZri75z3cgO1HEzi_q0dN4lgSlShr2kwI45BXxFFzWWYFKB2eohjFdqyl-8AG0R0qFiz3Xux379RmW96zdxSKmO_08yArjSUNmTeH2gF6f2-beab7OogozLPE9ostgXrvsJRkE?key=8vHqrdRhP-oE3eA3iIxdlw" alt=""><figcaption></figcaption></figure>

Just like the horse, Rider has a similar deformation system built into his animation blueprint to match his twisting and rotation to the likes of the horse. Rotation control values are located within BP\_Horse next to the horse rotation values.

<figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXelRIxoEi8wXmljfooX4CpySs8VMFAqsgXpYGH1-KTJ_0jKtxHCHR5iXS-J4y923227mn1V10FMqmm7FOxfjZTBN2rb6N1ztGu-Y0zp8m5wcpO4CpGNBAc1ek6L6SQTDreYOQTxNXvnvcCTZfKF7eHZqobCny5K_qs?key=8vHqrdRhP-oE3eA3iIxdlw" alt=""><figcaption></figcaption></figure>

BP\_Rider character prefab is built on the default Epic mannequins skeleton. Therefore the mannequin model can be swapped with any other mesh that is rigged to this skeleton.

***

## <mark style="color:blue;">Universal IK correction for Riders Hands and Feet</mark>

<figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXeeq_WLSEdBOKsDtaPNozftcgFf9EvatBZgXyualL9lHsoaduDDLSleNOfCUTCZQdXUoUa1nmZNexS1WcOnjwOoy4xTZOaUVrCq9ZJZFQsz34uFVBqktnXSXKM6gpjO_zYQFx2a3Je2mt037uxP7rVYtlf_MzkDV4Y?key=8vHqrdRhP-oE3eA3iIxdlw" alt=""><figcaption></figcaption></figure>

Due to the nature of the twisting deformations of the moving horse, we are using IK corrections for rider's feet and hands so they would always match the location of Stirrups and saddle grip point.

If a new saddle model were to be added, it would be very likely that its stirrups and hand rest point would be in a different location. If that's the case, it would be recommended to add a new IK profile for riders hands and feet.

<figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXefQzQa1z-t_cyB-6BXmtVTJD8MCJE3JwypAJ0_aYk1dVtCIh2EgbDSRgxA66IAPfq9pzND1jU5fdghXQZ_EokBo9pf5A6kkLk8CihflPVTBqRaRdAUIs8FNqG-WXLVWDIurq1GI1E-AMBbN4cbPu9i5HLcZoPG8fs?key=8vHqrdRhP-oE3eA3iIxdlw" alt=""><figcaption></figcaption></figure>

IK locator components inside the BP\_Horse are used to drive the Riders IK system&#x20;

<figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXda_QycuwUxw-03UtEZ9BpBrRWYnXPSg2Ly7z-CjlQMGqKTnJdajKsUg39sIFsNtcRqWeBaFLBYrU8cs__XFjcFgdxlAV8I6pZC9VdUcXbh_oaKHzAK7RoM-qTO8n_5MB4gu7OUpxDfTceQ7m_J7GY8ZHUcc7_JZv4?key=8vHqrdRhP-oE3eA3iIxdlw" alt=""><figcaption></figcaption></figure>

Locator setup consist of Left and Right :\
IK\_Stirrups (feet corrections inside stirrups)\
IK\_Knee ( IK offset correction for knee's to ensure that they never clip into the saddle)

IK\_Hand ( IK offset correction for riders hands, normally used to match the saddle straps)\
IK\_Hand\_Sprint ( IK Offset location for hands when rider is hunched during Gallop animation)<br>

<figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXdJ6yDZ5wJT-uaoOSIRV2A_pwAbf8qH85wUP-fReaWu9U7eXSxVMHmnA0Eq5t0eKJu1yBXmfUV6R2vxXm0b5tj4d4YAp5nmePifaivKpE_GKm_3ATC7pL6HwnBx9WO5cc5aiiq_FDZGV9sDWomPdXnZ8V5997QybKo?key=8vHqrdRhP-oE3eA3iIxdlw" alt=""><figcaption></figcaption></figure>

Depending on what kind of saddle we use, we load a  Update Hand IK  profile function which essentially locks these Locators in their ideal position to ensure no clipping occurs.

<figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXegtcoY_YRqMIe--_tMU2Gse90JpNtEpJ2IeLf5qdznk2fzswc-DeyzAeBgAdbMbFa03-VGT7MviaQogi8MgJiW52G0uI2Aot4luD5VBl9ULL10v3xF_mq_On80u-qfPkQZilrXI8fsWLhQaQ2e9LOx1xKToyIBPA?key=8vHqrdRhP-oE3eA3iIxdlw" alt=""><figcaption></figcaption></figure>

And we do the same thing for feet (IK\_Stirrups) and Knees (IK\_Knee)

<figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXf7n4Yv7DkisXd4VGfpmOY4z9rpwsn4pnMgw988Aj4QeOdirGP_UVNgQHeoM4Xv1ZfPDJfc9tOfzk7Yqy2VTkimbptz2z4G-4VhWNOJjdO0quU68_LlCKwvnD6BVQWXr2KfDIgMjNicZ5ENhUlSWMYwPmkSRpic-4o?key=8vHqrdRhP-oE3eA3iIxdlw" alt=""><figcaption></figcaption></figure>

To add more profiles, you would need to add additional entries to Enum\_HandIK\_Variant and set up a similar offset profile for the feet and knees.

***

## <mark style="color:blue;">Custom Footstep SFX based on surface material</mark>

Each time horses leg collides with the surface it does a line trace downwards, ascertains physical material properties from the impact surface and plays appropriate sound effect.

<figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXey0RRcpfzK83tUCPGtYcRdc0EMMzNZhutToYBn-b4S7ZUev_suRp_mBbmguPfACF2336OIR6a_pm4pRJVaY_uJE_6I2_gRq3JlJERn-W3iLA5QunDucwJfNURGWQJeFlcTfrgPaiKVhFdEefS0z4IHPp_blJzwWlM?key=8vHqrdRhP-oE3eA3iIxdlw" alt=""><figcaption></figcaption></figure>

<figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXcLnlw1B1l1iuZI-xFIxAHQQmQF1DMmPNsbXHAXgMByQ6CxIfvwXKGSUeJkPO4lDOFc2PFXxlDF5CQKndoTJIkT4bmA-a3WnaXtGPFMjIzQZ_xo7arRxMbC86BCvYTmsbS8NTRRuu9k6z6ymuXALbFjPfJHOXY89rb21VM4bA?key=8vHqrdRhP-oE3eA3iIxdlw" alt=""><figcaption></figcaption></figure>

Normally this sort of setup would just use Surface type parameter built directly into the materials and decide what SFX to play, however due to the nature of new marketplace guidelines, marketplace packs can no longer contain any data which would go into config folder and defaultengine.ini which is where these are stored.

<figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXctAldCkmww4TXSZEY1S2RYuak1HCkpDOeFIBpipxnqpdkbGS4Y_fTfi62qFUoTMpEpuWQCsHKD4_v5Gf9fAUF-fnDXcIO0JwdtawNdNsIihXk-4nSGl4zb2KK1K7RfJQgdZ4mk8O751GcxvRjupUFqGzzWYAUpkvo?key=8vHqrdRhP-oE3eA3iIxdlw" alt=""><figcaption></figcaption></figure>

As a direct workaround, our implementation uses only the SurfaceType\_Default physcal surface, and instead extrapolates  variants from the value of the  friction parameter

<figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXeAtckckNjQtvAnGJGl9TEtVHufqXM-oYZlX9ZOQ3lw0Avm-OLLrQBBdW4mKujFjOwHM_SjLtK9Z1CmACd9flAccaP8xDiNXHxKoLvWdxOwU55L1vn0gc6kYlefqHCaWBBOcbFMOKXe5EHRXVtPCJeWm60joNMirYQ?key=8vHqrdRhP-oE3eA3iIxdlw" alt=""><figcaption></figcaption></figure>

As such each type of physical material type has a static friction value which is used to identify that material during the footstep trace event and play appropriate SFX. Friction values used -  Concrete \[1], Dirt \[2], Grass \[3] and Water \[4].&#x20;

If your project requires the usage of friction on physical materials, then it would be highly recommended to unhook this logic from the

Foot SFX trace function inside BP\_Horse and replace it with standard physic surface types stored within defaultengine.ini to determine the appropriate sound effect.

***

## <mark style="color:blue;">Water Detection and Swimming mode</mark>

<figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXd_qrKXkFpM3XM2yTtcEfdYzURWKyrnVU0iathi9bWJdavqh0eRMy-bfQ8asuyg1lQGgjoxaEzE73C6AIIYWivsGpr2SCXGncNnv5YgIq7c3mwNpPsev0riG0GkAz7LrgIt7k5MvGajs4PaG29uNaXP5FVlBeh9TQ?key=8vHqrdRhP-oE3eA3iIxdlw" alt=""><figcaption></figcaption></figure>

Our horse system is built with a custom swimming mode. One of the Demonstration levels has the example setup with the water asset from official Epic Games Water plugin. BP\_Horse is built with a trace function which scans if the horse is submerged in water and automatically switches it into swimming mode or back to walking mode when no longer in water.

<figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXfYdH0aVuICP3YxYbTCjUU7Gzc8wqAaPj8Y3z6-nUH7gjf3mo5TS6VqOWSEZeoHrRjyEqnJ9Q4doJN7OhX6nFsGfrpHl0URL92R0zRGE1s1dBe1uCWsfO3hPQmUqZqZp1v99hScxMMomqhNG29PHwFJSTdAJNmRMBY?key=8vHqrdRhP-oE3eA3iIxdlw" alt=""><figcaption></figcaption></figure>

That being said, depending on your specific needs - using the water plugin may not be an option. In which case we have a BP\_Swimzone blueprint, which can be used to tell the horse which areas of the level are intended to be water zones so the horse would switch into swimming mode when walking over them. Blueprint itself is lightweight and can be duplicated and scaled to cover desired swimming area.

For ideal results, blue preview mesh \[water level] should be matched to the surface of your custom water area.

***

## <mark style="color:blue;">Advanced Saddle customization</mark>

&#x20;

<figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXcur9JFvR6dOFoP6YrlcAgKUC7mAt_li1PWYo-t6DVVxHXkVnd8Iwj5IkSqJWtPBG3zQr3AXIeDJt6Fz7WRpz40xKy9zwoOOWGzXj9-8KVF4gHnhsEQ-FLTO6Zpy7JCZM-wxP0rsoZyUPJ1o00kJL4W2Lk4yMSG_A?key=8vHqrdRhP-oE3eA3iIxdlw" alt=""><figcaption></figcaption></figure>

Both stylized and realistic versions of the horse have an optional saddle mesh, however only realistic horse version can use Advanced saddle which can be customized.

<figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXc3i69UDlguy8yI6EVuN7OTIl7Ff05cdygwXdOisJOvqdeZ4d0D9IaYCjcFumDEcVbOC7UsjN4zG87NXicBRLrYAAAFCGL6haoe7QJ4MzRvOSQcNPGmpwGIG3v5UxO8sl1lsfD4YXefj-XM6i02NctnhNOLWh1cKQ?key=8vHqrdRhP-oE3eA3iIxdlw" alt=""><figcaption></figcaption></figure>

<figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXdKr7i1fqLCbsiYxz16hkv9UIX6gVaHQ4BguVIcIoxNcgmV793YARzJG81Ny9FWtRbhMkPF0QMzRifKFmT8-qN2hCcpXbRnIGL9KVCewv1nhkhv_Jm1seGEk2SgLDAn2K0Z1WpZc1y8ym1GrmKqJ6qe_YVs_YKxjGg?key=8vHqrdRhP-oE3eA3iIxdlw" alt=""><figcaption></figcaption></figure>

We exposed some presets which can be selected through BP\_Horse when placed directlly in a level, however these presets are few and just serve as an example selection of some of available saddle materials.

<figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXcn8gcQXSFbC4aeztSTG4V3XowHMEdcv5gKOhRP1N0-r9ZIZJC8BtO6BfwJi3-WqrgFEXW34v-Sj9LbaHybZl9xa3XYodyvksk6xy_eu3rVX6OaRrGLUkfuxVjMEmlSIIauTwc2-UC0sEGAhhVbu0yxdcLqD6gAh_4?key=8vHqrdRhP-oE3eA3iIxdlw" alt=""><figcaption></figcaption></figure>

There are various fabric and leather textures and materials available for each individual part of the advanced saddle which can be used to assemble many different variants. For additional customization we've also included custom materials which let you pick your own color tint.

<figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXchcKdsK8_NqkKSYhT9RVmQ_jLfFoPtJEqpOVAX-oarnUQfPzrhilycUZ_BitSpUpc8moEJ2l5fdEGPsnTo9Ncf8yJNB9JNbs6Doj6sUU_WTD554U--ayYAb2kB9AUyW0O7WNkfMD361c7mTonqVCOXTqqP-n6nJvs?key=8vHqrdRhP-oE3eA3iIxdlw" alt=""><figcaption></figcaption></figure>

For advanced customization, open BP\_AdvancedSaddle and from there you can modify attachments placement, their individual materials and remove / add more props.&#x20;

***

## <mark style="color:blue;">Enhanced Input and Controller Support</mark>

This package is using enhanced input system which is a new default input method since UE 5.1.0 and mandatory for all marketplace packages going forward.

<figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXdZrrD_qB_p_76u48qTg_B6j-cCIITxRnexnVnvprJMjVHe6pj2-RQeIKm_UcTCJeZsPXmBIl8O4CfSYDpFbO_wcMAgqRfem9c6EEv4CJ_b6Qf0yZTg9OivHy4JwEIuXxR9_ePdVo2I01rzb7mED2D6zheyGSdDu6U?key=8vHqrdRhP-oE3eA3iIxdlw" alt=""><figcaption><p>ATTENTION : In earlier engine versions than 5.1.0 you need to enable Enhanced input plugin manually and  set Default Player input class  and Input component class into enhanced input.</p></figcaption></figure>

Current setup fully supports Keyboard + Mouse and Xbox Controllers.\
When it comes to PlayStation controllers it gets a little more tricky. There is no way to officially support PlayStation controllers without official Dual Shock plugin which can only be used by developers verified by Sony. That being said, our package is using Windows Raw Input plugin and can read the input from PS controllers. However it cannot differentiate from PS4 and PS5 controllers and thus can only support one or the other at any given time.

<figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXeidpPSrLX6B3sWGj-UZpzs8bHXEBkJFUlIVqkhH_oazWnqSBOguzhganc-Rwkl0f3tvdHZ_u9fIsi0of2r-7fx1TWw5chyCyDFFJxOOUNt9d5oQG_-nAOpgojibf_miNpq_6xkeiKTm3jdA87ymz3EzNfXt9n-Wds?key=8vHqrdRhP-oE3eA3iIxdlw" alt=""><figcaption></figcaption></figure>

<figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXeZMfrCTaFGxPpXSFZ74hs8WPwt9KbqiGX8sU1-c4dVUu9ieeVnf7nIC7ERpI5dMdrmWdmTQNWwiiYIaG34nqp-Dr31fm0fHyzAp_7aD4hvBNUPFKzSXn374yp4-fnuxP18nMjSYglBVZr1ppWMh1oubjVCRj24lvA?key=8vHqrdRhP-oE3eA3iIxdlw" alt=""><figcaption></figcaption></figure>

By default, this package is set up to recognize PS4 controllers input. If you want it to be compatible with PS5 controllers instead, you need swap InputMappingsPS4 profile with InputMappingsPS5 on the nodes highlighted in the picture above for both BP\_Horse and BP\_Rider&#x20;

<figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXe3ntgpuoNJZK9h4H7tg7EbcDlS9Kf9sR3YNaENCDAB5tW2VlBYo_HInGb7cEsd9EuRpQmifAH6SP24Scl65ti96pfYMjrWE3r62qo7pnEbGPXYMYb8i9XtzF5b3BwUriozL6wtxSrQfoMsrxdHL48DaVL_TUkigNw?key=8vHqrdRhP-oE3eA3iIxdlw" alt=""><figcaption></figcaption></figure>

## <mark style="color:blue;">5.6 Update (New docs below)</mark>

## <mark style="color:blue;">1) Optional Camera Settings</mark>

***

Optional camera settings have been added and exposed with Unreal engine 5.6 version update

<figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXebsHdzBWRXL9DhqiqvbDah-3BbS9K4HcmCz28xxNu6H_NsTEm8k6oqPWWYAT3BM8-cwQIxovVaYfWfCH95GujmDIsaAlhNvUUKXTPhA3q_Rh_5I4xB4jCg3-Cko29wlmZHz11ofQ?key=b2EyXYee-g9f3cGPrydgJw" alt=""><figcaption></figcaption></figure>

These settings can be found under "user settings" tab within BP\_Horse

<figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXepg3niQBsmySLtTON1sSolUlrlzCvEYPzoRBvvaUJk-adB_j8uH-8OCmt_v65YTTKyhDrSj60R9qS1JLEukEGWFTiqxXHE3lIatt15V_hBQykj-Wnb7Ohf0-LZZyS2JWzejohQ8w?key=b2EyXYee-g9f3cGPrydgJw" alt=""><figcaption></figcaption></figure>

**Default Camera Setting** is the original camera control where both mouse and keyboard steers the horse and controls the camera simultaneously.

\
**Optional Camera Setting (v2)** disconnects horse rotation from the mouse and only leaves the keyboard, allowing the mouse to rotate the camera independently of the horse.

\
**Optional Camera distance** works only with the Optional camera setting and enables the user to set a custom camera distance.

\
**Camera Sensitivity** works for both camera settings.<br>
