Require( "animob/animob.ts" ) return AnimobAconf({ version = 1, -- All aconf files have a version number. We will be backwards compatable -- This refers to the actual animob (hovercraft in this case) object = { -- PRODUCT name of the animob. Names like spot are set differently. productName = "Surfboard", appearance = { modelName = "dog01skin.model", -- this section is only used if you are using a skute skuteSettings = { skuteName = "dog01skin", skinTextureNames = { "dogcolors_6.jpg" }, phenomorphWeights = { 0 }, }, -- This is only used if you are not using a skute. materialname should be substituted with the -- name of the material, it is not a literal key. There can be many material override entries -- in the modelSettings table. modelSettings = { materialname = { colormap = "dir/colormap.jpg", opacitymap = "dir/colormap.jpg", cutoutmap = "dir/colormap.jpg", filtermode = "int", lit = "bool", twosided = "bool", alpha = "float", drawmode = "int", animtype = "int", animloop = "int", numframes = "int", numstrips = "int", animspeed = "float", animarg = "float", animarg2 = "float", }, }, }, animationTriggers = { default = { -- Normal "idle" animation type = "emotion", -- only type currently supported is "emotion" emotionName = "Hover", -- Name of this specific emotion -- Optional. By default animob looks for the emotion in the -- same directory as the aconf. If you specify a libName then -- animob will search in that directory instead. libName = "av", axes = { { axisName = "UiAxis", -- Dimension of the matrix this value refers to direction = "FB", -- Direction along the matrix this goes prevValueBlend = -0.5, -- We can use negative values to flip the input prevValueBlend = 0.2 -- How much should we blend with previous axis value } }, }, }, -- You need to have this section and define "class" inside it in -- order to be able to be part of races. gameKitVehicleControls = { class = "HovRace", }, }, appKeys = { -- This segment is for user defined key/value pairs. -- All of these values will be supplied to the app layer in an "environment" -- that they can access at any time. -- Lines here should be of the form: "key = value,", but without the quotes. }, balls = { -- "root" is a system-defined name. All of the other balls will be added but -- the animob already has one ball. This ball will be reconfigured -- by the "root" block instead of being added. root = { -- joint in skeleton that represents where this ball is joint = "rootball", -- physical radius of the ball radius = 0.5, -- physical mass of the ball mass = 0.4, -- physical density density = 0.9, -- physical static surface friction on the ball staticFriction = 1.0, -- physical dynamic surface friction on the ball dynamicFriction = 1.2, -- physical friction in water of the ball waterFriction = 0.9, -- physical friction in air of the ball airFriction = 1.0, -- scale factor volumeInWaterScaleFactor = 1.0, -- optional, objects near this will sense "nearby" collisions here nearbyCollisionRadius = 1.0, }, leftWing = { joint = "leftwing", -- all points are represented by a joint and an optional -- offset. this offset is in (right, up, back) from the -- specified joint. If no offset is specified, the exact -- position of the joint will be used. offset = { 1.2, 0, 0.4 }, radius = 0.4, mass = 0.3, nearbyCollisionRadius = 1.2, density = 1.2, staticFriction = 1.2, dynamicFriction = 1.3, waterFriction = 1.1, airFriction = 1.2, volumeInWaterScaleFactor = 1.1, }, rightWing = { -- because we do not specify a joint the system will automatically use -- the joint with the same name as the ball, in this case "rightWing". offset = { 1.2, 0, 0.4 }, radius = 0.4, mass = 0.3, nearbyCollisionRadius = 1.2, density = 1.2, staticFriction = 1.2, dynamicFriction = 1.3, waterFriction = 1.1, airFriction = 1.2, volumeInWaterScaleFactor = 1.1, }, pendulum = { -- this ball is local. It is not diphy-correct and is not distributed. -- It is cheaper than a diphy ball and can be useful for animations. localball = 1, joint = "pendulum", offset = { 1.2, 0, 0.4 }, radius = 0.4, mass = 0.3, nearbyCollisionRadius = 1.2, density = 1.2, staticFriction = 1.2, dynamicFriction = 1.3, waterFriction = 1.1, airFriction = 1.2, volumeInWaterScaleFactor = 1.1, }, }, springs = { { -- These are the names of the two balls that are connnected by this spring. ball0 = "root", -- This is one endpoint of the spring ball1 = "pendulum", -- This is the other endpoint of the spring -- OPTIONAL: physical ideal length of the spring -- If you do not supply the idealLength, it will -- default to the distance between the two balls idealLength = 1.2, contractionForce = 0.5, -- physical contraction force of the spring expansionForce = 0.6, -- physical expansion force of the spring dampingCoefficient = 0.2, -- physical damping coefficient of the spring }, }, -- These will get thier orientation from the joint that they are -- attached to. seats = { driver = { joint = "driver", offset = { 0.0, 1.0, 0.0 }, teleblurDuration = 15, -- Teleblur to spot in steps driver = 1, -- The rider of this seat is in "control" of the vehicle. -- OPTIONAL! With this on, when the rider is hit by a projectile, -- regardless of the impact, the rider will be kicked off. You -- cannot ask if the rider was hit if this is the case. Essentially, -- you are relinquishing control over this to the animob. Only use -- this if you really want the rider to be kicked off and not to -- think about it. autoKickOff = 1, cameras = { driver = { upDistance = 5.0, -- Up distance, if provided, back should be provided backDistance = 10.0, -- back distance focusPullTightness = 0.7, -- focus pull tightness pitchFocusTightness = 0.5, userControlledPitchFocus = 1, -- 1 for true, 0 for false positionPullTightness = 0.8, -- position pull tightness fovTightness = 0.9, tightnessTightness = 0.8, desiredFov = 50.0, desiredOrthographicWidth = 2.0, minNearDistance = 0.5, -- min distance from obstacle subjectNonclipRadius = 1.0, automaticTeleportDistance = 100.0, -- The next set of values are typed in Animob.h Please see that for details -- AnimobCameraProjectionType desiredProjectionType = AnimobCameraProjectionTypePerspective, -- AnimobCameraMode cameraMode = AnimobCameraModeChase, -- AnimobVisibilityEnsurerMode visibilityEnsurerMode = AnimobVisibilityEnsurerModeTightenToFocus, -- for AnimobCameraModeVehicle only pitchThreshold = 4.0, pitchMax = 20.0, pitchSlope = 3.0, pitchSensitivity = 1.0, upThreshold = 0.3, upMax = 1.0, upSlope = 1.5, upSensitivity = 1.0, }, }, animationTriggers = { default = { type = "emotion", emotionName = "Hover", axes = { { axisName = "UiAxis", direction = "FB", prevValueBlend = 0.75 }, { axisName = "UiAxis", direction = "LR", valueScalar = 1.7, prevValueBlend = 0.4 }, }, }, HcJump = { -- Animation while jumping type = "emotion", emotionName = "HcJump001", axes = { { axisName = "hovercraftCustomJumpAxis", valueScalar = 1.0, prevValueBlend = 0.8 }, } }, }, getOn = { -- Optional get on animation section userAnim = "avgeton", objectAnim = "hbgeton" -- optional }, getOff = { userAnim = "avgetoff", }, }, passenger = { joint = "passenger", driver = 0, -- The rider in this seat is not in control of the vehicle animationTriggers = { default = { type = "emotion", emotionName = "Hover", axes = { { axisName = "UiAxis", direction = "FB", prevValueBlend = 0.75 }, { axisName = "UiAxis", direction = "LR", valueScalar = 1.7, prevValueBlend = 0.4 } }, }, }, }, }, actions = { punch = { teleblurDuration = 2, -- Teleblur to spot in steps inAction = { -- Animation to play during the action userAnim = "avpunch", }, }, }, pilot = { -- This refers to triggers on the pilot animationTriggers = { come = { type = "emotion", -- only type currently supported is "emotion" emotionName = "c001_come", -- refers to lib/c001_come.emotion }, }, }, Sounds3d = { engine = { soundName = "hc_engine", -- Name of the actual asset looping = 1, -- Default is 0: Set to 1 if it is a looping asset volume = 0.5, -- Default is 1.0: 0 to 1, represents how loud the sound is by default pitchBend = -0.5, -- Default is 0.0: -1 to 1, -1 is one octave down, 1 is one octave up ballSource = "leftwing", -- Optional. Default is root. Where the center of the sound comes from radius = 3.0, -- Default is 100.0. How far the sound can be heard. }, }, carriable = { -- This is loaded from the directory that the aconf is in. You -- cannot specify icons from other directories. Optional, defaults -- to no icon. icon = "icon.jpg", -- Optional. If you only want to be carried by owner. Default is 0. carriableOnlyByOwner = 0, -- This is the perm to check to see whether the object can be -- dropped and grapped. At the moment we have to use strings -- rather than constants because I do not understand what toLua is -- doing. grabDropPerm = "canAnimal", -- If you want to modify the animations that are used by the -- avatar while it is carrying you then you should provide pose -- advice here. This is a list of pose advices and the avatar will -- use the first one that it is able to. poseAdvice = "treatbag", }, })