Unit

A unit object may be created in script to represent a logical unit of soldiers taking part in the battle. The unit object interface permits querying of the state of the unit - to issue orders to the unit a battle_unitcontroller object must be created to which the unit object may then be associated.

Loaded in Battle loaded in battle
Back to top

Creation

Unit objects are created from the battle_hierarchy. They appear at the bottom of this hierarchy - see the battle_hierarchy page for more information on how unit objects relate to (and are created from) armies and alliances. Alternatively, and preferably, see the section on scriptunits below for a shorthand method of unit object creation.

Back to top

Usage

Once a handle to a sound effect object is obtained, functions may be called on it to query or modify its state in the following form.

Example - Specification:

<object_name>:<function_name>(<args>)

Example - Creation and Usage:

local sfx_01 = battle_sound_effect:new()
sfx_01:load("test_sound_event")        -- calling a function on the object once created
Back to top

Scriptunits and Generated Battles

It is highly recommended for client scripts to work with script_unit objects through the interface provided by the script libraries rather than attempting to manage unit objects individually. By creating a script_unit object, a unit object is automatically created and can be accessed at <script_unit>.unit. See the script_unit documentation for more information.

Alternatively the generated_battle script framework can be used. This automatically creates script_unit objects (with associated unit objects) and negates the need to set up references to anything more granular than an army.

Back to top

Identification

unit:name()

Returns the script name for the unit, if any has been set. A script name for the unit may be set in the battle setup, either in the battle xml or on the appropriate record in the battle_set_piece_armies_units_junctions table if setting up a set-piece/quest battle. It is valid for multiple units in a given army to have the same script name.

Returns:

  1. string script name

unit:unique_ui_id()

Returns the unique ui id for the unit, which should match the name of the corresponding unit card.

Returns:

  1. number ui ud

unit:type()

Returns the unit type of the unit, from the land_units table.

Returns:

  1. string unit type

unit:alliance_index()

Returns the index number of the alliance the unit belongs to, allowing its battle_alliance to be determined or looked up from a battle_alliances object.

Returns:

  1. number alliance index

unit:army_index()

Returns the index number of the army the unit belongs to, allowing its battle_army to be determined or looked up from a battle_armies object (which itself can be determined from the value returned by unit:alliance_index).

Returns:

  1. number army index

unit:unit_class()

Returns the class of the unit, from the land_units table.

Returns:

  1. string unit class

unit:is_cavalry()

Returns whether the unit is cavalry.

Returns:

  1. boolean is cavalry

unit:is_infantry()

Returns whether the unit is infantry.

Returns:

  1. boolean is infantry

unit:is_artillery()

Returns whether the unit is artillery.

Returns:

  1. boolean is artillery

unit:is_limbered_artillery()

Returns whether the unit is artillery in a limbered state (i.e. it can move but not fire).

Returns:

  1. boolean is limbered artillery

unit:is_commanding_unit()

Returns whether this is the commanding unit of the army.

Returns:

  1. boolean is commanding
Back to top

Location and Movement

unit:position()

Returns the centre position of the main squad of the unit.

Returns:

  1. battle_vector position

unit:ordered_position()

Returns the position to which the unit has been ordered to move to. Note that if the unit is attacking, as opposed to moving, then this will return the current position of the unit.

Returns:

  1. battle_vector ordered position

unit:can_reach_position(battle_vector position)

Returns whether the unit can reach the supplied position.

Parameters:

1

battle_vector

position

Returns:

  1. boolean can reach

unit:bearing()

Returns the current orientation of the main squad of the unit in degrees.

Returns:

  1. number orientation

unit:ordered_bearing()

Returns the orientation of the position to which the unit has been ordered in degrees.

Returns:

  1. number orientation

unit:ordered_width()

Returns the width of the position to which the unit has been ordered in metres.

Returns:

  1. number width

unit:position_of_officer()

Returns the position of the commanding officer of the unit.

Returns:

  1. battle_vector officer position

unit:unit_in_range(battle_unit target unit)

Returns whether the supplied unit is in missile range of this unit.

Parameters:

1

battle_unit

target unit

Returns:

  1. boolean is in range

unit:unit_distance(battle_unit target unit)

Returns the shortest distance in metres between this unit and a supplied unit, taking into account their bounding box rather than just working out the centre-to-centre distance.

Parameters:

1

battle_unit

target unit

Returns:

  1. number shortest distance

unit:is_moving()

Returns whether the unit is moving.

Returns:

  1. boolean is moving

unit:is_moving_fast()

Returns whether the unit is moving fast (running/charging).

Returns:

  1. boolean is moving fast

unit:is_idle()

Returns whether the unit is currently idle.

Returns:

  1. boolean is idle

unit:is_leaving_battle()

Returns whether the unit is currently leaving the battlefield.

Returns:

  1. boolean is leaving battle

unit:is_valid_target()

Returns whether this unit is currently a valid target for enemies to attack. A unit might be invalid if they are entering or leaving the battlefield, hidden, or dead.

Returns:

  1. boolean is valid target

unit:is_currently_garrisoned()

Returns whether the unit is currently garrisoned in a building.

Returns:

  1. boolean is garrisoned

unit:is_currently_flying()

Returns whether the unit can fly and is currently flying.

Returns:

  1. boolean is flying

unit:can_fly()

Returns whether the unit can fly.

Returns:

  1. boolean can fly

unit:has_ships()

Returns whether the unit is currently on a ship.

Returns:

  1. boolean is on a ship

unit:is_dismounted_ships()

Returns whether the unit has a ship but is not currently on it.

Returns:

  1. boolean dismounted from ship
Back to top

Visibility

unit:is_hidden()

Returns whether the unit is currently hidden in tall grass/trees. Note that this is a separate test from the unit being obscured from the enemy behind hills or other terrain features.

Returns:

  1. boolean is hidden

unit:is_visible_to_alliance(battle_alliance alliance)

Returns whether the unit is visible to a supplied alliance. This returns the last calculated result of the line-of-sight test that determines whether a unit is obscured from its enemy by terrain features.

Parameters:

1

battle_alliance

alliance

Returns:

  1. boolean is visible to alliance
Back to top

Combat

unit:is_under_missile_attack()

Returns whether the unit is currently taking fire.

Returns:

  1. boolean taking fire

unit:is_in_melee()

Returns whether the unit is currently in melee combat.

Returns:

  1. boolean in melee

unit:number_of_enemies_killed()

Returns the number of enemy combatants this unit has killed in this battle.

Returns:

  1. number number killed
Back to top

Unit Strength

unit:initial_number_of_men()

Returns the number of soldiers the unit started the battle with.

Returns:

  1. number initial unit size

unit:number_of_men_alive()

Returns the number of soldiers currently alive in the unit.

Returns:

  1. number current unit size

unit:unary_of_men_alive()

Returns the number of soldiers currently alive in the unit, expressed as a unary fraction of the the initial size of the unit. A returned value of 0.75 would indicate that 25% of the soldiers in the unit that started the battle have died.

Returns:

  1. number unary proportion

unit:kill_number_of_men(number soldiers to kill, [boolean hide bodies])

Kills a specified number of soldiers in the unit. The optional second argument allows their bodies to be hidden - this is useful if it's desired that the unit 'disappear'.

Parameters:

1

number

soldiers to kill

2

boolean

optional, default value=false

hide bodies

Returns:

  1. nil

unit:unary_hitpoints()

Returns the hitpoint strength of all soldiers in the unit, expressed as a unary fraction of the the initial hitpoint strength of the unit. A returned value of 0.75 would indicate that the unit has lost 25% of the hitpoints it started the battle with.

Returns:

  1. number unary proportion
Back to top

Morale and Fatigue

unit:is_wavering()

Returns whether the morale of the unit is currently wavering.

Returns:

  1. boolean is wavering

unit:is_routing()

Returns whether the unit is currently routing.

Returns:

  1. boolean is routing

unit:is_rampaging()

Returns whether the unit is currently rampaging.

Returns:

  1. boolean is rampaging

unit:is_shattered()

Returns whether the unit is currently shattered (routing without possibility of return).

Returns:

  1. boolean is shattered

unit:is_left_flank_threatened()

Returns whether the left flank of the unit is currently threatened by the enemy.

Returns:

  1. boolean left flank threatened

unit:is_right_flank_threatened()

Returns whether the right flank of the unit is currently threatened by the enemy.

Returns:

  1. boolean left right threatened

unit:is_rear_flank_threatened()

Returns whether the rear of the unit is currently threatened by the enemy.

Returns:

  1. boolean rear threatened

unit:fatigue_state()

Returns the fatigue state of the unit as a string. Possible values are threshold_fresh, threshold_active, threshold_winded, threshold_tired, threshold_very_tired and threshold_exhausted.

Returns:

  1. string fatigue state
Back to top

Ammunition and Range

unit:ammo_left()

Returns the remaining ammunition count of this unit.

Returns:

  1. number current ammunition

unit:starting_ammo()

Returns the amount of ammunition the unit started the battle with.

Returns:

  1. number starting ammunition

unit:set_current_ammo_unary(number unary ammunition level)

Sets the current ammunition level of the unit to the supplied unary value. Setting a value of 0 would mean the unit would have no ammunition, whereas setting a value of 1 would mean the unit would have the amount of ammunition they started the battle with. It is permitted to set a value greater than 1, but the unit will appear to have full ammunition on the UI until its ammunition level drops back below 100%.

Parameters:

1

number

unary ammunition level

Returns:

  1. nil

unit:missile_range()

Returns the missile range of this unit in metres.

Returns:

  1. number missile range
Back to top

Special Abilities

unit:can_perform_special_ability(string special ability key )

Returns whether the unit can perform the specified special ability. Valid special abilities are defined in the special_abilities table.

Parameters:

1

string

special ability key

Returns:

  1. boolean can perform ability

unit:can_use_magic()

Returns whether the unit can use any special abilities that cost magic.

Returns:

  1. boolean can use magic
Back to top

Unit Behaviours

unit:can_use_behaviour(string behaviour)

Returns whether the unit can use a particular behaviour this battle. Valid behaviours are currently as follows: defend, drop_siege_equipment, abandon_artillery_engines, change_formation_spacing, dismantle_artillery_piece, dismount, fire_at_will, skirmish, release_animals, unlimber, board_ship, and formed_attack.

Parameters:

1

string

behaviour

Returns:

  1. boolean behaviour can be used

unit:is_behaviour_active(string behaviour)

Returns whether a particular behaviour is currently active. Valid behaviours are currently as follows: defend, drop_siege_equipment, abandon_artillery_engines, change_formation_spacing, dismantle_artillery_piece, dismount, fire_at_will, skirmish, release_animals, unlimber, board_ship, and formed_attack.

Parameters:

1

string

behaviour

Returns:

  1. boolean behaviour is active
Back to top

Unit Attributes

Unit attributes define certain intrinsic properties of a unit in battle. Attributes are generally assigned to a unit type in the game database, but may be enabled or disabled per-unit in script using the unit:set_stat_attribute function. Valid attribute keys are shown in the following list:        

Attribute KeyDescription
all_ranks_fireAll ranks can fire if using a weapon that only allows one rank.
berserkThis unit will occasionally go berserk.
cant_runThis unit cannot run - generally for limbered artillery.
campaign_stealthThis unit is able to move around the campaign map without being seen.
charge_reflectorCharge reflection vs all.
charge_reflector_vs_largeCharge reflection vs large units only.
causes_fearThis unit frightens all enemy units, reducing their morale when nearby. It is also immune to fear.
causes_terrorThe unit can cause terror, making enemies rout for a short time but without morale penalties. It is also immune to terror and fear.
commander_hunterThis unit is changed in various ways to make them better at killing commanders.
disciplinedThis unit doesn't suffer morale penalty from general's death.
encouragesThis unit provides a morale bonus to nearby allies.
fatigue_resFatigue doesn't have as much of an effect.
fatigue_immuneFatigue doesn't an effect.
fire_while_movingThis infantry unit can fire while moving.
formed_attackThis unit will try to stay in formation when in melee.
guerrilla_deployCan deploy outside deployment zone (vanguard deployment).
hide_forestCan hide in forest.
hide_grassCan hide in grass.
hide_scrub_and_forestCan hide in scrubland.
hide_buildingCan hide in buildings.
ignore_ground_move_modDoesn't get slowed down by terrain.
striderStrider attribute.
immune_to_psychologyThe unit is immune to psychological attacks (fear and terror).
impetuousThis unit is impetuous and can be hard to withdraw from battle.
mighty_knockbackThis unit causes extra damage when they knock back the enemy.
mounted_fireThe unit can fire while on a mount.
mounted_fire_moveThe unit can fire while on a moving mount.
mounted_fire_parthianThe unit can fire while on a moving mount in a Parthian fashion.
rampageThis unit may rampage if put under pressure.
resist_coldThis unit doesn't take extra casualties from cold climates in campaign.
resist_heatThis unit doesn't take extra casualties from hot climates in campaign.
run_amokThis unit may run amok if put under pressure.
scare_horseThis unit scares horses.
scare_immuneThis unit is immune to fear effects.
snipeThe unit remains hidden while firing.
stalkThis unit can remain hidden while moving.
unbreakableThis unit's morale cannot be broken.
undeadThe unit is undead (does not rout, immune to terror, receives crumble damage when morale is low).
unspottableIf this unit is able to hide in its current location, it will not be spotted by enemies until they are very close.
expendableA normal (non-expendable) unit's morale does not suffer from witnessing an expendable unit routing.
constructThe unit is a statue.
wallbreakerThe unit can attack walls physically.
ignore_treesThe unit ignores trees.
moulder_monsterThe unit is a moulder monster that can be targeted by Throt's abilities.
ogre_chargeThe unit has ogre charge.

Not all attributes will be supported by each game.

unit:set_stat_attribute(string attribute key, boolean enable/disable)

Enables or disables a global attribute on the unit. Attribute keys are listed above, in the Unit Attributes section description.

Parameters:

1

string

attribute key

2

boolean

enable/disable

Returns:

  1. nil
Back to top

Sounds

unit:trigger_sound_charge()

Compels the unit to make a charge sound effect.

Returns:

  1. nil

unit:trigger_sound_taunt()

Compels the unit to make a taunt sound effect.

Returns:

  1. nil
Back to top

Miscellaneous

unit:play_anim_for_captain(string animation key, boolean loop animation)

Compels the unit leader to play an animation.

Parameters:

1

string

animation key

2

boolean

loop animation

Returns:

  1. nil

unit:deploy_reinforcement(boolean can deploy)

Prevents or allows the unit to deploy as a reinforcement. If set to false, and the unit has not yet entered the battlefield, then the unit will not be able to deploy until the function is called again with an argument of true.
Calling this command has no effect if the unit is not part of a reinforcement army.

Parameters:

1

boolean

can deploy

Returns:

  1. nil

unit:select_in_ui()

Selects the unit in the user interface.

Returns:

  1. nil

unit:mark_as_ally(boolean mark as ally)

Makes a player unit look like it is allied, rather than part of the controlled army. This is useful for specific scripted situations where it's intended to grant allied units to player control.
Call this function with true as a single argument to mark the controlled unit as an ally, and then again supplying false to mark the unit as part of the player's army again.

Parameters:

1

boolean

mark as ally

Returns:

  1. nil
Last updated 07/02/21 06:39:15