Require( "animob/animob.ts" ) return AnimobAconf({ version = 1, -- All aconf files have a version number. We will be backwards compatable object = { productName = "Hoverboat", gameKitVehicleControls = { class = "Hoverboat", }, appearance = { modelName = "m000hboat_hboat01.model", modelSettings = { hull = { colormap = "hboat/t000hboat002a_usa.jpg", lit = 1, }, exhaust = { colormap = "hboat/t000hboat002a1_redxawst.jpg", animtype = 2, numstrips = 1, animloop = 0, lit = 0, numframes = 8, animspeed = 15, animarg = 0.0, }, floor = { colormap = "hboat/t000hboat_grate.jpg", cutoutmap = "hboat/t000hboatxx_gratechroma.png", lit = 1, }, }, }, animationTriggers = { default = { type = "emotion", emotionName = "em000hboato01_inactive", }, activated = { type = "emotion", emotionName = "em000hboato00_running", axes = { { axisName = "UiAxis", direction = "FB", axisScalar = 1.0, prevValueBlend = 0.95 }, { axisName = "TprAxis", direction = "LR", axisScalar = 1.0, prevValueBlend = 0.85 } }, }, }, }, appKeys = { -- Setting this to 1 displays the programmer art polygon version of -- the hoverboat. Otherwise set it to 0. debugRender = 0, -- Setting this to 1 displays a small hud in the upper right corner of -- the screen that shows speed and height above ground and/or other parameters. -- Otherwise set it to 0. debugRenderHud = 0, -- Setting this variable to 1 lets you drive from the back right seat -- instead of the driver seat. However the back right seat's animation -- is still appropriate for the back right rider, i.e., the avatar in -- the back right seat doesn't try to steer the vehicle. This feature -- is useful if you want to debug the passenger animation without requiring -- multiple avatars. The camera will still be the driver seat's camera. -- *** If you set this to 1, you must set "driver = 1" for the -- BackRight seat and "driver = 0" for the Driver seat, in the seats -- section below. *** When finished, make sure to change it back. debugDriveFromBackRight = 0, -- Above this height, I maintain absolute altitude instead of conforming to ground. -- This number has no implications on CPU performance. -- The range of possible values is 0 to 10m. hillHuggingHeight = 10.0, -- If the driver presses the forward button, the boat will rise until it gets -- to this height, and then it will start thrusting in the forward direction. -- Any height greater than hillHuggingHeight (above) will automatically -- be considered above the launchHeight, so there is no point in making the launch -- height greater than the hillHuggingHeight. launchHeight = 9.5, -- When a real hoverboat turns, its velocity keeps going in the same direction -- and the boat just slides sideways since there is no friction to stop it. Cars, -- on the other hand, have wheels. When a car turns, its wheels are able to -- bend the car's velocity to keep it moving in the direction it is heading. -- Our hoverboat's corneringAbility controls to what degree the hoverboat turns -- like a real hoverboat or turns like a car. If the corneringAbility is 0.0, -- the hoverboat has no turning ability. If the corneringAbility is 1.0, the -- hoverboat is able to turn like a car. The range of possible values -- is 0.0 to 1.0. corneringAbility = 0.01, -- Setting this positive makes the hoverboat drift down. The larger you make it -- the stronger the drifting tendency. You can also set it negative also. -- The range of possible values is -0.1 to 0.1. deadReckoningHeightBias = 0.000001, -- The pillow force that holds up the hoverboat tapers off at the top -- so that the hoverboat rests in the cushion smoothly. This variable -- is the thickness of the cushion from where it starts to taper off to -- where it is zero. Adjusting this variable affects how vertically -- bouncy the hoverboat is. The range of possible values is 0.5 to 5m. pillowRampThickness = 3.3, -- This is the force that holds up the hoverboat. The heavier the hoverboat, -- the more force you need. If you make this too small, the hoverboat may -- not be able to lift off the ground. If you make it too large, the hoverboat -- may be too buoyant. If the hoverboat is bouncy, you can adjust this -- variable and pillowRampThickness to try to settle it down. -- Range of possible values is 2000.0 to 10000.0. pillowForceMax = 4300.0, -- When the the boat is way above the top of the pillow and it falls into -- the pillow, we want the pillow to exert a strong force to cushion the fall -- and stop the descent. However, if the pillow continues exerting that strong -- force as the boat rises out of the pillow, then by the time the boat -- leaves the pillow it may have a significant upward velocity, essentially -- launching it back up into the air to a height from which it then falls back down -- into the pillow, thereby bobbing up and down. To avoid this problem, -- the pillow reduces the force it applies when the boat's velocity is already -- aiming up. If the boat's vertical velocity is down or zero, the pillow applies -- full force. If the boat's vertical velocity is up by pillowRampUpVelocityMax, -- then the pillow applies zero force. The pillow's force is interpolated in -- between those limits. Thus if you set pillowRampUpVelocityMax to a small number, -- like 0.1, the pillow will be able to stop the boat's descent but will only -- be able to lift it up vertically very slowly, because as soon as the boat gets -- even the slightest upward velocity, the force decreases. If you set the -- pillowRampUpVelocityMax to a large number, like 100.0, then the pillow will -- keep applying a significant force even as the boat has enough speed to launch up -- out of the pillow. You would generally want the pillow ramp to be able to accelerate -- the boat vertically at least to the "riseVel" speed (see below) so it can keep -- up with the rise of the pillow. Range of possible values is 0.1 to 100.0. pillowRampUpVelocityMax = 26.0, -- If the boat is just hovering close the ground, it can bounce around in a very -- unpleasant way. To prevent that, I make it land automatically if it is near -- enough to the ground and going slow enough. It will not land if the user is -- pressing up or thrust UI. The height threshold range of possible values is -- 0.0 to 10.0. If it is 0.0 or if it is >= 10.0 then then autolanding will be disabled. -- The speed is in meters per second. The speed range of possible values is 0.0 -- to 100.0. If it is 0.0 then autolanding is disabled. autoLandHeightThreshold = 5.0, autoLandSpeedThreshold = 3.0, -- The groundPlaneFriction slows down the hoverboat's motion in the ground plane, -- i.e., forward, back, left, or right, but it does not affect the hoverboat's -- vertical motion. The range of possible values is 0.0001 to 0.5. flyingGroundPlaneFriction = 0.0001, brakingGroundPlaneFriction = 0.00825, -- When flying faster than the speed limit, I increase the ground plane friction -- incrementally according to the excess speed. For each extra meter/second -- of speed, I increase the groundPlaneFriction by speedLimitFriction. The -- range of possible values for the speedLimit is 10.0 to 50.0, although at -- 50m/s the hoverboat may be travelling too fast for the sector logic to keep up -- so you must check with Ken for values over 30.0m/s. The speedLimitFriction -- range of possible values is 0.0001 to 0.01. speedLimit = 28.0, speedLimitFriction = 0.001, -- Limit the height to something above sea level. Keep in mind that this -- is height above sea level, not height above the ground, so if you set it to -- 100m, then the hoverboat won't be able to get air when it is on top of -- a mountain. We discovered with hoverpack that whatever this limit is, a user -- will eventually find it. Range of possible values is 100.0 to 50000. Note that -- 50000 is about as high as a Stealth bomber flies. altitudeAboveSeaLevelMax = 50000, -- This variable controls how fast the arrows keys turn the driver's -- goal ori. However, the hoverboat is not pinned to the driver's goal -- ori. The hoverboat rotates physically to try to match its ori to -- the driver's goal ori. Thus even if the keyboardTurnRate is very high, -- the hoverboat could turn sluggishly if it is tuned so that its rate -- of rotating physically to match the driver's goal ori is slow. -- Degrees per step for left/right arrow keys. Range of possible values is -- 0.1 to 5.0. keyboardTurnRate = 0.75, -- The back arrow only brakes when the boat is going faster than this, but also -- sinks if the boat is going slower than this. backSinkSpeed = 15.0, -- When you are thrusting forward or reverse (up or down arrow), I apply -- these forces to the balls. The force accelerates the vehicle in reverse -- proportion to the mass of the balls, so if you change the mass of the -- balls you will have to change the forces too. Range of possible values is -- 0.0 to 2000.0. forwardForce = 1700.0, backwardForce = 1700.0, -- If you rise or sink straight up or down (as opposed to climbing up or -- or down by flying forward with a non-zero pitch). Units are in Meters/second. -- 10m/s is approximately 20mph. Range of possible values is 0.0 to 100.0. riseVel = 13.0, sinkVel = 13.0, -- These camera tuning parameters affect the boat's chase camera. They -- supersede values in the camera section of the aconf, below. chaseCameraUpDistance = 3.3, chaseCameraBackDistance = 8.0, chaseCameraFocusPullTightness = 0.7, chaseCameraPitchFocusTightness = 0.7, chaseCameraPositionPullTightness = 1.0, chaseCameraUpOffset = 1.7, -- These camera tuning parameters affect the boat's fixed cameras. They -- supersede values in the camera section of the aconf, below. The -- fixed camera rotates around a position that is the animobPos (center -- of boat) plus a forward/up offset set below. fixedCameraUpDistance = 1.0, fixedCameraBackDistance = 6.0, fixedCameraFocusPullTightness = 1.0, fixedCameraPitchFocusTightness = 1.0, fixedCameraPositionPullTightness = 1.0, fixedCameraForwardOffset = 1.0, fixedCameraUpOffset = 1.7, -- The goalOri's range will be limited by these values. The springConstant -- controls how responsive the goalOri is to the movement of the mouse, in the -- range 0.0 to 1.0. A value of 1.0 makes the goalOri respond 100% -- to the mouse movements, as if it were massless. Lesser values make it catch up -- by that percentage. A value of 0.0 makes it completely unresponsive. You -- can tune the pitch responsiveness and heading responsiveness independently. goalOriPitchMin = -60.0, goalOriPitchMax = 30.0, goalOriPitchSpringConstant = 0.75, goalOriHeadingMin = -90.0, goalOriHeadingMax = 90.0, goalOriHeadingSpringConstant = 0.75, -- These camera tuning parameters affect the boat's overTheShoulder cameras. They -- supersede values in the camera section of the aconf, below. overTheShoulderCameraUpDistance = 0.0, overTheShoulderCameraBackDistance = 1.0, overTheShoulderCameraFocusPullTightness = 1.0, overTheShoulderCameraPitchFocusTightness = 1.0, overTheShoulderCameraPositionPullTightness = 1.0, -- The over the shoulder camera is at this offset from the rider's pos. Up -- and right are with respect to the rider's orientation. overTheShoulderCameraRightOffset = 0.25, overTheShoulderCameraUpOffset = 1.0, overTheShoulderCameraBackOffset = 0.0, -- When the driver's goalOri changes, the camera's beam will rotate -- along with it, but since the boat turns slowly and the goalOri turns -- quickly, I want to make the camera beam chase the goalOri rotation -- instead of being pegged to it exactly. A value of 1.0 means pegged. -- The smaller the value, the more sluggish the camera movement. -- Range of possible values is 0.0 to 1.0. chaseCameraOriChaseTightness = 0.02, fixedCameraOriChaseTightness = 0.05, -- When the driver's goalOri changes, the boat will apply forces to the balls -- to rotate the boat to face in the same direction as the driver's goalOri. -- The strength of these turn forces is specified by this variable. If the -- forces are too strong, then the boat will oversteer and oscillate. The -- centroidFriction is what keeps the boat from oscillating, so you can tune -- this along with the centroidFriction constant. Range of possible -- values is 100 to 1000. turnForce = 500.0, -- The turn force that is applied is scaled according to the angle difference -- between the boat's heading and the goal heading. Between 0.0 and 90.0 degrees, -- the force is interpolated between 0 and turnForce. That interpolation curve -- is not necessarily linear. It is nth degree polynomial, where n is -- the turnForceFalloff. Set the turnForceFalloff to 1.0 for linear interpolation. -- Set it to a small number like 0.1 for a curve that rises quickly from 0 to -- full force. Set the number to a large number like 10 for a curve that is -- rises very slowly until the heading is almost 90.0 degrees. Range of possible -- values is 0.01 to 100. turnForceFalloff = 0.6, -- CentroidFriction is fluid friction applied to the balls' velocity relative -- to the velocity of the boat (i.e., the average velocity of all the balls). -- High centroid friction causes the boat to spin as if it were in malasis. -- Low centroid friction allows the boat to oscillate as it tries to turn -- itself to face the goal ori. Range of possible values is ??? to ???. centroidFriction = 0.0625, -- The stabilizer force keeps the boat from tipping. It is applied -- vertically up or down to the balls when the boat tips off level. Range of possible -- values is 100 to 2000. stabilizerForce = 700.0, -- When the boat's goalHeading is different from the heading, it rolls on its side -- according to this parameter and according to the angular difference in heading -- between the boat's heading to the goalHeading. Range of possible values is 0.0 to 2.0. turnRollAmount = 0.5, -- When the user is thrusting, the boat can pitch forward or back according to this -- amount. Range of possible values is -1.0 to 1.0. The value 0.0 means no pitching. -- This value is calibrated differently from turnRollAmount since turnRollAmount takes -- into account a heading difference. thrustPitchAmount = - 0.2, -- When the user is braking, the boat can pitch forward or back according to this -- amount. Range of possible values is -1.0 to 1.0. The value 0.0 means no pitching. brakePitchAmount = 0.2, -- It seems to look better if the boat is generally pitched up a little bit. This -- variable adjusts the boat's default pitch. It is scaled down when the boat is near -- the ground, so it doesn't take full effect until the boat is 10m off the ground. -- It is calibrated in the same units as thrustPitchAmount. -- Range of possible values is -1.0 to 1.0. The value 0.0 means no pitching. pitchOffset = 0.1, -- When the passenger is in the boat and there is no driver, the passenger can -- still choose the chase camera. The case camera doesn't have a driver whose ori to -- follow, so the chase camera uses the boat's ori, pitched down by this amount. -- Since the camera is already pitched up by the boatCameraUpDistance (see above), a -- value of 0.0 already is looking down. Use a positive number to aim more forward. -- Range of possible values -10.0 to 60.0. chaseOriNoDriverPitchDownDegrees = 10.0, -- *** You must keep these variables consistent with the balls below *** frontBallRadius = 1.0, rearBallRadius = 1.0, fxDefs = { idle = { type = "Flame", joint = "Exhaust", flameAngle = 0.0, particleStartWidth = 0.1, flameHeight = 0.17, flameSpeed = 0.5, particlePerFrame = 0.3, offset = { 0, -0.12, 0.12 }, direction = { 0, -1.0, 0.0 }, velSource = "root", velSourceInfluence = 0.85, flameTexture = "fx/t0000fx6_hpxawstblue.png", }, thrust = { type = "Flame", joint = "Exhaust00", flameAngle = 25.0, particleStartWidth = 0.3, flameHeight = 2.0, flameSpeed = 0.95, particlePerFrame = 1.5, direction = { 0, -1.0, 0.0 }, velSource = "root", velSourceInfluence = 0.75, flameTexture = "fx/t0000fx6_hpxawstblue.png", }, }, -- These parameters affect only the renderDebug display of the boat. debugBoatEngineWidth = 2.0, debugBoatEngineHeight = 0.6, debugBoatEngineLength = 2.0, debugBoatEngineXOffset = 1.2, debugBoatEngineYOffset = -0.4, debugBoatEngineZOffset = 2.0, debugBoatWidth = 4.0, debugBoatHeight = 1.0, debugBoatLength = 4.0, debugBoatThickness = 0.1, debugBoatXOffset = 0.0, debugBoatYOffset = 0.0, debugBoatZOffset = 0.0, -- Sound input value ranges soundPhysVelocityMin = 0.1, soundPhysVelocityMax = 20.0, soundPhysRollMin = 0.05, soundPhysRollSensitivity = 2.0, soundPhysPitchMin = 0.00, soundPhysPitchSensitivity = 2.0, soundPhysTurnMin = 0.05, soundPhysTurnSensitivity = 1.5, soundPhysOnGroundHeight = 2.5, -- Global sound params soundMasterVolumeScalar = 1.0, soundRunningRadius = 40.0, soundIdleRadius = 20.0, soundDefaultRampStepSize = 0.012, soundRampVolumeMin = 0.012, -- Start up/Shut Down sound volume startUpSoundVolume = 0.285, shutDownSoundVolume = 0.3, -- pitch is anti-vel ambientSoundVolumeMax = 0.182, ambientSoundPitchBendMin = -0.5315, ambientSoundPitchBendMax = 0.2315, ambientSoundVolumeRampFactor = 0.005, ambientSoundPhaserOn = 1, ambientSoundPhaserRandomPitchMin = 0.008, ambientSoundPhaserRandomPitchMax = 0.03, ambientSoundIdleVolume = 0.08, ambientSoundIdlePitchBend = -0.75, -- thrust is vel dependent, but only plays while thrust is on. -- when thrust is on, we heat up; when it's released, we cool down. thrustBoostSoundVolume = 0.28, thrustBoostSoundVelocitySensitivity = 0.5, thrustSoundVolumeMin = 0.08, thrustSoundVolumeMax = 0.3525, thrustSoundPitchBendMin = -0.5, thrustSoundPitchBendMax = 0.2, thrustSoundVolumeRampFactor = 0.01, -- roll amp/pitchBend is vel * abs(roll) dependent rollSoundVolumeMin = 0.0, rollSoundVolumeMax = 0.225, -- rollSoundPitchBendMin = -0.5, rollSoundPitchBendMax = 0.5, rollSoundVelocitySensitivity = 0.1, rollSoundDifferentialScalar = 0.05, rollSoundHysteresisScalar = 0.95, rollSoundNaturalDifferentialMaximum = 0.007, -- pitch amp is vel * abs(pitch) dependent -- pitch pitchBend is dependent on pitch sign pitchSoundVolumeMin = 0.0, pitchSoundVolumeMax = 0.38, -- pitchSoundPitchBendMin = -0.755, pitchSoundPitchBendMax = 0.755, pitchSoundVelocitySensitivity = 0.2, pitchSoundDifferentialScalar = 0.05, pitchSoundHysteresisScalar = 0.95, pitchSoundNaturalDifferentialMaximum = 0.007, -- turn amp/pitchBend is vel * abs(roll) dependent turnSoundVolumeMin = 0.0, turnSoundVolumeMax = 0.25, -- turnSoundPitchBendMin = -0.25, turnSoundPitchBendMax = 0.25, -- target amp and heat up/cool down scalar (+/- 1.0) riseSoundVolume = 0.18, riseSoundVolumeRampFactor = 0.05, -- curPitchBend ("factor" is really an inc) riseSoundPitchBendRampFactor = 0.008, riseSoundPitchBendMin = -0.5, riseSoundPitchBendMax = 0.75 }, balls = { root = { joint = "root", radius = 1.0, -- KEEP CONSISTENT WITH APPKEYS ABOVE mass = 300.0, restitution = 0.01, staticFriction = 2.5, dynamicFriction = 2.5, airFriction = 0.0001, nearbyCollisionRadius = 1.1, -- Set to radius + 0.1. collisionRadius = 1.1, -- Set to radius + 0.1. }, frontLeft = { joint = "root", radius = 1.0, -- KEEP CONSISTENT WITH APPKEYS ABOVE mass = 300.0, offset = { -1.0, 0.0, -2.0 }, -- KEEP CONSISTENT WITH APPKEYS restitution = 0.01, staticFriction = 2.5, dynamicFriction = 2.5, airFriction = 0.0001, nearbyCollisionRadius = 1.1, -- Set to radius + 0.1. collisionRadius = 1.1, -- Set to radius + 0.1. }, frontRight = { joint = "root", radius = 1.0, -- KEEP CONSISTENT WITH APPKEYS ABOVE mass = 300.0, offset = { 1.0, 0.0, -2.0 }, -- KEEP CONSISTENT WITH APPKEYS restitution = 0.01, staticFriction = 2.5, dynamicFriction = 2.5, airFriction = 0.0001, nearbyCollisionRadius = 1.1, -- Set to radius + 0.1. collisionRadius = 1.1, -- Set to radius + 0.1. }, }, springs = { { ball1 = "root", ball2 = "frontLeft", idealLength = 2.23, -- KEEP CONSISTENT WITH BALL OFFSETS contractionForce = 10000.0, expansionForce = 10000.0, dampingCoefficient = 0.4, }, { ball1 = "root", ball2 = "frontRight", idealLength = 2.23, -- KEEP CONSISTENT WITH BALL OFFSETS contractionForce = 10000.0, expansionForce = 10000.0, dampingCoefficient = 0.4, }, { ball1 = "frontRight", ball2 = "frontLeft", idealLength = 2.0, -- KEEP CONSISTENT WITH BALL OFFSETS contractionForce = 10000.0, expansionForce = 10000.0, dampingCoefficient = 0.4, }, }, seats = { driver = { joint = "Driver", driver = 1, offset = {0.005, 0.055, -0.005}, lockedTitle = "Locked", lockTitle = "Lock", unlockTitle = "Unlock", cameras = { driver = { upDistance = 1.3, backDistance = 20.0, focusPullTightness = 0.8, pitchFocusTightness = 0.4, userControlledPitchFocus = 1, positionPullTightness = 0.8, fovTightness = 0.9, tightnessTightness = 1.0, desiredFov = 60.0, desiredOrthographicWidth = 2.0, minDistanceFromObstacle = 0.5, subjectNonclipRadius = 1.0, automaticTeleportDistance = 100.0, desiredProjectionType = AnimobCameraProjectionTypePerspective, cameraMode = AnimobCameraModeAim, visibilityEnsurerMode = AnimobVisibilityEnsurerModeTightenToFocus, }, }, animationTriggers = { default = { type = "emotion", emotionName = "em000hbt01_driver", axes = { { axisName = "UiAxis", -- To keep in registration with the boat, make sure that direction = "FB", -- these values are identical to the boat's values, above. axisScalar = 1.0, prevValueBlend = 0.95 }, { axisName = "TprAxis", direction = "LR", axisScalar = 1.0, prevValueBlend = 0.85 } }, }, }, }, frontLeft = { joint = "FrontLeft", driver = 0, offset = {0.0, 0.055, -0.005}, lockedTitle = "Locked", lockTitle = "Lock", unlockTitle = "Unlock", cameras = { frontLeft = { userControlledPitchFocus = 1, fovTightness = 0.9, tightnessTightness = 1.0, desiredFov = 60.0, desiredOrthographicWidth = 2.0, minDistanceFromObstacle = 0.5, subjectNonclipRadius = 1.0, automaticTeleportDistance = 100.0, desiredProjectionType = AnimobCameraProjectionTypePerspective, cameraMode = AnimobCameraModeAim, visibilityEnsurerMode = AnimobVisibilityEnsurerModeTightenToFocus, }, }, animationTriggers = { default = { type = "emotion", emotionName = "em000hbt00_rider", axes = { { axisName = "UiAxis", direction = "FB", axisScalar = 1.0, prevValueBlend = 0.88, }, { axisName = "TprAxis", direction = "LR", -- "FB" means use the Z component of the TprAxis vector. axisScalar = 1.0, prevValueBlend = 0.88, } }, }, }, }, frontRight = { joint = "FrontRight", driver = 0, offset = {0.0, 0.055, -0.005}, lockedTitle = "Locked", lockTitle = "Lock", unlockTitle = "Unlock", cameras = { frontRight = { userControlledPitchFocus = 1, fovTightness = 0.9, tightnessTightness = 1.0, desiredFov = 60.0, desiredOrthographicWidth = 2.0, minDistanceFromObstacle = 0.5, subjectNonclipRadius = 1.0, automaticTeleportDistance = 100.0, desiredProjectionType = AnimobCameraProjectionTypePerspective, cameraMode = AnimobCameraModeAim, visibilityEnsurerMode = AnimobVisibilityEnsurerModeTightenToFocus, }, }, animationTriggers = { default = { type = "emotion", emotionName = "em000hbt00_rider", axes = { { axisName = "UiAxis", direction = "FB", axisScalar = 1.0, prevValueBlend = 0.88, }, { axisName = "TprAxis", direction = "LR", -- "FB" means use the Z component of the TprAxis vector. axisScalar = 1.0, prevValueBlend = 0.88, } }, }, }, }, backRight = { joint = "BackRight", driver = 0, offset = {0.0, 0.055, -0.005}, lockedTitle = "Locked", lockTitle = "Lock", unlockTitle = "Unlock", cameras = { backRight = { userControlledPitchFocus = 1, fovTightness = 0.9, tightnessTightness = 1.0, desiredFov = 60.0, desiredOrthographicWidth = 2.0, minDistanceFromObstacle = 0.5, subjectNonclipRadius = 1.0, automaticTeleportDistance = 100.0, desiredProjectionType = AnimobCameraProjectionTypePerspective, cameraMode = AnimobCameraModeAim, visibilityEnsurerMode = AnimobVisibilityEnsurerModeTightenToFocus, }, }, animationTriggers = { default = { type = "emotion", emotionName = "em000hbt00_rider", axes = { { axisName = "UiAxis", direction = "FB", axisScalar = 1.0, prevValueBlend = 0.88, }, { axisName = "TprAxis", direction = "LR", -- "FB" means use the Z component of the TprAxis vector. axisScalar = 1.0, prevValueBlend = 0.88, } }, }, }, }, backLeft = { joint = "BackLeft", driver = 0, offset = {0.0, 0.055, -0.005}, lockedTitle = "Locked", lockTitle = "Lock", unlockTitle = "Unlock", cameras = { backLeft = { upDistance = 1.3, backDistance = 20.0, focusPullTightness = 0.8, pitchFocusTightness = 0.4, userControlledPitchFocus = 1, positionPullTightness = 0.8, fovTightness = 0.9, tightnessTightness = 1.0, desiredFov = 60.0, desiredOrthographicWidth = 2.0, minDistanceFromObstacle = 0.5, subjectNonclipRadius = 1.0, automaticTeleportDistance = 100.0, desiredProjectionType = AnimobCameraProjectionTypePerspective, cameraMode = AnimobCameraModeAim, visibilityEnsurerMode = AnimobVisibilityEnsurerModeTightenToFocus, }, }, animationTriggers = { default = { type = "emotion", emotionName = "em000hbt00_rider", axes = { { axisName = "UiAxis", direction = "FB", axisScalar = 1.0, prevValueBlend = 0.88, }, { axisName = "TprAxis", direction = "LR", -- "FB" means use the Z component of the TprAxis vector. axisScalar = 1.0, prevValueBlend = 0.88, } }, }, }, }, }, Sounds3d = { startUp = { soundName = "hoverboat_start_up", ballSource = "root", }, shutDown = { soundName = "hoverboat_shut_down", ballSource = "root", }, thrustBoost = { soundName = "hoverboat_thrust_boost", ballSource = "root", }, thrust = { soundName = "hoverboat_thrust", looping = 1, ballSource = "root", }, ambient = { soundName = "hoverboat_ambient", looping = 1, ballSource = "root", }, ambientPhaser = { soundName = "hoverboat_thrust", looping = 1, ballSource = "root", }, rise = { soundName = "hoverboat_rise", looping = 1, ballSource = "root", }, roll = { soundName = "hoverboat_roll", looping = 1, ballSource = "root", }, pitch = { soundName = "hoverboat_pitch", looping = 1, ballSource = "root", }, turn = { soundName = "hoverboat_turn", looping = 1, ballSource = "root", }, lock = { soundName = "hoverboat_thrust", looping = 0, ballSource = "root", }, unlock = { soundName = "hoverboat_thrust", looping = 0, ballSource = "root", }, }, carriable = { icon = "ico_hoverboat01.png", }, })