You've already forked obsidian-visualiser
Character creation implementation. People and training ready, still need to work on abilities and spells
This commit is contained in:
145
types/character.d.ts
vendored
Normal file
145
types/character.d.ts
vendored
Normal file
@@ -0,0 +1,145 @@
|
||||
export type MainStat = "strength" | "dexterity" | "constitution" | "intelligence" | "curiosity" | "charisma" | "psyche";
|
||||
export type Ability = "athletics" | "acrobatics" | "intimidation" | "sleightofhand" | "stealth" | "survival" | "investigation" | "history" | "religion" | "arcana" | "understanding" | "perception" | "performance" | "medecine" | "persuasion" | "animalhandling" | "deception";
|
||||
export type Level = | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20;
|
||||
export type TrainingLevel = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15;
|
||||
export type SpellType = "precision" | "knowledge" | "instinct";
|
||||
export type Category = "action" | "reaction" | "freeaction" | "misc";
|
||||
export type Resistance = keyof CompiledCharacter["resistance"];
|
||||
|
||||
export type DoubleIndex<T extends number | string> = [T, number];
|
||||
|
||||
export type Progression = {
|
||||
training: Record<MainStat, DoubleIndex<TrainingLevel>[]>;
|
||||
race: {
|
||||
index?: number;
|
||||
progress?: DoubleIndex<Level>[];
|
||||
};
|
||||
level: number;
|
||||
abilities?: Partial<Record<Ability, number>>;
|
||||
spells?: string[]; //Spell ID
|
||||
modifiers?: Partial<Record<MainStat, number>>;
|
||||
aspect?: string;
|
||||
};
|
||||
export type Character = {
|
||||
id: number;
|
||||
name: string;
|
||||
progress: Progression;
|
||||
owner?: number;
|
||||
};
|
||||
export type CharacterConfig = {
|
||||
peoples: Race[],
|
||||
training: Record<MainStat, Record<TrainingLevel, TrainingOption[]>>;
|
||||
};
|
||||
export type Race = {
|
||||
name: string;
|
||||
description: string;
|
||||
utils: {
|
||||
maxOption: number;
|
||||
};
|
||||
options: Record<Level, RaceOption[]>;
|
||||
};
|
||||
export type RaceOption = {
|
||||
training?: number;
|
||||
health?: number;
|
||||
mana?: number;
|
||||
spec?: number;
|
||||
shaping?: number;
|
||||
modifier?: number;
|
||||
};
|
||||
export type Feature = {
|
||||
text?: string;
|
||||
} & (ActionFeature | ReactionFeature | FreeActionFeature | BonusFeature | MiscFeature);
|
||||
type ActionFeature = {
|
||||
type: "action";
|
||||
cost: 1 | 2 | 3;
|
||||
text: string;
|
||||
};
|
||||
type ReactionFeature = {
|
||||
type: "reaction";
|
||||
text: string;
|
||||
};
|
||||
type FreeActionFeature = {
|
||||
type: "freeaction";
|
||||
text: string;
|
||||
};
|
||||
type BonusFeature = {
|
||||
type: "bonus";
|
||||
action: "add" | "remove" | "set" | "cap";
|
||||
value: number;
|
||||
property: string;
|
||||
};
|
||||
type MiscFeature = {
|
||||
type: "misc";
|
||||
text: string;
|
||||
};
|
||||
export type TrainingOption = {
|
||||
description: Array<{
|
||||
text: string;
|
||||
disposable?: boolean;
|
||||
replaced?: boolean;
|
||||
category?: Category;
|
||||
}>;
|
||||
mana?: number;
|
||||
health?: number;
|
||||
modifier?: [MainStat, number][];
|
||||
ability?: [Ability, number][];
|
||||
speed?: false | number;
|
||||
initiative?: number;
|
||||
mastery?: keyof CompiledCharacter["mastery"];
|
||||
spellrank?: SpellType;
|
||||
spellslot?: number | MainStat;
|
||||
defense?: Array<keyof CompiledCharacter["defense"]>;
|
||||
resistance?: [Resistance, "attack" | "defense"][];
|
||||
features?: Feature[]; //TODO
|
||||
};
|
||||
export type CompiledCharacter = {
|
||||
id: number;
|
||||
owner?: number;
|
||||
username?: string;
|
||||
name: string;
|
||||
health: number;
|
||||
mana: number;
|
||||
race: number;
|
||||
spellslots: number;
|
||||
spellranks: Record<SpellType, 0 | 1 | 2 | 3>;
|
||||
aspect: string;
|
||||
speed: number | false;
|
||||
initiative: number;
|
||||
|
||||
defense: {
|
||||
static: number;
|
||||
activeparry: number;
|
||||
activedodge: number;
|
||||
passiveparry: number;
|
||||
passivedodge: number;
|
||||
};
|
||||
|
||||
mastery: {
|
||||
strength: number;
|
||||
dexterity: number;
|
||||
shield: number;
|
||||
armor: number;
|
||||
multiattack: number;
|
||||
magicpower: number;
|
||||
magicspeed: number;
|
||||
magicelement: number;
|
||||
};
|
||||
|
||||
resistance: { //First is attack, second is defense
|
||||
stun: [number, number];
|
||||
bleed: [number, number];
|
||||
posion: [number, number];
|
||||
fear: [number, number];
|
||||
influence: [number, number];
|
||||
charm: [number, number];
|
||||
possesion: [number, number];
|
||||
precision: [number, number];
|
||||
knowledge: [number, number];
|
||||
instinct: [number, number];
|
||||
};
|
||||
|
||||
modifier: Record<MainStat, number>;
|
||||
abilities: Partial<Record<Ability, [number, number]>>;
|
||||
level: number;
|
||||
features: Record<Category, string[]>; //Currently: List of training option as text. TODO: Update to a more complex structure later
|
||||
};
|
||||
Reference in New Issue
Block a user