> For the complete documentation index, see [llms.txt](https://slashin8r.gitbook.io/universal-monster/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://slashin8r.gitbook.io/universal-monster/features/combat-system/bullets.md).

# Bullets

**Universal Monster** has a custom **Line Trace** that is affected by **Gravity**, **Wind** and **Drag**, which makes it perfect for **Bullets**. The **Line Trace** is done instantly, so it does not take into account travel time, but it does account for the distance a **Bullet** would travel over a certain amount of time.

## Creating A Bullet Attack

### Bullet Montage

Similar to creating a **Melee** or **Projectile** attack, you must create a **Montage** for the **Bullet** attack. Refer to the **Melee** section by clicking the link below if you do not know how to create a new **Montage**.

{% content-ref url="/pages/-MbsNU1AAganfo1wNcpe" %}
[Melee](/universal-monster/features/combat-system/melee.md)
{% endcontent-ref %}

![Just like the Projectile, the Bullet only needs a Montage Notify, instead of a Montage Notify Window](https://2501426749-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MbsB8IAdQC_jVeRoJ70%2F-Mkmlzoe30oNO-JUiVIh%2F-MkmmWInA6hOgoovhZ7_%2Fimage.png?alt=media\&token=11a7beaf-9a1e-44aa-9341-0266f4464a26)

![The Notify Name must be set to Bullet (case-sensitive)](https://2501426749-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MbsB8IAdQC_jVeRoJ70%2F-Mkmlzoe30oNO-JUiVIh%2F-MkmnV_O02xDYSAzeCQs%2Fimage.png?alt=media\&token=abc4676c-895a-4b5d-9880-6d2dcf3c6345)

### Bullet Attack

![In order to fire a Bullet, you must create a Bullet attack within the Attacks Array using the Montage you created and set the attack Type to Bullet](https://2501426749-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MbsB8IAdQC_jVeRoJ70%2F-Mkmnj62qYWshbLN35l4%2F-MkmoE1yALjFLTwAQgv-%2Fimage.png?alt=media\&token=6ce7dd11-c563-40ea-bd22-8b8252c966b5)

The **Bullet** attack does not need any more information configured in the **Attacks Array** because it will pull its attack information from the **Get Bullet Info** interface function in **BPI\_UniversalMonster**.

{% content-ref url="/pages/-McPHUEor-eczLltjGuj" %}
[BPI\_UniversalMonster](/universal-monster/features/monsters/character-blueprint/interface.md)
{% endcontent-ref %}

### Bullet Info

**Bullets** must have **Bullet Info** in order to run their trace and do damage. You will need to add a new variable to your character using the struct **S\_BulletInfo**. You can then configure this variable with default settings and then pass it along in the **Get Bullet Info** interface function. If you have multiple weapons that need to have different **Bullet Info** settings, then you can make this variable a map or array so that you can choose the different settings when needed. The **ESRPG** example uses a map of **Static Mesh** to **S\_BulletInfo** which sends different settings depending on the currently equipped **Static Mesh**.

![Create a new variable and change its Variable Type to S\_BulletInfo](https://2501426749-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MbsB8IAdQC_jVeRoJ70%2F-MkmpSf-SEftsJGa16Gc%2F-Mkmqkp3Rwl3S-X49y5b%2Fimage.png?alt=media\&token=2543facd-48f6-499a-a90d-cf82aa9e9c7d)

![Configure your Bullet Info settings](https://2501426749-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MbsB8IAdQC_jVeRoJ70%2F-MkmpSf-SEftsJGa16Gc%2F-Mkmr03XsgesMEj9Nkqo%2Fimage.png?alt=media\&token=4fc4fb77-7f4c-43da-b6c4-3c84d63802f6)

**Data Table Row**: You can store your Bullet Info in a data table.\
**Location**: The location to start the Bullet trace.\
**Direction**: The initial direction of the Bullet trace.\
**Speed**: The initial velocity of the Bullet trace.\
**Accuracy**: Value from 0 to 100 to determine the accuracy of the Bullet trace, which will add a rotation offset to the Direction.\
**Accuracy Multiplier**: Angle, in degrees, to offset the Direction when Accuracy is 0.\
**Time**: Number of seconds used to simulate the Bullet trace. The trace is still done instantly.\
**Traces**: Number of traces to calculate. The higher the value, the more accurate the Bullet trace, but it will cost more in performance.\
**Drag**: Amount of velocity subtracted from the current velocity every second of the Bullet trace.\
**Gravity**: Accelerates the Bullet by the chosen vector. Default gravity is (0, 0, -980).\
**Wind**: Offsets the Bullet by the chosen vector. This vector is randomized during the Bullet trace to provide a more realistic simulation.\
**Trace**: The trace settings to use for the Bullet.\
**Enable Debugging?**: Should the traces be shown for debugging?\
**Debug Draw Type**: Show the trace for a single frame or a duration.\
**Debug Trace Color**: Color of the trace before a hit occurs.\
**Debug Hit Color**: Color of the trace after a hit occurs.\
**Debug Draw Time**: The duration to show the trace.
