diff --git a/module/actor/actor.js b/module/actor/actor.js index 07ea9f1..b26c57d 100644 --- a/module/actor/actor.js +++ b/module/actor/actor.js @@ -1054,7 +1054,16 @@ export class MothershipActor extends Actor { //init vars let doubles = new Set([0, 11, 22, 33, 44, 55, 66, 77, 88, 99]); let enrichedRollResult = rollResult; - let newTotal = 0; + let rollFormula = enrichedRollResult.formula; + let rollAim = rollFormula.substr(rollFormula.indexOf("}")+1,2); + let useCalm = game.settings.get('mosh','useCalm'); + let die0value = 999; + let die1value = 999; + let die0success = false; + let die1success = false; + let die0crit = false; + let die1crit = false; + let newTotal = 999; let diceFormula = ``; let compareIcon = ``; let outcome = ``; @@ -1104,101 +1113,100 @@ export class MothershipActor extends Actor { }); }); } - //pick a new winner if [-] or [+] + //set roll A and B + if(enrichedRollResult.dice[0]) {die0value = enrichedRollResult.dice[0].results[0].result;} + if(enrichedRollResult.dice[1]) {die1value = enrichedRollResult.dice[1].results[0].result;} + //do we need to pick a winner? if (rollString.includes("[")) { + //set whether each die succeeded + //die 0 + if(comparison === '<' && die0value < rollTarget && die0value < 90) {die0success = true;} + if(comparison === '<=' && die0value <= rollTarget && die0value < 90) {die0success = true;} + if(comparison === '>' && die0value > rollTarget && die0value < 90) {die0success = true;} + if(comparison === '>=' && die0value >= rollTarget && die0value < 90) {die0success = true;} + //die 1 + if(comparison === '<' && die1value < rollTarget && die1value < 90) {die1success = true;} + if(comparison === '<=' && die1value <= rollTarget && die1value < 90) {die1success = true;} + if(comparison === '>' && die1value > rollTarget && die1value < 90) {die1success = true;} + if(comparison === '>=' && die1value >= rollTarget && die1value < 90) {die1success = true;} + //set whether each die are a crit + //die 0 + if(checkCrit && doubles.has(die0value)) {die0crit = true;} + //die 1 + if(checkCrit && doubles.has(die1value)) {die1crit = true;} //if [-] pick a new worst number if (rollString.includes("[-]")) { - //are we checking for crit? - if (checkCrit) { - //is this rolling dis and both are a failure? - if ((enrichedRollResult.dice[0].results[0].result > rollTarget || enrichedRollResult.dice[0].results[0].result >= 90) && (enrichedRollResult.dice[1].results[0].result > rollTarget || enrichedRollResult.dice[1].results[0].result >= 90)) { - //are both crits? choose the highest - if (doubles.has(enrichedRollResult.dice[0].results[0].result) && doubles.has(enrichedRollResult.dice[1].results[0].result)) { - enrichedRollResult._total = Math.max(enrichedRollResult.dice[0].results[0].result,enrichedRollResult.dice[1].results[0].result); - //is the first one a crit? choose that - } else if (doubles.has(enrichedRollResult.dice[0].results[0].result) && !doubles.has(enrichedRollResult.dice[1].results[0].result)) { - enrichedRollResult._total = enrichedRollResult.dice[0].results[0].result; - //is the second one a crit? choose that - } else if (!doubles.has(enrichedRollResult.dice[0].results[0].result) && doubles.has(enrichedRollResult.dice[1].results[0].result)) { - enrichedRollResult._total = enrichedRollResult.dice[1].results[0].result; - //no crits? choose the highest - } else { - enrichedRollResult._total = Math.max(enrichedRollResult.dice[0].results[0].result,enrichedRollResult.dice[1].results[0].result); - } - } - } else { - //compare values based on comparison setting - if (comparison === '<' || comparison === '<=') { - //choose highest - enrichedRollResult._total = Math.max(enrichedRollResult.dice[0].results[0].result,enrichedRollResult.dice[1].results[0].result); - } else { - //choose lowest - enrichedRollResult._total = Math.min(enrichedRollResult.dice[0].results[0].result,enrichedRollResult.dice[1].results[0].result); - } + //if we are trying to keep the highest + if(rollAim === 'kh') { + //set default result value to the highest value + newTotal = Math.max(die0value,die1value); + //if both are a success and only dice 0 is a crit: don't pick the crit + if(die0success && die1success && die0crit && !die1crit) {newTotal = die1value;} + //if both are a success and only dice 1 is a crit: don't pick the crit + if(die0success && die1success && !die0crit && die1crit) {newTotal = die0value;} + //if both are a failure and only dice 0 is a crit: pick the crit + if(!die0success && !die1success && die0crit && !die1crit) {newTotal = die0value;} + //if both are a failure and only dice 1 is a crit: pick the crit + if(!die0success && !die1success && !die0crit && die1crit) {newTotal = die1value;} + //if this is a panic check and both are a failure: pick the worst + if(specialRoll === 'panicCheck' && !useCalm && !die0success && !die1success) {newTotal = Math.max(die0value,die1value);} } - //if [+] pick a new lowest number - } else if (rollString.includes("[+]")) { - //are we checking for crit? - if (checkCrit) { - //is this rolling adv and both are a failure? - if ((enrichedRollResult.dice[0].results[0].result <= rollTarget || enrichedRollResult.dice[0].results[0].result < 90) && (enrichedRollResult.dice[1].results[0].result <= rollTarget || enrichedRollResult.dice[1].results[0].result < 90)) { - //are both crits? choose the lowest - if (doubles.has(enrichedRollResult.dice[0].results[0].result) && doubles.has(enrichedRollResult.dice[1].results[0].result)) { - enrichedRollResult._total = Math.min(enrichedRollResult.dice[0].results[0].result,enrichedRollResult.dice[1].results[0].result); - //is the first one a crit? choose that - } else if (doubles.has(enrichedRollResult.dice[0].results[0].result) && !doubles.has(enrichedRollResult.dice[1].results[0].result)) { - enrichedRollResult._total = enrichedRollResult.dice[0].results[0].result; - //is the second one a crit? choose that - } else if (!doubles.has(enrichedRollResult.dice[0].results[0].result) && doubles.has(enrichedRollResult.dice[1].results[0].result)) { - enrichedRollResult._total = enrichedRollResult.dice[1].results[0].result; - //no crits? choose the lowest - } else { - enrichedRollResult._total = Math.min(enrichedRollResult.dice[0].results[0].result,enrichedRollResult.dice[1].results[0].result); - } - } - } else { - //compare values based on comparison setting - if (comparison === '<' || comparison === '<=') { - //choose lowest - enrichedRollResult._total = Math.min(enrichedRollResult.dice[0].results[0].result,enrichedRollResult.dice[1].results[0].result); - } else { - //choose highest - enrichedRollResult._total = Math.max(enrichedRollResult.dice[0].results[0].result,enrichedRollResult.dice[1].results[0].result); - } + //if we are trying to keep the lowest + if(rollAim === 'kl') { + //set default result value to the lowest value + newTotal = Math.min(die0value,die1value); + //if both are a success and only dice 0 is a crit: don't pick the crit + if(die0success && die1success && die0crit && !die1crit) {newTotal = die1value;} + //if both are a success and only dice 1 is a crit: don't pick the crit + if(die0success && die1success && !die0crit && die1crit) {newTotal = die0value;} + //if both are a failure and only dice 0 is a crit: pick the crit + if(!die0success && !die1success && die0crit && !die1crit) {newTotal = die0value;} + //if both are a failure and only dice 1 is a crit: pick the crit + if(!die0success && !die1success && !die0crit && die1crit) {newTotal = die1value;} + //if this is a panic check and both are a failure: pick the worst + if(specialRoll === 'panicCheck' && !useCalm && !die0success && !die1success) {newTotal = Math.max(die0value,die1value);} } } - //use new value if a regular roll + //if [+] pick a new best number + if (rollString.includes("[+]")) { + //if we are trying to keep the highest + if(rollAim === 'kh') { + //set default result value to the highest value + newTotal = Math.max(die0value,die1value); + //if both are a success and only dice 0 is a crit: pick the crit + if(die0success && die1success && die0crit && !die1crit) {newTotal = die0value;} + //if both are a success and only dice 1 is a crit: pick the crit + if(die0success && die1success && !die0crit && die1crit) {newTotal = die1value;} + //if both are a failure and only dice 0 is a crit: don't pick the crit + if(!die0success && !die1success && die0crit && !die1crit) {newTotal = die1value;} + //if both are a failure and only dice 1 is a crit: don't pick the crit + if(!die0success && !die1success && !die0crit && die1crit) {newTotal = die0value;} + //if this is a panic check and both are a failure: pick the best + if(specialRoll === 'panicCheck' && !useCalm && !die0success && !die1success) {newTotal = Math.min(die0value,die1value);} + } + //if we are trying to keep the lowest + if(rollAim === 'kl') { + //set default result value to the lowest value + newTotal = Math.min(die0value,die1value); + //if both are a success and only dice 0 is a crit: pick the crit + if(die0success && die1success && die0crit && !die1crit) {newTotal = die1value;} + //if both are a success and only dice 1 is a crit: pick the crit + if(die0success && die1success && !die0crit && die1crit) {newTotal = die0value;} + //if both are a failure and only dice 0 is a crit: don't pick the crit + if(!die0success && !die1success && die0crit && !die1crit) {newTotal = die0value;} + //if both are a failure and only dice 1 is a crit: don't pick the crit + if(!die0success && !die1success && !die0crit && die1crit) {newTotal = die1value;} + //if this is a panic check and both are a failure: pick the best + if(specialRoll === 'panicCheck' && !useCalm && !die0success && !die1success) {newTotal = Math.min(die0value,die1value);} + } + } + //we don't need to pick a winner } else { - //set result value - enrichedRollResult._total = enrichedRollResult.dice[0].results[0].result; - } - //make specific change for panic check - if (specialRoll === 'panicCheck' && rollString.includes("[")) { - //compare values based on compararison setting - if (comparison === '<') { - //are both a failure? - if (enrichedRollResult.dice[0].results[0].result >= rollTarget && enrichedRollResult.dice[1].results[0].result >= rollTarget) { - //advantage - if (rollString.includes("[+]")) { - enrichedRollResult._total = Math.max(enrichedRollResult.dice[0].results[0].result,enrichedRollResult.dice[1].results[0].result); - //disadvantage - } else if (rollString.includes("[-]")) { - enrichedRollResult._total = Math.min(enrichedRollResult.dice[0].results[0].result,enrichedRollResult.dice[1].results[0].result); - } - } - } else { - //check against being over the target - if (enrichedRollResult.dice[0].results[0].result <= rollTarget && enrichedRollResult.dice[1].results[0].result <= rollTarget) { - //advantage - if (rollString.includes("[+]")) { - enrichedRollResult._total = Math.min(enrichedRollResult.dice[0].results[0].result,enrichedRollResult.dice[1].results[0].result); - //disadvantage - } else if (rollString.includes("[-]")) { - enrichedRollResult._total = Math.max(enrichedRollResult.dice[0].results[0].result,enrichedRollResult.dice[1].results[0].result); - } - } - } + //set result value to the only die + newTotal = die0value; } + //set final total value + enrichedRollResult._total = newTotal; //enrich roll result object //add data point: detect critical if (checkCrit) { @@ -1317,14 +1325,12 @@ export class MothershipActor extends Actor { //result >= 90 is a failure, no highlight needed critHighlight = ' min'; } else { - //check against being under the target - if (enrichedRollResult.success === true) { - //result >= target is a failure - critHighlight = ' max'; - } else { - //result < target is a success - critHighlight = ' min'; - } + //check against beating the target + if(comparison === '<' && die.result < rollTarget) {critHighlight = ' max';} + else if(comparison === '<=' && die.result <= rollTarget) {critHighlight = ' max';} + else if(comparison === '>' && die.result > rollTarget) {critHighlight = ' max';} + else if(comparison === '>=' && die.result >= rollTarget) {critHighlight = ' max';} + else {critHighlight = ' min';} } } } else { diff --git a/system.json b/system.json index 4fdcc89..c4253e7 100644 --- a/system.json +++ b/system.json @@ -2,7 +2,7 @@ "id": "mosh", "title": "MoSh - Unofficial Mothership", "description": "The unofficial Mothership system for FoundryVTT.", - "version": "0.5.19", + "version": "0.5.20", "esmodules": [ "module/mosh.js" ], @@ -145,8 +145,8 @@ "primaryTokenAttribute": "health", "secondaryTokenAttribute": "other.stress", "url": "https://github.com/Futil/foundry-mothership", - "manifest": "https://raw.githubusercontent.com/Futil/foundry-mothership/0.5.19/system.json", - "download": "https://github.com/Futil/foundry-mothership/releases/download/0.5.19/foundry-mothership.zip", + "manifest": "https://raw.githubusercontent.com/Futil/foundry-mothership/0.5.20/system.json", + "download": "https://github.com/Futil/foundry-mothership/releases/download/0.5.20/foundry-mothership.zip", "license": "LICENSE.txt", "authors": [ {