diff --git a/.gitignore b/.gitignore index de4d1f00..5fd8e736 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ dist node_modules +src/packs/__source diff --git a/.idea/DSA41.iml b/.idea/DSA41.iml index 24643cc3..eb3c237b 100644 --- a/.idea/DSA41.iml +++ b/.idea/DSA41.iml @@ -5,8 +5,10 @@ + + - \ No newline at end of file + diff --git a/gulpfile.mjs b/gulpfile.mjs index 3cb5f0c4..0c1c432d 100644 --- a/gulpfile.mjs +++ b/gulpfile.mjs @@ -1,23 +1,71 @@ import {dest, series, src} from 'gulp'; import process from 'node:process'; import replace from 'gulp-replace'; - +import {getRandomValues} from 'node:crypto'; import * as dartSass from 'sass'; import gulpSass from 'gulp-sass'; import {deleteAsync} from 'del'; - -import {readdirSync} from 'node:fs'; +import {readdirSync, readFileSync, writeFileSync, rmdirSync, existsSync, mkdirSync} from "fs"; import {join} from 'node:path'; import {compilePack} from '@foundryvtt/foundryvtt-cli'; const sass = gulpSass(dartSass); + +/** + * Generate a random alphanumeric string ID of a given requested length using `crypto.getRandomValues()`. + * @param {number} length The length of the random string to generate, which must be at most 16384. + * @returns {string} A string containing random letters (A-Z, a-z) and numbers (0-9). + */ +function randomID(length = 16) { + const chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; + const cutoff = 0x100000000 - (0x100000000 % chars.length); + const random = new Uint32Array(length); + do { + getRandomValues(random); + } while (random.some(x => x >= cutoff)); + let id = ""; + for (let i = 0; i < length; i++) id += chars[random[i] % chars.length]; + return id; +} + +const convert = function (from, to, ofType) { + + const SOURCE = from; + const DEST = to; + const TYPE = ofType; + + try { + rmdirSync(DEST, {force: true, recursive: true}) + } catch (e) { + } + mkdirSync(DEST) + + readdirSync(SOURCE).forEach(file => { + let originalSource = JSON.parse(readFileSync(join(SOURCE, file), {encoding: "utf8"})); + let id = randomID(); + + let targetSource = { + _id: id, + _key: "!items!" + id, + type: TYPE, + img: originalSource.image, + name: originalSource.name.trim(), + system: {...originalSource}, + } + delete targetSource.system.image; + let target = JSON.stringify(targetSource, null, 2); + let newFileName = "./" + join(DEST, id + ".json"); + writeFileSync(newFileName, target, {encoding: "utf8"}); + }); + +} + function cleanDist() { return deleteAsync(['dist/**']); } - function buildStyles() { return src('src/style/**/*.scss') .pipe(sass().on('error', sass.logError)) @@ -40,6 +88,28 @@ function updateManifestFile() { .pipe(dest('dist/')) } +async function prepareDB() { + + try { + if (!existsSync("./src/packs/__source")) { + mkdirSync("./src/packs/__source"); + } + + convert("./src/packs/_source/talente", "./src/packs/__source/talente", "Skill"); + convert("./src/packs/_source/zauber", "./src/packs/__source/zauber", "Spell"); + convert("./src/packs/_source/vorteile", "./src/packs/__source/vorteile", "Advantage"); + convert("./src/packs/_source/waffen", "./src/packs/__source/waffen", "Equipment"); + convert("./src/packs/_source/munition", "./src/packs/__source/munition", "Equipment"); + convert("./src/packs/_source/ruestzeug", "./src/packs/__source/ruestzeug", "Equipment"); + convert("./src/packs/_source/liturgien-und-segnungen", "./src/packs/__source/liturgien", "Liturgy"); + convert("./src/packs/_source/wunden", "./src/packs/__source/wunden", "ActiveEffect"); + + } catch (err) { + console.error(err); + } + +} + function buildDB() { // Determine which source folders to process @@ -55,7 +125,7 @@ function buildDB() { const src = join(PACK_SRC, folder.name); const dest = join(PACK_DEST, folder.name); console.info(`Compiling pack ${folder.name}`); - await compilePack(src, dest, {recursive: true, log: true, nedb: false}); + await compilePack(src, dest, {recursive: true, nedb: false}); } resolve() @@ -68,6 +138,7 @@ export default series( copySource, copyAssets, buildStyles, + prepareDB, buildDB, updateManifestFile ) diff --git a/src/assets/Aves.png b/src/assets/Aves.png new file mode 100644 index 00000000..412161f4 Binary files /dev/null and b/src/assets/Aves.png differ diff --git a/src/assets/Boron.png b/src/assets/Boron.png new file mode 100644 index 00000000..bcd55539 Binary files /dev/null and b/src/assets/Boron.png differ diff --git a/src/assets/Efferd.png b/src/assets/Efferd.png new file mode 100644 index 00000000..54a78bbe Binary files /dev/null and b/src/assets/Efferd.png differ diff --git a/src/assets/Firun.png b/src/assets/Firun.png new file mode 100644 index 00000000..23568f5f Binary files /dev/null and b/src/assets/Firun.png differ diff --git a/src/assets/Hesinde.png b/src/assets/Hesinde.png new file mode 100644 index 00000000..bdb07e46 Binary files /dev/null and b/src/assets/Hesinde.png differ diff --git a/src/assets/Ifirn.png b/src/assets/Ifirn.png new file mode 100644 index 00000000..a93d0406 Binary files /dev/null and b/src/assets/Ifirn.png differ diff --git a/src/assets/Ingerimm.png b/src/assets/Ingerimm.png new file mode 100644 index 00000000..ef2dc864 Binary files /dev/null and b/src/assets/Ingerimm.png differ diff --git a/src/assets/Kor.png b/src/assets/Kor.png new file mode 100644 index 00000000..7b3a2abb Binary files /dev/null and b/src/assets/Kor.png differ diff --git a/src/assets/Marbo.png b/src/assets/Marbo.png new file mode 100644 index 00000000..24baebca Binary files /dev/null and b/src/assets/Marbo.png differ diff --git a/src/assets/Namenlos.png b/src/assets/Namenlos.png new file mode 100644 index 00000000..aa70fb5d Binary files /dev/null and b/src/assets/Namenlos.png differ diff --git a/src/assets/Nandus.png b/src/assets/Nandus.png new file mode 100644 index 00000000..8b7a3493 Binary files /dev/null and b/src/assets/Nandus.png differ diff --git a/src/assets/Peraine.png b/src/assets/Peraine.png new file mode 100644 index 00000000..8572c7cf Binary files /dev/null and b/src/assets/Peraine.png differ diff --git a/src/assets/Phex.png b/src/assets/Phex.png new file mode 100644 index 00000000..7de13f2c Binary files /dev/null and b/src/assets/Phex.png differ diff --git a/src/assets/Praios.png b/src/assets/Praios.png new file mode 100644 index 00000000..e5e62963 Binary files /dev/null and b/src/assets/Praios.png differ diff --git a/src/assets/Rahja.png b/src/assets/Rahja.png new file mode 100644 index 00000000..c4ad56cf Binary files /dev/null and b/src/assets/Rahja.png differ diff --git a/src/assets/Rondra.png b/src/assets/Rondra.png new file mode 100644 index 00000000..619ad98a Binary files /dev/null and b/src/assets/Rondra.png differ diff --git a/src/assets/Satuaria.png b/src/assets/Satuaria.png new file mode 100644 index 00000000..5c90ab28 Binary files /dev/null and b/src/assets/Satuaria.png differ diff --git a/src/assets/Simia.png b/src/assets/Simia.png new file mode 100644 index 00000000..d6fc5214 Binary files /dev/null and b/src/assets/Simia.png differ diff --git a/src/assets/Tairach.png b/src/assets/Tairach.png new file mode 100644 index 00000000..8b156577 Binary files /dev/null and b/src/assets/Tairach.png differ diff --git a/src/assets/Travia.png b/src/assets/Travia.png new file mode 100644 index 00000000..548c7de2 Binary files /dev/null and b/src/assets/Travia.png differ diff --git a/src/assets/Tsa.png b/src/assets/Tsa.png new file mode 100644 index 00000000..10a2f1fb Binary files /dev/null and b/src/assets/Tsa.png differ diff --git a/src/assets/Ucuri.png b/src/assets/Ucuri.png new file mode 100644 index 00000000..d5897df3 Binary files /dev/null and b/src/assets/Ucuri.png differ diff --git a/src/assets/deities/Angrosch.png b/src/assets/deities/Angrosch.png new file mode 100644 index 00000000..d878e2b3 Binary files /dev/null and b/src/assets/deities/Angrosch.png differ diff --git a/src/assets/deities/Aves.png b/src/assets/deities/Aves.png new file mode 100644 index 00000000..412161f4 Binary files /dev/null and b/src/assets/deities/Aves.png differ diff --git a/src/assets/deities/Boron.png b/src/assets/deities/Boron.png new file mode 100644 index 00000000..6ee4c127 Binary files /dev/null and b/src/assets/deities/Boron.png differ diff --git a/src/assets/deities/Efferd.png b/src/assets/deities/Efferd.png new file mode 100644 index 00000000..3786c773 Binary files /dev/null and b/src/assets/deities/Efferd.png differ diff --git a/src/assets/deities/Firun.png b/src/assets/deities/Firun.png new file mode 100644 index 00000000..b9492234 Binary files /dev/null and b/src/assets/deities/Firun.png differ diff --git a/src/assets/deities/Hesinde.png b/src/assets/deities/Hesinde.png new file mode 100644 index 00000000..28cd8c72 Binary files /dev/null and b/src/assets/deities/Hesinde.png differ diff --git a/src/assets/deities/Ifirn.png b/src/assets/deities/Ifirn.png new file mode 100644 index 00000000..b52a0fc6 Binary files /dev/null and b/src/assets/deities/Ifirn.png differ diff --git a/src/assets/deities/Ingerimm.png b/src/assets/deities/Ingerimm.png new file mode 100644 index 00000000..d878e2b3 Binary files /dev/null and b/src/assets/deities/Ingerimm.png differ diff --git a/src/assets/deities/Kor.png b/src/assets/deities/Kor.png new file mode 100644 index 00000000..d62b4970 Binary files /dev/null and b/src/assets/deities/Kor.png differ diff --git a/src/assets/deities/Marbo.png b/src/assets/deities/Marbo.png new file mode 100644 index 00000000..41455e61 Binary files /dev/null and b/src/assets/deities/Marbo.png differ diff --git a/src/assets/deities/Namenlos.png b/src/assets/deities/Namenlos.png new file mode 100644 index 00000000..06d320b0 Binary files /dev/null and b/src/assets/deities/Namenlos.png differ diff --git a/src/assets/deities/Nandus.png b/src/assets/deities/Nandus.png new file mode 100644 index 00000000..9d12a1e8 Binary files /dev/null and b/src/assets/deities/Nandus.png differ diff --git a/src/assets/deities/Peraine.png b/src/assets/deities/Peraine.png new file mode 100644 index 00000000..4c5acb76 Binary files /dev/null and b/src/assets/deities/Peraine.png differ diff --git a/src/assets/deities/Phex.png b/src/assets/deities/Phex.png new file mode 100644 index 00000000..337ba553 Binary files /dev/null and b/src/assets/deities/Phex.png differ diff --git a/src/assets/deities/Praios.png b/src/assets/deities/Praios.png new file mode 100644 index 00000000..72152130 Binary files /dev/null and b/src/assets/deities/Praios.png differ diff --git a/src/assets/deities/Rahja.png b/src/assets/deities/Rahja.png new file mode 100644 index 00000000..da0732e3 Binary files /dev/null and b/src/assets/deities/Rahja.png differ diff --git a/src/assets/deities/Rondra.png b/src/assets/deities/Rondra.png new file mode 100644 index 00000000..b4f6bc95 Binary files /dev/null and b/src/assets/deities/Rondra.png differ diff --git a/src/assets/deities/Satuaria.png b/src/assets/deities/Satuaria.png new file mode 100644 index 00000000..ed5fd7c7 Binary files /dev/null and b/src/assets/deities/Satuaria.png differ diff --git a/src/assets/deities/Simia.png b/src/assets/deities/Simia.png new file mode 100644 index 00000000..d777fc1f Binary files /dev/null and b/src/assets/deities/Simia.png differ diff --git a/src/assets/deities/Tairach.png b/src/assets/deities/Tairach.png new file mode 100644 index 00000000..fe6d724f Binary files /dev/null and b/src/assets/deities/Tairach.png differ diff --git a/src/assets/deities/Travia.png b/src/assets/deities/Travia.png new file mode 100644 index 00000000..3c7ae5d4 Binary files /dev/null and b/src/assets/deities/Travia.png differ diff --git a/src/assets/deities/Tsa.png b/src/assets/deities/Tsa.png new file mode 100644 index 00000000..a1e83e49 Binary files /dev/null and b/src/assets/deities/Tsa.png differ diff --git a/src/assets/deities/Ucuri.png b/src/assets/deities/Ucuri.png new file mode 100644 index 00000000..fdbb8704 Binary files /dev/null and b/src/assets/deities/Ucuri.png differ diff --git a/src/assets/gradient.png b/src/assets/gradient.png new file mode 100644 index 00000000..0ef0f861 Binary files /dev/null and b/src/assets/gradient.png differ diff --git a/src/assets/velvet_button.png b/src/assets/velvet_button.png new file mode 100644 index 00000000..53acbdd1 Binary files /dev/null and b/src/assets/velvet_button.png differ diff --git a/src/assets/velvet_strip.png b/src/assets/velvet_strip.png new file mode 100644 index 00000000..2e2a3ad5 Binary files /dev/null and b/src/assets/velvet_strip.png differ diff --git a/src/main.mjs b/src/main.mjs index ef4579b2..dcb4bd20 100644 --- a/src/main.mjs +++ b/src/main.mjs @@ -13,27 +13,42 @@ import {EquipmentDataModel} from "./module/data/equipment.mjs"; import {AusruestungSheet} from "./module/sheets/equipmentSheet.mjs"; import {CreatureDataModel} from "./module/data/creature.mjs"; import {CreatureSheet} from "./module/sheets/creatureSheet.mjs"; +import {LiturgySheet} from "./module/sheets/liturgySheet.mjs"; +import {LiturgyDataModel} from "./module/data/liturgy.mjs"; +import {BlessingDataModel} from "./module/data/blessing.mjs"; +import {SpecialAbilityDataModel} from "./module/data/specialAbility.mjs"; +import {SpecialAbilitySheet} from "./module/sheets/specialAbilitySheet.mjs"; +import {ActiveEffectSheet} from "./module/sheets/ActiveEffectSheet.mjs"; +import {ActiveEffectDataModel} from "./module/data/activeeffect.mjs"; +import {Trefferzone, Wunde, Zonenruestung, Zonenwunde} from "./module/data/Trefferzone.js"; async function preloadHandlebarsTemplates() { return loadTemplates([ // ui partials. 'systems/DSA_4-1/templates/ui/partial-rollable-button.hbs', 'systems/DSA_4-1/templates/ui/partial-rollable-weaponskill-button.hbs', + 'systems/DSA_4-1/templates/ui/partial-rollable-language-button.hbs', 'systems/DSA_4-1/templates/ui/partial-attribute-button.hbs', 'systems/DSA_4-1/templates/ui/partial-talent-editable.hbs', 'systems/DSA_4-1/templates/ui/partial-die.hbs', 'systems/DSA_4-1/templates/ui/partial-advantage-button.hbs', + 'systems/DSA_4-1/templates/ui/partial-sf-button.hbs', 'systems/DSA_4-1/templates/ui/partial-action-button.hbs', 'systems/DSA_4-1/templates/ui/partial-equipment-button.hbs', 'systems/DSA_4-1/templates/ui/partial-equipment-group-button.hbs', - 'systems/DSA_4-1/templates/ui/partial-array-editor.hbs' + 'systems/DSA_4-1/templates/ui/partial-array-editor.hbs', + 'systems/DSA_4-1/templates/dialog/modify-liturgy.hbs' ]); } Hooks.once("init", () => { game.DSA41 = { - rollItemMacro + rollItemMacro, + Zonenruestung, + Zonenwunde, + Trefferzone, + Wunde } // Configure custom Document implementations. @@ -51,6 +66,10 @@ Hooks.once("init", () => { Spell: SpellDataModel, Advantage: VornachteileDataModel, Equipment: EquipmentDataModel, + Liturgy: LiturgyDataModel, + Blessing: BlessingDataModel, + SpecialAbility: SpecialAbilityDataModel, + ActiveEffect: ActiveEffectDataModel, } CONFIG.Combat.initiative = { @@ -94,9 +113,73 @@ Hooks.once("init", () => { }) Items.registerSheet('dsa41.equipment', AusruestungSheet, { types: ["Equipment"], - makeDefault: true, + makeDefault: false, label: 'DSA41.AusruestungLabels.Item' }) + Items.registerSheet('dsa41.liturgy', LiturgySheet, { + types: ["SpecialAbility"], + makeDefault: true, + label: 'DSA41.SpecialAbilityLabels.Item' + }) + Items.registerSheet('dsa41.specialAbility', SpecialAbilitySheet, { + types: ["Liturgy"], + makeDefault: true, + label: 'DSA41.LiturgyLabels.Item' + }) + + Items.registerSheet('dsa41.activeEffect', ActiveEffectSheet, { + types: ['ActiveEffect'], + makeDefault: true, + label: 'DSA41.ActiveEffectLabels.ActiveFfect' + }) + + game.settings.register('DSA_4-1', 'optional_trefferzonen', { + name: "Optional: Trefferzonen", + hint: "Ersetzt das Wundensystem aus dem BRW durch das Trefferzonensystem aus WdH", + scope: "world", + config: true, + type: Boolean, + default: false, + onChange: value => { + }, + requiresReload: true + }) + + game.settings.register('DSA_4-1', 'optional_ruestungzonen', { + name: "Optional: Zonenrüstung", + hint: "Ersetzt das Rüstungssystem aus dem BRW durch das Zonenrüstungssystem aus WdH", + scope: "world", + config: true, + type: Boolean, + default: false, + onChange: value => { + }, + requiresReload: true + }) + + game.settings.register('DSA_4-1', 'optional_ausdauer', { + name: "Optional: Ausdauerregeln", + hint: "Aktiviert Regeln für das Spiel mit Ausdauer", + scope: "world", + config: true, + type: Boolean, + default: false, + onChange: value => { + }, + requiresReload: true + }) + + game.settings.register('DSA_4-1', 'optional_distanzklassen', { + name: "Optional: Distanzklassen", + hint: "Aktiviert Regeln für das Spiel mit Distanzklassen", + scope: "world", + config: true, + type: Boolean, + default: false, + onChange: value => { + }, + requiresReload: true + }) return preloadHandlebarsTemplates(); }) @@ -113,39 +196,44 @@ Hooks.on('dropActorSheetData', (actor, sheet, data) => { Hooks.once("ready", async function () { // Wait to register hotbar drop hook on ready so that modules could register earlier if they want to - Hooks.on("hotbarDrop", (bar, data, slot) => createBoilerplateMacro(data, slot)); + Hooks.on("hotbarDrop", (bar, data, slot) => { + return createTalentMacro(data, slot) + }); }); -async function createBoilerplateMacro(data, slot) { +async function createTalentMacro(data, slot) { console.log(data, slot) if (data.type !== "Item") return; - if (!("data" in data)) return ui.notifications.warn("You can only create macro buttons for owned Items"); - const item = data.data; + + const uuid = foundry.utils.parseUuid(data.uuid) + + const itemId = uuid.id; + const actorId = uuid.primaryId; + const item = await game.actors.get(actorId).items.get(itemId); // Create the macro command - const command = `game.DSA41.rollItemMacro("${item.name}");`; - let macro = game.macros.entities.find(m => (m.name === item.name) && (m.command === command)); - if (!macro) { - macro = await Macro.create({ + const command = `game.DSA41.rollItemMacro("${data.uuid}");`; + + const macro = await Macro.create({ name: item.name, type: "script", img: item.img, command: command, - flags: {"dsa41.itemMacro": true} - }); - } + flags: {"dsa41.skillMacro": true} + }); + game.user.assignHotbarMacro(macro, slot); return false; } -function rollItemMacro(itemName) { +function rollItemMacro(_uuid) { const speaker = ChatMessage.getSpeaker(); - let actor; - if (speaker.token) actor = game.actors.tokens[speaker.token]; - if (!actor) actor = game.actors.get(speaker.actor); - const item = actor ? actor.items.find(i => i.name === itemName) : null; - if (!item) return ui.notifications.warn(`Your controlled Actor does not have an item named ${itemName}`); + const uuid = foundry.utils.parseUuid(_uuid) + const itemId = uuid.id; + const actorId = uuid.primaryId; + let actor = game.actors.get(actorId); + const item = actor ? actor.items.get(itemId) : null; + if (!item) return ui.notifications.warn(`Your controlled Actor does not have an item with id ${itemId}`); - // Trigger the item roll - return item.roll(); + return item.system.roll(); } diff --git a/src/module/data/Trefferzone.js b/src/module/data/Trefferzone.js new file mode 100644 index 00000000..6a305685 --- /dev/null +++ b/src/module/data/Trefferzone.js @@ -0,0 +1,30 @@ +export const Trefferzone = { + ARM_LINKS: "armlinks", + ARM_RECHTS: "armrechts", + BEIN_LINKS: "beinlinks", + BEIN_RECHTS: "beinrechts", + BAUCH: "bauch", + KOPF: "kopf", + BRUST: "brust" +} + +export const Zonenruestung = { + ...Trefferzone, + WAFFE_LINKS: "links", + WAFFE_RECHTS: "rechts", + FERNKAMPF: "fernkampf", + MUNITION: "munition", + RUECKEN: "ruecken", +} + +export const Zonenwunde = { + ARM_LINKS: "Wunde linker Arm", + ARM_RECHTS: "Wunde rechter Arm", + BEIN_LINKS: "Wunde rechtes Bein", + BEIN_RECHTS: "Wunde rechtes Bein", + BAUCH: "Bauchwunde", + KOPF: "Kopfwunde", + BRUST: "Brustwunde", +} + +export const Wunde = "Wunde" \ No newline at end of file diff --git a/src/module/data/activeeffect.mjs b/src/module/data/activeeffect.mjs new file mode 100644 index 00000000..e5257eca --- /dev/null +++ b/src/module/data/activeeffect.mjs @@ -0,0 +1,52 @@ +import BaseItem from "./base-item.mjs"; + +const {ArrayField, BooleanField, NumberField, AnyField, StringField, HTMLField} = foundry.data.fields; + +export class ActiveEffectDataModel extends BaseItem { + + static defineSchema() { + return { + name: new StringField({required: true}), + notes: new HTMLField(), + unique: new BooleanField({initial: false}), + effects: new AnyField() + } + /* + + name: String, // Name of Vornachteil will be used for rendering and referencing by other Items + description: HTMLString, // only used for rendering + variant: [String]?, // variant name of Vornachteil e.g. "Mut" in the case of "Herausragende Eigenschaft" + levels: [Number]?, // available levels e.g. 1, 2 in the case of "Flink" + mods: [ + { + level: Number?, // in reference to level of the Vornachteil, is null when it does not have any levels or is the only modification + field: String, // Reference to Actor Data e.g. "FF" maps to "FF.mod" + value: Number, // value of the Modification e.g. "+2" maps to 2 + requirement: { + field: String // Reference to Actor Data e.g. "BE" maps "be.aktuell" + operation: String // Supported: "<=", ">" + value: Number // Target Value the referenced field has to compare against + }? // optional when the mod does not have an active requirement + } + ] + + */ + } + + _onCreate(data, options, userId) { + super._onCreate(data, options, userId); + + console.log(data); + if (this.parent.getEmbeddedCollection("ActiveEffect").contents.length === 0) { + + this.parent.createEmbeddedDocuments("ActiveEffect", [{ + name: data.name, + changes: data.system.effects, + duration: {}, + icon: this.img, + }]); + console.log("added default activeffect"); + } + } + +} diff --git a/src/module/data/blessing.mjs b/src/module/data/blessing.mjs new file mode 100644 index 00000000..aeff57d3 --- /dev/null +++ b/src/module/data/blessing.mjs @@ -0,0 +1,13 @@ +const { + SchemaField, NumberField, StringField, EmbeddedDocumentField, DocumentIdField, ArrayField, ForeignDocumentField +} = foundry.data.fields; + +export class BlessingDataModel extends foundry.abstract.TypeDataModel { + + static defineSchema() { + return { + gottheit: new StringField(), + wert: new NumberField({min: 0, integer: true}), + } + } +} diff --git a/src/module/data/character.mjs b/src/module/data/character.mjs index 00238a65..b6e5eb4b 100644 --- a/src/module/data/character.mjs +++ b/src/module/data/character.mjs @@ -1,5 +1,12 @@ const { - SchemaField, NumberField, StringField, EmbeddedDocumentField, DocumentIdField, ArrayField, ForeignDocumentField + SchemaField, + NumberField, + StringField, + HTMLField, + EmbeddedDocumentField, + DocumentIdField, + ArrayField, + ForeignDocumentField } = foundry.data.fields; export class PlayerCharacterDataModel extends foundry.abstract.TypeDataModel { @@ -13,16 +20,17 @@ export class PlayerCharacterDataModel extends foundry.abstract.TypeDataModel { professions: new ArrayField(new StringField()), geschlecht: new StringField(), haarfarbe: new StringField(), - groesse: new NumberField({required: true, integer: false}), + groesse: new StringField(), augenfarbe: new StringField(), geburtstag: new StringField(), - alter: new NumberField({required: true, integer: true}), - gewicht: new NumberField({required: true, integer: true}), - aussehen: new ArrayField(new StringField()), - familie: new ArrayField(new StringField()), + alter: new StringField(), + gewicht: new StringField(), + aussehen: new HTMLField(), + familie: new HTMLField(), titel: new StringField(), stand: new StringField(), }), + setEquipped: new NumberField({required: true, initial: 0, max: 3, integer: true}), ini: new SchemaField({ aktuell: new NumberField({required: true, integer: true, initial: 0}), mod: new NumberField({required: true, integer: true, initial: 0}), @@ -47,6 +55,11 @@ export class PlayerCharacterDataModel extends foundry.abstract.TypeDataModel { aktuell: new NumberField({required: true, integer: true, initial: 0}), mod: new NumberField({required: true, integer: true}), }), + gs: new SchemaField({ + aktuell: new NumberField({required: true, integer: true, initial: 0}), + mod: new NumberField({required: true, integer: true}), + }), + ws: new NumberField({required: true, integer: true, initial: 0}), attribute: new SchemaField({ mu: new SchemaField({ start: new NumberField({required: true, integer: true}), @@ -107,23 +120,7 @@ export class PlayerCharacterDataModel extends foundry.abstract.TypeDataModel { }), gilde: new StringField(), }), - vornachteile: new ArrayField(new SchemaField({ - vornachteil: new DocumentIdField(Item), - wert: new NumberField({required: false, integer: true}), - })), - sonderfertigkeiten: new ArrayField(new SchemaField({ - name: new StringField(), - auswahlen: new ArrayField(new StringField()), - })), - talente: new ArrayField(new DocumentIdField(Item)), - zauber: new ArrayField(new SchemaField({ - talent: new DocumentIdField(), - zfw: new NumberField({integer: true, required: true}), - })), - liturgien: new ArrayField(new SchemaField({ - name: new StringField(), - })), kampfwerte: new ArrayField(new SchemaField({ name: new StringField(), at: new NumberField({required: true, integer: true}), @@ -133,7 +130,18 @@ export class PlayerCharacterDataModel extends foundry.abstract.TypeDataModel { key: new StringField(), notiz: new StringField(), })), - + wunden: new SchemaField({ + aktuell: new NumberField({required: true, integer: true}), // only with DSA_4-1.optional_trefferzonen = false + max: new NumberField({required: true, integer: true}), // only with DSA_4-1.optional_trefferzonen = false + mod: new NumberField({required: true, integer: true}), // only with DSA_4-1.optional_trefferzonen = false + armlinks: new NumberField({required: true, integer: true, initial: 0}), + armrechts: new NumberField({required: true, integer: true, initial: 0}), + beinlinks: new NumberField({required: true, integer: true, initial: 0}), + beinrechts: new NumberField({required: true, integer: true, initial: 0}), + bauch: new NumberField({required: true, integer: true, initial: 0}), + brust: new NumberField({required: true, integer: true, initial: 0}), + kopf: new NumberField({required: true, integer: true, initial: 0}), + }), heldenausruestung: new ArrayField( new SchemaField({ links: new DocumentIdField(), @@ -160,27 +168,19 @@ export class PlayerCharacterDataModel extends foundry.abstract.TypeDataModel { _initializeSource(data, options) { if (data.heldenausruestung.length === 0) { let sets = []; - for (let i = 0; i < 3; i++) { - const preppedSet = {} - PlayerCharacterDataModel.getSlots().forEach(slot => { preppedSet[slot] = null; }) - sets.push(preppedSet); - } data.heldenausruestung = sets - } - return super._initializeSource(data, options); } async _onCreate(data, options, userId) { - } static getSlots() { diff --git a/src/module/data/group.mjs b/src/module/data/group.mjs index 8bcbf8af..9786dd34 100644 --- a/src/module/data/group.mjs +++ b/src/module/data/group.mjs @@ -1,5 +1,12 @@ const { - SchemaField, NumberField, StringField, EmbeddedDocumentField, DocumentIdField, ArrayField, ForeignDocumentField + SchemaField, + ObjectField, + NumberField, + StringField, + EmbeddedDocumentField, + DocumentIdField, + ArrayField, + ForeignDocumentField } = foundry.data.fields; export class GroupDataModel extends foundry.abstract.TypeDataModel { @@ -13,7 +20,8 @@ export class GroupDataModel extends foundry.abstract.TypeDataModel { }), characters: new ArrayField( new DocumentIdField(Actor) - ) + ), + settings: new ObjectField(), } } diff --git a/src/module/data/liturgy.mjs b/src/module/data/liturgy.mjs new file mode 100644 index 00000000..87095a4c --- /dev/null +++ b/src/module/data/liturgy.mjs @@ -0,0 +1,49 @@ +import BaseItem from "./base-item.mjs"; + +const {BooleanField, NumberField, SchemaField, ArrayField, StringField, HTMLField} = foundry.data.fields; + +export class LiturgyDataModel extends BaseItem { + + static defineSchema() { + return { + herkunft: new ArrayField(new SchemaField({ + name: new StringField(), + grad: new NumberField(), + })), + grad: new NumberField({min: 1, max: 5}), + reichweite: new StringField(), + ziel: new StringField(), + wirkungsdauer: new StringField(), + auswirkung: new SchemaField({ + I: new StringField(), + II: new StringField(), + III: new StringField(), + IV: new StringField(), + V: new StringField(), + VI: new StringField(), + VII: new StringField(), + VIII: new StringField(), + }) + + } + } + + prepareData() { + } + + /** + * Prepare a data object which is passed to any Roll formulas which are created related to this Item + * @private + */ + getRollData() { + } + + /** + * Handle clickable rolls. + * @param {Event} event The originating click event + * @private + */ + async roll() { + } + +} diff --git a/src/module/data/miracle/liturgydata.mjs b/src/module/data/miracle/liturgydata.mjs new file mode 100644 index 00000000..31732332 --- /dev/null +++ b/src/module/data/miracle/liturgydata.mjs @@ -0,0 +1,115 @@ +export class LiturgyData { + + static ranks = ["I", "II", "III", "IV", "V", "VI", "VII", "VIII"] + + static #ranks = [ + {index: 0, name: "O", lkp: 3, mod: 2, costKaP: 2, costKaPPermant: 0, duration: "{*} KR", strength: "{*}/2"}, + {index: 1, name: "I", lkp: 3, mod: 0, costKaP: 5, costKaPPermant: 0, duration: "{*} KR", strength: "{*}/2"}, + { + index: 2, + name: "II", + lkp: 6, + mod: -2, + costKaP: 10, + costKaPPermant: 0, + duration: "{*}*10 KR", + strength: "{*}/2+5" + }, + {index: 3, name: "III", lkp: 9, mod: -4, costKaP: 15, costKaPPermant: 0, duration: "{*} SR", strength: "{*}+5"}, + { + index: 4, + name: "IV", + lkp: 12, + mod: -6, + costKaP: 20, + costKaPPermant: 0, + duration: "{*} Stunden", + strength: "{*}+10" + }, + { + index: 5, + name: "V", + lkp: 15, + mod: -8, + costKaP: 25, + costKaPPermant: 1, + duration: "{*} Tage", + strength: "{*}+15" + }, + { + index: 6, + name: "VI", + lkp: 18, + mod: -10, + costKaP: 30, + costKaPPermant: 3, + duration: "{*} Wochen", + strength: "{*}+20" + }, + { + index: 7, + name: "VII", + lkp: 21, + mod: -12, + costKaP: 35, + costKaPPermant: 5, + duration: "{*} Monate", + strength: "{*}+25" + }, + { + index: 8, + name: "VIII", + lkp: 24, + mod: -14, + costKaP: 40, + costKaPPermant: 7, + duration: "{*} Jahre oder permanent", + casttime: "", + strength: "{*}+30" + }, + ]; + + static alverans = [ + "Praios", + "Rondra", + "Efferd", + "Travia", + "Boron", + "Hesinde", + "Firun", + "Tsa", + "Phex", + "Peraine", + "Ingerimm", + "Rahja" + ] + + static #aliases = [ + { + "originalName": "Handwerkssegen", + "aliases": ["Cereborns Handreichung", "Hauch der Leidenschaft"] + }, + { + "originalName": "Heiliger Befehl", + "aliases": ["Wort der Wahrheit"], + }, + { + "originalName": "Eidsegen", + "aliases": ["Lehnseid"], + } + ] + + static getRankOfLiturgy(liturgy, deity) { + const lookupData = liturgy.herkunft.find(p => p.name === deity) + const rank = lookupData?.grad; + return LiturgyData.#ranks[rank]; + } + + static lookupAlias(alias) { + return LiturgyData.#aliases.find((entry) => { + console.log(alias, entry.aliases.indexOf(alias) !== -1) + return entry.aliases.indexOf(alias) !== -1 + })?.originalName ?? alias; // cant determine thus simply return the original query name + } + +} diff --git a/src/module/data/skill.mjs b/src/module/data/skill.mjs index c07580c2..6c41045d 100644 --- a/src/module/data/skill.mjs +++ b/src/module/data/skill.mjs @@ -10,7 +10,7 @@ export class SkillDataModel extends BaseItem { gruppe: new StringField({required: true}), taw: new NumberField({integer: true, initial: 0}), at: new NumberField({required: false, integer: true, initial: 0}), - pa: new NumberField({required: false, integer: true, initial: 0}), + pa: new NumberField({required: false, integer: true, nullable: true, initial: 0}), probe: new ArrayField(new StringField(), {exact: 3}), // References one of the eight attributes by name voraussetzung: new SchemaField({ talent: new StringField({model: SkillDataModel}), @@ -41,25 +41,25 @@ export class SkillDataModel extends BaseItem { * @private */ async roll() { - console.log(this.parent) - let roll1 = new Roll("3d20", this.actor.getRollData()); + const owner = this.parent.parent + let roll1 = new Roll("3d20", owner.getRollData()); let evaluated1 = (await roll1.evaluate()) const dsaDieRollEvaluated = this._evaluateRoll(evaluated1.terms[0].results, { - taw: dataset.taw, - werte: [this.system.probe[0], this.system.probe[1], this.system.probe[2]], + taw: this.taw, + werte: [this.probe[0], this.probe[1], this.probe[2]], }) if (dsaDieRollEvaluated.tap >= 0) { // erfolg evaluated1.toMessage({ - speaker: ChatMessage.getSpeaker({actor: this.actor}), + speaker: ChatMessage.getSpeaker({actor: owner}), flavor: ` ${dsaDieRollEvaluated.meisterlich ? 'Meisterlich geschafft' : 'Geschafft'} mit ${dsaDieRollEvaluated.tap} Punkten übrig`, rollMode: game.settings.get('core', 'rollMode'), }) } else { // misserfolg evaluated1.toMessage({ - speaker: ChatMessage.getSpeaker({actor: this.actor}), + speaker: ChatMessage.getSpeaker({actor: owner}), flavor: ` ${dsaDieRollEvaluated.meisterlich ? 'Gepatzt' : ''} mit ${Math.abs(dsaDieRollEvaluated.tap)} Punkten daneben`, rollMode: game.settings.get('core', 'rollMode'), }) diff --git a/src/module/data/specialAbility.mjs b/src/module/data/specialAbility.mjs new file mode 100644 index 00000000..cd143ca6 --- /dev/null +++ b/src/module/data/specialAbility.mjs @@ -0,0 +1,12 @@ +import BaseItem from "./base-item.mjs"; + +const {BooleanField, NumberField, SchemaField, ArrayField, StringField, HTMLField} = foundry.data.fields; + +export class SpecialAbilityDataModel extends BaseItem { + + static defineSchema() { + return { + name: new StringField() + } + } +} diff --git a/src/module/data/spell.mjs b/src/module/data/spell.mjs index 1ef17008..31ec11cc 100644 --- a/src/module/data/spell.mjs +++ b/src/module/data/spell.mjs @@ -7,9 +7,11 @@ export class SpellDataModel extends BaseItem { static defineSchema() { return { seite: new NumberField(), + zfw: new NumberField(), name: new StringField({required: true}), probe: new ArrayField(new StringField(), {required: true, exact: 3}), probeMod: new StringField(), + hauszauber: new BooleanField(), technik: new StringField(), zauberdauer: new StringField(), wirkung: new StringField(), diff --git a/src/module/dialog/modify-liturgy.mjs b/src/module/dialog/modify-liturgy.mjs new file mode 100644 index 00000000..7228e3a8 --- /dev/null +++ b/src/module/dialog/modify-liturgy.mjs @@ -0,0 +1,89 @@ +import {LiturgyData} from "../data/miracle/liturgydata.mjs"; + +export class ModifyLiturgy { + + static data = {} + static naming = { + "range": "Reichweite", + "strength": "Wirkung", + "target": "Ziele", + "castduration": "Wirkzeit", + "duration": "Wirkdauer" + } + + constructor(data) { + ModifyLiturgy.data = data; + ModifyLiturgy.data.maxmods = Math.round(data.lkp / 3); + ModifyLiturgy.data.variation = null; + console.log("ModifyLiturgy constructed", data) + } + + static renderMods(html) { + + let result = ''; + + ModifyLiturgy.data.mods.forEach(((mod, index) => { + + result += `${LiturgyData.ranks[mod.rank]}${ModifyLiturgy.naming[mod.mod]}` + })) + + return result; + + } + + handleRender(html) { + + + html.off('click', 'input[name="data.variation"]') + html.on('click', 'input[name="data.variation"]', (evt) => { + if (evt.currentTarget.checked) { + ModifyLiturgy.data.variation = evt.currentTarget.dataset['rank']; + ModifyLiturgy.data.mods = []; + } + this.render(html) + }) + html.off('click', 'button[class="remove-mod"]') + html.on('click', 'button[class="remove-mod"]', (evt) => { + const {index} = evt.currentTarget.dataset; + ModifyLiturgy.data.mods.splice(index, 1); + this.render(html) + }) + html.off('change', 'select[name="mod"]') + html.on('change', 'select[name="mod"]', (evt) => { + const value = evt.currentTarget.value; + if (value === '') return; + const currentRank = ModifyLiturgy.data.mods.length + Number(ModifyLiturgy.data.rank); + ModifyLiturgy.data.mods.push({ + rank: currentRank, + mod: value, + }); + evt.currentTarget.value = ""; + this.render(html) + }) + + // render state + $('#mods', html).html(ModifyLiturgy.renderMods(html)) + + + // state handling + + if (ModifyLiturgy.data.mods.length === ModifyLiturgy.data.maxmods) { + $(".editor, .editor *", html).attr('disabled', 'disabled'); + $(".editor select", html).hide(); + $('span#info', html).text('LkW lässt keine weitere Modifikationen zu') + $("#mod_rank", html).text(LiturgyData.ranks[ModifyLiturgy.data.mods.length + Number(ModifyLiturgy.data.rank)]); + } else if (ModifyLiturgy.data.variation == null) { + $(".editor select *", html).attr('disabled', 'disabled'); + $(".editor select", html).hide(); + $('span#info', html).text('Keine Variante ausgewählt') + $("#mod_rank", html).text(''); + } else { + $(".editor, .editor *", html).removeAttr('disabled'); + $(".editor select", html).show(); + $('span#info', html).text('') + $("#mod_rank", html).text(''); + } + + } + +} diff --git a/src/module/documents/blessing.mjs b/src/module/documents/blessing.mjs new file mode 100644 index 00000000..e4e5a298 --- /dev/null +++ b/src/module/documents/blessing.mjs @@ -0,0 +1,9 @@ +export class Blessing extends Item { + /** + * Augment the basic Item data model with additional dynamic data. + */ + prepareData() { + super.prepareData(); + } + +} diff --git a/src/module/documents/character.mjs b/src/module/documents/character.mjs index 0a29ef58..eb1cfc8c 100644 --- a/src/module/documents/character.mjs +++ b/src/module/documents/character.mjs @@ -1,4 +1,6 @@ import {importCharacter} from "../xml-import/xml-import.mjs"; +import {LiturgyData} from "../data/miracle/liturgydata.mjs"; +import {Zonenruestung, Zonenwunde} from "../data/Trefferzone.js"; export class Character extends Actor { @@ -27,27 +29,185 @@ export class Character extends Actor { const actorData = this; const systemData = actorData.system; + systemData.attribute.mu.aktuell = systemData.attribute.mu.start + systemData.attribute.mu.mod; + systemData.attribute.kl.aktuell = systemData.attribute.kl.start + systemData.attribute.kl.mod; + systemData.attribute.in.aktuell = systemData.attribute.in.start + systemData.attribute.in.mod; + systemData.attribute.ch.aktuell = systemData.attribute.ch.start + systemData.attribute.ch.mod; + + systemData.attribute.ff.aktuell = systemData.attribute.ff.start + systemData.attribute.ff.mod; + systemData.attribute.ge.aktuell = systemData.attribute.ge.start + systemData.attribute.ge.mod; + systemData.attribute.ko.aktuell = systemData.attribute.ko.start + systemData.attribute.ko.mod; + systemData.attribute.kk.aktuell = systemData.attribute.kk.start + systemData.attribute.kk.mod; + const mu = systemData.attribute.mu.aktuell; const kl = systemData.attribute.kl.aktuell; const _in = systemData.attribute.in.aktuell; const ch = systemData.attribute.ch.aktuell; - const ff = systemData.attribute.ff.aktuell; const ge = systemData.attribute.ge.aktuell; - const ko = systemData.attribute.kk.aktuell; + const ko = systemData.attribute.ko.aktuell; const kk = systemData.attribute.kk.aktuell; - systemData.lep.max = Math.round((ko + ko + kk) / 2) + systemData.lep.mod; systemData.aup.max = Math.round((mu + ko + ge) / 2) + systemData.aup.mod; systemData.asp.max = Math.round((mu + _in + ch) / 2) + systemData.asp.mod; - systemData.at = Math.round((mu + ge + kk) / 5); - systemData.pa = Math.round((_in + ge + kk) / 5); - systemData.fk = Math.round((_in + ff + kk) / 5); - systemData.ini.aktuell = Math.round((mu + mu + _in + ge) / 5) + systemData.ini.mod; - systemData.mr.aktuell = Math.round((mu + kl + ko) / 5) + systemData.mr.mod; + systemData.at = systemData.at ?? {links: {}, rechts: {}} + systemData.at.links = systemData.at.links ?? { + aktuell: 0, + mods: 0 + } + systemData.at.rechts = systemData.at.rechts ?? { + aktuell: 0, + mods: 0 + } + systemData.at.basis = Math.round((mu + ge + kk) / 5) + systemData.at.aktuell = systemData.at.basis + (systemData.at.mod ?? 0); + systemData.at.links.aktuell = systemData.at.basis + (systemData.at.links.mod ?? 0); + systemData.at.rechts.aktuell = systemData.at.basis + (systemData.at.rechts.mod ?? 0); + systemData.pa = systemData.pa ?? {links: {}, rechts: {}} + systemData.pa.links = systemData.pa.links ?? { + aktuell: 0, + mods: 0 + } + systemData.pa.rechts = systemData.pa.rechts ?? { + aktuell: 0, + mods: 0 + } + systemData.pa.basis = Math.round((_in + ge + kk) / 5); + systemData.pa.aktuell = systemData.pa.basis + (systemData.pa.mod ?? 0); + systemData.pa.links.aktuell = systemData.pa.basis + (systemData.pa.links.mod ?? 0); + systemData.pa.rechts.aktuell = systemData.pa.basis + (systemData.pa.links.mod ?? 0); + systemData.fk = systemData.fk ?? { + aktuell: 0, + mods: 0 + } + systemData.fk.basis = Math.round((_in + ff + kk) / 5); + systemData.fk.aktuell = systemData.fk.basis + (systemData.fk.mod ?? 0); + + systemData.ini.basis = Math.round((mu + mu + _in + ge) / 5) + systemData.ini.aktuell = systemData.ini.basis + (systemData.ini.mod ?? 0); + systemData.mr.basis = Math.round((mu + kl + ko) / 5) + systemData.mr.aktuell = systemData.mr.basis + (systemData.mr.mod ?? 0); + systemData.gs.basis = 6; + systemData.gs.aktuell = systemData.gs.basis + (systemData.gs.mod ?? 0); // TOOD: get GS from species + + + if (game.settings.get("DSA_4-1", "optional_ruestungzonen")) { + systemData.rs = { + brust: 0, + bauch: 0, + armlinks: 0, + armrechts: 0, + beinlinks: 0, + beinrechts: 0, + kopf: 0, + }; // only with DSA_4-1.optional_trefferzonen = true + } else { + systemData.rs = 0; // only with DSA_4-1.optional_trefferzonen = false + } + systemData.be = 0; + + + // half KO is the maximum a character can sustain wounds before collapsing + systemData.wunden.max = ko / 2; + if (game.settings.get("DSA_4-1", "optional_trefferzonen")) { + systemData.wunden.kopf = 0; + systemData.wunden.brust = 0; + systemData.wunden.bauch = 0; + systemData.wunden.armlinks = 0; + systemData.wunden.armrechts = 0; + systemData.wunden.beinlinks = 0; + systemData.wunden.beinrechts = 0; + } + + systemData.ws = ko / 2; + + // map current set to RS and BE + + const ausruestung = systemData.heldenausruestung[systemData.setEquipped]; + if (ausruestung) { + if (ausruestung.brust) { + systemData.be += systemData.parent.items.get(ausruestung.brust).system.armorHandicap ?? 0 + if (game.settings.get("DSA_4-1", "optional_ruestungzonen")) { + systemData.rs.brust = systemData.parent.items.get(ausruestung.brust).system.armorValue ?? 0 + } else { + systemData.rs += systemData.parent.items.get(ausruestung.brust).system.armorValue ?? 0 + } + } + if (ausruestung.bauch) { + systemData.be += systemData.parent.items.get(ausruestung.bauch).system.armorHandicap ?? 0 + if (game.settings.get("DSA_4-1", "optional_ruestungzonen")) { + systemData.rs.bauch = systemData.parent.items.get(ausruestung.bauch).system.armorValue ?? 0 + } else { + systemData.rs += systemData.parent.items.get(ausruestung.bauch).system.armorValue ?? 0 + } + } + if (ausruestung.ruecken) { + systemData.be += systemData.parent.items.get(ausruestung.ruecken).system.armorHandicap ?? 0 + if (game.settings.get("DSA_4-1", "optional_ruestungzonen")) { + // ruecken is not a valid trefferzone + } else { + systemData.rs += systemData.parent.items.get(ausruestung.ruecken).system.armorValue ?? 0 + } + } + if (ausruestung.armlinks) { + systemData.be += systemData.parent.items.get(ausruestung.armlinks).system.armorHandicap ?? 0 + if (game.settings.get("DSA_4-1", "optional_ruestungzonen")) { + systemData.rs.armlinks = systemData.parent.items.get(ausruestung.armlinks).system.armorValue ?? 0 + } else { + systemData.rs += systemData.parent.items.get(ausruestung.armlinks).system.armorValue ?? 0 + } + } + if (ausruestung.armrechts) { + systemData.be += systemData.parent.items.get(ausruestung.armrechts).system.armorHandicap ?? 0 + if (game.settings.get("DSA_4-1", "optional_ruestungzonen")) { + systemData.rs.armrechts = systemData.parent.items.get(ausruestung.armrechts).system.armorValue ?? 0 + } else { + systemData.rs += systemData.parent.items.get(ausruestung.armrechts).system.armorValue ?? 0 + } + } + if (ausruestung.beinlinks) { + systemData.be += systemData.parent.items.get(ausruestung.beinlinks).system.armorHandicap ?? 0 + if (game.settings.get("DSA_4-1", "optional_ruestungzonen")) { + systemData.rs.beinlinks = systemData.parent.items.get(ausruestung.beinlinks).system.armorValue ?? 0 + } else { + systemData.rs += systemData.parent.items.get(ausruestung.beinlinks).system.armorValue ?? 0 + } + } + if (ausruestung.beinrechts) { + systemData.be += systemData.parent.items.get(ausruestung.beinrechts).system.armorHandicap ?? 0 + if (game.settings.get("DSA_4-1", "optional_ruestungzonen")) { + systemData.rs.beinrechts = systemData.parent.items.get(ausruestung.beinrechts).system.armorValue ?? 0 + } else { + systemData.rs += systemData.parent.items.get(ausruestung.beinrechts).system.armorValue ?? 0 + } + } + if (ausruestung.kopf) { + systemData.be += systemData.parent.items.get(ausruestung.kopf).system.armorHandicap ?? 0 + if (game.settings.get("DSA_4-1", "optional_ruestungzonen")) { + systemData.rs.kopf = systemData.parent.items.get(ausruestung.kopf).system.armorValue ?? 0 + } else { + systemData.rs += systemData.parent.items.get(ausruestung.kopf).system.armorValue ?? 0 + } + } + } + + + systemData.kap.max = 0; + + // evaluate deities for KaP + + const deities = systemData.parent.items.filter(p => p.type === "Blessing") + deities?.forEach((deity) => { + if (LiturgyData.alverans.includes(deity.system.gottheit)) { + systemData.kap.max = 24; + } else if (systemData.kap.max === 0) { + systemData.kap.max += 12; + } + }, 0) + } @@ -84,4 +244,62 @@ export class Character extends Actor { return data; } + + /** + * + * @param amount + * @param zone either null or one of + * @returns {Promise} + */ + async takeDamage(amount = null, zone = null) { + + this.prepareDerivedData() + + const playWithZoneArmor = game.settings.get("DSA_4-1", "optional_ruestungzonen") + const playWithWoundZones = game.settings.get("DSA_4-1", "optional_trefferzonen") + const previousLeP = this.system.lep.aktuell; + + if (amount == null) { + // TODO show Dialog for entering damage amount (TP) + } + + let armorReduction = 0 + let setEquipped = this.system.setEquipped + let woundThreshold = this.system.ws + + if (playWithZoneArmor) { + const armorId = this.system.heldenausruestung[setEquipped][Zonenruestung[zone]] + const zoneArmor = await this.items.find(p => p._id === armorId) + if (!zoneArmor) { + return console.error(`zone "${zone}" is not a valid value`) + } + armorReduction = zoneArmor.system.armorValue ?? 0 + } else { + armorReduction = this.system.rs + } + + let damage = amount - armorReduction + let wounds = damage / woundThreshold + + let wound = null + + if (playWithWoundZones) { + wound = await game.packs.get("DSA_4-1.Wounds").index.find(p => p.name === Zonenwunde[zone]) + if (!wound) { + return console.error(`Wunden Dokument zu "${zone}" konnten nicht gefunden werden`) + } + } else { + wound = await game.packs.get("DSA_4-1.Wounds").index.find(p => p.name === Wunde) + if (!wound) { + return console.error(`Wunden Dokument zu "${Wunde}" konnten nicht gefunden werden`) + } + } + + // TODO this doesnt work yet, wound documents wont get expanded + + for (let i = 0; i < wounds; i++) { + await this.createEmbeddedDocuments('Item', [wound]) + } + await this.update({system: {lep: {aktuell: previousLeP - damage}}}) + } } diff --git a/src/module/documents/liturgy.mjs b/src/module/documents/liturgy.mjs new file mode 100644 index 00000000..ff491d35 --- /dev/null +++ b/src/module/documents/liturgy.mjs @@ -0,0 +1,9 @@ +export class Liturgy extends Item { + /** + * Augment the basic Item data model with additional dynamic data. + */ + prepareData() { + super.prepareData(); + } + +} diff --git a/src/module/documents/specialAbility.mjs b/src/module/documents/specialAbility.mjs new file mode 100644 index 00000000..f3d30692 --- /dev/null +++ b/src/module/documents/specialAbility.mjs @@ -0,0 +1,9 @@ +export class SpecialAbility extends Item { + /** + * Augment the basic Item data model with additional dynamic data. + */ + prepareData() { + super.prepareData(); + } + +} diff --git a/src/module/sheets/ActiveEffectSheet.mjs b/src/module/sheets/ActiveEffectSheet.mjs new file mode 100644 index 00000000..99211ed2 --- /dev/null +++ b/src/module/sheets/ActiveEffectSheet.mjs @@ -0,0 +1,44 @@ +export class ActiveEffectSheet extends ItemSheet { + /**@override */ + static get defaultOptions() { + return foundry.utils.mergeObject(super.defaultOptions, { + classes: ['dsa41', 'sheet', 'activeeffect'], + width: 520, + height: 480 + }); + } + + /** @override */ + get template() { + return `systems/DSA_4-1/templates/item/item-activeeffect-sheet.hbs`; + } + + /** @override */ + getData() { + // Retrieve the data structure from the base sheet. You can inspect or log + // the context variable to see the structure, but some key properties for + // sheets are the actor object, the data object, whether or not it's + // editable, the items array, and the effects array. + const context = super.getData(); + const effects = context.document.getEmbeddedCollection("ActiveEffect").contents; + if (effects.length > 0) { + context.effectId = effects[0]._id; + } + + return context; + } + + activateListeners(html) { + super.activateListeners(html); + + // Everything below here is only needed if the sheet is editable + if (!this.isEditable) return; + + html.on('click', '.editEffects', (evt) => { + const {id} = evt.currentTarget.dataset; + const effect = this.object.effects.get(id); + effect.sheet.render(true); + }) + } + +} diff --git a/src/module/sheets/actions/action-manager.mjs b/src/module/sheets/actions/action-manager.mjs index 7c91c6b5..2aa31643 100644 --- a/src/module/sheets/actions/action-manager.mjs +++ b/src/module/sheets/actions/action-manager.mjs @@ -202,11 +202,11 @@ export class ActionManager { ] #hatSonderfertigkeitBeginnendMit(name) { - return this.actor.system.sonderfertigkeiten.find(p => p.name.startsWith(name)) != null + return this.actor.system.sonderfertigkeiten?.find(p => p.name.startsWith(name)) != null } #hatSonderfertigkeit(name) { - return this.actor.system.sonderfertigkeiten.find(p => p.name === name) != null + return this.actor.system.sonderfertigkeiten?.find(p => p.name === name) != null } evaluate() { diff --git a/src/module/sheets/characterSheet.mjs b/src/module/sheets/characterSheet.mjs index f04ee3cb..60176c50 100644 --- a/src/module/sheets/characterSheet.mjs +++ b/src/module/sheets/characterSheet.mjs @@ -1,5 +1,7 @@ import {PlayerCharacterDataModel} from "../data/character.mjs"; import {ActionManager} from "./actions/action-manager.mjs"; +import {LiturgyData} from "../data/miracle/liturgydata.mjs"; +import {ModifyLiturgy} from "../dialog/modify-liturgy.mjs"; export class CharacterSheet extends ActorSheet { /**@override */ @@ -23,25 +25,32 @@ export class CharacterSheet extends ActorSheet { return `systems/DSA_4-1/templates/actor/actor-character-sheet.hbs`; } - /** @override */ - async getData() { - const context = super.getData(); + static onDroppedData(actor, characterSheet, data) { + const uuid = foundry.utils.parseUuid(data.uuid); + const collection = uuid.collection.index ?? uuid.collection; + const document = CharacterSheet.getElementByName(collection, uuid.id); + const { + name, + type + } = document + console.log(name, type) + switch (type) { + case "Skill": + return characterSheet.#handleDroppedSkill(actor, document); // on false cancel this whole operation + case "Advantage": + return characterSheet.#handleDroppedAdvantage(actor, document); + case "ActiveEffect": + return characterSheet.#handleDroppedActiveEffect(actor, document); + case "Equipment": + return characterSheet.#handleDroppedEquipment(actor, document); + case "Liturgy": + return characterSheet.#handleDroppedLiturgy(actor, document); + case "SpecialAbility": + return characterSheet.#handleDroppedSpecialAbility(actor, document); + default: + return false; + } - - // Use a safe clone of the actor data for further operations. - const actorData = context.data; - - // Add the actor's data to context.data for easier access, as well as flags. - context.system = actorData.system; - context.flags = actorData.flags; - - this.#addSkillsToContext(context) - this.#addAdvantagesToContext(context) - this.#addAttributesToContext(context) - this.#addEquipmentsToContext(context) - await this.#addCombatStatistics(context) - this.#addActionsToContext(context) - return context; } static getElementByName(collection, id) { @@ -85,10 +94,22 @@ export class CharacterSheet extends ActorSheet { eigenschaft2: werte[1].name, eigenschaft3: werte[2].name, probe: `(${eigenschaften.join("/")})`, + id: item._id, at: item.system.at, pa: item.system.pa, - id: item._id, + komplexität: item.system.komplexität }; + + if (talentGruppe === "Kampf") { + + if (item.system.pa != null) { // has no parry value so it must be ranged talent (TODO: but it isnt as there can be combatstatistics which has no pa value assigned to) + obj.at = item.system.at + context.derived.at.aktuell + obj.pa = item.system.pa + context.derived.pa.aktuell + } else { + obj.at = item.system.at + context.derived.fk.aktuell + } + } + context.skills[talentGruppe].push(obj); context.flatSkills.push(obj); } @@ -96,56 +117,194 @@ export class CharacterSheet extends ActorSheet { ); } - #addAttributesToContext(context) { + #cleanUpMerkmal(merkmale) { + return merkmale.split(",").map((merkmal) => merkmal.trim()) + } + + /** @override */ + async getData() { + const context = super.getData(); + + + // Use a safe clone of the actor data for further operations. const actorData = context.data; + + // Add the actor's data to context.data for easier access, as well as flags. + context.system = actorData.system; + context.flags = actorData.flags; + context.derived = context.document.system; + context.originalName = actorData.name; + context.name = context.derived.name ?? actorData.name; + context.effects = actorData.effects ?? []; + + context.maxWounds = actorData.system.wunden.max ?? 3; + context.wounds = actorData.system.wunden.aktuell ?? 0; + context.woundsFilled = []; + for (let i = 1; i <= context.maxWounds; i++) { + context.woundsFilled[i] = i <= context.wounds + } + + context.zonenruestung = game.settings.get("DSA_4-1", "optional_ruestungzonen") + context.trefferzonen = game.settings.get("DSA_4-1", "optional_trefferzonen") + context.ausdauer = game.settings.get("DSA_4-1", "optional_ausdauer") + + + this.#addEffectsToContext(context) + this.#addSkillsToContext(context) + this.#addAdvantagesToContext(context) + this.#addSpecialAbilitiesToContext(context) + await this.#addAttributesToContext(context) + this.#addEquipmentsToContext(context) + await this.#addCombatStatistics(context) + this.#addActionsToContext(context) + this.#addSpellsToContext(context) + this.#addLiturgiesToContext(context) + return context; + } + + #addEffectsToContext(context) { + const actorData = context.data; + + context.isGM = game.user.isGM + context.effects = []; + Object.values(actorData.items).forEach((item, index) => { + if (item.type === "ActiveEffect") { + const effect = item.effects[0]; + const conditions = [] + + if (effect) { + effect.changes.forEach(change => { + if (change.key.indexOf("wunden") === -1) { + const key = change.key + .replace(/system\./g, "") + .replace(/\.mod/g, "") + .replace(/attribute./g, "") + .replace(/.links/g, "(Links)") + .replace(/.rechts/g, "(Rechts)") + const value = Number(change.value) > 0 ? "+" + change.value : change.value; + conditions.push( + `${key}${value}` + ) + } + }) + } + + context.effects.push({ + name: item.name, + conditions: conditions.join(" "), + id: item._id, + actor: actorData._id + }); + } + }) + } + + #addSpellsToContext(context) { + const actorData = context.data; + context.spells = []; + Object.values(actorData.items).forEach((item, index) => { + if (item.type === "Spell") { + const eigenschaften = item.system.probe; + const werte = [ + {name: eigenschaften[0], value: this.prepareEigenschaftRoll(actorData, eigenschaften[0])}, + {name: eigenschaften[1], value: this.prepareEigenschaftRoll(actorData, eigenschaften[1])}, + {name: eigenschaften[2], value: this.prepareEigenschaftRoll(actorData, eigenschaften[2])} + ] + context.spells.push({ + id: item._id, + name: item.name, + zfw: item.system.zfw, + hauszauber: item.system.hauszauber, + merkmal: this.#cleanUpMerkmal(item.system.merkmal), + rollEigenschaft1: werte[0].value, + rollEigenschaft2: werte[1].value, + rollEigenschaft3: werte[2].value, + eigenschaft1: werte[0].name, + eigenschaft2: werte[1].name, + eigenschaft3: werte[2].name, + }) + } + }) + context.hasSpells = context.spells.length > 0; + } + + async #getModsOfAttribute(keyPath) { + let returnValue = []; + Array.from(this.object.appliedEffects).forEach( + (e) => + e.changes.filter(c => c.key === keyPath).forEach(change => { + returnValue.push({ + name: e.name, + value: change.value > 0 ? "+" + change.value : "" + change.value, + icon: e.icon, + }) + })) + return returnValue; + } + + async #addAttributesToContext(context) { + context.mods = { + "mu": await this.#getModsOfAttribute('system.attribute.mu.mod'), + "kl": await this.#getModsOfAttribute('system.attribute.kl.mod'), + "in": await this.#getModsOfAttribute('system.attribute.in.mod'), + "ch": await this.#getModsOfAttribute('system.attribute.ch.mod'), + "ff": await this.#getModsOfAttribute('system.attribute.ff.mod'), + "ge": await this.#getModsOfAttribute('system.attribute.ge.mod'), + "ko": await this.#getModsOfAttribute('system.attribute.ko.mod'), + "kk": await this.#getModsOfAttribute('system.attribute.kk.mod'), + "at": await this.#getModsOfAttribute('system.at.mod'), + "pa": await this.#getModsOfAttribute('system.pa.mod'), + "fk": await this.#getModsOfAttribute('system.fk.mod'), + + } context.attributes = [ { eigenschaft: "mu", name: "MU", tooltip: "Mut", - wert: actorData.system.attribute.mu.aktuell ?? 0, + wert: context.derived.attribute.mu.aktuell ?? 0, }, { eigenschaft: "kl", name: "KL", tooltip: "Klugheit", - wert: actorData.system.attribute.kl.aktuell ?? 0, + wert: context.derived.attribute.kl.aktuell ?? 0, }, { eigenschaft: "in", name: "IN", tooltip: "Intuition", - wert: actorData.system.attribute.in.aktuell ?? 0, + wert: context.derived.attribute.in.aktuell ?? 0, }, { eigenschaft: "ch", name: "CH", tooltip: "Charisma", - wert: actorData.system.attribute.ch.aktuell ?? 0, + wert: context.derived.attribute.ch.aktuell ?? 0, }, { eigenschaft: "ff", name: "FF", tooltip: "Fingerfertigkeit", - wert: actorData.system.attribute.ff.aktuell ?? 0, + wert: context.derived.attribute.ff.aktuell ?? 0, }, { eigenschaft: "ge", name: "GE", tooltip: "Geschicklichkeit", - wert: actorData.system.attribute.ge.aktuell ?? 0, + wert: context.derived.attribute.ge.aktuell ?? 0, }, { eigenschaft: "ko", name: "KO", tooltip: "Konstitution", - wert: actorData.system.attribute.ko.aktuell ?? 0, + wert: context.derived.attribute.ko.aktuell ?? 0, }, { eigenschaft: "kk", name: "KK", tooltip: "Körperkraft", - wert: actorData.system.attribute.kk.aktuell ?? 0, + wert: context.derived.attribute.kk.aktuell ?? 0, }, ]; @@ -169,12 +328,22 @@ export class CharacterSheet extends ActorSheet { ); } - #findEquipmentOnSlot(slot, setNumber) { - return this.object.items.get(this.object.system.heldenausruestung[setNumber][slot]) + #addSpecialAbilitiesToContext(context) { + context.specialAbilities = []; + const actorData = context.data; + Object.values(actorData.items).forEach((item) => { + if (item.type === "SpecialAbility") { + context.specialAbilities.push({ + id: item._id, + name: item.name, + }); + } + } + ); } - #findTalentsOfEquipment(equipment) { - + #findEquipmentOnSlot(slot, setNumber) { + return this.object.items.get(this.object.system.heldenausruestung[setNumber]?.[slot]) } #addActionsToContext(context) { @@ -182,14 +351,16 @@ export class CharacterSheet extends ActorSheet { context.actions = am.evaluate() } - #isWorn(itemId, setId) { + #isWorn(itemId) { const slots = PlayerCharacterDataModel.getSlots() - const set = this.object.system.heldenausruestung[setId] - for (const slot of slots) { - const equipmentSlotId = set[slot] - if (equipmentSlotId === itemId) { - return slot + const set = this.object.system.heldenausruestung[this.object.system.setEquipped] + if (set) { + for (const slot of slots) { + const equipmentSlotId = set[slot] + if (equipmentSlotId === itemId) { + return slot + } } } @@ -205,25 +376,28 @@ export class CharacterSheet extends ActorSheet { context.aupper = Math.min((context.actor.system.aup.aktuell / context.actor.system.aup.max) * 100, 100); context.lepper = Math.min((context.actor.system.lep.aktuell / context.actor.system.lep.max) * 100, 100); + context.keper = Math.min((context.actor.system.kap.aktuell / context.actor.system.kap.max) * 100, 100); + context.aspper = Math.min((context.actor.system.asp.aktuell / context.actor.system.asp.max) * 100, 100); context.lepcurrent = context.actor.system.lep.aktuell ?? 0 context.aupcurrent = context.actor.system.aup.aktuell ?? 0 - const fernkampf = this.#findEquipmentOnSlot("fernkampf", 0) - const links = this.#findEquipmentOnSlot("links", 0) - const rechts = this.#findEquipmentOnSlot("rechts", 0) + const fernkampf = this.#findEquipmentOnSlot("fernkampf", context.actor.system.setEquipped) + const links = this.#findEquipmentOnSlot("links", context.actor.system.setEquipped) + const rechts = this.#findEquipmentOnSlot("rechts", context.actor.system.setEquipped) context.attacks = []; if (fernkampf) { const fkitems = fernkampf.system.rangedSkills.map(async (skillInQuestion) => await this.object.items.getName(skillInQuestion)) fkitems.forEach(async skill => { const obj = await skill - console.log(this.object.system.fk, obj.system.at); context.attacks.push({ name: obj.name, using: fernkampf.name, - atroll: `1d20 + ${this.object.system.fk + obj.system.at}`, - at: `1w20 + ${this.object.system.fk + obj.system.at}`, + atroll: `1d20cs<${this.object.system.fk.aktuell + obj.system.at}`, + at: `${this.object.system.fk.aktuell + obj.system.at}`, + tproll: `${fernkampf.system.rangedAttackDamage}`, // TODO consider adding TP/KK mod and Range mod + tp: `${fernkampf.system.rangedAttackDamage}`, iniroll: `(${context.inidice})d6 + ${context.inivalue + fernkampf.system.iniModifier ?? 0}`, ini: `${context.inidice}w6 + ${context.inivalue + fernkampf.system.iniModifier ?? 0}`, }) @@ -236,10 +410,12 @@ export class CharacterSheet extends ActorSheet { context.attacks.push({ name: obj.name, using: links.name, - atroll: `1d20 + ${this.object.system.at + obj.system.at + links.system.attackModifier}`, - at: `1w20 + ${this.object.system.at + obj.system.at + links.system.attackModifier}`, - paroll: `1d20 + ${this.object.system.pa + obj.system.pa + links.system.parryModifier}`, - pa: `1w20 + ${this.object.system.pa + obj.system.pa + links.system.parryModifier}`, + atroll: `1d20cs<${this.object.system.at.links.aktuell + obj.system.at + links.system.attackModifier}`, // TODO consider adding W/M + at: `${this.object.system.at.links.aktuell + obj.system.at + links.system.attackModifier}`, + paroll: `1d20cs<${this.object.system.pa.links.aktuell + obj.system.pa + links.system.parryModifier}`, // TODO consider adding W/M + pa: `${this.object.system.pa.links.aktuell + obj.system.pa + links.system.parryModifier}`, + tproll: `${links.system.meleeAttackDamage}`, // TODO consider adding TP/KK mod + tp: `${links.system.meleeAttackDamage}`, iniroll: `(${context.inidice})d6 + ${context.inivalue + links.system.iniModifier ?? 0}`, ini: `${context.inidice}w6 + ${context.inivalue + links.system.iniModifier ?? 0}`, }) @@ -253,10 +429,12 @@ export class CharacterSheet extends ActorSheet { context.attacks.push({ name: obj.name, using: rechts.name, - atroll: `1d20 + ${this.object.system.at + obj.system.at + rechts.system.attackModifier}`, - at: `1w20 + ${this.object.system.at + obj.system.at + rechts.system.attackModifier}`, - paroll: `1d20 + ${this.object.system.pa + obj.system.pa + rechts.system.parryModifier}`, - pa: `1w20 + ${this.object.system.pa + obj.system.pa + rechts.system.parryModifier}`, + atroll: `1d20cs<${this.object.system.at.rechts.aktuell + obj.system.at + rechts.system.attackModifier}`, // TODO consider adding W/M + at: `${this.object.system.at.rechts.aktuell + obj.system.at + rechts.system.attackModifier}`, + paroll: `1d20cs<${this.object.system.pa.rechts.aktuell + obj.system.pa + rechts.system.parryModifier}`, // TODO consider adding W/M + pa: `${this.object.system.pa.rechts.aktuell + obj.system.pa + rechts.system.parryModifier}`, + tproll: `${rechts.system.meleeAttackDamage}`, // TODO consider adding TP/KK mod + tp: `${rechts.system.meleeAttackDamage}`, iniroll: `(${context.inidice})d6 + ${context.inivalue + rechts.system.iniModifier ?? 0}`, ini: `${context.inidice}w6 + ${context.inivalue + rechts.system.iniModifier ?? 0}`, }) @@ -267,7 +445,7 @@ export class CharacterSheet extends ActorSheet { } prepareEigenschaftRoll(actorData, name) { - if (name) { + if (name && name !== "*") { return actorData.system.attribute[name.toLowerCase()].aktuell } else { return 0 @@ -280,16 +458,24 @@ export class CharacterSheet extends ActorSheet { context.carryingweight = 0; Object.values(actorData.items).forEach((item, index) => { if (item.type === "Equipment") { + + // worn items are halved weight + + let effectiveWeight = item.system.weight ?? 0 + if (this.#isWorn(item._id)) { + effectiveWeight = item.system.weight ? item.system.weight / 2 : 0 + } + context.equipments.push({ index: index, id: item._id, quantity: item.system.quantity, name: item.name, icon: item.img ?? "", - weight: item.system.weight ?? 0, - worn: this.#isWorn(item._id, 0) + weight: item.system.weight, + worn: this.#isWorn(item._id) }) - context.carryingweight += item.system.quantity * item.system.weight; + context.carryingweight += item.system.quantity * effectiveWeight; } }) context.maxcarryingcapacity = actorData.system.attribute.kk.aktuell @@ -409,8 +595,6 @@ export class CharacterSheet extends ActorSheet { rollMode: game.settings.get('core', 'rollMode'), }) } - - } } @@ -482,22 +666,23 @@ export class CharacterSheet extends ActorSheet { } } - #getEquipmentset(setId) { - const equipmentSet = this.object.system.heldenausruestung[setId] + #mapAllSets() { const updateObject = {} - // TODO: there's got to be a better angle! - updateObject[`system.heldenausruestung.${setId}.links`] = equipmentSet.links; - updateObject[`system.heldenausruestung.${setId}.rechts`] = equipmentSet.rechts; - updateObject[`system.heldenausruestung.${setId}.brust`] = equipmentSet.brust; - updateObject[`system.heldenausruestung.${setId}.bauch`] = equipmentSet.bauch; - updateObject[`system.heldenausruestung.${setId}.ruecken`] = equipmentSet.ruecken; - updateObject[`system.heldenausruestung.${setId}.kopf`] = equipmentSet.kopf; - updateObject[`system.heldenausruestung.${setId}.fernkampf`] = equipmentSet.fernkampf; - updateObject[`system.heldenausruestung.${setId}.munition`] = equipmentSet.munition; - updateObject[`system.heldenausruestung.${setId}.armlinks`] = equipmentSet.armlinks; - updateObject[`system.heldenausruestung.${setId}.armrechts`] = equipmentSet.armrechts; - updateObject[`system.heldenausruestung.${setId}.beinlinks`] = equipmentSet.beinlinks; - updateObject[`system.heldenausruestung.${setId}.beinrechts`] = equipmentSet.beinrechts; + Array.from(this.object.system.heldenausruestung).forEach((equipmentSet, index) => { + updateObject[`system.heldenausruestung.${index}.links`] = equipmentSet.links; + updateObject[`system.heldenausruestung.${index}.rechts`] = equipmentSet.rechts; + updateObject[`system.heldenausruestung.${index}.brust`] = equipmentSet.brust; + updateObject[`system.heldenausruestung.${index}.bauch`] = equipmentSet.bauch; + updateObject[`system.heldenausruestung.${index}.ruecken`] = equipmentSet.ruecken; + updateObject[`system.heldenausruestung.${index}.kopf`] = equipmentSet.kopf; + updateObject[`system.heldenausruestung.${index}.fernkampf`] = equipmentSet.fernkampf; + updateObject[`system.heldenausruestung.${index}.munition`] = equipmentSet.munition; + updateObject[`system.heldenausruestung.${index}.armlinks`] = equipmentSet.armlinks; + updateObject[`system.heldenausruestung.${index}.armrechts`] = equipmentSet.armrechts; + updateObject[`system.heldenausruestung.${index}.beinlinks`] = equipmentSet.beinlinks; + updateObject[`system.heldenausruestung.${index}.beinrechts`] = equipmentSet.beinrechts; + + }) return updateObject; } @@ -533,13 +718,133 @@ export class CharacterSheet extends ActorSheet { } + #addLiturgiesToContext(context) { + const actorData = context.data; + context.liturgies = []; + context.blessings = []; + + Object.values(actorData.items).forEach((item, index) => { + if (item.type === "Blessing") { + context.blessings.push({ + deity: item.system.gottheit, + value: item.system.wert + }) + } + }) + Object.values(actorData.items).forEach((item, index) => { + if (item.type === "Liturgy") { + + context.blessings.forEach(({deity, value}) => { + let insertObject = context.liturgies.find(p => p.deity === deity); + if (!insertObject) { + insertObject = { + deity: deity, + lkp: value, + O: [], + I: [], + II: [], + III: [], + IV: [], + V: [], + VI: [], + VII: [], + VIII: [], + "NA": [], + countO: 1, + countI: 1, + countII: 1, + countIII: 1, + countIV: 1, + countV: 1, + countVI: 1, + countVII: 1, + countVIII: 1, + countNA: 0, + total: 3, + + } + context.liturgies.push(insertObject); + } + + // sort by rank + const rankData = LiturgyData.getRankOfLiturgy(item.system, deity) + if (rankData) { + let {index, name, lkp, mod, costKaP} = rankData; + + insertObject["count" + name] = insertObject["count" + name] + 1; + + insertObject[name].push({ + id: item._id, + name: item.name, + lkpReq: lkp, + lkpMod: mod, + costKaP, + rank: index, // get effective liturgy rank based on deity + liturgiekenntnis: deity, + }) + insertObject.total = insertObject.total + 2; + + } + }) + } + }) + + + // clean up counter + Object.values(context.liturgies).forEach((litObject) => { + + if (litObject.I.length === 0) litObject.countI = false; + if (litObject.II.length === 0) litObject.countII = false; + if (litObject.III.length === 0) litObject.countIII = false; + if (litObject.IV.length === 0) litObject.countIV = false; + if (litObject.V.length === 0) litObject.countV = false; + if (litObject.VI.length === 0) litObject.countVI = false; + if (litObject.VII.length === 0) litObject.countVII = false; + if (litObject.VIII.length === 0) litObject.countVIII = false; + if (litObject.NA.length === 0) litObject.countNA = false; + + + }) + + context.hasLiturgies = context.blessings.length > 0; + } + + #handleDroppedSkill(actor, skill) { + const array = Array.from(actor.items); + for (let i = 0; i < array.length; i++) { + if (array[i].name === skill.name) { + return false; + } + } + } + + async #handleDroppedActiveEffect(actor, activeEffect) { + const array = Array.from(actor.items); + for (let i = 0; i < array.length; i++) { + if (array[i].name === activeEffect.name) { + // replace active effect if its unique + + return true; + } + } + } + + #handleDroppedAdvantage(actor, advantage) { + const array = Array.from(actor.items); + for (let i = 0; i < array.length; i++) { + if (array[i].name === advantage.name) { // TODO: adjust for uniqueness + return false; + } + } + } + activateListeners(html) { super.activateListeners(html); const tabs = new Tabs({ navSelector: ".paperdoll-tabs.tabs", contentSelector: ".sheet-body.paperdoll-sets", - initial: "set1" + initial: "set" + (this.object.system.setEquipped + 1) }); tabs.bind(html[0]); @@ -547,6 +852,19 @@ export class CharacterSheet extends ActorSheet { this._onAttributeRoll(evt); }); + html.on('click', '[data-operation="switchSet"]', (evt) => { + const {id} = evt.currentTarget.dataset; + console.log(id); + this.object.update({"system.setEquipped": id}) + }) + + html.on('click', '[data-operation="removeEffect"]', (evt) => { + const {actorId, effectId} = evt.currentTarget.dataset; + if (game.user.isGM) { + this.object.items.get(effectId).delete(); + } + }) + html.on('click', '.talent.rollable', (evt) => { this._onTalentRoll(evt); }); @@ -555,21 +873,32 @@ export class CharacterSheet extends ActorSheet { this._onRoll(evt); }); + // TODO: merge into click.clickable handler html.on('click', '.talent .name', (evt) => { this.openEmbeddedDocument(evt.target.dataset.id); evt.stopPropagation(); }) + // TODO: merge into click.clickable handler html.on('click', '.advantage .name', (evt) => { this.openEmbeddedDocument(evt.target.dataset.id); evt.stopPropagation(); }) + // TODO: merge into click.clickable handler html.on('click', '.equipment', (evt) => { this.openEmbeddedDocument(evt.target.parentElement.dataset.id); evt.stopPropagation(); }) + html.on('click', '.clickable', async (evt) => { + const {id, operation} = evt.currentTarget.dataset; + if (operation === "openActorSheet") { + this.openEmbeddedDocument(id); + evt.stopPropagation(); + } + }) + html.on('dragstart', '.equipment', (evt) => { evt.originalEvent.dataTransfer.setData("application/json", JSON.stringify({ documentId: evt.currentTarget.dataset.id @@ -584,7 +913,8 @@ export class CharacterSheet extends ActorSheet { if (actor === this.object._id && documentId) { // managing equipped items //const slot = this.#isWorn(documentId, setId) - const updateObject = this.#getEquipmentset(setId) + //const updateObject = await this.#getEquipmentset(Number(setId)) + const updateObject = this.#mapAllSets() updateObject[`system.heldenausruestung.${setId}.${target}`] = documentId; console.log(updateObject); @@ -619,7 +949,15 @@ export class CharacterSheet extends ActorSheet { } ]); - let handler = ev => this._onDragStart(ev); + let handler = evt => { + const talentId = evt.target.dataset.id + evt.dataTransfer.setData("application/json", JSON.stringify({ + talentId + })); + this._onDragStart(evt) + + } + // Find all items on the character sheet. html.find('.talent.rollable').each((i, li) => { // Add draggable attribute and dragstart listener. @@ -645,7 +983,7 @@ export class CharacterSheet extends ActorSheet { callback: (event) => { const {setId, target, actor} = event[0].dataset - const updateObject = this.#getEquipmentset(setId) + const updateObject = this.#mapAllSets() updateObject[`system.heldenausruestung.${setId}.${target}`] = null; this.object.update(updateObject); @@ -654,57 +992,95 @@ export class CharacterSheet extends ActorSheet { } ]); - } + html.on('click', '[data-operation="addWounds"]', async (evt) => { + const {value} = evt.currentTarget.dataset + this.object.update({"system.wunden.aktuell": value}) + }) - #handleDroppedSkill(actor, skill) { - const array = Array.from(actor.items); - for (let i = 0; i < array.length; i++) { - if (array[i].name === skill.name) { - return false; - } - } - } + html.on('click', '[data-operation="reduceWounds"]', async (evt) => { + const {value} = evt.currentTarget.dataset + this.object.update({"system.wunden.aktuell": value}) + }) - #handleDroppedAdvantage(actor, advantage) { - const array = Array.from(actor.items); - for (let i = 0; i < array.length; i++) { - if (array[i].name === advantage.name) { // TODO: adjust for uniqueness - return false; + html.on('click', '.liturgy.rollable', async (evt) => { + + evt.stopPropagation(); + + const {id, rank, lkp, deity} = evt.currentTarget.dataset; + const document = await this.object.items.get(id) + + const data = {}; + + data.rank = rank; + data.lkp = lkp; + data.deity = deity; + data.variations = []; + const ranks = LiturgyData.ranks + ranks.forEach(rank => { + if (document.system.auswirkung[rank]) { + data.variations.push({ + rank, + effect: document.system.auswirkung[rank] + }) + } + }) + data.mods = []; + + const htmlContent = await renderTemplate('systems/DSA_4-1/templates/dialog/modify-liturgy.hbs', data); + + const dialogData = { + title: document.name, + content: htmlContent, + data: {}, + buttons: { + submit: { + label: "Wirken", + icon: '', + callback: (html) => { + }, + }, + }, } - } + dialogData.render = new ModifyLiturgy(data).handleRender + + const dialog = new Dialog(dialogData, { + classes: ['dsa41', 'dialog', 'liturgy'], + height: 480 + }) + + dialog.render(true); + + return false; + }) + + } #handleDroppedEquipment(actor, equipment) { const array = Array.from(actor.items); for (let i = 0; i < array.length; i++) { if (array[i].name === equipment.name) { // TODO: adjust item quantity if item is the same - console.log(equipment); return false; } } } - static onDroppedData(actor, characterSheet, data) { - const uuid = foundry.utils.parseUuid(data.uuid); - const collection = uuid.collection.index ?? uuid.collection; - const document = CharacterSheet.getElementByName(collection, uuid.id); - const { - name, - type - } = document - console.log(name, type) - switch (type) { - case "Skill": - return characterSheet.#handleDroppedSkill(actor, document); // on false cancel this whole operation - case "Advantage": - return characterSheet.#handleDroppedAdvantage(actor, document); - case "Equipment": - return characterSheet.#handleDroppedEquipment(actor, document); - - default: + #handleDroppedLiturgy(actor, liturgy) { + const array = Array.from(actor.items); + for (let i = 0; i < array.length; i++) { + if (array[i].name === liturgy.name) { // TODO: allow multiple miracles with the same name return false; + } } + } + #handleDroppedSpecialAbility(actor, specialAbility) { + const array = Array.from(actor.items); + for (let i = 0; i < array.length; i++) { + if (array[i].name === specialAbility.name) { // TODO: allow multiple miracles with the same name + return false; + } + } } } diff --git a/src/module/sheets/creatureSheet.mjs b/src/module/sheets/creatureSheet.mjs index a712b187..2c28134d 100644 --- a/src/module/sheets/creatureSheet.mjs +++ b/src/module/sheets/creatureSheet.mjs @@ -72,10 +72,10 @@ export class CreatureSheet extends foundry.appv1.sheets.ActorSheet { }) html.on('click', '.editor .add-attack', async (evt) => { - const name = evt.target.parentElement.querySelector('#attack_name').value - const at = evt.target.parentElement.querySelector('#attack_at').value - const pa = evt.target.parentElement.querySelector('#attack_pa').value - const tp = evt.target.parentElement.querySelector('#attack_tp').value + const name = html[0].querySelector('#attack_name').value + const at = html[0].querySelector('#attack_at').value + const pa = html[0].querySelector('#attack_pa').value + const tp = html[0].querySelector('#attack_tp').value const newAttack = { name, diff --git a/src/module/sheets/groupSheet.mjs b/src/module/sheets/groupSheet.mjs index 11a42caa..7e179037 100644 --- a/src/module/sheets/groupSheet.mjs +++ b/src/module/sheets/groupSheet.mjs @@ -15,6 +15,59 @@ export class GroupSheet extends ActorSheet { }); } + static async onDroppedData(group, sheet, data) { + if (data.type === "Actor") { + const uuid = await foundry.utils.parseUuid(data.uuid); + const character = await (game.actors.get(uuid.id)) + + // check if character already is part of the group + if (group.system.characters.includes(character._id)) { + ui.notifications.warn(`${character.name} befindet sich bereits in der Heldengruppe ${group.name}`) + return false; + } + + + // update group + let settings = {...group.system.settings} + character.items.filter((i) => i.type === "Advantage").forEach((advantage) => { + if (!settings[sheet.#stringToKeyFieldName(advantage.name)]) { + settings[sheet.#stringToKeyFieldName(advantage.name)] = false + } + }) + character.items.filter((i) => i.type === "Skill").forEach((skill) => { + if (!settings[sheet.#stringToKeyFieldName(skill.name)]) { + settings[sheet.#stringToKeyFieldName(skill.name)] = false + } + }) + + await group.update({ + system: { + characters: [ + ...group.system.characters, + character._id + ], + settings: settings + } + }) + ui.notifications.info(`${character.name} ist der Heldengruppe ${group.name} beigetreten`) + } + if (data.type === "Equipment") { + const uuid = await foundry.utils.parseUuid(data.uuid); + const equipment = await (game.actors.get(uuid.id)) + ui.notifications.info(`${equipment.name} befindet sich nun im Inventar der Heldengruppe ${group.name}`) + return true; + } + } + + #stringToKeyFieldName(s) { + return s + } + + /** @override */ + get template() { + return `systems/DSA_4-1/templates/actor/group-sheet.hbs`; + } + /** @override */ async getData() { const context = super.getData(); @@ -25,12 +78,61 @@ export class GroupSheet extends ActorSheet { // Add the actor's data to context.data for easier access, as well as flags. context.system = groupData.system; context.flags = groupData.flags; + context.characters = [] + context.isGM = game.user.isGM; - context.characters = []; + context.fields = []; + + const hiddenFields = Object.entries(groupData.system.settings) + .sort(([key, value], [otherKey, otherValue]) => key.localeCompare(otherKey)) + .filter(([key, value]) => value === true) + .map(([key, value]) => key) + + context.fields = {} + context.fields["head"] = {} + for (const field of hiddenFields) { + + context.fields[field] = {} + + for (const characterId of groupData.system.characters) { + const character = await game.actors.get(characterId) + context.fields[field][character.name] = "-" + + } + } for (const characterId of groupData.system.characters) { const character = await game.actors.get(characterId) - context.characters.push( + + character.items.filter((i) => i.type === "Advantage").filter((i) => hiddenFields.includes(this.#stringToKeyFieldName(i.name))).map((advantage) => { + const n = this.#stringToKeyFieldName(advantage.name) + if (!context.fields[n]) { + context.fields[n] = {} + } + context.fields[n][character.name] = advantage.system.value ?? "Ja" // TODO: Allow GM roll + }) + + character.items.filter((i) => i.type === "Skill").filter((i) => hiddenFields.includes(this.#stringToKeyFieldName(i.name))).map((skill) => { + const n = this.#stringToKeyFieldName(skill.name) + if (!context.fields[n]) { + context.fields[n] = {} + } + const eigenschaften = Object.values(skill.system.probe); + context.fields[n][character.name] = { + taw: skill.system.taw, + eigenschaft1: eigenschaften[0], + eigenschaft2: eigenschaften[1], + eigenschaft3: eigenschaften[2], + rollEigenschaft1: character.system.attribute[eigenschaften[0].toLowerCase()].aktuell, + rollEigenschaft2: character.system.attribute[eigenschaften[1].toLowerCase()].aktuell, + rollEigenschaft3: character.system.attribute[eigenschaften[2].toLowerCase()].aktuell, + name: skill.name, + actor: character._id, + } + ?? 0 + }) + + context.fields.head[character.name] = { img: character.img, name: character.name, @@ -45,28 +147,12 @@ export class GroupSheet extends ActorSheet { {name: "KO", value: character.system.attribute.ko.aktuell}, {name: "KK", value: character.system.attribute.kk.aktuell}, ], - advantages: character.items.filter((i) => i.type === "Advantage").map((advantage) => { - return { - name: advantage.name, - id: advantage._id, - value: advantage.system.value, - } - }), - skills: character.items.filter((i) => i.type === "Skill").map((skill) => { - return { - name: skill.name, - taw: skill.system.taw, - id: skill._id - } - }), isLimited: character.isOwner || !character.limited, isVisible: character.isOwner || character.visible, isOwner: character.isOwner } - ) } - context.equipments = []; const actorData = context.data; Object.values(actorData.items).forEach((item, index) => { @@ -81,48 +167,80 @@ export class GroupSheet extends ActorSheet { } }) + context.settings = Object.fromEntries(Object.entries(groupData.system.settings) + .sort(([key, value], [otherKey, otherValue]) => key.localeCompare(otherKey))) + return await context; } - /** @override */ - get template() { - return `systems/DSA_4-1/templates/actor/group-sheet.hbs`; - } - - static async onDroppedData(group, sheet, data) { - if (data.type === "Actor") { - const uuid = await foundry.utils.parseUuid(data.uuid); - const character = await (game.actors.get(uuid.id)) - // check if character already is part of the group - if (group.system.characters.includes(character._id)) { - ui.notifications.warn(`${character.name} befindet sich bereits in der Heldengruppe ${group.name}`) - return false; - } - - - // update group - await group.update({ - system: { - characters: [ - ...group.system.characters, - character._id - ] - } - }) - ui.notifications.info(`${character.name} ist der Heldengruppe ${group.name} beigetreten`) - } - if (data.type === "Equipment") { - const uuid = await foundry.utils.parseUuid(data.uuid); - const equipment = await (game.actors.get(uuid.id)) - ui.notifications.info(`${equipment.name} befindet sich nun im Inventar der Heldengruppe ${group.name}`) - return true; - } - } - openEmbeddedDocument(documentId) { this.object.items.get(documentId).sheet.render(true) } + + _evaluateRoll(rolledDice, { + taw, + lowerThreshold = 1, + upperThreshold = 20, + countToMeisterlich = 3, + countToPatzer = 3, + werte = [] + }) { + let tap = taw; + let meisterlichCounter = 0; + let patzerCounter = 0; + let failCounter = 0; + + rolledDice.forEach((rolledDie, index) => { + if (tap < 0 && rolledDie.result > werte[index]) { + tap -= rolledDie.result - werte[index]; + if (tap < 0) { // konnte nicht vollständig ausgeglichen werden + failCounter++; + } + } else if (rolledDie.result > werte[index]) { // taw ist bereits aufgebraucht und wert kann nicht ausgeglichen werden + tap -= rolledDie.result - werte[index]; + failCounter++; + } + if (rolledDie.result <= lowerThreshold) meisterlichCounter++; + if (rolledDie.result > upperThreshold) patzerCounter++; + }) + + return { + tap, + meisterlich: meisterlichCounter === countToMeisterlich, + patzer: patzerCounter === countToPatzer, + } + } + + async _onTalentRoll(event) { + event.preventDefault(); + const dataset = event.currentTarget.dataset; + const actor = await game.actors.get(dataset.actorId); + console.log(dataset, actor) + if (dataset.rolleigenschaft1) { + let roll1 = new Roll("3d20", actor.getRollData()); + + let evaluated1 = (await roll1.evaluate()) + + const dsaDieRollEvaluated = this._evaluateRoll(evaluated1.terms[0].results, { + taw: dataset.taw, + werte: [dataset.rolleigenschaft1, dataset.rolleigenschaft2, dataset.rolleigenschaft3], + }) + + if (dsaDieRollEvaluated.tap >= 0) { // erfolg + evaluated1.toMessage({ + speaker: ChatMessage.getSpeaker({actor: actor}), + flavor: ` ${dsaDieRollEvaluated.meisterlich ? 'Meisterlich geschafft' : 'Geschafft'} mit ${dsaDieRollEvaluated.tap} Punkten übrig`, + }, {rollMode: "gmroll"}) + } else { // misserfolg + evaluated1.toMessage({ + speaker: ChatMessage.getSpeaker({actor: actor}), + flavor: ` ${dsaDieRollEvaluated.meisterlich ? 'Gepatzt' : ''} mit ${Math.abs(dsaDieRollEvaluated.tap)} Punkten daneben`, + }, {rollMode: "gmroll"}) + } + } + } + activateListeners(html) { super.activateListeners(html); @@ -153,6 +271,11 @@ export class GroupSheet extends ActorSheet { evt.stopPropagation(); }) + html.on('click', ".rollable", (evt) => { + this._onTalentRoll(evt) + evt.stopPropagation() + }) + new ContextMenu(html, '.equipment', [ { name: "Aus dem Gruppeninventar entfernen", diff --git a/src/module/sheets/liturgySheet.mjs b/src/module/sheets/liturgySheet.mjs new file mode 100644 index 00000000..0a531f9a --- /dev/null +++ b/src/module/sheets/liturgySheet.mjs @@ -0,0 +1,50 @@ +export class LiturgySheet extends ItemSheet { + /**@override */ + static get defaultOptions() { + return foundry.utils.mergeObject(super.defaultOptions, { + classes: ['dsa41', 'sheet', 'item', 'liturgy'], + width: 520, + height: 480, + tabs: [ + { + navSelector: '.sheet-tabs', + contentSelector: '.sheet-body', + initial: 'description', + }, + ], + }); + } + + /** @override */ + get template() { + return `systems/DSA_4-1/templates/item/item-liturgy-sheet.hbs`; + } + + /** @override */ + getData() { + // Retrieve the data structure from the base sheet. You can inspect or log + // the context variable to see the structure, but some key properties for + // sheets are the actor object, the data object, whether or not it's + // editable, the items array, and the effects array. + const context = super.getData(); + + // Use a safe clone of the actor data for further operations. + const liturgyData = context.data; + + // Add the actor's data to context.data for easier access, as well as flags. + context.system = liturgyData.system; + context.flags = liturgyData.flags; + context.json = JSON.stringify(liturgyData); + return context; + } + + activateListeners(html) { + super.activateListeners(html); + + // Everything below here is only needed if the sheet is editable + if (this.isEditable) { + + } + } + +} diff --git a/src/module/sheets/specialAbilitySheet.mjs b/src/module/sheets/specialAbilitySheet.mjs new file mode 100644 index 00000000..a1c6bb08 --- /dev/null +++ b/src/module/sheets/specialAbilitySheet.mjs @@ -0,0 +1,51 @@ +export class SpecialAbilitySheet extends ItemSheet { + /**@override */ + static get defaultOptions() { + return foundry.utils.mergeObject(super.defaultOptions, { + classes: ['dsa41', 'sheet', 'item', 'specialability'], + width: 520, + height: 480, + tabs: [ + { + navSelector: '.sheet-tabs', + contentSelector: '.sheet-body', + initial: 'description', + }, + ], + }); + } + + /** @override */ + get template() { + return `systems/DSA_4-1/templates/item/item-special-ability-sheet.hbs`; + } + + /** @override */ + getData() { + // Retrieve the data structure from the base sheet. You can inspect or log + // the context variable to see the structure, but some key properties for + // sheets are the actor object, the data object, whether or not it's + // editable, the items array, and the effects array. + const context = super.getData(); + + // Use a safe clone of the actor data for further operations. + const advantageData = context.data; + + // Add the actor's data to context.data for easier access, as well as flags. + context.system = advantageData.system; + context.flags = advantageData.flags; + context.json = JSON.stringify(advantageData.system, null, 4); + + return context; + } + + activateListeners(html) { + super.activateListeners(html); + + // Everything below here is only needed if the sheet is editable + if (!this.isEditable) { + + } + } + +} diff --git a/src/module/sheets/vornachteilSheet.mjs b/src/module/sheets/vornachteilSheet.mjs index 842bd24f..bfc5ad0d 100644 --- a/src/module/sheets/vornachteilSheet.mjs +++ b/src/module/sheets/vornachteilSheet.mjs @@ -34,7 +34,13 @@ export class VornachteilSheet extends ItemSheet { // Add the actor's data to context.data for easier access, as well as flags. context.system = advantageData.system; context.flags = advantageData.flags; - context.json = JSON.stringify(advantageData.system, null, 4); + + context.choices = {} + context.system.auswahl.forEach(a => { + context.choices[a] = a + }) + context.hasChoices = context.system.auswahl.length > 0; + context.hasModality = context.system.value == null return context; } @@ -43,7 +49,9 @@ export class VornachteilSheet extends ItemSheet { super.activateListeners(html); // Everything below here is only needed if the sheet is editable - if (!this.isEditable) return; + if (!this.isEditable) { + + } } -} \ No newline at end of file +} diff --git a/src/module/xml-import/xml-import.mjs b/src/module/xml-import/xml-import.mjs index c2e19552..1e7eadce 100644 --- a/src/module/xml-import/xml-import.mjs +++ b/src/module/xml-import/xml-import.mjs @@ -1,3 +1,7 @@ +import {LiturgyData} from "../data/miracle/liturgydata.mjs"; +import {BlessingDataModel} from "../data/blessing.mjs"; +import {Blessing} from "../documents/blessing.mjs"; + let months = [ "Praios", "Rondra", @@ -70,8 +74,8 @@ function getJsonFromXML(dom) { return jsonResult; } -async function addSkillFromCompendiumByNameToActor(talentName, taw, actor) { - const compendiumOfSkills = game.packs.get('DSA_4-1.talente-brw'); +async function addSkillFromCompendiumByNameToActor(talentName, taw, actor, combatStatistics, attributes) { + const compendiumOfSkills = game.packs.get('DSA_4-1.talente'); const talentId = compendiumOfSkills.index.find(skill => skill.name === talentName) if (talentId) { @@ -79,7 +83,21 @@ async function addSkillFromCompendiumByNameToActor(talentName, taw, actor) { try { const embeddedDocument = (await actor.createEmbeddedDocuments('Item', [talent]))[0] - embeddedDocument.update({system: {taw: taw}}); + if (talent.system.gruppe === "Kampf") { + const atbasis = attributes.find(p => p.name === "at").value + const pabasis = attributes.find(p => p.name === "pa").value + const combatStatistic = combatStatistics.find(p => p.name === talent.name) + if (combatStatistic) { // melee with AT/PA values + let at = combatStatistic.at - atbasis ?? 0 + let pa = combatStatistic.pa - pabasis ?? 0 + console.log({system: {taw, at, pa}}) + embeddedDocument.update({system: {taw, at, pa}}); + } else { // ranged with only AT values which is equal to taw + embeddedDocument.update({system: {taw: taw, at: taw, pa: null}}); // at is already at raw taw and wasn't influenced by helden-software precalculations + } + } else { + embeddedDocument.update({system: {taw: taw, at: null, pa: null}}); // just regular talent with taw + } } catch (error) { console.error(`${talentName} not found in items`, error) } @@ -102,6 +120,40 @@ async function addAdvantageFromCompendiumByNameToActor(advantageName, advantageV } } +async function addSpellsFromCompendiumByNameToActor(spellName, zfw, representation, hauszauber, actor) { + const compendiumOfSpells = game.packs.get('DSA_4-1.spells'); + const SCREAMING_NAME = spellName.toUpperCase() + const spellId = compendiumOfSpells.index.find(spell => spell.name === SCREAMING_NAME) + if (spellId) { + + const spell = await compendiumOfSpells.getDocument(spellId._id); + + try { + const embeddedDocument = (await actor.createEmbeddedDocuments('Item', [spell]))[0] + embeddedDocument.update({system: {zfw: zfw, hauszauber: hauszauber, repräsentation: representation}}); + } catch (error) { + console.error(`${spell} not found in items`, error) + } + } +} + +async function addLiturgiesFromCompendiumByNameToActor(liturgyName, actor) { + const compendiumOfLiturgies = game.packs.get('DSA_4-1.liturgien'); + const liturgyId = compendiumOfLiturgies.index.find(liturgy => { + return liturgy.name === LiturgyData.lookupAlias(liturgyName.split(" (")[0]) + }) + if (liturgyId) { + + const liturgy = await compendiumOfLiturgies.getDocument(liturgyId._id); + + try { + await actor.createEmbeddedDocuments('Item', [liturgy]) + } catch (error) { + console.error(`${liturgy} not found in items`, error) + } + } +} + /** * gets the text content of a file * @param file the file with the desired content @@ -133,10 +185,29 @@ function calculateBirthdate(json) { return `${day}. ${month} ${year} BF` } -function mapSkills(actor, held) { +function mapSkills(actor, held, kampfwerte) { for (let talent in held.talentliste.talent) { talent = held.talentliste.talent[talent] - addSkillFromCompendiumByNameToActor(talent.name, talent.value, actor) + + // hook liturgy + if (talent.name.startsWith("Liturgiekenntnis")) { + + actor.createEmbeddedDocuments('Item', [ + new Blessing({ + name: talent.name, + type: "Blessing", + system: { + gottheit: new RegExp("\\((.+)\\)").exec(talent.name)[1], + wert: talent.value + } + }) + ]) + + } else { + // proceed + const eigenschaften = held.eigenschaften.eigenschaft + addSkillFromCompendiumByNameToActor(talent.name, talent.value, actor, kampfwerte, eigenschaften) + } } } @@ -147,6 +218,20 @@ function mapAdvantages(actor, held) { } } +function mapSpells(actor, held) { + for (let spell in held.zauberliste.zauber) { + spell = held.zauberliste.zauber[spell] + addSpellsFromCompendiumByNameToActor(spell.name, spell.value, spell.repraesentation, spell.hauszauber === "true", actor) + } +} + +function mapMiracles(actor, liturgies) { + for (let liturgy in liturgies) { + liturgy = liturgies[liturgy] + addLiturgiesFromCompendiumByNameToActor(liturgy.name, actor) + } +} + /** * parses a json into a fitting character-json * @param rawJson the json parsed from the Helden-Software XML @@ -181,16 +266,14 @@ function mapRawJson(actor, rawJson) { held.basis.rasse.aussehen.aussehentext0, held.basis.rasse.aussehen.aussehentext1, held.basis.rasse.aussehen.aussehentext2, - held.basis.rasse.aussehen.aussehentext3, - ] + held.basis.rasse.aussehen.aussehentext3].join('\n') json.meta.familie = [ held.basis.rasse.aussehen.familietext0, held.basis.rasse.aussehen.familietext1, held.basis.rasse.aussehen.familietext2, held.basis.rasse.aussehen.familietext3, held.basis.rasse.aussehen.familietext4, - held.basis.rasse.aussehen.familietext5, - ] + held.basis.rasse.aussehen.familietext5].join('\n') json.meta.titel = held.basis.rasse.aussehen.titel json.meta.stand = held.basis.rasse.aussehen.stand let attributes = held.eigenschaften.eigenschaft @@ -265,20 +348,6 @@ function mapRawJson(actor, rawJson) { json.sonderfertigkeiten = specialAbilities json.liturgien = liturgies - mapSkills(actor, held) - let spells = [] - /*for (let spell in held.zauberliste.zauber) { - spell = held.zauberliste.zauber[spell] - spells.push({ - name: spell.name, - rep: spell.repraesentation, - hauszauber: spell.hauszauber === "true", - zfw: spell.value, - anmerkungen: spell.zauberkommentar, - komplexitaet: spell.k, - }) - }*/ - json.zauber = spells let combatValues = [] for (let combatValue in held.kampf.kampfwerte) { combatValue = held.kampf.kampfwerte[combatValue] @@ -289,6 +358,11 @@ function mapRawJson(actor, rawJson) { }) } json.kampfwerte = combatValues + + mapSkills(actor, held, combatValues) + mapSpells(actor, held) + mapMiracles(actor, liturgies) + let notes = [] for (let note in held.kommentare) { note = held.kommentare[note] diff --git a/src/packs/_source/liturgien-und-segnungen/argelions-bannende-hand.json b/src/packs/_source/liturgien-und-segnungen/argelions-bannende-hand.json new file mode 100644 index 00000000..84a67708 --- /dev/null +++ b/src/packs/_source/liturgien-und-segnungen/argelions-bannende-hand.json @@ -0,0 +1,21 @@ +{ + "name": "Argelions bannende Hand", + "grad": 5, + "herkunft": [ + { + "name": "Hesinde", + "grad": 5 + }, + { + "name": "Praios", + "grad": 5 + } + ], + "reichweite": "Sicht", + "ziel": "Zauber (auf Person, Objekt oder Zone)", + "zauberdauer": "1 Spielrunde (Gebet)", + "wirkungsdauer": "LkP* Stunden, eventuell augenblicklich", + "auswirkung": { + "V": "Diese Liturgie schwächt die Wirkung von Zaubern und Ritualen, die auf einem Objekt, auf einer Person oder (bei Flächenzaubern) auf einer Zone liegen, und kann sie gar völlig aufheben. Die LkP*+15 der Geweihten werden von den ZfP* des Zaubers oder Rituals abgezogen und so die Wirkung vermindert; fällt die Wirkung unter 0 ZfP*, ist die Magie dauerhaft gebannt; fällt die Wirkung des Zaubers genau auf 0 ZfP*, entspricht sie wie gehabt der Wirkung von 1 ZfP*." + } +} diff --git a/src/packs/_source/liturgien-und-segnungen/liturgie-auge-des-mondes.json b/src/packs/_source/liturgien-und-segnungen/liturgie-auge-des-mondes.json new file mode 100644 index 00000000..501f3905 --- /dev/null +++ b/src/packs/_source/liturgien-und-segnungen/liturgie-auge-des-mondes.json @@ -0,0 +1,16 @@ +{ + "name": "Auge des Mondes", + "grad": 2, + "herkunft": [ + { + "name": "Phex", + "grad": 2 + } + ], + "reichweite": "Selbst", + "ziel": "Geweihter", + "wirkungsdauer": "LkP* Stunden, maximal bis zum nächsten Sonnenaufgang", + "auswirkung": { + "II": "Der Geweihte ignoriert Dunkelheit (und daraus resultierende Abzüge) vollständig; er sieht, als wäre es helllichter Tag." + } +} diff --git a/src/packs/_source/liturgien-und-segnungen/liturgie-exkommunikation.json b/src/packs/_source/liturgien-und-segnungen/liturgie-exkommunikation.json new file mode 100644 index 00000000..4e7f96ee --- /dev/null +++ b/src/packs/_source/liturgien-und-segnungen/liturgie-exkommunikation.json @@ -0,0 +1,71 @@ +{ + "name": "Exkommunikation", + "grad": 3, + "herkunft": [ + { + "name": "Praios", + "grad": 3 + }, + { + "name": "Rondra", + "grad": 3 + }, + { + "name": "Efferd", + "grad": 3 + }, + { + "name": "Travia", + "grad": 3 + }, + { + "name": "Boron", + "grad": 3 + }, + { + "name": "Hesinde", + "grad": 3 + }, + { + "name": "Firun", + "grad": 3 + }, + { + "name": "Tsa", + "grad": 3 + }, + { + "name": "Phex", + "grad": 3 + }, + { + "name": "Peraine", + "grad": 3 + }, + { + "name": "Ingrerimm", + "grad": 3 + }, + { + "name": "Rahja", + "grad": 3 + }, + { + "name": "Angrosch", + "grad": 3 + }, + { + "name": "H'Ranga", + "grad": 3 + } + ], + "reichweite": "Sicht", + "ziel": "1 Person", + "zauberdauer": "Andacht", + "wirkungsdauer": "permanent", + "auswirkung": { + "III": "Dieses Ritual schließt eine Person rechtlich aus der Zwölfgöttlichen Gemeinschaft aus (üblicherweise jemanden, der sich gegen die göttlichen Gebote vergangen hat) und zeichnet sie als Frevler, so dass sie keinen Zugang zu den Paradiesen der Zwölfe erhalten kann, wenn sie vor Tilgung des Makels stirbt. Zudem profitieren Frevlerin geringerem Maß von segnenden Liturgien. Wenn die vom Exkommunizierenden verhängte Bußqueste vollbracht ist, endet der Ausschluss von kirchlichen Segnungen automatisch.", + "IV": "Exkommunizierte Geweihte verlieren sämtliche Karmaenergie und können natürlich auch keine durch Gebete o.ä. wieder gewinnen; ihr geistlicher Stand ruht, bis sie Buße getan haben.", + "V": "Eine nur Kirchenoberhäuptern bekannte Variante der EXKOMMUNIKATION nimmt auch die Weihen dauerhaft von einem Priester." + } +} diff --git a/src/packs/_source/liturgien-und-segnungen/liturgie-handwerksegen.json b/src/packs/_source/liturgien-und-segnungen/liturgie-handwerksegen.json new file mode 100644 index 00000000..10011275 --- /dev/null +++ b/src/packs/_source/liturgien-und-segnungen/liturgie-handwerksegen.json @@ -0,0 +1,65 @@ +{ + "name": "Handwerkssegen", + "alias": [ + "Cereborns Handreichung (Handwerkssegen)", + "Hauch der Leidenschaft (Handwerkssegen)" + ], + "grad": 1, + "herkunft": [ + { + "name": "Praios", + "grad": 1 + }, + { + "name": "Rondra", + "grad": 1 + }, + { + "name": "Efferd", + "grad": 1 + }, + { + "name": "Travia", + "grad": 1 + }, + { + "name": "Boron", + "grad": 1 + }, + { + "name": "Hesinde", + "grad": 1 + }, + { + "name": "Firun", + "grad": 1 + }, + { + "name": "Tsa", + "grad": 1 + }, + { + "name": "Phex", + "grad": 1 + }, + { + "name": "Peraine", + "grad": 1 + }, + { + "name": "Ingrerimm", + "grad": 1 + }, + { + "name": "Rahja", + "grad": 1 + } + ], + "reichweite": "Berührung", + "ziel": "1 Person", + "zauberdauer": "1 Spielrunde (Gebet)", + "wirkungsdauer": "bis zum Ende der Probe, maximal LkP* Tage", + "auswirkung": { + "I": "Mit dieser Liturgie erfährt eine Person durch den Geweihten eine göttliche Inspiration in einem Talent, das für den Geweihten ein Mirakel+ Talent ist. Der TaW der inspirierten Person steigt für eine Probe um LkP*/2+5 Punkte. Solcherart geschaffene Werkstücke können bei vielen TaP* der Talentprobe nach Maßgabe des Meisters entweder besonders kunstfertig oder aber besonders robust sein, was beim Bau von Behelfsbrücken oder dergleichen wichtig sein kann." + } +} diff --git a/src/packs/_source/liturgien-und-segnungen/liturgie-heiliger-befehl.json b/src/packs/_source/liturgien-und-segnungen/liturgie-heiliger-befehl.json new file mode 100644 index 00000000..0de93a5d --- /dev/null +++ b/src/packs/_source/liturgien-und-segnungen/liturgie-heiliger-befehl.json @@ -0,0 +1,62 @@ +{ + "name": "Heiliger Befehl", + "alias": [], + "grad": 2, + "herkunft": [ + { + "name": "Praios", + "grad": 2 + }, + { + "name": "Rondra", + "grad": 2 + }, + { + "name": "Efferd", + "grad": 2 + }, + { + "name": "Travia", + "grad": 2 + }, + { + "name": "Boron", + "grad": 2 + }, + { + "name": "Hesinde", + "grad": 2 + }, + { + "name": "Firun", + "grad": 2 + }, + { + "name": "Tsa", + "grad": 2 + }, + { + "name": "Phex", + "grad": 2 + }, + { + "name": "Peraine", + "grad": 2 + }, + { + "name": "Ingrerimm", + "grad": 2 + }, + { + "name": "Rahja", + "grad": 2 + } + ], + "reichweite": "Sicht", + "ziel": "1 Person", + "zauberdauer": "10 Aktionen (Stoßgebet)", + "wirkungsdauer": "bis der Befehl ausgeführt wurde, längstens LkP* Tage", + "auswirkung": { + "II": "Die Stimme des Geweihten wird laut und auch auf weitere Entfernung hörbar. Die angesprochene Person kann sich gegen einen so gegebenen Befehl, der dem Wesen der Gottheit entsprechen muss, nur mit einer Selbstbeherrschungs-Probe zur Wehr setzen, die um LkP*/2+5 Punkte erschwert ist, ansonsten befolgt sie den Befehl." + } +} diff --git a/src/packs/_source/liturgien-und-segnungen/liturgie-initiation.json b/src/packs/_source/liturgien-und-segnungen/liturgie-initiation.json new file mode 100644 index 00000000..f13bb118 --- /dev/null +++ b/src/packs/_source/liturgien-und-segnungen/liturgie-initiation.json @@ -0,0 +1,63 @@ +{ + "name": "Initiation", + "alias": [], + "grad": 2, + "primärHerkunft": "Praios", + "herkunft": [ + { + "name": "Praios", + "grad": 1 + }, + { + "name": "Rondra", + "grad": 2 + }, + { + "name": "Efferd", + "grad": 2 + }, + { + "name": "Travia", + "grad": 2 + }, + { + "name": "Boron", + "grad": 2 + }, + { + "name": "Hesinde", + "grad": 2 + }, + { + "name": "Firun", + "grad": 2 + }, + { + "name": "Tsa", + "grad": 2 + }, + { + "name": "Phex", + "grad": 2 + }, + { + "name": "Peraine", + "grad": 2 + }, + { + "name": "Ingrerimm", + "grad": 2 + }, + { + "name": "Rahja", + "grad": 2 + } + ], + "reichweite": "Berührung", + "ziel": "1 Person", + "zauberdauer": "1/2 Stund (Andacht)", + "wirkungsdauer": "permanent; kann nur durch eine Exkommunikation aufgehoben werden", + "auswirkung": { + "II": "Zwölfjährige oder Bekehrte werden mittels dieser Liturgie in den Zwölfgötterkult eingeführt, ihren Seelen steht prinzipiell eines der zwölfgöttlichen Paradiese offen. Im Zuge der Initiation erkennen Geweihte auch, ob Kinder potenzielle Novizen darstellen." + } +} diff --git a/src/packs/_source/liturgien-und-segnungen/liturgie-objektweihe.json b/src/packs/_source/liturgien-und-segnungen/liturgie-objektweihe.json new file mode 100644 index 00000000..040e00c8 --- /dev/null +++ b/src/packs/_source/liturgien-und-segnungen/liturgie-objektweihe.json @@ -0,0 +1,62 @@ +{ + "name": "Objektweihe", + "alias": [], + "grad": 1, + "herkunft": [ + { + "name": "Praios", + "grad": 1 + }, + { + "name": "Rondra", + "grad": 1 + }, + { + "name": "Efferd", + "grad": 1 + }, + { + "name": "Travia", + "grad": 1 + }, + { + "name": "Boron", + "grad": 1 + }, + { + "name": "Hesinde", + "grad": 1 + }, + { + "name": "Firun", + "grad": 1 + }, + { + "name": "Tsa", + "grad": 1 + }, + { + "name": "Phex", + "grad": 1 + }, + { + "name": "Peraine", + "grad": 1 + }, + { + "name": "Ingrerimm", + "grad": 1 + }, + { + "name": "Rahja", + "grad": 1 + } + ], + "reichweite": "Berührung", + "ziel": "1 Objekt", + "zauberdauer": "mehrere Stunden (Zeremonie)", + "wirkungsdauer": "solang sich der Träger des Objekts der jeweiligen Gottheit gefällig verhält oder bis die gespeicherte Segnung ausgelöst wurde, maximal LkP* Wochen", + "auswirkung": { + "I": "Diese Liturgie bindet neine der Zwölf Segnungen in einen Gegenstand. Die Wirkung dieser Segnung kann dann mit einer Anrufung der Gottheit (1 Aktion) jederzeit hervorgeholt werden. Der Gegenstand verliert seine Weihe damit jedoch. Solange der Gegenstand geweiht ist, ist er durch profane Gewalteinwirkung unzerstörbar. Handelt es sich um eine Rüstung, steigt der RS um LkP*/4 Punkte, jedoch nur im Kampf gegen unheilige Wesenheiten." + } +} diff --git a/src/packs/_source/liturgien-und-segnungen/segnung-eidsegen.json b/src/packs/_source/liturgien-und-segnungen/segnung-eidsegen.json new file mode 100644 index 00000000..81062539 --- /dev/null +++ b/src/packs/_source/liturgien-und-segnungen/segnung-eidsegen.json @@ -0,0 +1,63 @@ +{ + "name": "Eidsegen", + "alias": [], + "grad": 1, + "primärHerkunft": "", + "herkunft": [ + { + "name": "Praios", + "grad": 0 + }, + { + "name": "Rondra", + "grad": 1 + }, + { + "name": "Efferd", + "grad": 1 + }, + { + "name": "Travia", + "grad": 1 + }, + { + "name": "Boron", + "grad": 1 + }, + { + "name": "Hesinde", + "grad": 1 + }, + { + "name": "Firun", + "grad": 1 + }, + { + "name": "Tsa", + "grad": 1 + }, + { + "name": "Phex", + "grad": 1 + }, + { + "name": "Peraine", + "grad": 1 + }, + { + "name": "Ingrerimm", + "grad": 1 + }, + { + "name": "Rahja", + "grad": 1 + } + ], + "reichweite": "Berührung", + "ziel": "1 Person", + "zauberdauer": "1 Spielrunde (Gebet)", + "wirkungsdauer": "frei festzulegen, lägstens aber LkP* Monate", + "auswirkung": { + "I": "Der Schwur einer Person wird mit dieser Liturgie bekräftigt. Wer den Eid ablegt, nennt dabei eine Strafe, die ihn bei Eidbruch ereilen soll. Diese Strafe sollte einem regeltechnischen Nachteil entsprechen. Wird der Eid gebrochen, trifft ihn dieser Nachteil. Zusätzlich wirken Liturgien, von denen der Eidbrüchige profitieren würde, auf ihn nur mit halber Stärke." + } +} diff --git a/src/packs/_source/liturgien-und-segnungen/segnung-feuersegen.json b/src/packs/_source/liturgien-und-segnungen/segnung-feuersegen.json new file mode 100644 index 00000000..c929e513 --- /dev/null +++ b/src/packs/_source/liturgien-und-segnungen/segnung-feuersegen.json @@ -0,0 +1,63 @@ +{ + "name": "Feuersegen", + "alias": [], + "grad": 1, + "primärHerkunft": "Ingerimm", + "herkunft": [ + { + "name": "Praios", + "grad": 1 + }, + { + "name": "Rondra", + "grad": 1 + }, + { + "name": "Efferd", + "grad": 1 + }, + { + "name": "Travia", + "grad": 1 + }, + { + "name": "Boron", + "grad": 1 + }, + { + "name": "Hesinde", + "grad": 1 + }, + { + "name": "Firun", + "grad": 1 + }, + { + "name": "Tsa", + "grad": 1 + }, + { + "name": "Phex", + "grad": 1 + }, + { + "name": "Peraine", + "grad": 1 + }, + { + "name": "Ingrerimm", + "grad": 0 + }, + { + "name": "Rahja", + "grad": 1 + } + ], + "reichweite": "selbst / Sicht (Variante des Feuerschutzes)", + "ziel": "Gewewihter / 1 Gegenstand (Variante des Feuerschutzes)", + "zauberdauer": "1 Spielrunde (Gebet)", + "wirkungsdauer": "bis zum Ende der Probe, maximal LkP* Tage", + "auswirkung": { + "I": "Aus der Fingerspitze des Geweihten schlägt ein Flämmchen, das gegen Wind und Wetter geschützt ist; es verlischt nur, wenn es in Wasser getaucht wird / In dieser Variante schützt der Geweihte ein Feuer mit einer Brennfläche von maximal einem Rechtschritt, das so nicht verlöschen kann, solange genug Brennmaterial nachgelegt wird." + } +} diff --git a/src/packs/_source/liturgien-und-segnungen/segnung-geburtssegen.json b/src/packs/_source/liturgien-und-segnungen/segnung-geburtssegen.json new file mode 100644 index 00000000..e09850fd --- /dev/null +++ b/src/packs/_source/liturgien-und-segnungen/segnung-geburtssegen.json @@ -0,0 +1,63 @@ +{ + "name": "Geburtssegen", + "alias": [], + "grad": 1, + "primärHerkunft": "Tsa", + "herkunft": [ + { + "name": "Praios", + "grad": 1 + }, + { + "name": "Rondra", + "grad": 1 + }, + { + "name": "Efferd", + "grad": 1 + }, + { + "name": "Travia", + "grad": 1 + }, + { + "name": "Boron", + "grad": 1 + }, + { + "name": "Hesinde", + "grad": 1 + }, + { + "name": "Firun", + "grad": 1 + }, + { + "name": "Tsa", + "grad": 0 + }, + { + "name": "Phex", + "grad": 1 + }, + { + "name": "Peraine", + "grad": 1 + }, + { + "name": "Ingrerimm", + "grad": 1 + }, + { + "name": "Rahja", + "grad": 1 + } + ], + "reichweite": "Berührung", + "ziel": "1 Person", + "zauberdauer": "1 Spielrunde (Gebet)", + "wirkungsdauer": "bis zum 12. Geburtstag des Kindes", + "auswirkung": { + "I": "Die Liturgie schützt ein Kind vor dämonischen Einflüsterungen und Entführung durch Kobolde. Entsprechende Proben sind um 12 Punkte erschwert." + } +} diff --git a/src/packs/_source/liturgien-und-segnungen/segnung-glückssegen.json b/src/packs/_source/liturgien-und-segnungen/segnung-glückssegen.json new file mode 100644 index 00000000..a9143bfa --- /dev/null +++ b/src/packs/_source/liturgien-und-segnungen/segnung-glückssegen.json @@ -0,0 +1,63 @@ +{ + "name": "Geburtssegen", + "alias": [], + "grad": 1, + "primärHerkunft": "Phex", + "herkunft": [ + { + "name": "Praios", + "grad": 1 + }, + { + "name": "Rondra", + "grad": 1 + }, + { + "name": "Efferd", + "grad": 1 + }, + { + "name": "Travia", + "grad": 1 + }, + { + "name": "Boron", + "grad": 1 + }, + { + "name": "Hesinde", + "grad": 1 + }, + { + "name": "Firun", + "grad": 1 + }, + { + "name": "Tsa", + "grad": 1 + }, + { + "name": "Phex", + "grad": 0 + }, + { + "name": "Peraine", + "grad": 1 + }, + { + "name": "Ingrerimm", + "grad": 1 + }, + { + "name": "Rahja", + "grad": 1 + } + ], + "reichweite": "Berührung", + "ziel": "1 Person", + "zauberdauer": "6 Aktionen (Stoßgebet)", + "wirkungsdauer": "LkP* Spielrunden, maximal bis zur nächsten Talentprobe", + "auswirkung": { + "I": "Wer diesen Segen empfängt, darf einmal eine Probe wiederholen und das für ihn günstigere Ergebnis wählen. Dies funktioniert jedoch nicht mit Fertigkeiten, die beim segnenden Geweihten unter Mirakel- gelistet sind." + } +} diff --git a/src/packs/_source/liturgien-und-segnungen/segnung-grabsegen.json b/src/packs/_source/liturgien-und-segnungen/segnung-grabsegen.json new file mode 100644 index 00000000..265c0284 --- /dev/null +++ b/src/packs/_source/liturgien-und-segnungen/segnung-grabsegen.json @@ -0,0 +1,63 @@ +{ + "name": "Grabsegen", + "alias": [], + "grad": 1, + "primärHerkunft": "Boron", + "herkunft": [ + { + "name": "Praios", + "grad": 1 + }, + { + "name": "Rondra", + "grad": 1 + }, + { + "name": "Efferd", + "grad": 1 + }, + { + "name": "Travia", + "grad": 1 + }, + { + "name": "Boron", + "grad": 0 + }, + { + "name": "Hesinde", + "grad": 1 + }, + { + "name": "Firun", + "grad": 1 + }, + { + "name": "Tsa", + "grad": 1 + }, + { + "name": "Phex", + "grad": 1 + }, + { + "name": "Peraine", + "grad": 1 + }, + { + "name": "Ingrerimm", + "grad": 1 + }, + { + "name": "Rahja", + "grad": 1 + } + ], + "reichweite": "Berührung", + "ziel": "1 Person", + "zauberdauer": "1 Spielrunde (Gebet)", + "wirkungsdauer": "permanent; es sei denn, das Grab wird entweiht.", + "auswirkung": { + "I": "Das Grab eines solcherart Gesegneten wirkt abschreckend auf Grabräuber und verhindert nekromantische Rituale, sodass der Leichnam schwerer zu einem Untoten erhoben werden kann. Sterblichen, die sich am Grab vergehenwollen, muss eine MU-Probe erschwert um eventuell vorhandene Totenangst gelingen. Zauber, die den Geist oder den Leichnam des Toten betreffen, sind um LkP*/2 Punkte erschwert." + } +} diff --git a/src/packs/_source/liturgien-und-segnungen/segnung-harmoniesegen.json b/src/packs/_source/liturgien-und-segnungen/segnung-harmoniesegen.json new file mode 100644 index 00000000..52692dcc --- /dev/null +++ b/src/packs/_source/liturgien-und-segnungen/segnung-harmoniesegen.json @@ -0,0 +1,63 @@ +{ + "name": "Harmoniesegen", + "alias": [], + "grad": 1, + "primärHerkunft": "Rahja", + "herkunft": [ + { + "name": "Praios", + "grad": 1 + }, + { + "name": "Rondra", + "grad": 1 + }, + { + "name": "Efferd", + "grad": 1 + }, + { + "name": "Travia", + "grad": 1 + }, + { + "name": "Boron", + "grad": 1 + }, + { + "name": "Hesinde", + "grad": 1 + }, + { + "name": "Firun", + "grad": 1 + }, + { + "name": "Tsa", + "grad": 1 + }, + { + "name": "Phex", + "grad": 1 + }, + { + "name": "Peraine", + "grad": 1 + }, + { + "name": "Ingrerimm", + "grad": 1 + }, + { + "name": "Rahja", + "grad": 0 + } + ], + "reichweite": "Berührung", + "ziel": "1 Person", + "zauberdauer": "12 Aktionen (Stoßgebet)", + "wirkungsdauer": "permanent; es sei denn, das Grab wird entweiht.", + "auswirkung": { + "I": "Die gesegnete Person wird innerlich ausgeglichen und zuversichtlich. Proben auf MU, IN und CH sind um LkP*/2 Punkte erleichtert, Proben auf Schlechte Eigenschaften ebenso erschwert. Zauber, die den so Gesegneten geistig verwirren oder aufregen sollen (wie etwa der HORRIPHOBUS), werden in ihrer von den ZfP* abhängigen Wirkungsstärke um LkP*/2 Punkte vermindert. Fallen die ZfP* dabei unter 0, endet der Zauber." + } +} diff --git a/src/packs/_source/liturgien-und-segnungen/segnung-heilungssegen.json b/src/packs/_source/liturgien-und-segnungen/segnung-heilungssegen.json new file mode 100644 index 00000000..7380244f --- /dev/null +++ b/src/packs/_source/liturgien-und-segnungen/segnung-heilungssegen.json @@ -0,0 +1,63 @@ +{ + "name": "Heilungssegen", + "alias": [], + "grad": 1, + "primärHerkunft": "Peraine", + "herkunft": [ + { + "name": "Praios", + "grad": 1 + }, + { + "name": "Rondra", + "grad": 1 + }, + { + "name": "Efferd", + "grad": 1 + }, + { + "name": "Travia", + "grad": 1 + }, + { + "name": "Boron", + "grad": 1 + }, + { + "name": "Hesinde", + "grad": 1 + }, + { + "name": "Firun", + "grad": 1 + }, + { + "name": "Tsa", + "grad": 1 + }, + { + "name": "Phex", + "grad": 1 + }, + { + "name": "Peraine", + "grad": 0 + }, + { + "name": "Ingrerimm", + "grad": 1 + }, + { + "name": "Rahja", + "grad": 1 + } + ], + "reichweite": "selbst/ Berührung", + "ziel": "Geweihte / 1 Person", + "zauberdauer": "1 Spielrunde (Gebet)", + "wirkungsdauer": "augenblicklich", + "auswirkung": { + "I": "Der Nutznießer dieser Liturgie (dies kann sowohl der Geweihte selbst als auch eine weitere Person sein) erhält LkP*/2+3 Lebenspunkte zurück. Hierdurch schließen sich jedoch keine regeltechnischen Wunden." + } +} diff --git a/src/packs/_source/liturgien-und-segnungen/segnung-märtyrersegen.json b/src/packs/_source/liturgien-und-segnungen/segnung-märtyrersegen.json new file mode 100644 index 00000000..61fe7752 --- /dev/null +++ b/src/packs/_source/liturgien-und-segnungen/segnung-märtyrersegen.json @@ -0,0 +1,63 @@ +{ + "name": "Märtyrersegen", + "alias": [], + "grad": 1, + "primärHerkunft": "Firun", + "herkunft": [ + { + "name": "Praios", + "grad": 1 + }, + { + "name": "Rondra", + "grad": 1 + }, + { + "name": "Efferd", + "grad": 1 + }, + { + "name": "Travia", + "grad": 1 + }, + { + "name": "Boron", + "grad": 1 + }, + { + "name": "Hesinde", + "grad": 1 + }, + { + "name": "Firun", + "grad": 0 + }, + { + "name": "Tsa", + "grad": 1 + }, + { + "name": "Phex", + "grad": 1 + }, + { + "name": "Peraine", + "grad": 1 + }, + { + "name": "Ingrerimm", + "grad": 1 + }, + { + "name": "Rahja", + "grad": 1 + } + ], + "reichweite": "selbst", + "ziel": "Geweihter", + "zauberdauer": "4 Aktionen", + "wirkungsdauer": "permanent; es sei denn, das Grab wird entweiht.", + "auswirkung": { + "I": "Der Geweihte spürt keinen Schmerz: Er erleidet keine Abzüge durch niedrige LeP oder Wunden, auch stirbt er nicht. Erst mit Ende der Wirkungsdauer offenbaren sich dem Geweihten die Folgen des Kampfes. Der Meister sollte darum währenddessen den erlittenen Schaden verdeckt notieren. Der Selbstbeherrschungs-Wert des Gesegneten steigt darüber hinaus um LkP*/2 Punkte." + } +} diff --git a/src/packs/_source/liturgien-und-segnungen/segnung-schutzsegen.json b/src/packs/_source/liturgien-und-segnungen/segnung-schutzsegen.json new file mode 100644 index 00000000..5939a2d5 --- /dev/null +++ b/src/packs/_source/liturgien-und-segnungen/segnung-schutzsegen.json @@ -0,0 +1,63 @@ +{ + "name": "Schutzsegen", + "alias": [], + "grad": 1, + "primärHerkunft": "Rondra", + "herkunft": [ + { + "name": "Praios", + "grad": 1 + }, + { + "name": "Rondra", + "grad": 0 + }, + { + "name": "Efferd", + "grad": 1 + }, + { + "name": "Travia", + "grad": 1 + }, + { + "name": "Boron", + "grad": 1 + }, + { + "name": "Hesinde", + "grad": 1 + }, + { + "name": "Firun", + "grad": 1 + }, + { + "name": "Tsa", + "grad": 1 + }, + { + "name": "Phex", + "grad": 1 + }, + { + "name": "Peraine", + "grad": 1 + }, + { + "name": "Ingrerimm", + "grad": 1 + }, + { + "name": "Rahja", + "grad": 1 + } + ], + "reichweite": "Berührung", + "ziel": "Zone von 10 Schritt Radius", + "zauberdauer": "10 Aktionen (Stoßgebet)", + "wirkungsdauer": "LkP* Spielrunden", + "auswirkung": { + "I": "eine bestimmte Art von unheiligen Kreaturen kann den so geschützten Boden nur dann betreten, wenn ihre Magieresistenz höher ist als LkP*/2. Sie erleiden dort außerdem Schaden in Höhe von 1W6 SP pro Spielrunde bzw. sogar 1W6 SP pro Kampfrunde, falls es sich bei der gebannten Art um einen der Gottheit des Geweihten entgegengesetzten Dämon handelt (oder um eine Untotenart bei einem Borongeweihten). Der Geweihte muss nicht unbedingt wissen, worum es sich bei einem Wesen, das er abhalten möchte, genau handelt; es muss nur klarsein, welches Wesen er meint, und alle gleichartigen Kreaturen werden ebenfalls ferngehalten." + } +} diff --git a/src/packs/_source/liturgien-und-segnungen/segnung-spiesesegen.json b/src/packs/_source/liturgien-und-segnungen/segnung-spiesesegen.json new file mode 100644 index 00000000..869fc75d --- /dev/null +++ b/src/packs/_source/liturgien-und-segnungen/segnung-spiesesegen.json @@ -0,0 +1,63 @@ +{ + "name": "Speisesegen", + "alias": [], + "grad": 1, + "primärHerkunft": "Travia", + "herkunft": [ + { + "name": "Praios", + "grad": 1 + }, + { + "name": "Rondra", + "grad": 1 + }, + { + "name": "Efferd", + "grad": 1 + }, + { + "name": "Travia", + "grad": 0 + }, + { + "name": "Boron", + "grad": 1 + }, + { + "name": "Hesinde", + "grad": 1 + }, + { + "name": "Firun", + "grad": 1 + }, + { + "name": "Tsa", + "grad": 1 + }, + { + "name": "Phex", + "grad": 1 + }, + { + "name": "Peraine", + "grad": 1 + }, + { + "name": "Ingrerimm", + "grad": 1 + }, + { + "name": "Rahja", + "grad": 1 + } + ], + "reichweite": "Berührung", + "ziel": "mehrere Gegenstände", + "zauberdauer": "8 Aktionen (Stoßgebet)", + "wirkungsdauer": "augenblicklich", + "auswirkung": { + "I": "Der Segen macht eine Mahlzeit von zweifelhafter Qualität für bis zu LkW Personen genießbar und durchschnittlich schmackhaft. Krankheiten bis zu einer Stufe von LkP*/2 die durch diese Mahlzeit aufgetreten wären, werden verhindert, hinzugefügtes Gift wird jedoch nicht neutralisiert." + } +} diff --git a/src/packs/_source/liturgien-und-segnungen/segnung-tranksegen.json b/src/packs/_source/liturgien-und-segnungen/segnung-tranksegen.json new file mode 100644 index 00000000..5f6d259a --- /dev/null +++ b/src/packs/_source/liturgien-und-segnungen/segnung-tranksegen.json @@ -0,0 +1,63 @@ +{ + "name": "Tranksegen", + "alias": [], + "grad": 1, + "primärHerkunft": "Efferd", + "herkunft": [ + { + "name": "Praios", + "grad": 1 + }, + { + "name": "Rondra", + "grad": 1 + }, + { + "name": "Efferd", + "grad": 0 + }, + { + "name": "Travia", + "grad": 1 + }, + { + "name": "Boron", + "grad": 1 + }, + { + "name": "Hesinde", + "grad": 1 + }, + { + "name": "Firun", + "grad": 1 + }, + { + "name": "Tsa", + "grad": 1 + }, + { + "name": "Phex", + "grad": 1 + }, + { + "name": "Peraine", + "grad": 1 + }, + { + "name": "Ingrerimm", + "grad": 1 + }, + { + "name": "Rahja", + "grad": 1 + } + ], + "reichweite": "Berührung", + "ziel": "mehrere Gegenstände", + "zauberdauer": "8 Aktionen (Stoßgebet)", + "wirkungsdauer": "augenblicklich", + "auswirkung": { + "I": "Der Segen macht Getränke (hauptsächlich Wasser), die für bis zu LkW Personen einen Tag lang ausreichen, genießbar. Krankheiten bis zu einer Stufe von LkP*/2, die durch diese Getränke aufgetreten wären, werden verhindert, hinzugefügtes Gift wird jedoch nicht neutralisiert. Meerwasser kann hiermit in Trinkwasser gewandelt werden." + } +} diff --git a/src/packs/_source/liturgien-und-segnungen/segnung-weisheitssegen.json b/src/packs/_source/liturgien-und-segnungen/segnung-weisheitssegen.json new file mode 100644 index 00000000..0080de69 --- /dev/null +++ b/src/packs/_source/liturgien-und-segnungen/segnung-weisheitssegen.json @@ -0,0 +1,63 @@ +{ + "name": "Weisheitssegen", + "alias": [], + "grad": 1, + "primärHerkunft": "Hesinde", + "herkunft": [ + { + "name": "Praios", + "grad": 1 + }, + { + "name": "Rondra", + "grad": 1 + }, + { + "name": "Efferd", + "grad": 1 + }, + { + "name": "Travia", + "grad": 1 + }, + { + "name": "Boron", + "grad": 1 + }, + { + "name": "Hesinde", + "grad": 0 + }, + { + "name": "Firun", + "grad": 1 + }, + { + "name": "Tsa", + "grad": 1 + }, + { + "name": "Phex", + "grad": 1 + }, + { + "name": "Peraine", + "grad": 1 + }, + { + "name": "Ingrerimm", + "grad": 1 + }, + { + "name": "Rahja", + "grad": 1 + } + ], + "reichweite": "selbst/ Berührung", + "ziel": "Geweihter / 1 Person", + "zauberdauer": "15 Aktionen (Stoßgebet)", + "wirkungsdauer": "LkP* Stunden", + "auswirkung": { + "I": "Der so Gesegnete (der Geweihte oder eine andere Person) gewinnt göttliche Einsichten und ist gefeit gegen Torheit. Er verteilt möglichst gleichwertig LkP*/2 Punkte auf KL und IN, außerdem steigt seine MR um LkP*/4 Punkte." + } +} diff --git a/src/packs/__source/talente-brw/handwerk/abrichten.json b/src/packs/_source/talente/abrichten.json similarity index 87% rename from src/packs/__source/talente-brw/handwerk/abrichten.json rename to src/packs/_source/talente/abrichten.json index f73b79b4..4b6d254c 100644 --- a/src/packs/__source/talente-brw/handwerk/abrichten.json +++ b/src/packs/_source/talente/abrichten.json @@ -1,9 +1,5 @@ { - "_id": "XxPXNovZd9AX2sHM", - "_key": "!items!XxPXNovZd9AX2sHM", - "type": "Skill", "name": "Abrichten", - "system": { "gruppe": "Handwerk", "probe": [ "MU", @@ -14,5 +10,4 @@ ], "behinderung": "situationsbedingt", "talent": "Wann immer ein Held seinem Tier ein Kunststück (einem Pferd den ‘stummen Alarm’, einem Hund das Apportieren oder Männchen machen) beibringen will, ist eine Probe auf Abrichten fällig. Zuschläge auf die Probe entstehen durch Fehlversuche (+2 für jede gescheiterte Probe), durch die Schwierigkeit des Kunststücks und die grundsätzliche Lernfähigkeit und potentielle Loyalität des Tieres. Übungen, die einem Tier wegen körperlicher oder geistiger Beschränkungen nicht möglich sind, kann ihm auch ein meisterlicher Abrichter nicht beibringen." - } } diff --git a/src/packs/__source/talente-brw/handwerk/ackerbau.json b/src/packs/_source/talente/ackerbau.json similarity index 87% rename from src/packs/__source/talente-brw/handwerk/ackerbau.json rename to src/packs/_source/talente/ackerbau.json index b67e3406..8b68787a 100644 --- a/src/packs/__source/talente-brw/handwerk/ackerbau.json +++ b/src/packs/_source/talente/ackerbau.json @@ -1,9 +1,5 @@ { - "_id": "w3wHyimJXv6EjnMw", - "_key": "!items!w3wHyimJXv6EjnMw", - "type": "Skill", "name": "Ackerbau", - "system": { "gruppe": "Handwerk", "probe": [ "IN", @@ -14,5 +10,4 @@ ], "behinderung": "situationsbedingt", "talent": "Dies ist die grundlegende Kenntnis von Bodenverhältnissen, Aussaat und Ernte, Feldbestellungs- und Lagerungsmethoden. Mit dem Talent kann man Nutzpflanzen erkennen und unterscheiden und auf diese Art und Weise z.B. eine auf einer einsamen Insel gestrandete Heldengruppe vor dem Verhungern bewahren. Zudem erkennt ein Ackerbau-Kundiger leicht Wert und Haltbarkeit von Nahrungsmitteln. Auf der aktiven Seite heißt dies auch, dass ein entsprechend ausgebildeter Held mit Pflug, Hacke und Dreschflegel umzugehen weiß." - } } diff --git a/src/packs/__source/talente-brw/körperlich/akrobatik.json b/src/packs/_source/talente/akrobatik.json similarity index 88% rename from src/packs/__source/talente-brw/körperlich/akrobatik.json rename to src/packs/_source/talente/akrobatik.json index bc78a80f..c64772e6 100644 --- a/src/packs/__source/talente-brw/körperlich/akrobatik.json +++ b/src/packs/_source/talente/akrobatik.json @@ -1,9 +1,5 @@ { - "_id": "peize2dihvjf2N7p", - "_key": "!items!peize2dihvjf2N7p", - "type": "Skill", "name": "Akrobatik", - "system": { "gruppe": "Körperlich", "probe": [ "MU", @@ -18,5 +14,4 @@ ], "behinderung": "*2", "talent": "In diesem Talent sind die Dinge zusammengefasst, in denen sich Gaukler seit ihrer Kindheit üben: Balancieren, Schwingen an Seilen und Trapezen, Radschlagen und halsbrecherische Salti. Wann immer ein Held eine Aktion unternimmt, die eines Zirkusartisten würdig wäre – also bei allen willentlich ausgeführten akrobatischen Aktionen –, können Sie als Meister eine Akrobatik-Probe verlangen. Eher ‘gewöhnliche’ Aktionen der Körperbeherrschung, wie speziell das Abrollen nach Stürzen, fallen unter das Talent Körperbeherrschung." - } } diff --git a/src/packs/__source/talente-brw/sprachen/alaani.json b/src/packs/_source/talente/alaani.json similarity index 89% rename from src/packs/__source/talente-brw/sprachen/alaani.json rename to src/packs/_source/talente/alaani.json index 1e6465f2..3b96313d 100644 --- a/src/packs/__source/talente-brw/sprachen/alaani.json +++ b/src/packs/_source/talente/alaani.json @@ -1,9 +1,5 @@ { - "_id": "EHrjrxETwhx1mB63", - "_key": "!items!EHrjrxETwhx1mB63", - "type": "Skill", - "name": "Sprachen kennen: Alaani", - "system": { + "name": "Sprachen kennen Alaani", "gruppe": "Sprachen", "probe": [ "KL", @@ -14,5 +10,4 @@ ], "komplexität": "21", "talent": "Ähnlich wie bei den Schriften wird jede aventurische Sprache als eigenes Talent gewertet. Je der Aventurier beherrscht seine Muttersprache auf einem Startwert in Höhe seiner Klugheit–2, manche darüber hinaus noch eine Zweitsprache in Höhe von KL –4. Weitere Sprachen müssen dann explizit erlernt werden.
Um die Sprache identifizieren zu können, ist ein TaW von 1 nötig, um grundlegende Konzepte (“Ich Hunger”) verstehen und vermitteln zu können, ist ein TaW von 2 nötig; um einfache Sätze bilden und verstehen zu können, benötigt man einen TaW von 4. Ein TaW von 1/3 der Komplexität bedeutet recht fließenden Umgang mit allen üblichen grammatischen Konstruktionen und die Kenntnis auch seltener Wörter, während ein TaW in Höhe der halben Komplexität heißt, dass man die Sprache so gut wie ein durchschnittlicher Einheimischer beherrscht (wenn man auch immer noch einen leichten Akzent aufweist). Selbst philosophische oder magietheoretische Schriften gehen selten über eine Komplexität von 15 hinaus." - } } diff --git a/src/packs/__source/talente-brw/handwerk/alchimie.json b/src/packs/_source/talente/alchimie.json similarity index 92% rename from src/packs/__source/talente-brw/handwerk/alchimie.json rename to src/packs/_source/talente/alchimie.json index f277abad..8b6a3991 100644 --- a/src/packs/__source/talente-brw/handwerk/alchimie.json +++ b/src/packs/_source/talente/alchimie.json @@ -1,9 +1,5 @@ { - "_id": "oHnVR4rpCZes1MBk", - "_key": "!items!oHnVR4rpCZes1MBk", - "type": "Skill", "name": "Alchimie", - "system": { "gruppe": "Handwerk", "probe": [ "MU", @@ -22,5 +18,4 @@ ], "behinderung": "situationsbedingt", "talent": "Dieses Talent regelt die Herstellung ‘normaler’ Chemikalien und wundertätiger Mittel. Der Spieler teilt dem Meister mit, welches alchimistische Gemisch sein Held herstellen will, und der Spielleiter legt den Zuschlag (oder Abzug) auf die erforderliche Probe fest. Bevor es zur Probe kommt, muss der Held natürlich erst einmal in den Besitz der benötigten Zutaten und auch der Rezeptur kommen. Eine gescheiterte Probe auf diesem gefährlichen Gebiet kann mancherlei bewirken: ein harmloses, aber bestialisch stinkendes, grünes Wölkchen zum Beispiel, oder aber einen Urknall, der ein halbes Stadtviertel in Schutt und Asche legt. Der Meister sollte so fair sein, seinen Helden in etwa anzudeuten, was eine gescheiterte Probe für sie bedeuten könnte. Talentproben in Alchimie können auch zur Analyse unbekannter Mixturen dienen – aber auch auf diesem Gebiet kann ein Irrtum verhängnisvolle Folgen haben (und hier sollte der Meister auch ruhig verdeckt würfeln)." - } } diff --git a/src/packs/__source/talente-brw/wissen/anatomie.json b/src/packs/_source/talente/anatomie.json similarity index 90% rename from src/packs/__source/talente-brw/wissen/anatomie.json rename to src/packs/_source/talente/anatomie.json index 8a419eb5..e32e9e9a 100644 --- a/src/packs/__source/talente-brw/wissen/anatomie.json +++ b/src/packs/_source/talente/anatomie.json @@ -1,9 +1,5 @@ { - "_id": "WPbhXQhGbNMxEyO1", - "_key": "!items!WPbhXQhGbNMxEyO1", - "type": "Skill", "name": "Anatomie", - "system": { "gruppe": "Wissen", "probe": [ "MU", @@ -17,5 +13,4 @@ } ], "talent": "Die Kunde von den Körpern, ihren inneren Zusammenhängen und ihrem Aufbau ist eine der grundlegenden Wissenschaften für die Heilkunst. Da diese Kunst nur an Leichen oder Verurteilten gewonnen werden kann, ist der Beruf des Anatomen nicht sonderlich angesehen, ja, vielerorts sogar verboten. Dafür ist ein gebildeter Anatom aber auch in der Lage, schwere Wunden und bestimmte Arten von Organkrankheiten sofort als solche zu erkennen und zu behandeln (Erleichterung entsprechender Heilkunde-Proben um den halben TaW Anatomie). Zudem kennt er die verwundbarsten Punkte des menschlichen Körpers und richtet daher im waffenlosen Kampf stets 1 TP mehr an als ein unkundiger Kämpfer, wenn er über einen Anatomie-TaW von 10 oder mehr verfügt." - } } diff --git a/src/packs/__source/talente-brw/kampf/anderthalbhaender.json b/src/packs/_source/talente/anderthalbhaender.json similarity index 88% rename from src/packs/__source/talente-brw/kampf/anderthalbhaender.json rename to src/packs/_source/talente/anderthalbhaender.json index ac000ad3..c72363e5 100644 --- a/src/packs/__source/talente-brw/kampf/anderthalbhaender.json +++ b/src/packs/_source/talente/anderthalbhaender.json @@ -1,10 +1,5 @@ { - "_id": "1rZ9ZOobBzOWfqVT", - "_key": "!items!1rZ9ZOobBzOWfqVT", - "type": "Skill", "name": "Anderthalbhänder", - "system": { "gruppe": "Kampf", "talent": "Die meisten ‘anderthalbhändig’ geführten Schwerter und Säbel können zwar – je nach Körperkraft des Helden – auch mit den Talenten Schwerter, Säbel oder Zweihandschwerter/-säbel geführt werden, ihre wahren Fähigkeiten erkennt man jedoch nur, wenn man die für sie typischen Manöver in einer Kampftechnik erlernt hat: der schnelle Wechsel von einhän-diger zu zweihändiger Führung und zurück, daher auch der Name ‘anderthalbhändig’. Trotz ihres nicht unbeträchtlichen Gewichts können gut geführte Anderthalbhänder ein fast so variantenreiches Klingenspiel ermöglichen wie Fechtwaffen, weswegen dieses Talent auch gerne als die ‘Königsdisziplin’ unter den Klingenwaffen angesehen wird." - } } diff --git a/src/packs/__source/talente-brw/kampf/armbrust.json b/src/packs/_source/talente/armbrust.json similarity index 80% rename from src/packs/__source/talente-brw/kampf/armbrust.json rename to src/packs/_source/talente/armbrust.json index ac7665d0..f235e9d8 100644 --- a/src/packs/__source/talente-brw/kampf/armbrust.json +++ b/src/packs/_source/talente/armbrust.json @@ -1,10 +1,5 @@ { - "_id": "Gaz7algdJ98nYFdW", - "_key": "!items!Gaz7algdJ98nYFdW", - "type": "Skill", "name": "Armbrust", - "system": { "gruppe": "Kampf", "talent": "Zwar beziehen auch diese Waffen ihre Energie aus gespannten Bögen, verdrillten Sehnen oder mechanischen Federn, aber damit enden die Ähnlichkeiten mit Bögen auch schon. Alle armbrustähnlichen Waffen besitzen einen Schaft, einen Abzug und einen Spannmechanismus und sind prinzipiell durch Ausrichten aufs Ziel nund Auslösen des Abzugs abzuschießen." - } } diff --git a/src/packs/__source/talente-brw/sprachen/atak.json b/src/packs/_source/talente/atak.json similarity index 89% rename from src/packs/__source/talente-brw/sprachen/atak.json rename to src/packs/_source/talente/atak.json index ec1e5314..979394bd 100644 --- a/src/packs/__source/talente-brw/sprachen/atak.json +++ b/src/packs/_source/talente/atak.json @@ -1,9 +1,5 @@ { - "_id": "1irLbG8YJ8Q70nnK", - "_key": "!items!1irLbG8YJ8Q70nnK", - "type": "Skill", - "name": "Sprachen kennen: Atak", - "system": { + "name": "Sprachen kennen Atak", "gruppe": "Sprachen", "probe": [ "KL", @@ -14,5 +10,4 @@ ], "komplexität": "12", "talent": "Ähnlich wie bei den Schriften wird jede aventurische Sprache als eigenes Talent gewertet. Je der Aventurier beherrscht seine Muttersprache auf einem Startwert in Höhe seiner Klugheit–2, manche darüber hinaus noch eine Zweitsprache in Höhe von KL –4. Weitere Sprachen müssen dann explizit erlernt werden.
Um die Sprache identifizieren zu können, ist ein TaW von 1 nötig, um grundlegende Konzepte (“Ich Hunger”) verstehen und vermitteln zu können, ist ein TaW von 2 nötig; um einfache Sätze bilden und verstehen zu können, benötigt man einen TaW von 4. Ein TaW von 1/3 der Komplexität bedeutet recht fließenden Umgang mit allen üblichen grammatischen Konstruktionen und die Kenntnis auch seltener Wörter, während ein TaW in Höhe der halben Komplexität heißt, dass man die Sprache so gut wie ein durchschnittlicher Einheimischer beherrscht (wenn man auch immer noch einen leichten Akzent aufweist). Selbst philosophische oder magietheoretische Schriften gehen selten über eine Komplexität von 15 hinaus." - } } diff --git a/src/packs/__source/talente-brw/körperlich/athletik.json b/src/packs/_source/talente/athletik.json similarity index 90% rename from src/packs/__source/talente-brw/körperlich/athletik.json rename to src/packs/_source/talente/athletik.json index 30ecf027..5185c003 100644 --- a/src/packs/__source/talente-brw/körperlich/athletik.json +++ b/src/packs/_source/talente/athletik.json @@ -1,9 +1,5 @@ { - "_id": "c7TF5srKLVX2LY4e", - "_key": "!items!c7TF5srKLVX2LY4e", - "type": "Skill", "name": "Athletik", - "system": { "gruppe": "Körperlich", "probe": [ "GE", @@ -14,5 +10,4 @@ ], "behinderung": "*2", "talent": "Dies ist die Fähigkeit, Kraft, Gewandtheit und Konstitution auf einen Punkt zu konzentrieren und in den klassischen athletischen Disziplinen zu brillieren, nur selten, um damit den Lorbeerkranz in einer entsprechenden Veranstaltung zu erringen, sondern meist, weil es zum Berufsbild gehört, lange Strecken zu laufen oder schwere Lasten zu stemmen. Athletik ist der aktive Einsatz der körperlichen Fähigkeiten (im Gegensatz zum Talent Körperbeherrschung, das bei Reaktionen auf äußere Ereignisse zum Einsatz kommt). Athletik-Proben können abgelegt werden, um die Sprintgeschwindigkeit zu erhöhen, den Ausdauerverlust bei Langstreckenläufen zu vermindern, eine KK-Probe beim Gewichtheben zu unterstützen oder die übliche Sprungreichweite und -höhe zu vergrößern." - } } diff --git a/src/packs/__source/talente-brw/handwerk/bergbau.json b/src/packs/_source/talente/bergbau.json similarity index 87% rename from src/packs/__source/talente-brw/handwerk/bergbau.json rename to src/packs/_source/talente/bergbau.json index ed0c05e4..45f2d600 100644 --- a/src/packs/__source/talente-brw/handwerk/bergbau.json +++ b/src/packs/_source/talente/bergbau.json @@ -1,9 +1,5 @@ { - "_id": "LIxUN4SY7uqj716y", - "_key": "!items!LIxUN4SY7uqj716y", - "type": "Skill", "name": "Bergbau", - "system": { "gruppe": "Handwerk", "probe": [ "IN", @@ -14,5 +10,4 @@ ], "behinderung": "situationsbedingt", "talent": "Diese Talent umfasst das sachgerechte Anlegen von Tunneln und Schächten und deren Luftversorgung und Wasserentsorgung. Außerdem ermöglichen Kenntnisse im Bergbau die Beurteilung von unterirdischen Anlagen: Welche Wesen haben sie geschaffen? Wo wurden bauliche Veränderungen vorgenommen? Solche und ähnliche Fragen müssen vom Meister nach einer gelungener Bergbau-Probe des Helden beantwortet werden. Dass sich die meisten aventurischen Zwerge fast von Natur aus auf solche Kenntnisse verstehen, verwundert nicht." - } } diff --git a/src/packs/__source/talente-brw/gesellschaft/betören.json b/src/packs/_source/talente/betören.json similarity index 89% rename from src/packs/__source/talente-brw/gesellschaft/betören.json rename to src/packs/_source/talente/betören.json index 695e3f54..664a071b 100644 --- a/src/packs/__source/talente-brw/gesellschaft/betören.json +++ b/src/packs/_source/talente/betören.json @@ -1,9 +1,5 @@ { - "_id": "oMOnOMtQmZJBRney", - "_key": "!items!oMOnOMtQmZJBRney", - "type": "Skill", "name": "Betören", - "system": { "gruppe": "Gesellschaft", "probe": [ "IN", @@ -18,5 +14,4 @@ ], "behinderung": "-2", "talent": "Die Ausstrahlung auf das andere Geschlecht der eigenen Spezies wird durch dieses Talent bewertet. Eine gelungene Talentprobe besagt, dass das ‘Opfer’ der Annäherungsversuche dem Helden gewogen ist. Was die betörte Persen harten Nüssen beiderlei Geschlechts kann der Meister die Betören-Probe mit Zuschlägen versehen. Will ein Held versuchen, ein Mitglied einer anderen Art (speziell zwischen Elfen und Zwergen) zu betören, dann sollte der Meister deutliche Probenzuschläge verlangen; weniger heftige Zuschläge sind für Betörungsversuche gegenüber dem eigenen Geschlecht erforderlich." - } } diff --git a/src/packs/__source/talente-brw/kampf/bogen.json b/src/packs/_source/talente/bogen.json similarity index 80% rename from src/packs/__source/talente-brw/kampf/bogen.json rename to src/packs/_source/talente/bogen.json index 60348f9d..be53fca5 100644 --- a/src/packs/__source/talente-brw/kampf/bogen.json +++ b/src/packs/_source/talente/bogen.json @@ -1,10 +1,5 @@ { - "_id": "Msv0BWdwlNlF2ETU", - "_key": "!items!Msv0BWdwlNlF2ETU", - "type": "Skill", "name": "Bogen", - "system": { "gruppe": "Kampf", "talent": "Bögen sind die Waffe der Wahl für die Bewohner von Steppen, Wüsten und Auen, weswegen sowohl die Elfen wie auch die Orks, die Weidener wie auch die Novadis für ihre Künste mit dem Bogen bekannt sind. Die Größe dieser Schusswaffen reicht vom kompakten Kurzbogen der Novadis bis zum Weidener Langbogen. Der korrekte Umgang mit Pfeil und Bogen erfordert einiges an Übung." - } } diff --git a/src/packs/__source/talente-brw/handwerk/bogenbau.json b/src/packs/_source/talente/bogenbau.json similarity index 94% rename from src/packs/__source/talente-brw/handwerk/bogenbau.json rename to src/packs/_source/talente/bogenbau.json index cf103110..3b8b89ee 100644 --- a/src/packs/__source/talente-brw/handwerk/bogenbau.json +++ b/src/packs/_source/talente/bogenbau.json @@ -1,9 +1,5 @@ { - "_id": "FfCHnaMJj7yVr04i", - "_key": "!items!FfCHnaMJj7yVr04i", - "type": "Skill", "name": "Bogenbau", - "system": { "gruppe": "Handwerk", "probe": [ "KL", @@ -18,5 +14,4 @@ ], "behinderung": "situationsbedingt", "talent": "Bogenbauer und Armbruster beschäftigen sich mit der Herstellung von Schusswaffen und sind die einzigen, die auf Spannung basierende, Projektile verschießende Fernwaffen (und die dazugehörigen Projektile) bauen können. Natürlich können sie auch die Qualität solcher Waffen einschätzen. Im Band Wege des Schwerts stellen wir Ihnen ein detailliertes System zum Bau von Schusswaffen vor; im Rahmen dieser Basisregeln gilt folgende Vorgehensweise: Um einen Bogen oder eine Armbrust herzustellen, benötigt man die richtigen Materialien für Bogen und Sehne (zusätzlich bei der Armbrust für Schaft und Abzug) und muss eine bestimmte Anzahl von Talentproben ablegen. Jede Probe dauert einen halben Tag; bei Misslingen einer Probe kann man versuchen zu retten, was noch zu retten ist, und eine Probe ablegen, die um den doppelten Betrag erschwert ist. Misslingt auch diese, ist die gesamte Waffe missraten und das Material verdorben.
Um Pfeile oder Bolzen herzustellen, ist neben geeignetem Holz und vorhandenen Spitzen noch eine Bogenbau-Probe nötig, um die Spitze und vorallem die Befiederung korrekt anzubringen. Der Zuschlag auf der Probe ist der Tabelle zu entnehmen. Jede Probe zum Herstellen eines Geschosses dauert eine halbe Stunde.
TypHerstellenGeschoss
Kurzbogen4 ProbenProbe
Langbogen6 ProbenProbe +1
Kriegsbogen7 Proben2 Proben + 3
Leichte Armbrust4 Proben2 Proben -1
Schwere Armbrust12 Proben2 Proben +1
" - } } diff --git a/src/packs/__source/talente-brw/handwerk/boote-fahren.json b/src/packs/_source/talente/boote-fahren.json similarity index 87% rename from src/packs/__source/talente-brw/handwerk/boote-fahren.json rename to src/packs/_source/talente/boote-fahren.json index c9011664..9e4a486a 100644 --- a/src/packs/__source/talente-brw/handwerk/boote-fahren.json +++ b/src/packs/_source/talente/boote-fahren.json @@ -1,9 +1,5 @@ { - "_id": "usmU8Ig2qragLaNd", - "_key": "!items!usmU8Ig2qragLaNd", - "type": "Skill", "name": "Boote Fahren", - "system": { "gruppe": "Handwerk", "probe": [ "GE", @@ -14,5 +10,4 @@ ], "behinderung": "situationsbedingt", "talent": "Alle Talente, die zur Fortbewegung eines kleinen Wasserfahrzeuges dienen - Rudern, Segeln, Paddeln, Staken - sind hier zusammengefasst. Der Meister sollte es den Helden gestatten, ohne Probe gemächlich über einen stillen Teich zu rudern - irgendwie wird der Held schon ans andere Ufer gelangen. Segeln, Wildwasserfahrten und ähnliche Aktionen sind nur mit gelungener Probe möglich. Für die Handhabung größerer Segel- oder Ruderschiffe sind das Talent SEEFAHRT und eine gröere Anzahl von Matrosen nötig." - } } diff --git a/src/packs/__source/talente-brw/sprachen/bosparano.json b/src/packs/_source/talente/bosparano.json similarity index 89% rename from src/packs/__source/talente-brw/sprachen/bosparano.json rename to src/packs/_source/talente/bosparano.json index 0c8e9800..4860ab5c 100644 --- a/src/packs/__source/talente-brw/sprachen/bosparano.json +++ b/src/packs/_source/talente/bosparano.json @@ -1,9 +1,5 @@ { - "_id": "wblRtqxrcKlv1spJ", - "_key": "!items!wblRtqxrcKlv1spJ", - "type": "Skill", - "name": "Sprachen kennen: Bosparano", - "system": { + "name": "Sprachen kennen Bosparano", "gruppe": "Sprachen", "probe": [ "KL", @@ -14,5 +10,4 @@ ], "komplexität": "21", "talent": "Ähnlich wie bei den Schriften wird jede aventurische Sprache als eigenes Talent gewertet. Je der Aventurier beherrscht seine Muttersprache auf einem Startwert in Höhe seiner Klugheit–2, manche darüber hinaus noch eine Zweitsprache in Höhe von KL –4. Weitere Sprachen müssen dann explizit erlernt werden.
Um die Sprache identifizieren zu können, ist ein TaW von 1 nötig, um grundlegende Konzepte (“Ich Hunger”) verstehen und vermitteln zu können, ist ein TaW von 2 nötig; um einfache Sätze bilden und verstehen zu können, benötigt man einen TaW von 4. Ein TaW von 1/3 der Komplexität bedeutet recht fließenden Umgang mit allen üblichen grammatischen Konstruktionen und die Kenntnis auch seltener Wörter, während ein TaW in Höhe der halben Komplexität heißt, dass man die Sprache so gut wie ein durchschnittlicher Einheimischer beherrscht (wenn man auch immer noch einen leichten Akzent aufweist). Selbst philosophische oder magietheoretische Schriften gehen selten über eine Komplexität von 15 hinaus." - } } diff --git a/src/packs/__source/talente-brw/wissen/brett-kartenspiel.json b/src/packs/_source/talente/brett-kartenspiel.json similarity index 84% rename from src/packs/__source/talente-brw/wissen/brett-kartenspiel.json rename to src/packs/_source/talente/brett-kartenspiel.json index ee2735c6..6e8fbd97 100644 --- a/src/packs/__source/talente-brw/wissen/brett-kartenspiel.json +++ b/src/packs/_source/talente/brett-kartenspiel.json @@ -1,9 +1,5 @@ { - "_id": "ydmXvfh98fVJ0T7R", - "_key": "!items!ydmXvfh98fVJ0T7R", - "type": "Skill", "name": "Brett-/Kartenspiel", - "system": { "gruppe": "Wissen", "probe": [ "KL", @@ -13,5 +9,4 @@ "voraussetzung": [ ], "talent": "Die Kenntnis der verschiedensten Brettspiele (wie z.B. Urdas, Garadan, das thorwalsche Hneftafl oder das weit verbreitete und vielfach variierte tulamidische Kamelspiel) sowie Kartenspiele (hier namentlich das verbreitete Boltan- oder Fünfas-Spiel) gehören zu dieser Fertigkeit, die nicht nur Regelkunde, sondern auch Spieltechnik, Gewinnkombinationen, Stellungseinschätzung und dergleichen mehr beinhaltet." - } } diff --git a/src/packs/__source/talente-brw/kampf/dolche.json b/src/packs/_source/talente/dolche.json similarity index 80% rename from src/packs/__source/talente-brw/kampf/dolche.json rename to src/packs/_source/talente/dolche.json index 7709ec0c..9d2f60b0 100644 --- a/src/packs/__source/talente-brw/kampf/dolche.json +++ b/src/packs/_source/talente/dolche.json @@ -1,10 +1,5 @@ { - "_id": "Msv0BWdwlNlF2EtU", - "_key": "!items!Msv0BWdwlNlF2EtU", - "type": "Skill", "name": "Dolche", - "system": { "gruppe": "Kampf", "talent": "Hierzu gehören alle zum Stich (und so gut wie nicht zur Parade) geeigneten Klingenwaffen mit einer maximalen Gesamtlänge von einem halben Schritt – also vom als Waffe eingesetzten Essmesser bis hin zum Langdolch, dessen größte Exemplare fast schon als Kurzschwert gelten können. Fast alle Dolche haben eine gerade, beidseitig angeschliffene Klinge." - } } diff --git a/src/packs/__source/talente-brw/gesellschaft/etikette.json b/src/packs/_source/talente/etikette.json similarity index 90% rename from src/packs/__source/talente-brw/gesellschaft/etikette.json rename to src/packs/_source/talente/etikette.json index 16d10603..d6dfcb1b 100644 --- a/src/packs/__source/talente-brw/gesellschaft/etikette.json +++ b/src/packs/_source/talente/etikette.json @@ -1,9 +1,5 @@ { - "_id": "wSQAMG9yqfjdjrP9", - "_key": "!items!wSQAMG9yqfjdjrP9", - "type": "Skill", "name": "Etikette", - "system": { "gruppe": "Gesellschaft", "probe": [ "KL", @@ -14,5 +10,4 @@ ], "behinderung": "-2", "talent": "So mancher Held kann unversehens in feine Gesellschaft geraten – sei es, weil er als Belohnung für eine besondere Tat zu einem Hofball oder einer Audienz eingeladen wird, sei es, weil er am Herzogenhof einem Schurken nachspioniert. Wie aber lautet die korrekte Anredeform für die Tochter des Markgrafen, welcher Anwesende wird zuerst gegrüßt, welches Wappen trägt das Haus Sturmfels-Mersingen? Aber auch: Welche Weine gelten momentan als schick? Welche Mode trägt man am Horashof? Ist es geschmacklos, süße Pastetchen nach Hammelaufläufen zu reichen? Da der Spieler all diese Dinge unmöglich im Kopf behalten kann, sollte sein Held sich möglichst auf dem Feld der Etikette auskennen. Etikette-Proben können vom Meister verdeckt gewürfelt werden." - } } diff --git a/src/packs/__source/talente-brw/handwerk/fahrzeug-lenken.json b/src/packs/_source/talente/fahrzeug-lenken.json similarity index 89% rename from src/packs/__source/talente-brw/handwerk/fahrzeug-lenken.json rename to src/packs/_source/talente/fahrzeug-lenken.json index 41814228..bf653666 100644 --- a/src/packs/__source/talente-brw/handwerk/fahrzeug-lenken.json +++ b/src/packs/_source/talente/fahrzeug-lenken.json @@ -1,9 +1,5 @@ { - "_id": "LbFLcgogaKsaMyAZ", - "_key": "!items!LbFLcgogaKsaMyAZ", - "type": "Skill", "name": "Fahrzeug Lenken", - "system": { "gruppe": "Handwerk", "probe": [ "IN", @@ -14,5 +10,4 @@ ], "behinderung": "situationsbedingt", "talent": "Die Art des Fahrzeugs und vor allem die Anzahl der Zugtiere bestimmen die Schwierigkeiten einer Probe. Um z.B. eine vierspänige Rennkutsche auch bei geringem Tempo einigermaßen auf der Straße zu halten, muss eine Probe +4 gelingen, ein von einem geduldigen Maultier gezogener Lastkarren fährt sich da schon bedeutend gemütlicher. Verschärfte Proben werden fällig, wenn gewagte Manöver ausgeführt werden sollen: im scharfen Galopp ein Stadttor passieren oder ein von sechs durchgehend Darpatrindern gezogenes Brauereigespann einbremsen. Ebenfalls erschwert ist das Steuern ungewohnter Fahrzeuge wie Hundeschlitten für solche Helden, die bislang nur Erfahrung mit Pferdekutschen haben." - } } diff --git a/src/packs/__source/talente-brw/natur/fallenstellen.json b/src/packs/_source/talente/fallenstellen.json similarity index 90% rename from src/packs/__source/talente-brw/natur/fallenstellen.json rename to src/packs/_source/talente/fallenstellen.json index 28f794bf..9f1fdac2 100644 --- a/src/packs/__source/talente-brw/natur/fallenstellen.json +++ b/src/packs/_source/talente/fallenstellen.json @@ -1,9 +1,5 @@ { - "_id": "ftU7Zsu0iBrUqb8A", - "_key": "!items!ftU7Zsu0iBrUqb8A", - "type": "Skill", "name": "Fallenstellen", - "system": { "gruppe": "Natur", "probe": [ "KL", @@ -13,5 +9,4 @@ "voraussetzung": [ ], "talent": "Dieses Talent umfasst das Konstruieren, geschickte Platzieren und Tarnen einer Wildfalle (Schlinge, kleine Grube, zuschnappende Äste). Eine gelungene Probe bedeutet, dass ein Tier, das die Falle passiert, sich in ihr fängt; ob tatsächlich eine Beute in die Nähe der Falle kommt, ist natürlich von der Umgebung abhängig – dies kann der Meister vom Zufall abhängig machen. Ein Fallensteller mit einem Talentwert von mindestens 6 ist in der Lage, Fallen anzulegen, die auch von intelligenten Wesen kaum entdeckt werden können; das Entdecken solcher Fallen wird über entsprechend erschwerte Sinnenschärfe-Proben geregelt, wobei natürlich ein hoher Wert in Fallenstellen auch zum Entdecken hilfreich ist. Fallenkonstruktionen in Gebäuden, Stollen usw. gehören in den Bereich Mechanik." - } } diff --git a/src/packs/__source/talente-brw/handwerk/falschspiel.json b/src/packs/_source/talente/falschspiel.json similarity index 90% rename from src/packs/__source/talente-brw/handwerk/falschspiel.json rename to src/packs/_source/talente/falschspiel.json index c3daff6e..13647904 100644 --- a/src/packs/__source/talente-brw/handwerk/falschspiel.json +++ b/src/packs/_source/talente/falschspiel.json @@ -1,9 +1,5 @@ { - "_id": "rCpbo6Hwvu3Poxp9", - "_key": "!items!rCpbo6Hwvu3Poxp9", - "type": "Skill", "name": "Falschspiel", - "system": { "gruppe": "Handwerk", "probe": [ "MU", @@ -18,5 +14,4 @@ ], "behinderung": "situationsbedingt", "talent": "Je nach Erfolg der Probe kann der Held entweder sein eingesetztes Geld vervielfachen oder (bei einem ausgespielten Glücksspiel) Würfelergebnisse zu seinen Gunsten ändern, neue Karten ziehen und dergleichen. Das Scheitern einer Probe kann den Helden in arge Bedrängnis bringen (notorische Falschspieler genießen überall in Aventurien eine extrem kurze Lebenserwartung). In Kombination mit einer Sinnenschärfe-Probe kann ein hohes Falschspiel-Talent auch dazu dienen, eventuelle Mogeleien zu enttarnen. (Aber auch hier ist absolute Vorsicht angeraten: Aus oben genannten Gründen ist eine falsche Bezichtigung meist Grund genug für eine Duellforderung.) Falschspiel-Proben können natürlich auch vom Meister verdeckt gewürfelt werden." - } } diff --git a/src/packs/__source/talente-brw/kampf/fechtwaffen.json b/src/packs/_source/talente/fechtwaffen.json similarity index 79% rename from src/packs/__source/talente-brw/kampf/fechtwaffen.json rename to src/packs/_source/talente/fechtwaffen.json index bfe43269..78626457 100644 --- a/src/packs/__source/talente-brw/kampf/fechtwaffen.json +++ b/src/packs/_source/talente/fechtwaffen.json @@ -1,10 +1,5 @@ { - "_id": "YeCewrwiq59JNcXl", - "_key": "!items!YeCewrwiq59JNcXl", - "type": "Skill", "name": "Fechtwaffen", - "system": { "gruppe": "Kampf", "talent": "Dies sind schmale, fast ausschließlich zum Stich geeignete Klingenwaffen von knapp unter einem Schritt Klingenlänge mit meist reich verzierten Griffkörben, Parierbügeln oder kompliziert verdrehten Parierstangen. Sie sind elegant, schnell und gelten den einen als überaus ‘modern’, den anderen als ‘lächerliche Geckenwaffen’." - } } diff --git a/src/packs/__source/talente-brw/handwerk/feinmechanik.json b/src/packs/_source/talente/feinmechanik.json similarity index 91% rename from src/packs/__source/talente-brw/handwerk/feinmechanik.json rename to src/packs/_source/talente/feinmechanik.json index 1e5e849e..bc5c0279 100644 --- a/src/packs/__source/talente-brw/handwerk/feinmechanik.json +++ b/src/packs/_source/talente/feinmechanik.json @@ -1,9 +1,5 @@ { - "_id": "aTCyxWYkNfnI7XGi", - "_key": "!items!aTCyxWYkNfnI7XGi", - "type": "Skill", "name": "Feinmechanik", - "system": { "gruppe": "Handwerk", "probe": [ "KL", @@ -18,5 +14,4 @@ ], "behinderung": "situationsbedingt", "talent": "Grundlage dieser Tätigkeit ist die Fein- oder Goldschmiedekunst, mit der man Schmuck und andere filigrane Arbeiten aus Gold, Silber, Mondsilber und anderen Edelmetallen herstellen kann. DAss sich Feinmechaniker daher auch mit Wert und Qualität von Schmuckwaren auskennen, verstehen sich von selbst. Der nächste Schritt sind Gravuren in verschiedenen Metallen (für Schilder und Medaillen bis hin zum künstlerischen Kupferstich), der Guss von kleinen und kleinsten Formen (für Siegel- oder Prägestöcke und auch für deren Fälschung) und schließlich der Zusammenbau all dieser Teile zu Uhrwerken, kleinsten Schlössern, winzigen Armbrustmechanismen oder Spieluhren. Feinmechaniker arbeiten meist eng mit Steinscheidern und Juwelieren zusammen, wenn sie diese Kunst nicht gar selbst beherrschen." - } } diff --git a/src/packs/__source/talente-brw/natur/fesseln-entfesseln.json b/src/packs/_source/talente/fesseln-entfesseln.json similarity index 92% rename from src/packs/__source/talente-brw/natur/fesseln-entfesseln.json rename to src/packs/_source/talente/fesseln-entfesseln.json index 33282ad4..f9d15c15 100644 --- a/src/packs/__source/talente-brw/natur/fesseln-entfesseln.json +++ b/src/packs/_source/talente/fesseln-entfesseln.json @@ -1,9 +1,5 @@ { - "_id": "4Dgr5pw13OaFOLEs", - "_key": "!items!4Dgr5pw13OaFOLEs", - "type": "Skill", "name": "Fesseln/Entfesseln", - "system": { "gruppe": "Natur", "probe": [ "FF", @@ -14,5 +10,4 @@ ], "behinderung": "situationsbedingt", "talent": "Dieses Talent beinhaltet sowohl das Wissen um unterschiedliche Knotenformen für unterschiedliche Zwecke und die Fähigkeit, diese Knoten auch stabil und haltbar zu schnüren, als auch die Fähigkeit, Schwachstellen von Verschnürungen zu erkennen und sich aus eventuellen Fesselungen zu befreien.
Eine Fesseln-Probe ist nur dann erforderlich, wenn der Held eine zuverlässige Fessel, die mindestens über mehrere Stunden halten soll, anlegen will. Aus einer mit einer Talentprobe verstärkten Fessel kann sich ein Opfer folgendermaßen befreien: Der Fesselnde gibt Punkte in Höhe seiner doppelten übrig behaltenen Fesseln-TaP vor, die dann mit offenen Proben und den übrig behaltenen TaP des Entfesselnden abgebaut werden können; hierbei ist jede halbe Stunde eine Probe erlaubt. (Mögliche Ausweich-Talente zum Entfesseln, wenn ein Held dieses Talent nicht hat, sind Gaukeleien, Taschendiebstahl oder Ringen.) Neben jagderfahrenen Aventuriern sind viele Seefahrer, speziell auch die Thorwaler, Meister der Fesselkunst, weil sie eine Vielzahl komplizierter Schlingen und Knoten knüpfen können." - } } diff --git a/src/packs/__source/talente-brw/natur/fischen-angeln.json b/src/packs/_source/talente/fischen-angeln.json similarity index 87% rename from src/packs/__source/talente-brw/natur/fischen-angeln.json rename to src/packs/_source/talente/fischen-angeln.json index a127e28f..c1e6dba2 100644 --- a/src/packs/__source/talente-brw/natur/fischen-angeln.json +++ b/src/packs/_source/talente/fischen-angeln.json @@ -1,9 +1,5 @@ { - "_id": "VLsyWPJSGSm9kyyO", - "_key": "!items!VLsyWPJSGSm9kyyO", - "type": "Skill", "name": "Fischen/Angeln", - "system": { "gruppe": "Natur", "probe": [ "IN", @@ -14,5 +10,4 @@ ], "behinderung": "situationsbedingt", "talent": "Man benötigt mindestens Talentwert 1, um beurteilen zu können, ob es sich in einem bestimmten Gewässer überhaupt lohnt, eine Angel (ein Netz, eine Reuse) auszuwerfen. Eine gelungene Probe bedeutet nicht nur, dass der Angler irgendetwas gefangen hat, sondern dass der Köder so geschickt gewählt wurde, dass ein ausreichend großer Speisefisch angebissen hat. Pro übrig behaltenem Talentpunkt kann man davon ausgehen, dass der Angler eine halbe Ration essbaren Fisch (insgesamt jedoch mindestens eine Ration bei gelungener Probe) gefangen hat." - } } diff --git a/src/packs/__source/talente-brw/handwerk/fleischer.json b/src/packs/_source/talente/fleischer.json similarity index 90% rename from src/packs/__source/talente-brw/handwerk/fleischer.json rename to src/packs/_source/talente/fleischer.json index 3ff5d994..1b890d48 100644 --- a/src/packs/__source/talente-brw/handwerk/fleischer.json +++ b/src/packs/_source/talente/fleischer.json @@ -1,9 +1,5 @@ { - "_id": "e2rEB8x4gSiZ90f6", - "_key": "!items!e2rEB8x4gSiZ90f6", - "type": "Skill", "name": "Fleischer", - "system": { "gruppe": "Handwerk", "probe": [ "KL", @@ -14,5 +10,4 @@ ], "behinderung": "situationsbedingt", "talent": "Ein Schlachter, Fleischer oder Metzger weiß, wie man Nutztiere sinnvoll tötet, möglichst viele verwertbare Materialien erhält und daraus haltbare Schinken, Wurstwaren und Bratenstücke herstellt. Er kann beurteilen, wie lang Fleisch noch haltbar ist und welchen Preis es auf dem Markt erzielt. Zudem kennt er sich ähnlich wie der Anatom mit verwundbaren Punkten aus und richtet deswegen im Kampf gegen Wesen, die seinem üblichen Schlachtvieh auch nur grob ähneln, 1 TP mehr an als ein unkundiger Kämpfer, wenn er über einen Fleischer-TaW von 10 oder mehr verfügt (Die Zusatzpunkte von Anatomie und Fleische werden nicht aufaddiert: Auch ein Anatomie-beschlagener Fleischer erhält keine 2 zusätzlichen TP im waffenlosen Kampf.)" - } } diff --git a/src/packs/__source/talente-brw/natur/fährtensuchen.json b/src/packs/_source/talente/fährtensuchen.json similarity index 91% rename from src/packs/__source/talente-brw/natur/fährtensuchen.json rename to src/packs/_source/talente/fährtensuchen.json index 31f4eb4a..b4fa15ea 100644 --- a/src/packs/__source/talente-brw/natur/fährtensuchen.json +++ b/src/packs/_source/talente/fährtensuchen.json @@ -1,9 +1,5 @@ { - "_id": "Duv1FXQe1W7KMdnq", - "_key": "!items!Duv1FXQe1W7KMdnq", - "type": "Skill", "name": "Fährtensuchen", - "system": { "gruppe": "Natur", "probe": [ "KL", @@ -13,5 +9,4 @@ "voraussetzung": [ ], "talent": "Das Suchen und Verfolgen einer Fährte wird durch Proben auf dieses Talent geregelt. Die Schwierigkeit, einer Fährte zu folgen, hängt natürlich von Bodenbeschaffenheit, Lichtverhältnissen und ähnlichem ab. Der Spielleiter sollte bei jedem Terrainwechsel eine Probe verlangen, die von –7 (frische Schneedecke) bis zu +12 (kahler Fels) variieren kann.
Um eine Spur über eine längere Strecke zu verfolgen, wird die Probe mit KL, IN und KO abgelegt; sollen an einer begrenzten Stelle möglichst viele Informationen aus den Spuren gewonnen werden, dann sind KL und zweimal IN die richtigen Eigenschaften.
Bei bestimmten Bodentypen (wie z.B. einem staubfreien Marmorfußboden) braucht der Meister keine Probe zu erlauben. Die Anzahl der übrig behaltenen Talentpunkte bestimmt die Menge der Informationen, die man erhält. Fährtensuchen-Proben der Helden können vom Meister verdeckt gewürfelt werden." - } } diff --git a/src/packs/__source/talente-brw/sprachen/füchsisch.json b/src/packs/_source/talente/füchsisch.json similarity index 89% rename from src/packs/__source/talente-brw/sprachen/füchsisch.json rename to src/packs/_source/talente/füchsisch.json index 8a665c82..1df54584 100644 --- a/src/packs/__source/talente-brw/sprachen/füchsisch.json +++ b/src/packs/_source/talente/füchsisch.json @@ -1,9 +1,5 @@ { - "_id": "FnXfK0BNAk2rf8Iz", - "_key": "!items!FnXfK0BNAk2rf8Iz", - "type": "Skill", - "name": "Sprachen kennen: Füchsisch", - "system": { + "name": "Sprachen kennen Füchsisch", "gruppe": "Sprachen", "probe": [ "KL", @@ -14,5 +10,4 @@ ], "komplexität": "12", "talent": "Ähnlich wie bei den Schriften wird jede aventurische Sprache als eigenes Talent gewertet. Je der Aventurier beherrscht seine Muttersprache auf einem Startwert in Höhe seiner Klugheit–2, manche darüber hinaus noch eine Zweitsprache in Höhe von KL –4. Weitere Sprachen müssen dann explizit erlernt werden.
Um die Sprache identifizieren zu können, ist ein TaW von 1 nötig, um grundlegende Konzepte (“Ich Hunger”) verstehen und vermitteln zu können, ist ein TaW von 2 nötig; um einfache Sätze bilden und verstehen zu können, benötigt man einen TaW von 4. Ein TaW von 1/3 der Komplexität bedeutet recht fließenden Umgang mit allen üblichen grammatischen Konstruktionen und die Kenntnis auch seltener Wörter, während ein TaW in Höhe der halben Komplexität heißt, dass man die Sprache so gut wie ein durchschnittlicher Einheimischer beherrscht (wenn man auch immer noch einen leichten Akzent aufweist). Selbst philosophische oder magietheoretische Schriften gehen selten über eine Komplexität von 15 hinaus." - } } diff --git a/src/packs/__source/talente-brw/sprachen/garethi.json b/src/packs/_source/talente/garethi.json similarity index 89% rename from src/packs/__source/talente-brw/sprachen/garethi.json rename to src/packs/_source/talente/garethi.json index 67f5ccf3..7ab162ee 100644 --- a/src/packs/__source/talente-brw/sprachen/garethi.json +++ b/src/packs/_source/talente/garethi.json @@ -1,9 +1,5 @@ { - "_id": "Uy5KENRZ4MYsyezt", - "_key": "!items!Uy5KENRZ4MYsyezt", - "type": "Skill", - "name": "Sprachen kennen: Garethi", - "system": { + "name": "Sprachen kennen Garethi", "gruppe": "Sprachen", "probe": [ "KL", @@ -14,5 +10,4 @@ ], "komplexität": "18", "talent": "Ähnlich wie bei den Schriften wird jede aventurische Sprache als eigenes Talent gewertet. Je der Aventurier beherrscht seine Muttersprache auf einem Startwert in Höhe seiner Klugheit–2, manche darüber hinaus noch eine Zweitsprache in Höhe von KL –4. Weitere Sprachen müssen dann explizit erlernt werden.
Um die Sprache identifizieren zu können, ist ein TaW von 1 nötig, um grundlegende Konzepte (“Ich Hunger”) verstehen und vermitteln zu können, ist ein TaW von 2 nötig; um einfache Sätze bilden und verstehen zu können, benötigt man einen TaW von 4. Ein TaW von 1/3 der Komplexität bedeutet recht fließenden Umgang mit allen üblichen grammatischen Konstruktionen und die Kenntnis auch seltener Wörter, während ein TaW in Höhe der halben Komplexität heißt, dass man die Sprache so gut wie ein durchschnittlicher Einheimischer beherrscht (wenn man auch immer noch einen leichten Akzent aufweist). Selbst philosophische oder magietheoretische Schriften gehen selten über eine Komplexität von 15 hinaus." - } } diff --git a/src/packs/__source/talente-brw/gesellschaft/gassenwissen.json b/src/packs/_source/talente/gassenwissen.json similarity index 91% rename from src/packs/__source/talente-brw/gesellschaft/gassenwissen.json rename to src/packs/_source/talente/gassenwissen.json index 14ff5b4e..e027bd55 100644 --- a/src/packs/__source/talente-brw/gesellschaft/gassenwissen.json +++ b/src/packs/_source/talente/gassenwissen.json @@ -1,9 +1,5 @@ { - "_id": "Msv0BWdwlNlF2ETu", - "_key": "!items!Msv0BWdwlNlF2ETu", - "type": "Skill", "name": "Gassenwissen", - "system": { "gruppe": "Gesellschaft", "probe": [ "KL", @@ -14,5 +10,4 @@ ], "behinderung": "-4", "talent": "Dieses Talent ermöglicht eine rasche Orientierung in einer fremden Stadt. Erfolgreiche Pro­ben veranlassen den Meis­ter zu Antworten auf Fragen wie die folgenden: Wo treffe ich voraussichtlich auf Gardisten? Wo finde ich einen preiswerten Unterschlupf? Wo kann ich hier am leichtesten meinem Steckenpferd (der Beutelschneiderei) nachgehen? In welchem Tempel hat man am ehesten ein Herz für eine arme Seele, die sich für eine kräftige Mahlzeit zu jedem beliebigen Gott bekennt? Auch städtebauliche Fragen können mit diesem Talent beantwortet werden: Wie erkenne ich einen Eingang zu einem für Menschen passend großen Kanalisationsschacht? Ist in dieser Stadt mit Sackgassen oder abgeschlossenen Hinterhöfen zu rechnen? Ebenfalls hilfreich ist in diesem Zusammenhang die Sonderfertigkeit Ortskenntnis, aber auch die Vorteile Innerer Kompass bzw. Richtungssinn. Proben auf Gassenwissen können vom Meister verdeckt gewürfelt werden." - } } diff --git a/src/packs/__source/talente-brw/körperlich/gaukeleien.json b/src/packs/_source/talente/gaukeleien.json similarity index 85% rename from src/packs/__source/talente-brw/körperlich/gaukeleien.json rename to src/packs/_source/talente/gaukeleien.json index 740bd384..50cf520f 100644 --- a/src/packs/__source/talente-brw/körperlich/gaukeleien.json +++ b/src/packs/_source/talente/gaukeleien.json @@ -1,9 +1,5 @@ { - "_id": "3nPtwxJ7X41qqPTO", - "_key": "!items!3nPtwxJ7X41qqPTO", - "type": "Skill", "name": "Gaukeleien", - "system": { "gruppe": "Körperlich", "probe": [ "MU", @@ -14,5 +10,4 @@ ], "behinderung": "*2", "talent": "Unter diesem Stichwort sind alle Arten von kleinen Kunststückchen zusammengefasst, mit denen ein Gaukler auf dem Jahrmarkt sein Geld verdienen und als Gefangener von skrupellosen Banditen möglicherweise sein Leben retten kann: Jonglieren, Bauchreden, Feuerschlucken usw. Auch solche ‘Nebenverdienste’ wie Hütchenspiele fallen unter dieses Talent, nicht jedoch das Falschspiel mit Karten und Würfeln." - } } diff --git a/src/packs/__source/talente-brw/wissen/geographie.json b/src/packs/_source/talente/geographie.json similarity index 88% rename from src/packs/__source/talente-brw/wissen/geographie.json rename to src/packs/_source/talente/geographie.json index ea46991d..31ee1843 100644 --- a/src/packs/__source/talente-brw/wissen/geographie.json +++ b/src/packs/_source/talente/geographie.json @@ -1,9 +1,5 @@ { - "_id": "GCiiua4lepr8YsYR", - "_key": "!items!GCiiua4lepr8YsYR", - "type": "Skill", "name": "Geographie", - "system": { "gruppe": "Wissen", "probe": [ "KL", @@ -13,5 +9,4 @@ "voraussetzung": [ ], "talent": "Die Landeskunde ist ein Fach, das man aus Schriften mühselig einpauken oder auf weiten Reisen quasi von selbst erlernen kann, wobei die praktische Erfahrung der theoretischen bei weitem vorzuziehen ist. Bei einer gelungenen Geographie-Probe sollte der Spielleiter dem Spieler-Helden die passenden geographischen Fakten (zu Landschaftsform, Klima, Böden, zu schiffbaren Flüssen und gangbaren Pässen ...) mitteilen. Mit einem hohen Geographie-Wert kennt man zwar auch die grundsätzlichen Fakten zu den Bewohnern einer Region, jedoch sind ohne eine passende Kulturkunde-Sonderfertigkeit alle Geographie-Proben zur Klärung kultureller Detailfragen erschwert." - } } diff --git a/src/packs/__source/talente-brw/handwerk/gerber-kürschner.json b/src/packs/_source/talente/gerber-kürschner.json similarity index 86% rename from src/packs/__source/talente-brw/handwerk/gerber-kürschner.json rename to src/packs/_source/talente/gerber-kürschner.json index c1ecfc24..060ef720 100644 --- a/src/packs/__source/talente-brw/handwerk/gerber-kürschner.json +++ b/src/packs/_source/talente/gerber-kürschner.json @@ -1,9 +1,5 @@ { - "_id": "0oad2z7EgAiwKrLM", - "_key": "!items!0oad2z7EgAiwKrLM", - "type": "Skill", "name": "Gerber/Kürschner", - "system": { "gruppe": "Handwerk", "probe": [ "KL", @@ -14,5 +10,4 @@ ], "behinderung": "situationsbedingt", "talent": "Dieses Talent dient dazu, die Haut oder auch das Fell von Tieren haltbar und dabei ansehnlich zu machen und zu Lederwaren oder Pelzen weiterzuvearbeiten, was oft eine ziemlich unappetitliche Angelegenheit ist, die einen starken Magen und eine Art intuitiver Alchimie erfordert. Gerber und Kürschner sind in der Lage, Pelz- und Lederwaren nach Wert und Qualität zu beurteilen. Eine bisweilen ausgeübte Spezialisierung ist die Präparation von Trophäen aus Tieren aller Art." - } } diff --git a/src/packs/__source/talente-brw/wissen/geschichtswissen.json b/src/packs/_source/talente/geschichtswissen.json similarity index 90% rename from src/packs/__source/talente-brw/wissen/geschichtswissen.json rename to src/packs/_source/talente/geschichtswissen.json index 67d7d59b..73d26801 100644 --- a/src/packs/__source/talente-brw/wissen/geschichtswissen.json +++ b/src/packs/_source/talente/geschichtswissen.json @@ -1,9 +1,5 @@ { - "_id": "RvK46LnZBwJ6Xf5P", - "_key": "!items!RvK46LnZBwJ6Xf5P", - "type": "Skill", "name": "Geschichtswissen", - "system": { "gruppe": "Wissen", "probe": [ "KL", @@ -13,5 +9,4 @@ "voraussetzung": [ ], "talent": "Die schriftlich niedergelegte Geschichte Aventuriens beträgt mittlerweile bereits drei-tausend Jahre, aber die Erzählungen vieler Völker reichen deutlich weiter in die Vergangenheit – die Zeitalter davor, von denen nur noch verwitterte Ruinen künden, gar nicht eingerechnet. Da die meisten Helden immer wieder einmal mit der Vergangenheit ihrer Welt konfrontiert werden – weil sie zum Beispiel die Toten nicht in ihrer Gruft ruhen lassen können –, wird es oft von Nutzen sein, einen geschichtsbewanderten Gefährten in der Nähe zu wissen. Historie ist eines der wenigen Wissensgebiete, das sehr stark auf schriftlichen Quellen beruht, und nicht nur das Entziffern, sondern auch das Einordnen und Bewerten alter Texte sind wichtiges Handwerkszeug für den Geschichtskundigen. Geschichtswissen ist ein Talent, das bei fehlender Kulturkunde erschwert werden kann." - } } diff --git a/src/packs/__source/talente-brw/wissen/gesteinskunde.json b/src/packs/_source/talente/gesteinskunde.json similarity index 82% rename from src/packs/__source/talente-brw/wissen/gesteinskunde.json rename to src/packs/_source/talente/gesteinskunde.json index df6ad597..b7e6ba24 100644 --- a/src/packs/__source/talente-brw/wissen/gesteinskunde.json +++ b/src/packs/_source/talente/gesteinskunde.json @@ -1,9 +1,5 @@ { - "_id": "ZxVGuNEO2VmNyBph", - "_key": "!items!ZxVGuNEO2VmNyBph", - "type": "Skill", "name": "Gesteinskunde", - "system": { "gruppe": "Wissen", "probe": [ "KL", @@ -13,5 +9,4 @@ "voraussetzung": [ ], "talent": "Eine Ausbildung in diesem Talent ermöglicht das Erkennen geeigneter Gesteinsarten für Bauzwecke, aber auch das Absuchen des Bodens nach Erzadern oder das Schürfen nach Edelmetallen und Edelsteinen. Dazu kommt eine grundsätzliche Kenntnis der Material­ eigenschaften verschiedener Gesteins-, Erz-und Edelsteinarten." - } } diff --git a/src/packs/__source/talente-brw/sprachen/goblin.json b/src/packs/_source/talente/goblin.json similarity index 89% rename from src/packs/__source/talente-brw/sprachen/goblin.json rename to src/packs/_source/talente/goblin.json index fcf57721..49806a4c 100644 --- a/src/packs/__source/talente-brw/sprachen/goblin.json +++ b/src/packs/_source/talente/goblin.json @@ -1,9 +1,5 @@ { - "_id": "UN9cKNWiD8dNdqlR", - "_key": "!items!UN9cKNWiD8dNdqlR", - "type": "Skill", - "name": "Sprachen kennen: Goblinisch", - "system": { + "name": "Sprachen kennen Goblinisch", "gruppe": "Sprachen", "probe": [ "KL", @@ -14,5 +10,4 @@ ], "komplexität": "12", "talent": "Ähnlich wie bei den Schriften wird jede aventurische Sprache als eigenes Talent gewertet. Je der Aventurier beherrscht seine Muttersprache auf einem Startwert in Höhe seiner Klugheit–2, manche darüber hinaus noch eine Zweitsprache in Höhe von KL –4. Weitere Sprachen müssen dann explizit erlernt werden.
Um die Sprache identifizieren zu können, ist ein TaW von 1 nötig, um grundlegende Konzepte (“Ich Hunger”) verstehen und vermitteln zu können, ist ein TaW von 2 nötig; um einfache Sätze bilden und verstehen zu können, benötigt man einen TaW von 4. Ein TaW von 1/3 der Komplexität bedeutet recht fließenden Umgang mit allen üblichen grammatischen Konstruktionen und die Kenntnis auch seltener Wörter, während ein TaW in Höhe der halben Komplexität heißt, dass man die Sprache so gut wie ein durchschnittlicher Einheimischer beherrscht (wenn man auch immer noch einen leichten Akzent aufweist). Selbst philosophische oder magietheoretische Schriften gehen selten über eine Komplexität von 15 hinaus." - } } diff --git a/src/packs/__source/talente-brw/handwerk/grobschmied.json b/src/packs/_source/talente/grobschmied.json similarity index 92% rename from src/packs/__source/talente-brw/handwerk/grobschmied.json rename to src/packs/_source/talente/grobschmied.json index e293ecf5..66247e71 100644 --- a/src/packs/__source/talente-brw/handwerk/grobschmied.json +++ b/src/packs/_source/talente/grobschmied.json @@ -1,9 +1,5 @@ { - "_id": "zpXltR1dnEv9h9nY", - "_key": "!items!zpXltR1dnEv9h9nY", - "type": "Skill", "name": "Grobschmied", - "system": { "gruppe": "Handwerk", "probe": [ "FF", @@ -14,5 +10,4 @@ ], "behinderung": "situationsbedingt", "talent": "Schwarzschmiede (die trotz des Namens auch mit Messing und Bronze umzugehen wissen) beschäftigen sich vor allem mit der Herstellung von landwirtschaftlichem Gerät, dem Beschlagen von Reittieren oder der Produktion von Kleineisenteilen wie Nägel, Bolzen, Ketten und Scharniere. Sie sind zudem in der Lage, Waffen zu reparieren.
Ein Waffenschmied ist zwar auch in der Lage, Harken, Türbeschläge oder Truhenbänder herzustellen, seine Spezialität sind jedoch Metallwaffen aller Art, die er sowohl herstellen und reparieren als auch beurteilen kann.
Der Plättner und Harnischmacher hat das Grobschmiedehandwerk bis zum Äußersten verfeinert und stellt nur noch metallene Rüstungen aller Art her; er ist der einzige, der Harnische, Lamellare und auch Kettenhemden herstellen und reparieren kann.
Spengler oder Blechwerker schließlich befassen sich mit der Weiterverarbeitung von Metallblechen (vor allem zu Rohren) und deren Einsatz, wozu auch Kenntnisse im Nieten und Löten gehören; sie sind ebenfalls in der Lage, Rüstungen zu reparieren." - } } diff --git a/src/packs/__source/talente-brw/wissen/götter-kulte.json b/src/packs/_source/talente/götter-kulte.json similarity index 89% rename from src/packs/__source/talente-brw/wissen/götter-kulte.json rename to src/packs/_source/talente/götter-kulte.json index 2156a9d3..c1496a65 100644 --- a/src/packs/__source/talente-brw/wissen/götter-kulte.json +++ b/src/packs/_source/talente/götter-kulte.json @@ -1,9 +1,5 @@ { - "_id": "sv4Lctqms4z3AHNF", - "_key": "!items!sv4Lctqms4z3AHNF", - "type": "Skill", "name": "Götter/Kulte", - "system": { "gruppe": "Wissen", "probe": [ "KL", @@ -13,5 +9,4 @@ "voraussetzung": [ ], "talent": "Dies ist das Wissen um religiöse Riten und Bekenntnisse des eigenen Glaubens. Für jeden Geweihten ein absolutes Muss, will man nicht im Tempel einer Bruder- oder Schwes­ tergottheit unangenehm auffallen. Ebenfalls zu diesem Talent gehört die Kenntnis von Göttersagen und Heiligenlegenden sowie auch der geziemenden Anreden und Verbeugungen vor einem Priester oder einer Priesterin. Wer sich gut genug mit Göttern und Kulten auskennt (TaW mindestens 7), kann sich entscheiden, auch sein Wissen über andere Religionen zu vertiefen. Ohne die passende Kulturkunde sind fremde Religionen jedoch nur schwer zu verstehen, weswegen entsprechende Proben erschwert werden sollten." - } } diff --git a/src/packs/__source/talente-brw/handwerk/heilkunde-gift.json b/src/packs/_source/talente/heilkunde-gift.json similarity index 95% rename from src/packs/__source/talente-brw/handwerk/heilkunde-gift.json rename to src/packs/_source/talente/heilkunde-gift.json index 239c4c9b..1903c535 100644 --- a/src/packs/__source/talente-brw/handwerk/heilkunde-gift.json +++ b/src/packs/_source/talente/heilkunde-gift.json @@ -1,9 +1,5 @@ { - "_id": "ZMCP3q6ZMcehR30p", - "_key": "!items!ZMCP3q6ZMcehR30p", - "type": "Skill", "name": "Heilkunde: Gift", - "system": { "gruppe": "Handwerk", "probe": [ "MU", @@ -14,5 +10,4 @@ ], "behinderung": "situationsbedingt", "talent": "Eine gelungene erste Probe (Erkennungsprobe) auf das Heilen von Vergiftungen bedeutet, dass das Gift richtig identifiziert wurde. (Einige besonders tückische Gifte erfordern einen Zuschlag in Höhe ihrer halben Stufe.) Der Meister benennt die Art des Giftes und teilt mit, wie die Vergiftung zu behandeln ist – möglicherweise muss der Heiler zunächst bestimmte Kräuter oder andere Zutaten beschaffen. Sind diese Voraussetzungen erfüllt, kann der Heiler eine zweite Probe (Behandlungsprobe) ablegen, die mit einem Zuschlag in Höhe der gesamten Stufe des Giftes zu belegen ist. Gelingt auch diese Probe, so ist die Wirkung des Gifts gestoppt und der Heiler kann dem Vergifteten Lebenspunkte zurückgeben, die er durch diese Vergiftung verloren hatte: 1 LeP pro übrig behaltenem Talentpunkt bei der zweiten Probe. Eine dritte Probe regelt die Nachbehandlung; auch hier können dem Patienten LeP je nach übrig behaltenen Talentpunkten zurückgegeben werden; der Zuschlag beträgt hierbei wieder die halbe Stufe des Giftes.
Das Scheitern der Erkennungsprobe bedeutet, dass der Heiler das Gift offensichtlich nicht kennt und keine Heilmethode weiß; das Scheitern der Behandlungsprobe bedeutet, dass keine Heilung einsetzt (bei einem Patzer sogar, dass der Vergiftete 1d6 zusätzliche SP erleidet); das Scheitern der Nach behandlungsprobe bedeutet ebenfalls, dass der Patient zusätzlichen Schaden erleidet (1d6 SP).
Zum Ablegen der Erkennungsprobe wer­den mindestens 5 Kampfrunden benöigt, zum Ablegen der Behandlungs- und der Nachbehandlungs-Probe jeweils mindestens 1 SR, die NachbehandlungsProbe kann zudem erst zwölf Stunden nach der Behandlungs-Probe (und nur einmal) abgelegt werden. Bei Misslingen der Proben kann der Heiler in diesem speziellen Fall keinen zweiten Versuch unternehmen." - } } diff --git a/src/packs/__source/talente-brw/handwerk/heilkunde-krankheiten.json b/src/packs/_source/talente/heilkunde-krankheiten.json similarity index 94% rename from src/packs/__source/talente-brw/handwerk/heilkunde-krankheiten.json rename to src/packs/_source/talente/heilkunde-krankheiten.json index d28cd1c2..a7b03e7e 100644 --- a/src/packs/__source/talente-brw/handwerk/heilkunde-krankheiten.json +++ b/src/packs/_source/talente/heilkunde-krankheiten.json @@ -1,9 +1,5 @@ { - "_id": "MpS719GhrrI2p9BB", - "_key": "!items!MpS719GhrrI2p9BB", - "type": "Skill", "name": "Heilkunde: Krankheiten", - "system": { "gruppe": "Handwerk", "probe": [ "MU", @@ -14,5 +10,4 @@ ], "behinderung": "situationsbedingt", "talent": "Alle Arten von Krankheiten - auch das gefährliche Wundfieber – können mit Hilfe dieses Talentes behandelt werden. Der Heilkundige legt eine erste Talentprobe ab, die zur Diagnose und zum Bestimmen der benötigten Salben oder Arzneien dient: die Erkennungsprobe. (Eventuell ist diese Probe um die halbe Stufe der Krankheit erschwert, wenn es sich um eine schleichende Krankheit ohne eindeutige Symptome handelt.) Anschließend kann durch eine zweite Probe, die um die Stufe der Krankheit erschwert ist, die Heilung eingeleitet werden, wobei der Heiler dem Patienten so viele Lebenspunkte zurückgibt, wie er Talentpunkte übrig behalten hat (maximal natürlich so viele, wie durch die Krankheit verloren gegangen sind).
Einen Tag später (und dann folgend jeden weiteren Tag) ist eine Nachbehandlungs-Probe möglich, die um die halbe Stufe der Krankheit erschwert ist; die übrig behaltenen TaP kommen dem Patienten als LeP zugute (auch hier natürlich nur, um den Schaden zu reduzieren, der aus einer Krankheit herrührt). Beim Scheitern der ersten Probe kommt es nicht zu einer Heilung; beim Scheitern einer der anschließenden Proben wird die Heilung gestoppt und der Patient erleidet 1d6 zusätzliche Schadenspunkte.
Zum Ablegen der Erkennungs-Probe wird mindestens 1 Spielrunde benötigt, zum Ablegen der Behandlungs-Probe und der Nach-behandlungs-Proben mindestens 6 SR. Die Nachbehandlungs-Proben können erst einen Tag nach der Behandlungs-Probe abgelegt werden (und dann jeweils am nächsten Tag); bei Misslingen dieser Proben kann der Heiler keinen zweiten Versuch unternehmen." - } } diff --git a/src/packs/__source/talente-brw/handwerk/heilkunde-wunden.json b/src/packs/_source/talente/heilkunde-wunden.json similarity index 96% rename from src/packs/__source/talente-brw/handwerk/heilkunde-wunden.json rename to src/packs/_source/talente/heilkunde-wunden.json index f9757603..be95eb77 100644 --- a/src/packs/__source/talente-brw/handwerk/heilkunde-wunden.json +++ b/src/packs/_source/talente/heilkunde-wunden.json @@ -1,9 +1,5 @@ { - "_id": "iVeiTvzkpV6a1HYX", - "_key": "!items!iVeiTvzkpV6a1HYX", - "type": "Skill", "name": "Heilkunde: Wunden", - "system": { "gruppe": "Handwerk", "probe": [ "KL", @@ -14,5 +10,4 @@ ], "behinderung": "situationsbedingt", "talent": "Brüche, Schnitte, Stiche und andere Verletzungen, die im Kampf oder durch Unfälle entstehen, sind durch dieses Talent zu kurieren.
Erste Hilfe: Ein lebensbedrohlich Verletzter (0 oder weniger LeP) kann dadurch gerettet werden, dass einem behandelnden Gefährten eine Heilkunde Wunden-Probe gelingt, die um doppelt so viele Punkte erschwert ist, wie die LeP des Patienten unter 0 liegen. Diese Probe dauert doppelt so viele KR, wie die LeP des Patienten unter 0 liegen, abzüglich der übrig behaltenen TaP aus der Heilkunde-Probe. Misslingt die Probe, so erleidet der Patient 1d6 weitere SP; die Probe kann jedoch wiederholt werden, wenn der Verletzte noch lebt. Bei Gelingen der Probe ist die akute Todesgefahr gebannt, der Patient hat nun genau 1 LeP.
Heilung fördern: Der Heilkundige legt eine erste Probe ab, die der allgemeinen Versorgung der Wunde dient und das Ausbrechen von Wundfieber verhindert, und anschließend eine zweite Probe, die der Einleitung der Heilung dient. Der Kranke erhält halb so viele LeP zurück, wie der Punktüberschuss aus der zweiten Probe beträgt. Diese LeP gelten zusätzlich zu den LeP, die der Verletzte aus der normalen Heilung (der nächtlichen Regneration) gewinnt, und werden auch nur während dieser Regenerationsphase zurückgewonnen. Am nächsten Tag (und den folgenden) kann jeweils eine Nachbehandlungs-Probe durchgeführt werden, die die allgemeine Regenerationsfähigkeit des Patienten verbessert: Pro 3 übrig behaltener Punkte aus dieser Probe erhält der Patient einen Punkt zu seiner folgenden nächtlichen Regeneration hinzu (bei 5 übrig behaltenen Punkten also 1 zusätzlichen LeP).
Beim Scheitern der ersten Probe kommt es nicht zu einer Heilung, der Patient erkrankt mit einer erhöhten Wahrscheinlichkeit an Wundfieber (KO-Wurf um 3 erschwert). Beim Scheitern der zweiten Heilprobe und der Nachbehandlungs-Proben wird die normale Heilung für 24 Stunden unterbrochen und der Verletzte erleidet 1W6 zusätzliche Schadenspunkte. Die erste Probe dauert 4 Spielrunden, die zweite Probe und die Nachbehandlungsproben dauern jeweils 6 SR. Auch hier gilt insgesamt, dass nur solche LeP-Verluste mit diesem Talent zu heilen sind, die durch Verletzungen verursacht wurden.
Wunden: Um die Heilung einer Wunde (sie­ he im Kapitel zum Kampf auf Seite 138) zu beschleunigen, ist zuallererst eine reguläre Probe zur Erstversorgung (s.o.) nötig, die um je 2 Punkte pro erlittener Wunde erschwert ist. (Wenn Sie überhaupt mit Wunden spielen, ist diese Probe generell die Erstversor gungs-Probe, Sie müssen also nicht einmal gegen Schaden und einmal gegen Wunden würfeln.) Die zweite Probe, die der Einleitung der Heilung dient, ist um 3 Punkte pro Wunde des Patienten erschwert.
Misslingt diese Probe, tritt keine Heilung ein; bei einem Patzer erleidet der Patient 1d6 weitere Schadenspunkte. Gelingt sie jedoch, so ist die KO-Probe des Patienten, mit der die Heilung eingeleitet wird, um so viele Punkte erleichtert, wie bei der Heilkunde-Probe übrig behalten wurden." - } } diff --git a/src/packs/__source/talente-brw/wissen/heraldik.json b/src/packs/_source/talente/heraldik.json similarity index 90% rename from src/packs/__source/talente-brw/wissen/heraldik.json rename to src/packs/_source/talente/heraldik.json index 1f5b29ae..16de0bad 100644 --- a/src/packs/__source/talente-brw/wissen/heraldik.json +++ b/src/packs/_source/talente/heraldik.json @@ -1,9 +1,5 @@ { - "_id": "l14P37BH63j6EpOC", - "_key": "!items!l14P37BH63j6EpOC", - "type": "Skill", "name": "Heraldik", - "system": { "gruppe": "Wissen", "probe": [ "KL", @@ -13,5 +9,4 @@ "voraussetzung": [ ], "talent": "Während das Talent Etikette eher die allgemeinen Umgangsformen – vor allem bei Hofe – regelt und die Wappenkunde nebenher mit umfasst, beschäftigt sich die Heraldik einzig und allein mit der Geschichte, Entstehung und Verbreitung von Wappen, Schildund Feldzeichen, Helmzieren, Spruchbändern und ähnlichem mehr, dazu noch mit ein wenig Kunde der wichtigsten Verwandtschaftsbeziehungen und Erblinien. Ein Held kann mit dem Talent Heraldik feststellen, aus welcher Provinz ein Ritter stammt, ob aus einem angeheirateten Zweig eines alten Adelshauses – oder ob irgendein Schurke sich mit gefälschten oder Phantasiewappen schmückt. Dazu kommt – bei höherem TaW – noch die Kenntnis der Farben und Banner der Regimenter (und ihrer einzelnen Unterabteilungen) der großen Reiche." - } } diff --git a/src/packs/__source/talente-brw/kampf/hiebwaffen.json b/src/packs/_source/talente/hiebwaffen.json similarity index 88% rename from src/packs/__source/talente-brw/kampf/hiebwaffen.json rename to src/packs/_source/talente/hiebwaffen.json index 44cdb726..5c218406 100644 --- a/src/packs/__source/talente-brw/kampf/hiebwaffen.json +++ b/src/packs/_source/talente/hiebwaffen.json @@ -1,10 +1,5 @@ { - "_id": "AyuUSXqf2vaOaU3Y", - "_key": "!items!AyuUSXqf2vaOaU3Y", - "type": "Skill", "name": "Hiebwaffen", - "system": { "gruppe": "Kampf", "talent": "In diese Kategorie fallen all jene einhändig geführten Waffen, deren Schadenswirkung primär auf Wucht basiert und mit denen man ‘punktförmig’ Schaden anrichtet, also zum einen Äxte, die aus einer schweren, breiten Klinge an einem Stiel bestehen und deren Schadenswirkung sowohl auf Wucht als auch auf der Schneidwirkung der Klinge (egal ob mit einem oder als Doppelblatt) beruht, zum anderen all jene Streitkolben, Keulen und Kriegshämmer, die möglichst viel Wucht auf einem Fleck konzentrieren sollen, um Rüstungen zu verbeulen (oder gar mit Stacheln und Schneidblättern zu durchdringen) und Knochen zu brechen. Die Maximallänge dieser Waffen ist etwa ein Schritt, das Maximalgewicht etwa drei Stein; alles darüber sind Zweihandwaffen." - } } diff --git a/src/packs/__source/talente-brw/handwerk/holzbearbeitung.json b/src/packs/_source/talente/holzbearbeitung.json similarity index 88% rename from src/packs/__source/talente-brw/handwerk/holzbearbeitung.json rename to src/packs/_source/talente/holzbearbeitung.json index 5e74ec47..c4c28050 100644 --- a/src/packs/__source/talente-brw/handwerk/holzbearbeitung.json +++ b/src/packs/_source/talente/holzbearbeitung.json @@ -1,9 +1,5 @@ { - "_id": "2X8vXmUi5DTQAMaC", - "_key": "!items!2X8vXmUi5DTQAMaC", - "type": "Skill", "name": "Holzbearbeitung", - "system": { "gruppe": "Handwerk", "probe": [ "KL", @@ -14,5 +10,4 @@ ], "behinderung": "situationsbedingt", "talent": "Dieses Talent hat viele Anwendungsmöglichkeiten im täglichen Heldenleben: Eine morsche Bootsplanke ist auszutauschen, eine improvisierte Waffe oder ein Werkzeug soll hergestellt, auf die Schnelle ein Kinderspielzeug geschnitzt werden. Eine gelungene Probe auf dieses Talent kann die erfolgreiche Herstellung oder Reparatur eines hölzernen Gegenstandes bedeuten. Für die Fertigstellung komplizierter Holzgeräte oder besonders kunstfertiger Schnitzereien sollte die Probe mit einem Zuschlag belegt werden; beim Erstellen hölzerner Skulpturen zählen natürlich die TaP* für den künstlerischen Eindruck." - } } diff --git a/src/packs/__source/talente-brw/kampf/infanteriewaffen.json b/src/packs/_source/talente/infanteriewaffen.json similarity index 75% rename from src/packs/__source/talente-brw/kampf/infanteriewaffen.json rename to src/packs/_source/talente/infanteriewaffen.json index 8b3d519b..71321a47 100644 --- a/src/packs/__source/talente-brw/kampf/infanteriewaffen.json +++ b/src/packs/_source/talente/infanteriewaffen.json @@ -1,10 +1,5 @@ { - "_id": "wdEpxGfiElaeZjYp", - "_key": "!items!wdEpxGfiElaeZjYp", - "type": "Skill", "name": "Infanteriewaffen", - "system": { "gruppe": "Kampf", "talent": "Bei diesen Waffen ist eine kurze Klinge an einem langen Stiel befestigt, wobei die Klinge meist sowohl zum Hieb als auch zum Stich geeignet ist; bisweilen finden sich auch Haken an der Waffe, um Gegner umzureißen oder vom Pferd zu ziehen." - } } diff --git a/src/packs/__source/talente-brw/sprachen/isdira.json b/src/packs/_source/talente/isdira.json similarity index 89% rename from src/packs/__source/talente-brw/sprachen/isdira.json rename to src/packs/_source/talente/isdira.json index c8a1522e..72bb39d4 100644 --- a/src/packs/__source/talente-brw/sprachen/isdira.json +++ b/src/packs/_source/talente/isdira.json @@ -1,9 +1,5 @@ { - "_id": "W6R4tFBcCoBZX468", - "_key": "!items!W6R4tFBcCoBZX468", - "type": "Skill", - "name": "Sprachen kennen: Isdira", - "system": { + "name": "Sprachen kennen Isdira", "gruppe": "Sprachen", "probe": [ "KL", @@ -14,5 +10,4 @@ ], "komplexität": "21", "talent": "Ähnlich wie bei den Schriften wird jede aventurische Sprache als eigenes Talent gewertet. Je der Aventurier beherrscht seine Muttersprache auf einem Startwert in Höhe seiner Klugheit–2, manche darüber hinaus noch eine Zweitsprache in Höhe von KL –4. Weitere Sprachen müssen dann explizit erlernt werden.
Um die Sprache identifizieren zu können, ist ein TaW von 1 nötig, um grundlegende Konzepte (“Ich Hunger”) verstehen und vermitteln zu können, ist ein TaW von 2 nötig; um einfache Sätze bilden und verstehen zu können, benötigt man einen TaW von 4. Ein TaW von 1/3 der Komplexität bedeutet recht fließenden Umgang mit allen üblichen grammatischen Konstruktionen und die Kenntnis auch seltener Wörter, während ein TaW in Höhe der halben Komplexität heißt, dass man die Sprache so gut wie ein durchschnittlicher Einheimischer beherrscht (wenn man auch immer noch einen leichten Akzent aufweist). Selbst philosophische oder magietheoretische Schriften gehen selten über eine Komplexität von 15 hinaus." - } } diff --git a/src/packs/__source/talente-brw/handwerk/kartographie.json b/src/packs/_source/talente/kartographie.json similarity index 89% rename from src/packs/__source/talente-brw/handwerk/kartographie.json rename to src/packs/_source/talente/kartographie.json index ca750f12..669a4453 100644 --- a/src/packs/__source/talente-brw/handwerk/kartographie.json +++ b/src/packs/_source/talente/kartographie.json @@ -1,9 +1,5 @@ { - "_id": "hR8i8jzmOR5v4HmR", - "_key": "!items!hR8i8jzmOR5v4HmR", - "type": "Skill", "name": "Kartographie", - "system": { "gruppe": "Handwerk", "probe": [ "KL", @@ -18,5 +14,4 @@ ], "behinderung": "situationsbedingt", "talent": "Ein Kartograph befasst sich mit dem Erstellen von Karten und Plänen, sowohl von Gebäuden als auch von Landschaften. Im Spiel bedeutet dieses Talent, dass dem Helden Orientierungs-Proben erleichtert werden, wenn er sich in einer Landschaft oder einem Höhlensystem befindet, das er bereits erkundet und kartiert hat. Er erhält vom Meister Hinweise zum korrekten Aufzeichnen von Höhlensystemen, Gebäuden etc. und kann auch leichter Reiseentfernungen abschätzen. Das Lesen von Landkarten ohne dieses Talent fällt schwer und kann leicht zu Fehlinterpretationen führen." - } } diff --git a/src/packs/__source/talente-brw/kampf/kettenwaffen.json b/src/packs/_source/talente/kettenwaffen.json similarity index 87% rename from src/packs/__source/talente-brw/kampf/kettenwaffen.json rename to src/packs/_source/talente/kettenwaffen.json index 80db77e3..285ac770 100644 --- a/src/packs/__source/talente-brw/kampf/kettenwaffen.json +++ b/src/packs/_source/talente/kettenwaffen.json @@ -1,10 +1,5 @@ { - "_id": "uHBlf6uD6X7TSsHq", - "_key": "!items!uHBlf6uD6X7TSsHq", - "type": "Skill", "name": "Kettenwaffen", - "system": { "gruppe": "Kampf", "talent": "Bei diesen Waffen ist eine Kugel oder ein anderes schweres Gewicht, meist noch mit Dornen oder Stacheln gespickt, am Ende einer Kette befestigt, deren Länge knapp unter der des Stiels ist, an dem sie befestigt ist. Es ist hinreichend schwierig, mit solchen Waffen zu parieren – aber es ist auch schwer, den Angriff einer solchen Waffe abzuwehren, da man mit ihr auch um Schilde herumschlagen und einen solchen Hieb insgesamt schwer abwehren kann. Ebenfalls mit diesem Talent geführt werden alle Geißeln (als Disziplinierungsinstrumente) und kurzen Peitschen mit mehreren beschwerten Enden (wie die ‘Neunschwänzige Katze’)." - } } diff --git a/src/packs/__source/talente-brw/körperlich/klettern.json b/src/packs/_source/talente/klettern.json similarity index 88% rename from src/packs/__source/talente-brw/körperlich/klettern.json rename to src/packs/_source/talente/klettern.json index baacedf5..42c29e96 100644 --- a/src/packs/__source/talente-brw/körperlich/klettern.json +++ b/src/packs/_source/talente/klettern.json @@ -1,9 +1,5 @@ { - "_id": "VvNz8lFi4gsycTn4", - "_key": "!items!VvNz8lFi4gsycTn4", - "type": "Skill", "name": "Klettern", - "system": { "gruppe": "Körperlich", "probe": [ "MU", @@ -14,5 +10,4 @@ ], "behinderung": "*2", "talent": "Eine Klettern-Probe steht immer dann an, wenn der Held eine schwierige Klettertour (wie das Überklettern einer Burgmauer oder das Bezwingen einer Felsklippe) unternimmt. Je nach Art und Höhe des zu überkletternden Hindernisses kann die Probe mit einem Zuschlag belegt werden; sinnvoll eingesetzte Kletterhilfen (Steighaken, Seile, Wurfanker) erleichtern natürlich die Probe, wenn man mit ihnen umzugehen versteht. Ein Held mit Höhenangst legt entweder zusätzlich Höhenangst-Proben ab, oder aber seine Klettern-Proben werden von vornherein mit Zuschlägen in Höhe seines Höhenangst Wertes belegt." - } } diff --git a/src/packs/__source/talente-brw/handwerk/kochen.json b/src/packs/_source/talente/kochen.json similarity index 88% rename from src/packs/__source/talente-brw/handwerk/kochen.json rename to src/packs/_source/talente/kochen.json index 2c01176c..0c12de65 100644 --- a/src/packs/__source/talente-brw/handwerk/kochen.json +++ b/src/packs/_source/talente/kochen.json @@ -1,9 +1,5 @@ { - "_id": "IUW5qqSD1Imgtm5u", - "_key": "!items!IUW5qqSD1Imgtm5u", - "type": "Skill", "name": "Kochen", - "system": { "gruppe": "Handwerk", "probe": [ "KL", @@ -14,5 +10,4 @@ ], "behinderung": "situationsbedingt", "talent": "Ein Held, der seine Gäste (daheim oder am Lagerfeuer) durch ein gelungenes Essen beeindrucken will, muss eine erfolgreiche Probe – evtl. mit Zuschlägen – ablegen. Eine knapp gelungene Probe bedeutet, dass es dem Helden gelungen ist, etwas Essbares zu kochen – um etwas Genießbares zu produzieren, sollte er mindestens 3 Talentpunkte übrig behalten; schmackhafte Kost beginnt bei 6 verbleibenden Punkten. Gerade in den Küchen des Hochadels ist diese Kunst nicht nur angesehen, sondern auch oft weiter unterteilt - Spezialisten für süßes Backwerk oder Bratensoßen sind keine Seltenheit." - } } diff --git a/src/packs/__source/talente-brw/wissen/kriegskunst.json b/src/packs/_source/talente/kriegskunst.json similarity index 89% rename from src/packs/__source/talente-brw/wissen/kriegskunst.json rename to src/packs/_source/talente/kriegskunst.json index d96bf828..e83a20fd 100644 --- a/src/packs/__source/talente-brw/wissen/kriegskunst.json +++ b/src/packs/_source/talente/kriegskunst.json @@ -1,9 +1,5 @@ { - "_id": "BSApODhduxyODMMY", - "_key": "!items!BSApODhduxyODMMY", - "type": "Skill", "name": "Kriegskunst", - "system": { "gruppe": "Wissen", "probe": [ "MU", @@ -13,5 +9,4 @@ "voraussetzung": [ ], "talent": "Als Kämpfer eine mutige Rolle in einer Schlacht zu spielen ist eine Sache – eine andere ist es, die Schlacht selbst zu lenken. Truppen müssen bewegt, versorgt und motiviert werden. Das Terrain und die taktischen Möglichkeiten des Gegners sind zu erkunden. Nicht zuletzt müssen der Zeitpunkt des Handelns festgelegt und überdies die Gunst der Götter erworben werden. Strategie, Taktik und auch die Entscheidungen des Hauptmanns vor Ort – all dies sind Anwendungsgebiete der Kriegskunst.
Ein Held, der mehr als zehn Krieger kommandieren und ins Gefecht führen will, sollte mindestens einen Kriegskunst-Wert von 7 besitzen, oder er wird bei seinem Feldzug jämmerlich scheitern." - } } diff --git a/src/packs/__source/talente-brw/körperlich/körperbeherrschung.json b/src/packs/_source/talente/körperbeherrschung.json similarity index 85% rename from src/packs/__source/talente-brw/körperlich/körperbeherrschung.json rename to src/packs/_source/talente/körperbeherrschung.json index 8b32a7c7..c912d3a1 100644 --- a/src/packs/__source/talente-brw/körperlich/körperbeherrschung.json +++ b/src/packs/_source/talente/körperbeherrschung.json @@ -1,9 +1,5 @@ { - "_id": "q1lGps1Dc9mZUsUF", - "_key": "!items!q1lGps1Dc9mZUsUF", - "type": "Skill", "name": "Körperbeherrschung", - "system": { "gruppe": "Körperlich", "probe": [ "MU", @@ -14,5 +10,4 @@ ], "behinderung": "*2", "talent": "Ausrutschen auf einer steilen Treppe, Abrollen nach einem Sturz vom Pferd, ein Hechtsprung über das just einstürzende Brückensegment oder das auf-den-Beinen-Bleiben auf einem Schiff im Sturm – in all diesen Fällen ist das Talent Körperbeherrschung gefragt. Die Schwierigkeit der Situation sollte auch die Höhe der Zuschläge bestimmen. Sie­ he auch die Anmerkungen zu den Talenten Akrobatik und Athletik." - } } diff --git a/src/packs/__source/talente-brw/schriften/chrmk.json b/src/packs/_source/talente/l-asdharia.json similarity index 90% rename from src/packs/__source/talente-brw/schriften/chrmk.json rename to src/packs/_source/talente/l-asdharia.json index 7de6d306..fea6abd2 100644 --- a/src/packs/__source/talente-brw/schriften/chrmk.json +++ b/src/packs/_source/talente/l-asdharia.json @@ -1,9 +1,5 @@ { - "_id": "KaHouGyTNH9EbnCi", - "_key": "!items!KaHouGyTNH9EbnCi", - "type": "Skill", - "name": "Lesen und Schreiben: Chrmk", - "system": { + "name": "Lesen/Schreiben Asdharia", "gruppe": "Sprachen", "probe": [ "KL", @@ -14,5 +10,4 @@ ], "komplexität": 18, "talent": "Ebenso, wie man unterschiedliche Sprachen sprechen kann, kann man auch unterschiedliche Schriften beherrschen. Für jede Schrift gilt ein separates Talent, das eigens aktiviert und gesteigert werden muss.
In diesem Talent werden normalerweise keine Proben abgelegt. Talentwert 0 bedeutet, dass der Held diese Schrift nicht lesen und schreiben kann. Bei TaW 1 und 2 ist er in der Lage, einzelne Buchstaben zu erkennen und mühsam zuzuordnen. Um kurze Sätze ohne größeren Zeitaufwand zu entziffern oder niederzuschreiben, ist ein TaW von 1/3 der Schriftkomplexität nötig (siehe unten), und sobald der TaW die halbe Komplexität erreicht, sind einfachere Gebrauchstexte schon flüssig zu lesen oder zu schreiben. Der Höchstwert, bis zu dem der TaW jedes Talentes steigerbar ist, entspricht der Komplexität der jeweiligen Schrift – in diesem Fall können aus Details der Schrift sogar Hinweise auf die Herkunft oder eventuell das Alter eines Schriftstückes entnommen werden.
Viele andere Talente erfordern einen Mindestwert im Talent Lesen/Schreiben, ohne den überhaupt keine Probe in diesen speziellen Talenten abgelegt werden kann – hierfür reicht dann jeweils das Beherrschen einer beliebigen Schrift mit dem geforderten Wert." - } } diff --git a/src/packs/__source/talente-brw/schriften/asdharia.json b/src/packs/_source/talente/l-chrmk.json similarity index 90% rename from src/packs/__source/talente-brw/schriften/asdharia.json rename to src/packs/_source/talente/l-chrmk.json index 7ecff0e2..ab28abf2 100644 --- a/src/packs/__source/talente-brw/schriften/asdharia.json +++ b/src/packs/_source/talente/l-chrmk.json @@ -1,9 +1,5 @@ { - "_id": "NEVaaXrkiQGAM5yt", - "_key": "!items!NEVaaXrkiQGAM5yt", - "type": "Skill", - "name": "Lesen und Schreiben: Asdharia", - "system": { + "name": "Lesen/Schreiben Chrmk", "gruppe": "Sprachen", "probe": [ "KL", @@ -14,5 +10,4 @@ ], "komplexität": 18, "talent": "Ebenso, wie man unterschiedliche Sprachen sprechen kann, kann man auch unterschiedliche Schriften beherrschen. Für jede Schrift gilt ein separates Talent, das eigens aktiviert und gesteigert werden muss.
In diesem Talent werden normalerweise keine Proben abgelegt. Talentwert 0 bedeutet, dass der Held diese Schrift nicht lesen und schreiben kann. Bei TaW 1 und 2 ist er in der Lage, einzelne Buchstaben zu erkennen und mühsam zuzuordnen. Um kurze Sätze ohne größeren Zeitaufwand zu entziffern oder niederzuschreiben, ist ein TaW von 1/3 der Schriftkomplexität nötig (siehe unten), und sobald der TaW die halbe Komplexität erreicht, sind einfachere Gebrauchstexte schon flüssig zu lesen oder zu schreiben. Der Höchstwert, bis zu dem der TaW jedes Talentes steigerbar ist, entspricht der Komplexität der jeweiligen Schrift – in diesem Fall können aus Details der Schrift sogar Hinweise auf die Herkunft oder eventuell das Alter eines Schriftstückes entnommen werden.
Viele andere Talente erfordern einen Mindestwert im Talent Lesen/Schreiben, ohne den überhaupt keine Probe in diesen speziellen Talenten abgelegt werden kann – hierfür reicht dann jeweils das Beherrschen einer beliebigen Schrift mit dem geforderten Wert." - } } diff --git a/src/packs/__source/talente-brw/schriften/geheiligte-glyphen-von-unau.json b/src/packs/_source/talente/l-geheiligte-glyphen-von-unau.json similarity index 89% rename from src/packs/__source/talente-brw/schriften/geheiligte-glyphen-von-unau.json rename to src/packs/_source/talente/l-geheiligte-glyphen-von-unau.json index 90c65f57..01774e2d 100644 --- a/src/packs/__source/talente-brw/schriften/geheiligte-glyphen-von-unau.json +++ b/src/packs/_source/talente/l-geheiligte-glyphen-von-unau.json @@ -1,9 +1,5 @@ { - "_id": "cnZRvWfFnFpMO265", - "_key": "!items!cnZRvWfFnFpMO265", - "type": "Skill", - "name": "Lesen und Schreiben: Geheiligte Glyphen von Unau", - "system": { + "name": "Lesen/Schreiben Geheiligte Glyphen von Unau", "gruppe": "Sprachen", "probe": [ "KL", @@ -14,5 +10,4 @@ ], "komplexität": 13, "talent": "Ebenso, wie man unterschiedliche Sprachen sprechen kann, kann man auch unterschiedliche Schriften beherrschen. Für jede Schrift gilt ein separates Talent, das eigens aktiviert und gesteigert werden muss.
In diesem Talent werden normalerweise keine Proben abgelegt. Talentwert 0 bedeutet, dass der Held diese Schrift nicht lesen und schreiben kann. Bei TaW 1 und 2 ist er in der Lage, einzelne Buchstaben zu erkennen und mühsam zuzuordnen. Um kurze Sätze ohne größeren Zeitaufwand zu entziffern oder niederzuschreiben, ist ein TaW von 1/3 der Schriftkomplexität nötig (siehe unten), und sobald der TaW die halbe Komplexität erreicht, sind einfachere Gebrauchstexte schon flüssig zu lesen oder zu schreiben. Der Höchstwert, bis zu dem der TaW jedes Talentes steigerbar ist, entspricht der Komplexität der jeweiligen Schrift – in diesem Fall können aus Details der Schrift sogar Hinweise auf die Herkunft oder eventuell das Alter eines Schriftstückes entnommen werden.
Viele andere Talente erfordern einen Mindestwert im Talent Lesen/Schreiben, ohne den überhaupt keine Probe in diesen speziellen Talenten abgelegt werden kann – hierfür reicht dann jeweils das Beherrschen einer beliebigen Schrift mit dem geforderten Wert." - } } diff --git a/src/packs/__source/talente-brw/schriften/kusliker-zeichen.json b/src/packs/_source/talente/l-hjaldingsche-runen.json similarity index 90% rename from src/packs/__source/talente-brw/schriften/kusliker-zeichen.json rename to src/packs/_source/talente/l-hjaldingsche-runen.json index 1f691330..a3d83288 100644 --- a/src/packs/__source/talente-brw/schriften/kusliker-zeichen.json +++ b/src/packs/_source/talente/l-hjaldingsche-runen.json @@ -1,9 +1,5 @@ { - "_id": "ORagZJxmj08OWCfm", - "_key": "!items!ORagZJxmj08OWCfm", - "type": "Skill", - "name": "Lesen und Schreiben: Kusliker Zeichen", - "system": { + "name": "Lesen/Schreiben Hjaldingsche Runen", "gruppe": "Sprachen", "probe": [ "KL", @@ -14,5 +10,4 @@ ], "komplexität": "10", "talent": "Ebenso, wie man unterschiedliche Sprachen sprechen kann, kann man auch unterschiedliche Schriften beherrschen. Für jede Schrift gilt ein separates Talent, das eigens aktiviert und gesteigert werden muss.
In diesem Talent werden normalerweise keine Proben abgelegt. Talentwert 0 bedeutet, dass der Held diese Schrift nicht lesen und schreiben kann. Bei TaW 1 und 2 ist er in der Lage, einzelne Buchstaben zu erkennen und mühsam zuzuordnen. Um kurze Sätze ohne größeren Zeitaufwand zu entziffern oder niederzuschreiben, ist ein TaW von 1/3 der Schriftkomplexität nötig (siehe unten), und sobald der TaW die halbe Komplexität erreicht, sind einfachere Gebrauchstexte schon flüssig zu lesen oder zu schreiben. Der Höchstwert, bis zu dem der TaW jedes Talentes steigerbar ist, entspricht der Komplexität der jeweiligen Schrift – in diesem Fall können aus Details der Schrift sogar Hinweise auf die Herkunft oder eventuell das Alter eines Schriftstückes entnommen werden.
Viele andere Talente erfordern einen Mindestwert im Talent Lesen/Schreiben, ohne den überhaupt keine Probe in diesen speziellen Talenten abgelegt werden kann – hierfür reicht dann jeweils das Beherrschen einer beliebigen Schrift mit dem geforderten Wert." - } } diff --git a/src/packs/__source/talente-brw/schriften/isdira.json b/src/packs/_source/talente/l-isdira.json similarity index 90% rename from src/packs/__source/talente-brw/schriften/isdira.json rename to src/packs/_source/talente/l-isdira.json index 81a24e51..7ebc811b 100644 --- a/src/packs/__source/talente-brw/schriften/isdira.json +++ b/src/packs/_source/talente/l-isdira.json @@ -1,9 +1,5 @@ { - "_id": "vamYFFKV2Kz9x2Us", - "_key": "!items!vamYFFKV2Kz9x2Us", - "type": "Skill", - "name": "Lesen und Schreiben: Isdira", - "system": { + "name": "Lesen/Schreiben Isdira", "gruppe": "Sprachen", "probe": [ "KL", @@ -14,5 +10,4 @@ ], "komplexität": "15", "talent": "Ebenso, wie man unterschiedliche Sprachen sprechen kann, kann man auch unterschiedliche Schriften beherrschen. Für jede Schrift gilt ein separates Talent, das eigens aktiviert und gesteigert werden muss.
In diesem Talent werden normalerweise keine Proben abgelegt. Talentwert 0 bedeutet, dass der Held diese Schrift nicht lesen und schreiben kann. Bei TaW 1 und 2 ist er in der Lage, einzelne Buchstaben zu erkennen und mühsam zuzuordnen. Um kurze Sätze ohne größeren Zeitaufwand zu entziffern oder niederzuschreiben, ist ein TaW von 1/3 der Schriftkomplexität nötig (siehe unten), und sobald der TaW die halbe Komplexität erreicht, sind einfachere Gebrauchstexte schon flüssig zu lesen oder zu schreiben. Der Höchstwert, bis zu dem der TaW jedes Talentes steigerbar ist, entspricht der Komplexität der jeweiligen Schrift – in diesem Fall können aus Details der Schrift sogar Hinweise auf die Herkunft oder eventuell das Alter eines Schriftstückes entnommen werden.
Viele andere Talente erfordern einen Mindestwert im Talent Lesen/Schreiben, ohne den überhaupt keine Probe in diesen speziellen Talenten abgelegt werden kann – hierfür reicht dann jeweils das Beherrschen einer beliebigen Schrift mit dem geforderten Wert." - } } diff --git a/src/packs/__source/talente-brw/schriften/nanduria.json b/src/packs/_source/talente/l-kusliker-zeichen.json similarity index 90% rename from src/packs/__source/talente-brw/schriften/nanduria.json rename to src/packs/_source/talente/l-kusliker-zeichen.json index 50e3bb32..c53e07a0 100644 --- a/src/packs/__source/talente-brw/schriften/nanduria.json +++ b/src/packs/_source/talente/l-kusliker-zeichen.json @@ -1,9 +1,5 @@ { - "_id": "tdeKg3Q1XxaskXCU", - "_key": "!items!tdeKg3Q1XxaskXCU", - "type": "Skill", - "name": "Lesen und Schreiben: Nanduria", - "system": { + "name": "Lesen/Schreiben Kusliker Zeichen", "gruppe": "Sprachen", "probe": [ "KL", @@ -15,4 +11,3 @@ "komplexität": "10", "talent": "Ebenso, wie man unterschiedliche Sprachen sprechen kann, kann man auch unterschiedliche Schriften beherrschen. Für jede Schrift gilt ein separates Talent, das eigens aktiviert und gesteigert werden muss.
In diesem Talent werden normalerweise keine Proben abgelegt. Talentwert 0 bedeutet, dass der Held diese Schrift nicht lesen und schreiben kann. Bei TaW 1 und 2 ist er in der Lage, einzelne Buchstaben zu erkennen und mühsam zuzuordnen. Um kurze Sätze ohne größeren Zeitaufwand zu entziffern oder niederzuschreiben, ist ein TaW von 1/3 der Schriftkomplexität nötig (siehe unten), und sobald der TaW die halbe Komplexität erreicht, sind einfachere Gebrauchstexte schon flüssig zu lesen oder zu schreiben. Der Höchstwert, bis zu dem der TaW jedes Talentes steigerbar ist, entspricht der Komplexität der jeweiligen Schrift – in diesem Fall können aus Details der Schrift sogar Hinweise auf die Herkunft oder eventuell das Alter eines Schriftstückes entnommen werden.
Viele andere Talente erfordern einen Mindestwert im Talent Lesen/Schreiben, ohne den überhaupt keine Probe in diesen speziellen Talenten abgelegt werden kann – hierfür reicht dann jeweils das Beherrschen einer beliebigen Schrift mit dem geforderten Wert." } -} diff --git a/src/packs/__source/talente-brw/schriften/hjaldingsche-runen.json b/src/packs/_source/talente/l-nanduria.json similarity index 90% rename from src/packs/__source/talente-brw/schriften/hjaldingsche-runen.json rename to src/packs/_source/talente/l-nanduria.json index 3dac11fe..4b40c136 100644 --- a/src/packs/__source/talente-brw/schriften/hjaldingsche-runen.json +++ b/src/packs/_source/talente/l-nanduria.json @@ -1,9 +1,5 @@ { - "_id": "RkIpcbM1wVwcvmeq", - "_key": "!items!RkIpcbM1wVwcvmeq", - "type": "Skill", - "name": "Lesen und Schreiben: Hjaldingsche Runen", - "system": { + "name": "Lesen/Schreiben Nanduria", "gruppe": "Sprachen", "probe": [ "KL", @@ -14,5 +10,4 @@ ], "komplexität": "10", "talent": "Ebenso, wie man unterschiedliche Sprachen sprechen kann, kann man auch unterschiedliche Schriften beherrschen. Für jede Schrift gilt ein separates Talent, das eigens aktiviert und gesteigert werden muss.
In diesem Talent werden normalerweise keine Proben abgelegt. Talentwert 0 bedeutet, dass der Held diese Schrift nicht lesen und schreiben kann. Bei TaW 1 und 2 ist er in der Lage, einzelne Buchstaben zu erkennen und mühsam zuzuordnen. Um kurze Sätze ohne größeren Zeitaufwand zu entziffern oder niederzuschreiben, ist ein TaW von 1/3 der Schriftkomplexität nötig (siehe unten), und sobald der TaW die halbe Komplexität erreicht, sind einfachere Gebrauchstexte schon flüssig zu lesen oder zu schreiben. Der Höchstwert, bis zu dem der TaW jedes Talentes steigerbar ist, entspricht der Komplexität der jeweiligen Schrift – in diesem Fall können aus Details der Schrift sogar Hinweise auf die Herkunft oder eventuell das Alter eines Schriftstückes entnommen werden.
Viele andere Talente erfordern einen Mindestwert im Talent Lesen/Schreiben, ohne den überhaupt keine Probe in diesen speziellen Talenten abgelegt werden kann – hierfür reicht dann jeweils das Beherrschen einer beliebigen Schrift mit dem geforderten Wert." - } } diff --git a/src/packs/__source/talente-brw/schriften/rogolan.json b/src/packs/_source/talente/l-rogolan.json similarity index 90% rename from src/packs/__source/talente-brw/schriften/rogolan.json rename to src/packs/_source/talente/l-rogolan.json index 9b662a33..2b492df1 100644 --- a/src/packs/__source/talente-brw/schriften/rogolan.json +++ b/src/packs/_source/talente/l-rogolan.json @@ -1,9 +1,5 @@ { - "_id": "8jn2Xd9Utffm5srl", - "_key": "!items!8jn2Xd9Utffm5srl", - "type": "Skill", - "name": "Lesen und Schreiben: Rogolan", - "system": { + "name": "Lesen/Schreiben Rogolan", "gruppe": "Sprachen", "probe": [ "KL", @@ -14,5 +10,4 @@ ], "Komplexität": "11", "talent": "Ebenso, wie man unterschiedliche Sprachen sprechen kann, kann man auch unterschiedliche Schriften beherrschen. Für jede Schrift gilt ein separates Talent, das eigens aktiviert und gesteigert werden muss.
In diesem Talent werden normalerweise keine Proben abgelegt. Talentwert 0 bedeutet, dass der Held diese Schrift nicht lesen und schreiben kann. Bei TaW 1 und 2 ist er in der Lage, einzelne Buchstaben zu erkennen und mühsam zuzuordnen. Um kurze Sätze ohne größeren Zeitaufwand zu entziffern oder niederzuschreiben, ist ein TaW von 1/3 der Schriftkomplexität nötig (siehe unten), und sobald der TaW die halbe Komplexität erreicht, sind einfachere Gebrauchstexte schon flüssig zu lesen oder zu schreiben. Der Höchstwert, bis zu dem der TaW jedes Talentes steigerbar ist, entspricht der Komplexität der jeweiligen Schrift – in diesem Fall können aus Details der Schrift sogar Hinweise auf die Herkunft oder eventuell das Alter eines Schriftstückes entnommen werden.
Viele andere Talente erfordern einen Mindestwert im Talent Lesen/Schreiben, ohne den überhaupt keine Probe in diesen speziellen Talenten abgelegt werden kann – hierfür reicht dann jeweils das Beherrschen einer beliebigen Schrift mit dem geforderten Wert." - } } diff --git a/src/packs/__source/talente-brw/schriften/tulamidya.json b/src/packs/_source/talente/l-tulamidya.json similarity index 90% rename from src/packs/__source/talente-brw/schriften/tulamidya.json rename to src/packs/_source/talente/l-tulamidya.json index e50dc8c0..dbd8aa4d 100644 --- a/src/packs/__source/talente-brw/schriften/tulamidya.json +++ b/src/packs/_source/talente/l-tulamidya.json @@ -1,9 +1,5 @@ { - "_id": "6goPX4G7rV1mzSlJ", - "_key": "!items!6goPX4G7rV1mzSlJ", - "type": "Skill", - "name": "Lesen und Schreiben: Tulamidya", - "system": { + "name": "Lesen/Schreiben Tulamidya", "gruppe": "Sprachen", "probe": [ "KL", @@ -14,5 +10,4 @@ ], "komplexität": "14", "talent": "Ebenso, wie man unterschiedliche Sprachen sprechen kann, kann man auch unterschiedliche Schriften beherrschen. Für jede Schrift gilt ein separates Talent, das eigens aktiviert und gesteigert werden muss.
In diesem Talent werden normalerweise keine Proben abgelegt. Talentwert 0 bedeutet, dass der Held diese Schrift nicht lesen und schreiben kann. Bei TaW 1 und 2 ist er in der Lage, einzelne Buchstaben zu erkennen und mühsam zuzuordnen. Um kurze Sätze ohne größeren Zeitaufwand zu entziffern oder niederzuschreiben, ist ein TaW von 1/3 der Schriftkomplexität nötig (siehe unten), und sobald der TaW die halbe Komplexität erreicht, sind einfachere Gebrauchstexte schon flüssig zu lesen oder zu schreiben. Der Höchstwert, bis zu dem der TaW jedes Talentes steigerbar ist, entspricht der Komplexität der jeweiligen Schrift – in diesem Fall können aus Details der Schrift sogar Hinweise auf die Herkunft oder eventuell das Alter eines Schriftstückes entnommen werden.
Viele andere Talente erfordern einen Mindestwert im Talent Lesen/Schreiben, ohne den überhaupt keine Probe in diesen speziellen Talenten abgelegt werden kann – hierfür reicht dann jeweils das Beherrschen einer beliebigen Schrift mit dem geforderten Wert." - } } diff --git a/src/packs/__source/talente-brw/schriften/ur-tulamidya.json b/src/packs/_source/talente/l-ur-tulamidya.json similarity index 90% rename from src/packs/__source/talente-brw/schriften/ur-tulamidya.json rename to src/packs/_source/talente/l-ur-tulamidya.json index 629cc995..0773cee6 100644 --- a/src/packs/__source/talente-brw/schriften/ur-tulamidya.json +++ b/src/packs/_source/talente/l-ur-tulamidya.json @@ -1,9 +1,5 @@ { - "_id": "7IYOWndUHlaprni5", - "_key": "!items!7IYOWndUHlaprni5", - "type": "Skill", - "name": "Lesen und Schreiben: Ur-Tulamidya", - "system": { + "name": "Lesen/Schreiben Urtulamidya", "gruppe": "Sprachen", "probe": [ "KL", @@ -14,5 +10,4 @@ ], "komplexität": "16", "talent": "Ebenso, wie man unterschiedliche Sprachen sprechen kann, kann man auch unterschiedliche Schriften beherrschen. Für jede Schrift gilt ein separates Talent, das eigens aktiviert und gesteigert werden muss.
In diesem Talent werden normalerweise keine Proben abgelegt. Talentwert 0 bedeutet, dass der Held diese Schrift nicht lesen und schreiben kann. Bei TaW 1 und 2 ist er in der Lage, einzelne Buchstaben zu erkennen und mühsam zuzuordnen. Um kurze Sätze ohne größeren Zeitaufwand zu entziffern oder niederzuschreiben, ist ein TaW von 1/3 der Schriftkomplexität nötig (siehe unten), und sobald der TaW die halbe Komplexität erreicht, sind einfachere Gebrauchstexte schon flüssig zu lesen oder zu schreiben. Der Höchstwert, bis zu dem der TaW jedes Talentes steigerbar ist, entspricht der Komplexität der jeweiligen Schrift – in diesem Fall können aus Details der Schrift sogar Hinweise auf die Herkunft oder eventuell das Alter eines Schriftstückes entnommen werden.
Viele andere Talente erfordern einen Mindestwert im Talent Lesen/Schreiben, ohne den überhaupt keine Probe in diesen speziellen Talenten abgelegt werden kann – hierfür reicht dann jeweils das Beherrschen einer beliebigen Schrift mit dem geforderten Wert." - } } diff --git a/src/packs/__source/talente-brw/schriften/zhayad.json b/src/packs/_source/talente/l-zhayad.json similarity index 90% rename from src/packs/__source/talente-brw/schriften/zhayad.json rename to src/packs/_source/talente/l-zhayad.json index 56b735fd..c75950d8 100644 --- a/src/packs/__source/talente-brw/schriften/zhayad.json +++ b/src/packs/_source/talente/l-zhayad.json @@ -1,9 +1,5 @@ { - "_id": "7Cgnm4drMttc88ul", - "_key": "!items!7Cgnm4drMttc88ul", - "type": "Skill", - "name": "Lesen und Schreiben: Zhayad", - "system": { + "name": "Lesen/Schreiben Zhayad", "gruppe": "Sprachen", "probe": [ "KL", @@ -14,5 +10,4 @@ ], "komplexität": "18", "talent": "Ebenso, wie man unterschiedliche Sprachen sprechen kann, kann man auch unterschiedliche Schriften beherrschen. Für jede Schrift gilt ein separates Talent, das eigens aktiviert und gesteigert werden muss.
In diesem Talent werden normalerweise keine Proben abgelegt. Talentwert 0 bedeutet, dass der Held diese Schrift nicht lesen und schreiben kann. Bei TaW 1 und 2 ist er in der Lage, einzelne Buchstaben zu erkennen und mühsam zuzuordnen. Um kurze Sätze ohne größeren Zeitaufwand zu entziffern oder niederzuschreiben, ist ein TaW von 1/3 der Schriftkomplexität nötig (siehe unten), und sobald der TaW die halbe Komplexität erreicht, sind einfachere Gebrauchstexte schon flüssig zu lesen oder zu schreiben. Der Höchstwert, bis zu dem der TaW jedes Talentes steigerbar ist, entspricht der Komplexität der jeweiligen Schrift – in diesem Fall können aus Details der Schrift sogar Hinweise auf die Herkunft oder eventuell das Alter eines Schriftstückes entnommen werden.
Viele andere Talente erfordern einen Mindestwert im Talent Lesen/Schreiben, ohne den überhaupt keine Probe in diesen speziellen Talenten abgelegt werden kann – hierfür reicht dann jeweils das Beherrschen einer beliebigen Schrift mit dem geforderten Wert." - } } diff --git a/src/packs/__source/talente-brw/kampf/lanzenreiten.json b/src/packs/_source/talente/lanzenreiten.json similarity index 74% rename from src/packs/__source/talente-brw/kampf/lanzenreiten.json rename to src/packs/_source/talente/lanzenreiten.json index 767b3b50..0b928a78 100644 --- a/src/packs/__source/talente-brw/kampf/lanzenreiten.json +++ b/src/packs/_source/talente/lanzenreiten.json @@ -1,10 +1,5 @@ { - "_id": "Jd5V9Hr74weHdgFY", - "_key": "!items!Jd5V9Hr74weHdgFY", - "type": "Skill", "name": "Lanzenreiten", - "system": { "gruppe": "Kampf", "talent": "Dieses Talent stellt den Sturmangriff eines Berittenen mit eingelegter Lanze dar. Es ist ein reines Angriffstalent, das ähnlich wie Fernkampf-Fertigkeiten gehandhabt wird. Mit einer eingelegten Lanze ist es nicht möglich zu parieren." - } } diff --git a/src/packs/__source/talente-brw/handwerk/lederverarbeitung.json b/src/packs/_source/talente/lederverarbeitung.json similarity index 90% rename from src/packs/__source/talente-brw/handwerk/lederverarbeitung.json rename to src/packs/_source/talente/lederverarbeitung.json index 95891834..4535b049 100644 --- a/src/packs/__source/talente-brw/handwerk/lederverarbeitung.json +++ b/src/packs/_source/talente/lederverarbeitung.json @@ -1,9 +1,5 @@ { - "_id": "X132JNfT8ct2YnDl", - "_key": "!items!X132JNfT8ct2YnDl", - "type": "Skill", "name": "Lederverarbeitung", - "system": { "gruppe": "Handwerk", "probe": [ "KL", @@ -14,5 +10,4 @@ ], "behinderung": "situationsbedingt", "talent": "Zu den täglichen Aufgaben einer Reisegruppe gehört sicherlich auch, sich hin und wieder Gedanken über den Zustand ihres Schuhwerks oder ihrer Garderobe machen. Wenn ein Held mit TaW 0 erklärt, er werde – um Geld zu sparen – die abgerissene Sohle selbst unter seinen Stiefel nageln, sollte ihn der Spielleiter beim Marsch zum nächsten Einsatzort diese Entscheidung bereuen lassen. Viele Berufe haben das Lederhandwerk deutlich spezialisiert: Die Berufsgruppen der Schuster und Sattler befassen sich mit Lederarbeiten aller Art, vor allem, wie der Name schon sagt, mit Schuhwerk und Sätteln, aber auch mit lederner Kleidung, Polstermöbeln und Lederharnischen. Zudem sind Schuster als einzige in der Lage, eine Lederrüstung nicht nur provisorisch zu flicken, sondern vollständig wiederherzustellen." - } } diff --git a/src/packs/__source/talente-brw/gesellschaft/lehren.json b/src/packs/_source/talente/lehren.json similarity index 83% rename from src/packs/__source/talente-brw/gesellschaft/lehren.json rename to src/packs/_source/talente/lehren.json index 2849e252..3e0ab012 100644 --- a/src/packs/__source/talente-brw/gesellschaft/lehren.json +++ b/src/packs/_source/talente/lehren.json @@ -1,9 +1,5 @@ { - "_id": "HWN1FkoCA2nz4Upu", - "_key": "!items!HWN1FkoCA2nz4Upu", - "type": "Skill", "name": "Lehren", - "system": { "gruppe": "Gesellschaft", "probe": [ "KL", @@ -13,5 +9,4 @@ "voraussetzung": [ ], "talent": "Nicht jedem ist es gegeben, eigenes Wissen und eigene Fertigkeiten so an andere weiterzugeben, dass diese tatsächlich Lehren für sich selber daraus ziehen können. Da vermutlich nur wenige Helden sich ernsthaft für eine Lehrmeister-Tätigkeit interessieren, wird die Pflege dieses Talentes wohl hauptsächlich Meisterpersonen vorbehalten bleiben." - } } diff --git a/src/packs/__source/talente-brw/wissen/magiekunde.json b/src/packs/_source/talente/magiekunde.json similarity index 88% rename from src/packs/__source/talente-brw/wissen/magiekunde.json rename to src/packs/_source/talente/magiekunde.json index 468f7aa7..24a9a6aa 100644 --- a/src/packs/__source/talente-brw/wissen/magiekunde.json +++ b/src/packs/_source/talente/magiekunde.json @@ -1,9 +1,5 @@ { - "_id": "7sIAP7EbRakMPyl6", - "_key": "!items!7sIAP7EbRakMPyl6", - "type": "Skill", "name": "Magiekunde", - "system": { "gruppe": "Wissen", "probe": [ "KL", @@ -13,5 +9,4 @@ "voraussetzung": [ ], "talent": "Was passiert als nächstes, wenn der alanfanische Zauberer die Hand zur Faust ballt? Könnte dieser in allen Farben schillernde Ring ein altes echsisches Artefakt sein? Wie kann es sein, dass die Fußspuren des Elfen auf einer freien Fläche abrupt enden?
Alle diese Fragen können auch von nicht magisch begabten Helden beantwortet werden, die sich mit den arkanen Künsten beschäftigt haben. Ob als (seltenes und geheimes) Bücherwissen oder aus eigener leidvoller Erfahrung – vielleicht bringt ein Fetzen dieses Wissens in der nächsten Auseinandersetzung die Entscheidung. Ein hoher TaW ist für Magier natürlich unabdingbar." - } } diff --git a/src/packs/__source/talente-brw/handwerk/malen-zeichnen.json b/src/packs/_source/talente/malen-zeichnen.json similarity index 89% rename from src/packs/__source/talente-brw/handwerk/malen-zeichnen.json rename to src/packs/_source/talente/malen-zeichnen.json index 79443a5c..a41db24b 100644 --- a/src/packs/__source/talente-brw/handwerk/malen-zeichnen.json +++ b/src/packs/_source/talente/malen-zeichnen.json @@ -1,9 +1,5 @@ { - "_id": "T6qKEG9D1k8qmBL8", - "_key": "!items!T6qKEG9D1k8qmBL8", - "type": "Skill", "name": "Malen/Zeichnen", - "system": { "gruppe": "Handwerk", "probe": [ "KL", @@ -14,5 +10,4 @@ ], "behinderung": "situationsbedingt", "talent": "Natürlich kann alles, was es am Spieltisch zu zeichnen gibt, von den Spielern real zu Papier gebracht werden, aber im Interesse des Spielflusses (und der Belastung des Sehzentrums des Spielleiterhirns) sollte man auch hier mit Talentproben arbeiten. Ein an einem Luxusleben interessierter Held kann darüber nachdenken, ob er nicht diesen Talentwert steigert und seine Brötchen als Hofmaler verdient. Beim Zusammentreffen mit primitiven Stämmen hat übrigens schon der eine oder andere begabte Abenteurer durch die schmeichelhafte Porträtierung des Häuptlings sein Leben beträchtlich verlängert und sich außerdem einen (ungerechtfertigten) Ruf als mächtiger Zauberer erworben." - } } diff --git a/src/packs/__source/talente-brw/wissen/mechanik.json b/src/packs/_source/talente/mechanik.json similarity index 91% rename from src/packs/__source/talente-brw/wissen/mechanik.json rename to src/packs/_source/talente/mechanik.json index 439efc8c..537a037c 100644 --- a/src/packs/__source/talente-brw/wissen/mechanik.json +++ b/src/packs/_source/talente/mechanik.json @@ -1,9 +1,5 @@ { - "_id": "ZJYwwgKk85u59gk9", - "_key": "!items!ZJYwwgKk85u59gk9", - "type": "Skill", "name": "Mechanik", - "system": { "gruppe": "Wissen", "probe": [ "KL", @@ -13,5 +9,4 @@ "voraussetzung": [ ], "talent": "Die Kenntnis der Mechanik kann in vielen Situationen nützlich sein: Dieses Talent beschreibt das Wissen um einfache physikalische Grundlagen wie die Hebelgesetze, die Reibungskraft, den Flaschenzug, die schiefe Ebene und ähnliches mehr. Wenn der Held selbst improvisierte mechanische Gegenstände herstellen will (z.B. Raumfallen, Schleuderapparate oder Flaschenzüge), so muss er durch eine gelungene Mechanik-Probe die Funktionsfähigkeit seines Apparates nachweisen. Je komplizierter das Gerät ist, desto höher fällt der Zuschlag auf die Mechanik-Probe aus.
Nur teilweise in diesen Bereich fällt die Kenntnis der Feinmechanik, also der Funk- tionsweise von Schlössern, Schlossfallen, Spieluhren oder Ähnlichem. Hierzu wird das Handwerks-Talent Feinmechanik benötigt. Der Meister kann Mechanik-Proben verdeckt auswürfeln und die Funktionsfähigkeit erst bei einer ersten Anwendung oder einem Probelauf bekannt geben." - } } diff --git a/src/packs/__source/talente-brw/gesellschaft/menschenkenntnis.json b/src/packs/_source/talente/menschenkenntnis.json similarity index 92% rename from src/packs/__source/talente-brw/gesellschaft/menschenkenntnis.json rename to src/packs/_source/talente/menschenkenntnis.json index 4556ed39..24f865a4 100644 --- a/src/packs/__source/talente-brw/gesellschaft/menschenkenntnis.json +++ b/src/packs/_source/talente/menschenkenntnis.json @@ -1,9 +1,5 @@ { - "_id": "FQutitgTp9Lcko9C", - "_key": "!items!FQutitgTp9Lcko9C", - "type": "Skill", "name": "Menschenkenntnis", - "system": { "gruppe": "Gesellschaft", "probe": [ "KL", @@ -11,5 +7,4 @@ "CH" ], "talent": "Eine Talentprobe hilft dem Helden, die wahren Absichten einer Meisterperson zu durchschauen. Die Zuverlässigkeit eines Bergführers kann auf diese Art ebenso über prüft werden wie die Ehrlichkeit eines Rosshändlers. Menschenkenntnis-Proben werden prinzipiell vom Meister verdeckt ausgeführt. Je nach Gelingen teilt der Meister dem Spieler mit, welche Gefühle die Person bei dem Helden auslöst – dies kann bei einer misslungenen Probe auch durchaus eine Fehleinschätzung sein. Um zu verhindern, dass der Held mit Hilfe einer einfachen Menschenkenntnis-Probe den zentralen Bösewicht eines Abenteuers schon bei der ersten Begegnung entlarvt, kann der Meister die Talentprobe mit einem geheimen Zuschlag belegen, der sich üblicherweise aus der Erfahrung der Meisterperson ergibt. Eine andere Möglichkeit ist eine vergleichende Probe gegen den Überreden-Wert desjenigen, der durchschaut werden soll.
Um die Absichten eines Wesens aus einer fremden Spezies einzuschätzen, ist auf jeden Fall eine erschwerte Probe erforderlich; bei Personen aus anderen Kulturen (also solchen, zu denen man über kein passendes Kulturwissen verfügt) sind Zuschläge zumindest empfehlenswert." - } } diff --git a/src/packs/__source/talente-brw/sprachen/mohisch.json b/src/packs/_source/talente/mohisch.json similarity index 89% rename from src/packs/__source/talente-brw/sprachen/mohisch.json rename to src/packs/_source/talente/mohisch.json index 4028e917..e9c1575b 100644 --- a/src/packs/__source/talente-brw/sprachen/mohisch.json +++ b/src/packs/_source/talente/mohisch.json @@ -1,9 +1,5 @@ { - "_id": "ghD82e7Y5Uuao5Wk", - "_key": "!items!ghD82e7Y5Uuao5Wk", - "type": "Skill", - "name": "Sprachen kennen: Mohisch", - "system": { + "name": "Sprachen kennen Mohisch", "gruppe": "Sprachen", "probe": [ "KL", @@ -14,5 +10,4 @@ ], "komplexität": "15", "talent": "Ähnlich wie bei den Schriften wird jede aventurische Sprache als eigenes Talent gewertet. Je der Aventurier beherrscht seine Muttersprache auf einem Startwert in Höhe seiner Klugheit–2, manche darüber hinaus noch eine Zweitsprache in Höhe von KL –4. Weitere Sprachen müssen dann explizit erlernt werden.
Um die Sprache identifizieren zu können, ist ein TaW von 1 nötig, um grundlegende Konzepte (“Ich Hunger”) verstehen und vermitteln zu können, ist ein TaW von 2 nötig; um einfache Sätze bilden und verstehen zu können, benötigt man einen TaW von 4. Ein TaW von 1/3 der Komplexität bedeutet recht fließenden Umgang mit allen üblichen grammatischen Konstruktionen und die Kenntnis auch seltener Wörter, während ein TaW in Höhe der halben Komplexität heißt, dass man die Sprache so gut wie ein durchschnittlicher Einheimischer beherrscht (wenn man auch immer noch einen leichten Akzent aufweist). Selbst philosophische oder magietheoretische Schriften gehen selten über eine Komplexität von 15 hinaus." - } } diff --git a/src/packs/__source/talente-brw/handwerk/musizieren.json b/src/packs/_source/talente/musizieren.json similarity index 89% rename from src/packs/__source/talente-brw/handwerk/musizieren.json rename to src/packs/_source/talente/musizieren.json index 1d403820..42dc95a9 100644 --- a/src/packs/__source/talente-brw/handwerk/musizieren.json +++ b/src/packs/_source/talente/musizieren.json @@ -1,9 +1,5 @@ { - "_id": "AuKFFtckKctQ29vk", - "_key": "!items!AuKFFtckKctQ29vk", - "type": "Skill", "name": "Musizieren", - "system": { "gruppe": "Handwerk", "probe": [ "IN", @@ -14,5 +10,4 @@ ], "behinderung": "situationsbedingt", "talent": "Zwar kann auch dieses Talent real von den Spielern ausgeführt werden, aber die Praxis hat gezeigt, dass der Verzicht auf solche Versuche enorm zum Frieden am Spieltisch beitragen kann. Eine gelungene Musizieren-Probe kann an einem Fürstenhof ein paar Dukaten in den Heldenbeutel bringen, die Unterkunft in einer Herberge sichern, aber auch einen aufgebrachten Bären besänftigen. Ein Held kann sich auf ein Instrument spezialisieren oder danach trachten, mehrere zu beherrschen. Um einen einigermaßen hörbaren Vortrag zustande zu bekommen, ist zumindest eine einfach gelungene Probe vonnöten; um damit Geld zu verdienen, sollten wenigstens 4 TaP übrig bleiben." - } } diff --git a/src/packs/__source/talente-brw/sprachen/nujuka.json b/src/packs/_source/talente/nujuka.json similarity index 89% rename from src/packs/__source/talente-brw/sprachen/nujuka.json rename to src/packs/_source/talente/nujuka.json index 26b76b0c..2d189fd5 100644 --- a/src/packs/__source/talente-brw/sprachen/nujuka.json +++ b/src/packs/_source/talente/nujuka.json @@ -1,9 +1,5 @@ { - "_id": "QHNKLiZtiHS1wehI", - "_key": "!items!QHNKLiZtiHS1wehI", - "type": "Skill", - "name": "Sprachen kennen: Nujuka", - "system": { + "name": "Sprachen kennen Nujuka", "gruppe": "Sprachen", "probe": [ "KL", @@ -14,5 +10,4 @@ ], "komplexität": "15", "talent": "Ähnlich wie bei den Schriften wird jede aventurische Sprache als eigenes Talent gewertet. Je der Aventurier beherrscht seine Muttersprache auf einem Startwert in Höhe seiner Klugheit–2, manche darüber hinaus noch eine Zweitsprache in Höhe von KL –4. Weitere Sprachen müssen dann explizit erlernt werden.
Um die Sprache identifizieren zu können, ist ein TaW von 1 nötig, um grundlegende Konzepte (“Ich Hunger”) verstehen und vermitteln zu können, ist ein TaW von 2 nötig; um einfache Sätze bilden und verstehen zu können, benötigt man einen TaW von 4. Ein TaW von 1/3 der Komplexität bedeutet recht fließenden Umgang mit allen üblichen grammatischen Konstruktionen und die Kenntnis auch seltener Wörter, während ein TaW in Höhe der halben Komplexität heißt, dass man die Sprache so gut wie ein durchschnittlicher Einheimischer beherrscht (wenn man auch immer noch einen leichten Akzent aufweist). Selbst philosophische oder magietheoretische Schriften gehen selten über eine Komplexität von 15 hinaus." - } } diff --git a/src/packs/__source/talente-brw/sprachen/oloarkh.json b/src/packs/_source/talente/oloarkh.json similarity index 89% rename from src/packs/__source/talente-brw/sprachen/oloarkh.json rename to src/packs/_source/talente/oloarkh.json index a5c65171..e6f09ea4 100644 --- a/src/packs/__source/talente-brw/sprachen/oloarkh.json +++ b/src/packs/_source/talente/oloarkh.json @@ -1,9 +1,5 @@ { - "_id": "99SytA77DOgtRFjc", - "_key": "!items!99SytA77DOgtRFjc", - "type": "Skill", - "name": "Sprachen kennen: Oloarkh", - "system": { + "name": "Sprachen kennen Oloarkh", "gruppe": "Sprachen", "probe": [ "KL", @@ -14,5 +10,4 @@ ], "komplexität": "10", "talent": "Ähnlich wie bei den Schriften wird jede aventurische Sprache als eigenes Talent gewertet. Je der Aventurier beherrscht seine Muttersprache auf einem Startwert in Höhe seiner Klugheit–2, manche darüber hinaus noch eine Zweitsprache in Höhe von KL –4. Weitere Sprachen müssen dann explizit erlernt werden.
Um die Sprache identifizieren zu können, ist ein TaW von 1 nötig, um grundlegende Konzepte (“Ich Hunger”) verstehen und vermitteln zu können, ist ein TaW von 2 nötig; um einfache Sätze bilden und verstehen zu können, benötigt man einen TaW von 4. Ein TaW von 1/3 der Komplexität bedeutet recht fließenden Umgang mit allen üblichen grammatischen Konstruktionen und die Kenntnis auch seltener Wörter, während ein TaW in Höhe der halben Komplexität heißt, dass man die Sprache so gut wie ein durchschnittlicher Einheimischer beherrscht (wenn man auch immer noch einen leichten Akzent aufweist). Selbst philosophische oder magietheoretische Schriften gehen selten über eine Komplexität von 15 hinaus." - } } diff --git a/src/packs/__source/talente-brw/sprachen/ologhaijan.json b/src/packs/_source/talente/ologhaijan.json similarity index 89% rename from src/packs/__source/talente-brw/sprachen/ologhaijan.json rename to src/packs/_source/talente/ologhaijan.json index 5a550a58..59a2b3a0 100644 --- a/src/packs/__source/talente-brw/sprachen/ologhaijan.json +++ b/src/packs/_source/talente/ologhaijan.json @@ -1,9 +1,5 @@ { - "_id": "Z8EM43zHTKuhosCg", - "_key": "!items!Z8EM43zHTKuhosCg", - "type": "Skill", - "name": "Sprachen kennen: Ologhaijan", - "system": { + "name": "Sprachen kennen Ologhaijan", "gruppe": "Sprachen", "probe": [ "KL", @@ -14,5 +10,4 @@ ], "komplexität": "15", "talent": "Ähnlich wie bei den Schriften wird jede aventurische Sprache als eigenes Talent gewertet. Je der Aventurier beherrscht seine Muttersprache auf einem Startwert in Höhe seiner Klugheit–2, manche darüber hinaus noch eine Zweitsprache in Höhe von KL –4. Weitere Sprachen müssen dann explizit erlernt werden.
Um die Sprache identifizieren zu können, ist ein TaW von 1 nötig, um grundlegende Konzepte (“Ich Hunger”) verstehen und vermitteln zu können, ist ein TaW von 2 nötig; um einfache Sätze bilden und verstehen zu können, benötigt man einen TaW von 4. Ein TaW von 1/3 der Komplexität bedeutet recht fließenden Umgang mit allen üblichen grammatischen Konstruktionen und die Kenntnis auch seltener Wörter, während ein TaW in Höhe der halben Komplexität heißt, dass man die Sprache so gut wie ein durchschnittlicher Einheimischer beherrscht (wenn man auch immer noch einen leichten Akzent aufweist). Selbst philosophische oder magietheoretische Schriften gehen selten über eine Komplexität von 15 hinaus." - } } diff --git a/src/packs/__source/talente-brw/natur/orientierung.json b/src/packs/_source/talente/orientierung.json similarity index 90% rename from src/packs/__source/talente-brw/natur/orientierung.json rename to src/packs/_source/talente/orientierung.json index ce0a8616..e930c3a6 100644 --- a/src/packs/__source/talente-brw/natur/orientierung.json +++ b/src/packs/_source/talente/orientierung.json @@ -1,9 +1,5 @@ { - "_id": "sulsdrRWmR9CCAZg", - "_key": "!items!sulsdrRWmR9CCAZg", - "type": "Skill", "name": "Orientierung", - "system": { "gruppe": "Natur", "probe": [ "KL", @@ -14,5 +10,4 @@ ], "behinderung": "situationsbedingt", "talent": "Das Talent regelt die Fähigkeit, Himmelsrichtungen zu bestimmen und sich in unbekanntem Gelände zurechtzufinden. Diese Begabung ist natürlich bei Seefahrern und Wüstenbewohnern besonders ausgeprägt – bei Leuten also, für die eine gute Orientierung in extrem gleichförmiger Umgebung lebenswichtig ist. Ein sicherer Orientierungssinn versagt aber auch in großen Gebäuden und unterirdischen Anlagen nicht, weil der Held ein Gefühl für die Proportionen der Räume und ihre Lage zueinander hat. Orientierungs-Proben kann der Meister verdeckt würfeln, in besonders schwierigen Situationen (gleichförmige Eiswüsten, unterirdische Labyrinthe) sollte er das sogar tun. Die Vorteile Richtungssinn und Innerer Kompass können die Proben erleichtern, ebenso eine passende Sonderfertigkeit Geländekunde." - } } diff --git a/src/packs/__source/talente-brw/wissen/pflanzenkunde.json b/src/packs/_source/talente/pflanzenkunde.json similarity index 89% rename from src/packs/__source/talente-brw/wissen/pflanzenkunde.json rename to src/packs/_source/talente/pflanzenkunde.json index a26126d0..48400fa9 100644 --- a/src/packs/__source/talente-brw/wissen/pflanzenkunde.json +++ b/src/packs/_source/talente/pflanzenkunde.json @@ -1,9 +1,5 @@ { - "_id": "VCXR9ZGqilM162uW", - "_key": "!items!VCXR9ZGqilM162uW", - "type": "Skill", "name": "Pflanzenkunde", - "system": { "gruppe": "Wissen", "probe": [ "KL", @@ -13,5 +9,4 @@ "voraussetzung": [ ], "talent": "Der Pflanzenkundige weiß nicht nur, wo er nach ihm bekannten Pflanzen suchen muss, sondern er ist auch in der Lage, fremde Pflanzen einzuschätzen, da er sie mit bekannten Gewächsen vergleichen kann. Auch die Fähigkeit, aus Pflanzen Gifte oder Heilmittel zu gewinnen, wird über das Talent Pflanzenkunde geregelt. In allen drei Bereichen (Pflanzen suchen, bestimmen, Elixiere brauen) sind Proben möglich, wobei eine misslungene Probe bei der Pflanzensuche zur Folge hat, dass man die Pflanze nicht findet; gescheiterte Proben auf das Bestimmen von Gewächsen und/oder das Brauen von Elixieren können verhängnisvollere Wirkungen haben. Bestimmungs- und Brau-Proben können vom Meister verdeckt gewürfelt werden." - } } diff --git a/src/packs/__source/talente-brw/kampf/raufen.json b/src/packs/_source/talente/raufen.json similarity index 84% rename from src/packs/__source/talente-brw/kampf/raufen.json rename to src/packs/_source/talente/raufen.json index 3885643a..1f446dc4 100644 --- a/src/packs/__source/talente-brw/kampf/raufen.json +++ b/src/packs/_source/talente/raufen.json @@ -1,10 +1,5 @@ { - "_id": "tc4y62VM5L2eUpEo", - "_key": "!items!tc4y62VM5L2eUpEo", - "type": "Skill", "name": "Raufen", - "system": { "gruppe": "Kampf", "talent": "Dies ist die Fertigkeit, durch Einsatz von Händen, Füßen und Zähnen Schaden anzurichten (womit Schwinger und Geraden, Krallenhiebe, Kopfstöße und Bisse, hochgezogene Knie und eingedrehte Sprungtrittealle unter dieses Talent fallen) oder diesem durch Blockieren, Auspendeln, Seitschritte etc. zu entgehen. Angriffe mit der bloßen Hand oder dem Fuß richten üblicherweise 1W6 TP(A) an: Diese Punkte werden von der Ausdauer abgezogen, die Hälfte zusätzlich noch von den Lebenspunkten." - } } diff --git a/src/packs/__source/talente-brw/wissen/rechnen.json b/src/packs/_source/talente/rechnen.json similarity index 89% rename from src/packs/__source/talente-brw/wissen/rechnen.json rename to src/packs/_source/talente/rechnen.json index 7db8cd95..3035f5a7 100644 --- a/src/packs/__source/talente-brw/wissen/rechnen.json +++ b/src/packs/_source/talente/rechnen.json @@ -1,9 +1,5 @@ { - "_id": "eTtlCZHh5erDu8Tc", - "_key": "!items!eTtlCZHh5erDu8Tc", - "type": "Skill", "name": "Rechnen", - "system": { "gruppe": "Wissen", "probe": [ "KL", @@ -13,5 +9,4 @@ "voraussetzung": [ ], "talent": "Ähnlich wie beim Lesen und Schreiben wird es auch bei diesem Talent selten zu einer Probe kommen. Ein Held mit einem TaW von 0 kann zwar mühsam zählen, aber nicht rechnen; er unterscheidet zwischen viel und wenig bzw. zwischen mehr oder weniger. Helden mit TaW 1 bis 2 rechnen mühselig und unter Zuhilfenahme von Fingern und Zehen. Bei TaW 3 beginnt eine halbwegs flüssige Beherrschung der Grundrechenarten. TaW 4 ist die Mindestvoraussetzung für das Ablegen von Proben auf verschiedenen Wissensgebieten, während sich die höheren Mysterien (Geometrie, Wurzelziehen, Zinseszins bis hin zu den Grundlagen der Infinitesimalrechnung) erst ab einem TaW von 6 zu erschließen beginnen." - } } diff --git a/src/packs/__source/talente-brw/wissen/rechtskunde.json b/src/packs/_source/talente/rechtskunde.json similarity index 90% rename from src/packs/__source/talente-brw/wissen/rechtskunde.json rename to src/packs/_source/talente/rechtskunde.json index f4e9984b..547dbeab 100644 --- a/src/packs/__source/talente-brw/wissen/rechtskunde.json +++ b/src/packs/_source/talente/rechtskunde.json @@ -1,9 +1,5 @@ { - "_id": "fG2uzRRAEwMN9czL", - "_key": "!items!fG2uzRRAEwMN9czL", - "type": "Skill", "name": "Rechtskunde", - "system": { "gruppe": "Wissen", "probe": [ "KL", @@ -13,5 +9,4 @@ "voraussetzung": [ ], "talent": "Dieses Talent regelt die Kenntnis des Rechtswesens verschiedener aventurischer Länder und Völker, vor allem aber der unterschiedlichen Rechtssysteme der einzelnen Gilden, des Kirchenrechts der Zwölfgötter-Kirchen, des Staats- und des Strafrechts. Da die Vorstellungen von Recht und Unrecht von Land zu Land variieren, hilft Rechtskunde auch fahrenden Helden, nicht auf Schritt und Tritt mit der Ordnungsmacht zu kollidieren. In diesem Zusammenhang ist das Talent besonders nützlich, wenn es um das Vermeiden von oder den richtigen Umgang mit heldentypischen Vergehen (Gifteinsatz, Beleidigung von weltlichen und geistlichen Würdenträgern, Waffengesetze) geht. Rechtskunde-Proben können vom Meister verdeckt gewürfelt werden, sie werden durch eventuell vorhandene (oder fehlende) Kulturkunde-Sonderfertigkeiten modifiziert." - } } diff --git a/src/packs/__source/talente-brw/körperlich/reiten.json b/src/packs/_source/talente/reiten.json similarity index 93% rename from src/packs/__source/talente-brw/körperlich/reiten.json rename to src/packs/_source/talente/reiten.json index 67f7db3c..179b0eab 100644 --- a/src/packs/__source/talente-brw/körperlich/reiten.json +++ b/src/packs/_source/talente/reiten.json @@ -1,9 +1,5 @@ { - "_id": "CYdCvsdcm6bl9Fa2", - "_key": "!items!CYdCvsdcm6bl9Fa2", - "type": "Skill", "name": "Reiten", - "system": { "gruppe": "Körperlich", "probe": [ "CH", @@ -14,5 +10,4 @@ ], "behinderung": "-2", "talent": "Man benötigt kein Reiten-Talent, um sich auf einem Pferd zu halten, das im Schritt geht und von einem Begleiter am Zügel geführt wird. Allerdings wird ein Held, der nicht reiten kann, kein Pferd dazu bringen, in eine bestimmte Richtung zu gehen, wenn in einer anderen Richtung saftiges Gras oder duftender Hafer zu finden ist.
Proben werden dann fällig, wenn außergewöhnliche Leistungen verlangt werden: Scharfer Galopp und Sprünge über Hindernisse (auch niedrige) sind nicht ohne Probe möglich; Ritte über unwegsames Terrain und zügelloses Reiten (weil der Held die Hände frei haben will) erfordern bereits Proben mit Zuschlägen, die bei ausgesprochenen Großtaten (Sprünge über 1,5 Schritt Höhe oder mehr als 5 Schritt Länge) drastisch ausfallen sollten.
Reiten-Proben auf unbekannten Reittieren (wie Kamelen und Elefanten für jemanden, der bislang nur Pferde und Esel gewohnt ist) sollten die ersten Male mit einem Zuschlag versehen werden. Ebenfalls mit Reiten-Proben gelenkt werden fliegende Wesen wie Flugechsen oder Hippogriffe. Hier sind jedoch alle Proben prinzipiell um 5 Punkte erschwert, wenn man sich nicht üblicherweise auf diesen Tieren fortbewegt." - } } diff --git a/src/packs/__source/talente-brw/kampf/ringen.json b/src/packs/_source/talente/ringen.json similarity index 87% rename from src/packs/__source/talente-brw/kampf/ringen.json rename to src/packs/_source/talente/ringen.json index 86d46b58..abdac3d2 100644 --- a/src/packs/__source/talente-brw/kampf/ringen.json +++ b/src/packs/_source/talente/ringen.json @@ -1,10 +1,5 @@ { - "_id": "xOgxMG12yiBKeThB", - "_key": "!items!xOgxMG12yiBKeThB", - "type": "Skill", "name": "Ringen", - "system": { "gruppe": "Kampf", "talent": "Hierunter fallen alle Techniken, mit dennen man einen Gegner ergreifen, festhalten, umklammern, niederringen oder zu Boden schleudern kann sowie die Verteidigungsmöglichkeiten dagegen, die vom einfachen Auspendeln bis zum aktiven Entwinden reichen (womit man sich z.B. auch aus der Umschlingung eines Kraken oder einer Schlange befreien kann). Ringen-Angriffe richten als Wurf 1W6 TP(A) an oder bringen den Gegner in eine ungünstige Position und erleichtern damit folgende Angriffe oder halten ihn fest; mehr hierzu siehe Seite 151. Für TP(A) gilt allgemein: Diese Punkte werden von der Ausdauer abgezogen, die Hälfte zusätzlich noch von den LeP." - } } diff --git a/src/packs/__source/talente-brw/sprachen/rogolan.json b/src/packs/_source/talente/rogolan.json similarity index 89% rename from src/packs/__source/talente-brw/sprachen/rogolan.json rename to src/packs/_source/talente/rogolan.json index 4733f108..7985a770 100644 --- a/src/packs/__source/talente-brw/sprachen/rogolan.json +++ b/src/packs/_source/talente/rogolan.json @@ -1,9 +1,5 @@ { - "_id": "ytWM8BJV3RqWmtpr", - "_key": "!items!ytWM8BJV3RqWmtpr", - "type": "Skill", - "name": "Sprachen kennen: Rogolan", - "system": { + "name": "Sprachen kennen Rogolan", "gruppe": "Sprachen", "probe": [ "KL", @@ -14,5 +10,4 @@ ], "komplexität": "21", "talent": "Ähnlich wie bei den Schriften wird jede aventurische Sprache als eigenes Talent gewertet. Je der Aventurier beherrscht seine Muttersprache auf einem Startwert in Höhe seiner Klugheit–2, manche darüber hinaus noch eine Zweitsprache in Höhe von KL –4. Weitere Sprachen müssen dann explizit erlernt werden.
Um die Sprache identifizieren zu können, ist ein TaW von 1 nötig, um grundlegende Konzepte (“Ich Hunger”) verstehen und vermitteln zu können, ist ein TaW von 2 nötig; um einfache Sätze bilden und verstehen zu können, benötigt man einen TaW von 4. Ein TaW von 1/3 der Komplexität bedeutet recht fließenden Umgang mit allen üblichen grammatischen Konstruktionen und die Kenntnis auch seltener Wörter, während ein TaW in Höhe der halben Komplexität heißt, dass man die Sprache so gut wie ein durchschnittlicher Einheimischer beherrscht (wenn man auch immer noch einen leichten Akzent aufweist). Selbst philosophische oder magietheoretische Schriften gehen selten über eine Komplexität von 15 hinaus." - } } diff --git a/src/packs/__source/talente-brw/sprachen/rssahh.json b/src/packs/_source/talente/rssahh.json similarity index 89% rename from src/packs/__source/talente-brw/sprachen/rssahh.json rename to src/packs/_source/talente/rssahh.json index 4f0a3308..3dc38de9 100644 --- a/src/packs/__source/talente-brw/sprachen/rssahh.json +++ b/src/packs/_source/talente/rssahh.json @@ -1,9 +1,5 @@ { - "_id": "rAOzHKxoxltONEzV", - "_key": "!items!rAOzHKxoxltONEzV", - "type": "Skill", - "name": "Sprachen kennen: Rssahh", - "system": { + "name": "Sprachen kennen Rssahh", "gruppe": "Sprachen", "probe": [ "KL", @@ -14,5 +10,4 @@ ], "komplexität": "18", "talent": "Ähnlich wie bei den Schriften wird jede aventurische Sprache als eigenes Talent gewertet. Je der Aventurier beherrscht seine Muttersprache auf einem Startwert in Höhe seiner Klugheit–2, manche darüber hinaus noch eine Zweitsprache in Höhe von KL –4. Weitere Sprachen müssen dann explizit erlernt werden.
Um die Sprache identifizieren zu können, ist ein TaW von 1 nötig, um grundlegende Konzepte (“Ich Hunger”) verstehen und vermitteln zu können, ist ein TaW von 2 nötig; um einfache Sätze bilden und verstehen zu können, benötigt man einen TaW von 4. Ein TaW von 1/3 der Komplexität bedeutet recht fließenden Umgang mit allen üblichen grammatischen Konstruktionen und die Kenntnis auch seltener Wörter, während ein TaW in Höhe der halben Komplexität heißt, dass man die Sprache so gut wie ein durchschnittlicher Einheimischer beherrscht (wenn man auch immer noch einen leichten Akzent aufweist). Selbst philosophische oder magietheoretische Schriften gehen selten über eine Komplexität von 15 hinaus." - } } diff --git a/src/packs/__source/talente-brw/wissen/sagen-legenden.json b/src/packs/_source/talente/sagen-legenden.json similarity index 88% rename from src/packs/__source/talente-brw/wissen/sagen-legenden.json rename to src/packs/_source/talente/sagen-legenden.json index 60a38dc5..ba36a69c 100644 --- a/src/packs/__source/talente-brw/wissen/sagen-legenden.json +++ b/src/packs/_source/talente/sagen-legenden.json @@ -1,9 +1,5 @@ { - "_id": "uG4XcZVLfjVlC5IY", - "_key": "!items!uG4XcZVLfjVlC5IY", - "type": "Skill", "name": "Sagen/Legenden", - "system": { "gruppe": "Wissen", "probe": [ "KL", @@ -13,5 +9,4 @@ "voraussetzung": [ ], "talent": "Wer sich in diesem Talent gebildet hat, kennt sich nicht nur mit Sitten und Gewohnheiten des eigenen Volkes aus, sondern kann auch die Götter und Heroen identifizieren und ist in der Lage, Sagen und Legenden in Wort und/oder Schrift wiederzugeben. Um die Sagen und Legenden fremder Völker zu kennen, ist eine entsprechende Kulturkunde vonnöten, ansonsten sind die Talentproben mit einem Zuschlag zu versehen. Insofern ist dies nicht nur ein Talent für Diplomaten und Völkerkundler, sondern auch für reisende Sänger und Geschichtenerzähler. Bei den verbreiteten Mythen und Legenden der eigenen Kultur sind nur in Ausnahmefällen Proben nötig." - } } diff --git a/src/packs/__source/talente-brw/körperlich/schleichen.json b/src/packs/_source/talente/schleichen.json similarity index 91% rename from src/packs/__source/talente-brw/körperlich/schleichen.json rename to src/packs/_source/talente/schleichen.json index 45e3b82c..32fa4f20 100644 --- a/src/packs/__source/talente-brw/körperlich/schleichen.json +++ b/src/packs/_source/talente/schleichen.json @@ -1,9 +1,5 @@ { - "_id": "bKnNZekziGhv74iu", - "_key": "!items!bKnNZekziGhv74iu", - "type": "Skill", "name": "Schleichen", - "system": { "gruppe": "Körperlich", "probe": [ "MU", @@ -14,5 +10,4 @@ ], "behinderung": "+0", "talent": "Erfolgreiches Schleichen ist nicht nur eine Frage der Körperbeherrschung, sondern auch der Aufmerksamkeit, um potentielle Geräuschquellen wie knarrende Dielen oder trockene Zweige auf dem Boden rechtzeitig zu erkennen und zu vermeiden. Natürlich spielen auch das Terrain und die Bekleidung des Helden eine wichtige Rolle bei dem Versuch, sich geräuschlos fortzubewegen. Auf festgestampftem Erdboden mag dem barfüßigen Helden ein Anschleichen ohne Probe gelingen. Mit Reitstiefeln (durch deren Sohlen man keine Zweige auf dem Boden spüren kann) durch einen Wald voller trockener Äste zu schleichen, erfordert schon ein außerordentliches Schleichen-Talent.
Der Spielleiter sollte eventuelle Zuschläge von Bodenbeschaffenheit, Rüstung und Schuhwerk des Schleichenden abhängig machen. Eine Schleichen-Probe kann mit einer erfolgreichen Sinnenschärfe-Probe gekontert werden. Schleichen-Proben der Helden können (und sollten) vom Meister verdeckt gewürfelt werden." - } } diff --git a/src/packs/__source/talente-brw/handwerk/schlösser-knacken.json b/src/packs/_source/talente/schlösser-knacken.json similarity index 92% rename from src/packs/__source/talente-brw/handwerk/schlösser-knacken.json rename to src/packs/_source/talente/schlösser-knacken.json index 682f7345..fb3c8423 100644 --- a/src/packs/__source/talente-brw/handwerk/schlösser-knacken.json +++ b/src/packs/_source/talente/schlösser-knacken.json @@ -1,9 +1,5 @@ { - "_id": "rm4h47HAV7UDSBew", - "_key": "!items!rm4h47HAV7UDSBew", - "type": "Skill", "name": "Schlösser Knacken", - "system": { "gruppe": "Handwerk", "probe": [ "IN", @@ -14,5 +10,4 @@ ], "behinderung": "situationsbedingt", "talent": "Dies ist die Grundlage des Einbrecherhand- werks. Um ein Schloss ohne den passenden Schlüssel (d.h., mit Dietrichen, Haarnadeln, Messern o.ä.) zu öffnen, kann der Meister Proben auf Schlösser Knacken verlangen, die je nach den Umständen mit deftigen Zuschlägen versehen sind. Ein Misslingen der Probe bedeutet in den meisten Fällen, dass der Dietrich oder das improvisierte Einbruchswerkzeug im Schloss abgebrochen ist und weitere Öffnungsversuche nur unter nochmals erschwerten Bedingungen durchgeführt werden können. Mit diesem Talent können auch bestimmte Arten mechanischer Fallen entschärft werden. Hierbei bedeutet ein Scheitern der Probe allerdings stets, dass der Held die Falle ausgelöst hat und ihre volle Schadenswirkung erleidet.
Ein Held, der ohne Kenntnis dieses Talents versucht, ein Schloss zu öffnen, muss eine FF-Probe ablegen, die um mindestens 7 Punkte erschwert ist, je nach Schloss auch deutlich mehr; ein improvisiertes Werkzeug erleichtert diese Probe um 1 Punkt, ein regelrechter Dietrich um 2 Punkte." - } } diff --git a/src/packs/__source/talente-brw/handwerk/schneidern.json b/src/packs/_source/talente/schneidern.json similarity index 90% rename from src/packs/__source/talente-brw/handwerk/schneidern.json rename to src/packs/_source/talente/schneidern.json index f9639e00..c10b56b3 100644 --- a/src/packs/__source/talente-brw/handwerk/schneidern.json +++ b/src/packs/_source/talente/schneidern.json @@ -1,9 +1,5 @@ { - "_id": "SOwhkPX2rU1LQaOM", - "_key": "!items!SOwhkPX2rU1LQaOM", - "type": "Skill", "name": "Schneidern", - "system": { "gruppe": "Handwerk", "probe": [ "KL", @@ -14,5 +10,4 @@ ], "behinderung": "situationsbedingt", "talent": "Das Schneidern-Talent umfasst in erster Linie Flickschneidereien wie das Annähen abgerissener Knöpfe und Bänder, das Aufnähen von Flicken oder das Stopfen von Löchern. Wer aber hier einen hohen Talentwert vorweisen kann, der ist auch in der Lage, Änderungen an ungeliebter Garderobe vorzunehmen oder gar von Grund auf neue Kleidung herzustellen. Ein professioneller Schneider stellt aus Tuchen verschiedenster Art Kleidungsstücke her, ja, man kann sagen, er veredelt die Stoffe. Schneider sind in der Lage, aus schlichtem Stoff wahre Wunderwerke entstehen zu lassen, und natürlich können sie auch getragene und verschlissene Kleidung wieder in einen annehmbaren Zustand versetzen. Ein Held mit diesem Beruf kann selbstverständlich Wert und Qualität von Kleidungsstücken einschätzen." - } } diff --git a/src/packs/__source/talente-brw/kampf/schwerter.json b/src/packs/_source/talente/schwerter.json similarity index 78% rename from src/packs/__source/talente-brw/kampf/schwerter.json rename to src/packs/_source/talente/schwerter.json index bf05793a..28f9e1c6 100644 --- a/src/packs/__source/talente-brw/kampf/schwerter.json +++ b/src/packs/_source/talente/schwerter.json @@ -1,10 +1,5 @@ { - "_id": "Msv0bWdwlNlF2EtU", - "_key": "!items!Msv0bWdwlNlF2EtU", - "type": "Skill", "name": "Schwerter", - "system": { "gruppe": "Kampf", "talent": "Hierbei handelt es sich um Klingenwaffen mit einer Gesamtlänge von einem halben bis eineinviertel Schritt, wovon die beidseitig geschliffene Klinge mindestens drei Viertel der Länge ausmacht. Schwerter sind zum Hauen und Stechen gedacht, ihre Parierstange erlaubt auch anspruchsvollere Verteidigungsmanöver." - } } diff --git a/src/packs/__source/talente-brw/körperlich/schwimmen.json b/src/packs/_source/talente/schwimmen.json similarity index 90% rename from src/packs/__source/talente-brw/körperlich/schwimmen.json rename to src/packs/_source/talente/schwimmen.json index 7cc71fef..9ad97980 100644 --- a/src/packs/__source/talente-brw/körperlich/schwimmen.json +++ b/src/packs/_source/talente/schwimmen.json @@ -1,9 +1,5 @@ { - "_id": "VLA6RQIKjihz3Jir", - "_key": "!items!VLA6RQIKjihz3Jir", - "type": "Skill", "name": "Schwimmen", - "system": { "gruppe": "Körperlich", "probe": [ "GE", @@ -14,5 +10,4 @@ ], "behinderung": "*2", "talent": "Ein Held mit einem Talentwert von 2 kann sich einigermaßen über Wasser halten und auch langsam in die gewünschte Richtung paddeln. Er muss also keine Schwimmen-Probe ablegen, wenn er in einen Tümpel fällt. Proben werden vor allem fällig, wenn der Held im Wasser eine ungewöhnliche Leistung vollbringen will, z.B. tauchen, einen Gefährten oder eine sperrige Last befördern oder im oder unter Wasser kämpfen.
Bei dem Talent Schwimmen hat der Spielleiter eine Reihe von Faktoren zu berücksichtigen, die die Zuschläge auf eine Probe beeinflussen können: vor allem eine eventuelle Strömung (reißende Brandung oder ein wilder Gebirgsfluss können bis zu 8 Punkte Zuschlag verursachen) und die Rüstung des Helden. Welche Strecken ein Held schwimmend oder tauchend zurücklegen kann, hängt von seiner Ausdauer ab." - } } diff --git a/src/packs/__source/talente-brw/wissen/schätzen.json b/src/packs/_source/talente/schätzen.json similarity index 89% rename from src/packs/__source/talente-brw/wissen/schätzen.json rename to src/packs/_source/talente/schätzen.json index c4bef172..00f3c35e 100644 --- a/src/packs/__source/talente-brw/wissen/schätzen.json +++ b/src/packs/_source/talente/schätzen.json @@ -1,9 +1,5 @@ { - "_id": "6cJ43oMX7LETY2oa", - "_key": "!items!6cJ43oMX7LETY2oa", - "type": "Skill", "name": "Schätzen", - "system": { "gruppe": "Wissen", "probe": [ "KL", @@ -13,5 +9,4 @@ "voraussetzung": [ ], "talent": "Wenn man in einer verlassenen Gruft einen kleinen Ring oder einen goldenen Kelch findet, kann man nicht darauf hoffen, dass an dem Fundstück ein Preisschild befestigt ist. Nach einer gelungenen Schätzen-Probe teilt der Meister dem Helden mit, welchen Preis er in etwa für einen Gegenstand erzielen kann. Beim Einkauf auf dem Markt hilft eine Probe, den wahren Wert einer überteuerten Ware zu erkennen. Schätzen-Proben können (und sollten bisweilen) vom Meister verdeckt gewürfelt werden.
Anmerkung: Das Talent Schätzen bezieht sich übrigens nur auf materielle Werte, nicht jedoch auf das Abschätzen von Entfernungen, benötigten Bausteinen etc. (Für solche Einschätzungen benötigt man das jeweils passende andere Talent.)" - } } diff --git a/src/packs/__source/talente-brw/handwerk/seefahrt.json b/src/packs/_source/talente/seefahrt.json similarity index 85% rename from src/packs/__source/talente-brw/handwerk/seefahrt.json rename to src/packs/_source/talente/seefahrt.json index 7308cf07..61743a82 100644 --- a/src/packs/__source/talente-brw/handwerk/seefahrt.json +++ b/src/packs/_source/talente/seefahrt.json @@ -1,9 +1,5 @@ { - "_id": "YNyOmvZWCVbBCEhw", - "_key": "!items!YNyOmvZWCVbBCEhw", - "type": "Skill", "name": "Seefahrt", - "system": { "gruppe": "Handwerk", "probe": [ "FF", @@ -14,5 +10,4 @@ ], "behinderung": "situationsbedingt", "talent": "Kleinere Wasserfahrzeuge können mit dem Talent Boote Fahren gesteuert werden. Seefahrer sind jedoch die einzigen, die ein mehrmastiges Schiff bedienen und instand halten können. Vor allem das Setzen der Takelage, das Tiefenloten, die Wartung der Ruderanlage, die Überwachung der Ladung, aber auch das Abdichten kleinerer Leckagen und das korrekte Aufrollen von Tauen und Ketten gehören in den Aufgabenbereich des Seefahrers." - } } diff --git a/src/packs/__source/talente-brw/körperlich/selbstbeherrschung.json b/src/packs/_source/talente/selbstbeherrschung.json similarity index 89% rename from src/packs/__source/talente-brw/körperlich/selbstbeherrschung.json rename to src/packs/_source/talente/selbstbeherrschung.json index eb7d3c7a..57d94e1f 100644 --- a/src/packs/__source/talente-brw/körperlich/selbstbeherrschung.json +++ b/src/packs/_source/talente/selbstbeherrschung.json @@ -1,9 +1,5 @@ { - "_id": "0s8Z9shemhz21c9p", - "_key": "!items!0s8Z9shemhz21c9p", - "type": "Skill", "name": "Selbstbeherrschung", - "system": { "gruppe": "Körperlich", "probe": [ "MU", @@ -13,5 +9,4 @@ "voraussetzung": [ ], "talent": "Zum einen bezeichnet die Selbstbeherrschung die Fähigkeit, großen Schmerzen zu widerstehen. Ein hoher TaW kann also nicht nur auf der Folterbank, sondern auch im Kampf (um nach einem schweren Treffer nicht sofort das Bewusstsein zu verlieren) oder auf einem strapaziösen Eilmarsch von Nutzen sein. Zum anderen ist die Selbstbeherrschung auch dann gefordert, wenn es gilt, Versuchungen zu widerstehen oder ein Lachen oder eine spöttische Bemerkung zu unterdrücken. In einigen der letztgenannten Situationen ist es jedoch angebracht, den Helden nicht auf seine Selbstbeherrschung, sondern auf seinen Jähzorn, seinen Stolz o.ä. zu prüfen – oder aber die Selbstbeherrschungs-Probe (in diesem Fall auf MU/MU/KL) um den genannten Wert zu erschweren." - } } diff --git a/src/packs/__source/talente-brw/gesellschaft/sich-verkleiden.json b/src/packs/_source/talente/sich-verkleiden.json similarity index 90% rename from src/packs/__source/talente-brw/gesellschaft/sich-verkleiden.json rename to src/packs/_source/talente/sich-verkleiden.json index 45cfd369..c71855ef 100644 --- a/src/packs/__source/talente-brw/gesellschaft/sich-verkleiden.json +++ b/src/packs/_source/talente/sich-verkleiden.json @@ -1,9 +1,5 @@ { - "_id": "NgnteXT2iTyRjNZp", - "_key": "!items!NgnteXT2iTyRjNZp", - "type": "Skill", "name": "Sich Verkleiden", - "system": { "gruppe": "Gesellschaft", "probe": [ "MU", @@ -14,5 +10,4 @@ ], "behinderung": "*2", "talent": "Der Spielleiter legt die Zuschläge auf die Probe nach Art der gewünschten Verkleidung fest, auch die hervorstechenden Körpermerkmale des Helden sind zu berücksichtigen. (Ein hünenhafter Thorwaler hat gewisse Schwierigkeiten, als zierliches Mohamädel aufzutreten.) Eine gelungene Sich Verkleiden-Probe bewirkt, dass einem Helden seine Verkleidung von der Umgebung zunächst einmal abgenommen wird, die Kleidung also ebenso überzeugend ist wie die Bewegungen und das Verhalten. Doch auch ein gut verkleideter Held muss sein Gegenüber überreden, wenn er mit ihm ins Gespräch kommt. Hohe TaP* aus der Sich Verkleiden-Probe mögen die Überreden-Probe erleichtern, wer­­den sie aber kaum überflüssig machen. Ebenfalls in diesem Talent enthalten ist eine grundlegende Kenntnis der Mode und des Schminkens." - } } diff --git a/src/packs/__source/talente-brw/körperlich/sich-verstecken.json b/src/packs/_source/talente/sich-verstecken.json similarity index 88% rename from src/packs/__source/talente-brw/körperlich/sich-verstecken.json rename to src/packs/_source/talente/sich-verstecken.json index c9b8bd9a..07f515f3 100644 --- a/src/packs/__source/talente-brw/körperlich/sich-verstecken.json +++ b/src/packs/_source/talente/sich-verstecken.json @@ -1,9 +1,5 @@ { - "_id": "o1nYjhmMP0Zzlcw6", - "_key": "!items!o1nYjhmMP0Zzlcw6", - "type": "Skill", "name": "Sich Verstecken", - "system": { "gruppe": "Körperlich", "probe": [ "MU", @@ -14,5 +10,4 @@ ], "behinderung": "-2", "talent": "Das Talent bestimmt die Fähigkeit, ein geeignetes Versteck blitzschnell zu entdecken und zu nutzen. Ein Held, dessen Talentprobe misslingt, hat entweder die Sinnenschärfe seiner Verfolger unterschätzt oder war zu lange unschlüssig (“Soll ich lieber unter den Stuhl ... oder in den Schrank ... oder doch auf den Leuchter?”) In einer Umgebung, die absolut keine Verstecke bietet, braucht der Meister dem Helden keine Talentprobe zu gestatten. Die Proben können vom Meister nach Bedarf verdeckt gewürfelt werden; auch der direkte Vergleich mit einer Sinnenschärfe-Probe ist möglich." - } } diff --git a/src/packs/__source/talente-brw/körperlich/singen.json b/src/packs/_source/talente/singen.json similarity index 85% rename from src/packs/__source/talente-brw/körperlich/singen.json rename to src/packs/_source/talente/singen.json index 32db4b04..5aa4df0e 100644 --- a/src/packs/__source/talente-brw/körperlich/singen.json +++ b/src/packs/_source/talente/singen.json @@ -1,9 +1,5 @@ { - "_id": "2JzW0iuwMRGmcZFz", - "_key": "!items!2JzW0iuwMRGmcZFz", - "type": "Skill", "name": "Singen", - "system": { "gruppe": "Körperlich", "probe": [ "IN", @@ -14,5 +10,4 @@ ], "behinderung": "-3", "talent": "Eine gute Singstimme ist zwar nicht jedem und jeder in die Wiege gelegt, das heißt aber nicht, dass sie sich nicht entwickeln und bilden ließe. Das Talent Singen ist zum Sologesang, dem Vortrag eines Heldenepos oder der Begleitung von Musik geeignet, und ein passabler Vortrag wird sowohl von den Novizen verschiedener Kulte als auch von Theaterchören – und natürlich von professionellen Sängern, Barden und Skalden – erwartet." - } } diff --git a/src/packs/__source/talente-brw/körperlich/sinnenschärfe.json b/src/packs/_source/talente/sinnenschärfe.json similarity index 90% rename from src/packs/__source/talente-brw/körperlich/sinnenschärfe.json rename to src/packs/_source/talente/sinnenschärfe.json index ee63293f..0e35db00 100644 --- a/src/packs/__source/talente-brw/körperlich/sinnenschärfe.json +++ b/src/packs/_source/talente/sinnenschärfe.json @@ -1,9 +1,5 @@ { - "_id": "e2iCixIvYKXZUEcY", - "_key": "!items!e2iCixIvYKXZUEcY", - "type": "Skill", "name": "Sinnenschärfe", - "system": { "gruppe": "Körperlich", "probe": [ "KL", @@ -14,5 +10,4 @@ ], "behinderung": "situationsbedingt", "talent": "“Ich presse mein Ohr an die Tür, höre ich etwas?” So lautet eine Standardfrage in jedem Spiel. Der Spielleiter kann die Genauigkeit aller Helden-Wahrnehmungen von Talent-proben auf Sinnenschärfe abhängig machen. Sinnenschärfe-Proben (die sich natürlich auch auf das Erspüren feiner Gerüche oder das Erspähen weit entfernter Ziele, auf das Ertasten filigraner Gravuren und das Schmecken von Gift im Wein beziehen) sollten vom Meister verdeckt gewürfelt werden. Die meis­ ten Proben werden auf die Eigenschaften KL/IN/IN gewürfelt, nur bei denjenigen, die mit dem Tastsinn zu tun haben, gilt die Kombination KL/IN/FF. Misslungene Proben bedeuten entweder, dass der Held nichts wahrnimmt, oder, dass er einer Täuschung unterliegt." - } } diff --git a/src/packs/__source/talente-brw/kampf/speere.json b/src/packs/_source/talente/speere.json similarity index 87% rename from src/packs/__source/talente-brw/kampf/speere.json rename to src/packs/_source/talente/speere.json index b5893173..76988b61 100644 --- a/src/packs/__source/talente-brw/kampf/speere.json +++ b/src/packs/_source/talente/speere.json @@ -1,10 +1,5 @@ { - "_id": "rI8REyd1RykEwrWG", - "_key": "!items!rI8REyd1RykEwrWG", - "type": "Skill", "name": "Speere", - "system": { "gruppe": "Kampf", "talent": "Dies sind zum einen Waffen von max. 2 Schritt Länge, die üblicherweise einhändig und mit Schild geführt werden, zum anderen alle überlangen Speere, die ausschließlich zum zweihändigen Stoß geeignet sind und zu denen man nicht gleichzeitig Schilde führen kann. Kennzeichen eines Speers ist, dass er – im Gegensatz zu Infanteriewaffen – ausschließlich zum Stoß benutzt wird, während die Parade meist mit dem stumpfen Ende erfolgt (wenn man überhaupt mit dem Speer pariert, was bei den überlangen Waffen ohnehin kaum der Fall sein wird). Einhändige Speere können geworfen werden (zweihändige ebenso, aber meist mit einem wenig beeindruckenden Resultat)." - } } diff --git a/src/packs/__source/talente-brw/wissen/sprachenkunde.json b/src/packs/_source/talente/sprachenkunde.json similarity index 90% rename from src/packs/__source/talente-brw/wissen/sprachenkunde.json rename to src/packs/_source/talente/sprachenkunde.json index b6289ee8..67a000ff 100644 --- a/src/packs/__source/talente-brw/wissen/sprachenkunde.json +++ b/src/packs/_source/talente/sprachenkunde.json @@ -1,9 +1,5 @@ { - "_id": "AJKDlQt3XJWpcyb7", - "_key": "!items!AJKDlQt3XJWpcyb7", - "type": "Skill", "name": "Sprachenkunde", - "system": { "gruppe": "Wissen", "probe": [ "KL", @@ -13,5 +9,4 @@ "voraussetzung": [ ], "talent": "Viele Sprachen zu kennen ist zwar für einen Händler wichtig, hilft aber wenig, wenn man auf ein Volk trifft, das einen obskuren Dialekt spricht, oder man über eine Schrifttafel stolpert, die zwar irgendwie tulamidisch aussieht, aber offensichtlich ein anderes Alphabet verwendet. Hier kommt das Talent Sprachenkunde ins Spiel, das sich mit den Zusammenhängen der bekannten Sprachen, ihren Entwicklungen, Untergruppen und auch ihren verschiedenen Schriftformen beschäftigt. Der Meister kann Proben auf dieses Talent erlauben, wenn der Held Kenntnis einer verwandten Sprache besitzt und von dort auf eine unbekannte Sprache oder Schrift schließen will, um einen Dialekt oder eine Weiterentwicklung einer Sprache zu erkennen.
Sprachenkunde wird zum Erlernen bestimmter (alter) Fremdsprachen benötigt (s.u.)." - } } diff --git a/src/packs/__source/talente-brw/handwerk/steinmetz.json b/src/packs/_source/talente/steinmetz.json similarity index 87% rename from src/packs/__source/talente-brw/handwerk/steinmetz.json rename to src/packs/_source/talente/steinmetz.json index 9da1dd12..9e2173bc 100644 --- a/src/packs/__source/talente-brw/handwerk/steinmetz.json +++ b/src/packs/_source/talente/steinmetz.json @@ -1,9 +1,5 @@ { - "_id": "aKw9Q6KkgN9fERcx", - "_key": "!items!aKw9Q6KkgN9fERcx", - "type": "Skill", "name": "Steinmetz", - "system": { "gruppe": "Handwerk", "probe": [ "FF", @@ -18,5 +14,4 @@ ], "behinderung": "situationsbedingt", "talent": "Ein Steinmetz ist nicht nur in der Lage, Skulpturen aus Stein zu erschaffen, im Hoch- oder Flachrelief zu meißeln und verschiedene Gesteinsarten für seine Kunst zu bewerten, sondern kann auch kann mit einer Talentprobe die Sicherheit eines Gebäudes oder einer Steinbrücke (nicht aber eines Tunnels oder Stollens) feststellen und bestimmen, aus welchen Baumaterialien ein Bauwerk besteht oder wie viele Steine und Mörtel benötigt werden, um ein bestimmtes Gebäude zu errichten." - } } diff --git a/src/packs/__source/talente-brw/handwerk/steinschneider-juwelier.json b/src/packs/_source/talente/steinschneider-juwelier.json similarity index 82% rename from src/packs/__source/talente-brw/handwerk/steinschneider-juwelier.json rename to src/packs/_source/talente/steinschneider-juwelier.json index ea1c2a46..b852562c 100644 --- a/src/packs/__source/talente-brw/handwerk/steinschneider-juwelier.json +++ b/src/packs/_source/talente/steinschneider-juwelier.json @@ -1,9 +1,5 @@ { - "_id": "mRYlHIF23eXtnU7B", - "_key": "!items!mRYlHIF23eXtnU7B", - "type": "Skill", "name": "Steinschneider/Juwelier", - "system": { "gruppe": "Handwerk", "probe": [ "IN", @@ -18,5 +14,4 @@ ], "behinderung": "situationsbedingt", "talent": "Diese Berufe beschäftigen sich mit dem Zuschneiden, Schleifen, Polieren und Einpassen von Edelsteinen und Kristallen aller Art, in erster Linie zu Schmuck-, aber auch zu magischen Zwecken." - } } diff --git a/src/packs/__source/talente-brw/wissen/sternkunde.json b/src/packs/_source/talente/sternkunde.json similarity index 86% rename from src/packs/__source/talente-brw/wissen/sternkunde.json rename to src/packs/_source/talente/sternkunde.json index 16713219..5ce2f581 100644 --- a/src/packs/__source/talente-brw/wissen/sternkunde.json +++ b/src/packs/_source/talente/sternkunde.json @@ -1,9 +1,5 @@ { - "_id": "tkLb0NiGKQbXy6i0", - "_key": "!items!tkLb0NiGKQbXy6i0", - "type": "Skill", "name": "Sternkunde", - "system": { "gruppe": "Wissen", "probe": [ "KL", @@ -13,5 +9,4 @@ "voraussetzung": [ ], "talent": "Nicht nur die Astrologie als Methode der Zukunftsdeutung fällt unter dieses Talent, sondern auch die Navigation nach den Sternen, Methoden der Zeitbestimmung, die schiere Katalogisierung der Himmelsphänomene und dergleichen mehr; dazu auch die theoretischen Kenntnisse um den Lauf der Himmelskörper, auf denen schlussendlich alle vorgenannten Teilbereiche beruhen. Da gute Teleskope rar und teuer sind, ist dies immer noch ein Talent für Leute mit Geduld und scharfen Augen." - } } diff --git a/src/packs/__source/talente-brw/körperlich/stimmen-imitieren.json b/src/packs/_source/talente/stimmen-imitieren.json similarity index 88% rename from src/packs/__source/talente-brw/körperlich/stimmen-imitieren.json rename to src/packs/_source/talente/stimmen-imitieren.json index a4d27ce7..27ef954b 100644 --- a/src/packs/__source/talente-brw/körperlich/stimmen-imitieren.json +++ b/src/packs/_source/talente/stimmen-imitieren.json @@ -1,9 +1,5 @@ { - "_id": "ul6lsqRAEgcvUx2H", - "_key": "!items!ul6lsqRAEgcvUx2H", - "type": "Skill", "name": "Stimmen Imitieren", - "system": { "gruppe": "Körperlich", "probe": [ "KL", @@ -18,5 +14,4 @@ ], "behinderung": "-4", "talent": "Ein guter Wert in diesem Talent deutet vor allem auf die Fähigkeit hin, Tierstimmen täuschend echt nachzuahmen, mit höheren Talentwerten ist es jedoch durchaus möglich, Menschenstimmen zu imitieren. In beiden Fällen gilt, dass der Nachahmer ausreichend Gelegenheit gehabt haben muss, sich den speziellen Ton einzuprägen und zu üben. Erst ein Meisterimitator mit einem TaW von mindestens 15 kann z.B. dem Kammerdiener des Staatsministers des Horasreichs auf Anhieb mit der Stimme seines Herrn antworten." - } } diff --git a/src/packs/__source/talente-brw/kampf/stäbe.json b/src/packs/_source/talente/stäbe.json similarity index 82% rename from src/packs/__source/talente-brw/kampf/stäbe.json rename to src/packs/_source/talente/stäbe.json index 31df1422..796ddbf0 100644 --- a/src/packs/__source/talente-brw/kampf/stäbe.json +++ b/src/packs/_source/talente/stäbe.json @@ -1,10 +1,5 @@ { - "_id": "FuqulqVN3mVDpZcP", - "_key": "!items!FuqulqVN3mVDpZcP", - "type": "Skill", "name": "Stäbe", - "system": { "gruppe": "Kampf", "talent": "Ein einfacher Holzstab von etwa acht Spann Länge kann eine durchaus effektive Waffe sein, wenn sie von einem Meister ihres Fachs geführt wird – und meist sind Kampfstäbe keine ‘einfachen Holzwaffen’, sondern speziell gehärtet, mit Metallbändern umwunden oder gar mit Klingen an beiden Enden versehen. Stäbe sind zweihändig geführte Waffen; die gleichzeitige Benutzung eines Schildes ist nicht möglich." - } } diff --git a/src/packs/__source/talente-brw/kampf/säbel.json b/src/packs/_source/talente/säbel.json similarity index 80% rename from src/packs/__source/talente-brw/kampf/säbel.json rename to src/packs/_source/talente/säbel.json index a9db314f..067cf728 100644 --- a/src/packs/__source/talente-brw/kampf/säbel.json +++ b/src/packs/_source/talente/säbel.json @@ -1,10 +1,5 @@ { - "_id": "P84aRNsfuMDTqiCT", - "_key": "!items!P84aRNsfuMDTqiCT", - "type": "Skill", "name": "Säbel", - "system": { "gruppe": "Kampf", "talent": "Im Gegensatz zu Schwertern werden diese Waffen vornehmlich zum Hieb, selten einmal zum Stich eingesetzt, und ebenfalls im Unterschied zu Schwertern haben sie meist nur eine Schneide (und eventuell eine ausgearbeitete Spitze). Diese Waffenkategorie reicht von kurzen Haumessern über elegante Reitersäbel bis hin zu schweren, fast schon axtähnlichen Waffen." - } } diff --git a/src/packs/__source/talente-brw/körperlich/tanzen.json b/src/packs/_source/talente/tanzen.json similarity index 87% rename from src/packs/__source/talente-brw/körperlich/tanzen.json rename to src/packs/_source/talente/tanzen.json index 66f71c82..5c73e29d 100644 --- a/src/packs/__source/talente-brw/körperlich/tanzen.json +++ b/src/packs/_source/talente/tanzen.json @@ -1,9 +1,5 @@ { - "_id": "804XsMnZcQRAEcET", - "_key": "!items!804XsMnZcQRAEcET", - "type": "Skill", "name": "Tanzen", - "system": { "gruppe": "Körperlich", "probe": [ "CH", @@ -14,5 +10,4 @@ ], "behinderung": "*2", "talent": "Gelungene Tanzen-Proben können nicht nur an manchem Grafenhof, sondern auch bei einem Hexenfest große Vorteile bringen, während eine gescheiterte Probe auch den imposantesten Helden der Lächerlichkeit preisgibt und ihn gesellschaftliches Ansehen kosten kann. Dieses Talent regelt die grundsätzliche Bewegungskoordination und das Rhythmusgefühl; um bei komplizierten höfischen Tänzen eine gute Figur zu machen, ist zudem auch eine solide Kenntnis der Etikette vonnöten, bei Tänzen aus fremden Kulturen auch die Sonderfertigkeit Kulturkunde." - } } diff --git a/src/packs/__source/talente-brw/körperlich/taschendiebstahl.json b/src/packs/_source/talente/taschendiebstahl.json similarity index 89% rename from src/packs/__source/talente-brw/körperlich/taschendiebstahl.json rename to src/packs/_source/talente/taschendiebstahl.json index 703f91b4..8e750a39 100644 --- a/src/packs/__source/talente-brw/körperlich/taschendiebstahl.json +++ b/src/packs/_source/talente/taschendiebstahl.json @@ -1,9 +1,5 @@ { - "_id": "PT9Qc6R2agmxCQyE", - "_key": "!items!PT9Qc6R2agmxCQyE", - "type": "Skill", "name": "Taschendiebstahl", - "system": { "gruppe": "Körperlich", "probe": [ "MU", @@ -14,5 +10,4 @@ ], "behinderung": "*2", "talent": "Sei es das Beutelschneiden oder das unbemerkte Stibitzen eines Gegenstandes aus einer fremden Umhängetasche: Viele Helden von nicht ganz einwandfreiem Ruf bedienen sich dieses Talentes. Bei der Festlegung der Zuschläge auf eine Probe sind diverse Faktoren zu berücksichtigen: Rechnet das Opfer mit einem Diebstahl? Wie sperrig ist die Beute? Hat der Dieb einen Komplizen, der das Opfer anrempelt oder auf andere Weise ablenkt? Und so weiter. Der Spieler kann die Probe beeinflussen, indem er seine Vorgehensweise beschreibt und dem Meister plausibel macht, dass sein spezieller Diebestrick besonders erfolgversprechend ist. Ein versuchter Taschendiebstahl kann mit einer erfolgreichen Sinnenschärfe-Probe gekontert werden." - } } diff --git a/src/packs/__source/talente-brw/sprachen/thorwalsch.json b/src/packs/_source/talente/thorwalsch.json similarity index 89% rename from src/packs/__source/talente-brw/sprachen/thorwalsch.json rename to src/packs/_source/talente/thorwalsch.json index e262cfaa..401ab6e6 100644 --- a/src/packs/__source/talente-brw/sprachen/thorwalsch.json +++ b/src/packs/_source/talente/thorwalsch.json @@ -1,9 +1,5 @@ { - "_id": "mmPlpEKcsDjzcbq3", - "_key": "!items!mmPlpEKcsDjzcbq3", - "type": "Skill", - "name": "Sprachen kennen: Thorwalsch", - "system": { + "name": "Sprachen kennen Thorwalsch", "gruppe": "Sprachen", "probe": [ "KL", @@ -14,5 +10,4 @@ ], "komplexität": "18", "talent": "Ähnlich wie bei den Schriften wird jede aventurische Sprache als eigenes Talent gewertet. Je der Aventurier beherrscht seine Muttersprache auf einem Startwert in Höhe seiner Klugheit–2, manche darüber hinaus noch eine Zweitsprache in Höhe von KL –4. Weitere Sprachen müssen dann explizit erlernt werden.
Um die Sprache identifizieren zu können, ist ein TaW von 1 nötig, um grundlegende Konzepte (“Ich Hunger”) verstehen und vermitteln zu können, ist ein TaW von 2 nötig; um einfache Sätze bilden und verstehen zu können, benötigt man einen TaW von 4. Ein TaW von 1/3 der Komplexität bedeutet recht fließenden Umgang mit allen üblichen grammatischen Konstruktionen und die Kenntnis auch seltener Wörter, während ein TaW in Höhe der halben Komplexität heißt, dass man die Sprache so gut wie ein durchschnittlicher Einheimischer beherrscht (wenn man auch immer noch einen leichten Akzent aufweist). Selbst philosophische oder magietheoretische Schriften gehen selten über eine Komplexität von 15 hinaus." - } } diff --git a/src/packs/__source/talente-brw/wissen/tierkunde.json b/src/packs/_source/talente/tierkunde.json similarity index 86% rename from src/packs/__source/talente-brw/wissen/tierkunde.json rename to src/packs/_source/talente/tierkunde.json index a193f824..d4c572e4 100644 --- a/src/packs/__source/talente-brw/wissen/tierkunde.json +++ b/src/packs/_source/talente/tierkunde.json @@ -1,9 +1,5 @@ { - "_id": "7HYxoBu3pwfZfe55", - "_key": "!items!7HYxoBu3pwfZfe55", - "type": "Skill", "name": "Tierkunde", - "system": { "gruppe": "Wissen", "probe": [ "MU", @@ -13,5 +9,4 @@ "voraussetzung": [ ], "talent": "Für eine erfolgreiche Jagd ist ein solides Wissen über Verbreitung und Verhaltensweise der häufigsten Tierarten natürlich eine Grundvoraussetzung. Der erfahrene Tierkundler kann auch ihm bisher unbekannte Tiere einschätzen, da er sie mit ihm vertrauten Arten zu vergleichen vermag. Erfolgreiche Proben auf Tierkunde können zur Bestimmung einer Tierart dienen, zum Vorausahnen ihres Verhaltens oder aber (in Kombination mit Schleichen-Proben und sicherer Waffenhandhabung) über den Ausgang einer Jagd entscheiden." - } } diff --git a/src/packs/__source/talente-brw/sprachen/tulamidya.json b/src/packs/_source/talente/tulamidya.json similarity index 89% rename from src/packs/__source/talente-brw/sprachen/tulamidya.json rename to src/packs/_source/talente/tulamidya.json index 7c09dcfa..c255c370 100644 --- a/src/packs/__source/talente-brw/sprachen/tulamidya.json +++ b/src/packs/_source/talente/tulamidya.json @@ -1,9 +1,5 @@ { - "_id": "Olb5DudJ3gezLd5l", - "_key": "!items!Olb5DudJ3gezLd5l", - "type": "Skill", - "name": "Sprachen kennen: Tulamidya", - "system": { + "name": "Sprachen kennen Tulamidya", "gruppe": "Sprachen", "probe": [ "KL", @@ -14,5 +10,4 @@ ], "komplexität": "18", "talent": "Ähnlich wie bei den Schriften wird jede aventurische Sprache als eigenes Talent gewertet. Je der Aventurier beherrscht seine Muttersprache auf einem Startwert in Höhe seiner Klugheit–2, manche darüber hinaus noch eine Zweitsprache in Höhe von KL –4. Weitere Sprachen müssen dann explizit erlernt werden.
Um die Sprache identifizieren zu können, ist ein TaW von 1 nötig, um grundlegende Konzepte (“Ich Hunger”) verstehen und vermitteln zu können, ist ein TaW von 2 nötig; um einfache Sätze bilden und verstehen zu können, benötigt man einen TaW von 4. Ein TaW von 1/3 der Komplexität bedeutet recht fließenden Umgang mit allen üblichen grammatischen Konstruktionen und die Kenntnis auch seltener Wörter, während ein TaW in Höhe der halben Komplexität heißt, dass man die Sprache so gut wie ein durchschnittlicher Einheimischer beherrscht (wenn man auch immer noch einen leichten Akzent aufweist). Selbst philosophische oder magietheoretische Schriften gehen selten über eine Komplexität von 15 hinaus." - } } diff --git a/src/packs/__source/talente-brw/handwerk/tätowieren.json b/src/packs/_source/talente/tätowieren.json similarity index 86% rename from src/packs/__source/talente-brw/handwerk/tätowieren.json rename to src/packs/_source/talente/tätowieren.json index 7cc7d2bb..093e1fa6 100644 --- a/src/packs/__source/talente-brw/handwerk/tätowieren.json +++ b/src/packs/_source/talente/tätowieren.json @@ -1,9 +1,5 @@ { - "_id": "DzBx1QsSdcdeOmpu", - "_key": "!items!DzBx1QsSdcdeOmpu", - "type": "Skill", "name": "Tätowieren", - "system": { "gruppe": "Handwerk", "probe": [ "IN", @@ -18,5 +14,4 @@ ], "behinderung": "situationsbedingt", "talent": "Die Verzierung der Haut mit Bildern ist vor allem bei den Thorwalern sehr beliebt, die diese Kunst auch in den Hafenstädten Aventuriens verbreitet haben. Ein Tätowierer muss wissen, wo er ein bestimmtes Motiv am besten anbringt, wie viel Farbe er bei welchem Hauttyp verwendet – und er muss die Stechernadel zu führen wissen. Tätowierer sind als einzige in der Lage, dauerhafte Hautbilder anzufertigen." - } } diff --git a/src/packs/__source/talente-brw/sprachen/ur-tulamidya.json b/src/packs/_source/talente/ur-tulamidya.json similarity index 89% rename from src/packs/__source/talente-brw/sprachen/ur-tulamidya.json rename to src/packs/_source/talente/ur-tulamidya.json index 6d8d5706..885bd67e 100644 --- a/src/packs/__source/talente-brw/sprachen/ur-tulamidya.json +++ b/src/packs/_source/talente/ur-tulamidya.json @@ -1,9 +1,5 @@ { - "_id": "SwdP11gFns5JgEfZ", - "_key": "!items!SwdP11gFns5JgEfZ", - "type": "Skill", - "name": "Sprachen kennen: Ur-Tulamidya", - "system": { + "name": "Sprachen kennen Ur-Tulamidya", "gruppe": "Sprachen", "probe": [ "KL", @@ -14,5 +10,4 @@ ], "komplexität": "21", "talent": "Ähnlich wie bei den Schriften wird jede aventurische Sprache als eigenes Talent gewertet. Je der Aventurier beherrscht seine Muttersprache auf einem Startwert in Höhe seiner Klugheit–2, manche darüber hinaus noch eine Zweitsprache in Höhe von KL –4. Weitere Sprachen müssen dann explizit erlernt werden.
Um die Sprache identifizieren zu können, ist ein TaW von 1 nötig, um grundlegende Konzepte (“Ich Hunger”) verstehen und vermitteln zu können, ist ein TaW von 2 nötig; um einfache Sätze bilden und verstehen zu können, benötigt man einen TaW von 4. Ein TaW von 1/3 der Komplexität bedeutet recht fließenden Umgang mit allen üblichen grammatischen Konstruktionen und die Kenntnis auch seltener Wörter, während ein TaW in Höhe der halben Komplexität heißt, dass man die Sprache so gut wie ein durchschnittlicher Einheimischer beherrscht (wenn man auch immer noch einen leichten Akzent aufweist). Selbst philosophische oder magietheoretische Schriften gehen selten über eine Komplexität von 15 hinaus." - } } diff --git a/src/packs/__source/talente-brw/natur/wettervorhersage.json b/src/packs/_source/talente/wettervorhersage.json similarity index 87% rename from src/packs/__source/talente-brw/natur/wettervorhersage.json rename to src/packs/_source/talente/wettervorhersage.json index b0bdda99..0ca15d5a 100644 --- a/src/packs/__source/talente-brw/natur/wettervorhersage.json +++ b/src/packs/_source/talente/wettervorhersage.json @@ -1,9 +1,5 @@ { - "_id": "ctII8sz0L63k2B10", - "_key": "!items!ctII8sz0L63k2B10", - "type": "Skill", "name": "Wettervorhersage", - "system": { "gruppe": "Natur", "probe": [ "KL", @@ -14,5 +10,4 @@ ], "behinderung": "situationsbedingt", "talent": "Dem wetterkundigen Helden kündigen sich bei erfolgreicher Probe auf dieses Talent ungünstige Wetterlagen so frühzeitig an, dass er geeignete Vorsichtsmaßnahmen treffen kann. Bei Bewohnern von Gegenden mit ständig gleich bleibendem Wetter und bei typischen Städtern ist dieses Talent wenig ausgeprägt. Die Proben auf Wettervorhersage sollten vom Meister verdeckt gewürfelt werden. In passendem Terrain kann eine Wettervorhersage-Probe durch eine passende Geländekunde unterstützt werden." - } } diff --git a/src/packs/__source/talente-brw/natur/wildnisleben.json b/src/packs/_source/talente/wildnisleben.json similarity index 89% rename from src/packs/__source/talente-brw/natur/wildnisleben.json rename to src/packs/_source/talente/wildnisleben.json index f020743b..efdf704b 100644 --- a/src/packs/__source/talente-brw/natur/wildnisleben.json +++ b/src/packs/_source/talente/wildnisleben.json @@ -1,9 +1,5 @@ { - "_id": "ezrNZjkIOvRnd6OW", - "_key": "!items!ezrNZjkIOvRnd6OW", - "type": "Skill", "name": "Wildnisleben", - "system": { "gruppe": "Natur", "probe": [ "IN", @@ -14,5 +10,4 @@ ], "behinderung": "situationsbedingt", "talent": "Unter diesem Begriff sind all die kleinen Dinge zusammengefasst, die für ein Leben unter freiem Himmel wichtig sind: Auswahl und Einrichten eines geeigneten und geschützten Lagerplatzes, Feuer anzünden, optimales Brennmaterial finden, das sich auch in feuchtem Zustand für ein Lagerfeuer eignet, usw. Ein Held, der bei dieser Talentprobe scheitert, darf sich nicht wundern, wenn bei einem nächtlichen Wolkenbruch sein Zelt samt Ausrüstung davonschwimmt, weil er das Bächlein, an dessen Ufer er rastet, gewaltig unterschätzt hat.Wildnisleben-Proben können vom Meister verdeckt gewürfelt werden, je nach bekannter Umgebung kann eine passende Sonderfertigkeit Geländekunde die Wildnisleben-Proben erleichtern." - } } diff --git a/src/packs/__source/talente-brw/kampf/wurfbeile.json b/src/packs/_source/talente/wurfbeile.json similarity index 80% rename from src/packs/__source/talente-brw/kampf/wurfbeile.json rename to src/packs/_source/talente/wurfbeile.json index 8a169271..4c48bb6f 100644 --- a/src/packs/__source/talente-brw/kampf/wurfbeile.json +++ b/src/packs/_source/talente/wurfbeile.json @@ -1,10 +1,5 @@ { - "_id": "RlZCxOXeawtewWi9", - "_key": "!items!RlZCxOXeawtewWi9", - "type": "Skill", "name": "Wurfbeile", - "system": { "gruppe": "Kampf", "talent": "Diese vor allem bei Piraten wie den Thorwalern gebräuchliche Fernkampfwaffe ist schwierig zu handhaben, da sie während des Fluges um die Querachse rotiert. Die meisten Wurfäxte sind ‘scharf an allen Kanten’ und bestehen gänzlich aus Metall. Ebenfalls mit diesem Talent eingesetzt werden alle sich ebenfalls überschlagenden Wurfkolben und Wurfhölzer." - } } diff --git a/src/packs/__source/talente-brw/kampf/wurfmesser.json b/src/packs/_source/talente/wurfmesser.json similarity index 79% rename from src/packs/__source/talente-brw/kampf/wurfmesser.json rename to src/packs/_source/talente/wurfmesser.json index b0c0b6ad..8f72a77f 100644 --- a/src/packs/__source/talente-brw/kampf/wurfmesser.json +++ b/src/packs/_source/talente/wurfmesser.json @@ -1,10 +1,5 @@ { - "_id": "Iwgq2pQyTm7j9dso", - "_key": "!items!Iwgq2pQyTm7j9dso", - "type": "Skill", "name": "Wurfmesser", - "system": { "gruppe": "Kampf", "talent": "Messer und Dolche sind die am weitesten verbreiteten Wurfwaffen, aber nicht jedes Messer, jeder Dolch ist zum Werfen geeignet. Wurftauglich sind nur speziell ausgewogene Waffen, die meistens über einen besonders leichten Griff verfügen. Auch Wurfscheiben und -ringe fallen in diese Kategorie, ebenso wie Wurfpfeile und -dorne." - } } diff --git a/src/packs/__source/talente-brw/kampf/wurfspeere.json b/src/packs/_source/talente/wurfspeere.json similarity index 76% rename from src/packs/__source/talente-brw/kampf/wurfspeere.json rename to src/packs/_source/talente/wurfspeere.json index 5cb75a72..31a92504 100644 --- a/src/packs/__source/talente-brw/kampf/wurfspeere.json +++ b/src/packs/_source/talente/wurfspeere.json @@ -1,10 +1,5 @@ { - "_id": "JDyuelQrB5Baha1V", - "_key": "!items!JDyuelQrB5Baha1V", - "type": "Skill", "name": "Wurfspeere", - "system": { "gruppe": "Kampf", "talent": "Der Wurfspeer ist eine bei allen Völkern gebräuchliche Jagdwaffe und wurde einst auch in größerem Umfang in den aventurischen Armeen eingesetzt. Es gibt Wurfspeere in verschiedenen Größen und auch solche, die mit kurzen Schleuderhölzern beschleunigt werden." - } } diff --git a/src/packs/__source/talente-brw/körperlich/zechen.json b/src/packs/_source/talente/zechen.json similarity index 88% rename from src/packs/__source/talente-brw/körperlich/zechen.json rename to src/packs/_source/talente/zechen.json index 4d4d4463..66442fcf 100644 --- a/src/packs/__source/talente-brw/körperlich/zechen.json +++ b/src/packs/_source/talente/zechen.json @@ -1,9 +1,5 @@ { - "_id": "VcB5f4uw6OgwlEuU", - "_key": "!items!VcB5f4uw6OgwlEuU", - "type": "Skill", "name": "Zechen", - "system": { "gruppe": "Körperlich", "probe": [ "IN", @@ -13,5 +9,4 @@ "voraussetzung": [ ], "talent": "Ein Held kann jederzeit zu einem Gelage eingeladen werden, das ihn an die Grenze seiner Belastbarkeit bringt. Normalerweise entstehen durch starkes Zechen zwar Zugewinne an Mut und Verminderungen diverser Ängste, aber drastische Abzüge auf alle anderen guten Eigenschaften, wie auch eine Steigerung von Attributen wie Neugier, Aberglauben und vor allem Jähzorn. Durch gelungene Proben auf Zechen kann ein Held solche üblen Folgen abwehren. Auch der schwere Kopf am nächsten Tag – in Aventurien je nach Schwere ‘Wolf ’ oder ‘Werwolf ’ genannt – lässt sich durch eine erfolgreiche Zechen-Probe in die Schranken weisen." - } } diff --git a/src/packs/__source/talente-brw/sprachen/zhayad.json b/src/packs/_source/talente/zhayad.json similarity index 89% rename from src/packs/__source/talente-brw/sprachen/zhayad.json rename to src/packs/_source/talente/zhayad.json index 816d37e8..266fd7e4 100644 --- a/src/packs/__source/talente-brw/sprachen/zhayad.json +++ b/src/packs/_source/talente/zhayad.json @@ -1,9 +1,5 @@ { - "_id": "f5oGKTxsge95K21n", - "_key": "!items!f5oGKTxsge95K21n", - "type": "Skill", - "name": "Sprachen kennen: Garethi", - "system": { + "name": "Sprachen kennen Garethi", "gruppe": "Sprachen", "probe": [ "KL", @@ -14,5 +10,4 @@ ], "komplexität": "15", "talent": "Ähnlich wie bei den Schriften wird jede aventurische Sprache als eigenes Talent gewertet. Je der Aventurier beherrscht seine Muttersprache auf einem Startwert in Höhe seiner Klugheit–2, manche darüber hinaus noch eine Zweitsprache in Höhe von KL –4. Weitere Sprachen müssen dann explizit erlernt werden.
Um die Sprache identifizieren zu können, ist ein TaW von 1 nötig, um grundlegende Konzepte (“Ich Hunger”) verstehen und vermitteln zu können, ist ein TaW von 2 nötig; um einfache Sätze bilden und verstehen zu können, benötigt man einen TaW von 4. Ein TaW von 1/3 der Komplexität bedeutet recht fließenden Umgang mit allen üblichen grammatischen Konstruktionen und die Kenntnis auch seltener Wörter, während ein TaW in Höhe der halben Komplexität heißt, dass man die Sprache so gut wie ein durchschnittlicher Einheimischer beherrscht (wenn man auch immer noch einen leichten Akzent aufweist). Selbst philosophische oder magietheoretische Schriften gehen selten über eine Komplexität von 15 hinaus." - } } diff --git a/src/packs/__source/talente-brw/handwerk/zimmermann.json b/src/packs/_source/talente/zimmermann.json similarity index 85% rename from src/packs/__source/talente-brw/handwerk/zimmermann.json rename to src/packs/_source/talente/zimmermann.json index 8889fb5f..f6d4939a 100644 --- a/src/packs/__source/talente-brw/handwerk/zimmermann.json +++ b/src/packs/_source/talente/zimmermann.json @@ -1,9 +1,5 @@ { - "_id": "WGqaRU485R2MjTBE", - "_key": "!items!WGqaRU485R2MjTBE", - "type": "Skill", "name": "Zimmermann", - "system": { "gruppe": "Handwerk", "probe": [ "KL", @@ -14,5 +10,4 @@ ], "behinderung": "situationsbedingt", "talent": "Zimmerleute, Schiffszimmerleute und Dachdecker beherrschen verschiedenste Arten der Holzbearbeitung, wobei sie sich jedoch (im Gegensatz zur normalen Holzbearbeitung) eher mit größeren Holzarbeiten wie Treppen, Dachbalken oder Schiffsmasten, deren Statik und deren Verbindungen beschäftigen. Außerdem sind sie in der Lage, den Wert und die Stabilität von Holzkonstruktionen zu beurteilen." - } } diff --git a/src/packs/__source/talente-brw/kampf/zweihand-hiebwaffen.json b/src/packs/_source/talente/zweihand-hiebwaffen.json similarity index 78% rename from src/packs/__source/talente-brw/kampf/zweihand-hiebwaffen.json rename to src/packs/_source/talente/zweihand-hiebwaffen.json index 637d048d..6a3746d0 100644 --- a/src/packs/__source/talente-brw/kampf/zweihand-hiebwaffen.json +++ b/src/packs/_source/talente/zweihand-hiebwaffen.json @@ -1,10 +1,5 @@ { - "_id": "EWlqFBI5ThyexcTs", - "_key": "!items!EWlqFBI5ThyexcTs", - "type": "Skill", "name": "Zweihand-Hiebwaffen", - "system": { "gruppe": "Kampf", "talent": "Bei diesen Waffen kommt es darauf an, die schwere (und bisweilen scharfe) Schlagfläche mit großer Wucht punktgenau ins Ziel zu bringen, da der Stiel der Waffe kaum Schaden anrichtet; für Stiche und Stöße sind diese Waffen nicht geeignet, ebenso sind ihre Paradefähigkeiten stark eingeschränkt." - } } diff --git a/src/packs/__source/talente-brw/kampf/zweihandschwerter-säbel.json b/src/packs/_source/talente/zweihandschwerter-säbel.json similarity index 83% rename from src/packs/__source/talente-brw/kampf/zweihandschwerter-säbel.json rename to src/packs/_source/talente/zweihandschwerter-säbel.json index a452afd9..e4dab0ff 100644 --- a/src/packs/__source/talente-brw/kampf/zweihandschwerter-säbel.json +++ b/src/packs/_source/talente/zweihandschwerter-säbel.json @@ -1,10 +1,5 @@ { - "_id": "WfSR1wXjmWJcdMLo", - "_key": "!items!WfSR1wXjmWJcdMLo", - "type": "Skill", "name": "Zweihandschwerter/-säbel", - "system": { "gruppe": "Kampf", "talent": "Unter dieses Talent fallen alle besonders langen Klingenwaffen, die in erster Linie zum Hieb gedacht sind, mit denen sich allerdings auch auf kürzere Distanz zustoßen lässt und mit denen auch Paraden noch angemessen möglich sind (auch wenn sämtliche Aktionen etwas langsamer vonstatten gehen als mit den universell einsetzbaren Anderthalbhändern, die ebenfalls in diese Kategorie fallen, da sie ähnlich eingesetzt werden)." - } } diff --git a/src/packs/__source/talente-brw/gesellschaft/überreden.json b/src/packs/_source/talente/überreden.json similarity index 96% rename from src/packs/__source/talente-brw/gesellschaft/überreden.json rename to src/packs/_source/talente/überreden.json index 94108568..cb040de6 100644 --- a/src/packs/__source/talente-brw/gesellschaft/überreden.json +++ b/src/packs/_source/talente/überreden.json @@ -1,9 +1,5 @@ { - "_id": "WOVcxACW8cFeBqTC", - "_key": "!items!WOVcxACW8cFeBqTC", - "type": "Skill", "name": "Überreden", - "system": { "gruppe": "Gesellschaft", "probe": [ "MU", @@ -14,5 +10,4 @@ ], "behinderung": "situationsbedingt", "talent": "Mit diesem Talent ist ein Held in der Lage, sein Gegenüber mit einem Wortgewitter so zu verwirren, dass sich dieses – zumindest kurzfristig – vom Helden zu bestimmten Handlungen bewegen lässt. Anwendungsgebiete dieses Talents sind:
  • Feilschen: Neben anderen gehört auch das Feilschen zu den Fertigkeiten, die nach Möglichkeit nicht durch Proben, sondern durch reale Spieleraktionen dargestellt werden können. In diesem Fall lässt sich der Meister je nach Talentwert des Helden leichter, schwieriger oder gar nicht herunterhandeln. Im Interesse einer zügigen Spielabwicklung kann aber auch eine Feilschen-Probe gewürfelt werden. Der Spieler kann sich selbst Zuschläge auf die Probe auferlegen – je höher der Zuschlag, desto höher der Prozentsatz, um den er den Verkäufer herunterhandeln kann: +0 = 5 %, +1 = 10 %, +2 = 15 % usw. bis zu einem Maximum von +9 = 50 %. Hier ist durchaus auch eine vergleichende Probe möglich. Auch das Anpreisen, also die Fertigkeit, eine beliebige Ware so lautstark und wortgewandt zu präsentieren, dass sich zumindest potentielle Käufer einfinden, die die Ware begutachten, fällt unter diesen Bereich.
  • Betteln: Dies umfasst sowohl die Kenntnis der richtigen Verkleidung als auch der entsprechenden herzerweichenden Sprüche, um mitleidigen Seelen einige Heller aus der Tasche zu ziehen. Betteln ist in den Städten nicht nur unumgänglicher Zwang für die Ärmsten der Armen, nein, es hat sich über die Jahre zu einer Art Lehrberuf entwickelt, wie ja auch die Bettler in den großen Städten Aventuriens oftmals regelrechte Gilden gegründet haben.
  • Lügen: Eigentlich sollte man denken, dass jeder Held dieses Talent besitzt, doch es gibt einige Typen, die so gründlich zur Ehrlichkeit erzogen wurden, dass sie auch dann Probleme mit dem Lügen haben, wenn es um ihr Leben geht. Eine Lüge kann nur dann erfolgreich sein, wenn das Opfer im Augenblick keine Möglichkeit hat, den Wahrheitsgehalt einer Aussage zu überprüfen. Eine gelungene Probe kann das Opfer dazu bringen, auf die Überprüfung einer unwahren Aussage zu verzichten. Lügen-Proben können je nach Situation vom Meister verdeckt gewürfelt werden. Eine Lüge lässt sich unter Umständen durch eine erfolgreiche Menschenkenntnis-Probe durchschauen. Die Fertigkeit, vor Gardisten, Richtern und gehörnten Ehegatten eigene Verfehlungen als klein und unwichtig erscheinen zu lassen und schnell zu anderen Themen überzugehen, nennt man üblicherweise nicht Lügen, sondern Herausreden, sie wird aber trotzdem genauso behandelt.
" - } } diff --git a/src/packs/__source/talente-brw/gesellschaft/überzeugen.json b/src/packs/_source/talente/überzeugen.json similarity index 86% rename from src/packs/__source/talente-brw/gesellschaft/überzeugen.json rename to src/packs/_source/talente/überzeugen.json index d9e5439b..6cb7fe17 100644 --- a/src/packs/__source/talente-brw/gesellschaft/überzeugen.json +++ b/src/packs/_source/talente/überzeugen.json @@ -1,9 +1,5 @@ { - "_id": "zybPhpBCTeJZNX2C", - "_key": "!items!zybPhpBCTeJZNX2C", - "type": "Skill", "name": "Überzeugen", - "system": { "gruppe": "Gesellschaft", "probe": [ "KL", @@ -18,5 +14,4 @@ ], "behinderung": "situationsbedingt", "talent": "Dieses Talent bewirkt bei richtiger Anwendung eine mindestens einige Tage andauernde Bewusstseinsänderung, ganz im Gegensatz zum eher kurzfristigen Überreden. Der Meister legt die Zuschläge auf die entsprechende Probe fest, die von der Klugheit und der Lebenseinstellung des Opfers abhängen. Wer eine Karriere als Geweihter oder Demagoge anstrebt, wird um dieses Talent nicht herumkommen." - } } diff --git a/src/packs/_source/wunden/arm-r-wunde.json b/src/packs/_source/wunden/arm-r-wunde.json new file mode 100644 index 00000000..0227d04b --- /dev/null +++ b/src/packs/_source/wunden/arm-r-wunde.json @@ -0,0 +1,44 @@ +{ + "name": "Wunde rechter Arm", + "notes": "Nur für das Spiel mit Trefferzonen gedacht.
Eine Waffe oder andere Auswirkung hat eine Wunde am rechten Arm verursacht", + "unique": false, + "image": "icons/skills/wounds/bone-broken-knee-beam.webp", + "effects": [ + { + "key": "system.wunden.armrechts", + "mode": 2, + "value": "1", + "priority": 10 + }, + { + "key": "system.attribute.at.rechts.mod", + "mode": 2, + "value": "-2", + "priority": 10 + }, + { + "key": "system.atribute.pa.mod", + "mode": 2, + "value": "-2", + "priority": 10 + }, + { + "key": "system.pa.rechts.mod", + "mode": 2, + "value": "-2", + "priority": 10 + }, + { + "key": "system.attribute.kk.mod", + "mode": 2, + "value": "-2", + "priority": 10 + }, + { + "key": "system.attribute.ff.mod", + "mode": 2, + "value": "-2", + "priority": 10 + } + ] +} \ No newline at end of file diff --git a/src/packs/_source/wunden/arm-wunde.json b/src/packs/_source/wunden/arm-wunde.json new file mode 100644 index 00000000..464bbe25 --- /dev/null +++ b/src/packs/_source/wunden/arm-wunde.json @@ -0,0 +1,44 @@ +{ + "name": "Wunde linker Arm", + "notes": "Nur für das Spiel mit Trefferzonen gedacht.
Eine Waffe oder andere Auswirkung hat eine Wunde am linken Arm verursacht", + "unique": false, + "image": "icons/skills/wounds/bone-broken-knee-beam.webp", + "effects": [ + { + "key": "system.wunden.armlinks", + "mode": 2, + "value": "1", + "priority": 10 + }, + { + "key": "system.pa.mod", + "mode": 2, + "value": "-2", + "priority": 10 + }, + { + "key": "system.at.links.mod", + "mode": 2, + "value": "-2", + "priority": 10 + }, + { + "key": "system.pa.links.mod", + "mode": 2, + "value": "-2", + "priority": 10 + }, + { + "key": "system.attribute.kk.mod", + "mode": 2, + "value": "-2", + "priority": 10 + }, + { + "key": "system.attribute.ff.mod", + "mode": 2, + "value": "-2", + "priority": 10 + } + ] +} \ No newline at end of file diff --git a/src/packs/_source/wunden/bauch-wunde.json b/src/packs/_source/wunden/bauch-wunde.json new file mode 100644 index 00000000..543ffbad --- /dev/null +++ b/src/packs/_source/wunden/bauch-wunde.json @@ -0,0 +1,44 @@ +{ + "name": "Bauchwunde", + "notes": "Nur für das Spiel mit Trefferzonen gedacht.
Eine Waffe oder andere Auswirkung hat eine Wunde am Bauch verursacht", + "unique": false, + "image": "icons/skills/wounds/bone-broken-knee-beam.webp", + "effects": [ + { + "key": "system.wunden.bauch", + "mode": 2, + "value": "1", + "priority": 10 + }, + { + "key": "system.at.mod", + "mode": 2, + "value": "-1", + "priority": 10 + }, + { + "key": "system.pa.mod", + "mode": 2, + "value": "-1", + "priority": 10 + }, + { + "key": "system.attribute.ko.mod", + "mode": 2, + "value": "-1", + "priority": 10 + }, + { + "key": "system.attribute.kk.mod", + "mode": 2, + "value": "-1", + "priority": 10 + }, + { + "key": "system.gs.mod", + "mode": 2, + "value": "-1", + "priority": 10 + } + ] +} \ No newline at end of file diff --git a/src/packs/_source/wunden/bein-r-wunde.json b/src/packs/_source/wunden/bein-r-wunde.json new file mode 100644 index 00000000..f971dc13 --- /dev/null +++ b/src/packs/_source/wunden/bein-r-wunde.json @@ -0,0 +1,44 @@ +{ + "name": "Wunde rechtes Bein", + "notes": "Nur für das Spiel mit Trefferzonen gedacht.
Eine Waffe oder andere Auswirkung hat eine Wunde am rechten Bein verursacht", + "unique": false, + "image": "icons/skills/wounds/bone-broken-knee-beam.webp", + "effects": [ + { + "key": "system.wunden.beinrechts", + "mode": 2, + "value": "1", + "priority": 10 + }, + { + "key": "system.at.mod", + "mode": 2, + "value": "-2", + "priority": 10 + }, + { + "key": "system.pa.mod", + "mode": 2, + "value": "-2", + "priority": 10 + }, + { + "key": "system.attribute.ge.mod", + "mode": 2, + "value": "-2", + "priority": 10 + }, + { + "key": "system.ini.mod", + "mode": 2, + "value": "-2", + "priority": 10 + }, + { + "key": "system.gs.mod", + "mode": 2, + "value": "-1", + "priority": 10 + } + ] +} \ No newline at end of file diff --git a/src/packs/_source/wunden/bein-wunde.json b/src/packs/_source/wunden/bein-wunde.json new file mode 100644 index 00000000..af684c3b --- /dev/null +++ b/src/packs/_source/wunden/bein-wunde.json @@ -0,0 +1,44 @@ +{ + "name": "Wunde linkes Bein", + "notes": "Nur für das Spiel mit Trefferzonen gedacht.
Eine Waffe oder andere Auswirkung hat eine Wunde am linken Bein verursacht", + "unique": false, + "image": "icons/skills/wounds/bone-broken-knee-beam.webp", + "effects": [ + { + "key": "system.wunden.beinlinks", + "mode": 2, + "value": "1", + "priority": 10 + }, + { + "key": "system.at.mod", + "mode": 2, + "value": "-2", + "priority": 10 + }, + { + "key": "system.pa.mod", + "mode": 2, + "value": "-2", + "priority": 10 + }, + { + "key": "system.attribute.ge.mod", + "mode": 2, + "value": "-2", + "priority": 10 + }, + { + "key": "system.ini.mod", + "mode": 2, + "value": "-2", + "priority": 10 + }, + { + "key": "system.gs.mod", + "mode": 2, + "value": "-1", + "priority": 10 + } + ] +} \ No newline at end of file diff --git a/src/packs/_source/wunden/brust-wunde.json b/src/packs/_source/wunden/brust-wunde.json new file mode 100644 index 00000000..62238edf --- /dev/null +++ b/src/packs/_source/wunden/brust-wunde.json @@ -0,0 +1,38 @@ +{ + "name": "Brustwunde", + "notes": "Nur für das Spiel mit Trefferzonen gedacht.
Eine Waffe oder andere Auswirkung hat eine Wunde an der Brust verursacht", + "unique": false, + "image": "icons/skills/wounds/bone-broken-knee-beam.webp", + "effects": [ + { + "key": "system.wunden.brust", + "mode": 2, + "value": "1", + "priority": 10 + }, + { + "key": "system.attribute.kk.mod", + "mode": 2, + "value": "-1", + "priority": 10 + }, + { + "key": "system.attribute.ko.mod", + "mode": 2, + "value": "-1", + "priority": 10 + }, + { + "key": "system.at.mod", + "mode": 2, + "value": "-1", + "priority": 10 + }, + { + "key": "system.pa.mod", + "mode": 2, + "value": "-1", + "priority": 10 + } + ] +} \ No newline at end of file diff --git a/src/packs/_source/wunden/kopf-wunde.json b/src/packs/_source/wunden/kopf-wunde.json new file mode 100644 index 00000000..dbee3d04 --- /dev/null +++ b/src/packs/_source/wunden/kopf-wunde.json @@ -0,0 +1,38 @@ +{ + "name": "Kopfwunde", + "notes": "Nur für das Spiel mit Trefferzonen gedacht.
Eine Waffe oder andere Auswirkung hat eine Wunde am Kopf verursacht", + "unique": false, + "image": "icons/skills/wounds/bone-broken-knee-beam.webp", + "effects": [ + { + "key": "system.wunden.kopf", + "mode": 2, + "value": "1", + "priority": 10 + }, + { + "key": "system.attribute.mu.mod", + "mode": 2, + "value": "-2", + "priority": 10 + }, + { + "key": "system.attribute.kl.mod", + "mode": 2, + "value": "-2", + "priority": 10 + }, + { + "key": "system.attribute.in.mod", + "mode": 2, + "value": "-2", + "priority": 10 + }, + { + "key": "system.ini.mod", + "mode": 2, + "value": "-2", + "priority": 10 + } + ] +} \ No newline at end of file diff --git a/src/packs/_source/wunden/wunde.json b/src/packs/_source/wunden/wunde.json new file mode 100644 index 00000000..0f6ff0cb --- /dev/null +++ b/src/packs/_source/wunden/wunde.json @@ -0,0 +1,50 @@ +{ + "name": "Wunde", + "notes": "Nur für das Spiel ohne Trefferzonen gedacht.
Eine Waffe oder andere Auswirkung hat eine Wunde verursacht", + "unique": false, + "image": "icons/skills/wounds/bone-broken-knee-beam.webp", + "effects": [ + { + "key": "system.wunden", + "mode": 2, + "value": "1", + "priority": 10 + }, + { + "key": "system.at.mod", + "mode": 2, + "value": "-2", + "priority": 10 + }, + { + "key": "system.pa.mod", + "mode": 2, + "value": "-2", + "priority": 10 + }, + { + "key": "system.fk.mod", + "mode": 2, + "value": "-2", + "priority": 10 + }, + { + "key": "system.ini.mod", + "mode": 2, + "value": "-2", + "priority": 10 + }, + { + "key": "system.attribute.ge.mod", + "mode": 2, + "value": "-2", + "priority": 10 + }, + { + "key": "system.gs.mod", + "mode": 2, + "value": "-1", + "priority": 10 + } + ] +} \ No newline at end of file diff --git a/src/style/_active-effect-sheet.scss b/src/style/_active-effect-sheet.scss new file mode 100644 index 00000000..dd1dddb0 --- /dev/null +++ b/src/style/_active-effect-sheet.scss @@ -0,0 +1,38 @@ +.active-effect { + + display: flex; + flex-direction: column; + + .header { + flex: 0; + display: grid; + grid-template-columns: 48px 1fr 48px; + grid-template-rows: 48px; + gap: 8px; + + input { + height: 48px; + line-height: 48px; + } + } + + .meta { + flex: 1; + display: flex; + flex-direction: column; + margin-top: 8px; + + label { + flex: 0; + } + + div.editor { + flex: 1; + border: 1px inset #ccc; + background-color: rgba(0, 0, 0, 0.2) + } + + + } + +} diff --git a/src/style/_advantage-sheet.scss b/src/style/_advantage-sheet.scss new file mode 100644 index 00000000..105bce7f --- /dev/null +++ b/src/style/_advantage-sheet.scss @@ -0,0 +1,48 @@ +.dsa41.sheet.item.advantage { + + .sheet-body { + padding: 8px; + } + + .tab.advantage.active { + display: grid; + grid-template-columns: 1fr 1fr; + grid-template-rows: 48px 1fr; + gap: 8px; + height: 100%; + + div { + + label { + width: 100%; + display: inline-block; + } + + input { + width: 100%; + display: inline-block; + } + } + + .body { + grid-column: 1/3; + display: flex; + flex-direction: column; + height: 100%; + + label { + flex: 0; + } + + .editor { + flex: 1; + + border: 1px inset #ccc; + background-color: rgba(0, 0, 0, 0.2); + + } + } + + } + +} diff --git a/src/style/_character-sheet.scss b/src/style/_character-sheet.scss index beddb2ab..b08494f8 100644 --- a/src/style/_character-sheet.scss +++ b/src/style/_character-sheet.scss @@ -1,3 +1,8 @@ +@use "sass:color"; +@use "_numbers"; +@use "_colours" as colour; + + .dsa41.sheet.actor.character { .window-header.flexrow.draggable.resizable { @@ -52,11 +57,192 @@ overflow: auto; } + .tab.overview.active { + + display: flex; + flex-direction: column; + height: 100%; + + .meta-data { + flex: 0; + + columns: 2; + gap: 0 16px; + + + div { + break-inside: avoid; + padding: 4px 0; + } + + .double { + display: grid; + grid-template-columns: 1fr 1fr; + grid-template-areas: 'label label' 'left right'; + gap: 0 8px; + + label { + grid-area: label; + } + } + + .editor { + background-color: rgba(0, 0, 0, 0.2) + } + + & + .meta-data { + flex: 1; + } + } + + .meta-data.html { + + & > div { + display: flex; + flex-direction: column; + height: 100%; + + label { + flex: 0; + } + + .editor { + flex: 1; + } + } + + } + + } + + .tab.attributes.active { + height: 100%; + + .attribute { + padding: 8px 0; + display: flex; + gap: 0 8px; + + label { + width: 120px; + text-align: right; + vertical-align: middle; + line-height: 24px; + } + + input { + max-width: 80px; + text-align: right; + } + + .mod { + color: grey; + text-shadow: 0 -1px 0 #ccc; + box-Shadow: 1px 1px 1px rgba(0, 0, 0, 0.5); + border-radius: 4px; + height: 24px; + width: 24px; + background: linear-gradient(0deg, rgba(24, 24, 24, 1) 0%, rgba(80, 80, 80, 1) 100%);; + display: inline-block; + text-align: center; + vertical-align: middle; + line-height: 24px; + margin-left: 4px; + } + + } + + .attributes-overview { + + columns: 2; + gap: 0 16px; + + } + + .resource-overview { + + .attribute { + + } + + } + + .advantages, .special-abilities { + margin-bottom: 16px; + + ul { + list-style-type: none; + padding: 0; + margin: 0; + text-indent: 0; + + li { + display: inline-block; + } + + .advantage, .special-ability { + position: relative; + border: 1px solid gold; + box-shadow: 2px 2px 4px #000; + border-radius: 8px; + height: 24px; + color: gold; + text-shadow: 1px 1px 1px rgba(0, 0, 0, 0.2); + display: inline-block; + padding: 0 8px; + margin-left: 0; + margin-bottom: 4px; + background-image: url("../assets/velvet_button.png"); + background-repeat: repeat-y; + background-size: cover; + + span { + position: relative; + z-index: 2; + line-height: 24px; + vertical-align: middle; + } + + &.special-ability { + &::after { + background: rgba(128, 0, 96, 0.5); + } + } + + &::after { + content: ""; + position: absolute; + left: 0; + top: 0; + right: 0; + bottom: 0; + border-radius: 8px; + background: rgba(0, 128, 0, 0.5); + } + + & + .advantage, & + .special-ability { + margin-left: 8px; + } + + &.nachteil { + font-style: italic; + + &::after { + background: rgba(128, 0, 0, 0.5); + } + } + } + } + + } + + + } + .backpack.active { - padding: 8px; display: grid; grid-template-columns: 1fr 320px; - grid-template-rows: 64px 1fr; + grid-template-rows: 74px 1fr; gap: 10px; height: 100%; grid-template-areas: @@ -97,32 +283,365 @@ } - .tab.combat { + .tab.combat.active { - .initiaitve { - width: 100%; - height: 48px; + display: grid; + + grid-template-columns: 1fr 320px; + grid-template-rows: 32px 32px 1fr; + grid-template-areas: "res res" "wounds wounds" "actions actions"; + gap: 10px; + + .tab-resources { + grid-area: res; + } + + .wounds { + position: relative; + height: 24px; + display: flex; + margin-bottom: 8px; + padding-left: 130px; + grid-area: wounds; + + label { + position: absolute; + left: 0; + top: 0; + line-height: 24px; + width: 120px; + bottom: 0; + vertical-align: middle; + text-align: right; + height: 24px; + display: inline-block; + z-index: 2; + } + + .filled-segment { + border: 1px solid black; + background-image: url('../assets/gradient.png'); + background-size: 24px 100%; + position: relative; + flex: 1; + text-align: center; + vertical-align: middle; + line-height: 24px; + color: white; + text-shadow: 2px 2px 0 rgba(0, 0, 0, 0.3); + background-color: rgba(255, 0, 0, 0.8); + background-blend-mode: multiply; + + } + + .empty-segment { + border: 1px solid black; + background-image: url('../assets/gradient.png'); + background-size: 32px 100%; + position: relative; + flex: 1; + text-align: center; + vertical-align: middle; + line-height: 24px; + color: gold; + text-shadow: 2px 2px 0 rgba(0, 0, 0, 0.3); + background-color: rgba(0, 0, 0, 0.8); + background-blend-mode: multiply; + + } + + } + + .actions { + grid-area: actions; + } + + &.zones { + grid-template-areas: "res res" "wounds wounds" "actions paperdoll"; + + .paperdoll { + grid-area: paperdoll; + + div { + position: relative; + margin-left: 9px; + margin-top: 42px; + + .wound { + position: absolute; + width: 32px; + height: 32px; + border-radius: 16px; + border: 1px solid black; + background-color: rgba(0, 0, 0, 0.5); + box-shadow: 1px 1px 1px rgba(0, 0, 0, 0.3); + line-height: 32px; + vertical-align: middle; + text-align: center; + color: red; + + + &.armlinks { + top: 146px; + left: 210px; + } + + &.armrechts { + top: 146px; + left: 60px; + } + + &.beinlinks { + top: 346px; + left: 210px; + } + + &.beinrechts { + top: 346px; + left: 60px; + } + + &.bauch { + top: 166px; + left: 136px; + } + + &.kopf { + top: 6px; + left: 136px + } + + &.brust { + top: 86px; + left: 110px; + } + + } + + .armor { + position: absolute; + width: 32px; + height: 32px; + border-radius: 0 0 16px 16px; + line-height: 32px; + vertical-align: middle; + text-align: center; + border: 1px solid silver; + background-color: rgba(0, 0, 0, 0.5); + box-shadow: 1px 1px 1px rgba(0, 0, 0, 0.3); + color: silver; + + &.armlinks { + top: 180px; + left: 210px; + } + + &.armrechts { + top: 180px; + left: 60px; + } + + &.beinlinks { + top: 380px; + left: 210px; + } + + &.beinrechts { + top: 380px; + left: 60px; + } + + &.bauch { + top: 200px; + left: 136px; + } + + &.kopf { + top: 40px; + left: 136px + } + + &.brust { + top: 120px; + left: 110px; + } + } + } + + } + + } + + + } + + .tab.spells { + + tr { + height: 24px; + margin: 0; + padding: 0; + } + + td { + margin: 0; + padding: 0; + height: 24px; + } + + $color: #05f; + + .spell.rollable svg { + width: 24px; + height: 24px; + top: 1px; + z-index: 1; + position: relative; + + .border { + fill: #0000; + } + + .center { + fill: $color; + stroke: colour.$rollable-die-border-color; + } + + .topleft { + fill: color.adjust($color, $lightness: numbers.$lighter_factor); + stroke: colour.$rollable-die-border-color; + } + + .bottomleft { + fill: color.adjust($color, $lightness: numbers.$lightest_factor); + stroke: colour.$rollable-die-border-color; + } + + .topright { + fill: color.adjust($color, $lightness: numbers.$darken_factor); + stroke: colour.$rollable-die-border-color; + } + + .bottomright, .bottom { + fill: color.adjust($color, $lightness: numbers.$darkest_factor); + stroke: colour.$rollable-die-border-color; + } + } + + .die-column { + width: 24px; + } + + .clickable { + span { + position: relative; + z-index: 1; + } + } + + tbody { + + tr { + + position: relative; + + &::after { + content: ''; + background-image: linear-gradient(to right, rgba(color.scale($color, $lightness: numbers.$zebra_light), numbers.$start_gradient), rgba(color.scale($color, $lightness: numbers.$zebra_light), numbers.$end_2_gradient)); + border-top-right-radius: 8px; + border-bottom-right-radius: 8px; + position: absolute; + top: 2px; + left: 12px; + bottom: 2px; + right: 33%; + z-index: 0; + pointer-events: none; + } + + &:nth-child(odd) { + &::after { + background-image: linear-gradient(to right, rgba(color.scale($color, $lightness: numbers.$zebra_dark), numbers.$start_gradient), rgba(color.scale($color, $lightness: numbers.$zebra_dark), numbers.$end_2_gradient)); + } + } + } + + } + + .merkmal-list { + list-style: none; + margin: 0; + padding: 0; + text-indent: 0; + + li { + display: inline-block; + padding: 0 4px; + } + } + + } + + .tab.liturgies { + + table { + border-top: unset; + border-bottom: unset; + position: relative; + } + + .liturgy-header { + background: unset; + border: unset; + + tr { + height: 90px; + + th { + vertical-align: middle; + color: black; + text-shadow: 2px 2px 1px rgba(0, 0, 0, 0.2); + } + } + } + + td, th { + padding-left: 8px; + } + } + + .tab-resources { + display: flex; + justify-content: center; + gap: 0 16px; + padding-bottom: 8px; + + & > div { + + + height: 32px; position: relative; label { width: 80px; - line-height: 48px; + line-height: 32px; vertical-align: middle; } input { display: inline-block; width: 40px; - height: 48px; + height: 32px; } span.inline { - line-height: 48px; + line-height: 32px; vertical-align: middle; width: 40px; text-align: center; } + } } diff --git a/src/style/_colours.scss b/src/style/_colours.scss index 1c562ed0..4fc2e42f 100644 --- a/src/style/_colours.scss +++ b/src/style/_colours.scss @@ -1,15 +1,27 @@ $nachteil-color: #555753ff; +$nachteil-text-color: #FFFF; $liturgie-color: #edd400ff; +$liturgie-text-color: #000F; $zauber-color: #3465a4ff; +$zauber-text-color: #000F; $talent-color: #f57900ff; +$talent-text-color: #000F; $kampftalent-color: #cc0000ff; +$kampftalent-text-color: #FFFF; $talent-body-color: #16bd6c; +$talent-body-text-color: #000; $talent-nature-color: #46800d; +$talent-nature-text-color: #000; $talent-social-color: #ae9809; +$talent-social-text-color: #000; $talent-knowledge-color: #d319ba; +$talent-knowledge-text-color: #000; $talent-language-color: #573bbc; +$talent-language-text-color: #fff; $talent-crafting-color: #ae6813; +$talent-crafting-text-color: #000; + $harm-fill-color: #ff0000ff; $harm-border-color: #3c0000ff; diff --git a/src/style/_creature-sheet.scss b/src/style/_creature-sheet.scss index 57ddaf3a..6c222a63 100644 --- a/src/style/_creature-sheet.scss +++ b/src/style/_creature-sheet.scss @@ -109,34 +109,35 @@ svg { stroke-width: 0.5; + $color: #f30; + .border { - fill: colour.$harm-fill-color; - stroke: colour.$harm-border-color; + fill: #0000; } .center { - fill: colour.$harm-fill-color; - stroke: colour.$harm-border-color; + fill: $color; + stroke: colour.$rollable-die-border-color; } .topleft { - fill: color.adjust(colour.$harm-fill-color, $lightness: numbers.$lighter_factor); - stroke: colour.$harm-border-color; + fill: color.adjust($color, $lightness: numbers.$lighter_factor); + stroke: colour.$rollable-die-border-color; } .bottomleft { - fill: color.adjust(colour.$harm-fill-color, $lightness: numbers.$lightest_factor); - stroke: colour.$harm-border-color; + fill: color.adjust($color, $lightness: numbers.$lightest_factor); + stroke: colour.$rollable-die-border-color; } .topright { - fill: color.adjust(colour.$harm-fill-color, $lightness: numbers.$darken_factor); - stroke: colour.$harm-border-color; + fill: color.adjust($color, $lightness: numbers.$darken_factor); + stroke: colour.$rollable-die-border-color; } .bottomright, .bottom { - fill: color.adjust(colour.$harm-fill-color, $lightness: numbers.$darkest_factor); - stroke: colour.$harm-border-color; + fill: color.adjust($color, $lightness: numbers.$darkest_factor); + stroke: colour.$rollable-die-border-color; } } diff --git a/src/style/_equipment-sheet.scss b/src/style/_equipment-sheet.scss index 18b0ee70..80f041f0 100644 --- a/src/style/_equipment-sheet.scss +++ b/src/style/_equipment-sheet.scss @@ -6,7 +6,6 @@ .sheet-body { position: relative; - top: 5px; .tab.active { padding: 4px; diff --git a/src/style/_group-sheet.scss b/src/style/_group-sheet.scss index 5316d214..0f61f602 100644 --- a/src/style/_group-sheet.scss +++ b/src/style/_group-sheet.scss @@ -56,6 +56,10 @@ } } + .rollable:hover { + text-shadow: 0 0 10px rgb(255 0 0); + } + .character { width: 192px; diff --git a/src/style/_lists.scss b/src/style/_lists.scss index a27c6b3d..7372c8d6 100644 --- a/src/style/_lists.scss +++ b/src/style/_lists.scss @@ -5,6 +5,10 @@ columns: 2; column-gap: 20px; + .talent-group { + break-inside: avoid-column; + } + ul { list-style-type: none; padding-left: 0; diff --git a/src/style/_liturgy-banner.scss b/src/style/_liturgy-banner.scss new file mode 100644 index 00000000..a6d30efb --- /dev/null +++ b/src/style/_liturgy-banner.scss @@ -0,0 +1,247 @@ +@use "sass:map"; +@use "sass:color"; +@use "colours" as colour; +@use "numbers"; + +$deity_colours_border: ( + "Praios": orange, + "Rondra": red, + "Efferd": #74d0ec, + "Travia": #c6491a, + "Boron": #515151, + "Hesinde": #089e08, + "Firun": #8fdeff, + "Tsa": #6a24d8, + "Phex": #1569da, + "Peraine": #56a116, + "Ingerimm": #a53d19, + "Rahja": #ed70c2, +); +$deity_colours_tint: ( + "Praios": rgba(orange, 0.5), + "Rondra": rgba(red, 0.5), + "Efferd": rgba(#74d0ec, 0.5), + "Travia": rgba(#c6491a, 0.5), + "Boron": rgba(#515151, 0.5), + "Hesinde": rgba(#089e08, 0.5), + "Firun": rgba(#8fdeff, 0.5), + "Tsa": linear-gradient( + -45deg, + rgba(255, 0, 0, 0.5) 0%, + rgba(255, 154, 0, 0.5) 10%, + rgba(208, 222, 33, 0.5) 20%, + rgba(79, 220, 74, 0.5) 30%, + rgba(63, 218, 216, 0.5) 40%, + rgba(47, 201, 226, 0.5) 50%, + rgba(28, 127, 238, 0.5) 60%, + rgba(95, 21, 242, 0.5) 70%, + rgba(186, 12, 248, 0.5) 80%, + rgba(251, 7, 217, 0.5) 90%, + rgba(255, 0, 0, 0.5) 100% + ), + "Phex": rgba(#1569da, 0.5), + "Peraine": rgba(#56a116, 0.5), + "Ingerimm": rgba(#a53d19, 0.5), + "Rahja": rgba(#ed70c2, 0.5), +); + +@mixin coloring($name) { + $color: map.get($deity_colours_border, $name); + $color-tint: map.get($deity_colours_tint, $name); + &.#{$name} { + + th.background { + &::after { + background: $color-tint; + } + } + + .banner-bot { + border-color: $color; + } + + .banner-mid { + border-color: $color; + } + + .banner-top { + &::before, &::after { + border-color: $color; + } + } + } +} + +.tab.liturgies { + table { + + @include coloring('Praios'); + @include coloring('Rondra'); + @include coloring('Efferd'); + @include coloring('Travia'); + @include coloring('Boron'); + @include coloring('Hesinde'); + @include coloring('Firun'); + @include coloring('Tsa'); + @include coloring('Phex'); + @include coloring('Peraine'); + @include coloring('Ingerimm'); + @include coloring('Rahja'); + + tr { + th.background { + + &::before { + position: absolute; + content: ''; + background-image: url("../assets/velvet_strip.png"); + background-repeat: repeat-y; + background-size: cover; + width: 86px; + height: 100%; + + top: 45px; + left: 12px; + } + + &::after { /* for tinting the texture */ + content: ""; + position: absolute; + width: 86px; + height: 100%; + + top: 45px; + left: 12px; + } + } + } + + .banner-top { + position: relative; + + width: 90px; + + img { + position: absolute; + top: 2px; + left: 1px; + width: 90px; + height: 90px; + border: 0; + z-index: 1; + } + + &::after { + z-index: 0; + border-width: 0 4px 0 4px; + //background-color: #64b; + border-style: solid; + position: absolute; + content: ""; + left: -2px; + top: 45px; + bottom: 0; + width: 94px; + } + + &::before { + position: absolute; + border-radius: 45px; + height: 94px; + width: 94px; + content: ''; + left: -2px; + right: -2px; + top: 0; + border-width: 4px; + border-style: solid; + z-index: 2; + } + } + + .banner-mid { + position: relative; + border-width: 0 4px 0 4px; + //background-color: #64b; + border-style: solid; + width: 90px; + + div { + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + display: flex; + justify-content: center; + align-items: center; + + div.rank-label { + position: absolute; + left: 2px; + right: 2px; + top: 0; + bottom: 0; + border-bottom: 2px solid black; + color: gold; + text-shadow: 2px 2px 1px black; + } + } + } + + .banner-bot { + position: relative; + border-width: 4px; + border-style: solid; + width: 90px; + height: 12px; + } + } + + .liturgy.rollable { + width: 24px; + + svg { + $color: #e4de61; + width: 24px; + height: 24px; + top: 1px; + z-index: 1; + position: relative; + + .border { + fill: #0000; + } + + .center { + fill: $color; + stroke: colour.$rollable-die-border-color; + } + + .topleft { + fill: color.adjust($color, $lightness: numbers.$lighter_factor); + stroke: colour.$rollable-die-border-color; + } + + .bottomleft { + fill: color.adjust($color, $lightness: numbers.$lightest_factor); + stroke: colour.$rollable-die-border-color; + } + + .topright { + fill: color.adjust($color, $lightness: numbers.$darken_factor); + stroke: colour.$rollable-die-border-color; + } + + .bottomright, .bottom { + fill: color.adjust($color, $lightness: numbers.$darkest_factor); + stroke: colour.$rollable-die-border-color; + } + } + } + + .clickable:hover { + text-shadow: 0 0 10px rgb(255 0 0); + } + +} diff --git a/src/style/_modify-liturgy.scss b/src/style/_modify-liturgy.scss new file mode 100644 index 00000000..86414daa --- /dev/null +++ b/src/style/_modify-liturgy.scss @@ -0,0 +1,45 @@ +.dsa41.dialog.liturgy { + + table { + tr { + th:first-child { + width: 48px; + } + } + } + + table#mods { + + tr { + th:first-child { + width: 48px; + } + } + + .remove-mod { + width: 32px; + height: 32px; + } + + } + + .editor { + + display: grid; + grid-template-columns: 48px 1fr; + + #mod_rank { + display: inline-block; + width: 48px; + } + + select { + + } + + } + + .dialog-buttons { + flex: 0; + } +} diff --git a/src/style/_numbers.scss b/src/style/_numbers.scss index 6781ec4b..e79d87d1 100644 --- a/src/style/_numbers.scss +++ b/src/style/_numbers.scss @@ -4,6 +4,7 @@ $darken_factor: -15%; $darkest_factor: -40%; $start_gradient: 0.8; $end_gradient: 0.2; +$end_2_gradient: 0; $direction_gradient: 90deg; $tab-border-width: 1px; @@ -17,3 +18,6 @@ $dice-box-border-width: 1px; $pill-box-inset: 2px; $pill-box-blur-radius: 4px; + +$zebra-dark: 0%; +$zebra-light: 20%; diff --git a/src/style/_rollable.scss b/src/style/_rollable.scss index 60d09406..5a294533 100644 --- a/src/style/_rollable.scss +++ b/src/style/_rollable.scss @@ -3,7 +3,6 @@ @use "_colours" as colour; @use "_numbers" as numbers; - $rollable_colours: ( "nachteil": colour.$nachteil-color, "talent": colour.$talent-color, @@ -17,6 +16,20 @@ $rollable_colours: ( "liturgie": colour.$liturgie-color, "zauber": colour.$zauber-color, ); +$rollable_colours_font: ( + "nachteil": colour.$nachteil-text-color, + "talent": colour.$talent-text-color, + "Körperlich": colour.$talent-body-text-color, + "Natur": colour.$talent-nature-text-color, + "Gesellschaft": colour.$talent-social-text-color, + "Wissen": colour.$talent-knowledge-text-color, + "Sprachen": colour.$talent-language-text-color, + "Handwerk": colour.$talent-crafting-text-color, + "kampf": colour.$kampftalent-text-color, + "liturgie": colour.$liturgie-text-color, + "zauber": colour.$zauber-text-color, +); + .dsa41.sheet.actor.character { .block.rollable { @@ -152,10 +165,16 @@ $rollable_colours: ( @mixin coloring($name) { $color: map.get($rollable_colours, $name); + $font_color: map.get($rollable_colours_font, $name); + .#{$name}.rollable { .die { stroke-width: 0.5; + span.value { + color: $font_color; + } + .border { fill: colour.$rollable-die-border-color; stroke: colour.$rollable-die-border-color; diff --git a/src/style/_sidebar-elements.scss b/src/style/_sidebar-elements.scss index e48c6bcb..f774031b 100644 --- a/src/style/_sidebar-elements.scss +++ b/src/style/_sidebar-elements.scss @@ -51,6 +51,8 @@ line-height: 24px; vertical-align: middle; text-indent: 8px; + color: white; + text-shadow: 2px 2px 1px rgba(0, 0, 0, 0.3); } span.resource-fill { @@ -58,9 +60,36 @@ left: 0; top: 0; bottom: 0; - background: linear-gradient(to bottom, #0bad29 0%, #11f128 50%, #0cde24 51%, #6ff77b 100%); + background: url('../assets/gradient.png'); + background-size: 32px 100%; + + &::after { + content: ''; + position: absolute; + left: 0; + top: 0; + right: 0; + bottom: 0; + } + + &.lep::after { + background-color: rgba(0, 192, 96, 0.5); + } + + &.aup::after { + background-color: rgba(192, 166, 0, 0.5); + } + + &.asp::after { + background-color: rgba(0, 26, 192, 0.5); + } + + &.kap::after { + background-color: rgba(128, 0, 192, 0.5); + } } + } } diff --git a/src/style/_talent-sheet.scss b/src/style/_talent-sheet.scss new file mode 100644 index 00000000..6a083006 --- /dev/null +++ b/src/style/_talent-sheet.scss @@ -0,0 +1,51 @@ +.sheet.item.skill { + + .tab.meta.active { + + display: grid; + grid-template-areas: + "category category category" + "taw statistics ebe" + "language language language" + "attack attack attack"; + + gap: 8px; + margin: 8px; + + .category { + grid-area: category; + } + + .taw { + grid-area: taw; + } + + .statistics { + grid-area: statistics; + display: grid; + grid-template-columns: 1fr 1fr 1fr; + grid-template-rows: auto 1fr; + + .statistics > label { + grid-column: 1/4; + text-align: center; + } + } + + .ebe { + grid-area: ebe; + } + + .language-statistics { + grid-area: language; + } + + .attack-statistics { + grid-area: attack; + display: flex; + flex-direction: row; + } + + } + +} diff --git a/src/style/styles.scss b/src/style/styles.scss index 7f4dbfbe..e30542c1 100644 --- a/src/style/styles.scss +++ b/src/style/styles.scss @@ -9,3 +9,8 @@ @use "_paperdoll"; @use "_creature-sheet"; @use "_player-action"; +@use "_modify-liturgy"; +@use "_liturgy-banner"; +@use "_talent-sheet"; +@use "_active-effect-sheet"; +@use "_advantage-sheet"; diff --git a/src/system.json b/src/system.json index 4b27e752..64166527 100644 --- a/src/system.json +++ b/src/system.json @@ -26,15 +26,15 @@ ], "packs": [ { - "name": "talente-brw", - "label": "Talente (BRW)", + "name": "talente", + "label": "Talente", "system": "DSA_4-1", "type": "Item", - "path": "packs/talente-brw", + "path": "packs/talente", "private": false }, { - "name": "Spell", + "name": "spells", "label": "Basiszauber", "system": "DSA_4-1", "type": "Item", @@ -84,6 +84,14 @@ "type": "Item", "path": "packs/munition", "private": false + }, + { + "name": "Wounds", + "label": "Trefferzonen Wunden", + "system": "DSA_4-1", + "type": "Item", + "path": "packs/wunden", + "private": false } ], "languages": [ @@ -113,7 +121,8 @@ ], "arrayFields": [ "talente", - "zauber" + "zauber", + "heldenausruestung" ] } }, @@ -163,6 +172,14 @@ "maxLEP", "maxMR" ] + }, + "SpecialAbility": { + "stringFields": [ + "name" + ] + }, + "ActiveEffect": { + }, "Skill": { "stringFields": [ @@ -183,6 +200,8 @@ "voraussetzung" ] }, + "Blessing": {}, + "Liturgy": {}, "Spell": { "stringFields": [ "name", diff --git a/src/templates/actor/actor-character-sheet.hbs b/src/templates/actor/actor-character-sheet.hbs index 2db13cd5..f499c11b 100644 --- a/src/templates/actor/actor-character-sheet.hbs +++ b/src/templates/actor/actor-character-sheet.hbs @@ -13,18 +13,37 @@
-

- +

+ + +
+ + {{#if ausdauer}} + + + {{/if}} + + {{#if this.hasLiturgies}} + + {{/if}} + + {{#if this.hasSpells}} + + {{/if}} {{#each attacks}}

{{this.using}} ({{this.name}})

+
{{#if this.at}} {{/if}} +
+ {{#if this.at}} + + {{/if}} {{#if this.ini}}
+ + + + + + + + + + + {{#each this.spells}} + + + + + + + + + + {{/each}} + +
ZaubernameProbeZfWMerkmale
+ {{> 'systems/DSA_4-1/templates/ui/partial-die.hbs' }} + + {{this.name}}{{this.eigenschaft1}}{{this.eigenschaft2}}{{this.eigenschaft3}}{{this.zfw}} +
    {{#each this.merkmal}} +
  • {{this}}
  • {{/each}}
+
-
+ {{/if}} + {{#if this.hasLiturgies}} +
+ +
+ +
+ + + von + +
+
+ + {{#each this.liturgies}} + + + + + + + + + + {{#if this.countO}} + + + + + {{#each this.O}} + + + + + + {{/each}} + {{/if}} + {{#if this.countI}} + + + + {{#each this.I}} + + + + + + {{/each}} + {{/if}} + {{#if this.countII}} + + + + {{#each this.II}} + + + + + {{/each}} + {{/if}} + {{#if this.countIII}} + + + + {{#each this.III}} + + + + + {{/each}} + {{/if}} + {{#if this.countIV}} + + + + {{#each this.IV}} + + + + + {{/each}}{{/if}} + {{#if this.countV}} + + + + {{#each this.V}} + + + + + {{/each}} + {{/if}} + {{#if this.countVI}} + + + + {{#each this.VI}} + + + + + {{/each}} + {{/if}}{{#if this.countVII}} + + + + {{#each this.VII}} + + + + + {{/each}} + {{/if}}{{#if this.countVIII}} + + + + {{#each this.VIII}} + + + + + {{/each}} + {{/if}} + +
Liturgiekenntnis: {{this.lkp}}
+ {{> 'systems/DSA_4-1/templates/ui/partial-die.hbs' }} + + {{this.name}}
+ {{> 'systems/DSA_4-1/templates/ui/partial-die.hbs' }} + + {{this.name}}
+ {{> 'systems/DSA_4-1/templates/ui/partial-die.hbs' }} + {{this.name}}
+ {{> 'systems/DSA_4-1/templates/ui/partial-die.hbs' }} + {{this.name}}
+ {{> 'systems/DSA_4-1/templates/ui/partial-die.hbs' }} + {{this.name}}
+ {{> 'systems/DSA_4-1/templates/ui/partial-die.hbs' }} + {{this.name}}
+ {{> 'systems/DSA_4-1/templates/ui/partial-die.hbs' }} + {{this.name}}
+ {{> 'systems/DSA_4-1/templates/ui/partial-die.hbs' }} + {{this.name}}
+ {{> 'systems/DSA_4-1/templates/ui/partial-die.hbs' }} + {{this.name}}
+ {{/each}}
+ {{/if}} + +
+ + + + + + + + {{#each this.effects}} + + + + + + {{/each}} + +
EffektVeränderungen
+ {{this.name}} + {{this.conditions}}{{#if ../isGM}} + {{/if}}
+
+ diff --git a/src/templates/actor/group-sheet.hbs b/src/templates/actor/group-sheet.hbs index 7ef59b1c..776e34e7 100644 --- a/src/templates/actor/group-sheet.hbs +++ b/src/templates/actor/group-sheet.hbs @@ -11,12 +11,13 @@ {{!-- Sheet Body --}}
- {{#if actor.limited}} + {{#unless isGM}}
{{#each characters}} {{#if this.isVisible}} @@ -32,14 +33,19 @@
{{else}}
- {{#each characters}} - {{#if this.isVisible}} -
-
- {{this.name}} - {{this.name}} -
+ + + + + {{#each this.fields.head}} + + {{/each}} + + + + {{#each this.fields}} + {{#unless (eq @key "head")}} + + + + {{#each this}} + + {{/each}} + + + {{/unless}} + {{/each}} + +
+
+
+ {{this.name}} + {{this.name}} +
{{#if this.isLimited}}
{{#each this.attributes}} @@ -50,36 +56,66 @@
{{/each}}
-
-
    - {{#each skills}} -
  • {{this.name}}: {{this.taw}}
  • {{/each}} -
-
    - {{#each advantages}} -
  • {{this.name}} {{#if this.value}} - [{{this.value}}]{{/if}}
  • {{/each}} -
-
{{/if}} - {{#if this.isOwner}} -
-
- {{/if}} - - {{/if}} - {{/each}} +
+ {{ @key}} + + {{#if (eq this "-")}} + + {{else}} + {{#if this.taw}} +
+ {{this.taw}} ({{this.eigenschaft1}}, {{this.eigenschaft2}} + , {{this.eigenschaft3}}) +
+ {{else}} + Ja + {{/if}} + {{/if}} +
- {{/if}} + {{/unless}}
{{> 'systems/DSA_4-1/templates/ui/partial-equipment-group-button.hbs' equipments}}
+ {{#if owner}} +
+ {{#each settings}} +
+ +
+ {{/each}} +
+ {{/if}} +
diff --git a/src/templates/dialog/modify-liturgy.hbs b/src/templates/dialog/modify-liturgy.hbs new file mode 100644 index 00000000..ebf2fbdd --- /dev/null +++ b/src/templates/dialog/modify-liturgy.hbs @@ -0,0 +1,36 @@ + + + + + + + {{#each variations}} + + + + + {{/each}} + + +
GradWirkung
{{this.effect}}
+ +

Modifizieren

+ +
+ +
+
+
+ + +
+
+ +
diff --git a/src/templates/item/item-activeeffect-sheet.hbs b/src/templates/item/item-activeeffect-sheet.hbs new file mode 100644 index 00000000..e7c02a70 --- /dev/null +++ b/src/templates/item/item-activeeffect-sheet.hbs @@ -0,0 +1,20 @@ +
+
+ +
+ + + + +
+ +
+ + {{editor item.system.notes target="system.notes" button=true owner=owner editable=editable}} +
+ + +
+
diff --git a/src/templates/item/item-advantage-sheet.hbs b/src/templates/item/item-advantage-sheet.hbs index d50d00ce..71a66c55 100644 --- a/src/templates/item/item-advantage-sheet.hbs +++ b/src/templates/item/item-advantage-sheet.hbs @@ -2,13 +2,34 @@ {{!-- Sheet Tab Navigation --}} {{!-- Sheet Body --}}
-
-
{{json}}
+
+
+ + + +
+ {{#if hasModality}} +
+ + {{#if hasChoices}} + + {{else}} + + {{/if}} +
+ {{/if}} +
+ + {{editor system.description target="system.description" button=true owner=owner editable=editable}} +
+
diff --git a/src/templates/item/item-liturgy-sheet.hbs b/src/templates/item/item-liturgy-sheet.hbs new file mode 100644 index 00000000..d50d00ce --- /dev/null +++ b/src/templates/item/item-liturgy-sheet.hbs @@ -0,0 +1,14 @@ +
+ + {{!-- Sheet Tab Navigation --}} + + + {{!-- Sheet Body --}} +
+
+
{{json}}
+
+
+
diff --git a/src/templates/item/item-skill-sheet.hbs b/src/templates/item/item-skill-sheet.hbs index d6444eb6..1c0d8010 100644 --- a/src/templates/item/item-skill-sheet.hbs +++ b/src/templates/item/item-skill-sheet.hbs @@ -10,57 +10,62 @@
-
+
-
+
-
- +
+ + +
+ +
+
+
+ +
-
-
- -
-
-