Gamedev:WeaponDefs: Difference between revisions
→WeaponTypes: link to spreadsheet |
→WeaponTypes: description for AircraftBomb, BeamLaser |
||
| Line 29: | Line 29: | ||
{{ItemType | {{ItemType | ||
|name = AircraftBomb | |name = AircraftBomb | ||
|description = | |description = Drops a ballistic projectile at the same movement vector as the unit itself. Intended only for aircraft. By default the type automatically calculates its <code>burst</code> and <code>burstRate</code> tags from its <code>reloadTime</code> and uses 5 as its <code>reloadTime</code> instead. This is an [[OTAism]] and can be overridden with the <code>manualBombSettings</code> tag. Visually drawn as a billboarded sprite as used by the '''<code>Cannon</code>''', but more commonly used with a 3D model using the <code>model</code> tag. See the [[#AircraftBomb]] section for tags specific to this type. | ||
}} | }} | ||
{{ItemType | {{ItemType | ||
|name = BeamLaser | |name = BeamLaser | ||
|description = | |description = Spawns a beam and does a portion of its total damage each frame. Cannot be [[Animation-LuaCallouts#Effects|script emitted]] if it has a <code>beamTime</code> longer than one frame. Visually drawn as a [http://en.wikipedia.org/wiki/Star_Trek Star Trek] Phaser-style laser weapon. The <code>largeBeamLaser</code> tag allows changing the visual effect of the laser, such as using a tileable, scrolling texture without changing the behaviour. See the [[#BeamLaser]] section for tags specific to this type. | ||
}} | }} | ||
Revision as of 16:48, 23 August 2012
Location
WeaponDef files are .lua files stored in the Weapons/ directory of a Spring Game. Alternatively they can be integrated into UnitDefs.
Purpose
WeaponDef files have one purpose; to define the properties of weapons. They are the main description file for what attributes your weapon should have and how it should behave.
Source
The engine source code which loads the tags from these files is viewable here:rts/Sim/Weapons/WeaponDefHandler.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 WeaponDef table the internal weaponName desired for the weapon.
WeaponTypes
Spring has 15 WeaponTypes which provide game developers with basic behaviours which they can customise to an extent with the WeaponDef tags. Some of these types are more useful, flexible and reliable than others; particularly Cannon, LaserCannon and MissileLauncher. Some tags are specific to certain WeaponTypes and not implemented for others, this two-way table indicates which tags work for which types.
AircraftBomb
- Drops a ballistic projectile at the same movement vector as the unit itself. Intended only for aircraft. By default the type automatically calculates its
burstandburstRatetags from itsreloadTimeand uses 5 as itsreloadTimeinstead. This is an OTAism and can be overridden with themanualBombSettingstag. Visually drawn as a billboarded sprite as used by theCannon, but more commonly used with a 3D model using themodeltag. See the #AircraftBomb section for tags specific to this type.
BeamLaser
- Spawns a beam and does a portion of its total damage each frame. Cannot be script emitted if it has a
beamTimelonger than one frame. Visually drawn as a Star Trek Phaser-style laser weapon. ThelargeBeamLasertag allows changing the visual effect of the laser, such as using a tileable, scrolling texture without changing the behaviour. See the #BeamLaser section for tags specific to this type.
Cannon
- Aka plasma. Shoots a ballistic projectile. Unlike the DGun it aims properly. Can't be emit-sfxed properly, maybe a ballistic DGun can fill that role.
DGun
- TODO
EmgCannon
- TODO
Flame
- TODO
LaserCannon
- The OTA-style laser. Probably one of the least annoying weapons in the engine. Its length is defined by the duration tag (together with the speed), BTW.
LightningCannon
- TODO
Melee
- TODO
MissileLauncher
- Shoots a smoke-emitting projectile. It can use acceleration, etc. The projectile's lifetime depends on range/maxspeed so a slowly accelerating missile will fall short. It can also use trajectoryheight to have the shot arc but that has trouble with aiming at targets higher or lower than the shooter (see bug report, this REALLY could use some fixing). Pretty versatile weapon overall, if the laser rendering code was ported into this we could pretty much axe the LaserCannon completely.
Rifle
- TODO
Shield
- TODO
StarburstLauncher
- TODO
TorpedoLauncher
- TODO
NoWeapon
- TODO
General
float tagToCopyPaste default: 0.0
- Lorem ipsum dolor sit amet.
Sub Tables
damage
shield
textures
customParams
The customParams subtable of a WeaponDef allows the game designer to give their weapons 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' WeaponDefs
'Conflict Terra' WeaponDefs (Most are integrated into their UnitDefs)
'Evolution RTS' WeaponDefs (Most are integrated into their UnitDefs)
'Spring: 1944' WeaponDefs (Implements an OOP paradigm with inheritance)