VanirDev / VariantEncumbrance

A FoundryVTT module, providing a visual modification to player character sheets to better display the effects of the Encumbrance variant ruleset in the PHB.
MIT License
7 stars 15 forks source link
encumbrance foundryvtt sheets thresholds weight-reduction

Variant Encumbrance

Latest Release Download Count

Forge Installs

Foundry Core Compatible Version

Latest Version

Foundry Hub Endorsements

GitHub all releases

THE PROJECT IS BEEN TRANSFERED HERE WITH FVTT 10

A visual modification to player character sheets to better display the effects of the Encumbrance variant ruleset in the PHB.

The effects of this module are currently purely visual, although restricting movement and applying the negative effects of encumbrance are applied with the new active effect mechanism.

For D&D5e 1.4.2 and newer the system supports a core implementation of this encumbrance rule. The module should be synchronized with the core functionality, but this module will permit more customised rules for your weight calculations/thresholds and the speed penalties are integrated with active effect.

NOTE: If you are a javascript developer and not a typescript developer, you can just use the javascript files under the dist folder

tutorial

Installation

It's always easiest to install modules from the in game add-on browser.

To install this module manually:

  1. Inside the Foundry "Configuration and Setup" screen, click "Add-on Modules"
  2. Click "Install Module"
  3. In the "Manifest URL" field, paste the following url:

https://raw.githubusercontent.com/VanirDev/VariantEncumbrance/master/src/module.json

  1. Click 'Install' and wait for installation to complete
  2. Don't forget to enable the module in game using the "Manage Module" button

libWrapper

This module uses the libWrapper library for wrapping core methods. It is a hard dependency and it is recommended for the best experience and compatibility with other modules.

socketLib

This module uses the socketLib library for wrapping core methods. It is a hard dependency and it is recommended for the best experience and compatibility with other modules.

active-effect-manager-lib

This module uses the active-effect-manager-lib library like a dependency. It is a hard dependency and it is recommended for the best experience and compatibility with other modules.

midi-qol

This module uses the midi-qol. It is a optional dependency but it is recommended for the best experience and compatibility with other modules.

NOTE: If "midiqol" is deactivated or not present, the active effects will apply only the speed reduction without the variations of advantage and disadvantage typical of the rule

Known Issue

Compatibility

Character Sheets compatibility

Other Modules Compatability

I highly recommend avoiding module Inventory + in favor of the module Item Collection/Item Containers

Features

Redesigned weight bar

green orange red yellowblack

The default character weight bar has received a lick of paint, giving labels for all four weight thresholds. These thresholds are also reconfigurable in the settings, and will update the bar to display the new proportions.

Effect-based Speed Reduction with Active Effects

ae

ae2

Your encumbrance status is automatically used to provide a modified speed value, taking your default character speed and modifying it by -10 and -20 for encumbered and heavily encumbered, and reducing to 0 when over encumbered. (For 0.1.5, the speed value must be separated by a space from its units).

Character Size & Powerful Build (Optional)

Powerful Build Feature: You count as one size larger when determining your carrying capacity and the weight you can push, drag, or lift.

Enabled by default, the module will modify your maximum carry weight according to your character's size, and whether you have the powerful build special trait. This feature can be disabled in the module settings. (Credit to Eruestani for implementing this).

Item Weight Multipliers (Optional)

In the module settings, custom multipliers are available for unequipped, equipped, and proficiently equipped items. This was mainly added for my house rules, where equipped proficient items get a small weight reduction due to experience handling them, but this lends some flexibility to the system for anyone to use.

Buttons header sheet for enable/disable the features of Variant Encumbrance (Weight Calculation and Active Effects) actor by actor

Add new buttons on the header sheet of the actors for choose when to avoid to add the Active Effect or weight calculation. To much bad feed back on the automatization of the AE, i hope with this to help the community to find the best solution for the single individual

Symbol Button Header Sheet Description
weight-hanging-solid If you want to have the Varian Encumbrance Active Effects and Weight calculation features on your actor make sure to have the "weight" symbol on the header sheet (this is the default)
balance-scale-right-solid If you don't want to have the Varian Encumbrance Active Effects feature on your actor make sure to have the "balance" symbol on the header sheet. ATTENTION the weight calculation feature is still active
feather-solid If you don't want to have the Variant Encumbrance Active Effects and Weight calculation features on your actor make sure to have the "feather" symbol on the header sheet. The weight is not calculated anymore and remain frozen (unless the setting 'Use standard calculation weight of the dnd5e system' is set to true in that case the weight calculation rollback to the standard weight calculation of the system dnd5e)

Some preview:

img1

img2

img3

img4

img5

img6

NOTE: from 0.6.11 the button are colored !!!

Fake the metric system calculation, but we using the imperial one

This feature is enabled with the module setitng 'Fake the metric system calculation, but we using the imperial one'

Use this only with the system setting 'Use Metric Weight Units' checked. because that setting doesn't update the value in lbs. to kg. of the item so the calculation is 'visually wrong', with this setting set to true we use the same imperial encumbrance costants, and avoid the problem, but this is a patch not a solution, this is why there it was this module in the past https://github.com/HadaIonut/Foundry-mgl

The calculation should be correct, the metric values ​​2.5, 5, 7.5 are the official ones of the dnd5e system, the problem is that checking the metric system checkbox does not consequently update the item values ​​as we would expect 1lb = 0.45kg but remains 1lb = 1kg therefore an object that weighs 6lb will result in weighing 6kg and this gives the illusion of displacing the weight, the description clearly says so Replaces all reference to lbs with kgs and updates the encumbrance calculations to use metric weight units. where with reference we mean the label 'lbs' in 'kg' not the value .... this is done on purpose to avoid a massive update of the items, consequently it does not update the weight on the objects, you can also check with the module deactivated. However, I attach an image for clarity.

img

Integration with System Bulk based on the rules from Giffyglyph

An active inventory manages items using inventory slots (storage capacity) and object bulk (carrying effort).

Inventory slots

Inventory slots describe storage capacity—how much can a thing carry without being overwhelmed? One slot holds one small object—a potion bottle, a dagger, a loaf of bread, etc.

Anything that can hold, carry, or contain objects can make use of inventory slots—for example:

Your Inventory

Your inventory capacity depends on your creature size and strength modifier—the bigger and stronger you are, the more inventory slots you have.

As your size increases, so too does your bulk—a larger creature takes more effort to carry. Your bulk equals the larger of either a) your minimum bulk or b) the total bulk of everything in your inventory.

Creature Inventory

Creature Size Inventory Slots Minimum Bulk
Tiny 6 + STR 5
Small 14 + STR 10
Medium 18 + STR 20
Large 22 + [ STR x 2 ] 40
Huge 30 + [ STR x 4 ] 80
Gargantuan 46 + [ STR x 8 ] 160

Here we see three characters calculate their inventory:

More details about the calculation can be found here

Bulk

Objects use bulk to describe how many inventory slots they fill—the bulkier the object, the more slots occupied.

Bulk represents the effort needed by a medium-sized creature to carry an object based on its size, weight, and shape—the more awkward or uncomfortable it is to hold an object, the higher its bulk.

Buttons header sheet for enable/disable the features of Bulk (Weight Bulk Calculation and Active Effects Bulk) actor by actor

Add new buttons on the header sheet of the actors for choose when to avoid to add the Active Effect or weight calculation. To much bad feed back on the automatization of the AE, i hope with this to help the community to find the best solution for the single individual

Symbol Button Header Sheet Description
bold-solid If you want to have the Varian Encumbrance Active Effects and Weight calculation features on your actor make sure to have the "bold" symbol on the header sheet (this is the default)
balance-scale-left-solid If you don't want to have the Varian Encumbrance Active Effects feature on your actor make sure to have the "balance" symbol on the header sheet. ATTENTION the weight calculation feature is still active
feather-alt-solid If you don't want to have the Variant Encumbrance Active Effects and Weight calculation features on your actor make sure to have the "feather" symbol on the header sheet. The weight is not calculated anymore and remain frozen (unless the setting 'Use standard calculation weight of the dnd5e system' is set to true in that case the weight calculation rollback to the standard weight calculation of the system dnd5e)

Variant Encumbrance Flag

Should you wish to integrate some of Variant Encumbrance's calculations into your own modules, there is now a flag which stores the actor's encumbrance tier, weight, and modified speed. Encumbrance tier is presented as 0, 1, 2, 3, as Unencumbered, Encumbered, Heavily Encumbered, Over Encumbered, respectively.

variant-encumbrance-dnd5e:
{
  burrow: 0,
  climb: 0,
  fly: 0,
  swim: 0,
  walk: 30,
  data: {
    totalWeight: 0,
    totalWeightToDisplay: 0,
    lightMax: 50,
    mediumMax: 100,
    heavyMax: 150,
    encumbranceTier: 0,
    speedDecrease: 0,
    unit: 'lbs',
    encumbrance: {
        value: 150,
        max: 100,
        pct: 200,
        encumbered: true,
    }
  },
  bulk: {
    totalWeight: 0,
    totalWeightToDisplay: 0,
    lightMax: 50,
    mediumMax: 100,
    heavyMax: 150,
    encumbranceTier: 0,
    speedDecrease: 0,
    unit: 'bulk',
    encumbrance: {
        value: 150,
        max: 100,
        pct: 200,
        encumbered: true,
    },
    inventorySlot: 60,
    minimumBulk: 2;
  },
  enabledae: true,
  enabledwe: true,
  enabledaebulk: false,
  enabledwebulk: true,
}

Settings

Name Hint Default Value More Details
Use Variant Encumbrance with specific type of actor Use for example the following type of actors (e.g. character, npc, ecc. separate by character ','), remember is case sensitive. character,vehicle A list of actor type where the module is enabled, if empty is like disable the module
Fake the metric system calculation, but we using the imperial one Use this only with the system setting 'Use Metric Weight Units' checked. Because that setting doesn't update the value in lbs. to kg. of the item the calculation is 'visually wrong', with this setting set to true we use the same imperial encumbrance constants, and avoid the problem, but this is a patch not a solution, this is why there it was this module in the past https://github.com/HadaIonut/Foundry-mgl false THIS WILL MADE IGNORE THE FOLLOWING MODULE SETTINGS 'Unencumbered Strength Multiplier (Metric System)', 'Encumbered Strength Multiplier (Metric System)' and 'Heavily Encumbered (old Strength Multiplier) (Metric System)'
Unencumbered Strength Multiplier Multiplier used to calculate maximum carrying weight before being encumbered from the strength ability score. 5
Unencumbered Strength Multiplier (Metric System) Multiplier used to calculate maximum carrying weight before being encumbered from the strength ability score (Metric System). 2.5
Encumbered Strength Multiplier Multiplier used to calculate maximum carrying weight before being heavily encumbered from the strength ability score. 10
Encumbered Strength Multiplier (Metric System) Multiplier used to calculate maximum carrying weight before being heavily encumbered from the strength ability score (Metric System). 5
Heavily Encumbered (old Strength Multiplier) Multiplier used to calculate maximum carrying weight from the strength ability score. 15
Heavily Encumbered (old Strength Multiplier) (Metric System) Multiplier used to calculate maximum carrying weight from the strength ability score (Metric System). 7.5
Enable or disable the strength multiplier feature Enable or disable the strength multiplier feature. false I DON'T RECOMMENDED it, this will multiply the carriage value with CONFIG.DND5E.encumbrance.strMultiplier.imperial/CONFIG.DND5E.encumbrance.strMultiplier.metric value, USUALLY YOU DON'T NEED THIS because the module already do this with the setting "Heavily Encumbered" multiplier
Strength Multiplier Work only with strength multiplier feature enabled. Multiplier used to calculate maximum carrying weight from the strength ability score. 15 Usually you never need this except for some homebrew rule
Strength Multiplier (Metric System) Multiplier used to calculate maximum carrying weight from the strength ability score (Metric System). 7.5 Usually you never need this except for some homebrew rule
Variant Encumbrance Speed Penalties Enable automatic speed penalties from carry weight. true
Unequipped Item Weight Multiplier Multiplier for items when not equipped. 1
Equipped Item Weight Multiplier Multiplier for items when equipped, can be used to reduce effective weight for armour and weapons. 1
Proficient Equipped Item Weight Multiplier Multiplier for proficient items when equipped, can be used to reduce effective weight for armour and weapons. 1
Currency Per Weight Unit Define the number of coins required to equal 1 unit of weight. 50
Currency Per Weight Unit (Metric System) Define the number of coins required to equal 1 unit of weight (Metric System). 110
Vehicle weights Weight Multiplier, lbs in an imperial ton Vehicle weights are an order of magnitude greater, Multiplier for vehicles. 2000
Vehicle weights Weight Multiplier, kg in a metric ton (Metric System) Vehicle weights are an order of magnitude greater, Multiplier for vehicles (Metric System). 1000
Variant Encumbrance Size Modifiers Enable multipliers from creature size. true
Weight Units Units displayed in the encumbrance bar (just graphics). lbs.
Weight Units (Metric System) Units displayed in the encumbrance bar (just graphics) (Metric System). kg.
Lightly Encumbered Speed Decrease The number of speed units subtracted when lightly encumbered, default is 10. 10
Lightly Encumbered Speed Decrease (Metric System) The number of speed units subtracted when lightly encumbered, default is 3. 3
Encumbered Speed Decrease The number of speed units subtracted when heavily encumbered, default is 20. 20
Encumbered Speed Decrease (Metric System) The number of speed units subtracted when heavily encumbered, default is 6. 6
Enable pre check encumbrance tier I DON'T RECOMMENDED it, but does anyone seem to use this strange rule? If true the add/remove of the AE is launched only when there is a change on the value level of the tier so the refresh is ignored when add/remove/update item false
Enable/Disable the feature for applying the variant encumbrance active effects for specific actor If true add on the header sheet of the actor a button visible only to GM for enable/disable the active effects feature, by default the feature is disabled (the flag is false) for performance issues true
Remove label from buttons on the header character sheet Remove label from buttons on the header character sheet, Useful for little screen and mobile, by default is true true
Use standard calculation weight of the dnd5e system I DON'T RECOMMENDED it, but some people seem to lose their mind for 2s instead of 1s on the calculation weight ???, you will lose all the benefit from the others feature like Equipped, Unequipped, Proficient Equipped, Inventory +, Item container, ecc., but hey !! you got the 1 sec you miss. false
Use equipped/unequipped feature of the ItemCollection/Item Container module for the backpack I DON'T RECOMMENDED it, the only difference (only for item container) is \"Item container\" module set 0 if unequipped, the \"variant encumbrance\" get the value from the module setting by default 1 if unequipped, and now i remember the calculation not make sense for some people because there are two behaviour for the equipped and unequipped items if they are item container or standard item. Bags can be unequipped by players or GM, so that their reported weight drops to 0 in your inventory (only bags with a capacity other than 0 can be unequipped) false This make sense only with Item Collection/Item Containers installed and active
[DEPRECATED] Disable the socketLib feature integration This is usually useful only for avoid a socket collision with other modules false
Enable Bulk system Enable integration with the Bulk System explained here: https://www.giffyglyph.com/darkerdungeons/grimoire/4.0.0/en/active_inventory.html false
Weight Units (Bulk System) Units displayed in the encumbrance bar (just graphics) (Bulk System). Default is 'bulk' bulk
Encumbered Speed Decrease (Bulk System) The number of speed units multiply when heavily encumbered (Bulk System), default is '0.5'. 0.5
Automatic apply suggested bulk WARNING: THIS IS DANGEROUS, IT WILL UPDATE THE BULK DATA ON EVERY ITEM BEEN RENDERED IF THE BULK VALUE IS 0. This is usually save time if you don't want to manually set every item (the advisable way) false
Remove standard encumbrance bar from the character sheet If enabled it will hide the standard bar of encumbrance, is useful only for people using the bulk bar and do not want to see two graphic bars false
Do Not increase weight by quantity for no ammunition item This is a homebrew rule, for non-ammunition items don't increase weight by quantity (so 5 potions = 1 item weight for example). ATTENTION: If the module 'Variant Encumbrance' is present and active this feature is disabled by default if the module settings 'Feature: Integration with Variant Encumbrance' is enabled. false
Debug Enable debug messages useful for check issues false

API

game.modules.get('variant-encumbrance-dnd5e').api.calculateWeightOnActorFromId(actorIdOrName:string, ignoreCurrency:boolean) ⇒ EncumbranceData

Calculate the weight on the actor with all the filters applied.

Returns: EncumbranceData - A EncumbranceData object

Param Type Description Default
actorIdOrName string The actor reference by id or name undefined

Example: game.modules.get('variant-encumbrance-dnd5e').api.calculateWeightOnActorFromId('Pippo')

game.modules.get('variant-encumbrance-dnd5e').api.calculateWeightOnTokenFromId(tokenIdOrName:string, ignoreCurrency:boolean) ⇒ EncumbranceData

Calculate the weight on the actor with all the filters applied.

Returns: EncumbranceData - A EncumbranceData object

Param Type Description Default
tokenIdOrName string The token reference by id or name undefined

Example: game.modules.get('variant-encumbrance-dnd5e').api.calculateWeightOnTokenFromId('Pippo')

game.modules.get('variant-encumbrance-dnd5e').api.calculateWeightOnActor(actor:Actor, ignoreCurrency:boolean):EncumbranceData ⇒ EncumbranceData

Calculate the weight on the actor with all the filters applied.

Returns: EncumbranceData - A EncumbranceData object

Param Type Description Default
actor Actor The actor object undefined

Example: game.modules.get('variant-encumbrance-dnd5e').api.calculateWeightOnActor(actor)

game.modules.get('variant-encumbrance-dnd5e').api.calculateBulkOnActorFromId(actorIdOrName:string, ignoreCurrency:boolean) ⇒ EncumbranceData

Calculate the bulk on the actor with all the filters applied.

Returns: EncumbranceData - A EncumbranceData object

Param Type Description Default
actorIdOrName string The actor reference by id or name undefined

Example: game.modules.get('variant-encumbrance-dnd5e').api.calculateBulkOnActorFromId('Pippo')

game.modules.get('variant-encumbrance-dnd5e').api.calculateBulkOnTokenFromId(tokenIdOrName:string, ignoreCurrency:boolean) ⇒ EncumbranceData

Calculate the bulk on the actor with all the filters applied.

Returns: EncumbranceData - A EncumbranceData object

Param Type Description Default
tokenIdOrName string The token reference by id or name undefined

Example: game.modules.get('variant-encumbrance-dnd5e').api.calculateBulkOnTokenFromId('Pippo')

game.modules.get('variant-encumbrance-dnd5e').api.calculateBulkOnActor(actor:Actor, ignoreCurrency:boolean):EncumbranceData ⇒ EncumbranceData

Calculate the bulk on the actor with all the filters applied.

Returns: EncumbranceData - A EncumbranceData object

Param Type Description Default
actor Actor The actor object undefined

Example: game.modules.get('variant-encumbrance-dnd5e').api.calculateBulkOnActor(actor)

game.modules.get('variant-encumbrance-dnd5e').api.convertLbToBulk(weight: number):number ⇒ number

Convert weight to bulk

Returns: EncumbranceData - A EncumbranceData object

Param Type Description Default
weight number The weight undefined

Example: game.modules.get('variant-encumbrance-dnd5e').api.convertLbToBulk(weight)

game.modules.get('variant-encumbrance-dnd5e').api.calculateWeightOnActorWithItems(actor: Actor, items:Item[]): EncumbranceData | undefined

game.modules.get('variant-encumbrance-dnd5e').api.calculateBulkOnActorWithItems(actor: Actor, items:Item[]): EncumbranceBulkData | undefined

game.modules.get('variant-encumbrance-dnd5e').api.calculateWeightOnActorWithItemsNoInventoryPlus(actor: Actor, items:Item[]): EncumbranceData | undefined

game.modules.get('variant-encumbrance-dnd5e').api.calculateBulkOnActorWithItemsNoInventoryPlus(actor: Actor, items:Item[]): EncumbranceBulkData | undefined

Models

EncumbranceData

Here the EncumbranceData structure:

{
  totalWeight: number,
  totalWeightToDisplay: number,
  lightMax: number,
  mediumMax: number,
  heavyMax: number,
  encumbranceTier: number,
  speedDecrease: number,
  unit: string,
  encumbrance:EncumbranceDnd5e;
}

EncumbranceDnd5e

Here the EncumbranceDataDnd5e structure:

{
  value: number;
  max: number;
  pct: number;
  encumbered?: boolean; //Vehicle not have this
}

EncumbranceBulkData

Here the EncumbranceBulkData structure extends EncumbranceData:

{
  totalWeight: number,
  totalWeightToDisplay: number,
  lightMax: number,
  mediumMax: number,
  heavyMax: number,
  encumbranceTier: number,
  speedDecrease: number,
  unit: string,
  encumbrance:EncumbranceDnd5e;
  inventorySlot: number;
  minimumBulk: number;
}

Build

Install all packages

npm install

npm build scripts

build

will build the code and copy all necessary assets into the dist folder and make a symlink to install the result into your foundry data; create a foundryconfig.json file with your Foundry Data path.

{
  "dataPath": "~/.local/share/FoundryVTT/"
}

build will build and set up a symlink between dist and your dataPath.

npm run-script build

NOTE:

You don't need to build the foundryconfig.json file you can just copy the content of the dist folder on the module folder under modules of Foundry

build:watch

build:watch will build and watch for changes, rebuilding automatically.

npm run-script build:watch

clean

clean will remove all contents in the dist folder (but keeps the link from build:install).

npm run-script clean

lint and lintfix

lint launch the eslint process based on the configuration here

npm run-script lint

lintfix launch the eslint process with the fix argument

npm run-script lintfix

prettier-format

prettier-format launch the prettier plugin based on the configuration here

npm run-script prettier-format

package

package generates a zip file containing the contents of the dist folder generated previously with the build command. Useful for those who want to manually load the module or want to create their own release

npm run-script package

Changelog

Issues

Any issues, bugs, or feature requests are always welcome to be reported directly to the Issue Tracker, or using the Bug Reporter Module.

License

This package is under an MIT license and the Foundry Virtual Tabletop Limited License Agreement for module development.

Acknowledgements

Bootstrapped with League of Extraordinary FoundryVTT Developers foundry-vtt-types.

Mad props to the 'League of Extraordinary FoundryVTT Developers' community which helped me figure out a lot.