Quick answer: Blueprint → Class Settings → Implemented Interfaces → Add. Implement the function in the event graph. Without an implementation, calls return the declared default.

Damage system uses a BPI BPI_Damageable. You call TakeDamage on a target. It returns success but health stays full because the actor never implemented the function.

The Symptom

BPI Call Function fires, return values default (0/empty/false), no error.

The Fix

Target Blueprint:
  Class Settings → Implemented Interfaces:
    + BPI_Damageable

Event Graph:
  + Right-click → Add Event → Take Damage  // from BPI
  Implement: subtract Damage from Health, Return Health

Caller-side gate when in doubt:

Branch: Does Implement Interface(Target, BPI_Damageable)
  True  → Take Damage(Target, 10)
  False → Skip

Verifying

Damage call updates health. Implements check returns true. On non-implementer: skip path runs, no silent default.

“Implement the BPI. Or check before calling. Defaults stop hiding bugs.”

Related Issues

For state alias, see state alias. For GAS attribute, see GAS.

Implement BPI. Or guard with check.