Compare commits

..

18 Commits

Author SHA1 Message Date
Stefan Zermatten
425c42d049 Bumped version 2015-09-25 12:52:28 +02:00
Stefan Zermatten
ab6f0c4f5b Merge branch 'fix-columns' 2015-09-25 12:51:04 +02:00
Stefan Zermatten
5d6e57b896 Wrap cards in padded divs to make columns behave 2015-09-25 12:49:48 +02:00
Stefan Zermatten
7c0a8125f2 Merge branch 'fix-carry-capacity-effectView' 2015-09-04 13:56:06 +02:00
Stefan Zermatten
7481ef08a8 Carry capacity effects no longer show up as "no stat" when viewed 2015-09-04 13:55:42 +02:00
Stefan Zermatten
b578dd5fb0 Merge branch 'feature-carry-capacity-modifier' 2015-09-03 14:09:51 +02:00
Stefan Zermatten
5d6f934d88 Bumped version 2015-09-03 14:09:23 +02:00
Stefan Zermatten
337f0bfa8a Made sure migration touches every character 2015-09-03 14:09:17 +02:00
Stefan Zermatten
c62784894b Made sure encumbered conditions respect carry capacity 2015-09-03 13:53:00 +02:00
Stefan Zermatten
75fff43d7d Gave an effect menu option for carry capacity 2015-09-03 13:52:40 +02:00
Stefan Zermatten
a9eeeac0df Fixed carry capacity bar 2015-09-03 13:52:22 +02:00
Stefan Zermatten
c8af0ff0a9 Fixed carry capacity table 2015-09-03 13:52:06 +02:00
Stefan Zermatten
9e200db7b9 Made carry capacity an attribute, migrations need testing 2015-08-31 15:51:52 +02:00
Stefan Zermatten
c08cf83096 Bumped version 2015-08-27 12:21:23 +02:00
Stefan Zermatten
d9368b06d0 Merge branch 'bugfix-0.6.8' 2015-08-27 12:07:42 +02:00
Stefan Zermatten
2703367681 Proficiencies now get disabled when their features are disabled 2015-08-27 12:05:56 +02:00
Stefan Zermatten
d419442549 Fixed share dialog not finding usernames or email addresses 2015-08-27 11:59:38 +02:00
Stefan Zermatten
99df01c950 Prevented negative temporary hitpoints being added 2015-08-27 11:43:34 +02:00
23 changed files with 211 additions and 87 deletions

View File

@@ -33,6 +33,7 @@ Schemas.Character = new SimpleSchema({
age: {type: Schemas.Attribute}, age: {type: Schemas.Attribute},
ageRate: {type: Schemas.Attribute}, ageRate: {type: Schemas.Attribute},
armor: {type: Schemas.Attribute}, armor: {type: Schemas.Attribute},
carryMultiplier: {type: Schemas.Attribute},
//resources //resources
level1SpellSlots: {type: Schemas.Attribute}, level1SpellSlots: {type: Schemas.Attribute},

View File

@@ -107,6 +107,18 @@ if (Meteor.isServer) Characters.after.insert(function(userId, char) {
group: "Inate", group: "Inate",
}, },
}); });
Effects.insert({
charId: char._id,
name: "Natural Carrying Capacity",
stat: "carryMultiplier",
operation: "base",
value: "1",
parent: {
id: char._id,
collection: "Characters",
group: "Inate",
},
});
}); });
Effects.attachBehaviour("softRemovable"); Effects.attachBehaviour("softRemovable");

View File

@@ -30,7 +30,7 @@ Schemas.Proficiency = new SimpleSchema({
Proficiencies.attachSchema(Schemas.Proficiency); Proficiencies.attachSchema(Schemas.Proficiency);
Proficiencies.attachBehaviour("softRemovable"); Proficiencies.attachBehaviour("softRemovable");
makeChild(Proficiencies); makeChild(Proficiencies, ["enabled"]);
Proficiencies.allow(CHARACTER_SUBSCHEMA_ALLOW); Proficiencies.allow(CHARACTER_SUBSCHEMA_ALLOW);
Proficiencies.deny(CHARACTER_SUBSCHEMA_DENY); Proficiencies.deny(CHARACTER_SUBSCHEMA_DENY);

View File

@@ -3,8 +3,8 @@ TemporaryHitPoints = new Mongo.Collection("temporaryHitPoints");
Schemas.TemporaryHitPoints = new SimpleSchema({ Schemas.TemporaryHitPoints = new SimpleSchema({
charId: {type: String, regEx: SimpleSchema.RegEx.Id}, charId: {type: String, regEx: SimpleSchema.RegEx.Id},
name: {type: String, optional: true}, name: {type: String, optional: true},
maximum: {type: Number, defaultValue: 0}, maximum: {type: Number, defaultValue: 0, min: 0, max: 500},
used: {type: Number, defaultValue: 0}, used: {type: Number, defaultValue: 0, min: 0, max: 500},
deleteOnZero:{type: Boolean, defaultValue: false}, deleteOnZero:{type: Boolean, defaultValue: false},
dateAdded: { dateAdded: {
type: Date, type: Date,

View File

@@ -3,17 +3,24 @@
$thickColumnWidth: 304px; $thickColumnWidth: 304px;
$thinColumnWidth: 240px; $thinColumnWidth: 240px;
//Column layouts of cards //Column layout
.column-container { .column-container {
@include column-fill(balance); @include column-fill(balance);
@include column-gap(8px); @include column-gap(0px);
@include column-width($thickColumnWidth); @include column-width($thickColumnWidth);
padding: 8px; padding: 4px;
&.thin-columns { &.thin-columns {
@include column-count(4); @include column-count(4);
@include column-width($thinColumnWidth); @include column-width($thinColumnWidth);
} }
& > div {
padding: 4px;
//stop divs breaking over multiple columns
-webkit-column-break-inside: avoid;
page-break-inside: avoid;
break-inside: avoid;
}
} }
//Cards //Cards
@@ -21,20 +28,6 @@ $thinColumnWidth: 240px;
background: white; background: white;
border-radius: 2px; border-radius: 2px;
.column-container & {
margin-bottom: 8px;
width: 100%;
//hack to stop flickering
-webkit-backface-visibility: hidden;
-webkit-transform: translateX(0);
//stop breaking over column divide
-webkit-column-break-inside: avoid;
page-break-inside: avoid;
break-inside: avoid;
//Fixes extra margin at top of columns
display: inline-block;
}
.top { .top {
cursor: pointer; cursor: pointer;
padding: 16px; padding: 16px;

View File

@@ -42,6 +42,7 @@ var stats = [
{stat: "rageDamage", name: "Rage Damage", group: "Stats"}, {stat: "rageDamage", name: "Rage Damage", group: "Stats"},
{stat: "expertiseDice", name: "Expertise Dice", group: "Stats"}, {stat: "expertiseDice", name: "Expertise Dice", group: "Stats"},
{stat: "superiorityDice", name: "Superiority Dice", group: "Stats"}, {stat: "superiorityDice", name: "Superiority Dice", group: "Stats"},
{stat: "carryMultiplier", name: "Carry Capacity Multiplier", group: "Stats"},
{stat: "level1SpellSlots", name: "level 1", group: "Spell Slots"}, {stat: "level1SpellSlots", name: "level 1", group: "Spell Slots"},
{stat: "level2SpellSlots", name: "level 2", group: "Spell Slots"}, {stat: "level2SpellSlots", name: "level 2", group: "Spell Slots"},
{stat: "level3SpellSlots", name: "level 3", group: "Spell Slots"}, {stat: "level3SpellSlots", name: "level 3", group: "Spell Slots"},

View File

@@ -42,6 +42,7 @@ var stats = {
"rageDamage":{"name":"Rage Damage"}, "rageDamage":{"name":"Rage Damage"},
"expertiseDice":{"name":"Expertise Dice"}, "expertiseDice":{"name":"Expertise Dice"},
"superiorityDice":{"name":"Superiority Dice"}, "superiorityDice":{"name":"Superiority Dice"},
"carryMultiplier": {"name": "Carry Capacity Multiplier"},
"level1SpellSlots":{"name":"level 1 Spell Slots"}, "level1SpellSlots":{"name":"level 1 Spell Slots"},
"level2SpellSlots":{"name":"level 2 Spell Slots"}, "level2SpellSlots":{"name":"level 2 Spell Slots"},
"level3SpellSlots":{"name":"level 3 Spell Slots"}, "level3SpellSlots":{"name":"level 3 Spell Slots"},

View File

@@ -12,8 +12,9 @@
{{>resource name="sorceryPoints" title="Sorcery Points" color="teal" char=this}} {{>resource name="sorceryPoints" title="Sorcery Points" color="teal" char=this}}
<!--superiorityDice--> <!--superiorityDice-->
{{>resource name="superiorityDice" title="Superiority Dice" color="teal" char=this}} {{>resource name="superiorityDice" title="Superiority Dice" color="teal" char=this}}
<!--Attacks--> <!--Attacks-->
<div>
<paper-shadow class="card"> <paper-shadow class="card">
<div class="top white"> <div class="top white">
Attacks Attacks
@@ -48,8 +49,10 @@
{{/each}} {{/each}}
</div> </div>
</paper-shadow> </paper-shadow>
</div>
<!--Proficiencies--> <!--Proficiencies-->
<div>
<paper-shadow class="card"> <paper-shadow class="card">
<div class="white top"> <div class="white top">
Proficiencies Proficiencies
@@ -75,13 +78,15 @@
{{/each}} {{/each}}
</div> </div>
</paper-shadow> </paper-shadow>
</div>
<!--features--> <!--features-->
{{#each features}} {{#each features}}
<div>
<paper-shadow class="card featureCard" <paper-shadow class="card featureCard"
hero-id="main" {{detailHero}}> hero-id="main" {{detailHero}}>
<div class="top {{colorClass}} subhead" <div class="top {{colorClass}} subhead"
layout horizontal layout horizontal
hero-id="toolbar" {{detailHero}}> hero-id="toolbar" {{detailHero}}>
<div flex hero-id="title" {{detailHero}}> <div flex hero-id="title" {{detailHero}}>
{{name}} {{name}}
@@ -94,7 +99,7 @@
{{#if canEnable}} {{#if canEnable}}
<core-tooltip label="Feature enabled" <core-tooltip label="Feature enabled"
position="left"> position="left">
<paper-checkbox class="enabledCheckbox" <paper-checkbox class="enabledCheckbox"
checked={{enabled}} checked={{enabled}}
disabled={{#unless canEditCharacter charId}}true{{/unless}}> disabled={{#unless canEditCharacter charId}}true{{/unless}}>
</paper-checkbox> </paper-checkbox>
@@ -108,29 +113,30 @@
{{/if}} {{/if}}
{{#if hasUses}} {{#if hasUses}}
<div layout horizontal center end-justified> <div layout horizontal center end-justified>
<paper-button class="useFeature" <paper-button class="useFeature"
disabled={{noUsesLeft}}> disabled={{noUsesLeft}}>
Use Use
</paper-button> </paper-button>
<paper-button class="resetFeature" <paper-button class="resetFeature"
disabled={{usesFull}}> disabled={{usesFull}}>
Reset Reset
</paper-button> </paper-button>
</div> </div>
{{/if}} {{/if}}
</paper-shadow> </paper-shadow>
</div>
{{/each}} {{/each}}
</div> </div>
<div class="fab-buffer"></div> <div class="fab-buffer"></div>
</div> </div>
{{#if canEditCharacter _id}} {{#if canEditCharacter _id}}
<paper-fab id="addFeature" <paper-fab id="addFeature"
class="floatyButton" class="floatyButton"
icon="add" icon="add"
title="Add" title="Add"
role="button" role="button"
tabindex="0" tabindex="0"
aria-label="Add" aria-label="Add"
hero-id="main"></paper-fab> hero-id="main"></paper-fab>
{{/if}} {{/if}}
</div> </div>
@@ -138,15 +144,16 @@
<template name="resource"> <template name="resource">
{{#if characterCalculate "attributeBase" char._id name}} {{#if characterCalculate "attributeBase" char._id name}}
<paper-shadow class="card" <div>
<paper-shadow class="card"
hero-id="main" {{detailHero name char._id}} hero-id="main" {{detailHero name char._id}}
layout horizontal> layout horizontal>
<div class="left {{getColor}} display1 white-text" <div class="left {{getColor}} display1 white-text"
hero-id="toolbar" {{detailHero name char._id}} hero-id="toolbar" {{detailHero name char._id}}
layout horizontal center> layout horizontal center>
<div style="margin-right: 8px;"> <div style="margin-right: 8px;">
<paper-icon-button class="resourceUp" <paper-icon-button class="resourceUp"
icon="arrow-drop-up" icon="arrow-drop-up"
disabled={{cantIncrement}}> disabled={{cantIncrement}}>
</paper-icon-button> </paper-icon-button>
<paper-icon-button class="resourceDown" <paper-icon-button class="resourceDown"
@@ -157,10 +164,11 @@
<div>{{characterCalculate "attributeValue" char._id name}}</div> <div>{{characterCalculate "attributeValue" char._id name}}</div>
<!--<div>/{{char.attributeBase name}}</div>--> <!--<div>/{{char.attributeBase name}}</div>-->
</div> </div>
<div class="right clickable" <div class="right clickable"
flex layout horizontal center> flex layout horizontal center>
{{title}} {{title}}
</div> </div>
</paper-shadow> </paper-shadow>
</div>
{{/if}} {{/if}}
</template> </template>

View File

@@ -14,7 +14,9 @@ var getFractionCarried = function(char) {
}); });
//get strength //get strength
var strength = Characters.calculate.attributeValue(char._id, "strength"); var strength = Characters.calculate.attributeValue(char._id, "strength");
var capacity = strength * 15; var carryMultiplier = Characters.calculate
.attributeValue(char._id, "carryMultiplier");
var capacity = strength * 15 * carryMultiplier;
return weight / capacity; return weight / capacity;
}; };

View File

@@ -3,6 +3,7 @@
<div id="inventory" class="scroll-y" fit> <div id="inventory" class="scroll-y" fit>
<div class="column-container"> <div class="column-container">
<!--Net Worth--> <!--Net Worth-->
<div>
<paper-shadow class="card"> <paper-shadow class="card">
<div class="white top" layout horizontal center> <div class="white top" layout horizontal center>
<div class="subhead" flex> <div class="subhead" flex>
@@ -13,7 +14,9 @@
</div> </div>
</div> </div>
</paper-shadow> </paper-shadow>
</div>
<!--Weight Carried--> <!--Weight Carried-->
<div>
<paper-shadow class="card" <paper-shadow class="card"
hero-id="main" {{detailHero "weightCarried" _id}}> hero-id="main" {{detailHero "weightCarried" _id}}>
<div class="top green white-text weightCarried" <div class="top green white-text weightCarried"
@@ -48,7 +51,9 @@
</div> </div>
{{/if}} {{/if}}
</paper-shadow> </paper-shadow>
</div>
<!--Equipment--> <!--Equipment-->
<div>
<paper-shadow class="card equipmentContainer"> <paper-shadow class="card equipmentContainer">
<div class="white top" layout horizontal center> <div class="white top" layout horizontal center>
<div class="subhead" flex> <div class="subhead" flex>
@@ -76,7 +81,9 @@
{{/each}} {{/each}}
</div> </div>
</paper-shadow> </paper-shadow>
</div>
<!--Carried Items--> <!--Carried Items-->
<div>
<paper-shadow class="card carriedContainer"> <paper-shadow class="card carriedContainer">
<div class="white top" layout horizontal center> <div class="white top" layout horizontal center>
<div class="subhead" flex> <div class="subhead" flex>
@@ -95,8 +102,10 @@
{{/each}} {{/each}}
</div> </div>
</paper-shadow> </paper-shadow>
</div>
{{#each containers}} {{#each containers}}
<paper-shadow class="card itemContainer" <div>
<paper-shadow class="card itemContainer"
hero-id="main" {{detailHero}}> hero-id="main" {{detailHero}}>
<div class="top {{colorClass}}" <div class="top {{colorClass}}"
hero-id="toolbar" {{detailHero}} hero-id="toolbar" {{detailHero}}
@@ -124,6 +133,7 @@
{{/each}} {{/each}}
</div> </div>
</paper-shadow> </paper-shadow>
</div>
{{/each}} {{/each}}
</div> </div>
<div class="fab-buffer"></div> <div class="fab-buffer"></div>

View File

@@ -3,7 +3,7 @@
<div id="journal" class="scroll-y" fit> <div id="journal" class="scroll-y" fit>
<div class="column-container"> <div class="column-container">
<!--Experience Table--> <!--Experience Table-->
<paper-shadow class="card experiencesCard" <div><paper-shadow class="card experiencesCard"
hero-id="main" {{detailHero}}> hero-id="main" {{detailHero}}>
<div class="top white subhead" <div class="top white subhead"
hero-id="toolbar" {{detailHero}} hero-id="toolbar" {{detailHero}}
@@ -37,9 +37,9 @@
</paper-button> </paper-button>
</div> </div>
{{/if}} {{/if}}
</paper-shadow> </paper-shadow></div>
<!--Class Table--> <!--Class Table-->
<paper-shadow class="card" <div><paper-shadow class="card"
hero-id="main" {{detailHero}}> hero-id="main" {{detailHero}}>
<div class="white top" <div class="white top"
hero-id="toolbar" {{detailHero}} hero-id="toolbar" {{detailHero}}
@@ -78,9 +78,10 @@
</div> </div>
{{/each}} {{/each}}
</div> </div>
</paper-shadow> </paper-shadow></div>
<!--Notes--> <!--Notes-->
{{#each notes}} {{#each notes}}
<div>
<paper-shadow class="card" hero-id="main" {{detailHero}}> <paper-shadow class="card" hero-id="main" {{detailHero}}>
<div class="top {{colorClass}} noteTop subhead" <div class="top {{colorClass}} noteTop subhead"
hero-id="toolbar" {{detailHero}} hero-id="toolbar" {{detailHero}}
@@ -89,18 +90,19 @@
</div> </div>
<div class="bottom">{{#markdown}}{{description}}{{/markdown}}</div> <div class="bottom">{{#markdown}}{{description}}{{/markdown}}</div>
</paper-shadow> </paper-shadow>
</div>
{{/each}} {{/each}}
</div> </div>
<div class="fab-buffer"></div> <div class="fab-buffer"></div>
</div> </div>
</div> </div>
{{#if canEditCharacter _id}} {{#if canEditCharacter _id}}
<paper-fab id="addNote" <paper-fab id="addNote"
class="floatyButton" class="floatyButton"
icon="add" icon="add"
title="Add" title="Add"
role="button" role="button"
tabindex="0" tabindex="0"
hero-id="main"></paper-fab> hero-id="main"></paper-fab>
{{/if}} {{/if}}
</template> </template>

View File

@@ -3,6 +3,7 @@
<div id="persona" class="scroll-y" fit> <div id="persona" class="scroll-y" fit>
<div class="column-container"> <div class="column-container">
{{#with characterDetails}} {{#with characterDetails}}
<div>
<paper-shadow class="card" <paper-shadow class="card"
hero-id="main" {{detailHero "details" _id}}> hero-id="main" {{detailHero "details" _id}}>
{{#unless picture}} {{#unless picture}}
@@ -32,13 +33,15 @@
</div> </div>
</div> </div>
</paper-shadow> </paper-shadow>
</div>
{{/with}} {{/with}}
{{> containerCard characterField "description" "Description"}} <div>{{> containerCard characterField "description" "Description"}}</div>
{{> containerCard characterField "personality" "Personality Traits"}} <div>{{> containerCard characterField "personality" "Personality Traits"}}</div>
{{> containerCard characterField "ideals" "Ideals"}} <div>{{> containerCard characterField "ideals" "Ideals"}}</div>
{{> containerCard characterField "bonds" "Bonds"}} <div>{{> containerCard characterField "bonds" "Bonds"}}</div>
{{> containerCard characterField "flaws" "Flaws"}} <div>{{> containerCard characterField "flaws" "Flaws"}}</div>
{{> containerCard characterField "backstory" "Background"}} <div>{{> containerCard characterField "backstory" "Background"}}</div>
<div>
<paper-shadow class="card"> <paper-shadow class="card">
<div class="white top subhead"> <div class="white top subhead">
Languages Languages
@@ -49,6 +52,7 @@
{{/each}} {{/each}}
</div> </div>
</paper-shadow> </paper-shadow>
</div>
</div> </div>
</div> </div>
</div> </div>
@@ -70,4 +74,4 @@
</div> </div>
<div class="bottom">{{#markdown}}{{> UI.contentBlock}}{{/markdown}}</div> <div class="bottom">{{#markdown}}{{> UI.contentBlock}}{{/markdown}}</div>
</paper-shadow> </paper-shadow>
</template> </template>

View File

@@ -1,9 +1,10 @@
<template name="spells"> <template name="spells">
<div fit> <div fit>
<div id="spells" class="scroll-y" fit> <div id="spells" class="scroll-y" fit>
<div style="padding: 4px;" <div style="padding: 4px;"
layout horizontal start wrap> layout horizontal start wrap>
{{#if hasSlots}} {{#if hasSlots}}
<div>
<paper-shadow class="card" <paper-shadow class="card"
style="margin: 4px;" style="margin: 4px;"
hero-id="main" {{detailHero}}> hero-id="main" {{detailHero}}>
@@ -33,8 +34,10 @@
{{/if}}{{/each}} {{/if}}{{/each}}
</div> </div>
</paper-shadow> </paper-shadow>
</div>
{{/if}} {{/if}}
{{#each spellLists}} {{#each spellLists}}
<div>
<paper-shadow class="card spellList" flex <paper-shadow class="card spellList" flex
hero-id="main" {{detailHero}} hero-id="main" {{detailHero}}
style="margin: 4px;"> style="margin: 4px;">
@@ -92,7 +95,7 @@
<div class="tall spell item" <div class="tall spell item"
hero-id="main" {{detailHero}} hero-id="main" {{detailHero}}
layout horizontal center> layout horizontal center>
<core-icon icon="social:whatshot" <core-icon icon="social:whatshot"
style="color: {{hexColor color}}; style="color: {{hexColor color}};
margin-right: 16px;" margin-right: 16px;"
></core-icon> ></core-icon>
@@ -123,6 +126,7 @@
{{/each}} {{/each}}
</div> </div>
</paper-shadow> </paper-shadow>
</div>
{{/each}} {{/each}}
</div> </div>
<div class="fab-buffer"></div> <div class="fab-buffer"></div>
@@ -144,4 +148,4 @@
</core-tooltip> </core-tooltip>
{{/fabMenu}} {{/fabMenu}}
{{/if}} {{/if}}
</template> </template>

View File

@@ -1,5 +1,6 @@
<template name="abilityMiniCard"> <template name="abilityMiniCard">
<paper-shadow class="card abilityMiniCard clickable" <div>
<paper-shadow class="card abilityMiniCard clickable"
hero-id="main" {{detailHero ability ../_id}} hero-id="main" {{detailHero ability ../_id}}
layout horizontal> layout horizontal>
<div class="left white-text {{color}}" <div class="left white-text {{color}}"
@@ -11,4 +12,5 @@
{{title}} {{title}}
</div> </div>
</paper-shadow> </paper-shadow>
</div>
</template> </template>

View File

@@ -1,9 +1,11 @@
Template.addTHPDialog.events({ Template.addTHPDialog.events({
"tap #addButton": function(event, instance){ "tap #addButton": function(event, instance){
var max = +instance.find("#quantityInput").value;
if (!max || max < 0) max = 0;
TemporaryHitPoints.insert({ TemporaryHitPoints.insert({
charId: this.charId, charId: this.charId,
name: instance.find("#nameInput").value, name: instance.find("#nameInput").value,
maximum: +instance.find("#quantityInput").value, maximum: max,
deleteOnZero: !!instance.find("#deleteWhenZeroCheckbox").checked, deleteOnZero: !!instance.find("#deleteWhenZeroCheckbox").checked,
}); });
} }

View File

@@ -2,27 +2,27 @@
<table class="carryCapacityTable strengthTable"> <table class="carryCapacityTable strengthTable">
<tr> <tr>
<td>Encumbered</td> <td>Encumbered</td>
<td>&gt;{{evaluate charId "strength * 5"}}lbs</td> <td>&gt;{{evaluate charId "strength * 5 * carryMultiplier"}}lbs</td>
<td class="caption">Variant rule, encumbered characters move 10 feet slower</td> <td class="caption">Variant rule, encumbered characters move 10 feet slower</td>
</tr> </tr>
<tr> <tr>
<td>Heavily encumbered</td> <td>Heavily encumbered</td>
<td>&gt;{{evaluate charId "strength * 10"}}lbs</td> <td>&gt;{{evaluate charId "strength * 10 * carryMultiplier"}}lbs</td>
<td class="caption"> <td class="caption">
Variant rule, heavily encumbered characters move 20 feet slower and have disadvantage on ability checks, attack rolls, and saving thows that use Strength, Dexterity, or Constitution Variant rule, heavily encumbered characters move 20 feet slower and have disadvantage on ability checks, attack rolls, and saving thows that use Strength, Dexterity, or Constitution
</td> </td>
</tr> </tr>
<tr> <tr>
<td>Over Encumbered</td> <td>Over Encumbered</td>
<td>&gt;{{evaluate charId "strength * 15"}}lbs</td> <td>&gt;{{evaluate charId "strength * 15 * carryMultiplier"}}lbs</td>
<td class="caption"> <td class="caption">
Characters that can only just lift, push or drag their current load can only move at 5 feet. Characters that can only just lift, push or drag their current load can only move at 5 feet.
</td> </td>
</tr> </tr>
<tr> <tr>
<td>Push, drag or lift maximum</td> <td>Push, drag or lift maximum</td>
<td>{{evaluate charId "strength * 30"}}lbs</td> <td>{{evaluate charId "strength * 30 * carryMultiplier"}}lbs</td>
<td class="caption"></td> <td class="caption"></td>
</tr> </tr>
</table> </table>
</template> </template>

View File

@@ -1,14 +1,14 @@
<template name="healthCard"> <template name="healthCard">
<paper-shadow class="card container healthCard" <paper-shadow class="card container healthCard"
hero-id="main" {{detailHero "hitPoints" _id}} hero-id="main" {{detailHero "hitPoints" _id}}
layout horizontal wrap> layout horizontal wrap>
<div class="green white-text subhead left" <div class="green white-text subhead left"
hero-id="toolbar" {{detailHero "hitPoints" _id}} hero-id="toolbar" {{detailHero "hitPoints" _id}}
layout vertical center center-justified> layout vertical center center-justified>
<div class="hitPointTitle clickable">Hit Points</div> <div class="hitPointTitle clickable">Hit Points</div>
<paper-icon-button class="white54" <paper-icon-button class="white54"
id="addTempHP" id="addTempHP"
icon="add" icon="add"
disabled={{#unless canEditCharacter _id}}true{{/unless}}> disabled={{#unless canEditCharacter _id}}true{{/unless}}>
</paper-icon-button> </paper-icon-button>
</div> </div>
@@ -33,14 +33,14 @@
role="slider" role="slider"
flex flex
></paper-diff-slider> ></paper-diff-slider>
{{#unless left}}{{#unless deleteOnZero}} {{#unless left}}
<paper-icon-button class="deleteTHP" icon="delete"></paper-icon-button> <paper-icon-button class="deleteTHP" icon="delete"></paper-icon-button>
{{/unless}}{{/unless}} {{/unless}}
</div> </div>
</div> </div>
{{/each}} {{/each}}
<div class="caption"> <div class="caption">
{{#if multipliers.immunities.length}} {{#if multipliers.immunities.length}}
<div> <div>
Immune: {{#each multipliers.immunities}} {{name}} {{/each}} Immune: {{#each multipliers.immunities}} {{name}} {{/each}}
</div> </div>

View File

@@ -1,14 +1,15 @@
<template name="hitDice"> <template name="hitDice">
{{#if characterCalculate "attributeBase" ../_id name}} {{#if characterCalculate "attributeBase" ../_id name}}
<paper-shadow class="card hit-dice" hero-id="main" <div>
{{detailHero name ../_id}} <paper-shadow class="card hit-dice" hero-id="main"
{{detailHero name ../_id}}
layout horizontal> layout horizontal>
<div class="left green display1 white-text" <div class="left green display1 white-text"
hero-id="toolbar" {{detailHero name ../_id}} hero-id="toolbar" {{detailHero name ../_id}}
layout horizontal> layout horizontal>
<div> <div>
<paper-icon-button class="resourceUp" <paper-icon-button class="resourceUp"
icon="arrow-drop-up" icon="arrow-drop-up"
disabled={{cantIncrement}}> disabled={{cantIncrement}}>
</paper-icon-button> </paper-icon-button>
<paper-icon-button class="resourceDown" <paper-icon-button class="resourceDown"
@@ -29,5 +30,6 @@
Hit Dice Hit Dice
</div> </div>
</paper-shadow> </paper-shadow>
</div>
{{/if}} {{/if}}
</template> </template>

View File

@@ -27,6 +27,7 @@
{{>hitDice name="d10HitDice" diceNum="10" char=this}} {{>hitDice name="d10HitDice" diceNum="10" char=this}}
{{>hitDice name="d12HitDice" diceNum="12" char=this}} {{>hitDice name="d12HitDice" diceNum="12" char=this}}
<!--Saving Throws--> <!--Saving Throws-->
<div>
<paper-shadow class="card"> <paper-shadow class="card">
<div class="top white subhead"> <div class="top white subhead">
Saving Throws Saving Throws
@@ -40,7 +41,9 @@
{{> skillRow name="Charisma" skill="charismaSave"}} {{> skillRow name="Charisma" skill="charismaSave"}}
</div> </div>
</paper-shadow> </paper-shadow>
</div>
<!--Skills--> <!--Skills-->
<div>
<paper-shadow class="card"> <paper-shadow class="card">
<div class="top white subhead"> <div class="top white subhead">
Skills Skills
@@ -66,11 +69,13 @@
{{> skillRow name="Survival" skill="survival"}} {{> skillRow name="Survival" skill="survival"}}
</div> </div>
</paper-shadow> </paper-shadow>
</div>
</div> </div>
</div> </div>
</template> </template>
<template name="statCard"> <template name="statCard">
<div>
<paper-shadow class="card statCard clickable" hero-id="main" {{detailHero stat ../_id}} layout horizontal> <paper-shadow class="card statCard clickable" hero-id="main" {{detailHero stat ../_id}} layout horizontal>
<div class="left display1 white-text {{color}}" <div class="left display1 white-text {{color}}"
hero-id="toolbar" {{detailHero stat ../_id}}> hero-id="toolbar" {{detailHero stat ../_id}}>
@@ -84,4 +89,5 @@
{{name}} {{name}}
</div> </div>
</paper-shadow> </paper-shadow>
</div>
</template> </template>

View File

@@ -1,8 +1,13 @@
Meteor.methods({ Meteor.methods({
"getUserId": function(username){ "getUserId": function(username){
if (!username) return; if (!username) return;
regex = new RegExp("^" + username + "$", "i")
var user = Meteor.users.findOne( var user = Meteor.users.findOne(
{$or: [{username: username}, {"emails.address": username}]} {$or: [
{username: username},
{"emails.address": regex},
{"services.google.email": regex},
]}
); );
return user && user._id; return user && user._id;
} }

View File

@@ -101,6 +101,8 @@ trackEncumbranceConditions = function(charId, templateInstance) {
{fields: {"settings": 1}} {fields: {"settings": 1}}
); );
var strength = Characters.calculate.attributeValue(charId, "strength"); var strength = Characters.calculate.attributeValue(charId, "strength");
var carryMultiplier = Characters.calculate
.attributeValue(charId, "carryMultiplier");
var give = function(condition) { var give = function(condition) {
Meteor.call("giveCondition", charId, condition); Meteor.call("giveCondition", charId, condition);
}; };
@@ -108,11 +110,11 @@ trackEncumbranceConditions = function(charId, templateInstance) {
Meteor.call("removeCondition", charId, condition); Meteor.call("removeCondition", charId, condition);
}; };
//variant encumbrance rules //variant encumbrance rules
if (weight > strength * 10 && if (weight > strength * 10 * carryMultiplier &&
character.settings.useVariantEncumbrance) { character.settings.useVariantEncumbrance) {
give("encumbered2"); give("encumbered2");
remove("encumbered"); remove("encumbered");
} else if (weight > strength * 5 && } else if (weight > strength * 5 * carryMultiplier &&
character.settings.useVariantEncumbrance){ character.settings.useVariantEncumbrance){
give("encumbered"); give("encumbered");
remove("encumbered2"); remove("encumbered2");
@@ -121,11 +123,11 @@ trackEncumbranceConditions = function(charId, templateInstance) {
remove("encumbered2"); remove("encumbered2");
} }
//normal encumbrance rules //normal encumbrance rules
if (weight > strength * 30 && if (weight > strength * 30 * carryMultiplier &&
character.settings.useStandardEncumbrance){ character.settings.useStandardEncumbrance){
give("encumbered4"); give("encumbered4");
remove("encumbered3"); remove("encumbered3");
} else if (weight > strength * 15 && } else if (weight > strength * 15 * carryMultiplier &&
character.settings.useStandardEncumbrance) { character.settings.useStandardEncumbrance) {
give("encumbered3"); give("encumbered3");
remove("encumbered4"); remove("encumbered4");

View File

@@ -243,3 +243,28 @@ ChangeLogs.insert({
"Added basic analytics", "Added basic analytics",
], ],
}); });
ChangeLogs.insert({
version: "0.6.8",
changes: [
"Fixed share dialog not finding user names",
"Fixed temporary hitpoint sliders allowing negative values",
"Fixed proficiencies not being disabled with their features",
],
});
ChangeLogs.insert({
version: "0.7.0",
changes: [
"Added carry capacity multiplier as a stat with a default value of 1",
"Improved loading times by vulcanizing polymer imports",
],
});
ChangeLogs.insert({
version: "0.7.1",
changes: [
"Fixed carry capacity effects not displaying correctly when not editing",
"Changed how columns are presented to fix a display issue introduced in Chrome 44",
],
});

View File

@@ -108,3 +108,45 @@ Migrations.add({
); );
}, },
}); });
Migrations.add({
version: 4,
name: "Adds an effect to give characters a base carry capacity",
up: function() {
//update characters
Characters.find({}).forEach(function(char){
Characters.update(char._id, {
$set: {
carryMultiplier: {
adjustment: 0,
reset: "longRest",
}
}
});
var effect = Effects.findOne({
charId: char._id, name: "Natural Carrying Capacity"
});
if (effect) return;
Effects.insert({
charId: char._id,
name: "Natural Carrying Capacity",
stat: "carryMultiplier",
operation: "base",
value: "1",
parent: {
id: char._id,
collection: "Characters",
group: "Inate",
},
});
effect = Effects.findOne({
charId: char._id, name: "Natural Carrying Capacity"
});
if (!effect) throw "Carry capacity effect should be set by now."
});
},
down: function(){
return;
},
});