- BUGFIX: A couple of translation updates and fixing a page reference for Aim. Suggested by Spriteanon and Uncle Mojo.
- BUGFIX: When adding a brand new spell, not all of the modifiers were correctly added. This has now been fixed.
@@ -31031,13 +31079,13 @@ For each hit, roll hit location randomly. If that location is behind cover, the
Cutting
-
+
|
@@ -31045,12 +31093,14 @@ For each hit, roll hit location randomly. If that location is behind cover, the
Impaling
|
-
+
|
@@ -31058,13 +31108,14 @@ For each hit, roll hit location randomly. If that location is behind cover, the
Crushing
|
-
+
|
@@ -31072,12 +31123,13 @@ For each hit, roll hit location randomly. If that location is behind cover, the
PI-
|
-
+
|
@@ -31085,12 +31137,13 @@ For each hit, roll hit location randomly. If that location is behind cover, the
PI
|
-
+
|
@@ -31098,12 +31151,13 @@ For each hit, roll hit location randomly. If that location is behind cover, the
PI+
|
-
+
|
@@ -31111,12 +31165,13 @@ For each hit, roll hit location randomly. If that location is behind cover, the
PI++
|
-
+
|
@@ -31124,35 +31179,37 @@ For each hit, roll hit location randomly. If that location is behind cover, the
Affliction
|
-
+
|
| Burn |
-
+
|
| Corrosion |
-
+
|
@@ -31160,12 +31217,12 @@ Special damage and affects based on affliction description
Fatigue
|
-
+
|
@@ -31173,11 +31230,12 @@ Special damage and affects based on affliction description
Toxic
|
-
+
|
@@ -31185,12 +31243,13 @@ Special damage and affects based on affliction description
Special
|
-
+
|
@@ -31198,12 +31257,12 @@ See notes for weapon.
Knockback
|
-
+
|
@@ -33858,9 +33917,9 @@ B378
const noop = function () { }; // do nothing callback function.
- const version = "2.25.0";
+ const version = "2.26.0";
- const latestChangesDate = "6/9/2026";
+ const latestChangesDate = "6/16/2026";
let modCascade = true;
@@ -41875,8 +41934,64 @@ B378
return minDamageNote;
}
+
+ on("change:turning_move_type", event => {
+
+ if (event.sourceType === "player") {
+ updateTurningBaseMove();
+ }
+
+ });
+
+ function updateTurningBaseMove() {
+
+ getAttrs(["turning_move_type", "current_move", "enhanced_move_current", "current_air", "current_water"], function (values) {
+
+ let moveType = String(values.turning_move_type);
+
+ let baseMove = 0;
+
+ let topMove = 0;
+
+ switch (moveType.toLowerCase()) {
+
+ case "ground":
+
+ // if enhanced_move_current contains a slash like "5/10 (1)", then use that as the baseMove.
+ if (values.enhanced_move_current.includes("/")) {
+ baseMove = getBaseMove(values.enhanced_move_current);
+ topMove = getTopMove(values.enhanced_move_current);
+ } else {
+ baseMove = getBaseMove(values.current_move);
+ topMove = getTopMove(values.enhanced_move_current);
+ }
+ break;
+
+ case "air":
+ baseMove = getBaseMove(values.current_air);
+ topMove = getTopMove(values.current_air);
+ break;
+
+ case "water":
+ baseMove = getBaseMove(values.current_water);
+ topMove = getTopMove(values.current_water);
+ break;
+
+ default:
+ baseMove = 0;
+ topMove = 0;
+ }
+
+ setAttrs({
+ turn_base_move: baseMove,
+ top_velocity: topMove
+ });
+
+ });
+
+ }
- on("change:turning_move_type change:start_velocity change:current_move change:enhanced_move_current change:current_air change:current_water change:change_velocity", function (event) {
+ on("change:turn_base_move change:start_velocity change:current_move change:enhanced_move_current change:current_air change:current_water change:change_velocity", function (event) {
updateTurnRadiusMovements();
@@ -41889,17 +42004,21 @@ B378
*/
function updateTurnRadiusMovements() {
- getAttrs(["turning_move_type", "start_velocity", "current_move", "enhanced_move_current", "current_air", "current_water", "change_velocity"], function (values) {
+ getAttrs(["turning_move_type", "turn_base_move", "start_velocity", "top_velocity", "current_move", "enhanced_move_current", "current_air", "current_water", "change_velocity"], function (values) {
let moveType = String(values.turning_move_type);
let velocityStart = Number(values.start_velocity);
+
+ const velocityTop = Number(values.top_velocity);
+
+ let showVelocityWarning = 0;
let velocityChange = Number(values.change_velocity);
let velocityFinal = 0;
- let baseMove = 0;
+ let baseMove = Number(values.turn_base_move);
let turnRadius = 0;
@@ -41917,48 +42036,6 @@ B378
velocityFinal = 0;
}
- // get turn penalty based on type.
- switch (moveType.toLowerCase()) {
-
- case "ground":
-
- if (values.enhanced_move_current === "0") {
-
- // normal move, no tight turn penalty
- tightTurnPenalty = 0;
-
- baseMove = getBaseMove(values.current_move);
-
- } else {
-
- baseMove = getBaseMove(values.enhanced_move_current);
-
- // enhanced move has tight turn penalty
- tightTurnPenalty = getTightTurnPenalty(velocityFinal, baseMove);
-
- }
- break;
-
- case "air":
-
- baseMove = getBaseMove(values.current_air);
-
- tightTurnPenalty = getTightTurnPenalty(velocityFinal, baseMove);
-
- break;
-
- case "water":
- baseMove = getBaseMove(values.current_water);
-
- tightTurnPenalty = getTightTurnPenalty(velocityFinal, baseMove);
- break;
-
- default:
- baseMove = 0;
-
- tightTurnPenalty = 0;
- }
-
// --
if (velocityChange < 0) {
@@ -41981,15 +42058,24 @@ B378
turnRadius = Math.floor(turnRadius);
}
+ tightTurnPenalty = getTightTurnPenalty(velocityFinal, baseMove);
+
} else {
turnRadius = 1;
}
+ if (velocityFinal > velocityTop) {
+ showVelocityWarning = 1;
+ } else {
+ showVelocityWarning = 0;
+ }
+
setAttrs({
"final_velocity": velocityFinal,
"deceleration_penalty": decelerationPenalty,
"turn_radius": turnRadius,
"tight_turn_penalty": tightTurnPenalty,
+ "show_final_velocity_warning": showVelocityWarning
});
});
@@ -42074,9 +42160,64 @@ B378
return move;
}
+
+ /**
+ * Gets top move from a number or two values.
+ * If move = 8/16, top move = 16.
+ * If move = 8, top move = 8.
+ * If move = 8/16 (1), top move = 16.
+ * If move = 8 (1), top move = 8.
+ * If move = sprint 6, top move = 6.
+ */
+ function getTopMove(moveValue) {
+
+ let topMove = 0;
+
+ if (moveValue) {
+
+ // check if moveValue contains the word "sprint"
+ if (moveValue.toLowerCase().includes("sprint")) {
+
+ // extract the number after the word "sprint"
+ const sprintMatch = moveValue.match(/sprint\s*(\d+)/i);
+ if (sprintMatch) {
+ topMove = Number(sprintMatch[1]);
+ }
+
+ } else {
+
+ // Remove number in parentheses
+ moveValue = moveValue.replace(/ *\([^)]*\)/g, "");
+
+ if (moveValue && moveValue.includes("/")) {
+
+ // split the value
+ // move = 8/16
+ // 8 = base move
+ // 16 = enhanced move
+ const arrMoveValue = moveValue.split("/");
+
+ // get second part, convert to number
+ topMove = Number(arrMoveValue[1]);
+
+ } else {
+
+ topMove = Number(moveValue);
+
+ }
+ }
+ }
+
+ if (isNaN(topMove)) {
+ topMove = 0;
+ }
+
+ return topMove;
+ }
/**
* Determines max velocity for a movement type.
+ * Legacy helper: currently not used in the active turn-radius flow.
* Entered move can't exceed move value.
* Example moveValue = 8/16
* if enteredMove = 8, then use it
@@ -44176,105 +44317,115 @@ The attacker may choose to hit the original target or the limb you used to parry
const slamDamageNotes = getTranslationByKey("slam-damage-notes");
- const woundNotesCutting = `**CUTTING** *(Always round down)*
-**Damage:** x1.5 **Neck:** x2 **Skull:** x4
-**Knockback:** A cutting attack can cause knockback only if it fails to penetrate DR. (B378)
-**Unliving:** Hit location has its usual effect
-**Homogenous:** x1
-**Diffuse:** Max 2HP (Exception: Area-effect, cone, and explosion attacks cause normal injury.)
-(Additional Ref: B380)`;
+ const woundNotesCutting = `***CUTTING*** **💥Base Damage**: x1.5
+**💥Neck**: x2, **💥Skull**: x4, **💥Homogenous**: x1
+**💥Knockback** (B378): A cutting attack can cause knockback only if it fails to penetrate DR.
+**💥Unliving**: Hit location has its usual effect
+**💥Diffuse** (B380): Max 2HP (Exception: Area-effect, cone, and explosion attacks cause normal injury.)
+***Round down in all cases.***`;
- const woundNotesImpaling = `**IMPALING** *(Always round down)*
-**Damage:** x2 **Limbs:** x1 **Vitals:** x3 **Skull:** x4
-**Unliving:** x1 (other than the eye, skull, or vitals - otherwise per location) (B400)
-**Homogenous:** x0.5
-**Diffuse:** Max 1HP (Exception: Area-effect, cone, and explosion attacks cause normal injury.)
-(Additional Ref: B380)`;
+ const woundNotesImpaling = `***IMPALING*** ***💥Base Damage**: x2
+**💥Vitals**: x3, **💥Skull**: x4
+**💥Arm, Leg, Foot, or Hand**: x1
+**💥Abdomen** 1 in 6 it hits the vitals (LT105)
+**💥Homogenous**: x0.5
+**💥Unliving**: Hit location has its usual effect
+**💥Diffuse** (B380): Max 1HP (Exception: Area-effect, cone, and explosion attacks cause normal injury.)
+***Round down in all cases.***`;
- const woundNotesCrushing = `**CRUSHING** *(Always round down)*
-**Damage:** x1 **Neck:** x1.5 **Skull:** x4
-**Knockback:** A crushing attack can cause knockback regardless of whether it penetrates DR. (B378)
-**Unliving:** Hit location has its usual effect
-**Homogenous:** x1
-**Diffuse:** Max 2HP (Exception: Area-effect, cone, and explosion attacks cause normal injury.)
-(Additional Ref: B380)`;
+ const woundNotesCrushing = `***CRUSHING*** **💥Base Damage**: x1
+**💥Neck**: x1.5, **💥Skull**: x4
+**💥Abdomen** 1 in 6 it hits the vitals (LT105)
+**💥Knockback**: A crushing attack can cause knockback regardless of whether it penetrates DR. (B378)
+**💥Unliving**: Hit location has its usual effect
+**💥Homogenous**: x1
+**💥Diffuse** (B380): Max 2HP (Exception: Area-effect, cone, and explosion attacks cause normal injury.)
+***Round down in all cases.***`;
- const woundNotesPiercingMinus = `**PIERCING-** *(Always round down)*
-**Damage:** x.5 **Vitals:** x3 **Skull:** x4
-**Unliving:** x1/5 (other than the eye, skull, or vitals - otherwise per location) (B400)
-**Homogenous:** x1/10
-**Diffuse:** Max 1HP (Exception: Area-effect, cone, and explosion attacks cause normal injury.)
-(Additional Ref: B380)`;
+ const woundNotesPiercingMinus = `***PIERCING-*** **💥Base Damage**: x.5
+**💥Vitals**: x3, **💥Skull**: x4
+**💥Abdomen** 1 in 6 it hits the vitals (LT105)
+**💥Unliving**: x1/5 (other than the eye, skull, or vitals - otherwise per location) (B400)
+**💥Homogenous**: x1/10
+**💥Diffuse** (B380): Max 1HP (Exception: Area-effect, cone, and explosion attacks cause normal injury.)
+***Round down in all cases.***`;
- const woundNotesPiercing = `**PIERCING** *(Always round down)*
-**Damage:** x1 **Vitals:** x3 **Skull:** x4
-**Unliving:** x1/3 (other than the eye, skull, or vitals - otherwise per location) (B400)
-**Homogenous:** x1/5
-**Diffuse:** Max 1HP (Exception: Area-effect, cone, and explosion attacks cause normal injury.)
-(Additional Ref: B380)`;
+ const woundNotesPiercing = `***PIERCING*** **💥Base Damage**: x1
+**💥Vitals**: x3, **💥Skull**: x4
+**💥Abdomen** 1 in 6 it hits the vitals (LT105)
+**💥Unliving**: x1/3 (other than the eye, skull, or vitals - otherwise per location) (B400)
+**💥Homogenous**: x1/5
+**💥Diffuse** (B380): Max 1HP (Exception: Area-effect, cone, and explosion attacks cause normal injury.)
+***Round down in all cases.***`;
- const woundNotesPiercingPlus = `**PIERCING+** *(Always round down)*
-**Damage:** x1.5 **Limbs**: x1 **Vitals:** x3 **Skull:** x4
-**Unliving:** x0.5 (other than the eye, skull, or vitals - otherwise per location) (B400)
-**Homogenous:** x1/3
-**Diffuse:** Max 1HP (Exception: Area-effect, cone, and explosion attacks cause normal injury.)
-(Additional Ref: B380)`;
+ const woundNotesPiercingPlus = `***PIERCING+*** **💥Base Damage**: x1.5
+**💥Vitals**: x3, **💥Skull**: x4
+**💥Abdomen** 1 in 6 it hits the vitals (LT105)
+**💥Unliving**: x0.5 (other than the eye, skull, or vitals - otherwise per location) (B400)
+**💥Homogenous**: x1/3
+**💥Diffuse** (B380): Max 1HP (Exception: Area-effect, cone, and explosion attacks cause normal injury.)
+***Round down in all cases.***`;
- const woundNotesPiercingPlusPlus = `**PIERCING++** *(Always round down)*
-**Damage:** x2 **Limbs:** x1 **Vitals:** x3 **Skull:** x4
-**Unliving:** x1 (other than the eye, skull, or vitals - otherwise per location) (B400)
-**Homogenous:** x0.5
-**Diffuse:** Max 1HP (Exception: Area-effect, cone, and explosion attacks cause normal injury.)
-(Additional Ref: B380)`;
+ const woundNotesPiercingPlusPlus = `***PIERCING++*** **💥Base Damage**: x2
+**💥Vitals**: x3, **💥Skull**: x4
+**💥Abdomen** 1 in 6 it hits the vitals (LT105)
+**💥Unliving**: x1 (other than the eye, skull, or vitals - otherwise per location) (B400)
+**💥Homogenous**: x0.5
+**💥Diffuse** (B380): Max 1HP (Exception: Area-effect, cone, and explosion attacks cause normal injury.)
+***Round down in all cases.***`;
- const woundNotesAffliction = `**AFFLICTION** *(Always round down)*
-Special damage and affects based on affliction description
-**Unliving:** Hit location has its usual effect
-**Homogenous:** x1
-**Diffuse:** Max 2HP (Exception: Area-effect, cone, and explosion attacks cause normal injury.)`;
+ const woundNotesAffliction = `***AFFLICTION*** Special damage and affects based on affliction description
+**💥Unliving:** Hit location has its usual effect
+**💥Homogenous:** x1
+**💥Diffuse:** Max 2HP (Exception: Area-effect, cone, and explosion attacks cause normal injury.)
+***Round down in all cases.***`;
- const woundNotesBurn = `**BURN** *(Always round down)*
-**Damage:** x1 **Skull:** x4
-**Unliving:** Hit location has its usual effect
-**Homogenous:** x1
-**Diffuse:** Max 2HP (Exception: Area-effect, cone, and explosion attacks cause normal injury.)
-(Additional Ref: B380)`;
+ const woundNotesBurn = `***BURN*** **💥Base Damage**: x1
+**💥Skull:** x4
+**💥Unliving:** Hit location has its usual effect
+**💥Homogenous:** x1
+**💥Diffuse:** Max 2HP (Exception: Area-effect, cone, and explosion attacks cause normal injury.)
+(Additional Ref: B380)
+***Round down in all cases.***`;
- const woundNotesCorrosion = `**CORROSION** *(Always round down)*
-**Damage:** x1 **Neck:** x1.5 **Skull:** x4 **Face** x1.5
-**Face** blind eye if major wound, both eyes if full HP
-**Armor:** -1 DR per 5 points damage
-**Unliving:** Hit location has its usual effect
-**Homogenous:** x1
-**Diffuse:** Max 2HP (Exception: Area-effect, cone, and explosion attacks cause normal injury.)
-(Additional Ref: B380)`;
+ const woundNotesCorrosion = `***CORROSION*** **💥Base Damage**: x1
+**💥Neck and Face:** x1.5, **💥Skull:** x4
+**💥Face** blind eye if major wound, both eyes if full HP
+**💥Armor:** -1 DR per 5 points damage
+**💥Unliving:** Hit location has its usual effect
+**💥Homogenous:** x1
+**💥Diffuse:** Max 2HP (Exception: Area-effect, cone, and explosion attacks cause normal injury.)
+(Additional Ref: B380)
+***Round down in all cases.***`;
- const woundNotesFatigue = `**FATIGUE** *(Always round down)*
-**Damage:** x1
-**Unliving:** Hit location has its usual effect
-**Homogenous:** x1
-**Diffuse:** Normal Fatigue Damage, but apply HP modifier if applicable. Max 2HP (Exception: Area-effect, cone, and explosion attacks cause normal injury.)
-(Additional Ref: B380)`;
+ const woundNotesFatigue = `***FATIGUE*** **💥Base Damage**: x1
+**💥Unliving:** Hit location has its usual effect
+**💥Homogenous:** x1
+**💥Diffuse:** Normal Fatigue Damage but apply HP modifier if applicable. Max 2HP (Exception: Area-effect, cone, and explosion attacks cause normal injury.)
+(Additional Ref: B380)
+***Round down in all cases.***`;
- const woundNotesToxic = `**TOXIC** *(Always round down)*
-**Damage:** x1
-**Unliving:** Hit location has its usual effect
-**Homogenous:** x1
-**Diffuse:** Max 2HP (Exception: Area-effect, cone, and explosion attacks cause normal injury.)(Additional Ref: B380)`;
+ const woundNotesToxic = `***TOXIC*** **💥Base Damage**: x1
+**💥Unliving:** Hit location has its usual effect
+**💥Homogenous:** x1
+**💥Diffuse:** Max 2HP (Exception: Area-effect, cone, and explosion attacks cause normal injury.)
+(Additional Ref: B380)
+***Round down in all cases.***`;
- const woundNotesSpecial = `**SPECIAL** *(Always round down)*
-See notes for weapon.
-**Unliving:** Hit location has its usual effect
-**Homogenous:** x1
-**Diffuse:** Max 2HP (Exception: Area-effect, cone, and explosion attacks cause normal injury.)
-(Additional Ref: B380)`;
+ const woundNotesSpecial = `***SPECIAL***
+See notes for the weapon.
+**💥Unliving:** Hit location has its usual effect
+**💥Homogenous:** x1
+**💥Diffuse:** Max 2HP (Exception: Area-effect, cone, and explosion attacks cause normal injury.)
+(Additional Ref: B380)
+***Round down in all cases.***`;
- const woundNotesKnockback = `**Knockback Only** *(Always round down)*
-B378
-**Unliving:** Hit location has its usual effect
-**Homogenous:** x1
-**Diffuse:** Max 2HP Knockback (Exception: Area-effect, cone, and explosion attacks cause normal injury.)
-(Additional Ref: B380)`;
+ const woundNotesKnockback = `***KNOCKBACK Only*** *(B378)*
+**💥Unliving:** Hit location has its usual effect
+**💥Homogenous:** x1
+**💥Diffuse:** Max 2HP Knockback (Exception: Area-effect, cone, and explosion attacks cause normal injury.)
+(Additional Ref: B380)
+***Round down in all cases.***`;
/* Spell Roll Result Notes */
const spellCriticalSuccessNotes = `The spell works especially well. **Details are up to the GM**, who should be both generous and creative. Whatever else occurs, there is never an energy cost if you get a critical success when you cast a spell. B235, M7`;
diff --git a/GURPS/translation.json b/GURPS/translation.json
index a26b966de4..ab80f2c604 100644
--- a/GURPS/translation.json
+++ b/GURPS/translation.json
@@ -39,6 +39,8 @@
"sheet-show-raw-defense-notes-desc": "If checked, show Rules as Written (RAW) for Active Defense success/fail notes.",
"sheet-style-option": "Sheet Style",
"sheet-style-desc": "Select a visual style for the character sheet.",
+ "new-features-bugfixes-label": "New Features & bugfixes:",
+ "keep-me-posted-text": "To be kept posted on things happening with this character sheet, DM me, and I will send you an invite to our Discord server dedicated to this GURPS 4th Edition character sheet in Roll20.
Mike.",
"roll-modifiers-heading": "Roll Modifiers Toolbox",
"total-roll-modifier-label": "Total Modifier",
"shock-label": "Shock",
@@ -607,8 +609,11 @@
"current-label": "Current",
"turning-and-velocity-modifiers-label": "Turning and Velocity Modifiers",
"movement-label": "Movement",
- "turning-velocity-movement-tooltip": "Select movement type to determine turning radius and/or deceleration penalty.
Important: If you're in High-speed (exceeding basic move or vehicle base acceleration) you must move your full current velocity that you started the turn with. B394 High-Speed Movement.",
+ "turning-velocity-base-movement-tooltip": "Enter the base move of the character. Normally this matches the character's Move attribute but can be changed for specific situations.",
+ "turning-velocity-movement-tooltip": "Select movement type to determine turning radius and/or deceleration penalty. This will update the base movement field with the character's corresponding movement type. Select Custom custom to enter your own base and top movement speed.
Important: If you're in High-speed (exceeding basic move or vehicle base acceleration) you must move your full current velocity that you started the turn with. B394 High-Speed Movement.",
"abbreviation-start-velocity-label": "Start Vel.",
+ "turning-velocity-top-movement-tooltip": "Enter the top move of the character. Normally this matches the character's Move attribute but can be changed for specific situations. The final velocity should not exceed this top movement speed.",
+ "start-label": "Start",
"start-velocity-tooltip": "Enter velocity (yards/second) for current turn.
Rule: You must move at your current start velocity, then at the end of your turn, you can increase or decrease the velocity. B394
Important: Be sure to check your max allowed velocity based on movement type.",
"change-in-velocity-label": "Change",
"change-in-velocity-tooltip": "Amount to accelerate or decelerate for the turn. These values should not exceed the maximum acceleration or deceleration for the vehicle.",
@@ -621,10 +626,13 @@
"apply-vehicle-tight-turn-label": "Apply vehicle tight turn",
"apply-vehicle-tight-turn-checkbox-tooltip": "If a Control Roll, apply vehicle tight turn modifiers to the roll.",
"turn-radius-label": "Turn Radius",
+ "radius-label": "Radius",
"turn-radius-tooltip": "Turn Radius. Minimum number of hexes to move before making a 60° facing change.
Turn Radius = (Start Velocity / Base Move Score) rounded down.
Example: Super Run = 6/24. Start Velocity = 18. Turn Radius = 18/6 = 3.
See B394.",
"tight-turn-label": "Tight Turn",
"tight-turn-tooltip": "Tight Turn Skill Penalty. Allows you to make an additional facing change.
120° facing change instead of 60°.
Penalty = -1 per full increment of base move which your velocity exceeds your Basic Move.
See B395.",
+ "final-velocity-warning-text": "Warning: The final velocity exceeds the top move!",
"option-select": "--Select--",
+ "option-custom": "Custom",
"option-ground": "Ground",
"option-air": "Air",
"option-water": "Water",
@@ -998,6 +1006,7 @@
"defense-bonus-notes-tooltip": "Examples:
+2 DB for Torso (Front Only), Skull, Neck, Hands, Head (1/6 Face), and Feet. Armor Enchantment: Deflect.
+1 DB SHIELD SIDE (Left): from Small Shield.
+1 DB for Rear only - (All but head unless hood is up). From Heavy Cloak.",
"select-token-tooltip": "If on, you must select your character token before clicking the Roll button. The token name will show in the roll results.
Note This option is most useful when writing your own Roll20 API code.",
"target-token-tooltip": "Click the button to turn on target a token before the skill roll.
The token name will appear in the results.",
+ "target-token-help-text": "You will be prompted to select a target token.",
"melee-attacks-label": "Melee Attacks",
"melee-roll-modifier-tooltip": "You can use the Roll Modifiers Toolbar or the Roll Modifiers Toolbox to modifier the effective skill.",
"attacks-label": "Attacks",
@@ -1387,7 +1396,7 @@
"gurps-4th-edition-wiki-button": "GURPS 4th Edition Roll20 Wiki Page",
"gurps-sheet-thread-link-button": "Roll20 Forum - [GURPS] - Sheet #1 - Thread 3",
"gurps-4th-edition-roll-template-button": "Roll20 GURPS 4E Roll Template",
- "base-label": "BASE",
+ "base-label": "Base",
"speed-ties-description": "DX has been added to Speed to help break ties. (B363)",
"selected-label": "Selected",
"target-one-label": "Target 1",
@@ -1496,6 +1505,7 @@
"mobility-escape-label": "Mobility Escape",
"mobiliy-pursuit-label": "Mobility Pursuit",
"move-label": "Move",
+ "base-move-label": "Base Move",
"move-and-attack-label": "Move and Attack",
"ram-label": "ram",
"reverse-label": "Reverse",