Skip to content
Pablo Rodriguez

Ability Costs Cooldowns

Set up automatic regeneration for health, mana, and stamina to create resource management gameplay:

Create timer events for each resource type:

// Resource Regeneration Timers
OnEventBeginPlay() {
// Health regeneration every 5 seconds
Timer_Health_Regen = CreateTimer(5.0, true);
// Mana regeneration every 2.5 seconds
Timer_Mana_Regen = CreateTimer(2.5, true);
// Stamina regeneration every 1 second
Timer_Stamina_Regen = CreateTimer(1.0, true);
}
  • Health_Regeneration: Default 50 points per tick
  • Mana_Regeneration: Default 5 points per tick
  • Stamina_Regeneration: Default 5 points per tick
  • Death State Check: No regeneration while dead

Connect regeneration to existing resource modification systems:

  • Interface Functions: Use Health_Modify, Mana_Modify, Stamina_Modify
  • Math Operation: Set to Add for resource restoration
  • Configurable Values: Adjust regeneration rates for game balance

Create functions to check and consume resources before ability use:

// Health Cost Implementation
F_Health_Cost(Cost) -> Bool {
if (Health_Current > Cost) {
Interface_Health_Modify(Self, Subtract, Cost);
return true; // Sufficient resources
} else {
F_Player_Error('Not enough health');
return false; // Insufficient resources
}
}

Similar implementation for mana and stamina:

  • Resource Check: Greater than or equal to cost amount
  • Resource Consumption: Subtract cost if sufficient
  • Error Feedback: Display error message if insufficient
  • Return Value: Boolean success/failure state

Create user-friendly resource shortage notifications:

  • Simple Design: Single text widget with bright, noticeable color
  • Animation: 1-second display, 1-second fade-out
  • Visibility Control: Hidden by default, shown during errors
  • Positioning: Centered horizontally, positioned above ability bar
// Player Error Communication
Interface_Player_Error(ErrorText) {
TextBlock_Error.SetText(ErrorText);
SetVisibility(NotHitTestable_SelfOnly);
PlayAnimation(Error_Start);
// Auto-hide after animation completes
OnAnimationFinished(Error_Start) {
SetVisibility(Hidden);
}
}
  • Health: “Not enough health”
  • Mana: “Not enough mana”
  • Stamina: “Not enough stamina”

Apply stamina costs to physical abilities:

  • Sprint: 40 stamina cost with validation check
  • Dodge Roll: Stamina cost prevents spam usage
  • Physical Abilities: Melee attacks may or may not require stamina

Apply mana costs to magical abilities:

  • Magic Attacks: All magic abilities require mana
  • Area Effects: Higher mana costs for area damage abilities
  • Projectiles: Magical projectiles consume mana per cast
// Ability Cost Integration Example
OnAbilityActivation() {
if (F_Stamina_Cost(40)) {
// Sufficient stamina - proceed with ability
ExecuteAbility();
}
// If insufficient, F_Stamina_Cost handles error message
}

Create individual cooldown timers for each ability:

  • Timer_Cooldown_Ability_001 through Timer_Cooldown_Ability_006
  • Individual Control: Each ability has separate cooldown duration
  • Flexible Timing: Different abilities can have different cooldown lengths
// Ability Cooldown System
OnAbilityUse(AbilityNumber) {
if (!IsTimerActive(Timer_Cooldown_Ability[AbilityNumber])) {
// Ability not on cooldown
ExecuteAbility();
StartCooldownTimer(AbilityNumber, CooldownDuration);
} else {
// Ability on cooldown
F_Player_Error('Ability on cooldown');
}
}
  • F_Cooldown_Ability_### Functions: Start cooldown timer for specific ability
  • F_Cooldown_Ability_###_End Functions: Reset cooldown when timer completes
  • Configurable Duration: Each ability accepts different cooldown lengths

Implement visual cooldown feedback on ability bar:

Add cooldown display to icon template widget:

  • Cooldown Canvas Panel: Overlay for cooldown display
  • Cooldown Text: Countdown number display
  • Background: Dark overlay during cooldown
  • Visibility: Hidden when not on cooldown
// Ability Bar Cooldown Integration
Interface_Ability_Bar_Cooldown(Index, Duration) {
target_icon = GetIconByIndex(Index);
target_icon.CE_Cooldown(Duration);
}
// Called from player character on ability use
OnAbilityActivation(AbilityIndex) {
Widget_Ability_Bar.Interface_Ability_Bar_Cooldown(AbilityIndex, CooldownDuration);
}

Ensure abilities trigger on proper input events:

  • Started Trigger: Use “Started” pin for immediate response
  • Combat State: Attack abilities (1,2,3,4) trigger combat state
  • Utility Abilities: Sprint and stealth don’t trigger combat

The ability costs and cooldowns system creates resource management gameplay while providing clear feedback about ability availability and usage constraints.