diff --git a/The Fantasy Trip/TFT.html b/The Fantasy Trip/TFT.html index 45d01e7036..3fdbdd6afc 100644 --- a/The Fantasy Trip/TFT.html +++ b/The Fantasy Trip/TFT.html @@ -433,7 +433,12 @@ {{character_name}} {{attackflavor}} {{/attackflavor}} {{^attackflavor}} - {{character_name}} attacks with {{pronoun}} {{weaponname}}! + {{#weaponname}} + {{character_name}} attacks with {{pronoun}} {{weaponname}}! + {{/weaponname}} + {{^weaponname}} + {{character_name}} Attacks! + {{/weaponname}} {{/attackflavor}} {{#defending}} @@ -777,18 +782,17 @@ return diceString; } - const finishRollWithDiceString = function(rollId, rolls) { - let diceString = diceArrayToString(rolls); - finishRoll( - rollId, - { - roll1: diceString - } - ); - } - // do the roll check and compute the dice string. const doRollWithDiceString = function(macro) { + const finishRollWithDiceString = function(rollId, rolls) { + let diceString = diceArrayToString(rolls); + finishRoll( + rollId, + { + roll1: diceString + } + ); + } macro += ' {{character_name=@{cname}}}'; startRoll(macro, (results) => { if ('roll1' in results.results) { @@ -802,6 +806,7 @@ // calls back on this selected weapon or fails. // callback takes the id of the selected one, and all the ids. + // calls with all empty and null if nothing found. const onSelectedWeaponOrSpell = function(callback) { // find selected weapon, if any. getSectionIDs("weapons", function(sectionIds) { @@ -833,6 +838,8 @@ return; } } + // Nothing was found, pass in empty for the type. + callback('', null, ''); }); }); }); @@ -904,7 +911,7 @@ // a const value, not an attribute, no @ in front. Optionally as roll. const rollTemplateValue = function(templateName, attrName, asRoll) { - return asRoll ? ` {{${templateName}=[[${attrName}]]}}` : ` {{${templateName}=${attrName}}}`; + return asRoll ? ` {{${templateName}=[[${attrName}]]}}` : ` {{${templateName}=${attrName}}}`; } // Return a template string if attrs contains attrName @@ -1095,11 +1102,7 @@ onSelectedWeaponOrSpell(function(id, selectedIds, type) { // return the string depending on whether we are defending or not. - const diceProperties = function (attrs, toHitName) { - // if no to hit, then no nothing. - if (!(toHitName in attrs)) { - return ''; // nothing, automatic hit. - } + const diceProperties = function (attrs) { // we are defending, so need 4d6, arg. if (attrs.defending == 'on') { return rollTemplateValue('defending', '1') + rollTemplateValue('roll1', '4d6', true); @@ -1111,7 +1114,6 @@ // returns success level. positive is success. // negative is failure. const successLevel = function(results) { - // if no roll, normal success. if (!('roll1' in results)) { return 1; @@ -1165,7 +1167,34 @@ }); } - if (type == 'weapon') { + // Nothing selected, do a generic roll. + if (type == '') { + getAttrs(['defending'], function(v) { + let mstring = `&{template:attack}`; + // append total and separate to hits, if present. + if (toHitCharacter != 'a') { + mstring += diceProperties(v); + let dxAdj = `@{DX}[DEX]`; + let toHitString = ` {{tohit=[[${dxAdj}`; + let oldHitLength = toHitString.length; + mstring += rollTemplateValue('dx', dxAdj, true); + + // and to hit adjustment + if (toHit != 0) { + let toHitAdj = `${toHit}[TO_HIT]` + toHitString += ` + ${toHitAdj}`; + mstring += rollTemplateValue('tohitadj', toHitAdj, true); + } + if (oldHitLength == toHitString.length) { + mstring += rollTemplateValue('simpletohit', '1'); + } + // and finish. + toHitString += ']]}}'; + mstring += toHitString; + } + doAttackRoll(mstring); + }); + } else if (type == 'weapon') { let attackFlavorName = repeatingPropertyName('weapons', id, 'attackflavor'); let successFlavorName = repeatingPropertyName('weapons', id, 'successflavor'); let weaponDamageName = repeatingPropertyName('weapons', id, 'weapondamage'); @@ -1176,11 +1205,11 @@ } getAttrs(attrNames, function(v) { let mstring = `&{template:attack}` - + rollTemplateProperty('weaponname', repeatingPropertyName('weapons', id, 'weaponname')) - + diceProperties(v, weaponToHitName); + + rollTemplateProperty('weaponname', repeatingPropertyName('weapons', id, 'weaponname')); // append total and separate to hits, if present. if (weaponToHitName in v) { + mstring += diceProperties(v); let dxAdj = `@{DX}[DEX]`; let toHitString = ` {{tohit=[[${dxAdj}`; let oldHitLength = toHitString.length; @@ -1231,11 +1260,11 @@ } getAttrs(attrNames, function(v) { let mstring = `&{template:cast-spell}` - + rollTemplateProperty('spellname', repeatingPropertyName('spells', id, 'spellname')) - + diceProperties(v, spellToHitName); + + rollTemplateProperty('spellname', repeatingPropertyName('spells', id, 'spellname')); // append to hit values if present. if (spellToHitName in v) { + mstring += diceProperties(v); let dxAdj = `@{DX}[DEX]`; let toHitString = ` {{tohit=[[${dxAdj}`; let oldHitLength = toHitString.length;