diff --git a/The Fantasy Trip/TFT.html b/The Fantasy Trip/TFT.html
index 31c2c9489a..fba05b8306 100644
--- a/The Fantasy Trip/TFT.html
+++ b/The Fantasy Trip/TFT.html
@@ -33,8 +33,8 @@
-
- ST
+
+ ST
+
@@ -43,15 +43,14 @@
- 3
- 4
+
- DX
+ DX
+
@@ -60,8 +59,7 @@
- 3
- 4
+
@@ -77,26 +75,31 @@
- 3
- 4
+
-
- Saves
-
- 2
- 3
- 4
- 5
- 6
- 7
- 8
+
+ 2d
+
+ 3d
+
+ 4d
+
+ 5d
+
+ 6d
+
+ 7d
+
+ 8d
+
+
+
-
@@ -152,8 +155,7 @@
- 3
- 4
+
@@ -926,7 +928,7 @@
const diceArrayToString = function(rolls) {
let diceString = '';
if (rolls) {
- for (i = 0; i < rolls.length; ++i) {
+ for (let i = 0; i < rolls.length; ++i) {
let roll = rolls[i];
if (roll == 1) diceString += 'a';
else if (roll == 2) diceString += 'b';
@@ -1030,17 +1032,9 @@
let selected = id ? (id + '_' + attrName).toLowerCase() : attrName;
- console.log('toggling', selected)
-
getAttrs([selected], function(values) {
let oldValue = values[selected];
-
- console.log('old value is', oldValue)
-
let newValue = (oldValue == 'on' ? 0 : 'on');
-
- console.log('new value is', oldValue)
-
let valueMap = {};
// toggle this one, turn off the rest.
valueMap[selected] = newValue;
@@ -1218,52 +1212,42 @@
});
}
- on('clicked:st_check3', (info) => {
- doSaveRoll("&{template:stat-check} {{stat_a=a}} {{stat_name=strength}} {{stat=[[@{st}[STR]]]}} {{roll1=[[3d6]]}}");
- });
- on('clicked:st_check4', (info) => {
- doSaveRoll("&{template:stat-check} {{stat_a=a}} {{stat_name=strength}} {{stat=[[@{st}[STR]]]}} {{roll1=[[4d6]]}}");
- });
- on('clicked:dx_check3', (info) => {
- doSaveRoll("&{template:stat-check} {{stat_a=a}} {{stat_name=dexterity}} {{stat=[[@{dx}[DEX]]]}} {{roll1=[[3d6]]}}");
- });
- on('clicked:dx_check4', (info) => {
- doSaveRoll("&{template:stat-check} {{stat_a=a}} {{stat_name=dexterity}} {{stat=[[@{dx}[DEX]]]}} {{roll1=[[4d6]]}}");
- });
- on('clicked:iq_check3', (info) => {
- doSaveRoll("&{template:stat-check} {{stat_a=an}} {{stat_name=IQ}} {{stat=[[@{iq}[IQ]]]}} {{roll1=[[3d6]]}}");
- });
- on('clicked:iq_check4', (info) => {
- doSaveRoll("&{template:stat-check} {{stat_a=an}} {{stat_name=IQ}} {{stat=[[@{iq}[IQ]]]}} {{roll1=[[4d6]]}}");
- });
- on('clicked:health_check3', (info) => {
- doSaveRoll("&{template:stat-check} {{stat_a=a}} {{stat_name=health}} {{stat=[[@{health}[HEALTH]]]}} {{roll1=[[3d6]]}}");
- });
- on('clicked:health_check4', (info) => {
- doSaveRoll("&{template:stat-check} {{stat_a=a}} {{stat_name=health}} {{stat=[[@{health}[HEALTH]]]}} {{roll1=[[4d6]]}}");
- });
- on('clicked:save2', (info) => {
- doSaveRoll("&{template:stat-check} {{stat_a=a}} {{stat_name=}} {{stat=...}} {{roll1=[[2d6]]}}");
- });
- on('clicked:save3', (info) => {
- doSaveRoll("&{template:stat-check} {{stat_a=a}} {{stat_name=}} {{stat=...}} {{roll1=[[3d6]]}}");
- });
- on('clicked:save4', (info) => {
- doSaveRoll("&{template:stat-check} {{stat_a=a}} {{stat_name=}} {{stat=...}} {{roll1=[[4d6]]}}");
- });
- on('clicked:save5', (info) => {
- doSaveRoll("&{template:stat-check} {{stat_a=a}} {{stat_name=}} {{stat=...}} {{roll1=[[5d6]]}}");
- });
- on('clicked:save6', (info) => {
- doSaveRoll("&{template:stat-check} {{stat_a=a}} {{stat_name=}} {{stat=...}} {{roll1=[[6d6]]}}");
- });
- on('clicked:save7', (info) => {
- doSaveRoll("&{template:stat-check} {{stat_a=a}} {{stat_name=}} {{stat=...}} {{roll1=[[7d6]]}}");
- });
- on('clicked:save8', (info) => {
- doSaveRoll("&{template:stat-check} {{stat_a=a}} {{stat_name=}} {{stat=...}} {{roll1=[[8d6]]}}");
- });
+ // attr is actual attribute st
+ // name is the friendly name like strength
+ // label is to show in the template, so like STR
+ // a is whether to save a roll or an roll.
+ const doStatRoll = function(attr, name, label, an = 'a') {
+ getAttrs(saveDiceAttrs(), function(values) {
+ let dice = getSaveDiceValue(values)
+ s = "&{template:stat-check} {{stat_a=" + an + "}} {{stat_name=" + name + "}} {{stat=[[@{" + attr + "}[" + label + "]]]}} {{roll1=[[" + dice + "d6]]}}";
+ doSaveRoll(s);
+ // since we've baked dice into the string we are save.
+ // We do this because that's the most common value.
+ setSaveDice(3);
+ });
+ }
+ on('clicked:st_check', (info) => {
+ doStatRoll('st', 'strength', 'STR');
+ });
+ on('clicked:dx_check', (info) => {
+ doStatRoll('dx', 'dexterity', 'DEX');
+ });
+ on('clicked:iq_check', (info) => {
+ doStatRoll('iq', 'IQ', 'IQ', 'an');
+ });
+ on('clicked:blank_check', (info) => {
+ getAttrs(saveDiceAttrs(), function(values) {
+ let dice = getSaveDiceValue(values)
+ s = "&{template:stat-check} {{stat_a=a}} {{stat_name=}} {{stat=...}} {{roll1=[[" + dice + "d6]]}}";
+ doSaveRoll(s);
+ setSaveDice(3);
+ });
+ });
+ on('clicked:health_check', (info) => {
+ doStatRoll('health', 'health', 'HEALTH');
+// doSaveRoll("&{template:stat-check} {{stat_a=a}} {{stat_name=health}} {{stat=[[@{health}[HEALTH]]]}} {{roll1=[[3d6]]}}");
+ });
on('clicked:initiative', (info) => {
let initiativeAdjName = 'initiative_adj';
@@ -1582,7 +1566,7 @@
});
});
- // Toggleable attack buttons.
+ // Radio/Toggle attack buttons.
on(' clicked:attack5d', (info) => {
toggleCheckbox('', 'defending2');
clearCheckbox('defending');
@@ -1592,6 +1576,55 @@
clearCheckbox('defending2');
});
+ // Returns the save dice attribute name
+ // give the dice.
+ const saveDiceAttr = function(dice) {
+ return 'save' + dice + 'd';
+ }
+
+ // returns an array of save dice attrs.
+ const saveDiceAttrs = function() {
+ let attrs = []
+ for (let i = 2; i < 9; ++i) {
+ attrs.push(saveDiceAttr(i));
+ }
+ return attrs;
+ }
+
+ // Given a value map, returns the number of dice.
+ const getSaveDiceValue = function(values) {
+ for (let i = 2; i < 9; ++i) {
+ if (values[saveDiceAttr(i)] != 0) {
+ return i;
+ }
+ }
+ // default.
+ return 3;
+ }
+
+ // Tell it how many dice to use, it sets the radio
+ // button.
+ const setSaveDice = function(dice) {
+ // Seems like you have to set attrs from a get attrs.
+ getAttrs(saveDiceAttrs(), function(values) {
+ for (let i = 2; i < 9; ++i) {
+ values[saveDiceAttr(i)] = (i == dice) ? 'on' : 0;
+ }
+ setAttrs(values);
+ });
+ }
+
+ // Radio save buttons.
+ on('clicked:save2d'
+ + ' clicked:save3d'
+ + ' clicked:save4d'
+ + ' clicked:save5d'
+ + ' clicked:save6d'
+ + ' clicked:save7d'
+ +' clicked:save8d', (info) => {
+
+ setSaveDice(parseInt(info.triggerName.substring(12)) || 3);
+ });
// Weapons Select/Expand/Describe/NC
on('clicked:repeating_weapons', (info) => {