Skip to main content
The Character interface is the central data model in Kaizen, representing the player’s current state, stats, progression, and prestige data.

Interface definition

export interface Character {
  id: string;
  name: string;
  level: number;

  baseStrength: number;
  baseIntelligence: number;
  baseEndurance: number;

  strengthModifier: number;
  intelligenceModifier: number;
  enduranceModifier: number;

  prestigeLevel: number;
  prestigeMultipliers: {
    strength: number;
    intelligence: number;
    endurance: number;
  };
  prestigeCores: number;

  gold: number;

  currentStage: number;
  currentWave: number;

  createdAt: Date;
  lastActiveAt: Date;
}

Properties

Identity

id
string
required
Unique identifier for the character
name
string
required
Display name of the character (defaults to “Hero”)
level
number
required
Current character level

Base stats

baseStrength
number
required
Base strength stat value, affects physical damage output
baseIntelligence
number
required
Base intelligence stat value, affects magical damage output
baseEndurance
number
required
Base endurance stat value, affects health and survivability

Stat modifiers

strengthModifier
number
required
Multiplier applied to base strength from upgrades and effects
intelligenceModifier
number
required
Multiplier applied to base intelligence from upgrades and effects
enduranceModifier
number
required
Multiplier applied to base endurance from upgrades and effects

Prestige system

prestigeLevel
number
required
Number of times the character has prestiged (reset with bonuses)
prestigeMultipliers
object
required
Permanent multipliers earned through prestige that affect each stat
prestigeCores
number
required
Premium currency earned through prestiging, used for prestige upgrades

Economy

gold
number
required
Current gold amount, earned through combat and spent on gold upgrades

Campaign progress

currentStage
number
required
Current stage number in the campaign (advances every 10 waves)
currentWave
number
required
Current wave number within the stage (1-10)

Timestamps

createdAt
Date
required
Timestamp when the character was created
lastActiveAt
Date
required
Timestamp of the character’s last activity

Usage example

Creating a default character

const defaultCharacter: Character = {
  id: '1',
  name: 'Hero',
  level: 1,
  baseStrength: 1,
  baseIntelligence: 1,
  baseEndurance: 1,
  strengthModifier: 1,
  intelligenceModifier: 1,
  enduranceModifier: 1,
  prestigeLevel: 1,
  prestigeMultipliers: {
    strength: 1,
    intelligence: 1,
    endurance: 1,
  },
  prestigeCores: 0,
  gold: 0,
  currentStage: 1,
  currentWave: 1,
  createdAt: new Date(),
  lastActiveAt: new Date(),
};

Modifying character stats

// Increase gold
character.update((char) => ({
  ...char,
  gold: char.gold + 100
}));

// Advance to next wave
character.update((char) => ({
  ...char,
  currentWave: char.currentWave < 10 ? char.currentWave + 1 : 1,
  currentStage: char.currentWave === 10 ? char.currentStage + 1 : char.currentStage
}));

Prestige reset

// Reset character while preserving prestige progress
const resetCharacter = (currentChar: Character): Character => ({
  id: '1',
  name: 'Hero',
  level: 1,
  baseStrength: 1,
  baseIntelligence: 1,
  baseEndurance: 1,
  strengthModifier: 1,
  intelligenceModifier: 1,
  enduranceModifier: 1,
  prestigeLevel: currentChar.prestigeLevel,        // Preserved
  prestigeMultipliers: currentChar.prestigeMultipliers, // Preserved
  prestigeCores: currentChar.prestigeCores,        // Preserved
  gold: currentChar.gold,                          // Preserved
  currentStage: 1,
  currentWave: 1,
  createdAt: new Date(),
  lastActiveAt: new Date(),
});
When resetting a character through prestige, the following fields are preserved:
  • prestigeLevel
  • prestigeMultipliers
  • prestigeCores
  • gold
All other stats are reset to their default values.
The character state is persisted to the database through the CharacterService.updateDatabase() method, which selectively saves only the fields that need server-side persistence.

Build docs developers (and LLMs) love