New weapon management, including shotgun
This commit is contained in:
@@ -20,7 +20,7 @@
|
|||||||
"entries": {
|
"entries": {
|
||||||
"Pilot (Type)": {
|
"Pilot (Type)": {
|
||||||
"name": "Pilotage (Type)",
|
"name": "Pilotage (Type)",
|
||||||
"description": "<pPiloter, naviguer et diriger des véhicules nautiques ou aériens. Utilisez cette compétence pour assurer la sécurité d'un navire en cas de danger, par exemple lors d'une tempête ou d'une poursuite dangereuse. Chaque type de véhicule requiert une compétence distincte : Avion, Drone, Hélicoptère, Dirigeable, Petite embarcation, Navire, etc.</p>"
|
"description": "<p>Piloter, naviguer et diriger des véhicules nautiques ou aériens. Utilisez cette compétence pour assurer la sécurité d'un navire en cas de danger, par exemple lors d'une tempête ou d'une poursuite dangereuse. Chaque type de véhicule requiert une compétence distincte : Avion, Drone, Hélicoptère, Dirigeable, Petite embarcation, Navire, etc.</p>"
|
||||||
},
|
},
|
||||||
"Anthropology": {
|
"Anthropology": {
|
||||||
"name": "Anthropologie",
|
"name": "Anthropologie",
|
||||||
|
@@ -183,6 +183,25 @@ i.fvtt-cthulhu-eternal {
|
|||||||
color: var(--color-critical-failure);
|
color: var(--color-critical-failure);
|
||||||
font-family: var(--font-title);
|
font-family: var(--font-title);
|
||||||
}
|
}
|
||||||
|
.chat-san-request ul .san-type-buttons,
|
||||||
|
.chat-lethal-damage ul .san-type-buttons {
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
margin: 10px 0;
|
||||||
|
}
|
||||||
|
.chat-san-request ul .san-type-buttons button,
|
||||||
|
.chat-lethal-damage ul .san-type-buttons button {
|
||||||
|
margin: 0 2px;
|
||||||
|
font-family: var(--font-primary);
|
||||||
|
font-size: calc(var(--font-size-standard) * 0.9);
|
||||||
|
border: none;
|
||||||
|
padding: 2px 2px;
|
||||||
|
cursor: pointer;
|
||||||
|
transition: background-color 0.3s;
|
||||||
|
min-width: 6rem;
|
||||||
|
max-width: 6rem;
|
||||||
|
}
|
||||||
.chat-san-request ul .san-loose-buttons,
|
.chat-san-request ul .san-loose-buttons,
|
||||||
.chat-lethal-damage ul .san-loose-buttons {
|
.chat-lethal-damage ul .san-loose-buttons {
|
||||||
display: flex;
|
display: flex;
|
||||||
@@ -804,7 +823,7 @@ i.fvtt-cthulhu-eternal {
|
|||||||
}
|
}
|
||||||
.fvtt-cthulhu-eternal .tab.protagonist-equipment .main-div .weapons {
|
.fvtt-cthulhu-eternal .tab.protagonist-equipment .main-div .weapons {
|
||||||
display: grid;
|
display: grid;
|
||||||
grid-template-columns: repeat(2, 1fr);
|
grid-template-columns: repeat(1, 1fr);
|
||||||
gap: 4px;
|
gap: 4px;
|
||||||
}
|
}
|
||||||
.fvtt-cthulhu-eternal .tab.protagonist-equipment .main-div .weapons .weapon {
|
.fvtt-cthulhu-eternal .tab.protagonist-equipment .main-div .weapons .weapon {
|
||||||
@@ -824,10 +843,24 @@ i.fvtt-cthulhu-eternal {
|
|||||||
min-width: 1.8rem;
|
min-width: 1.8rem;
|
||||||
max-width: 1.8rem;
|
max-width: 1.8rem;
|
||||||
}
|
}
|
||||||
.fvtt-cthulhu-eternal .tab.protagonist-equipment .main-div .weapons .weapon .damage {
|
.fvtt-cthulhu-eternal .tab.protagonist-equipment .main-div .weapons .weapon .range {
|
||||||
min-width: 6rem;
|
min-width: 6rem;
|
||||||
max-width: 6rem;
|
max-width: 6rem;
|
||||||
}
|
}
|
||||||
|
.fvtt-cthulhu-eternal .tab.protagonist-equipment .main-div .weapons .weapon .ammo {
|
||||||
|
min-width: 4rem;
|
||||||
|
max-width: 4rem;
|
||||||
|
}
|
||||||
|
.fvtt-cthulhu-eternal .tab.protagonist-equipment .main-div .weapons .weapon .lethality {
|
||||||
|
display: flex;
|
||||||
|
min-width: 3.2rem;
|
||||||
|
max-width: 3.2rem;
|
||||||
|
}
|
||||||
|
.fvtt-cthulhu-eternal .tab.protagonist-equipment .main-div .weapons .weapon .damage {
|
||||||
|
display: flex;
|
||||||
|
min-width: 12rem;
|
||||||
|
max-width: 12rem;
|
||||||
|
}
|
||||||
.fvtt-cthulhu-eternal .tab.protagonist-equipment .main-div .weapons .weapon .name {
|
.fvtt-cthulhu-eternal .tab.protagonist-equipment .main-div .weapons .weapon .name {
|
||||||
min-width: 10rem;
|
min-width: 10rem;
|
||||||
max-width: 10rem;
|
max-width: 10rem;
|
||||||
@@ -2153,6 +2186,24 @@ i.fvtt-cthulhu-eternal {
|
|||||||
margin-top: 8px;
|
margin-top: 8px;
|
||||||
background-color: var(--color-light-1);
|
background-color: var(--color-light-1);
|
||||||
}
|
}
|
||||||
|
.fvtt-cthulhu-eternal .weapon-content fieldset input {
|
||||||
|
max-width: 5rem;
|
||||||
|
min-width: 5rem;
|
||||||
|
}
|
||||||
|
.fvtt-cthulhu-eternal .weapon-content fieldset select {
|
||||||
|
max-width: 14rem;
|
||||||
|
min-width: 14rem;
|
||||||
|
}
|
||||||
|
.fvtt-cthulhu-eternal .weapon-content fieldset input[type="checkbox"] {
|
||||||
|
max-width: 1.5rem;
|
||||||
|
min-width: 1.5rem;
|
||||||
|
}
|
||||||
|
.fvtt-cthulhu-eternal .weapon-content fieldset .flexrow > *:not(:first-child) {
|
||||||
|
margin-left: 1rem;
|
||||||
|
}
|
||||||
|
.fvtt-cthulhu-eternal .weapon-content fieldset .damage-distance {
|
||||||
|
margin-left: 2rem;
|
||||||
|
}
|
||||||
.fvtt-cthulhu-eternal .weapon-content label {
|
.fvtt-cthulhu-eternal .weapon-content label {
|
||||||
flex: 10%;
|
flex: 10%;
|
||||||
}
|
}
|
||||||
|
@@ -151,7 +151,8 @@ Hooks.on("renderChatMessageHTML", (message, html, data) => {
|
|||||||
CthulhuEternalUtils.nudgeRoll(message)
|
CthulhuEternalUtils.nudgeRoll(message)
|
||||||
})
|
})
|
||||||
$(html).find(".damage-roll").click((event) => {
|
$(html).find(".damage-roll").click((event) => {
|
||||||
CthulhuEternalUtils.damageRoll(message)
|
let formula = $(event.currentTarget).data("roll-value")
|
||||||
|
CthulhuEternalUtils.damageRoll(message, formula)
|
||||||
})
|
})
|
||||||
$(html).find(".healing-roll").click((event) => {
|
$(html).find(".healing-roll").click((event) => {
|
||||||
CthulhuEternalUtils.healingRoll(message)
|
CthulhuEternalUtils.healingRoll(message)
|
||||||
|
61
lang/en.json
61
lang/en.json
@@ -212,6 +212,7 @@
|
|||||||
"UnarmedCombat": "Unarmed Combat",
|
"UnarmedCombat": "Unarmed Combat",
|
||||||
"RangedWeapons": "Ranged Weapons",
|
"RangedWeapons": "Ranged Weapons",
|
||||||
"FirearmsBeams": "Firearms / Beam Weapons",
|
"FirearmsBeams": "Firearms / Beam Weapons",
|
||||||
|
"MilitaryTrainingExplosive": "Military Training (Explosives)",
|
||||||
"FIELDS": {
|
"FIELDS": {
|
||||||
"isHealing": {
|
"isHealing": {
|
||||||
"label": "Healing skill"
|
"label": "Healing skill"
|
||||||
@@ -268,7 +269,8 @@
|
|||||||
"rangedprimitive": "Ranged Primitive",
|
"rangedprimitive": "Ranged Primitive",
|
||||||
"rangedthrown": "Ranged Thrown",
|
"rangedthrown": "Ranged Thrown",
|
||||||
"rangedfirearm": "Ranged Firearm",
|
"rangedfirearm": "Ranged Firearm",
|
||||||
"unarmed": "Unarmed"
|
"unarmed": "Unarmed",
|
||||||
|
"rangedexplosive": "Explosive"
|
||||||
},
|
},
|
||||||
"WeaponSubtype": {
|
"WeaponSubtype": {
|
||||||
"basicfirearm": "Basic Firearm",
|
"basicfirearm": "Basic Firearm",
|
||||||
@@ -283,7 +285,41 @@
|
|||||||
"shortspray": "Short Spray",
|
"shortspray": "Short Spray",
|
||||||
"longspray": "Long Spray"
|
"longspray": "Long Spray"
|
||||||
},
|
},
|
||||||
|
"Target": {
|
||||||
|
"Normal": "Normal",
|
||||||
|
"Stationary": "Stationary",
|
||||||
|
"MovingRange": "Moving or on the ground",
|
||||||
|
"MovingFast": "Moving Fast (ie running)",
|
||||||
|
"MovingVeryFast": "Moving Very Fast",
|
||||||
|
"HalfCovered": "Half Covered",
|
||||||
|
"Covered": "Full Covered"
|
||||||
|
},
|
||||||
|
"Range": {
|
||||||
|
"PointBlank": "Point Blank",
|
||||||
|
"Normal": "Normal",
|
||||||
|
"Range2x": "Up to Range x2",
|
||||||
|
"Range5x": "Up to Range x5"
|
||||||
|
},
|
||||||
|
"Visibility": {
|
||||||
|
"Clear": "Clear",
|
||||||
|
"Obscured": "Obscured",
|
||||||
|
"Darkness": "Darkness"
|
||||||
|
},
|
||||||
|
"Attacker": {
|
||||||
|
"Normal": "Normal",
|
||||||
|
"Irritated": "Irritated/Annoyed",
|
||||||
|
"Corrosive": "Deeply Annoyed"
|
||||||
|
},
|
||||||
"FIELDS": {
|
"FIELDS": {
|
||||||
|
"hasDamageDistance": {
|
||||||
|
"label": "Is damage distance based?"
|
||||||
|
},
|
||||||
|
"hasSight": {
|
||||||
|
"label": "Has sight"
|
||||||
|
},
|
||||||
|
"isStunning": {
|
||||||
|
"label": "Is Stunning"
|
||||||
|
},
|
||||||
"hasDirectSkill": {
|
"hasDirectSkill": {
|
||||||
"label": "Has direct skill"
|
"label": "Has direct skill"
|
||||||
},
|
},
|
||||||
@@ -526,11 +562,14 @@
|
|||||||
"Unnatural": "Unnatural",
|
"Unnatural": "Unnatural",
|
||||||
"sanLossViolence": "You suffered a SAN loss due to violence : violence progress path has evolved.",
|
"sanLossViolence": "You suffered a SAN loss due to violence : violence progress path has evolved.",
|
||||||
"sanLossHelplessness": "You suffered a SAN loss due to helplessness : helplessness progress path has evolved.",
|
"sanLossHelplessness": "You suffered a SAN loss due to helplessness : helplessness progress path has evolved.",
|
||||||
|
"SANLossUnnatural": "You suffered a SAN loss due to unnatural : you may gain an Unnatural skill, check with the GM.",
|
||||||
|
"SANLossNone": "You suffered a SAN loss, but no special consequences apply.",
|
||||||
"adaptedToViolence": "You are now : Adapted to Violence.",
|
"adaptedToViolence": "You are now : Adapted to Violence.",
|
||||||
"adaptedToViolenceShort": "Adapted to Violence",
|
"adaptedToViolenceShort": "Adapted to Violence",
|
||||||
"adaptedToHelplessness": "You are now : Adapted to Helplessness.",
|
"adaptedToHelplessness": "You are now : Adapted to Helplessness.",
|
||||||
"adaptedToHelplessnessShort": "Adapted to Helplessness",
|
"adaptedToHelplessnessShort": "Adapted to Helplessness",
|
||||||
"SANTest": "You just rolled a SAN test : please select the SAN loss with the buttons below.",
|
"SANTestSuccess": "You just rolled a SAN test with success, but you may still loose SAN points. Select the value of SAN loss with the buttons below.",
|
||||||
|
"SANTestFailure": "You just rolled a SAN test with failure, you loose SAN points. Select the value of SAN loss with the buttons below.",
|
||||||
"breakingPointReached": "Your SAN has reached your Breaking Point : you suffer a disorder (to be discussed with the GM). Reset the BP to its new value.",
|
"breakingPointReached": "Your SAN has reached your Breaking Point : you suffer a disorder (to be discussed with the GM). Reset the BP to its new value.",
|
||||||
"rollNudge": "Roll Nudge",
|
"rollNudge": "Roll Nudge",
|
||||||
"rollDamage": "Roll Damage",
|
"rollDamage": "Roll Damage",
|
||||||
@@ -613,6 +652,11 @@
|
|||||||
"biography": "Biography",
|
"biography": "Biography",
|
||||||
"notes": "Notes",
|
"notes": "Notes",
|
||||||
"weapons": "Weapons",
|
"weapons": "Weapons",
|
||||||
|
"melee": "Melee",
|
||||||
|
"Lethality": "Lethality",
|
||||||
|
"baseRange": "Base Range",
|
||||||
|
"Ammo": "Ammo",
|
||||||
|
"armorPiercing": "Armor Piercing",
|
||||||
"HP": "HP",
|
"HP": "HP",
|
||||||
"SAN": "SAN",
|
"SAN": "SAN",
|
||||||
"current": "Current",
|
"current": "Current",
|
||||||
@@ -678,7 +722,15 @@
|
|||||||
"killRadiusInfo": "All targets within the kill radius suffer the damage",
|
"killRadiusInfo": "All targets within the kill radius suffer the damage",
|
||||||
"ammoUsed": "Ammo used",
|
"ammoUsed": "Ammo used",
|
||||||
"lethalityLethal": "Lethal !!",
|
"lethalityLethal": "Lethal !!",
|
||||||
"lethalityNotLethal": "Non-Lethal"
|
"lethalityNotLethal": "Non-Lethal",
|
||||||
|
"WPSpent": "WP Spent",
|
||||||
|
"targetMove": "Target Move",
|
||||||
|
"attackerState": "Attacker State",
|
||||||
|
"targetSize": "Target Size",
|
||||||
|
"visibility": "Visibility",
|
||||||
|
"rangedRange": "Range",
|
||||||
|
"aimingLastRound": "Aiming Last Round (+20)",
|
||||||
|
"aimingWithSight": "Aiming with Sight (+20)"
|
||||||
},
|
},
|
||||||
"ChatMessage": {
|
"ChatMessage": {
|
||||||
"exhausted": "Your protagonist is exhausted. He loses [[/r 1d6]] Willpower Points."
|
"exhausted": "Your protagonist is exhausted. He loses [[/r 1d6]] Willpower Points."
|
||||||
@@ -699,7 +751,8 @@
|
|||||||
"Tooltip": {
|
"Tooltip": {
|
||||||
"sanBP": ">5 SAN lost in one roll, temporary insanity. If SAN less reaches BP = a Disorder unconscious Breaking and AND reset BP.",
|
"sanBP": ">5 SAN lost in one roll, temporary insanity. If SAN less reaches BP = a Disorder unconscious Breaking and AND reset BP.",
|
||||||
"setBP": "Set the current Breaking Point based on the current SAN value",
|
"setBP": "Set the current Breaking Point based on the current SAN value",
|
||||||
"addBond": "Add a new Bond"
|
"addBond": "Add a new Bond",
|
||||||
|
"rollDamage": "Roll Damage"
|
||||||
},
|
},
|
||||||
"Chat": {
|
"Chat": {
|
||||||
},
|
},
|
||||||
|
65
lang/fr.json
65
lang/fr.json
@@ -224,6 +224,7 @@
|
|||||||
"UnarmedCombat": "Combat à mains nues",
|
"UnarmedCombat": "Combat à mains nues",
|
||||||
"RangedWeapons": "Armes de tir",
|
"RangedWeapons": "Armes de tir",
|
||||||
"FirearmsBeams": "Armes à feu / à rayons",
|
"FirearmsBeams": "Armes à feu / à rayons",
|
||||||
|
"MilitaryTrainingExplosive": "Entraînement militaire (Explosifs)",
|
||||||
"FIELDS": {
|
"FIELDS": {
|
||||||
"isHealing": {
|
"isHealing": {
|
||||||
"label": "Compétence de soin"
|
"label": "Compétence de soin"
|
||||||
@@ -280,7 +281,8 @@
|
|||||||
"rangedprimitive": "A distance - Primitive",
|
"rangedprimitive": "A distance - Primitive",
|
||||||
"rangedthrown": "A distance - Lancer",
|
"rangedthrown": "A distance - Lancer",
|
||||||
"rangedfirearm": "A distance - Arme à feu",
|
"rangedfirearm": "A distance - Arme à feu",
|
||||||
"unarmed": "Non armé"
|
"unarmed": "Non armé",
|
||||||
|
"rangedexplosive": "Explosif"
|
||||||
},
|
},
|
||||||
"WeaponSubtype": {
|
"WeaponSubtype": {
|
||||||
"basicfirearm": "Arme à feu de base",
|
"basicfirearm": "Arme à feu de base",
|
||||||
@@ -295,7 +297,41 @@
|
|||||||
"shortspray": "Barrage court",
|
"shortspray": "Barrage court",
|
||||||
"longspray": "Barrage long"
|
"longspray": "Barrage long"
|
||||||
},
|
},
|
||||||
|
"Target": {
|
||||||
|
"Normal": "Normal",
|
||||||
|
"Stationary": "Immobile (+20)",
|
||||||
|
"MovingRange": "En mouvement ou au sol (-20)",
|
||||||
|
"MovingFast": "En mouvement rapide (ie course) (-20)",
|
||||||
|
"MovingVeryFast": "En mouvement très rapide (ie véhicule) (-40)",
|
||||||
|
"HalfCovered": "A moitié couvert (-20)",
|
||||||
|
"Covered": "A Couvert (-40)"
|
||||||
|
},
|
||||||
|
"Range": {
|
||||||
|
"PointBlank": "Bout portant (+20)",
|
||||||
|
"Normal": "Normal",
|
||||||
|
"Range2x": "de portée à portée x2 (-20)",
|
||||||
|
"Range5x": "de portéex2 à portée x5 (-40)"
|
||||||
|
},
|
||||||
|
"Visibility": {
|
||||||
|
"Clear": "Normale",
|
||||||
|
"Obscured": "Obscurci (-20)",
|
||||||
|
"Darkness": "Obscurité (-40)"
|
||||||
|
},
|
||||||
|
"Attacker": {
|
||||||
|
"Normal": "Normal",
|
||||||
|
"Irritated": "Irrité/Gêné (-20)",
|
||||||
|
"Corrosive": "Fortement gêné (-40)"
|
||||||
|
},
|
||||||
"FIELDS": {
|
"FIELDS": {
|
||||||
|
"hasDamageDistance": {
|
||||||
|
"label": "Dégâts basés sur la distance ?"
|
||||||
|
},
|
||||||
|
"hasSight": {
|
||||||
|
"label": "Lunette de visée"
|
||||||
|
},
|
||||||
|
"isStunning": {
|
||||||
|
"label": "Etourdissante"
|
||||||
|
},
|
||||||
"ammo": {
|
"ammo": {
|
||||||
"label": "Munitions",
|
"label": "Munitions",
|
||||||
"value": {
|
"value": {
|
||||||
@@ -531,17 +567,20 @@
|
|||||||
"sanLoss5": "Perte de SAN de 5+ ({value}) : vous souffrez d'une folie temporaire (Fuite, Soumission, Lutte ou compréhension de l'Inconcevable).",
|
"sanLoss5": "Perte de SAN de 5+ ({value}) : vous souffrez d'une folie temporaire (Fuite, Soumission, Lutte ou compréhension de l'Inconcevable).",
|
||||||
"sanViolenceReset": "Le décompte des pertes de SAN de violence a été réinitialisé.",
|
"sanViolenceReset": "Le décompte des pertes de SAN de violence a été réinitialisé.",
|
||||||
"sanHelplessnessReset": "Le décompte des pertes de SAN d'impuissance a été réinitialisé.",
|
"sanHelplessnessReset": "Le décompte des pertes de SAN d'impuissance a été réinitialisé.",
|
||||||
"sanLoss": "Perte de SAN",
|
"sanLoss": "Vous venez de perdre des points de SAN",
|
||||||
"noSanLoss": "Aucune perte de SAN",
|
"noSanLoss": "Aucune perte de SAN",
|
||||||
"sanLossInfo": "Sélectionnez la perte de SAN à l'aide des boutons ci-dessous.",
|
"sanLossInfo": "Sélectionnez la perte de SAN à l'aide des boutons ci-dessous.",
|
||||||
"selectSANType": "Sélectionnez le type de perte de SAN à l'aide des boutons ci-dessous.",
|
"selectSANType": "Sélectionnez maintenant le type SAN perdue à l'aide des boutons ci-dessous.",
|
||||||
"sanLossViolence": "Vous avez subi une perte de SAN due à la violence : le chemin de progression de la violence a évolué.",
|
"sanLossViolence": "Vous avez subi une perte de SAN due à la violence : le chemin de progression de la violence a évolué.",
|
||||||
"sanLossHelplessness": "Vous avez subi une perte de SAN due à l'impuissance : le chemin de progression de l'impuissance a évolué.",
|
"sanLossHelplessness": "Vous avez subi une perte de SAN due à l'impuissance : le chemin de progression de l'impuissance a évolué.",
|
||||||
|
"SANLossUnnatural": "Vous avez subi une perte de SAN due à l'inconcevable : vous pouvez peut-être faire progresser la compétence Inconcevable, vérifiez avec le MJ.",
|
||||||
|
"SANLossNone": "Vous avez subi une perte de SAN, mais aucune conséquence spéciale n'est appliquée.",
|
||||||
"adaptedToViolence": "Vous êtes maintenant : Habitué à la violence",
|
"adaptedToViolence": "Vous êtes maintenant : Habitué à la violence",
|
||||||
"adaptedToViolenceShort": "Habitué à la violence",
|
"adaptedToViolenceShort": "Habitué à la violence",
|
||||||
"adaptedToHelplessness": "Vous êtes maintenant : Habitué à l'impuissance",
|
"adaptedToHelplessness": "Vous êtes maintenant : Habitué à l'impuissance",
|
||||||
"adaptedToHelplessnessShort": "Habitué à l'impuissance",
|
"adaptedToHelplessnessShort": "Habitué à l'impuissance",
|
||||||
"SANTest": "Vous venez de faire un jet de SAN : selectionnez la perte de SAN à l'aide des boutons ci-dessous.",
|
"SANTestSuccess": "Vous venez de réussir votre jet de SAN, mais vous pouvez toujours perdre des points de SAN. Sélectionnez la valeur à l'aide des boutons ci-dessous.",
|
||||||
|
"SANTestFailure": "Vous venez d'échouer votre test de SAN, vous perdez des points de SAN. Sélectionnez la valeur à l'aide des boutons ci-dessous.",
|
||||||
"breakingPointReached": "Vous avez atteint votre Point de Rupture (PR) : vous souffrez d'un trouble mental. Vous devez re-initialiser votre PR à l'aide du bouton disponible dans la section SAN de la fiche de PJ.",
|
"breakingPointReached": "Vous avez atteint votre Point de Rupture (PR) : vous souffrez d'un trouble mental. Vous devez re-initialiser votre PR à l'aide du bouton disponible dans la section SAN de la fiche de PJ.",
|
||||||
"Violence" : "Violence",
|
"Violence" : "Violence",
|
||||||
"Helplessness": "Impuissance",
|
"Helplessness": "Impuissance",
|
||||||
@@ -627,6 +666,11 @@
|
|||||||
"biography": "Biographie",
|
"biography": "Biographie",
|
||||||
"notes": "Notes",
|
"notes": "Notes",
|
||||||
"weapons": "Armes",
|
"weapons": "Armes",
|
||||||
|
"melee": "Mêlée",
|
||||||
|
"Lethality": "Létalité",
|
||||||
|
"baseRange": "Portée de base",
|
||||||
|
"Ammo": "Munitions",
|
||||||
|
"armorPiercing": "Pénétration d'armure",
|
||||||
"HP": "PV",
|
"HP": "PV",
|
||||||
"SAN": "SAN",
|
"SAN": "SAN",
|
||||||
"current": "Actuel",
|
"current": "Actuel",
|
||||||
@@ -692,7 +736,15 @@
|
|||||||
"killRadiusInfo": "Si la cible est dans le rayon de mortalité, elle subit les dommages.",
|
"killRadiusInfo": "Si la cible est dans le rayon de mortalité, elle subit les dommages.",
|
||||||
"ammoUsed": "Munitions utilisées",
|
"ammoUsed": "Munitions utilisées",
|
||||||
"lethalityLethal": "Létal !!",
|
"lethalityLethal": "Létal !!",
|
||||||
"lethalityNotLethal": "Non létal"
|
"lethalityNotLethal": "Non létal",
|
||||||
|
"WPSpent": "PVO dépensés",
|
||||||
|
"targetMove": "Mouvement de la cible",
|
||||||
|
"attackerState": "Etat de l'attaquant",
|
||||||
|
"targetSize": "Taille de la cible",
|
||||||
|
"visibility": "Visibilité",
|
||||||
|
"rangedRange": "Portée",
|
||||||
|
"aimingLastRound": "Visée lors du dernier round (+20)",
|
||||||
|
"aimingWithSight": "Visée avec lunette (+20)"
|
||||||
},
|
},
|
||||||
"ChatMessage": {
|
"ChatMessage": {
|
||||||
"exhausted": "Votre protagoniste est épuisé. Il perd [[/r 1d6]] Points de Volonté."
|
"exhausted": "Votre protagoniste est épuisé. Il perd [[/r 1d6]] Points de Volonté."
|
||||||
@@ -713,7 +765,8 @@
|
|||||||
"Tooltip": {
|
"Tooltip": {
|
||||||
"sanBP": "Perte de 5+ SAN en 1 jet : folie temporaire. SI la SAN atteint le PR : trouble mental, perte de conscience et reset du PR.",
|
"sanBP": "Perte de 5+ SAN en 1 jet : folie temporaire. SI la SAN atteint le PR : trouble mental, perte de conscience et reset du PR.",
|
||||||
"setBP": "Positionner le Point de Rupture à la valeur courant de la SAN",
|
"setBP": "Positionner le Point de Rupture à la valeur courant de la SAN",
|
||||||
"addBond": "Ajouter une Attache"
|
"addBond": "Ajouter une Attache",
|
||||||
|
"rollDamage": "Lancer les dégâts"
|
||||||
},
|
},
|
||||||
"Chat": {
|
"Chat": {
|
||||||
},
|
},
|
||||||
|
19
macro_roll.js
Normal file
19
macro_roll.js
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
let nb = 10000
|
||||||
|
let sum = 0
|
||||||
|
let results = []
|
||||||
|
for (let i = 0; i < nb; i++) {
|
||||||
|
let r = new Roll("1d100")
|
||||||
|
await r.evaluate()
|
||||||
|
sum += r.total
|
||||||
|
results.push(r.total)
|
||||||
|
}
|
||||||
|
|
||||||
|
let mean = sum / nb
|
||||||
|
let variance = results.reduce((acc, val) => acc + Math.pow(val - mean, 2), 0) / nb
|
||||||
|
let stddev = Math.sqrt(variance)
|
||||||
|
|
||||||
|
console.log("Average : ", mean)
|
||||||
|
console.log("Standard deviation : ", stddev)
|
||||||
|
console.log("Coefficient of variation : ", stddev / mean )
|
||||||
|
console.log("Min : ", Math.min(...results))
|
||||||
|
console.log("Max : ", Math.max(...results))
|
@@ -225,6 +225,7 @@ export default class CthulhuEternalProtagonistSheet extends CthulhuEternalActorS
|
|||||||
case "damage":
|
case "damage":
|
||||||
li = $(event.currentTarget).parents(".item");
|
li = $(event.currentTarget).parents(".item");
|
||||||
item = this.actor.items.get(li.data("item-id"));
|
item = this.actor.items.get(li.data("item-id"));
|
||||||
|
item.damageFormula = $(event.currentTarget).data("roll-value") || item.system.damage
|
||||||
item.damageBonus = this.actor.system.damageBonus
|
item.damageBonus = this.actor.system.damageBonus
|
||||||
break
|
break
|
||||||
case "san":
|
case "san":
|
||||||
|
@@ -154,7 +154,8 @@ export const WEAPON_SKILL_MAPPING = {
|
|||||||
"rangedprimitive": "CTHULHUETERNAL.Skill.Firearms",
|
"rangedprimitive": "CTHULHUETERNAL.Skill.Firearms",
|
||||||
"rangedthrown": "CTHULHUETERNAL.Skill.Athletics",
|
"rangedthrown": "CTHULHUETERNAL.Skill.Athletics",
|
||||||
"rangedfirearm": "CTHULHUETERNAL.Skill.Firearms",
|
"rangedfirearm": "CTHULHUETERNAL.Skill.Firearms",
|
||||||
"unarmed": "CTHULHUETERNAL.Skill.UnarmedCombat"
|
"unarmed": "CTHULHUETERNAL.Skill.UnarmedCombat",
|
||||||
|
"rangedexplosive": "CTHULHUETERNAL.Skill.MilitaryTrainingExplosive"
|
||||||
},
|
},
|
||||||
victorian: {
|
victorian: {
|
||||||
"melee": "CTHULHUETERNAL.Skill.Melee",
|
"melee": "CTHULHUETERNAL.Skill.Melee",
|
||||||
@@ -245,6 +246,45 @@ export const WEAPON_SELECTIVE_FIRE_CHOICES = {
|
|||||||
"longspray": { id: "longspray", label: "CTHULHUETERNAL.Weapon.SelectiveFire.longspray", ammoUsed: 20, lethality: 10, killRadius: 3},
|
"longspray": { id: "longspray", label: "CTHULHUETERNAL.Weapon.SelectiveFire.longspray", ammoUsed: 20, lethality: 10, killRadius: 3},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Melee stuff
|
||||||
|
export const WEAPON_MELEE_TARGET_MOVE = {
|
||||||
|
"normal": { id: "normal", label: "CTHULHUETERNAL.Weapon.Target.Normal", modifier: 0 },
|
||||||
|
"stationary": { id: "stationary", label: "CTHULHUETERNAL.Weapon.Target.Stationary", modifier: 20 },
|
||||||
|
"movingfast": { id: "movingfast", label: "CTHULHUETERNAL.Weapon.Target.MovingFast", modifier: -20 },
|
||||||
|
"movingveryfast": { id: "movingveryfast", label: "CTHULHUETERNAL.Weapon.Target.MovingVeryFast", modifier: -40 },
|
||||||
|
}
|
||||||
|
// Ranged stuff
|
||||||
|
export const WEAPON_RANGED_RANGE = {
|
||||||
|
"pointblank": { id: "pointblank", label: "CTHULHUETERNAL.Weapon.Range.PointBlank", modifier: +20 },
|
||||||
|
"normal": { id: "normal", label: "CTHULHUETERNAL.Weapon.Range.Normal", modifier: 0 },
|
||||||
|
"range2x": { id: "range2x", label: "CTHULHUETERNAL.Weapon.Range.Range2x", modifier: -20 },
|
||||||
|
"range5x": { id: "range5x", label: "CTHULHUETERNAL.Weapon.Range.Range5x", modifier: -40 }
|
||||||
|
}
|
||||||
|
export const WEAPON_RANGED_TARGET_MOVE = {
|
||||||
|
"normal": { id: "normal", label: "CTHULHUETERNAL.Weapon.Target.Normal", modifier: 0 },
|
||||||
|
"stationary": { id: "stationary", label: "CTHULHUETERNAL.Weapon.Target.Stationary", modifier: 20 },
|
||||||
|
"movingfast": { id: "movingfast", label: "CTHULHUETERNAL.Weapon.Target.MovingRange", modifier: -20 },
|
||||||
|
"movingveryfast": { id: "movingveryfast", label: "CTHULHUETERNAL.Weapon.Target.MovingVeryFast", modifier: -40 },
|
||||||
|
}
|
||||||
|
|
||||||
|
// Common stuff
|
||||||
|
export const WEAPON_ATTACKER_STATE = {
|
||||||
|
"normal": { id: "normal", label: "CTHULHUETERNAL.Weapon.Target.Normal", modifier: 0 },
|
||||||
|
"irritated": { id: "irritated", label: "CTHULHUETERNAL.Weapon.Attacker.Irritated", modifier: -20 },
|
||||||
|
"corrosive": { id: "corrosive", label: "CTHULHUETERNAL.Weapon.Attacker.Corrosive", modifier: -40 },
|
||||||
|
}
|
||||||
|
export const WEAPON_TARGET_SIZE = {
|
||||||
|
"normal": { id: "normal", label: "CTHULHUETERNAL.Weapon.Target.Normal", modifier: 0 },
|
||||||
|
"halfcovered": { id: "halfcovered", label: "CTHULHUETERNAL.Weapon.Target.HalfCovered", modifier: -20 },
|
||||||
|
"covered": { id: "covered", label: "CTHULHUETERNAL.Weapon.Target.Covered", modifier: -40 },
|
||||||
|
}
|
||||||
|
export const WEAPON_VISIBILITY = {
|
||||||
|
"clear": { id: "clear", label: "CTHULHUETERNAL.Weapon.Visibility.Clear", modifier: 0 },
|
||||||
|
"obscured": { id: "obscured", label: "CTHULHUETERNAL.Weapon.Visibility.Obscured", modifier: -20 },
|
||||||
|
"darkness": { id: "darkness", label: "CTHULHUETERNAL.Weapon.Visibility.Darkness", modifier: -40 },
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
export const RITUAL_TYPES = {
|
export const RITUAL_TYPES = {
|
||||||
"simple": "CTHULHUETERNAL.Ritual.Simple",
|
"simple": "CTHULHUETERNAL.Ritual.Simple",
|
||||||
"difficult": "CTHULHUETERNAL.Ritual.Difficult",
|
"difficult": "CTHULHUETERNAL.Ritual.Difficult",
|
||||||
@@ -277,5 +317,11 @@ export const SYSTEM = {
|
|||||||
MULTIPLIER_CHOICES,
|
MULTIPLIER_CHOICES,
|
||||||
ASCII,
|
ASCII,
|
||||||
DAMAGE_BONUS,
|
DAMAGE_BONUS,
|
||||||
RITUAL_TYPES
|
RITUAL_TYPES,
|
||||||
|
WEAPON_MELEE_TARGET_MOVE,
|
||||||
|
WEAPON_RANGED_RANGE,
|
||||||
|
WEAPON_RANGED_TARGET_MOVE,
|
||||||
|
WEAPON_ATTACKER_STATE,
|
||||||
|
WEAPON_TARGET_SIZE,
|
||||||
|
WEAPON_VISIBILITY
|
||||||
}
|
}
|
||||||
|
@@ -3,7 +3,8 @@ export const WEAPON_TYPE = {
|
|||||||
"rangedprimitive": "CTHULHUETERNAL.Weapon.WeaponType.rangedprimitive",
|
"rangedprimitive": "CTHULHUETERNAL.Weapon.WeaponType.rangedprimitive",
|
||||||
"rangedthrown": "CTHULHUETERNAL.Weapon.WeaponType.rangedthrown",
|
"rangedthrown": "CTHULHUETERNAL.Weapon.WeaponType.rangedthrown",
|
||||||
"rangedfirearm": "CTHULHUETERNAL.Weapon.WeaponType.rangedfirearm",
|
"rangedfirearm": "CTHULHUETERNAL.Weapon.WeaponType.rangedfirearm",
|
||||||
"unarmed": "CTHULHUETERNAL.Weapon.WeaponType.unarmed"
|
"unarmed": "CTHULHUETERNAL.Weapon.WeaponType.unarmed",
|
||||||
|
"rangedexplosive": "CTHULHUETERNAL.Weapon.WeaponType.rangedexplosive",
|
||||||
}
|
}
|
||||||
|
|
||||||
export const WEAPON_SUBTYPE = {
|
export const WEAPON_SUBTYPE = {
|
||||||
|
@@ -106,7 +106,7 @@ export default class CthulhuEternalRoll extends Roll {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static buildSelectiveFireChoices(actor, weapon) {
|
static buildSelectiveFireChoices(actor, weapon) {
|
||||||
if (!weapon || !weapon?.system?.hasSelectiveFire) {
|
if (!weapon?.system?.hasSelectiveFire) {
|
||||||
return {}
|
return {}
|
||||||
}
|
}
|
||||||
// Loop thru the selective fire choices and build the choices object when enough ammo in the weapon
|
// Loop thru the selective fire choices and build the choices object when enough ammo in the weapon
|
||||||
@@ -144,6 +144,8 @@ export default class CthulhuEternalRoll extends Roll {
|
|||||||
ammoUsed = choice.ammoUsed // Override ammo used
|
ammoUsed = choice.ammoUsed // Override ammo used
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ammoUsed = Number(ammoUsed)
|
||||||
|
|
||||||
if (weapon.system.lethality > 0) {
|
if (weapon.system.lethality > 0) {
|
||||||
let lethalityRoll = new Roll("1d100")
|
let lethalityRoll = new Roll("1d100")
|
||||||
await lethalityRoll.evaluate()
|
await lethalityRoll.evaluate()
|
||||||
@@ -175,8 +177,8 @@ export default class CthulhuEternalRoll extends Roll {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// If the weapon is not lethal, we can proceed with the regular damage roll
|
// If the weapon is not lethal, we can proceed with the regular damage roll
|
||||||
let formula = weapon.system.damage
|
let formula = weapon?.damageFormula || weapon.system.damage || "0"
|
||||||
if (weapon.system.weaponType === "melee" || weapon.system.weaponType === "unarmed") {
|
if (weapon.system.applyDamageBonus) {
|
||||||
formula += ` + ${actor.system?.damageBonus}`
|
formula += ` + ${actor.system?.damageBonus}`
|
||||||
}
|
}
|
||||||
if (options?.previousResultType === "successCritical") {
|
if (options?.previousResultType === "successCritical") {
|
||||||
@@ -205,6 +207,19 @@ export default class CthulhuEternalRoll extends Roll {
|
|||||||
}, { rollMode: options.rollMode, create: true })
|
}, { rollMode: options.rollMode, create: true })
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static computeWeaponModifiers(rollData) {
|
||||||
|
let modifier = SYSTEM.WEAPON_MELEE_TARGET_MOVE[rollData.meleeTargetMoveChoice]?.modifier || 0
|
||||||
|
modifier += SYSTEM.WEAPON_RANGED_RANGE[rollData.rangedRangeChoice]?.modifier || 0
|
||||||
|
modifier += SYSTEM.WEAPON_RANGED_TARGET_MOVE[rollData.rangedTargetMoveChoice]?.modifier || 0
|
||||||
|
modifier += SYSTEM.WEAPON_VISIBILITY[rollData.visibilityChoice]?.modifier || 0
|
||||||
|
modifier += SYSTEM.WEAPON_ATTACKER_STATE[rollData.attackerStateChoice]?.modifier || 0
|
||||||
|
modifier += SYSTEM.WEAPON_TARGET_SIZE[rollData.targetSizeChoice]?.modifier || 0
|
||||||
|
modifier += (rollData.aimingLastRound) ? 20 : 0
|
||||||
|
modifier += (rollData.aimingWithSight) ? 20 : 0
|
||||||
|
return modifier
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Prompt the user with a dialog to configure and execute a roll.
|
* Prompt the user with a dialog to configure and execute a roll.
|
||||||
*
|
*
|
||||||
@@ -311,6 +326,7 @@ export default class CthulhuEternalRoll extends Roll {
|
|||||||
rollType: options.rollType,
|
rollType: options.rollType,
|
||||||
rollItem: foundry.utils.duplicate(options.rollItem), // Object only, no class
|
rollItem: foundry.utils.duplicate(options.rollItem), // Object only, no class
|
||||||
weapon: options?.weapon,
|
weapon: options?.weapon,
|
||||||
|
isRangedWeapon: options?.weapon?.system?.isRanged(),
|
||||||
initialScore: options.initialScore,
|
initialScore: options.initialScore,
|
||||||
targetScore: options.initialScore,
|
targetScore: options.initialScore,
|
||||||
isLowWP: options.isLowWP,
|
isLowWP: options.isLowWP,
|
||||||
@@ -324,12 +340,26 @@ export default class CthulhuEternalRoll extends Roll {
|
|||||||
choiceModifier,
|
choiceModifier,
|
||||||
choiceMultiplier,
|
choiceMultiplier,
|
||||||
choiceSelectiveFire,
|
choiceSelectiveFire,
|
||||||
|
choiceMeleeTargetMove: SYSTEM.WEAPON_MELEE_TARGET_MOVE,
|
||||||
|
choiceRangedRange: SYSTEM.WEAPON_RANGED_RANGE,
|
||||||
|
choiceRangedTargetMove: SYSTEM.WEAPON_RANGED_TARGET_MOVE,
|
||||||
|
choiceVisibility: SYSTEM.WEAPON_VISIBILITY,
|
||||||
|
choiceAttackerState: SYSTEM.WEAPON_ATTACKER_STATE,
|
||||||
|
choiceTargetSize: SYSTEM.WEAPON_TARGET_SIZE,
|
||||||
|
selectiveFireChoice: "shortburst",
|
||||||
|
meleeTargetMoveChoice: "normal",
|
||||||
|
rangedRangeChoice: "normal",
|
||||||
|
rangedTargetMoveChoice: "normal",
|
||||||
|
visibilityChoice: "clear",
|
||||||
|
attackerStateChoice: "normal",
|
||||||
|
targetSizeChoice: "normal",
|
||||||
|
aimingLastRound: false,
|
||||||
|
aimingWithSight: false,
|
||||||
|
modifier,
|
||||||
formula,
|
formula,
|
||||||
hasTarget: options.hasTarget,
|
hasTarget: options.hasTarget,
|
||||||
hasModifier,
|
hasModifier,
|
||||||
hasMultiplier,
|
hasMultiplier,
|
||||||
modifier,
|
|
||||||
selectiveFireChoice: "shortburst",
|
|
||||||
multiplier
|
multiplier
|
||||||
}
|
}
|
||||||
const content = await foundry.applications.handlebars.renderTemplate("systems/fvtt-cthulhu-eternal/templates/roll-dialog.hbs", dialogContext)
|
const content = await foundry.applications.handlebars.renderTemplate("systems/fvtt-cthulhu-eternal/templates/roll-dialog.hbs", dialogContext)
|
||||||
@@ -386,7 +416,9 @@ export default class CthulhuEternalRoll extends Roll {
|
|||||||
if (options.rollType === "resource") {
|
if (options.rollType === "resource") {
|
||||||
rollData.targetScore = options.initialScore * Number(rollContext.multiplier)
|
rollData.targetScore = options.initialScore * Number(rollContext.multiplier)
|
||||||
} else {
|
} else {
|
||||||
rollData.targetScore = Math.min(Math.max(options.initialScore + Number(rollData.modifier), 0), 100)
|
let totalModifier = this.computeWeaponModifiers(rollData) + Number(rollData.modifier)
|
||||||
|
rollData.totalModifier = Math.min(totalModifier, 40)
|
||||||
|
rollData.targetScore = Math.min(Math.max(options.initialScore + Number(rollData.totalModifier), 0), 100)
|
||||||
if (rollData.isLowWP || rollData.isExhausted) {
|
if (rollData.isLowWP || rollData.isExhausted) {
|
||||||
rollData.targetScore -= 20
|
rollData.targetScore -= 20
|
||||||
}
|
}
|
||||||
@@ -395,7 +427,7 @@ export default class CthulhuEternalRoll extends Roll {
|
|||||||
}
|
}
|
||||||
rollData.targetScore = Math.min(Math.max(rollData.targetScore, 0), 100)
|
rollData.targetScore = Math.min(Math.max(rollData.targetScore, 0), 100)
|
||||||
}
|
}
|
||||||
if (!rollData.targetScore) {
|
if (rollData.targetScore === undefined || rollData.targetScore === null) {
|
||||||
rollData.targetScore = options.initialScore
|
rollData.targetScore = options.initialScore
|
||||||
rollData.modifier = "0"
|
rollData.modifier = "0"
|
||||||
}
|
}
|
||||||
@@ -456,6 +488,7 @@ export default class CthulhuEternalRoll extends Roll {
|
|||||||
this.options.isCritical = resultType === "successCritical" || resultType === "failureCritical"
|
this.options.isCritical = resultType === "successCritical" || resultType === "failureCritical"
|
||||||
}
|
}
|
||||||
rollData.resultType = resultType
|
rollData.resultType = resultType
|
||||||
|
|
||||||
this.options.isLowWP = rollData.isLowWP
|
this.options.isLowWP = rollData.isLowWP
|
||||||
this.options.isZeroWP = rollData.isZeroWP
|
this.options.isZeroWP = rollData.isZeroWP
|
||||||
this.options.isExhausted = rollData.isExhausted
|
this.options.isExhausted = rollData.isExhausted
|
||||||
@@ -601,12 +634,14 @@ export default class CthulhuEternalRoll extends Roll {
|
|||||||
rollItem: rollItem,
|
rollItem: rollItem,
|
||||||
rollData: rollData
|
rollData: rollData
|
||||||
}
|
}
|
||||||
|
// Get array of gamemaster ID
|
||||||
let msg = await foundry.applications.handlebars.renderTemplate("systems/fvtt-cthulhu-eternal/templates/chat-san-request.hbs", msgData)
|
let msg = await foundry.applications.handlebars.renderTemplate("systems/fvtt-cthulhu-eternal/templates/chat-san-request.hbs", msgData)
|
||||||
let chatMsg = await ChatMessage.create({
|
let chatMsg = await ChatMessage.create({
|
||||||
user: game.user.id,
|
user: game.user.id,
|
||||||
content: msg,
|
content: msg,
|
||||||
speaker: ChatMessage.getSpeaker({ actor: rollData.actor })
|
speaker: ChatMessage.getSpeaker({ actor: rollData.actor }),
|
||||||
}, { rollMode: rollData.rollMode, create: true })
|
whisper: game.users.filter(u => u.isGM).map(u => u.id),
|
||||||
|
})
|
||||||
await chatMsg.setFlag("fvtt-cthulhu-eternal", "rollData", rollData)
|
await chatMsg.setFlag("fvtt-cthulhu-eternal", "rollData", rollData)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -90,6 +90,10 @@ export default class CthulhuEternalProtagonist extends foundry.abstract.TypeData
|
|||||||
prepareDerivedData() {
|
prepareDerivedData() {
|
||||||
super.prepareDerivedData();
|
super.prepareDerivedData();
|
||||||
|
|
||||||
|
if (!game.user.isGM ) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
let updates = {}
|
let updates = {}
|
||||||
if (this.wp.max !== this.characteristics.pow.value) {
|
if (this.wp.max !== this.characteristics.pow.value) {
|
||||||
updates[`system.wp.max`] = this.characteristics.pow.value
|
updates[`system.wp.max`] = this.characteristics.pow.value
|
||||||
@@ -123,8 +127,6 @@ export default class CthulhuEternalProtagonist extends foundry.abstract.TypeData
|
|||||||
dmgBonus = -2
|
dmgBonus = -2
|
||||||
} else if (this.characteristics.str.value <= 8) {
|
} else if (this.characteristics.str.value <= 8) {
|
||||||
dmgBonus = -1
|
dmgBonus = -1
|
||||||
} else if (this.characteristics.str.value <= 12) {
|
|
||||||
dmgBonus = 0
|
|
||||||
} else if (this.characteristics.str.value <= 16) {
|
} else if (this.characteristics.str.value <= 16) {
|
||||||
dmgBonus = 1
|
dmgBonus = 1
|
||||||
} else if (this.characteristics.str.value <= 20) {
|
} else if (this.characteristics.str.value <= 20) {
|
||||||
@@ -137,9 +139,12 @@ export default class CthulhuEternalProtagonist extends foundry.abstract.TypeData
|
|||||||
// BP (Breaking Point) management
|
// BP (Breaking Point) management
|
||||||
if (!this.san.breakingPointReached && this.san.value <= this.san.breakingPoint) {
|
if (!this.san.breakingPointReached && this.san.value <= this.san.breakingPoint) {
|
||||||
updates[`system.san.breakingPointReached`] = true
|
updates[`system.san.breakingPointReached`] = true
|
||||||
|
this.san.breakingPointReached = true // Force local update to true
|
||||||
ChatMessage.create({
|
ChatMessage.create({
|
||||||
content: `<p>${game.i18n.format("CTHULHUETERNAL.Label.breakingPointReached", { bp: this.san.breakingPoint, san: this.san.value })}</p>`,
|
content: `<p>${game.i18n.format("CTHULHUETERNAL.Label.breakingPointReached", { bp: this.san.breakingPoint, san: this.san.value })}</p>`,
|
||||||
speaker: ChatMessage.getSpeaker({ actor: this.parent })
|
speaker: ChatMessage.getSpeaker({ actor: this.parent }),
|
||||||
|
// Get the user id of the actor owner
|
||||||
|
whisper: [game.users.find(u => u.character?.name === this.parent?.name).id ]
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -195,10 +200,6 @@ export default class CthulhuEternalProtagonist extends foundry.abstract.TypeData
|
|||||||
}
|
}
|
||||||
|
|
||||||
async applySANConsequences(rollData) {
|
async applySANConsequences(rollData) {
|
||||||
// If sanType is "non", do nothing
|
|
||||||
if (rollData.sanType === "none") {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
let msgData = {
|
let msgData = {
|
||||||
sanType: rollData.sanType,
|
sanType: rollData.sanType,
|
||||||
sanLoss: rollData.sanLoss,
|
sanLoss: rollData.sanLoss,
|
||||||
@@ -265,14 +266,21 @@ export default class CthulhuEternalProtagonist extends foundry.abstract.TypeData
|
|||||||
updates[`system.san.helplessness`] = [false, false, false]
|
updates[`system.san.helplessness`] = [false, false, false]
|
||||||
msgData.adaptedToHelplessness = true
|
msgData.adaptedToHelplessness = true
|
||||||
}
|
}
|
||||||
|
} else if (rollData.sanType === "unnatural" ) {
|
||||||
|
template = "systems/fvtt-cthulhu-eternal/templates/chat-san-loss-unnatural.hbs"
|
||||||
|
} else {
|
||||||
|
template = "systems/fvtt-cthulhu-eternal/templates/chat-san-loss-none.hbs"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
console.log("CthulhuEternalProtagonist.applySANConsequences", rollData, updates, template)
|
||||||
let content = await foundry.applications.handlebars.renderTemplate(template, msgData)
|
let content = await foundry.applications.handlebars.renderTemplate(template, msgData)
|
||||||
let msg = await ChatMessage.create({
|
let msg = await ChatMessage.create({
|
||||||
content: content,
|
content: content,
|
||||||
speaker: ChatMessage.getSpeaker({ actor: this.parent })
|
speaker: ChatMessage.getSpeaker({ actor: this.parent }),
|
||||||
|
whisper: game.users.filter(u => u.isGM).map(u => u.id),
|
||||||
})
|
})
|
||||||
msg.setFlag("fvtt-cthulhu-eternal", "rollData", msgData)
|
await msg.setFlag("fvtt-cthulhu-eternal", "rollData", msgData)
|
||||||
|
|
||||||
if (Object.keys(updates).length > 0) {
|
if (Object.keys(updates).length > 0) {
|
||||||
this.parent.update(updates)
|
this.parent.update(updates)
|
||||||
}
|
}
|
||||||
@@ -284,12 +292,14 @@ export default class CthulhuEternalProtagonist extends foundry.abstract.TypeData
|
|||||||
let san = Math.max(Math.min(this.san.value + rollData.sanLoss, this.san.max), 0)
|
let san = Math.max(Math.min(this.san.value + rollData.sanLoss, this.san.max), 0)
|
||||||
if (this.san.value !== san) {
|
if (this.san.value !== san) {
|
||||||
updates[`system.san.value`] = san
|
updates[`system.san.value`] = san
|
||||||
|
rollData.sanValue = san
|
||||||
const content = await foundry.applications.handlebars.renderTemplate("systems/fvtt-cthulhu-eternal/templates/chat-san-type-request.hbs", rollData)
|
const content = await foundry.applications.handlebars.renderTemplate("systems/fvtt-cthulhu-eternal/templates/chat-san-type-request.hbs", rollData)
|
||||||
let msg = await ChatMessage.create({
|
let msg = await ChatMessage.create({
|
||||||
content: content,
|
content: content,
|
||||||
speaker: ChatMessage.getSpeaker({ actor: this.parent })
|
speaker: ChatMessage.getSpeaker({ actor: this.parent }),
|
||||||
|
whisper: game.users.filter(u => u.isGM).map(u => u.id)
|
||||||
})
|
})
|
||||||
msg.setFlag("fvtt-cthulhu-eternal", "rollData", rollData)
|
await msg.setFlag("fvtt-cthulhu-eternal", "rollData", rollData)
|
||||||
}
|
}
|
||||||
if (Object.keys(updates).length > 0) {
|
if (Object.keys(updates).length > 0) {
|
||||||
this.parent.update(updates)
|
this.parent.update(updates)
|
||||||
|
@@ -13,12 +13,23 @@ export default class CthulhuEternalWeapon extends foundry.abstract.TypeDataModel
|
|||||||
|
|
||||||
schema.weaponType = new fields.StringField({ required: true, initial: "melee", choices: SYSTEM.WEAPON_TYPE })
|
schema.weaponType = new fields.StringField({ required: true, initial: "melee", choices: SYSTEM.WEAPON_TYPE })
|
||||||
schema.hasDirectSkill = new fields.BooleanField({ required: true, initial: false })
|
schema.hasDirectSkill = new fields.BooleanField({ required: true, initial: false })
|
||||||
schema.directSkillValue = new fields.NumberField({ required: true, initial: 0, min: 0, max:99 })
|
schema.directSkillValue = new fields.NumberField({ required: true, initial: 0, min: 0, max: 99 })
|
||||||
|
|
||||||
|
schema.hasDamageDistance = new fields.BooleanField({ required: true, initial: false })
|
||||||
|
schema.damageDistance = new fields.SchemaField(Array.fromRange(6, 1).reduce((damageDistance, i) => {
|
||||||
|
damageDistance[`dist${i}`] = new fields.SchemaField({
|
||||||
|
damage: new fields.StringField({ required: true, initial: "1d6" }),
|
||||||
|
distance: new fields.NumberField({ ...requiredInteger, initial: 0, min: 0 })
|
||||||
|
})
|
||||||
|
return damageDistance
|
||||||
|
}, {}));
|
||||||
|
|
||||||
schema.hasSelectiveFire = new fields.BooleanField({ required: true, initial: false })
|
schema.hasSelectiveFire = new fields.BooleanField({ required: true, initial: false })
|
||||||
schema.damage = new fields.StringField({required: true, initial: "1d6"})
|
schema.hasSight = new fields.BooleanField({ required: true, initial: false })
|
||||||
|
schema.isStunning = new fields.BooleanField({ required: true, initial: false })
|
||||||
|
schema.damage = new fields.StringField({ required: true, initial: "1d6" })
|
||||||
schema.applyDamageBonus = new fields.BooleanField({ required: true, initial: false })
|
schema.applyDamageBonus = new fields.BooleanField({ required: true, initial: false })
|
||||||
schema.baseRange = new fields.StringField({required: true, initial: ""})
|
schema.baseRange = new fields.StringField({ required: true, initial: "" })
|
||||||
schema.rangeUnit = new fields.StringField({ required: true, initial: "yard", choices: SYSTEM.WEAPON_RANGE_UNIT })
|
schema.rangeUnit = new fields.StringField({ required: true, initial: "yard", choices: SYSTEM.WEAPON_RANGE_UNIT })
|
||||||
schema.lethality = new fields.NumberField({ required: true, initial: 0, min: 0 })
|
schema.lethality = new fields.NumberField({ required: true, initial: 0, min: 0 })
|
||||||
schema.killRadius = new fields.NumberField({ required: true, initial: 0, min: 0 })
|
schema.killRadius = new fields.NumberField({ required: true, initial: 0, min: 0 })
|
||||||
@@ -43,7 +54,8 @@ export default class CthulhuEternalWeapon extends foundry.abstract.TypeDataModel
|
|||||||
}
|
}
|
||||||
|
|
||||||
isRanged() {
|
isRanged() {
|
||||||
return this.weaponType.includes("ranged")
|
console.log("isRanged", this.weaponType, this)
|
||||||
|
return this.weaponType.match("ranged")
|
||||||
}
|
}
|
||||||
|
|
||||||
isFireArm() {
|
isFireArm() {
|
||||||
|
@@ -196,11 +196,6 @@ export default class CthulhuEternalUtils {
|
|||||||
ui.notifications.error(game.i18n.localize("CTHULHUETERNAL.Notifications.noSanTypeFound"))
|
ui.notifications.error(game.i18n.localize("CTHULHUETERNAL.Notifications.noSanTypeFound"))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
// If the sanType is "none", we don't apply any SAN processing
|
|
||||||
if (sanType === "none") {
|
|
||||||
ui.notifications.info(game.i18n.localize("CTHULHUETERNAL.Notifications.noSanLossApplied"))
|
|
||||||
return
|
|
||||||
}
|
|
||||||
rollData.sanType = sanType
|
rollData.sanType = sanType
|
||||||
await actor.system.applySANConsequences(rollData)
|
await actor.system.applySANConsequences(rollData)
|
||||||
// Delete the roll message
|
// Delete the roll message
|
||||||
@@ -253,7 +248,7 @@ export default class CthulhuEternalUtils {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
static async damageRoll(rollMessage) {
|
static async damageRoll(rollMessage, formula = null) {
|
||||||
let rollData = rollMessage.rolls[0]?.options?.rollData
|
let rollData = rollMessage.rolls[0]?.options?.rollData
|
||||||
let actor = game.actors.get(rollData.actorId)
|
let actor = game.actors.get(rollData.actorId)
|
||||||
if (!actor) {
|
if (!actor) {
|
||||||
@@ -263,6 +258,7 @@ export default class CthulhuEternalUtils {
|
|||||||
console.log("Damage roll data", rollData)
|
console.log("Damage roll data", rollData)
|
||||||
rollData.weapon.resultType = rollData.resultType // Keep the result type from the roll message
|
rollData.weapon.resultType = rollData.resultType // Keep the result type from the roll message
|
||||||
rollData.weapon.selectiveFireChoice = rollData.selectiveFireChoice // Keep the selected fire choice from the roll message
|
rollData.weapon.selectiveFireChoice = rollData.selectiveFireChoice // Keep the selected fire choice from the roll message
|
||||||
|
rollData.weapon.damageFormula = formula || rollData.weapon.system.damage
|
||||||
actor.system.roll("damage", rollData.weapon)
|
actor.system.roll("damage", rollData.weapon)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -1 +1 @@
|
|||||||
MANIFEST-000171
|
MANIFEST-000217
|
||||||
|
@@ -1,7 +1,3 @@
|
|||||||
2025/07/09-17:04:59.082095 7f2a0effd6c0 Recovering log #169
|
2025/07/14-21:08:15.948300 7f3fa67fc6c0 Recovering log #215
|
||||||
2025/07/09-17:04:59.092675 7f2a0effd6c0 Delete type=3 #167
|
2025/07/14-21:08:15.959041 7f3fa67fc6c0 Delete type=3 #213
|
||||||
2025/07/09-17:04:59.092780 7f2a0effd6c0 Delete type=0 #169
|
2025/07/14-21:08:15.959103 7f3fa67fc6c0 Delete type=0 #215
|
||||||
2025/07/09-17:18:46.206680 7f276ffff6c0 Level-0 table #174: started
|
|
||||||
2025/07/09-17:18:46.206717 7f276ffff6c0 Level-0 table #174: 0 bytes OK
|
|
||||||
2025/07/09-17:18:46.235941 7f276ffff6c0 Delete type=0 #172
|
|
||||||
2025/07/09-17:18:46.287862 7f276ffff6c0 Manual compaction at level-0 from '!items!4oyPRBWPBWAChrJP' @ 72057594037927935 : 1 .. '!items!zVFfp3o0G0Zg3Ia4' @ 0 : 0; will stop at (end)
|
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
2025/06/29-22:25:29.091880 7fda6d9f96c0 Recovering log #165
|
2025/07/14-10:18:19.443254 7f3fa77fe6c0 Recovering log #211
|
||||||
2025/06/29-22:25:29.103184 7fda6d9f96c0 Delete type=3 #163
|
2025/07/14-10:18:19.474975 7f3fa77fe6c0 Delete type=3 #209
|
||||||
2025/06/29-22:25:29.103305 7fda6d9f96c0 Delete type=0 #165
|
2025/07/14-10:18:19.475128 7f3fa77fe6c0 Delete type=0 #211
|
||||||
2025/06/29-22:26:56.370766 7fda5bbff6c0 Level-0 table #170: started
|
2025/07/14-20:48:52.882063 7f3fa57fa6c0 Level-0 table #216: started
|
||||||
2025/06/29-22:26:56.370832 7fda5bbff6c0 Level-0 table #170: 0 bytes OK
|
2025/07/14-20:48:52.882164 7f3fa57fa6c0 Level-0 table #216: 0 bytes OK
|
||||||
2025/06/29-22:26:56.379673 7fda5bbff6c0 Delete type=0 #168
|
2025/07/14-20:48:52.889652 7f3fa57fa6c0 Delete type=0 #214
|
||||||
2025/06/29-22:26:56.380010 7fda5bbff6c0 Manual compaction at level-0 from '!items!4oyPRBWPBWAChrJP' @ 72057594037927935 : 1 .. '!items!zVFfp3o0G0Zg3Ia4' @ 0 : 0; will stop at (end)
|
2025/07/14-20:48:52.915102 7f3fa57fa6c0 Manual compaction at level-0 from '!items!4oyPRBWPBWAChrJP' @ 72057594037927935 : 1 .. '!items!zVFfp3o0G0Zg3Ia4' @ 0 : 0; will stop at (end)
|
||||||
|
Binary file not shown.
@@ -1 +1 @@
|
|||||||
MANIFEST-000340
|
MANIFEST-000386
|
||||||
|
@@ -1,7 +1,3 @@
|
|||||||
2025/07/09-17:04:59.062504 7f2a0dffb6c0 Recovering log #338
|
2025/07/14-21:08:15.916959 7f3fa5ffb6c0 Recovering log #384
|
||||||
2025/07/09-17:04:59.072990 7f2a0dffb6c0 Delete type=3 #336
|
2025/07/14-21:08:15.927715 7f3fa5ffb6c0 Delete type=3 #382
|
||||||
2025/07/09-17:04:59.073130 7f2a0dffb6c0 Delete type=0 #338
|
2025/07/14-21:08:15.927846 7f3fa5ffb6c0 Delete type=0 #384
|
||||||
2025/07/09-17:18:46.236069 7f276ffff6c0 Level-0 table #343: started
|
|
||||||
2025/07/09-17:18:46.236095 7f276ffff6c0 Level-0 table #343: 0 bytes OK
|
|
||||||
2025/07/09-17:18:46.287671 7f276ffff6c0 Delete type=0 #341
|
|
||||||
2025/07/09-17:18:46.287875 7f276ffff6c0 Manual compaction at level-0 from '!folders!5PrT9QmN1cFPzDFP' @ 72057594037927935 : 1 .. '!items!zvoUByzWSWZ87fxA' @ 0 : 0; will stop at (end)
|
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
2025/06/29-22:25:29.069935 7fda6d1f86c0 Recovering log #334
|
2025/07/14-10:18:19.359761 7f3fa67fc6c0 Recovering log #380
|
||||||
2025/06/29-22:25:29.081064 7fda6d1f86c0 Delete type=3 #332
|
2025/07/14-10:18:19.394536 7f3fa67fc6c0 Delete type=3 #378
|
||||||
2025/06/29-22:25:29.081192 7fda6d1f86c0 Delete type=0 #334
|
2025/07/14-10:18:19.394680 7f3fa67fc6c0 Delete type=0 #380
|
||||||
2025/06/29-22:26:56.360514 7fda5bbff6c0 Level-0 table #339: started
|
2025/07/14-20:48:52.889840 7f3fa57fa6c0 Level-0 table #385: started
|
||||||
2025/06/29-22:26:56.360577 7fda5bbff6c0 Level-0 table #339: 0 bytes OK
|
2025/07/14-20:48:52.889882 7f3fa57fa6c0 Level-0 table #385: 0 bytes OK
|
||||||
2025/06/29-22:26:56.370559 7fda5bbff6c0 Delete type=0 #337
|
2025/07/14-20:48:52.896159 7f3fa57fa6c0 Delete type=0 #383
|
||||||
2025/06/29-22:26:56.379992 7fda5bbff6c0 Manual compaction at level-0 from '!folders!5PrT9QmN1cFPzDFP' @ 72057594037927935 : 1 .. '!items!zvoUByzWSWZ87fxA' @ 0 : 0; will stop at (end)
|
2025/07/14-20:48:52.915114 7f3fa57fa6c0 Manual compaction at level-0 from '!folders!5PrT9QmN1cFPzDFP' @ 72057594037927935 : 1 .. '!items!zvoUByzWSWZ87fxA' @ 0 : 0; will stop at (end)
|
||||||
|
Binary file not shown.
BIN
packs-system/weapons/000014.ldb
Normal file
BIN
packs-system/weapons/000014.ldb
Normal file
Binary file not shown.
BIN
packs-system/weapons/000032.log
Normal file
BIN
packs-system/weapons/000032.log
Normal file
Binary file not shown.
1
packs-system/weapons/CURRENT
Normal file
1
packs-system/weapons/CURRENT
Normal file
@@ -0,0 +1 @@
|
|||||||
|
MANIFEST-000031
|
0
packs-system/weapons/LOCK
Normal file
0
packs-system/weapons/LOCK
Normal file
3
packs-system/weapons/LOG
Normal file
3
packs-system/weapons/LOG
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
2025/07/14-21:08:15.933872 7f3fa6ffd6c0 Recovering log #29
|
||||||
|
2025/07/14-21:08:15.943722 7f3fa6ffd6c0 Delete type=3 #27
|
||||||
|
2025/07/14-21:08:15.943845 7f3fa6ffd6c0 Delete type=0 #29
|
8
packs-system/weapons/LOG.old
Normal file
8
packs-system/weapons/LOG.old
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
2025/07/14-10:18:19.404246 7f3fa5ffb6c0 Recovering log #25
|
||||||
|
2025/07/14-10:18:19.435628 7f3fa5ffb6c0 Delete type=3 #23
|
||||||
|
2025/07/14-10:18:19.435765 7f3fa5ffb6c0 Delete type=0 #25
|
||||||
|
2025/07/14-20:48:52.908846 7f3fa57fa6c0 Level-0 table #30: started
|
||||||
|
2025/07/14-20:48:52.908888 7f3fa57fa6c0 Level-0 table #30: 0 bytes OK
|
||||||
|
2025/07/14-20:48:52.915004 7f3fa57fa6c0 Delete type=0 #28
|
||||||
|
2025/07/14-20:48:52.915133 7f3fa57fa6c0 Manual compaction at level-0 from '!folders!0DI3T2jve3nsmsfZ' @ 72057594037927935 : 1 .. '!items!zyxA9DhO36t5OBDv' @ 0 : 0; will stop at (end)
|
||||||
|
2025/07/14-20:48:52.928670 7f3fa57fa6c0 Manual compaction at level-1 from '!folders!0DI3T2jve3nsmsfZ' @ 72057594037927935 : 1 .. '!items!zyxA9DhO36t5OBDv' @ 0 : 0; will stop at (end)
|
BIN
packs-system/weapons/MANIFEST-000031
Normal file
BIN
packs-system/weapons/MANIFEST-000031
Normal file
Binary file not shown.
@@ -98,6 +98,23 @@ i.fvtt-cthulhu-eternal {
|
|||||||
color: var(--color-critical-failure);
|
color: var(--color-critical-failure);
|
||||||
font-family: var(--font-title);
|
font-family: var(--font-title);
|
||||||
}
|
}
|
||||||
|
.san-type-buttons {
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
margin: 10px 0;
|
||||||
|
button {
|
||||||
|
margin: 0 2px;
|
||||||
|
font-family: var(--font-primary);
|
||||||
|
font-size: calc(var(--font-size-standard) * 0.9);
|
||||||
|
border: none;
|
||||||
|
padding: 2px 2px;
|
||||||
|
cursor: pointer;
|
||||||
|
transition: background-color 0.3s;
|
||||||
|
min-width: 6.0rem;
|
||||||
|
max-width: 6.0rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
.san-loose-buttons {
|
.san-loose-buttons {
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
|
@@ -478,7 +478,7 @@
|
|||||||
}
|
}
|
||||||
.weapons {
|
.weapons {
|
||||||
display: grid;
|
display: grid;
|
||||||
grid-template-columns: repeat(2, 1fr);
|
grid-template-columns: repeat(1, 1fr);
|
||||||
gap: 4px;
|
gap: 4px;
|
||||||
.weapon {
|
.weapon {
|
||||||
display: flex;
|
display: flex;
|
||||||
@@ -496,10 +496,24 @@
|
|||||||
min-width: 1.8rem;
|
min-width: 1.8rem;
|
||||||
max-width: 1.8rem;
|
max-width: 1.8rem;
|
||||||
}
|
}
|
||||||
.damage {
|
.range {
|
||||||
min-width: 6rem;
|
min-width: 6rem;
|
||||||
max-width: 6rem;
|
max-width: 6rem;
|
||||||
}
|
}
|
||||||
|
.ammo {
|
||||||
|
min-width: 4rem;
|
||||||
|
max-width: 4rem;
|
||||||
|
}
|
||||||
|
.lethality {
|
||||||
|
display: flex;
|
||||||
|
min-width: 3.2rem;
|
||||||
|
max-width: 3.2rem;
|
||||||
|
}
|
||||||
|
.damage {
|
||||||
|
display: flex;
|
||||||
|
min-width: 12rem;
|
||||||
|
max-width: 12rem;
|
||||||
|
}
|
||||||
.name {
|
.name {
|
||||||
min-width: 10rem;
|
min-width: 10rem;
|
||||||
max-width: 10rem;
|
max-width: 10rem;
|
||||||
|
@@ -14,6 +14,24 @@
|
|||||||
fieldset {
|
fieldset {
|
||||||
margin-top: 8px;
|
margin-top: 8px;
|
||||||
background-color: var(--color-light-1);
|
background-color: var(--color-light-1);
|
||||||
|
input {
|
||||||
|
max-width: 5rem;
|
||||||
|
min-width: 5rem;
|
||||||
|
}
|
||||||
|
select {
|
||||||
|
max-width: 14rem;
|
||||||
|
min-width: 14rem;
|
||||||
|
}
|
||||||
|
input[type="checkbox"] {
|
||||||
|
max-width: 1.5rem;
|
||||||
|
min-width: 1.5rem;
|
||||||
|
}
|
||||||
|
.flexrow > *:not(:first-child) {
|
||||||
|
margin-left: 1rem;
|
||||||
|
}
|
||||||
|
.damage-distance {
|
||||||
|
margin-left: 2rem;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
label {
|
label {
|
||||||
|
12
system.json
12
system.json
@@ -152,6 +152,18 @@
|
|||||||
},
|
},
|
||||||
"flags": {}
|
"flags": {}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "weapons",
|
||||||
|
"label": "Weapons",
|
||||||
|
"system": "fvtt-cthulhu-eternal",
|
||||||
|
"path": "packs-system/weapons",
|
||||||
|
"type": "Item",
|
||||||
|
"ownership": {
|
||||||
|
"PLAYER": "OBSERVER",
|
||||||
|
"ASSISTANT": "OWNER"
|
||||||
|
},
|
||||||
|
"flags": {}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "rituals",
|
"name": "rituals",
|
||||||
"label": "Rituals",
|
"label": "Rituals",
|
||||||
|
@@ -8,11 +8,15 @@
|
|||||||
{{#if weapon.system.selectiveFireChoice}}
|
{{#if weapon.system.selectiveFireChoice}}
|
||||||
<li>{{weapon.system.selectiveFireChoiceLabel}}</li>
|
<li>{{weapon.system.selectiveFireChoiceLabel}}</li>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
{{#if weapon.system.killRadius}}
|
{{#if (gt weapon.system.killRadius 0)}}
|
||||||
<li>{{localize "CTHULHUETERNAL.Label.killRadius"}} : {{weapon.system.killRadius}} {{weapon.system.rangeUnit}}</li>
|
<li>{{localize "CTHULHUETERNAL.Label.killRadius"}} : {{weapon.system.killRadius}} {{weapon.system.rangeUnit}}</li>
|
||||||
<li>{{localize "CTHULHUETERNAL.Label.killRadiusInfo"}}</li>
|
<li>{{localize "CTHULHUETERNAL.Label.killRadiusInfo"}}</li>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
|
|
||||||
|
{{#if (gt weapon.system.armorPiercing 0)}}
|
||||||
|
<li>{{localize "CTHULHUETERNAL.Label.armorPiercing"}} : {{weapon.system.armorPiercing}}</li>
|
||||||
|
{{/if}}
|
||||||
|
|
||||||
{{#if ammoUsed}}
|
{{#if ammoUsed}}
|
||||||
<li>{{localize "CTHULHUETERNAL.Label.ammoUsed"}}: {{ammoUsed}} / {{weapon.system.ammo.value}}</li>
|
<li>{{localize "CTHULHUETERNAL.Label.ammoUsed"}}: {{ammoUsed}} / {{weapon.system.ammo.value}}</li>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
|
@@ -15,7 +15,7 @@
|
|||||||
{{/if}}
|
{{/if}}
|
||||||
|
|
||||||
{{#if isNudgedRoll}}
|
{{#if isNudgedRoll}}
|
||||||
<li><strong>{{localize "CTHULHUETERNAL.Label.nudgedRoll"}} : {{wpCost}} WP spent</strong></li>
|
<li><strong>{{localize "CTHULHUETERNAL.Label.nudgedRoll"}} : {{wpCost}} {{localize "CTHULHUETERNAL.Label.WPSpent"}}</strong></li>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
|
|
||||||
{{#if weapon}}
|
{{#if weapon}}
|
||||||
@@ -43,26 +43,13 @@
|
|||||||
{{#if (eq rollType "resource")}}
|
{{#if (eq rollType "resource")}}
|
||||||
<li>{{localize "CTHULHUETERNAL.Label.multiplier"}} : {{multiplier}}</li>
|
<li>{{localize "CTHULHUETERNAL.Label.multiplier"}} : {{multiplier}}</li>
|
||||||
{{else}}
|
{{else}}
|
||||||
<li>{{localize "CTHULHUETERNAL.Label.modifier"}} : {{modifier}}%</li>
|
<li>{{localize "CTHULHUETERNAL.Label.modifier"}} : {{totalModifier}}%</li>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
|
|
||||||
<li>{{localize "CTHULHUETERNAL.Label.targetScore"}} : {{targetScore}}%</li>
|
<li>{{localize "CTHULHUETERNAL.Label.targetScore"}} : {{targetScore}}%</li>
|
||||||
{{#if isSuccess}}
|
{{#if isSuccess}}
|
||||||
{{#if isCritical}}
|
{{#if isCritical}}
|
||||||
<li class="result-critical-success">{{localize "CTHULHUETERNAL.Label.criticalSuccess"}}
|
<li class="result-critical-success">{{localize "CTHULHUETERNAL.Label.criticalSuccess"}}
|
||||||
{{#if (eq rollType "weapon")}}
|
|
||||||
{{#if (eq weapon.system.weaponType "rangedfirearm")}}
|
|
||||||
<a class="damage-roll" data-tooltip="{{localize "CTHULHUETERNAL.Label.rollDamage"}}"><i class="fa-solid fa-gun"></i></a>
|
|
||||||
{{else}}
|
|
||||||
<a class="damage-roll" data-tooltip="{{localize "CTHULHUETERNAL.Label.rollDamage"}}"><i class="fa-solid fa-sword"></i></a>
|
|
||||||
{{/if}}
|
|
||||||
{{/if}}
|
|
||||||
{{#if (eq rollType "skill") }}
|
|
||||||
{{#if rollItem.system.isHealing}}
|
|
||||||
<a class="healing-roll" data-tooltip="{{localize "CTHULHUETERNAL.Label.rollHealing"}}"><i class="fa-solid fa-heart"></i></a>
|
|
||||||
{{/if}}
|
|
||||||
{{/if}}
|
|
||||||
|
|
||||||
</li>
|
</li>
|
||||||
{{else}}
|
{{else}}
|
||||||
<li class="result-success">
|
<li class="result-success">
|
||||||
@@ -70,38 +57,58 @@
|
|||||||
{{#if isNudge}}
|
{{#if isNudge}}
|
||||||
<a class="nudge-roll" data-tooltip="{{localize "CTHULHUETERNAL.Label.rollNudge"}}"><i class="fa-solid fa-circle-sort-down"></i></a>
|
<a class="nudge-roll" data-tooltip="{{localize "CTHULHUETERNAL.Label.rollNudge"}}"><i class="fa-solid fa-circle-sort-down"></i></a>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
{{#if (eq weapon.system.weaponType "rangedfirearm")}}
|
|
||||||
<a class="damage-roll" data-tooltip="{{localize "CTHULHUETERNAL.Label.rollDamage"}}"><i class="fa-solid fa-gun"></i></a>
|
</li>
|
||||||
|
{{/if}}
|
||||||
|
{{#if (eq rollType "weapon")}}
|
||||||
|
<li>
|
||||||
|
{{#if (eq weapon.system.weaponType "rangedfirearm")}}
|
||||||
|
{{#if weapon.system.hasDamageDistance}}
|
||||||
|
{{#each weapon.system.damageDistance as |damageDistance|}}
|
||||||
|
{{#if (gt damageDistance.distance 0)}}
|
||||||
|
<a class="damage-roll" data-item-id="{{weapon.id}}" data-action="roll" data-roll-type="damage"
|
||||||
|
data-roll-value="{{damageDistance.damage}}" >
|
||||||
|
<i class="fa-solid fa-gun"></i>
|
||||||
|
<span class="damage-distance">{{damageDistance.distance}}:{{damageDistance.damage}} </span>
|
||||||
|
</a>
|
||||||
|
{{/if}}
|
||||||
|
{{/each}}
|
||||||
{{else}}
|
{{else}}
|
||||||
<a class="damage-roll" data-tooltip="{{localize "CTHULHUETERNAL.Label.rollDamage"}}"><i class="fa-solid fa-sword"></i></a>
|
<a class="damage-roll" data-roll-value="{{weapon.system.damage}}" data-tooltip="{{localize "CTHULHUETERNAL.Label.rollDamage"}}"><i class="fa-solid fa-gun"></i></a>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
|
{{else}}
|
||||||
|
<a class="damage-roll" data-roll-value="{{weapon.system.damage}}" data-tooltip="{{localize "CTHULHUETERNAL.Label.rollDamage"}}"><i class="fa-solid fa-sword"></i></a>
|
||||||
|
{{/if}}
|
||||||
|
</li>
|
||||||
|
{{/if}}
|
||||||
{{#if (eq rollType "skill") }}
|
{{#if (eq rollType "skill") }}
|
||||||
{{#if rollItem.system.isHealing}}
|
{{#if rollItem.system.isHealing}}
|
||||||
|
<li>
|
||||||
<a class="healing-roll" data-tooltip="{{localize "CTHULHUETERNAL.Label.rollHealing"}}"><i class="fa-solid fa-heart"></i></a>
|
<a class="healing-roll" data-tooltip="{{localize "CTHULHUETERNAL.Label.rollHealing"}}"><i class="fa-solid fa-heart"></i></a>
|
||||||
|
</li>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
{{/if}}
|
{{/if}}
|
||||||
</li>
|
</li>
|
||||||
{{/if}}
|
|
||||||
|
|
||||||
{{/if}}
|
{{/if}}
|
||||||
|
|
||||||
{{#if isFailure}}
|
{{#if isFailure}}
|
||||||
{{#if isCritical}}
|
{{#if isCritical}}
|
||||||
<li class="result-critical-failure">{{localize "CTHULHUETERNAL.Label.criticalFailure"}}
|
<li class="result-critical-failure">{{localize "CTHULHUETERNAL.Label.criticalFailure"}}
|
||||||
{{#if (eq rollType "skill") }}
|
</li>
|
||||||
{{#if rollItem.system.isHealing}}
|
{{else}}
|
||||||
<a class="healing-roll" data-tooltip="{{localize "CTHULHUETERNAL.Label.rollHealing"}}"><i class="fa-solid fa-heart"></i></a>
|
<li class="result-failure">
|
||||||
{{/if}}
|
{{localize "CTHULHUETERNAL.Label.failure"}}
|
||||||
{{/if}}
|
|
||||||
</li>
|
</li>
|
||||||
{{else}}
|
|
||||||
<li class="result-failure">
|
|
||||||
{{localize "CTHULHUETERNAL.Label.failure"}}
|
|
||||||
{{#if isNudge}}
|
|
||||||
<a class="nudge-roll" data-tooltip="{{localize "CTHULHUETERNAL.Label.rollNudge"}}"><i class="fa-solid fa-circle-sort-down"></i></a>
|
|
||||||
{{/if}}
|
{{/if}}
|
||||||
</li>
|
|
||||||
{{/if}}
|
{{#if isNudge}}
|
||||||
|
<li>
|
||||||
|
<a class="nudge-roll" data-tooltip="{{localize "CTHULHUETERNAL.Label.rollNudge"}}"><i class="fa-solid fa-circle-sort-down"></i></a>
|
||||||
|
</li>
|
||||||
|
{{/if}}
|
||||||
|
|
||||||
|
|
||||||
{{/if}}
|
{{/if}}
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
@@ -4,11 +4,15 @@
|
|||||||
<li><strong>{{weapon.name}} : {{localize "CTHULHUETERNAL.Label.damageRoll"}}</strong></li>
|
<li><strong>{{weapon.name}} : {{localize "CTHULHUETERNAL.Label.damageRoll"}}</strong></li>
|
||||||
<li>{{localize "CTHULHUETERNAL.Label.result"}} :{{rollResult}} ({{formula}})</li>
|
<li>{{localize "CTHULHUETERNAL.Label.result"}} :{{rollResult}} ({{formula}})</li>
|
||||||
|
|
||||||
{{#if weapon.system.killRadius}}
|
{{#if (gt weapon.system.killRadius 0)}}
|
||||||
<li>{{localize "CTHULHUETERNAL.Label.killRadius"}} : {{weapon.system.killRadius}} {{weapon.system.rangeUnit}}</li>
|
<li>{{localize "CTHULHUETERNAL.Label.killRadius"}} : {{weapon.system.killRadius}} {{weapon.system.rangeUnit}}</li>
|
||||||
<li>{{localize "CTHULHUETERNAL.Label.killRadiusInfo"}}</li>
|
<li>{{localize "CTHULHUETERNAL.Label.killRadiusInfo"}}</li>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
|
|
||||||
|
{{#if (gt weapon.system.armorPiercing 0)}}
|
||||||
|
<li>{{localize "CTHULHUETERNAL.Label.armorPiercing"}} : {{weapon.system.armorPiercing}}</li>
|
||||||
|
{{/if}}
|
||||||
|
|
||||||
{{#if ammoUsed}}
|
{{#if ammoUsed}}
|
||||||
<li>{{localize "CTHULHUETERNAL.Label.ammoUsed"}}: {{ammoUsed}} / {{weapon.system.ammo.value}}</li>
|
<li>{{localize "CTHULHUETERNAL.Label.ammoUsed"}}: {{ammoUsed}} / {{weapon.system.ammo.value}}</li>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
|
8
templates/chat-san-loss-none.hbs
Normal file
8
templates/chat-san-loss-none.hbs
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
<div class="{{cssClass}}">
|
||||||
|
<div class="chat-san-request">
|
||||||
|
<ul>
|
||||||
|
<li><strong>{{localize "CTHULHUETERNAL.Label.SANLossNone"}}</strong></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
8
templates/chat-san-loss-unnatural.hbs
Normal file
8
templates/chat-san-loss-unnatural.hbs
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
<div class="{{cssClass}}">
|
||||||
|
<div class="chat-san-request">
|
||||||
|
<ul>
|
||||||
|
<li><strong>{{localize "CTHULHUETERNAL.Label.SANLossUnnatural"}}</strong></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
@@ -1,7 +1,11 @@
|
|||||||
<div class="{{cssClass}}">
|
<div class="{{cssClass}}">
|
||||||
<div class="chat-san-request">
|
<div class="chat-san-request">
|
||||||
<ul>
|
<ul>
|
||||||
<li><strong>{{localize "CTHULHUETERNAL.Label.SANTest"}}</strong></li>
|
{{#if rollData.isSuccess}}
|
||||||
|
<li><strong>{{localize "CTHULHUETERNAL.Label.SANTestSuccess"}}</strong></li>
|
||||||
|
{{else}}
|
||||||
|
<li><strong>{{localize "CTHULHUETERNAL.Label.SANTestFailure"}}</strong></li>
|
||||||
|
{{/if}}
|
||||||
|
|
||||||
<li class="san-loose-buttons">
|
<li class="san-loose-buttons">
|
||||||
<button class="san-loose" data-san-value="0">0</button>
|
<button class="san-loose" data-san-value="0">0</button>
|
||||||
|
@@ -16,11 +16,64 @@
|
|||||||
{{item.name}}
|
{{item.name}}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<img src="systems/fvtt-cthulhu-eternal/assets/ui/d100.svg" class="d100" />
|
<div class="damage" data-tooltip="{{localize 'CTHULHUETERNAL.Tooltip.rollDamage'}}">
|
||||||
<a class="damage rollable" data-item-id="{{item.id}}" data-action="roll" data-roll-type="damage"
|
{{#if (eq system.lethality 0)}}
|
||||||
data-roll-value="{{item.system.damage}}">
|
<img src="systems/fvtt-cthulhu-eternal/assets/ui/d100.svg" class="d100" />
|
||||||
{{localize "CTHULHUETERNAL.Label.damageShort"}} :
|
|
||||||
{{item.system.damage}}</a>
|
{{#if item.system.hasDamageDistance}}
|
||||||
|
{{#each item.system.damageDistance as |damageDistance|}}
|
||||||
|
{{#if (gt damageDistance.distance 0)}}
|
||||||
|
<a class="rollable" data-item-id="{{item.id}}" data-action="roll" data-roll-type="damage"
|
||||||
|
data-roll-value="{{damageDistance.damage}}" >
|
||||||
|
<span class="damage-distance">{{damageDistance.distance}}:{{damageDistance.damage}} </span>
|
||||||
|
</a>
|
||||||
|
{{/if}}
|
||||||
|
{{/each}}
|
||||||
|
{{else}}
|
||||||
|
<a class="rollable" data-item-id="{{item.id}}" data-action="roll" data-roll-type="damage"
|
||||||
|
data-roll-value="{{item.system.damage}}" >
|
||||||
|
{{item.system.damage}}
|
||||||
|
</a>
|
||||||
|
{{/if}}
|
||||||
|
{{else}}
|
||||||
|
N/A
|
||||||
|
{{/if}}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{{#if (gt system.baseRange 0)}}
|
||||||
|
<span class="range" data-tooltip="CTHULHUETERNAL.Label.baseRange">{{item.system.baseRange}} {{item.system.rangeUnit}}</span>
|
||||||
|
{{else}}
|
||||||
|
<span class="range">{{localize "CTHULHUETERNAL.Label.melee"}}</span>
|
||||||
|
{{/if}}
|
||||||
|
|
||||||
|
{{#if (gt system.lethality 0)}}
|
||||||
|
<a class="lethality rollable" data-item-id="{{item.id}}" data-action="roll" data-roll-type="damage"
|
||||||
|
data-tooltip="CTHULHUETERNAL.Label.Lethality" >
|
||||||
|
<img src="systems/fvtt-cthulhu-eternal/assets/ui/d100.svg" class="d100" />
|
||||||
|
{{item.system.lethality}}%
|
||||||
|
</a>
|
||||||
|
{{else}}
|
||||||
|
<span class="lethality" data-tooltip="CTHULHUETERNAL.Label.Lethality">-</span>
|
||||||
|
{{/if}}
|
||||||
|
|
||||||
|
{{#if (gt system.killRadius 0)}}
|
||||||
|
<span class="lethality" data-tooltip="CTHULHUETERNAL.Label.killRadius" >{{item.system.killRadius}}</span>
|
||||||
|
{{else}}
|
||||||
|
<span class="lethality" data-tooltip="CTHULHUETERNAL.Label.killRadius">-</span>
|
||||||
|
{{/if}}
|
||||||
|
|
||||||
|
{{#if (gt system.armorPiercing 0)}}
|
||||||
|
<span class="lethality" data-tooltip="CTHULHUETERNAL.Label.armorPiercing" >{{item.system.armorPiercing}}</span>
|
||||||
|
{{else}}
|
||||||
|
<span class="lethality" data-tooltip="CTHULHUETERNAL.Label.armorPiercing">-</span>
|
||||||
|
{{/if}}
|
||||||
|
|
||||||
|
{{#if (eq system.weaponType "rangedfirearm")}}
|
||||||
|
<span class="ammo" data-tooltip="CTHULHUETERNAL.Label.Ammo" >{{item.system.ammo.value}}/{{item.system.ammo.max}}</span>
|
||||||
|
{{else}}
|
||||||
|
<span class="ammo" data-tooltip="CTHULHUETERNAL.Label.Ammo">N/A</span>
|
||||||
|
{{/if}}
|
||||||
|
|
||||||
<div class="controls">
|
<div class="controls">
|
||||||
<a data-tooltip="{{localize 'CTHULHUETERNAL.Edit'}}" data-action="edit" data-item-id="{{item.id}}"
|
<a data-tooltip="{{localize 'CTHULHUETERNAL.Edit'}}" data-action="edit" data-item-id="{{item.id}}"
|
||||||
data-item-uuid="{{item.uuid}}"><i class="fas fa-edit"></i></a>
|
data-item-uuid="{{item.uuid}}"><i class="fas fa-edit"></i></a>
|
||||||
|
@@ -12,28 +12,87 @@
|
|||||||
<div class="dialog-skill">{{rollItem.name}} : <span class="resource-score">{{initialScore}} ({{mul initialScore 5}}%)</span></div>
|
<div class="dialog-skill">{{rollItem.name}} : <span class="resource-score">{{initialScore}} ({{mul initialScore 5}}%)</span></div>
|
||||||
<div class="dialog-skill">{{localize "CTHULHUETERNAL.Label.Hand"}} : {{rollItem.hand}} <input type="checkbox" data-action="selectHand" {{checked rollItem.enableHand}}></div>
|
<div class="dialog-skill">{{localize "CTHULHUETERNAL.Label.Hand"}} : {{rollItem.hand}} <input type="checkbox" data-action="selectHand" {{checked rollItem.enableHand}}></div>
|
||||||
<div class="dialog-skill">{{localize "CTHULHUETERNAL.Label.Stowed"}} : {{rollItem.stowed}} <input type="checkbox" data-action="selectStowed" {{checked rollItem.enableStowed}}></div>
|
<div class="dialog-skill">{{localize "CTHULHUETERNAL.Label.Stowed"}} : {{rollItem.stowed}} <input type="checkbox" data-action="selectStowed" {{checked rollItem.enableStowed}}></div>
|
||||||
<div class="dialog-skill">{{localize "CTHULHUETERNAL.Label.Storage"}} : {{rollItem.storage}} <input type="checkbox" data-action="selectStorage" {{checked rollItem.enableStorage}}></div>
|
<div class="dialog-skill">
|
||||||
|
{{localize "CTHULHUETERNAL.Label.Storage"}} : {{rollItem.storage}}
|
||||||
|
<input type="checkbox" data-action="selectStorage" {{checked rollItem.enableStorage}}>
|
||||||
|
</div>
|
||||||
{{else}}
|
{{else}}
|
||||||
<div class="dialog-skill">{{rollItem.name}} : {{initialScore}}%</div>
|
<div class="dialog-skill">{{rollItem.name}} : {{initialScore}}%</div>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
|
|
||||||
{{#if weapon}}
|
{{#if weapon}}
|
||||||
<div class="dialog-skill">{{localize "CTHULHUETERNAL.Label.Weapon"}} : {{weapon.name}}</div>
|
<div class="dialog-skill">{{localize "CTHULHUETERNAL.Label.Weapon"}} : {{weapon.name}}</div>
|
||||||
|
|
||||||
|
{{#if (eq weapon.system.weaponType "melee")}}
|
||||||
|
<div class="dialog-skill">
|
||||||
|
{{localize "CTHULHUETERNAL.Label.targetMove"}}
|
||||||
|
<select name="meleeTargetMoveChoice" class="roll-skill-modifier">
|
||||||
|
{{selectOptions choiceMeleeTargetMove localize=true selected=meleeTargetMoveChoice valueAttr="id" labelAttr="label"}}
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
{{/if}}
|
||||||
|
{{#if isRangedWeapon}}
|
||||||
|
<div class="dialog-skill">
|
||||||
|
{{localize "CTHULHUETERNAL.Label.rangedRange"}}
|
||||||
|
<select name="rangedRangeChoice" class="roll-skill-modifier">
|
||||||
|
{{selectOptions choiceRangedRange localize=true selected=rangedRangeChoice valueAttr="id" labelAttr="label"}}
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<div class="dialog-skill">
|
||||||
|
{{localize "CTHULHUETERNAL.Label.targetMove"}}
|
||||||
|
<select name="rangedTargetMoveChoice" class="roll-skill-modifier">
|
||||||
|
{{selectOptions choiceRangedTargetMove localize=true selected=rangedTargetMoveChoice valueAttr="id" labelAttr="label"}}
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="dialog-skill">
|
||||||
|
{{localize "CTHULHUETERNAL.Label.aimingLastRound"}}
|
||||||
|
<input type="checkbox" name="aimingLastRound">
|
||||||
|
</div>
|
||||||
|
{{#if weapon.system.hasSight}}
|
||||||
|
<div class="dialog-skill">
|
||||||
|
{{localize "CTHULHUETERNAL.Label.aimingWithSight"}}
|
||||||
|
<input type="checkbox" name="aimingWithSight">
|
||||||
|
</div>
|
||||||
|
{{/if}}
|
||||||
|
|
||||||
|
{{/if}}
|
||||||
|
|
||||||
|
<div class="dialog-skill">
|
||||||
|
{{localize "CTHULHUETERNAL.Label.visibility"}}
|
||||||
|
<select name="visibilityChoice" class="roll-skill-modifier">
|
||||||
|
{{selectOptions choiceVisibility localize=true selected=visibilityChoice valueAttr="id" labelAttr="label"}}
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<div class="dialog-skill">
|
||||||
|
{{localize "CTHULHUETERNAL.Label.attackerState"}}
|
||||||
|
<select name="attackerStateChoice" class="roll-skill-modifier">
|
||||||
|
{{selectOptions choiceAttackerState localize=true selected=attackerStateChoice valueAttr="id" labelAttr="label"}}
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<div class="dialog-skill">
|
||||||
|
{{localize "CTHULHUETERNAL.Label.targetSize"}}
|
||||||
|
<select name="targetSizeChoice" class="roll-skill-modifier">
|
||||||
|
{{selectOptions choiceTargetSize localize=true selected=targetSizeChoice valueAttr="id" labelAttr="label"}}
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
|
||||||
{{#if weapon.system.hasSelectiveFire}}
|
{{#if weapon.system.hasSelectiveFire}}
|
||||||
<div class="dialog-skill">Selective Fire :
|
<div class="dialog-skill">Selective Fire :
|
||||||
<select name="selectiveFireChoice" class="roll-skill-modifier">
|
<select name="selectiveFireChoice" class="roll-skill-modifier">
|
||||||
{{selectOptions choiceSelectiveFire localize=true selected=selectiveFireChoice nameAttr="id" labelAttr="label"}}
|
{{selectOptions choiceSelectiveFire localize=true selected=selectiveFireChoice valueAttr="id" labelAttr="label"}}
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
|
|
||||||
{{/if}}
|
{{/if}}
|
||||||
|
|
||||||
{{#if isZeroWP}}
|
{{#if isZeroWP}}
|
||||||
<div class="dialog-skill red-warning">{{localize "CTHULHUETERNAL.Label.ZeroWP"}}</div>
|
<div class="dialog-skill red-warning">{{localize "CTHULHUETERNAL.Label.ZeroWP"}}</div>
|
||||||
{{else}}
|
{{else}}
|
||||||
{{#if isLowWP}}
|
{{#if isLowWP}}
|
||||||
<div class="dialog-skill orange-warning">{{localize "CTHULHUETERNAL.Label.LowWP"}} : -20%</div>
|
<div class="dialog-skill orange-warning">{{localize "CTHULHUETERNAL.Label.LowWP"}} : -20%</div>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
{{/if}}
|
{{/if}}
|
||||||
|
|
||||||
{{#if isExhausted}}
|
{{#if isExhausted}}
|
||||||
|
@@ -12,32 +12,60 @@
|
|||||||
{{/if}}
|
{{/if}}
|
||||||
|
|
||||||
{{formField systemFields.state value=system.state localize=true}}
|
{{formField systemFields.state value=system.state localize=true}}
|
||||||
|
{{formField systemFields.isStunning value=system.isStunning localize=true}}
|
||||||
|
|
||||||
|
<div class="flexrow">
|
||||||
{{formField systemFields.hasDirectSkill value=system.hasDirectSkill }}
|
{{formField systemFields.hasDirectSkill value=system.hasDirectSkill }}
|
||||||
{{#if system.hasDirectSkill}}
|
{{#if system.hasDirectSkill}}
|
||||||
{{formField systemFields.directSkillValue value=system.directSkillValue }}
|
{{formField systemFields.directSkillValue value=system.directSkillValue }}
|
||||||
{{/if}}
|
{{/if}}
|
||||||
|
</div>
|
||||||
|
|
||||||
{{formField systemFields.applyDamageBonus value=system.applyDamageBonus}}
|
<div class="flexrow">
|
||||||
{{formField systemFields.damage value=system.damage}}
|
{{formField systemFields.hasDamageDistance value=system.hasDamageDistance localize=true}}
|
||||||
|
</div>
|
||||||
|
|
||||||
{{#if isRanged}}
|
{{#if system.hasDamageDistance}}
|
||||||
{{formField systemFields.baseRange value=system.baseRange}}
|
{{#each system.damageDistance as |damageDistance idx|}}
|
||||||
{{formField systemFields.rangeUnit value=system.rangeUnit localize=true}}
|
<div class="flexrow">
|
||||||
|
<label class="damage-distance">Distance</label><input type="number" name="system.damageDistance.{{idx}}.distance" value="{{damageDistance.distance}}" min="0" />
|
||||||
|
<label>Damage</label><input type="text" name="system.damageDistance.{{idx}}.damage" value="{{damageDistance.damage}}" />
|
||||||
|
</div>
|
||||||
|
{{/each}}
|
||||||
|
{{else}}
|
||||||
|
<div class="flexrow">
|
||||||
|
{{formField systemFields.damage value=system.damage}}
|
||||||
|
{{formField systemFields.applyDamageBonus value=system.applyDamageBonus}}
|
||||||
|
</div>
|
||||||
|
{{#if isRanged}}
|
||||||
|
<div class="flexrow">
|
||||||
|
{{formField systemFields.baseRange value=system.baseRange}}
|
||||||
|
{{formField systemFields.rangeUnit value=system.rangeUnit localize=true}}
|
||||||
|
</div>
|
||||||
|
{{/if}}
|
||||||
{{/if}}
|
{{/if}}
|
||||||
|
|
||||||
{{#if isFireArm}}
|
{{#if isFireArm}}
|
||||||
|
<div class="flexrow">
|
||||||
{{formField systemFields.hasSelectiveFire value=system.hasSelectiveFire}}
|
{{formField systemFields.hasSelectiveFire value=system.hasSelectiveFire}}
|
||||||
|
{{formField systemFields.hasSight value=system.hasSight}}
|
||||||
|
</div>
|
||||||
|
<div class="flexrow">
|
||||||
{{formField systemFields.ammo.fields.value value=system.ammo.value}}
|
{{formField systemFields.ammo.fields.value value=system.ammo.value}}
|
||||||
{{formField systemFields.ammo.fields.max value=system.ammo.max}}
|
{{formField systemFields.ammo.fields.max value=system.ammo.max}}
|
||||||
|
</div>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
|
|
||||||
{{formField systemFields.lethality value=system.lethality}}
|
<div class="flexrow">
|
||||||
{{formField systemFields.killRadius value=system.killRadius}}
|
{{formField systemFields.lethality value=system.lethality}}
|
||||||
|
{{formField systemFields.killRadius value=system.killRadius}}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="flexrow">
|
||||||
{{formField systemFields.armorPiercing value=system.armorPiercing}}
|
{{formField systemFields.armorPiercing value=system.armorPiercing}}
|
||||||
|
|
||||||
{{formField systemFields.resourceLevel value=system.resourceLevel}}
|
{{formField systemFields.resourceLevel value=system.resourceLevel}}
|
||||||
|
</div>
|
||||||
|
|
||||||
</fieldset>
|
</fieldset>
|
||||||
|
|
||||||
<fieldset>
|
<fieldset>
|
||||||
|
Reference in New Issue
Block a user