Armor.tbl

From FreeSpace Wiki
Revision as of 22:15, 29 August 2012 by Nuke (talk | contribs) (clairification of alternate +value: sources)
Jump to: navigation, search
This feature requires FreeSpace Open

Revision information.....

FSO Revision: 8629
Note: Please update the version when the page is updated. If your edit had nothing to do with new code entries then please do not edit the version


The armor.tbl stores data on FS2's as-of-now-simplistic armor system. It lets you define different damage types per armor. The reason for defining different damage types per armor is that armor may be damaged more/less by certain types of weapons. For example, a fire-retardant suit may offer excellent protection against a flamethrower but virtually none against bullets.

It's important to note that the cumbersome +Calculation/+Value system used for defining calculations will, in the future, be deprecated in favor of a more efficient scripting system. However, the current system will be kept for backwards compatibility if any mods or campaigns choose to make use of the table.

Please note that the spelling armour.tbl is currently not supported.


This table is one of the Modular Tables and can be extended with xxx-amr.tbm

List of Tables

#Armor Type

Each armor entry begins with #Armor Type and ends with #End. There may be multiple entries in armor.tbl.


$Name:

Defines the name of the armor type. The same name must be used in the $Armor Type entry in order for that ship to use the armor type. Note that Shields may also have an armor type as designated by $Shield Armor Type

  • Syntax: String


$Damage Type:

Defines the name for the damage type that is used for the armor type/damage type pairs.

  • The same name must be used in the $Damage Type entry (for all weapons that have this damage type) so that the armor can be applied against that particular damage type.
  • Each $Damage Type entry must have at least one +Calculation entry


  • Syntax:String, name of the damage type


+Calculation:

Defines the used calculation type.

  • Calculations per damage types are possible
  • Calculations are performed in the order they are defined in the armor.tbl (and -amr.tbm's)
    • The "current damage value" is the result of the calculation before it
    • The "current damage value" is initially equal to the $Damage value of the weapon that is impacting the armor (provided that the weapon has the same $Damage Type)



FS2 Open, 3.6.16:

Note that this must be followed by a +Stored Value:, a +Constant:, or a +Value: tag. but only one of the three. This will be the value used by the calculation, so only one source is allowed.

+Stored Value:
FS2 Open, 3.6.16:

The calculation shall use the value stored in the specified memory location (which is stored by a previous calculation)


  • Syntax:Unsigned integer
  • Valid Values: 0 through 7
    • Values greater than 7 are possible, but are not guaranteed to work as of (Rev 8629)
+Constant:
FS2 Open, 3.6.16:

The calculation shall use a constant float value, that's internally defined in FSO.

  • Syntax:String
  • Valid Values:
    • base damage
      • The calculation shall use the base damage as defined by $Damage
      • Note: if +Difficulty Scale Type is set to "first", this returns the base damage times the difficulty scale factor
    • current damage
      • The calculation shall use the resulting value of the previous calculation as the input value for this calculation
    • difficulty factor
      • The calculation shall use the difficulty scale factor
    • random
      • The calculation shall use a random number that's anywhere between 0 and 1
    • pi
      • The calculation shall use the constant Pi (3.1415...)
+Value:

Defines the value used for the defined calculation.

  • Syntax: Float


+Shield Piercing Percentage:

FS2 Open, 3.6.12:

If a ship's shield is setup for this particular damage type (by using $Shield Armor Type), this entry defines the percentage of damage (resulting from the earlier calculations) that will be applied directly to the hull. This has the effect of damaging both the shield and hull for a single impact.

  • Syntax: Float
  • Valid values: 0 to 1, where 1 is 100%

+Weapon Piercing Effect Start Limit:

FS2 Open, 3.6.12:

Defines the percentage of hull integrity at which weapon piercing effects are started

  • Syntax: Float, value from 0 to 100


+Weapon Piercing Type:

FS2 Open, 3.6.12:

Defines the piercing type to use

  • Syntax: String
  • Valid Values:
    • none
    • default
    • retail


+Difficulty Scale Type:

FS2 Open, 3.6.16:

Dictates how/when the Difficulty damage multiplier is applied to the end result of all calculations

  • Syntax: String
  • Valid Values:
    • first - Difficulty damage multiplier is applied to the base damage before calculations
    • last - Difficulty damage multiplier is applied to the result of the calculations
    • manual - Difficulty damage multiplier is ignored, and is assumed to be handled elsewhere (such as in a LUA script or a sexp)

$Flags:

FS2 Open, 3.6.12:

Defines the flags affecting this armor type

  • Syntax: ( String )
  • Valid flags:
    • ignore subsystem armor
      • If set, FSO will use the hull's armor type against all damage to the subsystem, regardless of any armor type that the subsystem may have


#End

Each #Armor Type section must end with #End, no exceptions.




List of Calculations

The following is a list of valid strings to be used with +Calculation.

  • additive
    • Adds +Value to the the current damage value
  • multiplicative
    • Multiplies the the current damage value by +Value
  • exponential
    • Raises the current damage value to the power of +Value
  • exponential base
    • Raises +Value to the power of the current damage value
  • cutoff
    • If the current damage value is less than +Value, then the resulting damage value is 0.
  • reverse cutoff
    • If the current damage value is greater than +Value, then the resulting damage value is 0.
  • instant cutoff
    • If the current damage value is less than the specified amount, then the resulting damage value is set to 0 and the engine ignores all following calculations
  • instant reverse cutoff
    • If the current damage value is greater than the specified amount, then the resulting damage value is set to 0 and the engine ignores all following calculations.
FS2 Open, 3.6.16:
  • cap
    • If the current damage value is greater than +Value, then the resulting damage value is +Value.
  • instant cap
    • If the current damage value is greater than the specified amount, then the resulting damage value is set to +Value and the engine ignores all following calculations.
  • set
    • Sets the damage value to +Value.
  • store
    • Stores the current damage value to a memory location specified by +Value (which is casted as an unsigned integer)
    • Stored damage values may be used only in the calculations they are assigned, and are discarded after the calculations are finished
  • load
    • Loads the current damage value from a memory location specified by +Value (which is casted as an unsigned integer)
    • Stored damage values may be used only in the calculations they are assigned, and are discarded after the calculations are finished
  • random
    • Randomizes the damage value to anything between the current damage value and the base damage value as defined by $Damage

Example

armor.tbl

#Armor Type
$Name: Reflective
;;This armor is made up of some kind of reflective material,
;;that deflects 1/4 of the energy from laser weapons back into space.
;;However, it is somewhat more fragile than typical hull materials,
;;and takes 1/3 more damage from weapons that use physical projectiles.

$Damage Type: Laser
   +Calculation: Multiplicative
   +Value: 0.75

$Damage Type: Kinetic
   +Calculation: Multiplicative
   +Value: 1.33
#End


As you can see above, "Reflective" armor is dealt only 75% of the damage from laser weapons, but 133% of the damage from kinetic weapons. However, in order to activate the armor system, you must assign the armor type to the ships you want it to apply to, and damage types to the weapons you wish to use.

The Thoth fighter seems like a good choice for this armor. Its speed and maneuverability give it the ability to evade missiles, and many direct-fire weapons are energy based. So, to give it this armor, you would add "$Armor Type:" to ships.tbl, under the "Thoth" entry:

ships.tbl

$Hitpoints:             200
$Armor Type:            Reflective
$Flags:                 ( "player_ship" "fighter" "in tech database")


At this point, the Thoth will be equipped with Reflective armor. However, it will have no effect unlesss it is hit by a weapon with a "$Damage Type" that is defined in armor.tbl, under the "Reflective" armor entry. Otherwise, Freespace 2 would have no idea how to take into account the defined damage types.

So, in the interests of time, here's how you would assign the "Laser" damage type to the Subach HL-7, and the "Kinetic" damage type to the Rockeye.

Under the Subach entry, you would add "$Damage Type" like so:

weapons.tbl

$Damage:          15
$Damage Type:           Laser
$Armor Factor:          0.9


Under the Rockeye entry, you would add "$Damage Type" like this:

weapons.tbl

$Damage:          45
$Damage Type:           Kinetic
$Armor Factor:          0.1


Now, if you were to start FreeSpace 2 with these modifications, you would find that the Thoth would take 3/4 as much damage from the Subach HL-7, 1/3 more damage from the Rockeye, but normal damage from everything else. All other ships, not being equipped with any kind of armor, would also be dealt normal damage from all weapons, including the Rockeye and the Subach.