diff --git a/README.md b/README.md index 02c6273..f461929 100644 --- a/README.md +++ b/README.md @@ -1,33 +1,14 @@ -# Rolemaster Standard System for Foundry VTT +This system is based on the video tutorials by Cédric Hauteville you can watch them here: https://www.youtube.com/playlist?list=PLFV9z59nkHDccUbRXVt623UdloPTclIrz parts of it were also lifted from the Foundry VTT Boilerplate system by XXX. -## Introduction -This is an in-development implementation of the Rolemaster Standard System for FoundryVTT. All rights to the system remain property of Iron Crown Enterprises (http://ironcrown.com/). This system will not include any of the book content and aims to provide only what is on the character sheet. +Icons have been sourced from https://game-icons.net -If you need access to the Rolemaster Standard System you may be out of luck as the system has been out of print for some time. However it's successor Rolemaster Fantasy Roleplaying is broadly compatible and can be purchased as a PDF via Drive Thru RPG here: https://www.drivethrurpg.com/product/91995/Rolemaster-Fantasy-Role-Playing?cPath=1361_6495 +Dice shapes are licensed under Creative Commons Attribution-Noncommercial-Share Alike 3.0 License and appear from https://www.deviantart.com/jpatterson/art/Polyhedral-RPG-Gaming-Dice-Dec-2014-502024799 created by jpatterson -## How to Use -Download the latest release from this repository and then extract the rmss folder. Drag it into the systems folder of your FoundryVTT Data Directory. More detailed instructions can be found [here](docs/INSTALL.md) in the docs directory. +Dice 10 Icon (https://game-icons.net/1x1/skoll/d10.html) by Skoll and licensed under CC BY 3.0 https://creativecommons.org/licenses/by/3.0/ -If you are using this system I highly recommend the "Simple Dice Roller" module which will allow you to roll dice easily while this feature is in development. You can install it in the Foundry Modules section or you can visit the following link for more instructions: https://foundryvtt.com/packages/simple-dice-roller/ +This system uses less for CSS you can see a good installation guide for VSCode at https://code.visualstudio.com/docs/languages/css#_transpiling-sass-and-less-into-css -Further information on how the system works can be found [here](docs/USAGE.md) +User Notes -## Goals/ToDo -Project goals include: - - A functionaing character sheet that automates some of the basic maths. - - A dice roller that allows you to perform the most common rolls in the system. - - A basic combat tracker +Skill Categories and Skills cannot be renamed if they are owned and you cannot drag a duplicate named skill to the sheet -I maintain a public Trello board here where I log my work items: https://trello.com/b/JkXd5EGx/rmss-for-foundryvtt-features - -## About Me -My name is Anthony, I'm a DevOps Engineer who has been playing Roleplaying Games since the mid 80's. I've been involved in numerous small programming projects. This system is by far the largest thing I've done. If the code here is awful it's because I'm learning CSS/Javascript as I go. - -## Credits -This system is based on: - - The Foundry VTT Boilerplate system by Asacolips. (https://gitlab.com/asacolips-projects/foundry-mods/boilerplate) - - The video tutorials by Cédric Hauteville you can watch them here: https://www.youtube.com/playlist?list=PLFV9z59nkHDccUbRXVt623UdloPTclIrz - -Icons used in this system have been sourced from https://game-icons.net - -This system uses less for CSS. If you change the CSS and need to rebuild it you can see a good installation guide for Less on VSCode at https://code.visualstudio.com/docs/languages/css#_transpiling-sass-and-less-into-css \ No newline at end of file diff --git a/rmss/assets/fonts/PragRoman.ttf b/rmss/assets/fonts/PragRoman.ttf new file mode 100644 index 0000000..d229380 Binary files /dev/null and b/rmss/assets/fonts/PragRoman.ttf differ diff --git a/rmss/assets/fonts/PragRoman.woff2 b/rmss/assets/fonts/PragRoman.woff2 new file mode 100644 index 0000000..e935647 Binary files /dev/null and b/rmss/assets/fonts/PragRoman.woff2 differ diff --git a/rmss/assets/icons/R.svg b/rmss/assets/icons/R.svg new file mode 100644 index 0000000..4bfad63 --- /dev/null +++ b/rmss/assets/icons/R.svg @@ -0,0 +1,68 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/rmss/assets/icons/vec-alldice-jp.svg b/rmss/assets/icons/vec-alldice-jp.svg new file mode 100644 index 0000000..0fec769 --- /dev/null +++ b/rmss/assets/icons/vec-alldice-jp.svg @@ -0,0 +1,354 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Hit + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + D4 + + + + + + + + + + D8 + + + + + + + D6 + + + + + + + + + + + + D10 + + + + + + + + + + + + + D12 + + + + + + + + + + + + D20 + + + + + + 1 + + + + + + 2 + + + + + + 3 + + + + + + 14 + + + + + + 15 + + + + + + 16 + + + + + + 17 + + + + + + 18 + + + + + + 19 + + + + + + 20 + + + + + + 4 + + + + + + 5 + + + + + + 6 + + + + + + 7 + + + + + + 8 + + + + + + 9 + + + + + + 10 + + + + + + 11 + + + + + + 12 + + + + + + 13 + + + + + + 40 + + + + + + 50 + + + + + + 60 + + + + + + 70 + + + + + + 80 + + + + + + 90 + + + + + + 0 + + + + + + 00 + + + + + + 30 + + + + + + * + + + + + + X + + + + + + - + + + + + + + + + + + + image/svg+xml + + + + + Openclipart + + + + + + + + + + + \ No newline at end of file diff --git a/rmss/less/actor-sheet/actor-sheet-skillcat.less b/rmss/less/actor-sheet/actor-sheet-skillcat.less index c3794e6..da74fd4 100644 --- a/rmss/less/actor-sheet/actor-sheet-skillcat.less +++ b/rmss/less/actor-sheet/actor-sheet-skillcat.less @@ -12,7 +12,7 @@ padding-bottom: 3px; display: flex; justify-content: flex-end; - flex-direction: column; + //flex-direction: column; justify-content: center; } @@ -37,7 +37,7 @@ padding-bottom: 3px; display: flex; justify-content: flex-end; - flex-direction: column; + //flex-direction: column; justify-content: center; background-image: linear-gradient(rgba(0, 0, 0, 0.1) 0 0); } diff --git a/rmss/less/actor-sheet/actor-sheet.less b/rmss/less/actor-sheet/actor-sheet.less index 9d410ba..2bcddf4 100644 --- a/rmss/less/actor-sheet/actor-sheet.less +++ b/rmss/less/actor-sheet/actor-sheet.less @@ -4,6 +4,13 @@ display: flex; } + +.rm-heading { + font-size: 1.0em; + font-family: PragRoman; + border-bottom: 0px; +} + // Header CSS .actor-icon { diff --git a/rmss/less/rmss.less b/rmss/less/rmss.less index 93ac91f..1ad38b1 100644 --- a/rmss/less/rmss.less +++ b/rmss/less/rmss.less @@ -16,5 +16,9 @@ @import "./skillcat-sheet/skillcat-sheet.less"; @import "./skillcat-sheet/applicable-stats-grid.less"; +//Apps + +@import "./tools/dice-roller.less"; + // Generics @import "./item-sheet.less"; \ No newline at end of file diff --git a/rmss/less/skillcat-sheet/skillcat-sheet.less b/rmss/less/skillcat-sheet/skillcat-sheet.less index 48139e6..342fdff 100644 --- a/rmss/less/skillcat-sheet/skillcat-sheet.less +++ b/rmss/less/skillcat-sheet/skillcat-sheet.less @@ -1,3 +1,10 @@ +//.skillcat-icons { +// display: flex; +// justify-content: space-around; +// flex-direction: row; +// align-items: center; +//} + .skillcat-name, .skill-name, .item-name, .spell-name, .equipable-name { font-family: Signika, sans-serif; font-size: 12px; diff --git a/rmss/less/tools/dice-roller.less b/rmss/less/tools/dice-roller.less new file mode 100644 index 0000000..158cd22 --- /dev/null +++ b/rmss/less/tools/dice-roller.less @@ -0,0 +1,20 @@ +.dice-roller-options { + display: flex; + flex-direction: column; +} + +.dice-roller-item { + display: flex; + align-items: center; + margin:5px; +} + +.dice-roller-item div { + flex: 1; +} + +.roll-button-container { + display: flex; + flex-direction: column; + justify-content: flex-end; +} \ No newline at end of file diff --git a/rmss/module/controls.js b/rmss/module/controls.js new file mode 100644 index 0000000..ca50455 --- /dev/null +++ b/rmss/module/controls.js @@ -0,0 +1,26 @@ + +export function registerGetSceneControlButtonsHook() { + Hooks.on("getSceneControlButtons", getSceneControlButtons); +} + +function getSceneControlButtons(controls) { + if (canvas == null) { + return; + } + controls.push({ + name: "rmss", + title: "Rolemaster Standard System", + icon: "fas fa-r", + layer: "ControlsLayer", + tools: [ + { + name: "rmmsdiceroller", + title: "Dice Roller", + icon: "fas fa-dice", + onClick: () => { return new game.rmss.applications.RMSSToolsDiceRoller().render(true); }, + button: true + } + ], + activeTool: "rmmsdiceroller" + }); +} diff --git a/rmss/module/documents/actor.js b/rmss/module/documents/actor.js index 23e47d6..cb4edb8 100644 --- a/rmss/module/documents/actor.js +++ b/rmss/module/documents/actor.js @@ -27,6 +27,8 @@ export class RMSSActor extends Actor { _prepareCharacterData(actorData) { if (actorData.type !== "character") return; + this.calculateBasicStatBonus(actorData); + // Calculate Stat Bonuses for the Actor this.calculateStatBonuses(actorData); @@ -51,6 +53,56 @@ export class RMSSActor extends Actor { const data = actorData.data; } + // This checks to see if you have a Rollable Table called "Basic Stat Bonus Table" and uses it to calculate the basic stat bonuses. + calculateBasicStatBonus(actorData) { + const systemData = actorData.system; + for (const table of game.tables) { + if (table.name === "Basic Stat Bonus Table") { + for (const result of table.results) { + if (actorData.system.stats.agility.temp >= Number(result.range[0]) && actorData.system.stats.agility.basic_bonus <= Number(result.range[1])) { + actorData.system.stats.agility.basic_bonus = parseInt(result.text, 10); + } + + if (actorData.system.stats.constitution.temp >= Number(result.range[0]) && actorData.system.stats.constitution.basic_bonus <= Number(result.range[1])) { + actorData.system.stats.constitution.basic_bonus = parseInt(result.text, 10); + } + + if (actorData.system.stats.memory.temp >= Number(result.range[0]) && actorData.system.stats.memory.basic_bonus <= Number(result.range[1])) { + actorData.system.stats.memory.basic_bonus = parseInt(result.text, 10); + } + + if (actorData.system.stats.reasoning.temp >= Number(result.range[0]) && actorData.system.stats.reasoning.basic_bonus <= Number(result.range[1])) { + actorData.system.stats.reasoning.basic_bonus = parseInt(result.text, 10); + } + + if (actorData.system.stats.self_discipline.temp >= Number(result.range[0]) && actorData.system.stats.self_discipline.basic_bonus <= Number(result.range[1])) { + actorData.system.stats.self_discipline.basic_bonus = parseInt(result.text, 10); + } + + if (actorData.system.stats.empathy.temp >= Number(result.range[0]) && actorData.system.stats.empathy.basic_bonus <= Number(result.range[1])) { + actorData.system.stats.empathy.basic_bonus = parseInt(result.text, 10); + } + + if (actorData.system.stats.intuition.temp >= Number(result.range[0]) && actorData.system.stats.intuition.basic_bonus <= Number(result.range[1])) { + actorData.system.stats.intuition.basic_bonus = parseInt(result.text, 10); + } + + if (actorData.system.stats.presence.temp >= Number(result.range[0]) && actorData.system.stats.presence.basic_bonus <= Number(result.range[1])) { + actorData.system.stats.presence.basic_bonus = parseInt(result.text, 10); + } + + if (actorData.system.stats.quickness.temp >= Number(result.range[0]) && actorData.system.stats.quickness.basic_bonus <= Number(result.range[1])) { + actorData.system.stats.quickness.basic_bonus = parseInt(result.text, 10); + } + + if (actorData.system.stats.strength.temp >= Number(result.range[0]) && actorData.system.stats.strength.basic_bonus <= Number(result.range[1])) { + actorData.system.stats.strength.basic_bonus = parseInt(result.text, 10); + } + } + } + } + } + // Tally each stat bonus and populate the total field. calculateStatBonuses(actorData) { const systemData = actorData.system; diff --git a/rmss/module/sheets/actors/rmss_player_sheet.js b/rmss/module/sheets/actors/rmss_player_sheet.js index 283ac2f..11d16da 100644 --- a/rmss/module/sheets/actors/rmss_player_sheet.js +++ b/rmss/module/sheets/actors/rmss_player_sheet.js @@ -202,7 +202,7 @@ export default class RMSSPlayerSheet extends ActorSheet { async renderCharacterSettings(data) { console.log(data); - const configSheet = await renderTemplate("systems/rmss/templates/sheets/actors/dialogs/actor-settings.html", data); + const configSheet = await renderTemplate("systems/rmss/templates/sheets/actors/dialogs/app_skill_category_importer.html", data); return (configSheet); } @@ -215,6 +215,11 @@ export default class RMSSPlayerSheet extends ActorSheet { item.sheet.render(true); }); + html.find(".item-roll").click(ev => { + const item = this.actor.items.get(ev.currentTarget.getAttribute("data-item-id")); + new game.rmss.applications.RMSSToolsDiceRoller(item.name, item.system.total_bonus).render(true); + }); + // ------------------------------------------------------------- // Everything below here is only needed if the sheet is editable if (!this.isEditable) return; @@ -229,15 +234,14 @@ export default class RMSSPlayerSheet extends ActorSheet { item.delete(); }); - // Show Sheet Settings + // Show Skill Category Importer html.find(".import-skillcats").click(async ev => { let selectOptions = {}; for (const pack of game.packs) { selectOptions[pack.metadata.id] = pack.metadata.label; } - - new game.rmss.applications.RMSSActorSheetConfig(selectOptions, this.actor).render(true); + new game.rmss.applications.RMSSToolsSCImporter(selectOptions, this.actor).render(true); }); // Check/Uncheck Favorite Skill diff --git a/rmss/module/sheets/apps/rmss_dice_roller.js b/rmss/module/sheets/apps/rmss_dice_roller.js new file mode 100644 index 0000000..6bf0a6c --- /dev/null +++ b/rmss/module/sheets/apps/rmss_dice_roller.js @@ -0,0 +1,85 @@ +import { + roll_one_to_onehundred, + roll_low_open_ended, + roll_high_open_ended, + roll_open_ended +} from "./rmss_dice_roller_rolls.js"; +import { + getOpenEndedRollModifier, + processOpenEndedSixtySixRoll, + processOpenEndedRoll, + processHighOpenEndedRoll, + processLowOpenEndedRoll +} from "./rmss_dice_roller_processing.js"; + +export default class RMSSToolsDiceRoller extends FormApplication { + constructor(itemName, characterBonus) { + super(); + this.itemName = itemName; + this.characterBonus = characterBonus; + this.rollType = [ + {value: "one_to_onehundred", text: "1-100", selected: false}, + {value: "open_ended", text: "Open-Ended", selected: true}, + {value: "high_open_ended", text: "High Open-Ended", selected: false}, + {value: "low_open_ended", text: "Low Open-Ended", selected: false} + ]; + } + + static get defaultOptions() { + return mergeObject(super.defaultOptions, { + classes: ["form"], + title: "Rolemaster Dice Roller", + popOut: true, + width: 380, + height: 210, + template: "systems/rmss/templates/sheets/apps/app_dice_roller.html" + }); + } + + getData() { + // Send data to the template + return { + itemName: this.itemName, + characterBonus: this.characterBonus, + selectOptions: this.rollType, + }; + } + + activateListeners(html) { + super.activateListeners(html); + } + + async _updateObject(event, formData) { + console.log("Rolling Dice"); + console.log(formData); + console.log(event); + switch (formData.rollType) { + case "one_to_onehundred": + this.roll_one_to_onehundred(); + break; + case "open_ended": + this.roll_open_ended(); + break; + case "high_open_ended": + this.roll_high_open_ended(); + break; + case "low_open_ended": + this.roll_low_open_ended(); + break; + } + } +} + +RMSSToolsDiceRoller.prototype.roll_one_to_onehundred = roll_one_to_onehundred; +RMSSToolsDiceRoller.prototype.roll_low_open_ended = roll_low_open_ended; +RMSSToolsDiceRoller.prototype.roll_high_open_ended = roll_high_open_ended; +RMSSToolsDiceRoller.prototype.roll_open_ended = roll_open_ended; + +RMSSToolsDiceRoller.prototype.getOpenEndedRollModifier = + getOpenEndedRollModifier; +RMSSToolsDiceRoller.prototype.processOpenEndedSixtySixRoll = + processOpenEndedSixtySixRoll; +RMSSToolsDiceRoller.prototype.processOpenEndedRoll = processOpenEndedRoll; +RMSSToolsDiceRoller.prototype.processHighOpenEndedRoll = + processHighOpenEndedRoll; +RMSSToolsDiceRoller.prototype.processLowOpenEndedRoll = processLowOpenEndedRoll; diff --git a/rmss/module/sheets/apps/rmss_dice_roller_processing.js b/rmss/module/sheets/apps/rmss_dice_roller_processing.js new file mode 100644 index 0000000..727839f --- /dev/null +++ b/rmss/module/sheets/apps/rmss_dice_roller_processing.js @@ -0,0 +1,131 @@ +export async function getOpenEndedRollModifier() { + return await new Roll("1d100x>95").roll({ async: true }); +} + +export function processOpenEndedSixtySixRoll(baseroll, rolltype) { + // Log the Roll to Chat + let chatOptions = { + type: CONST.CHAT_MESSAGE_TYPES.ROLL, + rolls: [baseroll], + flavor: rolltype, + rollMode: game.settings.get("core", "rollMode"), + content: "You rolled a 66!", + }; + + ChatMessage.create(chatOptions); +} + +export function processOpenEndedRoll(baseroll, rolltype) { + // Define the Chat Message Template + let chatTemplate = "systems/rmss/templates/chat/chat_dice_roll.html"; + + // Pass the Data through to be used in the Chat Message + let chatData = { + baseroll: baseroll, + total: baseroll.result, + highopen: false, + lowopen: false, + }; + + // Render the Rolls to the Chat Window + renderTemplate(chatTemplate, chatData).then((html) => { + let chatOptions = { + type: CONST.CHAT_MESSAGE_TYPES.ROLL, + rolls: [baseroll], + flavor: rolltype, + rollMode: game.settings.get("core", "rollMode"), + content: html, + }; + + ChatMessage.create(chatOptions); + }); +} + +export async function processHighOpenEndedRoll(baseroll, rolltype) { + // Get the Base Roll followed by the High Open Ended Roll + let originalRoll = baseroll; + let openendedRoll = await this.getOpenEndedRollModifier(); + + // Create a rolls array for Dice So Nice integration. + let rolls = [originalRoll, openendedRoll]; + + // Create an Array to hold the High Open Ended Roll Results and set the total to base roll + let openendedResults = []; + let total = Number(originalRoll.result); + + // Each time the High Open Ended Roll is triggered add the result to an array and add it to the total. + for (const rollResult of openendedRoll.dice[0].results) { + openendedResults.push(rollResult.result); + total = total + Number(rollResult.result); + } + + // Define the Chat Message Template + let chatTemplate = "systems/rmss/templates/chat/chat_dice_roll.html"; + + // Pass the Data through to be used in the Chat Message + let chatData = { + baseroll: baseroll, + opeendedresults: [openendedResults], + highopen: true, + lowopen: false, + total: total, + }; + + // Render the Rolls to the Chat Window + renderTemplate(chatTemplate, chatData).then((html) => { + let chatOptions = { + type: CONST.CHAT_MESSAGE_TYPES.ROLL, + rolls: rolls, + flavor: rolltype, + rollMode: game.settings.get("core", "rollMode"), + content: html, + }; + + ChatMessage.create(chatOptions); + }); +} + +export async function processLowOpenEndedRoll(baseroll, rolltype) { + // Get the Base Roll followed by the Low Open Ended Roll + let originalRoll = baseroll; + let openendedRoll = await this.getOpenEndedRollModifier(); + + // Create a rolls array for Dice So Nice integration. + let rolls = [originalRoll, openendedRoll]; + + // Create an Array to hold the Low Open Ended Roll Results and set the total to base roll + let openendedResults = []; + let total = Number(originalRoll.result); + + // Each time the Low Open Ended Roll is triggered add the result to an array and subtract it from the total. + for (const rollResult of openendedRoll.dice[0].results) { + openendedResults.push(rollResult.result); + total = total - Number(rollResult.result); + } + + // Define the Chat Message Template + let chatTemplate = "systems/rmss/templates/chat/chat_dice_roll.html"; + + // Pass the Data through to be used in the Chat Message + let chatData = { + baseroll: baseroll, + rolls: rolls, + opeendedresults: [openendedResults], + highopen: false, + lowopen: true, + total: total, + }; + + // Render the Rolls to the Chat Window + renderTemplate(chatTemplate, chatData).then((html) => { + let chatOptions = { + type: CONST.CHAT_MESSAGE_TYPES.ROLL, + rolls: rolls, + flavor: rolltype, + rollMode: game.settings.get("core", "rollMode"), + content: html, + }; + + ChatMessage.create(chatOptions); + }); +} diff --git a/rmss/module/sheets/apps/rmss_dice_roller_rolls.js b/rmss/module/sheets/apps/rmss_dice_roller_rolls.js new file mode 100644 index 0000000..21bff32 --- /dev/null +++ b/rmss/module/sheets/apps/rmss_dice_roller_rolls.js @@ -0,0 +1,71 @@ +export async function roll_one_to_onehundred() { + // Construct the Roll instance + let baseroll = await new Roll("1d100 + @characterBonus", {characterBonus: this.characterBonus}).roll({async: true}); + let rolltype = "Roll Type: 1-100"; + + // Log the Roll to Chat + let chatOptions = { + type: CONST.CHAT_MESSAGE_TYPES.ROLL, + rolls: [baseroll], + flavor: rolltype, + rollMode: game.settings.get("core", "rollMode") + }; + + ChatMessage.create(chatOptions); + this.close(); +}; + +export async function roll_low_open_ended() { + // Construct the Roll instance + let baseroll = await new Roll("1d100").roll({async: true}); + console.log(baseroll.result); + let rolltype = "Roll Type: Low Open-Ended"; + + switch (true) { + case (baseroll.result < 6): + this.processLowOpenEndedRoll(baseroll, rolltype); + break; + case (baseroll.result === 66): + this.processOpenEndedSixtySixRoll(baseroll, rolltype); + break; + default: + this.processOpenEndedRoll(baseroll, rolltype); + } +} + +export async function roll_high_open_ended() { + // Construct the Roll instance + let baseroll = await new Roll("1d100").roll({async: true}); + console.log(baseroll.result); + let rolltype = "Roll Type: High Open-Ended"; + switch (true) { + case (baseroll.result === 66): + this.processOpenEndedSixtySixRoll(baseroll, rolltype); + break; + case (baseroll.result > 95): + this.processHighOpenEndedRoll(baseroll, rolltype); + break; + default: + this.processOpenEndedRoll(baseroll, rolltype); + } +} + +export async function roll_open_ended() { + // Construct the Roll instance + let baseroll = await new Roll("1d100").roll({async: true}); + console.log(baseroll.result); + let rolltype = "Roll Type: Open-Ended"; + switch (true) { + case (baseroll.result < 6): + this.processLowOpenEndedRoll(baseroll, rolltype); + break; + case (baseroll.result === 66): + this.processOpenEndedSixtySixRoll(baseroll, rolltype); + break; + case (baseroll.result > 95): + this.processHighOpenEndedRoll(baseroll, rolltype); + break; + default: + this.processOpenEndedRoll(baseroll, rolltype); + } +} diff --git a/rmss/module/sheets/apps/rmss_import_skill_categories.js b/rmss/module/sheets/apps/rmss_import_skill_categories.js new file mode 100644 index 0000000..22c6c86 --- /dev/null +++ b/rmss/module/sheets/apps/rmss_import_skill_categories.js @@ -0,0 +1,56 @@ +export default class RMSSToolsSCImporter extends FormApplication { + + constructor(selectOptions, character) { + super(); + this.selectOptions = selectOptions; + this.character = character; + } + + static get defaultOptions() { + return mergeObject(super.defaultOptions, { + classes: ["form"], + popOut: true, + title: "Import Skill Categories", + template: "systems/rmss/templates/sheets/apps/app_skill_category_importer.html" + }); + } + + getData() { + // Send data to the template + return { + selectOptions: this.selectOptions + }; + } + + activateListeners(html) { + super.activateListeners(html); + } + + async _updateObject(event, formData) { + console.log("Deleting Old Skill Categories."); + for (const item of this.character.items) { + if (item.type === "skill_category") { + item.delete(); + } + } + + const pack = game.packs.get(formData.selectOptions); + const skillCategoryData = await pack.getIndex(); + + console.log("Importing New Skill Categories."); + + for (const sc of skillCategoryData) { + const newitem = await pack.getDocument(sc._id); + + let newDocuments = []; + if (newitem.type === "skill_category") { + console.log(newitem); + newDocuments.push(newitem); + } + if (newDocuments.length > 0) { + await Item.createDocuments(newDocuments, {parent: this.character}); + } + } + } +} + diff --git a/rmss/packs/skill_categories.db b/rmss/packs/rmss_skill_categories.db similarity index 100% rename from rmss/packs/skill_categories.db rename to rmss/packs/rmss_skill_categories.db diff --git a/rmss/packs/smss_skill_categories.db b/rmss/packs/smss_skill_categories.db new file mode 100644 index 0000000..9c20b02 --- /dev/null +++ b/rmss/packs/smss_skill_categories.db @@ -0,0 +1,48 @@ +{"name":"Special Attacks","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","system":{"description":"Description here.","applicable_stats":"St/Ag/SD","app_stat_1":"St","app_stat_2":"Ag","app_stat_3":"SD","development_cost":"0","ranks":0,"new_ranks":{"value":0,"max":3,"max_default":3},"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"flags":{"core":{"sourceId":"Item.by1LH6XYGWd5d9bs"}},"_stats":{"systemId":"rmss","systemVersion":"0.0.3","coreVersion":"10.291","createdTime":1662898332987,"modifiedTime":1670979889250,"lastModifiedBy":"AKzFUDVFn0NcwQv9"},"folder":null,"sort":0,"ownership":{"default":0,"AKzFUDVFn0NcwQv9":3},"_id":"19mzrZOIjHOQMJRb"} +{"name":"Athletic • Gymnastics","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","system":{"description":"Description here.","applicable_stats":"Ag/Qu/Ag","app_stat_1":"Ag","app_stat_2":"Qu","app_stat_3":"Ag","development_cost":"0","ranks":0,"new_ranks":{"value":0,"max":3,"max_default":3},"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"flags":{"core":{"sourceId":"Item.TASzGNEwHMQUz1AV"}},"_stats":{"systemId":"rmss","systemVersion":"0.0.3","coreVersion":"10.291","createdTime":1662897573841,"modifiedTime":1670979417390,"lastModifiedBy":"AKzFUDVFn0NcwQv9"},"folder":null,"sort":0,"ownership":{"default":0,"AKzFUDVFn0NcwQv9":3},"_id":"1pzqttjfJqGkCio2"} +{"name":"Lore • Technical","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","system":{"description":"Description here.","applicable_stats":"Me/Re/Me","app_stat_1":"Me","app_stat_2":"Re","app_stat_3":"Me","development_cost":"0","ranks":0,"new_ranks":{"value":0,"max":3,"max_default":3},"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"flags":{"core":{"sourceId":"Item.Tw2FXIQb5HA89kbX"}},"_stats":{"systemId":"rmss","systemVersion":"0.0.3","coreVersion":"10.291","createdTime":1662898032616,"modifiedTime":1670979629255,"lastModifiedBy":"AKzFUDVFn0NcwQv9"},"folder":null,"sort":0,"ownership":{"default":0,"AKzFUDVFn0NcwQv9":3},"_id":"8b1DqVmR2w3aFZ9H"} +{"name":"Armor • Medium","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","system":{"description":"Description here.","applicable_stats":"St/Ag/St","app_stat_1":"St","app_stat_2":"Ag","app_stat_3":"St","development_cost":"0","ranks":0,"new_ranks":{"value":0,"max":3,"max_default":3},"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"flags":{"core":{"sourceId":"Item.ENiEBop9Kgrn9pBt"}},"_stats":{"systemId":"rmss","systemVersion":"0.0.3","coreVersion":"10.291","createdTime":1662897408501,"modifiedTime":1670979376804,"lastModifiedBy":"AKzFUDVFn0NcwQv9"},"folder":null,"sort":0,"ownership":{"default":0,"AKzFUDVFn0NcwQv9":3},"_id":"9tRVGNuqiUXLkt7X"} +{"name":"Outdoor • Environmental","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","system":{"description":"Description here.","applicable_stats":"SD/In/Me","app_stat_1":"SD","app_stat_2":"In","app_stat_3":"Me","development_cost":"0","ranks":0,"new_ranks":{"value":0,"max":3,"max_default":3},"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"flags":{"core":{"sourceId":"Item.49iK0oluVd5Z1fpc"}},"_stats":{"systemId":"rmss","systemVersion":"0.0.3","coreVersion":"10.291","createdTime":1662898214394,"modifiedTime":1670979688946,"lastModifiedBy":"AKzFUDVFn0NcwQv9"},"folder":null,"sort":0,"ownership":{"default":0,"AKzFUDVFn0NcwQv9":3},"_id":"AleqAY3hcYEWwKOx"} +{"name":"Awareness • Perceptions","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","system":{"description":"Description here.","applicable_stats":"In/SD/In","app_stat_1":"In","app_stat_2":"SD","app_stat_3":"In","development_cost":"0","ranks":0,"new_ranks":{"value":0,"max":3,"max_default":3},"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"flags":{"core":{"sourceId":"Item.gJHBJS3aEz62XbxE"}},"_stats":{"systemId":"rmss","systemVersion":"0.0.3","coreVersion":"10.291","createdTime":1662897610482,"modifiedTime":1670979421091,"lastModifiedBy":"AKzFUDVFn0NcwQv9"},"folder":null,"sort":0,"ownership":{"default":0,"AKzFUDVFn0NcwQv9":3},"_id":"CYkI6APa2sQ772D0"} +{"name":"Directed Powers","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","system":{"description":"Description here.","applicable_stats":"Ag/SD/Ag","app_stat_1":"Ag","app_stat_2":"SD","app_stat_3":"Ag","development_cost":"0","ranks":0,"new_ranks":{"value":0,"max":3,"max_default":3},"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"flags":{"core":{"sourceId":"Item.RA46DfHavzTTrp99"}},"_stats":{"systemId":"rmss","systemVersion":"0.0.3","coreVersion":"10.291","createdTime":1662897900117,"modifiedTime":1670979547990,"lastModifiedBy":"AKzFUDVFn0NcwQv9"},"folder":null,"sort":0,"ownership":{"default":0,"AKzFUDVFn0NcwQv9":3},"_id":"CjTPpZGQoacSBAyu"} +{"name":"Science/Analytic • Medical","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","system":{"description":"Description here.","applicable_stats":"Me/Re/In","app_stat_1":"Me","app_stat_2":"Re","app_stat_3":"In","development_cost":"0","ranks":0,"new_ranks":{"value":0,"max":3,"max_default":3},"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"flags":{"core":{"sourceId":"Item.BfDFjciYPFezmes0"}},"_stats":{"systemId":"rmss","systemVersion":"0.0.3","coreVersion":"10.291","createdTime":1662898290307,"modifiedTime":1670979824114,"lastModifiedBy":"AKzFUDVFn0NcwQv9"},"folder":null,"sort":0,"ownership":{"default":0,"AKzFUDVFn0NcwQv9":3},"_id":"DAwVBEPE5QJHoxIt"} +{"name":"Science/Analytic • Basic","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","system":{"description":"Description here.","applicable_stats":"Re/Me/Re","app_stat_1":"Re","app_stat_2":"Me","app_stat_3":"Re","development_cost":"0","ranks":0,"new_ranks":{"value":0,"max":3,"max_default":3},"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"flags":{"core":{"sourceId":"Item.BfDFjciYPFezmes0"}},"_stats":{"systemId":"rmss","systemVersion":"0.0.3","coreVersion":"10.291","createdTime":1662898290307,"modifiedTime":1670979752303,"lastModifiedBy":"AKzFUDVFn0NcwQv9"},"folder":null,"sort":0,"ownership":{"default":0,"AKzFUDVFn0NcwQv9":3},"_id":"FEqpspsCMjUJz7FE"} +{"name":"Awareness • Senses","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","system":{"description":"Description here.","applicable_stats":"In/SD/In","app_stat_1":"In","app_stat_2":"SD","app_stat_3":"In","development_cost":"0","ranks":0,"new_ranks":{"value":0,"max":3,"max_default":3},"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"flags":{"core":{"sourceId":"Item.QplAVXReCFVlKVB8"}},"_stats":{"systemId":"rmss","systemVersion":"0.0.3","coreVersion":"10.291","createdTime":1662897666266,"modifiedTime":1670979423515,"lastModifiedBy":"AKzFUDVFn0NcwQv9"},"folder":null,"sort":0,"ownership":{"default":0,"AKzFUDVFn0NcwQv9":3},"_id":"KJZRbH17p30EJa04"} +{"name":"Weapon • 1-H Melee","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","system":{"description":"Description here.","applicable_stats":"St/Ag/St","app_stat_1":"St","app_stat_2":"Ag","app_stat_3":"St","development_cost":"0","ranks":0,"new_ranks":{"value":0,"max":3,"max_default":3},"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"flags":{"core":{"sourceId":"Item.CXllZNGgTe80uZRQ"}},"_stats":{"systemId":"rmss","systemVersion":"0.0.3","coreVersion":"10.291","createdTime":1662898744329,"modifiedTime":1670980248154,"lastModifiedBy":"AKzFUDVFn0NcwQv9"},"folder":null,"sort":0,"ownership":{"default":0,"AKzFUDVFn0NcwQv9":3},"_id":"KZeBMZBjBkGctBb0"} +{"name":"Athletic • Endurance","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","system":{"description":"Description here.","applicable_stats":"Co/Ag/St","app_stat_1":"Co","app_stat_2":"Ag","app_stat_3":"St","development_cost":"0","ranks":0,"new_ranks":{"value":0,"max":3,"max_default":3},"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"flags":{"core":{"sourceId":"Item.ldmZhkHo8m4VvV2V"}},"_stats":{"systemId":"rmss","systemVersion":"0.0.3","coreVersion":"10.291","createdTime":1662897539929,"modifiedTime":1670979416149,"lastModifiedBy":"AKzFUDVFn0NcwQv9"},"folder":null,"sort":0,"ownership":{"default":0,"AKzFUDVFn0NcwQv9":3},"_id":"Ko33CPZI7C0rSIRl"} +{"name":"Subterfuge • Stealth","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","system":{"description":"Description here.","applicable_stats":"Ag/SD/In","app_stat_1":"Ag","app_stat_2":"SD","app_stat_3":"In","development_cost":"0","ranks":0,"new_ranks":{"value":0,"max":3,"max_default":3},"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"flags":{"core":{"sourceId":"Item.FM9stBeKGFVdAPdc"}},"_stats":{"systemId":"rmss","systemVersion":"0.0.3","coreVersion":"10.291","createdTime":1662898591826,"modifiedTime":1670979913428,"lastModifiedBy":"AKzFUDVFn0NcwQv9"},"folder":null,"sort":0,"ownership":{"default":0,"AKzFUDVFn0NcwQv9":3},"_id":"LBLcWrV4qjxllEw9"} +{"name":"Weapon • 2-H Melee","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","system":{"description":"Description here.","applicable_stats":"St/Ag/St","app_stat_1":"St","app_stat_2":"Ag","app_stat_3":"St","development_cost":"0","ranks":0,"new_ranks":{"value":0,"max":3,"max_default":3},"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"flags":{"core":{"sourceId":"Item.CXllZNGgTe80uZRQ"}},"_stats":{"systemId":"rmss","systemVersion":"0.0.3","coreVersion":"10.291","createdTime":1662898744329,"modifiedTime":1670980269575,"lastModifiedBy":"AKzFUDVFn0NcwQv9"},"folder":null,"sort":0,"ownership":{"default":0,"AKzFUDVFn0NcwQv9":3},"_id":"Ld41o7ekmwzXwXgQ"} +{"name":"Subterfuge • Mechanics","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","system":{"description":"Description here.","applicable_stats":"In/Ag/Re","app_stat_1":"In","app_stat_2":"Ag","app_stat_3":"Re","development_cost":"0","ranks":0,"new_ranks":{"value":0,"max":3,"max_default":3},"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"flags":{"core":{"sourceId":"Item.O0Zwk5hAhCMx6ajP"}},"_stats":{"systemId":"rmss","systemVersion":"0.0.3","coreVersion":"10.291","createdTime":1662898576285,"modifiedTime":1670979911668,"lastModifiedBy":"AKzFUDVFn0NcwQv9"},"folder":null,"sort":0,"ownership":{"default":0,"AKzFUDVFn0NcwQv9":3},"_id":"Mspp4CJDKjuqxVxU"} +{"name":"Weapon • 1-H Firearms","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","system":{"description":"Description here.","applicable_stats":"Ag/St/Ag","app_stat_1":"Ag","app_stat_2":"St","app_stat_3":"Ag","development_cost":"0","ranks":0,"new_ranks":{"value":0,"max":3,"max_default":3},"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"flags":{"core":{"sourceId":"Item.CXllZNGgTe80uZRQ"}},"_stats":{"systemId":"rmss","systemVersion":"0.0.3","coreVersion":"10.291","createdTime":1662898744329,"modifiedTime":1670980265600,"lastModifiedBy":"AKzFUDVFn0NcwQv9"},"folder":null,"sort":0,"ownership":{"default":0,"AKzFUDVFn0NcwQv9":3},"_id":"NZXsMbVcm9kYd1gB"} +{"name":"Weapon • 1-H Energy","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","system":{"description":"Description here.","applicable_stats":"Ag/Ag/Ag","app_stat_1":"Ag","app_stat_2":"Ag","app_stat_3":"Ag","development_cost":"0","ranks":0,"new_ranks":{"value":0,"max":3,"max_default":3},"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"flags":{"core":{"sourceId":"Item.CXllZNGgTe80uZRQ"}},"_stats":{"systemId":"rmss","systemVersion":"0.0.3","coreVersion":"10.291","createdTime":1662898744329,"modifiedTime":1670980254758,"lastModifiedBy":"AKzFUDVFn0NcwQv9"},"folder":null,"sort":0,"ownership":{"default":0,"AKzFUDVFn0NcwQv9":3},"_id":"On5jQJQVDflVDAp7"} +{"name":"Technical/Trade • Professional","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","system":{"description":"Description here.","applicable_stats":"Re/Me/In","app_stat_1":"Re","app_stat_2":"Me","app_stat_3":"In","development_cost":"0","ranks":0,"new_ranks":{"value":0,"max":3,"max_default":3},"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"flags":{"core":{"sourceId":"Item.xNTn6oV9yMOmfP0Z"}},"_stats":{"systemId":"rmss","systemVersion":"0.0.3","coreVersion":"10.291","createdTime":1662898699996,"modifiedTime":1670979981424,"lastModifiedBy":"AKzFUDVFn0NcwQv9"},"folder":null,"sort":0,"ownership":{"default":0,"AKzFUDVFn0NcwQv9":3},"_id":"PtPyhFeSb8OuqGIt"} +{"name":"Lore • Academic","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","system":{"description":"Description here.","applicable_stats":"Me/Re/Me","app_stat_1":"Me","app_stat_2":"Re","app_stat_3":"Me","development_cost":"0","ranks":0,"new_ranks":{"value":0,"max":3,"max_default":3},"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"flags":{"core":{"sourceId":"Item.V9otC0Kh0y0B3P8Q"}},"_stats":{"systemId":"rmss","systemVersion":"0.0.3","coreVersion":"10.291","createdTime":1662897982070,"modifiedTime":1670979619507,"lastModifiedBy":"AKzFUDVFn0NcwQv9"},"folder":null,"sort":0,"ownership":{"default":0,"AKzFUDVFn0NcwQv9":3},"_id":"Q1fe44wicIwgiOW0"} +{"name":"Weapon • 2-H Firearms","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","system":{"description":"Description here.","applicable_stats":"Ag/St/Ag","app_stat_1":"Ag","app_stat_2":"St","app_stat_3":"Ag","development_cost":"0","ranks":0,"new_ranks":{"value":0,"max":3,"max_default":3},"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"flags":{"core":{"sourceId":"Item.CXllZNGgTe80uZRQ"}},"_stats":{"systemId":"rmss","systemVersion":"0.0.3","coreVersion":"10.291","createdTime":1662898744329,"modifiedTime":1670980274500,"lastModifiedBy":"AKzFUDVFn0NcwQv9"},"folder":null,"sort":0,"ownership":{"default":0,"AKzFUDVFn0NcwQv9":3},"_id":"QYXxP8bwKoLYf2IJ"} +{"name":"Psychic •","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","system":{"description":"Description here.","applicable_stats":"SD/SD","app_stat_1":"SD","app_stat_2":"SD","app_stat_3":"None","development_cost":"0","ranks":0,"new_ranks":{"value":0,"max":3,"max_default":3},"rank_bonus":-15,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"flags":{"core":{"sourceId":"Item.oAwFLBD7uNUBdNgI"}},"_stats":{"systemId":"rmss","systemVersion":"0.0.3","coreVersion":"10.291","createdTime":1670979716214,"modifiedTime":1670979743085,"lastModifiedBy":"AKzFUDVFn0NcwQv9"},"folder":null,"sort":0,"ownership":{"default":0,"AKzFUDVFn0NcwQv9":3},"_id":"RNo0LJNOdgcTVuVk"} +{"name":"Outdoor • Animal","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","system":{"description":"Description here.","applicable_stats":"Em/Ag/Em","app_stat_1":"Em","app_stat_2":"Ag","app_stat_3":"Em","development_cost":"0","ranks":0,"new_ranks":{"value":0,"max":3,"max_default":3},"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"flags":{"core":{"sourceId":"Item.6UjbXeI6IFrsdTEy"}},"_stats":{"systemId":"rmss","systemVersion":"0.0.3","coreVersion":"10.291","createdTime":1662898166391,"modifiedTime":1670979687230,"lastModifiedBy":"AKzFUDVFn0NcwQv9"},"folder":null,"sort":0,"ownership":{"default":0,"AKzFUDVFn0NcwQv9":3},"_id":"SWttx3JsJVR6WG5e"} +{"name":"Artistic • Passive","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","system":{"description":"Description here.","applicable_stats":"Em/In/Pr","app_stat_1":"Em","app_stat_2":"In","app_stat_3":"Pr","development_cost":"0","ranks":0,"new_ranks":{"value":0,"max":3,"max_default":3},"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"flags":{"core":{"sourceId":"Item.NTMvAPWeh5G55Kjs"}},"_stats":{"systemId":"rmss","systemVersion":"0.0.3","coreVersion":"10.291","createdTime":1662897462965,"modifiedTime":1670979379203,"lastModifiedBy":"AKzFUDVFn0NcwQv9"},"folder":null,"sort":0,"ownership":{"default":0,"AKzFUDVFn0NcwQv9":3},"_id":"U8rN3zps2go0IS6O"} +{"name":"Weapon • Missile/Thrown","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","system":{"description":"Description here.","applicable_stats":"Ag/St/Ag","app_stat_1":"Ag","app_stat_2":"St","app_stat_3":"Ag","development_cost":"0","ranks":0,"new_ranks":{"value":0,"max":3,"max_default":3},"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"flags":{"core":{"sourceId":"Item.8a1d0Z2MfJe0R1Eb"}},"_stats":{"systemId":"rmss","systemVersion":"0.0.3","coreVersion":"10.291","createdTime":1662898823756,"modifiedTime":1670980277959,"lastModifiedBy":"AKzFUDVFn0NcwQv9"},"folder":null,"sort":0,"ownership":{"default":0,"AKzFUDVFn0NcwQv9":3},"_id":"V7IAKktApiLkKNbB"} +{"name":"Combat Maneuvers","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","system":{"description":"Description here.","applicable_stats":"Ag/Qu/SD","app_stat_1":"Ag","app_stat_2":"Qu","app_stat_3":"SD","development_cost":"0","ranks":0,"new_ranks":{"value":0,"max":3,"max_default":3},"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"flags":{"core":{"sourceId":"Item.bwL0nMJePO6OQNue"}},"_stats":{"systemId":"rmss","systemVersion":"0.0.3","coreVersion":"10.291","createdTime":1662897819566,"modifiedTime":1670979488179,"lastModifiedBy":"AKzFUDVFn0NcwQv9"},"folder":null,"sort":0,"ownership":{"default":0,"AKzFUDVFn0NcwQv9":3},"_id":"Yj8rbirDtPSyFxKe"} +{"name":"Lore • General","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","system":{"description":"Description here.","applicable_stats":"Me/Re/Me","app_stat_1":"Me","app_stat_2":"Re","app_stat_3":"Me","development_cost":"0","ranks":0,"new_ranks":{"value":0,"max":3,"max_default":3},"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"flags":{"core":{"sourceId":"Item.5fCeVMz6xVnkmH8o"}},"_stats":{"systemId":"rmss","systemVersion":"0.0.3","coreVersion":"10.291","createdTime":1662897962808,"modifiedTime":1670979625749,"lastModifiedBy":"AKzFUDVFn0NcwQv9"},"folder":null,"sort":0,"ownership":{"default":0,"AKzFUDVFn0NcwQv9":3},"_id":"b969dpNiQSpqaDsH"} +{"name":"Technical/Trade • Gunnery","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","system":{"description":"Description here.","applicable_stats":"In/Ag/Ag","app_stat_1":"In","app_stat_2":"Ag","app_stat_3":"Ag","development_cost":"0","ranks":0,"new_ranks":{"value":0,"max":3,"max_default":3},"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"flags":{"core":{"sourceId":"Item.1td9QGD20b4nkD6h"}},"_stats":{"systemId":"rmss","systemVersion":"0.0.3","coreVersion":"10.291","createdTime":1662898674902,"modifiedTime":1670979967399,"lastModifiedBy":"AKzFUDVFn0NcwQv9"},"folder":null,"sort":0,"ownership":{"default":0,"AKzFUDVFn0NcwQv9":3},"_id":"bgDehY2PthlhPUai"} +{"name":"Martial Arts • Striking","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","system":{"description":"Description here.","applicable_stats":"St/Ag/St","app_stat_1":"St","app_stat_2":"Ag","app_stat_3":"St","development_cost":"0","ranks":0,"new_ranks":{"value":0,"max":3,"max_default":3},"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"flags":{"core":{"sourceId":"Item.HVistg0XNoVGsSKZ"}},"_stats":{"systemId":"rmss","systemVersion":"0.0.3","coreVersion":"10.291","createdTime":1662898114714,"modifiedTime":1670979640244,"lastModifiedBy":"AKzFUDVFn0NcwQv9"},"folder":null,"sort":0,"ownership":{"default":0,"AKzFUDVFn0NcwQv9":3},"_id":"cSJMJ97JBsfZO8Ge"} +{"name":"Technical/Trade • Vocational","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","system":{"description":"Description here.","applicable_stats":"Me/In/Re","app_stat_1":"Me","app_stat_2":"In","app_stat_3":"Re","development_cost":"0","ranks":0,"new_ranks":{"value":0,"max":3,"max_default":3},"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"flags":{"core":{"sourceId":"Item.1td9QGD20b4nkD6h"}},"_stats":{"systemId":"rmss","systemVersion":"0.0.3","coreVersion":"10.291","createdTime":1662898674902,"modifiedTime":1670980052328,"lastModifiedBy":"AKzFUDVFn0NcwQv9"},"folder":null,"sort":0,"ownership":{"default":0,"AKzFUDVFn0NcwQv9":3},"_id":"e6RrjsyHbvz6OuZF"} +{"name":"Influence","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","system":{"description":"Description here.","applicable_stats":"Pr/Em/In","app_stat_1":"Pr","app_stat_2":"Em","app_stat_3":"In","development_cost":"0","ranks":0,"new_ranks":{"value":0,"max":3,"max_default":3},"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"flags":{"core":{"sourceId":"Item.zOKTXAFd6bK3XJZ5"}},"_stats":{"systemId":"rmss","systemVersion":"0.0.3","coreVersion":"10.291","createdTime":1662897929958,"modifiedTime":1670979557055,"lastModifiedBy":"AKzFUDVFn0NcwQv9"},"folder":null,"sort":0,"ownership":{"default":0,"AKzFUDVFn0NcwQv9":3},"_id":"ehfUJPUyO2Fzme35"} +{"name":"Self Control","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","system":{"description":"Description here.","applicable_stats":"SD/Pr/SD","app_stat_1":"SD","app_stat_2":"Pr","app_stat_3":"SD","development_cost":"0","ranks":0,"new_ranks":{"value":0,"max":3,"max_default":3},"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"flags":{"core":{"sourceId":"Item.1B82OxRKQ781NEa9"}},"_stats":{"systemId":"rmss","systemVersion":"0.0.3","coreVersion":"10.291","createdTime":1662898315491,"modifiedTime":1670979881437,"lastModifiedBy":"AKzFUDVFn0NcwQv9"},"folder":null,"sort":0,"ownership":{"default":0,"AKzFUDVFn0NcwQv9":3},"_id":"fjpVO4rOlSIbrsly"} +{"name":"Crafts","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","system":{"description":"Description here.","applicable_stats":"Ag/Me/SD","app_stat_1":"Ag","app_stat_2":"Me","app_stat_3":"SD","development_cost":"0","ranks":0,"new_ranks":{"value":0,"max":3,"max_default":3},"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"flags":{"core":{"sourceId":"Item.6nErPtcQ33WXkyH4"}},"_stats":{"systemId":"rmss","systemVersion":"0.0.3","coreVersion":"10.291","createdTime":1662897865848,"modifiedTime":1670979490274,"lastModifiedBy":"AKzFUDVFn0NcwQv9"},"folder":null,"sort":0,"ownership":{"default":0,"AKzFUDVFn0NcwQv9":3},"_id":"iKc4n9ZubKtG6SvK"} +{"name":"Science/Analytic • Engineering","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","system":{"description":"Description here.","applicable_stats":"Me/Re/In","app_stat_1":"Me","app_stat_2":"Re","app_stat_3":"In","development_cost":"0","ranks":0,"new_ranks":{"value":0,"max":3,"max_default":3},"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"flags":{"core":{"sourceId":"Item.BfDFjciYPFezmes0"}},"_stats":{"systemId":"rmss","systemVersion":"0.0.3","coreVersion":"10.291","createdTime":1662898290307,"modifiedTime":1670979792357,"lastModifiedBy":"AKzFUDVFn0NcwQv9"},"folder":null,"sort":0,"ownership":{"default":0,"AKzFUDVFn0NcwQv9":3},"_id":"jT4YOfJEKXOjW7yN"} +{"name":"Technical/Trade • General","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","system":{"description":"Description here.","applicable_stats":"Re/Me/SD","app_stat_1":"Re","app_stat_2":"Me","app_stat_3":"SD","development_cost":"0","ranks":0,"new_ranks":{"value":0,"max":3,"max_default":3},"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"flags":{"core":{"sourceId":"Item.1td9QGD20b4nkD6h"}},"_stats":{"systemId":"rmss","systemVersion":"0.0.3","coreVersion":"10.291","createdTime":1662898674902,"modifiedTime":1670979941026,"lastModifiedBy":"AKzFUDVFn0NcwQv9"},"folder":null,"sort":0,"ownership":{"default":0,"AKzFUDVFn0NcwQv9":3},"_id":"k1fYuSWiGncFKqYq"} +{"name":"Artistic • Active","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","system":{"description":"Description here.","applicable_stats":"Pr/Em/Ag","app_stat_1":"Pr","app_stat_2":"Em","app_stat_3":"Ag","development_cost":"0","ranks":0,"new_ranks":{"value":0,"max":3,"max_default":3},"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"flags":{"core":{"sourceId":"Item.cEffILww7nn8vqJ7"}},"_stats":{"systemId":"rmss","systemVersion":"0.0.3","coreVersion":"10.291","createdTime":1662897441727,"modifiedTime":1670979378056,"lastModifiedBy":"AKzFUDVFn0NcwQv9"},"folder":null,"sort":0,"ownership":{"default":0,"AKzFUDVFn0NcwQv9":3},"_id":"mM8gBxoxUWs9JwaZ"} +{"name":"Subterfuge • Attack","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","system":{"description":"Description here.","applicable_stats":"Ag/SD/In","app_stat_1":"Ag","app_stat_2":"SD","app_stat_3":"In","development_cost":"0","ranks":0,"new_ranks":{"value":0,"max":3,"max_default":3},"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"flags":{"core":{"sourceId":"Item.Zva3DO0Zmk3G5xWT"}},"_stats":{"systemId":"rmss","systemVersion":"0.0.3","coreVersion":"10.291","createdTime":1662898559045,"modifiedTime":1670979909587,"lastModifiedBy":"AKzFUDVFn0NcwQv9"},"folder":null,"sort":0,"ownership":{"default":0,"AKzFUDVFn0NcwQv9":3},"_id":"nel3MMlV6G6UbUqz"} +{"name":"Armor • Light","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","system":{"description":"Description here.","applicable_stats":"Ag/St/Ag","app_stat_1":"Ag","app_stat_2":"St","app_stat_3":"Ag","development_cost":"0","ranks":0,"new_ranks":{"value":0,"max":3,"max_default":3},"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"flags":{"core":{"sourceId":"Item.TMGapmlYutNuQaw8"}},"_stats":{"systemId":"rmss","systemVersion":"0.0.3","coreVersion":"10.291","createdTime":1662897388838,"modifiedTime":1670979375450,"lastModifiedBy":"AKzFUDVFn0NcwQv9"},"folder":null,"sort":0,"ownership":{"default":0,"AKzFUDVFn0NcwQv9":3},"_id":"oUBH3ZiQhwgyEwuC"} +{"name":"Athletic • Brawn","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","system":{"description":"Description here.","applicable_stats":"St/Co/Ag","app_stat_1":"St","app_stat_2":"Co","app_stat_3":"Ag","development_cost":"0","ranks":0,"new_ranks":{"value":0,"max":3,"max_default":3},"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"flags":{"core":{"sourceId":"Item.VufLKW42mP7RtinG"}},"_stats":{"systemId":"rmss","systemVersion":"0.0.3","coreVersion":"10.291","createdTime":1662897509473,"modifiedTime":1670979414458,"lastModifiedBy":"AKzFUDVFn0NcwQv9"},"folder":null,"sort":0,"ownership":{"default":0,"AKzFUDVFn0NcwQv9":3},"_id":"omcYQ5goZenLxv1d"} +{"name":"Awareness • Searching","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","system":{"description":"Description here.","applicable_stats":"In/Re/SD","app_stat_1":"In","app_stat_2":"Re","app_stat_3":"SD","development_cost":"0","ranks":0,"new_ranks":{"value":0,"max":3,"max_default":3},"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"flags":{"core":{"sourceId":"Item.NZl30XPdtYjHqtwp"}},"_stats":{"systemId":"rmss","systemVersion":"0.0.3","coreVersion":"10.291","createdTime":1662897647294,"modifiedTime":1670979422361,"lastModifiedBy":"AKzFUDVFn0NcwQv9"},"folder":null,"sort":0,"ownership":{"default":0,"AKzFUDVFn0NcwQv9":3},"_id":"pa35A84DZkI6I611"} +{"name":"Weapon • Support","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","system":{"description":"Description here.","applicable_stats":"Ag/St/Ag","app_stat_1":"Ag","app_stat_2":"St","app_stat_3":"Ag","development_cost":"0","ranks":0,"new_ranks":{"value":0,"max":3,"max_default":3},"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"flags":{"core":{"sourceId":"Item.8a1d0Z2MfJe0R1Eb"}},"_stats":{"systemId":"rmss","systemVersion":"0.0.3","coreVersion":"10.291","createdTime":1662898823756,"modifiedTime":1670980279746,"lastModifiedBy":"AKzFUDVFn0NcwQv9"},"folder":null,"sort":0,"ownership":{"default":0,"AKzFUDVFn0NcwQv9":3},"_id":"pkxuna2rIm1ZjyEK"} +{"name":"Armor • Heavy","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","system":{"description":"Description here.","applicable_stats":"St/Ag/St","app_stat_1":"St","app_stat_2":"Ag","app_stat_3":"St","development_cost":"0","ranks":0,"new_ranks":{"value":0,"max":3,"max_default":3},"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"flags":{"core":{"sourceId":"Item.7UA8xwzcBrKZfFk9"}},"_stats":{"systemId":"rmss","systemVersion":"0.0.3","coreVersion":"10.291","createdTime":1662897366792,"modifiedTime":1670979372753,"lastModifiedBy":"AKzFUDVFn0NcwQv9"},"folder":null,"sort":0,"ownership":{"default":0,"AKzFUDVFn0NcwQv9":3},"_id":"r6D1tALgD1wR0GGj"} +{"name":"Weapon • 2-H Energy","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","system":{"description":"Description here.","applicable_stats":"Ag/Ag/Ag","app_stat_1":"Ag","app_stat_2":"Ag","app_stat_3":"Ag","development_cost":"0","ranks":0,"new_ranks":{"value":0,"max":3,"max_default":3},"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"flags":{"core":{"sourceId":"Item.CXllZNGgTe80uZRQ"}},"_stats":{"systemId":"rmss","systemVersion":"0.0.3","coreVersion":"10.291","createdTime":1662898744329,"modifiedTime":1670980272057,"lastModifiedBy":"AKzFUDVFn0NcwQv9"},"folder":null,"sort":0,"ownership":{"default":0,"AKzFUDVFn0NcwQv9":3},"_id":"rw987ZssCMcfx8n7"} +{"name":"Urban","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","system":{"description":"Description here.","applicable_stats":"In/Pr/Re","app_stat_1":"In","app_stat_2":"Pr","app_stat_3":"Re","development_cost":"0","ranks":0,"new_ranks":{"value":0,"max":3,"max_default":3},"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"flags":{"core":{"sourceId":"Item.JAY4cM0lv1wZm3vo"}},"_stats":{"systemId":"rmss","systemVersion":"0.0.3","coreVersion":"10.291","createdTime":1662898721300,"modifiedTime":1670980058009,"lastModifiedBy":"AKzFUDVFn0NcwQv9"},"folder":null,"sort":0,"ownership":{"default":0,"AKzFUDVFn0NcwQv9":3},"_id":"sV50mwPLEO7ju9nT"} +{"name":"Communcations","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","system":{"description":"Description here.","applicable_stats":"Re/Me/Em","app_stat_1":"Re","app_stat_2":"Me","app_stat_3":"Em","development_cost":"0","ranks":0,"new_ranks":{"value":0,"max":3,"max_default":3},"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"flags":{"core":{"sourceId":"Item.fh63pdckz6VYGAFc"}},"_stats":{"systemId":"rmss","systemVersion":"0.0.3","coreVersion":"10.291","createdTime":1662897838640,"modifiedTime":1670979489034,"lastModifiedBy":"AKzFUDVFn0NcwQv9"},"folder":null,"sort":0,"ownership":{"default":0,"AKzFUDVFn0NcwQv9":3},"_id":"tXyzk5v0PTLAxmFk"} +{"name":"Body Development","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","system":{"description":"Description here.","applicable_stats":"Co/SD/Co","app_stat_1":"Co","app_stat_2":"SD","app_stat_3":"Co","development_cost":"0","ranks":0,"new_ranks":{"value":0,"max":3,"max_default":3},"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"flags":{"core":{"sourceId":"Item.cWtQ0YU3kGBhL8iR"}},"_stats":{"systemId":"rmss","systemVersion":"0.0.3","coreVersion":"10.291","createdTime":1662897724809,"modifiedTime":1670979475450,"lastModifiedBy":"AKzFUDVFn0NcwQv9"},"folder":null,"sort":0,"ownership":{"default":0,"AKzFUDVFn0NcwQv9":3},"_id":"y6Tq2DSvZm0dIZ7A"} +{"name":"Science/Analytic • Specialized","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","system":{"description":"Description here.","applicable_stats":"Re/Me/Re","app_stat_1":"Re","app_stat_2":"Me","app_stat_3":"Re","development_cost":"0","ranks":0,"new_ranks":{"value":0,"max":3,"max_default":3},"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"flags":{"core":{"sourceId":"Item.BfDFjciYPFezmes0"}},"_stats":{"systemId":"rmss","systemVersion":"0.0.3","coreVersion":"10.291","createdTime":1662898290307,"modifiedTime":1670979851643,"lastModifiedBy":"AKzFUDVFn0NcwQv9"},"folder":null,"sort":0,"ownership":{"default":0,"AKzFUDVFn0NcwQv9":3},"_id":"yHwwkDNq6DuylHYa"} +{"name":"Science/Analytic • Technical","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","system":{"description":"Description here.","applicable_stats":"Re/Me/Ag","app_stat_1":"Re","app_stat_2":"Me","app_stat_3":"Ag","development_cost":"0","ranks":0,"new_ranks":{"value":0,"max":3,"max_default":3},"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"flags":{"core":{"sourceId":"Item.BfDFjciYPFezmes0"}},"_stats":{"systemId":"rmss","systemVersion":"0.0.3","coreVersion":"10.291","createdTime":1662898290307,"modifiedTime":1670979874641,"lastModifiedBy":"AKzFUDVFn0NcwQv9"},"folder":null,"sort":0,"ownership":{"default":0,"AKzFUDVFn0NcwQv9":3},"_id":"z1Z1K02tzG1JU5wN"} +{"name":"Mind Point Development","type":"skill_category","img":"systems/rmss/assets/default/skill_category.svg","system":{"description":"Description here.","applicable_stats":"SD","app_stat_1":"SD","app_stat_2":"None","app_stat_3":"None","development_cost":"0","ranks":0,"new_ranks":{"value":0,"max":3,"max_default":3},"rank_bonus":0,"stat_bonus":0,"prof_bonus":0,"special_bonus_1":0,"special_bonus_2":0,"total_bonus":0,"favorite":false},"effects":[],"flags":{"core":{"sourceId":"Item.Q7rKLS4gJwH2Lygw"}},"_stats":{"systemId":"rmss","systemVersion":"0.0.3","coreVersion":"10.291","createdTime":1662898277091,"modifiedTime":1670979677773,"lastModifiedBy":"AKzFUDVFn0NcwQv9"},"folder":null,"sort":0,"ownership":{"default":0,"AKzFUDVFn0NcwQv9":3},"_id":"zYUB46z7lYODAIK2"} diff --git a/rmss/rmss.css b/rmss/rmss.css index 04c8b12..653de51 100644 --- a/rmss/rmss.css +++ b/rmss/rmss.css @@ -11,7 +11,6 @@ padding-bottom: 3px; display: flex; justify-content: flex-end; - flex-direction: column; justify-content: center; } .skillcat-grid-container > div:nth-child(24n+1), @@ -34,7 +33,6 @@ padding-bottom: 3px; display: flex; justify-content: flex-end; - flex-direction: column; justify-content: center; background-image: linear-gradient(rgba(0, 0, 0, 0.1) 0 0); } @@ -46,6 +44,11 @@ .container { display: flex; } +.rm-heading { + font-size: 1em; + font-family: PragRoman; + border-bottom: 0px; +} .actor-icon { flex-shrink: 1; } @@ -505,6 +508,23 @@ flex-direction: column; justify-content: center; } +.dice-roller-options { + display: flex; + flex-direction: column; +} +.dice-roller-item { + display: flex; + align-items: center; + margin: 5px; +} +.dice-roller-item div { + flex: 1; +} +.roll-button-container { + display: flex; + flex-direction: column; + justify-content: flex-end; +} .sheet form { display: flex; flex-direction: column; diff --git a/rmss/rmss.js b/rmss/rmss.js index 46cc9f7..1894e87 100644 --- a/rmss/rmss.js +++ b/rmss/rmss.js @@ -1,5 +1,6 @@ // Import Configuration Object import { rmss } from "./module/config.js"; +//import { registerGetSceneControlButtonsHook } from "./module/controls.js"; // Import document classes. import { RMSSActor } from "./module/documents/actor.js"; @@ -16,7 +17,8 @@ import RMSSSkillCategorySheet from "./module/sheets/skills/rmss_skill_category_s import RMSSSkillSheet from "./module/sheets/skills/rmss_skill_sheet.js"; import RMSSPlayerSheet from "./module/sheets/actors/rmss_player_sheet.js"; -import RMSSActorSheetConfig from "./module/sheets/actors/rmss_player_sheet_config.js"; +import RMSSToolsSCImporter from "./module/sheets/apps/rmss_import_skill_categories.js"; +import RMSSToolsDiceRoller from "./module/sheets/apps/rmss_dice_roller.js"; /** Preload handlebars templates for character sheets */ async function preloadHandlebarsTemplates() { @@ -41,11 +43,14 @@ async function preloadHandlebarsTemplates() { "systems/rmss/templates/sheets/actors/parts/actor-spells.html", "systems/rmss/templates/sheets/actors/parts/actor-fav-spells.html", "systems/rmss/templates/sheets/actors/parts/actor-fav-items.html", - "systems/rmss/templates/sheets/actors/apps/actor-settings.html" + "systems/rmss/templates/sheets/apps/app_skill_category_importer.html" ]; return loadTemplates(templatePaths); } +// Register Scene Controls +// registerGetSceneControlButtonsHook(); + // Hook the init function and set up our system Hooks.once("init", function() { console.log("rmss | Initialising Rolemaster Standard System"); @@ -56,7 +61,8 @@ Hooks.once("init", function() { RMSSActor, RMSSItem, applications: { - RMSSActorSheetConfig + RMSSToolsSCImporter, + RMSSToolsDiceRoller } }; @@ -64,6 +70,14 @@ Hooks.once("init", function() { CONFIG.Actor.documentClass = RMSSActor; CONFIG.Item.documentClass = RMSSItem; + // Add PragRoman Font + CONFIG.fontDefinitions["PragRoman"] = { + editor: true, + fonts: [ + {urls: ["systems/rmss/assets/fonts/PragRoman.woff2"]} + ] + }; + // Make Config Data Available CONFIG.rmss = rmss; diff --git a/rmss/system.json b/rmss/system.json index 5955493..d7a0870 100644 --- a/rmss/system.json +++ b/rmss/system.json @@ -2,19 +2,31 @@ "name": "rmss", "title": "Rolemaster Standard System", "description": "The Rolemaster Standard System system for FoundryVTT.", - "author": "Cynicide", + "authors": [{ + "name": "Cynicide" + }], "version": "0.0.3", - "minimumCoreVersion": "0.8.6", - "compatibleCoreVersion": "10", + "compatibility": { + "minimum": 10, + "verified": "11.315", + "maximum": 11 + }, "esmodules":[ "rmss.js" ], "styles": ["rmss.css"], "packs": [ { - "name": "skill_categories", - "label": "Skill Categories", + "name": "rmss_skill_categories", + "label": "RMSS Skill Categories", "system": "rmss", - "path": "./packs/skill_categories.db", + "path": "./packs/rmss_skill_categories.db", + "type": "Item" + }, + { + "name": "smss_skill_categories", + "label": "Spacemaster Skill Categories", + "system": "rmss", + "path": "./packs/smss_skill_categories.db", "type": "Item" } ], diff --git a/rmss/templates/chat/chat_dice_roll.html b/rmss/templates/chat/chat_dice_roll.html new file mode 100644 index 0000000..64a5896 --- /dev/null +++ b/rmss/templates/chat/chat_dice_roll.html @@ -0,0 +1,28 @@ +
+
+ Original Roll: +

{{ baseroll.result }}

+
+ {{#if highopen }} +
+ Rolled over 95 - High Open-Ended! + {{#each opeendedresults as |rollresult|}} +

{{ rollresult }}

+ {{/each}} +
+ {{/if}} + + {{#if lowopen }} +
+ Rolled under 6 - Low Open-Ended! + {{#each opeendedresults as |rollresult|}} +

{{ rollresult }}

+ {{/each}} +
+ {{/if}} + +
+ Total: +

{{ total }}

+
+
\ No newline at end of file diff --git a/rmss/templates/sheets/actors/parts/actor-skill-categories.html b/rmss/templates/sheets/actors/parts/actor-skill-categories.html index 50f7b77..f971ad1 100644 --- a/rmss/templates/sheets/actors/parts/actor-skill-categories.html +++ b/rmss/templates/sheets/actors/parts/actor-skill-categories.html @@ -34,9 +34,10 @@
{{skill_category.system.special_bonus_1}}
{{skill_category.system.special_bonus_2}}
{{skill_category.system.total_bonus}}
-
+
+
{{/each}}
\ No newline at end of file diff --git a/rmss/templates/sheets/apps/app_dice_roller.html b/rmss/templates/sheets/apps/app_dice_roller.html new file mode 100644 index 0000000..e3dd5d4 --- /dev/null +++ b/rmss/templates/sheets/apps/app_dice_roller.html @@ -0,0 +1,27 @@ +
+
+
+
+
Rolling for:
{{itemName}}
+
+
+
Character Bonus:
{{characterBonus}}
+
+
+
Misc Bonus:
+
+
+
Select Roll Type:
+
+ +
+
+
+ +
+
+ \ No newline at end of file diff --git a/rmss/templates/sheets/apps/app_skill_category_importer.html b/rmss/templates/sheets/apps/app_skill_category_importer.html new file mode 100644 index 0000000..d6187d1 --- /dev/null +++ b/rmss/templates/sheets/apps/app_skill_category_importer.html @@ -0,0 +1,17 @@ +
+
+

Import Skill Categories

+
+ WARNING: This will erase your existing Skill Categories and import all Skill Categories from the selected Compendium. +
+
+ Select Compendium: +
+
+ +
+ +
+
\ No newline at end of file