Android build v1.1.15
This commit is contained in:
@@ -0,0 +1,6 @@
|
||||
import type { Iwt2BalanceOverrides } from './bosses'
|
||||
|
||||
// Generated by local admin panel. Commit this file with intended IWT2 balance changes.
|
||||
export const IWT2_BALANCE_OVERRIDES: Iwt2BalanceOverrides = {
|
||||
bosses: {},
|
||||
}
|
||||
@@ -0,0 +1,134 @@
|
||||
import { IWT2_BALANCE_OVERRIDES } from './balanceOverrides'
|
||||
|
||||
export type Iwt2BossId = 'bulldrome' | 'yian-kut-ku'
|
||||
|
||||
export type Iwt2BalanceOverrides = {
|
||||
bosses?: Partial<Record<Iwt2BossId, Partial<Pick<Iwt2BossMetadata, 'maxHealth' | 'birdHealth'>>>>
|
||||
}
|
||||
|
||||
export type Iwt2BossMetadata = {
|
||||
id: Iwt2BossId
|
||||
name: string
|
||||
icon: string
|
||||
color: string
|
||||
accentColor: string
|
||||
maxHealth: number
|
||||
radius: number
|
||||
moveSpeed: number
|
||||
meleeRange: number
|
||||
meleeDamage: number
|
||||
meleeCooldown: number
|
||||
chargeCooldown: number
|
||||
chargeWindup: number
|
||||
chargeSpeed: number
|
||||
chargeDamage: number
|
||||
chargeStunSeconds: number
|
||||
chargeLength: number
|
||||
chargeOvershoot: number
|
||||
chargeWidth: number
|
||||
slamWindup: number
|
||||
slamRadius: number
|
||||
slamDamage: number
|
||||
slamStunSeconds: number
|
||||
fireballCooldown?: number
|
||||
fireballWindup?: number
|
||||
fireballSpeed?: number
|
||||
fireballDamage?: number
|
||||
fireballRadius?: number
|
||||
firePuddleRadius?: number
|
||||
firePuddleDamage?: number
|
||||
firePuddleSeconds?: number
|
||||
birdWaveThresholds?: number[]
|
||||
birdFlightCooldown?: number
|
||||
birdFlightWindup?: number
|
||||
birdFlightSpeed?: number
|
||||
birdHealth?: number
|
||||
birdRadius?: number
|
||||
birdContactDamage?: number
|
||||
birdStunSeconds?: number
|
||||
}
|
||||
|
||||
const DEFAULT_BULLDROME_BOSS_METADATA: Iwt2BossMetadata = {
|
||||
id: 'bulldrome',
|
||||
name: 'Bulldrome',
|
||||
icon: 'B',
|
||||
color: '#8f5a3c',
|
||||
accentColor: '#e6b17f',
|
||||
maxHealth: 950,
|
||||
radius: 31,
|
||||
moveSpeed: 128,
|
||||
meleeRange: 58,
|
||||
meleeDamage: 9,
|
||||
meleeCooldown: 1.05,
|
||||
chargeCooldown: 4.75,
|
||||
chargeWindup: 0.55,
|
||||
chargeSpeed: 510,
|
||||
chargeDamage: 32,
|
||||
chargeStunSeconds: 0.75,
|
||||
chargeLength: 560,
|
||||
chargeOvershoot: 120,
|
||||
chargeWidth: 62,
|
||||
slamWindup: 0.45,
|
||||
slamRadius: 104,
|
||||
slamDamage: 24,
|
||||
slamStunSeconds: 0.75,
|
||||
}
|
||||
|
||||
const DEFAULT_YIAN_KUT_KU_BOSS_METADATA: Iwt2BossMetadata = {
|
||||
id: 'yian-kut-ku',
|
||||
name: 'Yian Kut Ku',
|
||||
icon: 'Y',
|
||||
color: '#d66a35',
|
||||
accentColor: '#ffd166',
|
||||
maxHealth: 400,
|
||||
radius: 29,
|
||||
moveSpeed: 118,
|
||||
meleeRange: 56,
|
||||
meleeDamage: 8,
|
||||
meleeCooldown: 1,
|
||||
chargeCooldown: 0,
|
||||
chargeWindup: 0,
|
||||
chargeSpeed: 0,
|
||||
chargeDamage: 0,
|
||||
chargeStunSeconds: 0,
|
||||
chargeLength: 0,
|
||||
chargeOvershoot: 0,
|
||||
chargeWidth: 0,
|
||||
slamWindup: 0,
|
||||
slamRadius: 0,
|
||||
slamDamage: 0,
|
||||
slamStunSeconds: 0,
|
||||
fireballCooldown: 3.6,
|
||||
fireballWindup: 0.55,
|
||||
fireballSpeed: 285,
|
||||
fireballDamage: 12,
|
||||
fireballRadius: 9,
|
||||
firePuddleRadius: 42,
|
||||
firePuddleDamage: 7,
|
||||
firePuddleSeconds: 8,
|
||||
birdWaveThresholds: [0.9, 0.4],
|
||||
birdFlightCooldown: 10,
|
||||
birdFlightWindup: 0.85,
|
||||
birdFlightSpeed: 360,
|
||||
birdHealth: 58,
|
||||
birdRadius: 16,
|
||||
birdContactDamage: 10,
|
||||
birdStunSeconds: 0.75,
|
||||
}
|
||||
|
||||
function applyBossOverrides(metadata: Iwt2BossMetadata): Iwt2BossMetadata {
|
||||
const override = IWT2_BALANCE_OVERRIDES.bosses?.[metadata.id]
|
||||
if (!override) return metadata
|
||||
return {
|
||||
...metadata,
|
||||
...override,
|
||||
}
|
||||
}
|
||||
|
||||
export const BULLDROME_BOSS_METADATA: Iwt2BossMetadata = applyBossOverrides(DEFAULT_BULLDROME_BOSS_METADATA)
|
||||
export const YIAN_KUT_KU_BOSS_METADATA: Iwt2BossMetadata = applyBossOverrides(DEFAULT_YIAN_KUT_KU_BOSS_METADATA)
|
||||
|
||||
export const IWT2_BOSS_METADATA: Record<Iwt2BossId, Iwt2BossMetadata> = {
|
||||
bulldrome: BULLDROME_BOSS_METADATA,
|
||||
'yian-kut-ku': YIAN_KUT_KU_BOSS_METADATA,
|
||||
}
|
||||
@@ -0,0 +1,121 @@
|
||||
export type Iwt2PlayerClassId = 'healer' | 'paladin' | 'ranger' | 'mage' | 'rogue' | 'warrior'
|
||||
|
||||
export type Iwt2PlayerClassRole = 'healer' | 'tank' | 'damage'
|
||||
|
||||
export type Iwt2ClassMetadata = {
|
||||
id: Iwt2PlayerClassId
|
||||
name: string
|
||||
role: Iwt2PlayerClassRole
|
||||
icon: 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<Iwt2PlayerClassId, Iwt2ClassMetadata> = {
|
||||
healer: {
|
||||
id: 'healer',
|
||||
name: 'Player Healer',
|
||||
role: 'healer',
|
||||
icon: '+',
|
||||
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: '🛡',
|
||||
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: '🏹',
|
||||
color: '#4aa3df',
|
||||
accentColor: '#b9e3ff',
|
||||
maxHealth: 115,
|
||||
moveSpeed: 185,
|
||||
radius: 14,
|
||||
attackRange: 245,
|
||||
attackDamage: 8,
|
||||
attackCooldown: 0.62,
|
||||
castTime: 0.32,
|
||||
projectileSpeed: 410,
|
||||
},
|
||||
mage: {
|
||||
id: 'mage',
|
||||
name: 'Mage',
|
||||
role: 'damage',
|
||||
icon: '⚚',
|
||||
color: '#c56cf0',
|
||||
accentColor: '#efc4ff',
|
||||
maxHealth: 100,
|
||||
moveSpeed: 175,
|
||||
radius: 14,
|
||||
attackRange: 220,
|
||||
attackDamage: 11,
|
||||
attackCooldown: 0.78,
|
||||
castTime: 0.42,
|
||||
projectileSpeed: 330,
|
||||
},
|
||||
rogue: {
|
||||
id: 'rogue',
|
||||
name: 'Rogue',
|
||||
role: 'damage',
|
||||
icon: '††',
|
||||
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: '⚔',
|
||||
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']
|
||||
@@ -0,0 +1,19 @@
|
||||
import type { InputAction } from '../../../input'
|
||||
|
||||
export const IWT2_ABILITY_ACTIONS: InputAction[] = [
|
||||
'ability1',
|
||||
'ability2',
|
||||
'ability3',
|
||||
'ability4',
|
||||
'ability5',
|
||||
'ability6',
|
||||
]
|
||||
|
||||
export const IWT2_TARGET_ACTIONS: InputAction[] = [
|
||||
'targetParty1',
|
||||
'targetParty2',
|
||||
'targetParty3',
|
||||
'targetParty4',
|
||||
'targetParty5',
|
||||
'targetParty6',
|
||||
]
|
||||
@@ -0,0 +1,125 @@
|
||||
import type { Spell } from '../../../game'
|
||||
import type { Ability } from '../../../profile'
|
||||
import { toCombatSpell } from '../../../combat/rules'
|
||||
|
||||
export type Iwt2AbilityTarget = 'party-member' | 'self' | 'ground'
|
||||
|
||||
export type Iwt2HealerAbility = {
|
||||
id: string
|
||||
healerId: string
|
||||
slot: number
|
||||
name: string
|
||||
icon: string
|
||||
kind: Spell['kind']
|
||||
power: number
|
||||
effectType?: string
|
||||
manaCost: number
|
||||
cooldownSeconds: number
|
||||
target: Iwt2AbilityTarget
|
||||
}
|
||||
|
||||
const IWT1_DAWNWEAVER_ABILITIES: Ability[] = [
|
||||
{
|
||||
id: 1,
|
||||
classId: 1,
|
||||
slug: 'mend',
|
||||
name: 'Mend',
|
||||
spellType: 'direct_heal',
|
||||
cost: 5,
|
||||
cooldown: 0.5,
|
||||
power: 30,
|
||||
unlockLevel: 1,
|
||||
glyph: '+',
|
||||
description: 'A fast, efficient single-target heal.',
|
||||
},
|
||||
{
|
||||
id: 2,
|
||||
classId: 1,
|
||||
slug: 'renew',
|
||||
name: 'Renew',
|
||||
spellType: 'heal_over_time',
|
||||
cost: 7,
|
||||
cooldown: 0.5,
|
||||
power: 12,
|
||||
unlockLevel: 1,
|
||||
glyph: '~',
|
||||
description: 'Heals now and continues healing over time.',
|
||||
},
|
||||
{
|
||||
id: 3,
|
||||
classId: 1,
|
||||
slug: 'radiance',
|
||||
name: 'Radiance',
|
||||
spellType: 'party_heal',
|
||||
cost: 12,
|
||||
cooldown: 8,
|
||||
power: 18,
|
||||
unlockLevel: 1,
|
||||
glyph: '*',
|
||||
description: 'Restores health to up to 4 injured party members.',
|
||||
},
|
||||
{
|
||||
id: 4,
|
||||
classId: 1,
|
||||
slug: 'sun-ward',
|
||||
name: 'Sun Ward',
|
||||
spellType: 'absorb',
|
||||
cost: 8,
|
||||
cooldown: 7,
|
||||
power: 36,
|
||||
unlockLevel: 1,
|
||||
glyph: 'O',
|
||||
description: 'Places a damage-absorbing shield on your target.',
|
||||
},
|
||||
{
|
||||
id: 5,
|
||||
classId: 1,
|
||||
slug: 'purify',
|
||||
name: 'Purify',
|
||||
spellType: 'cleanse',
|
||||
cost: 5,
|
||||
cooldown: 5,
|
||||
power: 10,
|
||||
unlockLevel: 1,
|
||||
glyph: 'x',
|
||||
description: 'Removes a harmful effect and restores health.',
|
||||
},
|
||||
{
|
||||
id: 6,
|
||||
classId: 1,
|
||||
slug: 'dawn-burst',
|
||||
name: 'Dawn Burst',
|
||||
spellType: 'party_heal',
|
||||
cost: 16,
|
||||
cooldown: 12,
|
||||
power: 28,
|
||||
unlockLevel: 5,
|
||||
glyph: 'D',
|
||||
description: 'A brilliant wave of healing for up to 4 injured allies.',
|
||||
},
|
||||
]
|
||||
|
||||
function toIwt2Ability(ability: Ability, index: number): Iwt2HealerAbility {
|
||||
const spell = toCombatSpell(ability, String(index + 1))
|
||||
return {
|
||||
id: spell.id,
|
||||
healerId: 'field_medic',
|
||||
slot: index + 1,
|
||||
name: spell.name,
|
||||
icon: spell.glyph,
|
||||
kind: spell.kind,
|
||||
power: spell.power,
|
||||
effectType: spell.effectType,
|
||||
manaCost: spell.cost,
|
||||
cooldownSeconds: spell.cooldown,
|
||||
target: 'party-member',
|
||||
}
|
||||
}
|
||||
|
||||
export const IWT2_HEALER_ABILITIES: Record<string, Iwt2HealerAbility[]> = {
|
||||
field_medic: IWT1_DAWNWEAVER_ABILITIES.map(toIwt2Ability),
|
||||
}
|
||||
|
||||
export function abilitiesForHealer(healerId: string) {
|
||||
return IWT2_HEALER_ABILITIES[healerId] ?? IWT2_HEALER_ABILITIES.field_medic
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
export {
|
||||
IWT2_CLASS_METADATA,
|
||||
IWT2_PARTY_ORDER,
|
||||
} from './classes'
|
||||
export type {
|
||||
Iwt2ClassMetadata,
|
||||
Iwt2PlayerClassId,
|
||||
Iwt2PlayerClassRole,
|
||||
} from './classes'
|
||||
|
||||
export {
|
||||
BULLDROME_BOSS_METADATA,
|
||||
IWT2_BOSS_METADATA,
|
||||
} from './bosses'
|
||||
export type {
|
||||
Iwt2BossId,
|
||||
Iwt2BossMetadata,
|
||||
} from './bosses'
|
||||
Reference in New Issue
Block a user