export type Iwt2PlayerClassId = 'healer' | 'paladin' | 'ranger' | 'mage' | 'rogue' | 'warrior' export type Iwt2PlayerClassRole = 'healer' | 'tank' | 'damage' export type Iwt2ClassEquipmentSlot = | 'weapon' | 'offhand' | 'head' | 'chest' | 'hands' | 'legs' export type Iwt2ClassLayerMotion = { offsetXScale?: number offsetYScale?: number rotation?: number } export type Iwt2ClassWeaponLayer = { id: string slot: Iwt2ClassEquipmentSlot url: string drawOrder: 'behindBody' | 'front' heightScale: number offsetXScale: number offsetYScale: number originX?: number originY?: number attackMotion?: Iwt2ClassLayerMotion tierAccentEligible?: boolean } export type Iwt2ClassLayeredArenaSprite = { bodyUrl: string bodyHeightScale?: number weaponLayers: Iwt2ClassWeaponLayer[] } export type Iwt2ClassMetadata = { id: Iwt2PlayerClassId name: string role: Iwt2PlayerClassRole icon: string arenaSpriteUrl: string arenaLayeredSprite?: Iwt2ClassLayeredArenaSprite uiIconUrl: string color: string accentColor: string maxHealth: number moveSpeed: number radius: number attackRange: number attackDamage: number attackCooldown: number castTime: number projectileSpeed: number } export const IWT2_CLASS_METADATA: Record = { healer: { id: 'healer', name: 'Player Healer', role: 'healer', icon: '+', arenaSpriteUrl: '/iwt2/classes/arena/healer-chunky.png', uiIconUrl: '/iwt2/classes/ui/healer-medallion.png', color: '#2fbf71', accentColor: '#b7f7cf', maxHealth: 125, moveSpeed: 210, radius: 15, attackRange: 0, attackDamage: 0, attackCooldown: 1, castTime: 0, projectileSpeed: 0, }, paladin: { id: 'paladin', name: 'Paladin Tank', role: 'tank', icon: '🛡', arenaSpriteUrl: '/iwt2/classes/arena/paladin-chunky.png', uiIconUrl: '/iwt2/classes/ui/paladin-medallion.png', color: '#f2c94c', accentColor: '#fff0a8', maxHealth: 190, moveSpeed: 165, radius: 17, attackRange: 44, attackDamage: 7, attackCooldown: 0.85, castTime: 0, projectileSpeed: 0, }, ranger: { id: 'ranger', name: 'Ranger', role: 'damage', icon: '🏹', arenaSpriteUrl: '/iwt2/classes/arena/ranger-chunky.png', uiIconUrl: '/iwt2/classes/ui/ranger-medallion.png', color: '#4aa3df', accentColor: '#b9e3ff', maxHealth: 115, moveSpeed: 185, radius: 14, attackRange: 245, attackDamage: 8, attackCooldown: 0.31, castTime: 0.16, projectileSpeed: 410, }, mage: { id: 'mage', name: 'Mage', role: 'damage', icon: '⚚', arenaSpriteUrl: '/iwt2/classes/arena/mage-chunky.png', uiIconUrl: '/iwt2/classes/ui/mage-medallion.png', color: '#c56cf0', accentColor: '#efc4ff', maxHealth: 100, moveSpeed: 175, radius: 14, attackRange: 220, attackDamage: 11, attackCooldown: 0.39, castTime: 0.21, projectileSpeed: 330, }, rogue: { id: 'rogue', name: 'Rogue', role: 'damage', icon: '††', arenaSpriteUrl: '/iwt2/classes/arena/rogue-chunky.png', uiIconUrl: '/iwt2/classes/ui/rogue-medallion.png', color: '#55efc4', accentColor: '#c8fff2', maxHealth: 110, moveSpeed: 230, radius: 14, attackRange: 38, attackDamage: 6, attackCooldown: 0.38, castTime: 0, projectileSpeed: 0, }, warrior: { id: 'warrior', name: 'Warrior', role: 'damage', icon: '⚔', arenaSpriteUrl: '/iwt2/classes/arena/warrior-chunky.png', arenaLayeredSprite: { bodyUrl: '/iwt2/classes/arena/layers/warrior-body.png', weaponLayers: [ { id: 'axe', slot: 'weapon', url: '/iwt2/classes/arena/layers/warrior-weapon-axe.png', drawOrder: 'front', heightScale: 1.72, offsetXScale: 0.38, offsetYScale: -0.88, originX: 0.18, originY: 0.5, attackMotion: { offsetXScale: 0.22, offsetYScale: -0.18, rotation: 0.54, }, tierAccentEligible: true, }, ], }, uiIconUrl: '/iwt2/classes/ui/warrior-medallion.png', color: '#ff7675', accentColor: '#ffd0d0', maxHealth: 150, moveSpeed: 180, radius: 16, attackRange: 42, attackDamage: 9, attackCooldown: 0.52, castTime: 0, projectileSpeed: 0, }, } export const IWT2_PARTY_ORDER: Iwt2PlayerClassId[] = ['healer', 'paladin', 'ranger', 'mage', 'rogue', 'warrior']