Overview
BSM consists of runtime components (added to GameObjects) and ScriptableObject assets (created in the Project window). This page documents all components and their properties.
Runtime components
Data assets
GC2 integration
Save/load support
StatusEffectManagerComponent
Core component placed on any character/NPC that can receive status effects. Manages the full lifecycle: apply → tick → expire/dispel.
Inspector Properties
| Immunity Profile | Permanent immunity configuration (optional) |
| Max Active Effects | Limit total active effects (0 = unlimited) |
Key API Methods
// Apply an effect
StatusEffectInstance ApplyEffect(StatusEffectDefinition definition)
// Remove effects
bool RemoveEffect(StatusEffectDefinition definition)
void RemoveAllEffects()
int DispelCategory(StatusEffectCategory category)
int DispelByTag(string tag)
int DispelByCleanseType(CleanseType cleanseType, int maxCount = 0)
// Stack management
int AddStacks(StatusEffectDefinition definition, int count)
int RemoveStacks(StatusEffectDefinition definition, int count)
// Queries
bool HasEffect(StatusEffectDefinition definition)
bool IsImmuneToEffect(StatusEffectDefinition definition)
bool IsOnCooldown(StatusEffectDefinition definition)
float GetRemainingDuration(StatusEffectDefinition definition)
float GetRemainingCooldown(StatusEffectDefinition definition)
// Immunity
void AddTemporaryImmunity(StatusEffectDefinition definition, float duration)
void AddTemporaryImmunityByCategory(StatusEffectCategory category, float duration)
void AddTemporaryImmunityByTag(string tag, float duration)
// Cooldown
void ClearCooldown(StatusEffectDefinition definition)
void ClearAllCooldowns()Events
event Action<StatusEffectInstance> OnEffectApplied
event Action<StatusEffectInstance> OnEffectTicked
event Action<StatusEffectInstance> OnEffectExpired
event Action<StatusEffectInstance> OnEffectDispelled
event Action<StatusEffectDefinition> OnEffectBlocked
event Action<StatusEffectInstance, int> OnEffectStacksChangedStatusEffectDefinitionScriptableObject
Defines an effect's properties, behavior, and visuals. Create via:Create → Game Creator → BSM → Effect Definition
Identity
| Display Name | Name shown to players |
| Description | Tooltip description text |
| Category | Parent category (optional) |
| Tags | Tags for filtering (e.g., "fire", "poison") |
| Icon | Sprite for UI display |
Duration & Ticking
| Duration Mode | Timed or Permanent |
| Duration | Seconds (for Timed mode) |
| Has Tick | Enable periodic tick events |
| Tick Interval | Seconds between ticks |
| Tick On Apply | Fire first tick immediately |
| Max Ticks | Limit total ticks (0 = unlimited) |
Stacking
| Stacking Mode | None, Stack, Refresh, RefreshAndStack, Extend |
| Max Stacks | Maximum stack count |
| Scale With Stacks | Multiply effects by stack count |
Cooldown & Cleanse
| Has Cooldown | Prevent rapid re-application |
| Cooldown Duration | Seconds before can reapply |
| Cooldown Starts On Apply | Start cooldown on apply vs on end |
| Cleanse Type | Which dispels can remove this effect |
VFX & Audio
| Apply VFX/Sound | Prefab/clip when applied |
| Remove VFX/Sound | Prefab/clip when removed |
| Tick VFX/Sound | Prefab/clip on each tick |
| VFX Lifetime | Auto-destroy delay (0 = never) |
StatusEffectCategoryScriptableObject
Groups effects and provides shared configuration. Create via:Create → Game Creator → BSM → Category
| Display Name | Category name for UI |
| Category Type | Buff, Debuff, or CrowdControl |
| Color | UI tint color |
| Max Concurrent | Limit active effects (0 = unlimited) |
| Replace Oldest | When at limit, replace oldest? |
ImmunityProfileScriptableObject
Defines permanent immunities for a character. Create via:Create → Game Creator → BSM → Immunity Profile
| Immune Effects | Specific effects this entity is immune to |
| Immune Categories | Entire categories to block |
| Immune Tags | Block effects with these tags |
StatusEffectAuraComponent
Automatically applies effects to entities within a radius. Perfect for healing zones, poison clouds, or buff auras.
| Effect | The effect to apply to targets |
| Radius | Range in world units |
| Target Mode | All, AlliesOnly, EnemiesOnly, SelfOnly |
| Target Layers | Physics layer mask |
| Remove On Exit | Remove effect when leaving aura |
| Update Interval | Scan frequency in seconds |
| Active On Start | Start enabled? |
API
void Activate()
void Deactivate()
void Toggle()
void ForceUpdate()
IReadOnlyCollection<StatusEffectManager> GetAffectedTargets()StatsBridgeOptional Component
Bridges BSM effects to GC2 Stats modifiers. Add alongside StatusEffectManager on entities that use stat-modifying effects.
GC2_STATS in Player Settings.When configured, the StatsBridge automatically applies stat modifiers defined in StatusEffectDefinition when effects activate, and removes them when effects end.
StatusEffectRememberPersistence
Integrates with GC2's Save/Load system to persist active effects across game sessions. Add to any entity that should save its effect state.
Saves: Effect IDs, remaining durations, stack counts, tick progress. On load, effects are restored with their correct remaining time.