Git Product home page Git Product logo

variantencumbrance's Introduction

Variant Encumbrance

Latest Release Download Count

Forge Installs

Foundry Core Compatible Version

Latest Version

Foundry Hub Endorsements

GitHub all releases

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

  • The rules for Lifting and Carrying are intentionally simple. Here is a variant if you are looking for more detailed rules for determining how a character is hindered by the weight of Equipment. When you use this variant, ignore the Strength column of the Armor table.
  • If you carry weight in excess of 5 times your Strength score, you are encumbered, which means your speed drops by 10 feet.
  • If you carry weight in excess of 10 times your Strength score, up to your maximum carrying Capacity, you are instead heavily encumbered, which means your speed drops by 20 feet and you have disadvantage on Ability Checks, Attack rolls, and Saving Throws that use Strength, Dexterity, or Constitution.

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

  • Due to the million variations of the various use cases that I have to take into account the most attentive players may notice a slowdown which is logical if you think I have to redo the checks and refresh the flags every time it is inserted, updated, deleted, revised , edited an object with weight. You need someone more Expert than me to handle this, but i still think to have done a good job with the handling of the use cases.
  • Limitation on some character sheet, open a issue and i'll try to make a fix.
  • Is not full synchronized with DAE in favor of the standard active effects mechanism. but you can still use dae on the active effect.
  • I have not found the time to fully test for the vehicle sheet so any feedback is more than welcome, seem to work anyway

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:

  • Creatures use slots to describe how much they can carry before they're encumbered.
  • Containers use slots to describe how much they can store before they're full.
  • Buildings use slots to describe how much free space they have in their rooms.
  • Vehicles use slots to describe how much they can transport before they can't move.

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:

  • Valiant, a human cleric, is a medium-sized creature (18 slots) with +2 STR (+2 slots). He has a total of 20 inventory slots, and occupies a minimum of 20 slots when carried.
  • Crackle, a kobold wizard, is a small creature (14 slots) with −1 STR (−1 slot). She has 13 inventory slots and occupies a minimum of 10 slots.
  • Brakken, a goliath barbarian, is a medium-sized creature with Powerful Build (22 slots) and +3 STR (+6 slots). She has 28 inventory slots and occupies a minimum of 20 slots when carried.

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,
}
  • burrow: the value in units for the burrow movement get from property actor.data.data.attributes.movement.burrow.
  • climb: the value in units for the climb movement get from property actor.data.data.attributes.movement.climb.
  • fly: the value in units for the fly movement get from property actor.data.data.attributes.movement.fly.
  • swim: the value in units for the swim movement get from property actor.data.data.attributes.movement.swim.
  • walk: the value in units for the walk movement get from property actor.data.data.attributes.movement.walk.
  • totalWeight: the 'real' total weight synced with the core system of dnd5e.
  • totalWeightToDisplay: the 'fake' total weight not synced with the core system of dnd5e, is used for manage on a display level feature from other module like "Vehicle Cargo Capacity Unit" from the module 'DF QUALITY OF LIFE'.
  • lightMax: the weight value for pass from 'unencumbered' to 'encumbered' and back.
  • mediumMax: the weight value for pass from 'encumbered' to 'heavily encumbered' and back.
  • heavyMax: the weight value for pass from 'heavily encumbered' to 'overburdened' and back.
  • encumbranceTier: the number given the current tier applied don the actor
    • 0 = Unencumbered
    • 1 = Encumbered
    • 2 = Heavily Encumbered
    • 3 = Over Encumbered (Overburdened)
  • speedDecrease: the value in units of the decreased movement (this change if the metric system is active or not).
  • unit: the label applied to the unit weight, just a visual effect (default is lbs. on metric system is kg.).
  • encumbrance: the representation of the standard dnd5e system encumbrance data useful for integration between modules.
  • inventorySlot: 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.
  • minimumBulk: the calculated minimum bulk fir the current actor
  • enabledae: if true it's mean on the actor is applied the management of the active effects of the weight from the module. NOTE: if you set true this is better to set to false 'enabledwe'
  • enabledwe: if true it's mean on the actor is applied the calculation of the weight from the module.
  • enabledaebulk: if true it's mean on the actor is applied the system bulk the management of the active effects of the weight from the module. NOTE: if you set true this is better to set to false 'enabledwe'
  • enabledwebulk: if true it's mean on the actor is applied the system bulk and the calculation of the weight from the module.

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

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.

variantencumbrance's People

Contributors

47y avatar dependabot[bot] avatar eruestani avatar hmqgg avatar p4535992 avatar paullessing avatar vanirdev avatar varriount avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

variantencumbrance's Issues

User lacks permission to update Actor onUpdate

Environment: Foundry VTT 0.7.9
Dnd 5e: 1.2.0

When a user updates their inventory, other players are seeing a popup message stating they lack permission to update Actor.

Tonight I had four players. For the logs shown here, one user added an inventory item from the compendium. They did not see any error. The other three players all saw an error at the same instant.

{"level":"error","timestamp":"2021-01-03 21:28:22","message":"User Mazi lacks permission to update Actor CyUMiEErdVy1M49k","stack":"Error: User Mazi lacks permission to update Actor CyUMiEErdVy1M49k\n    at Function._onUpdate (/var/games/FoundryVTT/foundrycore/resources/app/dist/database/odm/document.js:1:8099)\n    at async Socket.handleEvent (/var/games/FoundryVTT/foundrycore/resources/app/dist/sockets.js:1:2262)"}
{"level":"error","timestamp":"2021-01-03 21:28:22","message":"User Tuesday lacks permission to update Actor CyUMiEErdVy1M49k","stack":"Error: User Tuesday lacks permission to update Actor CyUMiEErdVy1M49k\n    at Function._onUpdate (/var/games/FoundryVTT/foundrycore/resources/app/dist/database/odm/document.js:1:8099)\n    at async Socket.handleEvent (/var/games/FoundryVTT/foundrycore/resources/app/dist/sockets.js:1:2262)"}
{"level":"error","timestamp":"2021-01-03 21:28:22","message":"User Broche lacks permission to update Actor CyUMiEErdVy1M49k","stack":"Error: User Broche lacks permission to update Actor CyUMiEErdVy1M49k\n    at Function._onUpdate (/var/games/FoundryVTT/foundrycore/resources/app/dist/database/odm/document.js:1:8099)\n    at async Socket.handleEvent (/var/games/FoundryVTT/foundrycore/resources/app/dist/sockets.js:1:2262)"}

Disabling VariantEncumbrance plugin stops the error messages so I believe the problem lies here.

This has been reported by myself, Ravenknight and others in the FoundryVTT Discord.

BUG when combined with Magic Items module

When this module is combined with the "Magic Items" module and a limited number of charges is put on the spell attached to the item, and the item is set to destroy itself, an error message pops up that says the following:

Uncaught (in promise) Error: The key XgBGASnpUdEGFzOT does not exist in the EmbeddedCollection Collection
[No packages detected]
at Map.get (/G:/FoundryVTT/resources/app/common/utils/collection.mjs:106)
at ServerDatabaseBackend._updateEmbeddedDocuments (/G:/FoundryVTT/resources/app/dist/database/backend/server-backend.mjs:1)
at ServerDatabaseBackend.update (/G:/FoundryVTT/resources/app/common/abstract/backend.mjs:153)
at async Socket.handleEvent (/G:/FoundryVTT/resources/app/dist/server/sockets.mjs:1)

Disabling your mod fixes the issue.

[BUG] Is calculating Vehicle Weight

Module Version: v0.6.8

Describe the bug
Vehicle weight is being calculated when it should not be.

To Reproduce
Steps to reproduce the behavior:

  1. Create a Vehicle Actor
  2. Set the vehicle's Cargo Capacity to 2 Short Tons
  3. Observe the calculated weight now reads N/4 lbs.

Expected behavior
Should not be performing weight calculations for Vehicles.

Screenshots
Vanilla FoundryVTT
image

With Variant Encumbrance
image

Browser:

  • Brave

Foundry Version: 0.8.9

Game System: DnD5e 1.5.3

Performance issues

I noticed that this mod causes some (probably unintended) performance issues, especially with a lot of other modules. It seems the sheet of characters is being updated a whole lot, and with some other modules this adds up.

Removing this module sped up a lot of things for me.

I'm not sure what is causing ut, but seems to have something to do with active affects and the encumberance causing the sheet to render to often.

Bug when combined with Illandril's Inventory Sorter

When dragging an inventory item from one token to another (not from a compendium to a token) I get an error with the following message in the console:

Uncaught (in promise) Error: The key B3EbdfIsEwnQO4up does not exist in the EmbeddedCollection Collection
[No packages detected]
at Map.get (/G:/FoundryVTT/resources/app/common/utils/collection.mjs:106)
at ServerDatabaseBackend._updateEmbeddedDocuments (/G:/FoundryVTT/resources/app/dist/database/backend/server-backend.mjs:1)
at ServerDatabaseBackend.update (/G:/FoundryVTT/resources/app/common/abstract/backend.mjs:153)
at async Socket.handleEvent (/G:/FoundryVTT/resources/app/dist/server/sockets.mjs:1)

This bug goes away when I turn off Variant Encumbrance, or when I turn off Illandril's Inventory Sorter. I haven't always gotten this bug though, and he hasn't updated his in a few months so I suspect the issue is from this module.

Changed sheet breaks updates

Hi,

Just wanted to let you know if the sheet is changed to another one. It will no longer pick up weight changes.
Example click on or off weightless in backpacks.

[BUG] Item Containers weight calculation with backpacks becomes reverse of intended

Module Version: v0.6.8

Describe the bug
It seems that this module combined with the newest version of Item Containers (1.8.9) "reverses" when the carrying weight of a bag is calculated. Without this module enabled, I can equip a bag from Item Containers, and the weight is then added and calculated, and when I unequip it, the weight is removed. With the module on, it seems to reverse this?

To Reproduce
Steps to reproduce the behavior:

  1. Use the Backpack item from the DnD 5e compendium, have the aforementioned modules enabled.
  2. Equip/unequip the bag, notice the weight added doesn't correlate right depending on whether it is equipped or not - for me it added the weight when it was unequipped, rather than equipped.

Foundry Version:
0.8.9

Game System:
DnD 5e 1.5.3

Encumbrance movement penalty is doubled when DAE is enabled

In order to submit an effective bug report, please include the following information along with your issue description.

Environment Details

  • Foundry VTT Version: 9.249
  • Operating System: Red Hat Enterprise Linux (Host), Alpine Linux (Docker container)
  • How Are You Using Foundry: Firefox
  • Which Game System: dnd5e
  • Modules Enabled?: yes, Variant Encumbrance, Item Containers and Dynamic Active Effects

Issue Description

When Variant Encumbrance is configured to use speed penalties, the 10ft penalty is doubled while DAE is enabled, e.g. 30ft movement is reduced to 10ft when lightly encumbered.

"Powerful Build" Attribute not taken into account, incompatibility with Burger Time module

  • Foundry VTT Version: 0.8.9
  • Operating System: MacOS 11.6
  • How Are You Using Foundry: Native Application, Chrome
  • Which Game System: dnd5e v1.4.3
  • Modules Enabled?: yes

Issue Description

I am using your mod, but when enabling the Special Trait --> Racial Trait --> Powerful Build, the character's carrying capacity is not changing -- it remains the same whether that box is checked or not. I have done enabling/disabling the mod, restarting FVTT, etc.

Feature Request: Add support for characters with Powerful Build trait/ which in turns requires size based calculations for carrying capacity.

"Powerful Build. You count as one size larger when determining your carrying capacity and the weight you can push, drag, or lift."
Currently everything assumes a medium sized character.
Each size category step increases or decreases (ignoring size Small) carrying capacity by a factor of 2. PHB p176: "Lifting and Carrying"
So just some simple math and a couple lines of code to look for creature size and if they have the powerful build trait flag in the character sheet's special traits.

[Option]

Could it be possible to have the option for unequipped item to not be added. My party usually use equipped as "taken on them" and the rest on animals or at home.

VariantEncumbrance calculates from original data rather than derived data (DAE support)

Trying to create a DAE feature that doubles the carrying capacity, it enables me to change the flag on the actor, I can read that it is changed, but the encumbrance value and the encumbrance percentage remains the same.

The developer of DAE suggested the above, that VariantEncumbrance is calculating from original data rather than derived, and that is why it is not updating.

image

Follow-up

Hi its me again, sorry to bother you but, i cant find the option for "Atribute Waight" in the Effects section.
image_2021-01-18_054741

is it possible to add as i can see you have implemented support for it
if the correct effect is the "encumbrance" class then when i do Add -10 it spits back the Nan Value on waight and the same for + or multiply
gsdgsdsdsd
fasfasfasfas

Issue with VTT 0.7.7

When I have this module enabled in 0.7.7, randomly players and GM will lose the ability to access their character sheets. The sheet will come up but clicking Inventory or trying to change anything doesn't work. I am using the Default 5e Character Sheet. Let me know if there's any debug data I can provide to help locate the issue.

[BUG]

Module Version: v0.7.0

My players max weights are at randomly high numbers: 3300, 10,000, etc... The weight calculator otherwise works. If I delete the module, the weight scores fix themselves. But when I reinstall the bug comes right back exactly as it was - no matter how many times i delete it.

To Reproduce
I don't know how to reproduce the error, but it affects every single player character including new ones.

Screenshots

Screenshot 2022-01-05 131433

Foundry Version:
Bug happened v8.8 and carried over to 9.2

Game System:
dnd5e

Additional context
Add any other context (like other modules installed) about the problem here.

Error in module, always shows weight for unequipped items...

Below issue is when using: Foundry 0.7.9 / 5E 1.2.2 / Variant Encumbrance v0.3 / Tidy 5E Sheet 0.4.10

Characters (player-owned) always show encumbrance of all items in inventory even when selecting "Equipped" or other filters for encumbrance.

When a filter is selected I receive the following error messages (one or the other, sometimes both) in the console:

Error: Invalid scope for flag categorys
at Actor5e.getFlag (foundry.js:30217)
at convertItemSet (VariantEncumbrance.js:174)
at calculateEncumbrance (VariantEncumbrance.js:330)
at VariantEncumbrance.js:65
at Function._call (foundry.js:2496)
at Function.call (foundry.js:2481)
at Tidy5eSheet._render (foundry.js:4547)
at async Tidy5eSheet._render (foundry.js:5157)

Uncaught (in promise) Error: Invalid scope for flag categorys
at Actor5e.getFlag (foundry.js:30217)
at convertItemSet (VariantEncumbrance.js:174)
at updateEncumbrance (VariantEncumbrance.js:211)
at VariantEncumbrance.js:108
at Function._call (foundry.js:2496)
at Function.callAll (foundry.js:2456)
at Function._handleUpdateEmbeddedEntity (foundry.js:30047)
at Actor5e.updateEmbeddedEntity (foundry.js:30015)
at async Actor5e.updateEmbeddedEntity (entity.js:199)
at async Tidy5eItemSheet._onSubmit (foundry.js:5251)

Crash in Foundry 0.8.6

Editing my inventory causes a console error:

ReferenceError: SetupConfiguration is not defined
    convertItemSet VariantEncumbrance.js:189
    calculateEncumbrance VariantEncumbrance.js:358
    <anonymous> VariantEncumbrance.js:58
    _call lib-wrapper.js line 1 > eval:4
    call foundry.js:179
    _render foundry.js:2096
    call_wrapped libWrapper-wrapper.js:448
    <anonymous> libWrapper-errors.js:268
    0 libWrapper-wrapper.js:142
    _render foundry.js:2728
    render foundry.js:2003
    render foundry.js:3221
    render foundry.js:9346
    _onUpdateEmbeddedDocuments foundry.js:9473
    _onUpdateEmbeddedDocuments foundry.js:12346
    _handleUpdateEmbeddedDocuments foundry.js:8839
    _updateEmbeddedDocuments foundry.js:8725
    update backend.mjs:153
    updateDocuments document.mjs:365
    update document.mjs:447
    callOriginalFunction Monkey.js:80
    patchCompendiumUpdateEntity patches.js:100
    activateListeners tidy5e-sheet.js:154
    jQuery 9
    activateListeners tidy5e-sheet.js:148
    _render foundry.js:2069
    call_wrapped libWrapper-wrapper.js:448
    <anonymous> libWrapper-errors.js:268
    0 libWrapper-wrapper.js:142
    _render foundry.js:2728
    render foundry.js:2003
    render foundry.js:3221
    render foundry.js:9346
    _onUpdateEmbeddedDocuments foundry.js:9473
    _onUpdateEmbeddedDocuments foundry.js:12346
    _handleUpdateEmbeddedDocuments foundry.js:8839
    _updateEmbeddedDocuments foundry.js:8725
    update backend.mjs:153
    updateDocuments document.mjs:365
    update document.mjs:447
lib-wrapper.js line 1 > eval:8:15
    _call lib-wrapper.js line 1 > eval:8
    call foundry.js:179
    _render foundry.js:2096
    call_wrapped libWrapper-wrapper.js:448
    <anonymous> libWrapper-errors.js:268
    0 libWrapper-wrapper.js:142
    _render foundry.js:2728
    render foundry.js:2003
    render foundry.js:3221
    render foundry.js:9346
    _onUpdateEmbeddedDocuments foundry.js:9473
    _onUpdateEmbeddedDocuments foundry.js:12346
    _handleUpdateEmbeddedDocuments foundry.js:8839
    _updateEmbeddedDocuments foundry.js:8725
    update backend.mjs:153
    updateDocuments document.mjs:365
    update document.mjs:447
    callOriginalFunction Monkey.js:80
    patchCompendiumUpdateEntity patches.js:100
    activateListeners tidy5e-sheet.js:154
    jQuery 9
    activateListeners tidy5e-sheet.js:148
    _render foundry.js:2069
    call_wrapped libWrapper-wrapper.js:448
    <anonymous> libWrapper-errors.js:268
    0 libWrapper-wrapper.js:142
    _render foundry.js:2728
    render foundry.js:2003
    render foundry.js:3221
    render foundry.js:9346
    _onUpdateEmbeddedDocuments foundry.js:9473
    _onUpdateEmbeddedDocuments foundry.js:12346
    _handleUpdateEmbeddedDocuments foundry.js:8839
    _updateEmbeddedDocuments foundry.js:8725
    update backend.mjs:153
    updateDocuments document.mjs:365
    update document.mjs:447

Not enabling encumbrance effect

Module Version: v0.7.8

The encumbered effect doesn't change the speed of the token. Checking the effects finds that it has no content.

When the settings "Heavily Enc. Strength Multiplier" is modified the bar color is not correctly setted

Environment Details:

Foundry VTT Version: 0.7.1
Operating System: [Linux]
How Are You Using Foundry: [Linux,Native Application (Electron), Chrome]
Which Game System: Dungeons and Dragons 5th Edition, version 0.96
Modules Enabled?: yes
OS, Hosting, Browser (if applicable): Linux/Node/Chrome
Module Version:

Description of the issue:
When the settings "Heavily Enc. Strength Multiplier" is modified the bar color is not correctly setted.

Steps to reproduce the issue:

  1. Go to module settings.
  2. Set the "Heavily Enc. Strength Multiplier" from "15" to "30"
  3. Go to character sheet
  4. The bar values seem to have some problem

Here some screenshot:

Default case with "Heavily Enc. Strength Multiplier" set to 15

img1

"Heavily Enc. Strength Multiplier" set to 30

img2

Preparing a Spell reset Encumbrance.

Hello!

First of all, thank you very much for this wonderful module!
After doing some testing in a new world using only this module, I believe I have identified a bug, specifically when preparing/un-preparing spells.

Issue:

Preparing a spell (and maybe other interactions) triggers a call to updateEncumbrance with the spell data as the updatedItem parameter and mode set to add.
The spell data does not contain any weight info, but is added to the item list for weight anyway, later causing the calculateEncumbrance function to always return an encumbranceTier of 0 by introducing NaN values during the process.

Possible Fix:

Quick & Dirty I used for testing: on VariantEncumbrance.js line 235, replace
if (mode == "add") { with if (mode == "add" && !!updatedItem.data.weight) {
Proper Fix: Check the validity of updatedItem, but I'm not sure what valid data should look like so...

Multiple call to "deleting duplicate effect" when importing a character from ddb-importer

When importing a character from the ddb-importer module, the character import hangs and the console show that it constantly triggers this console log:

for (const effectEntity of actorEntity.effects) {
    if (typeof effectEntity.getFlag('VariantEncumbrance', 'tier') === 'number') {
        if (!effectEntityPresent) {
            effectEntityPresent = effectEntity;
        } else {
            // Cannot have more than one effect tier present at any one time
            console.log("VariantEncumbrance | deleting duplicate effect", effectEntity);
            await effectEntity.delete();
        }
    }
}

compatibility with Inventory + mod

I'm using Inventory + module for bag of holding(Ignore item weight) but activating this module makes the inventory counts the weight of items in the bag. 😢

My environment.
Fvtt v 8.9
Inventory + v0.3.6
Variant encumbrances+midi v0.5.1

[BUG] Additional Error When Used with Pop Out and Item Containers

Module Version: v0.7.3

Describe the bug
While using the PopOut! module, and with an item container open, I receive an error if I move an item from a popped out character sheet into the open item container.

To Reproduce
Steps to reproduce the behavior:

Pop out a character sheet
Add item to character sheet inventory
Open an item container
Move the item from the popped out character sheet to the open item container
See error

Expected behavior
No error should be produced.

Screenshots
image

Browser:
Chrome

Foundry Version:
0.9.245

Game System:
DnD5e - Fifth Edition System - 1.5.7

Additional context
Only following modules are installed:

Item Containers
libWrapper
socketlib
Variant Encumbrance+Midi
PopOut!

Inherent weight miscalculation in Inventory + module

Environment Details

  • Foundry VTT Version: 0.8.9
  • Operating System: Windows 10
  • How Are You Using Foundry: Chrome
  • Which Game System: dnd5e
  • Modules Enabled?: yes [Inventory+, Item Containers, libWrapper, Variant Encumbrance]

Issue Description

There is currently a calculation issue with this module and the Inventory+ module.
With Inventory+ there is an Inherent Weight option on each inventory category:

image

This option is intended to simulate the weight of a container item which represents that particular category. For instance, if I have a backpack that weighs 30 lbs, then I can set the Inherent Weight equal to 30. This will in turn increase my total carry weight or encumbrance by exactly 30. This is how the property works without the Variant Encumbrance module installed.

VariantEncumbranceInventoryPlusBug1

By contrast, the Variant Encumbrance module effectively changes this property, setting it to increase by the entered value for every single item contained within that particular category.

VariantEncumbranceInventoryPlusBug2

Button to calculate the weight of items

(Google Translator) I think it would be interesting to have a button on the sheet, a macro or something like that so that the sum of the weights would only be calculated when it was clicked. I say this because if all items are being calculated and any changes happen, it takes a few seconds for the update to occur.
So I think the calculation of items could and applications of dynamic effects could be paused until clicking the button.

Compatibility with metric system

Hello,

Can you add compatibility with the metric system for movement reduction by adding values in the settings, so we can define movement reduction ourselves?

Thx!

Weight is set to Infinity

Using Tidysheet 5e, Newest 5e and latest Foundry.
No matter what I change or update in the module, it's always set to Infinity weight.

[BUG] Throwing Errors When Used with Pop Out and Item Containers

Module Version: v0.7.3

Describe the bug
While using the PopOut! module, and with an item container open, I receive an error when increasing and decreasing item quantity beyond encumbrance thresholds.

To Reproduce
Steps to reproduce the behavior:

  1. Pop out character sheet
  2. Edit container inside of character sheet
  3. Add item to container
  4. Increase item count until actor becomes encumbered
  5. Reduce item count until no longer encumbered
  6. Increase item count again
  7. See error

Expected behavior
No error should be produced.

Screenshots
image

Browser:
Chrome

Foundry Version:
0.9.245

Game System:
DnD5e - Fifth Edition System - 1.5.7

Additional context
Only following modules are installed:

  • Item Containers
  • libWrapper
  • socketlib
  • Variant Encumbrance+Midi
  • PopOut!

Add compatibility for the new speed system in 5e

There has been update on how 5e handles speed in foundry. This module should update to account for that. :)

The old attribute is

  • data.attributes.speed

The new attributes are:

  • data.attributes.movement.walk
  • data.attributes.movement.burrow
  • data.attributes.movement.climb
  • data.attributes.movement.fly
  • data.attributes.movement.swim
  • data.attributes.movement.units

apply the encumbered effect once.

Cap 2021-10-17 16-56-16-352

When somebody get encumbered, status announce is repeatedly displayed.

I think this module keep creating that effect.

Fvtt v0.8.9(chrome)
window 10
dnd 5e v1.5.2
mod v0.5.19.

[BUG] Max weight values now many times larger than they should be

Module Version: v0.6.9

Describe the bug
Since the last update all of the characters in my campaign have massive carrying capacity. For example my Sorceror with a mere STR of 6 is reporting 28.2/1350 lbs.

Foundry Version: 0.8.9

**Game System: DnD 5e 1.5.5 **

Issue with Inventory+

Hello,

It seems that this module doesn't read the option from Inventory+ for "non" custom categories.
In my game, if I enable "Ignore Item Weight" for categories like weapons, equipments and alike. This module still does add the weight of the items in the category to the global weight.

image

Module eliminates calculation of coin weight

Environment Details

  • Foundry VTT Version: 0.8.9
  • Operating System: Windows 10
  • How Are You Using Foundry: Chrome
  • Which Game System: dnd5e
  • Modules Enabled?: yes [Inventory+, Item Containers, libWrapper, Variant Encumbrance]

Issue Description

Regardless of other modules installed, this module eliminates the weight of any carried currency.

VariantEncumbranceCoinBug1

VariantEncumbranceCoinBug2

[BUG]

Module Version: v0.6.7

Describe the bug
(Description made by a non native english speaker :) )
AE not working

After the update yesterday, I went into the parameters, and put some numbers. It was working for some time...
After several clicks on the character sheet, the active effect dissappeared (speed reduction)... And it's impossible to put it back.

I tried today too, on a PC who was "slightly encumbered", made his weight "ok" for no malus, and added him some stuff to make him encumbered again.............. nothing !

image
image
image

Thanks for your mod anyway.

Provide alternative weight trigger method

I love the concept of the module, but I have tried using it for months now, and simply find the weight update triggers are incredibly touchy, often times my players will do something that causes 10-20 encumbrance triggers to occur and it turns into a mess.

at least for me, the automation is simply not worth the effort and my players are not changing weight that much for it to be necessary. It would be great to be able to turn off the auto calulation and add a button on the sheet for those who want to manually trigger weight updates/encumbrance effects

Debug

Just a heads up, you left Debug on in the module.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.