Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 | 44x 44x 44x 44x 44x 44x 44x 44x 44x 44x 44x 44x 44x 30x 30x 25x 30x 20x 30x 15x 30x 10x 30x 5x 30x 44x 60x 60x 60x 44x 30x 30x 44x 30x 30x 30x 44x 30x | export enum RollDifficultyLabel {
VERY_EASY = "Very Easy",
EASY = "Easy",
MODERATE = "Moderate",
DIFFICULT = "Difficult",
VERY_DIFFICULT = "Very Difficult",
HEROIC = "Heroic",
}
export interface IRollDifficulty {
label: RollDifficultyLabel;
dieCode: string;
meanResult: number;
}
export interface IRollDieCode {
modifier: number;
number: number;
}
const VERY_EASY_THRESHOLD = 5;
const EASY_THRESHOLD = 10;
const MODERATE_THRESHOLD = 15;
const DIFFICULT_THRESHOLD = 20;
const VERY_DIFFICULT_THRESHOLD = 25;
const getDifficultyLabel = (target: number): RollDifficultyLabel => {
let label: RollDifficultyLabel = RollDifficultyLabel.VERY_EASY;
if (target > VERY_EASY_THRESHOLD) {
label = RollDifficultyLabel.EASY;
}
if (target > EASY_THRESHOLD) {
label = RollDifficultyLabel.MODERATE;
}
if (target > MODERATE_THRESHOLD) {
label = RollDifficultyLabel.DIFFICULT;
}
if (target > DIFFICULT_THRESHOLD) {
label = RollDifficultyLabel.VERY_DIFFICULT;
}
if (target > VERY_DIFFICULT_THRESHOLD) {
label = RollDifficultyLabel.HEROIC;
}
return label;
};
const getDieCode = (target: number): IRollDieCode => {
const dieNumber: number = target > 3 ? Math.floor(target / 3.5) : 0;
const dieModifier: number = dieNumber > 0 ? Math.floor(target - dieNumber * 3.5) : 0;
return {
modifier: dieModifier,
number: dieNumber,
};
};
const getDifficultyMeanResult = (target: number): number => {
const dieCode = getDieCode(target);
return target > 3 ? dieCode.number * 3.5 + dieCode.modifier : target;
};
const getDifficultyDieCode = (target: number): string => {
const dieCode = getDieCode(target);
const dieModifierString: string = dieCode.modifier > 0 ? `+${dieCode.modifier}` : "";
return dieCode.number > 0 ? `${dieCode.number}D${dieModifierString}` : target.toString();
};
export const getDifficulty = (target: number): IRollDifficulty => {
return {
label: getDifficultyLabel(target),
dieCode: getDifficultyDieCode(target),
meanResult: getDifficultyMeanResult(target),
};
};
|