Projectiles

From Baldur's Gate 3 Modding

This page provides a basic breakdown of the projectiles templates – trajectory type, rotation mode, velocity mode, and spell data.

Trajectory Type

Bezier 3

A quadratic bezier curve is a curve defined by 3 points. Both the first and last points are controlled by code, but the middle point (also known as the control point) is controlled using the settings below.

Distance Min/Max The distance at which the minimum offset and shift should be used, and the distance at which the maximum offset and shift should be used.
Offset Min/Max The local (rotated) offset of the control point. X represents left/right and Y represents upwards/downwards.
Shift Min/Max The forward/backward position of the control point. The value is a percentage range of 0 to 1, but supports values outside that range.

The min/max values essentially allow you to define 2 curves that are lerped between, based on the distance between the source and target points.

Example Bezier 3 curve at minimum.
Example Bezier 3 curve at maximum.

Bezier 4

A cubic bezier curve is a curve defined by 4 points. Both the first and last points are controlled by code, but the middle points (also known as the control points) are controlled using the settings below.

Distance Min/Max The distance at which the minimum offset and shift should be used, and the distance at which the maximum offset and shift should be used.
Offset Min/Max, A/B The local (rotated) offset of the control point. X represents left/right and Y represents upwards/downwards.
Shift Min/Max, A/B The forward/backward position of the control point. The value is a percentage range of 0 to 1, but supports values outside that range.

The min/max values essentially allow you to define 2 curves that are lerped between, based on the distance between the source and target points.

Example Bezier 4 curve at minimum.
Example Bezier 4 curve at maximum.

Pathfind

This is a path that will pathfind its way from source to target position and convert the route it found into a smoothly splined curve. There are currently no settings to customise the path and it is entirely dependent on Navigation Cloud Trigger(s) being placed in the area and being created from a Projectile type spell.

Rotation Mode

Static

The object will not rotate.

Follow

The object will follow the rotation of the trajectory.

Lerp

The object will linearly interpolate from source rotation to target rotation.

SLerp

The object will spherically linearly interpolate from source rotation to target rotation.

Velocity Mode

Constant

The projectile will move at a constant speed throughout the entire lifetime.

Minimum velocity used will be 0.1 m/s.

Linear

The projectile will start with an initial velocity and accelerate throughout its lifetime.

Minimum initial velocity used will be 0.1 m/s.

Minimum acceleration used will be 0 m/s².

Mapped

The projectile’s velocity is sampled from an FCurve using the current interpolation value along the path.

Keys outside of the 0 → 1 X Axis are ignored.

Keys outside of the Y Axis 0.1 → Inf. are clamped to 0.1.

All keys placed in the FCurve will be treated as “Linear”.

Don’t exceed 10 keys as it does impact performance.

Example mapped projectile velocity.

Spell Data

Multiple Trajectories

Projectile, ProjectileStrike, and Throw spells have a Trajectory column where you can fill in any number of projectile templates separated by commas (,). Each extra template filled in represents an extra trajectory to test (if the trajectory before it failed to find a path to the target).

For spells that allow multiple projectiles/targets, each projectile/target group is separated by a semicolon (;).

The Trajectories column filled in with projectile templates.

Trajectory Rules

In some cases, a waterfall of tests isn’t preferred and instead we want to use a specific trajectory based on the distance and height between the source and target position.

This can be done thanks to trajectory rules, which are defined in the TrajectoryRules/Projectiles UUID table.

Each rule has an associated projectile template ID, which will end up being used whenever that specific rule matches the provided source and target positions. In order to be used, rules have to be specified in the Trajectories spell data column with the rules: prefix.

The Projectiles UUID table.
An example spell data setup.