It’d also be good to have variants of Start Accelerating and Apply Impulse that take a single impulse/acceleration vector rather than direction and rate. You can often be forced to repeat large expressions like this:
Start Accelerating(Event Player,
(
((Throttle Of(Event Player) == Vector(0, 0, 0) && (Is Button Held(Event Player, Jump) - Is Button Held(Event Player, Crouch) == 0))
? Vector (0, 0, 0)
: Normalize(
(Throttle Of(Event Player) == Vector(0, 0, 0)
? Vector (0, 0, 0)
: Normalize(
Z Component Of(Throttle Of(Event Player)) * Facing Direction Of(Event Player) +
X Component Of(Throttle Of(Event Player)) * -1 * Normalize(Cross Product(Facing Direction Of(Event Player), Up))
)
) +
(Is Button Held(Event Player, Jump) - Is Button Held(Event Player, Crouch))
* Normalize(Cross Product(Normalize(Cross Product(Facing Direction Of(Event Player), Up)), Facing Direction Of(Event Player)))
) * 4 * Event Player.base_speed * Event Player.speed_mult
)
- Normalize(Velocity Of(Event Player))
* Max(
Min(
Speed Of(Event Player) / 0.016,
2.6 * Max(Speed Of(Event Player), 0.320 * Event Player.base_speed * Event Player.speed_mult)),
Min(30 * Event Player.speed_mult, (Speed Of(Event Player) - Event Player.base_speed * Event Player.speed_mult) / 0.016))
),
Distance Between(Vector(0, 0, 0),
(
((Throttle Of(Event Player) == Vector(0, 0, 0) && (Is Button Held(Event Player, Jump) - Is Button Held(Event Player, Crouch) == 0))
? Vector (0, 0, 0)
: Normalize(
(Throttle Of(Event Player) == Vector(0, 0, 0)
? Vector (0, 0, 0)
: Normalize(
Z Component Of(Throttle Of(Event Player)) * Facing Direction Of(Event Player) +
X Component Of(Throttle Of(Event Player)) * -1 * Normalize(Cross Product(Facing Direction Of(Event Player), Up))
)
) +
(Is Button Held(Event Player, Jump) - Is Button Held(Event Player, Crouch))
* Normalize(Cross Product(Normalize(Cross Product(Facing Direction Of(Event Player), Up)), Facing Direction Of(Event Player)))
) * 4 * Event Player.base_speed * Event Player.speed_mult
)
- Normalize(Velocity Of(Event Player))
* Max(
Min(
Speed Of(Event Player) / 0.016,
2.6 * Max(Speed Of(Event Player), 0.320 * Event Player.base_speed * Event Player.speed_mult)),
Min(30 * Event Player.speed_mult, (Speed Of(Event Player) - Event Player.base_speed * Event Player.speed_mult) / 0.016))
)),
10000, To World,
Direction Rate and Max Speed);
A proper Magnitude Of value would also be nice to replace Distance Between(Vector(0, 0, 0), x).