mh3-data
Version:
Monster Hunter Tri data for monsters, quests, and weapons
119 lines (118 loc) • 5.14 kB
TypeScript
import type { MonsterLevelTypes } from '../model';
import type { MonsterTypes } from '../model/monsters';
import type { GreatSwordTypes, HammerTypes, LanceTypes, LongswordTypes, Sharpness, SwitchAxeTypes, SwordAndShieldTypes, WeaponClass } from '../model/weapons/';
import { ARMOR_SKILL_MULTIPLIERS, CRITICAL_HIT_MULTIPLIERS, DEMONDRUG_MULTIPLIERS, ELEMENT_ATTACK_MULTIPLIERS, FORTIFY_MULTIPLIERS, LOW_HEALTH_SKILL_MULTIPLIERS, MIGHT_MULTIPLIERS } from './util/attack-multipliers';
export interface LongswordSpecialMultiplierArgs {
readonly middleOfBlade: boolean;
readonly fullSpiritGauge: boolean;
readonly spiritGaugeColor: LongswordTypes.SpiritGaugeColors;
}
interface DamageArgs {
readonly weaponClass: WeaponClass;
readonly weaponId: number;
/** Current weapon sharpness */
readonly sharpness: Sharpness;
readonly attackName: string;
/**
* Multipliers specific to the weapon class eg; middle of blade, spirit guage color, etc
*/
readonly weaponMultipliers: Partial<WeaponMultipliers>;
}
export interface GreatSwordDamageArgs extends DamageArgs {
readonly weaponClass: WeaponClass.GREAT_SWORD;
readonly attackName: GreatSwordTypes.GreatSwordAttack;
readonly weaponMultipliers: Pick<WeaponMultipliers, 'middleOfBlade'>;
}
export interface HammerDamageArgs extends DamageArgs {
readonly weaponClass: WeaponClass.HAMMER;
readonly attackName: HammerTypes.HammerAttack;
}
export interface LanceDamageArgs extends DamageArgs {
readonly weaponClass: WeaponClass.LANCE;
readonly attackName: LanceTypes.LanceAttack;
}
export interface LongswordDamageArgs extends DamageArgs {
readonly weaponClass: WeaponClass.LONGSWORD;
readonly attackName: LongswordTypes.LongswordAttack;
readonly weaponMultipliers: Pick<WeaponMultipliers, 'middleOfBlade' | 'longsword'>;
}
export interface SwitchAxeDamageArgs extends DamageArgs {
readonly weaponClass: WeaponClass.SWITCH_AXE;
readonly attackName: SwitchAxeTypes.SwitchAxeAttack;
readonly weaponMultipliers: Pick<WeaponMultipliers, 'switchAxeMode'>;
}
export interface SwordAndShieldDamageArgs extends DamageArgs {
readonly weaponClass: WeaponClass.SWORD_AND_SHIELD;
readonly attackName: SwordAndShieldTypes.SwordAndShieldAttack;
readonly weaponMultipliers: Pick<WeaponMultipliers, 'swordAndShieldMode'>;
}
/**
* Multipliers specific to individual weapon classes, used for
* determining the "special variable" in damage calculation.
*/
export interface WeaponMultipliers {
/** Great Sword, Longsword only */
readonly middleOfBlade: boolean;
/** Sword and Shield only */
readonly swordAndShieldMode: SwordAndShieldTypes.SwordAndShieldAttackMode;
/** Switch Axe only */
readonly switchAxeMode: SwitchAxeTypes.SwitchAxeAttackMode;
readonly longsword: Omit<LongswordSpecialMultiplierArgs, 'middleOfBlade'>;
}
/**
* Weapon-related parameters used in damage calculation
*/
export type WeaponArgs = DamageArgs | GreatSwordDamageArgs | HammerDamageArgs | LanceDamageArgs | LongswordDamageArgs | SwitchAxeDamageArgs | SwordAndShieldDamageArgs;
/**
* Monster-related parameters used in damage calculation
*/
export interface MonsterArgs {
readonly monsterName: MonsterTypes.MonsterName;
/** Contains multipliers for monster health, defense, and stagger limit */
readonly monsterStatMultipliers: MonsterLevelTypes.MonsterStatMultipliers;
/** Must be valid monster state for this monsters */
readonly monsterStateIndex: number;
/** Must be valid index for the provided monsterStateIndex */
readonly hitzoneIndex: number;
}
/**
* Various aspects that can affect damage stats eg; might seed, attack up large,
* felyne heroics, awaken, powercharm, fortify, element attack up
*/
export interface DamageBuffArgs {
/** Multiplied against {@link WeaponTypes.Weapon['attack']} */
rawArgs: Readonly<{
criticalHit: keyof typeof CRITICAL_HIT_MULTIPLIERS;
lowHealthSkill: keyof typeof LOW_HEALTH_SKILL_MULTIPLIERS;
fortify: keyof typeof FORTIFY_MULTIPLIERS;
}>;
/** Multiplied against {@link WeaponTypes.Weapon['secondaryAttack']} */
readonly elementArgs: Readonly<{
awaken: boolean;
elementAttack: keyof typeof ELEMENT_ATTACK_MULTIPLIERS;
}>;
/** Multiplied against {@link WeaponTypes.WeaponDamageProperties['classModifier']} */
readonly weaponClassArgs: Readonly<{
powercharm: boolean;
powertalon: boolean;
demondrug: keyof typeof DEMONDRUG_MULTIPLIERS;
might: keyof typeof MIGHT_MULTIPLIERS;
armor: keyof typeof ARMOR_SKILL_MULTIPLIERS;
}>;
}
/**
* Damage dealt by a weapon
*/
export interface Damage {
/** Decimal is dropped after raw+elemental are totaled */
readonly rawDamage: number;
/** Decimal is dropped after raw+elemental are totaled */
readonly elementalDamage: number;
/**
* This should ALWAYS be the total of raw + elemental.
*/
readonly totalDamage: number;
/** Amount of knockout damage, only present for impact type attacks */
readonly koDamage?: number;
}
export {};