From d3305b957e3a2305af0fbc4b0065ce83902bd1eb Mon Sep 17 00:00:00 2001 From: Alex Date: Tue, 30 Jun 2026 12:22:28 +0200 Subject: [PATCH] Add manual target override to skill check Allow setting an explicit target number to roll against instead of the computed Per+training+mod. Works with no sheet skill selected (e.g. a GM-set 'roll vs 43'). Empty field keeps the auto-computed behaviour. Co-Authored-By: Claude Opus 4.8 --- src/components/DeathwatchRoller.jsx | 44 +++++++++++++++++++---------- 1 file changed, 29 insertions(+), 15 deletions(-) diff --git a/src/components/DeathwatchRoller.jsx b/src/components/DeathwatchRoller.jsx index ee7caa2..1e58a85 100755 --- a/src/components/DeathwatchRoller.jsx +++ b/src/components/DeathwatchRoller.jsx @@ -466,6 +466,7 @@ function DeathwatchRoller({ authedPlayer }) { const [skillRollName, setSkillRollName] = useState('') const [skillRollModifier, setSkillRollModifier] = useState(0) const [manualSkillRoll, setManualSkillRoll] = useState('') + const [skillTargetOverride, setSkillTargetOverride] = useState('') // Load enemies from database API async function loadEnemiesFromAPI() { @@ -1200,6 +1201,11 @@ function DeathwatchRoller({ authedPlayer }) { const selectedSkillBase = characteristicValue(playerCharacteristics, selectedSkillCharacteristic, 45) const selectedSkillTrainingBonus = skillTrainingBonus(selectedSkill) const selectedSkillTarget = Math.max(1, Math.min(100, selectedSkillBase + selectedSkillTrainingBonus + (Number(skillRollModifier) || 0))) + const skillTargetOverrideNum = parseInt(String(skillTargetOverride).trim(), 10) + const hasSkillTargetOverride = String(skillTargetOverride).trim() !== '' && Number.isFinite(skillTargetOverrideNum) + const effectiveSkillTarget = hasSkillTargetOverride + ? Math.max(1, Math.min(100, skillTargetOverrideNum)) + : selectedSkillTarget const woundPct = maxWounds>0 ? Math.max(0, Math.min(100, (curWounds/maxWounds)*100)) : 0 const status = curWounds<=0 ? 'Dead' : (curWoundsSkill Check
Uses this player sheet's skills and characteristics.
- + -
+
setSkillRollModifier(parseInt(e.target.value||'0', 10))} /> + setSkillRollModifier(parseInt(e.target.value||'0', 10))} disabled={hasSkillTargetOverride} /> +
+
+ + setSkillTargetOverride(e.target.value)} />
@@ -1492,8 +1504,10 @@ function DeathwatchRoller({ authedPlayer }) {
- Target {selectedSkillTarget} - {skillRollName && ( + Target {effectiveSkillTarget} + {hasSkillTargetOverride ? ( + = manual target + ) : skillRollName && ( = {selectedSkillCharacteristic} {selectedSkillBase} {selectedSkillTrainingBonus >= 0 ? '+' : ''}{selectedSkillTrainingBonus} training {Number(skillRollModifier) ? `${Number(skillRollModifier) > 0 ? '+' : ''}${Number(skillRollModifier)} mod` : '+0 mod'} )}