diff --git a/css/fvtt-lethal-fantasy.css b/css/fvtt-lethal-fantasy.css
index 74cd889..27309f7 100644
--- a/css/fvtt-lethal-fantasy.css
+++ b/css/fvtt-lethal-fantasy.css
@@ -314,7 +314,7 @@ i.lethalfantasy {
.lethalfantasy .character-main .character-saves .character-save {
display: flex;
align-items: center;
- margin-right: 1rem;
+ margin-right: 0.2rem;
}
.lethalfantasy .character-main .character-saves .character-save .rollable:hover,
.lethalfantasy .character-main .character-saves .character-save .rollable:focus {
@@ -322,12 +322,13 @@ i.lethalfantasy {
cursor: pointer;
}
.lethalfantasy .character-main .character-saves .character-save .name {
- flex: 1;
- min-width: 3rem;
- margin-left: 0.5rem;
+ flex: 0;
+ min-width: 5rem;
+ max-width: 5rem;
+ margin-left: 0.7rem;
}
.lethalfantasy .character-main .character-saves .character-save .form-group {
- flex: 1;
+ flex: 0;
padding-left: 5px;
}
.lethalfantasy .character-main .character-saves .character-save .form-group .form-fields {
diff --git a/lang/en.json b/lang/en.json
index 6b610af..e3b1f67 100644
--- a/lang/en.json
+++ b/lang/en.json
@@ -478,6 +478,8 @@
"Platinums": "Platinum"
},
"Label": {
+ "titleChallenge": "Challenge",
+ "titleSave": "Save",
"Movement": "Movement",
"movement": {
"walk": "Walk",
@@ -550,6 +552,7 @@
},
"Roll": {
"save": "Save roll {save}",
+ "modifierBonusMalus": "Modifier bonus/malus",
"changeDice": "Change dice",
"damage": "Jet de dégâts
{item}",
"attack": "Jet d'attaque
{item}",
diff --git a/module/applications/sheets/character-sheet.mjs b/module/applications/sheets/character-sheet.mjs
index 2d4ff87..477249e 100644
--- a/module/applications/sheets/character-sheet.mjs
+++ b/module/applications/sheets/character-sheet.mjs
@@ -172,14 +172,15 @@ export default class LethalFantasyCharacterSheet extends LethalFantasyActorSheet
console.log(event, target)
const rollType = event.target.dataset.rollType
let rollTarget
+ let rollKey = event.target.dataset.rollKey
switch (rollType) {
case "challenge":
- let rollKey = event.target.dataset.rollKey
rollTarget = foundry.utils.duplicate(this.document.system.challenges[rollKey])
rollTarget.rollKey = rollKey
break
- case ROLL_TYPE.RESOURCE:
- rollTarget = elt.dataset.rollTarget
+ case "save":
+ rollTarget = foundry.utils.duplicate(this.document.system.saves[rollKey])
+ rollTarget.rollKey = rollKey
break
case ROLL_TYPE.DAMAGE:
rollTarget = elt.dataset.itemId
diff --git a/module/config/system.mjs b/module/config/system.mjs
index 901d586..19891e3 100644
--- a/module/config/system.mjs
+++ b/module/config/system.mjs
@@ -71,7 +71,9 @@ export const CHOICE_DICE = {
"D4": "D4",
"D6": "D6",
"D8": "D8",
- "D10": "D10"
+ "D10": "D10",
+ "D12": "D12",
+ "D20": "D20"
}
export const CHOICE_MODIFIERS = {
diff --git a/module/documents/roll.mjs b/module/documents/roll.mjs
index 0eb1503..9b93147 100644
--- a/module/documents/roll.mjs
+++ b/module/documents/roll.mjs
@@ -11,23 +11,11 @@ export default class LethalFantasyRoll extends Roll {
get type() {
return this.options.type
}
-
- get isChallenge() {
- return this.type === "challenge"
+
+ get titleFormula() {
+ return this.options.titleFormula
}
-
- get isSave() {
- return this.type === ROLL_TYPE.SAVE
- }
-
- get isResource() {
- return this.type === ROLL_TYPE.RESOURCE
- }
-
- get isDamage() {
- return this.type === ROLL_TYPE.DAMAGE
- }
-
+
get target() {
return this.options.target
}
@@ -167,14 +155,14 @@ export default class LethalFantasyRoll extends Roll {
static async prompt(options = {}) {
let dice = "1D20"
let maxValue = 20
- let formula = "1D20"
+ let baseFormula = "1D20"
+ let modifierFormula = "1d0"
let hasModifier = true
let hasChangeDice = false
- if (options.rollType === "challenge") {
+ if (options.rollType === "challenge" || options.rollType === "save") {
if ( options.rollTarget.rollKey === "dying") {
dice = options.rollTarget.value
maxValue = Number(options.rollTarget.value.match(/\d+/)[0])
- formula = `${dice}`
hasModifier = false
hasChangeDice = true
} else {
@@ -198,8 +186,7 @@ export default class LethalFantasyRoll extends Roll {
let targetName
let dialogContext = {
- isSave: options.rollType === "save",
- isChallenge: options.rollType === "challenge",
+ rollType: options.rollType,
rollTarget: options.rollTarget,
rollModes,
hasModifier,
@@ -209,7 +196,7 @@ export default class LethalFantasyRoll extends Roll {
fieldRollMode,
choiceModifier,
choiceDice,
- formula,
+ baseFormula,
dice,
hasTarget: options.hasTarget,
modifier,
@@ -241,36 +228,40 @@ export default class LethalFantasyRoll extends Roll {
// If the user cancels the dialog, exit
if (rollContext === null) return
- let treshold
let fullModifier = 0
+ let titleFormula = ""
dice = rollContext.changeDice || dice
- if (options.rollType === "challenge") {
+ if (options.rollType === "challenge" || options.rollType === "save") {
if (hasModifier) {
- let bonus = (options.rollTarget.rollKey === "dying") ? 0 : Number(options.rollTarget.value)
+ let bonus = Number(options.rollTarget.value)
fullModifier = rollContext.modifier === "" ? 0 : parseInt(rollContext.modifier, 10) + bonus
- if (fullModifier < 0) {
- let modAbs = Math.abs(fullModifier)
- formula = `${dice} - (d${modAbs + 1} - 1)`
- } else if (fullModifier > 0) {
- formula = `${dice} + (d${fullModifier + 1} - 1)`
+ if (fullModifier === 0) {
+ modifierFormula = "0"
} else {
- formula = `${dice} + 1d0`
- }
+ let modAbs = Math.abs(fullModifier)
+ modifierFormula = `d${modAbs + 1} - 1`
+ }
+ let sign = fullModifier < 0 ? "-" : "+"
+ titleFormula = `${dice}E ${sign} ${modifierFormula}`
} else {
+ modifierFormula = "0"
fullModifier = 0
- formula = `${dice}`
+ baseFormula = `${dice}`
+ titleFormula = `${dice}E`
}
}
- maxValue = Number(dice.match(/\d+/)[0])
+ maxValue = Number(baseFormula.match(/\d+$/)[0]) // Update the max value agains
const rollData = {
type: options.rollType,
+ rollType: options.rollType,
target: options.rollTarget,
actorId: options.actorId,
actorName: options.actorName,
actorImage: options.actorImage,
rollMode: rollContext.visibility,
hasTarget: options.hasTarget,
+ titleFormula,
targetName,
...rollContext,
}
@@ -285,39 +276,45 @@ export default class LethalFantasyRoll extends Roll {
*/
if (Hooks.call("fvtt-lethal-fantasy.preRoll", options, rollData) === false) return
- const roll = new this(formula, options.data, rollData)
- await roll.evaluate()
+ const rollBase = new this(baseFormula, options.data, rollData)
+ await rollBase.evaluate()
+ const rollModifier = new Roll(modifierFormula, options.data, rollData)
+ await rollModifier.evaluate()
let rollTotal = -1
let diceResults = []
let resultType
- if (options.rollType === "challenge") {
- let d20result = roll.dice[0].results[0].result
- diceResults.push({ dice: `${dice}`, value: d20result})
- let d20sum = d20result
- while (d20result === maxValue) {
- let r = await new Roll(`${dice}`).evaluate()
- d20result = r.dice[0].results[0].result
- diceResults.push( {dice: `${dice}-1`, value: d20result-1})
- d20sum += (d20result - 1)
+ if (options.rollType === "challenge" || options.rollType === "save") {
+ let diceResult = rollBase.dice[0].results[0].result
+ diceResults.push({ dice: `${dice}`, value: diceResult})
+ let diceSum = diceResult
+ while (diceResult === maxValue) {
+ let r = await new Roll(baseFormula).evaluate()
+ diceResult = r.dice[0].results[0].result
+ diceResults.push( {dice: `${dice}-1`, value: diceResult-1})
+ diceSum += (diceResult - 1)
}
- if (hasModifier) {
- let minus1 = (fullModifier === 0) ? 0 : 1
- diceResults.push({ dice: `${roll.dice[1].formula}-${minus1}`, value: roll.dice[1].results[0].result - minus1 })
- rollTotal = Math.max(d20sum + roll.dice[1].results[0].result - minus1, 0)
+ if (fullModifier !== 0) {
+ diceResults.push({ dice: `${rollModifier.formula}`, value: rollModifier.total })
+ if ( fullModifier < 0) {
+ rollTotal = Math.max(diceSum - rollModifier.total, 0)
+ } else {
+ rollTotal = diceSum + rollModifier.total
+ }
} else {
- rollTotal = d20sum
+ rollTotal = diceSum
}
} else if (options.rollType === ROLL_TYPE.RESOURCE) {
//resultType = roll.total === 1 || roll.total === 2 ? "failure" : "success"
}
- roll.options.resultType = resultType
- roll.options.introText = roll._createIntroText()
- roll.options.introTextTooltip = roll._createIntroTextTooltip()
- roll.options.rollTotal = rollTotal
- roll.options.diceResults = diceResults
- roll.options.rollTarget = options.rollTarget
+ rollBase.options.resultType = resultType
+ rollBase.options.introText = rollBase._createIntroText()
+ rollBase.options.introTextTooltip = rollBase._createIntroTextTooltip()
+ rollBase.options.rollTotal = rollTotal
+ rollBase.options.diceResults = diceResults
+ rollBase.options.rollTarget = options.rollTarget
+ rollBase.options.titleFormula = titleFormula
/**
* A hook event that fires after the roll has been made.
@@ -328,9 +325,9 @@ export default class LethalFantasyRoll extends Roll {
@param {LethalFantasyRoll} roll The resulting roll.
* @returns {boolean} Explicitly return `false` to prevent roll to be made.
*/
- if (Hooks.call("fvtt-lethal-fantasy.Roll", options, rollData, roll) === false) return
+ if (Hooks.call("fvtt-lethal-fantasy.Roll", options, rollData, rollBase) === false) return
- return roll
+ return rollBase
}
/**
@@ -343,9 +340,9 @@ export default class LethalFantasyRoll extends Roll {
static createTitle(type, target) {
switch (type) {
case "challenge":
- return `${game.i18n.localize("LETHALFANTASY.Dialog.titleSave")} : ${game.i18n.localize(`LETHALFANTASY.Manager.${target}`)}`
- case ROLL_TYPE.RESOURCE:
- return `${game.i18n.localize("LETHALFANTASY.Dialog.titleResource")} : ${game.i18n.localize(`LETHALFANTASY.Manager.${target}`)}`
+ return `${game.i18n.localize("LETHALFANTASY.Label.titleChallenge")}`
+ case "save":
+ return `${game.i18n.localize("LETHALFANTASY.Label.titleSave")}`
case ROLL_TYPE.DAMAGE:
return `${game.i18n.localize("LETHALFANTASY.Dialog.titleDamage")} : ${target}`
case ROLL_TYPE.ATTACK:
@@ -395,11 +392,10 @@ export default class LethalFantasyRoll extends Roll {
diceTotal: this.dice.reduce((t, d) => t + d.total, 0),
isGM: game.user.isGM,
formula: this.formula,
+ titleFormula: this.titleFormula,
rollType: this.type,
rollTarget: this.rollTarget,
total: this.rollTotal,
- isSave: this.isSave,
- isChallenge: this.isChallenge,
isFailure: this.isFailure,
actorId: this.actorId,
diceResults: this.diceResults,
diff --git a/packs/lf-equipment/000044.log b/packs/lf-equipment/000048.log
similarity index 100%
rename from packs/lf-equipment/000044.log
rename to packs/lf-equipment/000048.log
diff --git a/packs/lf-equipment/CURRENT b/packs/lf-equipment/CURRENT
index 778a552..a29e551 100644
--- a/packs/lf-equipment/CURRENT
+++ b/packs/lf-equipment/CURRENT
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:06bbfaf793b9061ba299146242120e0397a3c1d765c559bb6b80d0196883b125
+oid sha256:1313dcb8ba5862c64b739efae65705d79db1f03ded2ae3ae00f0e239a80aaf78
size 16
diff --git a/packs/lf-equipment/LOG b/packs/lf-equipment/LOG
index 5565487..05a2793 100644
--- a/packs/lf-equipment/LOG
+++ b/packs/lf-equipment/LOG
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:fa0828a5d7701ad545a65a3dc54780fd44da5972a97502b2806074c024935a49
+oid sha256:d4db6119b7a0b9cdf85f5b4b7f1f88117a2c2d97d6ec1c2b81991eec9043e22e
size 736
diff --git a/packs/lf-equipment/LOG.old b/packs/lf-equipment/LOG.old
index 5d579fc..5565487 100644
--- a/packs/lf-equipment/LOG.old
+++ b/packs/lf-equipment/LOG.old
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:60a826a55abd07ca7de8137274c411e1cc754cb6f33b79cfb59334399e81aa41
+oid sha256:fa0828a5d7701ad545a65a3dc54780fd44da5972a97502b2806074c024935a49
size 736
diff --git a/packs/lf-equipment/MANIFEST-000042 b/packs/lf-equipment/MANIFEST-000042
deleted file mode 100644
index 04ba201..0000000
--- a/packs/lf-equipment/MANIFEST-000042
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:3311d1edd520a521574915c8aea233514899c9d7cd4e83fe6609c3500e85ca45
-size 137
diff --git a/packs/lf-equipment/MANIFEST-000046 b/packs/lf-equipment/MANIFEST-000046
new file mode 100644
index 0000000..bc479c4
--- /dev/null
+++ b/packs/lf-equipment/MANIFEST-000046
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1f51ad7f80e2b70c9a5cc9336e76a28bc8191278eb5fb98eb5e4af2e66bad400
+size 137
diff --git a/packs/lf-skills/000044.log b/packs/lf-gifts/000044.log
similarity index 100%
rename from packs/lf-skills/000044.log
rename to packs/lf-gifts/000044.log
diff --git a/packs/lf-gifts/CURRENT b/packs/lf-gifts/CURRENT
index 941c5e0..778a552 100644
--- a/packs/lf-gifts/CURRENT
+++ b/packs/lf-gifts/CURRENT
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:96bdef013fb79e7d36f54609242be99a151ee07d1506ff9e20f6ee3f8a5176c6
+oid sha256:06bbfaf793b9061ba299146242120e0397a3c1d765c559bb6b80d0196883b125
size 16
diff --git a/packs/lf-gifts/LOG b/packs/lf-gifts/LOG
index d53e72a..1fcd518 100644
--- a/packs/lf-gifts/LOG
+++ b/packs/lf-gifts/LOG
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:011b2a63977f4b1b8b1dce5db3f65b5e2aa2749949ee10128f79d222bd81b0a4
+oid sha256:356e33e768ab5196bb55491cb9d21c48b30e5010b3440483c175d2f9a6df514b
size 732
diff --git a/packs/lf-gifts/LOG.old b/packs/lf-gifts/LOG.old
index f4ae839..d53e72a 100644
--- a/packs/lf-gifts/LOG.old
+++ b/packs/lf-gifts/LOG.old
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:cae71f6aef27403ed7a970165a2f48863e0b9149ac3a479800d3c9e51f370ce4
+oid sha256:011b2a63977f4b1b8b1dce5db3f65b5e2aa2749949ee10128f79d222bd81b0a4
size 732
diff --git a/packs/lf-gifts/MANIFEST-000038 b/packs/lf-gifts/MANIFEST-000038
deleted file mode 100644
index 7655325..0000000
--- a/packs/lf-gifts/MANIFEST-000038
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:02bab712d8de87492fd5814309a953c0550b6a6e353009aaf2ab692671133672
-size 137
diff --git a/packs/lf-gifts/MANIFEST-000042 b/packs/lf-gifts/MANIFEST-000042
new file mode 100644
index 0000000..ddf5ef3
--- /dev/null
+++ b/packs/lf-gifts/MANIFEST-000042
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:89c40c69bfed730eee5714e9080af371b3f170618631eb400d427ad3f9d823dc
+size 137
diff --git a/packs/lf-gifts/000040.log b/packs/lf-skills/000048.log
similarity index 100%
rename from packs/lf-gifts/000040.log
rename to packs/lf-skills/000048.log
diff --git a/packs/lf-skills/CURRENT b/packs/lf-skills/CURRENT
index 778a552..a29e551 100644
--- a/packs/lf-skills/CURRENT
+++ b/packs/lf-skills/CURRENT
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:06bbfaf793b9061ba299146242120e0397a3c1d765c559bb6b80d0196883b125
+oid sha256:1313dcb8ba5862c64b739efae65705d79db1f03ded2ae3ae00f0e239a80aaf78
size 16
diff --git a/packs/lf-skills/LOG b/packs/lf-skills/LOG
index cc589bd..5669d6b 100644
--- a/packs/lf-skills/LOG
+++ b/packs/lf-skills/LOG
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:0298952469ac706dbc08b8589501e7661b171cd026d66a86d4cdc4702aeb6c5b
+oid sha256:581f77d6aea22a367e11b7f9927a55b539f28b89b123ce0a6335d9d6dc139808
size 736
diff --git a/packs/lf-skills/LOG.old b/packs/lf-skills/LOG.old
index a8ac464..cc589bd 100644
--- a/packs/lf-skills/LOG.old
+++ b/packs/lf-skills/LOG.old
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:e82970c23dc57377df436447a2a976cd598125b7fc66d0f5a56421694fd2d922
+oid sha256:0298952469ac706dbc08b8589501e7661b171cd026d66a86d4cdc4702aeb6c5b
size 736
diff --git a/packs/lf-skills/MANIFEST-000042 b/packs/lf-skills/MANIFEST-000042
deleted file mode 100644
index 75e21c3..0000000
--- a/packs/lf-skills/MANIFEST-000042
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:6cd0549d00d634922a8beae9a1f84f5d15a441a82a202aeecddce4fb7a6c9582
-size 137
diff --git a/packs/lf-skills/MANIFEST-000046 b/packs/lf-skills/MANIFEST-000046
new file mode 100644
index 0000000..2ee4e24
--- /dev/null
+++ b/packs/lf-skills/MANIFEST-000046
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:8352ea37edd52f7eba503d33aeeee18847a3b60c40a77caf78882c01f3b8a045
+size 137
diff --git a/packs/lf-vulnerabilities/000040.log b/packs/lf-vulnerabilities/000044.log
similarity index 100%
rename from packs/lf-vulnerabilities/000040.log
rename to packs/lf-vulnerabilities/000044.log
diff --git a/packs/lf-vulnerabilities/CURRENT b/packs/lf-vulnerabilities/CURRENT
index 941c5e0..778a552 100644
--- a/packs/lf-vulnerabilities/CURRENT
+++ b/packs/lf-vulnerabilities/CURRENT
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:96bdef013fb79e7d36f54609242be99a151ee07d1506ff9e20f6ee3f8a5176c6
+oid sha256:06bbfaf793b9061ba299146242120e0397a3c1d765c559bb6b80d0196883b125
size 16
diff --git a/packs/lf-vulnerabilities/LOG b/packs/lf-vulnerabilities/LOG
index 23ded45..54753db 100644
--- a/packs/lf-vulnerabilities/LOG
+++ b/packs/lf-vulnerabilities/LOG
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:d81c5f17d664c10dab92b104b796136a8ace8ef491946911e9da6ecb3d8ebd94
+oid sha256:c4609925e37ad50b11906e5fc648ef494a9526b5f1f4c12dfffc6620ab051cf9
size 732
diff --git a/packs/lf-vulnerabilities/LOG.old b/packs/lf-vulnerabilities/LOG.old
index c791163..23ded45 100644
--- a/packs/lf-vulnerabilities/LOG.old
+++ b/packs/lf-vulnerabilities/LOG.old
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:99e879b14063da0bbe63d06abfb69313d186aa15f291484d9749902dc50c0fc7
+oid sha256:d81c5f17d664c10dab92b104b796136a8ace8ef491946911e9da6ecb3d8ebd94
size 732
diff --git a/packs/lf-vulnerabilities/MANIFEST-000038 b/packs/lf-vulnerabilities/MANIFEST-000038
deleted file mode 100644
index 93e6f44..0000000
--- a/packs/lf-vulnerabilities/MANIFEST-000038
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:b440f1fb903c76ec5945df09e691fe86b8608caa85d21d3041475e96d028c507
-size 137
diff --git a/packs/lf-vulnerabilities/MANIFEST-000042 b/packs/lf-vulnerabilities/MANIFEST-000042
new file mode 100644
index 0000000..c4d3180
--- /dev/null
+++ b/packs/lf-vulnerabilities/MANIFEST-000042
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:86090422b23cb4e91c0b8d4554da4e842e659489ef1b3e1d78416003c079d3ed
+size 137
diff --git a/styles/character.less b/styles/character.less
index 8be43bf..bbd5e16 100644
--- a/styles/character.less
+++ b/styles/character.less
@@ -201,19 +201,20 @@
.character-save {
display: flex;
align-items: center;
- margin-right: 1rem;
+ margin-right: 0.2rem;
.rollable:hover,
.rollable:focus {
text-shadow: 0 0 8px var(--color-shadow-primary);
cursor: pointer;
}
.name {
- flex: 1;
- min-width: 3rem;
- margin-left: 0.5rem;
+ flex: 0;
+ min-width: 5rem;
+ max-width: 5rem;
+ margin-left: 0.7rem;
}
.form-group {
- flex: 1;
+ flex: 0;
padding-left: 5px;
.form-fields {
flex: none;
diff --git a/templates/character-main.hbs b/templates/character-main.hbs
index f35db44..963d47d 100644
--- a/templates/character-main.hbs
+++ b/templates/character-main.hbs
@@ -19,21 +19,27 @@