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){ifthis->is_local_or_server(){draw_ability_button(this,Shoot_Ability,0);// big primary buttondraw_ability_button(this,Dodge_Roll,1);// small button}}}
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