export interface DS4ActorDataType { attributes: DS4ActorDataAttributes; traits: DS4ActorDataTraits; combatValues: DS4ActorDataCombatValues; baseInfo: DS4ActorDataBaseInfo; progression: DS4ActorDataProgression; language: DS4ActorDataLanguage; profile: DS4ActorDataProfile; } interface DS4ActorDataAttributes { body: BodyAttribute; mobility: ModifiableData<number>; mind: ModifiableData<number>; } export interface ModifiableData<T> { base: T; mod: T; total?: T; } interface UsableResource<T> { total: T; used: T; } interface ResourceData<T> extends ModifiableData<T> { value: T; max?: T; } // Blueprint in case we need more detailed differentiation type BodyAttribute = ModifiableData<number>; interface DS4ActorDataTraits { strength: ModifiableData<number>; constitution: ModifiableData<number>; agility: ModifiableData<number>; dexterity: ModifiableData<number>; intellect: ModifiableData<number>; aura: ModifiableData<number>; } interface DS4ActorDataCombatValues { hitPoints: ResourceData<number>; defense: ModifiableData<number>; initiative: ModifiableData<number>; movement: ModifiableData<number>; meleeAttack: ModifiableData<number>; rangedAttack: ModifiableData<number>; spellcasting: ModifiableData<number>; targetedSpellcasting: ModifiableData<number>; } interface DS4ActorDataBaseInfo { race: string; class: string; heroClass: string; culture: string; } interface DS4ActorDataProgression { level: number; experiencePoints: number; talentPoints: UsableResource<number>; progressPoints: UsableResource<number>; } interface DS4ActorDataLanguage { languages: string; alphabets: string; } interface DS4ActorDataProfile { gender: string; birthday: string; birthplace: string; age: number; height: number; hairColor: string; weight: number; eyeColor: string; specialCharacteristics: string; }