Mods / Jaunt: Entity Movement System

Tags: #Creatures #Library #Utility
Authors: safwyl, sekelsta, Freakyuser396, Shintharo12
Side: Both
Created: Jun 8th at 4:11 AM
Last modified: Oct 7th at 1:01 PM
Downloads: 75260
Follow Unfollow 711

Latest release (for Vintage Story 1.21.2 - 1.21.4, potentially outdated):
jaunt_2.1.1.zip  1-click install


This mod does nothing useful on its own. Install if another mod requires it.

Jaunt is a library mod to extend entities with rideable behaviors. It provides an extended gait (movement pacing) system allowing for multiple forward gaits plus idle and backwards movement; as well as a stamina behavior for entities.

 

Release List
2.1.0: 1.21 Compatability + Saddle Breaks
2.0.0: Flying Mount Support + Jaunt Flute

 

Checkout Draconis for an example of what can be done!

 

Mods using Jaunt:

 

If you are experiencing issues with your mount stopping and running in place and/or your camera snapping forward while riding this is due to the full attribute tree resync in the base game. It is more likely to happen the more mods you have installed but as a workaround you can try MountCameraFix mod which changes the max number of dirty paths before a full resync.

 

While Jaunt itself is a code mod it is designed to be fully implemented and configured through entity json files and does not require content mods to be converted to code mods to utilize it. Just add Jaunt to your mod's dependencies and follow the guide below on "Entity Json Implementation"

Gait System

Gaits and rideable are independent behaviors but using jaunt:rideable requires jaunt:gait also be configured or it will fail to initialize.


When an entity uses both behaviors it allows the rider to cycle through available gaits according to the order specified in the rideableGaitOrder array in jaunt:rideable's behaviorConfig.

For more information on configuring available gaits see the Entity Json Implementation section below.

 

Below is an example setup utilized by Equus: Wild Horses that implements four forward gaits.

  • Walkback (Backward)
  • Idle (Stationary)
  • Walk (Forward Speed 1 - Slowest)
  • Trot (Forward Speed 2)
  • Canter (Forward Speed 3)
  • Gallop (Forward Speed 4 - Fastest)

 

They are progressive in that you must move through each gait to get to the next, cycling gait up is done via the Sprint Key (see controls section for more details). Cycling down can be done with the S key or by releasing the forward key when using the snaffle bit.

 

The gaits are indicated on the HUD with icons which can be supplied by the mod (see Entity Json Implementation for more details). Jaunt also provides the default icons used in Equus: Wild Horses which can be referenced by your mod.

 

Stamina System

When an entity uses the jaunt:stamina behavior it will be given an additional stat - "stamina" (go figure). This stat behaves much like you'd probably expect with certain actions causing stamina drain (fatigue) and when these actions are not being performed it will naturally regenerate.

  • Drain/Regen rates are fully configurable in entity json behaviorConfigs, as well as values for maximum stamina, penalties for wounded or mounted animals, as well an exhaustion threshold and the option to cancel fleeingEntity behaviors when below the exhaustion threshold (allowing players to run down animals they might not otherwise be able to).

 

  • Stamina draining activites include swimming and fleeing, and can be added to any gait in the gait config. Stamina is regenerated when not in any of those situations, regen penalties (if configured) are applied if the horse is mounted or injured (below 70% health).

 

  • When a entity's stamina is below 50% there is a gait shift down chance that is quadratically proportional (chance increases more dramatically as the stamina decreases) to the stamina percentage below 50%. (i.e. At 50% stamina, 0% chance; at 0% stamina, 100% chance; moving along a quadratic curve)

 

  • If the gait shift down chance is triggered the entity will reduce to a their moderateStamina state if remaining stamina is greater than 10%, or to their lowStaminaState if below 10%. These states are configured in the rideable behaviorConfigs section.

 

  • If stamina fully drains while swimming, nothing will occur (don't worry about the entity drowning) but it signficantly reduces their ability to move quickly upon exiting the water.

 

HUD Items

With the addition of the Gait System and Stamina Behavior for entities you'll find that when mounted there are two additional HUD items visible.

 

Gait Indicator: This icon is a dynamic image that changes with your mount's gait to help give a visual indicator of the current gait. Custom icons are can be supplied through the entity json.

Stamina Bar: The stamina bar shows your horse's current stamina level, if the stamina level drops below 30% the bar will flash


The placement for the gait indicator and stamina bar are fully configurable from the mod config file but apply to all mods using the jaunt library.

StaminaBarLocation can be any of the following:

  • "AboveHealth"
  • "AboveHunger"
  • "AboveTemporal"

 

StaminaBarOffsets are then applied as x/y values from that location.

Please be aware other mods may share this location and offsets may need to be applied when working with mods such as Hydrate or Diedrate or Rustbound Magic.

 

Default Locations:

HUD Items

 

Controls

Snaffle Bit:

W: Hold to move forward, release to stop

A/D: Left/Right

S: Press without releasing W to decrease gait -OR- from idle walk back

Sprint Key (Default Ctrl): Increase gait, when galloping this key will also swap back and forth between canter and gallop

 

Curb Bit:

W: Press to move forward

A/D: Left/Right

S: Decrease gait -OR- from idle walk back

Sprint Key (Default Ctrl): Increase gait, when galloping this key will also swap back and forth between canter and gallop

 

Config Options and Default Values

Jaunt includes a mod config with options for hud placement (typically to be exercised by players for compatibility with other mods' hud items) as well as default values for most configurable options. Keep in mind any changes here apply to all mods utilizing Jaunt so modifying the entity json is the preferred method for implementing stamina and gait values.

 

GlobalDebugMode enables a lot of logging statements around gait changes, for performance reasons keep this disabled during normal play.

Default Config

{
  "ConfigVersion": "2.0.0",
  "GlobalMaxStaminaMultiplier": 1.0,
  "GlobalStaminaRegenMultiplier": 1.0,
  "GlobalSwimStaminaCostMultiplier": 1.0,
  "GlobalSprintStaminaCostMultiplier": 1.0,
  "EnableStamina": true,
  "HideStaminaOnFull": false,
  "StaminaBarLocation": "AboveHealth",
  "StaminaBarWidthMultiplier": 1.0,
  "StaminaBarXOffset": 0.0,
  "StaminaBarYOffset": 0.0,
  "ShowGaitIcon": true,
  "IconOffsetX": -385.0,
  "IconOffsetY": -105.0,
  "IconSize": 75.0,
  "DefaultMaxStamina": 100.0,
  "DefaultSprintFatigue": 0.2,
  "DefaultSwimFatigue": 0.2,
  "DefaultBaseFatigueRate": 1.0,
  "DefaultStaminaRegenRate": 1.0,
  "DefaultRegenPenaltyWounded": 0.5,
  "DefaultRegenPenaltyMounted": 0.3,
  "DefaultExhaustionThreshold": 0.1,
  "DefaultDontFleeWhenExhausted": false,
  "GlobalDebugMode": false
}

 

Entity Json Implementation

All configuration is done similarly to vanilla behaviors, by adding them to the entity json file. To implement these behaviors you will need to add them to the client and server behavior lists and the appropriate configuration options in the behaviorConfigs dict. For reference below is the wildhorse.json entity file from Equus which implements both behaviors.

 

behaviorConfigs > jaunt:gait

idleGait - The default idle gait for this entity

idleFlyingGait - The default gait for this entity while flying

idleSwimmingGait - The default gait for this entity while swimming (not currently utilized)

groundGaitDrag - Drag factor for all ground based gaits (applies when not trying to move)

flyingGaitDrag - Drag factor for all flying based gaits (applies when not trying to move)

swimmingGaitDrag - Drag factor for all swimming based gaits (applies at rest, not during movement) (not currently utilized)

gaits - List of all available gaits for this entity, order is not important

    code unique code for this gait

    environment - the environment or habitat this gait should be used in (ground riding would be land, flying would be air, etc.; must be a member of EnumHabitat in game code)

    moveSpeed - movement speed for this gait

    backwards boolean for if this gait should move backwards

    yawMultipliermultiplicative factor for turning left/right for this gait

    staminaCost stamina cost for this gait

    fallbackGaitCode - fallback gait code for this gait, utilized by stamina system for slowing down when tired

    sound sound that should play while this gait is active

    iconTexture icon svg file to display in the HUD for this gait

 

jaunt:gait": {
	"idleGait": "idle",
	"idleFlyingGait": "hover",
	"idleSwimmingGait": "swim",
	"flyingGaitDrag": 0.25,
	"swimmingGaitDrag": 0.05,
	"groundGaitDrag": 0,
	"gaits": [
		{
			"code": "walkback",
			"environment": "land",
			"yawMultiplier": 1,
			"backwards": true,
			"staminaCost": 0.0,
			"iconTexture": "hud/walkback.svg",
			"movespeedByType": { "*-autumnus": 0.017 }
		},
		{
			"code": "idle",
			"environment": "land",
			"yawMultiplier": 1.25,
			"iconTexture": "hud/idle.svg"
		},
		{
			"code": "walk",
			"environment": "land",
			"yawMultiplier": 1,
			"staminaCost": 0.0,
			"iconTexture": "hud/walk.svg",
			"movespeedByType": { "*-autumnus": 0.017 }
		},
		{
			"code": "sprint",
			"environment": "land",
			"yawMultiplier": 0.5,
			"staminaCost": 0.2,
			"fallbackGaitCode": "walk",
			"sound": "draconis:sounds/stomp",
			"movespeedByType": { "*-autumnus": 0.16 }
		},

		{
			"code": "flyback",
			"environment": "air",
			"yawMultiplier": 1,
			"backwards": true,
			"staminaCost": 0.0,
			"movespeedByType": { "*-autumnus": 0.015 },
			"sound": "draconis:sounds/flying"
		},
		{
			"code": "hover",
			"environment": "air",
			"yawMultiplier": 1.25,
			"staminaCost": 0.0,
			"sound": "draconis:sounds/flying"
		},
		{
			"code": "glide",
			"environment": "air",
			"yawMultiplier": 0.75,
			"ascendSpeed": 1,
			"descendSpeed": 6,
			"staminaCost": 0.0,
			"movespeedByType": { "*-autumnus": 0.04 },
			"sound": "draconis:sounds/glide"
		},
		{
			"code": "glideflap",
			"environment": "air",
			"yawMultiplier": 0.5,
			"ascendSpeed": 2,
			"descendSpeed": 5,
			"staminaCost": 0.1,
			"fallbackGaitCode": "glide",
			"movespeedByType": { "*-autumnus": 0.065 },
			"sound": "draconis:sounds/glide"
		},
		{
			"code": "fly",
			"environment": "air",
			"yawMultiplier": 0.25,
			"ascendSpeed": 4,
			"descendSpeed": 5,
			"staminaCost": 0.2,
			"fallbackGaitCode": "glideflap",
			"movespeedByType": { "*-autumnus": 0.08 },
			"sound": "draconis:sounds/flying"
		},
		{
			"code": "dive",
			"environment": "air",
			"descendSpeed": 10,
			"staminaCost": 0.0,
			"fallbackGaitCode": "hover",
			"movespeedByType": { "*-autmnus": 0.025 },
			"sound": "draconis:sounds/glide"
		},

		{
			"code": "jump",
			"environment": "land",
			"yawMultiplier": 1,
			"staminaCost": 0.0,
			"movespeedByType": { "*-autumnus": 0.16 }
		},

		{
			"code": "swimback",
			"environment": "sea",
			"yawMultiplier": 1,
			"backwards": true,
			"movespeedByType": { "*-autumnus": 0.012 }
		},
		{
			"code": "swim",
			"environment": "sea",
			"yawMultiplier": 1,
			"movespeedByType": { "*-autumnus": 0.012 }
		}
	]
}

 

behaviorConfigs > jaunt:stamina

maxStamina - The entity's maximum stamina value

sprintFatigue - Fatigue rate applied when the animal is sprinting (separate from the gait fatigue rates specified in each gait). Currently applies when fleeEntityTaskAi is active.

swimFatigue - Fatigue rate applied when the animal is swimming

baseFatigueRate - A multiplier for all fatiguing actions

staminaRegenRate - A multiplier for stamina regen

dontFleeWhenExhausted - Prevents the fleeEntityTaskAi from starting when the entity is below the exhaustionThreshold

regenPenaltyWounded - Penalty reduction from the staminaRegenRate for entities with health below 70%

regenPenaltyMounted - Penalty reduction from the staminaRegenRate for entities while mounted.

exhaustionThreshold - The stamina threshold percentage (0.1 = 10%) at which exhaustion is toggled. Currently used for fleeEntityTask overrides.

 

"jaunt:stamina": {
	"maxStamina": 100,
	"sprintFatigue": 0.2,
	"swimFatigue": 0.2,
	"baseFatigueRate": 1,
	"staminaRegenRate": 1,
	"dontFleeWhenExhausted": true,
	"regenPenaltyWounded": 0.5,
	"regenPenaltyMounted": 0.3,
	"exhaustionThreshold": 0.1
},

 

behaviorConfigs > jaunt:rideable

behaviorConfigs > jaunt:rideable

The rideable config options are very similar to the vanilla setup, with a few added items. 

rideableGaitOrder - Ordered array of gaits to be used for riding, should always be ordered from most negative (backwards) to most positive movement speed.

 

controls - The rideable controls dict supports adding any of the available gaits as an additional control, with some extra configuration items for how to pass that information into the gate and stamina systems.

    moveSpeedMultiplier - float value that applies a multiplier to the gait's movespeed

    moveSpeed - override option for raw movespeed, overrides the gait's movespeed. Setting this will ignore movespeeds specified per gait and movespeedmultipliers set here

 

jaunt:rideable": {
	"interactMountAnySeat": false,
	"seats": [
		{ "apName": "Rider", "selectionBox": "MidAP", "bodyYawLimit": 0.2, "controllable": true,
			"mountOffsetByType": { "*-female-autumnus": { "x":-0.1, "y":-0.4, "z":0}, "*-male-autumnus": { "x":-0.17, "y":-0.57, "z":0},
				"*": { "x":0, "y":-0.4, "z":0} } }
	],
	"rideableGaitOrder": ["walkback", "idle", "walk", "sprint"],
	"flyableGaitOrder": [ "flyback", "hover", "glide", "glideflap", "fly" ],
	"controls": {
		"walkback": {
			"movespeedmultiplier": 1,
			"animation": "WalkBack",
			"weight": 10,
			"animationSpeedByType": {
				"*-autumnus": 1.2
			},
			"easeInSpeed": 1,
			"easeOutSpeed": 3,
			"blendMode": "Average",
			"riderAnim": {
				"animation": "ridewyvern-rideground",
				"animationSpeed": 1,
				"weight": 1,
				"withFpVariant": true,
				"blendMode": "Average",
				"elementWeight": {
					"LowerTorso": 80,
					"UpperTorso": 80,
					"UpperFootR": 80,
					"UpperFootL": 80,
					"LowerFootR": 80,
					"LowerFootL": 80
				},
				"elementBlendMode": {
					"LowerTorso": "Average",
					"UpperTorso": "Average",
					"UpperFootR": "Average",
					"UpperFootL": "Average",
					"LowerFootR": "Average",
					"LowerFootL": "Average"
				}
			}
		},
		"idle": {
			"weight": 1,
			"riderAnim": {
				"animation": "ridewyvern-rideground",
				"animationSpeed": 1,
				"weight": 1,
				"withFpVariant": true,
				"blendMode": "Average",
				"elementWeight": {
					"LowerTorso": 80,
					"UpperTorso": 80,
					"UpperFootR": 80,
					"UpperFootL": 80,
					"LowerFootR": 80,
					"LowerFootL": 80
				},
				"elementBlendMode": {
					"LowerTorso": "Average",
					"UpperTorso": "Average",
					"UpperFootR": "Average",
					"UpperFootL": "Average",
					"LowerFootR": "Average",
					"LowerFootL": "Average"
				}
			}
		},
		"walk": {
			"movespeedmultiplier": 1,
			"animation": "Walk",
			"weight": 10,
			"animationSpeedByType": {
				"*-autumnus": 1.125
			},
			"blendMode": "Average",
			"riderAnim": {
				"animation": "ridewyvern-rideground",
				"animationSpeed": 1,
				"weight": 1,
				"withFpVariant": true,
				"blendMode": "Average",
				"elementWeight": {
					"LowerTorso": 80,
					"UpperTorso": 80,
					"UpperFootR": 80,
					"UpperFootL": 80,
					"LowerFootR": 80,
					"LowerFootL": 80
				},
				"elementBlendMode": {
					"LowerTorso": "Average",
					"UpperTorso": "Average",
					"UpperFootR": "Average",
					"UpperFootL": "Average",
					"LowerFootR": "Average",
					"LowerFootL": "Average"
				}
			}
		},
		"sprint": {
			"movespeedmultiplier": 0.75,
			"animation": "Run",
			"easeOutSpeed": 4,
			"weight": 10,
			"animationSpeedByType": {
				"*-autumnus": 3
			},
			"blendMode": "Average",
			"riderAnim": {
				"animation": "ridewyvern-rideground",
				"animationSpeed": 2,
				"weight": 1,
				"withFpVariant": true,
				"blendMode": "Average",
				"elementWeight": {
					"LowerTorso": 80,
					"UpperTorso": 80,
					"UpperFootR": 80,
					"UpperFootL": 80,
					"LowerFootR": 80,
					"LowerFootL": 80
				},
				"elementBlendMode": {
					"LowerTorso": "Average",
					"UpperTorso": "Average",
					"UpperFootR": "Average",
					"UpperFootL": "Average",
					"LowerFootR": "Average",
					"LowerFootL": "Average"
				}
			}
		},

		"flyback": {
			"movespeedmultiplier": 1,
			"animation": "Hoverback",
			"weight": 10,
			"animationSpeedByType": {
				"*-autumnus": 1.2
			},
			"easeInSpeed": 1,
			"easeOutSpeed": 3,
			"blendMode": "Average",
			"riderAnim": {
				"animation": "ridewyvern-hover",
				"animationSpeed": 1,
				"weight": 1,
				"withFpVariant": true,
				"blendMode": "Average",
				"elementWeight": {
					"LowerTorso": 80,
					"UpperTorso": 80,
					"UpperFootR": 80,
					"UpperFootL": 80,
					"LowerFootR": 80,
					"LowerFootL": 80
				},
				"elementBlendMode": {
					"LowerTorso": "Average",
					"UpperTorso": "Average",
					"UpperFootR": "Average",
					"UpperFootL": "Average",
					"LowerFootR": "Average",
					"LowerFootL": "Average"
				}
			}
		},
		"hover": {
			"weight": 1,
			"animation": "Hover",
			"riderAnim": {
				"animation": "ridewyvern-hover",
				"animationSpeed": 1,
				"weight": 1,
				"withFpVariant": true,
				"blendMode": "Average",
				"elementWeight": {
					"LowerTorso": 80,
					"UpperTorso": 80,
					"UpperFootR": 80,
					"UpperFootL": 80,
					"LowerFootR": 80,
					"LowerFootL": 80
				},
				"elementBlendMode": {
					"LowerTorso": "Average",
					"UpperTorso": "Average",
					"UpperFootR": "Average",
					"UpperFootL": "Average",
					"LowerFootR": "Average",
					"LowerFootL": "Average"
				}
			}
		},
		"glide": {
			"movespeedmultiplier": 0.9,
			"animation": "Glide",
			"easeOutSpeed": 4,
			"weight": 10,
			"animationSpeedByType": {
				"*-autumnus": 2
			},
			"blendMode": "Average",
			"riderAnim": {
				"animation": "ridewyvern-ride",
				"animationSpeed": 2,
				"weight": 1,
				"withFpVariant": true,
				"blendMode": "Average",
				"elementWeight": {
					"LowerTorso": 80,
					"UpperTorso": 80,
					"UpperFootR": 80,
					"UpperFootL": 80,
					"LowerFootR": 80,
					"LowerFootL": 80
				},
				"elementBlendMode": {
					"LowerTorso": "Average",
					"UpperTorso": "Average",
					"UpperFootR": "Average",
					"UpperFootL": "Average",
					"LowerFootR": "Average",
					"LowerFootL": "Average"
				}
			}
		},
		"glideflap": {
			"movespeedmultiplier": 0.85,
			"animation": "GlideFlap",
			"easeOutSpeed": 4,
			"weight": 10,
			"animationSpeedByType": {
				"*-autumnus": 2
			},
			"blendMode": "Average",
			"riderAnim": {
				"animation": "ridewyvern-ride",
				"animationSpeed": 2,
				"weight": 1,
				"withFpVariant": true,
				"blendMode": "Average",
				"elementWeight": {
					"LowerTorso": 80,
					"UpperTorso": 80,
					"UpperFootR": 80,
					"UpperFootL": 80,
					"LowerFootR": 80,
					"LowerFootL": 80
				},
				"elementBlendMode": {
					"LowerTorso": "Average",
					"UpperTorso": "Average",
					"UpperFootR": "Average",
					"UpperFootL": "Average",
					"LowerFootR": "Average",
					"LowerFootL": "Average"
				}
			}
		},
		"fly": {
			"movespeedmultiplier": 0.75,
			"animation": "Fly",
			"weight": 10,
			"animationSpeedByType": {
				"*-autumnus": 1.125
			},
			"blendMode": "Average",
			"riderAnim": {
				"animation": "ridewyvern-ride",
				"animationSpeed": 1,
				"weight": 1,
				"withFpVariant": true,
				"blendMode": "Average",
				"elementWeight": {
					"LowerTorso": 80,
					"UpperTorso": 80,
					"UpperFootR": 80,
					"UpperFootL": 80,
					"LowerFootR": 80,
					"LowerFootL": 80
				},
				"elementBlendMode": {
					"LowerTorso": "Average",
					"UpperTorso": "Average",
					"UpperFootR": "Average",
					"UpperFootL": "Average",
					"LowerFootR": "Average",
					"LowerFootL": "Average"
				}
			}
		},

		"jump": {
			"movespeedmultiplier": 0.75,
			"animation": "Hover",
			"weight": 100,
			"blendMode": "Average",
			"animationSpeed": 1.4,
			"easeOutSpeed": 40,
			"easeInSpeed": 40,
			"riderAnim": {
				"animation": "ridewyvern-ride",
				"animationSpeed": 1,
				"weight": 10,
				"withFpVariant": true,
				"blendMode": "Average",
				"elementWeight": {
					"LowerTorso": 160,
					"UpperTorso": 160,
					"UpperFootR": 160,
					"UpperFootL": 160,
					"LowerFootR": 160,
					"LowerFootL": 160
				},
				"elementBlendMode": {
					"LowerTorso": "Average",
					"UpperTorso": "Average",
					"UpperFootR": "Average",
					"UpperFootL": "Average",
					"LowerFootR": "Average",
					"LowerFootL": "Average"
				}
			}
		},

		"swim": {
			"movespeedmultiplier": 1,
			"animation": "Swim",
			"animationSpeed": 1,
			"weight": 10,
			"blendMode": "Average",
			"riderAnim": {
				"animation": "ridewyvern-ride",
				"animationSpeed": 1,
				"weight": 1,
				"withFpVariant": true,
				"blendMode": "Average",
				"elementWeight": {
					"LowerTorso": 80,
					"UpperTorso": 80,
					"UpperFootR": 80,
					"UpperFootL": 80,
					"LowerFootR": 80,
					"LowerFootL": 80
				},
				"elementBlendMode": {
					"LowerTorso": "Average",
					"UpperTorso": "Average",
					"UpperFootR": "Average",
					"UpperFootL": "Average",
					"LowerFootR": "Average",
					"LowerFootL": "Average"
				}
			}
		},
		"swimback": {
			"movespeedmultiplier": 1,
			"animation": "Swim",
			"animationSpeed": 1,
			"weight": 10,
			"blendMode": "Average",
			"riderAnim": {
				"animation": "ridewyvern-ride",
				"animationSpeed": 1,
				"weight": 1,
				"withFpVariant": true,
				"blendMode": "Average",
				"elementWeight": {
					"LowerTorso": 80,
					"UpperTorso": 80,
					"UpperFootR": 80,
					"UpperFootL": 80,
					"LowerFootR": 80,
					"LowerFootL": 80
				},
				"elementBlendMode": {
					"LowerTorso": "Average",
					"UpperTorso": "Average",
					"UpperFootR": "Average",
					"UpperFootL": "Average",
					"LowerFootR": "Average",
					"LowerFootL": "Average"
				}
			}
		}
	}
}

Mod Version Mod IdentifierFor Game version Downloads Released Changelog Download 1-click mod install*
2.1.1 jaunt
1.21.2 - 1.21.4
21589 Oct 7th at 1:01 PM jaunt_2.1.1.zip 1-click install

Recompile against 1.21.2, since the gait code changed

2.1.0 jaunt 7312 Sep 29th at 11:47 PM jaunt_2.1.0.zip 1-click install

Update for 1.21.2-rc.2. Expected to still work on 1.21.1, probably.

2.1.0-rc.1 jaunt
1.21.0-rc.6 - 1.21.0
18838 Aug 29th at 9:25 PM jaunt_2.1.0-rc.1.zip 1-click install
  • Add saddle break functionality
    • Very similar to vanilla saddle breaks
    • Does not block wander task on entities with RemainingSaddleBreaks > 0
    • If "Buck" animation is defined it does a coin toss between jumping or bucking during the saddle break action
  • Jaunt flute now has durability, default 500. Durability cost scales with distance to entity you are summoning (Durability Cost = Math.Max(Distance / 20, 1))
  • Jaunt flute binding messages no longer requires custom lang strings, instead references entity group name
  • Additional failure messages for jaunt flute behaviors
2.0.0 jaunt 11224 Aug 2nd at 9:31 PM jaunt_2.0.0.zip 1-click install
  • Add custom bone flute that allows binding to any ownable creature group
  • Custom bone flute has two tool modes
    • Play - plays the flute, if bound calls the bound entity
    • Bind - right clicking an entity will bind the flute to that entity group
2.0.0-rc.8 jaunt 664 Aug 1st at 1:15 AM jaunt_2.0.0-rc.8.zip 1-click install
  • Properly migrate old icon placements
2.0.0-rc.7 jaunt 26 Aug 1st at 12:53 AM jaunt_2.0.0-rc.7.zip 1-click install
  • Update icon placement for better compatibility
2.0.0-rc.6 jaunt 2719 Jul 30th at 5:04 PM jaunt_2.0.0-rc.6.zip 1-click install
  • Adds flying gait support
  • Heavy overhaul of gait system for further extensibility
  • Flying controls are now available (Jump to ascend, Sneak to descend)
  • New entity class for flying mounts (EntityFlyingAgent)
  • YawMultiplier replaces TurnRadius, and actually impacts mount movement
  • Hotkeys added for future additional controls
1.1.7 jaunt
1.20.11 - 1.20.12
4770 Jul 12th at 2:37 AM jaunt_1.1.7.zip 1-click install
  • Add config versioning system
  • Disable DebugMode for existing users
1.1.6 jaunt
1.20.11 - 1.20.12
3415 Jul 5th at 5:30 AM jaunt_1.1.6.zip 1-click install
  • Dispose of gait sounds on gait change (should fix OpenAL buffer limit crash)
  • Default debug to false
  • Properly apply global swim/sprint multipliers
1.1.5 jaunt
1.20.11 - 1.20.12
3454 Jun 21st at 2:33 AM jaunt_1.1.5.zip 1-click install
  • Fix black box hud icon on world reload
1.1.4 jaunt
1.20.11 - 1.20.12
537 Jun 19th at 9:11 PM jaunt_1.1.4.zip 1-click install
  • Fix swimback to walkback transition
  • Update sample entity json
1.1.2 jaunt
1.20.11 - 1.20.12
32 Jun 19th at 8:19 PM jaunt_1.1.2.zip 1-click install
  • Better transitions between swimming and walking
  • Fix hud icon texture rendering issue
  • Various bugfixes and code cleanup
1.1.0 jaunt
1.20.11 - 1.20.12
263 Jun 15th at 5:31 PM jaunt_1.1.0.zip 1-click install
  • Split gait and rideable behaviors
  • Gaits are no longer restricted to four forward gaits
  • Any number of gaits can be defined
  • Rideable can override movespeed or apply a movespeedmultiplier to the gait's movespeed
  • Fallback gait transitions are now configurable for a given gait
1.0.0-pre.7 jaunt
1.20.11 - 1.20.12
300 Jun 8th at 6:18 PM jaunt_1.0.0-pre.7.zip 1-click install
  • Update default icons (easier to read for non-horse folk)
  • Fix overlapping render composer name with Equus versions pre-jaunt
1.0.0-pre.6 jaunt 116 Jun 8th at 4:24 AM jaunt_1.0.0-pre.6.zip 1-click install
  • Initial release

52 Comments (oldest first | newest first)

💬 SiiMeR, 3 days ago (modified 3 days ago)

Can the saddle break functionality be turned off?

EDIT: Sorry I misunderstood what that means, nvm

💬 CounterFail, Nov 18th at 8:56 PM

Ive had a look and not seen anyone else mention this, does anyone else find that mounts turn way to quickly? i have to slightly tap A and D to not turn too fast, it isnt gamebreaking but it feels off, is this a bug or just how the mod is?

💬 Ket, Nov 4th at 7:47 PM

Can you make the flute changes configurable?

💬 blazer232, Nov 3rd at 2:32 PM

Looks like for whatever reason the flute has durability when using this mod. I didn't see it in the description, so I just figured it was a bug, would love for it to be fixed soon!

💬 Marshy, Nov 2nd at 3:19 PM (modified Nov 2nd at 3:24 PM)

Just here to say I'd also like it if we could disable / configure the one-and-done bone flutes.

💬 Ouk, Oct 16th at 9:17 AM (modified Oct 16th at 1:29 PM)

@diarko This is probably vanilla bug starts with version 1.21.2

After testing vanilla versions 1.21.0-1.21.5 I found out the problem starts with version 1.21.2:
When I press forward key and immediately sprint button, elk with snaffle wont run BUT by pressing forward, wait for about 1 sec and then press the sprint key it works
For me, this problem is more apparent when the toggle sprint setting is ON. Curb briddle is ok. 

VS version 1.21.1 with Jaunt works as intended, all later versions don't.

Edit:

https://github.com/anegostudios/VintageStory

-Issues/issues/7336

💬 Ahrondus, Oct 14th at 12:26 AM

👀

Dropping some eyes here..

Peepin'..

 

Creepin'..

💬 Zxynix, Oct 13th at 5:14 PM

Couldnt figure out why my flute breaks, so googling lead me here... Why is it breaking with this mod? Why is this a thing? How do I turn it off?

💬 Diarko, Oct 9th at 5:26 AM

Yeah my other friends are having same issue where moving up and down on the gaits is very inconsistent and skips by two.

💬 JujuBinks, Oct 8th at 10:53 AM

Hey, great mod!

I've got a weird bug. The hay bed doesn't show up on the tamed elk when stored on the back. I thought it was the Elk Jaunt Integration mod but even after uninstalling that mod it persisted.

Removing this mod fixes the issue completely. Anyone else seeing this as well?

💬 Diarko, Oct 8th at 3:26 AM

Im having an issue where the gaits are moving up and down twice, which is most of the time but not all.

💬 eerino, Oct 7th at 12:43 AM (modified Oct 7th at 12:44 AM)

MollyMaverick same here also unable to use bone flute. Just downloaded this today and was very dissapointed. I'm glad it isnt intentional!!

💬 Chumber, Oct 1st at 12:59 AM

Having the same issue as Codemonkey. Only the global max stamina modifier seems to actually do anything, nothing else works to change the stamina usage, and setting it to false doesn't disable it. Also, please add an option to disable breaking of the bone flute. It's a jarring change that I couldn't figure out the origin of, and the jaunt flute doesn't seem to work.

💬 MollyMaverick, Sep 27th at 8:52 PM

The jaunt flute does not seem to work at all for me. It never changes to the animal's name when trying to bind. Just says "flute bound to mountable group: Mountableanimal". It doesn't summon them anywhere. 

💬 R0D96, Sep 26th at 4:44 AM

does the bone flute allow the horses to be summoned from very far away?

💬 Codemonkey03, Sep 24th at 1:01 AM

I've attempted to edit the stamina values and failing to see any change doing so I set stamina to false but no matter what none of these changes seem to be taking.

💬 Kara, Sep 23rd at 8:08 PM

Not sure if this is your mod doing this, for vanilla, but i was not seeing this error, until i added your mod into my server. FIgured i should at least say something.

Spoiler!
23.9.2025 15:06:52 [Server Warning] Entity attachable shape game:item/wearable/hooved/strawbed defined in Block game:bed-hay-h
ead-north not found or errored, was supposed to be at game:shapes/item/wearable/hooved/strawbed.json. Shape will be invisible.
💬 Kara, Sep 22nd at 8:12 PM (modified Sep 22nd at 8:12 PM)

may we get a config to disable the flute's breaking after use? the player base is not happy about their flutes being suddenly breaking >.<

💬 MedicalPouch, Aug 31st at 11:24 PM

@safwyl thanks boss! and thanks for the heads up!

💬 animatiV, Aug 30th at 6:06 PM

Thank you :) And thank you also for working on the mod.

💬 safwyl , Aug 30th at 6:00 PM (modified Aug 30th at 6:00 PM)

animatiV I do! But we just released a new version with a few more lang strings if you want to revise it before I add edit: Just saw your edit, will add this in my next release

MedicalPouch you should be able to set the jaunt flute to bind mode (tool modes with F) then right click the cart entity. But a word of caution, Freaky (Cartwright author) is going to be disallowing binding on the carts in a future update, he actualy asked me to add a disallowed bindings config for the flute lol

💬 MedicalPouch, Aug 30th at 7:38 AM (modified Aug 30th at 8:03 AM)

Hey Boss ive seen folks talking about how the jaunt flute works with the carts mod for the time being. any clarification on how to bind it so it works with the cart?

 

💬 animatiV, Aug 28th at 4:07 PM (modified Aug 30th at 5:14 PM)
pl.json

{
"debug-stamina-init": "[Jaunt] Inicjowanie zachowania wytrzymałości dla istoty {0}",
"debug-rideable-init": "[Jaunt] Inicjowanie zachowania umożliwiającego jazdę dla istoty {0}",

"ingame-error-too-wild": "To zwierzę jest zbyt dzikie by na nim jeździć",
"ingame-error-no-entitysel": "Istota nie została wybrana",
"ingame-error-disallowed-entity": "Nie można powiązać {0} z fletem, być może odpowie na inny instrument?",
"ingame-error-unownable-entity": "{0} nie można posiadać, a zatem nie można go powiązać z fletem.",
"discovery-bound-entity": "Powiązanie fletu dla grupy wierzchowców: {0}",

"infotext-stamina-state": "Wytrzymałość: {0:0.##}/{1:0.##}",
"infotext-stamina-sprint-fatigue": "Zużycie wytrzymałości w trakcie biegu: {0}",
"infotext-stamina-swim-fatigue": "Zużycie wytrzymałości w trakcie pływania: {0}",

"instrument-skill-bind": "Powiąż instrument",
"instrument-skill-play": "Zagraj na instrumencie",

"groupcode-unbound": "Nie powiązany",
"groupcode-ferus": "Dzikie konie",
"groupcode-wyvern": "Wiwerny",
"groupcode-mountableanimal": "Wapiti",

"instrument-descprepend-unbound": "Nie jest powiązany z żadną konkretną grupą istot.",
"instrument-descprepend-ferus": "Może zostać użyty by przywołać dzikie konie",
"instrument-descprepend-wyvern": "Może zostać użyty by przywołać wiwerny i smoki",
"instrument-descprepend-mountableanimal": "Może zostać użyty by przywołać wapiti",
"item-instrument-flute": "Flet podróżniczy"
}

(upd. for 2.1.0-rc.1)

I don't know if you accept translations, but I did one into Polish. 

You can add them in the next update :)

 
 

 

 

💬 Sahlokhviir, Aug 27th at 9:40 PM

the mod will be updated to 1.21 right?

💬 safwyl , Aug 22nd at 4:45 PM

thenobodysheep this is a vanilla bug, the game resyncs the entire attribute tree for players/entities if the number exceeds a certain quantity (10). this happens quite frequently with mods added, you can try this mod which should fix it: https://news.kalataka.ru/show/mod/25755

💬 thenobodysheep, Aug 21st at 9:12 PM

I've been using this mod for a minute and occasionally when I ride my elk.
I stop for no obvious clear reason, I'm trying to figure out why that's the case.

💬 safwyl , Aug 7th at 7:47 PM

Alhef edit jaunt.json in ModConfig folder and set "EnableStamina": false

💬 Alhef, Aug 7th at 3:37 AM

I need to disable stamina, how can I disable it?

💬 safwyl , Aug 6th at 11:05 PM

_Ale1ster try resetting your controls to the default, then set them back to what you want. I've seen this sometimes the control remappings break and the sprint key no longer works as intended. Let me know if that doesn't work

💬 _Ale1ster, Aug 6th at 2:24 AM (modified Aug 10th at 5:43 PM)

Sweet mod. I've run into an issue while riding a horse from equus where I can trot when pushing the spring key, but I can't canter or gallop when continuing to push sprint. I had the mod working very well for quite a while and this cropped up seemingly randomly. All I have done to the game recently is downgrade combat overhaul to  work around a ctd issue from using any range weapons but I don't imagine that's it. I'm just curious if there are any ideas of how I could fix it, I have replaced the mods and all dependencies with freshly downloaded copies and deleted the configs for each to no effect.

 

Thanks safwyl. Trying this didn't work, but I spawned a new horse in creative and gave it a saddle and bit. it was able to canter and gallop just fine and then my horse was as well after I had previously tried multiple times to fix my horse before the creative route and basically gave up for a while. Just in case anyone else has this problem.

💬 Flint_N_Steel, Aug 1st at 12:33 PM

Very cool mod and very well explained, thank you for your contributions to this nice little community we got going!

💬 MagentaLizard, Jul 31st at 11:56 AM

Its eternity in there

💬 safwyl , Jul 30th at 9:51 PM

AgentOfChaos more ram wont help unfortunately, the limit is hard coded in the game and has more to do with network latency than system performance

💬 AgentOfChaos, Jul 30th at 8:50 PM

Thanks. Ill also see if more ram is gonna help.

 

💬 safwyl , Jul 30th at 4:31 PM

AgentOfChaos this is due to an attribute sync issue with the base game, when enough attributes are changed the game resyncs all of them but this causes some things to break like mounted camera angle, current gait selection, etc. 

My current recommended workaround is this mod: https://news.kalataka.ru/show/mod/25755

This can have some impact on users with high network latency in multiplayer but it's much better than without it imo, we use it on my server.

💬 AgentOfChaos, Jul 30th at 7:15 AM

with the current version with both equuus and jaunt elk intergration the elk and horse both get frozen on a random block like every 2-4 seconds. idk why nothing else in the mod list changes anything related to mounts besides health and elk aggression.

 

💬 andreslucero, Jul 17th at 3:46 AM

@safwyl you're quite right, sorry!

💬 safwyl , Jul 16th at 9:44 PM

andreslucero make sure you're on the latest version of Equus this was fixed in 1.1.9

💬 andreslucero, Jul 15th at 7:05 AM

I'm getting a strange error that results in my horse despawning alongside with everything it's carrying! It always happens when I'm riding and go into shallow water.

 

Crash Report
System.Collections.Generic.KeyNotFoundException: The key swimback was not found
at Vintagestory.API.Datastructures.FastSmallDictionary`2.get_Item(TKey key) in VintagestoryApi\Datastructures\Dictionary\FastSmallDictionary.cs:line 71
at Jaunt.Behaviors.EntityBehaviorJauntRideable.UpdateRidingState() in C:\Users\sstep\source\jaunt\Jaunt\Behaviors\EntityBehaviorJauntRideable.cs:line 401
at Jaunt.Behaviors.EntityBehaviorJauntRideable.OnGameTick(Single dt) in C:\Users\sstep\source\jaunt\Jaunt\Behaviors\EntityBehaviorJauntRideable.cs:line 680
at Vintagestory.API.Common.Entities.Entity.OnGameTick(Single dt) in VintagestoryApi\Common\Entity\Entity.cs:line 1106
at Vintagestory.API.Common.EntityAgent.OnGameTick(Single dt) in VintagestoryApi\Common\Entity\EntityAgent.cs:line 602
at Vintagestory.Client.NoObf.ClientSystemEntities.OnGameTick(Single dt) in VintagestoryLib\Client\Systems\Entities.cs:line 107
at Vintagestory.Common.GameTickListener.OnTriggered(Int64 ellapsedMilliseconds) in VintagestoryLib\Common\Model\GameTickListener.cs:line 31
at Vintagestory.Common.EventManager.TriggerGameTick(Int64 ellapsedMilliseconds, IWorldAccessor world) in VintagestoryLib\Common\EventManager.cs:line 174
at Vintagestory.Client.NoObf.ClientMain.MainRenderLoop(Single dt) in VintagestoryLib\Client\ClientMain.cs:line 825
at Vintagestory.Client.GuiScreenRunningGame.RenderToPrimary(Single dt) in VintagestoryLib\Client\MainMenu\Screens\GuiScreenRunningGame.cs:line 161
at Vintagestory.Client.ScreenManager.Render(Single dt) in VintagestoryLib\Client\ScreenManager.cs:line 695
at Vintagestory.Client.ScreenManager.OnNewFrame(Single dt) in VintagestoryLib\Client\ScreenManager.cs:line 670
at Vintagestory.Client.NoObf.ClientPlatformWindows.window_RenderFrame(FrameEventArgs e) in VintagestoryLib\Client\ClientPlatform\GameWindow.cs:line 88
at OpenTK.Windowing.Desktop.GameWindow.Run()
at Vintagestory.Client.ClientProgram.Start(ClientProgramArgs args, String[] rawArgs) in VintagestoryLib\Client\ClientProgram.cs:line 334
at Vintagestory.Client.ClientProgram.<>c__DisplayClass10_0.<.ctor>b__1() in VintagestoryLib\Client\ClientProgram.cs:line 130
at Vintagestory.ClientNative.CrashReporter.Start(ThreadStart start) in VintagestoryLib\Client\ClientPlatform\ClientNative\CrashReporter.cs:line 93
💬 stormtrooper_34, Jul 5th at 8:55 AM

safwyl seems to be fine. Can't say I tested it thoroughly, though

💬 safwyl , Jul 5th at 5:31 AM

stormtrooper_34 should be fixed in 1.1.6, let me know if you still experience issues

💬 safwyl , Jul 5th at 5:05 AM

stormtrooper_34 thank you for this detailed bug report, working on a fix now. Looks like mount sounds weren't getting properly disposed when changing.

💬 stormtrooper_34, Jul 4th at 1:57 PM

UPD: NOT THIS MOD'S FAULT, IT WAS CARTWRIGHTS CARAVAN. It messed up elk's sound
UPD2: No, problem persists. Without Cartwright's Caravan sounds of riding are back, but after some time (usually, mounted combat) all sounds are gone and it happends only on horse
After some more testing, it seems that aggressive combat with lots of manuvering and speed switching or getting attacked while riding causes that. I couldn't recreate bug in creative, but fully generated surivival world did the trick


It seems, jaunt crashes OpenAL and makes game completely mute

At first it produces them "properly", but with no actual sound played in game:

Crash Report
4.7.2025 16:23:49 [Notification] [jaunt] Now playing sound: game:sounds/creature/hooved/trot
4.7.2025 16:23:51 [Notification] [jaunt] Now playing sound: game:sounds/creature/hooved/trot
4.7.2025 16:23:52 [Notification] [jaunt] Now playing sound: game:sounds/creature/hooved/trot
4.7.2025 16:23:53 [Notification] [jaunt] Now playing sound: game:sounds/creature/hooved/trot
4.7.2025 16:23:53 [Notification] [jaunt] Now playing sound: game:sounds/creature/hooved/trot
4.7.2025 16:23:54 [Notification] [jaunt] Now playing sound: game:sounds/creature/hooved/trot
4.7.2025 16:23:55 [Notification] [jaunt] Now playing sound: game:sounds/creature/hooved/trot



But after some time OpenAL fails due to overloaded sound schedule and stops producing any sounds at all:

Crash Report
4.7.2025 16:29:04 [Notification] [jaunt] Now playing sound: game:sounds/creature/hooved/trot
4.7.2025 16:29:05 [Notification] [jaunt] Now playing sound: game:sounds/creature/hooved/trot
4.7.2025 16:29:06 [Notification] [jaunt] Now playing sound: game:sounds/creature/hooved/trot
4.7.2025 16:29:09 [Notification] Play sound game:sounds/environment/mediumsplash skipped because max concurrent sounds of 250 reached (1 more skipped)
4.7.2025 16:29:09 [Notification] [jaunt] Side: Server, Meta: walk
4.7.2025 16:29:09 [Notification] [jaunt] Now playing sound: game:sounds/creature/hooved/trot
4.7.2025 16:29:09 [Notification] [jaunt] Side: Client, Meta: walk
4.7.2025 16:29:11 [Notification] [jaunt] Side: Server, Meta: trot
4.7.2025 16:29:11 [Notification] [jaunt] Side: Client, Meta: trot
4.7.2025 16:29:11 [Error] Could not load sound game:sounds/creature/hooved/trot.ogg
4.7.2025 16:29:11 [Error] Exception: Unable to get sourceId
at Vintagestory.Client.LoadedSoundNative.createSoundSource() in VintagestoryLib\Client\ClientPlatform\ClientNative\LoadedSound.cs:line 332
4.7.2025 16:29:11 [Warning] OpenAL Error during construction of sound game:sounds/creature/hooved/trot.ogg: OutOfMemory


It may be some sort of incomatibility with other mods or something, but I have no clue what could cause it

💬 CherryRook, Jun 26th at 4:34 AM

Is there a way to make gait controls use double press W/S ? I use normal sprint on foot but im kinda used to double pressing W and S from Mount&Blade: Bannerlord. Otherwhise cool mod, thank you a lot for this system ! :)

💬 safwyl , Jun 25th at 6:24 PM

Jonizhere ah i found the issue, right now you have to check "Mouse click modifiers locked to Sneak/Sprint keys" in order for the remap to work. I'll see if I can fix that for the next release though

💬 Jonizhere, Jun 24th at 11:59 PM

safwyl That's interesting! I've switched my sprint and sneak keys, but it didn't transfer while riding an elk.

It only worked when I've switched the keys back to their default settings.

💬 safwyl , Jun 24th at 4:06 PM

Jonizhere at the moment it should respect rebinds for Shift/Ctrl and movement keys. But there's no way to split them from Seraph movement controls. 

What were you wanting to change exactly?

💬 Jonizhere, Jun 24th at 4:38 AM

Is it possible to change controls? The option doesn't appear to pop up.

💬 safwyl , Jun 23rd at 6:29 PM

Silverfang same here for now, I'm not currently modifying the vanilla jump behavior

💬 Silverfang, Jun 22nd at 7:27 PM

How does jumping work with this? I know Feverstone Wilds' horses could not jump over fences due to some vanilla coding.

💬 rhino1998, Jun 20th at 2:30 PM

Would it be possible to add stamina scaling by generation? So that higher generation animals can have higher max stamina/stamina regen?

💬 WolfWarrior, Jun 8th at 9:14 AM

amazing! 😲.

 (edit comment delete)
Основной веб-сайт | Почтовый сервер | FTP сервер | Административная панель | API интерфейс | Content Delivery Network | Статические файлы | Ресурсы сайта | Изображения | Файловое хранилище | Блог | Интернет-магазин | Техническая поддержка | Справочная система | Документация | Форум | Новости | Загрузки | Демонстрация | Тестовая среда | Приложение | Медиа контент | Разработка | Промежуточная среда | Бета версия | Безопасная зона | Вход в систему | Панель управления | Портал | Система управления контентом