Attack Type
In OpenBOR, each attack is assigned a type. Attack types are then used to handle how the target will react when struck by a given attack. In the simplest example, a standard attack might cause the target to buckle in pain, whereas another would light them on fire, and a third would freeze them in place for a time. More sophisticated attributes allow differing animations when recovering, making a target more (or less) resistant to specific attack types, and so on.
In model text, attack types are identified by a one-indexed integer, and the default type is 1. There are also several predefined attack types identified by name. The engine stores these types using internal enumeration values, but creators should not use those internal numbers as model-text attack type numbers. Attack Types work in conjunction with Damage Control - Attack Types express visible reactions, Damage Control mitigates the numeric results.

Attack Type Relationships
When an attack hits its target, the target will play a corresponding reaction animation depending on several factors. As an example, when a non-knockdown attack type of 2 hits the target, the target will play the PAIN2 animation. If the attack knocks the target down, the target will play its FALL2 animation and then RISE2 to get back up. If the attack KOs the target and death animations are enabled, the target will play DEATH2.
If the target does not have a corresponding reaction animation, OpenBOR defaults to attack type 1 reactions. In the example above, if the target has PAIN2 but does not have FALL2, it will play PAIN2 on a standing hit from attack type 2 but revert to FALL when knocked down.
Note: Creator-facing attack type numbers are one-indexed: type 1 uses PAIN, FALL, RISE, and related base animations; type 2 uses PAIN2, FALL2, RISE2, and so on. 0 is retained as a compatibility alias for type 1 and should not be used in new content.
| Type | Text | Legacy Text | Pain Animation | Fall Animation | Rise Animation | Rise Attack Animation | Constant |
|---|---|---|---|---|---|---|---|
| 1 (default) | attack.damage.type 1 or no type defined. | attack {args}, attack1 {args}, blast {args}, freeze {args}, steal {args} | Pain | Fall | Rise | Riseattack | openborconstant("ATK_NORMAL")
|
| 2 | attack.damage.type 2 | attack2 {args} | pain2 | fall2 | rise2 | riseattack2 | openborconstant("ATK_NORMAL2")
|
| 3+ (3, 4, …) | attack.damage.type 3… | attack3 {args}… | pain3… | fall3… | rise3… | riseattack3… | openborconstant("ATK_NORMAL3")...
|
| Blast (Numeric value assigned internally by engine) | attack.damage.type blast | blast {args}… | Pain | Fall | Rise | Riseattack | openborconstant("ATK_BLAST")
|
| Burn (Numeric value assigned internally by engine) | attack.damage.type burn | burn {args} | bpain | burn | riseb | riseattackb | openborconstant("ATK_BURN")
|
| Shock (Numeric value assigned internally by engine) | attack.damage.type shock | shock {args} | spain | shock | rises | riseattacks | openborconstant("ATK_SHOCK")
|
| Freeze (Numeric value assigned internally by engine) | attack.damage.type freeze | freeze {args} | Pain | Fall | Rise | Riseattack | openborconstant("ATK_FREEZE")
|
| Steal (Numeric value assigned internally by engine) | attack.damage.type steal | steal {args} | Pain | Fall | Rise | Riseattack | openborconstant("ATK_STEAL")
|
Script constants expose the engine’s internal attack type enumeration. Their numeric values therefore do not necessarily match the one-indexed type numbers used in model text. When working in script, use the named ATK_* constants instead of literal numbers.
Defining Attack Types
Named Attack Types
OpenBOR has a small set of predefined attack types identified by name.
Blast
On its own, the blast type has no special effects or reaction animations. The “blasted” effect is provided by setting various other attack properties to produce a knockdown effect that throws the target considerable distance while potentially hitting other opponents along the way. As of OpenBOR version 4183 the command is deprecated. Instead, include the following attributes with any attack type to add a blast effect:
attack.damage.type blast # Optional. The blast type itself does nothing and causes type 1 reactions. Use any type you prefer for the attack. attack.damage.land.mode 1 # Allows the target to hit others during fall. attack.reaction.fall.force 1 # Knockdown. Adjust as needed to overcome target's resistance to knockdown. attack.reaction.fall.velocity.x 5 # Adjust for more or less horizontal distance. attack.reaction.fall.velocity.y 3 # Adjust for more or less vertical lift.
Burn
Burn attacks induce the following reaction animations. They otherwise operate identically to indexed attack types.
- BPAIN – Standing hit.
- BURN – Knockdown hit.
- BDEATH – KO from hit.
- BRISE – Rising from knockdown.
- BRISEATTACK – Attacking from fall position.
Freeze
Freeze is a named attack type whose reaction animations default to the normal PAIN, FALL, RISE, and related animations. Assigning the Freeze type alone does not freeze a target. Use the freeze reaction properties to configure the effect. The legacy freeze command assigns the named type and bundles the necessary freeze properties automatically.
Shock
Shock attacks induce the following reaction animations. They otherwise operate identically to indexed attack types.
- SPAIN – Standing hit.
- SHOCK – Knockdown hit.
- SDEATH – KO from hit.
- SRISE – Rising from knockdown.
- SRISEATTACK – Attacking from fall position.
Steal
Steal is a named attack type whose reaction animations default to the normal PAIN, FALL, RISE, and related animations. Assigning the Steal type alone does not transfer hit points. Enable attack.damage.steal to add inflicted damage to the attacker’s hit-point total. The legacy steal command assigns the named type and enables this behavior automatically.
Special Types
OpenBOR applies special damage types to handle various events, such as time running out or falling into holes. Note that prior to 4.0, these events generally applied damage using Normal 1, or the last attack type available. Unless noted these damage types do not have associated reaction animations, but since the constants are exposed to script you can add custom reactions if desired.
You can also set offense/defense for special types individually (they are not affected by the “ALL” option). Of course you’ll want to be careful – it might seem funny to be immune to pit damage, until you find yourself stuck in the bottom of said pit with no way of getting out! In case it matters, the amount of damage applied is typically = target entity’s maximum hitpoints.
ATK_BOSS_DEATH– Used to KO leftover enemies when boss is defeated.ATK_ITEM– Scripting item logic. Item “attacks” entity that collects it.ATK_LAND– Damage applied when landing from thrown/blasted (damage on landing).ATK_LIFESPAN– Lifespan timer expires.ATK_LOSE– Players (with lose and or fall lose animation) take this damage when level time expires.ATK_PIT– Entity falls into a pit and reaches pit level depth.ATK_SUB_ENTITY_PARENT_KILL– Used to KO a summon when parent is killed (note, killed as in fully removed from play – i.e. after flashing out).ATK_SUB_ENTITY_UNSUMMON– Used to KO a summon on unsummon frame.ATK_TIMEOVER– Applied to players (without lose animation) when level time expires.