Merge branch 'Develop' into professorbunbury-sw5e

This commit is contained in:
CK 2020-11-19 18:47:00 +00:00 committed by GitHub
commit 9fea221d6b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
113 changed files with 14433 additions and 6203 deletions

BIN
fonts/Aurebesh.ttf Normal file

Binary file not shown.

BIN
fonts/OpenSans-Bold.ttf Normal file

Binary file not shown.

Binary file not shown.

BIN
fonts/OpenSans-Italic.ttf Normal file

Binary file not shown.

View file

@ -5,13 +5,28 @@ const less = require('gulp-less');
/* Compile LESS
/* ----------------------------------------- */
const SW5E_LESS = ["less/*.less"];
const SW5E_LESS = ["less/**/*.less"];
function compileLESS() {
return gulp.src("less/sw5e.less")
return gulp.src("less/original/sw5e.less")
.pipe(less())
.pipe(gulp.dest("./"))
}
const css = gulp.series(compileLESS);
function compileGlobalLess() {
return gulp.src("less/update/sw5e-global.less")
.pipe(less())
.pipe(gulp.dest("./"))
}
function compileLightLess() {
return gulp.src("less/update/sw5e-light.less")
.pipe(less())
.pipe(gulp.dest("./"))
}
function compileDarkLess() {
return gulp.src("less/update/sw5e-dark.less")
.pipe(less())
.pipe(gulp.dest("./"))
}
const css = gulp.series(compileLESS, compileGlobalLess, compileLightLess, compileDarkLess);
/* ----------------------------------------- */
/* Watch Updates

View file

@ -263,6 +263,11 @@
"SW5E.FeatureActionRecharge": "Action Recharge",
"SW5E.Flaws": "Flaws",
"SW5E.EffectCreate": "Create Effect",
"SW5E.EffectToggle": "Toggle Effect",
"SW5E.EffectEdit": "Edit Effect",
"SW5E.EffectDelete": "Delete Effect",
"SW5E.ItemTypeArchetype": "Archetype",
"SW5E.ItemTypeBackground": "Background",
"Sw5E.ItemTypeBackgroundPl": "Backgrounds",
@ -378,6 +383,12 @@
"SW5E.FlagsRemarkableAthleteHint": "Half-Proficiency (rounded-up) to physical Ability Checks and Initiative.",
"SW5E.FlagsCritThreshold": "Critical Hit Threshold",
"SW5E.FlagsCritThresholdHint": "Allow for expanded critical range; for example Improved or Superior Critical",
"SW5E.FlagsWeaponCritThreshold": "Weapon Critical Hit Threshold",
"SW5E.FlagsWeaponCritThresholdHint": "An expanded critical hit threshold for weapon attacks.",
"SW5E.FlagsPowerCritThreshold": "Power Critical Hit Threshold",
"SW5E.FlagsPowerCritThresholdHint": "An expanded critical hit threshold for power attacks.",
"SW5E.FlagsMeleeCriticalDice": "Melee Critical Damage Dice",
"SW5E.FlagsMeleeCriticalDiceHint": "A number of additional damage dice added to melee weapon critical hits.",
"SW5E.Flat": "Flat",
"SW5E.Formula": "Formula",
@ -628,7 +639,19 @@
"SW5E.RollMode": "Roll Mode",
"SW5E.RollSituationalBonus": "Situational Bonus?",
"SW5E.Save": "Save",
"SW5E.MovementConfig": "Configure Movement Speed",
"SW5E.MovementConfigHint": "Configure the movement speed and special movement attributes of this creature.",
"SW5E.MovementWalk": "Walk",
"SW5E.MovementBurrow": "Burrow",
"SW5E.MovementClimb": "Climb",
"SW5E.MovementHover": "Hover",
"SW5E.MovementFly": "Fly",
"SW5E.MovementSwim": "Swim",
"SW5E.MovementUnits": "Units",
"SW5E.SheetClassCharacter": "Default Character Sheet",
"SW5E.SheetClassCharacterOld": "Old Character Sheet",
"SW5E.SheetClassNPC": "Default NPC Sheet",
"SW5E.SheetClassVehicle": "Default Vehicle Sheet",
"SW5E.SheetClassItem": "Default Item Sheet",
@ -881,6 +904,7 @@
"SW5E.available": "available",
"SW5E.description": "A comprehensive game system for running games of Star Wars 5th Edition in the Foundry VTT environment.",
"SW5E.of": "of",
"SW5E.per": "per",
"SW5E.power": "power",
"SETTINGS.5eAllowPolymorphingL": "Allow players to polymorph their own actors.",
"SETTINGS.5eAllowPolymorphingN": "Allow Polymorphing",
@ -904,5 +928,9 @@
"SETTINGS.5eRestN": "Rest Variant",
"SETTINGS.5eRestPHB": "Player's Handbook (LR: 8 hours, SR: 1 hour)",
"SETTINGS.5eRestGritty": "Gritty Realism (LR: 7 days, SR: 8 hours)",
"SETTINGS.5eRestEpic": "Epic Heroism (LR: 1 hour, SR: 1 min)"
"SETTINGS.5eRestEpic": "Epic Heroism (LR: 1 hour, SR: 1 min)",
"SETTINGS.SWColorL": "Set the color theme of the game",
"SETTINGS.SWColorN": "Display Theme",
"SETTINGS.SWColorLight": "Light Theme",
"SETTINGS.SWColorDark": "Dark Theme"
}

View file

@ -90,6 +90,7 @@
.russoOne(14px);
color: @colorOlive;
border-bottom: 1px solid @colorFaint;
white-space: nowrap;
}
/* ----------------------------------------- */
@ -142,6 +143,7 @@
font-family: "Signika", sans-serif;
font-size: 12px;
font-weight: 400;
white-space: nowrap;
}
}
}
@ -413,46 +415,18 @@
}
}
// Inventory item lists
.inventory-list {
list-style: none;
margin: 0;
padding: 0 5px;
overflow-y: auto;
scrollbar-width: thin;
color: @colorTan;
// Inventory Item
.item {
line-height: 30px;
padding: 0 2px; // to align with the header border
border-bottom: 1px solid @colorFaint;
&:last-child { border-bottom: none; }
// Item Header Name
.item-name {
cursor: pointer;
max-height: 30px;
overflow: hidden;
.item-image {
flex: 0 0 30px;
background-size: 30px;
margin-right: 5px;
}
h4 {
margin: 0;
white-space: nowrap;
overflow-x: hidden;
}
&.rollable:hover .item-image {
background-image: url("../../icons/svg/d20-grey.svg") !important;
}
&.rollable .item-image:hover {
background-image: url("../../icons/svg/d20-black.svg") !important;
}
i.attuned {
color: @colorTan;
}
@ -474,49 +448,26 @@
flex: 0 0 80px;
text-align: right;
font-size: 11px;
color: @colorTan;
white-space: nowrap;
}
}
// Inventory Header
.inventory-header {
margin: 2px 0;
padding: 0;
align-items: center;
background: rgba(0, 0, 0, 0.05);
border: @borderGroove;
font-weight: bold;
line-height: 24px;
h3 {
margin: 0 -5px 0 0;
padding-left: 5px;
.russoOne();
font-size: 16px;
}
.item-controls a.item-create {
flex: 0 0 100%;
}
}
// Item names
.item-name {
color: @colorDark;
}
// Item Detail Sections
.item-detail {
flex: 0 0 70px;
font-size: 12px;
color: @colorTan;
text-align: center;
border-right: 1px solid @colorFaint;
word-break: break-word;
white-space: nowrap;
overflow: hidden;
&:last-child { border-right: none; }
&.item-action {flex: 0 0 100px}
}
@ -527,24 +478,9 @@
border-right: 1px solid @colorFaint;
}
.item-list {
list-style: none;
margin: 0;
padding: 0;
}
// Item Control Buttons
.item-controls {
flex: 0 0 44px;
.flexrow();
justify-content: flex-end;
a {
flex: 0 0 22px;
font-size: 12px;
text-align: center;
color: @colorTan;
}
}
// Item Dropdown Summary
@ -553,6 +489,7 @@
font-size: 12px;
line-height: 16px;
padding: 0.25em 0.5em;
color: @colorDark;
border-top: 1px solid @colorFaint;
}
}
@ -693,44 +630,6 @@
// Empty powerbook controls
.powerbook-empty .item-controls { flex: 1; }
/* ----------------------------------------- */
/* Active Effects */
/* ----------------------------------------- */
.effects {
.effect-name{
flex: 2;
align-items: center;
color: @colorDark;
h4 { margin: 0; }
}
.effect-icon {
flex: 0 0 30px;
height: 30px;
margin-right: 5px;
border: none;
}
.effect-source,
.effect-duration {
text-align: center;
border-left: 1px solid @colorFaint;
border-right: 1px solid @colorFaint;
}
.effect-controls {
flex: 0 0 60px;
text-align: right;
}
.effect {
align-items: center;
border-bottom: 1px solid @colorFaint;
&:last-child { border-bottom: none; }
}
}
/* ----------------------------------------- */
/* TinyMCE */
/* ----------------------------------------- */
@ -739,3 +638,18 @@
padding: 0 8px;
}
}
#actor-flags {
.window-content {
overflow-y: hidden;
}
form {
height: 100%;
}
.form-body {
height: calc(100% - 40px);
padding-right: 8px;
margin-bottom: 4px;
overflow-y: auto;
}
}

View file

@ -362,6 +362,108 @@
padding: 0;
}
}
/* ----------------------------------------- */
/* Items Lists */
/* ----------------------------------------- */
.items-list {
list-style: none;
margin: 0;
padding: 0;
overflow-y: auto;
scrollbar-width: thin;
color: @colorTan;
// Child lists
.item-list {
list-style: none;
margin: 0;
padding: 0;
}
// Individual Item
.item {
align-items: center;
padding: 0 2px; // to align with the header border
border-bottom: 1px solid @colorFaint;
&:last-child { border-bottom: none; }
.item-name {
color: @colorDark;
.item-image {
flex: 0 0 30px;
height: 30px;
background-size: 30px;
border: none;
margin-right: 5px;
}
h4 {
margin: 0;
white-space: nowrap;
overflow-x: hidden;
}
}
}
// Section Header
.items-header {
height: 28px;
margin: 2px 0;
padding: 0;
align-items: center;
background: rgba(0, 0, 0, 0.05);
border: @borderGroove;
font-weight: bold;
> * {
font-size: 12px;
text-align: center;
}
.item-name {
padding-left: 5px;
.modesto();
font-size: 16px;
}
}
// Item Name
.item-name {
flex: 2;
margin: 0;
overflow: hidden;
font-size: 13px;
text-align: left;
align-items: center;
}
// Control Buttons
.item-controls {
flex: 0 0 60px;
justify-content: space-between;
a {
font-size: 12px;
text-align: center;
}
}
}
/* ----------------------------------------- */
/* Active Effects */
/* ----------------------------------------- */
.effects .item {
.effect-source,
.effect-duration,
.effect-controls {
text-align: center;
border-left: 1px solid @colorFaint;
border-right: 1px solid @colorFaint;
font-size: 12px;
}
.effect-controls {
border: none;
}
}
}

View file

@ -116,17 +116,17 @@
}
.form-group.uses-per {
.form-fields {
flex-wrap: nowrap;
}
input {
flex: 1;
flex: 0 0 32px;
}
span {
flex: 0 0 16px;
}
select {
flex: 3;
margin: 0 4px 0 0;
}
}
span.sep {
flex: 0 0 8px;
}

View file

@ -0,0 +1,146 @@
//override Primary Red
@colorRed: #E81111;
@colorDarkBg: #2b2b2b;
//Background
@primaryBackground: linear-gradient(90deg,#626262 0,#4d4d4d 30%,#4d4d4d 70%,#626262);
//Typography
@headingColor: @colorRed;
@headerBorderColor: @colorBlue;
@bodyFontColor: white;
@linkColor: @colorRed;
@linkSecondaryColor: @colorPaleGray;
@blockquoteBackground: @colorPaleRed;
@blockquoteBorder: @colorRed;
@blockquoteShadow: 0 0 20px rgba(@colorRed, 0.8);
//forms
@inputBackgroundColor: @colorDarkGray;
@inputBorderNormal: @colorLightGray;
@inputBorderHover: @colorGray;
@inputBorderFocus: @colorRed;
@inputTextColor: white;
@buttonBackground: @colorRed;
@buttonTextColor: white;
@buttonHoverBackground: lighten(@colorRed, 5);
@buttonSecondaryBackground: @colorLightGray;
@buttonSecondaryTextColor: white;
@buttonSecondaryHoverBackground: lighten(@colorLightGray, 5);
//other bits
@hrColor: @colorBlue;
@tableTextColor: white;
@tableHeaderTextColor: @colorPaleGray;
@tableBackground: @colorGray;
@tableRowHoverBackground: lighten(@colorLightGray, 10);
@tableRowBorderColor: @colorLightGray;
//universalColors
@windowHeaderBackground: @colorDarkBg;
@windowHeaderLinkColor: @colorRed;
//Sidebar
@sidebarTabBackground: @windowHeaderBackground;
@sidebarTabLinkColor: @windowHeaderLinkColor;
@sidebarTabLinkUnderline: @colorRed;
@chatBackground: @colorDarkGray;
@chatHeaderColor: @colorRed;
@chatHeaderBottomBorderColor: @colorBlue;
@chatNotificationColor: @colorBlue;
@cardButtonBorder: @colorLightGray;
@cardFooterBorder: @colorLightBlue;
@cardFooterSeparator: @colorPaleGray;
@diceFormulaBackground: @colorGray;
@diceFormualColor: white;
@diceTotalBackground: @colorPaleRed;
@diceTotalBorder: @colorRed;
@diceTotalShadow: @colorRed;
@diceSuccessColor: @colorGreen;
@diceFailureColor: @colorRed;
@diceCriticalBackground: @colorPaleGreen;
@diceCriticalColor: @colorGreen;
@diceFumbleBackground: @colorPaleRed;
@diceFumbleColor: @colorRed;
@altRowBackground: @colorGray;
@combatRoundColor: @colorRed;
@combatRoundBorder: @colorBlue;
@combatCombatantControlColor: @colorPaleGray;
@combatCombatantControlColorActive: @colorRed;
@combatActiveCombatantColor: @colorBlue;
@combatTokenResourceColor: white;
@combatTokenResouceBorder: @colorLightGray;
@combatControlsBorder: @colorBlue;
@folderSearchIconColor: @colorBlue;
@folderSubdirectoryBackground: @colorDarkBg;
@folderSubdirectoryBorder: @colorLightGray;
@directoryListItemBorder: @colorBlue;
@folderHeaderBackground: @colorDarkBg;
@folderHeaderColor: white;
@folderIconColor: @colorBlue;
@entityBackgroundColor: @colorDarkBg;
@entityNameColor: @colorBlack;
@sceneBorderColor: @colorBlue;
@sceneBackgroundColor: @colorDarkBg;
@playlistBackgroundColor: @colorDarkBg;
@playlistHeaderBorder: @colorBlue;
@playlistSoundColor: @colorBlack;
@compendiumEntityBackground: @colorDarkBg;
@compendiumStatusIcon: @colorLightGray;
@foundryNavBgColor: rgba(@colorLightBlue, 0.4);
@foundryNavTextColor: white;
@foundryNavBorderColor: @colorBlue;
@foundryNavBgColorGM: @colorBlue;
@foundryNavBorderColorGM: @colorPaleBlue;
@foundryNavSceneLinkColor: white;
@foundryNavActiveBgColor: rgba(@colorRed, 0.6);
@foundryNavActiveBorderColor: lighten(@colorRed, 20);
@foundryNavActiveGlow: darken(@colorRed, 20);
@foundryNavContextShadow: darken(@colorBlue, 20);
@foundryNavContextBorderColor: @colorBlue;
@foundryPlayersArrowColor: @colorLightGray;
@actorPanelBgColor: white;
@actorNameColor: @colorRed;
@actorXPBarBorder: @colorGray;
@actorXPBarBackground: @colorPaleBlue;
@actorXPBarColor: @colorBlue;
@actorProficiencyTextColor: @colorGray;
@actorAttributeInputColor: @colorGray;
@actorSeparatorColor: @colorLightGray;
@actorAttributeButtonBorder: @colorPaleGray;
@actorAttributeButtonBorderHover: @colorRed;
@actorNavigationTabsColor: @colorGray;
@actorNavigationTabsActiveColor: @colorRed;
@actorNavigationTabsHoverBgColor: rgba(@colorGray, 0.1);
@actorNavigationTabsActiveHoverBgColor: rgba(@colorRed, 0.1);
@actorFilterBorderColor: @colorLightGray;
@actorFilterHoverColor: @colorRed;
@actorFilterActiveColor: @colorRed;
@actorGroupListHeaderBgColor: lighten(@colorPaleGray, 10);
@actorGroupListTitleBorderColor: @colorBlue;
@actorGroupListColumnBorderColor: @colorPaleGray;
@actorGroupListAltRowColor: lighten(@colorPaleGray, 10);
@actorItemRollableD20Color: @colorGray;
@actorItemRollableD20HoverColor: @colorRed;
@actorItemControlToggleColor: @colorLightGray;
@actorAbilityScoreColor: @colorGray;
@actorAbilityBorderColor: @colorPaleGray;
@actorSkillsAltRowColor: lighten(@colorPaleGray, 10);
@actorEncumbranceLabelBackground: @colorPaleGray;
@actorEncumbranceTextColor: @colorBlack;
@actorEncumbranceBorderColor: @colorBlack;
@actorEncumbranceBarBgColor: @colorPaleBlue;
@actorEncumbranceBarColor: @colorBlue;

View file

@ -0,0 +1,143 @@
//Background
@primaryBackground: linear-gradient(90deg,#afc6d6 0,#d6d6d6 30%,#d6d6d6 70%,#afc6d6);// linear-gradient(90deg, @colorPaleBlue 0%, @colorPaleGray 30%, @colorPaleGray 70%, @colorPaleBlue);
//Typography
@headingColor: @colorRed;
@headerBorderColor: @colorBlue;
@bodyFontColor: @colorBlack;
@linkColor: @colorRed;
@linkSecondaryColor: @colorGray;
@blockquoteBackground: @colorPaleBlue;
@blockquoteBorder: @colorBlue;
@blockquoteShadow: 0 0 20px rgba(@colorBlue, 0.8);
//forms
@inputBackgroundColor: white;
@inputBorderNormal: @colorLightGray;
@inputBorderHover: @colorGray;
@inputBorderFocus: @colorRed;
@inputTextColor: @colorBlack;
@buttonBackground: @colorRed;
@buttonTextColor: white;
@buttonHoverBackground: lighten(@colorRed, 5);
@buttonSecondaryBackground: @colorPaleGray;
@buttonSecondaryTextColor: @colorBlack;
@buttonSecondaryHoverBackground: lighten(@colorPaleGray, 5);
//other bits
@hrColor: @colorBlue;
@tableTextColor: @colorBlack;
@tableHeaderTextColor: @colorLightGray;
@tableBackground: white;
@tableRowHoverBackground: lighten(@colorPaleGray, 10);
@tableRowBorderColor: @colorPaleGray;
//universalColors
@windowHeaderBackground: white;
@windowHeaderLinkColor: @colorRed;
//Sidebar
@sidebarTabBackground: @windowHeaderBackground;
@sidebarTabLinkColor: @windowHeaderLinkColor;
@sidebarTabLinkUnderline: @colorRed;
@chatBackground: white;
@chatHeaderColor: @colorRed;
@chatHeaderBottomBorderColor: @colorBlue;
@chatNotificationColor: @colorBlue;
@cardButtonBorder: @colorLightGray;
@cardFooterBorder: @colorLightBlue;
@cardFooterSeparator: @colorPaleGray;
@diceFormulaBackground: @colorPaleGray;
@diceFormualColor: @colorBlack;
@diceTotalBackground: @colorPaleBlue;
@diceTotalBorder: @colorBlue;
@diceTotalShadow: @colorBlue;
@diceSuccessColor: @colorGreen;
@diceFailureColor: @colorRed;
@diceCriticalBackground: @colorPaleGreen;
@diceCriticalColor: @colorGreen;
@diceFumbleBackground: @colorPaleRed;
@diceFumbleColor: @colorRed;
@altRowBackground: @colorPaleBlue;
@combatRoundColor: @colorRed;
@combatRoundBorder: @colorBlue;
@combatCombatantControlColor: @colorLightGray;
@combatCombatantControlColorActive: @colorDarkGray;
@combatActiveCombatantColor: @colorBlue;
@combatTokenResourceColor: @colorGray;
@combatTokenResouceBorder: @colorLightGray;
@combatControlsBorder: @colorBlue;
@folderSearchIconColor: @colorBlue;
@folderSubdirectoryBackground: white;
@folderSubdirectoryBorder: @colorBlack;
@directoryListItemBorder: @colorBlue;
@folderHeaderBackground: white;
@folderHeaderColor: @colorBlack;
@folderIconColor: @colorBlue;
@entityBackgroundColor: white;
@entityNameColor: @colorBlack;
@sceneBorderColor: @colorBlue;
@sceneBackgroundColor: white;
@playlistBackgroundColor: white;
@playlistHeaderBorder: @colorBlue;
@playlistSoundColor: @colorBlack;
@compendiumEntityBackground: white;
@compendiumStatusIcon: @colorLightGray;
@foundryNavBgColor: rgba(@colorLightBlue, 0.4);
@foundryNavTextColor: white;
@foundryNavBorderColor: @colorBlue;
@foundryNavBgColorGM: @colorBlue;
@foundryNavBorderColorGM: @colorPaleBlue;
@foundryNavSceneLinkColor: white;
@foundryNavActiveBgColor: rgba(@colorRed, 0.6);
@foundryNavActiveBorderColor: lighten(@colorRed, 20);
@foundryNavActiveGlow: darken(@colorRed, 20);
@foundryNavContextShadow: darken(@colorBlue, 20);
@foundryNavContextBorderColor: @colorBlue;
@foundryPlayersArrowColor: @colorLightGray;
@actorPanelBgColor: white;
@actorNameColor: @colorRed;
@actorXPBarBorder: @colorGray;
@actorXPBarBackground: @colorPaleBlue;
@actorXPBarColor: @colorBlue;
@actorProficiencyTextColor: @colorGray;
@actorAttributeInputColor: @colorGray;
@actorSeparatorColor: @colorLightGray;
@actorAttributeButtonBorder: @colorPaleGray;
@actorAttributeButtonBorderHover: @colorRed;
@actorNavigationTabsColor: @colorGray;
@actorNavigationTabsActiveColor: @colorRed;
@actorNavigationTabsHoverBgColor: rgba(@colorGray, 0.1);
@actorNavigationTabsActiveHoverBgColor: rgba(@colorRed, 0.1);
@actorFilterBorderColor: @colorLightGray;
@actorFilterHoverColor: @colorRed;
@actorFilterActiveColor: @colorRed;
@actorGroupListHeaderBgColor: lighten(@colorPaleGray, 10);
@actorGroupListTitleBorderColor: @colorBlue;
@actorGroupListColumnBorderColor: @colorPaleGray;
@actorGroupListAltRowColor: lighten(@colorPaleGray, 10);
@actorItemRollableD20Color: @colorGray;
@actorItemRollableD20HoverColor: @colorRed;
@actorItemControlToggleColor: @colorLightGray;
@actorAbilityScoreColor: @colorGray;
@actorAbilityBorderColor: @colorPaleGray;
@actorSkillsAltRowColor: lighten(@colorPaleGray, 10);
@actorEncumbranceLabelBackground: @colorPaleGray;
@actorEncumbranceTextColor: @colorBlack;
@actorEncumbranceBorderColor: @colorBlack;
@actorEncumbranceBarBgColor: @colorPaleBlue;
@actorEncumbranceBarColor: @colorBlue;

View file

@ -0,0 +1,67 @@
/* ----------------------------------------- */
/* Fonts */
/* ----------------------------------------- */
.russoOne(@size: 20px) {
font-family: 'Russo One';
font-size: @size;
font-weight: 400;
letter-spacing: 0.5px;
}
.openSans(@size: 13px, @weight: 400) {
font-family: 'Open Sans';
font-size: @size;
font-weight: @weight;
}
.fontAwesome() {
font-family: "Font Awesome 5 Free";
-webkit-font-smoothing: antialiased;
display: inline-block;
font-style: normal;
font-variant: normal;
text-rendering: auto;
font-weight: 900;
}
/* ----------------------------------------- */
/* Sheet Styles */
/* ----------------------------------------- */
@colorDark: #191813;
@colorFaint: #c9c7b8;
@colorBeige: #b5b3a4;
@colorTan: #7a7971;
@colorOlive: #4b4a44;
@colorCrimson: #44191A;
@borderGroove: 2px groove #eeede0;
//@sheetBackground: url("ui/parchment.jpg") repeat;
//SW5e Colors
@colorBlack: #1C1C1C;
@colorDarkGray: #363636;
@colorGray: #4f4f4f;
@colorLightGray: #828282;
@colorPaleGray: #D6D6D6;
@colorRed: #c40f0f;
@colorPaleRed: #FBF4F4;
@colorLightRed: #F6E1E1;
@colorBlue: #0d99cc;
@colorLightBlue: #7ed6f7;
@colorPaleBlue: #afc6d6;
@colorGreen: #0dce0d;
@colorPaleGreen: #bcdcbe;
@sheetBackground: linear-gradient(90deg, @colorPaleBlue 0%, @colorPaleGray 30%, @colorPaleGray 70%, @colorPaleBlue);
.dropShadow1(){
box-shadow: 0 2px 2px 0 rgba(0,0,0,0.14), 0 3px 1px -2px rgba(0,0,0,0.12), 0 1px 5px 0 rgba(0,0,0,0.2);
}
.dropShadow2() {
box-shadow: 0 4px 5px 0 rgba(0,0,0,0.14), 0 1px 10px 0 rgba(0,0,0,0.12), 0 2px 4px -1px rgba(0,0,0,0.3);
}
.dropShadow3() {
box-shadow: 0 8px 17px 2px rgba(0,0,0,0.14), 0 3px 14px 2px rgba(0,0,0,0.12), 0 5px 5px -3px rgba(0,0,0,0.2);
}

View file

@ -0,0 +1,994 @@
.panel {
padding: 8px;
border-radius: 4px;
.dropShadow1();
}
.sw5e.sheet.actor.character {
min-width: 780px;
min-height: 720px;
}
.sw5e.sheet .window-content {
.openSans(12px);
input,
select {
height: 24px;
line-height: 20px;
padding: 1px 4px;
&:hover {
box-shadow: none;
}
&:focus {
box-shadow: none;
}
}
button {
cursor: pointer;
&:hover,
&:focus {
box-shadow: none;
}
}
}
.sw5e.sheet.actor {
input, select, textarea {
border-color: transparent;
background: none;
}
.swalt-sheet {
display: grid;
grid-template-rows: 182px 36px auto;
section>h1 {
.russoOne(17px);
text-align: left;
margin-bottom: 4px;
}
header {
display: grid;
grid-template-rows: 1fr 26px auto;
grid-template-columns: 128px 1fr;
column-gap: 8px;
row-gap: 8px;
img {
grid-column-start: 1;
grid-row-start: 1;
grid-row-end: 4;
}
h1.character-name {
grid-row: 1;
grid-column: 2;
margin: 0;
border: none;
align-self: center;
height: auto;
.russoOne(32px);
text-transform: uppercase;
height: auto;
input[type="text"] {
.russoOne(32px);
text-transform: uppercase;
height: auto;
border: none;
background: none;
&:focus {
text-transform: none;
}
}
}
.level-experience {
grid-row: 1;
grid-column: 3;
.charlevel {
.russoOne(17px);
text-align: right;
}
.experience {
.russoOne(17px);
text-align: right;
line-height: 26px;
input {
display: inline-block;
width: 120px;
text-align: right;
}
}
.xpbar {
height: 8px;
.bar {
display: block;
height: 100%;
}
}
}
.summary {
grid-column-start: 2;
grid-row-start: 2;
grid-column-end: 4;
display: grid;
grid-template-rows: 1fr;
grid-template-columns: repeat(4, 1fr);
input,
.proficiency {
display: inline;
height: auto;
.russoOne(17px);
line-height: 24px;
}
.proficiency {
line-height: 26px;
}
}
.attributes {
grid-column-start: 2;
grid-row-start: 3;
grid-column-end: 4;
display: grid;
grid-template-columns: repeat(5, 1fr);
column-gap: 12px;
h1 {
text-align: center;
}
.attribute-value,
.attribute-value input {
.russoOne(22px);
text-align: center;
line-height: 1;
}
.attribute-value {
&.multiple {
display: grid;
grid-template-columns: auto 14px auto;
input {
width: 100%;
}
}
input {
display: inline-block;
}
.value-number {
display: inline-block;
text-align: right;
padding: 0px 3px;
&:last-child {
text-align: left;
}
}
span.value-number {
padding: 1px 4px;
}
.initiative {
padding: 1px 4px;
display: block;
}
}
footer {
button {
background: none;
padding: 1px 3px;
font-size: inherit;
line-height: inherit;
display: inline-block;
width: auto;
&:hover {
font-weight: 400;
}
}
&.hit-points,
&.hit-dice,
&.initiative {
display: grid;
grid-template-columns: 1fr 1fr;
column-gap: 8px;
margin-top: 0;
input,
button {
//border: 1px solid @colorPaleGray;
width: 100%;
text-align: center;
}
button {
font-weight: 400;
margin-top: 2px;
}
span {
display: block;
padding: 3px 4px;
}
}
&.speed {
margin-top: 0;
input {
text-align: center;
}
}
}
}
}
nav.sheet-navigation {
display: grid;
grid-template-columns: repeat(6, 1fr);
column-gap: 16px;
margin: 4px 0;
.item {
background: none;
border: none;
border-bottom: 3px solid transparent;
border-radius: 0;
margin: 0;
padding: 3px 0 0;
line-height: 1;
.russoOne(16px);
}
}
.editor {
position: static;
min-height: 32px;
padding: 0;
.editor-edit {
display: block;
font-size: 12px;
background: none;
border: none;
padding: 0;
box-shadow: none;
top: 0;
right: 0;
&:hover {
text-shadow: none;
}
}
.tox.tox-tinymce {
height: 250px !important;
}
}
.tab {
display: none;
&.active {
display: block;
}
.filter-list {
list-style: none;
margin: 0;
padding: 0 0 8px;
display: flex;
flex-direction: row;
justify-content: flex-end;
max-width: 100%;
.filter-title {
display: none;
font-weight: bold;
width: 50px;
}
.filter-item {
width: 100px;
text-align: center;
&+.filter-item {
margin-left: 12px;
}
&:hover {
text-shadow: none;
}
}
}
.group-list-header {
display: grid;
padding-right: 6px;
}
.group-list-title {
h3 {
.russoOne(17px);
margin: 4px 0 0;
padding: 0 4px;
display: inline;
border: none;
}
.item-create {
font-size: 12px;
i {
font-size: 10px;
}
&:hover {
text-shadow: none;
}
}
}
.group-list-header,
.group-list {
.item-detail {
text-align: left;
padding: 4px;
}
}
.group-list {
height: 100%;
overflow-y: scroll;
& > li:first-child {
padding-top: 8px;
}
}
.group-list,
.group-list ol {
list-style: none;
margin: 0 0 8px;
padding: 0;
.item-uses {
input {
display: inline-block;
width: 32px;
margin-right: 0;
text-align: right;
}
span {
padding-left: 8px;
}
.slot-max-override {
margin-left: 5px;
&:hover {
text-shadow: none;
}
}
}
li.item {
display: grid;
h4 {
.openSans(13px, 700);
letter-spacing: 0;
}
.item-name,
.item-detail {
padding: 4px;
line-height: 30px;
}
.item-name {
display: flex;
.item-image {
width: 30px;
height: 30px;
position: relative;
background-size: contain;
&::before {
font-family: "Font Awesome 5 Free";
font-weight: 900;
content: '\f6cf';
opacity: 0;
position: absolute;
top: 0;
left: 2px;
font-size: 26px;
}
}
h4 {
line-height: 30px;
display: inline-block;
height: 30px;
padding-left: 8px;
margin: 0;
}
&.rollable:hover {
text-shadow: none;
.item-image {
background-image: none !important;
&::before {
opacity: 1;
}
&:hover {
background-image: none !important;
&::before {
opacity: 1;
}
}
}
}
}
.item-summary {
grid-column-start: 1;
grid-column-end: -1;
padding: 4px 4px 4px 38px;
}
.item-controls {
display: flex;
flex-direction: row;
justify-content: space-evenly;
}
.item-control {
&:hover {
text-shadow: none;
}
}
}
}
.group-grid-inventory {
grid-template-columns: auto 60px 100px 100px 100px;
&.group-list-title {
.item-controls {
grid-column-start: 5;
}
}
}
.group-grid-features {
grid-template-columns: auto 100px 100px 100px;
&.group-list-title {
display: grid;
}
.item-controls {
grid-column-start: 4;
}
}
.group-grid-powers {
grid-template-columns: auto repeat(5, 100px);
&.group-list-title {
display: grid;
align-items: end;
.item-detail {
padding: 0 4px;
}
}
}
.group-grid-fav-items {
grid-template-columns: auto 60px 30px 30px 50px;
&.group-list-title {
display: grid;
align-items: end;
.item-detail {
padding: 0 4px;
}
}
}
}
.tab > .panel {
height: 100%;
overflow: hidden;
display: grid;
}
.tab.attributes {
&.active {
display: grid;
}
grid-template-columns: 350px auto;
grid-template-rows: auto;
column-gap: 16px;
.abilities {
display: grid;
grid-template-columns: 128px auto;
grid-template-rows: auto;
column-gap: 12px;
ol {
list-style: none;
margin: 0;
padding: 0;
}
.scores {
li {
border-radius: 0;
padding: 4px;
&+li {
border-top: 0 !important;
}
&:first-child {
border-radius: 4px 4px 0 0;
}
&:last-child {
border-bottom-width: 1px;
border-radius: 0 0 4px 4px;
}
h2 {
.russoOne(14px);
border: none;
text-align: center;
margin: 0;
&:hover {
text-shadow: none;
}
}
.ability-score {
.russoOne(22px);
text-align: center;
width: 48px;
margin: 0 auto;
height: 24px;
display: block;
}
.ability-modifiers {
margin: 0 -4px -4px;
display: grid;
grid-template-columns: 28px auto 28px;
.ability-mod,
.ability-save {
padding: 2px 4px;
display: block;
font-weight: bold;
font-size: 13px;
text-align: center;
border-style: solid;
}
.ability-mod {
border-width: 1px 1px 0 0;
border-radius: 0 4px 0 0;
}
.ability-save {
border-width: 1px 0 0 1px;
border-radius: 4px 0 0 0;
}
.proficiency-toggle {
border: none;
background: none;
line-height: 1;
}
}
}
}
.skills {
li {
display: grid;
grid-template-columns: 28px auto 18px 28px;
align-items: center;
.proficiency-toggle {
border: none;
background: none;
height: 23px;
line-height: 23px;
padding: 0 4px;
}
.skill-name {
&:hover {
text-shadow: none;
}
}
.skill-ability {
text-transform: capitalize;
}
.skill-mod {
text-align: right;
padding-right: 4px;
}
}
}
}
.traits-resources {
grid-template-rows: 32px auto;
nav {
margin-bottom: 4px;
button {
display: inline-block;
width: auto;
background: none;
border: none;
border-bottom: 3px solid transparent;
border-radius: 0;
margin: 0;
padding: 0 4px;
line-height: 1.6;
.russoOne(14px);
&+button {
margin-left: 8px;
}
}
}
section.traits {
display: grid;
grid-template-columns: 1fr 1fr;
grid-gap: 16px;
row-gap: 8px;
input,
select {
display: block;
width: 100%;
text-align: left;
}
label {
font-size: 13px;
}
.trait-selector {
background: none;
border: none;
display: inline;
width: auto;
&:hover {
text-shadow: none;
}
i.fas {
float: none;
&:hover {
text-shadow: none;
}
}
}
.languages {
grid-column-end: span 2;
label {
&:hover {
cursor: pointer;
}
}
}
.traits-list {
li {
display: inline;
&::after {
content: ',';
}
&:last-child::after {
content: '';
}
}
}
ul.passives {
grid-column-end: span 2;
list-style: none;
padding: 0;
margin: 0;
display: grid;
grid-template-columns: 1fr 1fr;
grid-gap: 4px;
row-gap: 4px;
strong {
font-size: 13px;
}
}
}
section.resources {
.resource-items {
display: grid;
grid-template-columns: repeat(3, 1fr);
column-gap: 12px;
.resource {
h1 {
border: none;
margin: 0;
input {
font-family: 'Russo One';
font-size: 16px;
font-weight: 400;
text-align: center;
margin-bottom: 4px;
border-radius: 0;
}
}
.attribute-value,
.attribute-value input {
.russoOne(22px);
text-align: center;
line-height: 1;
}
.attribute-value {
display: grid;
grid-template-columns: auto 14px auto;
input {
display: block;
width: 100%;
}
.value-number {
display: block;
width: 100%;
text-align: right;
padding: 0px 3px;
&:last-child {
text-align: left;
}
}
span.value-number {
padding: 1px 4px;
}
}
.attribute-footer {
margin: 0;
display: grid;
grid-template-columns: 1fr 1fr;
label {
text-align: center;
}
}
}
}
.counters {
border: none;
margin: 16px 0;
display: grid;
grid-template-columns: repeat(3, 1fr);
.counter {
height: auto;
border: none;
text-align: center;
h4 {
font-size: 13px;
margin: 0;
//display: inline;
&.rollable {
&:hover {
text-shadow: none;
}
}
}
.counter-value {
display: inline;
text-align: left;
}
input[type="text"] {
display: inline-block;
width: 10px;
}
input[type="checkbox"] {
display: inline-block;
}
.death-success,
.death-fail {
display: inline-block;
}
.death-success {
margin-right: 8px;
}
}
}
}
}
}
.tab.inventory {
&>.panel {
grid-template-rows: 32px 32px 24px auto;
}
.currency-encumbrance {
display: grid;
grid-template-columns: 200px auto;
margin-bottom: 8px;
align-items: center;
}
.currency {
.russoOne(14px);
input {
display: inline-block;
width: 128px;
.openSans(13px);
}
}
.encumbrance-wrapper {
display: grid;
grid-template-columns: 400px 100px;
width: 500px;
justify-self: end;
.encumbrance-label {
font-size: 12px;
line-height: 14px;
width: 100%;
text-shadow: none;
padding: 0;
margin: 0;
height: auto;
text-align: center;
margin-left: -2px;
border-radius: 0 4px 4px 0;
}
.encumbrance {
position: relative;
border-radius: 4px;
height: 16px;
margin: 0;
width: 100%;
.encumbrance-bar {
position: absolute;
top: 0;
left: 0;
height: 100%;
border-radius: 4px;
border: none;
}
}
}
}
.tab.features {
&>.panel {
grid-template-rows: 24px auto;
}
}
.tab.powerbook {
&>.panel {
grid-template-rows: 32px 24px 24px auto;
}
.powercasting-ability {
display: grid;
grid-template-columns: 2fr 1fr 1fr;
label, h3 {
.russoOne(13px);
border-bottom: none;
}
.power-dc {
grid-column-start: 3;
}
}
}
.tab.biography {
grid-template-columns: 1fr 2fr;
grid-template-rows: 100%;
column-gap: 16px;
padding-bottom: 8px;
max-width: 100%;
&.active {
display: grid;
}
&>.panel {
display: block;
overflow-y: auto;
}
section {
position: relative;
}
}
.tab.notes {
&>.panel {
display: block;
overflow-y: auto;
}
section {
position: relative;
&>input {
.russoOne(16px);
text-align: left;
margin-bottom: 4px;
}
.editor .editor-edit {
top: 3px;
}
}
}
&.limited {
grid-template-rows: 144px auto;
row-gap: 8px;
header {
grid-template-rows: 1fr;
}
.tab.biography {
grid-template-columns: 100%;
}
}
}
}

View file

@ -0,0 +1,407 @@
.panel {
background: @actorPanelBgColor;
}
.sw5e.sheet .window-content {
color: @colorBlack;
background: linear-gradient(90deg,#afc6d6 0,#d6d6d6 30%,#d6d6d6 70%,#afc6d6);
input,
select {
color: @colorBlack;
&:hover {
border-color: @inputBorderHover;
}
&:focus {
border-color: @inputBorderFocus;
}
}
button {
&:hover,
&:focus {
border-color: @inputBorderFocus;
}
}
}
.sw5e.sheet.actor {
color: @colorBlack;
input, select, textarea {
&:hover {
border-color: @inputBorderFocus;
}
&:focus {
border-color: @inputBorderFocus;
}
}
.swalt-sheet {
section>h1 {
border-bottom: 2px solid @colorBlue;
}
header {
h1.character-name {
color: @actorNameColor;
input[type="text"] {
color: @actorNameColor;
}
}
.level-experience {
.xpbar {
border: 1px solid @actorXPBarBorder;
background-color: @actorXPBarBackground;
.bar {
background-color: @actorXPBarColor;
}
}
}
.summary {
input,
.proficiency {
color: @actorProficiencyTextColor;
}
}
.attributes {
.attribute-value,
.attribute-value input {
color: @actorAttributeInputColor;
}
.attribute-value {
.value-separator {
color: @actorSeparatorColor;
}
}
footer {
button {
border: 1px solid @actorAttributeButtonBorder;
&:hover {
color: @actorAttributeButtonBorderHover;
}
}
&.hit-points,
&.hit-dice,
&.initiative {
button {
border: 1px solid @actorAttributeButtonBorder;
color: @colorRed;
&:hover {
border-color: @actorAttributeButtonBorderHover;
}
}
}
}
}
}
nav.sheet-navigation {
.item {
color: @actorNavigationTabsColor;
&.active {
color: @actorNavigationTabsActiveColor;
border-bottom-color: @actorNavigationTabsActiveColor;
&:hover {
background: @actorNavigationTabsHoverBgColor;
}
}
&:hover {
background: @actorNavigationTabsHoverBgColor;
}
}
}
.tab {
.filter-list {
.filter-item {
border-bottom: 2px solid @actorFilterBorderColor;
&:hover {
color: @actorFilterHoverColor;
}
&.active {
color: @actorFilterActiveColor;
border-bottom-color: @actorFilterActiveColor;
}
}
}
.group-list-header {
background: @actorGroupListHeaderBgColor;
}
.group-list-title {
border-bottom: 1px solid @actorGroupListTitleBorderColor;
}
.group-list-header,
.group-list {
.item-detail {
border-left: 1px solid @actorGroupListColumnBorderColor;
}
}
.group-list,
.group-list ol {
li.item {
&:nth-child(even) {
background-color: @actorGroupListAltRowColor;
}
h4 {
color: @colorBlack;
}
.item-name {
.item-image {
&::before {
color: @actorItemRollableD20Color;
}
}
&.rollable:hover {
.item-image {
&:hover {
&::before {
color: @actorItemRollableD20HoverColor;
}
}
}
}
}
.item-control {
&:hover {
color: @linkColor !important;
}
&.item-toggle {
color: @actorItemControlToggleColor;
&.active {
color: @colorBlack;
}
}
}
}
}
}
.tab.attributes {
.abilities {
.scores {
li {
border: 1px solid @actorAbilityBorderColor;
h2 {
&:hover {
color: @linkColor;
}
}
.ability-score {
color: @actorAbilityScoreColor;
}
.ability-modifiers {
.ability-mod,
.ability-save {
border-color: @actorAbilityBorderColor;
}
}
}
}
.skills {
li {
&:nth-child(even) {
background-color: @actorSkillsAltRowColor;
}
.proficiency-toggle {
color: @colorBlack;
}
.skill-name {
&:hover {
color: @linkColor;
}
}
}
}
}
.traits-resources {
nav {
button {
color: @actorNavigationTabsColor;
&.active {
color: @actorNavigationTabsActiveColor;
border-bottom-color: @actorNavigationTabsActiveColor;
&:hover {
background: @actorNavigationTabsActiveHoverBgColor;
}
}
&:hover {
background: @actorNavigationTabsHoverBgColor;
}
}
}
section.traits {
.trait-selector {
i.fas {
color: @linkColor;
}
}
.languages {
label {
&:hover {
color: @linkColor;
}
}
}
}
section.resources {
.resource-items {
.resource {
h1 {
input {
color: @headingColor;
border-bottom: 2px solid @headerBorderColor;
}
}
.attribute-value,
.attribute-value input {
color: @actorAttributeInputColor;
}
.attribute-value {
.value-separator {
color: @actorSeparatorColor;
}
}
}
}
.counters {
.counter {
h4 {
&.rollable {
&:hover {
color: @linkColor;
}
}
}
.death-success {
i {
color: @colorGreen;
}
}
.death-fail {
i {
color: @colorRed;
}
}
}
}
}
}
}
.tab.inventory {
.currency {
color: @headingColor;
}
.encumbrance-wrapper {
.encumbrance-label {
background: @actorEncumbranceLabelBackground;
color: @actorEncumbranceTextColor;
border: 1px solid @actorEncumbranceBorderColor;
}
.encumbrance {
background: @actorEncumbranceBarBgColor;
.encumbrance-bar {
background: @actorEncumbranceBarColor;
}
}
}
}
.tab.powerbook {
.powercasting-ability {
label,
h3 {
color: @headingColor;
span {
color: @colorBlack;
}
}
}
}
.tab.notes {
section {
&>input {
color: @headingColor;
border-bottom: 2px solid @headerBorderColor;
}
}
}
}
}

View file

@ -0,0 +1,105 @@
input[type="text"], input[type="number"], input[type="password"], input[type="date"], input[type="time"], select, textarea {
border-radius: 4px;
transition: all 0.3s;
&:hover {
box-shadow: none;
}
&:focus {
box-shadow: none;
}
}
input[type=range] {
-webkit-appearance: none; /* Hides the slider so that custom slider can be made */
width: 100%; /* Specific width is required for Firefox. */
background: transparent; /* Otherwise white in Chrome */
}
input[type=range]::-webkit-slider-thumb{
-webkit-appearance: none;
background: @colorRed;
width: 12px;
height: 12px;
border-radius: 32px;
cursor: pointer;
box-shadow: none;
}
input[type=range]::-moz-range-thumb{
-webkit-appearance: none;
background: @colorRed;
width: 12px;
height: 12px;
border-radius: 32px;
cursor: pointer;
box-shadow: none;
}
input[type=range]::-ms-thumb {
-webkit-appearance: none;
background: @colorRed;
width: 12px;
height: 12px;
border-radius: 32px;
cursor: pointer;
box-shadow: none;
}
input[type=range]::-webkit-slider-runnable-track {
width: 100%;
height: 6px;
cursor: pointer;
background: @colorLightBlue;
border-radius: 4px;
border: 1px solid @colorBlue;
box-shadow: none;
}
input[type=range]:focus::-webkit-slider-runnable-track {
background: @colorBlue;
}
input[type=range]::-moz-range-track {
width: 100%;
height: 6px;
cursor: pointer;
background: @colorLightBlue;
border-radius: 4px;
border: 1px solid @colorBlue;
box-shadow: none;
}
input[type=range]::-ms-track {
width: 100%;
height: 6px;
cursor: pointer;
background: @colorLightBlue;
border-radius: 4px;
border: 1px solid @colorBlue;
box-shadow: none;
}
input[type=range]:focus {
outline: none; /* Removes the blue border. You should probably do some kind of focus styling for accessibility reasons though. */
}
input[type=range]::-ms-track {
width: 100%;
cursor: pointer;
/* Hides the slider so custom styles can be added */
background: transparent;
border-color: transparent;
color: transparent;
}
button, input[type="button"], input[type="submit"], input[type="reset"] {
.openSans(13px, 700);
text-align: center;
border: none;
border-radius: 4px;
cursor: pointer;
transition: all 0.3s;
&:hover, &:focus {
box-shadow: none;
}
&:disabled {
opacity: 0.6;
cursor: default;
}
}

View file

@ -0,0 +1,53 @@
input[type="text"], input[type="number"], input[type="password"], input[type="date"], input[type="time"], select, textarea {
border: 1px solid @inputBorderNormal;
color: @inputTextColor;
&:hover {
border-color: @inputBorderHover;
}
&:focus {
border-color: @inputBorderFocus;
}
&::placeholder {
color: @inputTextColor;
opacity: 0.5;
}
::-ms-input-placeholder { /* Microsoft Edge */
color: @inputTextColor;
opacity: 0.5;
}
}
button, input[type="button"], input[type="submit"], input[type="reset"] {
background: @buttonBackground;
color: @buttonTextColor;
&:hover, &:focus {
background: @buttonHoverBackground;
}
&:disabled {
&:hover, &:focus {
background: @buttonBackground;
}
}
}
input[type="reset"], button.secondary, button[type="reset"], input[type="button"].secondary, input[type="submit"].secondary {
background: @buttonSecondaryBackground;
color: @buttonSecondaryTextColor;
&:hover {
background: @buttonSecondaryHoverBackground;
}
&:disabled {
&:hover, &:focus {
background: @buttonSecondaryBackground;
}
}
}
form {
button {
border: none;
}
.notes, .hint {
color: rgba(@bodyFontColor, 0.8);
}
}

View file

@ -0,0 +1,76 @@
.window-app {
border-radius: 4px;
border: none;
.dropShadow2();
& > header {
background: @windowHeaderBackground;
border-radius: 4px 4px 0 0;
border: none;
.dropShadow1();
margin-bottom: 4px;
}
.window-content {
background: @primaryBackground;
color: @bodyFontColor;
footer {
margin-top: 8px;
}
}
&.minimized {
& > header, & > .window-header {
border: none;
border-radius: 4px;
margin: 0;
}
}
}
#client-settings {
nav.tabs {
border: none;
font-size: 17px;
line-height: 1.6;
a.item {
border-bottom: 3px solid transparent;
color: @bodyFontColor;
&:hover {
text-decoration: none;
}
&.active {
text-shadow: none;
border-bottom-color: @sidebarTabLinkUnderline;
}
}
}
section.content {
border: none;
margin-top: 4px;
}
}
.dialog-buttons {
margin-top: 8px;
button:last-child {
margin-right: 0;
}
button:not(.default) {
border: 1px solid @buttonBackground;
margin-right: 4px;
background: @buttonSecondaryBackground;
color: @buttonSecondaryTextColor;
&:hover {
background: @buttonSecondaryHoverBackground;
}
}
button.normal.default {
border: none;
background: @buttonBackground;
color: @buttonTextColor;
&:hover {
background: @buttonHoverBackground;
}
}
}

View file

@ -0,0 +1,84 @@
#navigation {
#nav-toggle {
background: @foundryNavBgColor;
color: @foundryNavTextColor;
transform: rotate(-90deg);
}
.nav-item {
border: 1px solid @foundryNavBorderColor;
}
#scene-list {
.scene {
border: 1px solid @foundryNavBorderColor;
background: rgba(@foundryNavBgColor, 0.4);
a {
color: @foundryNavSceneLinkColor;
}
&.gm {
border: 1px solid @foundryNavBorderColorGM;
background: rgba(@foundryNavBgColorGM, 0.4);
}
&.view, &.context {
box-shadow: 0 0 8px @foundryNavContextShadow;
border-color: @foundryNavContextBorderColor;
}
&.active {
border-color: @foundryNavActiveBorderColor;
background: @foundryNavActiveBgColor;
box-shadow: 0 0 8px @foundryNavActiveGlow;
}
}
}
}
#controls {
.scene-control, .control-tool {
background: @foundryNavBgColor;
color: @foundryNavTextColor;
border: 1px solid @foundryNavBorderColor;
box-shadow: none;
&:hover {
background: @foundryNavBgColor;
box-shadow: 0 0 8px @foundryNavContextShadow;
}
&.active {
border-color: @foundryNavActiveBorderColor;
background: @foundryNavActiveBgColor;
box-shadow: 0 0 8px @foundryNavActiveGlow;
}
}
}
#players {
border: none;
border-radius: 4px;
h3 {
background: @sidebarTabBackground;
border: none;
margin: 0;
padding: 0 8px;
font-size: 17px;
line-height: 30px;
.dropShadow1();
border-radius: 4px 4px 0 0;
.players-mode {
color: @foundryPlayersArrowColor;
}
}
ol {
margin: 4px 0;
.player-name.self {
color: inherit;
font-weight: 700;
}
.player {
color: @bodyFontColor;
}
.player-active {
margin-top: 7px;
&.active {
box-shadow: none;
}
}
}
}

View file

@ -0,0 +1,381 @@
#sidebar {
border: none; //1px solid @colorBlue;
&.collapsed {
#sidebar-tabs {
min-height: 370px;
justify-content: center;
& > .item.active {
border: none;
}
}
}
}
#sidebar-tabs {
border: none;
box-shadow: none;
justify-content: space-between;
.dropShadow1();
.item {
font-size: 16px;
}
.item.active {
border: none;
box-shadow: none;
background: none;
text-shadow: none;
}
}
/*-----------
** Chat Tab
-----------*/
#chat-log {
.chat-message {
border: none;
border-radius: 4px;
margin-bottom: 8px;
.dropShadow1();
& > header {
color: @colorRed;
border-bottom: 2px solid @colorBlue;
margin-bottom: 4px;
span {
color: @colorBlack;
}
}
}
}
.notification-pip {
color: @colorBlue;
}
.sw5e.chat-card {
.card-header {
padding: 0;
border: none;
img {
flex: 0 0 36px;
margin-right: 4px;
}
h3 {
flex: 1;
margin: 0;
line-height: 36px;
.russoOne(17px);
border-bottom: none;
&:hover {
text-shadow: none;
}
}
}
.card-content {
margin: 4px 0;
h3 {
font-size: 12px;
margin: 0;
font-weight: bold;
}
> * {
-webkit-user-select: text;
-moz-user-select: text;
-ms-user-select: text;
user-select: text;
}
}
.card-buttons {
margin: 4px 0;
span {
display: block;
line-height: 28px;
text-align: center;
}
button {
.openSans(13px, 700);
padding: 4px 0;
height: auto;
line-height: 1.6;
margin: 4px 0;
border: none;
border-radius: 4px;
&:hover, &:focus {
box-shadow: none;
}
}
}
.card-footer {
padding: 4px 0 0;
span {
padding: 0 4px 0 0;
font-size: 10px;
&:last-child {
border-right: none;
padding-right: 0;
}
}
}
}
.dice-roll {
.dice-formula {
border: none;
box-shadow: none;
border-radius: 4px;
}
.dice-total {
border-radius: 0;
padding: 4px 0;
}
}
#chat-controls {
padding-top: 4px;
}
#chat-form textarea {
&:focus {
box-shadow: none;
outline: none;
}
}
/*-----------
** Combat Tab
-----------*/
#combat {
h3 {
border: none;
}
#combat-tracker {
li.combatant {
padding: 4px 0;
background: none;
.token-name {
text-shadow: none;
}
h4 {
color: @colorBlack;
}
.roll {
background: none;
&::before {
content: "\f6cf";
.fontAwesome();
font-size: 28px;
}
}
.initiative {
text-shadow: none;
}
&.hidden {
opacity: 0.5;
}
}
}
#combat-controls {
padding-top: 0;
}
}
/*
** Folders
*/
.sidebar-tab {
.directory-header {
margin-bottom: 4px;
.header-search {
position: relative;
i.fa-search {
position: absolute;
left: 8px;
}
input {
text-align: left;
padding-left: 22px;
&:focus {
box-shadow: none;
}
}
}
}
.subdirectory {
border: none;
margin-left: 8px;
min-height: 8px;
}
.directory-list {
padding-bottom: 4px;
.folder {
& > .folder-header {
line-height: default;
padding: 0 0 0 8px;
position: relative;
border: none;
h3 {
padding: 8px 4px;
.openSans(13px, 700);
line-height: 1.6;
& > i {
margin-right: 4px;
}
}
a {
position: absolute;
top: 0;
right: 4px;
height: 100%;
padding: 0 4px;
i {
margin-top: 12px;
}
&.create-folder {
right: 28px;
}
}
}
}
.directory-item img {
flex: 0 0 32px;
height: 32px;
width: 32px;
align-self: center;
}
.actor, .item, .journal, .table {
border: none;
.entity-name {
.openSans(13px, 700);
}
}
}
}
#scenes {
.subdirectory {
border-left: none;
}
.scene {
border: none;
box-shadow: none;
position: relative;
height: 128px;
& + .scene {
margin-top: 4px;
}
&::after {
content: '';
display: block;
width: 100%;
height: 99px;
position: absolute;
top: 28px;
left: 0;
}
h3 {
.openSans(13px, 700);
text-align: left;
text-shadow: none;
padding: 4px 4px 4px 12px;
line-height: 1.6;
position: absolute;
top: 0;
left: 0;
width: 100%;
}
}
}
#playlists {
.directory-list {
padding: 0 8px;
li.playlist {
padding: 8px;
border-radius: 4px;
margin-bottom: 8px;
border-top: inherit;
.dropShadow1();
.playlist-header {
text-decoration: none;
}
li.sound {
border: none;
h4 {
.openSans(13px, 400);
}
}
}
}
}
#compendium {
.compendium-entity {
margin: 0 4px;
padding: 8px;
.dropShadow1();
border-radius: 4px;
border: none;
&+ .compendium-entity {
margin-top: 4px;
}
h3 {
background: none;
border: none;
.russoOne(17px);
padding: 0;
margin-bottom: 4px;
}
ol.compendium-list {
li.compendium-pack {
margin: 0;
padding: 4px;
border: none;
.pack-title {
margin: 0;
position: relative;
a {
.openSans(13px, 700);
i {
display: none;
}
}
.status-icons {
top: 4px;
font-size: 13px;
}
}
}
}
}
}
#settings {
h2 {
border: none;
margin: 0 8px;
padding: 0;
background: none;
}
#game-details, #settings-game, #settings-documentation, #settings-access {
padding: 0 8px;
margin: 0 0 8px;
}
}

View file

@ -0,0 +1,295 @@
#sidebar-tabs {
background: @sidebarTabBackground;
& > .collapse {
color: @sidebarTabLinkColor;
}
.item.active {
color: @sidebarTabLinkColor;
border-bottom: 3px solid @sidebarTabLinkUnderline;
}
}
/*-----------
** Chat Tab
-----------*/
#chat-log {
.chat-message {
background: @chatBackground;
color: @bodyFontColor;
& > header {
color: @chatHeaderColor;
border-bottom: 2px solid @chatHeaderBottomBorderColor;
span {
color: @bodyFontColor;
}
}
}
}
.notification-pip {
color: @chatNotificationColor;
}
.sw5e.chat-card {
.card-header {
h3 {
color: @bodyFontColor;
&:hover {
color: @bodyFontColor;
}
}
}
.card-buttons {
span {
border: 1px solid @cardButtonBorder;
}
}
.card-footer {
border-top: 1px solid @cardFooterBorder;
span {
border-right: 1px solid @cardFooterSeparator;
&:last-child {
border-right: none;
}
}
}
}
.dice-roll {
.dice-formula {
background: @diceFormulaBackground;
color: @diceFormualColor;
box-shadow: none;
border-radius: 4px;
}
.dice-total {
background: @diceTotalBackground;
border: 1px solid @diceTotalBorder;
box-shadow: 0 0 12px rgba(@diceTotalShadow,.8);
&.success {
color: @diceSuccessColor;
}
&.failure {
color: @diceFailureColor;
}
&.critical {
color: @diceCriticalColor;
background: @diceCriticalBackground;
box-shadow: 0 0 12px rgba(@diceCriticalColor,.5);
}
&.fumble {
color: @diceFumbleColor;
background: @diceFumbleBackground;
box-shadow: 0 0 12px rgba(@diceFumbleColor,.5);
}
}
}
#chat-controls {
.roll-type-select {
background: @inputBackgroundColor;
}
label {
color: @bodyFontColor;
}
}
#chat-form textarea {
background: @inputBackgroundColor;
}
/*-----------
** Combat Tab
-----------*/
#combat {
#combat-round {
color: @combatRoundColor;
border-bottom: 2px solid @combatRoundColor;
.encounters {
h4 {
color: @combatRoundColor;
}
a {
color: @linkSecondaryColor;
&:hover {
color: @linkColor;
}
}
}
}
#combat-tracker {
//padding-top: 4px;
li.combatant {
color: @bodyFontColor;
&:nth-child(even) {
background: rgba(@altRowBackground, 0.5);
}
h4 {
color: @bodyFontColor
}
.roll {
color: @linkSecondaryColor;
&:hover {
color: @linkColor;
}
}
.combatant-control {
color: @combatCombatantControlColor;
&.active {
color: @combatCombatantControlColorActive;
}
}
.token-resource {
color: @combatTokenResourceColor;
border-right: 1px solid @combatTokenResouceBorder;
}
&.active {
color: @combatActiveCombatantColor;
.initiative, h4 {
color: @combatActiveCombatantColor;
}
}
&.hidden {
color: @bodyFontColor;
}
}
}
#combat-controls {
border-top: 1px solid @combatControlsBorder;
}
}
/*
** Folders
*/
.sidebar-tab {
.directory-header {
.header-search {
i.fa-search {
color: @folderSearchIconColor;
}
input {
background: @inputBackgroundColor;
}
}
}
.subdirectory {
background: @folderSubdirectoryBackground;
.folder {
border-left: 2px solid rgba(@folderSubdirectoryBorder, 0.4);
}
}
.directory-list {
li + li {
border-top: 1px solid @directoryListItemBorder;
}
.folder {
& > .folder-header {
background: @folderHeaderBackground;
h3 {
background: @folderHeaderBackground;
color: @folderHeaderColor;
& > i {
color: @folderIconColor;
}
}
a {
color: @linkSecondaryColor;
&:hover {
color: @linkColor;
}
}
}
&.collapsed > .folder-header {
background: @folderHeaderBackground;
}
& + .entity {
border-top: 1px solid @directoryListItemBorder;
}
}
.actor, .item, .journal, .table {
background: @entityBackgroundColor;
.entity-name {
color: @entityNameColor;
}
&:nth-child(even) {
background: rgba(@altRowBackground, 0.3);
}
}
}
}
#scenes {
.scene {
border-top: 1px solid @sceneBorderColor;
border-left: 4px solid @sceneBorderColor;
&::after {
box-shadow: 0 0 20px @sceneBorderColor inset;
}
h3 {
background: @sceneBackgroundColor;
}
}
}
#playlists {
.directory-list {
li.playlist {
background: @playlistBackgroundColor;
.playlist-header {
background: @playlistBackgroundColor;
color: @colorRed;
border-bottom: 2px solid @playlistHeaderBorder;
}
li.sound {
color: @playlistSoundColor;
}
a.sound-control {
color: @linkColor;
}
}
}
}
#compendium {
.compendium-entity {
background: @compendiumEntityBackground !important;
h3 {
border-bottom: 2px solid @headerBorderColor;
}
ol.compendium-list {
li.compendium-pack {
&:nth-child(even) {
background: rgba(@altRowBackground, 0.3);
}
.pack-title {
.status-icons {
color: @compendiumStatusIcon;
}
}
footer.compendium-footer {
color: @bodyFontColor;
}
}
}
}
}
#settings {
h2 {
color: @headingColor;
border-bottom: 2px solid @headerBorderColor;
}
#game-details, #settings-game, #settings-documentation, #settings-access {
color: @bodyFontColor;
}
}

View file

@ -0,0 +1,495 @@
#sidebar {
border: none; //1px solid @colorBlue;
}
#sidebar-tabs {
border: none;
box-shadow: none;
background: white;
.dropShadow1();
& > .collapse {
color: @colorRed;
}
.item {
font-size: 16px;
}
.item.active {
color: @colorRed;
border: none;
border-bottom: 3px solid @colorRed;
box-shadow: none;
background: none;
text-shadow: none;
}
}
/*-----------
** Chat Tab
-----------*/
#chat-log {
.chat-message {
background: white;
border: none;
border-radius: 4px;
margin-bottom: 8px;
.dropShadow1();
& > header {
color: @colorRed;
border-bottom: 2px solid @colorBlue;
margin-bottom: 4px;
span {
color: @colorBlack;
}
}
}
}
.notification-pip {
color: @colorBlue;
text-shadow: none;
}
.sw5e.chat-card {
font-size: 13px;
.card-header {
padding: 0;
border: none;
img {
flex: 0 0 36px;
margin-right: 4px;
}
h3 {
flex: 1;
margin: 0;
line-height: 36px;
.russoOne(17px);
color: @colorBlack;
&:hover {
color: @colorBlack;
text-shadow: none;
}
}
}
.card-content {
margin: 4px 0;
h3 {
font-size: 12px;
margin: 0;
font-weight: bold;
}
> * {
-webkit-user-select: text;
-moz-user-select: text;
-ms-user-select: text;
user-select: text;
}
}
.card-buttons {
margin: 4px 0;
span {
display: block;
line-height: 28px;
text-align: center;
border: 1px solid @colorLightGray;
}
button {
.openSans(13px, 700);
padding: 4px 0;
height: auto;
line-height: 1.6;
margin: 4px 0;
background: @colorRed;
border: none;
border-radius: 4px;
&:hover, &:focus {
background-color: lighten(@colorRed, 5);
box-shadow: none;
}
}
}
.card-footer {
padding: 4px 0 0;
border-top: 1px solid @colorLightBlue;
span {
border-right: 2px groove #FFF;
padding: 0 4px 0 0;
font-size: 10px;
&:last-child {
border-right: none;
padding-right: 0;
}
}
}
}
.dice-roll {
.dice-formula {
background: none;
border: none;
}
.dice-total {
background: @colorPaleBlue;
border: 1px solid @colorBlue;
border-radius: 0;
padding: 4px 0;
box-shadow: 0 0 12px rgba(@colorBlue,.5);
&.success {
color: inherit;
background: #c7d0c0;
border: 1px solid #006c00;
}
&.failure {
color: inherit;
background: #ffdddd;
border: 1px solid #6e0000;
}
&.critical {
color: @colorGreen;
background: @colorPaleGreen;
box-shadow: 0 0 12px rgba(@colorGreen,.5);
}
&.fumble {
color: red;
}
}
}
#chat-controls {
padding-top: 4px;
label {
color: @colorBlack;
}
}
#chat-form textarea {
background: white;
&:focus {
box-shadow: none;
outline: none;
}
}
/*-----------
** Combat Tab
-----------*/
#combat {
#combat-round {
color: @colorRed;
border-bottom: 2px solid @colorBlue;
.encounters {
h4 {
color: @colorRed;
}
a {
color: @colorGray;
&:hover {
color: @colorRed;
}
}
}
}
#combat-tracker {
//padding-top: 4px;
li.combatant {
padding: 4px 0;
color: @colorBlack;
background: none;
&:nth-child(even) {
background: rgba(@colorPaleBlue, 0.5);
}
h4 {
color: @colorBlack;
text-shadow: none;
}
.roll {
background: none;
color: @colorGray;
&::before {
content: "\f6cf";
.fontAwesome();
font-size: 28px;
}
&:hover {
color: @colorRed;
}
}
.combatant-control {
color: @colorLightGray;
text-shadow: none;
&.active {
color: @colorDarkGray;
}
}
.token-resource {
color: @colorGray;
border-right: 1px solid @colorLightGray;
}
.initiative {
text-shadow: none;
}
&.active {
color: @colorBlue;
.initiative, h4 {
color: @colorBlue;
}
}
&.hidden {
opacity: 0.5;
color: @colorBlack;
}
}
}
#combat-controls {
padding-top: 0;
border-top: 1px solid @colorBlue;
}
}
/*
** Folders
*/
.sidebar-tab {
.directory-header {
margin-bottom: 4px;
.header-search {
position: relative;
i.fa-search {
position: absolute;
left: 8px;
color: @colorBlue;
}
input {
text-align: left;
padding-left: 22px;
background: white;
&:focus {
box-shadow: none;
}
}
}
}
.subdirectory {
border: none;
margin-left: 8px;
background: white;
min-height: 8px;
.folder {
border-left: 2px solid rgba(@colorBlack, 0.4);
}
}
.directory-list {
padding-bottom: 4px;
li + li {
border-top: 1px solid @colorBlue;
}
.folder {
& > .folder-header {
line-height: default;
padding: 0 0 0 8px;
position: relative;
border: none;
background: white;
h3 {
padding: 8px 4px;
background: white;
color: @colorBlack;
.openSans(13px, 700);
line-height: 1.6;
& > i {
margin-right: 4px;
color: @colorBlue;
}
}
a {
position: absolute;
top: 0;
right: 4px;
height: 100%;
padding: 0 4px;
color: @colorLightGray;
&:hover {
color: @colorRed;
}
i {
margin-top: 12px;
}
&.create-folder {
right: 28px;
}
}
}
&.collapsed > .folder-header {
background: white;
}
& + .entity {
border-top: 1px solid @colorBlue;
}
}
.directory-item img {
flex: 0 0 32px;
height: 32px;
width: 32px;
align-self: center;
}
.actor, .item, .journal, .table {
background: white;
border: none;
.entity-name {
.openSans(13px, 700);
color: @colorBlack;
}
&:nth-child(even) {
background: rgba(@colorPaleBlue, 0.3);
}
}
}
}
#scenes {
.subdirectory {
border-left: none;
}
.scene {
border: none;
border-top: 1px solid @colorBlue;
border-left: 4px solid @colorBlue;
box-shadow: none;
position: relative;
height: 128px;
//margin-bottom: 4px;
& + .scene {
margin-top: 4px;
}
&::after {
content: '';
display: block;
width: 100%;
height: 99px;
position: absolute;
top: 28px;
left: 0;
box-shadow: 0 0 20px @colorBlue inset;
}
h3 {
.openSans(13px, 700);
text-align: left;
text-shadow: none;
padding: 4px 4px 4px 12px;
background: white;
line-height: 1.6;
position: absolute;
top: 0;
left: 0;
width: 100%;
}
}
}
#playlists {
.directory-list {
padding: 0 8px;
li.playlist {
padding: 8px;
border-radius: 4px;
background: white;
margin-bottom: 8px;
border-top: inherit;
.dropShadow1();
.playlist-header {
background: white;
color: @colorRed;
text-decoration: none;
border-bottom: 2px solid @colorBlue;
}
li.sound {
border: none;
color: @colorBlack;
h4 {
.openSans(13px, 400);
}
}
a.sound-control {
color: @colorRed;
}
}
}
}
#compendium {
.compendium-entity {
margin: 0 4px;
padding: 8px;
background: white !important;
.dropShadow1();
border-radius: 4px;
border: none;
&+ .compendium-entity {
margin-top: 4px;
}
h3 {
border: none;
color: @colorRed;
border-bottom: 2px solid @colorBlue;
.russoOne(17px);
padding: 0;
margin-bottom: 4px;
}
ol.compendium-list {
li.compendium-pack {
margin: 0;
padding: 4px;
border: none;
&:nth-child(even) {
background: rgba(@colorPaleBlue, 0.3);
}
.pack-title {
margin: 0;
position: relative;
a {
.openSans(13px, 700);
i {
display: none;
}
}
.status-icons {
top: 4px;
color: @colorLightGray;
font-size: 13px;
}
}
footer.compendium-footer {
color: @colorBlack;
}
}
}
}
}
#settings {
h2 {
color: @colorRed;
border: none;
border-bottom: 2px solid @colorBlue;
margin: 0 8px;
padding: 0;
}
#game-details, #settings-game, #settings-documentation, #settings-access {
padding: 0 8px;
margin: 0 0 8px;
color: @colorBlack;
}
}

View file

@ -0,0 +1,47 @@
@import "_variables.less";
@import "_variables-dark.less";
body.dark-theme {
.app {
background: @primaryBackground;
}
h1,
h2,
h3,
h4,
h5,
h6 {
color: @headingColor;
}
h3 {
border-bottom: 2px solid @headerBorderColor;
}
a {
color: @linkColor;
text-decoration: none;
&:hover,
&:active {
text-shadow: none;
text-decoration: underline;
}
}
blockquote {
padding: 4px 8px;
background-color: @blockquoteBackground;
border: 1px solid @blockquoteBorder;
box-shadow: @blockquoteShadow;
}
hr {
border-width: 0 0 1px 0;
border-bottom: 1px solid @hrColor;
}
@import "components/forms-themes.less";
@import "components/sidebar-themes.less";
@import "components/foundry-nav-themes.less";
@import "components/foundry-app-window-themes.less";
@import "components/actor-themes.less";
}

View file

@ -0,0 +1,185 @@
/* open-sans-regular - latin */
@font-face {
font-family: 'Open Sans';
font-style: normal;
font-weight: 400;
src: url('./fonts/OpenSans-Regular.ttf');
}
@font-face {
font-family: 'Open Sans';
font-style: italic;
font-weight: 400;
src: url('./fonts/OpenSans-Italic.ttf');
}
@font-face {
font-family: 'Open Sans';
font-style: normal;
font-weight: 700;
src: url('./fonts/OpenSans-Bold.ttf');
}
@font-face {
font-family: 'Open Sans';
font-style: italic;
font-weight: 700;
src: url('./fonts/OpenSans-BoldItalic.ttf');
}
/* russo-one-regular - latin */
@font-face {
font-family: 'Russo One';
font-style: normal;
font-weight: 400;
src: url('./fonts/RussoOne.ttf');
}
@font-face {
font-family: 'Russo One';
font-style: italic;
font-weight: 400;
src: url('./fonts/RussoOne.ttf');
}
@font-face {
font-family: 'Russo One';
font-style: normal;
font-weight: 700;
src: url('./fonts/RussoOne.ttf');
}
@font-face {
font-family: 'Aurebesh';
font-style: normal;
font-weight: 400;
src: url('./fonts/Aurebesh.ttf');
}
@import "_variables.less";
html {
box-sizing: border-box;
}
*, *:before, *:after {
box-sizing: inherit;
}
// ::-webkit-scrollbar {
// width: 6px;
// height: 6px;
// }
::-webkit-scrollbar-track {
border: 1px solid @colorBlue;
border-radius: 4px;
}
::-webkit-scrollbar-thumb {
outline: none;
border-radius: 4px;
background: @colorBlue;
border: none;
}
:root {
scrollbar-width: thin;
scrollbar-color: @colorBlue @colorPaleBlue;
}
body {
.openSans(13px, 400);
}
h1 {
.russoOne(34px);
}
h2 {
.russoOne(27px);
}
h3 {
.russoOne(21px);
}
h4 {
.russoOne(17px);
}
h5, h6 {
.russoOne(13px);
}
a {
text-decoration: none;
&:hover, &:active {
text-shadow: none;
text-decoration: underline;
}
}
.app {
border: none;// 1px solid @colorBlue;
.dropShadow1();
}
#pause {
img {display: none;}
background: none;
height: 128px;
&::before {
content: '';
position: absolute;
top: 0;
margin-left: -64px;
left: 50%;
width: 128px;
height: 128px;
background: url("ui/pause-inner.svg") no-repeat 50% 50%;
animation-name: pause-spin;
animation-duration: 10000ms;
animation-iteration-count: infinite;
animation-timing-function: linear;
}
&::after {
content: '';
position: absolute;
top: 0;
margin-left: -64px;
left: 50%;
width: 128px;
height: 128px;
background: url("ui/pause-outer.svg") no-repeat 50% 50%;
animation-name: pause-spin;
animation-duration: 5000ms;
animation-iteration-count: infinite;
animation-timing-function: linear;
animation-direction: reverse;
}
h3 {
border-bottom: 0;
line-height: 1;
position: absolute;
top: 50%;
left: 50%;
width: 256px;
margin-left: -128px;
margin-top: -13px;
text-shadow: 0 0 24px @colorBlue;
&::before, &::after {
position: absolute;
font-family: "Aurebesh", sans-serif;
font-size: 13px;
color: @colorGray;
animation: none;
opacity: 0.8;
text-shadow: 0 0 8px @colorBlue;
}
&::before {
content: "GAME";
top: -13px;
left: 42px;
}
&::after {
content: "PAUSED";
bottom: -13px;
right: 42px;
}
}
}
@import "components/forms-global.less";
@import "components/sidebar-global.less";
@import "components/actor-global.less";
@keyframes pause-spin {
from {
transform:rotate(0deg);
}
to {
transform: rotate(360deg);
}
}

View file

@ -0,0 +1,47 @@
@import "_variables.less";
@import "_variables-light.less";
body.light-theme {
.app {
background: @primaryBackground;
}
h1,
h2,
h3,
h4,
h5,
h6 {
color: @headingColor;
}
h3 {
border-bottom: 2px solid @headerBorderColor;
}
a {
color: @linkColor;
text-decoration: none;
&:hover,
&:active {
text-shadow: none;
text-decoration: underline;
}
}
blockquote {
padding: 4px 8px;
background-color: @blockquoteBackground;
border: 1px solid @blockquoteBorder;
box-shadow: @blockquoteShadow;
}
hr {
border-width: 0 0 1px 0;
border-bottom: 1px solid @hrColor;
}
@import "components/forms-themes.less";
@import "components/sidebar-themes.less";
@import "components/foundry-nav-themes.less";
@import "components/foundry-app-window-themes.less";
@import "components/actor-themes.less";
}

View file

@ -0,0 +1,61 @@
@import "variables.less";
a {
color: @colorRed;
text-decoration: none;
&:hover, &:active {
text-shadow: none;
text-decoration: underline;
}
}
.app {
background: @sheetBackground;
border: none;// 1px solid @colorBlue;
.dropShadow1();
}
#context-menu {
background: none;
border: none;
border-radius: 0;
color: @colorBlack;
padding: 0 8px;
ol.context-items {
background: white;
border-radius: 4px;
border: 1px solid @colorLightGray;
.dropShadow2();
li.context-item {
&:first-child {
border-top-left-radius: 4px;
border-top-right-radius: 4px;
}
&:last-child {
border-bottom-left-radius: 4px;
border-bottom-right-radius: 4px;
}
i {
color: @colorBlue;
}
&:hover {
background: @colorRed;
color: white;
text-shadow: none;
cursor: pointer;
i {
color: white;
}
}
& + li {
border-top: 1px solid @colorPaleGray;
}
}
}
}
@import "components/forms.less";
@import "components/sidebar.less";

View file

@ -6,7 +6,7 @@ import AbilityTemplate from "../pixi/ability-template.js";
import {SW5E} from '../config.js';
/**
* Extend the base Actor class to implement additional logic specialized for SW5e.
* Extend the base Actor class to implement additional system-specific logic for SW5e.
*/
export default class Actor5e extends Actor {
@ -20,48 +20,6 @@ export default class Actor5e extends Actor {
/* -------------------------------------------- */
/**
* @override
* TODO: This becomes unnecessary after 0.7.x is released
*/
initialize() {
try {
this.prepareData();
} catch(err) {
console.error(`Failed to initialize data for ${this.constructor.name} ${this.id}:`);
console.error(err);
}
}
/* -------------------------------------------- */
/**
* @override
* TODO: This becomes unnecessary after 0.7.x is released
*/
prepareData() {
const is07x = !isNewerVersion("0.7.1", game.data.version);
if ( is07x ) this.data = duplicate(this._data);
if (!this.data.img) this.data.img = CONST.DEFAULT_TOKEN;
if ( !this.data.name ) this.data.name = "New " + this.entity;
this.prepareBaseData();
this.prepareEmbeddedEntities();
if ( is07x ) this.applyActiveEffects();
this.prepareDerivedData();
}
/* -------------------------------------------- */
/**
* @override
* TODO: This becomes unnecessary after 0.7.x is released
*/
applyActiveEffects() {
if (!isNewerVersion("0.7.1", game.data.version)) return super.applyActiveEffects();
}
/* -------------------------------------------- */
/** @override */
prepareBaseData() {
switch ( this.data.type ) {
@ -116,6 +74,11 @@ export default class Actor5e extends Actor {
abl.save = Math.max(abl.save, originalSaves[id].save);
}
}
// Inventory encumbrance
data.attributes.encumbrance = this._computeEncumbrance(actorData);
// Prepare skills
this._prepareSkills(actorData, bonuses, checkBonus, originalSkills);
// Determine Initiative Modifier
@ -126,7 +89,8 @@ export default class Actor5e extends Actor {
if ( joat ) init.prof = Math.floor(0.5 * data.attributes.prof);
else if ( athlete ) init.prof = Math.ceil(0.5 * data.attributes.prof);
else init.prof = 0;
init.bonus = Number(init.value + (flags.initiativeAlert ? 5 : 0));
init.value = init.value ?? 0;
init.bonus = init.value + (flags.initiativeAlert ? 5 : 0);
init.total = init.mod + init.prof + init.bonus;
// Prepare power-casting data
@ -169,7 +133,7 @@ export default class Actor5e extends Actor {
}
return obj;
}, {});
data.prof = this.data.data.attributes.prof;
data.prof = this.data.data.attributes.prof || 0;
return data;
}
@ -177,33 +141,36 @@ export default class Actor5e extends Actor {
/**
* Return the features which a character is awarded for each class level
* @param cls {Object} Data object for class, equivalent to Item5e.data or raw compendium entry
* @param {string} className The class name being added
* @param {string} subclassName The subclass of the class being added, if any
* @param {number} level The number of levels in the added class
* @param {number} priorLevel The previous level of the added class
* @return {Promise<Item5e[]>} Array of Item5e entities
*/
static async getClassFeatures(cls) {
const level = cls.data.levels;
const className = cls.name.toLowerCase();
static async getClassFeatures({className="", subclassName="", level=1, priorLevel=0}={}) {
className = className.toLowerCase();
subclassName = subclassName.slugify();
// Get the configuration of features which may be added
const clsConfig = CONFIG.SW5E.classFeatures[className];
if (!clsConfig) return [];
let featureIDs = clsConfig["features"][level] || [];
const subclassName = cls.data.subclass.toLowerCase().slugify();
if (!clsConfig) return [];
// Identify subclass features
if ( subclassName !== "" ) {
const subclassConfig = clsConfig["subclasses"][subclassName];
if ( subclassConfig !== undefined ) {
const subclassFeatureIDs = subclassConfig["features"][level];
if ( subclassFeatureIDs ) {
featureIDs = featureIDs.concat(subclassFeatureIDs);
}
}
else console.warn("Invalid subclass: " + subclassName);
// Acquire class features
let ids = [];
for ( let [l, f] of Object.entries(clsConfig.features || {}) ) {
l = parseInt(l);
if ( (l <= level) && (l > priorLevel) ) ids = ids.concat(f);
}
// Acquire subclass features
const subConfig = clsConfig.subclasses[subclassName] || {};
for ( let [l, f] of Object.entries(subConfig.features || {}) ) {
l = parseInt(l);
if ( (l <= level) && (l > priorLevel) ) ids = ids.concat(f);
}
// Load item data for all identified features
const features = await Promise.all(featureIDs.map(id => fromUuid(id)));
const features = await Promise.all(ids.map(id => fromUuid(id)));
// Class powers should always be prepared
for ( const feature of features ) {
@ -237,35 +204,28 @@ export default class Actor5e extends Actor {
for (let u of updated instanceof Array ? updated : [updated]) {
const item = this.items.get(u._id);
if (!item || (item.data.type !== "class")) continue;
const classData = duplicate(item.data);
let changed = false;
const updateData = expandObject(u);
const config = {
className: updateData.name || item.data.name,
subclassName: updateData.data.subclass || item.data.data.subclass,
level: getProperty(updateData, "data.levels"),
priorLevel: item ? item.data.data.levels : 0
}
// Get and create features for an increased class level
const newLevels = getProperty(u, "data.levels");
if (newLevels && (newLevels > item.data.data.levels)) {
classData.data.levels = newLevels;
changed = true;
}
let changed = false;
if ( config.level && (config.level > config.priorLevel)) changed = true;
if ( config.subclassName !== item.data.data.subclass ) changed = true;
// Get features for a newly changed subclass
const newSubclass = getProperty(u, "data.subclass");
if (newSubclass && (newSubclass !== item.data.data.subclass)) {
classData.data.subclass = newSubclass;
changed = true;
}
// Get the new features
// Get features to create
if ( changed ) {
const features = await Actor5e.getClassFeatures(classData);
if ( features.length ) toCreate.push(...features);
const existing = new Set(this.items.map(i => i.name));
const features = await Actor5e.getClassFeatures(config);
for ( let f of features ) {
if ( !existing.has(f.name) ) toCreate.push(f);
}
}
}
// De-dupe created items with ones that already exist (by name)
if ( toCreate.length ) {
const existing = new Set(this.items.map(i => i.name));
toCreate = toCreate.filter(c => !existing.has(c.name));
}
return toCreate
}
@ -301,9 +261,6 @@ export default class Actor5e extends Actor {
const required = xp.max - prior;
const pct = Math.round((xp.value - prior) * 100 / required);
xp.pct = Math.clamped(pct, 0, 100);
// Inventory encumbrance
data.attributes.encumbrance = this._computeEncumbrance(actorData);
}
/* -------------------------------------------- */
@ -369,17 +326,17 @@ export default class Actor5e extends Actor {
}
if ( joat && (skl.value === 0 ) ) multi = 0.5;
// Retain the maximum skill proficiency when skill proficiencies are merged
if ( originalSkills ) {
skl.value = Math.max(skl.value, originalSkills[id].value);
}
// Compute modifier
skl.bonus = checkBonus + skillBonus;
skl.mod = data.abilities[skl.ability].mod;
skl.prof = round(multi * data.attributes.prof);
skl.total = skl.mod + skl.prof + skl.bonus;
// If we merged skills when transforming, take the highest bonus here.
if (originalSkills && skl.value > 0.5) {
skl.total = Math.max(skl.total, originalSkills[id].total);
}
// Compute passive bonus
const passive = observant && (feats.observantFeat.skills.includes(id)) ? 5 : 0;
skl.passive = 10 + skl.total + passive;
@ -489,8 +446,8 @@ export default class Actor5e extends Actor {
else powers.pact.max = Math.max(1, Math.min(pl, 2), Math.min(pl - 8, 3), Math.min(pl - 13, 4));
powers.pact.value = Math.min(powers.pact.value, powers.pact.max);
} else {
powers.pact.level = 0;
powers.pact.max = 0;
powers.pact.max = parseInt(powers.pact.override) || 0
powers.pact.level = powers.pact.max > 0 ? 1 : 0;
}
}
@ -513,14 +470,14 @@ export default class Actor5e extends Actor {
if ( !physicalItems.includes(i.type) ) return weight;
const q = i.data.quantity || 0;
const w = i.data.weight || 0;
return weight + Math.round(q * w * 10) / 10;
return weight + (q * w);
}, 0);
// [Optional] add Currency Weight
if ( game.settings.get("sw5e", "currencyWeight") ) {
const currency = actorData.data.currency;
const numCoins = Object.values(currency).reduce((val, denom) => val += Math.max(denom, 0), 0);
weight += Math.round((numCoins * 10) / CONFIG.SW5E.encumbrance.currencyPerWeight) / 10;
weight += numCoins / CONFIG.SW5E.encumbrance.currencyPerWeight;
}
// Determine the encumbrance size class
@ -535,9 +492,10 @@ export default class Actor5e extends Actor {
if ( this.getFlag("sw5e", "powerfulBuild") ) mod = Math.min(mod * 2, 8);
// Compute Encumbrance percentage
weight = weight.toNearest(0.1);
const max = actorData.data.abilities.str.value * CONFIG.SW5E.encumbrance.strMultiplier * mod;
const pct = Math.clamped((weight* 100) / max, 0, 100);
return { value: weight, max, pct, encumbered: pct > (2/3) };
const pct = Math.clamped((weight * 100) / max, 0, 100);
return { value: weight.toNearest(0.1), max, pct, encumbered: pct > (2/3) };
}
/* -------------------------------------------- */
@ -564,9 +522,6 @@ export default class Actor5e extends Actor {
/** @override */
async update(data, options={}) {
// TODO: 0.7.1 compatibility - remove when stable
if ( !data.hasOwnProperty("data") ) data = expandObject(data);
// Apply changes in Actor size to Token width/height
const newSize = getProperty(data, "data.traits.size");
if ( newSize && (newSize !== getProperty(this.data, "data.traits.size")) ) {
@ -577,7 +532,7 @@ export default class Actor5e extends Actor {
data["token.width"] = size;
}
}
// Reset death save counters
if ( (this.data.data.attributes.hp.value <= 0) && (getProperty(data, "data.attributes.hp.value") > 0) ) {
setProperty(data, "data.attributes.death.success", 0);
@ -858,7 +813,7 @@ export default class Actor5e extends Actor {
rollAbilitySave(abilityId, options={}) {
const label = CONFIG.SW5E.abilities[abilityId];
const abl = this.data.data.abilities[abilityId];
// Construct parts
const parts = ["@mod"];
const data = {mod: abl.mod};
@ -937,7 +892,7 @@ export default class Actor5e extends Actor {
// Take action depending on the result
const success = roll.total >= 10;
const d20 = roll.dice[0].total;
const d20 = roll.dice[0].total;
// Save success
if ( success ) {
@ -1429,14 +1384,16 @@ export default class Actor5e extends Actor {
if ( !original ) return;
// Get the Tokens which represent this actor
const tokens = this.getActiveTokens(true);
const tokenUpdates = tokens.map(t => {
const tokenData = duplicate(original.data.token);
tokenData._id = t.id;
tokenData.actorId = original.id;
return tokenData;
});
canvas.scene.updateEmbeddedEntity("Token", tokenUpdates);
if ( canvas.ready ) {
const tokens = this.getActiveTokens(true);
const tokenUpdates = tokens.map(t => {
const tokenData = duplicate(original.data.token);
tokenData._id = t.id;
tokenData.actorId = original.id;
return tokenData;
});
canvas.scene.updateEmbeddedEntity("Token", tokenUpdates);
}
// Delete the polymorphed Actor and maybe re-render the original sheet
const isRendered = this.sheet.rendered;

View file

@ -1,10 +1,12 @@
import Item5e from "../../item/entity.js";
import TraitSelector from "../../apps/trait-selector.js";
import ActorSheetFlags from "../../apps/actor-flags.js";
import MovementConfig from "../../apps/movement-config.js";
import {SW5E} from '../../config.js';
import {onManageActiveEffect, prepareActiveEffectCategories} from "../../effects.js";
/**
* Extend the basic ActorSheet class to do all the SW5e things!
* Extend the basic ActorSheet class to suppose SW5e-specific logic and functionality.
* This sheet is an Abstract layer which is not used.
* @extends {ActorSheet}
*/
@ -43,8 +45,8 @@ export default class ActorSheet5e extends ActorSheet {
/** @override */
get template() {
if ( !game.user.isGM && this.actor.limited ) return "systems/sw5e/templates/actors/limited-sheet.html";
return `systems/sw5e/templates/actors/${this.actor.data.type}-sheet.html`;
if ( !game.user.isGM && this.actor.limited ) return "systems/sw5e/templates/actors/oldActor/limited-sheet.html";
return `systems/sw5e/templates/actors/oldActor/${this.actor.data.type}-sheet.html`;
}
/* -------------------------------------------- */
@ -94,6 +96,9 @@ export default class ActorSheet5e extends ActorSheet {
}
}
// Movement speeds
data.movement = this._getMovementSpeed(data.actor);
// Update traits
this._prepareTraits(data.actor.data.traits);
@ -101,7 +106,7 @@ export default class ActorSheet5e extends ActorSheet {
this._prepareItems(data);
// Prepare active effects
this._prepareEffects(data);
data.effects = prepareActiveEffectCategories(this.entity.effects);
// Return data to the sheet
return data
@ -109,6 +114,28 @@ export default class ActorSheet5e extends ActorSheet {
/* -------------------------------------------- */
/**
* Prepare the display of movement speed data for the Actor
* @param {object} actorData
* @returns {{primary: string, special: string}}
* @private
*/
_getMovementSpeed(actorData) {
const movement = actorData.data.attributes.movement;
const speeds = [
[movement.burrow, `${game.i18n.localize("SW5E.MovementBurrow")} ${movement.burrow}`],
[movement.climb, `${game.i18n.localize("SW5E.MovementClimb")} ${movement.climb}`],
[movement.fly, `${game.i18n.localize("SW5E.MovementFly")} ${movement.fly}` + (movement.hover ? ` (${game.i18n.localize("SW5E.MovementHover")})` : "")],
[movement.swim, `${game.i18n.localize("SW5E.MovementSwim")} ${movement.swim}`]
].filter(s => !!s[0]).sort((a, b) => b[0] - a[0]);
return {
primary: `${movement.walk || 0} ${movement.units}`,
special: speeds.length ? speeds.map(s => s[1]).join(", ") : ""
}
}
/* -------------------------------------------- */
/**
* Prepare the data structure for traits data like languages, resistances & vulnerabilities, and proficiencies
* @param {object} traits The raw traits data object from the actor data
@ -147,43 +174,6 @@ export default class ActorSheet5e extends ActorSheet {
/* -------------------------------------------- */
/**
* Prepare the data structure for Active Effects which are currently applied to the Actor.
* @param {object} data The object of rendering data which is being prepared
* @private
*/
_prepareEffects(data) {
// Define effect header categories
const categories = {
temporary: {
label: "Temporary Effects",
effects: []
},
passive: {
label: "Passive Effects",
effects: []
},
inactive: {
label: "Inactive Effects",
effects: []
}
};
// Iterate over active effects, classifying them into categories
for ( let e of this.actor.effects ) {
e._getSourceName(); // Trigger a lookup for the source name
if ( e.data.disabled ) categories.inactive.effects.push(e);
else if ( e.isTemporary ) categories.temporary.effects.push(e);
else categories.passive.effects.push(e);
}
// Add the prepared categories of effects to the rendering data
return data.effects = categories;
}
/* -------------------------------------------- */
/**
* Insert a power into the powerbook object when rendering the character sheet
* @param {Object} data The Actor data being prepared
@ -242,7 +232,7 @@ export default class ActorSheet5e extends ActorSheet {
registerSection(sl, lvl, CONFIG.SW5E.powerLevels[lvl], levels[sl]);
}
}
// Pact magic users have cantrips and a pact magic section
if ( levels.pact && levels.pact.max ) {
if ( !powerbook["0"] ) registerSection("power0", 0, CONFIG.SW5E.powerLevels[0]);
@ -363,7 +353,7 @@ export default class ActorSheet5e extends ActorSheet {
filterLists.on("click", ".filter-item", this._onToggleFilter.bind(this));
// Item summaries
html.find('.item .item-name h4').click(event => this._onItemSummary(event));
html.find('.item .item-name.rollable h4').click(event => this._onItemSummary(event));
// Editable Only Listeners
if ( this.isEditable ) {
@ -383,6 +373,7 @@ export default class ActorSheet5e extends ActorSheet {
html.find('.trait-selector').click(this._onTraitSelector.bind(this));
// Configure Special Flags
html.find('.configure-movement').click(this._onMovementConfig.bind(this));
html.find('.configure-flags').click(this._onConfigureFlags.bind(this));
// Owned Item management
@ -393,8 +384,7 @@ export default class ActorSheet5e extends ActorSheet {
html.find('.slot-max-override').click(this._onPowerSlotOverride.bind(this));
// Active Effect management
html.find(".effect-control").click(this._onManageActiveEffect.bind(this));
html.find(".effect-control").click(ev => onManageActiveEffect(ev, this.entity));
}
// Owner Only Listeners
@ -565,7 +555,7 @@ export default class ActorSheet5e extends ActorSheet {
}
/* -------------------------------------------- */
/** @override */
async _onDropItemCreate(itemData) {
@ -576,9 +566,7 @@ export default class ActorSheet5e extends ActorSheet {
}
// Create the owned item as normal
// TODO remove conditional logic in 0.7.x
if (isNewerVersion(game.data.version, "0.6.9")) return super._onDropItemCreate(itemData);
else return this.actor.createEmbeddedEntity("OwnedItem", itemData);
return super._onDropItemCreate(itemData);
}
/* -------------------------------------------- */
@ -731,28 +719,6 @@ export default class ActorSheet5e extends ActorSheet {
/* -------------------------------------------- */
/**
* Manage Active Effect instances through the Actor Sheet via effect control buttons.
* @param {MouseEvent} event The left-click event on the effect control
* @private
*/
_onManageActiveEffect(event) {
event.preventDefault();
const a = event.currentTarget;
const li = a.closest(".effect");
const effect = this.actor.effects.get(li.dataset.effectId);
switch ( a.dataset.action ) {
case "edit":
return effect.sheet.render(true);
case "delete":
return effect.delete();
case "toggle":
return effect.update({disabled: !effect.data.disabled});
}
}
/* -------------------------------------------- */
/**
* Handle rolling an Ability check, either a test or a saving throw
* @param {Event} event The originating click event
@ -825,6 +791,18 @@ export default class ActorSheet5e extends ActorSheet {
/* -------------------------------------------- */
/**
* Handle spawning the TraitSelector application which allows a checkbox of multiple trait options
* @param {Event} event The click event which originated the selection
* @private
*/
_onMovementConfig(event) {
event.preventDefault();
new MovementConfig(this.object).render(true);
}
/* -------------------------------------------- */
/** @override */
_getHeaderButtons() {
let buttons = super._getHeaderButtons();
@ -839,90 +817,4 @@ export default class ActorSheet5e extends ActorSheet {
});
return buttons;
}
/* -------------------------------------------- */
/* DEPRECATED */
/* -------------------------------------------- */
/**
* TODO: Remove once 0.7.x is release
* @deprecated since 0.7.0
*/
async _onDrop (event) {
event.preventDefault();
// Get dropped data
let data;
try {
data = JSON.parse(event.dataTransfer.getData('text/plain'));
} catch (err) {
return false;
}
if ( !data ) return false;
// Handle the drop with a Hooked function
const allowed = Hooks.call("dropActorSheetData", this.actor, this, data);
if ( allowed === false ) return;
// Case 1 - Dropped Item
if ( data.type === "Item" ) {
return this._onDropItem(event, data);
}
// Case 2 - Dropped Actor
if ( data.type === "Actor" ) {
return this._onDropActor(event, data);
}
}
/* -------------------------------------------- */
/**
* TODO: Remove once 0.7.x is release
* @deprecated since 0.7.0
*/
async _onDropItem(event, data) {
if ( !this.actor.owner ) return false;
let itemData = await this._getItemDropData(event, data);
// Handle item sorting within the same Actor
const actor = this.actor;
let sameActor = (data.actorId === actor._id) || (actor.isToken && (data.tokenId === actor.token.id));
if (sameActor) return this._onSortItem(event, itemData);
// Create a new item
this._onDropItemCreate(itemData);
}
/* -------------------------------------------- */
/**
* TODO: Remove once 0.7.x is release
* @deprecated since 0.7.0
*/
async _getItemDropData(event, data) {
let itemData = null;
// Case 1 - Import from a Compendium pack
if (data.pack) {
const pack = game.packs.get(data.pack);
if (pack.metadata.entity !== "Item") return;
itemData = await pack.getEntry(data.id);
}
// Case 2 - Data explicitly provided
else if (data.data) {
itemData = data.data;
}
// Case 3 - Import from World entity
else {
let item = game.items.get(data.id);
if (!item) return;
itemData = item.data;
}
// Return a copy of the extracted data
return duplicate(itemData);
}
}

View file

@ -0,0 +1,631 @@
import ActorSheet5e from "../base.js";
import Actor5e from "../../entity.js";
/**
* An Actor sheet for player character type actors in the SW5E system.
* Extends the base ActorSheet5e class.
* @type {ActorSheet5e}
*/
export default class ActorSheet5eCharacterNew extends ActorSheet5e {
get template() {
if (!game.user.isGM && this.actor.limited) return "systems/sw5e/templates/actors/newActor/limited-sheet.html";
return "systems/sw5e/templates/actors/newActor/character-sheet.html";
}
/**
* Define default rendering options for the NPC sheet
* @return {Object}
*/
static get defaultOptions() {
return mergeObject(super.defaultOptions, {
classes: ["swalt", "sw5e", "sheet", "actor", "character"],
blockFavTab: true,
subTabs: null,
width: 800,
tabs: [{
navSelector: ".root-tabs",
contentSelector: ".sheet-body",
initial: "attributes"
}],
});
}
/* -------------------------------------------- */
/**
* Add some extra data when rendering the sheet to reduce the amount of logic required within the template.
*/
getData() {
const sheetData = super.getData();
// Temporary HP
let hp = sheetData.data.attributes.hp;
if (hp.temp === 0) delete hp.temp;
if (hp.tempmax === 0) delete hp.tempmax;
// Resources
sheetData["resources"] = ["primary", "secondary", "tertiary"].reduce((arr, r) => {
const res = sheetData.data.resources[r] || {};
res.name = r;
res.placeholder = game.i18n.localize("SW5E.Resource"+r.titleCase());
if (res && res.value === 0) delete res.value;
if (res && res.max === 0) delete res.max;
return arr.concat([res]);
}, []);
// Experience Tracking
sheetData["disableExperience"] = game.settings.get("sw5e", "disableExperienceTracking");
sheetData["classLabels"] = this.actor.itemTypes.class.map(c => c.name).join(", ");
// Return data for rendering
return sheetData;
}
/* -------------------------------------------- */
/**
* Organize and classify Owned Items for Character sheets
* @private
*/
_prepareItems(data) {
// Categorize items as inventory, powerbook, features, and classes
const inventory = {
weapon: { label: "SW5E.ItemTypeWeaponPl", items: [], dataset: {type: "weapon"} },
equipment: { label: "SW5E.ItemTypeEquipmentPl", items: [], dataset: {type: "equipment"} },
consumable: { label: "SW5E.ItemTypeConsumablePl", items: [], dataset: {type: "consumable"} },
tool: { label: "SW5E.ItemTypeToolPl", items: [], dataset: {type: "tool"} },
backpack: { label: "SW5E.ItemTypeContainerPl", items: [], dataset: {type: "backpack"} },
loot: { label: "SW5E.ItemTypeLootPl", items: [], dataset: {type: "loot"} }
};
// Partition items by category
let [items, powers, feats, classes, species, archetypes, classfeatures, backgrounds, lightsaberforms] = data.items.reduce((arr, item) => {
// Item details
item.img = item.img || DEFAULT_TOKEN;
item.isStack = Number.isNumeric(item.data.quantity) && (item.data.quantity !== 1);
// Item usage
item.hasUses = item.data.uses && (item.data.uses.max > 0);
item.isOnCooldown = item.data.recharge && !!item.data.recharge.value && (item.data.recharge.charged === false);
item.isDepleted = item.isOnCooldown && (item.data.uses.per && (item.data.uses.value > 0));
item.hasTarget = !!item.data.target && !(["none",""].includes(item.data.target.type));
// Item toggle state
this._prepareItemToggleState(item);
// Classify items into types
if ( item.type === "power" ) arr[1].push(item);
else if ( item.type === "feat" ) arr[2].push(item);
else if ( item.type === "class" ) arr[3].push(item);
else if ( item.type === "species" ) arr[4].push(item);
else if ( item.type === "archetype" ) arr[5].push(item);
else if ( item.type === "classfeature" ) arr[6].push(item);
else if ( item.type === "background" ) arr[7].push(item);
else if ( item.type === "lightsaberform" ) arr[8].push(item);
else if ( Object.keys(inventory).includes(item.type ) ) arr[0].push(item);
return arr;
}, [[], [], [], [], [], [], [], [], []]);
// Apply active item filters
items = this._filterItems(items, this._filters.inventory);
powers = this._filterItems(powers, this._filters.powerbook);
feats = this._filterItems(feats, this._filters.features);
// Organize items
for ( let i of items ) {
i.data.quantity = i.data.quantity || 0;
i.data.weight = i.data.weight || 0;
i.totalWeight = Math.round(i.data.quantity * i.data.weight * 10) / 10;
inventory[i.type].items.push(i);
}
// Organize Powerbook and count the number of prepared powers (excluding always, at will, etc...)
const powerbook = this._preparePowerbook(data, powers);
const nPrepared = powers.filter(s => {
return (s.data.level > 0) && (s.data.preparation.mode === "prepared") && s.data.preparation.prepared;
}).length;
// Organize Features
const features = {
classes: { label: "SW5E.ItemTypeClassPl", items: [], hasActions: false, dataset: {type: "class"}, isClass: true },
classfeatures: { label: "SW5E.ItemTypeClassFeats", items: [], hasActions: false, dataset: {type: "classfeature"}, isClassfeature: true },
archetype: { label: "SW5E.ItemTypeArchetype", items: [], hasActions: false, dataset: {type: "archetype"}, isArchetype: true },
species: { label: "SW5E.ItemTypeSpecies", items: [], hasActions: false, dataset: {type: "species"}, isSpecies: true },
background: { label: "SW5E.ItemTypeBackground", items: [], hasActions: false, dataset: {type: "background"}, isBackground: true },
lightsaberform: { label: "SW5E.ItemTypeLightsaberForm", items: [], hasActions: false, dataset: {type: "lightsaberform"}, isLightsaberform: true },
active: { label: "SW5E.FeatureActive", items: [], hasActions: true, dataset: {type: "feat", "activation.type": "action"} },
passive: { label: "SW5E.FeaturePassive", items: [], hasActions: false, dataset: {type: "feat"} }
};
for ( let f of feats ) {
if ( f.data.activation.type ) features.active.items.push(f);
else features.passive.items.push(f);
}
classes.sort((a, b) => b.levels - a.levels);
features.classes.items = classes;
features.classfeatures.items = classfeatures;
features.archetype.items = archetypes;
features.species.items = species;
features.background.items = backgrounds;
features.lightsaberform.items = lightsaberforms;
// Assign and return
data.inventory = Object.values(inventory);
data.powerbook = powerbook;
data.preparedPowers = nPrepared;
data.features = Object.values(features);
}
/* -------------------------------------------- */
/**
* A helper method to establish the displayed preparation state for an item
* @param {Item} item
* @private
*/
_prepareItemToggleState(item) {
if (item.type === "power") {
const isAlways = getProperty(item.data, "preparation.mode") === "always";
const isPrepared = getProperty(item.data, "preparation.prepared");
item.toggleClass = isPrepared ? "active" : "";
if ( isAlways ) item.toggleClass = "fixed";
if ( isAlways ) item.toggleTitle = CONFIG.SW5E.powerPreparationModes.always;
else if ( isPrepared ) item.toggleTitle = CONFIG.SW5E.powerPreparationModes.prepared;
else item.toggleTitle = game.i18n.localize("SW5E.PowerUnprepared");
}
else {
const isActive = getProperty(item.data, "equipped");
item.toggleClass = isActive ? "active" : "";
item.toggleTitle = game.i18n.localize(isActive ? "SW5E.Equipped" : "SW5E.Unequipped");
}
}
/* -------------------------------------------- */
/* Event Listeners and Handlers
/* -------------------------------------------- */
/**
* Activate event listeners using the prepared sheet HTML
* @param html {HTML} The prepared HTML object ready to be rendered into the DOM
*/
activateListeners(html) {
super.activateListeners(html);
if ( !this.options.editable ) return;
// Inventory Functions
html.find(".currency-convert").click(this._onConvertCurrency.bind(this));
// Item State Toggling
html.find('.item-toggle').click(this._onToggleItem.bind(this));
// Short and Long Rest
html.find('.short-rest').click(this._onShortRest.bind(this));
html.find('.long-rest').click(this._onLongRest.bind(this));
// Death saving throws
html.find('.death-save').click(this._onDeathSave.bind(this));
// Send Languages to Chat onClick
html.find('[data-options="share-languages"]').click(event => {
event.preventDefault();
let langs = this.actor.data.data.traits.languages.value.map(l => SW5E.languages[l] || l).join(", ");
let custom = this.actor.data.data.traits.languages.custom;
if (custom) langs += ", " + custom.replace(/;/g, ",");
let content = `
<div class="sw5e chat-card item-card" data-acor-id="${this.actor._id}">
<header class="card-header flexrow">
<img src="${this.actor.data.token.img}" title="" width="36" height="36" style="border: none;"/>
<h3>Known Languages</h3>
</header>
<div class="card-content">${langs}</div>
</div>
`;
// Send to Chat
let rollWhisper = null;
let rollBlind = false;
let rollMode = game.settings.get("core", "rollMode");
if (["gmroll", "blindroll"].includes(rollMode)) rollWhisper = ChatMessage.getWhisperIDs("GM");
if (rollMode === "blindroll") rollBlind = true;
ChatMessage.create({
user: game.user._id,
content: content,
speaker: {
actor: this.actor._id,
token: this.actor.token,
alias: this.actor.name
},
type: CONST.CHAT_MESSAGE_TYPES.OTHER
});
});
// Item Delete Confirmation
html.find('.item-delete').off("click");
html.find('.item-delete').click(event => {
let li = $(event.currentTarget).parents('.item');
let itemId = li.attr("data-item-id");
let item = this.actor.getOwnedItem(itemId);
new Dialog({
title: `Deleting ${item.data.name}`,
content: `<p>Are you sure you want to delete ${item.data.name}?</p>`,
buttons: {
Yes: {
icon: '<i class="fa fa-check"></i>',
label: 'Yes',
callback: dlg => {
this.actor.deleteOwnedItem(itemId);
}
},
cancel: {
icon: '<i class="fas fa-times"></i>',
label: 'No'
},
},
default: 'cancel'
}).render(true);
});
}
/* -------------------------------------------- */
/**
* Handle rolling a death saving throw for the Character
* @param {MouseEvent} event The originating click event
* @private
*/
_onDeathSave(event) {
event.preventDefault();
return this.actor.rollDeathSave({event: event});
}
/* -------------------------------------------- */
/**
* Handle toggling the state of an Owned Item within the Actor
* @param {Event} event The triggering click event
* @private
*/
_onToggleItem(event) {
event.preventDefault();
const itemId = event.currentTarget.closest(".item").dataset.itemId;
const item = this.actor.getOwnedItem(itemId);
const attr = item.data.type === "power" ? "data.preparation.prepared" : "data.equipped";
return item.update({[attr]: !getProperty(item.data, attr)});
}
/* -------------------------------------------- */
/**
* Take a short rest, calling the relevant function on the Actor instance
* @param {Event} event The triggering click event
* @private
*/
async _onShortRest(event) {
event.preventDefault();
await this._onSubmit(event);
return this.actor.shortRest();
}
/* -------------------------------------------- */
/**
* Take a long rest, calling the relevant function on the Actor instance
* @param {Event} event The triggering click event
* @private
*/
async _onLongRest(event) {
event.preventDefault();
await this._onSubmit(event);
return this.actor.longRest();
}
/* -------------------------------------------- */
/**
* Handle mouse click events to convert currency to the highest possible denomination
* @param {MouseEvent} event The originating click event
* @private
*/
async _onConvertCurrency(event) {
event.preventDefault();
return Dialog.confirm({
title: `${game.i18n.localize("SW5E.CurrencyConvert")}`,
content: `<p>${game.i18n.localize("SW5E.CurrencyConvertHint")}</p>`,
yes: () => this.actor.convertCurrency()
});
}
/* -------------------------------------------- */
/** @override */
async _onDropItemCreate(itemData) {
// Upgrade the number of class levels a character has and add features
if ( itemData.type === "class" ) {
const cls = this.actor.itemTypes.class.find(c => c.name === itemData.name);
const classWasAlreadyPresent = !!cls;
// Add new features for class level
if ( !classWasAlreadyPresent ) {
Actor5e.getClassFeatures(itemData).then(features => {
this.actor.createEmbeddedEntity("OwnedItem", features);
});
}
// If the actor already has the class, increment the level instead of creating a new item
// then add new features as long as level increases
if ( classWasAlreadyPresent ) {
const lvl = cls.data.data.levels;
const newLvl = Math.min(lvl + 1, 20 + lvl - this.actor.data.data.details.level);
if ( !(lvl === newLvl) ) {
cls.update({"data.levels": newLvl});
itemData.data.levels = newLvl;
Actor5e.getClassFeatures(itemData).then(features => {
this.actor.createEmbeddedEntity("OwnedItem", features);
});
}
return
}
}
super._onDropItemCreate(itemData);
}
}
async function addFavorites(app, html, data) {
// Thisfunction is adapted for the SwaltSheet from the Favorites Item
// Tab Module created for Foundry VTT - by Felix Müller (Felix#6196 on Discord).
// It is licensed under a Creative Commons Attribution 4.0 International License
// and can be found at https://github.com/syl3r86/favtab.
let favItems = [];
let favFeats = [];
let favPowers = {
0: {
isCantrip: true,
powers: []
},
1: {
powers: [],
value: data.actor.data.powers.power1.value,
max: data.actor.data.powers.power1.max
},
2: {
powers: [],
value: data.actor.data.powers.power2.value,
max: data.actor.data.powers.power2.max
},
3: {
powers: [],
value: data.actor.data.powers.power3.value,
max: data.actor.data.powers.power3.max
},
4: {
powers: [],
value: data.actor.data.powers.power4.value,
max: data.actor.data.powers.power4.max
},
5: {
powers: [],
value: data.actor.data.powers.power5.value,
max: data.actor.data.powers.power5.max
},
6: {
powers: [],
value: data.actor.data.powers.power6.value,
max: data.actor.data.powers.power6.max
},
7: {
powers: [],
value: data.actor.data.powers.power7.value,
max: data.actor.data.powers.power7.max
},
8: {
powers: [],
value: data.actor.data.powers.power8.value,
max: data.actor.data.powers.power8.max
},
9: {
powers: [],
value: data.actor.data.powers.power9.value,
max: data.actor.data.powers.power9.max
}
}
let powerCount = 0
let items = data.actor.items;
for (let item of items) {
if (item.type == "class") continue;
if (item.flags.favtab === undefined || item.flags.favtab.isFavourite === undefined) {
item.flags.favtab = {
isFavourite: false
};
}
let isFav = item.flags.favtab.isFavourite;
if (app.options.editable) {
let favBtn = $(`<a class="item-control item-toggle item-fav ${isFav ? "active" : ""}" data-fav="${isFav}" title="${isFav ? "Remove from Favourites" : "Add to Favourites"}"><i class="fas fa-star"></i></a>`);
favBtn.click(ev => {
app.actor.getOwnedItem(item._id).update({
"flags.favtab.isFavourite": !item.flags.favtab.isFavourite
});
});
html.find(`.item[data-item-id="${item._id}"]`).find('.item-controls').prepend(favBtn);
}
if (isFav) {
item.powerComps = "";
if (item.data.components) {
let comps = item.data.components;
let v = (comps.vocal) ? "V" : "";
let s = (comps.somatic) ? "S" : "";
let m = (comps.material) ? "M" : "";
let c = (comps.concentration) ? true : false;
let r = (comps.ritual) ? true : false;
item.powerComps = `${v}${s}${m}`;
item.powerCon = c;
item.powerRit = r;
}
item.editable = app.options.editable;
switch (item.type) {
case 'feat':
if (item.flags.favtab.sort === undefined) {
item.flags.favtab.sort = (favFeats.count + 1) * 100000; // initial sort key if not present
}
favFeats.push(item);
break;
case 'power':
if (item.data.preparation.mode) {
item.powerPrepMode = ` (${CONFIG.SW5E.powerPreparationModes[item.data.preparation.mode]})`
}
if (item.data.level) {
favPowers[item.data.level].powers.push(item);
} else {
favPowers[0].powers.push(item);
}
powerCount++;
break;
default:
if (item.flags.favtab.sort === undefined) {
item.flags.favtab.sort = (favItems.count + 1) * 100000; // initial sort key if not present
}
favItems.push(item);
break;
}
}
}
// Alter core CSS to fit new button
// if (app.options.editable) {
// html.find('.powerbook .item-controls').css('flex', '0 0 88px');
// html.find('.inventory .item-controls, .features .item-controls').css('flex', '0 0 90px');
// html.find('.favourite .item-controls').css('flex', '0 0 22px');
// }
let tabContainer = html.find('.favtabtarget');
data.favItems = favItems.length > 0 ? favItems.sort((a, b) => (a.flags.favtab.sort) - (b.flags.favtab.sort)) : false;
data.favFeats = favFeats.length > 0 ? favFeats.sort((a, b) => (a.flags.favtab.sort) - (b.flags.favtab.sort)) : false;
data.favPowers = powerCount > 0 ? favPowers : false;
data.editable = app.options.editable;
await loadTemplates(['systems/sw5e/templates/actors/newActor/item.hbs']);
let favtabHtml = $(await renderTemplate('systems/sw5e/templates/actors/newActor/template.hbs', data));
favtabHtml.find('.item-name h4').click(event => app._onItemSummary(event));
if (app.options.editable) {
favtabHtml.find('.item-image').click(ev => app._onItemRoll(ev));
let handler = ev => app._onDragItemStart(ev);
favtabHtml.find('.item').each((i, li) => {
if (li.classList.contains("inventory-header")) return;
li.setAttribute("draggable", true);
li.addEventListener("dragstart", handler, false);
});
//favtabHtml.find('.item-toggle').click(event => app._onToggleItem(event));
favtabHtml.find('.item-edit').click(ev => {
let itemId = $(ev.target).parents('.item')[0].dataset.itemId;
app.actor.getOwnedItem(itemId).sheet.render(true);
});
favtabHtml.find('.item-fav').click(ev => {
let itemId = $(ev.target).parents('.item')[0].dataset.itemId;
let val = !app.actor.getOwnedItem(itemId).data.flags.favtab.isFavourite
app.actor.getOwnedItem(itemId).update({
"flags.favtab.isFavourite": val
});
});
// Sorting
favtabHtml.find('.item').on('drop', ev => {
ev.preventDefault();
ev.stopPropagation();
let dropData = JSON.parse(ev.originalEvent.dataTransfer.getData('text/plain'));
// if (dropData.actorId !== app.actor.id || dropData.data.type === 'power') return;
if (dropData.actorId !== app.actor.id) return;
let list = null;
if (dropData.data.type === 'feat') list = favFeats;
else list = favItems;
let dragSource = list.find(i => i._id === dropData.data._id);
let siblings = list.filter(i => i._id !== dropData.data._id);
let targetId = ev.target.closest('.item').dataset.itemId;
let dragTarget = siblings.find(s => s._id === targetId);
if (dragTarget === undefined) return;
const sortUpdates = SortingHelpers.performIntegerSort(dragSource, {
target: dragTarget,
siblings: siblings,
sortKey: 'flags.favtab.sort'
});
const updateData = sortUpdates.map(u => {
const update = u.update;
update._id = u.target._id;
return update;
});
app.actor.updateEmbeddedEntity("OwnedItem", updateData);
});
}
tabContainer.append(favtabHtml);
// try {
// if (game.modules.get("betterrolls5e") && game.modules.get("betterrolls5e").active) BetterRolls.addItemContent(app.object, favtabHtml, ".item .item-name h4", ".item-properties", ".item > .rollable div");
// }
// catch (err) {
// // Better Rolls not found!
// }
Hooks.callAll("renderedSwaltSheet", app, html, data);
}
async function addSubTabs(app, html, data) {
if(data.options.subTabs == null) {
//let subTabs = []; //{subgroup: '', target: '', active: false}
data.options.subTabs = {};
html.find('[data-subgroup-selection] [data-subgroup]').each((idx, el) => {
let subgroup = el.getAttribute('data-subgroup');
let target = el.getAttribute('data-target');
let targetObj = {target: target, active: el.classList.contains("active")}
if(data.options.subTabs.hasOwnProperty(subgroup)) {
data.options.subTabs[subgroup].push(targetObj);
} else {
data.options.subTabs[subgroup] = [];
data.options.subTabs[subgroup].push(targetObj);
}
})
}
for(const group in data.options.subTabs) {
data.options.subTabs[group].forEach(tab => {
if(tab.active) {
html.find(`[data-subgroup=${group}][data-target=${tab.target}]`).addClass('active');
} else {
html.find(`[data-subgroup=${group}][data-target=${tab.target}]`).removeClass('active');
}
})
}
html.find('[data-subgroup-selection]').children().on('click', event => {
let subgroup = event.target.closest('[data-subgroup]').getAttribute('data-subgroup');
let target = event.target.closest('[data-target]').getAttribute('data-target');
html.find(`[data-subgroup=${subgroup}]`).removeClass('active');
html.find(`[data-subgroup=${subgroup}][data-target=${target}]`).addClass('active');
let tabId = data.options.subTabs[subgroup].find(tab => {
return tab.target == target
});
data.options.subTabs[subgroup].map(el => {
if(el.target == target) {
el.active = true;
} else {
el.active = false;
}
return el;
})
})
}
Hooks.on("renderActorSheet5eCharacterNew", (app, html, data) => {
addFavorites(app, html, data);
addSubTabs(app, html, data);
});

View file

@ -1,5 +1,5 @@
import ActorSheet5e from "./base.js";
import Actor5e from "../entity.js";
import ActorSheet5e from "../base.js";
import Actor5e from "../../entity.js";
/**
* An Actor sheet for player character type actors in the SW5E system.
@ -68,7 +68,7 @@ export default class ActorSheet5eCharacter extends ActorSheet5e {
backpack: { label: "SW5E.ItemTypeContainerPl", items: [], dataset: {type: "backpack"} },
loot: { label: "SW5E.ItemTypeLootPl", items: [], dataset: {type: "loot"} }
};
// Partition items by category
let [items, powers, feats, classes, species, archetypes, classfeatures, backgrounds, fightingstyles, fightingmasteries, lightsaberforms] = data.items.reduce((arr, item) => {
@ -109,7 +109,7 @@ export default class ActorSheet5eCharacter extends ActorSheet5e {
for ( let i of items ) {
i.data.quantity = i.data.quantity || 0;
i.data.weight = i.data.weight || 0;
i.totalWeight = Math.round(i.data.quantity * i.data.weight * 10) / 10;
i.totalWeight = (i.data.quantity * i.data.weight).toNearest(0.1);
inventory[i.type].items.push(i);
}
@ -123,12 +123,12 @@ export default class ActorSheet5eCharacter extends ActorSheet5e {
const features = {
classes: { label: "SW5E.ItemTypeClassPl", items: [], hasActions: false, dataset: {type: "class"}, isClass: true },
classfeatures: { label: "SW5E.ItemTypeClassFeats", items: [], hasActions: false, dataset: {type: "classfeature"}, isClassfeature: true },
archetype: { label: "SW5E.ItemTypeArchetype", items: [], hasActions: false, dataset: {type: "archetype"}, isArchetype: true },
species: { label: "SW5E.ItemTypeSpecies", items: [], hasActions: false, dataset: {type: "species"}, isSpecies: true },
background: { label: "SW5E.ItemTypeBackground", items: [], hasActions: false, dataset: {type: "background"}, isBackground: true },
fightingstyles: { label: "SW5E.ItemTypeFightingStylePl", items: [], hasActions: false, dataset: {type: "fightingstyle"}, isFightingstyle: true },
fightingmasteries: { label: "SW5E.ItemTypeFightingMasteryPl", items: [], hasActions: false, dataset: {type: "fightingmastery"}, isFightingmastery: true },
lightsaberforms: { label: "SW5E.ItemTypeLightsaberFormPl", items: [], hasActions: false, dataset: {type: "lightsaberform"}, isLightsaberform: true },
archetype: { label: "SW5E.ItemTypeArchetype", items: [], hasActions: false, dataset: {type: "archetype"}, isArchetype: true },
species: { label: "SW5E.ItemTypeSpecies", items: [], hasActions: false, dataset: {type: "species"}, isSpecies: true },
background: { label: "SW5E.ItemTypeBackground", items: [], hasActions: false, dataset: {type: "background"}, isBackground: true },
fightingstyles: { label: "SW5E.ItemTypeFightingStylePl", items: [], hasActions: false, dataset: {type: "fightingstyle"}, isFightingstyle: true },
fightingmasteries: { label: "SW5E.ItemTypeFightingMasteryPl", items: [], hasActions: false, dataset: {type: "fightingmastery"}, isFightingmastery: true },
lightsaberforms: { label: "SW5E.ItemTypeLightsaberFormPl", items: [], hasActions: false, dataset: {type: "lightsaberform"}, isLightsaberform: true },
active: { label: "SW5E.FeatureActive", items: [], hasActions: true, dataset: {type: "feat", "activation.type": "action"} },
passive: { label: "SW5E.FeaturePassive", items: [], hasActions: false, dataset: {type: "feat"} }
};
@ -138,13 +138,13 @@ export default class ActorSheet5eCharacter extends ActorSheet5e {
}
classes.sort((a, b) => b.levels - a.levels);
features.classes.items = classes;
features.classfeatures.items = classfeatures;
features.archetype.items = archetypes;
features.species.items = species;
features.background.items = backgrounds;
features.fightingstyles.items = fightingstyles;
features.fightingmasteries.items = fightingmasteries;
features.lightsaberforms.items = lightsaberforms;
features.classfeatures.items = classfeatures;
features.archetype.items = archetypes;
features.species.items = species;
features.background.items = backgrounds;
features.fightingstyles.items = fightingstyles;
features.fightingmasteries.items = fightingmasteries;
features.lightsaberforms.items = lightsaberforms;
// Assign and return
data.inventory = Object.values(inventory);
@ -189,9 +189,6 @@ export default class ActorSheet5eCharacter extends ActorSheet5e {
super.activateListeners(html);
if ( !this.options.editable ) return;
// Inventory Functions
html.find(".currency-convert").click(this._onConvertCurrency.bind(this));
// Item State Toggling
html.find('.item-toggle').click(this._onToggleItem.bind(this));
@ -199,8 +196,8 @@ export default class ActorSheet5eCharacter extends ActorSheet5e {
html.find('.short-rest').click(this._onShortRest.bind(this));
html.find('.long-rest').click(this._onLongRest.bind(this));
// Death saving throws
html.find('.death-save').click(this._onDeathSave.bind(this));
// Rollable sheet actions
html.find(".rollable[data-action]").click(this._onSheetAction.bind(this));
}
/* -------------------------------------------- */
@ -210,14 +207,19 @@ export default class ActorSheet5eCharacter extends ActorSheet5e {
* @param {MouseEvent} event The originating click event
* @private
*/
_onDeathSave(event) {
_onSheetAction(event) {
event.preventDefault();
return this.actor.rollDeathSave({event: event});
const button = event.currentTarget;
switch( button.dataset.action ) {
case "rollDeathSave":
return this.actor.rollDeathSave({event: event});
case "rollInitiative":
return this.actor.rollInitiative({createCombatants: true});
}
}
/* -------------------------------------------- */
/**
* Handle toggling the state of an Owned Item within the Actor
* @param {Event} event The triggering click event
@ -259,53 +261,39 @@ export default class ActorSheet5eCharacter extends ActorSheet5e {
/* -------------------------------------------- */
/**
* Handle mouse click events to convert currency to the highest possible denomination
* @param {MouseEvent} event The originating click event
* @private
*/
async _onConvertCurrency(event) {
event.preventDefault();
return Dialog.confirm({
title: `${game.i18n.localize("SW5E.CurrencyConvert")}`,
content: `<p>${game.i18n.localize("SW5E.CurrencyConvertHint")}</p>`,
yes: () => this.actor.convertCurrency()
});
}
/* -------------------------------------------- */
/** @override */
async _onDropItemCreate(itemData) {
let addLevel = false;
// Upgrade the number of class levels a character has and add features
if ( itemData.type === "class" ) {
const cls = this.actor.itemTypes.class.find(c => c.name === itemData.name);
const classWasAlreadyPresent = !!cls;
let priorLevel = cls?.data.data.levels ?? 0;
const hasClass = !!cls;
// Add new features for class level
if ( !classWasAlreadyPresent ) {
Actor5e.getClassFeatures(itemData).then(features => {
this.actor.createEmbeddedEntity("OwnedItem", features);
});
// Increment levels instead of creating a new item
if ( hasClass ) {
const next = Math.min(priorLevel + 1, 20 + priorLevel - this.actor.data.data.details.level);
if ( next > priorLevel ) {
itemData.levels = next;
await cls.update({"data.levels": next});
addLevel = true;
}
}
// If the actor already has the class, increment the level instead of creating a new item
// then add new features as long as level increases
if ( classWasAlreadyPresent ) {
const lvl = cls.data.data.levels;
const newLvl = Math.min(lvl + 1, 20 + lvl - this.actor.data.data.details.level);
if ( !(lvl === newLvl) ) {
cls.update({"data.levels": newLvl});
itemData.data.levels = newLvl;
Actor5e.getClassFeatures(itemData).then(features => {
this.actor.createEmbeddedEntity("OwnedItem", features);
});
}
return
// Add class features
if ( !hasClass || addLevel ) {
const features = await Actor5e.getClassFeatures({
className: itemData.name,
subclassName: itemData.data.subclass,
level: itemData.levels,
priorLevel: priorLevel
});
await this.actor.createEmbeddedEntity("OwnedItem", features);
}
}
super._onDropItemCreate(itemData);
// Default drop handling if levels were not added
if ( !addLevel ) super._onDropItemCreate(itemData);
}
}

View file

@ -1,4 +1,4 @@
import ActorSheet5e from "../sheets/base.js";
import ActorSheet5e from "../base.js";
/**
* An Actor sheet for NPC type characters in the SW5E system.
@ -106,7 +106,7 @@ export default class ActorSheet5eNPC extends ActorSheet5e {
/** @override */
activateListeners(html) {
super.activateListeners(html);
html.find(".health .rollable").click(this._onRollHealthFormula.bind(this));
html.find(".health .rollable").click(this._onRollHPFormula.bind(this));
}
/* -------------------------------------------- */
@ -116,7 +116,7 @@ export default class ActorSheet5eNPC extends ActorSheet5e {
* @param {Event} event The original click event
* @private
*/
_onRollHealthFormula(event) {
_onRollHPFormula(event) {
event.preventDefault();
const formula = this.actor.data.data.attributes.hp.formula;
if ( !formula ) return;

View file

@ -1,4 +1,4 @@
import ActorSheet5e from "./base.js";
import ActorSheet5e from "../base.js";
/**
* An Actor sheet for Vehicle type actors.
@ -49,12 +49,9 @@ export default class ActorSheet5eVehicle extends ActorSheet5e {
totalWeight /= CONFIG.SW5E.encumbrance.vehicleWeightMultiplier;
// Compute overall encumbrance
const enc = {
max: actorData.data.attributes.capacity.cargo,
value: Math.round(totalWeight * 10) / 10
};
enc.pct = Math.min(enc.value * 100 / enc.max, 99);
return enc;
const max = actorData.data.attributes.capacity.cargo;
const pct = Math.clamped((totalWeight * 100) / max, 0, 100);
return {value: totalWeight.toNearest(0.1), max, pct};
}
/* -------------------------------------------- */
@ -89,6 +86,13 @@ export default class ActorSheet5eVehicle extends ActorSheet5e {
/* -------------------------------------------- */
/** @override */
_getMovementSpeed(actorData) {
return {primary: "", special: ""};
}
/* -------------------------------------------- */
/**
* Organize Owned Items for rendering the Vehicle sheet.
* @private

View file

@ -70,7 +70,7 @@ export default class AbilityUseDialog extends Dialog {
dlg.render(true);
});
}
/* -------------------------------------------- */
/* Helpers */
/* -------------------------------------------- */

View file

@ -1,9 +1,9 @@
/**
* An application class which provides advanced configuration for special character flags which modify an Actor
* @extends {BaseEntitySheet}
* @implements {BaseEntitySheet}
*/
export default class ActorSheetFlags extends BaseEntitySheet {
static get defaultOptions() {
static get defaultOptions() {
const options = super.defaultOptions;
return mergeObject(options, {
id: "actor-flags",
@ -16,22 +16,16 @@ export default class ActorSheetFlags extends BaseEntitySheet {
/* -------------------------------------------- */
/**
* Configure the title of the special traits selection window to include the Actor name
* @type {String}
*/
/** @override */
get title() {
return `${game.i18n.localize('SW5E.FlagsTitle')}: ${this.object.name}`;
}
/* -------------------------------------------- */
/**
* Prepare data used to render the special Actor traits selection UI
* @return {Object}
*/
/** @override */
getData() {
const data = super.getData();
const data = {};
data.actor = this.object;
data.flags = this._getFlags();
data.bonuses = this._getBonuses();
@ -43,17 +37,18 @@ export default class ActorSheetFlags extends BaseEntitySheet {
/**
* Prepare an object of flags data which groups flags by section
* Add some additional data for rendering
* @return {Object}
* @return {object}
*/
_getFlags() {
const flags = {};
const baseData = this.entity._data;
for ( let [k, v] of Object.entries(CONFIG.SW5E.characterFlags) ) {
if ( !flags.hasOwnProperty(v.section) ) flags[v.section] = {};
let flag = duplicate(v);
flag.type = v.type.name;
flag.isCheckbox = v.type === Boolean;
flag.isSelect = v.hasOwnProperty('choices');
flag.value = this.entity.getFlag("sw5e", k);
flag.value = getProperty(baseData.flags, `sw5e.${k}`);
flags[v.section][`flags.sw5e.${k}`] = flag;
}
return flags;
@ -63,7 +58,7 @@ export default class ActorSheetFlags extends BaseEntitySheet {
/**
* Get the bonuses fields and their localization strings
* @return {Array}
* @return {Array<object>}
* @private
*/
_getBonuses() {
@ -82,17 +77,14 @@ export default class ActorSheetFlags extends BaseEntitySheet {
{name: "data.bonuses.power.dc", label: "SW5E.BonusPowerDC"}
];
for ( let b of bonuses ) {
b.value = getProperty(this.object.data, b.name) || "";
b.value = getProperty(this.object._data, b.name) || "";
}
return bonuses;
}
/* -------------------------------------------- */
/**
* Update the Actor using the configured flags
* Remove/unset any flags which are no longer configured
*/
/** @override */
async _updateObject(event, formData) {
const actor = this.object;
let updateData = expandObject(formData);
@ -100,10 +92,12 @@ export default class ActorSheetFlags extends BaseEntitySheet {
// Unset any flags which are "false"
let unset = false;
const flags = updateData.flags.sw5e;
//clone flags to dnd5e for module compatability
updateData.flags.dnd5e = updateData.flags.sw5e
for ( let [k, v] of Object.entries(flags) ) {
if ( [undefined, null, "", false, 0].includes(v) ) {
delete flags[k];
if ( hasProperty(actor.data.flags, `sw5e.${k}`) ) {
if ( hasProperty(actor._data.flags, `sw5e.${k}`) ) {
unset = true;
flags[`-=${k}`] = null;
}
@ -118,10 +112,6 @@ export default class ActorSheetFlags extends BaseEntitySheet {
}
// Diff the data against any applied overrides and apply
// TODO: Remove this logical gate once 0.7.x is release channel
if ( !isNewerVersion("0.7.1", game.data.version) ){
updateData = diffObject(this.object.data, updateData);
}
await actor.update(updateData, {diff: false});
}
}

View file

@ -1,102 +0,0 @@
/**
* A specialized Dialog subclass for casting a cast item at a certain level
* @type {Dialog}
*/
export class CastDialog extends Dialog {
constructor(actor, item, dialogData={}, options={}) {
super(dialogData, options);
this.options.classes = ["sw5e", "dialog"];
/**
* Store a reference to the Actor entity which is casting the cast
* @type {Actor5e}
*/
this.actor = actor;
/**
* Store a reference to the Item entity which is the cast being cast
* @type {Item5e}
*/
this.item = item;
}
/* -------------------------------------------- */
/* Rendering */
/* -------------------------------------------- */
/**
* A constructor function which displays the Cast Cast Dialog app for a given Actor and Item.
* Returns a Promise which resolves to the dialog FormData once the workflow has been completed.
* @param {Actor5e} actor
* @param {Item5e} item
* @return {Promise}
*/
static async create(actor, item) {
const ad = actor.data.data;
const id = item.data.data;
// Determine whether the cast may be upcast
const lvl = id.level;
const canUpcast = (lvl > 0) && CONFIG.SW5E.castUpcastModes.includes(id.preparation.mode);
// Determine the levels which are feasible
let lmax = 0;
const castLevels = Array.fromRange(10).reduce((arr, i) => {
if ( i < lvl ) return arr;
const l = ad.casts["cast"+i] || {max: 0, override: null};
let max = parseInt(l.override || l.max || 0);
let slots = Math.clamped(parseInt(l.value || 0), 0, max);
if ( max > 0 ) lmax = i;
arr.push({
level: i,
label: i > 0 ? `${CONFIG.SW5E.castLevels[i]} (${slots} Slots)` : CONFIG.SW5E.castLevels[i],
canCast: canUpcast && (max > 0),
hasSlots: slots > 0
});
return arr;
}, []).filter(sl => sl.level <= lmax);
const pact = ad.casts.pact;
if (pact.level >= lvl) {
// If this character has pact slots, present them as an option for
// casting the cast.
castLevels.push({
level: 'pact',
label: game.i18n.localize('SW5E.CastLevelPact')
+ ` (${game.i18n.localize('SW5E.Level')} ${pact.level}) `
+ `(${pact.value} ${game.i18n.localize('SW5E.Slots')})`,
canCast: canUpcast,
hasSlots: pact.value > 0
});
}
const canCast = castLevels.some(l => l.hasSlots);
// Render the Cast casting template
const html = await renderTemplate("systems/sw5e/templates/apps/cast-cast.html", {
item: item.data,
canCast: canCast,
canUpcast: canUpcast,
castLevels,
hasPlaceableTemplate: game.user.can("TEMPLATE_CREATE") && item.hasAreaTarget
});
// Create the Dialog and return as a Promise
return new Promise((resolve, reject) => {
const dlg = new this(actor, item, {
title: `${item.name}: Cast Configuration`,
content: html,
buttons: {
cast: {
icon: '<i class="fas fa-magic"></i>',
label: "Cast",
callback: html => resolve(new FormData(html[0].querySelector("#cast-config-form")))
}
},
default: "cast",
close: reject
});
dlg.render(true);
});
}
}

View file

@ -0,0 +1,32 @@
/**
* A simple form to set actor movement speeds
* @implements {BaseEntitySheet}
*/
export default class MovementConfig extends BaseEntitySheet {
/** @override */
static get defaultOptions() {
return mergeObject(super.defaultOptions, {
title: "SW5E.MovementConfig",
classes: ["sw5e"],
template: "systems/sw5e/templates/apps/movement-config.html",
width: 240,
height: "auto"
});
}
/* -------------------------------------------- */
/** @override */
getData(options) {
const data = {
movement: duplicate(this.entity._data.data.attributes.movement),
units: CONFIG.SW5E.movementUnits
}
for ( let [k, v] of Object.entries(data.movement) ) {
if ( ["units", "hover"].includes(k) ) continue;
data.movement[k] = Number.isNumeric(v) ? v.toNearest(0.1) : 0;
}
return data;
}
}

View file

@ -36,7 +36,7 @@ export default class ShortRestDialog extends Dialog {
/** @override */
getData() {
const data = super.getData();
// Determine Hit Dice
data.availableHD = this.actor.data.items.reduce((hd, item) => {
if ( item.type === "class" ) {
@ -49,7 +49,7 @@ export default class ShortRestDialog extends Dialog {
}, {});
data.canRoll = this.actor.data.data.attributes.hd > 0;
data.denomination = this._denom;
// Determine rest type
const variant = game.settings.get("sw5e", "restVariant");
data.promptNewDay = variant !== "epic"; // It's never a new day when only resting 1 minute

View file

@ -11,14 +11,16 @@ export const highlightCriticalSuccessFailure = function(message, html, data) {
const d = roll.dice[0];
// Ensure it is an un-modified d20 roll
const isD20 = (d.faces === 20) && ( d.results.length === 1 );
const isD20 = (d.faces === 20) && ( d.values.length === 1 );
if ( !isD20 ) return;
const isModifiedRoll = ("success" in d.results[0]) || d.options.marginSuccess || d.options.marginFailure;
if ( isModifiedRoll ) return;
// Highlight successes and failures
if ( d.options.critical && (d.total >= d.options.critical) ) html.find(".dice-total").addClass("critical");
else if ( d.options.fumble && (d.total <= d.options.fumble) ) html.find(".dice-total").addClass("fumble");
const critical = d.options.critical || 20;
const fumble = d.options.fumble || 1;
if ( d.total >= critical ) html.find(".dice-total").addClass("critical");
else if ( d.total <= fumble ) html.find(".dice-total").addClass("fumble");
else if ( d.options.target ) {
if ( roll.total >= d.options.target ) html.find(".dice-total").addClass("success");
else html.find(".dice-total").addClass("failure");
@ -33,7 +35,8 @@ export const highlightCriticalSuccessFailure = function(message, html, data) {
export const displayChatActionButtons = function(message, html, data) {
const chatCard = html.find(".sw5e.chat-card");
if ( chatCard.length > 0 ) {
html.find(".flavor-text").remove();
const flavor = html.find(".flavor-text");
if ( flavor.text() === html.find(".item-name").text() ) flavor.remove();
// If the user is the message author or the actor owner, proceed
let actor = game.actors.get(data.message.speaker.actor);

View file

@ -27,41 +27,14 @@ export const _getInitiativeFormula = function(combatant) {
return parts.filter(p => p !== null).join(" + ");
};
/* -------------------------------------------- */
/**
* TODO: A temporary shim until 0.7.x becomes stable
* @override
* When the Combat encounter updates - re-render open Actor sheets for combatants in the encounter.
*/
TokenConfig.getTrackedAttributes = function(data, _path=[]) {
// Track the path and record found attributes
const attributes = {
"bar": [],
"value": []
};
// Recursively explore the object
for ( let [k, v] of Object.entries(data) ) {
let p = _path.concat([k]);
// Check objects for both a "value" and a "max"
if ( v instanceof Object ) {
const isBar = ("value" in v) && ("max" in v);
if ( isBar ) attributes.bar.push(p);
else {
const inner = this.getTrackedAttributes(data[k], p);
attributes.bar.push(...inner.bar);
attributes.value.push(...inner.value);
}
}
// Otherwise identify values which are numeric or null
else if ( Number.isNumeric(v) || (v === null) ) {
attributes.value.push(p);
}
Hooks.on("updateCombat", (combat, data, options, userId) => {
const updateTurn = ("turn" in data) || ("round" in data);
if ( !updateTurn ) return;
for ( let t of combat.turns ) {
const a = t.actor;
if ( t.actor ) t.actor.sheet.render(false);
}
return attributes;
};
});

View file

@ -325,17 +325,31 @@ SW5E.armorPropertiesTypes = {
"Versatile": "SW5E.ArmorProperVersatile"
};
/* -------------------------------------------- */
/**
* The valid units of measure for movement distances in the game system.
* By default this uses the imperial units of feet and miles.
* @type {Object<string,string>}
*/
SW5E.movementUnits = {
"ft": "SW5E.DistFt",
"mi": "SW5E.DistMi"
}
/**
* The valid units of measure for the range of an action or effect.
* This object automatically includes the movement units from SW5E.movementUnits
* @type {Object<string,string>}
*/
SW5E.distanceUnits = {
"none": "SW5E.None",
"self": "SW5E.DistSelf",
"touch": "SW5E.DistTouch",
"ft": "SW5E.DistFt",
"mi": "SW5E.DistMi",
"spec": "SW5E.Special",
"any": "SW5E.DistAny"
};
for ( let [k, v] of Object.entries(SW5E.movementUnits) ) {
SW5E.distanceUnits[k] = v;
}
/* -------------------------------------------- */
@ -413,7 +427,7 @@ SW5E.healingTypes = {
* Enumerate the denominations of hit dice which can apply to classes in the SW5E system
* @type {Array.<string>}
*/
SW5E.hitDieTypes = ["d4", "d6", "d8", "d10", "d12"];
SW5E.hitDieTypes = ["d4", "d6", "d8", "d10", "d12", "d20"];
/* -------------------------------------------- */
@ -461,15 +475,14 @@ SW5E.skills = {
/* -------------------------------------------- */
SW5E.powerPreparationModes = {
"prepared": "SW5E.PowerPrepPrepared",
"always": "SW5E.PowerPrepAlways",
"atwill": "SW5E.PowerPrepAtWill",
"innate": "SW5E.PowerPrepInnate",
"prepared": "SW5E.PowerPrepPrepared"
"innate": "SW5E.PowerPrepInnate"
};
SW5E.powerUpcastModes = ["always", "pact", "prepared"];
SW5E.powerProgression = {
"none": "SW5E.PowerNone",
"full": "SW5E.PowerProgFull",
@ -1135,15 +1148,27 @@ SW5E.characterFlags = {
type: Boolean
},
"weaponCriticalThreshold": {
name: "SW5E.FlagsCritThreshold",
hint: "SW5E.FlagsCritThresholdHint",
name: "SW5E.FlagsWeaponCritThreshold",
hint: "SW5E.FlagsWeaponCritThresholdHint",
section: "Feats",
type: Number,
placeholder: 20
},
"powerCriticalThreshold": {
name: "SW5E.FlagsPowerCritThreshold",
hint: "SW5E.FlagsPowerCritThresholdHint",
section: "Feats",
type: Number,
placeholder: 20
},
"meleeCriticalDamageDice": {
name: "SW5E.FlagsMeleeCriticalDice",
hint: "SW5E.FlagsMeleeCriticalDiceHint",
section: "Feats",
type: Number,
placeholder: 0
}
};
// Configure allowed status flags
SW5E.allowedActorFlags = [
"isPolymorphed", "originalActor"
].concat(Object.keys(SW5E.characterFlags));
SW5E.allowedActorFlags = ["isPolymorphed", "originalActor"].concat(Object.keys(SW5E.characterFlags));

View file

@ -1,9 +1,9 @@
/**
* A standardized helper function for managing core 5e "d20 rolls"
*
* Holding SHIFT, ALT, or CTRL when the attack is rolled will "fast-forward".
* This chooses the default options of a normal attack with no bonus, Advantage, or Disadvantage respectively
*
/**
* A standardized helper function for managing core 5e "d20 rolls"
*
* Holding SHIFT, ALT, or CTRL when the attack is rolled will "fast-forward".
* This chooses the default options of a normal attack with no bonus, Advantage, or Disadvantage respectively
*
* @param {Array} parts The dice roll component parts, excluding the initial d20
* @param {Object} data Actor or item data against which to parse the roll
* @param {Event|object} event The triggering event which initiated the roll
@ -27,72 +27,72 @@
* @param {object} messageData Additional data which is applied to the created Chat Message, if any
*
* @return {Promise} A Promise which resolves once the roll workflow has completed
*/
export async function d20Roll({parts=[], data={}, event={}, rollMode=null, template=null, title=null, speaker=null,
flavor=null, fastForward=null, dialogOptions,
advantage=null, disadvantage=null, critical=20, fumble=1, targetValue=null,
elvenAccuracy=false, halflingLucky=false, reliableTalent=false,
chatMessage=true, messageData={}}={}) {
// Prepare Message Data
messageData.flavor = flavor || title;
messageData.speaker = speaker || ChatMessage.getSpeaker();
const messageOptions = {rollMode: rollMode || game.settings.get("core", "rollMode")};
parts = parts.concat(["@bonus"]);
// Handle fast-forward events
let adv = 0;
fastForward = fastForward ?? (event && (event.shiftKey || event.altKey || event.ctrlKey || event.metaKey));
if (fastForward) {
if ( advantage || event.altKey ) adv = 1;
else if ( disadvantage || event.ctrlKey || event.metaKey ) adv = -1;
*/
export async function d20Roll({parts=[], data={}, event={}, rollMode=null, template=null, title=null, speaker=null,
flavor=null, fastForward=null, dialogOptions,
advantage=null, disadvantage=null, critical=20, fumble=1, targetValue=null,
elvenAccuracy=false, halflingLucky=false, reliableTalent=false,
chatMessage=true, messageData={}}={}) {
// Prepare Message Data
messageData.flavor = flavor || title;
messageData.speaker = speaker || ChatMessage.getSpeaker();
const messageOptions = {rollMode: rollMode || game.settings.get("core", "rollMode")};
parts = parts.concat(["@bonus"]);
// Handle fast-forward events
let adv = 0;
fastForward = fastForward ?? (event && (event.shiftKey || event.altKey || event.ctrlKey || event.metaKey));
if (fastForward) {
if ( advantage || event.altKey ) adv = 1;
else if ( disadvantage || event.ctrlKey || event.metaKey ) adv = -1;
}
// Define the inner roll function
const _roll = (parts, adv, form) => {
// Determine the d20 roll and modifiers
let nd = 1;
let mods = halflingLucky ? "r=1" : "";
// Handle advantage
if (adv === 1) {
nd = elvenAccuracy ? 3 : 2;
messageData.flavor += ` (${game.i18n.localize("SW5E.Advantage")})`;
if ( "flags.sw5e.roll" in messageData ) messageData["flags.sw5e.roll"].advantage = true;
mods += "kh";
}
// Define the inner roll function
const _roll = (parts, adv, form) => {
// Determine the d20 roll and modifiers
let nd = 1;
let mods = halflingLucky ? "r=1" : "";
// Handle advantage
if (adv === 1) {
nd = elvenAccuracy ? 3 : 2;
messageData.flavor += ` (${game.i18n.localize("SW5E.Advantage")})`;
if ( "flags.sw5e.roll" in messageData ) messageData["flags.sw5e.roll"].advantage = true;
mods += "kh";
}
// Handle disadvantage
else if (adv === -1) {
nd = 2;
messageData.flavor += ` (${game.i18n.localize("SW5E.Disadvantage")})`;
if ( "flags.sw5e.roll" in messageData ) messageData["flags.sw5e.roll"].disadvantage = true;
mods += "kl";
}
// Handle disadvantage
else if (adv === -1) {
nd = 2;
messageData.flavor += ` (${game.i18n.localize("SW5E.Disadvantage")})`;
if ( "flags.sw5e.roll" in messageData ) messageData["flags.sw5e.roll"].disadvantage = true;
mods += "kl";
}
// Prepend the d20 roll
let formula = `${nd}d20${mods}`;
if (reliableTalent) formula = `{${nd}d20${mods},10}kh`;
parts.unshift(formula);
// Optionally include a situational bonus
if ( form ) {
data['bonus'] = form.bonus.value;
messageOptions.rollMode = form.rollMode.value;
}
if (!data["bonus"]) parts.pop();
// Optionally include an ability score selection (used for tool checks)
const ability = form ? form.ability : null;
if (ability && ability.value) {
data.ability = ability.value;
const abl = data.abilities[data.ability];
if (abl) {
data.mod = abl.mod;
messageData.flavor += ` (${CONFIG.SW5E.abilities[data.ability]})`;
}
// Optionally include a situational bonus
if ( form ) {
data['bonus'] = form.bonus.value;
messageOptions.rollMode = form.rollMode.value;
}
if (!data["bonus"]) parts.pop();
// Optionally include an ability score selection (used for tool checks)
const ability = form ? form.ability : null;
if (ability && ability.value) {
data.ability = ability.value;
const abl = data.abilities[data.ability];
if (abl) {
data.mod = abl.mod;
messageData.flavor += ` (${CONFIG.SW5E.abilities[data.ability]})`;
}
}
// Execute the roll
let roll = new Roll(parts.join(" + "), data);
@ -139,73 +139,76 @@
*/
async function _d20RollDialog({template, title, parts, data, rollMode, dialogOptions, roll}={}) {
// Render modal dialog
template = template || "systems/sw5e/templates/chat/roll-dialog.html";
let dialogData = {
formula: parts.join(" + "),
data: data,
rollMode: rollMode,
rollModes: CONFIG.Dice.rollModes,
config: CONFIG.SW5E
};
const html = await renderTemplate(template, dialogData);
// Render modal dialog
template = template || "systems/sw5e/templates/chat/roll-dialog.html";
let dialogData = {
formula: parts.join(" + "),
data: data,
rollMode: rollMode,
rollModes: CONFIG.Dice.rollModes,
config: CONFIG.SW5E
};
const html = await renderTemplate(template, dialogData);
// Create the Dialog window
return new Promise(resolve => {
new Dialog({
title: title,
content: html,
buttons: {
advantage: {
label: game.i18n.localize("SW5E.Advantage"),
callback: html => resolve(roll(parts, 1, html[0].querySelector("form")))
},
normal: {
label: game.i18n.localize("SW5E.Normal"),
callback: html => resolve(roll(parts, 0, html[0].querySelector("form")))
},
disadvantage: {
label: game.i18n.localize("SW5E.Disadvantage"),
callback: html => resolve(roll(parts, -1, html[0].querySelector("form")))
}
// Create the Dialog window
return new Promise(resolve => {
new Dialog({
title: title,
content: html,
buttons: {
advantage: {
label: game.i18n.localize("SW5E.Advantage"),
callback: html => resolve(roll(parts, 1, html[0].querySelector("form")))
},
default: "normal",
close: () => resolve(null)
}, dialogOptions).render(true);
});
}
normal: {
label: game.i18n.localize("SW5E.Normal"),
callback: html => resolve(roll(parts, 0, html[0].querySelector("form")))
},
disadvantage: {
label: game.i18n.localize("SW5E.Disadvantage"),
callback: html => resolve(roll(parts, -1, html[0].querySelector("form")))
}
},
default: "normal",
close: () => resolve(null)
}, dialogOptions).render(true);
});
}
/* -------------------------------------------- */
/* -------------------------------------------- */
/**
* A standardized helper function for managing core 5e "d20 rolls"
*
* Holding SHIFT, ALT, or CTRL when the attack is rolled will "fast-forward".
* This chooses the default options of a normal attack with no bonus, Critical, or no bonus respectively
*
* @param {Array} parts The dice roll component parts, excluding the initial d20
* @param {Actor} actor The Actor making the damage roll
* @param {Object} data Actor or item data against which to parse the roll
* @param {Event|object}[event The triggering event which initiated the roll
* @param {string} rollMode A specific roll mode to apply as the default for the resulting roll
* @param {String} template The HTML template used to render the roll dialog
* @param {String} title The dice roll UI window title
* @param {Object} speaker The ChatMessage speaker to pass when creating the chat
* @param {string} flavor Flavor text to use in the posted chat message
* @param {boolean} allowCritical Allow the opportunity for a critical hit to be rolled
* @param {Boolean} critical Flag this roll as a critical hit for the purposes of fast-forward rolls
* @param {number} criticalBonusDice A number of bonus damage dice that are added for critical hits
* @param {number} criticalMultiplier A critical hit multiplier which is applied to critical hits
* @param {Boolean} fastForward Allow fast-forward advantage selection
* @param {Function} onClose Callback for actions to take when the dialog form is closed
* @param {Object} dialogOptions Modal dialog options
* @param {boolean} chatMessage Automatically create a Chat Message for the result of this roll
* @param {object} messageData Additional data which is applied to the created Chat Message, if any
*
* @return {Promise} A Promise which resolves once the roll workflow has completed
*/
export async function damageRoll({parts, actor, data, event={}, rollMode=null, template, title, speaker, flavor,
allowCritical=true, critical=false, criticalBonusDice=0, criticalMultiplier=2, fastForward=null,
dialogOptions={}, chatMessage=true, messageData={}}={}) {
/**
* A standardized helper function for managing core 5e "d20 rolls"
*
* Holding SHIFT, ALT, or CTRL when the attack is rolled will "fast-forward".
* This chooses the default options of a normal attack with no bonus, Critical, or no bonus respectively
*
* @param {Array} parts The dice roll component parts, excluding the initial d20
* @param {Actor} actor The Actor making the damage roll
* @param {Object} data Actor or item data against which to parse the roll
* @param {Event|object}[event The triggering event which initiated the roll
* @param {string} rollMode A specific roll mode to apply as the default for the resulting roll
* @param {String} template The HTML template used to render the roll dialog
* @param {String} title The dice roll UI window title
* @param {Object} speaker The ChatMessage speaker to pass when creating the chat
* @param {string} flavor Flavor text to use in the posted chat message
* @param {boolean} allowCritical Allow the opportunity for a critical hit to be rolled
* @param {Boolean} critical Flag this roll as a critical hit for the purposes of fast-forward rolls
* @param {Boolean} fastForward Allow fast-forward advantage selection
* @param {Function} onClose Callback for actions to take when the dialog form is closed
* @param {Object} dialogOptions Modal dialog options
* @param {boolean} chatMessage Automatically create a Chat Message for the result of this roll
* @param {object} messageData Additional data which is applied to the created Chat Message, if any
*
* @return {Promise} A Promise which resolves once the roll workflow has completed
*/
export async function damageRoll({parts, actor, data, event={}, rollMode=null, template, title, speaker, flavor,
allowCritical=true, critical=false, fastForward=null, dialogOptions, chatMessage=true, messageData={}}={}) {
// Prepare Message Data
messageData.flavor = flavor || title;
messageData.speaker = speaker || ChatMessage.getSpeaker();
@ -213,8 +216,8 @@ async function _d20RollDialog({template, title, parts, data, rollMode, dialogOpt
parts = parts.concat(["@bonus"]);
fastForward = fastForward ?? (event && (event.shiftKey || event.altKey || event.ctrlKey || event.metaKey));
// Define inner roll function
const _roll = function(parts, crit, form) {
// Define inner roll function
const _roll = function(parts, crit, form) {
// Optionally include a situational bonus
if ( form ) {
@ -224,17 +227,17 @@ async function _d20RollDialog({template, title, parts, data, rollMode, dialogOpt
if (!data["bonus"]) parts.pop();
// Create the damage roll
let roll = new Roll(parts.join("+"), data);
let roll = new Roll(parts.join("+"), data);
// Modify the damage formula for critical hits
if ( crit === true ) {
let add = (actor && actor.getFlag("sw5e", "savageAttacks")) ? 1 : 0;
let mult = 2;
// TODO Backwards compatibility - REMOVE LATER
if (isNewerVersion(game.data.version, "0.6.9")) roll.alter(mult, add);
else roll.alter(add, mult);
messageData.flavor += ` (${game.i18n.localize("SW5E.Critical")})`;
if ( "flags.sw5e.roll" in messageData ) messageData["flags.sw5e.roll"].critical = true;
roll.alter(criticalMultiplier, 0); // Multiply all dice
if ( roll.terms[0] instanceof Die ) { // Add bonus dice for only the main dice term
roll.terms[0].alter(1, criticalBonusDice);
roll._formula = roll.formula;
}
messageData.flavor += ` (${game.i18n.localize("SW5E.Critical")})`;
if ( "flags.sw5e.roll" in messageData ) messageData["flags.sw5e.roll"].critical = true;
}
// Execute the roll

63
module/effects.js vendored Normal file
View file

@ -0,0 +1,63 @@
/**
* Manage Active Effect instances through the Actor Sheet via effect control buttons.
* @param {MouseEvent} event The left-click event on the effect control
* @param {Actor|Item} owner The owning entity which manages this effect
*/
export function onManageActiveEffect(event, owner) {
event.preventDefault();
const a = event.currentTarget;
const li = a.closest("li");
const effect = li.dataset.effectId ? owner.effects.get(li.dataset.effectId) : null;
switch ( a.dataset.action ) {
case "create":
return ActiveEffect.create({
label: "New Effect",
icon: "icons/svg/aura.svg",
origin: owner.uuid,
"duration.rounds": li.dataset.effectType === "temporary" ? 1 : undefined,
disabled: li.dataset.effectType === "inactive"
}, owner).create();
case "edit":
return effect.sheet.render(true);
case "delete":
return effect.delete();
case "toggle":
return effect.update({disabled: !effect.data.disabled});
}
}
/**
* Prepare the data structure for Active Effects which are currently applied to an Actor or Item.
* @param {ActiveEffect[]} effects The array of Active Effect instances to prepare sheet data for
* @return {object} Data for rendering
*/
export function prepareActiveEffectCategories(effects) {
// Define effect header categories
const categories = {
temporary: {
type: "temporary",
label: "Temporary Effects",
effects: []
},
passive: {
type: "passive",
label: "Passive Effects",
effects: []
},
inactive: {
type: "inactive",
label: "Inactive Effects",
effects: []
}
};
// Iterate over active effects, classifying them into categories
for ( let e of effects ) {
e._getSourceName(); // Trigger a lookup for the source name
if ( e.data.disabled ) categories.inactive.effects.push(e);
else if ( e.isTemporary ) categories.temporary.effects.push(e);
else categories.passive.effects.push(e);
}
return categories;
}

View file

@ -161,6 +161,7 @@ export default class Item5e extends Item {
// Power Level, School, and Components
if ( itemData.type === "power" ) {
data.preparation.mode = data.preparation.mode || "prepared";
labels.level = C.powerLevels[data.level];
labels.school = C.powerSchools[data.school];
labels.components = Object.entries(data.components).reduce((arr, c) => {
@ -180,33 +181,33 @@ export default class Item5e extends Item {
else labels.featType = game.i18n.localize("SW5E.Passive");
}
// Species Items
else if ( itemData.type === "species" ) {
// labels.species = C.species[data.species];
}
// Archetype Items
else if ( itemData.type === "archetype" ) {
// Species Items
else if ( itemData.type === "species" ) {
// labels.species = C.species[data.species];
}
// Archetype Items
else if ( itemData.type === "archetype" ) {
// labels.archetype = C.archetype[data.archetype];
}
// Background Items
else if ( itemData.type === "background" ) {
}
// Class Feature Items
// Background Items
else if ( itemData.type === "background" ) {
// labels.background = C.background[data.background];
}
// Class Feature Items
else if ( itemData.type === "classfeature" ) {
// labels.classFeature = C.classFeature[data.classFeature];
}
// Fighting Style Items
else if ( itemData.type === "fightingstyle" ) {
// labels.fightingstyle = C.fightingstyle[data.fightingstyle];
}
// Fighting Mastery Items
else if ( itemData.type === "fightingmastery" ) {
// labels.fightingmastery = C.fightingmastery[data.fightingmastery];
}
// Lightsaber Form Items
else if ( itemData.type === "lightsaberform" ) {
// labels.lightsaberform = C.lightsaberform[data.lightsaberform];
}
// Equipment Items
@ -322,7 +323,7 @@ export default class Item5e extends Item {
user: game.user._id,
type: CONST.CHAT_MESSAGE_TYPES.OTHER,
content: html,
flavor: this.name,
flavor: this.data.data.chatFlavor || this.name,
speaker: {
actor: this.actor._id,
token: this.actor.token,
@ -348,7 +349,7 @@ export default class Item5e extends Item {
/* -------------------------------------------- */
/**
/**
* For items which consume a resource, handle the consumption of that resource when the item is used.
* There are four types of ability consumptions which are handled:
* 1. Ammunition (on attack rolls)
@ -367,7 +368,6 @@ export default class Item5e extends Item {
if ( !consume.type ) return true;
const actor = this.actor;
const typeLabel = CONFIG.SW5E.abilityConsumptionTypes[consume.type];
const amount = parseInt(consume.amount || 1);
// Only handle certain types for certain actions
if ( ((consume.type === "ammo") && !isAttack ) || ((consume.type !== "ammo") && !isCard) ) return true;
@ -380,6 +380,7 @@ export default class Item5e extends Item {
// Identify the consumed resource and it's quantity
let consumed = null;
let amount = parseInt(consume.amount || 1);
let quantity = 0;
switch ( consume.type ) {
case "attribute":
@ -393,7 +394,13 @@ export default class Item5e extends Item {
break;
case "charges":
consumed = actor.items.get(consume.target);
quantity = consumed ? consumed.data.data.uses.value : 0;
if ( !consumed ) break;
const uses = consumed.data.data.uses;
if ( uses.per && uses.max ) quantity = uses.value;
else if ( consumed.data.data.recharge?.value ) {
quantity = consumed.data.data.recharge.charged ? 1 : 0;
amount = 1;
}
break;
}
@ -418,7 +425,11 @@ export default class Item5e extends Item {
await consumed.update({"data.quantity": remaining});
break;
case "charges":
await consumed.update({"data.uses.value": remaining});
const uses = consumed.data.data.uses || {};
const recharge = consumed.data.data.recharge || {};
if ( uses.per && uses.max ) await consumed.update({"data.uses.value": remaining});
else if ( recharge.value ) await consumed.update({"data.recharge.charged": false});
break;
}
return true;
}
@ -436,7 +447,7 @@ export default class Item5e extends Item {
// Configure whether to consume a limited use or to place a template
const charge = this.data.data.recharge;
const uses = this.data.data.uses;
let usesCharges = !!uses.per && (uses.max > 0);
let usesCharges = !!uses.per && !!uses.max;
let placeTemplate = false;
let consume = charge.value || usesCharges;
@ -637,40 +648,37 @@ export default class Item5e extends Item {
}
// Attack Bonus
if ( itemData.attackBonus ) parts.push(itemData.attackBonus);
const actorBonus = actorData?.bonuses?.[itemData.actionType] || {};
if ( itemData.attackBonus || actorBonus.attack ) {
parts.push("@atk");
rollData["atk"] = [itemData.attackBonus, actorBonus.attack].filterJoin(" + ");
}
if ( actorBonus.attack ) parts.push(actorBonus.attack);
// Ammunition Bonus
delete this._ammo;
const consume = itemData.consume;
if ( consume?.type === "ammo" ) {
const ammo = this.actor.items.get(consume.target);
if(ammo?.data){
const q = ammo.data.data.quantity;
const consumeAmount = consume.amount ?? 0;
if ( q && (q - consumeAmount >= 0) ) {
let ammoBonus = ammo.data.data.attackBonus;
if ( ammoBonus ) {
parts.push("@ammo");
rollData["ammo"] = ammoBonus;
title += ` [${ammo.name}]`;
this._ammo = ammo;
}
// Ammunition Bonus
delete this._ammo;
const consume = itemData.consume;
if ( consume?.type === "ammo" ) {
const ammo = this.actor.items.get(consume.target);
if(ammo?.data){
const q = ammo.data.data.quantity;
const consumeAmount = consume.amount ?? 0;
if ( q && (q - consumeAmount >= 0) ) {
this._ammo = ammo;
let ammoBonus = ammo.data.data.attackBonus;
if ( ammoBonus ) {
parts.push("@ammo");
rollData["ammo"] = ammoBonus;
title += ` [${ammo.name}]`;
}
//}else{
// ui.notifications.error(game.i18n.format("SW5E.ConsumeWarningNoResource", {name: this.name, type: typeLabel}));
}
}
}
// Compose roll options
const rollConfig = mergeObject({
parts: parts,
actor: this.actor,
data: rollData,
title: title,
flavor: title,
speaker: ChatMessage.getSpeaker({actor: this.actor}),
dialogOptions: {
width: 400,
@ -681,9 +689,11 @@ export default class Item5e extends Item {
}, options);
rollConfig.event = options.event;
// Expanded weapon critical threshold
// Expanded critical hit thresholds
if (( this.data.type === "weapon" ) && flags.weaponCriticalThreshold) {
rollConfig.critical = parseInt(flags.weaponCriticalThreshold);
} else if (( this.data.type === "power" ) && flags.powerCriticalThreshold) {
rollConfig.critical = parseInt(flags.powerCriticalThreshold);
}
// Elven Accuracy
@ -710,28 +720,41 @@ export default class Item5e extends Item {
/**
* Place a damage roll using an item (weapon, feat, power, or equipment)
* Rely upon the damageRoll logic for the core implementation
*
* @return {Promise<Roll>} A Promise which resolves to the created Roll instance
* Rely upon the damageRoll logic for the core implementation.
* @param {MouseEvent} [event] An event which triggered this roll, if any
* @param {number} [powerLevel] If the item is a power, override the level for damage scaling
* @param {boolean} [versatile] If the item is a weapon, roll damage using the versatile formula
* @param {object} [options] Additional options passed to the damageRoll function
* @return {Promise<Roll>} A Promise which resolves to the created Roll instance
*/
rollDamage({event, powerLevel=null, versatile=false}={}) {
rollDamage({event, powerLevel=null, versatile=false, options={}}={}) {
if ( !this.hasDamage ) throw new Error("You may not make a Damage Roll with this Item.");
const itemData = this.data.data;
const actorData = this.actor.data.data;
if ( !this.hasDamage ) {
throw new Error("You may not make a Damage Roll with this Item.");
}
const messageData = {"flags.sw5e.roll": {type: "damage", itemId: this.id }};
// Get roll data
const parts = itemData.damage.parts.map(d => d[0]);
const rollData = this.getRollData();
if ( powerLevel ) rollData.item.level = powerLevel;
// Get message labels
// Configure the damage roll
const title = `${this.name} - ${game.i18n.localize("SW5E.DamageRoll")}`;
let flavor = this.labels.damageTypes.length ? `${title} (${this.labels.damageTypes})` : title;
// Define Roll parts
const parts = itemData.damage.parts.map(d => d[0]);
const rollConfig = {
event: event,
parts: parts,
actor: this.actor,
data: rollData,
title: title,
flavor: this.labels.damageTypes.length ? `${title} (${this.labels.damageTypes})` : title,
speaker: ChatMessage.getSpeaker({actor: this.actor}),
dialogOptions: {
width: 400,
top: event ? event.clientY - 80 : null,
left: window.innerWidth - 710
},
messageData: messageData
};
// Adjust damage from versatile usage
if ( versatile && itemData.damage.versatile ) {
@ -751,37 +774,27 @@ export default class Item5e extends Item {
}
}
// Define Roll Data
// Add damage bonus formula
const actorBonus = getProperty(actorData, `bonuses.${itemData.actionType}`) || {};
if ( actorBonus.damage && parseInt(actorBonus.damage) !== 0 ) {
parts.push("@dmg");
rollData["dmg"] = actorBonus.damage;
if ( actorBonus.damage && (parseInt(actorBonus.damage) !== 0) ) {
parts.push(actorBonus.damage);
}
// Ammunition Damage
// Add ammunition damage
if ( this._ammo ) {
parts.push("@ammo");
rollData["ammo"] = this._ammo.data.data.damage.parts.map(p => p[0]).join("+");
flavor += ` [${this._ammo.name}]`;
rollConfig.flavor += ` [${this._ammo.name}]`;
delete this._ammo;
}
// Scale melee critical hit damage
if ( itemData.actionType === "mwak" ) {
rollConfig.criticalBonusDice = this.actor.getFlag("sw5e", "meleeCriticalDamageDice") ?? 0;
}
// Call the roll helper utility
return damageRoll({
event: event,
parts: parts,
actor: this.actor,
data: rollData,
title: title,
flavor: flavor,
speaker: ChatMessage.getSpeaker({actor: this.actor}),
dialogOptions: {
width: 400,
top: event ? event.clientY - 80 : null,
left: window.innerWidth - 710
},
messageData
});
return damageRoll(mergeObject(rollConfig, options));
}
/* -------------------------------------------- */
@ -793,22 +806,7 @@ export default class Item5e extends Item {
_scaleAtWillDamage(parts, scale, level, rollData) {
const add = Math.floor((level + 1) / 6);
if ( add === 0 ) return;
// FUTURE SOLUTION - 0.7.0 AND LATER
if (isNewerVersion(game.data.version, "0.6.9")) {
this._scaleDamage(parts, scale || parts.join(" + "), add, rollData)
}
// LEGACY SOLUTION - 0.6.x AND OLDER
// TODO: Deprecate the legacy solution one FVTT 0.7.x is RELEASE
else {
if ( scale && (scale !== parts[0]) ) {
parts[0] = parts[0] + " + " + scale.replace(new RegExp(Roll.diceRgx, "g"), (match, nd, d) => `${add}d${d}`);
} else {
parts[0] = parts[0].replace(new RegExp(Roll.diceRgx, "g"), (match, nd, d) => `${parseInt(nd)+add}d${d}`);
}
}
this._scaleDamage(parts, scale || parts.join(" + "), add, rollData);
}
/* -------------------------------------------- */
@ -826,20 +824,7 @@ export default class Item5e extends Item {
_scalePowerDamage(parts, baseLevel, powerLevel, formula, rollData) {
const upcastLevels = Math.max(powerLevel - baseLevel, 0);
if ( upcastLevels === 0 ) return parts;
// FUTURE SOLUTION - 0.7.0 AND LATER
if (isNewerVersion(game.data.version, "0.6.9")) {
this._scaleDamage(parts, formula, upcastLevels, rollData);
}
// LEGACY SOLUTION - 0.6.x AND OLDER
// TODO: Deprecate the legacy solution one FVTT 0.7.x is RELEASE
else {
const bonus = new Roll(formula);
bonus.alter(0, upcastLevels);
parts.push(bonus.formula);
}
return parts;
this._scaleDamage(parts, formula, upcastLevels, rollData);
}
/* -------------------------------------------- */
@ -882,7 +867,7 @@ export default class Item5e extends Item {
/**
* Place an attack roll using an item (weapon, feat, power, or equipment)
* Rely upon the d20Roll logic for the core implementation
*
*
* @return {Promise<Roll>} A Promise which resolves to the created Roll instance
*/
async rollFormula(options={}) {
@ -899,7 +884,7 @@ export default class Item5e extends Item {
const roll = new Roll(rollData.item.formula, rollData).roll();
roll.toMessage({
speaker: ChatMessage.getSpeaker({actor: this.actor}),
flavor: this.data.data.chatFlavor || title,
flavor: title,
rollMode: game.settings.get("core", "rollMode"),
messageData: {"flags.sw5e.roll": {type: "other", itemId: this.id }}
});
@ -910,7 +895,7 @@ export default class Item5e extends Item {
/**
* Use a consumable item, deducting from the quantity or charges of the item.
* @param {boolean} configureDialog Whether to show a configuration dialog
* @param {boolean} configureDialog Whether to show a configuration dialog
* @return {boolean} Whether further execution should be prevented
* @private
*/
@ -972,7 +957,7 @@ export default class Item5e extends Item {
if ( this.owner && this.owner.sheet ) this.owner.sheet.minimize();
}
return true;
}
}
/* -------------------------------------------- */
@ -1021,7 +1006,7 @@ export default class Item5e extends Item {
template: "systems/sw5e/templates/chat/tool-roll-dialog.html",
title: title,
speaker: ChatMessage.getSpeaker({actor: this.actor}),
flavor: `${this.name} - ${game.i18n.localize("SW5E.ToolCheck")}`,
flavor: title,
dialogOptions: {
width: 400,
top: options.event ? options.event.clientY - 80 : null,
@ -1055,8 +1040,8 @@ export default class Item5e extends Item {
}
// Include a proficiency score
const prof = "proficient" in rollData.item ? (rollData.item.proficient || 0) : 1;
rollData["prof"] = Math.floor(prof * rollData.attributes.prof);
const prof = ("proficient" in rollData.item) ? (rollData.item.proficient || 0) : 1;
rollData["prof"] = Math.floor(prof * (rollData.attributes.prof || 0));
return rollData;
}
@ -1189,7 +1174,7 @@ export default class Item5e extends Item {
if ( !targets.length ) ui.notifications.warn(game.i18n.localize("SW5E.ActionWarningNoToken"));
return targets;
}
/* -------------------------------------------- */
/* Factory Methods */
/* -------------------------------------------- */

View file

@ -1,4 +1,5 @@
import TraitSelector from "../apps/trait-selector.js";
import {onManageActiveEffect, prepareActiveEffectCategories} from "../effects.js";
/**
* Override and extend the core ItemSheet implementation to handle specific item types
@ -7,8 +8,11 @@ import TraitSelector from "../apps/trait-selector.js";
export default class ItemSheet5e extends ItemSheet {
constructor(...args) {
super(...args);
// Expand the default size of the class sheet
if ( this.object.data.type === "class" ) {
this.options.width = 600;
this.options.width = this.position.width = 600;
this.options.height = this.position.height = 680;
}
}
@ -18,7 +22,7 @@ export default class ItemSheet5e extends ItemSheet {
static get defaultOptions() {
return mergeObject(super.defaultOptions, {
width: 560,
height: "auto",
height: 400,
classes: ["sw5e", "sheet", "item"],
resizable: true,
scrollY: [".tab.details"],
@ -37,17 +41,17 @@ export default class ItemSheet5e extends ItemSheet {
/* -------------------------------------------- */
/** @override */
getData() {
const data = super.getData();
async getData(options) {
const data = super.getData(options);
data.labels = this.item.labels;
data.config = CONFIG.SW5E;
// Item Type, Status, and Details
data.itemType = data.item.type.titleCase();
data.itemType = game.i18n.localize(`ITEM.Type${data.item.type.titleCase()}`);
data.itemStatus = this._getItemStatus(data.item);
data.itemProperties = this._getItemProperties(data.item);
data.isPhysical = data.item.data.hasOwnProperty("quantity");
// Potential consumption targets
data.abilityConsumptionTargets = this._getItemConsumptionTargets(data.item);
@ -55,17 +59,20 @@ export default class ItemSheet5e extends ItemSheet {
data.hasAttackRoll = this.item.hasAttack;
data.isHealing = data.item.data.actionType === "heal";
data.isFlatDC = getProperty(data.item.data, "save.scaling") === "flat";
data.isLine = ["line", "wall"].includes(data.item.data.target?.type);
data.isLine = ["line", "wall"].includes(data.item.data.target?.type);
// Vehicles
data.isCrewed = data.item.data.activation?.type === 'crew';
data.isMountable = this._isItemMountable(data.item);
// Prepare Active Effects
data.effects = prepareActiveEffectCategories(this.entity.effects);
return data;
}
/* -------------------------------------------- */
/**
/**
* Get the valid item consumption targets which exist on the actor
* @param {Object} item Item data for the item being displayed
* @return {{string: string}} An object of potential consumption targets
@ -109,6 +116,8 @@ export default class ItemSheet5e extends ItemSheet {
// Charges
else if ( consume.type === "charges" ) {
return actor.items.reduce((obj, i) => {
// Limited-use items
const uses = i.data.data.uses || {};
if ( uses.per && uses.max ) {
const label = uses.per === "charges" ?
@ -116,6 +125,10 @@ export default class ItemSheet5e extends ItemSheet {
` (${game.i18n.format("SW5E.AbilityUseConsumableLabel", {max: uses.max, per: uses.per})})`;
obj[i.id] = i.name + label;
}
// Recharging items
const recharge = i.data.data.recharge || {};
if ( recharge.value ) obj[i.id] = `${i.name} (${game.i18n.format("SW5E.Recharge")})`;
return obj;
}, {})
}
@ -177,31 +190,26 @@ export default class ItemSheet5e extends ItemSheet {
}
else if ( item.type === "species" ) {
//props.push(labels.species);
}
else if ( item.type === "archetype" ) {
//props.push(labels.archetype);
}
else if ( item.type === "background" ) {
//props.push(labels.background);
}
else if ( item.type === "classfeature" ) {
//props.push(labels.classfeature);
}
else if ( item.type === "fightingmastery" ) {
//props.push(labels.fightingmastery);
}
else if ( item.type === "fightingstyle" ) {
//props.push(labels.fightingstyle);
}
else if ( item.type === "lightsaberform" ) {
//props.push(labels.lightsaberform);
}
else if ( item.type === "background" ) {
}
else if ( item.type === "classfeature" ) {
}
else if ( item.type === "fightingmastery" ) {
}
else if ( item.type === "fightingstyle" ) {
}
else if ( item.type === "lightsaberform" ) {
}
// Action type
if ( item.data.actionType ) {
@ -240,8 +248,8 @@ export default class ItemSheet5e extends ItemSheet {
/** @override */
setPosition(position={}) {
if ( !this._minimized ) {
position.height = this._tabs[0].active === "details" ? "auto" : this.options.height;
if ( !(this._minimized || position.height) ) {
position.height = (this._tabs[0].active === "details") ? "auto" : this.options.height;
}
return super.setPosition(position);
}
@ -251,17 +259,20 @@ export default class ItemSheet5e extends ItemSheet {
/* -------------------------------------------- */
/** @override */
_updateObject(event, formData) {
_getSubmitData(updateData={}) {
// TODO: This can be removed once 0.7.x is release channel
if ( !formData.data ) formData = expandObject(formData);
// Create the expanded update data object
const fd = new FormDataExtended(this.form, {editors: this.editors});
let data = fd.toObject();
if ( updateData ) data = mergeObject(data, updateData);
else data = expandObject(data);
// Handle Damage Array
const damage = formData.data?.damage;
// Handle Damage array
const damage = data.data?.damage;
if ( damage ) damage.parts = Object.values(damage?.parts || {}).map(d => [d[0] || "", d[1] || ""]);
// Update the Item
super._updateObject(event, formData);
// Return the flattened submission data
return flattenObject(data);
}
/* -------------------------------------------- */
@ -269,8 +280,14 @@ export default class ItemSheet5e extends ItemSheet {
/** @override */
activateListeners(html) {
super.activateListeners(html);
html.find(".damage-control").click(this._onDamageControl.bind(this));
html.find('.trait-selector.class-skills').click(this._onConfigureClassSkills.bind(this));
if ( this.isEditable ) {
html.find(".damage-control").click(this._onDamageControl.bind(this));
html.find('.trait-selector.class-skills').click(this._onConfigureClassSkills.bind(this));
html.find(".effect-control").click(ev => {
if ( this.item.isOwned ) return ui.notifications.warn("Managing Active Effects within an Owned Item is not currently supported and will be added in a subsequent update.")
onManageActiveEffect(ev, this.item)
});
}
}
/* -------------------------------------------- */
@ -328,4 +345,12 @@ export default class ItemSheet5e extends ItemSheet {
maximum: skills.number
}).render(true)
}
/* -------------------------------------------- */
/** @override */
async _onSubmit(...args) {
if ( this._tabs[0].active === "details" ) this.position.height = "auto";
await super._onSubmit(...args);
}
}

View file

@ -14,6 +14,7 @@ export const migrateWorld = async function() {
await a.update(updateData, {enforceTypes: false});
}
} catch(err) {
err.message = `Failed sw5e system migration for Actor ${a.name}: ${err.message}`;
console.error(err);
}
}
@ -27,6 +28,7 @@ export const migrateWorld = async function() {
await i.update(updateData, {enforceTypes: false});
}
} catch(err) {
err.message = `Failed sw5e system migration for Item ${i.name}: ${err.message}`;
console.error(err);
}
}
@ -40,15 +42,15 @@ export const migrateWorld = async function() {
await s.update(updateData, {enforceTypes: false});
}
} catch(err) {
err.message = `Failed sw5e system migration for Scene ${s.name}: ${err.message}`;
console.error(err);
}
}
// Migrate World Compendium Packs
const packs = game.packs.filter(p => {
return (p.metadata.package === "world") && ["Actor", "Item", "Scene"].includes(p.metadata.entity)
});
for ( let p of packs ) {
for ( let p of game.packs ) {
if ( p.metadata.package !== "world" ) continue;
if ( !["Actor", "Item", "Scene"].includes(p.metadata.entity) ) continue;
await migrateCompendium(p);
}
@ -68,27 +70,46 @@ export const migrateCompendium = async function(pack) {
const entity = pack.metadata.entity;
if ( !["Actor", "Item", "Scene"].includes(entity) ) return;
// Unlock the pack for editing
const wasLocked = pack.locked;
await pack.configure({locked: false});
// Begin by requesting server-side data model migration and get the migrated content
await pack.migrate();
const content = await pack.getContent();
// Iterate over compendium entries - applying fine-tuned migration functions
for ( let ent of content ) {
let updateData = {};
try {
let updateData = null;
if (entity === "Item") updateData = migrateItemData(ent.data);
else if (entity === "Actor") updateData = migrateActorData(ent.data);
else if ( entity === "Scene" ) updateData = migrateSceneData(ent.data);
if (!isObjectEmpty(updateData)) {
expandObject(updateData);
updateData["_id"] = ent._id;
await pack.updateEntity(updateData);
console.log(`Migrated ${entity} entity ${ent.name} in Compendium ${pack.collection}`);
switch (entity) {
case "Actor":
updateData = migrateActorData(ent.data);
break;
case "Item":
updateData = migrateItemData(ent.data);
break;
case "Scene":
updateData = migrateSceneData(ent.data);
break;
}
} catch(err) {
if ( isObjectEmpty(updateData) ) continue;
// Save the entry, if data was changed
updateData["_id"] = ent._id;
await pack.updateEntity(updateData);
console.log(`Migrated ${entity} entity ${ent.name} in Compendium ${pack.collection}`);
}
// Handle migration failures
catch(err) {
err.message = `Failed sw5e system migration for entity ${ent.name} in pack ${pack.collection}: ${err.message}`;
console.error(err);
}
}
// Apply the original locked status for the pack
pack.configure({locked: wasLocked});
console.log(`Migrated all ${entity} entities from Compendium ${pack.collection}`);
};
@ -107,9 +128,7 @@ export const migrateActorData = function(actor) {
// Actor Data Updates
_migrateActorBonuses(actor, updateData);
// Remove deprecated fields
_migrateRemoveDeprecated(actor, updateData);
_migrateActorMovement(actor, updateData);
// Migrate Owned Items
if ( !actor.items ) return updateData;
@ -172,11 +191,6 @@ function cleanActorData(actorData) {
*/
export const migrateItemData = function(item) {
const updateData = {};
// Remove deprecated fields
_migrateRemoveDeprecated(item, updateData);
// Return the migrated update data
return updateData;
};
@ -225,31 +239,17 @@ function _migrateActorBonuses(actor, updateData) {
}
}
/* -------------------------------------------- */
/**
* A general migration to remove all fields from the data model which are flagged with a _deprecated tag
* Migrate the actor bonuses object
* @private
*/
const _migrateRemoveDeprecated = function(ent, updateData) {
const flat = flattenObject(ent.data);
// Identify objects to deprecate
const toDeprecate = Object.entries(flat).filter(e => e[0].endsWith("_deprecated") && (e[1] === true)).map(e => {
let parent = e[0].split(".");
parent.pop();
return parent.join(".");
});
// Remove them
for ( let k of toDeprecate ) {
let parts = k.split(".");
parts[parts.length-1] = "-=" + parts[parts.length-1];
updateData[`data.${parts.join(".")}`] = null;
}
};
function _migrateActorMovement(actor, updateData) {
if ( actor.data.attributes?.movement?.walk !== undefined ) return;
const s = (actor.data.attributes?.speed?.value || "").split(" ");
if ( s.length > 0 ) updateData["data.attributes.movement.walk"] = Number.isNumeric(s[0]) ? parseInt(s[0]) : null;
}
/* -------------------------------------------- */
@ -280,3 +280,24 @@ export async function purgeFlags(pack) {
}
await pack.configure({locked: true});
}
/* -------------------------------------------- */
/**
* Purge the data model of any inner objects which have been flagged as _deprecated.
* @param {object} data The data to clean
* @private
*/
export function removeDeprecatedObjects(data) {
for ( let [k, v] of Object.entries(data) ) {
if ( getType(v) === "Object" ) {
if (v._deprecated === true) {
console.log(`Deleting deprecated object key ${k}`);
delete data[k];
}
else removeDeprecatedObjects(v);
}
}
return data;
}

View file

@ -37,7 +37,7 @@ export default class AbilityTemplate extends MeasuredTemplate {
templateData.width = target.value;
templateData.direction = 45;
break;
case "ray": // 5e rays are most commonly 1 square (5 ft) in width
case "ray": // 5e rays are most commonly 1 square (5 ft) in width
templateData.width = target.width ?? canvas.dimensions.distance;
break;
default:

View file

@ -7,11 +7,11 @@ export const registerSystemSettings = function() {
name: "System Migration Version",
scope: "world",
config: false,
type: Number,
default: 0
type: String,
default: ""
});
/**
/**
* Register resting variants
*/
game.settings.register("sw5e", "restVariant", {
@ -82,18 +82,6 @@ export const registerSystemSettings = function() {
type: Boolean,
});
/**
* Option to automatically create Power Measured Template on roll
*/
game.settings.register("sw5e", "alwaysPlacePowerTemplate", {
name: "SETTINGS.5eAutoPowerTemplateN",
hint: "SETTINGS.5eAutoPowerTemplateL",
scope: "client",
config: true,
default: false,
type: Boolean
});
/**
* Option to automatically collapse Item Card descriptions
*/
@ -142,4 +130,16 @@ export const registerSystemSettings = function() {
transformTokens: true
}
});
game.settings.register("sw5e", "colorTheme", {
name: "SETTINGS.SWColorN",
hint: "SETTINGS.SWColorL",
scope: "world",
config: true,
default: "light",
type: String,
choices: {
"light": "SETTINGS.SWColorLight",
"dark": "SETTINGS.SWColorDark"
}
});
};

View file

@ -4,24 +4,30 @@
* @return {Promise}
*/
export const preloadHandlebarsTemplates = async function() {
return loadTemplates([
// Define template paths to load
const templatePaths = [
// Shared Partials
"systems/sw5e/templates/actors/parts/active-effects.html",
// Actor Sheet Partials
"systems/sw5e/templates/actors/parts/actor-traits.html",
"systems/sw5e/templates/actors/parts/actor-inventory.html",
"systems/sw5e/templates/actors/parts/actor-features.html",
"systems/sw5e/templates/actors/parts/actor-powerbook.html",
"systems/sw5e/templates/actors/parts/actor-effects.html",
"systems/sw5e/templates/actors/oldActor/parts/actor-traits.html",
"systems/sw5e/templates/actors/oldActor/parts/actor-inventory.html",
"systems/sw5e/templates/actors/oldActor/parts/actor-features.html",
"systems/sw5e/templates/actors/oldActor/parts/actor-powerbook.html",
"systems/sw5e/templates/actors/newActor/parts/swalt-biography.html",
"systems/sw5e/templates/actors/newActor/parts/swalt-core.html",
"systems/sw5e/templates/actors/newActor/parts/swalt-features.html",
"systems/sw5e/templates/actors/newActor/parts/swalt-inventory.html",
"systems/sw5e/templates/actors/newActor/parts/swalt-notes.html",
"systems/sw5e/templates/actors/newActor/parts/swalt-powerbook.html",
"systems/sw5e/templates/actors/newActor/parts/swalt-resources.html",
"systems/sw5e/templates/actors/newActor/parts/swalt-traits.html",
// Item Sheet Partials
"systems/sw5e/templates/items/parts/item-action.html",
"systems/sw5e/templates/items/parts/item-activation.html",
"systems/sw5e/templates/items/parts/item-description.html",
"systems/sw5e/templates/items/parts/item-mountable.html"
];
// Load the template parts
return loadTemplates(templatePaths);
]);
};

61
package-lock.json generated
View file

@ -89,6 +89,7 @@
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
"integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
"dev": true,
"requires": {
"micromatch": "^3.1.4",
"normalize-path": "^2.1.1"
@ -98,6 +99,7 @@
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
"integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
"dev": true,
"requires": {
"remove-trailing-separator": "^1.0.1"
}
@ -270,6 +272,7 @@
"version": "0.11.2",
"resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
"integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
"dev": true,
"requires": {
"cache-base": "^1.0.1",
"class-utils": "^0.3.5",
@ -284,6 +287,7 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
"integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
"dev": true,
"requires": {
"is-descriptor": "^1.0.0"
}
@ -292,6 +296,7 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
"integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
"dev": true,
"requires": {
"kind-of": "^6.0.0"
}
@ -300,6 +305,7 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
"integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
"dev": true,
"requires": {
"kind-of": "^6.0.0"
}
@ -308,6 +314,7 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
"integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
"dev": true,
"requires": {
"is-accessor-descriptor": "^1.0.0",
"is-data-descriptor": "^1.0.0",
@ -342,6 +349,7 @@
"version": "2.3.2",
"resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
"integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
"dev": true,
"requires": {
"arr-flatten": "^1.1.0",
"array-unique": "^0.3.2",
@ -359,6 +367,7 @@
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
"integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
"dev": true,
"requires": {
"is-extendable": "^0.1.0"
}
@ -379,6 +388,7 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
"integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
"dev": true,
"requires": {
"collection-visit": "^1.0.0",
"component-emitter": "^1.2.1",
@ -409,6 +419,7 @@
"version": "2.1.8",
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz",
"integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==",
"dev": true,
"requires": {
"anymatch": "^2.0.0",
"async-each": "^1.0.1",
@ -686,7 +697,6 @@
"version": "0.1.7",
"resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz",
"integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==",
"optional": true,
"requires": {
"prr": "~1.0.1"
}
@ -772,6 +782,7 @@
"version": "2.1.4",
"resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
"integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
"dev": true,
"requires": {
"debug": "^2.3.3",
"define-property": "^0.2.5",
@ -786,6 +797,7 @@
"version": "0.2.5",
"resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
"integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
"dev": true,
"requires": {
"is-descriptor": "^0.1.0"
}
@ -794,6 +806,7 @@
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
"integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
"dev": true,
"requires": {
"is-extendable": "^0.1.0"
}
@ -851,6 +864,7 @@
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
"integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
"dev": true,
"requires": {
"array-unique": "^0.3.2",
"define-property": "^1.0.0",
@ -866,6 +880,7 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
"integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
"dev": true,
"requires": {
"is-descriptor": "^1.0.0"
}
@ -874,6 +889,7 @@
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
"integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
"dev": true,
"requires": {
"is-extendable": "^0.1.0"
}
@ -882,6 +898,7 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
"integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
"dev": true,
"requires": {
"kind-of": "^6.0.0"
}
@ -890,6 +907,7 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
"integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
"dev": true,
"requires": {
"kind-of": "^6.0.0"
}
@ -898,6 +916,7 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
"integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
"dev": true,
"requires": {
"is-accessor-descriptor": "^1.0.0",
"is-data-descriptor": "^1.0.0",
@ -931,6 +950,7 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
"integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
"dev": true,
"requires": {
"extend-shallow": "^2.0.1",
"is-number": "^3.0.0",
@ -942,6 +962,7 @@
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
"integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
"dev": true,
"requires": {
"is-extendable": "^0.1.0"
}
@ -961,6 +982,7 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz",
"integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==",
"dev": true,
"requires": {
"detect-file": "^1.0.0",
"is-glob": "^4.0.0",
@ -1033,6 +1055,7 @@
"version": "1.2.13",
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz",
"integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==",
"dev": true,
"optional": true,
"requires": {
"bindings": "^1.5.0",
@ -1107,6 +1130,7 @@
"version": "5.0.5",
"resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-5.0.5.tgz",
"integrity": "sha512-zOZgGGEHPklZNjZQaZ9f41i7F2YwE+tS5ZHrDhbBCk3stwahn5vQxnFmBJZHoYdusR6R1bLSXeGUy/BhctwKzw==",
"dev": true,
"requires": {
"anymatch": "^2.0.0",
"async-done": "^1.2.0",
@ -1156,6 +1180,7 @@
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/gulp/-/gulp-4.0.2.tgz",
"integrity": "sha512-dvEs27SCZt2ibF29xYgmnwwCYZxdxhQ/+LFWlbAW8y7jt68L/65402Lz3+CKy0Ov4rOs+NERmDq7YlZaDqUIfA==",
"dev": true,
"requires": {
"glob-watcher": "^5.0.3",
"gulp-cli": "^2.2.0",
@ -1167,6 +1192,7 @@
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/gulp-cli/-/gulp-cli-2.3.0.tgz",
"integrity": "sha512-zzGBl5fHo0EKSXsHzjspp3y5CONegCm8ErO5Qh0UzFzk2y4tMvzLWhoDokADbarfZRL2pGpRp7yt6gfJX4ph7A==",
"dev": true,
"requires": {
"ansi-colors": "^1.0.1",
"archy": "^1.0.0",
@ -1194,6 +1220,7 @@
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/gulp-less/-/gulp-less-4.0.1.tgz",
"integrity": "sha512-hmM2k0FfQp7Ptm3ZaqO2CkMX3hqpiIOn4OHtuSsCeFym63F7oWlEua5v6u1cIjVUKYsVIs9zPg9vbqTEb/udpA==",
"dev": true,
"requires": {
"accord": "^0.29.0",
"less": "2.6.x || ^3.7.1",
@ -1229,6 +1256,7 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
"integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
"dev": true,
"requires": {
"get-value": "^2.0.6",
"has-values": "^1.0.0",
@ -1239,6 +1267,7 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
"integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
"dev": true,
"requires": {
"is-number": "^3.0.0",
"kind-of": "^4.0.0"
@ -1248,6 +1277,7 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
"integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
"dev": true,
"requires": {
"is-buffer": "^1.1.5"
}
@ -1270,8 +1300,7 @@
"image-size": {
"version": "0.5.5",
"resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz",
"integrity": "sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=",
"optional": true
"integrity": "sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w="
},
"indx": {
"version": "0.2.3",
@ -1445,6 +1474,7 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
"integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
"dev": true,
"requires": {
"kind-of": "^3.0.2"
},
@ -1453,6 +1483,7 @@
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
"dev": true,
"requires": {
"is-buffer": "^1.1.5"
}
@ -1609,6 +1640,7 @@
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/liftoff/-/liftoff-3.1.0.tgz",
"integrity": "sha512-DlIPlJUkCV0Ips2zf2pJP0unEoT1kwYhiiPUGF3s/jtxTCjziNLoiVVh+jqWOWeFi6mmwQ5fNxvAUyPad4Dfog==",
"dev": true,
"requires": {
"extend": "^3.0.0",
"findup-sync": "^3.0.0",
@ -1676,7 +1708,6 @@
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz",
"integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==",
"optional": true,
"requires": {
"pify": "^4.0.1",
"semver": "^5.6.0"
@ -1685,8 +1716,7 @@
"pify": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
"integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
"optional": true
"integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g=="
}
}
},
@ -1715,6 +1745,7 @@
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/matchdep/-/matchdep-2.0.0.tgz",
"integrity": "sha1-xvNINKDY28OzfCfui7yyfHd1WC4=",
"dev": true,
"requires": {
"findup-sync": "^2.0.0",
"micromatch": "^3.0.4",
@ -1726,6 +1757,7 @@
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz",
"integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=",
"dev": true,
"requires": {
"detect-file": "^1.0.0",
"is-glob": "^3.1.0",
@ -1737,6 +1769,7 @@
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
"integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
"dev": true,
"requires": {
"is-extglob": "^2.1.0"
}
@ -1747,6 +1780,7 @@
"version": "3.1.10",
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
"integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
"dev": true,
"requires": {
"arr-diff": "^4.0.0",
"array-unique": "^0.3.2",
@ -1766,8 +1800,7 @@
"mime": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
"integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
"optional": true
"integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="
},
"minimatch": {
"version": "3.0.4",
@ -1815,6 +1848,7 @@
"version": "1.2.13",
"resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
"integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==",
"dev": true,
"requires": {
"arr-diff": "^4.0.0",
"array-unique": "^0.3.2",
@ -2153,8 +2187,7 @@
"prr": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",
"integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=",
"optional": true
"integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY="
},
"pump": {
"version": "2.0.1",
@ -2212,6 +2245,7 @@
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz",
"integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==",
"dev": true,
"requires": {
"graceful-fs": "^4.1.11",
"micromatch": "^3.1.10",
@ -2394,6 +2428,7 @@
"version": "0.8.2",
"resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
"integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
"dev": true,
"requires": {
"base": "^0.11.1",
"debug": "^2.2.0",
@ -2409,6 +2444,7 @@
"version": "0.2.5",
"resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
"integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
"dev": true,
"requires": {
"is-descriptor": "^0.1.0"
}
@ -2417,6 +2453,7 @@
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
"integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
"dev": true,
"requires": {
"is-extendable": "^0.1.0"
}
@ -2750,6 +2787,7 @@
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
"integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
"dev": true,
"requires": {
"is-number": "^3.0.0",
"repeat-string": "^1.6.1"
@ -2819,8 +2857,7 @@
"uglify-to-browserify": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz",
"integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=",
"optional": true
"integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc="
},
"unc-path-regex": {
"version": "0.1.2",

File diff suppressed because one or more lines are too long

View file

@ -1,66 +1,108 @@
{"name":"Force Storm","permission":{"default":0,"9BhUyjgxIxogl2ot":3},"type":"power","data":{"description":{"value":"<p>A crackling storm of lightning with a diameter of 60 feet and a height of 120 feet appears in a location you choose within range. Whenever a creature enters the storm or starts its turn there, it must make a Dexterity saving throw. On a failed save, it takes 30d6 lightning damage or half as much as a successful one.</p>\n<p>The power damages objects in the area and ignites flammable objects that arent being worn or carried.</p>","chat":"","unidentified":""},"source":"","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":1,"units":"minute"},"target":{"value":60,"units":"ft","type":"cylinder"},"range":{"value":150,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"save","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[["30d6","lightning"]],"versatile":""},"formula":"","save":{"ability":"dex","dc":null,"scaling":"power"},"level":9,"school":"drk","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":"","prepared":false},"scaling":{"mode":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"systems/sw5e/packs/Icons/Force%20Powers/Force%20Storm.webp","_id":"16N8bYdqJ8bvDPQX"}
{"name":"Shadow Sight","permission":{"default":0,"XA86Wm4MjngMySbc":3},"type":"power","data":{"description":{"value":"<p>You enhance your eyesight with the Force, allowing you to better see in the dark. For the duration, you have darkvision out to 60 feet.</p>","chat":"","unidentified":""},"source":"","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":1,"units":"hour"},"target":{"value":null,"units":null,"type":"self"},"range":{"value":null,"long":null,"units":"self"},"uses":{"value":null,"max":0,"per":""},"consume":{"type":"","target":"","amount":null},"ability":null,"actionType":"","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":1,"school":"uni","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":"","prepared":false},"scaling":{"mode":"none","formula":""}},"flags":{},"img":"icons/svg/mystery-man.svg","_id":"0mQsnKBxENq1z4zW"}
{"_id":"16N8bYdqJ8bvDPQX","name":"Force Storm","permission":{"default":0,"9BhUyjgxIxogl2ot":3},"type":"power","data":{"description":{"value":"<p>A crackling storm of lightning with a diameter of 60 feet and a height of 120 feet appears in a location you choose within range. Whenever a creature enters the storm or starts its turn there, it must make a Dexterity saving throw. On a failed save, it takes 30d6 lightning damage or half as much as a successful one.</p>\n<p>The power damages objects in the area and ignites flammable objects that arent being worn or carried.</p>","chat":"","unidentified":""},"source":"","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":1,"units":"minute"},"target":{"value":60,"units":"ft","type":"cylinder"},"range":{"value":150,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"save","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[["30d6","lightning"]],"versatile":""},"formula":"","save":{"ability":"dex","dc":null,"scaling":"power"},"level":9,"school":"drk","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":"","prepared":false},"scaling":{"mode":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"systems/sw5e/packs/Icons/Force%20Powers/Force%20Storm.webp"}
{"_id":"1ARPmaD7aZ3Pjxt2","name":"Battle Precognition","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>Your attunement to the Force warns you when you are about to enter danger. Until the power ends, your base AC becomes 13 + your Dexterity modifier. This power has no effect if you are wearing armor.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":8,"units":"hour"},"target":{"value":null,"units":"","type":"self"},"range":{"value":null,"long":null,"units":""},"uses":{"value":0,"max":0,"per":""},"ability":null,"actionType":"","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":1,"school":"uni","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":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]},"consume":{"type":"","target":"","amount":null}},"flags":{},"img":"systems/sw5e/packs/Icons/Force%20Powers/Battle%20Precognition.webp"}
{"name":"Remove Curse","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>At your touch, all curses affecting one creature or object end. If the object is a cursed enhanced item, its curse remains, but the power breaks its owners attunement to the object so it can be removed or discarded.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":null,"units":"inst"},"target":{"value":1,"units":"","type":"object"},"range":{"value":null,"long":null,"units":"touch"},"uses":{"value":0,"max":0,"per":""},"ability":null,"actionType":"","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":3,"school":"lgt","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":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg","_id":"1IFr14Wc4sA1833o"}
{"name":"Sanctuary","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>Until the power ends, any creature who targets the warded creature with an attack, a harmful power, or a hostile action must first make a Wisdom saving throw. On a failed save, the creature must choose a new target or lose the attack or power. This power doesnt protect the warded creature from area effects.</p>\n<p>If the warded creature makes an attack, casts a power that affects an enemy creature, or takes a hostile action this power ends.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"bonus","cost":1,"condition":""},"duration":{"value":1,"units":"minute"},"target":{"value":1,"units":"","type":"creature"},"range":{"value":30,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"save","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"wis","dc":null,"scaling":"power"},"level":1,"school":"lgt","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":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg","_id":"1hCkZcduMjx91kSe"}
{"_id":"1IFr14Wc4sA1833o","name":"Remove Curse","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>At your touch, all curses affecting one creature or object end. If the object is a cursed enhanced item, its curse remains, but the power breaks its owners attunement to the object so it can be removed or discarded.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":null,"units":"inst"},"target":{"value":1,"units":"","type":"object"},"range":{"value":null,"long":null,"units":"touch"},"uses":{"value":0,"max":0,"per":""},"ability":null,"actionType":"","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":3,"school":"lgt","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":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg"}
{"_id":"1hCkZcduMjx91kSe","name":"Sanctuary","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>Until the power ends, any creature who targets the warded creature with an attack, a harmful power, or a hostile action must first make a Wisdom saving throw. On a failed save, the creature must choose a new target or lose the attack or power. This power doesnt protect the warded creature from area effects.</p>\n<p>If the warded creature makes an attack, casts a power that affects an enemy creature, or takes a hostile action this power ends.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"bonus","cost":1,"condition":""},"duration":{"value":1,"units":"minute"},"target":{"value":1,"units":"","type":"creature"},"range":{"value":30,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"save","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"wis","dc":null,"scaling":"power"},"level":1,"school":"lgt","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":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg"}
{"_id":"1hXmkUOjNtkCtS8T","name":"Bestow Curse","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You touch a creature, and that creature must succeed on a Wisdom saving throw or become cursed for the duration of the power. When you cast this power, choose the nature of the curse from the following options:</p>\n<ul>\n<li>Choose one ability score. While cursed, the target has disadvantage on ability checks and saving throws made with that ability score.</li>\n<li>While cursed, the target has disadvantage on attack rolls against you.</li>\n<li>While cursed, the target must make a Wisdom saving throw at the start of each of its turns. lf it fails, it wastes its action that turn doing nothing.</li>\n<li>While the target is cursed, your attacks and powers deal an extra 1d8 necrotic damage to the target.</li>\n</ul>\n<p>A remove curse power ends this effect. At the GMs discretion, you may choose an alternative curse effect, but it should be no more powerful than those described above. The GM has final say on such a curses effect.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":"Have Curse Power"},"duration":{"value":1,"units":"minute"},"target":{"value":null,"units":"touch","type":""},"range":{"value":null,"long":null,"units":"touch"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"save","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"wis","dc":null,"scaling":"power"},"level":3,"school":"drk","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":null,"prepared":true},"scaling":{"mode":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]},"consume":{"type":"","target":"","amount":null}},"flags":{},"img":"systems/sw5e/packs/Icons/Force%20Powers/Bestow%20Curse.webp"}
{"_id":"1svmnRR3v0KEGeDZ","name":"Mind Trick","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>Choose a target within range that isnt hostile toward you. The target must make a Wisdom saving throw. On a failed save, the target has disadvantage on Wisdom (Perception) and Intelligence (Investigation) checks.</p>\n<p>On a successful save, the creature realizes that you tried to use the Force to influence its awareness and becomes hostile toward you. A creature prone to violence might attack you. Another creature might seek retribution in other ways (at the GMs discretion), depending on the nature of your interaction with it. This power has no effect on droids or constructs.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":1,"units":"minute"},"target":{"value":1,"units":"","type":"creature"},"range":{"value":30,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"save","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"wis","dc":null,"scaling":"power"},"level":0,"school":"uni","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":null,"prepared":true},"scaling":{"mode":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]},"consume":{"type":"","target":"","amount":null}},"flags":{},"img":"systems/sw5e/packs/Icons/Force%20Powers/Mind%20Trick.webp"}
{"_id":"28uF6yN4NLoc1Mf7","name":"Master Speed","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>Choose up to two willing creatures that you can see within range. Until the power ends, each targets speed is doubled, they gain a +2 bonus to AC, they have advantage on Dexterity saving throws, and they gain an additional action on each of their turns. That action can be used only to take the Attack (one weapon attack only), Dash, Disengage, Hide, or the Use an Object Action.</p>\n<p>When the power ends, each target cant move or take actions until after its next turn, as a wave of lethargy sweeps over it.</p>\n<p>Force Potency.&nbsp;When you cast this power using a force slot of 8th-level or higher, you can target one additional creature for each slot level above 7th.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":1,"units":"minute"},"target":{"value":2,"units":"","type":"creature"},"range":{"value":30,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":null,"actionType":"","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":7,"school":"uni","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":null,"prepared":true},"scaling":{"mode":"level","formula":"1 additional creature"},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]},"consume":{"type":"","target":"","amount":null}},"flags":{},"img":"systems/sw5e/packs/Icons/Force%20Powers/Master%20Speed.webp"}
{"_id":"2EdyvNwmyRD9yhmn","name":"Maddening Darkness","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>Terrifying darkness spreads from a point you choose within range to fill a 60-foot-radius sphere until the power ends. The darkness spreads around corners. A creature with darkvision cant see through this darkness. Unenhanced light, as well as light created by powers of 8th level or lower, cant illuminate the area.</p>\n<p>Shrieks, gibbering, and mad laughter can be heard within the sphere. Whenever a creature starts its turn in the sphere, it must make a Wisdom saving throw, taking 8d8 psychic damage on a failed save, or half as much damage on a successful one.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":"Have Shroud of Darkenss"},"duration":{"value":10,"units":"minute"},"target":{"value":60,"units":"ft","type":"radius"},"range":{"value":150,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"save","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[["8d8","psychic"]],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":8,"school":"drk","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":null,"prepared":true},"scaling":{"mode":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]},"consume":{"type":"","target":"","amount":null}},"flags":{},"img":"systems/sw5e/packs/Icons/Force%20Powers/Maddening%20Darkness.webp"}
{"name":"Valor","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You bless up to three creatures of your choice within range. Whenever a target makes an attack roll or a saving throw before the power ends, the target can roll a d4 and add the number rolled to the attack roll or saving throw.</p>\n<p>Force Potency.&nbsp;When you cast this power using a force slot of 2nd level or higher, you can target one additional creature for each slot level above 1st.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":1,"units":"minute"},"target":{"value":3,"units":"","type":"creature"},"range":{"value":30,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"other","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"1d4","save":{"ability":"","dc":null,"scaling":"power"},"level":1,"school":"lgt","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":null,"prepared":true},"scaling":{"mode":"level","formula":"1 additional creature"},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg","_id":"2MaAEt5XSnjEurWK"}
{"_id":"2MaAEt5XSnjEurWK","name":"Valor","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You bless up to three creatures of your choice within range. Whenever a target makes an attack roll or a saving throw before the power ends, the target can roll a d4 and add the number rolled to the attack roll or saving throw.</p>\n<p>Force Potency.&nbsp;When you cast this power using a force slot of 2nd level or higher, you can target one additional creature for each slot level above 1st.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":1,"units":"minute"},"target":{"value":3,"units":"","type":"creature"},"range":{"value":30,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"other","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"1d4","save":{"ability":"","dc":null,"scaling":"power"},"level":1,"school":"lgt","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":null,"prepared":true},"scaling":{"mode":"level","formula":"1 additional creature"},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg"}
{"_id":"3IoaQSSoAtFsoavO","name":"Master Force Barrier","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>This power massively bolsters your allies with toughness and resolve. Creatures of your choice in a 30-foot radius around you when you cast this power gain the following benefits:</p>\n<ul>\n<li>The creature sheds dim light in a 5-foot radius.</li>\n<li>The creature has advantage on all saving throws</li>\n<li>Other creatures have disadvantage on attack rolls against them.</li>\n<li>When a dark side creature hits them with a melee attack, that creature must make a Constitution saving throw or be blinded until the power ends.</li>\n</ul>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":1,"units":"minute"},"target":{"value":30,"units":"ft","type":"radius"},"range":{"value":null,"long":null,"units":"self"},"uses":{"value":0,"max":0,"per":""},"ability":null,"actionType":"","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":8,"school":"lgt","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":null,"prepared":true},"scaling":{"mode":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]},"consume":{"type":"","target":"","amount":null}},"flags":{},"img":"icons/svg/mystery-man.svg"}
{"name":"Force Propel","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>Choose one or more creatures or objects not being worn or carried within 60 feet that weigh up to a combined total of 15 pounds. The creatures or objects immediately move 60 feet in a direction of your choice. If the creatures or objects end this movement in the air, they immediately fall to the ground. If the creatures or objects collide with any one target during its travel, both the creatures or objects and the target take 3d8 kinetic damage. If the target is a creature, it must make a Dexterity saving throw. On a failed save, it takes 3d8 kinetic damage, or half as much on a successful one.</p>\n<p>Force Potency.&nbsp;When you cast this power using a force slot of 2nd level or higher, the maximum weight increases by 15 pounds and the damage increases by 1d8 for each slot level above 1st.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":null,"units":"inst"},"target":{"value":null,"units":"any","type":"object"},"range":{"value":60,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"save","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[["3d8","kinetic"]],"versatile":""},"formula":"","save":{"ability":"dex","dc":null,"scaling":"power"},"level":1,"school":"uni","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":"level","formula":"1d8"},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg","_id":"3KGdCbHATzaghiwo"}
{"name":"Mass Hysteria","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>Drawing on the deepest fears of a group of creatures, you create illusory creatures in their minds, manifesting their worst nightmares as an implacable threat visible only to them. Each creature in a 30-foot-radius sphere is frightened for the duration of the power. At the end of each of the frightened creatures turns, it must succeed on a Wisdom saving throw or take 5d10 psychic damage. On a successful save, the power ends for that creature. This power has no effect on droids or constructs.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":"Have Hysteria Power"},"duration":{"value":1,"units":"minute"},"target":{"value":30,"units":"ft","type":"radius"},"range":{"value":120,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"save","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[["5d8","psychic"]],"versatile":""},"formula":"","save":{"ability":"wis","dc":null,"scaling":"power"},"level":9,"school":"drk","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":null,"prepared":true},"scaling":{"mode":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg","_id":"3odfJsD1RezuxzDG"}
{"name":"Restoration","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You touch a creature and end either one disease or one condition afflicting it. The condition can be blinded, deafened, paralyzed, or poisoned.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":null,"units":"inst"},"target":{"value":1,"units":"","type":"creature"},"range":{"value":null,"long":null,"units":"touch"},"uses":{"value":0,"max":0,"per":""},"ability":null,"actionType":"","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":2,"school":"lgt","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":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg","_id":"4Tmt6Bb06vqS7cCM"}
{"_id":"4a18XmMOExlwDAYF","name":"Breath Control","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You are able to slow your metabolism in such a way that you can stop breathing and resist the effect of toxins in your body. If you are poisoned, you neutralize the poison. If more than one poison afflicts you, you neutralize one poison that you know is present, or you neutralize one at random.</p>\n<p>For the duration, you have advantage on saving throws against being poisoned, resistance to poison damage, and you no longer need to breathe.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":10,"units":"minute"},"target":{"value":null,"units":"","type":"self"},"range":{"value":null,"long":null,"units":""},"uses":{"value":0,"max":0,"per":""},"ability":null,"actionType":"","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":1,"school":"uni","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":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]},"consume":{"type":"","target":"","amount":null}},"flags":{"dynamiceffects":{"equipActive":false,"alwaysActive":false}},"img":"icons/svg/mystery-man.svg"}
{"_id":"3KGdCbHATzaghiwo","name":"Force Propel","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>Choose one or more creatures or objects not being worn or carried within 60 feet that weigh up to a combined total of 15 pounds. The creatures or objects immediately move 60 feet in a direction of your choice. If the creatures or objects end this movement in the air, they immediately fall to the ground. If the creatures or objects collide with any one target during its travel, both the creatures or objects and the target take 3d8 kinetic damage. If the target is a creature, it must make a Dexterity saving throw. On a failed save, it takes 3d8 kinetic damage, or half as much on a successful one.</p>\n<p>Force Potency.&nbsp;When you cast this power using a force slot of 2nd level or higher, the maximum weight increases by 15 pounds and the damage increases by 1d8 for each slot level above 1st.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":null,"units":"inst"},"target":{"value":null,"units":"any","type":"object"},"range":{"value":60,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"save","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[["3d8","kinetic"]],"versatile":""},"formula":"","save":{"ability":"dex","dc":null,"scaling":"power"},"level":1,"school":"uni","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":"level","formula":"1d8"},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg"}
{"_id":"3odfJsD1RezuxzDG","name":"Mass Hysteria","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>Drawing on the deepest fears of a group of creatures, you create illusory creatures in their minds, manifesting their worst nightmares as an implacable threat visible only to them. Each creature in a 30-foot-radius sphere is frightened for the duration of the power. At the end of each of the frightened creatures turns, it must succeed on a Wisdom saving throw or take 5d10 psychic damage. On a successful save, the power ends for that creature. This power has no effect on droids or constructs.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":"Have Hysteria Power"},"duration":{"value":1,"units":"minute"},"target":{"value":30,"units":"ft","type":"radius"},"range":{"value":120,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"save","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[["5d8","psychic"]],"versatile":""},"formula":"","save":{"ability":"wis","dc":null,"scaling":"power"},"level":9,"school":"drk","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":null,"prepared":true},"scaling":{"mode":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg"}
{"name":"Malacia","permission":{"default":0,"XA86Wm4MjngMySbc":3},"type":"power","data":{"description":{"value":"<p>A creature of your choice that you can see within range is overcome with a sense of dizziness and nausea, as you disturb its equilibrium with the Force. The creature must make a Wisdom saving throw or fall prone, becoming incapacitated and unable to stand up for the duration.</p>\n<p>At the end of each of its turns, and each time it takes damage, the target can make another Wisdom saving throw. The target has advantage on the saving throw if its triggered by damage. On a success, the power ends. This power has no effect on droids or constructs.</p>","chat":"","unidentified":""},"source":"","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":1,"units":"minute"},"target":{"value":1,"units":"","type":"cone"},"range":{"value":30,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"consume":{"type":"","target":"","amount":null},"ability":"","actionType":"save","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"wis","dc":null,"scaling":"power"},"level":1,"school":"uni","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":true},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":"","prepared":false},"scaling":{"mode":"none","formula":""}},"flags":{},"img":"icons/svg/mystery-man.svg","_id":"3x3DUe1hqdJ7yZst"}
{"_id":"4Tmt6Bb06vqS7cCM","name":"Restoration","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You touch a creature and end either one disease or one condition afflicting it. The condition can be blinded, deafened, paralyzed, or poisoned.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":null,"units":"inst"},"target":{"value":1,"units":"","type":"creature"},"range":{"value":null,"long":null,"units":"touch"},"uses":{"value":0,"max":0,"per":""},"ability":null,"actionType":"","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":2,"school":"lgt","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":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg"}
{"_id":"4a18XmMOExlwDAYF","name":"Breath Control","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You are able to slow your metabolism in such a way that you can stop breathing and resist the effect of toxins in your body. If you are poisoned, you neutralize the poison. If more than one poison afflicts you, you neutralize one poison that you know is present, or you neutralize one at random.</p>\n<p>For the duration, you have advantage on saving throws against being poisoned, resistance to poison damage, and you no longer need to breathe.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":10,"units":"minute"},"target":{"value":null,"units":"","type":"self"},"range":{"value":null,"long":null,"units":""},"uses":{"value":0,"max":0,"per":""},"ability":null,"actionType":"","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":1,"school":"uni","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":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]},"consume":{"type":"","target":"","amount":null}},"flags":{},"img":"icons/svg/mystery-man.svg"}
{"name":"True Sight","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You shift your vision to see through use of the Force, giving you the ability to see things as they actually are. For the duration, you have truesight and notice secret doors hidden by powers, all out to a range of 120 feet.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":1,"units":"hour"},"target":{"value":null,"units":null,"type":"self"},"range":{"value":120,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":null,"actionType":"","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":6,"school":"uni","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":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg","_id":"4bBmcQgYLFIO9GCn"}
{"name":"Revitalize","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You return a dead creature you touch to life, provided that it has been dead no longer than 10 minutes. If the creatures soul is both willing and at liberty to rejoin the body, the creature returns to life with 1 hit point.</p>\n<p>This power also neutralizes any poisons and cures diseases that affected the creature at the time it died.</p>\n<p>This power closes all mortal wounds, but it doesnt restore missing body parts. If the creature is lacking body parts or organs integral for its survival, its head for instance, the power automatically fails.</p>\n<p>Coming back from the dead is an ordeal. The target takes a -4 penalty to all attack rolls, saving throws, and ability checks. Every time the target finishes a long rest, the penalty is reduced by 1 until it disappears.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"minute","cost":1,"condition":""},"duration":{"value":null,"units":""},"target":{"value":1,"units":"","type":"creature"},"range":{"value":null,"long":null,"units":"touch"},"uses":{"value":0,"max":0,"per":""},"ability":null,"actionType":"","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":5,"school":"lgt","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":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg","_id":"5Gxqh2j4A258jCSY"}
{"_id":"4bBmcQgYLFIO9GCn","name":"True Sight","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You shift your vision to see through use of the Force, giving you the ability to see things as they actually are. For the duration, you have truesight and notice secret doors hidden by powers, all out to a range of 120 feet.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":1,"units":"hour"},"target":{"value":null,"units":null,"type":"self"},"range":{"value":120,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":null,"actionType":"","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":6,"school":"uni","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":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg"}
{"name":"Morichro","permission":{"default":0,"XA86Wm4MjngMySbc":3},"type":"power","data":{"description":{"value":"<p>You touch a willing creature and put it into a cataleptic state that is indistinguishable from death.</p>\n<p>For the powers duration, or until you use an action to touch the target and dismiss the power, the target appears dead to all outward inspection and to powers used to determine the targets status. The target is blinded and incapacitated, and its speed drops to 0. The target has resistance to all damage except psychic damage. If the target is diseased or poisoned when you cast the power, or becomes diseased or poisoned while under the powers effect, the disease and poison have no effect until the power ends. This power has no effect on droids or constructs.</p>","chat":"","unidentified":""},"source":"","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":1,"units":"hour"},"target":{"value":null,"units":"","type":""},"range":{"value":null,"long":null,"units":"touch"},"uses":{"value":0,"max":0,"per":""},"consume":{"type":"","target":"","amount":null},"ability":null,"actionType":"","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":3,"school":"lgt","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":"","prepared":false},"scaling":{"mode":"none","formula":""}},"flags":{},"img":"icons/svg/mystery-man.svg","_id":"562ItvjZZHhSmqeP"}
{"_id":"5Gxqh2j4A258jCSY","name":"Revitalize","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You return a dead creature you touch to life, provided that it has been dead no longer than 10 minutes. If the creatures soul is both willing and at liberty to rejoin the body, the creature returns to life with 1 hit point.</p>\n<p>This power also neutralizes any poisons and cures diseases that affected the creature at the time it died.</p>\n<p>This power closes all mortal wounds, but it doesnt restore missing body parts. If the creature is lacking body parts or organs integral for its survival, its head for instance, the power automatically fails.</p>\n<p>Coming back from the dead is an ordeal. The target takes a -4 penalty to all attack rolls, saving throws, and ability checks. Every time the target finishes a long rest, the penalty is reduced by 1 until it disappears.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"minute","cost":1,"condition":""},"duration":{"value":null,"units":""},"target":{"value":1,"units":"","type":"creature"},"range":{"value":null,"long":null,"units":"touch"},"uses":{"value":0,"max":0,"per":""},"ability":null,"actionType":"","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":5,"school":"lgt","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":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg"}
{"_id":"5koTRABu4ER8g6Wo","name":"Horror","permission":{"default":0,"9BhUyjgxIxogl2ot":3},"type":"power","data":{"description":{"value":"<p>You project a phantasmal image of a creatures worst fears. Each creature in a 30-foot cone must succeed on a Wisdom saving throw or drop whatever it is holding and become frightened for the duration. This power has no effect on constructs or droids.</p>\n<p>While frightened by this power, a creature must take the Dash action and move away from you by the safest available route on each of its turns, unless there is nowhere to move. If the creature ends its turn in a location where it doesnt have line of sight to you, the creature can make a Wisdom saving throw. On a successful save, the power ends for that creature.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":1,"units":"minute"},"target":{"value":30,"units":"ft","type":"cone"},"range":{"value":null,"long":null,"units":"self"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"save","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"wis","dc":null,"scaling":"power"},"level":3,"school":"drk","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":"","prepared":false},"scaling":{"mode":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]},"consume":{"type":"","target":"","amount":null}},"flags":{},"img":"systems/sw5e/packs/Icons/Force%20Powers/Horror.webp"}
{"name":"Convultion","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>Choose a point you can see on the ground within range. A fountain of churned earth and stone erupts in a 20-foot cube centered on that point. Each creature in that area must make a Dexterity saving throw. A creature takes 3d12 kinetic damage on a failed save, or half as much damage on a successful one. Additionally, the ground in that area becomes difficult terrain until cleared. Each 5-foot-square portion of the area requires at least 1 minute to clear by hand.</p>\n<p>Force Potency.&nbsp;When you cast this power using a force slot of 4th level or higher, the damage increases by 1d12 for each slot level above 3rd.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":null,"units":"inst"},"target":{"value":20,"units":"ft","type":"cube"},"range":{"value":120,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"save","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[["3d12",""]],"versatile":""},"formula":"","save":{"ability":"dex","dc":null,"scaling":"power"},"level":1,"school":"uni","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":"level","formula":"1d12"},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg","_id":"5lOXTZUiRmL7aZi9"}
{"_id":"5lOXTZUiRmL7aZi9","name":"Convultion","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>Choose a point you can see on the ground within range. A fountain of churned earth and stone erupts in a 20-foot cube centered on that point. Each creature in that area must make a Dexterity saving throw. A creature takes 3d12 kinetic damage on a failed save, or half as much damage on a successful one. Additionally, the ground in that area becomes difficult terrain until cleared. Each 5-foot-square portion of the area requires at least 1 minute to clear by hand.</p>\n<p>Force Potency.&nbsp;When you cast this power using a force slot of 4th level or higher, the damage increases by 1d12 for each slot level above 3rd.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":null,"units":"inst"},"target":{"value":20,"units":"ft","type":"cube"},"range":{"value":120,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"save","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[["3d12",""]],"versatile":""},"formula":"","save":{"ability":"dex","dc":null,"scaling":"power"},"level":1,"school":"uni","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":"level","formula":"1d12"},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg"}
{"_id":"5o01ADUmNyzy470b","name":"Force Disarm","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You select a weapon or object being worn or carried by a Large or smaller creature within range. The creature must make a Strength or Dexterity saving throw (the creature chooses the ability to use). If the item is being worn, this save is made with disadvantage. On a failed save, the creature takes 1d4 force damage and the item is pulled directly to you. If you have a free hand, you catch the weapon. Otherwise, it lands at your feet.</p>\n<p>This powers damage increases by 1d4 when you reach 5th level (2d4), 11th level (3d4), and 17th level (4d4).</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":null,"units":"inst"},"target":{"value":1,"units":"","type":"object"},"range":{"value":30,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"save","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[["1d4","force"]],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":0,"school":"uni","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":"atwill","formula":"1d4"},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]},"consume":{"type":"","target":"","amount":null}},"flags":{},"img":"icons/svg/mystery-man.svg"}
{"name":"Telekinetic Storm","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You stir the Force around you, creating a turbulent field of telekinetic energy that buffets enemies around you. The field extends out to a distance of 15 feet around you for the duration.</p>\n<p>When you cast this power, you can designate any number of creatures you can see to be unaffected by it. An affected creatures speed is halved in the area, and when the creature enters the area for the first time on a turn or starts its turn there, it must make a Constitution saving throw. On a failed save, the creature takes 3d8 force damage. On a successful save, the creature takes half as much damage.</p>\n<p>Force Potency.&nbsp;When you cast this power using a force power slot of 4th level or higher, the damage increases by 1d8 for each slot level above 3rd.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":1,"units":"minute"},"target":{"value":15,"units":"ft","type":"radius"},"range":{"value":null,"long":null,"units":"self"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"save","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[["3d8","force"]],"versatile":""},"formula":"","save":{"ability":"con","dc":null,"scaling":"power"},"level":3,"school":"lgt","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":null,"prepared":true},"scaling":{"mode":"level","formula":"1d8"},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg","_id":"5raHPlhouud0Jpr4"}
{"name":"Skill Empowerment","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>Your power with the Force deepens a creatures understanding of its own talent. You touch one willing creature and give it expertise in one skill of your choice; until the power ends, the creature doubles its proficiency bonus for ability checks it makes that use the chosen skill.</p>\n<p>You must choose a skill in which the target is proficient and that isnt already benefiting from an effect, such as Expertise, that doubles its proficiency bonus.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":1,"units":"hour"},"target":{"value":1,"units":"","type":"creature"},"range":{"value":null,"long":null,"units":"touch"},"uses":{"value":0,"max":0,"per":""},"ability":null,"actionType":"","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":5,"school":"lgt","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":null,"prepared":true},"scaling":{"mode":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg","_id":"5tAwilkRcZsTc62q"}
{"_id":"5raHPlhouud0Jpr4","name":"Telekinetic Storm","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You stir the Force around you, creating a turbulent field of telekinetic energy that buffets enemies around you. The field extends out to a distance of 15 feet around you for the duration.</p>\n<p>When you cast this power, you can designate any number of creatures you can see to be unaffected by it. An affected creatures speed is halved in the area, and when the creature enters the area for the first time on a turn or starts its turn there, it must make a Constitution saving throw. On a failed save, the creature takes 3d8 force damage. On a successful save, the creature takes half as much damage.</p>\n<p>Force Potency.&nbsp;When you cast this power using a force power slot of 4th level or higher, the damage increases by 1d8 for each slot level above 3rd.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":1,"units":"minute"},"target":{"value":15,"units":"ft","type":"radius"},"range":{"value":null,"long":null,"units":"self"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"save","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[["3d8","force"]],"versatile":""},"formula":"","save":{"ability":"con","dc":null,"scaling":"power"},"level":3,"school":"lgt","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":null,"prepared":true},"scaling":{"mode":"level","formula":"1d8"},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg"}
{"_id":"5tAwilkRcZsTc62q","name":"Skill Empowerment","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>Your power with the Force deepens a creatures understanding of its own talent. You touch one willing creature and give it expertise in one skill of your choice; until the power ends, the creature doubles its proficiency bonus for ability checks it makes that use the chosen skill.</p>\n<p>You must choose a skill in which the target is proficient and that isnt already benefiting from an effect, such as Expertise, that doubles its proficiency bonus.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":1,"units":"hour"},"target":{"value":1,"units":"","type":"creature"},"range":{"value":null,"long":null,"units":"touch"},"uses":{"value":0,"max":0,"per":""},"ability":null,"actionType":"","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":5,"school":"lgt","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":null,"prepared":true},"scaling":{"mode":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg"}
{"name":"Necrotic Touch","permission":{"default":0,"XA86Wm4MjngMySbc":3},"type":"power","data":{"description":{"value":"<p>You attempt to drain the essence from a creature. Make a melee force attack against the target. If the attack hits, the creature takes 1d6 necrotic damage, and you gain temporary hit points equal to the damage dealt until the end of your next turn.</p>\n<p>This powers damage increases by 1d6 when you reach 5th level (2d6), 11th level (3d6), and 17th level (4d6).</p>","chat":"","unidentified":""},"source":"","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":1,"units":"round"},"target":{"value":1,"units":"","type":"cone"},"range":{"value":null,"long":null,"units":"touch"},"uses":{"value":0,"max":0,"per":""},"consume":{"type":"","target":"","amount":null},"ability":"","actionType":"mpak","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[["1d6",""]],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":0,"school":"drk","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":"","prepared":false},"scaling":{"mode":"atwill","formula":"1d6"}},"flags":{},"img":"icons/svg/mystery-man.svg","_id":"6NTKtlQ39Ksl6Pt3"}
{"_id":"6d2wwUGy40FlGqaY","name":"Scourge","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>For the powers duration, your eyes become an inky void imbued with dread power. One creature of your choice within 60 feet of you that you can see must succeed on a Constitution saving throw or be affected by one of the following effects of your choice for the duration. On each of your turns until the power ends, you can use your action to target another creature but cant target a creature again if it has succeeded on a saving throw against this casting of&nbsp;scourge.</p>\n<p><strong>Asleep.</strong>&nbsp;The target falls unconscious. It wakes up if it takes any damage or if another creature uses its action to shake the sleeper awake.</p>\n<p><strong>Panicked.</strong>&nbsp;The target is frightened of you. On each of its turns, the frightened creature must take the Dash action and move away from you by the safest and shortest available route, unless there is nowhere to move. If the target moves to a place at least 60 feet away from you where it can no longer see you, this effect ends.</p>\n<p><strong>Sickened.</strong>&nbsp;The target has disadvantage on attack rolls and ability checks. At the end of each of its turns, it can make another Wisdom saving throw. If it succeeds, the effect ends.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":"Have Plague Power"},"duration":{"value":1,"units":"minute"},"target":{"value":null,"units":"self","type":""},"range":{"value":60,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"save","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"con","dc":null,"scaling":"power"},"level":6,"school":"drk","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":null,"prepared":true},"scaling":{"mode":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]},"consume":{"type":"","target":"","amount":null}},"flags":{},"img":"systems/sw5e/packs/Icons/Force%20Powers/Scourge.webp"}
{"name":"Give Life","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>Placing your hand on another creature you can transfer your own life force to them. You spend and roll one of your hit dice and the creature regains that many hit points. This power has no effect on droids or constructs.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":null,"units":"inst"},"target":{"value":1,"units":"","type":"creature"},"range":{"value":null,"long":null,"units":"touch"},"uses":{"value":0,"max":0,"per":""},"ability":null,"actionType":"","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":0,"school":"lgt","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":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg","_id":"6sfPioKWjx1VOqwF"}
{"name":"Improved Phasewalk","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You teleport up to 60 feet to an unoccupied space you can see. On each of your turns before the power ends, you can use a bonus action to teleport in this way again.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"bonus","cost":1,"condition":""},"duration":{"value":1,"units":"minute"},"target":{"value":null,"units":null,"type":"self"},"range":{"value":60,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":null,"actionType":"","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":5,"school":"uni","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":null,"prepared":true},"scaling":{"mode":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg","_id":"6tJDkxz5pyPHVJvT"}
{"_id":"6sfPioKWjx1VOqwF","name":"Give Life","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>Placing your hand on another creature you can transfer your own life force to them. You spend and roll one of your hit dice and the creature regains that many hit points. This power has no effect on droids or constructs.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":null,"units":"inst"},"target":{"value":1,"units":"","type":"creature"},"range":{"value":null,"long":null,"units":"touch"},"uses":{"value":0,"max":0,"per":""},"ability":null,"actionType":"","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":0,"school":"lgt","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":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg"}
{"_id":"6tJDkxz5pyPHVJvT","name":"Improved Phasewalk","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You teleport up to 60 feet to an unoccupied space you can see. On each of your turns before the power ends, you can use a bonus action to teleport in this way again.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"bonus","cost":1,"condition":""},"duration":{"value":1,"units":"minute"},"target":{"value":null,"units":null,"type":"self"},"range":{"value":60,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":null,"actionType":"","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":5,"school":"uni","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":null,"prepared":true},"scaling":{"mode":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg"}
{"_id":"6xaiD7x8L4RLpXKv","name":"Improved Force Immunities","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>An immobile, faintly shimmering barrier springs into existence in a 15-foot radius around you and remains for the duration. The barrier moves with you.</p>\n<p>Any force power of 5th level or lower cast from outside the barrier cant affect creatures or objects within it, even if the power is cast using a higher level force slot. Such a power can target creatures and objects within the barrier, but the power has no effect on them. Similarly, the area within the barrier is excluded from the areas affected by such powers.</p>\n<p>Force Potency.&nbsp;When you cast this power using a force slot of 7th level or higher, the barrier blocks powers of one level higher for each slot level above 6th.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":1,"units":"minute"},"target":{"value":15,"units":"ft","type":"radius"},"range":{"value":null,"long":null,"units":"self"},"uses":{"value":0,"max":0,"per":""},"ability":null,"actionType":"","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":6,"school":"uni","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":null,"prepared":true},"scaling":{"mode":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]},"consume":{"type":"","target":"","amount":null}},"flags":{},"img":"systems/sw5e/packs/Icons/Force%20Powers/Improved%20Force%20Immunity.webp"}
{"name":"Force Focus","permission":{"default":0,"XA86Wm4MjngMySbc":3},"type":"power","data":{"description":{"value":"<p>You let the Force guide you, empowering your strikes. Until the power ends, your weapon attacks deal an extra 1d4 force damage on a hit.</p>","chat":"","unidentified":""},"source":"","activation":{"type":"bonus","cost":1,"condition":""},"duration":{"value":1,"units":"minute"},"target":{"value":null,"units":null,"type":"self"},"range":{"value":null,"long":null,"units":""},"uses":{"value":0,"max":0,"per":""},"consume":{"type":"","target":"","amount":null},"ability":"","actionType":"other","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[["1d4","force"]],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":1,"school":"lgt","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":true},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":"","prepared":false},"scaling":{"mode":"none","formula":""}},"flags":{},"img":"icons/svg/mystery-man.svg","_id":"7Iov2tTffcGjLiA6"}
{"_id":"7dqNYNqMphGLIm5T","name":"Heal","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>A creature you touch regains a number of hit points equal to 1d8 + your forcecasting ability modifier. This power has no effect on droids or constructs.</p>\n<p>Force Potency.&nbsp;When you cast this power using a force slot of 2nd level or higher, the healing increases by 1d8 for each slot level above 1st.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":null,"units":"inst"},"target":{"value":1,"units":"","type":"creature"},"range":{"value":null,"long":null,"units":"touch"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"heal","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[["1d8 + @mod","healing"]],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":1,"school":"lgt","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":"level","formula":"1d8"},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]},"consume":{"type":"","target":"","amount":null}},"flags":{},"img":"systems/sw5e/packs/Icons/Force%20Powers/Heal.webp"}
{"_id":"81kLSpx80zEEr0O2","name":"Denounce","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>A target of your choice within range must make a Charisma saving throw. On a failed save, when the target makes their next attack roll or saving throw they must roll a d4 and subtract the number from it. The power then ends.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":1,"units":"minute"},"target":{"value":1,"units":"","type":"creature"},"range":{"value":30,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"save","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"1d4","save":{"ability":"cha","dc":null,"scaling":"power"},"level":0,"school":"drk","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":null,"prepared":true},"scaling":{"mode":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]},"consume":{"type":"","target":"","amount":null}},"flags":{},"img":"systems/sw5e/packs/Icons/Force%20Powers/Denounce.webp"}
{"name":"Stun Droid","permission":{"default":0,"9BhUyjgxIxogl2ot":3},"type":"power","data":{"description":{"value":"<p>Choose a droid or construct that you can see within range. The target must succeed on a Constitution saving throw or be paralyzed for the duration. At the beginning of each of its turns, the target takes energy damage equal to your forcecasting ability modifier. At the end of each of its turns, the target can make another Constitution saving throw. On a success, the power ends on the target.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":1,"units":"minute"},"target":{"value":1,"units":"","type":"droid"},"range":{"value":60,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"save","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"con","dc":null,"scaling":"power"},"level":2,"school":"lgt","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":"","prepared":false},"scaling":{"mode":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"systems/sw5e/packs/Icons/Force%20Powers/Stun%20Droid.webp","_id":"83VXTwWszl8bMlW6"}
{"name":"Stun","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>Choose a humanoid that you can see within range. The target must succeed on a Wisdom saving throw or be paralyzed for the duration. At the end of each of its turns, the target can make another Wisdom saving throw. On a success, the power ends on the target.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":1,"units":"minute"},"target":{"value":null,"units":"","type":"creature"},"range":{"value":60,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"save","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"wis","dc":null,"scaling":"power"},"level":2,"school":"lgt","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":null,"prepared":true},"scaling":{"mode":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg","_id":"8UOBsZEV8esbx6IG"}
{"name":"Siphon Life","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>A tendril of inky darkness reaches out from you, touching a creature you can see within range to drain life from it. The target must make a Dexterity saving throw. On a successful save, the target takes 2d8 necrotic damage, and the power ends. On a failed save, the target takes 4d8 necrotic damage, and until the power ends, you can use your action on each of your turns to automatically deal 4d8 necrotic damage to the target. The power ends if you use your action to do anything else, if the target is ever outside the powers range, or if the target has total cover from you.</p>\n<p>Whenever the power deals damage to a target, you regain hit points equal to half the amount of necrotic damage the target takes.</p>\n<p><strong>Force Potency.&nbsp;</strong>When you cast this power using a force slot of 6th level or higher, the damage increases by 1d8 for each slot level above 5th.</p>","chat":"","unidentified":""},"source":"","activation":{"type":"action","cost":1,"condition":"Have Drain Life Power"},"duration":{"value":1,"units":"minute"},"target":{"value":1,"units":"","type":"creature"},"range":{"value":60,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"save","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[["4d8","necrotic"]],"versatile":""},"formula":"","save":{"ability":"dex","dc":null,"scaling":"power"},"level":5,"school":"drk","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":null,"prepared":true},"scaling":{"mode":"level","formula":"1d8"},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg","_id":"99X7GzLrrdVppgT9"}
{"_id":"83VXTwWszl8bMlW6","name":"Stun Droid","permission":{"default":0,"9BhUyjgxIxogl2ot":3},"type":"power","data":{"description":{"value":"<p>Choose a droid or construct that you can see within range. The target must succeed on a Constitution saving throw or be paralyzed for the duration. At the beginning of each of its turns, the target takes energy damage equal to your forcecasting ability modifier. At the end of each of its turns, the target can make another Constitution saving throw. On a success, the power ends on the target.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":1,"units":"minute"},"target":{"value":1,"units":"","type":"droid"},"range":{"value":60,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"save","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"con","dc":null,"scaling":"power"},"level":2,"school":"lgt","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":"","prepared":false},"scaling":{"mode":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"systems/sw5e/packs/Icons/Force%20Powers/Stun%20Droid.webp"}
{"_id":"8UOBsZEV8esbx6IG","name":"Stun","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>Choose a humanoid that you can see within range. The target must succeed on a Wisdom saving throw or be paralyzed for the duration. At the end of each of its turns, the target can make another Wisdom saving throw. On a success, the power ends on the target.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":1,"units":"minute"},"target":{"value":null,"units":"","type":"creature"},"range":{"value":60,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"save","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"wis","dc":null,"scaling":"power"},"level":2,"school":"lgt","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":null,"prepared":true},"scaling":{"mode":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg"}
{"name":"Master Malacia","permission":{"default":0,"XA86Wm4MjngMySbc":3},"type":"power","data":{"description":{"value":"<p>Choose one creature that you can see within range. The creature reels with extreme dizziness and nausea for the duration. Creatures that cant be charmed are immune to this power.</p>\n<p>The affected creature must use all of its movement to writhe in discomfort without leaving its space and has disadvantage on Dexterity saving throws and attack rolls. While the target is affected by this power, other creatures have advantage on attack rolls against it. As an action, an affected creature makes a Wisdom saving throw to regain control of itself. On a successful save, the power ends. This power has no effect on droids or constructs.</p>","chat":"","unidentified":""},"source":"","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":1,"units":"minute"},"target":{"value":1,"units":"","type":"cone"},"range":{"value":30,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"consume":{"type":"","target":"","amount":null},"ability":"","actionType":"save","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"wis","dc":null,"scaling":"power"},"level":6,"school":"uni","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":true},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":"","prepared":false},"scaling":{"mode":"none","formula":""}},"flags":{},"img":"icons/svg/mystery-man.svg","_id":"8usZf3N59jE1JHux"}
{"_id":"99X7GzLrrdVppgT9","name":"Siphon Life","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>A tendril of inky darkness reaches out from you, touching a creature you can see within range to drain life from it. The target must make a Dexterity saving throw. On a successful save, the target takes 2d8 necrotic damage, and the power ends. On a failed save, the target takes 4d8 necrotic damage, and until the power ends, you can use your action on each of your turns to automatically deal 4d8 necrotic damage to the target. The power ends if you use your action to do anything else, if the target is ever outside the powers range, or if the target has total cover from you.</p>\n<p>Whenever the power deals damage to a target, you regain hit points equal to half the amount of necrotic damage the target takes.</p>\n<p><strong>Force Potency.&nbsp;</strong>When you cast this power using a force slot of 6th level or higher, the damage increases by 1d8 for each slot level above 5th.</p>","chat":"","unidentified":""},"source":"","activation":{"type":"action","cost":1,"condition":"Have Drain Life Power"},"duration":{"value":1,"units":"minute"},"target":{"value":1,"units":"","type":"creature"},"range":{"value":60,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"save","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[["4d8","necrotic"]],"versatile":""},"formula":"","save":{"ability":"dex","dc":null,"scaling":"power"},"level":5,"school":"drk","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":null,"prepared":true},"scaling":{"mode":"level","formula":"1d8"},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg"}
{"_id":"ABfdZpL0iC2Osioj","name":"Rage","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You endow yourself with endurance and martial prowess fueled by the Force. Until the power ends, you cant cast powers, and you gain the following benefits:</p>\n<ul>\n<li>You gain 50 temporary hit points. If any of these remain when the power ends, they are lost.</li>\n<li>You have advantage on attack rolls that you make with lightweapons and vibroweapons.</li>\n<li>When you hit a target with a weapon attack, that target takes an extra 2d12 force damage.</li>\n<li>You have proficiency with all armor, lightweapons, and vibroweapons.</li>\n<li>You have proficiency in Strength and Constitution saving throws.</li>\n<li>You can attack twice, instead of once, when you take the Attack action on your turn. You ignore this benefit if you already have a feature, like Extra Attack, that gives you extra attacks.</li>\n</ul>\n<p>Immediately after the power ends, you must succeed on a DC 15 Constitution saving throw or suffer one level of exhaustion.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":10,"units":"minute"},"target":{"value":null,"units":"self","type":""},"range":{"value":null,"long":null,"units":"self"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"other","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[["50","temphp"]],"versatile":""},"formula":"2d12","save":{"ability":"con","dc":15,"scaling":"flat"},"level":6,"school":"drk","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":null,"prepared":true},"scaling":{"mode":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]},"consume":{"type":"","target":"","amount":null}},"flags":{},"img":"systems/sw5e/packs/Icons/Force%20Powers/Rage.webp"}
{"_id":"AnqVVfHnV36f7OnA","name":"Dominate Monster","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You attempt to beguile a creature that you can see within range. It must succeed on a Wisdom saving throw or be charmed by you for the duration. If you or creatures that are friendly to you are fighting it, it has advantage on the saving throw.</p>\n<p>While the creature is charmed, you have a telepathic link with it as long as you are within 1 mile of it. You can use this telepathic link to issue commands to the creature while you are conscious (no action required), which it does its best to obey. You can specify a simple and general course of action, such as “Attack that creature,” “Run over there,” or “Fetch that object.” If the creature completes the order and doesnt receive further direction from you, it defends and preserves itself to the best of its ability.</p>\n<p>You can use your action to take total and precise control of the target. Until the end of your next turn, the creature takes only the actions you choose, and doesnt do anything that you dont allow it to do. During this time, you can also cause the creature to use a reaction, but this requires you to use your own reaction as well.</p>\n<p>Each time the target takes damage, it makes a new Wisdom saving throw against the power. If the saving throw succeeds, the power ends.</p>\n<p><strong>Force Potency.&nbsp;</strong>When you cast this power with a 9th-level force slot, the duration is concentration, up to 8 hours.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":"Have Dominate Mind Power"},"duration":{"value":1,"units":"hour"},"target":{"value":1,"units":"","type":"creature"},"range":{"value":60,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"save","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"wis","dc":null,"scaling":"power"},"level":8,"school":"drk","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":null,"prepared":true},"scaling":{"mode":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]},"consume":{"type":"","target":"","amount":null}},"flags":{},"img":"systems/sw5e/packs/Icons/Force%20Powers/Dominate%20Monster.webp"}
{"_id":"AvkOVXIYVgJTsytl","name":"Beast Trick","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>This power lets you distract a beast. Choose a beast that you can see within range. If the beasts Intelligence is 4 or higher, the power fails. Otherwise, the beast must succeed on a Wisdom saving throw or be charmed by you for the powers duration. If you or one of your companions harms the target, the power ends.</p>\n<p>Force Potency.&nbsp;When you cast this power using a force slot of 2nd level or higher, you can affect one additional beast for each slot level above 1st.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":24,"units":"hour"},"target":{"value":1,"units":"","type":"creature"},"range":{"value":30,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":null,"actionType":"","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":1,"school":"lgt","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":"level","formula":"1 additional beast"},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]},"consume":{"type":"","target":"","amount":null}},"flags":{},"img":"systems/sw5e/packs/Icons/Force%20Powers/Beast%20Trick.webp"}
{"_id":"B3wzjcXwEAfTxhQW","name":"Hallucination","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You craft a dangerous illusion in the mind of a creature that you can see within range. The target must make a Wisdom saving throw. On a failed save, you create a phantasmal object, creature, or other visible phenomenon of your choice that is no larger than a 10-foot cube and that is perceivable only to the target for the duration. This power has no effect on droids or constructs.</p>\n<p>The hallucination includes sound, temperature, and other stimuli, also evident only to the creature.</p>\n<p>The target can use its action to examine the hallucination with an Intelligence (Investigation) check against your force power save DC. If the check succeeds, the target realizes that the hallucination is an illusion, and the power ends.</p>\n<p>While a target is affected by the power, the target treats the hallucination as if it were real. The target rationalizes any illogical outcomes from interacting with the hallucination. For example, a target attempting to walk across a phantasmal bridge that spans a chasm falls once it steps onto the bridge. If the target survives the fall, it still believes that the bridge exists and comes up with some other explanation for its fall - it was pushed, it slipped, or a strong wind might have knocked it off.</p>\n<p>An affected target is so convinced of the hallucinations reality that it can even take damage from the illusion. A hallucination created to appear as a creature can attack the target. Similarly, a hallucination created to appear as fire, a pool of acid, or lava can burn the target. Each round on your turn, the hallucination can deal 1d6 psychic damage to the target if it is in the hallucinations area or within 5 feet of the hallucination, provided that the illusion is of a creature or hazard that could logically deal damage, such as by attacking. The target perceives the damage as a type appropriate to the illusion.</p>\n<p><strong>Force Potency</strong>.&nbsp;When you cast this power using a force power slot of 3rd level or higher, the range increases by 20 feet, the image dimensions increase by 5 feet, and you can target one additional creature for every two slot levels above 2nd.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":1,"units":"minute"},"target":{"value":10,"units":"ft","type":"cube"},"range":{"value":60,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"save","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"wis","dc":null,"scaling":"power"},"level":2,"school":"drk","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":null,"prepared":true},"scaling":{"mode":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]},"consume":{"type":"","target":"","amount":null}},"flags":{},"img":"systems/sw5e/packs/Icons/Force%20Powers/Hallucination.webp"}
{"name":"Cloud Mind","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>Roll 5d8; the total is how many hit points of creatures this power can affect. Creatures within 20 feet of a point you choose are affected in order of their current hit points.</p>\n<p>Starting with the creature that has the lowest current hit points, each creature affected by this power falls unconscious. If the power ends, the sleeper takes damage, or someone uses an action wake the sleeper, they will be awoken.</p>\n<p>Subtract each creatures hit points from the total before moving on to the creature with the next lowest hit points. A creatures hit points must be equal to or less than the remaining total for that creature to be affected.</p>\n<p>This power has no effect on droids or constructs.</p>\n<p>Force Potency.&nbsp;When you cast this power using a force slot of 2nd level or higher, you can roll an additional 2d8 for each slot level above 1st.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":1,"units":"minute"},"target":{"value":20,"units":"ft","type":"radius"},"range":{"value":90,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"other","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"5d8","save":{"ability":"","dc":null,"scaling":"power"},"level":1,"school":"lgt","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":"level","formula":"2d8"},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg","_id":"BJDl4AQjFfR1RTxc"}
{"name":"Sonic Charge","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>As part of the action used to cast this power, you must make a melee attack with a weapon against one creature within your weapons reach, otherwise the power fails. On a hit, the target suffers the attacks normal effects, and you begin to emanate a disturbing hum until the start of your next turn. If a hostile creature ends its turn within 5 feet of you, it takes 1d4 sonic damage.</p>\n<p>This powers damage increases when you reach higher levels. At 5th level, the melee attack deals an extra 1d8 sonic damage to the target, and the secondary damage increases by 1d4. Both damage rolls increase by 1d8 and 1d4, respectively, at 11th level and 17th level.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":1,"units":"round"},"target":{"value":1,"units":"","type":"creature"},"range":{"value":null,"long":null,"units":""},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"other","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[["1d4","Sonic"]],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":0,"school":"uni","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":"atwill","formula":"1d4"},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg","_id":"BMCJlnRZ5j4MlUnU"}
{"_id":"BJDl4AQjFfR1RTxc","name":"Cloud Mind","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>Roll 5d8; the total is how many hit points of creatures this power can affect. Creatures within 20 feet of a point you choose are affected in order of their current hit points.</p>\n<p>Starting with the creature that has the lowest current hit points, each creature affected by this power falls unconscious. If the power ends, the sleeper takes damage, or someone uses an action wake the sleeper, they will be awoken.</p>\n<p>Subtract each creatures hit points from the total before moving on to the creature with the next lowest hit points. A creatures hit points must be equal to or less than the remaining total for that creature to be affected.</p>\n<p>This power has no effect on droids or constructs.</p>\n<p>Force Potency.&nbsp;When you cast this power using a force slot of 2nd level or higher, you can roll an additional 2d8 for each slot level above 1st.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":1,"units":"minute"},"target":{"value":20,"units":"ft","type":"radius"},"range":{"value":90,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"other","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"5d8","save":{"ability":"","dc":null,"scaling":"power"},"level":1,"school":"lgt","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":"level","formula":"2d8"},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg"}
{"_id":"BMCJlnRZ5j4MlUnU","name":"Sonic Charge","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>As part of the action used to cast this power, you must make a melee attack with a weapon against one creature within your weapons reach, otherwise the power fails. On a hit, the target suffers the attacks normal effects, and you begin to emanate a disturbing hum until the start of your next turn. If a hostile creature ends its turn within 5 feet of you, it takes 1d4 sonic damage.</p>\n<p>This powers damage increases when you reach higher levels. At 5th level, the melee attack deals an extra 1d8 sonic damage to the target, and the secondary damage increases by 1d4. Both damage rolls increase by 1d8 and 1d4, respectively, at 11th level and 17th level.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":1,"units":"round"},"target":{"value":1,"units":"","type":"creature"},"range":{"value":null,"long":null,"units":""},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"other","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[["1d4","Sonic"]],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":0,"school":"uni","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":"atwill","formula":"1d4"},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg"}
{"name":"Call Lightning","permission":{"default":0,"XA86Wm4MjngMySbc":3},"type":"power","data":{"description":{"value":"<p>As you align yourself with nature through the Force, a 10-foot tall, 60-foot radius storm cloud cylinder appears, centered on a point you can see within range above you, with you as the center point. The power fails if your location cant accommodate the clouds size or height. When you cast the power, choose a point under the cloud for lightning to strike. Each creature within 5 feet must make a Dexterity save, taking 3d10 lightning damage on a fail and half on a success. While the power persists, you can use your action to call lightning to a point in range again.</p>\n<p>If youre outdoors and in a storm, the power gives you control of the storm rather than creating a new one. The lightning damage also increases by 1d10.</p>\n<p>Force Potency.&nbsp;When you cast this power using a force slot of 4th level or higher, the damage increases by 1d10 for each slot level above 3rd.</p>","chat":"","unidentified":""},"source":"","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":10,"units":"minute"},"target":{"value":60,"units":"ft","type":"cylinder"},"range":{"value":120,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"consume":{"type":"","target":"","amount":null},"ability":"","actionType":"save","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[["3d10","lightning"]],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":3,"school":"lgt","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":true},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":"","prepared":false},"scaling":{"mode":"level","formula":"1d10"}},"flags":{},"img":"icons/svg/mystery-man.svg","_id":"BMIFAP3MEIihGmi5"}
{"_id":"BbTpLPyPoucTsEdA","name":"Knight Speed","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>Choose a willing creature that you can see within range. Until the power ends, the targets speed is doubled, it gains a +2 bonus to AC, it has advantage on Dexterity saving throws, and it gains an additional action on each of its turns. That action can be used only to take the Attack (one weapon attack only), Dash, Disengage, Hide, or Use an Object action.</p>\n<p>When the power ends, the target cant move or take actions until after its next turn, as a wave of lethargy sweeps over it.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"special","cost":1,"condition":""},"duration":{"value":1,"units":"minute"},"target":{"value":1,"units":"","type":"creature"},"range":{"value":30,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":null,"actionType":"","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":3,"school":"uni","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":null,"prepared":true},"scaling":{"mode":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]},"consume":{"type":"","target":"","amount":null}},"flags":{},"img":"systems/sw5e/packs/Icons/Force%20Powers/Knight%20Speed.webp"}
{"_id":"BqGw2Mt7mBqqVclc","name":"Freedom of Movement","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You touch a willing creature. Its movement is unaffected by difficult terrain, and powers and enhanced effects cant reduce its speed or cause it to be paralyzed or restrained.</p>\n<p>The target can spend 5 feet of movement to automatically escape from unenhanced restraints. Additionally, being underwater imposes no penalties on its movement or attacks.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":1,"units":"hour"},"target":{"value":1,"units":"","type":"creature"},"range":{"value":null,"long":null,"units":"touch"},"uses":{"value":0,"max":0,"per":""},"ability":null,"actionType":"","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":4,"school":"uni","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":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]},"consume":{"type":"","target":"","amount":null}},"flags":{},"img":"icons/svg/mystery-man.svg"}
{"name":"Mind Prison","permission":{"default":0,"XA86Wm4MjngMySbc":3},"type":"power","data":{"description":{"value":"<p>You attempt to bind a creature within an illusory cell that only it perceives. One creature you can see within range must make an Intelligence saving throw. The target succeeds automatically if it is immune to being charmed. On a successful save, the target takes 5d10 psychic damage, and the power ends. On a failed save, the target takes 5d10 psychic damage, and you make the area immediately around the targets space appear dangerous to it in some way. You might cause the target to perceive itself as being surrounded by fire, a storm of blaster-fire, or deadly toxic gas, for example. Whatever form the illusion takes, the target cant see or hear anything beyond it and is restrained for the powers duration. If the target is moved out of the illusion, makes a melee attack through it, or reaches any part of its body through it, the target takes 10d10 psychic damage, and the power ends. This power has no effect on droids or constructs.</p>","chat":"","unidentified":""},"source":"","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":1,"units":"minute"},"target":{"value":1,"units":"","type":"creature"},"range":{"value":60,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"consume":{"type":"","target":"","amount":null},"ability":"","actionType":"save","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"int","dc":null,"scaling":"power"},"level":6,"school":"drk","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":true},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":"","prepared":false},"scaling":{"mode":"none","formula":""}},"flags":{},"img":"icons/svg/mystery-man.svg","_id":"Bwv89X2AFVI1SCb0"}
{"_id":"C0XOY6bm7NkP5cDW","name":"Force Chain Lightning","permission":{"default":0,"9BhUyjgxIxogl2ot":3},"type":"power","data":{"description":{"value":"<p>You create a bolt of lightning that arcs toward a target of your choice that you can see within range. Three bolts then leap from that target to as many as three other targets, each of which must be within 30 feet of the first target. A target can be a creature or an object and can be targeted by only one of the bolts.</p>\n<p>A target must make a Dexterity saving throw. The target takes 10d8 lightning damage on a failed save, or half as much damage on a successful one.</p>\n<p>Force Potency.&nbsp;When you cast this power using a force slot of 7th level or higher, one additional bolt leaps from the first target to another target for each slot level above 6th.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":null,"units":"inst"},"target":{"value":4,"units":"","type":"creature"},"range":{"value":150,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"save","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[["10d8","lightning"]],"versatile":""},"formula":"","save":{"ability":"dex","dc":null,"scaling":"power"},"level":6,"school":"drk","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":"","prepared":false},"scaling":{"mode":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"systems/sw5e/packs/Icons/Force%20Powers/Force%20Chain%20Lightning.webp"}
{"_id":"C2ROn2KK2QTLm9DW","name":"Guidance","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You touch one willing creature. Once before the power ends, the target can roll a d4 and add the number rolled to one ability check of its choice. It can roll the die before or after making the ability check. The power then ends.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":1,"units":"minute"},"target":{"value":1,"units":"","type":"creature"},"range":{"value":null,"long":null,"units":"touch"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"other","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"1d4","save":{"ability":"","dc":null,"scaling":"power"},"level":0,"school":"lgt","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":null,"prepared":true},"scaling":{"mode":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]},"consume":{"type":"","target":"","amount":null}},"flags":{},"img":"icons/svg/mystery-man.svg"}
{"name":"Spare the Dying","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You touch a living creature that has 0 hit points. The creature becomes stable. This power has no effect on droids or constructs.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":null,"units":""},"target":{"value":1,"units":"","type":"creature"},"range":{"value":null,"long":null,"units":"touch"},"uses":{"value":0,"max":0,"per":""},"ability":null,"actionType":"","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":0,"school":"lgt","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":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg","_id":"CJR5SlWKoaCtY1bq"}
{"name":"Tremor","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You cause a tremor in the ground within range. Each creature other than you in a 5-foot-radius sphere centered on that point must make a Dexterity saving throw. On a failed save, a creature takes 1d6 kinetic damage and is knocked prone. On a successful save, the creature takes half as much damage and isnt knocked prone. If the ground in that area is loose earth or stone, it becomes difficult terrain until cleared, with each 5-foot-diameter portion requiring at least 1 minute to clear by hand.</p>\n<p>Force Potency.&nbsp;When you cast this power using a force slot of 2nd level or higher, the damage increases by 1d6 for each slot level above 1st.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":null,"units":""},"target":{"value":5,"units":"ft","type":"radius"},"range":{"value":10,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"save","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[["1d6","kinetic"]],"versatile":""},"formula":"","save":{"ability":"dex","dc":null,"scaling":"power"},"level":1,"school":"uni","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":"level","formula":"1d6"},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg","_id":"CsLjEyQtegNiXKIZ"}
{"name":"Force Meld","permission":{"default":0,"XA86Wm4MjngMySbc":3},"type":"power","data":{"description":{"value":"<p>You forge a telepathic link among up to eight willing creatures of your choice within range, psychically linking each creature to all the others for the duration. Droids, constructs, and creatures with Intelligence scores of 2 or less arent affected by this power.</p>\n<p>Until the power ends, the targets can communicate telepathically through the bond whether or not they have a common language. The communication is possible over any distance, though it cant extend beyond a single planet.</p>","chat":"","unidentified":""},"source":"","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":1,"units":"hour"},"target":{"value":8,"units":"","type":"creature"},"range":{"value":30,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"consume":{"type":"","target":"","amount":null},"ability":null,"actionType":"","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":5,"school":"uni","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":"","prepared":true},"scaling":{"mode":"none","formula":""}},"flags":{},"img":"icons/svg/mystery-man.svg","_id":"C5UBI7f4LoNg2dPM"}
{"_id":"CJR5SlWKoaCtY1bq","name":"Spare the Dying","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You touch a living creature that has 0 hit points. The creature becomes stable. This power has no effect on droids or constructs.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":null,"units":""},"target":{"value":1,"units":"","type":"creature"},"range":{"value":null,"long":null,"units":"touch"},"uses":{"value":0,"max":0,"per":""},"ability":null,"actionType":"","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":0,"school":"lgt","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":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg"}
{"name":"Mass Malacia","permission":{"default":0,"XA86Wm4MjngMySbc":3},"type":"power","data":{"description":{"value":"<p>Each creature in a 30-foot cube within range must make a Wisdom saving throw. On a failed save, the creature becomes charmed for the duration. While charmed by this power, the creature is incapacitated and has a speed of 0.</p>\n<p>The power ends for an affected creature if it takes any damage or if someone else uses an action to shake the creature out of its stupor. This power has no effect on droids or constructs.</p>","chat":"","unidentified":""},"source":"","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":1,"units":"minute"},"target":{"value":30,"units":"ft","type":"cube"},"range":{"value":120,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"consume":{"type":"","target":"","amount":null},"ability":"","actionType":"save","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"wis","dc":null,"scaling":"power"},"level":3,"school":"uni","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":true},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":"","prepared":false},"scaling":{"mode":"none","formula":""}},"flags":{},"img":"icons/svg/mystery-man.svg","_id":"CkMXwj0l0H0rD9md"}
{"name":"Great Saber Throw","permission":{"default":0,"XA86Wm4MjngMySbc":3},"type":"power","data":{"description":{"value":"<p>As a part of the action used to cast this power, you must make a ranged force attack with a lightweapon or vibroweapon against one target within the powers range, otherwise the power fails. On a hit, the target takes 6d8 damage of the same type as the weapons damage and must make a Constitution saving throw against an additional effect depending on your choice of casting ability:</p>\n<p>Wisdom.&nbsp;The target takes an additional 4d6 force damage and it gains four levels of slowed until the end of its next turn. On a success, the target takes half as much damage and its speed isnt reduced.</p>\n<p>Charisma.&nbsp;The target takes an additional 4d6 necrotic damage and cannot regain hit points until the end of its next turn. On a success, the target takes half as much damage and its healing capability is unaffected.</p>\n<p>The weapon then immediately returns to your hand.</p>\n<p>Force Potency.&nbsp;When you cast this power using a force slot of 6th level or higher, the force or necrotic damage increases by 1d6 for each slot above 5th.</p>","chat":"","unidentified":""},"source":"","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":null,"units":"inst"},"target":{"value":1,"units":"","type":"creature"},"range":{"value":30,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"consume":{"type":"","target":"","amount":null},"ability":"","actionType":"rpak","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[["6d8",""]],"versatile":""},"formula":"4d6","save":{"ability":"con","dc":null,"scaling":"power"},"level":5,"school":"uni","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":"","prepared":false},"scaling":{"mode":"none","formula":""}},"flags":{},"img":"icons/svg/mystery-man.svg","_id":"CkwLRMWRdXp1ZOIh"}
{"_id":"CsLjEyQtegNiXKIZ","name":"Tremor","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You cause a tremor in the ground within range. Each creature other than you in a 5-foot-radius sphere centered on that point must make a Dexterity saving throw. On a failed save, a creature takes 1d6 kinetic damage and is knocked prone. On a successful save, the creature takes half as much damage and isnt knocked prone. If the ground in that area is loose earth or stone, it becomes difficult terrain until cleared, with each 5-foot-diameter portion requiring at least 1 minute to clear by hand.</p>\n<p>Force Potency.&nbsp;When you cast this power using a force slot of 2nd level or higher, the damage increases by 1d6 for each slot level above 1st.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":null,"units":""},"target":{"value":5,"units":"ft","type":"radius"},"range":{"value":10,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"save","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[["1d6","kinetic"]],"versatile":""},"formula":"","save":{"ability":"dex","dc":null,"scaling":"power"},"level":1,"school":"uni","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":"level","formula":"1d6"},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg"}
{"_id":"CuAbwhIt3j2V30Ey","name":"Saber Reflect","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>In response to being attacked, you raise your weapon to attempt to deflect. When you you use this power, the damage you take from the attack is reduced by 1d6. If you reduce the damage to 0, youre wielding a lightweapon or vibroweapon, and the damage is energy or ion, you can reflect the attack at a target within range as part of the same reaction. Make a ranged force attack at a target you can see. The attack has a normal range of 20 feet and a long range of 60 feet. On a hit, the target takes the triggering attacks normal damage.</p>\n<p>If you would have resistance to the triggering damage, resistance is applied before the damage reduction.</p>\n<p>The powers damage reduction increases by 1d6 when you reach 5th level (2d6), 11th level (3d6), and 17th level (4d6).</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"reaction","cost":1,"condition":"which you take in response to being hit by a ranged attack"},"duration":{"value":null,"units":"inst"},"target":{"value":null,"units":"","type":"self"},"range":{"value":null,"long":null,"units":""},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"other","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"1d6","save":{"ability":"","dc":null,"scaling":"power"},"level":0,"school":"uni","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":"atwill","formula":"1d6"},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]},"consume":{"type":"","target":"","amount":null}},"flags":{},"img":"systems/sw5e/packs/Icons/Force%20Powers/Saber%20Reflect.webp"}
{"_id":"DFpooO6icOfTdG5C","name":"Master Feedback","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You unleash the power of your mind to blast the intellect of up to ten creatures of your choice that you can see within range. Creatures that have an Intelligence score of 2 or lower are unaffected.</p>\n<p>Each target must make an Intelligence saving throw. On a failed save, a target takes 14d6 psychic damage and is stunned. On a successful save, a target takes half as much damage and isnt stunned.</p>\n<p>A stunned target can make a Wisdom saving throw at the end of each of its turns. On a successful save, the stunning effect ends.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":"Have Greater Feedback Power"},"duration":{"value":null,"units":"inst"},"target":{"value":10,"units":"","type":"creature"},"range":{"value":90,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"save","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[["14d6","psychic"]],"versatile":""},"formula":"","save":{"ability":"int","dc":null,"scaling":"power"},"level":8,"school":"drk","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":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]},"consume":{"type":"","target":"","amount":null}},"flags":{},"img":"systems/sw5e/packs/Icons/Force%20Powers/Master%20Feedback.webp"}
{"name":"Improved Phasestrike","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>Choose up to five creatures you can see within range. Make a melee force attack against each one. On hit, a target takes 6d10 force damage. You can then teleport to an unoccupied space you can see within 5 feet of one of the creatures you chose.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":null,"units":"inst"},"target":{"value":5,"units":"","type":"creature"},"range":{"value":30,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"mpak","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[["6d10","force"]],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":5,"school":"uni","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":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg","_id":"ENNhFJKCcxrg481J"}
{"_id":"ENNhFJKCcxrg481J","name":"Improved Phasestrike","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>Choose up to five creatures you can see within range. Make a melee force attack against each one. On hit, a target takes 6d10 force damage. You can then teleport to an unoccupied space you can see within 5 feet of one of the creatures you chose.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":null,"units":"inst"},"target":{"value":5,"units":"","type":"creature"},"range":{"value":30,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"mpak","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[["6d10","force"]],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":5,"school":"uni","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":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg"}
{"_id":"EXK4sg6gKXfMnLnf","name":"Battle Meditation","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You exude an aura out to 5 feet that boosts the morale and overall battle prowess you and your allies while simultaneously reducing the oppositions combat-effectiveness by eroding their will to fight.</p>\n<p>Whenever you or a friendly creature within your meditation makes an attack roll or a saving throw, they can roll a d4 and add the number rolled to the attack roll or saving throw.</p>\n<p>Whenever a hostile creature enters your meditation or starts its turn there, it must make a Charisma saving throw. On a failed save, it must roll a d4 and subtract the number rolled from each attack roll or saving throw it makes before the end of your next turn. On a successful save, it is immune to this power for 1 day.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":1,"units":"minute"},"target":{"value":5,"units":"ft","type":"radius"},"range":{"value":null,"long":null,"units":"self"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"save","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"1d4","save":{"ability":"cha","dc":null,"scaling":"power"},"level":2,"school":"uni","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":null,"prepared":true},"scaling":{"mode":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]},"consume":{"type":"","target":"","amount":null}},"flags":{},"img":"systems/sw5e/packs/Icons/Force%20Powers/Battle%20Meditation.webp"}
{"name":"Improved Restoration","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You imbue a creature you touch with positive energy to undo a debilitating effect. You can reduce the targets exhaustion level by one, or end one of the following effects on the target:</p>\n<ul>\n<li>One effect that charmed the target.</li>\n<li>One curse, including the targets attunement to a cursed item.</li>\n<li>Any reduction to one of the targets ability scores.</li>\n<li>One effect reducing the targets hit point maximum.</li>\n</ul>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":"Restoration"},"duration":{"value":null,"units":"inst"},"target":{"value":1,"units":"","type":"creature"},"range":{"value":null,"long":null,"units":"touch"},"uses":{"value":0,"max":0,"per":""},"ability":null,"actionType":"","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":5,"school":"lgt","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":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg","_id":"F02pFj62Grlr9sdF"}
{"name":"Project","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You lift three piles of debris or small objects from the ground and hurl them. Each pile hits a creature of your choice that you can see within range. The pile deals 1d4+1 force damage to its target. The piles all strike simultaneously and you can direct them to hit one creature or several.</p>\n<p>Force Potency.&nbsp;When you cast this power using a force slot of 2nd level or higher, you lift and throw an additional pile of debris for each slot level above 1st.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":null,"units":"inst"},"target":{"value":3,"units":"","type":"object"},"range":{"value":120,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"other","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[["1d4 + 1","force"]],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":1,"school":"lgt","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":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg","_id":"FLBRnexpCEIneqy2"}
{"_id":"F02pFj62Grlr9sdF","name":"Improved Restoration","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You imbue a creature you touch with positive energy to undo a debilitating effect. You can reduce the targets exhaustion level by one, or end one of the following effects on the target:</p>\n<ul>\n<li>One effect that charmed the target.</li>\n<li>One curse, including the targets attunement to a cursed item.</li>\n<li>Any reduction to one of the targets ability scores.</li>\n<li>One effect reducing the targets hit point maximum.</li>\n</ul>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":"Restoration"},"duration":{"value":null,"units":"inst"},"target":{"value":1,"units":"","type":"creature"},"range":{"value":null,"long":null,"units":"touch"},"uses":{"value":0,"max":0,"per":""},"ability":null,"actionType":"","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":5,"school":"lgt","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":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg"}
{"name":"Seethe","permission":{"default":0,"XA86Wm4MjngMySbc":3},"type":"power","data":{"description":{"value":"<p>You seethe with anger, letting the dark side of the Force flow through and empower you. As part of the action to cast this power, you spend one of your Hit Dice to recover hit points.</p>","chat":"","unidentified":""},"source":"","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":null,"units":"inst"},"target":{"value":null,"units":null,"type":"self"},"range":{"value":null,"long":null,"units":"self"},"uses":{"value":0,"max":0,"per":""},"consume":{"type":"","target":"","amount":null},"ability":null,"actionType":"","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":0,"school":"drk","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":"","prepared":false},"scaling":{"mode":"none","formula":""}},"flags":{},"img":"icons/svg/mystery-man.svg","_id":"FCZWOVHmPXqa2ssG"}
{"_id":"FLBRnexpCEIneqy2","name":"Project","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You lift three piles of debris or small objects from the ground and hurl them. Each pile hits a creature of your choice that you can see within range. The pile deals 1d4+1 force damage to its target. The piles all strike simultaneously and you can direct them to hit one creature or several.</p>\n<p>Force Potency.&nbsp;When you cast this power using a force slot of 2nd level or higher, you lift and throw an additional pile of debris for each slot level above 1st.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":null,"units":"inst"},"target":{"value":3,"units":"","type":"object"},"range":{"value":120,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"other","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[["1d4 + 1","force"]],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":1,"school":"lgt","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":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg"}
{"_id":"FVpFXYowoWwgFuIJ","name":"Shroud of Darkness","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You become heavily obscured to others. Dim light within 10 feet of you becomes darkness, and bright light becomes dim light.</p>\n<p>Until the power ends, you have resistance to force damage. In addition, whenever a creature within 10 feet of you hits you with an attack, it takes 2d8 necrotic damage.</p>","chat":"","unidentified":""},"source":"","activation":{"type":"action","cost":1,"condition":"Have Darkness Power"},"duration":{"value":1,"units":"minute"},"target":{"value":null,"units":"self","type":""},"range":{"value":10,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"util","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[["2d8","necrotic"]],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":4,"school":"drk","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":null,"prepared":true},"scaling":{"mode":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]},"consume":{"type":"","target":"","amount":null}},"flags":{},"img":"systems/sw5e/packs/Icons/Force%20Powers/Shroud%20of%20Darkness.webp"}
{"_id":"FrOqLsVBWUSvka4X","name":"Improved Heal","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>A wave of healing energy washes out from a point of your choice within range. Choose up to six creatures in a 30-foot-radius sphere centered on that point. Each target regains hit points equal to 3d8 + your forcecasting ability modifier. This power has no effect on droids or constructs.</p>\n<p>Force Potency.&nbsp;When you cast this power using a force slot of 6th level or higher, the healing increases by 1d8 for each slot level above 5th.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":null,"units":"inst"},"target":{"value":30,"units":"ft","type":"radius"},"range":{"value":60,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"heal","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[["3d8 + @mod","healing"]],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":5,"school":"lgt","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":"level","formula":"1d8"},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]},"consume":{"type":"","target":"","amount":null}},"flags":{},"img":"systems/sw5e/packs/Icons/Force%20Powers/Improved%20Heal.webp"}
{"_id":"G4d6y321T0yRmNpN","name":"Shocking Shield","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>Lightning courses in a sphere surrounding your body, shedding bright light in a 10-foot radius and dim light for an additional 10 feet. You can use your action to end the power early.</p>\n<p>Whenever a creature within 5 feet of you hits you with a melee attack, it takes 2d8 lightning damage.</p>","chat":"","unidentified":""},"source":"","activation":{"type":"action","cost":1,"condition":"Have Shock Power"},"duration":{"value":10,"units":"minute"},"target":{"value":null,"units":"self","type":""},"range":{"value":null,"long":null,"units":"self"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"other","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[["2d8","lightning"]],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":4,"school":"drk","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":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]},"consume":{"type":"","target":"","amount":null}},"flags":{},"img":"systems/sw5e/packs/Icons/Force%20Powers/Shocking%20Shield.webp"}
{"_id":"G5mI31lc5lBqMT4V","name":"Master Force Immunity","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>A 10-foot-radius faintly shimmering barrier surrounds you. Within the sphere, powers cant be cast and enhanced items become mundane. Until the power ends, the sphere moves with you, centered on you.</p>\n<p>Powers and other enhanced effects are suppressed in the sphere and cant protrude into it. A slot expended to cast a suppressed power is consumed. While an effect is suppressed, it doesnt function, but the time it spends suppressed counts against its duration.</p>\n<p>Targeted Effects.&nbsp;Powers and other enhanced effects that target a creature or an object in the sphere have no effect on that target.</p>\n<p>Enhanced Areas.&nbsp;The area of another power or enhanced effect, such as&nbsp;force storm, cant extend into the sphere. If the sphere overlaps an enhanced area, the part of the area that is covered by the sphere is suppressed.</p>\n<p>Powers.&nbsp;Any active power or other enhanced effect on a creature or an object in the sphere is suppressed while the creature or object is in it.</p>\n<p>Enhanced Items.&nbsp;The properties and powers of enhanced items are suppressed in the sphere. For example, a +1 vibrosword in the sphere functions as an unenhanced vibrosword.</p>\n<p>An enhanced weapons properties and powers are suppressed if it is used against a target in the sphere or wielded by an attacker in the sphere. If an enhanced weapon or a piece of enhanced ammunition fully leaves the sphere (for example, if you fire an enhanced shot or throw an enhanced saberspear at a target outside the sphere), the enhancement of the item ceases to be suppressed as soon as it exits.</p>\n<p>Enhanced Travel.&nbsp;Teleportation fails to work in the sphere, whether the sphere is the destination or the departure point for such enhanced travel. A portal to another location temporarily closes while in the sphere.</p>\n<p>Creatures and Objects.&nbsp;A creature or object summoned or created by powers temporarily winks out of existence in the sphere. Such a creature instantly reappears once the space the creature occupied is no longer within the sphere.</p>\n<p>Tech Override/Sever Force.&nbsp;Powers and enhanced effects such as&nbsp;sever force&nbsp;have no effect on the sphere. Likewise, the spheres created by different scrambling field powers dont nullify each other.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":1,"units":"hour"},"target":{"value":10,"units":"ft","type":"radius"},"range":{"value":null,"long":null,"units":"self"},"uses":{"value":0,"max":0,"per":""},"ability":null,"actionType":"","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":8,"school":"uni","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":null,"prepared":true},"scaling":{"mode":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]},"consume":{"type":"","target":"","amount":null}},"flags":{},"img":"systems/sw5e/packs/Icons/Force%20Powers/Master%20Force%20Immunity.webp"}
{"name":"Phasestrike","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>Until the power ends, your movement doesnt provoke opportunity attacks.</p>\n<p>Once before the power ends, you can give yourself advantage on one weapon attack roll on your turn. That attack deals an extra 1d8 force damage on a hit. Whether you hit or miss, your walking speed increases by 30 feet until the end of that turn.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"bonus","cost":1,"condition":""},"duration":{"value":1,"units":"minute"},"target":{"value":null,"units":null,"type":"self"},"range":{"value":null,"long":null,"units":""},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"other","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[["1d8","force"]],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":1,"school":"uni","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":null,"prepared":true},"scaling":{"mode":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg","_id":"G8UVHP4MXW6Dudky"}
{"_id":"G8UVHP4MXW6Dudky","name":"Phasestrike","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>Until the power ends, your movement doesnt provoke opportunity attacks.</p>\n<p>Once before the power ends, you can give yourself advantage on one weapon attack roll on your turn. That attack deals an extra 1d8 force damage on a hit. Whether you hit or miss, your walking speed increases by 30 feet until the end of that turn.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"bonus","cost":1,"condition":""},"duration":{"value":1,"units":"minute"},"target":{"value":null,"units":null,"type":"self"},"range":{"value":null,"long":null,"units":""},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"other","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[["1d8","force"]],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":1,"school":"uni","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":null,"prepared":true},"scaling":{"mode":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg"}
{"_id":"GBJRx32gU9xU1Q6s","name":"Improved Feedback","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You unleash a blast of psychic energy at a target within range. If the target can hear you (though it need not understand you), it must succeed on an Intelligence saving throw. On a failed save, it takes 3d6 psychic damage and must immediately use its reaction, if available, to move as far as its speed allows away from you. The creature doesnt move into obviously dangerous ground, such as a fire or a pit. On a successful save, the target takes half as much damage and doesnt have to move away. A deafened creature automatically succeeds on the save.</p>\n<p><strong>Force Potency.</strong>&nbsp;When you cast this power using a force slot of 2nd level or higher, the damage increases by 1d6 for each slot level above 1st.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":"Have Feedback Power"},"duration":{"value":null,"units":"inst"},"target":{"value":1,"units":"","type":"creature"},"range":{"value":60,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"save","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[["3d6","psychic"]],"versatile":""},"formula":"","save":{"ability":"int","dc":null,"scaling":"power"},"level":1,"school":"drk","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":"level","formula":"1d6"},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]},"consume":{"type":"","target":"","amount":null}},"flags":{},"img":"systems/sw5e/packs/Icons/Force%20Powers/Improved%20Feedback.webp"}
{"name":"Stasis","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>Choose a creature that you can see within range. The target must succeed on a Wisdom saving throw or be paralyzed for the duration. At the end of each of its turns, the target can make another Wisdom saving throw. On a success, the power ends on the target. This power has no effect on droids or constructs.</p>\n<p>Force Potency.&nbsp;When you cast this power using a force slot of 6th level or higher, you can target an additional creature for each slot level above 5th. The creatures must be within 30 feet of each other when you target them.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":1,"units":"minute"},"target":{"value":1,"units":"","type":"creature"},"range":{"value":90,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"save","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"wis","dc":null,"scaling":"power"},"level":5,"school":"lgt","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":null,"prepared":true},"scaling":{"mode":"level","formula":"1 additional creature"},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg","_id":"H51uSnFY6eyBTXRJ"}
{"_id":"H51uSnFY6eyBTXRJ","name":"Stasis","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>Choose a creature that you can see within range. The target must succeed on a Wisdom saving throw or be paralyzed for the duration. At the end of each of its turns, the target can make another Wisdom saving throw. On a success, the power ends on the target. This power has no effect on droids or constructs.</p>\n<p>Force Potency.&nbsp;When you cast this power using a force slot of 6th level or higher, you can target an additional creature for each slot level above 5th. The creatures must be within 30 feet of each other when you target them.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":1,"units":"minute"},"target":{"value":1,"units":"","type":"creature"},"range":{"value":90,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"save","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"wis","dc":null,"scaling":"power"},"level":5,"school":"lgt","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":null,"prepared":true},"scaling":{"mode":"level","formula":"1 additional creature"},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg"}
{"_id":"HPtgWP83jKSyFWFp","name":"Aura of Purity","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>Purifying energy radiates from you in a 30-foot radius. Until the power ends, the aura moves with you, centered on you. Each nonhostile creature in the aura (including you) cant become diseased, has resistance to poison damage, and has advantage on saving throws against effects that cause any of the following conditions: blinded, charmed, deafened, frightened, paralyzed, poisoned, and stunned.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":10,"units":"minute"},"target":{"value":30,"units":"ft","type":"radius"},"range":{"value":null,"long":null,"units":"self"},"uses":{"value":0,"max":0,"per":""},"ability":null,"actionType":"","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":4,"school":"lgt","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":null,"prepared":true},"scaling":{"mode":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]},"consume":{"type":"","target":"","amount":null}},"flags":{},"img":"systems/sw5e/packs/Icons/Force%20Powers/Aura%20of%20Purity.webp"}
{"name":"Precognition","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>Your mastery of the Force gives you a limited ability to see into the immediate future. For the duration, you cant be surprised and you have advantage on attack rolls, ability checks, and saving throws. Additionally, other creatures have disadvantage on attack rolls against you for the duration.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"minute","cost":1,"condition":""},"duration":{"value":8,"units":"hour"},"target":{"value":null,"units":null,"type":"self"},"range":{"value":null,"long":null,"units":""},"uses":{"value":0,"max":0,"per":""},"ability":null,"actionType":"","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":9,"school":"uni","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":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg","_id":"HqxcYlFOZJZ91a98"}
{"name":"Force Reflect","permission":{"default":0,"XA86Wm4MjngMySbc":3},"type":"power","data":{"description":{"value":"<p>In response to being attacked, you attempt to deflect the attack with the Force. When you use this power, the damage you take from the attack is reduced by 1d10. If you reduce the damage to 0 and the damage is energy, force, ion, kinetic, lightning, necrotic, or sonic, you can reflect the attack at a target within range as part of the same reaction. Make a ranged force attack at a target you can see. The attack has a normal range of 30 feet and a long range of 90 feet. On a hit, the target takes the triggering attacks normal damage.</p>\n<p>Force Potency.&nbsp;When you cast this power using a force slot of 2nd level or higher, the damage reduction increases by 1d10 for each slot level above 1st.</p>","chat":"","unidentified":""},"source":"","activation":{"type":"reaction","cost":1,"condition":"which you take in response to being hit by a ranged attack"},"duration":{"value":null,"units":""},"target":{"value":null,"units":null,"type":"self"},"range":{"value":null,"long":null,"units":""},"uses":{"value":0,"max":0,"per":""},"consume":{"type":"","target":"","amount":null},"ability":"","actionType":"rpak","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"1d10","save":{"ability":"","dc":null,"scaling":"power"},"level":1,"school":"uni","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":"","prepared":false},"scaling":{"mode":"level","formula":"1d10"}},"flags":{},"img":"icons/svg/mystery-man.svg","_id":"Hgn1yHJsMzp5qKr5"}
{"_id":"HqxcYlFOZJZ91a98","name":"Precognition","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>Your mastery of the Force gives you a limited ability to see into the immediate future. For the duration, you cant be surprised and you have advantage on attack rolls, ability checks, and saving throws. Additionally, other creatures have disadvantage on attack rolls against you for the duration.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"minute","cost":1,"condition":""},"duration":{"value":8,"units":"hour"},"target":{"value":null,"units":null,"type":"self"},"range":{"value":null,"long":null,"units":""},"uses":{"value":0,"max":0,"per":""},"ability":null,"actionType":"","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":9,"school":"uni","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":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg"}
{"name":"Force Leap","permission":{"default":0,"XA86Wm4MjngMySbc":3},"type":"power","data":{"description":{"value":"<p>Until the end of your next turn, you can use your forcecasting ability score instead of your Strength score when you jump, and always count as having made a running start before jumping.</p>","chat":"","unidentified":""},"source":"","activation":{"type":"bonus","cost":1,"condition":""},"duration":{"value":1,"units":"round"},"target":{"value":null,"units":null,"type":"self"},"range":{"value":null,"long":null,"units":""},"uses":{"value":null,"max":0,"per":""},"consume":{"type":"","target":"","amount":null},"ability":null,"actionType":"","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":0,"school":"uni","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":"","prepared":false},"scaling":{"mode":"none","formula":""}},"flags":{},"img":"icons/svg/mystery-man.svg","_id":"HvyTel83im9br37p"}
{"_id":"I2EsFwBa7AyIwX1v","name":"Improved Force Camouflage","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>A willing creature you touch becomes invisible until the power ends. Anything the target is wearing or carrying is invisible as long as it is on the targets person.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":1,"units":"minute"},"target":{"value":1,"units":"","type":"creature"},"range":{"value":null,"long":null,"units":"touch"},"uses":{"value":0,"max":0,"per":""},"ability":null,"actionType":"","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":4,"school":"uni","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":null,"prepared":true},"scaling":{"mode":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]},"consume":{"type":"","target":"","amount":null}},"flags":{},"img":"icons/svg/mystery-man.svg"}
{"_id":"IXAl1U65YuhNBN4Q","name":"Psychic Charge","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>As part of the action used to cast this power, you must make a melee attack with a weapon against one creature within your weapons reach, otherwise the power fails. On a hit, the target suffers the attacks normal effects, and its mouth is covered by a violet veil until the start of your next turn. If the target willingly speaks before then, it immediately takes 1d8 psychic damage, and the power ends.</p>\n<p>This powers damage increases when you reach higher levels. At 5th level, the melee attack deals an extra 1d8 psychic damage to the target, and the damage the target takes for speaking increases to 2d8. Both damage rolls increase by 1d8 at 11th level and 17th level.</p>","chat":"","unidentified":""},"source":"","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":1,"units":"round"},"target":{"value":null,"units":"","type":""},"range":{"value":null,"long":null,"units":""},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"mwak","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[["1d8","psychic"]],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":0,"school":"drk","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":"atwill","formula":"1d8"},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]},"consume":{"type":"","target":"","amount":null}},"flags":{},"img":"systems/sw5e/packs/Icons/Force%20Powers/Psychic%20Charge.webp"}
{"_id":"InyoZTjdAijUms7e","name":"Death Field","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You draw the life force from every creature in a 30-foot cube centered on a point you choose within range. Each creature in that area must make a Constitution saving throw. A creature takes 10d8 necrotic damage on a failed save, or half as much damage on a successful one. If you reduce a hostile creature to 0, you gain temporary hit points equal to half the damage dealt. This power has no effect on droids or constructs.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":"Have Siphon Life Power"},"duration":{"value":null,"units":"inst"},"target":{"value":30,"units":"ft","type":"cube"},"range":{"value":90,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"save","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[["10d8","necrotic"]],"versatile":""},"formula":"","save":{"ability":"con","dc":null,"scaling":"power"},"level":8,"school":"drk","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":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]},"consume":{"type":"","target":"","amount":null}},"flags":{},"img":"systems/sw5e/packs/Icons/Force%20Powers/Death%20Field.webp"}
{"_id":"It12G2wROx7ojgwu","name":"Force Repulse","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You release an omnidirectional telekinetic burst. Each creature within 20 feet must make a Dexterity saving throw. On a failed save, a creature takes 8d6 force damage and is pushed back 5 feet. On a successful save, a creature takes half damage and isnt pushed.</p>\n<p>All small objects that are not worn or carried are also pushed 5 feet back.</p>\n<p>Force Potency.&nbsp;When you cast this power using a force slot of 4th level or higher, the damage increases by 1d6 for each slot level above 3rd.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":null,"units":"inst"},"target":{"value":20,"units":"ft","type":"radius"},"range":{"value":null,"long":null,"units":"self"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"save","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[["8d6","force"]],"versatile":""},"formula":"","save":{"ability":"dex","dc":null,"scaling":"power"},"level":3,"school":"uni","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":"level","formula":"1d6"},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]},"consume":{"type":"","target":"","amount":null}},"flags":{},"img":"icons/svg/mystery-man.svg"}
{"_id":"JBd2XatPjBGxjimU","name":"Dominate Beast","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>A beast you can see must succeed on a Wisdom save or be charmed. If you or your companions are fighting it, it has advantage on this saving throw.</p>\n<p>While its charmed, you have a telepathic link to it if youre on the same planet. You can use this link to issue commands while you are conscious, no action required, which it does its best to obey. You can specify a simple and general course of action. If it completes the order and doesnt receive further orders, it focuses on defending itself.</p>\n<p>You can use your action to take total control of the target. Until the end of your next turn, the beast takes only the actions you decide and nothing you dont allow it to. You can also have the beast use a reaction, but this takes your reaction as well.</p>\n<p>If the beast takes damage, it makes another Wisdom save. On a success, the power ends.</p>\n<p><strong>Force Potency.</strong>&nbsp;When you cast this power using a 5th-level force slot, the duration is up to 10 minutes. At a 6th-level slot, the duration is up to 1 hour. At a slot of 7th or higher, the duration is up to 8 hours.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":1,"units":"minute"},"target":{"value":1,"units":"","type":"creature"},"range":{"value":60,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"save","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"wis","dc":null,"scaling":"power"},"level":4,"school":"drk","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":null,"prepared":true},"scaling":{"mode":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]},"consume":{"type":"","target":"","amount":null}},"flags":{},"img":"systems/sw5e/packs/Icons/Force%20Powers/Dominate%20Beast.webp"}
{"name":"Turbulence","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>Choose one creature, or choose two creatures that are within 5 feet of each other, within range. A target must succeed on a Dexterity saving throw or take 1d6 force damage.</p>\n<p>This powers damage increases by 1d6 when you reach 5th, 11th, and 17th level.</p>","chat":"","unidentified":""},"source":"","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":null,"units":"inst"},"target":{"value":1,"units":"","type":"creature"},"range":{"value":120,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"save","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[["1d6",""]],"versatile":""},"formula":"","save":{"ability":"dex","dc":null,"scaling":"power"},"level":0,"school":"lgt","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":"atwill","formula":"1d6"},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg","_id":"Jgw6KzAgqpQbry2K"}
{"_id":"Jgw6KzAgqpQbry2K","name":"Turbulence","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>Choose one creature, or choose two creatures that are within 5 feet of each other, within range. A target must succeed on a Dexterity saving throw or take 1d6 force damage.</p>\n<p>This powers damage increases by 1d6 when you reach 5th, 11th, and 17th level.</p>","chat":"","unidentified":""},"source":"","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":null,"units":"inst"},"target":{"value":1,"units":"","type":"creature"},"range":{"value":120,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"save","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[["1d6",""]],"versatile":""},"formula":"","save":{"ability":"dex","dc":null,"scaling":"power"},"level":0,"school":"lgt","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":"atwill","formula":"1d6"},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg"}
{"_id":"Jnzj1Relpil0dKs9","name":"Hex","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You curse an opponent within range. Until the power ends, you deal an extra 1d6 necrotic damage to the target whenever you hit it with an attack. Also, choose one ability when you cast the power. The target has disadvantage on ability checks made with the chosen ability.</p>\n<p>If the target drops to 0 hit points before this power ends, you can use a bonus action on a subsequent turn of yours to curse a new creature.</p>\n<p><strong>Force Potency.&nbsp;</strong>When you cast this power using a force slot of 3rd or 4th level, you can maintain your concentration on the power for up to 8 hours. When you use a force slot of 5th level or higher, you can maintain your concentration on the power for up to 24 hours.</p>","chat":"","unidentified":""},"source":"","activation":{"type":"bonus","cost":1,"condition":""},"duration":{"value":1,"units":"hour"},"target":{"value":1,"units":"","type":"enemy"},"range":{"value":90,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"other","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[["1d6","necrotic"]],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":1,"school":"drk","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":null,"prepared":true},"scaling":{"mode":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]},"consume":{"type":"","target":"","amount":null}},"flags":{},"img":"systems/sw5e/packs/Icons/Force%20Powers/Hex.webp"}
{"_id":"K0AsOF4VRvKvftYD","name":"Greater Heal","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>Choose a creature that you can see within range. A surge of positive energy washes through the creature, causing it to regain 70 hit points. This power also ends blindness, deafness, and any diseases affecting the target. This power has no effect on droids or constructs.</p>\n<p>Force Potency.&nbsp;When you cast this power using a force slot of 7th level or higher, the healing increases by 10 for each slot level above 6th.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":null,"units":""},"target":{"value":1,"units":"","type":"creature"},"range":{"value":60,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"heal","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[["70","healing"]],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":6,"school":"lgt","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":"level","formula":"10"},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]},"consume":{"type":"","target":"","amount":null}},"flags":{},"img":"systems/sw5e/packs/Icons/Force%20Powers/Greater%20Heal.webp"}
{"_id":"KCVdYOoxu0kfkSCn","name":"Affliction","permission":{"default":0,"9BhUyjgxIxogl2ot":3},"type":"power","data":{"description":{"value":"<p>Choose a creature that you can see within range. That creature must make a Constitution saving throw. On a failed save, the targets speed is halved, it takes a -2 penalty to AC and Dexterity saving throws, and it cant use reactions. On its turn, it can use either an action or a bonus action, not both. Regardless of the creatures abilities or items, it cant make more than one melee or ranged attack during its turn.</p>\n<p>If the creature attempts to cast a power with a casting time of 1 action, roll a d20. On an 11 or higher, the power doesnt take effect until the creatures next turn, and the creature must use its action on that turn to complete the power. If it cant, the power is wasted.</p>\n<p>The creatures makes another Constitution saving throw at the end of its turn. On a successful save, the effect ends.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":1,"units":"minute"},"target":{"value":1,"units":"","type":"creature"},"range":{"value":30,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"save","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"con","dc":null,"scaling":"power"},"level":2,"school":"drk","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":"","prepared":false},"scaling":{"mode":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"systems/sw5e/packs/Icons/Force%20Powers/Affliction.webp"}
@ -68,19 +110,33 @@
{"_id":"KJ7bSmk9W4AImGRm","name":"Disable Droid","permission":{"default":0,"9BhUyjgxIxogl2ot":3},"type":"power","data":{"description":{"value":"<p>Choose a point that you can see within range. Each droid or construct must succeed on a Constitution saving throw or be paralyzed for the duration. At the beginning of each of its turns, an affected creature takes energy damage equal to your forcecasting ability modifier and then repeats this saving throw. On a success, the power ends on the target.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":null,"units":"minute"},"target":{"value":15,"units":"ft","type":"cube"},"range":{"value":90,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"save","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"con","dc":null,"scaling":"power"},"level":4,"school":"lgt","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":"","prepared":false},"scaling":{"mode":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"systems/sw5e/packs/Icons/Force%20Powers/Disable%20Droid.webp"}
{"name":"Force Project","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You create an illusory copy of yourself that lasts for the duration. The copy can appear at any location that you have seen before, regardless of intervening obstacles. The illusion looks and sounds like you but is intangible. If the illusion takes any damage, it disappears, and the power ends.</p>\n<p>You can use your action to move this illusion up to twice your speed, and make it gesture, speak, and behave in whatever way you choose. It mimics your mannerisms perfectly.</p>\n<p>You can see through its eyes and hear through its ears as if you were in its space. On your turn as a bonus action, you can switch from using its senses to using your own, or back again. While you are using its senses, you are blinded and deafened in regard to your own surroundings.</p>\n<p>Physical interaction with the image reveals it to be an illusion, because things can pass through it. A creature that uses its action to examine the image can determine that it is an illusion with a successful Intelligence (Investigation) check against your force save DC. If a creature discerns the illusion for what it is, the creature can see through the image, and any noise it makes sounds hollow to the creature.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":1,"units":"day"},"target":{"value":null,"units":null,"type":"self"},"range":{"value":null,"long":null,"units":""},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"abil","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"int","dc":null,"scaling":"power"},"level":7,"school":"uni","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":null,"prepared":true},"scaling":{"mode":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg","_id":"KVY80cxeW955U6mG"}
{"name":"Slow Descent","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>Choose up to five falling creatures within range. A falling creatures rate of descent slows to 60 feet per round until the power ends. If the creature lands before the power ends, it takes no falling damage and can land on its feet, and the power ends for that creature.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"reaction","cost":1,"condition":"which you take when you or a creature within 60 feet of you falls"},"duration":{"value":1,"units":"minute"},"target":{"value":5,"units":"","type":"creature"},"range":{"value":60,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":null,"actionType":"","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":1,"school":"uni","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":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg","_id":"L3P0wzW7j61XpKZc"}
{"_id":"KVY80cxeW955U6mG","name":"Force Project","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You create an illusory copy of yourself that lasts for the duration. The copy can appear at any location that you have seen before, regardless of intervening obstacles. The illusion looks and sounds like you but is intangible. If the illusion takes any damage, it disappears, and the power ends.</p>\n<p>You can use your action to move this illusion up to twice your speed, and make it gesture, speak, and behave in whatever way you choose. It mimics your mannerisms perfectly.</p>\n<p>You can see through its eyes and hear through its ears as if you were in its space. On your turn as a bonus action, you can switch from using its senses to using your own, or back again. While you are using its senses, you are blinded and deafened in regard to your own surroundings.</p>\n<p>Physical interaction with the image reveals it to be an illusion, because things can pass through it. A creature that uses its action to examine the image can determine that it is an illusion with a successful Intelligence (Investigation) check against your force save DC. If a creature discerns the illusion for what it is, the creature can see through the image, and any noise it makes sounds hollow to the creature.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":1,"units":"day"},"target":{"value":null,"units":null,"type":"self"},"range":{"value":null,"long":null,"units":""},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"abil","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"int","dc":null,"scaling":"power"},"level":7,"school":"uni","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":null,"prepared":true},"scaling":{"mode":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg"}
{"name":"Improved Saber Throw","permission":{"default":0,"XA86Wm4MjngMySbc":3},"type":"power","data":{"description":{"value":"<p>As a part of the action used to cast this power, you must make a ranged force attack with a lightweapon or vibroweapon against one target within the powers range, otherwise the power fails.</p>\n<p>On a hit, the target takes 2d8 damage of the same type as the weapons damage and must make a</p>\n<p>Constitution saving throw. On a failed save, the target gains 1 slowed level until the end of its next turn and the weapon then immediately returns to your hand. The next attack made against the target that hits it before the end of the targets next turn deals an additional 1d10 force damage. On a successful save, the target takes half as much additional force damage on the next attack that hits it, and suffers no additional effect.</p>\n<p>Force Potency.&nbsp;When you cast this power using a force slot of 3rd level or higher, the force damage increases by 1d10 for each slot level above 2nd.</p>","chat":"","unidentified":""},"source":"","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":null,"units":"inst"},"target":{"value":1,"units":"","type":"creature"},"range":{"value":60,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"consume":{"type":"","target":"","amount":null},"ability":"","actionType":"rpak","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[["2d8",""]],"versatile":""},"formula":"","save":{"ability":"con","dc":null,"scaling":"power"},"level":2,"school":"uni","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":"","prepared":false},"scaling":{"mode":"level","formula":"1d10"}},"flags":{},"img":"icons/svg/mystery-man.svg","_id":"KspYzz0UkKQzOAnw"}
{"_id":"L3P0wzW7j61XpKZc","name":"Slow Descent","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>Choose up to five falling creatures within range. A falling creatures rate of descent slows to 60 feet per round until the power ends. If the creature lands before the power ends, it takes no falling damage and can land on its feet, and the power ends for that creature.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"reaction","cost":1,"condition":"which you take when you or a creature within 60 feet of you falls"},"duration":{"value":1,"units":"minute"},"target":{"value":5,"units":"","type":"creature"},"range":{"value":60,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":null,"actionType":"","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":1,"school":"uni","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":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg"}
{"_id":"L8CJ1QEXfKztMyCX","name":"Enfeeble","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>Dark energy courses from your hand at a creature within range. The target must succeed on a Wisdom saving throw. If it is missing any hit points, it takes 1d12 necrotic damage. Otherwise, it takes 1d8.</p>\n<p>The powers damage increases by one die when you reach 5th, 11th, and 17th level.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":null,"units":"inst"},"target":{"value":1,"units":"","type":"creature"},"range":{"value":60,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"save","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[["1d12","necrotic"]],"versatile":""},"formula":"1d8","save":{"ability":"wis","dc":null,"scaling":"power"},"level":0,"school":"drk","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":"atwill","formula":"1d12"},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]},"consume":{"type":"","target":"","amount":null}},"flags":{},"img":"systems/sw5e/packs/Icons/Force%20Powers/Enfeeble.webp"}
{"name":"Heroism","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>A willing creature you touch is imbued with bravery. Until the power ends, the creature is immune to being frightened and gains temporary hit points equal to your forcecasting ability modifier at the start of each of its turns. When the power ends, the target loses any remaining temporary hit points from this power.</p>\n<p>Force Potency.&nbsp;When you cast this power using a force slot of 2nd level or higher, you can target one additional creature for each slot level above 1st.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":1,"units":"minute"},"target":{"value":1,"units":"","type":"creature"},"range":{"value":null,"long":null,"units":"touch"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"heal","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[["@mod","temphp"]],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":1,"school":"lgt","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":null,"prepared":true},"scaling":{"mode":"level","formula":"1 additional creature"},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg","_id":"LdtNnD37NnOsg8oF"}
{"name":"Sever Force","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You attempt to interrupt a creature in the process of casting a force power. If the creature is casting a power of 3rd level or lower, its power fails and has no effect. If it is casting a power of 4th level or higher, make an ability check using your forcecasting ability. The DC equals 10 + the powers level. On a success, the creatures power fails and has no effect.</p>\n<p>Force Potency.&nbsp;When you cast this power using a force slot of 4th level or higher, the interrupted power has no effect if its level is less than or equal to the level of the force slot you used.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"reaction","cost":1,"condition":""},"duration":{"value":null,"units":"inst"},"target":{"value":1,"units":"","type":"creature"},"range":{"value":60,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"abil","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":3,"school":"uni","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":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg","_id":"LhMmIUjsFrytp0wc"}
{"_id":"LWQ6tKJckB4JYbbJ","name":"Battle Insight","permission":{"default":0,"XA86Wm4MjngMySbc":3},"type":"power","data":{"description":{"value":"<p>You center your focus on a target within range. Through the Force, you gain a brief insight into the targets defenses. On your next turn, you gain advantage on your first attack roll against the target, provided that this power hasnt ended.</p>\n<p>This power benefits additional attacks at higher levels: two attacks at 5th level, three attacks at 11th level, and four attacks at 17th level.</p>","chat":"","unidentified":""},"source":"","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":1,"units":"round"},"target":{"value":1,"units":"","type":"creature"},"range":{"value":30,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"consume":{"type":"","target":"","amount":null},"ability":null,"actionType":"","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":0,"school":"uni","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":true},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":"","prepared":false},"scaling":{"mode":"none","formula":""}},"flags":{"dynamiceffects":{"equipActive":false,"alwaysActive":false,"effects":[]}},"img":"icons/svg/mystery-man.svg"}
{"name":"Sustained Lightning","permission":{"default":0,"XA86Wm4MjngMySbc":3},"type":"power","data":{"description":{"value":"<p>You lash out against a creature within range with continual jolts of Force lightning. Make a ranged force attack against that creature. On a hit, the target takes 1d12 lightning damage, and on each of your turns for the duration, you can use your action to deal 1d12 lightning damage to the target automatically. The power ends if you use your action to do anything else. The power also ends if the target is ever outside the powers range or if it has total cover from you.</p>\n<p>Force Potency.&nbsp;When you cast this power using a force slot of 2nd level or higher, the initial damage increases by 1d12 for each slot level above 1st.</p>","chat":"","unidentified":""},"source":"","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":1,"units":"minute"},"target":{"value":1,"units":"","type":"cone"},"range":{"value":30,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"consume":{"type":"","target":"","amount":null},"ability":"","actionType":"rpak","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[["1d12","lightning"]],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":1,"school":"drk","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":true},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":"","prepared":false},"scaling":{"mode":"level","formula":"1d12"}},"flags":{},"img":"icons/svg/mystery-man.svg","_id":"LbBZx7srgI6xgLZy"}
{"_id":"LdtNnD37NnOsg8oF","name":"Heroism","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>A willing creature you touch is imbued with bravery. Until the power ends, the creature is immune to being frightened and gains temporary hit points equal to your forcecasting ability modifier at the start of each of its turns. When the power ends, the target loses any remaining temporary hit points from this power.</p>\n<p>Force Potency.&nbsp;When you cast this power using a force slot of 2nd level or higher, you can target one additional creature for each slot level above 1st.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":1,"units":"minute"},"target":{"value":1,"units":"","type":"creature"},"range":{"value":null,"long":null,"units":"touch"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"heal","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[["@mod","temphp"]],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":1,"school":"lgt","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":null,"prepared":true},"scaling":{"mode":"level","formula":"1 additional creature"},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg"}
{"_id":"LhMmIUjsFrytp0wc","name":"Sever Force","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You attempt to interrupt a creature in the process of casting a force power. If the creature is casting a power of 3rd level or lower, its power fails and has no effect. If it is casting a power of 4th level or higher, make an ability check using your forcecasting ability. The DC equals 10 + the powers level. On a success, the creatures power fails and has no effect.</p>\n<p>Force Potency.&nbsp;When you cast this power using a force slot of 4th level or higher, the interrupted power has no effect if its level is less than or equal to the level of the force slot you used.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"reaction","cost":1,"condition":""},"duration":{"value":null,"units":"inst"},"target":{"value":1,"units":"","type":"creature"},"range":{"value":60,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"abil","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":3,"school":"uni","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":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg"}
{"name":"Master Saber Throw","permission":{"default":0,"XA86Wm4MjngMySbc":3},"type":"power","data":{"description":{"value":"<p>When you cast this power, you must be wielding at least one lightweapon or vibroweapon, otherwise the power fails. When you cast this power, you can throw two weapons, striking creatures in two lines originating from yourself, both 90 feet long and 5 feet wide, or you can throw one weapon in a 90-foot long, 5-foot wide line of your choice originating from yourself and change its direction to move in a second identical line of your choice within range. Each creature in a line must make a Dexterity saving throw. A creature takes 5d8 damage of the same type as the weapons damage and 5d8 force damage on a failed save, or half as much damage on a successful one. A creature in the area of more than one line is affected only once. The weapons then immediately return to your hand.</p>\n<p>Force Potency.&nbsp;When you cast this power using a force slot of 8th level or higher, the weapon damage and force damage each increase by 1d8 for each slot level above 7th.</p>","chat":"","unidentified":""},"source":"","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":null,"units":"inst"},"target":{"value":90,"units":"ft","type":"line"},"range":{"value":null,"long":null,"units":"self"},"uses":{"value":0,"max":0,"per":""},"consume":{"type":"","target":"","amount":null},"ability":"","actionType":"save","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[["5d8",""]],"versatile":"5d8"},"formula":"","save":{"ability":"dex","dc":null,"scaling":"power"},"level":7,"school":"uni","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":"","prepared":false},"scaling":{"mode":"level","formula":"1d8"}},"flags":{},"img":"icons/svg/mystery-man.svg","_id":"M9Zs6JU0u3HlwrTv"}
{"_id":"MEcTbI8Y4xotnJwl","name":"Force Link","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You create a telepathic link between yourself and a willing creature with which you are familiar. Until the power ends, you and the target can instantaneously share words, images, sounds, and other sensory messages with one another through the link, and the target recognizes you as the creature it is communicating with. The power enables a creature with an Intelligence score of at least 1 to understand the meaning of your words and take in the scope of any sensory messages you send to it.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":24,"units":"hour"},"target":{"value":1,"units":"","type":"creature"},"range":{"value":null,"long":null,"units":"any"},"uses":{"value":0,"max":0,"per":""},"ability":null,"actionType":"","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":8,"school":"uni","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":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]},"consume":{"type":"","target":"","amount":null}},"flags":{},"img":"icons/svg/mystery-man.svg"}
{"name":"Force Blur","permission":{"default":0,"XA86Wm4MjngMySbc":3},"type":"power","data":{"description":{"value":"<p>You use the Force to weave an illusion that blurs your form, shifting and wavering to all who can see you. For the duration, any creature has disadvantage on attack rolls against you. An attacker is immune to this effect if it doesnt rely on sight, as with blindsight, or can see through illusions, as with truesight.</p>","chat":"","unidentified":""},"source":"","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":1,"units":"minute"},"target":{"value":null,"units":null,"type":"self"},"range":{"value":null,"long":null,"units":""},"uses":{"value":0,"max":0,"per":""},"consume":{"type":"","target":"","amount":null},"ability":null,"actionType":"","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":2,"school":"uni","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":true},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":"","prepared":false},"scaling":{"mode":"none","formula":""}},"flags":{},"img":"icons/svg/mystery-man.svg","_id":"MTn9NTw4W9aAk7lK"}
{"name":"Spirit Blade","permission":{"default":0,"XA86Wm4MjngMySbc":3},"type":"power","data":{"description":{"value":"<p>You conjure a blade of spirit energy and attempt to strike one creature. Make a melee force attack against the target. If the attack hits, the creature takes 1d10 necrotic damage.</p>\n<p>This power can make multiple attacks at higher levels: two attacks at 5th level, three attacks at 11th level, and four attacks at 17th level. Each attack can target the same creature or different ones. Make a separate attack roll for each target.</p>","chat":"","unidentified":""},"source":"","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":null,"units":"inst"},"target":{"value":1,"units":"","type":"cone"},"range":{"value":null,"long":null,"units":"self"},"uses":{"value":0,"max":0,"per":""},"consume":{"type":"","target":"","amount":null},"ability":"","actionType":"mpak","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[["1d10","necrotic"]],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":0,"school":"uni","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":"","prepared":false},"scaling":{"mode":"none","formula":""}},"flags":{},"img":"icons/svg/mystery-man.svg","_id":"Mbqmc4SNrOZerrH5"}
{"_id":"MkDRzlCkK2hDdtvi","name":"Lightning Charge","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You imbue your weapon with debilitating force lightning. As part of the action used to cast this power, you must make a melee attack with a weapon against one creature within your weapons reach, otherwise the power fails. On a hit, the target suffers the attacks normal effects, and the lightning leaps from the target to a different creature of your choice that you can see within 5 feet of it. The second creature takes lightning damage equal to your forcecasting ability modifier.</p>\n<p>This powers damage increases when you reach higher levels. At 5th level, the melee attack deals an extra 1d8 lightning damage to the target, and the lightning damage to the second creature increases to 1d8 + your forcecasting ability modifier. Both damage rolls increase by 1d8 at 11th level and 17th level.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":"Make a Melee Weapon Attack"},"duration":{"value":1,"units":"round"},"target":{"value":1,"units":"","type":"creature"},"range":{"value":null,"long":null,"units":""},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"mwak","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[["0d8","lightning"]],"versatile":""},"formula":"@mod","save":{"ability":"","dc":null,"scaling":"power"},"level":0,"school":"drk","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":null,"prepared":true},"scaling":{"mode":"atwill","formula":"1d8"},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]},"consume":{"type":"","target":"","amount":null}},"flags":{},"img":"systems/sw5e/packs/Icons/Force%20Powers/Lightning%20Charge.webp"}
{"_id":"Nefsi9cHQFG04LBx","name":"Crush","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You make a crushing gesture at a creature within range. The target must make a Constitution saving throw. On a failed save target takes 10d8 force damage and is paralyzed until the end of your next turn. On a successful save, the target takes half as much damage and is not paralyzed.</p>\n<p>You can use a bonus action while the target is paralyzed to move the target up to 10 feet in any direction.</p>\n<p><strong>Force Potency.</strong>&nbsp;When you cast this power using a force slot of 7th level or higher, the damage increases by 1d8 for each slot level above 6th.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":"Have Choke Power"},"duration":{"value":null,"units":"inst"},"target":{"value":1,"units":"","type":"creature"},"range":{"value":60,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"save","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[["10d8","force"]],"versatile":""},"formula":"","save":{"ability":"con","dc":null,"scaling":"power"},"level":6,"school":"drk","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":"level","formula":"1d8"},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]},"consume":{"type":"","target":"","amount":null}},"flags":{},"img":"systems/sw5e/packs/Icons/Force%20Powers/Crush.webp"}
{"_id":"NrMpYXddHnoPKHT2","name":"Force Lightning Cone","permission":{"default":0,"9BhUyjgxIxogl2ot":3},"type":"power","data":{"description":{"value":"<p>Lightning arcs from your hands. Each creature in a 60-foot cone must make a Dexterity saving throw. A creatures takes 12d6 lightning damage on a failed save, or half as much on a successful one.</p>\n<p>Force Potency.&nbsp;When you cast this power using a force slot of 8th level or higher, the damage increases by 2d6 for each slot level above 7th.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":null,"units":"inst"},"target":{"value":60,"units":"ft","type":"cone"},"range":{"value":null,"long":null,"units":"self"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"save","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[["12d6","lightning"]],"versatile":""},"formula":"","save":{"ability":"dex","dc":null,"scaling":"power"},"level":7,"school":"drk","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":"","prepared":false},"scaling":{"mode":"none","formula":"2d6"},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]},"consume":{"type":"","target":"","amount":null}},"flags":{},"img":"systems/sw5e/packs/Icons/Force%20Powers/Force%20Lightning%20Cone.webp"}
{"name":"Sense Emotion","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You attune your senses to pick up the emotions of others for the duration. When you cast the power, and as your action on each turn until the power ends, you can focus your senses on one humanoid you can see within 30 feet of you. You instantly learn the targets prevailing emotion, whether its love, anger, pain, fear, calm, or something else. If the target isnt actually humanoid or it is immune to being charmed, you sense that it is calm.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":10,"units":"minute"},"target":{"value":null,"units":"","type":"creature"},"range":{"value":null,"long":null,"units":"self"},"uses":{"value":0,"max":0,"per":""},"ability":null,"actionType":"","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":1,"school":"uni","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":null,"prepared":true},"scaling":{"mode":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg","_id":"Ns34rjyKzqeydYBH"}
{"name":"Sense Force","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>For the duration, you sense the use of the Force, or its presence in an inanimate object within 30 feet of you. If you sense the Force in this way, you can use your action to determine the direction from which it originates and, if its in line of sight, you see a faint aura around the person or object from which the Force emanates.</p>\n<p>Force Potency.&nbsp;When you cast this power using a 3rd-level force slot, the range increases to 60 feet. When you use a 5th-level force slot, the range increases to 500 feet. When you use a 7th-level force slot, the range increases to 1 mile. When you use a 9th-level force slot, the range increases to 10 miles.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":10,"units":"minute"},"target":{"value":null,"units":null,"type":"self"},"range":{"value":30,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":null,"actionType":"","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":1,"school":"uni","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":null,"prepared":true},"scaling":{"mode":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg","_id":"O5J8TTpTW7eHLDgG"}
{"name":"Armor of Abeloth","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>A protective force surrounds you, manifesting as shimmering light that covers you and your gear. You gain 5 temporary hit points for the duration. If a creature hits you with a melee attack while you have these hit points, the creature takes 5 psychic damage.</p>\n<p>Force Potency.&nbsp;When you cast this power using a force slot of 2nd level or higher, both the temporary hit points and the psychic damage increase by 5 for each slot.</p>","chat":"","unidentified":""},"source":"","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":1,"units":"hour"},"target":{"value":null,"units":null,"type":"self"},"range":{"value":null,"long":null,"units":""},"uses":{"value":0,"max":0,"per":""},"consume":{"type":"","target":"","amount":null},"ability":"","actionType":"","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":1,"school":"drk","components":{"value":"","concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"scaling":{"mode":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"systems/sw5e/packs/Icons/Force%20Powers/Armor%20of%20Abeloth.webp","_id":"OGLh7pBroWR6te2k"}
{"_id":"Ns34rjyKzqeydYBH","name":"Sense Emotion","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You attune your senses to pick up the emotions of others for the duration. When you cast the power, and as your action on each turn until the power ends, you can focus your senses on one humanoid you can see within 30 feet of you. You instantly learn the targets prevailing emotion, whether its love, anger, pain, fear, calm, or something else. If the target isnt actually humanoid or it is immune to being charmed, you sense that it is calm.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":10,"units":"minute"},"target":{"value":null,"units":"","type":"creature"},"range":{"value":null,"long":null,"units":"self"},"uses":{"value":0,"max":0,"per":""},"ability":null,"actionType":"","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":1,"school":"uni","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":null,"prepared":true},"scaling":{"mode":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg"}
{"_id":"O5J8TTpTW7eHLDgG","name":"Sense Force","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>For the duration, you sense the use of the Force, or its presence in an inanimate object within 30 feet of you. If you sense the Force in this way, you can use your action to determine the direction from which it originates and, if its in line of sight, you see a faint aura around the person or object from which the Force emanates.</p>\n<p>Force Potency.&nbsp;When you cast this power using a 3rd-level force slot, the range increases to 60 feet. When you use a 5th-level force slot, the range increases to 500 feet. When you use a 7th-level force slot, the range increases to 1 mile. When you use a 9th-level force slot, the range increases to 10 miles.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":10,"units":"minute"},"target":{"value":null,"units":null,"type":"self"},"range":{"value":30,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":null,"actionType":"","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":1,"school":"uni","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":null,"prepared":true},"scaling":{"mode":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg"}
{"_id":"OGLh7pBroWR6te2k","name":"Armor of Abeloth","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>A protective force surrounds you, manifesting as shimmering light that covers you and your gear. You gain 5 temporary hit points for the duration. If a creature hits you with a melee attack while you have these hit points, the creature takes 5 psychic damage.</p>\n<p>Force Potency.&nbsp;When you cast this power using a force slot of 2nd level or higher, both the temporary hit points and the psychic damage increase by 5 for each slot.</p>","chat":"","unidentified":""},"source":"","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":1,"units":"hour"},"target":{"value":null,"units":null,"type":"self"},"range":{"value":null,"long":null,"units":""},"uses":{"value":0,"max":0,"per":""},"consume":{"type":"","target":"","amount":null},"ability":"","actionType":"","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":1,"school":"drk","components":{"value":"","concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"scaling":{"mode":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"systems/sw5e/packs/Icons/Force%20Powers/Armor%20of%20Abeloth.webp"}
{"_id":"OYQAqS6rjVy6o5Oa","name":"Kill","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You compel one creature you can see within range to die instantly. If the creature you choose has 100 hit points or fewer, it dies. Otherwise, the power has no effect.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":"Have Ruin Power"},"duration":{"value":null,"units":"inst"},"target":{"value":1,"units":"","type":"creature"},"range":{"value":60,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"other","attackBonus":0,"chatFlavor":"Have over 100 HP left or Die!","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":9,"school":"drk","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":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]},"consume":{"type":"","target":"","amount":null}},"flags":{},"img":"systems/sw5e/packs/Icons/Force%20Powers/Kill.webp"}
{"_id":"Oxb3dpusa4SmIKQd","name":"Improved Battle Meditation","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You exude an aura out to 15 feet that boosts the morale and overall battle prowess you and your allies while simultaneously reducing the oppositions combat-effectiveness by eroding their will to fight.</p>\n<p>Whenever you or a friendly creature within your meditation makes an attack roll or a saving throw, they can roll a d6 and add the number rolled to the attack roll or saving throw.</p>\n<p>Whenever a hostile creature enters your meditation or starts its turn there, it must make a Charisma saving throw. On a failed save, it must roll a d6 and subtract the number rolled from each attack roll or saving throw it makes before the end of your next turn. On a successful save, it is immune to this power for 1 day.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":1,"units":"minute"},"target":{"value":15,"units":"ft","type":"radius"},"range":{"value":null,"long":null,"units":"self"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"other","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"1d6","save":{"ability":"","dc":null,"scaling":"power"},"level":5,"school":"uni","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":null,"prepared":true},"scaling":{"mode":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]},"consume":{"type":"","target":"","amount":null}},"flags":{},"img":"systems/sw5e/packs/Icons/Force%20Powers/Improved%20Battle%20Meditation.webp"}
{"name":"Force Sight","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You shift your vision to see through use of the Force; colors fade and inanimate objects appear as shades of gray. You gain the following benefits.</p>\n<ul>\n<li>Living things glow with the power of the Force. Those with an affinity for the light side glow blue, those with an affinity for the dark side glow red, and those with no attunement to either side of the Force glow yellow. How bright they glow is determined by how strong their connection to the Force is.</li>\n<li>You gain blindsight to 30 feet.</li>\n<li>You have advantage on Wisdom (Perception) checks that rely on sight against living targets within 30 feet.</li>\n</ul>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":10,"units":"minute"},"target":{"value":null,"units":null,"type":"self"},"range":{"value":null,"long":null,"units":""},"uses":{"value":0,"max":0,"per":""},"ability":null,"actionType":"","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":2,"school":"uni","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":null,"prepared":true},"scaling":{"mode":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg","_id":"PUHY0RrLsi4tAnZx"}
{"_id":"PUHY0RrLsi4tAnZx","name":"Force Sight","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You shift your vision to see through use of the Force; colors fade and inanimate objects appear as shades of gray. You gain the following benefits.</p>\n<ul>\n<li>Living things glow with the power of the Force. Those with an affinity for the light side glow blue, those with an affinity for the dark side glow red, and those with no attunement to either side of the Force glow yellow. How bright they glow is determined by how strong their connection to the Force is.</li>\n<li>You gain blindsight to 30 feet.</li>\n<li>You have advantage on Wisdom (Perception) checks that rely on sight against living targets within 30 feet.</li>\n</ul>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":10,"units":"minute"},"target":{"value":null,"units":null,"type":"self"},"range":{"value":null,"long":null,"units":""},"uses":{"value":0,"max":0,"per":""},"ability":null,"actionType":"","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":2,"school":"uni","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":null,"prepared":true},"scaling":{"mode":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg"}
{"_id":"Pf4e5uRdTd4VuUjU","name":"Feedback","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You unleash a burst of psychic energy at a target within range. If the target can hear you (though it need not understand you), it must succeed on an Intelligence saving throw or take 1d4 psychic damage and have disadvantage on the next attack roll it makes before the end of its next turn.</p>\n<p>This powers damage increases by 1d4 when you reach 5th level (2d4), 11th level (3d4), and 17th level (4d4).</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":null,"units":"inst"},"target":{"value":1,"units":"","type":"creature"},"range":{"value":60,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"save","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[["1d4","psychic"]],"versatile":""},"formula":"","save":{"ability":"int","dc":null,"scaling":"power"},"level":0,"school":"drk","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":"atwill","formula":"1d4"},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]},"consume":{"type":"","target":"","amount":null}},"flags":{},"img":"systems/sw5e/packs/Icons/Force%20Powers/Feedback.webp"}
{"_id":"PhJUX949F9xcbj3y","name":"Plague","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>Choose up to six creatures of your choice in a 40-foot cube within range. Each target must succeed on a Constitution saving throw or be affected by this power for the duration.</p>\n<p>An affected targets speed is halved, it takes a -2 penalty to AC and Dexterity saving throws, and it cant use reactions. On its turn, it can use either an action or a bonus action, not both. Regardless of the creatures abilities or items, it cant make more than one melee or ranged attack during its turn.</p>\n<p>If the creature attempts to cast a power with a casting time of 1 action, roll a d20. On an 11 or higher, the power doesnt take effect until the creatures next turn, and the creature must use its action on that turn to complete the power. If it cant, the power is wasted.</p>\n<p>A creature affected by this power makes another Constitution saving throw at the end of its turn. On a successful save, the effect ends for it.</p>","chat":"","unidentified":""},"source":"","activation":{"type":"action","cost":1,"condition":"Have Affliction Power"},"duration":{"value":1,"units":"minute"},"target":{"value":6,"units":"","type":"creature"},"range":{"value":30,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"save","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"con","dc":null,"scaling":"power"},"level":3,"school":"drk","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":null,"prepared":true},"scaling":{"mode":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]},"consume":{"type":"","target":"","amount":null}},"flags":{},"img":"systems/sw5e/packs/Icons/Force%20Powers/Plague.webp"}
{"_id":"QyZogGty2DfkYnHF","name":"Choke","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You make a constricting gesture at a creature within range. The target must make a Constitution saving throw. On a failed save target takes 5d8 force damage and is restrained until the end of your next turn. On a successful save, the target takes half as much damage and is not restrained.</p>\n<p>You can use a bonus action while the target is restrained to move the target up to 5 feet in any direction.</p>\n<p><strong>Force Potency.</strong>&nbsp;When you cast this power using a force slot of 4th level or higher, the damage increases by 1d8 for each slot level above 3rd.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":null,"units":"inst"},"target":{"value":1,"units":"","type":"creature"},"range":{"value":60,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"save","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[["5d8","force"]],"versatile":""},"formula":"","save":{"ability":"con","dc":null,"scaling":"power"},"level":3,"school":"drk","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":"level","formula":"1d8"},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]},"consume":{"type":"","target":"","amount":null}},"flags":{},"img":"systems/sw5e/packs/Icons/Force%20Powers/Choke.webp"}
@ -89,75 +145,125 @@
{"name":"Master Revitalize","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You return a dead creature you touch to life, provided that it has been dead no longer than 1 day. If the creatures soul is both willing and at liberty to rejoin the body, the creature returns to life with all its hit points.</p>\n<p>This power closes all wounds, neutralizes any poison, cures all diseases, and lifts any curses affecting the creature when it died. The power replaces damaged or missing organs and limbs.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"hour","cost":1,"condition":""},"duration":{"value":null,"units":"inst"},"target":{"value":1,"units":"","type":"creature"},"range":{"value":null,"long":null,"units":"touch"},"uses":{"value":0,"max":0,"per":""},"ability":null,"actionType":"","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":9,"school":"lgt","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":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg","_id":"SbgYZsKp6FwiLhQA"}
{"name":"Locate Object","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>Describe or name an object. You sense the direction to the objects location, as long as its within 1000 feet of you. If the object is in motion, you know the direction of its movement. The power can locate a specific object known to you, as long as you have seen it while within 30 feet of it. Alternatively, the power can locate the nearest object of a particular kind. This power cant locate an object if any thickness of lead blocks a direct path between you and the object.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":1,"units":"minute"},"target":{"value":null,"units":null,"type":"self"},"range":{"value":null,"long":null,"units":""},"uses":{"value":0,"max":0,"per":""},"ability":null,"actionType":"","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":2,"school":"uni","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":null,"prepared":true},"scaling":{"mode":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg","_id":"SmMJBkUl0oGmhbhu"}
{"name":"Telekinetic Wave","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You manipulate the Force in a 60-foot radius centered on a point you choose within range. Each creature in that area must make a Constitution saving throw. On a failed save, a creature takes 12d6 force damage, is knocked prone, and moved 5 feet in a direction of your choice. On a successful save, it takes half as much damage and isnt knocked prone or moved.</p>\n<p>Force Potency.&nbsp;When you cast this power using a force slot of 9th level, the damage increases by 2d6.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":null,"units":"inst"},"target":{"value":60,"units":"ft","type":"radius"},"range":{"value":150,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"save","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[["12d6","force"]],"versatile":""},"formula":"","save":{"ability":"con","dc":null,"scaling":"power"},"level":8,"school":"lgt","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":"level","formula":"2d6"},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg","_id":"T44CmiqinqUjdbHc"}
{"name":"Comprehend Speech","permission":{"default":0,"XA86Wm4MjngMySbc":3},"type":"power","data":{"description":{"value":"<p>For the duration, you understand the literal meaning of any spoken language that you hear.</p>","chat":"","unidentified":""},"source":"","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":1,"units":"hour"},"target":{"value":null,"units":null,"type":"self"},"range":{"value":null,"long":null,"units":""},"uses":{"value":0,"max":0,"per":""},"consume":{"type":"","target":"","amount":null},"ability":null,"actionType":"","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":1,"school":"uni","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":"","prepared":false},"scaling":{"mode":"none","formula":""}},"flags":{},"img":"icons/svg/mystery-man.svg","_id":"RxMgf0xLigmok93b"}
{"name":"Improved Force Barrier","permission":{"default":0,"XA86Wm4MjngMySbc":3},"type":"power","data":{"description":{"value":"<p>This power further bolsters your allies with toughness and resolve. Choose up to twelve creatures within range. Each target gains the following benefits:</p>\n<ul>\n<li>The becomes immune to poison and disease. Any currently existing poison or diseases still exist.</li>\n<li>The creature becomes immune to being frightened by powers.</li>\n<li>The creatures hit point maximum and current hit points increase by 2d10 for the duration.</li>\n</ul>\n<p>These benefits last for 24 hours or until the end of your next long rest, whichever happens first.</p>","chat":"","unidentified":""},"source":"","activation":{"type":"minute","cost":10,"condition":""},"duration":{"value":null,"units":"inst"},"target":{"value":12,"units":"","type":"creature"},"range":{"value":30,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"consume":{"type":"","target":"","amount":null},"ability":null,"actionType":"","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":5,"school":"lgt","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":"","prepared":false},"scaling":{"mode":"none","formula":""}},"flags":{},"img":"icons/svg/mystery-man.svg","_id":"SaMnm3iVoaldsWip"}
{"_id":"SbgYZsKp6FwiLhQA","name":"Master Revitalize","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You return a dead creature you touch to life, provided that it has been dead no longer than 1 day. If the creatures soul is both willing and at liberty to rejoin the body, the creature returns to life with all its hit points.</p>\n<p>This power closes all wounds, neutralizes any poison, cures all diseases, and lifts any curses affecting the creature when it died. The power replaces damaged or missing organs and limbs.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"hour","cost":1,"condition":""},"duration":{"value":null,"units":"inst"},"target":{"value":1,"units":"","type":"creature"},"range":{"value":null,"long":null,"units":"touch"},"uses":{"value":0,"max":0,"per":""},"ability":null,"actionType":"","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":9,"school":"lgt","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":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg"}
{"name":"Will of the Force","permission":{"default":0,"XA86Wm4MjngMySbc":3},"type":"power","data":{"description":{"value":"<p>You sublimate yourself before the will of the Force, attempting to use it to affect change in the galaxy around you.</p>\n<p>The basic use of this power is to duplicate any other light side or universal force power of 8th level or lower. You dont need to meet any requirements in that power; it simply takes effect. Alternatively, you can create one of the following effects of your choice:</p>\n<ul>\n<li>You summon one object to you of up to 250,000 cr in value that isnt an enhanced item. The object can be no more than 300 feet in any dimension, and it appears in an unoccupied space you can see on the ground.</li>\n<li>You allow up to twenty creatures that you can see to regain all hit points, and you end all effects on them described in the&nbsp;improved restoration&nbsp;power.</li>\n<li>You grant up to ten creatures that you can see resistance to a damage type you choose.</li>\n<li>You grant up to ten creatures you can see immunity to a single power or other specific enhanced effect for 8 hours. For instance, you could make yourself and all your companions immune to the Manifestation of Abeloths Will ability.</li>\n<li>You undo a single recent event by forcing a reroll of any roll made within the last round (including your last turn). Reality reshapes itself to accommodate the new result. For example,&nbsp;will of the force&nbsp;could undo an opponents successful save, a foes critical hit, or a friends failed save. You can force the reroll to be made with advantage or disadvantage, and you can choose whether to use the reroll or the original roll.</li>\n</ul>\n<p>You might be able to achieve something beyond the scope of the above examples. State your wish to the DM as precisely as possible. The DM has great latitude in ruling what occurs in such an instance; the greater the wish, the greater the likelihood that something goes wrong. This power might simply fail, the effect you desire might only be partly achieved, or you might suffer some unforeseen consequence as a result of how you worded the wish. For example, wishing that a villain were dead might propel you forward in time to a period when that villain is no longer alive, effectively removing you from the game. Similarly, wishing for a legendary enhanced item or artifact might instantly transport you to the presence of the items current owner.</p>\n<p>The stress of casting this power to produce any effect other than duplicating another power weakens you. After enduring that stress, each time you cast a power until you finish a long rest, you take 1d10 necrotic damage per level of that power, which cant be reduced or prevented in any way. Additionally, your Strength drops to 3, if it isnt 3 or lower already, for 2d4 days. For each of those days that you spend resting and doing nothing more than light activity, your remaining recovery time decreases by 2 days. Additionally, there is a 33 percent chance that you are unable to cast&nbsp;will of the force&nbsp;ever again if you suffer this stress. Finally, if you are reduced to 0 hit points as a result of this necrotic damage, or at any point before you have fully recovered from the Strength reduction, you immediately die and cannot be resurrected as your body fades away, absorbed into the living Force.</p>","chat":"","unidentified":""},"source":"","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":null,"units":"inst"},"target":{"value":null,"units":null,"type":"self"},"range":{"value":null,"long":null,"units":"self"},"uses":{"value":0,"max":0,"per":""},"consume":{"type":"","target":"","amount":null},"ability":null,"actionType":"","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":9,"school":"lgt","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":"","prepared":false},"scaling":{"mode":"none","formula":""}},"flags":{},"img":"icons/svg/mystery-man.svg","_id":"SjPSJ7ZAnMR9YxN9"}
{"_id":"SmMJBkUl0oGmhbhu","name":"Locate Object","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>Describe or name an object. You sense the direction to the objects location, as long as its within 1000 feet of you. If the object is in motion, you know the direction of its movement. The power can locate a specific object known to you, as long as you have seen it while within 30 feet of it. Alternatively, the power can locate the nearest object of a particular kind. This power cant locate an object if any thickness of lead blocks a direct path between you and the object.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":1,"units":"minute"},"target":{"value":null,"units":null,"type":"self"},"range":{"value":null,"long":null,"units":""},"uses":{"value":0,"max":0,"per":""},"ability":null,"actionType":"","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":2,"school":"uni","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":null,"prepared":true},"scaling":{"mode":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg"}
{"_id":"T44CmiqinqUjdbHc","name":"Telekinetic Wave","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You manipulate the Force in a 60-foot radius centered on a point you choose within range. Each creature in that area must make a Constitution saving throw. On a failed save, a creature takes 12d6 force damage, is knocked prone, and moved 5 feet in a direction of your choice. On a successful save, it takes half as much damage and isnt knocked prone or moved.</p>\n<p>Force Potency.&nbsp;When you cast this power using a force slot of 9th level, the damage increases by 2d6.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":null,"units":"inst"},"target":{"value":60,"units":"ft","type":"radius"},"range":{"value":150,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"save","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[["12d6","force"]],"versatile":""},"formula":"","save":{"ability":"con","dc":null,"scaling":"power"},"level":8,"school":"lgt","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":"level","formula":"2d6"},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg"}
{"_id":"T5nzsISIa6ep9YRX","name":"Force Barrier","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>This power bolsters your allies with toughness and resolve. Choose up to three creatures within range. Each targets hit point maximum and current hit points increase by 5 for the duration.</p>\n<p>Force Potency.&nbsp;When you cast this power using a force slot of 3rd level or higher, a targets hit points increase by an additional 5 for each slot level above 2nd.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":8,"units":"hour"},"target":{"value":3,"units":"","type":"creature"},"range":{"value":30,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":null,"actionType":"","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":2,"school":"lgt","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":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]},"consume":{"type":"","target":"","amount":null}},"flags":{},"img":"icons/svg/mystery-man.svg"}
{"_id":"TLEOcYzzQWvAOWsT","name":"Darkness","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>Darkness spreads from a point you choose within range to fill a 15-foot-radius sphere until the power ends. The darkness spreads around corners. A creature with darkvision cant see through this darkness, and unenhanced light cant illuminate it.</p>\n<p>If the point you choose is on an object you are holding or one that isnt being worn or carried, the darkness comes from the object and moves with it. Completely covering the source of the darkness with an opaque object blocks the darkness.</p>\n<p>If this powers area overlaps with light created by a 2nd-level power or lower, this power and the light are dispelled.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":10,"units":"minute"},"target":{"value":15,"units":"ft","type":"radius"},"range":{"value":60,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":null,"actionType":"","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":2,"school":"drk","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":null,"prepared":true},"scaling":{"mode":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]},"consume":{"type":"","target":"","amount":null}},"flags":{},"img":"systems/sw5e/packs/Icons/Force%20Powers/Darkness.webp"}
{"name":"Force Scream","permission":{"default":0,"9BhUyjgxIxogl2ot":3},"type":"power","data":{"description":{"value":"<p>You emit a scream imbued with the power of the Force. Each creature you choose within 15 feet of you must succeed on a Constitution saving throw. On a failed save, a creature take 4d6 psychic damage, 4d6 sonic damage, and is deafened until the end of its next turn. On a successful save, it takes half as much damage and isnt deafened.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":null,"units":"inst"},"target":{"value":15,"units":"ft","type":"radius"},"range":{"value":null,"long":null,"units":"self"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"save","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[["4d6","Sonic"]],"versatile":""},"formula":"","save":{"ability":"con","dc":null,"scaling":"power"},"level":3,"school":"drk","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":"","prepared":false},"scaling":{"mode":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"systems/sw5e/packs/Icons/Force%20Powers/Force%20Scream.webp","_id":"UTCkJSnF7R7V2bqF"}
{"_id":"UTCkJSnF7R7V2bqF","name":"Force Scream","permission":{"default":0,"9BhUyjgxIxogl2ot":3},"type":"power","data":{"description":{"value":"<p>You emit a scream imbued with the power of the Force. Each creature you choose within 15 feet of you must succeed on a Constitution saving throw. On a failed save, a creature take 4d6 psychic damage, 4d6 sonic damage, and is deafened until the end of its next turn. On a successful save, it takes half as much damage and isnt deafened.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":null,"units":"inst"},"target":{"value":15,"units":"ft","type":"radius"},"range":{"value":null,"long":null,"units":"self"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"save","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[["4d6","Sonic"]],"versatile":""},"formula":"","save":{"ability":"con","dc":null,"scaling":"power"},"level":3,"school":"drk","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":"","prepared":false},"scaling":{"mode":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"systems/sw5e/packs/Icons/Force%20Powers/Force%20Scream.webp"}
{"name":"Force Concealment","permission":{"default":0,"XA86Wm4MjngMySbc":3},"type":"power","data":{"description":{"value":"<p>You shroud or alter the aura of a creature or object you touch so that Force powers reveal false information about it. The target can be a willing creature or an object that isnt being carried or worn by another creature.</p>\n<p>When you cast the power, choose one or both of the following effects. The effect lasts for the duration. If you cast this power on the same creature or object every day for 30 days, placing the same effect on it each time, the effect lasts until it is dispelled.</p>\n<p>False Aura.&nbsp;You change the way the target appears to powers and Force-based enhanced effects, such as&nbsp;sense force, that detects the presence of the Force. You can make a Force-based unenhanced object or creature appear enhanced and to radiate a Force aura, or a Force-based enhanced object or creature appear unenhanced and to radiate no Force aura. When you use this effect on an object, you can make the false aura apparent to any creature that handles the item.</p>\n<p>Cloak.&nbsp;You can change the way the targets affinity in the Force appears to the&nbsp;force sight&nbsp;power. For example, a Sith Lord with great power in the dark side of the Force can appear instead to have very little strength in the Force, with an affinity towards the light side.</p>","chat":"","unidentified":""},"source":"","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":24,"units":"hour"},"target":{"value":null,"units":"","type":""},"range":{"value":null,"long":null,"units":"touch"},"uses":{"value":0,"max":0,"per":""},"consume":{"type":"","target":"","amount":null},"ability":null,"actionType":"","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":2,"school":"uni","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":"","prepared":false},"scaling":{"mode":"none","formula":""}},"flags":{},"img":"icons/svg/mystery-man.svg","_id":"V0gdWJyrn2O8SleF"}
{"_id":"VIi9ZD8Ha669UYRw","name":"Insanity","permission":{"default":0,"9BhUyjgxIxogl2ot":3},"type":"power","data":{"description":{"value":"<p>This power assaults and twists creatures&rsquo; minds, spawning delusions and provoking uncontrolled action. Each creature in a 30-foot-radius sphere centered on you must succeed on a Wisdom saving throw when you cast this power or be affected by it.</p>\n<p>An affected target can&rsquo;t take reactions and must roll a d8 at the start of each of its turns to determine its behavior for that turn. This power has no effect on constructs or droids.</p>\n<table>\n<thead>\n<tr>\n<th>d8</th>\n<th>Behavior</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td style=\"text-align: left;\">1</td>\n<td>The creature uses all its movement to move in a random direction. To determine the direction, roll a d8 and assign a direction to each die face. The creature doesn&rsquo;t take an action this turn.</td>\n</tr>\n<tr>\n<td>2-6</td>\n<td>The creature doesn&rsquo;t move or take actions this turn.</td>\n</tr>\n<tr>\n<td>7-8</td>\n<td>The creature uses its action to make a melee attack against a randomly determined creature within its reach. If there is no creature within its reach, the creature does nothing this turn.</td>\n</tr>\n</tbody>\n</table>\n<p>At the end of each of its turns, an affected target can make a Wisdom saving throw. If it succeeds, this effect ends for that target.</p>\n<p>Force Potency.&nbsp;When you cast this power using a power slot of 6th level or higher, the radius of the sphere increases by 5 feet for each force slot level above 5th.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":1,"units":"minute"},"target":{"value":30,"units":"ft","type":"sphere"},"range":{"value":null,"long":null,"units":"self"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"save","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"1d8","save":{"ability":"wis","dc":null,"scaling":"power"},"level":5,"school":"drk","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":"","prepared":false},"scaling":{"mode":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"systems/sw5e/packs/Icons/Force%20Powers/Insanity.webp"}
{"name":"Force Mask","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>Until the power ends or you use an action to dismiss it, you can disguise yourself through use of the Force in many ways. You can appear to be shorter or taller by about a foot and change the appearance of your body and weight, but you cannot change the basic structure of your body. This effect can include your clothes, weapons, and other belongings on your person.</p>\n<p>This effect is only visual, so any sort of physical contact will only interact with the real size and shape of you. A creature that uses its action to examine you can identify this effect with a successful Intelligence (Investigation) check against your force save DC. This power has no effect on droids or constructs.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":1,"units":"hour"},"target":{"value":null,"units":null,"type":"self"},"range":{"value":null,"long":null,"units":""},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"abil","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"int","dc":null,"scaling":"power"},"level":1,"school":"uni","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":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg","_id":"Vsnr0aVZQIcRD0Ed"}
{"_id":"Vsnr0aVZQIcRD0Ed","name":"Force Mask","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>Until the power ends or you use an action to dismiss it, you can disguise yourself through use of the Force in many ways. You can appear to be shorter or taller by about a foot and change the appearance of your body and weight, but you cannot change the basic structure of your body. This effect can include your clothes, weapons, and other belongings on your person.</p>\n<p>This effect is only visual, so any sort of physical contact will only interact with the real size and shape of you. A creature that uses its action to examine you can identify this effect with a successful Intelligence (Investigation) check against your force save DC. This power has no effect on droids or constructs.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":1,"units":"hour"},"target":{"value":null,"units":null,"type":"self"},"range":{"value":null,"long":null,"units":""},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"abil","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"int","dc":null,"scaling":"power"},"level":1,"school":"uni","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":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg"}
{"_id":"WBNy29tnkclypOVZ","name":"Danger Sense","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You put your faith in the Force, feeling out the future and seeing whether your actions will lead to fortune or ruin. The GM chooses from the following possible omens:</p>\n<ul>\n<li>Peace, for results which are not dangerous</li>\n<li>Danger, for results which are dangerous but perhaps still worth the danger</li>\n<li>Ruin, for results which are certain to end in death or tragedy</li>\n</ul>\n<p>The power doesnt take into account any possible circumstances that might change the outcome, such as the use of additional powers or the loss or gain of a companion.</p>\n<p>If you use this power two or more times before completing your next long rest, there is a cumulative 25 percent chance for each casting after the first that you get a neutral result regardless of the actual outcome.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"bonus","cost":1,"condition":""},"duration":{"value":null,"units":"inst"},"target":{"value":null,"units":"","type":"self"},"range":{"value":null,"long":null,"units":""},"uses":{"value":0,"max":0,"per":""},"ability":null,"actionType":"","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":2,"school":"uni","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":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]},"consume":{"type":"","target":"","amount":null}},"flags":{},"img":"icons/svg/mystery-man.svg"}
{"_id":"WG79exTllchDSK6M","name":"Animate Weapon","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You select a melee weapon you wield, or one melee weapon within range that is not worn or carried by a conscious creature, and use the Force to cause it to levitate, acting as an extension of your will for the duration or until you cast this power again. When you use this power, you can cause the weapon to move up to 20 feet and make a melee force attack against a creature within 5 feet of it. On a hit, the target takes 1d8 + your forcecasting ability modifier damage. The type is of the normal damage dealt by the weapon.</p>\n<p>While the weapon is animated, on each of your turns you can use a bonus action to move the weapon up to 20 feet and repeat the attack against a creature within 5 feet of it. At any time, you can end this force power to return the animated weapon to your hand.</p>\n<p>An enemy can attempt to gain control of the weapon by using its action to make a Strength (Athletics) check against your force save DC. On a success, the creature gains control of the weapon and the power ends.</p>\n<p>Force Potency.&nbsp;When you cast this power using a force slot of 3rd level or higher, the weapons damage increases by 1d8 for every two slot levels above 2nd.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"bonus","cost":1,"condition":""},"duration":{"value":1,"units":"minute"},"target":{"value":1,"units":"","type":"object"},"range":{"value":60,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":"wis","actionType":"mwak","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[["1d8 + @mod",""]],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":2,"school":"uni","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":"level","formula":"1d6"},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]},"consume":{"type":"","target":"","amount":null}},"flags":{"dynamiceffects":{"equipActive":false,"alwaysActive":false}},"img":"icons/svg/mystery-man.svg"}
{"_id":"WG79exTllchDSK6M","name":"Animate Weapon","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You select a melee weapon you wield, or one melee weapon within range that is not worn or carried by a conscious creature, and use the Force to cause it to levitate, acting as an extension of your will for the duration or until you cast this power again. When you use this power, you can cause the weapon to move up to 20 feet and make a melee force attack against a creature within 5 feet of it. On a hit, the target takes 1d8 + your forcecasting ability modifier damage. The type is of the normal damage dealt by the weapon.</p>\n<p>While the weapon is animated, on each of your turns you can use a bonus action to move the weapon up to 20 feet and repeat the attack against a creature within 5 feet of it. At any time, you can end this force power to return the animated weapon to your hand.</p>\n<p>An enemy can attempt to gain control of the weapon by using its action to make a Strength (Athletics) check against your force save DC. On a success, the creature gains control of the weapon and the power ends.</p>\n<p>Force Potency.&nbsp;When you cast this power using a force slot of 3rd level or higher, the weapons damage increases by 1d8 for every two slot levels above 2nd.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"bonus","cost":1,"condition":""},"duration":{"value":1,"units":"minute"},"target":{"value":1,"units":"","type":"object"},"range":{"value":60,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":"wis","actionType":"mwak","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[["1d8 + @mod",""]],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":2,"school":"uni","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":"level","formula":"1d6"},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]},"consume":{"type":"","target":"","amount":null}},"flags":{},"img":"icons/svg/mystery-man.svg"}
{"_id":"WWCvfD4ldEZoR5fn","name":"Mind Trap","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You attempt to trap the mind of your target in a psychic cage. The target must make a Charisma saving throw. On a failed save, the creatures mind is trapped. It can think, but it cant have any contact with or perceive the outside world. If the creature takes damage, it makes another Charisma save. On a success, the power ends. This power has no effect on droids or constructs.</p>\n<p>Force Potency.&nbsp;When you cast this power using a force slot of 6th level or higher, after 1 minute of concentration the powers duration becomes 24 hours and it no longer requires your concentration.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":1,"units":"minute"},"target":{"value":1,"units":"","type":"creature"},"range":{"value":60,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"save","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"cha","dc":null,"scaling":"power"},"level":4,"school":"uni","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":null,"prepared":true},"scaling":{"mode":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]},"consume":{"type":"","target":"","amount":null}},"flags":{},"img":"icons/svg/mystery-man.svg"}
{"_id":"XJSLZaP9Nix5EJHY","name":"Curse","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>Up to three creatures of your choice that you can see within range must make Charisma saving throws. Whenever a target that fails this saving throw makes an attack roll or a saving throw before the power ends, the target must roll a d4 and subtract the number rolled from the attack roll or saving throw.</p>\n<p><strong>Force Potency.&nbsp;</strong>When you cast this power using a force slot of 2nd level or higher, you can target one additional creature for each slot level above 1st.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":"Have Denounce Power"},"duration":{"value":1,"units":"minute"},"target":{"value":3,"units":"","type":"creature"},"range":{"value":30,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"save","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"1d4","save":{"ability":"cha","dc":null,"scaling":"power"},"level":1,"school":"drk","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":null,"prepared":true},"scaling":{"mode":"level","formula":"1 Addition Target"},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]},"consume":{"type":"","target":"","amount":null}},"flags":{},"img":"systems/sw5e/packs/Icons/Force%20Powers/Curse.webp"}
{"_id":"XYHAKmU4gHSzRK3I","name":"Force Suppression","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>Choose one creature, object, or force effect within range. Any force power of 3rd level or lower on the target ends. For each force power of 4th level or higher on the target, make an ability check using your forcecasting ability. The DC equals 10 + the powers level. On a success, the power ends.</p>\n<p>Force Potency.&nbsp;When you cast this power using a force slot of 4th level or higher, you automatically end the effects of a force power on the target if the powers level is equal to or less than the level of the force slot you used.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":null,"units":"inst"},"target":{"value":1,"units":"","type":"creature"},"range":{"value":120,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"abil","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"wis","dc":null,"scaling":"power"},"level":3,"school":"uni","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":"level","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]},"consume":{"type":"","target":"","amount":null}},"flags":{},"img":"systems/sw5e/packs/Icons/Force%20Powers/Force%20Suppression.webp"}
{"name":"Control Pain","permission":{"default":0,"XA86Wm4MjngMySbc":3},"type":"power","data":{"description":{"value":"<p>You use the Force to push your body beyond its normal limits. You cant die from damage or from failed death saving throws while this power is in effect, but the effort taxes you. If you have 0 hit points while you are under the effect of this power, you do not fall unconscious, and continue acting and fighting normally. While you remain at 0 hit points, you must make a death saving throw at the start of each of your turns. Each time you fail a death saving throw, you suffer a cumulative -1 penalty to attack rolls, ability checks, and saving throws (including death saving throws). This penalty lasts until you regain hit points. Successful death saving throws have no effect, but a natural 20 restores 1 hit point as usual.</p>\n<p>If you have 0 hit points when this power ends, you die instantly.</p>","chat":"","unidentified":""},"source":"","activation":{"type":"action","cost":1,"condition":"Requires Force Body"},"duration":{"value":1,"units":"minute"},"target":{"value":null,"units":null,"type":"self"},"range":{"value":null,"long":null,"units":""},"uses":{"value":0,"max":0,"per":""},"consume":{"type":"","target":"","amount":null},"ability":null,"actionType":"","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":5,"school":"uni","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":true},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":"","prepared":false},"scaling":{"mode":"none","formula":""}},"flags":{},"img":"icons/svg/mystery-man.svg","_id":"XclIGWYxTC0rJ0Uk"}
{"_id":"XizLBCti6XKTlkmM","name":"Dark Side Tendrils","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>Tendrils of dark energy erupt from you and batter all creatures within 10 feet of you. Each creature in that area must make a Strength saving throw. On a failed save, a target takes 2d6 necrotic damage and cant take reactions until its next turn. On a successful save, the creature takes half damage, but suffers no other effect.</p>\n<p><strong>Force Potency.</strong>&nbsp;When you cast this power using a power slot of 2nd level or higher, the damage increases by 1d6 for each slot level above 1st.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":null,"units":"inst"},"target":{"value":10,"units":"ft","type":"radius"},"range":{"value":null,"long":null,"units":"self"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"save","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[["2d6","necrotic"]],"versatile":""},"formula":"","save":{"ability":"str","dc":null,"scaling":"power"},"level":1,"school":"drk","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":"level","formula":"1d6"},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]},"consume":{"type":"","target":"","amount":null}},"flags":{},"img":"systems/sw5e/packs/Icons/Force%20Powers/Dark%20Side%20Tendrils.webp"}
{"name":"Coerce Mind","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You suggest a course of activity (limited to a sentence or two) and influence with the Force a creature you can see within range that can hear and understand you. Creatures that cant be charmed are immune to this effect. The suggestion must be worded in such a manner as to make the course of action sound reasonable. Asking the creature to harm itself automatically negates the effect of the power.</p>\n<p>The target must make a Wisdom saving throw. On a failed save, it pursues the course of action you described to the best of its ability. The suggested course of action can continue for the entire duration. If the suggested activity can be completed in a shorter time, the power ends when the subject finishes what it was asked to do.</p>\n<p>You can also specify conditions that will trigger a special activity during the duration. For example, you might suggest that a soldier give her speeder to the first vagrant she meets. If the condition isnt met before the power expires, the activity isnt performed.</p>\n<p>If you or any of your companions damage the target, the power ends. This power has no effect on droids or constructs.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":8,"units":"hour"},"target":{"value":1,"units":"","type":"creature"},"range":{"value":30,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"save","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"wis","dc":null,"scaling":"power"},"level":2,"school":"uni","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":null,"prepared":true},"scaling":{"mode":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg","_id":"YFbfva5hY5FOxmdw"}
{"name":"Plant Surge","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>If you cast this power using 1 action, all normal plants in a 100-foot radius centered on a point become overgrown. Moving through the area spends 4 feet of movement for every 1 foot moved. You can exclude areas of any size within the powers area from being affected.</p>\n<p>If you cast this power over 8 hours, all plants in a half-mile radius centered on a point yield twice the normal amount of food when harvested for 1 year.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":null,"units":"inst"},"target":{"value":100,"units":"ft","type":"radius"},"range":{"value":150,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":null,"actionType":"","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":3,"school":"lgt","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":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg","_id":"YTSbLoD7dnvql2H3"}
{"_id":"YFbfva5hY5FOxmdw","name":"Coerce Mind","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You suggest a course of activity (limited to a sentence or two) and influence with the Force a creature you can see within range that can hear and understand you. Creatures that cant be charmed are immune to this effect. The suggestion must be worded in such a manner as to make the course of action sound reasonable. Asking the creature to harm itself automatically negates the effect of the power.</p>\n<p>The target must make a Wisdom saving throw. On a failed save, it pursues the course of action you described to the best of its ability. The suggested course of action can continue for the entire duration. If the suggested activity can be completed in a shorter time, the power ends when the subject finishes what it was asked to do.</p>\n<p>You can also specify conditions that will trigger a special activity during the duration. For example, you might suggest that a soldier give her speeder to the first vagrant she meets. If the condition isnt met before the power expires, the activity isnt performed.</p>\n<p>If you or any of your companions damage the target, the power ends. This power has no effect on droids or constructs.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":8,"units":"hour"},"target":{"value":1,"units":"","type":"creature"},"range":{"value":30,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"save","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"wis","dc":null,"scaling":"power"},"level":2,"school":"uni","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":null,"prepared":true},"scaling":{"mode":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg"}
{"_id":"YTSbLoD7dnvql2H3","name":"Plant Surge","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>If you cast this power using 1 action, all normal plants in a 100-foot radius centered on a point become overgrown. Moving through the area spends 4 feet of movement for every 1 foot moved. You can exclude areas of any size within the powers area from being affected.</p>\n<p>If you cast this power over 8 hours, all plants in a half-mile radius centered on a point yield twice the normal amount of food when harvested for 1 year.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":null,"units":"inst"},"target":{"value":100,"units":"ft","type":"radius"},"range":{"value":150,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":null,"actionType":"","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":3,"school":"lgt","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":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg"}
{"_id":"YguQH8fuWTnHMPcK","name":"Dominate Mind","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You attempt to beguile a humanoid that you can see within range. It must succeed on a Wisdom saving throw or be charmed by you for the duration. If you or creatures that are friendly to you are fighting it, it has advantage on the saving throw.</p>\n<p>While the target is charmed, you have a telepathic link with it as long as you are within 1 mile of it. You can use this telepathic link to issue commands to the creature while you are conscious (no action required), which it does its best to obey. You can specify a simple and general course of action, such as “Attack that creature,” “Run over there,” or “Fetch that object.” If the creature completes the order and doesnt receive further direction from you, it defends and preserves itself to the best of its ability.</p>\n<p>You can use your action to take total and precise control of the target. Until the end of your next turn, the creature takes only the actions you choose, and doesnt do anything that you dont allow it to do. During this time you can also cause the creature to use a reaction, but this requires you to use your own reaction as well.</p>\n<p>Each time the target takes damage, it makes a new Wisdom saving throw against the power. If the saving throw succeeds, the power ends. This power has no effect on droids or constructs.</p>\n<p><strong>Force Potency.</strong>&nbsp;When you cast this power using a 6th-level force slot, the duration is 10 minutes. When you use a 7th-level force slot, the duration is 1 hour. When you use a force slot of 8th level or higher, the duration is 8 hours.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":"Have Dominate Beast"},"duration":{"value":1,"units":"minute"},"target":{"value":1,"units":"","type":"creature"},"range":{"value":60,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"save","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"wis","dc":null,"scaling":"power"},"level":5,"school":"drk","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":null,"prepared":true},"scaling":{"mode":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]},"consume":{"type":"","target":"","amount":null}},"flags":{},"img":"systems/sw5e/packs/Icons/Force%20Powers/Dominate%20Mind.webp"}
{"_id":"Yn07n957VuJ39xk3","name":"Force Lightning","permission":{"default":0,"9BhUyjgxIxogl2ot":3},"type":"power","data":{"description":{"value":"<p>A stroke of lightning forming a line 100 feet long and 5 feet wide blasts out from you in a direction you choose. Each creature in the line must make a Dexterity saving throw. A creature takes 8d6 lightning damage on a failed save, or half as much damage on a successful one.</p>\n<p>The lightning ignites flammable objects in the area that arent being worn or carried.</p>\n<p>Force Potency.&nbsp;When you cast this power using a force slot of 4th level or higher, the damage increases by 1d6 for each slot level above 3rd.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":null,"units":"inst"},"target":{"value":100,"units":"ft","type":"line"},"range":{"value":null,"long":null,"units":"self"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"save","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[["8d6",""]],"versatile":""},"formula":"","save":{"ability":"dex","dc":null,"scaling":"power"},"level":3,"school":"drk","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":"","prepared":false},"scaling":{"mode":"level","formula":"1d6"},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"systems/sw5e/packs/Icons/Force%20Powers/Force%20Lightning.webp"}
{"name":"Eruption","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You cause up to six pillars of stone to burst from places on the ground that you can see within range. Each pillar is a cylinder that has a diameter of 5 feet and a height of up to 30 feet. The ground where a pillar appears must be wide enough for its diameter, and you can target the ground under a creature if that creature is Medium or smaller. Each pillar has AC 5 and 30 hit points. When reduced to 0 hit points, a pillar crumbles into rubble, which creates an area of difficult terrain with a 10 - foot radius that lasts until the rubble is cleared. Each 5-foot-diameter portion of the area requires at least 1 minute to clear by hand.</p>\n<p>If a pillar is created under a creature, that creature must succeed on a Dexterity saving throw or be lifted by the pillar. A creature can choose to fail the save.</p>\n<p>If a pillar is prevented from reaching its full height because of a ceiling or other obstacle, a creature on the pillar takes 6d6 kinetic damage and is restrained, pinched between the pillar and the obstacle. The restrained creature can use an action to make a Strength or Dexterity check (the creatures choice) against the powers save DC. On a success, the creature is no longer restrained and must either move off the pillar or fall off it.</p>\n<p>Force Potency.&nbsp;When you cast this power using a force slot of 7th level or higher, you can create two additional pillars for each slot level above 6th.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":null,"units":"inst"},"target":{"value":5,"units":"ft","type":"cylinder"},"range":{"value":120,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"save","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[["6d6","kinetic"]],"versatile":""},"formula":"","save":{"ability":"dex","dc":null,"scaling":"power"},"level":6,"school":"uni","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":"level","formula":"2 additional pillars"},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg","_id":"ZeVEHfAVZrq79B6I"}
{"_id":"ZeVEHfAVZrq79B6I","name":"Eruption","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You cause up to six pillars of stone to burst from places on the ground that you can see within range. Each pillar is a cylinder that has a diameter of 5 feet and a height of up to 30 feet. The ground where a pillar appears must be wide enough for its diameter, and you can target the ground under a creature if that creature is Medium or smaller. Each pillar has AC 5 and 30 hit points. When reduced to 0 hit points, a pillar crumbles into rubble, which creates an area of difficult terrain with a 10 - foot radius that lasts until the rubble is cleared. Each 5-foot-diameter portion of the area requires at least 1 minute to clear by hand.</p>\n<p>If a pillar is created under a creature, that creature must succeed on a Dexterity saving throw or be lifted by the pillar. A creature can choose to fail the save.</p>\n<p>If a pillar is prevented from reaching its full height because of a ceiling or other obstacle, a creature on the pillar takes 6d6 kinetic damage and is restrained, pinched between the pillar and the obstacle. The restrained creature can use an action to make a Strength or Dexterity check (the creatures choice) against the powers save DC. On a success, the creature is no longer restrained and must either move off the pillar or fall off it.</p>\n<p>Force Potency.&nbsp;When you cast this power using a force slot of 7th level or higher, you can create two additional pillars for each slot level above 6th.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":null,"units":"inst"},"target":{"value":5,"units":"ft","type":"cylinder"},"range":{"value":120,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"save","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[["6d6","kinetic"]],"versatile":""},"formula":"","save":{"ability":"dex","dc":null,"scaling":"power"},"level":6,"school":"uni","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":"level","formula":"2 additional pillars"},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg"}
{"name":"Force Weapon","permission":{"default":0,"XA86Wm4MjngMySbc":3},"type":"power","data":{"description":{"value":"<p>You touch an unenhanced weapon with which you are proficient. While you wield it for the duration, that weapon becomes an enhanced weapon with a +1 bonus to attack rolls and damage rolls. Additionally, you can use your forcecasting modifier instead of your Strength or Dexterity modifier for attacks and damage rolls when attacking with that weapon.</p>\n<p>Force Potency.&nbsp;When you cast this power using a force slot of 5th level or higher, the bonus increases to +2. When you use a force slot of 7th level or higher, the bonus increases to +3.</p>","chat":"","unidentified":""},"source":"","activation":{"type":"bonus","cost":1,"condition":""},"duration":{"value":1,"units":"hour"},"target":{"value":1,"units":"","type":"weapon"},"range":{"value":null,"long":null,"units":"touch"},"uses":{"value":0,"max":0,"per":""},"consume":{"type":"","target":"","amount":null},"ability":null,"actionType":"","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":3,"school":"uni","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":true},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":"","prepared":false},"scaling":{"mode":"none","formula":""}},"flags":{},"img":"icons/svg/mystery-man.svg","_id":"ZhF71jnD5cRDy5LP"}
{"_id":"Zt3Aw0RkTFY2bwW8","name":"Greater Feedback","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You choose a point within range and cause psychic energy to explode there. Each creature in a 20-foot-radius sphere centered on that point must make an Intelligence saving throw. A creature with an Intelligence score of 2 or lower cant be affected by this power. A target takes 8d6 psychic damage on a failed save, or half as much damage on a successful one.</p>\n<p>After a failed save, a target has muddled thoughts for 1 minute. During that time, it rolls a d6 and subtracts the number rolled from all its attack rolls and ability checks, as well as its Constitution saving throws to maintain concentration. The target can make a Wisdom saving throw at the end of each of its turns, ending the effect on itself on a success.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":"Have Improved Feedback"},"duration":{"value":null,"units":""},"target":{"value":1,"units":"","type":"creature"},"range":{"value":120,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"save","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[["8d6","psychic"]],"versatile":""},"formula":"1d6","save":{"ability":"int","dc":null,"scaling":"power"},"level":5,"school":"drk","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":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]},"consume":{"type":"","target":"","amount":null}},"flags":{},"img":"systems/sw5e/packs/Icons/Force%20Powers/Greater%20Feedback.webp"}
{"name":"Whirlwind","permission":{"default":0,"9BhUyjgxIxogl2ot":3},"type":"power","data":{"description":{"value":"<p>A whirlwind howls down to a point that you can see on the ground within range. The whirlwind is a 10-foot-radius, 30-foot-high cylinder centered on that point. Until the power ends, you can use your action to move the whirlwind up to 30 feet in any direction along the ground. The whirlwind sucks up any Medium or smaller objects that arent secured to anything and that arent worn or carried by anyone.</p>\n<p>A creature must make a Dexterity saving throw the first time on a turn that it enters the whirlwind or that the whirlwind enters its space, including when the whirlwind first appears. A creature takes 10d6 kinetic damage on a failed save, or half as much damage on a successful one. In addition, a Large or smaller creature that fails the save must succeed on a Strength saving throw or become restrained in the whirlwind until the power ends. When a creature starts its turn restrained by the whirlwind, the creature is pulled 5 feet higher inside it, unless the creature is at the top. A restrained creature moves with the whirlwind and falls when the power ends, unless the creature has some means to stay aloft.</p>\n<p>A restrained creature can use an action to make a Strength or Dexterity check against your force save DC. If successful, the creature is no longer restrained by the whirlwind and is hurled 3d6x10 feet away from it in a random direction.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":1,"units":"minute"},"target":{"value":10,"units":"ft","type":"cylinder"},"range":{"value":300,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"save","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[["10d6","kinetic"]],"versatile":""},"formula":"","save":{"ability":"dex","dc":null,"scaling":"power"},"level":7,"school":"uni","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":"","prepared":false},"scaling":{"mode":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"systems/sw5e/packs/Icons/Force%20Powers/Whirlwind.webp","_id":"anxCi1ypITMC1F9Y"}
{"name":"Master Force Scream","permission":{"default":0,"9BhUyjgxIxogl2ot":3},"type":"power","data":{"description":{"value":"<p>You emit a cacophonous scream imbued with the power of the Force. Each creature you choose within 60 feet of you must succeed on a Constitution saving throw. On a failed save, a creature takes 6d6 psychic damage, 6d6 sonic damage, is deafened, knocked prone, and blinded for 1 minute. On a successful save, it takes half as much damage and isnt deafened, knocked prone, or blinded by this power.</p>\n<p>A creature blinded by this power makes another Constitution saving throw at the end of each of its turns. On a successful save, it is no longer blinded.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":null,"units":"inst"},"target":{"value":60,"units":"ft","type":"radius"},"range":{"value":null,"long":null,"units":"self"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"save","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[["6d6","psychic"],["6d6","Sonic"]],"versatile":""},"formula":"","save":{"ability":"con","dc":null,"scaling":"power"},"level":8,"school":"drk","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":"","prepared":false},"scaling":{"mode":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"systems/sw5e/packs/Icons/Force%20Powers/Master%20Force%20Scream.webp","_id":"b0fmnYMO3bLtarhk"}
{"_id":"anxCi1ypITMC1F9Y","name":"Whirlwind","permission":{"default":0,"9BhUyjgxIxogl2ot":3},"type":"power","data":{"description":{"value":"<p>A whirlwind howls down to a point that you can see on the ground within range. The whirlwind is a 10-foot-radius, 30-foot-high cylinder centered on that point. Until the power ends, you can use your action to move the whirlwind up to 30 feet in any direction along the ground. The whirlwind sucks up any Medium or smaller objects that arent secured to anything and that arent worn or carried by anyone.</p>\n<p>A creature must make a Dexterity saving throw the first time on a turn that it enters the whirlwind or that the whirlwind enters its space, including when the whirlwind first appears. A creature takes 10d6 kinetic damage on a failed save, or half as much damage on a successful one. In addition, a Large or smaller creature that fails the save must succeed on a Strength saving throw or become restrained in the whirlwind until the power ends. When a creature starts its turn restrained by the whirlwind, the creature is pulled 5 feet higher inside it, unless the creature is at the top. A restrained creature moves with the whirlwind and falls when the power ends, unless the creature has some means to stay aloft.</p>\n<p>A restrained creature can use an action to make a Strength or Dexterity check against your force save DC. If successful, the creature is no longer restrained by the whirlwind and is hurled 3d6x10 feet away from it in a random direction.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":1,"units":"minute"},"target":{"value":10,"units":"ft","type":"cylinder"},"range":{"value":300,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"save","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[["10d6","kinetic"]],"versatile":""},"formula":"","save":{"ability":"dex","dc":null,"scaling":"power"},"level":7,"school":"uni","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":"","prepared":false},"scaling":{"mode":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"systems/sw5e/packs/Icons/Force%20Powers/Whirlwind.webp"}
{"_id":"b0fmnYMO3bLtarhk","name":"Master Force Scream","permission":{"default":0,"9BhUyjgxIxogl2ot":3},"type":"power","data":{"description":{"value":"<p>You emit a cacophonous scream imbued with the power of the Force. Each creature you choose within 60 feet of you must succeed on a Constitution saving throw. On a failed save, a creature takes 6d6 psychic damage, 6d6 sonic damage, is deafened, knocked prone, and blinded for 1 minute. On a successful save, it takes half as much damage and isnt deafened, knocked prone, or blinded by this power.</p>\n<p>A creature blinded by this power makes another Constitution saving throw at the end of each of its turns. On a successful save, it is no longer blinded.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":null,"units":"inst"},"target":{"value":60,"units":"ft","type":"radius"},"range":{"value":null,"long":null,"units":"self"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"save","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[["6d6","psychic"],["6d6","Sonic"]],"versatile":""},"formula":"","save":{"ability":"con","dc":null,"scaling":"power"},"level":8,"school":"drk","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":"","prepared":false},"scaling":{"mode":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"systems/sw5e/packs/Icons/Force%20Powers/Master%20Force%20Scream.webp"}
{"_id":"b2MvrTaXlisYe2A4","name":"Affect Mind","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>Choose a target within range that isnt hostile toward you. The target must make a Wisdom saving throw. On a failed save, you have advantage on all Charisma checks directed at that target.</p>\n<p>On a successful save, the creature does not realize that you tried to use the Force to influence its mood, but it becomes immune to this power for one day. This power has no effect on droids or constructs.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":1,"units":"minute"},"target":{"value":1,"units":"","type":"creature"},"range":{"value":30,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"save","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"wis","dc":null,"scaling":"power"},"level":0,"school":"uni","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":null,"prepared":true},"scaling":{"mode":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]},"consume":{"type":"","target":"","amount":null}},"flags":{},"img":"systems/sw5e/packs/Icons/Force%20Powers/Affect%20Mind.webp"}
{"name":"Force Blind/Deafen","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You can blind or deafen a foe. Choose one creature that you can see within range to make a Constitution saving throw. If it fails, the target is either blinded or deafened (your choice) for the duration. At the end of each of its turns, the target can make a Constitution saving throw. On a success, the power ends.</p>\n<p>Force Potency.&nbsp;When you cast this power using a force slot of 3rd level or higher, you can target one additional creature for each slot level above 2nd.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":1,"units":"minute"},"target":{"value":1,"units":"","type":"creature"},"range":{"value":30,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"save","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"con","dc":null,"scaling":"power"},"level":2,"school":"lgt","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":"level","formula":"1 additional creature"},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg","_id":"bDdyZTL7KCiz2zXR"}
{"_id":"bDdyZTL7KCiz2zXR","name":"Force Blind/Deafen","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You can blind or deafen a foe. Choose one creature that you can see within range to make a Constitution saving throw. If it fails, the target is either blinded or deafened (your choice) for the duration. At the end of each of its turns, the target can make a Constitution saving throw. On a success, the power ends.</p>\n<p>Force Potency.&nbsp;When you cast this power using a force slot of 3rd level or higher, you can target one additional creature for each slot level above 2nd.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":1,"units":"minute"},"target":{"value":1,"units":"","type":"creature"},"range":{"value":30,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"save","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"con","dc":null,"scaling":"power"},"level":2,"school":"lgt","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":"level","formula":"1 additional creature"},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg"}
{"_id":"bF7e5kbzwXj3b2LP","name":"Shock","permission":{"default":0,"9BhUyjgxIxogl2ot":3},"type":"power","data":{"description":{"value":"<p>You hurl a bolt of lightning at a target within range, making a ranged power attack. On a hit, the target takes 1d10 lightning damage. The lightning ignites flammable objects in the area that arent being worn or carried.</p>\n<p>This powers damage increases by 1d10 when you reach 5th level (2d10), 11th level (3d10), and 17th level (4d10).</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":null,"units":"inst"},"target":{"value":1,"units":"","type":"creature"},"range":{"value":120,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"rpak","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[["1d10","lightning"]],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":0,"school":"drk","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":"","prepared":false},"scaling":{"mode":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"systems/sw5e/packs/Icons/Force%20Powers/Shock.webp"}
{"name":"Locate Creature","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>Describe or name a creature familiar to you. You sense the direction to the creatures location, as long as its within 1000 feet of you. If the creature is in motion, you know the direction of its movement. The power can locate a specific creature known to you or the nearest of a specific kind, as long as you have seen it while within 30 feet of it. If the creature is in a different form, the power doesnt work. This power cant locate a creature if running water at least 10 feet wide blocks a direct path between you and the creature.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":1,"units":"minute"},"target":{"value":null,"units":null,"type":"self"},"range":{"value":null,"long":null,"units":""},"uses":{"value":0,"max":0,"per":""},"ability":null,"actionType":"","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":4,"school":"uni","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":null,"prepared":true},"scaling":{"mode":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg","_id":"bsTG22DqTxo7WQta"}
{"name":"Sonic Trick","permission":{"default":0,"XA86Wm4MjngMySbc":3},"type":"power","data":{"description":{"value":"<p>You use the Force to produce an effect within range. You create one of the following special effects within range:</p>\n<ul>\n<li>Your voice booms up to three times as loud as normal, and you can alter its tone, for 1 minute.</li>\n<li>You cause harmless tremors in the ground for 1 minute.</li>\n<li>You create an instantaneous sound that originates from a point of your choice within range, such as a rumble of thunder, the cry of a bird, or ominous whispers.</li>\n<li>You gain the ability to speak like another species for 1 minute, allowing you to speak in a language you know but otherwise lack the physical ability to speak, such as a Wookiee speaking Basic.</li>\n<li>You create an instantaneous, harmless sensory effect, such as falling leaves, a puff of wind, a billowing of someones clothes, or a flickering of unenhanced light fixtures within range.</li>\n</ul>\n<p>A wary creature can use its action to make an Intelligence (Investigation) check against your force save DC, discerning that the effects are illusory on a success.</p>\n<p>If you cast this power multiple times, you can have up to three of its 1-minute effects active at a time, and you can dismiss such an effect as an action.</p>","chat":"","unidentified":""},"source":"","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":1,"units":"minute"},"target":{"value":null,"units":"","type":""},"range":{"value":30,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"consume":{"type":"","target":"","amount":null},"ability":"","actionType":"save","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"int","dc":null,"scaling":"power"},"level":0,"school":"uni","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":"","prepared":false},"scaling":{"mode":"none","formula":""}},"flags":{},"img":"icons/svg/mystery-man.svg","_id":"bK2remeEKqu4htPZ"}
{"name":"Psychometry","permission":{"default":0,"XA86Wm4MjngMySbc":3},"type":"power","data":{"description":{"value":"<p>For the duration, you gain the ability to “communicate” telepathically with inanimate objects you touch. You can ask up to five questions and receive answers from objects, usually in the form of a auditory or visual hallucination. For example, touching the rusted, broken remains of a lightsaber and asking how it got there may result in a brief vision of a disgruntled Jedi Knight casting it to the ground on that spot. An object “questioned” in this way can only provide information relating to its past. The DM has the final say on what objects can be questioned, and to what extent.</p>","chat":"","unidentified":""},"source":"","activation":{"type":"minute","cost":1,"condition":""},"duration":{"value":10,"units":"minute"},"target":{"value":null,"units":"any","type":"object"},"range":{"value":null,"long":null,"units":"self"},"uses":{"value":0,"max":0,"per":""},"consume":{"type":"","target":"","amount":null},"ability":null,"actionType":"","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":3,"school":"uni","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":"","prepared":false},"scaling":{"mode":"none","formula":""}},"flags":{},"img":"icons/svg/mystery-man.svg","_id":"bU9gwhdaQKY5R99i"}
{"_id":"bsTG22DqTxo7WQta","name":"Locate Creature","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>Describe or name a creature familiar to you. You sense the direction to the creatures location, as long as its within 1000 feet of you. If the creature is in motion, you know the direction of its movement. The power can locate a specific creature known to you or the nearest of a specific kind, as long as you have seen it while within 30 feet of it. If the creature is in a different form, the power doesnt work. This power cant locate a creature if running water at least 10 feet wide blocks a direct path between you and the creature.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":1,"units":"minute"},"target":{"value":null,"units":null,"type":"self"},"range":{"value":null,"long":null,"units":""},"uses":{"value":0,"max":0,"per":""},"ability":null,"actionType":"","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":4,"school":"uni","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":null,"prepared":true},"scaling":{"mode":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg"}
{"_id":"bzvLe859r7CDWFIv","name":"Force Throw","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You use the Force to move a Large or smaller creature or object not being worn or carried within range. The target must make a Strength saving throw. An object automatically fails this saving throw. On a failed save, the creature or object moves a number of feet in a direction of your choice based on its size. A Tiny creature or object can be moved up to 90 feet, a Small creature or object can be moved up to 60 feet, a Medium creature or object can be moved up to 30 feet, and a Large creature or object can be moved up to 10 feet. If at the end of this movement the creature or object strikes another creature or object, they both take 2d8 force damage.</p>\n<p>Force Potency.&nbsp;When you cast this power using a force slot of 3rd level or higher, the range you can throw a creature or object increases by 10 feet, to a maximum of 90 feet, and the powers damage increases by 1d8.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":null,"units":"inst"},"target":{"value":1,"units":"","type":"creature"},"range":{"value":90,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"save","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[["2d8","force"]],"versatile":""},"formula":"","save":{"ability":"str","dc":null,"scaling":"power"},"level":2,"school":"uni","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":"level","formula":"1d8"},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]},"consume":{"type":"","target":"","amount":null}},"flags":{},"img":"icons/svg/mystery-man.svg"}
{"name":"Rebuke","permission":{"default":0,"XA86Wm4MjngMySbc":3},"type":"power","data":{"description":{"value":"<p>You strike a creature with the righteous fury of the Force. Make a melee force attack against the target, if the attack hits, the target takes force damage depending on its alignment: a dark-aligned creature takes 1d12 force damage, a balanced creature takes 1d10 force damage, and a light-aligned creature takes 1d8 force damage.</p>\n<p>The powers damage increases by one die when you reach 5th, 11th, and 17th level.</p>","chat":"","unidentified":""},"source":"","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":null,"units":"inst"},"target":{"value":1,"units":"","type":"cone"},"range":{"value":null,"long":null,"units":"touch"},"uses":{"value":0,"max":0,"per":""},"consume":{"type":"","target":"","amount":null},"ability":"","actionType":"mpak","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[["",""]],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":0,"school":"lgt","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":"","prepared":false},"scaling":{"mode":"atwill","formula":""}},"flags":{},"img":"icons/svg/mystery-man.svg","_id":"c9J29IH07qQQToFm"}
{"_id":"cCTaCxvsBcbEvbw2","name":"Saber Throw","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>As a part of the action used to cast this power, you must make a ranged force attack with a lightweapon or vibroweapon against one target within the powers range, otherwise the power fails. On a hit, the target takes 1d8 damage of the same type as the weapons damage. The weapon then immediately returns to your hand.</p>\n<p>This power can hit multiple targets when you reach higher levels: two targets at 5th level, three targets at 11th level, and four targets at 17th level. Each target must be within 30 feet of the previous target, you must make a separate attack roll for each target, and the last target must be no further than 30 feet away from you. You can not hit the same target twice in succession.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":null,"units":"inst"},"target":{"value":1,"units":"any","type":"object"},"range":{"value":30,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"rpak","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[["1d8",""]],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":0,"school":"uni","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":"atwill","formula":"1 additional target"},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]},"consume":{"type":"","target":"","amount":null}},"flags":{},"img":"systems/sw5e/packs/Icons/Force%20Powers/Saber%20Throw.webp"}
{"name":"Dark Aura","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You manifest a mantle of malevolent dark side energy to a radius of 15 feet. Each creature who enters this aura or starts its turn there must make a Wisdom saving throw. On a failed save, a creature takes 3d8 necrotic damage and has its speed reduced by half. On a succesful save, a creatures takes half as much damage and isnt slowed.</p>\n<p>Force Potency.&nbsp;When you cast this power using a force slot of 4th level or higher, the damage increases by 1d8 for each slot level above 3rd.</p>","chat":"","unidentified":""},"source":"","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":1,"units":"minute"},"target":{"value":15,"units":"ft","type":"radius"},"range":{"value":null,"long":null,"units":"self"},"uses":{"value":0,"max":0,"per":""},"consume":{"type":"","target":"","amount":null},"ability":"","actionType":"save","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[["3d8","necrotic"]],"versatile":""},"formula":"","save":{"ability":"wis","dc":null,"scaling":"power"},"level":3,"school":"drk","components":{"value":"","concentration":true},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"scaling":{"mode":"level","formula":"1d8"},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"systems/sw5e/packs/Icons/Force%20Powers/Dark%20Aura.webp","_id":"cM4TP2daTOU7tUv3"}
{"_id":"cM4TP2daTOU7tUv3","name":"Dark Aura","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You manifest a mantle of malevolent dark side energy to a radius of 15 feet. Each creature who enters this aura or starts its turn there must make a Wisdom saving throw. On a failed save, a creature takes 3d8 necrotic damage and has its speed reduced by half. On a succesful save, a creatures takes half as much damage and isnt slowed.</p>\n<p>Force Potency.&nbsp;When you cast this power using a force slot of 4th level or higher, the damage increases by 1d8 for each slot level above 3rd.</p>","chat":"","unidentified":""},"source":"","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":1,"units":"minute"},"target":{"value":15,"units":"ft","type":"radius"},"range":{"value":null,"long":null,"units":"self"},"uses":{"value":0,"max":0,"per":""},"consume":{"type":"","target":"","amount":null},"ability":"","actionType":"save","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[["3d8","necrotic"]],"versatile":""},"formula":"","save":{"ability":"wis","dc":null,"scaling":"power"},"level":3,"school":"drk","components":{"value":"","concentration":true},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"scaling":{"mode":"level","formula":"1d8"},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"systems/sw5e/packs/Icons/Force%20Powers/Dark%20Aura.webp"}
{"name":"Force Whisper","permission":{"default":0,"XA86Wm4MjngMySbc":3},"type":"power","data":{"description":{"value":"<p>You use the Force to carry a message in your voice to another creature within range. The target (and only the target) hears the message and can reply in a whisper that only you can hear.</p>\n<p>You can cast this power through solid objects if you are familiar with the target and know it is beyond the barrier. An enhanced silence effect, 1 foot of stone, 1 inch of common metal, a thin sheet of lead, or 3 feet of wood blocks the power. The power doesnt have to follow a straight line and can travel freely around corners or through openings.</p>","chat":"","unidentified":""},"source":"","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":1,"units":"round"},"target":{"value":1,"units":"","type":"creature"},"range":{"value":120,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"consume":{"type":"","target":"","amount":null},"ability":null,"actionType":"","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":0,"school":"uni","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":"","prepared":false},"scaling":{"mode":"none","formula":""}},"flags":{},"img":"icons/svg/mystery-man.svg","_id":"cVtuZmIOHV6sW8Yc"}
{"_id":"d3nRwoHE7vUvWqG0","name":"Force Breach","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>Choose a spot within range. All force powers of 5th level or lower in the area end. For each force power of 6th level or higher in the area, make an ability check using your forcecasting ability. The DC equals 10 + the powers level. On a successful check, the force power ends.</p>\n<p>Force Potency.&nbsp;When you cast this power using a force slot of 6th level or higher, you automatically end the effects of a force power on the target if the powers level is equal to or less than the level of the force slot you used.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":null,"units":"inst"},"target":{"value":20,"units":"ft","type":"cube"},"range":{"value":120,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"abil","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":5,"school":"uni","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":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]},"consume":{"type":"","target":"","amount":null}},"flags":{},"img":"systems/sw5e/packs/Icons/Force%20Powers/Force%20Breach.webp"}
{"name":"Force Enlightenment","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You touch a creature and enhance it with the Force. Choose one of the following effects; the target gains that effect until the power ends.</p>\n<ul>\n<li>Endurance.&nbsp;The target has advantage on Constitution checks. It also gains 2d6 temporary hit points, which are lost when the power ends.</li>\n<li>Strength.&nbsp;The target has advantage on Strength checks, and his or her carrying capacity doubles.</li>\n<li>Dexterity.&nbsp;The target has advantage on Dexterity checks. It also doesnt take damage from falling 20 feet or less if it isnt incapacitated.</li>\n<li>Splendor.&nbsp;The target has advantage on Charisma checks.</li>\n<li>Cunning.&nbsp;The target has advantage on Intelligence checks.</li>\n<li>Wisdom.&nbsp;The target has advantage on Wisdom checks.</li>\n</ul>\n<p>Force Potency.&nbsp;When you cast this power using a force slot of 3rd level or higher, you can target one additional creature for each slot level above 2nd.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":1,"units":"hour"},"target":{"value":1,"units":"","type":"creature"},"range":{"value":null,"long":null,"units":"touch"},"uses":{"value":0,"max":0,"per":""},"ability":null,"actionType":"","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":2,"school":"lgt","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":null,"prepared":true},"scaling":{"mode":"level","formula":"1 additional creature"},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg","_id":"di7rHBW59w6cS1WM"}
{"_id":"di7rHBW59w6cS1WM","name":"Force Enlightenment","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You touch a creature and enhance it with the Force. Choose one of the following effects; the target gains that effect until the power ends.</p>\n<ul>\n<li>Endurance.&nbsp;The target has advantage on Constitution checks. It also gains 2d6 temporary hit points, which are lost when the power ends.</li>\n<li>Strength.&nbsp;The target has advantage on Strength checks, and his or her carrying capacity doubles.</li>\n<li>Dexterity.&nbsp;The target has advantage on Dexterity checks. It also doesnt take damage from falling 20 feet or less if it isnt incapacitated.</li>\n<li>Splendor.&nbsp;The target has advantage on Charisma checks.</li>\n<li>Cunning.&nbsp;The target has advantage on Intelligence checks.</li>\n<li>Wisdom.&nbsp;The target has advantage on Wisdom checks.</li>\n</ul>\n<p>Force Potency.&nbsp;When you cast this power using a force slot of 3rd level or higher, you can target one additional creature for each slot level above 2nd.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":1,"units":"hour"},"target":{"value":1,"units":"","type":"creature"},"range":{"value":null,"long":null,"units":"touch"},"uses":{"value":0,"max":0,"per":""},"ability":null,"actionType":"","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":2,"school":"lgt","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":null,"prepared":true},"scaling":{"mode":"level","formula":"1 additional creature"},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg"}
{"name":"Force Embuement","permission":{"default":0,"XA86Wm4MjngMySbc":3},"type":"power","data":{"description":{"value":"<p>The crystal inside of a simple lightweapon or the material of a simple vibroweapon or an improvised weapon you are holding is imbued with the power of the Force. For the duration, you can use your forcecasting ability instead of Strength for the attack and damage rolls of melee attacks using that weapon, and the weapons damage die becomes a d8. The weapon also becomes enhanced, if it isnt already, and you become proficient with it, if you arent already. The power ends if you cast it again or if you let go of the weapon.</p>","chat":"","unidentified":""},"source":"","activation":{"type":"bonus","cost":1,"condition":""},"duration":{"value":1,"units":"minute"},"target":{"value":1,"units":"","type":"weapon"},"range":{"value":null,"long":null,"units":"touch"},"uses":{"value":0,"max":0,"per":""},"consume":{"type":"","target":"","amount":null},"ability":null,"actionType":"","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":0,"school":"uni","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":"","prepared":false},"scaling":{"mode":"none","formula":""}},"flags":{},"img":"icons/svg/mystery-man.svg","_id":"eRafdgDXoMj7Y5r3"}
{"_id":"eVl00unU1rsuQ0MN","name":"Improved Dark Side Tendrils","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You summon a 20-foot-radius sphere of inky blackness at a point within range. No light, enhanced or otherwise, can illuminate the area, creatures fully within the area are blinded, and the area is difficult terrain. Any creature that starts its turn in the area takes 2d6 necrotic damage. Any creature that ends its turn in the area must succeed on a Strength saving throw or take 2d6 poison damage as tendrils of dark energy caress it.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":"Have Dark Side Tendrils Power"},"duration":{"value":null,"units":""},"target":{"value":20,"units":"ft","type":"radius"},"range":{"value":150,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"save","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[["2d6","necrotic"]],"versatile":""},"formula":"2d6","save":{"ability":"str","dc":null,"scaling":"power"},"level":3,"school":"drk","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":null,"prepared":true},"scaling":{"mode":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]},"consume":{"type":"","target":"","amount":null}},"flags":{},"img":"systems/sw5e/packs/Icons/Force%20Powers/Improved%20Dark%20Side%20Tendrils.webp"}
{"_id":"eYw6j0VVVD0vEH7l","name":"Destroy Droid","permission":{"default":0,"9BhUyjgxIxogl2ot":3},"type":"power","data":{"description":{"value":"<p>Choose a point that you can see within range. Each droid or construct must succeed on a Constitution saving throw or be paralyzed for the duration. At the beginning of each of its turns, an affected target takes energy damage equal to twice your forcecasting ability modifier and then repeats this saving throw. On a success, the power ends on the target.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":null,"units":"minute"},"target":{"value":30,"units":"ft","type":"cube"},"range":{"value":120,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"save","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"con","dc":null,"scaling":"power"},"level":7,"school":"lgt","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":"","prepared":false},"scaling":{"mode":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"systems/sw5e/packs/Icons/Force%20Powers/Destroy%20Droid.webp"}
{"_id":"ebWGew0oR2CG7S43","name":"Disperse Force","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>This power absorbs damage from incoming energy attacks, lessening its effect on you and distributing it throughout your body. You have resistance to the triggering damage type until the start of your next turn. Also, you gain 5 temporary hit points to potentially absorb the attack. These temporary hit points last until the start of your next turn.</p>\n<p>Force Potency.&nbsp;When you cast this power using a force slot of 2nd level or higher, the temporary hit points increases by 5 for each slot level above 1st.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"reaction","cost":1,"condition":"which you take when you take cold, energy, fire, ion, lightning, or sonic damage"},"duration":{"value":1,"units":"round"},"target":{"value":null,"units":"","type":"self"},"range":{"value":null,"long":null,"units":""},"uses":{"value":0,"max":0,"per":""},"ability":null,"actionType":"","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":1,"school":"uni","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":"level","formula":"5 additional Temp HP"},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]},"consume":{"type":"","target":"","amount":null}},"flags":{},"img":"icons/svg/mystery-man.svg"}
{"_id":"ecDdTd9MW0z4h8Hb","name":"Sap Vitality","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>Make a melee force attack against a creature you can reach. On a hit, the target takes 3d10 necrotic damage.</p>\n<p><strong>Force Potency.</strong>&nbsp;When you cast this power using a force slot of 2nd level or higher, the damage increases by 1d10 for each slot level above 1st.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":null,"units":"inst"},"target":{"value":1,"units":"","type":"creature"},"range":{"value":null,"long":null,"units":"touch"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"mpak","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[["3d10","necrotic"]],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":1,"school":"drk","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":"level","formula":"1d10"},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]},"consume":{"type":"","target":"","amount":null}},"flags":{},"img":"systems/sw5e/packs/Icons/Force%20Powers/Sap%20Vitality.webp"}
{"name":"Force Trance","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You make a calming gesture, and up to three willing creatures of your choice that you can see within range fall unconscious for the powers duration. The power ends on a target early if it takes damage or someone uses an action to shake or slap it awake. If a target remains unconscious for the full duration, that target gains the benefit of a short rest, and it cant be affected by this power again until it finishes a long rest.</p>\n<p>Force Potency.&nbsp;When you cast this power using a force slot of 4th level or higher, you can target one additional willing creature for each slot level above 3rd.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":10,"units":"minute"},"target":{"value":3,"units":"","type":"creature"},"range":{"value":30,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":null,"actionType":"","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":3,"school":"lgt","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":"level","formula":"1 additional creature"},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg","_id":"esyvxlavJubgPNmj"}
{"_id":"esyvxlavJubgPNmj","name":"Force Trance","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You make a calming gesture, and up to three willing creatures of your choice that you can see within range fall unconscious for the powers duration. The power ends on a target early if it takes damage or someone uses an action to shake or slap it awake. If a target remains unconscious for the full duration, that target gains the benefit of a short rest, and it cant be affected by this power again until it finishes a long rest.</p>\n<p>Force Potency.&nbsp;When you cast this power using a force slot of 4th level or higher, you can target one additional willing creature for each slot level above 3rd.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":10,"units":"minute"},"target":{"value":3,"units":"","type":"creature"},"range":{"value":30,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":null,"actionType":"","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":3,"school":"lgt","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":"level","formula":"1 additional creature"},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg"}
{"_id":"f41D14g0yIBuXUka","name":"Force Immunity","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>An immobile, faintly shimmering barrier springs into existence around you and remains for the duration. The barrier moves with you. Any force power of 3rd level or lower cast from outside the barrier cant affect you, even if the power is cast using a higher level force slot. Such a power can target you, but the power has no effect on you. Similarly, the area within the barrier is excluded from the areas affected by such powers.</p>\n<p>Force Potency.&nbsp;When you cast this power using a force slot of 5th level or higher, the barrier blocks powers of one level higher for each slot level above 4th.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":1,"units":"minute"},"target":{"value":null,"units":"","type":"self"},"range":{"value":null,"long":null,"units":""},"uses":{"value":0,"max":0,"per":""},"ability":null,"actionType":"","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":4,"school":"uni","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":null,"prepared":true},"scaling":{"mode":"level","formula":"1 additional slot"},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]},"consume":{"type":"","target":"","amount":null}},"flags":{},"img":"systems/sw5e/packs/Icons/Force%20Powers/Force%20Immunity.webp"}
{"_id":"faTYDaOejYHPfXdl","name":"Earthquake","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You create a seismic disturbance at a point on the ground that you can see within range. For the duration, an intense tremor rips through the ground in a 100-foot-radius circle centered on that point and shakes creatures and structures in contact with the ground in that area.</p>\n<p>The ground in the area becomes difficult terrain. Each creature on the ground that is concentrating must make a Constitution saving throw. On a failed save, the creatures concentration is broken.</p>\n<p>When you cast this power and at the end of each turn you spend concentrating on it, each creature on the ground in the area must make a Dexterity saving throw. On a failed save, the creature is knocked prone.</p>\n<p>This power can have additional effects depending on the terrain in the area, as determined by the GM.</p>\n<p><strong>Fissures.</strong>&nbsp;Fissures open throughout the powers area at the start of your next turn after you cast the power. A total of 1d6 such fissures open in locations chosen by the GM. Each is 1d10 x 10 feet deep, 10 feet wide, and extends from one edge of the powers area to the opposite side. A creature standing on a spot where a fissure opens must succeed on a Dexterity saving throw or fall in. A creature that successfully saves moves with the fissures edge as it opens.</p>\n<p>A fissure that opens beneath a structure causes it to automatically collapse (see below).</p>\n<p><strong>Structures.&nbsp;</strong>The tremor deals 50 kinetic damage to any structure in contact with the ground in the area when you cast the power and at the start of each of your turns until the power ends. If a structure drops to 0 hit points, it collapses and potentially damages nearby creatures. A creature within half the distance of a structures height must make a Dexterity saving throw. On a failed save, the creature takes 5d6 kinetic damage, is knocked prone, and is buried in the rubble, requiring a DC 20 Strength (Athletics) check as an action to escape. The GM can adjust the DC higher or lower, depending on the nature of the rubble. On a successful save, the creature takes half as much damage and doesnt fall prone or become buried.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":1,"units":"minute"},"target":{"value":100,"units":"ft","type":"radius"},"range":{"value":500,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"save","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"dex","dc":null,"scaling":"power"},"level":8,"school":"uni","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":null,"prepared":true},"scaling":{"mode":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]},"consume":{"type":"","target":"","amount":null}},"flags":{},"img":"icons/svg/mystery-man.svg"}
{"name":"Resistance","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You touch one willing creature. Once before the power ends, the target can roll a d4 and add the number rolled to one saving throw of its choice. It can roll the die before or after the saving throw. The power then ends.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":1,"units":"minute"},"target":{"value":1,"units":"","type":"creature"},"range":{"value":null,"long":null,"units":"touch"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"other","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"1d4","save":{"ability":"","dc":null,"scaling":"power"},"level":0,"school":"uni","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":null,"prepared":true},"scaling":{"mode":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg","_id":"fcs6lsi5hMfPOgRb"}
{"name":"Improved Revitalize","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You return a dead creature you touch to life, provided that it has been dead no longer than 1 hour. If the creatures soul is both willing and at liberty to rejoin the body, the creature returns to life with all its hit points.</p>\n<p>This power also neutralizes any poisons and cures diseases that affected the creature at the time it died.</p>\n<p>This power closes all mortal wounds and restores any missing body parts.</p>\n<p>Coming back from the dead is an ordeal. The target takes a -4 penalty to all attack rolls, saving throws, and ability checks. Every time the target finishes a long rest, the penalty is reduced by 1 until it disappears.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"minute","cost":10,"condition":""},"duration":{"value":null,"units":"inst"},"target":{"value":1,"units":"","type":"creature"},"range":{"value":null,"long":null,"units":"touch"},"uses":{"value":0,"max":0,"per":""},"ability":null,"actionType":"","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":7,"school":"lgt","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":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg","_id":"gpUbIaRtv1y7qinF"}
{"name":"Grasping Vine","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You make a vine sprout from the ground in an unoccupied space you can see. When you cast this power, you can make the vine whip a creature up to 30 feet from it, if you can see the target. The creature must pass a Dexterity save or be pulled 20 feet directly toward the vine.</p>\n<p>Until the power ends, you can use your bonus action to have the vine lash out again.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"bonus","cost":1,"condition":""},"duration":{"value":1,"units":"minute"},"target":{"value":5,"units":"ft","type":"cube"},"range":{"value":30,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"save","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"dex","dc":null,"scaling":"power"},"level":4,"school":"lgt","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":null,"prepared":true},"scaling":{"mode":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg","_id":"gtBIhjewL9Ie8Qdx"}
{"_id":"fcs6lsi5hMfPOgRb","name":"Resistance","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You touch one willing creature. Once before the power ends, the target can roll a d4 and add the number rolled to one saving throw of its choice. It can roll the die before or after the saving throw. The power then ends.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":1,"units":"minute"},"target":{"value":1,"units":"","type":"creature"},"range":{"value":null,"long":null,"units":"touch"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"other","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"1d4","save":{"ability":"","dc":null,"scaling":"power"},"level":0,"school":"uni","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":null,"prepared":true},"scaling":{"mode":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg"}
{"_id":"gpUbIaRtv1y7qinF","name":"Improved Revitalize","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You return a dead creature you touch to life, provided that it has been dead no longer than 1 hour. If the creatures soul is both willing and at liberty to rejoin the body, the creature returns to life with all its hit points.</p>\n<p>This power also neutralizes any poisons and cures diseases that affected the creature at the time it died.</p>\n<p>This power closes all mortal wounds and restores any missing body parts.</p>\n<p>Coming back from the dead is an ordeal. The target takes a -4 penalty to all attack rolls, saving throws, and ability checks. Every time the target finishes a long rest, the penalty is reduced by 1 until it disappears.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"minute","cost":10,"condition":""},"duration":{"value":null,"units":"inst"},"target":{"value":1,"units":"","type":"creature"},"range":{"value":null,"long":null,"units":"touch"},"uses":{"value":0,"max":0,"per":""},"ability":null,"actionType":"","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":7,"school":"lgt","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":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg"}
{"_id":"gtBIhjewL9Ie8Qdx","name":"Grasping Vine","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You make a vine sprout from the ground in an unoccupied space you can see. When you cast this power, you can make the vine whip a creature up to 30 feet from it, if you can see the target. The creature must pass a Dexterity save or be pulled 20 feet directly toward the vine.</p>\n<p>Until the power ends, you can use your bonus action to have the vine lash out again.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"bonus","cost":1,"condition":""},"duration":{"value":1,"units":"minute"},"target":{"value":5,"units":"ft","type":"cube"},"range":{"value":30,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"save","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"dex","dc":null,"scaling":"power"},"level":4,"school":"lgt","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":null,"prepared":true},"scaling":{"mode":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg"}
{"_id":"gun3oYV4VVqZvZRn","name":"Mind Spike","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>Choose one creature you can see. The target must make a Wisdom saving throw. A creature takes 3d8 psychic damage on a failed save, or half as much damage on a successful one. Additionally, on a failed save, you always know the targets location, but only while the two of you are on the same planet. The target cant become hidden from you, and if its invisible, it gains no benefits from this condition against you. This power has no effect on droids or constructs.</p>","chat":"","unidentified":""},"source":"","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":1,"units":"hour"},"target":{"value":1,"units":"","type":"creature"},"range":{"value":60,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"save","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[["3d6","psychic"]],"versatile":""},"formula":"","save":{"ability":"wis","dc":null,"scaling":"power"},"level":2,"school":"drk","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":null,"prepared":true},"scaling":{"mode":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]},"consume":{"type":"","target":"","amount":null}},"flags":{},"img":"systems/sw5e/packs/Icons/Force%20Powers/Mind%20Spike.webp"}
{"_id":"haGnWeBa6QhTG9Dh","name":"Fear","permission":{"default":0,"9BhUyjgxIxogl2ot":3},"type":"power","data":{"description":{"value":"<p>You awaken the sense of mortality in one creature you can see within range. The target must succeed on a Wisdom saving throw or become frightened for the duration. A target with 25 hit points or fewer makes the saving throw with disadvantage. This power has no effect on constructs or droids.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":1,"units":"minute"},"target":{"value":1,"units":"","type":"creature"},"range":{"value":60,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"save","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"wis","dc":null,"scaling":"power"},"level":1,"school":"drk","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":"","prepared":false},"scaling":{"mode":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"systems/sw5e/packs/Icons/Force%20Powers/Fear.webp"}
{"name":"Force Camoflage","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You become invisible until the power ends. Anything you are wearing or carrying is invisible as long as it is on your person. The power ends if you attack or cast a power.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":1,"units":"hour"},"target":{"value":null,"units":null,"type":"self"},"range":{"value":null,"long":null,"units":""},"uses":{"value":0,"max":0,"per":""},"ability":null,"actionType":"","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":2,"school":"uni","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":null,"prepared":true},"scaling":{"mode":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg","_id":"i1N033vPzDom3Kpj"}
{"_id":"i1N033vPzDom3Kpj","name":"Force Camoflage","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You become invisible until the power ends. Anything you are wearing or carrying is invisible as long as it is on your person. The power ends if you attack or cast a power.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":1,"units":"hour"},"target":{"value":null,"units":null,"type":"self"},"range":{"value":null,"long":null,"units":""},"uses":{"value":0,"max":0,"per":""},"ability":null,"actionType":"","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":2,"school":"uni","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":null,"prepared":true},"scaling":{"mode":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg"}
{"_id":"iWTTNyNi2mwVDlUF","name":"Force Body","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>This power enables you to use your health to fuel your force powers. For the duration, when you cast a force power, half the cost is paid by your force points (rounded up) and half the cost is paid by your hit points (rounded down). Additionally, your maximum hit points are decreased by this amount while the power is active.</p>\n<p>You may end this effect at any time. If you cast a force power that would reduce your hit points to 0, the power automatically fails and this effect ends.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":1,"units":"hour"},"target":{"value":null,"units":"","type":"self"},"range":{"value":null,"long":null,"units":""},"uses":{"value":0,"max":0,"per":""},"ability":null,"actionType":"","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":1,"school":"uni","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":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]},"consume":{"type":"","target":"","amount":null}},"flags":{},"img":"systems/sw5e/packs/Icons/Force%20Powers/Force%20Body.webp"}
{"name":"Mass Coerce Mind","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You suggest a course of activity (limited to a sentence or two) and influence with the Force up to twelve creatures of your choice that you can see within range and that can hear and understand you. Creatures that cant be charmed are immune to this effect. The suggestion must be worded in such a manner as to make the course of action sound reasonable. Asking the creature to harm itself automatically negates the effect of the power.</p>\n<p>Each target must make a Wisdom saving throw. On a failed save, it pursues the course of action you described to the best of its ability. The suggested course of action can continue for the entire duration. If the suggested activity can be completed in a shorter time, the power ends when the subject finishes what it was asked to do.</p>\n<p>You can also specify conditions that will trigger a special activity during the duration. For example, you might suggest that a group of soldiers give all their money to the first beggar they meet. If the condition isnt met before the power ends, the activity isnt performed. If you or any of your companions damage a creature affected by this power, the power ends for that creature. This power has no effect on droids or constructs.</p>\n<p>Force Potency.&nbsp;When you cast this power using a 7th-level force slot, the duration is 10 days. When you use an 8th-level force slot, the duration is 30 days. When you use a 9th-level force slot, the duration is a year and a day.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":24,"units":"hour"},"target":{"value":12,"units":"","type":"creature"},"range":{"value":60,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":null,"actionType":"","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":6,"school":"uni","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":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg","_id":"jmFTPxWQXJENvQtQ"}
{"_id":"jmFTPxWQXJENvQtQ","name":"Mass Coerce Mind","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You suggest a course of activity (limited to a sentence or two) and influence with the Force up to twelve creatures of your choice that you can see within range and that can hear and understand you. Creatures that cant be charmed are immune to this effect. The suggestion must be worded in such a manner as to make the course of action sound reasonable. Asking the creature to harm itself automatically negates the effect of the power.</p>\n<p>Each target must make a Wisdom saving throw. On a failed save, it pursues the course of action you described to the best of its ability. The suggested course of action can continue for the entire duration. If the suggested activity can be completed in a shorter time, the power ends when the subject finishes what it was asked to do.</p>\n<p>You can also specify conditions that will trigger a special activity during the duration. For example, you might suggest that a group of soldiers give all their money to the first beggar they meet. If the condition isnt met before the power ends, the activity isnt performed. If you or any of your companions damage a creature affected by this power, the power ends for that creature. This power has no effect on droids or constructs.</p>\n<p>Force Potency.&nbsp;When you cast this power using a 7th-level force slot, the duration is 10 days. When you use an 8th-level force slot, the duration is 30 days. When you use a 9th-level force slot, the duration is a year and a day.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":24,"units":"hour"},"target":{"value":12,"units":"","type":"creature"},"range":{"value":60,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":null,"actionType":"","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":6,"school":"uni","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":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg"}
{"_id":"kLwHklnrWPw9jKm6","name":"Drain Vitality","permission":{"default":0,"9BhUyjgxIxogl2ot":3},"type":"power","data":{"description":{"value":"<p>You draw the willpower from a creature you can see within range. Make a ranged force attack against the target. On a hit, the target takes 2d6 necrotic damage and it deals only half damage with weapon attacks that use Strength until the power ends.</p>\n<p>At the end of each of the targets turns, it can make a Constitution saving throw against the power. On a success, the power ends.</p>\n<p>Force Potency.&nbsp;When you cast this power using a force slot of 3rd level or higher, the damage increases by 1d6 for each slot level above 2nd.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":1,"units":"minute"},"target":{"value":1,"units":"","type":"creature"},"range":{"value":60,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"rpak","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[["2d6","necrotic"]],"versatile":""},"formula":"","save":{"ability":"con","dc":null,"scaling":"power"},"level":2,"school":"drk","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":"","prepared":false},"scaling":{"mode":"level","formula":"1d6"},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"systems/sw5e/packs/Icons/Force%20Powers/Drain%20Vitality.webp"}
{"_id":"kNiT2BD3eIgE1zys","name":"Force Push/Pull","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You gain the minor ability to move or manipulate creatures and objects with the Force. You can exert fine control on objects with your telekinetic grip, such as manipulating a simple tool, opening a door or a container, stowing or retrieving an item from an open container, or pouring the contents from a vial. Alternatively, you can push or pull a creature or object you can see.</p>\n<p>You use the Force to move a Medium or smaller creature or object not being worn or carried within range. The target must make a Strength saving throw. An object automatically fails this saving throw. On a failed save, the creature or object moves a number of feet in a direction of your choice based on its size. A Tiny creature or object can be moved up to 20 feet, a Small creature or object can be moved up to 10 feet, and a Medium creature or object can be moved up to 5 feet. If at the end of this movement the creature or object strikes another creature or object, they both take 1d4 kinetic damage.</p>\n<p>This power improves when you reach higher levels. At 5th level, you can move a Tiny creature or object up to 30 feet, a Small creature or object up to 20 feet, a Medium creature or object up to 10 feet, and the powers damage increases to 2d4 kinetic damage. At 11th level, you can move a Small creature or object up to 30 feet, a Medium creature up to 20 feet, and the powers damage increases to 3d4 kinetic damage. At 17th level, you can move a Medium creature to up 30 feet, and the powers damage increases to 4d4 kinetic damage.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":null,"units":"inst"},"target":{"value":1,"units":"","type":"creature"},"range":{"value":60,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"save","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[["1d4","kinetic"]],"versatile":""},"formula":"","save":{"ability":"str","dc":null,"scaling":"power"},"level":0,"school":"uni","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":"atwill","formula":"1d4"},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]},"consume":{"type":"","target":"","amount":null}},"flags":{},"img":"systems/sw5e/packs/Icons/Force%20Powers/Force%20Push.webp"}
{"name":"Wall of Light","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You conjure an immense manifestation of destructive light side Force energy. The wall appears within range and lasts for the duration. You can make a straight wall up to 100 feet long, 20 feet high, and 5 feet thick, or a ringed wall up to 60 feet in diameter, 20 feet high, and 5 feet thick. The wall provides three-quarters cover and its space is difficult terrain.</p>\n<p>When a creature enters the walls area for the first time on a turn or starts its turn there, it must make a Dexterity saving throw. On a failed save, the creature takes 6d10 force damage, or half as much on a success.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":10,"units":"minute"},"target":{"value":100,"units":"ft","type":"wall"},"range":{"value":90,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"save","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[["6d10","force"]],"versatile":""},"formula":"","save":{"ability":"dex","dc":null,"scaling":"power"},"level":6,"school":"lgt","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":null,"prepared":true},"scaling":{"mode":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg","_id":"kY1b6BbuiWdIkeYq"}
{"_id":"kY1b6BbuiWdIkeYq","name":"Wall of Light","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You conjure an immense manifestation of destructive light side Force energy. The wall appears within range and lasts for the duration. You can make a straight wall up to 100 feet long, 20 feet high, and 5 feet thick, or a ringed wall up to 60 feet in diameter, 20 feet high, and 5 feet thick. The wall provides three-quarters cover and its space is difficult terrain.</p>\n<p>When a creature enters the walls area for the first time on a turn or starts its turn there, it must make a Dexterity saving throw. On a failed save, the creature takes 6d10 force damage, or half as much on a success.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":10,"units":"minute"},"target":{"value":100,"units":"ft","type":"wall"},"range":{"value":90,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"save","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[["6d10","force"]],"versatile":""},"formula":"","save":{"ability":"dex","dc":null,"scaling":"power"},"level":6,"school":"lgt","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":null,"prepared":true},"scaling":{"mode":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg"}
{"_id":"l2O0YEzxgHek0gpL","name":"Master Heal","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>A wave of healing energy washes over the creature you touch. The target regains all its hit points. If the creature is charmed, frightened, paralyzed, or stunned, the condition ends. If the creature is prone, it can use its reaction to stand up. This power has no effect on droids or constructs.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":null,"units":"inst"},"target":{"value":1,"units":"","type":"creature"},"range":{"value":null,"long":null,"units":"touch"},"uses":{"value":0,"max":0,"per":""},"ability":null,"actionType":"","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":9,"school":"lgt","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":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]},"consume":{"type":"","target":"","amount":null}},"flags":{},"img":"systems/sw5e/packs/Icons/Force%20Powers/Master%20Heal.webp"}
{"name":"Slow","permission":{"default":0,"9BhUyjgxIxogl2ot":3},"type":"power","data":{"description":{"value":"<p>A hostile creature of your choice must make a Constitution saving throw. On a failed save, the targets speed decreases by 10 feet until the power ends.</p>\n<p>The targets speed decreases by 5 more feet when you reach 5th level (15 feet), 11th level (20 feet), and 17th level (25 feet).</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":1,"units":"hour"},"target":{"value":1,"units":"","type":"enemy"},"range":{"value":15,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"save","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"con","dc":null,"scaling":"power"},"level":0,"school":"drk","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":"","prepared":false},"scaling":{"mode":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"systems/sw5e/packs/Icons/Force%20Powers/Slow.webp","_id":"maQoLsCcelDb2hWJ"}
{"name":"Telekinesis","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You gain the ability to move or manipulate creatures and objects with the Force. When you cast this power, and as your action each round for the duration, you can exert your will on one creature or object that you can see within range, causing the appropriate effect below. You can affect the same target round after round, or choose a new one at any time. If you switch targets, the prior target is no longer affected by the power.</p>\n<p><strong>Creature.</strong>&nbsp;You can try to move a Huge or smaller creature. The target must make a Strength saving throw. On a failed save, you move the creature up to 30 feet in any direction, including upward but not beyond the range of this power. Until the end of your next turn, the creature is restrained in your telekinetic grip. A creature lifted upward is suspended in mid-air.</p>\n<p>On subsequent rounds, you can use your action to attempt to maintain your telekinetic grip on the creature by repeating the contest.</p>\n<p><strong>Object.</strong>&nbsp;You move an object that isnt being worn or carried and weighs up to 2,500 lbs up to 30 feet in any direction, but not beyond the range of this power.</p>\n<p>You can exert fine control on objects with your telekinetic grip, such as manipulating a simple tool, opening a door or a container, stowing or retrieving an item from an open container, or pouring the contents from a vial.</p>\n<p>Force Potency.&nbsp;When you cast this power using a force slot of 6th level or higher, the maximum object weight increases by 2,500 lbs for every slot level above 5th.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":10,"units":"minute"},"target":{"value":1,"units":"any","type":"object"},"range":{"value":90,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"save","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"str","dc":null,"scaling":"power"},"level":5,"school":"uni","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":null,"prepared":true},"scaling":{"mode":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg","_id":"mnwPexAofsIOp8dD"}
{"name":"Share Life","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You sacrifice some of your health to mend another creatures injuries. You take 4d8 necrotic damage, and one creature of your choice that you can see within range regains a number of hit points equal to twice the necrotic damage you take. This power has no effect on droids or constructs.</p>\n<p>Force Potency.&nbsp;When you cast this power using a force slot of 4th level or higher, the damage increases by 1d8 for each slot level above 3rd.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":null,"units":"inst"},"target":{"value":1,"units":"","type":"creature"},"range":{"value":30,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"other","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[["4d8","necrotic"]],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":3,"school":"lgt","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":"level","formula":"1d8"},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg","_id":"ntUNXx3Uag6BjJJH"}
{"name":"Stasis Field","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>Choose a point that you can see within range. Each creature within range of that point must succeed on a Wisdom saving throw or be paralyzed for the duration. At the end of each of a targets turns, it can make another Wisdom saving throw. On a success, the power ends on the target. This power has no effect on droids or constructs.</p>\n<p>Force Potency.&nbsp;When you cast this power using a force slot of 9th level, the size of the cube increases to 40 feet.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":1,"units":"minute"},"target":{"value":30,"units":"ft","type":"creature"},"range":{"value":120,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"save","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"wis","dc":null,"scaling":"power"},"level":8,"school":"lgt","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":null,"prepared":true},"scaling":{"mode":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg","_id":"oF7fFDz9xqC9ICzm"}
{"name":"Telemetry","permission":{"default":0,"XA86Wm4MjngMySbc":3},"type":"power","data":{"description":{"value":"<p>You choose one object that you must touch throughout the casting of the power. If it is an enhanced or modified item, you learn its properties and how to use them, whether it requires attunement to use, and how many charges it has, if any. You learn whether any powers are affecting the item and what they are.</p>\n<p>If the item was created by a power, you learn which power created it. If you instead touch a creature throughout the casting, you learn what force powers, if any, are currently affecting it.</p>","chat":"","unidentified":""},"source":"","activation":{"type":"minute","cost":1,"condition":""},"duration":{"value":null,"units":"inst"},"target":{"value":1,"units":"","type":"object"},"range":{"value":null,"long":null,"units":"touch"},"uses":{"value":0,"max":0,"per":""},"consume":{"type":"","target":"","amount":null},"ability":null,"actionType":"","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":1,"school":"uni","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":"","prepared":false},"scaling":{"mode":"none","formula":""}},"flags":{},"img":"icons/svg/mystery-man.svg","_id":"l88fYgzGm5J23jgf"}
{"name":"Force Blinding","permission":{"default":0,"XA86Wm4MjngMySbc":3},"type":"power","data":{"description":{"value":"<p>You use the Force to emit a blinding flash of light from your hand. Roll 6d10, the total is how many hit points of creatures this power can effect. Creatures in a 15-foot cone originating from you are affected in ascending order of their current hit points (ignoring unconscious creatures and creatures that cant see).</p>\n<p>Starting with the creature that has the lowest current hit points, each creature affected by this power is blinded until the power ends. Subtract each creatures hit points from the total before moving on to the creature with the next lowest hit points. A creatures hit points must be equal to or less than the remaining total for the creature to be affected.</p>\n<p>Force Potency.&nbsp;When you cast this power using a force slot of 2nd level or higher, roll an additional 2d10 for each slot level above 1st.</p>","chat":"","unidentified":""},"source":"","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":1,"units":"round"},"target":{"value":15,"units":"ft","type":"cone"},"range":{"value":null,"long":null,"units":"self"},"uses":{"value":0,"max":0,"per":""},"consume":{"type":"","target":"","amount":null},"ability":"","actionType":"other","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"6d10","save":{"ability":"","dc":null,"scaling":"power"},"level":1,"school":"lgt","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":"","prepared":false},"scaling":{"mode":"level","formula":"2d10"}},"flags":{},"img":"icons/svg/mystery-man.svg","_id":"mDhD0APXsJ9tDa01"}
{"_id":"maQoLsCcelDb2hWJ","name":"Slow","permission":{"default":0,"9BhUyjgxIxogl2ot":3},"type":"power","data":{"description":{"value":"<p>A hostile creature of your choice must make a Constitution saving throw. On a failed save, the targets speed decreases by 10 feet until the power ends.</p>\n<p>The targets speed decreases by 5 more feet when you reach 5th level (15 feet), 11th level (20 feet), and 17th level (25 feet).</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":1,"units":"hour"},"target":{"value":1,"units":"","type":"enemy"},"range":{"value":15,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"save","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"con","dc":null,"scaling":"power"},"level":0,"school":"drk","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":"","prepared":false},"scaling":{"mode":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"systems/sw5e/packs/Icons/Force%20Powers/Slow.webp"}
{"_id":"mnwPexAofsIOp8dD","name":"Telekinesis","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You gain the ability to move or manipulate creatures and objects with the Force. When you cast this power, and as your action each round for the duration, you can exert your will on one creature or object that you can see within range, causing the appropriate effect below. You can affect the same target round after round, or choose a new one at any time. If you switch targets, the prior target is no longer affected by the power.</p>\n<p><strong>Creature.</strong>&nbsp;You can try to move a Huge or smaller creature. The target must make a Strength saving throw. On a failed save, you move the creature up to 30 feet in any direction, including upward but not beyond the range of this power. Until the end of your next turn, the creature is restrained in your telekinetic grip. A creature lifted upward is suspended in mid-air.</p>\n<p>On subsequent rounds, you can use your action to attempt to maintain your telekinetic grip on the creature by repeating the contest.</p>\n<p><strong>Object.</strong>&nbsp;You move an object that isnt being worn or carried and weighs up to 2,500 lbs up to 30 feet in any direction, but not beyond the range of this power.</p>\n<p>You can exert fine control on objects with your telekinetic grip, such as manipulating a simple tool, opening a door or a container, stowing or retrieving an item from an open container, or pouring the contents from a vial.</p>\n<p>Force Potency.&nbsp;When you cast this power using a force slot of 6th level or higher, the maximum object weight increases by 2,500 lbs for every slot level above 5th.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":10,"units":"minute"},"target":{"value":1,"units":"any","type":"object"},"range":{"value":90,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"save","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"str","dc":null,"scaling":"power"},"level":5,"school":"uni","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":null,"prepared":true},"scaling":{"mode":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg"}
{"_id":"ntUNXx3Uag6BjJJH","name":"Share Life","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You sacrifice some of your health to mend another creatures injuries. You take 4d8 necrotic damage, and one creature of your choice that you can see within range regains a number of hit points equal to twice the necrotic damage you take. This power has no effect on droids or constructs.</p>\n<p>Force Potency.&nbsp;When you cast this power using a force slot of 4th level or higher, the damage increases by 1d8 for each slot level above 3rd.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":null,"units":"inst"},"target":{"value":1,"units":"","type":"creature"},"range":{"value":30,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"other","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[["4d8","necrotic"]],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":3,"school":"lgt","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":"level","formula":"1d8"},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg"}
{"_id":"oF7fFDz9xqC9ICzm","name":"Stasis Field","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>Choose a point that you can see within range. Each creature within range of that point must succeed on a Wisdom saving throw or be paralyzed for the duration. At the end of each of a targets turns, it can make another Wisdom saving throw. On a success, the power ends on the target. This power has no effect on droids or constructs.</p>\n<p>Force Potency.&nbsp;When you cast this power using a force slot of 9th level, the size of the cube increases to 40 feet.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":1,"units":"minute"},"target":{"value":30,"units":"ft","type":"creature"},"range":{"value":120,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"save","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"wis","dc":null,"scaling":"power"},"level":8,"school":"lgt","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":null,"prepared":true},"scaling":{"mode":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg"}
{"_id":"oPi4Y7zezP7MxNDK","name":"Force Jump","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>Using the Force to augment the strength in your legs, you leap up to 30 feet to an unoccupied space you can see.</p>\n<p>Force Potency.&nbsp;When you cast this power using a force slot of 2nd level or higher, your jump distance increases by 5 feet for each slot level above 1st.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":null,"units":"inst"},"target":{"value":null,"units":"","type":"self"},"range":{"value":null,"long":null,"units":""},"uses":{"value":0,"max":0,"per":""},"ability":null,"actionType":"","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":1,"school":"uni","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":"level","formula":"5 additional feet"},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]},"consume":{"type":"","target":"","amount":null}},"flags":{},"img":"icons/svg/mystery-man.svg"}
{"name":"Phasewalk","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You teleport up to 30 feet to an unoccupied space that you can see.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"bonus","cost":1,"condition":""},"duration":{"value":null,"units":"inst"},"target":{"value":null,"units":null,"type":"self"},"range":{"value":null,"long":null,"units":""},"uses":{"value":0,"max":0,"per":""},"ability":null,"actionType":"","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":2,"school":"uni","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":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg","_id":"or5ZY4T4t1wJJ5ad"}
{"_id":"or5ZY4T4t1wJJ5ad","name":"Phasewalk","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You teleport up to 30 feet to an unoccupied space that you can see.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"bonus","cost":1,"condition":""},"duration":{"value":null,"units":"inst"},"target":{"value":null,"units":null,"type":"self"},"range":{"value":null,"long":null,"units":""},"uses":{"value":0,"max":0,"per":""},"ability":null,"actionType":"","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":2,"school":"uni","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":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg"}
{"_id":"peef6HzwqX0231BB","name":"Hysteria","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You tap into the nightmares of a creature you can see within range and create an illusory manifestation of its deepest fears, visible only to that creature. The target becomes frightened for the duration. At the end of each of the targets turns before the power ends, the target must succeed on a Wisdom saving throw or take 4d10 psychic damage. On a successful save, the power ends. This power has no effect on droids or constructs.</p>\n<p><strong>Force Potency</strong>.&nbsp;When you cast this power using a force power slot of 5th level or higher, the damage increases by 1d10 for each slot level above 4th.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":"Have Hallucination Powerq"},"duration":{"value":1,"units":"minute"},"target":{"value":1,"units":"","type":"creature"},"range":{"value":120,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"save","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[["4d10","psychic"]],"versatile":""},"formula":"","save":{"ability":"wis","dc":null,"scaling":"power"},"level":4,"school":"drk","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":null,"prepared":true},"scaling":{"mode":"level","formula":"1d10"},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]},"consume":{"type":"","target":"","amount":null}},"flags":{},"img":"systems/sw5e/packs/Icons/Force%20Powers/Hysteria.webp"}
{"name":"Calm Emotions","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You attempt to suppress strong emotions in a group of people. Each humanoid in a 20-foot-radius sphere centered on a point you choose within range must make a Charisma saving throw a creature can choose to fail this saving throw if it wishes. If a creature fails its saving throw, choose one of the following two effects.</p>\n<ul>\n<li>You can suppress any effect causing a target to be charmed or frightened. When this power ends, any suppressed effect resumes, provided that its duration has not expired in the meantime.</li>\n<li>You can make a target indifferent about creatures of your choice that it is hostile toward. This indifference ends if the target is attacked or harmed by a power or if it witnesses any of its friends being harmed.</li>\n</ul>\n<p>When the power ends, the creature becomes hostile again, unless the GM rules otherwise.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":1,"units":"minute"},"target":{"value":20,"units":"ft","type":"sphere"},"range":{"value":60,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"save","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"cha","dc":null,"scaling":"power"},"level":2,"school":"lgt","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":null,"prepared":true},"scaling":{"mode":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg","_id":"qIelaqr9e9Cn0W8O"}
{"name":"Telekinetic Burst","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>A beam of Force energy flashes out from your hand in a 5-foot-wide, 60-foot-long line. Each creature in the line must make a Constitution saving throw. On a failed save, a creature takes 8d6 force damage and is knocked prone. On a successful save, it takes half as much damage and isnt knocked prone.</p>\n<p>You can create a new telekinetic gust as your action on your turn until the power ends.</p>\n<p>Force Potency.&nbsp;When you cast this power using a force slot of 7th level or higher, the damage increases by 2d6 for each slot level above 6th.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":1,"units":"minute"},"target":{"value":60,"units":"ft","type":"line"},"range":{"value":null,"long":null,"units":"self"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"save","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[["8d6","force"]],"versatile":""},"formula":"","save":{"ability":"con","dc":null,"scaling":"power"},"level":6,"school":"lgt","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":null,"prepared":true},"scaling":{"mode":"level","formula":"2d6"},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg","_id":"qYnIKhpoJpSflVZh"}
{"_id":"qIelaqr9e9Cn0W8O","name":"Calm Emotions","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You attempt to suppress strong emotions in a group of people. Each humanoid in a 20-foot-radius sphere centered on a point you choose within range must make a Charisma saving throw a creature can choose to fail this saving throw if it wishes. If a creature fails its saving throw, choose one of the following two effects.</p>\n<ul>\n<li>You can suppress any effect causing a target to be charmed or frightened. When this power ends, any suppressed effect resumes, provided that its duration has not expired in the meantime.</li>\n<li>You can make a target indifferent about creatures of your choice that it is hostile toward. This indifference ends if the target is attacked or harmed by a power or if it witnesses any of its friends being harmed.</li>\n</ul>\n<p>When the power ends, the creature becomes hostile again, unless the GM rules otherwise.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":1,"units":"minute"},"target":{"value":20,"units":"ft","type":"sphere"},"range":{"value":60,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"save","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"cha","dc":null,"scaling":"power"},"level":2,"school":"lgt","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":null,"prepared":true},"scaling":{"mode":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg"}
{"_id":"qYnIKhpoJpSflVZh","name":"Telekinetic Burst","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>A beam of Force energy flashes out from your hand in a 5-foot-wide, 60-foot-long line. Each creature in the line must make a Constitution saving throw. On a failed save, a creature takes 8d6 force damage and is knocked prone. On a successful save, it takes half as much damage and isnt knocked prone.</p>\n<p>You can create a new telekinetic gust as your action on your turn until the power ends.</p>\n<p>Force Potency.&nbsp;When you cast this power using a force slot of 7th level or higher, the damage increases by 2d6 for each slot level above 6th.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":1,"units":"minute"},"target":{"value":60,"units":"ft","type":"line"},"range":{"value":null,"long":null,"units":"self"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"save","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[["8d6","force"]],"versatile":""},"formula":"","save":{"ability":"con","dc":null,"scaling":"power"},"level":6,"school":"lgt","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":null,"prepared":true},"scaling":{"mode":"level","formula":"2d6"},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg"}
{"_id":"qkBzg8ZIJpglVMvi","name":"Beacon of Hope","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>This power bestows hope and vitality. Choose any number of creatures within range. For the duration, each target has advantage on Wisdom saving throws and death saving throws, and regains the maximum number of hit points possible from any healing.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":1,"units":"minute"},"target":{"value":null,"units":"any","type":"creature"},"range":{"value":30,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":null,"actionType":"","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":3,"school":"lgt","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":null,"prepared":true},"scaling":{"mode":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]},"consume":{"type":"","target":"","amount":null}},"flags":{},"img":"systems/sw5e/packs/Icons/Force%20Powers/Beacon%20of%20Hope.webp"}
{"_id":"qykEFT52bywaQrNO","name":"Force Technique","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You imbue your weapon with the purifying light of the Force. As part of the action used to cast this power, you must make a melee attack with a weapon against one creature within your weapons reach, otherwise the power fails. On a hit, the target suffers the attacks normal effects, and it becomes wreathed in a glowing barrier of force energy until the start of your next turn. If the target willingly moves before then, it immediately takes 1d8 force damage, and the power ends.</p>\n<p>This powers damage increases when you reach higher levels. At 5th level, the melee attack deals an extra 1d8 force damage to the target, and the damage the target takes for moving increases to 2d8. Both damage rolls increase by 1d8 at 11th level and 17th level.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":"You must make a melee attack with a weapon against one creature within your weapons reach"},"duration":{"value":1,"units":"round"},"target":{"value":1,"units":"","type":"creature"},"range":{"value":null,"long":null,"units":""},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"other","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[["1d8",""]],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":0,"school":"lgt","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":"atwill","formula":"1d8"},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]},"consume":{"type":"","target":"","amount":null}},"flags":{},"img":"icons/svg/mystery-man.svg"}
{"name":"Wrack","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You wrack the body of a creature that you can see with a virulent, disease-like condition. The target must make a Constitution saving throw. On a failed save, it takes 14d6 necrotic damage, or half as much damage on a successful save. The damage cant reduce the targets hit points below 1. If the target fails the saving throw, its hit point maximum is reduced for 1 hour by an amount equal to the necrotic damage it took. Any effect that removes a disease allows a creatures hit point maximum to return to normal before that time passes.</p>\n<p>Force Potency.&nbsp;If you cast this power using a force slot of 7th level or higher, the power deals an extra 2d6 damage for each slot level above 6th.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":"Plague"},"duration":{"value":null,"units":"inst"},"target":{"value":1,"units":"","type":"creature"},"range":{"value":60,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"save","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[["14d6","necrotic"]],"versatile":""},"formula":"","save":{"ability":"con","dc":null,"scaling":"power"},"level":6,"school":"drk","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":"level","formula":"2d6"},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg","_id":"sFLwKTBxnM6YfboP"}
{"name":"Wound","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You make a piercing gesture at a creature within range. Make a ranged force attack against the target. On a hit, the target takes 2d8 necrotic damage and must make a Constitution saving throw. On a failed save, it is also poisoned until the end of your next turn.</p>\n<p><strong>Force Potency.</strong>&nbsp;When you cast this power using a force slot of 2nd level or higher, the damage increases by 1d8 for each slot level above 1st.</p>","chat":"","unidentified":""},"source":"","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":null,"units":"inst"},"target":{"value":1,"units":"","type":"creature"},"range":{"value":60,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"rpak","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[["2d8","necrotic"]],"versatile":""},"formula":"","save":{"ability":"con","dc":null,"scaling":"power"},"level":1,"school":"drk","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":"level","formula":"1d8"},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg","_id":"sTszdhW4ezpqddJ8"}
{"name":"Improved Force Scream","permission":{"default":0,"9BhUyjgxIxogl2ot":3},"type":"power","data":{"description":{"value":"<p>You emit a violent scream imbued with the power of the Force. Each creature you choose within 30 feet of you must succeed on a Constitution saving throw. On a failed save, a creature take 5d6 psychic damage, 5d6 sonic damage, is deafened, and is knocked prone. On a successful save, it takes half as much damage and isnt deafened or knocked prone.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":null,"units":"inst"},"target":{"value":30,"units":"ft","type":"radius"},"range":{"value":null,"long":null,"units":"self"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"save","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[["5d6","psychic"],["5d6","Sonic"]],"versatile":""},"formula":"","save":{"ability":"con","dc":null,"scaling":"power"},"level":5,"school":"drk","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":"","prepared":false},"scaling":{"mode":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"systems/sw5e/packs/Icons/Force%20Powers/Improved%20Force%20Scream.webp","_id":"sXl6Pkz2dGsDUuOc"}
{"_id":"sFLwKTBxnM6YfboP","name":"Wrack","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You wrack the body of a creature that you can see with a virulent, disease-like condition. The target must make a Constitution saving throw. On a failed save, it takes 14d6 necrotic damage, or half as much damage on a successful save. The damage cant reduce the targets hit points below 1. If the target fails the saving throw, its hit point maximum is reduced for 1 hour by an amount equal to the necrotic damage it took. Any effect that removes a disease allows a creatures hit point maximum to return to normal before that time passes.</p>\n<p>Force Potency.&nbsp;If you cast this power using a force slot of 7th level or higher, the power deals an extra 2d6 damage for each slot level above 6th.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":"Plague"},"duration":{"value":null,"units":"inst"},"target":{"value":1,"units":"","type":"creature"},"range":{"value":60,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"save","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[["14d6","necrotic"]],"versatile":""},"formula":"","save":{"ability":"con","dc":null,"scaling":"power"},"level":6,"school":"drk","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":"level","formula":"2d6"},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg"}
{"_id":"sTszdhW4ezpqddJ8","name":"Wound","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You make a piercing gesture at a creature within range. Make a ranged force attack against the target. On a hit, the target takes 2d8 necrotic damage and must make a Constitution saving throw. On a failed save, it is also poisoned until the end of your next turn.</p>\n<p><strong>Force Potency.</strong>&nbsp;When you cast this power using a force slot of 2nd level or higher, the damage increases by 1d8 for each slot level above 1st.</p>","chat":"","unidentified":""},"source":"","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":null,"units":"inst"},"target":{"value":1,"units":"","type":"creature"},"range":{"value":60,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"rpak","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[["2d8","necrotic"]],"versatile":""},"formula":"","save":{"ability":"con","dc":null,"scaling":"power"},"level":1,"school":"drk","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":"level","formula":"1d8"},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg"}
{"_id":"sXl6Pkz2dGsDUuOc","name":"Improved Force Scream","permission":{"default":0,"9BhUyjgxIxogl2ot":3},"type":"power","data":{"description":{"value":"<p>You emit a violent scream imbued with the power of the Force. Each creature you choose within 30 feet of you must succeed on a Constitution saving throw. On a failed save, a creature take 5d6 psychic damage, 5d6 sonic damage, is deafened, and is knocked prone. On a successful save, it takes half as much damage and isnt deafened or knocked prone.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":null,"units":"inst"},"target":{"value":30,"units":"ft","type":"radius"},"range":{"value":null,"long":null,"units":"self"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"save","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[["5d6","psychic"],["5d6","Sonic"]],"versatile":""},"formula":"","save":{"ability":"con","dc":null,"scaling":"power"},"level":5,"school":"drk","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":"","prepared":false},"scaling":{"mode":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"systems/sw5e/packs/Icons/Force%20Powers/Improved%20Force%20Scream.webp"}
{"_id":"tAs3ogXXwpDkpZvF","name":"Burst of Speed","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You touch a creature. The targets speed increases by 10 feet until the power ends.</p>\n<p>Force Potency.&nbsp;When you cast this power using a force slot of 2nd level or higher, you can target one additional creature for each slot level above 1st.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":1,"units":"hour"},"target":{"value":1,"units":"","type":"creature"},"range":{"value":null,"long":null,"units":"touch"},"uses":{"value":0,"max":0,"per":""},"ability":null,"actionType":"","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":1,"school":"uni","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":"level","formula":"1 additional creature"},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]},"consume":{"type":"","target":"","amount":null}},"flags":{},"img":"systems/sw5e/packs/Icons/Force%20Powers/Burst%20of%20Speed.webp"}
{"_id":"tHwhXwiRAOciNqfO","name":"Ruin","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You channel the dark side of the Force to desecrate a creature you can see within range, causing waves of intense pain to assail it. If the target has 100 hit points or fewer, it is subject to crippling pain. Otherwise, the power has no effect on it.</p>\n<p>While the target is affected by crippling pain, any speed it has can be no higher than 10 feet. The target also has disadvantage on attack rolls, ability checks, and saving throws, other than Constitution saving throws. Finally, if the target tries to cast a power, it must first succeed on a Constitution saving throw, or the casting fails and the power is wasted.</p>\n<p>A target suffering this pain can make a Constitution saving throw at the end of each of its turns. On a successful save, the pain ends.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":"Have Wound Power"},"duration":{"value":null,"units":"inst"},"target":{"value":1,"units":"","type":"creature"},"range":{"value":60,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"save","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"con","dc":null,"scaling":"power"},"level":7,"school":"drk","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":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]},"consume":{"type":"","target":"","amount":null}},"flags":{},"img":"systems/sw5e/packs/Icons/Force%20Powers/Ruin.webp"}
{"_id":"u68xKTsuW71YT0NG","name":"Necrotic Charge","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>As part of the action used to cast this power, you must make a melee attack with a weapon against one creature within your weapons reach, otherwise the power fails. On a hit, the target suffers the attacks normal effects, and you can choose to deal up to 1d8 of necrotic damage, which you suffer as well. This damage cant be reduced or negated in any way.</p>\n<p>This powers damage increases when you reach higher levels. At 5th level, the melee attack deals an extra 1d8 necrotic damage to the target, and you can increase the secondary damage to 2d8. Both damage rolls increase by 1d8 at 11th level and 17th level.</p>","chat":"","unidentified":""},"source":"","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":1,"units":"round"},"target":{"value":1,"units":"","type":"enemy"},"range":{"value":null,"long":null,"units":""},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"mwak","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[["0d8","necrotic"]],"versatile":""},"formula":"1d8","save":{"ability":"","dc":null,"scaling":"power"},"level":0,"school":"drk","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":"atwill","formula":"1d8"},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]},"consume":{"type":"","target":"","amount":null}},"flags":{},"img":"systems/sw5e/packs/Icons/Force%20Powers/Necrotic%20Charge.webp"}
{"name":"Force Mend","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You touch a creature and stimulate its natural healing ability. The target regains 4d8+15 hit points. For the duration of the power, the target regains 1 hit point at the start of each of its turns (10 hit points each minute).</p>\n<p>If the creature has a severed part you hold it to the stump, the power instantaneously causes the limb to knit to the stump.</p>\n<p>This power has no effect on droids or constructs.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"minute","cost":1,"condition":""},"duration":{"value":1,"units":"hour"},"target":{"value":1,"units":"","type":"creature"},"range":{"value":null,"long":null,"units":"touch"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"heal","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[["4d8 + 15","healing"]],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":7,"school":"lgt","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":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg","_id":"u91uDdCIN7FvEBzx"}
{"name":"Mind Blank","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>Until the power ends, one willing creature you touch is immune to psychic and sonic damage, any effect that would sense its emotions or read its thoughts, and the charmed condition. The power foils powers or effects of similar power used to affect the targets mind or to gain information about the target.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":24,"units":"hour"},"target":{"value":1,"units":"","type":"creature"},"range":{"value":null,"long":null,"units":"touch"},"uses":{"value":0,"max":0,"per":""},"ability":null,"actionType":"","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":8,"school":"uni","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":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg","_id":"uJrlI81nVVpRgYHP"}
{"name":"Rescue","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You pull one willing ally you can see within 30 feet of you to an unoccupied space within 5 feet of you. The target must use their reaction to accept the pull.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"bonus","cost":1,"condition":""},"duration":{"value":null,"units":"inst"},"target":{"value":1,"units":"","type":"ally"},"range":{"value":30,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":null,"actionType":"","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":2,"school":"uni","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":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg","_id":"uMJVdxqiNS8h120G"}
{"_id":"u91uDdCIN7FvEBzx","name":"Force Mend","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You touch a creature and stimulate its natural healing ability. The target regains 4d8+15 hit points. For the duration of the power, the target regains 1 hit point at the start of each of its turns (10 hit points each minute).</p>\n<p>If the creature has a severed part you hold it to the stump, the power instantaneously causes the limb to knit to the stump.</p>\n<p>This power has no effect on droids or constructs.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"minute","cost":1,"condition":""},"duration":{"value":1,"units":"hour"},"target":{"value":1,"units":"","type":"creature"},"range":{"value":null,"long":null,"units":"touch"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"heal","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[["4d8 + 15","healing"]],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":7,"school":"lgt","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":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg"}
{"_id":"uJrlI81nVVpRgYHP","name":"Mind Blank","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>Until the power ends, one willing creature you touch is immune to psychic and sonic damage, any effect that would sense its emotions or read its thoughts, and the charmed condition. The power foils powers or effects of similar power used to affect the targets mind or to gain information about the target.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":24,"units":"hour"},"target":{"value":1,"units":"","type":"creature"},"range":{"value":null,"long":null,"units":"touch"},"uses":{"value":0,"max":0,"per":""},"ability":null,"actionType":"","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":8,"school":"uni","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":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg"}
{"_id":"uMJVdxqiNS8h120G","name":"Rescue","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You pull one willing ally you can see within 30 feet of you to an unoccupied space within 5 feet of you. The target must use their reaction to accept the pull.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"bonus","cost":1,"condition":""},"duration":{"value":null,"units":"inst"},"target":{"value":1,"units":"","type":"ally"},"range":{"value":30,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":null,"actionType":"","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":2,"school":"uni","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":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]}},"flags":{},"img":"icons/svg/mystery-man.svg"}
{"_id":"ucLQqgu3XZCePdJg","name":"Aura of Vigor","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>Envigorating energy radiates from you in a 30-foot radius. Until the power ends, the aura moves with you, centered on you. Each nonhostile creature in the aura (including you) deals an extra 1d4 damage with weapon attacks.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":1,"units":"minute"},"target":{"value":30,"units":"ft","type":"radius"},"range":{"value":null,"long":null,"units":"self"},"uses":{"value":0,"max":0,"per":""},"ability":null,"actionType":"","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":3,"school":"lgt","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":null,"prepared":true},"scaling":{"mode":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]},"consume":{"type":"","target":"","amount":null}},"flags":{},"img":"systems/sw5e/packs/Icons/Force%20Powers/Aura%20of%20Vigor.webp"}
{"_id":"vRl7zVJ9XwndAme3","name":"Dark Shear","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You create a weapon of imperceptible Force energy that lasts until the power ends. It counts as a simple lightweapon with which you are proficient. It deals 2d6 psychic damage, and has the finesse, light, and thrown properties (range 20/60). When you attack while within dim light or darkness, you have advantage.</p>\n<p>If you drop the weapon or throw it, it disappears at the end of the turn. While the power lasts, you can use a bonus action to make the weapon reappear in your hand.</p>\n<p><strong>Force Potency.</strong>&nbsp;When you cast this power using a 3rd or 4th level force slot, the damage increases by 1d6 (3d6). At 5th or 6th level, the damage increases by 2d6 (4d6). At 7th level or higher, the damage increases by 3d6 (5d6).</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"bonus","cost":1,"condition":""},"duration":{"value":1,"units":"minute"},"target":{"value":null,"units":"self","type":""},"range":{"value":null,"long":null,"units":"self"},"uses":{"value":0,"max":0,"per":""},"ability":null,"actionType":"","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":2,"school":"drk","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":null,"prepared":true},"scaling":{"mode":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]},"consume":{"type":"","target":"","amount":null}},"flags":{},"img":"systems/sw5e/packs/Icons/Force%20Powers/Dark%20Shear.webp"}
{"name":"Force Vision","permission":{"default":0,"XA86Wm4MjngMySbc":3},"type":"power","data":{"description":{"value":"<p>You receive a vision of the future through the Force, giving you or one willing creature you can see within range a chance to change fate. When the chosen creature makes an attack roll, an ability check, or a saving throw before the power ends, it can dismiss this power on itself to roll an additional d20 and choose which of the d20s to use. Alternatively, when an attack roll is made against the chosen creature, it can dismiss this power on itself to roll a d20 and choose which of the d20s to use, the one it rolled or the one the attacker rolled.</p>\n<p>If the original d20 roll has advantage or disadvantage, the creature rolls the additional d20 after advantage or disadvantage has been applied to the original roll.</p>\n<p>Force Potency.&nbsp;When you cast this power using a force slot of 3rd level or higher, you can target one additional creature for each slot level above 2nd.</p>","chat":"","unidentified":""},"source":"","activation":{"type":"minute","cost":1,"condition":""},"duration":{"value":1,"units":"hour"},"target":{"value":1,"units":"","type":"creature"},"range":{"value":60,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"consume":{"type":"","target":"","amount":null},"ability":null,"actionType":"","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":2,"school":"uni","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":"","prepared":false},"scaling":{"mode":"none","formula":""}},"flags":{},"img":"icons/svg/mystery-man.svg","_id":"vZJzZ3o079273ttS"}
{"_id":"vmzC47AY66cx1LwU","name":"Burst","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You cause the earth to burst from beneath your feet. Each creature within range, other than you, must succeed on a Dexterity saving throw or take 1d6 kinetic damage.</p>\n<p>This powers damage increases by 1d6 when you reach 5th level (2d6), 11th level (3d6), and 17th level (4d6).</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":null,"units":"inst"},"target":{"value":null,"units":"","type":"self"},"range":{"value":null,"long":null,"units":"self"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"save","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[["1d6","kinetic"]],"versatile":""},"formula":"","save":{"ability":"dex","dc":null,"scaling":"power"},"level":0,"school":"lgt","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":"atwill","formula":"1d6"},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]},"consume":{"type":"","target":"","amount":null}},"flags":{},"img":"icons/svg/mystery-man.svg"}
{"_id":"wYU8UqUwJVpOQpRK","name":"Master Battle Meditation","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You exude an aura out to 30 feet that boosts the morale and overall battle prowess you and your allies while simultaneously reducing the oppositions combat-effectiveness by eroding their will to fight.</p>\n<p>Whenever you or a friendly creature within your meditation makes an attack roll or a saving throw, they can roll a d8 and add the number rolled to the attack roll or saving throw.</p>\n<p>Whenever a hostile creature enters your meditation or starts its turn there, it must make a Charisma saving throw. On a failed save, it must roll a d8 and subtract the number rolled from each attack roll or saving throw it makes before the end of your next turn. On a successful save, it is immune to this power for 1 day.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":1,"units":"minute"},"target":{"value":30,"units":"ft","type":"radius"},"range":{"value":null,"long":null,"units":"self"},"uses":{"value":0,"max":0,"per":""},"ability":"","actionType":"other","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"1d8","save":{"ability":"cha","dc":null,"scaling":"power"},"level":9,"school":"uni","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":null,"prepared":true},"scaling":{"mode":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]},"consume":{"type":"","target":"","amount":null}},"flags":{},"img":"systems/sw5e/packs/Icons/Force%20Powers/Master%20Battle%20Meditation.webp"}
{"_id":"wqMkp6WYkBCFVVA8","name":"Mass Animation","permission":{"default":0,"00LEX91CfLcf3HGf":3},"type":"power","data":{"description":{"value":"<p>You snag several objects using the Force and whip them into the air around you, controlling them to attack at your command. Choose up to ten unenhanced objects within range that are not being worn or carried. Medium targets count as two objects, Large targets count as four objects, Huge targets count as eight objects. You cant control any object larger than Huge. Each object animates and hovers near you, remaining within 100 feet of you for the duration. An animated object behaves as though it is was a construct, with AC, hit points, and attacks determined by its size, and a flying speed of 30 feet.</p>\n<p>As a bonus action, you can mentally direct any object controlled by this power. If you control multiple objects, you can command any or all of them at the same time. You decide what action the object will take and where it will move. The objects act at the end of your turn. If you command an object to attack, it can make a single melee attack against a creature within 5 feet of it. It makes a slam attack with an attack bonus and kinetic damage determined by its size.</p>\n<table>\n<thead>\n<tr>\n<th>Size</th>\n<th>HP</th>\n<th>AC</th>\n<th>Attack</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Tiny</td>\n<td>20</td>\n<td>16</td>\n<td>+6 to hit, 1d4 + 3 damage</td>\n</tr>\n<tr>\n<td>Small</td>\n<td>25</td>\n<td>15</td>\n<td>+6 to hit, 1d8 + 2 damage</td>\n</tr>\n<tr>\n<td>Medium</td>\n<td>40</td>\n<td>13</td>\n<td>+5 to hit, 2d6 + 1 damage</td>\n</tr>\n<tr>\n<td>Large</td>\n<td>50</td>\n<td>10</td>\n<td>+6 to hit, 2d10 + 2 damage</td>\n</tr>\n<tr>\n<td>Huge</td>\n<td>80</td>\n<td>10</td>\n<td>+8 to hit, 2d12 + 4 damage</td>\n</tr>\n</tbody>\n</table>\n<p>Force Potency.&nbsp;If you cast this power using a force slot of 6th level or higher, you can animate two additional objects for each slot level above 5th.</p>","chat":"","unidentified":""},"source":"PHB","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":1,"units":"minute"},"target":{"value":10,"units":"","type":"object"},"range":{"value":120,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"ability":null,"actionType":"","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"","dc":null,"scaling":"power"},"level":5,"school":"uni","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":null,"prepared":true},"scaling":{"mode":"none","formula":""},"armorproperties":{"parts":[]},"weaponproperties":{"parts":[]},"consume":{"type":"","target":"","amount":null}},"flags":{},"img":"icons/svg/mystery-man.svg"}
{"name":"Dun Moch","permission":{"default":0,"XA86Wm4MjngMySbc":3},"type":"power","data":{"description":{"value":"<p>You attempt to manipulate a creature into fighting you. One creature that you can see within range must make a Wisdom saving throw. On a failed save, the creature is drawn to you, compelled by your demands. For the duration, it has disadvantage on attack rolls against creatures other than you, and must make a Wisdom saving throw each time it attempts to move to a space that is more than 30 feet away from you; if it succeeds on this saving throw, this power doesnt restrict the targets movement for that turn.</p>\n<p>The power ends if you attack any other creature, if you cast a power that targets a hostile creature other than the target, if a creature friendly to you damages the target or casts a harmful power on it, or if you end your turn more than 30 feet away from the target. This power has no effect on droids or constructs.</p>","chat":"","unidentified":""},"source":"","activation":{"type":"bonus","cost":1,"condition":""},"duration":{"value":null,"units":""},"target":{"value":1,"units":"","type":"creature"},"range":{"value":30,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"consume":{"type":"","target":"","amount":null},"ability":"","actionType":"save","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[],"versatile":""},"formula":"","save":{"ability":"wis","dc":null,"scaling":"power"},"level":1,"school":"drk","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":true},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":"","prepared":false},"scaling":{"mode":"none","formula":""}},"flags":{},"img":"icons/svg/mystery-man.svg","_id":"yZTEfyOMlKLAl9Vf"}
{"name":"Force Shunt","permission":{"default":0,"XA86Wm4MjngMySbc":3},"type":"power","data":{"description":{"value":"<p>You use the Force to thrust a creature you can see to the ground. The target must make a Strength saving throw. On a failed save, a creature takes 1d4 kinetic damage and falls prone.</p>\n<p>This powers damage increases by 1d4 when you reach 5th level (2d4), 11th level (3d4), and 17th level (4d4).</p>","chat":"","unidentified":""},"source":"","activation":{"type":"action","cost":1,"condition":""},"duration":{"value":null,"units":"inst"},"target":{"value":1,"units":"","type":"creature"},"range":{"value":30,"long":null,"units":"ft"},"uses":{"value":0,"max":0,"per":""},"consume":{"type":"","target":"","amount":null},"ability":"","actionType":"save","attackBonus":0,"chatFlavor":"","critical":null,"damage":{"parts":[["1d4","kinetic"]],"versatile":""},"formula":"","save":{"ability":"str","dc":null,"scaling":"power"},"level":0,"school":"uni","components":{"value":"","vocal":false,"somatic":false,"material":false,"ritual":false,"concentration":false},"materials":{"value":"","consumed":false,"cost":0,"supply":0},"preparation":{"mode":"","prepared":false},"scaling":{"mode":"atwill","formula":"1d4"}},"flags":{},"img":"icons/svg/mystery-man.svg","_id":"zcg1mMI3WGmLcQTa"}

File diff suppressed because one or more lines are too long

1787
sw5e copy.css Normal file

File diff suppressed because it is too large Load diff

769
sw5e-dark.css Normal file
View file

@ -0,0 +1,769 @@
/* ----------------------------------------- */
/* Fonts */
/* ----------------------------------------- */
/* ----------------------------------------- */
/* Sheet Styles */
/* ----------------------------------------- */
body.dark-theme {
/*-----------
** Chat Tab
-----------*/
/*-----------
** Combat Tab
-----------*/
/*
** Folders
*/
}
body.dark-theme .app {
background: linear-gradient(90deg, #626262 0, #4d4d4d 30%, #4d4d4d 70%, #626262);
}
body.dark-theme h1,
body.dark-theme h2,
body.dark-theme h3,
body.dark-theme h4,
body.dark-theme h5,
body.dark-theme h6 {
color: #E81111;
}
body.dark-theme h3 {
border-bottom: 2px solid #0d99cc;
}
body.dark-theme a {
color: #E81111;
text-decoration: none;
}
body.dark-theme a:hover,
body.dark-theme a:active {
text-shadow: none;
text-decoration: underline;
}
body.dark-theme blockquote {
padding: 4px 8px;
background-color: #FBF4F4;
border: 1px solid #E81111;
box-shadow: 0 0 20px rgba(232, 17, 17, 0.8);
}
body.dark-theme hr {
border-width: 0 0 1px 0;
border-bottom: 1px solid #0d99cc;
}
body.dark-theme input[type="text"],
body.dark-theme input[type="number"],
body.dark-theme input[type="password"],
body.dark-theme input[type="date"],
body.dark-theme input[type="time"],
body.dark-theme select,
body.dark-theme textarea {
border: 1px solid #828282;
color: white;
}
body.dark-theme input[type="text"]:hover,
body.dark-theme input[type="number"]:hover,
body.dark-theme input[type="password"]:hover,
body.dark-theme input[type="date"]:hover,
body.dark-theme input[type="time"]:hover,
body.dark-theme select:hover,
body.dark-theme textarea:hover {
border-color: #4f4f4f;
}
body.dark-theme input[type="text"]:focus,
body.dark-theme input[type="number"]:focus,
body.dark-theme input[type="password"]:focus,
body.dark-theme input[type="date"]:focus,
body.dark-theme input[type="time"]:focus,
body.dark-theme select:focus,
body.dark-theme textarea:focus {
border-color: #E81111;
}
body.dark-theme input[type="text"]::placeholder,
body.dark-theme input[type="number"]::placeholder,
body.dark-theme input[type="password"]::placeholder,
body.dark-theme input[type="date"]::placeholder,
body.dark-theme input[type="time"]::placeholder,
body.dark-theme select::placeholder,
body.dark-theme textarea::placeholder {
color: white;
opacity: 0.5;
}
body.dark-theme input[type="text"] ::-ms-input-placeholder,
body.dark-theme input[type="number"] ::-ms-input-placeholder,
body.dark-theme input[type="password"] ::-ms-input-placeholder,
body.dark-theme input[type="date"] ::-ms-input-placeholder,
body.dark-theme input[type="time"] ::-ms-input-placeholder,
body.dark-theme select ::-ms-input-placeholder,
body.dark-theme textarea ::-ms-input-placeholder {
/* Microsoft Edge */
color: white;
opacity: 0.5;
}
body.dark-theme button,
body.dark-theme input[type="button"],
body.dark-theme input[type="submit"],
body.dark-theme input[type="reset"] {
background: #E81111;
color: white;
}
body.dark-theme button:hover,
body.dark-theme input[type="button"]:hover,
body.dark-theme input[type="submit"]:hover,
body.dark-theme input[type="reset"]:hover,
body.dark-theme button:focus,
body.dark-theme input[type="button"]:focus,
body.dark-theme input[type="submit"]:focus,
body.dark-theme input[type="reset"]:focus {
background: #ef2424;
}
body.dark-theme button:disabled:hover,
body.dark-theme input[type="button"]:disabled:hover,
body.dark-theme input[type="submit"]:disabled:hover,
body.dark-theme input[type="reset"]:disabled:hover,
body.dark-theme button:disabled:focus,
body.dark-theme input[type="button"]:disabled:focus,
body.dark-theme input[type="submit"]:disabled:focus,
body.dark-theme input[type="reset"]:disabled:focus {
background: #E81111;
}
body.dark-theme input[type="reset"],
body.dark-theme button.secondary,
body.dark-theme button[type="reset"],
body.dark-theme input[type="button"].secondary,
body.dark-theme input[type="submit"].secondary {
background: #828282;
color: white;
}
body.dark-theme input[type="reset"]:hover,
body.dark-theme button.secondary:hover,
body.dark-theme button[type="reset"]:hover,
body.dark-theme input[type="button"].secondary:hover,
body.dark-theme input[type="submit"].secondary:hover {
background: #8f8f8f;
}
body.dark-theme input[type="reset"]:disabled:hover,
body.dark-theme button.secondary:disabled:hover,
body.dark-theme button[type="reset"]:disabled:hover,
body.dark-theme input[type="button"].secondary:disabled:hover,
body.dark-theme input[type="submit"].secondary:disabled:hover,
body.dark-theme input[type="reset"]:disabled:focus,
body.dark-theme button.secondary:disabled:focus,
body.dark-theme button[type="reset"]:disabled:focus,
body.dark-theme input[type="button"].secondary:disabled:focus,
body.dark-theme input[type="submit"].secondary:disabled:focus {
background: #828282;
}
body.dark-theme form button {
border: none;
}
body.dark-theme form .notes,
body.dark-theme form .hint {
color: rgba(255, 255, 255, 0.8);
}
body.dark-theme #sidebar-tabs {
background: #2b2b2b;
}
body.dark-theme #sidebar-tabs > .collapse {
color: #E81111;
}
body.dark-theme #sidebar-tabs .item.active {
color: #E81111;
border-bottom: 3px solid #E81111;
}
body.dark-theme #chat-log .chat-message {
background: #363636;
color: white;
}
body.dark-theme #chat-log .chat-message > header {
color: #E81111;
border-bottom: 2px solid #0d99cc;
}
body.dark-theme #chat-log .chat-message > header span {
color: white;
}
body.dark-theme .notification-pip {
color: #0d99cc;
}
body.dark-theme .sw5e.chat-card .card-header h3 {
color: white;
}
body.dark-theme .sw5e.chat-card .card-header h3:hover {
color: white;
}
body.dark-theme .sw5e.chat-card .card-buttons span {
border: 1px solid #828282;
}
body.dark-theme .sw5e.chat-card .card-footer {
border-top: 1px solid #7ed6f7;
}
body.dark-theme .sw5e.chat-card .card-footer span {
border-right: 1px solid #D6D6D6;
}
body.dark-theme .sw5e.chat-card .card-footer span:last-child {
border-right: none;
}
body.dark-theme .dice-roll .dice-formula {
background: #4f4f4f;
color: white;
box-shadow: none;
border-radius: 4px;
}
body.dark-theme .dice-roll .dice-total {
background: #FBF4F4;
border: 1px solid #E81111;
box-shadow: 0 0 12px rgba(232, 17, 17, 0.8);
}
body.dark-theme .dice-roll .dice-total.success {
color: #0dce0d;
}
body.dark-theme .dice-roll .dice-total.failure {
color: #E81111;
}
body.dark-theme .dice-roll .dice-total.critical {
color: #0dce0d;
background: #bcdcbe;
box-shadow: 0 0 12px rgba(13, 206, 13, 0.5);
}
body.dark-theme .dice-roll .dice-total.fumble {
color: #E81111;
background: #FBF4F4;
box-shadow: 0 0 12px rgba(232, 17, 17, 0.5);
}
body.dark-theme #chat-controls .roll-type-select {
background: #363636;
}
body.dark-theme #chat-controls label {
color: white;
}
body.dark-theme #chat-form textarea {
background: #363636;
}
body.dark-theme #combat #combat-round {
color: #E81111;
border-bottom: 2px solid #E81111;
}
body.dark-theme #combat #combat-round .encounters h4 {
color: #E81111;
}
body.dark-theme #combat #combat-round .encounters a {
color: #D6D6D6;
}
body.dark-theme #combat #combat-round .encounters a:hover {
color: #E81111;
}
body.dark-theme #combat #combat-tracker li.combatant {
color: white;
}
body.dark-theme #combat #combat-tracker li.combatant:nth-child(even) {
background: rgba(79, 79, 79, 0.5);
}
body.dark-theme #combat #combat-tracker li.combatant h4 {
color: white;
}
body.dark-theme #combat #combat-tracker li.combatant .roll {
color: #D6D6D6;
}
body.dark-theme #combat #combat-tracker li.combatant .roll:hover {
color: #E81111;
}
body.dark-theme #combat #combat-tracker li.combatant .combatant-control {
color: #D6D6D6;
}
body.dark-theme #combat #combat-tracker li.combatant .combatant-control.active {
color: #E81111;
}
body.dark-theme #combat #combat-tracker li.combatant .token-resource {
color: white;
border-right: 1px solid #828282;
}
body.dark-theme #combat #combat-tracker li.combatant.active {
color: #0d99cc;
}
body.dark-theme #combat #combat-tracker li.combatant.active .initiative,
body.dark-theme #combat #combat-tracker li.combatant.active h4 {
color: #0d99cc;
}
body.dark-theme #combat #combat-tracker li.combatant.hidden {
color: white;
}
body.dark-theme #combat #combat-controls {
border-top: 1px solid #0d99cc;
}
body.dark-theme .sidebar-tab .directory-header .header-search i.fa-search {
color: #0d99cc;
}
body.dark-theme .sidebar-tab .directory-header .header-search input {
background: #363636;
}
body.dark-theme .sidebar-tab .subdirectory {
background: #2b2b2b;
}
body.dark-theme .sidebar-tab .subdirectory .folder {
border-left: 2px solid rgba(130, 130, 130, 0.4);
}
body.dark-theme .sidebar-tab .directory-list li + li {
border-top: 1px solid #0d99cc;
}
body.dark-theme .sidebar-tab .directory-list .folder > .folder-header {
background: #2b2b2b;
}
body.dark-theme .sidebar-tab .directory-list .folder > .folder-header h3 {
background: #2b2b2b;
color: white;
}
body.dark-theme .sidebar-tab .directory-list .folder > .folder-header h3 > i {
color: #0d99cc;
}
body.dark-theme .sidebar-tab .directory-list .folder > .folder-header a {
color: #D6D6D6;
}
body.dark-theme .sidebar-tab .directory-list .folder > .folder-header a:hover {
color: #E81111;
}
body.dark-theme .sidebar-tab .directory-list .folder.collapsed > .folder-header {
background: #2b2b2b;
}
body.dark-theme .sidebar-tab .directory-list .folder + .entity {
border-top: 1px solid #0d99cc;
}
body.dark-theme .sidebar-tab .directory-list .actor,
body.dark-theme .sidebar-tab .directory-list .item,
body.dark-theme .sidebar-tab .directory-list .journal,
body.dark-theme .sidebar-tab .directory-list .table {
background: #2b2b2b;
}
body.dark-theme .sidebar-tab .directory-list .actor .entity-name,
body.dark-theme .sidebar-tab .directory-list .item .entity-name,
body.dark-theme .sidebar-tab .directory-list .journal .entity-name,
body.dark-theme .sidebar-tab .directory-list .table .entity-name {
color: #1C1C1C;
}
body.dark-theme .sidebar-tab .directory-list .actor:nth-child(even),
body.dark-theme .sidebar-tab .directory-list .item:nth-child(even),
body.dark-theme .sidebar-tab .directory-list .journal:nth-child(even),
body.dark-theme .sidebar-tab .directory-list .table:nth-child(even) {
background: rgba(79, 79, 79, 0.3);
}
body.dark-theme #scenes .scene {
border-top: 1px solid #0d99cc;
border-left: 4px solid #0d99cc;
}
body.dark-theme #scenes .scene::after {
box-shadow: 0 0 20px #0d99cc inset;
}
body.dark-theme #scenes .scene h3 {
background: #2b2b2b;
}
body.dark-theme #playlists .directory-list li.playlist {
background: #2b2b2b;
}
body.dark-theme #playlists .directory-list li.playlist .playlist-header {
background: #2b2b2b;
color: #E81111;
border-bottom: 2px solid #0d99cc;
}
body.dark-theme #playlists .directory-list li.playlist li.sound {
color: #1C1C1C;
}
body.dark-theme #playlists .directory-list li.playlist a.sound-control {
color: #E81111;
}
body.dark-theme #compendium .compendium-entity {
background: #2b2b2b !important;
}
body.dark-theme #compendium .compendium-entity h3 {
border-bottom: 2px solid #0d99cc;
}
body.dark-theme #compendium .compendium-entity ol.compendium-list li.compendium-pack:nth-child(even) {
background: rgba(79, 79, 79, 0.3);
}
body.dark-theme #compendium .compendium-entity ol.compendium-list li.compendium-pack .pack-title .status-icons {
color: #828282;
}
body.dark-theme #compendium .compendium-entity ol.compendium-list li.compendium-pack footer.compendium-footer {
color: white;
}
body.dark-theme #settings h2 {
color: #E81111;
border-bottom: 2px solid #0d99cc;
}
body.dark-theme #settings #game-details,
body.dark-theme #settings #settings-game,
body.dark-theme #settings #settings-documentation,
body.dark-theme #settings #settings-access {
color: white;
}
body.dark-theme #navigation #nav-toggle {
background: rgba(126, 214, 247, 0.4);
color: white;
transform: rotate(-90deg);
}
body.dark-theme #navigation .nav-item {
border: 1px solid #0d99cc;
}
body.dark-theme #navigation #scene-list .scene {
border: 1px solid #0d99cc;
background: rgba(126, 214, 247, 0.4);
}
body.dark-theme #navigation #scene-list .scene a {
color: white;
}
body.dark-theme #navigation #scene-list .scene.gm {
border: 1px solid #afc6d6;
background: rgba(13, 153, 204, 0.4);
}
body.dark-theme #navigation #scene-list .scene.view,
body.dark-theme #navigation #scene-list .scene.context {
box-shadow: 0 0 8px #07516c;
border-color: #0d99cc;
}
body.dark-theme #navigation #scene-list .scene.active {
border-color: #f46b6b;
background: rgba(232, 17, 17, 0.6);
box-shadow: 0 0 8px #890a0a;
}
body.dark-theme #controls .scene-control,
body.dark-theme #controls .control-tool {
background: rgba(126, 214, 247, 0.4);
color: white;
border: 1px solid #0d99cc;
box-shadow: none;
}
body.dark-theme #controls .scene-control:hover,
body.dark-theme #controls .control-tool:hover {
background: rgba(126, 214, 247, 0.4);
box-shadow: 0 0 8px #07516c;
}
body.dark-theme #controls .scene-control.active,
body.dark-theme #controls .control-tool.active {
border-color: #f46b6b;
background: rgba(232, 17, 17, 0.6);
box-shadow: 0 0 8px #890a0a;
}
body.dark-theme #players {
border: none;
border-radius: 4px;
}
body.dark-theme #players h3 {
background: #2b2b2b;
border: none;
margin: 0;
padding: 0 8px;
font-size: 17px;
line-height: 30px;
box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.12), 0 1px 5px 0 rgba(0, 0, 0, 0.2);
border-radius: 4px 4px 0 0;
}
body.dark-theme #players h3 .players-mode {
color: #828282;
}
body.dark-theme #players ol {
margin: 4px 0;
}
body.dark-theme #players ol .player-name.self {
color: inherit;
font-weight: 700;
}
body.dark-theme #players ol .player {
color: white;
}
body.dark-theme #players ol .player-active {
margin-top: 7px;
}
body.dark-theme #players ol .player-active.active {
box-shadow: none;
}
body.dark-theme .window-app {
border-radius: 4px;
border: none;
box-shadow: 0 4px 5px 0 rgba(0, 0, 0, 0.14), 0 1px 10px 0 rgba(0, 0, 0, 0.12), 0 2px 4px -1px rgba(0, 0, 0, 0.3);
}
body.dark-theme .window-app > header {
background: #2b2b2b;
border-radius: 4px 4px 0 0;
border: none;
box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.12), 0 1px 5px 0 rgba(0, 0, 0, 0.2);
margin-bottom: 4px;
}
body.dark-theme .window-app .window-content {
background: linear-gradient(90deg, #626262 0, #4d4d4d 30%, #4d4d4d 70%, #626262);
color: white;
}
body.dark-theme .window-app .window-content footer {
margin-top: 8px;
}
body.dark-theme .window-app.minimized > header,
body.dark-theme .window-app.minimized > .window-header {
border: none;
border-radius: 4px;
margin: 0;
}
body.dark-theme #client-settings nav.tabs {
border: none;
font-size: 17px;
line-height: 1.6;
}
body.dark-theme #client-settings nav.tabs a.item {
border-bottom: 3px solid transparent;
color: white;
}
body.dark-theme #client-settings nav.tabs a.item:hover {
text-decoration: none;
}
body.dark-theme #client-settings nav.tabs a.item.active {
text-shadow: none;
border-bottom-color: #E81111;
}
body.dark-theme #client-settings section.content {
border: none;
margin-top: 4px;
}
body.dark-theme .dialog-buttons {
margin-top: 8px;
}
body.dark-theme .dialog-buttons button:last-child {
margin-right: 0;
}
body.dark-theme .dialog-buttons button:not(.default) {
border: 1px solid #E81111;
margin-right: 4px;
background: #828282;
color: white;
}
body.dark-theme .dialog-buttons button:not(.default):hover {
background: #8f8f8f;
}
body.dark-theme .dialog-buttons button.normal.default {
border: none;
background: #E81111;
color: white;
}
body.dark-theme .dialog-buttons button.normal.default:hover {
background: #ef2424;
}
body.dark-theme .panel {
background: white;
}
body.dark-theme .sw5e.sheet .window-content {
color: #1C1C1C;
background: linear-gradient(90deg, #afc6d6 0, #d6d6d6 30%, #d6d6d6 70%, #afc6d6);
}
body.dark-theme .sw5e.sheet .window-content input,
body.dark-theme .sw5e.sheet .window-content select {
color: #1C1C1C;
}
body.dark-theme .sw5e.sheet .window-content input:hover,
body.dark-theme .sw5e.sheet .window-content select:hover {
border-color: #4f4f4f;
}
body.dark-theme .sw5e.sheet .window-content input:focus,
body.dark-theme .sw5e.sheet .window-content select:focus {
border-color: #E81111;
}
body.dark-theme .sw5e.sheet .window-content button:hover,
body.dark-theme .sw5e.sheet .window-content button:focus {
border-color: #E81111;
}
body.dark-theme .sw5e.sheet.actor {
color: #1C1C1C;
}
body.dark-theme .sw5e.sheet.actor input:hover,
body.dark-theme .sw5e.sheet.actor select:hover,
body.dark-theme .sw5e.sheet.actor textarea:hover {
border-color: #E81111;
}
body.dark-theme .sw5e.sheet.actor input:focus,
body.dark-theme .sw5e.sheet.actor select:focus,
body.dark-theme .sw5e.sheet.actor textarea:focus {
border-color: #E81111;
}
body.dark-theme .sw5e.sheet.actor .swalt-sheet section > h1 {
border-bottom: 2px solid #0d99cc;
}
body.dark-theme .sw5e.sheet.actor .swalt-sheet header h1.character-name {
color: #E81111;
}
body.dark-theme .sw5e.sheet.actor .swalt-sheet header h1.character-name input[type="text"] {
color: #E81111;
}
body.dark-theme .sw5e.sheet.actor .swalt-sheet header .level-experience .xpbar {
border: 1px solid #4f4f4f;
background-color: #afc6d6;
}
body.dark-theme .sw5e.sheet.actor .swalt-sheet header .level-experience .xpbar .bar {
background-color: #0d99cc;
}
body.dark-theme .sw5e.sheet.actor .swalt-sheet header .summary input,
body.dark-theme .sw5e.sheet.actor .swalt-sheet header .summary .proficiency {
color: #4f4f4f;
}
body.dark-theme .sw5e.sheet.actor .swalt-sheet header .attributes .attribute-value,
body.dark-theme .sw5e.sheet.actor .swalt-sheet header .attributes .attribute-value input {
color: #4f4f4f;
}
body.dark-theme .sw5e.sheet.actor .swalt-sheet header .attributes .attribute-value .value-separator {
color: #828282;
}
body.dark-theme .sw5e.sheet.actor .swalt-sheet header .attributes footer button {
border: 1px solid #D6D6D6;
}
body.dark-theme .sw5e.sheet.actor .swalt-sheet header .attributes footer button:hover {
color: #E81111;
}
body.dark-theme .sw5e.sheet.actor .swalt-sheet header .attributes footer.hit-points button,
body.dark-theme .sw5e.sheet.actor .swalt-sheet header .attributes footer.hit-dice button,
body.dark-theme .sw5e.sheet.actor .swalt-sheet header .attributes footer.initiative button {
border: 1px solid #D6D6D6;
color: #E81111;
}
body.dark-theme .sw5e.sheet.actor .swalt-sheet header .attributes footer.hit-points button:hover,
body.dark-theme .sw5e.sheet.actor .swalt-sheet header .attributes footer.hit-dice button:hover,
body.dark-theme .sw5e.sheet.actor .swalt-sheet header .attributes footer.initiative button:hover {
border-color: #E81111;
}
body.dark-theme .sw5e.sheet.actor .swalt-sheet nav.sheet-navigation .item {
color: #4f4f4f;
}
body.dark-theme .sw5e.sheet.actor .swalt-sheet nav.sheet-navigation .item.active {
color: #E81111;
border-bottom-color: #E81111;
}
body.dark-theme .sw5e.sheet.actor .swalt-sheet nav.sheet-navigation .item.active:hover {
background: rgba(79, 79, 79, 0.1);
}
body.dark-theme .sw5e.sheet.actor .swalt-sheet nav.sheet-navigation .item:hover {
background: rgba(79, 79, 79, 0.1);
}
body.dark-theme .sw5e.sheet.actor .swalt-sheet .tab .filter-list .filter-item {
border-bottom: 2px solid #828282;
}
body.dark-theme .sw5e.sheet.actor .swalt-sheet .tab .filter-list .filter-item:hover {
color: #E81111;
}
body.dark-theme .sw5e.sheet.actor .swalt-sheet .tab .filter-list .filter-item.active {
color: #E81111;
border-bottom-color: #E81111;
}
body.dark-theme .sw5e.sheet.actor .swalt-sheet .tab .group-list-header {
background: #f0f0f0;
}
body.dark-theme .sw5e.sheet.actor .swalt-sheet .tab .group-list-title {
border-bottom: 1px solid #0d99cc;
}
body.dark-theme .sw5e.sheet.actor .swalt-sheet .tab .group-list-header .item-detail,
body.dark-theme .sw5e.sheet.actor .swalt-sheet .tab .group-list .item-detail {
border-left: 1px solid #D6D6D6;
}
body.dark-theme .sw5e.sheet.actor .swalt-sheet .tab .group-list li.item:nth-child(even),
body.dark-theme .sw5e.sheet.actor .swalt-sheet .tab .group-list ol li.item:nth-child(even) {
background-color: #f0f0f0;
}
body.dark-theme .sw5e.sheet.actor .swalt-sheet .tab .group-list li.item h4,
body.dark-theme .sw5e.sheet.actor .swalt-sheet .tab .group-list ol li.item h4 {
color: #1C1C1C;
}
body.dark-theme .sw5e.sheet.actor .swalt-sheet .tab .group-list li.item .item-name .item-image::before,
body.dark-theme .sw5e.sheet.actor .swalt-sheet .tab .group-list ol li.item .item-name .item-image::before {
color: #4f4f4f;
}
body.dark-theme .sw5e.sheet.actor .swalt-sheet .tab .group-list li.item .item-name.rollable:hover .item-image:hover::before,
body.dark-theme .sw5e.sheet.actor .swalt-sheet .tab .group-list ol li.item .item-name.rollable:hover .item-image:hover::before {
color: #E81111;
}
body.dark-theme .sw5e.sheet.actor .swalt-sheet .tab .group-list li.item .item-control:hover,
body.dark-theme .sw5e.sheet.actor .swalt-sheet .tab .group-list ol li.item .item-control:hover {
color: #E81111 !important;
}
body.dark-theme .sw5e.sheet.actor .swalt-sheet .tab .group-list li.item .item-control.item-toggle,
body.dark-theme .sw5e.sheet.actor .swalt-sheet .tab .group-list ol li.item .item-control.item-toggle {
color: #828282;
}
body.dark-theme .sw5e.sheet.actor .swalt-sheet .tab .group-list li.item .item-control.item-toggle.active,
body.dark-theme .sw5e.sheet.actor .swalt-sheet .tab .group-list ol li.item .item-control.item-toggle.active {
color: #1C1C1C;
}
body.dark-theme .sw5e.sheet.actor .swalt-sheet .tab.attributes .abilities .scores li {
border: 1px solid #D6D6D6;
}
body.dark-theme .sw5e.sheet.actor .swalt-sheet .tab.attributes .abilities .scores li h2:hover {
color: #E81111;
}
body.dark-theme .sw5e.sheet.actor .swalt-sheet .tab.attributes .abilities .scores li .ability-score {
color: #4f4f4f;
}
body.dark-theme .sw5e.sheet.actor .swalt-sheet .tab.attributes .abilities .scores li .ability-modifiers .ability-mod,
body.dark-theme .sw5e.sheet.actor .swalt-sheet .tab.attributes .abilities .scores li .ability-modifiers .ability-save {
border-color: #D6D6D6;
}
body.dark-theme .sw5e.sheet.actor .swalt-sheet .tab.attributes .abilities .skills li:nth-child(even) {
background-color: #f0f0f0;
}
body.dark-theme .sw5e.sheet.actor .swalt-sheet .tab.attributes .abilities .skills li .proficiency-toggle {
color: #1C1C1C;
}
body.dark-theme .sw5e.sheet.actor .swalt-sheet .tab.attributes .abilities .skills li .skill-name:hover {
color: #E81111;
}
body.dark-theme .sw5e.sheet.actor .swalt-sheet .tab.attributes .traits-resources nav button {
color: #4f4f4f;
}
body.dark-theme .sw5e.sheet.actor .swalt-sheet .tab.attributes .traits-resources nav button.active {
color: #E81111;
border-bottom-color: #E81111;
}
body.dark-theme .sw5e.sheet.actor .swalt-sheet .tab.attributes .traits-resources nav button.active:hover {
background: rgba(232, 17, 17, 0.1);
}
body.dark-theme .sw5e.sheet.actor .swalt-sheet .tab.attributes .traits-resources nav button:hover {
background: rgba(79, 79, 79, 0.1);
}
body.dark-theme .sw5e.sheet.actor .swalt-sheet .tab.attributes .traits-resources section.traits .trait-selector i.fas {
color: #E81111;
}
body.dark-theme .sw5e.sheet.actor .swalt-sheet .tab.attributes .traits-resources section.traits .languages label:hover {
color: #E81111;
}
body.dark-theme .sw5e.sheet.actor .swalt-sheet .tab.attributes .traits-resources section.resources .resource-items .resource h1 input {
color: #E81111;
border-bottom: 2px solid #0d99cc;
}
body.dark-theme .sw5e.sheet.actor .swalt-sheet .tab.attributes .traits-resources section.resources .resource-items .resource .attribute-value,
body.dark-theme .sw5e.sheet.actor .swalt-sheet .tab.attributes .traits-resources section.resources .resource-items .resource .attribute-value input {
color: #4f4f4f;
}
body.dark-theme .sw5e.sheet.actor .swalt-sheet .tab.attributes .traits-resources section.resources .resource-items .resource .attribute-value .value-separator {
color: #828282;
}
body.dark-theme .sw5e.sheet.actor .swalt-sheet .tab.attributes .traits-resources section.resources .counters .counter h4.rollable:hover {
color: #E81111;
}
body.dark-theme .sw5e.sheet.actor .swalt-sheet .tab.attributes .traits-resources section.resources .counters .counter .death-success i {
color: #0dce0d;
}
body.dark-theme .sw5e.sheet.actor .swalt-sheet .tab.attributes .traits-resources section.resources .counters .counter .death-fail i {
color: #E81111;
}
body.dark-theme .sw5e.sheet.actor .swalt-sheet .tab.inventory .currency {
color: #E81111;
}
body.dark-theme .sw5e.sheet.actor .swalt-sheet .tab.inventory .encumbrance-wrapper .encumbrance-label {
background: #D6D6D6;
color: #1C1C1C;
border: 1px solid #1C1C1C;
}
body.dark-theme .sw5e.sheet.actor .swalt-sheet .tab.inventory .encumbrance-wrapper .encumbrance {
background: #afc6d6;
}
body.dark-theme .sw5e.sheet.actor .swalt-sheet .tab.inventory .encumbrance-wrapper .encumbrance .encumbrance-bar {
background: #0d99cc;
}
body.dark-theme .sw5e.sheet.actor .swalt-sheet .tab.powerbook .powercasting-ability label,
body.dark-theme .sw5e.sheet.actor .swalt-sheet .tab.powerbook .powercasting-ability h3 {
color: #E81111;
}
body.dark-theme .sw5e.sheet.actor .swalt-sheet .tab.powerbook .powercasting-ability label span,
body.dark-theme .sw5e.sheet.actor .swalt-sheet .tab.powerbook .powercasting-ability h3 span {
color: #1C1C1C;
}
body.dark-theme .sw5e.sheet.actor .swalt-sheet .tab.notes section > input {
color: #E81111;
border-bottom: 2px solid #0d99cc;
}

1577
sw5e-global.css Normal file

File diff suppressed because it is too large Load diff

769
sw5e-light.css Normal file
View file

@ -0,0 +1,769 @@
/* ----------------------------------------- */
/* Fonts */
/* ----------------------------------------- */
/* ----------------------------------------- */
/* Sheet Styles */
/* ----------------------------------------- */
body.light-theme {
/*-----------
** Chat Tab
-----------*/
/*-----------
** Combat Tab
-----------*/
/*
** Folders
*/
}
body.light-theme .app {
background: linear-gradient(90deg, #afc6d6 0, #d6d6d6 30%, #d6d6d6 70%, #afc6d6);
}
body.light-theme h1,
body.light-theme h2,
body.light-theme h3,
body.light-theme h4,
body.light-theme h5,
body.light-theme h6 {
color: #c40f0f;
}
body.light-theme h3 {
border-bottom: 2px solid #0d99cc;
}
body.light-theme a {
color: #c40f0f;
text-decoration: none;
}
body.light-theme a:hover,
body.light-theme a:active {
text-shadow: none;
text-decoration: underline;
}
body.light-theme blockquote {
padding: 4px 8px;
background-color: #afc6d6;
border: 1px solid #0d99cc;
box-shadow: 0 0 20px rgba(13, 153, 204, 0.8);
}
body.light-theme hr {
border-width: 0 0 1px 0;
border-bottom: 1px solid #0d99cc;
}
body.light-theme input[type="text"],
body.light-theme input[type="number"],
body.light-theme input[type="password"],
body.light-theme input[type="date"],
body.light-theme input[type="time"],
body.light-theme select,
body.light-theme textarea {
border: 1px solid #828282;
color: #1C1C1C;
}
body.light-theme input[type="text"]:hover,
body.light-theme input[type="number"]:hover,
body.light-theme input[type="password"]:hover,
body.light-theme input[type="date"]:hover,
body.light-theme input[type="time"]:hover,
body.light-theme select:hover,
body.light-theme textarea:hover {
border-color: #4f4f4f;
}
body.light-theme input[type="text"]:focus,
body.light-theme input[type="number"]:focus,
body.light-theme input[type="password"]:focus,
body.light-theme input[type="date"]:focus,
body.light-theme input[type="time"]:focus,
body.light-theme select:focus,
body.light-theme textarea:focus {
border-color: #c40f0f;
}
body.light-theme input[type="text"]::placeholder,
body.light-theme input[type="number"]::placeholder,
body.light-theme input[type="password"]::placeholder,
body.light-theme input[type="date"]::placeholder,
body.light-theme input[type="time"]::placeholder,
body.light-theme select::placeholder,
body.light-theme textarea::placeholder {
color: #1C1C1C;
opacity: 0.5;
}
body.light-theme input[type="text"] ::-ms-input-placeholder,
body.light-theme input[type="number"] ::-ms-input-placeholder,
body.light-theme input[type="password"] ::-ms-input-placeholder,
body.light-theme input[type="date"] ::-ms-input-placeholder,
body.light-theme input[type="time"] ::-ms-input-placeholder,
body.light-theme select ::-ms-input-placeholder,
body.light-theme textarea ::-ms-input-placeholder {
/* Microsoft Edge */
color: #1C1C1C;
opacity: 0.5;
}
body.light-theme button,
body.light-theme input[type="button"],
body.light-theme input[type="submit"],
body.light-theme input[type="reset"] {
background: #c40f0f;
color: white;
}
body.light-theme button:hover,
body.light-theme input[type="button"]:hover,
body.light-theme input[type="submit"]:hover,
body.light-theme input[type="reset"]:hover,
body.light-theme button:focus,
body.light-theme input[type="button"]:focus,
body.light-theme input[type="submit"]:focus,
body.light-theme input[type="reset"]:focus {
background: #dc1111;
}
body.light-theme button:disabled:hover,
body.light-theme input[type="button"]:disabled:hover,
body.light-theme input[type="submit"]:disabled:hover,
body.light-theme input[type="reset"]:disabled:hover,
body.light-theme button:disabled:focus,
body.light-theme input[type="button"]:disabled:focus,
body.light-theme input[type="submit"]:disabled:focus,
body.light-theme input[type="reset"]:disabled:focus {
background: #c40f0f;
}
body.light-theme input[type="reset"],
body.light-theme button.secondary,
body.light-theme button[type="reset"],
body.light-theme input[type="button"].secondary,
body.light-theme input[type="submit"].secondary {
background: #D6D6D6;
color: #1C1C1C;
}
body.light-theme input[type="reset"]:hover,
body.light-theme button.secondary:hover,
body.light-theme button[type="reset"]:hover,
body.light-theme input[type="button"].secondary:hover,
body.light-theme input[type="submit"].secondary:hover {
background: #e3e3e3;
}
body.light-theme input[type="reset"]:disabled:hover,
body.light-theme button.secondary:disabled:hover,
body.light-theme button[type="reset"]:disabled:hover,
body.light-theme input[type="button"].secondary:disabled:hover,
body.light-theme input[type="submit"].secondary:disabled:hover,
body.light-theme input[type="reset"]:disabled:focus,
body.light-theme button.secondary:disabled:focus,
body.light-theme button[type="reset"]:disabled:focus,
body.light-theme input[type="button"].secondary:disabled:focus,
body.light-theme input[type="submit"].secondary:disabled:focus {
background: #D6D6D6;
}
body.light-theme form button {
border: none;
}
body.light-theme form .notes,
body.light-theme form .hint {
color: rgba(28, 28, 28, 0.8);
}
body.light-theme #sidebar-tabs {
background: white;
}
body.light-theme #sidebar-tabs > .collapse {
color: #c40f0f;
}
body.light-theme #sidebar-tabs .item.active {
color: #c40f0f;
border-bottom: 3px solid #c40f0f;
}
body.light-theme #chat-log .chat-message {
background: white;
color: #1C1C1C;
}
body.light-theme #chat-log .chat-message > header {
color: #c40f0f;
border-bottom: 2px solid #0d99cc;
}
body.light-theme #chat-log .chat-message > header span {
color: #1C1C1C;
}
body.light-theme .notification-pip {
color: #0d99cc;
}
body.light-theme .sw5e.chat-card .card-header h3 {
color: #1C1C1C;
}
body.light-theme .sw5e.chat-card .card-header h3:hover {
color: #1C1C1C;
}
body.light-theme .sw5e.chat-card .card-buttons span {
border: 1px solid #828282;
}
body.light-theme .sw5e.chat-card .card-footer {
border-top: 1px solid #7ed6f7;
}
body.light-theme .sw5e.chat-card .card-footer span {
border-right: 1px solid #D6D6D6;
}
body.light-theme .sw5e.chat-card .card-footer span:last-child {
border-right: none;
}
body.light-theme .dice-roll .dice-formula {
background: #D6D6D6;
color: #1C1C1C;
box-shadow: none;
border-radius: 4px;
}
body.light-theme .dice-roll .dice-total {
background: #afc6d6;
border: 1px solid #0d99cc;
box-shadow: 0 0 12px rgba(13, 153, 204, 0.8);
}
body.light-theme .dice-roll .dice-total.success {
color: #0dce0d;
}
body.light-theme .dice-roll .dice-total.failure {
color: #c40f0f;
}
body.light-theme .dice-roll .dice-total.critical {
color: #0dce0d;
background: #bcdcbe;
box-shadow: 0 0 12px rgba(13, 206, 13, 0.5);
}
body.light-theme .dice-roll .dice-total.fumble {
color: #c40f0f;
background: #FBF4F4;
box-shadow: 0 0 12px rgba(196, 15, 15, 0.5);
}
body.light-theme #chat-controls .roll-type-select {
background: white;
}
body.light-theme #chat-controls label {
color: #1C1C1C;
}
body.light-theme #chat-form textarea {
background: white;
}
body.light-theme #combat #combat-round {
color: #c40f0f;
border-bottom: 2px solid #c40f0f;
}
body.light-theme #combat #combat-round .encounters h4 {
color: #c40f0f;
}
body.light-theme #combat #combat-round .encounters a {
color: #4f4f4f;
}
body.light-theme #combat #combat-round .encounters a:hover {
color: #c40f0f;
}
body.light-theme #combat #combat-tracker li.combatant {
color: #1C1C1C;
}
body.light-theme #combat #combat-tracker li.combatant:nth-child(even) {
background: rgba(175, 198, 214, 0.5);
}
body.light-theme #combat #combat-tracker li.combatant h4 {
color: #1C1C1C;
}
body.light-theme #combat #combat-tracker li.combatant .roll {
color: #4f4f4f;
}
body.light-theme #combat #combat-tracker li.combatant .roll:hover {
color: #c40f0f;
}
body.light-theme #combat #combat-tracker li.combatant .combatant-control {
color: #828282;
}
body.light-theme #combat #combat-tracker li.combatant .combatant-control.active {
color: #363636;
}
body.light-theme #combat #combat-tracker li.combatant .token-resource {
color: #4f4f4f;
border-right: 1px solid #828282;
}
body.light-theme #combat #combat-tracker li.combatant.active {
color: #0d99cc;
}
body.light-theme #combat #combat-tracker li.combatant.active .initiative,
body.light-theme #combat #combat-tracker li.combatant.active h4 {
color: #0d99cc;
}
body.light-theme #combat #combat-tracker li.combatant.hidden {
color: #1C1C1C;
}
body.light-theme #combat #combat-controls {
border-top: 1px solid #0d99cc;
}
body.light-theme .sidebar-tab .directory-header .header-search i.fa-search {
color: #0d99cc;
}
body.light-theme .sidebar-tab .directory-header .header-search input {
background: white;
}
body.light-theme .sidebar-tab .subdirectory {
background: white;
}
body.light-theme .sidebar-tab .subdirectory .folder {
border-left: 2px solid rgba(28, 28, 28, 0.4);
}
body.light-theme .sidebar-tab .directory-list li + li {
border-top: 1px solid #0d99cc;
}
body.light-theme .sidebar-tab .directory-list .folder > .folder-header {
background: white;
}
body.light-theme .sidebar-tab .directory-list .folder > .folder-header h3 {
background: white;
color: #1C1C1C;
}
body.light-theme .sidebar-tab .directory-list .folder > .folder-header h3 > i {
color: #0d99cc;
}
body.light-theme .sidebar-tab .directory-list .folder > .folder-header a {
color: #4f4f4f;
}
body.light-theme .sidebar-tab .directory-list .folder > .folder-header a:hover {
color: #c40f0f;
}
body.light-theme .sidebar-tab .directory-list .folder.collapsed > .folder-header {
background: white;
}
body.light-theme .sidebar-tab .directory-list .folder + .entity {
border-top: 1px solid #0d99cc;
}
body.light-theme .sidebar-tab .directory-list .actor,
body.light-theme .sidebar-tab .directory-list .item,
body.light-theme .sidebar-tab .directory-list .journal,
body.light-theme .sidebar-tab .directory-list .table {
background: white;
}
body.light-theme .sidebar-tab .directory-list .actor .entity-name,
body.light-theme .sidebar-tab .directory-list .item .entity-name,
body.light-theme .sidebar-tab .directory-list .journal .entity-name,
body.light-theme .sidebar-tab .directory-list .table .entity-name {
color: #1C1C1C;
}
body.light-theme .sidebar-tab .directory-list .actor:nth-child(even),
body.light-theme .sidebar-tab .directory-list .item:nth-child(even),
body.light-theme .sidebar-tab .directory-list .journal:nth-child(even),
body.light-theme .sidebar-tab .directory-list .table:nth-child(even) {
background: rgba(175, 198, 214, 0.3);
}
body.light-theme #scenes .scene {
border-top: 1px solid #0d99cc;
border-left: 4px solid #0d99cc;
}
body.light-theme #scenes .scene::after {
box-shadow: 0 0 20px #0d99cc inset;
}
body.light-theme #scenes .scene h3 {
background: white;
}
body.light-theme #playlists .directory-list li.playlist {
background: white;
}
body.light-theme #playlists .directory-list li.playlist .playlist-header {
background: white;
color: #c40f0f;
border-bottom: 2px solid #0d99cc;
}
body.light-theme #playlists .directory-list li.playlist li.sound {
color: #1C1C1C;
}
body.light-theme #playlists .directory-list li.playlist a.sound-control {
color: #c40f0f;
}
body.light-theme #compendium .compendium-entity {
background: white !important;
}
body.light-theme #compendium .compendium-entity h3 {
border-bottom: 2px solid #0d99cc;
}
body.light-theme #compendium .compendium-entity ol.compendium-list li.compendium-pack:nth-child(even) {
background: rgba(175, 198, 214, 0.3);
}
body.light-theme #compendium .compendium-entity ol.compendium-list li.compendium-pack .pack-title .status-icons {
color: #828282;
}
body.light-theme #compendium .compendium-entity ol.compendium-list li.compendium-pack footer.compendium-footer {
color: #1C1C1C;
}
body.light-theme #settings h2 {
color: #c40f0f;
border-bottom: 2px solid #0d99cc;
}
body.light-theme #settings #game-details,
body.light-theme #settings #settings-game,
body.light-theme #settings #settings-documentation,
body.light-theme #settings #settings-access {
color: #1C1C1C;
}
body.light-theme #navigation #nav-toggle {
background: rgba(126, 214, 247, 0.4);
color: white;
transform: rotate(-90deg);
}
body.light-theme #navigation .nav-item {
border: 1px solid #0d99cc;
}
body.light-theme #navigation #scene-list .scene {
border: 1px solid #0d99cc;
background: rgba(126, 214, 247, 0.4);
}
body.light-theme #navigation #scene-list .scene a {
color: white;
}
body.light-theme #navigation #scene-list .scene.gm {
border: 1px solid #afc6d6;
background: rgba(13, 153, 204, 0.4);
}
body.light-theme #navigation #scene-list .scene.view,
body.light-theme #navigation #scene-list .scene.context {
box-shadow: 0 0 8px #07516c;
border-color: #0d99cc;
}
body.light-theme #navigation #scene-list .scene.active {
border-color: #f14848;
background: rgba(196, 15, 15, 0.6);
box-shadow: 0 0 8px #650808;
}
body.light-theme #controls .scene-control,
body.light-theme #controls .control-tool {
background: rgba(126, 214, 247, 0.4);
color: white;
border: 1px solid #0d99cc;
box-shadow: none;
}
body.light-theme #controls .scene-control:hover,
body.light-theme #controls .control-tool:hover {
background: rgba(126, 214, 247, 0.4);
box-shadow: 0 0 8px #07516c;
}
body.light-theme #controls .scene-control.active,
body.light-theme #controls .control-tool.active {
border-color: #f14848;
background: rgba(196, 15, 15, 0.6);
box-shadow: 0 0 8px #650808;
}
body.light-theme #players {
border: none;
border-radius: 4px;
}
body.light-theme #players h3 {
background: white;
border: none;
margin: 0;
padding: 0 8px;
font-size: 17px;
line-height: 30px;
box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.12), 0 1px 5px 0 rgba(0, 0, 0, 0.2);
border-radius: 4px 4px 0 0;
}
body.light-theme #players h3 .players-mode {
color: #828282;
}
body.light-theme #players ol {
margin: 4px 0;
}
body.light-theme #players ol .player-name.self {
color: inherit;
font-weight: 700;
}
body.light-theme #players ol .player {
color: #1C1C1C;
}
body.light-theme #players ol .player-active {
margin-top: 7px;
}
body.light-theme #players ol .player-active.active {
box-shadow: none;
}
body.light-theme .window-app {
border-radius: 4px;
border: none;
box-shadow: 0 4px 5px 0 rgba(0, 0, 0, 0.14), 0 1px 10px 0 rgba(0, 0, 0, 0.12), 0 2px 4px -1px rgba(0, 0, 0, 0.3);
}
body.light-theme .window-app > header {
background: white;
border-radius: 4px 4px 0 0;
border: none;
box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.12), 0 1px 5px 0 rgba(0, 0, 0, 0.2);
margin-bottom: 4px;
}
body.light-theme .window-app .window-content {
background: linear-gradient(90deg, #afc6d6 0, #d6d6d6 30%, #d6d6d6 70%, #afc6d6);
color: #1C1C1C;
}
body.light-theme .window-app .window-content footer {
margin-top: 8px;
}
body.light-theme .window-app.minimized > header,
body.light-theme .window-app.minimized > .window-header {
border: none;
border-radius: 4px;
margin: 0;
}
body.light-theme #client-settings nav.tabs {
border: none;
font-size: 17px;
line-height: 1.6;
}
body.light-theme #client-settings nav.tabs a.item {
border-bottom: 3px solid transparent;
color: #1C1C1C;
}
body.light-theme #client-settings nav.tabs a.item:hover {
text-decoration: none;
}
body.light-theme #client-settings nav.tabs a.item.active {
text-shadow: none;
border-bottom-color: #c40f0f;
}
body.light-theme #client-settings section.content {
border: none;
margin-top: 4px;
}
body.light-theme .dialog-buttons {
margin-top: 8px;
}
body.light-theme .dialog-buttons button:last-child {
margin-right: 0;
}
body.light-theme .dialog-buttons button:not(.default) {
border: 1px solid #c40f0f;
margin-right: 4px;
background: #D6D6D6;
color: #1C1C1C;
}
body.light-theme .dialog-buttons button:not(.default):hover {
background: #e3e3e3;
}
body.light-theme .dialog-buttons button.normal.default {
border: none;
background: #c40f0f;
color: white;
}
body.light-theme .dialog-buttons button.normal.default:hover {
background: #dc1111;
}
body.light-theme .panel {
background: white;
}
body.light-theme .sw5e.sheet .window-content {
color: #1C1C1C;
background: linear-gradient(90deg, #afc6d6 0, #d6d6d6 30%, #d6d6d6 70%, #afc6d6);
}
body.light-theme .sw5e.sheet .window-content input,
body.light-theme .sw5e.sheet .window-content select {
color: #1C1C1C;
}
body.light-theme .sw5e.sheet .window-content input:hover,
body.light-theme .sw5e.sheet .window-content select:hover {
border-color: #4f4f4f;
}
body.light-theme .sw5e.sheet .window-content input:focus,
body.light-theme .sw5e.sheet .window-content select:focus {
border-color: #c40f0f;
}
body.light-theme .sw5e.sheet .window-content button:hover,
body.light-theme .sw5e.sheet .window-content button:focus {
border-color: #c40f0f;
}
body.light-theme .sw5e.sheet.actor {
color: #1C1C1C;
}
body.light-theme .sw5e.sheet.actor input:hover,
body.light-theme .sw5e.sheet.actor select:hover,
body.light-theme .sw5e.sheet.actor textarea:hover {
border-color: #c40f0f;
}
body.light-theme .sw5e.sheet.actor input:focus,
body.light-theme .sw5e.sheet.actor select:focus,
body.light-theme .sw5e.sheet.actor textarea:focus {
border-color: #c40f0f;
}
body.light-theme .sw5e.sheet.actor .swalt-sheet section > h1 {
border-bottom: 2px solid #0d99cc;
}
body.light-theme .sw5e.sheet.actor .swalt-sheet header h1.character-name {
color: #c40f0f;
}
body.light-theme .sw5e.sheet.actor .swalt-sheet header h1.character-name input[type="text"] {
color: #c40f0f;
}
body.light-theme .sw5e.sheet.actor .swalt-sheet header .level-experience .xpbar {
border: 1px solid #4f4f4f;
background-color: #afc6d6;
}
body.light-theme .sw5e.sheet.actor .swalt-sheet header .level-experience .xpbar .bar {
background-color: #0d99cc;
}
body.light-theme .sw5e.sheet.actor .swalt-sheet header .summary input,
body.light-theme .sw5e.sheet.actor .swalt-sheet header .summary .proficiency {
color: #4f4f4f;
}
body.light-theme .sw5e.sheet.actor .swalt-sheet header .attributes .attribute-value,
body.light-theme .sw5e.sheet.actor .swalt-sheet header .attributes .attribute-value input {
color: #4f4f4f;
}
body.light-theme .sw5e.sheet.actor .swalt-sheet header .attributes .attribute-value .value-separator {
color: #828282;
}
body.light-theme .sw5e.sheet.actor .swalt-sheet header .attributes footer button {
border: 1px solid #D6D6D6;
}
body.light-theme .sw5e.sheet.actor .swalt-sheet header .attributes footer button:hover {
color: #c40f0f;
}
body.light-theme .sw5e.sheet.actor .swalt-sheet header .attributes footer.hit-points button,
body.light-theme .sw5e.sheet.actor .swalt-sheet header .attributes footer.hit-dice button,
body.light-theme .sw5e.sheet.actor .swalt-sheet header .attributes footer.initiative button {
border: 1px solid #D6D6D6;
color: #c40f0f;
}
body.light-theme .sw5e.sheet.actor .swalt-sheet header .attributes footer.hit-points button:hover,
body.light-theme .sw5e.sheet.actor .swalt-sheet header .attributes footer.hit-dice button:hover,
body.light-theme .sw5e.sheet.actor .swalt-sheet header .attributes footer.initiative button:hover {
border-color: #c40f0f;
}
body.light-theme .sw5e.sheet.actor .swalt-sheet nav.sheet-navigation .item {
color: #4f4f4f;
}
body.light-theme .sw5e.sheet.actor .swalt-sheet nav.sheet-navigation .item.active {
color: #c40f0f;
border-bottom-color: #c40f0f;
}
body.light-theme .sw5e.sheet.actor .swalt-sheet nav.sheet-navigation .item.active:hover {
background: rgba(79, 79, 79, 0.1);
}
body.light-theme .sw5e.sheet.actor .swalt-sheet nav.sheet-navigation .item:hover {
background: rgba(79, 79, 79, 0.1);
}
body.light-theme .sw5e.sheet.actor .swalt-sheet .tab .filter-list .filter-item {
border-bottom: 2px solid #828282;
}
body.light-theme .sw5e.sheet.actor .swalt-sheet .tab .filter-list .filter-item:hover {
color: #c40f0f;
}
body.light-theme .sw5e.sheet.actor .swalt-sheet .tab .filter-list .filter-item.active {
color: #c40f0f;
border-bottom-color: #c40f0f;
}
body.light-theme .sw5e.sheet.actor .swalt-sheet .tab .group-list-header {
background: #f0f0f0;
}
body.light-theme .sw5e.sheet.actor .swalt-sheet .tab .group-list-title {
border-bottom: 1px solid #0d99cc;
}
body.light-theme .sw5e.sheet.actor .swalt-sheet .tab .group-list-header .item-detail,
body.light-theme .sw5e.sheet.actor .swalt-sheet .tab .group-list .item-detail {
border-left: 1px solid #D6D6D6;
}
body.light-theme .sw5e.sheet.actor .swalt-sheet .tab .group-list li.item:nth-child(even),
body.light-theme .sw5e.sheet.actor .swalt-sheet .tab .group-list ol li.item:nth-child(even) {
background-color: #f0f0f0;
}
body.light-theme .sw5e.sheet.actor .swalt-sheet .tab .group-list li.item h4,
body.light-theme .sw5e.sheet.actor .swalt-sheet .tab .group-list ol li.item h4 {
color: #1C1C1C;
}
body.light-theme .sw5e.sheet.actor .swalt-sheet .tab .group-list li.item .item-name .item-image::before,
body.light-theme .sw5e.sheet.actor .swalt-sheet .tab .group-list ol li.item .item-name .item-image::before {
color: #4f4f4f;
}
body.light-theme .sw5e.sheet.actor .swalt-sheet .tab .group-list li.item .item-name.rollable:hover .item-image:hover::before,
body.light-theme .sw5e.sheet.actor .swalt-sheet .tab .group-list ol li.item .item-name.rollable:hover .item-image:hover::before {
color: #c40f0f;
}
body.light-theme .sw5e.sheet.actor .swalt-sheet .tab .group-list li.item .item-control:hover,
body.light-theme .sw5e.sheet.actor .swalt-sheet .tab .group-list ol li.item .item-control:hover {
color: #c40f0f !important;
}
body.light-theme .sw5e.sheet.actor .swalt-sheet .tab .group-list li.item .item-control.item-toggle,
body.light-theme .sw5e.sheet.actor .swalt-sheet .tab .group-list ol li.item .item-control.item-toggle {
color: #828282;
}
body.light-theme .sw5e.sheet.actor .swalt-sheet .tab .group-list li.item .item-control.item-toggle.active,
body.light-theme .sw5e.sheet.actor .swalt-sheet .tab .group-list ol li.item .item-control.item-toggle.active {
color: #1C1C1C;
}
body.light-theme .sw5e.sheet.actor .swalt-sheet .tab.attributes .abilities .scores li {
border: 1px solid #D6D6D6;
}
body.light-theme .sw5e.sheet.actor .swalt-sheet .tab.attributes .abilities .scores li h2:hover {
color: #c40f0f;
}
body.light-theme .sw5e.sheet.actor .swalt-sheet .tab.attributes .abilities .scores li .ability-score {
color: #4f4f4f;
}
body.light-theme .sw5e.sheet.actor .swalt-sheet .tab.attributes .abilities .scores li .ability-modifiers .ability-mod,
body.light-theme .sw5e.sheet.actor .swalt-sheet .tab.attributes .abilities .scores li .ability-modifiers .ability-save {
border-color: #D6D6D6;
}
body.light-theme .sw5e.sheet.actor .swalt-sheet .tab.attributes .abilities .skills li:nth-child(even) {
background-color: #f0f0f0;
}
body.light-theme .sw5e.sheet.actor .swalt-sheet .tab.attributes .abilities .skills li .proficiency-toggle {
color: #1C1C1C;
}
body.light-theme .sw5e.sheet.actor .swalt-sheet .tab.attributes .abilities .skills li .skill-name:hover {
color: #c40f0f;
}
body.light-theme .sw5e.sheet.actor .swalt-sheet .tab.attributes .traits-resources nav button {
color: #4f4f4f;
}
body.light-theme .sw5e.sheet.actor .swalt-sheet .tab.attributes .traits-resources nav button.active {
color: #c40f0f;
border-bottom-color: #c40f0f;
}
body.light-theme .sw5e.sheet.actor .swalt-sheet .tab.attributes .traits-resources nav button.active:hover {
background: rgba(196, 15, 15, 0.1);
}
body.light-theme .sw5e.sheet.actor .swalt-sheet .tab.attributes .traits-resources nav button:hover {
background: rgba(79, 79, 79, 0.1);
}
body.light-theme .sw5e.sheet.actor .swalt-sheet .tab.attributes .traits-resources section.traits .trait-selector i.fas {
color: #c40f0f;
}
body.light-theme .sw5e.sheet.actor .swalt-sheet .tab.attributes .traits-resources section.traits .languages label:hover {
color: #c40f0f;
}
body.light-theme .sw5e.sheet.actor .swalt-sheet .tab.attributes .traits-resources section.resources .resource-items .resource h1 input {
color: #c40f0f;
border-bottom: 2px solid #0d99cc;
}
body.light-theme .sw5e.sheet.actor .swalt-sheet .tab.attributes .traits-resources section.resources .resource-items .resource .attribute-value,
body.light-theme .sw5e.sheet.actor .swalt-sheet .tab.attributes .traits-resources section.resources .resource-items .resource .attribute-value input {
color: #4f4f4f;
}
body.light-theme .sw5e.sheet.actor .swalt-sheet .tab.attributes .traits-resources section.resources .resource-items .resource .attribute-value .value-separator {
color: #828282;
}
body.light-theme .sw5e.sheet.actor .swalt-sheet .tab.attributes .traits-resources section.resources .counters .counter h4.rollable:hover {
color: #c40f0f;
}
body.light-theme .sw5e.sheet.actor .swalt-sheet .tab.attributes .traits-resources section.resources .counters .counter .death-success i {
color: #0dce0d;
}
body.light-theme .sw5e.sheet.actor .swalt-sheet .tab.attributes .traits-resources section.resources .counters .counter .death-fail i {
color: #c40f0f;
}
body.light-theme .sw5e.sheet.actor .swalt-sheet .tab.inventory .currency {
color: #c40f0f;
}
body.light-theme .sw5e.sheet.actor .swalt-sheet .tab.inventory .encumbrance-wrapper .encumbrance-label {
background: #D6D6D6;
color: #1C1C1C;
border: 1px solid #1C1C1C;
}
body.light-theme .sw5e.sheet.actor .swalt-sheet .tab.inventory .encumbrance-wrapper .encumbrance {
background: #afc6d6;
}
body.light-theme .sw5e.sheet.actor .swalt-sheet .tab.inventory .encumbrance-wrapper .encumbrance .encumbrance-bar {
background: #0d99cc;
}
body.light-theme .sw5e.sheet.actor .swalt-sheet .tab.powerbook .powercasting-ability label,
body.light-theme .sw5e.sheet.actor .swalt-sheet .tab.powerbook .powercasting-ability h3 {
color: #c40f0f;
}
body.light-theme .sw5e.sheet.actor .swalt-sheet .tab.powerbook .powercasting-ability label span,
body.light-theme .sw5e.sheet.actor .swalt-sheet .tab.powerbook .powercasting-ability h3 span {
color: #1C1C1C;
}
body.light-theme .sw5e.sheet.actor .swalt-sheet .tab.notes section > input {
color: #c40f0f;
border-bottom: 2px solid #0d99cc;
}

757
sw5e-update.css Normal file
View file

@ -0,0 +1,757 @@
/* ----------------------------------------- */
/* Fonts */
/* ----------------------------------------- */
/* russo-one-regular - latin */
@font-face {
font-family: 'Russo One';
font-style: normal;
font-weight: 400;
src: url('./fonts/RussoOne.ttf');
}
@font-face {
font-family: 'Russo One';
font-style: italic;
font-weight: 400;
src: url('./fonts/RussoOne.ttf');
}
@font-face {
font-family: 'Russo One';
font-style: normal;
font-weight: 700;
src: url('./fonts/RussoOne.ttf');
}
/* open-sans-regular - latin */
@font-face {
font-family: 'Open Sans';
font-style: normal;
font-weight: 400;
src: url('./fonts/OpenSans-Regular.ttf');
}
@font-face {
font-family: 'Open Sans';
font-style: italic;
font-weight: 400;
src: url('./fonts/OpenSans-Italic.ttf');
}
@font-face {
font-family: 'Open Sans';
font-style: normal;
font-weight: 700;
src: url('./fonts/OpenSans-Bold.ttf');
}
@font-face {
font-family: 'Open Sans';
font-style: italic;
font-weight: 700;
src: url('./fonts/OpenSans-BoldItalic.ttf');
}
/* ----------------------------------------- */
/* Sheet Styles */
/* ----------------------------------------- */
html {
box-sizing: border-box;
}
*,
*:before,
*:after {
box-sizing: inherit;
}
::-webkit-scrollbar-track {
border: 1px solid #0d99cc;
border-radius: 4px;
}
::-webkit-scrollbar-thumb {
outline: none;
border-radius: 4px;
background: #0d99cc;
border: none;
}
:root {
scrollbar-width: thin;
scrollbar-color: #0d99cc #afc6d6;
}
body {
font-family: 'Open Sans';
font-size: 13px;
font-weight: 400;
}
h1 {
font-family: 'Russo One';
font-size: 34px;
font-weight: 400;
}
h2 {
font-family: 'Russo One';
font-size: 27px;
font-weight: 400;
}
h3 {
font-family: 'Russo One';
font-size: 21px;
font-weight: 400;
}
h4 {
font-family: 'Russo One';
font-size: 17px;
font-weight: 400;
}
h5,
h6 {
font-family: 'Russo One';
font-size: 13px;
font-weight: 400;
}
a {
color: #c40f0f;
text-decoration: none;
}
a:hover,
a:active {
text-shadow: none;
text-decoration: underline;
}
.app {
background: linear-gradient(90deg, #afc6d6 0%, #D6D6D6 30%, #D6D6D6 70%, #afc6d6);
border: none;
box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.12), 0 1px 5px 0 rgba(0, 0, 0, 0.2);
}
#context-menu {
background: none;
border: none;
border-radius: 0;
color: #1C1C1C;
padding: 0 8px;
}
#context-menu ol.context-items {
background: white;
border-radius: 4px;
border: 1px solid #828282;
box-shadow: 0 4px 5px 0 rgba(0, 0, 0, 0.14), 0 1px 10px 0 rgba(0, 0, 0, 0.12), 0 2px 4px -1px rgba(0, 0, 0, 0.3);
}
#context-menu ol.context-items li.context-item:first-child {
border-top-left-radius: 4px;
border-top-right-radius: 4px;
}
#context-menu ol.context-items li.context-item:last-child {
border-bottom-left-radius: 4px;
border-bottom-right-radius: 4px;
}
#context-menu ol.context-items li.context-item i {
color: #0d99cc;
}
#context-menu ol.context-items li.context-item:hover {
background: #c40f0f;
color: white;
text-shadow: none;
cursor: pointer;
}
#context-menu ol.context-items li.context-item:hover i {
color: white;
}
#context-menu ol.context-items li.context-item + li {
border-top: 1px solid #D6D6D6;
}
input[type="text"],
input[type="number"],
input[type="password"],
input[type="date"],
input[type="time"],
select,
textarea {
border: 1px solid #828282;
border-radius: 4px;
color: #1C1C1C;
transition: all 0.3s;
}
input[type="text"]:hover,
input[type="number"]:hover,
input[type="password"]:hover,
input[type="date"]:hover,
input[type="time"]:hover,
select:hover,
textarea:hover {
border-color: #4f4f4f;
box-shadow: none;
}
input[type="text"]:focus,
input[type="number"]:focus,
input[type="password"]:focus,
input[type="date"]:focus,
input[type="time"]:focus,
select:focus,
textarea:focus {
border-color: #c40f0f;
box-shadow: none;
}
input[type=range] {
-webkit-appearance: none;
/* Hides the slider so that custom slider can be made */
width: 100%;
/* Specific width is required for Firefox. */
background: transparent;
/* Otherwise white in Chrome */
}
input[type=range]::-webkit-slider-thumb {
-webkit-appearance: none;
background: #c40f0f;
width: 12px;
height: 12px;
border-radius: 32px;
cursor: pointer;
box-shadow: none;
}
input[type=range]::-moz-range-thumb {
-webkit-appearance: none;
background: #c40f0f;
width: 12px;
height: 12px;
border-radius: 32px;
cursor: pointer;
box-shadow: none;
}
input[type=range]::-ms-thumb {
-webkit-appearance: none;
background: #c40f0f;
width: 12px;
height: 12px;
border-radius: 32px;
cursor: pointer;
box-shadow: none;
}
input[type=range]::-webkit-slider-runnable-track {
width: 100%;
height: 6px;
cursor: pointer;
background: #7ed6f7;
border-radius: 4px;
border: 1px solid #0d99cc;
box-shadow: none;
}
input[type=range]:focus::-webkit-slider-runnable-track {
background: #0d99cc;
}
input[type=range]::-moz-range-track {
width: 100%;
height: 6px;
cursor: pointer;
background: #7ed6f7;
border-radius: 4px;
border: 1px solid #0d99cc;
box-shadow: none;
}
input[type=range]::-ms-track {
width: 100%;
height: 6px;
cursor: pointer;
background: #7ed6f7;
border-radius: 4px;
border: 1px solid #0d99cc;
box-shadow: none;
}
input[type=range]:focus {
outline: none;
/* Removes the blue border. You should probably do some kind of focus styling for accessibility reasons though. */
}
input[type=range]::-ms-track {
width: 100%;
cursor: pointer;
/* Hides the slider so custom styles can be added */
background: transparent;
border-color: transparent;
color: transparent;
}
button {
font-family: 'Open Sans';
font-size: 13px;
font-weight: 700;
background: #c40f0f;
color: white;
text-align: center;
border: none;
border-radius: 4px;
cursor: pointer;
transition: all 0.3s;
}
button:hover,
button:focus {
box-shadow: none;
background: #dc1111;
}
#sidebar {
border: none;
}
#sidebar-tabs {
border: none;
box-shadow: none;
background: white;
box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.12), 0 1px 5px 0 rgba(0, 0, 0, 0.2);
}
#sidebar-tabs > .collapse {
color: #c40f0f;
}
#sidebar-tabs .item {
font-size: 16px;
}
#sidebar-tabs .item.active {
color: #c40f0f;
border: none;
border-bottom: 3px solid #c40f0f;
box-shadow: none;
background: none;
text-shadow: none;
}
/*-----------
** Chat Tab
-----------*/
#chat-log .chat-message {
background: white;
border: none;
border-radius: 4px;
margin-bottom: 8px;
box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.12), 0 1px 5px 0 rgba(0, 0, 0, 0.2);
}
#chat-log .chat-message > header {
color: #c40f0f;
border-bottom: 2px solid #0d99cc;
margin-bottom: 4px;
}
#chat-log .chat-message > header span {
color: #1C1C1C;
}
.notification-pip {
color: #0d99cc;
text-shadow: none;
}
.sw5e.chat-card {
font-size: 13px;
}
.sw5e.chat-card .card-header {
padding: 0;
border: none;
}
.sw5e.chat-card .card-header img {
flex: 0 0 36px;
margin-right: 4px;
}
.sw5e.chat-card .card-header h3 {
flex: 1;
margin: 0;
line-height: 36px;
font-family: 'Russo One';
font-size: 17px;
font-weight: 400;
color: #1C1C1C;
}
.sw5e.chat-card .card-header h3:hover {
color: #1C1C1C;
text-shadow: none;
}
.sw5e.chat-card .card-content {
margin: 4px 0;
}
.sw5e.chat-card .card-content h3 {
font-size: 12px;
margin: 0;
font-weight: bold;
}
.sw5e.chat-card .card-content > * {
-webkit-user-select: text;
-moz-user-select: text;
-ms-user-select: text;
user-select: text;
}
.sw5e.chat-card .card-buttons {
margin: 4px 0;
}
.sw5e.chat-card .card-buttons span {
display: block;
line-height: 28px;
text-align: center;
border: 1px solid #828282;
}
.sw5e.chat-card .card-buttons button {
font-family: 'Open Sans';
font-size: 13px;
font-weight: 700;
padding: 4px 0;
height: auto;
line-height: 1.6;
margin: 4px 0;
background: #c40f0f;
border: none;
border-radius: 4px;
}
.sw5e.chat-card .card-buttons button:hover,
.sw5e.chat-card .card-buttons button:focus {
background-color: #dc1111;
box-shadow: none;
}
.sw5e.chat-card .card-footer {
padding: 4px 0 0;
border-top: 1px solid #7ed6f7;
}
.sw5e.chat-card .card-footer span {
border-right: 2px groove #FFF;
padding: 0 4px 0 0;
font-size: 10px;
}
.sw5e.chat-card .card-footer span:last-child {
border-right: none;
padding-right: 0;
}
.dice-roll .dice-formula {
background: none;
border: none;
}
.dice-roll .dice-total {
background: #afc6d6;
border: 1px solid #0d99cc;
border-radius: 0;
padding: 4px 0;
box-shadow: 0 0 12px rgba(13, 153, 204, 0.5);
}
.dice-roll .dice-total.success {
color: inherit;
background: #c7d0c0;
border: 1px solid #006c00;
}
.dice-roll .dice-total.failure {
color: inherit;
background: #ffdddd;
border: 1px solid #6e0000;
}
.dice-roll .dice-total.critical {
color: #0dce0d;
background: #bcdcbe;
box-shadow: 0 0 12px rgba(13, 206, 13, 0.5);
}
.dice-roll .dice-total.fumble {
color: red;
}
#chat-controls {
padding-top: 4px;
}
#chat-controls label {
color: #1C1C1C;
}
#chat-form textarea {
background: white;
}
#chat-form textarea:focus {
box-shadow: none;
outline: none;
}
/*-----------
** Combat Tab
-----------*/
#combat #combat-round {
color: #c40f0f;
border-bottom: 2px solid #0d99cc;
}
#combat #combat-round .encounters h4 {
color: #c40f0f;
}
#combat #combat-round .encounters a {
color: #4f4f4f;
}
#combat #combat-round .encounters a:hover {
color: #c40f0f;
}
#combat #combat-tracker li.combatant {
padding: 4px 0;
color: #1C1C1C;
background: none;
}
#combat #combat-tracker li.combatant:nth-child(even) {
background: rgba(175, 198, 214, 0.5);
}
#combat #combat-tracker li.combatant h4 {
color: #1C1C1C;
text-shadow: none;
}
#combat #combat-tracker li.combatant .roll {
background: none;
color: #4f4f4f;
}
#combat #combat-tracker li.combatant .roll::before {
content: "\f6cf";
font-family: "Font Awesome 5 Free";
-webkit-font-smoothing: antialiased;
display: inline-block;
font-style: normal;
font-variant: normal;
text-rendering: auto;
font-weight: 900;
font-size: 28px;
}
#combat #combat-tracker li.combatant .roll:hover {
color: #c40f0f;
}
#combat #combat-tracker li.combatant .combatant-control {
color: #828282;
text-shadow: none;
}
#combat #combat-tracker li.combatant .combatant-control.active {
color: #363636;
}
#combat #combat-tracker li.combatant .token-resource {
color: #4f4f4f;
border-right: 1px solid #828282;
}
#combat #combat-tracker li.combatant .initiative {
text-shadow: none;
}
#combat #combat-tracker li.combatant.active {
color: #0d99cc;
}
#combat #combat-tracker li.combatant.active .initiative,
#combat #combat-tracker li.combatant.active h4 {
color: #0d99cc;
}
#combat #combat-tracker li.combatant.hidden {
opacity: 0.5;
color: #1C1C1C;
}
#combat #combat-controls {
padding-top: 0;
border-top: 1px solid #0d99cc;
}
/*
** Folders
*/
.sidebar-tab .directory-header {
margin-bottom: 4px;
}
.sidebar-tab .directory-header .header-search {
position: relative;
}
.sidebar-tab .directory-header .header-search i.fa-search {
position: absolute;
left: 8px;
color: #0d99cc;
}
.sidebar-tab .directory-header .header-search input {
text-align: left;
padding-left: 22px;
background: white;
}
.sidebar-tab .directory-header .header-search input:focus {
box-shadow: none;
}
.sidebar-tab .subdirectory {
border: none;
margin-left: 8px;
background: white;
min-height: 8px;
}
.sidebar-tab .subdirectory .folder {
border-left: 2px solid rgba(28, 28, 28, 0.4);
}
.sidebar-tab .directory-list {
padding-bottom: 4px;
}
.sidebar-tab .directory-list li + li {
border-top: 1px solid #0d99cc;
}
.sidebar-tab .directory-list .folder > .folder-header {
line-height: default;
padding: 0 0 0 8px;
position: relative;
border: none;
background: white;
}
.sidebar-tab .directory-list .folder > .folder-header h3 {
padding: 8px 4px;
background: white;
color: #1C1C1C;
font-family: 'Open Sans';
font-size: 13px;
font-weight: 700;
line-height: 1.6;
}
.sidebar-tab .directory-list .folder > .folder-header h3 > i {
margin-right: 4px;
color: #0d99cc;
}
.sidebar-tab .directory-list .folder > .folder-header a {
position: absolute;
top: 0;
right: 4px;
height: 100%;
padding: 0 4px;
color: #828282;
}
.sidebar-tab .directory-list .folder > .folder-header a:hover {
color: #c40f0f;
}
.sidebar-tab .directory-list .folder > .folder-header a i {
margin-top: 12px;
}
.sidebar-tab .directory-list .folder > .folder-header a.create-folder {
right: 28px;
}
.sidebar-tab .directory-list .folder.collapsed > .folder-header {
background: white;
}
.sidebar-tab .directory-list .folder + .entity {
border-top: 1px solid #0d99cc;
}
.sidebar-tab .directory-list .directory-item img {
flex: 0 0 32px;
height: 32px;
width: 32px;
align-self: center;
}
.sidebar-tab .directory-list .actor,
.sidebar-tab .directory-list .item,
.sidebar-tab .directory-list .journal,
.sidebar-tab .directory-list .table {
background: white;
border: none;
}
.sidebar-tab .directory-list .actor .entity-name,
.sidebar-tab .directory-list .item .entity-name,
.sidebar-tab .directory-list .journal .entity-name,
.sidebar-tab .directory-list .table .entity-name {
font-family: 'Open Sans';
font-size: 13px;
font-weight: 700;
color: #1C1C1C;
}
.sidebar-tab .directory-list .actor:nth-child(even),
.sidebar-tab .directory-list .item:nth-child(even),
.sidebar-tab .directory-list .journal:nth-child(even),
.sidebar-tab .directory-list .table:nth-child(even) {
background: rgba(175, 198, 214, 0.3);
}
#scenes .subdirectory {
border-left: none;
}
#scenes .scene {
border: none;
border-top: 1px solid #0d99cc;
border-left: 4px solid #0d99cc;
box-shadow: none;
position: relative;
height: 128px;
}
#scenes .scene + .scene {
margin-top: 4px;
}
#scenes .scene::after {
content: '';
display: block;
width: 100%;
height: 99px;
position: absolute;
top: 28px;
left: 0;
box-shadow: 0 0 20px #0d99cc inset;
}
#scenes .scene h3 {
font-family: 'Open Sans';
font-size: 13px;
font-weight: 700;
text-align: left;
text-shadow: none;
padding: 4px 4px 4px 12px;
background: white;
line-height: 1.6;
position: absolute;
top: 0;
left: 0;
width: 100%;
}
#playlists .directory-list {
padding: 0 8px;
}
#playlists .directory-list li.playlist {
padding: 8px;
border-radius: 4px;
background: white;
margin-bottom: 8px;
border-top: inherit;
box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.12), 0 1px 5px 0 rgba(0, 0, 0, 0.2);
}
#playlists .directory-list li.playlist .playlist-header {
background: white;
color: #c40f0f;
text-decoration: none;
border-bottom: 2px solid #0d99cc;
}
#playlists .directory-list li.playlist li.sound {
border: none;
color: #1C1C1C;
}
#playlists .directory-list li.playlist li.sound h4 {
font-family: 'Open Sans';
font-size: 13px;
font-weight: 400;
}
#playlists .directory-list li.playlist a.sound-control {
color: #c40f0f;
}
#compendium .compendium-entity {
margin: 0 4px;
padding: 8px;
background: white !important;
box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 3px 1px -2px rgba(0, 0, 0, 0.12), 0 1px 5px 0 rgba(0, 0, 0, 0.2);
border-radius: 4px;
border: none;
}
#compendium .compendium-entity + .compendium-entity {
margin-top: 4px;
}
#compendium .compendium-entity h3 {
border: none;
color: #c40f0f;
border-bottom: 2px solid #0d99cc;
font-family: 'Russo One';
font-size: 17px;
font-weight: 400;
padding: 0;
margin-bottom: 4px;
}
#compendium .compendium-entity ol.compendium-list li.compendium-pack {
margin: 0;
padding: 4px;
border: none;
}
#compendium .compendium-entity ol.compendium-list li.compendium-pack:nth-child(even) {
background: rgba(175, 198, 214, 0.3);
}
#compendium .compendium-entity ol.compendium-list li.compendium-pack .pack-title {
margin: 0;
position: relative;
}
#compendium .compendium-entity ol.compendium-list li.compendium-pack .pack-title a {
font-family: 'Open Sans';
font-size: 13px;
font-weight: 700;
}
#compendium .compendium-entity ol.compendium-list li.compendium-pack .pack-title a i {
display: none;
}
#compendium .compendium-entity ol.compendium-list li.compendium-pack .pack-title .status-icons {
top: 4px;
color: #828282;
font-size: 13px;
}
#compendium .compendium-entity ol.compendium-list li.compendium-pack footer.compendium-footer {
color: #1C1C1C;
}
#settings h2 {
color: #c40f0f;
border: none;
border-bottom: 2px solid #0d99cc;
margin: 0 8px;
padding: 0;
}
#settings #game-details,
#settings #settings-game,
#settings #settings-documentation,
#settings #settings-access {
padding: 0 8px;
margin: 0 0 8px;
color: #1C1C1C;
}

3325
sw5e.css

File diff suppressed because it is too large Load diff

99
sw5e.js
View file

@ -22,12 +22,14 @@ import Item5e from "./module/item/entity.js";
import AbilityTemplate from "./module/pixi/ability-template.js";
import AbilityUseDialog from "./module/apps/ability-use-dialog.js";
import ActorSheetFlags from "./module/apps/actor-flags.js";
import ActorSheet5eCharacter from "./module/actor/sheets/character.js";
import ActorSheet5eNPC from "./module/actor/sheets/npc.js";
import ActorSheet5eVehicle from "./module/actor/sheets/vehicle.js";
import ActorSheet5eCharacter from "./module/actor/sheets/oldSheets/character.js";
import ActorSheet5eNPC from "./module/actor/sheets/oldSheets/npc.js";
import ActorSheet5eVehicle from "./module/actor/sheets/oldSheets/vehicle.js";
import ActorSheet5eCharacterNew from "./module/actor/sheets/newSheet/character.js";
import ItemSheet5e from "./module/item/sheet.js";
import ShortRestDialog from "./module/apps/short-rest.js";
import TraitSelector from "./module/apps/trait-selector.js";
import MovementConfig from "./module/apps/movement-config.js";
// Import Helpers
import * as chat from "./module/chat.js";
@ -48,11 +50,13 @@ Hooks.once("init", function() {
AbilityUseDialog,
ActorSheetFlags,
ActorSheet5eCharacter,
ActorSheet5eCharacterNew,
ActorSheet5eNPC,
ActorSheet5eVehicle,
ItemSheet5e,
ShortRestDialog,
TraitSelector
TraitSelector,
MovementConfig
},
canvas: {
AbilityTemplate
@ -72,7 +76,7 @@ Hooks.once("init", function() {
CONFIG.SW5E = SW5E;
CONFIG.Actor.entityClass = Actor5e;
CONFIG.Item.entityClass = Item5e;
if ( CONFIG.time ) CONFIG.time.roundTime = 6; // TODO remove conditional after 0.7.x
CONFIG.time.roundTime = 6;
// Add DND5e namespace for module compatability
game.dnd5e = game.sw5e;
@ -87,11 +91,16 @@ Hooks.once("init", function() {
// Register sheet application classes
Actors.unregisterSheet("core", ActorSheet);
Actors.registerSheet("sw5e", ActorSheet5eCharacter, {
Actors.registerSheet("sw5e", ActorSheet5eCharacterNew, {
types: ["character"],
makeDefault: true,
label: "SW5E.SheetClassCharacter"
});
Actors.registerSheet("sw5e", ActorSheet5eCharacter, {
types: ["character"],
makeDefault: false,
label: "SW5E.SheetClassCharacterOld"
});
Actors.registerSheet("sw5e", ActorSheet5eNPC, {
types: ["npc"],
makeDefault: true,
@ -125,18 +134,18 @@ Hooks.once("setup", function() {
// Localize CONFIG objects once up-front
const toLocalize = [
"abilities", "abilityAbbreviations", "alignments", "conditionTypes", "consumableTypes", "currencies",
"damageTypes", "damageResistanceTypes", "distanceUnits", "equipmentTypes", "healingTypes", "itemActionTypes",
"limitedUsePeriods", "senses", "skills", "powerComponents", "powerLevels", "powerPreparationModes", "powerSchools",
"powerScalingModes", "targetTypes", "timePeriods", "weaponProperties", "weaponTypes", "languages",
"polymorphSettings", "armorProficiencies", "weaponProficiencies", "toolProficiencies", "abilityActivationTypes",
"abilityConsumptionTypes", "actorSizes", "proficiencyLevels", "armorPropertiesTypes", "cover"
"abilities", "abilityAbbreviations", "abilityActivationTypes", "abilityConsumptionTypes", "actorSizes", "alignments",
"armorProficiencies", "armorPropertiesTypes", "conditionTypes", "consumableTypes", "cover", "currencies", "damageResistanceTypes",
"damageTypes", "distanceUnits", "equipmentTypes", "healingTypes", "itemActionTypes", "languages",
"limitedUsePeriods", "movementUnits", "polymorphSettings", "proficiencyLevels", "senses", "skills",
"powerComponents", "powerLevels", "powerPreparationModes", "powerScalingModes", "powerSchools", "targetTypes",
"timePeriods", "toolProficiencies", "weaponProficiencies", "weaponProperties", "weaponTypes"
];
// Exclude some from sorting where the default order matters
const noSort = [
"abilities", "alignments", "currencies", "distanceUnits", "itemActionTypes", "proficiencyLevels",
"limitedUsePeriods", "powerComponents", "powerLevels", "weaponTypes"
"abilities", "alignments", "currencies", "distanceUnits", "movementUnits", "itemActionTypes", "proficiencyLevels",
"limitedUsePeriods", "powerComponents", "powerLevels", "powerPreparationModes", "weaponTypes"
];
// Localize and sort CONFIG objects
@ -152,6 +161,9 @@ Hooks.once("setup", function() {
}
// add DND5E translation for module compatability
game.i18n.translations.DND5E = game.i18n.translations.SW5E;
// console.log(game.settings.get("sw5e", "colorTheme"));
let theme = game.settings.get("sw5e", "colorTheme") + '-theme';
document.body.classList.add(theme);
});
/* -------------------------------------------- */
@ -161,22 +173,23 @@ Hooks.once("setup", function() {
*/
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);
// 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) => macros.create5eMacro(data, slot));
// Determine whether a system migration is required and feasible
if ( !game.user.isGM ) return;
const currentVersion = game.settings.get("sw5e", "systemMigrationVersion");
const NEEDS_MIGRATION_VERSION = "1.1.0";
const COMPATIBLE_MIGRATION_VERSION = 0.80;
const needsMigration = currentVersion && isNewerVersion(NEEDS_MIGRATION_VERSION, currentVersion);
if ( !needsMigration ) return;
// Perform the migration
if ( currentVersion && isNewerVersion(COMPATIBLE_MIGRATION_VERSION, currentVersion) ) {
const warning = `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.`;
ui.notifications.error(warning, {permanent: true});
}
migrations.migrateWorld();
});
/* -------------------------------------------- */
@ -213,8 +226,36 @@ Hooks.on("getChatLogEntryContext", chat.addChatMessageContextOptions);
Hooks.on("renderChatLog", (app, html, data) => Item5e.chatListeners(html));
Hooks.on("renderChatPopout", (app, html, data) => Item5e.chatListeners(html));
Hooks.on('getActorDirectoryEntryContext', Actor5e.addDirectoryContextOptions);
Hooks.on("renderSceneDirectory", (app, html, data)=> {
//console.log(html.find("header.folder-header"));
setFolderBackground(html);
});
Hooks.on("renderActorDirectory", (app, html, data)=> {
setFolderBackground(html);
});
Hooks.on("renderItemDirectory", (app, html, data)=> {
setFolderBackground(html);
});
Hooks.on("renderJournalDirectory", (app, html, data)=> {
setFolderBackground(html);
});
Hooks.on("renderRollTableDirectory", (app, html, data)=> {
setFolderBackground(html);
});
Hooks.on("ActorSheet5eCharacterNew", (app, html, data) => {
console.log("renderSwaltSheet");
});
// TODO I should remove this
Handlebars.registerHelper('getProperty', function (data, property) {
return getProperty(data, property);
});
function setFolderBackground(html) {
html.find("header.folder-header").each(function() {
let bgColor = $(this).css("background-color");
if(bgColor == undefined)
bgColor = "rgb(255,255,255)";
$(this).closest('li').css("background-color", bgColor);
})
}

View file

@ -1,12 +1,12 @@
{
"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.98,
"title": "SW 5th Edition",
"description": "A comprehensive game system for running games of SW 5th Edition in the Foundry VTT environment.",
"version": "1.1.1",
"author": "Dev Team",
"scripts": [],
"esmodules": ["sw5e.js"],
"styles": ["sw5e.css"],
"styles": ["sw5e.css", "sw5e-global.css", "sw5e-light.css", "sw5e-dark.css"],
"packs": [
{
"name": "adventuringgear",
@ -14,36 +14,36 @@
"path": "./packs/packs/adventuringgear.db",
"entity": "Item"
},
{
"name": "archetypes",
"label": "Archetypes",
"path": "./packs/packs/archetypes.db",
"entity": "Item"
},
{
"name": "archetypes",
"label": "Archetypes",
"path": "./packs/packs/archetypes.db",
"entity": "Item"
},
{
"name": "armor",
"label": "Armor",
"path": "./packs/packs/armor.db",
"entity": "Item"
},
{
"name": "backgrounds",
"label": "Backgrounds",
"path": "./packs/packs/backgrounds.db",
"entity": "Item"
},
{
"name": "backgrounds",
"label": "Backgrounds",
"path": "./packs/packs/backgrounds.db",
"entity": "Item"
},
{
"name": "classes",
"label": "Classes",
"path": "./packs/packs/classes.db",
"entity": "Item"
},
{
"name": "classfeatures",
"label": "Class Features",
"path": "./packs/packs/classfeatures.db",
"entity": "Item"
},
{
"name": "classfeatures",
"label": "Class Features",
"path": "./packs/packs/classfeatures.db",
"entity": "Item"
},
{
"name": "enhanceditems",
"label": "Enhanced Items",
@ -56,17 +56,17 @@
"path": "./packs/packs/feats.db",
"entity": "Item"
},
{
{
"name": "fightingstyles",
"label": "Fighting Styles",
"path": "./packs/packs/fightingstyles.db",
"entity": "Item"
"label": "Fighting Styles",
"path": "./packs/packs/fightingstyles.db",
"entity": "Item"
},
{
{
"name": "fightingmasteries",
"label": "Fighting Masteries",
"path": "./packs/packs/fightingmasteries.db",
"entity": "Item"
"label": "Fighting Masteries",
"path": "./packs/packs/fightingmasteries.db",
"entity": "Item"
},
{
"name": "forcepowers",
@ -81,16 +81,10 @@
"entity": "Item"
},
{
"name": "journal",
"label": "Journal Entries",
"path": "./packs/packs/journal.db",
"entity": "JournalEntry"
},
{
"name": "lightsaberform",
"label": "Lightsaber Forms",
"path": "./packs/packs/lightsaberforms.db",
"entity": "Item"
"name": "lightsaberform",
"label": "Lightsaber Forms",
"path": "./packs/packs/lightsaberforms.db",
"entity": "Item"
},
{
"name": "monsters",
@ -103,26 +97,26 @@
"label": "Species",
"path": "./packs/packs/species.db",
"entity": "Item"
},
},
{
"name": "speciestraits",
"label": "Species Traits",
"path": "./packs/packs/speciestraits.db",
"entity": "Item"
"entity": "Item"
},
{
"name": "tables",
"label": "Tables",
"path": "./packs/packs/tables.db",
"entity": "RollTable"
},
{
{
"name": "tables",
"label": "Tables",
"path": "./packs/packs/tables.db",
"entity": "RollTable"
},
{
"name": "techpowers",
"label": "Tech Powers",
"path": "./packs/packs/techpowers.db",
"entity": "Item"
},
{
{
"name": "weapons",
"label": "Weapons",
"path": "./packs/packs/weapons.db",
@ -141,8 +135,8 @@
"gridUnits": "ft",
"primaryTokenAttribute": "attributes.hp",
"secondaryTokenAttribute": null,
"minimumCoreVersion": "0.5.6",
"compatibleCoreVersion": "0.7.5",
"minimumCoreVersion": "0.7.6",
"compatibleCoreVersion": "0.7.6",
"url": "https://github.com/unrealkakeman89/sw5e",
"manifest": "https://raw.githubusercontent.com/unrealkakeman89/sw5e/master/system.json",
"download": "https://github.com/unrealkakeman89/sw5e/archive/master.zip"

View file

@ -76,10 +76,18 @@
},
"creature": {
"attributes": {
"movement": {
"burrow": 0,
"climb": 0,
"fly": 0,
"swim": 0,
"walk": 30,
"units": "ft",
"hover": false
},
"powercasting": "int",
"speed": {
"value": "30 ft",
"special": ""
"_deprecated": true
}
},
"details": {
@ -481,14 +489,14 @@
"value": ""
}
},
"speciesDescription": {
"data": "$characteristics-table",
"description": {
"value": "",
"chat": "",
"unidentified": ""
},
"traits": ""
"speciesDescription": {
"data": "$characteristics-table",
"description": {
"value": "",
"chat": "",
"unidentified": ""
},
"traits": ""
},
"physicalItem": {
"quantity": 1,
@ -560,14 +568,14 @@
}
}
},
"archetype": {
"templates": ["archetypeDescription"],
"className": "",
"description": ""
},
"background": {
"templates": ["backgroundDescription"]
},
"archetype": {
"templates": ["archetypeDescription"],
"className": "",
"description": ""
},
"background": {
"templates": ["backgroundDescription"]
},
"backpack": {
"templates": ["itemDescription", "physicalItem"],
"capacity": {
@ -593,19 +601,19 @@
},
"powercasting": "none"
},
"classfeature": {
"templates": ["itemDescription", "activatedEffect", "action"],
"className": ""
},
"fightingmastery": {
"templates": ["fightingmasteryDescription"]
},
"fightingstyle": {
"templates": ["fightingstyleDescription"]
},
"lightsaberform": {
"templates": ["lightsaberformDescription"]
},
"classfeature": {
"templates": ["itemDescription", "activatedEffect", "action"],
"className": ""
},
"fightingmastery": {
"templates": ["fightingmasteryDescription"]
},
"fightingstyle": {
"templates": ["fightingstyleDescription"]
},
"lightsaberform": {
"templates": ["lightsaberformDescription"]
},
"consumable": {
"templates": ["itemDescription", "physicalItem", "activatedEffect", "action"],
"consumableType": "potion",
@ -641,7 +649,7 @@
},
"species": {
"templates": ["speciesDescription"]
},
},
"tool": {
"templates": ["itemDescription", "physicalItem"],
"ability": "int",

View file

@ -0,0 +1,144 @@
<form class="{{cssClass}} swalt-sheet" autocomplete="off">
{{!-- Sheet Header --}}
<header class="panel">
<img class="profile" src="{{actor.img}}" title="{{actor.name}}" data-edit="img" />
<h1 class="character-name">
<input name="name" type="text" value="{{actor.name}}" placeholder="{{ localize 'SW5E.Name' }}" />
</h1>
<div class="level-experience">
<div class="charlevel">
{{ localize "SW5E.Level" }} {{data.details.level}} {{classLabels}}
</div>
{{#unless disableExperience}}
<div class="experience">
<input name="data.details.xp.value" type="text" value="{{data.details.xp.value}}" data-dtype="Number"
placeholder="0" />
<span class="sep">/</span>
<span class="max">{{data.details.xp.max}}</span>
</div>
<div class="xpbar">
<span class="bar" style="width: {{data.details.xp.pct}}%"></span>
</div>
{{/unless}}
</div>
<div class="summary">
<input type="text" name="data.details.species" value="{{data.details.species}}"
placeholder="{{ localize 'SW5E.Species' }}" />
<input type="text" name="data.details.background" value="{{data.details.background}}"
placeholder="{{ localize 'SW5E.Background' }}" />
<input type="text" name="data.details.alignment" value="{{data.details.alignment}}"
placeholder="{{ localize 'SW5E.Alignment' }}" />
<div class="proficiency">
Proficiency {{numberFormat data.attributes.prof decimals=0 sign=true}}
</div>
</div>
{{!-- Header Attributes --}}
<div class="attributes">
{{!-- ARMOR CLASS --}}
<section>
<h1>{{ localize "SW5E.ArmorClass" }}</h1>
<div class="attribute-value">
<input class="ac-display" name="data.attributes.ac.value" type="text"
value="{{data.attributes.ac.value}}" data-dtype="Number" placeholder="10" />
</div>
</section>
{{!-- HIT POINTS --}}
<section>
<h1>Hit Points</h1>
<div class="attribute-value multiple">
<input name="data.attributes.hp.value" type="text" value="{{data.attributes.hp.value}}"
data-dtype="Number" placeholder="10" class="value-number" />
<span class="value-separator">/</span>
<input name="data.attributes.hp.max" type="text" value="{{data.attributes.hp.max}}"
data-dtype="Number" placeholder="10" class="value-number" />
</div>
<footer class="attribute-footer hit-points">
<input name="data.attributes.hp.temp" type="text" class="temphp" placeholder="+Temp"
value="{{data.attributes.hp.temp}}" data-dtype="{{data.attributes.hp.type}}" />
<input name="data.attributes.hp.tempmax" type="text" class="temphp" placeholder="+Max"
value="{{data.attributes.hp.tempmax}}" data-dtype="{{data.attributes.hp.type}}" />
</footer>
</section>
{{!-- HIT DICE / SHORT & LONG REST BUTTONS --}}
<section>
<h1>{{ localize "SW5E.HitDice" }}</h1>
<div class="attribute-value multiple">
<span class="value-number">{{data.attributes.hd}}</span>
<span class="value-separator">/</span>
<span class="value-number">{{data.details.level}}</span>
</div>
<footer class="attribute-footer hit-dice">
<button type="button" class="rest short-rest">{{ localize "SW5E.RestS" }}</button>
<button type="button" class="rest long-rest">{{ localize "SW5E.RestL" }}</button>
</footer>
</section>
{{!-- INITIATIVE --}}
<section>
<h1>{{ localize "SW5E.Initiative" }}</h1>
<div class="attribute-value">
<span class="initiative">{{numberFormat data.attributes.init.total decimals=0 sign=true}}</span>
</div>
<footer class="attribute-footer initiative">
<span>{{ localize "SW5E.Modifier" }}</span>
<input name="data.attributes.init.value" type="text" placeholder="0" data-dtype="Number"
value="{{numberFormat data.attributes.init.value decimals=0 sign=true}}" />
</footer>
</section>
{{!-- SPEED / MOVEMENT TYPES --}}
<section>
<h1>{{ localize "SW5E.Speed" }}</h1>
<div class="attribute-value">
<input name="data.attributes.speed.value" type="text" value="{{data.attributes.speed.value}}"
placeholder="0" />
</div>
<footer class="attribute-footer speed">
<input type="text" class="speed" name="data.attributes.speed.special"
value="{{data.attributes.speed.special}}" placeholder="{{ localize 'SW5E.SpeedSpecial' }}" />
</footer>
</section>
</div>
</header>
{{!-- PC Sheet Navigation --}}
<nav class="sheet-navigation root-tabs" data-group="primary">
<button class="item active" data-tab="attributes">Core</button>
<button class="item" data-tab="inventory">{{ localize "SW5E.Inventory" }}</button>
<button class="item" data-tab="features">{{ localize "SW5E.Features" }}</button>
<button class="item" data-tab="powerbook">{{ localize "SW5E.Powerbook" }}</button>
<button class="item" data-tab="biography">{{ localize "SW5E.Biography" }}</button>
<button class="item" data-tab="notes">Notes</button>
</nav>
{{!-- PC Sheet Body --}}
<section class="sheet-body">
{{!-- Core Tab --}}
<section class="tab attributes core" data-group="primary" data-tab="attributes">
{{> "systems/sw5e/templates/actors/newActor/parts/swalt-core.html" sections=attributes}}
</section>
{{!-- Inventory Tab --}}
<section class="tab inventory" data-group="primary" data-tab="inventory">
{{> "systems/sw5e/templates/actors/newActor/parts/swalt-inventory.html" sections=inventory}}
</section>
{{!-- Features Tab --}}
<section class="tab features" data-group="primary" data-tab="features">
{{> "systems/sw5e/templates/actors/newActor/parts/swalt-features.html" sections=features}}
</section>
{{!-- Powerbook Tab --}}
<section class="tab powerbook" data-group="primary" data-tab="powerbook">
{{> "systems/sw5e/templates/actors/newActor/parts/swalt-powerbook.html"}}
</section>
{{!-- Biography Tab --}}
<section class="tab biography" data-group="primary" data-tab="biography">
{{> "systems/sw5e/templates/actors/newActor/parts/swalt-biography.html"}}
</section>
{{!-- Notes Tab --}}
<section class="tab notes" data-group="primary" data-tab="notes">
{{> "systems/sw5e/templates/actors/newActor/parts/swalt-notes.html"}}
</section>
</form>

View file

@ -0,0 +1,137 @@
<form class="{{cssClass}} swalt-sheet" autocomplete="off">
{{!-- Sheet Header --}}
<header class="panel">
<img class="profile" src="{{actor.img}}" title="{{actor.name}}" data-edit="img" />
<h1 class="character-name">
<input name="name" type="text" value="{{actor.name}}" placeholder="{{ localize 'SW5E.Name' }}" />
</h1>
<div class="level-experience">
<div class="charlevel">
{{ localize "SW5E.Level" }} {{data.details.level}} {{classLabels}}
</div>
{{#unless disableExperience}}
<div class="experience">
<input name="data.details.xp.value" type="text" value="{{data.details.xp.value}}" data-dtype="Number"
placeholder="0" />
<span class="sep">/</span>
<span class="max">{{data.details.xp.max}}</span>
</div>
<div class="xpbar">
<span class="bar" style="width: {{data.details.xp.pct}}%"></span>
</div>
{{/unless}}
</div>
<div class="summary">
<input type="text" name="data.details.species" value="{{data.details.species}}"
placeholder="{{ localize 'SW5E.Species' }}" />
<input type="text" name="data.details.background" value="{{data.details.background}}"
placeholder="{{ localize 'SW5E.Background' }}" />
<input type="text" name="data.details.alignment" value="{{data.details.alignment}}"
placeholder="{{ localize 'SW5E.Alignment' }}" />
<div class="proficiency">
Proficiency {{numberFormat data.attributes.prof decimals=0 sign=true}}
</div>
</div>
{{!-- Header Attributes --}}
<div class="attributes">
{{!-- ARMOR CLASS --}}
<section>
<h1>{{ localize "SW5E.ArmorClass" }}</h1>
<div class="attribute-value">
<input class="ac-display" name="data.attributes.ac.value" type="text"
value="{{data.attributes.ac.value}}" data-dtype="Number" placeholder="10" />
</div>
</section>
{{!-- HIT POINTS --}}
<section>
<h1>Hit Points</h1>
<div class="attribute-value multiple">
<input name="data.attributes.hp.value" type="text" value="{{data.attributes.hp.value}}"
data-dtype="Number" placeholder="10" class="value-number" />
<span class="value-separator">/</span>
<input name="data.attributes.hp.max" type="text" value="{{data.attributes.hp.max}}"
data-dtype="Number" placeholder="10" class="value-number" />
</div>
<footer class="attribute-footer hit-points">
<input name="data.attributes.hp.temp" type="text" class="temphp" placeholder="+Temp"
value="{{data.attributes.hp.temp}}" data-dtype="{{data.attributes.hp.type}}" />
<input name="data.attributes.hp.tempmax" type="text" class="temphp" placeholder="+Max"
value="{{data.attributes.hp.tempmax}}" data-dtype="{{data.attributes.hp.type}}" />
</footer>
</section>
{{!-- HIT DICE / SHORT & LONG REST BUTTONS --}}
<section>
<h1>{{ localize "SW5E.HitDice" }}</h1>
<div class="attribute-value multiple">
<span class="value-number">{{data.attributes.hd}}</span>
<span class="value-separator">/</span>
<span class="value-number">{{data.details.level}}</span>
</div>
<footer class="attribute-footer hit-dice">
<button type="button" class="rest short-rest">{{ localize "SW5E.RestS" }}</button>
<button type="button" class="rest long-rest">{{ localize "SW5E.RestL" }}</button>
</footer>
</section>
{{!-- INITIATIVE --}}
<section>
<h1>{{ localize "SW5E.Initiative" }}</h1>
<div class="attribute-value">
<span class="initiative">{{numberFormat data.attributes.init.total decimals=0 sign=true}}</span>
</div>
<footer class="attribute-footer initiative">
<span>{{ localize "SW5E.Modifier" }}</span>
<input name="data.attributes.init.value" type="text" placeholder="0" data-dtype="Number"
value="{{numberFormat data.attributes.init.value decimals=0 sign=true}}" />
</footer>
</section>
{{!-- SPEED / MOVEMENT TYPES --}}
<section>
<h1>{{ localize "SW5E.Speed" }}</h1>
<div class="attribute-value">
<input name="data.attributes.speed.value" type="text" value="{{data.attributes.speed.value}}"
placeholder="0" />
</div>
<footer class="attribute-footer speed">
<input type="text" class="speed" name="data.attributes.speed.special"
value="{{data.attributes.speed.special}}" placeholder="{{ localize 'SW5E.SpeedSpecial' }}" />
</footer>
</section>
</div>
</header>
{{!-- PC Sheet Navigation --}}
<nav class="sheet-navigation root-tabs" data-group="primary">
<button class="item active" data-tab="attributes">Core</button>
<button class="item" data-tab="inventory">{{ localize "SW5E.Inventory" }}</button>
<button class="item" data-tab="features">{{ localize "SW5E.Features" }}</button>
<button class="item" data-tab="powerbook">{{ localize "SW5E.Powerbook" }}</button>
<button class="item" data-tab="biography">{{ localize "SW5E.Biography" }}</button>
</nav>
{{!-- PC Sheet Body --}}
<section class="sheet-body">
{{!-- Core Tab --}}
<section class="tab attributes core" data-group="primary" data-tab="attributes">
{{> "systems/sw5e/templates/actors/newActor/parts/swalt-core.html" sections=attributes}}
</section>
{{!-- Inventory Tab --}}
<section class="tab inventory" data-group="primary" data-tab="inventory">
{{> "systems/sw5e/templates/actors/newActor/parts/swalt-inventory.html" sections=inventory}}
</section>
{{!-- Features Tab --}}
<section class="tab features" data-group="primary" data-tab="features">
{{> "systems/sw5e/templates/actors/newActor/parts/swalt-features.html" sections=features}}
</section>
{{!-- Powerbook Tab --}}
<section class="tab powerbook" data-group="primary" data-tab="powerbook">
{{> "systems/sw5e/templates/actors/newActor/parts/swalt-powerbook.html"}}
</section>
{{!-- Biography Tab --}}
<section class="tab biography" data-group="primary" data-tab="biography">
{{> "systems/sw5e/templates/actors/newActor/parts/swalt-biography.html"}}
</section>
</form>

View file

@ -0,0 +1,33 @@
<li class="item group-grid-fav-items" data-item-id="{{item._id}}">
<div class="item-name rollable">
<div class="item-image" style="background-image: url({{item.img}})"></div>
<h4>{{item.name}}</h4>
</div>
<div class="item-detail item-uses">
{{#if item.data.uses.max }}
{{item.data.uses.value}} / {{item.data.uses.max}}
{{/if}}
</div>
<div class="item-detail item-count">
{{#if item.data.quantity}}
{{item.data.quantity}}
{{/if}}
</div>
<div class="item-detail item-comps">
{{#if item.powerComps}}
{{item.powerComps}}
{{#if item.powerCon}}<i class='fas fa-copyright'></i>{{/if}}
{{#if item.powerRit}}<i class='fas fa-registered'></i>{{/if}}
{{/if}}
</div>
<div class="item-detail item-controls">
<a class="item-control item-edit" title="Edit Item"><i class="fas fa-edit"></i></a>
<a class="item-control item-fav" title="Remove"><i class="fas fa-sign-out-alt"></i></a>
</div>
</li>

View file

@ -0,0 +1,27 @@
<form class="{{cssClass}} swalt-sheet limited" autocomplete="off">
<!-- HEADER -->
<header class="panel">
<img class="profile" src="{{actor.img}}" title="{{actor.name}}" data-edit="img" />
<h1 class="character-name">
{{actor.name}}
</h1>
</header>
<!-- BODY -->
<section class="sheet-body">
<div class="tab biography active">
<div class="panel">
<section class="additional-info">
<h1 class="section-titles">Description</h1>
{{editor content=data.details.description.value target="data.details.description.value" button=true owner=owner editable=editable}}
</section>
<section>
<h1 class="section-titles">Background</h1>
{{editor content=data.details.biography.value target="data.details.biography.value" button=true owner=owner editable=editable}}
</section>
</div>
</div>
</section>
</form>

View file

@ -0,0 +1,22 @@
<div class="panel additional-info">
<section><h1 class="section-titles biopage">Personality Traits</h1>
{{editor content=data.details.trait target="data.details.trait" button=true owner=owner editable=editable}}
</section>
<section><h1 class="section-titles biopage">Ideals</h1>
{{editor content=data.details.ideal target="data.details.ideal" button=true owner=owner editable=editable}}
</section>
<section><h1 class="section-titles biopage">Bonds</h1>
{{editor content=data.details.bond target="data.details.bond" button=true owner=owner editable=editable}}
</section>
<section><h1 class="section-titles biopage">Flaws</h1>
{{editor content=data.details.flaw target="data.details.flaw" button=true owner=owner editable=editable}}
</section>
</div>
<div class="panel background">
<section><h1 class="section-titles biopage">Description</h1>
{{editor content=data.details.description.value target="data.details.description.value" button=true owner=owner editable=editable}}
</section>
<section><h1 class="section-titles">Background</h1>
{{editor content=data.details.biography.value target="data.details.biography.value" button=true owner=owner editable=editable}}
</section>
</div>

View file

@ -0,0 +1,56 @@
<section class="panel abilities">
{{!-- Ability Scores --}}
<section class="scores">
<h1>Ability Scores</h1>
<ol>
{{#each data.abilities as |ability id|}}
<li class="ability {{#if ability.proficient}}proficient{{/if}}" data-ability="{{id}}">
<h2 class="ability-name rollable">{{ability.label}}</h4>
<input class="ability-score" name="data.abilities.{{id}}.value" type="text"
value="{{ability.value}}" data-dtype="Number" placeholder="10" />
<div class="ability-modifiers">
<span class="ability-mod"
title="Modifier">{{numberFormat ability.mod decimals=0 sign=true}}</span>
<input type="hidden" name="data.abilities.{{id}}.proficient"
value="{{ability.proficient}}" data-dtype="Number" />
<button class="proficiency-toggle ability-proficiency"
title="Proficiency">{{{ability.icon}}}</button>
<span class="ability-save"
title="Saving Throw">{{numberFormat ability.save decimals=0 sign=true}}</span>
</div>
</li>
{{/each}}
</ol>
</section>
{{!-- Skills --}}
<section class="skills">
<h1>Skills</h1>
<ol>
{{#each data.skills as |skill s|}}
<li class="skill {{#if skill.value}}proficient{{/if}}" data-skill="{{s}}">
<input type="hidden" name="data.skills.{{s}}.value" value="{{skill.value}}"
data-dtype="Number" />
<button class="proficiency-toggle skill-proficiency"
title="{{skill.hover}}">{{{skill.icon}}}</button>
<span class="skill-name rollable">{{skill.label}}</span>
<span class="skill-ability">{{skill.ability}}</span>
<span class="skill-mod">{{numberFormat skill.total decimals=0 sign=true}}</span>
{{!-- <input class="skill-bonus" name="data.skills.{{s}}.bonus" type="text" value="{{numberFormat skill.bonus decimals=0 sign=true}}" data-dtype="Number" placeholder="0" title="Misc. Modifier"/> --}}
{{!-- <span class="skill-passive">({{skill.passive}})</span> --}}
</li>
{{/each}}
</ol>
</section>
</section>
<section class="panel traits-resources">
<nav class="core-tabs tab-list" data-subgroup-selection>
<button type="button" class="item active" data-subgroup="coreattributes" data-target="traits">Traits</button>
<button type="button" class="item" data-subgroup="coreattributes" data-target="resources">Resources</button>
</nav>
<div class="tab core-traits active" data-subgroup="coreattributes" data-target="traits">
{{> "systems/sw5e/templates/actors/newActor/parts/swalt-traits.html"}}
</div>
<div class="tab core-resources" data-subgroup="coreattributes" data-target="resources">
{{> "systems/sw5e/templates/actors/newActor/parts/swalt-resources.html"}}
</div>
</section>

View file

@ -0,0 +1,80 @@
<div class="panel">
<ul class="filter-list" data-filter="features">
<li class="filter-title">{{localize "SW5E.Filter"}}</li>
<li class="filter-item" data-filter="action">{{localize "SW5E.Action"}}</li>
<li class="filter-item" data-filter="bonus">{{localize "SW5E.BonusAction"}}</li>
<li class="filter-item" data-filter="reaction">{{localize "SW5E.Reaction"}}</li>
</ul>
<ol class="group-list">
{{#each sections as |section sid|}}
<li>
<div class="group-list-title group-grid-features">
<div class="title">
<h3 class="item-name">{{localize section.label}}</h3>
{{#if ../owner}}
<a class="item-control item-create" title="{{localize 'SW5E.FeatureAdd'}}"
{{#each section.dataset as |v k|}}data-{{k}}="{{v}}" {{/each}}>
<i class="fas fa-plus"></i> {{localize "SW5E.Add"}}
</a>
{{/if}}
</div>
{{#if section.hasActions}}
<div class="item-detail item-uses">{{localize "SW5E.Uses"}}</div>
<div class="item-detail item-action">{{localize "SW5E.Usage"}}</div>
{{/if}}
</div>
<ol class="item-list">
{{#each section.items as |item iid|}}
<li class="item group-grid-features {{#if isDepleted}}depleted{{/if}}" data-item-id="{{item._id}}">
<div class="item-name rollable">
<div class="item-image" style="background-image: url({{item.img}})"></div>
<h4>{{item.name}}</h4>
</div>
{{#if section.hasActions}}
<div class="item-detail item-uses">
{{#if item.isOnCooldown}}
<a class="item-recharge rollable">{{item.labels.recharge}}</a>
{{else if item.data.recharge.value}}
{{localize "SW5E.Charged"}}
{{else if item.hasUses}}
<input type="text" value="{{item.data.uses.value}}" placeholder="0" />/<span>{{item.data.uses.max}}</span>
{{/if}}
</div>
<div class="item-detail item-action">
{{#if item.data.activation.type }}
{{item.labels.activation}}
{{/if}}
</div>
{{else if section.isClass}}
<div class="item-detail player-class">
{{item.data.subclass}}
</div>
<div class="item-detail player-class-levels">
Level {{item.data.levels}}
</div>
{{/if}}
{{#if ../../owner}}
<div class="item-controls item-detail">
<a class="item-control item-edit" title="Edit Item"><i class="fas fa-edit"></i></a>
<a class="item-control item-delete" title="Delete Item"><i class="fas fa-trash"></i></a>
</div>
{{/if}}
</li>
{{/each}}
</ol>
</li>
{{/each}}
</ol>
</div>

View file

@ -0,0 +1,112 @@
<section class="panel">
{{#if isCharacter }}
<div class="currency-encumbrance">
<label class="currency">
{{localize "SW5E.Currency"}}
{{#each data.currency as |v k|}}
<input type="text" name="data.currency.{{k}}" value="{{v}}" data-dtype="Number" />
{{/each}}
</label>
{{#with data.attributes.encumbrance}}
<div class="encumbrance-wrapper" title="Encumbrance">
<div class="encumbrance {{#if encumbered}}encumbered{{/if}}">
<span class="encumbrance-bar" style="width:{{pct}}%"></span>
<i class="encumbrance-breakpoint encumbrance-33 arrow-up"></i>
<i class="encumbrance-breakpoint encumbrance-33 arrow-down"></i>
<i class="encumbrance-breakpoint encumbrance-66 arrow-up"></i>
<i class="encumbrance-breakpoint encumbrance-66 arrow-down"></i>
</div>
<span class="encumbrance-label">{{value}} / {{max}}</span>
</div>
{{/with}}
</div>
{{/if}}
<ul class="filter-list" data-filter="inventory">
<li class="filter-title">{{localize "SW5E.Filter"}}</li>
<li class="filter-item" data-filter="action">{{localize "SW5E.Action"}}</li>
<li class="filter-item" data-filter="bonus">{{localize "SW5E.BonusAction"}}</li>
<li class="filter-item" data-filter="reaction">{{localize "SW5E.Reaction"}}</li>
<li class="filter-item" data-filter="equipped">{{localize "SW5E.Equipped"}}</li>
</ul>
<div class="group-list-header group-grid-inventory">
<div>&nbsp;</div>
{{#if isCharacter}}
<div class="item-detail item-weight">{{localize "SW5E.Weight"}}</div>
{{/if}}
<div class="item-detail item-uses">{{localize "SW5E.Charges"}}</div>
<div class="item-detail item-action">{{localize "SW5E.Usage"}}</div>
<div class="item-detail"></div>
</div>
<ol class="group-list">
{{#each sections as |section sid|}}
<li>
<div class="group-list-title">
<h3 class="item-name">{{localize section.label}}</h3>
{{#if ../owner}}
<a class="item-control item-create" title='{{localize "SW5E.ItemCreate"}}'
{{#each section.dataset as |v k|}}data-{{k}}="{{v}}" {{/each}}>
<i class="fas fa-plus"></i> {{localize "SW5E.Add"}}
</a>
{{/if}}
</div>
<ol class="group-items">
{{#each section.items as |item iid|}}
<li class="item group-grid-inventory" data-item-id="{{item._id}}">
<div class="item-name rollable">
<div class="item-image" style="background-image: url({{item.img}})"></div>
<h4>
{{item.name~}}
{{~#if item.isStack}} ({{item.data.quantity}}){{/if}}
{{~#if item.data.attuned}} <i class="fas fa-sun attuned"
title={{localize "SW5E.Attuned"}}></i>{{/if}}
</h4>
</div>
{{#if ../../isCharacter}}
<div class="item-detail item-weight">
{{#if item.totalWeight}}
{{ item.totalWeight }} {{localize "SW5E.AbbreviationLbs"}}
{{/if}}
</div>
{{/if}}
<div class="item-detail item-uses">
{{#if item.hasUses }}
<input type="text" value="{{item.data.uses.value}}" placeholder="0" />
/<span style="padding-left: 8px;">{{item.data.uses.max}}</span>
{{/if}}
</div>
<div class="item-detail item-action">
{{#if item.data.activation.type }}
{{item.labels.activation}}
{{/if}}
</div>
{{#if ../../owner}}
<div class="item-detail item-controls">
<a class="item-control item-toggle {{item.toggleClass}}" title='{{item.toggleTitle}}'>
<i class="fas fa-shield-alt"></i>
</a>
<a class="item-control item-edit" title='{{localize "SW5E.ItemEdit"}}'><i
class="fas fa-edit"></i></a>
<a class="item-control item-delete" title='{{localize "SW5E.ItemDelete"}}'><i
class="fas fa-trash"></i></a>
</div>
{{/if}}
</li>
{{/each}}
</ol>
</li>
{{/each}}
</ol>
</section>

View file

@ -0,0 +1,33 @@
<div class="panel">
<section class="background">
<input type="text" name="data.details.notesname" value="{{data.details.notesname}}"
placeholder="Personal Journal" />
{{editor content=data.details.notes.value target="data.details.notes.value" button=true owner=owner editable=editable}}
</section>
<section>
<input type="text" name="data.details.notes1name" value="{{data.details.notes1name}}"
placeholder="Additional Notes" />
{{editor content=data.details.notes1.value target="data.details.notes1.value" button=true owner=owner editable=editable}}
</section>
<section>
<input type="text" name="data.details.notes2name" value="{{data.details.notes2name}}"
placeholder="Additional Notes" />
{{editor content=data.details.notes2.value target="data.details.notes2.value" button=true owner=owner editable=editable}}
</section>
<section>
<input type="text" name="data.details.notes3name" value="{{data.details.notes3name}}"
placeholder="Additional Notes" />
{{editor content=data.details.notes3.value target="data.details.notes3.value" button=true owner=owner editable=editable}}
</section>
<section>
<input type="text" name="data.details.notes4name" value="{{data.details.notes4name}}"
placeholder="Additional Notes" />
{{editor content=data.details.notes4.value target="data.details.notes4.value" button=true owner=owner editable=editable}}
</section>
</section>
</div>

View file

@ -0,0 +1,135 @@
<section class="panel">
<div class="powercasting-ability">
<label>{{localize "SW5E.PowerAbility"}}
<select name="data.attributes.powercasting" data-type="String">
{{#select data.attributes.powercasting}}
<option value="">{{localize "SW5E.None"}}</option>
{{#each data.abilities as |abl a|}}
<option value="{{a}}">{{abl.label}}</option>
{{/each}}
{{/select}}
</select>
</label>
{{#if isNPC}}
<label>{{localize "SW5E.PowercasterLevel"}}
<input class="powercasting-level" type="text" name="data.details.powerLevel" value="{{data.details.powerLevel}}"
data-dtype="Number" placeholder="0" />
</label>
{{/if}}
<h3 class="power-dc">{{localize "SW5E.PowerDC"}} <span>{{data.attributes.powerdc}}</span></h3>
</div>
<ul class="filter-list" data-filter="powerbook">
<li class="filter-title">{{localize "SW5E.Filter"}}</li>
<li class="filter-item" data-filter="action">{{localize "SW5E.Action"}}</li>
<li class="filter-item" data-filter="bonus">{{localize "SW5E.BonusAction"}}</li>
<li class="filter-item" data-filter="reaction">{{localize "SW5E.Reaction"}}</li>
<li class="filter-item" data-filter="concentration">{{localize "SW5E.AbbreviationConc"}}</li>
<li class="filter-item" data-filter="ritual">{{localize "SW5E.Ritual"}}</li>
<li class="filter-item" data-filter="prepared">{{localize "SW5E.Prepared"}}{{#if preparedPowers}}
({{preparedPowers}}){{/if}}</li>
</ul>
<div class="group-list-header group-grid-powers">
<div></div>
<div class="item-detail item-uses"></div>
<div class="item-detail item-school">{{localize "SW5E.PowerSchool"}}</div>
<div class="item-detail item-action">{{localize "SW5E.PowerUsage"}}</div>
<div class="item-detail item-target">{{localize "SW5E.PowerTarget"}}</div>
</div>
<ol class="group-list">
{{#each powerbook as |section|}}
<li>
<div class="group-list-title group-grid-powers">
<div class="item-name">
<h3>{{section.label}}</h3>
{{#if section.canCreate}}
<a class="item-control item-create" title="{{localize 'SW5E.PowerCreate'}}"
{{#each section.dataset as |v k|}}data-{{k}}="{{v}}" {{/each}}>
<i class="fas fa-plus"></i> {{localize "SW5E.Add"}}
</a>
{{/if}}
</div>
<div class="item-detail item-uses">
{{#if section.usesSlots}}
<input type="text" name="data.powers.{{section.prop}}.value" value="{{section.uses}}" placeholder="0"
data-dtype="Number" />
/
<span data-level="{{section.prop}}" data-slots="{{section.slots}}">
{{{section.slots}}}
{{#if ../editable}}
<a class="slot-max-override" title="{{localize 'SW5E.PowerProgOverride'}}">
<i class="fas fa-edit"></i>
</a>
{{/if}}
{{ else }}
{{{section.uses}}} / {{{section.slots}}}
{{/if}}
</div>
</div>
<ol class="item-list">
{{#each section.powers as |item i|}}
<li class="item group-grid-powers" data-item-id="{{item._id}}">
<div class="item-name rollable">
<div class="item-image" style="background-image: url({{item.img}})"></div>
<h4>{{item.name}}</h4>
</div>
<div class="item-detail item-uses">
{{#if item.data.uses.per }}
Uses {{item.data.uses.value}} / {{item.data.uses.max}}
{{/if}}
</div>
<!-- <div class="power-comps">
{{#each labels.components}}
<span class="power-component {{this}}">{{this}}</span>
{{/each}}
</div> -->
<div class="item-detail item-school">{{labels.school}}</div>
<div class="item-detail item-action">{{labels.activation}}</div>
<div class="item-detail item-target" title="{{localize 'SW5E.Range'}}: {{labels.range}}">
{{#if labels.target}}
{{labels.target}}
{{else}}None
{{/if}}
</div>
{{#if ../../owner}}
<div class="item-detail item-controls">
{{#if section.canPrepare}}
<a class="item-control item-toggle {{item.toggleClass}}" title="{{item.toggleTitle}}"><i
class="fas fa-check-circle"></i></a>
{{/if}}
<a class="item-control item-edit" title="Edit Item"><i class="fas fa-edit"></i></a>
<a class="item-control item-delete" title="Delete Item"><i class="fas fa-trash"></i></a>
</div>
{{/if}}
</li>
{{/each}}
</ol>
</li>
{{else}}
{{#if owner}}
{{#if filters.powerbook.size}}
<li class="item flexrow">
<p class="notes">{{localize "SW5E.FilterNoPowers"}}</p>
</li>
{{else}}
<li class="item flexrow inventory-header powerbook-header powerbook-empty">
<div class="item-controls">
<a class="item-control item-create" title="{{localize 'SW5E.PowerCreate'}}" data-type="power"
data-level="{{lvl}}"><i class="fas fa-plus"></i> {{localize "SW5E.PowerAdd"}}</a>
</div>
</li>
<li class="item flexrow">
<p class="notes">{{localize "SW5E.NoPowerLevels"}}</p>
</li>
{{/if}}
{{/if}}
{{/each}}
</ol>
</section>

View file

@ -0,0 +1,65 @@
{{!-- Resources, Counters, & Favorites --}}
<section class="resources">
<section class="resource-items">
{{#each resources as |res|}}
<div class="resource">
<h1>
<input name="data.resources.{{res.name}}.label" type="text" value="{{res.label}}"
placeholder="{{res.placeholder}}" />
</h1>
<div class="attribute-value">
<input name="data.resources.{{res.name}}.value" type="text" value="{{res.value}}" data-dtype="Number"
placeholder="0" class="value-number" />
<span class="value-separator">/</span>
<input name="data.resources.{{res.name}}.max" type="text" value="{{res.max}}" data-dtype="Number"
placeholder="0" class="value-number" />
</div>
<footer class="attribute-footer">
<label class="recharge checkbox">
{{ localize "SW5E.AbbreviationSR" }} <input name="data.resources.{{res.name}}.sr" type="checkbox"
{{checked res.sr}} />
</label>
<label class="recharge checkbox">
{{ localize "SW5E.AbbreviationLR" }} <input name="data.resources.{{res.name}}.lr" type="checkbox"
{{checked res.lr}} />
</label>
</footer>
</div>
{{/each}}
</section>
<section class="counters">
<div class="counter">
<h4 class="death-save rollable">{{ localize "SW5E.DeathSave" }}</h4>
<div class="counter-value">
<div class="death-success">
<i class="fas fa-check"></i>
<input type="text" name="data.attributes.death.success" data-dtype="Number" placeholder="0"
value="{{data.attributes.death.success}}" />
</div>
<div class="death-fail">
<i class="fas fa-times"></i>
<input type="text" name="data.attributes.death.failure" data-dtype="Number" placeholder="0"
value="{{data.attributes.death.failure}}" />
</div>
</div>
</div>
<div class="counter">
<h4>{{ localize "SW5E.Exhaustion" }}</h4>
<div class="counter-value">
<input type="text" name="data.attributes.exhaustion" data-dtype="Number" placeholder="0"
value="{{data.attributes.exhaustion}}" />
</div>
</div>
<div class="counter">
<h4>{{ localize "SW5E.Inspiration" }}</h4>
<div class="counter-value">
<input type="checkbox" name="data.attributes.inspiration" data-dtype="Boolean"
{{checked data.attributes.inspiration}} />
</div>
</div>
</section>
<section class="favorites">
<h1>Favorites</h1>
<div class="favtabtarget"></div>
</section>
</section>

View file

@ -0,0 +1,118 @@
<section class="traits">
<label>
{{localize "SW5E.Size"}}
<select class="actor-size" name="data.traits.size">
{{#select data.traits.size}}
{{#each config.actorSizes as |label size|}}
<option value="{{size}}">{{label}}</option>
{{/each}}
{{/select}}
</select>
</label>
<label class="{{#unless data.traits.senses}}inactive{{/unless}}">
{{#unless isVehicle}}
{{localize "SW5E.Senses"}}
<input type="text" name="data.traits.senses" value="{{data.traits.senses}}"
placeholder="{{ localize 'SW5E.None' }}" />
{{/unless}}
</label>
<div class="languages">
<label data-options="share-languages" class="languages">{{localize "SW5E.Languages"}}</label>
<a class="trait-selector" data-options="languages" data-target="data.traits.languages">
<i class="fas fa-edit"></i>
</a>
<ul class="traits-list">
{{#each data.traits.languages.selected as |v k|}}
<li>{{v}}</li>
{{/each}}
</ul>
</div>
<div>
<label>{{localize "SW5E.DamImm"}}</label>
<a class="trait-selector" data-options="damageResistanceTypes" data-target="data.traits.di">
<i class="fas fa-edit"></i>
</a>
<ul class="traits-list">
{{#each data.traits.di.selected as |v k|}}
<li>{{v}}</li>
{{/each}}
</ul>
</div>
<div>
<label>{{localize "SW5E.DamRes"}}</label>
<a class="trait-selector" data-options="damageResistanceTypes" data-target="data.traits.dr">
<i class="fas fa-edit"></i>
</a>
<ul class="traits-list">
{{#each data.traits.dr.selected as |v k|}}
<li>{{v}}</li>
{{/each}}
</ul>
</div>
<div>
<label>{{localize "SW5E.DamVuln"}}</label>
<a class="trait-selector" data-options="damageResistanceTypes" data-target="data.traits.dv">
<i class="fas fa-edit"></i>
</a>
<ul class="traits-list">
{{#each data.traits.dv.selected as |v k|}}
<li>{{v}}</li>
{{/each}}
</ul>
</div>
<div>
<label>{{localize "SW5E.ConImm"}}</label>
<a class="trait-selector" data-options="conditionTypes" data-target="data.traits.ci">
<i class="fas fa-edit"></i>
</a>
<ul class="traits-list">
{{#each data.traits.ci.selected as |v k|}}
<li>{{v}}</li>
{{/each}}
</ul>
</div>{{#if isCharacter}}
<div>
<label>{{localize "SW5E.TraitWeaponProf"}}</label>
<a class="trait-selector" data-options="weaponProficiencies" data-target="data.traits.weaponProf">
<i class="fas fa-edit"></i>
</a>
<ul class="traits-list">
{{#each data.traits.weaponProf.selected as |v k|}}
<li>{{v}}</li>
{{/each}}
</ul>
</div>
<div>
<label>{{localize "SW5E.TraitArmorProf"}}</label>
<a class="trait-selector" data-options="armorProficiencies" data-target="data.traits.armorProf">
<i class="fas fa-edit"></i>
</a>
<ul class="traits-list">
{{#each data.traits.armorProf.selected as |v k|}}
<li>{{v}}</li>
{{/each}}
</ul>
</div>
<div>
<label>{{localize "SW5E.TraitToolProf"}}</label>
<a class="trait-selector" data-options="toolProficiencies" data-target="data.traits.toolProf">
<i class="fas fa-edit"></i>
</a>
<ul class="traits-list">
{{#each data.traits.toolProf.selected as |v k|}}
<li>{{v}}</li>
{{/each}}
</ul>
</div>
{{/if}}
{{#unless isVehicle}}
<div>
<label>{{localize "SW5E.SpecialTraits"}}</label>
<a class="configure-flags"><i class="fas fa-cog"></i></a>
</div>
{{/unless}}
<ul class="passives"></ul>
</section>

View file

@ -0,0 +1,67 @@
{{#if favItems}}
<ol class="group-list ">
<li>
<div class="group-list-title group-grid-fav-items">
<h3 class="item-name">Items</h3>
<div class="item-detail item-uses">Charges</div>
<div class="item-detail item-quantity">Qty</div>
<div class="item-detail item-comps"></div>
<div class="item-detail item-controls"></div>
</div>
<ol class="item-list">
{{#each favItems as |item id|}}
{{> "systems/sw5e/templates/actors/newActor/item.hbs" item=item}}
{{/each}}
</ol>
</li>
{{#if favFeats}}
<li>
<div class="group-list-title group-grid-fav-items">
<h3 class="item-name">Features &amp; Feats</h3>
<div class="item-detail item-uses">Uses</div>
<div class="item-detail item-quantity"></div>
<div class="item-detail item-comps"></div>
<div class="item-detail item-controls"></div>
</div>
<ol class="item-list">
{{#each favFeats as |feat lvl|}}
{{> "systems/sw5e/templates/actors/newActor/item.hbs" item=feat}}
{{/each}}
</ol>
</li>
{{/if}}
{{#if favPowers}}
{{#each favPowers as |section lvl|}}
{{#if section.powers}}
{{#if lvl}}
<li>
<div class="group-list-title group-grid-fav-items">
<h3 class="item-name">
{{#if section.isCantrip}}At-Will Powers{{else}}Level {{lvl}} Powers{{/if}}
</h3>
<div class="item-detail item-uses">
{{#if section.isCantrip}}&nbsp;
{{else}}
{{section.value}}
/
{{section.max}}
{{/if}}
</div>
<div class="item-detail item-quantity"></div>
<div class="item-detail item-comps"></div>
<div class="item-detail item-controls"></div>
</div>
<ol class="item-list">
{{#each section.powers as |power id|}}
{{> "systems/sw5e/templates/actors/newActor/item.hbs" item=power}}
{{/each}}
</ol>
</li>
{{/if}}{{/if}}
{{/each}}
{{/if}}
</ol>
{{/if}}

View file

@ -82,25 +82,25 @@
</li>
<li class="attribute">
<h4 class="attribute-name box-title">{{ localize "SW5E.Speed" }}</h4>
<h4 class="attribute-name box-title">
{{ localize "SW5E.Speed" }}
</h4>
<div class="attribute-value">
<input name="data.attributes.speed.value" type="text"
value="{{data.attributes.speed.value}}" placeholder="0"/>
<span>{{movement.primary}}</span>
</div>
<footer class="attribute-footer">
<input type="text" class="speed" name="data.attributes.speed.special"
value="{{data.attributes.speed.special}}" placeholder="{{ localize 'SW5E.SpeedSpecial' }}"/>
<span>{{movement.special}}</span>
</footer>
</li>
<li class="attribute initiative">
<h4 class="attribute-name box-title">{{ localize "SW5E.Initiative" }}</h4>
<h4 class="attribute-name box-title rollable" data-action="rollInitiative">{{ localize "SW5E.Initiative" }}</h4>
<div class="attribute-value">
<span>{{numberFormat data.attributes.init.total decimals=0 sign=true}}</span>
</div>
<footer class="attribute-footer">
<span>{{ localize "SW5E.Modifier" }}</span>
<input name="data.attributes.init.value" type="number" placeholder="0"
<input name="data.attributes.init.value" type="text" data-dtype="Number" placeholder="0"
value="{{numberFormat data.attributes.init.value decimals=0 sign=true}}"/>
</footer>
</li>
@ -108,17 +108,17 @@
</section>
</header>
{{!-- NPC Sheet Navigation --}}
{{!-- Character Sheet Navigation --}}
<nav class="sheet-navigation tabs" data-group="primary">
<a class="item active" data-tab="attributes">{{ localize "SW5E.Attributes" }}</a>
<a class="item" data-tab="inventory">{{ localize "SW5E.Inventory" }}</a>
<a class="item" data-tab="features">{{ localize "SW5E.Features" }}</a>
<a class="item" data-tab="powerbook">{{ localize "SW5E.Powerbook" }}</a>
<a class="item" data-tab="effects">{{ localize "SW5E.Effects" }}</a>
<a class="item" data-tab="effects">{{ localize "SW5E.Effects" }}</a>
<a class="item" data-tab="biography">{{ localize "SW5E.Biography" }}</a>
</nav>
{{!-- NPC Sheet Body --}}
{{!-- Character Sheet Body --}}
<section class="sheet-body">
<div class="tab attributes flexrow" data-group="primary" data-tab="attributes">
@ -183,7 +183,7 @@
{{!-- Counters --}}
<div class="counters">
<div class="counter flexrow death-saves">
<h4 class="death-save rollable">{{ localize "SW5E.DeathSave" }}</h4>
<h4 class="rollable" data-action="rollDeathSave">{{ localize "SW5E.DeathSave" }}</h4>
<div class="counter-value">
<i class="fas fa-check"></i>
<input name="data.attributes.death.success" type="number" placeholder="0"
@ -210,30 +210,30 @@
</div>
{{!-- Traits --}}
{{> "systems/sw5e/templates/actors/parts/actor-traits.html"}}
{{> "systems/sw5e/templates/actors/oldActor/parts/actor-traits.html"}}
</section>
</div>
{{!-- Inventory Tab --}}
<div class="tab inventory flexcol" data-group="primary" data-tab="inventory">
{{> "systems/sw5e/templates/actors/parts/actor-inventory.html" sections=inventory}}
{{> "systems/sw5e/templates/actors/oldActor/parts/actor-inventory.html" sections=inventory}}
</div>
{{!-- Features Tab --}}
<div class="tab features flexcol" data-group="primary" data-tab="features">
{{> "systems/sw5e/templates/actors/parts/actor-features.html" sections=features}}
{{> "systems/sw5e/templates/actors/oldActor/parts/actor-features.html" sections=features}}
</div>
{{!-- Powerbook Tab --}}
<div class="tab powerbook flexcol" data-group="primary" data-tab="powerbook">
{{> "systems/sw5e/templates/actors/parts/actor-powerbook.html"}}
{{> "systems/sw5e/templates/actors/oldActor/parts/actor-powerbook.html"}}
</div>
{{!-- Effects Tab --}}
<div class="tab effects flexcol" data-group="primary" data-tab="effects">
{{> "systems/sw5e/templates/actors/parts/actor-effects.html"}}
{{> "systems/sw5e/templates/actors/parts/active-effects.html"}}
</div>
{{!-- Biography Tab --}}
<div class="tab flexrow" data-group="primary" data-tab="biography">
<div class="characteristics flexcol">

View file

@ -62,14 +62,14 @@
</li>
<li class="attribute">
<h4 class="attribute-name box-title">{{ localize "SW5E.Speed" }}</h4>
<h4 class="attribute-name box-title">
{{ localize "SW5E.Speed" }}
</h4>
<div class="attribute-value">
<input name="data.attributes.speed.value" type="text"
value="{{data.attributes.speed.value}}" placeholder="0"/>
<span>{{movement.primary}}</span>
</div>
<footer class="attribute-footer">
<input type="text" class="speed" name="data.attributes.speed.special"
value="{{data.attributes.speed.special}}" placeholder="{{ localize 'SW5E.SpeedSpecial' }}"/>
<span>{{movement.special}}</span>
</footer>
</li>
</ul>
@ -81,6 +81,7 @@
<a class="item active" data-tab="attributes">{{ localize "SW5E.Attributes" }}</a>
<a class="item" data-tab="features">{{ localize "SW5E.Features" }}</a>
<a class="item" data-tab="powerbook">{{ localize "SW5E.Powerbook" }}</a>
<a class="item" data-tab="effects">{{ localize "SW5E.Effects" }}</a>
<a class="item" data-tab="biography">{{ localize "SW5E.Biography" }}</a>
</nav>
@ -143,24 +144,29 @@
<div class="counter-value">
<input name="data.resources.lair.value" type="checkbox" value="{{data.resources.lair.value}}"
data-dtype="Boolean" {{checked data.resources.lair.value}}/>
<input name="data.resources.lair.initiative" type="number" value="{{data.resources.lair.initiative}}" placeholder="20"/>
</div>
<input name="data.resources.lair.initiative" type="number" value="{{data.resources.lair.initiative}}" placeholder="20"/>
</div>
</div>
</div>
{{!-- Traits --}}
{{> "systems/sw5e/templates/actors/parts/actor-traits.html"}}
{{> "systems/sw5e/templates/actors/oldActor/parts/actor-traits.html"}}
</section>
</div>
{{!-- Features Tab --}}
<div class="tab features flexcol" data-group="primary" data-tab="features">
{{> "systems/sw5e/templates/actors/parts/actor-features.html" sections=features}}
{{> "systems/sw5e/templates/actors/oldActor/parts/actor-features.html" sections=features}}
</div>
{{!-- Powerbook Tab --}}
<div class="tab powerbook flexcol" data-group="primary" data-tab="powerbook">
{{> "systems/sw5e/templates/actors/parts/actor-powerbook.html"}}
{{> "systems/sw5e/templates/actors/oldActor/parts/actor-powerbook.html"}}
</div>
{{!-- Effects Tab --}}
<div class="tab effects flexcol" data-group="primary" data-tab="effects">
{{> "systems/sw5e/templates/actors/parts/active-effects.html"}}
</div>
{{!-- Biography Tab --}}
@ -168,4 +174,4 @@
{{editor content=data.details.biography.value target="data.details.biography.value" button=true owner=owner editable=editable}}
</div>
</section>
</form>
</form>

View file

@ -8,9 +8,9 @@
</div>
{{/unless}}
<ol class="inventory-list">
<ol class="items-list inventory-list">
{{#each sections as |section sid|}}
<li class="inventory-header flexrow">
<li class="items-header flexrow">
<h3 class="item-name flexrow">{{localize section.label}}</h3>
{{#if section.hasActions}}
@ -25,7 +25,7 @@
{{/if}}
{{#if ../owner}}
<div class="item-controls">
<div class="item-controls flexrow">
<a class="item-control item-create" title="{{localize 'SW5E.FeatureAdd'}}" {{#each section.dataset as |v k|}}data-{{k}}="{{v}}"{{/each}}>
<i class="fas fa-plus"></i> {{localize "SW5E.Add"}}
</a>
@ -78,7 +78,7 @@
<div class="item-detail player-classfeatures">
{{item.data.name}}
</div>
{{else if section.isFightingstyles}}
<div class="item-detail player-fightingstyles">
{{item.data.name}}
@ -119,7 +119,7 @@
{{/if}}
{{#if ../../owner}}
<div class="item-controls">
<div class="item-controls flexrow">
{{#if section.crewable}}
<a class="item-control item-toggle {{item.toggleClass}}"
title="{{item.toggleTitle}}">

View file

@ -4,7 +4,6 @@
<ol class="currency flexrow">
<h3>
{{localize "SW5E.Currency"}}
<a class="currency-convert" title="Convert Currency"><i class="fas fa-coins"></i></a>
</h3>
{{#each data.currency as |v k|}}
<label class="denomination {{k}}">{{ lookup ../config.currencies k }}</label>
@ -23,9 +22,9 @@
{{/unless}}
</div>
<ol class="inventory-list">
<ol class="items-list inventory-list">
{{#each sections as |section sid|}}
<li class="inventory-header flexrow">
<li class="items-header flexrow">
<h3 class="item-name flexrow">{{localize section.label}}</h3>
{{#if section.columns}}
@ -33,18 +32,18 @@
<div class="item-detail {{css}}">{{label}}</div>
{{/each}}
{{else}}
{{#if ../isCharacter}}
<div class="item-detail item-weight">{{localize "SW5E.Weight"}}</div>
{{/if}}
{{#if ../isCharacter}}
<div class="item-detail item-weight">{{localize "SW5E.Weight"}}</div>
{{/if}}
<div class="item-detail item-uses">{{localize "SW5E.Charges"}}</div>
<div class="item-detail item-action">{{localize "SW5E.Usage"}}</div>
<div class="item-detail item-uses">{{localize "SW5E.Charges"}}</div>
<div class="item-detail item-action">{{localize "SW5E.Usage"}}</div>
{{/if}}
{{#if ../owner}}
<div class="item-controls">
<div class="item-controls flexrow">
<a class="item-control item-create" title='{{localize "SW5E.ItemCreate"}}'
{{#each section.dataset as |v k|}}data-{{k}}="{{v}}"{{/each}}>
{{#each section.dataset as |v k|}}data-{{k}}="{{v}}"{{/each}}>
<i class="fas fa-plus"></i> {{localize "SW5E.Add"}}
</a>
</div>
@ -53,13 +52,13 @@
<ol class="item-list">
{{#each section.items as |item iid|}}
<li class="item flexrow {{section.css}}"
data-item-id="{{#if section.editableName}}{{iid}}{{else}}{{item._id}}{{/if}}">
<div class="item-name flexrow rollable">
{{#if section.editableName}}
<input type="text" value="{{item.name}}">
{{else}}
<div class="item-image" style="background-image: url('{{item.img}}')"></div>
<li class="item flexrow {{section.css}}"
data-item-id="{{#if section.editableName}}{{iid}}{{else}}{{item._id}}{{/if}}">
<div class="item-name flexrow rollable">
{{#if section.editableName}}
<input type="text" value="{{item.name}}">
{{else}}
<div class="item-image" style="background-image: url('{{item.img}}')"></div>
<h4>
{{item.name~}}
{{~#if item.isStack}} ({{item.data.quantity}}){{/if}}
@ -82,32 +81,32 @@
</div>
{{/each}}
{{else}}
{{#if ../../isCharacter}}
<div class="item-detail item-weight">
{{#if item.totalWeight}}
<div class="item-detail">
{{ item.totalWeight }} {{localize "SW5E.AbbreviationLbs"}}
{{#if ../../isCharacter}}
<div class="item-detail item-weight">
{{#if item.totalWeight}}
<div class="item-detail">
{{ item.totalWeight }} {{localize "SW5E.AbbreviationLbs"}}
</div>
{{/if}}
</div>
{{/if}}
<div class="item-detail item-uses">
{{#if item.hasUses }}
<input type="text" value="{{item.data.uses.value}}" placeholder="0"/>
/ {{item.data.uses.max}}
{{/if}}
</div>
{{/if}}
</div>
{{/if}}
<div class="item-detail item-uses">
{{#if item.hasUses }}
<input type="text" value="{{item.data.uses.value}}" placeholder="0"/>
/ {{item.data.uses.max}}
{{/if}}
</div>
<div class="item-detail item-action">
{{#if item.data.activation.type }}
{{item.labels.activation}}
{{/if}}
</div>
<div class="item-detail item-action">
{{#if item.data.activation.type }}
{{item.labels.activation}}
{{/if}}
</div>
{{/if}}
{{#if ../../owner}}
<div class="item-controls">
<div class="item-controls flexrow">
{{#unless @root.isVehicle}}
<a class="item-control item-toggle {{item.toggleClass}}" title='{{item.toggleTitle}}'><i class="fas fa-shield-alt"></i></a>
{{/unless}}

View file

@ -27,12 +27,10 @@
</ul>
</div>
<ol class="inventory-list">
<ol class="items-list inventory-list">
{{#each powerbook as |section|}}
<li class="item flexrow inventory-header powerbook-header">
<div class="item-name flexrow">
<h3>{{section.label}}</h3>
</div>
<li class="items-header powerbook-header flexrow">
<h3 class="item-name flexrow">{{section.label}}</h3>
<div class="power-slots">
{{#if section.usesSlots}}
@ -46,6 +44,7 @@
<i class="fas fa-edit"></i>
</a>
{{/if}}
</span>
{{ else }}
<span>{{{section.uses}}}</span>
<span class="sep"> / </span>
@ -57,7 +56,7 @@
<div class="power-action">{{localize "SW5E.PowerUsage"}}</div>
<div class="power-target">{{localize "SW5E.PowerTarget"}}</div>
<div class="item-controls">
<div class="item-controls flexrow">
{{#if section.canCreate}}
<a class="item-control item-create" title="{{localize 'SW5E.PowerCreate'}}" {{#each section.dataset as |v k|}}data-{{k}}="{{v}}"{{/each}}>
<i class="fas fa-plus"></i> {{localize "SW5E.Add"}}
@ -91,9 +90,8 @@
{{/if}}
</div>
{{#if ../../owner}}
<div class="item-controls">
<div class="item-controls flexrow">
{{#if section.canPrepare}}
<a class="item-control item-toggle {{item.toggleClass}}" title="{{item.toggleTitle}}"><i class="fas fa-sun"></i></a>
{{/if}}
@ -110,7 +108,7 @@
<li class="item flexrow"><p class="notes">{{localize "SW5E.FilterNoPowers"}}</p></li>
{{else}}
<li class="item flexrow inventory-header powerbook-header powerbook-empty">
<div class="item-controls">
<div class="item-controls flexrow">
<a class="item-control item-create" title="{{localize 'SW5E.PowerCreate'}}" data-type="power"
data-level="{{lvl}}"><i class="fas fa-plus"></i> {{localize "SW5E.PowerAdd"}}</a>
</div>

View file

@ -11,6 +11,11 @@
</div>
{{#unless isVehicle}}
<div class="form-group ">
<label>{{localize "SW5E.MovementConfig"}}</label>
<a class="configure-movement" title="{{localize 'SW5E.MovementConfig'}}"><i class="fas fa-cog"></i></a>
</div>
<div class="form-group {{#unless data.traits.senses}}inactive{{/unless}}">
<label>{{localize "SW5E.Senses"}}</label>
<input type="text" name="data.traits.senses" value="{{data.traits.senses}}" placeholder="{{ localize 'SW5E.None' }}"/>

View file

@ -58,8 +58,7 @@
<li class="attribute">
<h4 class="attribute-name box-title">{{localize 'SW5E.Speed'}}</h4>
<div class="attribute-value">
<input name="data.attributes.speed.value" type="text" placeholder="&mdash;"
value="{{data.attributes.speed.value}}">
<input name="data.attributes.speed" type="text" placeholder="&mdash;" value="{{data.attributes.speed}}"/>
</div>
</li>
</ul>
@ -139,16 +138,16 @@
</div>
</div>
</div>
{{> 'systems/sw5e/templates/actors/parts/actor-traits.html'}}
{{> 'systems/sw5e/templates/actors/oldActor/parts/actor-traits.html'}}
</section>
</div>
<div class="tab features flexcol" data-group="primary" data-tab="features">
{{> 'systems/sw5e/templates/actors/parts/actor-features.html' sections=features}}
{{> 'systems/sw5e/templates/actors/oldActor/parts/actor-features.html' sections=features}}
</div>
<div class="tab cargo flexcol" data-group="primary" data-tab="cargo">
{{> 'systems/sw5e/templates/actors/parts/actor-inventory.html' sections=cargo}}
{{> 'systems/sw5e/templates/actors/oldActor/parts/actor-inventory.html' sections=cargo}}
</div>
<div class="tab biography flexcol" data-group="primary" data-tab="biography">

View file

@ -0,0 +1,38 @@
<ol class="items-list effects-list">
{{#each effects as |section sid|}}
<li class="items-header flexrow" data-effect-type="{{section.type}}">
<h3 class="item-name effect-name flexrow">{{localize section.label}}</h3>
<div class="effect-source">Source</div>
<div class="effect-source">Duration</div>
<div class="item-controls effect-controls flexrow">
<a class="effect-control" data-action="create" title="{{localize 'SW5E.EffectCreate'}}">
<i class="fas fa-plus"></i> {{localize "SW5E.Add"}}
</a>
</div>
</li>
<ol class="item-list">
{{#each section.effects as |effect|}}
<li class="item effect flexrow" data-effect-id="{{effect.id}}">
<div class="item-name effect-name flexrow">
<img class="item-image" src="{{effect.data.icon}}"/>
<h4>{{effect.data.label}}</h4>
</div>
<div class="effect-source">{{effect.sourceName}}</div>
<div class="effect-duration">{{effect.duration.label}}</div>
<div class="item-controls effect-controls flexrow">
<a class="effect-control" data-action="toggle" title="{{localize 'SW5E.EffectToggle'}}">
<i class="fas fa-circle-notch"></i>
</a>
<a class="effect-control" data-action="edit" title="{{localize 'SW5E.EffectEdit'}}">
<i class="fas fa-edit"></i>
</a>
<a class="effect-control" data-action="delete" title="{{localize 'SW5E.EffectDelete'}}">
<i class="fas fa-trash"></i>
</a>
</div>
</li>
{{/each}}
</ol>
{{/each}}
</ol>

View file

@ -1,28 +0,0 @@
<ol class="inventory-list">
{{#each effects as |section sid|}}
<li class="inventory-header flexrow">
<h3 class="effect-name flexrow">{{localize section.label}}</h3>
<div class="effect-source">Source</div>
<div class="effect-source">Duration</div>
<div class="effect-controls"></div>
</li>
<ol class="effects-list item-list">
{{#each section.effects as |effect|}}
<li class="effect flexrow" data-effect-id="{{effect.id}}">
<div class="effect-name flexrow">
<img class="effect-icon" src="{{effect.data.icon}}"/>
<h4>{{effect.data.label}}</h4>
</div>
<div class="effect-source">{{effect.sourceName}}</div>
<div class="effect-duration">{{effect.duration.label}}</div>
<div class="effect-controls">
<a class="effect-control" data-action="toggle"><i class="fas fa-circle-notch"></i></a>
<a class="effect-control" data-action="edit"><i class="fas fa-edit"></i></a>
<a class="effect-control" data-action="delete"><i class="fas fa-trash"></i></a>
</div>
</li>
{{/each}}
</ol>
{{/each}}
</ol>

11
templates/app-window.html Normal file
View file

@ -0,0 +1,11 @@
<div id="{{id}}" class="app window-app {{classes}} this-is-my-custom-window" data-appid="{{appId}}">
<header class="window-header flexrow">
<h4 class="window-title">{{title}}</h4>
{{#each headerButtons}}
<a class="header-button {{this.class}}"><i class="{{this.icon}}"></i></a>
{{/each}}
</header>
<section class="window-content">
</section>
</div>

View file

@ -1,44 +1,48 @@
<form class="{{cssClass}}" autocomplete="off">
<p class="notes">{{localize 'SW5E.FlagsInstructions'}}</p>
<section class="form-body">
<p class="notes">{{localize 'SW5E.FlagsInstructions'}}</p>
{{#each flags as |fs section|}}
<h3 class="form-header">{{localize section}}</h3>
{{#each fs as |flag key|}}
{{#each flags as |fs section|}}
<h3 class="form-header">{{localize section}}</h3>
{{#each fs as |flag key|}}
<div class="form-group">
<label>{{localize flag.name}}</label>
<div class="form-group">
<label>{{localize flag.name}}</label>
{{#if flag.isCheckbox}}
<input type="checkbox" name="{{key}}" data-dtype="Boolean" {{checked flag.value}}/>
{{#if flag.isCheckbox}}
<input type="checkbox" name="{{key}}" data-dtype="Boolean" {{checked flag.value}}/>
{{else if flag.isSelect}}
<select name="{{key}}" data-dtype="{{flag.type}}">
{{#select flag.value}}
{{#each flag.choices as |v k|}}
<option value="{{k}}">{{localize v}}</option>
{{/each}}
{{/select}}
</select>
{{else if flag.isSelect}}
<select name="{{key}}" data-dtype="{{flag.type}}">
{{#select flag.value}}
{{#each flag.choices as |v k|}}
<option value="{{k}}">{{localize v}}</option>
{{/each}}
{{/select}}
</select>
{{else}}
<input type="text" name="{{key}}" value="{{flag.value}}" placeholder="{{flag.placeholder}}" data-dtype="{{flag.type}}"/>
{{/if}}
{{else}}
<input type="text" name="{{key}}" value="{{flag.value}}" placeholder="{{flag.placeholder}}" data-dtype="{{flag.type}}"/>
{{/if}}
<p class="notes">{{localize flag.hint}}</p>
</div>
{{/each}}
{{/each}}
<p class="notes">{{localize flag.hint}}</p>
</div>
{{/each}}
{{/each}}
<h3 class="form-header">{{localize "SW5E.Bonuses"}}</h3>
<p class="notes">{{localize "SW5E.BonusesHint"}}</p>
{{#each bonuses as |b|}}
<div class="form-group">
<label>{{localize b.label}}</label>
<input type="text" name="{{b.name}}" value="{{b.value}}"/>
</div>
{{/each}}
<h3 class="form-header">{{localize "SW5E.Bonuses"}}</h3>
<p class="notes">{{localize "SW5E.BonusesHint"}}</p>
{{#each bonuses as |b|}}
<div class="form-group">
<label>{{localize b.label}}</label>
<input type="text" name="{{b.name}}" value="{{b.value}}"/>
</div>
{{/each}}
</section>
<button type="submit" name="submit">
<i class="far fa-save"></i> {{localize 'SW5E.FlagsSave'}}
</button>
<footer class="form-footer">
<button type="submit" name="submit">
<i class="far fa-save"></i> {{localize 'SW5E.FlagsSave'}}
</button>
</footer>
</form>

View file

@ -1,34 +0,0 @@
<form id="cast-config-form">
<p>{{ localize "SW5E.SpellCastHint" }} <strong>{{item.name}}</strong> {{ localize "SW5E.cast" }}.</p>
{{#unless canCast}}
<p class="notification error">{{ localize "SW5E.SpellCastNoSlots" }}</p>
{{/unless}}
<div class="form-group">
<label>{{ localize "SW5E.SpellCastUpcast" }}</label>
<div class="form-fields">
<select name="level">
{{#select item.data.level}}
{{#each castLevels as |l|}}
<option value="{{l.level}}" {{#unless l.canCast}}disabled{{/unless}}>{{l.label}}</option>
{{/each}}
{{/select}}
</select>
</div>
</div>
<div class="form-group">
{{#if canUpcast}}
<label class="checkbox">{{ localize "SW5E.SpellCastConsume" }} <input type="checkbox" name="consume" {{checked canCast}}/></label>
{{/if}}
{{#if hasPlaceableTemplate}}
<div class="form-group">
<label class="checkbox">{{ localize "SW5E.PlaceTemplate" }}
<input type="checkbox" name="placeTemplate" checked/>
</label>
</div>
{{/if}}
</div>
</form>

View file

@ -0,0 +1,34 @@
<form autocomplete="off">
<p class="notes">{{localize "SW5E.MovementConfigHint"}}</p>
<div class="form-group">
<label>{{localize "SW5E.MovementWalk"}}</label>
<input name="data.attributes.movement.walk" type="number" step="0.1" value="{{movement.walk}}"/>
</div>
<div class="form-group">
<label>{{localize "SW5E.MovementBurrow"}}</label>
<input name="data.attributes.movement.burrow" type="number" step="0.1" value="{{movement.burrow}}"/>
</div>
<div class="form-group">
<label>{{localize "SW5E.MovementClimb"}}</label>
<input name="data.attributes.movement.climb" type="number" step="0.1" value="{{movement.climb}}"/>
</div>
<div class="form-group">
<label>{{localize "SW5E.MovementFly"}}</label>
<input name="data.attributes.movement.fly" type="number" step="0.1" value="{{movement.fly}}"/>
</div>
<div class="form-group">
<label>{{localize "SW5E.MovementSwim"}}</label>
<input name="data.attributes.movement.swim" type="number" step="0.1" value="{{movement.swim}}"/>
</div>
<div class="form-group">
<label>{{localize "SW5E.MovementUnits"}}</label>
<select name="data.attributes.movement.units">
{{selectOptions units selected=movement.units}}
</select>
</div>
<div class="form-group">
<label>{{localize "SW5E.MovementHover"}}</label>
<input name="data.attributes.movement.hover" type="checkbox" {{checked movement.hover}}/>
</div>
<button type="submit" name="submit" value="1"><i class="far fa-save"></i> {{ localize "Submit"}}</button>
</form>

View file

@ -15,5 +15,5 @@
<input type="text" name="custom" value="{{custom}}" data-dtype="String"/>
</div>
{{/if}}
<button type="submit" name="submit" value="1"><i class="far fa-save"></i> {{ localize "SW5E.Save"}}</button>
<button type="submit" name="submit" value="1"><i class="far fa-save"></i> {{ localize "SW5E.TraitSave"}}</button>
</form>

View file

@ -1,7 +1,7 @@
<div class="sw5e chat-card item-card" data-actor-id="{{actor._id}}" data-item-id="{{item._id}}" {{#if tokenId}}data-token-id="{{tokenId}}"{{/if}}>
<header class="card-header flexrow">
<img src="{{item.img}}" title="{{item.name}}" width="36" height="36"/>
<h3>{{item.name}}</h3>
<h3 class="item-name">{{item.name}}</h3>
</header>
<div class="card-content">{{{data.description.value}}}</div>

View file

@ -31,6 +31,7 @@
{{!-- Item Sheet Navigation --}}
<nav class="sheet-navigation tabs" data-group="primary">
<a class="item active" data-tab="description">{{ localize "SW5E.Description" }}</a>
<a class="item" data-tab="effects">{{ localize "SW5E.Effects" }}</a>
<!-- <a class="item" data-tab="details">{{ localize "SW5E.Details" }}</a> -->
</nav>
@ -39,7 +40,13 @@
{{!-- Description Tab --}}
<div class="tab description" data-group="primary" data-tab="description">
{{editor content=data.description.value target="data.description.value" button=true owner=owner editable=editable}}
</div>
{{editor content=data.description.value target="data.description.value" button=true owner=owner editable=editable}}
</div>
{{!-- Effects Tab --}}
<div class="tab effects flexcol" data-group="primary" data-tab="effects">
{{> "systems/sw5e/templates/actors/parts/active-effects.html"}}
</div>
</section>
</form>

View file

@ -24,6 +24,7 @@
{{!-- Item Sheet Navigation --}}
<nav class="sheet-navigation tabs" data-group="primary">
<a class="item active" data-tab="description">{{ localize "SW5E.Description" }}</a>
<a class="item" data-tab="effects">{{ localize "SW5E.Effects" }}</a>
<!-- <a class="item" data-tab="details">{{ localize "SW5E.Details" }}</a> -->
</nav>
@ -32,68 +33,42 @@
{{!-- Description Tab --}}
<div class="tab description" data-group="primary" data-tab="description">
<div class="background">{{editor content=data.flavorText.value target="data.flavorText.value" button=true editable=editable}}</div>
<div class="background"><p><strong>Skill Proficiencies:</strong> {{{data.skillProficiencies.value}}}</p></div>
<div class="background"><p><strong>Tool Proficiencies:</strong> {{{data.toolProficiencies.value}}}</p></div>
<div class="background"><p><strong>Languages:</strong> {{{data.languages.value}}}</p></div>
<div class="background"><p><strong>Equipment:</strong> {{{data.equipment.value}}}</p></div>
<div class="background"><h3>{{{data.flavorName.value}}}</h3></div>
<div class="background"><p>{{{data.flavorDescription.value}}}</p></div>
<div class="smalltable"><p>{{{data.flavorOptions.value}}}</p></div>
<div class="background"><h2>Feature: {{{data.featureName.value}}}</h2></div>
<div class="background"><p>{{{data.featureText.value}}}</p></div>
<h2>Background Feat</h2>
<p>As a further embodiment of the experience and training of your background, you can choose from the following feats:</p>
<div class="smalltable"><p>{{{data.featOptions.value}}}</p></div>
<h3>Suggested Characteristics</h3>
<div class="background"><p>{{{data.suggestedCharacteristics.value}}}</p></div>
<div class="medtable"><p>{{{data.personalityTraitOptions.value}}}</p></div><p>&nbsp;</p>
<div class="medtable"><p>{{{data.idealOptions.value}}}</p></div><p>&nbsp;</p>
<div class="medtable"><p>{{{data.flawOptions.value}}}</p></div><p>&nbsp;</p>
<div class="medtable"><p>{{{data.bondOptions.value}}}</p></div>
<div class="background">{{editor content=data.flavorText.value target="data.flavorText.value" button=true editable=editable}}</div>
<div class="background"><p><strong>Skill Proficiencies:</strong> {{{data.skillProficiencies.value}}}</p></div>
<div class="background"><p><strong>Tool Proficiencies:</strong> {{{data.toolProficiencies.value}}}</p></div>
<div class="background"><p><strong>Languages:</strong> {{{data.languages.value}}}</p></div>
<div class="background"><p><strong>Equipment:</strong> {{{data.equipment.value}}}</p></div>
<div class="background"><h3>{{{data.flavorName.value}}}</h3></div>
<div class="background"><p>{{{data.flavorDescription.value}}}</p></div>
<div class="smalltable"><p>{{{data.flavorOptions.value}}}</p></div>
<div class="background"><h2>Feature: {{{data.featureName.value}}}</h2></div>
<div class="background"><p>{{{data.featureText.value}}}</p></div>
<h2>Background Feat</h2>
<p>As a further embodiment of the experience and training of your background, you can choose from the following feats:</p>
<div class="smalltable"><p>{{{data.featOptions.value}}}</p></div>
<h3>Suggested Characteristics</h3>
<div class="background"><p>{{{data.suggestedCharacteristics.value}}}</p></div>
<div class="medtable"><p>{{{data.personalityTraitOptions.value}}}</p></div><p>&nbsp;</p>
<div class="medtable"><p>{{{data.idealOptions.value}}}</p></div><p>&nbsp;</p>
<div class="medtable"><p>{{{data.flawOptions.value}}}</p></div><p>&nbsp;</p>
<div class="medtable"><p>{{{data.bondOptions.value}}}</p></div>
<script>
let nullField = document.querySelectorAll('.background > div');
<script>
let nullField = document.querySelectorAll('.background > div');
nullField.forEach(function(element) {
if (element.value === null) {
element.previousElementSibling.style.display = 'none';
element.style.display = 'none';
}
});
</script>
</div>
<!-- {{> "systems/sw5e/templates/items/parts/item-description.html"}}
{{!-- Details Tab --}}
<div class="tab details" data-group="primary" data-tab="details">
<h3 class="form-header">{{ localize "SW5E.FeatureUsage" }}</h3>
{{!-- Item Activation Template --}}
{{> "systems/sw5e/templates/items/parts/item-activation.html"}}
{{!-- Recharge Requirement --}}
{{#if data.activation.type}}
<div class="form-group recharge">
<label>{{ localize "SW5E.FeatureActionRecharge" }}</label>
<div class="form-fields">
<span>{{ localize "SW5E.FeatureRechargeOn" }}</span>
<input type="text" name="data.recharge.value" value="{{data.recharge.value}}"
data-dtype="Number" placeholder="{{ localize 'SW5E.FeatureRechargeResult' }}"/>
<label class="checkbox">
{{ localize "SW5E.Charged" }}
<input type="checkbox" name="data.recharge.charged" {{checked data.recharge.charged}}/>
</label>
</div>
</div>
{{/if}}
<h3 class="form-header">{{ localize "SW5E.FeatureAttack" }}</h3>
{{!-- Item Action Template --}}
{{> "systems/sw5e/templates/items/parts/item-action.html"}}
</div> -->
nullField.forEach(function(element) {
if (element.value === null) {
element.previousElementSibling.style.display = 'none';
element.style.display = 'none';
}
});
</script>
</div>
{{!-- Effects Tab --}}
<div class="tab effects flexcol" data-group="primary" data-tab="effects">
{{> "systems/sw5e/templates/actors/parts/active-effects.html"}}
</div>
</section>
</form>

View file

@ -1,151 +0,0 @@
<form class="{{cssClass}} flexcol" autocomplete="off">
{{!-- Item Sheet Header --}}
<header class="sheet-header flexrow">
<img class="profile" src="{{item.img}}" title="{{item.name}}" data-edit="img"/>
<div class="header-details flexrow">
<h1 class="charname">
<input name="name" type="text" value="{{item.name}}" placeholder="{{ localize 'SW5E.CastName' }}"/>
</h1>
<div class="item-subtitle">
<h4 class="item-type">{{itemType}}</h4>
<span class="item-status">{{itemStatus}}</span>
</div>
<ul class="summary">
<li>
{{labels.level}}
</li>
<li>
{{labels.school}}
</li>
<li>
<input type="text" name="data.source" value="{{data.source}}" placeholder="{{ localize 'SW5E.Source' }}"/>
</li>
</ul>
</div>
</header>
{{!-- Item Sheet Navigation --}}
<nav class="sheet-navigation tabs" data-group="primary">
<a class="item active" data-tab="description">{{ localize "SW5E.Description" }}</a>
<a class="item" data-tab="details">{{ localize "SW5E.Details" }}</a>
</nav>
{{!-- Item Sheet Body --}}
<section class="sheet-body">
{{!-- Description Tab --}}
{{> "systems/sw5e/templates/items/parts/item-description.html"}}
{{!-- Details Tab --}}
<div class="tab details" data-group="primary" data-tab="details">
<h3 class="form-header">{{ localize "SW5E.CastDetails" }}</h3>
{{!-- Cast Level --}}
<div class="form-group">
<label>{{ localize "SW5E.CastLevel" }}</label>
<select name="data.level" data-dtype="Number">
{{#select data.level}}
{{#each config.castLevels as |name lvl|}}
<option value="{{lvl}}">{{name}}</option>
{{/each}}
{{/select}}
</select>
</div>
{{!-- Cast School --}}
<div class="form-group">
<label>{{ localize "SW5E.CastSchool" }}</label>
<select name="data.school">
{{#select data.school}}
{{#each config.castSchools as |name sch|}}
<option value="{{sch}}">{{name}}</option>
{{/each}}
{{/select}}
</select>
</div>
{{!-- Cast Components --}}
<div class="cast-components form-group stacked">
<label>{{ localize "SW5E.CastComponents" }}</label>
<label class="checkbox">
<input type="checkbox" name="data.components.vocal" {{checked data.components.vocal}}/> {{ localize "SW5E.ComponentVerbal" }}
</label>
<label class="checkbox">
<input type="checkbox" name="data.components.somatic" {{checked data.components.somatic}}/> {{ localize "SW5E.ComponentSomatic" }}
</label>
<label class="checkbox">
<input type="checkbox" name="data.components.material" {{checked data.components.material}}/> {{ localize "SW5E.ComponentMaterial" }}
</label>
<label class="checkbox">
<input type="checkbox" name="data.components.concentration" {{checked data.components.concentration}}/> {{ localize "SW5E.Concentration" }}
</label>
<label class="checkbox">
<input type="checkbox" name="data.components.ritual" {{checked data.components.ritual}}/> {{ localize "SW5E.Ritual" }}
</label>
</div>
{{!-- Material Components --}}
<div class="form-group stacked">
<label>{{ localize "SW5E.CastMaterials" }}</label>
<input class="materials" type="text" name="data.materials.value" value="{{data.materials.value}}"/>
{{#if data.materials.value}}
<div class="cast-materials flexrow">
<label>{{ localize "SW5E.Supply" }}</label>
<input type="text" name="data.materials.supply" value="{{data.materials.supply}}" data-dtype="Number" Placeholder="0"/>
<label>{{ localize "SW5E.CostGP" }}</label>
<input type="text" name="data.materials.cost" value="{{data.materials.cost}}" data-dtype="Number" Placeholder="-"/>
<label>{{ localize "SW5E.Consumed" }}</label>
<input type="checkbox" name="data.materials.consumed" {{checked data.materials.consumed}}/>
</div>
{{/if}}
</div>
{{!-- Preparation Mode --}}
<div class="form-group input-select">
<label>{{ localize "SW5E.CastPreparationMode" }}</label>
<div class="form-fields">
<label class="checkbox prepared">
{{ localize "SW5E.CastPrepared" }} <input type="checkbox" name="data.preparation.prepared" {{checked data.preparation.prepared}}/>
</label>
<select name="data.preparation.mode">
{{#select data.preparation.mode}}
<option value=""></option>
{{#each config.castPreparationModes as |name key|}}
<option value="{{key}}">{{name}}</option>
{{/each}}
{{/select}}
</select>
</div>
</div>
<h3 class="form-header">{{ localize "SW5E.CastingHeader" }}</h3>
{{!-- Item Activation Template --}}
{{> "systems/sw5e/templates/items/parts/item-activation.html"}}
<h3 class="form-header">{{ localize "SW5E.CastEffects" }}</h3>
{{!-- Item Action Template --}}
{{> "systems/sw5e/templates/items/parts/item-action.html"}}
{{!-- Cast Level Scaling --}}
<div class="form-group">
<label>{{ localize "SW5E.LevelScaling" }}</label>
<div class="form-fields">
<select name="data.scaling.mode">
{{#select data.scaling.mode}}
{{#each config.castScalingModes as |name key|}}
<option value="{{key}}">{{name}}</option>
{{/each}}
{{/select}}
</select>
<input type="text" name="data.scaling.formula" value="{{data.scaling.formula}}" placeholder="{{ localize 'SW5E.ScalingFormula' }}"/>
</div>
</div>
</div>
</section>
</form>

View file

@ -32,6 +32,7 @@
<nav class="sheet-navigation tabs" data-group="primary">
<a class="item active" data-tab="description">{{ localize "SW5E.Description" }}</a>
<a class="item" data-tab="details">{{ localize "SW5E.Details" }}</a>
<a class="item" data-tab="effects">{{ localize "SW5E.Effects" }}</a>
</nav>
{{!-- Item Sheet Body --}}
@ -69,5 +70,11 @@
{{!-- Item Action Template --}}
{{> "systems/sw5e/templates/items/parts/item-action.html"}}
</div>
{{!-- Effects Tab --}}
<div class="tab effects flexcol" data-group="primary" data-tab="effects">
{{> "systems/sw5e/templates/actors/parts/active-effects.html"}}
</div>
</section>
</form>

View file

@ -32,6 +32,7 @@
<nav class="sheet-navigation tabs" data-group="primary">
<a class="item active" data-tab="description">{{ localize "SW5E.Description" }}</a>
<a class="item" data-tab="details">{{ localize "SW5E.Details" }}</a>
<a class="item" data-tab="effects">{{ localize "SW5E.Effects" }}</a>
</nav>
{{!-- Item Sheet Body --}}
@ -86,5 +87,10 @@
{{!-- Item Action Template --}}
{{> "systems/sw5e/templates/items/parts/item-action.html"}}
</div>
{{!-- Effects Tab --}}
<div class="tab effects flexcol" data-group="primary" data-tab="effects">
{{> "systems/sw5e/templates/actors/parts/active-effects.html"}}
</div>
</section>
</form>

Some files were not shown because too many files have changed in this diff Show more