Compare commits

...

8 Commits

Author SHA1 Message Date
Erebus a26cc89686 v0.1.2 2022-02-21 10:45:36 +01:00
Erebus 58c3fbcd42 v0.1.0 2022-02-21 10:12:27 +01:00
Erebus 6962d6fc04 Merge branch 'master' of ssh://pi.rikspolisen.se:2222/foundryvtt/kopparhavet 2021-07-28 13:10:53 +02:00
Erebus 3f044c0b97 fixed missing link 2021-07-28 13:10:40 +02:00
erebus cace9cc899 0.0.7 (#7)
finishing for version 0.0.7
Co-Authored-By: erebus <erebus@rikspolisen.se>
Co-Committed-By: erebus <erebus@rikspolisen.se>
2021-07-28 13:08:19 +02:00
erebus 0c1729a4b4 Uppdatera 'system.json' 2021-03-19 04:28:46 +00:00
erebus 77806b38c4 v0.0.6
Version 0.0.6
Fixed rolling of rituals
Fixed skill dialog for rituals
Fixed chat message for rituals
Fixed chat message for opposed spell rolls
Co-Authored-By: erebus <erebus@rikspolisen.se>
Co-Committed-By: erebus <erebus@rikspolisen.se>
2021-03-19 04:22:29 +00:00
erebus 3fd49d32bc 0.0.5 (#5)
finishing for version 0.0.5

Added spells packs

v0.0.4 fixes

Added weapons packs, ship sheet

added armor pack, updated skills pack, initial work on ship sheet, minor fixes, added options for spell cost to be drawn on roll

Finishing v0.0.3

layout fixes

layout fixes

Added support for rolling skill on spells

Fixed typo

Fixed migration

Fixed migration, Spell Skill

Cleaned up the code

Fixed Hjältarnas Tid skill error, updated layout, fixed buttons not working

Fixed right click menu for weapons

Added roll dialog and exceptional rolls

Updated skills styling

Co-authored-by: Erebus <erebus@rikspolisen.se>
Reviewed-on: #5
Co-Authored-By: erebus <erebus@rikspolisen.se>
Co-Committed-By: erebus <erebus@rikspolisen.se>
2021-03-03 18:16:38 +00:00
45 changed files with 1092 additions and 351 deletions

View File

@ -1,7 +1,7 @@
# Kopparhavets Hjältar
Detta "Game System" till FoundryVTT utvecklas privat och är officiellt godkänt fan-material av Helmgast och personerna bakom Kopparhavets Hjältar and Hjältarnas Tid.
#### Kopparhavets Hjältar och Hjältarnas Tid är copyright Helmgast och detta är publiceras med deras medgivande.
#### Kopparhavets Hjältar och Hjältarnas Tid är copyright Helmgast och detta är publicerat med deras medgivande.
###
---

View File

@ -72,6 +72,13 @@
"MENU.SHOWROLLDIALOG": "Show diceroller dialog",
"ROLL.OPENCLOSE": "Open / Close",
"ROLL.EXCEPTIONAL": "Exceptional",
"ROLL.SUBPAR": "Subpar result",
"ROLL.LOW": "Low result",
"ROLL.LIMITED": "Limited result",
"ROLL.GOOD": "Good result",
"ROLL.SUPERIOR": "Superior result",
"ROLL.OR": "or",
"ROLL.OPPOSITE": "Resisted by",
"SHIP.CARGO": "Cargo capacity",
"SHIP.HULL": "Hull",
@ -88,8 +95,10 @@
"SKILL.COMBAT": "Combat",
"SKILL.STARTVALUE": "Start value",
"SKILL.LANGUAGE": "Language",
"SKILL.NONE": "None",
"SPELL.DIFFICULTY": "Difficulty",
"SPELL.ROLLTITLE": "Roll",
"SPELL.ROLL": "Roll",
"SPELL.COST": "Cost",
"SPELL.ATTACKROLL": "Attack roll",
@ -97,8 +106,8 @@
"SPELL.RITUAL": "Ritual",
"STATS.HEALTH": "Health",
"STATS.MANA": "Mana",
"STATS.STAMINA": "Stamina",
"STATS.MANA": "Guilt",
"STATS.STAMINA": "Guard",
"TAB.BIO": "Background",
"TAB.COMBAT": "Combat",

View File

@ -73,6 +73,13 @@
"MENU.SHOWROLLDIALOG": "Visa tärningsdialog",
"ROLL.OPENCLOSE": "Öppna / Stäng",
"ROLL.EXCEPTIONAL": "Exceptionellt",
"ROLL.SUBPAR": "Undermålig kvalitet",
"ROLL.LOW": "Låg kvalitet",
"ROLL.LIMITED": "Begränsad kvalitet",
"ROLL.GOOD": "God kvalitet",
"ROLL.SUPERIOR": "Överlägsen kvalitet",
"ROLL.OR": "eller",
"ROLL.OPPOSITE": "Motsatt av",
"SHIP.CARGO": "Lastförmåga",
"SHIP.HULL": "Skrov",
@ -89,6 +96,7 @@
"SKILL.COMBAT": "Stridsfärdigheter",
"SKILL.STARTVALUE": "Grundvärde",
"SKILL.LANGUAGE": "Språk",
"SKILL.NONE": "Ingen",
"SPELL.DIFFICULTY": "Svårighet",
"SPELL.ROLLTITLE": "Slag",

View File

@ -154,13 +154,13 @@ export class ActorSheetKH extends ActorSheet {
icon: '<i class="far dice"></i>',
callback: (li) => {
let itemId = li.data("itemId");
let _item = this.actor.items.find((element) => element._id == itemId);
let _item = this.actor.items.find((element) => element.id == itemId);
// Retrieve skill based on name
let skill = this.actor.items.find((element) => element.name === _item.data.data.skill.value);
let skill = this.actor.items.find((element) => element.name === _item.data.skill.value);
let skillName = skill.name
let skillValue = skill.data.data.value
let skillValue = skill.data.value
let showValue = false
if(this.actor.data.type === "character") {
@ -186,10 +186,10 @@ export class ActorSheetKH extends ActorSheet {
icon: '<i class="far dice"></i>',
callback: (li) => {
let itemId = li.data("itemId");
let _item = this.actor.items.find((element) => element._id == itemId);
let _item = this.actor.items.find((element) => element.id == itemId);
let skillName = _item.name
let skillValue = _item.data.data.value
let skillValue = _item.data.value
let showValue = false
if(this.actor.data.type === "character") {
@ -214,14 +214,14 @@ export class ActorSheetKH extends ActorSheet {
name: game.i18n.localize("MENU.SHOWROLLDIALOG"),
icon: '<i class="far dice"></i>',
callback: (li) => {
let itemId = li.data("itemId");
let _item = this.actor.items.find((element) => element._id == itemId);
let itemId = li.data("item-id");
let _item = this.actor.items.find((element) => element.id == itemId);
if (!_item) {
_item = game.items.get(itemId);
if (!_item) {
console.log("IMPORT ERROR")
console.log("IMPORT ERROR 1")
return
}
}
@ -233,7 +233,7 @@ export class ActorSheetKH extends ActorSheet {
showValue = true
}
switch (_item.data.data.difficulty.value) {
switch (_item.data.difficulty.value) {
case "simple":
difficulty = 5
break;
@ -248,33 +248,92 @@ export class ActorSheetKH extends ActorSheet {
break;
}
if(_item.data.data.roll.value === "roll" || _item.data.data.roll.value === "attackroll") {
if(_item.data.roll.value === "roll" || _item.data.roll.value === "attackroll") {
// Retrieve skill based on name
let skill = this.actor.items.find((element) => element.name === _item.data.data.roll.skill);
let skill = this.actor.items.find((element) => element.name === _item.data.roll.skill);
let skillName = _item.name
let skillValue = skill.data.data.value
let skillValue = skill.data.value
if(this.actor.data.type === "character") {
skillName = _item.name + " (" + skill.name + ")"
}
this.khRoller.rollSkillDialogInChat(skillName, skillValue, showValue, this.actor, difficulty)
} else if(_item.data.data.roll.value === "opposite") {
} else if(_item.data.roll.value === "opposite") {
// Retrieve skill based on name
let skill = this.actor.items.find((element) => element.name === _item.data.data.roll.skill);
let skill = this.actor.items.find((element) => element.name === _item.data.roll.skill);
let skillName = _item.name
let skillValue = skill.data.data.value
let skillValue = skill.data.value
if(this.actor.data.type === "character") {
skillName = _item.name + " (" + skill.name + ")"
}
this.khRoller.rollSkillDialogInChat(skillName, skillValue, showValue, this.actor, difficulty)
} else if(_item.data.data.roll.value === "ritual") {
console.log("Not supported yet")
this.khRoller.rollSkillDialogInChat("Ritual", -1, showValue, this.actor, difficulty)
let opposite = []
// Retrieve skill based on name
if(_item.data.roll.oppositeskill !== "") {
let skill1 = this.actor.items.find((element) => element.name === _item.data.roll.oppositeskill);
opposite.push(skill1.name)
}
if(_item.data.roll.oppositeskilltwo !== "") {
let skill2 = this.actor.items.find((element) => element.name === _item.data.roll.oppositeskilltwo);
opposite.push(skill2.name)
}
this.khRoller.rollSkillDialogInChat(skillName, skillValue, showValue, this.actor, difficulty, opposite)
} else if(_item.data.roll.value === "ritual") {
let skills = []
if(_item.data.roll.ritual.skillone !== "") {
let skill1 = this.actor.items.find((element) => element.name === _item.data.roll.ritual.skillone);
skills.push({
name: skill1.name,
value: skill1.data.value
});
}
if(_item.data.roll.ritual.skilltwo !== "") {
let skill2 = this.actor.items.find((element) => element.name === _item.data.roll.ritual.skilltwo);
skills.push({
name: skill2.name,
value: skill2.data.value
});
}
if(_item.data.roll.ritual.skillthree !== "") {
let skill3 = this.actor.items.find((element) => element.name === _item.data.roll.ritual.skillthree);
skills.push({
name: skill3.name,
value: skill3.data.value
});
}
if(_item.data.roll.ritual.skillfour !== "") {
let skill4 = this.actor.items.find((element) => element.name === _item.data.roll.ritual.skillfour);
skills.push({
name: skill4.name,
value: skill4.data.value
});
}
if(_item.data.roll.ritual.skillfive !== "") {
let skill5 = this.actor.items.find((element) => element.name === _item.data.roll.ritual.skillfive);
skills.push({
name: skill5.name,
value: skill5.data.value
});
}
this.khRoller.rollSkillChallangeDialogInChat(_item.name, skills, showValue, this.actor, difficulty)
}
},
},
@ -329,6 +388,7 @@ export class ActorSheetKH extends ActorSheet {
]);
html.find(".feature").click(async (ev) => {
console.log("feature")
const featureName = $(ev.currentTarget).data("feature");
const featureValue = this.actor.data.data.feature[featureName].value;
if (featureName === "one") {
@ -347,7 +407,7 @@ export class ActorSheetKH extends ActorSheet {
html.find(".item-delete").click((ev) => {
let parent = $(ev.currentTarget).data("parent")
const li = $(ev.currentTarget).parents(parent);
const item = this.actor.getOwnedItem(li.data("itemId"));
const item = this.actor.items.get(li.data("itemId"));
if(item) {
if (item.type === "armor") {
@ -358,10 +418,10 @@ export class ActorSheetKH extends ActorSheet {
this.actor.items.map((i) => {
if (i.type === "armor") {
if (i._id !== item._id && i.data.data.equipable.equipped && i.data?.data?.modifications) {
for (let k of Object.keys(i.data.data.modifications)) {
if (i.data.data.modifications[k].modtype === "init") {
initValue = i.data.data.modifications[k].value;
if (i.id !== item.id && i.data.equipable.equipped && i.data?.data?.modifications) {
for (let k of Object.keys(i.data.modifications)) {
if (i.data.modifications[k].modtype === "init") {
initValue = i.data.modifications[k].value;
}
}
}
@ -375,23 +435,26 @@ export class ActorSheetKH extends ActorSheet {
}
}
this.actor.deleteOwnedItem(li.data("itemId"));
this.actor.deleteEmbeddedDocuments("Item", [li.data("itemId")]);
//this.actor.deleteOwnedItem(li.data("itemId"));
li.slideUp(200, () => this.render(false));
});
// Edit Inventory Item
html.find(".item-edit").click(async (ev) => {
console.log("item-edit")
let parent = $(ev.currentTarget).data("parent")
let li = $(ev.currentTarget).parents(parent);
let itemId = li.data("itemId");
let item = this.actor.getOwnedItem(itemId);
let item = this.actor.items.get(itemId);
if (!item) {
item = game.items.get(itemId);
if (!item) {
console.log("IMPORT ERROR")
console.log("IMPORT ERROR 2")
}
}
@ -404,13 +467,13 @@ export class ActorSheetKH extends ActorSheet {
html.find(".roll-spell-cost").click((ev) => {
const li = $(ev.currentTarget).parents(".item-spell");
let itemId = li.data("itemId");
let spell = this.actor.getOwnedItem(itemId);
let spell = this.actor.items.get(itemId);
if (!spell) {
spell = game.items.get(itemId);
if (!spell) {
console.log("IMPORT ERROR")
console.log("IMPORT ERROR 3")
return
}
}
@ -427,14 +490,14 @@ export class ActorSheetKH extends ActorSheet {
html.find(".roll-spell-skill").click((ev) => {
const li = $(ev.currentTarget).parents(".item-spell");
let itemId = li.data("itemId");
let spell = this.actor.getOwnedItem(itemId);
let itemId = li.data("item-id");
let spell = this.actor.items.get(itemId);
if (!spell) {
spell = game.items.get(itemId);
if (!spell) {
console.log("IMPORT ERROR")
console.log("IMPORT ERROR 4")
return
}
}
@ -474,9 +537,20 @@ export class ActorSheetKH extends ActorSheet {
this.khRoller.rollSkillInChat(skillName, skillValue, showValue, this.actor, difficulty)
} else if(spell.data.data.roll.value === "opposite") {
let opposite = []
// Retrieve skill based on name
let skill = this.actor.items.find((element) => element.name === spell.data.data.roll.skill);
if(spell.data.data.roll.oppositeskill !== "") {
let skill1 = this.actor.items.find((element) => element.name === spell.data.data.roll.oppositeskill);
opposite.push(skill1.name)
}
if(spell.data.data.roll.oppositeskilltwo !== "") {
let skill2 = this.actor.items.find((element) => element.name === spell.data.data.roll.oppositeskilltwo);
opposite.push(skill2.name)
}
let skillName = spell.name
let skillValue = skill.data.data.value
@ -484,17 +558,68 @@ export class ActorSheetKH extends ActorSheet {
skillName = spell.name + " (" + skill.name + ")"
}
this.khRoller.rollSkillInChat(skillName, skillValue, showValue, this.actor, difficulty)
this.khRoller.rollSkillInChat(skillName, skillValue, showValue, this.actor, difficulty, opposite)
} else if(spell.data.data.roll.value === "ritual") {
console.log("Not supported yet")
let skill1, skill2, skill3, skill4, skill5;
let skills = []
// Retrieve skill based on name
if(spell.data.data.roll.ritual.skillone !== "") {
skill1 = this.actor.items.find((element) => element.name === spell.data.data.roll.ritual.skillone);
skills.push({
name: skill1.name,
value: skill1.data.data.value
});
}
if(spell.data.data.roll.ritual.skilltwo !== "") {
skill2 = this.actor.items.find((element) => element.name === spell.data.data.roll.ritual.skilltwo);
skills.push({
name: skill2.name,
value: skill2.data.data.value
});
}
if(spell.data.data.roll.ritual.skillthree !== "") {
skill3 = this.actor.items.find((element) => element.name === spell.data.data.roll.ritual.skillthree);
skills.push({
name: skill3.name,
value: skill3.data.data.value
});
}
if(spell.data.data.roll.ritual.skillfour !== "") {
skill4 = this.actor.items.find((element) => element.name === spell.data.data.roll.ritual.skillfour);
skills.push({
name: skill4.name,
value: skill4.data.data.value
});
}
if(spell.data.data.roll.ritual.skillfive !== "") {
skill5 = this.actor.items.find((element) => element.name === spell.data.data.roll.ritual.skillfive);
skills.push({
name: skill5.name,
value: skill5.data.data.value
});
}
let skillName = spell.name
this.khRoller.rollSkillRitualInChat(skillName, skills, showValue, this.actor, difficulty)
}
});
/* Roll skill */
html.find(".roll-skill").click((ev) => {
const li = $(ev.currentTarget).parents(".item-skill");
let itemId = li.data("itemId");
let _item = this.actor.items.find((element) => element._id == itemId);
let itemId = li.data("item-id");
let _item = this.actor.items.find((element) => element.id === itemId);
let skillName = _item.name
let skillValue = _item.data.data.value
@ -511,13 +636,13 @@ export class ActorSheetKH extends ActorSheet {
html.find(".roll-weapon-skill").click((ev) => {
const li = $(ev.currentTarget).parents(".item-weapon");
let itemId = li.data("itemId");
let weapon = this.actor.getOwnedItem(itemId);
let weapon = this.actor.items.get(itemId);
if (!weapon) {
weapon = game.items.get(itemId);
if (!weapon) {
console.log("IMPORT ERROR")
console.log("IMPORT ERROR 5")
return
}
}
@ -540,13 +665,13 @@ export class ActorSheetKH extends ActorSheet {
html.find(".roll-damage").click((ev) => {
const li = $(ev.currentTarget).parents(".item-weapon");
let itemId = li.data("itemId");
let weapon = this.actor.getOwnedItem(itemId);
let weapon = this.actor.items.get(itemId);
if (!weapon) {
weapon = game.items.get(itemId);
if (!weapon) {
console.log("IMPORT ERROR")
console.log("IMPORT ERROR 6")
return
}
}
@ -565,13 +690,13 @@ export class ActorSheetKH extends ActorSheet {
html.find(".roll-armor").click((ev) => {
const li = $(ev.currentTarget).parents(".item");
let itemId = li.data("itemId");
let armor = this.actor.getOwnedItem(itemId);
let armor = this.actor.items.get(itemId);
if (!armor) {
armor = game.items.get(itemId);
if (!armor) {
console.log("IMPORT ERROR")
console.log("IMPORT ERROR 7")
return
}
}
@ -626,13 +751,13 @@ export class ActorSheetKH extends ActorSheet {
html.find(".roll-attack-damage").click((ev) => {
const li = $(ev.currentTarget).parents(".item-attack");
let itemId = li.data("itemId");
let weapon = this.actor.getOwnedItem(itemId);
let weapon = this.actor.items.get(itemId);
if (!weapon) {
weapon = game.items.get(itemId);
if (!weapon) {
console.log("IMPORT ERROR")
console.log("IMPORT ERROR 8")
return
}
}
@ -686,6 +811,12 @@ export class ActorSheetKH extends ActorSheet {
// Add or Remove relationship
html.find(".learning-control").click(this._onClickLearningControl.bind(this));
html.find(".learning-delete").click(async (event) => {
event.preventDefault();
const a = event.currentTarget.closest(".learning");
const id = a.dataset["attribute"];
this.object.update({ "data.learning": { ["-=" + id]: null } });
});
html.find(".learning-click").click(this._onClickLearingLearned.bind(this));
/* Hjältarnas Tid specefic */
@ -697,6 +828,7 @@ export class ActorSheetKH extends ActorSheet {
}
async _onClickLearingLearned(event) {
console.log("_onClickLearingLearned")
event.stopPropagation();
const li1 = $(event.currentTarget);
const li2 = $(event.currentTarget).parents(".learning");
@ -716,13 +848,11 @@ export class ActorSheetKH extends ActorSheet {
async _onClickLearningControl(event) {
event.preventDefault();
const a = event.currentTarget;
const action = a.dataset.action;
const attrs = this.object.data.data.learning;
const form = this.form;
const action = event.currentTarget.dataset.action;
// Add new modification
if (action === "create") {
const form = this.form;
const nk = new Date().getTime();
let newKey = document.createElement("div");
@ -732,41 +862,43 @@ export class ActorSheetKH extends ActorSheet {
await this._onSubmit(event);
}
/*
// Remove existing modification
else if (action === "delete") {
const li = a.closest(".learning");
li.parentElement.removeChild(li);
await this._onSubmit(event);
const a = event.currentTarget.closest(".learning");
const id = a.dataset["attribute"];
this.object.update({ "data.learning": { ["-=" + id]: null } });
}
*/
}
async _onClickRelationshipControl(event) {
console.log("_onClickRelationshipControl")
event.preventDefault();
const a = event.currentTarget;
const action = a.dataset.action;
const attrs = this.object.data.data.relationships;
const form = this.form;
const action = event.currentTarget.dataset.action;
// Add new modification
if (action === "create") {
const form = this.form;
const nk = new Date().getTime();
let newKey = document.createElement("div");
newKey.innerHTML = `<input class="relation-key" type="text" name="data.relationships.attr${nk}.key" value="attr${nk}" style="display: none;" /><input class="relation-key" type="text" name="data.relationships.attr${nk}.value" value="" style="display: none;" />`;
form.appendChild(newKey);
await this._onSubmit(event);
}
// Remove existing modification
else if (action === "delete") {
const li = a.closest(".relation");
li.parentElement.removeChild(li);
await this._onSubmit(event);
const ability = $(event.currentTarget).closest(".relation").data("attribute");
await this.object.update({ "data.relationships": { ["-=" + ability]: null } });
}
await this._onSubmit(event);
}
async _onClickRelationshipUsed(event) {
console.log("_onClickRelationshipUsed")
event.stopPropagation();
const li = $(event.currentTarget).parents(".relation");
@ -784,8 +916,9 @@ export class ActorSheetKH extends ActorSheet {
}
async _toggleEquippedItem(event) {
console.log("_toggleEquippedItem")
const li = $(event.currentTarget);
const item = this.actor.getOwnedItem(li.data("itemId"));
const item = this.actor.items.get(li.data("itemId"));
const actor = this.actor;
if(item) {
@ -797,7 +930,7 @@ export class ActorSheetKH extends ActorSheet {
actor.items.map((i) => {
if(i.type === "armor") {
if(i._id !== item._id && i.data.data.equipable.equipped && i.data?.data?.modifications) {
if(i.id !== item.id && i.data.data.equipable.equipped && i.data?.data?.modifications) {
for(let k of Object.keys(i.data.data.modifications)) {
if(i.data.data.modifications[k].modtype === "init") {
initValue = i.data.data.modifications[k].value;
@ -828,28 +961,30 @@ export class ActorSheetKH extends ActorSheet {
}
async _increaseQuantity(event) {
console.log("_increaseQuantity")
event.stopPropagation();
const li = $(event.currentTarget).parents(".item");
let itemId = li.data("itemId");
let item = this.actor.getOwnedItem(itemId);
let item = this.actor.items.get(itemId);
if (!item) {
console.log("IMPORT ERROR")
console.log("IMPORT ERROR 9")
}
item.update({ ["data.quantity.value"]: item.data.data.quantity.value + 1 });
}
async _decreaseQuantity(event) {
console.log("_decreaseQuantity")
event.stopPropagation();
const li = $(event.currentTarget).parents(".item");
let itemId = li.data("itemId");
let item = this.actor.getOwnedItem(itemId);
let item = this.actor.items.get(itemId);
if (!item) {
console.log("IMPORT ERROR")
console.log("IMPORT ERROR 10")
}
let count = item.data.data.quantity.value - 1 > 0 ? item.data.data.quantity.value - 1 : 0;
@ -858,25 +993,27 @@ export class ActorSheetKH extends ActorSheet {
}
async _onChangeSkillValue(event) {
console.log("_decreaseQuantity")
event.preventDefault();
const itemId = $(event.currentTarget).data("item-id");
let _item = this.actor.items.find((element) => element._id == itemId);
let _item = this.actor.items.find((element) => element.id == itemId);
if (_item) {
let update = {
_id: _item._id,
_id: _item.id,
data: { value: $(event.currentTarget).val() },
};
await this.actor.updateEmbeddedEntity("OwnedItem", update);
await this.actor.updateEmbeddedDocuments("Item", [update]);
}
}
async _onClickSkill(event) {
console.log("_onClickSkill")
event.preventDefault();
const itemId = $(event.currentTarget).data("item-id");
let _item = this.actor.items.find((element) => element._id == itemId);
let _item = this.actor.items.find((element) => element.id == itemId);
if (_item) {
let newVal = true;
@ -886,10 +1023,10 @@ export class ActorSheetKH extends ActorSheet {
}
let update = {
_id: _item._id,
_id: _item.id,
data: { used: newVal },
};
await this.actor.updateEmbeddedEntity("OwnedItem", update);
await this.actor.updateEmbeddedDocuments("Item", [update]);
}
}
@ -905,14 +1042,15 @@ export class ActorSheetKH extends ActorSheet {
* @private
*/
async _itemDetailsToChat(itemId) {
let item = this.actor.getOwnedItem(itemId);
console.log("_itemDetailsToChat")
let item = this.actor.items.get(itemId);
if (!item) {
item = game.items.get(itemId);
}
if (!item) {
console.log("IMPORT ERROR")
console.log("IMPORT ERROR 11")
return
}
@ -920,11 +1058,11 @@ export class ActorSheetKH extends ActorSheet {
const html = await renderTemplate("systems/kopparhavet/templates/chat/item-card.html", itemDetails);
const messageData = {
user: game.user._id,
user: game.user.id,
type: CONST.CHAT_MESSAGE_TYPES.OTHER,
content: html,
speaker: {
actor: this.actor._id,
actor: this.actor.id,
token: this.actor.token,
alias: this.actor.name,
},

View File

@ -13,8 +13,8 @@ export default class ActorHelpers {
}, {});
// Remove modifications which are no longer used
if (this.object.data?.data?.relationships) {
for (let k of Object.keys(this.object.data.data.relationships)) {
if (this.object.data?.relationships) {
for (let k of Object.keys(this.object.data.relationships)) {
if (!relationships.hasOwnProperty(k)) relationships[`-=${k}`] = null;
}
}
@ -36,8 +36,8 @@ export default class ActorHelpers {
}, {});
// Remove modifications which are no longer used
if (this.object.data?.data?.learning) {
for (let k of Object.keys(this.object.data.data.learning)) {
if (this.object.data?.learning) {
for (let k of Object.keys(this.object.data.learning)) {
if (!learning.hasOwnProperty(k)) learning[`-=${k}`] = null;
}
}

View File

@ -4,11 +4,11 @@ export default class KHDiceRoller {
const roll = new Roll(formula);
let res = roll.roll();
await roll.evaluate();
let rollData = {
name: "SPELL.COST",
res: res,
res: roll,
showFormula: true
};
@ -23,9 +23,9 @@ export default class KHDiceRoller {
await roll.toMessage({
create: true,
content: html,
user: game.user._id,
user: game.user.id,
speaker: {
actor: speaker._id,
actor: speaker.id,
token: speaker.token,
alias: speaker.name,
},
@ -37,11 +37,11 @@ export default class KHDiceRoller {
const roll = new Roll(formula);
let res = roll.roll();
await roll.evaluate();
let rollData = {
name: "ITEM.DAMAGE",
res: res,
res: roll,
showFormula: true
};
@ -50,9 +50,9 @@ export default class KHDiceRoller {
await roll.toMessage({
create: true,
content: html,
user: game.user._id,
user: game.user.id,
speaker: {
actor: speaker._id,
actor: speaker.id,
token: speaker.token,
alias: speaker.name,
},
@ -68,11 +68,11 @@ export default class KHDiceRoller {
const roll = new Roll(formula);
let res = roll.roll();
await roll.evaluate();
let rollData = {
name: "ITEM.DEFENCE",
res: res,
res: roll,
showFormula: true
};
@ -81,19 +81,19 @@ export default class KHDiceRoller {
await roll.toMessage({
create: true,
content: html,
user: game.user._id,
user: game.user.id,
speaker: {
actor: speaker._id,
actor: speaker.id,
token: speaker.token,
alias: speaker.name,
},
});
}
async rollSkillInChat(skillName, skillValue, showValue, speaker, openclosed) {
async rollSkillInChat(skillName, skillValue, showValue, speaker, openclosed, opposite) {
const roll = new Roll(`1d100`);
let res = roll.roll();
await roll.evaluate();
let computedName = skillName
@ -105,14 +105,28 @@ export default class KHDiceRoller {
openclosed = 0
}
if(opposite === undefined) {
opposite = []
}
let oppositeValue = ""
opposite.forEach(function(skill) {
if(oppositeValue !== "") {
oppositeValue = oppositeValue + " " + game.i18n.localize("ROLL.OR") + " "
}
oppositeValue = oppositeValue + skill
})
let rollData = {
name: computedName,
res: res
res: roll,
opposite: oppositeValue
};
if(skillValue > 0) {
let oneRes = Math.floor((res.total / 1) % 10);
let tenRes = Math.floor((res.total / 10) % 10);
let oneRes = Math.floor((roll.total / 1) % 10);
let tenRes = Math.floor((roll.total / 10) % 10);
if(openclosed < 0) {
rollData.closed = Math.abs(openclosed)
@ -129,7 +143,7 @@ export default class KHDiceRoller {
// roll is opened
rollData.success = true
} else {
if (res.total <= skillValue) {
if (roll.total <= skillValue) {
rollData.success = true
} else {
rollData.failure = true
@ -146,16 +160,16 @@ export default class KHDiceRoller {
await roll.toMessage({
create: true,
content: html,
user: game.user._id,
user: game.user.id,
speaker: {
actor: speaker._id,
actor: speaker.id,
token: speaker.token,
alias: speaker.name,
},
});
}
async rollSkillDialogInChat(skillName, skillValue, showValue, speaker, startopen) {
async rollSkillDialogInChat(skillName, skillValue, showValue, speaker, startopen, opposite) {
const id = randomID();
if(startopen === undefined) {
@ -180,6 +194,9 @@ export default class KHDiceRoller {
const container = document.getElementById(id);
let openclosed = container.querySelector('[name="openclosed"]').value
await this.rollSkillInChat(skillName, skillValue, showValue, speaker, openclosed, opposite)
/*
const roll = new Roll(`1d100`);
let res = roll.roll();
@ -239,6 +256,7 @@ export default class KHDiceRoller {
alias: speaker.name,
},
});
*/
},
},
two: {
@ -251,4 +269,208 @@ export default class KHDiceRoller {
classes: ["dialog", "kopparhavet"],
}).render(true);
}
async rollSkillRitualInChat(ritualName, skills, showValue, speaker, openclosed) {
let rollData = {
name: ritualName,
res: []
};
if(openclosed === undefined) {
openclosed = 0
}
if(openclosed < 0) {
rollData.closed = Math.abs(openclosed)
}
if(openclosed > 0) {
rollData.opened = Math.abs(openclosed)
}
let successes = 0
let totalrolls = 0
for (const skill of skills) {
totalrolls++
const roll = new Roll(`1d100`);
await roll.evaluate();
let skillName = skill.name
let success = false
let failure = false
if(showValue) {
skillName = skillName + " (" + skill.value + ")"
}
let rollData2 = {
name: skillName,
res: roll,
};
if(openclosed < 0) {
rollData2.closed = Math.abs(openclosed)
}
if(openclosed > 0) {
rollData2.opened = Math.abs(openclosed)
}
if(skill.value > 0) {
let oneRes = Math.floor((roll.total / 1) % 10);
//let tenRes = Math.floor((res.total / 10) % 10);
if(openclosed < 0 && oneRes !== 0 && Math.abs(openclosed) >= oneRes) {
// roll is closed
failure = true
} else if(openclosed > 0 && oneRes !== 0 && Math.abs(openclosed) >= oneRes){
// roll is opened
success = true
successes++
} else {
if (roll.total <= skill.value) {
success = true
successes++
} else {
failure = true
}
}
}
rollData.res.push({
name: skillName,
failure: failure,
success: success,
result: roll,
})
rollData2.success = success
rollData2.failure = failure
const html = await renderTemplate("systems/kopparhavet/templates/dice/roll.html", rollData2);
await roll.toMessage({
create: true,
content: html,
user: game.user.id,
speaker: {
actor: speaker.id,
token: speaker.token,
alias: speaker.name,
},
});
}
switch (totalrolls) {
case 0:
case 1:
case 2:
break;
case 3:
if(successes === 0) {
rollData.result = "0"
} else if(successes === 1) {
rollData.result = "2"
} else if(successes === 2) {
rollData.result = "3"
} else if(successes === 3) {
rollData.result = "4"
}
break;
case 4:
if(successes === 0) {
rollData.result = "0"
} else if(successes === 1) {
rollData.result = "1"
} else if(successes === 2) {
rollData.result = "2"
} else if(successes === 3) {
rollData.result = "3"
} else if(successes === 4) {
rollData.result = "4"
}
break;
case 5:
if(successes === 0) {
rollData.result = "0"
} else if(successes === 1) {
rollData.result = "1"
} else if(successes === 2) {
rollData.result = "1"
} else if(successes === 3) {
rollData.result = "2"
} else if(successes === 4) {
rollData.result = "3"
} else if(successes === 5) {
rollData.result = "4"
}
break;
}
const html = await renderTemplate("systems/kopparhavet/templates/dice/ritual-roll.html", rollData);
/*
await roll.toMessage({
create: true,
content: html,
user: game.user._id,
speaker: {
actor: speaker._id,
token: speaker.token,
alias: speaker.name,
},
});
*/
await ChatMessage.create({
create: true,
content: html,
user: game.user.id,
speaker: {
actor: speaker.id,
token: speaker.token,
alias: speaker.name,
},
});
}
async rollSkillChallangeDialogInChat(name, skills, showValue, speaker, startopen) {
const id = randomID();
if(startopen === undefined) {
startopen = 0
}
const content = await renderTemplate("systems/kopparhavet/templates/roll-dialog.html", {
id,
startopen,
name,
});
await new Dialog({
title: game.i18n.localize("ROLL.TITLE"),
content,
buttons: {
one: {
icon: '<i class="fas fa-check"></i>',
label: game.i18n.localize("BUTTON.ROLL"),
callback: async () => {
const container = document.getElementById(id);
let openclosed = container.querySelector('[name="openclosed"]').value
await this.rollSkillRitualInChat(name, skills, showValue, speaker, openclosed)
},
},
two: {
icon: '<i class="fas fa-times"></i>',
label: game.i18n.localize("BUTTON.CANCEL"),
},
},
},
{
classes: ["dialog", "kopparhavet"],
}).render(true);
}
}

View File

@ -17,8 +17,8 @@ export default class ItemHelpers {
}, {});
// Remove modifications which are no longer used
if (this.object.data?.data?.modifications) {
for (let k of Object.keys(this.object.data.data.modifications)) {
if (this.object.data?.modifications) {
for (let k of Object.keys(this.object.data.modifications)) {
if (!modifications.hasOwnProperty(k)) modifications[`-=${k}`] = null;
}
}

View File

@ -28,7 +28,7 @@ export class ItemSheetKH extends ItemSheet {
data.dtypes = ["String", "Number", "Boolean"];
if (data?.data?.modifications) {
for (let attr of Object.values(data.data.modifications)) {
for (let attr of Object.values(data.modifications)) {
attr.isCheckbox = attr.dtype === "Boolean";
}
}
@ -39,23 +39,32 @@ export class ItemSheetKH extends ItemSheet {
let skillList2
if(game.settings.get("kopparhavet", "gameSystem") === "hjaltarnas-tid") {
skillList2 = await game.packs.get("kopparhavet.skills-ht").getContent();
skillList2 = await game.packs.get("kopparhavet.skills-ht").getDocuments();
} else {
skillList2 = await game.packs.get("kopparhavet.skills").getContent();
skillList2 = await game.packs.get("kopparhavet.skills").getDocuments();
}
for (let item of skillList2) {
if(item.data.type === "skill" && item.data.data.type.value === "combat") {
skillList.push(item)
skillList.push(item.data)
}
}
// Retrieve any created skills as well
for (let item of game.items.entities) {
game.items.forEach((item) => {
if(item.data.type === "skill" && item.data.data.type.value === "combat") {
skillList.push(item)
skillList.push(item.data)
}
});
/*
for (let item of game.items.entities) {
if(item.data.type === "skill" && item.data.type.value === "combat") {
skillList.push(item.data)
}
}
*/
this.position.width = 530;
this.position.height = 750;
break;
@ -77,23 +86,33 @@ export class ItemSheetKH extends ItemSheet {
let skillList3
if(game.settings.get("kopparhavet", "gameSystem") === "hjaltarnas-tid") {
skillList3 = await game.packs.get("kopparhavet.skills-ht").getContent();
skillList3 = await game.packs.get("kopparhavet.skills-ht").getDocuments();
} else {
skillList3 = await game.packs.get("kopparhavet.skills").getContent();
skillList3 = await game.packs.get("kopparhavet.skills").getDocuments();
}
for (let item of skillList3) {
if(item.data.type === "skill") {
skillList.push(item)
skillList.push(item.data)
}
}
// Retrieve any created skills as well
game.items.forEach((item) => {
if(item.data.type === "skill") {
skillList.push(item.data)
}
});
/*
// Retrieve any created skills as well
for (let item of game.items.entities) {
if(item.data.type === "skill") {
skillList.push(item)
skillList.push(item.data)
}
}
*/
this.position.width = 450;
this.position.height = 605;
break;
@ -102,23 +121,32 @@ export class ItemSheetKH extends ItemSheet {
let skillList4
if(game.settings.get("kopparhavet", "gameSystem") === "hjaltarnas-tid") {
skillList4 = await game.packs.get("kopparhavet.skills-ht").getContent();
skillList4 = await game.packs.get("kopparhavet.skills-ht").getDocuments();
} else {
skillList4 = await game.packs.get("kopparhavet.skills").getContent();
skillList4 = await game.packs.get("kopparhavet.skills").getDocuments();
}
for (let item of skillList4) {
if(item.data.type === "skill" && item.data.data.type.value === "combat") {
skillList.push(item)
skillList.push(item.data)
}
}
// Retrieve any created skills as well
game.items.forEach((item) => {
if(item.data.type === "skill" && item.data.data.type.value === "combat") {
skillList.push(item.data)
}
});
/*
// Retrieve any created skills as well
for (let item of game.items.entities) {
if(item.data.type === "skill" && item.data.data.type.value === "combat") {
skillList.push(item)
skillList.push(item.data)
}
}
*/
this.position.width = 530;
this.position.height = 750;
break;
@ -146,11 +174,11 @@ export class ItemSheetKH extends ItemSheet {
const clickedName = $(ev.currentTarget).data("name");
if(clickedName === "equipped") {
const equppiedValue = this.item.data.data.equipable.equipped;
const equppiedValue = this.item.data.equipable.equipped;
this.item.update({ "data.equipped.equipped": !equppiedValue });
} else {
const clickedValue = (this.item.data.data[clickedName].value == undefined ? false : this.item.data.data[clickedName].value);
const clickedValue = (this.item.data[clickedName].value == undefined ? false : this.item.data[clickedName].value);
let dataName = "data." + clickedName + ".value"
let tempData = {}
@ -174,7 +202,7 @@ export class ItemSheetKH extends ItemSheet {
event.preventDefault();
const a = event.currentTarget;
const action = a.dataset.action;
const attrs = this.object.data.data.modifications;
const attrs = this.object.data.modifications;
const form = this.form;
// Add new modification

View File

@ -27,7 +27,7 @@ export class ItemKH extends Item {
const html = await renderTemplate("systems/kopparhavet/templates/chat/item-card.html", itemData);
const chatData = {
user: game.user._id,
user: game.user.id,
rollMode: game.settings.get("core", "rollMode"),
content: html,
};

View File

@ -57,7 +57,7 @@ class KHDice {
const html2 = await renderTemplate("systems/kopparhavet/templates/dice/roll.html", rollData);
await r.toMessage({
user: game.user._id,
user: game.user.id,
create: true,
content: html2
});

View File

@ -10,10 +10,10 @@ export default class KHHooks {
actor.update({ "data.currency.shekel.label": "CURRENCY.SILVER" });
actorbaseSkills = CONFIG.KH.baseSkillsHT
skillIndex = await game.packs.get("kopparhavet.skills-ht").getContent();
skillIndex = await game.packs.get("kopparhavet.skills-ht").getDocuments();
} else {
actorbaseSkills = CONFIG.KH.baseSkills;
skillIndex = await game.packs.get("kopparhavet.skills").getContent();
skillIndex = await game.packs.get("kopparhavet.skills").getDocuments();
}
// Check if skill already exists by some chance
@ -23,7 +23,15 @@ export default class KHHooks {
// Filter skillIndex array to include only skills for Actor Type.
let _skillsList = skillIndex.filter((i) => skillsToAdd.includes(i.data.name));
await actor.createEmbeddedEntity("OwnedItem", _skillsList);
let _sl = [];
_skillsList.forEach((s) => {
//s.data._source.data["creatureType"] = actor.data.type;
//s.data._source.data["coreSkill"] = true;
_sl.push(s.data);
});
await actor.createEmbeddedDocuments("Item", _sl);
//await actor.createEmbeddedDocuments("Item", [_skillsList.toObject()]);
} else {
setTimeout(async function () {
await actor.sheet.render(true);

View File

@ -9,8 +9,8 @@ import * as migrations from "./helpers/migration-helper.js";
Hooks.once("init", () => {
CONFIG.Combat.initiative = { formula: "(@combat.init)d6kh2", decimals: 0 };
CONFIG.Actor.entityClass = ActorKH;
CONFIG.Item.entityClass = ItemKH;
CONFIG.Actor.documentClass = ActorKH;
CONFIG.Item.documentClass = ItemKH;
// Give global access to FFG config.
CONFIG.KH = KH;
@ -204,6 +204,40 @@ function registerHandlebarsHelpers() {
}
});
// Allows {if X = Y} type syntax in html using handlebars
Handlebars.registerHelper("iff", function (a, operator, b, opts) {
var bool = false;
switch (operator) {
case "==":
bool = a == b;
break;
case ">":
bool = a > b;
break;
case "<":
bool = a < b;
break;
case "!=":
bool = a != b;
break;
case "contains":
if (a && b) {
bool = a.includes(b);
} else {
bool = false;
}
break;
default:
throw "Unknown operator " + operator;
}
if (bool) {
return opts.fn(this);
} else {
return opts.inverse(this);
}
});
Handlebars.registerHelper('plaintextToHTML', function(value) {
// strip tags, add <br/> tags
return new Handlebars.SafeString(value.replace(/(<([^>]+)>)/gi, "").replace(/(?:\r\n|\r|\n)/g, '<br/>'));

80
packs/besvarjelser-ht.db Normal file
View File

@ -0,0 +1,80 @@
{"name":"Fördriva elementvarelse","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>Du f&ouml;rdriver en eldf&aring;gel, intighetsklot, stentr&auml;l, stormdrake eller vattenv&auml;ktare i samma zon.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"opposite","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"Wyrd","oppositeskilltwo":"","ritual":{"skillone":"","skilltwo":"","skillthree":"","skillfour":"","skillfive":""}},"cost":{"value":"4T6","type":"String","label":"SPELL.COST"},"difficulty":{"value":"hard","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"0WauBuWnuags8CCH"}
{"name":"Åkalla blodets och stridens ande","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>Du &aring;kallar ett illasinnat andev&auml;sen.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"roll","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"","oppositeskilltwo":"","ritual":{"skillone":"","skilltwo":"","skillthree":"","skillfour":"","skillfive":""}},"cost":{"value":"4T6 och 1T6 Hälsa","type":"String","label":"SPELL.COST"},"difficulty":{"value":"average","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"3duR1TKM6nFBSfHy"}
{"name":"Eldvägg","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>Du kallar upp en v&auml;gg som sp&auml;rrar av din zon fr&aring;n en annan eller delar din zon i tv&aring;.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"roll","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"","oppositeskilltwo":"","ritual":{"skillone":"","skilltwo":"","skillthree":"","skillfour":"","skillfive":""}},"cost":{"value":"3T6","type":"String","label":"SPELL.COST"},"difficulty":{"value":"average","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"42Re03XheCQLRthl"}
{"name":"Häxbarriär","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>Du formar wyrdv&auml;ven till en skyddande v&auml;gg mellan dig och en annan zon som en f&ouml;rsvarshandling eller vanlig handling.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"roll","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"","oppositeskilltwo":"","ritual":{"skillone":"","skilltwo":"","skillthree":"","skillfour":"","skillfive":""}},"cost":{"value":"2T6","type":"String","label":"SPELL.COST"},"difficulty":{"value":"average","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"42c7TrgtfyjdDwIf"}
{"name":"Hjältestyrka","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>Din ber&ouml;ring ger kraft och styrka &aring;t en person som du nuddar vid s&aring; att hon kan utf&ouml;ra fantastiska styrkeprov, till exempel att sl&aring; ner d&ouml;rrar eller kasta upp personer till ett f&ouml;nster.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"roll","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"","oppositeskilltwo":"","ritual":{"skillone":"","skilltwo":"","skillthree":"","skillfour":"","skillfive":""}},"cost":{"value":"2T6","type":"String","label":"SPELL.COST"},"difficulty":{"value":"average","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"49n1O14m1o0lN5FO"}
{"name":"Dimma","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>Du sveper in grannskapet i en gr&aring; kall dimma.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"roll","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"","oppositeskilltwo":"","ritual":{"skillone":"","skilltwo":"","skillthree":"","skillfour":"","skillfive":""}},"cost":{"value":"2T6","type":"String","label":"SPELL.COST"},"difficulty":{"value":"average","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"5MJJ7mRz6Ynp5FHp"}
{"name":"Häxstöt","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>Du skickar en tryckv&aring;g av kraft mot en valfri punkt som du kan se upp till tre zoner bort.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"opposite","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"Styrkeprov","oppositeskilltwo":"","ritual":{"skillone":"","skilltwo":"","skillthree":"","skillfour":"","skillfive":""}},"cost":{"value":"2T6","type":"String","label":"SPELL.COST"},"difficulty":{"value":"average","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"5uFOSRVGEZa0A2ah"}
{"name":"Sprängsejd","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>Du f&ouml;rh&auml;xar ett m&aring;l upp till en zon bort med kokande blod.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"opposite","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"Uthållighet","oppositeskilltwo":"","ritual":{"skillone":"","skilltwo":"","skillthree":"","skillfour":"","skillfive":""}},"cost":{"value":"1T6 + 1T6 per runda","type":"String","label":"SPELL.COST"},"difficulty":{"value":"hard","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"7DMZXoFiSPh0v0UX"}
{"name":"Dubbelgångare","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>Du kan skapa en illusion som &auml;r en exakt kopia av dig sj&auml;lv och upptr&auml;der ungef&auml;r som du g&ouml;r.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"roll","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"","oppositeskilltwo":"","ritual":{"skillone":"","skilltwo":"","skillthree":"","skillfour":"","skillfive":""}},"cost":{"value":"2T6","type":"String","label":"SPELL.COST"},"difficulty":{"value":"average","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"7pJ540Wyoj6vwcU9"}
{"name":"Isklinga","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>Du kan sticka ner din hand i en vattensamling och ur den dra upp ett vapen av is.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"roll","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"","oppositeskilltwo":"","ritual":{"skillone":"","skilltwo":"","skillthree":"","skillfour":"","skillfive":""}},"cost":{"value":"2T6","type":"String","label":"SPELL.COST"},"difficulty":{"value":"average","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"8tPkB84rE2JYMyhj"}
{"name":"Skydd mot is och eld","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>Du skapar en virvlande bubbla runt omkring dig som skyddar dig mot k&ouml;ld och hetta.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"roll","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"","oppositeskilltwo":"","ritual":{"skillone":"","skilltwo":"","skillthree":"","skillfour":"","skillfive":""}},"cost":{"value":"2T6","type":"String","label":"SPELL.COST"},"difficulty":{"value":"average","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"AoejefPiTBrTmCv0"}
{"name":"Skugga","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>Du sveper in en zon i m&ouml;rker och skugga.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"opposite","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"","oppositeskilltwo":"","ritual":{"skillone":"","skilltwo":"","skillthree":"","skillfour":"","skillfive":""}},"cost":{"value":"2T6","type":"String","label":"SPELL.COST"},"difficulty":{"value":"average","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"B4i56WvZBKN3rCmN"}
{"name":"Söva minne","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>Du l&auml;gger dina h&auml;nder p&aring; m&aring;lets huvud och d&auml;mpar ett minne i m&aring;lets sinne.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"opposite","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"Viljestyrka","oppositeskilltwo":"","ritual":{"skillone":"","skilltwo":"","skillthree":"","skillfour":"","skillfive":""}},"cost":{"value":"2T6","type":"String","label":"SPELL.COST"},"difficulty":{"value":"average","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"CU5kTdb2U7WOdM4i"}
{"name":"Vintergrepp","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>V&auml;lj en zon upp till tv&aring; zoner bort.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"opposite","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"Uthållighet","oppositeskilltwo":"","ritual":{"skillone":"","skilltwo":"","skillthree":"","skillfour":"","skillfive":""}},"cost":{"value":"4T6","type":"String","label":"SPELL.COST"},"difficulty":{"value":"average","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"Ec2bhExzCsZEHYAY"}
{"name":"Fjärrsyn","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>V&auml;lj en zon i grannskapet som du har varit i.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"roll","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"","oppositeskilltwo":"","ritual":{"skillone":"","skilltwo":"","skillthree":"","skillfour":"","skillfive":""}},"cost":{"value":"2T6","type":"String","label":"SPELL.COST"},"difficulty":{"value":"average","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"EgIxekm0wEjhuTFm"}
{"name":"Törnevägg","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>Du reser en v&auml;gg av t&ouml;rnen ur marken.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"roll","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"","oppositeskilltwo":"","ritual":{"skillone":"","skilltwo":"","skillthree":"","skillfour":"","skillfive":""}},"cost":{"value":"2T6","type":"String","label":"SPELL.COST"},"difficulty":{"value":"easy","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"ErdPlDiV13Wb2Rx0"}
{"name":"Vandrande blick","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>Du sluter &ouml;gonen och l&aring;ter din blick vandra fritt fr&aring;n den plats du befinner dig och upp till tv&aring; zoner bort.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"roll","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"","oppositeskilltwo":"","ritual":{"skillone":"","skilltwo":"","skillthree":"","skillfour":"","skillfive":""}},"cost":{"value":"2T6","type":"String","label":"SPELL.COST"},"difficulty":{"value":"average","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"GOQUMWQjuijKIyeU"}
{"name":"Häxblixt","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>En str&aring;le av h&auml;xljus sl&aring;r ut fr&aring;n din hand eller ditt fokus.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"attackroll","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"","oppositeskilltwo":"","ritual":{"skillone":"","skilltwo":"","skillthree":"","skillfour":"","skillfive":""}},"cost":{"value":"1T6","type":"String","label":"SPELL.COST"},"difficulty":{"value":"easy","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"Go3IJrc7E06g01F4"}
{"name":"Frammana stormdrake","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>Du kallar samman vindar och moln ur luften till en drakliknande skepnad av dimma och blixtar.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"roll","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"","oppositeskilltwo":"","ritual":{"skillone":"","skilltwo":"","skillthree":"","skillfour":"","skillfive":""}},"cost":{"value":"3T6","type":"String","label":"SPELL.COST"},"difficulty":{"value":"average","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"Grm7sG7kdzGzkye6"}
{"name":"Fjäderfall","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>Du kallar fram en pl&ouml;tsligt uppvind som d&auml;mpar fall.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"roll","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"","oppositeskilltwo":"","ritual":{"skillone":"","skilltwo":"","skillthree":"","skillfour":"","skillfive":""}},"cost":{"value":"1T6","type":"String","label":"SPELL.COST"},"difficulty":{"value":"average","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"GtGc8sp6KxR2G8UH"}
{"name":"Frammana eldfågel","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>Fr&aring;n en &ouml;ppen l&aring;ga kallar du fram en f&aring;gel av eld.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"roll","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"","oppositeskilltwo":"","ritual":{"skillone":"","skilltwo":"","skillthree":"","skillfour":"","skillfive":""}},"cost":{"value":"3T6","type":"String","label":"SPELL.COST"},"difficulty":{"value":"average","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"INvYOe3dZwvbvBkl"}
{"name":"Sårbarhetssejd","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>Du f&ouml;rh&auml;xar ett synligt m&aring;l h&ouml;gst tv&aring; zoner bort.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"opposite","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"Viljestyrka","oppositeskilltwo":"","ritual":{"skillone":"","skilltwo":"","skillthree":"","skillfour":"","skillfive":""}},"cost":{"value":"2T6","type":"String","label":"SPELL.COST"},"difficulty":{"value":"hard","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"IOPJ8dmRnO7PN9gY"}
{"name":"Stridssejd","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>Du f&ouml;rtrollar ett vapen s&aring; att det n&auml;stan &auml;r som att det anfaller sj&auml;lv mot sina m&aring;l.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"roll","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"","oppositeskilltwo":"","ritual":{"skillone":"","skilltwo":"","skillthree":"","skillfour":"","skillfive":""}},"cost":{"value":"1T6","type":"String","label":"SPELL.COST"},"difficulty":{"value":"easy","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"KDEUdgcfFfeAzxtz"}
{"name":"Fornsyn","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>Du h&aring;ller i ett f&ouml;rem&aring;l och upplever vad det har varit med om.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"roll","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"","oppositeskilltwo":"","ritual":{"skillone":"","skilltwo":"","skillthree":"","skillfour":"","skillfive":""}},"cost":{"value":"2T6","type":"String","label":"SPELL.COST"},"difficulty":{"value":"average","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"KGdRgD7P0chJiQXi"}
{"name":"Kontrollera djur","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>Du tar kontrollen &ouml;ver ett djur inom din zon eller en n&auml;rliggande zon.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"roll","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"","oppositeskilltwo":"","ritual":{"skillone":"","skilltwo":"","skillthree":"","skillfour":"","skillfive":""}},"cost":{"value":"2T6 + 1T6 per extra djur","type":"String","label":"SPELL.COST"},"difficulty":{"value":"easy","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"MUpNWhMSa4Qtpti4"}
{"name":"Häxljus","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>Du frammanar ett fladdrande h&auml;xljus som f&ouml;ljer med dig upp till en timme och som lyser upp i m&ouml;rkret.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"roll","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"","oppositeskilltwo":"","ritual":{"skillone":"","skilltwo":"","skillthree":"","skillfour":"","skillfive":""}},"cost":{"value":"1T6","type":"String","label":"SPELL.COST"},"difficulty":{"value":"easy","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"ON4NrGanB0iVRNyZ"}
{"name":"Slå blind","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>Du f&ouml;rh&auml;xar &ouml;gonen hos ett m&aring;l i samma zon.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"opposite","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"Uthållighet","oppositeskilltwo":"","ritual":{"skillone":"","skilltwo":"","skillthree":"","skillfour":"","skillfive":""}},"cost":{"value":"3T6","type":"String","label":"SPELL.COST"},"difficulty":{"value":"average","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"PA6VkitfNE02envJ"}
{"name":"Stenskrud","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>Din hud blir h&aring;rd som sten och skyddar mot skada.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"roll","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"","oppositeskilltwo":"","ritual":{"skillone":"","skilltwo":"","skillthree":"","skillfour":"","skillfive":""}},"cost":{"value":"2T6","type":"String","label":"SPELL.COST"},"difficulty":{"value":"easy","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"PJzFgSXZZadfKU07"}
{"name":"Dra gift","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>Du drar med din magi ut gift ur kroppen s&aring; att det blir svagare.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"roll","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"","oppositeskilltwo":"","ritual":{"skillone":"","skilltwo":"","skillthree":"","skillfour":"","skillfive":""}},"cost":{"value":"2T6","type":"String","label":"SPELL.COST"},"difficulty":{"value":"average","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"PLSEZASdWrNC0Kiu"}
{"name":"Vapenbane","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>Du sn&auml;rjer ett vapen i wyrd s&aring; att det blir tr&ouml;gare och sv&aring;rare att anv&auml;nda.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"roll","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"","oppositeskilltwo":"","ritual":{"skillone":"","skilltwo":"","skillthree":"","skillfour":"","skillfive":""}},"cost":{"value":"2T6","type":"String","label":"SPELL.COST"},"difficulty":{"value":"easy","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"PN4q48VAA62TIQ4G"}
{"name":"Tystnad","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>Du kan f&ouml;rdriva alla ljud fr&aring;n den zonen d&auml;r du befinner dig eller en angr&auml;nsande zon, i den f&ouml;rh&auml;xade zonen h&ouml;rs inga ljud &ouml;ver huvud taget.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"roll","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"","oppositeskilltwo":"","ritual":{"skillone":"","skilltwo":"","skillthree":"","skillfour":"","skillfive":""}},"cost":{"value":"2T6","type":"String","label":"SPELL.COST"},"difficulty":{"value":"average","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"PQcbEd6X9K5XZA7O"}
{"name":"Avståndshugg","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>Du f&ouml;rtrollar ett n&auml;rstridsvapen som du h&aring;ller i handen, eller dina h&auml;nder och f&ouml;tter.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"roll","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"","oppositeskilltwo":"","ritual":{"skillone":"","skilltwo":"","skillthree":"","skillfour":"","skillfive":""}},"cost":{"value":"2T6","type":"String","label":"SPELL.COST"},"difficulty":{"value":"average","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"PVtcV3eALUveMEuR"}
{"name":"Frammana intighetsklot","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>Du frammanar ett klot av intighet ur skuggorna.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"roll","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"","oppositeskilltwo":"","ritual":{"skillone":"","skilltwo":"","skillthree":"","skillfour":"","skillfive":""}},"cost":{"value":"3T6","type":"String","label":"SPELL.COST"},"difficulty":{"value":"average","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"WXkddTWzqHpaLDV5"}
{"name":"Slöjspegel","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>Du &ouml;ppnar ett f&ouml;nster genom sl&ouml;jan till Andra sidan med hj&auml;lp av en spegel eller kristall.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"roll","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"","oppositeskilltwo":"","ritual":{"skillone":"","skilltwo":"","skillthree":"","skillfour":"","skillfive":""}},"cost":{"value":"2T6","type":"String","label":"SPELL.COST"},"difficulty":{"value":"easy","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"WnrSCv9qSiR8UVtQ"}
{"name":"Stjäla livskraft","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>Du stj&auml;l livskraft fr&aring;n en person i samma zon.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"opposite","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"Uthållighet","oppositeskilltwo":"","ritual":{"skillone":"","skilltwo":"","skillthree":"","skillfour":"","skillfive":""}},"cost":{"value":"3T6","type":"String","label":"SPELL.COST"},"difficulty":{"value":"hard","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"XXD5JkmDfLJ9C6Ld"}
{"name":"Låna ett djurs sinne","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>Du l&aring;nar ett djurs sinne s&aring; att du uppfattar det som djuret uppfattar.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"roll","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"","oppositeskilltwo":"","ritual":{"skillone":"","skilltwo":"","skillthree":"","skillfour":"","skillfive":""}},"cost":{"value":"2T6","type":"String","label":"SPELL.COST"},"difficulty":{"value":"average","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"XlCwMK7WeTWeYdtk"}
{"name":"Mörkersyn","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>Du kan genom din ber&ouml;ring ge n&aring;gon f&ouml;rm&aring;gan att se i m&ouml;rker lika v&auml;l som en katt under en scen.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"opposite","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"Viljestyrka","oppositeskilltwo":"","ritual":{"skillone":"","skilltwo":"","skillthree":"","skillfour":"","skillfive":""}},"cost":{"value":"2T6","type":"String","label":"SPELL.COST"},"difficulty":{"value":"easy","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"YZKgZaQYp7OVBdSB"}
{"name":"Häxlås","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>Du v&auml;ver en f&ouml;rslutning p&aring; en d&ouml;rr, en f&ouml;nsterlucka, en ask, ett brunnslock, en sv&auml;rdsskida eller n&aring;got annat som g&aring;r att st&auml;nga.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"roll","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"","oppositeskilltwo":"","ritual":{"skillone":"","skilltwo":"","skillthree":"","skillfour":"","skillfive":""}},"cost":{"value":"1T6","type":"String","label":"SPELL.COST"},"difficulty":{"value":"average","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"Ydrs3Vjz7zfZSywS"}
{"name":"Växtsejd","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>Du besv&auml;rjer m&aring;let och f&aring;r det att v&auml;xa sig st&ouml;rre och starkare.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"opposite","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"Styrkeprov","oppositeskilltwo":"","ritual":{"skillone":"","skilltwo":"","skillthree":"","skillfour":"","skillfive":""}},"cost":{"value":"4T6","type":"String","label":"SPELL.COST"},"difficulty":{"value":"average","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"YkqsxYP3HmaMapi8"}
{"name":"Häxflamma","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>En eldstr&aring;le skjuter ut fr&aring;n dina h&auml;nder eller din stav, med vilken du kan anfalla m&aring;l i samma zon som dig.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"attackroll","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"","oppositeskilltwo":"","ritual":{"skillone":"","skilltwo":"","skillthree":"","skillfour":"","skillfive":""}},"cost":{"value":"3T6","type":"String","label":"SPELL.COST"},"difficulty":{"value":"average","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"Ys5Lh0VHYHBwSsVB"}
{"name":"Förvränga tid","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>Du v&auml;ver en bubbla runt om ett m&aring;l som f&ouml;rvrider tiden s&aring; att tiden g&aring;r fortare eller l&aring;ngsammare f&ouml;r denne.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"opposite","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"Wyrd","oppositeskilltwo":"","ritual":{"skillone":"","skilltwo":"","skillthree":"","skillfour":"","skillfive":""}},"cost":{"value":"3T6","type":"String","label":"SPELL.COST"},"difficulty":{"value":"average","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"aQJMXW1a6Ylm06pV"}
{"name":"Skyddsruna","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>Du ritar en skyddsruna p&aring; ett f&ouml;rem&aring;l eller en person.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"roll","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"","oppositeskilltwo":"","ritual":{"skillone":"","skilltwo":"","skillthree":"","skillfour":"","skillfive":""}},"cost":{"value":"2T6","type":"String","label":"SPELL.COST"},"difficulty":{"value":"average","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"b7fDC8N6t9cH3Vko"}
{"name":"Kontrollera elementvarelse","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>Du stj&auml;l en annan magikers eldf&aring;gel, intighetsklot, stentr&auml;l, stormdrake eller vattenv&auml;ktare i samma zon.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"opposite","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"Wyrd","oppositeskilltwo":"","ritual":{"skillone":"","skilltwo":"","skillthree":"","skillfour":"","skillfive":""}},"cost":{"value":"4T6","type":"String","label":"SPELL.COST"},"difficulty":{"value":"daunting","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"bikGBK8hvXfz3wtA"}
{"name":"Tillkalla djur","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>Du kan kalla till dig ett djur som efter b&auml;sta f&ouml;rm&aring;ga omedelbart tar sig till den zon d&auml;r du befinner dig.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"roll","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"","oppositeskilltwo":"","ritual":{"skillone":"","skilltwo":"","skillthree":"","skillfour":"","skillfive":""}},"cost":{"value":"2T6","type":"String","label":"SPELL.COST"},"difficulty":{"value":"easy","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"coNhJZkEtktlaqzn"}
{"name":"Ansiktsförändring","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>Du kan f&ouml;r&auml;ndra ditt utseende s&aring; att du ser ut som en helt annan person, men kan inte avvika fr&aring;n det som &auml;r naturligt f&ouml;rekommande inom ditt folkslag.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"roll","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"","oppositeskilltwo":"","ritual":{"skillone":"","skilltwo":"","skillthree":"","skillfour":"","skillfive":""}},"cost":{"value":"2T6","type":"String","label":"SPELL.COST"},"difficulty":{"value":"easy","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"dFLr3MLkXdoFP2id"}
{"name":"Ljusblixt","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>Du kan skapa en stark ljusblixt som bl&auml;ndar en person i samma zon.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"opposite","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"Manövrer","oppositeskilltwo":"","ritual":{"skillone":"","skilltwo":"","skillthree":"","skillfour":"","skillfive":""}},"cost":{"value":"2T6","type":"String","label":"SPELL.COST"},"difficulty":{"value":"hard","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"djBJTsGEI3CnPQuB"}
{"name":"Häxsköld","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>Du anv&auml;nder din h&auml;xkraft f&ouml;r att skydda dig mot andras besv&auml;rjelser.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"roll","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"","oppositeskilltwo":"","ritual":{"skillone":"","skilltwo":"","skillthree":"","skillfour":"","skillfive":""}},"cost":{"value":"1T6","type":"String","label":"SPELL.COST"},"difficulty":{"value":"average","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"f5C29nSf6q2uJcG5"}
{"name":"Frammana vattenväktare","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>Ur vattnet kallar du fram en virvlande pelare av vatten.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"roll","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"","oppositeskilltwo":"","ritual":{"skillone":"","skilltwo":"","skillthree":"","skillfour":"","skillfive":""}},"cost":{"value":"3T6","type":"String","label":"SPELL.COST"},"difficulty":{"value":"average","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"fTW6pDuaMX0luL5B"}
{"name":"Den rämnande kölden","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>Du ingjuter vinterns bitande k&ouml;ld in i sprickor och h&aring;ligheter i luckor, portar, murar, mindre stenv&auml;ggar eller klippblock som inte &auml;r magiska eller levande.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"roll","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"","oppositeskilltwo":"","ritual":{"skillone":"","skilltwo":"","skillthree":"","skillfour":"","skillfive":""}},"cost":{"value":"Speciell","type":"String","label":"SPELL.COST"},"difficulty":{"value":"hard","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"fsHr8HdXgGW3guZ6"}
{"name":"Smedshänder","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>Du kan h&aring;lla eller r&ouml;ra vid brinnande f&ouml;rem&aring;l och kokheta f&ouml;rem&aring;l med dina h&auml;nder utan att du tar n&aring;gon skada.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"roll","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"","oppositeskilltwo":"","ritual":{"skillone":"","skilltwo":"","skillthree":"","skillfour":"","skillfive":""}},"cost":{"value":"1T6","type":"String","label":"SPELL.COST"},"difficulty":{"value":"easy","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"gi371R1kA9jkBbEO"}
{"name":"Svaghetssejd","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>Du f&ouml;rh&auml;xar en synlig motst&aring;ndare upp till tv&aring; zoner bort.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"opposite","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"Viljestyrka","oppositeskilltwo":"","ritual":{"skillone":"","skilltwo":"","skillthree":"","skillfour":"","skillfive":""}},"cost":{"value":"2T6","type":"String","label":"SPELL.COST"},"difficulty":{"value":"average","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"h56QrNVQtbcwyaj2"}
{"name":"Luftbro","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>Du kan skapa en bro av f&ouml;rt&auml;tad luft som &auml;r s&aring; gott som osynlig men stark nog att b&auml;ra en grupp ryttare.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"roll","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"","oppositeskilltwo":"","ritual":{"skillone":"","skilltwo":"","skillthree":"","skillfour":"","skillfive":""}},"cost":{"value":"3T6","type":"String","label":"SPELL.COST"},"difficulty":{"value":"average","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"hvQ5KpkLb1JHWtAz"}
{"name":"Trollsteg","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>Du klipper wyrdtr&aring;darna som binder dig till en plats, och f&auml;ster dem vid en annan plats i grannskapet.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"roll","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"","oppositeskilltwo":"","ritual":{"skillone":"","skilltwo":"","skillthree":"","skillfour":"","skillfive":""}},"cost":{"value":"3T6","type":"String","label":"SPELL.COST"},"difficulty":{"value":"average","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"imeuzkc8mZYvsP1q"}
{"name":"Den skälvande marken","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>Du f&aring;r marken kring dina f&ouml;tter att sk&auml;lva som om det vore jordb&auml;vning.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"roll","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"","oppositeskilltwo":"","ritual":{"skillone":"","skilltwo":"","skillthree":"","skillfour":"","skillfive":""}},"cost":{"value":"3T6","type":"String","label":"SPELL.COST"},"difficulty":{"value":"average","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"imf5mk2FUhkWpgpj"}
{"name":"Ingjuta livskraft","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>Du f&ouml;rst&auml;rker en varelses livskraft och g&ouml;r att alla hans skador, b&aring;de de han har och de han orsakas, l&auml;ker dubbelt s&aring; snabbt.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"roll","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"","oppositeskilltwo":"","ritual":{"skillone":"","skilltwo":"","skillthree":"","skillfour":"","skillfive":""}},"cost":{"value":"3T6","type":"String","label":"SPELL.COST"},"difficulty":{"value":"average","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"j5JBTRbRFFgx8xnx"}
{"name":"Fasa","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>Du samlar skuggor omkring dig och f&ouml;rvrider ljuset s&aring; att du verkar st&ouml;rre och farligare &auml;n du &auml;r.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"roll","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"","oppositeskilltwo":"","ritual":{"skillone":"","skilltwo":"","skillthree":"","skillfour":"","skillfive":""}},"cost":{"value":"1T6","type":"String","label":"SPELL.COST"},"difficulty":{"value":"average","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"k7YnASOJNtz8V3IV"}
{"name":"Vattenandning","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>Du kan genom din ber&ouml;ring ge n&aring;gon f&ouml;rm&aring;gan att andas under vattnet.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"opposite","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"Viljestyrka","oppositeskilltwo":"","ritual":{"skillone":"","skilltwo":"","skillthree":"","skillfour":"","skillfive":""}},"cost":{"value":"3T6","type":"String","label":"SPELL.COST"},"difficulty":{"value":"average","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"k9ipu82NRXtzxx1M"}
{"name":"Frammana stenträl","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>Du kallar upp l&ouml;sa stenar stenar ur marken som samlar sig och staplar sig p&aring; varandra till en m&auml;nniskoliknande form.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"roll","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"","oppositeskilltwo":"","ritual":{"skillone":"","skilltwo":"","skillthree":"","skillfour":"","skillfive":""}},"cost":{"value":"3T6","type":"String","label":"SPELL.COST"},"difficulty":{"value":"average","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"kOxqUuIjn2VVyNte"}
{"name":"Spårsyn","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>R&ouml;r vid dina &ouml;gon eller en villig persons &ouml;gon.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"roll","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"","oppositeskilltwo":"","ritual":{"skillone":"","skilltwo":"","skillthree":"","skillfour":"","skillfive":""}},"cost":{"value":"2T6","type":"String","label":"SPELL.COST"},"difficulty":{"value":"easy","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"ksx3W6nGVkHp2Hvt"}
{"name":"Klor","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>Du kan genom din ber&ouml;ring f&aring; n&aring;gons naglar, &auml;ven dina egna, att omformas till kraftiga klor.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"roll","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"","oppositeskilltwo":"","ritual":{"skillone":"","skilltwo":"","skillthree":"","skillfour":"","skillfive":""}},"cost":{"value":"2T6","type":"String","label":"SPELL.COST"},"difficulty":{"value":"easy","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"leLbWVz4l8Wga2nn"}
{"name":"Skenbild","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>Du skapar en skenbild av n&aring;got som du n&aring;gon g&aring;ng har sett.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"roll","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"","oppositeskilltwo":"","ritual":{"skillone":"","skilltwo":"","skillthree":"","skillfour":"","skillfive":""}},"cost":{"value":"1T6","type":"String","label":"SPELL.COST"},"difficulty":{"value":"easy","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"m75po1Iq13JyVxn7"}
{"name":"Flygande kvast","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>F&ouml;rtrolla en kvast eller stav och anv&auml;nd den f&ouml;r att flyga.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"roll","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"","oppositeskilltwo":"","ritual":{"skillone":"","skilltwo":"","skillthree":"","skillfour":"","skillfive":""}},"cost":{"value":"2T6","type":"String","label":"SPELL.COST"},"difficulty":{"value":"average","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"mfOlQ745YzhlIRrn"}
{"name":"Vindstämma","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>Du flyttar din r&ouml;st till en annan plats upp till tv&aring; zoner bort.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"roll","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"","oppositeskilltwo":"","ritual":{"skillone":"","skilltwo":"","skillthree":"","skillfour":"","skillfive":""}},"cost":{"value":"1T6","type":"String","label":"SPELL.COST"},"difficulty":{"value":"easy","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"mxa9Y8GmFZfuNjcJ"}
{"name":"Virvelvind","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>Du skapar en virvelvind som slungar runt damm, smuts och andra l&ouml;sa och l&auml;tta f&ouml;rem&aring;l i omgivningen.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"roll","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"","oppositeskilltwo":"","ritual":{"skillone":"","skilltwo":"","skillthree":"","skillfour":"","skillfive":""}},"cost":{"value":"2T6","type":"String","label":"SPELL.COST"},"difficulty":{"value":"average","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"no2vD8NlfkeJ2IHm"}
{"name":"Hamnskiftare","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>N&auml;r du v&auml;ver besv&auml;rjelsen byter du omedelbart hamn till antingen ett valfritt medelstort fyrfota djur som varg, r&auml;v eller hund; eller till en valfri normalstor f&aring;gel, exempelvis korp, uggla eller &ouml;rn.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"roll","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"","oppositeskilltwo":"","ritual":{"skillone":"","skilltwo":"","skillthree":"","skillfour":"","skillfive":""}},"cost":{"value":"4T6","type":"String","label":"SPELL.COST"},"difficulty":{"value":"average","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"o0ngfNZhDIaK8nuu"}
{"name":"Binda elementvarelse","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>Du binder en eldf&aring;gel, intighetsklot, stentr&auml;l, stormdrake eller vattenv&auml;ktare som du kontrollerar och &auml;r i samma zon som du sj&auml;lv.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"roll","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"","oppositeskilltwo":"","ritual":{"skillone":"","skilltwo":"","skillthree":"","skillfour":"","skillfive":""}},"cost":{"value":"2T6","type":"String","label":"SPELL.COST"},"difficulty":{"value":"hard","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"o2pR0Wi37LJzQz3U"}
{"name":"Skuggflykt","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>Du river upp wyrdv&auml;ven s&aring; mycket att du hamnar p&aring; andra sidan.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"roll","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"","oppositeskilltwo":"","ritual":{"skillone":"","skilltwo":"","skillthree":"","skillfour":"","skillfive":""}},"cost":{"value":"1T6 + special","type":"String","label":"SPELL.COST"},"difficulty":{"value":"average","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"oUXGoyt3TWjWWK7V"}
{"name":"Läkesejd","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>Din ber&ouml;ring f&aring;r s&aring;r att sluta sig och ben att l&auml;ka.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"roll","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"","oppositeskilltwo":"","ritual":{"skillone":"","skilltwo":"","skillthree":"","skillfour":"","skillfive":""}},"cost":{"value":"3T6","type":"String","label":"SPELL.COST"},"difficulty":{"value":"average","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"pYBdKmJrE1IdxWn7"}
{"name":"Djurlänk","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>Du kan skapa en permanent l&auml;nk till ett djur som &auml;r v&auml;lvilligt inst&auml;llt till dig.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"roll","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"","oppositeskilltwo":"","ritual":{"skillone":"","skilltwo":"","skillthree":"","skillfour":"","skillfive":""}},"cost":{"value":"4T6","type":"String","label":"SPELL.COST"},"difficulty":{"value":"average","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"pbybfO7wcljlHAP3"}
{"name":"Skyddscirkel","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>Du ritar en skyddscirkel kring en zon.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"roll","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"","oppositeskilltwo":"","ritual":{"skillone":"","skilltwo":"","skillthree":"","skillfour":"","skillfive":""}},"cost":{"value":"4T6","type":"String","label":"SPELL.COST"},"difficulty":{"value":"average","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"pt1Wcj4YvHeba0qS"}
{"name":"Stennäve","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>Du slungar en sten med magisk kraft mot en fiende upp till tv&aring; zoner bort.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"attackroll","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"","oppositeskilltwo":"","ritual":{"skillone":"","skilltwo":"","skillthree":"","skillfour":"","skillfive":""}},"cost":{"value":"1T6","type":"String","label":"SPELL.COST"},"difficulty":{"value":"average","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"qlyVoVkRPCrQLt5k"}
{"name":"Osynlighetsslöja","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>R&ouml;r vid en mantel, kappa, rock eller annat helt&auml;ckande plagg.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"roll","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"","oppositeskilltwo":"","ritual":{"skillone":"","skilltwo":"","skillthree":"","skillfour":"","skillfive":""}},"cost":{"value":"2T6","type":"String","label":"SPELL.COST"},"difficulty":{"value":"easy","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"qp3Kddpj7Nkexv4Q"}
{"name":"Blixthand","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>En ljusb&aring;ge sl&aring;r ut fr&aring;n dina h&auml;nder eller fr&aring;n &auml;nden p&aring; en stav, och sl&aring;r ner i en n&auml;rliggande zon.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"roll","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"","oppositeskilltwo":"","ritual":{"skillone":"","skilltwo":"","skillthree":"","skillfour":"","skillfive":""}},"cost":{"value":"3T6","type":"String","label":"SPELL.COST"},"difficulty":{"value":"hard","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"rrjoQEe4L6ZpS9UP"}
{"name":"Bedövningssejd","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>Du f&ouml;rh&auml;xar ett synligt m&aring;l h&ouml;gst tv&aring; zoner bort.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"opposite","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"Viljestyrka","oppositeskilltwo":"","ritual":{"skillone":"","skilltwo":"","skillthree":"","skillfour":"","skillfive":""}},"cost":{"value":"1T6","type":"String","label":"SPELL.COST"},"difficulty":{"value":"average","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"sOF6TJ1k4cFwimIO"}
{"name":"Söndra väv","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>Du sliter s&ouml;nder de wyrdtr&aring;dar som binder en annan varelse till den fysiska v&auml;rlden.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"opposite","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"Viljestyrka","oppositeskilltwo":"","ritual":{"skillone":"","skilltwo":"","skillthree":"","skillfour":"","skillfive":""}},"cost":{"value":"3T6","type":"String","label":"SPELL.COST"},"difficulty":{"value":"hard","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"t0GV8PevaVXpik79"}
{"name":"Silvertunga","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>En trollkarls r&ouml;st kan vara f&ouml;rh&auml;xande.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"roll","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"","oppositeskilltwo":"","ritual":{"skillone":"","skilltwo":"","skillthree":"","skillfour":"","skillfive":""}},"cost":{"value":"1T6","type":"String","label":"SPELL.COST"},"difficulty":{"value":"easy","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"wUa97IO7drguxS0o"}
{"name":"Trollviskning","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>S&ouml;k &ouml;gonkontakt med en person.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"opposite","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"Wyrd","oppositeskilltwo":"","ritual":{"skillone":"","skilltwo":"","skillthree":"","skillfour":"","skillfive":""}},"cost":{"value":"1T6","type":"String","label":"SPELL.COST"},"difficulty":{"value":"easy","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"xeqDV6OvZx9AFhmn"}
{"name":"Snabbväxt","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>Du kan f&aring; en v&auml;xt att v&auml;xa lika mycket p&aring; ett dygn som den skulle ha gjort under ett &aring;r.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"roll","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"","oppositeskilltwo":"","ritual":{"skillone":"","skilltwo":"","skillthree":"","skillfour":"","skillfive":""}},"cost":{"value":"3T6","type":"String","label":"SPELL.COST"},"difficulty":{"value":"average","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"z7Hvy0ZleizM4pJm"}
{"name":"Skuggvandring","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>Du &ouml;ppnar ett h&aring;l till Andra sidan och faller dit, trots att du inte har tillr&auml;ckligt h&ouml;g Skuld.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"roll","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"","oppositeskilltwo":"","ritual":{"skillone":"","skilltwo":"","skillthree":"","skillfour":"","skillfive":""}},"cost":{"value":"2T6","type":"String","label":"SPELL.COST"},"difficulty":{"value":"average","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"zFwc7IdKGzOzujz7"}
{"name":"Förnimmelse","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>Du v&auml;ver en besv&auml;rjelse som hj&auml;lper dig att hitta n&aring;got du vill finna.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"roll","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"","oppositeskilltwo":"","ritual":{"skillone":"","skilltwo":"","skillthree":"","skillfour":"","skillfive":""}},"cost":{"value":"2T6","type":"String","label":"SPELL.COST"},"difficulty":{"value":"average","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"zly1ApyygoPw4oEq"}

34
packs/besvarjelser.db Normal file
View File

@ -0,0 +1,34 @@
{"name":"Ansiktsförändring","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>Du kan f&ouml;r&auml;ndra ditt utseende s&aring; att du ser ut som en helt annan person, men kan inte avvika fr&aring;n det som &auml;r naturligt f&ouml;rekommande inom ditt folkslag.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"opposite","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"Fingerfärdighet","oppositeskilltwo":"","ritual":{"skillone":"","skilltwo":"","skillthree":"","skillfour":"","skillfive":""}},"cost":{"value":"2T6","type":"String","label":"SPELL.COST"},"difficulty":{"value":"easy","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"iEAR1DYfnZRN6oKx"}
{"name":"Blixt","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>En blixt sl&aring;r ut fr&aring;n din hand eller din stav.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"attackroll","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"","oppositeskilltwo":"","ritual":{"skillone":"","skilltwo":"","skillthree":"","skillfour":"","skillfive":""}},"cost":{"value":"1T6","type":"String","label":"SPELL.COST"},"difficulty":{"value":"easy","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"Jp52HoVZbPBgKpSW"}
{"name":"Djurlänk","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>Du kan skapa en permanent l&auml;nk till ett djur som &auml;r v&auml;lvilligt inst&auml;llt till dig.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"roll","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"","oppositeskilltwo":"","ritual":{"skillone":"","skilltwo":"","skillthree":"","skillfour":"","skillfive":""}},"cost":{"value":"4T6","type":"String","label":"SPELL.COST"},"difficulty":{"value":"average","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"7WHtngaD6U7mswoZ"}
{"name":"Dubbelgångare","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>Du kan skapa en illusion som &auml;r en exakt kopia av dig sj&auml;lv och upptr&auml;der ungef&auml;r som du g&ouml;r.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"roll","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"","oppositeskilltwo":"","ritual":{"skillone":"","skilltwo":"","skillthree":"","skillfour":"","skillfive":""}},"cost":{"value":"2T6","type":"String","label":"SPELL.COST"},"difficulty":{"value":"average","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"CHLcUsSavtuMp0GZ"}
{"name":"Fasa","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>Du samlar skuggor omkring dig och f&ouml;rvrider ljuset s&aring; att du verkar st&ouml;rre och farligare &auml;n du &auml;r.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"roll","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"","oppositeskilltwo":"","ritual":{"skillone":"","skilltwo":"","skillthree":"","skillfour":"","skillfive":""}},"cost":{"value":"1T6","type":"String","label":"SPELL.COST"},"difficulty":{"value":"average","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"FaNKqbGmpkcQA9JZ"}
{"name":"Flamma","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>En eldstr&aring;le skjuter ut fr&aring;n dina h&auml;nder eller din stav, med vilken du kan anfalla m&aring;l i samma zon som dig.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"attackroll","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"","oppositeskilltwo":"","ritual":{"skillone":"","skilltwo":"","skillthree":"","skillfour":"","skillfive":""}},"cost":{"value":"3T6","type":"String","label":"SPELL.COST"},"difficulty":{"value":"average","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"50BCCXTTZqberYtb"}
{"name":"Frammana Salamander","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>Fr&aring;n en &ouml;ppen l&aring;ga kallar du fram en liten, blygr&aring; och kall &ouml;dlevarelse med f&ouml;rm&aring;gan att f&aring; saker omkring sig att fatta eld.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"ritual","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"","oppositeskilltwo":"","ritual":{"skillone":"Trolldom","skilltwo":"Lärdom","skillthree":"Insikt","skillfour":"Viljestyrka","skillfive":""}},"cost":{"value":"3T6","type":"String","label":"SPELL.COST"},"difficulty":{"value":"hard","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"SPnlI0aRSmZ9G7OM"}
{"name":"Frammana tjänsteande","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>Du frammanar en l&auml;gre tj&auml;nsteande eller sm&aring;&shy; demon som kan hj&auml;lpa dig med sm&aring;bestyr.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"ritual","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"","oppositeskilltwo":"","ritual":{"skillone":"Trolldom","skilltwo":"Lärdom","skillthree":"Insikt","skillfour":"Viljestyrka","skillfive":""}},"cost":{"value":"1T6","type":"String","label":"SPELL.COST"},"difficulty":{"value":"easy","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"wMzkRb5q2PlLvdiR"}
{"name":"Frammana Undin","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>Ur havet eller en st&ouml;rre samling saltvatten stiger en vagt m&auml;nniskoliknande form av vatten.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"ritual","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"","oppositeskilltwo":"","ritual":{"skillone":"Trolldom","skilltwo":"Lärdom","skillthree":"Insikt","skillfour":"Viljestyrka","skillfive":""}},"cost":{"value":"3T6","type":"String","label":"SPELL.COST"},"difficulty":{"value":"hard","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"7iXPAvuVdYNXPh1k"}
{"name":"Frammana Åskfågel","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>Fr&aring;n ett moln p&aring; &ouml;ppen himmel kallar du ned en stor, kolsvart och korpliknande f&aring;gelvarelse.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"ritual","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"","oppositeskilltwo":"","ritual":{"skillone":"Trolldom","skilltwo":"Lärdom","skillthree":"Insikt","skillfour":"Viljestyrka","skillfive":""}},"cost":{"value":"3T6","type":"String","label":"SPELL.COST"},"difficulty":{"value":"hard","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"jxLKWEr2svRL8xf4"}
{"name":"Fyrljus","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>Du skapar ett oerh&ouml;rt kraftigt ljussken fr&aring;n en specifik punkt.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"roll","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"","oppositeskilltwo":"","ritual":{"skillone":"","skilltwo":"","skillthree":"","skillfour":"","skillfive":""}},"cost":{"value":"2T6","type":"String","label":"SPELL.COST"},"difficulty":{"value":"average","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"hWrbfEhunY5t1eOc"}
{"name":"Fördriva","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>Du f&ouml;rdriver en utomv&auml;rldslig varelse i samma zon.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"opposite","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"Viljestyrka","oppositeskilltwo":"Insikt","ritual":{"skillone":"","skilltwo":"","skillthree":"","skillfour":"","skillfive":""}},"cost":{"value":"4T6","type":"String","label":"SPELL.COST"},"difficulty":{"value":"hard","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"4jlwjnpgS0oikWCO"}
{"name":"Förvirra","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>Du f&ouml;rh&auml;xar ett synligt m&aring;l h&ouml;gst tv&aring; zoner bort.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"opposite","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"Viljestyrka","oppositeskilltwo":"","ritual":{"skillone":"","skilltwo":"","skillthree":"","skillfour":"","skillfive":""}},"cost":{"value":"1T6","type":"String","label":"SPELL.COST"},"difficulty":{"value":"average","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"XfyPKxoefGAFOAzO"}
{"name":"Hamnskiftare","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>Du tecknar en magisk cirkel runt dig sj&auml;lv, med en p&auml;ls eller ett skinn av den varelse du vill byta form till i cirkelns mitt.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"ritual","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"","oppositeskilltwo":"","ritual":{"skillone":"Trolldom","skilltwo":"Insikt","skillthree":"Viljestyrka","skillfour":"","skillfive":""}},"cost":{"value":"3T6","type":"String","label":"SPELL.COST"},"difficulty":{"value":"hard","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"lBb7IR3o3hPWnB1A"}
{"name":"Hela","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>Din ber&ouml;ring f&aring;r s&aring;r att sluta sig och ben att l&auml;ka.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"roll","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"","oppositeskilltwo":"","ritual":{"skillone":"","skilltwo":"","skillthree":"","skillfour":"","skillfive":""}},"cost":{"value":"3T6","type":"String","label":"SPELL.COST"},"difficulty":{"value":"average","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"ZRMT4dTJx8fu4FF9"}
{"name":"Hägring","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>Du f&aring;r &ouml;vriga i samma zon som du att se en h&auml;gring vid horisonten.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"opposite","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"Insikt","oppositeskilltwo":"","ritual":{"skillone":"","skilltwo":"","skillthree":"","skillfour":"","skillfive":""}},"cost":{"value":"2T6","type":"String","label":"SPELL.COST"},"difficulty":{"value":"hard","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"vqe4hJ8AHfmONZo2"}
{"name":"Kontrollera djur","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>Du tar kontrollen &ouml;ver ett djur i din eller en n&auml;r&shy; liggande zon.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"roll","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"","oppositeskilltwo":"","ritual":{"skillone":"","skilltwo":"","skillthree":"","skillfour":"","skillfive":""}},"cost":{"value":"2T6 + 1T6 per extra djur","type":"String","label":"SPELL.COST"},"difficulty":{"value":"easy","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"wPCChabZXvQUY2GH"}
{"name":"Ljus","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>Du frammanar ett fladdrande magiskt ljus som f&ouml;ljer med dig scenen ut och som lyser upp i m&ouml;rkret.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"roll","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"","oppositeskilltwo":"","ritual":{"skillone":"","skilltwo":"","skillthree":"","skillfour":"","skillfive":""}},"cost":{"value":"1T6","type":"String","label":"SPELL.COST"},"difficulty":{"value":"easy","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"2Oi2ZaLxb4XLvQ2O"}
{"name":"Magisk sköld","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>Du anv&auml;nder din magiska kraft f&ouml;r att skydda dig mot andras besv&auml;rjelser.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"roll","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"","oppositeskilltwo":"","ritual":{"skillone":"","skilltwo":"","skillthree":"","skillfour":"","skillfive":""}},"cost":{"value":"1T6","type":"String","label":"SPELL.COST"},"difficulty":{"value":"average","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"uKpkzE4GEv5Kvviv"}
{"name":"Magisk stämning","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>Du skapar sm&aring;effekter i din zon som bidrar till en f&ouml;rtrollande och f&ouml;rh&auml;xande st&auml;mning.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"roll","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"","oppositeskilltwo":"","ritual":{"skillone":"","skilltwo":"","skillthree":"","skillfour":"","skillfive":""}},"cost":{"value":"1T6","type":"String","label":"SPELL.COST"},"difficulty":{"value":"easy","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"819ZmsvSGUp7qQrv"}
{"name":"Omtolka tecken","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>Ett tecken kan omtolkas av magikern och f&aring; ny inneb&ouml;rd.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"roll","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"","oppositeskilltwo":"","ritual":{"skillone":"","skilltwo":"","skillthree":"","skillfour":"","skillfive":""}},"cost":{"value":"3T6","type":"String","label":"SPELL.COST"},"difficulty":{"value":"average","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"mNp8tq4lrX3dvAi6"}
{"name":"Osynlighetsslöja","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>Besv&auml;rjelsen kastas p&aring; en mantel, kappa, rock eller annat helt&auml;ckande plagg.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"roll","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"","oppositeskilltwo":"","ritual":{"skillone":"","skilltwo":"","skillthree":"","skillfour":"","skillfive":""}},"cost":{"value":"2T6","type":"String","label":"SPELL.COST"},"difficulty":{"value":"easy","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"vZiUoBEA3ZlUVryk"}
{"name":"Silvertunga","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>Din r&ouml;st blir &ouml;vertygande.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"roll","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"","oppositeskilltwo":"","ritual":{"skillone":"","skilltwo":"","skillthree":"","skillfour":"","skillfive":""}},"cost":{"value":"1T6","type":"String","label":"SPELL.COST"},"difficulty":{"value":"easy","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"mhtNi55391NTtv20"}
{"name":"Skenbild","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>Du skapar en skenbild av n&aring;got som du n&aring;gon g&aring;ng har sett.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"roll","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"","oppositeskilltwo":"","ritual":{"skillone":"","skilltwo":"","skillthree":"","skillfour":"","skillfive":""}},"cost":{"value":"1T6","type":"String","label":"SPELL.COST"},"difficulty":{"value":"easy","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"yLEa6eLHR15vPViT"}
{"name":"Skyddscirkel","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>Du ritar en skyddande magisk cirkel kring en zon.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"roll","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"","oppositeskilltwo":"","ritual":{"skillone":"","skilltwo":"","skillthree":"","skillfour":"","skillfive":""}},"cost":{"value":"3T6","type":"String","label":"SPELL.COST"},"difficulty":{"value":"average","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"FKlkahAMWh9MWUjg"}
{"name":"Stenskrud","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>Din hud blir h&aring;rd som sten och &ouml;kar ditt skydd mot skada med 1T6.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"roll","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"","oppositeskilltwo":"","ritual":{"skillone":"","skilltwo":"","skillthree":"","skillfour":"","skillfive":""}},"cost":{"value":"2T6","type":"String","label":"SPELL.COST"},"difficulty":{"value":"easy","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"DXmyY1OsysPL1FgP"}
{"name":"Stjäla livskraft","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>Du stj&auml;l livskraft fr&aring;n en person i samma zon.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"opposite","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"Uthållighet","oppositeskilltwo":"","ritual":{"skillone":"","skilltwo":"","skillthree":"","skillfour":"","skillfive":""}},"cost":{"value":"3T6","type":"String","label":"SPELL.COST"},"difficulty":{"value":"hard","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"RFYOmR097YwKEdgc"}
{"name":"Villospår","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>Du skapar falska sp&aring;r som d&ouml;ljer dina egna och f&aring;r f&ouml;rf&ouml;ljare att tappa sp&aring;ret och ist&auml;llet f&ouml;lja dina falska sp&aring;r.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"opposite","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"Stigvana","oppositeskilltwo":"","ritual":{"skillone":"","skilltwo":"","skillthree":"","skillfour":"","skillfive":""}},"cost":{"value":"1T6","type":"String","label":"SPELL.COST"},"difficulty":{"value":"average","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"jw8kWHwu5foUO5vN"}
{"name":"Vindstöt","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>Du frammanar en kortlivad vindande som slungar sig mot en fiende upp till tv&aring; zoner bort.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"attackroll","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"","oppositeskilltwo":"","ritual":{"skillone":"","skilltwo":"","skillthree":"","skillfour":"","skillfive":""}},"cost":{"value":"1T6","type":"String","label":"SPELL.COST"},"difficulty":{"value":"average","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"rqRpYOtHvUP1xpI4"}
{"name":"Vindviskare","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>Du kan tala med vindarnas andar, och f&aring; dem att antingen byta riktning, lugna sin framfart, eller bl&aring;sa upp.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"roll","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"","oppositeskilltwo":"","ritual":{"skillone":"","skilltwo":"","skillthree":"","skillfour":"","skillfive":""}},"cost":{"value":"3T6","type":"String","label":"SPELL.COST"},"difficulty":{"value":"hard","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"a5dYS93yPFjjxcCw"}
{"name":"Vågsvall","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>Du skapar en stor magisk v&aring;g.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"roll","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"","oppositeskilltwo":"","ritual":{"skillone":"","skilltwo":"","skillthree":"","skillfour":"","skillfive":""}},"cost":{"value":"3T6","type":"String","label":"SPELL.COST"},"difficulty":{"value":"average","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"sczrNCK7lCtD4hih"}
{"name":"Åkalla beskyddaren [namn]","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>Kr&auml;ver f&ouml;rm&aring;gan Magisk Pakt (se sida 46).</p>\n<p>Varje beskyddare har en unik besv&auml;rjelse.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"ritual","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"","oppositeskilltwo":"","ritual":{"skillone":"Trolldom","skilltwo":"Lärdom","skillthree":"Insikt","skillfour":"Viljestyrka","skillfive":""}},"cost":{"value":"(Ritual) 2T6; (Kontrollera) 2T6","type":"String","label":"SPELL.COST"},"difficulty":{"value":"average","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"tjoGC2RmIwwRrFpY"}
{"name":"Åkalla demonen Azag","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>Du &aring;kallar Azag, en monstru&ouml;s stendemon. Azag har s&auml;rdraget Blodt&ouml;rstig.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"ritual","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"","oppositeskilltwo":"","ritual":{"skillone":"Trolldom","skilltwo":"Lärdom","skillthree":"Insikt","skillfour":"Viljestyrka","skillfive":""}},"cost":{"value":"(Ritual) 4T6 och 1T6 Hälsa*; (Kontrollera) 3T6","type":"String","label":"SPELL.COST"},"difficulty":{"value":"average","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"PI0kXTPcq48fcrWd"}
{"name":"Åskvigg","permission":{"default":0,"fJj85fq65UTTN7mU":3},"type":"spell","data":{"description":{"value":"<p>Besv&auml;rjelsen kan bara kastas om b&aring;de magikern och m&aring;let befinner sig under bar himmel.</p>","type":"String","label":"ITEM.DESCRIPTION"},"roll":{"value":"roll","type":"String","label":"SPELL.ROLLTITLE","skill":"Trolldom","oppositeskill":"","oppositeskilltwo":"","ritual":{"skillone":"","skilltwo":"","skillthree":"","skillfour":"","skillfive":""}},"cost":{"value":"3T6","type":"String","label":"SPELL.COST"},"difficulty":{"value":"hard","type":"String","label":"SPELL.DIFFICULTY"}},"flags":{},"img":"icons/svg/mystery-man.svg","effects":[],"_id":"ImzNHTJjjCyRkY7A"}

View File

@ -2,9 +2,9 @@
"name": "kopparhavet",
"title": "Kopparhavets Hjältar",
"description": "The Molten Sea is a dangerous but exciting place, where pirates, sorcerers and secretive orders of knighthood struggle for power, wealth and ancient lore.",
"version": "0.0.4",
"minimumCoreVersion": "0.7.5",
"compatibleCoreVersion": "0.7.8",
"version": "0.1.2",
"minimumCoreVersion": "9",
"compatibleCoreVersion": "9",
"templateVersion": 4,
"author": "Erebus",
"scripts": [],
@ -60,6 +60,20 @@
"system": "kopparhavet",
"path": "./packs/weapons-ht.db",
"entity": "Item"
},
{
"name": "besvarjelser",
"label": "Kopparhavets Hjältar Besvärjelser",
"system": "kopparhavet",
"path": "./packs/besvarjelser.db",
"entity": "Item"
},
{
"name": "besvarjelser-ht",
"label": "Hjältarnas Tid Besvärjelser",
"system": "kopparhavet",
"path": "./packs/besvarjelser-ht.db",
"entity": "Item"
}
],
"languages": [
@ -81,6 +95,6 @@
"url": "https://pi.rikspolisen.se/foundryvtt/kopparhavet",
"socket": true,
"manifest": "https://pi.rikspolisen.se/foundryvtt/kopparhavet/raw/branch/master/system.json",
"download": "https://pi.rikspolisen.se/foundryvtt/kopparhavet/archive/v0.0.4.zip",
"download": "https://pi.rikspolisen.se/foundryvtt/kopparhavet/archive/v0.1.2.zip",
"license": "LICENCE.txt"
}

View File

@ -278,7 +278,14 @@
"label": "SPELL.ROLLTITLE",
"skill": "Trolldom",
"oppositeskill": "",
"ritual": {}
"oppositeskilltwo": "",
"ritual": {
"skillone": "",
"skilltwo": "",
"skillthree": "",
"skillfour": "",
"skillfive": ""
}
},
"cost": {
"value": "",

View File

@ -8,25 +8,25 @@
<label style="margin: auto;">{{localize "BIO.NAME"}}:</label>
<h1 class="charname" style="margin-bottom: 0;grid-column: 3/6;"><input name="name" type="text" value="{{actor.name}}" placeholder="{{localize "BIO.NAME"}}" /></h1>
<label style="margin: auto;">{{localize data.health.label}}:</label>
<label style="margin: auto;">{{localize data.data.health.label}}:</label>
<div class="grid-container" style="grid-template-columns: auto 1fr auto;">
<input class="center-text" type="text" name="data.health.value" value="{{data.health.value}}" data-dtype="Number" />
<input class="center-text" type="text" name="data.health.value" value="{{data.data.health.value}}" data-dtype="Number" />
<span> / </span>
<input class="center-text" type="text" name="data.health.max" value="{{data.health.max}}" data-dtype="Number" />
<input class="center-text" type="text" name="data.health.max" value="{{data.data.health.max}}" data-dtype="Number" />
</div>
<label style="margin: auto;">{{localize data.stamina.label}}:</label>
<label style="margin: auto;">{{localize data.data.stamina.label}}:</label>
<div class="grid-container" style="grid-template-columns: auto 1fr auto;">
<input class="center-text" type="text" name="data.stamina.value" value="{{data.stamina.value}}" data-dtype="Number" />
<input class="center-text" type="text" name="data.stamina.value" value="{{data.data.stamina.value}}" data-dtype="Number" />
<span> / </span>
<input class="center-text" type="text" name="data.stamina.max" value="{{data.stamina.max}}" data-dtype="Number" />
<input class="center-text" type="text" name="data.stamina.max" value="{{data.data.stamina.max}}" data-dtype="Number" />
</div>
<label style="margin: auto;">{{localize data.mana.label}}:</label>
<label style="margin: auto;">{{localize data.data.mana.label}}:</label>
<div class="grid-container" style="grid-template-columns: auto 1fr auto;">
<input class="center-text" type="text" name="data.mana.value" value="{{data.mana.value}}" data-dtype="Number" />
<input class="center-text" type="text" name="data.mana.value" value="{{data.data.mana.value}}" data-dtype="Number" />
<span> / </span>
<input class="center-text" type="text" name="data.mana.max" value="{{data.mana.max}}" data-dtype="Number" />
<input class="center-text" type="text" name="data.mana.max" value="{{data.data.mana.max}}" data-dtype="Number" />
</div>
</div>
@ -44,7 +44,7 @@
{{> systems/kopparhavet/templates/parts/actor/talent.html}}
</div>
<div class="tab border note" data-group="primary" data-tab="note" style="height: 100%; border-top: none;">
{{editor content=data.bio.note.value target="data.bio.note.value" button=true owner=owner editable=editable}}
{{editor content=data.data.bio.note.value target="data.bio.note.value" button=true owner=owner editable=editable}}
</div>
</div>
</div>

View File

@ -8,31 +8,31 @@
<label style="margin: auto;">{{localize "BIO.NAME"}}:</label>
<h1 class="charname" style="margin-bottom: 0;grid-column: 3/6;"><input name="name" type="text" value="{{actor.name}}" placeholder="{{localize "BIO.NAME"}}" /></h1>
<label style="margin: auto;">{{localize data.bio.kin.label}}:</label>
<input name="data.bio.kin.value" type="text" value="{{data.bio.kin.value}}" placeholder="{{localize data.bio.kin.label}}" />
<label style="margin: auto;">{{localize data.data.bio.kin.label}}:</label>
<input name="data.bio.kin.value" type="text" value="{{data.data.bio.kin.value}}" placeholder="{{localize data.data.bio.kin.label}}" />
<label style="margin: auto;">{{localize data.bio.profession.label}}:</label>
<input name="data.bio.profession.value" type="text" value="{{data.bio.profession.value}}" placeholder="{{localize data.bio.profession.label}}" />
<label style="margin: auto;">{{localize data.data.bio.profession.label}}:</label>
<input name="data.bio.profession.value" type="text" value="{{data.data.bio.profession.value}}" placeholder="{{localize data.data.bio.profession.label}}" />
<label style="margin: auto;">{{localize data.health.label}}:</label>
<label style="margin: auto;">{{localize data.data.health.label}}:</label>
<div class="grid-container" style="grid-template-columns: auto 1fr auto;">
<input class="center-text" type="text" name="data.health.value" value="{{data.health.value}}" data-dtype="Number" />
<input class="center-text" type="text" name="data.health.value" value="{{data.data.health.value}}" data-dtype="Number" />
<span> / </span>
<input class="center-text" type="text" name="data.health.max" value="{{data.health.max}}" data-dtype="Number" />
<input class="center-text" type="text" name="data.health.max" value="{{data.data.health.max}}" data-dtype="Number" />
</div>
<label style="margin: auto;">{{localize data.stamina.label}}:</label>
<label style="margin: auto;">{{localize data.data.stamina.label}}:</label>
<div class="grid-container" style="grid-template-columns: auto 1fr auto;">
<input class="center-text" type="text" name="data.stamina.value" value="{{data.stamina.value}}" data-dtype="Number" />
<input class="center-text" type="text" name="data.stamina.value" value="{{data.data.stamina.value}}" data-dtype="Number" />
<span> / </span>
<input class="center-text" type="text" name="data.stamina.max" value="{{data.stamina.max}}" data-dtype="Number" />
<input class="center-text" type="text" name="data.stamina.max" value="{{data.data.stamina.max}}" data-dtype="Number" />
</div>
<label style="margin: auto;">{{localize data.mana.label}}:</label>
<label style="margin: auto;">{{localize data.data.mana.label}}:</label>
<div class="grid-container" style="grid-template-columns: auto 1fr auto;">
<input class="center-text" type="text" name="data.mana.value" value="{{data.mana.value}}" data-dtype="Number" />
<input class="center-text" type="text" name="data.mana.value" value="{{data.data.mana.value}}" data-dtype="Number" />
<span> / </span>
<input class="center-text" type="text" name="data.mana.max" value="{{data.mana.max}}" data-dtype="Number" />
<input class="center-text" type="text" name="data.mana.max" value="{{data.data.mana.max}}" data-dtype="Number" />
</div>
</div>
@ -62,7 +62,7 @@
{{> systems/kopparhavet/templates/parts/actor/bio.html}}
</div>
<div class="tab note border" data-group="primary" data-tab="note" style="border-top: none;">
{{editor content=data.bio.note.value target="data.bio.note.value" button=true owner=owner editable=editable}}
{{editor content=data.data.bio.note.value target="data.bio.note.value" button=true owner=owner editable=editable}}
</div>
</div>
</div>

View File

@ -8,25 +8,25 @@
<label style="margin: auto;">{{localize "BIO.NAME"}}:</label>
<h1 class="charname" style="margin-bottom: 0;grid-column: 3/6;"><input name="name" type="text" value="{{actor.name}}" placeholder="{{localize "BIO.NAME"}}" /></h1>
<label style="margin: auto;">{{localize data.health.label}}:</label>
<label style="margin: auto;">{{localize data.data.health.label}}:</label>
<div class="grid-container" style="grid-template-columns: auto 1fr auto;">
<input class="center-text" type="text" name="data.health.value" value="{{data.health.value}}" data-dtype="Number" />
<input class="center-text" type="text" name="data.health.value" value="{{data.data.health.value}}" data-dtype="Number" />
<span> / </span>
<input class="center-text" type="text" name="data.health.max" value="{{data.health.max}}" data-dtype="Number" />
<input class="center-text" type="text" name="data.health.max" value="{{data.data.health.max}}" data-dtype="Number" />
</div>
<label style="margin: auto;">{{localize data.stamina.label}}:</label>
<label style="margin: auto;">{{localize data.data.stamina.label}}:</label>
<div class="grid-container" style="grid-template-columns: auto 1fr auto;">
<input class="center-text" type="text" name="data.stamina.value" value="{{data.stamina.value}}" data-dtype="Number" />
<input class="center-text" type="text" name="data.stamina.value" value="{{data.data.stamina.value}}" data-dtype="Number" />
<span> / </span>
<input class="center-text" type="text" name="data.stamina.max" value="{{data.stamina.max}}" data-dtype="Number" />
<input class="center-text" type="text" name="data.stamina.max" value="{{data.data.stamina.max}}" data-dtype="Number" />
</div>
<label style="margin: auto;">{{localize data.mana.label}}:</label>
<label style="margin: auto;">{{localize data.data.mana.label}}:</label>
<div class="grid-container" style="grid-template-columns: auto 1fr auto;">
<input class="center-text" type="text" name="data.mana.value" value="{{data.mana.value}}" data-dtype="Number" />
<input class="center-text" type="text" name="data.mana.value" value="{{data.data.mana.value}}" data-dtype="Number" />
<span> / </span>
<input class="center-text" type="text" name="data.mana.max" value="{{data.mana.max}}" data-dtype="Number" />
<input class="center-text" type="text" name="data.mana.max" value="{{data.data.mana.max}}" data-dtype="Number" />
</div>
</div>
@ -44,7 +44,7 @@
{{> systems/kopparhavet/templates/parts/actor/talent.html}}
</div>
<div class="tab border note" data-group="primary" data-tab="note" style="height: 100%; border-top: none;">
{{editor content=data.bio.note.value target="data.bio.note.value" button=true owner=owner editable=editable}}
{{editor content=data.data.bio.note.value target="data.bio.note.value" button=true owner=owner editable=editable}}
</div>
</div>
</div>

View File

@ -8,34 +8,34 @@
<label style="margin: auto;">{{localize "BIO.NAME"}}:</label>
<h1 class="charname" style="margin-bottom: 0; grid-column: 3/6;"><input name="name" type="text" value="{{actor.name}}" placeholder="{{localize "BIO.NAME"}}" /></h1>
<label style="margin: auto;">{{localize data.bio.nickname.label}}:</label>
<input name="data.bio.nickname.value" style="grid-column: 3/6;" type="text" value="{{data.bio.nickname.value}}" placeholder="{{localize data.bio.nickname.label}}" />
<label style="margin: auto;">{{localize data.data.bio.nickname.label}}:</label>
<input name="data.bio.nickname.value" style="grid-column: 3/6;" type="text" value="{{data.data.bio.nickname.value}}" placeholder="{{localize data.data.bio.nickname.label}}" />
<label style="margin: auto;">{{localize data.bio.kin.label}}:</label>
<input name="data.bio.kin.value" type="text" value="{{data.bio.kin.value}}" placeholder="{{localize data.bio.kin.label}}" />
<label style="margin: auto;">{{localize data.data.bio.kin.label}}:</label>
<input name="data.bio.kin.value" type="text" value="{{data.data.bio.kin.value}}" placeholder="{{localize data.data.bio.kin.label}}" />
<label style="margin: auto;">{{localize data.bio.profession.label}}:</label>
<input name="data.bio.profession.value" type="text" value="{{data.bio.profession.value}}" placeholder="{{localize data.bio.profession.label}}" />
<label style="margin: auto;">{{localize data.data.bio.profession.label}}:</label>
<input name="data.bio.profession.value" type="text" value="{{data.data.bio.profession.value}}" placeholder="{{localize data.data.bio.profession.label}}" />
<label style="margin: auto;">{{localize data.health.label}}:</label>
<label style="margin: auto;">{{localize data.data.health.label}}:</label>
<div class="grid-container" style="grid-template-columns: auto 1fr auto;">
<input class="center-text" type="text" name="data.health.value" value="{{data.health.value}}" data-dtype="Number" />
<input class="center-text" type="text" name="data.health.value" value="{{data.data.health.value}}" data-dtype="Number" />
<span> / </span>
<input class="center-text" type="text" name="data.health.max" value="{{data.health.max}}" data-dtype="Number" />
<input class="center-text" type="text" name="data.health.max" value="{{data.data.health.max}}" data-dtype="Number" />
</div>
<label style="margin: auto;">{{localize data.stamina.label}}:</label>
<label style="margin: auto;">{{localize data.data.stamina.label}}:</label>
<div class="grid-container" style="grid-template-columns: auto 1fr auto;">
<input class="center-text" type="text" name="data.stamina.value" value="{{data.stamina.value}}" data-dtype="Number" />
<input class="center-text" type="text" name="data.stamina.value" value="{{data.data.stamina.value}}" data-dtype="Number" />
<span> / </span>
<input class="center-text" type="text" name="data.stamina.max" value="{{data.stamina.max}}" data-dtype="Number" />
<input class="center-text" type="text" name="data.stamina.max" value="{{data.data.stamina.max}}" data-dtype="Number" />
</div>
<label style="margin: auto;">{{localize data.mana.label}}:</label>
<label style="margin: auto;">{{localize data.data.mana.label}}:</label>
<div class="grid-container" style="grid-template-columns: auto 1fr auto;">
<input class="center-text" type="text" name="data.mana.value" value="{{data.mana.value}}" data-dtype="Number" />
<input class="center-text" type="text" name="data.mana.value" value="{{data.data.mana.value}}" data-dtype="Number" />
<span> / </span>
<input class="center-text" type="text" name="data.mana.max" value="{{data.mana.max}}" data-dtype="Number" />
<input class="center-text" type="text" name="data.mana.max" value="{{data.data.mana.max}}" data-dtype="Number" />
</div>
</div>
@ -61,7 +61,7 @@
{{> systems/kopparhavet/templates/parts/actor/gear.html}}
</div>
<div class="tab note border" data-group="primary" data-tab="note" style="border-top: none;">
{{editor content=data.bio.note.value target="data.bio.note.value" button=true owner=owner editable=editable}}
{{editor content=data.data.bio.note.value target="data.bio.note.value" button=true owner=owner editable=editable}}
</div>
</div>
</div>

View File

@ -8,27 +8,27 @@
<label style="margin-top: auto; margin-bottom: auto;">{{localize "BIO.NAME"}}:</label>
<h1 class="charname" style="margin-bottom: 0;grid-column: 3/6;"><input name="name" type="text" value="{{actor.name}}" placeholder="{{localize "BIO.NAME"}}" /></h1>
<label style="margin-top: auto; margin-bottom: auto;">{{localize data.class.label}}:</label>
<span class="charname" style="margin-bottom: 0;grid-column: 3/6;"><input name="data.class.value" type="text" value="{{data.class.value}}" placeholder="{{localize data.class.label}}" /></span>
<label style="margin-top: auto; margin-bottom: auto;">{{localize data.data.class.label}}:</label>
<span class="charname" style="margin-bottom: 0;grid-column: 3/6;"><input name="data.class.value" type="text" value="{{data.data.class.value}}" placeholder="{{localize data.data.class.label}}" /></span>
<label style="margin: auto;">{{localize data.operationscost.label}}:</label>
<input class="center-text" type="text" name="data.operationscost.value" value="{{data.operationscost.value}}" data-dtype="Number" />
<label style="margin: auto;">{{localize data.data.operationscost.label}}:</label>
<input class="center-text" type="text" name="data.operationscost.value" value="{{data.data.operationscost.value}}" data-dtype="Number" />
<label style="margin: auto;">{{localize data.operationssupply.label}}:</label>
<input class="center-text" type="text" name="data.operationssupply.value" value="{{data.operationssupply.value}}" data-dtype="Number" />
<label style="margin: auto;">{{localize data.data.operationssupply.label}}:</label>
<input class="center-text" type="text" name="data.operationssupply.value" value="{{data.data.operationssupply.value}}" data-dtype="Number" />
<label style="margin: auto;">{{localize data.hull.label}}:</label>
<label style="margin: auto;">{{localize data.data.hull.label}}:</label>
<div class="grid-container" style="grid-template-columns: auto 1fr auto;">
<input class="center-text" type="text" name="data.hull.value" value="{{data.hull.value}}" data-dtype="Number" />
<input class="center-text" type="text" name="data.hull.value" value="{{data.data.hull.value}}" data-dtype="Number" />
<span style="margin-bottom: auto; margin-top: auto;"> / </span>
<input class="center-text" type="text" name="data.hull.max" value="{{data.hull.max}}" data-dtype="Number" />
<input class="center-text" type="text" name="data.hull.max" value="{{data.data.hull.max}}" data-dtype="Number" />
</div>
<label style="margin: auto;">{{localize data.cargo.label}}:</label>
<label style="margin: auto;">{{localize data.data.cargo.label}}:</label>
<div class="grid-container" style="grid-template-columns: auto 1fr auto;">
<input class="center-text" type="text" name="data.cargo.value" value="{{data.cargo.value}}" data-dtype="Number" />
<input class="center-text" type="text" name="data.cargo.value" value="{{data.data.cargo.value}}" data-dtype="Number" />
<span style="margin-bottom: auto; margin-top: auto;"> / </span>
<input class="center-text" type="text" name="data.cargo.max" value="{{data.cargo.max}}" data-dtype="Number" />
<input class="center-text" type="text" name="data.cargo.max" value="{{data.data.cargo.max}}" data-dtype="Number" />
</div>
</div>
@ -46,7 +46,7 @@
{{> systems/kopparhavet/templates/parts/actor/ship-combat.html}}
</div>
<div class="tab border note" data-group="primary" data-tab="note" style="height: 100%; border-top: none;">
{{editor content=data.bio.note.value target="data.bio.note.value" button=true owner=owner editable=editable}}
{{editor content=data.data.bio.note.value target="data.bio.note.value" button=true owner=owner editable=editable}}
</div>
</div>
</div>

View File

@ -100,5 +100,19 @@
{{{data.description.value}}}
{{/if}}
{{/if}}
{{#if isShipWeapon}}
{{#if data.description}}
<h5>{{localize data.description.label}}</h5>
{{{data.description.value}}}
{{/if}}
{{/if}}
{{#if isShipTalent}}
{{#if data.description}}
<h5>{{localize data.description.label}}</h5>
{{{data.description.value}}}
{{/if}}
{{/if}}
</div>
</div>

View File

@ -0,0 +1,47 @@
<div class="kopparhavet roll-item">
<div class="border">
<h3>{{localize name}}</h3>
{{#if closed}}
<div style="text-align: center; margin-bottom: 0.5rem;">
{{localize "ROLL.CLOSED"}}: {{closed}}
</div>
{{/if}}
{{#if opened}}
<div style="text-align: center; margin-bottom: 0.5rem;">
{{localize "ROLL.OPENED"}}: {{opened}}
</div>
{{/if}}
<div class="roll" style="padding-bottom: 10px; border-bottom: 1px solid #782e22; margin-bottom: 5px;">
{{#each res as |res1 key|}}
<div class="dice-roll">
<div class="dice-result">
{{#if showFormula}}
<div class="dice-formula-kh">{{res1.result.formula}}</div>
{{/if}}
{{#if res1.success}}
<div style="border: none; text-align: center; width: 100%; font-weight: bold; color: limegreen;">
{{res1.name}}: {{res1.result.total}}
</div>
{{/if}}
{{#if res1.failure}}
<div style="border: none; text-align: center; width: 100%; font-weight: bold; color: darkred;">
{{res1.name}}: {{res1.result.total}}
</div>
{{/if}}
</div>
</div>
{{/each}}
</div>
<h2 style="border: none; text-align: center; width: 100%; font-weight: bold;">
{{#iff result '==' "0"}}{{localize "ROLL.SUBPAR"}}{{/iff}}
{{#iff result '==' "1"}}{{localize "ROLL.LOW"}}{{/iff}}
{{#iff result '==' "2"}}{{localize "ROLL.LIMITED"}}{{/iff}}
{{#iff result '==' "3"}}{{localize "ROLL.GOOD"}}{{/iff}}
{{#iff result '==' "4"}}{{localize "ROLL.SUPERIOR"}}{{/iff}}
</h2>
</div>
</div>

View File

@ -21,6 +21,11 @@
<h2>{{res.total}}</h2>
</div>
</div>
{{#if opposite}}
<div class="dice-roll" style="text-align: center; margin-bottom: 0.5rem;">
{{localize "ROLL.OPPOSITE"}}: {{opposite}}
</div>
{{/if}}
</div>
{{#if success}}
<h2 style="border: none; text-align: center; width: 100%; font-weight: bold; color: limegreen;">

View File

@ -9,17 +9,17 @@
</div>
<div class="grid-container" style="grid-template-columns: 1fr 1fr;">
<div class="rating">
<label>{{localize data.damage.label}}</label>
<input name="data.damage.value" type="text" value="{{data.damage.value}}" />
<label>{{localize data.data.damage.label}}</label>
<input name="data.damage.value" type="text" value="{{data.data.damage.value}}" />
</div>
<div class="rating">
<label>{{localize data.skill.label}}</label>
<input name="data.skill.value" type="text" value="{{data.skill.value}}" />
<label>{{localize data.data.skill.label}}</label>
<input name="data.skill.value" type="text" value="{{data.data.skill.value}}" />
</div>
<div>
<label>{{localize data.category.label}}</label>
<label>{{localize data.data.category.label}}</label>
<select class="item-weapon-cat-select" name="data.category.value">
{{#select data.category.value}}
{{#select data.data.category.value}}
<option value="melee">{{localize "WEAPON.MELEE"}}</option>
<option value="ranged">{{localize "WEAPON.RANGED"}}</option>
{{/select}}
@ -28,10 +28,10 @@
</div>
<div class="item">
<div class="description">
<h2>{{localize data.description.label}}</h2>
<h2>{{localize data.data.description.label}}</h2>
<div class="info">
<div class="description">
{{editor content=data.description.value target="data.description.value" button=true owner=owner editable=editable}}
{{editor content=data.data.description.value target="data.description.value" button=true owner=owner editable=editable}}
</div>
</div>
</div>

View File

@ -10,22 +10,22 @@
<div class="grid-container" style="grid-template-columns: 1fr 1fr;">
<!--
<div class="supply">
<label>{{localize data.quantity.label}}</label>
<input name="data.quantity.value" type="number" value="{{data.quantity.value}}" />
<label>{{localize data.data.quantity.label}}</label>
<input name="data.quantity.value" type="number" value="{{data.data.quantity.value}}" />
</div>
-->
<div class="cost">
<label>{{localize data.price.label}}</label>
<input name="data.price.value" type="text" value="{{data.price.value}}" />
<label>{{localize data.data.price.label}}</label>
<input name="data.price.value" type="text" value="{{data.data.price.value}}" />
</div>
<div class="rating">
<label>{{localize data.defence.label}}</label>
<input name="data.defence.value" type="text" value="{{data.defence.value}}" />
<label>{{localize data.data.defence.label}}</label>
<input name="data.defence.value" type="text" value="{{data.data.defence.value}}" />
</div>
<div>
<label>{{localize data.type.label}}</label>
<label>{{localize data.data.type.label}}</label>
<select class="item-weapon-cat-select" name="data.type.value">
{{#select data.type.value}}
{{#select data.data.type.value}}
{{#each this.KH.armor_types as |t|}}
<option value="{{t.value}}">{{localize t.label}}</option>
{{/each}}
@ -34,14 +34,14 @@
</div>
<div class="grid-container" style="grid-template-columns: 1fr auto;">
<!--
<label>{{localize data.equipable.label}}</label>
<a class="item-bool-click {{#if data.equipable.value}}active{{/if}}" data-name="equipable" title="equipable">
<i class="far {{#if data.equipable.value}}fa-times-circle{{else}}fa-circle{{/if}}"></i>
<label>{{localize data.data.equipable.label}}</label>
<a class="item-bool-click {{#if data.data.equipable.value}}active{{/if}}" data-name="equipable" title="equipable">
<i class="far {{#if data.data.equipable.value}}fa-times-circle{{else}}fa-circle{{/if}}"></i>
</a>
-->
<label>{{localize data.helmet.label}}</label>
<a class="item-bool-click {{#if data.helmet.value}}active{{/if}}" data-name="helmet" title="helmet">
<i class="far {{#if data.helmet.value}}fa-times-circle{{else}}fa-circle{{/if}}"></i>
<label>{{localize data.data.helmet.label}}</label>
<a class="item-bool-click {{#if data.data.helmet.value}}active{{/if}}" data-name="helmet" title="helmet">
<i class="far {{#if data.data.helmet.value}}fa-times-circle{{else}}fa-circle{{/if}}"></i>
</a>
</div>
</div>
@ -55,10 +55,10 @@
<div class="tab scroll-y" data-group="primary" data-tab="description">
<div class="item">
<div class="description">
<h2>{{localize data.description.label}}</h2>
<h2>{{localize data.data.description.label}}</h2>
<div class="info">
<div class="description">
{{editor content=data.description.value target="data.description.value" button=true owner=owner editable=editable}}
{{editor content=data.data.description.value target="data.description.value" button=true owner=owner editable=editable}}
</div>
</div>
</div>

View File

@ -8,21 +8,21 @@
</div>
<div class="grid-container" style="grid-template-columns: 1fr 1fr;">
<div class="supply">
<label>{{localize data.quantity.label}}</label>
<input name="data.quantity.value" type="number" value="{{data.quantity.value}}" />
<label>{{localize data.data.quantity.label}}</label>
<input name="data.quantity.value" type="number" value="{{data.data.quantity.value}}" />
</div>
<div class="cost">
<label>{{localize data.price.label}}</label>
<input name="data.price.value" type="text" value="{{data.price.value}}" />
<label>{{localize data.data.price.label}}</label>
<input name="data.price.value" type="text" value="{{data.data.price.value}}" />
</div>
</div>
</div>
<div class="item">
<div class="description">
<h2>{{localize data.description.label}}</h2>
<h2>{{localize data.data.description.label}}</h2>
<div class="info-mid">
<div class="description">
{{editor content=data.description.value target="data.description.value" button=true owner=owner editable=editable}}
{{editor content=data.data.description.value target="data.description.value" button=true owner=owner editable=editable}}
</div>
</div>
</div>

View File

@ -9,10 +9,10 @@
</div>
<div class="item">
<div class="talent-description">
<h2>{{localize data.description.label}}</h2>
<h2>{{localize data.data.description.label}}</h2>
<div class="info-mid">
<div class="description">
{{editor content=data.description.value target="data.description.value" button=true owner=owner editable=editable}}
{{editor content=data.data.description.value target="data.description.value" button=true owner=owner editable=editable}}
</div>
</div>
</div>

View File

@ -9,17 +9,17 @@
</div>
<div class="grid-container" style="grid-template-columns: 1fr 1fr;">
<div class="cost">
<label>{{localize data.price.label}}</label>
<input name="data.price.value" type="text" value="{{data.price.value}}" />
<label>{{localize data.data.price.label}}</label>
<input name="data.price.value" type="text" value="{{data.data.price.value}}" />
</div>
<div class="rating">
<label>{{localize data.damage.label}}</label>
<input name="data.damage.value" type="text" value="{{data.damage.value}}" />
<label>{{localize data.data.damage.label}}</label>
<input name="data.damage.value" type="text" value="{{data.data.damage.value}}" />
</div>
<div>
<label>{{localize "ITEM.SKILL"}}</label>
<select class="item-weapon-skill-select" name="data.skill.value">
{{#select data.skill.value}}
{{#select data.data.skill.value}}
{{#each this.khskills as |t|}}
<option value="{{t.name}}">{{t.name}}</option>
{{/each}}
@ -29,10 +29,10 @@
</div>
<div class="item">
<div class="description">
<h2>{{localize data.description.label}}</h2>
<h2>{{localize data.data.description.label}}</h2>
<div class="info">
<div class="description">
{{editor content=data.description.value target="data.description.value" button=true owner=owner editable=editable}}
{{editor content=data.data.description.value target="data.description.value" button=true owner=owner editable=editable}}
</div>
</div>
</div>

View File

@ -9,9 +9,9 @@
</div>
<div class="grid-container" style="grid-template-columns: 1fr 1fr;">
<div>
<label>{{localize data.type.label}}</label>
<label>{{localize data.data.type.label}}</label>
<select class="item-weapon-cat-select" name="data.type.value">
{{#select data.type.value}}
{{#select data.data.type.value}}
<option value="base">{{localize "SKILL.BASE"}}</option>
<option value="adventure">{{localize "SKILL.ADVENTURE"}}</option>
<option value="combat">{{localize "SKILL.COMBAT"}}</option>
@ -20,15 +20,15 @@
</div>
<div>
<label>{{localize "SKILL.STARTVALUE"}}</label>
<input name="data.value" type="text" value="{{data.value}}" />
<input name="data.value" type="text" value="{{data.data.value}}" />
</div>
</div>
<div class="item">
<div class="description">
<h2>{{localize data.description.label}}</h2>
<h2>{{localize data.data.description.label}}</h2>
<div class="info-mid">
<div class="description">
{{editor content=data.description.value target="data.description.value" button=true owner=owner editable=editable}}
{{editor content=data.data.description.value target="data.description.value" button=true owner=owner editable=editable}}
</div>
</div>
</div>

View File

@ -9,13 +9,13 @@
</div>
<div class="grid-container" style="grid-template-columns: 1fr 1fr;">
<div class="cost">
<label>{{localize data.cost.label}}</label>
<input name="data.cost.value" type="text" value="{{data.cost.value}}" />
<label>{{localize data.data.cost.label}}</label>
<input name="data.cost.value" type="text" value="{{data.data.cost.value}}" />
</div>
<div>
<label>{{localize data.difficulty.label}}</label>
<select class="item-weapon-cat-select" name="data.difficulty.value">
{{#select data.difficulty.value}}
<label>{{localize data.data.difficulty.label}}</label>
<select class="item-weapon-cat-select" name="data.data.difficulty.value">
{{#select data.data.difficulty.value}}
<option value="simple">{{localize "DIFFICULTY.SIMPLE"}}</option>
<option value="easy">{{localize "DIFFICULTY.EASY"}}</option>
<option value="average">{{localize "DIFFICULTY.AVERAGE"}}</option>
@ -25,9 +25,9 @@
</select>
</div>
<div style="grid-column-start: 1; grid-column-end: 3;">
<label>{{localize data.roll.label}}</label>
<label>{{localize data.data.roll.label}}</label>
<select class="item-weapon-cat-select" name="data.roll.value">
{{#select data.roll.value}}
{{#select data.data.roll.value}}
<option value="roll">{{localize "SPELL.ROLL"}}</option>
<option value="attackroll">{{localize "SPELL.ATTACKROLL"}}</option>
<option value="opposite">{{localize "SPELL.OPPOSITE"}}</option>
@ -35,23 +35,114 @@
{{/select}}
</select>
</div>
<div style="grid-column-start: 1; grid-column-end: 3;">
<label>{{localize "ITEM.SKILL"}}</label>
<select class="item-weapon-skill-select" name="data.roll.skill">
{{#select data.roll.skill}}
{{#each this.khskills as |t|}}
<option value="{{t.name}}">{{t.name}}</option>
{{/each}}
{{/select}}
</select>
</div>
{{#iff data.data.roll.value '==' "opposite" }}
<div>
<label>{{localize "ITEM.SKILL"}}</label>
<select class="item-weapon-skill-select" name="data.roll.skill">
{{#select data.data.roll.skill}}
{{#each this.khskills as |t|}}
<option value="{{t.name}}">{{t.name}}</option>
{{/each}}
{{/select}}
</select>
</div>
<div>
<label>{{localize "ITEM.SKILL"}}</label>
<select class="item-weapon-skill-select" name="data.roll.oppositeskill">
{{#select data.data.roll.oppositeskill}}
{{#each this.khskills as |t|}}
<option value="{{t.name}}">{{t.name}}</option>
{{/each}}
{{/select}}
</select>
</div>
<div>&nbsp;</div>
<div>
<label>{{localize "ITEM.SKILL"}}</label>
<select class="item-weapon-skill-select" name="data.roll.oppositeskilltwo">
{{#select data.data.roll.oppositeskilltwo}}
<option value="">{{localize "SKILL.NONE"}}</option>
{{#each this.khskills as |t|}}
<option value="{{t.name}}">{{t.name}}</option>
{{/each}}
{{/select}}
</select>
</div>
{{else iff data.data.roll.value '==' "ritual" }}
<div>
<label>{{localize "ITEM.SKILL"}}</label>
<select class="item-weapon-skill-select" name="data.roll.ritual.skillone">
{{#select data.data.roll.ritual.skillone}}
<option value="">{{localize "SKILL.NONE"}}</option>
{{#each this.khskills as |t|}}
<option value="{{t.name}}">{{t.name}}</option>
{{/each}}
{{/select}}
</select>
</div>
<div>
<label>{{localize "ITEM.SKILL"}}</label>
<select class="item-weapon-skill-select" name="data.roll.ritual.skilltwo">
{{#select data.data.roll.ritual.skilltwo}}
<option value="">{{localize "SKILL.NONE"}}</option>
{{#each this.khskills as |t|}}
<option value="{{t.name}}">{{t.name}}</option>
{{/each}}
{{/select}}
</select>
</div>
<div>
<label>{{localize "ITEM.SKILL"}}</label>
<select class="item-weapon-skill-select" name="data.roll.ritual.skillthree">
{{#select data.data.roll.ritual.skillthree}}
<option value="">{{localize "SKILL.NONE"}}</option>
{{#each this.khskills as |t|}}
<option value="{{t.name}}">{{t.name}}</option>
{{/each}}
{{/select}}
</select>
</div>
<div>
<label>{{localize "ITEM.SKILL"}}</label>
<select class="item-weapon-skill-select" name="data.roll.ritual.skillfour">
{{#select data.data.roll.ritual.skillfour}}
<option value="">{{localize "SKILL.NONE"}}</option>
{{#each this.khskills as |t|}}
<option value="{{t.name}}">{{t.name}}</option>
{{/each}}
{{/select}}
</select>
</div>
<div>
<label>{{localize "ITEM.SKILL"}}</label>
<select class="item-weapon-skill-select" name="data.roll.ritual.skillfive">
{{#select data.data.roll.ritual.skillfive}}
<option value="">{{localize "SKILL.NONE"}}</option>
{{#each this.khskills as |t|}}
<option value="{{t.name}}">{{t.name}}</option>
{{/each}}
{{/select}}
</select>
</div>
{{else}}
<div style="grid-column-start: 1; grid-column-end: 3;">
<label>{{localize "ITEM.SKILL"}}</label>
<select class="item-weapon-skill-select" name="data.roll.skill">
{{#select data.data.roll.skill}}
{{#each this.khskills as |t|}}
<option value="{{t.name}}">{{t.name}}</option>
{{/each}}
{{/select}}
</select>
</div>
{{/iff}}
</div>
<div class="item">
<div class="description">
<h2>{{localize data.description.label}}</h2>
<h2>{{localize data.data.description.label}}</h2>
<div class="info">
<div class="description">
{{editor content=data.description.value target="data.description.value" button=true owner=owner editable=editable}}
{{editor content=data.data.description.value target="data.description.value" button=true owner=owner editable=editable}}
</div>
</div>
</div>

View File

@ -9,10 +9,10 @@
</div>
<div class="item">
<div class="talent-description">
<h2>{{localize data.description.label}}</h2>
<h2>{{localize data.data.description.label}}</h2>
<div class="info-mid">
<div class="description">
{{editor content=data.description.value target="data.description.value" button=true owner=owner editable=editable}}
{{editor content=data.data.description.value target="data.description.value" button=true owner=owner editable=editable}}
</div>
</div>
</div>

View File

@ -10,22 +10,22 @@
<div class="grid-container" style="grid-template-columns: 1fr 1fr;">
<!--
<div class="supply">
<label>{{localize data.quantity.label}}</label>
<input name="data.quantity.value" type="number" value="{{data.quantity.value}}" />
<label>{{localize data.data.quantity.label}}</label>
<input name="data.quantity.value" type="number" value="{{data.data.quantity.value}}" />
</div>
-->
<div class="cost">
<label>{{localize data.price.label}}</label>
<input name="data.price.value" type="text" value="{{data.price.value}}" />
<label>{{localize data.data.price.label}}</label>
<input name="data.price.value" type="text" value="{{data.data.price.value}}" />
</div>
<div class="rating">
<label>{{localize data.damage.label}}</label>
<input name="data.damage.value" type="text" value="{{data.damage.value}}" />
<label>{{localize data.data.damage.label}}</label>
<input name="data.damage.value" type="text" value="{{data.data.damage.value}}" />
</div>
<div>
<label>{{localize data.category.label}}</label>
<label>{{localize data.data.category.label}}</label>
<select class="item-weapon-cat-select" name="data.category.value">
{{#select data.category.value}}
{{#select data.data.category.value}}
<option value="melee">{{localize "WEAPON.MELEE"}}</option>
<option value="ranged">{{localize "WEAPON.RANGED"}}</option>
{{/select}}
@ -34,7 +34,7 @@
<div>
<label>{{localize "ITEM.SKILL"}}</label>
<select class="item-weapon-skill-select" name="data.skill.value">
{{#select data.skill.value}}
{{#select data.data.skill.value}}
{{#each this.khskills as |t|}}
<option value="{{t.name}}">{{t.name}}</option>
{{/each}}
@ -43,19 +43,19 @@
</div>
<!--
<div class="grid-container" style="grid-template-columns: 1fr auto;">
<label>{{localize data.equipable.label}}</label>
<a class="item-bool-click {{#if data.equipable.value}}active{{/if}}" data-name="equipable" title="equipable">
<i class="far {{#if data.equipable.value}}fa-times-circle{{else}}fa-circle{{/if}}"></i>
<label>{{localize data.data.equipable.label}}</label>
<a class="item-bool-click {{#if data.data.equipable.value}}active{{/if}}" data-name="equipable" title="equipable">
<i class="far {{#if data.data.equipable.value}}fa-times-circle{{else}}fa-circle{{/if}}"></i>
</a>
</div>
-->
</div>
<div class="item">
<div class="description">
<h2>{{localize data.description.label}}</h2>
<h2>{{localize data.data.description.label}}</h2>
<div class="info">
<div class="description">
{{editor content=data.description.value target="data.description.value" button=true owner=owner editable=editable}}
{{editor content=data.data.description.value target="data.description.value" button=true owner=owner editable=editable}}
</div>
</div>
</div>

View File

@ -2,30 +2,30 @@
<div class="bio-background grid-container" style="height: 100%; grid-column-gap: 5px; grid-template-rows: auto auto auto 1fr; grid-template-columns: auto 1fr auto 1fr;">
<h1>{{localize "BACKGROUND.TITLE"}}</h1>
<div class="name">{{localize data.bio.age.label}}:</div>
<input name="data.bio.age.value" type="text" value="{{data.bio.age.value}}" />
<div class="name">{{localize data.data.bio.age.label}}:</div>
<input name="data.bio.age.value" type="text" value="{{data.data.bio.age.value}}" />
<div class="name">{{localize data.background.birthplace.label}}</div>
<input name="data.background.birthplace.value" type="text" value="{{data.background.birthplace.value}}" />
<div class="name">{{localize data.data.background.birthplace.label}}</div>
<input name="data.background.birthplace.value" type="text" value="{{data.data.background.birthplace.value}}" />
<div class="name">{{localize data.background.social.label}}</div>
<input name="data.background.social.value" type="text" value="{{data.background.social.value}}" />
<div class="name">{{localize data.data.background.social.label}}</div>
<input name="data.background.social.value" type="text" value="{{data.data.background.social.value}}" />
<div></div>
<div></div>
<div class="name-top">{{localize data.background.events.label}}</div>
<div class="name-top">{{localize data.data.background.events.label}}</div>
<div class="info-bio border-thin" style="/*grid-row: 4/6; grid-column: 2;*/">
<div class="description">
{{editor content=data.background.events.value target="data.background.events.value" button=true owner=owner editable=editable}}
{{editor content=data.data.background.events.value target="data.background.events.value" button=true owner=owner editable=editable}}
</div>
</div>
<div class="name-top">{{localize data.background.contacts.label}}</div>
<div class="name-top">{{localize data.data.background.contacts.label}}</div>
<div class="info-bio border-thin" style="/*grid-row: 4/6; grid-column: 4;*/">
<div class="description">
{{editor content=data.background.contacts.value target="data.background.contacts.value" button=true owner=owner editable=editable}}
{{editor content=data.data.background.contacts.value target="data.background.contacts.value" button=true owner=owner editable=editable}}
</div>
</div>
</div>

View File

@ -4,25 +4,25 @@
<ul class="items-list">
<li class="item-nor flexrow">
<div class="item-name" style="flex-grow: 8;">{{localize "MOD.INIT"}}</div>
<div class="item-value" style="flex: none;"><input name="data.combat.init" class="skill-value" type="number" value="{{data.combat.init}}" data-dtype="Number" /></div>
<div class="item-value" style="flex: none;"><input name="data.combat.init" class="skill-value" type="number" value="{{data.data.combat.init}}" data-dtype="Number" /></div>
</li>
<li class="item-defence flexrow" data-defence="{{data.combat.defence}}">
<div class="item-name roll-defence rollable" data-defence="{{data.combat.defence}}" style="flex-grow: 8;">{{localize "ADVERSARY.DEFENCE"}}</div>
<div class="item-value" style="flex: none;"><input name="data.combat.defence" class="skill-value" type="text" value="{{data.combat.defence}}" /></div>
<li class="item-defence flexrow" data-defence="{{data.data.combat.defence}}">
<div class="item-name roll-defence rollable" data-defence="{{data.data.combat.defence}}" style="flex-grow: 8;">{{localize "ADVERSARY.DEFENCE"}}</div>
<div class="item-value" style="flex: none;"><input name="data.combat.defence" class="skill-value" type="text" value="{{data.data.combat.defence}}" /></div>
</li>
<li class="item-nor flexrow">
<div class="item-name" style="flex-grow: 8;">{{localize "ADVERSARY.HASHELMET"}}</div>
<div style="align-self: flex-end">
<a style="margin: auto;" class="adversary-helmet-click {{#if data.combat.helmet}}active{{/if}}">
<i class="far {{#if data.combat.helmet}}fa-times-circle{{else}}fa-circle{{/if}}"></i>
<a style="margin: auto;" class="adversary-helmet-click {{#if data.data.combat.helmet}}active{{/if}}">
<i class="far {{#if data.data.combat.helmet}}fa-times-circle{{else}}fa-circle{{/if}}"></i>
</a>
</div>
</li>
<li class="item-nor flexrow">
<div class="item-name roll-adversary-armor rollable" data-armor="{{data.combat.armor}}" style="flex-grow: 8;">{{localize "ITEM.DEFENCE"}}</div>
<div class="item-value" style="flex: none;"><input name="data.combat.armor" class="skill-value" type="text" value="{{data.combat.armor}}" /></div>
<div class="item-name roll-adversary-armor rollable" data-armor="{{data.data.combat.armor}}" style="flex-grow: 8;">{{localize "ITEM.DEFENCE"}}</div>
<div class="item-value" style="flex: none;"><input name="data.combat.armor" class="skill-value" type="text" value="{{data.data.combat.armor}}" /></div>
</li>
</ul>
</ul>
@ -35,7 +35,7 @@
{{#each actor.skills as |skill key|}}
<li class="item-skill flexrow" data-item-id="{{skill._id}}">
<div class="item-name roll-skill rollable" style="flex-grow: 8;">{{skill.name}}</div>
<div class="item-value" style="flex: none;"><input class="skill-value" type="number" value="{{skill.data.value}}" min="0" data-item-id="{{skill._id}}" data-dtype="Number" /></div>
<div class="item-value" style="flex: none;"><input class="skill-value" type="number" value="{{skill.data.value}}" min="0" data-item-id="{{skill.id}}" data-dtype="Number" /></div>
<div class="item-controls">
<a class="item-control item-delete" data-parent=".item-skill" title="Delete Item"><i class="fas fa-trash"></i></a>
</div>

View File

@ -2,10 +2,10 @@
<div class="currencies border">
<div class="header grid-container" style="grid-template-columns: auto 1fr auto 1fr;">
<h1 style="margin-bottom: 0; grid-column: 1/5;">{{localize "CURRENCY.TITLE"}}</h1>
<label style="margin: auto;">{{localize data.currency.shekel.label}}:</label>
<input class="center-text" name="data.currency.shekel.value" type="number" value="{{data.currency.shekel.value}}" />
<label style="margin: auto;">{{localize data.currency.quarter.label}}:</label>
<input class="center-text" name="data.currency.quarter.value" type="number" value="{{data.currency.quarter.value}}" />
<label style="margin: auto;">{{localize data.data.currency.shekel.label}}:</label>
<input class="center-text" name="data.currency.shekel.value" type="number" value="{{data.data.currency.shekel.value}}" />
<label style="margin: auto;">{{localize data.data.currency.quarter.label}}:</label>
<input class="center-text" name="data.currency.quarter.value" type="number" value="{{data.data.currency.quarter.value}}" />
</div>
</div>
<div class="gear border scroll-y">

View File

@ -4,17 +4,17 @@
<ul class="items-list">
<li class="item-nor flexrow">
<div class="item-name" style="flex-grow: 8;">{{localize "MOD.INIT"}}</div>
<div class="item-value" style="flex: none;"><input name="data.combat.init" class="skill-value" type="number" value="{{data.combat.init}}" data-dtype="Number" /></div>
<div class="item-value" style="flex: none;"><input name="data.combat.init" class="skill-value" type="number" value="{{data.data.combat.init}}" data-dtype="Number" /></div>
</li>
<li class="item-defence flexrow" data-defence="{{data.combat.defence}}">
<div class="item-name roll-defence rollable" data-defence="{{data.combat.defence}}" style="flex-grow: 8;">{{localize "ADVERSARY.DEFENCE"}}</div>
<div class="item-value" style="flex: none;"><input name="data.combat.defence" class="skill-value" type="text" value="{{data.combat.defence}}" /></div>
<li class="item-defence flexrow" data-defence="{{data.data.combat.defence}}">
<div class="item-name roll-defence rollable" data-defence="{{data.data.combat.defence}}" style="flex-grow: 8;">{{localize "ADVERSARY.DEFENCE"}}</div>
<div class="item-value" style="flex: none;"><input name="data.combat.defence" class="skill-value" type="text" value="{{data.data.combat.defence}}" /></div>
</li>
<li class="item-nor flexrow">
<div class="item-name roll-adversary-armor rollable" data-armor="{{data.combat.armor}}" style="flex-grow: 8;">{{localize "ITEM.DEFENCE"}}</div>
<div class="item-value" style="flex: none;"><input name="data.combat.armor" class="skill-value" type="text" value="{{data.combat.armor}}" /></div>
<div class="item-name roll-adversary-armor rollable" data-armor="{{data.data.combat.armor}}" style="flex-grow: 8;">{{localize "ITEM.DEFENCE"}}</div>
<div class="item-value" style="flex: none;"><input name="data.combat.armor" class="skill-value" type="text" value="{{data.data.combat.armor}}" /></div>
</li>
</ul>
</ul>

View File

@ -1,32 +1,32 @@
<div class="bio-tab border scroll-y" style="height: 100%; border-top: none;">
<div class="grid-container" style="height: fit-content; border-top: none; grid-template-rows: 1fr auto auto; grid-template-columns: 1fr 1fr;">
<div class="border grid-container" style="height: 100%; grid-row: 1/4; grid-template-rows: auto 1fr; height: fit-content; min-height: 200px;">
<h2 style="margin-bottom: 0;">{{localize data.bio.appearance.label}}</h2>
<h2 style="margin-bottom: 0;">{{localize data.data.bio.appearance.label}}</h2>
<div class="description">
{{editor content=data.bio.appearance.value target="data.bio.appearance.value" button=true owner=owner editable=editable}}
{{editor content=data.data.bio.appearance.value target="data.bio.appearance.value" button=true owner=owner editable=editable}}
</div>
</div>
<div class="border grid-container" style="grid-column-gap: 5px; grid-template-columns: 1fr auto; max-height: 163px;">
<h2 style="margin-bottom: 0; grid-column: 1/3;">{{localize "HT.FEATURES.TITLE"}}</h2>
<input name="data.feature.one.label" class="roll-feature" type="text" value="{{data.feature.one.label}}" />
<a style="margin: auto;" class="feature {{#if data.feature.one.value}}active{{/if}}" data-feature="one">
<i class="far {{#if data.feature.one.value}}fa-times-circle{{else}}fa-circle{{/if}}"></i>
<input name="data.feature.one.label" class="roll-feature" type="text" value="{{data.data.feature.one.label}}" />
<a style="margin: auto;" class="feature {{#if data.data.feature.one.value}}active{{/if}}" data-feature="one">
<i class="far {{#if data.data.feature.one.value}}fa-times-circle{{else}}fa-circle{{/if}}"></i>
</a>
<input name="data.feature.two.label" class="roll-feature" type="text" value="{{data.feature.two.label}}" />
<a style="margin: auto;" class="feature {{#if data.feature.two.value}}active{{/if}}" data-feature="two">
<i class="far {{#if data.feature.two.value}}fa-times-circle{{else}}fa-circle{{/if}}"></i>
<input name="data.feature.two.label" class="roll-feature" type="text" value="{{data.data.feature.two.label}}" />
<a style="margin: auto;" class="feature {{#if data.data.feature.two.value}}active{{/if}}" data-feature="two">
<i class="far {{#if data.data.feature.two.value}}fa-times-circle{{else}}fa-circle{{/if}}"></i>
</a>
<input name="data.feature.three.label" class="roll-feature" type="text" value="{{data.feature.three.label}}" />
<a style="margin: auto;" class="feature {{#if data.feature.three.value}}active{{/if}}" data-feature="three">
<i class="far {{#if data.feature.three.value}}fa-times-circle{{else}}fa-circle{{/if}}"></i>
<input name="data.feature.three.label" class="roll-feature" type="text" value="{{data.data.feature.three.label}}" />
<a style="margin: auto;" class="feature {{#if data.data.feature.three.value}}active{{/if}}" data-feature="three">
<i class="far {{#if data.data.feature.three.value}}fa-times-circle{{else}}fa-circle{{/if}}"></i>
</a>
<input name="data.feature.four.label" class="roll-feature" type="text" value="{{data.feature.four.label}}" />
<a style="margin: auto;" class="feature {{#if data.feature.four.value}}active{{/if}}" data-feature="four">
<i class="far {{#if data.feature.four.value}}fa-times-circle{{else}}fa-circle{{/if}}"></i>
<input name="data.feature.four.label" class="roll-feature" type="text" value="{{data.data.feature.four.label}}" />
<a style="margin: auto;" class="feature {{#if data.data.feature.four.value}}active{{/if}}" data-feature="four">
<i class="far {{#if data.data.feature.four.value}}fa-times-circle{{else}}fa-circle{{/if}}"></i>
</a>
</div>
<div class="border">
@ -38,7 +38,7 @@
</h2>
</header>
<ol class="relation-list" style="padding: 0;">
{{#each data.relationships as |attr key|}}
{{#each data.data.relationships as |attr key|}}
<li class="relation grid-container" style="grid-template-columns: 2fr auto auto;" data-attribute="{{key}}">
<input class="relation-key" type="text" name="data.relationships.{{key}}.key" value="{{key}}" style="display: none;" />
<input class="relation-value" type="text" name="data.relationships.{{key}}.value" value="{{attr.value}}" />
@ -59,7 +59,7 @@
</h2>
</header>
<ol class="learning-list" style="padding: 0;">
{{#each data.learning as |attr key|}}
{{#each data.data.learning as |attr key|}}
<li class="learning grid-container" style="grid-template-columns: 2fr auto auto;" data-attribute="{{key}}">
<input class="learning-key" type="text" name="data.learning.{{key}}.key" value="{{key}}" style="display: none;" />
<input style="margin-top: auto; margin-bottom: auto;" class="learning-value" type="text" name="data.learning.{{key}}.value" value="{{attr.value}}" />
@ -90,7 +90,7 @@
</a>
</div>
<a style="margin: auto;" class="learning-control" data-action="delete"><i class="fas fa-trash"></i></a>
<a style="margin: auto;" class="learning-delete" data-action="delete"><i class="fas fa-trash"></i></a>
</li>
{{/each}}
</ol>

View File

@ -40,7 +40,7 @@
</ul>
</div>
<div class="skills border grid-container" style="grid-column-gap: 5px; grid-template-columns: 1fr;">
<h1 style="grid-column: unset;">{{localize data.languages.label}}</h1>
<input name="data.languages.value" type="text" value="{{data.languages.value}}" />
<h1 style="grid-column: unset;">{{localize data.data.languages.label}}</h1>
<input name="data.languages.value" type="text" value="{{data.data.languages.value}}" />
</div>
</div>

View File

@ -1,32 +1,32 @@
<div class="bio-tab border scroll-y" style="height: 100%; border-top: none;">
<div class="grid-container" style="height: fit-content; border-top: none; grid-template-rows: 1fr auto; grid-template-columns: 1fr 1fr;">
<div class="border grid-container" style="height: 100%; grid-row: 1/4; grid-template-rows: auto 1fr; height: fit-content; min-height: 200px;">
<h2 style="margin-bottom: 0;">{{localize data.bio.appearance.label}}</h2>
<h2 style="margin-bottom: 0;">{{localize data.data.bio.appearance.label}}</h2>
<div class="description">
{{editor content=data.bio.appearance.value target="data.bio.appearance.value" button=true owner=owner editable=editable}}
{{editor content=data.data.bio.appearance.value target="data.bio.appearance.value" button=true owner=owner editable=editable}}
</div>
</div>
<div class="border grid-container" style="grid-column-gap: 5px; grid-template-columns: 1fr auto; max-height: 163px;">
<h2 style="margin-bottom: 0; grid-column: 1/3;">{{localize "FEATURES.TITLE"}}</h2>
<input name="data.feature.one.label" class="roll-feature" type="text" value="{{data.feature.one.label}}" />
<a style="margin: auto;" class="feature {{#if data.feature.one.value}}active{{/if}}" data-feature="one">
<i class="far {{#if data.feature.one.value}}fa-times-circle{{else}}fa-circle{{/if}}"></i>
<input name="data.feature.one.label" class="roll-feature" type="text" value="{{data.data.feature.one.label}}" />
<a style="margin: auto;" class="feature {{#if data.data.feature.one.value}}active{{/if}}" data-feature="one">
<i class="far {{#if data.data.feature.one.value}}fa-times-circle{{else}}fa-circle{{/if}}"></i>
</a>
<input name="data.feature.two.label" class="roll-feature" type="text" value="{{data.feature.two.label}}" />
<a style="margin: auto;" class="feature {{#if data.feature.two.value}}active{{/if}}" data-feature="two">
<i class="far {{#if data.feature.two.value}}fa-times-circle{{else}}fa-circle{{/if}}"></i>
<input name="data.feature.two.label" class="roll-feature" type="text" value="{{data.data.feature.two.label}}" />
<a style="margin: auto;" class="feature {{#if data.data.feature.two.value}}active{{/if}}" data-feature="two">
<i class="far {{#if data.data.feature.two.value}}fa-times-circle{{else}}fa-circle{{/if}}"></i>
</a>
<input name="data.feature.three.label" class="roll-feature" type="text" value="{{data.feature.three.label}}" />
<a style="margin: auto;" class="feature {{#if data.feature.three.value}}active{{/if}}" data-feature="three">
<i class="far {{#if data.feature.three.value}}fa-times-circle{{else}}fa-circle{{/if}}"></i>
<input name="data.feature.three.label" class="roll-feature" type="text" value="{{data.data.feature.three.label}}" />
<a style="margin: auto;" class="feature {{#if data.data.feature.three.value}}active{{/if}}" data-feature="three">
<i class="far {{#if data.data.feature.three.value}}fa-times-circle{{else}}fa-circle{{/if}}"></i>
</a>
<input name="data.feature.four.label" class="roll-feature" type="text" value="{{data.feature.four.label}}" />
<a style="margin: auto;" class="feature {{#if data.feature.four.value}}active{{/if}}" data-feature="four">
<i class="far {{#if data.feature.four.value}}fa-times-circle{{else}}fa-circle{{/if}}"></i>
<input name="data.feature.four.label" class="roll-feature" type="text" value="{{data.data.feature.four.label}}" />
<a style="margin: auto;" class="feature {{#if data.data.feature.four.value}}active{{/if}}" data-feature="four">
<i class="far {{#if data.data.feature.four.value}}fa-times-circle{{else}}fa-circle{{/if}}"></i>
</a>
</div>
<div class="border">
@ -38,7 +38,7 @@
</h2>
</header>
<ol class="learning-list" style="padding: 0;">
{{#each data.learning as |attr key|}}
{{#each data.data.learning as |attr key|}}
<li class="learning grid-container" style="grid-template-columns: 2fr auto auto;" data-attribute="{{key}}">
<input class="learning-key" type="text" name="data.learning.{{key}}.key" value="{{key}}" style="display: none;" />
<input style="margin-top: auto; margin-bottom: auto;" class="learning-value" type="text" name="data.learning.{{key}}.value" value="{{attr.value}}" />
@ -69,7 +69,7 @@
</a>
</div>
<a style="margin: auto;" class="learning-control" data-action="delete"><i class="fas fa-trash"></i></a>
<a style="margin: auto;" class="learning-delete" data-action="delete"><i class="fas fa-trash"></i></a>
</li>
{{/each}}
</ol>

View File

@ -1,10 +1,8 @@
WEAPONS
<div class="bio-tab border scroll-y" style="height: 100%; border-top: none;">
<div class="grid-container" style="height: fit-content; border-top: none; grid-template-rows: 1fr auto; grid-template-columns: 1fr 1fr;">
<div class="border grid-container" style="grid-column-gap: 5px; grid-template-columns: auto 1fr; max-height: 163px; height: fit-content;">
<label style="margin-top: auto; margin-bottom: auto;">{{localize data.rammingdmg.label}}:</label>
<input style="text-align: center;" name="data.rammingdmg.value" type="text" value="{{data.rammingdmg.value}}" placeholder="{{localize data.rammingdmg.label}}" />
<label style="margin-top: auto; margin-bottom: auto;">{{localize data.data.rammingdmg.label}}:</label>
<input style="text-align: center;" name="data.rammingdmg.value" type="text" value="{{data.data.rammingdmg.value}}" placeholder="{{localize data.data.rammingdmg.label}}" />
</div>

View File

@ -1,14 +1,14 @@
<div class="bio-tab border scroll-y" style="height: 100%; border-top: none;">
<div class="grid-container" style="height: fit-content; border-top: none; grid-template-rows: auto auto; grid-template-columns: 1fr 1fr;">
<div class="border grid-container" style="height: 100%; grid-row: 1/4; grid-template-rows: auto 1fr; height: fit-content; min-height: 200px;">
<h2 style="margin-bottom: 0;">{{localize data.description.label}}</h2>
<h2 style="margin-bottom: 0;">{{localize data.data.description.label}}</h2>
<div class="description">
{{editor content=data.description.value target="data.description.value" button=true owner=owner editable=editable}}
{{editor content=data.data.description.value target="data.description.value" button=true owner=owner editable=editable}}
</div>
</div>
<div class="border grid-container" style="grid-column-gap: 5px; grid-template-columns: 1fr auto; max-height: 163px; height: fit-content;">
<label style="margin-top: auto; margin-bottom: auto;">{{localize data.crew.label}}:</label>
<input name="data.crew.value" style="text-align: center;" type="text" value="{{data.crew.value}}" placeholder="{{localize data.crew.label}}" />
<label style="margin-top: auto; margin-bottom: auto;">{{localize data.data.crew.label}}:</label>
<input name="data.crew.value" style="text-align: center;" type="text" value="{{data.data.crew.value}}" placeholder="{{localize data.data.crew.label}}" />
</div>
<div class="spells border">

View File

@ -60,7 +60,7 @@
</ul>
</div>
<div class="skills border grid-container" style="grid-column-gap: 5px; grid-template-columns: 1fr;">
<h1 style="grid-column: unset;">{{localize data.languages.label}}</h1>
<input name="data.languages.value" type="text" value="{{data.languages.value}}" />
<h1 style="grid-column: unset;">{{localize data.data.languages.label}}</h1>
<input name="data.languages.value" type="text" value="{{data.data.languages.value}}" />
</div>
</div>

View File

@ -4,7 +4,7 @@
<a class="modification-control" data-action="create"><i class="fas fa-plus"></i></a>
</header>
<ol class="modifications-list" style="padding: 0;">
{{#each data.modifications as |attr key|}}
{{#each data.data.modifications as |attr key|}}
<li class="modification grid-container" style="grid-template-columns: 2fr 1fr auto;" data-attribute="{{key}}">
<input class="modification-key" type="text" name="data.modifications.{{key}}.key" value="{{key}}" style="display: none;" />
<select class="modification-modtype" name="data.modifications.{{key}}.modtype">

View File

@ -1,5 +1,9 @@
<div id="{{id}}" class="roll-dialog">
{{#if skillName}}
<h1 style="text-align: center;">{{localize skillName}} ({{skillValue}})</h1>
{{else}}
<h1 style="text-align: center;">{{name}}</h1>
{{/if}}
<div class="flexrow" style="margin-bottom: 10px;">
<label style="margin: auto;">{{localize "ROLL.OPENCLOSE"}}</label>
<input type="button" name="openclosed" min="0" value="{{startopen}}" style="min-height: 30px; min-width: 45px;" />