parsed skills, combattechniques and improvements from the sources

This commit is contained in:
2025-06-22 20:05:31 +02:00
parent f148695c59
commit 156b15c5e5
11 changed files with 630 additions and 207 deletions

View File

@@ -1,154 +0,0 @@
{
"steigerungsfaktoren": [
{
"aktivierung": "0",
"faktoren": {
"A": 1,
"B": 2,
"C": 3,
"D": 4,
"E": null
}
},
{
"aktivierung": "1-12",
"faktoren": {
"A": 1,
"B": 2,
"C": 3,
"D": 4,
"E": 15
}
},
{
"aktivierung": "13",
"faktoren": {
"A": 2,
"B": 4,
"C": 6,
"D": 8,
"E": 15
}
},
{
"aktivierung": "14",
"faktoren": {
"A": 3,
"B": 6,
"C": 9,
"D": 12,
"E": 15
}
},
{
"aktivierung": "15",
"faktoren": {
"A": 4,
"B": 8,
"C": 12,
"D": 16,
"E": 30
}
},
{
"aktivierung": "16",
"faktoren": {
"A": 5,
"B": 10,
"C": 15,
"D": 20,
"E": 45
}
},
{
"aktivierung": "17",
"faktoren": {
"A": 6,
"B": 12,
"C": 18,
"D": 24,
"E": 60
}
},
{
"aktivierung": "18",
"faktoren": {
"A": 7,
"B": 14,
"C": 21,
"D": 28,
"E": 75
}
},
{
"aktivierung": "19",
"faktoren": {
"A": 8,
"B": 16,
"C": 24,
"D": 32,
"E": 90
}
},
{
"aktivierung": "20",
"faktoren": {
"A": 9,
"B": 18,
"C": 27,
"D": 36,
"E": 105
}
},
{
"aktivierung": "21",
"faktoren": {
"A": 10,
"B": 20,
"C": 30,
"D": 40,
"E": 120
}
},
{
"aktivierung": "22",
"faktoren": {
"A": 11,
"B": 22,
"C": 33,
"D": 44,
"E": 135
}
},
{
"aktivierung": "23",
"faktoren": {
"A": 12,
"B": 24,
"C": 36,
"D": 48,
"E": 150
}
},
{
"aktivierung": "24",
"faktoren": {
"A": 13,
"B": 26,
"C": 39,
"D": 52,
"E": 165
}
},
{
"aktivierung": "25",
"faktoren": {
"A": 14,
"B": 28,
"C": 42,
"D": 56,
"E": 180
}
}
]
}

View File

View File

@@ -1,28 +1,27 @@
import type {DSAAttributes, DSAExperienceLevel, DSAPersonalData, DSAStats} from "../types/baseCharacter.ts"; import type {DSAAttributes, DSAExperienceLevel, DSAPersonalData, DSAStats} from "../types/baseCharacter.ts";
import type {DSACalculatedValue, DSAImprovements} from "../types/baseDSA.ts"; import type {DSACalculatedValue} from "../types/baseDSA.ts";
import type {DSABaseEquiment} from "../types/baseEquiment.ts"; import type {DSABaseEquiment} from "../types/baseEquiment.ts";
import type {DSAArmor, DSAMeleeWeapon, DSARangedWeapon, DSAShieldParryWeapon} from "../types/equiment.ts"; import type {DSAArmor, DSAMeleeWeapon, DSARangedWeapon, DSAShieldParryWeapon} from "../types/equiment.ts";
import type {DSASpell} from "../types/character.ts"; import type {DSASpell} from "../types/character.ts";
import Skill from "./Skill.ts"; import Skills from "./Skills.ts";
// TODO // TODO
// === LOGIC === // === LOGIC ===
// Skillpoint <-> QualityLevel // Skillpoint <-> QualityLevel
export default class CharacterSheet extends Skill { export default class Character{
public id: string public id: string
personalData: DSAPersonalData personalData: DSAPersonalData
attributes: DSAAttributes attributes: DSAAttributes
stats: DSAStats stats: DSAStats
fatePoints: DSACalculatedValue; fatePoints: DSACalculatedValue
experienceLevel: DSAExperienceLevel experienceLevel: DSAExperienceLevel
advantanges: string[] // TODO advantanges: string[] // TODO
disadvantanges: string[] // TODO disadvantanges: string[] // TODO
generalSpecialAbilities: string[] // TODO generalSpecialAbilities: string[] // TODO
skills: string[] // TODO: {physical, social, nature, knowledge, craft} generated by GPT skills: Skills[] // TODO: {physical, social, nature, knowledge, craft} generated by GPT
attributeModifiers: string[]
languages: string[] languages: string[]
scripts: string[] scripts: string[]
@@ -80,9 +79,20 @@ export default class CharacterSheet extends Skill {
spells?: DSASpell[] spells?: DSASpell[]
} }
constructor(name: string) { constructor() {
super()
this.id = crypto.randomUUID() this.id = crypto.randomUUID()
this.personalData.name = name this.personalData = {
name: "", age: "", culture: "", family: "", hometown: "", profession: "", socialStanding: "", species: ""
}
this.attributes = {
agility: 8,
charisma: 8,
cleverness: 8,
constitution: 8,
courage: 8,
dexterity: 8,
intuition: 8,
strength: 8
}
} }
} }

View File

@@ -0,0 +1,26 @@
import improvementCostTable from '../data/improvementcosttable.json'
import type {DSAImprovements} from "../types/baseDSA.ts";
export default class DSAImprovementsTable {
private static readonly improvementCostTable = improvementCostTable;
static getCost(improvement: DSAImprovements, level: number) : number{
if(improvement === 'other') {
//TODO
return 0
}
else {
return improvementCostTable[improvement][this.getKey(level)]
}
}
private static getKey(level : number) : string {
if(level >= 1 && level <= 12) {
return '1-12'
} else {
return level.toString()
}
}
}

View File

@@ -1,25 +0,0 @@
import type {DSAAttributes} from "../types/baseCharacter.ts";
import type {DSAImprovements} from "../types/baseDSA.ts";
export default class Skill{
skillName: string
attributes: [keyof DSAAttributes, keyof DSAAttributes, keyof DSAAttributes]
encumbrance: "YES" | "NO" | "MAYBE"
improvement: DSAImprovements
skillLevel: number
comment: string
routineCheck() : number{
return this.skillLevel >= 13 ? this.skillLevel/2 : 0
}
improvementCost(){
return DSAImprovementsTable.getCost(this.improvement, this.skillLevel)
}
improve(){
this.skillLevel ++
}
}
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/export

26
src/classes/Skills.ts Normal file
View File

@@ -0,0 +1,26 @@
import type {DSAAttributes} from "../types/baseCharacter.ts";
import type {DSAImprovements} from "../types/baseDSA.ts";
import DSAImprovementsTable from "./DSAImprovementsTable.ts";
export default class Skills {
skillName: string
attributes: [keyof DSAAttributes, keyof DSAAttributes, keyof DSAAttributes]
encumbrance: "YES" | "NO" | "MAYBE"
improvement: DSAImprovements
skillLevel: number
comment: string
routineCheck(): number {
return this.skillLevel >= 13 ? this.skillLevel / 2 : 0
}
improvementCost() {
return DSAImprovementsTable.getCost(this.improvement, this.skillLevel)
}
improve() {
this.skillLevel++
}
}
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/export

View File

@@ -0,0 +1,91 @@
{
"combat_techniques": {
"page_ref": "p. 214-231",
"techniques": [
{
"name": "Bows",
"primary": ["DEX"],
"improvement": "C",
"type": "ranged"
},
{
"name": "Brawling",
"primary": ["AGI", "STR"],
"improvement": "B",
"type": "melee"
},
{
"name": "Chain Weapons",
"primary": ["STR"],
"improvement": "B",
"type": "melee"
},
{
"name": "Crossbows",
"primary": ["DEX"],
"improvement": "B",
"type": "ranged"
},
{
"name": "Daggers",
"primary": ["AGI"],
"improvement": "B",
"type": "melee"
},
{
"name": "Fencing Weapons",
"primary": ["AGI"],
"improvement": "C",
"type": "melee"
},
{
"name": "Impact Weapons",
"primary": ["STR"],
"improvement": "C",
"type": "melee"
},
{
"name": "Lances",
"primary": ["STR"],
"improvement": "B",
"type": "melee"
},
{
"name": "Pole Weapons",
"primary": ["AGI", "STR"],
"improvement": "C",
"type": "melee"
},
{
"name": "Shields",
"primary": ["STR"],
"improvement": "C",
"type": "defensive"
},
{
"name": "Swords",
"primary": ["AGI", "STR"],
"improvement": "C",
"type": "melee"
},
{
"name": "Thrown Weapons",
"primary": ["DEX"],
"improvement": "B",
"type": "ranged"
},
{
"name": "Two-Handed Impact Weapons",
"primary": ["STR"],
"improvement": "C",
"type": "melee"
},
{
"name": "Two-Handed Swords",
"primary": ["STR"],
"improvement": "C",
"type": "melee"
}
]
}
}

View File

@@ -0,0 +1,87 @@
{
"A": {
"0": 1,
"1-12": 1,
"13": 2,
"14": 3,
"15": 4,
"16": 5,
"17": 6,
"18": 7,
"19": 8,
"20": 9,
"21": 10,
"22": 11,
"23": 12,
"24": 13,
"25": 14
},
"B": {
"0": 2,
"1-12": 2,
"13": 4,
"14": 6,
"15": 8,
"16": 10,
"17": 12,
"18": 14,
"19": 16,
"20": 18,
"21": 20,
"22": 22,
"23": 24,
"24": 26,
"25": 28
},
"C": {
"0": 3,
"1-12": 3,
"13": 6,
"14": 9,
"15": 12,
"16": 15,
"17": 18,
"18": 21,
"19": 24,
"20": 27,
"21": 30,
"22": 33,
"23": 36,
"24": 39,
"25": 42
},
"D": {
"0": 4,
"1-12": 4,
"13": 8,
"14": 12,
"15": 16,
"16": 20,
"17": 24,
"18": 28,
"19": 32,
"20": 36,
"21": 40,
"22": 44,
"23": 48,
"24": 52,
"25": 56
},
"E": {
"0": null,
"1-12": 15,
"13": 15,
"14": 15,
"15": 30,
"16": 45,
"17": 60,
"18": 75,
"19": 90,
"20": 105,
"21": 120,
"22": 135,
"23": 150,
"24": 165,
"25": 180
}
}

381
src/data/skills.json Normal file
View File

@@ -0,0 +1,381 @@
{
"physical_skills": {
"page_ref": "p. 188-192",
"skills": [
{
"name": "Body Control",
"check": ["AGI", "AGI", "CON"],
"enc": "yes",
"improvement": "D"
},
{
"name": "Carousing",
"check": ["SGC", "CON", "STR"],
"enc": "no",
"improvement": "A"
},
{
"name": "Climbing",
"check": ["COU", "AGI", "STR"],
"enc": "yes",
"improvement": "A"
},
{
"name": "Dancing",
"check": ["SGC", "CHA", "AGI"],
"enc": "yes",
"improvement": "A"
},
{
"name": "Feat of Strength",
"check": ["COU", "STR", "STR"],
"enc": "yes",
"improvement": "B"
},
{
"name": "Flying",
"check": ["COU", "INT", "AGI"],
"enc": "yes",
"improvement": "B"
},
{
"name": "Gaukelei",
"check": ["COU", "CHA", "DEX"],
"enc": "yes",
"improvement": "A"
},
{
"name": "Perception",
"check": ["SGC", "INT", "INT"],
"enc": "maybe",
"improvement": "D"
},
{
"name": "Pickpocket",
"check": ["COU", "DEX", "AGI"],
"enc": "yes",
"improvement": "B"
},
{
"name": "Riding",
"check": ["CHA", "AGI", "STR"],
"enc": "yes",
"improvement": "B"
},
{
"name": "Self-Control",
"check": ["COU", "COU", "CON"],
"enc": "no",
"improvement": "D"
},
{
"name": "Singing",
"check": ["SGC", "CHA", "CON"],
"enc": "maybe",
"improvement": "A"
},
{
"name": "Stealth",
"check": ["COU", "INT", "AGI"],
"enc": "yes",
"improvement": "C"
},
{
"name": "Swimming",
"check": ["AGI", "CON", "STR"],
"enc": "yes",
"improvement": "B"
}
]
},
"social_skills": {
"page_ref": "p. 193-197",
"skills": [
{
"name": "Disguise",
"check": ["INT", "CHA", "AGI"],
"enc": "maybe",
"improvement": "B"
},
{
"name": "Empathy",
"check": ["SGC", "INT", "CHA"],
"enc": "no",
"improvement": "C"
},
{
"name": "Etiquette",
"check": ["SGC", "INT", "CHA"],
"enc": "maybe",
"improvement": "B"
},
{
"name": "Fast-Talk",
"check": ["COU", "INT", "CHA"],
"enc": "no",
"improvement": "C"
},
{
"name": "Intimidation",
"check": ["COU", "INT", "CHA"],
"enc": "no",
"improvement": "B"
},
{
"name": "Persuasion",
"check": ["COU", "SGC", "CHA"],
"enc": "no",
"improvement": "B"
},
{
"name": "Seduction",
"check": ["COU", "CHA", "CHA"],
"enc": "maybe",
"improvement": "B"
},
{
"name": "Streetwise",
"check": ["SGC", "INT", "CHA"],
"enc": "maybe",
"improvement": "C"
},
{
"name": "Willpower",
"check": ["COU", "INT", "CHA"],
"enc": "no",
"improvement": "D"
}
]
},
"knowledge_skills": {
"page_ref": "p. 201-205",
"skills": [
{
"name": "Astronomy",
"check": ["SGC", "SGC", "INT"],
"enc": "no",
"improvement": "A"
},
{
"name": "Gambling",
"check": ["SGC", "SGC", "INT"],
"enc": "no",
"improvement": "A"
},
{
"name": "Geography",
"check": ["SGC", "SGC", "INT"],
"enc": "no",
"improvement": "B"
},
{
"name": "History",
"check": ["SGC", "SGC", "INT"],
"enc": "no",
"improvement": "B"
},
{
"name": "Law",
"check": ["SGC", "SGC", "INT"],
"enc": "no",
"improvement": "A"
},
{
"name": "Magical Lore",
"check": ["SGC", "SGC", "INT"],
"enc": "no",
"improvement": "C"
},
{
"name": "Math",
"check": ["SGC", "SGC", "INT"],
"enc": "no",
"improvement": "A"
},
{
"name": "Mechanics",
"check": ["SGC", "SGC", "DEX"],
"enc": "no",
"improvement": "B"
},
{
"name": "Myths & Legends",
"check": ["SGC", "SGC", "INT"],
"enc": "no",
"improvement": "B"
},
{
"name": "Religions",
"check": ["SGC", "SGC", "INT"],
"enc": "no",
"improvement": "B"
},
{
"name": "Sphere Lore",
"check": ["SGC", "SGC", "INT"],
"enc": "no",
"improvement": "B"
},
{
"name": "Warfare",
"check": ["COU", "SGC", "INT"],
"enc": "no",
"improvement": "B"
}
]
},
"nature_skills": {
"page_ref": "p. 198-200",
"skills": [
{
"name": "Animal Lore",
"check": ["COU", "COU", "CHA"],
"enc": "yes",
"improvement": "C"
},
{
"name": "Fishing",
"check": ["DEX", "AGI", "CON"],
"enc": "maybe",
"improvement": "A"
},
{
"name": "Orienting",
"check": ["SGC", "INT", "INT"],
"enc": "no",
"improvement": "B"
},
{
"name": "Plant Lore",
"check": ["SGC", "DEX", "CON"],
"enc": "maybe",
"improvement": "C"
},
{
"name": "Ropes",
"check": ["SGC", "DEX", "STR"],
"enc": "maybe",
"improvement": "A"
},
{
"name": "Survival",
"check": ["COU", "AGI", "CON"],
"enc": "yes",
"improvement": "C"
},
{
"name": "Tracking",
"check": ["COU", "INT", "AGI"],
"enc": "yes",
"improvement": "C"
}
]
},
"craft_skills": {
"page_ref": "p. 206-213",
"skills": [
{
"name": "Alchemy",
"check": ["COU", "SGC", "DEX"],
"enc": "yes",
"improvement": "C"
},
{
"name": "Artistic Ability",
"check": ["INT", "DEX", "DEX"],
"enc": "yes",
"improvement": "A"
},
{
"name": "Clothworking",
"check": ["SGC", "DEX", "DEX"],
"enc": "yes",
"improvement": "B"
},
{
"name": "Commerce",
"check": ["SGC", "INT", "CHA"],
"enc": "no",
"improvement": "B"
},
{
"name": "Driving",
"check": ["CHA", "DEX", "CON"],
"enc": "yes",
"improvement": "A"
},
{
"name": "Earthencraft",
"check": ["DEX", "DEX", "STR"],
"enc": "yes",
"improvement": "A"
},
{
"name": "Leatherworking",
"check": ["DEX", "AGI", "CON"],
"enc": "yes",
"improvement": "B"
},
{
"name": "Metalworking",
"check": ["DEX", "CON", "STR"],
"enc": "yes",
"improvement": "C"
},
{
"name": "Music",
"check": ["CHA", "DEX", "CON"],
"enc": "yes",
"improvement": "A"
},
{
"name": "Pick Locks",
"check": ["INT", "DEX", "DEX"],
"enc": "yes",
"improvement": "C"
},
{
"name": "Prepare Food",
"check": ["INT", "DEX", "DEX"],
"enc": "yes",
"improvement": "A"
},
{
"name": "Sailing",
"check": ["DEX", "AGI", "STR"],
"enc": "yes",
"improvement": "B"
},
{
"name": "Treat Disease",
"check": ["COU", "INT", "CON"],
"enc": "yes",
"improvement": "B"
},
{
"name": "Treat Poison",
"check": ["COU", "SGC", "INT"],
"enc": "yes",
"improvement": "B"
},
{
"name": "Treat Soul",
"check": ["INT", "CHA", "CON"],
"enc": "no",
"improvement": "B"
},
{
"name": "Treat Wounds",
"check": ["SGC", "DEX", "DEX"],
"enc": "yes",
"improvement": "D"
},
{
"name": "Woodworking",
"check": ["DEX", "AGI", "STR"],
"enc": "yes",
"improvement": "B"
}
]
}
}

View File

@@ -1,19 +0,0 @@
export interface BaseAbilities {
str: number;
dex: number;
con: number;
int: number;
wis: number;
cha: number;
}
export interface DSAAttributes {
courage: number;
cleverness: number;
intuition: number;
charisma: number;
dexterity: number;
agility: number;
constitution: number;
strength: number;
}