Gamedev:UnitDefs: Difference between revisions
m u know it was wrong all along |
→Movement & Placement: add new 'blocking' tag |
||
| Line 249: | Line 249: | ||
* '''<code>turnInPlaceSpeedLimit</code>''' - type: <code>float</code> - default: A complex formula based on <code>turnRate</code> and <code>maxVelocity</code> | * '''<code>turnInPlaceSpeedLimit</code>''' - type: <code>float</code> - default: A complex formula based on <code>turnRate</code> and <code>maxVelocity</code> | ||
: For units with <code>turnInPlace = false</code>, this defines the minimum speed it will slow down to (the speed at which the turn is actually performed can be higher depending on the angular difference and <code>turnRate</code>). | : For units with <code>turnInPlace = false</code>, this defines the minimum speed it will slow down to (the speed at which the turn is actually performed can be higher depending on the angular difference and <code>turnRate</code>). | ||
* '''<code>blocking</code>''' - type: <code>bool</code> - default: <code>true</code> | |||
: Does the unit block the movement of other units? (Mines, i.e. non-mobile units with the <code>kamikaze</code> tag default to <code>false</code>) | |||
===Flanking=== | ===Flanking=== | ||
Revision as of 18:59, 12 December 2011
Location
UnitDef files are .lua files stored in the Units/ directory of a Spring Game.
Purpose
UnitDef files have one purpose; to define the properties of units. They are the main description file for what attributes your unit should have and how it should behave.
Source
The engine source code which loads the tags from these files is viewable here:rts/Sim/Units/UnitDef.cpp
The engine source which reads the #sounds subtable can be found here:rts/Sim/Units/UnitDefHandler.cpp
Data Types
Tags may be one of the following data types:
int- An integer numberfloat- A number with decimals.bool- A value which can betrueorfalse.string- Text, or more precisely a string of alphanumeric characters.float[3]- A vector, with threefloatcomponents, representing x, y and z axes (y is 'up').
Details
There follows a comprehensive (certain deprecated tags are not present) list of the tags available, their data type, default value and a brief description of what they do. Bear in mind that the source code linked above is the ultimate reference when dealing with these tags.
In lua tables keys (i.e. the tags) should be lower case, here they are represented in camelCase for readability. In your files you may use the lowerkeys function on your final table to ensure the keys are properly cased.
It is usual to name the returned UnitDef table the internal unitName desired for the unit.
General
name- type:string- default:""
- This is simply the name of the unit as it appears to the player.
description- type:string- default:name
- This is the tooltip description of the unit seen by the player. It defaults to the
nameof the unit.
buildPic- type:string- default:""
- The filename of the image to be used as the build picture.
objectName- type:string- default:""
- The filename of the 3D model file for this unit, assumes
Objects3D/directory.
script- type:string- default:unitName + ".cob"
- The filename of the animation script file for this unit, assumes
Scripts/directory. Default assumes .cob file but LUS should be preferred.
maxDamage- type:float- default:0.0
- The base 'hitpoints' the unit will have.
autoHeal- type:float- default:0.0
- How much health the unit will regain every second.
idleAutoHeal- type:float- default:10.0
- How much health the unit will regain every second whilst it is idle.
idleTime- type:int- default:600
- The time in frames taken until a unit is considered to be idle.
buildCostMetal- type:float- default:1.0
- The amount of metal resource the unit costs to build. Cannot be below
1.0.
buildCostEnergy- type:float- default:0.0
- The amount of energy resource the unit costs to build.
buildTime- type:float- default:0.0
- The time taken to build the unit, in conjunction with the
workerTimeof the constructor. Effectively, Time to build = unitbuildTime/ constructorworkerTime. Defaults to0.0but cannot actually be below1.0.
mass- type:float- default:buildCostMetal
- The mass of the unit, used in weapon impulse calculations. Cannot be less than
1.0.
reclaimable- type:bool- default:true
- Can the unit be reclaimed by a builder?
capturable- type:bool- default:true
- Can a unit be stolen by a builder using the capture command?
repairable- type:bool- default:true
- Can the unit be repaired by a builder?
maxRepairSpeed- type:float- default:1e20
- The maximum cumulative speed at which this unit can be repaired.
iconType- type:string- default:"default"
- The name of the radar icon type this unit should use. See Icontypes.lua.
corpse- type:string- default:""
- The name of the feature this unit should leave behind as a wreck when it dies (See Units-FeatureDefs).
explodeAs- type:string- default:""
- The name of the weapon this unit should explode as when it is killed (See Units-WeaponDefs).
selfDestructAs- type:string- default:""
- The name of the weapon this unit should explode as when it self destructs (See Units-WeaponDefs). Also used as the
kamikazeweapon.
Resources
metalStorage- type:float- default:0.0
- The amount of the metal resource storage the unit contributes.
energyStorage- type:float- default:0.0
- The amount of the energy resource storage the unit contributes.
extractsMetal- type:float- default:0.0
- The amount of the metal resource the unit extracts from the ground. The amount extracted depends on the metal map defined in the map itself. Works only for structures.
extractSquare- type:bool- default:false
- is the metal extractors extraction area circular or square?
windGenerator- type:float- default:0.0
- The amount of the energy resource the unit generates which is dependant on the map wind. Works only for structures.
tidalGenerator- type:float- default:0.0
- The amount of the energy resource the unit generates which is dependant on the maps tidal power. Clearly, this only works on water structures.
metalUse- type:float- default:0.0
- The amount of the metal resource the unit consumes per game 'tick'.
energyUse- type:float- default:0.0
- The amount of the energy resource the unit consumes per game 'tick'.
metalMake- type:float- default:0.0
- The amount of the metal resource the unit generates unconditionally per game 'tick'.
energyMake- type:float- default:0.0
- The amount of the energy resource the unit generates unconditionally per game 'tick'.
makesMetal- type:float- default:0.0
- The amount of the energy resource the unit turns into the metal resource per game 'tick'.
Sensors
onoffable- type:bool- default:false
- Does the unit have an on/off button? Currently the activation status tied to this button also turns sensors (other than LOS) on and off.
activateWhenBuilt- type:bool- default:false
- Should the unit's activation status be on or off when it is created?
sightDistance- type:float- default:0.0
- The radius of the units sight (LOS is circular in Spring)
airSightDistance- type:float- default:1.5 * sightDistance
- How far away the unit can see aircraft (and some FX).
losEmitHeight- type:float- default:20.0New in version 0.83.x
- How high up the unit is the point used to calculate it's LOS vs. the terrain?
radarEmitHeight- type:float- default:20.0New in version 0.83.x
- How high up the unit is the point used to calculate it's radar vs. the terrain?
radarDistance- type:int- default:0
- The radius of the units radar.
sonarDistance- type:int- default:0
- The radius of the units sonar.
radarDistanceJam- type:int- default:0
- The radius of the units radar jamming.
sonarDistance- type:int- default:0
- The radius of the units sonar jamming.
stealth- type:bool- default:false
- Is the unit undetectable by radar?
sonarStealth- type:bool- default:false
- Is the unit undetectable by sonar?
cloakCost- type:float- default:-1.0
- The energy cost per tick to cloak the unit while it is stationary. Values <
0means the unit cannot cloak.
cloakCostMoving- type:float- default:cloakCost
- The energy cost per tick to cloak the unit while it is moving.
initCloaked- type:bool- default:false
- Is the unit cloaked as soon as it is created?
minCloakDistance- type:float- default:0.0
- The minimum distance (radius) which the unit must be from any enemy units to remain cloaked.
decloakSpherical- type:bool- default:true
- Does
minCloakDistanceapply in 3D or only 2D? i.e. can aircraft flying above the unit decloak it?
decloakOnFire- type:bool- default:true
- Does the unit deloak when it fires a weapon?
cloakTimeout- type:int- default:128
- The minimum time, in frames, between a decloak and subsequent re-cloak.
seismicDistance- type:int- default:0
- The radius of the unit's seismic (movement) sensor.
seismicSignature- type:float- default:0for units withfloater,canHoverorcanFly, otherwisesqrt(mass / 100.0)
- How fast the seismic ring expands in elmos per frame. Each ping always lasts 15 frames, so this also determines the maximum radius of the seismic ring.
Commands
canMove- type:bool- default:false
- Can the unit be issued Move orders?
canAttack- type:bool- default:true
- Can the unit be issued Attack orders?
canFight- type:bool- default:true
- Can the unit be issued Fight orders?
canPatrol- type:bool- default:true
- Can the unit be issued Patrol orders?
canGuard- type:bool- default:true
- Can the unit be issued Guard orders?
canRepeat- type:bool- default:true
- Can the unit be issued Repeat Orders?
canSelfDestruct- type:bool- default:true
- Can the unit be issued a self destruct order?
canRestore- type:bool- default:builder
- Can the unit be issued restore terrain commands? For builders only.
canRepair- type:bool- default:builder
- Can the unit be issued repair commands? For builders only.
canReclaim- type:bool- default:builder
- Can the unit be issued reclaim commands? For builders only.
canResurrect- type:bool- default:false
- Can the unit be issued resurrection commands? For builders only.
canCapture- type:bool- default:false
- Can the unit be issued capture commands? For builders only.
moveState- type:int- default:-1for mobile units,1for structures
- The initial movement state for the unit. Can be
-1- Inherits from factory,0- Hold Position,1- Manoeuvre or2- Roam.
fireState- type:int- default:-1for units withoutnoAutoFire,2otherwise
- The initial firing state for the unit. Can be
-1- Inherits from factory,0- Hold Fire,1- Return Fire or2- Fire At Will.
noAutoFire- type:bool- default:false
- Controls whether or not the unit has a fire state button.
canManualFire- type:bool- default:false
- Can the unit be issued ManualFire commands? A ManualFire command will fire any weapons with the
commandfiretag (See Units-WeaponDefs). Prior to 0.83.x this wascanDGun.
Builder
builder- type:bool- default:false
- Is the unit a builder?
buildDistance- type:float- default:128.0
- How far away from itself the unit can build, measured to the centre of the unit being built. The minimum value is
38.0.
buildRange3D- type:bool- default:false
- Does the builders
buildDistanceapply in all 3 dimensions or only 2?
workerTime- type:float- default:0.0
- How fast the builder builds, used in conjunction with the
buildTimeof the unit being built. Effectively, Time to build = unitbuildTime/ constructorworkerTime. If this value is <=0.0thenbuilderis set to false.
repairSpeed- type:float- default:workerTime
- How fast the builder can repair other units.
reclaimSpeed- type:float- default:workerTime
- How fast the builder can reclaim other units and features.
resurrectSpeed- type:float- default:workerTime
- How fast the builder can resurrect corpse features back into living units.
captureSpeed- type:float- default:workerTime
- How fast the builder can capture other units.
terraformSpeed- type:float- default:workerTime
- How fast the builder levels and restores terrain.
canAssist- type:bool- default:builder
- Can the builder assist other constructions?
canBeAssisted- type:bool- default:true
- Can the builder be assisted by other builders?
canSelfRepair- type:bool- default:false
- Can the builder repair itself?
showNanoSpray- type:bool- default:true
- Does the builder emit OTA-style nanospray whilst constructing?
nanoColor- type:float[3]- default:{0.2, 0.7, 0.2}aka green
- The RGB colour of a builders' emitted nano particles if
showNanoSprayistrue. Also controls the RBG colour of a unit's own nanoframe ifshowNanoFrameistrue.
fullHealthFactory- type:bool- default:false
- If
true, units are repaired before they are allowed to leave the factory i.e. units from this factory will be healed back to 100% health if they are damaged during construction.
isAirbase- type:bool- default:false
- Is this unit an airbase? Aircraft may land and repair on units which are airbases.
Movement & Placement
footprintX- type:int- default:1
- How wide the unit is in footprint units, left to right. 1 footprint unit = 16 elmos. Cannot be below
1. For mobile units this should be the same as thefootprintXof itsmovementClass.
footprintZ- type:int- default:1
- How wide the unit is in footprint units, top to bottom. 1 footprint unit = 16 elmos. Cannot be below
1. For mobile units this should be the same as thefootprintZof itsmovementClass.
yardmap- type:string- default:""
- A string of characters which defines in detail each 'footprint square' of a structure. Each footprint square may be
y- Always open, unblocking,c- Open and unblocking only while constructing (for factories, controlled viaCOB.YARD_OPENsee Animation-LuaCallouts#Other),g- Must be placed over ageoThermalfeature (See Units-FeatureDefs), oro- Always closed, blocking. Also used to determine a structure from a mobile unit.
levelGround- type:bool- default:false
- For structures. Does the constructor have to level the ground underneath the build area before beginning to build the structure?
movementClass- type:string- default:""
- The name of the movement type a mobile, non aircraft, unit should use. See Movedefs.lua. Other tag usage should be consistent with this i.e.
canHover = trueIFF using aHOVERbased movetype.
canHover- type:bool- default:false
- Is the unit a hovercraft? Hovercraft can cross water of any depth without a speed penalty. Hover's must also have
HOVERwithin the name of theirmovementClass(see Movedefs.lua).
floater- type:bool- default:trueif the unit has thewaterlinetag,falseotherwise
- When a mobile unit is crossing water, or a structure is placed on water, does it float on top of the water or crawl / lay on the sea bed?
upright- type:bool- default:false
- Does the unit follow the terrain or always remain upright? Generally used for walkers.
maxSlope- type:float- default:0.0
- The maximum slope a building can be placed on. Mobile unit's use the
maxSlopeset in theirmovementClass(see Movedefs.lua). The value is in degrees and is clamped between0.0and89.0. This value is converted to a "maximum allowed height difference" (call it M), which involves a hard-coded constant. When a building gets placed, the height of each of its footprint squares is compared to a reference height (calculated for the build position). If the difference exceeds M for any square, that build position is rejected.
minWaterDepth- type:float- default:-10e6
- The minimum depth of water a building can be placed on. Mobile unit's use the
minWaterDepthset in theirmovementClass(see Movedefs.lua).
maxWaterDepth- type:float- default:10e6
- The maximum depth of water a building can be placed on. Mobile unit's use the
maxWaterDepthset in theirmovementClass(see Movedefs.lua).
waterline- type:float- default:0.0
- How low in the water does a ship sit? Higher values means the ship is lower in the water.
minCollisionSpeed- type:float- default:1.0
- The minimum net impact speed that will cause a unit to be damaged by collisions with another unit.
pushResistant- type:bool- default:false
- Can the unit be pushed around by other units? Turning it on doesn't remove all pushing but is a marked improvement.
maxVelocity- type:float- default:0.0
- The maximum speed attainable by the unit in elmos per frame. If the value is -ve, the absolute value is used.
maxReverseVelocity- type:float- default:0.0
- The maximum speed attainable by the unit in reverse in elmos per frame. If the value is -ve, the absolute value is used.
acceleration- type:float- default:0.5
- The acceleration of the unit, in elmos per frame2. If the value is -ve, the absolute value is used.
brakeRate- type:float- default:3.0 * acceleration
- The deceleration of the unit, in elmos per frame2. If the value is -ve, the absolute value is used. For units with
canFlythis is multiplied by0.1.
turnRate- type:float- default:0.0
- How fast the unit can turn. degrees per seconds = 0.16 *
turnRate
turnInPlace- type:bool- default:true
- Does the unit turn on the spot (like a person or tank) or must it be moving forwards to turn (like a car).
turnInPlaceSpeedLimit- type:float- default: A complex formula based onturnRateandmaxVelocity
- For units with
turnInPlace = false, this defines the minimum speed it will slow down to (the speed at which the turn is actually performed can be higher depending on the angular difference andturnRate).
blocking- type:bool- default:true
- Does the unit block the movement of other units? (Mines, i.e. non-mobile units with the
kamikazetag default tofalse)
Flanking
For a deeper explanation of these tags, see Units:FlankingBonus.
flankingBonusMode- type:int- default:flankingBonus.defaultModeset in Modrules.lua
- The mode of operation of Spring's inbuilt flanking system. Can be
0- No flanking bonus. Mode1builds up the ability to move over time, and swings to face attacks, but does not respect the way the unit is facing. Mode2also can swing, but moves with the unit as it turns. Mode3stays with the unit as it turns and otherwise doesn't move, the ideal mode to simulate something such as tank armour.
flankingBonusMax- type:float- default:1.9
- The maximum multiplier to the damage dealt, when a unit is hit from the opposite direction to
flankingBonusDir.
flankingBonusMin- type:float- default:0.9
- The minimum multiplier to the damage dealt, when a unit is hit from the opposite direction to
flankingBonusDir.
flankingBonusDir- type:float[3]- default:{0.0, 0.0, 1.0}
- This is the direction vector where the armour is facing; i.e. where the least damage is applied. The default is straight forwards.
flankingBonusMobilityAdd- type:float- default:0.01
- This defines the ability of
flankingBonusDirto move over time. Its value is added to the mobility every SlowUpdate. When the unit is attacked, the build up mobility value is multiplied by a vector facing the attack, which is added toflankingBonusDir.
Aircraft
canFly- type:bool- default:false
- Can the unit fly, i.e. is it an aircraft?
canSubmerge- type:bool- default:false
- Can the aircraft land underwater?
factoryHeadingTakeoff- type:bool- default:true
- Controls the take-off behaviour of aircraft with
hoverAttack.truemeans planes start matching their factory's heading right after taking off from the pad,falsemeans they maintain the heading of the pad until reachingcruiseAlt.
collide- type:bool- default:true
- Does the unit collide with other aircraft, or can it occupy the same space?
hoverAttack- type:bool- default:false
- Controls whether the aircraft flys and attacks like a fighter/bomber or a helicopter/gunship.
airStrafe- type:bool- default:true
- For aircraft with
hoverAttack = true, controls if the unit strafes side to side while attacking or remains stationary.
cruiseAlt- type:float- default:0.0
- The altitude in elmos which the unit attempts to fly at while cruising.
airHoverFactor- type:float- default:-1.0
- For aircraft with
hoverAttack = true, less then0means it can land and >=0indicates how much the unit will move during hovering on the spot.
bankingAllowed- type:bool- default:true
- For aircraft with
hoverAttack = true, controls whether or not the unit banks when moving turning.
useSmoothMesh- type:bool- default:true
- Does the aircraft follow the real map terrain or the special smoothed out navigation mesh generated by Spring specifically for aircraft?
maxFuel- type:float- default:0.0
- The maximum flight time in seconds before aircraft must return to an airbase to refuel.
refuelTime- type:float- default:5.0
- The time in seconds required to refuel the aircraft at an airbase.
minAirbasePower- type:float- default:0.0
- The minimum
workerTimean airbase must have to repair / refuel this aircraft.
canLoopbackAttack- type:bool- default:false
- Can the aircraft perform an Immelmann turn?
Advanced Air Tags
The following set of tags are not well understood and using non-default values can lead to undesired flight behaviours.
wingDrag- type:float- default:0.07
- The drag caused by the aircraft's wing. Clamped between
0.0and1.0.
wingAngle- type:float- default:0.08
- The angle between the front and the wing plane.
frontToSpeed- type:float- default:0.1
- Fudge factor for lining up speed and front of plane.
speedToFront- type:float- default:0.07
- Fudge factor for lining up speed and front of plane.
myGravity- type:float- default:0.4
- As Spring aircraft are slower than real aircraft this tag allows to lower gravity to compensate. Multiplies against map gravity.
crashDrag- type:float- default:0.005
- The drag used when crashing. Clamped between
0.0and1.0.
maxBank- type:float- default:0.8
- The maximum roll (z-axis rotation) the aircraft can achieve.
maxPitch- type:float- default:0.45
- The maximum pitch (x-axis rotation) the aircraft tries to keep.
turnRadius- type:float- default:500.0
- Hint to Spring unit AI about the required turning radius.
verticalSpeed- type:float- default:3.0
- The speed of takeoff and landing, at least for gunships (
hoverAttack = true)
maxAileron- type:float- default:0.015
- The maximum turn speed around the roll (z) axis.
maxElevator- type:float- default:0.01
- The maximum turn speed around the pitch (x) axis.
maxRudder- type:float- default:0.004
- The maximum turn speed around the yaw (y) axis.
maxAcc- type:float- default:0.065
- The maximum acceleration or 'engine power' of the aircraft.
Flares
The following set of tags are rarely used and are hardcoded to only work vs. missile weapons. The texture is hardcoded to be flareprojectiletexture defined in Resources.lua.
canDropFlare- type:bool- default:false
- Can this aircraft drop flares to distract missile weapons?
flareReload- type:float- default:5.0
- The time in seconds between successive flare drops.
flareDelay- type:float- default:0.3
- The delay between detecting an incoming missile and launching flares. Multiplied by a random number between 1 and 16.
flareEfficiency- type:float- default:0.5
- The probability that an incoming missile will target the flare instead of the aircraft.
flareDropVector- type:float[3]- default:{0.0, 0.0, 0.0}
- The direction vector which flares are emitted in.
flareTime- type:int- default:3
- The lifetime of a dropped flare in frames.
flareSalvoSize- type:int- default:4
- How many flares are dropped at once?
flareSalvoDelay- type:int- default:0
- The delay in frames between the release of each individual flare in a burst.
Transports
transportSize- type:int- default:0
- The size of units that the transport can pick up, in terms of the passengers
footprintX.
minTransportSize- type:int- default:0
- The smallest size of unit that the transport can pick up, in terms of the passengers
footprintX.
transportCapacity- type:int- default:0
- The total number of units that the transport can pick up, with each unit multiplied by it's
footprintXsize. If this tag is not present, then any AttachUnit and DropUnit call in the animation script will be ignored (See Animation-LuaCallouts#Other)
transportMass- type:float- default:100000.0
- The total cumulative
massof passengers the transport can carry.
minTransportMass- type:float- default:0.0
- The total minimum
masspassenger the transport can carry.
loadingRadius- type:float- default:220.0
- How far away in elmos can the transporter pick up and drop units?
unloadSpread- type:float- default:1.0
- How spread out the passengers are when unloaded. Is multiplied by the passengers radius.
isFirePlatform- type:bool- default:false
- Can transported units still aim and shoot while loaded by this transport?
holdSteady- type:bool- default:false
- If
true- passengers are slaved to orientation of transporter attachment piece, iffalse- passengers are slaved to orientation of transporter body.
releaseHeld- type:bool- default:false
- Does the transporter unload it's passengers when it dies?
cantBeTransported- type:bool- default:falsefor mobile unitstruefor structures
- Controls if a unit is transportable at all or not. If
falseit is overridden by Modrules.luatransportabilitysubtable tags.
transportByEnemy- type:bool- default:true
- Controls if a unit can be transported by an enemy transport. i.e. can it be kidnapped.
transportUnloadMethod- type:int- default:0
- For air transports. Can be
0- Land to unload individually,1- Flyover drop (i.e. Parachute), or2- Land and flood unload all passengers. Can be used on ground transports with mixed results.
fallSpeed- type:float- default:0.2
- For air transports with
transportUnloadMethod = 1. The speed in elmos per second which units will fall at when released from the transport.
unitFallSpeed- type:float- default:0.0
- Allows you to override
fallSpeedfor an individual passenger.
Categories
For a deeper explanation of these tags, see Unit_Categories.
category- type:string- default:""
- The category tag is a string of separate words, each representing a category of units. There are a maximum of 32 categories. The primary purpose of categories is weapon targeting (See #weapons).
noChaseCategory- type:string- default:""
- The unit will still target enemies with a matching
category, but will not chase after it if it moves out of weapon range.
Decals
leaveTracks- type:bool- default:false
- Does the unit leave a track mark decal behind it when it moves? For mobile units.
trackType- type:string- default:stdTank
- The filename of the image, without extension, assumed to be in
Bitmaps/Tracks/, to be used as the track decal. The red channel of the image controls the brightness and the green channel the alpha (how visible it is) of the track. Blue channel is unused.
trackWidth- type:float- default:32.0
- The width of the track decal left on the ground, in elmos.
trackOffset- type:float- default:0.0
- How far back in elmos the track should be drawn from the centre of the unit.
trackStrength- type:float- default:32.0
- How visible or 'deep' the track mark should be. Also used to determine how long the decal should last.
trackStretch- type:float- default:1.0
- How much the track is stretched in the forward direction compared to the sides (i.e. used to change aspect ratio).
useBuildingGroundDecal- type:bool- default:false
- For structures, do they display a ground decal on the terrain under their model?
buildingGroundDecalType- type:string- default:""
- The filename of the image to be used as ground decal. Assumed to be in
Unittextures/.
buildingGroundDecalSizeX- type:int- default:4
- How wide the decal is left to right, in footprint units.
buildingGroundDecalSizeY- type:int- default:4
- How wide the decal is top to bottom, in footprint units.
buildingGroundDecalDecaySpeed- type:float- default:0.1
- A measure of how quickly the decal should fade out if the structure dies. Essentially this value is multiplied by the time since death and subtracted from the original alpha until the decal is fully transparent.
Collision Volumes
For a deeper explanation of these tags, see Unit Collision Volumes.
modelCenterOffset- type:float[3]- default:{0.0, 0.0, 0.0}
- How far from the model's defined centre should the centre of the unit be?
usePieceCollisionVolumes- type:bool- default:false
- When turned on the model and unitDef collision volumes are ignored and Spring generates a bounding box volume for each piece of the unit model. These volumes can be manipulated or replaced by Spring.SetUnitPieceCollisionVolumeData. Increases the performance cost of collision calculations.
collisionVolumeType- type:string- default:""
- What shape should the unit's collision volume be? Can be
box,ellipsoidor a cylinder aligned to an axis;cylX,cylY,cylZ.
collisionVolumeScales- type:float[3]- default:{0.0, 0.0, 0.0}
- The length of the collision volume in each of the three axes.
collisionVolumeOffsets- type:float[3]- default:{0.0, 0.0, 0.0}
- The offset from the unit centre to the hit volume centre in each axis.
collisionVolumeTest- type:int- default:0
- The type of test used to detect collisions. Can be
0(discrete) or1(continuous). Use the latter for catching high speed projectiles which may otherwise 'skip through' small collision volumes, but beware of the increased performance cost.
Attack Behaviours
highTrajectory- type:int- default:0
- Can the unit fire it's (ballistic) weapons in a high trajectory arc? Can be
0- Low trajectory only,1- High trajectory only, or2- Toggle button.
kamikaze- type:bool- default:false
- Does the unit attack its target by blowing itself up?
kamikazeDistance- type:float- default:0.0
- How close to the target, in elmos, the unit must get before detonating. Measured in 3D, not 2D.
kamikazeUseLOS- type:bool- default:false
- Does the target unit have to be in LOS when detonating or only within
kamikazeDistance.
strafeToAttack- type:bool- default:false
- Should the unit move sideways when it can't shoot?
Other
decoyFor- type:string- default:""
- The unitdef name (not human
name) which this unit is a decoy for.
selfDestructCountdown- type:int- default:5
- The length in seconds taken between issuing self destruct order and the unit exploding.
damageModifier- type:float- default:1.0
- The multiplier applied to weapon damage when the units ARMORED status (See Lua_ConstCOB) is turned on
isTargetingUpgrade- type:bool- default:false
- Does the unit upgrade the targeting so that units shoot accurately at enemy units which are in radar but not in LOS.
isFeature- type:bool- default:false
- Does the unit immediately die into it's
corpsefeature when built? Used mainly for making walls.
hideDamage- type:bool- default:false
- Should the units current health be invisible to enemy players?
showPlayerName- type:bool- default:false
- Should the unit display it's controlling player as its name instead of
name. Generally used for commander or hero units.
showNanoFrame- type:bool- default:true
- Does the unit show an OTA-style nanoframe whilst being constructed?
unitRestricted- type:int- default:MAX_UNITS
- How many of this unit type may a player control at once? Defaults to being the maximum amount of units controllable. Is overridden by lobby unit restrictions.
power- type:float- default:buildCostMetal + (buildCostEnergy / 60.0)
- The relative power of the unit. Used in weapon targeting priority and experience gain calculations.
Sub Tables
weapons
The weapons subtable of a UnitDef tells Spring which weapons the unit has. It is a simple array (number indexed table) of weaponNames (not the human readable name!).
The following additional tags are associated with this subtable:
name- type:string- default:""
- The
weaponNameof the weapon (See Units-WeaponDefs). If using the weapondefs_post.lua provided by springcontent.sdz, you may include the WeaponDef tables within the UnitDef as theweaponDefssubtable, and refer to them withdefrather thanname. This can be a useful way to organise definitions if units do not generally share weapons.
badTargetCategory- type:string- default:""
- A string of unit
categoryentries which this weapon prefers to avoid targeting. i.e. given two units which can be targeted, any unit whosecategorymatches any entry in this tag, will be targeted last. (See #Categories)
onlyTargetCategory- type:string- default:""
- A string of unit
categoryentries which this weapon can target. i.e. any unit whosecategorydoes not match any entry in this tag, cannot be targeted by this weapon. (See #Categories)
slaveTo- type:int- default:0
- The number of the weapon which this weapon is slaved to. A slaved weapon can only target what it's master is targeting. Weapon numbers start at
1and correspond to the index of the weapon within the subtable.
mainDir- type:float[3]- default:{1.0, 0.0, 0.0}i.e. forwards
- A vector representing the firing direction of this weapon if it has a limited firing arc. Used in conjunction with
maxAngleDif(See Units:WeaponMainDir)
maxAngleDif- type:float- default:180.0
- How wide this weapons limited firing arc is in degrees. Symetrical about
mainDiri.e.180.0is full 360 degree freedom (See Units:WeaponMainDir).
fuelUsage- type:float- default:0.0
- How much fuel in seconds is deducted from the units initial
maxFuelwhen this weapon fires.
buildOptions
The buildOptions subtable of a UnitDef tells Spring which other units the unit can build (in the case of a builder) or produce (in the case of a factory).
It is a simple array (number indexed table) of unitNames (not the human readable name!).
There are no additional tags specific to this subtable.
SFXTypes
The SFXTypes subtable of a UnitDef tells Spring which CEG effects are associated with the unit. It consists of two further subtables, with no additional tags specific to them.
explosionGenerators
The explosionGenerators subtable of SFXTypes tells Spring which CEGs the unit's script can call, via the EmitSFX() callout (See Animation-LuaCallouts#Effects). It is a simple array (number indexed table) of CEG names, prefaced by the string "custom:".
pieceExplosionGenerators
New in 0.83.x
The pieceExplosionGenerators subtable of SFXTypes tells Spring which CEGs the unit's script can pick at random to attach to a flying unit piece, created from the Explode() callout (See Animation-LuaCallouts#Effects). It is a simple array (number indexed table) of CEG names, with no prefix.
sounds
The sounds subtable of a UnitDef tells Spring which sound files to play when the unit triggers various events.
Files are assumed to be in the Sounds/ directory; accepted formats are .wav and .ogg, the former being assumed if no extension is given.
Sounds can be defined in one of three ways:
- Each event can be used as though it were a
stringtag referring to the filename. - Each event can be the name of a subtable, which is a simple array containing the filenames. One sound is picked at random from the list each time the event occurs.
- Each event can be the name of a subtable, which is a simple array containing further tables, which contain the following tags:
file- type:string- default:""
- The filename of the sound to play.
volume- type:float- default:1.0
- The default volume of the sound.
Spring checks any referenced sound filename to see if a SoundItem has been created, which allows greater control over how it is played (See Sounds.lua).
sounds Example
For clarification, here is an example of all three methods:
sounds = {
-- Method 1
ok = 'oksound', -- .wav appended
-- Method 2
arrived = {
'arrived1.wav',
'arrived2.wav',
},
-- Method 3
select = {
{ file = 'selsound1.ogg', volume = 2.0 },
{ file = 'selsound2.ogg', volume = 2.5 },
},
}
sounds Events
The events called by the engine are as follows:
ok
- Unit is issued a command.
select
- Unit is selected by the player.
arrived
- Unit has arrived at its destination. Mobile ground units only.
build
- Unit begins building. Called for both factories and mobile construction units.
activate
- Unit is activated, i.e. Is turned on. Also called when a mobile ground unit starts moving.
deactivate
- Unit deactivates, i.e. Is turned off.
cant
- Unit cannot carry out this order. Loaded but not currently called by the engine.
underattack
- Unit gets attacked. Loaded but not currently called by the engine.
customParams
The customParams subtable of a UnitDef allows the game designer to give their units custom attributes, which can then be accessed via lua gadgets and widgets. It is a map (key-value pair indexed table) of strings. When accessing these attributes in lua the strings can be turned back into numbers, bools or even tables. This gives great control to game designers to essentially implement their own behaviour tags.
There are no additional tags specific to this subtable
Examples
'Balanced Annihilation' UnitDefs
'Complete Annihilation' UnitDefs