Gamedev:WeaponDefs: Difference between revisions

From Spring
Jump to navigationJump to search
Flozi (talk | contribs)
→Shield: isShield
Flozi (talk | contribs)
→BeamLaser: beamTime, beamBurst
Line 192: Line 192:
|default = 0.0
|default = 0.0
|description = The minimum percentage the weapon's damage can fall-off to over its range. Setting to <code>1.0</code> will disable fall off entirely. Unrelated to the visual-only <code>intensity</code> tag.
|description = The minimum percentage the weapon's damage can fall-off to over its range. Setting to <code>1.0</code> will disable fall off entirely. Unrelated to the visual-only <code>intensity</code> tag.
}}
{{tag
|name = beamTime
|type = float
|default = 1.0
|description = How long in seconds to fire the laser before waiting for <code>reloadTime</code> to start. Damage is distributed over the duration of the <code>beamTime</code>, and the weapon will aim to hit the target when the beam is in the middle of its <code>beamTime</code> (i.e. using prediction).
}}
{{tag
|name = beamBurst
|type = bool
|default = false
|description = Makes the laser fire a burst of beams that are all aimed towards the target (instead of aimed with the piece). A '''BeamLaser''' can do its full damage with every shot if <code>beamBurst</code> is enabled. Disables <code>beamTime</code> in favour of the [[#Bursts|burst tags]].
}}
}}



Revision as of 16:21, 31 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 number
  • float - A number with decimals.
  • bool - A value which can be true or false.
  • string - Text, or more precisely a string of alphanumeric characters.
  • float[3] - A vector, with three float components, 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.

Universal

The following tags work for all or almost all WeaponTypes.

General

string weaponType  default: "Cannon" 

Spring has 14 WeaponTypes which provide game developers with basic behaviours which they can customise to an extent with the WeaponDef tags. Some tags are specific to certain WeaponTypes and not implemented for others, this two-way table indicates which tags work for which types. The possible values are:

string name  default: "Weapon" 

The descriptive name of the weapon as listed in FPS mode.

bool turret  default: false 

Does the unit aim within an arc (up-to and including full 360° turret traverse) or always aim along the owner's heading?

bool noSelfDamage  default: false 

Can the weapon's explosion damage the unit which fires it? Useful for preventing bombers with high-yield weapons destroying themselves.

bool impactOnly  default: false 

Does the weapon only deal damage through direct hits and not 'splash' damage through areaOfEffect?

bool noExplode  default: false 

Does the weapon explode on impact with a target or continue through? Note that these weapons will do damage every single frame they are inside the collision volume of an object, underground or under water, massively multiplying their damage.

Collision & Avoidance

bool avoidFriendly  default: true 

Should the weapon avoid firing if a friendly unit is in the line of fire?

bool avoidFeature  default: true 

Should the weapon avoid firing if a static map feature is in the line of fire?

bool avoidNeutral  default: false 

Should the weapon avoid firing if a neutral unit is in the line of fire?

bool collideEnemy  default: true 

Does the weapon projectile collide with enemy units or pass through?

bool collideFriendly  default: true 

Does the weapon projectile collide with friendly units or pass through?

bool collideFeature  default: true 

Does the weapon projectile collide with static map features or pass through?

bool collideNeutral  default: true 

Does the weapon projectile collide with neutral units or pass through?

bool collideGround  default: true 

Does the weapon projectile collide with terrain or pass through?

Targeting & Accuracy

bool waterWeapon  default: false 

Determines if the weapon can pass through water and target underwater units.

bool fireSubmersed  default: waterWeapon 

Determines if the weapon can fire whilst underwater.

bool tracks  default: false 

Can the weapon projectile track a moving target? Currently only works with #MissileLauncher, #StarburstLauncher and #TorpedoLauncher.

Impulse & Cratering

Bursts

Paralysing

Dynamic Damage

Sounds

Visuals

string cegTag  default: "" 

The name, without prefixes, of a CEG to be emitted by the projectile each frame.

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 burst and burstRate tags from its reloadTime and uses 5 as its reloadTime instead. This is an OTAism and can be overridden with the manualBombSettings tag. Visually drawn as a billboarded sprite as used by the Cannon, but more commonly used with a 3D model.

float tagToCopyPaste  default: 1.0 

Lorem ipsum dolor sit amet.

AircraftBomb Visuals

float tagToCopyPaste  default: 1.0 

Lorem ipsum dolor sit amet.

BeamLaser

An instant-hit weapon which spawns a beam and does a portion of its total damage each frame. Cannot be script emitted if it has a beamTime longer than one frame. Visually drawn as a Star Trek Phaser-style laser weapon. The largeBeamLaser tag allows changing the visual effect of the laser, such as using a tileable, scrolling texture without changing the behaviour.

float minIntensity  default: 0.0 

The minimum percentage the weapon's damage can fall-off to over its range. Setting to 1.0 will disable fall off entirely. Unrelated to the visual-only intensity tag.

float beamTime  default: 1.0 

How long in seconds to fire the laser before waiting for reloadTime to start. Damage is distributed over the duration of the beamTime, and the weapon will aim to hit the target when the beam is in the middle of its beamTime (i.e. using prediction).

bool beamBurst  default: false 

Makes the laser fire a burst of beams that are all aimed towards the target (instead of aimed with the piece). A BeamLaser can do its full damage with every shot if beamBurst is enabled. Disables beamTime in favour of the burst tags.

BeamLaser Visuals

float tagToCopyPaste  default: 1.0 

Lorem ipsum dolor sit amet.

Cannon

The default WeaponType. Fires a ballistic projectile, for the best result (without under/overshooting) the weaponVelocity should be set so as to give an elevation of 45° when firing at the maximum range. Substituting the angle into the trajectory equation and rearranging, we get:

weaponVelocity = √(range * g)

where g is the map gravity, usually around 120 for most Spring maps (You can use the myGravity tag if you want to be exact). Visually drawn as a billboarded sprite or 3D model.

int highTrajectory  default: 2 

Can this weapon be fired in a high trajectory (>45° angle). Can be 0 - low trajectory only, 1 - high trajectory only or 2 - enables a high/low toggle button on the unit.

Cannon Visuals

float tagToCopyPaste  default: 1.0 

Lorem ipsum dolor sit amet.

DGun

Fires a line-of-sight or ballistic projectile (selected via the gravityAffected tag). Visually represented by a fireball effect that cannot be customised, however it can be replaced by a 3D model. The name and visual effect are OTAisms.

float tagToCopyPaste  default: 1.0 

Lorem ipsum dolor sit amet.

EmgCannon

A line-of-sight weapon. Visually drawn as a billboarded sprite very similar to that of the Cannon, however not as customisable, or a 3D model. The name is another OTAism.

float tagToCopyPaste  default: 1.0 

Lorem ipsum dolor sit amet.

EmgCannon Visuals

float tagToCopyPaste  default: 1.0 

Lorem ipsum dolor sit amet.

Flame

A line-of-sight weapon intended for use as a flamethrower or similar. Visually drawn as a stream of textured particles, the colour of which can be controlled very precisely using the colorMap tag (see CColorMap).

float tagToCopyPaste  default: 1.0 

Lorem ipsum dolor sit amet.

Flame Visuals

float tagToCopyPaste  default: 1.0 

Lorem ipsum dolor sit amet.

LaserCannon

A particularly versatile line-of-sight weapon. Visually drawn like a Star Wars Blaster-style laser weapon, or a 3D model.

float tagToCopyPaste  default: 1.0 

Lorem ipsum dolor sit amet.

LaserCannon Visuals

float tagToCopyPaste  default: 1.0 

Lorem ipsum dolor sit amet.

LightningCannon

An instant-hit weapon similar to the BeamLaser, but which does all its damage at once. Visually drawn like Star Wars 'Force Lightning' or CnC: Red Alert Tesla Coil weapons, the effect is not very customisable.

float tagToCopyPaste  default: 1.0 

Lorem ipsum dolor sit amet.

LightningCannon Visuals

float tagToCopyPaste  default: 1.0 

Lorem ipsum dolor sit amet.

Melee

A weapon that always damages the target, no ifs or buts; unsurprisingly intended for use as a close quarters 'melee' weapon. It does not fire a projectile and does not care about the line of fire.

There are no tags specific to this WeaponType.

MissileLauncher

A versatile weapon which can optionally track targets and accelerate from a low initial velocity. It can also use trajectoryHeight to have the shot arc similar to a ballistic projectile. Visually represented by a 3D model, with an optional smokeTrail.

bool fixedLauncher  default: false 

Makes the projectile spawn with the orientation of the shooting piece instead of their normal orientation. Also works for #StarburstLauncher and #TorpedoLauncher. Weapons may not correctly obey avoidance settings when using this tag.

MissileLauncher Visuals

float tagToCopyPaste  default: 1.0 

Lorem ipsum dolor sit amet.

Rifle

An instant hit weapon which does all its damage at once. Visually represented by a hardcoded tracer, firing and hitting effects. Rarely used.

There are no tags specific to this WeaponType.

Shield

As the name suggests, not a weapon but a defensive shield. Can absorb or reflect (repulsor = true) projectiles. Individual weapons can be set to be intercepted or not by the shield using a bit mask (see Shield_Interception_Tag_Use). Visually represented as a translucent sphere, with control over colour and texture; by default the shield is invisible (visible = false).

bool isShield  default: false 

Is the weapon a shield? Currently required for correct functioning of shields in addition to setting weaponType = "Shield".

See the #shield sub-table section for other tags specific to this type.

StarburstLauncher

Fires a projectile that rises vertically for weaponTimer seconds, then turns towards its target. It can optionally track targets and accelerate from a low initial velocity. This is the only weapon that can be targetable and act as an interceptor. Visually represented by a 3D model, with an optional smokeTrail.

float tagToCopyPaste  default: 1.0 

Lorem ipsum dolor sit amet.

StarburstLauncher Visuals

float tagToCopyPaste  default: 1.0 

Lorem ipsum dolor sit amet.

TorpedoLauncher

Fires a projectile that will behave ballistically out of water and like a missile in water. Usually used with waterWeapon = true so they can fire underwater and target underwater units. An aircraft carrying a TorpedoLauncher is a special case, the weapon turns into an AircraftBomb projectile that will spawn a torpedo projectile on impact with water. Visually represented by a pointed black cuboid, usually the default object is replaced by a 3D model.

bool subMissile  default: false 

Can the torpedo leave the water and target units and positions on land?

NoWeapon

Not actually a WeaponType, but an individual weapon requested by Spring to 'fill in the gaps' if a unit claims to have a weapon which isn't actually defined. There needs to be only one of these weapons and it is set by the name being "NOWEAPON" rather than by the weaponType tag.

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)

'Spring Tutorial Game' WeaponDefs