Compare commits

...

17 Commits

Author SHA1 Message Date
Vlyan
b1e73f0761 Release 1.13.3 2026-02-01 10:37:27 +01:00
Vlyan
222aa75a1d Added Translations for Tactical Grid, and some cleanup 2026-01-30 09:28:15 +01:00
Vlyan
caa78d7c45 Merge branch 'patch-1' into 'dev'
Title advancement auto-name/icon fix

See merge request teaml5r/l5r5e!50
2026-01-30 07:58:38 +00:00
SagaTympana
5edcaa373c Title advancement auto-name/icon fix 2026-01-30 07:58:38 +00:00
Vlyan
08e412b32f Merge branch 'tactical_range_bands_dev' into 'dev'
Tactical Grid Range Band

See merge request teaml5r/l5r5e!49
2026-01-07 13:31:28 +00:00
Litasa
4269946c30 Tactical Grid Range Band 2026-01-07 13:31:28 +00:00
Vlyan
607817302b Merge branch 'fix_demeanors_translation' into 'dev'
Update demeanors

See merge request teaml5r/l5r5e!48
2025-11-04 20:06:31 +00:00
Olivier Brencklé
dd39fa6113 Update demeanors 2025-11-04 20:06:30 +00:00
Vlyan
d035b963de Release 1.13.2 2025-10-18 13:37:02 +02:00
Vlyan
a14c26d168 Release 1.13.2 2025-10-18 13:26:32 +02:00
Vlyan
b25a25a94f Added handmade conditions icons by Nikotka - part 2 2025-10-18 10:23:55 +02:00
Vlyan
98ffb27db7 Added handmade conditions icons by Nikotka 2025-10-06 17:02:10 +02:00
Vlyan
a6e0f60665 Merge branch 'patch-1' into 'dev'
Edit es-es.json

See merge request teaml5r/l5r5e!47
2025-10-06 14:59:24 +00:00
Alejabar
8488ed1bd1 Edit es-es.json 2025-10-06 14:59:23 +00:00
Vlyan
dda47c51a8 20Q autocomplete and menu css fixes 2025-09-27 10:56:06 +02:00
Vlyan
a2285931b3 unduplicate Astrolab name for Unicorn version (Mantis untouched) 2025-09-26 11:25:49 +02:00
Vlyan
37b8956048 Fix for pressing key "Enter" in input trigger "no active Encounter..." message. 2025-09-25 17:45:45 +02:00
76 changed files with 1225 additions and 363 deletions

View File

@@ -6,9 +6,21 @@ Date format : day/month/year
> - `foundry-version`: Stick to the major version of FoundryVTT. > - `foundry-version`: Stick to the major version of FoundryVTT.
> - `system-version`: System functionalities and Fixes. > - `system-version`: System functionalities and Fixes.
## 1.13.3 - 01/02/2026 - Tactical Grid & Fixes
- Updated demeanors from books up to Imperfect Land (included), thanks to Olivier Brencklé (!48).
- Added Tactical Grid Range Band, thanks to Litasa (!49).
- Fix Title advancement auto-name/icon, thanks to SagaTympana (!50).
## 1.13.2 - 18/10/2025 - Conditions Icons & Fixes
- Fix Actor Sheet for pressing key `Enter` in input trigger `no active Encounter...` message.
- Fix Compendium `Astrolab` is duplicate with `Mantis Clan` and `Children of the Five Winds`. Renamed the `cotfw` version to `Astrolabe (Unicorn)`.
- Fix 20Q autocomplete and menu css.
- Added handmade conditions icons by Nikotka (thx to rex35game for the share).
- Spanish language updated thanks to Alejabarr.
## 1.13.1 - 21/09/2025 - Conditions & Fixes ## 1.13.1 - 21/09/2025 - Conditions & Fixes
- Fix for Clicking on items doesn't show item window (#65 Thx to Litasa) - Fix for Clicking on items doesn't show item window (#65 Thx to Litasa).
- Fix for fade configuration (#66) - Fix for fade configuration (#66).
- Added some Tooltips loading optimizations (#62 Thanks to KitCat). - Added some Tooltips loading optimizations (#62 Thanks to KitCat).
- Added some Properties loading optimizations (#63 Thanks to KitCat). - Added some Properties loading optimizations (#63 Thanks to KitCat).
- Conditions changes : - Conditions changes :

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

View File

@@ -0,0 +1,2 @@
All original conditions icons was made by Nikotka.
Altered by Vlyan to be more visible in FoundryVTT.

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

View File

@@ -894,8 +894,8 @@
} }
}, },
{ {
"id": "Astrolabe", "id": "Astrolabe (Unicorn)",
"name": "Astrolabe (WIP)", "name": "Astrolabe (Licorne)",
"description": "", "description": "",
"source_reference": { "source_reference": {
"page": "" "page": ""

View File

@@ -9,7 +9,7 @@
"pages": { "pages": {
"Figure: Afflicted": { "Figure: Afflicted": {
"name": "Tourmenté - Image", "name": "Tourmenté - Image",
"src": "icons/svg/sun.svg" "src": "systems/l5r5e/assets/icons/conditions/afflicted.webp"
}, },
"Afflicted": { "Afflicted": {
"name": "Tourmenté", "name": "Tourmenté",
@@ -22,7 +22,7 @@
"pages": { "pages": {
"Figure: Bleeding": { "Figure: Bleeding": {
"name": "En sang - Image", "name": "En sang - Image",
"src": "icons/svg/blood.svg" "src": "systems/l5r5e/assets/icons/conditions/bleeding.webp"
}, },
"Bleeding": { "Bleeding": {
"name": "En sang", "name": "En sang",
@@ -35,7 +35,7 @@
"pages": { "pages": {
"Figure: Burning": { "Figure: Burning": {
"name": "En feu - Image", "name": "En feu - Image",
"src": "icons/svg/fire.svg" "src": "systems/l5r5e/assets/icons/conditions/burning.webp"
}, },
"Burning": { "Burning": {
"name": "En feu", "name": "En feu",
@@ -48,7 +48,7 @@
"pages": { "pages": {
"Figure: Compromised": { "Figure: Compromised": {
"name": "Compromis - Image", "name": "Compromis - Image",
"src": "icons/svg/terror.svg" "src": "systems/l5r5e/assets/icons/conditions/compromised.webp"
}, },
"Compromised": { "Compromised": {
"name": "Compromis", "name": "Compromis",
@@ -61,7 +61,7 @@
"pages": { "pages": {
"Figure: Dazed": { "Figure: Dazed": {
"name": "Hébété - Image", "name": "Hébété - Image",
"src": "icons/svg/eye.svg" "src": "systems/l5r5e/assets/icons/conditions/dazed.webp"
}, },
"Dazed": { "Dazed": {
"name": "Hébété", "name": "Hébété",
@@ -74,7 +74,7 @@
"pages": { "pages": {
"Figure: Disoriented": { "Figure: Disoriented": {
"name": "Désorienté - Image", "name": "Désorienté - Image",
"src": "icons/svg/daze.svg" "src": "systems/l5r5e/assets/icons/conditions/disoriented.webp"
}, },
"Disoriented": { "Disoriented": {
"name": "Désorienté", "name": "Désorienté",
@@ -87,7 +87,7 @@
"pages": { "pages": {
"Figure: Dying [X Rounds]": { "Figure: Dying [X Rounds]": {
"name": "Mourant (X rounds) - Image", "name": "Mourant (X rounds) - Image",
"src": "icons/svg/skull.svg" "src": "systems/l5r5e/assets/icons/conditions/dying_1.webp"
}, },
"Dying [X Rounds]": { "Dying [X Rounds]": {
"name": "Mourant (X rounds)", "name": "Mourant (X rounds)",
@@ -100,7 +100,7 @@
"pages": { "pages": {
"Figure: Enraged": { "Figure: Enraged": {
"name": "Enragé - Image", "name": "Enragé - Image",
"src": "icons/svg/lightning.svg" "src": "systems/l5r5e/assets/icons/conditions/enraged.webp"
}, },
"Enraged": { "Enraged": {
"name": "Enragé", "name": "Enragé",
@@ -113,7 +113,7 @@
"pages": { "pages": {
"Figure: Exhausted": { "Figure: Exhausted": {
"name": "Epuisé - Image", "name": "Epuisé - Image",
"src": "icons/svg/sleep.svg" "src": "systems/l5r5e/assets/icons/conditions/exhausted.webp"
}, },
"Exhausted": { "Exhausted": {
"name": "Epuisé", "name": "Epuisé",
@@ -126,7 +126,7 @@
"pages": { "pages": {
"Figure: Immobilized": { "Figure: Immobilized": {
"name": "Immobilisé - Image", "name": "Immobilisé - Image",
"src": "icons/svg/net.svg" "src": "systems/l5r5e/assets/icons/conditions/immobilized.webp"
}, },
"Immobilized": { "Immobilized": {
"name": "Immobilisé", "name": "Immobilisé",
@@ -139,7 +139,7 @@
"pages": { "pages": {
"Figure: Incapacitated": { "Figure: Incapacitated": {
"name": "Hors de combat - Image", "name": "Hors de combat - Image",
"src": "icons/svg/downgrade.svg" "src": "systems/l5r5e/assets/icons/conditions/incapacitated.webp"
}, },
"Incapacitated": { "Incapacitated": {
"name": "Hors de combat", "name": "Hors de combat",
@@ -152,7 +152,7 @@
"pages": { "pages": {
"Figure: Intoxicated": { "Figure: Intoxicated": {
"name": "Ivre - Image", "name": "Ivre - Image",
"src": "icons/svg/poison.svg" "src": "systems/l5r5e/assets/icons/conditions/intoxicated.webp"
}, },
"Intoxicated": { "Intoxicated": {
"name": "Ivre", "name": "Ivre",
@@ -165,7 +165,7 @@
"pages": { "pages": {
"Figure: Prone": { "Figure: Prone": {
"name": "A terre - Image", "name": "A terre - Image",
"src": "icons/svg/falling.svg" "src": "systems/l5r5e/assets/icons/conditions/prone.webp"
}, },
"Prone": { "Prone": {
"name": "A terre", "name": "A terre",
@@ -178,7 +178,7 @@
"pages": { "pages": {
"Figure: Silenced": { "Figure: Silenced": {
"name": "Aphone - Image", "name": "Aphone - Image",
"src": "icons/svg/silenced.svg" "src": "systems/l5r5e/assets/icons/conditions/silenced.webp"
}, },
"Silenced": { "Silenced": {
"name": "Aphone", "name": "Aphone",
@@ -191,7 +191,7 @@
"pages": { "pages": {
"Figure: Unconscious": { "Figure: Unconscious": {
"name": "Inconscient - Image", "name": "Inconscient - Image",
"src": "icons/svg/unconscious.svg" "src": "systems/l5r5e/assets/icons/conditions/unconscious.webp"
}, },
"Unconscious": { "Unconscious": {
"name": "Inconscient", "name": "Inconscient",
@@ -204,7 +204,7 @@
"pages": { "pages": {
"Figure: Wounded": { "Figure: Wounded": {
"name": "Blessé - Image", "name": "Blessé - Image",
"src": "icons/svg/degen.svg" "src": "systems/l5r5e/assets/icons/conditions/heavily_wounded.webp"
}, },
"Wounded": { "Wounded": {
"name": "Blessé", "name": "Blessé",
@@ -217,7 +217,7 @@
"pages": { "pages": {
"Figure: Illness: Oozing Sore Disease": { "Figure: Illness: Oozing Sore Disease": {
"name": "Maladie : Bubons purulents - Image", "name": "Maladie : Bubons purulents - Image",
"src": "icons/svg/eye.svg" "src": "systems/l5r5e/assets/icons/conditions/illness_oozing_sore_disease.webp"
}, },
"Illness: Oozing Sore Disease": { "Illness: Oozing Sore Disease": {
"name": "Maladie : Bubons purulents", "name": "Maladie : Bubons purulents",
@@ -230,7 +230,7 @@
"pages": { "pages": {
"Figure: Illness: Gut Sickness": { "Figure: Illness: Gut Sickness": {
"name": "Maladie : Mal des entrailles - Image", "name": "Maladie : Mal des entrailles - Image",
"src": "icons/svg/poison.svg" "src": "systems/l5r5e/assets/icons/conditions/illness_gut_sickness.webp"
}, },
"Illness: Gut Sickness": { "Illness: Gut Sickness": {
"name": "Maladie : Mal des entrailles", "name": "Maladie : Mal des entrailles",
@@ -243,7 +243,7 @@
"pages": { "pages": {
"Figure: Illness: Coughing Illness": { "Figure: Illness: Coughing Illness": {
"name": "Maladie : Mauvaise toux - Image", "name": "Maladie : Mauvaise toux - Image",
"src": "icons/svg/poison.svg" "src": "systems/l5r5e/assets/icons/conditions/illness_coughing_illness.webp"
}, },
"Illness: Coughing Illness": { "Illness: Coughing Illness": {
"name": "Maladie : Mauvaise toux", "name": "Maladie : Mauvaise toux",
@@ -256,7 +256,7 @@
"pages": { "pages": {
"Figure: Illness: Unsteady Illness": { "Figure: Illness: Unsteady Illness": {
"name": "Maladie : Vertiges - Image", "name": "Maladie : Vertiges - Image",
"src": "icons/svg/daze.svg" "src": "systems/l5r5e/assets/icons/conditions/illness_unsteady_illness.webp"
}, },
"Illness: Unsteady Illness": { "Illness: Unsteady Illness": {
"name": "Maladie : Vertiges", "name": "Maladie : Vertiges",
@@ -269,7 +269,7 @@
"pages": { "pages": {
"Figure: Illness: Fire Rash": { "Figure: Illness: Fire Rash": {
"name": "Maladie : Rougeurs - Image", "name": "Maladie : Rougeurs - Image",
"src": "icons/svg/fire.svg" "src": "systems/l5r5e/assets/icons/conditions/illness_fire_rash.webp"
}, },
"Illness: Fire Rash": { "Illness: Fire Rash": {
"name": "Maladie : Rougeurs", "name": "Maladie : Rougeurs",
@@ -282,7 +282,7 @@
"pages": { "pages": {
"Figure: Centered": { "Figure: Centered": {
"name": "Centered (WIP) - Image", "name": "Centered (WIP) - Image",
"src": "systems/l5r5e/assets/icons/social.svg" "src": "systems/l5r5e/assets/icons/conditions/centered.webp"
}, },
"Centered": { "Centered": {
"name": "Centered (WIP)", "name": "Centered (WIP)",
@@ -295,7 +295,7 @@
"pages": { "pages": {
"Figure: Emboldened": { "Figure: Emboldened": {
"name": "Emboldened (WIP) - Image", "name": "Emboldened (WIP) - Image",
"src": "systems/l5r5e/assets/icons/social.svg" "src": "systems/l5r5e/assets/icons/conditions/emboldened.webp"
}, },
"Emboldened": { "Emboldened": {
"name": "Emboldened (WIP)", "name": "Emboldened (WIP)",
@@ -308,7 +308,7 @@
"pages": { "pages": {
"Figure: Possessed": { "Figure: Possessed": {
"name": "Possessed (WIP) - Image", "name": "Possessed (WIP) - Image",
"src": "icons/svg/terror.svg" "src": "systems/l5r5e/assets/icons/conditions/possesed.webp"
}, },
"Possessed": { "Possessed": {
"name": "Possessed (WIP)", "name": "Possessed (WIP)",

View File

@@ -705,6 +705,7 @@
"demeanor": { "demeanor": {
"adaptable": "Adaptable", "adaptable": "Adaptable",
"aggressive": "Aggressive", "aggressive": "Aggressive",
"alluring": "Alluring",
"ambitious": "Ambitious", "ambitious": "Ambitious",
"amiable": "Amiable", "amiable": "Amiable",
"analytical": "Analytical", "analytical": "Analytical",
@@ -713,6 +714,7 @@
"assertive": "Assertive", "assertive": "Assertive",
"beguiling": "Beguiling", "beguiling": "Beguiling",
"bitter": "Bitter", "bitter": "Bitter",
"bloodthirsty": "Bloodthirsty",
"bold": "Bold", "bold": "Bold",
"calculating": "Calculating", "calculating": "Calculating",
"calm": "Calm", "calm": "Calm",
@@ -723,37 +725,68 @@
"confused": "Confused", "confused": "Confused",
"courageous": "Courageous", "courageous": "Courageous",
"cowardly": "Cowardly", "cowardly": "Cowardly",
"crestfallen": "Crestfallen",
"curious": "Curious", "curious": "Curious",
"defensive": "Defensive",
"dependable": "Dependable", "dependable": "Dependable",
"detached": "Detached", "detached": "Detached",
"determined": "Determined",
"devoted": "Devoted",
"direct": "Direct",
"disheartened": "Disheartened", "disheartened": "Disheartened",
"dour": "Dour",
"duplicitous": "Duplicitous",
"effusive": "Effusive",
"enraged": "Enraged", "enraged": "Enraged",
"fanatical": "Fanatical",
"feral": "Feral", "feral": "Feral",
"fervent": "Fervent",
"fickle": "Fickle", "fickle": "Fickle",
"fierce": "Fierce", "fierce": "Fierce",
"flighty": "Flighty", "flighty": "Flighty",
"flippant": "Flippant", "flippant": "Flippant",
"friendly": "Friendly", "friendly": "Friendly",
"gruff": "Gruff", "gruff": "Gruff",
"honorable": "Honorable",
"hubristic": "Prétentieuse",
"hungry": "Hungry", "hungry": "Hungry",
"idealistic": "Idealistic",
"imposing": "Imposing",
"inquisitive": "Inquisitive",
"intense": "Intense", "intense": "Intense",
"intimidating": "Intimidating", "intimidating": "Intimidating",
"irritable": "Irritable", "irritable": "Irritable",
"loyal": "Loyal", "loyal": "Loyal",
"methodical": "Methodical",
"meticulous": "Meticulous",
"mischievous": "Mischievous", "mischievous": "Mischievous",
"moon_blessed": "Moon-blessed",
"morose": "Morose", "morose": "Morose",
"near_feral": "Near feral",
"nurturing": "Nurturing", "nurturing": "Nurturing",
"obsessed": "Obsessed",
"obstinate": "Obstinate", "obstinate": "Obstinate",
"opportunistic": "Opportunistic", "opportunistic": "Opportunistic",
"otherworldly": "Otherworldly",
"outgoing": "Outgoing",
"passionate": "Passionate", "passionate": "Passionate",
"patient": "Patient",
"personable": "Personable",
"playful": "Playful", "playful": "Playful",
"power_hungry": "Power hungry", "power_hungry": "Power hungry",
"proud": "Proud", "proud": "Proud",
"refined": "Refined",
"reserved": "Reserved",
"restrained": "Restrained", "restrained": "Restrained",
"righteous": "Righteous",
"scheming": "Scheming", "scheming": "Scheming",
"serene": "Serene", "serene": "Serene",
"serious": "Serious", "serious": "Serious",
"shrewd": "Shrewd", "shrewd": "Shrewd",
"sinister": "Sinister",
"sociable": "Sociable",
"stoic": "Stoic",
"starved": "Starved",
"stubborn": "Stubborn", "stubborn": "Stubborn",
"suspicious": "Suspicious", "suspicious": "Suspicious",
"teasing": "Teasing", "teasing": "Teasing",
@@ -761,7 +794,12 @@
"uncertain": "Uncertain", "uncertain": "Uncertain",
"unenthused": "Unenthused", "unenthused": "Unenthused",
"vain": "Vain", "vain": "Vain",
"wary": "Wary" "vengeful": "Vengeful",
"vindictive": "Vindictive",
"wary": "Wary",
"watchful": "Watchful",
"wrathful": "Wrathful",
"zealous": "Zealous"
}, },
"compendium": { "compendium": {
"filter_rank": "Show Rank", "filter_rank": "Show Rank",
@@ -799,6 +837,32 @@
"the_scroll_or_the_blade": "The Scroll or the Blade", "the_scroll_or_the_blade": "The Scroll or the Blade",
"legacies_of_war": "Legacies of War", "legacies_of_war": "Legacies of War",
"children_of_the_five_winds": "Children of the Five Winds" "children_of_the_five_winds": "Children of the Five Winds"
},
"tactical_grid": {
"settings": {
"title": "Tactical Grid Settings",
"label": "Tactical Grid Settings",
"hint": "Configures tactical grid range band distances (GM only) and their visual appearance colors and transparency (all users).",
"cells": "spaces",
"world": {
"enabled": "Enable Tactical Grid",
"enabled_hint": "Enables or Disable tactical grid for everyone",
"start": "Start"
},
"client": {
"color": "Color",
"alpha": "Alpha"
},
"range": "Range {index}",
"validate": {
"start-too-small": "Must be greater than Range Band {previousRangeIndex} ({previousStart})",
"start-too-large": "Must be lower then Range Band {nextRangeIndex} ({nextStart})"
},
"reset": "Reset to Default",
"submit": "Save"
},
"range_band": "Range Band {band}",
"range_abbreviation": "RB {range}"
} }
} }
} }

View File

@@ -4,17 +4,17 @@
"Maintainers": ["Team L5R"] "Maintainers": ["Team L5R"]
}, },
"SETTINGS": { "SETTINGS": {
"None": "Sin opción", "None": "Sin opciones",
"ReverseTokenBars": { "ReverseTokenBars": {
"Title": "Reverse tokens bar", "Title": "Barra de tokens inversa",
"Hint": "Change the order in which the bars under the tokens are filled in", "Hint": "Cambia el orden en el que se rellenan las barras debajo de los tokens",
"None": "None", "None": "Ninguno",
"Fatigue": "Fatigue only", "Fatigue": "Sólo Fatiga",
"Strife": "Strife", "Strife": "Conflicto",
"Both": "Both Fatigue and Strife" "Both": "Tanto la Fatiga como el Conflicto"
}, },
"RollNKeep": { "RollNKeep": {
"DeleteOldMessage": "TyG Eliminar el mensaje anterior del chat", "DeleteOldMessage": "TyG eliminar el mensaje anterior del chat",
"DeleteOldMessageHint": "Elige si mantener o borrar el mensaje anterior de la serie TyG" "DeleteOldMessageHint": "Elige si mantener o borrar el mensaje anterior de la serie TyG"
}, },
"Initiative": { "Initiative": {
@@ -22,38 +22,38 @@
"SetTn1OnTypeChangeHint": "Poner el NO a 1 cuando se elige el tipo de encuentro (Intriga, Duelo, Escaramuza o Batalla a gran escala)" "SetTn1OnTypeChangeHint": "Poner el NO a 1 cuando se elige el tipo de encuentro (Intriga, Duelo, Escaramuza o Batalla a gran escala)"
}, },
"ShowAllStatusEffects": { "ShowAllStatusEffects": {
"Title": "Show all StatusEffects", "Title": "Mostrar todos los efectos de estado",
"Hint": "If uncheck (default), only L5R conditions are shown." "Hint": "Si se desmarca (por defecto), solo se muestran las condiciones de L5A."
}, },
"CustomTechniques": { "CustomTechniques": {
"Title": "Use custom techniques", "Title": "Usar técnicas personalizadas",
"Hint": "Add 'Specificity' technique type to serve as a catch-all." "Hint": "Añadir el tipo de técnica 'Particularidad' para que sirva como comodín."
}, },
"CustomCompendiumName": { "CustomCompendiumName": {
"Title": "Custom Compendium Name", "Title": "Nombre de Compendio personalizado",
"Hint": "For advanced users that want to change the name of the custom compendiums (Used to disables the embedded ones).", "Hint": "Permite a los usuarios avanzados cambiar el nombre de los compendios personalizados (utilizados para desactivar los compendios integrados).",
"Notification": "Unable set Custom Compendium: '{name}'. Is it activated and registered with Babele?" "Notification": "No se puede configurar el compendio personalizado: '{name}'. ¿Está activado y registrado con Babele?"
}, },
"CustomItemsHeight": { "CustomItemsHeight": {
"Title": "Default items windows height", "Title": "Altura predeterminada de las ventanas de objetos",
"Hint": "Set the default height for 'Items' windows types (techniques, weapons...), in pixels" "Hint": "Establecer la altura predeterminada para las ventanas de 'objetos' (técnicas, armas...), en píxeles."
}, },
"Compendium": { "Compendium": {
"HideDisabledSources": { "HideDisabledSources": {
"Title": "[Compendium] Hide sources filter without reference", "Title": "[Compendio] Ocultar filtro de fuentes sin referencia",
"Hint": "Hide empty source with no elements in source filter." "Hint": "Ocultar fuentes vacías sin elementos en el filtro de fuentes."
}, },
"HideEmptySourcesFromPlayers": { "HideEmptySourcesFromPlayers": {
"Title": "[Compendium] Hide elements with empty reference", "Title": "[Compendio] Ocultar elementos con referencias vacías",
"Hint": "Basically require a reference to be set in order for players to view the content in compendiums" "Hint": "Requiere que se establezca una referencia para que los jugadores puedan ver el contenido de los compendios."
}, },
"AllowedOfficialSources": { "AllowedOfficialSources": {
"Title": "[Compendium] Available official resources", "Title": "[Compendio] Recursos oficiales disponibles",
"Hint": "Useful if you as a GM want to limit the available official content to only books you own" "Hint": "Útil si, como DJ, quieres limitar el contenido oficial disponible solo a los libros que tienes."
}, },
"AllowedUnofficialSources": { "AllowedUnofficialSources": {
"Title": "[Compendium] Available unofficial resources", "Title": "[Compendio] Recursos no oficiales disponibles",
"Hint": "Useful if you have compendiums with custom items mixed with player facing items." "Hint": "Útil si tienes compendios con objetos personalizados mezclados con objetos destinados a los jugadores.."
} }
} }
}, },
@@ -83,64 +83,64 @@
} }
}, },
"l5r5e": { "l5r5e": {
"title": "Legend of the five Rings", "title": "La Leyenda de los Cinco Anillos",
"conditions": { "conditions": {
"afflicted": "Afflicted", "afflicted": "Afligido",
"bleeding": "Bleeding", "bleeding": "Hemorragia",
"burning": "Burning", "burning": "Ardiendo",
"centered": "Centered", "centered": "Centrado",
"compromised": "Compromised", "compromised": "Comprometido",
"dazed": "Dazed", "dazed": "Atontado",
"disoriented": "Disoriented", "disoriented": "Desorientado",
"dying": "Dying", "dying": "Moribundo",
"emboldened": "Emboldened", "emboldened": "Alentado",
"enraged": "Enraged", "enraged": "Enfurecido",
"exhausted": "Exhausted", "exhausted": "Agotado",
"immobilized": "Immobilized", "immobilized": "Inmovilizado",
"illness_coughing_illness": "Illness: Coughing Illness", "illness_coughing_illness": "Enfermedad: tos enfermiza",
"illness_fire_rash": "Illness: Fire Rash", "illness_fire_rash": "Enfermedad: sarpullido de fuego",
"illness_gut_sickness": "Illness: Gut Sickness", "illness_gut_sickness": "Enfermedad: malestar intestinal",
"illness_oozing_sore_disease": "Illness: Oozing Sore Disease", "illness_oozing_sore_disease": "Enfermedad: llagas supurantes",
"illness_unsteady_illness": "Illness: Unsteady Illness", "illness_unsteady_illness": "Enfermedad: temblores",
"incapacitated": "Incapacitated", "incapacitated": "Incapacitado",
"intoxicated": "Intoxicated", "intoxicated": "Intoxicado",
"possessed": "Possessed", "possessed": "Poseído",
"prone": "Prone", "prone": "Tumbado",
"silenced": "Silenced", "silenced": "Silenciado",
"unconscious": "Unconscious", "unconscious": "Inconsciente",
"lightly_wounded_fire": "Lightly Wounded (Fire)", "lightly_wounded_fire": "Herida leve (Fuego)",
"lightly_wounded_water": "Lightly Wounded (Water)", "lightly_wounded_water": "Herida leve (Agua)",
"lightly_wounded_air": "Lightly Wounded (Air)", "lightly_wounded_air": "Herida leve (Aire)",
"lightly_wounded_earth": "Lightly Wounded (Earth)", "lightly_wounded_earth": "Herida leve (Tierra)",
"lightly_wounded_void": "Lightly Wounded (Void)", "lightly_wounded_void": "Herida leve (Vacío)",
"severely_wounded_fire": "Severely Wounded (Fire)", "severely_wounded_fire": "Herida grave (Fuego)",
"severely_wounded_water": "Severely Wounded (Water)", "severely_wounded_water": "Herida grave (Agua)",
"severely_wounded_air": "Severely Wounded (Air)", "severely_wounded_air": "Herida grave (Aire)",
"severely_wounded_earth": "Severely Wounded (Earth)", "severely_wounded_earth": "Herida grave (Tierra)",
"severely_wounded_void": "Severely Wounded (Void)" "severely_wounded_void": "Herida grave (Vacío)"
}, },
"global": { "global": {
"edge_translation_disclaimer": "Edge Studio nos da su permiso para ofrecer este módulo a la comunidad, pero tanto los textos así como los códigos que lo constituyen no tienen su aprobación explícita.", "edge_translation_disclaimer": "Edge Studio nos da su permiso para ofrecer este módulo a la comunidad, pero tanto los textos así como los códigos que lo constituyen no tienen su aprobación explícita.",
"add": "Añadir", "add": "Añadir",
"edit": "Editar", "edit": "Editar",
"delete_confirm": "¿Estás seguro de que quieres borrar '{name}' ?", "delete_confirm": "¿Estás seguro de que quieres borrar '{name}'?",
"drop_here": "Dejar caer aquí", "drop_here": "Dejar caer aquí",
"send_to_chat": "To Chat", "send_to_chat": "Al Chat",
"locked": "Locked", "locked": "Bloqueado",
"unlocked": "Unlocked", "unlocked": "Desbloqueado",
"random": "Random" "random": "Aleatorio"
}, },
"multiselect": { "multiselect": {
"empty_tag": "<blank>", "empty_tag": "<blank>",
"placeholder": "Filter Sources", "placeholder": "Filtro de recursos",
"player_filter_label": "Player filter", "player_filter_label": "Filtro de jugador",
"player_filter_tooltip": "Apply player filter", "player_filter_tooltip": "Aplicar filtro de jugador",
"already_in_filter": "Already in filter", "already_in_filter": "Ya en el filtro",
"sources_categories": { "sources_categories": {
"rules": "Rules", "rules": "Reglas",
"adventures": "Adventures", "adventures": "Aventuras",
"supplements": "Supplements", "supplements": "Suplementos",
"others": "Others" "others": "Otros"
} }
}, },
"logo": { "logo": {
@@ -160,19 +160,19 @@
}, },
"discord": { "discord": {
"title": "Discord oficial de FoundryVTT", "title": "Discord oficial de FoundryVTT",
"info": "Su navegador se abrirá el discord oficial de Foundry", "info": "Tu navegador abrirá el discord oficial de Foundry",
"link": "https://discordapp.com/invite/DDBZUDf" "link": "https://discordapp.com/invite/DDBZUDf"
}, },
"notes": { "notes": {
"title": "Changelog", "title": "Registro de cambios",
"link": "https://gitlab.com/teaml5r/l5r5e/-/blob/master/CHANGELOG.md" "link": "https://gitlab.com/teaml5r/l5r5e/-/blob/master/CHANGELOG.md"
}, },
"issues": { "issues": {
"title": "Issues", "title": "Problemas",
"link": "https://gitlab.com/teaml5r/l5r5e/-/issues" "link": "https://gitlab.com/teaml5r/l5r5e/-/issues"
}, },
"custom-compendiums": { "custom-compendiums": {
"title": "Compendiums", "title": "Compendios",
"link": "https://gitlab.com/teaml5r/l5r5e/-/wikis/users/custom-compendiums.md" "link": "https://gitlab.com/teaml5r/l5r5e/-/wikis/users/custom-compendiums.md"
}, },
"wiki": { "wiki": {
@@ -231,10 +231,10 @@
"success_text": "¡Éxito!", "success_text": "¡Éxito!",
"bonus_text": "Éxitos adicionales", "bonus_text": "Éxitos adicionales",
"fail_text": "¡Fallo!", "fail_text": "¡Fallo!",
"unknown_target": "Unknown target" "unknown_target": "Objetivo desconocido"
}, },
"dicepicker": { "dicepicker": {
"title": "Dice Picker", "title": "Selector de dados",
"difficulty_title": "Dificultad", "difficulty_title": "Dificultad",
"difficulty_hidden_label": "Ocultar NO", "difficulty_hidden_label": "Ocultar NO",
"use_void_point_label": "Gasta un", "use_void_point_label": "Gasta un",
@@ -242,7 +242,7 @@
"skill_assistance_label": "Asistencia", "skill_assistance_label": "Asistencia",
"roll_label": "Tirar", "roll_label": "Tirar",
"bt_add_macro": "Añadir una macro", "bt_add_macro": "Añadir una macro",
"gm_request_dp_to_players": "Roll request sent to players" "gm_request_dp_to_players": "Solicitud de tirada enviada a los jugadores"
}, },
"roll_n_keep": { "roll_n_keep": {
"title": "Tirar y guardar", "title": "Tirar y guardar",
@@ -252,13 +252,13 @@
"keep_drop_here": "Guardar", "keep_drop_here": "Guardar",
"max": "Máx", "max": "Máx",
"bt_validate": "Terminar este paso", "bt_validate": "Terminar este paso",
"bt_strife": "Apply strife", "bt_strife": "Aplicar Conflicto",
"undo": "[GM] Deshacer los últimos cambios" "undo": "[GM] Deshacer los últimos cambios"
} }
}, },
"gm": { "gm": {
"toolbox": { "toolbox": {
"title": "GM ToolBox", "title": "Caja de herramientas del DJ",
"difficulty_hidden": "Cambiar la dificultad visible", "difficulty_hidden": "Cambiar la dificultad visible",
"difficulty": "Cambiar dificultad (Izquierda: añadir, Derecha: sustraer, central: NO 2)", "difficulty": "Cambiar dificultad (Izquierda: añadir, Derecha: sustraer, central: NO 2)",
"sleep": "Descanso confortable para todos los personajes (Eliminar fatiga = Agua x2. (Click Izquierdo: sólo a los personajes seleccionados. Derecho: a todos los actores)", "sleep": "Descanso confortable para todos los personajes (Eliminar fatiga = Agua x2. (Click Izquierdo: sólo a los personajes seleccionados. Derecho: a todos los actores)",
@@ -274,7 +274,7 @@
"add_selected_tokens": "Add selected tokens", "add_selected_tokens": "Add selected tokens",
"honor_glory_status": "H/G/E", "honor_glory_status": "H/G/E",
"focus_vigilance": "Con./Ale.", "focus_vigilance": "Con./Ale.",
"mouse_control": "Click Izquierdo +1, Derecho: -1, middle: set to 0" "mouse_control": "Click Izquierdo +1, Derecho: -1, medio: poner a 0"
} }
}, },
"weapons": { "weapons": {
@@ -307,7 +307,7 @@
"type": "Técnicas permitidas", "type": "Técnicas permitidas",
"kata": "Kata", "kata": "Kata",
"kiho": "Kihõ", "kiho": "Kihõ",
"inversion": "Inversion", "inversion": "Inversión",
"invocation": "Invocación", "invocation": "Invocación",
"ritual": "Ritual", "ritual": "Ritual",
"shuji": "Shuji", "shuji": "Shuji",
@@ -317,7 +317,7 @@
"school_ability": "Capacidad de escuela", "school_ability": "Capacidad de escuela",
"mastery_ability": "Habilidad de maestría", "mastery_ability": "Habilidad de maestría",
"title_ability": "Capacidad de título", "title_ability": "Capacidad de título",
"specificity": "Specificity" "specificity": "Particularidad"
}, },
"peculiarities": { "peculiarities": {
"types": { "types": {
@@ -340,7 +340,7 @@
"status": "Estatus", "status": "Estatus",
"ninjo": "Ninjo", "ninjo": "Ninjo",
"giri": "Giri", "giri": "Giri",
"past": "Past", "past": "Pasado",
"bushido_tenets": { "bushido_tenets": {
"title": "Preceptos del Bushidō", "title": "Preceptos del Bushidō",
"paramount": "Más importante", "paramount": "Más importante",
@@ -357,20 +357,20 @@
"combat": "Combate", "combat": "Combate",
"intrigue": "Intriga" "intrigue": "Intriga"
}, },
"age": "Age", "age": "Edad",
"children": "Children", "children": "Vástagos",
"marital_status": { "marital_status": {
"title": "Marital Status", "title": "Estado civil",
"partner": "Partner", "partner": "Pareja",
"married": "Married", "married": "Casado",
"betrothed": "Betrothed", "betrothed": "Prometido",
"unmarried": "Unmarried", "unmarried": "Soltero",
"widowed": "Widowed" "widowed": "Viudo"
}, },
"gender": { "gender": {
"title": "Gender", "title": "Género",
"male": "Male", "male": "Masculino",
"female": "Female" "female": "Femenino"
} }
}, },
"skills": { "skills": {
@@ -500,33 +500,33 @@
"minion": "Esbirro" "minion": "Esbirro"
}, },
"army": { "army": {
"warlord": "Warlord", "warlord": "Señor de la guerra",
"allies_backers": "Allies and Backers", "allies_backers": "Aliados y apoyos",
"purpose_mustering": "Purpose for Mustering", "purpose_mustering": "Propósito de la movilización",
"battle_readiness": { "battle_readiness": {
"title": "Battle Readiness", "title": "Preparación para la batalla",
"strength": "Strength", "strength": "Fuerza",
"casualties": "Casualties", "casualties": "Bajas",
"discipline": "Discipline", "discipline": "Disciplina",
"panic": "Panic" "panic": "Pánico"
}, },
"commander": "Commander", "commander": "Comandante",
"commander_abilities": "Commander's relevant abilities", "commander_abilities": "Habilidades relevantes del comandante",
"army_abilities": "Army Abilities", "army_abilities": "Habilidades del ejército",
"commander_standing": "Commander's Standing", "commander_standing": "Posición del comandante",
"supplies_logistics": "Supplies and Logistics", "supplies_logistics": "Logística y suministros",
"past_battles": "Past Battles", "past_battles": "Batallas anteriores",
"cohort": { "cohort": {
"tab": "Cohorts", "tab": "Cohortes",
"title": "Cohort", "title": "Cohorte",
"leader": "Leader", "leader": "Líder",
"abilities": "Abilities" "abilities": "Habilidades"
}, },
"fortification": { "fortification": {
"tab": "Fortifications", "tab": "Fortificaciones",
"title": "Fortification Held", "title": "Fortificación",
"difficulty": "Difficulty Value", "difficulty": "Valor de dificultad",
"attrition_reduction": "Attrition Reduction" "attrition_reduction": "Reducción del desgaste"
} }
}, },
"twenty_questions": { "twenty_questions": {
@@ -553,19 +553,19 @@
}, },
"part1": { "part1": {
"title": "Parte I: Identidad básica (Clan y Familia)", "title": "Parte I: Identidad básica (Clan y Familia)",
"title_pow": "Part I: Core Identity (Region and Upbringing)", "title_pow": "Parte I: Identidad básica (Región y educación)",
"q1": "1. ¿A qué clan pertenece tu personaje? (p. 41)", "q1": "1. ¿A qué clan pertenece tu personaje? (p. 41)",
"q1_pow": "1. What region does your character come from? (p. 31)", "q1_pow": "1. ¿De que región viene tu personaje? (p. 31)",
"status": "Estatus", "status": "Estatus",
"q2": "2. ¿A qué familia pertenece tu personaje? (p. 49)", "q2": "2. ¿A qué familia pertenece tu personaje? (p. 49)",
"q2_pow": "2. What was your characters upbringing? (p. 43)", "q2_pow": "2. ¿Cual fue la educación de tu personaje? (p. 43)",
"money": "Riqueza inicial en Koku", "money": "Riqueza inicial en Koku",
"glory": "Gloria" "glory": "Gloria"
}, },
"part2": { "part2": {
"title": "Parte II: Función y escuela", "title": "Parte II: Función y escuela",
"q3": "3. ¿Cuál es la escuela de tu personaje, y en qué funciones cumple esa escuela? (p. 56)", "q3": "3. ¿Cuál es la escuela de tu personaje, y en qué funciones cumple esa escuela? (p. 56)",
"q3_pow": "3. What is your characters school, and what are its associated roles? (p. 46)", "q3_pow": "3. ¿Cuál es la escuela de tu personaje y cuáles son sus funciones asociadas? (p. 46)",
"school": "Escuela", "school": "Escuela",
"role": "Funciones", "role": "Funciones",
"honor": "Honor", "honor": "Honor",
@@ -574,23 +574,23 @@
"starting_techniques": "Técnicas iniciales (2-6)", "starting_techniques": "Técnicas iniciales (2-6)",
"outfit": "Equipo inicial", "outfit": "Equipo inicial",
"q4": "4. ¿De qué manera destaca tu personaje dentro de su escuela? (p. 88)", "q4": "4. ¿De qué manera destaca tu personaje dentro de su escuela? (p. 88)",
"q4_pow": "4. What gets your character in and out of trouble? (p. 60)" "q4_pow": "4. ¿Qué es lo que mete y saca a tu personaje de problemas? (p. 60)"
}, },
"part3": { "part3": {
"title": "Parte III: Honor y Gloria", "title": "Parte III: Honor y Gloria",
"title_pow": "Part III: The Past and the Future they interact and process", "title_pow": "Parte III: El pasado y el futuro interactúan y se funden.",
"q5": "5. ¿Quién es tu señor y cuál es el deber de tu personaje hacia él? (p. 88)", "q5": "5. ¿Quién es tu señor y cuál es el deber de tu personaje hacia él? (p. 88)",
"q5_pow": "5. What is your characters past and how does it Affect them? (p. 60)", "q5_pow": "5. ¿Cuál es el pasado de tu personaje y cómo le afecta? (p. 60)",
"choose_giri": "Elige un giri:", "choose_giri": "Elige un giri:",
"choose_past": "Select past", "choose_past": "Elige un pasado:",
"q6": "6. ¿Qué es lo que anhela tu personaje, y cómo podría esto interferir con su deber? (p. 90)", "q6": "6. ¿Qué es lo que anhela tu personaje, y cómo podría esto interferir con su deber? (p. 90)",
"q6_pow": "6. What does your character long for, and how might their past impact their ninjō? (p. 62)", "q6_pow": "6. ¿Qué anhela tu personaje y cómo podría afectar su pasado a su ninjō? (p. 62)",
"choose_ninjo": "Elige un ninjō:", "choose_ninjo": "Elige un ninjō:",
"q7": "7. ¿Cuál es la relación de tu personaje con tu clan? (p. 91)", "q7": "7. ¿Cuál es la relación de tu personaje con tu clan? (p. 91)",
"q7_pow": "7. What is your character known for? (p. 61)", "q7_pow": "7. ¿Por qué es conocido tu personaje? (p. 61)",
"increase_glory": "Aumento de la gloria", "increase_glory": "Aumento de la gloria",
"q8": "8. ¿Qué piensa tu personaje acerca del Bushidō? (p. 91)", "q8": "8. ¿Qué piensa tu personaje acerca del Bushidō? (p. 91)",
"q8_pow": "8. What does your character think of Bushidō? (p. 62)", "q8_pow": "8. ¿Qué piensa tu personaje acerca del Bushidō? (p. 62)",
"increase_honor": "Aumento del honor", "increase_honor": "Aumento del honor",
"tenets": "Escoge un precepto del Bushidō más importante y un precepto como menos significativo (ver las opiniones de los Clanes respecto del Bushidō, página 301 del libro de reglas básicas):", "tenets": "Escoge un precepto del Bushidō más importante y un precepto como menos significativo (ver las opiniones de los Clanes respecto del Bushidō, página 301 del libro de reglas básicas):",
"object": "Objeto (Rareza 5 o inferior)" "object": "Objeto (Rareza 5 o inferior)"
@@ -617,22 +617,22 @@
"part5": { "part5": {
"title": "Parte V: Personalidad y Comportamiento", "title": "Parte V: Personalidad y Comportamiento",
"q14": "14. ¿Qué es lo que advierte primero la gente al encontrarse con tu personaje? (p. 93)", "q14": "14. ¿Qué es lo que advierte primero la gente al encontrarse con tu personaje? (p. 93)",
"q14_pow": "14. What is your characters most prized possession? (p. 66)", "q14_pow": "14. ¿Cuál es la posesión más preciada de tu personaje? (p. 66)",
"accoutrement": "Accesorio estético distintivo", "accoutrement": "Accesorio estético distintivo",
"q15": "15. ¿Cómo reacciona tu personaje ante situaciones de tensión? (p. 94)", "q15": "15. ¿Cómo reacciona tu personaje ante situaciones de tensión? (p. 94)",
"q15_pow": "15. ¿Cómo reacciona tu personaje ante situaciones de tensión? (p. 66)", "q15_pow": "15. ¿Cómo reacciona tu personaje ante situaciones de tensión? (p. 66)",
"q16": "16. ¿Cuáles son las relaciones previas de tu personaje con otros clanes, familias, organizaciones y tradiciones? (p. 94)", "q16": "16. ¿Cuáles son las relaciones previas de tu personaje con otros clanes, familias, organizaciones y tradiciones? (p. 94)",
"q16_pow": "16. What are your relationships to your family, the clans, peasants, and others? (p. 66)", "q16_pow": "16. ¿Cómo son tus relaciones con tu familia, los clanes, los campesinos y demás? (p. 66)",
"object": "Objeto (Rareza 7 o inferior)" "object": "Objeto (Rareza 7 o inferior)"
}, },
"part6": { "part6": {
"title": "Parte VI: Ascestros y familia", "title": "Parte VI: Ascestros y familia",
"title_pow": "Part VI: Ancestry and Bonds", "title_pow": "Parte VI: Ascestros y vínculos",
"q17": "17. ¿Cómo describirían sus padres a tu personaje? (p. 95)", "q17": "17. ¿Cómo describirían sus padres a tu personaje? (p. 95)",
"q17_pow": "17. What shared history do you have with your group? (p. 66)", "q17_pow": "17. ¿Qué historia compartes con tu grupo? (p. 66)",
"bond": "Determine an appropriate bond to apply to your relationship", "bond": "Determina el vínculo adecuado que debes aplicar a tu relación.",
"q18": "18. ¿En honor de quién se eligio el nombre de tu personaje? (p. 95)", "q18": "18. ¿En honor de quién se eligio el nombre de tu personaje? (p. 95)",
"q18_pow": "18. Who raised you? (p. 67)", "q18_pow": "18. ¿Quién te crió? (p. 67)",
"d10r1": "Resultado D10 (1/2)", "d10r1": "Resultado D10 (1/2)",
"d10r1_choice": "Primer efecto de D10", "d10r1_choice": "Primer efecto de D10",
"d10r2": "Resultado D10 (2/2)", "d10r2": "Resultado D10 (2/2)",
@@ -652,153 +652,217 @@
} }
}, },
"char_generator": { "char_generator": {
"title": "Character Generator", "title": "Generador de personajes",
"head_bt_title": "Char. Generator", "head_bt_title": "Generador de pj",
"generate": "Generate", "generate": "Generar",
"average_value": "Average value", "average_value": "Valor medio",
"identity": "Clan, gender, age, marital status", "identity": "Clan, género, edad, estado civil",
"attributes": "Social standing, Rings, Attributes and Skills", "attributes": "Posición social, Anillos, Atributos y Habilidades",
"demeanor": "Demeanor & rings affinities", "demeanor": "Comportamiento y afinidades con los anillos",
"peculiarities": "Advantages and Disadvantages", "peculiarities": "Ventajas y desventajas",
"items": "Armors, Weapons, and Items", "items": "Armaduras, armas y objetos.",
"narrative": "Narrative (Description)" "narrative": "Historia (descripción)"
}, },
"roles": { "roles": {
"title": "Funciones", "title": "Funciones",
"artisan": "Artisan", "artisan": "Artesano",
"bushi": "Bushi", "bushi": "Bushi",
"courtier": "Courtier", "courtier": "Cortesano",
"monk": "Monk", "monk": "Monje",
"sage": "Sage", "sage": "Sabio",
"shinobi": "Shinobi", "shinobi": "Shinobi",
"shugenja": "Shugenja" "shugenja": "Shugenja"
}, },
"clans": { "clans": {
"title": "Clans", "title": "Clanes",
"label": "Clan", "label": "Clan",
"imperial": "Imperial", "imperial": "Imperial",
"crab": "Crab", "crab": "Cangrejo",
"crane": "Crane", "crane": "Grulla",
"dragon": "Dragon", "dragon": "Dragón",
"lion": "Lion", "lion": "Ln",
"phoenix": "Phoenix", "phoenix": "nix",
"scorpion": "Scorpion", "scorpion": "Escorpión",
"unicorn": "Unicorn", "unicorn": "Unicornio",
"mantis": "Mantis", "mantis": "Mantis",
"ronin": "Ronin", "ronin": "Ronin",
"badger": "Badger", "badger": "Tejón",
"bat": "Bat", "bat": "Muerciélago",
"boar": "Boar", "boar": "Jabalí",
"dragonfly": "Dragonfly", "dragonfly": "Libélula",
"firefly": "Firefly", "firefly": "Luciérnaga",
"fox": "Fox", "fox": "Zorro",
"hare": "Hare", "hare": "Liebre",
"monkey": "Monkey", "monkey": "Mono",
"oriole": "Oriole", "oriole": "Oropéndula",
"ox": "Ox", "ox": "Buey",
"sparrow": "Sparrow", "sparrow": "Gorrión",
"tortoise": "Tortoise", "tortoise": "Tortuga",
"ivory_kingdoms": "Ivory Kingdoms", "ivory_kingdoms": "Reinos de Marfil",
"qamarist": "Qamarist", "qamarist": "Qamarista",
"ujik": "Ujik" "ujik": "Ujik"
}, },
"demeanor": { "demeanor": {
"adaptable": "Adaptable", "adaptable": "Adaptable",
"aggressive": "Aggressive", "aggressive": "Agresivo",
"ambitious": "Ambitious", "alluring": "Alluring",
"amiable": "Amiable", "ambitious": "Ambicioso",
"analytical": "Analytical", "amiable": "Amigable",
"angry": "Angry", "analytical": "Analítico",
"arrogant": "Arrogant", "angry": "Enojado",
"assertive": "Assertive", "arrogant": "Arrogante",
"beguiling": "Beguiling", "assertive": "Firme",
"bitter": "Bitter", "beguiling": "Seductor",
"bold": "Bold", "bitter": "Amargado",
"calculating": "Calculating", "bloodthirsty": "Bloodthirsty",
"calm": "Calm", "bold": "Atrevido",
"capricious": "Capricious", "calculating": "Calculador",
"cautious": "Cautious", "calm": "Calmado",
"clever": "Clever", "capricious": "Caprichoso",
"compassionate": "Compassionate", "cautious": "Cuidadoso",
"confused": "Confused", "clever": "Ingenioso",
"courageous": "Courageous", "compassionate": "Compasivo",
"cowardly": "Cowardly", "confused": "Confuso",
"curious": "Curious", "courageous": "Valiente",
"dependable": "Dependable", "cowardly": "Cobarde",
"detached": "Detached", "crestfallen": "Crestfallen",
"disheartened": "Disheartened", "curious": "Curioso",
"enraged": "Enraged", "defensive": "Defensive",
"feral": "Feral", "dependable": "Fiable",
"fickle": "Fickle", "detached": "Desapegado",
"fierce": "Fierce", "determined": "Determined",
"flighty": "Flighty", "devoted": "Devoted",
"flippant": "Flippant", "direct": "Direct",
"friendly": "Friendly", "disheartened": "Desanimado",
"gruff": "Gruff", "dour": "Dour",
"hungry": "Hungry", "duplicitous": "Duplicitous",
"intense": "Intense", "effusive": "Effusive",
"intimidating": "Intimidating", "enraged": "Furioso",
"fanatical": "Fanatical",
"feral": "Salvaje",
"fervent": "Fervent",
"fickle": "Voluble",
"fierce": "Fiero",
"flighty": "Veleidoso",
"flippant": "Frívolo",
"friendly": "Amable",
"gruff": "Hosco",
"honorable": "Honorable",
"hubristic": "Hubristic",
"hungry": "Hambriento",
"idealistic": "Idealistic",
"imposing": "Imposing",
"inquisitive": "Inquisitive",
"intense": "Intenso",
"intimidating": "Intimidante",
"irritable": "Irritable", "irritable": "Irritable",
"loyal": "Loyal", "loyal": "Leal",
"mischievous": "Mischievous", "methodical": "Methodical",
"morose": "Morose", "meticulous": "Meticulous",
"nurturing": "Nurturing", "mischievous": "Travieso",
"obstinate": "Obstinate", "moon_blessed": "Moon-blessed",
"opportunistic": "Opportunistic", "morose": "Taciturno",
"passionate": "Passionate", "near_feral": "Near feral",
"playful": "Playful", "nurturing": "Animador",
"power_hungry": "Power hungry", "obsessed": "Obsessed",
"proud": "Proud", "obstinate": "Obstinado",
"restrained": "Restrained", "opportunistic": "Oportunista",
"scheming": "Scheming", "otherworldly": "Otherworldly",
"serene": "Serene", "outgoing": "Outgoing",
"serious": "Serious", "passionate": "Apasionado",
"shrewd": "Shrewd", "patient": "Patient",
"stubborn": "Stubborn", "personable": "Personable",
"suspicious": "Suspicious", "playful": "Juguetón",
"teasing": "Teasing", "power_hungry": "Ávido de poder",
"proud": "Orgulloso",
"refined": "Refined",
"reserved": "Reserved",
"restrained": "Contenido",
"righteous": "Righteous",
"scheming": "Taimado",
"serene": "Sereno",
"serious": "Serio",
"shrewd": "Artero",
"sinister": "Sinister",
"sociable": "Sociable",
"stoic": "Stoic",
"starved": "Starved",
"stubborn": "Testarudo",
"suspicious": "Suspicaz",
"teasing": "Bromista",
"territorial": "Territorial", "territorial": "Territorial",
"uncertain": "Uncertain", "uncertain": "Inseguro",
"unenthused": "Unenthused", "unenthused": "Sin entusiasmo",
"vain": "Vain", "vain": "Vanidoso",
"wary": "Wary" "vengeful": "Vengeful",
"vindictive": "Vindictive",
"wary": "Precavido",
"watchful": "Watchful",
"wrathful": "Wrathful",
"zealous": "Zealous"
}, },
"compendium": { "compendium": {
"filter_rank": "Show Rank", "filter_rank": "Mostrar rango",
"not_for_players": "Not shown to players", "not_for_players": "No mostrar a los jugadores",
"filter": { "filter": {
"rank": "Rank", "rank": "Rango",
"rarity": "Rarity", "rarity": "Rareza",
"ring": "Ring" "ring": "Anillo"
} }
}, },
"source_reference": { "source_reference": {
"core_rulebook": "Core Rulebook", "core_rulebook": "Libro básico",
"emerald_empire": "Emerald Empire", "emerald_empire": "La guia del Imperio Esmeralda",
"shadowlands": "Shadowlands", "shadowlands": "Las Tierras Sombrías",
"court_of_stones": "Court of Stones", "court_of_stones": "Cortes de piedra",
"path_of_waves": "Path of Waves", "path_of_waves": "Path of Waves",
"celestial_realms": "Celestial Realms", "celestial_realms": "Celestial Realms",
"fields_of_victory": "Fields of Victory", "fields_of_victory": "Fields of Victory",
"writ_of_the_wild": "Writ of the Wild", "writ_of_the_wild": "Writ of the Wild",
"gm_kit": "Game Master's Kit", "gm_kit": "Pantalla del DJ",
"beginner_game": "Beginner Game", "beginner_game": "Caja de inicio",
"the_mantis_clan": "The Mantis Clan", "the_mantis_clan": "El Clan de la Mantis",
"mask_of_the_oni": "Mask of the Oni", "mask_of_the_oni": "La máscara del oni",
"winters_embrace": "Winter's Embrace", "winters_embrace": "El abrazo del invierno",
"sins_of_regret": "Sins of Regret", "sins_of_regret": "Sins of Regret",
"wheel_of_judgment": "Wheel of Judgment", "wheel_of_judgment": "Wheel of Judgment",
"blood_of_the_lioness": "Blood of the Lioness", "blood_of_the_lioness": "Blood of the Lioness",
"imperfect_land": "Imperfect Land", "imperfect_land": "Imperfect Land",
"in_the_palace_of_the_emerald_champion": "In the Palace of the Emerald Champion", "in_the_palace_of_the_emerald_champion": "En el palacio del Campeón Esmeralda",
"the_highwayman": "The Highwayman", "the_highwayman": "The Highwayman",
"wedding_at_kyotei_castle": "Wedding at Kyotei Castle", "wedding_at_kyotei_castle": "Esponsales en el Castillo Kyotei",
"the_knotted_tails": "The Knotted Tails", "the_knotted_tails": "Las Colas Anudadas",
"cresting_waves": "Cresting Waves", "cresting_waves": "Mareas Oscuras",
"deathly_turns": "Deathly Turns", "deathly_turns": "Deathly Turns",
"the_scroll_or_the_blade": "The Scroll or the Blade", "the_scroll_or_the_blade": "El pergamino o la espada",
"legacies_of_war": "Legacies of War", "legacies_of_war": "Legacies of War",
"children_of_the_five_winds": "Children of the Five Winds" "children_of_the_five_winds": "Children of the Five Winds"
},
"tactical_grid": {
"settings": {
"title": "Tactical Grid Settings",
"label": "Tactical Grid Settings",
"hint": "Configures tactical grid range band distances (GM only) and their visual appearance colors and transparency (all users).",
"cells": "spaces",
"world": {
"enabled": "Enable Tactical Grid",
"enabled_hint": "Enables or Disable tactical grid for everyone",
"start": "Start"
},
"client": {
"color": "Color",
"alpha": "Alpha"
},
"range": "Range {index}",
"validate": {
"start-too-small": "Must be greater than Range Band {previousRangeIndex} ({previousStart})",
"start-too-large": "Must be lower then Range Band {nextRangeIndex} ({nextStart})"
},
"reset": "Reset to Default",
"submit": "Save"
},
"range_band": "Range Band {band}",
"range_abbreviation": "RB {range}"
} }
} }
} }

View File

@@ -703,65 +703,103 @@
"ujik": "Ujik" "ujik": "Ujik"
}, },
"demeanor": { "demeanor": {
"adaptable": "Adaptable", "adaptable": "Malléable",
"aggressive": "Agressive", "aggressive": "Agressive",
"alluring": "Attirante",
"ambitious": "Ambitieuse", "ambitious": "Ambitieuse",
"amiable": "Sympathique", "amiable": "Aimable",
"analytical": "Réfléchie", "analytical": "Analytique",
"angry": "Enervée", "angry": "En colère",
"arrogant": "Arrogante", "arrogant": "Arrogante",
"assertive": "Assurée", "assertive": "Sûre de soi",
"beguiling": "Séduisante", "beguiling": "Envoûtante",
"bitter": "Amère", "bitter": "Amère",
"bold": "Audacieuse", "bloodthirsty": "Sanguinaire",
"bold": "Courageuse",
"calculating": "Calculatrice", "calculating": "Calculatrice",
"calm": "Calme", "calm": "Calme",
"capricious": "Capricieuse", "capricious": "Capricieuse",
"cautious": "Prudente", "cautious": "Prudente",
"clever": "Astucieuse", "clever": "Malicieuse",
"compassionate": "Compatissante", "compassionate": "Compatissante",
"confused": "Confuse", "confused": "Confuse",
"courageous": "Courageuse", "courageous": "Courageuse",
"cowardly": "Lâche", "cowardly": "Lâche",
"crestfallen": "Démoralisée",
"curious": "Curieuse", "curious": "Curieuse",
"defensive": "Sur la défensive",
"dependable": "Fiable", "dependable": "Fiable",
"detached": "Détachée", "detached": "Détachée",
"disheartened": "Découragée", "determined": "Déterminée",
"devoted": "Fervente",
"direct": "Directe",
"disheartened": "Abattue",
"dour": "Renfrognée",
"duplicitous": "Sournoise",
"effusive": "Communicative",
"enraged": "Enragée", "enraged": "Enragée",
"fanatical": "Fanatique",
"feral": "Sauvage", "feral": "Sauvage",
"fickle": "Inconstante", "fervent": "Dévote",
"fickle": "Volatile",
"fierce": "Féroce", "fierce": "Féroce",
"flighty": "Volage", "flighty": "Inconstante",
"flippant": "Désinvolte", "flippant": "Désinvolte",
"friendly": "Amicale", "friendly": "Amicale",
"gruff": "Bourrue", "gruff": "Bourrue",
"honorable": "Honorable",
"hubristic": "Prétentieuse",
"hungry": "Affamée", "hungry": "Affamée",
"intense": "Intense", "idealistic": "Idéaliste",
"imposing": "Impressionnante",
"inquisitive": "Inquisitrice",
"intense": "Excessive",
"intimidating": "Intimidante", "intimidating": "Intimidante",
"irritable": "Irritable", "irritable": "Colérique",
"loyal": "Fidèle", "loyal": "Loyale",
"mischievous": "Malicieuse", "methodical": "Méthodique",
"meticulous": "Méticuleuse",
"mischievous": "Taquine",
"moon_blessed": "Bénie par la Lune",
"morose": "Morose", "morose": "Morose",
"nurturing": "Encourageante", "near_feral": "Presque sauvage",
"nurturing": "Maternelle",
"obsessed": "Obsessionnelle",
"obstinate": "Obstinée", "obstinate": "Obstinée",
"opportunistic": "Opportuniste", "opportunistic": "Opportuniste",
"otherworldly": "Mystique",
"outgoing": "Agréable",
"passionate": "Passionnée", "passionate": "Passionnée",
"playful": "Enjouée", "patient": "Patiente",
"personable": "Avenante",
"playful": "Joueuse",
"power_hungry": "Avide de pouvoir", "power_hungry": "Avide de pouvoir",
"proud": "Fière", "proud": "Fière",
"restrained": "Restreinte", "refined": "Raffinée",
"scheming": "Intrigante", "restrained": "Modérée",
"reserved": "Réservée",
"righteous": "Intègre",
"scheming": "Fourbe",
"serene": "Sereine", "serene": "Sereine",
"serious": "Sérieuse", "serious": "Sérieuse",
"shrewd": "Astucieuse", "shrewd": "Rusée",
"sinister": "Sinistre",
"sociable": "Affable",
"starved": "Famélique",
"stoic": "Stoïque",
"stubborn": "Têtue", "stubborn": "Têtue",
"suspicious": "Soupçonneuse", "suspicious": "Suspicieuse",
"teasing": "Taquine", "teasing": "Moqueuse",
"territorial": "Territoriale", "territorial": "Territoriale",
"uncertain": "Incertaine", "uncertain": "Peu sûre de soi",
"unenthused": "Peu enthousiaste", "unenthused": "Amorphe",
"vain": "Vaine", "vain": "Orgueilleuse",
"wary": "Méfiante" "vengeful": "Vengeuse",
"vindictive": "Vindicative",
"wary": "Méfiante",
"watchful": "Attentif",
"wrathful": "Furieuse",
"zealous": "Zélée"
}, },
"compendium": { "compendium": {
"filter_rank": "Aff. Rangs", "filter_rank": "Aff. Rangs",
@@ -799,6 +837,32 @@
"the_scroll_or_the_blade": "Le Parchemin ou le Sabre", "the_scroll_or_the_blade": "Le Parchemin ou le Sabre",
"legacies_of_war": "Les Flambeaux de la Guerre", "legacies_of_war": "Les Flambeaux de la Guerre",
"children_of_the_five_winds": "Les Enfants des Cinq Vents" "children_of_the_five_winds": "Les Enfants des Cinq Vents"
},
"tactical_grid": {
"settings": {
"title": "Plan Tactique",
"label": "Paramètres du Plan Tactique",
"hint": "Configure les Niveaux de Portée (GM uniquement), ainsi que les différentes couleurs et transparence (tous les utilisateurs).",
"cells": "cases",
"world": {
"enabled": "Activer le Plan Tactique",
"enabled_hint": "Active ou désactive le plan tactique pour tout le monde",
"start": "Début"
},
"client": {
"color": "Couleur",
"alpha": "Alpha"
},
"range": "Portée {index}",
"validate": {
"start-too-small": "Doit être supérieur à la Portée {previousRangeIndex} ({previousStart})",
"start-too-large": "Doit être inférieur à la Portée {nextRangeIndex} ({nextStart})"
},
"reset": "Réinitialiser les paramètres par défaut",
"submit": "Enregistrer"
},
"range_band": "Portée {band}",
"range_abbreviation": "NP {range}"
} }
} }
} }

View File

@@ -799,6 +799,32 @@
"the_scroll_or_the_blade": "The Scroll or the Blade", "the_scroll_or_the_blade": "The Scroll or the Blade",
"legacies_of_war": "Legacies of War", "legacies_of_war": "Legacies of War",
"children_of_the_five_winds": "Children of the Five Winds" "children_of_the_five_winds": "Children of the Five Winds"
},
"tactical_grid": {
"settings": {
"title": "Tactical Grid Settings",
"label": "Tactical Grid Settings",
"hint": "Configures tactical grid range band distances (GM only) and their visual appearance colors and transparency (all users).",
"cells": "spaces",
"world": {
"enabled": "Enable Tactical Grid",
"enabled_hint": "Enables or Disable tactical grid for everyone",
"start": "Start"
},
"client": {
"color": "Color",
"alpha": "Alpha"
},
"range": "Range {index}",
"validate": {
"start-too-small": "Must be greater than Range Band {previousRangeIndex} ({previousStart})",
"start-too-large": "Must be lower then Range Band {nextRangeIndex} ({nextStart})"
},
"reset": "Reset to Default",
"submit": "Save"
},
"range_band": "Range Band {band}",
"range_abbreviation": "RB {range}"
} }
} }
} }

View File

@@ -109,7 +109,7 @@
{"_id":"L5RCoreIte000111","name":"The horagai of Sacred Rains","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"10","zeni":"0","properties":[{"id":"L5RCorePro000010","name":"Resplendent"},{"id":"L5RCorePro000014","name":"Sacred"}],"description":"","source_reference":{"source":"celestial_realms","page":"96"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]} {"_id":"L5RCoreIte000111","name":"The horagai of Sacred Rains","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"10","zeni":"0","properties":[{"id":"L5RCorePro000010","name":"Resplendent"},{"id":"L5RCorePro000014","name":"Sacred"}],"description":"","source_reference":{"source":"celestial_realms","page":"96"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]}
{"_id":"L5RCoreIte000112","name":"Daikoku's Mallet","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"10","zeni":"0","properties":[{"id":"L5RCorePro000015","name":"Durable"},{"id":"L5RCorePro000014","name":"Sacred"},{"id":"L5RCorePro000016","name":"Subtle"}],"description":"","source_reference":{"source":"celestial_realms","page":"96"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]} {"_id":"L5RCoreIte000112","name":"Daikoku's Mallet","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"10","zeni":"0","properties":[{"id":"L5RCorePro000015","name":"Durable"},{"id":"L5RCorePro000014","name":"Sacred"},{"id":"L5RCorePro000016","name":"Subtle"}],"description":"","source_reference":{"source":"celestial_realms","page":"96"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]}
{"_id":"L5RCoreIte000113","name":"Candles of the Moth","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"9","zeni":"10 Koku","properties":[{"id":"L5RCorePro000002","name":"Ceremonial"},{"id":"L5RCorePro000014","name":"Sacred"},{"id":"L5RCorePro000016","name":"Subtle"}],"description":"","source_reference":{"source":"celestial_realms","page":"96"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]} {"_id":"L5RCoreIte000113","name":"Candles of the Moth","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"9","zeni":"10 Koku","properties":[{"id":"L5RCorePro000002","name":"Ceremonial"},{"id":"L5RCorePro000014","name":"Sacred"},{"id":"L5RCorePro000016","name":"Subtle"}],"description":"","source_reference":{"source":"celestial_realms","page":"96"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]}
{"_id":"L5RCoreIte000114","name":"Astrolabe","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"8","zeni":"1 Koku","properties":[],"description":"","source_reference":{"source":"children_of_the_five_winds","page":"102"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]} {"_id":"L5RCoreIte000114","name":"Astrolabe (Unicorn)","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"8","zeni":"1 Koku","properties":[],"description":"","source_reference":{"source":"children_of_the_five_winds","page":"102"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]}
{"_id":"L5RCoreIte000115","name":"Horo (Arrow Cloak)","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"6","zeni":"5 Koku","properties":[],"description":"","source_reference":{"source":"children_of_the_five_winds","page":"102"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]} {"_id":"L5RCoreIte000115","name":"Horo (Arrow Cloak)","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"6","zeni":"5 Koku","properties":[],"description":"","source_reference":{"source":"children_of_the_five_winds","page":"102"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]}
{"_id":"L5RCoreIte000116","name":"Lantern (Personal)","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"2","zeni":"1 Bu","properties":[],"description":"","source_reference":{"source":"children_of_the_five_winds","page":"102"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]} {"_id":"L5RCoreIte000116","name":"Lantern (Personal)","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"2","zeni":"1 Bu","properties":[],"description":"","source_reference":{"source":"children_of_the_five_winds","page":"102"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]}
{"_id":"L5RCoreIte000117","name":"Mineral-Oil Lamp","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"8","zeni":"6 Koku","properties":[],"description":"","source_reference":{"source":"children_of_the_five_winds","page":"102"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]} {"_id":"L5RCoreIte000117","name":"Mineral-Oil Lamp","permission":{"default":0},"type":"item","data":{"equipped":false,"quantity":1,"weight":"0","rarity":"8","zeni":"6 Koku","properties":[],"description":"","source_reference":{"source":"children_of_the_five_winds","page":"102"}},"sort":100001,"flags":{},"img":"systems/l5r5e/assets/icons/items/item.svg","effects":[]}

View File

@@ -1,24 +1,24 @@
{"_id":"L5RCoreCon000001","name":"Afflicted","content":"<blockquote>Core Rulebook p.271</blockquote>","img":"icons/svg/sun.svg","folder":null,"sort":100001,"permission":{"default":0},"flags":{}} {"_id":"L5RCoreCon000001","name":"Afflicted","content":"<blockquote>Core Rulebook p.271</blockquote>","img":"systems/l5r5e/assets/icons/conditions/afflicted.webp","folder":null,"sort":100001,"permission":{"default":0},"flags":{}}
{"_id":"L5RCoreCon000002","name":"Bleeding","content":"<blockquote>Core Rulebook p.271</blockquote>","img":"icons/svg/blood.svg","folder":null,"sort":100001,"permission":{"default":0},"flags":{}} {"_id":"L5RCoreCon000002","name":"Bleeding","content":"<blockquote>Core Rulebook p.271</blockquote>","img":"systems/l5r5e/assets/icons/conditions/bleeding.webp","folder":null,"sort":100001,"permission":{"default":0},"flags":{}}
{"_id":"L5RCoreCon000003","name":"Burning","content":"<blockquote>Core Rulebook p.272</blockquote>","img":"icons/svg/fire.svg","folder":null,"sort":100001,"permission":{"default":0},"flags":{}} {"_id":"L5RCoreCon000003","name":"Burning","content":"<blockquote>Core Rulebook p.272</blockquote>","img":"systems/l5r5e/assets/icons/conditions/burning.webp","folder":null,"sort":100001,"permission":{"default":0},"flags":{}}
{"_id":"L5RCoreCon000004","name":"Compromised","content":"<blockquote>Core Rulebook p.272</blockquote>","img":"icons/svg/terror.svg","folder":null,"sort":100001,"permission":{"default":0},"flags":{}} {"_id":"L5RCoreCon000004","name":"Compromised","content":"<blockquote>Core Rulebook p.272</blockquote>","img":"systems/l5r5e/assets/icons/conditions/compromised.webp","folder":null,"sort":100001,"permission":{"default":0},"flags":{}}
{"_id":"L5RCoreCon000005","name":"Dazed","content":"<blockquote>Core Rulebook p.272</blockquote>","img":"icons/svg/eye.svg","folder":null,"sort":100001,"permission":{"default":0},"flags":{}} {"_id":"L5RCoreCon000005","name":"Dazed","content":"<blockquote>Core Rulebook p.272</blockquote>","img":"systems/l5r5e/assets/icons/conditions/dazed.webp","folder":null,"sort":100001,"permission":{"default":0},"flags":{}}
{"_id":"L5RCoreCon000006","name":"Disoriented","content":"<blockquote>Core Rulebook p.272</blockquote>","img":"icons/svg/daze.svg","folder":null,"sort":100001,"permission":{"default":0},"flags":{}} {"_id":"L5RCoreCon000006","name":"Disoriented","content":"<blockquote>Core Rulebook p.272</blockquote>","img":"systems/l5r5e/assets/icons/conditions/disoriented.webp","folder":null,"sort":100001,"permission":{"default":0},"flags":{}}
{"_id":"L5RCoreCon000007","name":"Dying [X Rounds]","content":"<blockquote>Core Rulebook p.272</blockquote>","img":"icons/svg/skull.svg","folder":null,"sort":100001,"permission":{"default":0},"flags":{}} {"_id":"L5RCoreCon000007","name":"Dying [X Rounds]","content":"<blockquote>Core Rulebook p.272</blockquote>","img":"systems/l5r5e/assets/icons/conditions/dying_1.webp","folder":null,"sort":100001,"permission":{"default":0},"flags":{}}
{"_id":"L5RCoreCon000008","name":"Enraged","content":"<blockquote>Core Rulebook p.272</blockquote>","img":"icons/svg/lightning.svg","folder":null,"sort":100001,"permission":{"default":0},"flags":{}} {"_id":"L5RCoreCon000008","name":"Enraged","content":"<blockquote>Core Rulebook p.272</blockquote>","img":"systems/l5r5e/assets/icons/conditions/enraged.webp","folder":null,"sort":100001,"permission":{"default":0},"flags":{}}
{"_id":"L5RCoreCon000009","name":"Exhausted","content":"<blockquote>Core Rulebook p.272</blockquote>","img":"icons/svg/sleep.svg","folder":null,"sort":100001,"permission":{"default":0},"flags":{}} {"_id":"L5RCoreCon000009","name":"Exhausted","content":"<blockquote>Core Rulebook p.272</blockquote>","img":"systems/l5r5e/assets/icons/conditions/exhausted.webp","folder":null,"sort":100001,"permission":{"default":0},"flags":{}}
{"_id":"L5RCoreCon000010","name":"Immobilized","content":"<blockquote>Core Rulebook p.272</blockquote>","img":"icons/svg/net.svg","folder":null,"sort":100001,"permission":{"default":0},"flags":{}} {"_id":"L5RCoreCon000010","name":"Immobilized","content":"<blockquote>Core Rulebook p.272</blockquote>","img":"systems/l5r5e/assets/icons/conditions/immobilized.webp","folder":null,"sort":100001,"permission":{"default":0},"flags":{}}
{"_id":"L5RCoreCon000011","name":"Incapacitated","content":"<blockquote>Core Rulebook p.272</blockquote>","img":"icons/svg/downgrade.svg","folder":null,"sort":100001,"permission":{"default":0},"flags":{}} {"_id":"L5RCoreCon000011","name":"Incapacitated","content":"<blockquote>Core Rulebook p.272</blockquote>","img":"systems/l5r5e/assets/icons/conditions/incapacitated.webp","folder":null,"sort":100001,"permission":{"default":0},"flags":{}}
{"_id":"L5RCoreCon000012","name":"Intoxicated","content":"<blockquote>Core Rulebook p.273</blockquote>","img":"icons/svg/poison.svg","folder":null,"sort":100001,"permission":{"default":0},"flags":{}} {"_id":"L5RCoreCon000012","name":"Intoxicated","content":"<blockquote>Core Rulebook p.273</blockquote>","img":"systems/l5r5e/assets/icons/conditions/intoxicated.webp","folder":null,"sort":100001,"permission":{"default":0},"flags":{}}
{"_id":"L5RCoreCon000013","name":"Prone","content":"<blockquote>Core Rulebook p.273</blockquote>","img":"icons/svg/falling.svg","folder":null,"sort":100001,"permission":{"default":0},"flags":{}} {"_id":"L5RCoreCon000013","name":"Prone","content":"<blockquote>Core Rulebook p.273</blockquote>","img":"systems/l5r5e/assets/icons/conditions/prone.webp","folder":null,"sort":100001,"permission":{"default":0},"flags":{}}
{"_id":"L5RCoreCon000014","name":"Silenced","content":"<blockquote>Core Rulebook p.273</blockquote>","img":"icons/svg/silenced.svg","folder":null,"sort":100001,"permission":{"default":0},"flags":{}} {"_id":"L5RCoreCon000014","name":"Silenced","content":"<blockquote>Core Rulebook p.273</blockquote>","img":"systems/l5r5e/assets/icons/conditions/silenced.webp","folder":null,"sort":100001,"permission":{"default":0},"flags":{}}
{"_id":"L5RCoreCon000015","name":"Unconscious","content":"<blockquote>Core Rulebook p.273</blockquote>","img":"icons/svg/unconscious.svg","folder":null,"sort":100001,"permission":{"default":0},"flags":{}} {"_id":"L5RCoreCon000015","name":"Unconscious","content":"<blockquote>Core Rulebook p.273</blockquote>","img":"systems/l5r5e/assets/icons/conditions/unconscious.webp","folder":null,"sort":100001,"permission":{"default":0},"flags":{}}
{"_id":"L5RCoreCon000016","name":"Wounded","content":"<blockquote>Core Rulebook p.273</blockquote>","img":"icons/svg/degen.svg","folder":null,"sort":100001,"permission":{"default":0},"flags":{}} {"_id":"L5RCoreCon000016","name":"Wounded","content":"<blockquote>Core Rulebook p.273</blockquote>","img":"systems/l5r5e/assets/icons/conditions/heavily_wounded.webp","folder":null,"sort":100001,"permission":{"default":0},"flags":{}}
{"_id":"L5RCoreCon000017","name":"Illness: Oozing Sore Disease","content":"<blockquote>Writ of the Wild p.140</blockquote>","img":"icons/svg/eye.svg","folder":null,"sort":100001,"permission":{"default":0},"flags":{}} {"_id":"L5RCoreCon000017","name":"Illness: Oozing Sore Disease","content":"<blockquote>Writ of the Wild p.140</blockquote>","img":"systems/l5r5e/assets/icons/conditions/illness_oozing_sore_disease.webp","folder":null,"sort":100001,"permission":{"default":0},"flags":{}}
{"_id":"L5RCoreCon000018","name":"Illness: Gut Sickness","content":"<blockquote>Writ of the Wild p.141</blockquote>","img":"icons/svg/poison.svg","folder":null,"sort":100001,"permission":{"default":0},"flags":{}} {"_id":"L5RCoreCon000018","name":"Illness: Gut Sickness","content":"<blockquote>Writ of the Wild p.141</blockquote>","img":"systems/l5r5e/assets/icons/conditions/illness_gut_sickness.webp","folder":null,"sort":100001,"permission":{"default":0},"flags":{}}
{"_id":"L5RCoreCon000019","name":"Illness: Coughing Illness","content":"<blockquote>Writ of the Wild p.141</blockquote>","img":"icons/svg/poison.svg","folder":null,"sort":100001,"permission":{"default":0},"flags":{}} {"_id":"L5RCoreCon000019","name":"Illness: Coughing Illness","content":"<blockquote>Writ of the Wild p.141</blockquote>","img":"systems/l5r5e/assets/icons/conditions/illness_coughing_illness.webp","folder":null,"sort":100001,"permission":{"default":0},"flags":{}}
{"_id":"L5RCoreCon000020","name":"Illness: Unsteady Illness","content":"<blockquote>Writ of the Wild p.141</blockquote>","img":"icons/svg/daze.svg","folder":null,"sort":100001,"permission":{"default":0},"flags":{}} {"_id":"L5RCoreCon000020","name":"Illness: Unsteady Illness","content":"<blockquote>Writ of the Wild p.141</blockquote>","img":"systems/l5r5e/assets/icons/conditions/illness_unsteady_illness.webp","folder":null,"sort":100001,"permission":{"default":0},"flags":{}}
{"_id":"L5RCoreCon000021","name":"Illness: Fire Rash","content":"<blockquote>Writ of the Wild p.141</blockquote>","img":"icons/svg/fire.svg","folder":null,"sort":100001,"permission":{"default":0},"flags":{}} {"_id":"L5RCoreCon000021","name":"Illness: Fire Rash","content":"<blockquote>Writ of the Wild p.141</blockquote>","img":"systems/l5r5e/assets/icons/conditions/illness_fire_rash.webp","folder":null,"sort":100001,"permission":{"default":0},"flags":{}}
{"_id":"L5RCoreCon000022","name":"Centered","content":"<blockquote>Children of the Five Winds p.133</blockquote>","img":"systems/l5r5e/assets/icons/social.svg","folder":null,"sort":100001,"permission":{"default":0},"flags":{}} {"_id":"L5RCoreCon000022","name":"Centered","content":"<blockquote>Children of the Five Winds p.133</blockquote>","img":"systems/l5r5e/assets/icons/conditions/centered.webp","folder":null,"sort":100001,"permission":{"default":0},"flags":{}}
{"_id":"L5RCoreCon000023","name":"Emboldened","content":"<blockquote>Children of the Five Winds p.133</blockquote>","img":"systems/l5r5e/assets/icons/social.svg","folder":null,"sort":100001,"permission":{"default":0},"flags":{}} {"_id":"L5RCoreCon000023","name":"Emboldened","content":"<blockquote>Children of the Five Winds p.133</blockquote>","img":"systems/l5r5e/assets/icons/conditions/emboldened.webp","folder":null,"sort":100001,"permission":{"default":0},"flags":{}}
{"_id":"L5RCoreCon000024","name":"Possessed","content":"<blockquote>Children of the Five Winds p.133</blockquote>","img":"icons/svg/terror.svg","folder":null,"sort":100001,"permission":{"default":0},"flags":{}} {"_id":"L5RCoreCon000024","name":"Possessed","content":"<blockquote>Children of the Five Winds p.133</blockquote>","img":"systems/l5r5e/assets/icons/conditions/possesed.webp","folder":null,"sort":100001,"permission":{"default":0},"flags":{}}

View File

@@ -694,6 +694,12 @@ export class BaseCharacterSheetL5r5e extends BaseSheetL5r5e {
_openDicePickerForSkill(event) { _openDicePickerForSkill(event) {
event.preventDefault(); event.preventDefault();
event.stopPropagation(); event.stopPropagation();
// In Fvtt v13+ "Enter" trigger that mouse event, we ignore that below
if (event.clientX === 0 && event.clientY === 0) {
return;
}
const li = $(event.currentTarget); const li = $(event.currentTarget);
const weapon = this._getWeaponInfos(li.data("weapon-id") || null); const weapon = this._getWeaponInfos(li.data("weapon-id") || null);
const isInitiative = li.data("initiative") || false; const isInitiative = li.data("initiative") || false;

View File

@@ -18,167 +18,167 @@ export const L5R5E = {
conditions: [{ conditions: [{
id: "lightly_wounded_fire", id: "lightly_wounded_fire",
name: "l5r5e.conditions.lightly_wounded_fire", name: "l5r5e.conditions.lightly_wounded_fire",
img: "systems/l5r5e/assets/icons/conditions/fire-white.webp", img: "systems/l5r5e/assets/icons/conditions/lightly_wounded_fire.webp",
system: { id: "L5RCoreCon000016" } system: { id: "L5RCoreCon000016" }
},{ },{
id: "lightly_wounded_water", id: "lightly_wounded_water",
name: "l5r5e.conditions.lightly_wounded_water", name: "l5r5e.conditions.lightly_wounded_water",
img: "systems/l5r5e/assets/icons/conditions/water-white.webp", img: "systems/l5r5e/assets/icons/conditions/lightly_wounded_water.webp",
system: { id: "L5RCoreCon000016" } system: { id: "L5RCoreCon000016" }
},{ },{
id: "lightly_wounded_air", id: "lightly_wounded_air",
name: "l5r5e.conditions.lightly_wounded_air", name: "l5r5e.conditions.lightly_wounded_air",
img: "systems/l5r5e/assets/icons/conditions/air-white.webp", img: "systems/l5r5e/assets/icons/conditions/lightly_wounded_air.webp",
system: { id: "L5RCoreCon000016" } system: { id: "L5RCoreCon000016" }
},{ },{
id: "lightly_wounded_earth", id: "lightly_wounded_earth",
name: "l5r5e.conditions.lightly_wounded_earth", name: "l5r5e.conditions.lightly_wounded_earth",
img: "systems/l5r5e/assets/icons/conditions/earth-white.webp", img: "systems/l5r5e/assets/icons/conditions/lightly_wounded_earth.webp",
system: { id: "L5RCoreCon000016" } system: { id: "L5RCoreCon000016" }
},{ },{
id: "lightly_wounded_void", id: "lightly_wounded_void",
name: "l5r5e.conditions.lightly_wounded_void", name: "l5r5e.conditions.lightly_wounded_void",
img: "systems/l5r5e/assets/icons/conditions/void-white.webp", img: "systems/l5r5e/assets/icons/conditions/lightly_wounded_void.webp",
system: { id: "L5RCoreCon000016" } system: { id: "L5RCoreCon000016" }
},{ },{
id: "severely_wounded_fire", id: "severely_wounded_fire",
name: "l5r5e.conditions.severely_wounded_fire", name: "l5r5e.conditions.severely_wounded_fire",
img: "systems/l5r5e/assets/icons/conditions/fire-black.webp", img: "systems/l5r5e/assets/icons/conditions/heavily_wounded_fire.webp",
system: { id: "L5RCoreCon000016" } system: { id: "L5RCoreCon000016" }
},{ },{
id: "severely_wounded_water", id: "severely_wounded_water",
name: "l5r5e.conditions.severely_wounded_water", name: "l5r5e.conditions.severely_wounded_water",
img: "systems/l5r5e/assets/icons/conditions/water-black.webp", img: "systems/l5r5e/assets/icons/conditions/heavily_wounded_water.webp",
system: { id: "L5RCoreCon000016" } system: { id: "L5RCoreCon000016" }
},{ },{
id: "severely_wounded_air", id: "severely_wounded_air",
name: "l5r5e.conditions.severely_wounded_air", name: "l5r5e.conditions.severely_wounded_air",
img: "systems/l5r5e/assets/icons/conditions/air-black.webp", img: "systems/l5r5e/assets/icons/conditions/heavily_wounded_air.webp",
system: { id: "L5RCoreCon000016" } system: { id: "L5RCoreCon000016" }
},{ },{
id: "severely_wounded_earth", id: "severely_wounded_earth",
name: "l5r5e.conditions.severely_wounded_earth", name: "l5r5e.conditions.severely_wounded_earth",
img: "systems/l5r5e/assets/icons/conditions/earth-black.webp", img: "systems/l5r5e/assets/icons/conditions/heavily_wounded_earth.webp",
system: { id: "L5RCoreCon000016" } system: { id: "L5RCoreCon000016" }
},{ },{
id: "severely_wounded_void", id: "severely_wounded_void",
name: "l5r5e.conditions.severely_wounded_void", name: "l5r5e.conditions.severely_wounded_void",
img: "systems/l5r5e/assets/icons/conditions/void-black.webp", img: "systems/l5r5e/assets/icons/conditions/heavily_wounded_void.webp",
system: { id: "L5RCoreCon000016" } system: { id: "L5RCoreCon000016" }
},{ },{
id: "afflicted", id: "afflicted",
name: "l5r5e.conditions.afflicted", name: "l5r5e.conditions.afflicted",
img: "icons/magic/death/undead-ghost-scream-teal.webp", img: "systems/l5r5e/assets/icons/conditions/afflicted.webp",
system: { id: "L5RCoreCon000001" } system: { id: "L5RCoreCon000001" }
},{ },{
id: "bleeding", id: "bleeding",
name: "l5r5e.conditions.bleeding", name: "l5r5e.conditions.bleeding",
img: "icons/skills/wounds/blood-drip-droplet-red.webp", img: "systems/l5r5e/assets/icons/conditions/bleeding.webp",
system: { id: "L5RCoreCon000002" } system: { id: "L5RCoreCon000002" }
},{ },{
id: "burning", id: "burning",
name: "l5r5e.conditions.burning", name: "l5r5e.conditions.burning",
img: "icons/magic/fire/flame-burning-creature-skeleton.webp", img: "systems/l5r5e/assets/icons/conditions/burning.webp",
system: { id: "L5RCoreCon000003" } system: { id: "L5RCoreCon000003" }
},{ },{
id: "centered", id: "centered",
name: "l5r5e.conditions.centered", name: "l5r5e.conditions.centered",
img: "systems/l5r5e/assets/icons/social.svg", img: "systems/l5r5e/assets/icons/conditions/centered.webp",
system: { id: "L5RCoreCon000022" } system: { id: "L5RCoreCon000022" }
},{ },{
id: "compromised", id: "compromised",
name: "l5r5e.conditions.compromised", name: "l5r5e.conditions.compromised",
img: "icons/creatures/abilities/mouth-teeth-human.webp", img: "systems/l5r5e/assets/icons/conditions/compromised.webp",
system: { id: "L5RCoreCon000004" } system: { id: "L5RCoreCon000004" }
},{ },{
id: "dazed", id: "dazed",
name: "l5r5e.conditions.dazed", name: "l5r5e.conditions.dazed",
img: "icons/magic/light/beam-explosion-orange.webp", img: "systems/l5r5e/assets/icons/conditions/dazed.webp",
system: { id: "L5RCoreCon000005" } system: { id: "L5RCoreCon000005" }
},{ },{
id: "disoriented", id: "disoriented",
name: "l5r5e.conditions.disoriented", name: "l5r5e.conditions.disoriented",
img: "icons/magic/control/hypnosis-mesmerism-eye.webp", img: "systems/l5r5e/assets/icons/conditions/disoriented.webp",
system: { id: "L5RCoreCon000006" } system: { id: "L5RCoreCon000006" }
},{ },{
id: "dying", id: "dying",
name: "l5r5e.conditions.dying", name: "l5r5e.conditions.dying",
img: "icons/magic/death/skull-humanoid-white-blue.webp", img: "systems/l5r5e/assets/icons/conditions/dying_1.webp",
system: { id: "L5RCoreCon000007" } system: { id: "L5RCoreCon000007" }
},{ },{
id: "emboldened", id: "emboldened",
name: "l5r5e.conditions.emboldened", name: "l5r5e.conditions.emboldened",
img: "systems/l5r5e/assets/icons/social.svg", img: "systems/l5r5e/assets/icons/conditions/emboldened.webp",
system: { id: "L5RCoreCon000023" } system: { id: "L5RCoreCon000023" }
},{ },{
id: "enraged", id: "enraged",
name: "l5r5e.conditions.enraged", name: "l5r5e.conditions.enraged",
img: "icons/skills/wounds/injury-face-impact-orange.webp", img: "systems/l5r5e/assets/icons/conditions/enraged.webp",
system: { id: "L5RCoreCon000008" } system: { id: "L5RCoreCon000008" }
},{ },{
id: "exhausted", id: "exhausted",
name: "l5r5e.conditions.exhausted", name: "l5r5e.conditions.exhausted",
img: "icons/magic/life/heart-glowing-red.webp", img: "systems/l5r5e/assets/icons/conditions/exhausted.webp",
system: { id: "L5RCoreCon000009" } system: { id: "L5RCoreCon000009" }
},{ },{
id: "illness_coughing_illness", id: "illness_coughing_illness",
name: "l5r5e.conditions.illness_coughing_illness", name: "l5r5e.conditions.illness_coughing_illness",
img: "icons/svg/poison.svg", img: "systems/l5r5e/assets/icons/conditions/illness_coughing_illness.webp",
system: { id: "L5RCoreCon000019" } system: { id: "L5RCoreCon000019" }
},{ },{
id: "illness_fire_rash", id: "illness_fire_rash",
name: "l5r5e.conditions.illness_fire_rash", name: "l5r5e.conditions.illness_fire_rash",
img: "icons/svg/fire.svg", img: "systems/l5r5e/assets/icons/conditions/illness_fire_rash.webp",
system: { id: "L5RCoreCon000021" } system: { id: "L5RCoreCon000021" }
},{ },{
id: "illness_gut_sickness", id: "illness_gut_sickness",
name: "l5r5e.conditions.illness_gut_sickness", name: "l5r5e.conditions.illness_gut_sickness",
img: "icons/svg/poison.svg", img: "systems/l5r5e/assets/icons/conditions/illness_gut_sickness.webp",
system: { id: "L5RCoreCon000018" } system: { id: "L5RCoreCon000018" }
},{ },{
id: "illness_oozing_sore_disease", id: "illness_oozing_sore_disease",
name: "l5r5e.conditions.illness_oozing_sore_disease", name: "l5r5e.conditions.illness_oozing_sore_disease",
img: "icons/svg/eye.svg", img: "systems/l5r5e/assets/icons/conditions/illness_oozing_sore_disease.webp",
system: { id: "L5RCoreCon000017" } system: { id: "L5RCoreCon000017" }
},{ },{
id: "illness_unsteady_illness", id: "illness_unsteady_illness",
name: "l5r5e.conditions.illness_unsteady_illness", name: "l5r5e.conditions.illness_unsteady_illness",
img: "icons/svg/daze.svg", img: "systems/l5r5e/assets/icons/conditions/illness_unsteady_illness.webp",
system: { id: "L5RCoreCon000020" } system: { id: "L5RCoreCon000020" }
},{ },{
id: "immobilized", id: "immobilized",
name: "l5r5e.conditions.immobilized", name: "l5r5e.conditions.immobilized",
img: "icons/magic/nature/root-vine-entangle-foot-green.webp", img: "systems/l5r5e/assets/icons/conditions/immobilized.webp",
system: { id: "L5RCoreCon000010" } system: { id: "L5RCoreCon000010" }
},{ },{
id: "incapacitated", id: "incapacitated",
name: "l5r5e.conditions.incapacitated", name: "l5r5e.conditions.incapacitated",
img: "icons/magic/control/silhouette-hold-change-green.webp", img: "systems/l5r5e/assets/icons/conditions/incapacitated.webp",
system: { id: "L5RCoreCon000011" } system: { id: "L5RCoreCon000011" }
},{ },{
id: "intoxicated", id: "intoxicated",
name: "l5r5e.conditions.intoxicated", name: "l5r5e.conditions.intoxicated",
img: "icons/consumables/drinks/alcohol-jar-spirits-gray.webp", img: "systems/l5r5e/assets/icons/conditions/intoxicated.webp",
system: { id: "L5RCoreCon000012" } system: { id: "L5RCoreCon000012" }
},{ },{
id: "possessed", id: "possessed",
name: "l5r5e.conditions.possessed", name: "l5r5e.conditions.possessed",
img: "icons/svg/terror.svg", img: "systems/l5r5e/assets/icons/conditions/possesed.webp",
system: { id: "L5RCoreCon000024" } system: { id: "L5RCoreCon000024" }
},{ },{
id: "prone", id: "prone",
name: "l5r5e.conditions.prone", name: "l5r5e.conditions.prone",
img: "icons/magic/control/silhouette-fall-slip-prone.webp", img: "systems/l5r5e/assets/icons/conditions/prone.webp",
system: { id: "L5RCoreCon000013" } system: { id: "L5RCoreCon000013" }
},{ },{
id: "silenced", id: "silenced",
name: "l5r5e.conditions.silenced", name: "l5r5e.conditions.silenced",
img: "icons/magic/control/mouth-smile-deception-purple.webp", img: "systems/l5r5e/assets/icons/conditions/silenced.webp",
system: { id: "L5RCoreCon000014" } system: { id: "L5RCoreCon000014" }
},{ },{
id: "unconscious", id: "unconscious",
name: "l5r5e.conditions.unconscious", name: "l5r5e.conditions.unconscious",
img: "icons/magic/control/sleep-bubble-purple.webp", img: "systems/l5r5e/assets/icons/conditions/unconscious.webp",
system: { id: "L5RCoreCon000015" } system: { id: "L5RCoreCon000015" }
}], }],
regex: { regex: {
@@ -456,6 +456,7 @@ L5R5E.demeanors = [
{ id: "adaptable", mod: { water: 2, earth: -2 } }, { id: "adaptable", mod: { water: 2, earth: -2 } },
{ id: "aggressive", mod: { fire: 2, air: -2 } }, { id: "aggressive", mod: { fire: 2, air: -2 } },
{ id: "aggressive", mod: { fire: 2, water: -2 } }, { id: "aggressive", mod: { fire: 2, water: -2 } },
{ id: "alluring", mod: { air: 2, earth: -1, fire: -1 } },
{ id: "ambitious", mod: { fire: 2, water: -2 } }, { id: "ambitious", mod: { fire: 2, water: -2 } },
{ id: "amiable", mod: { air: 2, earth: -2 } }, { id: "amiable", mod: { air: 2, earth: -2 } },
{ id: "analytical", mod: { fire: 2, air: -2 } }, { id: "analytical", mod: { fire: 2, air: -2 } },
@@ -466,23 +467,38 @@ L5R5E.demeanors = [
{ id: "beguiling", mod: { air: 2, earth: -2 } }, { id: "beguiling", mod: { air: 2, earth: -2 } },
{ id: "beguiling", mod: { fire: 2, earth: -2 } }, { id: "beguiling", mod: { fire: 2, earth: -2 } },
{ id: "bitter", mod: { fire: 2, air: -2 } }, { id: "bitter", mod: { fire: 2, air: -2 } },
{ id: "bloodthirsty", mod: { fire: 2, water: -2 } },
{ id: "bold", mod: { fire: 1, earth: -1 } }, { id: "bold", mod: { fire: 1, earth: -1 } },
{ id: "calculating", mod: { air: 2, fire: -2 } }, { id: "calculating", mod: { air: 2, fire: -2 } },
{ id: "calm", mod: { fire: 2, air: -2 } }, { id: "calm", mod: { fire: 2, air: -2 } },
{ id: "capricious", mod: { air: 2, earth: -2 } }, { id: "capricious", mod: { air: 2, earth: -2 } },
{ id: "cautious", mod: { air: 2, earth: -2 } }, { id: "cautious", mod: { air: 2, earth: -2 } },
{ id: "cautious", mod: { water: 1, void: -1 } },
{ id: "clever", mod: { air: 2, earth: -2 } }, { id: "clever", mod: { air: 2, earth: -2 } },
{ id: "compassionate", mod: { fire: 2, air: -1, water: -1}}, { id: "compassionate", mod: { fire: 2, air: -1, water: -1}},
{ id: "compassionate", mod: { water: 2, fire: -2 } },
{ id: "compassionate", mod: { water: 2, void: -2 } },
{ id: "confused", mod: { fire: 1, void: 1, air: -2 } }, { id: "confused", mod: { fire: 1, void: 1, air: -2 } },
{ id: "courageous", mod: { air: 2, earth: -2 } }, { id: "courageous", mod: { air: 2, earth: -2 } },
{ id: "cowardly", mod: { earth: 2, fire: -2 } }, { id: "cowardly", mod: { earth: 2, fire: -2 } },
{ id: "crestfallen", mod: { void: 2, fire: -2 } },
{ id: "curious", mod: { earth: 1, void: -2 } }, { id: "curious", mod: { earth: 1, void: -2 } },
{ id: "curious", mod: { fire: 1, void: 1, air: -2 } }, { id: "curious", mod: { fire: 1, void: 1, air: -2 } },
{ id: "defensive", mod: { fire: 2, air: -2 } },
{ id: "dependable", mod: { fire: 1, water: 1, earth: -2 } }, { id: "dependable", mod: { fire: 1, water: 1, earth: -2 } },
{ id: "detached", mod: { earth: 1, fire: 1, void: -2 } }, { id: "detached", mod: { earth: 1, fire: 1, void: -2 } },
{ id: "determined", mod: { earth: 2, air: -2 } },
{ id: "devoted", mod: { fire: 2, earth: -2 } },
{ id: "direct", mod: { air: 2, fire: -1, water: -1 } },
{ id: "disheartened", mod: { fire: 1, earth: -1 } }, { id: "disheartened", mod: { fire: 1, earth: -1 } },
{ id: "dour", mod: { earth: 1, water: 1, air: -1 } },
{ id: "duplicitous", mod: { water: 2, fire: -2 } },
{ id: "effusive", mod: { air: 2, earth: -2 } },
{ id: "enraged", mod: { air: 1, fire: -2 } }, { id: "enraged", mod: { air: 1, fire: -2 } },
{ id: "fanatical", mod: { earth: 1, air: 1, fire: -2 } },
{ id: "feral", mod: { air: 2, fire: -2 } }, { id: "feral", mod: { air: 2, fire: -2 } },
{ id: "fervent", mod: { fire: 2, earth: -2 } },
{ id: "fervent", mod: { air: 1, water: 1, fire: -1, void: -1 } },
{ id: "fickle", mod: { fire: 2, air: -2 } }, { id: "fickle", mod: { fire: 2, air: -2 } },
{ id: "fierce", mod: { fire: 2, earth: -2 } }, { id: "fierce", mod: { fire: 2, earth: -2 } },
{ id: "flighty", mod: { air: 2, fire: -2 } }, { id: "flighty", mod: { air: 2, fire: -2 } },
@@ -490,32 +506,55 @@ L5R5E.demeanors = [
{ id: "flippant", mod: { fire: 2, air: -2 } }, { id: "flippant", mod: { fire: 2, air: -2 } },
{ id: "friendly", mod: { fire: 1, earth: -2, water: -2 } }, { id: "friendly", mod: { fire: 1, earth: -2, water: -2 } },
{ id: "gruff", mod: { water: 2, earth: -2 } }, { id: "gruff", mod: { water: 2, earth: -2 } },
{ id: "honorable", mod: { fire: 2, earth: -2 } },
{ id: "hubristic", mod: { earth: 2, air: -2 } },
{ id: "hungry", mod: { fire: 2, air: -2 } }, { id: "hungry", mod: { fire: 2, air: -2 } },
{ id: "idealistic", mod: { water: 2, earth: -2 } },
{ id: "idealistic", mod: { earth: 1, water: -1 } },
{ id: "imposing", mod: { fire: 2, water: -2 } },
{ id: "inquisitive", mod: { earth: 2, water: -2 } },
{ id: "intense", mod: { air: 2, water: -2 } }, { id: "intense", mod: { air: 2, water: -2 } },
{ id: "intense", mod: { fire: 2, water: -2 } }, { id: "intense", mod: { fire: 2, water: -2 } },
{ id: "intimidating", mod: { fire: 2, air: -2 } }, { id: "intimidating", mod: { fire: 2, air: -2 } },
{ id: "irritable", mod: { fire: 2, air: -1, water: -1 } }, { id: "irritable", mod: { fire: 2, air: -1, water: -1 } },
{ id: "loyal", mod: { air: 1, earth: -2, fire: -2 } }, { id: "loyal", mod: { air: 1, earth: -2, fire: -2 } },
{ id: "loyal", mod: { water: 2, fire: -2 } }, { id: "loyal", mod: { water: 2, fire: -2 } },
{ id: "methodical", mod: { earth: 2, fire: -2 } },
{ id: "meticulous", mod: { fire: 1, water: 1, air: -1, earth: -1 } },
{ id: "meticulous", mod: { fire: 1, water: 1, earth: -2 } },
{ id: "mischievous", mod: { fire: 2, air: -2 } }, { id: "mischievous", mod: { fire: 2, air: -2 } },
{ id: "mischievous", mod: { air: 2, earth: -2 } }, { id: "mischievous", mod: { air: 2, earth: -2 } },
{ id: "mischievous", mod: { earth: 2, fire: -2 } }, { id: "mischievous", mod: { earth: 2, fire: -2 } },
{ id: "moon_blessed", mod: { water: 2, fire: -2 } },
{ id: "morose", mod: { water: 2, fire: -2 } }, { id: "morose", mod: { water: 2, fire: -2 } },
{ id: "near_feral", mod: { air: 1, fire: -1 } },
{ id: "nurturing", mod: { earth: 2, fire: -2 } }, { id: "nurturing", mod: { earth: 2, fire: -2 } },
{ id: "obsessed", mod: { earth: 2, air: -2 } },
{ id: "obstinate", mod: { earth: 2, air: -2 } }, { id: "obstinate", mod: { earth: 2, air: -2 } },
{ id: "obstinate", mod: { water: 2, air: -2 } }, { id: "obstinate", mod: { water: 2, air: -2 } },
{ id: "otherworldly", mod: { water: 1, void: -1 } },
{ id: "outgoing", mod: { air: 2, earth: -2 } },
{ id: "opportunistic", mod: { water: 2, fire: -2 } }, { id: "opportunistic", mod: { water: 2, fire: -2 } },
{ id: "passionate", mod: { earth: 2, air: -2 } }, { id: "passionate", mod: { earth: 2, air: -2 } },
{ id: "patient", mod: { fire: 1, water: 1, air: -1, void: -1 } },
{ id: "personable", mod: { fire: 2, air: 1, void: -2 } },
{ id: "playful", mod: { earth: 2, water: -2 } }, { id: "playful", mod: { earth: 2, water: -2 } },
{ id: "playful", mod: { fire: 1, air: 1, void: -2 } }, { id: "playful", mod: { fire: 1, air: 1, void: -2 } },
{ id: "power_hungry", mod: { fire: 2, earth: -2 } }, { id: "power_hungry", mod: { fire: 2, earth: -2 } },
{ id: "proud", mod: { fire: 2, earth: -2 } }, { id: "proud", mod: { fire: 2, earth: -2 } },
{ id: "refined", mod: { earth: 1, water: 1, air: -1, fire: -1 } },
{ id: "reserved", mod: { earth: 2, water: -2 } },
{ id: "restrained", mod: { earth: 2, air: -2 } }, { id: "restrained", mod: { earth: 2, air: -2 } },
{ id: "righteous", mod: { water: 2, fire: -1, void: -1 } },
{ id: "scheming", mod: { air: 2, void: -2 } }, { id: "scheming", mod: { air: 2, void: -2 } },
{ id: "serene", mod: { fire: 2, void: -2 } }, { id: "serene", mod: { fire: 2, void: -2 } },
{ id: "serene", mod: { void: 2, fire: -2 } }, { id: "serene", mod: { void: 2, fire: -2 } },
{ id: "serious", mod: { fire: 2, earth: -2 } }, { id: "serious", mod: { fire: 2, earth: -2 } },
{ id: "shrewd", mod: { air: 2, fire: -2 } }, { id: "shrewd", mod: { air: 2, fire: -2 } },
{ id: "sinister", mod: { fire: 2, air: -2 } },
{ id: "sociable", mod: { air: 1, earth: 1, fire: -1, water: -1 } },
{ id: "starved", mod: { water: 2, fire: -2 } },
{ id: "stoic", mod: { earth: 2, fire: -2 } },
{ id: "stubborn", mod: { earth: 2, water: -2 } }, { id: "stubborn", mod: { earth: 2, water: -2 } },
{ id: "suspicious", mod: { air: 2, earth: -2 } }, { id: "suspicious", mod: { air: 2, earth: -2 } },
{ id: "teasing", mod: { air: 2, earth: -2 } }, { id: "teasing", mod: { air: 2, earth: -2 } },
@@ -523,5 +562,10 @@ L5R5E.demeanors = [
{ id: "uncertain", mod: { air: 2, fire: -2 } }, { id: "uncertain", mod: { air: 2, fire: -2 } },
{ id: "unenthused", mod: { earth: 2, fire: -2 } }, { id: "unenthused", mod: { earth: 2, fire: -2 } },
{ id: "vain", mod: { earth: 2, air: -2 } }, { id: "vain", mod: { earth: 2, air: -2 } },
{ id: "vengeful", mod: { fire: 2, void: -2 } },
{ id: "vindictive", mod: { fire: 2, water: -2 } },
{ id: "wary", mod: { earth: 2, fire: -2 } }, { id: "wary", mod: { earth: 2, fire: -2 } },
{ id: "watchful", mod: { fire: 2, earth: -1, void: -1 } },
{ id: "wrathful", mod: { fire: 2, earth: -2 } },
{ id: "zealous", mod: { earth: 2, fire: -2 } },
]; ];

View File

@@ -149,5 +149,8 @@ export class AdvancementSheetL5r5e extends ItemSheetL5r5e {
xp_used: xp_used, xp_used: xp_used,
}, },
}); });
// Re-render sheet
this.render(true);
} }
} }

View File

@@ -11,6 +11,7 @@ import { ActorL5r5e } from "./actor.js";
import { CharacterSheetL5r5e } from "./actors/character-sheet.js"; import { CharacterSheetL5r5e } from "./actors/character-sheet.js";
import { NpcSheetL5r5e } from "./actors/npc-sheet.js"; import { NpcSheetL5r5e } from "./actors/npc-sheet.js";
import { ArmySheetL5r5e } from "./actors/army-sheet.js"; import { ArmySheetL5r5e } from "./actors/army-sheet.js";
import { RulerL5r5e, TokenRulerL5r5e } from "./tatical-grid-rulers.js";
// Dice and rolls // Dice and rolls
import { L5rBaseDie } from "./dice/dietype/l5r-base-die.js"; import { L5rBaseDie } from "./dice/dietype/l5r-base-die.js";
import { AbilityDie } from "./dice/dietype/ability-die.js"; import { AbilityDie } from "./dice/dietype/ability-die.js";
@@ -72,6 +73,8 @@ Hooks.once("init", async () => {
CONFIG.Item.documentClass = ItemL5r5e; CONFIG.Item.documentClass = ItemL5r5e;
CONFIG.JournalEntry.documentClass = JournalL5r5e; CONFIG.JournalEntry.documentClass = JournalL5r5e;
CONFIG.JournalEntry.sheetClass = BaseJournalSheetL5r5e; CONFIG.JournalEntry.sheetClass = BaseJournalSheetL5r5e;
CONFIG.Token.rulerClass = TokenRulerL5r5e;
CONFIG.Canvas.rulerClass = RulerL5r5e;
// Define custom Roll class // Define custom Roll class
CONFIG.Dice.rolls.unshift(RollL5r5e); CONFIG.Dice.rolls.unshift(RollL5r5e);

View File

@@ -1,4 +1,5 @@
import { L5r5eSetField } from "./data/l5r5e-setfield.js"; import { L5r5eSetField } from "./data/l5r5e-setfield.js";
import { TacticalGridSettingsL5R5E } from "./settings/tactical-grid-settings.js"
/** /**
* Custom system settings register * Custom system settings register
@@ -236,4 +237,29 @@ export const RegisterSettings = function () {
default: [], default: [],
onChange: () => game.l5r5e.HelpersL5r5e.refreshLocalAndSocket("l5r5e-gm-monitor"), onChange: () => game.l5r5e.HelpersL5r5e.refreshLocalAndSocket("l5r5e-gm-monitor"),
}); });
/* -------------------------------------- */
/* Grid Settings (GM only) */
/* -------------------------------------- */
// UI Configuration
game.settings.register(CONFIG.l5r5e.namespace, "tactical-grid-settings-world", {
scope: "world",
config: false,
type: TacticalGridSettingsL5R5E.worldSchema,
});
game.settings.register(CONFIG.l5r5e.namespace, "tactical-grid-settings-client", {
scope: "client",
config: false,
type: TacticalGridSettingsL5R5E.clientSchema,
});
game.settings.registerMenu(CONFIG.l5r5e.namespace, "tactical-grid-settings", {
name: "l5r5e.tactical_grid.settings.title",
label: "l5r5e.tactical_grid.settings.label",
hint: "l5r5e.tactical_grid.settings.hint",
icon: "fa-solid fa-table-layout",
type: TacticalGridSettingsL5R5E
});
}; };

View File

@@ -0,0 +1,351 @@
const HandlebarsApplicationMixin = foundry.applications.api.HandlebarsApplicationMixin;
const ApplicationV2 = foundry.applications.api.ApplicationV2;
const fields = foundry.data.fields;
/**
*
* @typedef {Object} RangeBand
* @property {number} start
*
* @typedef {Object} ClientRangeBand
* @property {string} color
* @property {number} alpha
*
* @typedef {Object} WorldSettings
* @property {boolean} enabled
* @property {Record<number, RangeBand>} ranges - Indexed 0-6
*
* @typedef {Object} ClientSettings
* @property {Record<number, ClientRangeBand>} ranges - Indexed 0-6
*/
export class TacticalGridSettingsL5R5E extends HandlebarsApplicationMixin(ApplicationV2) {
/** @inheritDoc */
static DEFAULT_OPTIONS = {
id: "tactical-grid-settings",
tag: "form",
classes: [""], // We could add l5r here but that would add styling that is not matching the default settings menu
window: {
title: "l5r5e.tactical_grid.settings.title",
contentClasses: ["standard-form"]
},
form: {
closeOnSubmit: true,
handler: TacticalGridSettingsL5R5E.#onSubmit
},
position: { width: 540 },
actions: {
reset: TacticalGridSettingsL5R5E.#onReset
}
};
/** @override */
static PARTS = {
form: {
template: "systems/l5r5e/templates/" + "settings/tactical-grid-settings.html",
scrollable: [""],
},
footer: {
template: "templates/generic/form-footer.hbs"
}
};
/**
* Creates a SchemaField defining a world range band.
* @param {{start: number}} initial - Initial range values.
* `start` must be ≥ 0.
* * @returns {SchemaField} A schema field containing a 'start' field
*
* @private
*/
static #createWorldRangeBandSchema(initial) {
return new fields.SchemaField({
start: new fields.NumberField({ initial: initial.start, label: "l5r5e.tactical_grid.settings.world.start", min: 0, max:Infinity, nullable: false, required: true, gmOnly: true})
});
}
/**
* Creates a SchemaField defining a client range band.
* @param {{color: string, alpha: number}} initial - Initial range band values.
* `color` should be a valid CSS color string and `alpha` a valid alpha value.
* @returns {SchemaField} A schema field containing `color` and `alpha` fields.
*
* @private
*/
static #createClientRangeBandSchema(initial) {
return new fields.SchemaField({
color: new fields.ColorField({initial: initial.color, label: "l5r5e.tactical_grid.settings.client.color", required: true}),
alpha: new fields.AlphaField({initial: initial.alpha, label: "l5r5e.tactical_grid.settings.client.alpha", required: true}),
});
}
/**
* Combined Foundry VTT settings schema representing both:
* - **World (GM-controlled)** configuration
* - **Client (per-user)** visual configuration
*
* This variable serves as a single source-of-truth definition for the modules
* tactical grid settings structure, including field types, defaults, labels, and
* validation rules for world ranges.
* @private
*/
static #schema = {
world: new fields.SchemaField({
enabled: new fields.BooleanField({ initial: true, label: "l5r5e.tactical_grid.settings.world.enabled", hint: "l5r5e.tactical_grid.settings.world.enabled_hint"}),
ranges: new fields.SchemaField({
0: TacticalGridSettingsL5R5E.#createWorldRangeBandSchema({ start: 0}),
1: TacticalGridSettingsL5R5E.#createWorldRangeBandSchema({ start: 1}),
2: TacticalGridSettingsL5R5E.#createWorldRangeBandSchema({ start: 2}),
3: TacticalGridSettingsL5R5E.#createWorldRangeBandSchema({ start: 3}),
4: TacticalGridSettingsL5R5E.#createWorldRangeBandSchema({ start: 6}),
5: TacticalGridSettingsL5R5E.#createWorldRangeBandSchema({ start: 10}),
6: TacticalGridSettingsL5R5E.#createWorldRangeBandSchema({ start: 15})
})
}, {
validate: TacticalGridSettingsL5R5E.#validateWorldRangeConfiguration
}),
client: new fields.SchemaField({
ranges: new fields.SchemaField({
0: TacticalGridSettingsL5R5E.#createClientRangeBandSchema({color: "#00FFFF", alpha: 0.5}),
1: TacticalGridSettingsL5R5E.#createClientRangeBandSchema({color: "#FF00FF", alpha: 0.5}),
2: TacticalGridSettingsL5R5E.#createClientRangeBandSchema({color: "#FFFF00", alpha: 0.5}),
3: TacticalGridSettingsL5R5E.#createClientRangeBandSchema({color: "#0000FF", alpha: 0.5}),
4: TacticalGridSettingsL5R5E.#createClientRangeBandSchema({color: "#7FFF00", alpha: 0.5}),
5: TacticalGridSettingsL5R5E.#createClientRangeBandSchema({color: "#4B0082", alpha: 0.5}),
6: TacticalGridSettingsL5R5E.#createClientRangeBandSchema({color: "#FF8800", alpha: 0.5})
})
})
};
/**
* Exposes the **world (GM-controlled)** portion of the tactical grid settings schema.
* @return {SchemaField}
*/
static get worldSchema() {
return TacticalGridSettingsL5R5E.#schema.world;
}
/**
* Exposes the **client (per-user visual)** portion of the tactical grid settings schema.
* @return {SchemaField}
*/
static get clientSchema() {
return TacticalGridSettingsL5R5E.#schema.client;
}
/** Holds a mutable copy of the tactical grid settings so the form can operate on current values without altering the schema. */
static #setting = null;
/** @override ApplicationV2 */
async _prepareContext(options) {
if (options.isFirstRender) {
const client = game.settings.get(CONFIG.l5r5e.namespace, "tactical-grid-settings-client");
const world = game.settings.get(CONFIG.l5r5e.namespace, "tactical-grid-settings-world");
TacticalGridSettingsL5R5E.#setting = foundry.utils.deepClone({client: client, world: world});
}
// Pre-process range bands for easier template access
const rangeBands = Object.entries(this.constructor.worldSchema.fields.ranges.fields).map(([index, field]) => ({
index: Number(index),
worldField: field,
clientFields: this.constructor.clientSchema.fields.ranges.fields[index],
worldValue: TacticalGridSettingsL5R5E.#setting.world.ranges[index],
clientValue: TacticalGridSettingsL5R5E.#setting.client.ranges[index]
}));
return {
isGm: game.user.isGM,
tactical_grid_enabled: {
field: this.constructor.worldSchema.fields.enabled,
value: TacticalGridSettingsL5R5E.#setting.world.enabled,
},
rangeBands,
buttons: [
{ type: "reset", label: "l5r5e.tactical_grid.settings.reset", icon: "fa-solid fa-arrow-rotate-left", action: "reset" },
{ type: "submit", label: "l5r5e.tactical_grid.settings.submit", icon: "fa-solid fa-floppy-disk" }
]
};
}
/** @override ApplicationV2 */
_onChangeForm(formConfig, event) {
const formData = new foundry.applications.ux.FormDataExtended(this.form, { readonly: true });
const {
cleaned: cleanedWorldSettings,
failure: validationFailures
} = TacticalGridSettingsL5R5E.#validateAndCleanWorldSettings(formData, event);
TacticalGridSettingsL5R5E.#applyValidationState(validationFailures);
TacticalGridSettingsL5R5E.#setting.world = cleanedWorldSettings
TacticalGridSettingsL5R5E.#setting.client = foundry.utils.expandObject(formData.object).l5r5e["tactical-grid-settings-client"];
}
/**
* Validates world schema ensuring range bands are properly ordered and connected.
* Note: internal field validation takes precedence, and will result in this validation potentially not running
* Checks that:
* - Sequential range bands connect properly (range[n].start < range[n+1].start)
* @param {*} value - The world settings object to validate
* @param {DataFieldValidationOptions} options - Validation options including lastElementChange
* @returns {boolean|foundry.data.validation.DataModelValidationFailure} True if valid, otherwise validation failure object
*/
static #validateWorldRangeConfiguration(value, options) {
if(!value.enabled) // don't validate if tactical_grids are disabled
return true;
let previousStart = -1;
let previousRangeIndex = null;
const failure = new foundry.data.validation.DataModelValidationFailure({ unresolved: true });
const changedElementName = options?.element?.name;
for (const [rangeIndex, range] of Object.entries(value.ranges)) {
if (range.start <= previousStart) {
let errorKey = TacticalGridSettingsL5R5E.worldSchema.fields.ranges.fields[rangeIndex].fields.start.fieldPath;
const previousErrorKey = errorKey.replace(/\.(\d+)\./, `.${previousRangeIndex}.`);
let isErrorOnPrevious = false;
// If the previous field was changed, show error there instead
if (changedElementName === previousErrorKey) {
errorKey = previousErrorKey;
isErrorOnPrevious = true;
}
failure.fields[errorKey] = new foundry.data.validation.DataModelValidationFailure({
invalidValue: isErrorOnPrevious ? previousStart : range.start,
unresolved: true,
message: game.i18n.format(
isErrorOnPrevious
? "l5r5e.tactical_grid.settings.validate.start-too-large"
: "l5r5e.tactical_grid.settings.validate.start-too-small",
isErrorOnPrevious
? { nextRangeIndex: Number(rangeIndex), nextStart: range.start }
: { previousRangeIndex: Number(previousRangeIndex), previousStart: previousStart }
)
});
}
previousStart = range.start;
previousRangeIndex = rangeIndex;
}
return Object.keys(failure.fields).length > 0 ? failure : true;
}
/**
* Validates and cleans the world portion of the tactical grid settings.
*
* Expands raw form data, validates it against the schema, updates form input
* error states and tooltips, and returns a cleaned object ready to save.
*
* @param {foundry.applications.ux.FormDataExtended} formData - The submitted form data.
* @param {Event} [event] - Optional event for determining which field changed.
* @returns {WorldSettings} A cleaned and validated copy of the world settings.
* @private
*/
static #validateAndCleanWorldSettings(formData, event) {
const expanded = foundry.utils.expandObject(formData.object).l5r5e["tactical-grid-settings-world"];
const validate = TacticalGridSettingsL5R5E.#schema.world.validate(expanded, { element: event.target});
// validation from Number etc. itself has the error key just as "ranges.0.start"
// so fixing that here so that we can directly reference they html elements
const prefix = "l5r5e.tactical-grid-settings-world.";
const failures = Object.fromEntries(
Object.entries(validate?.asError()?.getAllFailures() ?? {}).map(([key, value]) => [
key.startsWith(prefix) ? key : `${prefix}${key}`,
value
])
);
// Return cleaned schema so that we have something that is somewhat correct we can save
return {
cleaned: TacticalGridSettingsL5R5E.#schema.world.clean(expanded),
failure: failures
}
}
/**
* Applies a validation message to a form element.
*
* @param {HTMLElement} element - The element to apply validation to
* @param {string|null} message - The validation message, or null to clear
* @private
*/
static #applyValidationMessage(element, message) {
if (message) {
element.setCustomValidity(message);
element.dataset.tooltip = message;
element.ariaLabel = game.i18n.localize(element.dataset.tooltip);
game.tooltip.activate(element, {
direction: foundry.CONFIG.ux.TooltipManager.TOOLTIP_DIRECTIONS.RIGHT,
locked: true
});
}
else {
element?.setCustomValidity("");
delete element?.dataset?.tooltip
}
}
/**
* Applies validation state to all range band start fields.
*
* @param {Object} failures - Validation failures keyed by field name
* @private
*/
static #applyValidationState(failures) {
for (let i = 0; i < 7; i++) {
const name = `l5r5e.tactical-grid-settings-world.ranges.${i}.start`;
this.#applyValidationMessage(
document.getElementsByName(name)[0],
failures?.[name]?.message || null
);
}
}
/**
* Handles form submission.
*
* @param {Event} event - The submission event
* @param {HTMLFormElement} form - The form element
* @param {foundry.applications.ux.FormDataExtended} formData - The submitted form data
* @returns {Promise<void>}
* @private
*/
static async #onSubmit(event, form, formData) {
const {
cleaned: cleanedWorldSettings,
failure: validationFailures
} = TacticalGridSettingsL5R5E.#validateAndCleanWorldSettings(formData, event);
TacticalGridSettingsL5R5E.#applyValidationState(validationFailures);
TacticalGridSettingsL5R5E.#setting.world = cleanedWorldSettings;
TacticalGridSettingsL5R5E.#setting.client = foundry.utils.expandObject(formData.object).l5r5e["tactical-grid-settings-client"];
const promises = [];
promises.push(game.settings.set(CONFIG.l5r5e.namespace, "tactical-grid-settings-world", TacticalGridSettingsL5R5E.#setting.world));
promises.push(game.settings.set(CONFIG.l5r5e.namespace, "tactical-grid-settings-client", TacticalGridSettingsL5R5E.#setting.client));
await Promise.all(promises);
}
/**
* Handles reset action to restore default settings.
*
* @param {Event} event - The reset event
* @returns {Promise<void>}
* @private
*/
static async #onReset(event) {
const client = TacticalGridSettingsL5R5E.clientSchema.clean();
const world = TacticalGridSettingsL5R5E.worldSchema.clean();
TacticalGridSettingsL5R5E.#setting = foundry.utils.deepClone({client: client, world: world});
await this.render({ force: false });
}
}

View File

@@ -0,0 +1,81 @@
function getRangeband(gridSettings, distance) {
const entries = Object.entries(gridSettings.ranges);
for (let i = entries.length - 1; i >= 0; i--) {
const [range, { start }] = entries[i];
if (distance >= start) {
return Number(range);
}
}
return NaN;
}
export class RulerL5r5e extends foundry.canvas.interaction.Ruler {
static WAYPOINT_LABEL_TEMPLATE = "systems/l5r5e/templates/" + "hud/tactical-grid-ruler.html"
/** @override */
_getWaypointLabelContext(waypoint, state) {
const context = super._getWaypointLabelContext(waypoint, state);
if (!context)
return;
const gridSettings = game.settings.get(CONFIG.l5r5e.namespace, "tactical-grid-settings-world");
if(gridSettings.enabled) {
const diagonalCost = game.canvas.grid.distance * waypoint.measurement.diagonals;
context.distance.total = waypoint.measurement.distance.toNearest(0.1) + diagonalCost; //Diagonals count twice
context.additional = {
label: game.i18n.format("l5r5e.tactical_grid.range_abbreviation", {range: getRangeband(gridSettings, waypoint.measurement.distance)})
};
}
return context;
}
/** @override */
_getSegmentStyle(waypoint) {
const context = super._getSegmentStyle(waypoint);
const client = game.settings.get(CONFIG.l5r5e.namespace, "tactical-grid-settings-client");
const gridSettings = game.settings.get(CONFIG.l5r5e.namespace, "tactical-grid-settings-world");
if(gridSettings.enabled) {
const rangeband = getRangeband(gridSettings, waypoint.measurement.distance);
context.color = client.ranges[rangeband].color;
}
return context;
}
}
export class TokenRulerL5r5e extends foundry.canvas.placeables.tokens.TokenRuler {
static WAYPOINT_LABEL_TEMPLATE = "systems/l5r5e/templates/" + "hud/tactical-grid-ruler.html"
/** @override */
_getWaypointLabelContext(waypoint, state) {
const context = super._getWaypointLabelContext(waypoint, state);
if (!context)
return;
if (!this.token.actor)
return context;
const gridSettings = game.settings.get(CONFIG.l5r5e.namespace, "tactical-grid-settings-world");
if(gridSettings.enabled) {
const diagonalCost = game.canvas.grid.distance * waypoint.measurement.diagonals;
context.cost.total = waypoint.measurement.cost.toNearest(0.1) + diagonalCost; //Diagonals count twice
context.additional = {
label: game.i18n.format("l5r5e.tactical_grid.range_abbreviation", {range: getRangeband(gridSettings, waypoint.measurement.distance)})
};
}
return context;
}
/** @override */
_getGridHighlightStyle(waypoint, offset) {
const context = super._getGridHighlightStyle(waypoint, offset);
const client = game.settings.get(CONFIG.l5r5e.namespace, "tactical-grid-settings-client");
const gridSettings = game.settings.get(CONFIG.l5r5e.namespace, "tactical-grid-settings-world");
if(gridSettings.enabled) {
const rangeband = getRangeband(gridSettings, waypoint.measurement.distance);
context.color = client.ranges[rangeband].color;
context.alpha = client.ranges[rangeband].alpha;
}
return context;
}
}

View File

@@ -20,5 +20,6 @@
@import "../scss/skills"; @import "../scss/skills";
@import "../scss/items"; @import "../scss/items";
@import "../scss/twenty-questions"; @import "../scss/twenty-questions";
@import "../scss/tactical-grid";
} }
} }

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,32 @@
// Set the label for in-world measurement to be the same as normal waypoint-label
@at-root #measurement .waypoint-label-additional {
color: var(--color-text-emphatic);
font-size: var(--font-size-24);
}
@at-root #tactical-grid-settings {
input[type="number"]:invalid {
background-color: red;
}
input[type="number"]:read-only {
border: none;
outline: none;
box-shadow: none;
background: transparent;
cursor: default;
pointer-events: none; /* not clickable or focusable */
user-select: none; /* text cannot be selected */
-webkit-user-select: none; /* Safari/Chrome */
-moz-user-select: none; /* Firefox */
}
.range_band {
display: flex;
flex-flow: wrap;
fieldset {
flex: 25%;
}
}
}

View File

@@ -7,7 +7,7 @@
width: 4rem; width: 4rem;
height: 41.58rem; height: 41.58rem;
margin: 1%; margin: 1%;
line-height: 5rem; line-height: 3rem;
padding: 0.25rem; padding: 0.25rem;
border-bottom: 0 none; border-bottom: 0 none;
} }

View File

@@ -609,6 +609,7 @@ form#settings-config {
.autocomplete-wrapper { .autocomplete-wrapper {
position: relative;
.autocomplete-list { .autocomplete-list {
position: absolute; position: absolute;
border: 1px solid #6e7e6b; border: 1px solid #6e7e6b;

View File

@@ -7,8 +7,8 @@
"changelog": "https://gitlab.com/teaml5r/l5r5e/-/blob/master/CHANGELOG.md", "changelog": "https://gitlab.com/teaml5r/l5r5e/-/blob/master/CHANGELOG.md",
"license": "https://gitlab.com/teaml5r/l5r5e/-/blob/master/LICENSE.md", "license": "https://gitlab.com/teaml5r/l5r5e/-/blob/master/LICENSE.md",
"manifest": "https://gitlab.com/teaml5r/l5r5e/-/raw/master/system/system.json", "manifest": "https://gitlab.com/teaml5r/l5r5e/-/raw/master/system/system.json",
"download": "https://gitlab.com/teaml5r/l5r5e/-/jobs/artifacts/v1.13.1/raw/l5r5e.zip?job=build", "download": "https://gitlab.com/teaml5r/l5r5e/-/jobs/artifacts/v1.13.3/raw/l5r5e.zip?job=build",
"version": "1.13.1", "version": "1.13.3",
"compatibility": { "compatibility": {
"minimum": "13", "minimum": "13",
"verified": "13", "verified": "13",

View File

@@ -0,0 +1,45 @@
<div class="waypoint-label vertical {{cssClass}}">
<div>
{{#if action.icon}}
<i class="icon {{action.icon}}"></i>
{{else if action.label}}
<label class="action-label">Action: {{localize action.label}}</label>
{{/if}}
{{#if cost}}
<span class="total-measurement">{{cost.total}}</span>
{{#if cost.delta}}
<span class="delta-measurement">Cost Delta: ({{cost.delta}})</span>
{{/if}}
{{else}}
<span class="total-measurement">{{distance.total}} {{units}}</span>
{{#if distance.delta}}
<span class="delta-measurement">Total Measure: ({{distance.delta}})</span>
{{/if}}
{{/if}}
{{#if (and elevation (not elevation.hidden))}}
<i class="icon {{elevation.icon}}"></i>
<span class="total-elevation">{{elevation.total}} {{units}}</span>
{{#if elevation.delta}}
<span class="delta-elevation">({{elevation.delta}})</span>
{{/if}}
{{/if}}
{{#if secret}}
<i class="icon fa-solid fa-eye-slash"></i>
{{/if}}
</div>
{{#if additional}}
<div class="waypoint-label-additional {{additional.cssClass}}">
{{#if additional.icon}}
<i class="icon {{additional.icon}}"></i>
{{/if}}
<span class="waypoint-label-text">{{additional.label}} {{additional.cost}}</span>
{{#if additional.imgs.length}}
{{#each additional.imgs as |img|}}
<img class="icon" src="{{img}}">
{{/each}}
{{else}}
<img class="icon" src="{{additional.img}}">
{{/if}}
</div>
{{/if}}
</div>

View File

@@ -0,0 +1,37 @@
<section class="standard-form scrollable">
{{!-- GM-only: Enable/Disable Tactical Grid --}}
{{#if isGm}}
<fieldset>
{{formGroup tactical_grid_enabled.field value=tactical_grid_enabled.value localize=true}}
</fieldset>
{{/if}}
{{!-- Range Band Configuration --}}
<div class="range_band">
{{#each rangeBands as |band|}}
<fieldset>
<legend>
{{localize "l5r5e.tactical_grid.range_band" band=band.worldField.name}}
</legend>
{{!-- GM-only: Range start distance --}}
{{#if @root.isGm}}
{{formGroup band.worldField.fields.start
value=band.worldValue.start
localize=true
type="number"
readonly=(eq band.index 0)}}
{{/if}}
{{!-- Client: Visual settings --}}
{{formGroup band.clientFields.fields.color
value=band.clientValue.color
localize=true}}
{{formGroup band.clientFields.fields.alpha
value=band.clientValue.alpha
localize=true}}
</fieldset>
{{/each}}
</div>
</section>