User:Master-athmos: Difference between revisions

From Spring
Jump to navigationJump to search
No edit summary
Line 618: Line 618:
|return = {{type|nil}}
|return = {{type|nil}}
|info = {{new|101.0}}
|info = {{new|101.0}}
}}
{{LuaCallout
|prefix = Spring.
|name = SetUnitBlocking
|arg1 = {{type|number}} unitID
|arg2 = {{type|bool}} blocking {{bracket}}
|arg3 = {{type|bool}} collide {{bracket}}
|arg4 = {{type|bool}} crushable {{rbracket}}{{rbracket}}
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info = <span class="warning">Old callout (see below), crushable new in version 85.0</span>
}}
}}


Line 653: Line 636:
|info = {{new|95.0}}<br>Changed parameters.
|info = {{new|95.0}}<br>Changed parameters.
}}
}}




Line 1,631: Line 1,613:


= Feature Handling =
= Feature Handling =
'''Spring.CreateFeature'''
  ( string "defName" | number featureDefID,
    number x, number y, number z
    [, number heading
    [, number AllyTeamID
    [, number featureID ]]] ) -> number featureID


'''Spring.DestroyFeature'''
{{LuaCallout
  ( number featureID ) -> nil
|prefix = Spring.
|name = CreateFeature
|arg1 = {{type|string}} "defName" {{pipe}} {{type|number}} featureDefID
|arg2 = {{type|number}} x, {{type|number}} y, {{type|number}} z {{bracket}}
|arg3 = {{type|number}} heading {{bracket}}
|arg4 = {{type|number}} AllyTeamID {{bracket}}
|arg5 = {{type|number}} featureID {{rbracket}}{{rbracket}}{{rbracket}}
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|number}} featureID
|info = 
}}


'''Spring.TransferFeature'''
  ( number featureID, number teamID ) -> nil


{{LuaCallout
|prefix = Spring.
|name = DestroyFeature
|arg1 = {{type|number}} featureDefID
|arg2 =
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info = 
}}
{{LuaCallout
|prefix = Spring.
|name = TransferFeature
|arg1 = {{type|number}} featureDefID
|arg2 = {{type|number}} teamID
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info = 
}}


== Feature Control ==
== Feature Control ==
'''Spring.SetFeatureHealth'''
  ( number featureID, number health) -> nil


'''Spring.SetFeatureResources''' {{new|104.0}}
{{LuaCallout
  ( number featureID, number metal, number energy [, number reclaimTime [, number reclaimLeft ]] )
|prefix = Spring.
|name = SetFeatureHealth
|arg1 = {{type|number}} featureID
|arg2 = {{type|number}} health
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info = 
}}


'''Spring.SetFeatureReclaim'''
  ( number featureID, number reclaimLeft) -> nil


'''Spring.SetFeatureResurrect'''
{{LuaCallout
  ( number featureID, number unitDefID | string unitDefName [, number facing | string "facing" [, number progress ]] ) -> nil
|prefix = Spring.
<font color="#55ee99">
|name = SetFeatureResources
  possible values for facing are:
|arg1 = {{type|number}} featureID
    "south" | "s" | 0
|arg2 = {{type|number}} metal
    "east"  | "e" | 1
|arg3 = {{type|number}} energy {{bracket}}
    "north" | "n" | 2
|arg4 = {{type|number}} reclaimTime {{bracket}}
    "west"  | "w" | 3
|arg5 = {{type|number}} reclaimLeft {{rbracket}}{rbracket}}
</font>
|arg6 =
{{new|104.0}} Second param can now be a number id instead of a string name, this also allows cancelling ressurection by passing {{value|-1}}. The level of progress can now be set via the additional 4th param.
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info =  {{new|104.0}}
}}


'''Spring.SetFeaturePosition'''
  ( number featureID, number x, number y, number z [, boolean snapToGround]) -> nil


'''Spring.SetFeatureDirection'''
{{LuaCallout
  ( number featureID, number x, number y, number z ) -> nil
|prefix = Spring.
|name = SetFeatureReclaim
|arg1 = {{type|number}} featureID
|arg2 = {{type|number}} reclaimLeft
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info =
}}


'''Spring.SetFeatureRotation''' {{new|101.0}}
  ( number featureID, number x, number y, number z ) -> nil


'''Spring.SetFeatureVelocity''' {{New|95.0}}
{{LuaCallout
|prefix = Spring.
|name = SetFeatureResurrect
|arg1 = {{type|number}} featureID
|arg2 = {{type|number}} unitDefID {{pipe}} {{type|string}} unitDefName {{bracket}}
|arg3 = {{type|number}} facing {{pipe}} {{type|string}} "facing" {{bracket}}
|arg4 = {{type|number}} progress {{rbracket}}{{rbracket}}
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info = {{new|104.0}} Second param can now be a number id instead of a string name, this also allows cancelling ressurection by passing {{value|-1}}. The level of progress can now be set via the additional 4th param.<br>Possible values for facing are:<br>"south" {{pipe}} "s" {{pipe}} 0<br>"east"  {{pipe}} "e" {{pipe}} 1<br>"north" {{pipe}} "n" {{pipe}} 2<br>"west"  {{pipe}} "w" {{pipe}} 3
}}


'''Spring.SetFeaturePhysics''' {{New|95.0}}


(like their feature counterparts at [[Lua_SyncedCtrl#Unit_Control]])
{{LuaCallout
|prefix = Spring.
|name = SetFeaturePosition
|arg1 = {{type|number}} featureID
|arg2 = {{type|number}} x, {{type|number}} y, {{type|number}} z {{bracket}}
|arg3 = {{type|bool}} snapToGround {{rbracket}}
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info =
}}


'''Spring.SetFeatureMoveCtrl'''
  ( number featureID [, boolean enable [, number* args]]) to control feature movement
  the number* arguments are parsed as follows and all optional
  if enable is true:
    [, velVector(x,y,z) -- initial velocity for feature
    [, accVector(x,y,z) -- acceleration added every frame
    ]]
  if enable is false:
    [, velocityMask(x,y,z) -- dimensions in which velocity is allowed to build when not using MoveCtrl
    [,  impulseMask(x,y,z) -- dimensions in which impulse is allowed to apply when not using MoveCtrl
    [, movementMask(x,y,z) -- dimensions in which feature is allowed to move when not using MoveCtrl
    ]]]


As of spring 103.0 it is necessary to unlock feature movement on x,z axis before changing feature physics. For example use "Spring.SetFeatureMoveCtrl(featureID,false,1,1,1,1,1,1,1,1,1)" to unlock all movement prior to making SetFeatureVelocity calls.
{{LuaCallout
|prefix = Spring.
|name = SetFeatureDirection
|arg1 = {{type|number}} featureID
|arg2 = {{type|number}} dirX, {{type|number}} dirY, {{type|number}} dirZ
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info =
}}


'''Spring.SetFeatureNoSelect'''
  ( number featureID, boolean noSelect ) -> nil


'''Spring.SetFeatureAlwaysVisible'''
{{LuaCallout
  ( number featureID, boolean enable ) -> nil
|prefix = Spring.
|name = SetFeatureRotation
|arg1 = {{type|number}} featureID
|arg2 = {{type|number}} rotX, {{type|number}} rotY, {{type|number}} rotZ
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info = {{new|101.0}}
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = SetFeatureVelocity
|arg1 = {{type|number}} featureID
|arg2 = {{type|number}} velX, {{type|number}} velY, {{type|number}} velZ
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info = {{New|95.0}}
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = SetUnitPhysics
|arg1 = {{type|number}} featureID
|arg2 = {{type|number}} posX, {{type|number}} posY, {{type|number}} posZ
|arg3 = {{type|number}} velX, {{type|number}} velY, {{type|number}} velZ
|arg4 = {{type|number}} rotX, {{type|number}} rotY, {{type|number}} rotZ
|arg5 = {{type|number}} dragX, {{type|number}} dragY, {{type|number}} dragZ
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info = {{New|95.0}}
}}
 
 
 
{{LuaCallout
|prefix = Spring.
|name = SetFeatureMoveCtrl
|arg1 = {{type|number}} featureID {{bracket}}
|arg2 = {{type|bool}} enable {{bracket}}
|arg3 = {{type|number*}} args {{rbracket}}{{rbracket}}
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info = Use this callout to control feature movement. The number* arguments are parsed as follows and all optional:<br><br>If enable is true:<br>{{bracket}}, velVector(x,y,z) -- initial velocity for feature<br>{{bracket}}, accVector(x,y,z) -- acceleration added every frame{{rbracket}}{{rbracket}}<br><br>If enable is false:<br>{{bracket}}, velocityMask(x,y,z) -- dimensions in which velocity is allowed to build when not using MoveCtrl<br>{{bracket}},  impulseMask(x,y,z) -- dimensions in which impulse is allowed to apply when not using MoveCtrl<br>{{bracket}}, movementMask(x,y,z) -- dimensions in which feature is allowed to move when not using MoveCtrl{{rbracket}}{{rbracket}}{{rbracket}}<br><br>As of spring 103.0 it is necessary to unlock feature movement on x,z axis before changing feature physics. For example use "Spring.SetFeatureMoveCtrl(featureID,false,1,1,1,1,1,1,1,1,1)" to unlock all movement prior to making SetFeatureVelocity calls.
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = SetFeatureNoSelect
|arg1 = {{type|number}} featureID
|arg2 = {{type|bool}} noSelect
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info =
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = SetFeatureAlwaysVisible
|arg1 = {{type|number}} featureID
|arg2 = {{type|bool}} enable
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info =
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = SetFeatureCollisionVolumeData
|arg1 = {{type|number}} featureID
|arg2 = {{type|number}} scaleX, {{type|number}} scaleY, {{type|number}} scaleZ
|arg3 = {{type|number}} offsetX, {{type|number}} offsetY, {{type|number}} offsetZ
|arg4 = {{type|number}} vType
|arg5 = {{type|number}} tType
|arg6 = {{type|number}} Axis
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info = Check Spring.SetUnitCollisionVolumeData for further explanation of the arguments.
}}
 
 
{{LuaCallout
|prefix = Spring.
|name = SetFeaturePieceCollisionVolumeData
|arg1 = {{type|number}} featureID
|arg2 = {{type|number}} pieceIndex
|arg3 = {{type|bool}} enable
|arg4 = {{type|number}} scaleX, {{type|number}} scaleY, {{type|number}} scaleZ
|arg5 = {{type|number}} offsetX, {{type|number}} offsetY, {{type|number}} offsetZ
|arg6 = {{type|number}} Axis
|arg7 = {{type|number}} volumeType {{bracket}}
|arg8 = {{type|number}} primaryAxis {{rbracket}}
|arg9 =
|return = {{type|nil}}
|info = {{new|101.0}}
}}


'''Spring.SetFeatureCollisionVolumeData'''
  ( number featureID, number scaleX, number scaleY, number scaleZ,
    number offsetX, number offsetY, number offsetX,
    number vType, number tType, number Axis
  ) -> nil
  <span class=note>check Spring.SetUnitCollisionVolumeData for further explanation of the arguments</span>


'''Spring.SetFeaturePieceCollisionVolumeData''' {{new|101.0}}
  ( number featureID, number pieceIndex, boolean enable,
    number scaleX, number scaleY, number scaleZ,
    number offsetX, number offsetY, number offsetZ
    [, number volumeType [, number primaryAxis]]
  ) -> nil


'''Spring.SetFeatureMidAndAimPos''' {{new|89.0}}
{{LuaCallout
  ( number unitID,  
|prefix = Spring.
    number mpx, number mpy, number mpz,
|name = SetFeatureMidAndAimPos
    number apx, number apy, number apz,
|arg1 = {{type|number}} featureID
    [, boolean relative] ) -> boolean success
|arg2 = {{type|number}} mpX, {{type|number}} mpY, {{type|number}} mpZ
|arg3 = {{type|number}} apX, {{type|number}} apY, {{type|number}} apZ {{bracket}}
|arg4 = {{type|bool}} relative
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|bool}} success
|info = {{new|89.0}}<br>Check Spring.SetUnitMidAndAimPos for further explanation of the arguments.
}}


  <span class=note>check Spring.SetUnitMidAndAimPos for further explanation of the arguments</span>


{{LuaCallout
|prefix = Spring.
|name = SetFeatureRadiusAndHeight
|arg1 = {{type|number}} featureID
|arg2 = {{type|number}} radius
|arg3 = {{type|number}} height
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|bool}} success
|info = {{new|89.0}}
}}


'''Spring.SetFeatureRadiusAndHeight''' {{new|89.0}}
  ( number unitID, number radius, number height ) -> boolean success


'''Spring.SetFeatureMass''' {{new|101.0}}
{{LuaCallout
  ( number featureID, number mass ) -> nil
|prefix = Spring.
|name = SetFeatureMass
|arg1 = {{type|number}} featureID
|arg2 = {{type|number}} mass
|arg3 =
|arg4 =
|arg5 =
|arg6 =
|arg7 =
|arg8 =
|arg9 =
|return = {{type|nil}}
|info = {{new|101.0}}
}}


'''Spring.SetFeatureBlocking'''
  (number featureID, boolean blocking, boolean collidable) --> boolean


'''Spring.SetFeatureBlocking''' {{new|95.0}} changed parameters:
{{LuaCallout
  number featureID,
|prefix = Spring.
  boolean isBlocking,
|name = SetFeatureBlocking
  boolean isSolidObjectCollidable,
|arg1 = {{type|number}} featureID
  boolean isProjectileCollidable,
|arg2 = {{type|boolean}} isBlocking
  boolean isRaySegmentCollidable,
|arg3 = {{type|boolean}} isSolidObjectCollidable
  boolean crushable,
|arg4 = {{type|boolean}} isProjectileCollidable
  boolean blockEnemyPushing,
|arg5 = {{type|boolean}} isRaySegmentCollidable
  boolean blockHeightChanges
|arg6 = {{type|boolean}} crushable
|arg7 = {{type|boolean}} blockEnemyPushing
|arg8 = {{type|boolean}} blockHeightChanges
|arg9 =
|return = {{type|nil}}
|info = {{new|95.0}}<br> Changed parameters.
}}


= Lua to COB =
= Lua to COB =

Revision as of 00:24, 4 March 2021

Development < Lua Scripting < User:Master-athmos


Spring.SetUnitBlocking ( number unitID, boolean isBlocking, boolean isSolidObjectCollidable, boolean isProjectileCollidable, boolean isRaySegmentCollidable, boolean crushable, boolean blockEnemyPushing, boolean blockHeightChanges )
return: nil

No description available


Spring.SetUnitBuildSpeed ( number builderID, number buildSpeed, [number repairSpeed], [number reclaimSpeed], [number resurrectSpeed], [number captureSpeed], [number terraformSpeed] )
return: nil

No description available


Spring.SetUnitBuildSpeed ( number builderID, number buildSpeed, [number repairSpeed, [number reclaimSpeed, [number resurrectSpeed, [number captureSpeed, [number terraformSpeed ]]]]] )
return: nil

No description available

Development < Lua Scripting < User:Master-athmos

Game End

Spring.KillTeam ( number teamID )
return: nil

New in version 83.0
Will declare a team to be dead ( no further orders can be assigned to such teams's units ), Gaia team cannot be killed.


Spring.GameOver ( number allyTeamID1, number allyTeamID2, ... )
return: nil

New in version 83.0
Will declare game over, a list of winning allyteams can be passed, if undecided ( like when dropped from the host ) it should be empty ( no winner ), in the case of a draw with multiple winners, all should be listed.

RulesParams

String values are new since 95.0. Attention: Numeric paramValues in quotes will be converted to number.

Spring.SetUnitRulesParam ( number unitID, string paramName, number|string paramValue [, table losAccess ] )
return: nil

Possible keys for the losAccess table are:
   `private` : only readable by the ally (default)
   `allied`  : readable by ally + ingame allied
   `inlos`   : readable if the unit is in LOS
   `inradar` : readable if the unit is in AirLOS
   `public`  : readable by all
  note: if one condition is fulfilled all beneath it are too (e.g. if an unit is in LOS it
can read params with `inradar=true` even if the param has `inlos=false`) note2: all GameRulesParam are public, TeamRulesParams can just be `private`,`allied`
and/or `public` note3: You can read RulesParams from any Lua enviroments! With those losAccess
policies you can limit their access.


Spring.SetFeatureRulesParam ( number featureID, string paramName, number|string paramValue [, table losAccess ] )
return: nil

New since 102.0.
See above for further documentation of losAccess.


Spring.SetTeamRulesParam ( number teamID, string paramName, number|string paramValue [, table losAccess ] )
return: nil

See above for further documentation of losAccess.


Spring.SetGameRulesParam ( string paramName, number|string paramValue [, table losAccess ] )
return: nil

See above for further documentation of losAccess.

Resources

Spring.AddTeamResource ( number teamID, string "metal" | "energy", number amount )
return: nil

Adds metal or energy resources to the specified team.


Spring.UseTeamResource ( number teamID, string "metal" | "energy", number amount | { metal = number amount, energy = number amount } )
return: nil | bool hadEnough

Consumes metal and/or energy resources of the specified team.


Spring.SetTeamResource ( number teamID, string res, number amount )
return: nil

Possible values for res are:
"m" = metal
"e" = energy
"ms" = metal storage
"es" = energy storage


Spring.SetTeamShareLevel ( number teamID, string "metal" | "energy", number amount )
return: nil

Changes the resource amount for a team beyond which resources aren't stored but transferred to other allied teams if possible.


Spring.ShareTeamResource ( number teamID_src, number teamID_recv, string "metal" | "energy", number amount )
return: nil

Transfers resources between two teams.

Teams

Spring.SetAlly ( number firstAllyTeamID, number secondAllyTeamID, bool ally )
return: nil

New in version 98.0
Changes the value of the (one-sided) alliance between: firstAllyTeamID -> secondAllyTeamID.


Spring.AssignPlayerToTeam ( number playerID, number teamID )
return: nil

New in version 98.0
Assigns a player to a team.


Spring.SetGlobalLos ( number allyTeamID, bool globallos )
return: nil

New in version 101.0
Changes access to global line of sight for a team and its allies.

Unit Handling

Spring.CreateUnit ( string "defName" | number unitDefID, number x, number y, number z, string "facing" | number facing, number teamID [, bool build = false [, bool flattenGround = true [, number builderID ]]] )
return: number unitID | nil (meaning unit was not created)

Offmap positions are clamped! Use MoveCtrl to move to such positions.
Possible values for facing are:
"south" | "s" | 0
"east" | "e" | 1
"north" | "n" | 2
"west" | "w" | 3

If build is true, the unit is created in "being built" state with buildProgress = 0
unitID and builderID are New in version 92.0, the former allowing to spawn a unit with a specific ID.


Spring.DestroyUnit ( number unitID [, bool selfd = false [, bool reclaimed = false [, number attackerID ]]] )
return: nil

selfd := Makes the unit act like it self-destructed.
reclaimed := Don't show any DeathSequences, don't leave a wreckage. This does not give back the resources to the team!


Spring.TransferUnit ( number unitID, number newTeamID [, bool given = true ] )
return: nil

If given=false, the unit is captured.

Unit Control

Spring.SetUnitCosts ( number unitID, { [ buildTime = number amount ], [ metalCost = number amount ], [ energyCost = number amount ] } )
return: nil


Spring.SetUnitTooltip ( number unitID, string "tooltip" )
return: nil


Spring.SetUnitHealth ( number unitID, number health | { [ health = number health ], [ capture = number capture ], [ paralyze = number paralyze ], [ build = number build ] } )
return: nil


Spring.SetUnitMaxHealth ( number unitID, number maxHealth )
return: nil


Spring.AddUnitDamage ( number unitID, number damage [, number paralyze = 0 [, number attackerID = -1 [, number weaponID = -1 [, number impulse_x [, number impulse_y [, number impulse_z ]]]]]] )
return: nil

The number in the paralyze parameter equals to the paralyzetime in the WeaponDef.


Spring.SetUnitStockpile ( number unitID [, number stockpile [, number buildPercent ]] )
return: nil


Spring.SetUnitExperience ( number unitID, number experience, number buildPercent )
return: nil


Spring.SetUnitFuel ( number unitID, number fuel )
return: nil

Removed from version 101.0


Spring.SetUnitCrashing ( number unitID, bool crashing )
return: bool success

New in version 83.0


Spring.SetUnitLineage ( number unitID, number teamID [, bool isRoot ] )
return: nil

Removed from version 83.0


Spring.SetUnitNeutral ( number unitID, bool neutral )
return: nil

Removed from version 83.0


Spring.SetUnitTarget ( number unitID, number x | nil, number y, number z [, bool dgun = false [, bool userTarget = false [, number weaponNum = -1 ]]] )
return: bool success

or

Spring.SetUnitTarget ( number unitID, number enemyUnitID | nil [, bool dgun = false [, bool userTarget = false [, number weaponNum = -1 ]]] )
return: bool success

Defines a unit's target. Nil as 2nd argument drops the unit's current target.
UserTarget & success new in version 95.0, setting nil target new in version 99.0, weaponNum new in version 102.0.


Spring.SetUnitMaxRange ( number unitID, number maxRange )
return: nil


Spring.SetUnitMass ( number unitID, number mass )
return: nil

New in version 101.0


Spring.SetUnitBlocking ( number unitID, bool isblocking, bool isSolidObjectCollidable, bool isProjectileCollidable, bool isRaySegmentCollidable, bool crushable, bool blockEnemyPushing, bool blockHeightChanges )
return: nil

New in version 95.0
Changed parameters.


Spring.SetUnitMetalExtraction ( number unitID, number depth [, number range ] )
return: nil

Parameter "depth" corresponds to metal extraction rate. Range value is similar to "extractsMetal" in unitDefs.


Spring.SetUnitBuildSpeed ( number builderID, number buildSpeed [, number repairSpeed [, number reclaimSpeed[, number resurrectSpeed [, number captureSpeed [, number terraformSpeed ]]]]] )
return: nil


Spring.SetUnitNanoPieces ( number builderID, table pieces [ )
return: nil

New in version 92.0
This saves a lot of engine calls, by replacing: function script.QueryNanoPiece() return currentpiece end
Use it!


Spring.UnitAttach ( number transporterID, number passengerID, number pieceNum )
return: nil

New in version 101.0


Spring.UnitDetach ( number passengerID )
return: nil

New in version 101.0


Spring.UnitDetachFromAir ( number passengerID )
return: nil

New in version 101.0


Spring.SetUnitLoadingTransport ( number passengerID, number transportID )
return: nil

New in version 101.0
Disables collisions between the two units to allow colvol intersection during the approach.


Spring.SetUnitPieceParent ( number unitID, number AlteredPiece, number ParentPiece )
return: nil

New in version 101.0
Changes the pieces hierarchy of a unit by attaching a piece to a new parent.


Spring.SetUnitPieceMatrix ( number unitID, number pieceNum, table matrix )
return: nil

New in version 104.0
Sets the local (i.e. parent-relative) matrix of the given piece if any of the first three elements are non-zero, and also blocks all script animations from modifying it until {0, 0, 0} is passed (matrix should be an array of 16 floats, but is not otherwise sanity-checked).


Spring.SetUnitArmored ( number unitID, bool armored [, number armorMultiple ] )
return: nil

armorMultiple new in version 0.83.x


Spring.SetUnitShieldState ( number unitID [, number weaponID = -1 [, bool enabled [, number power ]]] )
return: nil


Spring.SetUnitFlanking ( number unitID, string "mode", number mode )
return: nil

or

Spring.SetUnitFlanking ( number unitID, string "moveFactor", number factor )
return: nil

or

Spring.SetUnitFlanking ( number unitID, string "minDamage", number minDamage )
return: nil

or

Spring.SetUnitFlanking ( number unitID, string "maxDamage", number maxDamage )
return: nil

or

Spring.SetUnitFlanking ( number unitID, string "dir", number x, number y, number z )
return: nil


Spring.SetUnitWeaponState ( number unitID, number weaponNum, table states )
return: nil

or

Spring.SetUnitWeaponState ( number unitID, number weaponNum, string key, number value )
return: nil

Format of the states table:

   {
     ["reloadState"     = number value,]
     ["reloadFrame"     = number value,] (synonym for reloadState!)
     ["reloadTime"      = number value,]
     ["accuracy"        = number value,]
     ["sprayAngle"      = number value,]
     ["range"           = number value,] (*)
     ["projectileSpeed" = number value,]
     ["burst"           = number value,]
     ["burstRate"       = number value,]
     ["projectiles"     = number value,]
     ["salvoLeft"       = number value,]
     ["nextSalvo"       = number value,]
     ["aimReady"        = number value,] (<>0.0f := true)
   }
 (*) if you change the range of a weapon with dynamic damage
 make sure you use SetUnitWeaponDamages to change dynDamageRange as well.
 


Spring.SetUnitWeaponDamages ( number unitID, number weaponNum | string "selfDestruct" | string "explode", table damages )
return: nil

or

Spring.SetUnitWeaponDamages ( number unitID, number weaponNum | string "selfDestruct" | string "explode", string key, number value )
return: nil

New in version 101.0

Format of the damages table:

  {
     ["paralyzeDamageTime" = number value,]  
     ["impulseFactor"      = number value,]
     ["impulseBoost"       = number value,]
     ["craterMult"         = number value,]
     ["craterBoost"        = number value,]
     ["dynDamageExp"       = number value,]
     ["dynDamageMin"       = number value,]
     ["dynDamageRange"     = number value,]
     ["dynDamageInverted"  = number value,] (<>0.0f := true)
     ["craterAreaOfEffect" = number value,]
     ["damageAreaOfEffect" = number value,]
     ["edgeEffectiveness"  = number value,]
     ["explosionSpeed"     = number value,]
     [number armorType     = number value,] (changes the damage against this armor type)
   }
 


Spring.SetUnitCollisionVolumeData ( number unitID, number scaleX, number scaleY, number scaleZ, number offsetX, number offsetY, number offsetZ, number vType, number tType, number Axis )
return: nil

 enum COLVOL_TYPES {
     COLVOL_TYPE_DISABLED = -1,
     COLVOL_TYPE_ELLIPSOID = 0,
     COLVOL_TYPE_CYLINDER,
     COLVOL_TYPE_BOX,
     COLVOL_TYPE_SPHERE,
     COLVOL_NUM_TYPES       // number of non-disabled collision volume types
   };
   enum COLVOL_TESTS {
     COLVOL_TEST_DISC = 0,
     COLVOL_TEST_CONT = 1,
     COLVOL_NUM_TESTS = 2   // number of tests
   };
   enum COLVOL_AXES {
     COLVOL_AXIS_X   = 0,
     COLVOL_AXIS_Y   = 1,
     COLVOL_AXIS_Z   = 2,
     COLVOL_NUM_AXES = 3    // number of collision volume axes
   };
 


Spring.SetUnitPieceCollisionVolumeData ( number unitID, number pieceIndex, bool enable, number scaleX, number scaleY, number scaleZ, number offsetX, number offsetY, number offsetZ [, number volumeType [, number primaryAxis ]] )
return: nil

As of 101.0 this is 1-based piece index argument (was 0-based).


Spring.SetUnitTravel ( number unitID, number travel [, number travelPeriod ] )
return: nil


Spring.SetUnitMoveGoal ( number unitID, number goalX, number goalY, number goalZ [, number goalRadius [, number moveSpeed [, bool moveRaw ]]] )
return: nil

Used by default commands to get in build-, attackrange etc.
New in version 98.0 moveRaw: allow unit to dumbly move to a coordinate without calculating path.


Spring.SetUnitLandGoal ( number unitID, number goalX, number goalY, number goalZ [, number goalRadius ] )
return: nil

New in version 101.0
Used in conjunction with Spring.UnitAttach et al. to re-implement old airbase & fuel system in Lua.


Spring.ClearUnitGoal ( number unitID )
return: nil

New in version 102.0


Spring.SetUnitPhysics ( number unitID, number posX, number posY, number posZ, number velX, number velY, number velZ, number rotX, number rotY, number rotZ, number dragX, number dragY, number dragZ )
return: nil

Drag new in version 95.0


Spring.SetUnitPosition ( number unitID, number x, number z [, bool alwaysAboveSea ] )
return: nil


Spring.SetUnitDirection ( number unitID, number x, number y, number z )
return: nil

New in version 90.0


Spring.SetUnitVelocity ( number unitID, number velX, number velY, number velZ )
return: nil


Spring.SetUnitRotation ( number unitID, number rotX, number rotY, number rotZ )
return: nil


Spring.AddUnitImpulse ( number unitID, number x, number y, number z [, number decayRate ] )
return: nil


Spring.AddUnitSeismicPing ( number unitID, number pingSize )
return: nil


Spring.RemoveBuildingDecal ( number unitID )
return: nil


Spring.SetUnitMidAndAimPos ( number unitID, number mpX, number mpY, number mpZ, number apX, number apY, number apZ [, bool relative ] )
return: bool success

New in version 89.0
mpx, mpy, mpz: New middle position of unit
apx, apy, apz: New position that enemies aim at on this unit
relative: Are the new coordinates relative to world or unit coordinates?


Spring.SetUnitRadiusAndHeight ( number unitID, number radius, number height )
return: bool success

New in version 89.0


Spring.UnitWeaponFire ( number unitID, number weaponID )
return: nil


Spring.UnitWeaponHoldFire ( number unitID, number weaponID )
return: nil

Unit LOS

Spring.SetUnitCloak ( number unitID, bool cloaked | number scriptCloak [, bool decloakAbs | number decloakDistance ] )
return: nil

If the 2nd argument is a number, the value works like this:
1:=normal cloak
2:=for free cloak (cost no E)
3:=for free + no decloaking (except the unit is stunned)
4:=ultimative cloak (no ecost, no decloaking, no stunned decloak)

The decloak distance is only changed:
- if the 3th argument is a number or a boolean.
- if the boolean is false it takes the default decloak distance for that unitdef,
- if the boolean is true it takes the absolute value of it.


Spring.SetUnitSonarStealth ( number unitID, bool sonarStealth )
return: nil


Spring.SetUnitStealth ( number unitID, bool stealth )
return: nil


Spring.SetUnitAlwaysVisible ( number unitID, bool alwaysVisible )
return: nil


Spring.SetUnitLosMask ( number unitID, number allyTeam, number los | table losTypes )
return: nil

The 3rd argument is either the bit-and combination of the following numbers:
LOS_INLOS = 1
LOS_INRADAR = 2
LOS_PREVLOS = 4
LOS_CONTRADAR = 8

or a table of the following form:
losTypes = {
[los = boolean,]
[radar = boolean,]
[prevLos = boolean,]
[contRadar = boolean]
}


Spring.SetUnitLosState ( number unitID, number allyTeam, number los | table losTypes )
return: nil

See above for more info on the arguments.


Spring.SetUnitSensorRadius ( number unitID, string type, number radius )
return: nil | number newRadius

Type can be:
"los", "airLos", "radar", "sonar", "seismic", "radarJammer", "sonarJammer"


Spring.SetRadarErrorParams ( number allyTeamID, number allyteamErrorSize [, number baseErrorSize [, number baseErrorMult ]] )
return: nil

New in version 95.0


Spring.SetUnitPosErrorParams ( number unitID, number posErrorVector.x, number posErrorVector.y, number posErrorVector.z,, number posErrorDelta.x, number number posErrorDelta.y, number posErrorDelta.z [, number nextPosErrorUpdate ] )
return: nil

New in version 95.0

Unit Resourcing

Spring.SetUnitResourcing ( number unitID, string res, number amount )
return: nil

or

Spring.SetUnitResourcing ( number unitID, { res = number amount, ... } )
return: nil

Possible values for res are: "[u|c][u|m][m|e]"
unconditional | conditional
use | make
metal | energy


Spring.AddUnitResource ( number unitID, string "m" | "e", number amount )
return: nil


Spring.UseUnitResource ( number unitID, string "m" | "e", number amount )
return: nil | bool okay

or

Spring.UseUnitResource ( number unitID, { [ "m" | "metal" | "e" | "energy" ] = amount, ... } )
return: nil | bool okay


Spring.SetUnitHarvestStorage ( number unitID, number metal )
return: nil

New in version 97.0
See also harvestStorage UnitDef tag.

Feature Handling

Spring.CreateFeature ( string "defName" | number featureDefID, number x, number y, number z [, number heading [, number AllyTeamID [, number featureID ]]] )
return: number featureID


Spring.DestroyFeature ( number featureDefID )
return: nil


Spring.TransferFeature ( number featureDefID, number teamID )
return: nil

Feature Control

Spring.SetFeatureHealth ( number featureID, number health )
return: nil


Spring.SetFeatureResources ( number featureID, number metal, number energy [, number reclaimTime [, number reclaimLeft ]{rbracket, {{{arg6}}}, {{{arg7}}}, {{{arg8}}}, {{{arg9}}} )

|arg6 = |arg7 = |arg8 = |arg9 = |return = nil |info = New in version 104.0 }}


Spring.SetFeatureReclaim ( number featureID, number reclaimLeft )
return: nil


Spring.SetFeatureResurrect ( number featureID, number unitDefID | string unitDefName [, number facing | string "facing" [, number progress ]] )
return: nil

New in version 104.0 Second param can now be a number id instead of a string name, this also allows cancelling ressurection by passing -1. The level of progress can now be set via the additional 4th param.
Possible values for facing are:
"south" | "s" | 0
"east" | "e" | 1
"north" | "n" | 2
"west" | "w" | 3


Spring.SetFeaturePosition ( number featureID, number x, number y, number z [, bool snapToGround ] )
return: nil


Spring.SetFeatureDirection ( number featureID, number dirX, number dirY, number dirZ )
return: nil


Spring.SetFeatureRotation ( number featureID, number rotX, number rotY, number rotZ )
return: nil

New in version 101.0


Spring.SetFeatureVelocity ( number featureID, number velX, number velY, number velZ )
return: nil

New in version 95.0


Spring.SetUnitPhysics ( number featureID, number posX, number posY, number posZ, number velX, number velY, number velZ, number rotX, number rotY, number rotZ, number dragX, number dragY, number dragZ )
return: nil

New in version 95.0


Spring.SetFeatureMoveCtrl ( number featureID [, bool enable [, number* args ]] )
return: nil

Use this callout to control feature movement. The number* arguments are parsed as follows and all optional:

If enable is true:
[, velVector(x,y,z) -- initial velocity for feature
[, accVector(x,y,z) -- acceleration added every frame]]

If enable is false:
[, velocityMask(x,y,z) -- dimensions in which velocity is allowed to build when not using MoveCtrl
[, impulseMask(x,y,z) -- dimensions in which impulse is allowed to apply when not using MoveCtrl
[, movementMask(x,y,z) -- dimensions in which feature is allowed to move when not using MoveCtrl]]]

As of spring 103.0 it is necessary to unlock feature movement on x,z axis before changing feature physics. For example use "Spring.SetFeatureMoveCtrl(featureID,false,1,1,1,1,1,1,1,1,1)" to unlock all movement prior to making SetFeatureVelocity calls.


Spring.SetFeatureNoSelect ( number featureID, bool noSelect )
return: nil


Spring.SetFeatureAlwaysVisible ( number featureID, bool enable )
return: nil


Spring.SetFeatureCollisionVolumeData ( number featureID, number scaleX, number scaleY, number scaleZ, number offsetX, number offsetY, number offsetZ, number vType, number tType, number Axis )
return: nil

Check Spring.SetUnitCollisionVolumeData for further explanation of the arguments.


Spring.SetFeaturePieceCollisionVolumeData ( number featureID, number pieceIndex, bool enable, number scaleX, number scaleY, number scaleZ, number offsetX, number offsetY, number offsetZ, number Axis, number volumeType [, number primaryAxis ] )
return: nil

New in version 101.0


Spring.SetFeatureMidAndAimPos ( number featureID, number mpX, number mpY, number mpZ, number apX, number apY, number apZ [, bool relative )
return: bool success

New in version 89.0
Check Spring.SetUnitMidAndAimPos for further explanation of the arguments.


Spring.SetFeatureRadiusAndHeight ( number featureID, number radius, number height )
return: bool success

New in version 89.0


Spring.SetFeatureMass ( number featureID, number mass )
return: nil

New in version 101.0


Spring.SetFeatureBlocking ( number featureID, boolean isBlocking, boolean isSolidObjectCollidable, boolean isProjectileCollidable, boolean isRaySegmentCollidable, boolean crushable, boolean blockEnemyPushing, boolean blockHeightChanges )
return: nil

New in version 95.0
Changed parameters.

Lua to COB

Spring.CallCOBScript

 ( number unitID, number funcID | string funcName, number retArgs, COBArg1, COBArg2, ... )
   -> nil | number returnValue, number retArg1, number retArg2, ...

Spring.CallCOBScriptCB
broken in 0.78.2.1; will be removed with the introduction of Lua as COB replacement

 ( number unitID, number funcID | string funcName, number retArgs, COBArg1, COBArg2, ... )
   -> nil | number returnValue, number CallbackData, number retArg1, number retArg2, ...

Spring.GetCOBScriptID

 ( number unitID, string funcName ) -> nil | number funcID


Note: Don't use Spring.[Get|Set]UnitCOBValue in LUS just because you are familar with it since bos/cob, use the mighty LuaSpringAPI instead!

Spring.GetUnitCOBValue

 ( number unitID [, boolean splitData=false], number COBValue
   [, number param1 [,number param2 [, number param3 [, number param4 ] ] ] ] )
 -> number result | number result1, number result2
 you find the possible values for `COBValue` in Lua_ConstCOB
  also see Custom_Variables

Spring.SetUnitCOBValue

 ( number unitID, number COBValue, number param1 [,number param2] ) -> nil
 you find the possible values for `COBValue` in Lua_ConstCOB
  also see Custom_Variables

Give Order

options can also be a bitmask; e.g. 0 instead of an empty table (can avoid performance hit on table creation)
see Lua CMDs for relevant constants

Spring.GiveOrderToUnit

 ( number unitID,
   number cmdID,
   params = {number, etc...},
   options = {"alt", "ctrl", "shift", "right"} ) -> nil

Spring.GiveOrderToUnitMap

 ( unitMap = { [unitID] = dontCare, etc... },
   number cmdID,
   params = {number, etc...},
   options = {"alt", "ctrl", "shift", "right"} ) -> nil

Spring.GiveOrderToUnitArray

 ( unitArray = { [1] = unitID, etc... },
   number cmdID,
   params = {number, etc...},
   options = {"alt", "ctrl", "shift", "right"} ) -> nil

Spring.GiveOrderArrayToUnitMap

 ( unitMap = { [number unitID] = dontCare, etc... },
   orderArray = {
     { number cmdID,
       {number, etc...},     params
       {"alt", "ctrl", "shift", "right"}   options
     }, ..
   }
 ) -> nil

Spring.GiveOrderArrayToUnitArray

 ( unitArray = { [1] = number unitID, etc... },
   orderArray = {
     { number cmdID,
       {number, etc...},    params
       {"alt", "ctrl", "shift", "right"}   options
     }, ..
   }
 ) -> nil

Ground

Grass

Spring.AddGrass

 ( number x, number z ) -> nil

Spring.RemoveGrass

 ( number x, number z ) -> nil

Heightmap

Note that x & z coords are in worldspace (Game.mapSizeX/Z), still the heightmap resolution is Game.squareSize.

Spring.LevelHeightMap

 ( number x1, number z1 [, number x2, number z2], number height ) -> nil

Spring.AdjustHeightMap (heightmap[x][z] += height;)

 ( number x1, number z1 [, number x2, number z2], number height ) -> nil

Spring.RevertHeightMap

 ( number x1, number z1 [, number x2, number z2], number origFactor ) -> nil



Spring.SetHeightMapFunc

 ( lua_function [, arg1 ,[ arg2 [, ... ] ] ) -> nil | number absTotalHeightMapAmountChanged

Example code:

Spring.SetHeightMapFunc(function()
	for z=0,Game.mapSizeZ, Game.squareSize do
		for x=0,Game.mapSizeX, Game.squareSize do
			Spring.SetHeightMap( x, z, 200 + 20 * math.cos((x + z) / 90) )
		end
	end
end)

Spring.AddHeightMap can only be called in SetHeightMapFunc()

 ( number x, number z, number height ) -> nil | number newHeight

Spring.SetHeightMap can only be called in SetHeightMapFunc()

 ( number x, number z, number height [,number terraform = 1] ) -> nil | number absHeightDiff

the terraform argument is a scaling factor: so if 0 nothing will be changed (the terraform starts) and if it is 1 the terraform will be finished.




Spring.LevelSmoothMesh

 ( number x1, number z1 [, number x2, number z2], number height ) -> nil

Spring.AdjustSmoothMesh

 ( number x1, number z1 [, number x2, number z2], number height ) -> nil

Spring.RevertSmoothMesh

 ( number x1, number z1 [, number x2, number z2], number origFactor ) -> nil

Spring.SetSmoothMeshFunc

 ( lua_function [, arg1 ,[ arg2 [, ... ] ] ) -> nil | number absTotalHeightMapAmountChanged

Spring.AddSmoothMesh can only be called in SetSmoothMeshFunc()

 ( number x, number z, number height ) -> nil | number newHeight

Spring.SetSmoothMesh can only be called in SetSmoothMeshFunc()

 ( number x, number z, number height [,number terraform = 1] ) -> nil | number absHeightDiff

TerrainTypes

Spring.SetMapSquareTerrainType

 ( number x, number z, int newType ) -> nil | int oldType

Spring.SetTerrainTypeData

 ( int typeIndex
 [, number speedTanks = nil ]
 [, number speedKBOTs = nil ]
 [, number speedHovers = nil ]
 [, number speedShips = nil ] ) -> nil | boolean true

Spring.SetSquareBuildingMask New in version 103.0

 ( number x, number z, int mask ) -> nil

See also buildingMask unitdef tag.

MetalAmount

Spring.SetMetalAmount New in version 83.0

 ( number x, number z, number metalAmount)

x & z coords are in worldspace/16
metalAmount must be between 0 and 255*maxMetal (with maxMetal from the .smd or mapinfo.lua)

Command Descriptions

Doesn't work in unsynced code!

Spring.EditUnitCmdDesc

 ( number unitID, number cmdDescID, table cmdArray ) -> nil

 structure of cmdArray:
 {
   [ id          = int ],
   [ type        = int ],
   [ name        = string ],
   [ action      = string ],
   [ tooltip     = string ],
   [ texture     = string ],
   [ cursor      = string ],
   [ queueing    = boolean ],
   [ hidden      = boolean ],
   [ disabled    = boolean ],
   [ showUnique  = boolean ],
   [ onlyTexture = boolean ],
   [ params      = { string = string, ... } ]
 }

queueing is New in version 101.0 and allows custom commands to be non-queueing (handy for state toggles).

Spring.InsertUnitCmdDesc

 ( number unitID [, number cmdDescID ] , table cmdArray ) -> nil

Spring.RemoveUnitCmdDesc

 ( number unitID [, number cmdDescID ] ) -> nil

Other

Spring.SetNoPause

 ( boolean noPause ) -> nil

Spring.SetUnitToFeature

 ( boolean tofeature ) -> nil

an ugly global switch that can be used to block units turning into features when they finish being built (like *A DT's do, which have the isFeature tag) thread

Spring.SetExperienceGrade

 ( number expGrade [, number ExpPowerScale [, number ExpHealthScale [, number ExpReloadScale ]]] ) -> nil
 expGrade defines how often UnitExperience() will be called,
 Prior to 104.0 it is based on the following equation:
    (int) [exp/(exp+1)] / expGrade
 Post 104.0 it is the raw change.

Spring.SpawnExplosion New in version 104.0

 ( number posX = 0, number posY = 0, number posZ = 0,
   number dirX = 0, number dirY = 0, number dirZ = 0,
   table explosionParams
 ) -> nil
 possible keys of explosionParams are:
   weaponDef = number,
   owner = number,
   hitUnit = number,
   hitFeature = number,
   craterAreaOfEffect = number,
   damageAreaOfEffect = number,
   edgeEffectiveness = number,
   explosionSpeed = number,
   gfxMod = number,
   impactOnly = boolean,
   ignoreOwner = boolean,
   damageGround = boolean,
 

Please note the explosion defaults to 1 damage regardless of what it's defined in the weaponDef. The weapondefID is only used for visuals and for passing into callins like UnitDamaged


Spring.SpawnCEG

 ( string "cegname" | number cegID,
   number posX = 0, number posY = 0, number posZ = 0,
   number dirX = 0, number dirY = 0, number dirZ = 0,
   number radius = 0, number damage = 0
 ) -> nil | boolean success, cegID

cegID new in 95.0

Spring.SpawnSFX New in version 104.0

 ( number unitID, number sfxID,
   number posX = 0, number posY = 0, number posZ = 0,
   number dirX = 0, number dirY = 0, number dirZ = 0,
   number radius = 0, number damage = 0
   [, boolean absolute ]
 ) -> nil | boolean success

Equal to the UnitScript versions of EmitSFX, but takes position and direction arguments (in either unit- or piece-space) instead of a piece index.

Projectiles

Spring.SpawnProjectile

 ( number weaponDefID, table projectileParams ) -> nil | number projectileID
 possible keys of projectileParams are:
   pos = {number x, number y, number z},
   end = {number x, number y, number z},
   speed = {number x, number y, number z},
   spread = {number x, number y, number z},
   error = {number x, number y, number z},
   owner = number,
   team = number,
   ttl = number,
   gravity = number,
   tracking = number,
   maxRange = number,
   startAlpha = number,
   endAlpha = number,
   model = string,
   cegTag = string,
 

Spring.DeleteProjectile New in version 101.0

 ( number projID ) -> nil

Silently removes projectiles (no explosion).

Spring.SetProjectileTarget

Pre 95.0: ( number projectileID,

   [ number targetID, string targetTypeStr ] | [ number posX, number posY, number posZ ] ) 
   -> nil | boolean validTarget

Post 95.0: ( number projectileID,

   [ number targetID [, number targetType]]  |  [number posX, number posY, number posZ]) 
   --> nil | boolean validTarget
 targetTypeStr can be one of: 
   'u' - unit
   'f' - feature
   'p' - projectile
 while targetTypeInt is one of:
   string.byte('g') := GROUND
   string.byte('u') := UNIT
   string.byte('f') := FEATURE
   string.byte('p') := PROJECTILE
 

Spring.SetProjectileIgnoreTrackingError New in version 101.0

 ( number projID, bool ignore ) -> nil

Spring.SetProjectileIsIntercepted New in version 99.0

 ( number projID ) -> nil

Spring.SetProjectileMoveControl (disables engine movecontrol, so lua can fully control the physics)

 ( number projID, boolean enable ) -> nil

Spring.SetProjectilePosition

 ( number projID [, number x = 0 [, number y = 0 [, number z = 0 ]]] ) -> nil

Spring.SetProjectileVelocity

 ( number projID [, number x = 0 [, number y = 0 [, number z = 0 ]]] ) -> nil

Spring.SetProjectileCollision

 ( number projID ) -> nil

Spring.SetProjectileGravity

 ( number projID [, number grav = 0] ) -> nil

Spring.SetProjectileSpinAngle New in version 95.0 Deprecated

 ( number projID [, number spinAngle = 0] ) -> nil

Spring.SetProjectileSpinSpeed New in version 95.0 Deprecated

 ( number projID [, number speed = 0] ) -> nil

Spring.SetProjectileSpinVec New in version 95.0 Deprecated

 ( number projID [, number x = 0 [, number y = 0 [, number z = 0]]] ) -> nil

Spring.SetProjectileCEG

 ( number projID, string ceg_name ) -> nil

Spring.SetPieceProjectileParams New in version 95.0

 (number projectileID,
 [ number explosionFlags, [ number spinAngle, [ number spinSpeed,
 [ number spinVector.x, [ number spinVector.y, [ number spinVector.z ]]]]]]) --> nil

Spring.SetProjectileAlwaysVisible New in version 95.0

   (number projectileID, boolean alwaysVisible) --> nil

Spring.SetProjectileDamages New in version 101.0

 ( number unitID, number weaponNum, table damages ) -> nil
 ( number unitID, number weaponNum, string key, number value ) -> nil
 format of the damages table:
  {
     ["paralyzeDamageTime" = number value,]  
     ["impulseFactor"      = number value,]
     ["impulseBoost"       = number value,]
     ["craterMult"         = number value,]
     ["craterBoost"        = number value,]
     ["dynDamageExp"       = number value,]
     ["dynDamageMin"       = number value,]
     ["dynDamageRange"     = number value,]
     ["dynDamageInverted"  = number value,] (<>0.0f := true)
     ["craterAreaOfEffect" = number value,]
     ["damageAreaOfEffect" = number value,]
     ["edgeEffectiveness"  = number value,]
     ["explosionSpeed"     = number value,]
     [number armorType     = number value,] (changes the damage against this armor type)
   }