forked from GitHub-Mirrors/foundry-sw5e
Add files via upload
This commit is contained in:
parent
71fe2eb170
commit
11ad5fd923
5 changed files with 2171 additions and 0 deletions
32
gulpfile.js
Normal file
32
gulpfile.js
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
const gulp = require('gulp');
|
||||||
|
const less = require('gulp-less');
|
||||||
|
|
||||||
|
/* ----------------------------------------- */
|
||||||
|
/* Compile LESS
|
||||||
|
/* ----------------------------------------- */
|
||||||
|
|
||||||
|
const SW5E_LESS = ["less/*.less"];
|
||||||
|
function compileLESS() {
|
||||||
|
return gulp.src("less/sw5e.less")
|
||||||
|
.pipe(less())
|
||||||
|
.pipe(gulp.dest("./"))
|
||||||
|
}
|
||||||
|
const css = gulp.series(compileLESS);
|
||||||
|
|
||||||
|
/* ----------------------------------------- */
|
||||||
|
/* Watch Updates
|
||||||
|
/* ----------------------------------------- */
|
||||||
|
|
||||||
|
function watchUpdates() {
|
||||||
|
gulp.watch(SW5E_LESS, css);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ----------------------------------------- */
|
||||||
|
/* Export Tasks
|
||||||
|
/* ----------------------------------------- */
|
||||||
|
|
||||||
|
exports.default = gulp.series(
|
||||||
|
gulp.parallel(css),
|
||||||
|
watchUpdates
|
||||||
|
);
|
||||||
|
exports.css = css;
|
206
sw5e.js
Normal file
206
sw5e.js
Normal file
|
@ -0,0 +1,206 @@
|
||||||
|
/**
|
||||||
|
* The Star Wars 5th Edition game system for Foundry Virtual Tabletop
|
||||||
|
* Author: Kakeman89
|
||||||
|
* Software License: GNU GPLv3
|
||||||
|
* Content License: https://media.wizards.com/2016/downloads/SW5ERD-OGL_V5.1.pdf
|
||||||
|
* Repository: https://gitlab.com/foundrynet/sw5e
|
||||||
|
* Issue Tracker: https://gitlab.com/foundrynet/sw5e/issues
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Import Modules
|
||||||
|
import { SW5E } from "./module/config.js";
|
||||||
|
import { registerSystemSettings } from "./module/settings.js";
|
||||||
|
import { preloadHandlebarsTemplates } from "./module/templates.js";
|
||||||
|
import { _getInitiativeFormula } from "./module/combat.js";
|
||||||
|
import { measureDistance, getBarAttribute } from "./module/canvas.js";
|
||||||
|
import { Actor5e } from "./module/actor/entity.js";
|
||||||
|
import { ActorSheet5eCharacter } from "./module/actor/sheets/character.js";
|
||||||
|
import { Item5e } from "./module/item/entity.js";
|
||||||
|
import { ItemSheet5e } from "./module/item/sheet.js";
|
||||||
|
import { ActorSheet5eNPC } from "./module/actor/sheets/npc.js";
|
||||||
|
import { Dice5e } from "./module/dice.js";
|
||||||
|
import * as chat from "./module/chat.js";
|
||||||
|
import * as migrations from "./module/migration.js";
|
||||||
|
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
/* Foundry VTT Initialization */
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
|
||||||
|
Hooks.once("init", function() {
|
||||||
|
console.log(`SW5e | Initializing Star Wars 5th Edition System\n${SW5E.ASCII}`);
|
||||||
|
|
||||||
|
// Create a SW5E namespace within the game global
|
||||||
|
game.sw5e = {
|
||||||
|
Actor5e,
|
||||||
|
Dice5e,
|
||||||
|
Item5e,
|
||||||
|
migrations,
|
||||||
|
rollItemMacro
|
||||||
|
};
|
||||||
|
|
||||||
|
// Record Configuration Values
|
||||||
|
CONFIG.SW5E = SW5E;
|
||||||
|
CONFIG.Actor.entityClass = Actor5e;
|
||||||
|
CONFIG.Item.entityClass = Item5e;
|
||||||
|
|
||||||
|
// Register System Settings
|
||||||
|
registerSystemSettings();
|
||||||
|
|
||||||
|
// Patch Core Functions
|
||||||
|
Combat.prototype._getInitiativeFormula = _getInitiativeFormula;
|
||||||
|
|
||||||
|
// Register sheet application classes
|
||||||
|
Actors.unregisterSheet("core", ActorSheet);
|
||||||
|
Actors.registerSheet("sw5e", ActorSheet5eCharacter, { types: ["character"], makeDefault: true });
|
||||||
|
Actors.registerSheet("sw5e", ActorSheet5eNPC, { types: ["npc"], makeDefault: true });
|
||||||
|
Items.unregisterSheet("core", ItemSheet);
|
||||||
|
Items.registerSheet("sw5e", ItemSheet5e, {makeDefault: true});
|
||||||
|
|
||||||
|
// Preload Handlebars Templates
|
||||||
|
preloadHandlebarsTemplates();
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
/* Foundry VTT Setup */
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This function runs after game data has been requested and loaded from the servers, so entities exist
|
||||||
|
*/
|
||||||
|
Hooks.once("setup", function() {
|
||||||
|
|
||||||
|
// Localize CONFIG objects once up-front
|
||||||
|
const toLocalize = [
|
||||||
|
"abilities", "alignments", "conditionTypes", "consumableTypes", "currencies", "damageTypes", "distanceUnits", "equipmentTypes",
|
||||||
|
"healingTypes", "itemActionTypes", "limitedUsePeriods", "senses", "skills", "powerComponents", "powerLevels", "powerPreparationModes",
|
||||||
|
"powerSchools", "powerScalingModes", "targetTypes", "timePeriods", "weaponProperties", "weaponTypes", "languages", "polymorphSettings",
|
||||||
|
"armorProficiencies", "weaponProficiencies", "toolProficiencies", "abilityActivationTypes", "actorSizes", "proficiencyLevels"
|
||||||
|
];
|
||||||
|
for ( let o of toLocalize ) {
|
||||||
|
CONFIG.SW5E[o] = Object.entries(CONFIG.SW5E[o]).reduce((obj, e) => {
|
||||||
|
obj[e[0]] = game.i18n.localize(e[1]);
|
||||||
|
return obj;
|
||||||
|
}, {});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Once the entire VTT framework is initialized, check to see if we should perform a data migration
|
||||||
|
*/
|
||||||
|
Hooks.once("ready", function() {
|
||||||
|
|
||||||
|
// Determine whether a system migration is required and feasible
|
||||||
|
const currentVersion = game.settings.get("sw5e", "systemMigrationVersion");
|
||||||
|
const NEEDS_MIGRATION_VERSION = 0.84;
|
||||||
|
const COMPATIBLE_MIGRATION_VERSION = 0.80;
|
||||||
|
let needMigration = (currentVersion < NEEDS_MIGRATION_VERSION) || (currentVersion === null);
|
||||||
|
const canMigrate = currentVersion >= COMPATIBLE_MIGRATION_VERSION;
|
||||||
|
|
||||||
|
// Perform the migration
|
||||||
|
if ( needMigration && game.user.isGM ) {
|
||||||
|
if ( currentVersion && (currentVersion < COMPATIBLE_MIGRATION_VERSION) ) {
|
||||||
|
ui.notifications.error(`Your SW5E system data is from too old a Foundry version and cannot be reliably migrated to the latest version. The process will be attempted, but errors may occur.`, {permanent: true});
|
||||||
|
}
|
||||||
|
migrations.migrateWorld();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Wait to register hotbar drop hook on ready so that modules could register earlier if they want to
|
||||||
|
Hooks.on("hotbarDrop", (bar, data, slot) => create5eMacro(data, slot));
|
||||||
|
});
|
||||||
|
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
/* Canvas Initialization */
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
|
||||||
|
Hooks.on("canvasInit", function() {
|
||||||
|
|
||||||
|
// Extend Diagonal Measurement
|
||||||
|
canvas.grid.diagonalRule = game.settings.get("sw5e", "diagonalMovement");
|
||||||
|
SquareGrid.prototype.measureDistance = measureDistance;
|
||||||
|
|
||||||
|
// Extend Token Resource Bars
|
||||||
|
Token.prototype.getBarAttribute = getBarAttribute;
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
/* Other Hooks */
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
|
||||||
|
Hooks.on("renderChatMessage", (app, html, data) => {
|
||||||
|
|
||||||
|
// Display action buttons
|
||||||
|
chat.displayChatActionButtons(app, html, data);
|
||||||
|
|
||||||
|
// Highlight critical success or failure die
|
||||||
|
chat.highlightCriticalSuccessFailure(app, html, data);
|
||||||
|
|
||||||
|
// Optionally collapse the content
|
||||||
|
if (game.settings.get("sw5e", "autoCollapseItemCards")) html.find(".card-content").hide();
|
||||||
|
});
|
||||||
|
Hooks.on("getChatLogEntryContext", chat.addChatMessageContextOptions);
|
||||||
|
Hooks.on("renderChatLog", (app, html, data) => Item5e.chatListeners(html));
|
||||||
|
Hooks.on('getActorDirectoryEntryContext', Actor5e.addDirectoryContextOptions);
|
||||||
|
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
/* Hotbar Macros */
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a Macro from an Item drop.
|
||||||
|
* Get an existing item macro if one exists, otherwise create a new one.
|
||||||
|
* @param {Object} data The dropped data
|
||||||
|
* @param {number} slot The hotbar slot to use
|
||||||
|
* @returns {Promise}
|
||||||
|
*/
|
||||||
|
async function create5eMacro(data, slot) {
|
||||||
|
if ( data.type !== "Item" ) return;
|
||||||
|
if (!( "data" in data ) ) return ui.notifications.warn("You can only create macro buttons for owned Items");
|
||||||
|
const item = data.data;
|
||||||
|
|
||||||
|
// Create the macro command
|
||||||
|
const command = `game.sw5e.rollItemMacro("${item.name}");`;
|
||||||
|
let macro = game.macros.entities.find(m => (m.name === item.name) && (m.command === command));
|
||||||
|
if ( !macro ) {
|
||||||
|
macro = await Macro.create({
|
||||||
|
name: item.name,
|
||||||
|
type: "script",
|
||||||
|
img: item.img,
|
||||||
|
command: command,
|
||||||
|
flags: {"sw5e.itemMacro": true}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
game.user.assignHotbarMacro(macro, slot);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -------------------------------------------- */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a Macro from an Item drop.
|
||||||
|
* Get an existing item macro if one exists, otherwise create a new one.
|
||||||
|
* @param {string} itemName
|
||||||
|
* @return {Promise}
|
||||||
|
*/
|
||||||
|
function rollItemMacro(itemName) {
|
||||||
|
const speaker = ChatMessage.getSpeaker();
|
||||||
|
let actor;
|
||||||
|
if ( speaker.token ) actor = game.actors.tokens[speaker.token];
|
||||||
|
if ( !actor ) actor = game.actors.get(speaker.actor);
|
||||||
|
|
||||||
|
// Get matching items
|
||||||
|
const items = actor ? actor.items.filter(i => i.name === itemName) : [];
|
||||||
|
if ( items.length > 1 ) {
|
||||||
|
ui.notifications.warn(`Your controlled Actor ${actor.name} has more than one Item with name ${itemName}. The first matched item will be chosen.`);
|
||||||
|
} else if ( items.length === 0 ) {
|
||||||
|
return ui.notifications.warn(`Your controlled Actor does not have an item named ${itemName}`);
|
||||||
|
}
|
||||||
|
const item = items[0];
|
||||||
|
|
||||||
|
// Trigger the item roll
|
||||||
|
if ( item.data.type === "power" ) return actor.usePower(item);
|
||||||
|
return item.roll();
|
||||||
|
}
|
76
system.json
Normal file
76
system.json
Normal file
|
@ -0,0 +1,76 @@
|
||||||
|
{
|
||||||
|
"name": "sw5e",
|
||||||
|
"title": "Star Wars 5th Edition",
|
||||||
|
"description": "A comprehensive game system for running games of Star wars 5th Edition in the Foundry VTT environment.",
|
||||||
|
"version": 0.88,
|
||||||
|
"author": "Kakeman89",
|
||||||
|
"scripts": [],
|
||||||
|
"esmodules": ["sw5e.js"],
|
||||||
|
"styles": ["sw5e.css"],
|
||||||
|
"packs": [
|
||||||
|
{
|
||||||
|
"name": "heroes",
|
||||||
|
"label": "Starter Heroes",
|
||||||
|
"system": "dnd5e",
|
||||||
|
"path": "./packs/heroes.db",
|
||||||
|
"entity": "Actor"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "beasts",
|
||||||
|
"label": "Beasts",
|
||||||
|
"system": "sw5e",
|
||||||
|
"path": "./packs/beasts.db",
|
||||||
|
"entity": "Actor"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "items",
|
||||||
|
"label": "Items",
|
||||||
|
"system": "sw5e",
|
||||||
|
"path": "./packs/items.db",
|
||||||
|
"entity": "Item"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "tradegoods",
|
||||||
|
"label": "Trade Goods (SRD)",
|
||||||
|
"system": "sw5e",
|
||||||
|
"path": "./packs/tradegoods.db",
|
||||||
|
"entity": "Item"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "powers",
|
||||||
|
"label": "Casting",
|
||||||
|
"system": "sw5e",
|
||||||
|
"path": "./packs/powers.db",
|
||||||
|
"entity": "Item"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "classes",
|
||||||
|
"label": "Classes",
|
||||||
|
"system": "sw5e",
|
||||||
|
"path": "./packs/classes.db",
|
||||||
|
"entity": "Item"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "classfeatures",
|
||||||
|
"label": "Class Features (SRD)",
|
||||||
|
"system": "sw5e",
|
||||||
|
"path": "./packs/classfeatures.db",
|
||||||
|
"entity": "Item"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"languages": [
|
||||||
|
{
|
||||||
|
"lang": "en",
|
||||||
|
"name": "English",
|
||||||
|
"path": "lang/en.json"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"socket": true,
|
||||||
|
"initiative": "1d20 + @abilities.dex.mod + @attributes.init.value + (@abilities.dex.value / 100)",
|
||||||
|
"gridDistance": 5,
|
||||||
|
"gridUnits": "ft",
|
||||||
|
"primaryTokenAttribute": "attributes.hp",
|
||||||
|
"secondaryTokenAttribute": null,
|
||||||
|
"minimumCoreVersion": "0.5.2",
|
||||||
|
"compatibleCoreVersion": "0.6.4"
|
||||||
|
}
|
488
template.json
Normal file
488
template.json
Normal file
|
@ -0,0 +1,488 @@
|
||||||
|
{
|
||||||
|
"Actor": {
|
||||||
|
"types": ["character", "npc"],
|
||||||
|
"templates": {
|
||||||
|
"common": {
|
||||||
|
"abilities": {
|
||||||
|
"str": {
|
||||||
|
"value": 10,
|
||||||
|
"proficient": 0
|
||||||
|
},
|
||||||
|
"dex": {
|
||||||
|
"value": 10,
|
||||||
|
"proficient": 0
|
||||||
|
},
|
||||||
|
"con": {
|
||||||
|
"value": 10,
|
||||||
|
"proficient": 0
|
||||||
|
},
|
||||||
|
"int": {
|
||||||
|
"value": 10,
|
||||||
|
"proficient": 0
|
||||||
|
},
|
||||||
|
"wis": {
|
||||||
|
"value": 10,
|
||||||
|
"proficient": 0
|
||||||
|
},
|
||||||
|
"cha": {
|
||||||
|
"value": 10,
|
||||||
|
"proficient": 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"attributes": {
|
||||||
|
"ac": {
|
||||||
|
"min": 0
|
||||||
|
},
|
||||||
|
"hp": {
|
||||||
|
"value": 10,
|
||||||
|
"min": 0,
|
||||||
|
"max": 10,
|
||||||
|
"temp": 0,
|
||||||
|
"tempmax": 0
|
||||||
|
},
|
||||||
|
"init": {
|
||||||
|
"value": 0,
|
||||||
|
"bonus": 0
|
||||||
|
},
|
||||||
|
"speed": {
|
||||||
|
"value": "30 ft",
|
||||||
|
"special": ""
|
||||||
|
},
|
||||||
|
"powercasting": "int"
|
||||||
|
},
|
||||||
|
"details": {
|
||||||
|
"alignment": "",
|
||||||
|
"biography": {
|
||||||
|
"value": "",
|
||||||
|
"public": ""
|
||||||
|
},
|
||||||
|
"race": ""
|
||||||
|
},
|
||||||
|
"skills": {
|
||||||
|
"acr": {
|
||||||
|
"value": 0,
|
||||||
|
"ability": "dex"
|
||||||
|
},
|
||||||
|
"ani": {
|
||||||
|
"value": 0,
|
||||||
|
"ability": "wis"
|
||||||
|
},
|
||||||
|
"ath": {
|
||||||
|
"value": 0,
|
||||||
|
"ability": "str"
|
||||||
|
},
|
||||||
|
"dec": {
|
||||||
|
"value": 0,
|
||||||
|
"ability": "cha"
|
||||||
|
},
|
||||||
|
"ins": {
|
||||||
|
"value": 0,
|
||||||
|
"ability": "wis"
|
||||||
|
},
|
||||||
|
"itm": {
|
||||||
|
"value": 0,
|
||||||
|
"ability": "cha"
|
||||||
|
},
|
||||||
|
"inv": {
|
||||||
|
"value": 0,
|
||||||
|
"ability": "int"
|
||||||
|
},
|
||||||
|
"lor": {
|
||||||
|
"value": 0,
|
||||||
|
"ability": "int"
|
||||||
|
},
|
||||||
|
"med": {
|
||||||
|
"value": 0,
|
||||||
|
"ability": "wis"
|
||||||
|
},
|
||||||
|
"nat": {
|
||||||
|
"value": 0,
|
||||||
|
"ability": "int"
|
||||||
|
},
|
||||||
|
"pil": {
|
||||||
|
"value": 0,
|
||||||
|
"ability": "int"
|
||||||
|
},
|
||||||
|
"prc": {
|
||||||
|
"value": 0,
|
||||||
|
"ability": "wis"
|
||||||
|
},
|
||||||
|
"prf": {
|
||||||
|
"value": 0,
|
||||||
|
"ability": "cha"
|
||||||
|
},
|
||||||
|
"per": {
|
||||||
|
"value": 0,
|
||||||
|
"ability": "cha"
|
||||||
|
},
|
||||||
|
"slt": {
|
||||||
|
"value": 0,
|
||||||
|
"ability": "dex"
|
||||||
|
},
|
||||||
|
"ste": {
|
||||||
|
"value": 0,
|
||||||
|
"ability": "dex"
|
||||||
|
},
|
||||||
|
"sur": {
|
||||||
|
"value": 0,
|
||||||
|
"ability": "wis"
|
||||||
|
},
|
||||||
|
"tec": {
|
||||||
|
"value": 0,
|
||||||
|
"ability": "int"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"traits": {
|
||||||
|
"size": "med",
|
||||||
|
"senses": "",
|
||||||
|
"languages": {
|
||||||
|
"value": [],
|
||||||
|
"custom": ""
|
||||||
|
},
|
||||||
|
"di": {
|
||||||
|
"value": [],
|
||||||
|
"custom": ""
|
||||||
|
},
|
||||||
|
"dr": {
|
||||||
|
"value": [],
|
||||||
|
"custom": ""
|
||||||
|
},
|
||||||
|
"dv": {
|
||||||
|
"value": [],
|
||||||
|
"custom": ""
|
||||||
|
},
|
||||||
|
"ci": {
|
||||||
|
"value": [],
|
||||||
|
"custom": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"currency": {
|
||||||
|
"gc": 0
|
||||||
|
},
|
||||||
|
"powers": {
|
||||||
|
"power1": {
|
||||||
|
"value": 0,
|
||||||
|
"max": 0,
|
||||||
|
"override": null
|
||||||
|
},
|
||||||
|
"power2": {
|
||||||
|
"value": 0,
|
||||||
|
"max": 0,
|
||||||
|
"override": null
|
||||||
|
},
|
||||||
|
"power3": {
|
||||||
|
"value": 0,
|
||||||
|
"max": 0,
|
||||||
|
"override": null
|
||||||
|
},
|
||||||
|
"power4": {
|
||||||
|
"value": 0,
|
||||||
|
"max": 0,
|
||||||
|
"override": null
|
||||||
|
},
|
||||||
|
"power5": {
|
||||||
|
"value": 0,
|
||||||
|
"max": 0,
|
||||||
|
"override": null
|
||||||
|
},
|
||||||
|
"power6": {
|
||||||
|
"value": 0,
|
||||||
|
"max": 0,
|
||||||
|
"override": null
|
||||||
|
},
|
||||||
|
"power7": {
|
||||||
|
"value": 0,
|
||||||
|
"max": 0,
|
||||||
|
"override": null
|
||||||
|
},
|
||||||
|
"power8": {
|
||||||
|
"value": 0,
|
||||||
|
"max": 0,
|
||||||
|
"override": null
|
||||||
|
},
|
||||||
|
"power9": {
|
||||||
|
"value": 0,
|
||||||
|
"max": 0,
|
||||||
|
"override": null
|
||||||
|
},
|
||||||
|
"pact": {
|
||||||
|
"value": 0,
|
||||||
|
"max": 0,
|
||||||
|
"override": null
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"bonuses": {
|
||||||
|
"mwak": {
|
||||||
|
"attack": "",
|
||||||
|
"damage": ""
|
||||||
|
},
|
||||||
|
"rwak": {
|
||||||
|
"attack": "",
|
||||||
|
"damage": ""
|
||||||
|
},
|
||||||
|
"mpak": {
|
||||||
|
"attack": "",
|
||||||
|
"damage": ""
|
||||||
|
},
|
||||||
|
"rpak": {
|
||||||
|
"attack": "",
|
||||||
|
"damage": ""
|
||||||
|
},
|
||||||
|
"abilities": {
|
||||||
|
"check": "",
|
||||||
|
"save": "",
|
||||||
|
"skill": ""
|
||||||
|
},
|
||||||
|
"power": {
|
||||||
|
"dc": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"character": {
|
||||||
|
"templates": ["common"],
|
||||||
|
"attributes": {
|
||||||
|
"death": {
|
||||||
|
"success": 0,
|
||||||
|
"failure": 0
|
||||||
|
},
|
||||||
|
"exhaustion": 0,
|
||||||
|
"inspiration": 0
|
||||||
|
},
|
||||||
|
"details": {
|
||||||
|
"background": "",
|
||||||
|
"xp": {
|
||||||
|
"value": 0,
|
||||||
|
"min": 0,
|
||||||
|
"max": 300
|
||||||
|
},
|
||||||
|
"trait": "",
|
||||||
|
"ideal": "",
|
||||||
|
"bond": "",
|
||||||
|
"flaw": ""
|
||||||
|
},
|
||||||
|
"resources": {
|
||||||
|
"primary": {
|
||||||
|
"value": 0,
|
||||||
|
"max": 0,
|
||||||
|
"sr": 0,
|
||||||
|
"lr": 0
|
||||||
|
},
|
||||||
|
"secondary": {
|
||||||
|
"value": 0,
|
||||||
|
"max": 0,
|
||||||
|
"sr": 0,
|
||||||
|
"lr": 0
|
||||||
|
},
|
||||||
|
"tertiary": {
|
||||||
|
"value": 0,
|
||||||
|
"max": 0,
|
||||||
|
"sr": 0,
|
||||||
|
"lr": 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"traits": {
|
||||||
|
"weaponProf": {
|
||||||
|
"value": [],
|
||||||
|
"custom": ""
|
||||||
|
},
|
||||||
|
"armorProf": {
|
||||||
|
"value": [],
|
||||||
|
"custom": ""
|
||||||
|
},
|
||||||
|
"toolProf": {
|
||||||
|
"value": [],
|
||||||
|
"custom": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"npc": {
|
||||||
|
"templates": ["common"],
|
||||||
|
"details": {
|
||||||
|
"type": "",
|
||||||
|
"environment": "",
|
||||||
|
"cr": 1,
|
||||||
|
"powerLevel": 0,
|
||||||
|
"xp": {
|
||||||
|
"value": 10
|
||||||
|
},
|
||||||
|
"source": ""
|
||||||
|
},
|
||||||
|
"resources": {
|
||||||
|
"legact": {
|
||||||
|
"value": 0,
|
||||||
|
"max": 0
|
||||||
|
},
|
||||||
|
"legres": {
|
||||||
|
"value": 0,
|
||||||
|
"max": 0
|
||||||
|
},
|
||||||
|
"lair": {
|
||||||
|
"value": 0,
|
||||||
|
"initiative": 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Item": {
|
||||||
|
"types": ["weapon", "equipment", "consumable", "tool", "loot", "class", "power", "feat", "backpack"],
|
||||||
|
"templates": {
|
||||||
|
"itemDescription": {
|
||||||
|
"description": {
|
||||||
|
"value": "",
|
||||||
|
"chat": "",
|
||||||
|
"unidentified": ""
|
||||||
|
},
|
||||||
|
"source": ""
|
||||||
|
},
|
||||||
|
"physicalItem": {
|
||||||
|
"quantity": 1,
|
||||||
|
"weight": 0,
|
||||||
|
"price": 0,
|
||||||
|
"attuned": false,
|
||||||
|
"equipped": false,
|
||||||
|
"rarity": "",
|
||||||
|
"identified": true
|
||||||
|
},
|
||||||
|
"activatedEffect": {
|
||||||
|
"activation": {
|
||||||
|
"type": "",
|
||||||
|
"cost": 0,
|
||||||
|
"condition": ""
|
||||||
|
},
|
||||||
|
"duration": {
|
||||||
|
"value": null,
|
||||||
|
"units": ""
|
||||||
|
},
|
||||||
|
"target": {
|
||||||
|
"value": null,
|
||||||
|
"units": "",
|
||||||
|
"type": ""
|
||||||
|
},
|
||||||
|
"range": {
|
||||||
|
"value": null,
|
||||||
|
"long": null,
|
||||||
|
"units": ""
|
||||||
|
},
|
||||||
|
"uses": {
|
||||||
|
"value": 0,
|
||||||
|
"max": 0,
|
||||||
|
"per": null
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"action": {
|
||||||
|
"ability": null,
|
||||||
|
"actionType": null,
|
||||||
|
"attackBonus": 0,
|
||||||
|
"chatFlavor": "",
|
||||||
|
"critical": null,
|
||||||
|
"damage": {
|
||||||
|
"parts": [],
|
||||||
|
"versatile": ""
|
||||||
|
},
|
||||||
|
"formula": "",
|
||||||
|
"save": {
|
||||||
|
"ability": "",
|
||||||
|
"dc": null,
|
||||||
|
"scaling": "power"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"backpack": {
|
||||||
|
"templates": ["itemDescription", "physicalItem"],
|
||||||
|
"capacity": {
|
||||||
|
"type": "weight",
|
||||||
|
"value": 0,
|
||||||
|
"weightless": false
|
||||||
|
},
|
||||||
|
"currency": {
|
||||||
|
"gc": 0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"class": {
|
||||||
|
"templates": ["itemDescription"],
|
||||||
|
"levels": 1,
|
||||||
|
"subclass": "",
|
||||||
|
"hitDice": "d6",
|
||||||
|
"hitDiceUsed": 0,
|
||||||
|
"skills": {
|
||||||
|
"number": 2,
|
||||||
|
"choices": [],
|
||||||
|
"value": []
|
||||||
|
},
|
||||||
|
"powercasting": "none"
|
||||||
|
},
|
||||||
|
"consumable": {
|
||||||
|
"templates": ["itemDescription", "physicalItem", "activatedEffect", "action"],
|
||||||
|
"consumableType": "potion",
|
||||||
|
"uses": {
|
||||||
|
"value": 0,
|
||||||
|
"max": 0,
|
||||||
|
"per": null,
|
||||||
|
"autoUse": true,
|
||||||
|
"autoDestroy": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"equipment": {
|
||||||
|
"templates": ["itemDescription", "physicalItem", "activatedEffect", "action"],
|
||||||
|
"armor": {
|
||||||
|
"type": "light",
|
||||||
|
"value": 10,
|
||||||
|
"dex": null
|
||||||
|
},
|
||||||
|
"strength": 0,
|
||||||
|
"stealth": false,
|
||||||
|
"proficient": true
|
||||||
|
},
|
||||||
|
"feat": {
|
||||||
|
"templates": ["itemDescription", "activatedEffect", "action"],
|
||||||
|
"requirements": "",
|
||||||
|
"recharge": {
|
||||||
|
"value": null,
|
||||||
|
"charged": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"loot": {
|
||||||
|
"templates": ["itemDescription", "physicalItem"]
|
||||||
|
},
|
||||||
|
"tool": {
|
||||||
|
"templates": ["itemDescription", "physicalItem"],
|
||||||
|
"ability": "int",
|
||||||
|
"chatFlavor": "",
|
||||||
|
"proficient": 0
|
||||||
|
},
|
||||||
|
"power": {
|
||||||
|
"templates": ["itemDescription", "activatedEffect", "action"],
|
||||||
|
"level": 1,
|
||||||
|
"school": "",
|
||||||
|
"components": {
|
||||||
|
"value": "",
|
||||||
|
"vocal": false,
|
||||||
|
"somatic": false,
|
||||||
|
"material": false,
|
||||||
|
"ritual": false,
|
||||||
|
"concentration": false
|
||||||
|
},
|
||||||
|
"materials": {
|
||||||
|
"value": "",
|
||||||
|
"consumed": false,
|
||||||
|
"cost": 0,
|
||||||
|
"supply": 0
|
||||||
|
},
|
||||||
|
"preparation": {
|
||||||
|
"mode": null,
|
||||||
|
"prepared": false
|
||||||
|
},
|
||||||
|
"scaling": {
|
||||||
|
"mode": null,
|
||||||
|
"formula": null
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"weapon": {
|
||||||
|
"templates": ["itemDescription", "physicalItem" ,"activatedEffect", "action"],
|
||||||
|
"weaponType": "simpleM",
|
||||||
|
"properties": {},
|
||||||
|
"proficient": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue