boltAbilities

Abilities are the standard way to implement player actions with:

  • A consistent button UI that works well on mobile and PC.

  • Cooldowns

  • Optional aiming (tap/drag on mobile, mouse aim on PC)

Abilities are per-player. When a player joins, All Out creates an instance of each ability type and stores it on player.abilities.

Quick start (draw ability buttons)

Draw ability buttons in Player.ao_late_update, inside is_local_or_server():

Player :: class : Player_Base {
    ao_late_update :: method(dt: float) {
        if this->is_local_or_server() {
            draw_ability_button(this, Shoot_Ability, 0);  // big primary button
            draw_ability_button(this, Dodge_Roll, 1);     // small button
        }
    }
}
circle-info

Button indices map to fixed screen positions. Index 0 is the large primary button; indices 1-5 are smaller buttons around it.

Ability API reference

Creating an ability (basic click)

Holding abilities (active while held)

For abilities that are active while held (sprint, shield, beam), use Ability_Utilities.update_holding_ability so it works on both PC and mobile.

Aimed abilities (drag to aim on mobile)

If you want “always aiming” behavior (mouse aim + click to fire on PC, press-drag-release on mobile), use Ability_Utilities.full_update_aimed_ability:

If you want “click to enter aim mode” (PC toggles aim mode; right-click cancels), use Ability_Utilities.full_update_targeted_aimed_ability:

Game-wide ability restrictions (optional)

Implement ao_can_use_ability on your Player class to enforce global rules (dead players can't use abilities, disabled during cutscenes, etc).

Best practices

  • Always draw buttons in ao_late_update and guard with is_local_or_server()

  • Set current_cooldown when you activate (otherwise it can be spammed)

  • Use Ability_Utilities helpers for holding/aiming so mobile + PC behave consistently

  • Put global rules in Player.ao_can_use_ability, not duplicated per ability

Last updated