From 2b81bfcf10e236578707ffc671c17b5187e51599 Mon Sep 17 00:00:00 2001 From: mjeffw Date: Wed, 27 Nov 2024 15:04:41 -0500 Subject: [PATCH] Remove the homebrew rules from the modifier bucket, add MA maneuvers to the bucket, and/or allow users to edit the modifier bucket. #2023 --- changelog.md | 1 + lang/de.json | 5 +- lang/en.json | 142 ++++++++++++++---- module/modifier-bucket/tooltip-window.js | 102 +++++++------ styles/apps.css | 40 +++-- templates/modifier-bucket/tooltip-window.html | 1 + 6 files changed, 203 insertions(+), 88 deletions(-) diff --git a/changelog.md b/changelog.md index 887d2adcb..fc7ec1b3a 100644 --- a/changelog.md +++ b/changelog.md @@ -8,6 +8,7 @@ Release 0.17.16 - Bugfix: Attack mixup if weapon name differs only in a postfix #2025 - Bugfix: Damage dropping not working as intended #2007 - Bugfix: Duplicating the specialization name to other skills #2035 +- Feature: Remove the homebrew rules from the modifier bucket, add MA maneuvers to the bucket, and/or allow users to edit the modifier bucket. #2023 Release 0.17.15 10/31/2024 diff --git a/lang/de.json b/lang/de.json index 3bd8899d0..ed4735bac 100644 --- a/lang/de.json +++ b/lang/de.json @@ -18,6 +18,9 @@ "modified": "Modifiziert", "options": "Optionen" } + }, + "modifiers": { + "determinedAttack": "Entschlossener Angriff" } }, "__Char Sheet__": "=========", @@ -465,7 +468,7 @@ "GURPS.modifierQuality": "Ausrüstungs Qualität", "GURPS.modifierQualityBest": "Best Mögliche", "GURPS.modifierQualityFine": "Ausgezeichnete Qualität (Kosten ×20)", - "GURPS.modifierQualityGood": "Gute Qualität (Kosten ×5", + "GURPS.modifierQualityGood": "Gute Qualität (Kosten ×5)", "GURPS.modifierQualityImprovised": "Improvisiert", "GURPS.modifierQualityImprovTech": "Improvisiert (technologisch)", "GURPS.modifierQualityMissing": "Fehlende/Beschädigte Ausrüstung", diff --git a/lang/en.json b/lang/en.json index 7236fae21..af5e8830c 100755 --- a/lang/en.json +++ b/lang/en.json @@ -22,8 +22,118 @@ "gcs": { "copyright": "GCS is copyrighted 1998-2024 by Richard A. Wilkes. All rights reserved." } + }, + "modifiers": { + "aim": "to hit (Aim)", + "allOutAim": "to Aiming (All-Out Aim)", + "allOutAimBraced": "to Aiming (All-Out Aim: Braced)", + "aoaDetermined": "to hit (AoA: Determined)", + "aoaRanged": "to hit (AoA: Ranged)", + "aoaRangedDetermined": "to hit (AoA: Determined)", + "aoaStrong": "damage (AoA: Strong)", + "aodIncreased": "to defense (AoD: Increased)", + "blockRetreat": "to Block/Parry (Retreat)", + "committedAim": "to Aiming (Committed Aim)", + "committedAimBraced": "to Aiming (Committed Aim: Braced)", + "committedAimDefense": "to defense (Committed Aim)", + "committedAttackRanged": "to hit (Committed Attack (Ranged))", + "committedDetermined": "to hit (Committed: Determined)", + "committedRanged": "to hit (Committed: Ranged)", + "committedStrong": "damage (Committed: Strong)", + "deceptive": "to hit (Deceptive Attack)", + "deceptiveDefense": "to defense (Deceptive Attack)", + "defenseSide": "to defense (attacked from side)", + "defensive": "damage (Defensive Attack)", + "defensiveDefense": "to Parry/Block (Defensive)", + "dodgeAcrobatic": "to Dodge (Acrobatic, success)", + "dodgeAcrobaticFail": "to Dodge (Acrobatic, fail)", + "dodgeAndDrop": "to Dodge (Dodge and Drop)", + "dodgeRetreat": "to Dodge (Retreat)", + "extraEffort": "Extra Effort", + "fencingRetreat": "to Parry (Fencing, etc. Retreat)", + "feverishDefense": "to defense (Feverish)", + "heroicCharge": "Heroic Charge", + "mightyBlow": "damage (Mighty Blow)", + "moveAndAttack": "to hit (Move and Attack)", + "onTargetAiming": "On Target", + "popup": "to hit (Popup Attack)", + "rapidStrike": "to hit (Rapid Strike)", + "riposte": "to attack or defense (Riposte)", + "shieldDB": "to defense (Shield DB)", + "telegraphic": "to hit (Telegraphic Attack)", + "pdf": { + "aim": "B364", + "allOutAim": "PY77:25", + "allOutAimBraced": "PY77:25", + "aoaDetermined": "B365", + "aoaRanged": "PY77:26", + "aoaRangedDetermined": "B365", + "aoaStrong": "B365", + "aodIncreased": "B366", + "blockRetreat": "B377", + "committedAim": "PY77:25", + "committedAimBraced": "PY77:25", + "committedAimDefense": "PY77:25", + "committedAttackRanged": "PY77:26", + "committedDetermined": "MA99", + "committedRanged": "PY77:26", + "committedStrong": "MA99", + "deceptive": "B369", + "deceptiveDefense": "B369", + "defenseSide": "B390", + "defensive": "MA100", + "defensiveDefense": "MA100", + "dodgeAcrobatic": "B374", + "dodgeAcrobaticFail": "B374", + "dodgeAndDrop": "B377", + "dodgeRetreat": "B377", + "extraEffort": "B357", + "fencingRetreat": "B377", + "feverishDefense": "B357", + "heroicCharge": "MA131", + "mightyBlow": "MA131", + "moveAndAttack": "B365", + "parryRear": "B390", + "popup": "B390", + "rapidStrike": "B370", + "riposte": "MA124", + "shieldDB": "B374", + "telegraphic": "MA113" + } } }, + "GURPS.aim": "Aim", + "GURPS.aiming": "Aiming", + "GURPS.allOutDefense": "All-Out Defense", + "GURPS.modifierAimAllOutAim": "to Aiming rolls (All-Out Aim)", + "GURPS.modifierAimAllOutAimBraced": "to Aiming rolls if braced (All-Out Aim)", + "GURPS.modifierAimCommittedAim": "to Aiming rolls (Committed Aim)", + "GURPS.modifierAimCommittedAimBraced": "to Aiming rolls if braced (Committed Aim)", + "GURPS.modifierAllOutAttackRanged": "to hit (All-Out Attack (Ranged))", + "GURPS.modifierBlockRetreat": "to Block/Parry (retreat)", + "GURPS.modifierCommittedAttackRanged": "to hit (Committed Attack (Ranged))", + "GURPS.modifierDeceptiveAttack": "to hit (Deceptive Attack)", + "GURPS.modifierDefDeceptiveAttack": "to defenses due to Deceptive attack", + "GURPS.modifierDefenseCommittedAim": "to defenses due to Committed Aim", + "GURPS.modifierDefenseCommittedAttackRanged": "to defenses due to Committed Attack (Ranged)", + "GURPS.modifierDeterminedAttack": "to hit (Determined Attack)", + "GURPS.modifierDodgeAcrobatic": "to Dodge (Acrobatics, success)", + "GURPS.modifierDodgeDive": "to Dodge (dodge and drop)", + "GURPS.modifierDodgeFailedAcro": "to Dodge (Acrobatics, failed)", + "GURPS.modifierDodgeRear": "to Dodge (attacked from rear)", + "GURPS.modifierDodgeRetreat": "to Dodge (retreat)", + "GURPS.modifierDodgeSide": "to Dodge (attacked from side)", + "GURPS.modifierExtraEffort": "Extra Effort", + "GURPS.modifierFeverishDef": "Feverish Defense", + "GURPS.modifierHeroicCharge": "Heroic Charge", + "GURPS.modifierMaintainConcentration": "to Will Check, to maintain concentration", + "GURPS.modifierMightyBlow": "damage (Mighty Blow)", + "GURPS.modifierMoveAttack": "to hit (Move and Attack)", + "GURPS.modifierShieldDB": "to Dodge (Shield DB)", + "GURPS.modifierStrongAttack": "damage (Strong Attack)", + "GURPS.modifierTelegraphicAttack": "to hit (Telegraphic Attack)", + "GURPS.modifierWillCheck": "WILL check to maintain Aim", + "__Char Sheet__": "=========", "GURPS.resourcesModsTab": "Resources and Modifiers", "__Character Sheet Identity__": "=========", @@ -456,11 +566,6 @@ "GURPS.modifierRangeMHExtremeDesc": "Rival difficult to even see; sniper range", "GURPS.modifierAddRangeRuler": "Bucket: Add Range Ruler modifier", "GURPS.modifierAddRangeRulerHint": "If checked, the system will automatically add the last measured Range modifier to the Modifier Bucket.", - "GURPS.modifierAimAllOutAim": "to Aiming rolls (All-Out Aim)", - "GURPS.modifierAimAllOutAimBraced": "to Aiming rolls if braced (All-Out Aim)", - "GURPS.modifierAimCommittedAim": "to Aiming rolls (Committed Aim)", - "GURPS.modifierAimCommittedAimBraced": "to Aiming rolls if braced (Committed Aim)", - "GURPS.modifierAllOutAttackRanged": "to hit (All-Out Attack (Ranged))", "GURPS.modifierAffliction": "Afflictions", "GURPS.modifierAfflictionCough": "-3 to DX checks (Coughing)", "GURPS.modifierAfflictionCoughIQ": "-1 to IQ checks (Coughing)", @@ -483,9 +588,7 @@ "GURPS.modifierAutomatic": "Automatic", "GURPS.modifierBlindAttack": "-10 to hit (Blind)", "GURPS.modifierBlindDefend": "-4 to dodge (Blind -- cannot see attacker)", - "GURPS.modifierBlockRetreat": "to Block/Parry (retreat)", "GURPS.modifierClickToAdd": "Click on modifiers above and to the right to add to your next roll.", - "GURPS.modifierCommittedAttackRanged": "to hit (Committed Attack (Ranged))", "GURPS.modifierCommon": "Common Modifiers", "GURPS.modifierCover": "Cover", "GURPS.modifierCoverBehindFigure": "-4 to hit (Behind same-sized figure)", @@ -502,28 +605,13 @@ "GURPS.modifierCurrentEffects": "Current Effects", "GURPS.modifierCurrentModifiers": "Current Modifiers", "GURPS.modifierDangerous": "Dangerous", - "GURPS.modifierDeceptiveAttack": "to hit (Deceptive Attack)", - "GURPS.modifierDeterminedAttack": "to hit (Determined Attack)", - "GURPS.modifierDodgeAcrobatic": "to Dodge (Acrobatics, success)", - "GURPS.modifierDodgeDive": "to Dodge (dodge and drop)", - "GURPS.modifierDodgeFailedAcro": "to Dodge (Acrobatics, failed)", - "GURPS.modifierDodgeRear": "to Dodge (attacked from rear)", - "GURPS.modifierDodgeRetreat": "to Dodge (retreat)", - "GURPS.modifierDodgeSide": "to Dodge (attacked from side)", "GURPS.modifierEasy": "Easy", - "GURPS.modifierExtraEffort": "Extra Effort", "GURPS.modifierFavorable": "Favorable", - "GURPS.modifierFeverishDef": "Feverish Defense", - "GURPS.modifierDefDeceptiveAttack": "to defenses due to Deceptive attack", - "GURPS.modifierDefenseCommittedAim": "to defenses due to Committed Aim", - "GURPS.modifierDefenseCommittedAttackRanged": "to defenses due to Committed Attack (Ranged)", - "GURPS.modifierMaintainConcentration": "to Will Check, to maintain concentration", "GURPS.modifierGrappling": "-4 to DX and DX-based skills (Grappled)", "GURPS.modifierGMBlessed": "GM blessed", "GURPS.modifierGMDontTry": "GM don't try it", "GURPS.modifierGMSaidSo": "GM said so", "GURPS.modifierHard": "Hard", - "GURPS.modifierHeroicCharge": "Heroic Charge", "GURPS.modifierHitLocation": "Hit Locations (if miss by 1, then *)", "GURPS.modifier3d6Image": "Bucket: Change 3d6 Image", "GURPS.modifier3d6ImageHint": "Select the image to display in the Modifier Bucket for the 3d6 button.", @@ -542,8 +630,6 @@ "GURPS.modifierLightStarlightClouds": "Starlight through clouds", "GURPS.modifierLightTwilight": "Twilight / gaslight / flashlight", "GURPS.modifierLightDeepTwilight": "Deep twilight / candlelight", - "GURPS.modifierMightyBlow": "damage (Mighty Blow)", - "GURPS.modifierMoveAttack": "to hit (Move and Attack)", "GURPS.modifierOthers": "Other Modifiers", "GURPS.modifierPosition": "Bucket: Change Position", "GURPS.modifierPositionHint": "Select the position of the Modifier Bucket.", @@ -577,7 +663,6 @@ "GURPS.modifierSelectJournalsHint": "Select the Journal entries to display in the Modifier Bucket.", "GURPS.modifierSelectJournalsTitle": "Select Modifier Bucket Journals", "GURPS.modifierSendTo": "Send Modifier Bucket to:", - "GURPS.modifierShieldDB": "to Dodge (Shield DB)", "GURPS.modifierShowOnMouseOver": "Bucket: Show on mouse over", "GURPS.modifierShowOnMouseOverHint": "If checked, the Modifier window displays like a tooltip: when the mouse hovers over the Modifier Bucket. If this is turned off, you can bring up the Tooltip by Left Clicking on the Modifier Bucket. You must restart Foundry for this setting to take effect.", "GURPS.modifierSize": "Size Modifier", @@ -590,10 +675,8 @@ "GURPS.modifierStatusShock3": "-3 to IQ/DX checks (Shock 3)", "GURPS.modifierStatusShock4": "-4 to IQ/DX checks (Shock 4)", "GURPS.modifierStatusStunned": "-4 to active defenses (Stunned)", - "GURPS.modifierStrongAttack": "damage (Strong Attack)", "GURPS.modifierTabAside": "Use System Settings to define Journal Entries to display here.", "GURPS.modifierTaskDifficulty": "Task Difficulty", - "GURPS.modifierTelegraphicAttack": "to hit (Telegraphic Attack)", "GURPS.modifierToHit": "to hit", "GURPS.modifierTrivial": "Trivial", "GURPS.modifierUnfavorable": "Unfavorable", @@ -604,7 +687,6 @@ "GURPS.modifierVeryUnfavorable": "Very Unfavorable", "GURPS.modifierViewScale": "Bucket: Scale Factor", "GURPS.modifierViewScaleHint": "Use this to scale up or down the size of the Modifier Bucket.", - "GURPS.modifierWillCheck": "WILL check to maintain Aim", "__PDF References__": "=========", "GURPS.pdfAllOutAim": "PY77:25", "GURPS.pdfAllOutAttackRanged": "PY77:26", @@ -1008,8 +1090,6 @@ "GURPS.sortContentsAscending": "Sort Contents (Ascending)", "GURPS.sortContentsDescending": "Sort Contents (Descending)", "GURPS.sortDescending": "Sort Descending", - "GURPS.actions": "Actions", - "GURPS.aiming": "Aiming", "GURPS.addAdvantage": "Add an Advantage", "GURPS.addMeleeAttack": "Add a Melee Attack", "GURPS.addRangedAttack": "Add a Ranged Attack", @@ -1019,9 +1099,7 @@ "GURPS.advantage": "Advantage", "GURPS.advantages": "Advantages", "GURPS.advantagesTab": "Traits", - "GURPS.aim": "Aim", "GURPS.allDamage": "ALL DAMAGE", - "GURPS.allOutDefense": "All-Out Defense", "GURPS.allTheDamage": "ALL THE DAMAGE!!", "GURPS.applyAllToTarget": "Apply All to {name}", "GURPS.basic": "Basic", diff --git a/module/modifier-bucket/tooltip-window.js b/module/modifier-bucket/tooltip-window.js index 35d907777..40134c7ce 100644 --- a/module/modifier-bucket/tooltip-window.js +++ b/module/modifier-bucket/tooltip-window.js @@ -26,7 +26,8 @@ export default class ModifierBucketEditor extends Application { id: 'ModifierBucketEditor', template: 'systems/gurps/templates/modifier-bucket/tooltip-window.html', minimizable: false, - width: 820, + width: 840, + height: 'auto', // Set height to 'auto' to make it depend on the content scale: scale, classes: ['modifier-bucket'], }) @@ -103,6 +104,7 @@ export default class ModifierBucketEditor extends Application { data.covermods = ModifierLiterals.CoverPostureModifiers data.sizemods = ModifierLiterals.SizeModifiers data.hitlocationmods = ModifierLiterals.HitlocationModifiers + data.effortmods = ModifierLiterals.ExtraEffortModifiers data.currentmods = [] if (!!GURPS.LastActor) { @@ -458,63 +460,65 @@ const ModifierLiterals = { // Using back quote to allow \n in the string. Will make it easier to edit later (instead of array of strings) get MeleeMods() { - return `[+4 ${i18n('GURPS.modifierDeterminedAttack')}] [PDF:${i18n('GURPS.pdfDeterminedAttack')}] - [+4 ${i18n('GURPS.modifierTelegraphicAttack')}] [PDF:${i18n('GURPS.pdfTelegraphicAttack')}] - [-2 ${i18n('GURPS.modifierDeceptiveAttack')}] [PDF:${i18n('GURPS.pdfDeceptiveAttack')}] - [-4 ${i18n('GURPS.modifierMoveAttack')} *Max:9] [PDF:${i18n('GURPS.pdfMoveAttack')}] - [+2 ${i18n('GURPS.modifierStrongAttack')}] [PDF:${i18n('GURPS.pdfStrongAttack')}] - ${horiz(i18n('GURPS.modifierExtraEffort'))} [PDF:${i18n('GURPS.pdfExtraEffort')}] - [+2 ${i18n('GURPS.modifierMightyBlow')} *Cost 1FP] [PDF:${i18n('GURPS.pdfMightyBlow')}] - [+0 ${i18n('GURPS.modifierHeroicCharge')} *Cost 1FP] [PDF:${i18n('GURPS.pdfHeroicCharge')}]` + return ` + [+4 ${i18n('gurps.modifiers.aoaDetermined')}] [PDF:${i18n('gurps.modifiers.pdf.aoaDetermined')}] + [+2 ${i18n('gurps.modifiers.aoaStrong')}] [PDF:${i18n('gurps.modifiers.pdf.aoaStrong')}] + [+2 ${i18n('gurps.modifiers.committedDetermined')}] [PDF:${i18n('gurps.modifiers.pdf.committedDetermined')}] + [+1 ${i18n('gurps.modifiers.committedStrong')}] [PDF:${i18n('gurps.modifiers.pdf.committedStrong')}] + [+4 ${i18n('gurps.modifiers.telegraphic')}] [PDF:${i18n('gurps.modifiers.pdf.telegraphic')}] + [-4 ${i18n('gurps.modifiers.moveAndAttack')} *Max:9] [PDF:${i18n('gurps.modifiers.pdf.moveAndAttack')}] + [-2 ${i18n('gurps.modifiers.deceptive')}] [PDF:${i18n('gurps.modifiers.pdf.deceptive')}] + [-2 ${i18n('gurps.modifiers.defensive')}] [PDF:${i18n('gurps.modifiers.pdf.defensive')}] + [-6 ${i18n('gurps.modifiers.rapidStrike')}] [PDF:${i18n('gurps.modifiers.pdf.rapidStrike')}]` }, get RangedMods() { const useOnTarget = game.settings.get(Settings.SYSTEM_NAME, Settings.SETTING_USE_ON_TARGET) - return `[+1 ${i18n('GURPS.aim')}] - ${ - useOnTarget - ? `[+2 ${i18n('GURPS.modifierAllOutAttackRanged')}] [PDF:${i18n('GURPS.pdfAllOutAttackRanged')}]` - : `[+1 ${i18n('GURPS.modifierDeterminedAttack')}] [PDF:${i18n('GURPS.pdfDeterminedAttack')}]` - } - ${ - useOnTarget - ? `[+1 ${i18n('GURPS.modifierCommittedAttackRanged')}] [PDF:${i18n('GURPS.pdfCommittedAttackRanged')}]` - : '' - } - ${useOnTarget ? horiz(i18n('GURPS.aiming')) : ''} - ${useOnTarget ? `[+4 ${i18n('GURPS.modifierAimAllOutAim')}] [PDF:${i18n('GURPS.pdfAllOutAim')}]` : ''} - ${useOnTarget ? `[+2 ${i18n('GURPS.modifierAimAllOutAimBraced')}] [PDF:${i18n('GURPS.pdfAllOutAim')}]` : ''} - ${useOnTarget ? `[+2 ${i18n('GURPS.modifierAimCommittedAim')}] [PDF:${i18n('GURPS.pdfCommittedAim')}]` : ''} - ${useOnTarget ? `[+1 ${i18n('GURPS.modifierAimCommittedAimBraced')}] [PDF:${i18n('GURPS.pdfCommittedAim')}]` : ''} - ${horiz(i18n('GURPS.actions'))} - [${i18n('GURPS.modifierWillCheck')}]` + return ( + `[+1 ${i18n('gurps.modifiers.aim')}] [PDF:${i18n('gurps.modifiers.pdf.aim')}] + [–2 ${i18n('gurps.modifiers.popup')}] [PDF:${i18n('gurps.modifiers.pdf.popup')}]` + + (useOnTarget + ? ` +${horiz(i18n('gurps.modifiers.onTargetAiming'))} +[+2 ${i18n('gurps.modifiers.aoaRanged')}] [PDF:${i18n('gurps.modifiers.pdf.aoaRanged')}] +[+1 ${i18n('gurps.modifiers.committedRanged')}] [PDF:${i18n('gurps.modifiers.pdf.committedRanged')}] +[+4 ${i18n('gurps.modifiers.allOutAim')}] [PDF:${i18n('gurps.modifiers.pdf.allOutAim')}] +[+2 ${i18n('gurps.modifiers.allOutAimBraced')}] [PDF:${i18n('gurps.modifiers.pdf.allOutAimBraced')}] +[+2 ${i18n('gurps.modifiers.committedAim')}] [PDF:${i18n('gurps.modifiers.pdf.committedAim')}] +[+1 ${i18n('gurps.modifiers.committedAimBraced')}] [PDF:${i18n('gurps.modifiers.pdf.committedAimBraced')}]` + : ` +[+1 ${i18n('gurps.modifiers.aoaRangedDetermined')}] [PDF:${i18n('gurps.modifiers.pdf.aoaRangedDetermined')}]`) + ) }, get DefenseMods() { const useOnTarget = game.settings.get(Settings.SYSTEM_NAME, Settings.SETTING_USE_ON_TARGET) - return `[+2 ${i18n('GURPS.allOutDefense')}] [PDF:${i18n('GURPS.pdfAllOutDefense')}] - [+1 ${i18n('GURPS.modifierShieldDB')}] [PDF:${i18n('GURPS.pdfShieldDB')}] - [+2 ${i18n('GURPS.modifierDodgeAcrobatic')}] [PDF:${i18n('GURPS.pdfDodgeAcrobatic')}] - [+3 ${i18n('GURPS.modifierDodgeDive')}] [PDF:${i18n('GURPS.pdfDodgeDive')}] - [+3 ${i18n('GURPS.modifierDodgeRetreat')}] [PDF:${i18n('GURPS.pdfDodgeRetreat')}] - [+1 ${i18n('GURPS.modifierBlockRetreat')}] [PDF:${i18n('GURPS.pdfBlockRetreat')}] - ${useOnTarget ? `[-2 ${i18n('GURPS.modifierDefenseCommittedAim')}] [PDF:${i18n('GURPS.pdfCommittedAim')}]` : ''} + return `[+2 ${i18n('gurps.modifiers.aodIncreased')}] [PDF:${i18n('gurps.modifiers.pdf.aodIncreased')}] + [+1 ${i18n('gurps.modifiers.shieldDB')}] [PDF:${i18n('gurps.modifiers.pdf.shieldDB')}] + [+2 ${i18n('gurps.modifiers.dodgeAcrobatic')}] [PDF:${i18n('gurps.modifiers.pdf.dodgeAcrobatic')}] + [+3 ${i18n('gurps.modifiers.dodgeAndDrop')}] [PDF:${i18n('gurps.modifiers.pdf.dodgeAndDrop')}] + [+3 ${i18n('gurps.modifiers.dodgeRetreat')}] [PDF:${i18n('gurps.modifiers.pdf.dodgeRetreat')}] + [+1 ${i18n('gurps.modifiers.blockRetreat')}] [PDF:${i18n('gurps.modifiers.pdf.blockRetreat')}] + [+3 ${i18n('gurps.modifiers.fencingRetreat')}] [PDF:${i18n('gurps.modifiers.pdf.fencingRetreat')}] + [+1 ${i18n('gurps.modifiers.defensiveDefense')}] [PDF:${i18n('gurps.modifiers.pdf.defensiveDefense')}] + ${ + useOnTarget + ? `[-2 ${i18n('gurps.modifiers.committedAimDefense')}] [PDF:${i18n('gurps.modifiers.pdf.committedAimDefense')}]` + : '' + } ${ useOnTarget - ? `[-2 ${i18n('GURPS.modifierDefenseCommittedAttackRanged')}] [PDF:${i18n('GURPS.pdfCommittedAttackRanged')}]` + ? `[-2 ${i18n('gurps.modifiers.committedAttackRanged')}] [PDF:${i18n( + 'gurps.modifiers.pdf.committedAttackRanged' + )}]` : '' } - [-2 ${i18n('GURPS.modifierDodgeFailedAcro')}] [PDF:${i18n('GURPS.pdfDodgeFailedAcro')}] - [-2 ${i18n('GURPS.modifierDodgeSide')}] [PDF:${i18n('GURPS.pdfDodgeSide')}] - [-4 ${i18n('GURPS.modifierDodgeRear')}] [PDF:${i18n('GURPS.pdfDodgeRear')}] - [-1 ${i18n('GURPS.modifierDefDeceptiveAttack')}] - [-3 ${i18n('GURPS.modifierMaintainConcentration')}] - ${horiz(i18n('GURPS.modifierExtraEffort'))} - [+2 ${i18n('GURPS.modifierFeverishDef')} *Cost 1FP]` - // ${horiz(i18n('GURPS.actions'))} - // [WILL-3 ${i18n('GURPS.concentrationCheck')}]` + [-2 ${i18n('gurps.modifiers.dodgeAcrobaticFail')}] [PDF:${i18n('gurps.modifiers.pdf.dodgeAcrobaticFail')}] + [-2 ${i18n('gurps.modifiers.defenseSide')}] [PDF:${i18n('gurps.modifiers.pdf.defenseSide')}] + [-1 ${i18n('gurps.modifiers.deceptiveDefense')}] [PDF:${i18n('gurps.modifiers.pdf.deceptiveDefense')}] + [–1 ${i18n('gurps.modifiers.riposte')}] [PDF:${i18n('gurps.modifiers.pdf.riposte')}]` }, get OtherMods1() { @@ -600,4 +604,14 @@ const ModifierLiterals = { `-10 ${i18n('GURPS.modifierQualityNoneTech')}`, ] }, + + get ExtraEffortModifiers() { + return [ + i18n('gurps.modifiers.extraEffort'), + `+2 ${i18n('gurps.modifiers.feverishDefense')} *Cost 1FP`, + `+2 ${i18n('gurps.modifiers.mightyBlow')} *Cost 1FP`, + `+0 ${i18n('gurps.modifiers.heroicCharge')} *Cost 1FP`, + `-3 penalty for Rapid Strike (Flurry of Blows) *Cost 1FP`, + ] + }, } diff --git a/styles/apps.css b/styles/apps.css index d1bd3e7b0..fe0c67b9f 100644 --- a/styles/apps.css +++ b/styles/apps.css @@ -1752,7 +1752,7 @@ button.equipmentbutton:last-child { #modtooltipbucket { display: grid; grid-template-columns: 1fr; - grid-template-rows: 4fr 2fr 4fr; + grid-template-rows: 2fr auto 4fr; gap: 0.35em; height: 100%; } @@ -1799,7 +1799,7 @@ button.equipmentbutton:last-child { .button-row { display: flex; flex-flow: row wrap; - height: 4.8em; + /* height: 4.8em; */ overflow: scroll; overflow-y: overlay; overflow-x: hidden; @@ -1810,7 +1810,7 @@ button.equipmentbutton:last-child { padding: 0 0.5em 0 0; display: flex; flex-flow: column nowrap; - justify-content: space-between; + justify-content: stretch; color: black; border: 0.35em solid darkred; border-radius: 0.35em; @@ -1822,7 +1822,8 @@ button.equipmentbutton:last-child { } #modtooltipleftbottom .shaded-group { - height: 13em; + height: 100%; + /* min-height: 13em; */ } #modtooltipcenter { @@ -1867,18 +1868,18 @@ button.equipmentbutton:last-child { } .removemod:hover { - font-weight: bold; + /* font-weight: bold; */ cursor: pointer; text-shadow: 0 0 10px red; } .removemod:hover::after { - /* font-family: 'Font Awesome 5 Free'; */ + font-family: 'Font Awesome 6 Pro'; content: '\f1f8'; display: inline-block; padding-right: 3px; vertical-align: middle; - font-weight: 900; + /* font-weight: 900; */ color: dimgrey; } @@ -1922,6 +1923,7 @@ button.equipmentbutton:last-child { overflow: scroll; overflow-y: overlay; overflow-x: hidden; + height: min-content !important; } .modttt { @@ -1982,7 +1984,7 @@ button.equipmentbutton:last-child { .modtooltip .collapsible-wrapper > label:after { font: normal normal normal 12px/1; - /* font-family: 'Font Awesome 5 Free'; */ + font-family: 'Font Awesome 6 Pro'; font-weight: 900; content: '\f078'; float: right; @@ -2123,12 +2125,12 @@ button.equipmentbutton:last-child { .gga-chat-message .glinkmodplus, .modtooltip .glinkmodplus { color: darkgreen; + } -.removemod.minus, -.gga-chat-message .glinkmodminus, -.modtooltip .glinkmodminus { +.gga-chat-message .glinkmodminus, .modtooltip .glinkmodminus { color: darkred; + text-wrap: nowrap; } .modtooltip .gurpslink, @@ -2161,6 +2163,22 @@ button.equipmentbutton:last-child { align-items: center; } +.removemod.plus { + text-indent: -1.5em; + margin-left: 1.5em; +} + +.removemod.minus { + text-wrap: wrap; + text-indent: -1.5em; + margin-left: 1.5em; + color: darkred; +} + +.removemod.minus:hover { + font-weight: normal; +} + .modtooltip .gga-group aside { margin: 0; } diff --git a/templates/modifier-bucket/tooltip-window.html b/templates/modifier-bucket/tooltip-window.html index 604cc6f58..fbed97d33 100755 --- a/templates/modifier-bucket/tooltip-window.html +++ b/templates/modifier-bucket/tooltip-window.html @@ -96,6 +96,7 @@

{{collapsible-content 'modeqtquality' eqtqualitymods 'commonmods'}} {{collapsible-content 'modlighting' lightingmods 'commonmods'}} {{collapsible-content 'modrof' rofmods 'commonmods'}} + {{collapsible-content 'modeffort' effortmods 'commonmods'}} {{#each journals}}