UNPKG

megaten

Version:

An unofficial collection of data from the Shin Megami Tensei and Persona games.

286 lines (285 loc) 9.11 kB
import type { BattleThemes } from './music.js'; import type { AilBoostCriteria, AilDefensiveAilment, AilResistance, Ailment, AilmentName, AilmentRange, AllyRange, AnyAffinity, AnyGame, Arcana, AttackCost, AttackFlag, AttackPower, AutoBuffRange, Barrier, BarrierRange, BoostAffinity, BoostStack, BreakAffinity, Buff, Charge, CritBoostCriteria, CritRange, DamagingAffinity, Debuff, DefensiveAffinity, DemonAffinities, DemonAlignment, DemonOrigin, DemonResistances, DemonSkill, DemonStats, EndureCriteria, EnemyRange, EvasionAffinity, EvasionBoostCriteria, HPMP, If, LightDark, MasterStat, NumberOrPercent, OneOrAllAilments, PersonaGame, PersonaRace, PostBattleStat, RecoveryAmount, RecoveryFlag, RecoveryRange, RegenCriteria, RegenStat, Resistance, SMTCounterAffinity, SMTCounterPower, SMTRace, Series, SetAffinity, SingleOrDoubleBuff, SiphonCriteria, SkillPotential, SkillType, Stage, SupportAutoEffect, SupportFlag, SupportRange, SusceptibilityRange, WallAffinity } from './types.js'; /** Data used for constructing a Demon instance */ export interface DemonData<PersonaBased extends boolean = boolean> { name: string; aliases?: string[]; affinities: DemonAffinities<PersonaBased>; arcana: If<PersonaBased, Arcana, Arcana | null>; race: If<PersonaBased, PersonaRace, SMTRace | null>; level: number; hp: If<PersonaBased, null, number | null>; mp: If<PersonaBased, null, number | null>; stats: DemonStats; learnset: DemonSkill[]; resistances: DemonResistances<PersonaBased>; game: If<PersonaBased, PersonaGame, AnyGame>; alignment: If<PersonaBased, null, DemonAlignment>; lore: If<PersonaBased, string | null, string>; origin: DemonOrigin; } /** Data used for constructing a Persona instance */ export interface PersonaData extends DemonData<true> { race: 'Persona'; user: string; stage: Stage; evoSkillName: string | null; } /** A standard enemy in Shin Megami Tensei V */ export interface SMT5StandardEnemyData { /** The enemy's name */ name: string; /** The enemy's skill potential */ skillPotential: SkillPotential; /** The enemy's race */ race: SMTRace; /** The enemy's level */ level: number; /** The enemy's HP */ hp: number; /** The enemy's stats */ stats: DemonStats; /** The names of the enemy's skills */ skills: string[]; /** The enemy's ailment and affinity resistances */ resistances: DemonResistances<false>; /** The enemy's moral and ethical alignment */ alignment: DemonAlignment; /** The enemy's backstory */ lore: string; /** The names of the item drops rewarded upon defeating the enemy */ itemDrops: string[]; } /** A boss in Shin Megami Tensei V */ export interface SMT5BossData extends SMT5StandardEnemyData { /** The song that plays during the boss battle, or null during non-Nahobino Empyrean forced encounters */ theme: BattleThemes.ShinMegamiTensei5 | null; /** The distinguishing form of the demon for this boss battle, or undefined if the standard form */ variant?: string; } /** Data used for constructing a Skill instance */ export interface SkillData { name: string; aliases?: string[]; affinity: AnyAffinity; type: SkillType; unique?: boolean | null; } export interface AilBoostSkillData extends SkillData { affinity: 'Passive'; type: 'AILBOOST'; ailment: OneOrAllAilments; amount: number; criteria: AilBoostCriteria | null; } export interface AilDefensiveSkillData extends SkillData { affinity: 'Passive'; type: 'AILDEFENSIVE'; ailment: AilDefensiveAilment; resistance: AilResistance; } export interface AilmentSkillData extends SkillData { affinity: 'Ailment'; type: 'AILMENT'; ailments: AilmentName[]; chance: number; cost: number; flags?: Debuff[]; range: AilmentRange; } export interface AttackSkillData extends SkillData { affinity: DamagingAffinity; type: 'ATTACK'; accuracy: number; ailments?: Ailment[]; cost: AttackCost; flags?: AttackFlag[]; max?: number; min?: number; power: AttackPower; range: EnemyRange; series: Series; } export interface AutoBuffSkillData extends SkillData { affinity: 'Passive'; type: 'AUTOBUFF'; buff: Buff; range: AutoBuffRange; } export interface BarrierSkillData extends SkillData { affinity: 'Support'; type: 'BARRIER'; barriers: Barrier[]; cost: number; range: BarrierRange; } export interface BarrierBreakSkillData extends SkillData { affinity: 'Support'; type: 'BARRIERBREAK'; barrier: Barrier; cost: number; } export interface BoostSkillData extends SkillData { affinity: 'Passive'; type: 'BOOST'; amount: number; element: BoostAffinity; stacks: BoostStack; } export interface BreakSkillData extends SkillData { affinity: 'Support'; type: 'BREAK'; cost: number; element: BreakAffinity; } export interface ChargeSkillData extends SkillData { affinity: 'Support'; type: 'CHARGE'; charge: Charge; cost: number; range: AllyRange; } export interface CritSkillData extends SkillData { affinity: 'Support'; type: 'CRIT'; cost: number; range: CritRange; } export interface CritBoostSkillData extends SkillData { affinity: 'Passive'; type: 'CRITBOOST'; amount: number; criteria: CritBoostCriteria | null; } export interface DefensiveSkillData extends SkillData { affinity: 'Passive'; type: 'DEFENSIVE'; element: DefensiveAffinity; newResistance: Resistance; } export interface EndureSkillData extends SkillData { affinity: 'Passive'; type: 'ENDURE'; amount: number; criteria: EndureCriteria | null; } export interface EvasionSkillData extends SkillData { affinity: 'Passive'; type: 'EVASION'; amount: number; criteria: EvasionBoostCriteria | null; element: EvasionAffinity; } export interface InstaKillBoostSkillData extends SkillData { affinity: 'Passive'; type: 'INSTAKILLBOOST'; element: LightDark; } export interface MasterSkillData extends SkillData { affinity: 'Passive'; type: 'MASTER'; amount: number; stat: MasterStat; } export interface MiscSkillData extends SkillData { type: 'MISC'; cost: number | null; description: string; } export interface NaviSkillData extends SkillData { affinity: 'Passive'; type: 'NAVI'; unique: null; description: string; } export interface PersonaCounterSkillData extends SkillData { affinity: 'Passive'; type: 'PERSONACOUNTER'; chance: number; } export interface PostBattleSkillData extends SkillData { affinity: 'Passive'; type: 'POSTBATTLE'; amount: number; inactive: boolean; stat: PostBattleStat; } export interface RecoverySkillData extends SkillData { affinity: 'Recovery'; type: 'RECOVERY'; ailments?: AilmentName[] | 'All'; amount: RecoveryAmount | null; buffs?: SingleOrDoubleBuff[]; cost: number; flags?: RecoveryFlag[]; range: RecoveryRange; } export interface RegenSkillData extends SkillData { affinity: 'Passive'; type: 'REGEN'; amount: NumberOrPercent; criteria: RegenCriteria | null; stat: RegenStat; } export interface SetSkillData extends SkillData { affinity: SetAffinity; amount: NumberOrPercent; type: 'SET'; cost: number | null; } export interface SiphonSkillData extends SkillData { affinity: 'Passive'; type: 'SIPHON'; amount: number; criteria: SiphonCriteria; } export interface SMTCounterSkillData extends SkillData { affinity: 'Passive'; type: 'SMTCOUNTER'; attackDown: boolean; chance: number; element: SMTCounterAffinity; power: SMTCounterPower; shroud?: boolean; } export interface SpringSkillData extends SkillData { affinity: 'Passive'; type: 'SPRING'; amount: NumberOrPercent; stat: HPMP; } export interface SummonSkillData extends SkillData { unique: null; affinity: 'Misc'; type: 'SUMMON'; demon: string | null; } export interface SupportSkillData extends SkillData { affinity: 'Support'; type: 'SUPPORT'; auto: SupportAutoEffect[]; buffs: SingleOrDoubleBuff[]; cost: number; debuffs: Buff[]; flags?: SupportFlag[]; negate: boolean; range: SupportRange; } export interface SusceptibilitySkillData extends SkillData { affinity: 'Almighty'; type: 'SUSCEPTIBILITY'; cost: number; range: SusceptibilityRange; } export interface TauntSkillData extends SkillData { affinity: 'Support'; type: 'TAUNT'; buff: SingleOrDoubleBuff | null; cost: number; } export interface WallSkillData extends SkillData { affinity: 'Support'; type: 'WALL'; cost: number; element: WallAffinity; }