Skip to content

Interfaces and types

All the public types exported by catalyst-engine. They are grouped by domain.

Stats

ModifierType

typescript
enum ModifierType {
  FLAT = 'FLAT',       // adds an absolute value
  PERCENT = 'PERCENT', // adds a percentage (additive across modifiers)
}

IStatModifier

typescript
interface IStatModifier {
  id: string;     // identifier of the modifier
  source: string; // source, used for bulk removal
  type: ModifierType;
  value: number;
}

IStat

typescript
interface IStat {
  id: string;
  name: string;
  baseValue: number;
  modifiers: ReadonlyArray<IStatModifier>;
  readonly value: number; // computed with lazy evaluation
}

Experience

CurveType

typescript
type CurveType = 'LINEAR' | 'EXPONENTIAL' | 'CUSTOM_TABLE';

IExperienceConfig

typescript
interface IExperienceConfig {
  type: CurveType;
  baseXP: number;
  multiplier: number;
  customTable?: number[]; // used only with CUSTOM_TABLE
}

ILevelUpResult

typescript
interface ILevelUpResult {
  levelsGained: number;
  currentLevel: number;
  excessXP: number;                    // XP remaining after the level ups
  statsUpgraded: Record<string, number>;
}

Skills

ISkillNode

typescript
interface ISkillNode {
  id: string;
  name: string;
  description: string;
  maxLevel: number;
  currentLevel: number;
  requiredPlayerLevel: number;
  prerequisiteSkillIds: string[];
  pointCostPerLevel: number;
  passiveModifiers?: IStatModifier[];
  type: 'PASSIVE' | 'ACTIVE';
}

ISkillUnlockResult

typescript
interface ISkillUnlockResult {
  success: boolean;
  reason?: 'LOW_LEVEL' | 'MISSING_PREREQUISITES' | 'NO_POINTS' | 'MAX_LEVEL' | 'NOT_FOUND';
}

Events

EngineEvents

typescript
type EngineEvents = {
  STAT_CHANGED: { statId: string; newValue: number; baseValue: number };
  LEVEL_UP:     { currentLevel: number; levelsGained: number; excessXP: number };
  XP_GAINED:    { currentXP: number; nextRequiredXP: number; percentage: number };
};

EventCallback

typescript
type EventCallback<T> = (data: T) => void;

Persistence

IEngineSaveState

typescript
interface IEngineSaveState {
  version: string;
  timestamp: number;
  experience: {
    currentLevel: number;
    currentXP: number;
  };
  stats: {
    baseValues: Record<string, number>;
  };
  skills: {
    unspentPoints: number;
    unlockedSkills: Record<string, number>;
  };
}

Released under the MIT License.